summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2007-07-16 16:48:14 +0300
committerPanu Matilainen <pmatilai@redhat.com>2007-07-16 16:48:14 +0300
commit2cfd3012bfcb5c5c61bbaf662ef084e0ab789d79 (patch)
treee12ee52087506ac8c7a5eee83b17497d98df2d40 /db
parentb754fe19fd387ca5fe8e7c00ddaa25c898fa192f (diff)
downloadrpm-2cfd3012bfcb5c5c61bbaf662ef084e0ab789d79.tar.gz
rpm-2cfd3012bfcb5c5c61bbaf662ef084e0ab789d79.tar.bz2
rpm-2cfd3012bfcb5c5c61bbaf662ef084e0ab789d79.zip
Update internal BDB to version 4.5.20
Diffstat (limited to 'db')
-rw-r--r--db/LICENSE13
-rw-r--r--db/README4
-rw-r--r--db/btree/bt_compact.c2398
-rw-r--r--db/btree/bt_compare.c27
-rw-r--r--db/btree/bt_conv.c12
-rw-r--r--db/btree/bt_curadj.c243
-rw-r--r--db/btree/bt_cursor.c533
-rw-r--r--db/btree/bt_delete.c215
-rw-r--r--db/btree/bt_method.c39
-rw-r--r--db/btree/bt_open.c95
-rw-r--r--db/btree/bt_put.c193
-rw-r--r--db/btree/bt_rec.c675
-rw-r--r--db/btree/bt_reclaim.c28
-rw-r--r--db/btree/bt_recno.c214
-rw-r--r--db/btree/bt_rsearch.c93
-rw-r--r--db/btree/bt_search.c366
-rw-r--r--db/btree/bt_split.c306
-rw-r--r--db/btree/bt_stat.c67
-rw-r--r--db/btree/bt_upgrade.c13
-rw-r--r--db/btree/bt_verify.c460
-rw-r--r--db/btree/btree.src79
-rw-r--r--db/btree/btree_auto.c1207
-rw-r--r--db/btree/btree_autop.c276
-rwxr-xr-xdb/build_vxworks/BerkeleyDB20.wpj597
-rwxr-xr-xdb/build_vxworks/BerkeleyDB20small.wpj521
-rwxr-xr-xdb/build_vxworks/BerkeleyDB22.wpj597
-rwxr-xr-xdb/build_vxworks/BerkeleyDB22small.wpj521
-rw-r--r--db/build_vxworks/clib_port.h97
-rw-r--r--db/build_vxworks/db.h1289
-rw-r--r--db/build_vxworks/db_archive/db_archive.c47
-rwxr-xr-xdb/build_vxworks/db_archive/db_archive20.wpj2
-rwxr-xr-xdb/build_vxworks/db_archive/db_archive22.wpj2
-rw-r--r--db/build_vxworks/db_checkpoint/db_checkpoint.c88
-rwxr-xr-xdb/build_vxworks/db_checkpoint/db_checkpoint20.wpj2
-rwxr-xr-xdb/build_vxworks/db_checkpoint/db_checkpoint22.wpj2
-rw-r--r--db/build_vxworks/db_config.h173
-rw-r--r--db/build_vxworks/db_config_small.h173
-rw-r--r--db/build_vxworks/db_deadlock/db_deadlock.c90
-rwxr-xr-xdb/build_vxworks/db_deadlock/db_deadlock20.wpj2
-rwxr-xr-xdb/build_vxworks/db_deadlock/db_deadlock22.wpj2
-rw-r--r--db/build_vxworks/db_dump/db_dump.c52
-rwxr-xr-xdb/build_vxworks/db_dump/db_dump20.wpj2
-rwxr-xr-xdb/build_vxworks/db_dump/db_dump22.wpj2
-rw-r--r--db/build_vxworks/db_hotbackup/db_hotbackup.c839
-rwxr-xr-xdb/build_vxworks/db_hotbackup/db_hotbackup20.wpj158
-rwxr-xr-xdb/build_vxworks/db_hotbackup/db_hotbackup22.wpj192
-rw-r--r--db/build_vxworks/db_int.h251
-rw-r--r--db/build_vxworks/db_load/db_load.c312
-rwxr-xr-xdb/build_vxworks/db_load/db_load20.wpj2
-rwxr-xr-xdb/build_vxworks/db_load/db_load22.wpj2
-rw-r--r--db/build_vxworks/db_printlog/db_printlog.c286
-rwxr-xr-xdb/build_vxworks/db_printlog/db_printlog20.wpj146
-rwxr-xr-xdb/build_vxworks/db_printlog/db_printlog22.wpj146
-rw-r--r--db/build_vxworks/db_recover/db_recover.c62
-rwxr-xr-xdb/build_vxworks/db_recover/db_recover20.wpj2
-rwxr-xr-xdb/build_vxworks/db_recover/db_recover22.wpj2
-rw-r--r--db/build_vxworks/db_stat/db_stat.c162
-rwxr-xr-xdb/build_vxworks/db_stat/db_stat20.wpj2
-rwxr-xr-xdb/build_vxworks/db_stat/db_stat22.wpj2
-rw-r--r--db/build_vxworks/db_upgrade/db_upgrade.c59
-rwxr-xr-xdb/build_vxworks/db_upgrade/db_upgrade20.wpj2
-rwxr-xr-xdb/build_vxworks/db_upgrade/db_upgrade22.wpj2
-rw-r--r--db/build_vxworks/db_verify/db_verify.c59
-rwxr-xr-xdb/build_vxworks/db_verify/db_verify20.wpj2
-rwxr-xr-xdb/build_vxworks/db_verify/db_verify22.wpj2
-rw-r--r--db/build_vxworks/dbdemo/dbdemo.c6
-rwxr-xr-xdb/build_vxworks/dbdemo/dbdemo20.wpj2
-rwxr-xr-xdb/build_vxworks/dbdemo/dbdemo22.wpj2
-rw-r--r--db/build_windows/Berkeley_DB.dsw818
-rw-r--r--db/build_windows/app_dsp.src261
-rw-r--r--db/build_windows/build_all.dsp185
-rw-r--r--db/build_windows/clib_port.h97
-rw-r--r--db/build_windows/db.h2573
-rw-r--r--db/build_windows/db_archive.dsp256
-rw-r--r--db/build_windows/db_checkpoint.dsp256
-rw-r--r--db/build_windows/db_config.h479
-rw-r--r--db/build_windows/db_cxx.h1182
-rw-r--r--db/build_windows/db_deadlock.dsp256
-rw-r--r--db/build_windows/db_dll.dsp1204
-rw-r--r--db/build_windows/db_dump.dsp256
-rw-r--r--db/build_windows/db_hotbackup.dsp256
-rw-r--r--db/build_windows/db_int.h771
-rw-r--r--db/build_windows/db_java.dsp412
-rw-r--r--db/build_windows/db_java.dsp.postbuild17
-rw-r--r--db/build_windows/db_java_xa.dsp85
-rw-r--r--db/build_windows/db_java_xaj.mak21
-rw-r--r--db/build_windows/db_load.dsp256
-rw-r--r--db/build_windows/db_perf.dsp332
-rw-r--r--db/build_windows/db_printlog.dsp292
-rw-r--r--db/build_windows/db_recover.dsp256
-rw-r--r--db/build_windows/db_reptest.dsp348
-rw-r--r--db/build_windows/db_small.dsp958
-rw-r--r--db/build_windows/db_stat.dsp256
-rw-r--r--db/build_windows/db_static.dsp1158
-rw-r--r--db/build_windows/db_tcl.dsp328
-rw-r--r--db/build_windows/db_test.dsp296
-rw-r--r--db/build_windows/db_test.dsp.postbuild5
-rw-r--r--db/build_windows/db_upgrade.dsp256
-rw-r--r--db/build_windows/db_verify.dsp256
-rw-r--r--db/build_windows/dbkill.cpp131
-rw-r--r--db/build_windows/dynamic_dsp.src281
-rw-r--r--db/build_windows/ex_access.dsp256
-rw-r--r--db/build_windows/ex_btrec.dsp256
-rw-r--r--db/build_windows/ex_csvcode.dsp296
-rw-r--r--db/build_windows/ex_csvcode.dsp.postbuild5
-rw-r--r--db/build_windows/ex_csvload.dsp276
-rw-r--r--db/build_windows/ex_csvquery.dsp276
-rw-r--r--db/build_windows/ex_env.dsp256
-rw-r--r--db/build_windows/ex_lock.dsp256
-rw-r--r--db/build_windows/ex_mpool.dsp256
-rw-r--r--db/build_windows/ex_rep_base.dsp268
-rw-r--r--db/build_windows/ex_rep_mgr.dsp260
-rw-r--r--db/build_windows/ex_sequence.dsp256
-rw-r--r--db/build_windows/ex_tpcb.dsp256
-rw-r--r--db/build_windows/ex_txnguide.dsp256
-rw-r--r--db/build_windows/ex_txnguide_inmem.dsp256
-rw-r--r--db/build_windows/example_database_load.dsp260
-rw-r--r--db/build_windows/example_database_read.dsp260
-rw-r--r--db/build_windows/excxx_access.dsp256
-rw-r--r--db/build_windows/excxx_btrec.dsp256
-rw-r--r--db/build_windows/excxx_env.dsp256
-rw-r--r--db/build_windows/excxx_example_database_load.dsp260
-rw-r--r--db/build_windows/excxx_example_database_read.dsp260
-rw-r--r--db/build_windows/excxx_lock.dsp256
-rw-r--r--db/build_windows/excxx_mpool.dsp256
-rw-r--r--db/build_windows/excxx_repquote.dsp260
-rw-r--r--db/build_windows/excxx_sequence.dsp256
-rw-r--r--db/build_windows/excxx_tpcb.dsp256
-rw-r--r--db/build_windows/excxx_txnguide.dsp256
-rw-r--r--db/build_windows/excxx_txnguide_inmem.dsp256
-rw-r--r--db/build_windows/include.tcl28
-rw-r--r--db/build_windows/libdb.def177
-rw-r--r--db/build_windows/libdb.rc33
-rw-r--r--db/build_windows/libdb_tcl.def7
-rw-r--r--db/build_windows/libdbrc.src33
-rw-r--r--db/build_windows/srcfile_dsp.src4
-rw-r--r--db/build_windows/static_dsp.src235
-rw-r--r--db/build_windows/tm.dsp256
-rw-r--r--db/build_windows/win_db.h143
-rw-r--r--db/clib/abort.c29
-rw-r--r--db/clib/atoi.c50
-rw-r--r--db/clib/atol.c50
-rw-r--r--db/clib/ctime.c41
-rw-r--r--db/clib/getaddrinfo.c161
-rw-r--r--db/clib/getcwd.c18
-rw-r--r--db/clib/getopt.c12
-rw-r--r--db/clib/isalpha.c29
-rw-r--r--db/clib/isdigit.c29
-rw-r--r--db/clib/isprint.c29
-rw-r--r--db/clib/isspace.c27
-rw-r--r--db/clib/memcmp.c12
-rw-r--r--db/clib/memmove.c22
-rw-r--r--db/clib/printf.c143
-rw-r--r--db/clib/raise.c15
-rw-r--r--db/clib/rand.c27
-rw-r--r--db/clib/snprintf.c15
-rw-r--r--db/clib/strcasecmp.c6
-rw-r--r--db/clib/strcat.c53
-rw-r--r--db/clib/strchr.c57
-rw-r--r--db/clib/strdup.c10
-rw-r--r--db/clib/strerror.c190
-rw-r--r--db/clib/strncat.c69
-rw-r--r--db/clib/strncmp.c61
-rw-r--r--db/clib/strrchr.c58
-rw-r--r--db/clib/strsep.c80
-rw-r--r--db/clib/strtol.c16
-rw-r--r--db/clib/strtoul.c14
-rw-r--r--db/common/crypto_stub.c12
-rw-r--r--db/common/db_byteorder.c12
-rw-r--r--db/common/db_clock.c31
-rw-r--r--db/common/db_err.c516
-rw-r--r--db/common/db_getlong.c30
-rw-r--r--db/common/db_idspace.c12
-rw-r--r--db/common/db_log2.c10
-rw-r--r--db/common/mkpath.c69
-rw-r--r--db/common/util_arg.c10
-rw-r--r--db/common/util_cache.c14
-rw-r--r--db/common/util_log.c33
-rw-r--r--db/common/util_sig.c61
-rw-r--r--db/crypto/aes_method.c12
-rw-r--r--db/crypto/crypto.c171
-rw-r--r--db/crypto/crypto.html13
-rw-r--r--db/crypto/mersenne/mt19937db.c41
-rw-r--r--db/crypto/rijndael/rijndael-alg-fst.c2
-rw-r--r--db/crypto/rijndael/rijndael-alg-fst.h6
-rw-r--r--db/crypto/rijndael/rijndael-api-fst.c37
-rw-r--r--db/crypto/rijndael/rijndael-api-fst.h2
-rw-r--r--db/cxx/cxx_db.cpp52
-rw-r--r--db/cxx/cxx_dbc.cpp18
-rw-r--r--db/cxx/cxx_dbt.cpp10
-rw-r--r--db/cxx/cxx_env.cpp358
-rw-r--r--db/cxx/cxx_except.cpp50
-rw-r--r--db/cxx/cxx_lock.cpp9
-rw-r--r--db/cxx/cxx_logc.cpp10
-rw-r--r--db/cxx/cxx_mpool.cpp15
-rw-r--r--db/cxx/cxx_multi.cpp16
-rw-r--r--db/cxx/cxx_seq.cpp19
-rw-r--r--db/cxx/cxx_txn.cpp11
-rw-r--r--db/db/crdel.src52
-rw-r--r--db/db/crdel_auto.c746
-rw-r--r--db/db/crdel_autop.c174
-rw-r--r--db/db/crdel_rec.c256
-rw-r--r--db/db/db.c454
-rw-r--r--db/db/db.src115
-rw-r--r--db/db/db_am.c274
-rw-r--r--db/db/db_auto.c1191
-rw-r--r--db/db/db_autop.c384
-rw-r--r--db/db/db_cam.c859
-rw-r--r--db/db/db_cds.c173
-rw-r--r--db/db/db_conv.c30
-rw-r--r--db/db/db_dispatch.c340
-rw-r--r--db/db/db_dup.c24
-rw-r--r--db/db/db_iface.c1185
-rw-r--r--db/db/db_join.c145
-rw-r--r--db/db/db_meta.c757
-rw-r--r--db/db/db_method.c278
-rw-r--r--db/db/db_open.c243
-rw-r--r--db/db/db_overflow.c97
-rw-r--r--db/db/db_ovfl_vrfy.c37
-rw-r--r--db/db/db_pr.c392
-rw-r--r--db/db/db_rec.c1123
-rw-r--r--db/db/db_reclaim.c35
-rw-r--r--db/db/db_remove.c215
-rw-r--r--db/db/db_rename.c175
-rw-r--r--db/db/db_ret.c34
-rw-r--r--db/db/db_setid.c183
-rw-r--r--db/db/db_setlsn.c97
-rw-r--r--db/db/db_stati.c201
-rw-r--r--db/db/db_truncate.c103
-rw-r--r--db/db/db_upg.c86
-rw-r--r--db/db/db_upg_opd.c26
-rw-r--r--db/db/db_vrfy.c484
-rw-r--r--db/db/db_vrfy_stub.c14
-rw-r--r--db/db/db_vrfyutil.c156
-rw-r--r--db/db185/db185.c45
-rw-r--r--db/db185/db185_int.in14
-rw-r--r--db/db_archive/db_archive.c47
-rw-r--r--db/db_checkpoint/db_checkpoint.c88
-rw-r--r--db/db_deadlock/db_deadlock.c90
-rw-r--r--db/db_dump/db_dump.c52
-rw-r--r--db/db_dump185/db_dump185.c8
-rw-r--r--db/db_hotbackup/db_hotbackup.c824
-rw-r--r--db/db_load/db_load.c312
-rw-r--r--db/db_printlog/README2
-rw-r--r--db/db_printlog/commit.awk2
-rw-r--r--db/db_printlog/count.awk2
-rw-r--r--db/db_printlog/db_printlog.c286
-rw-r--r--db/db_printlog/dbname.awk3
-rw-r--r--db/db_printlog/fileid.awk2
-rw-r--r--db/db_printlog/logstat.awk2
-rw-r--r--db/db_printlog/pgno.awk2
-rw-r--r--db/db_printlog/range.awk2
-rw-r--r--db/db_printlog/rectype.awk2
-rw-r--r--db/db_printlog/status.awk4
-rw-r--r--db/db_printlog/txn.awk2
-rw-r--r--db/db_recover/db_recover.c62
-rw-r--r--db/db_stat/db_stat.c162
-rw-r--r--db/db_stat/dd.sh14
-rw-r--r--db/db_upgrade/db_upgrade.c59
-rw-r--r--db/db_verify/db_verify.c59
-rw-r--r--db/dbinc/btree.h77
-rw-r--r--db/dbinc/crypto.h16
-rw-r--r--db/dbinc/cxx_int.h13
-rw-r--r--db/dbinc/db.in1286
-rw-r--r--db/dbinc/db_185.in16
-rw-r--r--db/dbinc/db_am.h109
-rw-r--r--db/dbinc/db_cxx.in161
-rw-r--r--db/dbinc/db_dispatch.h28
-rw-r--r--db/dbinc/db_int.in255
-rw-r--r--db/dbinc/db_join.h13
-rw-r--r--db/dbinc/db_page.h36
-rw-r--r--db/dbinc/db_server_int.h37
-rw-r--r--db/dbinc/db_swap.h59
-rw-r--r--db/dbinc/db_upgrade.h13
-rw-r--r--db/dbinc/db_verify.h45
-rw-r--r--db/dbinc/debug.h45
-rw-r--r--db/dbinc/fop.h24
-rw-r--r--db/dbinc/globals.h18
-rw-r--r--db/dbinc/hash.h27
-rw-r--r--db/dbinc/hmac.h14
-rw-r--r--db/dbinc/lock.h54
-rw-r--r--db/dbinc/log.h182
-rw-r--r--db/dbinc/mp.h256
-rw-r--r--db/dbinc/mutex.h1023
-rw-r--r--db/dbinc/mutex_int.h851
-rw-r--r--db/dbinc/os.h88
-rw-r--r--db/dbinc/qam.h46
-rw-r--r--db/dbinc/queue.h1
-rw-r--r--db/dbinc/region.h213
-rw-r--r--db/dbinc/rep.h459
-rw-r--r--db/dbinc/repmgr.h375
-rw-r--r--db/dbinc/shqueue.h102
-rw-r--r--db/dbinc/tcl_db.h60
-rw-r--r--db/dbinc/txn.h103
-rw-r--r--db/dbinc/xa.h23
-rw-r--r--db/dbinc_auto/btree_auto.h64
-rw-r--r--db/dbinc_auto/btree_ext.h32
-rw-r--r--db/dbinc_auto/clib_ext.h65
-rw-r--r--db/dbinc_auto/common_ext.h21
-rw-r--r--db/dbinc_auto/crdel_auto.h32
-rw-r--r--db/dbinc_auto/db_auto.h94
-rw-r--r--db/dbinc_auto/db_ext.h105
-rw-r--r--db/dbinc_auto/dbreg_auto.h2
-rw-r--r--db/dbinc_auto/dbreg_ext.h9
-rw-r--r--db/dbinc_auto/env_ext.h71
-rw-r--r--db/dbinc_auto/ext_def.in2
-rw-r--r--db/dbinc_auto/fileops_auto.h10
-rw-r--r--db/dbinc_auto/hash_auto.h48
-rw-r--r--db/dbinc_auto/hash_ext.h10
-rw-r--r--db/dbinc_auto/hmac_ext.h4
-rw-r--r--db/dbinc_auto/int_def.in799
-rw-r--r--db/dbinc_auto/lock_ext.h25
-rw-r--r--db/dbinc_auto/log_ext.h29
-rw-r--r--db/dbinc_auto/mp_ext.h39
-rw-r--r--db/dbinc_auto/mutex_ext.h64
-rw-r--r--db/dbinc_auto/os_ext.h31
-rw-r--r--db/dbinc_auto/qam_auto.h10
-rw-r--r--db/dbinc_auto/qam_ext.h5
-rw-r--r--db/dbinc_auto/rep_auto.h7
-rw-r--r--db/dbinc_auto/rep_ext.h83
-rw-r--r--db/dbinc_auto/repmgr_ext.h87
-rw-r--r--db/dbinc_auto/rpc_client_ext.h218
-rw-r--r--db/dbinc_auto/rpc_server_ext.h137
-rw-r--r--db/dbinc_auto/tcl_ext.h15
-rw-r--r--db/dbinc_auto/txn_auto.h32
-rw-r--r--db/dbinc_auto/txn_ext.h40
-rw-r--r--db/dbinc_auto/xa_ext.h2
-rw-r--r--db/dbm/dbm.c45
-rw-r--r--db/dbreg/dbreg.c296
-rw-r--r--db/dbreg/dbreg.src15
-rw-r--r--db/dbreg/dbreg_auto.c53
-rw-r--r--db/dbreg/dbreg_autop.c19
-rw-r--r--db/dbreg/dbreg_rec.c87
-rw-r--r--db/dbreg/dbreg_stat.c58
-rw-r--r--db/dbreg/dbreg_util.c212
-rw-r--r--db/dist/Makefile.in739
-rw-r--r--db/dist/RELEASE8
-rw-r--r--db/dist/aclocal/config.ac42
-rw-r--r--db/dist/aclocal/libtool.ac1326
-rw-r--r--db/dist/aclocal/mutex.ac163
-rw-r--r--db/dist/aclocal/options.ac57
-rw-r--r--db/dist/aclocal/programs.ac85
-rw-r--r--db/dist/aclocal/rpc.ac14
-rw-r--r--db/dist/aclocal/sequence.ac59
-rw-r--r--db/dist/aclocal/sosuffix.ac2
-rw-r--r--db/dist/aclocal/tcl.ac22
-rw-r--r--db/dist/aclocal/types.ac14
-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.ac4
-rw-r--r--db/dist/aclocal_java/ac_prog_jar.ac2
-rw-r--r--db/dist/aclocal_java/ac_prog_java.ac4
-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/buildrel45
-rw-r--r--db/dist/clib_port.h97
-rwxr-xr-xdb/dist/config.guess595
-rw-r--r--db/dist/config.hin174
-rwxr-xr-xdb/dist/config.sub143
-rwxr-xr-xdb/dist/configure23080
-rw-r--r--db/dist/configure.ac190
-rw-r--r--db/dist/errno.h186
-rw-r--r--db/dist/gen_inc.awk18
-rw-r--r--db/dist/gen_rec.awk165
-rw-r--r--db/dist/gen_rpc.awk470
-rw-r--r--db/dist/ltmain.sh1043
-rw-r--r--db/dist/pubdef.in813
-rwxr-xr-x[-rw-r--r--]db/dist/s_all6
-rwxr-xr-xdb/dist/s_config17
-rwxr-xr-x[-rw-r--r--]db/dist/s_crypto6
-rwxr-xr-xdb/dist/s_include13
-rwxr-xr-xdb/dist/s_java2
-rwxr-xr-xdb/dist/s_java_const2
-rwxr-xr-xdb/dist/s_java_stat82
-rwxr-xr-xdb/dist/s_java_swig22
-rw-r--r--db/dist/s_je2db2
-rwxr-xr-xdb/dist/s_perm8
-rwxr-xr-xdb/dist/s_readme4
-rwxr-xr-xdb/dist/s_recover6
-rwxr-xr-x[-rw-r--r--]db/dist/s_rpc2
-rwxr-xr-xdb/dist/s_symlink7
-rwxr-xr-xdb/dist/s_tags13
-rwxr-xr-xdb/dist/s_test22
-rwxr-xr-x[-rw-r--r--]db/dist/s_vxworks111
-rwxr-xr-xdb/dist/s_windows197
-rwxr-xr-xdb/dist/s_windows_dsp144
-rw-r--r--db/dist/s_winmsi134
-rw-r--r--db/dist/srcfiles.in210
-rw-r--r--db/dist/tags5245
-rw-r--r--db/dist/template/db_server_proc1045
-rw-r--r--db/dist/template/gen_client_ret299
-rw-r--r--db/dist/template/rec_btree192
-rw-r--r--db/dist/template/rec_crdel204
-rw-r--r--db/dist/template/rec_ctemp18
-rw-r--r--db/dist/template/rec_db316
-rw-r--r--db/dist/template/rec_dbreg6
-rw-r--r--db/dist/template/rec_fileops6
-rw-r--r--db/dist/template/rec_hash310
-rw-r--r--db/dist/template/rec_qam238
-rw-r--r--db/dist/template/rec_rep6
-rw-r--r--db/dist/template/rec_txn178
-rw-r--r--db/dist/vx_2.0/wpj.in24
-rw-r--r--db/dist/vx_2.2/wpj.in24
-rwxr-xr-xdb/dist/vx_buildcd6
-rw-r--r--db/dist/vx_config.in167
-rw-r--r--db/dist/vx_setup/LICENSE.TXT4
-rw-r--r--db/dist/vx_setup/README.in4
-rw-r--r--db/dist/vx_setup/SETUP.BMPbin187962 -> 523208 bytes
-rw-r--r--db/dist/vx_setup/vx_setup.in6
-rw-r--r--db/dist/win_config.in162
-rw-r--r--db/dist/win_db.in81
-rw-r--r--db/dist/win_exports.in68
-rw-r--r--db/dist/winmsi/dbcorewix.in196
-rw-r--r--db/dist/winmsi/dbvarsbat.in25
-rw-r--r--db/dist/winmsi/dbwix.m4833
-rw-r--r--db/dist/winmsi/environment.in23
-rw-r--r--db/dist/winmsi/features.in33
-rw-r--r--db/dist/winmsi/files.in91
-rw-r--r--db/dist/winmsi/images/caticon.ibdbin0 -> 1406 bytes
-rw-r--r--db/dist/winmsi/images/foldernew.ibdbin0 -> 1078 bytes
-rw-r--r--db/dist/winmsi/images/folderup.ibdbin0 -> 1078 bytes
-rw-r--r--db/dist/winmsi/images/oracle.jpgbin0 -> 10496 bytes
-rw-r--r--db/dist/winmsi/images/topstripe.ibdbin0 -> 1827 bytes
-rw-r--r--db/dist/winmsi/images/webicon.icobin0 -> 318 bytes
-rw-r--r--db/dist/winmsi/links.in17
-rw-r--r--db/dist/winmsi/s_winmsi.fcn1435
-rw-r--r--db/dist/winmsi/winbuild.bat113
-rw-r--r--db/docs/api_c/api_core.html66
-rw-r--r--db/docs/api_c/c_pindex.html163
-rw-r--r--db/docs/api_c/db_associate.html50
-rw-r--r--db/docs/api_c/db_class.html22
-rw-r--r--db/docs/api_c/db_close.html4
-rw-r--r--db/docs/api_c/db_compact.html140
-rw-r--r--db/docs/api_c/db_cursor.html50
-rw-r--r--db/docs/api_c/db_del.html28
-rw-r--r--db/docs/api_c/db_err.html25
-rw-r--r--db/docs/api_c/db_fd.html12
-rw-r--r--db/docs/api_c/db_get.html41
-rw-r--r--db/docs/api_c/db_get_byteswapped.html4
-rw-r--r--db/docs/api_c/db_get_mpf.html21
-rw-r--r--db/docs/api_c/db_get_type.html6
-rw-r--r--db/docs/api_c/db_getenv.html8
-rw-r--r--db/docs/api_c/db_join.html11
-rw-r--r--db/docs/api_c/db_key_range.html17
-rw-r--r--db/docs/api_c/db_list.html12
-rw-r--r--db/docs/api_c/db_open.html74
-rw-r--r--db/docs/api_c/db_put.html29
-rw-r--r--db/docs/api_c/db_remove.html11
-rw-r--r--db/docs/api_c/db_rename.html11
-rw-r--r--db/docs/api_c/db_set_alloc.html4
-rw-r--r--db/docs/api_c/db_set_append_recno.html10
-rw-r--r--db/docs/api_c/db_set_bt_compare.html4
-rw-r--r--db/docs/api_c/db_set_bt_minkey.html4
-rw-r--r--db/docs/api_c/db_set_bt_prefix.html4
-rw-r--r--db/docs/api_c/db_set_cachesize.html35
-rw-r--r--db/docs/api_c/db_set_dup_compare.html4
-rw-r--r--db/docs/api_c/db_set_encrypt.html4
-rw-r--r--db/docs/api_c/db_set_errcall.html13
-rw-r--r--db/docs/api_c/db_set_errfile.html20
-rw-r--r--db/docs/api_c/db_set_errpfx.html9
-rw-r--r--db/docs/api_c/db_set_feedback.html10
-rw-r--r--db/docs/api_c/db_set_flags.html4
-rw-r--r--db/docs/api_c/db_set_h_ffactor.html4
-rw-r--r--db/docs/api_c/db_set_h_hash.html4
-rw-r--r--db/docs/api_c/db_set_h_nelem.html4
-rw-r--r--db/docs/api_c/db_set_lorder.html4
-rw-r--r--db/docs/api_c/db_set_msgcall.html13
-rw-r--r--db/docs/api_c/db_set_msgfile.html20
-rw-r--r--db/docs/api_c/db_set_pagesize.html12
-rw-r--r--db/docs/api_c/db_set_q_extentsize.html4
-rw-r--r--db/docs/api_c/db_set_re_delim.html4
-rw-r--r--db/docs/api_c/db_set_re_len.html4
-rw-r--r--db/docs/api_c/db_set_re_pad.html4
-rw-r--r--db/docs/api_c/db_set_re_source.html9
-rw-r--r--db/docs/api_c/db_stat.html45
-rw-r--r--db/docs/api_c/db_sync.html5
-rw-r--r--db/docs/api_c/db_truncate.html29
-rw-r--r--db/docs/api_c/db_upgrade.html4
-rw-r--r--db/docs/api_c/db_verify.html13
-rw-r--r--db/docs/api_c/dbc_class.html4
-rw-r--r--db/docs/api_c/dbc_close.html6
-rw-r--r--db/docs/api_c/dbc_count.html7
-rw-r--r--db/docs/api_c/dbc_del.html7
-rw-r--r--db/docs/api_c/dbc_dup.html5
-rw-r--r--db/docs/api_c/dbc_get.html17
-rw-r--r--db/docs/api_c/dbc_list.html8
-rw-r--r--db/docs/api_c/dbc_put.html7
-rw-r--r--db/docs/api_c/dbm.html4
-rw-r--r--db/docs/api_c/dbt_bulk.html60
-rw-r--r--db/docs/api_c/dbt_class.html4
-rw-r--r--db/docs/api_c/dbt_package.html4
-rw-r--r--db/docs/api_c/env_cdsgroup_begin.html60
-rw-r--r--db/docs/api_c/env_class.html18
-rw-r--r--db/docs/api_c/env_close.html4
-rw-r--r--db/docs/api_c/env_dbremove.html22
-rw-r--r--db/docs/api_c/env_dbrename.html22
-rw-r--r--db/docs/api_c/env_err.html25
-rw-r--r--db/docs/api_c/env_event_notify.html93
-rw-r--r--db/docs/api_c/env_failchk.html92
-rw-r--r--db/docs/api_c/env_fileid_reset.html72
-rw-r--r--db/docs/api_c/env_list.html19
-rw-r--r--db/docs/api_c/env_lsn_reset.html78
-rw-r--r--db/docs/api_c/env_open.html101
-rw-r--r--db/docs/api_c/env_remove.html9
-rw-r--r--db/docs/api_c/env_set_alloc.html4
-rw-r--r--db/docs/api_c/env_set_app_dispatch.html4
-rw-r--r--db/docs/api_c/env_set_cachesize.html43
-rw-r--r--db/docs/api_c/env_set_data_dir.html17
-rw-r--r--db/docs/api_c/env_set_encrypt.html4
-rw-r--r--db/docs/api_c/env_set_errcall.html13
-rw-r--r--db/docs/api_c/env_set_errfile.html20
-rw-r--r--db/docs/api_c/env_set_errpfx.html9
-rw-r--r--db/docs/api_c/env_set_feedback.html10
-rw-r--r--db/docs/api_c/env_set_flags.html102
-rw-r--r--db/docs/api_c/env_set_isalive.html83
-rw-r--r--db/docs/api_c/env_set_lg_bsize.html25
-rw-r--r--db/docs/api_c/env_set_lg_dir.html17
-rw-r--r--db/docs/api_c/env_set_lg_max.html12
-rw-r--r--db/docs/api_c/env_set_lg_mode.html89
-rw-r--r--db/docs/api_c/env_set_lg_regionmax.html21
-rw-r--r--db/docs/api_c/env_set_lk_conflicts.html8
-rw-r--r--db/docs/api_c/env_set_lk_detect.html21
-rw-r--r--db/docs/api_c/env_set_lk_max_lockers.html12
-rw-r--r--db/docs/api_c/env_set_lk_max_locks.html12
-rw-r--r--db/docs/api_c/env_set_lk_max_objects.html12
-rw-r--r--db/docs/api_c/env_set_mp_mmapsize.html12
-rw-r--r--db/docs/api_c/env_set_msgcall.html13
-rw-r--r--db/docs/api_c/env_set_msgfile.html20
-rw-r--r--db/docs/api_c/env_set_rpc_server.html4
-rw-r--r--db/docs/api_c/env_set_shm_key.html12
-rw-r--r--db/docs/api_c/env_set_thread_count.html93
-rw-r--r--db/docs/api_c/env_set_thread_id.html123
-rw-r--r--db/docs/api_c/env_set_thread_id_string.html85
-rw-r--r--db/docs/api_c/env_set_timeout.html28
-rw-r--r--db/docs/api_c/env_set_tmp_dir.html17
-rw-r--r--db/docs/api_c/env_set_tx_max.html22
-rw-r--r--db/docs/api_c/env_set_tx_timestamp.html4
-rw-r--r--db/docs/api_c/env_set_verbose.html31
-rw-r--r--db/docs/api_c/env_stat.html15
-rw-r--r--db/docs/api_c/env_strerror.html4
-rw-r--r--db/docs/api_c/env_version.html4
-rw-r--r--db/docs/api_c/frame.html6
-rw-r--r--db/docs/api_c/hsearch.html4
-rw-r--r--db/docs/api_c/lock_class.html4
-rw-r--r--db/docs/api_c/lock_detect.html4
-rw-r--r--db/docs/api_c/lock_get.html4
-rw-r--r--db/docs/api_c/lock_id.html6
-rw-r--r--db/docs/api_c/lock_id_free.html4
-rw-r--r--db/docs/api_c/lock_list.html7
-rw-r--r--db/docs/api_c/lock_put.html4
-rw-r--r--db/docs/api_c/lock_stat.html21
-rw-r--r--db/docs/api_c/lock_vec.html4
-rw-r--r--db/docs/api_c/log_archive.html4
-rw-r--r--db/docs/api_c/log_compare.html4
-rw-r--r--db/docs/api_c/log_cursor.html6
-rw-r--r--db/docs/api_c/log_file.html6
-rw-r--r--db/docs/api_c/log_flush.html4
-rw-r--r--db/docs/api_c/log_list.html8
-rw-r--r--db/docs/api_c/log_printf.html69
-rw-r--r--db/docs/api_c/log_put.html6
-rw-r--r--db/docs/api_c/log_stat.html25
-rw-r--r--db/docs/api_c/logc_class.html4
-rw-r--r--db/docs/api_c/logc_close.html4
-rw-r--r--db/docs/api_c/logc_get.html4
-rw-r--r--db/docs/api_c/lsn_class.html4
-rw-r--r--db/docs/api_c/memp_fclose.html4
-rw-r--r--db/docs/api_c/memp_fcreate.html4
-rw-r--r--db/docs/api_c/memp_fget.html36
-rw-r--r--db/docs/api_c/memp_fopen.html13
-rw-r--r--db/docs/api_c/memp_fput.html19
-rw-r--r--db/docs/api_c/memp_fset.html9
-rw-r--r--db/docs/api_c/memp_fsync.html4
-rw-r--r--db/docs/api_c/memp_list.html12
-rw-r--r--db/docs/api_c/memp_maxwrite.html37
-rw-r--r--db/docs/api_c/memp_openfd.html32
-rw-r--r--db/docs/api_c/memp_register.html4
-rw-r--r--db/docs/api_c/memp_set_clear_len.html21
-rw-r--r--db/docs/api_c/memp_set_fileid.html10
-rw-r--r--db/docs/api_c/memp_set_flags.html10
-rw-r--r--db/docs/api_c/memp_set_ftype.html17
-rw-r--r--db/docs/api_c/memp_set_lsn_offset.html17
-rw-r--r--db/docs/api_c/memp_set_maxsize.html12
-rw-r--r--db/docs/api_c/memp_set_pgcookie.html17
-rw-r--r--db/docs/api_c/memp_set_priority.html8
-rw-r--r--db/docs/api_c/memp_stat.html41
-rw-r--r--db/docs/api_c/memp_sync.html14
-rw-r--r--db/docs/api_c/memp_trickle.html6
-rw-r--r--db/docs/api_c/mempfile_class.html4
-rw-r--r--db/docs/api_c/mutex_alloc.html74
-rw-r--r--db/docs/api_c/mutex_free.html60
-rw-r--r--db/docs/api_c/mutex_list.html29
-rw-r--r--db/docs/api_c/mutex_lock.html62
-rw-r--r--db/docs/api_c/mutex_set_align.html94
-rw-r--r--db/docs/api_c/mutex_set_max.html158
-rw-r--r--db/docs/api_c/mutex_set_tas_spins.html89
-rw-r--r--db/docs/api_c/mutex_stat.html113
-rw-r--r--db/docs/api_c/mutex_unlock.html61
-rw-r--r--db/docs/api_c/object.html3
-rw-r--r--db/docs/api_c/rep_config.html106
-rw-r--r--db/docs/api_c/rep_elect.html100
-rw-r--r--db/docs/api_c/rep_limit.html40
-rw-r--r--db/docs/api_c/rep_list.html26
-rw-r--r--db/docs/api_c/rep_message.html38
-rw-r--r--db/docs/api_c/rep_nsites.html77
-rw-r--r--db/docs/api_c/rep_priority.html75
-rw-r--r--db/docs/api_c/rep_start.html37
-rw-r--r--db/docs/api_c/rep_stat.html92
-rw-r--r--db/docs/api_c/rep_sync.html62
-rw-r--r--db/docs/api_c/rep_timeout.html97
-rw-r--r--db/docs/api_c/rep_transport.html50
-rw-r--r--db/docs/api_c/repmgr_ack_policy.html100
-rw-r--r--db/docs/api_c/repmgr_local_site.html56
-rw-r--r--db/docs/api_c/repmgr_remote_site.html68
-rw-r--r--db/docs/api_c/repmgr_site_list.html77
-rw-r--r--db/docs/api_c/repmgr_start.html96
-rw-r--r--db/docs/api_c/seq_class.html4
-rw-r--r--db/docs/api_c/seq_close.html4
-rw-r--r--db/docs/api_c/seq_get.html53
-rw-r--r--db/docs/api_c/seq_initial_value.html60
-rw-r--r--db/docs/api_c/seq_list.html8
-rw-r--r--db/docs/api_c/seq_open.html33
-rw-r--r--db/docs/api_c/seq_remove.html25
-rw-r--r--db/docs/api_c/seq_set_cachesize.html4
-rw-r--r--db/docs/api_c/seq_set_flags.html4
-rw-r--r--db/docs/api_c/seq_set_range.html4
-rw-r--r--db/docs/api_c/seq_stat.html4
-rw-r--r--db/docs/api_c/set_func_close.html4
-rw-r--r--db/docs/api_c/set_func_dirfree.html4
-rw-r--r--db/docs/api_c/set_func_dirlist.html7
-rw-r--r--db/docs/api_c/set_func_exists.html4
-rw-r--r--db/docs/api_c/set_func_free.html4
-rw-r--r--db/docs/api_c/set_func_fsync.html4
-rw-r--r--db/docs/api_c/set_func_ftruncate.html4
-rw-r--r--db/docs/api_c/set_func_ioinfo.html4
-rw-r--r--db/docs/api_c/set_func_malloc.html4
-rw-r--r--db/docs/api_c/set_func_map.html4
-rw-r--r--db/docs/api_c/set_func_open.html4
-rw-r--r--db/docs/api_c/set_func_pread.html4
-rw-r--r--db/docs/api_c/set_func_pwrite.html4
-rw-r--r--db/docs/api_c/set_func_read.html4
-rw-r--r--db/docs/api_c/set_func_realloc.html4
-rw-r--r--db/docs/api_c/set_func_rename.html4
-rw-r--r--db/docs/api_c/set_func_seek.html4
-rw-r--r--db/docs/api_c/set_func_sleep.html4
-rw-r--r--db/docs/api_c/set_func_unlink.html4
-rw-r--r--db/docs/api_c/set_func_unmap.html4
-rw-r--r--db/docs/api_c/set_func_write.html7
-rw-r--r--db/docs/api_c/set_func_yield.html4
-rw-r--r--db/docs/api_c/txn_abort.html4
-rw-r--r--db/docs/api_c/txn_begin.html25
-rw-r--r--db/docs/api_c/txn_checkpoint.html12
-rw-r--r--db/docs/api_c/txn_class.html8
-rw-r--r--db/docs/api_c/txn_commit.html4
-rw-r--r--db/docs/api_c/txn_discard.html4
-rw-r--r--db/docs/api_c/txn_id.html4
-rw-r--r--db/docs/api_c/txn_list.html7
-rw-r--r--db/docs/api_c/txn_prepare.html4
-rw-r--r--db/docs/api_c/txn_recover.html6
-rw-r--r--db/docs/api_c/txn_set_name.html76
-rw-r--r--db/docs/api_c/txn_set_timeout.html10
-rw-r--r--db/docs/api_c/txn_stat.html46
-rw-r--r--db/docs/api_cxx/api_core.html66
-rw-r--r--db/docs/api_cxx/cxx_pindex.html163
-rw-r--r--db/docs/api_cxx/db_associate.html52
-rw-r--r--db/docs/api_cxx/db_class.html12
-rw-r--r--db/docs/api_cxx/db_close.html4
-rw-r--r--db/docs/api_cxx/db_compact.html146
-rw-r--r--db/docs/api_cxx/db_cursor.html50
-rw-r--r--db/docs/api_cxx/db_del.html28
-rw-r--r--db/docs/api_cxx/db_err.html25
-rw-r--r--db/docs/api_cxx/db_fd.html12
-rw-r--r--db/docs/api_cxx/db_get.html41
-rw-r--r--db/docs/api_cxx/db_get_byteswapped.html4
-rw-r--r--db/docs/api_cxx/db_get_mpf.html10
-rw-r--r--db/docs/api_cxx/db_get_type.html6
-rw-r--r--db/docs/api_cxx/db_getenv.html8
-rw-r--r--db/docs/api_cxx/db_join.html11
-rw-r--r--db/docs/api_cxx/db_key_range.html17
-rw-r--r--db/docs/api_cxx/db_list.html12
-rw-r--r--db/docs/api_cxx/db_open.html74
-rw-r--r--db/docs/api_cxx/db_put.html29
-rw-r--r--db/docs/api_cxx/db_remove.html11
-rw-r--r--db/docs/api_cxx/db_rename.html11
-rw-r--r--db/docs/api_cxx/db_set_alloc.html4
-rw-r--r--db/docs/api_cxx/db_set_append_recno.html13
-rw-r--r--db/docs/api_cxx/db_set_bt_compare.html4
-rw-r--r--db/docs/api_cxx/db_set_bt_minkey.html4
-rw-r--r--db/docs/api_cxx/db_set_bt_prefix.html4
-rw-r--r--db/docs/api_cxx/db_set_cachesize.html35
-rw-r--r--db/docs/api_cxx/db_set_dup_compare.html4
-rw-r--r--db/docs/api_cxx/db_set_encrypt.html4
-rw-r--r--db/docs/api_cxx/db_set_errcall.html13
-rw-r--r--db/docs/api_cxx/db_set_errfile.html21
-rw-r--r--db/docs/api_cxx/db_set_error_stream.html11
-rw-r--r--db/docs/api_cxx/db_set_errpfx.html9
-rw-r--r--db/docs/api_cxx/db_set_feedback.html13
-rw-r--r--db/docs/api_cxx/db_set_flags.html4
-rw-r--r--db/docs/api_cxx/db_set_h_ffactor.html4
-rw-r--r--db/docs/api_cxx/db_set_h_hash.html4
-rw-r--r--db/docs/api_cxx/db_set_h_nelem.html4
-rw-r--r--db/docs/api_cxx/db_set_lorder.html4
-rw-r--r--db/docs/api_cxx/db_set_msg_stream.html11
-rw-r--r--db/docs/api_cxx/db_set_msgcall.html16
-rw-r--r--db/docs/api_cxx/db_set_msgfile.html21
-rw-r--r--db/docs/api_cxx/db_set_pagesize.html12
-rw-r--r--db/docs/api_cxx/db_set_q_extentsize.html4
-rw-r--r--db/docs/api_cxx/db_set_re_delim.html4
-rw-r--r--db/docs/api_cxx/db_set_re_len.html4
-rw-r--r--db/docs/api_cxx/db_set_re_pad.html4
-rw-r--r--db/docs/api_cxx/db_set_re_source.html9
-rw-r--r--db/docs/api_cxx/db_stat.html45
-rw-r--r--db/docs/api_cxx/db_sync.html5
-rw-r--r--db/docs/api_cxx/db_truncate.html29
-rw-r--r--db/docs/api_cxx/db_upgrade.html4
-rw-r--r--db/docs/api_cxx/db_verify.html13
-rw-r--r--db/docs/api_cxx/dbc_class.html4
-rw-r--r--db/docs/api_cxx/dbc_close.html6
-rw-r--r--db/docs/api_cxx/dbc_count.html7
-rw-r--r--db/docs/api_cxx/dbc_del.html7
-rw-r--r--db/docs/api_cxx/dbc_dup.html5
-rw-r--r--db/docs/api_cxx/dbc_get.html17
-rw-r--r--db/docs/api_cxx/dbc_list.html8
-rw-r--r--db/docs/api_cxx/dbc_put.html7
-rw-r--r--db/docs/api_cxx/dbt_bulk_class.html4
-rw-r--r--db/docs/api_cxx/dbt_class.html15
-rw-r--r--db/docs/api_cxx/dbt_package.html4
-rw-r--r--db/docs/api_cxx/deadlock_class.html4
-rw-r--r--db/docs/api_cxx/env_cdsgroup_begin.html59
-rw-r--r--db/docs/api_cxx/env_class.html8
-rw-r--r--db/docs/api_cxx/env_close.html4
-rw-r--r--db/docs/api_cxx/env_dbremove.html22
-rw-r--r--db/docs/api_cxx/env_dbrename.html22
-rw-r--r--db/docs/api_cxx/env_err.html25
-rw-r--r--db/docs/api_cxx/env_event_notify.html94
-rw-r--r--db/docs/api_cxx/env_failchk.html96
-rw-r--r--db/docs/api_cxx/env_fileid_reset.html76
-rw-r--r--db/docs/api_cxx/env_list.html19
-rw-r--r--db/docs/api_cxx/env_lsn_reset.html82
-rw-r--r--db/docs/api_cxx/env_open.html101
-rw-r--r--db/docs/api_cxx/env_remove.html9
-rw-r--r--db/docs/api_cxx/env_set_alloc.html4
-rw-r--r--db/docs/api_cxx/env_set_app_dispatch.html4
-rw-r--r--db/docs/api_cxx/env_set_cachesize.html43
-rw-r--r--db/docs/api_cxx/env_set_data_dir.html17
-rw-r--r--db/docs/api_cxx/env_set_encrypt.html4
-rw-r--r--db/docs/api_cxx/env_set_errcall.html13
-rw-r--r--db/docs/api_cxx/env_set_errfile.html21
-rw-r--r--db/docs/api_cxx/env_set_error_stream.html11
-rw-r--r--db/docs/api_cxx/env_set_errpfx.html9
-rw-r--r--db/docs/api_cxx/env_set_feedback.html13
-rw-r--r--db/docs/api_cxx/env_set_flags.html102
-rw-r--r--db/docs/api_cxx/env_set_isalive.html86
-rw-r--r--db/docs/api_cxx/env_set_lg_bsize.html25
-rw-r--r--db/docs/api_cxx/env_set_lg_dir.html17
-rw-r--r--db/docs/api_cxx/env_set_lg_max.html12
-rw-r--r--db/docs/api_cxx/env_set_lg_mode.html91
-rw-r--r--db/docs/api_cxx/env_set_lg_regionmax.html21
-rw-r--r--db/docs/api_cxx/env_set_lk_conflicts.html8
-rw-r--r--db/docs/api_cxx/env_set_lk_detect.html21
-rw-r--r--db/docs/api_cxx/env_set_lk_max_lockers.html12
-rw-r--r--db/docs/api_cxx/env_set_lk_max_locks.html12
-rw-r--r--db/docs/api_cxx/env_set_lk_max_objects.html12
-rw-r--r--db/docs/api_cxx/env_set_mp_mmapsize.html12
-rw-r--r--db/docs/api_cxx/env_set_msg_stream.html11
-rw-r--r--db/docs/api_cxx/env_set_msgcall.html16
-rw-r--r--db/docs/api_cxx/env_set_msgfile.html21
-rw-r--r--db/docs/api_cxx/env_set_rpc_server.html4
-rw-r--r--db/docs/api_cxx/env_set_shm_key.html12
-rw-r--r--db/docs/api_cxx/env_set_thread_count.html98
-rw-r--r--db/docs/api_cxx/env_set_thread_id.html126
-rw-r--r--db/docs/api_cxx/env_set_thread_id_string.html88
-rw-r--r--db/docs/api_cxx/env_set_timeout.html28
-rw-r--r--db/docs/api_cxx/env_set_tmp_dir.html17
-rw-r--r--db/docs/api_cxx/env_set_tx_max.html22
-rw-r--r--db/docs/api_cxx/env_set_tx_timestamp.html4
-rw-r--r--db/docs/api_cxx/env_set_verbose.html31
-rw-r--r--db/docs/api_cxx/env_stat.html15
-rw-r--r--db/docs/api_cxx/env_strerror.html4
-rw-r--r--db/docs/api_cxx/env_version.html4
-rw-r--r--db/docs/api_cxx/exc_package.html4
-rw-r--r--db/docs/api_cxx/except_class.html4
-rw-r--r--db/docs/api_cxx/frame.html6
-rw-r--r--db/docs/api_cxx/lock_class.html4
-rw-r--r--db/docs/api_cxx/lock_detect.html4
-rw-r--r--db/docs/api_cxx/lock_get.html4
-rw-r--r--db/docs/api_cxx/lock_id.html6
-rw-r--r--db/docs/api_cxx/lock_id_free.html4
-rw-r--r--db/docs/api_cxx/lock_list.html7
-rw-r--r--db/docs/api_cxx/lock_put.html4
-rw-r--r--db/docs/api_cxx/lock_stat.html21
-rw-r--r--db/docs/api_cxx/lock_vec.html4
-rw-r--r--db/docs/api_cxx/lockng_class.html4
-rw-r--r--db/docs/api_cxx/log_archive.html4
-rw-r--r--db/docs/api_cxx/log_compare.html4
-rw-r--r--db/docs/api_cxx/log_cursor.html6
-rw-r--r--db/docs/api_cxx/log_file.html6
-rw-r--r--db/docs/api_cxx/log_flush.html4
-rw-r--r--db/docs/api_cxx/log_list.html8
-rw-r--r--db/docs/api_cxx/log_printf.html73
-rw-r--r--db/docs/api_cxx/log_put.html6
-rw-r--r--db/docs/api_cxx/log_stat.html25
-rw-r--r--db/docs/api_cxx/logc_class.html4
-rw-r--r--db/docs/api_cxx/logc_close.html4
-rw-r--r--db/docs/api_cxx/logc_get.html4
-rw-r--r--db/docs/api_cxx/lsn_class.html4
-rw-r--r--db/docs/api_cxx/memp_class.html4
-rw-r--r--db/docs/api_cxx/memp_fclose.html4
-rw-r--r--db/docs/api_cxx/memp_fcreate.html4
-rw-r--r--db/docs/api_cxx/memp_fget.html37
-rw-r--r--db/docs/api_cxx/memp_fopen.html13
-rw-r--r--db/docs/api_cxx/memp_fput.html19
-rw-r--r--db/docs/api_cxx/memp_fset.html9
-rw-r--r--db/docs/api_cxx/memp_fsync.html4
-rw-r--r--db/docs/api_cxx/memp_list.html12
-rw-r--r--db/docs/api_cxx/memp_maxwrite.html37
-rw-r--r--db/docs/api_cxx/memp_openfd.html32
-rw-r--r--db/docs/api_cxx/memp_register.html4
-rw-r--r--db/docs/api_cxx/memp_set_clear_len.html22
-rw-r--r--db/docs/api_cxx/memp_set_fileid.html10
-rw-r--r--db/docs/api_cxx/memp_set_flags.html10
-rw-r--r--db/docs/api_cxx/memp_set_ftype.html18
-rw-r--r--db/docs/api_cxx/memp_set_lsn_offset.html18
-rw-r--r--db/docs/api_cxx/memp_set_maxsize.html12
-rw-r--r--db/docs/api_cxx/memp_set_pgcookie.html18
-rw-r--r--db/docs/api_cxx/memp_set_priority.html8
-rw-r--r--db/docs/api_cxx/memp_stat.html41
-rw-r--r--db/docs/api_cxx/memp_sync.html17
-rw-r--r--db/docs/api_cxx/memp_trickle.html6
-rw-r--r--db/docs/api_cxx/mempfile_class.html4
-rw-r--r--db/docs/api_cxx/mutex_alloc.html78
-rw-r--r--db/docs/api_cxx/mutex_free.html64
-rw-r--r--db/docs/api_cxx/mutex_list.html29
-rw-r--r--db/docs/api_cxx/mutex_lock.html66
-rw-r--r--db/docs/api_cxx/mutex_set_align.html99
-rw-r--r--db/docs/api_cxx/mutex_set_max.html167
-rw-r--r--db/docs/api_cxx/mutex_set_tas_spins.html94
-rw-r--r--db/docs/api_cxx/mutex_stat.html118
-rw-r--r--db/docs/api_cxx/mutex_unlock.html65
-rw-r--r--db/docs/api_cxx/object.html3
-rw-r--r--db/docs/api_cxx/pindex.src127
-rw-r--r--db/docs/api_cxx/rep_config.html111
-rw-r--r--db/docs/api_cxx/rep_elect.html99
-rw-r--r--db/docs/api_cxx/rep_limit.html40
-rw-r--r--db/docs/api_cxx/rep_list.html26
-rw-r--r--db/docs/api_cxx/rep_message.html38
-rw-r--r--db/docs/api_cxx/rep_nsites.html79
-rw-r--r--db/docs/api_cxx/rep_priority.html77
-rw-r--r--db/docs/api_cxx/rep_start.html37
-rw-r--r--db/docs/api_cxx/rep_stat.html92
-rw-r--r--db/docs/api_cxx/rep_sync.html63
-rw-r--r--db/docs/api_cxx/rep_timeout.html102
-rw-r--r--db/docs/api_cxx/rep_transport.html50
-rw-r--r--db/docs/api_cxx/repmgr_ack_policy.html102
-rw-r--r--db/docs/api_cxx/repmgr_local_site.html56
-rw-r--r--db/docs/api_cxx/repmgr_remote_site.html68
-rw-r--r--db/docs/api_cxx/repmgr_site_list.html77
-rw-r--r--db/docs/api_cxx/repmgr_start.html97
-rw-r--r--db/docs/api_cxx/runrec_class.html4
-rw-r--r--db/docs/api_cxx/seq_class.html4
-rw-r--r--db/docs/api_cxx/seq_close.html4
-rw-r--r--db/docs/api_cxx/seq_get.html53
-rw-r--r--db/docs/api_cxx/seq_initial_value.html64
-rw-r--r--db/docs/api_cxx/seq_list.html8
-rw-r--r--db/docs/api_cxx/seq_open.html33
-rw-r--r--db/docs/api_cxx/seq_remove.html25
-rw-r--r--db/docs/api_cxx/seq_set_cachesize.html4
-rw-r--r--db/docs/api_cxx/seq_set_flags.html4
-rw-r--r--db/docs/api_cxx/seq_set_range.html4
-rw-r--r--db/docs/api_cxx/seq_stat.html4
-rw-r--r--db/docs/api_cxx/txn_abort.html4
-rw-r--r--db/docs/api_cxx/txn_begin.html25
-rw-r--r--db/docs/api_cxx/txn_checkpoint.html12
-rw-r--r--db/docs/api_cxx/txn_class.html8
-rw-r--r--db/docs/api_cxx/txn_commit.html4
-rw-r--r--db/docs/api_cxx/txn_discard.html4
-rw-r--r--db/docs/api_cxx/txn_id.html4
-rw-r--r--db/docs/api_cxx/txn_list.html7
-rw-r--r--db/docs/api_cxx/txn_prepare.html4
-rw-r--r--db/docs/api_cxx/txn_recover.html6
-rw-r--r--db/docs/api_cxx/txn_set_name.html78
-rw-r--r--db/docs/api_cxx/txn_set_timeout.html10
-rw-r--r--db/docs/api_cxx/txn_stat.html46
-rw-r--r--db/docs/api_tcl/api_tcl.html6
-rw-r--r--db/docs/api_tcl/db_close.html6
-rw-r--r--db/docs/api_tcl/db_count.html6
-rw-r--r--db/docs/api_tcl/db_cursor.html16
-rw-r--r--db/docs/api_tcl/db_del.html22
-rw-r--r--db/docs/api_tcl/db_get.html23
-rw-r--r--db/docs/api_tcl/db_get_join.html16
-rw-r--r--db/docs/api_tcl/db_get_type.html6
-rw-r--r--db/docs/api_tcl/db_is_byteswapped.html6
-rw-r--r--db/docs/api_tcl/db_join.html6
-rw-r--r--db/docs/api_tcl/db_open.html24
-rw-r--r--db/docs/api_tcl/db_put.html23
-rw-r--r--db/docs/api_tcl/db_remove.html6
-rw-r--r--db/docs/api_tcl/db_rename.html6
-rw-r--r--db/docs/api_tcl/db_stat.html6
-rw-r--r--db/docs/api_tcl/db_sync.html10
-rw-r--r--db/docs/api_tcl/db_truncate.html22
-rw-r--r--db/docs/api_tcl/dbc_close.html10
-rw-r--r--db/docs/api_tcl/dbc_del.html6
-rw-r--r--db/docs/api_tcl/dbc_dup.html6
-rw-r--r--db/docs/api_tcl/dbc_get.html12
-rw-r--r--db/docs/api_tcl/dbc_put.html10
-rw-r--r--db/docs/api_tcl/env_close.html6
-rw-r--r--db/docs/api_tcl/env_dbremove.html17
-rw-r--r--db/docs/api_tcl/env_dbrename.html17
-rw-r--r--db/docs/api_tcl/env_open.html6
-rw-r--r--db/docs/api_tcl/env_remove.html6
-rw-r--r--db/docs/api_tcl/txn.html6
-rw-r--r--db/docs/api_tcl/txn_abort.html6
-rw-r--r--db/docs/api_tcl/txn_checkpoint.html6
-rw-r--r--db/docs/api_tcl/txn_commit.html10
-rw-r--r--db/docs/api_tcl/version.html6
-rw-r--r--db/docs/collections/tutorial/BasicProgram.html30
-rw-r--r--db/docs/collections/tutorial/BerkeleyDB-Java-Collections.pdfbin461364 -> 448647 bytes
-rw-r--r--db/docs/collections/tutorial/Entity.html26
-rw-r--r--db/docs/collections/tutorial/SerializableEntity.html24
-rw-r--r--db/docs/collections/tutorial/Summary.html8
-rw-r--r--db/docs/collections/tutorial/Tuple.html4
-rw-r--r--db/docs/collections/tutorial/UsingCollectionsAPI.html27
-rw-r--r--db/docs/collections/tutorial/UsingSecondaries.html2
-rw-r--r--db/docs/collections/tutorial/UsingStoredCollections.html4
-rw-r--r--db/docs/collections/tutorial/addingdatabaseitems.html89
-rw-r--r--db/docs/collections/tutorial/collectionOverview.html12
-rw-r--r--db/docs/collections/tutorial/createbindingscollections.html2
-rw-r--r--db/docs/collections/tutorial/developing.html22
-rw-r--r--db/docs/collections/tutorial/entitieswithcollections.html82
-rw-r--r--db/docs/collections/tutorial/handlingexceptions.html4
-rw-r--r--db/docs/collections/tutorial/implementingmain.html14
-rw-r--r--db/docs/collections/tutorial/index.html51
-rw-r--r--db/docs/collections/tutorial/intro.html44
-rw-r--r--db/docs/collections/tutorial/moreinfo.html108
-rw-r--r--db/docs/collections/tutorial/openclasscatalog.html10
-rw-r--r--db/docs/collections/tutorial/opendatabases.html12
-rw-r--r--db/docs/collections/tutorial/opendbenvironment.html4
-rw-r--r--db/docs/collections/tutorial/openingforeignkeys.html4
-rw-r--r--db/docs/collections/tutorial/preface.html27
-rw-r--r--db/docs/collections/tutorial/retrievingbyindexkey.html20
-rw-r--r--db/docs/collections/tutorial/retrievingdatabaseitems.html11
-rw-r--r--db/docs/collections/tutorial/tutorialintroduction.html15
-rw-r--r--db/docs/collections/tutorial/usingtransactions.html4
-rw-r--r--db/docs/gsg/C/BerkeleyDB-Core-C-GSG.pdfbin467269 -> 456016 bytes
-rw-r--r--db/docs/gsg/C/CoreCursorUsage.html44
-rw-r--r--db/docs/gsg/C/CoreDBAdmin.html6
-rw-r--r--db/docs/gsg/C/CoreDbUsage.html18
-rw-r--r--db/docs/gsg/C/CoreEnvUsage.html16
-rw-r--r--db/docs/gsg/C/DB.html5
-rw-r--r--db/docs/gsg/C/DBEntry.html6
-rw-r--r--db/docs/gsg/C/DBOpenFlags.html2
-rw-r--r--db/docs/gsg/C/DbUsage.html32
-rw-r--r--db/docs/gsg/C/DeleteEntryWCursor.html2
-rw-r--r--db/docs/gsg/C/Positioning.html39
-rw-r--r--db/docs/gsg/C/PutEntryWCursor.html29
-rw-r--r--db/docs/gsg/C/ReplacingEntryWCursor.html12
-rw-r--r--db/docs/gsg/C/accessmethods.html2
-rw-r--r--db/docs/gsg/C/btree.html14
-rw-r--r--db/docs/gsg/C/concepts.html2
-rw-r--r--db/docs/gsg/C/coreindexusage.html89
-rw-r--r--db/docs/gsg/C/cstructs.html14
-rw-r--r--db/docs/gsg/C/dbErrorReporting.html10
-rw-r--r--db/docs/gsg/C/dbconfig.html9
-rw-r--r--db/docs/gsg/C/environments.html11
-rw-r--r--db/docs/gsg/C/gettingit.html10
-rw-r--r--db/docs/gsg/C/index.html50
-rw-r--r--db/docs/gsg/C/indexes.html18
-rw-r--r--db/docs/gsg/C/introduction.html8
-rw-r--r--db/docs/gsg/C/joins.html16
-rw-r--r--db/docs/gsg/C/preface.html78
-rw-r--r--db/docs/gsg/C/readSecondary.html2
-rw-r--r--db/docs/gsg/C/returns.html101
-rw-r--r--db/docs/gsg/C/secondaryCursor.html3
-rw-r--r--db/docs/gsg/C/secondaryDelete.html46
-rw-r--r--db/docs/gsg/C/usingDbt.html42
-rw-r--r--db/docs/gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdfbin440972 -> 429750 bytes
-rw-r--r--db/docs/gsg/CXX/CoreCursorUsage.html50
-rw-r--r--db/docs/gsg/CXX/CoreDBAdmin.html6
-rw-r--r--db/docs/gsg/CXX/CoreDbCXXUsage.html16
-rw-r--r--db/docs/gsg/CXX/CoreEnvUsage.html35
-rw-r--r--db/docs/gsg/CXX/DB.html5
-rw-r--r--db/docs/gsg/CXX/DBEntry.html6
-rw-r--r--db/docs/gsg/CXX/DBOpenFlags.html2
-rw-r--r--db/docs/gsg/CXX/DbCXXUsage.html50
-rw-r--r--db/docs/gsg/CXX/DeleteEntryWCursor.html6
-rw-r--r--db/docs/gsg/CXX/Positioning.html57
-rw-r--r--db/docs/gsg/CXX/PutEntryWCursor.html33
-rw-r--r--db/docs/gsg/CXX/ReplacingEntryWCursor.html8
-rw-r--r--db/docs/gsg/CXX/accessmethods.html2
-rw-r--r--db/docs/gsg/CXX/btree.html12
-rw-r--r--db/docs/gsg/CXX/concepts.html2
-rw-r--r--db/docs/gsg/CXX/coreExceptions.html4
-rw-r--r--db/docs/gsg/CXX/coreindexusage.html131
-rw-r--r--db/docs/gsg/CXX/dbErrorReporting.html10
-rw-r--r--db/docs/gsg/CXX/dbconfig.html9
-rw-r--r--db/docs/gsg/CXX/environments.html11
-rw-r--r--db/docs/gsg/CXX/gettingit.html10
-rw-r--r--db/docs/gsg/CXX/index.html54
-rw-r--r--db/docs/gsg/CXX/indexes.html18
-rw-r--r--db/docs/gsg/CXX/introduction.html8
-rw-r--r--db/docs/gsg/CXX/joins.html16
-rw-r--r--db/docs/gsg/CXX/preface.html78
-rw-r--r--db/docs/gsg/CXX/readSecondary.html2
-rw-r--r--db/docs/gsg/CXX/returns.html81
-rw-r--r--db/docs/gsg/CXX/secondaryCursor.html3
-rw-r--r--db/docs/gsg/CXX/secondaryDelete.html46
-rw-r--r--db/docs/gsg/CXX/usingDbt.html40
-rw-r--r--db/docs/gsg/JAVA/BerkeleyDB-Core-JAVA-GSG.pdfbin502662 -> 491548 bytes
-rw-r--r--db/docs/gsg/JAVA/CoreEnvUsage.html18
-rw-r--r--db/docs/gsg/JAVA/CoreJavaUsage.html20
-rw-r--r--db/docs/gsg/JAVA/Cursors.html11
-rw-r--r--db/docs/gsg/JAVA/DB.html11
-rw-r--r--db/docs/gsg/JAVA/DBAdmin.html52
-rw-r--r--db/docs/gsg/JAVA/DBEntry.html30
-rw-r--r--db/docs/gsg/JAVA/DeleteEntryWCursor.html11
-rw-r--r--db/docs/gsg/JAVA/Positioning.html90
-rw-r--r--db/docs/gsg/JAVA/PutEntryWCursor.html27
-rw-r--r--db/docs/gsg/JAVA/ReplacingEntryWCursor.html6
-rw-r--r--db/docs/gsg/JAVA/accessmethods.html2
-rw-r--r--db/docs/gsg/JAVA/bindAPI.html104
-rw-r--r--db/docs/gsg/JAVA/btree.html16
-rw-r--r--db/docs/gsg/JAVA/concepts.html2
-rw-r--r--db/docs/gsg/JAVA/coredbclose.html6
-rw-r--r--db/docs/gsg/JAVA/cursorJavaUsage.html54
-rw-r--r--db/docs/gsg/JAVA/dbErrorReporting.html4
-rw-r--r--db/docs/gsg/JAVA/dbconfig.html9
-rw-r--r--db/docs/gsg/JAVA/dbtJavaUsage.html66
-rw-r--r--db/docs/gsg/JAVA/environments.html11
-rw-r--r--db/docs/gsg/JAVA/gettingit.html10
-rw-r--r--db/docs/gsg/JAVA/index.html46
-rw-r--r--db/docs/gsg/JAVA/indexes.html13
-rw-r--r--db/docs/gsg/JAVA/introduction.html10
-rw-r--r--db/docs/gsg/JAVA/javaindexusage.html53
-rw-r--r--db/docs/gsg/JAVA/joins.html26
-rw-r--r--db/docs/gsg/JAVA/keyCreator.html32
-rw-r--r--db/docs/gsg/JAVA/preface.html88
-rw-r--r--db/docs/gsg/JAVA/readSecondary.html6
-rw-r--r--db/docs/gsg/JAVA/secondaryCursor.html7
-rw-r--r--db/docs/gsg/JAVA/secondaryDelete.html48
-rw-r--r--db/docs/gsg/JAVA/secondaryProps.html4
-rw-r--r--db/docs/gsg/JAVA/usingDbt.html59
-rw-r--r--db/docs/gsg_db_rep/C/Replication-C-GSG.pdfbin0 -> 357663 bytes
-rw-r--r--db/docs/gsg_db_rep/C/addfeatures.html191
-rw-r--r--db/docs/gsg_db_rep/C/apioverview.html225
-rw-r--r--db/docs/gsg_db_rep/C/bulk.html139
-rw-r--r--db/docs/gsg_db_rep/C/c2ctransfer.html131
-rw-r--r--db/docs/gsg_db_rep/C/elections.html227
-rw-r--r--db/docs/gsg_db_rep/C/electiontimes.html152
-rw-r--r--db/docs/gsg_db_rep/C/exampledoloop.html643
-rw-r--r--db/docs/gsg_db_rep/C/fmwrkconnectretry.html76
-rw-r--r--db/docs/gsg_db_rep/C/fwrkmasterreplica.html301
-rw-r--r--db/docs/gsg_db_rep/C/fwrkpermmessage.html355
-rw-r--r--db/docs/gsg_db_rep/C/gettingStarted.css41
-rw-r--r--db/docs/gsg_db_rep/C/index.html447
-rw-r--r--db/docs/gsg_db_rep/C/introduction.html395
-rw-r--r--db/docs/gsg_db_rep/C/manageblock.html88
-rw-r--r--db/docs/gsg_db_rep/C/noautoinit.html88
-rw-r--r--db/docs/gsg_db_rep/C/permmessages.html390
-rw-r--r--db/docs/gsg_db_rep/C/preface.html212
-rw-r--r--db/docs/gsg_db_rep/C/processingloop.html255
-rw-r--r--db/docs/gsg_db_rep/C/repadvantage.html184
-rw-r--r--db/docs/gsg_db_rep/C/repapp.html720
-rw-r--r--db/docs/gsg_db_rep/C/repmgr_init_example_c.html383
-rw-r--r--db/docs/gsg_db_rep/C/simpleprogramlisting.html557
-rw-r--r--db/docs/gsg_db_rep/C/txnapp.html174
-rw-r--r--db/docs/gsg_db_rep/CXX/Replication-CXX-GSG.pdfbin0 -> 362032 bytes
-rw-r--r--db/docs/gsg_db_rep/CXX/addfeatures.html191
-rw-r--r--db/docs/gsg_db_rep/CXX/apioverview.html225
-rw-r--r--db/docs/gsg_db_rep/CXX/bulk.html139
-rw-r--r--db/docs/gsg_db_rep/CXX/c2ctransfer.html131
-rw-r--r--db/docs/gsg_db_rep/CXX/elections.html227
-rw-r--r--db/docs/gsg_db_rep/CXX/electiontimes.html152
-rw-r--r--db/docs/gsg_db_rep/CXX/exampledoloop.html541
-rw-r--r--db/docs/gsg_db_rep/CXX/fmwrkconnectretry.html76
-rw-r--r--db/docs/gsg_db_rep/CXX/fwrkmasterreplica.html297
-rw-r--r--db/docs/gsg_db_rep/CXX/fwrkpermmessage.html372
-rw-r--r--db/docs/gsg_db_rep/CXX/gettingStarted.css41
-rw-r--r--db/docs/gsg_db_rep/CXX/index.html460
-rw-r--r--db/docs/gsg_db_rep/CXX/introduction.html395
-rw-r--r--db/docs/gsg_db_rep/CXX/manageblock.html88
-rw-r--r--db/docs/gsg_db_rep/CXX/noautoinit.html88
-rw-r--r--db/docs/gsg_db_rep/CXX/permmessages.html390
-rw-r--r--db/docs/gsg_db_rep/CXX/preface.html216
-rw-r--r--db/docs/gsg_db_rep/CXX/processingloop.html259
-rw-r--r--db/docs/gsg_db_rep/CXX/repadvantage.html184
-rw-r--r--db/docs/gsg_db_rep/CXX/repapp.html711
-rw-r--r--db/docs/gsg_db_rep/CXX/repmgr_init_example_c.html520
-rw-r--r--db/docs/gsg_db_rep/CXX/simpleprogramlisting.html628
-rw-r--r--db/docs/gsg_db_rep/CXX/txnapp.html187
-rw-r--r--db/docs/gsg_db_rep/JAVA/Replication-JAVA-GSG.pdfbin0 -> 361196 bytes
-rw-r--r--db/docs/gsg_db_rep/JAVA/addfeatures.html192
-rw-r--r--db/docs/gsg_db_rep/JAVA/apioverview.html227
-rw-r--r--db/docs/gsg_db_rep/JAVA/bulk.html140
-rw-r--r--db/docs/gsg_db_rep/JAVA/c2ctransfer.html135
-rw-r--r--db/docs/gsg_db_rep/JAVA/elections.html227
-rw-r--r--db/docs/gsg_db_rep/JAVA/electiontimes.html146
-rw-r--r--db/docs/gsg_db_rep/JAVA/exampledoloop.html559
-rw-r--r--db/docs/gsg_db_rep/JAVA/fmwrkconnectretry.html81
-rw-r--r--db/docs/gsg_db_rep/JAVA/fwrkmasterreplica.html270
-rw-r--r--db/docs/gsg_db_rep/JAVA/fwrkpermmessage.html358
-rw-r--r--db/docs/gsg_db_rep/JAVA/gettingStarted.css41
-rw-r--r--db/docs/gsg_db_rep/JAVA/index.html460
-rw-r--r--db/docs/gsg_db_rep/JAVA/introduction.html395
-rw-r--r--db/docs/gsg_db_rep/JAVA/manageblock.html91
-rw-r--r--db/docs/gsg_db_rep/JAVA/noautoinit.html89
-rw-r--r--db/docs/gsg_db_rep/JAVA/permmessages.html390
-rw-r--r--db/docs/gsg_db_rep/JAVA/preface.html223
-rw-r--r--db/docs/gsg_db_rep/JAVA/processingloop.html215
-rw-r--r--db/docs/gsg_db_rep/JAVA/repadvantage.html184
-rw-r--r--db/docs/gsg_db_rep/JAVA/repapp.html705
-rw-r--r--db/docs/gsg_db_rep/JAVA/repmgr_init_example_c.html529
-rw-r--r--db/docs/gsg_db_rep/JAVA/simpleprogramlisting.html564
-rw-r--r--db/docs/gsg_db_rep/JAVA/txnapp.html182
-rw-r--r--db/docs/gsg_txn/C/BerkeleyDB-Core-C-Txn.pdfbin0 -> 651712 bytes
-rw-r--r--db/docs/gsg_txn/C/abortresults.html95
-rw-r--r--db/docs/gsg_txn/C/architectrecovery.html446
-rw-r--r--db/docs/gsg_txn/C/autocommit.html223
-rw-r--r--db/docs/gsg_txn/C/backuprestore.html341
-rw-r--r--db/docs/gsg_txn/C/blocking_deadlocks.html674
-rw-r--r--db/docs/gsg_txn/C/deadlock.jpgbin0 -> 12599 bytes
-rw-r--r--db/docs/gsg_txn/C/enabletxn.html928
-rw-r--r--db/docs/gsg_txn/C/envopen.html241
-rw-r--r--db/docs/gsg_txn/C/filemanagement.html403
-rw-r--r--db/docs/gsg_txn/C/gettingStarted.css41
-rw-r--r--db/docs/gsg_txn/C/hotfailover.html210
-rw-r--r--db/docs/gsg_txn/C/index.html525
-rw-r--r--db/docs/gsg_txn/C/inmem_txnexample_c.html618
-rw-r--r--db/docs/gsg_txn/C/introduction.html441
-rw-r--r--db/docs/gsg_txn/C/isolation.html961
-rw-r--r--db/docs/gsg_txn/C/lockingsubsystem.html558
-rw-r--r--db/docs/gsg_txn/C/logconfig.html444
-rw-r--r--db/docs/gsg_txn/C/logfileremoval.html206
-rw-r--r--db/docs/gsg_txn/C/maxtxns.html239
-rw-r--r--db/docs/gsg_txn/C/nestedtxn.html140
-rw-r--r--db/docs/gsg_txn/C/perftune-intro.html88
-rw-r--r--db/docs/gsg_txn/C/preface.html215
-rw-r--r--db/docs/gsg_txn/C/readblock.jpgbin0 -> 10504 bytes
-rw-r--r--db/docs/gsg_txn/C/readmodifywrite.html122
-rw-r--r--db/docs/gsg_txn/C/recovery-intro.html104
-rw-r--r--db/docs/gsg_txn/C/recovery.html322
-rw-r--r--db/docs/gsg_txn/C/reversesplit.html195
-rw-r--r--db/docs/gsg_txn/C/rwlocks1.jpgbin0 -> 7428 bytes
-rw-r--r--db/docs/gsg_txn/C/simplelock.jpgbin0 -> 4453 bytes
-rw-r--r--db/docs/gsg_txn/C/txn_ccursor.html201
-rw-r--r--db/docs/gsg_txn/C/txnconcurrency.html360
-rw-r--r--db/docs/gsg_txn/C/txncursor.html155
-rw-r--r--db/docs/gsg_txn/C/txnexample_c.html757
-rw-r--r--db/docs/gsg_txn/C/txnindices.html130
-rw-r--r--db/docs/gsg_txn/C/txnnowait.html91
-rw-r--r--db/docs/gsg_txn/C/usingtxns.html590
-rw-r--r--db/docs/gsg_txn/C/wrapup.html283
-rw-r--r--db/docs/gsg_txn/C/writeblock.jpgbin0 -> 6369 bytes
-rw-r--r--db/docs/gsg_txn/CXX/BerkeleyDB-Core-Cxx-Txn.pdfbin0 -> 621636 bytes
-rw-r--r--db/docs/gsg_txn/CXX/abortresults.html95
-rw-r--r--db/docs/gsg_txn/CXX/architectrecovery.html446
-rw-r--r--db/docs/gsg_txn/CXX/autocommit.html179
-rw-r--r--db/docs/gsg_txn/CXX/backuprestore.html341
-rw-r--r--db/docs/gsg_txn/CXX/blocking_deadlocks.html674
-rw-r--r--db/docs/gsg_txn/CXX/deadlock.jpgbin0 -> 12599 bytes
-rw-r--r--db/docs/gsg_txn/CXX/enabletxn.html942
-rw-r--r--db/docs/gsg_txn/CXX/envopen.html190
-rw-r--r--db/docs/gsg_txn/CXX/filemanagement.html384
-rw-r--r--db/docs/gsg_txn/CXX/gettingStarted.css41
-rw-r--r--db/docs/gsg_txn/CXX/hotfailover.html210
-rw-r--r--db/docs/gsg_txn/CXX/index.html525
-rw-r--r--db/docs/gsg_txn/CXX/inmem_txnexample_c.html546
-rw-r--r--db/docs/gsg_txn/CXX/introduction.html441
-rw-r--r--db/docs/gsg_txn/CXX/isolation.html821
-rw-r--r--db/docs/gsg_txn/CXX/lockingsubsystem.html502
-rw-r--r--db/docs/gsg_txn/CXX/logconfig.html397
-rw-r--r--db/docs/gsg_txn/CXX/logfileremoval.html206
-rw-r--r--db/docs/gsg_txn/CXX/maxtxns.html203
-rw-r--r--db/docs/gsg_txn/CXX/nestedtxn.html140
-rw-r--r--db/docs/gsg_txn/CXX/perftune-intro.html88
-rw-r--r--db/docs/gsg_txn/CXX/preface.html221
-rw-r--r--db/docs/gsg_txn/CXX/readblock.jpgbin0 -> 10504 bytes
-rw-r--r--db/docs/gsg_txn/CXX/readmodifywrite.html124
-rw-r--r--db/docs/gsg_txn/CXX/recovery-intro.html104
-rw-r--r--db/docs/gsg_txn/CXX/recovery.html288
-rw-r--r--db/docs/gsg_txn/CXX/reversesplit.html158
-rw-r--r--db/docs/gsg_txn/CXX/rwlocks1.jpgbin0 -> 7428 bytes
-rw-r--r--db/docs/gsg_txn/CXX/simplelock.jpgbin0 -> 4453 bytes
-rw-r--r--db/docs/gsg_txn/CXX/txn_ccursor.html163
-rw-r--r--db/docs/gsg_txn/CXX/txnconcurrency.html360
-rw-r--r--db/docs/gsg_txn/CXX/txncursor.html124
-rw-r--r--db/docs/gsg_txn/CXX/txnexample_c.html674
-rw-r--r--db/docs/gsg_txn/CXX/txnindices.html118
-rw-r--r--db/docs/gsg_txn/CXX/txnnowait.html91
-rw-r--r--db/docs/gsg_txn/CXX/usingtxns.html535
-rw-r--r--db/docs/gsg_txn/CXX/wrapup.html283
-rw-r--r--db/docs/gsg_txn/CXX/writeblock.jpgbin0 -> 6369 bytes
-rw-r--r--db/docs/gsg_txn/JAVA/BerkeleyDB-Core-JAVA-Txn.pdfbin0 -> 627919 bytes
-rw-r--r--db/docs/gsg_txn/JAVA/abortresults.html95
-rw-r--r--db/docs/gsg_txn/JAVA/architectrecovery.html337
-rw-r--r--db/docs/gsg_txn/JAVA/autocommit.html144
-rw-r--r--db/docs/gsg_txn/JAVA/backuprestore.html336
-rw-r--r--db/docs/gsg_txn/JAVA/blocking_deadlocks.html674
-rw-r--r--db/docs/gsg_txn/JAVA/deadlock.jpgbin0 -> 12599 bytes
-rw-r--r--db/docs/gsg_txn/JAVA/enabletxn.html875
-rw-r--r--db/docs/gsg_txn/JAVA/envopen.html159
-rw-r--r--db/docs/gsg_txn/JAVA/filemanagement.html484
-rw-r--r--db/docs/gsg_txn/JAVA/gettingStarted.css41
-rw-r--r--db/docs/gsg_txn/JAVA/hotfailover.html210
-rw-r--r--db/docs/gsg_txn/JAVA/index.html549
-rw-r--r--db/docs/gsg_txn/JAVA/inmem_txnexample_java.html561
-rw-r--r--db/docs/gsg_txn/JAVA/introduction.html441
-rw-r--r--db/docs/gsg_txn/JAVA/isolation.html917
-rw-r--r--db/docs/gsg_txn/JAVA/lockingsubsystem.html479
-rw-r--r--db/docs/gsg_txn/JAVA/logconfig.html381
-rw-r--r--db/docs/gsg_txn/JAVA/logfileremoval.html202
-rw-r--r--db/docs/gsg_txn/JAVA/maxtxns.html202
-rw-r--r--db/docs/gsg_txn/JAVA/nestedtxn.html139
-rw-r--r--db/docs/gsg_txn/JAVA/perftune-intro.html88
-rw-r--r--db/docs/gsg_txn/JAVA/preface.html227
-rw-r--r--db/docs/gsg_txn/JAVA/readblock.jpgbin0 -> 10504 bytes
-rw-r--r--db/docs/gsg_txn/JAVA/readmodifywrite.html120
-rw-r--r--db/docs/gsg_txn/JAVA/recovery-intro.html104
-rw-r--r--db/docs/gsg_txn/JAVA/recovery.html298
-rw-r--r--db/docs/gsg_txn/JAVA/reversesplit.html144
-rw-r--r--db/docs/gsg_txn/JAVA/rwlocks1.jpgbin0 -> 7428 bytes
-rw-r--r--db/docs/gsg_txn/JAVA/simplelock.jpgbin0 -> 4453 bytes
-rw-r--r--db/docs/gsg_txn/JAVA/txn_ccursor.html166
-rw-r--r--db/docs/gsg_txn/JAVA/txnconcurrency.html369
-rw-r--r--db/docs/gsg_txn/JAVA/txncursor.html128
-rw-r--r--db/docs/gsg_txn/JAVA/txnexample_java.html801
-rw-r--r--db/docs/gsg_txn/JAVA/txnindices.html136
-rw-r--r--db/docs/gsg_txn/JAVA/txnnowait.html91
-rw-r--r--db/docs/gsg_txn/JAVA/usingtxns.html525
-rw-r--r--db/docs/gsg_txn/JAVA/wrapup.html302
-rw-r--r--db/docs/gsg_txn/JAVA/writeblock.jpgbin0 -> 6369 bytes
-rw-r--r--db/docs/images/Oracle_BerkeleyDB_clr.bmpbin0 -> 523208 bytes
-rw-r--r--db/docs/index.html65
-rw-r--r--db/docs/java/allclasses-frame.html62
-rw-r--r--db/docs/java/allclasses-noframe.html62
-rw-r--r--db/docs/java/com/sleepycat/bind/ByteArrayBinding.html65
-rw-r--r--db/docs/java/com/sleepycat/bind/EntityBinding.html67
-rw-r--r--db/docs/java/com/sleepycat/bind/EntryBinding.html61
-rw-r--r--db/docs/java/com/sleepycat/bind/RecordNumberBinding.html65
-rw-r--r--db/docs/java/com/sleepycat/bind/class-use/ByteArrayBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/class-use/EntityBinding.html114
-rw-r--r--db/docs/java/com/sleepycat/bind/class-use/EntryBinding.html188
-rw-r--r--db/docs/java/com/sleepycat/bind/class-use/RecordNumberBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/package-frame.html4
-rw-r--r--db/docs/java/com/sleepycat/bind/package-summary.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/package-tree.html32
-rw-r--r--db/docs/java/com/sleepycat/bind/package-use.html44
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/ClassCatalog.html59
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/SerialBase.html330
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/SerialBinding.html128
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/SerialInput.html183
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/SerialOutput.html107
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/SerialSerialBinding.html67
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/SerialSerialKeyCreator.html140
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/StoredClassCatalog.html65
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/TupleSerialBinding.html111
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/TupleSerialKeyCreator.html116
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html101
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html97
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/ClassCatalog.html98
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/SerialBase.html177
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/SerialBinding.html100
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/SerialInput.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/SerialOutput.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialKeyCreator.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/StoredClassCatalog.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialBinding.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialKeyCreator.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledBinding.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledKeyCreator.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/package-frame.html6
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/package-summary.html39
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/package-tree.html62
-rw-r--r--db/docs/java/com/sleepycat/bind/serial/package-use.html43
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/BooleanBinding.html112
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/ByteBinding.html112
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/CharacterBinding.html112
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/DoubleBinding.html117
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/FloatBinding.html117
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/IntegerBinding.html120
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/LongBinding.html124
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleEntry.html57
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html63
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/ShortBinding.html120
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/SortedDoubleBinding.html418
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/SortedFloatBinding.html418
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/StringBinding.html120
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleBase.html457
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleBinding.html222
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleInput.html285
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleInputBinding.html61
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleMarshalledBinding.html79
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleOutput.html201
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleTupleBinding.html73
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleTupleKeyCreator.html83
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html79
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html77
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/BooleanBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/ByteBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/CharacterBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/DoubleBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/FloatBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/IntegerBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/LongBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleEntry.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleKeyEntity.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/ShortBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/SortedDoubleBinding.html140
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/SortedFloatBinding.html140
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/StringBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBase.html374
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBinding.html54
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInput.html182
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInputBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleMarshalledBinding.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleOutput.html370
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleBinding.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleKeyCreator.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledBinding.html34
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledKeyCreator.html24
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/package-frame.html10
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/package-summary.html49
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/package-tree.html58
-rw-r--r--db/docs/java/com/sleepycat/bind/tuple/package-use.html50
-rw-r--r--db/docs/java/com/sleepycat/collections/CurrentTransaction.html55
-rw-r--r--db/docs/java/com/sleepycat/collections/MapEntryParameter.html69
-rw-r--r--db/docs/java/com/sleepycat/collections/PrimaryKeyAssigner.html59
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredCollection.html317
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredCollections.html376
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredContainer.html172
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredEntrySet.html118
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredIterator.html181
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredKeySet.html111
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredList.html131
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredMap.html187
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredSortedEntrySet.html123
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredSortedKeySet.html127
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredSortedMap.html111
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredSortedValueSet.html129
-rw-r--r--db/docs/java/com/sleepycat/collections/StoredValueSet.html144
-rw-r--r--db/docs/java/com/sleepycat/collections/TransactionRunner.html143
-rw-r--r--db/docs/java/com/sleepycat/collections/TransactionWorker.html59
-rw-r--r--db/docs/java/com/sleepycat/collections/TupleSerialFactory.html61
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/CurrentTransaction.html34
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/MapEntryParameter.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/PrimaryKeyAssigner.html82
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredCollection.html36
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredCollections.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredContainer.html36
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredEntrySet.html34
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredIterator.html56
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredKeySet.html34
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredList.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredMap.html36
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredSortedEntrySet.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredSortedKeySet.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredSortedMap.html34
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredSortedValueSet.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/StoredValueSet.html34
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/TransactionRunner.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/TransactionWorker.html36
-rw-r--r--db/docs/java/com/sleepycat/collections/class-use/TupleSerialFactory.html24
-rw-r--r--db/docs/java/com/sleepycat/collections/package-frame.html4
-rw-r--r--db/docs/java/com/sleepycat/collections/package-summary.html40
-rw-r--r--db/docs/java/com/sleepycat/collections/package-tree.html56
-rw-r--r--db/docs/java/com/sleepycat/collections/package-use.html32
-rw-r--r--db/docs/java/com/sleepycat/db/BtreePrefixCalculator.html59
-rw-r--r--db/docs/java/com/sleepycat/db/BtreeStats.html113
-rw-r--r--db/docs/java/com/sleepycat/db/CacheFile.html67
-rw-r--r--db/docs/java/com/sleepycat/db/CacheFilePriority.html97
-rw-r--r--db/docs/java/com/sleepycat/db/CacheFileStats.html58
-rw-r--r--db/docs/java/com/sleepycat/db/CacheStats.html142
-rw-r--r--db/docs/java/com/sleepycat/db/CheckpointConfig.html76
-rw-r--r--db/docs/java/com/sleepycat/db/CompactConfig.html548
-rw-r--r--db/docs/java/com/sleepycat/db/CompactStats.html370
-rw-r--r--db/docs/java/com/sleepycat/db/Cursor.html62
-rw-r--r--db/docs/java/com/sleepycat/db/CursorConfig.html271
-rw-r--r--db/docs/java/com/sleepycat/db/Database.html171
-rw-r--r--db/docs/java/com/sleepycat/db/DatabaseConfig.html353
-rw-r--r--db/docs/java/com/sleepycat/db/DatabaseEntry.html261
-rw-r--r--db/docs/java/com/sleepycat/db/DatabaseException.html175
-rw-r--r--db/docs/java/com/sleepycat/db/DatabaseStats.html63
-rw-r--r--db/docs/java/com/sleepycat/db/DatabaseType.html101
-rw-r--r--db/docs/java/com/sleepycat/db/DeadlockException.html81
-rw-r--r--db/docs/java/com/sleepycat/db/Environment.html551
-rw-r--r--db/docs/java/com/sleepycat/db/EnvironmentConfig.html1633
-rw-r--r--db/docs/java/com/sleepycat/db/ErrorHandler.html63
-rw-r--r--db/docs/java/com/sleepycat/db/EventHandler.html226
-rw-r--r--db/docs/java/com/sleepycat/db/EventType.html367
-rw-r--r--db/docs/java/com/sleepycat/db/FeedbackHandler.html65
-rw-r--r--db/docs/java/com/sleepycat/db/HashStats.html64
-rw-r--r--db/docs/java/com/sleepycat/db/Hasher.html59
-rw-r--r--db/docs/java/com/sleepycat/db/JoinConfig.html60
-rw-r--r--db/docs/java/com/sleepycat/db/JoinCursor.html55
-rw-r--r--db/docs/java/com/sleepycat/db/KeyRange.html64
-rw-r--r--db/docs/java/com/sleepycat/db/Lock.html59
-rw-r--r--db/docs/java/com/sleepycat/db/LockDetectMode.html97
-rw-r--r--db/docs/java/com/sleepycat/db/LockMode.html188
-rw-r--r--db/docs/java/com/sleepycat/db/LockNotGrantedException.html79
-rw-r--r--db/docs/java/com/sleepycat/db/LockOperation.html101
-rw-r--r--db/docs/java/com/sleepycat/db/LockRequest.html61
-rw-r--r--db/docs/java/com/sleepycat/db/LockRequestMode.html101
-rw-r--r--db/docs/java/com/sleepycat/db/LockStats.html174
-rw-r--r--db/docs/java/com/sleepycat/db/LogCursor.html59
-rw-r--r--db/docs/java/com/sleepycat/db/LogRecordHandler.html65
-rw-r--r--db/docs/java/com/sleepycat/db/LogSequenceNumber.html63
-rw-r--r--db/docs/java/com/sleepycat/db/LogStats.html104
-rw-r--r--db/docs/java/com/sleepycat/db/MemoryException.html99
-rw-r--r--db/docs/java/com/sleepycat/db/MessageHandler.html61
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleDataEntry.html75
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleEntry.html65
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleKeyDataEntry.html75
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleKeyNIODataEntry.html310
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleNIODataEntry.html310
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleRecnoDataEntry.html79
-rw-r--r--db/docs/java/com/sleepycat/db/MultipleRecnoNIODataEntry.html314
-rw-r--r--db/docs/java/com/sleepycat/db/MutexStats.html421
-rw-r--r--db/docs/java/com/sleepycat/db/OperationStatus.html105
-rw-r--r--db/docs/java/com/sleepycat/db/PanicHandler.html61
-rw-r--r--db/docs/java/com/sleepycat/db/PreparedTransaction.html59
-rw-r--r--db/docs/java/com/sleepycat/db/QueueStats.html64
-rw-r--r--db/docs/java/com/sleepycat/db/RecordNumberAppender.html63
-rw-r--r--db/docs/java/com/sleepycat/db/RecoveryOperation.html90
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationConfig.html337
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationDuplicateMasterException.html221
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationHandleDeadException.html81
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationHoldElectionException.html219
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationHostAddress.html368
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationJoinFailureException.html221
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationLockoutException.html218
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationManagerAckPolicy.html392
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationManagerStartPolicy.html332
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationSiteUnavailableException.html219
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationStats.html271
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationStatus.html152
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationTimeoutType.html337
-rw-r--r--db/docs/java/com/sleepycat/db/ReplicationTransport.html91
-rw-r--r--db/docs/java/com/sleepycat/db/RunRecoveryException.html81
-rw-r--r--db/docs/java/com/sleepycat/db/SecondaryConfig.html176
-rw-r--r--db/docs/java/com/sleepycat/db/SecondaryCursor.html61
-rw-r--r--db/docs/java/com/sleepycat/db/SecondaryDatabase.html227
-rw-r--r--db/docs/java/com/sleepycat/db/SecondaryKeyCreator.html94
-rw-r--r--db/docs/java/com/sleepycat/db/Sequence.html59
-rw-r--r--db/docs/java/com/sleepycat/db/SequenceConfig.html96
-rw-r--r--db/docs/java/com/sleepycat/db/SequenceStats.html137
-rw-r--r--db/docs/java/com/sleepycat/db/StatsConfig.html60
-rw-r--r--db/docs/java/com/sleepycat/db/Transaction.html164
-rw-r--r--db/docs/java/com/sleepycat/db/TransactionConfig.html399
-rw-r--r--db/docs/java/com/sleepycat/db/TransactionStats.Active.html175
-rw-r--r--db/docs/java/com/sleepycat/db/TransactionStats.html113
-rw-r--r--db/docs/java/com/sleepycat/db/UpdateConflictException.html219
-rw-r--r--db/docs/java/com/sleepycat/db/VerifyConfig.html146
-rw-r--r--db/docs/java/com/sleepycat/db/VersionMismatchException.html219
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/BtreePrefixCalculator.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/BtreeStats.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CacheFile.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CacheFilePriority.html40
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CacheFileStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CacheStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CheckpointConfig.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CompactConfig.html199
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CompactStats.html182
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Cursor.html57
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/CursorConfig.html175
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Database.html254
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DatabaseConfig.html83
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DatabaseEntry.html1253
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DatabaseException.html1606
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DatabaseStats.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DatabaseType.html40
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DeadlockException.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Environment.html119
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/EnvironmentConfig.html42
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ErrorHandler.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/EventHandler.html193
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/EventType.html237
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/FeedbackHandler.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/HashStats.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Hasher.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/JoinConfig.html46
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/JoinCursor.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/KeyRange.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Lock.html48
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockDetectMode.html72
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockMode.html406
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockNotGrantedException.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockOperation.html42
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockRequest.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockRequestMode.html74
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LockStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LogCursor.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LogRecordHandler.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LogSequenceNumber.html146
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/LogStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MemoryException.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MessageHandler.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleDataEntry.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleEntry.html63
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleKeyDataEntry.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleKeyNIODataEntry.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleNIODataEntry.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleRecnoDataEntry.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MultipleRecnoNIODataEntry.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/MutexStats.html177
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/OperationStatus.html588
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/PanicHandler.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/PreparedTransaction.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/QueueStats.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/RecordNumberAppender.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/RecoveryOperation.html62
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationConfig.html230
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationDuplicateMasterException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationHandleDeadException.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationHoldElectionException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationHostAddress.html202
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationJoinFailureException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationLockoutException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationManagerAckPolicy.html261
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationManagerStartPolicy.html218
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationSiteUnavailableException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationStatus.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationTimeoutType.html231
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/ReplicationTransport.html38
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/RunRecoveryException.html24
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/SecondaryConfig.html42
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/SecondaryCursor.html46
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/SecondaryDatabase.html62
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/SecondaryKeyCreator.html56
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Sequence.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/SequenceConfig.html41
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/SequenceStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/StatsConfig.html90
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Transaction.html343
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/TransactionConfig.html67
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/TransactionStats.Active.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/TransactionStats.html36
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/UpdateConflictException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/VerifyConfig.html47
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/VersionMismatchException.html140
-rw-r--r--db/docs/java/com/sleepycat/db/package-frame.html48
-rw-r--r--db/docs/java/com/sleepycat/db/package-summary.html149
-rw-r--r--db/docs/java/com/sleepycat/db/package-tree.html77
-rw-r--r--db/docs/java/com/sleepycat/db/package-use.html138
-rw-r--r--db/docs/java/com/sleepycat/util/ExceptionUnwrapper.html65
-rw-r--r--db/docs/java/com/sleepycat/util/ExceptionWrapper.html90
-rw-r--r--db/docs/java/com/sleepycat/util/FastInputStream.html211
-rw-r--r--db/docs/java/com/sleepycat/util/FastOutputStream.html129
-rw-r--r--db/docs/java/com/sleepycat/util/IOExceptionWrapper.html112
-rw-r--r--db/docs/java/com/sleepycat/util/PackedInteger.html390
-rw-r--r--db/docs/java/com/sleepycat/util/RuntimeExceptionWrapper.html112
-rw-r--r--db/docs/java/com/sleepycat/util/UtfOps.html61
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/ExceptionUnwrapper.html24
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/ExceptionWrapper.html34
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/FastInputStream.html34
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/FastOutputStream.html64
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/IOExceptionWrapper.html24
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/PackedInteger.html140
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/RuntimeExceptionWrapper.html24
-rw-r--r--db/docs/java/com/sleepycat/util/class-use/UtfOps.html24
-rw-r--r--db/docs/java/com/sleepycat/util/package-frame.html6
-rw-r--r--db/docs/java/com/sleepycat/util/package-summary.html44
-rw-r--r--db/docs/java/com/sleepycat/util/package-tree.html52
-rw-r--r--db/docs/java/com/sleepycat/util/package-use.html56
-rw-r--r--db/docs/java/constant-values.html108
-rw-r--r--db/docs/java/deprecated-list.html220
-rw-r--r--db/docs/java/help-doc.html48
-rw-r--r--db/docs/java/index-all.html6897
-rw-r--r--db/docs/java/index.html21
-rw-r--r--db/docs/java/overview-frame.html8
-rw-r--r--db/docs/java/overview-summary.html34
-rw-r--r--db/docs/java/overview-tree.html171
-rw-r--r--db/docs/java/serialized-form.html147
-rw-r--r--db/docs/java/style.css6
-rw-r--r--db/docs/license/license_db.html113
-rw-r--r--db/docs/license/license_xml.html184
-rw-r--r--db/docs/ref/am/close.html4
-rw-r--r--db/docs/ref/am/count.html4
-rw-r--r--db/docs/ref/am/curclose.html4
-rw-r--r--db/docs/ref/am/curdel.html4
-rw-r--r--db/docs/ref/am/curdup.html4
-rw-r--r--db/docs/ref/am/curget.html6
-rw-r--r--db/docs/ref/am/curput.html4
-rw-r--r--db/docs/ref/am/cursor.html8
-rw-r--r--db/docs/ref/am/delete.html4
-rw-r--r--db/docs/ref/am/get.html4
-rw-r--r--db/docs/ref/am/join.html4
-rw-r--r--db/docs/ref/am/open.html4
-rw-r--r--db/docs/ref/am/opensub.html4
-rw-r--r--db/docs/ref/am/ops.html12
-rw-r--r--db/docs/ref/am/put.html4
-rw-r--r--db/docs/ref/am/second.html8
-rw-r--r--db/docs/ref/am/second.javas8
-rw-r--r--db/docs/ref/am/stat.html4
-rw-r--r--db/docs/ref/am/sync.html4
-rw-r--r--db/docs/ref/am/truncate.html4
-rw-r--r--db/docs/ref/am/upgrade.html4
-rw-r--r--db/docs/ref/am/verify.html4
-rw-r--r--db/docs/ref/am_conf/bt_compare.html4
-rw-r--r--db/docs/ref/am_conf/bt_minkey.html4
-rw-r--r--db/docs/ref/am_conf/bt_prefix.html4
-rw-r--r--db/docs/ref/am_conf/bt_recnum.html4
-rw-r--r--db/docs/ref/am_conf/byteorder.html4
-rw-r--r--db/docs/ref/am_conf/cachesize.html4
-rw-r--r--db/docs/ref/am_conf/dup.html4
-rw-r--r--db/docs/ref/am_conf/extentsize.html4
-rw-r--r--db/docs/ref/am_conf/h_ffactor.html4
-rw-r--r--db/docs/ref/am_conf/h_hash.html4
-rw-r--r--db/docs/ref/am_conf/h_nelem.html4
-rw-r--r--db/docs/ref/am_conf/intro.html4
-rw-r--r--db/docs/ref/am_conf/logrec.html4
-rw-r--r--db/docs/ref/am_conf/malloc.html4
-rw-r--r--db/docs/ref/am_conf/pagesize.html4
-rw-r--r--db/docs/ref/am_conf/re_source.html4
-rw-r--r--db/docs/ref/am_conf/recno.html4
-rw-r--r--db/docs/ref/am_conf/renumber.html4
-rw-r--r--db/docs/ref/am_conf/select.html4
-rw-r--r--db/docs/ref/am_misc/align.html4
-rw-r--r--db/docs/ref/am_misc/dbsizes.html12
-rw-r--r--db/docs/ref/am_misc/diskspace.html4
-rw-r--r--db/docs/ref/am_misc/error.html4
-rw-r--r--db/docs/ref/am_misc/faq.html28
-rw-r--r--db/docs/ref/am_misc/get_bulk.html4
-rw-r--r--db/docs/ref/am_misc/partial.html4
-rw-r--r--db/docs/ref/am_misc/perm.html4
-rw-r--r--db/docs/ref/am_misc/stability.html13
-rw-r--r--db/docs/ref/am_misc/struct.html4
-rw-r--r--db/docs/ref/am_misc/tune.html18
-rw-r--r--db/docs/ref/apprec/auto.html7
-rw-r--r--db/docs/ref/apprec/config.html4
-rw-r--r--db/docs/ref/apprec/def.html11
-rw-r--r--db/docs/ref/apprec/intro.html9
-rw-r--r--db/docs/ref/arch/apis.html4
-rw-r--r--db/docs/ref/arch/bigpic.html4
-rw-r--r--db/docs/ref/arch/progmodel.html4
-rw-r--r--db/docs/ref/arch/script.html8
-rw-r--r--db/docs/ref/arch/utilities.html4
-rw-r--r--db/docs/ref/build_unix/aix.html6
-rw-r--r--db/docs/ref/build_unix/conf.html32
-rw-r--r--db/docs/ref/build_unix/flags.html4
-rw-r--r--db/docs/ref/build_unix/freebsd.html4
-rw-r--r--db/docs/ref/build_unix/hpux.html4
-rw-r--r--db/docs/ref/build_unix/install.html4
-rw-r--r--db/docs/ref/build_unix/intro.html14
-rw-r--r--db/docs/ref/build_unix/irix.html4
-rw-r--r--db/docs/ref/build_unix/linux.html4
-rw-r--r--db/docs/ref/build_unix/macosx.html39
-rw-r--r--db/docs/ref/build_unix/notes.html13
-rw-r--r--db/docs/ref/build_unix/osf1.html4
-rw-r--r--db/docs/ref/build_unix/qnx.html19
-rw-r--r--db/docs/ref/build_unix/sco.html4
-rw-r--r--db/docs/ref/build_unix/shlib.html6
-rw-r--r--db/docs/ref/build_unix/small.html18
-rw-r--r--db/docs/ref/build_unix/solaris.html4
-rw-r--r--db/docs/ref/build_unix/sunos.html4
-rw-r--r--db/docs/ref/build_unix/test.html4
-rw-r--r--db/docs/ref/build_unix/ultrix.html4
-rw-r--r--db/docs/ref/build_vxworks/faq.html4
-rw-r--r--db/docs/ref/build_vxworks/intro.html4
-rw-r--r--db/docs/ref/build_vxworks/introae.html4
-rw-r--r--db/docs/ref/build_vxworks/notes.html4
-rw-r--r--db/docs/ref/build_win/faq.html26
-rw-r--r--db/docs/ref/build_win/intro.html239
-rw-r--r--db/docs/ref/build_win/notes.html78
-rw-r--r--db/docs/ref/build_win/small.html24
-rw-r--r--db/docs/ref/build_win/test.html20
-rw-r--r--db/docs/ref/cam/app.html310
-rw-r--r--db/docs/ref/cam/fail.html84
-rw-r--r--db/docs/ref/cam/intro.html55
-rw-r--r--db/docs/ref/debug/common.html14
-rw-r--r--db/docs/ref/debug/compile.html4
-rw-r--r--db/docs/ref/debug/intro.html31
-rw-r--r--db/docs/ref/debug/printlog.html12
-rw-r--r--db/docs/ref/debug/runtime.html4
-rw-r--r--db/docs/ref/distrib/layout.html17
-rw-r--r--db/docs/ref/distrib/port.html15
-rw-r--r--db/docs/ref/dumpload/format.html4
-rw-r--r--db/docs/ref/dumpload/text.html4
-rw-r--r--db/docs/ref/dumpload/utility.html4
-rw-r--r--db/docs/ref/env/create.html23
-rw-r--r--db/docs/ref/env/db_config.html17
-rw-r--r--db/docs/ref/env/encrypt.html8
-rw-r--r--db/docs/ref/env/error.html4
-rw-r--r--db/docs/ref/env/faq.html27
-rw-r--r--db/docs/ref/env/intro.html19
-rw-r--r--db/docs/ref/env/naming.html4
-rw-r--r--db/docs/ref/env/open.html4
-rw-r--r--db/docs/ref/env/region.html31
-rw-r--r--db/docs/ref/env/remote.html73
-rw-r--r--db/docs/ref/env/security.html4
-rw-r--r--db/docs/ref/ext/mod.html8
-rw-r--r--db/docs/ref/ext/perl.html8
-rw-r--r--db/docs/ref/ext/php.html4
-rw-r--r--db/docs/ref/install/file.html4
-rw-r--r--db/docs/ref/install/magic.s5.be.txt38
-rw-r--r--db/docs/ref/install/magic.s5.le.txt38
-rw-r--r--db/docs/ref/install/magic.txt9
-rw-r--r--db/docs/ref/install/multiple.html4
-rw-r--r--db/docs/ref/intro/data.html16
-rw-r--r--db/docs/ref/intro/dbis.html42
-rw-r--r--db/docs/ref/intro/dbisnot.html4
-rw-r--r--db/docs/ref/intro/distrib.html15
-rw-r--r--db/docs/ref/intro/need.html4
-rw-r--r--db/docs/ref/intro/products.html34
-rw-r--r--db/docs/ref/intro/terrain.html4
-rw-r--r--db/docs/ref/intro/what.html4
-rw-r--r--db/docs/ref/intro/where.html4
-rw-r--r--db/docs/ref/java/compat.html4
-rw-r--r--db/docs/ref/java/conf.html14
-rw-r--r--db/docs/ref/java/faq.html39
-rw-r--r--db/docs/ref/java/program.html4
-rw-r--r--db/docs/ref/lock/am_conv.html4
-rw-r--r--db/docs/ref/lock/cam_conv.html4
-rw-r--r--db/docs/ref/lock/config.html4
-rw-r--r--db/docs/ref/lock/dead.html8
-rw-r--r--db/docs/ref/lock/deaddbg.html10
-rw-r--r--db/docs/ref/lock/intro.html7
-rw-r--r--db/docs/ref/lock/max.html13
-rw-r--r--db/docs/ref/lock/nondb.html4
-rw-r--r--db/docs/ref/lock/notxn.html4
-rw-r--r--db/docs/ref/lock/page.html4
-rw-r--r--db/docs/ref/lock/stdmode.html4
-rw-r--r--db/docs/ref/lock/timeout.html10
-rw-r--r--db/docs/ref/lock/twopl.html4
-rw-r--r--db/docs/ref/log/config.html16
-rw-r--r--db/docs/ref/log/intro.html8
-rw-r--r--db/docs/ref/log/limits.html4
-rw-r--r--db/docs/ref/mp/config.html4
-rw-r--r--db/docs/ref/mp/intro.html12
-rw-r--r--db/docs/ref/pindex.src1
-rw-r--r--db/docs/ref/program/appsignals.html4
-rw-r--r--db/docs/ref/program/cache.html4
-rw-r--r--db/docs/ref/program/compatible.html4
-rw-r--r--db/docs/ref/program/copy.html101
-rw-r--r--db/docs/ref/program/environ.html4
-rw-r--r--db/docs/ref/program/errorret.html29
-rw-r--r--db/docs/ref/program/faq.html4
-rw-r--r--db/docs/ref/program/mt.html8
-rw-r--r--db/docs/ref/program/namespace.html4
-rw-r--r--db/docs/ref/program/ram.html141
-rw-r--r--db/docs/ref/program/runtime.html20
-rw-r--r--db/docs/ref/program/scope.html4
-rw-r--r--db/docs/ref/refs/bdb_usenix.html2
-rw-r--r--db/docs/ref/refs/refs.html10
-rw-r--r--db/docs/ref/refs/witold.html4
-rw-r--r--db/docs/ref/rep/app.html140
-rw-r--r--db/docs/ref/rep/base_meth.html61
-rw-r--r--db/docs/ref/rep/bulk.html43
-rw-r--r--db/docs/ref/rep/comm.html52
-rw-r--r--db/docs/ref/rep/elect.html42
-rw-r--r--db/docs/ref/rep/ex.html53
-rw-r--r--db/docs/ref/rep/ex_comm.html172
-rw-r--r--db/docs/ref/rep/ex_rq.html224
-rw-r--r--db/docs/ref/rep/faq.html18
-rw-r--r--db/docs/ref/rep/id.html8
-rw-r--r--db/docs/ref/rep/init.html58
-rw-r--r--db/docs/ref/rep/intro.html75
-rw-r--r--db/docs/ref/rep/mastersync.html118
-rw-r--r--db/docs/ref/rep/mgr_meth.html72
-rw-r--r--db/docs/ref/rep/newsite.html11
-rw-r--r--db/docs/ref/rep/partition.html30
-rw-r--r--db/docs/ref/rep/pri.html12
-rw-r--r--db/docs/ref/rep/trans.html26
-rw-r--r--db/docs/ref/rpc/client.html4
-rw-r--r--db/docs/ref/rpc/faq.html4
-rw-r--r--db/docs/ref/rpc/intro.html4
-rw-r--r--db/docs/ref/rpc/server.html4
-rw-r--r--db/docs/ref/sequence/intro.html8
-rw-r--r--db/docs/ref/tcl/error.html4
-rw-r--r--db/docs/ref/tcl/faq.html4
-rw-r--r--db/docs/ref/tcl/intro.html19
-rw-r--r--db/docs/ref/tcl/program.html10
-rw-r--r--db/docs/ref/tcl/using.html4
-rw-r--r--db/docs/ref/test/faq.html4
-rw-r--r--db/docs/ref/test/run.html10
-rw-r--r--db/docs/ref/toc.html40
-rw-r--r--db/docs/ref/transapp/admin.html4
-rw-r--r--db/docs/ref/transapp/app.html311
-rw-r--r--db/docs/ref/transapp/archival.html8
-rw-r--r--db/docs/ref/transapp/atomicity.html4
-rw-r--r--db/docs/ref/transapp/checkpoint.html6
-rw-r--r--db/docs/ref/transapp/cursor.html6
-rw-r--r--db/docs/ref/transapp/data_open.html4
-rw-r--r--db/docs/ref/transapp/deadlock.html4
-rw-r--r--db/docs/ref/transapp/env_open.html4
-rw-r--r--db/docs/ref/transapp/fail.html72
-rw-r--r--db/docs/ref/transapp/faq.html45
-rw-r--r--db/docs/ref/transapp/filesys.html4
-rw-r--r--db/docs/ref/transapp/hotfail.html8
-rw-r--r--db/docs/ref/transapp/inc.html8
-rw-r--r--db/docs/ref/transapp/intro.html4
-rw-r--r--db/docs/ref/transapp/logfile.html4
-rw-r--r--db/docs/ref/transapp/nested.html4
-rw-r--r--db/docs/ref/transapp/put.html39
-rw-r--r--db/docs/ref/transapp/read.html133
-rw-r--r--db/docs/ref/transapp/reclimit.html8
-rw-r--r--db/docs/ref/transapp/recovery.html12
-rw-r--r--db/docs/ref/transapp/term.html10
-rw-r--r--db/docs/ref/transapp/throughput.html4
-rw-r--r--db/docs/ref/transapp/transapp.cs2
-rw-r--r--db/docs/ref/transapp/tune.html64
-rw-r--r--db/docs/ref/transapp/why.html4
-rw-r--r--db/docs/ref/transapp/writetest.cs4
-rw-r--r--db/docs/ref/txn/config.html4
-rw-r--r--db/docs/ref/txn/intro.html7
-rw-r--r--db/docs/ref/txn/limits.html4
-rw-r--r--db/docs/ref/upgrade.2.0/convert.html4
-rw-r--r--db/docs/ref/upgrade.2.0/disk.html4
-rw-r--r--db/docs/ref/upgrade.2.0/intro.html4
-rw-r--r--db/docs/ref/upgrade.2.0/system.html4
-rw-r--r--db/docs/ref/upgrade.2.0/toc.html4
-rw-r--r--db/docs/ref/upgrade.3.0/close.html4
-rw-r--r--db/docs/ref/upgrade.3.0/cxx.html4
-rw-r--r--db/docs/ref/upgrade.3.0/db.html8
-rw-r--r--db/docs/ref/upgrade.3.0/db_cxx.html4
-rw-r--r--db/docs/ref/upgrade.3.0/dbenv.html8
-rw-r--r--db/docs/ref/upgrade.3.0/dbenv_cxx.html4
-rw-r--r--db/docs/ref/upgrade.3.0/dbinfo.html4
-rw-r--r--db/docs/ref/upgrade.3.0/disk.html4
-rw-r--r--db/docs/ref/upgrade.3.0/eacces.html4
-rw-r--r--db/docs/ref/upgrade.3.0/eagain.html4
-rw-r--r--db/docs/ref/upgrade.3.0/envopen.html4
-rw-r--r--db/docs/ref/upgrade.3.0/func.html4
-rw-r--r--db/docs/ref/upgrade.3.0/intro.html4
-rw-r--r--db/docs/ref/upgrade.3.0/java.html4
-rw-r--r--db/docs/ref/upgrade.3.0/join.html4
-rw-r--r--db/docs/ref/upgrade.3.0/jump_set.html4
-rw-r--r--db/docs/ref/upgrade.3.0/lock_detect.html4
-rw-r--r--db/docs/ref/upgrade.3.0/lock_notheld.html4
-rw-r--r--db/docs/ref/upgrade.3.0/lock_put.html4
-rw-r--r--db/docs/ref/upgrade.3.0/lock_stat.html4
-rw-r--r--db/docs/ref/upgrade.3.0/log_register.html4
-rw-r--r--db/docs/ref/upgrade.3.0/log_stat.html4
-rw-r--r--db/docs/ref/upgrade.3.0/memp_stat.html4
-rw-r--r--db/docs/ref/upgrade.3.0/open.html4
-rw-r--r--db/docs/ref/upgrade.3.0/rmw.html4
-rw-r--r--db/docs/ref/upgrade.3.0/stat.html4
-rw-r--r--db/docs/ref/upgrade.3.0/toc.html4
-rw-r--r--db/docs/ref/upgrade.3.0/txn_begin.html4
-rw-r--r--db/docs/ref/upgrade.3.0/txn_commit.html4
-rw-r--r--db/docs/ref/upgrade.3.0/txn_stat.html4
-rw-r--r--db/docs/ref/upgrade.3.0/value_set.html4
-rw-r--r--db/docs/ref/upgrade.3.0/xa.html4
-rw-r--r--db/docs/ref/upgrade.3.1/btstat.html4
-rw-r--r--db/docs/ref/upgrade.3.1/config.html4
-rw-r--r--db/docs/ref/upgrade.3.1/disk.html4
-rw-r--r--db/docs/ref/upgrade.3.1/dup.html4
-rw-r--r--db/docs/ref/upgrade.3.1/env.html4
-rw-r--r--db/docs/ref/upgrade.3.1/intro.html4
-rw-r--r--db/docs/ref/upgrade.3.1/log_register.html4
-rw-r--r--db/docs/ref/upgrade.3.1/logalloc.html8
-rw-r--r--db/docs/ref/upgrade.3.1/memp_register.html4
-rw-r--r--db/docs/ref/upgrade.3.1/put.html4
-rw-r--r--db/docs/ref/upgrade.3.1/set_feedback.html4
-rw-r--r--db/docs/ref/upgrade.3.1/set_paniccall.html14
-rw-r--r--db/docs/ref/upgrade.3.1/set_tx_recover.html4
-rw-r--r--db/docs/ref/upgrade.3.1/sysmem.html4
-rw-r--r--db/docs/ref/upgrade.3.1/tcl.html4
-rw-r--r--db/docs/ref/upgrade.3.1/tmp.html4
-rw-r--r--db/docs/ref/upgrade.3.1/toc.html4
-rw-r--r--db/docs/ref/upgrade.3.1/txn_check.html4
-rw-r--r--db/docs/ref/upgrade.3.2/callback.html4
-rw-r--r--db/docs/ref/upgrade.3.2/db_dump.html4
-rw-r--r--db/docs/ref/upgrade.3.2/disk.html4
-rw-r--r--db/docs/ref/upgrade.3.2/handle.html4
-rw-r--r--db/docs/ref/upgrade.3.2/incomplete.html4
-rw-r--r--db/docs/ref/upgrade.3.2/intro.html4
-rw-r--r--db/docs/ref/upgrade.3.2/mutexlock.html4
-rw-r--r--db/docs/ref/upgrade.3.2/notfound.html4
-rw-r--r--db/docs/ref/upgrade.3.2/renumber.html4
-rw-r--r--db/docs/ref/upgrade.3.2/set_flags.html4
-rw-r--r--db/docs/ref/upgrade.3.2/toc.html4
-rw-r--r--db/docs/ref/upgrade.3.2/tx_recover.html4
-rw-r--r--db/docs/ref/upgrade.3.3/alloc.html4
-rw-r--r--db/docs/ref/upgrade.3.3/bigfile.html4
-rw-r--r--db/docs/ref/upgrade.3.3/conflict.html4
-rw-r--r--db/docs/ref/upgrade.3.3/disk.html4
-rw-r--r--db/docs/ref/upgrade.3.3/getswap.html4
-rw-r--r--db/docs/ref/upgrade.3.3/gettype.html4
-rw-r--r--db/docs/ref/upgrade.3.3/intro.html4
-rw-r--r--db/docs/ref/upgrade.3.3/memp_fget.html4
-rw-r--r--db/docs/ref/upgrade.3.3/rpc.html4
-rw-r--r--db/docs/ref/upgrade.3.3/shared.html4
-rw-r--r--db/docs/ref/upgrade.3.3/toc.html4
-rw-r--r--db/docs/ref/upgrade.3.3/txn_prepare.html4
-rw-r--r--db/docs/ref/upgrade.4.0/asr.html9
-rw-r--r--db/docs/ref/upgrade.4.0/cxx.html12
-rw-r--r--db/docs/ref/upgrade.4.0/deadlock.html4
-rw-r--r--db/docs/ref/upgrade.4.0/disk.html4
-rw-r--r--db/docs/ref/upgrade.4.0/env.html18
-rw-r--r--db/docs/ref/upgrade.4.0/intro.html4
-rw-r--r--db/docs/ref/upgrade.4.0/java.html12
-rw-r--r--db/docs/ref/upgrade.4.0/lock.html4
-rw-r--r--db/docs/ref/upgrade.4.0/lock_id_free.html4
-rw-r--r--db/docs/ref/upgrade.4.0/log.html4
-rw-r--r--db/docs/ref/upgrade.4.0/mp.html4
-rw-r--r--db/docs/ref/upgrade.4.0/rpc.html4
-rw-r--r--db/docs/ref/upgrade.4.0/set_lk_max.html4
-rw-r--r--db/docs/ref/upgrade.4.0/toc.html4
-rw-r--r--db/docs/ref/upgrade.4.0/txn.html4
-rw-r--r--db/docs/ref/upgrade.4.1/app_dispatch.html4
-rw-r--r--db/docs/ref/upgrade.4.1/checkpoint.html13
-rw-r--r--db/docs/ref/upgrade.4.1/cxx.html4
-rw-r--r--db/docs/ref/upgrade.4.1/disk.html4
-rw-r--r--db/docs/ref/upgrade.4.1/excl.html4
-rw-r--r--db/docs/ref/upgrade.4.1/fop.html4
-rw-r--r--db/docs/ref/upgrade.4.1/hash_nelem.html4
-rw-r--r--db/docs/ref/upgrade.4.1/incomplete.html4
-rw-r--r--db/docs/ref/upgrade.4.1/intro.html4
-rw-r--r--db/docs/ref/upgrade.4.1/java.html4
-rw-r--r--db/docs/ref/upgrade.4.1/log_register.html9
-rw-r--r--db/docs/ref/upgrade.4.1/log_stat.html4
-rw-r--r--db/docs/ref/upgrade.4.1/memp_sync.html8
-rw-r--r--db/docs/ref/upgrade.4.1/toc.html4
-rw-r--r--db/docs/ref/upgrade.4.2/cksum.html4
-rw-r--r--db/docs/ref/upgrade.4.2/client.html4
-rw-r--r--db/docs/ref/upgrade.4.2/del.html4
-rw-r--r--db/docs/ref/upgrade.4.2/disk.html4
-rw-r--r--db/docs/ref/upgrade.4.2/intro.html4
-rw-r--r--db/docs/ref/upgrade.4.2/java.html30
-rw-r--r--db/docs/ref/upgrade.4.2/lockng.html4
-rw-r--r--db/docs/ref/upgrade.4.2/nosync.html4
-rw-r--r--db/docs/ref/upgrade.4.2/priority.html4
-rw-r--r--db/docs/ref/upgrade.4.2/queue.html4
-rw-r--r--db/docs/ref/upgrade.4.2/repinit.html4
-rw-r--r--db/docs/ref/upgrade.4.2/tcl.html4
-rw-r--r--db/docs/ref/upgrade.4.2/toc.html4
-rw-r--r--db/docs/ref/upgrade.4.2/verify.html4
-rw-r--r--db/docs/ref/upgrade.4.3/cput.html4
-rw-r--r--db/docs/ref/upgrade.4.3/disk.html10
-rw-r--r--db/docs/ref/upgrade.4.3/enomem.html4
-rw-r--r--db/docs/ref/upgrade.4.3/err.html4
-rw-r--r--db/docs/ref/upgrade.4.3/fileopen.html4
-rw-r--r--db/docs/ref/upgrade.4.3/intro.html4
-rw-r--r--db/docs/ref/upgrade.4.3/java.html10
-rw-r--r--db/docs/ref/upgrade.4.3/log.html4
-rw-r--r--db/docs/ref/upgrade.4.3/repl.html12
-rw-r--r--db/docs/ref/upgrade.4.3/rtc.html4
-rw-r--r--db/docs/ref/upgrade.4.3/stat.html10
-rw-r--r--db/docs/ref/upgrade.4.3/toc.html4
-rw-r--r--db/docs/ref/upgrade.4.3/verb.html4
-rw-r--r--db/docs/ref/upgrade.4.4/autocommit.html41
-rw-r--r--db/docs/ref/upgrade.4.4/clear.html32
-rw-r--r--db/docs/ref/upgrade.4.4/disk.html26
-rw-r--r--db/docs/ref/upgrade.4.4/intro.html26
-rw-r--r--db/docs/ref/upgrade.4.4/isolation.html28
-rw-r--r--db/docs/ref/upgrade.4.4/joinenv.html60
-rw-r--r--db/docs/ref/upgrade.4.4/lockstat.html28
-rw-r--r--db/docs/ref/upgrade.4.4/mutex.html32
-rw-r--r--db/docs/ref/upgrade.4.4/toc.html33
-rw-r--r--db/docs/ref/upgrade.4.5/alive.html30
-rw-r--r--db/docs/ref/upgrade.4.5/applog.html33
-rw-r--r--db/docs/ref/upgrade.4.5/collect.html31
-rw-r--r--db/docs/ref/upgrade.4.5/config.html31
-rw-r--r--db/docs/ref/upgrade.4.5/deprecate.html34
-rw-r--r--db/docs/ref/upgrade.4.5/disk.html26
-rw-r--r--db/docs/ref/upgrade.4.5/elect.html39
-rw-r--r--db/docs/ref/upgrade.4.5/intro.html26
-rw-r--r--db/docs/ref/upgrade.4.5/memp.html29
-rw-r--r--db/docs/ref/upgrade.4.5/pagesize.html27
-rw-r--r--db/docs/ref/upgrade.4.5/paniccall.html34
-rw-r--r--db/docs/ref/upgrade.4.5/rep_event.html29
-rw-r--r--db/docs/ref/upgrade.4.5/rep_set.html30
-rw-r--r--db/docs/ref/upgrade.4.5/source.html37
-rw-r--r--db/docs/ref/upgrade.4.5/toc.html39
-rw-r--r--db/docs/ref/upgrade/process.html34
-rw-r--r--db/docs/ref/upgrade/version.html4
-rw-r--r--db/docs/ref/xa/build.html4
-rw-r--r--db/docs/ref/xa/faq.html4
-rw-r--r--db/docs/ref/xa/intro.html4
-rw-r--r--db/docs/ref/xa/xa_config.html4
-rw-r--r--db/docs/ref/xa/xa_intro.html4
-rw-r--r--db/docs/utility/berkeley_db_svc.html4
-rw-r--r--db/docs/utility/db_archive.html9
-rw-r--r--db/docs/utility/db_checkpoint.html15
-rw-r--r--db/docs/utility/db_deadlock.html4
-rw-r--r--db/docs/utility/db_dump.html4
-rw-r--r--db/docs/utility/db_hotbackup.html129
-rw-r--r--db/docs/utility/db_load.html4
-rw-r--r--db/docs/utility/db_printlog.html4
-rw-r--r--db/docs/utility/db_recover.html10
-rw-r--r--db/docs/utility/db_stat.html23
-rw-r--r--db/docs/utility/db_upgrade.html9
-rw-r--r--db/docs/utility/db_verify.html4
-rw-r--r--db/docs/utility/index.html7
-rw-r--r--db/env/db_salloc.c41
-rw-r--r--db/env/db_shash.c10
-rw-r--r--db/env/env_config.c370
-rw-r--r--db/env/env_failchk.c335
-rw-r--r--db/env/env_file.c131
-rw-r--r--db/env/env_method.c717
-rw-r--r--db/env/env_open.c1092
-rw-r--r--db/env/env_recover.c324
-rw-r--r--db/env/env_region.c711
-rw-r--r--db/env/env_register.c422
-rw-r--r--db/env/env_stat.c341
-rw-r--r--db/examples_c/README6
-rw-r--r--db/examples_c/bench_001.c137
-rw-r--r--db/examples_c/csv/DbRecord.c471
-rw-r--r--db/examples_c/csv/README409
-rw-r--r--db/examples_c/csv/code.c406
-rw-r--r--db/examples_c/csv/csv.h102
-rw-r--r--db/examples_c/csv/csv_extern.h38
-rw-r--r--db/examples_c/csv/db.c245
-rw-r--r--db/examples_c/csv/load.c347
-rw-r--r--db/examples_c/csv/load_main.c118
-rw-r--r--db/examples_c/csv/query.c242
-rw-r--r--db/examples_c/csv/query_main.c100
-rw-r--r--db/examples_c/csv/sample.csv8
-rw-r--r--db/examples_c/csv/sample.desc10
-rw-r--r--db/examples_c/csv/util.c310
-rw-r--r--db/examples_c/ex_access.c6
-rw-r--r--db/examples_c/ex_apprec/ex_apprec.c6
-rw-r--r--db/examples_c/ex_apprec/ex_apprec.h6
-rw-r--r--db/examples_c/ex_apprec/ex_apprec.src8
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_auto.c26
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_auto.h2
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_autop.c12
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_rec.c6
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_template6
-rw-r--r--db/examples_c/ex_btrec.c6
-rw-r--r--db/examples_c/ex_dbclient.c6
-rw-r--r--db/examples_c/ex_env.c6
-rw-r--r--db/examples_c/ex_lock.c6
-rw-r--r--db/examples_c/ex_mpool.c8
-rw-r--r--db/examples_c/ex_rep/README19
-rw-r--r--db/examples_c/ex_rep/base/rep_base.c252
-rw-r--r--db/examples_c/ex_rep/base/rep_base.h132
-rw-r--r--db/examples_c/ex_rep/base/rep_msg.c464
-rw-r--r--db/examples_c/ex_rep/base/rep_net.c748
-rw-r--r--db/examples_c/ex_rep/common/rep_common.c286
-rw-r--r--db/examples_c/ex_rep/common/rep_common.h18
-rw-r--r--db/examples_c/ex_rep/mgr/rep_mgr.c149
-rw-r--r--db/examples_c/ex_sequence.c36
-rw-r--r--db/examples_c/ex_thread.c12
-rw-r--r--db/examples_c/ex_tpcb.c23
-rw-r--r--db/examples_c/getting_started/example_database_load.c29
-rw-r--r--db/examples_c/getting_started/example_database_read.c16
-rw-r--r--db/examples_c/getting_started/gettingstarted_common.c9
-rw-r--r--db/examples_c/getting_started/gettingstarted_common.h51
-rw-r--r--db/examples_c/txn_guide/txn_guide.c461
-rw-r--r--db/examples_c/txn_guide/txn_guide_inmemory.c450
-rw-r--r--db/examples_cxx/AccessExample.cpp6
-rw-r--r--db/examples_cxx/BtRecExample.cpp6
-rw-r--r--db/examples_cxx/EnvExample.cpp6
-rw-r--r--db/examples_cxx/LockExample.cpp6
-rw-r--r--db/examples_cxx/MpoolExample.cpp8
-rw-r--r--db/examples_cxx/SequenceExample.cpp12
-rw-r--r--db/examples_cxx/TpcbExample.cpp89
-rw-r--r--db/examples_cxx/excxx_repquote/RepConfigInfo.cpp53
-rw-r--r--db/examples_cxx/excxx_repquote/RepConfigInfo.h36
-rw-r--r--db/examples_cxx/excxx_repquote/RepQuoteExample.cpp459
-rw-r--r--db/examples_cxx/getting_started/excxx_example_database_load.cpp17
-rw-r--r--db/examples_cxx/getting_started/excxx_example_database_read.cpp7
-rw-r--r--db/examples_cxx/getting_started/gettingStartedCommon.hpp34
-rw-r--r--db/examples_cxx/txn_guide/TxnGuide.cpp387
-rw-r--r--db/examples_cxx/txn_guide/TxnGuideInMemory.cpp369
-rw-r--r--db/examples_java/src/collections/access/AccessExample.java286
-rw-r--r--db/examples_java/src/collections/hello/HelloDatabaseWorld.java163
-rw-r--r--db/examples_java/src/collections/ship/basic/PartData.java65
-rw-r--r--db/examples_java/src/collections/ship/basic/PartKey.java41
-rw-r--r--db/examples_java/src/collections/ship/basic/Sample.java267
-rw-r--r--db/examples_java/src/collections/ship/basic/SampleDatabase.java135
-rw-r--r--db/examples_java/src/collections/ship/basic/SampleViews.java123
-rw-r--r--db/examples_java/src/collections/ship/basic/ShipmentData.java42
-rw-r--r--db/examples_java/src/collections/ship/basic/ShipmentKey.java49
-rw-r--r--db/examples_java/src/collections/ship/basic/SupplierData.java58
-rw-r--r--db/examples_java/src/collections/ship/basic/SupplierKey.java41
-rw-r--r--db/examples_java/src/collections/ship/basic/Weight.java50
-rw-r--r--db/examples_java/src/collections/ship/entity/Part.java73
-rw-r--r--db/examples_java/src/collections/ship/entity/PartData.java66
-rw-r--r--db/examples_java/src/collections/ship/entity/PartKey.java41
-rw-r--r--db/examples_java/src/collections/ship/entity/Sample.java250
-rw-r--r--db/examples_java/src/collections/ship/entity/SampleDatabase.java330
-rw-r--r--db/examples_java/src/collections/ship/entity/SampleViews.java307
-rw-r--r--db/examples_java/src/collections/ship/entity/Shipment.java56
-rw-r--r--db/examples_java/src/collections/ship/entity/ShipmentData.java43
-rw-r--r--db/examples_java/src/collections/ship/entity/ShipmentKey.java49
-rw-r--r--db/examples_java/src/collections/ship/entity/Supplier.java64
-rw-r--r--db/examples_java/src/collections/ship/entity/SupplierData.java59
-rw-r--r--db/examples_java/src/collections/ship/entity/SupplierKey.java41
-rw-r--r--db/examples_java/src/collections/ship/entity/Weight.java50
-rw-r--r--db/examples_java/src/collections/ship/factory/Part.java107
-rw-r--r--db/examples_java/src/collections/ship/factory/PartKey.java61
-rw-r--r--db/examples_java/src/collections/ship/factory/Sample.java248
-rw-r--r--db/examples_java/src/collections/ship/factory/SampleDatabase.java225
-rw-r--r--db/examples_java/src/collections/ship/factory/SampleViews.java143
-rw-r--r--db/examples_java/src/collections/ship/factory/Shipment.java103
-rw-r--r--db/examples_java/src/collections/ship/factory/ShipmentKey.java71
-rw-r--r--db/examples_java/src/collections/ship/factory/Supplier.java109
-rw-r--r--db/examples_java/src/collections/ship/factory/SupplierKey.java61
-rw-r--r--db/examples_java/src/collections/ship/factory/Weight.java50
-rw-r--r--db/examples_java/src/collections/ship/index/PartData.java65
-rw-r--r--db/examples_java/src/collections/ship/index/PartKey.java41
-rw-r--r--db/examples_java/src/collections/ship/index/Sample.java303
-rw-r--r--db/examples_java/src/collections/ship/index/SampleDatabase.java330
-rw-r--r--db/examples_java/src/collections/ship/index/SampleViews.java162
-rw-r--r--db/examples_java/src/collections/ship/index/ShipmentData.java42
-rw-r--r--db/examples_java/src/collections/ship/index/ShipmentKey.java49
-rw-r--r--db/examples_java/src/collections/ship/index/SupplierData.java58
-rw-r--r--db/examples_java/src/collections/ship/index/SupplierKey.java41
-rw-r--r--db/examples_java/src/collections/ship/index/Weight.java50
-rw-r--r--db/examples_java/src/collections/ship/marshal/MarshalledEnt.java43
-rw-r--r--db/examples_java/src/collections/ship/marshal/MarshalledKey.java37
-rw-r--r--db/examples_java/src/collections/ship/marshal/Part.java117
-rw-r--r--db/examples_java/src/collections/ship/marshal/PartKey.java60
-rw-r--r--db/examples_java/src/collections/ship/marshal/Sample.java250
-rw-r--r--db/examples_java/src/collections/ship/marshal/SampleDatabase.java259
-rw-r--r--db/examples_java/src/collections/ship/marshal/SampleViews.java277
-rw-r--r--db/examples_java/src/collections/ship/marshal/Shipment.java114
-rw-r--r--db/examples_java/src/collections/ship/marshal/ShipmentKey.java70
-rw-r--r--db/examples_java/src/collections/ship/marshal/Supplier.java119
-rw-r--r--db/examples_java/src/collections/ship/marshal/SupplierKey.java60
-rw-r--r--db/examples_java/src/collections/ship/marshal/Weight.java50
-rw-r--r--db/examples_java/src/collections/ship/sentity/Part.java91
-rw-r--r--db/examples_java/src/collections/ship/sentity/PartKey.java39
-rw-r--r--db/examples_java/src/collections/ship/sentity/Sample.java250
-rw-r--r--db/examples_java/src/collections/ship/sentity/SampleDatabase.java322
-rw-r--r--db/examples_java/src/collections/ship/sentity/SampleViews.java420
-rw-r--r--db/examples_java/src/collections/ship/sentity/Shipment.java76
-rw-r--r--db/examples_java/src/collections/ship/sentity/ShipmentKey.java47
-rw-r--r--db/examples_java/src/collections/ship/sentity/Supplier.java83
-rw-r--r--db/examples_java/src/collections/ship/sentity/SupplierKey.java39
-rw-r--r--db/examples_java/src/collections/ship/sentity/Weight.java50
-rw-r--r--db/examples_java/src/collections/ship/tuple/Part.java73
-rw-r--r--db/examples_java/src/collections/ship/tuple/PartData.java66
-rw-r--r--db/examples_java/src/collections/ship/tuple/PartKey.java39
-rw-r--r--db/examples_java/src/collections/ship/tuple/Sample.java249
-rw-r--r--db/examples_java/src/collections/ship/tuple/SampleDatabase.java322
-rw-r--r--db/examples_java/src/collections/ship/tuple/SampleViews.java397
-rw-r--r--db/examples_java/src/collections/ship/tuple/Shipment.java56
-rw-r--r--db/examples_java/src/collections/ship/tuple/ShipmentData.java43
-rw-r--r--db/examples_java/src/collections/ship/tuple/ShipmentKey.java47
-rw-r--r--db/examples_java/src/collections/ship/tuple/Supplier.java64
-rw-r--r--db/examples_java/src/collections/ship/tuple/SupplierData.java59
-rw-r--r--db/examples_java/src/collections/ship/tuple/SupplierKey.java39
-rw-r--r--db/examples_java/src/collections/ship/tuple/Weight.java50
-rw-r--r--db/examples_java/src/db/AccessExample.java183
-rw-r--r--db/examples_java/src/db/BtRecExample.java289
-rw-r--r--db/examples_java/src/db/BulkAccessExample.java162
-rw-r--r--db/examples_java/src/db/BulkAccessNIOExample.java182
-rw-r--r--db/examples_java/src/db/EnvExample.java116
-rw-r--r--db/examples_java/src/db/GettingStarted/ExampleDatabaseLoad.java223
-rw-r--r--db/examples_java/src/db/GettingStarted/ExampleDatabaseRead.java197
-rw-r--r--db/examples_java/src/db/GettingStarted/Inventory.java62
-rw-r--r--db/examples_java/src/db/GettingStarted/InventoryBinding.java46
-rw-r--r--db/examples_java/src/db/GettingStarted/ItemNameKeyCreator.java37
-rw-r--r--db/examples_java/src/db/GettingStarted/MyDbs.java157
-rw-r--r--db/examples_java/src/db/GettingStarted/Vendor.java82
-rw-r--r--db/examples_java/src/db/GettingStarted/inventory.txt800
-rw-r--r--db/examples_java/src/db/GettingStarted/vendors.txt6
-rw-r--r--db/examples_java/src/db/LockExample.java212
-rw-r--r--db/examples_java/src/db/RPCExample.java107
-rw-r--r--db/examples_java/src/db/SequenceExample.java93
-rw-r--r--db/examples_java/src/db/TpcbExample.java789
-rw-r--r--db/examples_java/src/db/repquote/RepConfig.java104
-rw-r--r--db/examples_java/src/db/repquote/RepQuoteEnvironment.java41
-rw-r--r--db/examples_java/src/db/repquote/RepQuoteExample.java407
-rw-r--r--db/examples_java/src/db/txn/DBWriter.java205
-rw-r--r--db/examples_java/src/db/txn/PayloadData.java19
-rw-r--r--db/examples_java/src/db/txn/TxnGuide.java173
-rw-r--r--db/examples_java/src/db/txn/TxnGuideInMemory.java164
-rw-r--r--db/fileops/fileops.src24
-rw-r--r--db/fileops/fileops_auto.c238
-rw-r--r--db/fileops/fileops_autop.c68
-rw-r--r--db/fileops/fop_basic.c90
-rw-r--r--db/fileops/fop_rec.c76
-rw-r--r--db/fileops/fop_util.c1081
-rw-r--r--db/hash/hash.c294
-rw-r--r--db/hash/hash.src63
-rw-r--r--db/hash/hash_auto.c679
-rw-r--r--db/hash/hash_autop.c199
-rw-r--r--db/hash/hash_conv.c10
-rw-r--r--db/hash/hash_dup.c117
-rw-r--r--db/hash/hash_func.c10
-rw-r--r--db/hash/hash_meta.c42
-rw-r--r--db/hash/hash_method.c10
-rw-r--r--db/hash/hash_open.c92
-rw-r--r--db/hash/hash_page.c252
-rw-r--r--db/hash/hash_rec.c746
-rw-r--r--db/hash/hash_reclaim.c20
-rw-r--r--db/hash/hash_stat.c38
-rw-r--r--db/hash/hash_stub.c44
-rw-r--r--db/hash/hash_upgrade.c16
-rw-r--r--db/hash/hash_verify.c113
-rw-r--r--db/hmac/hmac.c74
-rw-r--r--db/hmac/sha1.c26
-rw-r--r--db/hsearch/hsearch.c25
-rw-r--r--db/java/src/com/sleepycat/bind/ByteArrayBinding.java24
-rw-r--r--db/java/src/com/sleepycat/bind/EntityBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/EntryBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/RecordNumberBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/package.html2
-rw-r--r--db/java/src/com/sleepycat/bind/serial/ClassCatalog.java6
-rw-r--r--db/java/src/com/sleepycat/bind/serial/SerialBase.java93
-rw-r--r--db/java/src/com/sleepycat/bind/serial/SerialBinding.java51
-rw-r--r--db/java/src/com/sleepycat/bind/serial/SerialInput.java45
-rw-r--r--db/java/src/com/sleepycat/bind/serial/SerialOutput.java15
-rw-r--r--db/java/src/com/sleepycat/bind/serial/SerialSerialBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/serial/SerialSerialKeyCreator.java6
-rw-r--r--db/java/src/com/sleepycat/bind/serial/StoredClassCatalog.java56
-rw-r--r--db/java/src/com/sleepycat/bind/serial/TupleSerialBinding.java17
-rw-r--r--db/java/src/com/sleepycat/bind/serial/TupleSerialKeyCreator.java17
-rw-r--r--db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.java6
-rw-r--r--db/java/src/com/sleepycat/bind/serial/package.html2
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/BooleanBinding.java24
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/ByteBinding.java23
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/CharacterBinding.java23
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/DoubleBinding.java29
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/FloatBinding.java28
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/IntegerBinding.java23
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/LongBinding.java23
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/MarshalledTupleEntry.java6
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.java6
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/ShortBinding.java23
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/SortedDoubleBinding.java86
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/SortedFloatBinding.java85
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/StringBinding.java24
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleBase.java164
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleBinding.java112
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleInput.java205
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleInputBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleMarshalledBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleOutput.java112
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleTupleBinding.java17
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleTupleKeyCreator.java29
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.java6
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.java6
-rw-r--r--db/java/src/com/sleepycat/bind/tuple/package.html2
-rw-r--r--db/java/src/com/sleepycat/collections/BaseIterator.java35
-rw-r--r--db/java/src/com/sleepycat/collections/BlockIterator.java728
-rw-r--r--db/java/src/com/sleepycat/collections/CurrentTransaction.java67
-rw-r--r--db/java/src/com/sleepycat/collections/DataCursor.java309
-rw-r--r--db/java/src/com/sleepycat/collections/DataView.java147
-rw-r--r--db/java/src/com/sleepycat/collections/MapEntryParameter.java6
-rw-r--r--db/java/src/com/sleepycat/collections/MyRangeCursor.java74
-rw-r--r--db/java/src/com/sleepycat/collections/PrimaryKeyAssigner.java6
-rw-r--r--db/java/src/com/sleepycat/collections/StoredCollection.java201
-rw-r--r--db/java/src/com/sleepycat/collections/StoredCollections.java214
-rw-r--r--db/java/src/com/sleepycat/collections/StoredContainer.java147
-rw-r--r--db/java/src/com/sleepycat/collections/StoredEntrySet.java38
-rw-r--r--db/java/src/com/sleepycat/collections/StoredIterator.java71
-rw-r--r--db/java/src/com/sleepycat/collections/StoredKeySet.java26
-rw-r--r--db/java/src/com/sleepycat/collections/StoredList.java67
-rw-r--r--db/java/src/com/sleepycat/collections/StoredMap.java195
-rw-r--r--db/java/src/com/sleepycat/collections/StoredMapEntry.java18
-rw-r--r--db/java/src/com/sleepycat/collections/StoredSortedEntrySet.java35
-rw-r--r--db/java/src/com/sleepycat/collections/StoredSortedKeySet.java35
-rw-r--r--db/java/src/com/sleepycat/collections/StoredSortedMap.java36
-rw-r--r--db/java/src/com/sleepycat/collections/StoredSortedValueSet.java35
-rw-r--r--db/java/src/com/sleepycat/collections/StoredValueSet.java58
-rw-r--r--db/java/src/com/sleepycat/collections/TransactionRunner.java97
-rw-r--r--db/java/src/com/sleepycat/collections/TransactionWorker.java6
-rw-r--r--db/java/src/com/sleepycat/collections/TupleSerialFactory.java6
-rw-r--r--db/java/src/com/sleepycat/collections/package.html11
-rw-r--r--db/java/src/com/sleepycat/compat/DbCompat.java45
-rw-r--r--db/java/src/com/sleepycat/db/BtreePrefixCalculator.java6
-rw-r--r--db/java/src/com/sleepycat/db/BtreeStats.java12
-rw-r--r--db/java/src/com/sleepycat/db/CacheFile.java6
-rw-r--r--db/java/src/com/sleepycat/db/CacheFilePriority.java14
-rw-r--r--db/java/src/com/sleepycat/db/CacheFileStats.java6
-rw-r--r--db/java/src/com/sleepycat/db/CacheStats.java36
-rw-r--r--db/java/src/com/sleepycat/db/CheckpointConfig.java14
-rw-r--r--db/java/src/com/sleepycat/db/CompactConfig.java79
-rw-r--r--db/java/src/com/sleepycat/db/CompactStats.java85
-rw-r--r--db/java/src/com/sleepycat/db/Cursor.java25
-rw-r--r--db/java/src/com/sleepycat/db/CursorConfig.java62
-rw-r--r--db/java/src/com/sleepycat/db/Database.java43
-rw-r--r--db/java/src/com/sleepycat/db/DatabaseConfig.java56
-rw-r--r--db/java/src/com/sleepycat/db/DatabaseEntry.java114
-rw-r--r--db/java/src/com/sleepycat/db/DatabaseException.java13
-rw-r--r--db/java/src/com/sleepycat/db/DatabaseStats.java13
-rw-r--r--db/java/src/com/sleepycat/db/DatabaseType.java14
-rw-r--r--db/java/src/com/sleepycat/db/DeadlockException.java13
-rw-r--r--db/java/src/com/sleepycat/db/Environment.java114
-rw-r--r--db/java/src/com/sleepycat/db/EnvironmentConfig.java377
-rw-r--r--db/java/src/com/sleepycat/db/ErrorHandler.java11
-rw-r--r--db/java/src/com/sleepycat/db/EventHandler.java14
-rw-r--r--db/java/src/com/sleepycat/db/EventType.java68
-rw-r--r--db/java/src/com/sleepycat/db/FeedbackHandler.java11
-rw-r--r--db/java/src/com/sleepycat/db/HashStats.java6
-rw-r--r--db/java/src/com/sleepycat/db/Hasher.java11
-rw-r--r--db/java/src/com/sleepycat/db/JoinConfig.java14
-rw-r--r--db/java/src/com/sleepycat/db/JoinCursor.java14
-rw-r--r--db/java/src/com/sleepycat/db/KeyRange.java11
-rw-r--r--db/java/src/com/sleepycat/db/Lock.java12
-rw-r--r--db/java/src/com/sleepycat/db/LockDetectMode.java14
-rw-r--r--db/java/src/com/sleepycat/db/LockMode.java27
-rw-r--r--db/java/src/com/sleepycat/db/LockNotGrantedException.java13
-rw-r--r--db/java/src/com/sleepycat/db/LockOperation.java14
-rw-r--r--db/java/src/com/sleepycat/db/LockRequest.java11
-rw-r--r--db/java/src/com/sleepycat/db/LockRequestMode.java14
-rw-r--r--db/java/src/com/sleepycat/db/LockStats.java38
-rw-r--r--db/java/src/com/sleepycat/db/LogCursor.java10
-rw-r--r--db/java/src/com/sleepycat/db/LogRecordHandler.java11
-rw-r--r--db/java/src/com/sleepycat/db/LogSequenceNumber.java6
-rw-r--r--db/java/src/com/sleepycat/db/LogStats.java18
-rw-r--r--db/java/src/com/sleepycat/db/MemoryException.java13
-rw-r--r--db/java/src/com/sleepycat/db/MessageHandler.java11
-rw-r--r--db/java/src/com/sleepycat/db/MultipleDataEntry.java19
-rw-r--r--db/java/src/com/sleepycat/db/MultipleEntry.java27
-rw-r--r--db/java/src/com/sleepycat/db/MultipleKeyDataEntry.java19
-rw-r--r--db/java/src/com/sleepycat/db/MultipleKeyNIODataEntry.java74
-rw-r--r--db/java/src/com/sleepycat/db/MultipleNIODataEntry.java69
-rw-r--r--db/java/src/com/sleepycat/db/MultipleRecnoDataEntry.java19
-rw-r--r--db/java/src/com/sleepycat/db/MultipleRecnoNIODataEntry.java73
-rw-r--r--db/java/src/com/sleepycat/db/MutexStats.java74
-rw-r--r--db/java/src/com/sleepycat/db/OperationStatus.java14
-rw-r--r--db/java/src/com/sleepycat/db/PanicHandler.java11
-rw-r--r--db/java/src/com/sleepycat/db/PreparedTransaction.java11
-rw-r--r--db/java/src/com/sleepycat/db/QueueStats.java6
-rw-r--r--db/java/src/com/sleepycat/db/RecordNumberAppender.java11
-rw-r--r--db/java/src/com/sleepycat/db/RecoveryOperation.java14
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationConfig.java60
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationDuplicateMasterException.java19
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationHandleDeadException.java13
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationHoldElectionException.java19
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationHostAddress.java43
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationJoinFailureException.java19
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationLockoutException.java19
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationManagerAckPolicy.java76
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationManagerStartPolicy.java68
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationSiteUnavailableException.java19
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationStats.java60
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationStatus.java38
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationTimeoutType.java61
-rw-r--r--db/java/src/com/sleepycat/db/ReplicationTransport.java15
-rw-r--r--db/java/src/com/sleepycat/db/RunRecoveryException.java13
-rw-r--r--db/java/src/com/sleepycat/db/SecondaryConfig.java25
-rw-r--r--db/java/src/com/sleepycat/db/SecondaryCursor.java14
-rw-r--r--db/java/src/com/sleepycat/db/SecondaryDatabase.java14
-rw-r--r--db/java/src/com/sleepycat/db/SecondaryKeyCreator.java14
-rw-r--r--db/java/src/com/sleepycat/db/Sequence.java6
-rw-r--r--db/java/src/com/sleepycat/db/SequenceConfig.java14
-rw-r--r--db/java/src/com/sleepycat/db/SequenceStats.java6
-rw-r--r--db/java/src/com/sleepycat/db/StatsConfig.java14
-rw-r--r--db/java/src/com/sleepycat/db/Transaction.java26
-rw-r--r--db/java/src/com/sleepycat/db/TransactionConfig.java52
-rw-r--r--db/java/src/com/sleepycat/db/TransactionStats.java50
-rw-r--r--db/java/src/com/sleepycat/db/VerifyConfig.java14
-rw-r--r--db/java/src/com/sleepycat/db/VersionMismatchException.java19
-rw-r--r--db/java/src/com/sleepycat/db/internal/Db.java68
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbConstants.java226
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbEnv.java183
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbLock.java11
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbLogc.java11
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbMpoolFile.java11
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbSequence.java11
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbTxn.java17
-rw-r--r--db/java/src/com/sleepycat/db/internal/DbUtil.java11
-rw-r--r--db/java/src/com/sleepycat/db/internal/Dbc.java11
-rw-r--r--db/java/src/com/sleepycat/db/internal/db_java.java5
-rw-r--r--db/java/src/com/sleepycat/db/internal/db_javaJNI.java76
-rw-r--r--db/java/src/com/sleepycat/db/package.html8
-rw-r--r--db/java/src/com/sleepycat/util/ExceptionUnwrapper.java12
-rw-r--r--db/java/src/com/sleepycat/util/ExceptionWrapper.java28
-rw-r--r--db/java/src/com/sleepycat/util/FastInputStream.java29
-rw-r--r--db/java/src/com/sleepycat/util/FastOutputStream.java71
-rw-r--r--db/java/src/com/sleepycat/util/IOExceptionWrapper.java14
-rw-r--r--db/java/src/com/sleepycat/util/PackedInteger.java183
-rw-r--r--db/java/src/com/sleepycat/util/RuntimeExceptionWrapper.java14
-rw-r--r--db/java/src/com/sleepycat/util/UtfOps.java6
-rw-r--r--db/java/src/com/sleepycat/util/keyrange/KeyRange.java342
-rw-r--r--db/java/src/com/sleepycat/util/keyrange/KeyRangeException.java26
-rw-r--r--db/java/src/com/sleepycat/util/keyrange/RangeCursor.java1060
-rw-r--r--db/java/src/com/sleepycat/util/package.html2
-rw-r--r--db/libdb_java/README6
-rw-r--r--db/libdb_java/db.i534
-rw-r--r--db/libdb_java/db_java.i110
-rw-r--r--db/libdb_java/db_java_wrap.c12421
-rw-r--r--db/libdb_java/java_callbacks.i287
-rw-r--r--db/libdb_java/java_except.i45
-rw-r--r--db/libdb_java/java_stat.i30
-rw-r--r--db/libdb_java/java_stat_auto.c82
-rw-r--r--db/libdb_java/java_typemaps.i350
-rw-r--r--db/libdb_java/java_util.i225
-rw-r--r--db/lock/Design2
-rw-r--r--db/lock/lock.c413
-rw-r--r--db/lock/lock_deadlock.c232
-rw-r--r--db/lock/lock_failchk.c95
-rw-r--r--db/lock/lock_id.c135
-rw-r--r--db/lock/lock_list.c37
-rw-r--r--db/lock/lock_method.c191
-rw-r--r--db/lock/lock_region.c172
-rw-r--r--db/lock/lock_stat.c170
-rw-r--r--db/lock/lock_timer.c26
-rw-r--r--db/lock/lock_util.c63
-rw-r--r--db/log/log.c519
-rw-r--r--db/log/log_archive.c192
-rw-r--r--db/log/log_compare.c54
-rw-r--r--db/log/log_debug.c153
-rw-r--r--db/log/log_get.c415
-rw-r--r--db/log/log_method.c188
-rw-r--r--db/log/log_put.c494
-rw-r--r--db/log/log_stat.c84
-rw-r--r--db/mod_db4/ABOUT3
-rw-r--r--db/mod_db4/BSD10
-rw-r--r--db/mod_db4/Makefile.in7
-rwxr-xr-xdb/mod_db4/configure500
-rw-r--r--db/mod_db4/configure.in18
-rw-r--r--db/mod_db4/mm_hash.c13
-rw-r--r--db/mod_db4/mm_hash.h12
-rw-r--r--db/mod_db4/mod_db4.c8
-rw-r--r--db/mod_db4/mod_db4_export.h8
-rw-r--r--db/mod_db4/sem_utils.c8
-rw-r--r--db/mod_db4/sem_utils.h8
-rw-r--r--db/mod_db4/skiplist.c8
-rw-r--r--db/mod_db4/skiplist.h8
-rw-r--r--db/mod_db4/utils.c8
-rw-r--r--db/mod_db4/utils.h8
-rw-r--r--db/mp/mp_alloc.c279
-rw-r--r--db/mp/mp_bh.c329
-rw-r--r--db/mp/mp_fget.c575
-rw-r--r--db/mp/mp_fmethod.c144
-rw-r--r--db/mp/mp_fopen.c779
-rw-r--r--db/mp/mp_fput.c173
-rw-r--r--db/mp/mp_fset.c151
-rw-r--r--db/mp/mp_method.c560
-rw-r--r--db/mp/mp_mvcc.c682
-rw-r--r--db/mp/mp_region.c302
-rw-r--r--db/mp/mp_register.c75
-rw-r--r--db/mp/mp_stat.c544
-rw-r--r--db/mp/mp_sync.c470
-rw-r--r--db/mp/mp_trickle.c59
-rw-r--r--db/mutex/README58
-rw-r--r--db/mutex/mut_alloc.c230
-rw-r--r--db/mutex/mut_failchk.c69
-rw-r--r--db/mutex/mut_fcntl.c163
-rw-r--r--db/mutex/mut_method.c286
-rw-r--r--db/mutex/mut_pthread.c321
-rw-r--r--db/mutex/mut_region.c356
-rw-r--r--db/mutex/mut_stat.c450
-rw-r--r--db/mutex/mut_tas.c228
-rw-r--r--db/mutex/mut_win32.c240
-rw-r--r--db/mutex/tm.c938
-rw-r--r--db/mutex/uts4_cc.s6
-rw-r--r--db/os/os_abs.c10
-rw-r--r--db/os/os_alloc.c56
-rw-r--r--db/os/os_clock.c27
-rw-r--r--db/os/os_config.c56
-rw-r--r--db/os/os_dir.c41
-rw-r--r--db/os/os_errno.c89
-rw-r--r--db/os/os_fid.c72
-rw-r--r--db/os/os_flock.c55
-rw-r--r--db/os/os_fsync.c30
-rw-r--r--db/os/os_fzero.c104
-rw-r--r--db/os/os_getenv.c59
-rw-r--r--db/os/os_handle.c31
-rw-r--r--db/os/os_map.c172
-rw-r--r--db/os/os_method.c10
-rw-r--r--db/os/os_mkdir.c52
-rw-r--r--db/os/os_oflags.c90
-rw-r--r--db/os/os_open.c170
-rw-r--r--db/os/os_pid.c61
-rw-r--r--db/os/os_region.c47
-rw-r--r--db/os/os_rename.c25
-rw-r--r--db/os/os_root.c12
-rw-r--r--db/os/os_rpath.c36
-rw-r--r--db/os/os_rw.c212
-rw-r--r--db/os/os_seek.c61
-rw-r--r--db/os/os_sleep.c53
-rw-r--r--db/os/os_spin.c67
-rw-r--r--db/os/os_stat.c30
-rw-r--r--db/os/os_tmpdir.c83
-rw-r--r--db/os/os_truncate.c20
-rw-r--r--db/os/os_uid.c52
-rw-r--r--db/os/os_unlink.c32
-rw-r--r--db/os/os_yield.c48
-rw-r--r--db/os_vxworks/os_vx_abs.c6
-rw-r--r--db/os_vxworks/os_vx_config.c38
-rw-r--r--db/os_vxworks/os_vx_map.c43
-rw-r--r--db/os_vxworks/os_vx_rpath.c56
-rw-r--r--db/os_windows/os_abs.c31
-rw-r--r--db/os_windows/os_clock.c30
-rw-r--r--db/os_windows/os_config.c118
-rw-r--r--db/os_windows/os_dir.c104
-rw-r--r--db/os_windows/os_errno.c405
-rw-r--r--db/os_windows/os_fid.c147
-rw-r--r--db/os_windows/os_flock.c69
-rw-r--r--db/os_windows/os_fsync.c38
-rw-r--r--db/os_windows/os_getenv.c97
-rw-r--r--db/os_windows/os_handle.c119
-rw-r--r--db/os_windows/os_map.c309
-rw-r--r--db/os_windows/os_open.c186
-rw-r--r--db/os_windows/os_rename.c70
-rw-r--r--db/os_windows/os_rw.c186
-rw-r--r--db/os_windows/os_seek.c55
-rw-r--r--db/os_windows/os_sleep.c34
-rw-r--r--db/os_windows/os_spin.c38
-rw-r--r--db/os_windows/os_stat.c84
-rw-r--r--db/os_windows/os_truncate.c90
-rw-r--r--db/os_windows/os_unlink.c109
-rw-r--r--db/os_windows/os_yield.c27
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.pm36
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.pod48
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.pod.P46
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.xs391
-rw-r--r--db/perl/BerkeleyDB/Changes39
-rw-r--r--db/perl/BerkeleyDB/MANIFEST3
-rw-r--r--db/perl/BerkeleyDB/META.yml2
-rw-r--r--db/perl/BerkeleyDB/Makefile.PL13
-rw-r--r--db/perl/BerkeleyDB/README44
-rw-r--r--db/perl/BerkeleyDB/constants.h894
-rw-r--r--db/perl/BerkeleyDB/mkconsts45
-rw-r--r--db/perl/BerkeleyDB/t/Test/Builder.pm1591
-rw-r--r--db/perl/BerkeleyDB/t/Test/More.pm1448
-rw-r--r--db/perl/BerkeleyDB/t/btree.t17
-rw-r--r--db/perl/BerkeleyDB/t/cds.t10
-rw-r--r--db/perl/BerkeleyDB/t/db-3.0.t10
-rw-r--r--db/perl/BerkeleyDB/t/db-3.1.t165
-rw-r--r--db/perl/BerkeleyDB/t/db-3.2.t10
-rw-r--r--db/perl/BerkeleyDB/t/db-3.3.t298
-rw-r--r--db/perl/BerkeleyDB/t/db-4.4.t57
-rw-r--r--db/perl/BerkeleyDB/t/destroy.t10
-rw-r--r--db/perl/BerkeleyDB/t/encrypt.t10
-rw-r--r--db/perl/BerkeleyDB/t/env.t39
-rw-r--r--db/perl/BerkeleyDB/t/examples.t22
-rw-r--r--db/perl/BerkeleyDB/t/examples.t.T22
-rw-r--r--db/perl/BerkeleyDB/t/examples3.t29
-rw-r--r--db/perl/BerkeleyDB/t/examples3.t.T29
-rw-r--r--db/perl/BerkeleyDB/t/filter.t10
-rw-r--r--db/perl/BerkeleyDB/t/hash.t15
-rw-r--r--db/perl/BerkeleyDB/t/join.t10
-rw-r--r--db/perl/BerkeleyDB/t/mldbm.t12
-rw-r--r--db/perl/BerkeleyDB/t/queue.t555
-rw-r--r--db/perl/BerkeleyDB/t/recno.t10
-rw-r--r--db/perl/BerkeleyDB/t/strict.t10
-rw-r--r--db/perl/BerkeleyDB/t/subdb.t153
-rw-r--r--db/perl/BerkeleyDB/t/txn.t10
-rw-r--r--db/perl/BerkeleyDB/t/unknown.t12
-rw-r--r--db/perl/BerkeleyDB/t/util.pm54
-rw-r--r--db/perl/BerkeleyDB/typemap57
-rw-r--r--db/perl/DB_File/Changes24
-rw-r--r--db/perl/DB_File/DB_File.pm18
-rw-r--r--db/perl/DB_File/DB_File.xs47
-rw-r--r--db/perl/DB_File/META.yml4
-rw-r--r--db/perl/DB_File/Makefile.PL13
-rw-r--r--db/perl/DB_File/README31
-rw-r--r--db/perl/DB_File/t/db-btree.t8
-rw-r--r--db/perl/DB_File/t/db-hash.t7
-rw-r--r--db/perl/DB_File/t/db-recno.t4
-rw-r--r--db/perl/DB_File/typemap26
-rw-r--r--db/php_db4/INSTALL14
-rw-r--r--db/php_db4/config.m49
-rw-r--r--db/php_db4/db4.cpp181
-rw-r--r--db/php_db4/php_db4.h10
-rw-r--r--db/php_db4/samples/simple_counter.php4
-rw-r--r--db/php_db4/samples/transactional_counter.php4
-rw-r--r--db/qam/qam.c529
-rw-r--r--db/qam/qam.src23
-rw-r--r--db/qam/qam_auto.c277
-rw-r--r--db/qam/qam_autop.c67
-rw-r--r--db/qam/qam_conv.c10
-rw-r--r--db/qam/qam_files.c171
-rw-r--r--db/qam/qam_method.c21
-rw-r--r--db/qam/qam_open.c55
-rw-r--r--db/qam/qam_rec.c279
-rw-r--r--db/qam/qam_stat.c28
-rw-r--r--db/qam/qam_stub.c14
-rw-r--r--db/qam/qam_upgrade.c12
-rw-r--r--db/qam/qam_verify.c21
-rw-r--r--db/rep/rep.src23
-rw-r--r--db/rep/rep_auto.c35
-rw-r--r--db/rep/rep_autop.c6
-rw-r--r--db/rep/rep_backup.c1427
-rw-r--r--db/rep/rep_elect.c995
-rw-r--r--db/rep/rep_log.c703
-rw-r--r--db/rep/rep_method.c1444
-rw-r--r--db/rep/rep_record.c1833
-rw-r--r--db/rep/rep_region.c253
-rw-r--r--db/rep/rep_stat.c124
-rw-r--r--db/rep/rep_stub.c224
-rw-r--r--db/rep/rep_util.c1231
-rw-r--r--db/rep/rep_verify.c536
-rw-r--r--db/repmgr/repmgr_elect.c369
-rw-r--r--db/repmgr/repmgr_method.c442
-rw-r--r--db/repmgr/repmgr_msg.c333
-rw-r--r--db/repmgr/repmgr_net.c1041
-rw-r--r--db/repmgr/repmgr_posix.c714
-rw-r--r--db/repmgr/repmgr_queue.c158
-rw-r--r--db/repmgr/repmgr_sel.c875
-rw-r--r--db/repmgr/repmgr_stat.c116
-rw-r--r--db/repmgr/repmgr_util.c415
-rw-r--r--db/repmgr/repmgr_windows.c708
-rw-r--r--db/rpc_client/client.c75
-rw-r--r--db/rpc_client/gen_client.c3825
-rw-r--r--db/rpc_client/gen_client_ret.c112
-rw-r--r--db/rpc_server/c/db_server_proc.c762
-rw-r--r--db/rpc_server/c/db_server_util.c47
-rw-r--r--db/rpc_server/c/gen_db_server.c883
-rw-r--r--db/rpc_server/clsrv.html435
-rw-r--r--db/rpc_server/cxx/db_server_cxxproc.cpp557
-rw-r--r--db/rpc_server/cxx/db_server_cxxutil.cpp41
-rw-r--r--db/rpc_server/db_server.x666
-rw-r--r--db/rpc_server/rpc.src1039
-rw-r--r--db/sequence/seq_stat.c85
-rw-r--r--db/sequence/sequence.c508
-rw-r--r--db/tcl/docs/db.html2
-rw-r--r--db/tcl/docs/env.html9
-rw-r--r--db/tcl/docs/historic.html2
-rw-r--r--db/tcl/docs/index.html2
-rw-r--r--db/tcl/docs/library.html2
-rw-r--r--db/tcl/docs/lock.html2
-rw-r--r--db/tcl/docs/log.html2
-rw-r--r--db/tcl/docs/mpool.html2
-rw-r--r--db/tcl/docs/rep.html2
-rw-r--r--db/tcl/docs/test.html48
-rw-r--r--db/tcl/docs/txn.html2
-rw-r--r--db/tcl/tcl_compat.c18
-rw-r--r--db/tcl/tcl_db.c506
-rw-r--r--db/tcl/tcl_db_pkg.c389
-rw-r--r--db/tcl/tcl_dbcursor.c158
-rw-r--r--db/tcl/tcl_env.c332
-rw-r--r--db/tcl/tcl_internal.c157
-rw-r--r--db/tcl/tcl_lock.c21
-rw-r--r--db/tcl/tcl_log.c41
-rw-r--r--db/tcl/tcl_mp.c84
-rw-r--r--db/tcl/tcl_rep.c571
-rw-r--r--db/tcl/tcl_seq.c26
-rw-r--r--db/tcl/tcl_txn.c175
-rw-r--r--db/tcl/tcl_util.c266
-rw-r--r--db/test/README6
-rw-r--r--db/test/TESTS718
-rw-r--r--db/test/archive.tcl6
-rw-r--r--db/test/bigfile001.tcl39
-rw-r--r--db/test/bigfile002.tcl13
-rw-r--r--db/test/byteorder.tcl6
-rw-r--r--db/test/conscript.tcl6
-rw-r--r--db/test/dbm.tcl6
-rw-r--r--db/test/dbscript.tcl6
-rw-r--r--db/test/ddoyscript.tcl6
-rw-r--r--db/test/ddscript.tcl6
-rw-r--r--db/test/dead001.tcl17
-rw-r--r--db/test/dead002.tcl13
-rw-r--r--db/test/dead003.tcl6
-rw-r--r--db/test/dead004.tcl6
-rw-r--r--db/test/dead005.tcl10
-rw-r--r--db/test/dead006.tcl6
-rw-r--r--db/test/dead007.tcl6
-rw-r--r--db/test/env001.tcl44
-rw-r--r--db/test/env002.tcl6
-rw-r--r--db/test/env003.tcl6
-rw-r--r--db/test/env004.tcl6
-rw-r--r--db/test/env005.tcl6
-rw-r--r--db/test/env006.tcl6
-rw-r--r--db/test/env007.tcl156
-rw-r--r--db/test/env008.tcl6
-rw-r--r--db/test/env009.tcl8
-rw-r--r--db/test/env010.tcl6
-rw-r--r--db/test/env011.tcl10
-rw-r--r--db/test/env012.tcl253
-rw-r--r--db/test/env013.tcl85
-rw-r--r--db/test/env014.tcl118
-rw-r--r--db/test/env015.tcl80
-rw-r--r--db/test/envscript.tcl90
-rw-r--r--db/test/fop001.tcl118
-rw-r--r--db/test/fop002.tcl6
-rw-r--r--db/test/fop003.tcl6
-rw-r--r--db/test/fop004.tcl6
-rw-r--r--db/test/fop005.tcl6
-rw-r--r--db/test/fop006.tcl69
-rw-r--r--db/test/fop007.tcl22
-rw-r--r--db/test/fop008.tcl16
-rw-r--r--db/test/fopscript.tcl27
-rw-r--r--db/test/foputils.tcl84
-rw-r--r--db/test/hsearch.tcl6
-rw-r--r--db/test/include.tcl10
-rw-r--r--db/test/join.tcl6
-rw-r--r--db/test/lock001.tcl10
-rw-r--r--db/test/lock002.tcl28
-rw-r--r--db/test/lock003.tcl6
-rw-r--r--db/test/lock004.tcl6
-rw-r--r--db/test/lock005.tcl6
-rw-r--r--db/test/lock006.tcl6
-rw-r--r--db/test/lockscript.tcl6
-rw-r--r--db/test/log001.tcl6
-rw-r--r--db/test/log002.tcl6
-rw-r--r--db/test/log003.tcl6
-rw-r--r--db/test/log004.tcl6
-rw-r--r--db/test/log005.tcl6
-rw-r--r--db/test/log006.tcl6
-rw-r--r--db/test/log007.tcl111
-rw-r--r--db/test/log008.tcl46
-rw-r--r--db/test/log008script.tcl83
-rw-r--r--db/test/log009.tcl123
-rw-r--r--db/test/logtrack.list102
-rw-r--r--db/test/logtrack.tcl10
-rw-r--r--db/test/mdbscript.tcl6
-rw-r--r--db/test/memp001.tcl16
-rw-r--r--db/test/memp002.tcl6
-rw-r--r--db/test/memp003.tcl6
-rw-r--r--db/test/memp004.tcl6
-rw-r--r--db/test/mpoolscript.tcl14
-rw-r--r--db/test/ndbm.tcl6
-rw-r--r--db/test/parallel.tcl17
-rw-r--r--db/test/plat001.tcl76
-rw-r--r--db/test/recd001.tcl14
-rw-r--r--db/test/recd002.tcl9
-rw-r--r--db/test/recd003.tcl6
-rw-r--r--db/test/recd004.tcl6
-rw-r--r--db/test/recd005.tcl11
-rw-r--r--db/test/recd006.tcl6
-rw-r--r--db/test/recd007.tcl141
-rw-r--r--db/test/recd008.tcl13
-rw-r--r--db/test/recd009.tcl6
-rw-r--r--db/test/recd010.tcl6
-rw-r--r--db/test/recd011.tcl6
-rw-r--r--db/test/recd012.tcl6
-rw-r--r--db/test/recd013.tcl7
-rw-r--r--db/test/recd014.tcl6
-rw-r--r--db/test/recd015.tcl6
-rw-r--r--db/test/recd016.tcl8
-rw-r--r--db/test/recd017.tcl6
-rw-r--r--db/test/recd018.tcl6
-rw-r--r--db/test/recd019.tcl6
-rw-r--r--db/test/recd020.tcl8
-rw-r--r--db/test/recd021.tcl19
-rw-r--r--db/test/recd022.tcl132
-rw-r--r--db/test/recd023.tcl84
-rw-r--r--db/test/recd15scr.tcl6
-rw-r--r--db/test/recdscript.tcl6
-rw-r--r--db/test/rep001.tcl85
-rw-r--r--db/test/rep002.tcl69
-rw-r--r--db/test/rep003.tcl23
-rw-r--r--db/test/rep005.tcl25
-rw-r--r--db/test/rep006.tcl63
-rw-r--r--db/test/rep007.tcl57
-rw-r--r--db/test/rep008.tcl37
-rw-r--r--db/test/rep009.tcl44
-rw-r--r--db/test/rep010.tcl31
-rw-r--r--db/test/rep011.tcl30
-rw-r--r--db/test/rep012.tcl47
-rw-r--r--db/test/rep013.tcl100
-rw-r--r--db/test/rep014.tcl42
-rw-r--r--db/test/rep015.tcl40
-rw-r--r--db/test/rep016.tcl36
-rw-r--r--db/test/rep017.tcl32
-rw-r--r--db/test/rep017script.tcl21
-rw-r--r--db/test/rep018.tcl27
-rw-r--r--db/test/rep018script.tcl15
-rw-r--r--db/test/rep019.tcl34
-rw-r--r--db/test/rep020.tcl35
-rw-r--r--db/test/rep021.tcl53
-rw-r--r--db/test/rep022.tcl31
-rw-r--r--db/test/rep023.tcl43
-rw-r--r--db/test/rep024.tcl32
-rw-r--r--db/test/rep025.tcl207
-rw-r--r--db/test/rep026.tcl53
-rw-r--r--db/test/rep027.tcl38
-rw-r--r--db/test/rep028.tcl72
-rw-r--r--db/test/rep029.tcl266
-rw-r--r--db/test/rep030.tcl265
-rw-r--r--db/test/rep031.tcl235
-rw-r--r--db/test/rep032.tcl108
-rw-r--r--db/test/rep033.tcl47
-rw-r--r--db/test/rep034.tcl110
-rw-r--r--db/test/rep035.tcl38
-rw-r--r--db/test/rep035script.tcl7
-rw-r--r--db/test/rep036.tcl45
-rw-r--r--db/test/rep036script.tcl29
-rw-r--r--db/test/rep037.tcl142
-rw-r--r--db/test/rep038.tcl210
-rw-r--r--db/test/rep039.tcl263
-rw-r--r--db/test/rep040.tcl205
-rw-r--r--db/test/rep040script.tcl69
-rw-r--r--db/test/rep041.tcl210
-rw-r--r--db/test/rep042.tcl194
-rw-r--r--db/test/rep042script.tcl77
-rw-r--r--db/test/rep043.tcl233
-rw-r--r--db/test/rep043script.tcl114
-rw-r--r--db/test/rep044.tcl256
-rw-r--r--db/test/rep045.tcl256
-rw-r--r--db/test/rep045script.tcl138
-rw-r--r--db/test/rep046.tcl228
-rw-r--r--db/test/rep047.tcl204
-rw-r--r--db/test/rep048.tcl123
-rw-r--r--db/test/rep048script.tcl75
-rw-r--r--db/test/rep049.tcl221
-rw-r--r--db/test/rep050.tcl346
-rw-r--r--db/test/rep051.tcl189
-rw-r--r--db/test/rep052.tcl223
-rw-r--r--db/test/rep053.tcl194
-rw-r--r--db/test/rep054.tcl257
-rw-r--r--db/test/rep055.tcl209
-rw-r--r--db/test/rep056.tcl23
-rw-r--r--db/test/rep057.tcl24
-rw-r--r--db/test/rep058.tcl133
-rw-r--r--db/test/rep059.tcl123
-rw-r--r--db/test/rep060.tcl303
-rw-r--r--db/test/rep061.tcl375
-rw-r--r--db/test/rep062.tcl284
-rw-r--r--db/test/rep063.tcl362
-rw-r--r--db/test/rep064.tcl137
-rw-r--r--db/test/rep065.tcl420
-rw-r--r--db/test/rep065script.tcl391
-rw-r--r--db/test/rep066.tcl229
-rw-r--r--db/test/reputils.tcl1106
-rw-r--r--db/test/rpc001.tcl12
-rw-r--r--db/test/rpc002.tcl20
-rw-r--r--db/test/rpc003.tcl6
-rw-r--r--db/test/rpc004.tcl6
-rw-r--r--db/test/rpc005.tcl6
-rw-r--r--db/test/rpc006.tcl4
-rw-r--r--db/test/rsrc001.tcl6
-rw-r--r--db/test/rsrc002.tcl6
-rw-r--r--db/test/rsrc003.tcl9
-rw-r--r--db/test/rsrc004.tcl6
-rw-r--r--db/test/scr001/chk.code4
-rw-r--r--db/test/scr002/chk.def12
-rw-r--r--db/test/scr003/chk.define17
-rw-r--r--db/test/scr004/chk.javafiles4
-rw-r--r--db/test/scr005/chk.nl2
-rw-r--r--db/test/scr006/chk.offt18
-rw-r--r--db/test/scr007/chk.proto2
-rw-r--r--db/test/scr009/chk.srcfiles5
-rw-r--r--db/test/scr010/chk.str2
-rw-r--r--db/test/scr010/spell.ok637
-rw-r--r--db/test/scr011/chk.tags7
-rw-r--r--db/test/scr012/chk.vx_code17
-rw-r--r--db/test/scr013/chk.stats5
-rw-r--r--db/test/scr014/chk.err2
-rw-r--r--db/test/scr015/README2
-rw-r--r--db/test/scr015/TestConstruct01.cpp9
-rw-r--r--db/test/scr015/TestGetSetMethods.cpp12
-rw-r--r--db/test/scr015/TestKeyRange.cpp9
-rw-r--r--db/test/scr015/TestLogc.cpp6
-rw-r--r--db/test/scr015/TestSimpleAccess.cpp6
-rw-r--r--db/test/scr015/TestTruncate.cpp6
-rw-r--r--db/test/scr015/chk.cxxtests2
-rw-r--r--db/test/scr015/ignore2
-rw-r--r--db/test/scr015/testall2
-rw-r--r--db/test/scr015/testone2
-rw-r--r--db/test/scr017/chk.db1852
-rw-r--r--db/test/scr018/chk.comma2
-rw-r--r--db/test/scr018/t.c3
-rw-r--r--db/test/scr019/chk.include7
-rw-r--r--db/test/scr020/chk.inc2
-rw-r--r--db/test/scr021/chk.flags10
-rw-r--r--db/test/scr021/t.c3
-rw-r--r--db/test/scr022/chk.rr5
-rw-r--r--db/test/scr023/chk.q2
-rw-r--r--db/test/scr024/chk.bdb9
-rw-r--r--db/test/scr024/coverage/build.xml17
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/serial/test/MarshalledObject.java7
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/serial/test/NullClassCatalog.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/serial/test/SerialBindingTest.java135
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/serial/test/TestClassCatalog.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/test/BindingSpeedTest.java140
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/tuple/test/MarshalledObject.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleBindingTest.java188
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleFormatTest.java126
-rw-r--r--db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleOrderingTest.java118
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/KeyRangeTest.java8
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/CollectionTest.java280
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/DbTestUtil.java8
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/IterDeadlockTest.java10
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/JoinTest.java7
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/NullTransactionRunner.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/SecondaryDeadlockTest.java36
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestDataBinding.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestEntity.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestEntityBinding.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestEnv.java17
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestKeyAssigner.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestKeyCreator.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TestStore.java8
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/TransactionTest.java225
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/serial/CatalogCornerCaseTest.java99
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTest.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTestInit.java13
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java6
-rw-r--r--db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java.original6
-rw-r--r--db/test/scr024/src/com/sleepycat/util/test/ExceptionWrapperTest.java43
-rw-r--r--db/test/scr024/src/com/sleepycat/util/test/FastOutputStreamTest.java73
-rw-r--r--db/test/scr024/src/com/sleepycat/util/test/PackedIntegerTest.java106
-rw-r--r--db/test/scr024/src/com/sleepycat/util/test/UtfTest.java6
-rw-r--r--db/test/scr025/TestMulti.cpp3
-rw-r--r--db/test/scr025/chk.cxxmulti2
-rw-r--r--db/test/scr025/ignore2
-rw-r--r--db/test/scr026/chk.method12
-rw-r--r--db/test/scr027/chk.javas2
-rw-r--r--db/test/scr028/chk.rtc2
-rw-r--r--db/test/scr029/chk.get2
-rw-r--r--db/test/scr030/chk.build100
-rw-r--r--db/test/scr031/chk.xa294
-rw-r--r--db/test/scr031/src/client.c339
-rw-r--r--db/test/scr031/src/datafml.fml5
-rw-r--r--db/test/scr031/src/datafml.h5
-rw-r--r--db/test/scr031/src/hcommonxa.h8
-rw-r--r--db/test/scr031/src/hdbrec.h14
-rw-r--r--db/test/scr031/src/htimestampxa.c14
-rw-r--r--db/test/scr031/src/htimestampxa.h13
-rw-r--r--db/test/scr031/src/server.c287
-rw-r--r--db/test/scr032/chk.rpc82
-rw-r--r--db/test/sdb001.tcl6
-rw-r--r--db/test/sdb002.tcl6
-rw-r--r--db/test/sdb003.tcl6
-rw-r--r--db/test/sdb004.tcl6
-rw-r--r--db/test/sdb005.tcl6
-rw-r--r--db/test/sdb006.tcl6
-rw-r--r--db/test/sdb007.tcl112
-rw-r--r--db/test/sdb008.tcl6
-rw-r--r--db/test/sdb009.tcl6
-rw-r--r--db/test/sdb010.tcl8
-rw-r--r--db/test/sdb011.tcl6
-rw-r--r--db/test/sdb012.tcl23
-rw-r--r--db/test/sdb013.tcl174
-rw-r--r--db/test/sdb014.tcl113
-rw-r--r--db/test/sdb015.tcl118
-rw-r--r--db/test/sdb016.tcl99
-rw-r--r--db/test/sdb017.tcl100
-rw-r--r--db/test/sdb018.tcl157
-rw-r--r--db/test/sdb019.tcl140
-rw-r--r--db/test/sdb020.tcl125
-rw-r--r--db/test/sdbscript.tcl6
-rw-r--r--db/test/sdbtest001.tcl6
-rw-r--r--db/test/sdbtest002.tcl11
-rw-r--r--db/test/sdbutils.tcl16
-rw-r--r--db/test/sec001.tcl6
-rw-r--r--db/test/sec002.tcl6
-rw-r--r--db/test/shelltest.tcl9
-rw-r--r--db/test/si001.tcl355
-rw-r--r--db/test/si002.tcl57
-rw-r--r--db/test/si003.tcl60
-rw-r--r--db/test/si004.tcl57
-rw-r--r--db/test/si005.tcl66
-rw-r--r--db/test/si006.tcl187
-rw-r--r--db/test/si007.tcl189
-rw-r--r--db/test/si008.tcl274
-rw-r--r--db/test/sijointest.tcl8
-rw-r--r--db/test/siutils.tcl6
-rw-r--r--db/test/sysscript.tcl24
-rw-r--r--db/test/t106script.tcl6
-rw-r--r--db/test/test.tcl222
-rw-r--r--db/test/test001.tcl6
-rw-r--r--db/test/test002.tcl6
-rw-r--r--db/test/test003.tcl6
-rw-r--r--db/test/test004.tcl6
-rw-r--r--db/test/test005.tcl6
-rw-r--r--db/test/test006.tcl6
-rw-r--r--db/test/test007.tcl6
-rw-r--r--db/test/test008.tcl6
-rw-r--r--db/test/test009.tcl6
-rw-r--r--db/test/test010.tcl6
-rw-r--r--db/test/test011.tcl6
-rw-r--r--db/test/test012.tcl6
-rw-r--r--db/test/test013.tcl8
-rw-r--r--db/test/test014.tcl6
-rw-r--r--db/test/test015.tcl11
-rw-r--r--db/test/test016.tcl6
-rw-r--r--db/test/test017.tcl6
-rw-r--r--db/test/test018.tcl6
-rw-r--r--db/test/test019.tcl6
-rw-r--r--db/test/test020.tcl6
-rw-r--r--db/test/test021.tcl6
-rw-r--r--db/test/test022.tcl6
-rw-r--r--db/test/test023.tcl6
-rw-r--r--db/test/test024.tcl6
-rw-r--r--db/test/test025.tcl6
-rw-r--r--db/test/test026.tcl6
-rw-r--r--db/test/test027.tcl6
-rw-r--r--db/test/test028.tcl6
-rw-r--r--db/test/test029.tcl6
-rw-r--r--db/test/test030.tcl6
-rw-r--r--db/test/test031.tcl6
-rw-r--r--db/test/test032.tcl6
-rw-r--r--db/test/test033.tcl6
-rw-r--r--db/test/test034.tcl6
-rw-r--r--db/test/test035.tcl6
-rw-r--r--db/test/test036.tcl6
-rw-r--r--db/test/test037.tcl6
-rw-r--r--db/test/test038.tcl6
-rw-r--r--db/test/test039.tcl6
-rw-r--r--db/test/test040.tcl6
-rw-r--r--db/test/test041.tcl6
-rw-r--r--db/test/test042.tcl6
-rw-r--r--db/test/test043.tcl6
-rw-r--r--db/test/test044.tcl6
-rw-r--r--db/test/test045.tcl6
-rw-r--r--db/test/test046.tcl6
-rw-r--r--db/test/test047.tcl6
-rw-r--r--db/test/test048.tcl6
-rw-r--r--db/test/test049.tcl6
-rw-r--r--db/test/test050.tcl6
-rw-r--r--db/test/test051.tcl12
-rw-r--r--db/test/test052.tcl6
-rw-r--r--db/test/test053.tcl6
-rw-r--r--db/test/test054.tcl6
-rw-r--r--db/test/test055.tcl6
-rw-r--r--db/test/test056.tcl6
-rw-r--r--db/test/test057.tcl6
-rw-r--r--db/test/test058.tcl6
-rw-r--r--db/test/test059.tcl6
-rw-r--r--db/test/test060.tcl6
-rw-r--r--db/test/test061.tcl6
-rw-r--r--db/test/test062.tcl6
-rw-r--r--db/test/test063.tcl6
-rw-r--r--db/test/test064.tcl6
-rw-r--r--db/test/test065.tcl6
-rw-r--r--db/test/test066.tcl6
-rw-r--r--db/test/test067.tcl6
-rw-r--r--db/test/test068.tcl23
-rw-r--r--db/test/test069.tcl6
-rw-r--r--db/test/test070.tcl6
-rw-r--r--db/test/test071.tcl6
-rw-r--r--db/test/test072.tcl6
-rw-r--r--db/test/test073.tcl6
-rw-r--r--db/test/test074.tcl6
-rw-r--r--db/test/test076.tcl12
-rw-r--r--db/test/test077.tcl6
-rw-r--r--db/test/test078.tcl6
-rw-r--r--db/test/test079.tcl6
-rw-r--r--db/test/test081.tcl6
-rw-r--r--db/test/test082.tcl6
-rw-r--r--db/test/test083.tcl6
-rw-r--r--db/test/test084.tcl6
-rw-r--r--db/test/test085.tcl6
-rw-r--r--db/test/test086.tcl6
-rw-r--r--db/test/test087.tcl6
-rw-r--r--db/test/test088.tcl6
-rw-r--r--db/test/test089.tcl8
-rw-r--r--db/test/test090.tcl6
-rw-r--r--db/test/test091.tcl6
-rw-r--r--db/test/test092.tcl45
-rw-r--r--db/test/test093.tcl6
-rw-r--r--db/test/test094.tcl6
-rw-r--r--db/test/test095.tcl6
-rw-r--r--db/test/test096.tcl19
-rw-r--r--db/test/test097.tcl6
-rw-r--r--db/test/test098.tcl6
-rw-r--r--db/test/test099.tcl6
-rw-r--r--db/test/test100.tcl6
-rw-r--r--db/test/test101.tcl6
-rw-r--r--db/test/test102.tcl6
-rw-r--r--db/test/test103.tcl6
-rw-r--r--db/test/test106.tcl12
-rw-r--r--db/test/test107.tcl44
-rw-r--r--db/test/test109.tcl104
-rw-r--r--db/test/test110.tcl164
-rw-r--r--db/test/test111.tcl326
-rw-r--r--db/test/test112.tcl241
-rw-r--r--db/test/test113.tcl223
-rw-r--r--db/test/test114.tcl294
-rw-r--r--db/test/test115.tcl340
-rw-r--r--db/test/test116.tcl257
-rw-r--r--db/test/test117.tcl200
-rw-r--r--db/test/test119.tcl254
-rw-r--r--db/test/test120.tcl97
-rw-r--r--db/test/test121.tcl124
-rw-r--r--db/test/test122.tcl100
-rw-r--r--db/test/testparams.tcl147
-rw-r--r--db/test/testutils.tcl316
-rw-r--r--db/test/testutils42.tcl17
-rw-r--r--db/test/txn001.tcl7
-rw-r--r--db/test/txn002.tcl7
-rw-r--r--db/test/txn003.tcl16
-rw-r--r--db/test/txn004.tcl7
-rw-r--r--db/test/txn005.tcl7
-rw-r--r--db/test/txn006.tcl7
-rw-r--r--db/test/txn007.tcl8
-rw-r--r--db/test/txn008.tcl7
-rw-r--r--db/test/txn009.tcl7
-rw-r--r--db/test/txn010.tcl6
-rw-r--r--db/test/txn011.tcl284
-rw-r--r--db/test/txn012.tcl62
-rw-r--r--db/test/txn012script.tcl34
-rw-r--r--db/test/txn013.tcl77
-rw-r--r--db/test/txnscript.tcl6
-rw-r--r--db/test/update.tcl6
-rw-r--r--db/test/upgrade.tcl123
-rw-r--r--db/test/wrap.tcl32
-rw-r--r--db/txn/txn.c1182
-rw-r--r--db/txn/txn.src53
-rw-r--r--db/txn/txn_auto.c360
-rw-r--r--db/txn/txn_autop.c180
-rw-r--r--db/txn/txn_chkpt.c329
-rw-r--r--db/txn/txn_failchk.c96
-rw-r--r--db/txn/txn_method.c87
-rw-r--r--db/txn/txn_rec.c208
-rw-r--r--db/txn/txn_recover.c125
-rw-r--r--db/txn/txn_region.c319
-rw-r--r--db/txn/txn_stat.c227
-rw-r--r--db/txn/txn_util.c35
-rw-r--r--db/xa/xa.c169
-rw-r--r--db/xa/xa_db.c136
-rw-r--r--db/xa/xa_map.c34
3094 files changed, 282414 insertions, 79696 deletions
diff --git a/db/LICENSE b/db/LICENSE
index 8cb10e79b..ffe7f3e33 100644
--- a/db/LICENSE
+++ b/db/LICENSE
@@ -1,17 +1,16 @@
/*-
- * $Id: LICENSE,v 11.12 2004/03/30 20:49:44 bostic Exp $
+ * $Id: LICENSE,v 12.4 2006/08/25 18:42:22 bostic Exp $
*/
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 contact Sleepycat Software by email at info@sleepycat.com, or on
-the Web at http://www.sleepycat.com.
+please contact Oracle Corporation at berkeleydb-info_us@oracle.com.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
- * Copyright (c) 1990-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1990-2006
+ * Oracle Corporation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -32,10 +31,10 @@ the Web at http://www.sleepycat.com.
* files that typically accompany the major components of the operating
* system on which the executable file runs.
*
- * THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE ``AS IS'' AND ANY EXPRESS
+ * THIS SOFTWARE IS PROVIDED BY ORACLE CORPORATION ``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, ARE DISCLAIMED. IN NO EVENT SHALL SLEEPYCAT SOFTWARE
+ * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE CORPORATION
* 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
diff --git a/db/README b/db/README
index abfe1d675..0b084ff5b 100644
--- a/db/README
+++ b/db/README
@@ -1,5 +1,5 @@
-Sleepycat Software: Berkeley DB 4.3.27: (December 22, 2004)
+Berkeley DB 4.5.20: (September 20, 2006)
-This is version 4.3.27 of Berkeley DB from Sleepycat Software. To view
+This is version 4.5.20 of Berkeley DB from Oracle Corporation. To view
the release and installation documentation, load the distribution file
docs/index.html into your web browser.
diff --git a/db/btree/bt_compact.c b/db/btree/bt_compact.c
new file mode 100644
index 000000000..c5fa483b1
--- /dev/null
+++ b/db/btree/bt_compact.c
@@ -0,0 +1,2398 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: bt_compact.c,v 12.53 2006/08/24 14:44:43 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
+
+static int __bam_compact_dups __P((DBC *,
+ PAGE **, u_int32_t, int, DB_COMPACT *, int *));
+static int __bam_compact_int __P((DBC *,
+ DBT *, DBT *, u_int32_t, int *, DB_COMPACT *, int *));
+static int __bam_csearch __P((DBC *, DBT *, u_int32_t, int));
+static int __bam_merge __P((DBC *,
+ DBC *, u_int32_t, DBT *, DB_COMPACT *,int *));
+static int __bam_merge_internal __P((DBC *, DBC *, int, DB_COMPACT *, int *));
+static int __bam_merge_pages __P((DBC *, DBC *, DB_COMPACT *));
+static int __bam_merge_records __P((DBC *, DBC*, u_int32_t, DB_COMPACT *));
+static int __bam_truncate_internal_overflow __P((DBC *, PAGE *, DB_COMPACT *));
+static int __bam_truncate_overflow __P((DBC *,
+ db_pgno_t, db_pgno_t, DB_COMPACT *));
+static int __bam_truncate_page __P((DBC *, PAGE **, int));
+static int __bam_truncate_root_page __P((DBC *,
+ PAGE *, u_int32_t, DB_COMPACT *));
+
+#ifdef HAVE_FTRUNCATE
+static int __bam_free_freelist __P((DB *, DB_TXN *));
+static int __bam_savekey __P((DBC *, int, DBT *));
+static int __bam_setup_freelist __P((DB *, struct pglist *, u_int32_t));
+static int __bam_truncate_internal __P((DB *, DB_TXN *, DB_COMPACT *));
+#endif
+
+#define SAVE_START \
+ do { \
+ save_data = *c_data; \
+ ret = __db_retcopy(dbenv, \
+ &save_start, end->data, end->size, \
+ &save_start.data, &save_start.ulen); \
+ } while (0)
+
+/*
+ * Only restore those things that are negated by aborting the
+ * transaction. We don't restore the number of deadlocks, for example.
+ */
+
+#define RESTORE_START \
+ do { \
+ c_data->compact_pages_free = \
+ save_data.compact_pages_free; \
+ c_data->compact_levels = save_data.compact_levels; \
+ c_data->compact_truncate = save_data.compact_truncate; \
+ ret = __db_retcopy(dbenv, end, \
+ save_start.data, save_start.size, \
+ &end->data, &end->ulen); \
+ } while (0)
+/*
+ * __bam_compact -- compact a btree.
+ *
+ * PUBLIC: int __bam_compact __P((DB *, DB_TXN *,
+ * PUBLIC: DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
+ */
+int
+__bam_compact(dbp, txn, start, stop, c_data, flags, end)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *start, *stop;
+ DB_COMPACT *c_data;
+ u_int32_t flags;
+ DBT *end;
+{
+ DBT current, save_start;
+ DBC *dbc;
+ DB_COMPACT save_data;
+ DB_ENV *dbenv;
+ db_pgno_t last_pgno;
+ struct pglist *list;
+ u_int32_t factor, nelems, truncated;
+ int deadlock, done, ret, span, t_ret, txn_local;
+
+ dbenv = dbp->dbenv;
+
+ memset(&current, 0, sizeof(current));
+ memset(&save_start, 0, sizeof(save_start));
+ dbc = NULL;
+ deadlock = 0;
+ done = 0;
+ factor = 0;
+ ret = 0;
+ span = 0;
+ truncated = 0;
+ last_pgno = 0;
+
+ /*
+ * We pass "end" to the internal routine, indicating where
+ * that routine should begin its work and expecting that it
+ * will return to us the last key that it processed.
+ */
+ if (end == NULL)
+ end = &current;
+ if (start != NULL && (ret = __db_retcopy(dbenv,
+ end, start->data, start->size, &end->data, &end->ulen)) != 0)
+ return (ret);
+
+ list = NULL;
+ nelems = 0;
+
+ if (IS_DB_AUTO_COMMIT(dbp, txn))
+ txn_local = 1;
+ else
+ txn_local = 0;
+ if (!LF_ISSET(DB_FREE_SPACE | DB_FREELIST_ONLY))
+ goto no_free;
+ if (LF_ISSET(DB_FREELIST_ONLY))
+ LF_SET(DB_FREE_SPACE);
+
+#ifdef HAVE_FTRUNCATE
+ /* Sort the freelist and set up the in-memory list representation. */
+ if (txn_local && (ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
+
+ if ((ret = __db_free_truncate(dbp,
+ txn, flags, c_data, &list, &nelems, &last_pgno)) != 0) {
+ LF_CLR(DB_FREE_SPACE);
+ goto terr;
+ }
+
+ /* If the freelist is empty and we are not filling, get out. */
+ if (nelems == 0 && LF_ISSET(DB_FREELIST_ONLY)) {
+ ret = 0;
+ LF_CLR(DB_FREE_SPACE);
+ goto terr;
+ }
+ if ((ret = __bam_setup_freelist(dbp, list, nelems)) != 0) {
+ /* Someone else owns the free list. */
+ if (ret == EBUSY)
+ ret = 0;
+ }
+
+ /* Commit the txn and release the meta page lock. */
+terr: if (txn_local) {
+ if ((t_ret = __txn_commit(txn, DB_TXN_NOSYNC)) != 0 && ret == 0)
+ ret = t_ret;
+ txn = NULL;
+ }
+ if (ret != 0)
+ goto err;
+
+ /* Save the number truncated so far, we will add what we get below. */
+ truncated = c_data->compact_pages_truncated;
+ if (LF_ISSET(DB_FREELIST_ONLY))
+ goto done;
+#endif
+
+ /*
+ * We want factor to be the target number of free bytes on each page,
+ * so we know when to stop adding items to a page. Make sure to
+ * subtract the page overhead when computing this target. This can
+ * result in a 1-2% error on the smallest page.
+ * First figure out how many bytes we should use:
+ */
+no_free:
+ factor = dbp->pgsize - SIZEOF_PAGE;
+ if (c_data->compact_fillpercent != 0) {
+ factor *= c_data->compact_fillpercent;
+ factor /= 100;
+ }
+ /* Now convert to the number of free bytes to target. */
+ factor = (dbp->pgsize - SIZEOF_PAGE) - factor;
+
+ if (c_data->compact_pages == 0)
+ c_data->compact_pages = DB_MAX_PAGES;
+
+ do {
+ deadlock = 0;
+
+ SAVE_START;
+ if (ret != 0)
+ break;
+
+ if (txn_local) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ break;
+
+ if (c_data->compact_timeout != 0 &&
+ (ret = __txn_set_timeout(txn,
+ c_data->compact_timeout, DB_SET_LOCK_TIMEOUT)) != 0)
+ goto err;
+ }
+
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
+ goto err;
+
+ if ((ret = __bam_compact_int(dbc, end, stop, factor,
+ &span, c_data, &done)) == DB_LOCK_DEADLOCK && txn_local) {
+ /*
+ * We retry on deadlock. Cancel the statistics
+ * and reset the start point to before this
+ * iteration.
+ */
+ deadlock = 1;
+ c_data->compact_deadlock++;
+ RESTORE_START;
+ }
+
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+err: if (txn_local && txn != NULL) {
+ if (ret == 0 && deadlock == 0)
+ ret = __txn_commit(txn, DB_TXN_NOSYNC);
+ else if ((t_ret = __txn_abort(txn)) != 0 && ret == 0)
+ ret = t_ret;
+ txn = NULL;
+ }
+ } while (ret == 0 && !done);
+
+ if (current.data != NULL)
+ __os_free(dbenv, current.data);
+ if (save_start.data != NULL)
+ __os_free(dbenv, save_start.data);
+
+#ifdef HAVE_FTRUNCATE
+ /*
+ * Finish up truncation work. If there are pages left in the free
+ * list then search the internal nodes of the tree as we may have
+ * missed some while walking the leaf nodes. Then calculate how
+ * many pages we have truncated and release the in-memory free list.
+ */
+done: if (LF_ISSET(DB_FREE_SPACE)) {
+ DBMETA *meta;
+ db_pgno_t pgno;
+
+ pgno = PGNO_BASE_MD;
+ done = 1;
+ if (ret == 0 && !LF_ISSET(DB_FREELIST_ONLY) && (t_ret =
+ __memp_fget(dbp->mpf, &pgno, txn, 0, &meta)) == 0) {
+ done = meta->free == PGNO_INVALID;
+ ret = __memp_fput(dbp->mpf, meta, 0);
+ }
+
+ if (!done)
+ ret = __bam_truncate_internal(dbp, txn, c_data);
+
+ /* Clean up the free list. */
+ if (list != NULL)
+ __os_free(dbenv, list);
+
+ if ((t_ret =
+ __memp_fget(dbp->mpf, &pgno, txn, 0, &meta)) == 0) {
+ c_data->compact_pages_truncated =
+ truncated + last_pgno - meta->last_pgno;
+ if ((t_ret =
+ __memp_fput(dbp->mpf, meta, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ } else if (ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = __bam_free_freelist(dbp, txn)) != 0 && ret == 0)
+ t_ret = ret;
+ }
+#endif
+
+ return (ret);
+}
+
+/*
+ * __bam_csearch -- isolate search code for bam_compact.
+ * This routine hides the differences between searching
+ * a BTREE and a RECNO from the rest of the code.
+ */
+#define CS_READ 0 /* We are just reading. */
+#define CS_PARENT 1 /* We want the parent too, write lock. */
+#define CS_NEXT 2 /* Get the next page. */
+#define CS_NEXT_WRITE 3 /* Get the next page and write lock. */
+#define CS_DEL 4 /* Get a stack to delete a page. */
+#define CS_START 5 /* Starting level for stack, write lock. */
+#define CS_GETRECNO 0x80 /* Extract record number from start. */
+
+static int
+__bam_csearch(dbc, start, sflag, level)
+ DBC *dbc;
+ DBT *start;
+ u_int32_t sflag;
+ int level;
+{
+ BTREE_CURSOR *cp;
+ int not_used, ret;
+
+ cp = (BTREE_CURSOR *)dbc->internal;
+
+ if (dbc->dbtype == DB_RECNO) {
+ /* If GETRECNO is not set the cp->recno is what we want. */
+ if (FLD_ISSET(sflag, CS_GETRECNO)) {
+ if (start == NULL || start->size == 0)
+ cp->recno = 1;
+ else if ((ret =
+ __ram_getno(dbc, start, &cp->recno, 0)) != 0)
+ return (ret);
+ FLD_CLR(sflag, CS_GETRECNO);
+ }
+ switch (sflag) {
+ case CS_READ:
+ sflag = SR_READ;
+ break;
+ case CS_NEXT:
+ sflag = SR_PARENT | SR_READ;
+ break;
+ case CS_START:
+ level = LEAFLEVEL;
+ /* FALLTHROUGH */
+ case CS_DEL:
+ case CS_NEXT_WRITE:
+ sflag = SR_STACK;
+ break;
+ case CS_PARENT:
+ sflag = SR_PARENT | SR_WRITE;
+ break;
+ default:
+ return (__db_panic(dbc->dbp->dbenv, EINVAL));
+ }
+ if ((ret = __bam_rsearch(dbc,
+ &cp->recno, sflag, level, &not_used)) != 0)
+ return (ret);
+ /* Reset the cursor's recno to the beginning of the page. */
+ cp->recno -= cp->csp->indx;
+ } else {
+ FLD_CLR(sflag, CS_GETRECNO);
+ switch (sflag) {
+ case CS_READ:
+ sflag = SR_READ | SR_DUPFIRST;
+ break;
+ case CS_DEL:
+ sflag = SR_DEL;
+ break;
+ case CS_NEXT:
+ sflag = SR_NEXT;
+ break;
+ case CS_NEXT_WRITE:
+ sflag = SR_NEXT | SR_WRITE;
+ break;
+ case CS_START:
+ sflag = SR_START | SR_WRITE;
+ break;
+ case CS_PARENT:
+ sflag = SR_PARENT | SR_WRITE;
+ break;
+ default:
+ return (__db_panic(dbc->dbp->dbenv, EINVAL));
+ }
+ if (start == NULL || start->size == 0)
+ FLD_SET(sflag, SR_MIN);
+
+ if ((ret = __bam_search(dbc,
+ cp->root, start, sflag, level, NULL, &not_used)) != 0)
+ return (ret);
+ }
+
+ return (0);
+}
+
+/*
+ * __bam_compact_int -- internal compaction routine.
+ * Called either with a cursor on the main database
+ * or a cursor initialized to the root of an off page duplicate
+ * tree.
+ */
+static int
+__bam_compact_int(dbc, start, stop, factor, spanp, c_data, donep)
+ DBC *dbc;
+ DBT *start, *stop;
+ u_int32_t factor;
+ int *spanp;
+ DB_COMPACT *c_data;
+ int *donep;
+{
+ BTREE_CURSOR *cp, *ncp;
+ DB *dbp;
+ DBC *ndbc;
+ DB_ENV *dbenv;
+ DB_LOCK nolock;
+ EPG *epg;
+ DB_MPOOLFILE *dbmp;
+ PAGE *pg, *ppg, *npg;
+ db_pgno_t npgno;
+ db_recno_t next_recno;
+ u_int32_t sflag;
+ int check_dups, check_trunc, done, level;
+ int merged, nentry, next_page, pgs_done, ret, t_ret, tdone;
+
+#ifdef DEBUG
+#define CTRACE(dbc, location, t, start, f) do { \
+ DBT __trace; \
+ DB_SET_DBT(__trace, t, strlen(t)); \
+ DEBUG_LWRITE( \
+ dbc, (dbc)->txn, location, &__trace, start, f) \
+ } while (0)
+#define PTRACE(dbc, location, p, start, f) do { \
+ char __buf[32]; \
+ (void)snprintf(__buf, \
+ sizeof(__buf), "pgno: %lu", (u_long)p); \
+ CTRACE(dbc, location, __buf, start, f); \
+ } while (0)
+#else
+#define CTRACE(dbc, location, t, start, f)
+#define PTRACE(dbc, location, p, start, f)
+#endif
+
+ ndbc = NULL;
+ pg = NULL;
+ npg = NULL;
+ done = 0;
+ tdone = 0;
+ pgs_done = 0;
+ next_recno = 0;
+ next_page = 0;
+ LOCK_INIT(nolock);
+ check_trunc = c_data->compact_truncate != PGNO_INVALID;
+ check_dups = (!F_ISSET(dbc, DBC_OPD) &&
+ F_ISSET(dbc->dbp, DB_AM_DUP)) || check_trunc;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ dbmp = dbp->mpf;
+ cp = (BTREE_CURSOR *)dbc->internal;
+
+ /* Search down the tree for the starting point. */
+ if ((ret = __bam_csearch(dbc,
+ start, CS_READ | CS_GETRECNO, LEAFLEVEL)) != 0) {
+ /* Its not an error to compact an empty db. */
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ done = 1;
+ goto err;
+ }
+
+ /*
+ * Get the first leaf page. The loop below will change pg so
+ * we clear the stack reference so we don't put a a page twice.
+ */
+ pg = cp->csp->page;
+ cp->csp->page = NULL;
+ next_recno = cp->recno;
+next: /*
+ * This is the start of the main compaction loop. There are 3
+ * parts to the process:
+ * 1) Walk the leaf pages of the tree looking for a page to
+ * process. We do this with read locks. Save the
+ * key from the page and release it.
+ * 2) Set up a cursor stack which will write lock the page
+ * and enough of its ancestors to get the job done.
+ * This could go to the root if we might delete a subtree
+ * or we have record numbers to update.
+ * 3) Loop fetching pages after the above page and move enough
+ * data to fill it.
+ * We exit the loop if we are at the end of the leaf pages, are
+ * about to lock a new subtree (we span) or on error.
+ */
+
+ /* Walk the pages looking for something to fill up. */
+ while ((npgno = NEXT_PGNO(pg)) != PGNO_INVALID) {
+ c_data->compact_pages_examine++;
+ PTRACE(dbc, "Next", PGNO(pg), start, 0);
+
+ /* If we have fetched the next page, get the new key. */
+ if (next_page == 1 &&
+ dbc->dbtype != DB_RECNO && NUM_ENT(pg) != 0) {
+ if ((ret = __db_ret(dbp, dbc->txn, pg,
+ 0, start, &start->data, &start->ulen)) != 0)
+ goto err;
+ }
+ next_recno += NUM_ENT(pg);
+ if (P_FREESPACE(dbp, pg) > factor ||
+ (check_trunc && PGNO(pg) > c_data->compact_truncate))
+ break;
+ /*
+ * The page does not need more data or to be swapped,
+ * check to see if we want to look at possible duplicate
+ * trees or overflow records and the move on to the next page.
+ */
+ cp->recno += NUM_ENT(pg);
+ next_page = 1;
+ tdone = pgs_done;
+ PTRACE(dbc, "Dups", PGNO(pg), start, 0);
+ if (check_dups && (ret = __bam_compact_dups(
+ dbc, &pg, factor, 0, c_data, &pgs_done)) != 0)
+ goto err;
+ npgno = NEXT_PGNO(pg);
+ if ((ret = __memp_fput(dbmp, pg, 0)) != 0)
+ goto err;
+ pg = NULL;
+ /*
+ * If we don't do anything we don't need to hold
+ * the lock on the previous page, so couple always.
+ */
+ if ((ret = __db_lget(dbc,
+ tdone == pgs_done ? LCK_COUPLE_ALWAYS : LCK_COUPLE,
+ npgno, DB_LOCK_READ, 0, &cp->csp->lock)) != 0)
+ goto err;
+ if ((ret = __memp_fget(dbmp, &npgno, dbc->txn, 0, &pg)) != 0)
+ goto err;
+ }
+
+ /*
+ * When we get here we have 3 cases:
+ * 1) We've reached the end of the leaf linked list and are done.
+ * 2) A page whose freespace exceeds our target and therefore needs
+ * to have data added to it.
+ * 3) A page that doesn't have too much free space but needs to be
+ * checked for truncation.
+ * In both cases 2 and 3, we need that page's first key or record
+ * number. We may already have it, if not get it here.
+ */
+ if ((nentry = NUM_ENT(pg)) != 0) {
+ next_page = 0;
+ /* Get a copy of the first recno on the page. */
+ if (dbc->dbtype == DB_RECNO) {
+ if ((ret = __db_retcopy(dbp->dbenv, start,
+ &cp->recno, sizeof(cp->recno),
+ &start->data, &start->ulen)) != 0)
+ goto err;
+ } else if (start->size == 0 &&
+ (ret = __db_ret(dbp, dbc->txn, pg,
+ 0, start, &start->data, &start->ulen)) != 0)
+ goto err;
+
+ if (npgno == PGNO_INVALID) {
+ /* End of the tree, check its duplicates and exit. */
+ PTRACE(dbc, "GoDone", PGNO(pg), start, 0);
+ if (check_dups && (ret = __bam_compact_dups(dbc,
+ &pg, factor, 0, c_data, &pgs_done)) != 0)
+ goto err;
+ c_data->compact_pages_examine++;
+ done = 1;
+ goto done;
+ }
+ }
+
+ /* Release the page so we don't deadlock getting its parent. */
+ if ((ret = __LPUT(dbc, cp->csp->lock)) != 0)
+ goto err;
+ if ((ret = __memp_fput(dbmp, pg, 0)) != 0)
+ goto err;
+ BT_STK_CLR(cp);
+ pg = NULL;
+
+ /*
+ * Setup the cursor stack. There are 3 cases:
+ * 1) the page is empty and will be deleted: nentry == 0.
+ * 2) the next page has the same parent: *spanp == 0.
+ * 3) the next page has a different parent: *spanp == 1.
+ *
+ * We now need to search the tree again, getting a write lock
+ * on the page we are going to merge or delete. We do this by
+ * searching down the tree and locking as much of the subtree
+ * above the page as needed. In the case of a delete we will
+ * find the maximal subtree that can be deleted. In the case
+ * of merge if the current page and the next page are siblings
+ * with the same parent then we only need to lock the parent.
+ * Otherwise *span will be set and we need to search to find the
+ * lowest common ancestor. Dbc will be set to contain the subtree
+ * containing the page to be merged or deleted. Ndbc will contain
+ * the minimal subtree containing that page and its next sibling.
+ * In all cases for DB_RECNO we simplify things and get the whole
+ * tree if we need more than a single parent.
+ */
+
+ /* Case 1 -- page is empty. */
+ if (nentry == 0) {
+ CTRACE(dbc, "Empty", "", start, 0);
+ if (next_page == 1)
+ sflag = CS_NEXT_WRITE;
+ else
+ sflag = CS_DEL;
+ if ((ret = __bam_csearch(dbc, start, sflag, LEAFLEVEL)) != 0)
+ goto err;
+
+ pg = cp->csp->page;
+ /* Check to see if the page is still empty. */
+ if (NUM_ENT(pg) != 0)
+ npgno = PGNO(pg);
+ else {
+ npgno = NEXT_PGNO(pg);
+ /* If this is now the root, we are very done. */
+ if (PGNO(pg) == cp->root)
+ done = 1;
+ else {
+ if ((ret = __bam_dpages(dbc, 0, 0)) != 0)
+ goto err;
+ c_data->compact_pages_free++;
+ goto next_no_release;
+ }
+ }
+ goto next_page;
+ }
+
+ /* case 3 -- different parents. */
+ if (*spanp) {
+ CTRACE(dbc, "Span", "", start, 0);
+ if (ndbc == NULL && (ret = __db_c_dup(dbc, &ndbc, 0)) != 0)
+ goto err;
+ ncp = (BTREE_CURSOR *)ndbc->internal;
+ ncp->recno = next_recno;
+ /*
+ * Search the tree looking for the next page after the
+ * current key. For RECNO get the whole stack.
+ * For BTREE the return will contain the stack that
+ * dominates both the current and next pages.
+ */
+ if ((ret = __bam_csearch(ndbc, start, CS_NEXT_WRITE, 0)) != 0)
+ goto err;
+
+ if (dbc->dbtype == DB_RECNO) {
+ /*
+ * The record we are looking for may have moved
+ * to the previous page. This page should
+ * be at the beginning of its parent.
+ * If not, then start over.
+ */
+ if (ncp->csp[-1].indx != 0) {
+ *spanp = 0;
+ goto deleted;
+ }
+
+ }
+ if ((ret =
+ __memp_dirty(dbp->mpf, &ncp->csp->page, dbc->txn, 0)) != 0)
+ goto err;
+ PTRACE(dbc, "SDups", PGNO(ncp->csp->page), start, 0);
+ if (check_dups && (ret = __bam_compact_dups(ndbc,
+ &ncp->csp->page, factor, 1, c_data, &pgs_done)) != 0)
+ goto err;
+
+ /* Check to see if the tree collapsed. */
+ if (PGNO(ncp->csp->page) == ncp->root)
+ goto done;
+ /*
+ * We need the stacks to be the same height
+ * so that we can merge parents.
+ */
+ level = LEVEL(ncp->sp->page);
+ sflag = CS_START;
+ if ((ret = __bam_csearch(dbc, start, sflag, level)) != 0)
+ goto err;
+ pg = cp->csp->page;
+ *spanp = 0;
+
+ /*
+ * The page may have emptied while we waited for the lock.
+ * Reset npgno so we re-get this page when we go back to the
+ * top.
+ */
+ if (NUM_ENT(pg) == 0) {
+ npgno = PGNO(pg);
+ goto next_page;
+ }
+ if (check_trunc && PGNO(pg) > c_data->compact_truncate) {
+ pgs_done++;
+ /* Get a fresh low numbered page. */
+ if ((ret = __bam_truncate_page(dbc, &pg, 1)) != 0)
+ goto err1;
+ }
+
+ if ((ret =
+ __memp_dirty(dbp->mpf, &cp->csp->page, dbc->txn, 0)) != 0)
+ goto err1;
+ pg = cp->csp->page;
+ npgno = NEXT_PGNO(pg);
+ PTRACE(dbc, "SDups", PGNO(pg), start, 0);
+ if (check_dups && (ret =
+ __bam_compact_dups(dbc, &cp->csp->page,
+ factor, 1, c_data, &pgs_done)) != 0)
+ goto err1;
+
+ /*
+ * We may have dropped our locks, check again
+ * to see if we still need to fill this page and
+ * we are in a spanning situation.
+ */
+
+ if (P_FREESPACE(dbp, pg) <= factor ||
+ cp->csp[-1].indx != NUM_ENT(cp->csp[-1].page) - 1)
+ goto next_page;
+
+ /*
+ * Try to move things into a single parent.
+ */
+ merged = 0;
+ for (epg = cp->sp; epg != cp->csp; epg++) {
+ if (PGNO(epg->page) == cp->root)
+ continue;
+ PTRACE(dbc, "PMerge", PGNO(epg->page), start, 0);
+ if ((ret = __bam_merge_internal(dbc,
+ ndbc, LEVEL(epg->page), c_data, &merged)) != 0)
+ goto err1;
+ if (merged)
+ break;
+ }
+
+ /* If we merged the parent, then we nolonger span. */
+ if (merged) {
+ pgs_done++;
+ if (cp->csp->page == NULL)
+ goto deleted;
+ npgno = PGNO(pg);
+ goto next_page;
+ }
+ PTRACE(dbc, "SMerge", PGNO(cp->csp->page), start, 0);
+ npgno = NEXT_PGNO(ncp->csp->page);
+ if ((ret = __bam_merge(dbc,
+ ndbc, factor, stop, c_data, &done)) != 0)
+ goto err1;
+ pgs_done++;
+ /*
+ * __bam_merge could have freed our stack if it
+ * deleted a page possibly collapsing the tree.
+ */
+ if (cp->csp->page == NULL)
+ goto deleted;
+ cp->recno += NUM_ENT(pg);
+
+ /* If we did not bump to the next page something did not fit. */
+ if (npgno != NEXT_PGNO(pg)) {
+ npgno = NEXT_PGNO(pg);
+ goto next_page;
+ }
+ } else {
+ /* Case 2 -- same parents. */
+ CTRACE(dbc, "Sib", "", start, 0);
+ if ((ret =
+ __bam_csearch(dbc, start, CS_PARENT, LEAFLEVEL)) != 0)
+ goto err;
+
+ pg = cp->csp->page;
+ npgno = PGNO(pg);
+
+ /* We now have a write lock, recheck the page. */
+ if ((nentry = NUM_ENT(pg)) == 0)
+ goto next_page;
+
+ if ((ret = __memp_dirty(dbp->mpf, &cp->csp->page,
+ dbc->txn, 0)) != 0)
+ goto err;
+ pg = cp->csp->page;
+
+ npgno = NEXT_PGNO(pg);
+
+ /* Check duplicate trees, we have a write lock on the page. */
+ PTRACE(dbc, "SibDup", PGNO(pg), start, 0);
+ if (check_dups && (ret =
+ __bam_compact_dups(dbc, &cp->csp->page,
+ factor, 1, c_data, &pgs_done)) != 0)
+ goto err1;
+ pg = cp->csp->page;
+
+ /* Check to see if the tree collapsed. */
+ if (PGNO(pg) == cp->root)
+ goto err1;
+ DB_ASSERT(dbenv, cp->csp - cp->sp == 1);
+
+ if (check_trunc && PGNO(pg) > c_data->compact_truncate) {
+ pgs_done++;
+ /* Get a fresh low numbered page. */
+ if ((ret = __bam_truncate_page(dbc, &pg, 1)) != 0)
+ goto err1;
+ }
+
+ /* After re-locking check to see if we still need to fill. */
+ if (P_FREESPACE(dbp, pg) <= factor)
+ goto next_page;
+
+ /* If they have the same parent, just dup the cursor */
+ if (ndbc != NULL && (ret = __db_c_close(ndbc)) != 0)
+ goto err1;
+ if ((ret = __db_c_dup(dbc, &ndbc, DB_POSITION)) != 0)
+ goto err1;
+ ncp = (BTREE_CURSOR *)ndbc->internal;
+
+ /*
+ * ncp->recno needs to have the recno of the next page.
+ * Bump it by the number of records on the current page.
+ */
+ ncp->recno += NUM_ENT(pg);
+ }
+
+ /* Fetch pages until we fill this one. */
+ while (!done && npgno != PGNO_INVALID &&
+ P_FREESPACE(dbp, pg) > factor && c_data->compact_pages != 0) {
+ /*
+ * If our current position is the last one on a parent
+ * page, then we are about to merge across different
+ * internal nodes. Thus, we need to lock higher up
+ * in the tree. We will exit the routine and commit
+ * what we have done so far. Set spanp so we know
+ * we are in this case when we come back.
+ */
+ if (cp->csp[-1].indx == NUM_ENT(cp->csp[-1].page) - 1) {
+ *spanp = 1;
+ npgno = PGNO(pg);
+ next_recno = cp->recno;
+ goto next_page;
+ }
+
+ /* Lock and get the next page. */
+ if ((ret = __db_lget(dbc, LCK_COUPLE,
+ npgno, DB_LOCK_WRITE, 0, &ncp->lock)) != 0)
+ goto err1;
+ if ((ret = __memp_fget(dbmp, &npgno, dbc->txn,
+ DB_MPOOL_DIRTY, &npg)) != 0)
+ goto err1;
+
+ /* Fix up the next page cursor with its parent node. */
+ if ((ret = __memp_fget(dbmp, &PGNO(cp->csp[-1].page),
+ dbc->txn, 0, &ppg)) != 0)
+ goto err1;
+ BT_STK_PUSH(dbenv, ncp, ppg,
+ cp->csp[-1].indx + 1, nolock, DB_LOCK_NG, ret);
+ if (ret != 0)
+ goto err1;
+
+ /* Put the page on the stack. */
+ BT_STK_ENTER(dbenv, ncp, npg, 0, ncp->lock, DB_LOCK_WRITE, ret);
+
+ LOCK_INIT(ncp->lock);
+ npg = NULL;
+
+ c_data->compact_pages_examine++;
+
+ PTRACE(dbc, "MDups", PGNO(ncp->csp->page), start, 0);
+ if (check_dups && (ret = __bam_compact_dups(ndbc,
+ &ncp->csp->page, factor, 1, c_data, &pgs_done)) != 0)
+ goto err1;
+
+ npgno = NEXT_PGNO(ncp->csp->page);
+ /*
+ * Merge the pages. This will either free the next
+ * page or just update its parent pointer.
+ */
+ PTRACE(dbc, "Merge", PGNO(cp->csp->page), start, 0);
+ if ((ret = __bam_merge(dbc,
+ ndbc, factor, stop, c_data, &done)) != 0)
+ goto err1;
+
+ pgs_done++;
+
+ /*
+ * __bam_merge could have freed our stack if it
+ * deleted a page possibly collapsing the tree.
+ */
+ if (cp->csp->page == NULL)
+ goto deleted;
+ /* If we did not bump to the next page something did not fit. */
+ if (npgno != NEXT_PGNO(pg))
+ break;
+ }
+
+ /* Bottom of the main loop. Move to the next page. */
+ npgno = NEXT_PGNO(pg);
+ cp->recno += NUM_ENT(pg);
+ next_recno = cp->recno;
+
+next_page:
+ if ((ret = __bam_stkrel(dbc, pgs_done == 0 ? STK_NOLOCK : 0)) != 0)
+ goto err1;
+ if (ndbc != NULL &&
+ (ret = __bam_stkrel(ndbc, pgs_done == 0 ? STK_NOLOCK : 0)) != 0)
+ goto err1;
+
+next_no_release:
+ pg = NULL;
+
+ if (npgno == PGNO_INVALID || c_data->compact_pages == 0)
+ done = 1;
+ if (!done) {
+ /*
+ * If we are at the end of this parent commit the
+ * transaction so we don't tie things up.
+ */
+ if (pgs_done != 0 && *spanp) {
+deleted: if (((ret = __bam_stkrel(ndbc, 0)) != 0 ||
+ (ret = __db_c_close(ndbc)) != 0))
+ goto err;
+ *donep = 0;
+ return (0);
+ }
+
+ /* Reget the next page to look at. */
+ cp->recno = next_recno;
+ if ((ret = __db_lget(dbc,
+ pgs_done ? LCK_COUPLE_ALWAYS : LCK_COUPLE,
+ npgno, DB_LOCK_READ, 0, &cp->csp->lock)) != 0 ||
+ (ret = __memp_fget(dbmp, &npgno, dbc->txn, 0, &pg)) != 0)
+ goto err;
+ next_page = 1;
+ goto next;
+ }
+
+done:
+ if (0) {
+ /* We come here if pg is the same as cp->csp->page. */
+err1: pg = NULL;
+ }
+err: if (dbc != NULL &&
+ (t_ret = __bam_stkrel(dbc, STK_CLRDBC)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ndbc != NULL) {
+ if ((t_ret = __bam_stkrel(ndbc, STK_CLRDBC)) != 0 && ret == 0)
+ ret = t_ret;
+ else if ((t_ret = __db_c_close(ndbc)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+ if (pg != NULL && (t_ret = __memp_fput(dbmp, pg, 0) != 0) && ret == 0)
+ ret = t_ret;
+ if (npg != NULL && (t_ret = __memp_fput(dbmp, npg, 0) != 0) && ret == 0)
+ ret = t_ret;
+
+ *donep = done;
+
+ return (ret);
+}
+
+/*
+ * __bam_merge -- do actual merging of leaf pages.
+ */
+static int
+__bam_merge(dbc, ndbc, factor, stop, c_data, donep)
+ DBC *dbc, *ndbc;
+ u_int32_t factor;
+ DBT *stop;
+ DB_COMPACT *c_data;
+ int *donep;
+{
+ BTREE_CURSOR *cp, *ncp;
+ BTREE *t;
+ DB *dbp;
+ PAGE *pg, *npg;
+ db_indx_t adj, nent;
+ db_recno_t recno;
+ int cmp, ret;
+ int (*func) __P((DB *, const DBT *, const DBT *));
+
+ dbp = dbc->dbp;
+ t = dbp->bt_internal;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ ncp = (BTREE_CURSOR *)ndbc->internal;
+ pg = cp->csp->page;
+ npg = ncp->csp->page;
+
+ nent = NUM_ENT(npg);
+
+ /* If the page is empty just throw it away. */
+ if (nent == 0)
+ goto free;
+ adj = TYPE(npg) == P_LBTREE ? P_INDX : O_INDX;
+ /* Find if the stopping point is on this page. */
+ if (stop != NULL && stop->size != 0) {
+ if (dbc->dbtype == DB_RECNO) {
+ if ((ret = __ram_getno(dbc, stop, &recno, 0)) != 0)
+ goto err;
+ if (ncp->recno > recno) {
+ *donep = 1;
+ if (cp->recno > recno)
+ goto done;
+ }
+ } else {
+ func = TYPE(npg) == P_LBTREE ?
+ (dbp->dup_compare == NULL ?
+ __bam_defcmp : dbp->dup_compare) : t->bt_compare;
+
+ if ((ret = __bam_cmp(dbp, dbc->txn,
+ stop, npg, nent - adj, func, &cmp)) != 0)
+ goto err;
+
+ /*
+ * If the last record is beyond the stopping
+ * point we are done after this page. If the
+ * first record is beyond the stopping point
+ * don't even bother with this page.
+ */
+ if (cmp <= 0) {
+ *donep = 1;
+ if ((ret = __bam_cmp(dbp, dbc->txn,
+ stop, npg, 0, func, &cmp)) != 0)
+ goto err;
+ if (cmp <= 0)
+ goto done;
+ }
+ }
+ }
+
+ /*
+ * If there is too much data then just move records one at a time.
+ * Otherwise copy the data space over and fix up the index table.
+ * If we are on the left most child we will effect our parent's
+ * index entry so we call merge_records to figure out key sizes.
+ */
+ if ((dbc->dbtype == DB_BTREE &&
+ ncp->csp[-1].indx == 0 && ncp->csp[-1].entries != 1) ||
+ (int)(P_FREESPACE(dbp, pg) -
+ ((dbp->pgsize - P_OVERHEAD(dbp)) -
+ P_FREESPACE(dbp, npg))) < (int)factor)
+ ret = __bam_merge_records(dbc, ndbc, factor, c_data);
+ else
+free: ret = __bam_merge_pages(dbc, ndbc, c_data);
+
+done:
+err: return (ret);
+}
+
+static int
+__bam_merge_records(dbc, ndbc, factor, c_data)
+ DBC *dbc, *ndbc;
+ u_int32_t factor;
+ DB_COMPACT *c_data;
+{
+ BINTERNAL *bi;
+ BKEYDATA *bk, *tmp_bk;
+ BTREE *t;
+ BTREE_CURSOR *cp, *ncp;
+ DB *dbp;
+ DBT a, b, data, hdr;
+ DB_ENV *dbenv;
+ EPG *epg;
+ PAGE *pg, *npg;
+ db_indx_t adj, indx, nent, *ninp, pind;
+ int32_t adjust;
+ u_int32_t freespace, nksize, pfree, size;
+ int first_dup, is_dup, next_dup, n_ok, ret;
+ size_t (*func) __P((DB *, const DBT *, const DBT *));
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ t = dbp->bt_internal;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ ncp = (BTREE_CURSOR *)ndbc->internal;
+ pg = cp->csp->page;
+ npg = ncp->csp->page;
+ memset(&hdr, 0, sizeof(hdr));
+ pind = NUM_ENT(pg);
+ n_ok = 0;
+ adjust = 0;
+ ret = 0;
+ nent = NUM_ENT(npg);
+
+ DB_ASSERT(dbenv, nent != 0);
+
+ /* See if we want to swap out this page. */
+ if (c_data->compact_truncate != PGNO_INVALID &&
+ PGNO(npg) > c_data->compact_truncate) {
+ /* Get a fresh low numbered page. */
+ if ((ret = __bam_truncate_page(ndbc, &npg, 1)) != 0)
+ goto err;
+ }
+
+ ninp = P_INP(dbp, npg);
+
+ /*
+ * pg is the page that is being filled, it is in the stack in cp.
+ * npg is the next page, it is in the stack in ncp.
+ */
+ freespace = P_FREESPACE(dbp, pg);
+
+ adj = TYPE(npg) == P_LBTREE ? P_INDX : O_INDX;
+ /*
+ * Loop through the records and find the stopping point.
+ */
+ for (indx = 0; indx < nent; indx += adj) {
+ bk = GET_BKEYDATA(dbp, npg, indx);
+
+ /* Size of the key. */
+ size = BITEM_PSIZE(bk);
+
+ /* Size of the data. */
+ if (TYPE(pg) == P_LBTREE)
+ size += BITEM_PSIZE(GET_BKEYDATA(dbp, npg, indx + 1));
+ /*
+ * If we are at a duplicate set, skip ahead to see and
+ * get the total size for the group.
+ */
+ n_ok = adj;
+ if (TYPE(pg) == P_LBTREE &&
+ indx < nent - adj &&
+ ninp[indx] == ninp[indx + adj]) {
+ do {
+ /* Size of index for key reference. */
+ size += sizeof(db_indx_t);
+ n_ok++;
+ /* Size of data item. */
+ size += BITEM_PSIZE(
+ GET_BKEYDATA(dbp, npg, indx + n_ok));
+ n_ok++;
+ } while (indx + n_ok < nent &&
+ ninp[indx] == ninp[indx + n_ok]);
+ }
+ /* if the next set will not fit on the page we are done. */
+ if (freespace < size)
+ break;
+
+ /*
+ * Otherwise figure out if we are past the goal and if
+ * adding this set will put us closer to the goal than
+ * we are now.
+ */
+ if ((freespace - size) < factor) {
+ if (freespace - factor > factor - (freespace - size))
+ indx += n_ok;
+ break;
+ }
+ freespace -= size;
+ indx += n_ok - adj;
+ }
+ if (indx == 0)
+ goto done;
+ if (TYPE(pg) != P_LBTREE && TYPE(pg) != P_LDUP) {
+ if (indx == nent)
+ return (__bam_merge_pages(dbc, ndbc, c_data));
+ goto no_check;
+ }
+ /*
+ * We need to update npg's parent key. Avoid creating a new key
+ * that will be too big. Get what space will be available on the
+ * parents. Then if there will not be room for this key, see if
+ * prefix compression will make it work, if not backup till we
+ * find something that will. (Needless to say, this is a very
+ * unlikely event.) If we are deleting this page then we will
+ * need to propagate the next key to our grand parents, so we
+ * see if that will fit.
+ */
+ pfree = dbp->pgsize;
+ for (epg = &ncp->csp[-1]; epg >= ncp->sp; epg--)
+ if ((freespace = P_FREESPACE(dbp, epg->page)) < pfree) {
+ bi = GET_BINTERNAL(dbp, epg->page, epg->indx);
+ /* Add back in the key we will be deleting. */
+ freespace += BINTERNAL_PSIZE(bi->len);
+ if (freespace < pfree)
+ pfree = freespace;
+ if (epg->indx != 0)
+ break;
+ }
+
+ /*
+ * If we are at the end, we will delete this page. We need to
+ * check the next parent key only if we are the leftmost page and
+ * will therefore have to propagate the key up the tree.
+ */
+ if (indx == nent) {
+ if (ncp->csp[-1].indx != 0 || ncp->csp[-1].entries == 1 ||
+ BINTERNAL_PSIZE(GET_BINTERNAL(dbp,
+ ncp->csp[-1].page, 1)->len) <= pfree)
+ return (__bam_merge_pages(dbc, ndbc, c_data));
+ indx -= adj;
+ }
+ bk = GET_BKEYDATA(dbp, npg, indx);
+ if (indx != 0 && BINTERNAL_SIZE(bk->len) >= pfree) {
+ if (F_ISSET(dbc, DBC_OPD)) {
+ if (dbp->dup_compare == __bam_defcmp)
+ func = __bam_defpfx;
+ else
+ func = NULL;
+ } else
+ func = t->bt_prefix;
+ } else
+ func = NULL;
+
+ /* Skip to the beginning of a duplicate set. */
+ while (indx != 0 && ninp[indx] == ninp[indx - adj])
+ indx -= adj;
+
+ while (indx != 0 && BINTERNAL_SIZE(bk->len) >= pfree) {
+ if (B_TYPE(bk->type) != B_KEYDATA)
+ goto noprefix;
+ /*
+ * Figure out if we can truncate this key.
+ * Code borrowed from bt_split.c
+ */
+ if (func == NULL)
+ goto noprefix;
+ tmp_bk = GET_BKEYDATA(dbp, npg, indx - adj);
+ if (B_TYPE(tmp_bk->type) != B_KEYDATA)
+ goto noprefix;
+ memset(&a, 0, sizeof(a));
+ a.size = tmp_bk->len;
+ a.data = tmp_bk->data;
+ memset(&b, 0, sizeof(b));
+ b.size = bk->len;
+ b.data = bk->data;
+ nksize = (u_int32_t)func(dbp, &a, &b);
+ if (BINTERNAL_PSIZE(nksize) < pfree)
+ break;
+noprefix:
+ /* Skip to the beginning of a duplicate set. */
+ do {
+ indx -= adj;
+ } while (indx != 0 && ninp[indx] == ninp[indx - adj]);
+
+ bk = GET_BKEYDATA(dbp, npg, indx);
+ }
+
+ if (indx == 0)
+ goto done;
+ DB_ASSERT(dbenv, indx <= nent);
+
+ /* Loop through the records and move them from npg to pg. */
+no_check: is_dup = first_dup = next_dup = 0;
+ if ((ret = __memp_dirty(dbp->mpf, &cp->csp->page, dbc->txn, 0)) != 0 ||
+ (ret = __memp_dirty(dbp->mpf, &ncp->csp->page, dbc->txn, 0)) != 0)
+ goto err;
+ pg = cp->csp->page;
+ npg = ncp->csp->page;
+ ninp = P_INP(dbp, npg);
+ do {
+ bk = GET_BKEYDATA(dbp, npg, 0);
+ /* Figure out if we are in a duplicate group or not. */
+ if ((NUM_ENT(npg) % 2) == 0) {
+ if (NUM_ENT(npg) > 2 && ninp[0] == ninp[2]) {
+ if (!is_dup) {
+ first_dup = 1;
+ is_dup = 1;
+ } else
+ first_dup = 0;
+
+ next_dup = 1;
+ } else if (next_dup) {
+ is_dup = 1;
+ first_dup = 0;
+ next_dup = 0;
+ } else
+ is_dup = 0;
+ }
+
+ if (is_dup && !first_dup && (pind % 2) == 0) {
+ /* Duplicate key. */
+ if ((ret = __bam_adjindx(dbc,
+ pg, pind, pind - P_INDX, 1)) != 0)
+ goto err;
+ if (!next_dup)
+ is_dup = 0;
+ } else switch (B_TYPE(bk->type)) {
+ case B_KEYDATA:
+ hdr.data = bk;
+ hdr.size = SSZA(BKEYDATA, data);
+ data.size = bk->len;
+ data.data = bk->data;
+ if ((ret = __db_pitem(dbc, pg, pind,
+ BKEYDATA_SIZE(bk->len), &hdr, &data)) != 0)
+ goto err;
+ break;
+ case B_OVERFLOW:
+ case B_DUPLICATE:
+ data.size = BOVERFLOW_SIZE;
+ data.data = bk;
+ if ((ret = __db_pitem(dbc, pg, pind,
+ BOVERFLOW_SIZE, &data, NULL)) != 0)
+ goto err;
+ break;
+ default:
+ __db_errx(dbenv,
+ "Unknown record format, page %lu, indx 0",
+ (u_long)PGNO(pg));
+ ret = EINVAL;
+ goto err;
+ }
+ pind++;
+ if (next_dup && (NUM_ENT(npg) % 2) == 0) {
+ if ((ret = __bam_adjindx(ndbc,
+ npg, 0, O_INDX, 0)) != 0)
+ goto err;
+ } else {
+ if ((ret = __db_ditem(ndbc,
+ npg, 0, BITEM_SIZE(bk))) != 0)
+ goto err;
+ }
+ adjust++;
+ } while (--indx != 0);
+
+ DB_ASSERT(dbenv, NUM_ENT(npg) != 0);
+
+ if (adjust != 0 &&
+ (F_ISSET(cp, C_RECNUM) || F_ISSET(dbc, DBC_OPD))) {
+ DB_ASSERT(dbenv, cp->csp - cp->sp == ncp->csp - ncp->sp);
+ if (TYPE(pg) == P_LBTREE)
+ adjust /= P_INDX;
+ if ((ret = __bam_adjust(ndbc, -adjust)) != 0)
+ goto err;
+
+ if ((ret = __bam_adjust(dbc, adjust)) != 0)
+ goto err;
+ }
+
+ /* Update parent with new key. */
+ if (ndbc->dbtype == DB_BTREE &&
+ (ret = __bam_pupdate(ndbc, pg)) != 0)
+ goto err;
+
+done: ret = __bam_stkrel(ndbc, STK_CLRDBC);
+
+err: return (ret);
+}
+
+static int
+__bam_merge_pages(dbc, ndbc, c_data)
+ DBC *dbc, *ndbc;
+ DB_COMPACT *c_data;
+{
+ BTREE_CURSOR *cp, *ncp;
+ DB *dbp;
+ DBT data, hdr, ind;
+ DB_MPOOLFILE *dbmp;
+ PAGE *pg, *npg;
+ db_indx_t nent, *ninp, *pinp;
+ db_pgno_t ppgno;
+ u_int8_t *bp;
+ u_int32_t len;
+ int i, level, ret;
+
+ COMPQUIET(ppgno, PGNO_INVALID);
+ dbp = dbc->dbp;
+ dbmp = dbp->mpf;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ ncp = (BTREE_CURSOR *)ndbc->internal;
+ pg = cp->csp->page;
+ npg = ncp->csp->page;
+ memset(&hdr, 0, sizeof(hdr));
+ nent = NUM_ENT(npg);
+
+ /* If the page is empty just throw it away. */
+ if (nent == 0)
+ goto free;
+
+ if ((ret = __memp_dirty(dbp->mpf, &cp->csp->page, dbc->txn, 0)) != 0 ||
+ (ret = __memp_dirty(dbp->mpf, &ncp->csp->page, dbc->txn, 0)) != 0)
+ goto err;
+ pg = cp->csp->page;
+ npg = ncp->csp->page;
+ DB_ASSERT(dbp->dbenv, nent == NUM_ENT(npg));
+
+ /* Bulk copy the data to the new page. */
+ len = dbp->pgsize - HOFFSET(npg);
+ if (DBC_LOGGING(dbc)) {
+ data.data = (u_int8_t *)npg + HOFFSET(npg);
+ data.size = len;
+ ind.data = P_INP(dbp, npg);
+ ind.size = NUM_ENT(npg) * sizeof(db_indx_t);
+ if ((ret = __bam_merge_log(dbp,
+ dbc->txn, &LSN(pg), 0, PGNO(pg),
+ &LSN(pg), PGNO(npg), &LSN(npg), NULL, &data, &ind)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(pg));
+ LSN(npg) = LSN(pg);
+ bp = (u_int8_t *)pg + HOFFSET(pg) - len;
+ memcpy(bp, (u_int8_t *)npg + HOFFSET(npg), len);
+
+ /* Copy index table offset by what was there already. */
+ pinp = P_INP(dbp, pg) + NUM_ENT(pg);
+ ninp = P_INP(dbp, npg);
+ for (i = 0; i < NUM_ENT(npg); i++)
+ *pinp++ = *ninp++ - (dbp->pgsize - HOFFSET(pg));
+ HOFFSET(pg) -= len;
+ NUM_ENT(pg) += i;
+
+ NUM_ENT(npg) = 0;
+ HOFFSET(npg) += len;
+
+ if (F_ISSET(cp, C_RECNUM) || F_ISSET(dbc, DBC_OPD)) {
+ DB_ASSERT(dbp->dbenv, cp->csp - cp->sp == ncp->csp - ncp->sp);
+ if (TYPE(pg) == P_LBTREE)
+ i /= P_INDX;
+ if ((ret = __bam_adjust(ndbc, -i)) != 0)
+ goto err;
+
+ if ((ret = __bam_adjust(dbc, i)) != 0)
+ goto err;
+ }
+
+free: /*
+ * __bam_dpages may decide to collapse the tree.
+ * This can happen if we have the root and there
+ * are exactly 2 pointers left in it.
+ * If it can collapse the tree we must free the other
+ * stack since it will nolonger be valid. This
+ * must be done before hand because we cannot
+ * hold a page pinned if it might be truncated.
+ */
+ if (PGNO(ncp->sp->page) == ncp->root &&
+ NUM_ENT(ncp->sp->page) == 2) {
+ if ((ret = __bam_stkrel(dbc, STK_CLRDBC | STK_PGONLY)) != 0)
+ goto err;
+ level = LEVEL(ncp->sp->page);
+ ppgno = PGNO(ncp->csp[-1].page);
+ } else
+ level = 0;
+ if (c_data->compact_truncate > PGNO(npg))
+ c_data->compact_truncate--;
+ if ((ret = __bam_dpages(ndbc,
+ 0, ndbc->dbtype == DB_RECNO ? 0 : 1)) != 0)
+ goto err;
+ npg = NULL;
+ c_data->compact_pages_free++;
+ c_data->compact_pages--;
+ if (level != 0) {
+ if ((ret = __memp_fget(dbmp, &ncp->root, dbc->txn,
+ 0, &npg)) != 0)
+ goto err;
+ if (level == LEVEL(npg))
+ level = 0;
+ if ((ret = __memp_fput(dbmp, npg, 0)) != 0)
+ goto err;
+ npg = NULL;
+ if (level != 0) {
+ c_data->compact_levels++;
+ c_data->compact_pages_free++;
+ if (c_data->compact_truncate > ppgno)
+ c_data->compact_truncate--;
+ if (c_data->compact_pages != 0)
+ c_data->compact_pages--;
+ }
+ }
+
+err: return (ret);
+}
+
+/*
+ * __bam_merge_internal --
+ * Merge internal nodes of the tree.
+ */
+static int
+__bam_merge_internal(dbc, ndbc, level, c_data, merged)
+ DBC *dbc, *ndbc;
+ int level;
+ DB_COMPACT *c_data;
+ int *merged;
+{
+ BINTERNAL bi, *bip, *fip;
+ BTREE_CURSOR *cp, *ncp;
+ DB *dbp;
+ DBT data, hdr;
+ DB_MPOOLFILE *dbmp;
+ EPG *epg, *save_csp, *nsave_csp;
+ PAGE *pg, *npg;
+ RINTERNAL *rk;
+ db_indx_t indx, pind;
+ db_pgno_t ppgno;
+ int32_t trecs;
+ u_int16_t size;
+ u_int32_t freespace, pfree;
+ int ret;
+
+ COMPQUIET(bip, NULL);
+ COMPQUIET(ppgno, PGNO_INVALID);
+
+ /*
+ * ndbc will contain the the dominating parent of the subtree.
+ * dbc will have the tree containing the left child.
+ *
+ * The stacks descend to the leaf level.
+ * If this is a recno tree then both stacks will start at the root.
+ */
+ dbp = dbc->dbp;
+ dbmp = dbp->mpf;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ ncp = (BTREE_CURSOR *)ndbc->internal;
+ *merged = 0;
+ ret = 0;
+
+ /*
+ * Set the stacks to the level requested.
+ * Save the old value to restore when we exit.
+ */
+ save_csp = cp->csp;
+ cp->csp = &cp->csp[-level + 1];
+ pg = cp->csp->page;
+ pind = NUM_ENT(pg);
+
+ nsave_csp = ncp->csp;
+ ncp->csp = &ncp->csp[-level + 1];
+ npg = ncp->csp->page;
+ indx = NUM_ENT(npg);
+
+ /*
+ * The caller may have two stacks that include common ancestors, we
+ * check here for convenience.
+ */
+ if (npg == pg)
+ goto done;
+
+ if ((ret = __memp_dirty(dbmp, &cp->csp->page, dbc->txn, 0)) != 0 ||
+ (ret = __memp_dirty(dbmp, &ncp->csp->page, dbc->txn, 0)) != 0)
+ goto err;
+ pg = cp->csp->page;
+ npg = ncp->csp->page;
+
+ if (TYPE(pg) == P_IBTREE) {
+ /*
+ * Check for overflow keys on both pages while we have
+ * them locked.
+ */
+ if ((ret =
+ __bam_truncate_internal_overflow(dbc, pg, c_data)) != 0)
+ goto err;
+ if ((ret =
+ __bam_truncate_internal_overflow(dbc, npg, c_data)) != 0)
+ goto err;
+ }
+
+ /*
+ * If we are about to move data off the left most page of an
+ * internal node we will need to update its parents, make sure there
+ * will be room for the new key on all the parents in the stack.
+ * If not, move less data.
+ */
+ fip = NULL;
+ if (TYPE(pg) == P_IBTREE) {
+ /* See where we run out of space. */
+ freespace = P_FREESPACE(dbp, pg);
+ /*
+ * The leftmost key of an internal page is not accurate.
+ * Go up the tree to find a non-leftmost parent.
+ */
+ epg = ncp->csp;
+ while (--epg >= ncp->sp && epg->indx == 0)
+ continue;
+ fip = bip = GET_BINTERNAL(dbp, epg->page, epg->indx);
+ epg = ncp->csp;
+
+ for (indx = 0;;) {
+ size = BINTERNAL_PSIZE(bip->len);
+ if (size > freespace)
+ break;
+ freespace -= size;
+ if (++indx >= NUM_ENT(npg))
+ break;
+ bip = GET_BINTERNAL(dbp, npg, indx);
+ }
+
+ /* See if we are deleting the page and we are not left most. */
+ if (indx == NUM_ENT(npg) && epg[-1].indx != 0)
+ goto fits;
+
+ pfree = dbp->pgsize;
+ for (epg--; epg >= ncp->sp; epg--)
+ if ((freespace = P_FREESPACE(dbp, epg->page)) < pfree) {
+ bip = GET_BINTERNAL(dbp, epg->page, epg->indx);
+ /* Add back in the key we will be deleting. */
+ freespace += BINTERNAL_PSIZE(bip->len);
+ if (freespace < pfree)
+ pfree = freespace;
+ if (epg->indx != 0)
+ break;
+ }
+ epg = ncp->csp;
+
+ /* If we are at the end of the page we will delete it. */
+ if (indx == NUM_ENT(npg)) {
+ if (NUM_ENT(epg[-1].page) == 1)
+ goto fits;
+ bip =
+ GET_BINTERNAL(dbp, epg[-1].page, epg[-1].indx + 1);
+ } else
+ bip = GET_BINTERNAL(dbp, npg, indx);
+
+ /* Back up until we have a key that fits. */
+ while (indx != 0 && BINTERNAL_PSIZE(bip->len) > pfree) {
+ indx--;
+ bip = GET_BINTERNAL(dbp, npg, indx);
+ }
+ if (indx == 0)
+ goto done;
+ }
+
+fits: memset(&bi, 0, sizeof(bi));
+ memset(&hdr, 0, sizeof(hdr));
+ memset(&data, 0, sizeof(data));
+ trecs = 0;
+
+ /*
+ * Copy data between internal nodes till one is full
+ * or the other is empty.
+ */
+ do {
+ if (dbc->dbtype == DB_BTREE) {
+ bip = GET_BINTERNAL(dbp, npg, 0);
+ size = fip == NULL ?
+ BINTERNAL_SIZE(bip->len) :
+ BINTERNAL_SIZE(fip->len);
+ if (P_FREESPACE(dbp, pg) < size + sizeof(db_indx_t))
+ break;
+
+ if (fip == NULL) {
+ data.size = bip->len;
+ data.data = bip->data;
+ } else {
+ data.size = fip->len;
+ data.data = fip->data;
+ }
+ bi.len = data.size;
+ B_TSET(bi.type, bip->type);
+ bi.pgno = bip->pgno;
+ bi.nrecs = bip->nrecs;
+ hdr.data = &bi;
+ hdr.size = SSZA(BINTERNAL, data);
+ if (F_ISSET(cp, C_RECNUM) || F_ISSET(dbc, DBC_OPD))
+ trecs += (int32_t)bip->nrecs;
+ } else {
+ rk = GET_RINTERNAL(dbp, npg, 0);
+ size = RINTERNAL_SIZE;
+ if (P_FREESPACE(dbp, pg) < size + sizeof(db_indx_t))
+ break;
+
+ hdr.data = rk;
+ hdr.size = size;
+ trecs += (int32_t)rk->nrecs;
+ }
+ if ((ret = __db_pitem(dbc, pg, pind, size, &hdr, &data)) != 0)
+ goto err;
+ pind++;
+ if (fip != NULL) {
+ /* reset size to be for the record being deleted. */
+ size = BINTERNAL_SIZE(bip->len);
+ fip = NULL;
+ }
+ if ((ret = __db_ditem(ndbc, npg, 0, size)) != 0)
+ goto err;
+ *merged = 1;
+ } while (--indx != 0);
+
+ if (c_data->compact_truncate != PGNO_INVALID &&
+ PGNO(pg) > c_data->compact_truncate && cp->csp != cp->sp) {
+ if ((ret = __bam_truncate_page(dbc, &pg, 1)) != 0)
+ goto err;
+ }
+
+ if (NUM_ENT(npg) != 0 && c_data->compact_truncate != PGNO_INVALID &&
+ PGNO(npg) > c_data->compact_truncate && ncp->csp != ncp->sp) {
+ if ((ret = __bam_truncate_page(ndbc, &npg, 1)) != 0)
+ goto err;
+ }
+
+ if (!*merged)
+ goto done;
+
+ if (trecs != 0) {
+ DB_ASSERT(dbp->dbenv, cp->csp - cp->sp == ncp->csp - ncp->sp);
+ cp->csp--;
+ if ((ret = __bam_adjust(dbc, trecs)) != 0)
+ goto err;
+
+ ncp->csp--;
+ if ((ret = __bam_adjust(ndbc, -trecs)) != 0)
+ goto err;
+ ncp->csp++;
+ }
+ cp->csp = save_csp;
+
+ /*
+ * Either we emptied the page or we need to update its
+ * parent to reflect the first page we now point to.
+ * First get rid of the bottom of the stack,
+ * bam_dpages will clear the stack. We can drop
+ * the locks on those pages as we have not done
+ * anything to them.
+ */
+ do {
+ if ((ret = __memp_fput(dbmp, nsave_csp->page, 0)) != 0)
+ goto err;
+ if ((ret = __LPUT(dbc, nsave_csp->lock)) != 0)
+ goto err;
+ nsave_csp--;
+ } while (nsave_csp != ncp->csp);
+
+ if (NUM_ENT(npg) == 0) {
+ /*
+ * __bam_dpages may decide to collapse the tree
+ * so we need to free our other stack. The tree
+ * will change in hight and our stack will nolonger
+ * be valid.
+ */
+ if (PGNO(ncp->sp->page) == ncp->root &&
+ NUM_ENT(ncp->sp->page) == 2) {
+ if ((ret = __bam_stkrel(dbc, STK_CLRDBC)) != 0)
+ goto err;
+ level = LEVEL(ncp->sp->page);
+ ppgno = PGNO(ncp->csp[-1].page);
+ } else
+ level = 0;
+
+ if (c_data->compact_truncate > PGNO(npg))
+ c_data->compact_truncate--;
+ ret = __bam_dpages(ndbc,
+ 0, ndbc->dbtype == DB_RECNO ? 0 : 1);
+ c_data->compact_pages_free++;
+ if (ret == 0 && level != 0) {
+ if ((ret = __memp_fget(dbmp, &ncp->root, dbc->txn,
+ 0, &npg)) != 0)
+ goto err;
+ if (level == LEVEL(npg))
+ level = 0;
+ if ((ret = __memp_fput(dbmp, npg, 0)) != 0)
+ goto err;
+ npg = NULL;
+ if (level != 0) {
+ c_data->compact_levels++;
+ c_data->compact_pages_free++;
+ if (c_data->compact_truncate > ppgno)
+ c_data->compact_truncate--;
+ if (c_data->compact_pages != 0)
+ c_data->compact_pages--;
+ }
+ }
+ } else
+ ret = __bam_pupdate(ndbc, npg);
+ return (ret);
+
+done:
+err: cp->csp = save_csp;
+ ncp->csp = nsave_csp;
+
+ return (ret);
+}
+
+/*
+ * __bam_compact_dups -- try to compress off page dup trees.
+ * We may or may not have a write lock on this page.
+ */
+static int
+__bam_compact_dups(dbc, ppg, factor, have_lock, c_data, donep)
+ DBC *dbc;
+ PAGE **ppg;
+ u_int32_t factor;
+ int have_lock;
+ DB_COMPACT *c_data;
+ int *donep;
+{
+ BOVERFLOW *bo;
+ BTREE_CURSOR *cp;
+ DB *dbp;
+ DBC *opd;
+ DBT start;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *dbmp;
+ PAGE *dpg, *pg;
+ db_indx_t i;
+ int done, level, ret, span, t_ret;
+
+ span = 0;
+ ret = 0;
+ opd = NULL;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ dbmp = dbp->mpf;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ pg = *ppg;
+
+ for (i = 0; i < NUM_ENT(pg); i++) {
+ bo = GET_BOVERFLOW(dbp, pg, i);
+ if (B_TYPE(bo->type) == B_KEYDATA)
+ continue;
+ c_data->compact_pages_examine++;
+ if (bo->pgno > c_data->compact_truncate) {
+ (*donep)++;
+ if (!have_lock) {
+ if ((ret = __db_lget(dbc, 0, PGNO(pg),
+ DB_LOCK_WRITE, 0, &cp->csp->lock)) != 0)
+ goto err;
+ have_lock = 1;
+ if ((ret = __memp_dirty(dbp->mpf, ppg,
+ dbc->txn, 0)) != 0)
+ goto err;
+ pg = *ppg;
+ }
+ if ((ret =
+ __bam_truncate_root_page(dbc, pg, i, c_data)) != 0)
+ goto err;
+ /* Just in case it should move. Could it? */
+ bo = GET_BOVERFLOW(dbp, pg, i);
+ }
+
+ if (B_TYPE(bo->type) == B_OVERFLOW) {
+ if ((ret = __bam_truncate_overflow(dbc, bo->pgno,
+ have_lock ? PGNO_INVALID : PGNO(pg), c_data)) != 0)
+ goto err;
+ (*donep)++;
+ continue;
+ }
+ /*
+ * Take a peek at the root. If it's a leaf then
+ * there is no tree here, avoid all the trouble.
+ */
+ if ((ret = __memp_fget(dbmp, &bo->pgno, dbc->txn,
+ 0, &dpg)) != 0)
+ goto err;
+
+ level = dpg->level;
+ if ((ret = __memp_fput(dbmp, dpg, 0)) != 0)
+ goto err;
+ if (level == LEAFLEVEL)
+ continue;
+ if ((ret = __db_c_newopd(dbc, bo->pgno, NULL, &opd)) != 0)
+ return (ret);
+ if (!have_lock) {
+ if ((ret = __db_lget(dbc, 0,
+ PGNO(pg), DB_LOCK_WRITE, 0, &cp->csp->lock)) != 0)
+ goto err;
+ have_lock = 1;
+ if ((ret = __memp_dirty(dbp->mpf, ppg,
+ dbc->txn, 0)) != 0)
+ goto err;
+ pg = *ppg;
+ }
+ (*donep)++;
+ memset(&start, 0, sizeof(start));
+ do {
+ if ((ret = __bam_compact_int(opd, &start,
+ NULL, factor, &span, c_data, &done)) != 0)
+ break;
+ } while (!done);
+
+ if (start.data != NULL)
+ __os_free(dbenv, start.data);
+
+ if (ret != 0)
+ goto err;
+
+ ret = __db_c_close(opd);
+ opd = NULL;
+ if (ret != 0)
+ goto err;
+ }
+
+err: if (opd != NULL && (t_ret = __db_c_close(opd)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __bam_truncate_page -- swap a page with a lower numbered page.
+ * The cusor has a stack which includes at least the
+ * immediate parent of this page.
+ */
+static int
+__bam_truncate_page(dbc, pgp, update_parent)
+ DBC *dbc;
+ PAGE **pgp;
+ int update_parent;
+{
+ BTREE_CURSOR *cp;
+ DB *dbp;
+ DBT data, hdr, ind;
+ DB_LSN lsn;
+ EPG *epg;
+ PAGE *newpage;
+ db_pgno_t newpgno, *pgnop;
+ int ret;
+
+ dbp = dbc->dbp;
+
+ /*
+ * We want to free a page that lives in the part of the file that
+ * can be truncated, so we're going to move it onto a free page
+ * that is in the part of the file that need not be truncated.
+ * Since the freelist is ordered now, we can simply call __db_new
+ * which will grab the first element off the freelist; we know this
+ * is the lowest numbered free page.
+ */
+ if ((ret = __db_new(dbc, P_DONTEXTEND | TYPE(*pgp), &newpage)) != 0)
+ return (ret);
+
+ /*
+ * If newpage is null then __db_new would have had to allocate
+ * a new page from the filesystem, so there is no reason
+ * to continue this action.
+ */
+ if (newpage == NULL)
+ return (0);
+
+ /*
+ * It is possible that a higher page is allocated if other threads
+ * are allocating at the same time, if so, just put it back.
+ */
+ if (PGNO(newpage) > PGNO(*pgp)) {
+ /* Its unfortunate but you can't just free a new overflow. */
+ if (TYPE(newpage) == P_OVERFLOW)
+ OV_LEN(newpage) = 0;
+ return (__db_free(dbc, newpage));
+ }
+
+ if ((ret = __memp_dirty(dbp->mpf, &newpage, dbc->txn, 0)) != 0)
+ goto err;
+
+ /* Log if necessary. */
+ if (DBC_LOGGING(dbc)) {
+ hdr.data = *pgp;
+ hdr.size = P_OVERHEAD(dbp);
+ if (TYPE(*pgp) == P_OVERFLOW) {
+ data.data = (u_int8_t *)*pgp + P_OVERHEAD(dbp);
+ data.size = OV_LEN(*pgp);
+ ind.size = 0;
+ } else {
+ data.data = (u_int8_t *)*pgp + HOFFSET(*pgp);
+ data.size = dbp->pgsize - HOFFSET(*pgp);
+ ind.data = P_INP(dbp, *pgp);
+ ind.size = NUM_ENT(*pgp) * sizeof(db_indx_t);
+ }
+ if ((ret = __bam_merge_log(dbp, dbc->txn,
+ &LSN(newpage), 0, PGNO(newpage), &LSN(newpage),
+ PGNO(*pgp), &LSN(*pgp), &hdr, &data, &ind)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(newpage));
+
+ newpgno = PGNO(newpage);
+ lsn = LSN(newpage);
+ memcpy(newpage, *pgp, dbp->pgsize);
+ PGNO(newpage) = newpgno;
+ LSN(newpage) = lsn;
+
+ /* Empty the old page. */
+ if ((ret = __memp_dirty(dbp->mpf, pgp, dbc->txn, 0)) != 0)
+ goto err;
+ if (TYPE(*pgp) == P_OVERFLOW)
+ OV_LEN(*pgp) = 0;
+ else {
+ HOFFSET(*pgp) = dbp->pgsize;
+ NUM_ENT(*pgp) = 0;
+ }
+ LSN(*pgp) = lsn;
+
+ /* Update siblings. */
+ switch (TYPE(newpage)) {
+ case P_OVERFLOW:
+ case P_LBTREE:
+ case P_LRECNO:
+ case P_LDUP:
+ if (NEXT_PGNO(newpage) == PGNO_INVALID &&
+ PREV_PGNO(newpage) == PGNO_INVALID)
+ break;
+ if ((ret = __bam_relink(dbc, *pgp, PGNO(newpage))) != 0)
+ goto err;
+ break;
+ default:
+ break;
+ }
+ cp = (BTREE_CURSOR*)dbc->internal;
+
+ /*
+ * Now, if we free this page, it will get truncated, when we free
+ * all the pages after it in the file.
+ */
+ ret = __db_free(dbc, *pgp);
+ /* db_free always puts the page. */
+ *pgp = newpage;
+
+ if (ret != 0)
+ return (ret);
+
+ if (!update_parent)
+ goto done;
+
+ /* Update the parent. */
+ epg = &cp->csp[-1];
+ if ((ret = __memp_dirty(dbp->mpf, &epg->page, dbc->txn, 0)) != 0)
+ return (ret);
+
+ switch (TYPE(epg->page)) {
+ case P_IBTREE:
+ pgnop = &GET_BINTERNAL(dbp, epg->page, epg->indx)->pgno;
+ break;
+ case P_IRECNO:
+ pgnop = &GET_RINTERNAL(dbp, epg->page, epg->indx)->pgno;
+ break;
+ default:
+ pgnop = &GET_BOVERFLOW(dbp, epg->page, epg->indx)->pgno;
+ break;
+ }
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __bam_pgno_log(dbp, dbc->txn, &LSN(epg->page),
+ 0, PGNO(epg->page), &LSN(epg->page), (u_int32_t)epg->indx,
+ *pgnop, PGNO(newpage))) != 0)
+ return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(epg->page));
+
+ *pgnop = PGNO(newpage);
+ cp->csp->page = newpage;
+
+done: return (0);
+
+err: (void)__memp_fput(dbp->mpf, newpage, 0);
+ return (ret);
+}
+
+/*
+ * __bam_truncate_overflow -- find overflow pages to truncate.
+ * Walk the pages of an overflow chain and swap out
+ * high numbered pages. We are passed the first page
+ * but only deal with the second and subsequent pages.
+ */
+
+static int
+__bam_truncate_overflow(dbc, pgno, pg_lock, c_data)
+ DBC *dbc;
+ db_pgno_t pgno;
+ db_pgno_t pg_lock;
+ DB_COMPACT *c_data;
+{
+ DB *dbp;
+ DB_LOCK lock;
+ PAGE *page;
+ int ret, t_ret;
+
+ dbp = dbc->dbp;
+ page = NULL;
+ LOCK_INIT(lock);
+
+ if ((ret = __memp_fget(dbp->mpf, &pgno, dbc->txn, 0, &page)) != 0)
+ return (ret);
+
+ while ((pgno = NEXT_PGNO(page)) != PGNO_INVALID) {
+ if ((ret = __memp_fput(dbp->mpf, page, 0)) != 0)
+ return (ret);
+ if ((ret = __memp_fget(dbp->mpf, &pgno, dbc->txn,
+ 0, &page)) != 0)
+ return (ret);
+ if (pgno <= c_data->compact_truncate)
+ continue;
+ if (pg_lock != PGNO_INVALID) {
+ if ((ret = __db_lget(dbc,
+ 0, pg_lock, DB_LOCK_WRITE, 0, &lock)) != 0)
+ break;
+ pg_lock = PGNO_INVALID;
+ }
+ if ((ret = __bam_truncate_page(dbc, &page, 0)) != 0)
+ break;
+ }
+
+ if (page != NULL &&
+ (t_ret = __memp_fput(dbp->mpf, page, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __bam_truncate_root_page -- swap a page which is
+ * the root of an off page dup tree or the head of an overflow.
+ * The page is reference by the pg/indx passed in.
+ */
+static int
+__bam_truncate_root_page(dbc, pg, indx, c_data)
+ DBC *dbc;
+ PAGE *pg;
+ u_int32_t indx;
+ DB_COMPACT *c_data;
+{
+ BINTERNAL *bi;
+ BOVERFLOW *bo;
+ DB *dbp;
+ DBT orig;
+ PAGE *page;
+ db_pgno_t newpgno, *pgnop;
+ int ret, t_ret;
+
+ COMPQUIET(c_data, NULL);
+ COMPQUIET(bo, NULL);
+ COMPQUIET(newpgno, PGNO_INVALID);
+ dbp = dbc->dbp;
+ page = NULL;
+ if (TYPE(pg) == P_IBTREE) {
+ bi = GET_BINTERNAL(dbp, pg, indx);
+ if (B_TYPE(bi->type) == B_OVERFLOW) {
+ bo = (BOVERFLOW *)(bi->data);
+ pgnop = &bo->pgno;
+ } else
+ pgnop = &bi->pgno;
+ } else {
+ bo = GET_BOVERFLOW(dbp, pg, indx);
+ pgnop = &bo->pgno;
+ }
+
+ DB_ASSERT(dbp->dbenv, IS_DIRTY(pg));
+
+ if ((ret = __memp_fget(dbp->mpf, pgnop, dbc->txn, 0, &page)) != 0)
+ goto err;
+
+ /*
+ * If this is a multiply reference overflow key, then we will just
+ * copy it and decrement the reference count. This is part of a
+ * fix to get rid of multiple references.
+ */
+ if (TYPE(page) == P_OVERFLOW && OV_REF(page) > 1) {
+ if ((ret = __db_ovref(dbc, bo->pgno)) != 0)
+ goto err;
+ memset(&orig, 0, sizeof(orig));
+ if ((ret = __db_goff(dbp, dbc->txn, &orig,
+ bo->tlen, bo->pgno, &orig.data, &orig.size)) == 0)
+ ret = __db_poff(dbc, &orig, &newpgno);
+ if (orig.data != NULL)
+ __os_free(dbp->dbenv, orig.data);
+ if (ret != 0)
+ goto err;
+ } else {
+ if ((ret = __bam_truncate_page(dbc, &page, 0)) != 0)
+ goto err;
+ newpgno = PGNO(page);
+ /* If we could not allocate from the free list, give up.*/
+ if (newpgno == *pgnop)
+ goto err;
+ }
+
+ /* Update the reference. */
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __bam_pgno_log(dbp,
+ dbc->txn, &LSN(pg), 0, PGNO(pg),
+ &LSN(pg), (u_int32_t)indx, *pgnop, newpgno)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(pg));
+
+ *pgnop = newpgno;
+
+err: if (page != NULL && (t_ret =
+ __memp_fput(dbp->mpf, page, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * -- bam_truncate_internal_overflow -- find overflow keys
+ * on internal pages and if they have high page
+ * numbers swap them with lower pages and truncate them.
+ * Note that if there are overflow keys in the internal
+ * nodes they will get copied adding pages to the database.
+ */
+static int
+__bam_truncate_internal_overflow(dbc, page, c_data)
+ DBC *dbc;
+ PAGE *page;
+ DB_COMPACT *c_data;
+{
+ BINTERNAL *bi;
+ BOVERFLOW *bo;
+ db_indx_t indx;
+ int ret;
+
+ COMPQUIET(bo, NULL);
+ ret = 0;
+ for (indx = 0; indx < NUM_ENT(page); indx++) {
+ bi = GET_BINTERNAL(dbc->dbp, page, indx);
+ if (B_TYPE(bi->type) != B_OVERFLOW)
+ continue;
+ bo = (BOVERFLOW *)(bi->data);
+ if (bo->pgno > c_data->compact_truncate && (ret =
+ __bam_truncate_root_page(dbc, page, indx, c_data)) != 0)
+ break;
+ if ((ret = __bam_truncate_overflow(
+ dbc, bo->pgno, PGNO_INVALID, c_data)) != 0)
+ break;
+ }
+ return (ret);
+}
+
+#ifdef HAVE_FTRUNCATE
+/*
+ * __bam_savekey -- save the key from an internal page.
+ * We need to save information so that we can
+ * fetch then next internal node of the tree. This means
+ * we need the btree key on this current page, or the
+ * next record number.
+ */
+static int
+__bam_savekey(dbc, next, start)
+ DBC *dbc;
+ int next;
+ DBT *start;
+{
+ BINTERNAL *bi;
+ BOVERFLOW *bo;
+ BTREE_CURSOR *cp;
+ DB *dbp;
+ DB_ENV *dbenv;
+ PAGE *pg;
+ RINTERNAL *ri;
+ db_indx_t indx, top;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ pg = cp->csp->page;
+
+ if (dbc->dbtype == DB_RECNO) {
+ if (next)
+ for (indx = 0, top = NUM_ENT(pg); indx != top; indx++) {
+ ri = GET_RINTERNAL(dbp, pg, indx);
+ cp->recno += ri->nrecs;
+ }
+ return (__db_retcopy(dbenv, start, &cp->recno,
+ sizeof(cp->recno), &start->data, &start->ulen));
+
+ }
+ bi = GET_BINTERNAL(dbp, pg, NUM_ENT(pg) - 1);
+ if (B_TYPE(bi->type) == B_OVERFLOW) {
+ bo = (BOVERFLOW *)(bi->data);
+ return (__db_goff(dbp, dbc->txn, start,
+ bo->tlen, bo->pgno, &start->data, &start->ulen));
+ }
+ return (__db_retcopy(dbenv,
+ start, bi->data, bi->len, &start->data, &start->ulen));
+}
+
+/*
+ * bam_truncate_internal --
+ * Find high numbered pages in the internal nodes of a tree and
+ * swap them.
+ */
+static int
+__bam_truncate_internal(dbp, txn, c_data)
+ DB *dbp;
+ DB_TXN *txn;
+ DB_COMPACT *c_data;
+{
+ BTREE_CURSOR *cp;
+ DBC *dbc;
+ DBT start;
+ PAGE *pg;
+ db_pgno_t pgno;
+ u_int32_t sflag;
+ int level, local_txn, ret, t_ret;
+
+ dbc = NULL;
+ memset(&start, 0, sizeof(start));
+
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ local_txn = 1;
+ txn = NULL;
+ } else
+ local_txn = 0;
+
+ level = LEAFLEVEL + 1;
+ sflag = CS_READ | CS_GETRECNO;
+
+new_txn:
+ if (local_txn && (ret = __txn_begin(dbp->dbenv, NULL, &txn, 0)) != 0)
+ goto err;
+
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
+ goto err;
+ cp = (BTREE_CURSOR *)dbc->internal;
+
+ pgno = PGNO_INVALID;
+ do {
+ if ((ret = __bam_csearch(dbc, &start, sflag, level)) != 0) {
+ /* No more at this level, go up one. */
+ if (ret == DB_NOTFOUND) {
+ level++;
+ if (start.data != NULL)
+ __os_free(dbp->dbenv, start.data);
+ memset(&start, 0, sizeof(start));
+ sflag = CS_READ | CS_GETRECNO;
+ continue;
+ }
+ goto err;
+ }
+ c_data->compact_pages_examine++;
+
+ pg = cp->csp->page;
+ pgno = PGNO(pg);
+
+ sflag = CS_NEXT | CS_GETRECNO;
+ /* Grab info about the page and drop the stack. */
+ if (pgno != cp->root && (ret = __bam_savekey(dbc,
+ pgno <= c_data->compact_truncate, &start)) != 0)
+ goto err;
+
+ if ((ret = __bam_stkrel(dbc, STK_NOLOCK)) != 0)
+ goto err;
+ if (pgno == cp->root)
+ break;
+
+ if (pgno <= c_data->compact_truncate)
+ continue;
+
+ /* Reget the page with a write lock, and its parent too. */
+ if ((ret = __bam_csearch(dbc,
+ &start, CS_PARENT | CS_GETRECNO, level)) != 0)
+ goto err;
+ pg = cp->csp->page;
+ pgno = PGNO(pg);
+
+ if (pgno > c_data->compact_truncate) {
+ if ((ret = __bam_truncate_page(dbc, &pg, 1)) != 0)
+ goto err;
+ }
+ if ((ret = __bam_stkrel(dbc,
+ pgno > c_data->compact_truncate ? 0 : STK_NOLOCK)) != 0)
+ goto err;
+
+ /* We are locking subtrees, so drop the write locks asap. */
+ if (local_txn && pgno > c_data->compact_truncate)
+ break;
+ } while (pgno != cp->root);
+
+ if ((ret = __db_c_close(dbc)) != 0)
+ goto err;
+ dbc = NULL;
+ if (local_txn) {
+ if ((ret = __txn_commit(txn, DB_TXN_NOSYNC)) != 0)
+ goto err;
+ txn = NULL;
+ }
+ if (pgno != ((BTREE *)dbp->bt_internal)->bt_root)
+ goto new_txn;
+
+err: if (dbc != NULL && (t_ret = __bam_stkrel(dbc, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (local_txn &&
+ txn != NULL && (t_ret = __txn_abort(txn)) != 0 && ret == 0)
+ ret = t_ret;
+ if (start.data != NULL)
+ __os_free(dbp->dbenv, start.data);
+ return (ret);
+}
+
+static int
+__bam_setup_freelist(dbp, list, nelems)
+ DB *dbp;
+ struct pglist *list;
+ u_int32_t nelems;
+{
+ DB_MPOOLFILE *mpf;
+ db_pgno_t *plist;
+ int ret;
+
+ mpf = dbp->mpf;
+
+ if ((ret = __memp_alloc_freelist(mpf, nelems, &plist)) != 0)
+ return (ret);
+
+ while (nelems-- != 0)
+ *plist++ = list++->pgno;
+
+ return (0);
+}
+
+static int
+__bam_free_freelist(dbp, txn)
+ DB *dbp;
+ DB_TXN *txn;
+{
+ DBC *dbc;
+ DB_LOCK lock;
+ int ret, t_ret;
+
+ LOCK_INIT(lock);
+ ret = 0;
+
+ /*
+ * If we are not in a transaction then we need to get
+ * a lock on the meta page, otherwise we should already
+ * have the lock.
+ */
+
+ dbc = NULL;
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ /* Get a cursor so we can call __db_lget. */
+ if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
+ return (ret);
+
+ if ((ret = __db_lget(dbc,
+ 0, PGNO_BASE_MD, DB_LOCK_WRITE, 0, &lock)) != 0)
+ goto err;
+ }
+
+ ret = __memp_free_freelist(dbp->mpf);
+
+err: if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+#endif
diff --git a/db/btree/bt_compare.c b/db/btree/bt_compare.c
index 81ffe098b..17950a664 100644
--- a/db/btree/bt_compare.c
+++ b/db/btree/bt_compare.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,15 +39,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_compare.c,v 11.20 2004/02/21 15:54:44 bostic Exp $
+ * $Id: bt_compare.c,v 12.7 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
@@ -56,12 +52,13 @@
* __bam_cmp --
* Compare a key to a given record.
*
- * PUBLIC: int __bam_cmp __P((DB *, const DBT *, PAGE *,
- * PUBLIC: u_int32_t, int (*)(DB *, const DBT *, const DBT *), int *));
+ * PUBLIC: int __bam_cmp __P((DB *, DB_TXN *, const DBT *, PAGE *, u_int32_t,
+ * PUBLIC: int (*)(DB *, const DBT *, const DBT *), int *));
*/
int
-__bam_cmp(dbp, dbt, h, indx, func, cmpp)
+__bam_cmp(dbp, txn, dbt, h, indx, func, cmpp)
DB *dbp;
+ DB_TXN *txn;
const DBT *dbt;
PAGE *h;
u_int32_t indx;
@@ -82,9 +79,9 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
* !!!
* We do not clear the pg_dbt DBT even though it's likely to contain
* random bits. That should be okay, because the app's comparison
- * routine had better not be looking at fields other than data/size.
- * We don't clear it because we go through this path a lot and it's
- * expensive.
+ * routine had better not be looking at fields other than data, size
+ * and app_data. We don't clear it because we go through this path a
+ * lot and it's expensive.
*/
switch (TYPE(h)) {
case P_LBTREE:
@@ -94,6 +91,7 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
if (B_TYPE(bk->type) == B_OVERFLOW)
bo = (BOVERFLOW *)bk;
else {
+ pg_dbt.app_data = NULL;
pg_dbt.data = bk->data;
pg_dbt.size = bk->len;
*cmpp = func(dbp, dbt, &pg_dbt);
@@ -127,6 +125,7 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
if (B_TYPE(bi->type) == B_OVERFLOW)
bo = (BOVERFLOW *)(bi->data);
else {
+ pg_dbt.app_data = NULL;
pg_dbt.data = bi->data;
pg_dbt.size = bi->len;
*cmpp = func(dbp, dbt, &pg_dbt);
@@ -140,7 +139,7 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
/*
* Overflow.
*/
- return (__db_moff(dbp, dbt,
+ return (__db_moff(dbp, txn, dbt,
bo->pgno, bo->tlen, func == __bam_defcmp ? NULL : func, cmpp));
}
diff --git a/db/btree/bt_conv.c b/db/btree/bt_conv.c
index 39a9d8253..04de0688c 100644
--- a/db/btree/bt_conv.c
+++ b/db/btree/bt_conv.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_conv.c,v 11.15 2004/01/28 03:35:48 bostic Exp $
+ * $Id: bt_conv.c,v 12.5 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_swap.h"
@@ -88,7 +84,7 @@ __bam_mswap(pg)
p = (u_int8_t *)pg + sizeof(DBMETA);
- SWAP32(p); /* maxkey */
+ p += sizeof(u_int32_t); /* unused */
SWAP32(p); /* minkey */
SWAP32(p); /* re_len */
SWAP32(p); /* re_pad */
diff --git a/db/btree/bt_curadj.c b/db/btree/bt_curadj.c
index 477f00b8f..950d2bfac 100644
--- a/db/btree/bt_curadj.c
+++ b/db/btree/bt_curadj.c
@@ -1,21 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_curadj.c,v 11.37 2004/03/13 14:11:33 bostic Exp $
+ * $Id: bt_curadj.c,v 12.11 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
+#include "dbinc/mp.h"
static int __bam_opd_cursor __P((DB *, DBC *, db_pgno_t, u_int32_t, u_int32_t));
@@ -35,14 +32,14 @@ static int __bam_opd_cursor __P((DB *, DBC *, db_pgno_t, u_int32_t, u_int32_t));
* Update the cursors when items are deleted and when already deleted
* items are overwritten. Return the number of relevant cursors found.
*
- * PUBLIC: int __bam_ca_delete __P((DB *, db_pgno_t, u_int32_t, int));
+ * PUBLIC: int __bam_ca_delete __P((DB *, db_pgno_t, u_int32_t, int, int *));
*/
int
-__bam_ca_delete(dbp, pgno, indx, delete)
+__bam_ca_delete(dbp, pgno, indx, delete, countp)
DB *dbp;
db_pgno_t pgno;
u_int32_t indx;
- int delete;
+ int delete, *countp;
{
BTREE_CURSOR *cp;
DB *ldbp;
@@ -63,15 +60,16 @@ __bam_ca_delete(dbp, pgno, indx, delete)
* Each cursor is single-threaded, so we only need to lock the
* list of DBs and then the list of cursors in each DB.
*/
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (count = 0, ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (count = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
cp = (BTREE_CURSOR *)dbc->internal;
- if (cp->pgno == pgno && cp->indx == indx) {
+ if (cp->pgno == pgno && cp->indx == indx &&
+ !MVCC_SKIP_CURADJ(dbc, pgno)) {
/*
* [#8032] This assert is checking
* for possible race conditions where we
@@ -82,7 +80,7 @@ __bam_ca_delete(dbp, pgno, indx, delete)
* be a problem, but this assert should
* be re-activated when the Btree stack
* code is re-written.
- DB_ASSERT(!STD_LOCKING(dbc) ||
+ DB_ASSERT(dbenv, !STD_LOCKING(dbc) ||
cp->lock_mode != DB_LOCK_NG);
*/
if (delete)
@@ -92,48 +90,55 @@ __bam_ca_delete(dbp, pgno, indx, delete)
++count;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
- return (count);
+ if (countp != NULL)
+ *countp = count;
+ return (0);
}
/*
* __ram_ca_delete --
- * Return the number of relevant cursors.
+ * Return if any relevant cursors found.
*
- * PUBLIC: int __ram_ca_delete __P((DB *, db_pgno_t));
+ * PUBLIC: int __ram_ca_delete __P((DB *, db_pgno_t, int *));
*/
int
-__ram_ca_delete(dbp, root_pgno)
+__ram_ca_delete(dbp, root_pgno, foundp)
DB *dbp;
db_pgno_t root_pgno;
+ int *foundp;
{
DB *ldbp;
DBC *dbc;
DB_ENV *dbenv;
int found;
- found = 0;
dbenv = dbp->dbenv;
/*
* Review the cursors. See the comment in __bam_ca_delete().
*/
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
found == 0 && 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);
- found == 0 && dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
- if (dbc->internal->root == root_pgno)
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links)
+ if (dbc->internal->root == root_pgno &&
+ !MVCC_SKIP_CURADJ(dbc, root_pgno)) {
found = 1;
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ break;
+ }
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- return (found);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
+
+ *foundp = found;
+ return (0);
}
/*
@@ -165,22 +170,22 @@ __bam_ca_di(my_dbc, pgno, indx, adjust)
/*
* Adjust the cursors. See the comment in __bam_ca_delete().
*/
- found = 0;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
if (dbc->dbtype == DB_RECNO)
continue;
cp = dbc->internal;
- if (cp->pgno == pgno && cp->indx >= indx) {
+ if (cp->pgno == pgno && cp->indx >= indx &&
+ (dbc == my_dbc || !MVCC_SKIP_CURADJ(dbc, pgno))) {
/* Cursor indices should never be negative. */
- DB_ASSERT(cp->indx != 0 || adjust > 0);
+ DB_ASSERT(dbenv, cp->indx != 0 || adjust > 0);
/* [#8032]
- DB_ASSERT(!STD_LOCKING(dbc) ||
+ DB_ASSERT(dbenv, !STD_LOCKING(dbc) ||
cp->lock_mode != DB_LOCK_NG);
*/
cp->indx += adjust;
@@ -188,9 +193,9 @@ __bam_ca_di(my_dbc, pgno, indx, adjust)
found = 1;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (found != 0 && DBC_LOGGING(my_dbc)) {
if ((ret = __bam_curadj_log(dbp, my_dbc->txn, &lsn, 0,
@@ -227,7 +232,7 @@ __bam_opd_cursor(dbp, dbc, first, tpgno, ti)
* an old off-page dup cursor--to augment the checking db_c_newopd
* will do, assert this.
*/
- DB_ASSERT(orig_cp->opd == NULL);
+ DB_ASSERT(dbp->dbenv, orig_cp->opd == NULL);
if ((ret = __db_c_newopd(dbc, tpgno, orig_cp->opd, &dbc_nopd)) != 0)
return (ret);
@@ -279,26 +284,27 @@ __bam_ca_dup(my_dbc, first, fpgno, fi, tpgno, ti)
DB_ENV *dbenv;
DB_LSN lsn;
DB_TXN *my_txn;
- int found, ret;
+ int found, ret, t_ret;
dbp = my_dbc->dbp;
dbenv = dbp->dbenv;
my_txn = IS_SUBTRANSACTION(my_dbc->txn) ? my_dbc->txn : NULL;
+ ret = 0;
/*
* Adjust the cursors. See the comment in __bam_ca_delete().
*/
- found = 0;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
- ldbp = LIST_NEXT(ldbp, dblistlinks)) {
-loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- for (dbc = TAILQ_FIRST(&ldbp->active_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+loop: MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
/* Find cursors pointing to this record. */
orig_cp = (BTREE_CURSOR *)dbc->internal;
- if (orig_cp->pgno != fpgno || orig_cp->indx != fi)
+ if (orig_cp->pgno != fpgno || orig_cp->indx != fi ||
+ MVCC_SKIP_CURADJ(dbc, fpgno))
continue;
/*
@@ -308,29 +314,31 @@ loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
if (orig_cp->opd != NULL)
continue;
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
/* [#8032]
- DB_ASSERT(!STD_LOCKING(dbc) ||
+ DB_ASSERT(dbenv, !STD_LOCKING(dbc) ||
orig_cp->lock_mode != DB_LOCK_NG);
*/
if ((ret = __bam_opd_cursor(dbp,
- dbc, first, tpgno, ti)) !=0)
- return (ret);
+ dbc, first, tpgno, ti)) != 0)
+ goto err;
if (my_txn != NULL && dbc->txn != my_txn)
found = 1;
/* We released the mutex to get a cursor, start over. */
goto loop;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+err: MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
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);
+ if ((t_ret = __bam_curadj_log(dbp, my_dbc->txn,
+ &lsn, 0, DB_CA_DUP, fpgno, tpgno, 0, first, fi, ti)) != 0 &&
+ ret == 0)
+ ret = t_ret;
}
- return (0);
+
+ return (ret);
}
/*
@@ -355,17 +363,18 @@ __bam_ca_undodup(dbp, first, fpgno, fi, ti)
int ret;
dbenv = dbp->dbenv;
+ ret = 0;
/*
* Adjust the cursors. See the comment in __bam_ca_delete().
*/
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (;
ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
- ldbp = LIST_NEXT(ldbp, dblistlinks)) {
-loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- for (dbc = TAILQ_FIRST(&ldbp->active_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+loop: MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
orig_cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -377,13 +386,13 @@ loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
*/
if (orig_cp->pgno != fpgno ||
orig_cp->indx != first ||
- orig_cp->opd == NULL ||
- ((BTREE_CURSOR *)orig_cp->opd->internal)->indx
- != ti)
+ orig_cp->opd == NULL || ((BTREE_CURSOR *)
+ orig_cp->opd->internal)->indx != ti ||
+ MVCC_SKIP_CURADJ(dbc, fpgno))
continue;
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
if ((ret = __db_c_close(orig_cp->opd)) != 0)
- return (ret);
+ goto err;
orig_cp->opd = NULL;
orig_cp->indx = fi;
/*
@@ -392,11 +401,11 @@ loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
*/
goto loop;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+err: MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
- return (0);
+ return (ret);
}
/*
@@ -424,29 +433,29 @@ __bam_ca_rsplit(my_dbc, fpgno, tpgno)
/*
* Adjust the cursors. See the comment in __bam_ca_delete().
*/
- found = 0;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
if (dbc->dbtype == DB_RECNO)
continue;
- if (dbc->internal->pgno == fpgno) {
+ if (dbc->internal->pgno == fpgno &&
+ !MVCC_SKIP_CURADJ(dbc, fpgno)) {
dbc->internal->pgno = tpgno;
/* [#8032]
- DB_ASSERT(!STD_LOCKING(dbc) ||
+ DB_ASSERT(dbenv, !STD_LOCKING(dbc) ||
dbc->internal->lock_mode != DB_LOCK_NG);
*/
if (my_txn != NULL && dbc->txn != my_txn)
found = 1;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (found != 0 && DBC_LOGGING(my_dbc)) {
if ((ret = __bam_curadj_log(dbp, my_dbc->txn,
@@ -492,20 +501,20 @@ __bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_indx, cleft)
* the cursor is on the right page, it is decremented by the number of
* records split to the left page.
*/
- found = 0;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
if (dbc->dbtype == DB_RECNO)
continue;
cp = dbc->internal;
- if (cp->pgno == ppgno) {
+ if (cp->pgno == ppgno &&
+ !MVCC_SKIP_CURADJ(dbc, ppgno)) {
/* [#8032]
- DB_ASSERT(!STD_LOCKING(dbc) ||
+ DB_ASSERT(dbenv, !STD_LOCKING(dbc) ||
cp->lock_mode != DB_LOCK_NG);
*/
if (my_txn != NULL && dbc->txn != my_txn)
@@ -519,9 +528,9 @@ __bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_indx, cleft)
}
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (found != 0 && DBC_LOGGING(my_dbc)) {
if ((ret = __bam_curadj_log(dbp,
@@ -540,10 +549,10 @@ __bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_indx, cleft)
* left and the right pages.
* Called only during undo processing.
*
- * PUBLIC: void __bam_ca_undosplit __P((DB *,
+ * PUBLIC: int __bam_ca_undosplit __P((DB *,
* PUBLIC: db_pgno_t, db_pgno_t, db_pgno_t, u_int32_t));
*/
-void
+int
__bam_ca_undosplit(dbp, frompgno, topgno, lpgno, split_indx)
DB *dbp;
db_pgno_t frompgno, topgno, lpgno;
@@ -562,23 +571,27 @@ __bam_ca_undosplit(dbp, frompgno, topgno, lpgno, split_indx)
* When backing out a split, we move the cursor back
* to the original offset and bump it by the split_indx.
*/
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
if (dbc->dbtype == DB_RECNO)
continue;
cp = dbc->internal;
- if (cp->pgno == topgno) {
+ if (cp->pgno == topgno &&
+ !MVCC_SKIP_CURADJ(dbc, topgno)) {
cp->pgno = frompgno;
cp->indx += split_indx;
- } else if (cp->pgno == lpgno)
+ } else if (cp->pgno == lpgno &&
+ !MVCC_SKIP_CURADJ(dbc, lpgno))
cp->pgno = frompgno;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
+
+ return (0);
}
diff --git a/db/btree/bt_cursor.c b/db/btree/bt_cursor.c
index 82d6cc435..dbcda5a40 100644
--- a/db/btree/bt_cursor.c
+++ b/db/btree/bt_cursor.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_cursor.c,v 11.190 2004/09/22 21:46:32 ubell Exp $
+ * $Id: bt_cursor.c,v 12.23 2006/09/14 23:55:24 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -26,10 +19,8 @@ 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 *));
-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, int));
static int __bam_c_physdel __P((DBC *));
static int __bam_c_prev __P((DBC *));
@@ -55,7 +46,7 @@ static int __bam_isopd __P((DBC *, db_pgno_t *));
* the held interior page so we use ACQUIRE_COUPLE.
*/
#undef ACQUIRE
-#define ACQUIRE(dbc, mode, lpgno, lock, fpgno, pagep, ret) do { \
+#define ACQUIRE(dbc, mode, lpgno, lock, fpgno, pagep, flags, ret) do { \
DB_MPOOLFILE *__mpf = (dbc)->dbp->mpf; \
if ((pagep) != NULL) { \
ret = __memp_fput(__mpf, pagep, 0); \
@@ -63,50 +54,20 @@ static int __bam_isopd __P((DBC *, db_pgno_t *));
} else \
ret = 0; \
if ((ret) == 0 && STD_LOCKING(dbc)) \
- ret = __db_lget(dbc, LCK_COUPLE, lpgno, mode, 0, &(lock));\
+ ret = __db_lget( \
+ dbc, LCK_COUPLE, lpgno, mode, flags, &(lock)); \
if ((ret) == 0) \
- ret = __memp_fget(__mpf, &(fpgno), 0, &(pagep)); \
-} while (0)
-
-#undef ACQUIRE_COUPLE
-#define ACQUIRE_COUPLE(dbc, mode, lpgno, lock, fpgno, pagep, ret) do { \
- 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, \
- LCK_COUPLE_ALWAYS, lpgno, mode, 0, &(lock)); \
- if ((ret) == 0) \
- ret = __memp_fget(__mpf, &(fpgno), 0, &(pagep)); \
+ ret = __memp_fget(__mpf, &(fpgno), (dbc)->txn, \
+ 0, &(pagep)); \
} while (0)
/* Acquire a new page/lock for a cursor. */
#undef ACQUIRE_CUR
-#define ACQUIRE_CUR(dbc, mode, p, ret) do { \
- BTREE_CURSOR *__cp = (BTREE_CURSOR *)(dbc)->internal; \
- 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); \
- } \
-} while (0)
-
-/*
- * Acquire a new page/lock for a cursor and release the previous.
- * This is typically used when descending a tree and we do not
- * want to hold the interior nodes locked.
- */
-#undef ACQUIRE_CUR_COUPLE
-#define ACQUIRE_CUR_COUPLE(dbc, mode, p, ret) do { \
+#define ACQUIRE_CUR(dbc, mode, p, flags, ret) do { \
BTREE_CURSOR *__cp = (BTREE_CURSOR *)(dbc)->internal; \
if (p != __cp->pgno) \
__cp->pgno = PGNO_INVALID; \
- ACQUIRE_COUPLE(dbc, mode, p, __cp->lock, p, __cp->page, ret); \
+ ACQUIRE(dbc, mode, p, __cp->lock, p, __cp->page, flags, ret); \
if ((ret) == 0) { \
__cp->pgno = p; \
__cp->lock_mode = (mode); \
@@ -196,11 +157,11 @@ __bam_c_init(dbc, dbtype)
/* Allocate/initialize the internal structure. */
if (dbc->internal == NULL && (ret =
- __os_malloc(dbenv, sizeof(BTREE_CURSOR), &dbc->internal)) != 0)
+ __os_calloc(dbenv, 1, sizeof(BTREE_CURSOR), &dbc->internal)) != 0)
return (ret);
/* Initialize methods. */
- dbc->c_close = __db_c_close;
+ dbc->c_close = __db_c_close_pp;
dbc->c_count = __db_c_count_pp;
dbc->c_del = __db_c_del_pp;
dbc->c_dup = __db_c_dup_pp;
@@ -257,8 +218,11 @@ __bam_c_refresh(dbc)
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]);
+ if (cp->sp == NULL) {
+ cp->sp = cp->stack;
+ cp->esp = cp->stack + sizeof(cp->stack) / sizeof(cp->stack[0]);
+ }
+ BT_STK_CLR(cp);
/*
* The btree leaf page data structures require that two key/data pairs
@@ -308,7 +272,7 @@ __bam_c_close(dbc, root_pgno, rmroot)
DBC *dbc_opd, *dbc_c;
DB_MPOOLFILE *mpf;
PAGE *h;
- int cdb_lock, ret;
+ int cdb_lock, count, ret;
dbp = dbc->dbp;
mpf = dbp->mpf;
@@ -378,22 +342,28 @@ __bam_c_close(dbc, root_pgno, rmroot)
dbc_c = dbc;
switch (dbc->dbtype) {
case DB_BTREE: /* Case #1, #3. */
- if (__bam_ca_delete(dbp, cp->pgno, cp->indx, 1) == 0)
+ if ((ret = __bam_ca_delete(
+ dbp, cp->pgno, cp->indx, 1, &count)) != 0)
+ goto err;
+ if (count == 0)
goto lock;
goto done;
case DB_RECNO:
if (!F_ISSET(dbc, DBC_OPD)) /* Case #1. */
goto done;
/* Case #3. */
- if (__ram_ca_delete(dbp, cp->root) == 0)
+ if ((ret = __ram_ca_delete(dbp, cp->root, &count)) != 0)
+ goto err;
+ if (count == 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));
+ ret = __db_unknown_type(dbp->dbenv,
+ "__bam_c_close", dbc->dbtype);
+ goto err;
}
}
@@ -405,7 +375,7 @@ __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(mpf, &cp->pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn, 0, &h)) != 0)
goto err;
root_pgno = GET_BOVERFLOW(dbp, h, cp->indx + O_INDX)->pgno;
if ((ret = __memp_fput(mpf, h, 0)) != 0)
@@ -414,20 +384,26 @@ __bam_c_close(dbc, root_pgno, rmroot)
dbc_c = dbc_opd;
switch (dbc_opd->dbtype) {
case DB_BTREE:
- if (__bam_ca_delete(
- dbp, cp_opd->pgno, cp_opd->indx, 1) == 0)
+ if ((ret = __bam_ca_delete(
+ dbp, cp_opd->pgno, cp_opd->indx, 1, &count)) != 0)
+ goto err;
+ if (count == 0)
goto lock;
goto done;
case DB_RECNO:
- if (__ram_ca_delete(dbp, cp_opd->root) == 0)
+ if ((ret =
+ __ram_ca_delete(dbp, cp_opd->root, &count)) != 0)
+ goto err;
+ if (count == 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));
+ ret = __db_unknown_type(
+ dbp->dbenv, "__bam_c_close", dbc->dbtype);
+ goto err;
}
}
goto done;
@@ -508,7 +484,8 @@ delete: /*
* Delete the on-page physical item referenced by the cursor.
*/
if (dbc_c->dbtype == DB_BTREE) {
- if ((ret = __memp_fget(mpf, &cp_c->pgno, 0, &cp_c->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp_c->pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &cp_c->page)) != 0)
goto err;
if ((ret = __bam_c_physdel(dbc_c)) != 0)
goto err;
@@ -530,7 +507,7 @@ 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(mpf, &root_pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &root_pgno, dbc->txn, 0, &h)) != 0)
goto err;
if (NUM_ENT(h) == 0) {
DISCARD_CUR(dbc_c, ret);
@@ -557,7 +534,8 @@ delete: /*
* the primary page.
*/
if (dbc_opd != NULL) {
- if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &cp->page)) != 0)
goto err;
if ((ret = __bam_c_physdel(dbc)) != 0)
goto err;
@@ -588,8 +566,14 @@ static int
__bam_c_destroy(dbc)
DBC *dbc;
{
+ BTREE_CURSOR *cp;
+
+ cp = (BTREE_CURSOR *)dbc->internal;
+
/* Discard the structures. */
- __os_free(dbc->dbp->dbenv, dbc->internal);
+ if (cp->sp != cp->stack)
+ __os_free(dbc->dbp->dbenv, cp->sp);
+ __os_free(dbc->dbp->dbenv, cp);
return (0);
}
@@ -625,7 +609,8 @@ __bam_c_count(dbc, recnop)
/*
* On-page duplicates, get the page and count.
*/
- if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn,
+ 0, &cp->page)) != 0)
return (ret);
/*
@@ -649,8 +634,8 @@ __bam_c_count(dbc, recnop)
* 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)
+ if ((ret = __memp_fget(mpf, &cp->opd->internal->root,
+ dbc->txn, 0, &cp->page)) != 0)
return (ret);
/*
@@ -693,7 +678,7 @@ __bam_c_del(dbc)
BTREE_CURSOR *cp;
DB *dbp;
DB_MPOOLFILE *mpf;
- int ret, t_ret;
+ int count, ret, t_ret;
dbp = dbc->dbp;
mpf = dbp->mpf;
@@ -707,7 +692,7 @@ __bam_c_del(dbc)
/*
* This code is always called with a page lock but no page.
*/
- DB_ASSERT(cp->page == NULL);
+ DB_ASSERT(dbp->dbenv, cp->page == NULL);
/*
* We don't physically delete the record until the cursor moves, so
@@ -723,11 +708,15 @@ __bam_c_del(dbc)
goto err;
cp->page = cp->csp->page;
} else {
- ACQUIRE_CUR(dbc, DB_LOCK_WRITE, cp->pgno, ret);
+ ACQUIRE_CUR(dbc, DB_LOCK_WRITE, cp->pgno, 0, ret);
if (ret != 0)
goto err;
}
+ /* Mark the page dirty. */
+ if ((ret = __memp_dirty(mpf, &cp->page, dbc->txn, 0)) != 0)
+ goto err;
+
/* Log the change. */
if (DBC_LOGGING(dbc)) {
if ((ret = __bam_cdel_log(dbp, dbc->txn, &LSN(cp->page), 0,
@@ -742,14 +731,12 @@ __bam_c_del(dbc)
else
B_DSET(GET_BKEYDATA(dbp, cp->page, cp->indx)->type);
- /* Mark the page dirty. */
- ret = __memp_fset(mpf, cp->page, DB_MPOOL_DIRTY);
-
err: /*
* If we've been successful so far and the tree has record numbers,
* adjust the record counts. Either way, release acquired page(s).
*/
if (F_ISSET(cp, C_RECNUM)) {
+ cp->csp->page = cp->page;
if (ret == 0)
ret = __bam_adjust(dbc, -1);
(void)__bam_stkrel(dbc, 0);
@@ -760,9 +747,12 @@ err: /*
cp->page = NULL;
- /* Update the cursors last, after all chance of failure is past. */
+ /*
+ * Update the cursors last, after all chance of recoverable failure
+ * is past.
+ */
if (ret == 0)
- (void)__bam_ca_delete(dbp, cp->pgno, cp->indx, 1);
+ ret = __bam_ca_delete(dbp, cp->pgno, cp->indx, 1, &count);
return (ret);
}
@@ -779,22 +769,10 @@ __bam_c_dup(orig_dbc, new_dbc)
DBC *orig_dbc, *new_dbc;
{
BTREE_CURSOR *orig, *new;
- int ret;
orig = (BTREE_CURSOR *)orig_dbc->internal;
new = (BTREE_CURSOR *)new_dbc->internal;
- /*
- * If we're holding a lock we need to acquire a copy of it, unless
- * we're in a transaction. We don't need to copy any lock we're
- * holding inside a transaction because all the locks are retained
- * until the transaction commits or aborts.
- */
- if (orig_dbc->txn == NULL && LOCK_ISSET(orig->lock))
- if ((ret = __db_lget(new_dbc,
- 0, new->pgno, new->lock_mode, 0, &new->lock)) != 0)
- return (ret);
-
new->ovflsize = orig->ovflsize;
new->recno = orig->recno;
new->flags = orig->flags;
@@ -841,12 +819,14 @@ __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(mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn,
+ 0, &cp->page)) != 0)
goto err;
break;
case DB_FIRST:
newopd = 1;
- if ((ret = __bam_c_first(dbc)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, NULL, flags, &exact)) != 0)
goto err;
break;
case DB_GET_BOTH:
@@ -910,13 +890,15 @@ __bam_c_get(dbc, key, data, flags, pgnop)
break;
case DB_LAST:
newopd = 1;
- if ((ret = __bam_c_last(dbc)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, NULL, flags, &exact)) != 0)
goto err;
break;
case DB_NEXT:
newopd = 1;
if (cp->pgno == PGNO_INVALID) {
- if ((ret = __bam_c_first(dbc)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, NULL, DB_FIRST, &exact)) != 0)
goto err;
} else
if ((ret = __bam_c_next(dbc, 1, 0)) != 0)
@@ -933,7 +915,8 @@ __bam_c_get(dbc, key, data, flags, pgnop)
case DB_NEXT_NODUP:
newopd = 1;
if (cp->pgno == PGNO_INVALID) {
- if ((ret = __bam_c_first(dbc)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, NULL, DB_FIRST, &exact)) != 0)
goto err;
} else
do {
@@ -944,7 +927,8 @@ __bam_c_get(dbc, key, data, flags, pgnop)
case DB_PREV:
newopd = 1;
if (cp->pgno == PGNO_INVALID) {
- if ((ret = __bam_c_last(dbc)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, NULL, DB_LAST, &exact)) != 0)
goto err;
} else
if ((ret = __bam_c_prev(dbc)) != 0)
@@ -953,7 +937,8 @@ __bam_c_get(dbc, key, data, flags, pgnop)
case DB_PREV_NODUP:
newopd = 1;
if (cp->pgno == PGNO_INVALID) {
- if ((ret = __bam_c_last(dbc)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, NULL, DB_LAST, &exact)) != 0)
goto err;
} else
do {
@@ -996,17 +981,6 @@ __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 (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: /*
* Regardless of whether we were successful or not, if the cursor
* moved, clear the delete flag, DBcursor->c_get never references
@@ -1411,7 +1385,8 @@ __bam_bulk_overflow(dbc, len, pgno, dp)
F_SET(&dbt, DB_DBT_USERMEM);
dbt.ulen = len;
dbt.data = (void *)dp;
- return (__db_goff(dbc->dbp, &dbt, len, pgno, NULL, NULL));
+ return (__db_goff(dbc->dbp,
+ dbc->txn, &dbt, len, pgno, NULL, NULL));
}
/*
@@ -1627,7 +1602,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(mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn, 0, &cp->page)) != 0)
return (ret);
/*
@@ -1640,7 +1615,8 @@ __bam_getbothc(dbc, data)
* Check to make sure the desired item comes strictly after
* the current position; if it doesn't, return DB_NOTFOUND.
*/
- if ((ret = __bam_cmp(dbp, data, cp->page, cp->indx,
+ if ((ret = __bam_cmp(dbp, dbc->txn,
+ data, cp->page, cp->indx,
dbp->dup_compare == NULL ? __bam_defcmp : dbp->dup_compare,
&cmp)) != 0)
return (ret);
@@ -1708,7 +1684,7 @@ __bam_getboth_finddatum(dbc, data, flags)
if (dbp->dup_compare == NULL) {
for (;; cp->indx += P_INDX) {
if (!IS_CUR_DELETED(dbc) &&
- (ret = __bam_cmp(dbp, data, cp->page,
+ (ret = __bam_cmp(dbp, dbc->txn, data, cp->page,
cp->indx + O_INDX, __bam_defcmp, &cmp)) != 0)
return (ret);
if (cmp == 0)
@@ -1733,7 +1709,7 @@ __bam_getboth_finddatum(dbc, data, flags)
if (!IS_DUPLICATE(dbc, cp->indx, top))
break;
if (base == (top - P_INDX)) {
- if ((ret = __bam_cmp(dbp, data,
+ if ((ret = __bam_cmp(dbp, dbc->txn, data,
cp->page, cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
return (ret);
return (cmp == 0 ||
@@ -1742,7 +1718,7 @@ __bam_getboth_finddatum(dbc, data, flags)
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,
+ if ((ret = __bam_cmp(dbp, dbc->txn, data, cp->page,
cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
return (ret);
if (cmp == 0) {
@@ -1818,12 +1794,14 @@ split: ret = stack = 0;
ACQUIRE_WRITE_LOCK(dbc, ret);
if (ret != 0)
goto err;
- if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn,
+ 0, &cp->page)) != 0)
goto err;
break;
case DB_KEYFIRST:
case DB_KEYLAST:
case DB_NODUPDATA:
+ case DB_NOOVERWRITE:
own = 0;
/*
* Searching off-page, sorted duplicate tree: do a tree search
@@ -1875,12 +1853,22 @@ split: ret = stack = 0;
if (!exact) {
iiop = DB_KEYFIRST;
break;
+
+ /*
+ * Check for NOOVERWRITE. It is possible that there
+ * is a key with an empty duplicate page attached.
+ */
+ } else if (flags == DB_NOOVERWRITE && !IS_CUR_DELETED(dbc)) {
+ if (pgnop != NULL && __bam_isopd(dbc, pgnop))
+ ret = __bam_opd_exists(dbc, *pgnop);
+ else
+ ret = DB_KEYEXIST;
+ if (ret != 0)
+ goto err;
}
/*
* If duplicates aren't supported, replace the current item.
- * (If implementing the DB->put function, our caller already
- * checked the DB_NOOVERWRITE flag.)
*/
if (!F_ISSET(dbp, DB_AM_DUP)) {
iiop = DB_CURRENT;
@@ -1916,7 +1904,7 @@ split: ret = stack = 0;
* on-page duplicates. Walk the list to find the right slot.
*/
for (;; cp->indx += P_INDX) {
- if ((ret = __bam_cmp(dbp, data, cp->page,
+ if ((ret = __bam_cmp(dbp, dbc->txn, data, cp->page,
cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
goto err;
if (cmp < 0) {
@@ -1958,8 +1946,8 @@ split: ret = stack = 0;
if (flags == DB_AFTER ||
flags == DB_BEFORE || flags == DB_CURRENT) {
memset(&dbt, 0, sizeof(DBT));
- if ((ret = __db_ret(dbp, cp->page, 0, &dbt,
- &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
+ if ((ret = __db_ret(dbp, dbc->txn, cp->page, 0,
+ &dbt, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
goto err;
arg = &dbt;
} else
@@ -2084,10 +2072,10 @@ __bam_c_rget(dbc, data)
* Get a copy of the key.
* Release the page, making sure we don't release it twice.
*/
- if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn, 0, &cp->page)) != 0)
return (ret);
memset(&dbt, 0, sizeof(DBT));
- if ((ret = __db_ret(dbp, cp->page,
+ if ((ret = __db_ret(dbp, dbc->txn, cp->page,
cp->indx, &dbt, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
goto err;
ret = __memp_fput(mpf, cp->page, 0);
@@ -2096,7 +2084,7 @@ __bam_c_rget(dbc, data)
return (ret);
if ((ret = __bam_search(dbc, PGNO_INVALID, &dbt,
- F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND,
+ F_ISSET(dbc, DBC_RMW) ? SR_FIND_WR : SR_FIND,
1, &recno, &exact)) != 0)
goto err;
@@ -2137,99 +2125,6 @@ __bam_c_writelock(dbc)
}
/*
- * __bam_c_first --
- * Return the first record.
- */
-static int
-__bam_c_first(dbc)
- DBC *dbc;
-{
- BTREE_CURSOR *cp;
- db_pgno_t pgno;
- int ret;
-
- cp = (BTREE_CURSOR *)dbc->internal;
- ret = 0;
-
- /* Walk down the left-hand side of the tree. */
- for (pgno = cp->root;;) {
- ACQUIRE_CUR_COUPLE(dbc, DB_LOCK_READ, pgno, ret);
- if (ret != 0)
- return (ret);
-
- /* If we find a leaf page, we're done. */
- if (ISLEAF(cp->page))
- break;
-
- pgno = GET_BINTERNAL(dbc->dbp, cp->page, 0)->pgno;
- }
-
- /* If we want a write lock instead of a read lock, get it now. */
- if (F_ISSET(dbc, DBC_RMW)) {
- ACQUIRE_WRITE_LOCK(dbc, ret);
- if (ret != 0)
- 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)) != 0)
- return (ret);
-
- return (0);
-}
-
-/*
- * __bam_c_last --
- * Return the last record.
- */
-static int
-__bam_c_last(dbc)
- DBC *dbc;
-{
- BTREE_CURSOR *cp;
- db_pgno_t pgno;
- int ret;
-
- cp = (BTREE_CURSOR *)dbc->internal;
- ret = 0;
-
- /* Walk down the right-hand side of the tree. */
- for (pgno = cp->root;;) {
- ACQUIRE_CUR_COUPLE(dbc, DB_LOCK_READ, pgno, ret);
- if (ret != 0)
- return (ret);
-
- /* If we find a leaf page, we're done. */
- if (ISLEAF(cp->page))
- break;
-
- 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. */
- if (F_ISSET(dbc, DBC_RMW)) {
- ACQUIRE_WRITE_LOCK(dbc, ret);
- if (ret != 0)
- return (ret);
- }
-
- cp->indx = NUM_ENT(cp->page) == 0 ? 0 :
- NUM_ENT(cp->page) -
- (TYPE(cp->page) == P_LBTREE ? P_INDX : O_INDX);
-
- /* If on an empty page or a deleted record, move to the previous one. */
- if (NUM_ENT(cp->page) == 0 || IS_CUR_DELETED(dbc))
- if ((ret = __bam_c_prev(dbc)) != 0)
- return (ret);
-
- return (0);
-}
-
-/*
* __bam_c_next --
* Move to the next record.
*/
@@ -2263,7 +2158,7 @@ __bam_c_next(dbc, initial_move, deleted_okay)
F_ISSET(dbc, DBC_RMW) ? DB_LOCK_WRITE : DB_LOCK_READ;
}
if (cp->page == NULL) {
- ACQUIRE_CUR(dbc, lock_mode, cp->pgno, ret);
+ ACQUIRE_CUR(dbc, lock_mode, cp->pgno, 0, ret);
if (ret != 0)
return (ret);
}
@@ -2284,7 +2179,7 @@ __bam_c_next(dbc, initial_move, deleted_okay)
= NEXT_PGNO(cp->page)) == PGNO_INVALID)
return (DB_NOTFOUND);
- ACQUIRE_CUR(dbc, lock_mode, pgno, ret);
+ ACQUIRE_CUR(dbc, lock_mode, pgno, 0, ret);
if (ret != 0)
return (ret);
cp->indx = 0;
@@ -2332,7 +2227,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, cp->pgno, ret);
+ ACQUIRE_CUR(dbc, lock_mode, cp->pgno, 0, ret);
if (ret != 0)
return (ret);
}
@@ -2344,7 +2239,7 @@ __bam_c_prev(dbc)
PREV_PGNO(cp->page)) == PGNO_INVALID)
return (DB_NOTFOUND);
- ACQUIRE_CUR(dbc, lock_mode, pgno, ret);
+ ACQUIRE_CUR(dbc, lock_mode, pgno, 0, ret);
if (ret != 0)
return (ret);
@@ -2398,30 +2293,39 @@ __bam_c_search(dbc, root_pgno, key, flags, exactp)
return (ret);
switch (flags) {
+ case DB_FIRST:
+ sflags = (F_ISSET(dbc, DBC_RMW) ? SR_WRITE : SR_READ) | SR_MIN;
+ goto search;
+ case DB_LAST:
+ sflags = (F_ISSET(dbc, DBC_RMW) ? SR_WRITE : SR_READ) | SR_MAX;
+ goto search;
case DB_SET_RECNO:
if ((ret = __ram_getno(dbc, key, &recno, 0)) != 0)
return (ret);
- sflags = (F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND) | S_EXACT;
+ sflags =
+ (F_ISSET(dbc, DBC_RMW) ? SR_FIND_WR : SR_FIND) | SR_EXACT;
if ((ret = __bam_rsearch(dbc, &recno, sflags, 1, exactp)) != 0)
return (ret);
break;
case DB_SET:
case DB_GET_BOTH:
- sflags = (F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND) | S_EXACT;
+ sflags =
+ (F_ISSET(dbc, DBC_RMW) ? SR_FIND_WR : SR_FIND) | SR_EXACT;
goto search;
case DB_GET_BOTH_RANGE:
- sflags = (F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND);
+ sflags = (F_ISSET(dbc, DBC_RMW) ? SR_FIND_WR : SR_FIND);
goto search;
case DB_SET_RANGE:
sflags =
- (F_ISSET(dbc, DBC_RMW) ? S_WRITE : S_READ) | S_DUPFIRST;
+ (F_ISSET(dbc, DBC_RMW) ? SR_WRITE : SR_READ) | SR_DUPFIRST;
goto search;
case DB_KEYFIRST:
- sflags = S_KEYFIRST;
+ case DB_NOOVERWRITE:
+ sflags = SR_KEYFIRST;
goto fast_search;
case DB_KEYLAST:
case DB_NODUPDATA:
- sflags = S_KEYLAST;
+ sflags = SR_KEYLAST;
fast_search: /*
* If the application has a history of inserting into the first
* or last pages of the database, we check those pages first to
@@ -2452,12 +2356,15 @@ fast_search: /*
*
* The page may not exist: if a transaction created the page
* and then aborted, the page might have been truncated from
- * the end of the file.
+ * the end of the file. We don't want to wait on the lock.
+ * The page may not even be relevant to this search.
*/
h = NULL;
- ACQUIRE_CUR(dbc, DB_LOCK_WRITE, bt_lpgno, ret);
+ ACQUIRE_CUR(dbc, DB_LOCK_WRITE, bt_lpgno, DB_LOCK_NOWAIT, ret);
if (ret != 0) {
- if (ret == DB_PAGE_NOTFOUND)
+ if (ret == DB_LOCK_DEADLOCK ||
+ ret == DB_LOCK_NOTGRANTED ||
+ ret == DB_PAGE_NOTFOUND)
ret = 0;
goto fast_miss;
}
@@ -2474,7 +2381,7 @@ fast_search: /*
/* Verify that this page cannot have moved to another db. */
if (F_ISSET(dbp, DB_AM_SUBDB) &&
- log_compare(&t->bt_llsn, &LSN(h)) != 0)
+ LOG_COMPARE(&t->bt_llsn, &LSN(h)) != 0)
goto fast_miss;
/*
* What we do here is test to see if we're at the beginning or
@@ -2486,9 +2393,9 @@ fast_search: /*
*/
if (h->next_pgno == PGNO_INVALID) {
indx = NUM_ENT(h) - P_INDX;
- if ((ret = __bam_cmp(dbp,
+ if ((ret = __bam_cmp(dbp, dbc->txn,
key, h, indx, t->bt_compare, &cmp)) != 0)
- return (ret);
+ goto fast_miss;
if (cmp < 0)
goto try_begin;
@@ -2514,9 +2421,9 @@ fast_search: /*
}
try_begin: if (h->prev_pgno == PGNO_INVALID) {
indx = 0;
- if ((ret = __bam_cmp(dbp,
+ if ((ret = __bam_cmp(dbp, dbc->txn,
key, h, indx, t->bt_compare, &cmp)) != 0)
- return (ret);
+ goto fast_miss;
if (cmp > 0)
goto fast_miss;
@@ -2575,7 +2482,6 @@ search: if ((ret = __bam_search(dbc, root_pgno,
default:
return (__db_unknown_flag(dbp->dbenv, "__bam_c_search", flags));
}
-
/* Initialize the cursor from the stack. */
cp->page = cp->csp->page;
cp->pgno = cp->csp->page->pgno;
@@ -2583,6 +2489,16 @@ search: if ((ret = __bam_search(dbc, root_pgno,
cp->lock = cp->csp->lock;
cp->lock_mode = cp->csp->lock_mode;
+ /* If on an empty page or a deleted record, move to the next one. */
+ if (flags == DB_FIRST &&
+ (NUM_ENT(cp->page) == 0 || IS_CUR_DELETED(dbc)))
+ if ((ret = __bam_c_next(dbc, 0, 0)) != 0)
+ return (ret);
+ if (flags == DB_LAST &&
+ (NUM_ENT(cp->page) == 0 || IS_CUR_DELETED(dbc)))
+ if ((ret = __bam_c_prev(dbc)) != 0)
+ return (ret);
+
return (0);
}
@@ -2597,15 +2513,10 @@ __bam_c_physdel(dbc)
BTREE_CURSOR *cp;
DB *dbp;
DBT key;
- DB_LOCK lock;
- DB_MPOOLFILE *mpf;
- PAGE *h;
- db_pgno_t pgno;
- int delete_page, empty_page, exact, level, ret;
+ int delete_page, empty_page, exact, ret;
dbp = dbc->dbp;
memset(&key, 0, sizeof(DBT));
- mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
delete_page = empty_page = ret = 0;
@@ -2641,10 +2552,11 @@ __bam_c_physdel(dbc)
* 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)
- if ((ret = __db_ret(dbp, cp->page,
+ if (delete_page) {
+ if ((ret = __db_ret(dbp, dbc->txn, cp->page,
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.
@@ -2661,6 +2573,8 @@ __bam_c_physdel(dbc)
* Delete the key item first, otherwise the on-page duplicate checks
* in __bam_ditem() won't work!
*/
+ if ((ret = __memp_dirty(dbp->mpf, &cp->page, dbc->txn, 0)) != 0)
+ return (ret);
if (TYPE(cp->page) == P_LBTREE) {
if ((ret = __bam_ditem(dbc, cp->page, cp->indx)) != 0)
return (ret);
@@ -2679,95 +2593,19 @@ __bam_c_physdel(dbc)
if ((ret = __bam_ca_di(dbc, PGNO(cp->page), cp->indx, -1)) != 0)
return (ret);
- /* If we're not going to try and delete the page, we're done. */
- if (!delete_page)
- return (0);
-
/*
- * Call __bam_search to reacquire the empty leaf page, but this time
- * get both the leaf page and it's parent, locked. Jump back up the
- * tree, until we have the top pair of pages that we want to delete.
- * Once we have the top page that we want to delete locked, lock the
- * underlying pages and check to make sure they're still empty. If
- * they are, delete them.
+ * Need to downgrade write locks here or non-txn locks will get stuck.
*/
- for (level = LEAFLEVEL;; ++level) {
- /* Acquire a page and its parent, locked. */
- if ((ret = __bam_search(dbc, PGNO_INVALID,
- &key, S_WRPAIR, level, NULL, &exact)) != 0)
+ if (F_ISSET(dbc->dbp, DB_AM_READ_UNCOMMITTED)) {
+ if ((ret = __TLPUT(dbc, cp->lock)) != 0)
return (ret);
-
- /*
- * If we reach the root or the parent page isn't going to be
- * empty when we delete one record, stop.
- */
- h = cp->csp[-1].page;
- if (h->pgno == cp->root || NUM_ENT(h) != 1)
- break;
-
- /* Discard the stack, retaining no locks. */
- (void)__bam_stkrel(dbc, STK_NOLOCK);
- }
-
- /*
- * Move the stack pointer one after the last entry, we may be about
- * to push more items onto the page stack.
- */
- ++cp->csp;
-
- /*
- * cp->csp[-2].page is now the parent page, which we may or may not be
- * going to delete, and cp->csp[-1].page is the first page we know we
- * are going to delete. Walk down the chain of pages, acquiring pages
- * until we've acquired a leaf page. Generally, this shouldn't happen;
- * we should only see a single internal page with one item and a single
- * leaf page with no items. The scenario where we could see something
- * else is if reverse splits were turned off for awhile and then turned
- * back on. That could result in all sorts of strangeness, e.g., empty
- * pages in the tree, trees that looked like linked lists, and so on.
- *
- * !!!
- * Sheer paranoia: if we find any pages that aren't going to be emptied
- * by the delete, someone else added an item while we were walking the
- * tree, and we discontinue the delete. Shouldn't be possible, but we
- * check regardless.
- */
- for (h = cp->csp[-1].page;;) {
- if (ISLEAF(h)) {
- if (NUM_ENT(h) != 0)
- break;
- break;
- } else
- if (NUM_ENT(h) != 1)
- break;
-
- /*
- * Get the next page, write lock it and push it onto the stack.
- * We know it's index 0, because it can only have one element.
- */
- switch (TYPE(h)) {
- case P_IBTREE:
- pgno = GET_BINTERNAL(dbp, h, 0)->pgno;
- break;
- case P_IRECNO:
- pgno = GET_RINTERNAL(dbp, h, 0)->pgno;
- break;
- default:
- 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(mpf, &pgno, 0, &h)) != 0)
- break;
- BT_STK_PUSH(dbp->dbenv, cp, h, 0, lock, DB_LOCK_WRITE, ret);
- if (ret != 0)
- break;
+ cp->lock_mode = DB_LOCK_WWRITE;
}
+ /* If we're not going to try and delete the page, we're done. */
+ if (!delete_page)
+ return (0);
- /* Adjust the cursor stack to reference the last page on the stack. */
- BT_STK_POP(cp);
+ ret = __bam_search(dbc, PGNO_INVALID, &key, SR_DEL, 0, NULL, &exact);
/*
* If everything worked, delete the stack, otherwise, release the
@@ -2776,7 +2614,7 @@ __bam_c_physdel(dbc)
if (ret == 0)
DISCARD_CUR(dbc, ret);
if (ret == 0)
- ret = __bam_dpages(dbc, cp->sp);
+ ret = __bam_dpages(dbc, 1, 0);
else
(void)__bam_stkrel(dbc, 0);
@@ -2807,19 +2645,19 @@ __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(mpf, &cp->pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, dbc->txn, 0, &h)) != 0)
return (ret);
/* Get a copy of a key from the page. */
memset(&dbt, 0, sizeof(DBT));
- if ((ret = __db_ret(dbp,
+ if ((ret = __db_ret(dbp, dbc->txn,
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, PGNO_INVALID,
- &dbt, S_KEYFIRST, 1, NULL, &exact);
+ &dbt, SR_KEYFIRST, 1, NULL, &exact);
err: /* Discard the key and the page. */
if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
@@ -2851,3 +2689,34 @@ __bam_isopd(dbc, pgnop)
}
return (0);
}
+
+/*
+ * __bam_opd_exists --
+ * Return if the current position has any data.
+ * PUBLIC: int __bam_opd_exists __P((DBC *, db_pgno_t));
+ */
+int
+__bam_opd_exists(dbc, pgno)
+ DBC *dbc;
+ db_pgno_t pgno;
+{
+ PAGE *h;
+ int ret;
+
+ if ((ret = __memp_fget(dbc->dbp->mpf, &pgno, dbc->txn, 0, &h)) != 0)
+ return (ret);
+
+ /*
+ * We always collapse OPD trees so we only need to check
+ * the number of entries on the root. If there is a non-empty
+ * tree then there will be duplicates.
+ */
+ if (NUM_ENT(h) == 0)
+ ret = 0;
+ else
+ ret = DB_KEYEXIST;
+
+ (void)__memp_fput(dbc->dbp->mpf, h, 0);
+
+ return (ret);
+}
diff --git a/db/btree/bt_delete.c b/db/btree/bt_delete.c
index 018c8ef49..04efaafa2 100644
--- a/db/btree/bt_delete.c
+++ b/db/btree/bt_delete.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,20 +39,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_delete.c,v 11.49 2004/02/27 12:38:28 bostic Exp $
+ * $Id: bt_delete.c,v 12.21 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -72,15 +65,16 @@ __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);
+ /* The page should already have been dirtied by our caller. */
+ DB_ASSERT(dbp->dbenv, IS_DIRTY(h));
+
switch (TYPE(h)) {
case P_IBTREE:
bi = GET_BINTERNAL(dbp, h, indx);
@@ -160,8 +154,6 @@ __bam_ditem(dbc, h, indx)
/* Delete the item and mark the page dirty. */
if ((ret = __db_ditem(dbc, h, indx, nbytes)) != 0)
return (ret);
- if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
- return (ret);
return (0);
}
@@ -180,12 +172,10 @@ __bam_adjindx(dbc, h, indx, indx_copy, is_insert)
int is_insert;
{
DB *dbp;
- DB_MPOOLFILE *mpf;
db_indx_t copy, *inp;
int ret;
dbp = dbc->dbp;
- mpf = dbp->mpf;
inp = P_INP(dbp, h);
/* Log the change. */
@@ -210,8 +200,6 @@ __bam_adjindx(dbc, h, indx, indx_copy, is_insert)
memmove(&inp[indx], &inp[indx + O_INDX],
sizeof(db_indx_t) * (NUM_ENT(h) - indx));
}
- if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
- return (ret);
return (0);
}
@@ -220,20 +208,21 @@ __bam_adjindx(dbc, h, indx, indx_copy, is_insert)
* __bam_dpages --
* Delete a set of locked pages.
*
- * PUBLIC: int __bam_dpages __P((DBC *, EPG *));
+ * PUBLIC: int __bam_dpages __P((DBC *, int, int));
*/
int
-__bam_dpages(dbc, stack_epg)
+__bam_dpages(dbc, use_top, update)
DBC *dbc;
- EPG *stack_epg;
+ int use_top;
+ int update;
{
- BTREE_CURSOR *cp;
BINTERNAL *bi;
+ BTREE_CURSOR *cp;
DB *dbp;
DBT a, b;
DB_LOCK c_lock, p_lock;
DB_MPOOLFILE *mpf;
- EPG *epg;
+ EPG *epg, *save_sp, *stack_epg;
PAGE *child, *parent;
db_indx_t nitems;
db_pgno_t pgno, root_pgno;
@@ -243,30 +232,27 @@ __bam_dpages(dbc, stack_epg)
dbp = dbc->dbp;
mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
+ nitems = 0;
+ pgno = PGNO_INVALID;
/*
* We have the entire stack of deletable pages locked.
*
- * Btree calls us with a pointer to the beginning of a stack, where
- * the first page in the stack is to have a single item deleted, and
- * the rest of the pages are to be removed.
+ * Btree calls us with the first page in the stack is to have a
+ * single item deleted, and the rest of the pages are to be removed.
*
- * Recno calls us with a pointer into the middle of the stack, where
- * the referenced page is to have a single item deleted, and pages
- * after the stack reference are to be removed.
- *
- * First, discard any pages that we don't care about.
+ * Recno always has a stack to the root and __bam_merge operations
+ * may have unneeded items in the sack. We find the lowest page
+ * in the stack that has more than one record in it and start there.
*/
ret = 0;
- for (epg = cp->sp; epg < stack_epg; ++epg) {
- if ((t_ret = __memp_fput(mpf, epg->page, 0)) != 0 && ret == 0)
- ret = t_ret;
- if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
- ret = t_ret;
- }
- if (ret != 0)
- goto err;
-
+ if (use_top)
+ stack_epg = cp->sp;
+ else
+ for (stack_epg = cp->csp; stack_epg > cp->sp; --stack_epg)
+ if (NUM_ENT(stack_epg->page) > 1)
+ break;
+ epg = stack_epg;
/*
* !!!
* There is an interesting deadlock situation here. We have to relink
@@ -276,8 +262,9 @@ __bam_dpages(dbc, stack_epg)
* It will deadlock here. Before we unlink the subtree, we relink the
* leaf page chain.
*/
- if ((ret = __bam_relink(dbc, cp->csp->page, NULL)) != 0)
- goto err;
+ if (LEVEL(cp->csp->page) == 1 &&
+ (ret = __bam_relink(dbc, cp->csp->page, PGNO_INVALID)) != 0)
+ goto discard;
/*
* Delete the last item that references the underlying pages that are
@@ -287,10 +274,21 @@ __bam_dpages(dbc, stack_epg)
* transactions, this lets the rest of the tree get back to business
* immediately.
*/
+ if ((ret = __memp_dirty(mpf, &epg->page, dbc->txn, 0)) != 0)
+ goto discard;
if ((ret = __bam_ditem(dbc, epg->page, epg->indx)) != 0)
- goto err;
+ goto discard;
if ((ret = __bam_ca_di(dbc, PGNO(epg->page), epg->indx, -1)) != 0)
- goto err;
+ goto discard;
+
+ if (update && epg->indx == 0) {
+ save_sp = cp->csp;
+ cp->csp = epg;
+ ret = __bam_pupdate(dbc, epg->page);
+ cp->csp = save_sp;
+ if (ret != 0)
+ goto discard;
+ }
pgno = PGNO(epg->page);
nitems = NUM_ENT(epg->page);
@@ -301,8 +299,21 @@ __bam_dpages(dbc, stack_epg)
if (ret != 0)
goto err_inc;
+ /* Then, discard any pages that we don't care about. */
+discard: for (epg = cp->sp; epg < stack_epg; ++epg) {
+ if ((t_ret = __memp_fput(mpf, epg->page, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ epg->page = NULL;
+ if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+ if (ret != 0)
+ goto err;
+
/* Free the rest of the pages in the stack. */
while (++epg <= cp->csp) {
+ if ((ret = __memp_dirty(mpf, &epg->page, dbc->txn, 0)) != 0)
+ goto err;
/*
* Delete page entries so they will be restored as part of
* recovery. We don't need to do cursor adjustment here as
@@ -310,13 +321,24 @@ __bam_dpages(dbc, stack_epg)
* be referenced by a cursor.
*/
if (NUM_ENT(epg->page) != 0) {
- DB_ASSERT(NUM_ENT(epg->page) == 1);
+ DB_ASSERT(dbp->dbenv, LEVEL(epg->page) != 1);
if ((ret = __bam_ditem(dbc, epg->page, epg->indx)) != 0)
goto err;
+ /*
+ * Sheer paranoia: if we find any pages that aren't
+ * emptied by the delete, someone else added an item
+ * while we were walking the tree, and we discontinue
+ * the delete. Shouldn't be possible, but we check
+ * regardless.
+ */
+ if (NUM_ENT(epg->page) != 0)
+ goto err;
}
ret = __db_free(dbc, epg->page);
+ if (cp->page == epg->page)
+ cp->page = NULL;
epg->page = NULL;
if ((t_ret = __TLPUT(dbc, epg->lock)) != 0 && ret == 0)
ret = t_ret;
@@ -357,7 +379,8 @@ err: for (; epg <= cp->csp; ++epg) {
if ((ret =
__db_lget(dbc, 0, pgno, DB_LOCK_WRITE, 0, &p_lock)) != 0)
goto stop;
- if ((ret = __memp_fget(mpf, &pgno, 0, &parent)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &parent)) != 0)
goto stop;
if (NUM_ENT(parent) != 1)
@@ -387,7 +410,8 @@ 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(mpf, &pgno, 0, &child)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &child)) != 0)
goto stop;
/* Log the change. */
@@ -425,12 +449,6 @@ err: for (; epg <= cp->csp; ++epg) {
if (F_ISSET(cp, C_RECNUM) && LEVEL(child) > LEAFLEVEL)
RE_NREC_SET(parent, rcnt);
- /* Mark the pages dirty. */
- if ((ret = __memp_fset(mpf, parent, DB_MPOOL_DIRTY)) != 0)
- goto stop;
- if ((ret = __memp_fset(mpf, child, DB_MPOOL_DIRTY)) != 0)
- goto stop;
-
/* Adjust the cursors. */
if ((ret = __bam_ca_rsplit(dbc, PGNO(child), root_pgno)) != 0)
goto stop;
@@ -468,12 +486,13 @@ stop: done = 1;
* __bam_relink --
* Relink around a deleted page.
*
- * PUBLIC: int __bam_relink __P((DBC *, PAGE *, PAGE **));
+ * PUBLIC: int __bam_relink __P((DBC *, PAGE *, db_pgno_t));
*/
int
-__bam_relink(dbc, pagep, new_next)
+__bam_relink(dbc, pagep, new_pgno)
DBC *dbc;
- PAGE *pagep, **new_next;
+ PAGE *pagep;
+ db_pgno_t new_pgno;
{
DB *dbp;
PAGE *np, *pp;
@@ -499,7 +518,8 @@ __bam_relink(dbc, pagep, new_next)
if ((ret = __db_lget(dbc,
0, pagep->next_pgno, DB_LOCK_WRITE, 0, &npl)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &pagep->next_pgno, 0, &np)) != 0) {
+ if ((ret = __memp_fget(mpf, &pagep->next_pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &np)) != 0) {
ret = __db_pgerr(dbp, pagep->next_pgno, ret);
goto err;
}
@@ -509,7 +529,8 @@ __bam_relink(dbc, pagep, new_next)
if ((ret = __db_lget(dbc,
0, pagep->prev_pgno, DB_LOCK_WRITE, 0, &ppl)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &pagep->prev_pgno, 0, &pp)) != 0) {
+ if ((ret = __memp_fget(mpf, &pagep->prev_pgno,
+ dbc->txn, DB_MPOOL_DIRTY, &pp)) != 0) {
ret = __db_pgerr(dbp, pagep->prev_pgno, ret);
goto err;
}
@@ -519,7 +540,7 @@ __bam_relink(dbc, pagep, new_next)
/* Log the change. */
if (DBC_LOGGING(dbc)) {
if ((ret = __bam_relink_log(dbp, dbc->txn, &ret_lsn, 0,
- pagep->pgno, &pagep->lsn, pagep->prev_pgno, plsnp,
+ pagep->pgno, new_pgno, pagep->prev_pgno, plsnp,
pagep->next_pgno, nlsnp)) != 0)
goto err;
} else
@@ -528,34 +549,28 @@ __bam_relink(dbc, pagep, new_next)
np->lsn = ret_lsn;
if (pp != NULL)
pp->lsn = ret_lsn;
- pagep->lsn = ret_lsn;
/*
* Modify and release the two pages.
- *
- * !!!
- * The parameter new_next gets set to the page following the page we
- * are removing. If there is no following page, then new_next gets
- * set to NULL.
*/
if (np != NULL) {
- np->prev_pgno = pagep->prev_pgno;
- if (new_next == NULL)
- ret = __memp_fput(mpf, np, DB_MPOOL_DIRTY);
- else {
- *new_next = np;
- ret = __memp_fset(mpf, np, DB_MPOOL_DIRTY);
- }
+ if (new_pgno == PGNO_INVALID)
+ np->prev_pgno = pagep->prev_pgno;
+ else
+ np->prev_pgno = new_pgno;
+ ret = __memp_fput(mpf, np, 0);
if ((t_ret = __TLPUT(dbc, npl)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
goto err;
- } else if (new_next != NULL)
- *new_next = NULL;
+ }
if (pp != NULL) {
- pp->next_pgno = pagep->next_pgno;
- ret = __memp_fput(mpf, pp, DB_MPOOL_DIRTY);
+ if (new_pgno == PGNO_INVALID)
+ pp->next_pgno = pagep->next_pgno;
+ else
+ pp->next_pgno = new_pgno;
+ ret = __memp_fput(mpf, pp, 0);
if ((t_ret = __TLPUT(dbc, ppl)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
@@ -571,3 +586,51 @@ err: if (np != NULL)
(void)__TLPUT(dbc, ppl);
return (ret);
}
+
+/*
+ * __bam_pupdate --
+ * Update parent key pointers up the tree.
+ *
+ * PUBLIC: int __bam_pupdate __P((DBC *, PAGE *));
+ */
+int
+__bam_pupdate(dbc, lpg)
+ DBC *dbc;
+ PAGE *lpg;
+{
+ BTREE_CURSOR *cp;
+ DB_ENV *dbenv;
+ EPG *epg;
+ int ret;
+
+ dbenv = dbc->dbp->dbenv;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ ret = 0;
+
+ /*
+ * Update the parents up the tree. __bam_pinsert only looks at the
+ * left child if is a leaf page, so we don't need to change it. We
+ * just do a delete and insert; a replace is possible but reusing
+ * pinsert is better.
+ */
+ for (epg = &cp->csp[-1]; epg >= cp->sp; epg--) {
+ if ((ret = __memp_dirty(dbc->dbp->mpf,
+ &epg->page, dbc->txn, 0)) != 0)
+ return (ret);
+ if ((ret = __bam_ditem(dbc, epg->page, epg->indx)) != 0)
+ return (ret);
+ epg->indx--;
+ if ((ret = __bam_pinsert(dbc, epg,
+ lpg, epg[1].page, BPI_NORECNUM)) != 0) {
+ if (ret == DB_NEEDSPLIT) {
+ /* This should not happen. */
+ __db_errx(dbenv,
+ "Not enough room in parent: %s: page %lu",
+ dbc->dbp->fname, (u_long)PGNO(epg->page));
+ ret = __db_panic(dbenv, EINVAL);
+ }
+ return (ret);
+ }
+ }
+ return (ret);
+}
diff --git a/db/btree/bt_method.c b/db/btree/bt_method.c
index 0b67da91e..ba71116e0 100644
--- a/db/btree/bt_method.c
+++ b/db/btree/bt_method.c
@@ -1,24 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_method.c,v 11.38 2004/09/22 03:31:26 bostic Exp $
+ * $Id: bt_method.c,v 12.6 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
#include "dbinc/qam.h"
-static int __bam_set_bt_maxkey __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 *)));
@@ -52,7 +47,6 @@ __bam_db_create(dbp)
t->bt_prefix = __bam_defpfx;
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;
@@ -209,31 +203,6 @@ __bam_set_bt_compare(dbp, func)
}
/*
- * __bam_set_bt_maxkey --
- * Set the maximum keys per page.
- */
-static int
-__bam_set_bt_maxkey(dbp, bt_maxkey)
- DB *dbp;
- u_int32_t bt_maxkey;
-{
- BTREE *t;
-
- DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_maxkey");
- DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
-
- t = dbp->bt_internal;
-
- if (bt_maxkey < 1) {
- __db_err(dbp->dbenv, "minimum bt_maxkey value is 1");
- return (EINVAL);
- }
-
- t->bt_maxkey = bt_maxkey;
- return (0);
-}
-
-/*
* __db_get_bt_minkey --
* Get the minimum keys per page.
*
@@ -270,7 +239,7 @@ __bam_set_bt_minkey(dbp, bt_minkey)
t = dbp->bt_internal;
if (bt_minkey < 2) {
- __db_err(dbp->dbenv, "minimum bt_minkey value is 2");
+ __db_errx(dbp->dbenv, "minimum bt_minkey value is 2");
return (EINVAL);
}
diff --git a/db/btree/bt_open.c b/db/btree/bt_open.c
index e890c5dd7..916223258 100644
--- a/db/btree/bt_open.c
+++ b/db/btree/bt_open.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,23 +39,16 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_open.c,v 11.92 2004/04/29 14:39:47 ubell Exp $
+ * $Id: bt_open.c,v 12.12 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.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"
@@ -89,7 +82,7 @@ __bam_open(dbp, txn, name, base_pgno, flags)
* comparison routine to get it right.
*/
if (t->bt_compare == __bam_defcmp && t->bt_prefix != __bam_defpfx) {
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"prefix comparison may not be specified for default comparison routine");
return (EINVAL);
}
@@ -100,7 +93,7 @@ __bam_open(dbp, txn, name, base_pgno, flags)
*/
if (B_MINKEY_TO_OVFLSIZE(dbp, t->bt_minkey, dbp->pgsize) >
B_MINKEY_TO_OVFLSIZE(dbp, DEFMINKEYPAGE, dbp->pgsize)) {
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"bt_minkey value of %lu too high for page size of %lu",
(u_long)t->bt_minkey, (u_long)dbp->pgsize);
return (EINVAL);
@@ -137,7 +130,7 @@ __bam_metachk(dbp, name, btm)
switch (vers) {
case 6:
case 7:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: btree version %lu requires a version upgrade",
name, (u_long)vers);
return (DB_OLD_VERSION);
@@ -145,7 +138,7 @@ __bam_metachk(dbp, name, btm)
case 9:
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: unsupported btree version: %lu", name, (u_long)vers);
return (EINVAL);
}
@@ -178,7 +171,7 @@ __bam_metachk(dbp, name, btm)
F_SET(dbp, DB_AM_DUP);
else
if (F_ISSET(dbp, DB_AM_DUP)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: DB_DUP specified to open method but not set in database",
name);
return (EINVAL);
@@ -194,7 +187,7 @@ __bam_metachk(dbp, name, btm)
return (ret);
} else
if (F_ISSET(dbp, DB_AM_RECNUM)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: DB_RECNUM specified to open method but not set in database",
name);
return (EINVAL);
@@ -206,7 +199,7 @@ __bam_metachk(dbp, name, btm)
F_SET(dbp, DB_AM_FIXEDLEN);
} else
if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: DB_FIXEDLEN specified to open method but not set in database",
name);
return (EINVAL);
@@ -218,7 +211,7 @@ __bam_metachk(dbp, name, btm)
F_SET(dbp, DB_AM_RENUMBER);
} else
if (F_ISSET(dbp, DB_AM_RENUMBER)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: DB_RENUMBER specified to open method but not set in database",
name);
return (EINVAL);
@@ -228,7 +221,7 @@ __bam_metachk(dbp, name, btm)
F_SET(dbp, DB_AM_SUBDB);
else
if (F_ISSET(dbp, DB_AM_SUBDB)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: multiple databases specified but not supported by file",
name);
return (EINVAL);
@@ -240,7 +233,7 @@ __bam_metachk(dbp, name, btm)
F_SET(dbp, DB_AM_DUPSORT);
} else
if (dbp->dup_compare != NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: duplicate sort specified but not supported in database",
name);
return (EINVAL);
@@ -256,10 +249,10 @@ __bam_metachk(dbp, name, btm)
wrong_type:
if (dbp->type == DB_BTREE)
- __db_err(dbenv,
+ __db_errx(dbenv,
"open method type is Btree, database type is Recno");
else
- __db_err(dbenv,
+ __db_errx(dbenv,
"open method type is Recno, database type is Btree");
return (EINVAL);
}
@@ -285,6 +278,7 @@ __bam_read_root(dbp, txn, base_pgno, flags)
int ret, t_ret;
COMPQUIET(flags, 0);
+
meta = NULL;
t = dbp->bt_internal;
LOCK_INIT(metalock);
@@ -299,7 +293,7 @@ __bam_read_root(dbp, txn, base_pgno, flags)
if ((ret =
__db_lget(dbc, 0, base_pgno, DB_LOCK_READ, 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &base_pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &base_pgno, dbc->txn, 0, &meta)) != 0)
goto err;
/*
@@ -311,7 +305,6 @@ __bam_read_root(dbp, txn, base_pgno, flags)
* metadata page will be created/initialized elsewhere.
*/
if (meta->dbmeta.magic == DB_BTREEMAGIC) {
- t->bt_maxkey = meta->maxkey;
t->bt_minkey = meta->minkey;
t->re_pad = (int)meta->re_pad;
t->re_len = meta->re_len;
@@ -319,8 +312,8 @@ __bam_read_root(dbp, txn, base_pgno, flags)
t->bt_meta = base_pgno;
t->bt_root = meta->root;
} else {
- DB_ASSERT(IS_RECOVERING(dbp->dbenv) ||
- F_ISSET(dbp, DB_AM_RECOVER));
+ DB_ASSERT(dbp->dbenv,
+ IS_RECOVERING(dbp->dbenv) || F_ISSET(dbp, DB_AM_RECOVER));
}
/*
@@ -359,8 +352,12 @@ __bam_init_meta(dbp, meta, pgno, lsnp)
db_pgno_t pgno;
DB_LSN *lsnp;
{
+ DB_ENV *dbenv;
BTREE *t;
+ dbenv = dbp->dbenv;
+ t = dbp->bt_internal;
+
memset(meta, 0, sizeof(BTMETA));
meta->dbmeta.lsn = *lsnp;
meta->dbmeta.pgno = pgno;
@@ -371,8 +368,8 @@ __bam_init_meta(dbp, meta, pgno, lsnp)
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);
+ ((DB_CIPHER *)dbenv->crypto_handle)->alg;
+ DB_ASSERT(dbenv, meta->dbmeta.encrypt_alg != 0);
meta->crypto_magic = meta->dbmeta.magic;
}
meta->dbmeta.type = P_BTREEMETA;
@@ -394,8 +391,6 @@ __bam_init_meta(dbp, meta, pgno, lsnp)
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 = (u_int32_t)t->re_pad;
@@ -428,7 +423,7 @@ __bam_new_file(dbp, txn, fhp, name)
DBT pdbt;
PAGE *root;
db_pgno_t pgno;
- int ret;
+ int ret, t_ret;
void *buf;
dbenv = dbp->dbenv;
@@ -437,30 +432,36 @@ __bam_new_file(dbp, txn, fhp, name)
meta = NULL;
buf = NULL;
- if (name == NULL) {
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
/* Build the meta-data page. */
pgno = PGNO_BASE_MD;
- if ((ret =
- __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &meta)) != 0)
return (ret);
LSN_NOT_LOGGED(lsn);
__bam_init_meta(dbp, meta, PGNO_BASE_MD, &lsn);
meta->root = 1;
meta->dbmeta.last_pgno = 1;
- ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ if ((ret =
+ __db_log_page(dbp, txn, &lsn, pgno, (PAGE *)meta)) != 0)
+ goto err;
+ ret = __memp_fput(mpf, meta, 0);
meta = NULL;
if (ret != 0)
goto err;
/* Build the root page. */
pgno = 1;
- if ((ret =
- __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &root)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno,
+ txn, DB_MPOOL_CREATE, &root)) != 0)
goto err;
P_INIT(root, dbp->pgsize, 1, PGNO_INVALID, PGNO_INVALID,
LEAFLEVEL, dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE);
LSN_NOT_LOGGED(root->lsn);
- ret = __memp_fput(mpf, root, DB_MPOOL_DIRTY);
+ if ((ret =
+ __db_log_page(dbp, txn, &root->lsn, pgno, root)) != 0)
+ goto err;
+ ret = __memp_fput(mpf, root, 0);
root = NULL;
if (ret != 0)
goto err;
@@ -509,10 +510,12 @@ __bam_new_file(dbp, txn, fhp, name)
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);
+ if (meta != NULL &&
+ (t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (root != NULL &&
+ (t_ret = __memp_fput(mpf, root, 0)) != 0 && ret == 0)
+ ret = t_ret;
}
return (ret);
}
@@ -551,8 +554,8 @@ __bam_new_subdb(mdbp, dbp, txn)
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)
+ if ((ret = __memp_fget(mpf, &dbp->meta_pgno,
+ txn, DB_MPOOL_CREATE, &meta)) != 0)
goto err;
/* Build meta-data page. */
@@ -579,10 +582,10 @@ __bam_new_subdb(mdbp, dbp, txn)
goto err;
/* Release the metadata and root pages. */
- if ((ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
meta = NULL;
- if ((ret = __memp_fput(mpf, root, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, root, 0)) != 0)
goto err;
root = NULL;
err:
diff --git a/db/btree/bt_put.c b/db/btree/bt_put.c
index 128b16a82..6665341e2 100644
--- a/db/btree/bt_put.c
+++ b/db/btree/bt_put.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,26 +39,21 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_put.c,v 11.80 2004/10/29 17:33:25 ubell Exp $
+ * $Id: bt_put.c,v 12.21 2006/09/06 20:37:00 ubell Exp $
*/
#include "db_config.h"
-#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/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_dup_check __P((DBC *, u_int32_t,
+ PAGE *, u_int32_t, u_int32_t, db_indx_t *));
+static int __bam_dup_convert __P((DBC *, PAGE *, u_int32_t, u_int32_t));
static int __bam_ovput
__P((DBC *, u_int32_t, db_pgno_t, PAGE *, u_int32_t, DBT *));
static u_int32_t
@@ -84,11 +79,13 @@ __bam_iitem(dbc, key, data, op, flags)
DBT bk_hdr, tdbt;
DB_MPOOLFILE *mpf;
PAGE *h;
- db_indx_t indx;
- u_int32_t data_size, have_bytes, need_bytes, needed;
- int cmp, bigkey, bigdata, dupadjust, padrec, replace, ret, was_deleted;
+ db_indx_t cnt, indx;
+ u_int32_t data_size, have_bytes, need_bytes, needed, pages, pagespace;
+ int cmp, bigkey, bigdata, del, dupadjust;
+ int padrec, replace, ret, t_ret, was_deleted;
COMPQUIET(bk, NULL);
+ COMPQUIET(cnt, 0);
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -97,7 +94,7 @@ __bam_iitem(dbc, key, data, op, flags)
t = dbp->bt_internal;
h = cp->page;
indx = cp->indx;
- dupadjust = replace = was_deleted = 0;
+ del = dupadjust = replace = was_deleted = 0;
/*
* Fixed-length records with partial puts: it's an error to specify
@@ -149,12 +146,12 @@ __bam_iitem(dbc, key, data, op, flags)
* we build the real record so that we're comparing the real items.
*/
if (op == DB_CURRENT && dbp->dup_compare != NULL) {
- if ((ret = __bam_cmp(dbp, data, h,
+ if ((ret = __bam_cmp(dbp, dbc->txn, data, h,
indx + (TYPE(h) == P_LBTREE ? O_INDX : 0),
dbp->dup_compare, &cmp)) != 0)
return (ret);
if (cmp != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Existing data sorts differently from put data");
return (EINVAL);
}
@@ -217,14 +214,53 @@ __bam_iitem(dbc, key, data, op, flags)
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.
- */
+ /* Split the page if there's not enough room. */
if (P_FREESPACE(dbp, h) < needed)
return (DB_NEEDSPLIT);
/*
+ * Check to see if we will convert to off page duplicates -- if
+ * so, we'll need a page.
+ */
+ if (F_ISSET(dbp, DB_AM_DUP) &&
+ TYPE(h) == P_LBTREE && op != DB_KEYFIRST &&
+ P_FREESPACE(dbp, h) - needed <= dbp->pgsize / 2 &&
+ __bam_dup_check(dbc, op, h, indx, needed, &cnt)) {
+ pages = 1;
+ dupadjust = 1;
+ } else
+ pages = 0;
+
+ /*
+ * If we are not using transactions and there is a page limit
+ * set on the file, then figure out if things will fit before
+ * taking action.
+ */
+ if (dbc->txn == NULL && mpf->mfp->maxpgno != 0) {
+ pagespace = P_MAXSPACE(dbp, dbp->pgsize);
+ if (bigdata)
+ pages += ((data_size - 1) / pagespace) + 1;
+ if (bigkey)
+ pages += ((key->size - 1) / pagespace) + 1;
+
+ if (pages > (mpf->mfp->maxpgno - mpf->mfp->last_pgno))
+ return (__db_space_err(dbp));
+ }
+
+ if ((ret = __memp_dirty(mpf, &h, dbc->txn, 0)) != 0)
+ return (ret);
+ if (cp->csp->page == cp->page)
+ cp->csp->page = h;
+ cp->page = h;
+
+ /*
+ * Recalculate this pointer -- the page pointer (h) may have
+ * changed during the update.
+ */
+ bk = GET_BKEYDATA(dbp, h,
+ indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
+
+ /*
* The code breaks it up into five cases:
*
* 1. Insert a new key/data pair.
@@ -259,7 +295,6 @@ __bam_iitem(dbc, key, data, op, flags)
return (ret);
indx += 3;
- dupadjust = 1;
cp->indx += 2;
} else {
@@ -276,7 +311,6 @@ __bam_iitem(dbc, key, data, op, flags)
return (ret);
++indx;
- dupadjust = 1;
}
break;
case DB_CURRENT:
@@ -287,11 +321,11 @@ __bam_iitem(dbc, key, data, op, flags)
* will try and remove the item because the cursor's delete
* flag is set.
*/
- (void)__bam_ca_delete(dbp, PGNO(h), indx, 0);
+ if ((ret = __bam_ca_delete(dbp, PGNO(h), indx, 0, NULL)) != 0)
+ return (ret);
if (TYPE(h) == P_LBTREE) {
++indx;
- dupadjust = 1;
}
/*
@@ -316,6 +350,7 @@ __bam_iitem(dbc, key, data, op, flags)
if (bigdata || B_TYPE(bk->type) != B_KEYDATA) {
if ((ret = __bam_ditem(dbc, h, indx)) != 0)
return (ret);
+ del = 1;
break;
}
@@ -332,13 +367,12 @@ __bam_iitem(dbc, key, data, op, flags)
* 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);
+ DB_ASSERT(dbenv, !LF_ISSET(BI_DELETED));
+ ret = __bam_ovput(dbc,
+ B_OVERFLOW, PGNO_INVALID, h, indx, data);
} else {
if (LF_ISSET(BI_DELETED)) {
- B_TSET(bk_tmp.type, B_KEYDATA, 1);
+ B_TSET_DELETED(bk_tmp.type, B_KEYDATA);
bk_tmp.len = data->size;
bk_hdr.data = &bk_tmp;
bk_hdr.size = SSZA(BKEYDATA, data);
@@ -349,11 +383,16 @@ __bam_iitem(dbc, key, data, op, flags)
else
ret = __db_pitem(dbc, h, indx,
BKEYDATA_SIZE(data->size), NULL, data);
- if (ret != 0)
- return (ret);
}
- if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if (ret != 0) {
+ if (del == 1 && (t_ret =
+ __bam_ca_di(dbc, PGNO(h), indx + 1, -1)) != 0) {
+ __db_err(dbenv, t_ret,
+ "cursor adjustment after delete failed");
+ return (__db_panic(dbenv, t_ret));
+ }
return (ret);
+ }
/*
* Re-position the cursors if necessary and reset the current cursor
@@ -380,10 +419,9 @@ __bam_iitem(dbc, key, data, op, flags)
* up at least 25% of the space on the page. If it does, move it onto
* its own page.
*/
- if (dupadjust && P_FREESPACE(dbp, h) <= dbp->pgsize / 2) {
- if ((ret = __bam_dup_convert(dbc, h, indx - O_INDX)) != 0)
- return (ret);
- }
+ if (dupadjust &&
+ (ret = __bam_dup_convert(dbc, h, indx - O_INDX, cnt)) != 0)
+ return (ret);
/* If we've modified a recno file, set the flag. */
if (dbc->dbtype == DB_RECNO)
@@ -490,7 +528,7 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
bo = (BOVERFLOW *)bk;
} else {
bk = &tbk;
- B_TSET(bk->type, B_KEYDATA, 0);
+ B_TSET(bk->type, B_KEYDATA);
bk->len = 0;
}
if (B_TYPE(bk->type) == B_OVERFLOW) {
@@ -499,7 +537,7 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
* in the current record rather than allocate a separate copy.
*/
memset(&copy, 0, sizeof(copy));
- if ((ret = __db_goff(dbp, &copy, bo->tlen,
+ if ((ret = __db_goff(dbp, dbc->txn, &copy, bo->tlen,
bo->pgno, &rdata->data, &rdata->ulen)) != 0)
return (ret);
@@ -656,7 +694,7 @@ __bam_ritem(dbc, h, indx, data)
/* Copy the new item onto the page. */
bk = (BKEYDATA *)t;
- B_TSET(bk->type, B_KEYDATA, 0);
+ B_TSET(bk->type, B_KEYDATA);
bk->len = data->size;
memcpy(bk->data, data->data, data->size);
@@ -664,26 +702,22 @@ __bam_ritem(dbc, h, indx, data)
}
/*
- * __bam_dup_convert --
+ * __bam_dup_check --
* Check to see if the duplicate set at indx should have its own page.
- * If it should, create it.
*/
static int
-__bam_dup_convert(dbc, h, indx)
+__bam_dup_check(dbc, op, h, indx, sz, cntp)
DBC *dbc;
+ u_int32_t op;
PAGE *h;
- u_int32_t indx;
+ u_int32_t indx, sz;
+ db_indx_t *cntp;
{
BKEYDATA *bk;
DB *dbp;
- DBT hdr;
- DB_MPOOLFILE *mpf;
- PAGE *dp;
- db_indx_t cnt, cpindx, dindx, first, *inp, sz;
- int ret;
+ db_indx_t cnt, first, *inp;
dbp = dbc->dbp;
- mpf = dbp->mpf;
inp = P_INP(dbp, h);
/*
@@ -695,11 +729,21 @@ __bam_dup_convert(dbc, h, indx)
/* Count the key once. */
bk = GET_BKEYDATA(dbp, h, indx);
- sz = B_TYPE(bk->type) == B_KEYDATA ?
+ sz += B_TYPE(bk->type) == B_KEYDATA ?
BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
/* Sum up all the data items. */
- for (cnt = 0, first = indx;
+ first = indx;
+
+ /*
+ * Account for the record being inserted. If we are replacing it,
+ * don't count it twice.
+ *
+ * We execute the loop with first == indx to get the size of the
+ * first record.
+ */
+ cnt = op == DB_CURRENT ? 0 : 1;
+ for (first = indx;
indx < NUM_ENT(h) && inp[first] == inp[indx];
++cnt, indx += P_INDX) {
bk = GET_BKEYDATA(dbp, h, indx + O_INDX);
@@ -726,6 +770,36 @@ __bam_dup_convert(dbc, h, indx)
if (sz < dbp->pgsize / 4)
return (0);
+ *cntp = cnt;
+ return (1);
+}
+
+/*
+ * __bam_dup_convert --
+ * Move a set of duplicates off-page and into their own tree.
+ */
+static int
+__bam_dup_convert(dbc, h, indx, cnt)
+ DBC *dbc;
+ PAGE *h;
+ u_int32_t indx, cnt;
+{
+ BKEYDATA *bk;
+ DB *dbp;
+ DBT hdr;
+ DB_MPOOLFILE *mpf;
+ PAGE *dp;
+ db_indx_t cpindx, dindx, first, *inp;
+ int ret, t_ret;
+
+ dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ inp = P_INP(dbp, h);
+
+ /* Move to the beginning of the dup set. */
+ while (indx > 0 && inp[indx] == inp[indx - P_INDX])
+ indx -= P_INDX;
+
/* Get a new page. */
if ((ret = __db_new(dbc,
dbp->dup_compare == NULL ? P_LRECNO : P_LDUP, &dp)) != 0)
@@ -739,8 +813,8 @@ __bam_dup_convert(dbc, h, indx)
* we're dealing with.
*/
memset(&hdr, 0, sizeof(hdr));
- dindx = first;
- indx = first;
+ first = indx;
+ dindx = indx;
cpindx = 0;
do {
/* Move cursors referencing the old entry to the new entry. */
@@ -797,13 +871,12 @@ __bam_dup_convert(dbc, h, indx)
goto err;
/* Adjust cursors for all the above movements. */
- if ((ret = __bam_ca_di(dbc,
- PGNO(h), first + P_INDX, (int)(first + P_INDX - indx))) != 0)
- goto err;
+ ret = __bam_ca_di(dbc,
+ PGNO(h), first + P_INDX, (int)(first + P_INDX - indx));
- return (__memp_fput(mpf, dp, DB_MPOOL_DIRTY));
+err: if ((t_ret = __memp_fput(mpf, dp, 0)) != 0 && ret == 0)
+ ret = t_ret;
-err: (void)__memp_fput(mpf, dp, 0);
return (ret);
}
@@ -825,7 +898,7 @@ __bam_ovput(dbc, type, pgno, h, indx, item)
int ret;
UMRW_SET(bo.unused1);
- B_TSET(bo.type, type, 0);
+ B_TSET(bo.type, type);
UMRW_SET(bo.unused2);
/*
diff --git a/db/btree/bt_rec.c b/db/btree/bt_rec.c
index e3fa7363c..45df8d7c1 100644
--- a/db/btree/bt_rec.c
+++ b/db/btree/bt_rec.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_rec.c,v 11.70 2004/09/24 00:43:12 bostic Exp $
+ * $Id: bt_rec.c,v 12.21 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -58,7 +51,7 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
_lp = lp = np = pp = _rp = rp = NULL;
sp = NULL;
- REC_INTRO(__bam_split_read, 1);
+ REC_INTRO(__bam_split_read, 1, 0);
/*
* There are two kinds of splits that we have to recover from. The
@@ -95,22 +88,22 @@ redo: if (DB_REDO(op)) {
if (rootsplit) {
REC_FGET(mpf, root_pgno, &pp, do_left);
cmp =
- log_compare(&LSN(pp), &LSN(argp->pg.data));
- CHECK_LSN(op,
+ LOG_COMPARE(&LSN(pp), &LSN(argp->pg.data));
+ CHECK_LSN(dbenv, op,
cmp, &LSN(pp), &LSN(argp->pg.data));
p_update = cmp == 0;
}
do_left: if (lp != NULL) {
- cmp = log_compare(&LSN(lp), &argp->llsn);
- CHECK_LSN(op, cmp, &LSN(lp), &argp->llsn);
+ cmp = LOG_COMPARE(&LSN(lp), &argp->llsn);
+ CHECK_LSN(dbenv, op, cmp, &LSN(lp), &argp->llsn);
if (cmp == 0)
l_update = 1;
}
if (rp != NULL) {
- cmp = log_compare(&LSN(rp), &argp->rlsn);
- CHECK_LSN(op, cmp, &LSN(rp), &argp->rlsn);
+ cmp = LOG_COMPARE(&LSN(rp), &argp->rlsn);
+ CHECK_LSN(dbenv, op, cmp, &LSN(rp), &argp->rlsn);
if (cmp == 0)
r_update = 1;
}
@@ -148,17 +141,19 @@ do_left: if (lp != NULL) {
goto out;
if (l_update) {
+ REC_DIRTY(mpf, &lp);
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, 0)) != 0)
goto out;
lp = NULL;
}
if (r_update) {
+ REC_DIRTY(mpf, &rp);
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, 0)) != 0)
goto out;
rp = NULL;
}
@@ -178,13 +173,14 @@ do_left: if (lp != NULL) {
rc = 1;
}
+ REC_DIRTY(mpf, &pp);
P_INIT(pp, file_dbp->pgsize, root_pgno,
PGNO_INVALID, PGNO_INVALID, _lp->level + 1, ptype);
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, 0)) != 0)
goto out;
pp = NULL;
}
@@ -197,8 +193,8 @@ check_next: /*
* page must exist because we're redoing the operation.
*/
if (!rootsplit && argp->npgno != PGNO_INVALID) {
- if ((ret =
- __memp_fget(mpf, &argp->npgno, 0, &np)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->npgno, NULL,
+ 0, &np)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -210,13 +206,14 @@ check_next: /*
} else
goto done;
}
- cmp = log_compare(&LSN(np), &argp->nlsn);
- CHECK_LSN(op, cmp, &LSN(np), &argp->nlsn);
+ cmp = LOG_COMPARE(&LSN(np), &argp->nlsn);
+ CHECK_LSN(dbenv, op, cmp, &LSN(np), &argp->nlsn);
if (cmp == 0) {
+ REC_DIRTY(mpf, &np);
PREV_PGNO(np) = argp->right;
np->lsn = *lsnp;
if ((ret =
- __memp_fput(mpf, np, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mpf, np, 0)) != 0)
goto out;
np = NULL;
}
@@ -229,13 +226,15 @@ 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, NULL,
+ DB_MPOOL_EDIT, &pp)) != 0) {
pp = NULL;
goto lrundo;
}
- if (log_compare(lsnp, &LSN(pp)) == 0) {
+ if (LOG_COMPARE(lsnp, &LSN(pp)) == 0) {
+ REC_DIRTY(mpf, &pp);
memcpy(pp, argp->pg.data, argp->pg.size);
- if ((ret = __memp_fput(mpf, pp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, pp, 0)) != 0)
goto out;
pp = NULL;
}
@@ -250,18 +249,20 @@ check_next: /*
*/
lrundo: if ((rootsplit && lp != NULL) || rp != NULL) {
if (rootsplit && lp != NULL &&
- log_compare(lsnp, &LSN(lp)) == 0) {
+ LOG_COMPARE(lsnp, &LSN(lp)) == 0) {
+ REC_DIRTY(mpf, &lp);
lp->lsn = argp->llsn;
if ((ret =
- __memp_fput(mpf, lp, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mpf, lp, 0)) != 0)
goto out;
lp = NULL;
}
if (rp != NULL &&
- log_compare(lsnp, &LSN(rp)) == 0) {
+ LOG_COMPARE(lsnp, &LSN(rp)) == 0) {
+ REC_DIRTY(mpf, &rp);
rp->lsn = argp->rlsn;
if ((ret =
- __memp_fput(mpf, rp, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mpf, rp, 0)) != 0)
goto out;
rp = NULL;
}
@@ -276,15 +277,16 @@ lrundo: if ((rootsplit && lp != NULL) || rp != NULL) {
* if there's nothing to undo.
*/
if (!rootsplit && argp->npgno != PGNO_INVALID) {
- if ((ret =
- __memp_fget(mpf, &argp->npgno, 0, &np)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->npgno, NULL,
+ DB_MPOOL_EDIT, &np)) != 0) {
np = NULL;
goto done;
}
- if (log_compare(lsnp, &LSN(np)) == 0) {
+ if (LOG_COMPARE(lsnp, &LSN(np)) == 0) {
+ REC_DIRTY(mpf, &np);
PREV_PGNO(np) = argp->left;
np->lsn = argp->nlsn;
- if (__memp_fput(mpf, np, DB_MPOOL_DIRTY))
+ if (__memp_fput(mpf, np, 0))
goto out;
np = NULL;
}
@@ -337,16 +339,18 @@ __bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
PAGE *pagep;
db_pgno_t pgno, root_pgno;
- int cmp_n, cmp_p, modified, ret;
+ db_recno_t rcnt;
+ int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_rsplit_print);
- REC_INTRO(__bam_rsplit_read, 1);
+ REC_INTRO(__bam_rsplit_read, 1, 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, NULL,
+ 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -358,18 +362,27 @@ __bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)
goto do_page;
}
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->rootlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->rootlsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->rootlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->rootlsn);
if (cmp_p == 0 && DB_REDO(op)) {
- /* Need to redo update described. */
+ /*
+ * Copy the new data to the root page. If it is not now a
+ * leaf page we need to restore the record number. We could
+ * try to determine if C_RECNUM was set in the btree, but
+ * that's not really necessary since the field is not used
+ * otherwise.
+ */
+ REC_DIRTY(mpf, &pagep);
+ rcnt = RE_NREC(pagep);
memcpy(pagep, argp->pgdbt.data, argp->pgdbt.size);
+ if (LEVEL(pagep) > LEAFLEVEL)
+ RE_NREC_SET(pagep, rcnt);
pagep->pgno = root_pgno;
pagep->lsn = *lsnp;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, file_dbp->pgsize, root_pgno,
argp->nrec, PGNO_INVALID, pagep->level + 1,
IS_BTREE_PAGE(pagep) ? P_IBTREE : P_IRECNO);
@@ -377,9 +390,8 @@ __bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)
argp->rootent.size, &argp->rootent, NULL)) != 0)
goto out;
pagep->lsn = argp->rootlsn;
- modified = 1;
}
- if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
do_page:
@@ -388,7 +400,8 @@ do_page:
* 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, NULL,
+ 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -399,21 +412,20 @@ do_page:
} else
goto done;
}
- modified = 0;
(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);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &copy_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &copy_lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
pagep->lsn = *lsnp;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
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, 0)) != 0)
goto out;
pagep = NULL;
@@ -445,15 +457,16 @@ __bam_adj_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_adj_print);
- REC_INTRO(__bam_adj_read, 1);
+ REC_INTRO(__bam_adj_read, 1, 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, NULL,
+ 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -465,28 +478,27 @@ __bam_adj_recover(dbenv, dbtp, lsnp, op, info)
goto done;
}
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
if ((ret = __bam_adjindx(dbc,
pagep, argp->indx, argp->indx_copy, argp->is_insert)) != 0)
goto out;
LSN(pagep) = *lsnp;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
if ((ret = __bam_adjindx(dbc,
pagep, argp->indx, argp->indx_copy, !argp->is_insert)) != 0)
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, 0)) != 0)
goto out;
pagep = NULL;
@@ -519,15 +531,16 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_cadjust_print);
- REC_INTRO(__bam_cadjust_read, 1);
+ REC_INTRO(__bam_cadjust_read, 1, 0);
/* 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, NULL,
+ 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -539,12 +552,12 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
goto done;
}
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
if (IS_BTREE_PAGE(pagep)) {
GET_BINTERNAL(file_dbp, pagep, argp->indx)->nrecs +=
argp->adjust;
@@ -558,9 +571,9 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
}
LSN(pagep) = *lsnp;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
if (IS_BTREE_PAGE(pagep)) {
GET_BINTERNAL(file_dbp, pagep, argp->indx)->nrecs -=
argp->adjust;
@@ -573,9 +586,8 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
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, 0)) != 0)
goto out;
pagep = NULL;
@@ -608,15 +620,16 @@ __bam_cdel_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
PAGE *pagep;
u_int32_t indx;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_cdel_print);
- REC_INTRO(__bam_cdel_read, 1);
+ REC_INTRO(__bam_cdel_read, 1, 0);
/* 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, NULL,
+ 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -628,28 +641,29 @@ __bam_cdel_recover(dbenv, dbtp, lsnp, op, info)
goto done;
}
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
indx = argp->indx + (TYPE(pagep) == P_LBTREE ? O_INDX : 0);
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. */
+ REC_DIRTY(mpf, &pagep);
indx = argp->indx + (TYPE(pagep) == P_LBTREE ? O_INDX : 0);
B_DCLR(GET_BKEYDATA(file_dbp, pagep, indx)->type);
- (void)__bam_ca_delete(file_dbp, argp->pgno, argp->indx, 0);
+ if ((ret = __bam_ca_delete(
+ file_dbp, argp->pgno, argp->indx, 0, NULL)) != 0)
+ 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, 0)) != 0)
goto out;
pagep = NULL;
@@ -683,16 +697,17 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
DBT dbt;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
u_int8_t *p;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_repl_print);
- REC_INTRO(__bam_repl_read, 1);
+ REC_INTRO(__bam_repl_read, 1, 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, NULL,
+ 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -705,16 +720,16 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
}
bk = GET_BKEYDATA(file_dbp, pagep, argp->indx);
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/*
* Need to redo update described.
*
* Re-build the replacement item.
*/
+ REC_DIRTY(mpf, &pagep);
memset(&dbt, 0, sizeof(dbt));
dbt.size = argp->prefix + argp->suffix + argp->repl.size;
if ((ret = __os_malloc(dbenv, dbt.size, &dbt.data)) != 0)
@@ -732,13 +747,13 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
goto out;
LSN(pagep) = *lsnp;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/*
* Need to undo update described.
*
* Re-build the original item.
*/
+ REC_DIRTY(mpf, &pagep);
memset(&dbt, 0, sizeof(dbt));
dbt.size = argp->prefix + argp->suffix + argp->orig.size;
if ((ret = __os_malloc(dbenv, dbt.size, &dbt.data)) != 0)
@@ -760,9 +775,8 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
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, 0)) != 0)
goto out;
pagep = NULL;
@@ -794,14 +808,15 @@ __bam_root_recover(dbenv, dbtp, lsnp, op, info)
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
meta = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_root_print);
- REC_INTRO(__bam_root_read, 0);
+ REC_INTRO(__bam_root_read, 0, 0);
- if ((ret = __memp_fget(mpf, &argp->meta_pgno, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->meta_pgno, NULL,
+ 0, &meta)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -813,22 +828,21 @@ __bam_root_recover(dbenv, dbtp, lsnp, op, info)
goto done;
}
- 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);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(meta));
+ cmp_p = LOG_COMPARE(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(meta), &argp->meta_lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &meta);
meta->root = argp->root_pgno;
meta->dbmeta.lsn = *lsnp;
((BTREE *)file_dbp->bt_internal)->bt_root = meta->root;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Nothing to undo except lsn. */
+ REC_DIRTY(mpf, &meta);
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, 0)) != 0)
goto out;
meta = NULL;
@@ -866,7 +880,7 @@ __bam_curadj_recover(dbenv, dbtp, lsnp, op, info)
COMPQUIET(mpf, NULL);
REC_PRINT(__bam_curadj_print);
- REC_INTRO(__bam_curadj_read, 0);
+ REC_INTRO(__bam_curadj_read, 0, 1);
ret = 0;
if (op != DB_TXN_ABORT)
@@ -891,8 +905,9 @@ __bam_curadj_recover(dbenv, dbtp, lsnp, op, info)
break;
case DB_CA_SPLIT:
- __bam_ca_undosplit(file_dbp, argp->from_pgno,
- argp->to_pgno, argp->left_pgno, argp->from_indx);
+ if ((ret = __bam_ca_undosplit(file_dbp, argp->from_pgno,
+ argp->to_pgno, argp->left_pgno, argp->from_indx)) != 0)
+ goto out;
break;
}
@@ -928,7 +943,7 @@ __bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)
rdbc = NULL;
REC_PRINT(__bam_rcuradj_print);
- REC_INTRO(__bam_rcuradj_read, 0);
+ REC_INTRO(__bam_rcuradj_read, 0, 1);
ret = t_ret = 0;
@@ -962,7 +977,8 @@ __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;
- (void)__ram_ca(rdbc, CA_ICURRENT);
+ if ((ret = __ram_ca(rdbc, CA_ICURRENT, NULL)) != 0)
+ goto out;
break;
case CA_IAFTER:
case CA_IBEFORE:
@@ -973,7 +989,8 @@ __bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)
*/
F_CLR(cp, C_DELETED);
cp->order = INVALID_ORDER;
- (void)__ram_ca(rdbc, CA_DELETE);
+ if ((ret = __ram_ca(rdbc, CA_DELETE, NULL)) != 0)
+ goto out;
break;
}
@@ -1003,12 +1020,12 @@ __bam_relink_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_relink_print);
- REC_INTRO(__bam_relink_read, 1);
+ REC_INTRO(__bam_relink_read, 1, 0);
/*
* There are up to three pages we need to check -- the page, and the
@@ -1016,7 +1033,397 @@ __bam_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->next, NULL,
+ 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND
+#ifndef HAVE_FTRUNCATE
+ || DB_REDO(op)
+#endif
+ ) {
+ ret = __db_pgerr(file_dbp, argp->next, ret);
+ goto out;
+ } else
+ goto prev;
+ }
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn_next);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn_next);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Redo the remove or replace. */
+ REC_DIRTY(mpf, &pagep);
+ if (argp->new_pgno == PGNO_INVALID)
+ pagep->prev_pgno = argp->prev;
+ else
+ pagep->prev_pgno = argp->new_pgno;
+
+ pagep->lsn = *lsnp;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Undo the remove or replace. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->prev_pgno = argp->pgno;
+
+ pagep->lsn = argp->lsn_next;
+ }
+
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+prev: if ((ret = __memp_fget(mpf, &argp->prev, NULL,
+ 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND
+#ifndef HAVE_FTRUNCATE
+ || DB_REDO(op)
+#endif
+ ) {
+ ret = __db_pgerr(file_dbp, argp->prev, ret);
+ goto out;
+ } else
+ goto done;
+ }
+
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn_prev);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn_prev);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Redo the relink. */
+ REC_DIRTY(mpf, &pagep);
+ if (argp->new_pgno == PGNO_INVALID)
+ pagep->next_pgno = argp->next;
+ else
+ pagep->next_pgno = argp->new_pgno;
+
+ pagep->lsn = *lsnp;
+ } else if (LOG_COMPARE(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
+ /* Undo the relink. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->next_pgno = argp->pgno;
+ pagep->lsn = argp->lsn_prev;
+ }
+
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+done: *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
+}
+
+/*
+ * __bam_merge_recover --
+ * Recovery function for merge.
+ *
+ * PUBLIC: int __bam_merge_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__bam_merge_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __bam_merge_args *argp;
+ BKEYDATA *bk;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ db_indx_t indx, *ninp, *pinp;
+ u_int32_t size;
+ u_int8_t *bp;
+ int cmp_n, cmp_p, i, ret;
+
+ COMPQUIET(info, NULL);
+
+ REC_PRINT(__bam_merge_print);
+ REC_INTRO(__bam_merge_read, 1, 1);
+
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND
+#ifndef HAVE_FTRUNCATE
+ || DB_REDO(op)
+#endif
+ ) {
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ goto out;
+ } else
+ goto next;
+ }
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(file_dbp->dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
+
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /*
+ * If the header is provided the page is empty, copy the
+ * needed data.
+ */
+ DB_ASSERT(dbenv, argp->hdr.size == 0 || NUM_ENT(pagep) == 0);
+ REC_DIRTY(mpf, &pagep);
+ if (argp->hdr.size != 0) {
+ P_INIT(pagep, file_dbp->pgsize, pagep->pgno,
+ PREV_PGNO(argp->hdr.data),
+ NEXT_PGNO(argp->hdr.data),
+ LEVEL(argp->hdr.data), TYPE(argp->hdr.data));
+ }
+ if (TYPE(pagep) == P_OVERFLOW) {
+ OV_REF(pagep) = OV_REF(argp->hdr.data);
+ OV_LEN(pagep) = OV_LEN(argp->hdr.data);
+ bp = (u_int8_t *) pagep + P_OVERHEAD(file_dbp);
+ memcpy(bp, argp->data.data, argp->data.size);
+ } else {
+ /* Copy the data segment. */
+ bp = (u_int8_t *)pagep +
+ (db_indx_t)(HOFFSET(pagep) - argp->data.size);
+ memcpy(bp, argp->data.data, argp->data.size);
+
+ /* Copy index table offset past the current entries. */
+ pinp = P_INP(file_dbp, pagep) + NUM_ENT(pagep);
+ ninp = argp->ind.data;
+ for (i = 0;
+ i < (int)(argp->ind.size / sizeof(*ninp)); i++)
+ *pinp++ = *ninp++
+ - (file_dbp->pgsize - HOFFSET(pagep));
+ HOFFSET(pagep) -= argp->data.size;
+ NUM_ENT(pagep) += i;
+ }
+ pagep->lsn = *lsnp;
+ } else if (cmp_n == 0 && !DB_REDO(op)) {
+ /*
+ * Since logging is logical at the page level
+ * we cannot just truncate the data space. Delete
+ * the proper number of items from the logical end
+ * of the page.
+ */
+ REC_DIRTY(mpf, &pagep);
+ for (i = 0; i < (int)(argp->ind.size / sizeof(*ninp)); i++) {
+ indx = NUM_ENT(pagep) - 1;
+ if (P_INP(file_dbp, pagep)[indx] ==
+ P_INP(file_dbp, pagep)[indx - P_INDX]) {
+ NUM_ENT(pagep)--;
+ continue;
+ }
+ switch (TYPE(pagep)) {
+ case P_LBTREE:
+ case P_LRECNO:
+ case P_LDUP:
+ bk = GET_BKEYDATA(file_dbp, pagep, indx);
+ size = BITEM_SIZE(bk);
+ break;
+
+ case P_IBTREE:
+ size = BINTERNAL_SIZE(
+ GET_BINTERNAL(file_dbp, pagep, indx)->len);
+ break;
+ case P_IRECNO:
+ size = RINTERNAL_SIZE;
+ break;
+
+ default:
+ ret = __db_pgfmt(dbenv, PGNO(pagep));
+ goto out;
+ }
+ if ((ret =
+ __db_ditem(dbc, pagep, indx, size)) != 0)
+ goto out;
+ }
+ if (argp->ind.size == 0)
+ HOFFSET(pagep) = file_dbp->pgsize;
+ pagep->lsn = argp->lsn;
+ }
+
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+
+next: if ((ret = __memp_fget(mpf, &argp->npgno, NULL,
+ 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND
+#ifndef HAVE_FTRUNCATE
+ || DB_REDO(op)
+#endif
+ ) {
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ goto out;
+ } else
+ goto done;
+ }
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->nlsn);
+ CHECK_LSN(file_dbp->dbenv, op, cmp_p, &LSN(pagep), &argp->nlsn);
+
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to truncate the page. */
+ REC_DIRTY(mpf, &pagep);
+ HOFFSET(pagep) = file_dbp->pgsize;
+ NUM_ENT(pagep) = 0;
+ pagep->lsn = *lsnp;
+ } else if (cmp_n == 0 && !DB_REDO(op)) {
+ /* Need to put the data back on the page. */
+ REC_DIRTY(mpf, &pagep);
+ if (TYPE(pagep) == P_OVERFLOW) {
+ OV_REF(pagep) = OV_REF(argp->hdr.data);
+ OV_LEN(pagep) = OV_LEN(argp->hdr.data);
+ bp = (u_int8_t *) pagep + P_OVERHEAD(file_dbp);
+ memcpy(bp, argp->data.data, argp->data.size);
+ } else {
+ bp = (u_int8_t *)pagep +
+ (db_indx_t)(HOFFSET(pagep) - argp->data.size);
+ memcpy(bp, argp->data.data, argp->data.size);
+
+ /* Copy index table. */
+ pinp = P_INP(file_dbp, pagep) + NUM_ENT(pagep);
+ ninp = argp->ind.data;
+ for (i = 0;
+ i < (int)(argp->ind.size / sizeof(*ninp)); i++)
+ *pinp++ = *ninp++;
+ HOFFSET(pagep) -= argp->data.size;
+ NUM_ENT(pagep) = i;
+ }
+ pagep->lsn = argp->nlsn;
+ }
+
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+done:
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+}
+
+/*
+ * __bam_pgno_recover --
+ * Recovery function for page number replacment.
+ *
+ * PUBLIC: int __bam_pgno_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__bam_pgno_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ BINTERNAL *bi;
+ __bam_pgno_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep, *npagep;
+ db_pgno_t *pgnop;
+ int cmp_n, cmp_p, ret;
+
+ COMPQUIET(info, NULL);
+
+ REC_PRINT(__bam_pgno_print);
+ REC_INTRO(__bam_pgno_read, 1, 0);
+
+ REC_FGET(mpf, argp->pgno, &pagep, done);
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(file_dbp->dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
+
+ if ((cmp_p == 0 && DB_REDO(op)) || (cmp_n == 0 && !DB_REDO(op))) {
+ switch (TYPE(pagep)) {
+ case P_IBTREE:
+ /*
+ * An internal record can have both a overflow
+ * and child pointer. Fetch the page to see
+ * which it is.
+ */
+ bi = GET_BINTERNAL(file_dbp, pagep, argp->indx);
+ if (B_TYPE(bi->type) == B_OVERFLOW) {
+ REC_FGET(mpf, argp->npgno, &npagep, out);
+
+ if (TYPE(npagep) == P_OVERFLOW)
+ pgnop =
+ &((BOVERFLOW *)(bi->data))->pgno;
+ else
+ pgnop = &bi->pgno;
+ if ((ret = __memp_fput(mpf, npagep, 0)) != 0)
+ goto out;
+ break;
+ }
+ pgnop = &bi->pgno;
+ break;
+ case P_IRECNO:
+ pgnop =
+ &GET_RINTERNAL(file_dbp, pagep, argp->indx)->pgno;
+ break;
+ default:
+ pgnop =
+ &GET_BOVERFLOW(file_dbp, pagep, argp->indx)->pgno;
+ break;
+ }
+
+ if (DB_REDO(op)) {
+ /* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
+ *pgnop = argp->npgno;
+ pagep->lsn = *lsnp;
+ } else {
+ REC_DIRTY(mpf, &pagep);
+ *pgnop = argp->opgno;
+ pagep->lsn = argp->lsn;
+ }
+ }
+
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+
+done:
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+}
+
+/*
+ * __bam_relink_43_recover --
+ * Recovery function for relink.
+ *
+ * PUBLIC: int __bam_relink_43_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__bam_relink_43_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __bam_relink_43_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ pagep = NULL;
+ COMPQUIET(info, NULL);
+ REC_PRINT(__bam_relink_43_print);
+ REC_INTRO(__bam_relink_43_read, 1, 0);
+
+ /*
+ * There are up to three pages we need to check -- the page, and the
+ * previous and next pages, if they existed. For a page add operation,
+ * 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, NULL, 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -1029,13 +1436,13 @@ __bam_relink_recover(dbenv, dbtp, lsnp, op, info)
}
modified = 0;
- cmp_p = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Redo the relink. */
pagep->lsn = *lsnp;
modified = 1;
- } else if (log_compare(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
+ } else if (LOG_COMPARE(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
/* Undo the relink. */
pagep->next_pgno = argp->next;
pagep->prev_pgno = argp->prev;
@@ -1047,7 +1454,7 @@ __bam_relink_recover(dbenv, dbtp, lsnp, op, info)
goto out;
pagep = NULL;
-next2: if ((ret = __memp_fget(mpf, &argp->next, 0, &pagep)) != 0) {
+next2: if ((ret = __memp_fget(mpf, &argp->next, NULL, 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -1060,31 +1467,31 @@ next2: if ((ret = __memp_fget(mpf, &argp->next, 0, &pagep)) != 0) {
}
modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->lsn_next);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn_next);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn_next);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn_next);
if (cmp_p == 0 && DB_REDO(op)) {
/* Redo the remove or undo the add. */
+ REC_DIRTY(mpf, &pagep);
pagep->prev_pgno = argp->prev;
-
modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Undo the remove or redo the add. */
+ REC_DIRTY(mpf, &pagep);
pagep->prev_pgno = argp->pgno;
-
modified = 1;
}
- if (modified == 1) {
+ if (modified) {
if (DB_UNDO(op))
pagep->lsn = argp->lsn_next;
else
pagep->lsn = *lsnp;
}
- if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
-prev: if ((ret = __memp_fget(mpf, &argp->prev, 0, &pagep)) != 0) {
+prev: if ((ret = __memp_fget(mpf, &argp->prev, NULL, 0, &pagep)) != 0) {
if (ret != DB_PAGE_NOTFOUND
#ifndef HAVE_FTRUNCATE
|| DB_REDO(op)
@@ -1097,26 +1504,26 @@ prev: if ((ret = __memp_fget(mpf, &argp->prev, 0, &pagep)) != 0) {
}
modified = 0;
- cmp_p = log_compare(&LSN(pagep), &argp->lsn_prev);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn_prev);
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn_prev);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn_prev);
if (cmp_p == 0 && DB_REDO(op)) {
/* Redo the relink. */
+ REC_DIRTY(mpf, &pagep);
pagep->next_pgno = argp->next;
-
modified = 1;
- } else if (log_compare(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
+ } else if (LOG_COMPARE(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
/* Undo the relink. */
+ REC_DIRTY(mpf, &pagep);
pagep->next_pgno = argp->pgno;
-
modified = 1;
}
- if (modified == 1) {
+ if (modified) {
if (DB_UNDO(op))
pagep->lsn = argp->lsn_prev;
else
pagep->lsn = *lsnp;
}
- if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
diff --git a/db/btree/bt_reclaim.c b/db/btree/bt_reclaim.c
index ee722a30f..d48c9dfcf 100644
--- a/db/btree/bt_reclaim.c
+++ b/db/btree/bt_reclaim.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_reclaim.c,v 11.15 2004/01/28 03:35:49 bostic Exp $
+ * $Id: bt_reclaim.c,v 12.6 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
+#include "dbinc/lock.h"
/*
* __bam_reclaim --
@@ -31,18 +26,28 @@ __bam_reclaim(dbp, txn)
DB_TXN *txn;
{
DBC *dbc;
+ DB_LOCK meta_lock;
int ret, t_ret;
/* Acquire a cursor. */
if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
return (ret);
+ /* Write lock the metapage for deallocations. */
+ if ((ret = __db_lget(dbc,
+ 0, PGNO_BASE_MD, DB_LOCK_WRITE, 0, &meta_lock)) != 0)
+ goto err;
+
+ /* Avoid locking every page, we have the handle locked exclusive. */
+ F_SET(dbc, DBC_DONTLOCK);
+
/* Walk the tree, freeing pages. */
ret = __bam_traverse(dbc,
DB_LOCK_WRITE, dbc->internal->root, __db_reclaim_callback, dbc);
+ __TLPUT(dbc, meta_lock);
/* Discard the cursor. */
- if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+err: if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -69,7 +74,8 @@ __bam_truncate(dbc, countp)
ret = __bam_traverse(dbc,
DB_LOCK_WRITE, dbc->internal->root, __db_truncate_callback, &trunc);
- *countp = trunc.count;
+ if (countp != NULL)
+ *countp = trunc.count;
return (ret);
}
diff --git a/db/btree/bt_recno.c b/db/btree/bt_recno.c
index 78f149dd6..e0a8b393b 100644
--- a/db/btree/bt_recno.c
+++ b/db/btree/bt_recno.c
@@ -1,25 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_recno.c,v 11.117 2004/03/28 17:01:01 bostic Exp $
+ * $Id: bt_recno.c,v 12.28 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
+#include "dbinc/mp.h"
static int __ram_add __P((DBC *, db_recno_t *, DBT *, u_int32_t, u_int32_t));
static int __ram_source __P((DB *));
@@ -203,8 +197,7 @@ __ram_c_del(dbc)
DB *dbp;
DB_LSN lsn;
DBT hdr, data;
- EPG *epg;
- int exact, ret, stack, t_ret;
+ int exact, nc, ret, stack, t_ret;
dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
@@ -226,7 +219,7 @@ __ram_c_del(dbc)
return (DB_KEYEMPTY);
/* Search the tree for the key; delete only deletes exact matches. */
- if ((ret = __bam_rsearch(dbc, &cp->recno, S_DELETE, 1, &exact)) != 0)
+ if ((ret = __bam_rsearch(dbc, &cp->recno, SR_DELETE, 1, &exact)) != 0)
goto err;
if (!exact) {
ret = DB_NOTFOUND;
@@ -235,6 +228,8 @@ __ram_c_del(dbc)
stack = 1;
/* Copy the page into the cursor. */
+ if ((ret = __memp_dirty(dbp->mpf, &cp->csp->page, dbc->txn, 0)) != 0)
+ goto err;
STACK_TO_CURSOR(cp, ret);
if (ret != 0)
goto err;
@@ -261,7 +256,9 @@ __ram_c_del(dbc)
goto err;
if ((ret = __bam_adjust(dbc, -1)) != 0)
goto err;
- if (__ram_ca(dbc, CA_DELETE) > 0 &&
+ if ((ret = __ram_ca(dbc, CA_DELETE, &nc)) != 0)
+ goto err;
+ if (nc > 0 &&
CURADJ_LOG(dbc) && (ret = __bam_rcuradj_log(dbp, dbc->txn,
&lsn, 0, CA_DELETE, cp->root, cp->recno, cp->order)) != 0)
goto err;
@@ -281,20 +278,10 @@ __ram_c_del(dbc)
*/
if (NUM_ENT(cp->page) == 0 && PGNO(cp->page) != cp->root) {
/*
- * We already have a locked stack of pages. However,
- * there are likely entries in the stack that aren't
- * going to be emptied by removing the single reference
- * to the emptied page (or one of its parents).
- */
- 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.
*/
- ret = __bam_dpages(dbc, epg);
+ ret = __bam_dpages(dbc, 0, 0);
/*
* Regardless of the return from __bam_dpages, it will
@@ -308,14 +295,10 @@ __ram_c_del(dbc)
if ((ret = __bam_ditem(dbc, cp->page, cp->indx)) != 0)
goto err;
- B_TSET(bk.type, B_KEYDATA, 1);
+ B_TSET_DELETED(bk.type, B_KEYDATA);
bk.len = 0;
- memset(&hdr, 0, sizeof(hdr));
- hdr.data = &bk;
- hdr.size = SSZA(BKEYDATA, data);
- memset(&data, 0, sizeof(data));
- data.data = (void *)"";
- data.size = 0;
+ DB_INIT_DBT(hdr, &bk, SSZA(BKEYDATA, data));
+ DB_INIT_DBT(data, "", 0);
if ((ret = __db_pitem(dbc,
cp->page, cp->indx, BKEYDATA_SIZE(0), &hdr, &data)) != 0)
goto err;
@@ -488,7 +471,7 @@ retry: switch (flags) {
for (;; ++cp->recno) {
/* Search the tree for the record. */
if ((ret = __bam_rsearch(dbc, &cp->recno,
- F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND,
+ F_ISSET(dbc, DBC_RMW) ? SR_FIND_WR : SR_FIND,
1, &exact)) != 0)
goto err;
if (!exact) {
@@ -538,7 +521,7 @@ retry: switch (flags) {
if (flags == DB_GET_BOTH ||
flags == DB_GET_BOTHC || flags == DB_GET_BOTH_RANGE) {
- if ((ret = __bam_cmp(dbp, data,
+ if ((ret = __bam_cmp(dbp, dbc->txn, data,
cp->page, cp->indx, __bam_defcmp, &cmp)) != 0)
return (ret);
if (cmp == 0)
@@ -553,12 +536,10 @@ retry: switch (flags) {
}
/* Return the key if the user didn't give us one. */
- if (!F_ISSET(dbc, DBC_OPD)) {
- 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);
+ if (!F_ISSET(dbc, DBC_OPD) && !F_ISSET(key, DB_DBT_ISSET)) {
+ ret = __db_retcopy(dbp->dbenv,
+ key, &cp->recno, sizeof(cp->recno),
+ &dbc->rkey->data, &dbc->rkey->ulen);
F_SET(key, DB_DBT_ISSET);
}
@@ -583,14 +564,16 @@ __ram_c_put(dbc, key, data, flags, pgnop)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_ENV *dbenv;
DB_LSN lsn;
- int exact, nc, ret, t_ret;
u_int32_t iiflags;
+ int exact, nc, ret, t_ret;
void *arg;
COMPQUIET(pgnop, NULL);
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -623,15 +606,12 @@ __ram_c_put(dbc, key, data, flags, pgnop)
* 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) {
+ if (flags == DB_KEYFIRST ||
+ flags == DB_KEYLAST || flags == DB_NOOVERWRITE) {
ret = __ram_getno(dbc, key, &cp->recno, 1);
if (ret == 0 || ret == DB_NOTFOUND)
- ret = __ram_add(dbc, &cp->recno, data, 0, 0);
+ ret = __ram_add(dbc, &cp->recno, data, flags, 0);
return (ret);
}
@@ -648,13 +628,13 @@ __ram_c_put(dbc, key, data, flags, pgnop)
else
iiflags = flags;
-split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
+split: if ((ret = __bam_rsearch(dbc, &cp->recno, SR_INSERT, 1, &exact)) != 0)
goto err;
/*
* An inexact match is okay; it just means we're one record past the
* end, which is reasonable if we're marked deleted.
*/
- DB_ASSERT(exact || CD_ISSET(cp));
+ DB_ASSERT(dbenv, exact || CD_ISSET(cp));
/* Copy the page into the cursor. */
STACK_TO_CURSOR(cp, ret);
@@ -677,7 +657,8 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
switch (flags) { /* Adjust the cursors. */
case DB_AFTER:
- nc = __ram_ca(dbc, CA_IAFTER);
+ if ((ret = __ram_ca(dbc, CA_IAFTER, &nc)) != 0)
+ goto err;
/*
* We only need to adjust this cursor forward if we truly added
@@ -694,7 +675,8 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
goto err;
break;
case DB_BEFORE:
- nc = __ram_ca(dbc, CA_IBEFORE);
+ if ((ret = __ram_ca(dbc, CA_IBEFORE, &nc)) != 0)
+ goto err;
--cp->recno;
/* Only log if __ram_ca found any relevant cursors. */
@@ -708,11 +690,14 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
* We only need to do an adjustment if we actually
* added an item, which we only would have done if the
* cursor was marked deleted.
- *
- * Only log if __ram_ca found any relevant cursors.
*/
- if (CD_ISSET(cp) && __ram_ca(dbc, CA_ICURRENT) > 0 &&
- CURADJ_LOG(dbc) &&
+ if (!CD_ISSET(cp))
+ break;
+
+ /* Only log if __ram_ca found any relevant cursors. */
+ if ((ret = __ram_ca(dbc, CA_ICURRENT, &nc)) != 0)
+ goto err;
+ if (nc > 0 && CURADJ_LOG(dbc) &&
(ret = __bam_rcuradj_log(dbp, dbc->txn, &lsn, 0,
CA_ICURRENT, cp->root, cp->recno, cp->order)) != 0)
goto err;
@@ -723,7 +708,7 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
/* 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->dbenv, key, &cp->recno,
+ ret = __db_retcopy(dbenv, key, &cp->recno,
sizeof(cp->recno), &dbc->rkey->data, &dbc->rkey->ulen);
/* The cursor was reset, no further delete adjustment is necessary. */
@@ -736,39 +721,37 @@ err: CD_CLR(cp);
* __ram_ca --
* Adjust cursors. Returns the number of relevant cursors.
*
- * PUBLIC: int __ram_ca __P((DBC *, ca_recno_arg));
+ * PUBLIC: int __ram_ca __P((DBC *, ca_recno_arg, int *));
*/
int
-__ram_ca(dbc_arg, op)
+__ram_ca(dbc_arg, op, foundp)
DBC *dbc_arg;
ca_recno_arg op;
+ int *foundp;
{
BTREE_CURSOR *cp, *cp_arg;
DB *dbp, *ldbp;
DB_ENV *dbenv;
DBC *dbc;
db_recno_t recno;
- int adjusted, found;
u_int32_t order;
+ int adjusted, found;
dbp = dbc_arg->dbp;
dbenv = dbp->dbenv;
cp_arg = (BTREE_CURSOR *)dbc_arg->internal;
recno = cp_arg->recno;
- found = 0;
-
/*
* It only makes sense to adjust cursors if we're a renumbering
* recno; we should only be called if this is one.
*/
- DB_ASSERT(F_ISSET(cp_arg, C_RENUMBER));
+ DB_ASSERT(dbenv, F_ISSET(cp_arg, C_RENUMBER));
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
/*
* Adjust the cursors. See the comment in __bam_ca_delete().
- */
- /*
+ *
* If we're doing a delete, we need to find the highest
* order of any cursor currently pointing at this item,
* so we can assign a higher order to the newly deleted
@@ -776,33 +759,34 @@ __ram_ca(dbc_arg, op)
* the cursor list.
*/
if (op == CA_DELETE) {
- order = 1;
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (order = 1;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
cp = (BTREE_CURSOR *)dbc->internal;
if (cp_arg->root == cp->root &&
recno == cp->recno && CD_ISSET(cp) &&
- order <= cp->order)
+ order <= cp->order &&
+ !MVCC_SKIP_CURADJ(dbc, cp->root))
order = cp->order + 1;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
} else
order = INVALID_ORDER;
/* Now go through and do the actual adjustments. */
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links) {
cp = (BTREE_CURSOR *)dbc->internal;
- if (cp_arg->root != cp->root)
+ if (cp_arg->root != cp->root ||
+ MVCC_SKIP_CURADJ(dbc, cp->root))
continue;
++found;
adjusted = 0;
@@ -844,7 +828,7 @@ __ram_ca(dbc_arg, op)
* marked undeleted and point to the new
* item.
*/
- DB_ASSERT(CD_ISSET(cp_arg));
+ DB_ASSERT(dbenv, CD_ISSET(cp_arg));
if (C_EQUAL(cp_arg, cp)) {
CD_CLR(cp);
break;
@@ -868,11 +852,13 @@ iafter: if (!adjusted && C_LESSTHAN(cp_arg, cp)) {
break;
}
}
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbp->dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
- return (found);
+ if (foundp != NULL)
+ *foundp = found;
+ return (0);
}
/*
@@ -895,7 +881,7 @@ __ram_getno(dbc, key, rep, can_create)
/* Check the user's record number. */
if ((recno = *(db_recno_t *)key->data) == 0) {
- __db_err(dbp->dbenv, "illegal record number of 0");
+ __db_errx(dbp->dbenv, "illegal record number of 0");
return (EINVAL);
}
if (rep != NULL)
@@ -974,17 +960,19 @@ static int
__ram_source(dbp)
DB *dbp;
{
+ DB_ENV *dbenv;
BTREE *t;
char *source;
int ret;
+ dbenv = dbp->dbenv;
t = dbp->bt_internal;
/* Find the real name, and swap out the one we had before. */
- if ((ret = __db_appname(dbp->dbenv,
+ if ((ret = __db_appname(dbenv,
DB_APP_DATA, t->re_source, 0, NULL, &source)) != 0)
return (ret);
- __os_free(dbp->dbenv, t->re_source);
+ __os_free(dbenv, t->re_source);
t->re_source = source;
/*
@@ -993,9 +981,9 @@ __ram_source(dbp)
* much care other than we'll complain if there are any modifications
* when it comes time to write the database back to the source.
*/
- if ((t->re_fp = fopen(t->re_source, "r")) == NULL) {
+ if ((t->re_fp = fopen(t->re_source, "rb")) == NULL) {
ret = __os_get_errno();
- __db_err(dbp->dbenv, "%s: %s", t->re_source, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", t->re_source);
return (ret);
}
@@ -1037,6 +1025,18 @@ __ram_writeback(dbp)
return (0);
}
+ /*
+ * 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. The DB handle may
+ * be threaded, so allocate memory as we go.
+ */
+ memset(&key, 0, sizeof(key));
+ key.size = sizeof(db_recno_t);
+ key.data = &keyno;
+ memset(&data, 0, sizeof(data));
+ F_SET(&data, DB_DBT_REALLOC);
+
/* Allocate a cursor. */
if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
return (ret);
@@ -1064,7 +1064,7 @@ __ram_writeback(dbp)
*/
if ((ret =
__ram_update(dbc, DB_MAX_RECORDS, 0)) != 0 && ret != DB_NOTFOUND)
- return (ret);
+ goto err;
/*
* Close any existing file handle and re-open the file, truncating it.
@@ -1072,29 +1072,18 @@ __ram_writeback(dbp)
if (t->re_fp != NULL) {
if (fclose(t->re_fp) != 0) {
ret = __os_get_errno();
+ __db_err(dbenv, ret, "%s", t->re_source);
goto err;
}
t->re_fp = NULL;
}
- if ((fp = fopen(t->re_source, "w")) == NULL) {
+ if ((fp = fopen(t->re_source, "wb")) == NULL) {
ret = __os_get_errno();
- __db_err(dbenv, "%s: %s", t->re_source, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", t->re_source);
goto err;
}
/*
- * 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. The DB handle may
- * be threaded, so allocate memory as we go.
- */
- memset(&key, 0, sizeof(key));
- 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.
*/
@@ -1127,9 +1116,8 @@ __ram_writeback(dbp)
if (!F_ISSET(dbp, DB_AM_FIXEDLEN) &&
fwrite(&delim, 1, 1, fp) != 1) {
write_err: ret = __os_get_errno();
- __db_err(dbenv,
- "%s: write failed to backing file: %s",
- t->re_source, strerror(ret));
+ __db_err(dbenv, ret,
+ "%s: write failed to backing file", t->re_source);
goto err;
}
}
@@ -1138,9 +1126,9 @@ err:
done: /* Close the file descriptor. */
if (fp != NULL && fclose(fp) != 0) {
t_ret = __os_get_errno();
+ __db_err(dbenv, t_ret, "%s", t->re_source);
if (ret == 0)
ret = t_ret;
- __db_err(dbenv, "%s: %s", t->re_source, db_strerror(t_ret));
}
/* Discard the cursor. */
@@ -1205,7 +1193,7 @@ __ram_sread(dbc, top)
data.size = 0;
if (F_ISSET(dbp, DB_AM_FIXEDLEN))
for (len = t->re_len; len > 0; --len) {
- if ((ch = getc(t->re_fp)) == EOF) {
+ if ((ch = fgetc(t->re_fp)) == EOF) {
if (data.size == 0)
goto eof;
break;
@@ -1214,7 +1202,7 @@ __ram_sread(dbc, top)
}
else
for (;;) {
- if ((ch = getc(t->re_fp)) == EOF) {
+ if ((ch = fgetc(t->re_fp)) == EOF) {
if (data.size == 0)
goto eof;
break;
@@ -1278,7 +1266,7 @@ __ram_add(dbc, recnop, data, flags, bi_flags)
retry: /* Find the slot for insertion. */
if ((ret = __bam_rsearch(dbc, recnop,
- S_INSERT | (flags == DB_APPEND ? S_APPEND : 0), 1, &exact)) != 0)
+ SR_INSERT | (flags == DB_APPEND ? SR_APPEND : 0), 1, &exact)) != 0)
return (ret);
stack = 1;
@@ -1287,6 +1275,12 @@ retry: /* Find the slot for insertion. */
if (ret != 0)
goto err;
+ if (exact && flags == DB_NOOVERWRITE && !CD_ISSET(cp) &&
+ !B_DISSET(GET_BKEYDATA(dbc->dbp, cp->page, cp->indx)->type)) {
+ ret = DB_KEYEXIST;
+ goto err;
+ }
+
/*
* The application may modify the data based on the selected record
* number.
diff --git a/db/btree/bt_rsearch.c b/db/btree/bt_rsearch.c
index 0027ec9e4..8a916c117 100644
--- a/db/btree/bt_rsearch.c
+++ b/db/btree/bt_rsearch.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -36,19 +36,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_rsearch.c,v 11.40 2004/07/23 17:21:09 bostic Exp $
+ * $Id: bt_rsearch.c,v 12.11 2006/08/24 14:44:44 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -100,44 +95,14 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
*
* Retrieve the root page.
*/
- pg = cp->root;
- 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(mpf, &pg, 0, &h)) != 0) {
- /* Did not read it, so we can release the lock */
- (void)__LPUT(dbc, lock);
- return (ret);
- }
- /*
- * Decide if we need to save this page; if we do, write lock it.
- * We deliberately don't lock-couple on this call. If the tree
- * is tiny, i.e., one page, and two threads are busily updating
- * the root page, we're almost guaranteed deadlocks galore, as
- * each one gets a read lock and then blocks the other's attempt
- * for a write lock.
- */
- if (!stack &&
- ((LF_ISSET(S_PARENT) && (u_int8_t)(stop + 1) >= h->level) ||
- (LF_ISSET(S_WRITE) && h->level == LEAFLEVEL))) {
- ret = __memp_fput(mpf, h, 0);
- if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
- ret = t_ret;
- if (ret != 0)
- return (ret);
- lock_mode = DB_LOCK_WRITE;
- if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
- return (ret);
- 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);
- }
- stack = 1;
- }
+ if ((ret = __bam_get_root(dbc, cp->root, stop, flags, &stack)) != 0)
+ return (ret);
+ lock_mode = cp->csp->lock_mode;
+ lock = cp->csp->lock;
+ h = cp->csp->page;
+ BT_STK_CLR(cp);
/*
* If appending to the tree, set the record number now -- we have the
* root page locked.
@@ -151,7 +116,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
* a fast check now.
*/
total = RE_NREC(h);
- if (LF_ISSET(S_APPEND)) {
+ if (LF_ISSET(SR_APPEND)) {
*exactp = 0;
*recnop = recno = total + 1;
} else {
@@ -160,7 +125,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
*exactp = 1;
else {
*exactp = 0;
- if (!LF_ISSET(S_PAST_EOF) || recno > total + 1) {
+ if (!LF_ISSET(SR_PAST_EOF) || recno > total + 1) {
/*
* Keep the page locked for serializability.
*
@@ -203,7 +168,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
for (t_recno = 0, indx = 0;; indx += adjust) {
if (indx >= NUM_ENT(h)) {
*exactp = 0;
- if (!LF_ISSET(S_PAST_EOF) ||
+ if (!LF_ISSET(SR_PAST_EOF) ||
recno > t_recno + 1) {
ret = __memp_fput(mpf, h, 0);
h = NULL;
@@ -260,15 +225,15 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
}
--indx;
+ /* Return if this is the lowest page wanted. */
+ if (stop == LEVEL(h)) {
+ BT_STK_ENTER(dbp->dbenv,
+ cp, h, indx, lock, lock_mode, ret);
+ if (ret != 0)
+ goto err;
+ return (0);
+ }
if (stack) {
- /* Return if this is the lowest page wanted. */
- if (LF_ISSET(S_PARENT) && stop == h->level) {
- BT_STK_ENTER(dbp->dbenv,
- cp, h, indx, lock, lock_mode, ret);
- if (ret != 0)
- goto err;
- return (0);
- }
BT_STK_PUSH(dbp->dbenv,
cp, h, indx, lock, lock_mode, ret);
if (ret != 0)
@@ -285,9 +250,9 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
* page in the stack. If we do, write lock it and
* never unlock it.
*/
- if ((LF_ISSET(S_PARENT) &&
- (u_int8_t)(stop + 1) >= (u_int8_t)(h->level - 1)) ||
- (h->level - 1) == LEAFLEVEL)
+ if ((LF_ISSET(SR_PARENT) &&
+ (u_int8_t)(stop + 1) >= (u_int8_t)(LEVEL(h) - 1)) ||
+ (LEVEL(h) - 1) == LEAFLEVEL)
stack = 1;
if ((ret = __memp_fput(mpf, h, 0)) != 0)
@@ -295,7 +260,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
h = NULL;
lock_mode = stack &&
- LF_ISSET(S_WRITE) ? DB_LOCK_WRITE : DB_LOCK_READ;
+ LF_ISSET(SR_WRITE) ? DB_LOCK_WRITE : DB_LOCK_READ;
if ((ret = __db_lget(dbc,
LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
/*
@@ -308,7 +273,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
}
}
- if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, 0, &h)) != 0)
goto err;
}
/* NOTREACHED */
@@ -350,6 +315,9 @@ __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 ((ret = __memp_dirty(mpf, &h, dbc->txn, 0)) != 0)
+ return (ret);
+ epg->page = h;
if (DBC_LOGGING(dbc)) {
if ((ret = __bam_cadjust_log(dbp, dbc->txn,
&LSN(h), 0, PGNO(h), &LSN(h),
@@ -369,9 +337,6 @@ __bam_adjust(dbc, adjust)
if (PGNO(h) == root_pgno)
RE_NREC_ADJ(h, adjust);
-
- if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
- return (ret);
}
}
return (0);
@@ -401,7 +366,7 @@ __bam_nrecs(dbc, rep)
pgno = dbc->internal->root;
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &h)) != 0)
return (ret);
*rep = RE_NREC(h);
diff --git a/db/btree/bt_search.c b/db/btree/bt_search.c
index 4fb07f446..e125b9f9b 100644
--- a/db/btree/bt_search.c
+++ b/db/btree/bt_search.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,70 +39,44 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_search.c,v 11.50 2004/07/23 17:21:09 bostic Exp $
+ * $Id: bt_search.c,v 12.24 2006/08/24 14:44:45 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
/*
- * __bam_search --
- * Search a btree for a key.
+ * __bam_get_root --
+ * Fetch the root of a tree and see if we want to keep
+ * it in the stack.
*
- * PUBLIC: int __bam_search __P((DBC *, db_pgno_t,
- * PUBLIC: const DBT *, u_int32_t, int, db_recno_t *, int *));
+ * PUBLIC: int __bam_get_root __P((DBC *, db_pgno_t, int, u_int32_t, int *));
*/
int
-__bam_search(dbc, root_pgno, key, flags, stop, recnop, exactp)
+__bam_get_root(dbc, pg, slevel, flags, stack)
DBC *dbc;
- db_pgno_t root_pgno;
- const DBT *key;
+ db_pgno_t pg;
+ int slevel;
u_int32_t flags;
- int stop, *exactp;
- db_recno_t *recnop;
+ int *stack;
{
- BTREE *t;
BTREE_CURSOR *cp;
DB *dbp;
DB_LOCK lock;
DB_MPOOLFILE *mpf;
PAGE *h;
- db_indx_t base, i, indx, *inp, lim;
db_lockmode_t lock_mode;
- db_pgno_t pg;
- db_recno_t recno;
- int adjust, cmp, deloffset, ret, stack, t_ret;
- int (*func) __P((DB *, const DBT *, const DBT *));
+ int ret, t_ret;
dbp = dbc->dbp;
mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
- h = NULL;
- t = dbp->bt_internal;
- recno = 0;
-
- BT_STK_CLR(cp);
-
/*
- * There are several ways we search a btree tree. The flags argument
- * specifies if we're acquiring read or write locks, if we position
- * to the first or last item in a set of duplicates, if we return
- * deleted items, and if we are locking pairs of pages. In addition,
- * if we're modifying record numbers, we have to lock the entire tree
- * regardless. See btree.h for more details.
- *
* If write-locking pages, we need to know whether or not to acquire a
* write lock on a page before getting it. This depends on how deep it
* is in tree, which we don't know until we acquire the root page. So,
@@ -112,12 +86,15 @@ __bam_search(dbc, root_pgno, key, flags, stop, recnop, exactp)
* Retrieve the root page.
*/
try_again:
- 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;
+ *stack = LF_ISSET(SR_STACK) &&
+ (dbc->dbtype == DB_RECNO || F_ISSET(cp, C_RECNUM));
+ lock_mode = DB_LOCK_READ;
+ if (*stack ||
+ LF_ISSET(SR_DEL) || (LF_ISSET(SR_NEXT) && LF_ISSET(SR_WRITE)))
+ lock_mode = DB_LOCK_WRITE;
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, 0, &h)) != 0) {
/* Did not read it, so we can release the lock */
(void)__LPUT(dbc, lock);
return (ret);
@@ -131,9 +108,12 @@ try_again:
* each one gets a read lock and then blocks the other's attempt
* for a write lock.
*/
- if (!stack &&
- ((LF_ISSET(S_PARENT) && (u_int8_t)(stop + 1) >= h->level) ||
- (LF_ISSET(S_WRITE) && h->level == LEAFLEVEL))) {
+ if (!*stack &&
+ ((LF_ISSET(SR_PARENT) && (u_int8_t)(slevel + 1) >= LEVEL(h)) ||
+ (LF_ISSET(SR_WRITE) && LEVEL(h) == LEAFLEVEL) ||
+ (LF_ISSET(SR_START) && slevel == LEVEL(h)))) {
+ if (!STD_LOCKING(dbc))
+ goto no_relock;
ret = __memp_fput(mpf, h, 0);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
ret = t_ret;
@@ -142,14 +122,15 @@ try_again:
lock_mode = DB_LOCK_WRITE;
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, 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) ||
- (LF_ISSET(S_WRITE) && h->level == LEAFLEVEL))) {
+ if (!((LF_ISSET(SR_PARENT) &&
+ (u_int8_t)(slevel + 1) >= LEVEL(h)) ||
+ (LF_ISSET(SR_WRITE) && LEVEL(h) == LEAFLEVEL) ||
+ (LF_ISSET(SR_START) && slevel == LEVEL(h)))) {
/* Someone else split the root, start over. */
ret = __memp_fput(mpf, h, 0);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
@@ -158,8 +139,71 @@ try_again:
return (ret);
goto try_again;
}
- stack = 1;
+no_relock: *stack = 1;
}
+ BT_STK_ENTER(dbp->dbenv, cp, h, 0, lock, lock_mode, ret);
+
+ return (ret);
+}
+
+/*
+ * __bam_search --
+ * Search a btree for a key.
+ *
+ * PUBLIC: int __bam_search __P((DBC *, db_pgno_t,
+ * PUBLIC: const DBT *, u_int32_t, int, db_recno_t *, int *));
+ */
+int
+__bam_search(dbc, root_pgno, key, flags, slevel, recnop, exactp)
+ DBC *dbc;
+ db_pgno_t root_pgno;
+ const DBT *key;
+ u_int32_t flags;
+ int slevel, *exactp;
+ db_recno_t *recnop;
+{
+ BTREE *t;
+ BTREE_CURSOR *cp;
+ DB *dbp;
+ DB_ENV *dbenv;
+ DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
+ PAGE *h;
+ db_indx_t base, i, indx, *inp, lim;
+ db_lockmode_t lock_mode;
+ db_pgno_t pg;
+ db_recno_t recno;
+ int adjust, cmp, deloffset, ret, stack, t_ret;
+ int (*func) __P((DB *, const DBT *, const DBT *));
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ h = NULL;
+ t = dbp->bt_internal;
+ recno = 0;
+
+ BT_STK_CLR(cp);
+
+ /*
+ * There are several ways we search a btree tree. The flags argument
+ * specifies if we're acquiring read or write locks, if we position
+ * to the first or last item in a set of duplicates, if we return
+ * deleted items, and if we are locking pairs of pages. In addition,
+ * if we're modifying record numbers, we have to lock the entire tree
+ * regardless. See btree.h for more details.
+ */
+
+ if (root_pgno == PGNO_INVALID)
+ root_pgno = cp->root;
+ if ((ret = __bam_get_root(dbc, root_pgno, slevel, flags, &stack)) != 0)
+ return (ret);
+ lock_mode = cp->csp->lock_mode;
+ lock = cp->csp->lock;
+ h = cp->csp->page;
+
+ BT_STK_CLR(cp);
/* Choose a comparison function. */
func = F_ISSET(dbc, DBC_OPD) ?
@@ -168,6 +212,23 @@ try_again:
for (;;) {
inp = P_INP(dbp, h);
+ adjust = TYPE(h) == P_LBTREE ? P_INDX : O_INDX;
+ if (LF_ISSET(SR_MIN | SR_MAX)) {
+ if (LF_ISSET(SR_MIN) || NUM_ENT(h) == 0)
+ indx = 0;
+ else if (TYPE(h) == P_LBTREE)
+ indx = NUM_ENT(h) - 2;
+ else
+ indx = NUM_ENT(h) - 1;
+
+ if (LEVEL(h) == LEAFLEVEL ||
+ (!LF_ISSET(SR_START) && LEVEL(h) == slevel)) {
+ if (LF_ISSET(SR_NEXT))
+ goto get_next;
+ goto found;
+ }
+ goto next;
+ }
/*
* 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
@@ -175,16 +236,20 @@ try_again:
* page, they're an index per page item. If we find an exact
* match on a leaf page, we're done.
*/
- adjust = TYPE(h) == P_LBTREE ? P_INDX : O_INDX;
for (base = 0,
lim = NUM_ENT(h) / (db_indx_t)adjust; lim != 0; lim >>= 1) {
indx = base + ((lim >> 1) * adjust);
- if ((ret =
- __bam_cmp(dbp, key, h, indx, func, &cmp)) != 0)
+ if ((ret = __bam_cmp(dbp, dbc->txn, key,
+ h, indx, func, &cmp)) != 0)
goto err;
if (cmp == 0) {
- if (TYPE(h) == P_LBTREE || TYPE(h) == P_LDUP)
+ if (LEVEL(h) == LEAFLEVEL ||
+ (!LF_ISSET(SR_START) &&
+ LEVEL(h) == slevel)) {
+ if (LF_ISSET(SR_NEXT))
+ goto get_next;
goto found;
+ }
goto next;
}
if (cmp > 0) {
@@ -197,19 +262,21 @@ try_again:
* No match found. Base is the smallest index greater than
* key and may be zero or a last + O_INDX index.
*
- * If it's a leaf page, return base as the "found" value.
+ * If it's a leaf page or the stopping point,
+ * return base as the "found" value.
* Delete only deletes exact matches.
*/
- if (TYPE(h) == P_LBTREE || TYPE(h) == P_LDUP) {
+ if (LEVEL(h) == LEAFLEVEL ||
+ (!LF_ISSET(SR_START) && LEVEL(h) == slevel)) {
*exactp = 0;
- if (LF_ISSET(S_EXACT)) {
+ if (LF_ISSET(SR_EXACT)) {
ret = DB_NOTFOUND;
goto err;
}
- if (LF_ISSET(S_STK_ONLY)) {
- BT_STK_NUM(dbp->dbenv, cp, h, base, ret);
+ if (LF_ISSET(SR_STK_ONLY)) {
+ BT_STK_NUM(dbenv, cp, h, base, ret);
if ((t_ret =
__LPUT(dbc, lock)) != 0 && ret == 0)
ret = t_ret;
@@ -218,6 +285,43 @@ try_again:
ret = t_ret;
return (ret);
}
+ if (LF_ISSET(SR_NEXT)) {
+get_next: /*
+ * The caller could have asked for a NEXT
+ * at the root if the tree recently collapsed.
+ */
+ if (PGNO(h) == root_pgno) {
+ ret = DB_NOTFOUND;
+ goto err;
+ }
+ /*
+ * Save the root of the subtree
+ * and drop the rest of the subtree
+ * and search down again starting at
+ * the next child.
+ */
+ if ((ret = __LPUT(dbc, lock)) != 0)
+ goto err;
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
+ goto err;
+ h = NULL;
+ LF_SET(SR_MIN);
+ LF_CLR(SR_NEXT);
+ indx = cp->sp->indx + 1;
+ if (indx == NUM_ENT(cp->sp->page)) {
+ ret = DB_NOTFOUND;
+ cp->csp++;
+ goto err;
+ }
+ h = cp->sp->page;
+ cp->sp->page = NULL;
+ lock = cp->sp->lock;
+ LOCK_INIT(cp->sp->lock);
+ if ((ret = __bam_stkrel(dbc, STK_NOLOCK)) != 0)
+ goto err;
+ stack = 1;
+ goto next;
+ }
/*
* !!!
@@ -227,8 +331,9 @@ try_again:
* to find an undeleted record. This is handled by the
* calling routine.
*/
- BT_STK_ENTER(dbp->dbenv,
- cp, h, base, lock, lock_mode, ret);
+ if (LF_ISSET(SR_DEL) && cp->csp == cp->sp)
+ cp->csp++;
+ BT_STK_ENTER(dbenv, cp, h, base, lock, lock_mode, ret);
if (ret != 0)
goto err;
return (0);
@@ -252,9 +357,13 @@ next: if (recnop != NULL)
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);
+ /* See if we are at the level to start stacking. */
+ if (LF_ISSET(SR_START) && slevel == LEVEL(h))
+ stack = 1;
+
+ if (LF_ISSET(SR_STK_ONLY)) {
+ if (slevel == LEVEL(h)) {
+ BT_STK_NUM(dbenv, cp, h, indx, ret);
if ((t_ret =
__LPUT(dbc, lock)) != 0 && ret == 0)
ret = t_ret;
@@ -263,7 +372,7 @@ next: if (recnop != NULL)
ret = t_ret;
return (ret);
}
- BT_STK_NUMPUSH(dbp->dbenv, cp, h, indx, ret);
+ BT_STK_NUMPUSH(dbenv, cp, h, indx, ret);
(void)__memp_fput(mpf, h, 0);
h = NULL;
if ((ret = __db_lget(dbc,
@@ -278,14 +387,25 @@ next: if (recnop != NULL)
}
} else if (stack) {
/* Return if this is the lowest page wanted. */
- if (LF_ISSET(S_PARENT) && stop == h->level) {
- BT_STK_ENTER(dbp->dbenv,
+ if (LF_ISSET(SR_PARENT) && slevel == LEVEL(h)) {
+ BT_STK_ENTER(dbenv,
cp, h, indx, lock, lock_mode, ret);
if (ret != 0)
goto err;
return (0);
}
- BT_STK_PUSH(dbp->dbenv,
+ if (LF_ISSET(SR_DEL) && NUM_ENT(h) > 1) {
+ /*
+ * There was a page with a singleton pointer
+ * to a non-empty subtree.
+ */
+ cp->csp--;
+ if ((ret = __bam_stkrel(dbc, STK_NOLOCK)) != 0)
+ goto err;
+ stack = 0;
+ goto do_del;
+ }
+ BT_STK_PUSH(dbenv,
cp, h, indx, lock, lock_mode, ret);
if (ret != 0)
goto err;
@@ -301,17 +421,70 @@ next: if (recnop != NULL)
* page in the return stack. If so, lock it and never
* unlock it.
*/
- if ((LF_ISSET(S_PARENT) &&
- (u_int8_t)(stop + 1) >= (u_int8_t)(h->level - 1)) ||
- (h->level - 1) == LEAFLEVEL)
+ if ((LF_ISSET(SR_PARENT) &&
+ (u_int8_t)(slevel + 1) >= (LEVEL(h) - 1)) ||
+ (LEVEL(h) - 1) == LEAFLEVEL)
stack = 1;
- if ((ret = __memp_fput(mpf, h, 0)) != 0)
- goto err;
- h = NULL;
+ /*
+ * Returning a subtree. See if we have hit the start
+ * point if so save the parent and set stack.
+ * Otherwise free the parent and temporarily
+ * save this one.
+ * For SR_DEL we need to find a page with 1 entry.
+ * For SR_NEXT we want find the minimal subtree
+ * that contains the key and the next page.
+ * We save pages as long as we are at the right
+ * edge of the subtree. When we leave the right
+ * edge, then drop the subtree.
+ */
+ if (!LF_ISSET(SR_DEL | SR_NEXT)) {
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
+ goto err;
+ goto lock_next;
+ }
- lock_mode = stack &&
- LF_ISSET(S_WRITE) ? DB_LOCK_WRITE : DB_LOCK_READ;
+ if ((LF_ISSET(SR_DEL) && NUM_ENT(h) == 1)) {
+ stack = 1;
+ LF_SET(SR_WRITE);
+ /* Push the parent. */
+ cp->csp++;
+ /* Push this node. */
+ BT_STK_PUSH(dbenv, cp, h,
+ indx, lock, lock_mode, ret);
+ if (ret != 0)
+ goto err;
+ LOCK_INIT(lock);
+ } else {
+ /*
+ * See if we want to save the tree so far.
+ * If we are looking for the next key,
+ * then we must save this node if we are
+ * at the end of the page. If not then
+ * discard anything we have saved so far.
+ * For delete only keep one node until
+ * we find a singleton.
+ */
+do_del: if (cp->csp->page != NULL) {
+ if (LF_ISSET(SR_NEXT) &&
+ indx == NUM_ENT(h) - 1)
+ cp->csp++;
+ else if ((ret =
+ __bam_stkrel(dbc, STK_NOLOCK)) != 0)
+ goto err;
+ }
+ /* Save this node. */
+ BT_STK_ENTER(dbenv, cp,
+ h, indx, lock, lock_mode, ret);
+ if (ret != 0)
+ goto err;
+ LOCK_INIT(lock);
+ }
+
+lock_next: h = NULL;
+
+ if (stack && LF_ISSET(SR_WRITE))
+ lock_mode = DB_LOCK_WRITE;
if ((ret = __db_lget(dbc,
LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
/*
@@ -320,10 +493,12 @@ next: if (recnop != NULL)
* descending the tree holding read-locks.
*/
(void)__LPUT(dbc, lock);
+ if (LF_ISSET(SR_DEL | SR_NEXT))
+ cp->csp++;
goto err;
}
}
- if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, 0, &h)) != 0)
goto err;
}
/* NOTREACHED */
@@ -340,12 +515,12 @@ found: *exactp = 1;
* all duplicate sets that are not on overflow pages exist on a
* single leaf page.
*/
- if (TYPE(h) == P_LBTREE) {
- if (LF_ISSET(S_DUPLAST))
+ if (TYPE(h) == P_LBTREE && NUM_ENT(h) > P_INDX) {
+ if (LF_ISSET(SR_DUPLAST))
while (indx < (db_indx_t)(NUM_ENT(h) - P_INDX) &&
inp[indx] == inp[indx + P_INDX])
indx += P_INDX;
- else
+ else if (LF_ISSET(SR_DUPFIRST))
while (indx > 0 &&
inp[indx] == inp[indx - P_INDX])
indx -= P_INDX;
@@ -354,13 +529,13 @@ found: *exactp = 1;
/*
* Now check if we are allowed to return deleted items; if not, then
* find the next (or previous) non-deleted duplicate entry. (We do
- * not move from the original found key on the basis of the S_DELNO
+ * not move from the original found key on the basis of the SR_DELNO
* flag.)
*/
- DB_ASSERT(recnop == NULL || LF_ISSET(S_DELNO));
- if (LF_ISSET(S_DELNO)) {
+ DB_ASSERT(dbenv, recnop == NULL || LF_ISSET(SR_DELNO));
+ if (LF_ISSET(SR_DELNO)) {
deloffset = TYPE(h) == P_LBTREE ? O_INDX : 0;
- if (LF_ISSET(S_DUPLAST))
+ if (LF_ISSET(SR_DUPLAST))
while (B_DISSET(GET_BKEYDATA(dbp,
h, indx + deloffset)->type) && indx > 0 &&
inp[indx] == inp[indx - adjust])
@@ -388,7 +563,7 @@ found: *exactp = 1;
* duplicates and record numbers in the same tree.
*/
if (recnop != NULL) {
- DB_ASSERT(TYPE(h) == P_LBTREE);
+ DB_ASSERT(dbenv, TYPE(h) == P_LBTREE);
for (i = 0; i < indx; i += P_INDX)
if (!B_DISSET(
@@ -400,14 +575,17 @@ found: *exactp = 1;
}
}
- if (LF_ISSET(S_STK_ONLY)) {
- BT_STK_NUM(dbp->dbenv, cp, h, indx, ret);
+ if (LF_ISSET(SR_STK_ONLY)) {
+ BT_STK_NUM(dbenv, cp, h, indx, ret);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
ret = t_ret;
- } else
- BT_STK_ENTER(dbp->dbenv, cp, h, indx, lock, lock_mode, ret);
+ } else {
+ if (LF_ISSET(SR_DEL) && cp->csp == cp->sp)
+ cp->csp++;
+ BT_STK_ENTER(dbenv, cp, h, indx, lock, lock_mode, ret);
+ }
if (ret != 0)
goto err;
@@ -471,6 +649,13 @@ __bam_stkrel(dbc, flags)
*/
epg->page = NULL;
}
+ /*
+ * We set this if we need to release our pins,
+ * but are not logically ready to have the pages
+ * visible.
+ */
+ if (LF_ISSET(STK_PGONLY))
+ continue;
if (LF_ISSET(STK_NOLOCK)) {
if ((t_ret = __LPUT(dbc, epg->lock)) != 0 && ret == 0)
ret = t_ret;
@@ -480,7 +665,8 @@ __bam_stkrel(dbc, flags)
}
/* Clear the stack, all pages have been released. */
- BT_STK_CLR(cp);
+ if (!LF_ISSET(STK_PGONLY))
+ BT_STK_CLR(cp);
return (ret);
}
diff --git a/db/btree/bt_split.c b/db/btree/bt_split.c
index 3e2cb4e6d..9c2a12f9f 100644
--- a/db/btree/bt_split.c
+++ b/db/btree/bt_split.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -36,27 +36,19 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: bt_split.c,v 11.66 2004/10/01 13:00:21 bostic Exp $
+ * $Id: bt_split.c,v 12.16 2006/09/08 18:41:05 bostic Exp $
*/
#include "db_config.h"
-#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/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 *));
-static int __bam_pinsert __P((DBC *, EPG *, PAGE *, PAGE *, int));
static int __bam_psplit __P((DBC *, EPG *, PAGE *, PAGE *, db_indx_t *));
static int __bam_root __P((DBC *, EPG *));
static int __ram_root __P((DBC *, PAGE *, PAGE *, PAGE *));
@@ -114,9 +106,9 @@ __bam_split(dbc, arg, root_pgnop)
*/
if ((ret = (dbc->dbtype == DB_BTREE ?
__bam_search(dbc, PGNO_INVALID,
- arg, S_WRPAIR, level, NULL, &exact) :
+ arg, SR_WRPAIR, level, NULL, &exact) :
__bam_rsearch(dbc,
- (db_recno_t *)arg, S_WRPAIR, level, &exact))) != 0)
+ (db_recno_t *)arg, SR_WRPAIR, level, &exact))) != 0)
break;
if (root_pgnop != NULL)
@@ -192,12 +184,15 @@ __bam_root(dbc, cp)
/* Yeah, right. */
if (cp->page->level >= MAXBTREELEVEL) {
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"Too many btree levels: %d", cp->page->level);
ret = ENOSPC;
goto err;
}
+ if ((ret = __memp_dirty(mpf, &cp->page, dbc->txn, 0)) != 0)
+ goto err;
+
/* Create new left and right pages for the split. */
if ((ret = __db_new(dbc, TYPE(cp->page), &lp)) != 0 ||
(ret = __db_new(dbc, TYPE(cp->page), &rp)) != 0)
@@ -241,16 +236,13 @@ __bam_root(dbc, cp)
ret = __bam_ca_split(dbc, cp->page->pgno, lp->pgno, rp->pgno, split, 1);
/* Success or error: release pages and locks. */
-err: if ((t_ret =
- __memp_fput(mpf, cp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+err: if ((t_ret = __memp_fput(mpf, cp->page, 0)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, cp->lock)) != 0 && ret == 0)
ret = t_ret;
- if (lp != NULL &&
- (t_ret = __memp_fput(mpf, lp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if (lp != NULL && (t_ret = __memp_fput(mpf, lp, 0)) != 0 && ret == 0)
ret = t_ret;
- if (rp != NULL &&
- (t_ret = __memp_fput(mpf, rp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if (rp != NULL && (t_ret = __memp_fput(mpf, rp, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -338,7 +330,7 @@ __bam_page(dbc, pp, cp)
* page can't hold the new keys, and has to be split in turn, in which
* case we want to release all the locks we can.
*/
- if ((ret = __bam_pinsert(dbc, pp, lp, rp, 1)) != 0)
+ if ((ret = __bam_pinsert(dbc, pp, lp, rp, BPI_SPACEONLY)) != 0)
goto err;
/*
@@ -349,14 +341,15 @@ __bam_page(dbc, pp, cp)
* a page that's not in our direct ancestry. Consider a cursor walking
* backward through the leaf pages, that has our following page locked,
* and is waiting on a lock for the page we're splitting. In that case
- * we're going to deadlock here . It's probably OK, stepping backward
+ * we're going to deadlock here. It's probably OK, stepping backward
* through the tree isn't a common operation.
*/
if (ISLEAF(cp->page) && NEXT_PGNO(cp->page) != PGNO_INVALID) {
if ((ret = __db_lget(dbc,
0, NEXT_PGNO(cp->page), DB_LOCK_WRITE, 0, &tplock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &NEXT_PGNO(cp->page), 0, &tp)) != 0)
+ if ((ret = __memp_fget(mpf, &NEXT_PGNO(cp->page),
+ dbc->txn, DB_MPOOL_DIRTY, &tp)) != 0)
goto err;
}
@@ -387,8 +380,12 @@ __bam_page(dbc, pp, cp)
*/
PGNO(rp) = NEXT_PGNO(lp) = PGNO(alloc_rp);
+ if ((ret = __memp_dirty(mpf, &cp->page, dbc->txn, 0)) != 0)
+ goto err;
+
/* Actually update the parent page. */
- if ((ret = __bam_pinsert(dbc, pp, lp, rp, 0)) != 0)
+ if ((ret = __memp_dirty(mpf, &pp->page, dbc->txn, 0)) != 0 ||
+ (ret = __bam_pinsert(dbc, pp, lp, rp, 0)) != 0)
goto err;
bc = (BTREE_CURSOR *)dbc->internal;
@@ -458,24 +455,20 @@ __bam_page(dbc, pp, cp)
* releasing locks on the pages that reference it. We're finished
* modifying the page so it's not really necessary, but it's neater.
*/
- if ((t_ret =
- __memp_fput(mpf, alloc_rp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, alloc_rp, 0)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, rplock)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret =
- __memp_fput(mpf, pp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, pp->page, 0)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, pp->lock)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret =
- __memp_fput(mpf, cp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, cp->page, 0)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, cp->lock)) != 0 && ret == 0)
ret = t_ret;
if (tp != NULL) {
- if ((t_ret =
- __memp_fput(mpf, tp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, tp, 0)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, tplock)) != 0 && ret == 0)
ret = t_ret;
@@ -521,6 +514,7 @@ __bam_broot(dbc, rootp, lp, rp)
{
BINTERNAL bi, *child_bi;
BKEYDATA *child_bk;
+ BOVERFLOW bo, *child_bo;
BTREE_CURSOR *cp;
DB *dbp;
DBT hdr, data;
@@ -539,9 +533,6 @@ __bam_broot(dbc, rootp, lp, rp)
P_INIT(rootp, dbp->pgsize,
root_pgno, PGNO_INVALID, PGNO_INVALID, lp->level + 1, P_IBTREE);
- memset(&data, 0, sizeof(data));
- memset(&hdr, 0, sizeof(hdr));
-
/*
* The btree comparison code guarantees that the left-most key on any
* internal btree page is never used, so it doesn't need to be filled
@@ -549,14 +540,13 @@ __bam_broot(dbc, rootp, lp, rp)
*/
memset(&bi, 0, sizeof(bi));
bi.len = 0;
- B_TSET(bi.type, B_KEYDATA, 0);
+ B_TSET(bi.type, B_KEYDATA);
bi.pgno = lp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
bi.nrecs = __bam_total(dbp, lp);
RE_NREC_SET(rootp, bi.nrecs);
}
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
if ((ret =
__db_pitem(dbc, rootp, 0, BINTERNAL_SIZE(0), &hdr, NULL)) != 0)
return (ret);
@@ -565,27 +555,28 @@ __bam_broot(dbc, rootp, lp, rp)
case P_IBTREE:
/* Copy the first key of the child page onto the root page. */
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(dbp, rp);
- RE_NREC_ADJ(rootp, bi.nrecs);
- }
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
- data.data = child_bi->data;
- data.size = child_bi->len;
- if ((ret = __db_pitem(dbc, rootp, 1,
- BINTERNAL_SIZE(child_bi->len), &hdr, &data)) != 0)
- return (ret);
-
- /* Increment the overflow ref count. */
- if (B_TYPE(child_bi->type) == B_OVERFLOW)
- if ((ret = __db_ovref(dbc,
- ((BOVERFLOW *)(child_bi->data))->pgno, 1)) != 0)
+ switch (B_TYPE(child_bi->type)) {
+ case B_KEYDATA:
+ bi.len = child_bi->len;
+ B_TSET(bi.type, B_KEYDATA);
+ bi.pgno = rp->pgno;
+ if (F_ISSET(cp, C_RECNUM)) {
+ bi.nrecs = __bam_total(dbp, rp);
+ RE_NREC_ADJ(rootp, bi.nrecs);
+ }
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
+ DB_SET_DBT(data, child_bi->data, child_bi->len);
+ if ((ret = __db_pitem(dbc, rootp, 1,
+ BINTERNAL_SIZE(child_bi->len), &hdr, &data)) != 0)
return (ret);
+ break;
+ case B_OVERFLOW:
+ child_bo = (BOVERFLOW *)child_bi->data;
+ goto do_overflow;
+ case B_DUPLICATE:
+ default:
+ goto pgfmt;
+ }
break;
case P_LDUP:
case P_LBTREE:
@@ -594,49 +585,55 @@ __bam_broot(dbc, rootp, lp, rp)
switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
bi.len = child_bk->len;
- B_TSET(bi.type, child_bk->type, 0);
+ B_TSET(bi.type, B_KEYDATA);
bi.pgno = rp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
bi.nrecs = __bam_total(dbp, rp);
RE_NREC_ADJ(rootp, bi.nrecs);
}
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
- data.data = child_bk->data;
- data.size = child_bk->len;
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
+ DB_SET_DBT(data, child_bk->data, child_bk->len);
if ((ret = __db_pitem(dbc, rootp, 1,
BINTERNAL_SIZE(child_bk->len), &hdr, &data)) != 0)
return (ret);
break;
- case B_DUPLICATE:
case B_OVERFLOW:
+ /* Copy the overflow key. */
+ child_bo = (BOVERFLOW *)child_bk;
+do_overflow: memset(&bo, 0, sizeof(bo));
+ bo.type = B_OVERFLOW;
+ bo.tlen = child_bo->tlen;
+ memset(&hdr, 0, sizeof(hdr));
+ if ((ret = __db_goff(dbp,
+ dbc->txn, &hdr, child_bo->tlen,
+ child_bo->pgno, &hdr.data, &hdr.size)) == 0)
+ ret = __db_poff(dbc, &hdr, &bo.pgno);
+
+ if (hdr.data != NULL)
+ __os_free(dbp->dbenv, hdr.data);
+ if (ret != 0)
+ return (ret);
+
bi.len = BOVERFLOW_SIZE;
- B_TSET(bi.type, child_bk->type, 0);
+ B_TSET(bi.type, B_OVERFLOW);
bi.pgno = rp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
bi.nrecs = __bam_total(dbp, rp);
RE_NREC_ADJ(rootp, bi.nrecs);
}
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
- data.data = child_bk;
- data.size = BOVERFLOW_SIZE;
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
+ DB_SET_DBT(data, &bo, BOVERFLOW_SIZE);
if ((ret = __db_pitem(dbc, rootp, 1,
BINTERNAL_SIZE(BOVERFLOW_SIZE), &hdr, &data)) != 0)
return (ret);
-
- /* Increment the overflow ref count. */
- if (B_TYPE(child_bk->type) == B_OVERFLOW)
- if ((ret = __db_ovref(dbc,
- ((BOVERFLOW *)child_bk)->pgno, 1)) != 0)
- return (ret);
break;
+ case B_DUPLICATE:
default:
- return (__db_pgfmt(dbp->dbenv, rp->pgno));
+ goto pgfmt;
}
break;
default:
- return (__db_pgfmt(dbp->dbenv, rp->pgno));
+pgfmt: return (__db_pgfmt(dbp->dbenv, rp->pgno));
}
return (0);
}
@@ -664,9 +661,7 @@ __ram_root(dbc, rootp, lp, rp)
root_pgno, PGNO_INVALID, PGNO_INVALID, lp->level + 1, P_IRECNO);
/* Initialize the header. */
- memset(&hdr, 0, sizeof(hdr));
- hdr.data = &ri;
- hdr.size = RINTERNAL_SIZE;
+ DB_SET_DBT(hdr, &ri, RINTERNAL_SIZE);
/* Insert the left and right keys, set the header information. */
ri.pgno = lp->pgno;
@@ -685,16 +680,19 @@ __ram_root(dbc, rootp, lp, rp)
/*
* __bam_pinsert --
* Insert a new key into a parent page, completing the split.
+ *
+ * PUBLIC: int __bam_pinsert __P((DBC *, EPG *, PAGE *, PAGE *, int));
*/
-static int
-__bam_pinsert(dbc, parent, lchild, rchild, space_check)
+int
+__bam_pinsert(dbc, parent, lchild, rchild, flags)
DBC *dbc;
EPG *parent;
PAGE *lchild, *rchild;
- int space_check;
+ int flags;
{
BINTERNAL bi, *child_bi;
BKEYDATA *child_bk, *tmp_bk;
+ BOVERFLOW bo, *child_bo;
BTREE *t;
BTREE_CURSOR *cp;
DB *dbp;
@@ -714,7 +712,7 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
/* If handling record numbers, count records split to the right page. */
nrecs = F_ISSET(cp, C_RECNUM) &&
- !space_check ? __bam_total(dbp, rchild) : 0;
+ !LF_ISSET(BPI_SPACEONLY) ? __bam_total(dbp, rchild) : 0;
/*
* Now we insert the new page's first key into the parent page, which
@@ -750,37 +748,41 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
- if (space_check)
+ if (LF_ISSET(BPI_SPACEONLY))
return (0);
- /* Add a new record for the right page. */
- memset(&bi, 0, sizeof(bi));
- bi.len = child_bi->len;
- B_TSET(bi.type, child_bi->type, 0);
- bi.pgno = rchild->pgno;
- bi.nrecs = nrecs;
- memset(&hdr, 0, sizeof(hdr));
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
- memset(&data, 0, sizeof(data));
- data.data = child_bi->data;
- data.size = child_bi->len;
- if ((ret = __db_pitem(dbc, ppage, off,
- BINTERNAL_SIZE(child_bi->len), &hdr, &data)) != 0)
- return (ret);
-
- /* Increment the overflow ref count. */
- if (B_TYPE(child_bi->type) == B_OVERFLOW)
- if ((ret = __db_ovref(dbc,
- ((BOVERFLOW *)(child_bi->data))->pgno, 1)) != 0)
+ switch (B_TYPE(child_bi->type)) {
+ case B_KEYDATA:
+ /* Add a new record for the right page. */
+ memset(&bi, 0, sizeof(bi));
+ bi.len = child_bi->len;
+ B_TSET(bi.type, B_KEYDATA);
+ bi.pgno = rchild->pgno;
+ bi.nrecs = nrecs;
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
+ DB_SET_DBT(data, child_bi->data, child_bi->len);
+ if ((ret = __db_pitem(dbc, ppage, off,
+ BINTERNAL_SIZE(child_bi->len), &hdr, &data)) != 0)
return (ret);
+ break;
+ case B_OVERFLOW:
+ child_bo = (BOVERFLOW *)child_bi->data;
+ goto do_overflow;
+ case B_DUPLICATE:
+ default:
+ goto pgfmt;
+ }
break;
case P_LDUP:
case P_LBTREE:
child_bk = GET_BKEYDATA(dbp, rchild, 0);
switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
+ nbytes = BINTERNAL_PSIZE(child_bk->len);
+ nksize = child_bk->len;
+
/*
+ * Prefix compression:
* We set t->bt_prefix to NULL if we have a comparison
* callback but no prefix compression callback. But,
* if we're splitting in an off-page duplicates tree,
@@ -792,6 +794,14 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
* as there's no way for an application to specify a
* prefix compression callback that corresponds to its
* comparison callback.
+ *
+ * No prefix compression if we don't have a compression
+ * function, or the key we'd compress isn't a normal
+ * key (for example, it references an overflow page).
+ *
+ * Generate a parent page key for the right child page
+ * from a comparison of the last key on the left child
+ * page and the first key on the right child page.
*/
if (F_ISSET(dbc, DBC_OPD)) {
if (dbp->dup_compare == __bam_defcmp)
@@ -800,81 +810,75 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
func = NULL;
} else
func = t->bt_prefix;
-
- nbytes = BINTERNAL_PSIZE(child_bk->len);
- nksize = child_bk->len;
if (func == NULL)
goto noprefix;
- if (ppage->prev_pgno == PGNO_INVALID && off <= 1)
- goto noprefix;
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;
- memset(&a, 0, sizeof(a));
- a.size = tmp_bk->len;
- a.data = tmp_bk->data;
- memset(&b, 0, sizeof(b));
- b.size = child_bk->len;
- b.data = child_bk->data;
+ DB_SET_DBT(a, tmp_bk->data, tmp_bk->len);
+ DB_SET_DBT(b, child_bk->data, child_bk->len);
nksize = (u_int32_t)func(dbp, &a, &b);
if ((n = BINTERNAL_PSIZE(nksize)) < nbytes)
nbytes = n;
else
-noprefix: nksize = child_bk->len;
+ nksize = child_bk->len;
- if (P_FREESPACE(dbp, ppage) < nbytes)
+noprefix: if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
- if (space_check)
+ if (LF_ISSET(BPI_SPACEONLY))
return (0);
memset(&bi, 0, sizeof(bi));
bi.len = nksize;
- B_TSET(bi.type, child_bk->type, 0);
+ B_TSET(bi.type, B_KEYDATA);
bi.pgno = rchild->pgno;
bi.nrecs = nrecs;
- memset(&hdr, 0, sizeof(hdr));
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
- memset(&data, 0, sizeof(data));
- data.data = child_bk->data;
- data.size = nksize;
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
+ DB_SET_DBT(data, child_bk->data, nksize);
if ((ret = __db_pitem(dbc, ppage, off,
BINTERNAL_SIZE(nksize), &hdr, &data)) != 0)
return (ret);
break;
- case B_DUPLICATE:
case B_OVERFLOW:
nbytes = BINTERNAL_PSIZE(BOVERFLOW_SIZE);
if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
- if (space_check)
+ if (LF_ISSET(BPI_SPACEONLY))
return (0);
+ /* Copy the overflow key. */
+ child_bo = (BOVERFLOW *)child_bk;
+do_overflow: memset(&bo, 0, sizeof(bo));
+ bo.type = B_OVERFLOW;
+ bo.tlen = child_bo->tlen;
+ memset(&hdr, 0, sizeof(hdr));
+ if ((ret = __db_goff(dbp,
+ dbc->txn, &hdr, child_bo->tlen,
+ child_bo->pgno, &hdr.data, &hdr.size)) == 0)
+ ret = __db_poff(dbc, &hdr, &bo.pgno);
+
+ if (hdr.data != NULL)
+ __os_free(dbp->dbenv, hdr.data);
+ if (ret != 0)
+ return (ret);
+
memset(&bi, 0, sizeof(bi));
bi.len = BOVERFLOW_SIZE;
- B_TSET(bi.type, child_bk->type, 0);
+ B_TSET(bi.type, B_OVERFLOW);
bi.pgno = rchild->pgno;
bi.nrecs = nrecs;
- memset(&hdr, 0, sizeof(hdr));
- hdr.data = &bi;
- hdr.size = SSZA(BINTERNAL, data);
- memset(&data, 0, sizeof(data));
- data.data = child_bk;
- data.size = BOVERFLOW_SIZE;
+ DB_SET_DBT(hdr, &bi, SSZA(BINTERNAL, data));
+ DB_SET_DBT(data, &bo, BOVERFLOW_SIZE);
if ((ret = __db_pitem(dbc, ppage, off,
BINTERNAL_SIZE(BOVERFLOW_SIZE), &hdr, &data)) != 0)
return (ret);
- /* Increment the overflow ref count. */
- if (B_TYPE(child_bk->type) == B_OVERFLOW)
- if ((ret = __db_ovref(dbc,
- ((BOVERFLOW *)child_bk)->pgno, 1)) != 0)
- return (ret);
break;
+ case B_DUPLICATE:
default:
- return (__db_pgfmt(dbp->dbenv, rchild->pgno));
+ goto pgfmt;
}
break;
case P_IRECNO:
@@ -883,13 +887,11 @@ noprefix: nksize = child_bk->len;
if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
- if (space_check)
+ if (LF_ISSET(BPI_SPACEONLY))
return (0);
/* Add a new record for the right page. */
- memset(&hdr, 0, sizeof(hdr));
- hdr.data = &ri;
- hdr.size = RINTERNAL_SIZE;
+ DB_SET_DBT(hdr, &ri, RINTERNAL_SIZE);
ri.pgno = rchild->pgno;
ri.nrecs = nrecs;
if ((ret = __db_pitem(dbc,
@@ -897,20 +899,20 @@ noprefix: nksize = child_bk->len;
return (ret);
break;
default:
- return (__db_pgfmt(dbp->dbenv, rchild->pgno));
+pgfmt: return (__db_pgfmt(dbp->dbenv, rchild->pgno));
}
/*
* If a Recno or Btree with record numbers AM page, or an off-page
* duplicates tree, adjust the parent page's left page record count.
*/
- if (F_ISSET(cp, C_RECNUM)) {
+ if (F_ISSET(cp, C_RECNUM) && !LF_ISSET(BPI_NORECNUM)) {
/* Log the change. */
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);
+ 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));
@@ -958,7 +960,7 @@ __bam_psplit(dbc, cp, lp, rp, splitret)
* 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).
+ * set (the last because the search call specified the SR_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.
diff --git a/db/btree/bt_stat.c b/db/btree/bt_stat.c
index 9d99ee2c4..05415eedd 100644
--- a/db/btree/bt_stat.c
+++ b/db/btree/bt_stat.c
@@ -1,24 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_stat.c,v 11.78 2004/09/22 03:31:26 bostic Exp $
+ * $Id: bt_stat.c,v 12.12 2006/08/24 14:44:45 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/btree.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -71,11 +63,9 @@ __bam_stat(dbc, spp, flags)
pgno = PGNO_BASE_MD;
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 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;
@@ -83,7 +73,7 @@ __bam_stat(dbc, spp, flags)
for (sp->bt_free = 0, pgno = meta->dbmeta.free; pgno != PGNO_INVALID;) {
++sp->bt_free;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &h)) != 0)
goto err;
pgno = h->next_pgno;
@@ -96,7 +86,7 @@ __bam_stat(dbc, spp, flags)
pgno = cp->root;
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &h)) != 0)
goto err;
/* Get the levels from the root page. */
@@ -119,9 +109,10 @@ __bam_stat(dbc, spp, flags)
* Get the subdatabase metadata page if it's not the same as the
* one we already have.
*/
- write_meta = !F_ISSET(dbp, DB_AM_RDONLY);
+ write_meta = !F_ISSET(dbp, DB_AM_RDONLY) &&
+ (!MULTIVERSION(dbp) || dbc->txn != NULL);
meta_only:
- if (t->bt_meta != PGNO_BASE_MD || write_meta != 0) {
+ if (t->bt_meta != PGNO_BASE_MD || write_meta) {
ret = __memp_fput(mpf, meta, 0);
meta = NULL;
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
@@ -130,10 +121,11 @@ meta_only:
goto err;
if ((ret = __db_lget(dbc,
- 0, t->bt_meta, write_meta == 0 ?
- DB_LOCK_READ : DB_LOCK_WRITE, 0, &metalock)) != 0)
+ 0, t->bt_meta, write_meta ? DB_LOCK_WRITE : DB_LOCK_READ,
+ 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &t->bt_meta, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &t->bt_meta, dbc->txn,
+ write_meta ? DB_MPOOL_DIRTY : 0, &meta)) != 0)
goto err;
}
if (flags == DB_FAST_STAT) {
@@ -142,7 +134,8 @@ meta_only:
if ((ret = __db_lget(dbc, 0,
cp->root, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &cp->root, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->root, dbc->txn,
+ 0, &h)) != 0)
goto err;
sp->bt_nkeys = RE_NREC(h);
@@ -155,7 +148,6 @@ meta_only:
/* Get metadata page statistics. */
sp->bt_metaflags = meta->dbmeta.flags;
- sp->bt_maxkey = meta->maxkey;
sp->bt_minkey = meta->minkey;
sp->bt_re_len = meta->re_len;
sp->bt_re_pad = meta->re_pad;
@@ -179,8 +171,8 @@ err: /* Discard the second page. */
/* Discard the metadata page. */
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
- if (meta != NULL && (t_ret = __memp_fput(
- mpf, meta, write_meta == 0 ? 0 : DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if (meta != NULL &&
+ (t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0 && sp != NULL) {
@@ -221,7 +213,7 @@ __bam_stat_print(dbc, flags)
dbp = dbc->dbp;
dbenv = dbp->dbenv;
- if ((ret = __bam_stat(dbc, &sp, 0)) != 0)
+ if ((ret = __bam_stat(dbc, &sp, LF_ISSET(DB_FAST_STAT))) != 0)
return (ret);
if (LF_ISSET(DB_STAT_ALL)) {
@@ -246,20 +238,19 @@ __bam_stat_print(dbc, flags)
}
__db_msg(dbenv, "%s\tByte order", s);
__db_prflags(dbenv, NULL, sp->bt_metaflags, fn, NULL, "\tFlags");
- if (dbp->type == DB_BTREE) {
-#ifdef NOT_IMPLEMENTED
- __db_dl(dbenv, "Maximum keys per-page", (u_long)sp->bt_maxkey);
-#endif
+ if (dbp->type == DB_BTREE)
__db_dl(dbenv, "Minimum keys per-page", (u_long)sp->bt_minkey);
- }
if (dbp->type == DB_RECNO) {
__db_dl(dbenv,
"Fixed-length record size", (u_long)sp->bt_re_len);
- __db_dl(dbenv,
+ __db_msg(dbenv,
"%#x\tFixed-length record pad", (u_int)sp->bt_re_pad);
}
__db_dl(dbenv,
"Underlying database page size", (u_long)sp->bt_pagesize);
+ if (dbp->type == DB_BTREE)
+ __db_dl(dbenv, "Overflow key/data size",
+ ((BTREE_CURSOR *)dbc->internal)->ovflsize);
__db_dl(dbenv, "Number of levels in the tree", (u_long)sp->bt_levels);
__db_dl(dbenv, dbp->type == DB_BTREE ?
"Number of unique keys in the tree" :
@@ -485,7 +476,7 @@ __bam_key_range(dbc, dbt, kp, flags)
COMPQUIET(flags, 0);
if ((ret = __bam_search(dbc, PGNO_INVALID,
- dbt, S_STK_ONLY, 1, NULL, &exact)) != 0)
+ dbt, SR_STK_ONLY, 1, NULL, &exact)) != 0)
return (ret);
cp = (BTREE_CURSOR *)dbc->internal;
@@ -565,7 +556,7 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
if ((ret = __db_lget(dbc, 0, root_pgno, mode, 0, &lock)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf, &root_pgno, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &root_pgno, dbc->txn, 0, &h)) != 0) {
(void)__TLPUT(dbc, lock);
return (ret);
}
@@ -576,7 +567,7 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
bi = GET_BINTERNAL(dbp, h, indx);
if (B_TYPE(bi->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
- ((BOVERFLOW *)bi->data)->pgno,
+ ((BOVERFLOW *)bi->data)->pgno, dbc->txn,
callback, cookie)) != 0)
goto err;
if ((ret = __bam_traverse(
@@ -601,7 +592,7 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
inp[indx] != inp[indx + P_INDX])) {
if ((ret = __db_traverse_big(dbp,
GET_BOVERFLOW(dbp, h, indx)->pgno,
- callback, cookie)) != 0)
+ dbc->txn, callback, cookie)) != 0)
goto err;
}
bk = GET_BKEYDATA(dbp, h, indx + O_INDX);
@@ -613,7 +604,7 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
if (B_TYPE(bk->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
GET_BOVERFLOW(dbp, h, indx + O_INDX)->pgno,
- callback, cookie)) != 0)
+ dbc->txn, callback, cookie)) != 0)
goto err;
}
break;
@@ -623,7 +614,7 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
- GET_BOVERFLOW(dbp, h, indx)->pgno,
+ GET_BOVERFLOW(dbp, h, indx)->pgno, dbc->txn,
callback, cookie)) != 0)
goto err;
}
diff --git a/db/btree/bt_upgrade.c b/db/btree/bt_upgrade.c
index f89901789..5c6dcdf33 100644
--- a/db/btree/bt_upgrade.c
+++ b/db/btree/bt_upgrade.c
@@ -1,18 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_upgrade.c,v 11.30 2004/01/28 03:35:49 bostic Exp $
+ * $Id: bt_upgrade.c,v 12.4 2006/08/24 14:44:45 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <string.h>
-#endif
+#include "db_config.h"
#include "db_int.h"
#include "dbinc/db_page.h"
diff --git a/db/btree/bt_verify.c b/db/btree/bt_verify.c
index 6b78cbd17..3312dd880 100644
--- a/db/btree/bt_verify.c
+++ b/db/btree/bt_verify.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: bt_verify.c,v 1.97 2004/10/11 18:47:46 bostic Exp $
+ * $Id: bt_verify.c,v 12.27 2006/09/07 20:05:25 bostic Exp $
*/
#include "db_config.h"
-#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_verify.h"
#include "dbinc/btree.h"
#include "dbinc/mp.h"
@@ -25,7 +18,7 @@
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,
db_indx_t *, u_int32_t));
-static int __bam_vrfy_treeorder __P((DB *, db_pgno_t, PAGE *, BINTERNAL *,
+static int __bam_vrfy_treeorder __P((DB *, PAGE *, BINTERNAL *,
BINTERNAL *, int (*)(DB *, const DBT *, const DBT *), u_int32_t));
static int __ram_vrfy_inp __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t,
db_indx_t *, u_int32_t));
@@ -89,10 +82,8 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
} else
pip->bt_minkey = meta->minkey;
- /* 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) */
+ pip->re_pad = meta->re_pad;
pip->re_len = meta->re_len;
/*
@@ -214,10 +205,7 @@ __ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
return (ret);
if (TYPE(h) != P_LRECNO) {
- /* We should not have been called. */
- TYPE_ERR_PRINT(dbenv, "__ram_vrfy_leaf", pgno, TYPE(h));
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__ram_vrfy_leaf");
goto err;
}
@@ -325,9 +313,7 @@ __bam_vrfy(dbp, vdp, h, pgno, flags)
case P_LDUP:
break;
default:
- TYPE_ERR_PRINT(dbenv, "__bam_vrfy", pgno, TYPE(h));
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__bam_vrfy");
goto err;
}
@@ -420,9 +406,7 @@ __ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
return (ret);
if (TYPE(h) != P_IRECNO) {
- TYPE_ERR_PRINT(dbenv, "__ram_vrfy_inp", pgno, TYPE(h));
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__ram_vrfy_inp");
goto err;
}
@@ -554,9 +538,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
*/
if (LF_ISSET(DB_SALVAGE))
break;
- TYPE_ERR_PRINT(dbenv, "__bam_vrfy_inp", pgno, TYPE(h));
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__bam_vrfy_inp");
goto err;
}
@@ -587,7 +569,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
isbad = 1;
goto err;
default:
- DB_ASSERT(ret != 0);
+ DB_ASSERT(dbenv, ret != 0);
break;
}
@@ -877,8 +859,8 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
DBT dbta, dbtb, dup_1, dup_2, *p1, *p2, *tmp;
DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
- db_indx_t i;
- int cmp, freedup_1, freedup_2, isbad, ret, t_ret;
+ db_indx_t i, *inp;
+ int adj, 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;
@@ -907,7 +889,7 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
buf1 = buf2 = NULL;
- DB_ASSERT(!LF_ISSET(DB_NOORDERCHK));
+ DB_ASSERT(dbenv, !LF_ISSET(DB_NOORDERCHK));
dupfunc = (dbp->dup_compare == NULL) ? __bam_defcmp : dbp->dup_compare;
if (TYPE(h) == P_LDUP)
@@ -939,8 +921,9 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
* Note that on IBTREE pages, we start with item 1, since item
* 0 doesn't get looked at by __bam_cmp.
*/
- for (i = (TYPE(h) == P_IBTREE) ? 1 : 0; i < nentries;
- i += (TYPE(h) == P_LBTREE) ? P_INDX : O_INDX) {
+ inp = P_INP(dbp, h);
+ adj = (TYPE(h) == P_LBTREE) ? P_INDX : O_INDX;
+ for (i = (TYPE(h) == P_IBTREE) ? 1 : 0; i < nentries; i += adj) {
/*
* Put key i-1, now in p2, into p1, by swapping DBTs and bufs.
*/
@@ -1000,10 +983,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(dbenv,
- "__bam_vrfy_itemorder", pgno, TYPE(h))
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__bam_vrfy_itemorder");
goto err;
}
@@ -1033,7 +1013,7 @@ overflow: if (!ovflok) {
* was just pointing at a non-overflow item.)
*/
p2->data = buf2;
- if ((ret = __db_goff(dbp,
+ if ((ret = __db_goff(dbp, NULL,
p2, bo->tlen, bo->pgno, NULL, NULL)) != 0) {
isbad = 1;
EPRINT((dbenv,
@@ -1046,7 +1026,7 @@ overflow: if (!ovflok) {
/* Compare with the last key. */
if (p1->data != NULL && p2->data != NULL) {
- cmp = func(dbp, p1, p2);
+ cmp = inp[i] == inp[i - adj] ? 0 : func(dbp, p1, p2);
/* comparison succeeded */
if (cmp > 0) {
@@ -1056,6 +1036,12 @@ overflow: if (!ovflok) {
(u_long)pgno, (u_long)i));
/* proceed */
} else if (cmp == 0) {
+ if (inp[i] != inp[i - adj]) {
+ EPRINT((dbenv,
+ "Page %lu: non-dup dup key at entry %lu",
+ (u_long)pgno, (u_long)i));
+ isbad = 1;
+ }
/*
* If they compared equally, this
* had better be a (sub)database with dups.
@@ -1114,7 +1100,7 @@ overflow: if (!ovflok) {
*/
if (dup_1.data == NULL ||
dup_2.data == NULL) {
- DB_ASSERT(!ovflok);
+ DB_ASSERT(dbenv, !ovflok);
F_SET(pip, VRFY_INCOMPLETE);
goto err;
}
@@ -1280,7 +1266,7 @@ __bam_vrfy_subtree(dbp, vdp, pgno, l, r, flags, levelp, nrecsp, relenp)
void *l, *r;
u_int32_t flags, *levelp, *nrecsp, *relenp;
{
- BINTERNAL *li, *ri, *lp, *rp;
+ BINTERNAL *li, *ri;
DB *pgset;
DBC *cc;
DB_ENV *dbenv;
@@ -1296,16 +1282,19 @@ __bam_vrfy_subtree(dbp, vdp, pgno, l, r, flags, levelp, nrecsp, relenp)
int (*func) __P((DB *, const DBT *, const DBT *));
int isbad, p, ret, t_ret, toplevel;
+ if (levelp != NULL) /* Don't leave uninitialized on error. */
+ *levelp = 0;
+ if (nrecsp != NULL)
+ *nrecsp = 0;
+
dbenv = dbp->dbenv;
mpf = dbp->mpf;
- ret = isbad = 0;
- nrecs = 0;
h = NULL;
+ next_pgno = prev_pgno = PGNO_INVALID;
+ nrecs = 0;
relen = 0;
leaf_type = P_INVALID;
- next_pgno = prev_pgno = PGNO_INVALID;
- rp = (BINTERNAL *)r;
- lp = (BINTERNAL *)l;
+ isbad = ret = 0;
/* Provide feedback on our progress to the application. */
if (!LF_ISSET(DB_SALVAGE))
@@ -1585,10 +1574,8 @@ bad_prev: isbad = 1;
ret = __db_vrfy_ccnext(cc, &child))
if (child->type == V_RECNO) {
if (pip->type != P_IRECNO) {
- TYPE_ERR_PRINT(dbenv, "__bam_vrfy_subtree",
- pgno, pip->type);
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(
+ dbenv, "__bam_vrfy_subtree");
goto err;
}
if ((ret = __bam_vrfy_subtree(dbp, vdp, child->pgno,
@@ -1618,8 +1605,17 @@ bad_prev: isbad = 1;
if (relenp)
*relenp = relen;
}
- if (LF_ISSET(ST_RECNUM))
+ if (LF_ISSET(ST_RECNUM)) {
+ if (child->nrecs != child_nrecs) {
+ isbad = 1;
+ EPRINT((dbenv,
+ "Page %lu: record count incorrect: actual %lu, in record %lu",
+ (u_long)child->pgno,
+ (u_long)child_nrecs,
+ (u_long)child->nrecs));
+ }
nrecs += child_nrecs;
+ }
if (isbad == 0 && level != child_level + 1) {
isbad = 1;
EPRINT((dbenv,
@@ -1647,7 +1643,7 @@ bad_prev: isbad = 1;
*/
/* Otherwise, __db_vrfy_childput would be broken. */
- DB_ASSERT(child->refcnt >= 1);
+ DB_ASSERT(dbenv, child->refcnt >= 1);
/*
* An overflow referenced more than twice here
@@ -1688,12 +1684,12 @@ bad_prev: isbad = 1;
* 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(mpf, &pgno, 0, &h)) != 0)
+ if (h == NULL && (ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
goto err;
for (i = 0; i < pip->entries; i += O_INDX) {
li = GET_BINTERNAL(dbp, h, i);
ri = (i + O_INDX < pip->entries) ?
- GET_BINTERNAL(dbp, h, i + O_INDX) : rp;
+ GET_BINTERNAL(dbp, h, i + O_INDX) : r;
/*
* The leftmost key is forcibly sorted less than all entries,
@@ -1761,7 +1757,8 @@ 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(mpf, &pgno, 0, &h)) != 0)
+ if (h == NULL &&
+ (ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
goto err;
if ((ret = __bam_vrfy_itemorder(dbp,
vdp, h, pgno, 0, 1, 0, flags)) != 0)
@@ -1780,7 +1777,8 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
* must have children).
*/
if (isbad == 0 && ret == 0) {
- if (h == NULL && (ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if (h == NULL &&
+ (ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
goto err;
if (NUM_ENT(h) == 0 && ISINTERNAL(h)) {
@@ -1797,8 +1795,10 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
* 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(mpf, &pgno, 0, &h)) != 0)
+ if (isbad == 0 && ret == 0 && !LF_ISSET(DB_NOORDERCHK) &&
+ pip->type != P_IRECNO && pip->type != P_LRECNO) {
+ if (h == NULL &&
+ (ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
goto err;
/*
@@ -1813,7 +1813,7 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
func = __bam_defcmp;
if ((ret = __bam_vrfy_treeorder(
- dbp, pgno, h, lp, rp, func, flags)) != 0) {
+ dbp, h, l, r, func, flags)) != 0) {
if (ret == DB_VERIFY_BAD)
isbad = 1;
else
@@ -1889,9 +1889,8 @@ err: if (toplevel) {
* no higher key we must sort less than.
*/
static int
-__bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
+__bam_vrfy_treeorder(dbp, h, lp, rp, func, flags)
DB *dbp;
- db_pgno_t pgno;
PAGE *h;
BINTERNAL *lp, *rp;
int (*func) __P((DB *, const DBT *, const DBT *));
@@ -1925,9 +1924,7 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
last = NUM_ENT(h) - P_INDX;
break;
default:
- TYPE_ERR_PRINT(dbenv, "__bam_vrfy_treeorder", pgno, TYPE(h));
- DB_ASSERT(0);
- return (EINVAL);
+ return (__db_unknown_path(dbenv, "__bam_vrfy_treeorder"));
}
/*
@@ -1949,19 +1946,15 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
dbt.size = lp->len;
} else if (lp->type == B_OVERFLOW) {
bo = (BOVERFLOW *)lp->data;
- if ((ret = __db_goff(dbp, &dbt, bo->tlen, bo->pgno,
- NULL, NULL)) != 0)
+ if ((ret = __db_goff(dbp, NULL, &dbt,
+ bo->tlen, bo->pgno, NULL, NULL)) != 0)
return (ret);
- } else {
- DB_ASSERT(0);
- EPRINT((dbenv,
- "Page %lu: unknown type for internal record",
- (u_long)PGNO(h)));
- return (EINVAL);
- }
+ } else
+ return (
+ __db_unknown_path(dbenv, "__bam_vrfy_treeorder"));
/* On error, fall through, free if needed, and return. */
- if ((ret = __bam_cmp(dbp, &dbt, h, 0, func, &cmp)) == 0) {
+ if ((ret = __bam_cmp(dbp, NULL, &dbt, h, 0, func, &cmp)) == 0) {
if (cmp > 0) {
EPRINT((dbenv,
"Page %lu: first item on page sorted greater than parent entry",
@@ -1985,19 +1978,16 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
dbt.size = rp->len;
} else if (rp->type == B_OVERFLOW) {
bo = (BOVERFLOW *)rp->data;
- if ((ret = __db_goff(dbp, &dbt, bo->tlen, bo->pgno,
- NULL, NULL)) != 0)
+ if ((ret = __db_goff(dbp, NULL, &dbt,
+ bo->tlen, bo->pgno, NULL, NULL)) != 0)
return (ret);
- } else {
- DB_ASSERT(0);
- EPRINT((dbenv,
- "Page %lu: unknown type for internal record",
- (u_long)PGNO(h)));
- return (EINVAL);
- }
+ } else
+ return (
+ __db_unknown_path(dbenv, "__bam_vrfy_treeorder"));
/* On error, fall through, free if needed, and return. */
- if ((ret = __bam_cmp(dbp, &dbt, h, last, func, &cmp)) == 0) {
+ if ((ret = __bam_cmp(dbp, NULL, &dbt,
+ h, last, func, &cmp)) == 0) {
if (cmp < 0) {
EPRINT((dbenv,
"Page %lu: last item on page sorted greater than parent entry",
@@ -2037,38 +2027,32 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
DBT *key;
u_int32_t flags;
{
- DBT dbt, unkdbt;
- DB_ENV *dbenv;
BKEYDATA *bk;
BOVERFLOW *bo;
+ DBT dbt, unknown_key, unknown_data;
+ DB_ENV *dbenv;
VRFY_ITEM *pgmap;
- db_indx_t i, beg, end, *inp;
+ db_indx_t i, last, beg, end, *inp;
u_int32_t himark;
void *ovflbuf;
- int t_ret, ret, err_ret;
+ int ret, t_ret, t2_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 = (u_int32_t)(strlen("UNKNOWN") + 1);
- unkdbt.data = "UNKNOWN";
+ DB_INIT_DBT(unknown_key, "UNKNOWN_KEY", sizeof("UNKNOWN_KEY") - 1);
+ DB_INIT_DBT(unknown_data, "UNKNOWN_DATA", sizeof("UNKNOWN_DATA") - 1);
/*
* Allocate a buffer for overflow items. Start at one page;
* __db_safe_goff will realloc as needed.
*/
if ((ret = __os_malloc(dbenv, dbp->pgsize, &ovflbuf)) != 0)
- return (ret);
+ goto err;
if (LF_ISSET(DB_AGGRESSIVE) && (ret =
__os_calloc(dbenv, dbp->pgsize, sizeof(pgmap[0]), &pgmap)) != 0)
@@ -2077,161 +2061,185 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
/*
* Loop through the inp array, spitting out key/data pairs.
*
- * If we're salvaging normally, loop from 0 through NUM_ENT(h).
- * If we're being aggressive, loop until we hit the end of the page--
+ * If we're salvaging normally, loop from 0 through NUM_ENT(h). If
+ * we're being aggressive, loop until we hit the end of the page --
* NUM_ENT() may be bogus.
*/
himark = dbp->pgsize;
- for (i = 0;; i += O_INDX) {
+ for (i = 0, last = UINT16_MAX;; i += O_INDX) {
/* If we're not aggressive, break when we hit NUM_ENT(h). */
if (!LF_ISSET(DB_AGGRESSIVE) && i >= NUM_ENT(h))
break;
/* Verify the current item. */
- ret = __db_vrfy_inpitem(dbp,
- h, pgno, i, 1, flags, &himark, NULL);
- /* If this returned a fatality, it's time to break. */
- if (ret == DB_VERIFY_FATAL) {
+ t_ret =
+ __db_vrfy_inpitem(dbp, h, pgno, i, 1, flags, &himark, NULL);
+
+ if (t_ret != 0) {
/*
- * Don't return DB_VERIFY_FATAL; it's private
- * and means only that we can't go on with this
- * page, not with the whole database. It's
- * not even an error if we've run into it
- * after NUM_ENT(h).
+ * If this is a btree leaf and we've printed out a key
+ * but not its associated data item, fix this imbalance
+ * by printing an "UNKNOWN_DATA".
*/
- ret = (i < NUM_ENT(h)) ? DB_VERIFY_BAD : 0;
- break;
+ if (pgtype == P_LBTREE && i % P_INDX == 1 &&
+ last == i - 1 && (t2_ret = __db_vrfy_prdbt(
+ &unknown_data,
+ 0, " ", handle, callback, 0, vdp)) != 0) {
+ if (ret == 0)
+ ret = t2_ret;
+ goto err;
+ }
+
+ /*
+ * Don't return DB_VERIFY_FATAL; it's private and means
+ * only that we can't go on with this page, not with
+ * the whole database. It's not even an error if we've
+ * run into it after NUM_ENT(h).
+ */
+ if (t_ret == DB_VERIFY_FATAL) {
+ if (i < NUM_ENT(h) && ret == 0)
+ ret = DB_VERIFY_BAD;
+ break;
+ }
+ continue;
}
/*
* If this returned 0, it's safe to print or (carefully)
* try to fetch.
+ *
+ * We only print deleted items if DB_AGGRESSIVE is set.
*/
- if (ret == 0) {
- /*
- * We only want to print deleted items if
- * DB_AGGRESSIVE is set.
- */
- bk = GET_BKEYDATA(dbp, h, i);
- if (!LF_ISSET(DB_AGGRESSIVE) && B_DISSET(bk->type))
- continue;
+ bk = GET_BKEYDATA(dbp, h, i);
+ if (!LF_ISSET(DB_AGGRESSIVE) && B_DISSET(bk->type))
+ continue;
+
+ /*
+ * If this is a btree leaf and we're about to print out a data
+ * item for which we didn't print out a key, fix this imbalance
+ * by printing an "UNKNOWN_KEY".
+ */
+ if (pgtype == P_LBTREE && i % P_INDX == 1 &&
+ last != i - 1 && (t_ret = __db_vrfy_prdbt(
+ &unknown_key, 0, " ", handle, callback, 0, vdp)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ goto err;
+ }
+ last = i;
+
+ /*
+ * We're going to go try to print the next item. If key is
+ * non-NULL, we're a dup page, so we've got to print the key
+ * first, unless SA_SKIPFIRSTKEY is set and we're on the first
+ * entry.
+ */
+ if (key != NULL && (i != 0 || !LF_ISSET(SA_SKIPFIRSTKEY)))
+ if ((t_ret = __db_vrfy_prdbt(key,
+ 0, " ", handle, callback, 0, vdp)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ goto err;
+ }
+ beg = inp[i];
+ switch (B_TYPE(bk->type)) {
+ case B_DUPLICATE:
+ end = beg + BOVERFLOW_SIZE - 1;
/*
- * We're going to go try to print the next item. If
- * key is non-NULL, we're a dup page, so we've got to
- * print the key first, unless SA_SKIPFIRSTKEY is set
- * and we're on the first entry.
+ * If we're not on a normal btree leaf page, there
+ * shouldn't be off-page dup sets. Something's
+ * confused; just drop it, and the code to pick up
+ * unlinked offpage dup sets will print it out
+ * with key "UNKNOWN" later.
*/
- if (key != NULL &&
- (i != 0 || !LF_ISSET(SA_SKIPFIRSTKEY)))
- if ((ret = __db_vrfy_prdbt(key,
- 0, " ", handle, callback, 0, vdp)) != 0)
- err_ret = ret;
-
- beg = inp[i];
- switch (B_TYPE(bk->type)) {
- case B_DUPLICATE:
- end = beg + BOVERFLOW_SIZE - 1;
- /*
- * If we're not on a normal btree leaf page,
- * there shouldn't be off-page
- * dup sets. Something's confused; just
- * drop it, and the code to pick up unlinked
- * offpage dup sets will print it out
- * with key "UNKNOWN" later.
- */
- if (pgtype != P_LBTREE)
- break;
+ if (pgtype != P_LBTREE)
+ break;
- bo = (BOVERFLOW *)bk;
+ bo = (BOVERFLOW *)bk;
- /*
- * If the page number is unreasonable, or
- * if this is supposed to be a key item,
- * just spit out "UNKNOWN"--the best we
- * can do is run into the data items in the
- * unlinked offpage dup pass.
- */
- if (!IS_VALID_PGNO(bo->pgno) ||
- (i % P_INDX == 0)) {
- /* Not much to do on failure. */
- if ((ret =
- __db_vrfy_prdbt(&unkdbt, 0, " ",
- handle, callback, 0, vdp)) != 0)
- err_ret = ret;
- break;
+ /*
+ * If the page number is unreasonable, or if this is
+ * supposed to be a key item, output "UNKNOWN_KEY" --
+ * the best we can do is run into the data items in
+ * the unlinked offpage dup pass.
+ */
+ if (!IS_VALID_PGNO(bo->pgno) || (i % P_INDX == 0)) {
+ /* Not much to do on failure. */
+ if ((t_ret = __db_vrfy_prdbt(&unknown_key,
+ 0, " ", handle, callback, 0, vdp)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ goto err;
}
+ break;
+ }
- if ((ret = __db_salvage_duptree(dbp,
- vdp, bo->pgno, &dbt, handle, callback,
- flags | SA_SKIPFIRSTKEY)) != 0)
- err_ret = ret;
+ /* Don't stop on error. */
+ if ((t_ret = __db_salvage_duptree(dbp,
+ vdp, bo->pgno, &dbt, handle, callback,
+ flags | SA_SKIPFIRSTKEY)) != 0 && ret == 0)
+ ret = t_ret;
- break;
- case B_KEYDATA:
- end = (db_indx_t)DB_ALIGN(
- beg + bk->len, sizeof(u_int32_t)) - 1;
- dbt.data = bk->data;
- dbt.size = bk->len;
- if ((ret = __db_vrfy_prdbt(&dbt,
- 0, " ", handle, callback, 0, vdp)) != 0)
- err_ret = ret;
- break;
- case B_OVERFLOW:
- end = beg + BOVERFLOW_SIZE - 1;
- bo = (BOVERFLOW *)bk;
- if ((ret = __db_safe_goff(dbp, vdp,
- bo->pgno, &dbt, &ovflbuf, flags)) != 0) {
- err_ret = ret;
- /* We care about err_ret more. */
- (void)__db_vrfy_prdbt(&unkdbt, 0, " ",
- handle, callback, 0, vdp);
- break;
- }
- if ((ret = __db_vrfy_prdbt(&dbt,
- 0, " ", handle, callback, 0, vdp)) != 0)
- err_ret = ret;
- break;
- default:
- /*
- * We should never get here; __db_vrfy_inpitem
- * should not be returning 0 if bk->type
- * is unrecognizable.
- */
- DB_ASSERT(0);
- return (EINVAL);
+ break;
+ case B_KEYDATA:
+ end = (db_indx_t)DB_ALIGN(
+ beg + bk->len, sizeof(u_int32_t)) - 1;
+ dbt.data = bk->data;
+ dbt.size = bk->len;
+ if ((t_ret = __db_vrfy_prdbt(&dbt,
+ 0, " ", handle, callback, 0, vdp)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ goto err;
}
+ break;
+ case B_OVERFLOW:
+ end = beg + BOVERFLOW_SIZE - 1;
+ bo = (BOVERFLOW *)bk;
+ /* Don't stop on error. */
+ if ((t_ret = __db_safe_goff(dbp, vdp,
+ bo->pgno, &dbt, &ovflbuf, flags)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __db_vrfy_prdbt(
+ t_ret == 0 ? &dbt : &unknown_key,
+ 0, " ", handle, callback, 0, vdp)) != 0 && ret == 0)
+ ret = t_ret;
+ break;
+ default:
/*
- * If we're being aggressive, mark the beginning
- * and end of the item; we'll come back and print
- * whatever "junk" is in the gaps in case we had
- * any bogus inp elements and thereby missed stuff.
+ * We should never get here; __db_vrfy_inpitem should
+ * not be returning 0 if bk->type is unrecognizable.
*/
- if (LF_ISSET(DB_AGGRESSIVE)) {
- pgmap[beg] = VRFY_ITEM_BEGIN;
- pgmap[end] = VRFY_ITEM_END;
- }
+ t_ret = __db_unknown_path(dbenv, "__bam_salvage");
+ if (ret == 0)
+ ret = t_ret;
+ goto err;
}
- }
- /*
- * If i is odd and this is a btree leaf, we've printed out a key but not
- * a datum; fix this imbalance by printing an "UNKNOWN".
- */
- if (pgtype == P_LBTREE && (i % P_INDX == 1) && ((ret =
- __db_vrfy_prdbt(&unkdbt, 0, " ", handle, callback, 0, vdp)) != 0))
- err_ret = ret;
+ /*
+ * If we're being aggressive, mark the beginning and end of
+ * the item; we'll come back and print whatever "junk" is in
+ * the gaps in case we had any bogus inp elements and thereby
+ * missed stuff.
+ */
+ if (LF_ISSET(DB_AGGRESSIVE)) {
+ pgmap[beg] = VRFY_ITEM_BEGIN;
+ pgmap[end] = VRFY_ITEM_END;
+ }
+ }
err: if (pgmap != NULL)
__os_free(dbenv, pgmap);
- __os_free(dbenv, ovflbuf);
+ if (ovflbuf != NULL)
+ __os_free(dbenv, ovflbuf);
/* Mark this page as done. */
- if ((t_ret = __db_salvage_markdone(vdp, pgno)) != 0)
- return (t_ret);
+ if ((t_ret = __db_salvage_markdone(vdp, pgno)) != 0 && ret == 0)
+ ret = t_ret;
- return ((err_ret != 0) ? err_ret : ret);
+ return (ret);
}
/*
@@ -2252,12 +2260,15 @@ __bam_salvage_walkdupint(dbp, vdp, h, key, handle, callback, flags)
int (*callback) __P((void *, const void *));
u_int32_t flags;
{
+ DB_ENV *dbenv;
RINTERNAL *ri;
BINTERNAL *bi;
int ret, t_ret;
db_indx_t i;
+ dbenv = dbp->dbenv;
ret = 0;
+
for (i = 0; i < NUM_ENT(h); i++) {
switch (TYPE(h)) {
case P_IBTREE:
@@ -2273,10 +2284,8 @@ __bam_salvage_walkdupint(dbp, vdp, h, key, handle, callback, flags)
ret = t_ret;
break;
default:
- __db_err(dbp->dbenv,
- "__bam_salvage_walkdupint called on non-int. page");
- DB_ASSERT(0);
- return (EINVAL);
+ return (__db_unknown_path(
+ dbenv, "__bam_salvage_walkdupint"));
}
/* Pass SA_SKIPFIRSTKEY, if set, on to the 0th child only. */
flags &= ~LF_ISSET(SA_SKIPFIRSTKEY);
@@ -2317,16 +2326,18 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
db_pgno_t current, p;
int err_ret, ret;
+ DB_ASSERT(dbp->dbenv, pgset != NULL);
+
mpf = dbp->mpf;
h = NULL;
ret = err_ret = 0;
- DB_ASSERT(pgset != NULL);
+
for (current = btmeta->root;;) {
if (!IS_VALID_PGNO(current) || current == PGNO(btmeta)) {
err_ret = DB_VERIFY_BAD;
goto err;
}
- if ((ret = __memp_fget(mpf, &current, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &current, NULL, 0, &h)) != 0) {
err_ret = ret;
goto err;
}
@@ -2367,7 +2378,7 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
traverse:
while (IS_VALID_PGNO(current) && current != PGNO_INVALID) {
if (h == NULL &&
- (ret = __memp_fget(mpf, &current, 0, &h)) != 0) {
+ (ret = __memp_fget(mpf, &current, NULL, 0, &h)) != 0) {
err_ret = ret;
break;
}
@@ -2430,7 +2441,8 @@ __bam_safe_getdata(dbp, h, i, ovflok, dbt, freedbtp)
F_SET(dbt, DB_DBT_MALLOC);
*freedbtp = 1;
- return (__db_goff(dbp, dbt, bo->tlen, bo->pgno, NULL, NULL));
+ return (__db_goff(dbp, NULL, dbt,
+ bo->tlen, bo->pgno, NULL, NULL));
} else {
dbt->data = bk->data;
dbt->size = bk->len;
diff --git a/db/btree/btree.src b/db/btree/btree.src
index c4f761de0..9a35d5adc 100644
--- a/db/btree/btree.src
+++ b/db/btree/btree.src
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: btree.src,v 10.42 2004/06/17 17:35:12 bostic Exp $
+ * $Id: btree.src,v 12.7 2006/08/24 14:44:46 bostic Exp $
*/
PREFIX __bam
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
@@ -41,7 +34,7 @@ INCLUDE
* pg: the split page's contents before the split.
* opflags: SPL_NRECS: if splitting a tree that maintains a record count.
*/
-BEGIN split 62
+BEGIN split 42 62
DB fileid int32_t ld
ARG left db_pgno_t lu
POINTER llsn DB_LSN * lu
@@ -65,7 +58,7 @@ END
* rootent: last entry on the root page.
* rootlsn: the root page's original lsn.
*/
-BEGIN rsplit 63
+BEGIN rsplit 42 63
DB fileid int32_t ld
ARG pgno db_pgno_t lu
PGDBT pgdbt DBT s
@@ -84,7 +77,7 @@ END
* indx_copy: the index to copy if inserting.
* is_insert: 0 if a delete, 1 if an insert.
*/
-BEGIN adj 55
+BEGIN adj 42 55
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
@@ -102,7 +95,7 @@ END
* adjust: the signed adjustment.
* opflags: CAD_UPDATEROOT: if root page count was adjusted.
*/
-BEGIN cadjust 56
+BEGIN cadjust 42 56
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
@@ -118,7 +111,7 @@ END
* lsn: the page's original lsn.
* indx: the index to be deleted.
*/
-BEGIN cdel 57
+BEGIN cdel 42 57
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
@@ -137,7 +130,7 @@ END
* prefix: the prefix of the replacement that matches the original.
* suffix: the suffix of the replacement that matches the original.
*/
-BEGIN repl 58
+BEGIN repl 42 58
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
@@ -152,7 +145,7 @@ END
/*
* BTREE-root: log the assignment of a root btree page.
*/
-BEGIN root 59
+BEGIN root 42 59
DB fileid int32_t ld
ARG meta_pgno db_pgno_t lu
ARG root_pgno db_pgno_t lu
@@ -166,7 +159,7 @@ END
* signed index adjustment in one case.
* care should be taken if its size is changed.
*/
-BEGIN curadj 64
+BEGIN curadj 42 64
/* Fileid of db affected. */
DB fileid int32_t ld
/* Which adjustment. */
@@ -190,7 +183,7 @@ END
* renumbering recno trees.
* Should only be processed during DB_TXN_ABORT.
*/
-BEGIN rcuradj 65
+BEGIN rcuradj 42 65
/* Fileid of db affected. */
DB fileid int32_t ld
/* Which adjustment. */
@@ -207,10 +200,10 @@ END
* BTREE-relink -- Handles relinking around a deleted leaf page.
*
*/
-BEGIN relink 147
+BEGIN_COMPAT relink 43 147
/* Fileid of db affected. */
DB fileid int32_t ld
-/* The page being changed. */
+/* The page being removed. */
ARG pgno db_pgno_t lu
/* The page's original lsn. */
POINTER lsn DB_LSN * lu
@@ -223,3 +216,47 @@ ARG next db_pgno_t lu
/* The previous page's original lsn. */
POINTER lsn_next DB_LSN * lu
END
+
+BEGIN relink 44 147
+/* Fileid of db affected. */
+DB fileid int32_t ld
+/* The page being removed. */
+ARG pgno db_pgno_t lu
+/* The new page number, if any. */
+ARG new_pgno db_pgno_t lu
+/* The previous page. */
+ARG prev db_pgno_t lu
+/* The previous page's original lsn. */
+POINTER lsn_prev DB_LSN * lu
+/* The next page. */
+ARG next db_pgno_t lu
+/* The previous page's original lsn. */
+POINTER lsn_next DB_LSN * lu
+END
+
+/*
+ * BTREE-merge -- Handles merging of pages during a compaction.
+ */
+BEGIN merge 44 148
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+POINTER lsn DB_LSN * lu
+ARG npgno db_pgno_t lu
+POINTER nlsn DB_LSN * lu
+DBT hdr DBT s
+DBT data DBT s
+DBT ind DBT s
+END
+
+/*
+ * BTREE-pgno -- Handles replacing a page number in the record
+ * refernece on pgno by indx.
+ */
+BEGIN pgno 44 149
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+POINTER lsn DB_LSN * lu
+ARG indx u_int32_t lu
+ARG opgno db_pgno_t lu
+ARG npgno db_pgno_t lu
+END
diff --git a/db/btree/btree_auto.c b/db/btree/btree_auto.c
index 7b2002a4a..3d5b9ed97 100644
--- a/db/btree/btree_auto.c
+++ b/db/btree/btree_auto.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -24,10 +17,10 @@
* PUBLIC: db_pgno_t, DB_LSN *, db_pgno_t, const DBT *, u_int32_t));
*/
int
-__bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
+__bam_split_log(dbp, txnp, ret_lsnp, flags, left, llsn, right, rlsn, indx,
npgno, nlsn, root_pgno, pg, opflags)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t left;
@@ -61,30 +54,31 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -107,7 +101,7 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -147,9 +141,15 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (llsn != NULL)
+ if (llsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(llsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, llsn) != 0))
+ return (ret);
+ }
memcpy(bp, llsn, sizeof(*llsn));
- else
+ } else
memset(bp, 0, sizeof(*llsn));
bp += sizeof(*llsn);
@@ -157,9 +157,15 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (rlsn != NULL)
+ if (rlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(rlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, rlsn) != 0))
+ return (ret);
+ }
memcpy(bp, rlsn, sizeof(*rlsn));
- else
+ } else
memset(bp, 0, sizeof(*rlsn));
bp += sizeof(*rlsn);
@@ -171,9 +177,15 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (nlsn != NULL)
+ if (nlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(nlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, nlsn) != 0))
+ return (ret);
+ }
memcpy(bp, nlsn, sizeof(*nlsn));
- else
+ } else
memset(bp, 0, sizeof(*nlsn));
bp += sizeof(*nlsn);
@@ -196,12 +208,13 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -220,20 +233,21 @@ __bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_split_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -257,13 +271,14 @@ __bam_split_read(dbenv, recbuf, argpp)
sizeof(__bam_split_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -321,10 +336,10 @@ __bam_split_read(dbenv, recbuf, argpp)
* PUBLIC: const DBT *, DB_LSN *));
*/
int
-__bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, rootent,
+__bam_rsplit_log(dbp, txnp, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, rootent,
rootlsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -354,30 +369,31 @@ __bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, root
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -396,7 +412,7 @@ __bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, root
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -466,18 +482,25 @@ __bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, root
bp += rootent->size;
}
- if (rootlsn != NULL)
+ if (rootlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(rootlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, rootlsn) != 0))
+ return (ret);
+ }
memcpy(bp, rootlsn, sizeof(*rootlsn));
- else
+ } else
memset(bp, 0, sizeof(*rootlsn));
bp += sizeof(*rootlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -496,20 +519,21 @@ __bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, root
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_rsplit_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -533,13 +557,14 @@ __bam_rsplit_read(dbenv, recbuf, argpp)
sizeof(__bam_rsplit_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -585,9 +610,9 @@ __bam_rsplit_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t));
*/
int
-__bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert)
+__bam_adj_log(dbp, txnp, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -616,30 +641,31 @@ __bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -657,7 +683,7 @@ __bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -697,9 +723,15 @@ __bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -715,12 +747,13 @@ __bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -739,20 +772,21 @@ __bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_adj_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -776,13 +810,14 @@ __bam_adj_read(dbenv, recbuf, argpp)
sizeof(__bam_adj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -819,9 +854,9 @@ __bam_adj_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t, int32_t, u_int32_t));
*/
int
-__bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
+__bam_cadjust_log(dbp, txnp, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -850,30 +885,31 @@ __bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -891,7 +927,7 @@ __bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -931,9 +967,15 @@ __bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -949,12 +991,13 @@ __bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -973,20 +1016,21 @@ __bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_cadjust_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1011,13 +1055,14 @@ __bam_cadjust_read(dbenv, recbuf, argpp)
sizeof(__bam_cadjust_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1054,9 +1099,9 @@ __bam_cadjust_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t));
*/
int
-__bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
+__bam_cdel_log(dbp, txnp, ret_lsnp, flags, pgno, lsn, indx)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1083,30 +1128,31 @@ __bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1122,7 +1168,7 @@ __bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1162,9 +1208,15 @@ __bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -1172,12 +1224,13 @@ __bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1196,20 +1249,21 @@ __bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_cdel_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1233,13 +1287,14 @@ __bam_cdel_read(dbenv, recbuf, argpp)
sizeof(__bam_cdel_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1269,10 +1324,10 @@ __bam_cdel_read(dbenv, recbuf, argpp)
* PUBLIC: const DBT *, const DBT *, u_int32_t, u_int32_t));
*/
int
-__bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
+__bam_repl_log(dbp, txnp, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
repl, prefix, suffix)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1304,30 +1359,31 @@ __bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1348,7 +1404,7 @@ __bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1388,9 +1444,15 @@ __bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -1432,12 +1494,13 @@ __bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1456,20 +1519,21 @@ __bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_repl_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1493,13 +1557,14 @@ __bam_repl_read(dbenv, recbuf, argpp)
sizeof(__bam_repl_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1552,9 +1617,9 @@ __bam_repl_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t, db_pgno_t, DB_LSN *));
*/
int
-__bam_root_log(dbp, txnid, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
+__bam_root_log(dbp, txnp, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t meta_pgno;
@@ -1581,30 +1646,31 @@ __bam_root_log(dbp, txnid, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1620,7 +1686,7 @@ __bam_root_log(dbp, txnid, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1664,18 +1730,25 @@ __bam_root_log(dbp, txnid, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (meta_lsn != NULL)
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
+ } else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1694,20 +1767,21 @@ __bam_root_log(dbp, txnid, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_root_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1731,13 +1805,14 @@ __bam_root_read(dbenv, recbuf, argpp)
sizeof(__bam_root_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1767,10 +1842,10 @@ __bam_root_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, u_int32_t, u_int32_t));
*/
int
-__bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgno, first_indx,
+__bam_curadj_log(dbp, txnp, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgno, first_indx,
from_indx, to_indx)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_ca_mode mode;
@@ -1801,30 +1876,31 @@ __bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgn
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1844,7 +1920,7 @@ __bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgn
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1908,12 +1984,13 @@ __bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgn
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1932,20 +2009,21 @@ __bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgn
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_curadj_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1969,13 +2047,14 @@ __bam_curadj_read(dbenv, recbuf, argpp)
sizeof(__bam_curadj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2021,9 +2100,9 @@ __bam_curadj_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, ca_recno_arg, db_pgno_t, db_recno_t, u_int32_t));
*/
int
-__bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mode, root, recno, order)
+__bam_rcuradj_log(dbp, txnp, ret_lsnp, flags, mode, root, recno, order)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
ca_recno_arg mode;
@@ -2051,30 +2130,31 @@ __bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mode, root, recno, order)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -2091,7 +2171,7 @@ __bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mode, root, recno, order)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2143,12 +2223,13 @@ __bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mode, root, recno, order)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2167,20 +2248,21 @@ __bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mode, root, recno, order)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_rcuradj_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2205,13 +2287,14 @@ __bam_rcuradj_read(dbenv, recbuf, argpp)
sizeof(__bam_rcuradj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2241,19 +2324,79 @@ __bam_rcuradj_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __bam_relink_43_read __P((DB_ENV *, void *,
+ * PUBLIC: __bam_relink_43_args **));
+ */
+int
+__bam_relink_43_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __bam_relink_43_args **argpp;
+{
+ __bam_relink_43_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_relink_43_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->lsn, bp, sizeof(argp->lsn));
+ bp += sizeof(argp->lsn);
+
+ 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 __bam_relink_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: u_int32_t, db_pgno_t, db_pgno_t, db_pgno_t, DB_LSN *, db_pgno_t,
* PUBLIC: DB_LSN *));
*/
int
-__bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
+__bam_relink_log(dbp, txnp, ret_lsnp, flags, pgno, new_pgno, prev, lsn_prev, next,
lsn_next)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
- DB_LSN * lsn;
+ db_pgno_t new_pgno;
db_pgno_t prev;
DB_LSN * lsn_prev;
db_pgno_t next;
@@ -2279,30 +2422,31 @@ __bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -2310,7 +2454,7 @@ __bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ sizeof(u_int32_t)
+ sizeof(u_int32_t)
- + sizeof(*lsn)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t)
+ sizeof(*lsn_prev)
+ sizeof(u_int32_t)
@@ -2321,7 +2465,7 @@ __bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2361,19 +2505,23 @@ __bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
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);
+ uinttmp = (u_int32_t)new_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
uinttmp = (u_int32_t)prev;
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn_prev != NULL)
+ if (lsn_prev != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn_prev, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn_prev) != 0))
+ return (ret);
+ }
memcpy(bp, lsn_prev, sizeof(*lsn_prev));
- else
+ } else
memset(bp, 0, sizeof(*lsn_prev));
bp += sizeof(*lsn_prev);
@@ -2381,18 +2529,25 @@ __bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn_next != NULL)
+ if (lsn_next != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn_next, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn_next) != 0))
+ return (ret);
+ }
memcpy(bp, lsn_next, sizeof(*lsn_next));
- else
+ } else
memset(bp, 0, sizeof(*lsn_next));
bp += sizeof(*lsn_next);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2411,20 +2566,21 @@ __bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, prev, lsn_prev, next,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__bam_relink_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2448,13 +2604,14 @@ __bam_relink_read(dbenv, recbuf, argpp)
sizeof(__bam_relink_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2467,8 +2624,9 @@ __bam_relink_read(dbenv, recbuf, argpp)
argp->pgno = (db_pgno_t)uinttmp;
bp += sizeof(uinttmp);
- memcpy(&argp->lsn, bp, sizeof(argp->lsn));
- bp += sizeof(argp->lsn);
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->new_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
argp->prev = (db_pgno_t)uinttmp;
@@ -2489,6 +2647,551 @@ __bam_relink_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __bam_merge_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, const DBT *,
+ * PUBLIC: const DBT *, const DBT *));
+ */
+int
+__bam_merge_log(dbp, txnp, ret_lsnp, flags, pgno, lsn, npgno, nlsn, hdr,
+ data, ind)
+ DB *dbp;
+ DB_TXN *txnp;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t pgno;
+ DB_LSN * lsn;
+ db_pgno_t npgno;
+ DB_LSN * nlsn;
+ const DBT *hdr;
+ const DBT *data;
+ const DBT *ind;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn, *rlsnp;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(lr, NULL);
+
+ rectype = DB___bam_merge;
+ npad = 0;
+ rlsnp = ret_lsnp;
+
+ ret = 0;
+
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
+ is_durable = 0;
+ } else
+ is_durable = 1;
+
+ if (txnp == NULL) {
+ txn_num = 0;
+ lsnp = &null_lsn;
+ null_lsn.file = null_lsn.offset = 0;
+ } else {
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
+ return (ret);
+ /*
+ * We need to assign begin_lsn while holding region mutex.
+ * That assignment is done inside the DbEnv->log_put call,
+ * so pass in the appropriate memory location to be filled
+ * in by the log_put code.
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
+ }
+
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*lsn)
+ + sizeof(u_int32_t)
+ + sizeof(*nlsn)
+ + sizeof(u_int32_t) + (hdr == NULL ? 0 : hdr->size)
+ + sizeof(u_int32_t) + (data == NULL ? 0 : data->size)
+ + sizeof(u_int32_t) + (ind == NULL ? 0 : ind->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (is_durable || txnp == NULL) {
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+ __os_free(dbenv, lr);
+ return (ret);
+ }
+#else
+ logrec.data = lr->data;
+#endif
+ }
+ 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)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) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
+ memcpy(bp, lsn, sizeof(*lsn));
+ } else
+ memset(bp, 0, sizeof(*lsn));
+ bp += sizeof(*lsn);
+
+ uinttmp = (u_int32_t)npgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (nlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(nlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, nlsn) != 0))
+ return (ret);
+ }
+ memcpy(bp, nlsn, sizeof(*nlsn));
+ } else
+ memset(bp, 0, sizeof(*nlsn));
+ bp += sizeof(*nlsn);
+
+ if (hdr == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &hdr->size, sizeof(hdr->size));
+ bp += sizeof(hdr->size);
+ memcpy(bp, hdr->data, hdr->size);
+ bp += hdr->size;
+ }
+
+ 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;
+ }
+
+ if (ind == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &ind->size, sizeof(ind->size));
+ bp += sizeof(ind->size);
+ memcpy(bp, ind->data, ind->size);
+ bp += ind->size;
+ }
+
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+ if (is_durable || txnp == NULL) {
+ if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
+ if (rlsnp != ret_lsnp)
+ *ret_lsnp = *rlsnp;
+ }
+ } else {
+#ifdef DIAGNOSTIC
+ /*
+ * 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));
+
+ ret = __log_put(dbenv,
+ rlsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+#else
+ ret = 0;
+#endif
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
+ LSN_NOT_LOGGED(*ret_lsnp);
+ }
+
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_merge_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
+#endif
+
+#ifdef DIAGNOSTIC
+ __os_free(dbenv, logrec.data);
+#else
+ if (is_durable || txnp == NULL)
+ __os_free(dbenv, logrec.data);
+#endif
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __bam_merge_read __P((DB_ENV *, void *, __bam_merge_args **));
+ */
+int
+__bam_merge_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __bam_merge_args **argpp;
+{
+ __bam_merge_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_merge_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->lsn, bp, sizeof(argp->lsn));
+ bp += sizeof(argp->lsn);
+
+ 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);
+
+ 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->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;
+
+ memset(&argp->ind, 0, sizeof(argp->ind));
+ memcpy(&argp->ind.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->ind.data = bp;
+ bp += argp->ind.size;
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __bam_pgno_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t, db_pgno_t,
+ * PUBLIC: db_pgno_t));
+ */
+int
+__bam_pgno_log(dbp, txnp, ret_lsnp, flags, pgno, lsn, indx, opgno, npgno)
+ DB *dbp;
+ DB_TXN *txnp;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t pgno;
+ DB_LSN * lsn;
+ u_int32_t indx;
+ db_pgno_t opgno;
+ db_pgno_t npgno;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn, *rlsnp;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(lr, NULL);
+
+ rectype = DB___bam_pgno;
+ npad = 0;
+ rlsnp = ret_lsnp;
+
+ ret = 0;
+
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
+ is_durable = 0;
+ } else
+ is_durable = 1;
+
+ if (txnp == NULL) {
+ txn_num = 0;
+ lsnp = &null_lsn;
+ null_lsn.file = null_lsn.offset = 0;
+ } else {
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
+ return (ret);
+ /*
+ * We need to assign begin_lsn while holding region mutex.
+ * That assignment is done inside the DbEnv->log_put call,
+ * so pass in the appropriate memory location to be filled
+ * in by the log_put code.
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
+ }
+
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*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 || txnp == NULL) {
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+ __os_free(dbenv, lr);
+ return (ret);
+ }
+#else
+ logrec.data = lr->data;
+#endif
+ }
+ 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)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) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
+ memcpy(bp, lsn, sizeof(*lsn));
+ } else
+ memset(bp, 0, sizeof(*lsn));
+ bp += sizeof(*lsn);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)opgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)npgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+ if (is_durable || txnp == NULL) {
+ if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
+ if (rlsnp != ret_lsnp)
+ *ret_lsnp = *rlsnp;
+ }
+ } else {
+#ifdef DIAGNOSTIC
+ /*
+ * 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));
+
+ ret = __log_put(dbenv,
+ rlsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+#else
+ ret = 0;
+#endif
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
+ LSN_NOT_LOGGED(*ret_lsnp);
+ }
+
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_pgno_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
+#endif
+
+#ifdef DIAGNOSTIC
+ __os_free(dbenv, logrec.data);
+#else
+ if (is_durable || txnp == NULL)
+ __os_free(dbenv, logrec.data);
+#endif
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __bam_pgno_read __P((DB_ENV *, void *, __bam_pgno_args **));
+ */
+int
+__bam_pgno_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __bam_pgno_args **argpp;
+{
+ __bam_pgno_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_pgno_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->lsn, bp, sizeof(argp->lsn));
+ bp += sizeof(argp->lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->npgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
* PUBLIC: int __bam_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
*/
@@ -2530,5 +3233,11 @@ __bam_init_recover(dbenv, dtabp, dtabsizep)
if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
__bam_relink_recover, DB___bam_relink)) != 0)
return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_merge_recover, DB___bam_merge)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_pgno_recover, DB___bam_pgno)) != 0)
+ return (ret);
return (0);
}
diff --git a/db/btree/btree_autop.c b/db/btree/btree_autop.c
index 1db8c3be6..88da2d7e5 100644
--- a/db/btree/btree_autop.c
+++ b/db/btree/btree_autop.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -35,20 +28,18 @@ __bam_split_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_split_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_split%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_split%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
(void)printf("\tleft: %lu\n", (u_long)argp->left);
(void)printf("\tllsn: [%lu][%lu]\n",
@@ -90,20 +81,18 @@ __bam_rsplit_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_rsplit_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_rsplit%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_rsplit%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tpgdbt: ");
@@ -142,20 +131,18 @@ __bam_adj_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_adj_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_adj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_adj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_adj%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tlsn: [%lu][%lu]\n",
@@ -183,20 +170,18 @@ __bam_cadjust_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_cadjust_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_cadjust_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_cadjust%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_cadjust%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tlsn: [%lu][%lu]\n",
@@ -224,20 +209,18 @@ __bam_cdel_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_cdel_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_cdel_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_cdel%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_cdel%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tlsn: [%lu][%lu]\n",
@@ -265,20 +248,18 @@ __bam_repl_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_repl_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_repl%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_repl%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tlsn: [%lu][%lu]\n",
@@ -319,20 +300,18 @@ __bam_root_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_root_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_root_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_root%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_root%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -358,20 +337,18 @@ __bam_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_curadj_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_curadj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_curadj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_curadj%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -400,20 +377,18 @@ __bam_rcuradj_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_rcuradj_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_rcuradj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_rcuradj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_rcuradj%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
(void)printf("\tmode: %ld\n", (long)argp->mode);
(void)printf("\troot: %ld\n", (long)argp->root);
@@ -425,6 +400,48 @@ __bam_rcuradj_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __bam_relink_43_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_relink_43_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __bam_relink_43_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __bam_relink_43_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__bam_relink_43%s: rec: %lu txnp %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->txnp->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("\tlsn: [%lu][%lu]\n",
+ (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
+ (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 __bam_relink_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -439,24 +456,21 @@ __bam_relink_print(dbenv, dbtp, lsnp, notused2, notused3)
__bam_relink_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __bam_relink_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__bam_relink%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__bam_relink%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tlsn: [%lu][%lu]\n",
- (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
+ (void)printf("\tnew_pgno: %lu\n", (u_long)argp->new_pgno);
(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);
@@ -469,6 +483,104 @@ __bam_relink_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __bam_merge_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_merge_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __bam_merge_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __bam_merge_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__bam_merge%s: rec: %lu txnp %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->txnp->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("\tlsn: [%lu][%lu]\n",
+ (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
+ (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);
+ (void)printf("\thdr: ");
+ for (i = 0; i < argp->hdr.size; i++) {
+ ch = ((u_int8_t *)argp->hdr.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (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("\tind: ");
+ for (i = 0; i < argp->ind.size; i++) {
+ ch = ((u_int8_t *)argp->ind.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+ return (0);
+}
+
+/*
+ * PUBLIC: int __bam_pgno_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_pgno_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __bam_pgno_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __bam_pgno_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__bam_pgno%s: rec: %lu txnp %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->txnp->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("\tlsn: [%lu][%lu]\n",
+ (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\topgno: %lu\n", (u_long)argp->opgno);
+ (void)printf("\tnpgno: %lu\n", (u_long)argp->npgno);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+ return (0);
+}
+
+/*
* PUBLIC: int __bam_init_print __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
*/
@@ -510,5 +622,11 @@ __bam_init_print(dbenv, dtabp, dtabsizep)
if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
__bam_relink_print, DB___bam_relink)) != 0)
return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_merge_print, DB___bam_merge)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_pgno_print, DB___bam_pgno)) != 0)
+ return (ret);
return (0);
}
diff --git a/db/build_vxworks/BerkeleyDB20.wpj b/db/build_vxworks/BerkeleyDB20.wpj
index 428fb6208..83e8aa33a 100755
--- a/db/build_vxworks/BerkeleyDB20.wpj
+++ b/db/build_vxworks/BerkeleyDB20.wpj
@@ -249,6 +249,24 @@ PENTIUM_release PENTIUM_debug
2.0
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_objects
+bt_compact.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_dependDone
TRUE
<END>
@@ -573,6 +591,24 @@ btree_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_objects
+ctime.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_dependDone
TRUE
<END>
@@ -645,6 +681,24 @@ strdup.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_objects
+strsep.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/db_byteorder.c_dependDone
TRUE
<END>
@@ -663,6 +717,24 @@ db_byteorder.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_objects
+db_clock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/db_err.c_dependDone
TRUE
<END>
@@ -735,6 +807,24 @@ db_log2.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_objects
+mkpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_dependDone
TRUE
<END>
@@ -1005,6 +1095,24 @@ db_cam.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_objects
+db_cds.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_dependDone
TRUE
<END>
@@ -1563,6 +1671,42 @@ db_shash.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_objects
+env_config.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_objects
+env_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_dependDone
TRUE
<END>
@@ -1653,6 +1797,24 @@ env_region.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_objects
+env_register.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_stat.c_dependDone
TRUE
<END>
@@ -2085,6 +2247,24 @@ lock_deadlock.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_objects
+lock_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_id.c_dependDone
TRUE
<END>
@@ -2265,6 +2445,24 @@ log_compare.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_objects
+log_debug.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_dependDone
TRUE
<END>
@@ -2481,6 +2679,24 @@ mp_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_objects
+mp_mvcc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_dependDone
TRUE
<END>
@@ -2571,39 +2787,111 @@ mp_trickle.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_objects
+mut_alloc.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_objects
+mut_failchk.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_objects
+mut_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_objects
+mut_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_objects
+mut_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.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>
@@ -2697,6 +2985,24 @@ os_fid.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_objects
+os_flock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_dependDone
TRUE
<END>
@@ -2715,39 +3021,57 @@ os_fsync.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_objects
+os_fzero.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_objects
+os_getenv.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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>
@@ -2769,6 +3093,24 @@ os_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_objects
+os_mkdir.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_dependDone
TRUE
<END>
@@ -2805,6 +3147,24 @@ os_open.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_objects
+os_pid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_dependDone
TRUE
<END>
@@ -2859,24 +3219,6 @@ os_root.o
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>
@@ -3003,6 +3345,24 @@ os_truncate.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_objects
+os_uid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_dependDone
TRUE
<END>
@@ -3021,6 +3381,24 @@ os_unlink.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_objects
+os_yield.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_dependDone
TRUE
<END>
@@ -3075,6 +3453,24 @@ os_vx_map.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.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_rpath.c_objects
+os_vx_rpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../qam/qam.c_dependDone
TRUE
<END>
@@ -3291,6 +3687,42 @@ rep_backup.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_objects
+rep_elect.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_objects
+rep_log.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_method.c_dependDone
TRUE
<END>
@@ -3381,6 +3813,24 @@ rep_util.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_objects
+rep_verify.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../txn/txn.c_dependDone
TRUE
<END>
@@ -3417,6 +3867,42 @@ txn_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_objects
+txn_chkpt.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_objects
+txn_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_dependDone
TRUE
<END>
@@ -3580,7 +4066,8 @@ C/C++ compiler
<END>
<BEGIN> PROJECT_FILES
-$(PRJ_DIR)/../btree/bt_compare.c \
+$(PRJ_DIR)/../btree/bt_compact.c \
+ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_conv.c \
$(PRJ_DIR)/../btree/bt_curadj.c \
$(PRJ_DIR)/../btree/bt_cursor.c \
@@ -3598,15 +4085,19 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_upgrade.c \
$(PRJ_DIR)/../btree/bt_verify.c \
$(PRJ_DIR)/../btree/btree_auto.c \
+ $(PRJ_DIR)/../clib/ctime.c \
$(PRJ_DIR)/../clib/getopt.c \
$(PRJ_DIR)/../clib/snprintf.c \
$(PRJ_DIR)/../clib/strcasecmp.c \
$(PRJ_DIR)/../clib/strdup.c \
+ $(PRJ_DIR)/../clib/strsep.c \
$(PRJ_DIR)/../common/db_byteorder.c \
+ $(PRJ_DIR)/../common/db_clock.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/mkpath.c \
$(PRJ_DIR)/../common/util_arg.c \
$(PRJ_DIR)/../common/util_cache.c \
$(PRJ_DIR)/../common/util_log.c \
@@ -3622,6 +4113,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../db/db_am.c \
$(PRJ_DIR)/../db/db_auto.c \
$(PRJ_DIR)/../db/db_cam.c \
+ $(PRJ_DIR)/../db/db_cds.c \
$(PRJ_DIR)/../db/db_conv.c \
$(PRJ_DIR)/../db/db_dispatch.c \
$(PRJ_DIR)/../db/db_dup.c \
@@ -3653,11 +4145,14 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../dbreg/dbreg_util.c \
$(PRJ_DIR)/../env/db_salloc.c \
$(PRJ_DIR)/../env/db_shash.c \
+ $(PRJ_DIR)/../env/env_config.c \
+ $(PRJ_DIR)/../env/env_failchk.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)/../env/env_register.c \
$(PRJ_DIR)/../env/env_stat.c \
$(PRJ_DIR)/../fileops/fileops_auto.c \
$(PRJ_DIR)/../fileops/fop_basic.c \
@@ -3682,6 +4177,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../hsearch/hsearch.c \
$(PRJ_DIR)/../lock/lock.c \
$(PRJ_DIR)/../lock/lock_deadlock.c \
+ $(PRJ_DIR)/../lock/lock_failchk.c \
$(PRJ_DIR)/../lock/lock_id.c \
$(PRJ_DIR)/../lock/lock_list.c \
$(PRJ_DIR)/../lock/lock_method.c \
@@ -3692,6 +4188,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../log/log.c \
$(PRJ_DIR)/../log/log_archive.c \
$(PRJ_DIR)/../log/log_compare.c \
+ $(PRJ_DIR)/../log/log_debug.c \
$(PRJ_DIR)/../log/log_get.c \
$(PRJ_DIR)/../log/log_method.c \
$(PRJ_DIR)/../log/log_put.c \
@@ -3704,28 +4201,36 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../mp/mp_fput.c \
$(PRJ_DIR)/../mp/mp_fset.c \
$(PRJ_DIR)/../mp/mp_method.c \
+ $(PRJ_DIR)/../mp/mp_mvcc.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_alloc.c \
+ $(PRJ_DIR)/../mutex/mut_failchk.c \
+ $(PRJ_DIR)/../mutex/mut_method.c \
+ $(PRJ_DIR)/../mutex/mut_region.c \
+ $(PRJ_DIR)/../mutex/mut_stat.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_flock.c \
$(PRJ_DIR)/../os/os_fsync.c \
+ $(PRJ_DIR)/../os/os_fzero.c \
+ $(PRJ_DIR)/../os/os_getenv.c \
$(PRJ_DIR)/../os/os_handle.c \
- $(PRJ_DIR)/../os/os_id.c \
$(PRJ_DIR)/../os/os_method.c \
+ $(PRJ_DIR)/../os/os_mkdir.c \
$(PRJ_DIR)/../os/os_oflags.c \
$(PRJ_DIR)/../os/os_open.c \
+ $(PRJ_DIR)/../os/os_pid.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 \
@@ -3733,10 +4238,13 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../os/os_stat.c \
$(PRJ_DIR)/../os/os_tmpdir.c \
$(PRJ_DIR)/../os/os_truncate.c \
+ $(PRJ_DIR)/../os/os_uid.c \
$(PRJ_DIR)/../os/os_unlink.c \
+ $(PRJ_DIR)/../os/os_yield.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)/../os_vxworks/os_vx_rpath.c \
$(PRJ_DIR)/../qam/qam.c \
$(PRJ_DIR)/../qam/qam_auto.c \
$(PRJ_DIR)/../qam/qam_conv.c \
@@ -3749,13 +4257,18 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../qam/qam_verify.c \
$(PRJ_DIR)/../rep/rep_auto.c \
$(PRJ_DIR)/../rep/rep_backup.c \
+ $(PRJ_DIR)/../rep/rep_elect.c \
+ $(PRJ_DIR)/../rep/rep_log.c \
$(PRJ_DIR)/../rep/rep_method.c \
$(PRJ_DIR)/../rep/rep_record.c \
$(PRJ_DIR)/../rep/rep_region.c \
$(PRJ_DIR)/../rep/rep_stat.c \
$(PRJ_DIR)/../rep/rep_util.c \
+ $(PRJ_DIR)/../rep/rep_verify.c \
$(PRJ_DIR)/../txn/txn.c \
$(PRJ_DIR)/../txn/txn_auto.c \
+ $(PRJ_DIR)/../txn/txn_chkpt.c \
+ $(PRJ_DIR)/../txn/txn_failchk.c \
$(PRJ_DIR)/../txn/txn_method.c \
$(PRJ_DIR)/../txn/txn_rec.c \
$(PRJ_DIR)/../txn/txn_recover.c \
diff --git a/db/build_vxworks/BerkeleyDB20small.wpj b/db/build_vxworks/BerkeleyDB20small.wpj
index 3729dc49d..2e3b8b546 100755
--- a/db/build_vxworks/BerkeleyDB20small.wpj
+++ b/db/build_vxworks/BerkeleyDB20small.wpj
@@ -249,6 +249,24 @@ PENTIUM_release PENTIUM_debug
2.0
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_objects
+bt_compact.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_dependDone
TRUE
<END>
@@ -555,6 +573,24 @@ btree_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_objects
+ctime.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_dependDone
TRUE
<END>
@@ -627,6 +663,24 @@ strdup.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_objects
+strsep.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/crypto_stub.c_dependDone
TRUE
<END>
@@ -735,6 +789,24 @@ db_log2.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_objects
+mkpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_dependDone
TRUE
<END>
@@ -915,6 +987,24 @@ db_cam.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_objects
+db_cds.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_dependDone
TRUE
<END>
@@ -1437,6 +1527,42 @@ db_shash.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_objects
+env_config.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_objects
+env_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_dependDone
TRUE
<END>
@@ -1527,6 +1653,24 @@ env_region.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_objects
+env_register.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_stat.c_dependDone
TRUE
<END>
@@ -1725,6 +1869,24 @@ lock_deadlock.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_objects
+lock_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_id.c_dependDone
TRUE
<END>
@@ -1905,6 +2067,24 @@ log_compare.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_objects
+log_debug.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_dependDone
TRUE
<END>
@@ -2121,6 +2301,24 @@ mp_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_objects
+mp_mvcc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_dependDone
TRUE
<END>
@@ -2211,39 +2409,111 @@ mp_trickle.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_objects
+mut_alloc.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_objects
+mut_failchk.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_objects
+mut_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_objects
+mut_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_objects
+mut_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.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>
@@ -2337,6 +2607,24 @@ os_fid.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_objects
+os_flock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_dependDone
TRUE
<END>
@@ -2355,39 +2643,57 @@ os_fsync.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_objects
+os_fzero.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_objects
+os_getenv.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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>
@@ -2409,6 +2715,24 @@ os_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_objects
+os_mkdir.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_dependDone
TRUE
<END>
@@ -2445,6 +2769,24 @@ os_open.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_objects
+os_pid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_dependDone
TRUE
<END>
@@ -2499,24 +2841,6 @@ os_root.o
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>
@@ -2643,6 +2967,24 @@ os_truncate.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_objects
+os_uid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_dependDone
TRUE
<END>
@@ -2661,6 +3003,24 @@ os_unlink.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_objects
+os_yield.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_dependDone
TRUE
<END>
@@ -2715,6 +3075,24 @@ os_vx_map.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.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_rpath.c_objects
+os_vx_rpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_stub.c_dependDone
TRUE
<END>
@@ -2787,6 +3165,42 @@ txn_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_objects
+txn_chkpt.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_objects
+txn_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_dependDone
TRUE
<END>
@@ -2950,7 +3364,8 @@ C/C++ compiler
<END>
<BEGIN> PROJECT_FILES
-$(PRJ_DIR)/../btree/bt_compare.c \
+$(PRJ_DIR)/../btree/bt_compact.c \
+ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_conv.c \
$(PRJ_DIR)/../btree/bt_curadj.c \
$(PRJ_DIR)/../btree/bt_cursor.c \
@@ -2967,16 +3382,19 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_stat.c \
$(PRJ_DIR)/../btree/bt_upgrade.c \
$(PRJ_DIR)/../btree/btree_auto.c \
+ $(PRJ_DIR)/../clib/ctime.c \
$(PRJ_DIR)/../clib/getopt.c \
$(PRJ_DIR)/../clib/snprintf.c \
$(PRJ_DIR)/../clib/strcasecmp.c \
$(PRJ_DIR)/../clib/strdup.c \
+ $(PRJ_DIR)/../clib/strsep.c \
$(PRJ_DIR)/../common/crypto_stub.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/mkpath.c \
$(PRJ_DIR)/../common/util_arg.c \
$(PRJ_DIR)/../common/util_cache.c \
$(PRJ_DIR)/../common/util_log.c \
@@ -2987,6 +3405,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../db/db_am.c \
$(PRJ_DIR)/../db/db_auto.c \
$(PRJ_DIR)/../db/db_cam.c \
+ $(PRJ_DIR)/../db/db_cds.c \
$(PRJ_DIR)/../db/db_conv.c \
$(PRJ_DIR)/../db/db_dispatch.c \
$(PRJ_DIR)/../db/db_dup.c \
@@ -3016,11 +3435,14 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../dbreg/dbreg_util.c \
$(PRJ_DIR)/../env/db_salloc.c \
$(PRJ_DIR)/../env/db_shash.c \
+ $(PRJ_DIR)/../env/env_config.c \
+ $(PRJ_DIR)/../env/env_failchk.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)/../env/env_register.c \
$(PRJ_DIR)/../env/env_stat.c \
$(PRJ_DIR)/../fileops/fileops_auto.c \
$(PRJ_DIR)/../fileops/fop_basic.c \
@@ -3032,6 +3454,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../hmac/sha1.c \
$(PRJ_DIR)/../lock/lock.c \
$(PRJ_DIR)/../lock/lock_deadlock.c \
+ $(PRJ_DIR)/../lock/lock_failchk.c \
$(PRJ_DIR)/../lock/lock_id.c \
$(PRJ_DIR)/../lock/lock_list.c \
$(PRJ_DIR)/../lock/lock_method.c \
@@ -3042,6 +3465,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../log/log.c \
$(PRJ_DIR)/../log/log_archive.c \
$(PRJ_DIR)/../log/log_compare.c \
+ $(PRJ_DIR)/../log/log_debug.c \
$(PRJ_DIR)/../log/log_get.c \
$(PRJ_DIR)/../log/log_method.c \
$(PRJ_DIR)/../log/log_put.c \
@@ -3054,28 +3478,36 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../mp/mp_fput.c \
$(PRJ_DIR)/../mp/mp_fset.c \
$(PRJ_DIR)/../mp/mp_method.c \
+ $(PRJ_DIR)/../mp/mp_mvcc.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_alloc.c \
+ $(PRJ_DIR)/../mutex/mut_failchk.c \
+ $(PRJ_DIR)/../mutex/mut_method.c \
+ $(PRJ_DIR)/../mutex/mut_region.c \
+ $(PRJ_DIR)/../mutex/mut_stat.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_flock.c \
$(PRJ_DIR)/../os/os_fsync.c \
+ $(PRJ_DIR)/../os/os_fzero.c \
+ $(PRJ_DIR)/../os/os_getenv.c \
$(PRJ_DIR)/../os/os_handle.c \
- $(PRJ_DIR)/../os/os_id.c \
$(PRJ_DIR)/../os/os_method.c \
+ $(PRJ_DIR)/../os/os_mkdir.c \
$(PRJ_DIR)/../os/os_oflags.c \
$(PRJ_DIR)/../os/os_open.c \
+ $(PRJ_DIR)/../os/os_pid.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 \
@@ -3083,14 +3515,19 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../os/os_stat.c \
$(PRJ_DIR)/../os/os_tmpdir.c \
$(PRJ_DIR)/../os/os_truncate.c \
+ $(PRJ_DIR)/../os/os_uid.c \
$(PRJ_DIR)/../os/os_unlink.c \
+ $(PRJ_DIR)/../os/os_yield.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)/../os_vxworks/os_vx_rpath.c \
$(PRJ_DIR)/../qam/qam_stub.c \
$(PRJ_DIR)/../rep/rep_stub.c \
$(PRJ_DIR)/../txn/txn.c \
$(PRJ_DIR)/../txn/txn_auto.c \
+ $(PRJ_DIR)/../txn/txn_chkpt.c \
+ $(PRJ_DIR)/../txn/txn_failchk.c \
$(PRJ_DIR)/../txn/txn_method.c \
$(PRJ_DIR)/../txn/txn_rec.c \
$(PRJ_DIR)/../txn/txn_recover.c \
diff --git a/db/build_vxworks/BerkeleyDB22.wpj b/db/build_vxworks/BerkeleyDB22.wpj
index 36ae3efb4..a130b4833 100755
--- a/db/build_vxworks/BerkeleyDB22.wpj
+++ b/db/build_vxworks/BerkeleyDB22.wpj
@@ -308,6 +308,24 @@ PENTIUM_release PENTIUM_debug
2.2
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_objects
+bt_compact.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_dependDone
TRUE
<END>
@@ -632,6 +650,24 @@ btree_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_objects
+ctime.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_dependDone
TRUE
<END>
@@ -704,6 +740,24 @@ strdup.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_objects
+strsep.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/db_byteorder.c_dependDone
TRUE
<END>
@@ -722,6 +776,24 @@ db_byteorder.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_objects
+db_clock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_clock.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/db_err.c_dependDone
TRUE
<END>
@@ -794,6 +866,24 @@ db_log2.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_objects
+mkpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_dependDone
TRUE
<END>
@@ -1064,6 +1154,24 @@ db_cam.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_objects
+db_cds.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_dependDone
TRUE
<END>
@@ -1622,6 +1730,42 @@ db_shash.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_objects
+env_config.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_objects
+env_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_dependDone
TRUE
<END>
@@ -1712,6 +1856,24 @@ env_region.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_objects
+env_register.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_stat.c_dependDone
TRUE
<END>
@@ -2144,6 +2306,24 @@ lock_deadlock.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_objects
+lock_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_id.c_dependDone
TRUE
<END>
@@ -2324,6 +2504,24 @@ log_compare.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_objects
+log_debug.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_dependDone
TRUE
<END>
@@ -2540,6 +2738,24 @@ mp_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_objects
+mp_mvcc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_dependDone
TRUE
<END>
@@ -2630,39 +2846,111 @@ mp_trickle.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_objects
+mut_alloc.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_objects
+mut_failchk.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_objects
+mut_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_objects
+mut_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_objects
+mut_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.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>
@@ -2756,6 +3044,24 @@ os_fid.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_objects
+os_flock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_dependDone
TRUE
<END>
@@ -2774,39 +3080,57 @@ os_fsync.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_objects
+os_fzero.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_objects
+os_getenv.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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>
@@ -2828,6 +3152,24 @@ os_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_objects
+os_mkdir.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_dependDone
TRUE
<END>
@@ -2864,6 +3206,24 @@ os_open.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_objects
+os_pid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_dependDone
TRUE
<END>
@@ -2918,24 +3278,6 @@ os_root.o
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>
@@ -3062,6 +3404,24 @@ os_truncate.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_objects
+os_uid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_dependDone
TRUE
<END>
@@ -3080,6 +3440,24 @@ os_unlink.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_objects
+os_yield.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_dependDone
TRUE
<END>
@@ -3134,6 +3512,24 @@ os_vx_map.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.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_rpath.c_objects
+os_vx_rpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../qam/qam.c_dependDone
TRUE
<END>
@@ -3350,6 +3746,42 @@ rep_backup.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_objects
+rep_elect.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_elect.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_objects
+rep_log.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_log.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_method.c_dependDone
TRUE
<END>
@@ -3440,6 +3872,24 @@ rep_util.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_objects
+rep_verify.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_verify.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../txn/txn.c_dependDone
TRUE
<END>
@@ -3476,6 +3926,42 @@ txn_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_objects
+txn_chkpt.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_objects
+txn_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_dependDone
TRUE
<END>
@@ -3639,7 +4125,8 @@ C/C++ compiler
<END>
<BEGIN> PROJECT_FILES
-$(PRJ_DIR)/../btree/bt_compare.c \
+$(PRJ_DIR)/../btree/bt_compact.c \
+ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_conv.c \
$(PRJ_DIR)/../btree/bt_curadj.c \
$(PRJ_DIR)/../btree/bt_cursor.c \
@@ -3657,15 +4144,19 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_upgrade.c \
$(PRJ_DIR)/../btree/bt_verify.c \
$(PRJ_DIR)/../btree/btree_auto.c \
+ $(PRJ_DIR)/../clib/ctime.c \
$(PRJ_DIR)/../clib/getopt.c \
$(PRJ_DIR)/../clib/snprintf.c \
$(PRJ_DIR)/../clib/strcasecmp.c \
$(PRJ_DIR)/../clib/strdup.c \
+ $(PRJ_DIR)/../clib/strsep.c \
$(PRJ_DIR)/../common/db_byteorder.c \
+ $(PRJ_DIR)/../common/db_clock.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/mkpath.c \
$(PRJ_DIR)/../common/util_arg.c \
$(PRJ_DIR)/../common/util_cache.c \
$(PRJ_DIR)/../common/util_log.c \
@@ -3681,6 +4172,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../db/db_am.c \
$(PRJ_DIR)/../db/db_auto.c \
$(PRJ_DIR)/../db/db_cam.c \
+ $(PRJ_DIR)/../db/db_cds.c \
$(PRJ_DIR)/../db/db_conv.c \
$(PRJ_DIR)/../db/db_dispatch.c \
$(PRJ_DIR)/../db/db_dup.c \
@@ -3712,11 +4204,14 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../dbreg/dbreg_util.c \
$(PRJ_DIR)/../env/db_salloc.c \
$(PRJ_DIR)/../env/db_shash.c \
+ $(PRJ_DIR)/../env/env_config.c \
+ $(PRJ_DIR)/../env/env_failchk.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)/../env/env_register.c \
$(PRJ_DIR)/../env/env_stat.c \
$(PRJ_DIR)/../fileops/fileops_auto.c \
$(PRJ_DIR)/../fileops/fop_basic.c \
@@ -3741,6 +4236,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../hsearch/hsearch.c \
$(PRJ_DIR)/../lock/lock.c \
$(PRJ_DIR)/../lock/lock_deadlock.c \
+ $(PRJ_DIR)/../lock/lock_failchk.c \
$(PRJ_DIR)/../lock/lock_id.c \
$(PRJ_DIR)/../lock/lock_list.c \
$(PRJ_DIR)/../lock/lock_method.c \
@@ -3751,6 +4247,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../log/log.c \
$(PRJ_DIR)/../log/log_archive.c \
$(PRJ_DIR)/../log/log_compare.c \
+ $(PRJ_DIR)/../log/log_debug.c \
$(PRJ_DIR)/../log/log_get.c \
$(PRJ_DIR)/../log/log_method.c \
$(PRJ_DIR)/../log/log_put.c \
@@ -3763,28 +4260,36 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../mp/mp_fput.c \
$(PRJ_DIR)/../mp/mp_fset.c \
$(PRJ_DIR)/../mp/mp_method.c \
+ $(PRJ_DIR)/../mp/mp_mvcc.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_alloc.c \
+ $(PRJ_DIR)/../mutex/mut_failchk.c \
+ $(PRJ_DIR)/../mutex/mut_method.c \
+ $(PRJ_DIR)/../mutex/mut_region.c \
+ $(PRJ_DIR)/../mutex/mut_stat.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_flock.c \
$(PRJ_DIR)/../os/os_fsync.c \
+ $(PRJ_DIR)/../os/os_fzero.c \
+ $(PRJ_DIR)/../os/os_getenv.c \
$(PRJ_DIR)/../os/os_handle.c \
- $(PRJ_DIR)/../os/os_id.c \
$(PRJ_DIR)/../os/os_method.c \
+ $(PRJ_DIR)/../os/os_mkdir.c \
$(PRJ_DIR)/../os/os_oflags.c \
$(PRJ_DIR)/../os/os_open.c \
+ $(PRJ_DIR)/../os/os_pid.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 \
@@ -3792,10 +4297,13 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../os/os_stat.c \
$(PRJ_DIR)/../os/os_tmpdir.c \
$(PRJ_DIR)/../os/os_truncate.c \
+ $(PRJ_DIR)/../os/os_uid.c \
$(PRJ_DIR)/../os/os_unlink.c \
+ $(PRJ_DIR)/../os/os_yield.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)/../os_vxworks/os_vx_rpath.c \
$(PRJ_DIR)/../qam/qam.c \
$(PRJ_DIR)/../qam/qam_auto.c \
$(PRJ_DIR)/../qam/qam_conv.c \
@@ -3808,13 +4316,18 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../qam/qam_verify.c \
$(PRJ_DIR)/../rep/rep_auto.c \
$(PRJ_DIR)/../rep/rep_backup.c \
+ $(PRJ_DIR)/../rep/rep_elect.c \
+ $(PRJ_DIR)/../rep/rep_log.c \
$(PRJ_DIR)/../rep/rep_method.c \
$(PRJ_DIR)/../rep/rep_record.c \
$(PRJ_DIR)/../rep/rep_region.c \
$(PRJ_DIR)/../rep/rep_stat.c \
$(PRJ_DIR)/../rep/rep_util.c \
+ $(PRJ_DIR)/../rep/rep_verify.c \
$(PRJ_DIR)/../txn/txn.c \
$(PRJ_DIR)/../txn/txn_auto.c \
+ $(PRJ_DIR)/../txn/txn_chkpt.c \
+ $(PRJ_DIR)/../txn/txn_failchk.c \
$(PRJ_DIR)/../txn/txn_method.c \
$(PRJ_DIR)/../txn/txn_rec.c \
$(PRJ_DIR)/../txn/txn_recover.c \
diff --git a/db/build_vxworks/BerkeleyDB22small.wpj b/db/build_vxworks/BerkeleyDB22small.wpj
index dce76777c..622bc9650 100755
--- a/db/build_vxworks/BerkeleyDB22small.wpj
+++ b/db/build_vxworks/BerkeleyDB22small.wpj
@@ -308,6 +308,24 @@ PENTIUM_release PENTIUM_debug
2.2
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_objects
+bt_compact.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compact.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_dependDone
TRUE
<END>
@@ -614,6 +632,24 @@ btree_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_objects
+ctime.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/ctime.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_dependDone
TRUE
<END>
@@ -686,6 +722,24 @@ strdup.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_objects
+strsep.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strsep.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/crypto_stub.c_dependDone
TRUE
<END>
@@ -794,6 +848,24 @@ db_log2.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_objects
+mkpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/mkpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_dependDone
TRUE
<END>
@@ -974,6 +1046,24 @@ db_cam.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_objects
+db_cds.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cds.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_dependDone
TRUE
<END>
@@ -1496,6 +1586,42 @@ db_shash.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_objects
+env_config.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_config.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_objects
+env_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_dependDone
TRUE
<END>
@@ -1586,6 +1712,24 @@ env_region.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_objects
+env_register.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_register.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../env/env_stat.c_dependDone
TRUE
<END>
@@ -1784,6 +1928,24 @@ lock_deadlock.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_objects
+lock_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_id.c_dependDone
TRUE
<END>
@@ -1964,6 +2126,24 @@ log_compare.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_objects
+log_debug.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_debug.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_dependDone
TRUE
<END>
@@ -2180,6 +2360,24 @@ mp_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_objects
+mp_mvcc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_mvcc.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_dependDone
TRUE
<END>
@@ -2270,39 +2468,111 @@ mp_trickle.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_objects
+mut_alloc.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_alloc.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.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
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_objects
+mut_failchk.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_failchk.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_objects
+mut_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_objects
+mut_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.c_objects
+mut_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_stat.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>
@@ -2396,6 +2666,24 @@ os_fid.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_objects
+os_flock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_flock.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_dependDone
TRUE
<END>
@@ -2414,39 +2702,57 @@ os_fsync.o
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_objects
+os_fzero.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fzero.c_tool
C/C++ compiler
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependDone
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_dependDone
TRUE
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependencies
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.c_objects
+os_getenv.o
<END>
-<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_tool
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_getenv.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>
@@ -2468,6 +2774,24 @@ os_method.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_objects
+os_mkdir.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_mkdir.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_dependDone
TRUE
<END>
@@ -2504,6 +2828,24 @@ os_open.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_objects
+os_pid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_pid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_dependDone
TRUE
<END>
@@ -2558,24 +2900,6 @@ os_root.o
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>
@@ -2702,6 +3026,24 @@ os_truncate.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_objects
+os_uid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_uid.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_dependDone
TRUE
<END>
@@ -2720,6 +3062,24 @@ os_unlink.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_objects
+os_yield.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_yield.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_dependDone
TRUE
<END>
@@ -2774,6 +3134,24 @@ os_vx_map.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.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_rpath.c_objects
+os_vx_rpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_rpath.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_stub.c_dependDone
TRUE
<END>
@@ -2846,6 +3224,42 @@ txn_auto.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_objects
+txn_chkpt.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_chkpt.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_objects
+txn_failchk.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_failchk.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_dependDone
TRUE
<END>
@@ -3009,7 +3423,8 @@ C/C++ compiler
<END>
<BEGIN> PROJECT_FILES
-$(PRJ_DIR)/../btree/bt_compare.c \
+$(PRJ_DIR)/../btree/bt_compact.c \
+ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_conv.c \
$(PRJ_DIR)/../btree/bt_curadj.c \
$(PRJ_DIR)/../btree/bt_cursor.c \
@@ -3026,16 +3441,19 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../btree/bt_stat.c \
$(PRJ_DIR)/../btree/bt_upgrade.c \
$(PRJ_DIR)/../btree/btree_auto.c \
+ $(PRJ_DIR)/../clib/ctime.c \
$(PRJ_DIR)/../clib/getopt.c \
$(PRJ_DIR)/../clib/snprintf.c \
$(PRJ_DIR)/../clib/strcasecmp.c \
$(PRJ_DIR)/../clib/strdup.c \
+ $(PRJ_DIR)/../clib/strsep.c \
$(PRJ_DIR)/../common/crypto_stub.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/mkpath.c \
$(PRJ_DIR)/../common/util_arg.c \
$(PRJ_DIR)/../common/util_cache.c \
$(PRJ_DIR)/../common/util_log.c \
@@ -3046,6 +3464,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../db/db_am.c \
$(PRJ_DIR)/../db/db_auto.c \
$(PRJ_DIR)/../db/db_cam.c \
+ $(PRJ_DIR)/../db/db_cds.c \
$(PRJ_DIR)/../db/db_conv.c \
$(PRJ_DIR)/../db/db_dispatch.c \
$(PRJ_DIR)/../db/db_dup.c \
@@ -3075,11 +3494,14 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../dbreg/dbreg_util.c \
$(PRJ_DIR)/../env/db_salloc.c \
$(PRJ_DIR)/../env/db_shash.c \
+ $(PRJ_DIR)/../env/env_config.c \
+ $(PRJ_DIR)/../env/env_failchk.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)/../env/env_register.c \
$(PRJ_DIR)/../env/env_stat.c \
$(PRJ_DIR)/../fileops/fileops_auto.c \
$(PRJ_DIR)/../fileops/fop_basic.c \
@@ -3091,6 +3513,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../hmac/sha1.c \
$(PRJ_DIR)/../lock/lock.c \
$(PRJ_DIR)/../lock/lock_deadlock.c \
+ $(PRJ_DIR)/../lock/lock_failchk.c \
$(PRJ_DIR)/../lock/lock_id.c \
$(PRJ_DIR)/../lock/lock_list.c \
$(PRJ_DIR)/../lock/lock_method.c \
@@ -3101,6 +3524,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../log/log.c \
$(PRJ_DIR)/../log/log_archive.c \
$(PRJ_DIR)/../log/log_compare.c \
+ $(PRJ_DIR)/../log/log_debug.c \
$(PRJ_DIR)/../log/log_get.c \
$(PRJ_DIR)/../log/log_method.c \
$(PRJ_DIR)/../log/log_put.c \
@@ -3113,28 +3537,36 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../mp/mp_fput.c \
$(PRJ_DIR)/../mp/mp_fset.c \
$(PRJ_DIR)/../mp/mp_method.c \
+ $(PRJ_DIR)/../mp/mp_mvcc.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_alloc.c \
+ $(PRJ_DIR)/../mutex/mut_failchk.c \
+ $(PRJ_DIR)/../mutex/mut_method.c \
+ $(PRJ_DIR)/../mutex/mut_region.c \
+ $(PRJ_DIR)/../mutex/mut_stat.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_flock.c \
$(PRJ_DIR)/../os/os_fsync.c \
+ $(PRJ_DIR)/../os/os_fzero.c \
+ $(PRJ_DIR)/../os/os_getenv.c \
$(PRJ_DIR)/../os/os_handle.c \
- $(PRJ_DIR)/../os/os_id.c \
$(PRJ_DIR)/../os/os_method.c \
+ $(PRJ_DIR)/../os/os_mkdir.c \
$(PRJ_DIR)/../os/os_oflags.c \
$(PRJ_DIR)/../os/os_open.c \
+ $(PRJ_DIR)/../os/os_pid.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 \
@@ -3142,14 +3574,19 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../os/os_stat.c \
$(PRJ_DIR)/../os/os_tmpdir.c \
$(PRJ_DIR)/../os/os_truncate.c \
+ $(PRJ_DIR)/../os/os_uid.c \
$(PRJ_DIR)/../os/os_unlink.c \
+ $(PRJ_DIR)/../os/os_yield.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)/../os_vxworks/os_vx_rpath.c \
$(PRJ_DIR)/../qam/qam_stub.c \
$(PRJ_DIR)/../rep/rep_stub.c \
$(PRJ_DIR)/../txn/txn.c \
$(PRJ_DIR)/../txn/txn_auto.c \
+ $(PRJ_DIR)/../txn/txn_chkpt.c \
+ $(PRJ_DIR)/../txn/txn_failchk.c \
$(PRJ_DIR)/../txn/txn_method.c \
$(PRJ_DIR)/../txn/txn_rec.c \
$(PRJ_DIR)/../txn/txn_recover.c \
diff --git a/db/build_vxworks/clib_port.h b/db/build_vxworks/clib_port.h
new file mode 100644
index 000000000..cfefbb37d
--- /dev/null
+++ b/db/build_vxworks/clib_port.h
@@ -0,0 +1,97 @@
+/*
+ * Exit success/failure macros.
+ */
+#ifndef HAVE_EXIT_SUCCESS
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+#endif
+
+/*
+ * 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.
+ */
+#ifndef HAVE_ATOI
+#define atoi __db_Catoi
+#endif
+#ifndef HAVE_ATOL
+#define atol __db_Catol
+#endif
+#ifndef HAVE_GETADDRINFO
+#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
+#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
+#endif
+#ifndef HAVE_GETCWD
+#define getcwd __db_Cgetcwd
+#endif
+#ifndef HAVE_GETOPT
+#define getopt __db_Cgetopt
+#define optarg __db_Coptarg
+#define opterr __db_Copterr
+#define optind __db_Coptind
+#define optopt __db_Coptopt
+#define optreset __db_Coptreset
+#endif
+#ifndef HAVE_ISSPACE
+#define isspace __db_Cisspace
+#endif
+#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_PRINTF
+#define printf __db_Cprintf
+#define fprintf __db_Cfprintf
+#endif
+#ifndef HAVE_RAISE
+#define raise __db_Craise
+#endif
+#ifndef HAVE_RAND
+#define rand __db_Crand
+#define srand __db_Csrand
+#endif
+#ifndef HAVE_SNPRINTF
+#define snprintf __db_Csnprintf
+#endif
+#ifndef HAVE_STRCASECMP
+#define strcasecmp __db_Cstrcasecmp
+#define strncasecmp __db_Cstrncasecmp
+#endif
+#ifndef HAVE_STRCAT
+#define strcat __db_Cstrcat
+#endif
+#ifndef HAVE_STRCHR
+#define strchr __db_Cstrchr
+#endif
+#ifndef HAVE_STRDUP
+#define strdup __db_Cstrdup
+#endif
+#ifndef HAVE_STRERROR
+#define strerror __db_Cstrerror
+#endif
+#ifndef HAVE_STRNCAT
+#define strncat __db_Cstrncat
+#endif
+#ifndef HAVE_STRNCMP
+#define strncmp __db_Cstrncmp
+#endif
+#ifndef HAVE_STRRCHR
+#define strrchr __db_Cstrrchr
+#endif
+#ifndef HAVE_STRSEP
+#define strsep __db_Cstrsep
+#endif
+#ifndef HAVE_STRTOL
+#define strtol __db_Cstrtol
+#endif
+#ifndef HAVE_STRTOUL
+#define strtoul __db_Cstrtoul
+#endif
+#ifndef HAVE_VSNPRINTF
+#define vsnprintf __db_Cvsnprintf
+#endif
diff --git a/db/build_vxworks/db.h b/db/build_vxworks/db.h
index 5e6b44fe5..e297af6d0 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db.in,v 11.463 2004/10/11 18:47:50 bostic Exp $
+ * $Id: db.in,v 12.108 2006/09/13 14:53:37 mjc Exp $
*
* db.h include file layout:
* General.
@@ -44,9 +44,9 @@ extern "C" {
* Berkeley DB version information.
*/
#define DB_VERSION_MAJOR 4
-#define DB_VERSION_MINOR 3
-#define DB_VERSION_PATCH 27
-#define DB_VERSION_STRING "Sleepycat Software: Berkeley DB 4.3.27: (December 22, 2004)"
+#define DB_VERSION_MINOR 5
+#define DB_VERSION_PATCH 20
+#define DB_VERSION_STRING "Berkeley DB 4.5.20: (September 20, 2006)"
/*
* !!!
@@ -67,7 +67,7 @@ typedef unsigned char u_int8_t;
typedef unsigned short u_int16_t;
typedef unsigned int u_int32_t;
-
+typedef unsigned long long u_int64_t;
#endif
@@ -78,9 +78,7 @@ typedef unsigned int u_int32_t;
* (and we don't have to worry about systems that store floats in other than
* power-of-2 numbers of bytes). Additionally this fixes compilers that rewrite
* structure assignments and ANSI C memcpy calls to be in-line instructions
- * that happen to require alignment. Note: this alignment isn't sufficient for
- * mutexes, which depend on things like cache line alignment. Mutex alignment
- * is handled separately, in mutex.h.
+ * that happen to require alignment.
*
* uintptr_t --
* Unsigned type that's the same size as a pointer. There are places where
@@ -97,6 +95,9 @@ typedef unsigned long uintptr_t;
*/
typedef int db_seq_t;
+/* Thread and process identification. */
+typedef uintmax_t db_threadid_t;
+
/* 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. */
@@ -123,6 +124,7 @@ typedef uintptr_t roff_t;
struct __db; typedef struct __db DB;
struct __db_bt_stat; typedef struct __db_bt_stat DB_BTREE_STAT;
struct __db_cipher; typedef struct __db_cipher DB_CIPHER;
+struct __db_compact; typedef struct __db_compact DB_COMPACT;
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;
@@ -130,6 +132,8 @@ 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_locktab; typedef struct __db_locktab DB_LOCKTAB;
+struct __db_log; typedef struct __db_log DB_LOG;
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;
@@ -137,13 +141,18 @@ 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_mutex_stat; typedef struct __db_mutex_stat DB_MUTEX_STAT;
+struct __db_mutex_t; typedef struct __db_mutex_t DB_MUTEX;
+struct __db_mutexmgr; typedef struct __db_mutexmgr DB_MUTEXMGR;
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_sequence; typedef struct __db_sequence DB_SEQUENCE;
+struct __db_repmgr_site; \
+ typedef struct __db_repmgr_site DB_REPMGR_SITE;
struct __db_seq_record; typedef struct __db_seq_record DB_SEQ_RECORD;
struct __db_seq_stat; typedef struct __db_seq_stat DB_SEQUENCE_STAT;
+struct __db_sequence; typedef struct __db_sequence DB_SEQUENCE;
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;
@@ -154,13 +163,9 @@ 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 {
- /*
- * data/size must be fields 1 and 2 for DB 1.85 compatibility.
- */
void *data; /* Key/data */
u_int32_t size; /* key/data length */
@@ -168,13 +173,16 @@ struct __db_dbt {
u_int32_t dlen; /* RO: get/put record length. */
u_int32_t doff; /* RO: get/put record offset. */
+ void *app_data;
+
#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. */
+#define DB_DBT_USERCOPY 0x020 /* Use the user-supplied callback. */
+#define DB_DBT_USERMEM 0x040 /* Return in user's memory. */
+#define DB_DBT_DUPOK 0x080 /* Insert if duplicate. */
u_int32_t flags;
};
@@ -184,17 +192,19 @@ struct __db_dbt {
* interface specific flags in this range.
*/
#define DB_CREATE 0x0000001 /* Create file as necessary. */
-#define DB_CXX_NO_EXCEPTIONS 0x0000002 /* C++: return error values. */
+#define DB_DURABLE_UNKNOWN 0x0000002 /* Durability on open (internal). */
#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. */
+#define DB_MULTIVERSION 0x0000008 /* Multiversion concurrency control. */
+#define DB_NOMMAP 0x0000010 /* Don't mmap underlying file. */
+#define DB_RDONLY 0x0000020 /* Read-only (O_RDONLY). */
+#define DB_RECOVER 0x0000040 /* Run normal recovery. */
+#define DB_THREAD 0x0000080 /* Applications are threaded. */
+#define DB_TRUNCATE 0x0000100 /* Discard existing DB (O_TRUNC). */
+#define DB_TXN_NOSYNC 0x0000200 /* Do not sync log on commit. */
+#define DB_TXN_NOT_DURABLE 0x0000400 /* Do not log changes. */
+#define DB_TXN_WRITE_NOSYNC 0x0000800 /* Write the log but don't sync. */
+#define DB_USE_ENVIRON 0x0001000 /* Use the environment. */
+#define DB_USE_ENVIRON_ROOT 0x0002000 /* Use the environment if root. */
/*
* Common flags --
@@ -202,66 +212,84 @@ struct __db_dbt {
* 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_DEGREE_2:
+ * DB_ENV->set_flags, DB->open
+ * (Note: until the 4.3 release, legal to DB->associate, DB->del,
+ * DB->put, DB->remove, DB->rename and DB->truncate, and others.)
+ * DB_READ_COMMITTED:
* DB->cursor, DB->get, DB->join, DBcursor->c_get, DB_ENV->txn_begin
- * DB_DIRTY_READ:
+ * DB_READ_UNCOMMITTED:
* 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
+ * DB_TXN_SNAPSHOT:
+ * DB_ENV->set_flags, DB_ENV->txn_begin, DB->cursor
*
* !!!
- * The DB_DIRTY_READ and DB_DEGREE_2 bit masks can't be changed without
- * also changing the masks for the flags that can be OR'd into DB
+ * The DB_READ_COMMITTED and DB_READ_UNCOMMITTED bit masks 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 0x01000000/* Implied transaction. */
-#define DB_DEGREE_2 0x02000000/* Degree 2. */
-#define DB_DIRTY_READ 0x04000000/* Dirty Read. */
-#define DB_NO_AUTO_COMMIT 0x08000000/* Override env-wide AUTOCOMMIT. */
+#define DB_AUTO_COMMIT 0x02000000/* Implied transaction. */
+
+#define DB_READ_COMMITTED 0x04000000/* Degree 2 isolation. */
+#define DB_DEGREE_2 0x04000000/* Historic name. */
+
+#define DB_READ_UNCOMMITTED 0x08000000/* Degree 1 isolation. */
+#define DB_DIRTY_READ 0x08000000/* Historic name. */
+
+#define DB_TXN_SNAPSHOT 0x10000000/* Snapshot isolation. */
/*
- * Flags private to db_env_create.
+ * Flags common to db_env_create and db_create.
*/
-#define DB_RPCCLIENT 0x0000001 /* An RPC client environment. */
+#define DB_CXX_NO_EXCEPTIONS 0x0000001 /* C++: return error values. */
+
+/*
+ * Flags private to db_env_create.
+ * Shared flags up to 0x0000001 */
+#define DB_RPCCLIENT 0x0000002 /* An RPC client environment. */
/*
* Flags private to db_create.
- */
-#define DB_REP_CREATE 0x0000001 /* Open of an internal rep database. */
+ * Shared flags up to 0x0000001 */
#define DB_XA_CREATE 0x0000002 /* Open in an XA environment. */
/*
* 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. */
+ * Shared flags up to 0x0002000 */
+#define DB_INIT_CDB 0x0004000 /* Concurrent Access Methods. */
+#define DB_INIT_LOCK 0x0008000 /* Initialize locking. */
+#define DB_INIT_LOG 0x0010000 /* Initialize logging. */
+#define DB_INIT_MPOOL 0x0020000 /* Initialize mpool. */
+#define DB_INIT_REP 0x0040000 /* Initialize replication. */
+#define DB_INIT_TXN 0x0080000 /* Initialize transactions. */
+#define DB_LOCKDOWN 0x0100000 /* Lock memory into physical core. */
+#define DB_PRIVATE 0x0200000 /* DB_ENV is process local. */
+#define DB_RECOVER_FATAL 0x0400000 /* Run catastrophic recovery. */
+#define DB_REGISTER 0x0800000 /* Multi-process registry. */
+#define DB_SYSTEM_MEM 0x1000000 /* Use system-backed memory. */
+
+#define DB_JOINENV 0x0 /* Compatibility. */
/*
* Flags private to DB->open.
- * 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. */
+ * Shared flags up to 0x0002000 */
+#define DB_EXCL 0x0004000 /* Exclusive open (O_EXCL). */
+#define DB_FCNTL_LOCKING 0x0008000 /* UNDOC: fcntl(2) locking. */
+#define DB_NO_AUTO_COMMIT 0x0010000 /* Override env-wide AUTOCOMMIT. */
+#define DB_RDWRMASTER 0x0020000 /* UNDOC: allow subdb master open R/W */
+#define DB_WRITEOPEN 0x0040000 /* UNDOC: open with write lock. */
+
+/*
+ * Flags private to DB->associate.
+ * Shared flags up to 0x0002000 */
+#define DB_IMMUTABLE_KEY 0x0004000 /* Secondary key is immutable. */
+/* Shared flags at 0x1000000 */
/*
* 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. */
+ * Shared flags up to 0x0002000 */
+#define DB_TXN_NOWAIT 0x0004000 /* Do not wait for locks in this TXN. */
+#define DB_TXN_SYNC 0x0008000 /* Always sync log on commit. */
/*
* Flags private to DB_ENV->set_encrypt.
@@ -270,25 +298,25 @@ struct __db_dbt {
/*
* Flags private to DB_ENV->set_flags.
- * Shared flags up to 0x00000800 */
-#define DB_CDB_ALLDB 0x00001000/* Set CDB locking per environment. */
-#define DB_DIRECT_DB 0x00002000/* Don't buffer databases in the OS. */
-#define DB_DIRECT_LOG 0x00004000/* Don't buffer log files in the OS. */
-#define DB_DSYNC_LOG 0x00008000/* Set O_DSYNC on the log. */
-#define DB_LOG_AUTOREMOVE 0x00010000/* Automatically remove log files. */
-#define DB_LOG_INMEMORY 0x00020000/* Store logs in buffers in memory. */
-#define DB_NOLOCKING 0x00040000/* Set locking/mutex behavior. */
-#define DB_NOPANIC 0x00080000/* Set panic state per DB_ENV. */
-#define DB_OVERWRITE 0x00100000/* Overwrite unlinked region files. */
-#define DB_PANIC_ENVIRONMENT 0x00200000/* Set panic state per environment. */
-#define DB_REGION_INIT 0x00400000/* Page-fault regions on open. */
-#define DB_TIME_NOTGRANTED 0x00800000/* Return NOTGRANTED on timeout. */
-/* Shared flags at 0x01000000 */
+ * Shared flags up to 0x00002000 */
+#define DB_CDB_ALLDB 0x00004000/* Set CDB locking per environment. */
+#define DB_DIRECT_DB 0x00008000/* Don't buffer databases in the OS. */
+#define DB_DIRECT_LOG 0x00010000/* Don't buffer log files in the OS. */
+#define DB_DSYNC_DB 0x00020000/* Set O_DSYNC on the databases. */
+#define DB_DSYNC_LOG 0x00040000/* Set O_DSYNC on the log. */
+#define DB_LOG_AUTOREMOVE 0x00080000/* Automatically remove log files. */
+#define DB_LOG_INMEMORY 0x00100000/* Store logs in buffers in memory. */
+#define DB_NOLOCKING 0x00200000/* Set locking/mutex behavior. */
+#define DB_NOPANIC 0x00400000/* Set panic state per DB_ENV. */
+#define DB_OVERWRITE 0x00800000/* Overwrite unlinked region files. */
+#define DB_PANIC_ENVIRONMENT 0x01000000/* Set panic state per environment. */
/* Shared flags at 0x02000000 */
/* Shared flags at 0x04000000 */
/* Shared flags at 0x08000000 */
-#define DB_TXN_WRITE_NOSYNC 0x10000000/* Write, don't sync, on txn commit. */
-#define DB_YIELDCPU 0x20000000/* Yield the CPU (a lot). */
+/* Shared flags at 0x10000000 */
+#define DB_REGION_INIT 0x20000000/* Page-fault regions on open. */
+#define DB_TIME_NOTGRANTED 0x40000000/* Return NOTGRANTED on timeout. */
+#define DB_YIELDCPU 0x80000000/* Yield the CPU (a lot). */
/*
* Flags private to DB->set_feedback's callback.
@@ -297,37 +325,47 @@ struct __db_dbt {
#define DB_VERIFY 0x0000002 /* Verifying. */
/*
+ * Flags private to DB->compact.
+ * Shared flags up to 0x00002000
+ */
+#define DB_FREELIST_ONLY 0x00004000 /* Just sort and truncate. */
+#define DB_FREE_SPACE 0x00008000 /* Free space . */
+#define DB_COMPACT_FLAGS \
+ (DB_FREELIST_ONLY | DB_FREE_SPACE)
+
+/*
* 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_DURABLE_UNKNOWN 0x0002000 /* internal: durability on open. */
-#define DB_EXTENT 0x0004000 /* internal: dealing with an extent. */
-#define DB_ODDFILESIZE 0x0008000 /* Truncate file to N * pgsize. */
+ * Shared flags up to 0x0002000 */
+#define DB_DIRECT 0x0004000 /* Don't buffer the file in the OS. */
+#define DB_EXTENT 0x0008000 /* internal: dealing with an extent. */
+#define DB_ODDFILESIZE 0x0010000 /* Truncate file to N * pgsize. */
/*
* Flags private to DB->set_flags.
- */
-#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_INORDER 0x0000010 /* Queue: strict ordering on consume. */
-#define DB_RECNUM 0x0000020 /* Btree: record numbers. */
-#define DB_RENUMBER 0x0000040 /* Recno: renumber on insert/delete. */
-#define DB_REVSPLITOFF 0x0000080 /* Btree: turn off reverse splits. */
-#define DB_SNAPSHOT 0x0000100 /* Recno: snapshot the input. */
+ * Shared flags up to 0x00002000 */
+#define DB_CHKSUM 0x00004000 /* Do checksumming */
+#define DB_DUP 0x00008000 /* Btree, Hash: duplicate keys. */
+#define DB_DUPSORT 0x00010000 /* Btree, Hash: duplicate keys. */
+#define DB_ENCRYPT 0x00020000 /* Btree, Hash: duplicate keys. */
+#define DB_INORDER 0x00040000 /* Queue: strict ordering on consume */
+#define DB_RECNUM 0x00080000 /* Btree: record numbers. */
+#define DB_RENUMBER 0x00100000 /* Recno: renumber on insert/delete. */
+#define DB_REVSPLITOFF 0x00200000 /* Btree: turn off reverse splits. */
+#define DB_SNAPSHOT 0x00400000 /* Recno: snapshot the input. */
/*
* Flags private to the DB_ENV->stat_print, DB->stat and DB->stat_print methods.
*/
-#define DB_STAT_ALL 0x0000001 /* Print: Everything. */
-#define DB_STAT_CLEAR 0x0000002 /* Clear stat after returning values. */
-#define DB_STAT_LOCK_CONF 0x0000004 /* Print: Lock conflict matrix. */
-#define DB_STAT_LOCK_LOCKERS 0x0000008 /* Print: Lockers. */
-#define DB_STAT_LOCK_OBJECTS 0x0000010 /* Print: Lock objects. */
-#define DB_STAT_LOCK_PARAMS 0x0000020 /* Print: Lock parameters. */
-#define DB_STAT_MEMP_HASH 0x0000040 /* Print: Mpool hash buckets. */
-#define DB_STAT_SUBSYSTEM 0x0000080 /* Print: Subsystems too. */
+#define DB_FAST_STAT 0x0000001 /* Don't traverse the database. */
+#define DB_STAT_ALL 0x0000002 /* Print: Everything. */
+#define DB_STAT_CLEAR 0x0000004 /* Clear stat after returning values. */
+#define DB_STAT_LOCK_CONF 0x0000008 /* Print: Lock conflict matrix. */
+#define DB_STAT_LOCK_LOCKERS 0x0000010 /* Print: Lockers. */
+#define DB_STAT_LOCK_OBJECTS 0x0000020 /* Print: Lock objects. */
+#define DB_STAT_LOCK_PARAMS 0x0000040 /* Print: Lock parameters. */
+#define DB_STAT_MEMP_HASH 0x0000080 /* Print: Mpool hash buckets. */
+#define DB_STAT_NOERROR 0x0000100 /* Internal: continue on error. */
+#define DB_STAT_SUBSYSTEM 0x0000200 /* Print: Subsystems too. */
/*
* Flags private to DB->join.
@@ -352,10 +390,45 @@ struct __db_dbt {
*/
/*
- * Flags private to DB->set_rep_transport's send callback.
+ * Flags private to DB->rep_set_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. */
+#define DB_REP_ANYWHERE 0x0000001 /* Message can be serviced anywhere. */
+#define DB_REP_NOBUFFER 0x0000002 /* Do not buffer this message. */
+#define DB_REP_PERMANENT 0x0000004 /* Important--app. may want to flush. */
+#define DB_REP_REREQUEST 0x0000008 /* This msg already been requested. */
+
+/*******************************************************
+ * Mutexes.
+ *******************************************************/
+typedef u_int32_t db_mutex_t;
+
+/*
+ * Flag arguments for DbEnv.mutex_alloc, DbEnv.is_alive and for the
+ * DB_MUTEX structure.
+ */
+#define DB_MUTEX_ALLOCATED 0x01 /* Mutex currently allocated. */
+#define DB_MUTEX_LOCKED 0x02 /* Mutex currently locked. */
+#define DB_MUTEX_LOGICAL_LOCK 0x04 /* Mutex backs a database lock. */
+#define DB_MUTEX_PROCESS_ONLY 0x08 /* Mutex private to a process. */
+#define DB_MUTEX_SELF_BLOCK 0x10 /* Must be able to block self. */
+
+struct __db_mutex_stat {
+ /* The following fields are maintained in the region's copy. */
+ u_int32_t st_mutex_align; /* Mutex alignment */
+ u_int32_t st_mutex_tas_spins; /* Mutex test-and-set spins */
+ u_int32_t st_mutex_cnt; /* Mutex count */
+ u_int32_t st_mutex_free; /* Available mutexes */
+ u_int32_t st_mutex_inuse; /* Mutexes in use */
+ u_int32_t st_mutex_inuse_max; /* Maximum mutexes ever in use */
+
+ /* The following fields are filled-in from other places. */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted without wait. */
+ roff_t st_regsize; /* Region size. */
+};
+
+/* This is the length of the buffer passed to DB_ENV->thread_id_string() */
+#define DB_THREADID_STRLEN 128
/*******************************************************
* Locking.
@@ -383,10 +456,9 @@ struct __db_dbt {
#define DB_LOCK_ABORT 0x001 /* Internal: Lock during abort. */
#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_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.
@@ -404,7 +476,7 @@ typedef enum {
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_READ_UNCOMMITTED=7, /* Degree 1 isolation. */
DB_LOCK_WWRITE=8 /* Was Written. */
} db_lockmode_t;
@@ -433,12 +505,10 @@ typedef enum {
DB_LSTAT_EXPIRED=2, /* Lock has expired. */
DB_LSTAT_FREE=3, /* Lock is unallocated. */
DB_LSTAT_HELD=4, /* Lock is currently held. */
- DB_LSTAT_NOTEXIST=5, /* Object on which lock was waiting
- * was removed */
- DB_LSTAT_PENDING=6, /* Lock was waiting and has been
+ DB_LSTAT_PENDING=5, /* Lock was waiting and has been
* promoted; waiting for the owner
* to run and upgrade it to held. */
- DB_LSTAT_WAITING=7 /* Lock is on the wait queue. */
+ DB_LSTAT_WAITING=6 /* Lock is on the wait queue. */
}db_status_t;
/* Lock statistics structure. */
@@ -455,11 +525,12 @@ struct __db_lock_stat {
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_nupgrade; /* Number of lock upgrades. */
+ u_int32_t st_ndowngrade; /* Number of lock downgrades. */
+ u_int32_t st_lock_wait; /* Lock conflicts w/ subsequent wait */
+ u_int32_t st_lock_nowait; /* Lock conflicts w/o subsequent wait */
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. */
@@ -508,8 +579,8 @@ struct __db_lockreq {
/*******************************************************
* Logging.
*******************************************************/
-#define DB_LOGVERSION 10 /* Current log version. */
-#define DB_LOGOLDVER 10 /* Oldest log version supported. */
+#define DB_LOGVERSION 12 /* Current log version. */
+#define DB_LOGOLDVER 8 /* Oldest log version supported. */
#define DB_LOGMAGIC 0x040988
/* Flag values for DB_ENV->log_archive(). */
@@ -524,9 +595,7 @@ struct __db_lockreq {
#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_RESEND 0x040 /* Resent log record */
-#define DB_LOG_WRNOSYNC 0x080 /* Write, don't sync log_put */
+#define DB_LOG_WRNOSYNC 0x020 /* Write, don't sync log_put */
/*
* A DB_LSN has two parts, a fileid which identifies a specific file, and an
@@ -567,8 +636,9 @@ struct __db_log_cursor {
u_int32_t c_prev; /* Cursor: previous record's offset */
DBT c_dbt; /* Return DBT. */
+ DB_LSN p_lsn; /* Persist LSN. */
+ u_int32_t p_version; /* Persist version. */
-#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. */
@@ -576,9 +646,11 @@ struct __db_log_cursor {
u_int32_t bp_maxrec; /* Max record length in the log file. */
- /* Methods. */
+ /* DB_LOGC PUBLIC HANDLE LIST BEGIN */
int (*close) __P((DB_LOGC *, u_int32_t));
int (*get) __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
+ int (*version) __P((DB_LOGC *, u_int32_t *, u_int32_t));
+ /* DB_LOGC PUBLIC HANDLE LIST END */
#define DB_LOG_DISK 0x01 /* Log record came from disk. */
#define DB_LOG_LOCKED 0x02 /* Log region already locked */
@@ -590,15 +662,17 @@ struct __db_log_cursor {
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. */
+ int st_mode; /* Log file permissions mode. */
u_int32_t st_lg_bsize; /* Log buffer size. */
u_int32_t st_lg_size; /* Log file size. */
+ u_int32_t st_record; /* Records entered into the log. */
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; /* Total I/O writes to the log. */
u_int32_t st_wcount_fill; /* Overflow writes to the log. */
+ u_int32_t st_rcount; /* Total I/O reads from 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. */
@@ -612,26 +686,28 @@ struct __db_log_stat {
};
/*
- * We need to record the first log record of a transaction.
- * For user defined logging this macro returns the place to
- * put that information, if it is need in rlsnp, otherwise it
- * leaves it unchanged.
+ * We need to record the first log record of a transaction. For user
+ * defined logging this macro returns the place to put that information,
+ * if it is need in rlsnp, otherwise it leaves it unchanged. We also
+ * need to track the last record of the transaction, this returns the
+ * place to put that info.
*/
-#define DB_SET_BEGIN_LSNP(txn, rlsnp) ((txn)->set_begin_lsnp(txn, rlsnp))
+#define DB_SET_TXN_LSNP(txn, blsnp, llsnp) \
+ ((txn)->set_txn_lsnp(txn, blsnp, llsnp))
/*******************************************************
* 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. */
+#define DB_MPOOL_DIRTY 0x002 /* Get page for an update. */
+#define DB_MPOOL_EDIT 0x004 /* Modify without copying. */
+#define DB_MPOOL_FREE 0x008 /* Free page if present. */
+#define DB_MPOOL_LAST 0x010 /* Return the last page. */
+#define DB_MPOOL_NEW 0x020 /* Create a new page. */
/* 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. */
-#define DB_MPOOL_FREE 0x008 /* Free page if present. */
+#define DB_MPOOL_DISCARD 0x001 /* Don't cache the page. */
/* Flags values for DB_MPOOLFILE->set_flags. */
#define DB_MPOOL_NOFILE 0x001 /* Never open a backing file. */
@@ -688,17 +764,17 @@ struct __db_mpoolfile {
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;
+ int32_t priority; /* Cache priority. */
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. */
+ /* DB_MPOOLFILE PUBLIC HANDLE LIST BEGIN */
int (*close) __P((DB_MPOOLFILE *, u_int32_t));
- int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ int (*get)
+ __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, 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));
@@ -719,6 +795,7 @@ struct __db_mpoolfile {
int (*get_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
int (*sync) __P((DB_MPOOLFILE *));
+ /* DB_MPOOLFILE PUBLIC HANDLE LIST END */
/*
* MP_FILEID_SET, MP_OPEN_CALLED and MP_READONLY do not need to be
@@ -730,8 +807,9 @@ struct __db_mpoolfile {
*/
#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. */
+#define MP_MULTIVERSION 0x004 /* Opened for multiversion access. */
+#define MP_OPEN_CALLED 0x008 /* File opened. */
+#define MP_READONLY 0x010 /* File is readonly. */
u_int32_t flags;
};
@@ -763,14 +841,19 @@ struct __db_mpool_stat {
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_nowait; /* Max hash lock granted with nowait. */
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_mvcc_frozen; /* Buffers frozen. */
+ u_int32_t st_mvcc_thawed; /* Buffers thawed. */
+ u_int32_t st_mvcc_freed; /* Frozen buffers freed. */
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. */
+ u_int32_t st_io_wait; /* Thread waited on buffer I/O. */
};
/* Mpool file statistics structure. */
@@ -814,12 +897,14 @@ typedef enum {
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. */
+ char *name; /* Transaction name */
+
+ db_threadid_t tid; /* Thread id for use in MT XA. */
+ void *td; /* Detail structure within region. */
db_timeout_t lock_timeout; /* Timeout for locks for this txn. */
- db_timeout_t expire; /* Time this txn expires. */
+ db_timeout_t expire; /* Time transaction expires. */
void *txn_list; /* Undo information for parent. */
/*
@@ -840,6 +925,16 @@ struct __db_txn {
/*
* !!!
* 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;
+
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
* TAILQ_HEAD(__events, __txn_event) events;
*/
struct {
@@ -860,16 +955,6 @@ struct __db_txn {
/*
* !!!
* 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;
-
- /*
- * !!!
- * Explicit representations of structures from queue.h.
* TAILQ_ENTRY(__db_txn) klinks;
*/
struct {
@@ -882,32 +967,44 @@ struct __db_txn {
u_int32_t cursors; /* Number of cursors open for txn */
- /* Methods. */
+ /* DB_TXN PUBLIC HANDLE LIST BEGIN */
int (*abort) __P((DB_TXN *));
int (*commit) __P((DB_TXN *, u_int32_t));
int (*discard) __P((DB_TXN *, u_int32_t));
+ int (*get_name) __P((DB_TXN *, const char **));
u_int32_t (*id) __P((DB_TXN *));
int (*prepare) __P((DB_TXN *, u_int8_t *));
- void (*set_begin_lsnp) __P((DB_TXN *txn, DB_LSN **));
+ int (*set_name) __P((DB_TXN *, const char *));
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_DEADLOCK 0x004 /* Transaction has deadlocked. */
-#define TXN_DEGREE_2 0x008 /* Has degree 2 isolation. */
-#define TXN_DIRTY_READ 0x010 /* Transaction does dirty reads. */
-#define TXN_LOCKTIMEOUT 0x020 /* Transaction has a lock timeout. */
-#define TXN_MALLOC 0x040 /* Structure allocated by TXN system. */
-#define TXN_NOSYNC 0x080 /* Do not sync on prepare and commit. */
-#define TXN_NOWAIT 0x100 /* Do not wait on locks. */
-#define TXN_RESTORED 0x200 /* Transaction has been restored. */
-#define TXN_SYNC 0x400 /* Sync on prepare and commit. */
+ /* DB_TXN PUBLIC HANDLE LIST END */
+
+ /* DB_TXN PRIVATE HANDLE LIST BEGIN */
+ void (*set_txn_lsnp) __P((DB_TXN *txn, DB_LSN **, DB_LSN **));
+ /* DB_TXN PRIVATE HANDLE LIST END */
+
+#define TXN_CHILDCOMMIT 0x0001 /* Txn has committed. */
+#define TXN_CDSGROUP 0x0002 /* CDS group handle. */
+#define TXN_COMPENSATE 0x0004 /* Compensating transaction. */
+#define TXN_DEADLOCK 0x0008 /* Txn has deadlocked. */
+#define TXN_LOCKTIMEOUT 0x0010 /* Txn has a lock timeout. */
+#define TXN_MALLOC 0x0020 /* Structure allocated by TXN system. */
+#define TXN_NOSYNC 0x0040 /* Do not sync on prepare and commit. */
+#define TXN_NOWAIT 0x0080 /* Do not wait on locks. */
+#define TXN_PRIVATE 0x0100 /* Txn owned by cursor.. */
+#define TXN_READ_COMMITTED 0x0200 /* Txn has degree 2 isolation. */
+#define TXN_READ_UNCOMMITTED 0x0400 /* Txn has degree 1 isolation. */
+#define TXN_RESTORED 0x0800 /* Txn has been restored. */
+#define TXN_SNAPSHOT 0x1000 /* Snapshot Isolation. */
+#define TXN_SYNC 0x2000 /* Write and sync on prepare/commit. */
+#define TXN_WRITE_NOSYNC 0x4000 /* Write only on prepare/commit. */
u_int32_t flags;
};
+#define TXN_SYNC_FLAGS (TXN_SYNC | TXN_NOSYNC | TXN_WRITE_NOSYNC)
+
/*
* Structure used for two phase commit interface. Berkeley DB support for two
- * phase commit is compatible with the X/open XA interface.
+ * 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
@@ -923,9 +1020,30 @@ struct __db_preplist {
struct __db_txn_active {
u_int32_t txnid; /* Transaction ID */
u_int32_t parentid; /* Transaction ID of parent */
+ pid_t pid; /* Process owning txn ID */
+ db_threadid_t tid; /* Thread owning txn ID */
+
DB_LSN lsn; /* LSN when transaction began */
+
+ DB_LSN read_lsn; /* Read LSN for MVCC */
+ u_int32_t mvcc_ref; /* MVCC reference count */
+
+#define TXN_ABORTED 1
+#define TXN_COMMITTED 2
+#define TXN_PREPARED 3
+#define TXN_RUNNING 4
+ u_int32_t status; /* Status of the transaction */
+
+#define TXN_XA_ABORTED 1
+#define TXN_XA_DEADLOCKED 2
+#define TXN_XA_ENDED 3
+#define TXN_XA_PREPARED 4
+#define TXN_XA_STARTED 5
+#define TXN_XA_SUSPENDED 6
u_int32_t xa_status; /* XA status */
- u_int8_t xid[DB_XIDDATASIZE]; /* XA global transaction ID */
+
+ u_int8_t xid[DB_XIDDATASIZE]; /* Global transaction ID */
+ char name[51]; /* 50 bytes of name, nul termination */
};
struct __db_txn_stat {
@@ -937,9 +1055,11 @@ struct __db_txn_stat {
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_nsnapshot; /* number of snapshot transactions */
u_int32_t st_nrestores; /* number of restored transactions
after recovery. */
u_int32_t st_maxnactive; /* maximum active transactions */
+ u_int32_t st_maxnsnapshot; /* maximum snapshot 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. */
@@ -953,9 +1073,60 @@ struct __db_txn_stat {
#define DB_EID_BROADCAST -1
#define DB_EID_INVALID -2
-/* rep_start flags values */
-#define DB_REP_CLIENT 0x001
-#define DB_REP_MASTER 0x002
+/* rep_config flag values. */
+#define DB_REP_CONF_BULK 0x0001 /* Bulk transfer. */
+#define DB_REP_CONF_DELAYCLIENT 0x0002 /* Delay client synchronization. */
+#define DB_REP_CONF_NOAUTOINIT 0x0004 /* No automatic client init. */
+#define DB_REP_CONF_NOWAIT 0x0008 /* Don't wait, return error. */
+
+/*
+ * Operation code values for rep_start and/or repmgr_start. Just one of the
+ * following values should be passed in the flags parameter. (If we ever need
+ * additional, independent bit flags for these methods, we can start allocating
+ * them from the high-order byte of the flags word, as we currently do elsewhere
+ * for DB_AFTER through DB_WRITELOCK and DB_AUTO_COMMIT, etc.)
+ */
+#define DB_REP_CLIENT 1
+#define DB_REP_ELECTION 2
+#define DB_REP_FULL_ELECTION 3
+#define DB_REP_MASTER 4
+
+/* Acknowledgement policies. */
+#define DB_REPMGR_ACKS_ALL 1
+#define DB_REPMGR_ACKS_ALL_PEERS 2
+#define DB_REPMGR_ACKS_NONE 3
+#define DB_REPMGR_ACKS_ONE 4
+#define DB_REPMGR_ACKS_ONE_PEER 5
+#define DB_REPMGR_ACKS_QUORUM 6
+
+/* Replication Framework timeout configuration values. */
+#define DB_REP_ACK_TIMEOUT 1
+#define DB_REP_ELECTION_TIMEOUT 2
+#define DB_REP_ELECTION_RETRY 3
+#define DB_REP_CONNECTION_RETRY 4
+
+/* Event notification types. */
+#define DB_EVENT_NO_SUCH_EVENT 0 /* out-of-band sentinel value */
+#define DB_EVENT_PANIC 1
+#define DB_EVENT_REP_CLIENT 2
+#define DB_EVENT_REP_MASTER 3
+#define DB_EVENT_REP_NEWMASTER 4
+#define DB_EVENT_REP_STARTUPDONE 5
+#define DB_EVENT_WRITE_FAILED 6
+
+/* Flag value for repmgr_add_remote_site. */
+#define DB_REPMGR_PEER 0x01
+
+/* Replication Manager site status. */
+struct __db_repmgr_site {
+ int eid;
+ char *host;
+ u_int port;
+
+#define DB_REPMGR_CONNECTED 0x01
+#define DB_REPMGR_DISCONNECTED 0x02
+ u_int32_t status;
+};
/* Replication statistics. */
struct __db_rep_stat {
@@ -978,6 +1149,15 @@ struct __db_rep_stat {
condition was detected.+ */
int st_env_id; /* Current environment ID. */
int st_env_priority; /* Current environment priority. */
+ u_int32_t st_bulk_fills; /* Bulk buffer fills. */
+ u_int32_t st_bulk_overflows; /* Bulk buffer overflows. */
+ u_int32_t st_bulk_records; /* Bulk records stored. */
+ u_int32_t st_bulk_transfers; /* Transfers of bulk buffers. */
+ u_int32_t st_client_rerequests; /* Number of forced rerequests. */
+ u_int32_t st_client_svc_req; /* Number of client service requests
+ received by this client. */
+ u_int32_t st_client_svc_miss; /* Number of client service requests
+ missing on this client. */
u_int32_t st_gen; /* Current generation number. */
u_int32_t st_egen; /* Current election gen number. */
u_int32_t st_log_duplicated; /* Log records received multiply.+ */
@@ -1020,7 +1200,13 @@ struct __db_rep_stat {
int st_election_status; /* Current election status. */
u_int32_t st_election_tiebreaker;/* Election tiebreaker value. */
int st_election_votes; /* Votes received in this round. */
+ u_int32_t st_election_sec; /* Last election time seconds. */
+ u_int32_t st_election_usec; /* Last election time useconds. */
};
+
+/*******************************************************
+ * Sequences.
+ *******************************************************/
/*
* The storage record for a sequence.
*/
@@ -1030,6 +1216,7 @@ struct __db_seq_record {
#define DB_SEQ_INC 0x00000002 /* Increment sequence. */
#define DB_SEQ_RANGE_SET 0x00000004 /* Range set (internal). */
#define DB_SEQ_WRAP 0x00000008 /* Wrap sequence at min/max. */
+#define DB_SEQ_WRAPPED 0x00000010 /* Just wrapped (internal). */
u_int32_t flags; /* Flags. */
db_seq_t seq_value; /* Current value. */
db_seq_t seq_max; /* Max permitted. */
@@ -1041,7 +1228,7 @@ struct __db_seq_record {
*/
struct __db_sequence {
DB *seq_dbp; /* DB handle for this sequence. */
- DB_MUTEX *seq_mutexp; /* Mutex if sequence is threaded. */
+ db_mutex_t mtx_seq; /* Mutex if sequence is threaded. */
DB_SEQ_RECORD *seq_rp; /* Pointer to current data. */
DB_SEQ_RECORD seq_record; /* Data from DB_SEQUENCE. */
int32_t seq_cache_size; /* Number of values cached. */
@@ -1052,6 +1239,7 @@ struct __db_sequence {
/* API-private structure: used by C++ and Java. */
void *api_internal;
+ /* DB_SEQUENCE PUBLIC HANDLE LIST BEGIN */
int (*close) __P((DB_SEQUENCE *, u_int32_t));
int (*get) __P((DB_SEQUENCE *,
DB_TXN *, int32_t, db_seq_t *, u_int32_t));
@@ -1071,18 +1259,19 @@ struct __db_sequence {
int (*stat) __P((DB_SEQUENCE *,
DB_SEQUENCE_STAT **, u_int32_t));
int (*stat_print) __P((DB_SEQUENCE *, u_int32_t));
+ /* DB_SEQUENCE PUBLIC HANDLE LIST END */
};
struct __db_seq_stat {
- u_int32_t st_wait; /* Sequence lock granted without wait. */
- u_int32_t st_nowait; /* Sequence lock granted after wait. */
- db_seq_t st_current; /* Current value in db. */
- db_seq_t st_value; /* Current cached value. */
- db_seq_t st_last_value; /* Last cached value. */
- db_seq_t st_min; /* Minimum value. */
- db_seq_t st_max; /* Maximum value. */
- int32_t st_cache_size; /* Cache size. */
- u_int32_t st_flags; /* Flag value. */
+ u_int32_t st_wait; /* Sequence lock granted w/o wait. */
+ u_int32_t st_nowait; /* Sequence lock granted after wait. */
+ db_seq_t st_current; /* Current value in db. */
+ db_seq_t st_value; /* Current cached value. */
+ db_seq_t st_last_value; /* Last cached value. */
+ db_seq_t st_min; /* Minimum value. */
+ db_seq_t st_max; /* Maximum value. */
+ int32_t st_cache_size; /* Cache size. */
+ u_int32_t st_flags; /* Flag value. */
};
/*******************************************************
@@ -1110,7 +1299,8 @@ typedef enum {
#define DB_QAMOLDVER 3 /* Oldest queue version supported. */
#define DB_QAMMAGIC 0x042253
-#define DB_SEQUENCE_VERSION 1 /* Current sequence version. */
+#define DB_SEQUENCE_VERSION 2 /* Current sequence version. */
+#define DB_SEQUENCE_OLDVER 1 /* Oldest sequence version supported. */
/*
* DB access method and cursor operation values. Each value is an operation
@@ -1119,62 +1309,56 @@ typedef enum {
#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) */
+#define DB_CONSUME 4 /* get() */
+#define DB_CONSUME_WAIT 5 /* get() */
+#define DB_CURRENT 6 /* c_get(), c_put(), DB_LOGC->get() */
+#define DB_FIRST 7 /* c_get(), DB_LOGC->get() */
+#define DB_GET_BOTH 8 /* get(), c_get() */
+#define DB_GET_BOTHC 9 /* c_get() (internal) */
+#define DB_GET_BOTH_RANGE 10 /* get(), c_get() */
+#define DB_GET_RECNO 11 /* c_get() */
+#define DB_JOIN_ITEM 12 /* c_get(); do not do primary lookup */
+#define DB_KEYFIRST 13 /* c_put() */
+#define DB_KEYLAST 14 /* c_put() */
+#define DB_LAST 15 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT 16 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT_DUP 17 /* c_get() */
+#define DB_NEXT_NODUP 18 /* c_get() */
+#define DB_NODUPDATA 19 /* put(), c_put() */
+#define DB_NOOVERWRITE 20 /* put() */
+#define DB_NOSYNC 21 /* close() */
+#define DB_POSITION 22 /* c_dup() */
+#define DB_PREV 23 /* c_get(), DB_LOGC->get() */
+#define DB_PREV_NODUP 24 /* c_get(), DB_LOGC->get() */
+#define DB_SET 25 /* c_get(), DB_LOGC->get() */
+#define DB_SET_LOCK_TIMEOUT 26 /* set_timout() */
+#define DB_SET_RANGE 27 /* c_get() */
+#define DB_SET_RECNO 28 /* get(), c_get() */
+#define DB_SET_TXN_NOW 29 /* set_timout() (internal) */
+#define DB_SET_TXN_TIMEOUT 30 /* set_timout() */
+#define DB_UPDATE_SECONDARY 31 /* c_get(), c_del() (internal) */
+#define DB_WRITECURSOR 32 /* cursor() */
+#define DB_WRITELOCK 33 /* cursor() (internal) */
/* This has to change when the max opcode hits 255. */
#define DB_OPFLAGS_MASK 0x000000ff /* Mask for operations flags. */
/*
* Masks for flags that can be OR'd into DB access method and cursor
- * operation values.
+ * operation values. Three top bits have already been taken:
*
- * DB_DIRTY_READ 0x04000000 Dirty Read. */
-#define DB_MULTIPLE 0x08000000 /* Return multiple data values. */
-#define DB_MULTIPLE_KEY 0x10000000 /* Return multiple data/key pairs. */
-#define DB_RMW 0x20000000 /* Acquire write flag immediately. */
+ * DB_AUTO_COMMIT 0x02000000
+ * DB_READ_COMMITTED 0x04000000
+ * DB_READ_UNCOMMITTED 0x08000000
+ */
+#define DB_MULTIPLE 0x10000000 /* Return multiple data values. */
+#define DB_MULTIPLE_KEY 0x20000000 /* Return multiple data/key pairs. */
+#define DB_RMW 0x40000000 /* Acquire write lock immediately. */
/*
* DB (user visible) error return codes.
*
* !!!
- * For source compatibility with DB 2.X deadlock return (EAGAIN), use the
- * following:
- * #include <errno.h>
- * #define DB_LOCK_DEADLOCK EAGAIN
- *
- * !!!
* We don't want our error returns to conflict with other packages where
* 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.
@@ -1196,22 +1380,24 @@ typedef enum {
#define DB_REP_DUPMASTER (-30986)/* There are two masters. */
#define DB_REP_HANDLE_DEAD (-30985)/* Rolled back a commit. */
#define DB_REP_HOLDELECTION (-30984)/* Time to hold an election. */
-#define DB_REP_ISPERM (-30983)/* Cached not written perm written.*/
-#define DB_REP_NEWMASTER (-30982)/* We have learned of a new master. */
-#define DB_REP_NEWSITE (-30981)/* New site entered system. */
-#define DB_REP_NOTPERM (-30980)/* Permanent log record not written. */
-#define DB_REP_STARTUPDONE (-30979)/* Client startup complete. */
-#define DB_REP_UNAVAIL (-30978)/* Site cannot currently be reached. */
-#define DB_RUNRECOVERY (-30977)/* Panic return. */
-#define DB_SECONDARY_BAD (-30976)/* Secondary index corrupt. */
-#define DB_VERIFY_BAD (-30975)/* Verify failed; bad format. */
-#define DB_VERSION_MISMATCH (-30974)/* Environment version mismatch. */
+#define DB_REP_IGNORE (-30983)/* This msg should be ignored.*/
+#define DB_REP_ISPERM (-30982)/* Cached not written perm written.*/
+#define DB_REP_JOIN_FAILURE (-30981)/* Unable to join replication group. */
+#define DB_REP_LOCKOUT (-30980)/* API/Replication lockout now. */
+#define DB_REP_NEWMASTER (-30979)/* We have learned of a new master. */
+#define DB_REP_NEWSITE (-30978)/* New site entered system. */
+#define DB_REP_NOTPERM (-30977)/* Permanent log record not written. */
+#define DB_REP_UNAVAIL (-30976)/* Site cannot currently be reached. */
+#define DB_RUNRECOVERY (-30975)/* Panic return. */
+#define DB_SECONDARY_BAD (-30974)/* Secondary index corrupt. */
+#define DB_VERIFY_BAD (-30973)/* Verify failed; bad format. */
+#define DB_VERSION_MISMATCH (-30972)/* Environment version mismatch. */
/* DB (private) error return codes. */
#define DB_ALREADY_ABORTED (-30899)
#define DB_DELETED (-30898)/* Recovery file marked deleted. */
-#define DB_LOCK_NOTEXIST (-30897)/* Object to lock is gone. */
-#define DB_NEEDSPLIT (-30896)/* Page needs to be split. */
+#define DB_NEEDSPLIT (-30897)/* Page needs to be split. */
+#define DB_REP_BULKOVF (-30896)/* Rep bulk buffer overflow. */
#define DB_REP_EGENCHG (-30895)/* Egen changed while in election. */
#define DB_REP_LOGREADY (-30894)/* Rep log ready for recovery. */
#define DB_REP_PAGEDONE (-30893)/* This page was already done. */
@@ -1245,7 +1431,7 @@ struct __db {
DB_MPOOLFILE *mpf; /* Backing buffer pool. */
- DB_MUTEX *mutexp; /* Synchronization for free threading */
+ db_mutex_t mutex; /* Synchronization for free threading */
char *fname, *dname; /* File/database passed to DB->open. */
u_int32_t open_flags; /* Flags passed to DB->open. */
@@ -1261,11 +1447,12 @@ struct __db {
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. */
+ DB_LOCK handle_lock; /* Lock held on this handle. */
u_int cl_id; /* RPC: remote client id. */
time_t timestamp; /* Handle timestamp for replication. */
+ u_int32_t fid_gen; /* Rep generation number for fids. */
/*
* Returned data memory for DB->get() and friends.
@@ -1295,11 +1482,11 @@ struct __db {
*
* !!!
* Explicit representations of structures from queue.h.
- * LIST_ENTRY(__db) dblistlinks;
+ * TAILQ_ENTRY(__db) dblistlinks;
*/
struct {
- struct __db *le_next;
- struct __db **le_prev;
+ struct __db *tqe_next;
+ struct __db **tqe_prev;
} dblistlinks;
/*
@@ -1361,6 +1548,11 @@ struct __db {
/* Reference to primary -- set in the secondary. */
DB *s_primary;
+#define DB_ASSOC_IMMUTABLE_KEY 0x00000001 /* Secondary key is immutable. */
+
+ /* Flags passed to associate -- set in the secondary. */
+ u_int32_t s_assoc_flags;
+
/* API-private structure: used by DB 1.85, C++, Java, Perl and Tcl */
void *api_internal;
@@ -1370,19 +1562,19 @@ struct __db {
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));
+ /* DB PUBLIC HANDLE LIST BEGIN */
+ 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 (*compact) __P((DB *,
+ DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
int (*cursor) __P((DB *, DB_TXN *, DBC **, u_int32_t));
int (*del) __P((DB *, DB_TXN *, DBT *, u_int32_t));
- int (*dump) __P((DB *,
- const char *, int (*)(void *, const void *), void *, int, int));
void (*err) __P((DB *, int, const char *, ...));
void (*errx) __P((DB *, const char *, ...));
int (*fd) __P((DB *, int *));
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_bt_minkey) __P((DB *, 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 **));
@@ -1391,77 +1583,78 @@ struct __db {
void (*get_errfile) __P((DB *, FILE **));
void (*get_errpfx) __P((DB *, const char **));
int (*get_flags) __P((DB *, u_int32_t *));
+ int (*get_h_ffactor) __P((DB *, u_int32_t *));
+ int (*get_h_nelem) __P((DB *, u_int32_t *));
int (*get_lorder) __P((DB *, int *));
+ DB_MPOOLFILE *(*get_mpf) __P((DB *));
+ void (*get_msgfile) __P((DB *, FILE **));
int (*get_open_flags) __P((DB *, u_int32_t *));
int (*get_pagesize) __P((DB *, u_int32_t *));
+ int (*get_q_extentsize) __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 (*get_transactional) __P((DB *));
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 *, DB_TXN *,
- const char *, const char *, DBTYPE, u_int32_t, int));
+ int (*key_range)
+ __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+ int (*open) __P((DB *,
+ DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
+ int (*pget) __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
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)));
+ const char *, const char *, const char *, u_int32_t));
int (*set_alloc) __P((DB *, void *(*)(size_t),
void *(*)(void *, size_t), void (*)(void *)));
+ int (*set_append_recno) __P((DB *, int (*)(DB *, DBT *, db_recno_t)));
+ int (*set_bt_compare)
+ __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
+ int (*set_bt_minkey) __P((DB *, u_int32_t));
+ int (*set_bt_prefix)
+ __P((DB *, size_t (*)(DB *, const DBT *, const DBT *)));
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_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 DB_ENV *, const char *, const char *)));
+ void (*)(const DB_ENV *, const char *, const 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_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 (*set_lorder) __P((DB *, int));
void (*set_msgcall) __P((DB *, void (*)(const DB_ENV *, const char *)));
- void (*get_msgfile) __P((DB *, FILE **));
void (*set_msgfile) __P((DB *, FILE *));
int (*set_pagesize) __P((DB *, u_int32_t));
int (*set_paniccall) __P((DB *, void (*)(DB_ENV *, int)));
- int (*stat) __P((DB *, DB_TXN *, void *, u_int32_t));
- int (*stat_print) __P((DB *, 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));
- int (*set_bt_minkey) __P((DB *, u_int32_t));
- 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_q_extentsize) __P((DB *, u_int32_t));
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 (*stat) __P((DB *, DB_TXN *, void *, u_int32_t));
+ int (*stat_print) __P((DB *, u_int32_t));
+ int (*sync) __P((DB *, u_int32_t));
+ int (*truncate) __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
+ int (*upgrade) __P((DB *, const char *, u_int32_t));
+ int (*verify)
+ __P((DB *, const char *, const char *, FILE *, u_int32_t));
+ /* DB PUBLIC HANDLE LIST END */
- int (*get_q_extentsize) __P((DB *, u_int32_t *));
- int (*set_q_extentsize) __P((DB *, u_int32_t));
-
+ /* DB PRIVATE HANDLE LIST BEGIN */
+ int (*dump) __P((DB *, const char *,
+ int (*)(void *, const void *), void *, int, int));
int (*db_am_remove) __P((DB *, DB_TXN *, const char *, const char *));
int (*db_am_rename) __P((DB *, DB_TXN *,
const char *, const char *, const char *));
+ /* DB PRIVATE HANDLE LIST END */
/*
* Never called; these are a place to save function pointers
@@ -1476,39 +1669,45 @@ struct __db {
#define DB_OK_RECNO 0x08
u_int32_t am_ok; /* Legal AM choices. */
-#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_INORDER 0x00004000 /* DB_INORDER. */
-#define DB_AM_IN_RENAME 0x00008000 /* File is being renamed. */
-#define DB_AM_NOT_DURABLE 0x00010000 /* Do not log changes. */
-#define DB_AM_OPEN_CALLED 0x00020000 /* DB->open called. */
-#define DB_AM_PAD 0x00040000 /* Fixed-length record pad. */
-#define DB_AM_PGDEF 0x00080000 /* Page size was defaulted. */
-#define DB_AM_RDONLY 0x00100000 /* Database is readonly. */
-#define DB_AM_RECNUM 0x00200000 /* DB_RECNUM. */
-#define DB_AM_RECOVER 0x00400000 /* DB opened by recovery routine. */
-#define DB_AM_RENUMBER 0x00800000 /* DB_RENUMBER. */
-#define DB_AM_REPLICATION 0x01000000 /* An internal replication file. */
-#define DB_AM_REVSPLITOFF 0x02000000 /* DB_REVSPLITOFF. */
-#define DB_AM_SECONDARY 0x04000000 /* Database is a secondary index. */
-#define DB_AM_SNAPSHOT 0x08000000 /* DB_SNAPSHOT. */
-#define DB_AM_SUBDB 0x10000000 /* Subdatabases supported. */
-#define DB_AM_SWAP 0x20000000 /* Pages need to be byte-swapped. */
-#define DB_AM_TXN 0x40000000 /* Opened in a transaction. */
-#define DB_AM_VERIFYING 0x80000000 /* DB handle is in the verifier. */
- u_int32_t orig_flags; /* Flags at open, for refresh. */
+ /*
+ * This field really ought to be an AM_FLAG, but we have
+ * have run out of bits. If/when we decide to split up
+ * the flags, we can incorporate it.
+ */
+ int preserve_fid; /* Do not free fileid on close. */
+
+#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_DISCARD 0x00000080 /* Discard any cached pages */
+#define DB_AM_DUP 0x00000100 /* DB_DUP */
+#define DB_AM_DUPSORT 0x00000200 /* DB_DUPSORT */
+#define DB_AM_ENCRYPT 0x00000400 /* Encryption */
+#define DB_AM_FIXEDLEN 0x00000800 /* Fixed-length records */
+#define DB_AM_INMEM 0x00001000 /* In-memory; no sync on close */
+#define DB_AM_INORDER 0x00002000 /* DB_INORDER */
+#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_READ_UNCOMMITTED 0x00100000 /* Support degree 1 isolation */
+#define DB_AM_RECNUM 0x00200000 /* DB_RECNUM */
+#define DB_AM_RECOVER 0x00400000 /* DB opened by recovery routine */
+#define DB_AM_RENUMBER 0x00800000 /* DB_RENUMBER */
+#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;
};
@@ -1610,7 +1809,7 @@ struct __dbc {
DBT my_rkey; /* Space for returned [primary] key. */
DBT my_rdata; /* Space for returned data. */
- u_int32_t lid; /* Default process' locker id. */
+ void *lref; /* Reference to default locker. */
u_int32_t locker; /* Locker for this operation. */
DBT lock_dbt; /* DBT referencing lock. */
DB_LOCK_ILOCK lock; /* Object to be locked. */
@@ -1622,15 +1821,17 @@ struct __dbc {
DBC_INTERNAL *internal; /* Access method private. */
- int (*c_close) __P((DBC *)); /* Methods: public. */
+ /* DBC PUBLIC HANDLE LIST BEGIN */
+ int (*c_close) __P((DBC *));
int (*c_count) __P((DBC *, db_recno_t *, u_int32_t));
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));
+ /* DBC PUBLIC HANDLE LIST END */
- /* Methods: private. */
+ /* DBC PRIVATE HANDLE LIST BEGIN */
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 *));
@@ -1638,20 +1839,29 @@ struct __dbc {
int (*c_am_get) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_put) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_writelock) __P((DBC *));
+ /* DBC PRIVATE HANDLE LIST END */
-#define DBC_ACTIVE 0x0001 /* Cursor in use. */
-#define DBC_COMPENSATE 0x0002 /* Cursor compensating, don't lock. */
-#define DBC_DEGREE_2 0x0004 /* Cursor has degree 2 isolation. */
-#define DBC_DIRTY_READ 0x0008 /* Cursor supports dirty reads. */
-#define DBC_OPD 0x0010 /* Cursor references off-page dups. */
-#define DBC_RECOVER 0x0020 /* Recovery cursor; don't log/lock. */
-#define DBC_RMW 0x0040 /* Acquire write flag in read op. */
-#define DBC_TRANSIENT 0x0080 /* Cursor is transient. */
-#define DBC_WRITECURSOR 0x0100 /* Cursor may be used to write (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. */
+/*
+ * DBC_DONTLOCK and DBC_RECOVER are used during recovery and transaction
+ * abort. If a transaction is being aborted or recovered then DBC_RECOVER
+ * will be set and locking and logging will be disabled on this cursor. If
+ * we are performing a compensating transaction (e.g. free page processing)
+ * then DB_DONTLOCK will be set to inhibit locking, but logging will still
+ * be required. DB_DONTLOCK is also used if the whole database is locked.
+ */
+#define DBC_ACTIVE 0x0001 /* Cursor in use. */
+#define DBC_DONTLOCK 0x0002 /* Don't lock on this cursor. */
+#define DBC_MULTIPLE 0x0004 /* Return Multiple data. */
+#define DBC_MULTIPLE_KEY 0x0008 /* Return Multiple keys and data. */
+#define DBC_OPD 0x0010 /* Cursor references off-page dups. */
+#define DBC_OWN_LID 0x0020 /* Free lock id on destroy. */
+#define DBC_READ_COMMITTED 0x0040 /* Cursor has degree 2 isolation. */
+#define DBC_READ_UNCOMMITTED 0x0080 /* Cursor has degree 1 isolation. */
+#define DBC_RECOVER 0x0100 /* Recovery cursor; don't log/lock. */
+#define DBC_RMW 0x0200 /* Acquire write flag in read op. */
+#define DBC_TRANSIENT 0x0400 /* Cursor is transient. */
+#define DBC_WRITECURSOR 0x0800 /* Cursor may be used to write (CDB). */
+#define DBC_WRITER 0x1000 /* Cursor immediately writing (CDB). */
u_int32_t flags;
};
@@ -1670,7 +1880,6 @@ struct __db_bt_stat {
u_int32_t bt_nkeys; /* Number of unique keys. */
u_int32_t bt_ndata; /* Number of data items. */
u_int32_t bt_pagesize; /* Page size. */
- u_int32_t bt_maxkey; /* Maxkey value. */
u_int32_t bt_minkey; /* Minkey value. */
u_int32_t bt_re_len; /* Fixed-length record length. */
u_int32_t bt_re_pad; /* Fixed-length record pad. */
@@ -1687,6 +1896,21 @@ struct __db_bt_stat {
u_int32_t bt_over_pgfree; /* Bytes free in overflow pages. */
};
+struct __db_compact {
+ /* Input Parameters. */
+ u_int32_t compact_fillpercent; /* Desired fillfactor: 1-100 */
+ db_timeout_t compact_timeout; /* Lock timeout. */
+ u_int32_t compact_pages; /* Max pages to process. */
+ /* Output Stats. */
+ u_int32_t compact_pages_free; /* Number of pages freed. */
+ u_int32_t compact_pages_examine; /* Number of pages examine. */
+ u_int32_t compact_levels; /* Number of levels removed. */
+ u_int32_t compact_deadlock; /* Number of deadlocks. */
+ db_pgno_t compact_pages_truncated; /* Pages truncated to OS. */
+ /* Internal. */
+ db_pgno_t compact_truncate; /* Page number for truncation */
+};
+
/* Hash statistics structure. */
struct __db_h_stat {
u_int32_t hash_magic; /* Magic number. */
@@ -1746,12 +1970,19 @@ struct __db_env {
/* Other Callbacks. */
void (*db_feedback) __P((DB_ENV *, int, int));
void (*db_paniccall) __P((DB_ENV *, int));
+ void (*db_event_func) __P((DB_ENV *, u_int32_t, void *));
/* App-specified alloc functions. */
void *(*db_malloc) __P((size_t));
void *(*db_realloc) __P((void *, size_t));
void (*db_free) __P((void *));
+ /* Application callback to copy data to/from a custom data source. */
+#define DB_USERCOPY_GETDATA 0x0001
+#define DB_USERCOPY_SETDATA 0x0002
+ int (*dbt_usercopy)
+ __P((DBT *, u_int32_t, void *, u_int32_t, u_int32_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
@@ -1759,8 +1990,9 @@ struct __db_env {
*/
#define DB_VERB_DEADLOCK 0x0001 /* Deadlock detection information. */
#define DB_VERB_RECOVERY 0x0002 /* Recovery information. */
-#define DB_VERB_REPLICATION 0x0004 /* Replication information. */
-#define DB_VERB_WAITSFOR 0x0008 /* Dump waits-for table. */
+#define DB_VERB_REGISTER 0x0004 /* Dump waits-for table. */
+#define DB_VERB_REPLICATION 0x0008 /* Replication information. */
+#define DB_VERB_WAITSFOR 0x0010 /* Dump waits-for table. */
u_int32_t verbose; /* Verbose output. */
void *app_private; /* Application-private handle. */
@@ -1768,6 +2000,19 @@ struct __db_env {
int (*app_dispatch) /* User-specified recovery dispatch. */
__P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+ /* Mutexes. */
+ u_int32_t mutex_align; /* Mutex alignment */
+ u_int32_t mutex_cnt; /* Number of mutexes to configure */
+ u_int32_t mutex_inc; /* Number of mutexes to add */
+ u_int32_t mutex_tas_spins;/* Test-and-set spin count */
+
+ struct {
+ int alloc_id; /* Allocation ID argument */
+ u_int32_t flags; /* Flags argument */
+ } *mutex_iq; /* Initial mutexes queue */
+ u_int mutex_iq_next; /* Count of initial mutexes */
+ u_int mutex_iq_max; /* Maximum initial mutexes */
+
/* Locking. */
u_int8_t *lk_conflicts; /* Two dimensional conflict matrix. */
int lk_modes; /* Number of lock modes in table. */
@@ -1781,6 +2026,7 @@ struct __db_env {
u_int32_t lg_bsize; /* Buffer size. */
u_int32_t lg_size; /* Log file size. */
u_int32_t lg_regionmax; /* Region size. */
+ int lg_filemode; /* Log file permission mode. */
/* Memory pool. */
u_int32_t mp_gbytes; /* Cachesize: GB. */
@@ -1792,20 +2038,21 @@ struct __db_env {
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. */
time_t tx_timestamp; /* Recover to specific timestamp. */
db_timeout_t tx_timeout; /* Timeout for transactions. */
+ /* Thread tracking. */
+ u_int32_t thr_nbucket; /* Number of hash buckets. */
+ u_int32_t thr_max; /* Max before garbage collection. */
+ void *thr_hashtab; /* Hash table of DB_THREAD_INFO. */
+
/*******************************************************
* Private: owned by DB.
*******************************************************/
+ pid_t pid_cache; /* Cached process ID. */
+
/* User files, paths. */
char *db_home; /* Database home. */
char *db_log_dir; /* Database log file directory. */
@@ -1817,12 +2064,28 @@ struct __db_env {
int db_mode; /* Default open permissions. */
int dir_mode; /* Intermediate directory perms. */
- u_int32_t env_lid; /* Locker ID in non-threaded handles. */
+ void *env_lref; /* Locker in non-threaded handles. */
u_int32_t open_flags; /* Flags passed to DB_ENV->open. */
void *reginfo; /* REGINFO structure reference. */
DB_FH *lockfhp; /* fcntl(2) locking file handle. */
+ DB_FH *registry; /* DB_REGISTER file handle. */
+ u_int32_t registry_off; /*
+ * Offset of our slot. We can't use
+ * off_t because its size depends on
+ * build settings.
+ */
+
+ /* Return IDs. */
+ void (*thread_id) __P((DB_ENV *, pid_t *, db_threadid_t *));
+ /* Return if IDs alive. */
+ int (*is_alive)
+ __P((DB_ENV *, pid_t, db_threadid_t, u_int32_t));
+ /* Format IDs into a string. */
+ char *(*thread_id_string)
+ __P((DB_ENV *, pid_t, db_threadid_t, char *));
+
int (**recover_dtab) /* Dispatch table for recover funcs. */
__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
size_t recover_dtab_size;
@@ -1834,7 +2097,6 @@ struct __db_env {
int db_ref; /* DB reference count. */
long shm_key; /* shmget(2) key. */
- u_int32_t tas_spins; /* test-and-set spins. */
/*
* List of open DB handles for this DB_ENV, used for cursor
@@ -1847,11 +2109,12 @@ struct __db_env {
*
* !!!
* Explicit representation of structure in queue.h.
- * LIST_HEAD(dblist, __db);
+ * TAILQ_HEAD(__dblist, __db);
*/
- DB_MUTEX *dblist_mutexp; /* Mutex. */
- struct {
- struct __db *lh_first;
+ db_mutex_t mtx_dblist; /* Mutex. */
+ struct __dblist {
+ struct __db *tqh_first;
+ struct __db **tqh_last;
} dblist;
/*
@@ -1872,161 +2135,200 @@ struct __db_env {
} xa_txn;
int xa_rmid; /* XA Resource Manager ID. */
- /* API-private structure. */
- void *api1_internal; /* C++, Perl API private */
- void *api2_internal; /* Java API private */
-
char *passwd; /* Cryptography support. */
size_t passwd_len;
void *crypto_handle; /* Primary handle. */
- DB_MUTEX *mt_mutexp; /* Mersenne Twister mutex. */
+ db_mutex_t mtx_mt; /* Mersenne Twister mutex. */
int mti; /* Mersenne Twister index. */
u_long *mt; /* Mersenne Twister state vector. */
- /* DB_ENV Methods. */
+ /* API-private structure. */
+ void *api1_internal; /* C++, Perl API private */
+ void *api2_internal; /* Java API private */
+
+ DB_LOCKTAB *lk_handle; /* Lock handle. */
+ DB_LOG *lg_handle; /* Log handle. */
+ DB_MPOOL *mp_handle; /* Mpool handle. */
+ DB_MUTEXMGR *mutex_handle; /* Mutex handle. */
+ DB_REP *rep_handle; /* Replication handle. */
+ DB_TXNMGR *tx_handle; /* Txn handle. */
+
+ /* DB_ENV PUBLIC HANDLE LIST BEGIN */
+ int (*cdsgroup_begin) __P((DB_ENV *, DB_TXN **));
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));
+ 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 (*open) __P((DB_ENV *, const char *, u_int32_t, int));
- int (*remove) __P((DB_ENV *, const char *, u_int32_t));
- int (*stat_print) __P((DB_ENV *, u_int32_t));
-
- /* House-keeping. */
- int (*fileid_reset) __P((DB_ENV *, char *, int));
- int (*is_bigendian) __P((void));
- int (*lsn_reset) __P((DB_ENV *, char *, int));
- int (*prdbt) __P((DBT *,
- int, const char *, void *, int (*)(void *, const void *), int));
-
- /* Setters/getters. */
- 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 (*failchk) __P((DB_ENV *, u_int32_t));
+ int (*fileid_reset) __P((DB_ENV *, const char *, u_int32_t));
+ int (*get_cachesize) __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
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 DB_ENV *, const char *, const 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 (*get_home) __P((DB_ENV *, const char **));
- int (*set_intermediate_dir) __P((DB_ENV *, int, u_int32_t));
- int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
- 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));
- void (*set_msgcall) __P((DB_ENV *,
- void (*)(const DB_ENV *, const char *)));
- void (*get_msgfile) __P((DB_ENV *, FILE **));
- void (*set_msgfile) __P((DB_ENV *, FILE *));
- 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_filemode) __P((DB_ENV *, int *));
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));
- int (*log_stat_print) __P((DB_ENV *, 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_locks) __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 (*get_mp_max_openfd) __P((DB_ENV *, int *));
+ int (*get_mp_max_write) __P((DB_ENV *, int *, int *));
+ int (*get_mp_mmapsize) __P((DB_ENV *, size_t *));
+ void (*get_msgfile) __P((DB_ENV *, FILE **));
+ int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
+ int (*get_shm_key) __P((DB_ENV *, long *));
+ int (*get_timeout) __P((DB_ENV *, db_timeout_t *, u_int32_t));
+ int (*get_tmp_dir) __P((DB_ENV *, const char **));
+ int (*get_tx_max) __P((DB_ENV *, u_int32_t *));
+ int (*get_tx_timestamp) __P((DB_ENV *, time_t *));
+ int (*get_verbose) __P((DB_ENV *, u_int32_t, int *));
+ int (*is_bigendian) __P((void));
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_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_put) __P((DB_ENV *, DB_LOCK *));
int (*lock_stat) __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
int (*lock_stat_print) __P((DB_ENV *, 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_max_openfd) __P((DB_ENV *, int *));
- int (*set_mp_max_openfd) __P((DB_ENV *, int));
- int (*get_mp_max_write) __P((DB_ENV *, int *, int *));
- int (*set_mp_max_write) __P((DB_ENV *, int, int));
+ 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_printf) __P((DB_ENV *, DB_TXN *, const char *, ...));
+ 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));
+ int (*log_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*lsn_reset) __P((DB_ENV *, const char *, u_int32_t));
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_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_stat_print) __P((DB_ENV *, 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, int,
- u_int32_t, int *, u_int32_t));
+ int (*mutex_alloc) __P((DB_ENV *, u_int32_t, db_mutex_t *));
+ int (*mutex_free) __P((DB_ENV *, db_mutex_t));
+ int (*mutex_get_align) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_increment) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_max) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_tas_spins) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_lock) __P((DB_ENV *, db_mutex_t));
+ int (*mutex_set_align) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_increment) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_max) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_tas_spins) __P((DB_ENV *, u_int32_t));
+ int (*mutex_stat) __P((DB_ENV *, DB_MUTEX_STAT **, u_int32_t));
+ int (*mutex_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*mutex_unlock) __P((DB_ENV *, db_mutex_t));
+ int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
+ int (*remove) __P((DB_ENV *, const char *, u_int32_t));
+ int (*rep_elect)
+ __P((DB_ENV *, int, int, int *, u_int32_t));
int (*rep_flush) __P((DB_ENV *));
- int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *,
- int *, DB_LSN *));
+ int (*rep_get_config) __P((DB_ENV *, u_int32_t, int *));
+ int (*rep_get_limit) __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ int (*rep_get_nsites) __P((DB_ENV *, int *));
+ int (*rep_get_priority) __P((DB_ENV *, int *));
+ int (*rep_get_timeout) __P((DB_ENV *, int, u_int32_t *));
+ int (*rep_process_message)
+ __P((DB_ENV *, DBT *, DBT *, int *, DB_LSN *));
+ int (*rep_set_config) __P((DB_ENV *, u_int32_t, int));
+ int (*rep_set_limit) __P((DB_ENV *, u_int32_t, u_int32_t));
+ int (*rep_set_nsites) __P((DB_ENV *, int));
+ int (*rep_set_priority) __P((DB_ENV *, int));
+ int (*rep_set_timeout) __P((DB_ENV *, int, db_timeout_t));
+ int (*rep_set_transport) __P((DB_ENV *, int, int (*)(DB_ENV *,
+ const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)));
int (*rep_start) __P((DB_ENV *, DBT *, u_int32_t));
int (*rep_stat) __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
int (*rep_stat_print) __P((DB_ENV *, 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 (*rep_sync) __P((DB_ENV *, u_int32_t));
+ int (*repmgr_add_remote_site) __P((DB_ENV *, const char *, u_int,
+ int *, u_int32_t));
+ int (*repmgr_get_ack_policy) __P((DB_ENV *, int *));
+ int (*repmgr_set_ack_policy) __P((DB_ENV *, int));
+ int (*repmgr_set_local_site) __P((DB_ENV *, const char *, u_int,
+ u_int32_t));
+ int (*repmgr_site_list) __P((DB_ENV *, u_int *,
+ DB_REPMGR_SITE **));
+ int (*repmgr_start) __P((DB_ENV *, int, 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 (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ int (*set_data_dir) __P((DB_ENV *, const char *));
+ int (*set_encrypt) __P((DB_ENV *, const char *, u_int32_t));
+ void (*set_errcall) __P((DB_ENV *,
+ void (*)(const DB_ENV *, const char *, const char *)));
+ void (*set_errfile) __P((DB_ENV *, FILE *));
+ void (*set_errpfx) __P((DB_ENV *, const char *));
+ int (*set_event_notify)
+ __P((DB_ENV *, void (*)(DB_ENV *, u_int32_t, void *)));
+ int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+ int (*set_flags) __P((DB_ENV *, u_int32_t, int));
+ int (*set_intermediate_dir) __P((DB_ENV *, int, u_int32_t));
+ int (*set_isalive) __P((DB_ENV *,
+ int (*)(DB_ENV *, pid_t, db_threadid_t, u_int32_t)));
+ int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
+ int (*set_lg_dir) __P((DB_ENV *, const char *));
+ int (*set_lg_filemode) __P((DB_ENV *, int));
+ int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ int (*set_lg_regionmax) __P((DB_ENV *, u_int32_t));
+ 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_lockers) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
+ int (*set_mp_max_openfd) __P((DB_ENV *, int));
+ int (*set_mp_max_write) __P((DB_ENV *, int, int));
+ int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ void (*set_msgcall)
+ __P((DB_ENV *, void (*)(const DB_ENV *, const char *)));
+ void (*set_msgfile) __P((DB_ENV *, FILE *));
+ int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
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_rpc_server)
+ __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+ int (*set_shm_key) __P((DB_ENV *, long));
+ int (*set_thread_count) __P((DB_ENV *, u_int32_t));
+ int (*set_thread_id) __P((DB_ENV *,
+ void (*)(DB_ENV *, pid_t *, db_threadid_t *)));
+ int (*set_thread_id_string) __P((DB_ENV *,
+ char *(*)(DB_ENV *, pid_t, db_threadid_t, char *)));
+ int (*set_timeout) __P((DB_ENV *, db_timeout_t, u_int32_t));
+ int (*set_tmp_dir) __P((DB_ENV *, const char *));
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 (*set_verbose) __P((DB_ENV *, u_int32_t, int));
+ int (*stat_print) __P((DB_ENV *, u_int32_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_recover)
+ __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
int (*txn_stat) __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
int (*txn_stat_print) __P((DB_ENV *, 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));
+ /* DB_ENV PUBLIC HANDLE LIST END */
+
+ /* DB_ENV PRIVATE HANDLE LIST BEGIN */
+ int (*prdbt) __P((DBT *,
+ int, const char *, void *, int (*)(void *, const void *), int));
+ /* DB_ENV PRIVATE HANDLE LIST END */
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
@@ -2037,38 +2339,42 @@ struct __db_env {
#define DB_TEST_POSTSYNC 7 /* after syncing the log */
#define DB_TEST_PREDESTROY 8 /* before destroy op */
#define DB_TEST_PREOPEN 9 /* before __os_open */
-#define DB_TEST_SUBDB_LOCKS 10 /* subdb locking tests */
+#define DB_TEST_RECYCLE 10 /* test rep and txn_recycle */
+#define DB_TEST_SUBDB_LOCKS 11 /* subdb locking tests */
int test_abort; /* Abort value for testing. */
int test_check; /* Checkpoint value for testing. */
int test_copy; /* Copy value for testing. */
-#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_DSYNC_LOG 0x0000080 /* DB_DSYNC_LOG set. */
-#define DB_ENV_FATAL 0x0000100 /* Doing fatal recovery in env. */
-#define DB_ENV_LOCKDOWN 0x0000200 /* DB_LOCKDOWN set. */
-#define DB_ENV_LOG_AUTOREMOVE 0x0000400 /* DB_LOG_AUTOREMOVE set. */
-#define DB_ENV_LOG_INMEMORY 0x0000800 /* DB_LOG_INMEMORY set. */
-#define DB_ENV_NOLOCKING 0x0001000 /* DB_NOLOCKING set. */
-#define DB_ENV_NOMMAP 0x0002000 /* DB_NOMMAP set. */
-#define DB_ENV_NOPANIC 0x0004000 /* Okay if panic set. */
-#define DB_ENV_OPEN_CALLED 0x0008000 /* DB_ENV->open called. */
-#define DB_ENV_OVERWRITE 0x0010000 /* DB_OVERWRITE set. */
-#define DB_ENV_PRIVATE 0x0020000 /* DB_PRIVATE set. */
-#define DB_ENV_REGION_INIT 0x0040000 /* DB_REGION_INIT set. */
-#define DB_ENV_RPCCLIENT 0x0080000 /* DB_RPCCLIENT 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_TIME_NOTGRANTED 0x0800000 /* DB_TIME_NOTGRANTED set. */
-#define DB_ENV_TXN_NOSYNC 0x1000000 /* DB_TXN_NOSYNC set. */
-#define DB_ENV_TXN_WRITE_NOSYNC 0x2000000 /* DB_TXN_WRITE_NOSYNC set. */
-#define DB_ENV_YIELDCPU 0x4000000 /* DB_YIELDCPU set. */
+#define DB_ENV_AUTO_COMMIT 0x00000001 /* DB_AUTO_COMMIT. */
+#define DB_ENV_CDB 0x00000002 /* DB_INIT_CDB. */
+#define DB_ENV_CDB_ALLDB 0x00000004 /* CDB environment wide locking. */
+#define DB_ENV_CREATE 0x00000008 /* DB_CREATE set. */
+#define DB_ENV_DBLOCAL 0x00000010 /* Environment for a private DB. */
+#define DB_ENV_DIRECT_DB 0x00000020 /* DB_DIRECT_DB set. */
+#define DB_ENV_DIRECT_LOG 0x00000040 /* DB_DIRECT_LOG set. */
+#define DB_ENV_DSYNC_DB 0x00000080 /* DB_DSYNC_DB set. */
+#define DB_ENV_DSYNC_LOG 0x00000100 /* DB_DSYNC_LOG set. */
+#define DB_ENV_FATAL 0x00000200 /* Doing fatal recovery in env. */
+#define DB_ENV_LOCKDOWN 0x00000400 /* DB_LOCKDOWN set. */
+#define DB_ENV_LOG_AUTOREMOVE 0x00000800 /* DB_LOG_AUTOREMOVE set. */
+#define DB_ENV_LOG_INMEMORY 0x00001000 /* DB_LOG_INMEMORY set. */
+#define DB_ENV_MULTIVERSION 0x00002000 /* DB_MULTIVERSION set. */
+#define DB_ENV_NOLOCKING 0x00004000 /* DB_NOLOCKING set. */
+#define DB_ENV_NOMMAP 0x00008000 /* DB_NOMMAP set. */
+#define DB_ENV_NOPANIC 0x00010000 /* Okay if panic set. */
+#define DB_ENV_OPEN_CALLED 0x00020000 /* DB_ENV->open called. */
+#define DB_ENV_OVERWRITE 0x00040000 /* DB_OVERWRITE set. */
+#define DB_ENV_PRIVATE 0x00080000 /* DB_PRIVATE set. */
+#define DB_ENV_REGION_INIT 0x00100000 /* DB_REGION_INIT set. */
+#define DB_ENV_RPCCLIENT 0x00200000 /* DB_RPCCLIENT set. */
+#define DB_ENV_RPCCLIENT_GIVEN 0x00400000 /* User-supplied RPC client struct */
+#define DB_ENV_SYSTEM_MEM 0x00800000 /* DB_SYSTEM_MEM set. */
+#define DB_ENV_THREAD 0x01000000 /* DB_THREAD set. */
+#define DB_ENV_TIME_NOTGRANTED 0x02000000 /* DB_TIME_NOTGRANTED set. */
+#define DB_ENV_TXN_NOSYNC 0x04000000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_TXN_SNAPSHOT 0x08000000 /* DB_TXN_SNAPSHOT set. */
+#define DB_ENV_TXN_WRITE_NOSYNC 0x10000000 /* DB_TXN_WRITE_NOSYNC set. */
+#define DB_ENV_YIELDCPU 0x20000000 /* DB_YIELDCPU set. */
u_int32_t flags;
};
@@ -2158,6 +2464,7 @@ typedef struct entry {
#if defined(__cplusplus)
}
#endif
+
#endif /* !_DB_H_ */
/* DO NOT EDIT: automatically built by dist/s_include. */
diff --git a/db/build_vxworks/db_archive/db_archive.c b/db/build_vxworks/db_archive/db_archive.c
index 2297111b7..89ee92275 100644
--- a/db/build_vxworks/db_archive/db_archive.c
+++ b/db/build_vxworks/db_archive/db_archive.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_archive.c,v 11.46 2004/06/10 01:00:08 bostic Exp $
+ * $Id: db_archive.c,v 12.9 2006/08/26 09:23:00 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include "db_int.h"
-
int db_archive_main __P((int, char *[]));
int db_archive_usage __P((void));
-int db_archive_version_check __P((const char *));
+int db_archive_version_check __P((void));
+
+const char *progname;
int
db_archive(args)
@@ -50,13 +43,17 @@ db_archive_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_archive";
DB_ENV *dbenv;
u_int32_t flags;
int ch, exitval, ret, verbose;
char **file, *home, **list, *passwd;
- if ((ret = db_archive_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_archive_version_check()) != 0)
return (ret);
dbenv = NULL;
@@ -95,6 +92,12 @@ db_archive_main(argc, argv)
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
case 'v':
+ /*
+ * !!!
+ * The verbose flag no longer actually does anything,
+ * but it's left rather than adding it back at some
+ * future date.
+ */
verbose = 1;
break;
case '?':
@@ -132,8 +135,7 @@ db_archive_main(argc, argv)
* If attaching to a pre-existing environment fails, create a
* private one and try again.
*/
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
(ret == DB_VERSION_MISMATCH ||
(ret = dbenv->open(dbenv, home, DB_CREATE |
DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
@@ -176,13 +178,12 @@ int
db_archive_usage()
{
(void)fprintf(stderr,
- "usage: db_archive [-adlsVv] [-h home] [-P password]\n");
+ "usage: %s [-adlsVv] [-h home] [-P password]\n", progname);
return (EXIT_FAILURE);
}
int
-db_archive_version_check(progname)
- const char *progname;
+db_archive_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_archive/db_archive20.wpj b/db/build_vxworks/db_archive/db_archive20.wpj
index 9e3568eb5..2ac521035 100755
--- a/db/build_vxworks/db_archive/db_archive20.wpj
+++ b/db/build_vxworks/db_archive/db_archive20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_archive.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_archive.c_dependencies
-
<END>
<BEGIN> FILE_db_archive.c_objects
diff --git a/db/build_vxworks/db_archive/db_archive22.wpj b/db/build_vxworks/db_archive/db_archive22.wpj
index a9c9da3fd..f7a7d048e 100755
--- a/db/build_vxworks/db_archive/db_archive22.wpj
+++ b/db/build_vxworks/db_archive/db_archive22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint.c b/db/build_vxworks/db_checkpoint/db_checkpoint.c
index 6ee299571..861d28adb 100644
--- a/db/build_vxworks/db_checkpoint/db_checkpoint.c
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint.c
@@ -1,47 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_checkpoint.c,v 11.54 2004/03/24 15:13:12 bostic Exp $
+ * $Id: db_checkpoint.c,v 12.15 2006/08/26 09:23:25 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-#include "dbinc/db_page.h"
-#include "dbinc/db_am.h"
-
int db_checkpoint_main __P((int, char *[]));
int db_checkpoint_usage __P((void));
-int db_checkpoint_version_check __P((const char *));
+int db_checkpoint_version_check __P((void));
+
+const char *progname;
int
db_checkpoint(args)
@@ -65,14 +44,18 @@ db_checkpoint_main(argc, argv)
extern char *optarg;
extern int optind, __db_getopt_reset;
DB_ENV *dbenv;
- const char *progname = "db_checkpoint";
time_t now;
long argval;
u_int32_t flags, kbytes, minutes, seconds;
int ch, exitval, once, ret, verbose;
- char *home, *logfile, *passwd;
+ char *home, *logfile, *passwd, time_buf[CTIME_BUFLEN];
+
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
- if ((ret = db_checkpoint_version_check(progname)) != 0)
+ if ((ret = db_checkpoint_version_check()) != 0)
return (ret);
/*
@@ -101,7 +84,7 @@ db_checkpoint_main(argc, argv)
if (__db_getlong(NULL, progname,
optarg, 1, (long)MAX_UINT32_T, &argval))
return (EXIT_FAILURE);
- kbytes = argval;
+ kbytes = (u_int32_t)argval;
break;
case 'L':
logfile = optarg;
@@ -119,7 +102,7 @@ db_checkpoint_main(argc, argv)
if (__db_getlong(NULL, progname,
optarg, 1, (long)MAX_UINT32_T, &argval))
return (EXIT_FAILURE);
- minutes = argval;
+ minutes = (u_int32_t)argval;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
@@ -141,7 +124,7 @@ db_checkpoint_main(argc, argv)
(void)fprintf(stderr,
"%s: at least one of -1, -k and -p must be specified\n",
progname);
- return (EXIT_FAILURE);
+ return (db_checkpoint_usage());
}
/* Handle possible interruptions. */
@@ -169,18 +152,16 @@ db_checkpoint_main(argc, argv)
dbenv->err(dbenv, ret, "set_passwd");
goto shutdown;
}
- /* Initialize the environment. */
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0) {
- dbenv->err(dbenv, ret, "open");
- goto shutdown;
- }
- /* Register the standard pgin/pgout functions, in case we do I/O. */
- if ((ret = dbenv->memp_register(
- dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0) {
- dbenv->err(dbenv, ret,
- "DB_ENV->memp_register: failed to register access method functions");
+ /*
+ * If attaching to a pre-existing environment fails, create a
+ * private one and try again.
+ */
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
+ (!once || ret == DB_VERSION_MISMATCH ||
+ (ret = dbenv->open(dbenv, home,
+ DB_CREATE | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
+ dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
}
@@ -193,7 +174,8 @@ db_checkpoint_main(argc, argv)
while (!__db_util_interrupted()) {
if (verbose) {
(void)time(&now);
- dbenv->errx(dbenv, "checkpoint begin: %s", ctime(&now));
+ dbenv->errx(dbenv,
+ "checkpoint begin: %s", __db_ctime(&now, time_buf));
}
if ((ret = dbenv->txn_checkpoint(dbenv,
@@ -205,7 +187,7 @@ db_checkpoint_main(argc, argv)
if (verbose) {
(void)time(&now);
dbenv->errx(dbenv,
- "checkpoint complete: %s", ctime(&now));
+ "checkpoint complete: %s", __db_ctime(&now, time_buf));
}
if (once)
@@ -220,7 +202,7 @@ shutdown: exitval = 1;
/* Clean up the logfile. */
if (logfile != NULL)
- remove(logfile);
+ (void)remove(logfile);
/* Clean up the environment. */
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
@@ -241,15 +223,13 @@ shutdown: exitval = 1;
int
db_checkpoint_usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_checkpoint [-1Vv]",
+ (void)fprintf(stderr, "usage: %s [-1Vv]\n\t%s\n", progname,
"[-h home] [-k kbytes] [-L file] [-P password] [-p min]");
return (EXIT_FAILURE);
}
int
-db_checkpoint_version_check(progname)
- const char *progname;
+db_checkpoint_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint20.wpj b/db/build_vxworks/db_checkpoint/db_checkpoint20.wpj
index bdac5e7f3..a10a44c8c 100755
--- a/db/build_vxworks/db_checkpoint/db_checkpoint20.wpj
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_checkpoint.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_checkpoint.c_dependencies
-
<END>
<BEGIN> FILE_db_checkpoint.c_objects
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj b/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj
index 21d19cd15..57c46c1b1 100755
--- a/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_config.h b/db/build_vxworks/db_config.h
index a025144d8..66eb91283 100644
--- a/db/build_vxworks/db_config.h
+++ b/db/build_vxworks/db_config.h
@@ -32,12 +32,30 @@
/* Define to 1 if you want a version with run-time diagnostic checking. */
/* #undef DIAGNOSTIC */
+/* Define to 1 if 64-bit types are available. */
+#define HAVE_64BIT_TYPES 1
+
+/* Define to 1 if you have the `abort' function. */
+#define HAVE_ABORT 1
+
+/* Define to 1 if you have the `atoi' function. */
+#define HAVE_ATOI 1
+
+/* Define to 1 if you have the `atol' function. */
+#define HAVE_ATOL 1
+
/* Define to 1 if you have the `clock_gettime' function. */
#define HAVE_CLOCK_GETTIME 1
/* Define to 1 if Berkeley DB release includes strong cryptography. */
#define HAVE_CRYPTO 1
+/* Define to 1 if you have the `ctime_r' function. */
+#define HAVE_CTIME_R 1
+
+/* Define to 1 if ctime_r takes a buffer length as a third argument. */
+#define HAVE_CTIME_R_3ARG 1
+
/* Define to 1 if you have the `directio' function. */
/* #undef HAVE_DIRECTIO */
@@ -51,6 +69,12 @@
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
#define HAVE_EXIT_SUCCESS 1
+/* Define to 1 if you have the `fchmod' function. */
+/* #undef HAVE_FCHMOD */
+
+/* Define to 1 if you have the `fcntl' function. */
+/* #undef HAVE_FCNTL */
+
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
/* #undef HAVE_FCNTL_F_SETFD */
@@ -61,11 +85,17 @@
#define HAVE_FILESYSTEM_NOTZERO 1
/* Define to 1 if you have the `ftruncate' function. */
-/* #undef HAVE_FTRUNCATE */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
/* Define to 1 if you have the `getcwd' function. */
#define HAVE_GETCWD 1
+/* Define to 1 if you have the `getenv' function. */
+#define HAVE_GETENV 1
+
/* Define to 1 if you have the `getopt' function. */
/* #undef HAVE_GETOPT */
@@ -84,11 +114,17 @@
/* 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 `isalpha' function. */
+#define HAVE_ISALPHA 1
+
+/* Define to 1 if you have the `isdigit' function. */
+#define HAVE_ISDIGIT 1
+
+/* Define to 1 if you have the `isprint' function. */
+#define HAVE_ISPRINT 1
-/* Define to 1 if the system has the type `long long'. */
-/* #undef HAVE_LONG_LONG */
+/* Define to 1 if you have the `isspace' function. */
+#define HAVE_ISSPACE 1
/* Define to 1 if you have the `memcmp' function. */
#define HAVE_MEMCMP 1
@@ -108,6 +144,9 @@
/* Define to 1 if you have the `mmap' function. */
/* #undef HAVE_MMAP */
+/* Define to 1 if you have the `mprotect' function. */
+/* #undef HAVE_MPROTECT */
+
/* Define to 1 if you have the `munlock' function. */
/* #undef HAVE_MUNLOCK */
@@ -142,6 +181,9 @@
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
+/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
+/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
+
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
@@ -183,9 +225,6 @@
/* Define to 1 if mutexes hold system resources. */
#define HAVE_MUTEX_SYSTEM_RESOURCES 1
-/* Define to 1 if fast mutexes are available. */
-#define HAVE_MUTEX_THREADS 1
-
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
@@ -210,6 +249,9 @@
/* 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 amd64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -222,9 +264,18 @@
/* Define to 1 if you have the `pread' function. */
/* #undef HAVE_PREAD */
+/* Define to 1 if you have the `printf' function. */
+#define HAVE_PRINTF 1
+
/* Define to 1 if you have the `pstat_getdynamic' function. */
/* #undef HAVE_PSTAT_GETDYNAMIC */
+/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
+/* #undef HAVE_PTHREAD_API */
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#define HAVE_PTHREAD_YIELD 1
+
/* Define to 1 if you have the `pwrite' function. */
/* #undef HAVE_PWRITE */
@@ -243,6 +294,9 @@
/* Define to 1 if building replication support. */
#define HAVE_REPLICATION 1
+/* Define to 1 if building the Berkeley DB replication framework. */
+/* #undef HAVE_REPLICATION_THREADS */
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -252,17 +306,20 @@
/* Define to 1 if you have the `select' function. */
#define HAVE_SELECT 1
-/* Define to 1 if building sequence support. */
-/* #undef HAVE_SEQUENCE */
-
/* Define to 1 if you have the `shmget' function. */
/* #undef HAVE_SHMGET */
+/* Define to 1 if you have the `sigaction' function. */
+/* #undef HAVE_SIGACTION */
+
+/* Define to 1 if thread identifier type db_threadid_t is integral. */
+#define HAVE_SIMPLE_THREAD_TYPE 1
+
/* Define to 1 if you have the `snprintf' function. */
/* #undef HAVE_SNPRINTF */
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
+/* Define to 1 if you have the `stat' function. */
+#define HAVE_STAT 1
/* Define to 1 if building statistics support. */
#define HAVE_STATISTICS 1
@@ -276,18 +333,39 @@
/* Define to 1 if you have the `strcasecmp' function. */
/* #undef HAVE_STRCASECMP */
+/* Define to 1 if you have the `strcat' function. */
+#define HAVE_STRCAT 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
/* Define to 1 if you have the `strdup' function. */
/* #undef HAVE_STRDUP */
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
+/* Define to 1 if you have the `strncat' function. */
+#define HAVE_STRNCAT 1
+
+/* Define to 1 if you have the `strncmp' function. */
+#define HAVE_STRNCMP 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the `strsep' function. */
+/* #undef HAVE_STRSEP */
+
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
@@ -329,9 +407,6 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
-/* Define to 1 if the system has the type `unsigned long long'. */
-/* #undef HAVE_UNSIGNED_LONG_LONG */
-
/* Define to 1 if building access method verification support. */
#define HAVE_VERIFY 1
@@ -347,23 +422,20 @@
/* 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"
+#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
/* 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.3.27"
+#define PACKAGE_STRING "Berkeley DB 4.5.20"
/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "db-4.3.27"
+#define PACKAGE_TARNAME "db-4.5.20"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "4.3.27"
+#define PACKAGE_VERSION "4.5.20"
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
/* #undef STAT_MACROS_BROKEN */
@@ -386,58 +458,5 @@
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
-/*
- * Exit success/failure macros.
- */
-#ifndef HAVE_EXIT_SUCCESS
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-#endif
-
-/*
- * 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.
- */
-#ifndef HAVE_GETCWD
-#define getcwd __db_Cgetcwd
-#endif
-#ifndef HAVE_GETOPT
-#define getopt __db_Cgetopt
-#define optarg __db_Coptarg
-#define opterr __db_Copterr
-#define optind __db_Coptind
-#define optopt __db_Coptopt
-#endif
-#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
-
-/*
- * !!!
- * The following is not part of the automatic configuration setup, but
- * provides the information necessary to build Berkeley DB on VxWorks.
- */
+#include "clib_port.h"
#include "vxWorks.h"
diff --git a/db/build_vxworks/db_config_small.h b/db/build_vxworks/db_config_small.h
index 9cbe87c83..12caac11c 100644
--- a/db/build_vxworks/db_config_small.h
+++ b/db/build_vxworks/db_config_small.h
@@ -32,12 +32,30 @@
/* Define to 1 if you want a version with run-time diagnostic checking. */
/* #undef DIAGNOSTIC */
+/* Define to 1 if 64-bit types are available. */
+#define HAVE_64BIT_TYPES 1
+
+/* Define to 1 if you have the `abort' function. */
+#define HAVE_ABORT 1
+
+/* Define to 1 if you have the `atoi' function. */
+#define HAVE_ATOI 1
+
+/* Define to 1 if you have the `atol' function. */
+#define HAVE_ATOL 1
+
/* Define to 1 if you have the `clock_gettime' function. */
#define HAVE_CLOCK_GETTIME 1
/* Define to 1 if Berkeley DB release includes strong cryptography. */
/* #undef HAVE_CRYPTO */
+/* Define to 1 if you have the `ctime_r' function. */
+#define HAVE_CTIME_R 1
+
+/* Define to 1 if ctime_r takes a buffer length as a third argument. */
+#define HAVE_CTIME_R_3ARG 1
+
/* Define to 1 if you have the `directio' function. */
/* #undef HAVE_DIRECTIO */
@@ -51,6 +69,12 @@
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
#define HAVE_EXIT_SUCCESS 1
+/* Define to 1 if you have the `fchmod' function. */
+/* #undef HAVE_FCHMOD */
+
+/* Define to 1 if you have the `fcntl' function. */
+/* #undef HAVE_FCNTL */
+
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
/* #undef HAVE_FCNTL_F_SETFD */
@@ -61,11 +85,17 @@
#define HAVE_FILESYSTEM_NOTZERO 1
/* Define to 1 if you have the `ftruncate' function. */
-/* #undef HAVE_FTRUNCATE */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
/* Define to 1 if you have the `getcwd' function. */
#define HAVE_GETCWD 1
+/* Define to 1 if you have the `getenv' function. */
+#define HAVE_GETENV 1
+
/* Define to 1 if you have the `getopt' function. */
/* #undef HAVE_GETOPT */
@@ -84,11 +114,17 @@
/* 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 `isalpha' function. */
+#define HAVE_ISALPHA 1
+
+/* Define to 1 if you have the `isdigit' function. */
+#define HAVE_ISDIGIT 1
+
+/* Define to 1 if you have the `isprint' function. */
+#define HAVE_ISPRINT 1
-/* Define to 1 if the system has the type `long long'. */
-/* #undef HAVE_LONG_LONG */
+/* Define to 1 if you have the `isspace' function. */
+#define HAVE_ISSPACE 1
/* Define to 1 if you have the `memcmp' function. */
#define HAVE_MEMCMP 1
@@ -108,6 +144,9 @@
/* Define to 1 if you have the `mmap' function. */
/* #undef HAVE_MMAP */
+/* Define to 1 if you have the `mprotect' function. */
+/* #undef HAVE_MPROTECT */
+
/* Define to 1 if you have the `munlock' function. */
/* #undef HAVE_MUNLOCK */
@@ -142,6 +181,9 @@
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
+/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
+/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
+
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
@@ -183,9 +225,6 @@
/* Define to 1 if mutexes hold system resources. */
#define HAVE_MUTEX_SYSTEM_RESOURCES 1
-/* Define to 1 if fast mutexes are available. */
-#define HAVE_MUTEX_THREADS 1
-
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
@@ -210,6 +249,9 @@
/* 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 amd64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -222,9 +264,18 @@
/* Define to 1 if you have the `pread' function. */
/* #undef HAVE_PREAD */
+/* Define to 1 if you have the `printf' function. */
+#define HAVE_PRINTF 1
+
/* Define to 1 if you have the `pstat_getdynamic' function. */
/* #undef HAVE_PSTAT_GETDYNAMIC */
+/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
+/* #undef HAVE_PTHREAD_API */
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#define HAVE_PTHREAD_YIELD 1
+
/* Define to 1 if you have the `pwrite' function. */
/* #undef HAVE_PWRITE */
@@ -243,6 +294,9 @@
/* Define to 1 if building replication support. */
/* #undef HAVE_REPLICATION */
+/* Define to 1 if building the Berkeley DB replication framework. */
+/* #undef HAVE_REPLICATION_THREADS */
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -252,17 +306,20 @@
/* Define to 1 if you have the `select' function. */
#define HAVE_SELECT 1
-/* Define to 1 if building sequence support. */
-/* #undef HAVE_SEQUENCE */
-
/* Define to 1 if you have the `shmget' function. */
/* #undef HAVE_SHMGET */
+/* Define to 1 if you have the `sigaction' function. */
+/* #undef HAVE_SIGACTION */
+
+/* Define to 1 if thread identifier type db_threadid_t is integral. */
+#define HAVE_SIMPLE_THREAD_TYPE 1
+
/* Define to 1 if you have the `snprintf' function. */
/* #undef HAVE_SNPRINTF */
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
+/* Define to 1 if you have the `stat' function. */
+#define HAVE_STAT 1
/* Define to 1 if building statistics support. */
/* #undef HAVE_STATISTICS */
@@ -276,18 +333,39 @@
/* Define to 1 if you have the `strcasecmp' function. */
/* #undef HAVE_STRCASECMP */
+/* Define to 1 if you have the `strcat' function. */
+#define HAVE_STRCAT 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
/* Define to 1 if you have the `strdup' function. */
/* #undef HAVE_STRDUP */
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
+/* Define to 1 if you have the `strncat' function. */
+#define HAVE_STRNCAT 1
+
+/* Define to 1 if you have the `strncmp' function. */
+#define HAVE_STRNCMP 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the `strsep' function. */
+/* #undef HAVE_STRSEP */
+
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
@@ -329,9 +407,6 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
-/* Define to 1 if the system has the type `unsigned long long'. */
-/* #undef HAVE_UNSIGNED_LONG_LONG */
-
/* Define to 1 if building access method verification support. */
/* #undef HAVE_VERIFY */
@@ -347,23 +422,20 @@
/* 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"
+#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
/* 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.3.27"
+#define PACKAGE_STRING "Berkeley DB 4.5.20"
/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "db-4.3.27"
+#define PACKAGE_TARNAME "db-4.5.20"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "4.3.27"
+#define PACKAGE_VERSION "4.5.20"
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
/* #undef STAT_MACROS_BROKEN */
@@ -386,58 +458,5 @@
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
-/*
- * Exit success/failure macros.
- */
-#ifndef HAVE_EXIT_SUCCESS
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-#endif
-
-/*
- * 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.
- */
-#ifndef HAVE_GETCWD
-#define getcwd __db_Cgetcwd
-#endif
-#ifndef HAVE_GETOPT
-#define getopt __db_Cgetopt
-#define optarg __db_Coptarg
-#define opterr __db_Copterr
-#define optind __db_Coptind
-#define optopt __db_Coptopt
-#endif
-#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
-
-/*
- * !!!
- * The following is not part of the automatic configuration setup, but
- * provides the information necessary to build Berkeley DB on VxWorks.
- */
+#include "clib_port.h"
#include "vxWorks.h"
diff --git a/db/build_vxworks/db_deadlock/db_deadlock.c b/db/build_vxworks/db_deadlock/db_deadlock.c
index 32689d203..3b560d174 100644
--- a/db/build_vxworks/db_deadlock/db_deadlock.c
+++ b/db/build_vxworks/db_deadlock/db_deadlock.c
@@ -1,45 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_deadlock.c,v 11.45 2004/03/24 15:13:12 bostic Exp $
+ * $Id: db_deadlock.c,v 12.13 2006/08/26 09:23:00 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-
int db_deadlock_main __P((int, char *[]));
int db_deadlock_usage __P((void));
-int db_deadlock_version_check __P((const char *));
+int db_deadlock_version_check __P((void));
+
+const char *progname;
int
db_deadlock(args)
@@ -62,24 +43,28 @@ db_deadlock_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_deadlock";
DB_ENV *dbenv;
u_int32_t atype;
time_t now;
u_long secs, usecs;
int ch, exitval, ret, verbose;
- char *home, *logfile, *str;
+ char *home, *logfile, *passwd, *str, time_buf[CTIME_BUFLEN];
- if ((ret = db_deadlock_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_deadlock_version_check()) != 0)
return (ret);
dbenv = NULL;
atype = DB_LOCK_DEFAULT;
- home = logfile = NULL;
+ home = logfile = passwd = NULL;
secs = usecs = 0;
exitval = verbose = 0;
__db_getopt_reset = 1;
- while ((ch = getopt(argc, argv, "a:h:L:t:Vvw")) != EOF)
+ while ((ch = getopt(argc, argv, "a:h:L:P:t:Vv")) != EOF)
switch (ch) {
case 'a':
switch (optarg[0]) {
@@ -117,6 +102,15 @@ db_deadlock_main(argc, argv)
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 't':
if ((str = strchr(optarg, '.')) != NULL) {
*str++ = '\0';
@@ -131,18 +125,12 @@ db_deadlock_main(argc, argv)
return (db_deadlock_usage());
break;
-
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
case 'v':
verbose = 1;
break;
- case 'w': /* Undocumented. */
- /* Detect every 100ms (100000 us) when polling. */
- secs = 0;
- usecs = 100000;
- break;
case '?':
default:
return (db_deadlock_usage());
@@ -173,14 +161,19 @@ db_deadlock_main(argc, argv)
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;
+ }
+
if (verbose) {
(void)dbenv->set_verbose(dbenv, DB_VERB_DEADLOCK, 1);
(void)dbenv->set_verbose(dbenv, DB_VERB_WAITSFOR, 1);
}
/* An environment is required. */
- if ((ret =
- dbenv->open(dbenv, home, DB_INIT_LOCK | DB_USE_ENVIRON, 0)) != 0) {
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0) {
dbenv->err(dbenv, ret, "open");
goto shutdown;
}
@@ -188,7 +181,8 @@ db_deadlock_main(argc, argv)
while (!__db_util_interrupted()) {
if (verbose) {
(void)time(&now);
- dbenv->errx(dbenv, "running at %.24s", ctime(&now));
+ dbenv->errx(dbenv,
+ "running at %.24s", __db_ctime(&now, time_buf));
}
if ((ret = dbenv->lock_detect(dbenv, 0, atype, NULL)) != 0) {
@@ -217,6 +211,9 @@ shutdown: exitval = 1;
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -226,15 +223,14 @@ shutdown: exitval = 1;
int
db_deadlock_usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_deadlock [-Vv]",
- "[-a e | m | n | o | W | w | y] [-h home] [-L file] [-t sec.usec]");
+ (void)fprintf(stderr,
+ "usage: %s [-Vv] [-a e | m | n | o | W | w | y]\n\t%s\n", progname,
+ "[-h home] [-L file] [-P password] [-t sec.usec]");
return (EXIT_FAILURE);
}
int
-db_deadlock_version_check(progname)
- const char *progname;
+db_deadlock_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_deadlock/db_deadlock20.wpj b/db/build_vxworks/db_deadlock/db_deadlock20.wpj
index 30dce43c5..ad592d79f 100755
--- a/db/build_vxworks/db_deadlock/db_deadlock20.wpj
+++ b/db/build_vxworks/db_deadlock/db_deadlock20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_deadlock.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_deadlock.c_dependencies
-
<END>
<BEGIN> FILE_db_deadlock.c_objects
diff --git a/db/build_vxworks/db_deadlock/db_deadlock22.wpj b/db/build_vxworks/db_deadlock/db_deadlock22.wpj
index 55c33f9fa..4a8f9fe9e 100755
--- a/db/build_vxworks/db_deadlock/db_deadlock22.wpj
+++ b/db/build_vxworks/db_deadlock/db_deadlock22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_dump/db_dump.c b/db/build_vxworks/db_dump/db_dump.c
index 048bed6b9..e8f0f33b5 100644
--- a/db/build_vxworks/db_dump/db_dump.c
+++ b/db/build_vxworks/db_dump/db_dump.c
@@ -1,39 +1,32 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_dump.c,v 11.99 2004/10/11 18:53:13 bostic Exp $
+ * $Id: db_dump.c,v 12.9 2006/08/26 09:23:01 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
int db_dump_db_init __P((DB_ENV *, char *, int, u_int32_t, int *));
int db_dump_dump_sub __P((DB_ENV *, DB *, char *, int, int));
int db_dump_is_sub __P((DB *, int *));
int db_dump_main __P((int, char *[]));
int db_dump_show_subs __P((DB *));
int db_dump_usage __P((void));
-int db_dump_version_check __P((const char *));
+int db_dump_version_check __P((void));
+
+const char *progname;
int
db_dump(args)
@@ -56,7 +49,6 @@ db_dump_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_dump";
DB_ENV *dbenv;
DB *dbp;
u_int32_t cache;
@@ -65,7 +57,12 @@ db_dump_main(argc, argv)
int ret, Rflag, rflag, resize, subs;
char *dopt, *home, *passwd, *subname;
- if ((ret = db_dump_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_dump_version_check()) != 0)
return (ret);
dbenv = NULL;
@@ -238,7 +235,7 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
}
if (dopt != NULL) {
- if ((ret = __db_dumptree(dbp, dopt, NULL)) != 0) {
+ if ((ret = __db_dumptree(dbp, NULL, dopt, NULL)) != 0) {
dbp->err(dbp, ret, "__db_dumptree: %s", argv[0]);
goto err;
}
@@ -306,7 +303,7 @@ db_dump_db_init(dbenv, home, is_salvage, cache, is_privatep)
* 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.
*
- * If we are not doing a salvage, we wish to use the DB_JOINENV flag;
+ * If we are not doing a salvage, we want to join the environment;
* 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
@@ -320,8 +317,8 @@ db_dump_db_init(dbenv, home, is_salvage, cache, is_privatep)
* before we create our own.
*/
*is_privatep = 0;
- if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON |
- (is_salvage ? DB_INIT_MPOOL : DB_JOINENV), 0)) == 0)
+ if ((ret = dbenv->open(dbenv, home,
+ DB_USE_ENVIRON | (is_salvage ? DB_INIT_MPOOL : 0), 0)) == 0)
return (0);
if (ret == DB_VERSION_MISMATCH)
goto err;
@@ -505,15 +502,14 @@ db_dump_show_subs(dbp)
int
db_dump_usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_dump [-klNprRV]",
+ (void)fprintf(stderr, "usage: %s [-klNprRV]\n\t%s\n",
+ progname,
"[-d ahr] [-f output] [-h home] [-P password] [-s database] db_file");
return (EXIT_FAILURE);
}
int
-db_dump_version_check(progname)
- const char *progname;
+db_dump_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_dump/db_dump20.wpj b/db/build_vxworks/db_dump/db_dump20.wpj
index 4916c9275..df7789222 100755
--- a/db/build_vxworks/db_dump/db_dump20.wpj
+++ b/db/build_vxworks/db_dump/db_dump20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_dump.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_dump.c_dependencies
-
<END>
<BEGIN> FILE_db_dump.c_objects
diff --git a/db/build_vxworks/db_dump/db_dump22.wpj b/db/build_vxworks/db_dump/db_dump22.wpj
index 7ab82b18c..c5cc5d80c 100755
--- a/db/build_vxworks/db_dump/db_dump22.wpj
+++ b/db/build_vxworks/db_dump/db_dump22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_hotbackup/db_hotbackup.c b/db/build_vxworks/db_hotbackup/db_hotbackup.c
new file mode 100644
index 000000000..0958b2891
--- /dev/null
+++ b/db/build_vxworks/db_hotbackup/db_hotbackup.c
@@ -0,0 +1,839 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db_hotbackup.c,v 1.30 2006/08/26 09:23:07 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/log.h"
+#include "dbinc/db_page.h"
+#include "dbinc/qam.h"
+
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
+enum which_open { OPEN_ORIGINAL, OPEN_HOT_BACKUP };
+
+int db_hotbackup_backup_dir_clean __P((DB_ENV *, char *, int *, int, int));
+int db_hotbackup_data_copy __P((DB_ENV *, const char *, const char *, const char *, int));
+int db_hotbackup_env_init __P((DB_ENV **,
+ char *, const char **, const char ***, char *, enum which_open));
+int db_hotbackup_main __P((int, char *[]));
+int db_hotbackup_read_data_dir __P((DB_ENV *, char *, char *, const char *, int, int));
+int db_hotbackup_read_log_dir __P((DB_ENV *, char *, char *, const char *, int *, int, int));
+int db_hotbackup_usage __P((void));
+int db_hotbackup_version_check __P((void));
+
+const char *progname;
+
+int
+db_hotbackup(args)
+ char *args;
+{
+ int argc;
+ char **argv;
+
+ __db_util_arg("db_hotbackup", args, &argc, &argv);
+ return (db_hotbackup_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);
+}
+
+#include <stdio.h>
+#define ERROR_RETURN ERROR
+
+int
+db_hotbackup_main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ extern char *optarg;
+ extern int optind, __db_getopt_reset;
+ time_t now;
+ DB_ENV *dbenv;
+ u_int data_cnt, data_next;
+ int ch, checkpoint, copy_min, db_config, exitval;
+ int remove_max, ret, update, verbose;
+ char *backup_dir, **data_dir, *home, *passwd;
+ const char **ddir, **dir, *log_dir;
+ char home_buf[DB_MAXPATHLEN], time_buf[CTIME_BUFLEN];
+
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_hotbackup_version_check()) != 0)
+ return (ret);
+
+ checkpoint = db_config = data_cnt =
+ data_next = exitval = update = verbose = 0;
+ data_dir = NULL;
+ backup_dir = home = passwd = NULL;
+ log_dir = NULL;
+ copy_min = remove_max = 0;
+ __db_getopt_reset = 1;
+ while ((ch = getopt(argc, argv, "b:cDd:h:l:P:uVv")) != EOF)
+ switch (ch) {
+ case 'b':
+ backup_dir = optarg;
+ break;
+ case 'c':
+ checkpoint = 1;
+ break;
+ case 'D':
+ db_config = 1;
+ break;
+ case 'd':
+ /*
+ * User can specify a list of directories -- keep an
+ * array, leaving room for the trailing NULL.
+ */
+ if (data_dir == NULL || data_next >= data_cnt - 2) {
+ data_cnt = data_cnt == 0 ? 20 : data_cnt * 2;
+ if ((data_dir = realloc(data_dir,
+ data_cnt * sizeof(*data_dir))) == NULL) {
+ fprintf(stderr, "%s: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ }
+ data_dir[data_next++] = optarg;
+ break;
+ case 'h':
+ home = optarg;
+ break;
+ case 'l':
+ log_dir = 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 'u':
+ update = 1;
+ break;
+ case 'V':
+ printf("%s\n", db_version(NULL, NULL, NULL));
+ return (EXIT_SUCCESS);
+ case 'v':
+ verbose = 1;
+ break;
+ case '?':
+ default:
+ return (db_hotbackup_usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 0)
+ return (db_hotbackup_usage());
+
+ if (db_config && (data_dir != NULL || log_dir != NULL)) {
+ fprintf(stderr,
+ "%s: cannot specify -D and -d or -l\n", progname);
+ return (db_hotbackup_usage());
+ }
+
+ /* Handle possible interruptions. */
+ __db_util_siginit();
+
+ /*
+ * The home directory defaults to the environment variable DB_HOME.
+ * The log directory defaults to the home directory.
+ *
+ * We require a source database environment directory and a target
+ * backup directory.
+ */
+ if (home == NULL) {
+ home = home_buf;
+ if ((ret = __os_getenv(
+ NULL, "DB_HOME", &home, sizeof(home_buf))) != 0) {
+ fprintf(stderr,
+ "%s failed to get environment variable DB_HOME: %s\n",
+ progname, db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+ /*
+ * home set to NULL if __os_getenv failed to find DB_HOME.
+ */
+ }
+ if (home == NULL) {
+ fprintf(stderr,
+ "%s: no source database environment specified\n", progname);
+ return (db_hotbackup_usage());
+ }
+ if (backup_dir == NULL) {
+ fprintf(stderr,
+ "%s: no target backup directory specified\n", progname);
+ return (db_hotbackup_usage());
+ }
+
+ /* NULL-terminate any list of data directories. */
+ if (data_dir != NULL)
+ data_dir[data_next] = NULL;
+
+ if (verbose) {
+ (void)time(&now);
+ printf("%s: hot backup started at %s",
+ progname, __db_ctime(&now, time_buf));
+ }
+
+ ddir = NULL;
+ /* Open the source environment. */
+ if ((ret = db_hotbackup_env_init(&dbenv, home,
+ (db_config || log_dir != NULL) ? &log_dir : NULL,
+ db_config ? &ddir : NULL, passwd, OPEN_ORIGINAL)) != 0)
+ goto shutdown;
+
+ if (!db_config)
+ ddir = (const char **)data_dir;
+
+ if (log_dir == NULL)
+ log_dir = home;
+
+ if (db_config && __os_abspath(log_dir)) {
+ fprintf(stderr,
+ "%s: DB_CONFIG must not contain an absolute path for the log directory",
+ progname);
+ goto shutdown;
+ }
+
+ /*
+ * If the -c option is specified, checkpoint the source home
+ * database environment, and remove any unnecessary log files.
+ */
+ if (checkpoint) {
+ if (verbose)
+ printf("%s: %s: force checkpoint\n", progname, home);
+ if ((ret =
+ dbenv->txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->txn_checkpoint");
+ goto shutdown;
+ }
+ if (!update) {
+ if (verbose)
+ printf("%s: %s: remove unnecessary log files\n",
+ progname, home);
+ if ((ret = dbenv->log_archive(dbenv,
+ NULL, DB_ARCH_REMOVE)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive");
+ goto shutdown;
+ }
+ }
+ }
+
+ /*
+ * If the target directory for the backup does not exist, create it
+ * with mode read-write-execute for the owner. Ignore errors here,
+ * it's simpler and more portable to just always try the create. If
+ * there's a problem, we'll fail with reasonable errors later.
+ */
+ (void)__os_mkdir(NULL, backup_dir, __db_omode("rwx------"));
+
+ /*
+ * If the target directory for the backup does exist and the -u option
+ * was specified, all log files in the target directory are removed;
+ * if the -u option was not specified, all files in the target directory
+ * are removed.
+ */
+ if ((ret = db_hotbackup_backup_dir_clean(
+ dbenv, backup_dir, &remove_max, update, verbose)) != 0)
+ goto shutdown;
+
+ /*
+ * If the -u option was not specified, copy all database files found in
+ * the database environment home directory, or any directory specified
+ * using the -d option, into the target directory for the backup.
+ */
+ if (!update) {
+ if (db_hotbackup_read_data_dir(dbenv, home,
+ backup_dir, home, verbose, db_config) != 0)
+ goto shutdown;
+ if (ddir != NULL)
+ for (dir = &ddir[0]; *dir != NULL; ++dir) {
+ if (__os_abspath(*dir)) {
+ fprintf(stderr,
+ "%s: data directory '%s' is absolute path, not permitted with -D option\n",
+ progname, *dir);
+ goto shutdown;
+ }
+ if (db_hotbackup_read_data_dir(dbenv, home,
+ backup_dir, *dir, verbose, db_config) != 0)
+ goto shutdown;
+ }
+ }
+
+ /*
+ * Copy all log files found in the directory specified by the -l option
+ * (or in the database environment home directory, if no -l option was
+ * specified), into the target directory for the backup.
+ *
+ * The log directory defaults to the home directory.
+ */
+ if (db_hotbackup_read_log_dir(dbenv, db_config ? home : NULL,
+ backup_dir, log_dir, &copy_min, update, verbose) != 0)
+ goto shutdown;
+
+ /*
+ * If we're updating a snapshot, the lowest-numbered log file copied
+ * into the backup directory should be less than, or equal to, the
+ * highest-numbered log file removed from the backup directory during
+ * cleanup.
+ */
+ if (update && remove_max < copy_min &&
+ !(remove_max == 0 && copy_min == 1)) {
+ fprintf(stderr,
+ "%s: the largest log file removed (%d) must be greater\n",
+ progname, remove_max);
+ fprintf(stderr,
+ "%s: than or equal the smallest log file copied (%d)\n",
+ progname, copy_min);
+ goto shutdown;
+ }
+
+ /* Close the source environment. */
+ if ((ret = dbenv->close(dbenv, 0)) != 0) {
+ fprintf(stderr,
+ "%s: dbenv->close: %s\n", progname, db_strerror(ret));
+ dbenv = NULL;
+ goto shutdown;
+ }
+ /* Perform catastrophic recovery on the hot backup. */
+ if (verbose)
+ printf("%s: %s: run catastrophic recovery\n",
+ progname, backup_dir);
+ if ((ret = db_hotbackup_env_init(
+ &dbenv, backup_dir, NULL, NULL, passwd, OPEN_HOT_BACKUP)) != 0)
+ goto shutdown;
+
+ /*
+ * Remove any unnecessary log files from the hot backup.
+ */
+ if (verbose)
+ printf("%s: %s: remove unnecessary log files\n",
+ progname, backup_dir);
+ if ((ret =
+ dbenv->log_archive(dbenv, NULL, DB_ARCH_REMOVE)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive");
+ goto shutdown;
+ }
+
+ if (0) {
+shutdown: exitval = 1;
+ }
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
+ exitval = 1;
+ fprintf(stderr,
+ "%s: dbenv->close: %s\n", progname, db_strerror(ret));
+ }
+
+ if (data_dir != NULL)
+ free(data_dir);
+ if (passwd != NULL)
+ free(passwd);
+
+ if (exitval == 0) {
+ if (verbose) {
+ (void)time(&now);
+ printf("%s: hot backup completed at %s",
+ progname, __db_ctime(&now, time_buf));
+ }
+ } else {
+ fprintf(stderr, "%s: HOT BACKUP FAILED!\n", progname);
+ }
+
+ /* Resend any caught signal. */
+ __db_util_sigresend();
+
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+
+}
+
+/*
+ * env_init --
+ * Open a database environment.
+ */
+int
+db_hotbackup_env_init(dbenvp, home, log_dir, data_dir, passwd, which)
+ DB_ENV **dbenvp;
+ char *home;
+ const char **log_dir, ***data_dir;
+ char *passwd;
+ enum which_open which;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ *dbenvp = NULL;
+
+ /*
+ * 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));
+ return (1);
+ }
+
+ dbenv->set_errfile(dbenv, stderr);
+ setbuf(stderr, NULL);
+ dbenv->set_errpfx(dbenv, progname);
+ (void)setvbuf(stdout, NULL, _IOLBF, 0);
+
+ /*
+ * If a log directory has been specified, and it's not the same as the
+ * home directory, set it for the environment.
+ */
+ if (log_dir != NULL && *log_dir != NULL && *log_dir != home &&
+ (ret = dbenv->set_lg_dir(dbenv, *log_dir)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->set_lg_dir: %s", log_dir);
+ return (1);
+ }
+
+ /* Optionally set the password. */
+ if (passwd != NULL &&
+ (ret = dbenv->set_encrypt(dbenv, passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->set_encrypt");
+ return (1);
+ }
+
+ switch (which) {
+ case OPEN_ORIGINAL:
+ /*
+ * Opening the database environment we're trying to back up.
+ * We try to attach to a pre-existing environment; if that
+ * fails, we create a private environment and try again.
+ */
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
+ (ret == DB_VERSION_MISMATCH ||
+ (ret = dbenv->open(dbenv, home, DB_CREATE |
+ DB_INIT_LOG | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON,
+ 0)) != 0)) {
+ dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
+ return (1);
+ }
+ if (log_dir != NULL && *log_dir == NULL) {
+ (void)dbenv->get_lg_dir(dbenv, log_dir);
+ if (*log_dir == NULL)
+ *log_dir = home;
+ }
+ if (data_dir != NULL && *data_dir == NULL)
+ (void)dbenv->get_data_dirs(dbenv, data_dir);
+ break;
+ case OPEN_HOT_BACKUP:
+ /*
+ * Opening the backup copy of the database environment. We
+ * better be the only user, we're running recovery.
+ */
+ if ((ret = dbenv->open(dbenv, home, DB_CREATE |
+ DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_PRIVATE |
+ DB_RECOVER_FATAL | DB_USE_ENVIRON, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
+ return (1);
+ }
+ break;
+ }
+
+ *dbenvp = dbenv;
+ return (0);
+}
+
+/*
+ * backup_dir_clean --
+ * Clean out the backup directory.
+ */
+int
+db_hotbackup_backup_dir_clean(dbenv, backup_dir, remove_maxp, update, verbose)
+ DB_ENV *dbenv;
+ char *backup_dir;
+ int *remove_maxp, update, verbose;
+{
+ int cnt, fcnt, ret, v;
+ char **names, buf[DB_MAXPATHLEN];
+
+ /* Get a list of file names. */
+ if ((ret = __os_dirlist(dbenv, backup_dir, &names, &fcnt)) != 0) {
+ dbenv->err(dbenv, ret, "%s: directory read", backup_dir);
+ return (1);
+ }
+ for (cnt = fcnt; --cnt >= 0;) {
+ /*
+ * Skip log files (if update wasn't specified).
+ */
+ if (strncmp(names[cnt], LFPREFIX, sizeof(LFPREFIX) - 1)) {
+ if (update)
+ continue;
+ } else {
+ /* Track the highest-numbered log file removed. */
+ v = atoi(names[cnt] + sizeof(LFPREFIX) - 1);
+ if (*remove_maxp < v)
+ *remove_maxp = v;
+ }
+ if ((size_t)snprintf(buf, sizeof(buf),
+ "%s/%s", backup_dir, names[cnt]) >= sizeof(buf)) {
+ dbenv->err(dbenv, ret,
+ "%s/%s: path too long", backup_dir, names[cnt]);
+ return (1);
+ }
+ if (verbose)
+ printf("%s: removing %s\n", progname, buf);
+ if ((ret = remove(buf)) != 0) {
+ dbenv->err(dbenv, ret, "%s: remove", buf);
+ return (1);
+ }
+ }
+
+ __os_dirfree(dbenv, names, fcnt);
+
+ if (verbose && *remove_maxp != 0)
+ printf("%s: highest numbered log file removed: %d\n",
+ progname, *remove_maxp);
+
+ return (0);
+}
+
+/*
+ * read_data_dir --
+ * Read a directory looking for databases to copy.
+ */
+int
+db_hotbackup_read_data_dir(dbenv, home, backup_dir, dir, verbose, db_config)
+ DB_ENV *dbenv;
+ char *home, *backup_dir;
+ const char *dir;
+ int verbose, db_config;
+{
+ int cnt, fcnt, ret;
+ char *bd, **names;
+ char buf[DB_MAXPATHLEN], bbuf[DB_MAXPATHLEN];
+
+ bd = backup_dir;
+ if (db_config && dir != home) {
+ /* Build a path name to the destination. */
+ if ((size_t)(cnt = snprintf(bbuf, sizeof(bbuf),
+ "%s/%s/", backup_dir, dir)) >= sizeof(buf)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", backup_dir, dir);
+ return (1);
+ }
+ bd = bbuf;
+
+ /* Create the path. */
+ if ((ret = dbenv->set_intermediate_dir(
+ dbenv, __db_omode("rwx------"), 0)) != 0 ||
+ (ret = __db_mkpath(dbenv, bd)) != 0) {
+ dbenv->err(dbenv, ret, "%s: cannot create", bd);
+ return (1);
+ }
+ /* step on the trailing '/' */
+ bd[cnt] = '\0';
+
+ /* Build a path name to the source. */
+ if ((size_t)snprintf(buf, sizeof(buf),
+ "%s/%s", home, dir) >= sizeof(buf)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", home, dir);
+ return (1);
+ }
+ dir = buf;
+ }
+ /* Get a list of file names. */
+ if ((ret = __os_dirlist(dbenv, dir, &names, &fcnt)) != 0) {
+ dbenv->err(dbenv, ret, "%s: directory read", dir);
+ return (1);
+ }
+ for (cnt = fcnt; --cnt >= 0;) {
+ /*
+ * Skip files in DB's name space (but not Queue
+ * extent files, we need them).
+ */
+ if (!strncmp(names[cnt], LFPREFIX, sizeof(LFPREFIX) - 1))
+ continue;
+ if (!strncmp(names[cnt],
+ DB_REGION_PREFIX, sizeof(DB_REGION_PREFIX) - 1) &&
+ strncmp(names[cnt],
+ QUEUE_EXTENT_PREFIX, sizeof(QUEUE_EXTENT_PREFIX) - 1))
+ continue;
+
+ /*
+ * Skip DB_CONFIG.
+ */
+ if (!db_config &&
+ !strncmp(names[cnt], "DB_CONFIG", sizeof("DB_CONFIG")))
+ continue;
+
+ /* Copy the file. */
+ if ((ret = db_hotbackup_data_copy(
+ dbenv, names[cnt], dir, bd, verbose)) != 0)
+ return (1);
+ }
+
+ __os_dirfree(dbenv, names, fcnt);
+
+ return (0);
+}
+
+/*
+ * read_log_dir --
+ * * Read a directory looking for log files to copy. If home
+ * is passed then we are possibly using a log dir in the destination,
+ * following DB_CONFIG configuration.
+ */
+int
+db_hotbackup_read_log_dir(dbenv, home, backup_dir, log_dir, copy_minp, update, verbose)
+ DB_ENV *dbenv;
+ char *home, *backup_dir;
+ const char *log_dir;
+ int *copy_minp, update, verbose;
+{
+ u_int32_t aflag;
+ int cnt, ret, v;
+ char **begin, **names, *backupd;
+ const char *logd;
+ char from[DB_MAXPATHLEN], to[DB_MAXPATHLEN];
+
+ logd = log_dir;
+ backupd = backup_dir;
+ if (home != NULL && log_dir != home) {
+ if ((size_t)snprintf(from, sizeof(from),
+ "%s/%s", home, log_dir) >= sizeof(from)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", home, log_dir);
+ return (1);
+ }
+ logd = strdup(from);
+ if ((size_t)(cnt = snprintf(to, sizeof(to),
+ "%s/%s/", backup_dir, log_dir)) >= sizeof(to)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", backup_dir, log_dir);
+ return (1);
+ }
+ backupd = strdup(to);
+ /* Create the path. */
+ if ((ret = dbenv->set_intermediate_dir(
+ dbenv, __db_omode("rwx------"), 0)) != 0 ||
+ (ret = __db_mkpath(dbenv, backupd)) != 0) {
+ dbenv->err(dbenv, ret, "%s: cannot create", backupd);
+ return (1);
+ }
+ /* step on the trailing '/' */
+ backupd[cnt] = '\0';
+ }
+
+again: aflag = DB_ARCH_LOG;
+
+ /*
+ * If this is an update and we are deleting files, first process
+ * those files that can be removed, then repeat with the rest.
+ */
+ if (update)
+ aflag = 0;
+ /* Get a list of file names to be copied. */
+ if ((ret = dbenv->log_archive(dbenv, &names, aflag)) != 0) {
+ dbenv->err(dbenv, ret, "%s: log_archive", log_dir);
+ return (1);
+ }
+ if (names == NULL)
+ goto done;
+ begin = names;
+ for (; *names != NULL; names++) {
+ /* Track the lowest-numbered log file copied. */
+ v = atoi(*names + sizeof(LFPREFIX) - 1);
+ if (*copy_minp == 0 || *copy_minp > v)
+ *copy_minp = v;
+
+ if ((size_t)snprintf(from, sizeof(from),
+ "%s/%s", logd, *names) >= sizeof(from)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", log_dir, *names);
+ return (1);
+ }
+
+ /*
+ * If we're going to remove the file, attempt to rename the
+ * instead of copying and then removing. The likely failure
+ * is EXDEV (source and destination are on different volumes).
+ * Fall back to a copy, regardless of the error. We don't
+ * worry about partial contents, the copy truncates the file
+ * on open.
+ */
+ if (update) {
+ if ((size_t)snprintf(to, sizeof(to),
+ "%s/%s", backupd, *names) >= sizeof(to)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", backupd, *names);
+ return (1);
+ }
+ if (rename(from, to) == 0) {
+ if (verbose)
+ printf("%s: moving %s to %s\n",
+ progname, from, to);
+ continue;
+ }
+ }
+
+ /* Copy the file. */
+ if ((ret = db_hotbackup_data_copy(dbenv,
+ *names, logd, backupd, verbose)) != 0)
+ return (1);
+
+ if (update) {
+ if (verbose)
+ printf("%s: removing %s\n", progname, from);
+ if ((ret = __os_unlink(dbenv, from)) != 0) {
+ dbenv->err(dbenv, ret,
+ "unlink of %s failed", from);
+ return (1);
+ }
+ }
+
+ }
+
+ free(begin);
+done: if (update) {
+ update = 0;
+ goto again;
+ }
+
+ if (verbose && *copy_minp != 0)
+ printf("%s: lowest numbered log file copied: %d\n",
+ progname, *copy_minp);
+ if (logd != log_dir)
+ free((char *)logd);
+ if (backupd != backup_dir)
+ free(backupd);
+
+ return (0);
+}
+
+/*
+ * data_copy --
+ * Copy a file into the backup directory.
+ */
+int
+db_hotbackup_data_copy(dbenv, file, from_dir, to_dir, verbose)
+ DB_ENV *dbenv;
+ const char *file, *from_dir, *to_dir;
+ int verbose;
+{
+ ssize_t nr, nw;
+ size_t offset;
+ int ret, rfd, wfd;
+ char *buf, *taddr;
+
+ ret = 0;
+ rfd = wfd = -1;
+
+ if (verbose)
+ printf("%s: copying %s/%s to %s/%s\n",
+ progname, from_dir, file, to_dir, file);
+
+ /*
+ * We MUST copy multiples of the page size, atomically, to ensure a
+ * database page is not updated by another thread of control during
+ * the copy.
+ *
+ * !!!
+ * The current maximum page size for Berkeley DB is 64KB; we will have
+ * to increase this value if the maximum page size is ever more than a
+ * megabyte
+ */
+ if ((buf = malloc(MEGABYTE)) == NULL) {
+ dbenv->err(dbenv,
+ errno, "%lu buffer allocation", (u_long)MEGABYTE);
+ return (1);
+ }
+
+ /* Open the input file. */
+ if ((u_int32_t)snprintf(
+ buf, MEGABYTE, "%s/%s", from_dir, file) >= MEGABYTE) {
+ dbenv->errx(dbenv, "%s/%s: path too long", from_dir, file);
+ goto err;
+ }
+ if ((rfd = open(buf, O_RDONLY, 0)) == -1) {
+ dbenv->err(dbenv, errno, "%s", buf);
+ goto err;
+ }
+
+ /* Open the output file. */
+ if ((u_int32_t)snprintf(
+ buf, MEGABYTE, "%s/%s", to_dir, file) >= MEGABYTE) {
+ dbenv->errx(dbenv, "%s/%s: path too long", to_dir, file);
+ goto err;
+ }
+ if ((wfd = open(
+ buf, O_CREAT | O_TRUNC | O_WRONLY, __db_omode(OWNER_RW))) == -1)
+ goto err;
+
+ /* Copy the data. */
+ while ((nr = read(rfd, buf, MEGABYTE)) > 0)
+ for (taddr = buf, offset = 0;
+ offset < (size_t)nr; taddr += nw, offset += (size_t)nw) {
+ RETRY_CHK(((nw = write(wfd,
+ taddr, (u_int)(nr - offset))) < 0 ? 1 : 0), ret);
+ if (ret != 0)
+ break;
+ }
+ if (nr == -1) {
+ dbenv->err(dbenv, errno, "%s/%s: read", from_dir, file);
+ goto err;
+ }
+
+ if (ret != 0) {
+ dbenv->err(dbenv, errno, "%s: write %s/%s", to_dir, file);
+ goto err;
+ }
+
+ if (0) {
+err: ret = 1;
+ }
+ if (buf != NULL)
+ free(buf);
+
+ if (rfd != -1)
+ (void)close(rfd);
+
+ /* We may be running on a remote filesystem; force the flush. */
+ if (wfd != -1 && (fsync(wfd) != 0 || close(wfd) != 0)) {
+ dbenv->err(dbenv,
+ errno, "%s: fsync %s/%s", to_dir, file);
+ ret = 1;
+ }
+ return (ret);
+}
+
+int
+db_hotbackup_usage()
+{
+ (void)fprintf(stderr, "usage: %s [-cDuVv]\n\t%s\n", progname,
+ "[-d data_dir ...] [-h home] [-l log_dir] [-P password] -b backup_dir");
+ return (EXIT_FAILURE);
+}
+
+int
+db_hotbackup_version_check()
+{
+ 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) {
+ fprintf(stderr,
+ "%s: version %d.%d doesn't match library version %d.%d\n",
+ progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
+ v_major, v_minor);
+ return (EXIT_FAILURE);
+ }
+ return (0);
+}
diff --git a/db/build_vxworks/db_hotbackup/db_hotbackup20.wpj b/db/build_vxworks/db_hotbackup/db_hotbackup20.wpj
new file mode 100755
index 000000000..78e2e3449
--- /dev/null
+++ b/db/build_vxworks/db_hotbackup/db_hotbackup20.wpj
@@ -0,0 +1,158 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
+db_hotbackup20.out
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
+ar386
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUMgnu/db_hotbackup20.a
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
+cc386
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_CC
+cc386
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS
+-g \
+ -mpentium \
+ -ansi \
+ -nostdinc \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_CFLAGS_AS
+-g \
+ -mpentium \
+ -ansi \
+ -nostdinc \
+ -fvolatile \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -x \
+ assembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_CPP
+cc386 -E -P -xc
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_LD
+ld386
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_LDDEPS
+
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_NM
+nm386 -g
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_MACRO_SIZE
+size386
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu_TC
+::tc_PENTIUMgnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_hotbackup20.out
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUMgnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUMgnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.0
+<END>
+<BEGIN> FILE_db_hotbackup.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_hotbackup.c_dependencies
+<END>
+
+<BEGIN> FILE_db_hotbackup.c_objects
+db_hotbackup.o
+<END>
+
+<BEGIN> FILE_db_hotbackup.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_hotbackup.c
+<END>
+
+<BEGIN> userComments
+db_hotbackup
+<END>
diff --git a/db/build_vxworks/db_hotbackup/db_hotbackup22.wpj b/db/build_vxworks/db_hotbackup/db_hotbackup22.wpj
new file mode 100755
index 000000000..fcaccb507
--- /dev/null
+++ b/db/build_vxworks/db_hotbackup/db_hotbackup22.wpj
@@ -0,0 +1,192 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_hotbackup22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_hotbackup22.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_hotbackup22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_hotbackup22.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_hotbackup.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_hotbackup.c_dependencies
+<END>
+
+<BEGIN> FILE_db_hotbackup.c_objects
+db_hotbackup.o
+<END>
+
+<BEGIN> FILE_db_hotbackup.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_hotbackup.c
+<END>
+
+<BEGIN> userComments
+db_hotbackup
+<END>
diff --git a/db/build_vxworks/db_int.h b/db/build_vxworks/db_int.h
index ccd75bfa1..e76c596cd 100644
--- a/db/build_vxworks/db_int.h
+++ b/db/build_vxworks/db_int.h
@@ -2,26 +2,74 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_int.in,v 11.155 2004/10/28 16:07:38 ubell Exp $
+ * $Id: db_int.in,v 12.41 2006/09/19 15:06:59 bostic Exp $
*/
-#ifndef _DB_INTERNAL_H_
-#define _DB_INTERNAL_H_
+#ifndef _DB_INT_H_
+#define _DB_INT_H_
/*******************************************************
- * 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.
+ * Berkeley DB includes.
*******************************************************/
#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#ifdef DIAG_MVCC
+#include <sys/mman.h>
+#endif
+#include <sys/stat.h>
+
+#if defined(__INCLUDE_SELECT_H)
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_VXWORKS
+#include <selectLib.h>
+#endif
+#endif
+
+#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_VXWORKS
+#include <net/uio.h>
+#else
+#include <sys/uio.h>
+#endif
+
+#if defined(__INCLUDE_NETWORKING)
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#endif
+
#if defined(STDC_HEADERS) || defined(__cplusplus)
#include <stdarg.h>
#else
#include <varargs.h>
#endif
+
+#include <ctype.h>
#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#endif
#include "db.h"
@@ -47,7 +95,7 @@ extern "C" {
#endif
#endif
-#if defined(HAVE_LONG_LONG) && defined(HAVE_UNSIGNED_LONG_LONG)
+#if defined(HAVE_64BIT_TYPES)
#undef INT64_MAX
#undef INT64_MIN
#undef UINT64_MAX
@@ -56,9 +104,6 @@ extern "C" {
#define INT64_MAX _I64_MAX
#define INT64_MIN _I64_MIN
#define UINT64_MAX _UI64_MAX
-
-#define INT64_FMT "%l64d"
-#define UINT64_FMT "%l64u"
#else
/*
* Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
@@ -68,11 +113,16 @@ extern "C" {
#define INT64_MAX 9223372036854775807LL
#define INT64_MIN (-INT64_MAX-1)
#define UINT64_MAX 18446744073709551615ULL
+#endif /* DB_WIN32 */
#define INT64_FMT "%lld"
#define UINT64_FMT "%llu"
-#endif /* DB_WIN32 */
-#endif /* HAVE_LONG_LONG && HAVE_UNSIGNED_LONG_LONG */
+#endif /* HAVE_64BIT_TYPES */
+
+#undef FALSE
+#define FALSE 0
+#undef TRUE
+#define TRUE (!FALSE)
#define MEGABYTE 1048576
#define GIGABYTE 1073741824
@@ -103,17 +153,17 @@ extern "C" {
/* Align an integer to a specific boundary. */
#undef DB_ALIGN
#define DB_ALIGN(v, bound) \
- (((v) + (bound) - 1) & ~(((uintmax_t)bound) - 1))
+ (((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
/* Increment a pointer to a specific boundary. */
#undef ALIGNP_INC
#define ALIGNP_INC(p, bound) \
- (void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)bound) - 1))
+ (void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
/* Decrement a pointer to a specific boundary. */
#undef ALIGNP_DEC
#define ALIGNP_DEC(p, bound) \
- (void *)((uintptr_t)(p) & ~(((uintptr_t)bound) - 1))
+ (void *)((uintptr_t)(p) & ~(((uintptr_t)(bound)) - 1))
/*
* Print an address as a u_long (a u_long is the largest type we can print
@@ -181,7 +231,7 @@ typedef struct __fn {
((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
#define DB_PCT_PG(v, total, pgsize) \
((int)((total) == 0 ? 0 : \
- 100 - ((double)(v) * 100) / ((total) * (pgsize))))
+ 100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
/*
* Structure used for callback message aggregation.
@@ -221,6 +271,8 @@ typedef struct __db_msgbuf {
#define STAT_LSN(msg, lsnp) \
__db_msg(dbenv, "%lu/%lu\t%s", \
(u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
+#define STAT_POINTER(msg, v) \
+ __db_msg(dbenv, "%#lx\t%s", P_TO_ULONG(v), msg)
#define STAT_STRING(msg, p) do { \
const char *__p = p; /* p may be a function call. */ \
__db_msg(dbenv, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
@@ -228,6 +280,21 @@ typedef struct __db_msgbuf {
#define STAT_ULONG(msg, v) \
__db_msg(dbenv, "%lu\t%s", (u_long)(v), msg)
+/*
+ * There are quite a few places in Berkeley DB where we want to initialize
+ * a DBT from a string or other random pointer type, using a length typed
+ * to size_t in most cases. This macro avoids a lot of casting. The macro
+ * comes in two flavors because we often want to clear the DBT first.
+ */
+#define DB_SET_DBT(dbt, d, s) do { \
+ (dbt).data = (void *)(d); \
+ (dbt).size = (u_int32_t)(s); \
+} while (0)
+#define DB_INIT_DBT(dbt, d, s) do { \
+ memset(&(dbt), 0, sizeof(dbt)); \
+ DB_SET_DBT(dbt, d, s); \
+} while (0)
+
/*******************************************************
* API return values
*******************************************************/
@@ -249,11 +316,11 @@ typedef struct __db_msgbuf {
#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_IGNORE || \
(ret) == DB_REP_ISPERM || \
(ret) == DB_REP_NEWMASTER || \
(ret) == DB_REP_NEWSITE || \
- (ret) == DB_REP_NOTPERM || \
- (ret) == DB_REP_STARTUPDONE)
+ (ret) == DB_REP_NOTPERM)
/* Find a reasonable operation-not-supported error. */
#ifdef EOPNOTSUPP
@@ -274,8 +341,7 @@ typedef struct __db_msgbuf {
* 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 DB_MAXPATHLEN 1024
#define PATH_DOT "." /* Current working directory. */
/* Path separator character(s). */
@@ -293,21 +359,33 @@ typedef enum {
} APPNAME;
/*
+ * A set of macros to check if various functionality has been configured.
+ *
+ * ALIVE_ON The is_alive function is configured.
* CDB_LOCKING CDB product locking.
* CRYPTO_ON Security has been configured.
* LOCKING_ON Locking has been configured.
* LOGGING_ON Logging has been configured.
+ * MUTEX_ON Mutexes have 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.
+ *
+ * REP_ON is more complex than most: if the BDB library was compiled without
+ * replication support, dbenv->rep_handle will be NULL; if the BDB library
+ * has replication support, but it was not configured, the region reference
+ * will be NULL.
*/
+#define ALIVE_ON(dbenv) ((dbenv)->is_alive != NULL)
#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 MUTEX_ON(dbenv) ((dbenv)->mutex_handle != NULL)
+#define REP_ON(dbenv) \
+ ((dbenv)->rep_handle != NULL && (dbenv)->rep_handle->region != NULL)
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)
@@ -324,8 +402,7 @@ typedef enum {
* IS_RECOVERING: The system is running recovery.
*/
#define IS_RECOVERING(dbenv) \
- (LOGGING_ON(dbenv) && \
- F_ISSET((DB_LOG *)(dbenv)->lg_handle, DBLOG_RECOVER))
+ (LOGGING_ON(dbenv) && F_ISSET((dbenv)->lg_handle, DBLOG_RECOVER))
/* Initialization methods are often illegal before/after open is called. */
#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \
@@ -339,10 +416,90 @@ typedef enum {
#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flags) \
if (handle == NULL) \
return (__db_env_config(dbenv, i, flags));
+#define ENV_REQUIRES_CONFIG_XX(dbenv, handle, i, flags) \
+ if ((dbenv)->handle->region == NULL) \
+ return (__db_env_config(dbenv, i, flags));
#define ENV_NOT_CONFIGURED(dbenv, handle, i, flags) \
if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \
ENV_REQUIRES_CONFIG(dbenv, handle, i, flags)
+#define ENV_ENTER(dbenv, ip) do { \
+ int __ret; \
+ if ((dbenv)->thr_hashtab == NULL) \
+ ip = NULL; \
+ else { \
+ if ((__ret = \
+ __env_set_state(dbenv, &(ip), THREAD_ACTIVE)) != 0) \
+ return (__ret); \
+ } \
+} while (0)
+
+#ifdef DIAGNOSTIC
+#define ENV_LEAVE(dbenv, ip) do { \
+ if ((ip) != NULL) { \
+ DB_ASSERT(dbenv, ip->dbth_state == THREAD_ACTIVE); \
+ (ip)->dbth_state = THREAD_OUT; \
+ } \
+} while (0)
+#else
+#define ENV_LEAVE(dbenv, ip) do { \
+ if ((ip) != NULL) \
+ (ip)->dbth_state = THREAD_OUT; \
+} while (0)
+#endif
+#ifdef DIAGNOSTIC
+#define CHECK_THREAD(dbenv) do { \
+ DB_THREAD_INFO *__ip; \
+ if ((dbenv)->thr_hashtab != NULL) { \
+ (void)__env_set_state(dbenv, &__ip, THREAD_DIAGNOSTIC); \
+ DB_ASSERT(dbenv, \
+ __ip != NULL && __ip->dbth_state != THREAD_OUT); \
+ } \
+} while (0)
+#ifdef HAVE_STATISTICS
+#define CHECK_MTX_THREAD(dbenv, mtx) do { \
+ if (mtx->alloc_id != MTX_MUTEX_REGION && \
+ mtx->alloc_id != MTX_ENV_REGION && \
+ mtx->alloc_id != MTX_APPLICATION) \
+ CHECK_THREAD(dbenv); \
+} while (0)
+#else
+#define CHECK_MTX_THREAD(dbenv, mtx)
+#endif
+#else
+#define CHECK_THREAD(dbenv)
+#define CHECK_MTX_THREAD(dbenv, mtx)
+#endif
+
+typedef enum {
+ THREAD_SLOT_NOT_IN_USE=0,
+ THREAD_OUT,
+ THREAD_ACTIVE,
+ THREAD_BLOCKED
+#ifdef DIAGNOSTIC
+ , THREAD_DIAGNOSTIC
+#endif
+} DB_THREAD_STATE;
+
+typedef struct __db_thread_info {
+ pid_t dbth_pid;
+ db_threadid_t dbth_tid;
+ DB_THREAD_STATE dbth_state;
+ SH_TAILQ_ENTRY dbth_links;
+} DB_THREAD_INFO;
+
+typedef struct __env_thread_info {
+ u_int32_t thr_count;
+ u_int32_t thr_max;
+ u_int32_t thr_nbucket;
+ roff_t thr_hashoff;
+} THREAD_INFO;
+
+#define DB_EVENT(dbenv, e, einfo) do { \
+ if ((dbenv)->db_event_func != NULL) \
+ (dbenv)->db_event_func(dbenv, e, einfo); \
+} while (0)
+
/*******************************************************
* Database Access Methods.
*******************************************************/
@@ -351,7 +508,7 @@ typedef enum {
* The database handle is free-threaded (was opened with DB_THREAD).
*/
#define DB_IS_THREADED(dbp) \
- ((dbp)->mutexp != NULL)
+ ((dbp)->mutex != MUTEX_INVALID)
/* Initialization methods are often illegal before/after open is called. */
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
@@ -399,9 +556,9 @@ typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
#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) \
+#define FREE_IF_NEEDED(dbenv, dbt) \
if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
- __os_ufree((sdbp)->dbenv, (dbt)->data); \
+ __os_ufree((dbenv), (dbt)->data); \
F_CLR((dbt), DB_DBT_APPMALLOC); \
}
@@ -438,8 +595,10 @@ typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
/*
* File types for DB access methods. Negative numbers are reserved to DB.
*/
-#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
-#define DB_FTYPE_NOTSET 0 /* Don't call... */
+#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
+#define DB_FTYPE_NOTSET 0 /* Don't call... */
+#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
+#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
/* Structure used as the DB pgin/pgout pgcookie. */
typedef struct __dbpginfo {
@@ -479,12 +638,25 @@ typedef struct __dbpginfo {
#define IS_NOT_LOGGED_LSN(LSN) \
((LSN).file == 0 && (LSN).offset == 1)
+/*
+ * LOG_COMPARE -- compare two LSNs.
+ */
+
+#define LOG_COMPARE(lsn0, lsn1) \
+ ((lsn0)->file != (lsn1)->file ? \
+ ((lsn0)->file < (lsn1)->file ? -1 : 1) : \
+ ((lsn0)->offset != (lsn1)->offset ? \
+ ((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
+
+
/*******************************************************
* Txn.
*******************************************************/
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
#define NOWAIT_FLAG(txn) \
((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
+#define IS_REAL_TXN(txn) \
+ ((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
#define IS_SUBTRANSACTION(txn) \
((txn) != NULL && (txn)->parent != NULL)
@@ -527,10 +699,12 @@ typedef struct __dbpginfo {
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
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_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;
+typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
+
#if defined(__cplusplus)
}
#endif
@@ -542,11 +716,13 @@ struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
#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/mutex.h"
#include "dbinc/os.h"
+#ifdef HAVE_REPLICATION_THREADS
+#include "dbinc/repmgr.h"
+#endif
#include "dbinc/rep.h"
#include "dbinc_auto/clib_ext.h"
#include "dbinc_auto/common_ext.h"
@@ -578,15 +754,18 @@ struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
* 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 we're not in recovery (master - doing an abort a client applying
+ * a txn), then a client's only path through here is on an internal
+ * operation, and a master's only path through here is a transactional
+ * operation. Detect if either is not the case.
*/
#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))
+#define DBC_LOGGING(dbc) __dbc_logging(dbc)
#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_ */
+#endif /* !_DB_INT_H_ */
diff --git a/db/build_vxworks/db_load/db_load.c b/db/build_vxworks/db_load/db_load.c
index 1f933efa4..715c4c711 100644
--- a/db/build_vxworks/db_load/db_load.c
+++ b/db/build_vxworks/db_load/db_load.c
@@ -1,33 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_load.c,v 11.100 2004/10/29 17:29:02 bostic Exp $
+ * $Id: db_load.c,v 12.18 2006/08/26 09:23:08 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
typedef struct { /* XXX: Globals. */
const char *progname; /* Program name. */
char *hdrbuf; /* Input file header. */
@@ -42,7 +32,7 @@ typedef struct { /* XXX: Globals. */
u_int32_t cache; /* Env cache size. */
} LDG;
-void db_load_badend __P((DB_ENV *));
+int db_load_badend __P((DB_ENV *));
void db_load_badnum __P((DB_ENV *));
int db_load_configure __P((DB_ENV *, DB *, char **, char **, int *));
int db_load_convprintable __P((DB_ENV *, char *, char **));
@@ -51,13 +41,14 @@ 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 *));
int db_load_main __P((int, char *[]));
int db_load_rheader __P((DB_ENV *, DB *, DBTYPE *, char **, int *, int *));
int db_load_usage __P((void));
-int db_load_version_check __P((const char *));
+int db_load_version_check __P((void));
+
+const char *progname;
#define G(f) ((LDG *)dbenv->app_private)->f
@@ -95,7 +86,15 @@ db_load_main(argc, argv)
int ch, existed, exitval, ret;
char **clist, **clp;
- ldg.progname = "db_load";
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_load_version_check()) != 0)
+ return (ret);
+
+ ldg.progname = progname;
ldg.lineno = 0;
ldg.endodata = ldg.endofile = 0;
ldg.version = 1;
@@ -104,9 +103,6 @@ db_load_main(argc, argv)
ldg.home = NULL;
ldg.passwd = NULL;
- if ((ret = db_load_version_check(ldg.progname)) != 0)
- return (ret);
-
mode = NOTSET;
ldf = 0;
exitval = existed = 0;
@@ -233,11 +229,11 @@ db_load_main(argc, argv)
switch (mode) {
case FILEID_RESET:
exitval = dbenv->fileid_reset(
- dbenv, argv[0], ldf & LDF_PASSWORD ? 1 : 0);
+ dbenv, argv[0], ldf & LDF_PASSWORD ? DB_ENCRYPT : 0);
break;
case LSN_RESET:
exitval = dbenv->lsn_reset(
- dbenv, argv[0], ldf & LDF_PASSWORD ? 1 : 0);
+ dbenv, argv[0], ldf & LDF_PASSWORD ? DB_ENCRYPT : 0);
break;
case NOTSET:
case STANDARD_LOAD:
@@ -416,7 +412,7 @@ retry_db:
/* Open the DB file. */
if ((ret = dbp->open(dbp, NULL, name, subdb, dbtype,
DB_CREATE | (TXN_ON(dbenv) ? DB_AUTO_COMMIT : 0),
- __db_omode("rwrwrw"))) != 0) {
+ __db_omode("rw-rw-rw-"))) != 0) {
dbp->err(dbp, ret, "DB->open: %s", name);
goto err;
}
@@ -544,7 +540,7 @@ retry: if (txn != NULL)
}
}
done: rval = 0;
- DB_ASSERT(ctxn == NULL);
+ DB_ASSERT(dbenv, ctxn == NULL);
if (txn != NULL && (ret = txn->commit(txn, 0)) != 0) {
txn = NULL;
goto err;
@@ -552,7 +548,7 @@ done: rval = 0;
if (0) {
err: rval = 1;
- DB_ASSERT(ctxn == NULL);
+ DB_ASSERT(dbenv, ctxn == NULL);
if (txn != NULL)
(void)txn->abort(txn);
}
@@ -667,23 +663,22 @@ err: dbenv->err(dbenv, ret, "DB_ENV->open");
if ((ret = dbp->set_flags(dbp, flag)) != 0) { \
dbp->err(dbp, ret, "%s: set_flags: %s", \
G(progname), name); \
- return (1); \
+ goto err; \
} \
break; \
case '0': \
break; \
default: \
db_load_badnum(dbenv); \
- return (1); \
+ goto err; \
} \
continue; \
}
#define NUMBER(name, value, keyword, func, t) \
if (strcmp(name, keyword) == 0) { \
- if (__db_getlong(dbenv, \
- NULL, value, 1, LONG_MAX, &val) != 0) \
- return (1); \
- if ((ret = dbp->func(dbp, (t)val)) != 0) \
+ if ((ret = __db_getlong(dbenv, \
+ NULL, value, 0, LONG_MAX, &val)) != 0 || \
+ (ret = dbp->func(dbp, (t)val)) != 0) \
goto nameerr; \
continue; \
}
@@ -695,6 +690,26 @@ err: dbenv->err(dbenv, ret, "DB_ENV->open");
}
/*
+ * The code to check a command-line or input header argument against a list
+ * of configuration options. It's #defined because it's used in two places
+ * and the two places have gotten out of sync more than once.
+ */
+#define CONFIGURATION_LIST_COMPARE \
+ NUMBER(name, value, "bt_minkey", set_bt_minkey, u_int32_t); \
+ FLAG(name, value, "chksum", DB_CHKSUM); \
+ NUMBER(name, value, "db_lorder", set_lorder, int); \
+ NUMBER(name, value, "db_pagesize", set_pagesize, u_int32_t); \
+ FLAG(name, value, "duplicates", DB_DUP); \
+ FLAG(name, value, "dupsort", DB_DUPSORT); \
+ NUMBER(name, value, "extentsize", set_q_extentsize, u_int32_t); \
+ 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)
+
+/*
* configure --
* Handle command-line configuration options.
*/
@@ -740,21 +755,7 @@ db_load_configure(dbenv, dbp, clp, subdbp, keysp)
continue;
}
-#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
-#endif
- 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, 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);
+ CONFIGURATION_LIST_COMPARE;
dbp->errx(dbp,
"unknown command-line configuration keyword \"%s\"", name);
@@ -764,7 +765,7 @@ db_load_configure(dbenv, dbp, clp, subdbp, keysp)
nameerr:
dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
- return (1);
+err: return (1);
}
/*
@@ -786,7 +787,7 @@ db_load_rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
*dbtypep = DB_UNKNOWN;
*checkprintp = 0;
- name = p = NULL;
+ name = NULL;
/*
* We start with a smallish buffer; most headers are small.
@@ -795,10 +796,8 @@ db_load_rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
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);
- }
+ if ((buf = malloc(buflen)) == NULL)
+ goto memerr;
G(hdrbuf) = buf;
G(origline) = G(lineno);
} else {
@@ -847,7 +846,6 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
start += linelen;
if (name != NULL) {
- *p = '=';
free(name);
name = NULL;
}
@@ -931,22 +929,7 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
continue;
}
-#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
-#endif
- 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, 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);
+ CONFIGURATION_LIST_COMPARE;
dbp->errx(dbp,
"unknown input-file header configuration keyword \"%s\"",
@@ -954,23 +937,71 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
goto err;
}
ret = 0;
+
if (0) {
nameerr: dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
-err: ret = 1;
+ 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);
+ if (0) {
+memerr: dbp->errx(dbp, "unable to allocate memory");
+err: ret = 1;
}
+ if (name != NULL)
+ free(name);
return (ret);
}
/*
+ * Macro to convert a pair of hex bytes to a decimal value.
+ *
+ * !!!
+ * Note that this macro is side-effect safe. This was done deliberately,
+ * callers depend on it.
+ */
+#define DIGITIZE(store, v1, v2) { \
+ char _v1, _v2; \
+ _v1 = (v1); \
+ _v2 = (v2); \
+ if ((_v1) > 'f' || (_v2) > 'f') \
+ return (db_load_badend(dbenv)); \
+ (store) = \
+ ((_v1) == '0' ? 0 : \
+ ((_v1) == '1' ? 1 : \
+ ((_v1) == '2' ? 2 : \
+ ((_v1) == '3' ? 3 : \
+ ((_v1) == '4' ? 4 : \
+ ((_v1) == '5' ? 5 : \
+ ((_v1) == '6' ? 6 : \
+ ((_v1) == '7' ? 7 : \
+ ((_v1) == '8' ? 8 : \
+ ((_v1) == '9' ? 9 : \
+ ((_v1) == 'a' ? 10 : \
+ ((_v1) == 'b' ? 11 : \
+ ((_v1) == 'c' ? 12 : \
+ ((_v1) == 'd' ? 13 : \
+ ((_v1) == 'e' ? 14 : 15))))))))))))))) << 4 | \
+ ((_v2) == '0' ? 0 : \
+ ((_v2) == '1' ? 1 : \
+ ((_v2) == '2' ? 2 : \
+ ((_v2) == '3' ? 3 : \
+ ((_v2) == '4' ? 4 : \
+ ((_v2) == '5' ? 5 : \
+ ((_v2) == '6' ? 6 : \
+ ((_v2) == '7' ? 7 : \
+ ((_v2) == '8' ? 8 : \
+ ((_v2) == '9' ? 9 : \
+ ((_v2) == 'a' ? 10 : \
+ ((_v2) == 'b' ? 11 : \
+ ((_v2) == 'c' ? 12 : \
+ ((_v2) == 'd' ? 13 : \
+ ((_v2) == 'e' ? 14 : 15))))))))))))))); \
+}
+
+/*
* convprintable --
* Convert a printable-encoded string into a newly allocated string.
*
@@ -988,8 +1019,7 @@ db_load_convprintable(dbenv, instr, outstrp)
DB_ENV *dbenv;
char *instr, **outstrp;
{
- char c, *outstr;
- int e1, e2;
+ char *outstr;
/*
* Just malloc a string big enough for the whole input string;
@@ -1000,21 +1030,13 @@ db_load_convprintable(dbenv, instr, outstrp)
*outstrp = outstr;
- e1 = e2 = 0;
for ( ; *instr != '\0'; instr++)
if (*instr == '\\') {
if (*++instr == '\\') {
*outstr++ = '\\';
continue;
}
- c = db_load_digitize(dbenv, *instr, &e1) << 4;
- c |= db_load_digitize(dbenv, *++instr, &e2);
- if (e1 || e2) {
- db_load_badend(dbenv);
- return (EINVAL);
- }
-
- *outstr++ = c;
+ DIGITIZE(*outstr++, *instr, *++instr);
} else
*outstr++ = *instr;
@@ -1034,21 +1056,20 @@ db_load_dbt_rprint(dbenv, dbtp)
{
u_int32_t len;
u_int8_t *p;
- int c1, c2, e, escape, first;
+ int c1, c2, escape, first;
char buf[32];
++G(lineno);
first = 1;
- e = escape = 0;
+ escape = 0;
for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) {
if (c1 == EOF) {
if (len == 0) {
G(endofile) = G(endodata) = 1;
return (0);
}
- db_load_badend(dbenv);
- return (1);
+ return (db_load_badend(dbenv));
}
if (first) {
first = 0;
@@ -1057,10 +1078,8 @@ db_load_dbt_rprint(dbenv, dbtp)
buf[0] = c1;
if (fgets(buf + 1,
sizeof(buf) - 1, stdin) == NULL ||
- strcmp(buf, "DATA=END\n") != 0) {
- db_load_badend(dbenv);
- return (1);
- }
+ strcmp(buf, "DATA=END\n") != 0)
+ return (db_load_badend(dbenv));
G(endodata) = 1;
return (0);
}
@@ -1069,14 +1088,9 @@ db_load_dbt_rprint(dbenv, dbtp)
}
if (escape) {
if (c1 != '\\') {
- if ((c2 = getchar()) == EOF) {
- db_load_badend(dbenv);
- return (1);
- }
- c1 = db_load_digitize(dbenv,
- c1, &e) << 4 | db_load_digitize(dbenv, c2, &e);
- if (e)
- return (1);
+ if ((c2 = getchar()) == EOF)
+ return (db_load_badend(dbenv));
+ DIGITIZE(c1, c1, c2);
}
escape = 0;
} else
@@ -1112,21 +1126,19 @@ db_load_dbt_rdump(dbenv, dbtp)
{
u_int32_t len;
u_int8_t *p;
- int c1, c2, e, first;
+ int c1, c2, first;
char buf[32];
++G(lineno);
first = 1;
- e = 0;
for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) {
if (c1 == EOF) {
if (len == 0) {
G(endofile) = G(endodata) = 1;
return (0);
}
- db_load_badend(dbenv);
- return (1);
+ return (db_load_badend(dbenv));
}
if (first) {
first = 0;
@@ -1135,20 +1147,16 @@ db_load_dbt_rdump(dbenv, dbtp)
buf[0] = c1;
if (fgets(buf + 1,
sizeof(buf) - 1, stdin) == NULL ||
- strcmp(buf, "DATA=END\n") != 0) {
- db_load_badend(dbenv);
- return (1);
- }
+ strcmp(buf, "DATA=END\n") != 0)
+ return (db_load_badend(dbenv));
G(endodata) = 1;
return (0);
}
continue;
}
}
- if ((c2 = getchar()) == EOF) {
- db_load_badend(dbenv);
- return (1);
- }
+ if ((c2 = getchar()) == EOF)
+ return (db_load_badend(dbenv));
if (len >= dbtp->ulen - 10) {
dbtp->ulen *= 2;
if ((dbtp->data =
@@ -1159,9 +1167,7 @@ db_load_dbt_rdump(dbenv, dbtp)
p = (u_int8_t *)dbtp->data + len;
}
++len;
- *p++ = db_load_digitize(dbenv, c1, &e) << 4 | db_load_digitize(dbenv, c2, &e);
- if (e)
- return (1);
+ DIGITIZE(*p++, c1, c2);
}
dbtp->size = len;
@@ -1194,7 +1200,7 @@ db_load_dbt_rrecno(dbenv, dbtp, ishex)
}
if (buf[0] != ' ')
- goto bad;
+ goto err;
/*
* If we're expecting a hex key, do an in-place conversion
@@ -1210,22 +1216,22 @@ db_load_dbt_rrecno(dbenv, dbtp, ishex)
* end-of-string conditions.
*/
if (*q++ != '3')
- goto bad;
+ goto err;
if (*q == '\n' || *q == '\0')
- goto bad;
+ goto err;
*p++ = *q++;
}
*p = '\0';
}
- if (__db_getulong(dbenv, G(progname), buf + 1, 0, 0, &recno)) {
-bad: db_load_badend(dbenv);
- return (1);
- }
+ if (__db_getulong(dbenv, G(progname), buf + 1, 0, 0, &recno))
+ goto err;
*((db_recno_t *)dbtp->data) = recno;
dbtp->size = sizeof(db_recno_t);
return (0);
+
+err: return (db_load_badend(dbenv));
}
int
@@ -1243,42 +1249,6 @@ db_load_dbt_to_recno(dbenv, dbt, recnop)
}
/*
- * digitize --
- * Convert a character to an integer.
- */
-int
-db_load_digitize(dbenv, c, errorp)
- DB_ENV *dbenv;
- int c, *errorp;
-{
- switch (c) { /* Don't depend on ASCII ordering. */
- case '0': return (0);
- case '1': return (1);
- case '2': return (2);
- case '3': return (3);
- case '4': return (4);
- case '5': return (5);
- case '6': return (6);
- case '7': return (7);
- case '8': return (8);
- case '9': return (9);
- case 'a': return (10);
- case 'b': return (11);
- case 'c': return (12);
- case 'd': return (13);
- case 'e': return (14);
- case 'f': return (15);
- default: /* Not possible. */
- break;
- }
-
- dbenv->errx(dbenv, "unexpected hexadecimal value");
- *errorp = 1;
-
- return (0);
-}
-
-/*
* badnum --
* Display the bad number message.
*/
@@ -1294,11 +1264,12 @@ db_load_badnum(dbenv)
* badend --
* Display the bad end to input message.
*/
-void
+int
db_load_badend(dbenv)
DB_ENV *dbenv;
{
dbenv->errx(dbenv, "unexpected end of input data or key/data pair");
+ return (1);
}
/*
@@ -1308,17 +1279,16 @@ db_load_badend(dbenv)
int
db_load_usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_load [-nTV] [-c name=value] [-f file]",
+ (void)fprintf(stderr, "usage: %s %s\n\t%s\n", progname,
+ "[-nTV] [-c name=value] [-f file]",
"[-h home] [-P password] [-t btree | hash | recno | queue] db_file");
- (void)fprintf(stderr, "%s\n",
- "usage: db_load -r lsn | fileid [-h home] [-P password] db_file");
+ (void)fprintf(stderr, "usage: %s %s\n",
+ progname, "-r lsn | fileid [-h home] [-P password] db_file");
return (EXIT_FAILURE);
}
int
-db_load_version_check(progname)
- const char *progname;
+db_load_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_load/db_load20.wpj b/db/build_vxworks/db_load/db_load20.wpj
index f3d4cdf95..964e8734b 100755
--- a/db/build_vxworks/db_load/db_load20.wpj
+++ b/db/build_vxworks/db_load/db_load20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_load.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_load.c_dependencies
-
<END>
<BEGIN> FILE_db_load.c_objects
diff --git a/db/build_vxworks/db_load/db_load22.wpj b/db/build_vxworks/db_load/db_load22.wpj
index c04559c80..4560b786e 100755
--- a/db/build_vxworks/db_load/db_load22.wpj
+++ b/db/build_vxworks/db_load/db_load22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_printlog/db_printlog.c b/db/build_vxworks/db_printlog/db_printlog.c
index 3227f2e5e..eef054dac 100644
--- a/db/build_vxworks/db_printlog/db_printlog.c
+++ b/db/build_vxworks/db_printlog/db_printlog.c
@@ -1,29 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_printlog.c,v 11.64 2004/06/17 17:35:17 bostic Exp $
+ * $Id: db_printlog.c,v 12.20 2006/08/26 09:23:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
@@ -33,12 +18,27 @@ static const char copyright[] =
#include "dbinc/qam.h"
#include "dbinc/txn.h"
-int db_printlog_lsn_arg __P((const char *, char *, DB_LSN *));
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
+int db_printlog_env_init_print __P((DB_ENV *, u_int32_t,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int db_printlog_env_init_print_42 __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int db_printlog_env_init_print_43 __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int db_printlog_env_init_print_45 __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int db_printlog_lsn_arg __P((char *, DB_LSN *));
int db_printlog_main __P((int, char *[]));
int db_printlog_open_rep_db __P((DB_ENV *, DB **, DBC **));
int db_printlog_print_app_record __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
int db_printlog_usage __P((void));
-int db_printlog_version_check __P((const char *));
+int db_printlog_version_check __P((void));
+
+const char *progname;
int
db_printlog(args)
@@ -61,20 +61,24 @@ db_printlog_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_printlog";
DB *dbp;
DBC *dbc;
DBT data, keydbt;
DB_ENV *dbenv;
DB_LOGC *logc;
- DB_LSN key, start, stop;
+ DB_LSN key, start, stop, verslsn;
size_t dtabsize;
- u_int32_t logcflag;
+ u_int32_t logcflag, newversion, version;
int ch, cmp, exitval, nflag, rflag, ret, repflag;
int (**dtab) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
char *home, *passwd;
- if ((ret = db_printlog_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_printlog_version_check()) != 0)
return (ret);
dbp = NULL;
@@ -92,11 +96,13 @@ db_printlog_main(argc, argv)
while ((ch = getopt(argc, argv, "b:e:h:NP:rRV")) != EOF)
switch (ch) {
case 'b':
- if (db_printlog_lsn_arg(progname, optarg, &start))
+ /* Don't use getsubopt(3), not all systems have it. */
+ if (db_printlog_lsn_arg(optarg, &start))
return (db_printlog_usage());
break;
case 'e':
- if (db_printlog_lsn_arg(progname, optarg, &stop))
+ /* Don't use getsubopt(3), not all systems have it. */
+ if (db_printlog_lsn_arg(optarg, &stop))
return (db_printlog_usage());
break;
case 'h':
@@ -192,8 +198,7 @@ db_printlog_main(argc, argv)
dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
}
- } else if ((ret = dbenv->open(dbenv, home,
- DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
+ } else if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
(ret == DB_VERSION_MISMATCH ||
(ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
@@ -201,23 +206,6 @@ db_printlog_main(argc, argv)
goto shutdown;
}
- /* Initialize print callbacks. */
- if ((ret = __bam_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __crdel_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __db_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __dbreg_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __fop_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
-#ifdef HAVE_HASH
- (ret = __ham_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
-#endif
-#ifdef HAVE_QUEUE
- (ret = __qam_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
-#endif
- (ret = __txn_init_print(dbenv, &dtab, &dtabsize)) != 0) {
- dbenv->err(dbenv, ret, "callback: initialization");
- goto shutdown;
- }
-
/* Allocate a log cursor. */
if (repflag) {
if ((ret = db_printlog_open_rep_db(dbenv, &dbp, &dbc)) != 0)
@@ -236,6 +224,24 @@ db_printlog_main(argc, argv)
}
memset(&data, 0, sizeof(data));
+ /*
+ * If we're using the repflag, we're immediately initializing
+ * the print table. Use the current version. If we're printing
+ * the log then initialize version to 0 so that we get the
+ * correct version right away.
+ */
+ if (repflag)
+ version = DB_LOGVERSION;
+ else
+ version = 0;
+ ZERO_LSN(verslsn);
+
+ /* Initialize print callbacks if repflag. */
+ if (repflag &&
+ (ret = db_printlog_env_init_print(dbenv, version, &dtab, &dtabsize)) != 0) {
+ dbenv->err(dbenv, ret, "callback: initialization");
+ goto shutdown;
+ }
for (; !__db_util_interrupted(); logcflag = rflag ? DB_PREV : DB_NEXT) {
if (repflag) {
ret = dbc->c_get(dbc, &keydbt, &data, logcflag);
@@ -247,7 +253,7 @@ db_printlog_main(argc, argv)
if (ret == DB_NOTFOUND)
break;
dbenv->err(dbenv,
- ret, repflag ? "DB_LOGC->get" : "DBC->get");
+ ret, repflag ? "DBC->get" : "DB_LOGC->get");
goto shutdown;
}
@@ -255,10 +261,30 @@ db_printlog_main(argc, argv)
* We may have reached the end of the range we're displaying.
*/
if (!IS_ZERO_LSN(stop)) {
- cmp = log_compare(&key, &stop);
+ cmp = LOG_COMPARE(&key, &stop);
if ((rflag && cmp < 0) || (!rflag && cmp > 0))
break;
}
+ if (!repflag && key.file != verslsn.file) {
+ /*
+ * If our log file changed, we need to see if the
+ * version of the log file changed as well.
+ * If it changed, reset the print table.
+ */
+ if ((ret = logc->version(logc, &newversion, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_LOGC->version");
+ goto shutdown;
+ }
+ if (version != newversion) {
+ version = newversion;
+ if ((ret = db_printlog_env_init_print(dbenv, version,
+ &dtab, &dtabsize)) != 0) {
+ dbenv->err(dbenv, ret,
+ "callback: initialization");
+ goto shutdown;
+ }
+ }
+ }
ret = __db_dispatch(dbenv,
dtab, dtabsize, &data, &key, DB_TXN_PRINT, NULL);
@@ -309,17 +335,154 @@ shutdown: exitval = 1;
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
+/*
+ * env_init_print --
+ */
+int
+db_printlog_env_init_print(dbenv, version, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ u_int32_t version;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ /*
+ * We need to prime the print table with the current print
+ * functions. Then we overwrite only specific entries based on
+ * each previous version we support.
+ */
+ if ((ret = db_printlog_env_init_print_45(dbenv, dtabp, dtabsizep)) != 0)
+ return (ret);
+
+ switch (version) {
+ /*
+ * There are no log record/recovery differences between
+ * 4.4 and 4.5. The log version changed due to checksum.
+ */
+ case DB_LOGVERSION_45:
+ case DB_LOGVERSION_44:
+ ret = 0;
+ break;
+ case DB_LOGVERSION_43:
+ ret = db_printlog_env_init_print_43(dbenv, dtabp, dtabsizep);
+ break;
+ case DB_LOGVERSION_42:
+ ret = db_printlog_env_init_print_42(dbenv, dtabp, dtabsizep);
+ break;
+ default:
+ __db_errx(dbenv, "Unknown version %lu", (u_long)version);
+ ret = EINVAL;
+ break;
+ }
+ return (ret);
+}
+
+int
+db_printlog_env_init_print_42(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_relink_42_print, DB___db_relink_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_alloc_42_print, DB___db_pg_alloc_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_free_42_print, DB___db_pg_free_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_freedata_42_print, DB___db_pg_freedata_42)) != 0)
+ goto err;
+#if HAVE_HASH
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_metagroup_42_print, DB___ham_metagroup_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_groupalloc_42_print, DB___ham_groupalloc_42)) != 0)
+ goto err;
+#endif
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_ckp_42_print, DB___txn_ckp_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_42_print, DB___txn_regop_42)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
+int
+db_printlog_env_init_print_43(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_relink_43_print, DB___bam_relink_43)) != 0)
+ goto err;
+ /*
+ * We want to use the 4.2-based txn_regop record.
+ */
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_42_print, DB___txn_regop_42)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
+/*
+ * env_init_print_45 --
+ *
+ */
+int
+db_printlog_env_init_print_45(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __bam_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __crdel_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __db_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __dbreg_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __fop_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+#ifdef HAVE_HASH
+ if ((ret = __ham_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+#endif
+#ifdef HAVE_QUEUE
+ if ((ret = __qam_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+#endif
+ if ((ret = __txn_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
int
db_printlog_usage()
{
- fprintf(stderr, "usage: db_printlog %s\n",
+ fprintf(stderr, "usage: %s %s\n", progname,
"[-NrV] [-b file/offset] [-e file/offset] [-h home] [-P password]");
return (EXIT_FAILURE);
}
int
-db_printlog_version_check(progname)
- const char *progname;
+db_printlog_version_check()
{
int v_major, v_minor, v_patch;
@@ -346,7 +509,7 @@ db_printlog_print_app_record(dbenv, dbt, lsnp, op)
int ch;
u_int32_t i, rectype;
- DB_ASSERT(op == DB_TXN_PRINT);
+ DB_ASSERT(dbenv, op == DB_TXN_PRINT);
COMPQUIET(dbenv, NULL);
COMPQUIET(op, DB_TXN_PRINT);
@@ -393,7 +556,7 @@ db_printlog_open_rep_db(dbenv, dbpp, dbcp)
dbp = *dbpp;
if ((ret =
- dbp->open(dbp, NULL, "__db.rep.db", NULL, DB_BTREE, 0, 0)) != 0) {
+ dbp->open(dbp, NULL, REPDBNAME, NULL, DB_BTREE, 0, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open");
goto err;
}
@@ -415,31 +578,24 @@ err: if (*dbpp != NULL)
* Parse a LSN argument.
*/
int
-db_printlog_lsn_arg(progname, optarg, lsnp)
- const char *progname;
- char *optarg;
+db_printlog_lsn_arg(arg, lsnp)
+ char *arg;
DB_LSN *lsnp;
{
- char *p;
u_long uval;
+ char *p;
/*
* Expected format is: lsn.file/lsn.offset.
- *
- * Don't use getsubopt(3), some systems don't have it.
*/
- if ((p = strchr(optarg, '/')) == NULL)
+ if ((p = strchr(arg, '/')) == NULL)
return (1);
*p = '\0';
- if (__db_getulong(NULL, progname, optarg, 0, 0, &uval))
- return (1);
- if (uval > UINT32_MAX)
+ if (__db_getulong(NULL, progname, arg, 0, UINT32_MAX, &uval))
return (1);
lsnp->file = uval;
- if (__db_getulong(NULL, progname, p + 1, 0, 0, &uval))
- return (1);
- if (uval > UINT32_MAX)
+ if (__db_getulong(NULL, progname, p + 1, 0, UINT32_MAX, &uval))
return (1);
lsnp->offset = uval;
return (0);
diff --git a/db/build_vxworks/db_printlog/db_printlog20.wpj b/db/build_vxworks/db_printlog/db_printlog20.wpj
index ba418399f..af88d8f8e 100755
--- a/db/build_vxworks/db_printlog/db_printlog20.wpj
+++ b/db/build_vxworks/db_printlog/db_printlog20.wpj
@@ -134,13 +134,56 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_objects
+btree_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_objects
+crdel_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_objects
+db_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_tool
+C/C++ compiler
+<END>
<BEGIN> FILE_db_printlog.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_printlog.c_dependencies
-
<END>
<BEGIN> FILE_db_printlog.c_objects
@@ -151,8 +194,107 @@ db_printlog.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_objects
+dbreg_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_objects
+fileops_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_objects
+hash_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_objects
+qam_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_objects
+rep_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_objects
+txn_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> PROJECT_FILES
-$(PRJ_DIR)/db_printlog.c
+$(PRJ_DIR)/../../btree/btree_autop.c \
+$(PRJ_DIR)/../../db/crdel_autop.c \
+$(PRJ_DIR)/../../db/db_autop.c \
+$(PRJ_DIR)/db_printlog.c \
+$(PRJ_DIR)/../../dbreg/dbreg_autop.c \
+$(PRJ_DIR)/../../fileops/fileops_autop.c \
+$(PRJ_DIR)/../../hash/hash_autop.c \
+$(PRJ_DIR)/../../qam/qam_autop.c \
+$(PRJ_DIR)/../../rep/rep_autop.c \
+$(PRJ_DIR)/../../txn/txn_autop.c
<END>
<BEGIN> userComments
diff --git a/db/build_vxworks/db_printlog/db_printlog22.wpj b/db/build_vxworks/db_printlog/db_printlog22.wpj
index b3b31d757..1ef5d5a9f 100755
--- a/db/build_vxworks/db_printlog/db_printlog22.wpj
+++ b/db/build_vxworks/db_printlog/db_printlog22.wpj
@@ -168,13 +168,56 @@ PENTIUM2gnu
<BEGIN> CORE_INFO_VERSION
2.2
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_objects
+btree_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../btree/btree_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_objects
+crdel_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/crdel_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_objects
+db_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../db/db_autop.c_tool
+C/C++ compiler
+<END>
<BEGIN> FILE_db_printlog.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_printlog.c_dependencies
-
<END>
<BEGIN> FILE_db_printlog.c_objects
@@ -185,8 +228,107 @@ db_printlog.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_objects
+dbreg_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../dbreg/dbreg_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_objects
+fileops_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../fileops/fileops_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_objects
+hash_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../hash/hash_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_objects
+qam_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../qam/qam_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_objects
+rep_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../rep/rep_autop.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_dependencies
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_objects
+txn_autop.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../../txn/txn_autop.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> PROJECT_FILES
-$(PRJ_DIR)/db_printlog.c
+$(PRJ_DIR)/../../btree/btree_autop.c \
+$(PRJ_DIR)/../../db/crdel_autop.c \
+$(PRJ_DIR)/../../db/db_autop.c \
+$(PRJ_DIR)/db_printlog.c \
+$(PRJ_DIR)/../../dbreg/dbreg_autop.c \
+$(PRJ_DIR)/../../fileops/fileops_autop.c \
+$(PRJ_DIR)/../../hash/hash_autop.c \
+$(PRJ_DIR)/../../qam/qam_autop.c \
+$(PRJ_DIR)/../../rep/rep_autop.c \
+$(PRJ_DIR)/../../txn/txn_autop.c
<END>
<BEGIN> userComments
diff --git a/db/build_vxworks/db_recover/db_recover.c b/db/build_vxworks/db_recover/db_recover.c
index cea04a115..874f31209 100644
--- a/db/build_vxworks/db_recover/db_recover.c
+++ b/db/build_vxworks/db_recover/db_recover.c
@@ -1,44 +1,27 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_recover.c,v 11.41 2004/01/28 03:36:00 bostic Exp $
+ * $Id: db_recover.c,v 12.9 2006/08/26 09:23:13 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-
int db_recover_main __P((int, char *[]));
-int db_recover_read_timestamp __P((const char *, char *, time_t *));
+int db_recover_read_timestamp __P((char *, time_t *));
int db_recover_usage __P((void));
-int db_recover_version_check __P((const char *));
+int db_recover_version_check __P((void));
+
+const char *progname;
int
db_recover(args)
@@ -61,14 +44,18 @@ db_recover_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_recover";
DB_ENV *dbenv;
time_t timestamp;
u_int32_t flags;
int ch, exitval, fatal_recover, ret, retain_env, verbose;
char *home, *passwd;
- if ((ret = db_recover_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_recover_version_check()) != 0)
return (ret);
home = passwd = NULL;
@@ -96,8 +83,7 @@ db_recover_main(argc, argv)
}
break;
case 't':
- if ((ret =
- db_recover_read_timestamp(progname, optarg, &timestamp)) != 0)
+ if ((ret = db_recover_read_timestamp(optarg, &timestamp)) != 0)
return (ret);
break;
case 'V':
@@ -157,10 +143,10 @@ db_recover_main(argc, argv)
* certainly use DB_CONFIG files in the directory.
*/
flags = 0;
- LF_SET(DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
+ LF_SET(DB_CREATE | DB_INIT_LOG |
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);
+ LF_SET(retain_env ? DB_INIT_LOCK : DB_PRIVATE);
if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0) {
dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
@@ -219,8 +205,7 @@ shutdown: exitval = 1;
* SUCH DAMAGE.
*/
int
-db_recover_read_timestamp(progname, arg, timep)
- const char *progname;
+db_recover_read_timestamp(arg, timep)
char *arg;
time_t *timep;
{
@@ -291,14 +276,13 @@ terr: fprintf(stderr,
int
db_recover_usage()
{
- (void)fprintf(stderr, "%s\n",
-"usage: db_recover [-ceVv] [-h home] [-P password] [-t [[CC]YY]MMDDhhmm[.SS]]");
+ (void)fprintf(stderr, "usage: %s %s\n", progname,
+ "[-ceVv] [-h home] [-P password] [-t [[CC]YY]MMDDhhmm[.SS]]");
return (EXIT_FAILURE);
}
int
-db_recover_version_check(progname)
- const char *progname;
+db_recover_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_recover/db_recover20.wpj b/db/build_vxworks/db_recover/db_recover20.wpj
index d201c8fbe..f3e5ff312 100755
--- a/db/build_vxworks/db_recover/db_recover20.wpj
+++ b/db/build_vxworks/db_recover/db_recover20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_recover.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_recover.c_dependencies
-
<END>
<BEGIN> FILE_db_recover.c_objects
diff --git a/db/build_vxworks/db_recover/db_recover22.wpj b/db/build_vxworks/db_recover/db_recover22.wpj
index 88e2401ff..2f01f5899 100755
--- a/db/build_vxworks/db_recover/db_recover22.wpj
+++ b/db/build_vxworks/db_recover/db_recover22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_stat/db_stat.c b/db/build_vxworks/db_stat/db_stat.c
index 3b004fa19..be6256d9c 100644
--- a/db/build_vxworks/db_stat/db_stat.c
+++ b/db/build_vxworks/db_stat/db_stat.c
@@ -1,50 +1,31 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_stat.c,v 11.158 2004/07/15 18:26:48 ubell Exp $
+ * $Id: db_stat.c,v 12.14 2006/08/26 09:23:19 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+#include "dbinc/db_page.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-#include "dbinc/db_page.h"
-#include "dbinc/txn.h"
-
typedef enum { T_NOTSET,
- T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_REP, T_TXN } test_t;
+ T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_MUTEX, T_REP, T_TXN } test_t;
int db_stat_db_init __P((DB_ENV *, char *, test_t, u_int32_t, int *));
int db_stat_main __P((int, char *[]));
int db_stat_usage __P((void));
-int db_stat_version_check __P((const char *));
+int db_stat_version_check __P((void));
+
+const char *progname;
int
db_stat(args)
@@ -67,29 +48,32 @@ db_stat_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_stat";
DB_ENV *dbenv;
- DB_BTREE_STAT *sp;
- DB *alt_dbp, *dbp;
+ DB *dbp;
test_t ttype;
- u_int32_t cache, env_flags, fast, flags;
+ u_int32_t cache, flags;
int ch, exitval;
int nflag, private, resize, ret;
char *db, *home, *p, *passwd, *subdb;
- if ((ret = db_stat_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_stat_version_check()) != 0)
return (ret);
dbenv = NULL;
dbp = NULL;
ttype = T_NOTSET;
cache = MEGABYTE;
- exitval = fast = flags = nflag = private = 0;
+ exitval = flags = nflag = private = 0;
db = home = passwd = subdb = NULL;
- env_flags = 0;
__db_getopt_reset = 1;
- while ((ch = getopt(argc, argv, "C:cd:Eefh:L:lM:mNP:R:rs:tVZ")) != EOF)
+ while ((ch = getopt(argc,
+ argv, "C:cd:Eefh:L:lM:mNP:R:rs:tVxX:Z")) != EOF)
switch (ch) {
case 'C': case 'c':
if (ttype != T_NOTSET && ttype != T_LOCK)
@@ -134,7 +118,10 @@ db_stat_main(argc, argv)
LF_SET(DB_STAT_ALL);
break;
case 'f':
- fast = DB_FAST_STAT;
+ if (ttype != T_NOTSET && ttype != T_DB)
+ goto argcombo;
+ ttype = T_DB;
+ LF_SET(DB_FAST_STAT);
break;
case 'h':
home = optarg;
@@ -209,13 +196,27 @@ db_stat_main(argc, argv)
argcombo: fprintf(stderr,
"%s: illegal option combination\n",
progname);
- return (EXIT_FAILURE);
+ return (db_stat_usage());
}
ttype = T_TXN;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
+ case 'X': case 'x':
+ if (ttype != T_NOTSET && ttype != T_MUTEX)
+ goto argcombo;
+ ttype = T_MUTEX;
+ if (ch != 'x')
+ for (p = optarg; *p; ++p)
+ switch (*p) {
+ case 'A':
+ LF_SET(DB_STAT_ALL);
+ break;
+ default:
+ return (db_stat_usage());
+ }
+ break;
case 'Z':
LF_SET(DB_STAT_CLEAR);
break;
@@ -231,18 +232,16 @@ argcombo: fprintf(stderr,
if (db == NULL)
return (db_stat_usage());
break;
- case T_NOTSET:
- return (db_stat_usage());
- /* NOTREACHED */
case T_ENV:
case T_LOCK:
case T_LOG:
case T_MPOOL:
+ case T_MUTEX:
case T_REP:
case T_TXN:
- if (fast != 0)
- return (db_stat_usage());
break;
+ case T_NOTSET:
+ return (db_stat_usage());
}
/* Handle possible interruptions. */
@@ -252,7 +251,7 @@ argcombo: fprintf(stderr,
* Create an environment object and initialize it for error
* reporting.
*/
-retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
+retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto err;
@@ -284,17 +283,26 @@ retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
switch (ttype) {
case T_DB:
- if (flags != 0)
- return (db_stat_usage());
-
/* Create the DB object and open the file. */
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
goto err;
}
- if ((ret = dbp->open(dbp,
- NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ /*
+ * We open the database for writing so we can update the cached
+ * statistics, but it's OK to fail, we can open read-only and
+ * proceed.
+ *
+ * Turn off error messages for now -- we can't open lots of
+ * databases read-write (for example, master databases and
+ * hash databases for which we don't know the hash function).
+ */
+ dbenv->set_errfile(dbenv, NULL);
+ ret = dbp->open(dbp, NULL, db, subdb, DB_UNKNOWN, 0, 0);
+ dbenv->set_errfile(dbenv, stderr);
+ if (ret != 0 && (ret = dbp->open(
+ dbp, NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open: %s", db);
goto err;
}
@@ -313,40 +321,6 @@ retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
}
}
- /*
- * See if we can open this db read/write to update counts.
- * If its a master-db then we cannot. So check to see,
- * if its btree then it might be.
- */
- if (subdb == NULL && dbp->type == DB_BTREE &&
- (ret = dbp->stat(dbp, NULL, &sp, DB_FAST_STAT)) != 0) {
- dbenv->err(dbenv, ret, "DB->stat");
- goto err;
- }
-
- if (subdb != NULL ||
- dbp->type != DB_BTREE ||
- (sp->bt_metaflags & BTM_SUBDB) == 0) {
- if ((ret = db_create(&alt_dbp, dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "db_create");
- goto err;
- }
- if ((ret = dbp->open(alt_dbp, NULL,
- db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
- if (subdb == NULL)
- dbenv->err(dbenv,
- ret, "DB->open: %s", db);
- else
- dbenv->err(dbenv,
- ret, "DB->open: %s:%s", db, subdb);
- (void)alt_dbp->close(alt_dbp, DB_NOSYNC);
- goto err;
- }
-
- (void)dbp->close(dbp, DB_NOSYNC);
- dbp = alt_dbp;
- }
-
if (dbp->stat_print(dbp, flags))
goto err;
break;
@@ -366,6 +340,10 @@ retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
if (dbenv->memp_stat_print(dbenv, flags))
goto err;
break;
+ case T_MUTEX:
+ if (dbenv->mutex_stat_print(dbenv, flags))
+ goto err;
+ break;
case T_REP:
if (dbenv->rep_stat_print(dbenv, flags))
goto err;
@@ -427,8 +405,7 @@ db_stat_db_init(dbenv, home, ttype, cache, is_private)
* error, I think.
*/
*is_private = 0;
- if ((ret =
- dbenv->open(dbenv, home, DB_JOINENV | DB_USE_ENVIRON, 0)) == 0)
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) == 0)
return (0);
if (ret == DB_VERSION_MISMATCH)
goto err;
@@ -471,17 +448,16 @@ err: dbenv->err(dbenv, ret, "DB_ENV->open");
int
db_stat_usage()
{
- fprintf(stderr, "usage: db_stat %s\n",
+ fprintf(stderr, "usage: %s %s\n", progname,
"-d file [-fN] [-h home] [-P password] [-s database]");
- fprintf(stderr, "usage: db_stat %s\n\t%s\n",
- "[-cEelmNrtVZ] [-C Aclop]",
- "[-h home] [-L A] [-M A] [-P password] [-R A]");
+ fprintf(stderr, "usage: %s %s\n\t%s\n", progname,
+ "[-cEelmNrtVxZ] [-C Aclop]",
+ "[-h home] [-L A] [-M A] [-P password] [-R A] [-X A]");
return (EXIT_FAILURE);
}
int
-db_stat_version_check(progname)
- const char *progname;
+db_stat_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_stat/db_stat20.wpj b/db/build_vxworks/db_stat/db_stat20.wpj
index 323cb1767..e3122f65d 100755
--- a/db/build_vxworks/db_stat/db_stat20.wpj
+++ b/db/build_vxworks/db_stat/db_stat20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_stat.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_stat.c_dependencies
-
<END>
<BEGIN> FILE_db_stat.c_objects
diff --git a/db/build_vxworks/db_stat/db_stat22.wpj b/db/build_vxworks/db_stat/db_stat22.wpj
index 0b941a4b0..c18334646 100755
--- a/db/build_vxworks/db_stat/db_stat22.wpj
+++ b/db/build_vxworks/db_stat/db_stat22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_upgrade/db_upgrade.c b/db/build_vxworks/db_upgrade/db_upgrade.c
index cfcb1cffc..e53d571c6 100644
--- a/db/build_vxworks/db_upgrade/db_upgrade.c
+++ b/db/build_vxworks/db_upgrade/db_upgrade.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_upgrade.c,v 1.37 2004/06/10 01:00:09 bostic Exp $
+ * $Id: db_upgrade.c,v 12.9 2006/08/26 09:23:22 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include "db_int.h"
-
int db_upgrade_main __P((int, char *[]));
int db_upgrade_usage __P((void));
-int db_upgrade_version_check __P((const char *));
+int db_upgrade_version_check __P((void));
+
+const char *progname;
int
db_upgrade(args)
@@ -50,22 +43,26 @@ db_upgrade_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_upgrade";
DB *dbp;
DB_ENV *dbenv;
u_int32_t flags;
- int ch, exitval, nflag, ret, t_ret;
+ int ch, exitval, nflag, ret, t_ret, verbose;
char *home, *passwd;
- if ((ret = db_upgrade_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_upgrade_version_check()) != 0)
return (ret);
dbenv = NULL;
- flags = nflag = 0;
+ flags = nflag = verbose = 0;
exitval = 0;
home = passwd = NULL;
__db_getopt_reset = 1;
- while ((ch = getopt(argc, argv, "h:NP:sV")) != EOF)
+ while ((ch = getopt(argc, argv, "h:NP:sVv")) != EOF)
switch (ch) {
case 'h':
home = optarg;
@@ -88,6 +85,9 @@ db_upgrade_main(argc, argv)
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
+ case 'v':
+ verbose = 1;
+ break;
case '?':
default:
return (db_upgrade_usage());
@@ -135,8 +135,7 @@ db_upgrade_main(argc, argv)
* If attaching to a pre-existing environment fails, create a
* private one and try again.
*/
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
(ret == DB_VERSION_MISMATCH ||
(ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON,
@@ -161,6 +160,13 @@ db_upgrade_main(argc, argv)
}
if (ret != 0)
goto shutdown;
+ /*
+ * People get concerned if they don't see a success message.
+ * If verbose is set, give them one.
+ */
+ if (verbose)
+ printf("%s: %s upgraded successfully\n",
+ progname, argv[0]);
}
if (0) {
@@ -184,14 +190,13 @@ shutdown: exitval = 1;
int
db_upgrade_usage()
{
- fprintf(stderr, "%s\n",
- "usage: db_upgrade [-NsV] [-h home] [-P password] db_file ...");
+ fprintf(stderr, "usage: %s %s\n", progname,
+ "[-NsVv] [-h home] [-P password] db_file ...");
return (EXIT_FAILURE);
}
int
-db_upgrade_version_check(progname)
- const char *progname;
+db_upgrade_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_upgrade/db_upgrade20.wpj b/db/build_vxworks/db_upgrade/db_upgrade20.wpj
index 325910f34..c184e4035 100755
--- a/db/build_vxworks/db_upgrade/db_upgrade20.wpj
+++ b/db/build_vxworks/db_upgrade/db_upgrade20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_upgrade.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_upgrade.c_dependencies
-
<END>
<BEGIN> FILE_db_upgrade.c_objects
diff --git a/db/build_vxworks/db_upgrade/db_upgrade22.wpj b/db/build_vxworks/db_upgrade/db_upgrade22.wpj
index d042b2e0e..700df6980 100755
--- a/db/build_vxworks/db_upgrade/db_upgrade22.wpj
+++ b/db/build_vxworks/db_upgrade/db_upgrade22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/db_verify/db_verify.c b/db/build_vxworks/db_verify/db_verify.c
index f00e658b2..68751ac01 100644
--- a/db/build_vxworks/db_verify/db_verify.c
+++ b/db/build_vxworks/db_verify/db_verify.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_verify.c,v 1.49 2004/08/01 00:21:58 bostic Exp $
+ * $Id: db_verify.c,v 12.8 2006/08/26 09:23:23 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include "db_int.h"
-
int db_verify_main __P((int, char *[]));
int db_verify_usage __P((void));
-int db_verify_version_check __P((const char *));
+int db_verify_version_check __P((void));
+
+const char *progname;
int
db_verify(args)
@@ -50,7 +43,6 @@ db_verify_main(argc, argv)
{
extern char *optarg;
extern int optind, __db_getopt_reset;
- const char *progname = "db_verify";
DB *dbp, *dbp1;
DB_ENV *dbenv;
u_int32_t flags, cache;
@@ -58,7 +50,12 @@ db_verify_main(argc, argv)
int quiet, resize, ret;
char *home, *passwd;
- if ((ret = db_verify_version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = db_verify_version_check()) != 0)
return (ret);
dbenv = NULL;
@@ -165,12 +162,24 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
}
}
+ /*
+ * Find out if we have a transactional environment so that we can
+ * make sure that we don't open the verify database with logging
+ * enabled.
+ */
for (; !__db_util_interrupted() && argv[0] != NULL; ++argv) {
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "%s: db_create", progname);
goto shutdown;
}
+ if (TXN_ON(dbenv) &&
+ (ret = dbp->set_flags(dbp, DB_TXN_NOT_DURABLE)) != 0) {
+ dbenv->err(
+ dbenv, ret, "%s: db_set_flags", progname);
+ goto shutdown;
+ }
+
/*
* We create a 2nd dbp to this database to get its pagesize
* because the dbp we're using for verify cannot be opened.
@@ -186,6 +195,13 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
goto shutdown;
}
+ if (TXN_ON(dbenv) && (ret =
+ dbp1->set_flags(dbp1, DB_TXN_NOT_DURABLE)) != 0) {
+ dbenv->err(
+ dbenv, ret, "%s: db_set_flags", progname);
+ goto shutdown;
+ }
+
ret = dbp1->open(dbp1,
NULL, argv[0], NULL, DB_UNKNOWN, DB_RDONLY, 0);
@@ -245,14 +261,13 @@ shutdown: exitval = 1;
int
db_verify_usage()
{
- fprintf(stderr, "%s\n",
- "usage: db_verify [-NoqV] [-h home] [-P password] db_file ...");
+ fprintf(stderr, "usage: %s %s\n", progname,
+ "[-NoqV] [-h home] [-P password] db_file ...");
return (EXIT_FAILURE);
}
int
-db_verify_version_check(progname)
- const char *progname;
+db_verify_version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/build_vxworks/db_verify/db_verify20.wpj b/db/build_vxworks/db_verify/db_verify20.wpj
index 14b35c900..fd9737b77 100755
--- a/db/build_vxworks/db_verify/db_verify20.wpj
+++ b/db/build_vxworks/db_verify/db_verify20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_db_verify.c_dependDone
FALSE
<END>
<BEGIN> FILE_db_verify.c_dependencies
-
<END>
<BEGIN> FILE_db_verify.c_objects
diff --git a/db/build_vxworks/db_verify/db_verify22.wpj b/db/build_vxworks/db_verify/db_verify22.wpj
index 1a440dbee..57ad2106f 100755
--- a/db/build_vxworks/db_verify/db_verify22.wpj
+++ b/db/build_vxworks/db_verify/db_verify22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_vxworks/dbdemo/dbdemo.c b/db/build_vxworks/dbdemo/dbdemo.c
index 993a51a36..4424b24d6 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_access.c,v 11.25 2004/09/17 22:00:28 mjc Exp $
+ * $Id: ex_access.c,v 12.3 2006/08/24 14:45:41 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/build_vxworks/dbdemo/dbdemo20.wpj b/db/build_vxworks/dbdemo/dbdemo20.wpj
index 1c996e893..04e5edd5a 100755
--- a/db/build_vxworks/dbdemo/dbdemo20.wpj
+++ b/db/build_vxworks/dbdemo/dbdemo20.wpj
@@ -134,13 +134,11 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<END>
-
<BEGIN> FILE_dbdemo.c_dependDone
FALSE
<END>
<BEGIN> FILE_dbdemo.c_dependencies
-
<END>
<BEGIN> FILE_dbdemo.c_objects
diff --git a/db/build_vxworks/dbdemo/dbdemo22.wpj b/db/build_vxworks/dbdemo/dbdemo22.wpj
index e482480df..d2b15f85a 100755
--- a/db/build_vxworks/dbdemo/dbdemo22.wpj
+++ b/db/build_vxworks/dbdemo/dbdemo22.wpj
@@ -168,13 +168,11 @@ PENTIUM2gnu
<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
diff --git a/db/build_windows/Berkeley_DB.dsw b/db/build_windows/Berkeley_DB.dsw
new file mode 100644
index 000000000..0f2c7777d
--- /dev/null
+++ b/db/build_windows/Berkeley_DB.dsw
@@ -0,0 +1,818 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "build_all"=.\build_all.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_archive
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_checkpoint
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_deadlock
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_dump
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_hotbackup
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_load
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_printlog
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_recover
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_stat
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_upgrade
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_verify
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_static
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_access
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_btrec
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_env
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_lock
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_mpool
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_sequence
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_tpcb
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name example_database_load
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name example_database_read
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_access
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_btrec
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_env
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_lock
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_mpool
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_repquote
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_sequence
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_tpcb
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_example_database_load
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_example_database_read
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_rep_base
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_rep_mgr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_txnguide
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ex_txnguide_inmem
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_txnguide
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name excxx_txnguide_inmem
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_archive"=.\db_archive.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_checkpoint"=.\db_checkpoint.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_deadlock"=.\db_deadlock.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_dll"=.\db_dll.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "db_dump"=.\db_dump.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_hotbackup"=.\db_hotbackup.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_java"=.\db_java.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_load"=.\db_load.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_printlog"=.\db_printlog.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_recover"=.\db_recover.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_small"=.\db_small.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "db_stat"=.\db_stat.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ 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>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_test"=.\db_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name build_all
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_tcl
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_upgrade"=.\db_upgrade.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_verify"=.\db_verify.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_access"=.\ex_access.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_btrec"=.\ex_btrec.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_csvcode"=.\ex_csvcode.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_csvload"=.\ex_csvload.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 ex_csvcode
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_csvquery"=.\ex_csvquery.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 ex_csvcode
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_env"=.\ex_env.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_lock"=.\ex_lock.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_mpool"=.\ex_mpool.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_rep_base"=.\ex_rep_base.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_rep_mgr"=.\ex_rep_mgr.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_sequence"=.\ex_sequence.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_tpcb"=.\ex_tpcb.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_txnguide"=.\ex_txnguide.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_txnguide_inmem"=.\ex_txnguide_inmem.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "example_database_load"=.\example_database_load.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "example_database_read"=.\example_database_read.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_access"=.\excxx_access.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_btrec"=.\excxx_btrec.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_env"=.\excxx_env.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_example_database_load"=.\excxx_example_database_load.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_example_database_read"=.\excxx_example_database_read.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_lock"=.\excxx_lock.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_mpool"=.\excxx_mpool.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_repquote"=.\excxx_repquote.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_sequence"=.\excxx_sequence.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_tpcb"=.\excxx_tpcb.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_txnguide"=.\excxx_txnguide.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "excxx_txnguide_inmem"=.\excxx_txnguide_inmem.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name db_dll
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/db/build_windows/app_dsp.src b/db/build_windows/app_dsp.src
new file mode 100644
index 000000000..0ae7afaa9
--- /dev/null
+++ b/db/build_windows/app_dsp.src
@@ -0,0 +1,261 @@
+# 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
+!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"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - x64 Release IA64" (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 "@bin_rel_dest@"
+# PROP BASE Intermediate_Dir "Release/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@bin_rel_dest@"
+# PROP Intermediate_Dir "Release/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /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_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"@lib_rel_dest@"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@bin_debug_dest@"
+# PROP BASE Intermediate_Dir "Debug/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@bin_debug_dest@"
+# PROP Intermediate_Dir "Debug/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /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_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"@lib_debug_dest@"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@bin_debug_dest@_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@bin_debug_dest@_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/@project_name@"
+# 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" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /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 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"@lib_debug_dest@_ASCII"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@bin_rel_dest@_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@bin_rel_dest@_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /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 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"@lib_rel_dest@_ASCII"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@bin_debug_dest@_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@bin_debug_dest@_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /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 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"@lib_debug_dest@_AMD64"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@bin_rel_dest@_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@bin_rel_dest@_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /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 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"@lib_rel_dest@_AMD64"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@bin_debug_dest@_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@bin_debug_dest@_IA64"
+# PROP Intermediate_Dir "Debug_IA64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /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 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"@lib_debug_dest@_IA64"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@bin_rel_dest@_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@bin_rel_dest@_IA64"
+# PROP Intermediate_Dir "Release_IA64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" @extra_cppflags@ /Wp64 /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 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"@lib_rel_dest@_IA64"
+@POST_BUILD@
+
+!ENDIF
+
+# Begin Target
+
+# Name "@project_name@ - Win32 Release"
+# Name "@project_name@ - Win32 Debug"
+# Name "@project_name@ - Win32 ASCII Debug"
+# Name "@project_name@ - Win32 ASCII Release"
+# Name "@project_name@ - x64 Debug AMD64"
+# Name "@project_name@ - x64 Release AMD64"
+# Name "@project_name@ - x64 Debug IA64"
+# Name "@project_name@ - x64 Release IA64"
+@SOURCE_FILES@
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/build_all.dsp b/db/build_windows/build_all.dsp
new file mode 100644
index 000000000..fdd922c67
--- /dev/null
+++ b/db/build_windows/build_all.dsp
@@ -0,0 +1,185 @@
+# Microsoft Developer Studio Project File - Name="build_all" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=build_all - Win32 Debug
+!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 "build_all.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 "build_all.mak" CFG="build_all - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "build_all - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - Win32 ASCII Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - Win32 ASCII Release" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - x64 Debug AMD64" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - x64 Release AMD64" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - x64 Debug IA64" (based on "Win32 (x86) External Target")
+!MESSAGE "build_all - x64 Release IA64" (based on "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "build_all - 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 Cmd_Line "echo DB Release version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - 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 Cmd_Line "echo DB Debug version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII"
+# PROP BASE Cmd_Line "echo DB Debug version built."
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII"
+# PROP Cmd_Line "echo DB Debug version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII"
+# PROP BASE Cmd_Line "echo DB Release version built."
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII"
+# PROP Cmd_Line "echo DB Release version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/build_all"
+# PROP BASE Cmd_Line "echo DB Debug version built."
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/build_all"
+# PROP Cmd_Line "echo DB Debug version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/build_all"
+# PROP BASE Cmd_Line "echo DB Release version built."
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/build_all"
+# PROP Cmd_Line "echo DB Release version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64"
+# PROP BASE Cmd_Line "echo DB Debug version built."
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64"
+# PROP Cmd_Line "echo DB Debug version built."
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "build_all - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64"
+# PROP BASE Cmd_Line "echo DB Release version built."
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64"
+# PROP Cmd_Line "echo DB Release version built."
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "build_all - Win32 Release"
+# Name "build_all - Win32 Debug"
+# Name "build_all - Win32 ASCII Debug"
+# Name "build_all - Win32 ASCII Release"
+# Name "build_all - x64 Debug AMD64"
+# Name "build_all - x64 Release AMD64"
+# Name "build_all - x64 Debug IA64"
+# Name "build_all - x64 Release IA64"
+
+!IF "$(CFG)" == "build_all - Win32 Release"
+
+!ELSEIF "$(CFG)" == "build_all - Win32 Debug"
+
+!ELSEIF "$(CFG)" == "build_all - Win32 ASCII Debug"
+
+!ELSEIF "$(CFG)" == "build_all - Win32 ASCII Release"
+
+!ELSEIF "$(CFG)" == "build_all - x64 Debug AMD64"
+
+!ELSEIF "$(CFG)" == "build_all - x64 Release AMD64"
+
+!ELSEIF "$(CFG)" == "build_all - x64 Debug IA64"
+
+!ELSEIF "$(CFG)" == "build_all - x64 Release IA64"
+
+!ENDIF
+
+# End Target
+# End Project
diff --git a/db/build_windows/clib_port.h b/db/build_windows/clib_port.h
new file mode 100644
index 000000000..cfefbb37d
--- /dev/null
+++ b/db/build_windows/clib_port.h
@@ -0,0 +1,97 @@
+/*
+ * Exit success/failure macros.
+ */
+#ifndef HAVE_EXIT_SUCCESS
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+#endif
+
+/*
+ * 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.
+ */
+#ifndef HAVE_ATOI
+#define atoi __db_Catoi
+#endif
+#ifndef HAVE_ATOL
+#define atol __db_Catol
+#endif
+#ifndef HAVE_GETADDRINFO
+#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
+#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
+#endif
+#ifndef HAVE_GETCWD
+#define getcwd __db_Cgetcwd
+#endif
+#ifndef HAVE_GETOPT
+#define getopt __db_Cgetopt
+#define optarg __db_Coptarg
+#define opterr __db_Copterr
+#define optind __db_Coptind
+#define optopt __db_Coptopt
+#define optreset __db_Coptreset
+#endif
+#ifndef HAVE_ISSPACE
+#define isspace __db_Cisspace
+#endif
+#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_PRINTF
+#define printf __db_Cprintf
+#define fprintf __db_Cfprintf
+#endif
+#ifndef HAVE_RAISE
+#define raise __db_Craise
+#endif
+#ifndef HAVE_RAND
+#define rand __db_Crand
+#define srand __db_Csrand
+#endif
+#ifndef HAVE_SNPRINTF
+#define snprintf __db_Csnprintf
+#endif
+#ifndef HAVE_STRCASECMP
+#define strcasecmp __db_Cstrcasecmp
+#define strncasecmp __db_Cstrncasecmp
+#endif
+#ifndef HAVE_STRCAT
+#define strcat __db_Cstrcat
+#endif
+#ifndef HAVE_STRCHR
+#define strchr __db_Cstrchr
+#endif
+#ifndef HAVE_STRDUP
+#define strdup __db_Cstrdup
+#endif
+#ifndef HAVE_STRERROR
+#define strerror __db_Cstrerror
+#endif
+#ifndef HAVE_STRNCAT
+#define strncat __db_Cstrncat
+#endif
+#ifndef HAVE_STRNCMP
+#define strncmp __db_Cstrncmp
+#endif
+#ifndef HAVE_STRRCHR
+#define strrchr __db_Cstrrchr
+#endif
+#ifndef HAVE_STRSEP
+#define strsep __db_Cstrsep
+#endif
+#ifndef HAVE_STRTOL
+#define strtol __db_Cstrtol
+#endif
+#ifndef HAVE_STRTOUL
+#define strtoul __db_Cstrtoul
+#endif
+#ifndef HAVE_VSNPRINTF
+#define vsnprintf __db_Cvsnprintf
+#endif
diff --git a/db/build_windows/db.h b/db/build_windows/db.h
new file mode 100644
index 000000000..ab0fdf058
--- /dev/null
+++ b/db/build_windows/db.h
@@ -0,0 +1,2573 @@
+/* DO NOT EDIT: automatically built by dist/s_windows. */
+/*
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db.in,v 12.108 2006/09/13 14:53:37 mjc 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_
+#define _DB_H_
+
+#ifndef __NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#include <stddef.h>
+#include <stdio.h>
+#endif
+
+/*
+ * Turn off inappropriate compiler warnings
+ */
+#ifdef _MSC_VER
+/*
+ * This warning is explicitly disabled in Visual C++ by default.
+ * It is necessary to explicitly enable the /Wall flag to generate this
+ * warning.
+ * Since this is a shared include file it should compile without warnings
+ * at the highest warning level, so third party applications can use
+ * higher warning levels cleanly.
+ *
+ * 4820: 'bytes' bytes padding added after member 'member'
+ * The type and order of elements caused the compiler to
+ * add padding to the end of a struct.
+ */
+#pragma warning(push)
+#pragma warning(disable: 4820)
+#endif /* _MSC_VER */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+#undef __P
+#define __P(protos) protos
+
+/*
+ * Berkeley DB version information.
+ */
+#define DB_VERSION_MAJOR 4
+#define DB_VERSION_MINOR 5
+#define DB_VERSION_PATCH 20
+#define DB_VERSION_STRING "Berkeley DB 4.5.20: (September 20, 2006)"
+
+/*
+ * !!!
+ * 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
+ * files the user is using.
+ *
+ * !!!
+ * We also provide the standard u_int, u_long etc., if they're not provided
+ * by the system.
+ */
+#ifndef __BIT_TYPES_DEFINED__
+#define __BIT_TYPES_DEFINED__
+typedef unsigned char u_int8_t;
+typedef short int16_t;
+typedef unsigned short u_int16_t;
+typedef int int32_t;
+typedef unsigned int u_int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 u_int64_t;
+#endif
+
+#ifndef _WINSOCKAPI_
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+#endif
+#ifdef _WIN64
+typedef int64_t ssize_t;
+#else
+typedef int32_t ssize_t;
+#endif
+
+/*
+ * uintmax_t --
+ * Largest unsigned type, used to align structures in memory. We don't store
+ * floating point types in structures, so integral types should be sufficient
+ * (and we don't have to worry about systems that store floats in other than
+ * power-of-2 numbers of bytes). Additionally this fixes compilers that rewrite
+ * structure assignments and ANSI C memcpy calls to be in-line instructions
+ * that happen to require alignment.
+ *
+ * uintptr_t --
+ * Unsigned type that's the same size as a pointer. There are places where
+ * DB modifies pointers by discarding the bottom bits to guarantee alignment.
+ * We can't use uintmax_t, it may be larger than the pointer, and compilers
+ * get upset about that. So far we haven't run on any machine where there's
+ * no unsigned type the same size as a pointer -- here's hoping.
+ */
+typedef u_int64_t uintmax_t;
+#ifdef _WIN64
+typedef u_int64_t uintptr_t;
+#else
+typedef u_int32_t uintptr_t;
+#endif
+
+/*
+ * Sequences are only available on machines with 64-bit integral types.
+ */
+typedef int64_t db_seq_t;
+
+/* Thread and process identification. */
+typedef u_int32_t db_threadid_t;
+typedef int pid_t;
+
+/* 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 */
+
+typedef u_int32_t db_recno_t; /* Record number type. */
+#define DB_MAX_RECORDS 0xffffffff /* >= # of records in a tree */
+
+typedef u_int32_t db_timeout_t; /* Type of a timeout. */
+
+/*
+ * Region offsets are the difference between a pointer in a region and the
+ * region's base address. With private environments, both addresses are the
+ * result of calling malloc, and we can't assume anything about what malloc
+ * will return, so region offsets have to be able to hold differences between
+ * arbitrary pointers.
+ */
+typedef uintptr_t roff_t;
+
+/*
+ * Forward structure declarations, so we can declare pointers and
+ * applications can get type checking.
+ */
+struct __db; typedef struct __db DB;
+struct __db_bt_stat; typedef struct __db_bt_stat DB_BTREE_STAT;
+struct __db_cipher; typedef struct __db_cipher DB_CIPHER;
+struct __db_compact; typedef struct __db_compact DB_COMPACT;
+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;
+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_locktab; typedef struct __db_locktab DB_LOCKTAB;
+struct __db_log; typedef struct __db_log DB_LOG;
+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; 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_mutex_stat; typedef struct __db_mutex_stat DB_MUTEX_STAT;
+struct __db_mutex_t; typedef struct __db_mutex_t DB_MUTEX;
+struct __db_mutexmgr; typedef struct __db_mutexmgr DB_MUTEXMGR;
+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_repmgr_site; \
+ typedef struct __db_repmgr_site DB_REPMGR_SITE;
+struct __db_seq_record; typedef struct __db_seq_record DB_SEQ_RECORD;
+struct __db_seq_stat; typedef struct __db_seq_stat DB_SEQUENCE_STAT;
+struct __db_sequence; typedef struct __db_sequence DB_SEQUENCE;
+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;
+
+/* Key/data structure -- a Data-Base Thang. */
+struct __db_dbt {
+ void *data; /* Key/data */
+ u_int32_t size; /* key/data length */
+
+ u_int32_t ulen; /* RO: length of user buffer. */
+ u_int32_t dlen; /* RO: get/put record length. */
+ u_int32_t doff; /* RO: get/put record offset. */
+
+ void *app_data;
+
+#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_USERCOPY 0x020 /* Use the user-supplied callback. */
+#define DB_DBT_USERMEM 0x040 /* Return in user's memory. */
+#define DB_DBT_DUPOK 0x080 /* Insert if duplicate. */
+ u_int32_t flags;
+};
+
+/*
+ * Common flags --
+ * Interfaces which use any of these common flags should never have
+ * interface specific flags in this range.
+ */
+#define DB_CREATE 0x0000001 /* Create file as necessary. */
+#define DB_DURABLE_UNKNOWN 0x0000002 /* Durability on open (internal). */
+#define DB_FORCE 0x0000004 /* Force (anything). */
+#define DB_MULTIVERSION 0x0000008 /* Multiversion concurrency control. */
+#define DB_NOMMAP 0x0000010 /* Don't mmap underlying file. */
+#define DB_RDONLY 0x0000020 /* Read-only (O_RDONLY). */
+#define DB_RECOVER 0x0000040 /* Run normal recovery. */
+#define DB_THREAD 0x0000080 /* Applications are threaded. */
+#define DB_TRUNCATE 0x0000100 /* Discard existing DB (O_TRUNC). */
+#define DB_TXN_NOSYNC 0x0000200 /* Do not sync log on commit. */
+#define DB_TXN_NOT_DURABLE 0x0000400 /* Do not log changes. */
+#define DB_TXN_WRITE_NOSYNC 0x0000800 /* Write the log but don't sync. */
+#define DB_USE_ENVIRON 0x0001000 /* Use the environment. */
+#define DB_USE_ENVIRON_ROOT 0x0002000 /* 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->open
+ * (Note: until the 4.3 release, legal to DB->associate, DB->del,
+ * DB->put, DB->remove, DB->rename and DB->truncate, and others.)
+ * DB_READ_COMMITTED:
+ * DB->cursor, DB->get, DB->join, DBcursor->c_get, DB_ENV->txn_begin
+ * DB_READ_UNCOMMITTED:
+ * DB->cursor, DB->get, DB->join, DB->open, DBcursor->c_get,
+ * DB_ENV->txn_begin
+ * DB_TXN_SNAPSHOT:
+ * DB_ENV->set_flags, DB_ENV->txn_begin, DB->cursor
+ *
+ * !!!
+ * The DB_READ_COMMITTED and DB_READ_UNCOMMITTED bit masks 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 0x02000000/* Implied transaction. */
+
+#define DB_READ_COMMITTED 0x04000000/* Degree 2 isolation. */
+#define DB_DEGREE_2 0x04000000/* Historic name. */
+
+#define DB_READ_UNCOMMITTED 0x08000000/* Degree 1 isolation. */
+#define DB_DIRTY_READ 0x08000000/* Historic name. */
+
+#define DB_TXN_SNAPSHOT 0x10000000/* Snapshot isolation. */
+
+/*
+ * Flags common to db_env_create and db_create.
+ */
+#define DB_CXX_NO_EXCEPTIONS 0x0000001 /* C++: return error values. */
+
+/*
+ * Flags private to db_env_create.
+ * Shared flags up to 0x0000001 */
+#define DB_RPCCLIENT 0x0000002 /* An RPC client environment. */
+
+/*
+ * Flags private to db_create.
+ * Shared flags up to 0x0000001 */
+#define DB_XA_CREATE 0x0000002 /* Open in an XA environment. */
+
+/*
+ * Flags private to DB_ENV->open.
+ * Shared flags up to 0x0002000 */
+#define DB_INIT_CDB 0x0004000 /* Concurrent Access Methods. */
+#define DB_INIT_LOCK 0x0008000 /* Initialize locking. */
+#define DB_INIT_LOG 0x0010000 /* Initialize logging. */
+#define DB_INIT_MPOOL 0x0020000 /* Initialize mpool. */
+#define DB_INIT_REP 0x0040000 /* Initialize replication. */
+#define DB_INIT_TXN 0x0080000 /* Initialize transactions. */
+#define DB_LOCKDOWN 0x0100000 /* Lock memory into physical core. */
+#define DB_PRIVATE 0x0200000 /* DB_ENV is process local. */
+#define DB_RECOVER_FATAL 0x0400000 /* Run catastrophic recovery. */
+#define DB_REGISTER 0x0800000 /* Multi-process registry. */
+#define DB_SYSTEM_MEM 0x1000000 /* Use system-backed memory. */
+
+#define DB_JOINENV 0x0 /* Compatibility. */
+
+/*
+ * Flags private to DB->open.
+ * Shared flags up to 0x0002000 */
+#define DB_EXCL 0x0004000 /* Exclusive open (O_EXCL). */
+#define DB_FCNTL_LOCKING 0x0008000 /* UNDOC: fcntl(2) locking. */
+#define DB_NO_AUTO_COMMIT 0x0010000 /* Override env-wide AUTOCOMMIT. */
+#define DB_RDWRMASTER 0x0020000 /* UNDOC: allow subdb master open R/W */
+#define DB_WRITEOPEN 0x0040000 /* UNDOC: open with write lock. */
+
+/*
+ * Flags private to DB->associate.
+ * Shared flags up to 0x0002000 */
+#define DB_IMMUTABLE_KEY 0x0004000 /* Secondary key is immutable. */
+/* Shared flags at 0x1000000 */
+
+/*
+ * Flags private to DB_ENV->txn_begin.
+ * Shared flags up to 0x0002000 */
+#define DB_TXN_NOWAIT 0x0004000 /* Do not wait for locks in this TXN. */
+#define DB_TXN_SYNC 0x0008000 /* Always sync log on commit. */
+
+/*
+ * Flags private to DB_ENV->set_encrypt.
+ */
+#define DB_ENCRYPT_AES 0x0000001 /* AES, assumes SHA1 checksum */
+
+/*
+ * Flags private to DB_ENV->set_flags.
+ * Shared flags up to 0x00002000 */
+#define DB_CDB_ALLDB 0x00004000/* Set CDB locking per environment. */
+#define DB_DIRECT_DB 0x00008000/* Don't buffer databases in the OS. */
+#define DB_DIRECT_LOG 0x00010000/* Don't buffer log files in the OS. */
+#define DB_DSYNC_DB 0x00020000/* Set O_DSYNC on the databases. */
+#define DB_DSYNC_LOG 0x00040000/* Set O_DSYNC on the log. */
+#define DB_LOG_AUTOREMOVE 0x00080000/* Automatically remove log files. */
+#define DB_LOG_INMEMORY 0x00100000/* Store logs in buffers in memory. */
+#define DB_NOLOCKING 0x00200000/* Set locking/mutex behavior. */
+#define DB_NOPANIC 0x00400000/* Set panic state per DB_ENV. */
+#define DB_OVERWRITE 0x00800000/* Overwrite unlinked region files. */
+#define DB_PANIC_ENVIRONMENT 0x01000000/* Set panic state per environment. */
+/* Shared flags at 0x02000000 */
+/* Shared flags at 0x04000000 */
+/* Shared flags at 0x08000000 */
+/* Shared flags at 0x10000000 */
+#define DB_REGION_INIT 0x20000000/* Page-fault regions on open. */
+#define DB_TIME_NOTGRANTED 0x40000000/* Return NOTGRANTED on timeout. */
+#define DB_YIELDCPU 0x80000000/* Yield the CPU (a lot). */
+
+/*
+ * Flags private to DB->set_feedback's callback.
+ */
+#define DB_UPGRADE 0x0000001 /* Upgrading. */
+#define DB_VERIFY 0x0000002 /* Verifying. */
+
+/*
+ * Flags private to DB->compact.
+ * Shared flags up to 0x00002000
+ */
+#define DB_FREELIST_ONLY 0x00004000 /* Just sort and truncate. */
+#define DB_FREE_SPACE 0x00008000 /* Free space . */
+#define DB_COMPACT_FLAGS \
+ (DB_FREELIST_ONLY | DB_FREE_SPACE)
+
+/*
+ * Flags private to DB_MPOOLFILE->open.
+ * Shared flags up to 0x0002000 */
+#define DB_DIRECT 0x0004000 /* Don't buffer the file in the OS. */
+#define DB_EXTENT 0x0008000 /* internal: dealing with an extent. */
+#define DB_ODDFILESIZE 0x0010000 /* Truncate file to N * pgsize. */
+
+/*
+ * Flags private to DB->set_flags.
+ * Shared flags up to 0x00002000 */
+#define DB_CHKSUM 0x00004000 /* Do checksumming */
+#define DB_DUP 0x00008000 /* Btree, Hash: duplicate keys. */
+#define DB_DUPSORT 0x00010000 /* Btree, Hash: duplicate keys. */
+#define DB_ENCRYPT 0x00020000 /* Btree, Hash: duplicate keys. */
+#define DB_INORDER 0x00040000 /* Queue: strict ordering on consume */
+#define DB_RECNUM 0x00080000 /* Btree: record numbers. */
+#define DB_RENUMBER 0x00100000 /* Recno: renumber on insert/delete. */
+#define DB_REVSPLITOFF 0x00200000 /* Btree: turn off reverse splits. */
+#define DB_SNAPSHOT 0x00400000 /* Recno: snapshot the input. */
+
+/*
+ * Flags private to the DB_ENV->stat_print, DB->stat and DB->stat_print methods.
+ */
+#define DB_FAST_STAT 0x0000001 /* Don't traverse the database. */
+#define DB_STAT_ALL 0x0000002 /* Print: Everything. */
+#define DB_STAT_CLEAR 0x0000004 /* Clear stat after returning values. */
+#define DB_STAT_LOCK_CONF 0x0000008 /* Print: Lock conflict matrix. */
+#define DB_STAT_LOCK_LOCKERS 0x0000010 /* Print: Lockers. */
+#define DB_STAT_LOCK_OBJECTS 0x0000020 /* Print: Lock objects. */
+#define DB_STAT_LOCK_PARAMS 0x0000040 /* Print: Lock parameters. */
+#define DB_STAT_MEMP_HASH 0x0000080 /* Print: Mpool hash buckets. */
+#define DB_STAT_NOERROR 0x0000100 /* Internal: continue on error. */
+#define DB_STAT_SUBSYSTEM 0x0000200 /* Print: Subsystems too. */
+
+/*
+ * Flags private to DB->join.
+ */
+#define DB_JOIN_NOSORT 0x0000001 /* Don't try to optimize join. */
+
+/*
+ * Flags private to DB->verify.
+ */
+#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. */
+#define DB_UNREF 0x0000080 /* Report unreferenced pages. */
+/*
+ * !!!
+ * These must not go over 0x8000, or they will collide with the flags
+ * used by __bam_vrfy_subtree.
+ */
+
+/*
+ * Flags private to DB->rep_set_transport's send callback.
+ */
+#define DB_REP_ANYWHERE 0x0000001 /* Message can be serviced anywhere. */
+#define DB_REP_NOBUFFER 0x0000002 /* Do not buffer this message. */
+#define DB_REP_PERMANENT 0x0000004 /* Important--app. may want to flush. */
+#define DB_REP_REREQUEST 0x0000008 /* This msg already been requested. */
+
+/*******************************************************
+ * Mutexes.
+ *******************************************************/
+typedef u_int32_t db_mutex_t;
+
+/*
+ * Flag arguments for DbEnv.mutex_alloc, DbEnv.is_alive and for the
+ * DB_MUTEX structure.
+ */
+#define DB_MUTEX_ALLOCATED 0x01 /* Mutex currently allocated. */
+#define DB_MUTEX_LOCKED 0x02 /* Mutex currently locked. */
+#define DB_MUTEX_LOGICAL_LOCK 0x04 /* Mutex backs a database lock. */
+#define DB_MUTEX_PROCESS_ONLY 0x08 /* Mutex private to a process. */
+#define DB_MUTEX_SELF_BLOCK 0x10 /* Must be able to block self. */
+
+struct __db_mutex_stat {
+ /* The following fields are maintained in the region's copy. */
+ u_int32_t st_mutex_align; /* Mutex alignment */
+ u_int32_t st_mutex_tas_spins; /* Mutex test-and-set spins */
+ u_int32_t st_mutex_cnt; /* Mutex count */
+ u_int32_t st_mutex_free; /* Available mutexes */
+ u_int32_t st_mutex_inuse; /* Mutexes in use */
+ u_int32_t st_mutex_inuse_max; /* Maximum mutexes ever in use */
+
+ /* The following fields are filled-in from other places. */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted without wait. */
+ roff_t st_regsize; /* Region size. */
+};
+
+/* This is the length of the buffer passed to DB_ENV->thread_id_string() */
+#define DB_THREADID_STRLEN 128
+
+/*******************************************************
+ * 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_EXPIRE 2 /* Only expire locks, no detection. */
+#define DB_LOCK_MAXLOCKS 3 /* Select locker with max locks. */
+#define DB_LOCK_MAXWRITE 4 /* Select locker with max writelocks. */
+#define DB_LOCK_MINLOCKS 5 /* Select locker with min locks. */
+#define DB_LOCK_MINWRITE 6 /* Select locker with min writelocks. */
+#define DB_LOCK_OLDEST 7 /* Select oldest locker. */
+#define DB_LOCK_RANDOM 8 /* Select random locker. */
+#define DB_LOCK_YOUNGEST 9 /* Select youngest locker. */
+
+/* Flag values for lock_vec(), lock_get(). */
+#define DB_LOCK_ABORT 0x001 /* Internal: Lock during abort. */
+#define DB_LOCK_NOWAIT 0x002 /* Don't wait on unavailable lock. */
+#define DB_LOCK_RECORD 0x004 /* Internal: record lock. */
+#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_READ_UNCOMMITTED=7, /* Degree 1 isolation. */
+ 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_EXPIRED=2, /* Lock has expired. */
+ DB_LSTAT_FREE=3, /* Lock is unallocated. */
+ DB_LSTAT_HELD=4, /* Lock is currently held. */
+ DB_LSTAT_PENDING=5, /* Lock was waiting and has been
+ * promoted; waiting for the owner
+ * to run and upgrade it to held. */
+ DB_LSTAT_WAITING=6 /* 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. */
+ int 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_nrequests; /* Number of lock gets. */
+ u_int32_t st_nreleases; /* Number of lock puts. */
+ u_int32_t st_nupgrade; /* Number of lock upgrades. */
+ u_int32_t st_ndowngrade; /* Number of lock downgrades. */
+ u_int32_t st_lock_wait; /* Lock conflicts w/ subsequent wait */
+ u_int32_t st_lock_nowait; /* Lock conflicts w/o subsequent wait */
+ 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. */
+ roff_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 {
+ roff_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. */
+};
+
+/*******************************************************
+ * Logging.
+ *******************************************************/
+#define DB_LOGVERSION 12 /* Current log version. */
+#define DB_LOGOLDVER 8 /* Oldest log version supported. */
+#define DB_LOGMAGIC 0x040988
+
+/* 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_WRNOSYNC 0x020 /* Write, don't sync log_put */
+
+/*
+ * 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. */
+};
+
+/*
+ * 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_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 */
+
+ DBT c_dbt; /* Return DBT. */
+ DB_LSN p_lsn; /* Persist LSN. */
+ u_int32_t p_version; /* Persist version. */
+
+ 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. */
+
+ u_int32_t bp_maxrec; /* Max record length in the log file. */
+
+ /* DB_LOGC PUBLIC HANDLE LIST BEGIN */
+ int (*close) __P((DB_LOGC *, u_int32_t));
+ int (*get) __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
+ int (*version) __P((DB_LOGC *, u_int32_t *, u_int32_t));
+ /* DB_LOGC PUBLIC HANDLE LIST END */
+
+#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;
+};
+
+/* 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 permissions mode. */
+ u_int32_t st_lg_bsize; /* Log buffer size. */
+ u_int32_t st_lg_size; /* Log file size. */
+ u_int32_t st_record; /* Records entered into the log. */
+ 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 I/O writes to the log. */
+ u_int32_t st_wcount_fill; /* Overflow writes to the log. */
+ u_int32_t st_rcount; /* Total I/O reads from 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. */
+ roff_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. */
+};
+
+/*
+ * We need to record the first log record of a transaction. For user
+ * defined logging this macro returns the place to put that information,
+ * if it is need in rlsnp, otherwise it leaves it unchanged. We also
+ * need to track the last record of the transaction, this returns the
+ * place to put that info.
+ */
+#define DB_SET_TXN_LSNP(txn, blsnp, llsnp) \
+ ((txn)->set_txn_lsnp(txn, blsnp, llsnp))
+
+/*******************************************************
+ * Shared buffer cache (mpool).
+ *******************************************************/
+/* Flag values for DB_MPOOLFILE->get. */
+#define DB_MPOOL_CREATE 0x001 /* Create a page. */
+#define DB_MPOOL_DIRTY 0x002 /* Get page for an update. */
+#define DB_MPOOL_EDIT 0x004 /* Modify without copying. */
+#define DB_MPOOL_FREE 0x008 /* Free page if present. */
+#define DB_MPOOL_LAST 0x010 /* Return the last page. */
+#define DB_MPOOL_NEW 0x020 /* Create a new page. */
+
+/* Flag values for DB_MPOOLFILE->put, DB_MPOOLFILE->set. */
+#define DB_MPOOL_DISCARD 0x001 /* 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,
+ DB_PRIORITY_LOW=2,
+ DB_PRIORITY_DEFAULT=3,
+ DB_PRIORITY_HIGH=4,
+ DB_PRIORITY_VERY_HIGH=5
+} DB_CACHE_PRIORITY;
+
+/* Per-process DB_MPOOLFILE information. */
+struct __db_mpoolfile {
+ DB_FH *fhp; /* Underlying file handle. */
+
+ /*
+ * !!!
+ * 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. */
+
+ /*
+ * !!!
+ * 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. */
+
+ /*
+ * !!!
+ * 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. */
+ int32_t priority; /* Cache priority. */
+
+ 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. */
+
+ /* DB_MPOOLFILE PUBLIC HANDLE LIST BEGIN */
+ int (*close) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get)
+ __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, 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 *));
+ /* DB_MPOOLFILE PUBLIC HANDLE LIST END */
+
+ /*
+ * 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 because 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_MULTIVERSION 0x004 /* Opened for multiversion access. */
+#define MP_OPEN_CALLED 0x008 /* File opened. */
+#define MP_READONLY 0x010 /* 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. */
+ roff_t st_regsize; /* Region size. */
+ size_t st_mmapsize; /* Maximum file size for mmap. */
+ int st_maxopenfd; /* Maximum number of open fd's. */
+ int st_maxwrite; /* Maximum buffers to write. */
+ int st_maxwrite_sleep; /* Sleep after writing max buffers. */
+ 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_nowait; /* Max hash lock granted with nowait. */
+ 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_mvcc_frozen; /* Buffers frozen. */
+ u_int32_t st_mvcc_thawed; /* Buffers thawed. */
+ u_int32_t st_mvcc_freed; /* Frozen buffers freed. */
+ 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. */
+ u_int32_t st_io_wait; /* Thread waited on buffer I/O. */
+};
+
+/* Mpool file statistics structure. */
+struct __db_mpool_fstat {
+ char *file_name; /* File name. */
+ u_int32_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_OPENFILES=5, /* Internal. */
+ DB_TXN_POPENFILES=6, /* Internal. */
+ DB_TXN_PRINT=7 /* 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. */
+
+ u_int32_t txnid; /* Unique transaction id. */
+ char *name; /* Transaction name */
+
+ db_threadid_t tid; /* Thread id for use in MT XA. */
+ void *td; /* Detail structure within region. */
+ db_timeout_t lock_timeout; /* Timeout for locks for this txn. */
+ db_timeout_t expire; /* Time transaction expires. */
+ void *txn_list; /* Undo information for parent. */
+
+ /*
+ * !!!
+ * 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. */
+
+ /*
+ * !!!
+ * 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;
+
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_HEAD(__events, __txn_event) events;
+ */
+ struct {
+ struct __txn_event *tqh_first;
+ struct __txn_event **tqh_last;
+ } events;
+
+ /*
+ * !!!
+ * 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_ENTRY(__db_txn) klinks;
+ */
+ struct {
+ struct __db_txn *tqe_next;
+ struct __db_txn **tqe_prev;
+ } klinks;
+
+ void *api_internal; /* C++ API private. */
+ void *xml_internal; /* XML API private. */
+
+ u_int32_t cursors; /* Number of cursors open for txn */
+
+ /* DB_TXN PUBLIC HANDLE LIST BEGIN */
+ int (*abort) __P((DB_TXN *));
+ int (*commit) __P((DB_TXN *, u_int32_t));
+ int (*discard) __P((DB_TXN *, u_int32_t));
+ int (*get_name) __P((DB_TXN *, const char **));
+ u_int32_t (*id) __P((DB_TXN *));
+ int (*prepare) __P((DB_TXN *, u_int8_t *));
+ int (*set_name) __P((DB_TXN *, const char *));
+ int (*set_timeout) __P((DB_TXN *, db_timeout_t, u_int32_t));
+ /* DB_TXN PUBLIC HANDLE LIST END */
+
+ /* DB_TXN PRIVATE HANDLE LIST BEGIN */
+ void (*set_txn_lsnp) __P((DB_TXN *txn, DB_LSN **, DB_LSN **));
+ /* DB_TXN PRIVATE HANDLE LIST END */
+
+#define TXN_CHILDCOMMIT 0x0001 /* Txn has committed. */
+#define TXN_CDSGROUP 0x0002 /* CDS group handle. */
+#define TXN_COMPENSATE 0x0004 /* Compensating transaction. */
+#define TXN_DEADLOCK 0x0008 /* Txn has deadlocked. */
+#define TXN_LOCKTIMEOUT 0x0010 /* Txn has a lock timeout. */
+#define TXN_MALLOC 0x0020 /* Structure allocated by TXN system. */
+#define TXN_NOSYNC 0x0040 /* Do not sync on prepare and commit. */
+#define TXN_NOWAIT 0x0080 /* Do not wait on locks. */
+#define TXN_PRIVATE 0x0100 /* Txn owned by cursor.. */
+#define TXN_READ_COMMITTED 0x0200 /* Txn has degree 2 isolation. */
+#define TXN_READ_UNCOMMITTED 0x0400 /* Txn has degree 1 isolation. */
+#define TXN_RESTORED 0x0800 /* Txn has been restored. */
+#define TXN_SNAPSHOT 0x1000 /* Snapshot Isolation. */
+#define TXN_SYNC 0x2000 /* Write and sync on prepare/commit. */
+#define TXN_WRITE_NOSYNC 0x4000 /* Write only on prepare/commit. */
+ u_int32_t flags;
+};
+
+#define TXN_SYNC_FLAGS (TXN_SYNC | TXN_NOSYNC | TXN_WRITE_NOSYNC)
+
+/*
+ * 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 */
+ pid_t pid; /* Process owning txn ID */
+ db_threadid_t tid; /* Thread owning txn ID */
+
+ DB_LSN lsn; /* LSN when transaction began */
+
+ DB_LSN read_lsn; /* Read LSN for MVCC */
+ u_int32_t mvcc_ref; /* MVCC reference count */
+
+#define TXN_ABORTED 1
+#define TXN_COMMITTED 2
+#define TXN_PREPARED 3
+#define TXN_RUNNING 4
+ u_int32_t status; /* Status of the transaction */
+
+#define TXN_XA_ABORTED 1
+#define TXN_XA_DEADLOCKED 2
+#define TXN_XA_ENDED 3
+#define TXN_XA_PREPARED 4
+#define TXN_XA_STARTED 5
+#define TXN_XA_SUSPENDED 6
+ u_int32_t xa_status; /* XA status */
+
+ u_int8_t xid[DB_XIDDATASIZE]; /* Global transaction ID */
+ char name[51]; /* 50 bytes of name, nul termination */
+};
+
+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_nsnapshot; /* number of snapshot transactions */
+ u_int32_t st_nrestores; /* number of restored transactions
+ after recovery. */
+ u_int32_t st_maxnactive; /* maximum active transactions */
+ u_int32_t st_maxnsnapshot; /* maximum snapshot 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. */
+ roff_t st_regsize; /* Region size. */
+};
+
+/*******************************************************
+ * Replication.
+ *******************************************************/
+/* Special, out-of-band environment IDs. */
+#define DB_EID_BROADCAST -1
+#define DB_EID_INVALID -2
+
+/* rep_config flag values. */
+#define DB_REP_CONF_BULK 0x0001 /* Bulk transfer. */
+#define DB_REP_CONF_DELAYCLIENT 0x0002 /* Delay client synchronization. */
+#define DB_REP_CONF_NOAUTOINIT 0x0004 /* No automatic client init. */
+#define DB_REP_CONF_NOWAIT 0x0008 /* Don't wait, return error. */
+
+/*
+ * Operation code values for rep_start and/or repmgr_start. Just one of the
+ * following values should be passed in the flags parameter. (If we ever need
+ * additional, independent bit flags for these methods, we can start allocating
+ * them from the high-order byte of the flags word, as we currently do elsewhere
+ * for DB_AFTER through DB_WRITELOCK and DB_AUTO_COMMIT, etc.)
+ */
+#define DB_REP_CLIENT 1
+#define DB_REP_ELECTION 2
+#define DB_REP_FULL_ELECTION 3
+#define DB_REP_MASTER 4
+
+/* Acknowledgement policies. */
+#define DB_REPMGR_ACKS_ALL 1
+#define DB_REPMGR_ACKS_ALL_PEERS 2
+#define DB_REPMGR_ACKS_NONE 3
+#define DB_REPMGR_ACKS_ONE 4
+#define DB_REPMGR_ACKS_ONE_PEER 5
+#define DB_REPMGR_ACKS_QUORUM 6
+
+/* Replication Framework timeout configuration values. */
+#define DB_REP_ACK_TIMEOUT 1
+#define DB_REP_ELECTION_TIMEOUT 2
+#define DB_REP_ELECTION_RETRY 3
+#define DB_REP_CONNECTION_RETRY 4
+
+/* Event notification types. */
+#define DB_EVENT_NO_SUCH_EVENT 0 /* out-of-band sentinel value */
+#define DB_EVENT_PANIC 1
+#define DB_EVENT_REP_CLIENT 2
+#define DB_EVENT_REP_MASTER 3
+#define DB_EVENT_REP_NEWMASTER 4
+#define DB_EVENT_REP_STARTUPDONE 5
+#define DB_EVENT_WRITE_FAILED 6
+
+/* Flag value for repmgr_add_remote_site. */
+#define DB_REPMGR_PEER 0x01
+
+/* Replication Manager site status. */
+struct __db_repmgr_site {
+ int eid;
+ char *host;
+ u_int port;
+
+#define DB_REPMGR_CONNECTED 0x01
+#define DB_REPMGR_DISCONNECTED 0x02
+ u_int32_t status;
+};
+
+/* 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. */
+ db_pgno_t st_next_pg; /* Next pg we expect. */
+ db_pgno_t st_waiting_pg; /* pg 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_bulk_fills; /* Bulk buffer fills. */
+ u_int32_t st_bulk_overflows; /* Bulk buffer overflows. */
+ u_int32_t st_bulk_records; /* Bulk records stored. */
+ u_int32_t st_bulk_transfers; /* Transfers of bulk buffers. */
+ u_int32_t st_client_rerequests; /* Number of forced rerequests. */
+ u_int32_t st_client_svc_req; /* Number of client service requests
+ received by this client. */
+ u_int32_t st_client_svc_miss; /* Number of client service requests
+ missing on this client. */
+ u_int32_t st_gen; /* Current generation number. */
+ u_int32_t st_egen; /* Current election gen number. */
+ 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_pg_duplicated; /* Pages received multiply.+ */
+ u_int32_t st_pg_records; /* Pages received and stored.+ */
+ u_int32_t st_pg_requested; /* Pages missed and requested.+ */
+ u_int32_t st_startup_complete; /* Site completed client sync-up. */
+ 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_nvotes; /* # of "registered voters" needed. */
+ int st_election_priority; /* Current election priority. */
+ int st_election_status; /* Current election status. */
+ u_int32_t st_election_tiebreaker;/* Election tiebreaker value. */
+ int st_election_votes; /* Votes received in this round. */
+ u_int32_t st_election_sec; /* Last election time seconds. */
+ u_int32_t st_election_usec; /* Last election time useconds. */
+};
+
+/*******************************************************
+ * Sequences.
+ *******************************************************/
+/*
+ * The storage record for a sequence.
+ */
+struct __db_seq_record {
+ u_int32_t seq_version; /* Version size/number. */
+#define DB_SEQ_DEC 0x00000001 /* Decrement sequence. */
+#define DB_SEQ_INC 0x00000002 /* Increment sequence. */
+#define DB_SEQ_RANGE_SET 0x00000004 /* Range set (internal). */
+#define DB_SEQ_WRAP 0x00000008 /* Wrap sequence at min/max. */
+#define DB_SEQ_WRAPPED 0x00000010 /* Just wrapped (internal). */
+ u_int32_t flags; /* Flags. */
+ db_seq_t seq_value; /* Current value. */
+ db_seq_t seq_max; /* Max permitted. */
+ db_seq_t seq_min; /* Min permitted. */
+};
+
+/*
+ * Handle for a sequence object.
+ */
+struct __db_sequence {
+ DB *seq_dbp; /* DB handle for this sequence. */
+ db_mutex_t mtx_seq; /* Mutex if sequence is threaded. */
+ DB_SEQ_RECORD *seq_rp; /* Pointer to current data. */
+ DB_SEQ_RECORD seq_record; /* Data from DB_SEQUENCE. */
+ int32_t seq_cache_size; /* Number of values cached. */
+ db_seq_t seq_last_value; /* Last value cached. */
+ DBT seq_key; /* DBT pointing to sequence key. */
+ DBT seq_data; /* DBT pointing to seq_record. */
+
+ /* API-private structure: used by C++ and Java. */
+ void *api_internal;
+
+ /* DB_SEQUENCE PUBLIC HANDLE LIST BEGIN */
+ int (*close) __P((DB_SEQUENCE *, u_int32_t));
+ int (*get) __P((DB_SEQUENCE *,
+ DB_TXN *, int32_t, db_seq_t *, u_int32_t));
+ int (*get_cachesize) __P((DB_SEQUENCE *, int32_t *));
+ int (*get_db) __P((DB_SEQUENCE *, DB **));
+ int (*get_flags) __P((DB_SEQUENCE *, u_int32_t *));
+ int (*get_key) __P((DB_SEQUENCE *, DBT *));
+ int (*get_range) __P((DB_SEQUENCE *,
+ db_seq_t *, db_seq_t *));
+ int (*initial_value) __P((DB_SEQUENCE *, db_seq_t));
+ int (*open) __P((DB_SEQUENCE *,
+ DB_TXN *, DBT *, u_int32_t));
+ int (*remove) __P((DB_SEQUENCE *, DB_TXN *, u_int32_t));
+ int (*set_cachesize) __P((DB_SEQUENCE *, int32_t));
+ int (*set_flags) __P((DB_SEQUENCE *, u_int32_t));
+ int (*set_range) __P((DB_SEQUENCE *, db_seq_t, db_seq_t));
+ int (*stat) __P((DB_SEQUENCE *,
+ DB_SEQUENCE_STAT **, u_int32_t));
+ int (*stat_print) __P((DB_SEQUENCE *, u_int32_t));
+ /* DB_SEQUENCE PUBLIC HANDLE LIST END */
+};
+
+struct __db_seq_stat {
+ u_int32_t st_wait; /* Sequence lock granted w/o wait. */
+ u_int32_t st_nowait; /* Sequence lock granted after wait. */
+ db_seq_t st_current; /* Current value in db. */
+ db_seq_t st_value; /* Current cached value. */
+ db_seq_t st_last_value; /* Last cached value. */
+ db_seq_t st_min; /* Minimum value. */
+ db_seq_t st_max; /* Maximum value. */
+ int32_t st_cache_size; /* Cache size. */
+ u_int32_t st_flags; /* Flag value. */
+};
+
+/*******************************************************
+ * Access methods.
+ *******************************************************/
+typedef enum {
+ DB_BTREE=1,
+ DB_HASH=2,
+ DB_RECNO=3,
+ DB_QUEUE=4,
+ DB_UNKNOWN=5 /* Figure it out on open. */
+} DBTYPE;
+
+#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 8 /* Current hash version. */
+#define DB_HASHOLDVER 7 /* Oldest hash version supported. */
+#define DB_HASHMAGIC 0x061561
+
+#define DB_QAMVERSION 4 /* Current queue version. */
+#define DB_QAMOLDVER 3 /* Oldest queue version supported. */
+#define DB_QAMMAGIC 0x042253
+
+#define DB_SEQUENCE_VERSION 2 /* Current sequence version. */
+#define DB_SEQUENCE_OLDVER 1 /* Oldest sequence version supported. */
+
+/*
+ * 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_CONSUME 4 /* get() */
+#define DB_CONSUME_WAIT 5 /* get() */
+#define DB_CURRENT 6 /* c_get(), c_put(), DB_LOGC->get() */
+#define DB_FIRST 7 /* c_get(), DB_LOGC->get() */
+#define DB_GET_BOTH 8 /* get(), c_get() */
+#define DB_GET_BOTHC 9 /* c_get() (internal) */
+#define DB_GET_BOTH_RANGE 10 /* get(), c_get() */
+#define DB_GET_RECNO 11 /* c_get() */
+#define DB_JOIN_ITEM 12 /* c_get(); do not do primary lookup */
+#define DB_KEYFIRST 13 /* c_put() */
+#define DB_KEYLAST 14 /* c_put() */
+#define DB_LAST 15 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT 16 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT_DUP 17 /* c_get() */
+#define DB_NEXT_NODUP 18 /* c_get() */
+#define DB_NODUPDATA 19 /* put(), c_put() */
+#define DB_NOOVERWRITE 20 /* put() */
+#define DB_NOSYNC 21 /* close() */
+#define DB_POSITION 22 /* c_dup() */
+#define DB_PREV 23 /* c_get(), DB_LOGC->get() */
+#define DB_PREV_NODUP 24 /* c_get(), DB_LOGC->get() */
+#define DB_SET 25 /* c_get(), DB_LOGC->get() */
+#define DB_SET_LOCK_TIMEOUT 26 /* set_timout() */
+#define DB_SET_RANGE 27 /* c_get() */
+#define DB_SET_RECNO 28 /* get(), c_get() */
+#define DB_SET_TXN_NOW 29 /* set_timout() (internal) */
+#define DB_SET_TXN_TIMEOUT 30 /* set_timout() */
+#define DB_UPDATE_SECONDARY 31 /* c_get(), c_del() (internal) */
+#define DB_WRITECURSOR 32 /* cursor() */
+#define DB_WRITELOCK 33 /* cursor() (internal) */
+
+/* This has to change when the max opcode hits 255. */
+#define DB_OPFLAGS_MASK 0x000000ff /* Mask for operations flags. */
+
+/*
+ * Masks for flags that can be OR'd into DB access method and cursor
+ * operation values. Three top bits have already been taken:
+ *
+ * DB_AUTO_COMMIT 0x02000000
+ * DB_READ_COMMITTED 0x04000000
+ * DB_READ_UNCOMMITTED 0x08000000
+ */
+#define DB_MULTIPLE 0x10000000 /* Return multiple data values. */
+#define DB_MULTIPLE_KEY 0x20000000 /* Return multiple data/key pairs. */
+#define DB_RMW 0x40000000 /* Acquire write lock immediately. */
+
+/*
+ * DB (user visible) error return codes.
+ *
+ * !!!
+ * We don't want our error returns to conflict with other packages where
+ * 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.
+ */
+/* DB (public) error return codes. */
+#define DB_BUFFER_SMALL (-30999)/* User memory too small for return. */
+#define DB_DONOTINDEX (-30998)/* "Null" return from 2ndary callbk. */
+#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_LOG_BUFFER_FULL (-30993)/* In-memory log buffer full. */
+#define DB_NOSERVER (-30992)/* Server panic return. */
+#define DB_NOSERVER_HOME (-30991)/* Bad home sent to server. */
+#define DB_NOSERVER_ID (-30990)/* Bad ID sent to server. */
+#define DB_NOTFOUND (-30989)/* Key/data pair not found (EOF). */
+#define DB_OLD_VERSION (-30988)/* Out-of-date version. */
+#define DB_PAGE_NOTFOUND (-30987)/* Requested page not found. */
+#define DB_REP_DUPMASTER (-30986)/* There are two masters. */
+#define DB_REP_HANDLE_DEAD (-30985)/* Rolled back a commit. */
+#define DB_REP_HOLDELECTION (-30984)/* Time to hold an election. */
+#define DB_REP_IGNORE (-30983)/* This msg should be ignored.*/
+#define DB_REP_ISPERM (-30982)/* Cached not written perm written.*/
+#define DB_REP_JOIN_FAILURE (-30981)/* Unable to join replication group. */
+#define DB_REP_LOCKOUT (-30980)/* API/Replication lockout now. */
+#define DB_REP_NEWMASTER (-30979)/* We have learned of a new master. */
+#define DB_REP_NEWSITE (-30978)/* New site entered system. */
+#define DB_REP_NOTPERM (-30977)/* Permanent log record not written. */
+#define DB_REP_UNAVAIL (-30976)/* Site cannot currently be reached. */
+#define DB_RUNRECOVERY (-30975)/* Panic return. */
+#define DB_SECONDARY_BAD (-30974)/* Secondary index corrupt. */
+#define DB_VERIFY_BAD (-30973)/* Verify failed; bad format. */
+#define DB_VERSION_MISMATCH (-30972)/* Environment version mismatch. */
+
+/* DB (private) error return codes. */
+#define DB_ALREADY_ABORTED (-30899)
+#define DB_DELETED (-30898)/* Recovery file marked deleted. */
+#define DB_NEEDSPLIT (-30897)/* Page needs to be split. */
+#define DB_REP_BULKOVF (-30896)/* Rep bulk buffer overflow. */
+#define DB_REP_EGENCHG (-30895)/* Egen changed while in election. */
+#define DB_REP_LOGREADY (-30894)/* Rep log ready for recovery. */
+#define DB_REP_PAGEDONE (-30893)/* This page was already done. */
+#define DB_SURPRISE_KID (-30892)/* Child commit where parent
+ didn't know it was a parent. */
+#define DB_SWAPBYTES (-30891)/* Database needs byte swapping. */
+#define DB_TIMEOUT (-30890)/* Timed out waiting for election. */
+#define DB_TXN_CKP (-30889)/* Encountered ckp record in log. */
+#define DB_VERIFY_FATAL (-30888)/* DB->verify cannot proceed. */
+
+/* Database handle. */
+struct __db {
+ /*******************************************************
+ * Public: owned by the application.
+ *******************************************************/
+ u_int32_t pgsize; /* Database logical page size. */
+
+ /* Callbacks. */
+ int (*db_append_recno) __P((DB *, DBT *, db_recno_t));
+ void (*db_feedback) __P((DB *, int, int));
+ int (*dup_compare) __P((DB *, const DBT *, const DBT *));
+
+ void *app_private; /* Application-private handle. */
+
+ /*******************************************************
+ * Private: owned by DB.
+ *******************************************************/
+ DB_ENV *dbenv; /* Backing environment. */
+
+ DBTYPE type; /* DB access method type. */
+
+ DB_MPOOLFILE *mpf; /* Backing buffer pool. */
+
+ db_mutex_t mutex; /* 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
+ FNAME *log_filename; /* File's naming info for logging. */
+
+ db_pgno_t meta_pgno; /* Meta page number */
+ 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. */
+
+ u_int cl_id; /* RPC: remote client id. */
+
+ time_t timestamp; /* Handle timestamp for replication. */
+ u_int32_t fid_gen; /* Rep generation number for fids. */
+
+ /*
+ * 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
+ * DB. If they're using fcntl(2) locking on the underlying database
+ * file, and we open and close a file descriptor for that file, we will
+ * discard their locks. The DB_FCNTL_LOCKING flag to DB->open is an
+ * undocumented interface to support this usage which leaves any file
+ * descriptors we open until DB->close. This will only work with the
+ * DB->open interface and simple caches, e.g., creating a transaction
+ * thread may open/close file descriptors this flag doesn't protect.
+ * Locking with fcntl(2) on a file that you don't own is a very, very
+ * unsafe thing to do. 'Nuff said.
+ */
+ DB_FH *saved_open_fhp; /* Saved file handle. */
+
+ /*
+ * 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 from queue.h.
+ * TAILQ_ENTRY(__db) dblistlinks;
+ */
+ struct {
+ struct __db *tqe_next;
+ struct __db **tqe_prev;
+ } dblistlinks;
+
+ /*
+ * Cursor queues.
+ *
+ * !!!
+ * 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 __cq_fq {
+ struct __dbc *tqh_first;
+ struct __dbc **tqh_last;
+ } free_queue;
+ struct __cq_aq {
+ struct __dbc *tqh_first;
+ struct __dbc **tqh_last;
+ } active_queue;
+ struct __cq_jq {
+ struct __dbc *tqh_first;
+ struct __dbc **tqh_last;
+ } join_queue;
+
+ /*
+ * 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;
+
+#define DB_ASSOC_IMMUTABLE_KEY 0x00000001 /* Secondary key is immutable. */
+
+ /* Flags passed to associate -- set in the secondary. */
+ u_int32_t s_assoc_flags;
+
+ /* 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. */
+
+ /* DB PUBLIC HANDLE LIST BEGIN */
+ 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 (*compact) __P((DB *,
+ DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
+ int (*cursor) __P((DB *, DB_TXN *, DBC **, u_int32_t));
+ int (*del) __P((DB *, DB_TXN *, DBT *, u_int32_t));
+ void (*err) __P((DB *, int, const char *, ...));
+ void (*errx) __P((DB *, const char *, ...));
+ int (*fd) __P((DB *, int *));
+ int (*get) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+ int (*get_bt_minkey) __P((DB *, 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 *));
+ DB_ENV *(*get_env) __P((DB *));
+ void (*get_errfile) __P((DB *, FILE **));
+ void (*get_errpfx) __P((DB *, const char **));
+ int (*get_flags) __P((DB *, u_int32_t *));
+ int (*get_h_ffactor) __P((DB *, u_int32_t *));
+ int (*get_h_nelem) __P((DB *, u_int32_t *));
+ int (*get_lorder) __P((DB *, int *));
+ DB_MPOOLFILE *(*get_mpf) __P((DB *));
+ void (*get_msgfile) __P((DB *, FILE **));
+ int (*get_open_flags) __P((DB *, u_int32_t *));
+ int (*get_pagesize) __P((DB *, u_int32_t *));
+ int (*get_q_extentsize) __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 (*get_transactional) __P((DB *));
+ 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 *,
+ DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
+ int (*pget) __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
+ 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 (*set_alloc) __P((DB *, void *(*)(size_t),
+ void *(*)(void *, size_t), void (*)(void *)));
+ int (*set_append_recno) __P((DB *, int (*)(DB *, DBT *, db_recno_t)));
+ int (*set_bt_compare)
+ __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
+ int (*set_bt_minkey) __P((DB *, u_int32_t));
+ int (*set_bt_prefix)
+ __P((DB *, size_t (*)(DB *, const DBT *, const DBT *)));
+ 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 DB_ENV *, const char *, const 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_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 (*set_lorder) __P((DB *, int));
+ void (*set_msgcall) __P((DB *, void (*)(const DB_ENV *, const char *)));
+ void (*set_msgfile) __P((DB *, FILE *));
+ int (*set_pagesize) __P((DB *, u_int32_t));
+ int (*set_paniccall) __P((DB *, void (*)(DB_ENV *, int)));
+ int (*set_q_extentsize) __P((DB *, u_int32_t));
+ 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 (*stat) __P((DB *, DB_TXN *, void *, u_int32_t));
+ int (*stat_print) __P((DB *, u_int32_t));
+ int (*sync) __P((DB *, u_int32_t));
+ int (*truncate) __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
+ int (*upgrade) __P((DB *, const char *, u_int32_t));
+ int (*verify)
+ __P((DB *, const char *, const char *, FILE *, u_int32_t));
+ /* DB PUBLIC HANDLE LIST END */
+
+ /* DB PRIVATE HANDLE LIST BEGIN */
+ int (*dump) __P((DB *, const char *,
+ int (*)(void *, const void *), void *, int, int));
+ int (*db_am_remove) __P((DB *, DB_TXN *, const char *, const char *));
+ int (*db_am_rename) __P((DB *, DB_TXN *,
+ const char *, const char *, const char *));
+ /* DB PRIVATE HANDLE LIST END */
+
+ /*
+ * 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. */
+
+ /*
+ * This field really ought to be an AM_FLAG, but we have
+ * have run out of bits. If/when we decide to split up
+ * the flags, we can incorporate it.
+ */
+ int preserve_fid; /* Do not free fileid on close. */
+
+#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_DISCARD 0x00000080 /* Discard any cached pages */
+#define DB_AM_DUP 0x00000100 /* DB_DUP */
+#define DB_AM_DUPSORT 0x00000200 /* DB_DUPSORT */
+#define DB_AM_ENCRYPT 0x00000400 /* Encryption */
+#define DB_AM_FIXEDLEN 0x00000800 /* Fixed-length records */
+#define DB_AM_INMEM 0x00001000 /* In-memory; no sync on close */
+#define DB_AM_INORDER 0x00002000 /* DB_INORDER */
+#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_READ_UNCOMMITTED 0x00100000 /* Support degree 1 isolation */
+#define DB_AM_RECNUM 0x00200000 /* DB_RECNUM */
+#define DB_AM_RECOVER 0x00400000 /* DB opened by recovery routine */
+#define DB_AM_RENUMBER 0x00800000 /* DB_RENUMBER */
+#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. These are only intended for the C API.
+ * For C++, use DbMultiple*Iterator.
+ */
+#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)
+
+/*******************************************************
+ * Access method cursors.
+ *******************************************************/
+struct __dbc {
+ DB *dbp; /* Related DB access method. */
+ DB_TXN *txn; /* Associated transaction. */
+
+ /*
+ * Active/free cursor queues.
+ *
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_ENTRY(__dbc) links;
+ */
+ struct {
+ DBC *tqe_next;
+ DBC **tqe_prev;
+ } links;
+
+ /*
+ * 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. */
+
+ void *lref; /* Reference to default locker. */
+ 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; /* CDB lock held on this cursor. */
+
+ u_int cl_id; /* Remote client id. */
+
+ DBTYPE dbtype; /* Cursor type. */
+
+ DBC_INTERNAL *internal; /* Access method private. */
+
+ /* DBC PUBLIC HANDLE LIST BEGIN */
+ int (*c_close) __P((DBC *));
+ int (*c_count) __P((DBC *, db_recno_t *, u_int32_t));
+ 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));
+ /* DBC PUBLIC HANDLE LIST END */
+
+ /* DBC PRIVATE HANDLE LIST BEGIN */
+ 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 *));
+ int (*c_am_get) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
+ int (*c_am_put) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
+ int (*c_am_writelock) __P((DBC *));
+ /* DBC PRIVATE HANDLE LIST END */
+
+/*
+ * DBC_DONTLOCK and DBC_RECOVER are used during recovery and transaction
+ * abort. If a transaction is being aborted or recovered then DBC_RECOVER
+ * will be set and locking and logging will be disabled on this cursor. If
+ * we are performing a compensating transaction (e.g. free page processing)
+ * then DB_DONTLOCK will be set to inhibit locking, but logging will still
+ * be required. DB_DONTLOCK is also used if the whole database is locked.
+ */
+#define DBC_ACTIVE 0x0001 /* Cursor in use. */
+#define DBC_DONTLOCK 0x0002 /* Don't lock on this cursor. */
+#define DBC_MULTIPLE 0x0004 /* Return Multiple data. */
+#define DBC_MULTIPLE_KEY 0x0008 /* Return Multiple keys and data. */
+#define DBC_OPD 0x0010 /* Cursor references off-page dups. */
+#define DBC_OWN_LID 0x0020 /* Free lock id on destroy. */
+#define DBC_READ_COMMITTED 0x0040 /* Cursor has degree 2 isolation. */
+#define DBC_READ_UNCOMMITTED 0x0080 /* Cursor has degree 1 isolation. */
+#define DBC_RECOVER 0x0100 /* Recovery cursor; don't log/lock. */
+#define DBC_RMW 0x0200 /* Acquire write flag in read op. */
+#define DBC_TRANSIENT 0x0400 /* Cursor is transient. */
+#define DBC_WRITECURSOR 0x0800 /* Cursor may be used to write (CDB). */
+#define DBC_WRITER 0x1000 /* Cursor immediately writing (CDB). */
+ u_int32_t flags;
+};
+
+/* Key range statistics structure */
+struct __key_range {
+ double less;
+ double equal;
+ double greater;
+};
+
+/* Btree/Recno statistics structure. */
+struct __db_bt_stat {
+ u_int32_t bt_magic; /* Magic number. */
+ u_int32_t bt_version; /* Version number. */
+ u_int32_t bt_metaflags; /* Metadata flags. */
+ u_int32_t bt_nkeys; /* Number of unique keys. */
+ u_int32_t bt_ndata; /* Number of data items. */
+ u_int32_t bt_pagesize; /* Page size. */
+ u_int32_t bt_minkey; /* Minkey value. */
+ u_int32_t bt_re_len; /* Fixed-length record length. */
+ u_int32_t bt_re_pad; /* Fixed-length record pad. */
+ u_int32_t bt_levels; /* Tree levels. */
+ u_int32_t bt_int_pg; /* Internal pages. */
+ u_int32_t bt_leaf_pg; /* Leaf pages. */
+ u_int32_t bt_dup_pg; /* Duplicate pages. */
+ u_int32_t bt_over_pg; /* Overflow pages. */
+ u_int32_t bt_empty_pg; /* Empty pages. */
+ u_int32_t bt_free; /* Pages on the free list. */
+ u_int32_t bt_int_pgfree; /* Bytes free in internal pages. */
+ u_int32_t bt_leaf_pgfree; /* Bytes free in leaf pages. */
+ u_int32_t bt_dup_pgfree; /* Bytes free in duplicate pages. */
+ u_int32_t bt_over_pgfree; /* Bytes free in overflow pages. */
+};
+
+struct __db_compact {
+ /* Input Parameters. */
+ u_int32_t compact_fillpercent; /* Desired fillfactor: 1-100 */
+ db_timeout_t compact_timeout; /* Lock timeout. */
+ u_int32_t compact_pages; /* Max pages to process. */
+ /* Output Stats. */
+ u_int32_t compact_pages_free; /* Number of pages freed. */
+ u_int32_t compact_pages_examine; /* Number of pages examine. */
+ u_int32_t compact_levels; /* Number of levels removed. */
+ u_int32_t compact_deadlock; /* Number of deadlocks. */
+ db_pgno_t compact_pages_truncated; /* Pages truncated to OS. */
+ /* Internal. */
+ db_pgno_t compact_truncate; /* Page number for truncation */
+};
+
+/* Hash statistics structure. */
+struct __db_h_stat {
+ u_int32_t hash_magic; /* Magic number. */
+ u_int32_t hash_version; /* Version number. */
+ u_int32_t hash_metaflags; /* Metadata flags. */
+ 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_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. */
+ u_int32_t hash_bfree; /* Bytes free on bucket pages. */
+ u_int32_t hash_bigpages; /* Number of big key/data pages. */
+ u_int32_t hash_big_bfree; /* Bytes free on big item pages. */
+ u_int32_t hash_overflows; /* Number of overflow pages. */
+ u_int32_t hash_ovfl_free; /* Bytes free on ovfl pages. */
+ u_int32_t hash_dup; /* Number of dup pages. */
+ u_int32_t hash_dup_free; /* Bytes free on duplicate 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_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. */
+};
+
+/*******************************************************
+ * Environment.
+ *******************************************************/
+#define DB_REGION_MAGIC 0x120897 /* Environment magic number. */
+
+/* Database Environment handle. */
+struct __db_env {
+ /*******************************************************
+ * Public: owned by the application.
+ *******************************************************/
+ /* Error message callback. */
+ void (*db_errcall) __P((const DB_ENV *, const char *, const char *));
+ FILE *db_errfile; /* Error message file stream. */
+ const char *db_errpfx; /* Error message prefix. */
+
+ FILE *db_msgfile; /* Statistics message file stream. */
+ /* Statistics message callback. */
+ void (*db_msgcall) __P((const DB_ENV *, const char *));
+
+ /* Other Callbacks. */
+ void (*db_feedback) __P((DB_ENV *, int, int));
+ void (*db_paniccall) __P((DB_ENV *, int));
+ void (*db_event_func) __P((DB_ENV *, u_int32_t, void *));
+
+ /* App-specified alloc functions. */
+ void *(*db_malloc) __P((size_t));
+ void *(*db_realloc) __P((void *, size_t));
+ void (*db_free) __P((void *));
+
+ /* Application callback to copy data to/from a custom data source. */
+#define DB_USERCOPY_GETDATA 0x0001
+#define DB_USERCOPY_SETDATA 0x0002
+ int (*dbt_usercopy)
+ __P((DBT *, u_int32_t, void *, u_int32_t, u_int32_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_DEADLOCK 0x0001 /* Deadlock detection information. */
+#define DB_VERB_RECOVERY 0x0002 /* Recovery information. */
+#define DB_VERB_REGISTER 0x0004 /* Dump waits-for table. */
+#define DB_VERB_REPLICATION 0x0008 /* Replication information. */
+#define DB_VERB_WAITSFOR 0x0010 /* Dump waits-for table. */
+ u_int32_t verbose; /* Verbose output. */
+
+ void *app_private; /* Application-private handle. */
+
+ int (*app_dispatch) /* User-specified recovery dispatch. */
+ __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+
+ /* Mutexes. */
+ u_int32_t mutex_align; /* Mutex alignment */
+ u_int32_t mutex_cnt; /* Number of mutexes to configure */
+ u_int32_t mutex_inc; /* Number of mutexes to add */
+ u_int32_t mutex_tas_spins;/* Test-and-set spin count */
+
+ struct {
+ int alloc_id; /* Allocation ID argument */
+ u_int32_t flags; /* Flags argument */
+ } *mutex_iq; /* Initial mutexes queue */
+ u_int mutex_iq_next; /* Count of initial mutexes */
+ u_int mutex_iq_max; /* Maximum initial mutexes */
+
+ /* Locking. */
+ u_int8_t *lk_conflicts; /* Two dimensional conflict matrix. */
+ int 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. */
+
+ /* Logging. */
+ u_int32_t lg_bsize; /* Buffer size. */
+ u_int32_t lg_size; /* Log file size. */
+ u_int32_t lg_regionmax; /* Region size. */
+ int lg_filemode; /* Log file permission mode. */
+
+ /* Memory pool. */
+ u_int32_t mp_gbytes; /* Cachesize: GB. */
+ u_int32_t mp_bytes; /* Cachesize: Bytes. */
+ u_int mp_ncache; /* Number of cache regions. */
+ size_t mp_mmapsize; /* Maximum file size for mmap. */
+ int mp_maxopenfd; /* Maximum open file descriptors. */
+ int mp_maxwrite; /* Maximum buffers to write. */
+ int /* Sleep after writing max buffers. */
+ mp_maxwrite_sleep;
+
+ /* 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. */
+
+ /* Thread tracking. */
+ u_int32_t thr_nbucket; /* Number of hash buckets. */
+ u_int32_t thr_max; /* Max before garbage collection. */
+ void *thr_hashtab; /* Hash table of DB_THREAD_INFO. */
+
+ /*******************************************************
+ * Private: owned by DB.
+ *******************************************************/
+ pid_t pid_cache; /* Cached process ID. */
+
+ /* User files, paths. */
+ char *db_home; /* Database home. */
+ char *db_log_dir; /* Database log file directory. */
+ char *db_tmp_dir; /* Database tmp file directory. */
+
+ char **db_data_dir; /* Database data file directories. */
+ int data_cnt; /* Database data file slots. */
+ int data_next; /* Next Database data file slot. */
+
+ int db_mode; /* Default open permissions. */
+ int dir_mode; /* Intermediate directory perms. */
+ void *env_lref; /* Locker in non-threaded handles. */
+ u_int32_t open_flags; /* Flags passed to DB_ENV->open. */
+
+ void *reginfo; /* REGINFO structure reference. */
+ DB_FH *lockfhp; /* fcntl(2) locking file handle. */
+
+ DB_FH *registry; /* DB_REGISTER file handle. */
+ u_int32_t registry_off; /*
+ * Offset of our slot. We can't use
+ * off_t because its size depends on
+ * build settings.
+ */
+
+ /* Return IDs. */
+ void (*thread_id) __P((DB_ENV *, pid_t *, db_threadid_t *));
+ /* Return if IDs alive. */
+ int (*is_alive)
+ __P((DB_ENV *, pid_t, db_threadid_t, u_int32_t));
+ /* Format IDs into a string. */
+ char *(*thread_id_string)
+ __P((DB_ENV *, pid_t, db_threadid_t, char *));
+
+ 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. */
+
+ void *cl_handle; /* RPC: remote client handle. */
+ u_int cl_id; /* RPC: remote client env id. */
+
+ int db_ref; /* DB reference count. */
+
+ long shm_key; /* shmget(2) key. */
+
+ /*
+ * 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.
+ * TAILQ_HEAD(__dblist, __db);
+ */
+ db_mutex_t mtx_dblist; /* Mutex. */
+ struct __dblist {
+ struct __db *tqh_first;
+ struct __db **tqh_last;
+ } dblist;
+
+ /*
+ * 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. */
+
+ char *passwd; /* Cryptography support. */
+ size_t passwd_len;
+ void *crypto_handle; /* Primary handle. */
+ db_mutex_t mtx_mt; /* Mersenne Twister mutex. */
+ int mti; /* Mersenne Twister index. */
+ u_long *mt; /* Mersenne Twister state vector. */
+
+ /* API-private structure. */
+ void *api1_internal; /* C++, Perl API private */
+ void *api2_internal; /* Java API private */
+
+ DB_LOCKTAB *lk_handle; /* Lock handle. */
+ DB_LOG *lg_handle; /* Log handle. */
+ DB_MPOOL *mp_handle; /* Mpool handle. */
+ DB_MUTEXMGR *mutex_handle; /* Mutex handle. */
+ DB_REP *rep_handle; /* Replication handle. */
+ DB_TXNMGR *tx_handle; /* Txn handle. */
+
+ /* DB_ENV PUBLIC HANDLE LIST BEGIN */
+ int (*cdsgroup_begin) __P((DB_ENV *, DB_TXN **));
+ 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 (*failchk) __P((DB_ENV *, u_int32_t));
+ int (*fileid_reset) __P((DB_ENV *, const char *, u_int32_t));
+ int (*get_cachesize) __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
+ int (*get_data_dirs) __P((DB_ENV *, const char ***));
+ int (*get_encrypt_flags) __P((DB_ENV *, u_int32_t *));
+ void (*get_errfile) __P((DB_ENV *, FILE **));
+ void (*get_errpfx) __P((DB_ENV *, const char **));
+ int (*get_flags) __P((DB_ENV *, u_int32_t *));
+ int (*get_home) __P((DB_ENV *, const char **));
+ int (*get_lg_bsize) __P((DB_ENV *, u_int32_t *));
+ int (*get_lg_dir) __P((DB_ENV *, const char **));
+ int (*get_lg_filemode) __P((DB_ENV *, int *));
+ int (*get_lg_max) __P((DB_ENV *, u_int32_t *));
+ int (*get_lg_regionmax) __P((DB_ENV *, u_int32_t *));
+ int (*get_lk_conflicts) __P((DB_ENV *, const u_int8_t **, int *));
+ int (*get_lk_detect) __P((DB_ENV *, u_int32_t *));
+ int (*get_lk_max_lockers) __P((DB_ENV *, u_int32_t *));
+ int (*get_lk_max_locks) __P((DB_ENV *, u_int32_t *));
+ int (*get_lk_max_objects) __P((DB_ENV *, u_int32_t *));
+ int (*get_mp_max_openfd) __P((DB_ENV *, int *));
+ int (*get_mp_max_write) __P((DB_ENV *, int *, int *));
+ int (*get_mp_mmapsize) __P((DB_ENV *, size_t *));
+ void (*get_msgfile) __P((DB_ENV *, FILE **));
+ int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
+ int (*get_shm_key) __P((DB_ENV *, long *));
+ int (*get_timeout) __P((DB_ENV *, db_timeout_t *, u_int32_t));
+ int (*get_tmp_dir) __P((DB_ENV *, const char **));
+ int (*get_tx_max) __P((DB_ENV *, u_int32_t *));
+ int (*get_tx_timestamp) __P((DB_ENV *, time_t *));
+ int (*get_verbose) __P((DB_ENV *, u_int32_t, int *));
+ int (*is_bigendian) __P((void));
+ 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_id_free) __P((DB_ENV *, u_int32_t));
+ int (*lock_put) __P((DB_ENV *, DB_LOCK *));
+ int (*lock_stat) __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
+ int (*lock_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*lock_vec) __P((DB_ENV *,
+ u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
+ 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_printf) __P((DB_ENV *, DB_TXN *, const char *, ...));
+ 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));
+ int (*log_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*lsn_reset) __P((DB_ENV *, const char *, u_int32_t));
+ 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_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*memp_sync) __P((DB_ENV *, DB_LSN *));
+ int (*memp_trickle) __P((DB_ENV *, int, int *));
+ int (*mutex_alloc) __P((DB_ENV *, u_int32_t, db_mutex_t *));
+ int (*mutex_free) __P((DB_ENV *, db_mutex_t));
+ int (*mutex_get_align) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_increment) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_max) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_tas_spins) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_lock) __P((DB_ENV *, db_mutex_t));
+ int (*mutex_set_align) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_increment) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_max) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_tas_spins) __P((DB_ENV *, u_int32_t));
+ int (*mutex_stat) __P((DB_ENV *, DB_MUTEX_STAT **, u_int32_t));
+ int (*mutex_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*mutex_unlock) __P((DB_ENV *, db_mutex_t));
+ int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
+ int (*remove) __P((DB_ENV *, const char *, u_int32_t));
+ int (*rep_elect)
+ __P((DB_ENV *, int, int, int *, u_int32_t));
+ int (*rep_flush) __P((DB_ENV *));
+ int (*rep_get_config) __P((DB_ENV *, u_int32_t, int *));
+ int (*rep_get_limit) __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ int (*rep_get_nsites) __P((DB_ENV *, int *));
+ int (*rep_get_priority) __P((DB_ENV *, int *));
+ int (*rep_get_timeout) __P((DB_ENV *, int, u_int32_t *));
+ int (*rep_process_message)
+ __P((DB_ENV *, DBT *, DBT *, int *, DB_LSN *));
+ int (*rep_set_config) __P((DB_ENV *, u_int32_t, int));
+ int (*rep_set_limit) __P((DB_ENV *, u_int32_t, u_int32_t));
+ int (*rep_set_nsites) __P((DB_ENV *, int));
+ int (*rep_set_priority) __P((DB_ENV *, int));
+ int (*rep_set_timeout) __P((DB_ENV *, int, db_timeout_t));
+ int (*rep_set_transport) __P((DB_ENV *, int, int (*)(DB_ENV *,
+ const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)));
+ int (*rep_start) __P((DB_ENV *, DBT *, u_int32_t));
+ int (*rep_stat) __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
+ int (*rep_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*rep_sync) __P((DB_ENV *, u_int32_t));
+ int (*repmgr_add_remote_site) __P((DB_ENV *, const char *, u_int,
+ int *, u_int32_t));
+ int (*repmgr_get_ack_policy) __P((DB_ENV *, int *));
+ int (*repmgr_set_ack_policy) __P((DB_ENV *, int));
+ int (*repmgr_set_local_site) __P((DB_ENV *, const char *, u_int,
+ u_int32_t));
+ int (*repmgr_site_list) __P((DB_ENV *, u_int *,
+ DB_REPMGR_SITE **));
+ int (*repmgr_start) __P((DB_ENV *, int, 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 (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ int (*set_data_dir) __P((DB_ENV *, const char *));
+ int (*set_encrypt) __P((DB_ENV *, const char *, u_int32_t));
+ void (*set_errcall) __P((DB_ENV *,
+ void (*)(const DB_ENV *, const char *, const char *)));
+ void (*set_errfile) __P((DB_ENV *, FILE *));
+ void (*set_errpfx) __P((DB_ENV *, const char *));
+ int (*set_event_notify)
+ __P((DB_ENV *, void (*)(DB_ENV *, u_int32_t, void *)));
+ int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+ int (*set_flags) __P((DB_ENV *, u_int32_t, int));
+ int (*set_intermediate_dir) __P((DB_ENV *, int, u_int32_t));
+ int (*set_isalive) __P((DB_ENV *,
+ int (*)(DB_ENV *, pid_t, db_threadid_t, u_int32_t)));
+ int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
+ int (*set_lg_dir) __P((DB_ENV *, const char *));
+ int (*set_lg_filemode) __P((DB_ENV *, int));
+ int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ int (*set_lg_regionmax) __P((DB_ENV *, u_int32_t));
+ 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_lockers) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
+ int (*set_mp_max_openfd) __P((DB_ENV *, int));
+ int (*set_mp_max_write) __P((DB_ENV *, int, int));
+ int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ void (*set_msgcall)
+ __P((DB_ENV *, void (*)(const DB_ENV *, const char *)));
+ void (*set_msgfile) __P((DB_ENV *, FILE *));
+ int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
+ int (*set_rep_request) __P((DB_ENV *, u_int32_t, u_int32_t));
+ int (*set_rpc_server)
+ __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+ int (*set_shm_key) __P((DB_ENV *, long));
+ int (*set_thread_count) __P((DB_ENV *, u_int32_t));
+ int (*set_thread_id) __P((DB_ENV *,
+ void (*)(DB_ENV *, pid_t *, db_threadid_t *)));
+ int (*set_thread_id_string) __P((DB_ENV *,
+ char *(*)(DB_ENV *, pid_t, db_threadid_t, char *)));
+ int (*set_timeout) __P((DB_ENV *, db_timeout_t, u_int32_t));
+ int (*set_tmp_dir) __P((DB_ENV *, const char *));
+ int (*set_tx_max) __P((DB_ENV *, u_int32_t));
+ int (*set_tx_timestamp) __P((DB_ENV *, time_t *));
+ int (*set_verbose) __P((DB_ENV *, u_int32_t, int));
+ int (*stat_print) __P((DB_ENV *, u_int32_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 (*txn_stat_print) __P((DB_ENV *, u_int32_t));
+ /* DB_ENV PUBLIC HANDLE LIST END */
+
+ /* DB_ENV PRIVATE HANDLE LIST BEGIN */
+ int (*prdbt) __P((DBT *,
+ int, const char *, void *, int (*)(void *, const void *), int));
+ /* DB_ENV PRIVATE HANDLE LIST END */
+
+#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
+#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
+#define DB_TEST_POSTDESTROY 3 /* after destroy op */
+#define DB_TEST_POSTLOG 4 /* after logging all pages */
+#define DB_TEST_POSTLOGMETA 5 /* after logging meta in btree */
+#define DB_TEST_POSTOPEN 6 /* after __os_open */
+#define DB_TEST_POSTSYNC 7 /* after syncing the log */
+#define DB_TEST_PREDESTROY 8 /* before destroy op */
+#define DB_TEST_PREOPEN 9 /* before __os_open */
+#define DB_TEST_RECYCLE 10 /* test rep and txn_recycle */
+#define DB_TEST_SUBDB_LOCKS 11 /* subdb locking tests */
+ int test_abort; /* Abort value for testing. */
+ int test_check; /* Checkpoint value for testing. */
+ int test_copy; /* Copy value for testing. */
+
+#define DB_ENV_AUTO_COMMIT 0x00000001 /* DB_AUTO_COMMIT. */
+#define DB_ENV_CDB 0x00000002 /* DB_INIT_CDB. */
+#define DB_ENV_CDB_ALLDB 0x00000004 /* CDB environment wide locking. */
+#define DB_ENV_CREATE 0x00000008 /* DB_CREATE set. */
+#define DB_ENV_DBLOCAL 0x00000010 /* Environment for a private DB. */
+#define DB_ENV_DIRECT_DB 0x00000020 /* DB_DIRECT_DB set. */
+#define DB_ENV_DIRECT_LOG 0x00000040 /* DB_DIRECT_LOG set. */
+#define DB_ENV_DSYNC_DB 0x00000080 /* DB_DSYNC_DB set. */
+#define DB_ENV_DSYNC_LOG 0x00000100 /* DB_DSYNC_LOG set. */
+#define DB_ENV_FATAL 0x00000200 /* Doing fatal recovery in env. */
+#define DB_ENV_LOCKDOWN 0x00000400 /* DB_LOCKDOWN set. */
+#define DB_ENV_LOG_AUTOREMOVE 0x00000800 /* DB_LOG_AUTOREMOVE set. */
+#define DB_ENV_LOG_INMEMORY 0x00001000 /* DB_LOG_INMEMORY set. */
+#define DB_ENV_MULTIVERSION 0x00002000 /* DB_MULTIVERSION set. */
+#define DB_ENV_NOLOCKING 0x00004000 /* DB_NOLOCKING set. */
+#define DB_ENV_NOMMAP 0x00008000 /* DB_NOMMAP set. */
+#define DB_ENV_NOPANIC 0x00010000 /* Okay if panic set. */
+#define DB_ENV_OPEN_CALLED 0x00020000 /* DB_ENV->open called. */
+#define DB_ENV_OVERWRITE 0x00040000 /* DB_OVERWRITE set. */
+#define DB_ENV_PRIVATE 0x00080000 /* DB_PRIVATE set. */
+#define DB_ENV_REGION_INIT 0x00100000 /* DB_REGION_INIT set. */
+#define DB_ENV_RPCCLIENT 0x00200000 /* DB_RPCCLIENT set. */
+#define DB_ENV_RPCCLIENT_GIVEN 0x00400000 /* User-supplied RPC client struct */
+#define DB_ENV_SYSTEM_MEM 0x00800000 /* DB_SYSTEM_MEM set. */
+#define DB_ENV_THREAD 0x01000000 /* DB_THREAD set. */
+#define DB_ENV_TIME_NOTGRANTED 0x02000000 /* DB_TIME_NOTGRANTED set. */
+#define DB_ENV_TXN_NOSYNC 0x04000000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_TXN_SNAPSHOT 0x08000000 /* DB_TXN_SNAPSHOT set. */
+#define DB_ENV_TXN_WRITE_NOSYNC 0x10000000 /* DB_TXN_WRITE_NOSYNC set. */
+#define DB_ENV_YIELDCPU 0x20000000 /* DB_YIELDCPU set. */
+ u_int32_t flags;
+};
+
+#ifndef DB_DBM_HSEARCH
+#define DB_DBM_HSEARCH 0 /* No historic interfaces by default. */
+#endif
+#if DB_DBM_HSEARCH != 0
+/*******************************************************
+ * Dbm/Ndbm historic interfaces.
+ *******************************************************/
+typedef struct __db DBM;
+
+#define DBM_INSERT 0 /* Flags to dbm_store(). */
+#define DBM_REPLACE 1
+
+/*
+ * The DB support for ndbm(3) always appends this suffix to the
+ * file name to avoid overwriting the user's original database.
+ */
+#define DBM_SUFFIX ".db"
+
+#if defined(_XPG4_2)
+typedef struct {
+ char *dptr;
+ size_t dsize;
+} datum;
+#else
+typedef struct {
+ char *dptr;
+ int dsize;
+} datum;
+#endif
+
+/*
+ * Translate NDBM calls into DB calls so that DB doesn't step on the
+ * application's name space.
+ */
+#define dbm_clearerr(a) __db_ndbm_clearerr(a)
+#define dbm_close(a) __db_ndbm_close(a)
+#define dbm_delete(a, b) __db_ndbm_delete(a, b)
+#define dbm_dirfno(a) __db_ndbm_dirfno(a)
+#define dbm_error(a) __db_ndbm_error(a)
+#define dbm_fetch(a, b) __db_ndbm_fetch(a, b)
+#define dbm_firstkey(a) __db_ndbm_firstkey(a)
+#define dbm_nextkey(a) __db_ndbm_nextkey(a)
+#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)
+
+/*
+ * 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.
+ *******************************************************/
+typedef enum {
+ FIND, ENTER
+} ACTION;
+
+typedef struct entry {
+ char *key;
+ char *data;
+} ENTRY;
+
+#define hcreate(a) __db_hcreate(a)
+#define hdestroy __db_hdestroy
+#define hsearch(a, b) __db_hsearch(a, b)
+
+#endif /* DB_DBM_HSEARCH */
+
+#if defined(__cplusplus)
+}
+#endif
+
+/* Restore default compiler warnings */
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+#endif /* !_DB_H_ */
+
+/* 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
+
+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_ftruncate __P((int (*)(int, off_t)));
+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_pread __P((ssize_t (*)(int, void *, size_t, off_t)));
+int db_env_set_func_pwrite __P((ssize_t (*)(int, const void *, size_t, off_t)));
+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, off_t, 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_sequence_create __P((DB_SEQUENCE **, DB *, u_int32_t));
+#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_delete __P((datum));
+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_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_windows/db_archive.dsp b/db/build_windows/db_archive.dsp
new file mode 100644
index 000000000..4e9dc7633
--- /dev/null
+++ b/db/build_windows/db_archive.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_archive" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_archive - Win32 Debug
+!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_archive.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_archive.mak" CFG="db_archive - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - x64 Release IA64" (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)" == "db_archive - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_archive"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_archive - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_archive"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_archive - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_archive"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_archive"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_archive - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_archive"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_archive - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_archive"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_archive - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_archive"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_archive - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_archive"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_archive - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_archive"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_archive"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_archive - Win32 Release"
+# Name "db_archive - Win32 Debug"
+# Name "db_archive - Win32 ASCII Debug"
+# Name "db_archive - Win32 ASCII Release"
+# Name "db_archive - x64 Debug AMD64"
+# Name "db_archive - x64 Release AMD64"
+# Name "db_archive - x64 Debug IA64"
+# Name "db_archive - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_archive\db_archive.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_checkpoint.dsp b/db/build_windows/db_checkpoint.dsp
new file mode 100644
index 000000000..83bec7d2f
--- /dev/null
+++ b/db/build_windows/db_checkpoint.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_checkpoint" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_checkpoint - Win32 Debug
+!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_checkpoint.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_checkpoint.mak" CFG="db_checkpoint - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - x64 Release IA64" (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)" == "db_checkpoint - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_checkpoint"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_checkpoint"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_checkpoint"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_checkpoint"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_checkpoint"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_checkpoint"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_checkpoint"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_checkpoint"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_checkpoint - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_checkpoint"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_checkpoint"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_checkpoint - Win32 Release"
+# Name "db_checkpoint - Win32 Debug"
+# Name "db_checkpoint - Win32 ASCII Debug"
+# Name "db_checkpoint - Win32 ASCII Release"
+# Name "db_checkpoint - x64 Debug AMD64"
+# Name "db_checkpoint - x64 Release AMD64"
+# Name "db_checkpoint - x64 Debug IA64"
+# Name "db_checkpoint - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_checkpoint\db_checkpoint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_config.h b/db/build_windows/db_config.h
new file mode 100644
index 000000000..8e182ce63
--- /dev/null
+++ b/db/build_windows/db_config.h
@@ -0,0 +1,479 @@
+/* DO NOT EDIT: automatically built by dist/s_windows. */
+/* 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. */
+#if defined(_DEBUG)
+#if !defined(DEBUG)
+#define DEBUG 1
+#endif
+#endif
+
+/* Define to 1 if you want a version that logs read operations. */
+/* #undef DEBUG_ROP */
+
+/* Define to 1 if you want a version that logs write operations. */
+/* #undef DEBUG_WOP */
+
+/* Define to 1 if you want a version with run-time diagnostic checking. */
+/* #undef DIAGNOSTIC */
+
+/* Define to 1 if 64-bit types are available. */
+#define HAVE_64BIT_TYPES 1
+
+/* Define to 1 if you have the `abort' function. */
+#define HAVE_ABORT 1
+
+/* Define to 1 if you have the `atoi' function. */
+#define HAVE_ATOI 1
+
+/* Define to 1 if you have the `atol' function. */
+#define HAVE_ATOL 1
+
+/* Define to 1 if you have the `clock_gettime' function. */
+/* #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 `ctime_r' function. */
+/* #undef HAVE_CTIME_R */
+
+/* Define to 1 if ctime_r takes a buffer length as a third argument. */
+/* #undef HAVE_CTIME_R_3ARG */
+
+/* Define to 1 if you have the `directio' function. */
+/* #undef HAVE_DIRECTIO */
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+/* #undef HAVE_DIRENT_H */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H */
+
+/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
+#define HAVE_EXIT_SUCCESS 1
+
+/* Define to 1 if you have the `fchmod' function. */
+/* #undef HAVE_FCHMOD */
+
+/* Define to 1 if you have the `fcntl' function. */
+/* #undef HAVE_FCNTL */
+
+/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
+/* #undef HAVE_FCNTL_F_SETFD */
+
+/* Define to 1 if you have the `fdatasync' function. */
+/* #undef HAVE_FDATASYNC */
+
+/* Define to 1 if allocated filesystem blocks are not zeroed. */
+#define HAVE_FILESYSTEM_NOTZERO 1
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `getcwd' function. */
+#define HAVE_GETCWD 1
+
+/* Define to 1 if you have the `getenv' function. */
+#define HAVE_GETENV 1
+
+/* Define to 1 if you have the `getopt' function. */
+/*
+ * Windows does not have the getopt function, but as Berkeley DB example
+ * programs require getopt, we handle it outside of this configuration.
+ */
+#define HAVE_GETOPT 1
+
+/* 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 */
+
+/* Define to 1 if you have the `isalpha' function. */
+#define HAVE_ISALPHA 1
+
+/* Define to 1 if you have the `isdigit' function. */
+#define HAVE_ISDIGIT 1
+
+/* Define to 1 if you have the `isprint' function. */
+#define HAVE_ISPRINT 1
+
+/* Define to 1 if you have the `isspace' function. */
+#define HAVE_ISSPACE 1
+
+/* Define to 1 if you have the `memcmp' function. */
+#define HAVE_MEMCMP 1
+
+/* Define to 1 if you have the `memcpy' function. */
+#define HAVE_MEMCPY 1
+
+/* 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 to 1 if you have the `mlock' function. */
+/* #undef HAVE_MLOCK */
+
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the `mprotect' function. */
+/* #undef HAVE_MPROTECT */
+
+/* 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 */
+
+/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
+/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
+
+/* 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 to 1 if mutexes hold system resources. */
+/* #undef HAVE_MUTEX_SYSTEM_RESOURCES */
+
+/* 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 */
+
+/* Define to 1 to use the UTS compiler and assembly language mutexes. */
+/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
+
+/* Define to 1 to use VMS mutexes. */
+/* #undef HAVE_MUTEX_VMS */
+
+/* Define to 1 to use VxWorks mutexes. */
+/* #undef HAVE_MUTEX_VXWORKS */
+
+/* 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 amd64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
+
+/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+/* #undef HAVE_NDIR_H */
+
+/* Define to 1 if you have the O_DIRECT flag. */
+/* #undef HAVE_O_DIRECT */
+
+/* Define to 1 if you have the `pread' function. */
+/* #undef HAVE_PREAD */
+
+/* Define to 1 if you have the `printf' function. */
+#define HAVE_PRINTF 1
+
+/* Define to 1 if you have the `pstat_getdynamic' function. */
+/* #undef HAVE_PSTAT_GETDYNAMIC */
+
+/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
+/* #undef HAVE_PTHREAD_API */
+
+/* Define to 1 if you have the `pthread_yield' function. */
+/* #undef HAVE_PTHREAD_YIELD */
+
+/* Define to 1 if you have the `pwrite' function. */
+/* #undef HAVE_PWRITE */
+
+/* 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 to 1 if you have the `raise' function. */
+#define HAVE_RAISE 1
+
+/* Define to 1 if you have the `rand' function. */
+#define HAVE_RAND 1
+
+/* Define to 1 if building replication support. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_REPLICATION 1
+#endif
+
+/* Define to 1 if building the Berkeley DB replication framework. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_REPLICATION_THREADS 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 to 1 if you have the `select' function. */
+/* #undef HAVE_SELECT */
+
+/* Define to 1 if you have the `shmget' function. */
+/* #undef HAVE_SHMGET */
+
+/* Define to 1 if you have the `sigaction' function. */
+/* #undef HAVE_SIGACTION */
+
+/* Define to 1 if thread identifier type db_threadid_t is integral. */
+#define HAVE_SIMPLE_THREAD_TYPE 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the `stat' function. */
+#define HAVE_STAT 1
+
+/* Define to 1 if building statistics support. */
+#define HAVE_STATISTICS 1
+
+/* 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 to 1 if you have the `strcat' function. */
+#define HAVE_STRCAT 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncat' function. */
+#define HAVE_STRNCAT 1
+
+/* Define to 1 if you have the `strncmp' function. */
+#define HAVE_STRNCMP 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the `strsep' function. */
+/* #undef HAVE_STRSEP */
+
+/* Define to 1 if you have the `strtol' function. */
+#define HAVE_STRTOL 1
+
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
+
+/* 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 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. */
+#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 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. */
+#define HAVE_SYS_STAT_H 1
+
+/* 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. */
+#define HAVE_SYS_TYPES_H 1
+
+/* 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. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_VERIFY 1
+#endif
+
+/* 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 the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
+
+/* 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.5.20"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "db-4.5.20"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "4.5.20"
+
+/* 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 uninitialized 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 */
+
+#include "clib_port.h"
+#include "win_db.h"
+
+/*
+ * 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 compliance from this point on.
+ */
+#define __STDC__ 1
diff --git a/db/build_windows/db_cxx.h b/db/build_windows/db_cxx.h
new file mode 100644
index 000000000..23d5dfc7f
--- /dev/null
+++ b/db/build_windows/db_cxx.h
@@ -0,0 +1,1182 @@
+/* DO NOT EDIT: automatically built by dist/s_windows. */
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db_cxx.in,v 12.28 2006/09/13 14:53:37 mjc Exp $
+ */
+
+#ifndef _DB_CXX_H_
+#define _DB_CXX_H_
+//
+// C++ assumptions:
+//
+// To ensure portability to many platforms, both new and old, we make
+// few assumptions about the C++ compiler and library. For example,
+// we do 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, to do so, use the DB_CXX_NO_EXCEPTIONS flags
+// with the DbEnv or Db constructor.
+//
+// C++ naming conventions:
+//
+// - All top level class names start with Db.
+// - All class members start with lower case letter.
+// - All private data members are suffixed with underscore.
+// - Use underscores to divide names into multiple words.
+// - Simple data accessors are named with get_ or set_ prefix.
+// - All method names are taken from names of functions in the C
+// layer of db (usually by dropping a prefix like "db_").
+// These methods have the same argument types and order,
+// other than dropping the explicit arg that acts as "this".
+//
+// As a rule, each DbFoo object has exactly one underlying DB_FOO struct
+// (defined in db.h) associated with it. In some cases, we inherit directly
+// from the DB_FOO structure to make this relationship explicit. Often,
+// the underlying C layer allocates and deallocates these structures, so
+// there is no easy way to add any data to the DbFoo class. When you see
+// a comment about whether data is permitted to be added, this is what
+// is going on. Of course, if we need to add data to such C++ classes
+// in the future, we will arrange to have an indirect pointer to the
+// DB_FOO struct (as some of the classes already have).
+//
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// Forward declarations
+//
+
+#include <stdarg.h>
+
+#define HAVE_CXX_STDHEADERS 1
+#ifdef HAVE_CXX_STDHEADERS
+#include <iostream>
+#include <exception>
+#define __DB_STD(x) std::x
+#else
+#include <iostream.h>
+#include <exception.h>
+#define __DB_STD(x) x
+#endif
+
+#include "db.h"
+
+class Db; // forward
+class Dbc; // forward
+class DbEnv; // forward
+class DbInfo; // forward
+class DbLock; // forward
+class DbLogc; // forward
+class DbLsn; // forward
+class DbMpoolFile; // forward
+class DbPreplist; // forward
+class DbSequence; // forward
+class Dbt; // forward
+class DbTxn; // forward
+
+class DbMultipleIterator; // forward
+class DbMultipleKeyDataIterator; // forward
+class DbMultipleRecnoDataIterator; // forward
+class DbMultipleDataIterator; // forward
+
+class DbException; // forward
+class DbDeadlockException; // forward
+class DbLockNotGrantedException; // forward
+class DbMemoryException; // forward
+class DbRepHandleDeadException; // forward
+class DbRunRecoveryException; // forward
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// Turn off inappropriate compiler warnings
+//
+
+#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>
+//
+// 4514: unreferenced inline function has been removed
+// certain include files in MSVC define methods that are not called
+//
+#pragma warning(push)
+#pragma warning(disable: 4201 4514)
+
+#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,
+// we allow you to declare the callbacks in C++ or C (or an extern "C"
+// block) as you wish. See the set methods for the callbacks for
+// the choices.
+//
+extern "C" {
+ typedef void * (*db_malloc_fcn_type)
+ (size_t);
+ typedef void * (*db_realloc_fcn_type)
+ (void *, size_t);
+ typedef void (*db_free_fcn_type)
+ (void *);
+ typedef int (*bt_compare_fcn_type) /*C++ version available*/
+ (DB *, const DBT *, const DBT *);
+ typedef size_t (*bt_prefix_fcn_type) /*C++ version available*/
+ (DB *, const DBT *, const DBT *);
+ typedef int (*dup_compare_fcn_type) /*C++ version available*/
+ (DB *, const DBT *, const DBT *);
+ typedef u_int32_t (*h_hash_fcn_type) /*C++ version available*/
+ (DB *, const void *, u_int32_t);
+ 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);
+}
+
+//
+// Represents a database table = a set of keys with associated values.
+//
+class _exported Db
+{
+ friend class DbEnv;
+
+public:
+ Db(DbEnv*, u_int32_t); // Create a Db object.
+ virtual ~Db(); // Calls close() if the user hasn't.
+
+ // These methods exactly match those in the C interface.
+ //
+ virtual int associate(DbTxn *txn, Db *secondary,
+ int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
+ u_int32_t flags);
+ virtual int close(u_int32_t flags);
+ virtual int compact(DbTxn *txnid, Dbt *start, Dbt *stop,
+ DB_COMPACT *c_data, u_int32_t flags, Dbt *end);
+ 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 *, ...);
+ virtual int fd(int *fdp);
+ 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 get_transactional();
+ virtual int join(Dbc **curslist, Dbc **dbcp, u_int32_t flags);
+ virtual int key_range(DbTxn *, Dbt *, DB_KEY_RANGE *, u_int32_t);
+ virtual int open(DbTxn *txnid,
+ const char *, const char *subname, DBTYPE, u_int32_t, int);
+ virtual int pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Dbt *data,
+ u_int32_t flags);
+ virtual int put(DbTxn *, Dbt *, Dbt *, u_int32_t);
+ virtual int remove(const char *, const char *, u_int32_t);
+ virtual int rename(const char *, const char *, 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 set_append_recno(int (*)(Db *, Dbt *, db_recno_t));
+ virtual int set_bt_compare(bt_compare_fcn_type); /*deprecated*/
+ virtual int set_bt_compare(int (*)(Db *, const Dbt *, const Dbt *));
+ 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_dup_compare(dup_compare_fcn_type); /*deprecated*/
+ virtual int set_dup_compare(int (*)(Db *, const Dbt *, const Dbt *));
+ virtual int get_encrypt_flags(u_int32_t *);
+ virtual int set_encrypt(const char *, u_int32_t);
+ virtual void set_errcall(
+ void (*)(const DbEnv *, const char *, const 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 void set_msgcall(void (*)(const DbEnv *, const char *));
+ virtual void get_msgfile(FILE **);
+ virtual void set_msgfile(FILE *);
+ 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 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(DbTxn *, void *sp, u_int32_t flags);
+ virtual int stat_print(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_STD(ostream) *,
+ u_int32_t);
+
+ // These additional methods are not in the C interface, and
+ // are only available for C++.
+ //
+ virtual __DB_STD(ostream) *get_error_stream();
+ virtual void set_error_stream(__DB_STD(ostream) *);
+ virtual __DB_STD(ostream) *get_message_stream();
+ virtual void set_message_stream(__DB_STD(ostream) *);
+
+ virtual DbEnv *get_env();
+ virtual DbMpoolFile *get_mpf();
+
+ virtual DB *get_DB()
+ {
+ return imp_;
+ }
+
+ virtual const DB *get_const_DB() const
+ {
+ return imp_;
+ }
+
+ static Db* get_Db(DB *db)
+ {
+ return (Db *)db->api_internal;
+ }
+
+ static const Db* get_const_Db(const DB *db)
+ {
+ return (const Db *)db->api_internal;
+ }
+
+private:
+ // no copying
+ Db(const Db &);
+ Db &operator = (const Db &);
+
+ void cleanup();
+ int initialize();
+ int error_policy();
+
+ // instance data
+ DB *imp_;
+ DbEnv *env_;
+ DbMpoolFile *mpf_;
+ int construct_error_;
+ u_int32_t flags_;
+ u_int32_t construct_flags_;
+
+public:
+ // These are public only because they need to be called
+ // via C callback functions. They should never be used by
+ // external users of this class.
+ //
+ int (*append_recno_callback_)(Db *, Dbt *, db_recno_t);
+ int (*associate_callback_)(Db *, const Dbt *, const Dbt *, Dbt *);
+ int (*bt_compare_callback_)(Db *, const Dbt *, const Dbt *);
+ size_t (*bt_prefix_callback_)(Db *, const Dbt *, const Dbt *);
+ int (*dup_compare_callback_)(Db *, const Dbt *, const Dbt *);
+ void (*feedback_callback_)(Db *, int, int);
+ u_int32_t (*h_hash_callback_)(Db *, const void *, u_int32_t);
+};
+
+//
+// Cursor
+//
+class _exported Dbc : protected DBC
+{
+ friend class Db;
+
+public:
+ int close();
+ int count(db_recno_t *countp, u_int32_t flags);
+ int del(u_int32_t flags);
+ int dup(Dbc** cursorp, u_int32_t flags);
+ int get(Dbt* key, Dbt *data, u_int32_t flags);
+ int pget(Dbt* key, Dbt* pkey, Dbt *data, u_int32_t flags);
+ int put(Dbt* key, Dbt *data, u_int32_t flags);
+
+private:
+ // No data is permitted in this class (see comment at top)
+
+ // Note: use Db::cursor() to get pointers to a Dbc,
+ // and call Dbc::close() rather than delete to release them.
+ //
+ Dbc();
+ ~Dbc();
+
+ // no copying
+ Dbc(const Dbc &);
+ Dbc &operator = (const Dbc &);
+};
+
+//
+// Berkeley DB environment class. Provides functions for opening databases.
+// User of this library can use this class as a starting point for
+// developing a DB application - derive their application class from
+// this one, add application control logic.
+//
+// Note that if you use the default constructor, you must explicitly
+// call appinit() before any other db activity (e.g. opening files)
+//
+class _exported DbEnv
+{
+ friend class Db;
+ friend class DbLock;
+ friend class DbMpoolFile;
+
+public:
+ // After using this constructor, you can set any needed
+ // parameters for the environment using the set_* methods.
+ // Then call open() to finish initializing the environment
+ // and attaching it to underlying files.
+ //
+ DbEnv(u_int32_t flags);
+
+ virtual ~DbEnv();
+
+ // These methods match those in the C interface.
+ //
+ virtual int cdsgroup_begin(DbTxn **tid);
+ virtual int close(u_int32_t);
+ virtual int dbremove(DbTxn *txn, const char *name, const char *subdb,
+ u_int32_t flags);
+ virtual int dbrename(DbTxn *txn, const char *name, const char *subdb,
+ const char *newname, u_int32_t flags);
+ virtual void err(int, const char *, ...);
+ virtual void errx(const char *, ...);
+ virtual int failchk(u_int32_t);
+ virtual int fileid_reset(const char *, u_int32_t);
+ 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 stat_print(u_int32_t flags);
+
+ 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 get_encrypt_flags(u_int32_t *);
+ virtual int set_intermediate_dir(int, u_int32_t);
+ virtual int set_isalive(
+ int (*)(DbEnv *, pid_t, db_threadid_t, u_int32_t));
+ virtual int set_encrypt(const char *, u_int32_t);
+ virtual void set_errcall(
+ void (*)(const DbEnv *, const char *, const 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_event_notify(void (*)(DbEnv *, u_int32_t, void *));
+ virtual int get_flags(u_int32_t *);
+ virtual int set_flags(u_int32_t, int);
+ virtual bool is_bigendian();
+ virtual int lsn_reset(const char *, u_int32_t);
+ 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_filemode(int *);
+ virtual int set_lg_filemode(int);
+ 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 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 get_mp_max_openfd(int *);
+ virtual int set_mp_max_openfd(int);
+ virtual int get_mp_max_write(int *, int *);
+ virtual int set_mp_max_write(int, int);
+ virtual void set_msgcall(void (*)(const DbEnv *, const char *));
+ virtual void get_msgfile(FILE **);
+ virtual void set_msgfile(FILE *);
+ 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 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_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 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.
+ //
+ static char *version(int *major, int *minor, int *patch);
+
+ // Convert DB errors to strings
+ static char *strerror(int);
+
+ // If an error is detected and the error call function
+ // or stream is set, a message is dispatched or printed.
+ // If a prefix is set, each message is prefixed.
+ //
+ // You can use set_errcall() or set_errfile() above to control
+ // error functionality. Alternatively, you can call
+ // set_error_stream() to force all errors to a C++ stream.
+ // It is unwise to mix these approaches.
+ //
+ virtual __DB_STD(ostream) *get_error_stream();
+ virtual void set_error_stream(__DB_STD(ostream) *);
+ virtual __DB_STD(ostream) *get_message_stream();
+ virtual void set_message_stream(__DB_STD(ostream) *);
+
+ // used internally
+ static void runtime_error(DbEnv *env, const char *caller, int err,
+ int error_policy);
+ static void runtime_error_dbt(DbEnv *env, const char *caller, Dbt *dbt,
+ int error_policy);
+ 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);
+
+ // Lock functions
+ //
+ virtual int lock_detect(u_int32_t flags, u_int32_t atype, int *aborted);
+ virtual int lock_get(u_int32_t locker, u_int32_t flags, const Dbt *obj,
+ db_lockmode_t lock_mode, DbLock *lock);
+ virtual int lock_id(u_int32_t *idp);
+ 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_stat_print(u_int32_t flags);
+ virtual int lock_vec(u_int32_t locker, u_int32_t flags,
+ DB_LOCKREQ list[], int nlist, DB_LOCKREQ **elistp);
+
+ // Log functions
+ //
+ virtual int log_archive(char **list[], u_int32_t flags);
+ static int log_compare(const DbLsn *lsn0, const DbLsn *lsn1);
+ virtual int log_cursor(DbLogc **cursorp, u_int32_t flags);
+ virtual int log_file(DbLsn *lsn, char *namep, size_t len);
+ virtual int log_flush(const DbLsn *lsn);
+ virtual int log_put(DbLsn *lsn, const Dbt *data, u_int32_t flags);
+ virtual int log_printf(DbTxn *, const char *, ...);
+
+ virtual int log_stat(DB_LOG_STAT **spp, u_int32_t flags);
+ virtual int log_stat_print(u_int32_t flags);
+
+ // Mpool functions
+ //
+ virtual int memp_fcreate(DbMpoolFile **dbmfp, u_int32_t flags);
+ virtual int memp_register(int ftype,
+ pgin_fcn_type pgin_fcn,
+ pgout_fcn_type pgout_fcn);
+ virtual int memp_stat(DB_MPOOL_STAT
+ **gsp, DB_MPOOL_FSTAT ***fsp, u_int32_t flags);
+ virtual int memp_stat_print(u_int32_t flags);
+ virtual int memp_sync(DbLsn *lsn);
+ virtual int memp_trickle(int pct, int *nwrotep);
+
+ // Mpool functions
+ //
+ virtual int mutex_alloc(u_int32_t, db_mutex_t *);
+ virtual int mutex_free(db_mutex_t);
+ virtual int mutex_get_align(u_int32_t *);
+ virtual int mutex_get_increment(u_int32_t *);
+ virtual int mutex_get_max(u_int32_t *);
+ virtual int mutex_get_tas_spins(u_int32_t *);
+ virtual int mutex_lock(db_mutex_t);
+ virtual int mutex_set_align(u_int32_t);
+ virtual int mutex_set_increment(u_int32_t);
+ virtual int mutex_set_max(u_int32_t);
+ virtual int mutex_set_tas_spins(u_int32_t);
+ virtual int mutex_stat(DB_MUTEX_STAT **, u_int32_t);
+ virtual int mutex_stat_print(u_int32_t);
+ virtual int mutex_unlock(db_mutex_t);
+
+ // 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_recover(DbPreplist *preplist, long count,
+ long *retp, u_int32_t flags);
+ virtual int txn_stat(DB_TXN_STAT **statp, u_int32_t flags);
+ virtual int txn_stat_print(u_int32_t flags);
+
+ // Replication functions
+ //
+ virtual int rep_elect(int, int, int *, u_int32_t);
+ virtual int rep_flush();
+ 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 rep_stat_print(u_int32_t flags);
+ virtual int rep_get_limit(u_int32_t *, u_int32_t *);
+ virtual int rep_set_limit(u_int32_t, u_int32_t);
+ virtual int rep_set_transport(int, int (*)(DbEnv *,
+ const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t));
+ virtual int set_rep_request(u_int32_t, u_int32_t);
+ virtual int set_thread_count(u_int32_t);
+ virtual int set_thread_id(void (*)(DbEnv *, pid_t *, db_threadid_t *));
+ virtual int set_thread_id_string(char *(*)(DbEnv *,
+ pid_t, db_threadid_t, char *));
+ virtual int rep_set_config(u_int32_t which, int onoff);
+ virtual int rep_get_config(u_int32_t which, int *onoffp);
+ virtual int rep_sync(u_int32_t flags);
+
+ // Advanced replication functions
+ //
+ virtual int rep_get_nsites(int *n);
+ virtual int rep_set_nsites(int n);
+ virtual int rep_get_priority(int *priority);
+ virtual int rep_set_priority(int priority);
+ virtual int rep_get_timeout(int which, db_timeout_t *timeout);
+ virtual int rep_set_timeout(int which, db_timeout_t timeout);
+ virtual int repmgr_add_remote_site(const char * host, u_int16_t port,
+ int *eidp, u_int32_t flags);
+ virtual int repmgr_get_ack_policy(int *policy);
+ virtual int repmgr_set_ack_policy(int policy);
+ virtual int repmgr_set_local_site(const char * host, u_int16_t port,
+ u_int32_t flags);
+ virtual int repmgr_site_list(u_int *countp, DB_REPMGR_SITE **listp);
+ virtual int repmgr_start(int nthreads, u_int32_t flags);
+
+ // Conversion functions
+ //
+ virtual DB_ENV *get_DB_ENV()
+ {
+ return imp_;
+ }
+
+ virtual const DB_ENV *get_const_DB_ENV() const
+ {
+ return imp_;
+ }
+
+ static DbEnv* get_DbEnv(DB_ENV *dbenv)
+ {
+ return dbenv ? (DbEnv *)dbenv->api1_internal : 0;
+ }
+
+ static const DbEnv* get_const_DbEnv(const DB_ENV *dbenv)
+ {
+ return dbenv ? (const DbEnv *)dbenv->api1_internal : 0;
+ }
+
+ // For internal use only.
+ static DbEnv* wrap_DB_ENV(DB_ENV *dbenv);
+
+ // These are public only because they need to be called
+ // via C functions. They should never be called by users
+ // of this class.
+ //
+ static int _app_dispatch_intercept(DB_ENV *env, DBT *dbt, DB_LSN *lsn,
+ db_recops op);
+ static void _paniccall_intercept(DB_ENV *env, int errval);
+ static void _feedback_intercept(DB_ENV *env, int opcode, int pct);
+ static void _event_func_intercept(DB_ENV *env, u_int32_t, void *);
+ static int _isalive_intercept(DB_ENV *env, pid_t pid,
+ db_threadid_t thrid, u_int32_t flags);
+ static int _rep_send_intercept(DB_ENV *env, const DBT *cntrl,
+ const DBT *data, const DB_LSN *lsn, int id, u_int32_t flags);
+ static void _stream_error_function(const DB_ENV *env,
+ const char *prefix, const char *message);
+ static void _stream_message_function(const DB_ENV *env,
+ const char *message);
+ static void _thread_id_intercept(DB_ENV *env, pid_t *pidp,
+ db_threadid_t *thridp);
+ static char *_thread_id_string_intercept(DB_ENV *env, pid_t pid,
+ db_threadid_t thrid, char *buf);
+
+private:
+ void cleanup();
+ int initialize(DB_ENV *env);
+ int error_policy();
+
+ // For internal use only.
+ DbEnv(DB_ENV *, u_int32_t flags);
+
+ // no copying
+ DbEnv(const DbEnv &);
+ void operator = (const DbEnv &);
+
+ // instance data
+ DB_ENV *imp_;
+ int construct_error_;
+ u_int32_t construct_flags_;
+ __DB_STD(ostream) *error_stream_;
+ __DB_STD(ostream) *message_stream_;
+
+ int (*app_dispatch_callback_)(DbEnv *, Dbt *, DbLsn *, db_recops);
+ int (*isalive_callback_)(DbEnv *, pid_t, db_threadid_t, u_int32_t);
+ void (*error_callback_)(const DbEnv *, const char *, const char *);
+ void (*feedback_callback_)(DbEnv *, int, int);
+ void (*message_callback_)(const DbEnv *, const char *);
+ void (*paniccall_callback_)(DbEnv *, int);
+ void (*event_func_callback_)(DbEnv *, u_int32_t, void *);
+ int (*rep_send_callback_)(DbEnv *, const Dbt *, const Dbt *,
+ const DbLsn *, int, u_int32_t);
+ void (*thread_id_callback_)(DbEnv *, pid_t *, db_threadid_t *);
+ char *(*thread_id_string_callback_)(DbEnv *, pid_t, db_threadid_t,
+ char *);
+};
+
+//
+// Lock
+//
+class _exported DbLock
+{
+ friend class DbEnv;
+
+public:
+ DbLock();
+ DbLock(const DbLock &);
+ DbLock &operator = (const DbLock &);
+
+protected:
+ // We can add data to this class if needed
+ // since its contained class is not allocated by db.
+ // (see comment at top)
+
+ DbLock(DB_LOCK);
+ DB_LOCK lock_;
+};
+
+//
+// Log cursor
+//
+class _exported DbLogc : protected DB_LOGC
+{
+ friend class DbEnv;
+
+public:
+ int close(u_int32_t _flags);
+ int get(DbLsn *lsn, Dbt *data, u_int32_t _flags);
+
+private:
+ // No data is permitted in this class (see comment at top)
+
+ // Note: use Db::cursor() to get pointers to a Dbc,
+ // and call Dbc::close() rather than delete to release them.
+ //
+ DbLogc();
+ ~DbLogc();
+
+ // no copying
+ DbLogc(const Dbc &);
+ DbLogc &operator = (const Dbc &);
+};
+
+//
+// Log sequence number
+//
+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
+};
+
+//
+// Memory pool file
+//
+class _exported DbMpoolFile
+{
+ friend class DbEnv;
+ friend class Db;
+
+public:
+ int close(u_int32_t flags);
+ int get(db_pgno_t *pgnoaddr, DbTxn *txn, u_int32_t flags, void *pagep);
+ int open(const char *file, u_int32_t flags, int mode, size_t pagesize);
+ int get_transactional(void);
+ int put(void *pgaddr, u_int32_t flags);
+ 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);
+ int get_priority(DB_CACHE_PRIORITY *priorityp);
+ int set_priority(DB_CACHE_PRIORITY priority);
+ int sync();
+
+ virtual DB_MPOOLFILE *get_DB_MPOOLFILE()
+ {
+ return imp_;
+ }
+
+ virtual const DB_MPOOLFILE *get_const_DB_MPOOLFILE() const
+ {
+ return imp_;
+ }
+
+private:
+ DB_MPOOLFILE *imp_;
+
+ // We can add data to this class if needed
+ // since it is implemented via a pointer.
+ // (see comment at top)
+
+ // Note: use DbEnv::memp_fcreate() to get pointers to a DbMpoolFile,
+ // and call DbMpoolFile::close() rather than delete to release them.
+ //
+ DbMpoolFile();
+
+ // Shut g++ up.
+protected:
+ virtual ~DbMpoolFile();
+
+private:
+ // no copying
+ DbMpoolFile(const DbMpoolFile &);
+ void operator = (const DbMpoolFile &);
+};
+
+//
+// This is filled in and returned by the DbEnv::txn_recover() method.
+//
+class _exported DbPreplist
+{
+public:
+ DbTxn *txn;
+ u_int8_t gid[DB_XIDDATASIZE];
+};
+
+//
+// A sequence record in a database
+//
+class _exported DbSequence
+{
+public:
+ DbSequence(Db *db, u_int32_t flags);
+ virtual ~DbSequence();
+
+ int open(DbTxn *txnid, Dbt *key, u_int32_t flags);
+ int initial_value(db_seq_t value);
+ int close(u_int32_t flags);
+ int remove(DbTxn *txnid, u_int32_t flags);
+ int stat(DB_SEQUENCE_STAT **sp, u_int32_t flags);
+ int stat_print(u_int32_t flags);
+
+ int get(DbTxn *txnid, int32_t delta, db_seq_t *retp, u_int32_t flags);
+ int get_cachesize(int32_t *sizep);
+ int set_cachesize(int32_t size);
+ int get_flags(u_int32_t *flagsp);
+ int set_flags(u_int32_t flags);
+ int get_range(db_seq_t *minp, db_seq_t *maxp);
+ int set_range(db_seq_t min, db_seq_t max);
+
+ Db *get_db();
+ Dbt *get_key();
+
+ virtual DB_SEQUENCE *get_DB_SEQUENCE()
+ {
+ return imp_;
+ }
+
+ virtual const DB_SEQUENCE *get_const_DB_SEQUENCE() const
+ {
+ return imp_;
+ }
+
+ static DbSequence* get_DbSequence(DB_SEQUENCE *seq)
+ {
+ return (DbSequence *)seq->api_internal;
+ }
+
+ static const DbSequence* get_const_DbSequence(const DB_SEQUENCE *seq)
+ {
+ return (const DbSequence *)seq->api_internal;
+ }
+
+ // For internal use only.
+ static DbSequence* wrap_DB_SEQUENCE(DB_SEQUENCE *seq);
+
+private:
+ DbSequence(DB_SEQUENCE *seq);
+ // no copying
+ DbSequence(const DbSequence &);
+ DbSequence &operator = (const DbSequence &);
+
+ DB_SEQUENCE *imp_;
+ DBT key_;
+};
+
+//
+// Transaction
+//
+class _exported DbTxn
+{
+ friend class DbEnv;
+
+public:
+ int abort();
+ int commit(u_int32_t flags);
+ int discard(u_int32_t flags);
+ u_int32_t id();
+ int get_name(const char **namep);
+ int prepare(u_int8_t *gid);
+ int set_name(const char *name);
+ int set_timeout(db_timeout_t timeout, u_int32_t flags);
+
+ virtual DB_TXN *get_DB_TXN()
+ {
+ return imp_;
+ }
+
+ virtual const DB_TXN *get_const_DB_TXN() const
+ {
+ return imp_;
+ }
+
+ static DbTxn* get_DbTxn(DB_TXN *txn)
+ {
+ return (DbTxn *)txn->api_internal;
+ }
+
+ static const DbTxn* get_const_DbTxn(const DB_TXN *txn)
+ {
+ return (const DbTxn *)txn->api_internal;
+ }
+
+ // For internal use only.
+ static DbTxn* wrap_DB_TXN(DB_TXN *txn);
+
+private:
+ DB_TXN *imp_;
+
+ // We can add data to this class if needed
+ // since it is implemented via a pointer.
+ // (see comment at top)
+
+ // Note: use DbEnv::txn_begin() to get pointers to a DbTxn,
+ // and call DbTxn::abort() or DbTxn::commit rather than
+ // delete to release them.
+ //
+ DbTxn();
+ // For internal use only.
+ DbTxn(DB_TXN *txn);
+ virtual ~DbTxn();
+
+ // no copying
+ DbTxn(const DbTxn &);
+ void operator = (const DbTxn &);
+};
+
+//
+// A chunk of data, maybe a key or value.
+//
+class _exported Dbt : private DBT
+{
+ friend class Db;
+ friend class Dbc;
+ friend class DbEnv;
+ friend class DbLogc;
+ friend class DbSequence;
+
+public:
+ // key/data
+ void *get_data() const { return data; }
+ void set_data(void *value) { data = value; }
+
+ // key/data length
+ u_int32_t get_size() const { return size; }
+ void set_size(u_int32_t value) { size = value; }
+
+ // RO: length of user buffer.
+ u_int32_t get_ulen() const { return ulen; }
+ void set_ulen(u_int32_t value) { ulen = value; }
+
+ // RO: get/put record length.
+ u_int32_t get_dlen() const { return dlen; }
+ void set_dlen(u_int32_t value) { dlen = value; }
+
+ // RO: get/put record offset.
+ u_int32_t get_doff() const { return doff; }
+ void set_doff(u_int32_t value) { doff = value; }
+
+ // flags
+ u_int32_t get_flags() const { return flags; }
+ void set_flags(u_int32_t value) { flags = value; }
+
+ // Conversion functions
+ DBT *get_DBT() { return (DBT *)this; }
+ const DBT *get_const_DBT() const { return (const DBT *)this; }
+
+ static Dbt* get_Dbt(DBT *dbt) { return (Dbt *)dbt; }
+ static const Dbt* get_const_Dbt(const DBT *dbt)
+ { return (const Dbt *)dbt; }
+
+ Dbt(void *data, u_int32_t size);
+ Dbt();
+ ~Dbt();
+ Dbt(const Dbt &);
+ Dbt &operator = (const Dbt &);
+
+private:
+ // Note: no extra data appears in this class (other than
+ // inherited from DBT) since we need DBT and Dbt objects
+ // to have interchangable pointers.
+ //
+ // When subclassing this class, remember that callback
+ // methods like bt_compare, bt_prefix, dup_compare may
+ // internally manufacture DBT objects (which later are
+ // cast to Dbt), so such callbacks might receive objects
+ // not of your subclassed type.
+};
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// 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);
+};
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// 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).
+//
+class _exported DbException : public __DB_STD(exception)
+{
+public:
+ virtual ~DbException() throw();
+ DbException(int err);
+ DbException(const char *description);
+ DbException(const char *description, int err);
+ DbException(const char *prefix, const char *description, int err);
+ int get_errno() const;
+ virtual const char *what() const throw();
+ DbEnv *get_env() const;
+ void set_env(DbEnv *env);
+
+ DbException(const DbException &);
+ DbException &operator = (const DbException &);
+
+private:
+ void describe(const char *prefix, const char *description);
+
+ 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() throw();
+ 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() throw();
+ 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() throw();
+ DbMemoryException(Dbt *dbt);
+ DbMemoryException(const char *prefix, Dbt *dbt);
+
+ DbMemoryException(const DbMemoryException &);
+ DbMemoryException &operator = (const DbMemoryException &);
+
+ Dbt *get_dbt() const;
+private:
+ Dbt *dbt_;
+};
+
+//
+// A specific sort of exception that occurs when a change of replication
+// master requires that all handles be re-opened.
+//
+class _exported DbRepHandleDeadException : public DbException
+{
+public:
+ virtual ~DbRepHandleDeadException() throw();
+ DbRepHandleDeadException(const char *description);
+
+ DbRepHandleDeadException(const DbRepHandleDeadException &);
+ DbRepHandleDeadException &operator = (const DbRepHandleDeadException &);
+};
+
+//
+// A specific sort of exception that occurs when
+// recovery is required before continuing DB activity.
+//
+class _exported DbRunRecoveryException : public DbException
+{
+public:
+ virtual ~DbRunRecoveryException() throw();
+ DbRunRecoveryException(const char *description);
+
+ DbRunRecoveryException(const DbRunRecoveryException &);
+ DbRunRecoveryException &operator = (const DbRunRecoveryException &);
+};
+
+//
+// A specific sort of exception that occurs when
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// Restore default compiler warnings
+//
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+#endif /* !_DB_CXX_H_ */
diff --git a/db/build_windows/db_deadlock.dsp b/db/build_windows/db_deadlock.dsp
new file mode 100644
index 000000000..c6b4f5c3d
--- /dev/null
+++ b/db/build_windows/db_deadlock.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_deadlock" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_deadlock - Win32 Debug
+!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_deadlock.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_deadlock.mak" CFG="db_deadlock - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - x64 Release IA64" (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)" == "db_deadlock - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_deadlock"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_deadlock - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_deadlock"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_deadlock - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_deadlock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_deadlock"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_deadlock - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_deadlock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_deadlock - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_deadlock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_deadlock - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_deadlock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_deadlock - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_deadlock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_deadlock - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_deadlock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_deadlock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_deadlock - Win32 Release"
+# Name "db_deadlock - Win32 Debug"
+# Name "db_deadlock - Win32 ASCII Debug"
+# Name "db_deadlock - Win32 ASCII Release"
+# Name "db_deadlock - x64 Debug AMD64"
+# Name "db_deadlock - x64 Release AMD64"
+# Name "db_deadlock - x64 Debug IA64"
+# Name "db_deadlock - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_deadlock\db_deadlock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_dll.dsp b/db/build_windows/db_dll.dsp
new file mode 100644
index 000000000..9c15ce57a
--- /dev/null
+++ b/db/build_windows/db_dll.dsp
@@ -0,0 +1,1204 @@
+# Microsoft Developer Studio Project File - Name="db_dll" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=db_dll - Win32 Debug
+!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_dll.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_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 ASCII Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_dll - Win32 ASCII Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_dll - x64 Debug AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_dll - x64 Release AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_dll - x64 Debug IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_dll - x64 Release IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "db_dll - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_dll"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /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 ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb45.dll" /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_dll"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /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"
+# 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 advapi32.lib shell32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"Debug/libdb45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_dll"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /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"
+# 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 advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug_ASCII/libdb45d.dll" /fixed:no
+# ADD LINK32 ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"Debug_ASCII/libdb45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/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_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /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 ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release_ASCII/libdb45.dll"
+# ADD LINK32 ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release_ASCII/libdb45.dll" /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_dll"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /Wp64 /c
+# 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"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:AMD64 /out:"Debug_AMD64/libdb45d.dll" /fixed:no
+# ADD LINK32 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:AMD64 /out:"Debug_AMD64/libdb45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/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_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /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 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"Release_AMD64/libdb45.dll"
+# ADD LINK32 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"Release_AMD64/libdb45.dll" /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_dll"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /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"
+# 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 bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:IA64 /out:"Debug_IA64/libdb45d.dll" /fixed:no
+# ADD LINK32 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:IA64 /out:"Debug_IA64/libdb45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_dll - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/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_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_dll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /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 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"Release_IA64/libdb45.dll"
+# ADD LINK32 ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"Release_IA64/libdb45.dll" /libpath:"$(OUTDIR)"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_dll - Win32 Release"
+# Name "db_dll - Win32 Debug"
+# Name "db_dll - Win32 ASCII Debug"
+# Name "db_dll - Win32 ASCII Release"
+# Name "db_dll - x64 Debug AMD64"
+# Name "db_dll - x64 Release AMD64"
+# Name "db_dll - x64 Debug IA64"
+# Name "db_dll - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\btree\bt_compact.c
+# End Source File
+# 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\bt_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\btree_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libdb.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\libdb.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\ctime.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getaddrinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strcasecmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strsep.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_byteorder.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_clock.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\mkpath.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=..\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
+
+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_seq.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_cds.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_ovfl_vrfy.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_setid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_setlsn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_stati.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.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_vrfyutil.c
+# End Source File
+# Begin Source File
+
+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_stat.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_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_failchk.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=..\env\env_register.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_stat.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
+
+SOURCE=..\hash\hash_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_conv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_dup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_func.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_meta.c
+# End Source File
+# Begin Source File
+
+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
+
+SOURCE=..\hash\hash_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_reclaim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_upgrade.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_verify.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=..\hsearch\hsearch.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_failchk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_id.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_list.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_timer.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_debug.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=..\log\log_stat.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_fmethod.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_mvcc.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_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_failchk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_win32.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_fzero.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_mkdir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_oflags.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_pid.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_uid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_abs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_clock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_dir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_errno.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_fid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_flock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_fsync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_getenv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_handle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_map.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_rename.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_rw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_seek.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_sleep.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_spin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_truncate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_unlink.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_yield.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_conv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_files.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_upgrade.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_backup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_elect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_log.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_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_elect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_msg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_net.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_queue.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_sel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_windows.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sequence\seq_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sequence\sequence.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_chkpt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_failchk.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_windows/db_dump.dsp b/db/build_windows/db_dump.dsp
new file mode 100644
index 000000000..10a681499
--- /dev/null
+++ b/db/build_windows/db_dump.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_dump" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_dump - Win32 Debug
+!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_dump.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_dump.mak" CFG="db_dump - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - x64 Release IA64" (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)" == "db_dump - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_dump"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_dump - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_dump"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_dump - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_dump"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_dump"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_dump - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_dump"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_dump - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_dump"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_dump - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_dump"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_dump - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_dump"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_dump - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_dump"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_dump"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_dump - Win32 Release"
+# Name "db_dump - Win32 Debug"
+# Name "db_dump - Win32 ASCII Debug"
+# Name "db_dump - Win32 ASCII Release"
+# Name "db_dump - x64 Debug AMD64"
+# Name "db_dump - x64 Release AMD64"
+# Name "db_dump - x64 Debug IA64"
+# Name "db_dump - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_dump\db_dump.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_hotbackup.dsp b/db/build_windows/db_hotbackup.dsp
new file mode 100644
index 000000000..aa6a270bb
--- /dev/null
+++ b/db/build_windows/db_hotbackup.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_hotbackup" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_hotbackup - Win32 Debug
+!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_hotbackup.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_hotbackup.mak" CFG="db_hotbackup - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_hotbackup - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_hotbackup - x64 Release IA64" (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)" == "db_hotbackup - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_hotbackup"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_hotbackup"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_hotbackup"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_hotbackup"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_hotbackup"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_hotbackup"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_hotbackup"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_hotbackup"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_hotbackup - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_hotbackup"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_hotbackup"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_hotbackup - Win32 Release"
+# Name "db_hotbackup - Win32 Debug"
+# Name "db_hotbackup - Win32 ASCII Debug"
+# Name "db_hotbackup - Win32 ASCII Release"
+# Name "db_hotbackup - x64 Debug AMD64"
+# Name "db_hotbackup - x64 Release AMD64"
+# Name "db_hotbackup - x64 Debug IA64"
+# Name "db_hotbackup - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_hotbackup\db_hotbackup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_int.h b/db/build_windows/db_int.h
new file mode 100644
index 000000000..02aa4e86e
--- /dev/null
+++ b/db/build_windows/db_int.h
@@ -0,0 +1,771 @@
+/* DO NOT EDIT: automatically built by dist/s_windows. */
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db_int.in,v 12.41 2006/09/19 15:06:59 bostic Exp $
+ */
+
+#ifndef _DB_INT_H_
+#define _DB_INT_H_
+
+/*******************************************************
+ * Berkeley DB includes.
+ *******************************************************/
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#ifdef DIAG_MVCC
+#include <sys/mman.h>
+#endif
+#include <sys/stat.h>
+
+#if defined(__INCLUDE_SELECT_H)
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_VXWORKS
+#include <selectLib.h>
+#endif
+#endif
+
+#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_VXWORKS
+#include <net/uio.h>
+#else
+#include <sys/uio.h>
+#endif
+
+#if defined(__INCLUDE_NETWORKING)
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#endif
+
+#if defined(STDC_HEADERS) || defined(__cplusplus)
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#endif
+
+#include "db.h"
+
+#include "dbinc/queue.h"
+#include "dbinc/shqueue.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*******************************************************
+ * General purpose constants and macros.
+ *******************************************************/
+#ifndef UINT16_MAX
+#define UINT16_MAX 65535 /* Maximum 16-bit unsigned. */
+#endif
+#ifndef UINT32_MAX
+#ifdef __STDC__
+#define UINT32_MAX 4294967295U /* Maximum 32-bit unsigned. */
+#else
+#define UINT32_MAX 0xffffffff /* Maximum 32-bit unsigned. */
+#endif
+#endif
+
+#if defined(HAVE_64BIT_TYPES)
+#undef INT64_MAX
+#undef INT64_MIN
+#undef UINT64_MAX
+
+#ifdef DB_WIN32
+#define INT64_MAX _I64_MAX
+#define INT64_MIN _I64_MIN
+#define UINT64_MAX _UI64_MAX
+#else
+/*
+ * Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
+ * handle 64-bit values, but the system's constants don't include the LL/ULL
+ * suffix, and so can't be compiled using the 32-bit compiler.
+ */
+#define INT64_MAX 9223372036854775807LL
+#define INT64_MIN (-INT64_MAX-1)
+#define UINT64_MAX 18446744073709551615ULL
+#endif /* DB_WIN32 */
+
+#define INT64_FMT "%I64d"
+#define UINT64_FMT "%I64u"
+#endif /* HAVE_64BIT_TYPES */
+
+#undef FALSE
+#define FALSE 0
+#undef TRUE
+#define TRUE (!FALSE)
+
+#define MEGABYTE 1048576
+#define GIGABYTE 1073741824
+
+#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))
+
+/* Minimum number of pages cached, by default. */
+#define DB_MINPAGECACHE 16
+
+/*
+ * If we are unable to determine the underlying filesystem block size, use
+ * 8K on the grounds that most OS's use less than 8K for a VM page size.
+ */
+#define DB_DEF_IOSIZE (8 * 1024)
+
+/* Align an integer to a specific boundary. */
+#undef DB_ALIGN
+#define DB_ALIGN(v, bound) \
+ (((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
+
+/* Increment a pointer to a specific boundary. */
+#undef ALIGNP_INC
+#define ALIGNP_INC(p, bound) \
+ (void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
+
+/* Decrement a pointer to a specific boundary. */
+#undef ALIGNP_DEC
+#define ALIGNP_DEC(p, bound) \
+ (void *)((uintptr_t)(p) & ~(((uintptr_t)(bound)) - 1))
+
+/*
+ * 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)(uintptr_t)(p))
+
+/*
+ * Convert a pointer to a small integral value.
+ *
+ * The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_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 uintptr_t.
+ */
+#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))
+#define P_TO_UINT16(p) ((u_int16_t)(uintptr_t)(p))
+
+/*
+ * There are several on-page structures that are declared to have a number of
+ * fields followed by a variable length array of items. The structure size
+ * without including the variable length array or the address of the first of
+ * those elements can be found using SSZ.
+ *
+ * This macro can also be used to find the offset of a structure element in a
+ * structure. This is used in various places to copy structure elements from
+ * unaligned memory references, e.g., pointers into a packed page.
+ *
+ * There are two versions because compilers object if you take the address of
+ * an array.
+ */
+#undef SSZ
+#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
+
+#undef SSZA
+#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))
+
+/* Structure used to print flag values. */
+typedef struct __fn {
+ u_int32_t mask; /* Flag value. */
+ const char *name; /* Flag name. */
+} FN;
+
+/* Set, clear and test flags. */
+#define FLD_CLR(fld, f) (fld) &= ~(f)
+#define FLD_ISSET(fld, f) ((fld) & (f))
+#define FLD_SET(fld, f) (fld) |= (f)
+#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))
+
+/*
+ * Calculate a percentage. The values can overflow 32-bit integer arithmetic
+ * so we use floating point.
+ *
+ * When calculating a bytes-vs-page size percentage, we're getting the inverse
+ * of the percentage in all cases, that is, we want 100 minus the percentage we
+ * calculate.
+ */
+#define DB_PCT(v, total) \
+ ((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
+#define DB_PCT_PG(v, total, pgsize) \
+ ((int)((total) == 0 ? 0 : \
+ 100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
+
+/*
+ * Structure used for callback message aggregation.
+ *
+ * Display values in XXX_stat_print calls.
+ */
+typedef struct __db_msgbuf {
+ char *buf; /* Heap allocated buffer. */
+ char *cur; /* Current end of message. */
+ size_t len; /* Allocated length of buffer. */
+} DB_MSGBUF;
+#define DB_MSGBUF_INIT(a) do { \
+ (a)->buf = (a)->cur = NULL; \
+ (a)->len = 0; \
+} while (0)
+#define DB_MSGBUF_FLUSH(dbenv, a) do { \
+ if ((a)->buf != NULL) { \
+ if ((a)->cur != (a)->buf) \
+ __db_msg(dbenv, "%s", (a)->buf); \
+ __os_free(dbenv, (a)->buf); \
+ DB_MSGBUF_INIT(a); \
+ } \
+} while (0)
+#define STAT_FMT(msg, fmt, type, v) do { \
+ DB_MSGBUF __mb; \
+ DB_MSGBUF_INIT(&__mb); \
+ __db_msgadd(dbenv, &__mb, fmt, (type)(v)); \
+ __db_msgadd(dbenv, &__mb, "\t%s", msg); \
+ DB_MSGBUF_FLUSH(dbenv, &__mb); \
+} while (0)
+#define STAT_HEX(msg, v) \
+ __db_msg(dbenv, "%#lx\t%s", (u_long)(v), msg)
+#define STAT_ISSET(msg, p) \
+ __db_msg(dbenv, "%sSet\t%s", (p) == NULL ? "!" : " ", msg)
+#define STAT_LONG(msg, v) \
+ __db_msg(dbenv, "%ld\t%s", (long)(v), msg)
+#define STAT_LSN(msg, lsnp) \
+ __db_msg(dbenv, "%lu/%lu\t%s", \
+ (u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
+#define STAT_POINTER(msg, v) \
+ __db_msg(dbenv, "%#lx\t%s", P_TO_ULONG(v), msg)
+#define STAT_STRING(msg, p) do { \
+ const char *__p = p; /* p may be a function call. */ \
+ __db_msg(dbenv, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
+} while (0)
+#define STAT_ULONG(msg, v) \
+ __db_msg(dbenv, "%lu\t%s", (u_long)(v), msg)
+
+/*
+ * There are quite a few places in Berkeley DB where we want to initialize
+ * a DBT from a string or other random pointer type, using a length typed
+ * to size_t in most cases. This macro avoids a lot of casting. The macro
+ * comes in two flavors because we often want to clear the DBT first.
+ */
+#define DB_SET_DBT(dbt, d, s) do { \
+ (dbt).data = (void *)(d); \
+ (dbt).size = (u_int32_t)(s); \
+} while (0)
+#define DB_INIT_DBT(dbt, d, s) do { \
+ memset(&(dbt), 0, sizeof(dbt)); \
+ DB_SET_DBT(dbt, d, s); \
+} while (0)
+
+/*******************************************************
+ * 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_IGNORE || \
+ (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.
+ */
+#define DB_MAXPATHLEN 1024
+
+#define PATH_DOT "." /* Current working directory. */
+ /* Path separator character(s). */
+#define PATH_SEPARATOR "\\/:"
+
+/*******************************************************
+ * Environment.
+ *******************************************************/
+/* Type passed to __db_appname(). */
+typedef enum {
+ DB_APP_NONE=0, /* No type (region). */
+ DB_APP_DATA, /* Data file. */
+ DB_APP_LOG, /* Log file. */
+ DB_APP_TMP /* Temporary file. */
+} APPNAME;
+
+/*
+ * A set of macros to check if various functionality has been configured.
+ *
+ * ALIVE_ON The is_alive function is configured.
+ * CDB_LOCKING CDB product locking.
+ * CRYPTO_ON Security has been configured.
+ * LOCKING_ON Locking has been configured.
+ * LOGGING_ON Logging has been configured.
+ * MUTEX_ON Mutexes have 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.
+ *
+ * REP_ON is more complex than most: if the BDB library was compiled without
+ * replication support, dbenv->rep_handle will be NULL; if the BDB library
+ * has replication support, but it was not configured, the region reference
+ * will be NULL.
+ */
+#define ALIVE_ON(dbenv) ((dbenv)->is_alive != NULL)
+#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 MUTEX_ON(dbenv) ((dbenv)->mutex_handle != NULL)
+#define REP_ON(dbenv) \
+ ((dbenv)->rep_handle != NULL && (dbenv)->rep_handle->region != NULL)
+#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
+#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)
+
+/*
+ * STD_LOCKING Standard locking, that is, locking was configured and CDB
+ * was not. We do not do locking in off-page duplicate trees,
+ * so we check for that in the cursor first.
+ */
+#define STD_LOCKING(dbc) \
+ (!F_ISSET(dbc, DBC_OPD) && \
+ !CDB_LOCKING((dbc)->dbp->dbenv) && LOCKING_ON((dbc)->dbp->dbenv))
+
+/*
+ * IS_RECOVERING: The system is running recovery.
+ */
+#define IS_RECOVERING(dbenv) \
+ (LOGGING_ON(dbenv) && F_ISSET((dbenv)->lg_handle, DBLOG_RECOVER))
+
+/* 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, i, flags) \
+ if (handle == NULL) \
+ return (__db_env_config(dbenv, i, flags));
+#define ENV_REQUIRES_CONFIG_XX(dbenv, handle, i, flags) \
+ if ((dbenv)->handle->region == NULL) \
+ return (__db_env_config(dbenv, i, flags));
+#define ENV_NOT_CONFIGURED(dbenv, handle, i, flags) \
+ if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \
+ ENV_REQUIRES_CONFIG(dbenv, handle, i, flags)
+
+#define ENV_ENTER(dbenv, ip) do { \
+ int __ret; \
+ if ((dbenv)->thr_hashtab == NULL) \
+ ip = NULL; \
+ else { \
+ if ((__ret = \
+ __env_set_state(dbenv, &(ip), THREAD_ACTIVE)) != 0) \
+ return (__ret); \
+ } \
+} while (0)
+
+#ifdef DIAGNOSTIC
+#define ENV_LEAVE(dbenv, ip) do { \
+ if ((ip) != NULL) { \
+ DB_ASSERT(dbenv, ip->dbth_state == THREAD_ACTIVE); \
+ (ip)->dbth_state = THREAD_OUT; \
+ } \
+} while (0)
+#else
+#define ENV_LEAVE(dbenv, ip) do { \
+ if ((ip) != NULL) \
+ (ip)->dbth_state = THREAD_OUT; \
+} while (0)
+#endif
+#ifdef DIAGNOSTIC
+#define CHECK_THREAD(dbenv) do { \
+ DB_THREAD_INFO *__ip; \
+ if ((dbenv)->thr_hashtab != NULL) { \
+ (void)__env_set_state(dbenv, &__ip, THREAD_DIAGNOSTIC); \
+ DB_ASSERT(dbenv, \
+ __ip != NULL && __ip->dbth_state != THREAD_OUT); \
+ } \
+} while (0)
+#ifdef HAVE_STATISTICS
+#define CHECK_MTX_THREAD(dbenv, mtx) do { \
+ if (mtx->alloc_id != MTX_MUTEX_REGION && \
+ mtx->alloc_id != MTX_ENV_REGION && \
+ mtx->alloc_id != MTX_APPLICATION) \
+ CHECK_THREAD(dbenv); \
+} while (0)
+#else
+#define CHECK_MTX_THREAD(dbenv, mtx)
+#endif
+#else
+#define CHECK_THREAD(dbenv)
+#define CHECK_MTX_THREAD(dbenv, mtx)
+#endif
+
+typedef enum {
+ THREAD_SLOT_NOT_IN_USE=0,
+ THREAD_OUT,
+ THREAD_ACTIVE,
+ THREAD_BLOCKED
+#ifdef DIAGNOSTIC
+ , THREAD_DIAGNOSTIC
+#endif
+} DB_THREAD_STATE;
+
+typedef struct __db_thread_info {
+ pid_t dbth_pid;
+ db_threadid_t dbth_tid;
+ DB_THREAD_STATE dbth_state;
+ SH_TAILQ_ENTRY dbth_links;
+} DB_THREAD_INFO;
+
+typedef struct __env_thread_info {
+ u_int32_t thr_count;
+ u_int32_t thr_max;
+ u_int32_t thr_nbucket;
+ roff_t thr_hashoff;
+} THREAD_INFO;
+
+#define DB_EVENT(dbenv, e, einfo) do { \
+ if ((dbenv)->db_event_func != NULL) \
+ (dbenv)->db_event_func(dbenv, e, einfo); \
+} while (0)
+
+/*******************************************************
+ * Database Access Methods.
+ *******************************************************/
+/*
+ * DB_IS_THREADED --
+ * The database handle is free-threaded (was opened with DB_THREAD).
+ */
+#define DB_IS_THREADED(dbp) \
+ ((dbp)->mutex != MUTEX_INVALID)
+
+/* Initialization methods are often illegal before/after open is called. */
+#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
+ 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_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));
+#define DB_ILLEGAL_METHOD(dbp, flags) { \
+ int __ret; \
+ if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \
+ return (__ret); \
+}
+
+/*
+ * Common DBC->internal fields. Each access method adds additional fields
+ * to this list, but the initial fields are common.
+ */
+#define __DBC_INTERNAL \
+ DBC *opd; /* Off-page duplicate cursor. */\
+ \
+ void *page; /* Referenced page. */ \
+ db_pgno_t root; /* Tree root. */ \
+ db_pgno_t pgno; /* Referenced page number. */ \
+ db_indx_t indx; /* Referenced key item index. */\
+ \
+ DB_LOCK lock; /* Cursor lock. */ \
+ db_lockmode_t lock_mode; /* Lock mode. */
+
+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(dbenv, dbt) \
+ if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
+ __os_ufree((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.
+ *******************************************************/
+/*
+ * File types for DB access methods. Negative numbers are reserved to DB.
+ */
+#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
+#define DB_FTYPE_NOTSET 0 /* Don't call... */
+#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
+#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
+
+/* Structure used as the DB pgin/pgout pgcookie. */
+typedef struct __dbpginfo {
+ size_t db_pagesize; /* Underlying page size. */
+ u_int32_t flags; /* Some DB_AM flags needed. */
+ DBTYPE type; /* DB type */
+} DB_PGINFO;
+
+/*******************************************************
+ * Log.
+ *******************************************************/
+/* Initialize an LSN to 'zero'. */
+#define ZERO_LSN(LSN) do { \
+ (LSN).file = 0; \
+ (LSN).offset = 0; \
+} while (0)
+#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN).offset == 0)
+
+#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_MAX; \
+ (LSN).offset = UINT32_MAX; \
+} while (0)
+#define IS_MAX_LSN(LSN) \
+ ((LSN).file == UINT32_MAX && (LSN).offset == UINT32_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)
+
+/*
+ * LOG_COMPARE -- compare two LSNs.
+ */
+
+#define LOG_COMPARE(lsn0, lsn1) \
+ ((lsn0)->file != (lsn1)->file ? \
+ ((lsn0)->file < (lsn1)->file ? -1 : 1) : \
+ ((lsn0)->offset != (lsn1)->offset ? \
+ ((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
+
+
+/*******************************************************
+ * Txn.
+ *******************************************************/
+#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
+#define NOWAIT_FLAG(txn) \
+ ((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
+#define IS_REAL_TXN(txn) \
+ ((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
+#define IS_SUBTRANSACTION(txn) \
+ ((txn) != NULL && (txn)->parent != NULL)
+
+/*******************************************************
+ * Crypto.
+ *******************************************************/
+#define DB_IV_BYTES 16 /* Bytes per IV */
+#define DB_MAC_KEY 20 /* Bytes per MAC checksum */
+
+/*******************************************************
+ * Secondaries over RPC.
+ *******************************************************/
+#ifdef CONFIG_TEST
+/*
+ * These are flags passed to DB->associate calls by the Tcl API if running
+ * over RPC. The RPC server will mask out these flags before making the real
+ * DB->associate call.
+ *
+ * These flags must coexist with the valid flags to DB->associate (currently
+ * DB_AUTO_COMMIT and DB_CREATE). DB_AUTO_COMMIT is in the group of
+ * high-order shared flags (0xff000000), and DB_CREATE is in the low-order
+ * group (0x00000fff), so we pick a range in between.
+ */
+#define DB_RPC2ND_MASK 0x00f00000 /* Reserved bits. */
+
+#define DB_RPC2ND_REVERSEDATA 0x00100000 /* callback_n(0) _s_reversedata. */
+#define DB_RPC2ND_NOOP 0x00200000 /* callback_n(1) _s_noop */
+#define DB_RPC2ND_CONCATKEYDATA 0x00300000 /* callback_n(2) _s_concatkeydata */
+#define DB_RPC2ND_CONCATDATAKEY 0x00400000 /* callback_n(3) _s_concatdatakey */
+#define DB_RPC2ND_REVERSECONCAT 0x00500000 /* callback_n(4) _s_reverseconcat */
+#define DB_RPC2ND_TRUNCDATA 0x00600000 /* callback_n(5) _s_truncdata */
+#define DB_RPC2ND_CONSTANT 0x00700000 /* callback_n(6) _s_constant */
+#define DB_RPC2ND_GETZIP 0x00800000 /* sj_getzip */
+#define DB_RPC2ND_GETNAME 0x00900000 /* sj_getname */
+#endif
+
+/*******************************************************
+ * Forward structure declarations.
+ *******************************************************/
+struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
+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;
+
+typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*******************************************************
+ * Remaining general DB includes.
+ *******************************************************/
+
+
+#include "dbinc/globals.h"
+#include "dbinc/debug.h"
+#include "dbinc/region.h"
+#include "dbinc_auto/env_ext.h"
+#include "dbinc/mutex.h"
+#include "dbinc/os.h"
+#ifdef HAVE_REPLICATION_THREADS
+#include "dbinc/repmgr.h"
+#endif
+#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 we're not in recovery (master - doing an abort a client applying
+ * a txn), then a client's only path through here is on an internal
+ * operation, and a master's only path through here is a transactional
+ * operation. Detect if either is not the case.
+ */
+#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
+#define DBC_LOGGING(dbc) __dbc_logging(dbc)
+#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_INT_H_ */
diff --git a/db/build_windows/db_java.dsp b/db/build_windows/db_java.dsp
new file mode 100644
index 000000000..996cfc9e3
--- /dev/null
+++ b/db/build_windows/db_java.dsp
@@ -0,0 +1,412 @@
+# Microsoft Developer Studio Project File - Name="db_java" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=db_java - Win32 Debug
+!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_java.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_java.mak" 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 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - Win32 ASCII Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - Win32 ASCII Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - x64 Debug AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - x64 Release AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - x64 Debug IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - x64 Release IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "db_java - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_java"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_java45.dll" /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_java"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"Debug/libdb_java45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_java"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug_ASCII/libdb_java45d.dll" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"Debug_ASCII/libdb_java45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_java"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release_ASCII/libdb_java45.dll"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release_ASCII/libdb_java45.dll" /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_java"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /Wp64 /c
+# 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"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:AMD64 /out:"Debug_AMD64/libdb_java45d.dll" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:AMD64 /out:"Debug_AMD64/libdb_java45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_java"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"Release_AMD64/libdb_java45.dll"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"Release_AMD64/libdb_java45.dll" /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_java"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:IA64 /out:"Debug_IA64/libdb_java45d.dll" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:IA64 /out:"Debug_IA64/libdb_java45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "db_java - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_java"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_java"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"Release_IA64/libdb_java45.dll"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"Release_IA64/libdb_java45.dll" /libpath:"$(OUTDIR)"
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_java - Win32 Release"
+# Name "db_java - Win32 Debug"
+# Name "db_java - Win32 ASCII Debug"
+# Name "db_java - Win32 ASCII Release"
+# Name "db_java - x64 Debug AMD64"
+# Name "db_java - x64 Release AMD64"
+# Name "db_java - x64 Debug IA64"
+# Name "db_java - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\libdb_java\db_java_wrap.c
+# End Source File
+
+# End Target
+# End Project
diff --git a/db/build_windows/db_java.dsp.postbuild b/db/build_windows/db_java.dsp.postbuild
new file mode 100644
index 000000000..9b244fbee
--- /dev/null
+++ b/db/build_windows/db_java.dsp.postbuild
@@ -0,0 +1,17 @@
+# Begin Custom Build - Compiling java files using javac
+ProjDir=.
+InputPath=$(OUTDIR)/libdb_java44d.dll
+SOURCE="$(InputPath)"
+
+"force_compilation.txt" : $(SOURCE) "$(INTDIR)"
+ echo compiling Berkeley DB classes
+ mkdir "$(INTDIR)\classes"
+ javac -g -d "$(INTDIR)\classes" -classpath "$(INTDIR)\classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\internal\*.java ..\java\src\com\sleepycat\bind\*.java ..\java\src\com\sleepycat\bind\serial\*.java ..\java\src\com\sleepycat\bind\tuple\*.java ..\java\src\com\sleepycat\collections\*.java ..\java\src\com\sleepycat\compat\*.java ..\java\src\com\sleepycat\util\*.java ..\java\src\com\sleepycat\util\keyrange\*.java
+ echo compiling examples
+ mkdir "$(INTDIR)\classes.ex"
+ javac -g -d "$(INTDIR)\classes.ex" -classpath "$(INTDIR)\classes;$(INTDIR)\classes.ex" ..\examples_java\src\db\*.java ..\examples_java\src\db\GettingStarted\*.java ..\examples_java\src\db\repquote\*.java ..\examples_java\src\collections\access\*.java ..\examples_java\src\collections\hello\*.java ..\examples_java\src\collections\ship\basic\*.java ..\examples_java\src\collections\ship\entity\*.java ..\examples_java\src\collections\ship\tuple\*.java ..\examples_java\src\collections\ship\sentity\*.java ..\examples_java\src\collections\ship\marshal\*.java ..\examples_java\src\collections\ship\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)/db.jar" -C "$(INTDIR)\classes" .
+ jar cf "$(OUTDIR)/dbexamples.jar" -C "$(INTDIR)\classes.ex" .
+ echo Java build finished
+# End Custom Build
diff --git a/db/build_windows/db_java_xa.dsp b/db/build_windows/db_java_xa.dsp
new file mode 100644
index 000000000..9c700ffee
--- /dev/null
+++ b/db/build_windows/db_java_xa.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="db_java_xa" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=db_java_xa - Win32 Debug
+!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_java_xa.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_java_xa.mak" CFG="db_java_xa - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_java_xa - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "db_java_xa - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "db_java_xa - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f db_java_xaj.mak"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "db_java_xaj.exe"
+# PROP BASE Bsc_Name "db_java_xaj.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f db_java_xaj.mak Release/dbxa.jar"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "Release/dbxa.jar"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "db_java_xa - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f db_java_xaj.mak"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "db_java_xaj.exe"
+# PROP BASE Bsc_Name "db_java_xaj.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f db_java_xaj.mak Debug/dbxa.jar"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "Debug/dbxa.jar"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_java_xa - Win32 Release"
+# Name "db_java_xa - Win32 Debug"
+
+!IF "$(CFG)" == "db_java_xa - Win32 Release"
+
+!ELSEIF "$(CFG)" == "db_java_xa - Win32 Debug"
+
+!ENDIF
+
+# Begin Source File
+
+SOURCE=.\db_java_xaj.mak
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_java_xaj.mak b/db/build_windows/db_java_xaj.mak
new file mode 100644
index 000000000..c2dbc920d
--- /dev/null
+++ b/db/build_windows/db_java_xaj.mak
@@ -0,0 +1,21 @@
+JAVA_XADIR=../java/src/com/sleepycat/db/xa
+
+JAVA_XASRCS=\
+ $(JAVA_XADIR)/DbXAResource.java \
+ $(JAVA_XADIR)/DbXid.java
+
+Release/dbxa.jar : $(JAVA_XASRCS)
+ @echo compiling Berkeley DB XA classes
+ @javac -g -d ./Release/classes -classpath "$(CLASSPATH);./Release/classes" $(JAVA_XASRCS)
+ @echo creating jar file
+ @cd .\Release\classes
+ @jar cf ../dbxa.jar com\sleepycat\db\xa\*.class
+ @echo Java XA build finished
+
+Debug/dbxa.jar : $(JAVA_XASRCS)
+ @echo compiling Berkeley DB XA classes
+ @javac -g -d ./Debug/classes -classpath "$(CLASSPATH);./Debug/classes" $(JAVA_XASRCS)
+ @echo creating jar file
+ @cd .\Debug\classes
+ @jar cf ../dbxa.jar com\sleepycat\db\xa\*.class
+ @echo Java XA build finished
diff --git a/db/build_windows/db_load.dsp b/db/build_windows/db_load.dsp
new file mode 100644
index 000000000..b75c2f83a
--- /dev/null
+++ b/db/build_windows/db_load.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_load" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_load - Win32 Debug
+!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_load.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_load.mak" CFG="db_load - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - x64 Release IA64" (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)" == "db_load - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_load"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_load - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_load"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_load - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_load"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_load - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_load - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_load - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_load - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_load - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_load - Win32 Release"
+# Name "db_load - Win32 Debug"
+# Name "db_load - Win32 ASCII Debug"
+# Name "db_load - Win32 ASCII Release"
+# Name "db_load - x64 Debug AMD64"
+# Name "db_load - x64 Release AMD64"
+# Name "db_load - x64 Debug IA64"
+# Name "db_load - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_load\db_load.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_perf.dsp b/db/build_windows/db_perf.dsp
new file mode 100644
index 000000000..de5dee7af
--- /dev/null
+++ b/db/build_windows/db_perf.dsp
@@ -0,0 +1,332 @@
+# Microsoft Developer Studio Project File - Name="db_perf" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_perf - Win32 Debug
+!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_perf.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_perf.mak" CFG="db_perf - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_perf - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_perf - x64 Release IA64" (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)" == "db_perf - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_perf"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_perf - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_perf"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_perf - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_perf"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_perf"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_perf - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_perf"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_perf - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_perf"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_perf - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_perf"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_perf - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_perf"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_perf - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_perf"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_perf"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_perf - Win32 Release"
+# Name "db_perf - Win32 Debug"
+# Name "db_perf - Win32 ASCII Debug"
+# Name "db_perf - Win32 ASCII Release"
+# Name "db_perf - x64 Debug AMD64"
+# Name "db_perf - x64 Release AMD64"
+# Name "db_perf - x64 Debug IA64"
+# Name "db_perf - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\test_perf\db_perf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_checkpoint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_config.c
+# End Source File
+# Begin Source File
+
+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
+
+SOURCE=..\test_perf\perf_file.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_key.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_log.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_misc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_op.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_parse.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_rand.c
+# End Source File
+# Begin Source File
+
+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
+
+SOURCE=..\test_perf\perf_trickle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_txn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_printlog.dsp b/db/build_windows/db_printlog.dsp
new file mode 100644
index 000000000..d166f676a
--- /dev/null
+++ b/db/build_windows/db_printlog.dsp
@@ -0,0 +1,292 @@
+# Microsoft Developer Studio Project File - Name="db_printlog" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_printlog - Win32 Debug
+!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_printlog.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_printlog.mak" CFG="db_printlog - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - x64 Release IA64" (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)" == "db_printlog - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_printlog"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_printlog - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_printlog"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_printlog - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_printlog"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_printlog"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_printlog - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_printlog"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_printlog - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_printlog"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_printlog - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_printlog"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_printlog - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_printlog"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_printlog - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_printlog"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_printlog"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_printlog - Win32 Release"
+# Name "db_printlog - Win32 Debug"
+# Name "db_printlog - Win32 ASCII Debug"
+# Name "db_printlog - Win32 ASCII Release"
+# Name "db_printlog - x64 Debug AMD64"
+# Name "db_printlog - x64 Release AMD64"
+# Name "db_printlog - x64 Debug IA64"
+# Name "db_printlog - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\btree\btree_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\crdel_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db_printlog\db_printlog.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fileops_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_autop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_recover.dsp b/db/build_windows/db_recover.dsp
new file mode 100644
index 000000000..de11c70f0
--- /dev/null
+++ b/db/build_windows/db_recover.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_recover" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_recover - Win32 Debug
+!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_recover.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_recover.mak" CFG="db_recover - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - x64 Release IA64" (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)" == "db_recover - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_recover"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_recover - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_recover"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_recover - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_recover"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_recover"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_recover - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_recover"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_recover - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_recover"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_recover - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_recover"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_recover - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_recover"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_recover - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_recover"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_recover"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_recover - Win32 Release"
+# Name "db_recover - Win32 Debug"
+# Name "db_recover - Win32 ASCII Debug"
+# Name "db_recover - Win32 ASCII Release"
+# Name "db_recover - x64 Debug AMD64"
+# Name "db_recover - x64 Release AMD64"
+# Name "db_recover - x64 Debug IA64"
+# Name "db_recover - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_recover\db_recover.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_reptest.dsp b/db/build_windows/db_reptest.dsp
new file mode 100644
index 000000000..6b2ecbf89
--- /dev/null
+++ b/db/build_windows/db_reptest.dsp
@@ -0,0 +1,348 @@
+# Microsoft Developer Studio Project File - Name="db_reptest" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_reptest - Win32 Debug
+!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_reptest.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_reptest.mak" CFG="db_reptest - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_reptest - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_reptest - x64 Release IA64" (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)" == "db_reptest - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_reptest"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_reptest - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_reptest"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_reptest - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_reptest"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_reptest"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_reptest - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_reptest"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_reptest - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_reptest"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_reptest - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_reptest"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_reptest - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_reptest"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_reptest - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_reptest"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_reptest"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_reptest - Win32 Release"
+# Name "db_reptest - Win32 Debug"
+# Name "db_reptest - Win32 ASCII Debug"
+# Name "db_reptest - Win32 ASCII Release"
+# Name "db_reptest - x64 Debug AMD64"
+# Name "db_reptest - x64 Release AMD64"
+# Name "db_reptest - x64 Debug IA64"
+# Name "db_reptest - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\test_perf\perf_rand.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\db_reptest.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_accept.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_client.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_dbs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_debug.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_elect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_env.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_exec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_file.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_key.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_master.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_misc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_msg_thread.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_op.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_parse.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_send.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_site.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_socket.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_spawn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_thread.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_txn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_rep\reptest_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_small.dsp b/db/build_windows/db_small.dsp
new file mode 100644
index 000000000..d6cdc1e77
--- /dev/null
+++ b/db/build_windows/db_small.dsp
@@ -0,0 +1,958 @@
+# 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
+!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"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_small - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - Win32 ASCII Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - Win32 ASCII Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - x64 Debug AMD64" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - x64 Release AMD64" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - x64 Debug IA64" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - x64 Release IA64" (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"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /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/libdb_small45s.lib"
+# ADD LIB32 /nologo /out:"Release/libdb_small45s.lib"
+
+!ELSEIF "$(CFG)" == "db_small - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /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/libdb_small45sd.lib"
+# ADD LIB32 /nologo /out:"Debug/libdb_small45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_small - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_SMALLBUILD" /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_ASCII/libdb_small45s.lib"
+# ADD LIB32 /nologo /out:"Release_ASCII/libdb_small45s.lib"
+
+!ELSEIF "$(CFG)" == "db_small - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_SMALLBUILD" /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_ASCII/libdb_small45sd.lib"
+# ADD LIB32 /nologo /out:"Debug_ASCII/libdb_small45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_small - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /FD /Wp64 /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_AMD64/libdb_small45sd.lib"
+# ADD LIB32 /nologo /out:"Debug_AMD64/libdb_small45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_small - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /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_AMD64/libdb_small45s.lib"
+# ADD LIB32 /nologo /out:"Release_AMD64/libdb_small45s.lib"
+
+!ELSEIF "$(CFG)" == "db_small - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /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_IA64/libdb_small45sd.lib"
+# ADD LIB32 /nologo /out:"Debug_IA64/libdb_small45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_small - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_SMALLBUILD" /Wp64 /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_IA64/libdb_small45s.lib"
+# ADD LIB32 /nologo /out:"Release_IA64/libdb_small45s.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_small - Win32 Release"
+# Name "db_small - Win32 Debug"
+# Name "db_small - Win32 ASCII Release"
+# Name "db_small - Win32 ASCII Debug"
+# Name "db_small - x64 Debug AMD64"
+# Name "db_small - x64 Release AMD64"
+# Name "db_small - x64 Debug IA64"
+# Name "db_small - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\btree\bt_compact.c
+# End Source File
+# 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\ctime.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strcasecmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strsep.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\mkpath.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_seq.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_cds.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_setid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_setlsn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_stati.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_stat.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_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_failchk.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=..\env\env_register.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_stat.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_failchk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_id.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_list.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_timer.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_debug.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=..\log\log_stat.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_fmethod.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_mvcc.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_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_failchk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_win32.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_fzero.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_mkdir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_oflags.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_pid.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_uid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_abs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_clock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_dir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_errno.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_fid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_flock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_fsync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_getenv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_handle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_map.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_rename.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_rw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_seek.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_sleep.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_spin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_truncate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_unlink.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_yield.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=..\sequence\seq_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sequence\sequence.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_chkpt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_failchk.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_windows/db_stat.dsp b/db/build_windows/db_stat.dsp
new file mode 100644
index 000000000..fc806e9ed
--- /dev/null
+++ b/db/build_windows/db_stat.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_stat" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_stat - Win32 Debug
+!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_stat.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_stat.mak" CFG="db_stat - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - x64 Release IA64" (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)" == "db_stat - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_stat"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_stat - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_stat"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_stat - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_stat"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_stat"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_stat - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_stat"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_stat - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_stat"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_stat - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_stat"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_stat - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_stat"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_stat - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_stat"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_stat"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_stat - Win32 Release"
+# Name "db_stat - Win32 Debug"
+# Name "db_stat - Win32 ASCII Debug"
+# Name "db_stat - Win32 ASCII Release"
+# Name "db_stat - x64 Debug AMD64"
+# Name "db_stat - x64 Release AMD64"
+# Name "db_stat - x64 Debug IA64"
+# Name "db_stat - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_stat\db_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_static.dsp b/db/build_windows/db_static.dsp
new file mode 100644
index 000000000..df640f47c
--- /dev/null
+++ b/db/build_windows/db_static.dsp
@@ -0,0 +1,1158 @@
+# Microsoft Developer Studio Project File - Name="db_static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=db_static - Win32 Debug
+!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_static.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_static.mak" 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 ASCII Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_static - Win32 ASCII Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_static - x64 Debug AMD64" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_static - x64 Release AMD64" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_static - x64 Debug IA64" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_static - x64 Release IA64" (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"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /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/libdb45s.lib"
+# ADD LIB32 /nologo /out:"Release/libdb45s.lib"
+
+!ELSEIF "$(CFG)" == "db_static - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /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/libdb45sd.lib"
+# ADD LIB32 /nologo /out:"Debug/libdb45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_static - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /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_ASCII/libdb45s.lib"
+# ADD LIB32 /nologo /out:"Release_ASCII/libdb45s.lib"
+
+!ELSEIF "$(CFG)" == "db_static - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /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_ASCII/libdb45sd.lib"
+# ADD LIB32 /nologo /out:"Debug_ASCII/libdb45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_static - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /FD /Wp64 /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_AMD64/libdb45sd.lib"
+# ADD LIB32 /nologo /out:"Debug_AMD64/libdb45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_static - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /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_AMD64/libdb45s.lib"
+# ADD LIB32 /nologo /out:"Release_AMD64/libdb45s.lib"
+
+!ELSEIF "$(CFG)" == "db_static - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Wp64 /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_IA64/libdb45sd.lib"
+# ADD LIB32 /nologo /out:"Debug_IA64/libdb45sd.lib"
+
+!ELSEIF "$(CFG)" == "db_static - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_static"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_static"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Wp64 /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_IA64/libdb45s.lib"
+# ADD LIB32 /nologo /out:"Release_IA64/libdb45s.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_static - Win32 Release"
+# Name "db_static - Win32 Debug"
+# Name "db_static - Win32 ASCII Release"
+# Name "db_static - Win32 ASCII Debug"
+# Name "db_static - x64 Debug AMD64"
+# Name "db_static - x64 Release AMD64"
+# Name "db_static - x64 Debug IA64"
+# Name "db_static - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\btree\bt_compact.c
+# End Source File
+# 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\bt_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\btree_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\ctime.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getaddrinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strcasecmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strsep.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_byteorder.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_clock.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\mkpath.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=..\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
+
+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_seq.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_cds.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_ovfl_vrfy.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_setid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_setlsn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_stati.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.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_vrfyutil.c
+# End Source File
+# Begin Source File
+
+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_stat.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_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_failchk.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=..\env\env_register.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_stat.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
+
+SOURCE=..\hash\hash_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_conv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_dup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_func.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_meta.c
+# End Source File
+# Begin Source File
+
+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
+
+SOURCE=..\hash\hash_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_reclaim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_upgrade.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_verify.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=..\hsearch\hsearch.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_failchk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_id.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_list.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_timer.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_debug.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=..\log\log_stat.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_fmethod.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_mvcc.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_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_failchk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_win32.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_fzero.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_mkdir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_oflags.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_pid.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_uid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_abs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_clock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_dir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_errno.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_fid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_flock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_fsync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_getenv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_handle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_map.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_rename.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_rw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_seek.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_sleep.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_spin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_truncate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_unlink.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_windows\os_yield.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_conv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_files.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_upgrade.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_backup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_elect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_log.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_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_elect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_msg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_net.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_queue.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_sel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\repmgr\repmgr_windows.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sequence\seq_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sequence\sequence.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_chkpt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_failchk.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_windows/db_tcl.dsp b/db/build_windows/db_tcl.dsp
new file mode 100644
index 000000000..82c02fffe
--- /dev/null
+++ b/db/build_windows/db_tcl.dsp
@@ -0,0 +1,328 @@
+# Microsoft Developer Studio Project File - Name="db_tcl" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=db_tcl - Win32 Debug
+!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_tcl.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_tcl.mak" CFG="db_tcl - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_tcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - Win32 ASCII Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - Win32 ASCII Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - x64 Debug AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - x64 Release AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - x64 Debug IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_tcl - x64 Release IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "db_tcl - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_tcl"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /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 libdb45.lib tcl84.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 libdb45.lib tcl84.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_tcl45.dll" /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_tcl"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib tcl84g.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib tcl84g.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"Debug/libdb_tcl45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_tcl"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "DB_TCL_SUPPORT" /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "DB_TCL_SUPPORT" /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib tcl84g.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug_ASCII/libdb_tcl45d.dll" /fixed:no
+# ADD LINK32 libdb45d.lib tcl84g.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"Debug_ASCII/libdb_tcl45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_tcl"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "DB_TCL_SUPPORT" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "DB_TCL_SUPPORT" /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 libdb45.lib tcl84.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release_ASCII/libdb_tcl45.dll"
+# ADD LINK32 libdb45.lib tcl84.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release_ASCII/libdb_tcl45.dll" /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_tcl"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /FD /Wp64 /c
+# 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"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib tcl84g.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:AMD64 /out:"Debug_AMD64/libdb_tcl45d.dll" /fixed:no
+# ADD LINK32 libdb45d.lib tcl84g.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:AMD64 /out:"Debug_AMD64/libdb_tcl45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_tcl"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /Wp64 /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 libdb45.lib tcl84.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"Release_AMD64/libdb_tcl45.dll"
+# ADD LINK32 libdb45.lib tcl84.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"Release_AMD64/libdb_tcl45.dll" /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_tcl"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /Wp64 /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /Wp64 /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libdb45d.lib tcl84g.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:IA64 /out:"Debug_IA64/libdb_tcl45d.dll" /fixed:no
+# ADD LINK32 libdb45d.lib tcl84g.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:IA64 /out:"Debug_IA64/libdb_tcl45d.dll" /fixed:no /libpath:"$(OUTDIR)"
+
+!ELSEIF "$(CFG)" == "db_tcl - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_tcl"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_tcl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_TCL_SUPPORT" /Wp64 /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 libdb45.lib tcl84.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"Release_IA64/libdb_tcl45.dll"
+# ADD LINK32 libdb45.lib tcl84.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"Release_IA64/libdb_tcl45.dll" /libpath:"$(OUTDIR)"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_tcl - Win32 Release"
+# Name "db_tcl - Win32 Debug"
+# Name "db_tcl - Win32 ASCII Debug"
+# Name "db_tcl - Win32 ASCII Release"
+# Name "db_tcl - x64 Debug AMD64"
+# Name "db_tcl - x64 Release AMD64"
+# Name "db_tcl - x64 Debug IA64"
+# Name "db_tcl - x64 Release IA64"
+# Begin Source File
+
+SOURCE=.\libdb_tcl.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_compat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_db_pkg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_dbcursor.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_env.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_internal.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_lock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_log.c
+# End Source File
+# Begin Source File
+
+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_seq.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_windows/db_test.dsp b/db/build_windows/db_test.dsp
new file mode 100644
index 000000000..eff4cf7e5
--- /dev/null
+++ b/db/build_windows/db_test.dsp
@@ -0,0 +1,296 @@
+# Microsoft Developer Studio Project File - Name="db_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_test - Win32 Debug
+!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_test.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_test.mak" CFG="db_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_test - x64 Release IA64" (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)" == "db_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_test"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_test"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_test"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_test"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_test"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib /out:"dbkill.exe" kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_test"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_test"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_test"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "db_test - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_test"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib /out:"dbkill.exe" bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_test - Win32 Release"
+# Name "db_test - Win32 Debug"
+# Name "db_test - Win32 ASCII Debug"
+# Name "db_test - Win32 ASCII Release"
+# Name "db_test - x64 Debug AMD64"
+# Name "db_test - x64 Release AMD64"
+# Name "db_test - x64 Debug IA64"
+# Name "db_test - x64 Release IA64"
+# Begin Source File
+
+SOURCE=.\dbkill.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_test.dsp.postbuild b/db/build_windows/db_test.dsp.postbuild
new file mode 100644
index 000000000..fafaa1825
--- /dev/null
+++ b/db/build_windows/db_test.dsp.postbuild
@@ -0,0 +1,5 @@
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy built executable files.
+PostBuild_Cmds=copy $(OUTDIR)\*.exe . copy $(OUTDIR)\*.dll .
+# End Special Build Tool
diff --git a/db/build_windows/db_upgrade.dsp b/db/build_windows/db_upgrade.dsp
new file mode 100644
index 000000000..e2cd5ac4e
--- /dev/null
+++ b/db/build_windows/db_upgrade.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_upgrade" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_upgrade - Win32 Debug
+!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_upgrade.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_upgrade.mak" CFG="db_upgrade - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - x64 Release IA64" (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)" == "db_upgrade - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_upgrade"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_upgrade - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_upgrade"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_upgrade - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_upgrade"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_upgrade"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_upgrade - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_upgrade"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_upgrade - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_upgrade"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_upgrade - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_upgrade"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_upgrade - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_upgrade"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_upgrade - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_upgrade"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_upgrade"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_upgrade - Win32 Release"
+# Name "db_upgrade - Win32 Debug"
+# Name "db_upgrade - Win32 ASCII Debug"
+# Name "db_upgrade - Win32 ASCII Release"
+# Name "db_upgrade - x64 Debug AMD64"
+# Name "db_upgrade - x64 Release AMD64"
+# Name "db_upgrade - x64 Debug IA64"
+# Name "db_upgrade - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_upgrade\db_upgrade.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/db_verify.dsp b/db/build_windows/db_verify.dsp
new file mode 100644
index 000000000..f084bc9a2
--- /dev/null
+++ b/db/build_windows/db_verify.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="db_verify" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=db_verify - Win32 Debug
+!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_verify.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_verify.mak" CFG="db_verify - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - x64 Release IA64" (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)" == "db_verify - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/db_verify"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "db_verify - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/db_verify"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "db_verify - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/db_verify"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/db_verify"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "db_verify - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/db_verify"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "db_verify - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/db_verify"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "db_verify - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/db_verify"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "db_verify - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/db_verify"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "db_verify - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/db_verify"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/db_verify"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_verify - Win32 Release"
+# Name "db_verify - Win32 Debug"
+# Name "db_verify - Win32 ASCII Debug"
+# Name "db_verify - Win32 ASCII Release"
+# Name "db_verify - x64 Debug AMD64"
+# Name "db_verify - x64 Release AMD64"
+# Name "db_verify - x64 Debug IA64"
+# Name "db_verify - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\db_verify\db_verify.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/dbkill.cpp b/db/build_windows/dbkill.cpp
new file mode 100644
index 000000000..b186bde42
--- /dev/null
+++ b/db/build_windows/dbkill.cpp
@@ -0,0 +1,131 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: dbkill.cpp,v 12.4 2006/08/24 14:45:08 bostic Exp $
+ */
+/*
+ * Kill -
+ * Simulate Unix kill on Windows/NT and Windows/9X.
+ * This good enough to support the Berkeley DB test suite,
+ * but may be missing some favorite features.
+ *
+ * Would have used MKS kill, but it didn't seem to work well
+ * on Win/9X. Cygnus kill works within the Gnu/Cygnus environment
+ * (where processes are given small pids, with presumably a translation
+ * table between small pids and actual process handles), but our test
+ * environment, via Tcl, does not use the Cygnus environment.
+ *
+ * Compile this and install it as c:/tools/kill.exe (or as indicated
+ * by build_windows/include.tcl ).
+ */
+
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+
+/*
+ * Like atol, with specified base. Would use stdlib, but
+ * strtol("0xFFFF1234", NULL, 16) returns 0x7FFFFFFF and
+ * strtol("4294712487", NULL, 16) returns 0x7FFFFFFF w/ VC++
+ */
+long
+myatol(char *s, int base)
+{
+ long result = 0;
+ char ch;
+ int sign = 1; /* + */
+ if (base == 0)
+ base = 10;
+ if (base != 10 && base != 16)
+ return LONG_MAX;
+ while ((ch = *s++) != '\0') {
+ if (ch == '-') {
+ sign = -sign;
+ }
+ else if (ch >= '0' && ch <= '9') {
+ result = result * base + (ch - '0');
+ }
+ else if (ch == 'x' || ch == 'X') {
+ /* Allow leading 0x..., and switch to base 16 */
+ base = 16;
+ }
+ else if (base == 16 && ch >= 'a' && ch <= 'f') {
+ result = result * base + (ch - 'a' + 10);
+ }
+ else if (base == 16 && ch >= 'A' && ch <= 'F') {
+ result = result * base + (ch - 'A' + 10);
+ }
+ else {
+ if (sign > 1)
+ return LONG_MAX;
+ else
+ return LONG_MIN;
+ }
+ }
+ return sign * result;
+}
+
+void
+usage_exit()
+{
+ fprintf(stderr, "Usage: kill [ -sig ] pid\n");
+ fprintf(stderr, " for win32, sig must be or 0, 15 (TERM)\n");
+ exit(EXIT_FAILURE);
+}
+
+int
+main(int argc, char **argv)
+{
+ HANDLE hProcess ;
+ DWORD accessflag;
+ long pid;
+ int sig = 15;
+
+ if (argc > 2) {
+ if (argv[1][0] != '-')
+ usage_exit();
+
+ if (strcmp(argv[1], "-TERM") == 0)
+ sig = 15;
+ else {
+ /* currently sig is more or less ignored,
+ * we only care if it is zero or not
+ */
+ sig = atoi(&argv[1][1]);
+ if (sig < 0)
+ usage_exit();
+ }
+ argc--;
+ argv++;
+ }
+ if (argc < 2)
+ usage_exit();
+
+ pid = myatol(argv[1], 10);
+ /*printf("pid = %ld (0x%lx) (command line %s)\n", pid, pid, argv[1]);*/
+ if (pid == LONG_MAX || pid == LONG_MIN)
+ usage_exit();
+
+ if (sig == 0)
+ accessflag = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
+ else
+ accessflag = STANDARD_RIGHTS_REQUIRED | PROCESS_TERMINATE;
+ hProcess = OpenProcess(accessflag, FALSE, pid);
+ if (hProcess == NULL) {
+ fprintf(stderr, "dbkill: %s: no such process\n", argv[1]);
+ exit(EXIT_FAILURE);
+ }
+ if (sig == 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(EXIT_FAILURE);
+ }
+ return EXIT_SUCCESS;
+}
diff --git a/db/build_windows/dynamic_dsp.src b/db/build_windows/dynamic_dsp.src
new file mode 100644
index 000000000..fb6862cb7
--- /dev/null
+++ b/db/build_windows/dynamic_dsp.src
@@ -0,0 +1,281 @@
+# 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) Dynamic-Link Library" 0x0102
+
+CFG=@project_name@ - Win32 Debug
+!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"
+!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 ASCII Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "@project_name@ - Win32 ASCII Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "@project_name@ - x64 Debug AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "@project_name@ - x64 Release AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "@project_name@ - x64 Debug IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "@project_name@ - x64 Release IA64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.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 "@lib_rel_dest@"
+# PROP BASE Intermediate_Dir "Release/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@"
+# PROP Intermediate_Dir "Release/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /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 @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"@bin_rel_dest@/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll" /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@"
+# PROP BASE Intermediate_Dir "Debug/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@"
+# PROP Intermediate_Dir "Debug/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"@bin_debug_dest@/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" @extra_cppflags@ /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" @extra_cppflags@ /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"@bin_debug_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
+# ADD LINK32 @debug_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /pdb:none /debug /machine:I386 /out:"@bin_debug_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" @extra_cppflags@ /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 @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"@bin_rel_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
+# ADD LINK32 @release_libs@ kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"@bin_rel_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll" /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /FD /Wp64 /c
+# 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"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:AMD64 /out:"@bin_debug_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
+# ADD LINK32 @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:AMD64 /out:"@bin_debug_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /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 @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"@bin_rel_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
+# ADD LINK32 @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:AMD64 /out:"@bin_rel_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll" /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@_IA64"
+# PROP Intermediate_Dir "Debug_IA64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "DIAGNOSTIC" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /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"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /debug /machine:IA64 /out:"@bin_debug_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
+# ADD LINK32 @debug_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /export:__db_assert /debug /machine:IA64 /out:"@bin_debug_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/@project_name@"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@_IA64"
+# PROP Intermediate_Dir "Release_IA64/@project_name@"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /Ob2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /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 @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"@bin_rel_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
+# ADD LINK32 @release_libs@ bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:IA64 /out:"@bin_rel_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll" /libpath:"$(OUTDIR)"
+@POST_BUILD@
+
+!ENDIF
+
+# Begin Target
+
+# Name "@project_name@ - Win32 Release"
+# Name "@project_name@ - Win32 Debug"
+# Name "@project_name@ - Win32 ASCII Debug"
+# Name "@project_name@ - Win32 ASCII Release"
+# Name "@project_name@ - x64 Debug AMD64"
+# Name "@project_name@ - x64 Release AMD64"
+# Name "@project_name@ - x64 Debug IA64"
+# Name "@project_name@ - x64 Release IA64"
+@SOURCE_FILES@
+
+# End Target
+# End Project
diff --git a/db/build_windows/ex_access.dsp b/db/build_windows/ex_access.dsp
new file mode 100644
index 000000000..b6fa3cd77
--- /dev/null
+++ b/db/build_windows/ex_access.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_access" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_access - Win32 Debug
+!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_access.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_access.mak" CFG="ex_access - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - x64 Release IA64" (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_access - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_access"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_access - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_access"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_access - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_access"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_access - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_access - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_access - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_access - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_access - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_access - Win32 Release"
+# Name "ex_access - Win32 Debug"
+# Name "ex_access - Win32 ASCII Debug"
+# Name "ex_access - Win32 ASCII Release"
+# Name "ex_access - x64 Debug AMD64"
+# Name "ex_access - x64 Release AMD64"
+# Name "ex_access - x64 Debug IA64"
+# Name "ex_access - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_access.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_btrec.dsp b/db/build_windows/ex_btrec.dsp
new file mode 100644
index 000000000..7d31080f9
--- /dev/null
+++ b/db/build_windows/ex_btrec.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_btrec" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_btrec - Win32 Debug
+!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_btrec.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_btrec.mak" CFG="ex_btrec - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - x64 Release IA64" (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_btrec - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_btrec"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_btrec - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_btrec"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_btrec - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_btrec"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_btrec - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_btrec - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_btrec - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_btrec - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_btrec - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_btrec - Win32 Release"
+# Name "ex_btrec - Win32 Debug"
+# Name "ex_btrec - Win32 ASCII Debug"
+# Name "ex_btrec - Win32 ASCII Release"
+# Name "ex_btrec - x64 Debug AMD64"
+# Name "ex_btrec - x64 Release AMD64"
+# Name "ex_btrec - x64 Debug IA64"
+# Name "ex_btrec - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_btrec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_csvcode.dsp b/db/build_windows/ex_csvcode.dsp
new file mode 100644
index 000000000..43b083696
--- /dev/null
+++ b/db/build_windows/ex_csvcode.dsp
@@ -0,0 +1,296 @@
+# Microsoft Developer Studio Project File - Name="ex_csvcode" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_csvcode - Win32 Debug
+!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_csvcode.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_csvcode.mak" CFG="ex_csvcode - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_csvcode - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvcode - x64 Release IA64" (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_csvcode - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_csvcode"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_csvcode"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_csvcode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_csvcode"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_csvcode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_csvcode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_csvcode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_csvcode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ex_csvcode - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_csvcode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_csvcode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_csvcode - Win32 Release"
+# Name "ex_csvcode - Win32 Debug"
+# Name "ex_csvcode - Win32 ASCII Debug"
+# Name "ex_csvcode - Win32 ASCII Release"
+# Name "ex_csvcode - x64 Debug AMD64"
+# Name "ex_csvcode - x64 Release AMD64"
+# Name "ex_csvcode - x64 Debug IA64"
+# Name "ex_csvcode - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\csv\code.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_csvcode.dsp.postbuild b/db/build_windows/ex_csvcode.dsp.postbuild
new file mode 100644
index 000000000..d9c9877ca
--- /dev/null
+++ b/db/build_windows/ex_csvcode.dsp.postbuild
@@ -0,0 +1,5 @@
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Generate csv_local.c
+PostBuild_Cmds=$(OUTDIR)\ex_csvcode.exe -c ../examples_c/csv/csv_local.c -h ../examples_c/csv/csv_local.h -f ../examples_c/csv/sample.desc
+# End Special Build Tool
diff --git a/db/build_windows/ex_csvload.dsp b/db/build_windows/ex_csvload.dsp
new file mode 100644
index 000000000..a7a99e2f4
--- /dev/null
+++ b/db/build_windows/ex_csvload.dsp
@@ -0,0 +1,276 @@
+# Microsoft Developer Studio Project File - Name="ex_csvload" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_csvload - Win32 Debug
+!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_csvload.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_csvload.mak" CFG="ex_csvload - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_csvload - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvload - x64 Release IA64" (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_csvload - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_csvload"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_csvload - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_csvload"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_csvload - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_csvload"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_csvload"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_csvload - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_csvload"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_csvload - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_csvload"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_csvload - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_csvload"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_csvload - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_csvload"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_csvload - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_csvload"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_csvload"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_csvload - Win32 Release"
+# Name "ex_csvload - Win32 Debug"
+# Name "ex_csvload - Win32 ASCII Debug"
+# Name "ex_csvload - Win32 ASCII Release"
+# Name "ex_csvload - x64 Debug AMD64"
+# Name "ex_csvload - x64 Release AMD64"
+# Name "ex_csvload - x64 Debug IA64"
+# Name "ex_csvload - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\csv\DbRecord.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\csv_local.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\load.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\load_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_csvquery.dsp b/db/build_windows/ex_csvquery.dsp
new file mode 100644
index 000000000..8c0197043
--- /dev/null
+++ b/db/build_windows/ex_csvquery.dsp
@@ -0,0 +1,276 @@
+# Microsoft Developer Studio Project File - Name="ex_csvquery" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_csvquery - Win32 Debug
+!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_csvquery.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_csvquery.mak" CFG="ex_csvquery - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_csvquery - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_csvquery - x64 Release IA64" (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_csvquery - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_csvquery"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_csvquery"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_csvquery"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_csvquery"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_csvquery"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_csvquery"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_csvquery"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_csvquery"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_csvquery - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_csvquery"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_csvquery"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_csvquery - Win32 Release"
+# Name "ex_csvquery - Win32 Debug"
+# Name "ex_csvquery - Win32 ASCII Debug"
+# Name "ex_csvquery - Win32 ASCII Release"
+# Name "ex_csvquery - x64 Debug AMD64"
+# Name "ex_csvquery - x64 Release AMD64"
+# Name "ex_csvquery - x64 Debug IA64"
+# Name "ex_csvquery - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\csv\DbRecord.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\csv_local.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\query.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\query_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\csv\util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_env.dsp b/db/build_windows/ex_env.dsp
new file mode 100644
index 000000000..0fdfd4cc4
--- /dev/null
+++ b/db/build_windows/ex_env.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_env" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_env - Win32 Debug
+!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_env.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_env.mak" CFG="ex_env - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - x64 Release IA64" (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_env - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_env"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_env - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_env"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_env - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_env"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_env - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_env - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_env - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_env - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_env - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_env - Win32 Release"
+# Name "ex_env - Win32 Debug"
+# Name "ex_env - Win32 ASCII Debug"
+# Name "ex_env - Win32 ASCII Release"
+# Name "ex_env - x64 Debug AMD64"
+# Name "ex_env - x64 Release AMD64"
+# Name "ex_env - x64 Debug IA64"
+# Name "ex_env - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_env.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_lock.dsp b/db/build_windows/ex_lock.dsp
new file mode 100644
index 000000000..24a34975c
--- /dev/null
+++ b/db/build_windows/ex_lock.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_lock" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_lock - Win32 Debug
+!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_lock.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_lock.mak" CFG="ex_lock - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - x64 Release IA64" (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_lock - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_lock"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_lock - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_lock"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_lock - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_lock"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_lock - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_lock - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_lock - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_lock - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_lock - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_lock - Win32 Release"
+# Name "ex_lock - Win32 Debug"
+# Name "ex_lock - Win32 ASCII Debug"
+# Name "ex_lock - Win32 ASCII Release"
+# Name "ex_lock - x64 Debug AMD64"
+# Name "ex_lock - x64 Release AMD64"
+# Name "ex_lock - x64 Debug IA64"
+# Name "ex_lock - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_lock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_mpool.dsp b/db/build_windows/ex_mpool.dsp
new file mode 100644
index 000000000..f4434c4d5
--- /dev/null
+++ b/db/build_windows/ex_mpool.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_mpool" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_mpool - Win32 Debug
+!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_mpool.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_mpool.mak" CFG="ex_mpool - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - x64 Release IA64" (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_mpool - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_mpool"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_mpool - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_mpool"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_mpool - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_mpool"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_mpool - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_mpool - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_mpool - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_mpool - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_mpool - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_mpool - Win32 Release"
+# Name "ex_mpool - Win32 Debug"
+# Name "ex_mpool - Win32 ASCII Debug"
+# Name "ex_mpool - Win32 ASCII Release"
+# Name "ex_mpool - x64 Debug AMD64"
+# Name "ex_mpool - x64 Release AMD64"
+# Name "ex_mpool - x64 Debug IA64"
+# Name "ex_mpool - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_mpool.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_rep_base.dsp b/db/build_windows/ex_rep_base.dsp
new file mode 100644
index 000000000..759ccbaa5
--- /dev/null
+++ b/db/build_windows/ex_rep_base.dsp
@@ -0,0 +1,268 @@
+# Microsoft Developer Studio Project File - Name="ex_rep_base" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_rep_base - Win32 Debug
+!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_rep_base.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_rep_base.mak" CFG="ex_rep_base - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_rep_base - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_base - x64 Release IA64" (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_rep_base - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_rep_base"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_rep_base"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_rep_base"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_rep_base"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_rep_base"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib ws2_32.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_rep_base"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_rep_base"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_rep_base"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_rep_base - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_rep_base"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_rep_base"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib ws2_32.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_rep_base - Win32 Release"
+# Name "ex_rep_base - Win32 Debug"
+# Name "ex_rep_base - Win32 ASCII Debug"
+# Name "ex_rep_base - Win32 ASCII Release"
+# Name "ex_rep_base - x64 Debug AMD64"
+# Name "ex_rep_base - x64 Release AMD64"
+# Name "ex_rep_base - x64 Debug IA64"
+# Name "ex_rep_base - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_rep\base\rep_base.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_rep\base\rep_msg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_rep\base\rep_net.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_rep\common\rep_common.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_rep_mgr.dsp b/db/build_windows/ex_rep_mgr.dsp
new file mode 100644
index 000000000..e7a814f88
--- /dev/null
+++ b/db/build_windows/ex_rep_mgr.dsp
@@ -0,0 +1,260 @@
+# Microsoft Developer Studio Project File - Name="ex_rep_mgr" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_rep_mgr - Win32 Debug
+!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_rep_mgr.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_rep_mgr.mak" CFG="ex_rep_mgr - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_rep_mgr - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_rep_mgr - x64 Release IA64" (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_rep_mgr - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_rep_mgr"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_rep_mgr"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_rep_mgr"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_rep_mgr"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_rep_mgr"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_rep_mgr"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_rep_mgr"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_rep_mgr"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_rep_mgr - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_rep_mgr"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_rep_mgr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_rep_mgr - Win32 Release"
+# Name "ex_rep_mgr - Win32 Debug"
+# Name "ex_rep_mgr - Win32 ASCII Debug"
+# Name "ex_rep_mgr - Win32 ASCII Release"
+# Name "ex_rep_mgr - x64 Debug AMD64"
+# Name "ex_rep_mgr - x64 Release AMD64"
+# Name "ex_rep_mgr - x64 Debug IA64"
+# Name "ex_rep_mgr - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_rep\common\rep_common.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_rep\mgr\rep_mgr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_sequence.dsp b/db/build_windows/ex_sequence.dsp
new file mode 100644
index 000000000..1da0885dd
--- /dev/null
+++ b/db/build_windows/ex_sequence.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_sequence" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_sequence - Win32 Debug
+!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_sequence.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_sequence.mak" CFG="ex_sequence - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_sequence - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_sequence - x64 Release IA64" (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_sequence - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_sequence"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_sequence - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_sequence"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_sequence - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_sequence"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_sequence - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_sequence - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_sequence - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_sequence - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_sequence - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_sequence - Win32 Release"
+# Name "ex_sequence - Win32 Debug"
+# Name "ex_sequence - Win32 ASCII Debug"
+# Name "ex_sequence - Win32 ASCII Release"
+# Name "ex_sequence - x64 Debug AMD64"
+# Name "ex_sequence - x64 Release AMD64"
+# Name "ex_sequence - x64 Debug IA64"
+# Name "ex_sequence - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_sequence.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_tpcb.dsp b/db/build_windows/ex_tpcb.dsp
new file mode 100644
index 000000000..889533e3d
--- /dev/null
+++ b/db/build_windows/ex_tpcb.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_tpcb" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_tpcb - Win32 Debug
+!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_tpcb.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_tpcb.mak" CFG="ex_tpcb - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - x64 Release IA64" (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_tpcb - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_tpcb"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_tpcb"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_tpcb"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_tpcb - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_tpcb - Win32 Release"
+# Name "ex_tpcb - Win32 Debug"
+# Name "ex_tpcb - Win32 ASCII Debug"
+# Name "ex_tpcb - Win32 ASCII Release"
+# Name "ex_tpcb - x64 Debug AMD64"
+# Name "ex_tpcb - x64 Release AMD64"
+# Name "ex_tpcb - x64 Debug IA64"
+# Name "ex_tpcb - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_tpcb.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_txnguide.dsp b/db/build_windows/ex_txnguide.dsp
new file mode 100644
index 000000000..a33327620
--- /dev/null
+++ b/db/build_windows/ex_txnguide.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_txnguide" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_txnguide - Win32 Debug
+!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_txnguide.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_txnguide.mak" CFG="ex_txnguide - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_txnguide - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide - x64 Release IA64" (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_txnguide - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_txnguide"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_txnguide"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_txnguide"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_txnguide - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_txnguide - Win32 Release"
+# Name "ex_txnguide - Win32 Debug"
+# Name "ex_txnguide - Win32 ASCII Debug"
+# Name "ex_txnguide - Win32 ASCII Release"
+# Name "ex_txnguide - x64 Debug AMD64"
+# Name "ex_txnguide - x64 Release AMD64"
+# Name "ex_txnguide - x64 Debug IA64"
+# Name "ex_txnguide - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\txn_guide\txn_guide.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/ex_txnguide_inmem.dsp b/db/build_windows/ex_txnguide_inmem.dsp
new file mode 100644
index 000000000..7b0dc40a9
--- /dev/null
+++ b/db/build_windows/ex_txnguide_inmem.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="ex_txnguide_inmem" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_txnguide_inmem - Win32 Debug
+!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_txnguide_inmem.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_txnguide_inmem.mak" CFG="ex_txnguide_inmem - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_txnguide_inmem - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_txnguide_inmem - x64 Release IA64" (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_txnguide_inmem - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/ex_txnguide_inmem"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/ex_txnguide_inmem"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/ex_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/ex_txnguide_inmem"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/ex_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/ex_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/ex_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/ex_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "ex_txnguide_inmem - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/ex_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/ex_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_txnguide_inmem - Win32 Release"
+# Name "ex_txnguide_inmem - Win32 Debug"
+# Name "ex_txnguide_inmem - Win32 ASCII Debug"
+# Name "ex_txnguide_inmem - Win32 ASCII Release"
+# Name "ex_txnguide_inmem - x64 Debug AMD64"
+# Name "ex_txnguide_inmem - x64 Release AMD64"
+# Name "ex_txnguide_inmem - x64 Debug IA64"
+# Name "ex_txnguide_inmem - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\txn_guide\txn_guide_inmemory.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/example_database_load.dsp b/db/build_windows/example_database_load.dsp
new file mode 100644
index 000000000..3eed16250
--- /dev/null
+++ b/db/build_windows/example_database_load.dsp
@@ -0,0 +1,260 @@
+# Microsoft Developer Studio Project File - Name="example_database_load" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=example_database_load - Win32 Debug
+!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 "example_database_load.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 "example_database_load.mak" CFG="example_database_load - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "example_database_load - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_load - x64 Release IA64" (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)" == "example_database_load - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/example_database_load"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "example_database_load - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/example_database_load"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "example_database_load - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/example_database_load"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "example_database_load - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "example_database_load - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "example_database_load - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "example_database_load - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "example_database_load - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "example_database_load - Win32 Release"
+# Name "example_database_load - Win32 Debug"
+# Name "example_database_load - Win32 ASCII Debug"
+# Name "example_database_load - Win32 ASCII Release"
+# Name "example_database_load - x64 Debug AMD64"
+# Name "example_database_load - x64 Release AMD64"
+# Name "example_database_load - x64 Debug IA64"
+# Name "example_database_load - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\getting_started\example_database_load.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\getting_started\gettingstarted_common.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/example_database_read.dsp b/db/build_windows/example_database_read.dsp
new file mode 100644
index 000000000..65d241b8f
--- /dev/null
+++ b/db/build_windows/example_database_read.dsp
@@ -0,0 +1,260 @@
+# Microsoft Developer Studio Project File - Name="example_database_read" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=example_database_read - Win32 Debug
+!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 "example_database_read.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 "example_database_read.mak" CFG="example_database_read - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "example_database_read - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "example_database_read - x64 Release IA64" (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)" == "example_database_read - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/example_database_read"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "example_database_read - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/example_database_read"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "example_database_read - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/example_database_read"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "example_database_read - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "example_database_read - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "example_database_read - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "example_database_read - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "example_database_read - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "example_database_read - Win32 Release"
+# Name "example_database_read - Win32 Debug"
+# Name "example_database_read - Win32 ASCII Debug"
+# Name "example_database_read - Win32 ASCII Release"
+# Name "example_database_read - x64 Debug AMD64"
+# Name "example_database_read - x64 Release AMD64"
+# Name "example_database_read - x64 Debug IA64"
+# Name "example_database_read - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_c\getting_started\example_database_read.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\getting_started\gettingstarted_common.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_access.dsp b/db/build_windows/excxx_access.dsp
new file mode 100644
index 000000000..9e18187da
--- /dev/null
+++ b/db/build_windows/excxx_access.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_access" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_access - Win32 Debug
+!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 "excxx_access.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 "excxx_access.mak" CFG="excxx_access - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - x64 Release IA64" (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)" == "excxx_access - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_access"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_access - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_access"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_access - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_access"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_access - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_access - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_access - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_access - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_access - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_access"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_access"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_access - Win32 Release"
+# Name "excxx_access - Win32 Debug"
+# Name "excxx_access - Win32 ASCII Debug"
+# Name "excxx_access - Win32 ASCII Release"
+# Name "excxx_access - x64 Debug AMD64"
+# Name "excxx_access - x64 Release AMD64"
+# Name "excxx_access - x64 Debug IA64"
+# Name "excxx_access - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\AccessExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_btrec.dsp b/db/build_windows/excxx_btrec.dsp
new file mode 100644
index 000000000..568a8be64
--- /dev/null
+++ b/db/build_windows/excxx_btrec.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_btrec" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_btrec - Win32 Debug
+!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 "excxx_btrec.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 "excxx_btrec.mak" CFG="excxx_btrec - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - x64 Release IA64" (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)" == "excxx_btrec - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_btrec"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_btrec"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_btrec"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_btrec - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_btrec"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_btrec"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_btrec - Win32 Release"
+# Name "excxx_btrec - Win32 Debug"
+# Name "excxx_btrec - Win32 ASCII Debug"
+# Name "excxx_btrec - Win32 ASCII Release"
+# Name "excxx_btrec - x64 Debug AMD64"
+# Name "excxx_btrec - x64 Release AMD64"
+# Name "excxx_btrec - x64 Debug IA64"
+# Name "excxx_btrec - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\BtRecExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_env.dsp b/db/build_windows/excxx_env.dsp
new file mode 100644
index 000000000..75ed4f88c
--- /dev/null
+++ b/db/build_windows/excxx_env.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_env" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_env - Win32 Debug
+!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 "excxx_env.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 "excxx_env.mak" CFG="excxx_env - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - x64 Release IA64" (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)" == "excxx_env - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_env"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_env - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_env"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_env - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_env"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_env - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_env - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_env - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_env - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_env - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_env"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_env"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_env - Win32 Release"
+# Name "excxx_env - Win32 Debug"
+# Name "excxx_env - Win32 ASCII Debug"
+# Name "excxx_env - Win32 ASCII Release"
+# Name "excxx_env - x64 Debug AMD64"
+# Name "excxx_env - x64 Release AMD64"
+# Name "excxx_env - x64 Debug IA64"
+# Name "excxx_env - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\EnvExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_example_database_load.dsp b/db/build_windows/excxx_example_database_load.dsp
new file mode 100644
index 000000000..a25bf56ae
--- /dev/null
+++ b/db/build_windows/excxx_example_database_load.dsp
@@ -0,0 +1,260 @@
+# Microsoft Developer Studio Project File - Name="excxx_example_database_load" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_example_database_load - Win32 Debug
+!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 "excxx_example_database_load.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 "excxx_example_database_load.mak" CFG="excxx_example_database_load - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "excxx_example_database_load - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_load - x64 Release IA64" (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)" == "excxx_example_database_load - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_example_database_load"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_example_database_load"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_example_database_load"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_load - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_example_database_load"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_example_database_load"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_example_database_load - Win32 Release"
+# Name "excxx_example_database_load - Win32 Debug"
+# Name "excxx_example_database_load - Win32 ASCII Debug"
+# Name "excxx_example_database_load - Win32 ASCII Release"
+# Name "excxx_example_database_load - x64 Debug AMD64"
+# Name "excxx_example_database_load - x64 Release AMD64"
+# Name "excxx_example_database_load - x64 Debug IA64"
+# Name "excxx_example_database_load - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\getting_started\MyDb.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_cxx\getting_started\excxx_example_database_load.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_example_database_read.dsp b/db/build_windows/excxx_example_database_read.dsp
new file mode 100644
index 000000000..804bf70c6
--- /dev/null
+++ b/db/build_windows/excxx_example_database_read.dsp
@@ -0,0 +1,260 @@
+# Microsoft Developer Studio Project File - Name="excxx_example_database_read" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_example_database_read - Win32 Debug
+!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 "excxx_example_database_read.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 "excxx_example_database_read.mak" CFG="excxx_example_database_read - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "excxx_example_database_read - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_example_database_read - x64 Release IA64" (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)" == "excxx_example_database_read - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_example_database_read"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_example_database_read"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_example_database_read"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_example_database_read - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_example_database_read"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_example_database_read"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_example_database_read - Win32 Release"
+# Name "excxx_example_database_read - Win32 Debug"
+# Name "excxx_example_database_read - Win32 ASCII Debug"
+# Name "excxx_example_database_read - Win32 ASCII Release"
+# Name "excxx_example_database_read - x64 Debug AMD64"
+# Name "excxx_example_database_read - x64 Release AMD64"
+# Name "excxx_example_database_read - x64 Debug IA64"
+# Name "excxx_example_database_read - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\getting_started\MyDb.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_cxx\getting_started\excxx_example_database_read.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_lock.dsp b/db/build_windows/excxx_lock.dsp
new file mode 100644
index 000000000..51845a1dc
--- /dev/null
+++ b/db/build_windows/excxx_lock.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_lock" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_lock - Win32 Debug
+!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 "excxx_lock.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 "excxx_lock.mak" CFG="excxx_lock - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - x64 Release IA64" (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)" == "excxx_lock - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_lock"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_lock - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_lock"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_lock - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_lock"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_lock - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_lock - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_lock - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_lock - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_lock - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_lock"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_lock"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_lock - Win32 Release"
+# Name "excxx_lock - Win32 Debug"
+# Name "excxx_lock - Win32 ASCII Debug"
+# Name "excxx_lock - Win32 ASCII Release"
+# Name "excxx_lock - x64 Debug AMD64"
+# Name "excxx_lock - x64 Release AMD64"
+# Name "excxx_lock - x64 Debug IA64"
+# Name "excxx_lock - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\LockExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_mpool.dsp b/db/build_windows/excxx_mpool.dsp
new file mode 100644
index 000000000..140d56a4a
--- /dev/null
+++ b/db/build_windows/excxx_mpool.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_mpool" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_mpool - Win32 Debug
+!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 "excxx_mpool.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 "excxx_mpool.mak" CFG="excxx_mpool - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - x64 Release IA64" (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)" == "excxx_mpool - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_mpool"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_mpool"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_mpool"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_mpool - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_mpool"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_mpool"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_mpool - Win32 Release"
+# Name "excxx_mpool - Win32 Debug"
+# Name "excxx_mpool - Win32 ASCII Debug"
+# Name "excxx_mpool - Win32 ASCII Release"
+# Name "excxx_mpool - x64 Debug AMD64"
+# Name "excxx_mpool - x64 Release AMD64"
+# Name "excxx_mpool - x64 Debug IA64"
+# Name "excxx_mpool - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\MpoolExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_repquote.dsp b/db/build_windows/excxx_repquote.dsp
new file mode 100644
index 000000000..34b8a996a
--- /dev/null
+++ b/db/build_windows/excxx_repquote.dsp
@@ -0,0 +1,260 @@
+# Microsoft Developer Studio Project File - Name="excxx_repquote" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_repquote - Win32 Debug
+!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 "excxx_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 "excxx_repquote.mak" CFG="excxx_repquote - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "excxx_repquote - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_repquote - x64 Release IA64" (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)" == "excxx_repquote - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_repquote"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_repquote"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_repquote"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_repquote"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_repquote"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_repquote"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_repquote"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_repquote"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_repquote - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_repquote"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_repquote"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_repquote - Win32 Release"
+# Name "excxx_repquote - Win32 Debug"
+# Name "excxx_repquote - Win32 ASCII Debug"
+# Name "excxx_repquote - Win32 ASCII Release"
+# Name "excxx_repquote - x64 Debug AMD64"
+# Name "excxx_repquote - x64 Release AMD64"
+# Name "excxx_repquote - x64 Debug IA64"
+# Name "excxx_repquote - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\excxx_repquote\RepConfigInfo.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_cxx\excxx_repquote\RepQuoteExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_sequence.dsp b/db/build_windows/excxx_sequence.dsp
new file mode 100644
index 000000000..be5b1f002
--- /dev/null
+++ b/db/build_windows/excxx_sequence.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_sequence" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_sequence - Win32 Debug
+!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 "excxx_sequence.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 "excxx_sequence.mak" CFG="excxx_sequence - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "excxx_sequence - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_sequence - x64 Release IA64" (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)" == "excxx_sequence - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_sequence"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_sequence"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_sequence"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_sequence - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_sequence"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_sequence"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_sequence - Win32 Release"
+# Name "excxx_sequence - Win32 Debug"
+# Name "excxx_sequence - Win32 ASCII Debug"
+# Name "excxx_sequence - Win32 ASCII Release"
+# Name "excxx_sequence - x64 Debug AMD64"
+# Name "excxx_sequence - x64 Release AMD64"
+# Name "excxx_sequence - x64 Debug IA64"
+# Name "excxx_sequence - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\SequenceExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_tpcb.dsp b/db/build_windows/excxx_tpcb.dsp
new file mode 100644
index 000000000..26032d795
--- /dev/null
+++ b/db/build_windows/excxx_tpcb.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_tpcb" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_tpcb - Win32 Debug
+!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 "excxx_tpcb.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 "excxx_tpcb.mak" CFG="excxx_tpcb - Win32 Debug"
+!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 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - x64 Release IA64" (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)" == "excxx_tpcb - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_tpcb"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_tpcb"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_tpcb"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_tpcb - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_tpcb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_tpcb"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_tpcb - Win32 Release"
+# Name "excxx_tpcb - Win32 Debug"
+# Name "excxx_tpcb - Win32 ASCII Debug"
+# Name "excxx_tpcb - Win32 ASCII Release"
+# Name "excxx_tpcb - x64 Debug AMD64"
+# Name "excxx_tpcb - x64 Release AMD64"
+# Name "excxx_tpcb - x64 Debug IA64"
+# Name "excxx_tpcb - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\TpcbExample.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_txnguide.dsp b/db/build_windows/excxx_txnguide.dsp
new file mode 100644
index 000000000..d22ded8f2
--- /dev/null
+++ b/db/build_windows/excxx_txnguide.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_txnguide" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_txnguide - Win32 Debug
+!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 "excxx_txnguide.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 "excxx_txnguide.mak" CFG="excxx_txnguide - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "excxx_txnguide - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide - x64 Release IA64" (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)" == "excxx_txnguide - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_txnguide"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_txnguide"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_txnguide"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_txnguide"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_txnguide"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_txnguide - Win32 Release"
+# Name "excxx_txnguide - Win32 Debug"
+# Name "excxx_txnguide - Win32 ASCII Debug"
+# Name "excxx_txnguide - Win32 ASCII Release"
+# Name "excxx_txnguide - x64 Debug AMD64"
+# Name "excxx_txnguide - x64 Release AMD64"
+# Name "excxx_txnguide - x64 Debug IA64"
+# Name "excxx_txnguide - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\txn_guide\TxnGuide.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/excxx_txnguide_inmem.dsp b/db/build_windows/excxx_txnguide_inmem.dsp
new file mode 100644
index 000000000..c54be9030
--- /dev/null
+++ b/db/build_windows/excxx_txnguide_inmem.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="excxx_txnguide_inmem" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=excxx_txnguide_inmem - Win32 Debug
+!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 "excxx_txnguide_inmem.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 "excxx_txnguide_inmem.mak" CFG="excxx_txnguide_inmem - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "excxx_txnguide_inmem - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_txnguide_inmem - x64 Release IA64" (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)" == "excxx_txnguide_inmem - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/excxx_txnguide_inmem"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/excxx_txnguide_inmem"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/excxx_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/excxx_txnguide_inmem"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/excxx_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/excxx_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/excxx_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/excxx_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "excxx_txnguide_inmem - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/excxx_txnguide_inmem"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/excxx_txnguide_inmem"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "excxx_txnguide_inmem - Win32 Release"
+# Name "excxx_txnguide_inmem - Win32 Debug"
+# Name "excxx_txnguide_inmem - Win32 ASCII Debug"
+# Name "excxx_txnguide_inmem - Win32 ASCII Release"
+# Name "excxx_txnguide_inmem - x64 Debug AMD64"
+# Name "excxx_txnguide_inmem - x64 Release AMD64"
+# Name "excxx_txnguide_inmem - x64 Debug IA64"
+# Name "excxx_txnguide_inmem - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\examples_cxx\txn_guide\TxnGuideInMemory.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/include.tcl b/db/build_windows/include.tcl
new file mode 100644
index 000000000..e82d66dab
--- /dev/null
+++ b/db/build_windows/include.tcl
@@ -0,0 +1,28 @@
+# Automatically built by dist/s_test; may require local editing.
+
+set tclsh_path SET_YOUR_TCLSH_PATH
+set tcllib ./Debug/libdb_tcl45d.dll
+
+set src_root ..
+set test_path ../test
+set je_root ../../je
+
+global testdir
+set testdir ./TESTDIR
+
+global dict
+global util_path
+
+global is_freebsd_test
+global is_hp_test
+global is_linux_test
+global is_qnx_test
+global is_sunos_test
+global is_windows_test
+global is_windows9x_test
+
+global valid_methods
+global checking_valid_methods
+global test_recopts
+
+set KILL ./dbkill.exe
diff --git a/db/build_windows/libdb.def b/db/build_windows/libdb.def
new file mode 100644
index 000000000..ac3379f9e
--- /dev/null
+++ b/db/build_windows/libdb.def
@@ -0,0 +1,177 @@
+; DO NOT EDIT: automatically built by dist/s_windows.
+
+EXPORTS
+ db_create @1
+ db_env_create @2
+ db_sequence_create @3
+ db_strerror @4
+ db_version @5
+ db_xa_switch @6
+ log_compare @7
+ __db_add_recovery @8
+ __db_dbm_close @9
+ __db_dbm_delete @10
+ __db_dbm_fetch @11
+ __db_dbm_firstkey @12
+ __db_dbm_init @13
+ __db_dbm_nextkey @14
+ __db_dbm_store @15
+ __db_get_flags_fn @16
+ __db_get_seq_flags_fn @17
+ __db_hcreate @18
+ __db_hdestroy @19
+ __db_hsearch @20
+ __db_loadme @21
+ __db_ndbm_clearerr @22
+ __db_ndbm_close @23
+ __db_ndbm_delete @24
+ __db_ndbm_dirfno @25
+ __db_ndbm_error @26
+ __db_ndbm_fetch @27
+ __db_ndbm_firstkey @28
+ __db_ndbm_nextkey @29
+ __db_ndbm_open @30
+ __db_ndbm_pagfno @31
+ __db_ndbm_rdonly @32
+ __db_ndbm_store @33
+ __db_panic @34
+ __db_r_attach @35
+ __db_r_detach @36
+ __ham_func2 @37
+ __ham_func3 @38
+ __ham_func4 @39
+ __ham_func5 @40
+ __ham_test @41
+ __lock_id_set @42
+ __os_calloc @43
+ __os_closehandle @44
+ __os_dirfree @45
+ __os_dirlist @46
+ __os_free @47
+ __os_get_syserr @48
+ __os_getenv @49
+ __os_ioinfo @50
+ __os_malloc @51
+ __os_mkdir @52
+ __os_open @53
+ __os_openhandle @54
+ __os_posix_err @55
+ __os_read @56
+ __os_realloc @57
+ __os_strdup @58
+ __os_umalloc @59
+ __os_unlink @60
+ __os_write @61
+ __txn_id_set @62
+ __bam_adj_read @63
+ __bam_cadjust_read @64
+ __bam_cdel_read @65
+ __bam_curadj_read @66
+ __bam_merge_read @67
+ __bam_pgin @68
+ __bam_pgno_read @69
+ __bam_pgout @70
+ __bam_rcuradj_read @71
+ __bam_relink_43_read @72
+ __bam_relink_read @73
+ __bam_repl_read @74
+ __bam_root_read @75
+ __bam_rsplit_read @76
+ __bam_split_read @77
+ __crdel_inmem_create_read @78
+ __crdel_inmem_remove_read @79
+ __crdel_inmem_rename_read @80
+ __crdel_metasub_read @81
+ __db_addrem_read @82
+ __db_big_read @83
+ __db_cksum_read @84
+ __db_ctime @85
+ __db_debug_read @86
+ __db_dispatch @87
+ __db_dl @88
+ __db_dumptree @89
+ __db_err @90
+ __db_errx @91
+ __db_getlong @92
+ __db_getulong @93
+ __db_global_values @94
+ __db_isbigendian @95
+ __db_mkpath @96
+ __db_msg @97
+ __db_noop_read @98
+ __db_omode @99
+ __db_ovref_read @100
+ __db_pg_alloc_42_read @101
+ __db_pg_alloc_read @102
+ __db_pg_free_42_read @103
+ __db_pg_free_read @104
+ __db_pg_freedata_42_read @105
+ __db_pg_freedata_read @106
+ __db_pg_init_read @107
+ __db_pg_new_read @108
+ __db_pg_prepare_read @109
+ __db_pg_sort_read @110
+ __db_pgin @111
+ __db_pgout @112
+ __db_pr_callback @113
+ __db_relink_42_read @114
+ __db_rpath @115
+ __db_stat_pp @116
+ __db_stat_print_pp @117
+ __db_util_cache @118
+ __db_util_interrupted @119
+ __db_util_logset @120
+ __db_util_siginit @121
+ __db_util_sigresend @122
+ __db_verify_internal @123
+ __dbreg_register_read @124
+ __fop_create_read @125
+ __fop_file_remove_read @126
+ __fop_remove_read @127
+ __fop_rename_read @128
+ __fop_write_read @129
+ __ham_chgpg_read @130
+ __ham_copypage_read @131
+ __ham_curadj_read @132
+ __ham_get_meta @133
+ __ham_groupalloc_42_read @134
+ __ham_groupalloc_read @135
+ __ham_insdel_read @136
+ __ham_metagroup_42_read @137
+ __ham_metagroup_read @138
+ __ham_newpage_read @139
+ __ham_pgin @140
+ __ham_pgout @141
+ __ham_release_meta @142
+ __ham_replace_read @143
+ __ham_splitdata_read @144
+ __lock_list_print @145
+ __log_stat_pp @146
+ __mutex_set_wait_info @147
+ __os_abspath @148
+ __os_clock @149
+ __os_exists @150
+ __os_get_errno @151
+ __os_id @152
+ __os_mapfile @153
+ __os_seek @154
+ __os_set_errno @155
+ __os_sleep @156
+ __os_spin @157
+ __os_ufree @158
+ __os_unmapfile @159
+ __os_yield @160
+ __qam_add_read @161
+ __qam_del_read @162
+ __qam_delext_read @163
+ __qam_incfirst_read @164
+ __qam_mvptr_read @165
+ __qam_pgin_out @166
+ __rep_stat_print @167
+ __txn_child_read @168
+ __txn_ckp_42_read @169
+ __txn_ckp_read @170
+ __txn_recycle_read @171
+ __txn_regop_42_read @172
+ __txn_regop_read @173
+ __txn_xa_regop_read @174
diff --git a/db/build_windows/libdb.rc b/db/build_windows/libdb.rc
new file mode 100644
index 000000000..4b0666cc5
--- /dev/null
+++ b/db/build_windows/libdb.rc
@@ -0,0 +1,33 @@
+1 VERSIONINFO
+ FILEVERSION 4,0,5,20
+ PRODUCTVERSION 4,0,5,20
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Oracle Corporation\0"
+ VALUE "FileDescription", "Berkeley DB 4.5 DLL\0"
+ VALUE "FileVersion", "4.5.20\0"
+ VALUE "InternalName", "libdb45.dll\0"
+ VALUE "LegalCopyright", "Copyright © Oracle Corporation 1997-2006\0"
+ VALUE "OriginalFilename", "libdb45.dll\0"
+ VALUE "ProductName", "Oracle Corporation libdb\0"
+ VALUE "ProductVersion", "4.5.20\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
diff --git a/db/build_windows/libdb_tcl.def b/db/build_windows/libdb_tcl.def
new file mode 100644
index 000000000..01a89e44d
--- /dev/null
+++ b/db/build_windows/libdb_tcl.def
@@ -0,0 +1,7 @@
+; $Id: libdb_tcl.def,v 12.0 2004/11/17 03:48:15 bostic Exp $
+
+DESCRIPTION 'Berkeley DB TCL interface Library'
+EXPORTS
+ Db_tcl_Init
+ _NameToPtr
+
diff --git a/db/build_windows/libdbrc.src b/db/build_windows/libdbrc.src
new file mode 100644
index 000000000..e624e77a1
--- /dev/null
+++ b/db/build_windows/libdbrc.src
@@ -0,0 +1,33 @@
+1 VERSIONINFO
+ FILEVERSION %MAJOR%,0,%MINOR%,%PATCH%
+ PRODUCTVERSION %MAJOR%,0,%MINOR%,%PATCH%
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Oracle Corporation\0"
+ VALUE "FileDescription", "Berkeley DB %MAJOR%.%MINOR% DLL\0"
+ VALUE "FileVersion", "%MAJOR%.%MINOR%.%PATCH%\0"
+ VALUE "InternalName", "libdb%MAJOR%%MINOR%.dll\0"
+ VALUE "LegalCopyright", "Copyright © Oracle Corporation 1997-2006\0"
+ VALUE "OriginalFilename", "libdb%MAJOR%%MINOR%.dll\0"
+ VALUE "ProductName", "Oracle Corporation libdb\0"
+ VALUE "ProductVersion", "%MAJOR%.%MINOR%.%PATCH%\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
diff --git a/db/build_windows/srcfile_dsp.src b/db/build_windows/srcfile_dsp.src
new file mode 100644
index 000000000..408a55e2a
--- /dev/null
+++ b/db/build_windows/srcfile_dsp.src
@@ -0,0 +1,4 @@
+# Begin Source File
+
+SOURCE=@srcdir@\@srcfile@
+# End Source File
diff --git a/db/build_windows/static_dsp.src b/db/build_windows/static_dsp.src
new file mode 100644
index 000000000..aba9c79cc
--- /dev/null
+++ b/db/build_windows/static_dsp.src
@@ -0,0 +1,235 @@
+# 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
+!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"
+!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 ASCII Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - Win32 ASCII Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - x64 Debug AMD64" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - x64 Release AMD64" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - x64 Debug IA64" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - x64 Release IA64" (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"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@"
+# PROP BASE Intermediate_Dir "Release/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@"
+# PROP Intermediate_Dir "Release/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /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:"@lib_rel_dest@/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+# ADD LIB32 /nologo /out:"@lib_rel_dest@/libdb@lib_suffix@@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 "@lib_debug_dest@"
+# PROP BASE Intermediate_Dir "Debug/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@"
+# PROP Intermediate_Dir "Debug/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /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:"@lib_debug_dest@/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+# ADD LIB32 /nologo /out:"@lib_debug_dest@/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" @extra_cppflags@ /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:"@lib_rel_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+# ADD LIB32 /nologo /out:"@lib_rel_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" @extra_cppflags@ /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:"@lib_debug_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+# ADD LIB32 /nologo /out:"@lib_debug_dest@_ASCII/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@_AMD64"
+# PROP BASE Intermediate_Dir "Debug/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /Wp64 /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:"@lib_debug_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+# ADD LIB32 /nologo /out:"@lib_debug_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /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:"@lib_rel_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+# ADD LIB32 /nologo /out:"@lib_rel_dest@_AMD64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "@lib_debug_dest@_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "@lib_debug_dest@_IA64"
+# PROP Intermediate_Dir "Debug_IA64/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "DIAGNOSTIC" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /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:"@lib_debug_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+# ADD LIB32 /nologo /out:"@lib_debug_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "@lib_rel_dest@_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/@project_name@"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "@lib_rel_dest@_IA64"
+# PROP Intermediate_Dir "Release_IA64/@project_name@"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" @extra_cppflags@ /Wp64 /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:"@lib_rel_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+# ADD LIB32 /nologo /out:"@lib_rel_dest@_IA64/libdb@lib_suffix@@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "@project_name@ - Win32 Release"
+# Name "@project_name@ - Win32 Debug"
+# Name "@project_name@ - Win32 ASCII Release"
+# Name "@project_name@ - Win32 ASCII Debug"
+# Name "@project_name@ - x64 Debug AMD64"
+# Name "@project_name@ - x64 Release AMD64"
+# Name "@project_name@ - x64 Debug IA64"
+# Name "@project_name@ - x64 Release IA64"
+@SOURCE_FILES@
+# End Target
+# End Project
diff --git a/db/build_windows/tm.dsp b/db/build_windows/tm.dsp
new file mode 100644
index 000000000..5917fc796
--- /dev/null
+++ b/db/build_windows/tm.dsp
@@ -0,0 +1,256 @@
+# Microsoft Developer Studio Project File - Name="tm" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=tm - Win32 Debug
+!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 "tm.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 "tm.mak" CFG="tm - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tm - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - Win32 ASCII Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - Win32 ASCII Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - x64 Debug AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - x64 Release AMD64" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - x64 Debug IA64" (based on "Win32 (x86) Console Application")
+!MESSAGE "tm - x64 Release IA64" (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)" == "tm - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release/tm"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release"
+
+!ELSEIF "$(CFG)" == "tm - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug/tm"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug"
+
+!ELSEIF "$(CFG)" == "tm - Win32 ASCII Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_ASCII"
+# PROP BASE Intermediate_Dir "Debug_ASCII/tm"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_ASCII"
+# PROP Intermediate_Dir "Debug_ASCII/tm"
+# 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" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /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 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_ASCII"
+
+!ELSEIF "$(CFG)" == "tm - Win32 ASCII Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_ASCII"
+# PROP BASE Intermediate_Dir "Release_ASCII/tm"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_ASCII"
+# PROP Intermediate_Dir "Release_ASCII/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /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 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt" /libpath:"Release_ASCII"
+
+!ELSEIF "$(CFG)" == "tm - x64 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_AMD64"
+# PROP BASE Intermediate_Dir "Debug_AMD64/tm"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_AMD64"
+# PROP Intermediate_Dir "Debug_AMD64/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:AMD64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_AMD64"
+
+!ELSEIF "$(CFG)" == "tm - x64 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_AMD64"
+# PROP BASE Intermediate_Dir "Release_AMD64/tm"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_AMD64"
+# PROP Intermediate_Dir "Release_AMD64/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:AMD64 /nodefaultlib:"libcmt" /libpath:"Release_AMD64"
+
+!ELSEIF "$(CFG)" == "tm - x64 Debug IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_IA64"
+# PROP BASE Intermediate_Dir "Debug_IA64/tm"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_IA64"
+# PROP Intermediate_Dir "Debug_IA64/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /Wp64 /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 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 libdb45d.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:IA64 /nodefaultlib:"libcmtd" /fixed:no /libpath:"Debug_IA64"
+
+!ELSEIF "$(CFG)" == "tm - x64 Release IA64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_IA64"
+# PROP BASE Intermediate_Dir "Release_IA64/tm"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_IA64"
+# PROP Intermediate_Dir "Release_IA64/tm"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /FD /c
+# ADD CPP /nologo /MD /W3 /EHsc /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /Wp64 /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 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt"
+# ADD LINK32 libdb45.lib bufferoverflowU.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:IA64 /nodefaultlib:"libcmt" /libpath:"Release_IA64"
+
+!ENDIF
+
+# Begin Target
+
+# Name "tm - Win32 Release"
+# Name "tm - Win32 Debug"
+# Name "tm - Win32 ASCII Debug"
+# Name "tm - Win32 ASCII Release"
+# Name "tm - x64 Debug AMD64"
+# Name "tm - x64 Release AMD64"
+# Name "tm - x64 Debug IA64"
+# Name "tm - x64 Release IA64"
+# Begin Source File
+
+SOURCE=..\mutex\tm.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_windows/win_db.h b/db/build_windows/win_db.h
new file mode 100644
index 000000000..88d3b15b4
--- /dev/null
+++ b/db/build_windows/win_db.h
@@ -0,0 +1,143 @@
+/*-
+ * $Id: win_db.h,v 12.188 2006/09/20 20:08:48 bostic Exp $
+ *
+ * The following provides the information necessary to build Berkeley
+ * DB on native Windows, and other Windows environments such as MinGW.
+ */
+
+/*
+ * Avoid warnings with Visual Studio 8.
+ */
+#define _CRT_SECURE_NO_DEPRECATE 1
+
+/*
+ * Windows NT 4.0 and later required for the replication manager.
+ */
+#ifdef HAVE_REPLICATION_THREADS
+#define _WIN32_WINNT 0x0400
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/timeb.h>
+
+#include <direct.h>
+#include <errno.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 <tchar.h>
+#include <time.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>
+#include <winsock2.h>
+
+#ifdef HAVE_GETADDRINFO
+/*
+ * Need explicit includes for IPv6 support on Windows. Both are necessary to
+ * ensure that pre WinXP versions have an implementation of the getaddrinfo API.
+ */
+#include <ws2tcpip.h>
+#include <wspiapi.h>
+#endif
+
+/*
+ * All of the necessary includes have been included, ignore the #includes
+ * in the Berkeley DB source files.
+ */
+#define NO_SYSTEM_INCLUDES
+
+/*
+ * Microsoft's C runtime library has fsync, getcwd, getpid, snprintf and
+ * vsnprintf, but under different names.
+ */
+#define fsync _commit
+#define getcwd(buf, size) _getcwd(buf, size)
+#define getpid _getpid
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
+
+#define h_errno WSAGetLastError()
+
+/*
+ * Windows defines off_t to long (i.e., 32 bits). We need to pass 64-bit
+ * file offsets, so we declare our own.
+ */
+#define off_t __db_off_t
+typedef __int64 off_t;
+
+/*
+ * Win32 does not have getopt.
+ *
+ * The externs are here (instead of using db_config.h and clib_port.h),
+ * because Berkeley DB example programs use getopt and they can't #include
+ * those files.
+ */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+extern int getopt(int, char * const *, const char *);
+#if defined(__cplusplus)
+}
+#endif
+
+#ifdef _UNICODE
+#define TO_TSTRING(dbenv, s, ts, ret) do { \
+ int __len = (int)strlen(s) + 1; \
+ ts = NULL; \
+ if ((ret = __os_malloc((dbenv), \
+ __len * sizeof(_TCHAR), &(ts))) == 0 && \
+ MultiByteToWideChar(CP_UTF8, 0, \
+ (s), -1, (ts), __len) == 0) \
+ ret = __os_posix_err(__os_get_syserr()); \
+ } while (0)
+
+#define FROM_TSTRING(dbenv, ts, s, ret) { \
+ int __len = WideCharToMultiByte(CP_UTF8, 0, ts, -1, \
+ NULL, 0, NULL, NULL); \
+ s = NULL; \
+ if ((ret = __os_malloc((dbenv), __len, &(s))) == 0 && \
+ WideCharToMultiByte(CP_UTF8, 0, \
+ (ts), -1, (s), __len, NULL, NULL) == 0) \
+ ret = __os_posix_err(__os_get_syserr()); \
+ } while (0)
+
+#define FREE_STRING(dbenv, s) do { \
+ if ((s) != NULL) { \
+ __os_free((dbenv), (s)); \
+ (s) = NULL; \
+ } \
+ } while (0)
+
+#else
+#define TO_TSTRING(dbenv, s, ts, ret) (ret) = 0, (ts) = (_TCHAR *)(s)
+#define FROM_TSTRING(dbenv, ts, s, ret) (ret) = 0, (s) = (char *)(ts)
+#define FREE_STRING(dbenv, ts)
+#endif
+
+#ifndef INVALID_HANDLE_VALUE
+#define INVALID_HANDLE_VALUE ((HANDLE)-1)
+#endif
+
+#ifndef INVALID_FILE_ATTRIBUTES
+#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
+#endif
+
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER ((DWORD)-1)
+#endif
diff --git a/db/clib/abort.c b/db/clib/abort.c
new file mode 100644
index 000000000..d3069a442
--- /dev/null
+++ b/db/clib/abort.c
@@ -0,0 +1,29 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: abort.c,v 1.3 2006/09/07 14:12:59 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * abort --
+ *
+ * PUBLIC: #ifndef HAVE_ABORT
+ * PUBLIC: void abort __P((void));
+ * PUBLIC: #endif
+ */
+void
+abort()
+{
+#ifdef SIGABRT
+ raise(SIGABRT); /* Try and drop core. */
+#endif
+ exit(1);
+ /* NOTREACHED */
+}
diff --git a/db/clib/atoi.c b/db/clib/atoi.c
new file mode 100644
index 000000000..d064ffb0e
--- /dev/null
+++ b/db/clib/atoi.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * atoi --
+ *
+ * PUBLIC: #ifndef HAVE_ATOI
+ * PUBLIC: int atoi __P((const char *));
+ * PUBLIC: #endif
+ */
+int
+atoi(str)
+ const char *str;
+{
+ return (int)strtol(str, (char **)NULL, 10);
+}
diff --git a/db/clib/atol.c b/db/clib/atol.c
new file mode 100644
index 000000000..9aefcd5a2
--- /dev/null
+++ b/db/clib/atol.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * atol --
+ *
+ * PUBLIC: #ifndef HAVE_ATOL
+ * PUBLIC: long atol __P((const char *));
+ * PUBLIC: #endif
+ */
+long
+atol(str)
+ const char *str;
+{
+ return strtol(str, (char **)NULL, 10);
+}
diff --git a/db/clib/ctime.c b/db/clib/ctime.c
new file mode 100644
index 000000000..49375d5da
--- /dev/null
+++ b/db/clib/ctime.c
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ctime.c,v 12.10 2006/08/24 14:45:09 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __db_ctime --
+ * Format a time-stamp.
+ *
+ * PUBLIC: char *__db_ctime __P((const time_t *, char *));
+ */
+char *
+__db_ctime(tod, time_buf)
+ const time_t *tod;
+ char *time_buf;
+{
+ time_buf[CTIME_BUFLEN - 1] = '\0';
+
+ /*
+ * The ctime_r interface is the POSIX standard, thread-safe version of
+ * ctime. However, it was implemented in two different ways (with and
+ * without a buffer length argument), and you can't depend on a return
+ * value of (char *), the version in HPUX 10.XX returned an int.
+ */
+#if defined(HAVE_CTIME_R_3ARG)
+ (void)ctime_r(tod, time_buf, CTIME_BUFLEN);
+#elif defined(HAVE_CTIME_R)
+ (void)ctime_r(tod, time_buf);
+#else
+ (void)strncpy(time_buf, ctime(tod), CTIME_BUFLEN - 1);
+#endif
+ return (time_buf);
+}
diff --git a/db/clib/getaddrinfo.c b/db/clib/getaddrinfo.c
new file mode 100644
index 000000000..769dda67d
--- /dev/null
+++ b/db/clib/getaddrinfo.c
@@ -0,0 +1,161 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: getaddrinfo.c,v 1.5 2006/08/24 14:45:09 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+/*
+ * __db_getaddrinfo and __db_freeaddrinfo wrap the getaddrinfo and freeaddrinfo
+ * calls, as well as the associated platform dependent error handling, mapping
+ * the error return to a ANSI C/POSIX error return.
+ */
+
+/*
+ * __db_getaddrinfo --
+ *
+ * PUBLIC: #if defined(HAVE_REPLICATION_THREADS)
+ * PUBLIC: int __db_getaddrinfo __P((DB_ENV *, const char *, u_int,
+ * PUBLIC: const char *, const ADDRINFO *, ADDRINFO **));
+ * PUBLIC: #endif
+ */
+int
+__db_getaddrinfo(dbenv, nodename, port, servname, hints, res)
+ DB_ENV *dbenv;
+ const char *nodename, *servname;
+ u_int port;
+ const ADDRINFO *hints;
+ ADDRINFO **res;
+{
+#ifdef HAVE_GETADDRINFO
+ int ret;
+
+ if ((ret = getaddrinfo(nodename, servname, hints, res)) == 0)
+ return (0);
+
+ __db_errx(dbenv, "%s(%u): host lookup failed: %s",
+ nodename == NULL ? "" : nodename, port,
+#ifdef DB_WIN32
+ gai_strerrorA(ret));
+#else
+ gai_strerror(ret));
+#endif
+ return (__os_posix_err(ret));
+#else
+ ADDRINFO *answer;
+ struct hostent *hostaddr;
+ struct sockaddr_in sin;
+ u_int32_t tmpaddr;
+ int ret;
+
+ COMPQUIET(hints, NULL);
+ COMPQUIET(servname, NULL);
+
+ /*
+ * Basic implementation of IPv4 component of getaddrinfo.
+ * Limited to the functionality used by repmgr.
+ */
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ if (nodename) {
+ if (nodename[0] == '\0')
+ sin.sin_addr.s_addr = htonl(INADDR_ANY);
+ else if ((tmpaddr = inet_addr(nodename)) != INADDR_NONE) {
+ sin.sin_addr.s_addr = tmpaddr;
+ } else {
+ hostaddr = gethostbyname(nodename);
+ if (hostaddr == NULL) {
+#ifdef DB_WIN32
+ ret = __os_get_neterr();
+ __db_syserr(dbenv, ret,
+ "%s(%u): host lookup failed",
+ nodename == NULL ? "" : nodename, port);
+ return (__os_posix_err(ret));
+#else
+ /*
+ * Historic UNIX systems used the h_errno
+ * global variable to return gethostbyname
+ * errors. The only function we currently
+ * use that needs h_errno is gethostbyname,
+ * so we deal with it here.
+ */
+ __db_errx(dbenv,
+ "%s(%u): host lookup failed: %s",
+ nodename == NULL ? "" : nodename, port,
+ hstrerror(h_errno));
+ switch (h_errno) {
+ case HOST_NOT_FOUND:
+ case NO_DATA:
+ return (EHOSTUNREACH);
+ case TRY_AGAIN:
+ return (EAGAIN);
+ case NO_RECOVERY:
+ default:
+ return (EFAULT);
+ }
+ /* NOTREACHED */
+#endif
+ }
+ memcpy(&(sin.sin_addr),
+ hostaddr->h_addr, (size_t)hostaddr->h_length);
+ }
+ } else /* No host specified. */
+ sin.sin_addr.s_addr = htonl(INADDR_ANY);
+ sin.sin_port = htons((u_int16_t)port);
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(ADDRINFO), &answer)) != 0)
+ return (ret);
+ if ((ret = __os_malloc(dbenv, sizeof(sin), &answer->ai_addr)) != 0) {
+ __os_free(dbenv, answer);
+ return (ret);
+ }
+
+ answer->ai_family = AF_INET;
+ answer->ai_protocol = IPPROTO_TCP;
+ answer->ai_socktype = SOCK_STREAM;
+ answer->ai_addrlen = sizeof(sin);
+ memcpy(answer->ai_addr, &sin, sizeof(sin));
+ *res = answer;
+
+ return (0);
+#endif /* HAVE_GETADDRINFO */
+}
+
+/*
+ * __db_freeaddrinfo --
+ *
+ * PUBLIC: #if defined(HAVE_REPLICATION_THREADS)
+ * PUBLIC: void __db_freeaddrinfo __P((DB_ENV *, ADDRINFO *));
+ * PUBLIC: #endif
+ */
+void
+__db_freeaddrinfo(dbenv, ai)
+ DB_ENV *dbenv;
+ ADDRINFO *ai;
+{
+#ifdef HAVE_GETADDRINFO
+ COMPQUIET(dbenv, NULL);
+
+ freeaddrinfo(ai);
+#else
+ ADDRINFO *next, *tmpaddr;
+
+ for (next = ai; next != NULL; next = tmpaddr) {
+ if (next->ai_canonname != NULL)
+ __os_free(dbenv, next->ai_canonname);
+
+ if (next->ai_addr != NULL)
+ __os_free(dbenv, next->ai_addr);
+
+ tmpaddr = next->ai_next;
+ __os_free(dbenv, next);
+ }
+#endif
+}
diff --git a/db/clib/getcwd.c b/db/clib/getcwd.c
index ec28f1fb6..7a2ce2d7d 100644
--- a/db/clib/getcwd.c
+++ b/db/clib/getcwd.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1989, 1991, 1993
@@ -32,15 +32,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: getcwd.c,v 11.15 2004/01/28 03:35:52 bostic Exp $
+ * $Id: getcwd.c,v 12.5 2006/08/24 14:45:09 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <sys/stat.h>
+#include "db_int.h"
+#ifndef NO_SYSTEM_INCLUDES
#if HAVE_DIRENT_H
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
@@ -57,15 +56,8 @@
# include <ndir.h>
# endif
#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
#endif
-#include "db_int.h"
-
#define ISDOT(dp) \
(dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
(dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
diff --git a/db/clib/getopt.c b/db/clib/getopt.c
index 527ee6967..86b436809 100644
--- a/db/clib/getopt.c
+++ b/db/clib/getopt.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1987, 1993, 1994
@@ -32,17 +32,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: getopt.c,v 11.9 2004/01/28 03:35:52 bostic Exp $
+ * $Id: getopt.c,v 12.4 2006/08/24 14:45:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
int __db_getopt_reset; /* global reset for VxWorks. */
diff --git a/db/clib/isalpha.c b/db/clib/isalpha.c
new file mode 100644
index 000000000..7d77d8dad
--- /dev/null
+++ b/db/clib/isalpha.c
@@ -0,0 +1,29 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: isalpha.c,v 1.2 2006/08/24 14:45:10 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * isalpha --
+ *
+ * PUBLIC: #ifndef HAVE_ISALPHA
+ * PUBLIC: int isalpha __P((int));
+ * PUBLIC: #endif
+ */
+int
+isalpha(c)
+ int c;
+{
+ /*
+ * Depends on ASCII-like character ordering.
+ */
+ return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ? 1 : 0);
+}
diff --git a/db/clib/isdigit.c b/db/clib/isdigit.c
new file mode 100644
index 000000000..95c490f84
--- /dev/null
+++ b/db/clib/isdigit.c
@@ -0,0 +1,29 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: isdigit.c,v 1.2 2006/08/24 14:45:10 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * isdigit --
+ *
+ * PUBLIC: #ifndef HAVE_ISDIGIT
+ * PUBLIC: int isdigit __P((int));
+ * PUBLIC: #endif
+ */
+int
+isdigit(c)
+ int c;
+{
+ /*
+ * Depends on ASCII-like character ordering.
+ */
+ return (c >= '0' && c <= '9' ? 1 : 0);
+}
diff --git a/db/clib/isprint.c b/db/clib/isprint.c
new file mode 100644
index 000000000..481b64772
--- /dev/null
+++ b/db/clib/isprint.c
@@ -0,0 +1,29 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: isprint.c,v 1.2 2006/08/24 14:45:10 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * isprint --
+ *
+ * PUBLIC: #ifndef HAVE_ISPRINT
+ * PUBLIC: int isprint __P((int));
+ * PUBLIC: #endif
+ */
+int
+isprint(c)
+ int c;
+{
+ /*
+ * Depends on ASCII character values.
+ */
+ return ((c >= ' ' && c <= '~') ? 1 : 0);
+}
diff --git a/db/clib/isspace.c b/db/clib/isspace.c
new file mode 100644
index 000000000..18ed4dcfc
--- /dev/null
+++ b/db/clib/isspace.c
@@ -0,0 +1,27 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: isspace.c,v 1.2 2006/08/24 14:45:10 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * isspace --
+ *
+ * PUBLIC: #ifndef HAVE_ISSPACE
+ * PUBLIC: int isspace __P((int));
+ * PUBLIC: #endif
+ */
+int
+isspace(c)
+ int c;
+{
+ return (c == '\t' || c == '\n' ||
+ c == '\v' || c == '\f' || c == '\r' || c == ' ' ? 1 : 0);
+}
diff --git a/db/clib/memcmp.c b/db/clib/memcmp.c
index 055a2f5fa..8b4f4c347 100644
--- a/db/clib/memcmp.c
+++ b/db/clib/memcmp.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993
@@ -32,14 +32,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: memcmp.c,v 11.9 2004/01/28 03:35:52 bostic Exp $
+ * $Id: memcmp.c,v 12.4 2006/08/24 14:45:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
+#include "db_int.h"
/*
* memcmp --
@@ -50,7 +48,7 @@
*/
int
memcmp(s1, s2, n)
- char *s1, *s2;
+ const void *s1, *s2;
size_t n;
{
if (n != 0) {
diff --git a/db/clib/memmove.c b/db/clib/memmove.c
index 60ece571d..b52ffbea0 100644
--- a/db/clib/memmove.c
+++ b/db/clib/memmove.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993
@@ -32,14 +32,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: memmove.c,v 11.8 2004/01/28 03:35:52 bostic Exp $
+ * $Id: memmove.c,v 12.5 2006/08/24 14:45:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
+#include "db_int.h"
/*
* sizeof(word) MUST BE A POWER OF TWO
@@ -102,13 +100,13 @@ bcopy(src0, dst0, length)
/*
* Copy forward.
*/
- t = (int)src; /* only need low bits */
- if ((t | (int)dst) & wmask) {
+ t = (size_t)src; /* only need low bits */
+ if ((t | (size_t)dst) & wmask) {
/*
* Try to align operands. This cannot be done
* unless the low bits match.
*/
- if ((t ^ (int)dst) & wmask || length < wsize)
+ if ((t ^ (size_t)dst) & wmask || length < wsize)
t = length;
else
t = wsize - (t & wmask);
@@ -130,9 +128,9 @@ bcopy(src0, dst0, length)
*/
src += length;
dst += length;
- t = (int)src;
- if ((t | (int)dst) & wmask) {
- if ((t ^ (int)dst) & wmask || length <= wsize)
+ t = (size_t)src;
+ if ((t | (size_t)dst) & wmask) {
+ if ((t ^ (size_t)dst) & wmask || length <= wsize)
t = length;
else
t &= wmask;
diff --git a/db/clib/printf.c b/db/clib/printf.c
new file mode 100644
index 000000000..62c1daf0f
--- /dev/null
+++ b/db/clib/printf.c
@@ -0,0 +1,143 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: printf.c,v 1.5 2006/09/13 19:10:57 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * printf --
+ *
+ * PUBLIC: #ifndef HAVE_PRINTF
+ * PUBLIC: int printf __P((const char *, ...));
+ * PUBLIC: #endif
+ */
+#ifndef HAVE_PRINTF
+int
+#ifdef STDC_HEADERS
+printf(const char *fmt, ...)
+#else
+printf(fmt, va_alist)
+ const char *fmt;
+ va_dcl
+#endif
+{
+ va_list ap;
+ size_t len;
+ char buf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
+
+#ifdef STDC_HEADERS
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+#endif
+ len = (size_t)vsnprintf(buf, sizeof(buf), fmt, ap);
+#ifdef HAVE_BREW
+ /*
+ * The BREW vsnprintf function return count includes the trailing
+ * nul-termination character.
+ */
+ if (len > 0 && len <= sizeof(buf) && buf[len - 1] == '\0')
+ --len;
+#endif
+
+ va_end(ap);
+
+ /*
+ * We implement printf/fprintf with fwrite, because Berkeley DB uses
+ * fwrite in other places.
+ */
+ return (fwrite(
+ buf, sizeof(char), (size_t)len, stdout) == len ? (int)len: -1);
+}
+#endif /* HAVE_PRINTF */
+
+/*
+ * fprintf --
+ *
+ * PUBLIC: #ifndef HAVE_PRINTF
+ * PUBLIC: int fprintf __P((FILE *, const char *, ...));
+ * PUBLIC: #endif
+ */
+#ifndef HAVE_PRINTF
+int
+#ifdef STDC_HEADERS
+fprintf(FILE *fp, const char *fmt, ...)
+#else
+fprintf(fp, fmt, va_alist)
+ FILE *fp;
+ const char *fmt;
+ va_dcl
+#endif
+{
+ va_list ap;
+ size_t len;
+ char buf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
+
+#ifdef STDC_HEADERS
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+#endif
+ len = vsnprintf(buf, sizeof(buf), fmt, ap);
+#ifdef HAVE_BREW
+ /*
+ * The BREW vsnprintf function return count includes the trailing
+ * nul-termination character.
+ */
+ if (len > 0 && len <= sizeof(buf) && buf[len - 1] == '\0')
+ --len;
+#endif
+
+ va_end(ap);
+
+ /*
+ * We implement printf/fprintf with fwrite, because Berkeley DB uses
+ * fwrite in other places.
+ */
+ return (fwrite(
+ buf, sizeof(char), (size_t)len, fp) == len ? (int)len: -1);
+}
+#endif /* HAVE_PRINTF */
+
+/*
+ * vfprintf --
+ *
+ * PUBLIC: #ifndef HAVE_PRINTF
+ * PUBLIC: int vfprintf __P((FILE *, const char *, va_list));
+ * PUBLIC: #endif
+ */
+#ifndef HAVE_PRINTF
+int
+vfprintf(fp, fmt, ap)
+ FILE *fp;
+ const char *fmt;
+ va_list ap;
+{
+ size_t len;
+ char buf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
+
+ len = vsnprintf(buf, sizeof(buf), fmt, ap);
+#ifdef HAVE_BREW
+ /*
+ * The BREW vsnprintf function return count includes the trailing
+ * nul-termination character.
+ */
+ if (len > 0 && len <= sizeof(buf) && buf[len - 1] == '\0')
+ --len;
+#endif
+
+ /*
+ * We implement printf/fprintf with fwrite, because Berkeley DB uses
+ * fwrite in other places.
+ */
+ return (fwrite(
+ buf, sizeof(char), (size_t)len, fp) == len ? (int)len: -1);
+}
+#endif /* HAVE_PRINTF */
diff --git a/db/clib/raise.c b/db/clib/raise.c
index 2f9e8cb80..1c5b87589 100644
--- a/db/clib/raise.c
+++ b/db/clib/raise.c
@@ -1,18 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: raise.c,v 11.8 2004/01/28 03:35:52 bostic Exp $
+ * $Id: raise.c,v 12.5 2006/08/24 14:45:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <signal.h>
-#include <unistd.h>
-#endif
+#include "db_int.h"
/*
* raise --
@@ -26,9 +23,5 @@ 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/rand.c b/db/clib/rand.c
new file mode 100644
index 000000000..f46248b91
--- /dev/null
+++ b/db/clib/rand.c
@@ -0,0 +1,27 @@
+/*
+ * Copied from the ANSI C standard 4.10.2.2.
+ */
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * rand, srand --
+ *
+ * PUBLIC: #ifndef HAVE_RAND
+ * PUBLIC: int rand __P((void));
+ * PUBLIC: void srand __P((unsigned int));
+ * PUBLIC: #endif
+ */
+static unsigned long int next = 1;
+
+int rand(void) /* RAND_MAX assumed to be 32767 */
+{
+ next = next * 1103515245 + 12345;
+ return (unsigned int) (next/65536) % 32768;
+}
+
+void srand(unsigned int seed)
+{
+ next = seed;
+}
diff --git a/db/clib/snprintf.c b/db/clib/snprintf.c
index e1bc5d112..f568713c0 100644
--- a/db/clib/snprintf.c
+++ b/db/clib/snprintf.c
@@ -1,23 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: snprintf.c,v 11.18 2004/09/22 03:32:43 bostic Exp $
+ * $Id: snprintf.c,v 12.4 2006/08/24 14:45:10 bostic 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> /* Declare STDERR_FILENO. */
-#endif
-
#include "db_int.h"
#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
diff --git a/db/clib/strcasecmp.c b/db/clib/strcasecmp.c
index e8365c451..7510f2385 100644
--- a/db/clib/strcasecmp.c
+++ b/db/clib/strcasecmp.c
@@ -30,14 +30,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: strcasecmp.c,v 1.8 2004/01/28 03:35:52 bostic Exp $
+ * $Id: strcasecmp.c,v 12.1 2006/05/05 14:53:08 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
+#include "db_int.h"
/*
* This array is designed for mapping upper and lower case letter
diff --git a/db/clib/strcat.c b/db/clib/strcat.c
new file mode 100644
index 000000000..65ca40d6a
--- /dev/null
+++ b/db/clib/strcat.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * strcat --
+ *
+ * PUBLIC: #ifndef HAVE_STRCAT
+ * PUBLIC: char *strcat __P((char *, const char *));
+ * PUBLIC: #endif
+ */
+char *
+strcat(char *s, const char *append)
+{
+ char *save = s;
+
+ for (; *s; ++s);
+ while ((*s++ = *append++));
+ return(save);
+}
diff --git a/db/clib/strchr.c b/db/clib/strchr.c
new file mode 100644
index 000000000..a8ac4ce05
--- /dev/null
+++ b/db/clib/strchr.c
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * strchr --
+ *
+ * PUBLIC: #ifndef HAVE_STRCHR
+ * PUBLIC: char *strchr __P((const char *, int));
+ * PUBLIC: #endif
+ */
+char *strchr(const char *p, int ch)
+{
+ char c;
+
+ c = ch;
+ for (;; ++p) {
+ if (*p == c)
+ return ((char *)p);
+ if (*p == '\0')
+ return (NULL);
+ }
+ /* NOTREACHED */
+}
diff --git a/db/clib/strdup.c b/db/clib/strdup.c
index 9c451d328..b15d3b3ca 100644
--- a/db/clib/strdup.c
+++ b/db/clib/strdup.c
@@ -30,18 +30,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: strdup.c,v 1.6 2004/01/28 03:35:52 bostic Exp $
+ * $Id: strdup.c,v 12.1 2006/05/05 14:53:08 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
+#include "db_int.h"
/*
* strdup --
diff --git a/db/clib/strerror.c b/db/clib/strerror.c
index e0710add2..f5c303988 100644
--- a/db/clib/strerror.c
+++ b/db/clib/strerror.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1988, 1993
@@ -32,13 +32,168 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: strerror.c,v 11.8 2004/01/28 03:35:52 bostic Exp $
+ * $Id: strerror.c,v 12.7 2006/08/24 14:45:10 bostic Exp $
+ */
+
+/*
+ * Copyright (c) 1982, 1985, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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.
+ *
+ * __FBSDID("FreeBSD: /repoman/r/ncvs/src/lib/libc/gen/errlst.c,v 1.8 2005/04/02 12:33:28 das Exp $");
*/
#include "db_config.h"
+#include "db_int.h"
+
+static const char *__db_errlist[] = {
+ "Undefined error: 0", /* 0 - ENOERROR */
+ "Operation not permitted", /* 1 - EPERM */
+ "No such file or directory", /* 2 - ENOENT */
+ "No such process", /* 3 - ESRCH */
+ "Interrupted system call", /* 4 - EINTR */
+ "Input/output error", /* 5 - EIO */
+ "Device not configured", /* 6 - ENXIO */
+ "Argument list too long", /* 7 - E2BIG */
+ "Exec format error", /* 8 - ENOEXEC */
+ "Bad file descriptor", /* 9 - EBADF */
+ "No child processes", /* 10 - ECHILD */
+ "Resource deadlock avoided", /* 11 - EDEADLK */
+ "Cannot allocate memory", /* 12 - ENOMEM */
+ "Permission denied", /* 13 - EACCES */
+ "Bad address", /* 14 - EFAULT */
+ "Block device required", /* 15 - ENOTBLK */
+ "Device busy", /* 16 - EBUSY */
+ "File exists", /* 17 - EEXIST */
+ "Cross-device link", /* 18 - EXDEV */
+ "Operation not supported by device", /* 19 - ENODEV */
+ "Not a directory", /* 20 - ENOTDIR */
+ "Is a directory", /* 21 - EISDIR */
+ "Invalid argument", /* 22 - EINVAL */
+ "Too many open files in system", /* 23 - ENFILE */
+ "Too many open files", /* 24 - EMFILE */
+ "Inappropriate ioctl for device", /* 25 - ENOTTY */
+ "Text file busy", /* 26 - ETXTBSY */
+ "File too large", /* 27 - EFBIG */
+ "No space left on device", /* 28 - ENOSPC */
+ "Illegal seek", /* 29 - ESPIPE */
+ "Read-only file system", /* 30 - EROFS */
+ "Too many links", /* 31 - EMLINK */
+ "Broken pipe", /* 32 - EPIPE */
+
+/* math software */
+ "Numerical argument out of domain", /* 33 - EDOM */
+ "Result too large", /* 34 - ERANGE */
+
+/* non-blocking and interrupt i/o */
+ "Resource temporarily unavailable", /* 35 - EAGAIN */
+ /* 35 - EWOULDBLOCK */
+ "Operation now in progress", /* 36 - EINPROGRESS */
+ "Operation already in progress", /* 37 - EALREADY */
+
+/* ipc/network software -- argument errors */
+ "Socket operation on non-socket", /* 38 - ENOTSOCK */
+ "Destination address required", /* 39 - EDESTADDRREQ */
+ "Message too long", /* 40 - EMSGSIZE */
+ "Protocol wrong type for socket", /* 41 - EPROTOTYPE */
+ "Protocol not available", /* 42 - ENOPROTOOPT */
+ "Protocol not supported", /* 43 - EPROTONOSUPPORT */
+ "Socket type not supported", /* 44 - ESOCKTNOSUPPORT */
+ "Operation not supported", /* 45 - EOPNOTSUPP */
+ "Protocol family not supported", /* 46 - EPFNOSUPPORT */
+ /* 47 - EAFNOSUPPORT */
+ "Address family not supported by protocol family",
+ "Address already in use", /* 48 - EADDRINUSE */
+ "Can't assign requested address", /* 49 - EADDRNOTAVAIL */
+
+/* ipc/network software -- operational errors */
+ "Network is down", /* 50 - ENETDOWN */
+ "Network is unreachable", /* 51 - ENETUNREACH */
+ "Network dropped connection on reset", /* 52 - ENETRESET */
+ "Software caused connection abort", /* 53 - ECONNABORTED */
+ "Connection reset by peer", /* 54 - ECONNRESET */
+ "No buffer space available", /* 55 - ENOBUFS */
+ "Socket is already connected", /* 56 - EISCONN */
+ "Socket is not connected", /* 57 - ENOTCONN */
+ "Can't send after socket shutdown", /* 58 - ESHUTDOWN */
+ "Too many references: can't splice", /* 59 - ETOOMANYREFS */
+ "Operation timed out", /* 60 - ETIMEDOUT */
+ "Connection refused", /* 61 - ECONNREFUSED */
+
+ "Too many levels of symbolic links", /* 62 - ELOOP */
+ "File name too long", /* 63 - ENAMETOOLONG */
+
+/* should be rearranged */
+ "Host is down", /* 64 - EHOSTDOWN */
+ "No route to host", /* 65 - EHOSTUNREACH */
+ "Directory not empty", /* 66 - ENOTEMPTY */
+
+/* quotas & mush */
+ "Too many processes", /* 67 - EPROCLIM */
+ "Too many users", /* 68 - EUSERS */
+ "Disc quota exceeded", /* 69 - EDQUOT */
+
+/* Network File System */
+ "Stale NFS file handle", /* 70 - ESTALE */
+ "Too many levels of remote in path", /* 71 - EREMOTE */
+ "RPC struct is bad", /* 72 - EBADRPC */
+ "RPC version wrong", /* 73 - ERPCMISMATCH */
+ "RPC prog. not avail", /* 74 - EPROGUNAVAIL */
+ "Program version wrong", /* 75 - EPROGMISMATCH */
+ "Bad procedure for program", /* 76 - EPROCUNAVAIL */
+
+ "No locks available", /* 77 - ENOLCK */
+ "Function not implemented", /* 78 - ENOSYS */
+ "Inappropriate file type or format", /* 79 - EFTYPE */
+ "Authentication error", /* 80 - EAUTH */
+ "Need authenticator", /* 81 - ENEEDAUTH */
+ "Identifier removed", /* 82 - EIDRM */
+ "No message of desired type", /* 83 - ENOMSG */
+ "Value too large to be stored in data type", /* 84 - EOVERFLOW */
+ "Operation canceled", /* 85 - ECANCELED */
+ "Illegal byte sequence", /* 86 - EILSEQ */
+ "Attribute not found", /* 87 - ENOATTR */
+
+/* General */
+ "Programming error", /* 88 - EDOOFUS */
+
+ "Bad message", /* 89 - EBADMSG */
+ "Multihop attempted", /* 90 - EMULTIHOP */
+ "Link has been severed", /* 91 - ENOLINK */
+ "Protocol error", /* 92 - EPROTO */
+};
+static int __db_nerr = sizeof(__db_errlist) / sizeof(__db_errlist[0]);
+
/*
- * strerror --
+ * __db_strerror --
* Return the string associated with an errno.
*
* PUBLIC: #ifndef HAVE_STRERROR
@@ -49,27 +204,8 @@ char *
strerror(num)
int num;
{
- extern int sys_nerr;
- extern char *sys_errlist[];
-#undef UPREFIX
-#define UPREFIX "Unknown error: "
- static char ebuf[40] = UPREFIX; /* 64-bit number + slop */
- int errnum;
- char *p, *t, tmp[40];
-
- errnum = num; /* convert to unsigned */
- if (errnum < sys_nerr)
- return(sys_errlist[errnum]);
-
- /* Do this by hand, so we don't include stdio(3). */
- t = tmp;
- do {
- *t++ = "0123456789"[errnum % 10];
- } while (errnum /= 10);
- for (p = ebuf + sizeof(UPREFIX) - 1;;) {
- *p++ = *--t;
- if (t <= tmp)
- break;
- }
- return(ebuf);
+ if (num >= 0 && num < __db_nerr)
+ return ((char *)__db_errlist[num]);
+
+ return (__db_unknown_error(num));
}
diff --git a/db/clib/strncat.c b/db/clib/strncat.c
new file mode 100644
index 000000000..ce8273a45
--- /dev/null
+++ b/db/clib/strncat.c
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * strncat --
+ *
+ * PUBLIC: #ifndef HAVE_STRNCAT
+ * PUBLIC: char *strncat __P((char *, const char *, size_t));
+ * PUBLIC: #endif
+ */
+/*
+ * Concatenate src on the end of dst. At most strlen(dst)+n+1 bytes
+ * are written at dst (at most n+1 bytes being appended). Return dst.
+ */
+char *
+strncat(char *dst, const char *src, size_t n)
+{
+ if (n != 0) {
+ char *d = dst;
+ const char *s = src;
+
+ while (*d != 0)
+ d++;
+ do {
+ if ((*d = *s++) == 0)
+ break;
+ d++;
+ } while (--n != 0);
+ *d = 0;
+ }
+ return (dst);
+}
diff --git a/db/clib/strncmp.c b/db/clib/strncmp.c
new file mode 100644
index 000000000..9738b5b2b
--- /dev/null
+++ b/db/clib/strncmp.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * strncmp --
+ *
+ * PUBLIC: #ifndef HAVE_STRNCMP
+ * PUBLIC: int strncmp __P((const char *, const char *, size_t));
+ * PUBLIC: #endif
+ */
+int
+strncmp(s1, s2, n)
+ const char *s1, *s2;
+ size_t n;
+{
+
+ if (n == 0)
+ return (0);
+ do {
+ if (*s1 != *s2++)
+ return (*(const unsigned char *)s1 -
+ *(const unsigned char *)(s2 - 1));
+ if (*s1++ == 0)
+ break;
+ } while (--n != 0);
+ return (0);
+}
diff --git a/db/clib/strrchr.c b/db/clib/strrchr.c
new file mode 100644
index 000000000..8753e943c
--- /dev/null
+++ b/db/clib/strrchr.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * strrchr --
+ *
+ * PUBLIC: #ifndef HAVE_STRRCHR
+ * PUBLIC: char *strrchr __P((const char *, int));
+ * PUBLIC: #endif
+ */
+char *strrchr(const char *p, int ch)
+{
+ char *save;
+ char c;
+
+ c = ch;
+ for (save = NULL;; ++p) {
+ if (*p == c)
+ save = (char *)p;
+ if (*p == '\0')
+ return (save);
+ }
+ /* NOTREACHED */
+}
diff --git a/db/clib/strsep.c b/db/clib/strsep.c
new file mode 100644
index 000000000..f79d0f5c5
--- /dev/null
+++ b/db/clib/strsep.c
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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. 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.
+ *
+ * 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"
+
+#include "db_int.h"
+
+/*
+ * Get next token from string *stringp, where tokens are possibly-empty
+ * strings separated by characters from delim.
+ *
+ * Writes NULs into the string at *stringp to end tokens.
+ * delim need not remain constant from call to call.
+ * On return, *stringp points past the last NUL written (if there might
+ * be further tokens), or is NULL (if there are definitely no more tokens).
+ *
+ * If *stringp is NULL, strsep returns NULL.
+ *
+ * PUBLIC: #ifndef HAVE_STRSEP
+ * PUBLIC: char *strsep __P((char **, const char *));
+ * PUBLIC: #endif
+ */
+char *
+strsep(stringp, delim)
+ char **stringp;
+ const char *delim;
+{
+ char *s;
+ const char *spanp;
+ int c, sc;
+ char *tok;
+
+ if ((s = *stringp) == NULL)
+ return (NULL);
+ for (tok = s;;) {
+ c = *s++;
+ spanp = delim;
+ do {
+ if ((sc = *spanp++) == c) {
+ if (c == 0)
+ s = NULL;
+ else
+ s[-1] = 0;
+ *stringp = s;
+ return (tok);
+ }
+ } while (sc != 0);
+ }
+ /* NOTREACHED */
+}
diff --git a/db/clib/strtol.c b/db/clib/strtol.c
index 09e952dc5..fa8e6250c 100644
--- a/db/clib/strtol.c
+++ b/db/clib/strtol.c
@@ -30,24 +30,22 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: strtol.c,v 1.3 2004/10/28 19:27:19 bostic Exp $
+ * $Id: strtol.c,v 12.3 2006/05/28 14:04:59 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <limits.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#endif
+#include "db_int.h"
/*
* Convert a string to a long integer.
*
* Assumes that the upper and lower case
* alphabets and digits are each contiguous.
+ *
+ * PUBLIC: #ifndef HAVE_STRTOL
+ * PUBLIC: long strtol __P((const char *, char **, int));
+ * PUBLIC: #endif
*/
long
strtol(nptr, endptr, base)
@@ -137,7 +135,7 @@ strtol(nptr, endptr, base)
noconv:
errno = EINVAL;
} else if (neg)
- acc = -acc;
+ acc = -(long)acc;
if (endptr != NULL)
*endptr = (char *)(any ? s - 1 : nptr);
return (acc);
diff --git a/db/clib/strtoul.c b/db/clib/strtoul.c
index e4356963b..a4b4117a4 100644
--- a/db/clib/strtoul.c
+++ b/db/clib/strtoul.c
@@ -30,24 +30,22 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: strtoul.c,v 1.3 2004/10/28 19:27:19 bostic Exp $
+ * $Id: strtoul.c,v 12.2 2006/05/28 14:04:59 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <limits.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#endif
+#include "db_int.h"
/*
* Convert a string to an unsigned long integer.
*
* Assumes that the upper and lower case
* alphabets and digits are each contiguous.
+ *
+ * PUBLIC: #ifndef HAVE_STRTOUL
+ * PUBLIC: unsigned long strtoul __P((const char *, char **, int));
+ * PUBLIC: #endif
*/
unsigned long
strtoul(nptr, endptr, base)
diff --git a/db/common/crypto_stub.c b/db/common/crypto_stub.c
index 68f06b4c8..991622b91 100644
--- a/db/common/crypto_stub.c
+++ b/db/common/crypto_stub.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: crypto_stub.c,v 1.4 2004/01/28 03:35:52 bostic Exp $
+ * $Id: crypto_stub.c,v 12.5 2006/08/24 14:45:10 bostic Exp $
*/
#include "db_config.h"
@@ -32,14 +32,14 @@ __crypto_region_init(dbenv)
infop = dbenv->reginfo;
renv = infop->primary;
- MUTEX_LOCK(dbenv, &renv->mutex);
+ MUTEX_LOCK(dbenv, renv->mtx_regenv);
ret = !(renv->cipher_off == INVALID_ROFF);
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ MUTEX_UNLOCK(dbenv, renv->mtx_regenv);
if (ret == 0)
return (0);
- __db_err(dbenv,
+ __db_errx(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 0a48055c8..2aa85dfc9 100644
--- a/db/common/db_byteorder.c
+++ b/db/common/db_byteorder.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_byteorder.c,v 11.10 2004/01/28 03:35:52 bostic Exp $
+ * $Id: db_byteorder.c,v 12.5 2006/08/24 14:45:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
/*
@@ -64,7 +60,7 @@ __db_byteorder(dbenv, lorder)
return (DB_SWAPBYTES);
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"unsupported byte order, only big and little-endian supported");
return (EINVAL);
}
diff --git a/db/common/db_clock.c b/db/common/db_clock.c
new file mode 100644
index 000000000..190ee5924
--- /dev/null
+++ b/db/common/db_clock.c
@@ -0,0 +1,31 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db_clock.c,v 1.5 2006/08/24 14:45:11 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __db_difftime --
+ *
+ * Compute the difference in seconds and microseconds of two timers.
+ *
+ * PUBLIC: void __db_difftime __P((u_int32_t, u_int32_t, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t *, u_int32_t *));
+ */
+void
+__db_difftime(ssec, esec, susec, eusec, secp, usecp)
+ u_int32_t ssec, esec, susec, eusec, *secp, *usecp;
+{
+ if ((*secp = esec - ssec) != 0 && eusec < susec) {
+ (*secp)--;
+ eusec += 1000000;
+ }
+ *usecp = eusec - susec;
+}
diff --git a/db/common/db_err.c b/db/common/db_err.c
index 6e49e7941..0c11148b9 100644
--- a/db/common/db_err.c
+++ b/db/common/db_err.c
@@ -1,27 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_err.c,v 11.123 2004/09/22 03:07:50 bostic Exp $
+ * $Id: db_err.c,v 12.44 2006/09/13 14:53:34 mjc Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#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/mp.h"
#include "dbinc/txn.h"
static void __db_msgcall __P((const DB_ENV *, const char *, va_list));
@@ -71,7 +64,7 @@ __db_ferr(dbenv, name, iscombo)
const char *name;
int iscombo;
{
- __db_err(dbenv, "illegal flag %sspecified to %s",
+ __db_errx(dbenv, "illegal flag %sspecified to %s",
iscombo ? "combination " : "", name);
return (EINVAL);
}
@@ -87,8 +80,8 @@ __db_fnl(dbenv, name)
const DB_ENV *dbenv;
const char *name;
{
- __db_err(dbenv,
- "%s: the DB_DIRTY_READ, DB_DEGREE_2 and DB_RMW flags require locking",
+ __db_errx(dbenv,
+ "%s: DB_READ_COMMITTED, DB_READ_UNCOMMITTED and DB_RMW require locking",
name);
return (EINVAL);
}
@@ -110,7 +103,7 @@ __db_pgerr(dbp, pgno, errval)
* Death, taxes, and lost data.
* Guess which has occurred.
*/
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"unable to create/retrieve page %lu", (u_long)pgno);
return (__db_panic(dbp->dbenv, errval));
}
@@ -126,7 +119,7 @@ __db_pgfmt(dbenv, pgno)
DB_ENV *dbenv;
db_pgno_t pgno;
{
- __db_err(dbenv, "page %lu: illegal page type or format", (u_long)pgno);
+ __db_errx(dbenv, "page %lu: illegal page type or format", (u_long)pgno);
return (__db_panic(dbenv, EINVAL));
}
@@ -136,22 +129,18 @@ __db_pgfmt(dbenv, pgno)
* Error when an assertion fails. Only checked if #DIAGNOSTIC defined.
*
* PUBLIC: #ifdef DIAGNOSTIC
- * PUBLIC: void __db_assert __P((const char *, const char *, int));
+ * PUBLIC: void __db_assert __P((DB_ENV *, const char *, const char *, int));
* PUBLIC: #endif
*/
void
-__db_assert(failedexpr, file, line)
- const char *failedexpr, *file;
+__db_assert(dbenv, e, file, line)
+ DB_ENV *dbenv;
+ const char *e, *file;
int line;
{
- (void)fprintf(stderr,
- "__db_assert: \"%s\" failed: file \"%s\", line %d\n",
- failedexpr, file, line);
- (void)fflush(stderr);
+ __db_errx(dbenv, "assert failure: %s/%d: \"%s\"", file, line, e);
- /* We want a stack trace of how this could possibly happen. */
abort();
-
/* NOTREACHED */
}
#endif
@@ -166,12 +155,17 @@ int
__db_panic_msg(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "PANIC: fatal region error detected; run recovery");
+ int ret;
- if (dbenv->db_paniccall != NULL)
- dbenv->db_paniccall(dbenv, DB_RUNRECOVERY);
+ ret = DB_RUNRECOVERY;
- return (DB_RUNRECOVERY);
+ __db_errx(dbenv, "PANIC: fatal region error detected; run recovery");
+
+ if (dbenv->db_paniccall != NULL) /* Deprecated */
+ dbenv->db_paniccall(dbenv, ret);
+ DB_EVENT(dbenv, DB_EVENT_PANIC, &ret);
+
+ return (ret);
}
/*
@@ -186,12 +180,13 @@ __db_panic(dbenv, errval)
int errval;
{
if (dbenv != NULL) {
- PANIC_SET(dbenv, 1);
+ __db_panic_set(dbenv, 1);
- __db_err(dbenv, "PANIC: %s", db_strerror(errval));
+ __db_err(dbenv, errval, "PANIC");
- if (dbenv->db_paniccall != NULL)
+ if (dbenv->db_paniccall != NULL) /* Deprecated */
dbenv->db_paniccall(dbenv, errval);
+ DB_EVENT(dbenv, DB_EVENT_PANIC, &errval);
}
#if defined(DIAGNOSTIC) && !defined(CONFIG_TEST)
@@ -203,6 +198,7 @@ __db_panic(dbenv, errval)
* under certain conditions.
*/
abort();
+ /* NOTREACHED */
#endif
/*
@@ -214,6 +210,22 @@ __db_panic(dbenv, errval)
}
/*
+ * __db_panic_set --
+ * Set/clear unrecoverable error.
+ *
+ * PUBLIC: void __db_panic_set __P((DB_ENV *, int));
+ */
+void
+__db_panic_set(dbenv, on)
+ DB_ENV *dbenv;
+ int on;
+{
+ if (dbenv != NULL && dbenv->reginfo != NULL)
+ ((REGENV *)
+ ((REGINFO *)dbenv->reginfo)->primary)->panic = on ? 1 : 0;
+}
+
+/*
* db_strerror --
* ANSI C strerror(3) for DB.
*
@@ -230,7 +242,7 @@ db_strerror(error)
if (error > 0) {
if ((p = strerror(error)) != NULL)
return (p);
- goto unknown_err;
+ return (__db_unknown_error(error));
}
/*
@@ -275,17 +287,22 @@ db_strerror(error)
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_IGNORE:
+ return ("DB_REP_IGNORE: Replication record ignored");
case DB_REP_ISPERM:
return ("DB_REP_ISPERM: Permanent record written");
+ case DB_REP_JOIN_FAILURE:
+ return
+ ("DB_REP_JOIN_FAILURE: Unable to join replication group");
+ case DB_REP_LOCKOUT:
+ return
+ ("DB_REP_LOCKOUT: Waiting for replication recovery to complete");
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_STARTUPDONE:
- return
- ("DB_REP_STARTUPDONE: Client completed startup synchronization.");
case DB_REP_UNAVAIL:
return ("DB_REP_UNAVAIL: Unable to elect a master");
case DB_RUNRECOVERY:
@@ -302,39 +319,99 @@ db_strerror(error)
break;
}
-unknown_err: {
- /*
- * !!!
- * Room for a 64-bit number + slop. This buffer is only used
- * if we're given an unknown error, which should never happen.
- * Note, however, we're no longer thread-safe if it does.
- */
- static char ebuf[40];
+ return (__db_unknown_error(error));
+}
- (void)snprintf(ebuf, sizeof(ebuf), "Unknown error: %d", error);
- return (ebuf);
- }
+/*
+ * __db_unknown_error --
+ * Format an unknown error value into a static buffer.
+ *
+ * PUBLIC: char *__db_unknown_error __P((int));
+ */
+char *
+__db_unknown_error(error)
+ int error;
+{
+ /*
+ * !!!
+ * Room for a 64-bit number + slop. This buffer is only used
+ * if we're given an unknown error number, which should never
+ * happen.
+ *
+ * We're no longer thread-safe if it does happen, but the worst
+ * result is a corrupted error string because there will always
+ * be a trailing nul byte since the error buffer is nul filled
+ * and longer than any error message.
+ */
+ static char ebuf[40];
+
+ (void)snprintf(ebuf, sizeof(ebuf), "Unknown error: %d", error);
+ return (ebuf);
+}
+
+/*
+ * __db_syserr --
+ * Standard DB system-specific error routine. The same as __db_err except
+ * we use a system-specific function to translate errors to strings.
+ *
+ * PUBLIC: void __db_syserr __P((const DB_ENV *, int, const char *, ...))
+ * PUBLIC: __attribute__ ((__format__ (__printf__, 3, 4)));
+ */
+void
+#ifdef STDC_HEADERS
+__db_syserr(const DB_ENV *dbenv, int error, const char *fmt, ...)
+#else
+__db_syserr(dbenv, error fmt, va_alist)
+ const DB_ENV *dbenv;
+ int error;
+ const char *fmt;
+ va_dcl
+#endif
+{
+ DB_REAL_ERR(dbenv, error, DB_ERROR_SYSTEM, 0, fmt);
}
/*
* __db_err --
- * Standard DB error routine. The same as errx, except we don't write
+ * Standard DB error routine. The same as DB->err, 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 *, int, const char *, ...))
+ * PUBLIC: __attribute__ ((__format__ (__printf__, 3, 4)));
+ */
+void
+#ifdef STDC_HEADERS
+__db_err(const DB_ENV *dbenv, int error, const char *fmt, ...)
+#else
+__db_err(dbenv, error fmt, va_alist)
+ const DB_ENV *dbenv;
+ int error;
+ const char *fmt;
+ va_dcl
+#endif
+{
+ DB_REAL_ERR(dbenv, error, DB_ERROR_SET, 0, fmt);
+}
+
+/*
+ * __db_errx --
+ * Standard DB error routine. The same as DB->errx, except we don't write
+ * to stderr if no output mechanism was specified.
+ *
+ * PUBLIC: void __db_errx __P((const DB_ENV *, const char *, ...))
* PUBLIC: __attribute__ ((__format__ (__printf__, 2, 3)));
*/
void
#ifdef STDC_HEADERS
-__db_err(const DB_ENV *dbenv, const char *fmt, ...)
+__db_errx(const DB_ENV *dbenv, const char *fmt, ...)
#else
-__db_err(dbenv, fmt, va_alist)
+__db_errx(dbenv, fmt, va_alist)
const DB_ENV *dbenv;
const char *fmt;
va_dcl
#endif
{
- DB_REAL_ERR(dbenv, 0, 0, 0, fmt);
+ DB_REAL_ERR(dbenv, 0, DB_ERROR_NOT_SET, 0, fmt);
}
/*
@@ -342,25 +419,28 @@ __db_err(dbenv, fmt, va_alist)
* Do the error message work for callback functions.
*
* PUBLIC: void __db_errcall
- * PUBLIC: __P((const DB_ENV *, int, int, const char *, va_list));
+ * PUBLIC: __P((const DB_ENV *, int, db_error_set_t, const char *, va_list));
*/
void
__db_errcall(dbenv, error, error_set, fmt, ap)
const DB_ENV *dbenv;
- int error, error_set;
+ int error;
+ db_error_set_t error_set;
const char *fmt;
va_list ap;
{
char *p;
char buf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
+ char sysbuf[1024]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
p = buf;
if (fmt != NULL)
p += vsnprintf(buf, sizeof(buf), fmt, ap);
- if (error_set)
+ if (error_set != DB_ERROR_NOT_SET)
p += snprintf(p,
sizeof(buf) - (size_t)(p - buf), ": %s",
- db_strerror(error));
+ error_set == DB_ERROR_SET ? db_strerror(error) :
+ __os_strerror(error, sysbuf, sizeof(sysbuf)));
dbenv->db_errcall(dbenv, dbenv->db_errpfx, buf);
}
@@ -370,16 +450,18 @@ __db_errcall(dbenv, error, error_set, fmt, ap)
* Do the error message work for FILE *s.
*
* PUBLIC: void __db_errfile
- * PUBLIC: __P((const DB_ENV *, int, int, const char *, va_list));
+ * PUBLIC: __P((const DB_ENV *, int, db_error_set_t, const char *, va_list));
*/
void
__db_errfile(dbenv, error, error_set, fmt, ap)
const DB_ENV *dbenv;
- int error, error_set;
+ int error;
+ db_error_set_t error_set;
const char *fmt;
va_list ap;
{
FILE *fp;
+ char sysbuf[1024]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
fp = dbenv == NULL ||
dbenv->db_errfile == NULL ? stderr : dbenv->db_errfile;
@@ -388,11 +470,13 @@ __db_errfile(dbenv, error, error_set, fmt, ap)
(void)fprintf(fp, "%s: ", dbenv->db_errpfx);
if (fmt != NULL) {
(void)vfprintf(fp, fmt, ap);
- if (error_set)
+ if (error_set != DB_ERROR_NOT_SET)
(void)fprintf(fp, ": ");
}
- if (error_set)
- (void)fprintf(fp, "%s", db_strerror(error));
+ if (error_set != DB_ERROR_NOT_SET)
+ (void)fprintf(fp, "%s",
+ error_set == DB_ERROR_SET ? db_strerror(error) :
+ __os_strerror(error, sysbuf, sizeof(sysbuf)));
(void)fprintf(fp, "\n");
(void)fflush(fp);
}
@@ -503,89 +587,63 @@ __db_msgfile(dbenv, fmt, ap)
}
/*
- * __db_logmsg --
- * Write information into the DB log.
+ * __db_unknown_flag -- report internal error
*
- * PUBLIC: void __db_logmsg __P((const DB_ENV *,
- * PUBLIC: DB_TXN *, const char *, u_int32_t, const char *, ...))
- * PUBLIC: __attribute__ ((__format__ (__printf__, 5, 6)));
+ * PUBLIC: int __db_unknown_flag __P((DB_ENV *, char *, u_int32_t));
*/
-void
-#ifdef STDC_HEADERS
-__db_logmsg(const DB_ENV *dbenv,
- DB_TXN *txnid, const char *opname, u_int32_t flags, const char *fmt, ...)
-#else
-__db_logmsg(dbenv, txnid, opname, flags, fmt, va_alist)
- const DB_ENV *dbenv;
- DB_TXN *txnid;
- const char *opname, *fmt;
- u_int32_t flags;
- va_dcl
-#endif
+int
+__db_unknown_flag(dbenv, routine, flag)
+ DB_ENV *dbenv;
+ char *routine;
+ u_int32_t flag;
{
- 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;
+ __db_errx(dbenv, "%s: Unknown flag: %#x", routine, (u_int)flag);
-#ifdef STDC_HEADERS
- va_start(ap, fmt);
-#else
- va_start(ap);
+#ifdef DIAGNOSTIC
+ abort();
+ /* NOTREACHED */
#endif
- memset(&opdbt, 0, sizeof(opdbt));
- opdbt.data = (void *)opname;
- opdbt.size = (u_int32_t)(strlen(opname) + 1);
-
- memset(&msgdbt, 0, sizeof(msgdbt));
- msgdbt.data = __logbuf;
- msgdbt.size = (u_int32_t)vsnprintf(__logbuf, sizeof(__logbuf), fmt, ap);
-
- va_end(ap);
-
- /*
- * XXX
- * Explicitly discard the const. Otherwise, we have to const DB_ENV
- * references throughout the logging subsystem.
- */
- (void)__db_debug_log(
- (DB_ENV *)dbenv, txnid, &lsn, flags, &opdbt, -1, &msgdbt, NULL, 0);
+ return (EINVAL);
}
/*
- * __db_unknown_flag -- report internal error
+ * __db_unknown_type -- report internal database type error
*
- * PUBLIC: int __db_unknown_flag __P((DB_ENV *, char *, u_int32_t));
+ * PUBLIC: int __db_unknown_type __P((DB_ENV *, char *, DBTYPE));
*/
int
-__db_unknown_flag(dbenv, routine, flag)
+__db_unknown_type(dbenv, routine, type)
DB_ENV *dbenv;
char *routine;
- u_int32_t flag;
+ DBTYPE type;
{
- __db_err(dbenv, "%s: Unknown flag: %#x", routine, (u_int)flag);
- DB_ASSERT(0);
+ __db_errx(dbenv,
+ "%s: Unexpected database type: %s",
+ routine, __db_dbtype_to_string(type));
+
+#ifdef DIAGNOSTIC
+ abort();
+ /* NOTREACHED */
+#endif
return (EINVAL);
}
/*
- * __db_unknown_type -- report internal error
+ * __db_unknown_path -- report unexpected database code path error.
*
- * PUBLIC: int __db_unknown_type __P((DB_ENV *, char *, DBTYPE));
+ * PUBLIC: int __db_unknown_path __P((DB_ENV *, char *));
*/
int
-__db_unknown_type(dbenv, routine, type)
+__db_unknown_path(dbenv, routine)
DB_ENV *dbenv;
char *routine;
- DBTYPE type;
{
- __db_err(dbenv,
- "%s: Unexpected DB type: %s", routine, __db_dbtype_to_string(type));
+ __db_errx(dbenv, "%s: Unexpected code path error", routine);
- DB_ASSERT(0);
+#ifdef DIAGNOSTIC
+ abort();
+ /* NOTREACHED */
+#endif
return (EINVAL);
}
@@ -620,46 +678,49 @@ __db_check_txn(dbp, txn, assoc_lid, read_op)
/*
* 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.
+ * an operation on a handle whose open commit hasn't completed.
+ * a transaction handle in a non-transactional environment
+ * a transaction handle for a non-transactional database
*/
- if (txn == NULL) {
+ if (txn == NULL || F_ISSET(txn, TXN_PRIVATE)) {
+ if (dbp->cur_lid >= TXN_MINIMUM)
+ goto open_err;
+
if (!read_op && F_ISSET(dbp, DB_AM_TXN)) {
- __db_err(dbenv,
- "DB handle previously used in transaction, missing transaction handle");
+ __db_errx(dbenv,
+ "Transaction not specified for a transactional database");
return (EINVAL);
}
-
- if (dbp->cur_lid >= TXN_MINIMUM)
- goto open_err;
+ } else if (F_ISSET(txn, TXN_CDSGROUP)) {
+ if (!CDB_LOCKING(dbenv)) {
+ __db_errx(dbenv,
+ "CDS groups can only be used in a CDS environment");
+ return (EINVAL);
+ }
+ /*
+ * CDS group handles can be passed to any method, since they
+ * only determine locker IDs.
+ */
+ return (0);
} else {
- if (F_ISSET(txn, TXN_DEADLOCK)) {
- __db_err(dbenv,
- "Previous deadlock return not resolved");
+ if (!TXN_ON(dbenv))
+ return (__db_not_txn_env(dbenv));
+
+ if (!F_ISSET(dbp, DB_AM_TXN)) {
+ __db_errx(dbenv,
+ "Transaction specified for a non-transactional database");
return (EINVAL);
}
- if (dbp->cur_lid >= TXN_MINIMUM &&
- dbp->cur_lid != txn->txnid) {
+
+ if (F_ISSET(txn, TXN_DEADLOCK))
+ return (__db_txn_deadlock_err(dbenv));
+ if (dbp->cur_lid >= TXN_MINIMUM && dbp->cur_lid != txn->txnid) {
if ((ret = __lock_locker_is_parent(dbenv,
dbp->cur_lid, txn->txnid, &isp)) != 0)
return (ret);
if (!isp)
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);
- }
}
/*
@@ -679,19 +740,42 @@ __db_check_txn(dbp, txn, assoc_lid, read_op)
*/
if (!read_op && dbp->associate_lid != DB_LOCK_INVALIDID &&
txn != NULL && dbp->associate_lid != assoc_lid) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Operation forbidden while secondary index is being created");
return (EINVAL);
}
+ /*
+ * Check the txn and dbp are from the same env.
+ */
+ if (txn != NULL && dbenv != txn->mgrp->dbenv) {
+ __db_errx(dbenv,
+ "Transaction and database from different environments");
+ return (EINVAL);
+ }
+
return (0);
open_err:
- __db_err(dbenv,
+ __db_errx(dbenv,
"Transaction that opened the DB handle is still active");
return (EINVAL);
}
/*
+ * __db_txn_deadlock_err --
+ * Transaction has allready been deadlocked.
+ *
+ * PUBLIC: int __db_txn_deadlock_err __P((DB_ENV *));
+ */
+int
+__db_txn_deadlock_err(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_errx(dbenv, "Previous deadlock return not resolved");
+ return (EINVAL);
+}
+
+/*
* __db_not_txn_env --
* DB handle must be in an environment that supports transactions.
*
@@ -701,7 +785,7 @@ int
__db_not_txn_env(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "DB environment not configured for transactions");
+ __db_errx(dbenv, "DB environment not configured for transactions");
return (EINVAL);
}
@@ -716,8 +800,9 @@ __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);
+ __db_errx(dbenv,
+ "%lu larger than database's maximum record length %lu",
+ (u_long)data_len, (u_long)fixed_rec_len);
return (EINVAL);
}
@@ -732,12 +817,87 @@ __db_rec_repl(dbenv, data_size, data_dlen)
DB_ENV *dbenv;
u_int32_t data_size, data_dlen;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: replacement length %lu differs from replaced length %lu",
"Record length error", (u_long)data_size, (u_long)data_dlen);
return (EINVAL);
}
+#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
+/*
+ * __dbc_logging --
+ * In DIAGNOSTIC mode, check for bad replication combinations.
+ *
+ * PUBLIC: int __dbc_logging __P((DBC *));
+ */
+int
+__dbc_logging(dbc)
+ DBC *dbc;
+{
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+ int ret;
+
+ dbenv = dbc->dbp->dbenv;
+ db_rep = dbenv->rep_handle;
+
+ ret = LOGGING_ON(dbenv) &&
+ !F_ISSET(dbc, DBC_RECOVER) && !IS_REP_CLIENT(dbenv);
+
+ /*
+ * If we're not using replication or running recovery, return.
+ */
+ if (db_rep == NULL || F_ISSET(dbc, DBC_RECOVER))
+ return (ret);
+
+#ifndef DEBUG_ROP
+ /*
+ * Only check when DEBUG_ROP is not configured. People often do
+ * non-transactional reads, and debug_rop is going to write
+ * a log record.
+ */
+ {
+ REP *rep;
+
+ rep = db_rep->region;
+
+ /*
+ * If we're a client and not running recovery or internally, error.
+ */
+ if (IS_REP_CLIENT(dbenv) &&
+ !F_ISSET(dbc->dbp, DB_AM_CL_WRITER) &&
+ !F_ISSET(dbc->dbp, DB_AM_NOT_DURABLE)) {
+ __db_errx(dbenv, "Dbc_logging: Client update");
+ goto err;
+ }
+
+#ifndef DEBUG_WOP
+ /*
+ * If DEBUG_WOP is enabled, then we'll generate debugging log records
+ * that are non-transactional. This is OK.
+ */
+ if (IS_REP_MASTER(dbenv) &&
+ dbc->txn == NULL && !F_ISSET(dbc->dbp, DB_AM_NOT_DURABLE)) {
+ __db_errx(dbenv, "Dbc_logging: Master non-txn update");
+ goto err;
+ }
+#endif
+
+ if (0) {
+err: __db_errx(dbenv, "Rep: flags 0x%lx msg_th %lu, lockout_th %d",
+ (u_long)rep->flags, (u_long)rep->msg_th, rep->lockout_th);
+ __db_errx(dbenv, "Rep: handle %lu, opcnt %lu, in_rec %d",
+ (u_long)rep->handle_cnt, (u_long)rep->op_cnt,
+ rep->in_recovery);
+ abort();
+ /* NOTREACHED */
+ }
+ }
+#endif
+ return (ret);
+}
+#endif
+
/*
* __db_check_lsn --
* Display the log sequence error message.
@@ -749,9 +909,59 @@ __db_check_lsn(dbenv, lsn, prev)
DB_ENV *dbenv;
DB_LSN *lsn, *prev;
{
- __db_err(dbenv,
+ __db_errx(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);
return (EINVAL);
}
+
+/*
+ * __db_rdonly --
+ * Common readonly message.
+ * PUBLIC: int __db_rdonly __P((const DB_ENV *, const char *));
+ */
+int
+__db_rdonly(dbenv, name)
+ const DB_ENV *dbenv;
+ const char *name;
+{
+ __db_errx(dbenv, "%s: attempt to modify a read-only database", name);
+ return (EACCES);
+}
+
+/*
+ * __db_space_err --
+ * Common out of space message.
+ * PUBLIC: int __db_space_err __P((const DB *));
+ */
+int
+__db_space_err(dbp)
+ const DB *dbp;
+{
+ __db_errx(dbp->dbenv,
+ "%s: file limited to %lu pages",
+ dbp->fname, (u_long)dbp->mpf->mfp->maxpgno);
+ return (ENOSPC);
+}
+
+/*
+ * __db_failed --
+ * Common failed thread message.
+ *
+ * PUBLIC: int __db_failed __P((const DB_ENV *,
+ * PUBLIC: const char *, pid_t, db_threadid_t));
+ */
+int
+__db_failed(dbenv, msg, pid, tid)
+ const DB_ENV *dbenv;
+ const char *msg;
+ pid_t pid;
+ db_threadid_t tid;
+{
+ char buf[DB_THREADID_STRLEN];
+
+ __db_errx(dbenv, "Thread/process %s failed: %s",
+ dbenv->thread_id_string((DB_ENV*)dbenv, pid, tid, buf), msg);
+ return (DB_RUNRECOVERY);
+}
diff --git a/db/common/db_getlong.c b/db/common/db_getlong.c
index be70f0d4a..7285c50a7 100644
--- a/db/common/db_getlong.c
+++ b/db/common/db_getlong.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_getlong.c,v 11.22 2004/10/28 14:43:26 bostic Exp $
+ * $Id: db_getlong.c,v 12.5 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -45,7 +37,7 @@ __db_getlong(dbenv, progname, p, min, max, storep)
"%s: %s: %s\n", progname, p, strerror(ERANGE));
else
dbenv->err(dbenv, ERANGE, "%s", p);
- return (1);
+ return (ERANGE);
}
if (p[0] == '\0' || (end[0] != '\0' && end[0] != '\n')) {
if (dbenv == NULL)
@@ -53,7 +45,7 @@ __db_getlong(dbenv, progname, p, min, max, storep)
"%s: %s: Invalid numeric argument\n", progname, p);
else
dbenv->errx(dbenv, "%s: Invalid numeric argument", p);
- return (1);
+ return (EINVAL);
}
if (val < min) {
if (dbenv == NULL)
@@ -63,7 +55,7 @@ __db_getlong(dbenv, progname, p, min, max, storep)
else
dbenv->errx(dbenv,
"%s: Less than minimum value (%ld)", p, min);
- return (1);
+ return (ERANGE);
}
if (val > max) {
if (dbenv == NULL)
@@ -73,7 +65,7 @@ __db_getlong(dbenv, progname, p, min, max, storep)
else
dbenv->errx(dbenv,
"%s: Greater than maximum value (%ld)", p, max);
- return (1);
+ return (ERANGE);
}
*storep = val;
return (0);
@@ -104,7 +96,7 @@ __db_getulong(dbenv, progname, p, min, max, storep)
"%s: %s: %s\n", progname, p, strerror(ERANGE));
else
dbenv->err(dbenv, ERANGE, "%s", p);
- return (1);
+ return (ERANGE);
}
if (p[0] == '\0' || (end[0] != '\0' && end[0] != '\n')) {
if (dbenv == NULL)
@@ -112,7 +104,7 @@ __db_getulong(dbenv, progname, p, min, max, storep)
"%s: %s: Invalid numeric argument\n", progname, p);
else
dbenv->errx(dbenv, "%s: Invalid numeric argument", p);
- return (1);
+ return (EINVAL);
}
if (val < min) {
if (dbenv == NULL)
@@ -122,7 +114,7 @@ __db_getulong(dbenv, progname, p, min, max, storep)
else
dbenv->errx(dbenv,
"%s: Less than minimum value (%lu)", p, min);
- return (1);
+ return (ERANGE);
}
/*
@@ -139,7 +131,7 @@ __db_getulong(dbenv, progname, p, min, max, storep)
else
dbenv->errx(dbenv,
"%s: Greater than maximum value (%lu)", p, max);
- return (1);
+ return (ERANGE);
}
*storep = val;
return (0);
diff --git a/db/common/db_idspace.c b/db/common/db_idspace.c
index 49f2e9137..777ced7f1 100644
--- a/db/common/db_idspace.c
+++ b/db/common/db_idspace.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_idspace.c,v 1.9 2004/01/28 03:35:52 bostic Exp $
+ * $Id: db_idspace.c,v 12.4 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
static int __db_idcmp __P((const void *, const void *));
diff --git a/db/common/db_log2.c b/db/common/db_log2.c
index fcc1a6035..9adc5d9a5 100644
--- a/db/common/db_log2.c
+++ b/db/common/db_log2.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1995, 1996
@@ -35,15 +35,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_log2.c,v 11.9 2004/01/28 03:35:52 bostic Exp $
+ * $Id: db_log2.c,v 12.4 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
/*
diff --git a/db/common/mkpath.c b/db/common/mkpath.c
new file mode 100644
index 000000000..3f2cbf73b
--- /dev/null
+++ b/db/common/mkpath.c
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mkpath.c,v 12.16 2006/08/24 14:45:11 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __db_mkpath -- --
+ * Create intermediate directories.
+ *
+ * PUBLIC: int __db_mkpath __P((DB_ENV *, const char *));
+ */
+int
+__db_mkpath(dbenv, name)
+ DB_ENV *dbenv;
+ const char *name;
+{
+ size_t len;
+ int ret;
+ char *p, *t, savech;
+
+ /*
+ * Get a copy so we can modify the string. It's a path and potentially
+ * quite long, so don't allocate the space on the stack.
+ */
+ len = strlen(name) + 1;
+ if ((ret = __os_malloc(dbenv, len, &t)) != 0)
+ return (ret);
+ memcpy(t, name, len);
+
+ /*
+ * Cycle through the path, creating intermediate directories.
+ *
+ * Skip the first byte if it's a path separator, it's the start of an
+ * absolute pathname.
+ */
+ if (PATH_SEPARATOR[1] == '\0') {
+ for (p = t + 1; p[0] != '\0'; ++p)
+ if (p[0] == PATH_SEPARATOR[0]) {
+ savech = *p;
+ *p = '\0';
+ if (__os_exists(dbenv, t, NULL) &&
+ (ret = __os_mkdir(
+ dbenv, t, dbenv->dir_mode)) != 0)
+ break;
+ *p = savech;
+ }
+ } else
+ for (p = t + 1; p[0] != '\0'; ++p)
+ if (strchr(PATH_SEPARATOR, p[0]) != NULL) {
+ savech = *p;
+ *p = '\0';
+ if (__os_exists(dbenv, t, NULL) &&
+ (ret = __os_mkdir(
+ dbenv, t, dbenv->dir_mode)) != 0)
+ break;
+ *p = savech;
+ }
+
+ __os_free(dbenv, t);
+ return (ret);
+}
diff --git a/db/common/util_arg.c b/db/common/util_arg.c
index 16a17ee28..e7cb68cd8 100644
--- a/db/common/util_arg.c
+++ b/db/common/util_arg.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: util_arg.c,v 1.6 2004/01/28 03:35:52 bostic Exp $
+ * $Id: util_arg.c,v 12.4 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
static char *__db_strsep __P((char **, const char *));
diff --git a/db/common/util_cache.c b/db/common/util_cache.c
index 006c34557..b9098cb1e 100644
--- a/db/common/util_cache.c
+++ b/db/common/util_cache.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: util_cache.c,v 1.8 2004/02/17 16:03:05 bostic Exp $
+ * $Id: util_cache.c,v 12.4 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
diff --git a/db/common/util_log.c b/db/common/util_log.c
index 98fd1951c..f1888b8ac 100644
--- a/db/common/util_log.c
+++ b/db/common/util_log.c
@@ -1,32 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: util_log.c,v 1.14 2004/01/28 03:35:52 bostic Exp $
+ * $Id: util_log.c,v 12.11 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.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 <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -40,16 +22,19 @@ __db_util_logset(progname, fname)
const char *progname;
char *fname;
{
+ pid_t pid;
FILE *fp;
time_t now;
- u_int32_t id;
+ char time_buf[CTIME_BUFLEN];
if ((fp = fopen(fname, "w")) == NULL)
goto err;
(void)time(&now);
- __os_id(&id);
- fprintf(fp, "%s: %lu %s", progname, (u_long)id, ctime(&now));
+
+ __os_id(NULL, &pid, NULL);
+ fprintf(fp,
+ "%s: %lu %s", progname, (u_long)pid, __db_ctime(&now, time_buf));
if (fclose(fp) == EOF)
goto err;
diff --git a/db/common/util_sig.c b/db/common/util_sig.c
index 53087360e..821253b77 100644
--- a/db/common/util_sig.c
+++ b/db/common/util_sig.c
@@ -1,38 +1,60 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: util_sig.c,v 1.9 2004/01/28 03:35:54 bostic Exp $
+ * $Id: util_sig.c,v 12.5 2006/08/24 14:45:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <signal.h>
-#endif
-
#include "db_int.h"
static int interrupt;
-static void onint __P((int));
+static void set_signal __P((int, int));
+static void signal_handler __P((int));
/*
- * onint --
+ * signal_handler --
* Interrupt signal handler.
*/
static void
-onint(signo)
+signal_handler(signo)
int signo;
{
+#ifndef HAVE_SIGACTION
+ /* Assume signal() is unreliable and reset it, first thing. */
+ set_signal(signo, 0);
+#endif
+ /* Some systems don't pass in the correct signal value -- check. */
if ((interrupt = signo) == 0)
interrupt = SIGINT;
}
/*
+ * set_signal
+ */
+static void
+set_signal(s, is_dflt)
+ int s, is_dflt;
+{
+ /*
+ * Use sigaction if it's available, otherwise use signal().
+ */
+#ifdef HAVE_SIGACTION
+ struct sigaction sa, osa;
+
+ sa.sa_handler = is_dflt ? SIG_DFL : signal_handler;
+ (void)sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ (void)sigaction(s, &sa, &osa);
+#else
+ (void)signal(s, is_dflt ? SIG_DFL : signal_handler);
+#endif
+}
+
+/*
* __db_util_siginit --
*
* PUBLIC: void __db_util_siginit __P((void));
@@ -46,13 +68,17 @@ __db_util_siginit()
* we can.
*/
#ifdef SIGHUP
- (void)signal(SIGHUP, onint);
+ set_signal(SIGHUP, 0);
+#endif
+#ifdef SIGINT
+ set_signal(SIGINT, 0);
#endif
- (void)signal(SIGINT, onint);
#ifdef SIGPIPE
- (void)signal(SIGPIPE, onint);
+ set_signal(SIGPIPE, 0);
+#endif
+#ifdef SIGTERM
+ set_signal(SIGTERM, 0);
#endif
- (void)signal(SIGTERM, onint);
}
/*
@@ -77,7 +103,8 @@ __db_util_sigresend()
{
/* Resend any caught signal. */
if (interrupt != 0) {
- (void)signal(interrupt, SIG_DFL);
+ set_signal(interrupt, 1);
+
(void)raise(interrupt);
/* NOTREACHED */
}
diff --git a/db/crypto/aes_method.c b/db/crypto/aes_method.c
index 567e67456..cd4370b3a 100644
--- a/db/crypto/aes_method.c
+++ b/db/crypto/aes_method.c
@@ -1,21 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
* Some parts of this code originally written by Adam Stubblefield,
* -- astubble@rice.edu.
*
- * $Id: aes_method.c,v 1.20 2004/09/17 22:00:25 mjc Exp $
+ * $Id: aes_method.c,v 12.5 2006/08/24 14:45:12 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
@@ -268,6 +264,6 @@ __aes_err(dbenv, err)
errstr = "AES error unrecognized";
break;
}
- __db_err(dbenv, errstr);
+ __db_errx(dbenv, errstr);
return;
}
diff --git a/db/crypto/crypto.c b/db/crypto/crypto.c
index f753ec3f0..72a8444e0 100644
--- a/db/crypto/crypto.c
+++ b/db/crypto/crypto.c
@@ -1,21 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
* Some parts of this code originally written by Adam Stubblefield
* -- astubble@rice.edu
*
- * $Id: crypto.c,v 1.31 2004/10/15 16:59:38 bostic Exp $
+ * $Id: crypto.c,v 12.10 2006/08/24 14:45:12 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/crypto.h"
@@ -40,35 +36,31 @@ __crypto_region_init(dbenv)
ret = 0;
infop = dbenv->reginfo;
renv = infop->primary;
- MUTEX_LOCK(dbenv, &renv->mutex);
if (renv->cipher_off == INVALID_ROFF) {
if (!CRYPTO_ON(dbenv))
- goto err;
+ return (0);
if (!F_ISSET(infop, REGION_CREATE)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Joining non-encrypted environment with encryption key");
- ret = EINVAL;
- goto err;
+ return (EINVAL);
}
if (F_ISSET(db_cipher, CIPHER_ANY)) {
- __db_err(dbenv, "Encryption algorithm not supplied");
- ret = EINVAL;
- goto err;
+ __db_errx(dbenv, "Encryption algorithm not supplied");
+ return (EINVAL);
}
/*
- * Must create the shared information. We need:
- * Shared cipher information that contains the passwd.
- * After we copy the passwd, we smash and free the one in the
- * dbenv.
+ * Must create the shared information. We need: Shared cipher
+ * information that contains the passwd. After we copy the
+ * passwd, we smash and free the one in the dbenv.
*/
- if ((ret = __db_shalloc(
- infop, sizeof(CIPHER), MUTEX_ALIGN, &cipher)) != 0)
- goto err;
+ if ((ret =
+ __db_shalloc(infop, sizeof(CIPHER), 0, &cipher)) != 0)
+ return (ret);
memset(cipher, 0, sizeof(*cipher));
if ((ret = __db_shalloc(
infop, dbenv->passwd_len, 0, &sh_passwd)) != 0) {
__db_shalloc_free(infop, cipher);
- goto err;
+ return (ret);
}
memset(sh_passwd, 0, dbenv->passwd_len);
cipher->passwd = R_OFFSET(infop, sh_passwd);
@@ -78,52 +70,45 @@ __crypto_region_init(dbenv)
renv->cipher_off = R_OFFSET(infop, cipher);
} else {
if (!CRYPTO_ON(dbenv)) {
- __db_err(dbenv,
- "Encrypted environment: no encryption key supplied");
- ret = EINVAL;
- goto err;
+ __db_errx(dbenv,
+ "Encrypted environment: no encryption key supplied");
+ return (EINVAL);
}
cipher = R_ADDR(infop, renv->cipher_off);
sh_passwd = R_ADDR(infop, cipher->passwd);
if ((cipher->passwd_len != dbenv->passwd_len) ||
memcmp(dbenv->passwd, sh_passwd, cipher->passwd_len) != 0) {
- __db_err(dbenv, "Invalid password");
- ret = EPERM;
- goto err;
+ __db_errx(dbenv, "Invalid password");
+ return (EPERM);
}
if (!F_ISSET(db_cipher, CIPHER_ANY) &&
db_cipher->alg != cipher->flags) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Environment encrypted using a different algorithm");
- ret = EINVAL;
- goto err;
+ return (EINVAL);
}
if (F_ISSET(db_cipher, CIPHER_ANY))
/*
- * We have CIPHER_ANY and we are joining the
- * existing env. Setup our cipher structure
- * for whatever algorithm this env has.
+ * We have CIPHER_ANY and we are joining the existing
+ * env. Setup our cipher structure for whatever
+ * algorithm this env has.
*/
if ((ret = __crypto_algsetup(dbenv, db_cipher,
cipher->flags, 0)) != 0)
- goto err;
+ return (ret);
}
- MUTEX_UNLOCK(dbenv, &renv->mutex);
ret = db_cipher->init(dbenv, db_cipher);
/*
- * On success, no matter if we allocated it or are using the
- * already existing one, we are done with the passwd in the dbenv.
- * We smash N-1 bytes so that we don't overwrite the nul.
+ * On success, no matter if we allocated it or are using the already
+ * existing one, we are done with the passwd in the dbenv. We smash
+ * N-1 bytes so that we don't overwrite the nul.
*/
memset(dbenv->passwd, 0xff, dbenv->passwd_len-1);
__os_free(dbenv, dbenv->passwd);
dbenv->passwd = NULL;
dbenv->passwd_len = 0;
- if (0) {
-err: MUTEX_UNLOCK(dbenv, &renv->mutex);
- }
return (ret);
}
@@ -197,7 +182,7 @@ __crypto_algsetup(dbenv, db_cipher, alg, do_init)
ret = 0;
if (!CRYPTO_ON(dbenv)) {
- __db_err(dbenv, "No cipher structure given");
+ __db_errx(dbenv, "No cipher structure given");
return (EINVAL);
}
F_CLR(db_cipher, CIPHER_ANY);
@@ -236,47 +221,67 @@ __crypto_decrypt_meta(dbenv, dbp, mbuf, do_metachk)
u_int8_t *iv;
/*
- * 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
- * with a dbp. Therefore, set up a dummy dbp so that the call
- * to P_OVERHEAD below works.
+ * 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 with
+ * a dbp. Therefore, set up a dummy dbp so that the call to
+ * P_OVERHEAD below works.
*/
if (dbp == NULL) {
memset(&dummydb, 0, sizeof(DB));
dbp = &dummydb;
}
+
+ ret = 0;
+ meta = (DBMETA *)mbuf;
+
/*
- * Meta-pages may be encrypted for DBMETASIZE bytes. If
- * we have a non-zero IV (that is written after encryption)
- * then we decrypt (or error if the user isn't set up for
- * security). We guarantee that the IV space on non-encrypted
- * pages will be zero and a zero-IV is illegal for encryption.
- * Therefore any non-zero IV means an encrypted database.
- * This basically checks the passwd on the file
- * if we cannot find a good magic number.
- * We walk through all the algorithms we know about attempting
- * to decrypt (and possibly byteswap).
+ * !!!
+ * We used an "unused" field in the meta-data page to flag whether or
+ * not the database is encrypted. Unfortunately, that unused field
+ * was used in Berkeley DB releases before 3.0 (for example, 2.7.7).
+ * It would have been OK, except encryption doesn't follow the usual
+ * rules of "upgrade before doing anything else", we check encryption
+ * before checking for old versions of the database.
+ *
+ * We don't have to check Btree databases -- before 3.0, the field of
+ * interest was the bt_maxkey field (which was never supported and has
+ * since been removed).
+ *
+ * Ugly check to jump out if this format is older than what we support.
+ * It assumes no encrypted page will have an unencrypted magic number,
+ * but that seems relatively safe. [#10920]
+ */
+ if (meta->magic == DB_HASHMAGIC && meta->version <= 5)
+ return (0);
+
+ /*
+ * Meta-pages may be encrypted for DBMETASIZE bytes. If we have a
+ * non-zero IV (that is written after encryption) then we decrypt (or
+ * error if the user isn't set up for security). We guarantee that
+ * the IV space on non-encrypted pages will be zero and a zero-IV is
+ * illegal for encryption. Therefore any non-zero IV means an
+ * encrypted database. This basically checks the passwd on the file
+ * if we cannot find a good magic number. We walk through all the
+ * algorithms we know about attempting to decrypt (and possibly
+ * byteswap).
*
* !!!
- * All method meta pages have the IV and checksum at the
- * exact same location, but not in DBMETA, use BTMETA.
+ * All method meta pages have the IV and checksum at the exact same
+ * location, but not in DBMETA, use BTMETA.
*/
- ret = 0;
- meta = (DBMETA *)mbuf;
if (meta->encrypt_alg != 0) {
db_cipher = (DB_CIPHER *)dbenv->crypto_handle;
if (!F_ISSET(dbp, DB_AM_ENCRYPT)) {
if (!CRYPTO_ON(dbenv)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Encrypted database: no encryption flag specified");
return (EINVAL);
}
/*
- * User has a correct, secure env, but has
- * encountered a database in that env that is
- * secure, but user didn't dbp->set_flags. Since
- * it is existing, use encryption if it is that
- * way already.
+ * User has a correct, secure env, but has encountered
+ * a database in that env that is secure, but user
+ * didn't dbp->set_flags. Since it is existing, use
+ * encryption if it is that way already.
*/
F_SET(dbp, DB_AM_ENCRYPT|DB_AM_CHKSUM);
}
@@ -284,19 +289,19 @@ __crypto_decrypt_meta(dbenv, dbp, mbuf, do_metachk)
* This was checked in set_flags when DB_AM_ENCRYPT was set.
* So it better still be true here.
*/
- DB_ASSERT(CRYPTO_ON(dbenv));
+ DB_ASSERT(dbenv, CRYPTO_ON(dbenv));
if (!F_ISSET(db_cipher, CIPHER_ANY) &&
meta->encrypt_alg != db_cipher->alg) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Database encrypted using a different algorithm");
return (EINVAL);
}
- DB_ASSERT(F_ISSET(dbp, DB_AM_CHKSUM));
+ DB_ASSERT(dbenv, F_ISSET(dbp, DB_AM_CHKSUM));
iv = ((BTMETA *)mbuf)->iv;
/*
- * For ALL pages, we do not encrypt the beginning
- * of the page that contains overhead information.
- * This is true of meta and all other pages.
+ * For ALL pages, we do not encrypt the beginning of the page
+ * that contains overhead information. This is true of meta
+ * and all other pages.
*/
pg_off = P_OVERHEAD(dbp);
alg_retry:
@@ -311,7 +316,7 @@ alg_retry:
return (ret);
if (((BTMETA *)meta)->crypto_magic !=
meta->magic) {
- __db_err(dbenv, "Invalid password");
+ __db_errx(dbenv, "Invalid password");
return (EINVAL);
}
/*
@@ -330,10 +335,10 @@ alg_retry:
goto alg_retry;
} else if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
/*
- * They gave us a passwd, but the database is not
- * encrypted. This is an error. We do NOT want to
- * silently allow them to write data in the clear when
- * the user set up and expects encrypted data.
+ * They gave us a passwd, but the database is not encrypted.
+ * This is an error. We do NOT want to silently allow them
+ * to write data in the clear when the user set up and expects
+ * encrypted data.
*
* This covers at least the following scenario.
* 1. User creates and sets up an encrypted database.
@@ -349,7 +354,7 @@ alg_retry:
* Therefore, asking for encryption with a database that
* was not encrypted is an error.
*/
- __db_err(dbenv,
+ __db_errx(dbenv,
"Unencrypted database with a supplied encryption key");
return (EINVAL);
}
@@ -377,9 +382,9 @@ __crypto_set_passwd(dbenv_src, dbenv_dest)
infop = dbenv_src->reginfo;
renv = infop->primary;
- DB_ASSERT(CRYPTO_ON(dbenv_src));
+ DB_ASSERT(dbenv_src, 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));
+ return (__env_set_encrypt(dbenv_dest, sh_passwd, DB_ENCRYPT_AES));
}
diff --git a/db/crypto/crypto.html b/db/crypto/crypto.html
index 9475beb2a..129a7f4f3 100644
--- a/db/crypto/crypto.html
+++ b/db/crypto/crypto.html
@@ -11,7 +11,6 @@
&nbsp;Security Interface for Berkeley DB</h1></center>
<center><i>Susan LoVerso</i>
-<br><i>sue@sleepycat.com</i>
<br><i>Rev 1.6</i>
<br><i>2002 Feb 26</i></center>
@@ -108,7 +107,7 @@ The setup of the security subsystem will be similar to replication initializatio
since it is a sort of subsystem, but it does not have its own region.&nbsp;
When the environment handle is created via <i>db_env_create</i>, we initialize
our <i>set_encrypt</i> method to be the RPC or local version.&nbsp; Therefore
-the <i>__dbenv</i> structure needs a new pointer:
+the <i>DB_ENV</i> structure needs a new pointer:
<pre>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp;&nbsp; *crypto_handle;&nbsp;&nbsp; /* Security handle */</pre>
The crypto handle will really point to a new <i>__db_cipher</i> structure
that will contain a set of functions and a pointer to the in-memory information
@@ -134,21 +133,21 @@ this is set up, it is read-only forever.
<p>During <a href="../docs/api_c/env_set_encrypt.html">dbenv->set_encrypt</a>,
we set the encryption, decryption and checksumming methods to the appropriate
functions based on the flags.&nbsp; This function will allocate us a crypto
-handle that we store in the <i>__dbenv</i> structure just like all the
+handle that we store in the <i>DB_ENV</i> structure just like all the
other subsystems.&nbsp; For now, only AES ciphering functions and SHA1
checksumming functions are supported.&nbsp; Also we will copy the password
-into the <i>__dbenv</i> structure.&nbsp; We ultimately need to keep the
+into the <i>DB_ENV</i> structure.&nbsp; We ultimately need to keep the
password in the environment's shared memory region or compare this one
against the one that is there, if we are joining an existing environment,
but we do not have it yet because open has not yet been called.&nbsp; We
will allocate a structure that will be used in initialization and set up
the function pointers to point to the algorithm-specific functions.
-<p>In the&nbsp; <i>__dbenv_open</i> path, in <i>__db_e_attach</i>, if we
+<p>In the&nbsp; <i>__env_open</i> path, in <i>__db_e_attach</i>, if we
are creating the region and the <i>dbenv->passwd</i> field is set, we need
to use the length of the password in the initial computation of the environment's
size.&nbsp; This guarantees sufficient space for storing the password in
shared memory.&nbsp; Then we will call a new function to initialize the
-security region, <i>__crypto_region_init</i> in <i>__dbenv_open</i>.&nbsp;
+security region, <i>__crypto_region_init</i> in <i>__env_open</i>.&nbsp;
If we are the creator, we will allocate space in the shared region to store
the password and copy the password into that space.&nbsp; Or, if we are
not the creator we will compare the password stored in the dbenv with the
@@ -304,7 +303,7 @@ We will have per-process state vectors that are set up when a process begins.&nb
That way we minimize the contention and only multi-threaded processes need
acquire locks for the IV.&nbsp; We will have the state vector in the environment
handle in heap memory, as well as the index and there will be a mutex protecting
-it for threaded access.&nbsp; This will be added to the <i>__dbenv</i>
+it for threaded access.&nbsp; This will be added to the <i>DB_ENV</i>
structure:
<pre>&nbsp;&nbsp;&nbsp; DB_MUTEX&nbsp;&nbsp;&nbsp; *mt_mutexp;&nbsp;&nbsp; /* Mersenne Twister mutex */
&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *mti;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* MT index */
diff --git a/db/crypto/mersenne/mt19937db.c b/db/crypto/mersenne/mt19937db.c
index 1c1699db5..6cd259932 100644
--- a/db/crypto/mersenne/mt19937db.c
+++ b/db/crypto/mersenne/mt19937db.c
@@ -1,5 +1,5 @@
/*
- * $Id: mt19937db.c,v 1.12 2004/06/14 16:54:27 mjc Exp $
+ * $Id: mt19937db.c,v 12.4 2006/09/08 20:32:02 bostic Exp $
*/
#include "db_config.h"
@@ -33,14 +33,14 @@
/* ACM Transactions on Modeling and Computer Simulation, */
/* Vol. 8, No. 1, January 1998, pp 3--30. */
-/* Period parameters */
+/* Period parameters */
#define N 624
#define M 397
#define MATRIX_A 0x9908b0df /* constant vector a */
#define UPPER_MASK 0x80000000 /* most significant w-r bits */
#define LOWER_MASK 0x7fffffff /* least significant r bits */
-/* Tempering parameters */
+/* Tempering parameters */
#define TEMPERING_MASK_B 0x9d2c5680
#define TEMPERING_MASK_C 0xefc60000
#define TEMPERING_SHIFT_U(y) (y >> 11)
@@ -69,7 +69,7 @@ __db_generate_iv(dbenv, iv)
ret = 0;
n = DB_IV_BYTES / sizeof(u_int32_t);
- MUTEX_THREAD_LOCK(dbenv, dbenv->mt_mutexp);
+ MUTEX_LOCK(dbenv, dbenv->mtx_mt);
if (dbenv->mt == NULL) {
if ((ret = __os_calloc(dbenv, 1, N*sizeof(unsigned long),
&dbenv->mt)) != 0)
@@ -77,30 +77,29 @@ __db_generate_iv(dbenv, iv)
/* mti==N+1 means mt[N] is not initialized */
dbenv->mti = N + 1;
}
- for (i = 0; i < n; i++)
-{
+ for (i = 0; i < n; i++) {
/*
* We do not allow 0. If we get one just try again.
*/
do {
iv[i] = (u_int32_t)__db_genrand(dbenv);
} while (iv[i] == 0);
-}
+ }
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->mt_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_mt);
return (0);
}
/* Initializing the array with a seed */
static void
__db_sgenrand(seed, mt, mtip)
- unsigned long seed;
+ unsigned long seed;
unsigned long mt[];
int *mtip;
{
int i;
- DB_ASSERT(seed != 0);
+ DB_ASSERT(NULL, seed != 0);
for (i=0;i<N;i++) {
mt[i] = seed & 0xffff0000;
seed = 69069 * seed + 1;
@@ -116,28 +115,28 @@ __db_sgenrand(seed, mt, mtip)
/* This function allows to choose any of 2^19937-1 ones. */
/* Essential bits in "seed_array[]" is following 19937 bits: */
/* (seed_array[0]&UPPER_MASK), seed_array[1], ..., seed_array[N-1]. */
-/* (seed_array[0]&LOWER_MASK) is discarded. */
+/* (seed_array[0]&LOWER_MASK) is discarded. */
/* Theoretically, */
/* (seed_array[0]&UPPER_MASK), seed_array[1], ..., seed_array[N-1] */
/* can take any values except all zeros. */
static void
__db_lsgenrand(seed_array, mt, mtip)
- unsigned long seed_array[];
- unsigned long mt[];
+ unsigned long seed_array[];
+ unsigned long mt[];
int *mtip;
/* the length of seed_array[] must be at least N */
{
int i;
- for (i=0;i<N;i++)
+ for (i=0;i<N;i++)
mt[i] = seed_array[i];
*mtip=N;
}
#endif
-static unsigned long
+static unsigned long
__db_genrand(dbenv)
- DB_ENV *dbenv;
+ DB_ENV *dbenv;
{
unsigned long y;
static unsigned long mag01[2]={0x0, MATRIX_A};
@@ -145,7 +144,7 @@ __db_genrand(dbenv)
u_int32_t secs, seed, usecs;
/*
- * We are called with the mt_mutexp locked
+ * We are called with DB_ENV->mtx_mt locked.
*/
if (dbenv->mti >= N) { /* generate N words at one time */
int kk;
@@ -157,10 +156,10 @@ __db_genrand(dbenv)
*/
do {
__os_clock(dbenv, &secs, &usecs);
- __db_chksum((u_int8_t *)&secs, sizeof(secs), NULL,
+ __db_chksum(NULL, (u_int8_t *)&secs, sizeof(secs), NULL,
(u_int8_t *)&seed);
} while (seed == 0);
- __db_sgenrand((long)seed, dbenv->mt, &dbenv->mti);
+ __db_sgenrand((long)seed, dbenv->mt, &dbenv->mti);
}
for (kk=0;kk<N-M;kk++) {
@@ -176,12 +175,12 @@ __db_genrand(dbenv)
dbenv->mti = 0;
}
-
+
y = dbenv->mt[dbenv->mti++];
y ^= TEMPERING_SHIFT_U(y);
y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B;
y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C;
y ^= TEMPERING_SHIFT_L(y);
- return y;
+ return y;
}
diff --git a/db/crypto/rijndael/rijndael-alg-fst.c b/db/crypto/rijndael/rijndael-alg-fst.c
index 4a251606d..f37b953ac 100644
--- a/db/crypto/rijndael/rijndael-alg-fst.c
+++ b/db/crypto/rijndael/rijndael-alg-fst.c
@@ -1350,7 +1350,7 @@ __db_rijndaelEncryptRound(rk, Nr, pt, ct)
(Te4[(s1 >> 8) & 0xff] & 0x0000ff00) ^
(Te4[(s2 ) & 0xff] & 0x000000ff) ^
rk[3];
-
+
s0 = t0;
s1 = t1;
s2 = t2;
diff --git a/db/crypto/rijndael/rijndael-alg-fst.h b/db/crypto/rijndael/rijndael-alg-fst.h
index fe9ce3814..2b9d6a03c 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 12.1 2006/09/08 20:32:03 bostic Exp $
*/
/**
* rijndael-alg-fst.h
@@ -33,8 +33,8 @@
#define MAXKB (256/8)
#define MAXNR 14
-typedef u_int8_t u8;
-typedef u_int16_t u16;
+typedef u_int8_t u8;
+typedef u_int16_t u16;
typedef u_int32_t u32;
#endif /* __RIJNDAEL_ALG_FST_H */
diff --git a/db/crypto/rijndael/rijndael-api-fst.c b/db/crypto/rijndael/rijndael-api-fst.c
index 09475370f..e570de810 100644
--- a/db/crypto/rijndael/rijndael-api-fst.c
+++ b/db/crypto/rijndael/rijndael-api-fst.c
@@ -34,13 +34,8 @@
* Markus Friedl <markus.friedl@informatik.uni-erlangen.de>
* John Skodon <skodonj@webquill.com>
*/
-
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
@@ -60,7 +55,7 @@ __db_makeKey(key, direction, keyLen, keyMaterial)
char *keyMaterial;
{
u8 cipherKey[MAXKB];
-
+
if (key == NULL) {
return BAD_KEY_INSTANCE;
}
@@ -140,7 +135,7 @@ __db_blockEncrypt(cipher, key, input, inputLen, outBuffer)
}
numBlocks = (int)(inputLen/128);
-
+
switch (cipher->mode) {
case MODE_ECB:
for (i = numBlocks; i > 0; i--) {
@@ -149,7 +144,7 @@ __db_blockEncrypt(cipher, key, input, inputLen, outBuffer)
outBuffer += 16;
}
break;
-
+
case MODE_CBC:
iv = cipher->IV;
for (i = numBlocks; i > 0; i--) {
@@ -185,7 +180,7 @@ __db_blockEncrypt(cipher, key, input, inputLen, outBuffer)
default:
return BAD_CIPHER_STATE;
}
-
+
return 128*numBlocks;
}
@@ -235,7 +230,7 @@ __db_padEncrypt(cipher, key, input, inputOctets, outBuffer)
outBuffer += 16;
}
padLen = 16 - (inputOctets - 16*numBlocks);
- DB_ASSERT(padLen > 0 && padLen <= 16);
+ DB_ASSERT(NULL, padLen > 0 && padLen <= 16);
memcpy(block, input, 16 - padLen);
memset(block + 16 - padLen, padLen, padLen);
__db_rijndaelEncrypt(key->rk, key->Nr, block, outBuffer);
@@ -255,7 +250,7 @@ __db_padEncrypt(cipher, key, input, inputOctets, outBuffer)
outBuffer += 16;
}
padLen = 16 - (inputOctets - 16*numBlocks);
- DB_ASSERT(padLen > 0 && padLen <= 16);
+ DB_ASSERT(NULL, padLen > 0 && padLen <= 16);
for (i = 0; i < 16 - padLen; i++) {
block[i] = input[i] ^ iv[i];
}
@@ -309,7 +304,7 @@ __db_blockDecrypt(cipher, key, input, inputLen, outBuffer)
outBuffer += 16;
}
break;
-
+
case MODE_CBC:
memcpy(tmpiv, cipher->IV, MAX_IV_SIZE);
for (i = numBlocks; i > 0; i--) {
@@ -345,7 +340,7 @@ __db_blockDecrypt(cipher, key, input, inputLen, outBuffer)
default:
return BAD_CIPHER_STATE;
}
-
+
return 128*numBlocks;
}
@@ -402,7 +397,7 @@ __db_padDecrypt(cipher, key, input, inputOctets, outBuffer)
}
memcpy(outBuffer, block, 16 - padLen);
break;
-
+
case MODE_CBC:
/* all blocks but last */
memcpy(tmpiv, cipher->IV, MAX_IV_SIZE);
@@ -434,11 +429,11 @@ __db_padDecrypt(cipher, key, input, inputOctets, outBuffer)
}
memcpy(outBuffer, block, 16 - padLen);
break;
-
+
default:
return BAD_CIPHER_STATE;
}
-
+
return 16*numBlocks - padLen;
}
@@ -447,7 +442,7 @@ __db_padDecrypt(cipher, key, input, inputOctets, outBuffer)
* cipherUpdateRounds:
*
* Encrypts/Decrypts exactly one full block a specified number of rounds.
- * Only used in the Intermediate Value Known Answer Test.
+ * Only used in the Intermediate Value Known Answer Test.
*
* Returns:
* TRUE - on success
@@ -480,17 +475,17 @@ __db_cipherUpdateRounds(cipher, key, input, inputLen, outBuffer, rounds)
case DIR_ENCRYPT:
__db_rijndaelEncryptRound(key->rk, key->Nr, block, rounds);
break;
-
+
case DIR_DECRYPT:
__db_rijndaelDecryptRound(key->rk, key->Nr, block, rounds);
break;
-
+
default:
return BAD_KEY_DIR;
- }
+ }
memcpy(outBuffer, block, 16);
-
+
return TRUE;
}
#endif /* INTERMEDIATE_VALUE_KAT */
diff --git a/db/crypto/rijndael/rijndael-api-fst.h b/db/crypto/rijndael/rijndael-api-fst.h
index 4137aa25e..caf0abc4a 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.5 2003/03/17 19:42:18 bostic Exp $
+ * $Id: rijndael-api-fst.h,v 12.0 2004/11/17 03:43:17 bostic Exp $
*/
/**
* rijndael-api-fst.h
diff --git a/db/cxx/cxx_db.cpp b/db/cxx/cxx_db.cpp
index 22f1b135d..0ecc2fe5e 100644
--- a/db/cxx/cxx_db.cpp
+++ b/db/cxx/cxx_db.cpp
@@ -1,21 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_db.cpp,v 11.87 2004/07/15 18:26:48 ubell Exp $
+ * $Id: cxx_db.cpp,v 12.13 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc_auto/db_auto.h"
#include "dbinc_auto/crdel_auto.h"
@@ -51,8 +49,8 @@ int Db::_name _argspec \
DB_ERROR(env_, "Db::" # _name, EINVAL, error_policy()); \
return (EINVAL); \
} \
- cleanup(); \
ret = db->_name _arglist; \
+ cleanup(); \
if (!_retok(ret)) \
DB_ERROR(env_, "Db::" # _name, ret, error_policy()); \
return (ret); \
@@ -121,8 +119,8 @@ Db::~Db()
db = unwrap(this);
if (db != NULL) {
- cleanup();
(void)db->close(db, 0);
+ cleanup();
}
}
@@ -165,16 +163,11 @@ int Db::initialize()
}
// private method to cleanup after destructor or during close.
-// If the environment was created by this Db object, we optionally
-// delete it, or return it so the caller can delete it after
-// last use.
+// If the environment was created by this Db object, we need to delete it.
//
void Db::cleanup()
{
- DB *db = unwrap(this);
-
- if (db != NULL) {
- // extra safety
+ if (imp_ != 0) {
imp_ = 0;
// we must dispose of the DbEnv object if
@@ -219,6 +212,9 @@ int Db::error_policy()
}
DB_DESTRUCTOR(close, (u_int32_t flags), (db, flags), DB_RETOK_STD)
+DB_METHOD(compact, (DbTxn *txnid, Dbt *start, Dbt *stop,
+ DB_COMPACT *c_data, u_int32_t flags, Dbt *end),
+ (db, unwrap(txnid), start, stop, c_data, flags, end), DB_RETOK_STD)
// The following cast implies that Dbc can be no larger than DBC
DB_METHOD(cursor, (DbTxn *txnid, Dbc **cursorp, u_int32_t flags),
@@ -233,14 +229,14 @@ void Db::err(int error, const char *format, ...)
{
DB *db = unwrap(this);
- DB_REAL_ERR(db->dbenv, error, 1, 1, format);
+ DB_REAL_ERR(db->dbenv, error, DB_ERROR_SET, 1, format);
}
void Db::errx(const char *format, ...)
{
DB *db = unwrap(this);
- DB_REAL_ERR(db->dbenv, 0, 0, 1, format);
+ DB_REAL_ERR(db->dbenv, 0, DB_ERROR_NOT_SET, 1, format);
}
DB_METHOD(fd, (int *fdp), (db, fdp), DB_RETOK_STD)
@@ -331,7 +327,7 @@ 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))
+ if (ret == DB_BUFFER_SMALL && DB_OVERFLOWED_DBT(value))
DB_ERROR_DBT(env_, "Db::pget", value, error_policy());
else
DB_ERROR(env_, "Db::pget", ret, error_policy());
@@ -405,10 +401,11 @@ extern "C" _rettype _db_##_name##_intercept_c _cargspec \
{ \
Db *cxxthis; \
\
- DB_ASSERT(cthis != NULL); \
+ /* We don't have a dbenv handle at this point. */ \
+ DB_ASSERT(NULL, cthis != NULL); \
cxxthis = Db::get_Db(cthis); \
- DB_ASSERT(cxxthis != NULL); \
- DB_ASSERT(cxxthis->_name##_callback_ != 0); \
+ DB_ASSERT(cthis->dbenv, cxxthis != NULL); \
+ DB_ASSERT(cthis->dbenv, cxxthis->_name##_callback_ != 0); \
\
_return (*cxxthis->_name##_callback_) _cxxargs; \
}
@@ -518,14 +515,13 @@ int Db::verify(const char *name, const char *subdb,
if (!db)
ret = EINVAL;
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);
+
+ // After a DB->verify (no matter if success or failure),
+ // the underlying DB object must not be accessed.
+ //
+ cleanup();
}
if (!DB_RETOK_STD(ret))
@@ -536,8 +532,6 @@ int Db::verify(const char *name, const char *subdb,
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),
diff --git a/db/cxx/cxx_dbc.cpp b/db/cxx/cxx_dbc.cpp
index 0ca59735f..4ab337c54 100644
--- a/db/cxx/cxx_dbc.cpp
+++ b/db/cxx/cxx_dbc.cpp
@@ -1,21 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_dbc.cpp,v 11.59 2004/01/28 03:35:56 bostic Exp $
+ * $Id: cxx_dbc.cpp,v 12.5 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc_auto/db_auto.h"
#include "dbinc_auto/crdel_auto.h"
@@ -80,10 +78,10 @@ int Dbc::get(Dbt* key, Dbt *data, u_int32_t _flags)
ret = dbc->c_get(dbc, key, data, _flags);
if (!DB_RETOK_DBCGET(ret)) {
- if (ret == ENOMEM && DB_OVERFLOWED_DBT(key))
+ if (ret == DB_BUFFER_SMALL && DB_OVERFLOWED_DBT(key))
DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
"Dbc::get", key, ON_ERROR_UNKNOWN);
- else if (ret == ENOMEM && DB_OVERFLOWED_DBT(data))
+ else if (ret == DB_BUFFER_SMALL && DB_OVERFLOWED_DBT(data))
DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
"Dbc::get", data, ON_ERROR_UNKNOWN);
else
@@ -103,10 +101,10 @@ 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))
+ if (ret == DB_BUFFER_SMALL && DB_OVERFLOWED_DBT(key))
DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
"Dbc::pget", key, ON_ERROR_UNKNOWN);
- else if (ret == ENOMEM && DB_OVERFLOWED_DBT(data))
+ else if (ret == DB_BUFFER_SMALL && DB_OVERFLOWED_DBT(data))
DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
"Dbc::pget", data, ON_ERROR_UNKNOWN);
else
diff --git a/db/cxx/cxx_dbt.cpp b/db/cxx/cxx_dbt.cpp
index ab8942495..cb203e18d 100644
--- a/db/cxx/cxx_dbt.cpp
+++ b/db/cxx/cxx_dbt.cpp
@@ -1,21 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_dbt.cpp,v 11.55 2004/01/28 03:35:56 bostic Exp $
+ * $Id: cxx_dbt.cpp,v 12.4 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc_auto/db_auto.h"
#include "dbinc_auto/crdel_auto.h"
diff --git a/db/cxx/cxx_env.cpp b/db/cxx/cxx_env.cpp
index 92067ab1f..ef6dd5678 100644
--- a/db/cxx/cxx_env.cpp
+++ b/db/cxx/cxx_env.cpp
@@ -1,23 +1,24 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_env.cpp,v 11.105 2004/09/22 22:20:31 mjc Exp $
+ * $Id: cxx_env.cpp,v 12.32 2006/09/13 14:53:36 mjc Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <stdio.h> // needed for set_error_stream
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
#include "dbinc_auto/common_ext.h"
+#include "dbinc_auto/log_ext.h"
#ifdef HAVE_CXX_STDHEADERS
using std::cerr;
@@ -90,8 +91,14 @@ void _paniccall_intercept_c(DB_ENV *env, int errval)
}
extern "C"
+void _event_func_intercept_c(DB_ENV *env, u_int32_t event, void *event_info)
+{
+ DbEnv::_event_func_intercept(env, event, event_info);
+}
+
+extern "C"
void _stream_error_function_c(const DB_ENV *env,
- const char *prefix, const char *message)
+ const char *prefix, const char *message)
{
DbEnv::_stream_error_function(env, prefix, message);
}
@@ -103,21 +110,39 @@ void _stream_message_function_c(const DB_ENV *env, const char *message)
}
extern "C"
-int _app_dispatch_intercept_c(DB_ENV *env, DBT *dbt,
- DB_LSN *lsn, db_recops op)
+int _app_dispatch_intercept_c(DB_ENV *env, DBT *dbt, DB_LSN *lsn, db_recops op)
{
return (DbEnv::_app_dispatch_intercept(env, dbt, lsn, op));
}
extern "C"
-int _rep_send_intercept_c(DB_ENV *env, const DBT *cntrl,
- const DBT *data, const DB_LSN *lsn, int id,
- u_int32_t flags)
+int _rep_send_intercept_c(DB_ENV *env, const DBT *cntrl, const DBT *data,
+ const DB_LSN *lsn, int id, u_int32_t flags)
{
return (DbEnv::_rep_send_intercept(env,
cntrl, data, lsn, id, flags));
}
+extern "C"
+int _isalive_intercept_c(
+ DB_ENV *env, pid_t pid, db_threadid_t thrid, u_int32_t flags)
+{
+ return (DbEnv::_isalive_intercept(env, pid, thrid, flags));
+}
+
+extern "C"
+void _thread_id_intercept_c(DB_ENV *env, pid_t *pidp, db_threadid_t *thridp)
+{
+ DbEnv::_thread_id_intercept(env, pidp, thridp);
+}
+
+extern "C"
+char *_thread_id_string_intercept_c(DB_ENV *env, pid_t pid,
+ db_threadid_t thrid, char *buf)
+{
+ return (DbEnv::_thread_id_string_intercept(env, pid, thrid, buf));
+}
+
void DbEnv::_feedback_intercept(DB_ENV *env, int opcode, int pct)
{
DbEnv *cxxenv = DbEnv::get_DbEnv(env);
@@ -150,8 +175,25 @@ void DbEnv::_paniccall_intercept(DB_ENV *env, int errval)
(*cxxenv->paniccall_callback_)(cxxenv, errval);
}
-int DbEnv::_app_dispatch_intercept(DB_ENV *env, DBT *dbt,
- DB_LSN *lsn, db_recops op)
+void DbEnv::_event_func_intercept(
+ DB_ENV *env, u_int32_t event, void *event_info)
+{
+ DbEnv *cxxenv = DbEnv::get_DbEnv(env);
+ if (cxxenv == 0) {
+ DB_ERROR(0,
+ "DbEnv::event_func_callback", EINVAL, ON_ERROR_UNKNOWN);
+ return;
+ }
+ if (cxxenv->event_func_callback_ == 0) {
+ DB_ERROR(cxxenv, "DbEnv::event_func_callback", EINVAL,
+ cxxenv->error_policy());
+ return;
+ }
+ (*cxxenv->event_func_callback_)(cxxenv, event, event_info);
+}
+
+int DbEnv::_app_dispatch_intercept(DB_ENV *env, DBT *dbt, DB_LSN *lsn,
+ db_recops op)
{
DbEnv *cxxenv = DbEnv::get_DbEnv(env);
if (cxxenv == 0) {
@@ -170,9 +212,20 @@ int DbEnv::_app_dispatch_intercept(DB_ENV *env, DBT *dbt,
return ((*cxxenv->app_dispatch_callback_)(cxxenv, cxxdbt, cxxlsn, op));
}
-int DbEnv::_rep_send_intercept(DB_ENV *env, const DBT *cntrl,
- const DBT *data, const DB_LSN *lsn,
- int id, u_int32_t flags)
+int DbEnv::_isalive_intercept(
+ DB_ENV *env, pid_t pid, db_threadid_t thrid, u_int32_t flags)
+{
+ DbEnv *cxxenv = DbEnv::get_DbEnv(env);
+ if (cxxenv == 0) {
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::isalive_callback", EINVAL, ON_ERROR_UNKNOWN);
+ return (0);
+ }
+ return ((*cxxenv->isalive_callback_)(cxxenv, pid, thrid, flags));
+}
+
+int DbEnv::_rep_send_intercept(DB_ENV *env, const DBT *cntrl, const DBT *data,
+ const DB_LSN *lsn, int id, u_int32_t flags)
{
DbEnv *cxxenv = DbEnv::get_DbEnv(env);
if (cxxenv == 0) {
@@ -187,6 +240,30 @@ int DbEnv::_rep_send_intercept(DB_ENV *env, const DBT *cntrl,
cxxcntrl, cxxdata, cxxlsn, id, flags));
}
+void DbEnv::_thread_id_intercept(DB_ENV *env,
+ pid_t *pidp, db_threadid_t *thridp)
+{
+ DbEnv *cxxenv = DbEnv::get_DbEnv(env);
+ if (cxxenv == 0) {
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::thread_id_callback", EINVAL, ON_ERROR_UNKNOWN);
+ } else
+ cxxenv->thread_id_callback_(cxxenv, pidp, thridp);
+}
+
+char *DbEnv::_thread_id_string_intercept(DB_ENV *env,
+ pid_t pid, db_threadid_t thrid, char *buf)
+{
+ DbEnv *cxxenv = DbEnv::get_DbEnv(env);
+ if (cxxenv == 0) {
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::thread_id_string_callback", EINVAL,
+ ON_ERROR_UNKNOWN);
+ return (NULL);
+ }
+ return (cxxenv->thread_id_string_callback_(cxxenv, pid, thrid, buf));
+}
+
// A truism for the DbEnv object is that there is a valid
// DB_ENV handle from the constructor until close().
// After the close, the DB_ENV handle is invalid and
@@ -208,8 +285,7 @@ DbEnv::DbEnv(u_int32_t flags)
, app_dispatch_callback_(0)
, feedback_callback_(0)
, paniccall_callback_(0)
-, pgin_callback_(0)
-, pgout_callback_(0)
+, event_func_callback_(0)
, rep_send_callback_(0)
{
if ((construct_error_ = initialize(0)) != 0)
@@ -226,8 +302,7 @@ DbEnv::DbEnv(DB_ENV *env, u_int32_t flags)
, app_dispatch_callback_(0)
, feedback_callback_(0)
, paniccall_callback_(0)
-, pgin_callback_(0)
-, pgout_callback_(0)
+, event_func_callback_(0)
, rep_send_callback_(0)
{
if ((construct_error_ = initialize(env)) != 0)
@@ -247,20 +322,15 @@ DbEnv::~DbEnv()
DB_ENV *env = unwrap(this);
if (env != NULL) {
- cleanup();
(void)env->close(env, 0);
+ cleanup();
}
}
// called by destructors before the DB_ENV is destroyed.
void DbEnv::cleanup()
{
- DB_ENV *env = unwrap(this);
-
- if (env != NULL) {
- env->api1_internal = 0;
- imp_ = 0;
- }
+ imp_ = 0;
}
int DbEnv::close(u_int32_t flags)
@@ -268,17 +338,17 @@ int DbEnv::close(u_int32_t flags)
int ret;
DB_ENV *env = unwrap(this);
+ ret = env->close(env, flags);
+
// after a close (no matter if success or failure),
- // the underlying DB_ENV object must not be accessed,
- // so we clean up in advance.
- //
+ // the underlying DB_ENV object must not be accessed.
cleanup();
// It's safe to throw an error after the close,
// since our error mechanism does not peer into
// the DB* structures.
//
- if ((ret = env->close(env, flags)) != 0)
+ if (ret != 0)
DB_ERROR(this, "DbEnv::close", ret, error_policy());
return (ret);
@@ -295,7 +365,7 @@ void DbEnv::err(int error, const char *format, ...)
{
DB_ENV *env = unwrap(this);
- DB_REAL_ERR(env, error, 1, 1, format);
+ DB_REAL_ERR(env, error, DB_ERROR_SET, 1, format);
}
// Return a tristate value corresponding to whether we should
@@ -318,7 +388,7 @@ void DbEnv::errx(const char *format, ...)
{
DB_ENV *env = unwrap(this);
- DB_REAL_ERR(env, 0, 0, 1, format);
+ DB_REAL_ERR(env, 0, DB_ERROR_NOT_SET, 1, format);
}
void *DbEnv::get_app_private() const
@@ -326,10 +396,20 @@ void *DbEnv::get_app_private() const
return unwrapConst(this)->app_private;
}
+DBENV_METHOD(failchk, (u_int32_t flags), (dbenv, flags))
+DBENV_METHOD(fileid_reset, (const char *file, u_int32_t flags),
+ (dbenv, file, flags))
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))
+bool DbEnv::is_bigendian()
+{
+ return unwrap(this)->is_bigendian() ? true : false;
+}
+
+DBENV_METHOD(set_thread_count, (u_int32_t count), (dbenv, count))
+
// used internally during constructor
// to associate an existing DB_ENV with this DbEnv,
// or create a new one.
@@ -392,10 +472,27 @@ DBENV_METHOD(log_file, (DbLsn *lsn, char *namep, size_t len),
DBENV_METHOD(log_flush, (const DbLsn *lsn), (dbenv, lsn))
DBENV_METHOD(log_put, (DbLsn *lsn, const Dbt *data, u_int32_t flags),
(dbenv, lsn, data, flags))
+
+int DbEnv::log_printf(DbTxn *txn, const char *fmt, ...)
+{
+ DB_ENV *env = unwrap(this);
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = __log_printf_pp(env, unwrap(txn), fmt, ap);
+ va_end(ap);
+
+ return (ret);
+}
+
DBENV_METHOD(log_stat, (DB_LOG_STAT **spp, u_int32_t flags),
(dbenv, spp, flags))
DBENV_METHOD(log_stat_print, (u_int32_t flags), (dbenv, flags))
+DBENV_METHOD(lsn_reset, (const char *file, u_int32_t flags),
+ (dbenv, file, flags))
+
int DbEnv::memp_fcreate(DbMpoolFile **dbmfp, u_int32_t flags)
{
DB_ENV *env = unwrap(this);
@@ -452,13 +549,15 @@ int DbEnv::remove(const char *db_home, u_int32_t flags)
int ret;
DB_ENV *env = unwrap(this);
+ ret = env->remove(env, db_home, flags);
+
// after a remove (no matter if success or failure),
// the underlying DB_ENV object must not be accessed,
// so we clean up in advance.
//
cleanup();
- if ((ret = env->remove(env, db_home, flags)) != 0)
+ if (ret != 0)
DB_ERROR(this, "DbEnv::remove", ret, error_policy());
return (ret);
@@ -485,28 +584,30 @@ void DbEnv::runtime_error(DbEnv *env,
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;
+ case DB_REP_HANDLE_DEAD:
+ {
+ DbRepHandleDeadException hd_except(caller);
+ hd_except.set_env(env);
+ throw hd_except;
+ }
+ case DB_RUNRECOVERY:
+ {
+ DbRunRecoveryException rr_except(caller);
+ rr_except.set_env(env);
+ throw rr_except;
+ }
default:
{
DbException except(caller, error);
except.set_env(env);
throw except;
}
- break;
}
}
}
@@ -612,10 +713,14 @@ 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))
+DBENV_METHOD(set_intermediate_dir, (int mode, u_int32_t flags),
+ (dbenv, mode, 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_filemode, (int *modep), (dbenv, modep))
+DBENV_METHOD(set_lg_filemode, (int mode), (dbenv, mode))
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))
@@ -626,7 +731,6 @@ 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))
@@ -635,6 +739,12 @@ 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_max_openfd, (int *maxopenfdp), (dbenv, maxopenfdp))
+DBENV_METHOD(set_mp_max_openfd, (int maxopenfd), (dbenv, maxopenfd))
+DBENV_METHOD(get_mp_max_write, (int *maxwritep, int *maxwrite_sleepp),
+ (dbenv, maxwritep, maxwrite_sleepp))
+DBENV_METHOD(set_mp_max_write, (int maxwrite, int maxwrite_sleep),
+ (dbenv, maxwrite, maxwrite_sleep))
DBENV_METHOD(get_mp_mmapsize, (size_t *mmapsizep), (dbenv, mmapsizep))
DBENV_METHOD(set_mp_mmapsize, (size_t mmapsize), (dbenv, mmapsize))
DBENV_METHOD_VOID(get_msgfile, (FILE **msgfilep), (dbenv, msgfilep))
@@ -644,6 +754,8 @@ 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(stat_print, (u_int32_t flags), (dbenv, flags))
+
DBENV_METHOD_QUIET(set_alloc,
(db_malloc_fcn_type malloc_fcn, db_realloc_fcn_type realloc_fcn,
db_free_fcn_type free_fcn),
@@ -694,7 +806,8 @@ int DbEnv::set_feedback(void (*arg)(DbEnv *, int, int))
feedback_callback_ = arg;
- return (dbenv->set_feedback(dbenv, _feedback_intercept_c));
+ return (dbenv->set_feedback(dbenv,
+ arg == 0 ? 0 : _feedback_intercept_c));
}
DBENV_METHOD(get_flags, (u_int32_t *flagsp), (dbenv, flagsp))
@@ -708,7 +821,7 @@ void DbEnv::set_msgcall(void (*arg)(const DbEnv *, const char *))
message_stream_ = 0;
dbenv->set_msgcall(dbenv, (arg == 0) ? 0 :
- _stream_message_function_c);
+ _stream_message_function_c);
}
__DB_STD(ostream) *DbEnv::get_message_stream()
@@ -733,7 +846,18 @@ int DbEnv::set_paniccall(void (*arg)(DbEnv *, int))
paniccall_callback_ = arg;
- return (dbenv->set_paniccall(dbenv, _paniccall_intercept_c));
+ return (dbenv->set_paniccall(dbenv,
+ arg == 0 ? 0 : _paniccall_intercept_c));
+}
+
+int DbEnv::set_event_notify(void (*arg)(DbEnv *, u_int32_t, void *))
+{
+ DB_ENV *dbenv = unwrap(this);
+
+ event_func_callback_ = arg;
+
+ return (dbenv->set_event_notify(dbenv,
+ arg == 0 ? 0 : _event_func_intercept_c));
}
DBENV_METHOD(set_rpc_server,
@@ -741,9 +865,6 @@ DBENV_METHOD(set_rpc_server,
(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
(int (*arg)(DbEnv *, Dbt *, DbLsn *, db_recops))
@@ -753,18 +874,92 @@ int DbEnv::set_app_dispatch
app_dispatch_callback_ = arg;
if ((ret = dbenv->set_app_dispatch(dbenv,
- _app_dispatch_intercept_c)) != 0)
+ arg == 0 ? 0 : _app_dispatch_intercept_c)) != 0)
DB_ERROR(this, "DbEnv::set_app_dispatch", ret, error_policy());
return (ret);
}
+int DbEnv::set_isalive
+ (int (*arg)(DbEnv *, pid_t, db_threadid_t, u_int32_t))
+{
+ DB_ENV *dbenv = unwrap(this);
+ int ret;
+
+ isalive_callback_ = arg;
+ if ((ret = dbenv->set_isalive(dbenv,
+ arg == 0 ? 0 : _isalive_intercept_c)) != 0)
+ DB_ERROR(this, "DbEnv::set_isalive", 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))
+DBENV_METHOD(mutex_alloc,
+ (u_int32_t flags, db_mutex_t *mutexp), (dbenv, flags, mutexp))
+DBENV_METHOD(mutex_free, (db_mutex_t mutex), (dbenv, mutex))
+DBENV_METHOD(mutex_get_align, (u_int32_t *argp), (dbenv, argp))
+DBENV_METHOD(mutex_get_increment, (u_int32_t *argp), (dbenv, argp))
+DBENV_METHOD(mutex_get_max, (u_int32_t *argp), (dbenv, argp))
+DBENV_METHOD(mutex_get_tas_spins, (u_int32_t *argp), (dbenv, argp))
+DBENV_METHOD(mutex_lock, (db_mutex_t mutex), (dbenv, mutex))
+DBENV_METHOD(mutex_set_align, (u_int32_t arg), (dbenv, arg))
+DBENV_METHOD(mutex_set_increment, (u_int32_t arg), (dbenv, arg))
+DBENV_METHOD(mutex_set_max, (u_int32_t arg), (dbenv, arg))
+DBENV_METHOD(mutex_set_tas_spins, (u_int32_t arg), (dbenv, arg))
+DBENV_METHOD(mutex_stat,
+ (DB_MUTEX_STAT **statp, u_int32_t flags), (dbenv, statp, flags))
+DBENV_METHOD(mutex_stat_print, (u_int32_t flags), (dbenv, flags))
+DBENV_METHOD(mutex_unlock, (db_mutex_t mutex), (dbenv, mutex))
+
+int DbEnv::set_thread_id(void (*arg)(DbEnv *, pid_t *, db_threadid_t *))
+{
+ DB_ENV *dbenv = unwrap(this);
+ int ret;
+
+ thread_id_callback_ = arg;
+ if ((ret = dbenv->set_thread_id(dbenv,
+ arg == 0 ? 0 : _thread_id_intercept_c)) != 0)
+ DB_ERROR(this, "DbEnv::set_thread_id", ret, error_policy());
+
+ return (ret);
+}
+
+int DbEnv::set_thread_id_string(
+ char *(*arg)(DbEnv *, pid_t, db_threadid_t, char *))
+{
+ DB_ENV *dbenv = unwrap(this);
+ int ret;
+
+ thread_id_string_callback_ = arg;
+ if ((ret = dbenv->set_thread_id_string(dbenv,
+ arg == 0 ? 0 : _thread_id_string_intercept_c)) != 0)
+ DB_ERROR(this, "DbEnv::set_thread_id_string", ret,
+ error_policy());
+
+ return (ret);
+}
+
+int DbEnv::cdsgroup_begin(DbTxn **tid)
+{
+ DB_ENV *env = unwrap(this);
+ DB_TXN *txn;
+ int ret;
+
+ ret = env->cdsgroup_begin(env, &txn);
+ if (DB_RETOK_STD(ret))
+ *tid = new DbTxn(txn);
+ else
+ DB_ERROR(this, "DbEnv::cdsgroup_begin", ret, error_policy());
+
+ return (ret);
+}
+
int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags)
{
DB_ENV *env = unwrap(this);
@@ -830,25 +1025,26 @@ DBENV_METHOD(txn_stat, (DB_TXN_STAT **statp, u_int32_t flags),
(dbenv, statp, flags))
DBENV_METHOD(txn_stat_print, (u_int32_t flags), (dbenv, flags))
-int DbEnv::set_rep_transport(int myid,
- int (*f_send)(DbEnv *, const Dbt *, const Dbt *, const DbLsn *, int,
- u_int32_t))
+int DbEnv::rep_set_transport(int myid, int (*arg)(DbEnv *,
+ const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t))
{
DB_ENV *dbenv = unwrap(this);
int ret;
- rep_send_callback_ = f_send;
- if ((ret = dbenv->set_rep_transport(dbenv,
- myid, _rep_send_intercept_c)) != 0)
- DB_ERROR(this, "DbEnv::set_rep_transport", ret, error_policy());
+ rep_send_callback_ = arg;
+ if ((ret = dbenv->rep_set_transport(dbenv, myid,
+ arg == 0 ? 0 : _rep_send_intercept_c)) != 0)
+ DB_ERROR(this, "DbEnv::rep_set_transport", ret, error_policy());
return (ret);
}
-DBENV_METHOD(rep_elect,
- (int nsites,
- int nvotes, int priority, u_int32_t timeout, int *eidp, u_int32_t flags),
- (dbenv, nvotes, nsites, priority, timeout, eidp, flags))
+DBENV_METHOD(rep_elect, (int nsites, int nvotes, int *eidp, u_int32_t flags),
+ (dbenv, nsites, nvotes, eidp, flags))
+DBENV_METHOD(rep_flush, (), (dbenv))
+DBENV_METHOD(rep_get_config, (u_int32_t which, int *onoffp),
+ (dbenv, which, onoffp))
+DBENV_METHOD(set_rep_request, (u_int32_t min, u_int32_t max), (dbenv, min, max))
int DbEnv::rep_process_message(Dbt *control,
Dbt *rec, int *idp, DbLsn *ret_lsnp)
@@ -864,6 +1060,8 @@ int DbEnv::rep_process_message(Dbt *control,
return (ret);
}
+DBENV_METHOD(rep_set_config,
+ (u_int32_t which, int onoff), (dbenv, which, onoff))
DBENV_METHOD(rep_start,
(Dbt *cookie, u_int32_t flags),
(dbenv, (DBT *)cookie, flags))
@@ -871,12 +1069,38 @@ DBENV_METHOD(rep_start,
DBENV_METHOD(rep_stat, (DB_REP_STAT **statp, u_int32_t flags),
(dbenv, statp, flags))
DBENV_METHOD(rep_stat_print, (u_int32_t flags), (dbenv, flags))
+DBENV_METHOD(rep_sync, (u_int32_t flags), (dbenv, flags))
-DBENV_METHOD(get_rep_limit, (u_int32_t *gbytesp, u_int32_t *bytesp),
+DBENV_METHOD(rep_get_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_METHOD(rep_set_limit, (u_int32_t gbytes, u_int32_t bytes),
(dbenv, gbytes, bytes))
+//
+// Begin advanced replication API method implementations
+DBENV_METHOD(rep_get_nsites, (int *n), (dbenv, n))
+DBENV_METHOD(rep_set_nsites, (int n), (dbenv, n))
+DBENV_METHOD(rep_get_priority, (int *priority),
+ (dbenv, priority))
+DBENV_METHOD(rep_set_priority, (int priority),
+ (dbenv, priority))
+DBENV_METHOD(rep_get_timeout, (int which, db_timeout_t * timeout),
+ (dbenv, which, timeout))
+DBENV_METHOD(rep_set_timeout, (int which, db_timeout_t timeout),
+ (dbenv, which, timeout))
+DBENV_METHOD(repmgr_add_remote_site, (const char* host, u_int16_t port,
+ int * eidp, u_int32_t flags), (dbenv, host, port, eidp, flags))
+DBENV_METHOD(repmgr_get_ack_policy, (int *policy), (dbenv, policy))
+DBENV_METHOD(repmgr_set_ack_policy, (int policy), (dbenv, policy))
+DBENV_METHOD(repmgr_set_local_site, (const char* host, u_int16_t port,
+ u_int32_t flags), (dbenv, host, port, flags))
+DBENV_METHOD(repmgr_site_list, (u_int *countp, DB_REPMGR_SITE **listp),
+ (dbenv, countp, listp))
+DBENV_METHOD(repmgr_start, (int nthreads, u_int32_t flags),
+ (dbenv, nthreads, flags))
+
+// End advanced replication API method implementations.
+
DBENV_METHOD(get_timeout,
(db_timeout_t *timeoutp, u_int32_t flags),
(dbenv, timeoutp, flags))
diff --git a/db/cxx/cxx_except.cpp b/db/cxx/cxx_except.cpp
index 22eb0eae9..3a58f6bec 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_except.cpp,v 11.28 2004/09/22 03:34:48 bostic Exp $
+ * $Id: cxx_except.cpp,v 12.10 2006/09/13 14:53:37 mjc Exp $
*/
#include "db_config.h"
-#include <string.h>
-#include <errno.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
+static const int MAX_DESCRIPTION_LENGTH = 1024;
+
// 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).
@@ -85,10 +86,11 @@ DbException &DbException::operator = (const DbException &that)
void DbException::describe(const char *prefix, const char *description)
{
- char msgbuf[1024], *p, *end;
+ char *msgbuf, *p, *end;
+ msgbuf = new char[MAX_DESCRIPTION_LENGTH];
p = msgbuf;
- end = msgbuf + sizeof(msgbuf) - 1;
+ end = msgbuf + MAX_DESCRIPTION_LENGTH - 1;
if (prefix != NULL) {
strncpy(p, prefix, (p < end) ? end - p: 0);
@@ -117,6 +119,7 @@ void DbException::describe(const char *prefix, const char *description)
*end = '\0';
what_ = dupString(msgbuf);
+ delete [] msgbuf;
}
int DbException::get_errno() const
@@ -151,13 +154,13 @@ DbMemoryException::~DbMemoryException() throw()
}
DbMemoryException::DbMemoryException(Dbt *dbt)
-: DbException(memory_err_desc, ENOMEM)
+: DbException(memory_err_desc, DB_BUFFER_SMALL)
, dbt_(dbt)
{
}
DbMemoryException::DbMemoryException(const char *prefix, Dbt *dbt)
-: DbException(prefix, memory_err_desc, ENOMEM)
+: DbException(prefix, memory_err_desc, DB_BUFFER_SMALL)
, dbt_(dbt)
{
}
@@ -297,6 +300,35 @@ int DbLockNotGrantedException::get_index() const
////////////////////////////////////////////////////////////////////////
// //
+// DbRepHandleDeadException //
+// //
+////////////////////////////////////////////////////////////////////////
+
+DbRepHandleDeadException::~DbRepHandleDeadException() throw()
+{
+}
+
+DbRepHandleDeadException::DbRepHandleDeadException(const char *description)
+: DbException(description, DB_REP_HANDLE_DEAD)
+{
+}
+
+DbRepHandleDeadException::DbRepHandleDeadException
+ (const DbRepHandleDeadException &that)
+: DbException(that)
+{
+}
+
+DbRepHandleDeadException
+&DbRepHandleDeadException::operator =(const DbRepHandleDeadException &that)
+{
+ if (this != &that)
+ DbException::operator=(that);
+ return (*this);
+}
+
+////////////////////////////////////////////////////////////////////////
+// //
// DbRunRecoveryException //
// //
////////////////////////////////////////////////////////////////////////
diff --git a/db/cxx/cxx_lock.cpp b/db/cxx/cxx_lock.cpp
index d22cf662b..8c5a537a2 100644
--- a/db/cxx/cxx_lock.cpp
+++ b/db/cxx/cxx_lock.cpp
@@ -1,16 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_lock.cpp,v 11.19 2004/01/28 03:35:56 bostic Exp $
+ * $Id: cxx_lock.cpp,v 12.4 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
diff --git a/db/cxx/cxx_logc.cpp b/db/cxx/cxx_logc.cpp
index c5399b531..1e3c4ef70 100644
--- a/db/cxx/cxx_logc.cpp
+++ b/db/cxx/cxx_logc.cpp
@@ -1,21 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_logc.cpp,v 11.13 2004/02/05 02:25:12 mjc Exp $
+ * $Id: cxx_logc.cpp,v 12.4 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc_auto/db_auto.h"
#include "dbinc_auto/crdel_auto.h"
diff --git a/db/cxx/cxx_mpool.cpp b/db/cxx/cxx_mpool.cpp
index 54747b092..1085f0390 100644
--- a/db/cxx/cxx_mpool.cpp
+++ b/db/cxx/cxx_mpool.cpp
@@ -1,21 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_mpool.cpp,v 11.28 2004/01/28 03:35:56 bostic Exp $
+ * $Id: cxx_mpool.cpp,v 12.5 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
+#include "db_int.h"
#include "db_cxx.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
@@ -84,8 +82,9 @@ int DbMpoolFile::close(u_int32_t flags)
return (ret);
}
-DB_MPOOLFILE_METHOD(get, (db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep),
- (mpf, pgnoaddr, flags, pagep), DB_RETOK_MPGET)
+DB_MPOOLFILE_METHOD(get,
+ (db_pgno_t *pgnoaddr, DbTxn *txn, u_int32_t flags, void *pagep),
+ (mpf, pgnoaddr, unwrap(txn), 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)
diff --git a/db/cxx/cxx_multi.cpp b/db/cxx/cxx_multi.cpp
index 0961f2921..a53f09b34 100644
--- a/db/cxx/cxx_multi.cpp
+++ b/db/cxx/cxx_multi.cpp
@@ -1,19 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_multi.cpp,v 1.4 2004/01/28 03:35:56 bostic Exp $
+ * $Id: cxx_multi.cpp,v 12.7 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#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)))
+ p_((u_int32_t*)(data_ + dbt.get_ulen() - sizeof(u_int32_t)))
{
}
@@ -29,7 +31,7 @@ bool DbMultipleDataIterator::next(Dbt &data)
if (data.get_size() == 0 && data.get_data() == data_)
data.set_data(0);
}
- return (data.get_data() != 0);
+ return (p_ != 0);
}
bool DbMultipleKeyDataIterator::next(Dbt &key, Dbt &data)
@@ -46,7 +48,7 @@ bool DbMultipleKeyDataIterator::next(Dbt &key, Dbt &data)
data.set_data(data_ + *p_--);
data.set_size(*p_--);
}
- return (data.get_data() != 0);
+ return (p_ != 0);
}
bool DbMultipleRecnoDataIterator::next(db_recno_t &recno, Dbt &data)
@@ -61,5 +63,5 @@ bool DbMultipleRecnoDataIterator::next(db_recno_t &recno, Dbt &data)
data.set_data(data_ + *p_--);
data.set_size(*p_--);
}
- return (recno != 0);
+ return (p_ != 0);
}
diff --git a/db/cxx/cxx_seq.cpp b/db/cxx/cxx_seq.cpp
index 60bc7455b..d3a4bd0ad 100644
--- a/db/cxx/cxx_seq.cpp
+++ b/db/cxx/cxx_seq.cpp
@@ -1,22 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_seq.cpp,v 11.3 2004/09/23 20:05:08 mjc Exp $
+ * $Id: cxx_seq.cpp,v 12.6 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
-#include <string.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.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
@@ -90,20 +87,20 @@ DBSEQ_METHOD(get_range, (db_seq_t *minp, db_seq_t *maxp), (seq, minp, maxp), 0)
DBSEQ_METHOD(set_range, (db_seq_t min, db_seq_t max), (seq, min, max), 0)
Db *DbSequence::get_db()
-{
+{
DB_SEQUENCE *seq = unwrap(this);
DB *db;
(void)seq->get_db(seq, &db);
return Db::get_Db(db);
-}
+}
Dbt *DbSequence::get_key()
-{
+{
DB_SEQUENCE *seq = unwrap(this);
memset(&key_, 0, sizeof (DBT));
(void)seq->get_key(seq, &key_);
return Dbt::get_Dbt(&key_);
-}
+}
// static method
DbSequence *DbSequence::wrap_DB_SEQUENCE(DB_SEQUENCE *seq)
diff --git a/db/cxx/cxx_txn.cpp b/db/cxx/cxx_txn.cpp
index 89ad7f02b..6456e3461 100644
--- a/db/cxx/cxx_txn.cpp
+++ b/db/cxx/cxx_txn.cpp
@@ -1,20 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_txn.cpp,v 11.33 2004/09/22 22:20:31 mjc Exp $
+ * $Id: cxx_txn.cpp,v 12.5 2006/08/24 14:45:13 bostic Exp $
*/
#include "db_config.h"
-#include <errno.h>
+#include "db_int.h"
#include "db_cxx.h"
#include "dbinc/cxx_int.h"
-#include "db_int.h"
#include "dbinc/txn.h"
// Helper macro for simple methods that pass through to the
@@ -67,7 +66,9 @@ u_int32_t DbTxn::id()
return (txn->id(txn)); // no error
}
+DBTXN_METHOD(get_name, 0, (const char **namep), (txn, namep))
DBTXN_METHOD(prepare, 0, (u_int8_t *gid), (txn, gid))
+DBTXN_METHOD(set_name, 0, (const char *name), (txn, name))
DBTXN_METHOD(set_timeout, 0, (db_timeout_t timeout, u_int32_t flags),
(txn, timeout, flags))
diff --git a/db/db/crdel.src b/db/db/crdel.src
index 034e7b82f..1992dd152 100644
--- a/db/db/crdel.src
+++ b/db/db/crdel.src
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: crdel.src,v 11.29 2004/06/17 17:35:15 bostic Exp $
+ * $Id: crdel.src,v 12.6 2006/08/24 14:45:15 bostic Exp $
*/
PREFIX __crdel
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
@@ -34,10 +27,47 @@ INCLUDE
* page: the actual meta-data page
* lsn: lsn of the page.
*/
-BEGIN metasub 142
+BEGIN metasub 42 142
DB fileid int32_t ld
ARG pgno db_pgno_t lu
PGDBT page DBT s
POINTER lsn DB_LSN * lu
END
+/*
+ * Inmem_create: Log the creation of an in-memory database.
+ *
+ * name: Name of the database
+ * fid: File id of the database
+ */
+BEGIN inmem_create 44 138
+ARG fileid int32_t ld
+DBT name DBT s
+DBT fid DBT s
+ARG pgsize u_int32_t lu
+END
+
+/*
+ * Inmem_rename: Log the renaming of an in-memory only database.
+ *
+ * oldname: database's starting name
+ * newname: database's ending name
+ * fid: fileid
+ */
+BEGIN inmem_rename 44 139
+DBT oldname DBT s
+DBT newname DBT s
+DBT fid DBT s
+END
+
+/*
+ * Inmem_remove: Log the removal of an in-memory only database.
+ *
+ * name: database's ending name
+ * fid: fileid
+ */
+BEGIN inmem_remove 44 140
+DBT name DBT s
+DBT fid DBT s
+END
+
diff --git a/db/db/crdel_auto.c b/db/db/crdel_auto.c
index 48823dde6..ab7f528a9 100644
--- a/db/db/crdel_auto.c
+++ b/db/db/crdel_auto.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -22,9 +15,9 @@
* PUBLIC: u_int32_t, db_pgno_t, const DBT *, DB_LSN *));
*/
int
-__crdel_metasub_log(dbp, txnid, ret_lsnp, flags, pgno, page, lsn)
+__crdel_metasub_log(dbp, txnp, ret_lsnp, flags, pgno, page, lsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -51,30 +44,31 @@ __crdel_metasub_log(dbp, txnid, ret_lsnp, flags, pgno, page, lsn)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -90,7 +84,7 @@ __crdel_metasub_log(dbp, txnid, ret_lsnp, flags, pgno, page, lsn)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -141,18 +135,25 @@ __crdel_metasub_log(dbp, txnid, ret_lsnp, flags, pgno, page, lsn)
bp += page->size;
}
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -171,20 +172,21 @@ __crdel_metasub_log(dbp, txnid, ret_lsnp, flags, pgno, page, lsn)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__crdel_metasub_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -209,13 +211,14 @@ __crdel_metasub_read(dbenv, recbuf, argpp)
sizeof(__crdel_metasub_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -242,6 +245,680 @@ __crdel_metasub_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __crdel_inmem_create_log __P((DB_ENV *, DB_TXN *,
+ * PUBLIC: DB_LSN *, u_int32_t, int32_t, const DBT *, const DBT *,
+ * PUBLIC: u_int32_t));
+ */
+int
+__crdel_inmem_create_log(dbenv, txnp, ret_lsnp, flags,
+ fileid, name, fid, pgsize)
+ DB_ENV *dbenv;
+ DB_TXN *txnp;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ int32_t fileid;
+ const DBT *name;
+ const DBT *fid;
+ u_int32_t pgsize;
+{
+ DBT logrec;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn, *rlsnp;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ COMPQUIET(lr, NULL);
+
+ rectype = DB___crdel_inmem_create;
+ npad = 0;
+ rlsnp = ret_lsnp;
+
+ ret = 0;
+
+ if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
+ return (0);
+ is_durable = 0;
+ } else
+ is_durable = 1;
+
+ if (txnp == NULL) {
+ txn_num = 0;
+ lsnp = &null_lsn;
+ null_lsn.file = null_lsn.offset = 0;
+ } else {
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
+ return (ret);
+ /*
+ * We need to assign begin_lsn while holding region mutex.
+ * That assignment is done inside the DbEnv->log_put call,
+ * so pass in the appropriate memory location to be filled
+ * in by the log_put code.
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
+ + sizeof(u_int32_t) + (fid == NULL ? 0 : fid->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 || txnp == NULL) {
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+ __os_free(dbenv, lr);
+ return (ret);
+ }
+#else
+ logrec.data = lr->data;
+#endif
+ }
+ 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)fileid;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ 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 (fid == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &fid->size, sizeof(fid->size));
+ bp += sizeof(fid->size);
+ memcpy(bp, fid->data, fid->size);
+ bp += fid->size;
+ }
+
+ uinttmp = (u_int32_t)pgsize;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+ if (is_durable || txnp == NULL) {
+ if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
+ if (rlsnp != ret_lsnp)
+ *ret_lsnp = *rlsnp;
+ }
+ } else {
+#ifdef DIAGNOSTIC
+ /*
+ * 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));
+
+ ret = __log_put(dbenv,
+ rlsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+#else
+ ret = 0;
+#endif
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
+ LSN_NOT_LOGGED(*ret_lsnp);
+ }
+
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__crdel_inmem_create_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
+#endif
+
+#ifdef DIAGNOSTIC
+ __os_free(dbenv, logrec.data);
+#else
+ if (is_durable || txnp == NULL)
+ __os_free(dbenv, logrec.data);
+#endif
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_create_read __P((DB_ENV *, void *,
+ * PUBLIC: __crdel_inmem_create_args **));
+ */
+int
+__crdel_inmem_create_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __crdel_inmem_create_args **argpp;
+{
+ __crdel_inmem_create_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__crdel_inmem_create_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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);
+
+ 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->fid, 0, sizeof(argp->fid));
+ memcpy(&argp->fid.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->fid.data = bp;
+ bp += argp->fid.size;
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgsize = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_rename_log __P((DB_ENV *, DB_TXN *,
+ * PUBLIC: DB_LSN *, u_int32_t, const DBT *, const DBT *, const DBT *));
+ */
+int
+__crdel_inmem_rename_log(dbenv, txnp, ret_lsnp, flags,
+ oldname, newname, fid)
+ DB_ENV *dbenv;
+ DB_TXN *txnp;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ const DBT *oldname;
+ const DBT *newname;
+ const DBT *fid;
+{
+ DBT logrec;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn, *rlsnp;
+ u_int32_t zero, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ COMPQUIET(lr, NULL);
+
+ rectype = DB___crdel_inmem_rename;
+ npad = 0;
+ rlsnp = ret_lsnp;
+
+ ret = 0;
+
+ if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
+ return (0);
+ is_durable = 0;
+ } else
+ is_durable = 1;
+
+ if (txnp == NULL) {
+ txn_num = 0;
+ lsnp = &null_lsn;
+ null_lsn.file = null_lsn.offset = 0;
+ } else {
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
+ return (ret);
+ /*
+ * We need to assign begin_lsn while holding region mutex.
+ * That assignment is done inside the DbEnv->log_put call,
+ * so pass in the appropriate memory location to be filled
+ * in by the log_put code.
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t) + (oldname == NULL ? 0 : oldname->size)
+ + sizeof(u_int32_t) + (newname == NULL ? 0 : newname->size)
+ + sizeof(u_int32_t) + (fid == NULL ? 0 : fid->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (is_durable || txnp == NULL) {
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+ __os_free(dbenv, lr);
+ return (ret);
+ }
+#else
+ logrec.data = lr->data;
+#endif
+ }
+ 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 (oldname == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &oldname->size, sizeof(oldname->size));
+ bp += sizeof(oldname->size);
+ memcpy(bp, oldname->data, oldname->size);
+ bp += oldname->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;
+ }
+
+ if (fid == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &fid->size, sizeof(fid->size));
+ bp += sizeof(fid->size);
+ memcpy(bp, fid->data, fid->size);
+ bp += fid->size;
+ }
+
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+ if (is_durable || txnp == NULL) {
+ if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
+ if (rlsnp != ret_lsnp)
+ *ret_lsnp = *rlsnp;
+ }
+ } else {
+#ifdef DIAGNOSTIC
+ /*
+ * 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));
+
+ ret = __log_put(dbenv,
+ rlsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+#else
+ ret = 0;
+#endif
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
+ LSN_NOT_LOGGED(*ret_lsnp);
+ }
+
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__crdel_inmem_rename_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
+#endif
+
+#ifdef DIAGNOSTIC
+ __os_free(dbenv, logrec.data);
+#else
+ if (is_durable || txnp == NULL)
+ __os_free(dbenv, logrec.data);
+#endif
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_rename_read __P((DB_ENV *, void *,
+ * PUBLIC: __crdel_inmem_rename_args **));
+ */
+int
+__crdel_inmem_rename_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __crdel_inmem_rename_args **argpp;
+{
+ __crdel_inmem_rename_args *argp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__crdel_inmem_rename_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ memset(&argp->oldname, 0, sizeof(argp->oldname));
+ memcpy(&argp->oldname.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->oldname.data = bp;
+ bp += argp->oldname.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;
+
+ memset(&argp->fid, 0, sizeof(argp->fid));
+ memcpy(&argp->fid.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->fid.data = bp;
+ bp += argp->fid.size;
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_remove_log __P((DB_ENV *, DB_TXN *,
+ * PUBLIC: DB_LSN *, u_int32_t, const DBT *, const DBT *));
+ */
+int
+__crdel_inmem_remove_log(dbenv, txnp, ret_lsnp, flags,
+ name, fid)
+ DB_ENV *dbenv;
+ DB_TXN *txnp;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ const DBT *name;
+ const DBT *fid;
+{
+ DBT logrec;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn, *rlsnp;
+ u_int32_t zero, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ COMPQUIET(lr, NULL);
+
+ rectype = DB___crdel_inmem_remove;
+ npad = 0;
+ rlsnp = ret_lsnp;
+
+ ret = 0;
+
+ if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
+ return (0);
+ is_durable = 0;
+ } else
+ is_durable = 1;
+
+ if (txnp == NULL) {
+ txn_num = 0;
+ lsnp = &null_lsn;
+ null_lsn.file = null_lsn.offset = 0;
+ } else {
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
+ return (ret);
+ /*
+ * We need to assign begin_lsn while holding region mutex.
+ * That assignment is done inside the DbEnv->log_put call,
+ * so pass in the appropriate memory location to be filled
+ * in by the log_put code.
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
+ + sizeof(u_int32_t) + (fid == NULL ? 0 : fid->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (is_durable || txnp == NULL) {
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+ __os_free(dbenv, lr);
+ return (ret);
+ }
+#else
+ logrec.data = lr->data;
+#endif
+ }
+ 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;
+ }
+
+ if (fid == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &fid->size, sizeof(fid->size));
+ bp += sizeof(fid->size);
+ memcpy(bp, fid->data, fid->size);
+ bp += fid->size;
+ }
+
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+ if (is_durable || txnp == NULL) {
+ if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
+ if (rlsnp != ret_lsnp)
+ *ret_lsnp = *rlsnp;
+ }
+ } else {
+#ifdef DIAGNOSTIC
+ /*
+ * 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));
+
+ ret = __log_put(dbenv,
+ rlsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+#else
+ ret = 0;
+#endif
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
+ LSN_NOT_LOGGED(*ret_lsnp);
+ }
+
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__crdel_inmem_remove_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
+#endif
+
+#ifdef DIAGNOSTIC
+ __os_free(dbenv, logrec.data);
+#else
+ if (is_durable || txnp == NULL)
+ __os_free(dbenv, logrec.data);
+#endif
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_remove_read __P((DB_ENV *, void *,
+ * PUBLIC: __crdel_inmem_remove_args **));
+ */
+int
+__crdel_inmem_remove_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __crdel_inmem_remove_args **argpp;
+{
+ __crdel_inmem_remove_args *argp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__crdel_inmem_remove_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->fid, 0, sizeof(argp->fid));
+ memcpy(&argp->fid.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->fid.data = bp;
+ bp += argp->fid.size;
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
* PUBLIC: int __crdel_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
*/
@@ -256,5 +933,14 @@ __crdel_init_recover(dbenv, dtabp, dtabsizep)
if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
__crdel_metasub_recover, DB___crdel_metasub)) != 0)
return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_inmem_create_recover, DB___crdel_inmem_create)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_inmem_rename_recover, DB___crdel_inmem_rename)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_inmem_remove_recover, DB___crdel_inmem_remove)) != 0)
+ return (ret);
return (0);
}
diff --git a/db/db/crdel_autop.c b/db/db/crdel_autop.c
index e57a5c714..d8ec66053 100644
--- a/db/db/crdel_autop.c
+++ b/db/db/crdel_autop.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -34,20 +27,18 @@ __crdel_metasub_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __crdel_metasub_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__crdel_metasub%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__crdel_metasub%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tpage: ");
@@ -64,6 +55,152 @@ __crdel_metasub_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __crdel_inmem_create_print __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__crdel_inmem_create_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __crdel_inmem_create_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __crdel_inmem_create_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__crdel_inmem_create%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tname: ");
+ for (i = 0; i < argp->name.size; i++) {
+ ch = ((u_int8_t *)argp->name.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tfid: ");
+ for (i = 0; i < argp->fid.size; i++) {
+ ch = ((u_int8_t *)argp->fid.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tpgsize: %lu\n", (u_long)argp->pgsize);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+ return (0);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_rename_print __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__crdel_inmem_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __crdel_inmem_rename_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __crdel_inmem_rename_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__crdel_inmem_rename%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (void)printf("\toldname: ");
+ for (i = 0; i < argp->oldname.size; i++) {
+ ch = ((u_int8_t *)argp->oldname.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tnewname: ");
+ for (i = 0; i < argp->newname.size; i++) {
+ ch = ((u_int8_t *)argp->newname.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tfid: ");
+ for (i = 0; i < argp->fid.size; i++) {
+ ch = ((u_int8_t *)argp->fid.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+ return (0);
+}
+
+/*
+ * PUBLIC: int __crdel_inmem_remove_print __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__crdel_inmem_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __crdel_inmem_remove_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __crdel_inmem_remove_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__crdel_inmem_remove%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (void)printf("\tname: ");
+ for (i = 0; i < argp->name.size; i++) {
+ ch = ((u_int8_t *)argp->name.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tfid: ");
+ for (i = 0; i < argp->fid.size; i++) {
+ ch = ((u_int8_t *)argp->fid.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+ return (0);
+}
+
+/*
* PUBLIC: int __crdel_init_print __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
*/
@@ -78,5 +215,14 @@ __crdel_init_print(dbenv, dtabp, dtabsizep)
if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
__crdel_metasub_print, DB___crdel_metasub)) != 0)
return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_inmem_create_print, DB___crdel_inmem_create)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_inmem_rename_print, DB___crdel_inmem_rename)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_inmem_remove_print, DB___crdel_inmem_remove)) != 0)
+ return (ret);
return (0);
}
diff --git a/db/db/crdel_rec.c b/db/db/crdel_rec.c
index 7ff4fbd06..43f9c4f2c 100644
--- a/db/db/crdel_rec.c
+++ b/db/db/crdel_rec.c
@@ -1,26 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: crdel_rec.c,v 11.68 2004/04/29 00:07:55 ubell Exp $
+ * $Id: crdel_rec.c,v 12.13 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#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/fop.h"
#include "dbinc/hash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
/*
* __crdel_metasub_recover --
@@ -42,27 +37,45 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_p, modified, ret;
+ int cmp_p, ret, t_ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__crdel_metasub_print);
- REC_INTRO(__crdel_metasub_read, 0);
+ REC_INTRO(__crdel_metasub_read, 0, 0);
- if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
- *lsnp = argp->prev_lsn;
- ret = 0;
- goto out;
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ 0, &pagep)) != 0) {
+ /* If this is an in-memory file, this might be OK. */
+ if (F_ISSET(file_dbp, DB_AM_INMEM) &&
+ (ret = __memp_fget(mpf, &argp->pgno, NULL,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &pagep)) == 0) {
+ LSN_NOT_LOGGED(LSN(pagep));
+ } else {
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+ goto out;
+ }
}
- modified = 0;
- cmp_p = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
memcpy(pagep, argp->page.data, argp->page.size);
LSN(pagep) = *lsnp;
- modified = 1;
+
+ /*
+ * If this was an in-memory database and we are re-creating
+ * and this is the meta-data page, then we need to set up a
+ * bunch of fields in the dbo as well.
+ */
+ if (F_ISSET(file_dbp, DB_AM_INMEM) &&
+ argp->pgno == PGNO_BASE_MD &&
+ (ret = __db_meta_setup(file_dbp->dbenv,
+ file_dbp, file_dbp->dname, (DBMETA *)pagep, 0, 1)) != 0)
+ goto out;
} else if (DB_UNDO(op)) {
/*
* We want to undo this page creation. The page creation
@@ -70,22 +83,205 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
* was logged separately. Then we wrote the meta-data onto
* the page. So long as we restore the LSN, then the recovery
* for __bam_new will do everything else.
- * Don't bother checking the lsn on the page. If we
- * are rolling back the next thing is that this page
- * will get freed. Opening the subdb will have reinitialized
- * the page, but not the lsn.
+ *
+ * Don't bother checking the lsn on the page. If we are
+ * rolling back the next thing is that this page will get
+ * freed. Opening the subdb will have reinitialized the
+ * page, but not the lsn.
*/
+ REC_DIRTY(mpf, &pagep);
LSN(pagep) = argp->lsn;
- modified = 1;
}
- if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
- goto out;
- pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (pagep != NULL)
- (void)__memp_fput(mpf, pagep, 0);
+out: if (pagep != NULL && (t_ret = __memp_fput(mpf, pagep, 0)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+
REC_CLOSE;
}
+
+/*
+ * __crdel_inmem_create_recover --
+ * Recovery function for inmem_create.
+ *
+ * PUBLIC: int __crdel_inmem_create_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__crdel_inmem_create_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ DB *dbp;
+ __crdel_inmem_create_args *argp;
+ int do_close, ret, t_ret;
+
+ COMPQUIET(info, NULL);
+ dbp = NULL;
+ do_close = 0;
+ REC_PRINT(__crdel_inmem_create_print);
+ REC_NOOP_INTRO(__crdel_inmem_create_read);
+
+ /* First, see if the DB handle already exists. */
+ if (argp->fileid == DB_LOGFILEID_INVALID) {
+ if (DB_REDO(op))
+ ret = ENOENT;
+ else
+ ret = 0;
+ } else
+ ret = __dbreg_id_to_db_int(dbenv,
+ argp->txnp, &dbp, argp->fileid, 0, 0);
+
+ if (DB_REDO(op)) {
+ /*
+ * If the dbreg failed, that means that we're creating a
+ * tmp file.
+ */
+ if (ret != 0) {
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ goto out;
+
+ F_SET(dbp, DB_AM_RECOVER | DB_AM_INMEM);
+ memcpy(dbp->fileid, argp->fid.data, DB_FILE_ID_LEN);
+ if (((ret = __os_strdup(dbenv,
+ argp->name.data, &dbp->dname)) != 0))
+ goto out;
+
+ /*
+ * This DBP is never going to be entered into the
+ * dbentry table, so if we leave it open here,
+ * then we're going to lose it.
+ */
+ do_close = 1;
+ }
+
+ /* Now, set the fileid. */
+ memcpy(dbp->fileid, argp->fid.data, argp->fid.size);
+ if ((ret = __memp_set_fileid(dbp->mpf, dbp->fileid)) != 0)
+ goto out;
+ dbp->preserve_fid = 1;
+ MAKE_INMEM(dbp);
+ if ((ret = __db_dbenv_setup(dbp,
+ NULL, NULL, argp->name.data, TXN_INVALID, 0)) != 0)
+ goto out;
+ ret = __db_dbenv_mpool(dbp, argp->name.data, 0);
+
+ if (ret == ENOENT) {
+ dbp->pgsize = argp->pgsize;
+ if ((ret = __db_dbenv_mpool(dbp,
+ argp->name.data, DB_CREATE)) != 0)
+ goto out;
+ } else if (ret != 0)
+ goto out;
+ }
+
+ if (DB_UNDO(op)) {
+ if (ret == 0)
+ ret = __memp_nameop(dbenv, argp->fid.data, NULL,
+ (const char *)argp->name.data, NULL, 1);
+
+ if (ret == ENOENT || ret == DB_DELETED)
+ ret = 0;
+ else
+ goto out;
+ }
+
+ *lsnp = argp->prev_lsn;
+
+out: if (dbp != NULL) {
+ t_ret = 0;
+ if (DB_UNDO(op))
+ t_ret = __db_refresh(dbp, NULL, DB_NOSYNC, NULL, 0);
+ else if (do_close || ret != 0)
+ t_ret = __db_close(dbp, NULL, DB_NOSYNC);
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+ }
+ REC_NOOP_CLOSE;
+}
+
+/*
+ * __crdel_inmem_rename_recover --
+ * Recovery function for inmem_rename.
+ *
+ * PUBLIC: int __crdel_inmem_rename_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__crdel_inmem_rename_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __crdel_inmem_rename_args *argp;
+ u_int8_t *fileid;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__crdel_inmem_rename_print);
+ REC_NOOP_INTRO(__crdel_inmem_rename_read);
+ fileid = argp->fid.data;
+
+ /* Void out errors because the files may or may not still exist. */
+ if (DB_REDO(op))
+ (void)__memp_nameop(dbenv, fileid,
+ (const char *)argp->newname.data,
+ (const char *)argp->oldname.data,
+ (const char *)argp->newname.data, 1);
+
+ if (DB_UNDO(op))
+ (void)__memp_nameop(dbenv, fileid,
+ (const char *)argp->oldname.data,
+ (const char *)argp->newname.data,
+ (const char *)argp->oldname.data, 1);
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+ REC_NOOP_CLOSE;
+}
+
+/*
+ * __crdel_inmem_remove_recover --
+ * Recovery function for inmem_remove.
+ *
+ * PUBLIC: int __crdel_inmem_remove_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__crdel_inmem_remove_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __crdel_inmem_remove_args *argp;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__crdel_inmem_remove_print);
+ REC_NOOP_INTRO(__crdel_inmem_remove_read);
+
+ /*
+ * Since removes are delayed; there is no undo for a remove; only redo.
+ * The remove may fail, which is OK.
+ */
+ if (DB_REDO(op)) {
+ (void)__memp_nameop(dbenv,
+ argp->fid.data, NULL, argp->name.data, NULL, 1);
+ }
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+ REC_NOOP_CLOSE;
+}
diff --git a/db/db/db.c b/db/db/db.c
index 28aecc09c..e7975687a 100644
--- a/db/db/db.c
+++ b/db/db/db.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -36,22 +36,16 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db.c,v 11.300 2004/10/26 17:38:41 bostic Exp $
+ * $Id: db.c,v 12.42 2006/09/19 15:06:58 bostic Exp $
*/
#include "db_config.h"
-#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_swap.h"
#include "dbinc/btree.h"
+#include "dbinc/fop.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -121,27 +115,27 @@ __db_master_open(subdbp, txn, name, flags, mode, dbpp)
goto err;
/*
- * 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 checksumming to be turned on and it wasn't already,
- * set it here.
+ * The items in dbp are initialized from the master file's meta page.
+ * 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 checksumming 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;
+
+ /*
+ * The user may have specified a page size for an existing file,
+ * which we want to ignore.
+ */
+ subdbp->pgsize = dbp->pgsize;
+ *dbpp = dbp;
+
+ if (0) {
+err: if (!F_ISSET(dbp, DB_AM_DISCARD))
+ (void)__db_close(dbp, txn, 0);
}
-err:
- if (ret != 0 && !F_ISSET(dbp, DB_AM_DISCARD))
- (void)__db_close(dbp, txn, 0);
- else
- *dbpp = dbp;
+
return (ret);
}
@@ -173,19 +167,17 @@ __db_master_update(mdbp, sdbp, txn, subdb, type, action, newname, flags)
dbc = ndbc = NULL;
p = NULL;
- 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.
+ *
+ * Might we modify the master database? If so, we'll need to lock.
*/
+ modify = (action != MU_OPEN || LF_ISSET(DB_CREATE)) ? 1 : 0;
+
if ((ret = __db_cursor(mdbp, txn, &dbc,
(CDB_LOCKING(dbenv) && modify) ? DB_WRITECURSOR : 0)) != 0)
- goto err;
+ return (ret);
/*
* Point the cursor at the record.
@@ -200,8 +192,8 @@ __db_master_update(mdbp, sdbp, txn, subdb, type, action, newname, flags)
* !!!
* We don't include the name's nul termination in the database.
*/
- key.data = (void *)subdb;
- key.size = (u_int32_t)strlen(subdb);
+ DB_INIT_DBT(key, subdb, strlen(subdb));
+ memset(&data, 0, sizeof(data));
F_SET(&data, DB_DBT_MALLOC);
ret = __db_c_get(dbc, &key, &data,
@@ -237,14 +229,16 @@ __db_master_update(mdbp, sdbp, txn, subdb, type, action, newname, flags)
*/
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)
+ if ((ret = __memp_fget(mdbp->mpf, &sdbp->meta_pgno,
+ dbc->txn, DB_MPOOL_DIRTY, &p)) != 0)
goto err;
- /* Free the root on the master db. */
- if (TYPE(p) == P_BTREEMETA) {
+ /* Free the root on the master db if it was created. */
+ if (TYPE(p) == P_BTREEMETA &&
+ ((BTMETA *)p)->root != PGNO_INVALID) {
if ((ret = __memp_fget(mdbp->mpf,
- &((BTMETA *)p)->root, 0, &r)) != 0)
+ &((BTMETA *)p)->root, dbc->txn,
+ DB_MPOOL_DIRTY, &r)) != 0)
goto err;
/* Free and put the page. */
@@ -272,10 +266,10 @@ __db_master_update(mdbp, sdbp, txn, subdb, type, action, newname, flags)
* for the existence of newname; it shouldn't appear under
* us since we hold the metadata lock.
*/
- if ((ret = __db_cursor(mdbp, txn, &ndbc, 0)) != 0)
+ if ((ret = __db_cursor(mdbp, txn, &ndbc,
+ CDB_LOCKING(dbenv) ? DB_WRITECURSOR : 0)) != 0)
goto err;
- key.data = (void *)newname;
- key.size = (u_int32_t)strlen(newname);
+ DB_SET_DBT(key, newname, strlen(newname));
/*
* We don't actually care what the meta page of the potentially-
@@ -287,7 +281,7 @@ __db_master_update(mdbp, sdbp, txn, subdb, type, action, newname, flags)
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);
+ __db_errx(dbenv, "rename: database %s exists", newname);
goto err;
} else if (ret != DB_NOTFOUND)
goto err;
@@ -364,14 +358,9 @@ done: /*
* If we allocated a page: if we're successful, mark the page dirty
* and return it to the cache, otherwise, discard/free it.
*/
- if (p != NULL) {
- if (ret == 0) {
- if ((t_ret =
- __memp_fput(mdbp->mpf, p, DB_MPOOL_DIRTY)) != 0)
- ret = t_ret;
- } else
- (void)__memp_fput(mdbp->mpf, p, 0);
- }
+ if (p != NULL &&
+ (t_ret = __memp_fput(mdbp->mpf, p, 0)) != 0 && ret == 0)
+ ret = t_ret;
/* Discard the cursor(s) and data. */
if (data.data != NULL)
@@ -389,18 +378,17 @@ done: /*
* Set up the underlying environment during a db_open.
*
* PUBLIC: int __db_dbenv_setup __P((DB *,
- * PUBLIC: DB_TXN *, const char *, u_int32_t, u_int32_t));
+ * PUBLIC: DB_TXN *, const char *, const char *, u_int32_t, u_int32_t));
*/
int
-__db_dbenv_setup(dbp, txn, fname, id, flags)
+__db_dbenv_setup(dbp, txn, fname, dname, id, flags)
DB *dbp;
DB_TXN *txn;
- const char *fname;
+ const char *fname, *dname;
u_int32_t id, flags;
{
DB *ldbp;
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
u_int32_t maxid;
int ret;
@@ -415,25 +403,20 @@ __db_dbenv_setup(dbp, txn, fname, id, flags)
dbenv, 0, dbp->pgsize * DB_MINPAGECACHE, 0)) != 0)
return (ret);
- if ((ret = __dbenv_open(dbenv, NULL, DB_CREATE |
+ if ((ret = __env_open(dbenv, NULL, DB_CREATE |
DB_INIT_MPOOL | DB_PRIVATE | LF_ISSET(DB_THREAD), 0)) != 0)
return (ret);
}
/* Join the underlying cache. */
- if ((ret = __db_dbenv_mpool(dbp, fname, flags)) != 0)
+ if ((!F_ISSET(dbp, DB_AM_INMEM) || dname == NULL) &&
+ (ret = __db_dbenv_mpool(dbp, fname, flags)) != 0)
return (ret);
- /*
- * We may need a per-thread mutex. Allocate it from the mpool
- * region, there's supposed to be extra space there for that purpose.
- */
- 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);
- }
+ /* We may need a per-thread mutex. */
+ if (LF_ISSET(DB_THREAD) && (ret = __mutex_alloc(
+ dbenv, MTX_DB_HANDLE, DB_MUTEX_PROCESS_ONLY, &dbp->mutex)) != 0)
+ return (ret);
/*
* Set up a bookkeeping entry for this database in the log region,
@@ -441,13 +424,14 @@ __db_dbenv_setup(dbp, txn, fname, id, flags)
* 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)
+ if (LOGGING_ON(dbenv) && dbp->log_filename == NULL &&
+ (ret = __dbreg_setup(dbp,
+ F_ISSET(dbp, DB_AM_INMEM) ? dname : fname, id)) != 0)
return (ret);
/*
* If we're actively logging and our caller isn't a recovery function
- * that already did so, assign this dbp a log fileid.
+ * that already did so, then assign this dbp a log fileid.
*/
if (DBENV_LOGGING(dbenv) && !F_ISSET(dbp, DB_AM_RECOVER) &&
#if !defined(DEBUG_ROP)
@@ -465,20 +449,30 @@ __db_dbenv_setup(dbp, txn, fname, id, flags)
* routines, where we don't want to do a lot of ugly and
* expensive memcmps.
*/
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (maxid = 0, ldbp = LIST_FIRST(&dbenv->dblist);
- 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;
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ maxid = 0;
+ TAILQ_FOREACH(ldbp, &dbenv->dblist, dblistlinks) {
+ /*
+ * There are three cases: on-disk database (first clause),
+ * named in-memory database (second clause), temporary database
+ * (never matches; no clause).
+ */
+ if (!F_ISSET(dbp, DB_AM_INMEM)) {
+ if (memcmp(ldbp->fileid, dbp->fileid, DB_FILE_ID_LEN)
+ == 0 && ldbp->meta_pgno == dbp->meta_pgno)
+ break;
+ } else if (dname != NULL) {
+ if (F_ISSET(ldbp, DB_AM_INMEM) &&
+ ldbp->dname != NULL &&
+ strcmp(ldbp->dname, dname) == 0)
+ break;
+ }
if (ldbp->adj_fileid > maxid)
maxid = ldbp->adj_fileid;
}
/*
- * If ldbp is NULL, we didn't find a match, or we weren't
- * really looking because fname is NULL. Assign the dbp an
+ * If ldbp is NULL, we didn't find a match. Assign the dbp an
* adj_fileid one higher than the largest we found, and
* insert it at the head of the master dbp list.
*
@@ -488,12 +482,12 @@ __db_dbenv_setup(dbp, txn, fname, id, flags)
*/
if (ldbp == NULL) {
dbp->adj_fileid = maxid + 1;
- LIST_INSERT_HEAD(&dbenv->dblist, dbp, dblistlinks);
+ TAILQ_INSERT_HEAD(&dbenv->dblist, dbp, dblistlinks);
} else {
dbp->adj_fileid = ldbp->adj_fileid;
- LIST_INSERT_AFTER(ldbp, dbp, dblistlinks);
+ TAILQ_INSERT_AFTER(&dbenv->dblist, ldbp, dbp, dblistlinks);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
return (0);
}
@@ -514,12 +508,17 @@ __db_dbenv_mpool(dbp, fname, flags)
DBT pgcookie;
DB_MPOOLFILE *mpf;
DB_PGINFO pginfo;
+ int fidset, ftype, ret;
+ int32_t lsn_off;
+ u_int8_t nullfid[DB_FILE_ID_LEN];
u_int32_t clear_len;
- int ftype, ret;
-
- COMPQUIET(mpf, NULL);
dbenv = dbp->dbenv;
+ lsn_off = 0;
+
+ /* It's possible that this database is already open. */
+ if (F_ISSET(dbp, DB_AM_OPEN_CALLED))
+ return (0);
/*
* If we need to pre- or post-process a file's pages on I/O, set the
@@ -534,17 +533,28 @@ __db_dbenv_mpool(dbp, fname, flags)
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;
+ clear_len = CRYPTO_ON(dbenv) ?
+ (dbp->pgsize != 0 ? dbp->pgsize : DB_CLEARLEN_NOTSET) :
+ DB_PAGE_DB_LEN;
break;
case DB_HASH:
ftype = DB_FTYPE_SET;
- clear_len = CRYPTO_ON(dbenv) ? dbp->pgsize : DB_PAGE_DB_LEN;
+ clear_len = CRYPTO_ON(dbenv) ?
+ (dbp->pgsize != 0 ? dbp->pgsize : DB_CLEARLEN_NOTSET) :
+ 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;
+
+ /*
+ * If we came in here without a pagesize set, then we need
+ * to mark the in-memory handle as having clear_len not
+ * set, because we don't really know the clear length or
+ * the page size yet (since the file doesn't yet exist).
+ */
+ clear_len = dbp->pgsize != 0 ? dbp->pgsize : DB_CLEARLEN_NOTSET;
break;
case DB_UNKNOWN:
/*
@@ -564,6 +574,18 @@ __db_dbenv_mpool(dbp, fname, flags)
clear_len = DB_PAGE_DB_LEN;
break;
}
+
+ /*
+ * This might be an in-memory file and we won't know its
+ * file type until after we open it and read the meta-data
+ * page.
+ */
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ clear_len = DB_CLEARLEN_NOTSET;
+ ftype = DB_FTYPE_NOTSET;
+ lsn_off = DB_LSN_OFF_NOTSET;
+ break;
+ }
/* FALLTHROUGH */
default:
return (__db_unknown_type(dbenv, "DB->open", dbp->type));
@@ -571,10 +593,14 @@ __db_dbenv_mpool(dbp, fname, flags)
mpf = dbp->mpf;
+ memset(nullfid, 0, DB_FILE_ID_LEN);
+ fidset = memcmp(nullfid, dbp->fileid, DB_FILE_ID_LEN);
+ if (fidset)
+ (void)__memp_set_fileid(mpf, dbp->fileid);
+
(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);
+ (void)__memp_set_lsn_offset(mpf, lsn_off);
pginfo.db_pagesize = dbp->pgsize;
pginfo.flags =
@@ -584,13 +610,42 @@ __db_dbenv_mpool(dbp, fname, flags)
pgcookie.size = sizeof(DB_PGINFO);
(void)__memp_set_pgcookie(mpf, &pgcookie);
+#ifndef DIAG_MVCC
+ if (F_ISSET(dbenv, DB_ENV_MULTIVERSION))
+#endif
+ if (F_ISSET(dbp, DB_AM_TXN) &&
+ dbp->type != DB_QUEUE && dbp->type != DB_UNKNOWN)
+ LF_SET(DB_MULTIVERSION);
+
if ((ret = __memp_fopen(mpf, NULL, fname,
- LF_ISSET(DB_RDONLY | DB_NOMMAP |
- DB_ODDFILESIZE | DB_TRUNCATE) |
+ LF_ISSET(DB_CREATE | DB_DURABLE_UNKNOWN | DB_MULTIVERSION |
+ DB_NOMMAP | DB_ODDFILESIZE | DB_RDONLY | 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)
+ 0, dbp->pgsize)) != 0) {
+ /*
+ * The open didn't work; we need to reset the mpf,
+ * retaining the in-memory semantics (if any).
+ */
+ (void)__memp_fclose(dbp->mpf, 0);
+ (void)__memp_fcreate(dbenv, &dbp->mpf);
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ MAKE_INMEM(dbp);
return (ret);
+ }
+
+ /*
+ * Set the open flag. We use it to mean that the dbp has gone
+ * through mpf setup, including dbreg_register. Also, below,
+ * 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_AM_OPEN_CALLED);
+ if (!fidset && fname != NULL) {
+ (void)__memp_get_fileid(dbp->mpf, dbp->fileid);
+ dbp->preserve_fid = 1;
+ }
return (0);
}
@@ -624,7 +679,7 @@ __db_close(dbp, txn, flags)
(void)__db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0);
/* Refresh the structure and close any underlying resources. */
- ret = __db_refresh(dbp, txn, flags, &deferred_close);
+ ret = __db_refresh(dbp, txn, flags, &deferred_close, 0);
/*
* If we've deferred the close because the logging of the close failed,
@@ -644,11 +699,11 @@ __db_close(dbp, txn, flags)
* 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);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
db_ref = --dbenv->db_ref;
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (F_ISSET(dbenv, DB_ENV_DBLOCAL) && db_ref == 0 &&
- (t_ret = __dbenv_close(dbenv, 0)) != 0 && ret == 0)
+ (t_ret = __env_close(dbenv, 0)) != 0 && ret == 0)
ret = t_ret;
/* Free the database handle. */
@@ -666,25 +721,32 @@ __db_close(dbp, txn, flags)
* 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 *));
+ * PUBLIC: int __db_refresh __P((DB *, DB_TXN *, u_int32_t, int *, int));
*/
int
-__db_refresh(dbp, txn, flags, deferred_closep)
+__db_refresh(dbp, txn, flags, deferred_closep, reuse)
DB *dbp;
DB_TXN *txn;
u_int32_t flags;
- int *deferred_closep;
+ int *deferred_closep, reuse;
{
DB *sdbp;
DBC *dbc;
DB_ENV *dbenv;
DB_LOCKREQ lreq;
- DB_MPOOL *dbmp;
+ REGENV *renv;
+ REGINFO *infop;
+ u_int32_t save_flags;
int resync, ret, t_ret;
ret = 0;
dbenv = dbp->dbenv;
+ infop = dbenv->reginfo;
+ if (infop != NULL)
+ renv = infop->primary;
+ else
+ renv = NULL;
/* If never opened, or not currently open, it's easy. */
if (!F_ISSET(dbp, DB_AM_OPEN_CALLED))
@@ -699,8 +761,7 @@ __db_refresh(dbp, txn, flags, deferred_closep)
* is mostly done just so we can close primaries and secondaries in
* any order--but within one thread of control.
*/
- for (sdbp = LIST_FIRST(&dbp->s_secondaries);
- sdbp != NULL; sdbp = LIST_NEXT(sdbp, s_links)) {
+ LIST_FOREACH(sdbp, &dbp->s_secondaries, s_links) {
LIST_REMOVE(sdbp, s_links);
if ((t_ret = __db_disassociate(sdbp)) != 0 && ret == 0)
ret = t_ret;
@@ -768,6 +829,7 @@ __db_refresh(dbp, txn, flags, deferred_closep)
(t_ret = __memp_fsync(dbp->mpf)) != 0 && ret == 0)
ret = t_ret;
+never_opened:
/*
* At this point, we haven't done anything to render the DB
* handle unusable, at least by a transaction abort. Take the
@@ -779,12 +841,15 @@ __db_refresh(dbp, txn, flags, deferred_closep)
* In this case, we put off actually closing the dbp until we've
* performed the abort.
*/
- if (LOGGING_ON(dbp->dbenv)) {
+ if (!reuse && 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 and only if this is not a recovery dbp or a client dbp,
+ * or a dead dbp handle.
*/
- if (F_ISSET(dbp, DB_AM_RECOVER))
+ DB_ASSERT(dbenv, renv != NULL);
+ if (F_ISSET(dbp, DB_AM_RECOVER) || IS_REP_CLIENT(dbenv) ||
+ dbp->timestamp != renv->rep_timestamp)
t_ret = __dbreg_revoke_id(dbp, 0, DB_LOGFILEID_INVALID);
else {
if ((t_ret = __dbreg_close_id(dbp,
@@ -808,6 +873,17 @@ __db_refresh(dbp, txn, flags, deferred_closep)
*deferred_closep = 1;
return (t_ret);
}
+ /*
+ * If dbreg_close_id failed and we were not in a
+ * transaction, then we need to finish this close
+ * because the caller can't do anything with the
+ * handle after we return an error. We rely on
+ * dbreg_close_id to mark the entry in some manner
+ * so that we do not do a clean shutdown of this
+ * environment. If shutdown isn't clean, then the
+ * application *must* run recovery and that will
+ * generate the RCLOSE record.
+ */
}
if (ret == 0)
@@ -824,18 +900,24 @@ __db_refresh(dbp, txn, flags, deferred_closep)
ret == 0)
ret = t_ret;
-never_opened:
/*
* 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.
+ *
+ * The DB handle may not yet have been added to the DB_ENV list, don't
+ * blindly call the underlying TAILQ_REMOVE macro. Explicitly reset
+ * the field values to NULL so that we can't call TAILQ_REMOVE twice.
*/
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- if (dbp->dblistlinks.le_prev != NULL) {
- LIST_REMOVE(dbp, dblistlinks);
- dbp->dblistlinks.le_prev = NULL;
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ if (!reuse &&
+ (dbp->dblistlinks.tqe_next != NULL ||
+ dbp->dblistlinks.tqe_prev != NULL)) {
+ TAILQ_REMOVE(&dbenv->dblist, dbp, dblistlinks);
+ dbp->dblistlinks.tqe_next = NULL;
+ dbp->dblistlinks.tqe_prev = NULL;
}
/* Close the memory pool file handle. */
@@ -845,9 +927,13 @@ never_opened:
ret == 0)
ret = t_ret;
dbp->mpf = NULL;
+ if (reuse &&
+ (t_ret = __memp_fcreate(dbenv, &dbp->mpf)) != 0 &&
+ ret == 0)
+ ret = t_ret;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
/*
* Call the access specific close function.
@@ -883,9 +969,9 @@ never_opened:
* access-method specific data.
*/
- if (dbp->lid != DB_LOCK_INVALIDID) {
+ if (!reuse && dbp->lid != DB_LOCK_INVALIDID) {
/* We may have pending trade operations on this dbp. */
- if (txn != NULL)
+ if (IS_REAL_TXN(txn))
__txn_remlock(dbenv, txn, &dbp->handle_lock, dbp->lid);
/* We may be holding the handle lock; release it. */
@@ -901,20 +987,57 @@ never_opened:
LOCK_INIT(dbp->handle_lock);
}
- /* Discard the locker ID allocated as the fileid. */
- if (F_ISSET(dbp, DB_AM_INMEM) && LOCKING_ON(dbenv) &&
+ /*
+ * If this is a temporary file (un-named in-memory file), then
+ * discard the locker ID allocated as the fileid.
+ */
+ if (LOCKING_ON(dbenv) &&
+ F_ISSET(dbp, DB_AM_INMEM) && !dbp->preserve_fid &&
+ *(u_int32_t *)dbp->fileid != DB_LOCK_INVALIDID &&
(t_ret = __lock_id_free(dbenv, *(u_int32_t *)dbp->fileid)) != 0 &&
ret == 0)
ret = t_ret;
+ if (reuse) {
+ /*
+ * If we are reusing this dbp, then we're done now. Re-init
+ * the handle, preserving important flags, and then return.
+ * This code is borrowed from __db_init, which does more
+ * than we can do here.
+ */
+ save_flags = F_ISSET(dbp, DB_AM_INMEM | DB_AM_TXN);
+
+ /*
+ * XXX If this is an XA handle, we'll want to specify
+ * DB_XA_CREATE.
+ */
+ if ((ret = __bam_db_create(dbp)) != 0)
+ return (ret);
+ if ((ret = __ham_db_create(dbp)) != 0)
+ return (ret);
+ if ((ret = __qam_db_create(dbp)) != 0)
+ return (ret);
+
+ /* Restore flags */
+ dbp->flags = dbp->orig_flags | save_flags;
+
+ if (FLD_ISSET(save_flags, DB_AM_INMEM)) {
+ /*
+ * If this is inmem, then it may have a fileid
+ * even if it was never opened, and we need to
+ * clear out that fileid.
+ */
+ memset(dbp->fileid, 0, sizeof(dbp->fileid));
+ MAKE_INMEM(dbp);
+ }
+ return (ret);
+ }
+
dbp->type = DB_UNKNOWN;
/* Discard the thread mutex. */
- if (dbp->mutexp != NULL) {
- dbmp = dbenv->mp_handle;
- __db_mutex_free(dbenv, dbmp->reginfo, dbp->mutexp);
- dbp->mutexp = NULL;
- }
+ if ((t_ret = __mutex_free(dbenv, &dbp->mutex)) != 0 && ret == 0)
+ ret = t_ret;
/* Discard any memory allocated for the file and database names. */
if (dbp->fname != NULL) {
@@ -1004,7 +1127,7 @@ __db_log_page(dbp, txn, lsn, pgno, page)
* PUBLIC: const char *, DB_TXN *, char **));
*/
#undef BACKUP_PREFIX
-#define BACKUP_PREFIX "__db."
+#define BACKUP_PREFIX "__db"
#undef MAX_LSN_TO_TEXT
#define MAX_LSN_TO_TEXT 17
@@ -1026,16 +1149,18 @@ __db_backup_name(dbenv, name, txn, backup)
* 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;
+ len = strlen(name) + strlen(BACKUP_PREFIX) + 1 + MAX_LSN_TO_TEXT;
if ((ret = __os_malloc(dbenv, len, &retp)) != 0)
return (ret);
/*
- * Create the name. Backup file names are in one of two forms:
+ * Create the name. Backup file names are in one of three forms:
*
* In a transactional env: __db.LSN(8).LSN(8)
* and
- * in a non-transactional env: __db.FILENAME
+ * In VXWORKS (where we want 8.3 support)
+ * and
+ * in any other non-transactional env: __db.FILENAME
*
* If the transaction doesn't have a current LSN, we write a dummy
* log record to force it, so we ensure all tmp names are unique.
@@ -1051,14 +1176,37 @@ __db_backup_name(dbenv, name, txn, backup)
* 4. multi-component path + transaction
*/
p = __db_rpath(name);
- if (txn == NULL)
+ if (!IS_REAL_TXN(txn)) {
+#ifdef HAVE_VXWORKS
+ { int i, n;
+ /* On VxWorks we must support 8.3 names. */
+ if (p == NULL) /* Case 1. */
+ n = snprintf(retp,
+ len, "%s%.4s.tmp", BACKUP_PREFIX, name);
+ else /* Case 3. */
+ n = snprintf(retp, len, "%.*s%s%.4s.tmp",
+ (int)(p - name) + 1, name, BACKUP_PREFIX, p + 1);
+
+ /*
+ * Overwrite "." in the characters copied from the name.
+ * If we backup 8 characters from the end, we're guaranteed
+ * to a) include the four bytes we copied from the name
+ * and b) not run off the beginning of the string.
+ */
+ for (i = 0, p = (retp + n) - 8; i < 4; p++, i++)
+ if (*p == '.')
+ *p = '_';
+ }
+#else
if (p == NULL) /* Case 1. */
- snprintf(retp, len, "%s%s", BACKUP_PREFIX, name);
+ snprintf(retp, len, "%s.%s", BACKUP_PREFIX, name);
else /* Case 3. */
- snprintf(retp, len, "%.*s%s%s",
+ snprintf(retp, len, "%.*s%s.%s",
(int)(p - name) + 1, name, BACKUP_PREFIX, p + 1);
- else {
- if (IS_ZERO_LSN(txn->last_lsn)) {
+#endif
+ } else {
+ lsn = ((TXN_DETAIL *)txn->td)->last_lsn;
+ if (IS_ZERO_LSN(lsn)) {
/*
* Write dummy log record. The two choices for dummy
* log records are __db_noop_log and __db_debug_log;
@@ -1071,12 +1219,11 @@ __db_backup_name(dbenv, name, txn, backup)
__os_free(dbenv, retp);
return (ret);
}
- } else
- lsn = txn->last_lsn;
+ }
if (p == NULL) /* Case 2. */
snprintf(retp, len,
- "%s%x.%x", BACKUP_PREFIX, lsn.file, lsn.offset);
+ "%s.%x.%x", BACKUP_PREFIX, lsn.file, lsn.offset);
else /* Case 4. */
snprintf(retp, len, "%.*s%x.%x",
(int)(p - name) + 1, name, lsn.file, lsn.offset);
@@ -1087,28 +1234,6 @@ __db_backup_name(dbenv, name, txn, backup)
}
/*
- * __dblist_get --
- * Get the first element of dbenv->dblist with
- * dbp->adj_fileid matching adjid.
- *
- * PUBLIC: DB *__dblist_get __P((DB_ENV *, u_int32_t));
- */
-DB *
-__dblist_get(dbenv, adjid)
- DB_ENV *dbenv;
- u_int32_t adjid;
-{
- DB *dbp;
-
- for (dbp = LIST_FIRST(&dbenv->dblist);
- dbp != NULL && dbp->adj_fileid != adjid;
- dbp = LIST_NEXT(dbp, dblistlinks))
- ;
-
- return (dbp);
-}
-
-/*
* __db_disassociate --
* Destroy the association between a given secondary and its primary.
*/
@@ -1133,7 +1258,7 @@ __db_disassociate(sdbp)
if (sdbp->s_refcnt != 1 ||
TAILQ_FIRST(&sdbp->active_queue) != NULL ||
TAILQ_FIRST(&sdbp->join_queue) != NULL) {
- __db_err(sdbp->dbenv,
+ __db_errx(sdbp->dbenv,
"Closing a primary DB while a secondary DB has active cursors is unsafe");
ret = EINVAL;
}
@@ -1165,7 +1290,7 @@ __db_testcopy(dbenv, dbp, name)
DB_MPOOL *dbmp;
DB_MPOOLFILE *mpf;
- DB_ASSERT(dbp != NULL || name != NULL);
+ DB_ASSERT(dbenv, dbp != NULL || name != NULL);
if (name == NULL) {
dbmp = dbenv->mp_handle;
@@ -1185,8 +1310,8 @@ __qam_testdocopy(dbp, name)
const char *name;
{
QUEUE_FILELIST *filelist, *fp;
- char buf[256], *dir;
int ret;
+ char buf[DB_MAXPATHLEN], *dir;
filelist = NULL;
if ((ret = __db_testdocopy(dbp->dbenv, name)) != 0)
@@ -1235,7 +1360,8 @@ __db_testdocopy(dbenv, name)
/*
* Maximum size of file, including adding a ".afterop".
*/
- len = strlen(real_name) + strlen(BACKUP_PREFIX) + MAX_LSN_TO_TEXT + 9;
+ len = strlen(real_name) +
+ strlen(BACKUP_PREFIX) + 1 + MAX_LSN_TO_TEXT + 9;
if ((ret = __os_malloc(dbenv, len, &copy)) != 0)
goto err;
@@ -1264,7 +1390,7 @@ __db_testdocopy(dbenv, name)
* files named, say, 'a' and 'abc' we won't match 'abc' when
* looking for 'a'.
*/
- snprintf(backup, len, "%s%s.0x", BACKUP_PREFIX, name);
+ snprintf(backup, len, "%s.%s.0x", BACKUP_PREFIX, name);
/*
* We need the directory path to do the __os_dirlist.
@@ -1343,10 +1469,10 @@ __db_makecopy(dbenv, src, dest)
return;
if (__os_open(dbenv,
- src, DB_OSO_RDONLY, __db_omode("rw----"), &rfhp) != 0)
+ src, DB_OSO_RDONLY, __db_omode(OWNER_RW), &rfhp) != 0)
goto err;
if (__os_open(dbenv, dest,
- DB_OSO_CREATE | DB_OSO_TRUNC, __db_omode("rw----"), &wfhp) != 0)
+ DB_OSO_CREATE | DB_OSO_TRUNC, __db_omode(OWNER_RW), &wfhp) != 0)
goto err;
for (;;)
diff --git a/db/db/db.src b/db/db/db.src
index 2cac31a4f..40ce88677 100644
--- a/db/db/db.src
+++ b/db/db/db.src
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db.src,v 11.28 2004/06/17 17:35:15 bostic Exp $
+ * $Id: db.src,v 12.6 2006/08/24 14:45:15 bostic Exp $
*/
PREFIX __db
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
@@ -42,7 +35,7 @@ INCLUDE
* If the dbt was NULL then the hdr is a complete item to be
* pasted on the page.
*/
-BEGIN addrem 41
+BEGIN addrem 42 41
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
@@ -68,7 +61,7 @@ END
* may be used later if we actually do overwrites of big key/
* data items in place.
*/
-BEGIN big 43
+BEGIN big 42 43
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
@@ -88,7 +81,7 @@ END
* adjust: the adjustment being made.
* lsn: the page's original lsn.
*/
-BEGIN ovref 44
+BEGIN ovref 42 44
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG adjust int32_t ld
@@ -96,6 +89,28 @@ POINTER lsn DB_LSN * lu
END
/*
+ * relink -- Handles relinking around a page.
+ *
+ * opcode: indicates if this is an addpage or delete page
+ * pgno: the page being changed.
+ * lsn the page's original lsn.
+ * prev: the previous page.
+ * lsn_prev: the previous page's original lsn.
+ * next: the next page.
+ * lsn_next: the previous page's original lsn.
+ */
+BEGIN_COMPAT relink 42 45
+ARG opcode u_int32_t lu
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+POINTER lsn DB_LSN * lu
+ARG prev db_pgno_t lu
+POINTER lsn_prev DB_LSN * lu
+ARG next db_pgno_t lu
+POINTER lsn_next 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).
@@ -104,7 +119,7 @@ END
* data: data parameter
* flags: flags parameter
*/
-BEGIN debug 47
+BEGIN debug 42 47
DBT op DBT s
ARG fileid int32_t ld
DBT key DBT s
@@ -115,7 +130,7 @@ END
/*
* noop -- do nothing, but get an LSN.
*/
-BEGIN noop 48
+BEGIN noop 42 48
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER prevlsn DB_LSN * lu
@@ -130,9 +145,19 @@ END
* pgno: the page allocated.
* ptype: the type of the page allocated.
* next: the next page on the free list.
- * last_pgno: the last page in the file after this op.
+ * last_pgno: the last page in the file after this op (4.3+).
*/
-BEGIN pg_alloc 49
+BEGIN_COMPAT pg_alloc 42 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
+
+BEGIN pg_alloc 43 49
DB fileid int32_t ld
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t lu
@@ -151,9 +176,18 @@ END
* meta_pgno: the meta-data page number.
* header: the header from the free'd page.
* next: the previous next pointer on the metadata page.
- * last_pgno: the last page in the file before this op.
+ * last_pgno: the last page in the file before this op (4.3+).
*/
-BEGIN pg_free 50
+BEGIN_COMPAT pg_free 42 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
+
+BEGIN pg_free 43 50
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
@@ -170,7 +204,7 @@ END
* recovery to itself return DB_RUNRECOVERY, as only catastrophic
* recovery can fix things.
*/
-BEGIN cksum 51
+BEGIN cksum 42 51
END
/*
@@ -182,9 +216,19 @@ END
* 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.
- * last_pgno: the last page in the file before this op.
+ * last_pgno: the last page in the file before this op (4.3+).
*/
-BEGIN pg_freedata 52
+BEGIN_COMPAT pg_freedata 42 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
+
+BEGIN pg_freedata 43 52
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
@@ -200,7 +244,7 @@ END
*
* pgno: the page being freed.
*/
-BEGIN pg_prepare 53
+BEGIN pg_prepare 42 53
DB fileid int32_t ld
ARG pgno db_pgno_t lu
END
@@ -214,7 +258,7 @@ END
* header: the header from the free'd page.
* next: the previous next pointer on the metadata page.
*/
-BEGIN pg_new 54
+BEGIN pg_new 42 54
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
@@ -230,9 +274,30 @@ END
* header: the header from the page.
* data: data that used to be on the page.
*/
-BEGIN pg_init 60
+BEGIN pg_init 43 60
DB fileid int32_t ld
ARG pgno db_pgno_t lu
PGDBT header DBT s
PGDBT data DBT s
END
+
+/*
+ * pg_sort: sort the free list
+ *
+ * meta: meta page number
+ * meta_lsn: lsn on meta page.
+ * last_free: page number of new last free page.
+ * last_lsn; lsn of last free page.
+ * last_pgno: current last page number.
+ * list: list of pages and lsns to sort.
+ */
+BEGIN pg_sort 44 61
+DB fileid int32_t ld
+ARG meta db_pgno_t lu
+POINTER meta_lsn DB_LSN * lu
+ARG last_free db_pgno_t lu
+POINTER last_lsn DB_LSN * lu
+ARG last_pgno db_pgno_t lu
+DBT list DBT s
+END
+
diff --git a/db/db/db_am.c b/db/db/db_am.c
index 0e4a864f9..becfd8b77 100644
--- a/db/db/db_am.c
+++ b/db/db/db_am.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_am.c,v 11.120 2004/10/07 17:33:32 sue Exp $
+ * $Id: db_am.c,v 12.24 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
@@ -48,7 +41,9 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
DBC *dbc;
DBC_INTERNAL *cp;
DB_ENV *dbenv;
+ db_threadid_t tid;
int allocated, ret;
+ pid_t pid;
dbenv = dbp->dbenv;
allocated = 0;
@@ -61,15 +56,14 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
* right type. With off page dups we may have different kinds
* of cursors on the queue for a single database.
*/
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- for (dbc = TAILQ_FIRST(&dbp->free_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &dbp->free_queue, links)
if (dbtype == dbc->dbtype) {
TAILQ_REMOVE(&dbp->free_queue, dbc, links);
F_CLR(dbc, ~DBC_OWN_LID);
break;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
if (dbc == NULL) {
if ((ret = __os_calloc(dbenv, 1, sizeof(DBC), &dbc)) != 0)
@@ -92,13 +86,14 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
* environment handles.
*/
if (!DB_IS_THREADED(dbp)) {
- if (dbp->dbenv->env_lid == DB_LOCK_INVALIDID &&
- (ret =
- __lock_id(dbenv,&dbp->dbenv->env_lid)) != 0)
+ if (dbp->dbenv->env_lref == NULL &&
+ (ret = __lock_id(dbenv, NULL,
+ (DB_LOCKER **)&dbp->dbenv->env_lref)) != 0)
goto err;
- dbc->lid = dbp->dbenv->env_lid;
+ dbc->lref = dbp->dbenv->env_lref;
} else {
- if ((ret = __lock_id(dbenv, &dbc->lid)) != 0)
+ if ((ret = __lock_id(dbenv, NULL,
+ (DB_LOCKER **)&dbc->lref)) != 0)
goto err;
F_SET(dbc, DBC_OWN_LID);
}
@@ -132,7 +127,7 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
* lock object just like we do to
* single thread creates.
*/
- DB_ASSERT(sizeof(db_pgno_t) ==
+ DB_ASSERT(dbenv, sizeof(db_pgno_t) ==
sizeof(u_int32_t));
dbc->lock_dbt.size = sizeof(u_int32_t);
dbc->lock_dbt.data = &dbc->lock.pgno;
@@ -175,7 +170,9 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
dbc->dbtype = dbtype;
RESET_RET_MEM(dbc);
- if ((dbc->txn = txn) == NULL) {
+ if ((dbc->txn = txn) != NULL)
+ dbc->locker = txn->txnid;
+ else if (LOCKING_ON(dbenv)) {
/*
* There are certain cases in which we want to create a
* new cursor with a particular locker ID that is known
@@ -193,16 +190,25 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
* 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.
+ * In these cases, our caller will pass a nonzero locker
+ * ID into this function. Use this locker ID instead of
+ * the default 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;
+ else {
+ /*
+ * If we are threaded then we need to set the
+ * proper thread id into the locker.
+ */
+ if (DB_IS_THREADED(dbp)) {
+ dbenv->thread_id(dbenv, &pid, &tid);
+ __lock_set_thread_id(
+ (DB_LOCKER *)dbc->lref, pid, tid);
+ }
+ dbc->locker = ((DB_LOCKER *)dbc->lref)->id;
+ }
+ }
/*
* These fields change when we are used as a secondary index, so
@@ -219,7 +225,7 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
if (F_ISSET(dbp, DB_AM_RECOVER))
F_SET(dbc, DBC_RECOVER);
if (F_ISSET(dbp, DB_AM_COMPENSATE))
- F_SET(dbc, DBC_COMPENSATE);
+ F_SET(dbc, DBC_DONTLOCK);
/* Refresh the DBC internal structure. */
cp = dbc->internal;
@@ -253,10 +259,10 @@ __db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
if (txn != NULL)
++txn->cursors;
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
TAILQ_INSERT_TAIL(&dbp->active_queue, dbc, links);
F_SET(dbc, DBC_ACTIVE);
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
*dbcp = dbc;
return (0);
@@ -333,7 +339,7 @@ __db_put(dbp, txn, key, data, flags)
case DB_UNKNOWN:
default:
/* The interface should prevent this. */
- DB_ASSERT(
+ DB_ASSERT(dbenv,
dbp->type == DB_QUEUE || dbp->type == DB_RECNO);
ret = __db_ferr(dbenv, "DB->put", 0);
@@ -341,46 +347,29 @@ __db_put(dbp, txn, key, data, flags)
}
/*
- * 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.
+ * 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.
+ *
+ * If the application is managing this key's data, we need a
+ * copy of it here. It will be freed in __db_put_pp.
*/
- DB_ASSERT(!F_ISSET(dbp, DB_AM_SECONDARY));
+ DB_ASSERT(dbenv, !F_ISSET(dbp, DB_AM_SECONDARY));
- if (LIST_FIRST(&dbp->s_secondaries) != NULL)
+ if (LIST_FIRST(&dbp->s_secondaries) != NULL &&
+ (ret = __dbt_usercopy(dbenv, key)) == 0)
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);
+ FREE_IF_NEEDED(dbenv, &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
- * the flags checking will catch us. We don't want the actual
- * data, so request a partial of length 0.
- */
- memset(&tdata, 0, sizeof(tdata));
- F_SET(&tdata, DB_DBT_USERMEM | DB_DBT_PARTIAL);
-
- /*
- * If we're doing page-level locking, set the read-modify-write
- * flag, we're going to overwrite immediately.
- */
- 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 || ret == DB_KEYEMPTY)
- ret = 0;
- break;
default:
/* Fall through to normal cursor put. */
break;
@@ -412,7 +401,7 @@ __db_del(dbp, txn, key, flags)
u_int32_t flags;
{
DBC *dbc;
- DBT data, lkey;
+ DBT data;
u_int32_t f_init, f_next;
int ret, t_ret;
@@ -427,12 +416,12 @@ __db_del(dbp, txn, key, 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.
+ * keys or data, set DB_DBT_ISSET. We rely on __db_c_get to clear
+ * this.
*/
- 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);
+ F_SET(&data, DB_DBT_USERMEM | DB_DBT_ISSET);
+ F_SET(key, DB_DBT_ISSET);
/*
* If locking (and we haven't already acquired CDB locks), set the
@@ -445,42 +434,66 @@ __db_del(dbp, txn, key, flags)
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".
+ * Optimize the simple cases. For all AMs if we don't have secondaries
+ * and are not a secondary and there are no dups then we can avoid a
+ * bunch of overhead. For queue we don't need to fetch the record since
+ * we delete by direct calculation from the record number.
+ *
+ * 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 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.
+ * conditions here should be modified not to use these optimizations.
+ * The ordinary AM-independent alternative will work just fine;
+ * 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) {
+ if (!F_ISSET(dbp, DB_AM_SECONDARY) &&
+ LIST_FIRST(&dbp->s_secondaries) == NULL) {
+#ifdef HAVE_QUEUE
+ if (dbp->type == DB_QUEUE) {
+ ret = __qam_delete(dbc, key);
+ F_CLR(key, DB_DBT_ISSET);
+ goto done;
+ }
+#endif
+
+ /* Fetch the first record. */
+ if ((ret = __db_c_get(dbc, key, &data, f_init)) != 0)
+ goto err;
+
+#ifdef HAVE_HASH
+ if (dbp->type == DB_HASH && dbc->internal->opd == NULL) {
ret = __ham_quick_delete(dbc);
goto done;
}
+#endif
+ if ((dbp->type == DB_BTREE || dbp->type == DB_RECNO) &&
+ !F_ISSET(dbp, DB_AM_DUP)) {
+ ret = dbc->c_am_del(dbc);
+ goto done;
+ }
+ } else if ((ret = __db_c_get(dbc, key, &data, f_init)) != 0)
+ goto err;
+
+ /* Walk through the set of key/data pairs, deleting as we go. */
for (;;) {
if ((ret = __db_c_del(dbc, 0)) != 0)
break;
- if ((ret = __db_c_get(dbc, &lkey, &data, f_next)) != 0) {
+ F_SET(key, DB_DBT_ISSET);
+ F_SET(&data, DB_DBT_ISSET);
+ if ((ret = __db_c_get(dbc, key, &data, f_next)) != 0) {
if (ret == DB_NOTFOUND)
ret = 0;
break;
@@ -554,21 +567,11 @@ __db_associate(dbp, txn, sdbp, callback, flags)
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_pp;
-
- 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.
+ * 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. Do this first so that the databases remain unassociated on
+ * error.
*/
build = 0;
if (LF_ISSET(DB_CREATE)) {
@@ -590,10 +593,6 @@ __db_associate(dbp, txn, sdbp, callback, flags)
ret = 0;
}
- /*
- * Secondary cursors have special refcounting close
- * methods. Be careful.
- */
if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
ret = t_ret;
@@ -605,17 +604,34 @@ __db_associate(dbp, txn, sdbp, callback, flags)
}
/*
+ * Set up the database handle as a secondary.
+ */
+ 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_pp;
+
+ F_SET(sdbp, DB_AM_SECONDARY);
+
+ if (LF_ISSET(DB_IMMUTABLE_KEY))
+ FLD_SET(sdbp->s_assoc_flags, DB_ASSOC_IMMUTABLE_KEY);
+
+ /*
* 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);
+ MUTEX_LOCK(dbenv, dbp->mutex);
/* See __db_s_next for an explanation of secondary refcounting. */
- DB_ASSERT(sdbp->s_refcnt == 0);
+ DB_ASSERT(dbenv, sdbp->s_refcnt == 0);
sdbp->s_refcnt = 1;
LIST_INSERT_HEAD(&dbp->s_secondaries, sdbp, s_links);
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
if (build) {
/*
@@ -650,13 +666,14 @@ __db_associate(dbp, txn, sdbp, callback, flags)
continue;
goto err;
}
+ SWAP_IF_NEEDED(sdbp, &key);
if ((ret = __db_c_put(sdbc,
&skey, &key, DB_UPDATE_SECONDARY)) != 0) {
- FREE_IF_NEEDED(sdbp, &skey);
+ FREE_IF_NEEDED(dbenv, &skey);
goto err;
}
-
- FREE_IF_NEEDED(sdbp, &skey);
+ SWAP_IF_NEEDED(sdbp, &key);
+ FREE_IF_NEEDED(dbenv, &skey);
}
if (ret == DB_NOTFOUND)
ret = 0;
@@ -685,8 +702,7 @@ __db_secondary_get(sdbp, txn, skey, data, flags)
DBT *skey, *data;
u_int32_t flags;
{
-
- DB_ASSERT(F_ISSET(sdbp, DB_AM_SECONDARY));
+ DB_ASSERT(sdbp->dbenv, F_ISSET(sdbp, DB_AM_SECONDARY));
return (__db_pget_pp(sdbp, txn, skey, NULL, data, flags));
}
@@ -703,13 +719,15 @@ __db_secondary_close(sdbp, flags)
DB *sdbp;
u_int32_t flags;
{
+ DB_ENV *dbenv;
DB *primary;
int doclose;
doclose = 0;
primary = sdbp->s_primary;
+ dbenv = primary->dbenv;
- MUTEX_THREAD_LOCK(primary->dbenv, primary->mutexp);
+ MUTEX_LOCK(dbenv, primary->mutex);
/*
* Check the refcount--if it was at 1 when we were called, no
* thread is currently updating this secondary through the primary,
@@ -719,13 +737,13 @@ __db_secondary_close(sdbp, flags)
* 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);
+ DB_ASSERT(dbenv, 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);
+ MUTEX_UNLOCK(dbenv, primary->mutex);
/*
* sdbp->close is this function; call the real one explicitly if
@@ -747,9 +765,11 @@ __db_append_primary(dbc, key, data)
DB *dbp, *sdbp;
DBC *sdbc, *pdbc;
DBT oldpkey, pkey, pdata, skey;
+ DB_ENV *dbenv;
int cmp, ret, t_ret;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
sdbp = NULL;
ret = 0;
@@ -793,23 +813,23 @@ __db_append_primary(dbc, key, data)
* 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)) {
+ if ((ret = __db_s_first(dbp, &sdbp)) != 0)
+ goto err;
+ for (; 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;
+ goto err;
}
if ((ret = __db_cursor_int(sdbp, dbc->txn, sdbp->type,
PGNO_INVALID, 0, dbc->locker, &sdbc)) != 0) {
- FREE_IF_NEEDED(sdbp, &skey);
+ FREE_IF_NEEDED(dbenv, &skey);
goto err;
}
- if (CDB_LOCKING(sdbp->dbenv)) {
- DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ if (CDB_LOCKING(dbenv)) {
+ DB_ASSERT(dbenv, sdbc->mylock.off == LOCK_INVALID);
F_SET(sdbc, DBC_WRITER);
}
@@ -832,10 +852,9 @@ __db_append_primary(dbc, key, data)
* This needs to use the right free function
* as soon as this is possible.
*/
- __os_ufree(sdbp->dbenv,
- oldpkey.data);
+ __os_ufree(dbenv, oldpkey.data);
if (cmp != 0) {
- __db_err(sdbp->dbenv, "%s%s",
+ __db_errx(dbenv, "%s%s",
"Append results in a non-unique secondary key in",
" an index not configured to support duplicates");
ret = EINVAL;
@@ -847,11 +866,10 @@ __db_append_primary(dbc, key, data)
ret = __db_c_put(sdbc, &skey, key, DB_UPDATE_SECONDARY);
-err1: FREE_IF_NEEDED(sdbp, &skey);
+err1: FREE_IF_NEEDED(dbenv, &skey);
if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
ret = t_ret;
-
if (ret != 0)
goto err;
}
diff --git a/db/db/db_auto.c b/db/db/db_auto.c
index b0d479dc8..f9cdedd7f 100644
--- a/db/db/db_auto.c
+++ b/db/db/db_auto.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -23,11 +16,11 @@
* PUBLIC: const DBT *, const DBT *, DB_LSN *));
*/
int
-__db_addrem_log(dbp, txnid, ret_lsnp, flags,
+__db_addrem_log(dbp, txnp, ret_lsnp, flags,
opcode, pgno, indx, nbytes, hdr,
dbt, pagelsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -58,30 +51,31 @@ __db_addrem_log(dbp, txnid, ret_lsnp, flags,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -101,7 +95,7 @@ __db_addrem_log(dbp, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -175,18 +169,25 @@ __db_addrem_log(dbp, txnid, ret_lsnp, flags,
bp += dbt->size;
}
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -205,20 +206,21 @@ __db_addrem_log(dbp, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_addrem_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -242,13 +244,14 @@ __db_addrem_read(dbenv, recbuf, argpp)
sizeof(__db_addrem_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -298,11 +301,11 @@ __db_addrem_read(dbenv, recbuf, argpp)
* PUBLIC: const DBT *, DB_LSN *, DB_LSN *, DB_LSN *));
*/
int
-__db_big_log(dbp, txnid, ret_lsnp, flags,
+__db_big_log(dbp, txnp, ret_lsnp, flags,
opcode, pgno, prev_pgno, next_pgno, dbt,
pagelsn, prevlsn, nextlsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -334,30 +337,31 @@ __db_big_log(dbp, txnid, ret_lsnp, flags,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -378,7 +382,7 @@ __db_big_log(dbp, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -441,30 +445,49 @@ __db_big_log(dbp, txnid, ret_lsnp, flags,
bp += dbt->size;
}
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- if (prevlsn != NULL)
+ if (prevlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(prevlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, prevlsn) != 0))
+ return (ret);
+ }
memcpy(bp, prevlsn, sizeof(*prevlsn));
- else
+ } else
memset(bp, 0, sizeof(*prevlsn));
bp += sizeof(*prevlsn);
- if (nextlsn != NULL)
+ if (nextlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(nextlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, nextlsn) != 0))
+ return (ret);
+ }
memcpy(bp, nextlsn, sizeof(*nextlsn));
- else
+ } else
memset(bp, 0, sizeof(*nextlsn));
bp += sizeof(*nextlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -483,20 +506,21 @@ __db_big_log(dbp, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_big_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -520,13 +544,14 @@ __db_big_read(dbenv, recbuf, argpp)
sizeof(__db_big_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -575,9 +600,9 @@ __db_big_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t, int32_t, DB_LSN *));
*/
int
-__db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, adjust, lsn)
+__db_ovref_log(dbp, txnp, ret_lsnp, flags, pgno, adjust, lsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -604,30 +629,31 @@ __db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, adjust, lsn)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -643,7 +669,7 @@ __db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, adjust, lsn)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -687,18 +713,25 @@ __db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, adjust, lsn)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -717,20 +750,21 @@ __db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, adjust, lsn)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_ovref_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -754,13 +788,14 @@ __db_ovref_read(dbenv, recbuf, argpp)
sizeof(__db_ovref_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -785,15 +820,79 @@ __db_ovref_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __db_relink_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_relink_42_args **));
+ */
+int
+__db_relink_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_relink_42_args **argpp;
+{
+ __db_relink_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_relink_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ 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(&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,
+__db_debug_log(dbenv, txnp, ret_lsnp, flags,
op, fileid, key, data, arg_flags)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *op;
@@ -819,13 +918,15 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
@@ -835,10 +936,9 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -853,7 +953,7 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -926,12 +1026,13 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -950,20 +1051,21 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_debug_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -987,13 +1089,14 @@ __db_debug_read(dbenv, recbuf, argpp)
sizeof(__db_debug_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1033,9 +1136,9 @@ __db_debug_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t, DB_LSN *));
*/
int
-__db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, prevlsn)
+__db_noop_log(dbp, txnp, ret_lsnp, flags, pgno, prevlsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1061,30 +1164,31 @@ __db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, prevlsn)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1099,7 +1203,7 @@ __db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, prevlsn)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1139,18 +1243,25 @@ __db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, prevlsn)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (prevlsn != NULL)
+ if (prevlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(prevlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, prevlsn) != 0))
+ return (ret);
+ }
memcpy(bp, prevlsn, sizeof(*prevlsn));
- else
+ } else
memset(bp, 0, sizeof(*prevlsn));
bp += sizeof(*prevlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1169,20 +1280,21 @@ __db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, prevlsn)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_noop_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1206,13 +1318,14 @@ __db_noop_read(dbenv, recbuf, argpp)
sizeof(__db_noop_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1233,15 +1346,76 @@ __db_noop_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __db_pg_alloc_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_pg_alloc_42_args **));
+ */
+int
+__db_pg_alloc_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_alloc_42_args **argpp;
+{
+ __db_pg_alloc_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_alloc_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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_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, db_pgno_t));
*/
int
-__db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pgno, ptype,
+__db_pg_alloc_log(dbp, txnp, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pgno, ptype,
next, last_pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
DB_LSN * meta_lsn;
@@ -1272,30 +1446,31 @@ __db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pg
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1315,7 +1490,7 @@ __db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pg
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1351,9 +1526,15 @@ __db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pg
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (meta_lsn != NULL)
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
+ } else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
@@ -1361,9 +1542,15 @@ __db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pg
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (page_lsn != NULL)
+ if (page_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(page_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, page_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, page_lsn, sizeof(*page_lsn));
- else
+ } else
memset(bp, 0, sizeof(*page_lsn));
bp += sizeof(*page_lsn);
@@ -1383,12 +1570,13 @@ __db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pg
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1407,20 +1595,21 @@ __db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pg
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_pg_alloc_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1445,13 +1634,14 @@ __db_pg_alloc_read(dbenv, recbuf, argpp)
sizeof(__db_pg_alloc_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1491,15 +1681,75 @@ __db_pg_alloc_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __db_pg_free_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_pg_free_42_args **));
+ */
+int
+__db_pg_free_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_free_42_args **argpp;
+{
+ __db_pg_free_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_free_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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_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, db_pgno_t));
*/
int
-__db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next,
+__db_pg_free_log(dbp, txnp, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next,
last_pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1529,30 +1779,31 @@ __db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1571,7 +1822,7 @@ __db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1611,9 +1862,15 @@ __db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (meta_lsn != NULL)
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
+ } else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
@@ -1640,12 +1897,13 @@ __db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1664,20 +1922,21 @@ __db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_pg_free_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1701,13 +1960,14 @@ __db_pg_free_read(dbenv, recbuf, argpp)
sizeof(__db_pg_free_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1749,9 +2009,9 @@ __db_pg_free_read(dbenv, recbuf, argpp)
* 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_cksum_log(dbenv, txnp, ret_lsnp, flags)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
{
@@ -1772,29 +2032,30 @@ __db_cksum_log(dbenv, txnid, ret_lsnp, flags)
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN);
@@ -1804,7 +2065,7 @@ __db_cksum_log(dbenv, txnid, ret_lsnp, flags)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1836,12 +2097,13 @@ __db_cksum_log(dbenv, txnid, ret_lsnp, flags)
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1860,20 +2122,21 @@ __db_cksum_log(dbenv, txnid, ret_lsnp, flags)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_cksum_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1896,13 +2159,14 @@ __db_cksum_read(dbenv, recbuf, argpp)
sizeof(__db_cksum_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1912,15 +2176,81 @@ __db_cksum_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __db_pg_freedata_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_pg_freedata_42_args **));
+ */
+int
+__db_pg_freedata_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_freedata_42_args **argpp;
+{
+ __db_pg_freedata_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_freedata_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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_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, db_pgno_t, const DBT *));
*/
int
-__db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next,
+__db_pg_freedata_log(dbp, txnp, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next,
last_pgno, data)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1951,30 +2281,31 @@ __db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, hea
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1994,7 +2325,7 @@ __db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, hea
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2034,9 +2365,15 @@ __db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, hea
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (meta_lsn != NULL)
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
+ } else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
@@ -2074,12 +2411,13 @@ __db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, hea
bp += data->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2098,20 +2436,21 @@ __db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, hea
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_pg_freedata_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2136,13 +2475,14 @@ __db_pg_freedata_read(dbenv, recbuf, argpp)
sizeof(__db_pg_freedata_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2191,9 +2531,9 @@ __db_pg_freedata_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t));
*/
int
-__db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, pgno)
+__db_pg_prepare_log(dbp, txnp, ret_lsnp, flags, pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -2218,30 +2558,31 @@ __db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, pgno)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -2255,7 +2596,7 @@ __db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, pgno)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2295,12 +2636,13 @@ __db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, pgno)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2319,20 +2661,21 @@ __db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, pgno)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_pg_prepare_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2357,13 +2700,14 @@ __db_pg_prepare_read(dbenv, recbuf, argpp)
sizeof(__db_pg_prepare_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2386,9 +2730,9 @@ __db_pg_prepare_read(dbenv, recbuf, argpp)
* PUBLIC: db_pgno_t));
*/
int
-__db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next)
+__db_pg_new_log(dbp, txnp, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -2417,30 +2761,31 @@ __db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -2458,7 +2803,7 @@ __db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2498,9 +2843,15 @@ __db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (meta_lsn != NULL)
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
+ } else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
@@ -2523,12 +2874,13 @@ __db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2547,20 +2899,21 @@ __db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_pg_new_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2584,13 +2937,14 @@ __db_pg_new_read(dbenv, recbuf, argpp)
sizeof(__db_pg_new_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2629,9 +2983,9 @@ __db_pg_new_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, db_pgno_t, const DBT *, const DBT *));
*/
int
-__db_pg_init_log(dbp, txnid, ret_lsnp, flags, pgno, header, data)
+__db_pg_init_log(dbp, txnp, ret_lsnp, flags, pgno, header, data)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -2658,30 +3012,31 @@ __db_pg_init_log(dbp, txnid, ret_lsnp, flags, pgno, header, data)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -2697,7 +3052,7 @@ __db_pg_init_log(dbp, txnid, ret_lsnp, flags, pgno, header, data)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2759,12 +3114,13 @@ __db_pg_init_log(dbp, txnid, ret_lsnp, flags, pgno, header, data)
bp += data->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2783,20 +3139,21 @@ __db_pg_init_log(dbp, txnid, ret_lsnp, flags, pgno, header, data)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__db_pg_init_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2820,13 +3177,14 @@ __db_pg_init_read(dbenv, recbuf, argpp)
sizeof(__db_pg_init_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2856,6 +3214,278 @@ __db_pg_init_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __db_pg_sort_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: const DBT *));
+ */
+int
+__db_pg_sort_log(dbp, txnp, ret_lsnp, flags, meta, meta_lsn, last_free, last_lsn, last_pgno,
+ list)
+ DB *dbp;
+ DB_TXN *txnp;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t meta;
+ DB_LSN * meta_lsn;
+ db_pgno_t last_free;
+ DB_LSN * last_lsn;
+ db_pgno_t last_pgno;
+ const DBT *list;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn, *rlsnp;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(lr, NULL);
+
+ rectype = DB___db_pg_sort;
+ npad = 0;
+ rlsnp = ret_lsnp;
+
+ ret = 0;
+
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
+ is_durable = 0;
+ } else
+ is_durable = 1;
+
+ if (txnp == NULL) {
+ txn_num = 0;
+ lsnp = &null_lsn;
+ null_lsn.file = null_lsn.offset = 0;
+ } else {
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
+ return (ret);
+ /*
+ * We need to assign begin_lsn while holding region mutex.
+ * That assignment is done inside the DbEnv->log_put call,
+ * so pass in the appropriate memory location to be filled
+ * in by the log_put code.
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
+ }
+
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ 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(*last_lsn)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (list == NULL ? 0 : list->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (is_durable || txnp == NULL) {
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+ __os_free(dbenv, lr);
+ return (ret);
+ }
+#else
+ logrec.data = lr->data;
+#endif
+ }
+ 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)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)meta;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
+ memcpy(bp, meta_lsn, sizeof(*meta_lsn));
+ } else
+ memset(bp, 0, sizeof(*meta_lsn));
+ bp += sizeof(*meta_lsn);
+
+ uinttmp = (u_int32_t)last_free;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (last_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(last_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, last_lsn) != 0))
+ return (ret);
+ }
+ memcpy(bp, last_lsn, sizeof(*last_lsn));
+ } else
+ memset(bp, 0, sizeof(*last_lsn));
+ bp += sizeof(*last_lsn);
+
+ uinttmp = (u_int32_t)last_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (list == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &list->size, sizeof(list->size));
+ bp += sizeof(list->size);
+ memcpy(bp, list->data, list->size);
+ bp += list->size;
+ }
+
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+ if (is_durable || txnp == NULL) {
+ if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
+ if (rlsnp != ret_lsnp)
+ *ret_lsnp = *rlsnp;
+ }
+ } else {
+#ifdef DIAGNOSTIC
+ /*
+ * 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));
+
+ ret = __log_put(dbenv,
+ rlsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+#else
+ ret = 0;
+#endif
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
+ LSN_NOT_LOGGED(*ret_lsnp);
+ }
+
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_pg_sort_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
+#endif
+
+#ifdef DIAGNOSTIC
+ __os_free(dbenv, logrec.data);
+#else
+ if (is_durable || txnp == NULL)
+ __os_free(dbenv, logrec.data);
+#endif
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __db_pg_sort_read __P((DB_ENV *, void *, __db_pg_sort_args **));
+ */
+int
+__db_pg_sort_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_sort_args **argpp;
+{
+ __db_pg_sort_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_sort_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->meta = (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->last_free = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->last_lsn, bp, sizeof(argp->last_lsn));
+ bp += sizeof(argp->last_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->last_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memset(&argp->list, 0, sizeof(argp->list));
+ memcpy(&argp->list.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->list.data = bp;
+ bp += argp->list.size;
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
* PUBLIC: int __db_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
*/
@@ -2903,5 +3533,8 @@ __db_init_recover(dbenv, dtabp, dtabsizep)
if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
__db_pg_init_recover, DB___db_pg_init)) != 0)
return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_sort_recover, DB___db_pg_sort)) != 0)
+ return (ret);
return (0);
}
diff --git a/db/db/db_autop.c b/db/db/db_autop.c
index 8f97a7cf5..a212f5faa 100644
--- a/db/db/db_autop.c
+++ b/db/db/db_autop.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -34,20 +27,18 @@ __db_addrem_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_addrem_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_addrem%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_addrem%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -89,20 +80,18 @@ __db_big_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_big_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_big%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_big%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -140,20 +129,18 @@ __db_ovref_print(dbenv, dbtp, lsnp, notused2, notused3)
__db_ovref_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_ovref_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_ovref%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_ovref%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tadjust: %ld\n", (long)argp->adjust);
@@ -165,6 +152,49 @@ __db_ovref_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __db_relink_42_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_relink_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_relink_42_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __db_relink_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_relink_42%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (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);
+ (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_debug_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -181,20 +211,18 @@ __db_debug_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_debug_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_debug%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_debug%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\top: ");
for (i = 0; i < argp->op.size; i++) {
ch = ((u_int8_t *)argp->op.data)[i];
@@ -235,20 +263,18 @@ __db_noop_print(dbenv, dbtp, lsnp, notused2, notused3)
__db_noop_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_noop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_noop%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_noop%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tprevlsn: [%lu][%lu]\n",
@@ -259,6 +285,47 @@ __db_noop_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __db_pg_alloc_42_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_alloc_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_alloc_42_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_alloc_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_alloc_42%s: rec: %lu txnp %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->txnp->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_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -273,20 +340,18 @@ __db_pg_alloc_print(dbenv, dbtp, lsnp, notused2, notused3)
__db_pg_alloc_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
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,
+ "[%lu][%lu]__db_pg_alloc%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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);
@@ -303,6 +368,52 @@ __db_pg_alloc_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __db_pg_free_42_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_free_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_free_42_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_free_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_free_42%s: rec: %lu txnp %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->txnp->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_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -319,20 +430,18 @@ __db_pg_free_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
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,
+ "[%lu][%lu]__db_pg_free%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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",
@@ -366,20 +475,70 @@ __db_cksum_print(dbenv, dbtp, lsnp, notused2, notused3)
__db_cksum_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_cksum_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_cksum%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_cksum%s: rec: %lu txnp %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->txnp->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_pg_freedata_42_print __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_freedata_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_freedata_42_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_freedata_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_freedata_42%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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);
@@ -402,20 +561,18 @@ __db_pg_freedata_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_pg_freedata_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_pg_freedata%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_pg_freedata%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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",
@@ -455,20 +612,18 @@ __db_pg_prepare_print(dbenv, dbtp, lsnp, notused2, notused3)
__db_pg_prepare_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
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,
+ "[%lu][%lu]__db_pg_prepare%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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");
@@ -493,20 +648,18 @@ __db_pg_new_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
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,
+ "[%lu][%lu]__db_pg_new%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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",
@@ -541,20 +694,18 @@ __db_pg_init_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __db_pg_init_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__db_pg_init%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__db_pg_init%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\theader: ");
@@ -575,6 +726,54 @@ __db_pg_init_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __db_pg_sort_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_sort_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_sort_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_sort_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_sort%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmeta: %lu\n", (u_long)argp->meta);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
+ (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
+ (void)printf("\tlast_free: %lu\n", (u_long)argp->last_free);
+ (void)printf("\tlast_lsn: [%lu][%lu]\n",
+ (u_long)argp->last_lsn.file, (u_long)argp->last_lsn.offset);
+ (void)printf("\tlast_pgno: %lu\n", (u_long)argp->last_pgno);
+ (void)printf("\tlist: ");
+ for (i = 0; i < argp->list.size; i++) {
+ ch = ((u_int8_t *)argp->list.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_init_print __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
*/
@@ -622,5 +821,8 @@ __db_init_print(dbenv, dtabp, dtabsizep)
if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
__db_pg_init_print, DB___db_pg_init)) != 0)
return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_sort_print, DB___db_pg_sort)) != 0)
+ return (ret);
return (0);
}
diff --git a/db/db/db_cam.c b/db/db/db_cam.c
index 075765072..af88d955e 100644
--- a/db/db/db_cam.c
+++ b/db/db/db_cam.c
@@ -1,57 +1,54 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_cam.c,v 11.156 2004/09/28 18:07:32 ubell Exp $
+ * $Id: db_cam.c,v 12.43 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
#include "dbinc/qam.h"
+#include "dbinc/txn.h"
static int __db_buildpartial __P((DB *, DBT *, DBT *, DBT *));
static int __db_c_cleanup __P((DBC *, DBC *, int));
+static int __db_c_del_oldskey __P((DB *, DBC *, DBT *, DBT *, DBT *));
static int __db_c_del_secondary __P((DBC *));
static int __db_c_pget_recno __P((DBC *, DBT *, DBT *, u_int32_t));
+static int __db_s_count __P((DB *));
static int __db_wrlock_err __P((DB_ENV *));
-#define CDB_LOCKING_INIT(dbp, dbc) \
+#define CDB_LOCKING_INIT(dbenv, dbc) \
/* \
* If we are running CDB, this had better be either a write \
* cursor or an immediate writer. If it's a regular writer, \
* that means we have an IWRITE lock and we need to upgrade \
* it to a write lock. \
*/ \
- if (CDB_LOCKING((dbp)->dbenv)) { \
+ if (CDB_LOCKING(dbenv)) { \
if (!F_ISSET(dbc, DBC_WRITECURSOR | DBC_WRITER)) \
- return (__db_wrlock_err(dbp->dbenv)); \
+ return (__db_wrlock_err(dbenv)); \
\
if (F_ISSET(dbc, DBC_WRITECURSOR) && \
- (ret = __lock_get((dbp)->dbenv, \
+ (ret = __lock_get(dbenv, \
(dbc)->locker, DB_LOCK_UPGRADE, &(dbc)->lock_dbt, \
DB_LOCK_WRITE, &(dbc)->mylock)) != 0) \
return (ret); \
}
-#define CDB_LOCKING_DONE(dbp, dbc) \
+#define CDB_LOCKING_DONE(dbenv, dbc) \
/* Release the upgraded lock. */ \
if (F_ISSET(dbc, DBC_WRITECURSOR)) \
(void)__lock_downgrade( \
- (dbp)->dbenv, &(dbc)->mylock, DB_LOCK_IWRITE, 0);
+ dbenv, &(dbc)->mylock, DB_LOCK_IWRITE, 0);
+
/*
* __db_c_close --
* DBC->c_close.
@@ -66,6 +63,7 @@ __db_c_close(dbc)
DBC *opd;
DBC_INTERNAL *cp;
DB_ENV *dbenv;
+ DB_TXN *txn;
int ret, t_ret;
dbp = dbc->dbp;
@@ -85,16 +83,18 @@ __db_c_close(dbc)
* access specific cursor close routine, btree depends on having that
* order of operations.
*/
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
if (opd != NULL) {
+ DB_ASSERT(dbenv, F_ISSET(opd, DBC_ACTIVE));
F_CLR(opd, DBC_ACTIVE);
TAILQ_REMOVE(&dbp->active_queue, opd, links);
}
+ DB_ASSERT(dbenv, F_ISSET(dbc, DBC_ACTIVE));
F_CLR(dbc, DBC_ACTIVE);
TAILQ_REMOVE(&dbp->active_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
/* Call the access specific cursor close routine. */
if ((t_ret =
@@ -121,19 +121,23 @@ __db_c_close(dbc)
memset(&opd->mylock, 0, sizeof(opd->mylock));
}
- if (dbc->txn != NULL)
- dbc->txn->cursors--;
+ if ((txn = dbc->txn) != NULL)
+ txn->cursors--;
/* Move the cursor(s) to the free queue. */
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
if (opd != NULL) {
- if (dbc->txn != NULL)
- dbc->txn->cursors--;
+ if (txn != NULL)
+ txn->cursors--;
TAILQ_INSERT_TAIL(&dbp->free_queue, opd, links);
opd = NULL;
}
TAILQ_INSERT_TAIL(&dbp->free_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
+
+ if (txn != NULL && F_ISSET(txn, TXN_PRIVATE) && txn->cursors == 0 &&
+ (t_ret = __txn_commit(txn, 0)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -156,9 +160,9 @@ __db_c_destroy(dbc)
dbenv = dbp->dbenv;
/* Remove the cursor from the free queue. */
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
TAILQ_REMOVE(&dbp->free_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
/* Free up allocated memory. */
if (dbc->my_rskey.data != NULL)
@@ -176,7 +180,8 @@ __db_c_destroy(dbc)
*/
if (LOCKING_ON(dbenv) &&
F_ISSET(dbc, DBC_OWN_LID) &&
- (t_ret = __lock_id_free(dbenv, dbc->lid)) != 0 && ret == 0)
+ (t_ret = __lock_id_free(dbenv,
+ ((DB_LOCKER *)dbc->lref)->id)) != 0 && ret == 0)
ret = t_ret;
__os_free(dbenv, dbc);
@@ -243,9 +248,11 @@ __db_c_del(dbc, flags)
{
DB *dbp;
DBC *opd;
+ DB_ENV *dbenv;
int ret, t_ret;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
/*
* Cursor Cleanup Note:
@@ -255,7 +262,7 @@ __db_c_del(dbc, flags)
* underlying functions.
*/
- CDB_LOCKING_INIT(dbp, dbc);
+ CDB_LOCKING_INIT(dbenv, dbc);
/*
* If we're a secondary index, and DB_UPDATE_SECONDARY isn't set
@@ -298,7 +305,7 @@ __db_c_del(dbc, flags)
* to explicitly downgrade this lock. The closed cursor
* may only have had a read lock.
*/
- if (F_ISSET(dbc->dbp, DB_AM_DIRTY) &&
+ if (F_ISSET(dbc->dbp, DB_AM_READ_UNCOMMITTED) &&
dbc->internal->lock_mode == DB_LOCK_WRITE) {
if ((t_ret =
__TLPUT(dbc, dbc->internal->lock)) != 0 && ret == 0)
@@ -307,7 +314,7 @@ __db_c_del(dbc, flags)
dbc->internal->lock_mode = DB_LOCK_WWRITE;
}
-done: CDB_LOCKING_DONE(dbp, dbc);
+done: CDB_LOCKING_DONE(dbenv, dbc);
return (ret);
}
@@ -413,8 +420,8 @@ __db_c_idup(dbc_orig, dbcp, flags)
}
/* Copy the locking flags to the new cursor. */
- F_SET(dbc_n,
- F_ISSET(dbc_orig, DBC_WRITECURSOR | DBC_DIRTY_READ | DBC_DEGREE_2));
+ F_SET(dbc_n, F_ISSET(dbc_orig,
+ DBC_READ_COMMITTED | DBC_READ_UNCOMMITTED | DBC_WRITECURSOR));
/*
* If we're in CDB and this isn't an offpage dup cursor, then
@@ -502,11 +509,16 @@ __db_c_get(dbc_arg, key, data, flags)
DB *dbp;
DBC *dbc, *dbc_n, *opd;
DBC_INTERNAL *cp, *cp_n;
+ DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
db_pgno_t pgno;
- u_int32_t multi, tmp_dirty, tmp_flags, tmp_rmw;
+ u_int32_t multi, orig_ulen, tmp_flags, tmp_read_uncommitted, tmp_rmw;
u_int8_t type;
- int ret, t_ret;
+ int key_small, ret, t_ret;
+
+ COMPQUIET(orig_ulen, 0);
+
+ key_small = 0;
/*
* Cursor Cleanup Note:
@@ -518,6 +530,7 @@ __db_c_get(dbc_arg, key, data, flags)
* functions.
*/
dbp = dbc_arg->dbp;
+ dbenv = dbp->dbenv;
mpf = dbp->mpf;
dbc_n = NULL;
opd = NULL;
@@ -526,8 +539,10 @@ __db_c_get(dbc_arg, key, data, flags)
tmp_rmw = LF_ISSET(DB_RMW);
LF_CLR(DB_RMW);
- tmp_dirty = LF_ISSET(DB_DIRTY_READ);
- LF_CLR(DB_DIRTY_READ);
+ tmp_read_uncommitted =
+ LF_ISSET(DB_READ_UNCOMMITTED) &&
+ !F_ISSET(dbc_arg, DBC_READ_UNCOMMITTED);
+ LF_CLR(DB_READ_UNCOMMITTED);
multi = LF_ISSET(DB_MULTIPLE|DB_MULTIPLE_KEY);
LF_CLR(DB_MULTIPLE|DB_MULTIPLE_KEY);
@@ -539,18 +554,31 @@ __db_c_get(dbc_arg, key, data, flags)
if (flags == DB_GET_RECNO) {
if (tmp_rmw)
F_SET(dbc_arg, DBC_RMW);
- if (tmp_dirty)
- F_SET(dbc_arg, DBC_DIRTY_READ);
+ if (tmp_read_uncommitted)
+ F_SET(dbc_arg, DBC_READ_UNCOMMITTED);
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);
+ if (tmp_read_uncommitted)
+ F_CLR(dbc_arg, DBC_READ_UNCOMMITTED);
return (ret);
}
if (flags == DB_CONSUME || flags == DB_CONSUME_WAIT)
- CDB_LOCKING_INIT(dbp, dbc_arg);
+ CDB_LOCKING_INIT(dbenv, dbc_arg);
+
+ /*
+ * Don't return the key or data if it was passed to us. Ignore the
+ * application's DBT if there is a custom comparator: it might be a
+ * partial key containing only the unique identifier.
+ */
+ if ((flags == DB_GET_BOTH || flags == DB_GET_BOTH_RANGE ||
+ flags == DB_SET) &&
+ ((BTREE *)dbp->bt_internal)->bt_compare == __bam_defcmp)
+ F_SET(key, DB_DBT_ISSET);
+
+ if (flags == DB_GET_BOTH && dbp->dup_compare == NULL)
+ F_SET(data, DB_DBT_ISSET);
/*
* If we have an off-page duplicates cursor, and the operation applies
@@ -568,12 +596,13 @@ __db_c_get(dbc_arg, key, data, flags)
(flags == DB_CURRENT || flags == DB_GET_BOTHC ||
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_POSITION)) != 0)
- return (ret);
+ goto err;
+ if (F_ISSET(dbc_arg, DBC_TRANSIENT))
+ opd = cp->opd;
+ else if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITION)) != 0)
+ goto err;
- 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:
@@ -586,12 +615,18 @@ __db_c_get(dbc_arg, key, data, flags)
if ((ret = __db_c_close(opd)) != 0)
goto err;
opd = NULL;
+ if (F_ISSET(dbc_arg, DBC_TRANSIENT))
+ cp->opd = NULL;
break;
}
goto err;
default:
goto err;
}
+ } else if (cp->opd != NULL && F_ISSET(dbc_arg, DBC_TRANSIENT)) {
+ if ((ret = __db_c_close(cp->opd)) != 0)
+ goto err;
+ cp->opd = NULL;
}
/*
@@ -613,8 +648,8 @@ __db_c_get(dbc_arg, key, data, flags)
break;
}
- if (tmp_dirty)
- F_SET(dbc_arg, DBC_DIRTY_READ);
+ if (tmp_read_uncommitted)
+ F_SET(dbc_arg, DBC_READ_UNCOMMITTED);
/*
* If this cursor is going to be closed immediately, we don't
@@ -624,8 +659,8 @@ __db_c_get(dbc_arg, key, data, flags)
dbc_n = dbc_arg;
else {
ret = __db_c_idup(dbc_arg, &dbc_n, tmp_flags);
- if (tmp_dirty)
- F_CLR(dbc_arg, DBC_DIRTY_READ);
+ if (tmp_read_uncommitted)
+ F_CLR(dbc_arg, DBC_READ_UNCOMMITTED);
if (ret != 0)
goto err;
@@ -654,8 +689,8 @@ __db_c_get(dbc_arg, key, data, flags)
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);
+ if (tmp_read_uncommitted)
+ F_CLR(dbc_arg, DBC_READ_UNCOMMITTED);
F_CLR(dbc_n, DBC_MULTIPLE|DBC_MULTIPLE_KEY);
if (ret != 0)
goto err;
@@ -691,8 +726,7 @@ __db_c_get(dbc_arg, key, data, flags)
tmp_flags = flags;
break;
default:
- ret =
- __db_unknown_flag(dbp->dbenv, "__db_c_get", flags);
+ ret = __db_unknown_flag(dbenv, "__db_c_get", flags);
goto err;
}
if ((ret = cp_n->opd->c_am_get(
@@ -716,13 +750,28 @@ 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(mpf, &cp_n->pgno, 0, &cp_n->page)) != 0)
+ if (cp_n->page == NULL && (ret = __memp_fget(mpf, &cp_n->pgno,
+ dbc_arg->txn, 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)
- goto err;
+ if ((ret = __db_ret(dbp, dbc_arg->txn,
+ cp_n->page, cp_n->indx, key,
+ &dbc_arg->rkey->data, &dbc_arg->rkey->ulen)) != 0) {
+ /*
+ * If the key DBT is too small, we still want to return
+ * the size of the data. Otherwise applications are
+ * forced to check each one with a separate call. We
+ * don't want to copy the data, so we set the ulen to
+ * zero before calling __db_ret.
+ */
+ if (ret == DB_BUFFER_SMALL &&
+ F_ISSET(data, DB_DBT_USERMEM)) {
+ key_small = 1;
+ orig_ulen = data->ulen;
+ data->ulen = 0;
+ } else
+ goto err;
+ }
}
if (multi != 0) {
/*
@@ -757,7 +806,7 @@ done: /*
* key.
*/
if (opd != NULL) {
- DB_ASSERT(cp_n->opd == NULL);
+ DB_ASSERT(dbenv, cp_n->opd == NULL);
cp_n->opd = opd;
opd = NULL;
}
@@ -774,8 +823,14 @@ done: /*
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 +
+ cp = dbc->internal;
+ if (cp->page == NULL &&
+ (ret = __memp_fget(mpf, &cp->pgno, dbc->txn,
+ 0, &cp->page)) != 0)
+ goto err;
+
+ type = TYPE(cp->page);
+ ret = __db_ret(dbp, dbc->txn, cp->page, cp->indx +
(type == P_LBTREE || type == P_HASH ? O_INDX : 0),
data, &dbc_arg->rdata->data, &dbc_arg->rdata->ulen);
}
@@ -793,11 +848,11 @@ err: /* Don't pass DB_DBT_ISSET back to application level, error or no. */
* about the referencing page or cursor we need
* to peek at the OPD cursor and get the lock here.
*/
- if (F_ISSET(dbc_arg->dbp, DB_AM_DIRTY) &&
+ if (F_ISSET(dbc_arg->dbp, DB_AM_READ_UNCOMMITTED) &&
F_ISSET((BTREE_CURSOR *)
dbc_arg->internal->opd->internal, C_DELETED))
if ((t_ret =
- dbc_arg->c_am_writelock(dbc_arg)) != 0 && ret != 0)
+ dbc_arg->c_am_writelock(dbc_arg)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __db_c_cleanup(
dbc_arg->internal->opd, opd, ret)) != 0 && ret == 0)
@@ -805,11 +860,18 @@ err: /* Don't pass DB_DBT_ISSET back to application level, error or no. */
}
- if ((t_ret = __db_c_cleanup(dbc_arg, dbc_n, ret)) != 0 && ret == 0)
+ if (key_small) {
+ data->ulen = orig_ulen;
+ if (ret == 0)
+ ret = DB_BUFFER_SMALL;
+ }
+
+ if ((t_ret = __db_c_cleanup(dbc_arg, dbc_n, ret)) != 0 &&
+ (ret == 0 || ret == DB_BUFFER_SMALL))
ret = t_ret;
if (flags == DB_CONSUME || flags == DB_CONSUME_WAIT)
- CDB_LOCKING_DONE(dbp, dbc_arg);
+ CDB_LOCKING_DONE(dbenv, dbc_arg);
return (ret);
}
@@ -828,10 +890,11 @@ __db_c_put(dbc_arg, key, data, flags)
DB_ENV *dbenv;
DB *dbp, *sdbp;
DBC *dbc_n, *oldopd, *opd, *sdbc, *pdbc;
- DBT olddata, oldpkey, oldskey, newdata, pkey, skey, temppkey, tempskey;
+ DBT olddata, oldpkey, newdata, pkey, temppkey, tempskey;
+ DBT *all_skeys, *skeyp;
db_pgno_t pgno;
- int cmp, have_oldrec, ispartial, nodel, re_pad, ret, rmw, t_ret;
- u_int32_t re_len, size, tmp_flags;
+ int cmp, have_oldrec, ispartial, nodel, re_pad, ret, s_count, t_ret;
+ u_int32_t re_len, rmw, size, tmp_flags;
/*
* Cursor Cleanup Note:
@@ -846,8 +909,9 @@ __db_c_put(dbc_arg, key, data, flags)
dbenv = dbp->dbenv;
sdbp = NULL;
pdbc = dbc_n = NULL;
+ all_skeys = NULL;
memset(&newdata, 0, sizeof(DBT));
- ret = 0;
+ ret = s_count = 0;
/*
* We do multiple cursor operations in some cases and subsequently
@@ -866,7 +930,7 @@ __db_c_put(dbc_arg, key, data, flags)
if (flags == DB_UPDATE_SECONDARY)
flags = DB_KEYLAST;
- CDB_LOCKING_INIT(dbp, dbc_arg);
+ CDB_LOCKING_INIT(dbenv, dbc_arg);
/*
* Check to see if we are a primary and have secondary indices.
@@ -934,6 +998,10 @@ __db_c_put(dbc_arg, key, data, flags)
* the old secondary in each.
*/
memset(&pkey, 0, sizeof(DBT));
+ s_count = __db_s_count(dbp);
+ if ((ret = __os_calloc(
+ dbenv, (u_int)s_count, sizeof(DBT), &all_skeys)) != 0)
+ goto err;
have_oldrec = nodel = 0;
/*
@@ -942,8 +1010,8 @@ __db_c_put(dbc_arg, key, data, 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);
+ DB_ASSERT(dbenv, flags == DB_CURRENT || flags == DB_KEYFIRST ||
+ flags == DB_KEYLAST || flags == DB_NOOVERWRITE);
/*
* We'll want to use DB_RMW in a few places, but it's only legal
@@ -972,11 +1040,7 @@ __db_c_put(dbc_arg, key, data, flags)
have_oldrec = 1; /* We've looked for the old record. */
} else {
- /*
- * 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.
- */
+ /* Set pkey so we can use &pkey everywhere instead of key. */
pkey.data = key->data;
pkey.size = key->size;
}
@@ -995,7 +1059,7 @@ __db_c_put(dbc_arg, key, data, flags)
goto err;
/* We should have gotten DB_CURRENT in step 1. */
- DB_ASSERT(flags != DB_CURRENT);
+ DB_ASSERT(dbenv, flags != DB_CURRENT);
ret = __db_c_get(pdbc, &pkey, &olddata, rmw | DB_SET);
if (ret == DB_KEYEMPTY || ret == DB_NOTFOUND) {
@@ -1011,8 +1075,10 @@ __db_c_put(dbc_arg, key, data, flags)
}
/*
- * Now build the new datum from olddata and the partial
- * data we were given.
+ * Now build the new datum from olddata and the partial data we
+ * were given. It's okay to do this if no record was returned
+ * above: a partial put on an empty record is allowed, if a
+ * little strange. The data is zero-padded.
*/
if ((ret =
__db_buildpartial(dbp, &olddata, data, &newdata)) != 0)
@@ -1071,15 +1137,25 @@ __db_c_put(dbc_arg, key, data, flags)
* 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)) {
+ for (ret = __db_s_first(dbp, &sdbp), skeyp = all_skeys;
+ sdbp != NULL && ret == 0;
+ ret = __db_s_next(&sdbp), ++skeyp) {
+ DB_ASSERT(dbenv, skeyp - all_skeys < s_count);
+ /*
+ * Don't process this secondary if the key is immutable and we
+ * know that the old record exists. This optimization can't be
+ * used if we have not checked for the old record yet.
+ */
+ if (have_oldrec && !nodel &&
+ FLD_ISSET(sdbp->s_assoc_flags, DB_ASSOC_IMMUTABLE_KEY))
+ continue;
+
/*
* 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) {
+ &pkey, ispartial ? &newdata : data, skeyp)) != 0) {
if (ret == DB_DONOTINDEX)
/*
* The callback returned a null value--don't
@@ -1088,7 +1164,24 @@ __db_c_put(dbc_arg, key, data, flags)
* any necessary deletes in step 5.
*/
continue;
- else
+ goto err;
+ }
+
+ /*
+ * If we have the old record, we can generate and remove the
+ * old secondary key now. We can also skip the secondary put
+ * if there is no change.
+ */
+ if (have_oldrec) {
+ /*
+ * Mark that the secondary key is set -- that is, the
+ * callback returned 0 rather than DB_DONOTINDEX.
+ */
+ F_SET(skeyp, DB_DBT_ISSET);
+ if ((ret = __db_c_del_oldskey(sdbp, dbc_arg,
+ skeyp, &pkey, &olddata)) == DB_KEYEXIST)
+ continue;
+ else if (ret != 0)
goto err;
}
@@ -1114,11 +1207,19 @@ __db_c_put(dbc_arg, key, data, flags)
* really have a lock.
*/
if (CDB_LOCKING(dbenv)) {
- DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ DB_ASSERT(dbenv, sdbc->mylock.off == LOCK_INVALID);
F_SET(sdbc, DBC_WRITER);
}
/*
+ * Swap the primary key to the byte order of this secondary, if
+ * necessary. By doing this now, we can compare directly
+ * against the data already in the secondary without having to
+ * swap it after reading.
+ */
+ SWAP_IF_NEEDED(sdbp, &pkey);
+
+ /*
* There are three cases here--
* 1) The secondary supports sorted duplicates.
* If we attempt to put a secondary/primary pair
@@ -1152,24 +1253,24 @@ __db_c_put(dbc_arg, key, data, flags)
memset(&oldpkey, 0, sizeof(DBT));
F_SET(&oldpkey, DB_DBT_MALLOC);
ret = __db_c_get(sdbc,
- &skey, &oldpkey, rmw | DB_SET);
+ skeyp, &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",
+ __db_errx(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)
+ }
+ 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;
+ tempskey.data = skeyp->data;
+ tempskey.size = skeyp->size;
memset(&temppkey, 0, sizeof(DBT));
temppkey.data = pkey.data;
temppkey.size = pkey.size;
@@ -1179,7 +1280,7 @@ __db_c_put(dbc_arg, key, data, flags)
goto skipput;
}
- ret = __db_c_put(sdbc, &skey, &pkey, DB_UPDATE_SECONDARY);
+ ret = __db_c_put(sdbc, skeyp, &pkey, DB_UPDATE_SECONDARY);
/*
* We don't know yet whether this was a put-overwrite that
@@ -1189,115 +1290,75 @@ __db_c_put(dbc_arg, key, data, flags)
if (ret == DB_KEYEXIST)
ret = 0;
-skipput: FREE_IF_NEEDED(sdbp, &skey)
+skipput: /* Make sure the primary key is back in native byte-order. */
+ SWAP_IF_NEEDED(sdbp, &pkey);
if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
goto err;
+
+ /*
+ * Mark that we have a key for this secondary so we can check
+ * it later before deleting the old one. We can't set it
+ * earlier or it would be cleared in the calls above.
+ */
+ F_SET(skeyp, DB_DBT_ISSET);
+
}
if (ret != 0)
goto err;
+ /*
+ * If we've already got the old primary key/data pair, the secondary
+ * updates are already done.
+ */
+ if (have_oldrec)
+ goto skip_s_update;
+
/* 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;
+ /* See the comments in step 2. This is real familiar. */
+ if ((ret = __db_c_idup(dbc_arg, &pdbc, 0)) != 0)
+ goto err;
+ DB_ASSERT(dbenv, 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;
/*
- * If we don't follow this goto, we do in fact have an old record
- * we may need to go delete. (Step 5).
+ * Check whether we do in fact have an old record we may need to
+ * 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;
-
+ for (ret = __db_s_first(dbp, &sdbp), skeyp = all_skeys;
+ sdbp != NULL && ret == 0;
+ ret = __db_s_next(&sdbp), skeyp++) {
+ DB_ASSERT(dbenv, skeyp - all_skeys < s_count);
/*
- * 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.
+ * Don't process this secondary if the key is immutable. We
+ * know that the old record exists, so this optimization can
+ * always be used.
*/
- 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);
- }
+ if (FLD_ISSET(sdbp->s_assoc_flags, DB_ASSOC_IMMUTABLE_KEY))
+ continue;
- 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)
+ ret = __db_c_del_oldskey(sdbp, dbc_arg, skeyp, &pkey, &olddata);
+ if (ret != 0 && ret != DB_KEYEXIST)
goto err;
}
+ if (ret != 0)
+ goto err;
/* Secondary index updates are now done. On to the "real" stuff. */
@@ -1328,9 +1389,8 @@ skip_s_update:
goto err;
}
- if ((ret = dbc_arg->c_am_writelock(dbc_arg)) != 0)
- return (ret);
- if ((ret = __db_c_dup(dbc_arg, &dbc_n, DB_POSITION)) != 0)
+ if ((ret = dbc_arg->c_am_writelock(dbc_arg)) != 0 ||
+ (ret = __db_c_dup(dbc_arg, &dbc_n, DB_POSITION)) != 0)
goto err;
opd = dbc_n->internal->opd;
if ((ret = opd->c_am_put(
@@ -1376,6 +1436,8 @@ skip_s_update:
dbc_n->internal->opd = opd;
+ if (flags == DB_NOOVERWRITE)
+ flags = DB_KEYLAST;
if ((ret = opd->c_am_put(
opd, key, data, flags, NULL)) != 0)
goto err;
@@ -1392,11 +1454,95 @@ err: /* Cleanup and cursor resolution. */
if (olddata.data != NULL)
__os_ufree(dbenv, olddata.data);
- CDB_LOCKING_DONE(dbp, dbc_arg);
+ CDB_LOCKING_DONE(dbenv, dbc_arg);
if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
ret = t_ret;
+ for (skeyp = all_skeys; skeyp - all_skeys < s_count; skeyp++)
+ FREE_IF_NEEDED(dbenv, skeyp);
+ if (all_skeys != NULL)
+ __os_free(dbenv, all_skeys);
+
+ return (ret);
+}
+
+/*
+ * __db_c_del_oldskey --
+ * Delete an old secondary key, if necessary.
+ * Returns DB_KEYEXIST if the new and old keys match..
+ */
+static int
+__db_c_del_oldskey(sdbp, dbc_arg, skey, pkey, olddata)
+ DB *sdbp;
+ DBC *dbc_arg;
+ DBT *skey, *pkey, *olddata;
+{
+ DB_ENV *dbenv;
+ DB *dbp;
+ DBC *sdbc;
+ DBT oldskey, temppkey, tempskey;
+ int ret, t_ret;
+ u_int32_t rmw;
+
+ sdbc = NULL;
+ dbp = sdbp->s_primary;
+ dbenv = dbp->dbenv;
+ rmw = STD_LOCKING(dbc_arg) ? DB_RMW : 0;
+
+ /*
+ * Get the old secondary key.
+ */
+ memset(&oldskey, 0, sizeof(DBT));
+ if ((ret = sdbp->s_callback(sdbp, pkey, olddata, &oldskey)) != 0) {
+ if (ret == DB_DONOTINDEX)
+ /* There's no old key to delete. */
+ ret = 0;
+ return (ret);
+ }
+
+ /*
+ * If there is a new secondary key, check whether it is different from
+ * the old secondary key before we delete it. Note that bt_compare is
+ * (and must be) set no matter what access method we're in.
+ */
+ if (F_ISSET(skey, DB_DBT_ISSET) &&
+ ((BTREE *)sdbp->bt_internal)->bt_compare(sdbp,
+ &oldskey, skey) == 0) {
+ ret = DB_KEYEXIST;
+ goto err;
+ }
+
+ 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(dbenv, 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;
+ SWAP_IF_NEEDED(sdbp, pkey);
+ 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);
+ SWAP_IF_NEEDED(sdbp, pkey);
+
+err: FREE_IF_NEEDED(dbenv, &oldskey);
+ if (sdbc != NULL && (t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -1424,7 +1570,7 @@ __db_duperr(dbp, flags)
* "DB_NODUPDATA" behavior for databases with DB_AM_SECONDARY set.
*/
if (flags != DB_NODUPDATA && !F_ISSET(dbp, DB_AM_SECONDARY))
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"Duplicate data items are not supported with sorted data");
return (DB_KEYEXIST);
}
@@ -1530,7 +1676,7 @@ __db_c_cleanup(dbc, dbc_n, failed)
* to explicitly downgrade this lock. The closed cursor
* may only have had a read lock.
*/
- if (F_ISSET(dbp, DB_AM_DIRTY) &&
+ if (F_ISSET(dbp, DB_AM_READ_UNCOMMITTED) &&
dbc->internal->lock_mode == DB_LOCK_WRITE) {
if ((t_ret =
__TLPUT(dbc, dbc->internal->lock)) != 0 && ret == 0)
@@ -1555,8 +1701,7 @@ __db_c_secondary_get_pp(dbc, skey, data, flags)
DBT *skey, *data;
u_int32_t flags;
{
-
- DB_ASSERT(F_ISSET(dbc->dbp, DB_AM_SECONDARY));
+ DB_ASSERT(dbc->dbp->dbenv, F_ISSET(dbc->dbp, DB_AM_SECONDARY));
return (__db_c_pget_pp(dbc, skey, NULL, data, flags));
}
@@ -1573,13 +1718,14 @@ __db_c_pget(dbc, skey, pkey, data, flags)
u_int32_t flags;
{
DB *pdbp, *sdbp;
- DBC *pdbc;
- DBT *save_rdata, nullpkey;
- u_int32_t save_pkey_flags;
+ DBC *dbc_n, *pdbc;
+ DBT nullpkey;
+ u_int32_t save_pkey_flags, tmp_flags, tmp_read_uncommitted, tmp_rmw;
int pkeymalloc, ret, t_ret;
sdbp = dbc->dbp;
pdbp = sdbp->s_primary;
+ dbc_n = NULL;
pkeymalloc = t_ret = 0;
/*
@@ -1599,13 +1745,32 @@ __db_c_pget(dbc, skey, pkey, data, flags)
pkey = &nullpkey;
}
+ /* Clear OR'd in additional bits so we can check for flag equality. */
+ tmp_rmw = LF_ISSET(DB_RMW);
+ LF_CLR(DB_RMW);
+
+ tmp_read_uncommitted =
+ LF_ISSET(DB_READ_UNCOMMITTED) &&
+ !F_ISSET(dbc, DBC_READ_UNCOMMITTED);
+ LF_CLR(DB_READ_UNCOMMITTED);
+
/*
* 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 (flags == DB_GET_RECNO) {
+ if (tmp_rmw)
+ F_SET(dbc, DBC_RMW);
+ if (tmp_read_uncommitted)
+ F_SET(dbc, DBC_READ_UNCOMMITTED);
+ ret = __db_c_pget_recno(dbc, pkey, data, flags);
+ if (tmp_rmw)
+ F_CLR(dbc, DBC_RMW);
+ if (tmp_read_uncommitted)
+ F_CLR(dbc, DBC_READ_UNCOMMITTED);
+ return (ret);
+ }
/*
* If the DBTs we've been passed don't have any of the
@@ -1623,28 +1788,23 @@ __db_c_pget(dbc, skey, pkey, data, flags)
* 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.
+ * with to the c_get, but swapping 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.
+ * 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);
@@ -1653,107 +1813,168 @@ __db_c_pget(dbc, skey, pkey, data, flags)
* 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;
+ * dirty work.) Duplicate the cursor, in case the later get on the
+ * primary fails.
+ */
+ switch (flags) {
+ case DB_CURRENT:
+ case DB_GET_BOTHC:
+ case DB_NEXT:
+ case DB_NEXT_DUP:
+ case DB_NEXT_NODUP:
+ case DB_PREV:
+ case DB_PREV_NODUP:
+ tmp_flags = DB_POSITION;
+ break;
+ default:
+ tmp_flags = 0;
+ break;
}
+ if ((ret = __db_c_dup(dbc, &dbc_n, tmp_flags)) != 0)
+ return (ret);
+
+ F_SET(dbc_n, DBC_TRANSIENT);
+
+ if (tmp_rmw)
+ F_SET(dbc_n, DBC_RMW);
+ if (tmp_read_uncommitted)
+ F_SET(dbc_n, DBC_READ_UNCOMMITTED);
+
+ /*
+ * If we've been handed a primary key, it will be in native byte order,
+ * so we need to swap it before reading from the secondary.
+ */
+ if (flags == DB_GET_BOTH || flags == DB_GET_BOTHC ||
+ flags == DB_GET_BOTH_RANGE)
+ SWAP_IF_NEEDED(sdbp, pkey);
+
+retry: /* Step 1. */
+ dbc_n->rdata = dbc->rkey;
+ dbc_n->rkey = dbc->rskey;
+ ret = __db_c_get(dbc_n, skey, pkey, flags);
/* 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.
+ * We need to swap the primary key to native byte order if we read it
+ * successfully, or if we swapped it on entry above. We can't return
+ * with the application's data modified.
*/
- dbc->rskey = dbc->rkey;
- dbc->rkey = dbc->rdata;
- dbc->rdata = save_rdata;
+ if (ret == 0 || flags == DB_GET_BOTH || flags == DB_GET_BOTHC ||
+ flags == DB_GET_BOTH_RANGE)
+ SWAP_IF_NEEDED(sdbp, pkey);
+
+ if (ret != 0)
+ goto err;
/*
- * 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.
+ * 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.
+ * 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 doing 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.)
+ * 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;
+ if (tmp_read_uncommitted || F_ISSET(dbc, DBC_READ_UNCOMMITTED))
+ F_SET(pdbc, DBC_READ_UNCOMMITTED);
+ if (tmp_rmw || F_ISSET(dbc, DBC_RMW))
+ F_SET(pdbc, DBC_RMW);
+ if (F_ISSET(dbc, DBC_READ_COMMITTED))
+ F_SET(pdbc, DBC_READ_COMMITTED);
+
/*
- * 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.
+ * 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.
+ *
+ * Alternatively, if the application is handling copying for pkey, we
+ * need to take a copy now. The copy will be freed on exit from
+ * __db_c_pget_pp (and we must be coming through there if
+ * DB_DBT_USERCOPY is set).
*
* !!!
- * 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.
+ * 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;
- }
+ } else if (F_ISSET(pkey, DB_DBT_USERCOPY) &&
+ (ret = __dbt_usercopy(sdbp->dbenv, pkey)) != 0)
+ goto err;
/*
- * 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.
+ * 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 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);
+ if ((t_ret = __db_c_close(pdbc)) != 0 && ret == 0)
+ ret = t_ret;
-err: if (pkeymalloc) {
+ else if (ret == DB_NOTFOUND) {
+ if (!F_ISSET(pdbc, DBC_READ_UNCOMMITTED))
+ ret = __db_secondary_corrupt(pdbp);
+ else switch (flags) {
+ case DB_GET_BOTHC:
+ case DB_NEXT:
+ case DB_NEXT_DUP:
+ case DB_NEXT_NODUP:
+ case DB_PREV:
+ case DB_PREV_NODUP:
+ goto retry;
+ default:
+ break;
+ }
+ }
+
+err: /* Cleanup and cursor resolution. */
+ if ((t_ret = __db_c_cleanup(dbc, dbc_n, ret)) != 0 && ret == 0)
+ ret = t_ret;
+ 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.
+ * 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);
+
+ return (ret);
}
/*
@@ -1855,7 +2076,7 @@ static int
__db_wrlock_err(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "Write attempted on read-only cursor");
+ __db_errx(dbenv, "Write attempted on read-only cursor");
return (EPERM);
}
@@ -1873,11 +2094,14 @@ static int
__db_c_del_secondary(dbc)
DBC *dbc;
{
+ DB_ENV *dbenv;
DB *pdbp;
DBC *pdbc;
DBT skey, pkey;
int ret, t_ret;
+ pdbp = dbc->dbp->s_primary;
+ dbenv = pdbp->dbenv;
memset(&skey, 0, sizeof(DBT));
memset(&pkey, 0, sizeof(DBT));
@@ -1890,6 +2114,8 @@ __db_c_del_secondary(dbc)
if ((ret = __db_c_get(dbc, &skey, &pkey, DB_CURRENT)) != 0)
return (ret);
+ SWAP_IF_NEEDED(dbc->dbp, &pkey);
+
/*
* Create a cursor on the primary with our locker ID,
* so that when it calls back, we don't conflict.
@@ -1900,7 +2126,6 @@ __db_c_del_secondary(dbc)
* 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);
@@ -1911,8 +2136,8 @@ __db_c_del_secondary(dbc)
* 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);
+ if (CDB_LOCKING(dbenv)) {
+ DB_ASSERT(dbenv, pdbc->mylock.off == LOCK_INVALID);
F_SET(pdbc, DBC_WRITER);
}
@@ -1950,12 +2175,14 @@ int
__db_c_del_primary(dbc)
DBC *dbc;
{
+ DB_ENV *dbenv;
DB *dbp, *sdbp;
DBC *sdbc;
DBT data, pkey, skey, temppkey, tempskey;
int ret, t_ret;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
/*
* If we're called at all, we have at least one secondary.
@@ -1968,13 +2195,14 @@ __db_c_del_primary(dbc)
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)) {
+ memset(&skey, 0, sizeof(DBT));
+ for (ret = __db_s_first(dbp, &sdbp);
+ 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
@@ -1984,17 +2212,16 @@ __db_c_del_primary(dbc)
continue;
/* We had a substantive error. Bail. */
- FREE_IF_NEEDED(sdbp, &skey);
- goto done;
+ goto err;
}
/* Open a secondary cursor. */
if ((ret = __db_cursor_int(sdbp, dbc->txn, sdbp->type,
PGNO_INVALID, 0, dbc->locker, &sdbc)) != 0)
- goto done;
+ goto err;
/* See comment above and in __db_c_put. */
- if (CDB_LOCKING(sdbp->dbenv)) {
- DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ if (CDB_LOCKING(dbenv)) {
+ DB_ASSERT(dbenv, sdbc->mylock.off == LOCK_INVALID);
F_SET(sdbc, DBC_WRITER);
}
@@ -2014,6 +2241,7 @@ __db_c_del_primary(dbc)
memset(&tempskey, 0, sizeof(DBT));
tempskey.data = skey.data;
tempskey.size = skey.size;
+ SWAP_IF_NEEDED(sdbp, &pkey);
memset(&temppkey, 0, sizeof(DBT));
temppkey.data = pkey.data;
temppkey.size = pkey.size;
@@ -2022,17 +2250,18 @@ __db_c_del_primary(dbc)
ret = __db_c_del(sdbc, DB_UPDATE_SECONDARY);
else if (ret == DB_NOTFOUND)
ret = __db_secondary_corrupt(dbp);
-
- FREE_IF_NEEDED(sdbp, &skey);
+ SWAP_IF_NEEDED(sdbp, &pkey);
+ FREE_IF_NEEDED(dbenv, &skey);
if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
- goto done;
+ goto err;
}
-done: if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
+err: if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
ret = t_ret;
+ FREE_IF_NEEDED(dbenv, &skey);
return (ret);
}
@@ -2040,23 +2269,25 @@ done: if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
* __db_s_first --
* Get the first secondary, if any are present, from the primary.
*
- * PUBLIC: DB *__db_s_first __P((DB *));
+ * PUBLIC: int __db_s_first __P((DB *, DB **));
*/
-DB *
-__db_s_first(pdbp)
- DB *pdbp;
+int
+__db_s_first(pdbp, sdbpp)
+ DB *pdbp, **sdbpp;
{
DB *sdbp;
- MUTEX_THREAD_LOCK(pdbp->dbenv, pdbp->mutexp);
+ MUTEX_LOCK(pdbp->dbenv, pdbp->mutex);
sdbp = LIST_FIRST(&pdbp->s_secondaries);
/* See __db_s_next. */
if (sdbp != NULL)
sdbp->s_refcnt++;
- MUTEX_THREAD_UNLOCK(pdbp->dbenv, pdbp->mutexp);
+ MUTEX_UNLOCK(pdbp->dbenv, pdbp->mutex);
+
+ *sdbpp = sdbp;
- return (sdbp);
+ return (0);
}
/*
@@ -2069,6 +2300,7 @@ int
__db_s_next(sdbpp)
DB **sdbpp;
{
+ DB_ENV *dbenv;
DB *sdbp, *pdbp, *closeme;
int ret;
@@ -2097,10 +2329,11 @@ __db_s_next(sdbpp)
*/
sdbp = *sdbpp;
pdbp = sdbp->s_primary;
+ dbenv = pdbp->dbenv;
closeme = NULL;
- MUTEX_THREAD_LOCK(pdbp->dbenv, pdbp->mutexp);
- DB_ASSERT(sdbp->s_refcnt != 0);
+ MUTEX_LOCK(dbenv, pdbp->mutex);
+ DB_ASSERT(dbenv, sdbp->s_refcnt != 0);
if (--sdbp->s_refcnt == 0) {
LIST_REMOVE(sdbp, s_links);
closeme = sdbp;
@@ -2108,7 +2341,7 @@ __db_s_next(sdbpp)
sdbp = LIST_NEXT(sdbp, s_links);
if (sdbp != NULL)
sdbp->s_refcnt++;
- MUTEX_THREAD_UNLOCK(pdbp->dbenv, pdbp->mutexp);
+ MUTEX_UNLOCK(dbenv, pdbp->mutex);
*sdbpp = sdbp;
@@ -2130,24 +2363,51 @@ int
__db_s_done(sdbp)
DB *sdbp;
{
+ DB_ENV *dbenv;
DB *pdbp;
int doclose;
pdbp = sdbp->s_primary;
+ dbenv = pdbp->dbenv;
doclose = 0;
- MUTEX_THREAD_LOCK(pdbp->dbenv, pdbp->mutexp);
- DB_ASSERT(sdbp->s_refcnt != 0);
+ MUTEX_LOCK(dbenv, pdbp->mutex);
+ DB_ASSERT(dbenv, sdbp->s_refcnt != 0);
if (--sdbp->s_refcnt == 0) {
LIST_REMOVE(sdbp, s_links);
doclose = 1;
}
- MUTEX_THREAD_UNLOCK(pdbp->dbenv, pdbp->mutexp);
+ MUTEX_UNLOCK(dbenv, pdbp->mutex);
return (doclose ? __db_close(sdbp, NULL, 0) : 0);
}
/*
+ * __db_s_count --
+ * Count the number of secondaries associated with a given primary.
+ */
+static int
+__db_s_count(pdbp)
+ DB *pdbp;
+{
+ DB_ENV *dbenv;
+ DB *sdbp;
+ int count;
+
+ dbenv = pdbp->dbenv;
+ count = 0;
+
+ MUTEX_LOCK(dbenv, pdbp->mutex);
+ for (sdbp = LIST_FIRST(&pdbp->s_secondaries);
+ sdbp != NULL;
+ sdbp = LIST_NEXT(sdbp, s_links))
+ ++count;
+ MUTEX_UNLOCK(dbenv, pdbp->mutex);
+
+ return (count);
+}
+
+/*
* __db_buildpartial --
* Build the record that will result after a partial put is applied to
* an existing record.
@@ -2161,18 +2421,21 @@ __db_buildpartial(dbp, oldrec, partial, newrec)
DB *dbp;
DBT *oldrec, *partial, *newrec;
{
- int ret;
- u_int8_t *buf;
+ DB_ENV *dbenv;
u_int32_t len, nbytes;
+ u_int8_t *buf;
+ int ret;
+
+ dbenv = dbp->dbenv;
- DB_ASSERT(F_ISSET(partial, DB_DBT_PARTIAL));
+ DB_ASSERT(dbenv, 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)
+ if ((ret = __os_malloc(dbenv, nbytes, &buf)) != 0)
return (ret);
newrec->data = buf;
diff --git a/db/db/db_cds.c b/db/db/db_cds.c
new file mode 100644
index 000000000..ee9caa062
--- /dev/null
+++ b/db/db/db_cds.c
@@ -0,0 +1,173 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db_cds.c,v 12.5 2006/09/07 05:46:15 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
+#include "dbinc/txn.h"
+
+static int __cdsgroup_abort __P((DB_TXN *txn));
+static int __cdsgroup_commit __P((DB_TXN *txn, u_int32_t flags));
+static int __cdsgroup_discard __P((DB_TXN *txn, u_int32_t flags));
+static u_int32_t __cdsgroup_id __P((DB_TXN *txn));
+static int __cdsgroup_notsup __P((DB_ENV *dbenv, const char *meth));
+static int __cdsgroup_prepare __P((DB_TXN *txn, u_int8_t *gid));
+static int __cdsgroup_set_name __P((DB_TXN *txn, const char *name));
+static int __cdsgroup_set_timeout
+ __P((DB_TXN *txn, db_timeout_t timeout, u_int32_t flags));
+
+/*
+ * __cdsgroup_notsup --
+ * Error when CDS groups don't support a method.
+ */
+static int
+__cdsgroup_notsup(dbenv, meth)
+ DB_ENV *dbenv;
+ const char *meth;
+{
+ __db_errx(dbenv, "CDS groups do not support %s", meth);
+ return (DB_OPNOTSUP);
+}
+
+static int __cdsgroup_abort(txn)
+ DB_TXN *txn;
+{
+ return (__cdsgroup_notsup(txn->mgrp->dbenv, "abort"));
+}
+
+static int __cdsgroup_commit(txn, flags)
+ DB_TXN *txn;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB_LOCKREQ lreq;
+ u_int32_t locker;
+ int ret, t_ret;
+
+ COMPQUIET(flags, 0);
+ dbenv = txn->mgrp->dbenv;
+
+ /* Check for live cursors. */
+ if (txn->cursors != 0) {
+ __db_errx(dbenv, "CDS group has active cursors");
+ return (EINVAL);
+ }
+
+ /* We may be holding handle locks; release them. */
+ lreq.op = DB_LOCK_PUT_ALL;
+ lreq.obj = NULL;
+ ret = __lock_vec(dbenv, txn->txnid, 0, &lreq, 1, NULL);
+
+ dbenv = txn->mgrp->dbenv;
+ locker = txn->txnid;
+ __os_free(dbenv, txn->mgrp);
+ __os_free(dbenv, txn);
+ if ((t_ret = __lock_id_free(dbenv, locker)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+static int __cdsgroup_discard(txn, flags)
+ DB_TXN *txn;
+ u_int32_t flags;
+{
+ COMPQUIET(flags, 0);
+ return (__cdsgroup_notsup(txn->mgrp->dbenv, "discard"));
+}
+
+static u_int32_t __cdsgroup_id(txn)
+ DB_TXN *txn;
+{
+ return (txn->txnid);
+}
+
+static int __cdsgroup_prepare(txn, gid)
+ DB_TXN *txn;
+ u_int8_t *gid;
+{
+ COMPQUIET(gid, NULL);
+ return (__cdsgroup_notsup(txn->mgrp->dbenv, "prepare"));
+}
+
+static int __cdsgroup_set_name(txn, name)
+ DB_TXN *txn;
+ const char *name;
+{
+ COMPQUIET(name, NULL);
+ return (__cdsgroup_notsup(txn->mgrp->dbenv, "set_name"));
+}
+
+static int __cdsgroup_set_timeout(txn, timeout, flags)
+ DB_TXN *txn;
+ db_timeout_t timeout;
+ u_int32_t flags;
+{
+ COMPQUIET(timeout, 0);
+ COMPQUIET(flags, 0);
+ return (__cdsgroup_notsup(txn->mgrp->dbenv, "set_timeout"));
+}
+
+/*
+ * __cds_txn_begin --
+ * DB_ENV->cdsgroup_begin
+ *
+ * PUBLIC: int __cdsgroup_begin __P((DB_ENV *, DB_TXN **));
+ */
+int __cdsgroup_begin(dbenv, txnpp)
+ DB_ENV *dbenv;
+ DB_TXN **txnpp;
+{
+ DB_THREAD_INFO *ip;
+ DB_TXN *txn;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "cdsgroup_begin");
+ if (!CDB_LOCKING(dbenv))
+ return (__db_env_config(dbenv, "cdsgroup_begin", DB_INIT_CDB));
+
+ ENV_ENTER(dbenv, ip);
+ *txnpp = txn = NULL;
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_TXN), &txn)) != 0)
+ goto err;
+ /*
+ * We need a dummy DB_TXNMGR -- it's the only way to get from a
+ * transaction handle to the environment handle.
+ */
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_TXNMGR), &txn->mgrp)) != 0)
+ goto err;
+ txn->mgrp->dbenv = dbenv;
+
+ if ((ret = __lock_id(dbenv, &txn->txnid, NULL)) != 0)
+ goto err;
+
+ txn->flags = TXN_CDSGROUP;
+ txn->abort = __cdsgroup_abort;
+ txn->commit = __cdsgroup_commit;
+ txn->discard = __cdsgroup_discard;
+ txn->id = __cdsgroup_id;
+ txn->prepare = __cdsgroup_prepare;
+ txn->set_name = __cdsgroup_set_name;
+ txn->set_timeout = __cdsgroup_set_timeout;
+
+ *txnpp = txn;
+
+ if (0) {
+err: if (txn != NULL) {
+ if (txn->mgrp != NULL)
+ __os_free(dbenv, txn->mgrp);
+ __os_free(dbenv, txn);
+ }
+ }
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
+}
diff --git a/db/db/db_conv.c b/db/db/db_conv.c
index b4c5c9a29..94afb1db7 100644
--- a/db/db/db_conv.c
+++ b/db/db/db_conv.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -36,17 +36,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_conv.c,v 11.45 2004/01/28 03:35:57 bostic Exp $
+ * $Id: db_conv.c,v 12.7 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
@@ -143,14 +137,14 @@ __db_pgin(dbenv, pg, pp, cookie)
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)) {
+ dbenv, NULL, 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,
+ __db_errx(dbenv,
"checksum error: page %lu: catastrophic recovery required",
(u_long)pg);
return (__db_panic(dbenv, DB_RUNRECOVERY));
@@ -159,11 +153,11 @@ __db_pgin(dbenv, pg, pp, cookie)
}
}
if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
- DB_ASSERT(db_cipher != NULL);
- DB_ASSERT(F_ISSET(dbp, DB_AM_CHKSUM));
+ DB_ASSERT(dbenv, db_cipher != NULL);
+ DB_ASSERT(dbenv, F_ISSET(dbp, DB_AM_CHKSUM));
pg_off = P_OVERHEAD(dbp);
- DB_ASSERT(db_cipher->adj_size(pg_off) == 0);
+ DB_ASSERT(dbenv, db_cipher->adj_size(pg_off) == 0);
switch (pagep->type) {
case P_HASHMETA:
@@ -283,11 +277,11 @@ __db_pgout(dbenv, pg, pp, cookie)
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));
+ DB_ASSERT(dbenv, db_cipher != NULL);
+ DB_ASSERT(dbenv, F_ISSET(dbp, DB_AM_CHKSUM));
pg_off = P_OVERHEAD(dbp);
- DB_ASSERT(db_cipher->adj_size(pg_off) == 0);
+ DB_ASSERT(dbenv, db_cipher->adj_size(pg_off) == 0);
key = db_cipher->mac_key;
@@ -332,7 +326,7 @@ __db_pgout(dbenv, pg, pp, cookie)
sum_len = pginfo->db_pagesize;
break;
}
- __db_chksum(pp, sum_len, key, chksum);
+ __db_chksum(NULL, pp, sum_len, key, chksum);
if (F_ISSET(dbp, DB_AM_SWAP) && !F_ISSET(dbp, DB_AM_ENCRYPT))
P_32_SWAP(chksum);
}
diff --git a/db/db/db_dispatch.c b/db/db/db_dispatch.c
index 2317f500a..4ef8347ba 100644
--- a/db/db/db_dispatch.c
+++ b/db/db/db_dispatch.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1995, 1996
@@ -35,30 +35,22 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_dispatch.c,v 11.169 2004/10/27 16:44:26 ubell Exp $
+ * $Id: db_dispatch.c,v 12.26 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/hash.h"
+#include "dbinc/fop.h"
+#include "dbinc/lock.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
-#include "dbinc/fop.h"
#include "dbinc/txn.h"
-#ifndef HAVE_FTRUNCATE
-static int __db_limbo_fix __P((DB *,
- DB_TXN *, DB_TXNLIST *, db_pgno_t *, DBMETA *, db_limbo_state));
+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 *));
@@ -66,11 +58,10 @@ 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_pgnoadd __P((DB_ENV *, DB_TXNHEAD *,
- int32_t, u_int8_t [DB_FILE_ID_LEN], char *, db_pgno_t));
-#endif
-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, u_int32_t *));
+ int32_t, u_int8_t *, char *, db_pgno_t));
+static int __db_txnlist_find_internal __P((DB_ENV *, DB_TXNHEAD *,
+ db_txnlist_type, u_int32_t, u_int8_t *, DB_TXNLIST **,
+ int, u_int32_t *));
/*
* __db_dispatch --
@@ -83,7 +74,7 @@ static int __db_txnlist_find_internal __P((DB_ENV *,
*
* 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 *));
+ * PUBLIC: size_t, DBT *, DB_LSN *, db_recops, DB_TXNHEAD *));
*/
int
__db_dispatch(dbenv, dtab, dtabsize, db, lsnp, redo, info)
@@ -93,7 +84,7 @@ __db_dispatch(dbenv, dtab, dtabsize, db, lsnp, redo, info)
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_TXNHEAD *info; /* Transaction list. */
{
DB_LSN prev_lsn;
u_int32_t rectype, status, txnid;
@@ -104,7 +95,7 @@ __db_dispatch(dbenv, dtab, dtabsize, db, lsnp, redo, info)
make_call = ret = 0;
/* If we don't have a dispatch table, it's hard to dispatch. */
- DB_ASSERT(dtab != NULL);
+ DB_ASSERT(dbenv, dtab != NULL);
/*
* If we find a record that is in the user's number space and they
@@ -235,7 +226,9 @@ __db_dispatch(dbenv, dtab, dtabsize, db, lsnp, redo, info)
break;
default:
- if (txnid != 0) {
+ if (txnid == 0)
+ status = 0;
+ else {
ret = __db_txnlist_find(dbenv,
info, txnid, &status);
@@ -314,7 +307,7 @@ __db_dispatch(dbenv, dtab, dtabsize, db, lsnp, redo, info)
* as our sanity check.
*/
if (rectype > dtabsize || dtab[rectype] == NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Illegal record type %lu in log",
(u_long)rectype);
return (EINVAL);
@@ -364,14 +357,14 @@ __db_add_recovery(dbenv, dtab, dtabsize, func, ndx)
* Initialize transaction linked list.
*
* PUBLIC: int __db_txnlist_init __P((DB_ENV *,
- * PUBLIC: u_int32_t, u_int32_t, DB_LSN *, void *));
+ * PUBLIC: u_int32_t, u_int32_t, DB_LSN *, DB_TXNHEAD **));
*/
int
__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 **retp;
{
DB_TXNHEAD *headp;
u_int32_t size, tmp;
@@ -427,7 +420,7 @@ __db_txnlist_init(dbenv, low_txn, hi_txn, trunc_lsn, retp)
}
ZERO_LSN(headp->ckplsn);
- *(void **)retp = headp;
+ *retp = headp;
return (0);
}
@@ -436,23 +429,21 @@ __db_txnlist_init(dbenv, low_txn, hi_txn, trunc_lsn, retp)
* Add an element to our transaction linked list.
*
* PUBLIC: int __db_txnlist_add __P((DB_ENV *,
- * PUBLIC: void *, u_int32_t, u_int32_t, DB_LSN *));
+ * PUBLIC: DB_TXNHEAD *, u_int32_t, u_int32_t, DB_LSN *));
*/
int
-__db_txnlist_add(dbenv, listp, txnid, status, lsn)
+__db_txnlist_add(dbenv, hp, txnid, status, lsn)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
u_int32_t txnid, status;
DB_LSN *lsn;
{
- DB_TXNHEAD *hp;
DB_TXNLIST *elp;
int ret;
if ((ret = __os_malloc(dbenv, sizeof(DB_TXNLIST), &elp)) != 0)
return (ret);
- hp = (DB_TXNHEAD *)listp;
LIST_INSERT_HEAD(&hp->head[DB_TXNLIST_MASK(hp, txnid)], elp, links);
elp->type = TXNLIST_TXNID;
@@ -464,8 +455,8 @@ __db_txnlist_add(dbenv, listp, txnid, status, lsn)
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);
+ DB_ASSERT(dbenv, lsn == NULL ||
+ status != TXN_COMMIT || LOG_COMPARE(&hp->maxlsn, lsn) >= 0);
return (0);
}
@@ -474,19 +465,19 @@ __db_txnlist_add(dbenv, listp, txnid, status, lsn)
* __db_txnlist_remove --
* Remove an element from our transaction linked list.
*
- * PUBLIC: int __db_txnlist_remove __P((DB_ENV *, void *, u_int32_t));
+ * PUBLIC: int __db_txnlist_remove __P((DB_ENV *, DB_TXNHEAD *, u_int32_t));
*/
int
-__db_txnlist_remove(dbenv, listp, txnid)
+__db_txnlist_remove(dbenv, hp, txnid)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
u_int32_t txnid;
{
DB_TXNLIST *entry;
u_int32_t status;
return (__db_txnlist_find_internal(dbenv,
- listp, TXNLIST_TXNID, txnid, NULL, &entry, 1, &status));
+ hp, TXNLIST_TXNID, txnid, NULL, &entry, 1, &status));
}
/*
@@ -497,22 +488,19 @@ __db_txnlist_remove(dbenv, listp, txnid)
* recovery, we are going to virtually truncate the log and we need
* to retain the last checkpoint before the truncation point.
*
- * PUBLIC: void __db_txnlist_ckp __P((DB_ENV *, void *, DB_LSN *));
+ * PUBLIC: void __db_txnlist_ckp __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *));
*/
void
-__db_txnlist_ckp(dbenv, listp, ckp_lsn)
+__db_txnlist_ckp(dbenv, hp, ckp_lsn)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
DB_LSN *ckp_lsn;
{
- DB_TXNHEAD *hp;
COMPQUIET(dbenv, NULL);
- hp = (DB_TXNHEAD *)listp;
-
if (IS_ZERO_LSN(hp->ckplsn) && !IS_ZERO_LSN(hp->maxlsn) &&
- log_compare(&hp->maxlsn, ckp_lsn) >= 0)
+ LOG_COMPARE(&hp->maxlsn, ckp_lsn) >= 0)
hp->ckplsn = *ckp_lsn;
}
@@ -520,26 +508,24 @@ __db_txnlist_ckp(dbenv, listp, ckp_lsn)
* __db_txnlist_end --
* Discard transaction linked list.
*
- * PUBLIC: void __db_txnlist_end __P((DB_ENV *, void *));
+ * PUBLIC: void __db_txnlist_end __P((DB_ENV *, DB_TXNHEAD *));
*/
void
-__db_txnlist_end(dbenv, listp)
+__db_txnlist_end(dbenv, hp)
DB_ENV *dbenv;
- void *listp;
-{
DB_TXNHEAD *hp;
- DB_TXNLIST *p;
+{
u_int32_t i;
+ DB_TXNLIST *p;
- if ((hp = (DB_TXNHEAD *)listp) == NULL)
+ if (hp == NULL)
return;
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);
+ __os_free(dbenv, p->u.l.lsn_stack);
break;
case TXNLIST_DELETE:
case TXNLIST_PGNO:
@@ -551,12 +537,13 @@ __db_txnlist_end(dbenv, listp)
*/
break;
}
+ LIST_REMOVE(p, links);
__os_free(dbenv, p);
}
if (hp->gen_array != NULL)
__os_free(dbenv, hp->gen_array);
- __os_free(dbenv, listp);
+ __os_free(dbenv, hp);
}
/*
@@ -568,12 +555,12 @@ __db_txnlist_end(dbenv, listp)
* was generated while not in a transaction.
*
* PUBLIC: int __db_txnlist_find __P((DB_ENV *,
- * PUBLIC: void *, u_int32_t, u_int32_t *));
+ * PUBLIC: DB_TXNHEAD *, u_int32_t, u_int32_t *));
*/
int
-__db_txnlist_find(dbenv, listp, txnid, statusp)
+__db_txnlist_find(dbenv, hp, txnid, statusp)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
u_int32_t txnid, *statusp;
{
DB_TXNLIST *entry;
@@ -581,7 +568,7 @@ __db_txnlist_find(dbenv, listp, txnid, statusp)
if (txnid == 0)
return (DB_NOTFOUND);
- return (__db_txnlist_find_internal(dbenv, listp,
+ return (__db_txnlist_find_internal(dbenv, hp,
TXNLIST_TXNID, txnid, NULL, &entry, 0, statusp));
}
@@ -590,32 +577,30 @@ __db_txnlist_find(dbenv, listp, txnid, statusp)
* Change the status of an existing transaction entry.
* Returns DB_NOTFOUND if no such entry exists.
*
- * PUBLIC: int __db_txnlist_update __P((DB_ENV *,
- * PUBLIC: void *, u_int32_t, u_int32_t, DB_LSN *, u_int32_t *, int));
+ * PUBLIC: int __db_txnlist_update __P((DB_ENV *, DB_TXNHEAD *,
+ * PUBLIC: u_int32_t, u_int32_t, DB_LSN *, u_int32_t *, int));
*/
int
-__db_txnlist_update(dbenv, listp, txnid, status, lsn, ret_status, add_ok)
+__db_txnlist_update(dbenv, hp, txnid, status, lsn, ret_status, add_ok)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
u_int32_t txnid, status;
DB_LSN *lsn;
u_int32_t *ret_status;
int add_ok;
{
- DB_TXNHEAD *hp;
DB_TXNLIST *elp;
int ret;
if (txnid == 0)
return (DB_NOTFOUND);
- hp = (DB_TXNHEAD *)listp;
ret = __db_txnlist_find_internal(dbenv,
- listp, TXNLIST_TXNID, txnid, NULL, &elp, 0, ret_status);
+ hp, TXNLIST_TXNID, txnid, NULL, &elp, 0, ret_status);
if (ret == DB_NOTFOUND && add_ok) {
*ret_status = status;
- return (__db_txnlist_add(dbenv, listp, txnid, status, lsn));
+ return (__db_txnlist_add(dbenv, hp, txnid, status, lsn));
}
if (ret != 0)
return (ret);
@@ -640,9 +625,9 @@ __db_txnlist_update(dbenv, listp, txnid, status, lsn, ret_status, add_ok)
*/
static int
__db_txnlist_find_internal(dbenv,
- listp, type, txnid, uid, txnlistp, delete, statusp)
+ hp, type, txnid, uid, txnlistp, delete, statusp)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
db_txnlist_type type;
u_int32_t txnid;
u_int8_t uid[DB_FILE_ID_LEN];
@@ -651,14 +636,13 @@ __db_txnlist_find_internal(dbenv,
u_int32_t *statusp;
{
struct __db_headlink *head;
- DB_TXNHEAD *hp;
DB_TXNLIST *p;
u_int32_t generation, hash, i;
int ret;
ret = 0;
- if ((hp = (DB_TXNHEAD *)listp) == NULL)
+ if (hp == NULL)
return (DB_NOTFOUND);
switch (type) {
@@ -674,7 +658,7 @@ __db_txnlist_find_internal(dbenv,
(txnid >= hp->gen_array[i].txn_min ||
txnid <= hp->gen_array[i].txn_max))
break;
- DB_ASSERT(i <= hp->generation);
+ DB_ASSERT(dbenv, i <= hp->generation);
generation = hp->gen_array[i].generation;
break;
case TXNLIST_PGNO:
@@ -688,8 +672,7 @@ __db_txnlist_find_internal(dbenv,
}
head = &hp->head[DB_TXNLIST_MASK(hp, hash)];
-
- for (p = LIST_FIRST(head); p != NULL; p = LIST_NEXT(p, links)) {
+ LIST_FOREACH(p, head, links) {
if (p->type != type)
continue;
switch (type) {
@@ -703,6 +686,7 @@ __db_txnlist_find_internal(dbenv,
case TXNLIST_PGNO:
if (memcmp(uid, p->u.p.uid, DB_FILE_ID_LEN) != 0)
continue;
+ *statusp = TXN_OK;
break;
case TXNLIST_DELETE:
case TXNLIST_LSN:
@@ -712,12 +696,14 @@ __db_txnlist_find_internal(dbenv,
if (delete == 1) {
LIST_REMOVE(p, links);
__os_free(dbenv, p);
+ *txnlistp = NULL;
} else if (p != LIST_FIRST(head)) {
/* Move it to head of list. */
LIST_REMOVE(p, links);
LIST_INSERT_HEAD(head, p, links);
- }
- *txnlistp = p;
+ *txnlistp = p;
+ } else
+ *txnlistp = p;
return (ret);
}
@@ -729,16 +715,15 @@ __db_txnlist_find_internal(dbenv,
* Change the current generation number.
*
* PUBLIC: int __db_txnlist_gen __P((DB_ENV *,
- * PUBLIC: void *, int, u_int32_t, u_int32_t));
+ * PUBLIC: DB_TXNHEAD *, int, u_int32_t, u_int32_t));
*/
int
-__db_txnlist_gen(dbenv, listp, incr, min, max)
+__db_txnlist_gen(dbenv, hp, incr, min, max)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
int incr;
u_int32_t min, max;
{
- DB_TXNHEAD *hp;
int ret;
/*
@@ -753,7 +738,6 @@ __db_txnlist_gen(dbenv, listp, incr, min, max)
* is given the generation number of the first range it falls into
* in the stack.
*/
- hp = (DB_TXNHEAD *)listp;
if (incr < 0) {
--hp->generation;
memmove(hp->gen_array, &hp->gen_array[1],
@@ -775,71 +759,76 @@ __db_txnlist_gen(dbenv, listp, incr, min, max)
return (0);
}
-#define TXN_BUBBLE(AP, MAX) { \
- DB_LSN __tmp; \
- u_int32_t __j; \
- \
- for (__j = 0; __j < MAX - 1; __j++) \
- if (log_compare(&AP[__j], &AP[__j + 1]) < 0) { \
- __tmp = AP[__j]; \
- AP[__j] = AP[__j + 1]; \
- AP[__j + 1] = __tmp; \
- } \
-}
-
/*
* __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.
+ * Save the prev_lsn from a txn_child record.
*
- * PUBLIC: int __db_txnlist_lsnadd __P((DB_ENV *, void *, DB_LSN *, u_int32_t));
+ * PUBLIC: int __db_txnlist_lsnadd __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *));
*/
int
-__db_txnlist_lsnadd(dbenv, listp, lsnp, flags)
+__db_txnlist_lsnadd(dbenv, hp, lsnp)
DB_ENV *dbenv;
- void *listp;
+ DB_TXNHEAD *hp;
DB_LSN *lsnp;
- u_int32_t flags;
{
- DB_TXNHEAD *hp;
DB_TXNLIST *elp;
- u_int32_t i;
int ret;
- hp = (DB_TXNHEAD *)listp;
+ if (IS_ZERO_LSN(*lsnp))
+ return (0);
- for (elp = LIST_FIRST(&hp->head[0]);
- elp != NULL; elp = LIST_NEXT(elp, links))
+ LIST_FOREACH(elp, &hp->head[0], links)
if (elp->type == TXNLIST_LSN)
break;
- if (elp == NULL)
+ if (elp == NULL) {
+ if ((ret = __db_txnlist_lsninit(dbenv, hp, lsnp)) != 0)
+ return (ret);
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),
- &elp->u.l.lsn_array)) != 0)
- return (ret);
- elp->u.l.maxn *= 2;
+ if (elp->u.l.stack_indx == elp->u.l.stack_size) {
+ elp->u.l.stack_size <<= 1;
+ if ((ret = __os_realloc(dbenv, sizeof(DB_LSN) *
+ elp->u.l.stack_size, &elp->u.l.lsn_stack)) != 0) {
+ __db_txnlist_end(dbenv, hp);
+ return (ret);
}
- elp->u.l.lsn_array[elp->u.l.ntxns++] = *lsnp;
- } else
- /* Simply replace the 0th element. */
- elp->u.l.lsn_array[0] = *lsnp;
+ }
+ elp->u.l.lsn_stack[elp->u.l.stack_indx++] = *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.
- */
- 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);
+ return (0);
+}
+
+/*
+ * __db_txnlist_lsnget --
+ *
+ * PUBLIC: int __db_txnlist_lsnget __P((DB_ENV *,
+ * PUBLIC: DB_TXNHEAD *, DB_LSN *, u_int32_t));
+ * Get the lsn saved from a txn_child record.
+ */
+int
+__db_txnlist_lsnget(dbenv, hp, lsnp, flags)
+ DB_ENV *dbenv;
+ DB_TXNHEAD *hp;
+ DB_LSN *lsnp;
+ u_int32_t flags;
+{
+ DB_TXNLIST *elp;
+
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(flags, 0);
- *lsnp = elp->u.l.lsn_array[0];
+ LIST_FOREACH(elp, &hp->head[0], links)
+ if (elp->type == TXNLIST_LSN)
+ break;
+
+ if (elp == NULL || elp->u.l.stack_indx == 0) {
+ ZERO_LSN(*lsnp);
+ return (0);
+ }
+
+ *lsnp = elp->u.l.lsn_stack[--elp->u.l.stack_indx];
return (0);
}
@@ -865,13 +854,13 @@ __db_txnlist_lsninit(dbenv, hp, lsnp)
goto err;
LIST_INSERT_HEAD(&hp->head[0], elp, links);
+ elp->type = TXNLIST_LSN;
if ((ret = __os_malloc(dbenv,
- 12 * sizeof(DB_LSN), &elp->u.l.lsn_array)) != 0)
+ sizeof(DB_LSN) * DB_LSN_STACK_SIZE, &elp->u.l.lsn_stack)) != 0)
goto err;
- elp->type = TXNLIST_LSN;
- elp->u.l.maxn = 12;
- elp->u.l.ntxns = 1;
- elp->u.l.lsn_array[0] = *lsnp;
+ elp->u.l.stack_indx = 1;
+ elp->u.l.stack_size = DB_LSN_STACK_SIZE;
+ elp->u.l.lsn_stack[0] = *lsnp;
return (0);
@@ -879,23 +868,20 @@ err: __db_txnlist_end(dbenv, hp);
return (ret);
}
-#ifndef HAVE_FTRUNCATE
/*
* __db_add_limbo -- add pages to the limbo list.
* Get the file information and call pgnoadd for each page.
*
- * PUBLIC: #ifndef HAVE_FTRUNCATE
* PUBLIC: int __db_add_limbo __P((DB_ENV *,
- * PUBLIC: void *, int32_t, db_pgno_t, int32_t));
- * PUBLIC: #endif
+ * PUBLIC: DB_TXNHEAD *, int32_t, db_pgno_t, u_int32_t));
*/
int
-__db_add_limbo(dbenv, info, fileid, pgno, count)
+__db_add_limbo(dbenv, hp, fileid, pgno, count)
DB_ENV *dbenv;
- void *info;
+ DB_TXNHEAD *hp;
int32_t fileid;
db_pgno_t pgno;
- int32_t count;
+ u_int32_t count;
{
DB_LOG *dblp;
FNAME *fnp;
@@ -907,7 +893,7 @@ __db_add_limbo(dbenv, info, fileid, pgno, count)
do {
if ((ret =
- __db_txnlist_pgnoadd(dbenv, info, fileid, fnp->ufid,
+ __db_txnlist_pgnoadd(dbenv, hp, fileid, fnp->ufid,
R_ADDR(&dblp->reginfo, fnp->name_off), pgno)) != 0)
return (ret);
pgno++;
@@ -948,10 +934,8 @@ __db_add_limbo(dbenv, info, fileid, pgno, count)
* "create list and write meta-data page" algorithm. Otherwise, we're in
* an abort and doing the "use compensating transaction" algorithm.
*
- * PUBLIC: #ifndef HAVE_FTRUNCATE
* PUBLIC: int __db_do_the_limbo __P((DB_ENV *,
* PUBLIC: DB_TXN *, DB_TXN *, DB_TXNHEAD *, db_limbo_state));
- * PUBLIC: #endif
*/
int
__db_do_the_limbo(dbenv, ptxn, txn, hp, state)
@@ -983,7 +967,7 @@ __db_do_the_limbo(dbenv, ptxn, txn, hp, state)
}
err: if (ret != 0) {
- __db_err(dbenv, "Fatal error in abort of an allocation");
+ __db_errx(dbenv, "Fatal error in abort of an allocation");
ret = __db_panic(dbenv, ret);
}
@@ -1136,9 +1120,9 @@ retry: dbp_created = 0;
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);
+ ret = __db_open(dbp, t, elp->u.p.fname, NULL,
+ DB_UNKNOWN, DB_ODDFILESIZE, __db_omode(OWNER_RW),
+ PGNO_BASE_MD);
if (ret == ENOENT)
goto next;
}
@@ -1153,10 +1137,12 @@ retry: dbp_created = 0;
mpf = dbp->mpf;
last_pgno = PGNO_INVALID;
- if (meta == NULL &&
+ if (meta == NULL &&
(ctxn == NULL || state == LIMBO_COMPENSATE)) {
pgno = PGNO_BASE_MD;
- if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn,
+ (state != LIMBO_PREPARE) ? DB_MPOOL_DIRTY : 0,
+ &meta)) != 0)
goto err;
last_pgno = meta->free;
}
@@ -1194,13 +1180,11 @@ retry: dbp_created = 0;
* off the recovery flag briefly.
*/
if (state == LIMBO_COMPENSATE)
- F_CLR(
- (DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_CLR(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);
+ F_SET(dbenv->lg_handle, DBLOG_RECOVER);
if (ret != 0)
goto retry;
}
@@ -1225,7 +1209,7 @@ retry: dbp_created = 0;
* 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");
+ __db_errx(dbenv, "Flushing free list to disk");
if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
meta = NULL;
@@ -1240,18 +1224,16 @@ retry: dbp_created = 0;
*/
if ((ret = __db_sync(dbp)) == 0) {
pgno = PGNO_BASE_MD;
- if ((ret =
- __memp_fget(mpf, &pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn,
+ DB_MPOOL_DIRTY, &meta)) != 0)
goto err;
meta->free = last_pgno;
- if ((ret = __memp_fput(mpf,
- meta, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
meta = NULL;
} else {
- __db_err(dbenv,
- "%s: %s", dbp->fname, db_strerror(ret));
- __db_err(dbenv, "%s: %s %s", dbp->fname,
+ __db_err(dbenv, ret, "%s", dbp->fname);
+ __db_errx(dbenv, "%s: %s %s", dbp->fname,
"allocation flush failed, some free pages",
"may not appear in the free list");
ret = 0;
@@ -1324,8 +1306,8 @@ __db_limbo_fix(dbp, ctxn, elp, lastp, meta, state)
if (pgno == PGNO_INVALID)
continue;
- if ((ret =
- __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, ctxn,
+ DB_MPOOL_CREATE | DB_MPOOL_EDIT, &pagep)) != 0) {
if (ret != ENOSPC)
goto err;
continue;
@@ -1342,7 +1324,7 @@ __db_limbo_fix(dbp, ctxn, elp, lastp, meta, state)
if (next == pgno)
break;
if ((ret = __memp_fget(mpf,
- &next, 0, &freep)) != 0)
+ &next, ctxn, 0, &freep)) != 0)
goto err;
next = NEXT_PGNO(freep);
if ((ret =
@@ -1382,7 +1364,16 @@ __db_limbo_fix(dbp, ctxn, elp, lastp, meta, state)
* marked compensating, but in case we didn't
* do the open, we have to mark it explicitly.
*/
- F_SET(dbc, DBC_COMPENSATE);
+ F_SET(dbc, DBC_DONTLOCK);
+
+ /*
+ * If aborting a txn for a different process
+ * via XA or failchk, DB_AM_RECOVER will be
+ * set but we need to log the compensating
+ * transactions.
+ */
+ F_CLR(dbc, DBC_RECOVER);
+
ret = __db_free(dbc, pagep);
pagep = NULL;
@@ -1407,15 +1398,15 @@ __db_limbo_fix(dbp, ctxn, elp, lastp, meta, state)
elp->u.p.pgno_array[i] = PGNO_INVALID;
if (pagep != NULL) {
- ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, pagep, 0);
pagep = NULL;
}
if (ret != 0)
goto err;
}
-err: if (pagep != NULL &&
- (t_ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+err: if (pagep != NULL && (t_ret = __memp_fput(mpf, pagep, 0)) != 0 &&
+ ret == 0)
ret = t_ret;
if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
@@ -1446,8 +1437,8 @@ __db_limbo_prepare(dbp, txn, elp)
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 = __memp_fget(mpf,
+ &pgno, txn, DB_MPOOL_CREATE, &pagep)) != 0) {
if (ret != ENOSPC)
return (ret);
continue;
@@ -1530,31 +1521,26 @@ __db_txnlist_pgnoadd(dbenv, hp, fileid, uid, fname, pgno)
err: return (ret);
}
-#endif
#ifdef DEBUG
/*
* __db_txnlist_print --
* Print out the transaction list.
*
- * PUBLIC: void __db_txnlist_print __P((void *));
+ * PUBLIC: void __db_txnlist_print __P((DB_TXNHEAD *));
*/
void
-__db_txnlist_print(listp)
- void *listp;
-{
+__db_txnlist_print(hp)
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 (i = 0; i < hp->nslots; i++)
- for (p = LIST_FIRST(&hp->head[i]);
- p != NULL; p = LIST_NEXT(p, links)) {
+ LIST_FOREACH(p, &hp->head[i], links) {
if (p->type != TXNLIST_TXNID) {
printf("Unrecognized type: %d\n", p->type);
continue;
diff --git a/db/db/db_dup.c b/db/db/db_dup.c
index 725e81cce..84b326c0c 100644
--- a/db/db/db_dup.c
+++ b/db/db/db_dup.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_dup.c,v 11.39 2004/02/18 21:34:37 bostic Exp $
+ * $Id: db_dup.c,v 12.9 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#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/mp.h"
#include "dbinc/db_am.h"
@@ -40,6 +33,9 @@ __db_ditem(dbc, pagep, indx, nbytes)
u_int8_t *from;
dbp = dbc->dbp;
+ DB_ASSERT(dbp->dbenv, IS_DIRTY(pagep));
+ DB_ASSERT(dbp->dbenv, indx < NUM_ENT(pagep));
+
if (DBC_LOGGING(dbc)) {
ldbt.data = P_ENTRY(dbp, pagep, indx);
ldbt.size = nbytes;
@@ -66,7 +62,7 @@ __db_ditem(dbc, pagep, indx, nbytes)
* memmove(3), the regions may overlap.
*/
from = (u_int8_t *)pagep + HOFFSET(pagep);
- DB_ASSERT((int)inp[indx] - HOFFSET(pagep) >= 0);
+ DB_ASSERT(dbp->dbenv, inp[indx] >= HOFFSET(pagep));
memmove(from + nbytes, from, inp[indx] - HOFFSET(pagep));
HOFFSET(pagep) += nbytes;
@@ -108,8 +104,10 @@ __db_pitem(dbc, pagep, indx, nbytes, hdr, data)
u_int8_t *p;
dbp = dbc->dbp;
+ DB_ASSERT(dbp->dbenv, IS_DIRTY(pagep));
+
if (nbytes > P_FREESPACE(dbp, pagep)) {
- DB_ASSERT(nbytes <= P_FREESPACE(dbp, pagep));
+ DB_ASSERT(dbp->dbenv, nbytes <= P_FREESPACE(dbp, pagep));
return (EINVAL);
}
/*
@@ -138,7 +136,7 @@ __db_pitem(dbc, pagep, indx, nbytes, hdr, data)
LSN_NOT_LOGGED(LSN(pagep));
if (hdr == NULL) {
- B_TSET(bk.type, B_KEYDATA, 0);
+ B_TSET(bk.type, B_KEYDATA);
bk.len = data == NULL ? 0 : data->size;
thdr.data = &bk;
diff --git a/db/db/db_iface.c b/db/db/db_iface.c
index 7be20ede1..bf41332df 100644
--- a/db/db/db_iface.c
+++ b/db/db/db_iface.c
@@ -1,71 +1,59 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_iface.c,v 11.121 2004/10/07 17:33:32 sue Exp $
+ * $Id: db_iface.c,v 12.51 2006/09/19 15:06:58 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
+#ifndef HAVE_HASH
#include "dbinc/hash.h" /* For __db_no_hash_am(). */
+#endif
+#ifndef HAVE_QUEUE
#include "dbinc/qam.h" /* For __db_no_queue_am(). */
+#endif
#include "dbinc/lock.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
static int __db_associate_arg __P((DB *, DB *,
int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
+static int __db_c_del_arg __P((DBC *, 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_del_arg __P((DB *, DBT *, u_int32_t));
+static int __db_get_arg __P((const DB *, 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 __dbt_ferr __P((const DB *, const char *, const DBT *, int));
/*
- * 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) && \
- !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).
+ * processing (incrementing handle counts, handling local transactions),
+ * call the function and then do post-amble processing (local transactions,
+ * decrement handle counts).
*
- * So, the basic structure is:
- * Check for generic errors
- * Call function-specific check routine
- * Increment handle count
+ * The basic structure is:
+ * Check for simple/generic errors (PANIC'd region)
+ * Check if replication is changing state (increment handle count).
+ * Call function-specific argument checking routine
* Create internal transaction if necessary
* Call underlying worker function
* Commit/abort internal transaction if necessary
@@ -88,14 +76,24 @@ __db_associate_pp(dbp, txn, sdbp, callback, flags)
{
DBC *sdbc;
DB_ENV *dbenv;
- int handle_check, ret, txn_local;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret, txn_local;
dbenv = dbp->dbenv;
+ txn_local = 0;
PANIC_CHECK(dbenv);
+ STRIP_AUTO_COMMIT(flags);
- if ((ret = __db_associate_arg(dbp, sdbp, callback, flags)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
/*
* Secondary cursors may have the primary's lock file ID, so we need
@@ -104,46 +102,45 @@ __db_associate_pp(dbp, txn, sdbp, callback, flags)
*/
if (TAILQ_FIRST(&sdbp->active_queue) != NULL ||
TAILQ_FIRST(&sdbp->join_queue) != NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Databases may not become secondary indices while cursors are open");
- return (EINVAL);
+ ret = EINVAL;
+ goto err;
}
+ if ((ret = __db_associate_arg(dbp, sdbp, callback, flags)) != 0)
+ goto err;
+
/*
* 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);
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
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, 0, txn != NULL)) != 0)
- goto err;
-
while ((sdbc = TAILQ_FIRST(&sdbp->free_queue)) != NULL)
if ((ret = __db_c_destroy(sdbc)) != 0)
- break;
+ goto err;
- if (ret == 0)
- ret = __db_associate(dbp, txn, sdbp, callback, flags);
+ ret = __db_associate(dbp, txn, sdbp, callback, flags);
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+err: if (txn_local &&
+ (t_ret = __db_txn_auto_resolve(dbenv, txn, 0, ret)) && ret == 0)
+ ret = t_ret;
-err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
}
/*
@@ -162,47 +159,55 @@ __db_associate_arg(dbp, sdbp, callback, flags)
dbenv = dbp->dbenv;
if (F_ISSET(sdbp, DB_AM_SECONDARY)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Secondary index handles may not be re-associated");
return (EINVAL);
}
if (F_ISSET(dbp, DB_AM_SECONDARY)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Secondary indices may not be used as primary databases");
return (EINVAL);
}
if (F_ISSET(dbp, DB_AM_DUP)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Primary databases may not be configured with duplicates");
return (EINVAL);
}
if (F_ISSET(dbp, DB_AM_RENUMBER)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Renumbering recno databases may not be used as primary databases");
return (EINVAL);
}
+
+ /*
+ * It's OK for the primary and secondary to not share an environment IFF
+ * the environments are local to the DB handle. (Specifically, cursor
+ * adjustment will work correctly in this case.) The environment being
+ * local implies the environment is not configured for either locking or
+ * transactions, as neither of those could work correctly.
+ */
if (dbp->dbenv != sdbp->dbenv &&
(!F_ISSET(dbp->dbenv, DB_ENV_DBLOCAL) ||
!F_ISSET(sdbp->dbenv, DB_ENV_DBLOCAL))) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"The primary and secondary must be opened in the same environment");
return (EINVAL);
}
if ((DB_IS_THREADED(dbp) && !DB_IS_THREADED(sdbp)) ||
(!DB_IS_THREADED(dbp) && DB_IS_THREADED(sdbp))) {
- __db_err(dbenv,
+ __db_errx(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,
+ __db_errx(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)
+ if ((ret = __db_fchk(dbenv, "DB->associate", flags, DB_CREATE |
+ DB_IMMUTABLE_KEY)) != 0)
return (ret);
return (0);
@@ -220,6 +225,7 @@ __db_close_pp(dbp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
@@ -228,20 +234,20 @@ __db_close_pp(dbp, flags)
PANIC_CHECK(dbenv);
/*
- * !!!
- * The actual argument checking is simple, do it inline.
+ * Close a DB handle -- as a handle destructor, we can't fail.
*
- * Validate arguments and complain if they're wrong, but as a DB
- * handle destructor, we can't fail.
+ * !!!
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
*/
- if (flags != 0 && flags != DB_NOSYNC &&
- (t_ret = __db_ferr(dbenv, "DB->close", 0)) != 0 && ret == 0)
- ret = t_ret;
+ if (flags != 0 && flags != DB_NOSYNC)
+ ret = __db_ferr(dbenv, "DB->close", 0);
+
+ ENV_ENTER(dbenv, ip);
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check &&
- (t_ret = __db_rep_enter(dbp, 0, 0, 0)) != 0) {
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (t_ret = __db_rep_enter(dbp, 0, 0, 0)) != 0) {
handle_check = 0;
if (ret == 0)
ret = t_ret;
@@ -251,9 +257,10 @@ __db_close_pp(dbp, flags)
ret = t_ret;
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -271,6 +278,7 @@ __db_cursor_pp(dbp, txn, dbcp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
int handle_check, ret;
dbenv = dbp->dbenv;
@@ -278,30 +286,37 @@ __db_cursor_pp(dbp, txn, dbcp, flags)
PANIC_CHECK(dbenv);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->cursor");
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ if (txn == NULL) {
+ handle_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (handle_check && (ret = __op_rep_enter(dbenv)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+ } else
+ handle_check = 0;
if ((ret = __db_cursor_arg(dbp, flags)) != 0)
- return (ret);
+ goto err;
/*
- * 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.)
+ * Check for consistent transaction usage. For now, assume 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 this means the read-op txn tests have
+ * to be a subset of the write-op ones.)
*/
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, 0, txn != NULL)) != 0)
- return (ret);
+ goto err;
ret = __db_cursor(dbp, txn, dbcp, flags);
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+err: /* Release replication block on error. */
+ if (ret != 0 && handle_check)
+ (void)__op_rep_exit(dbenv);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -326,6 +341,14 @@ __db_cursor(dbp, txn, dbcp, flags)
dbenv = dbp->dbenv;
+ if (MULTIVERSION(dbp) && txn == NULL && (LF_ISSET(DB_TXN_SNAPSHOT) ||
+ F_ISSET(dbenv, DB_ENV_TXN_SNAPSHOT))) {
+ if ((ret =
+ __txn_begin(dbenv, NULL, &txn, DB_TXN_SNAPSHOT)) != 0)
+ return (ret);
+ F_SET(txn, TXN_PRIVATE);
+ }
+
if ((ret = __db_cursor_int(dbp,
txn, dbp->type, PGNO_INVALID, 0, DB_LOCK_INVALIDID, &dbc)) != 0)
return (ret);
@@ -337,7 +360,8 @@ __db_cursor(dbp, txn, dbcp, flags)
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);
+ ((op == DB_WRITECURSOR || txn != NULL) ? DB_LOCK_IWRITE :
+ DB_LOCK_READ);
if ((ret = __lock_get(dbenv, dbc->locker, 0,
&dbc->lock_dbt, mode, &dbc->mylock)) != 0)
goto err;
@@ -347,13 +371,13 @@ __db_cursor(dbp, txn, dbcp, flags)
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);
+ if (LF_ISSET(DB_READ_UNCOMMITTED) ||
+ (txn != NULL && F_ISSET(txn, TXN_READ_UNCOMMITTED)))
+ F_SET(dbc, DBC_READ_UNCOMMITTED);
- if (LF_ISSET(DB_DEGREE_2) ||
- (txn != NULL && F_ISSET(txn, TXN_DEGREE_2)))
- F_SET(dbc, DBC_DEGREE_2);
+ if (LF_ISSET(DB_READ_COMMITTED) ||
+ (txn != NULL && F_ISSET(txn, TXN_READ_COMMITTED)))
+ F_SET(dbc, DBC_READ_COMMITTED);
*dbcp = dbc;
return (0);
@@ -376,27 +400,27 @@ __db_cursor_arg(dbp, flags)
dbenv = dbp->dbenv;
/*
- * DB_DIRTY_READ and DB_DGREE_2 are the only valid bit-flags
- * and requires locking.
+ * DB_READ_COMMITTED and DB_READ_UNCOMMITTED require locking.
*/
- if (LF_ISSET(DB_DIRTY_READ | DB_DEGREE_2)) {
+ if (LF_ISSET(DB_READ_COMMITTED | DB_READ_UNCOMMITTED)) {
if (!LOCKING_ON(dbenv))
return (__db_fnl(dbenv, "DB->cursor"));
- LF_CLR(DB_DIRTY_READ | DB_DEGREE_2);
}
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_TXN_SNAPSHOT);
+
/* Check for invalid function flags. */
switch (flags) {
case 0:
break;
case DB_WRITECURSOR:
- if (IS_READONLY(dbp))
+ if (DB_IS_READONLY(dbp))
return (__db_rdonly(dbenv, "DB->cursor"));
if (!CDB_LOCKING(dbenv))
return (__db_ferr(dbenv, "DB->cursor", 0));
break;
case DB_WRITELOCK:
- if (IS_READONLY(dbp))
+ if (DB_IS_READONLY(dbp))
return (__db_rdonly(dbenv, "DB->cursor"));
break;
default:
@@ -420,41 +444,56 @@ __db_del_pp(dbp, txn, key, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret, txn_local;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret, txn_local;
dbenv = dbp->dbenv;
+ txn_local = 0;
PANIC_CHECK(dbenv);
+ STRIP_AUTO_COMMIT(flags);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->del");
- if ((ret = __db_del_arg(dbp, flags)) != 0)
- return (ret);
+#ifdef CONFIG_TEST
+ if (IS_REP_MASTER(dbenv))
+ DB_TEST_WAIT(dbenv, dbenv->test_check);
+#endif
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
+ if ((ret = __db_del_arg(dbp, key, flags)) != 0)
+ goto err;
/* Create local transaction as necessary. */
- if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
- if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
- return (ret);
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
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, 0, txn != NULL)) != 0)
- goto err;
-
ret = __db_del(dbp, txn, key, flags);
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+err: if (txn_local &&
+ (t_ret = __db_txn_auto_resolve(dbenv, txn, 0, ret)) && ret == 0)
+ ret = t_ret;
-err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, key, NULL, NULL);
+ return (ret);
}
/*
@@ -462,22 +501,25 @@ err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
* Check DB->delete arguments.
*/
static int
-__db_del_arg(dbp, flags)
+__db_del_arg(dbp, key, flags)
DB *dbp;
+ DBT *key;
u_int32_t flags;
{
DB_ENV *dbenv;
+ int ret;
dbenv = dbp->dbenv;
/* Check for changes to a read-only tree. */
- if (IS_READONLY(dbp))
+ if (DB_IS_READONLY(dbp))
return (__db_rdonly(dbenv, "DB->del"));
/* Check for invalid function flags. */
- LF_CLR(DB_AUTO_COMMIT);
switch (flags) {
case 0:
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0)
+ return (ret);
break;
default:
return (__db_ferr(dbenv, "DB->del", 0));
@@ -498,18 +540,21 @@ __db_fd_pp(dbp, fdp)
int *fdp;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
DB_FH *fhp;
- int handle_check, ret;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
PANIC_CHECK(dbenv);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->fd");
+ ENV_ENTER(dbenv, ip);
+
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
+ handle_check = IS_ENV_REPLICATED(dbenv);
if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0)
- return (ret);
+ goto err;
/*
* !!!
@@ -521,21 +566,21 @@ __db_fd_pp(dbp, fdp)
* XXX
* Truly spectacular layering violation.
*/
- 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;
+ if ((ret = __mp_xxx_fh(dbp->mpf, &fhp)) == 0) {
+ if (fhp == NULL) {
+ *fdp = -1;
+ __db_errx(dbenv,
+ "Database does not have a valid file handle");
+ ret = ENOENT;
+ } else
+ *fdp = fhp->fd;
+ }
-err: /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -553,29 +598,40 @@ __db_get_pp(dbp, txn, key, data, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
u_int32_t mode;
- int handle_check, ret, txn_local;
+ int handle_check, ret, t_ret, txn_local;
dbenv = dbp->dbenv;
+ mode = 0;
+ txn_local = 0;
PANIC_CHECK(dbenv);
+ STRIP_AUTO_COMMIT(flags);
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;
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
+ if (LF_ISSET(DB_READ_UNCOMMITTED))
+ mode = DB_READ_UNCOMMITTED;
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);
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
txn_local = 1;
- LF_CLR(DB_AUTO_COMMIT);
}
}
@@ -584,18 +640,19 @@ __db_get_pp(dbp, txn, key, data, flags)
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, 0, txn != NULL)) != 0)
- goto err;
-
ret = __db_get(dbp, txn, key, data, flags);
+err: if (txn_local &&
+ (t_ret = __db_txn_auto_resolve(dbenv, txn, 0, ret)) && ret == 0)
+ ret = t_ret;
+
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
-err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+ ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, key, NULL, data);
+ return (ret);
}
/*
@@ -616,12 +673,12 @@ __db_get(dbp, txn, key, data, flags)
int ret, t_ret;
mode = 0;
- if (LF_ISSET(DB_DIRTY_READ)) {
- mode = DB_DIRTY_READ;
- LF_CLR(DB_DIRTY_READ);
- } else if (LF_ISSET(DB_DEGREE_2)) {
- mode = DB_DEGREE_2;
- LF_CLR(DB_DEGREE_2);
+ if (LF_ISSET(DB_READ_UNCOMMITTED)) {
+ mode = DB_READ_UNCOMMITTED;
+ LF_CLR(DB_READ_UNCOMMITTED);
+ } else if (LF_ISSET(DB_READ_COMMITTED)) {
+ mode = DB_READ_COMMITTED;
+ LF_CLR(DB_READ_COMMITTED);
} else if ((flags & DB_OPFLAGS_MASK) == DB_CONSUME ||
(flags & DB_OPFLAGS_MASK) == DB_CONSUME_WAIT)
mode = DB_WRITELOCK;
@@ -666,8 +723,7 @@ __db_get(dbp, txn, key, data, flags)
static int
__db_get_arg(dbp, key, data, flags)
const DB *dbp;
- const DBT *key;
- DBT *data;
+ DBT *key, *data;
u_int32_t flags;
{
DB_ENV *dbenv;
@@ -684,14 +740,15 @@ __db_get_arg(dbp, key, data, flags)
* flag in a path where CDB may have been configured.
*/
check_thread = dirty = 0;
- if (LF_ISSET(DB_DIRTY_READ | DB_RMW | DB_DEGREE_2)) {
+ if (LF_ISSET(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW)) {
if (!LOCKING_ON(dbenv))
return (__db_fnl(dbenv, "DB->get"));
- dirty = LF_ISSET(DB_DIRTY_READ | DB_DEGREE_2);
- if ((ret = __db_fcchk(dbenv,
- "DB->get", flags, DB_DIRTY_READ, DB_DEGREE_2)) != 0)
+ if ((ret = __db_fcchk(dbenv, "DB->get",
+ flags, DB_READ_UNCOMMITTED, DB_READ_COMMITTED)) != 0)
return (ret);
- LF_CLR(DB_DIRTY_READ | DB_RMW | DB_DEGREE_2);
+ if (LF_ISSET(DB_READ_COMMITTED | DB_READ_UNCOMMITTED))
+ dirty = 1;
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW);
}
multi = 0;
@@ -702,30 +759,33 @@ __db_get_arg(dbp, key, data, flags)
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. */
switch (flags) {
- case 0:
case DB_GET_BOTH:
+ if ((ret = __dbt_usercopy(dbenv, data)) != 0)
+ return (ret);
+ /* FALLTHROUGH */
+ case 0:
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0) {
+ __dbt_userfree(dbenv, key, NULL, data);
+ return (ret);
+ }
break;
case DB_SET_RECNO:
check_thread = 1;
if (!F_ISSET(dbp, DB_AM_RECNUM))
goto err;
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0)
+ return (ret);
break;
case DB_CONSUME:
case DB_CONSUME_WAIT:
check_thread = 1;
if (dirty) {
- __db_err(dbenv,
- "%s is not supported with DB_CONSUME or DB_CONSUME_WAIT",
- LF_ISSET(DB_DIRTY_READ) ?
- "DB_DIRTY_READ" : "DB_DEGREE_2");
+ __db_errx(dbenv,
+ "%s is not supported with DB_CONSUME or DB_CONSUME_WAIT",
+ LF_ISSET(DB_READ_UNCOMMITTED) ?
+ "DB_READ_UNCOMMITTED" : "DB_READ_COMMITTED");
return (EINVAL);
}
if (multi)
@@ -750,19 +810,19 @@ err: return (__db_ferr(dbenv, "DB->get", 0));
if (multi) {
if (!F_ISSET(data, DB_DBT_USERMEM)) {
- __db_err(dbenv,
+ __db_errx(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_errx(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_errx(dbenv, "%s%s",
"DB_MULTIPLE buffers must be ",
"aligned, at least page size and multiples of 1KB");
return (EINVAL);
@@ -785,27 +845,31 @@ __db_join_pp(primary, curslist, dbcp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = primary->dbenv;
PANIC_CHECK(dbenv);
- if ((ret = __db_join_arg(primary, curslist, flags)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, primary);
+ handle_check = IS_ENV_REPLICATED(dbenv);
if (handle_check && (ret =
- __db_rep_enter(primary, 1, 0, curslist[0]->txn != NULL)) != 0)
- return (ret);
+ __db_rep_enter(primary, 1, 0, curslist[0]->txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
- ret = __db_join(primary, curslist, dbcp, flags);
+ if ((ret = __db_join_arg(primary, curslist, flags)) == 0)
+ ret = __db_join(primary, curslist, dbcp, flags);
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -834,7 +898,7 @@ __db_join_arg(primary, curslist, flags)
}
if (curslist == NULL || curslist[0] == NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"At least one secondary cursor must be specified to DB->join");
return (EINVAL);
}
@@ -842,7 +906,7 @@ __db_join_arg(primary, curslist, flags)
txn = curslist[0]->txn;
for (i = 1; curslist[i] != NULL; i++)
if (curslist[i]->txn != txn) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"All secondary cursors must share the same transaction");
return (EINVAL);
}
@@ -867,6 +931,7 @@ __db_key_range_pp(dbp, txn, key, kr, flags)
{
DBC *dbc;
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
@@ -876,19 +941,25 @@ __db_key_range_pp(dbp, txn, key, kr, flags)
/*
* !!!
- * The actual argument checking is simple, do it inline.
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
*/
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);
+ ENV_ENTER(dbenv, ip);
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0)
- return (ret);
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 1)) != 0)
+ goto err;
/*
* !!!
@@ -896,6 +967,9 @@ __db_key_range_pp(dbp, txn, key, kr, flags)
*/
switch (dbp->type) {
case DB_BTREE:
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0)
+ goto err;
+
/* Acquire a cursor. */
if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
break;
@@ -906,6 +980,7 @@ __db_key_range_pp(dbp, txn, key, kr, flags)
if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
+ __dbt_userfree(dbenv, key, NULL, NULL);
break;
case DB_HASH:
case DB_QUEUE:
@@ -918,10 +993,11 @@ __db_key_range_pp(dbp, txn, key, kr, flags)
break;
}
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+err: /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -942,16 +1018,17 @@ __db_open_pp(dbp, txn, fname, dname, type, flags, mode)
int mode;
{
DB_ENV *dbenv;
- int handle_check, nosync, remove_me, ret, txn_local;
+ DB_THREAD_INFO *ip;
+ int handle_check, nosync, remove_me, ret, t_ret, txn_local;
dbenv = dbp->dbenv;
nosync = 1;
- remove_me = 0;
+ remove_me = txn_local = 0;
+ handle_check = 0;
PANIC_CHECK(dbenv);
- if ((ret = __db_open_arg(dbp, txn, fname, dname, type, flags)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
/*
* Save the file and database names and flags. We do this here
@@ -959,40 +1036,48 @@ __db_open_pp(dbp, txn, fname, dname, type, flags, mode)
* 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, fname, &dbp->fname)) != 0))
+ goto err;
+ if ((dname != NULL &&
(ret = __os_strdup(dbenv, dname, &dbp->dname)) != 0))
- return (ret);
+ goto err;
dbp->open_flags = flags;
/* Save the current DB handle flags for refresh. */
dbp->orig_flags = dbp->flags;
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
/*
* Create local transaction as necessary, check for consistent
* transaction usage.
*/
- txn_local = 0;
- if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if (IS_ENV_AUTO_COMMIT(dbenv, txn, flags)) {
if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
- return (ret);
+ goto err;
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, 0, txn != NULL)) != 0) {
- handle_check = 0;
+ } else if (txn != NULL && !TXN_ON(dbenv) &&
+ (!CDB_LOCKING(dbenv) || !F_ISSET(txn, TXN_CDSGROUP))) {
+ ret = __db_not_txn_env(dbenv);
goto err;
}
+ LF_CLR(DB_AUTO_COMMIT);
- if ((ret = __db_open(dbp,
- txn, fname, dname, type, flags, mode, PGNO_BASE_MD)) != 0)
- goto err;
+ /*
+ * We check arguments after possibly creating a local transaction,
+ * which is unusual -- the reason is some flags are illegal if any
+ * kind of transaction is in effect.
+ */
+ if ((ret = __db_open_arg(dbp, txn, fname, dname, type, flags)) == 0)
+ if ((ret = __db_open(dbp, txn, fname, dname, type,
+ flags, mode, PGNO_BASE_MD)) != 0)
+ goto txnerr;
/*
* You can open the database that describes the subdatabases in the
@@ -1006,10 +1091,10 @@ __db_open_pp(dbp, txn, fname, dname, type, flags, mode)
*/
if (dname == NULL && !IS_RECOVERING(dbenv) && !LF_ISSET(DB_RDONLY) &&
!LF_ISSET(DB_RDWRMASTER) && F_ISSET(dbp, DB_AM_SUBDB)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"files containing multiple databases may only be opened read-only");
ret = EINVAL;
- goto err;
+ goto txnerr;
}
/*
@@ -1026,7 +1111,7 @@ __db_open_pp(dbp, txn, fname, dname, type, flags, mode)
* If not transactional, remove the databases/subdatabases. If we're
* transactional, the child transaction abort cleans up.
*/
-err: if (ret != 0 && txn == NULL) {
+txnerr: if (ret != 0 && !IS_REAL_TXN(txn)) {
remove_me = F_ISSET(dbp, DB_AM_CREATED);
if (F_ISSET(dbp, DB_AM_CREATED_MSTR) ||
(dname == NULL && remove_me))
@@ -1037,12 +1122,16 @@ err: if (ret != 0 && txn == NULL) {
(void)__db_remove_int(dbp, txn, fname, dname, DB_FORCE);
}
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (txn_local && (t_ret =
+ __db_txn_auto_resolve(dbenv, txn, nosync, ret)) && ret == 0)
+ ret = t_ret;
- return (txn_local ?
- __db_txn_auto_resolve(dbenv, txn, nosync, ret) : ret);
+err: /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
}
/*
@@ -1066,9 +1155,10 @@ __db_open_arg(dbp, txn, fname, dname, type, flags)
/* 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)
+ (DB_AUTO_COMMIT | DB_CREATE | DB_EXCL | DB_FCNTL_LOCKING | \
+ DB_MULTIVERSION | DB_NOMMAP | DB_NO_AUTO_COMMIT | DB_RDONLY | \
+ DB_RDWRMASTER | DB_READ_UNCOMMITTED | 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))
@@ -1078,16 +1168,15 @@ __db_open_arg(dbp, txn, fname, dname, type, flags)
#ifdef HAVE_VXWORKS
if (LF_ISSET(DB_TRUNCATE)) {
- __db_err(dbenv, "DB_TRUNCATE not supported on VxWorks");
+ __db_errx(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);
+ __db_errx(dbenv,
+ "DB_UNKNOWN type specified with DB_CREATE or DB_TRUNCATE");
return (EINVAL);
}
ok_flags = 0;
@@ -1111,7 +1200,7 @@ __db_open_arg(dbp, txn, fname, dname, type, flags)
ok_flags = DB_OK_RECNO;
break;
default:
- __db_err(dbenv, "unknown type: %lu", (u_long)type);
+ __db_errx(dbenv, "unknown type: %lu", (u_long)type);
return (EINVAL);
}
if (ok_flags)
@@ -1119,7 +1208,7 @@ __db_open_arg(dbp, txn, fname, dname, type, 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");
+ __db_errx(dbenv, "database environment not yet opened");
return (EINVAL);
}
@@ -1129,7 +1218,7 @@ __db_open_arg(dbp, txn, fname, dname, type, flags)
* no longer works.
*/
if (!F_ISSET(dbenv, DB_ENV_DBLOCAL) && !MPOOL_ON(dbenv)) {
- __db_err(dbenv, "environment did not include a memory pool");
+ __db_errx(dbenv, "environment did not include a memory pool");
return (EINVAL);
}
@@ -1139,13 +1228,26 @@ __db_open_arg(dbp, txn, fname, dname, type, flags)
*/
if (LF_ISSET(DB_THREAD) &&
!F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_THREAD)) {
- __db_err(dbenv, "environment not created using DB_THREAD");
+ __db_errx(dbenv, "environment not created using DB_THREAD");
+ return (EINVAL);
+ }
+
+ /* DB_MULTIVERSION requires a database configured for transactions. */
+ if (LF_ISSET(DB_MULTIVERSION) && !IS_REAL_TXN(txn)) {
+ __db_errx(dbenv,
+ "DB_MULTIVERSION illegal without a transaction specified");
+ return (EINVAL);
+ }
+
+ if (LF_ISSET(DB_MULTIVERSION) && type == DB_QUEUE) {
+ __db_errx(dbenv,
+ "DB_MULTIVERSION illegal with queue databases");
return (EINVAL);
}
/* DB_TRUNCATE is neither transaction recoverable nor lockable. */
if (LF_ISSET(DB_TRUNCATE) && (LOCKING_ON(dbenv) || txn != NULL)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_TRUNCATE illegal with %s specified",
LOCKING_ON(dbenv) ? "locking" : "transactions");
return (EINVAL);
@@ -1153,18 +1255,19 @@ __db_open_arg(dbp, txn, fname, dname, type, flags)
/* 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");
+ /* QAM can only be done on in-memory subdatabases. */
+ if (type == DB_QUEUE && fname != NULL) {
+ __db_errx(
+ dbenv, "Queue databases must be one-per-file");
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);
- }
+ /*
+ * Named in-memory databases can't support certain flags,
+ * so check here.
+ */
+ if (fname == NULL)
+ F_CLR(dbp, DB_AM_CHKSUM | DB_AM_ENCRYPT);
}
return (0);
@@ -1185,30 +1288,38 @@ __db_pget_pp(dbp, txn, skey, pkey, data, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
PANIC_CHECK(dbenv);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->pget");
- if ((ret = __db_pget_arg(dbp, pkey, flags)) != 0)
+ if ((ret = __db_pget_arg(dbp, pkey, flags)) != 0 ||
+ (ret = __db_get_arg(dbp, skey, data, flags)) != 0) {
+ __dbt_userfree(dbenv, skey, pkey, data);
return (ret);
+ }
- if ((ret = __db_get_arg(dbp, skey, data, flags)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0)
- return (ret);
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
ret = __db_pget(dbp, txn, skey, pkey, data, flags);
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+err: /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, skey, pkey, data);
return (ret);
}
@@ -1227,9 +1338,19 @@ __db_pget(dbp, txn, skey, pkey, data, flags)
u_int32_t flags;
{
DBC *dbc;
+ u_int32_t mode;
int ret, t_ret;
- if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
+ if (LF_ISSET(DB_READ_UNCOMMITTED)) {
+ mode = DB_READ_UNCOMMITTED;
+ LF_CLR(DB_READ_UNCOMMITTED);
+ } else if (LF_ISSET(DB_READ_COMMITTED)) {
+ mode = DB_READ_COMMITTED;
+ LF_CLR(DB_READ_COMMITTED);
+ } else
+ mode = 0;
+
+ if ((ret = __db_cursor(dbp, txn, &dbc, mode)) != 0)
return (ret);
SET_RET_MEM(dbc, dbp);
@@ -1284,19 +1405,19 @@ __db_pget_arg(dbp, pkey, flags)
dbenv = dbp->dbenv;
if (!F_ISSET(dbp, DB_AM_SECONDARY)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB->pget may only be used on secondary indices");
return (EINVAL);
}
if (LF_ISSET(DB_MULTIPLE | DB_MULTIPLE_KEY)) {
- __db_err(dbenv,
+ __db_errx(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);
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW);
switch (flags) {
case DB_CONSUME:
case DB_CONSUME_WAIT:
@@ -1314,11 +1435,15 @@ __db_pget_arg(dbp, pkey, flags)
(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,
+ if (flags == DB_GET_BOTH) {
+ /* The pkey field can't be NULL if we're doing a DB_GET_BOTH. */
+ if (pkey == NULL) {
+ __db_errx(dbenv,
"DB_GET_BOTH on a secondary index requires a primary key");
- return (EINVAL);
+ return (EINVAL);
+ }
+ if ((ret = __dbt_usercopy(dbenv, pkey)) != 0)
+ return (ret);
}
return (0);
@@ -1338,41 +1463,53 @@ __db_put_pp(dbp, txn, key, data, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret, txn_local;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, txn_local, t_ret;
dbenv = dbp->dbenv;
+ txn_local = 0;
PANIC_CHECK(dbenv);
+ STRIP_AUTO_COMMIT(flags);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->put");
if ((ret = __db_put_arg(dbp, key, data, flags)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
/* Create local transaction as necessary. */
- if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
- if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
- return (ret);
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
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, 0, txn != NULL)) != 0)
- goto err;
-
ret = __db_put(dbp, txn, key, data, flags);
+err: if (txn_local &&
+ (t_ret = __db_txn_auto_resolve(dbenv, txn, 0, ret)) && ret == 0)
+ ret = t_ret;
+
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
-err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+ ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, key, NULL, data);
+ return (ret);
}
/*
@@ -1392,17 +1529,16 @@ __db_put_arg(dbp, key, data, flags)
returnkey = 0;
/* Check for changes to a read-only tree. */
- if (IS_READONLY(dbp))
- return (__db_rdonly(dbenv, "put"));
+ if (DB_IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DB->put"));
/* Check for puts on a secondary. */
if (F_ISSET(dbp, DB_AM_SECONDARY)) {
- __db_err(dbenv, "DB->put forbidden on secondary indices");
+ __db_errx(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:
@@ -1433,15 +1569,95 @@ err: return (__db_ferr(dbenv, "DB->put", 0));
/* Check for partial puts in the presence of duplicates. */
if (F_ISSET(data, DB_DBT_PARTIAL) &&
(F_ISSET(dbp, DB_AM_DUP) || F_ISSET(key, DB_DBT_DUPOK))) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"a partial put in the presence of duplicates requires a cursor operation");
return (EINVAL);
}
+ if ((flags != DB_APPEND && (ret = __dbt_usercopy(dbenv, key)) != 0) ||
+ (ret = __dbt_usercopy(dbenv, data)) != 0)
+ return (ret);
+
return (0);
}
/*
+ * __db_compact_pp --
+ * DB->compact pre/post processing.
+ *
+ * PUBLIC: int __db_compact_pp __P((DB *, DB_TXN *,
+ * PUBLIC: DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
+ */
+int
+__db_compact_pp(dbp, txn, start, stop, c_data, flags, end)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *start, *stop;
+ DB_COMPACT *c_data;
+ u_int32_t flags;
+ DBT *end;
+{
+ DB_COMPACT *dp, l_data;
+ DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->compact");
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
+ */
+ if ((flags & ~DB_COMPACT_FLAGS) != 0)
+ return (__db_ferr(dbenv, "DB->compact", 0));
+
+ /* Check for changes to a read-only database. */
+ if (DB_IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DB->compact"));
+
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
+ if (c_data == NULL) {
+ dp = &l_data;
+ memset(dp, 0, sizeof(*dp));
+ } else
+ dp = c_data;
+
+ switch (dbp->type) {
+ case DB_HASH:
+ if (!LF_ISSET(DB_FREELIST_ONLY))
+ goto err;
+ /* FALLTHROUGH */
+ case DB_BTREE:
+ case DB_RECNO:
+ ret = __bam_compact(dbp, txn, start, stop, dp, flags, end);
+ break;
+
+ default:
+err: ret = __dbh_am_chk(dbp, DB_OK_BTREE);
+ break;
+ }
+
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
+}
+
+/*
* __db_sync_pp --
* DB->sync pre/post processing.
*
@@ -1453,31 +1669,38 @@ __db_sync_pp(dbp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
- PANIC_CHECK(dbp->dbenv);
+ PANIC_CHECK(dbenv);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->sync");
/*
* !!!
- * The actual argument checking is simple, do it inline.
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
*/
if (flags != 0)
return (__db_ferr(dbenv, "DB->sync", 0));
+ ENV_ENTER(dbenv, ip);
+
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0)
- return (ret);
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
ret = __db_sync(dbp);
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -1492,13 +1715,15 @@ __db_c_close_pp(dbc)
DBC *dbc;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
DB *dbp;
- int handle_check, ret;
+ int handle_check, ret, t_ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
PANIC_CHECK(dbenv);
+ ENV_ENTER(dbenv, ip);
/*
* If the cursor is already closed we have a serious problem, and we
@@ -1506,24 +1731,21 @@ __db_c_close_pp(dbc)
* 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);
+ __db_errx(dbenv, "Closing already-closed cursor");
+ ret = EINVAL;
+ goto err;
}
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check &&
- (ret = __db_rep_enter(dbp, 0, 0, dbc->txn != NULL)) != 0)
- return (ret);
-
+ handle_check = dbc->txn == NULL && IS_ENV_REPLICATED(dbenv);
ret = __db_c_close(dbc);
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check &&
+ (t_ret = __op_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -1540,8 +1762,9 @@ __db_c_count_pp(dbc, recnop, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
DB *dbp;
- int handle_check, ret;
+ int ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -1550,30 +1773,21 @@ __db_c_count_pp(dbc, recnop, flags)
/*
* !!!
- * The actual argument checking is simple, do it inline.
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
+ *
+ * The cursor must be initialized, return EINVAL for an invalid cursor.
*/
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, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
ret = __db_c_count(dbc, recnop);
-
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
-
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -1590,7 +1804,8 @@ __db_c_del_pp(dbc, flags)
{
DB *dbp;
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -1600,34 +1815,24 @@ __db_c_del_pp(dbc, flags)
if ((ret = __db_c_del_arg(dbc, flags)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
/* 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, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ goto err;
DEBUG_LWRITE(dbc, dbc->txn, "DBcursor->del", NULL, NULL, flags);
-
ret = __db_c_del(dbc, flags);
-
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
-
+err:
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
/*
* __db_c_del_arg --
* Check DBC->c_del arguments.
- *
- * PUBLIC: int __db_c_del_arg __P((DBC *, u_int32_t));
*/
-int
+static int
__db_c_del_arg(dbc, flags)
DBC *dbc;
u_int32_t flags;
@@ -1639,7 +1844,7 @@ __db_c_del_arg(dbc, flags)
dbenv = dbp->dbenv;
/* Check for changes to a read-only tree. */
- if (IS_READONLY(dbp))
+ if (DB_IS_READONLY(dbp))
return (__db_rdonly(dbenv, "DBcursor->del"));
/* Check for invalid function flags. */
@@ -1647,7 +1852,7 @@ __db_c_del_arg(dbc, flags)
case 0:
break;
case DB_UPDATE_SECONDARY:
- DB_ASSERT(F_ISSET(dbp, DB_AM_SECONDARY));
+ DB_ASSERT(dbenv, F_ISSET(dbp, DB_AM_SECONDARY));
break;
default:
return (__db_ferr(dbenv, "DBcursor->del", 0));
@@ -1676,7 +1881,8 @@ __db_c_dup_pp(dbc, dbcp, flags)
{
DB *dbp;
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -1685,23 +1891,16 @@ __db_c_dup_pp(dbc, dbcp, flags)
/*
* !!!
- * The actual argument checking is simple, do it inline.
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
*/
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, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
ret = __db_c_dup(dbc, dbcp, flags);
-
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
-
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -1719,7 +1918,8 @@ __db_c_get_pp(dbc, key, data, flags)
{
DB *dbp;
DB_ENV *dbenv;
- int handle_check, ret;
+ int ret;
+ DB_THREAD_INFO *ip;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -1729,21 +1929,14 @@ __db_c_get_pp(dbc, key, data, flags)
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, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
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)
- __env_db_rep_exit(dbenv);
-
+ ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, key, NULL, data);
return (ret);
}
@@ -1780,12 +1973,12 @@ __db_c_get_arg(dbc, key, data, flags)
* flag in a path where CDB may have been configured.
*/
dirty = 0;
- if (LF_ISSET(DB_DIRTY_READ | DB_RMW)) {
+ if (LF_ISSET(DB_READ_UNCOMMITTED | DB_RMW)) {
if (!LOCKING_ON(dbenv))
return (__db_fnl(dbenv, "DBcursor->get"));
- if (LF_ISSET(DB_DIRTY_READ))
+ if (LF_ISSET(DB_READ_UNCOMMITTED))
dirty = 1;
- LF_CLR(DB_DIRTY_READ | DB_RMW);
+ LF_CLR(DB_READ_UNCOMMITTED | DB_RMW);
}
multi = 0;
@@ -1801,8 +1994,8 @@ __db_c_get_arg(dbc, key, data, flags)
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");
+ __db_errx(dbenv,
+ "DB_READ_UNCOMMITTED is not supported with DB_CONSUME or DB_CONSUME_WAIT");
return (EINVAL);
}
if (dbp->type != DB_QUEUE)
@@ -1810,13 +2003,9 @@ __db_c_get_arg(dbc, key, data, flags)
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:
@@ -1827,6 +2016,16 @@ multi_err: return (__db_ferr(dbenv, "DBcursor->get", 1));
case DB_GET_BOTHC:
if (dbp->type == DB_QUEUE)
goto err;
+ /* FALLTHROUGH */
+ case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
+ if ((ret = __dbt_usercopy(dbenv, data)) != 0)
+ goto err;
+ /* FALLTHROUGH */
+ case DB_SET:
+ case DB_SET_RANGE:
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0)
+ goto err;
break;
case DB_GET_RECNO:
/*
@@ -1842,9 +2041,12 @@ multi_err: return (__db_ferr(dbenv, "DBcursor->get", 1));
case DB_SET_RECNO:
if (!F_ISSET(dbp, DB_AM_RECNUM))
goto err;
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0)
+ goto err;
break;
default:
-err: return (__db_ferr(dbenv, "DBcursor->get", 0));
+err: __dbt_userfree(dbenv, key, NULL, data);
+ return (__db_ferr(dbenv, "DBcursor->get", 0));
}
/* Check for invalid key/data flags. */
@@ -1855,19 +2057,19 @@ err: return (__db_ferr(dbenv, "DBcursor->get", 0));
if (multi) {
if (!F_ISSET(data, DB_DBT_USERMEM)) {
- __db_err(dbenv,
+ __db_errx(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_errx(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_errx(dbenv, "%s%s",
"DB_MULTIPLE/DB_MULTIPLE_KEY buffers must be ",
"aligned, at least page size and multiples of 1KB");
return (EINVAL);
@@ -1902,6 +2104,7 @@ __db_secondary_close_pp(dbp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
@@ -1910,20 +2113,20 @@ __db_secondary_close_pp(dbp, flags)
PANIC_CHECK(dbenv);
/*
- * !!!
- * The actual argument checking is simple, do it inline.
+ * As a DB handle destructor, we can't fail.
*
- * Validate arguments and complain if they're wrong, but as a DB
- * handle destructor, we can't fail.
+ * !!!
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
*/
- if (flags != 0 && flags != DB_NOSYNC &&
- (t_ret = __db_ferr(dbenv, "DB->close", 0)) != 0 && ret == 0)
- ret = t_ret;
+ if (flags != 0 && flags != DB_NOSYNC)
+ ret = __db_ferr(dbenv, "DB->close", 0);
+
+ ENV_ENTER(dbenv, ip);
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check &&
- (t_ret = __db_rep_enter(dbp, 0, 0, 0)) != 0) {
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (t_ret = __db_rep_enter(dbp, 0, 0, 0)) != 0) {
handle_check = 0;
if (ret == 0)
ret = t_ret;
@@ -1933,9 +2136,10 @@ __db_secondary_close_pp(dbp, flags)
ret = t_ret;
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -1953,31 +2157,23 @@ __db_c_pget_pp(dbc, skey, pkey, data, flags)
{
DB *dbp;
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int 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, 0, dbc->txn != NULL)) != 0)
+ if ((ret = __db_c_pget_arg(dbc, pkey, flags)) != 0 ||
+ (ret = __db_c_get_arg(dbc, skey, data, flags)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
ret = __db_c_pget(dbc, skey, pkey, data, flags);
+ ENV_LEAVE(dbenv, ip);
- /* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
-
+ __dbt_userfree(dbenv, skey, pkey, data);
return (ret);
}
@@ -1999,13 +2195,13 @@ __db_c_pget_arg(dbc, pkey, flags)
dbenv = dbp->dbenv;
if (!F_ISSET(dbp, DB_AM_SECONDARY)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DBcursor->pget may only be used on secondary indices");
return (EINVAL);
}
if (LF_ISSET(DB_MULTIPLE | DB_MULTIPLE_KEY)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_MULTIPLE and DB_MULTIPLE_KEY may not be used on secondary indices");
return (EINVAL);
}
@@ -2016,12 +2212,17 @@ __db_c_pget_arg(dbc, pkey, flags)
/* 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". */
+ case DB_GET_BOTH_RANGE:
+ /* 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");
+ __db_errx(dbenv,
+ "%s requires both a secondary and a primary key",
+ LF_ISSET(DB_GET_BOTH) ?
+ "DB_GET_BOTH" : "DB_GET_BOTH_RANGE");
return (EINVAL);
}
+ if ((ret = __dbt_usercopy(dbenv, pkey)) != 0)
+ return (ret);
break;
default:
/* __db_c_get_arg will catch the rest. */
@@ -2038,7 +2239,7 @@ __db_c_pget_arg(dbc, pkey, flags)
/* 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_errx(dbenv,
"DB_GET_BOTH on a secondary index requires a primary key");
return (EINVAL);
}
@@ -2059,7 +2260,8 @@ __db_c_put_pp(dbc, key, data, flags)
{
DB *dbp;
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -2069,27 +2271,20 @@ __db_c_put_pp(dbc, key, data, flags)
if ((ret = __db_c_put_arg(dbc, key, data, flags)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
/* 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, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ goto err;
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)
- __env_db_rep_exit(dbenv);
-
+err: ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, key, NULL, data);
return (ret);
}
@@ -2112,20 +2307,23 @@ __db_c_put_arg(dbc, key, data, flags)
key_flags = 0;
/* Check for changes to a read-only tree. */
- if (IS_READONLY(dbp))
- return (__db_rdonly(dbenv, "c_put"));
+ if (DB_IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DBcursor->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,
+ __db_errx(dbenv,
"DBcursor->put forbidden on secondary indices");
return (EINVAL);
}
}
+ if ((ret = __dbt_usercopy(dbenv, data)) != 0)
+ return (ret);
+
/* Check for invalid function flags. */
switch (flags) {
case DB_AFTER:
@@ -2164,6 +2362,8 @@ __db_c_put_arg(dbc, key, data, flags)
case DB_KEYFIRST:
case DB_KEYLAST:
key_flags = 1;
+ if ((ret = __dbt_usercopy(dbenv, key)) != 0)
+ return (ret);
break;
default:
err: return (__db_ferr(dbenv, "DBcursor->put", 0));
@@ -2176,7 +2376,7 @@ err: return (__db_ferr(dbenv, "DBcursor->put", 0));
return (ret);
/* Keys shouldn't have partial flags during a put. */
- if (F_ISSET(key, DB_DBT_PARTIAL))
+ if (key_flags && F_ISSET(key, DB_DBT_PARTIAL))
return (__db_ferr(dbenv, "key DBT", 0));
/*
@@ -2214,13 +2414,15 @@ __dbt_ferr(dbp, name, dbt, check_thread)
* database, without having to clear flags.
*/
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)
+ DB_DBT_MALLOC | DB_DBT_DUPOK | DB_DBT_REALLOC |
+ DB_DBT_USERCOPY | DB_DBT_USERMEM | DB_DBT_PARTIAL)) != 0)
return (ret);
- switch (F_ISSET(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC | DB_DBT_USERMEM)) {
+ switch (F_ISSET(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC |
+ DB_DBT_USERCOPY | DB_DBT_USERMEM)) {
case 0:
case DB_DBT_MALLOC:
case DB_DBT_REALLOC:
+ case DB_DBT_USERCOPY:
case DB_DBT_USERMEM:
break;
default:
@@ -2228,8 +2430,9 @@ __dbt_ferr(dbp, name, dbt, check_thread)
}
if (check_thread && DB_IS_THREADED(dbp) &&
- !F_ISSET(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC | DB_DBT_USERMEM)) {
- __db_err(dbenv,
+ !F_ISSET(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC |
+ DB_DBT_USERCOPY | DB_DBT_USERMEM)) {
+ __db_errx(dbenv,
"DB_THREAD mandates memory allocation flag on DBT %s",
name);
return (EINVAL);
@@ -2238,19 +2441,6 @@ __dbt_ferr(dbp, name, dbt, check_thread)
}
/*
- * __db_rdonly --
- * Common readonly message.
- */
-static int
-__db_rdonly(dbenv, name)
- const DB_ENV *dbenv;
- const char *name;
-{
- __db_err(dbenv, "%s: attempt to modify a read-only tree", name);
- return (EACCES);
-}
-
-/*
* __db_curinval
* Report that a cursor is in an invalid state.
*/
@@ -2258,7 +2448,7 @@ static int
__db_curinval(dbenv)
const DB_ENV *dbenv;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"Cursor position must be set before performing this operation");
return (EINVAL);
}
@@ -2274,28 +2464,34 @@ __db_txn_auto_init(dbenv, txnidp)
DB_ENV *dbenv;
DB_TXN **txnidp;
{
+ /*
+ * Method calls where applications explicitly specify DB_AUTO_COMMIT
+ * require additional validation: the DB_AUTO_COMMIT flag cannot be
+ * specified if a transaction cookie is also specified, nor can the
+ * flag be specified in a non-transactional environment.
+ */
if (*txnidp != NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_AUTO_COMMIT may not be specified along with a transaction handle");
return (EINVAL);
}
if (!TXN_ON(dbenv)) {
- __db_err(dbenv,
+ __db_errx(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.
+ * Our caller checked to see if replication is making a state change.
+ * Don't call the user-level API (which would repeat that check).
*/
- return (dbenv->txn_begin(dbenv, NULL, txnidp, 0));
+ return (__txn_begin(dbenv, NULL, txnidp, 0));
}
/*
* __db_txn_auto_resolve --
- * Handle DB_AUTO_COMMIT resolution.
+ * Resolve local transactions.
*
* PUBLIC: int __db_txn_auto_resolve __P((DB_ENV *, DB_TXN *, int, int));
*/
@@ -2312,10 +2508,73 @@ __db_txn_auto_resolve(dbenv, txn, nosync, ret)
* replication handle count. Call the user-level API.
*/
if (ret == 0)
- return (txn->commit(txn, nosync ? DB_TXN_NOSYNC : 0));
+ return (__txn_commit(txn, nosync ? DB_TXN_NOSYNC : 0));
- if ((t_ret = txn->abort(txn)) != 0)
+ if ((t_ret = __txn_abort(txn)) != 0)
return (__db_panic(dbenv, t_ret));
return (ret);
}
+
+/*
+ * __dbt_usercopy --
+ * Take a copy of the user's data, if a callback is supplied.
+ *
+ * PUBLIC: int __dbt_usercopy __P((DB_ENV *, DBT *));
+ */
+int
+__dbt_usercopy(dbenv, dbt)
+ DB_ENV *dbenv;
+ DBT *dbt;
+{
+ void *buf;
+ int ret;
+
+ if (dbt == NULL || !F_ISSET(dbt, DB_DBT_USERCOPY) || dbt->size == 0 ||
+ dbt->data != NULL)
+ return (0);
+
+ buf = NULL;
+ if ((ret = __os_umalloc(dbenv, dbt->size, &buf)) != 0 ||
+ (ret = dbenv->dbt_usercopy(dbt, 0, buf, dbt->size,
+ DB_USERCOPY_GETDATA)) != 0)
+ goto err;
+ dbt->data = buf;
+
+ return (0);
+
+err: if (buf != NULL) {
+ __os_ufree(dbenv, buf);
+ dbt->data = NULL;
+ }
+
+ return (ret);
+}
+
+/*
+ * __dbt_userfree --
+ * Free a copy of the user's data, if necessary.
+ *
+ * PUBLIC: void __dbt_userfree __P((DB_ENV *, DBT *, DBT *, DBT *));
+ */
+void
+__dbt_userfree(dbenv, key, pkey, data)
+ DB_ENV *dbenv;
+ DBT *key, *pkey, *data;
+{
+ if (key != NULL &&
+ F_ISSET(key, DB_DBT_USERCOPY) && key->data != NULL) {
+ __os_ufree(dbenv, key->data);
+ key->data = NULL;
+ }
+ if (pkey != NULL &&
+ F_ISSET(pkey, DB_DBT_USERCOPY) && pkey->data != NULL) {
+ __os_ufree(dbenv, pkey->data);
+ pkey->data = NULL;
+ }
+ if (data != NULL &&
+ F_ISSET(data, DB_DBT_USERCOPY) && data->data != NULL) {
+ __os_ufree(dbenv, data->data);
+ data->data = NULL;
+ }
+}
diff --git a/db/db/db_join.c b/db/db/db_join.c
index f486f296e..7d75b344e 100644
--- a/db/db/db_join.c
+++ b/db/db/db_join.c
@@ -1,21 +1,14 @@
/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_join.c,v 11.75 2004/09/22 03:30:23 bostic Exp $
+ * $Id: db_join.c,v 12.14 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_join.h"
@@ -216,9 +209,9 @@ __db_join(primary, curslist, dbcp, flags)
*dbcp = dbc;
- MUTEX_THREAD_LOCK(dbenv, primary->mutexp);
+ MUTEX_LOCK(dbenv, primary->mutex);
TAILQ_INSERT_TAIL(&primary->join_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbenv, primary->mutexp);
+ MUTEX_UNLOCK(dbenv, primary->mutex);
return (0);
@@ -250,24 +243,30 @@ __db_join_close_pp(dbc)
DBC *dbc;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
DB *dbp;
- int handle_check, ret;
+ int handle_check, ret, t_ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
PANIC_CHECK(dbenv);
- handle_check = IS_REPLICATED(dbenv, dbp);
+ ENV_ENTER(dbenv, ip);
+
+ handle_check = IS_ENV_REPLICATED(dbenv);
if (handle_check &&
- (ret = __db_rep_enter(dbp, 0, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ (ret = __db_rep_enter(dbp, 1, 0, dbc->txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
ret = __db_join_close(dbc);
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -309,8 +308,9 @@ __db_join_get_pp(dbc, key, data, flags)
{
DB *dbp;
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
u_int32_t handle_check, save_flags;
- int ret;
+ int ret, t_ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -320,11 +320,10 @@ __db_join_get_pp(dbc, key, data, flags)
PANIC_CHECK(dbenv);
- if (LF_ISSET(DB_DIRTY_READ | DB_DEGREE_2 | DB_RMW)) {
- if (!LOCKING_ON(dbp->dbenv))
- return (__db_fnl(dbp->dbenv, "DBcursor->c_get"));
-
- LF_CLR(DB_DIRTY_READ | DB_DEGREE_2 | DB_RMW);
+ if (LF_ISSET(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW)) {
+ if (!LOCKING_ON(dbenv))
+ return (__db_fnl(dbenv, "DBcursor->c_get"));
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW);
}
switch (flags) {
@@ -332,7 +331,7 @@ __db_join_get_pp(dbc, key, data, flags)
case DB_JOIN_ITEM:
break;
default:
- return (__db_ferr(dbp->dbenv, "DBcursor->c_get", 0));
+ return (__db_ferr(dbenv, "DBcursor->c_get", 0));
}
/*
@@ -347,24 +346,30 @@ __db_join_get_pp(dbc, key, data, flags)
* and causes us no headaches, so we permit it.
*/
if (F_ISSET(key, DB_DBT_PARTIAL)) {
- __db_err(dbp->dbenv,
+ __db_errx(dbenv,
"DB_DBT_PARTIAL may not be set on key during join_get");
return (EINVAL);
}
- handle_check = IS_REPLICATED(dbp->dbenv, dbp);
+ ENV_ENTER(dbenv, ip);
+
+ handle_check = IS_ENV_REPLICATED(dbenv);
if (handle_check &&
- (ret = __db_rep_enter(dbp, 1, 0, dbc->txn != NULL)) != 0)
- return (ret);
+ (ret = __db_rep_enter(dbp, 1, 0, dbc->txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
/* Restore the original flags value. */
flags = save_flags;
ret = __db_join_get(dbc, key, data, flags);
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
+ __dbt_userfree(dbenv, key, NULL, NULL);
return (ret);
}
@@ -374,14 +379,16 @@ __db_join_get(dbc, key_arg, data_arg, flags)
DBT *key_arg, *data_arg;
u_int32_t flags;
{
- DBT *key_n, key_n_mem;
DB *dbp;
DBC *cp;
+ DBT *key_n, key_n_mem;
+ DB_ENV *dbenv;
JOIN_CURSOR *jc;
int db_manage_data, ret;
u_int32_t i, j, operation, opmods;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
jc = (JOIN_CURSOR *)dbc->internal;
operation = LF_ISSET(DB_OPFLAGS_MASK);
@@ -390,7 +397,7 @@ __db_join_get(dbc, key_arg, data_arg, flags)
* If the set of flags here changes, check that __db_join_primget
* is updated to handle them properly.
*/
- opmods = LF_ISSET(DB_RMW | DB_DEGREE_2 | DB_DIRTY_READ);
+ opmods = LF_ISSET(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW);
/*
* Since we are fetching the key as a datum in the secondary indices,
@@ -398,8 +405,8 @@ __db_join_get(dbc, key_arg, data_arg, flags)
* management flags. If necessary, use a stack-allocated DBT;
* we'll appropriately copy and/or allocate the data later.
*/
- if (F_ISSET(key_arg, DB_DBT_USERMEM) ||
- F_ISSET(key_arg, DB_DBT_MALLOC)) {
+ if (F_ISSET(key_arg,
+ DB_DBT_MALLOC | DB_DBT_USERCOPY | DB_DBT_USERMEM)) {
/* We just use the default buffer; no need to go malloc. */
key_n = &key_n_mem;
memset(key_n, 0, sizeof(DBT));
@@ -410,6 +417,8 @@ __db_join_get(dbc, key_arg, data_arg, flags)
*/
key_n = key_arg;
}
+ if (F_ISSET(key_arg, DB_DBT_USERCOPY))
+ key_arg->data = NULL;
/*
* If our last attempt to do a get on the primary key failed,
@@ -424,7 +433,7 @@ retry: ret = __db_c_get(jc->j_workcurs[0], &jc->j_key, key_n,
if (ret == DB_BUFFER_SMALL) {
jc->j_key.ulen <<= 1;
- if ((ret = __os_realloc(dbp->dbenv,
+ if ((ret = __os_realloc(dbenv,
jc->j_key.ulen, &jc->j_key.data)) != 0)
goto mem_err;
goto retry;
@@ -468,7 +477,7 @@ retry: ret = __db_c_get(jc->j_workcurs[0], &jc->j_key, key_n,
/* We have the first element; now look for it in the other cursors. */
for (i = 1; i < jc->j_ncurs; i++) {
- DB_ASSERT(jc->j_curslist[i] != NULL);
+ DB_ASSERT(dbenv, jc->j_curslist[i] != NULL);
if (jc->j_workcurs[i] == NULL)
/* If this is NULL, we need to dup curslist into it. */
if ((ret = __db_c_dup(jc->j_curslist[i],
@@ -571,9 +580,9 @@ retry2: cp = jc->j_workcurs[i];
if (ret == DB_BUFFER_SMALL) {
jc->j_key.ulen <<= 1;
- if ((ret = __os_realloc(dbp->dbenv, jc->j_key.ulen,
+ if ((ret = __os_realloc(dbenv, jc->j_key.ulen,
&jc->j_key.data)) != 0) {
-mem_err: __db_err(dbp->dbenv,
+mem_err: __db_errx(dbenv,
"Allocation failed for join key, len = %lu",
(u_long)jc->j_key.ulen);
goto err;
@@ -632,11 +641,12 @@ samekey: /*
* 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.
*/
- DB_ASSERT(F_ISSET(
- key_arg, DB_DBT_USERMEM | DB_DBT_MALLOC) || key_n == key_arg);
+ DB_ASSERT(dbenv, F_ISSET(key_arg, DB_DBT_USERMEM | DB_DBT_MALLOC |
+ DB_DBT_USERCOPY) || key_n == key_arg);
- if (F_ISSET(key_arg, DB_DBT_USERMEM | DB_DBT_MALLOC) &&
- (ret = __db_retcopy(dbp->dbenv,
+ if ((F_ISSET(key_arg, DB_DBT_USERMEM | DB_DBT_MALLOC |
+ DB_DBT_USERCOPY)) &&
+ (ret = __db_retcopy(dbenv,
key_arg, key_n->data, key_n->size, NULL, NULL)) != 0) {
/*
* The retcopy failed, most commonly because we have a user
@@ -650,9 +660,6 @@ samekey: /*
/*
* 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.
*/
if (operation == DB_JOIN_ITEM)
return (0);
@@ -667,14 +674,19 @@ samekey: /*
* 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))
+ if (!F_ISSET(data_arg, DB_DBT_MALLOC | DB_DBT_REALLOC |
+ DB_DBT_USERMEM | DB_DBT_USERCOPY))
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,
+ jc->j_curslist[0]->txn, jc->j_curslist[0]->locker, key_n,
db_manage_data ? &jc->j_rdata : data_arg, opmods)) != 0) {
- if (ret == DB_NOTFOUND)
+ if (ret == DB_NOTFOUND) {
+ if (LF_ISSET(DB_READ_UNCOMMITTED) ||
+ (jc->j_curslist[0]->txn != NULL && F_ISSET(
+ jc->j_curslist[0]->txn, TXN_READ_UNCOMMITTED)))
+ goto retry;
/*
* If ret == DB_NOTFOUND, the primary and secondary
* are out of sync; every item in each secondary
@@ -683,7 +695,7 @@ samekey: /*
* Wail.
*/
ret = __db_secondary_corrupt(jc->j_primary);
- else
+ } else
/*
* The get on the primary failed for some other
* reason, most commonly because we're using a user
@@ -726,9 +738,9 @@ __db_join_close(dbc)
* must happen before any action that can fail and return, or else
* __db_close may loop indefinitely.
*/
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
TAILQ_REMOVE(&dbp->join_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
PANIC_CHECK(dbenv);
@@ -872,29 +884,30 @@ __db_join_primget(dbp, txn, lockerid, key, data, flags)
u_int32_t flags;
{
DBC *dbc;
- int ret, rmw, t_ret;
+ u_int32_t rmw;
+ int ret, t_ret;
if ((ret = __db_cursor_int(dbp,
txn, dbp->type, PGNO_INVALID, 0, lockerid, &dbc)) != 0)
return (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.
+ * The only allowable flags here are the two flags copied into "opmods"
+ * in __db_join_get, DB_RMW and DB_READ_UNCOMMITTED. 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);
- if (LF_ISSET(DB_DIRTY_READ) ||
- (txn != NULL && F_ISSET(txn, TXN_DIRTY_READ)))
- F_SET(dbc, DBC_DIRTY_READ);
+ if (LF_ISSET(DB_READ_UNCOMMITTED) ||
+ (txn != NULL && F_ISSET(txn, TXN_READ_UNCOMMITTED)))
+ F_SET(dbc, DBC_READ_UNCOMMITTED);
- if (LF_ISSET(DB_DEGREE_2) ||
- (txn != NULL && F_ISSET(txn, TXN_DEGREE_2)))
- F_SET(dbc, DBC_DEGREE_2);
+ if (LF_ISSET(DB_READ_COMMITTED) ||
+ (txn != NULL && F_ISSET(txn, TXN_READ_COMMITTED)))
+ F_SET(dbc, DBC_READ_COMMITTED);
- LF_CLR(DB_RMW | DB_DIRTY_READ | DB_DEGREE_2);
- DB_ASSERT(flags == 0);
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_RMW);
+ DB_ASSERT(dbp->dbenv, flags == 0);
F_SET(dbc, DBC_TRANSIENT);
@@ -924,7 +937,7 @@ int
__db_secondary_corrupt(dbp)
DB *dbp;
{
- __db_err(dbp->dbenv,
+ __db_errx(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 c5e88bb56..316840a02 100644
--- a/db/db/db_meta.c
+++ b/db/db/db_meta.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,25 +39,24 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_meta.c,v 11.89 2004/10/05 14:28:33 bostic Exp $
+ * $Id: db_meta.c,v 12.35 2006/08/24 14:45:15 bostic Exp $
*/
#include "db_config.h"
-#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/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));
+#ifdef HAVE_FTRUNCATE
+static void __db_freelist_sort __P((struct pglist *, u_int32_t));
+static int __db_pglistcmp __P((const void *, const void *));
+static int __db_truncate_freelist __P((DBC *, DBMETA *,
+ PAGE *, db_pgno_t *, u_int32_t, u_int32_t));
+#endif
/*
* __db_init_meta --
@@ -98,19 +97,19 @@ __db_new(dbc, type, pagepp)
u_int32_t type;
PAGE **pagepp;
{
+ DB_ENV *dbenv;
DBMETA *meta;
DB *dbp;
DB_LOCK metalock;
DB_LSN lsn;
DB_MPOOLFILE *mpf;
PAGE *h;
- db_pgno_t last, pgno, newnext;
- u_int32_t meta_flags;
+ db_pgno_t last, *list, pgno, newnext;
int extend, ret, t_ret;
meta = NULL;
- meta_flags = 0;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
mpf = dbp->mpf;
h = NULL;
newnext = PGNO_INVALID;
@@ -119,16 +118,22 @@ __db_new(dbc, type, pagepp)
if ((ret = __db_lget(dbc,
LCK_ALWAYS, pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &meta)) != 0)
goto err;
last = meta->last_pgno;
if (meta->free == PGNO_INVALID) {
+ if (FLD_ISSET(type, P_DONTEXTEND)) {
+ *pagepp = NULL;
+ goto err;
+ }
last = pgno = meta->last_pgno + 1;
ZERO_LSN(lsn);
extend = 1;
} else {
pgno = meta->free;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &h)) != 0)
goto err;
/*
@@ -139,8 +144,19 @@ __db_new(dbc, type, pagepp)
newnext = h->next_pgno;
lsn = h->lsn;
extend = 0;
+ DB_ASSERT(dbenv, TYPE(h) == P_INVALID);
+
+ if (TYPE(h) != P_INVALID) {
+ __db_errx(dbenv,
+ "%s page %lu is on free list with type %lu",
+ dbp->fname, (u_long)PGNO(h), (u_long)TYPE(h));
+ return (__db_panic(dbenv, EINVAL));
+ }
+
}
+ FLD_CLR(type, P_DONTEXTEND);
+
/*
* Log the allocation before fetching the new page. If we
* don't have room in the log then we don't want to tell
@@ -154,25 +170,20 @@ __db_new(dbc, type, pagepp)
} else
LSN_NOT_LOGGED(LSN(meta));
- meta_flags = DB_MPOOL_DIRTY;
meta->free = newnext;
if (extend == 1) {
- if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_NEW, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_NEW, &h)) != 0)
goto err;
- DB_ASSERT(last == pgno);
+ DB_ASSERT(dbenv, last == pgno);
meta->last_pgno = pgno;
ZERO_LSN(h->lsn);
h->pgno = pgno;
}
LSN(h) = LSN(meta);
- DB_ASSERT(TYPE(h) == P_INVALID);
-
- if (TYPE(h) != P_INVALID)
- return (__db_panic(dbp->dbenv, EINVAL));
-
- ret = __memp_fput(mpf, (PAGE *)meta, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, meta, 0);
meta = NULL;
if ((t_ret = __TLPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
@@ -191,26 +202,47 @@ __db_new(dbc, type, pagepp)
break;
}
+ /* Fix up the sorted free list if necessary. */
+#ifdef HAVE_FTRUNCATE
+ if (extend == 0) {
+ u_int32_t nelems = 0;
+
+ if ((ret = __memp_get_freelist(dbp->mpf, &nelems, &list)) != 0)
+ goto err;
+ if (nelems != 0) {
+ DB_ASSERT(dbenv, h->pgno == list[0]);
+ memmove(list, &list[1], (nelems - 1) * sizeof(*list));
+ if ((ret = __memp_extend_freelist(
+ dbp->mpf, nelems - 1, &list)) != 0)
+ goto err;
+ }
+ }
+#else
+ COMPQUIET(list, NULL);
+#endif
+
/*
* 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.
+ * page when we abort. We never lock overflow pages or off page
+ * duplicate trees.
*/
- if (F_ISSET(dbc->dbp, DB_AM_DIRTY) && dbc->txn != NULL) {
+ if (type != P_OVERFLOW && !F_ISSET(dbc, DBC_OPD) &&
+ F_ISSET(dbc->dbp, DB_AM_READ_UNCOMMITTED) && 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(mpf, h, 0);
if (meta != NULL)
- (void)__memp_fput(mpf, meta, meta_flags);
+ (void)__memp_fput(mpf, meta, 0);
(void)__TLPUT(dbc, metalock);
return (ret);
}
@@ -231,35 +263,125 @@ __db_free(dbc, h)
DBT ddbt, ldbt;
DB_LOCK metalock;
DB_MPOOLFILE *mpf;
- db_pgno_t pgno;
- u_int32_t dirty_flag;
- int ret, t_ret;
+ db_pgno_t last_pgno, *lp, next_pgno, pgno, prev_pgno;
+ u_int32_t lflag, nelem;
+ int do_truncate, ret, t_ret;
+#ifdef HAVE_FTRUNCATE
+ db_pgno_t *list;
+ u_int32_t position, start;
+#endif
dbp = dbc->dbp;
mpf = dbp->mpf;
+ prev_pgno = PGNO_INVALID;
+ nelem = 0;
+ meta = NULL;
+ do_truncate = 0;
+ lp = NULL;
/*
- * Retrieve the metadata page and insert the page at the head of
- * the free list. If either the lock get or page get routines
+ * Retrieve the metadata page. If we are not keeping a sorted
+ * free list put the page at the head of the the free list.
+ * If we are keeping a sorted free list, for truncation,
+ * then figure out where this page belongs and either
+ * link it in or truncate the file as much as possible.
+ * If either the lock get or page get routines
* fail, then we need to put the page with which we were called
* back because our caller assumes we take care of it.
*/
- dirty_flag = 0;
pgno = PGNO_BASE_MD;
if ((ret = __db_lget(dbc,
LCK_ALWAYS, pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0) {
- (void)__TLPUT(dbc, metalock);
- goto err;
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &meta)) != 0)
+ goto err1;
+
+ last_pgno = meta->last_pgno;
+ next_pgno = meta->free;
+
+ DB_ASSERT(dbp->dbenv, h->pgno != next_pgno);
+
+#ifdef HAVE_FTRUNCATE
+ /*
+ * If we are maintaining a sorted free list see if we either have a
+ * new truncation point or the page goes somewhere in the middle of
+ * the list. If it goes in the middle of the list, we will drop the
+ * meta page and get the previous page.
+ */
+ if ((ret = __memp_get_freelist(mpf, &nelem, &list)) != 0)
+ goto err1;
+ if (list == NULL)
+ goto no_sort;
+
+ if (h->pgno != last_pgno) {
+ /*
+ * Put the page number in the sorted list.
+ * Finds its position and the previous page,
+ * extend the list, make room and insert.
+ */
+ position = 0;
+ if (nelem != 0) {
+ __db_freelist_pos(h->pgno, list, nelem, &position);
+
+ DB_ASSERT(dbp->dbenv, h->pgno != list[position]);
+
+ /* Get the previous page if this is not the smallest. */
+ if (position != 0 || h->pgno > list[0])
+ prev_pgno = list[position];
+ }
+
+ /* Put the page number into the list. */
+ if ((ret = __memp_extend_freelist(mpf, nelem + 1, &list)) != 0)
+ return (ret);
+ if (prev_pgno != PGNO_INVALID)
+ lp = &list[position + 1];
+ else
+ lp = list;
+ if (nelem != 0 && position != nelem)
+ memmove(lp + 1, lp,
+ (size_t)((u_int8_t*)&list[nelem] - (u_int8_t*)lp));
+ *lp = h->pgno;
+ } else if (nelem != 0) {
+ /* Find the truncation point. */
+ for (lp = &list[nelem - 1]; lp >= list; lp--)
+ if (--last_pgno != *lp)
+ break;
+ if (lp < list || last_pgno < h->pgno - 1)
+ do_truncate = 1;
+ last_pgno = meta->last_pgno;
}
- DB_ASSERT(h->pgno != meta->free);
+no_sort:
+ if (prev_pgno != PGNO_INVALID) {
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto err1;
+ meta = NULL;
+ pgno = prev_pgno;
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &meta)) != 0)
+ goto err1;
+ next_pgno = NEXT_PGNO(meta);
+ }
+#endif
+
+ if ((ret = __memp_dirty(mpf, &meta, dbc->txn, 0)) != 0)
+ goto err1;
+
/* Log the change. */
if (DBC_LOGGING(dbc)) {
memset(&ldbt, 0, sizeof(ldbt));
ldbt.data = h;
ldbt.size = P_OVERHEAD(dbp);
+ /*
+ * If we are truncating the file, we need to make sure
+ * the logging happens before the truncation. If we
+ * are truncating multiple pages we don't need to flush the
+ * log here as it will be flushed by __db_truncate_freelist.
+ */
+ lflag = 0;
+#ifdef HAVE_FTRUNCATE
+ if (do_truncate == 0 && h->pgno == last_pgno)
+ lflag = DB_FLUSH;
+#endif
switch (h->type) {
case P_HASH:
case P_IBTREE:
@@ -269,78 +391,88 @@ __db_free(dbc, h)
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, meta->last_pgno, &ddbt);
- break;
+ ddbt.data = (u_int8_t *)h + HOFFSET(h);
+ ddbt.size = dbp->pgsize - HOFFSET(h);
+ if ((ret = __db_pg_freedata_log(dbp, dbc->txn,
+ &LSN(meta), lflag,
+ h->pgno, &LSN(meta), pgno,
+ &ldbt, next_pgno, last_pgno, &ddbt)) != 0)
+ goto err1;
+ goto logged;
}
- goto log;
+ break;
case P_HASHMETA:
ldbt.size = sizeof(HMETA);
- goto log;
+ break;
case P_BTREEMETA:
ldbt.size = sizeof(BTMETA);
- goto log;
+ break;
case P_OVERFLOW:
ldbt.size += OV_LEN(h);
- goto log;
+ break;
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, meta->last_pgno);
- }
- if (ret != 0) {
- (void)__memp_fput(mpf, (PAGE *)meta, 0);
- (void)__TLPUT(dbc, metalock);
- goto err;
+ DB_ASSERT(dbp->dbenv, h->type != P_QAMDATA);
}
+
+ if ((ret = __db_pg_free_log(dbp,
+ dbc->txn, &LSN(meta), lflag, h->pgno,
+ &LSN(meta), pgno, &ldbt, next_pgno, last_pgno)) != 0)
+ goto err1;
} else
LSN_NOT_LOGGED(LSN(meta));
- LSN(h) = LSN(meta);
-
+logged:
#ifdef HAVE_FTRUNCATE
- if (h->pgno == meta->last_pgno) {
+ if (do_truncate) {
+ start = (u_int32_t) (lp - list) + 1;
+ meta->last_pgno--;
+ ret = __db_truncate_freelist(
+ dbc, meta, h, list, start, nelem);
+ h = NULL;
+ } else if (h->pgno == last_pgno) {
+ LSN(h) = LSN(meta);
+ P_INIT(h, dbp->pgsize,
+ h->pgno, PGNO_INVALID, next_pgno, 0, P_INVALID);
if ((ret = __memp_fput(mpf, h, DB_MPOOL_DISCARD)) != 0)
- goto err;
+ goto err1;
+ h = NULL;
/* Give the page back to the OS. */
- if ((ret = __memp_ftruncate(mpf, meta->last_pgno, 0)) != 0)
- goto err;
+ if ((ret = __memp_ftruncate(mpf, last_pgno, 0)) != 0)
+ goto err1;
+ DB_ASSERT(dbp->dbenv, meta->pgno == PGNO_BASE_MD);
meta->last_pgno--;
h = NULL;
} else
#endif
-
{
/*
* If we are not truncating the page then we
- * reinitialize it and put it hat the head of
+ * reinitialize it and put it at the head of
* the free list.
*/
+ if ((ret = __memp_dirty(mpf, &h, dbc->txn, 0)) != 0)
+ goto err1;
+ LSN(h) = LSN(meta);
P_INIT(h, dbp->pgsize,
- h->pgno, PGNO_INVALID, meta->free, 0, P_INVALID);
+ h->pgno, PGNO_INVALID, next_pgno, 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;
+ if (prev_pgno == PGNO_INVALID)
+ meta->free = h->pgno;
+ else
+ NEXT_PGNO(meta) = h->pgno;
}
- /* Discard the metadata page. */
- if ((t_ret =
- __memp_fput(mpf, (PAGE *)meta, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ /* Discard the metadata or previous page. */
+err1: if (meta != NULL &&
+ (t_ret = __memp_fput(mpf, (PAGE *)meta, 0)) != 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 (h != NULL &&
- (t_ret = __memp_fput(mpf, h, dirty_flag)) != 0 && ret == 0)
+err: if (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
ret = t_ret;
/*
@@ -350,6 +482,382 @@ err: if (h != NULL &&
return (ret);
}
+#ifdef HAVE_FTRUNCATE
+/*
+ * __db_freelist_pos -- find the position of a page in the freelist.
+ * The list is sorted, we do a binary search.
+ *
+ * PUBLIC: #ifdef HAVE_FTRUNCATE
+ * PUBLIC: void __db_freelist_pos __P((db_pgno_t,
+ * PUBLIC: db_pgno_t *, u_int32_t, u_int32_t *));
+ * PUBLIC: #endif
+ */
+void
+__db_freelist_pos(pgno, list, nelem, posp)
+ db_pgno_t pgno;
+ db_pgno_t *list;
+ u_int32_t nelem;
+ u_int32_t *posp;
+{
+ u_int32_t base, indx, lim;
+
+ indx = 0;
+ for (base = 0, lim = nelem; lim != 0; lim >>= 1) {
+ indx = base + (lim >> 1);
+ if (pgno == list[indx]) {
+ *posp = indx;
+ return;
+ }
+ if (pgno > list[indx]) {
+ base = indx + 1;
+ --lim;
+ }
+ }
+ if (base != 0)
+ base--;
+ *posp = base;
+ return;
+}
+
+static int
+__db_pglistcmp(a, b)
+ const void *a, *b;
+{
+ struct pglist *ap, *bp;
+
+ ap = (struct pglist *)a;
+ bp = (struct pglist *)b;
+
+ return ((ap->pgno > bp->pgno) ? 1 : (ap->pgno < bp->pgno) ? -1: 0);
+}
+
+/*
+ * __db_freelist_sort -- sort a list of free pages.
+ */
+static void
+__db_freelist_sort(list, nelems)
+ struct pglist *list;
+ u_int32_t nelems;
+{
+ qsort(list, (size_t)nelems, sizeof(struct pglist), __db_pglistcmp);
+}
+
+/*
+ * __db_pg_truncate -- sort the freelist and find the truncation point.
+ *
+ * PUBLIC: #ifdef HAVE_FTRUNCATE
+ * PUBLIC: int __db_pg_truncate __P((DB_MPOOLFILE *, DB_TXN *,
+ * PUBLIC: struct pglist *list, DB_COMPACT *, u_int32_t *, db_pgno_t *,
+ * PUBLIC: DB_LSN *, int));
+ * PUBLIC: #endif
+ */
+int
+__db_pg_truncate(mpf, txn, list, c_data, nelemp, last_pgno, lsnp, in_recovery)
+ DB_MPOOLFILE *mpf;
+ DB_TXN *txn;
+ struct pglist *list;
+ DB_COMPACT *c_data;
+ u_int32_t *nelemp;
+ db_pgno_t *last_pgno;
+ DB_LSN *lsnp;
+ int in_recovery;
+{
+ PAGE *h;
+ struct pglist *lp;
+ db_pgno_t pgno;
+ u_int32_t nelems;
+ int ret;
+
+ ret = 0;
+
+ nelems = *nelemp;
+ /* Sort the list */
+ __db_freelist_sort(list, nelems);
+
+ /* Find the truncation point. */
+ pgno = *last_pgno;
+ lp = &list[nelems - 1];
+ while (nelems != 0) {
+ if (lp->pgno != pgno)
+ break;
+ pgno--;
+ nelems--;
+ lp--;
+ }
+
+ /*
+ * Figure out what (if any) pages can be truncated immediately and
+ * record the place from which we can truncate, so we can do the
+ * memp_ftruncate below. We also use this to avoid ever putting
+ * these pages on the freelist, which we are about to relink.
+ */
+ for (lp = list; lp < &list[nelems]; lp++) {
+ if ((ret = __memp_fget(mpf, &lp->pgno, txn, 0, &h)) != 0) {
+ /* Page may have been truncated later. */
+ if (in_recovery && ret == DB_PAGE_NOTFOUND) {
+ ret = 0;
+ continue;
+ }
+ goto err;
+ }
+ if (!in_recovery || LOG_COMPARE(&LSN(h), &lp->lsn) == 0) {
+ if ((ret = __memp_dirty(mpf, &h, txn, 0)) != 0) {
+ (void)__memp_fput(mpf, h, 0);
+ goto err;
+ }
+ if (lp == &list[nelems - 1])
+ NEXT_PGNO(h) = PGNO_INVALID;
+ else
+ NEXT_PGNO(h) = lp[1].pgno;
+ DB_ASSERT(mpf->dbenv, NEXT_PGNO(h) < *last_pgno);
+
+ LSN(h) = *lsnp;
+ }
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
+ goto err;
+ }
+
+ if (pgno != *last_pgno) {
+ if ((ret = __memp_ftruncate(mpf,
+ pgno + 1, in_recovery ? MP_TRUNC_RECOVER : 0)) != 0)
+ goto err;
+ if (c_data)
+ c_data->compact_pages_truncated += *last_pgno - pgno;
+ *last_pgno = pgno;
+ }
+ *nelemp = nelems;
+
+err: return (ret);
+}
+
+/*
+ * __db_free_truncate --
+ * Truncate free pages at the end of the file.
+ *
+ * PUBLIC: #ifdef HAVE_FTRUNCATE
+ * PUBLIC: int __db_free_truncate __P((DB *, DB_TXN *, u_int32_t,
+ * PUBLIC: DB_COMPACT *, struct pglist **, u_int32_t *, db_pgno_t *));
+ * PUBLIC: #endif
+ */
+int
+__db_free_truncate(dbp, txn, flags, c_data, listp, nelemp, last_pgnop)
+ DB *dbp;
+ DB_TXN *txn;
+ u_int32_t flags;
+ DB_COMPACT *c_data;
+ struct pglist **listp;
+ u_int32_t *nelemp;
+ db_pgno_t *last_pgnop;
+{
+ DBC *dbc;
+ DB_ENV *dbenv;
+ DBMETA *meta;
+ DBT ddbt;
+ DB_LOCK metalock;
+ DB_LSN null_lsn;
+ DB_MPOOLFILE *mpf;
+ PAGE *h;
+ db_pgno_t pgno;
+ u_int32_t nelems;
+ struct pglist *list, *lp;
+ int ret, t_ret;
+ size_t size;
+
+ COMPQUIET(flags, 0);
+ list = NULL;
+ meta = NULL;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ h = NULL;
+ nelems = 0;
+ if (listp != NULL) {
+ *listp = NULL;
+ DB_ASSERT(dbenv, nelemp != NULL);
+ *nelemp = 0;
+ }
+
+ if ((ret = __db_cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
+ return (ret);
+
+ pgno = PGNO_BASE_MD;
+ if ((ret = __db_lget(dbc,
+ LCK_ALWAYS, pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
+ goto err;
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_DIRTY, &meta)) != 0)
+ goto err;
+
+ if (last_pgnop != NULL)
+ *last_pgnop = meta->last_pgno;
+ if ((pgno = meta->free) == PGNO_INVALID)
+ goto done;
+
+ size = 128;
+ if ((ret = __os_malloc(dbenv, size * sizeof(*list), &list)) != 0)
+ goto err;
+ lp = list;
+
+ do {
+ if (lp == &list[size]) {
+ size *= 2;
+ if ((ret = __os_realloc(dbenv,
+ size * sizeof(*list), &list)) != 0)
+ goto err;
+ lp = &list[size / 2];
+ }
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &h)) != 0)
+ goto err;
+
+ lp->pgno = pgno;
+ lp->lsn = LSN(h);
+ pgno = NEXT_PGNO(h);
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
+ goto err;
+ lp++;
+ } while (pgno != PGNO_INVALID);
+ nelems = (u_int32_t)(lp - list);
+
+ /* Log the current state of the free list */
+ if (DBC_LOGGING(dbc)) {
+ ddbt.data = list;
+ ddbt.size = nelems * sizeof(*lp);
+ ZERO_LSN(null_lsn);
+ if ((ret = __db_pg_sort_log(dbp,
+ dbc->txn, &LSN(meta), DB_FLUSH, PGNO_BASE_MD, &LSN(meta),
+ PGNO_INVALID, &null_lsn, meta->last_pgno, &ddbt)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(meta));
+
+ if ((ret = __db_pg_truncate(mpf, txn, list, c_data,
+ &nelems, &meta->last_pgno, &LSN(meta), 0)) != 0)
+ goto err;
+
+ if (nelems == 0)
+ meta->free = PGNO_INVALID;
+ else
+ meta->free = list[0].pgno;
+
+done: if (last_pgnop != NULL)
+ *last_pgnop = meta->last_pgno;
+
+ /*
+ * The truncate point is the number of pages in the free
+ * list back from the last page. The number of pages
+ * in the free list are the number that we can swap in.
+ */
+ if (c_data)
+ c_data->compact_truncate = (u_int32_t)meta->last_pgno - nelems;
+
+ if (nelems != 0 && listp != NULL) {
+ *listp = list;
+ *nelemp = nelems;
+ list = NULL;
+ }
+
+err: if (list != NULL)
+ __os_free(dbenv, list);
+ if (meta != NULL &&
+ (t_ret = __memp_fput(mpf, (PAGE *)meta, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __TLPUT(dbc, metalock)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+static int
+__db_truncate_freelist(dbc, meta, h, list, start, nelem)
+ DBC *dbc;
+ DBMETA *meta;
+ PAGE *h;
+ db_pgno_t *list;
+ u_int32_t start, nelem;
+{
+ DB *dbp;
+ DB_LSN null_lsn;
+ DB_MPOOLFILE *mpf;
+ DBT ddbt;
+ PAGE *last_free, *pg;
+ db_pgno_t *lp;
+ struct pglist *plist, *pp;
+ int ret;
+
+ dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ plist = NULL;
+ last_free = NULL;
+
+ if (start != 0 &&
+ (ret = __memp_fget(mpf, &list[start - 1], dbc->txn,
+ DB_MPOOL_DIRTY, &last_free)) != 0)
+ goto err;
+
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __os_malloc(dbp->dbenv,
+ (nelem - start) * sizeof(*pp), &plist)) != 0)
+ goto err;
+
+ pp = plist;
+ for (lp = &list[start]; lp < &list[nelem]; lp++) {
+ pp->pgno = *lp;
+ if ((ret = __memp_fget(mpf, lp, dbc->txn, 0, &pg)) != 0)
+ goto err;
+ pp->lsn = LSN(pg);
+ if ((ret = __memp_fput(mpf, pg, DB_MPOOL_DISCARD)) != 0)
+ goto err;
+ pp++;
+ }
+ ddbt.data = plist;
+ ddbt.size = (nelem - start) * sizeof(*pp);
+ ZERO_LSN(null_lsn);
+ if (last_free != NULL) {
+ if ((ret = __db_pg_sort_log(dbp, dbc->txn, &LSN(meta),
+ DB_FLUSH, PGNO(meta), &LSN(meta), PGNO(last_free),
+ &LSN(last_free), meta->last_pgno, &ddbt)) != 0)
+ goto err;
+ } else if ((ret = __db_pg_sort_log(dbp, dbc->txn,
+ &LSN(meta), DB_FLUSH, PGNO(meta), &LSN(meta),
+ PGNO_INVALID, &null_lsn, meta->last_pgno, &ddbt)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(meta));
+ if (last_free != NULL)
+ LSN(last_free) = LSN(meta);
+
+ if ((ret = __memp_fput(mpf, h, DB_MPOOL_DISCARD)) != 0)
+ goto err;
+ h = NULL;
+ if ((ret = __memp_ftruncate(mpf, list[start], 0)) != 0)
+ goto err;
+ meta->last_pgno = list[start] - 1;
+
+ if (start == 0)
+ meta->free = PGNO_INVALID;
+ else {
+ NEXT_PGNO(last_free) = PGNO_INVALID;
+ if ((ret = __memp_fput(mpf, last_free, 0)) != 0)
+ goto err;
+ last_free = NULL;
+ }
+
+ /* Shrink the number of elements in the list. */
+ ret = __memp_extend_freelist(mpf, start, &list);
+
+err: if (plist != NULL)
+ __os_free(dbp->dbenv, plist);
+
+ /* We need to put the page on error. */
+ if (h != NULL)
+ (void)__memp_fput(mpf, h, 0);
+ if (last_free != NULL)
+ (void)__memp_fput(mpf, last_free, 0);
+
+ return (ret);
+}
+#endif
+
#ifdef DEBUG
/*
* __db_lprint --
@@ -394,9 +902,9 @@ __db_lget(dbc, action, pgno, mode, lkflags, lockp)
{
DB *dbp;
DB_ENV *dbenv;
- DB_LOCKREQ couple[2], *reqp;
+ DB_LOCKREQ couple[3], *reqp;
DB_TXN *txn;
- int has_timeout, ret;
+ int has_timeout, i, ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -406,9 +914,10 @@ __db_lget(dbc, action, pgno, mode, lkflags, lockp)
* 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) ||
- (F_ISSET(dbc, DBC_RECOVER) &&
+ if (CDB_LOCKING(dbenv) || !LOCKING_ON(dbenv) ||
+ (MULTIVERSION(dbp) && mode == DB_LOCK_READ &&
+ dbc->txn != NULL && F_ISSET(dbc->txn, TXN_SNAPSHOT)) ||
+ F_ISSET(dbc, DBC_DONTLOCK) || (F_ISSET(dbc, DBC_RECOVER) &&
(action != LCK_ROLLBACK || IS_REP_CLIENT(dbenv))) ||
(action != LCK_ALWAYS && F_ISSET(dbc, DBC_OPD))) {
LOCK_INIT(*lockp);
@@ -431,8 +940,8 @@ __db_lget(dbc, action, pgno, mode, lkflags, lockp)
if (DB_NONBLOCK(dbc))
lkflags |= DB_LOCK_NOWAIT;
- if (F_ISSET(dbc, DBC_DIRTY_READ) && mode == DB_LOCK_READ)
- mode = DB_LOCK_DIRTY;
+ if (F_ISSET(dbc, DBC_READ_UNCOMMITTED) && mode == DB_LOCK_READ)
+ mode = DB_LOCK_READ_UNCOMMITTED;
has_timeout = F_ISSET(dbc, DBC_RECOVER) ||
(txn != NULL && F_ISSET(txn, TXN_LOCKTIMEOUT));
@@ -440,8 +949,8 @@ __db_lget(dbc, action, pgno, mode, lkflags, lockp)
/*
* Transactional locking.
* Hold on to the previous read lock only if we are in full isolation.
- * COUPLE_ALWAYS indicates we are holding an interior node
- * which need not be isolated.
+ * COUPLE_ALWAYS indicates we are holding an interior node which need
+ * not be isolated.
* Downgrade write locks if we are supporting dirty readers.
*/
if ((action != LCK_COUPLE && action != LCK_COUPLE_ALWAYS) ||
@@ -449,47 +958,54 @@ __db_lget(dbc, action, pgno, mode, lkflags, lockp)
action = 0;
else if (dbc->txn == NULL || action == LCK_COUPLE_ALWAYS)
action = LCK_COUPLE;
- else if (F_ISSET(dbc, DBC_DEGREE_2) && lockp->mode == DB_LOCK_READ)
+ else if (F_ISSET(dbc,
+ DBC_READ_COMMITTED) && lockp->mode == DB_LOCK_READ)
action = LCK_COUPLE;
- else if (F_ISSET(dbc, DBC_DIRTY_READ) && lockp->mode == DB_LOCK_DIRTY)
+ else if (F_ISSET(dbc,
+ DBC_READ_UNCOMMITTED) && lockp->mode == DB_LOCK_READ_UNCOMMITTED)
action = LCK_COUPLE;
- else if (F_ISSET(dbc->dbp, DB_AM_DIRTY) && lockp->mode == DB_LOCK_WRITE)
+ else if (F_ISSET(dbc->dbp,
+ DB_AM_READ_UNCOMMITTED) && lockp->mode == DB_LOCK_WRITE)
action = LCK_DOWNGRADE;
else
action = 0;
+ i = 0;
switch (action) {
- case LCK_DOWNGRADE:
- if ((ret = __lock_downgrade(
- dbenv, lockp, DB_LOCK_WWRITE, 0)) != 0)
- return (ret);
- /* FALLTHROUGH */
-
default:
- if (!has_timeout) {
- ret = __lock_get(dbenv,
- dbc->locker, lkflags, &dbc->lock_dbt, mode, lockp);
- break;
- }
+ if (has_timeout)
+ goto couple;
+ ret = __lock_get(dbenv,
+ dbc->locker, lkflags, &dbc->lock_dbt, mode, lockp);
+ break;
+ case LCK_DOWNGRADE:
+ couple[0].op = DB_LOCK_GET;
+ couple[0].obj = NULL;
+ couple[0].lock = *lockp;
+ couple[0].mode = DB_LOCK_WWRITE;
+ UMRW_SET(couple[0].timeout);
+ i++;
/* FALLTHROUGH */
case LCK_COUPLE:
- couple[0].op = has_timeout? DB_LOCK_GET_TIMEOUT : DB_LOCK_GET;
- couple[0].obj = &dbc->lock_dbt;
- couple[0].mode = mode;
- UMRW_SET(couple[0].timeout);
+couple: couple[i].op = has_timeout? DB_LOCK_GET_TIMEOUT : DB_LOCK_GET;
+ couple[i].obj = &dbc->lock_dbt;
+ couple[i].mode = mode;
+ UMRW_SET(couple[i].timeout);
+ i++;
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;
+ if (action == LCK_COUPLE || action == LCK_DOWNGRADE) {
+ couple[i].op = DB_LOCK_PUT;
+ couple[i].lock = *lockp;
+ i++;
}
- ret = __lock_vec(dbenv, dbc->locker,
- lkflags, couple, action == LCK_COUPLE ? 2 : 1, &reqp);
- if (ret == 0 || reqp == &couple[1])
- *lockp = couple[0].lock;
+ ret = __lock_vec(dbenv,
+ dbc->locker, lkflags, couple, i, &reqp);
+ if (ret == 0 || reqp == &couple[i - 1])
+ *lockp = i == 1 ? couple[0].lock : couple[i - 2].lock;
break;
}
@@ -511,6 +1027,7 @@ __db_lput(dbc, lockp)
DB_LOCK *lockp;
{
DB_ENV *dbenv;
+ DB_LOCKREQ couple[2], *reqp;
int action, ret;
/*
@@ -518,13 +1035,16 @@ __db_lput(dbc, lockp)
* Hold on to the read locks only if we are in full isolation.
* Downgrade write locks if we are supporting dirty readers.
*/
- if (F_ISSET(dbc->dbp, DB_AM_DIRTY) && lockp->mode == DB_LOCK_WRITE)
+ if (F_ISSET(dbc->dbp,
+ DB_AM_READ_UNCOMMITTED) && lockp->mode == DB_LOCK_WRITE)
action = LCK_DOWNGRADE;
else if (dbc->txn == NULL)
action = LCK_COUPLE;
- else if (F_ISSET(dbc, DBC_DEGREE_2) && lockp->mode == DB_LOCK_READ)
+ else if (F_ISSET(dbc,
+ DBC_READ_COMMITTED) && lockp->mode == DB_LOCK_READ)
action = LCK_COUPLE;
- else if (F_ISSET(dbc, DBC_DIRTY_READ) && lockp->mode == DB_LOCK_DIRTY)
+ else if (F_ISSET(dbc,
+ DBC_READ_UNCOMMITTED) && lockp->mode == DB_LOCK_READ_UNCOMMITTED)
action = LCK_COUPLE;
else
action = 0;
@@ -532,10 +1052,19 @@ __db_lput(dbc, lockp)
dbenv = dbc->dbp->dbenv;
switch (action) {
case LCK_COUPLE:
- ret = __lock_put(dbenv, lockp, 0);
+ ret = __lock_put(dbenv, lockp);
break;
case LCK_DOWNGRADE:
- ret = __lock_downgrade(dbenv, lockp, DB_LOCK_WWRITE, 0);
+ couple[0].op = DB_LOCK_GET;
+ couple[0].obj = NULL;
+ couple[0].mode = DB_LOCK_WWRITE;
+ couple[0].lock = *lockp;
+ UMRW_SET(couple[0].timeout);
+ couple[1].op = DB_LOCK_PUT;
+ couple[1].lock = *lockp;
+ ret = __lock_vec(dbenv, dbc->locker, 0, couple, 2, &reqp);
+ if (ret == 0 || reqp == &couple[1])
+ *lockp = couple[0].lock;
break;
default:
ret = 0;
diff --git a/db/db/db_method.c b/db/db/db_method.c
index 4266fbf0e..c4b28cb4d 100644
--- a/db/db/db_method.c
+++ b/db/db/db_method.c
@@ -1,50 +1,39 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_method.c,v 11.116 2004/10/11 18:22:05 bostic Exp $
+ * $Id: db_method.c,v 12.23 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.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"
+#include "dbinc/txn.h"
#ifdef HAVE_RPC
+#ifndef NO_SYSTEM_INCLUDES
+#include <rpc/rpc.h>
+#endif
+#include "db_server.h"
#include "dbinc_auto/rpc_client_ext.h"
#endif
static int __db_get_byteswapped __P((DB *, int *));
static int __db_get_dbname __P((DB *, const char **, const char **));
static DB_ENV *__db_get_env __P((DB *));
+static DB_MPOOLFILE *__db_get_mpf __P((DB *));
static int __db_get_transactional __P((DB *));
static int __db_get_type __P((DB *, DBTYPE *dbtype));
-static int __db_init __P((DB *, u_int32_t));
+static int __db_init __P((DB_ENV *, DB *, 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)));
@@ -71,10 +60,6 @@ static void __db_set_msgfile __P((DB *, FILE *));
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.
@@ -88,17 +73,17 @@ db_create(dbpp, dbenv, flags)
u_int32_t flags;
{
DB *dbp;
+ DB_THREAD_INFO *ip;
+ DB_REP *db_rep;
int ret;
/* Check for invalid function flags. */
switch (flags) {
case 0:
break;
- case DB_REP_CREATE:
- break;
case DB_XA_CREATE:
if (dbenv != NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"XA applications may not specify an environment to db_create");
return (EINVAL);
}
@@ -115,16 +100,17 @@ db_create(dbpp, dbenv, flags)
return (__db_ferr(dbenv, "db_create", 0));
}
+ ip = NULL;
+ if (dbenv != NULL)
+ ENV_ENTER(dbenv, ip);
/* Allocate the DB. */
- if ((ret = __os_calloc(dbenv, 1, sizeof(*dbp), &dbp)) != 0)
+ if ((ret = __os_calloc(dbenv, 1, sizeof(*dbp), &dbp)) != 0) {
+ if (dbenv != NULL)
+ ENV_LEAVE(dbenv, ip);
return (ret);
-#ifdef HAVE_RPC
- if (dbenv != NULL && RPC_ON(dbenv))
- ret = __dbcl_init(dbp, dbenv, flags);
- else
-#endif
- ret = __db_init(dbp, flags);
- if (ret != 0)
+ }
+
+ if ((ret = __db_init(dbenv, dbp, flags)) != 0)
goto err;
/* If we don't have an environment yet, allocate a local one. */
@@ -132,26 +118,32 @@ db_create(dbpp, dbenv, flags)
if ((ret = db_env_create(&dbenv, 0)) != 0)
goto err;
F_SET(dbenv, DB_ENV_DBLOCAL);
+ ENV_ENTER(dbenv, ip);
}
dbp->dbenv = dbenv;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
++dbenv->db_ref;
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
/*
* Set the replication timestamp; it's 0 if we're not in a replicated
- * environment.
+ * environment. Don't acquire a lock to read the value, even though
+ * it's opaque: all we check later is value equality, nothing else.
+ */
+ dbp->timestamp = REP_ON(dbenv) ?
+ ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->rep_timestamp : 0;
+ /*
+ * Set the replication generation number for fid management; valid
+ * replication generations start at 1. Don't acquire a lock to
+ * read the value. All we check later is value equality.
*/
- dbp->timestamp =
- (F_ISSET(dbenv, DB_ENV_DBLOCAL) || !REP_ON(dbenv)) ? 0 :
- ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->rep_timestamp;
+ db_rep = dbenv->rep_handle;
+ dbp->fid_gen = REP_ON(dbenv) ? ((REP *)db_rep->region)->gen : 0;
/* If not RPC, open a backing DB_MPOOLFILE handle in the memory pool. */
-#ifdef HAVE_RPC
- if (!RPC_ON(dbenv))
-#endif
- if ((ret = __memp_fcreate(dbenv, &dbp->mpf)) != 0)
- goto err;
+ if (!RPC_ON(dbenv) &&
+ (ret = __memp_fcreate(dbenv, &dbp->mpf)) != 0)
+ goto err;
dbp->type = DB_UNKNOWN;
@@ -161,9 +153,10 @@ db_create(dbpp, dbenv, flags)
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);
+ (void)__env_close(dbenv, 0);
__os_free(dbenv, dbp);
*dbpp = NULL;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -172,7 +165,8 @@ err: if (dbp->mpf != NULL)
* Initialize a DB structure.
*/
static int
-__db_init(dbp, flags)
+__db_init(dbenv, dbp, flags)
+ DB_ENV *dbenv;
DB *dbp;
u_int32_t flags;
{
@@ -189,8 +183,10 @@ __db_init(dbp, flags)
FLD_SET(dbp->am_ok,
DB_OK_BTREE | DB_OK_HASH | DB_OK_QUEUE | DB_OK_RECNO);
+ /* DB PUBLIC HANDLE LIST BEGIN */
dbp->associate = __db_associate_pp;
dbp->close = __db_close_pp;
+ dbp->compact = __db_compact_pp;
dbp->cursor = __db_cursor_pp;
dbp->del = __db_del_pp;
dbp->dump = __db_dump_pp;
@@ -199,9 +195,18 @@ __db_init(dbp, flags)
dbp->fd = __db_fd_pp;
dbp->get = __db_get_pp;
dbp->get_byteswapped = __db_get_byteswapped;
+ dbp->get_cachesize = __db_get_cachesize;
dbp->get_dbname = __db_get_dbname;
+ dbp->get_encrypt_flags = __db_get_encrypt_flags;
dbp->get_env = __db_get_env;
+ dbp->get_errfile = __db_get_errfile;
+ dbp->get_errpfx = __db_get_errpfx;
+ dbp->get_flags = __db_get_flags;
+ dbp->get_lorder = __db_get_lorder;
+ dbp->get_mpf = __db_get_mpf;
+ dbp->get_msgfile = __db_get_msgfile;
dbp->get_open_flags = __db_get_open_flags;
+ dbp->get_pagesize = __db_get_pagesize;
dbp->get_transactional = __db_get_transactional;
dbp->get_type = __db_get_type;
dbp->join = __db_join_pp;
@@ -211,35 +216,28 @@ __db_init(dbp, flags)
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_msgcall = __db_set_msgcall;
- dbp->get_msgfile = __db_get_msgfile;
dbp->set_msgfile = __db_set_msgfile;
- dbp->get_pagesize = __db_get_pagesize;
dbp->set_pagesize = __db_set_pagesize;
dbp->set_paniccall = __db_set_paniccall;
dbp->stat = __db_stat_pp;
dbp->stat_print = __db_stat_print_pp;
dbp->sync = __db_sync_pp;
+ dbp->truncate = __db_truncate_pp;
dbp->upgrade = __db_upgrade_pp;
dbp->verify = __db_verify_pp;
+ /* DB PUBLIC HANDLE LIST END */
/* Access method specific. */
if ((ret = __bam_db_create(dbp)) != 0)
@@ -256,8 +254,25 @@ __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);
+#ifdef HAVE_RPC
+ /*
+ * RPC specific: must be last, as we replace methods set by the
+ * access methods.
+ */
+ if (dbenv != NULL && RPC_ON(dbenv)) {
+ __dbcl_dbp_init(dbp);
+ /*
+ * !!!
+ * We wrap the DB->open method for RPC, and the rpc.src file
+ * can't handle that.
+ */
+ dbp->open = __dbcl_db_open_wrap;
+ if ((ret = __dbcl_db_create(dbp, dbenv, flags)) != 0)
+ return (ret);
+ }
+#else
+ COMPQUIET(dbenv, NULL);
+#endif
return (0);
}
@@ -286,7 +301,7 @@ __dbh_am_chk(dbp, flags)
return (0);
}
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"call implies an access method which is inconsistent with previous calls");
return (EINVAL);
}
@@ -306,7 +321,7 @@ __dbh_err(dbp, error, fmt, va_alist)
va_dcl
#endif
{
- DB_REAL_ERR(dbp->dbenv, error, 1, 1, fmt);
+ DB_REAL_ERR(dbp->dbenv, error, DB_ERROR_SET, 1, fmt);
}
/*
@@ -323,7 +338,7 @@ __dbh_errx(dbp, fmt, va_alist)
va_dcl
#endif
{
- DB_REAL_ERR(dbp->dbenv, 0, 0, 1, fmt);
+ DB_REAL_ERR(dbp->dbenv, 0, DB_ERROR_NOT_SET, 1, fmt);
}
/*
@@ -371,6 +386,17 @@ __db_get_env(dbp)
}
/*
+ * __db_get_mpf --
+ * Get the underlying DB_MPOOLFILE handle.
+ */
+static DB_MPOOLFILE *
+__db_get_mpf(dbp)
+ DB *dbp;
+{
+ return (dbp->mpf);
+}
+
+/*
* get_transactional --
* Get whether this database was created in a transaction.
*/
@@ -478,7 +504,7 @@ __db_get_encrypt_flags(dbp, flagsp)
{
DB_ILLEGAL_IN_ENV(dbp, "DB->get_encrypt_flags");
- return (__dbenv_get_encrypt_flags(dbp->dbenv, flagsp));
+ return (__env_get_encrypt_flags(dbp->dbenv, flagsp));
}
/*
@@ -497,7 +523,7 @@ __db_set_encrypt(dbp, passwd, flags)
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)
+ if ((ret = __env_set_encrypt(dbp->dbenv, passwd, flags)) != 0)
return (ret);
/*
@@ -517,7 +543,7 @@ __db_set_errcall(dbp, errcall)
DB *dbp;
void (*errcall) __P((const DB_ENV *, const char *, const char *));
{
- __dbenv_set_errcall(dbp->dbenv, errcall);
+ __env_set_errcall(dbp->dbenv, errcall);
}
static void
@@ -525,7 +551,7 @@ __db_get_errfile(dbp, errfilep)
DB *dbp;
FILE **errfilep;
{
- __dbenv_get_errfile(dbp->dbenv, errfilep);
+ __env_get_errfile(dbp->dbenv, errfilep);
}
static void
@@ -533,7 +559,7 @@ __db_set_errfile(dbp, errfile)
DB *dbp;
FILE *errfile;
{
- __dbenv_set_errfile(dbp->dbenv, errfile);
+ __env_set_errfile(dbp->dbenv, errfile);
}
static void
@@ -541,7 +567,7 @@ __db_get_errpfx(dbp, errpfxp)
DB *dbp;
const char **errpfxp;
{
- __dbenv_get_errpfx(dbp->dbenv, errpfxp);
+ __env_get_errpfx(dbp->dbenv, errpfxp);
}
static void
@@ -549,7 +575,7 @@ __db_set_errpfx(dbp, errpfx)
DB *dbp;
const char *errpfx;
{
- __dbenv_set_errpfx(dbp->dbenv, errpfx);
+ __env_set_errpfx(dbp->dbenv, errpfx);
}
static int
@@ -623,7 +649,7 @@ __db_get_flags(dbp, flagsp)
#ifdef HAVE_QUEUE
__qam_map_flags(dbp, &f, &mapped_flag);
#endif
- DB_ASSERT(f == 0);
+ DB_ASSERT(dbp->dbenv, f == 0);
if (F_ISSET(dbp, mapped_flag) == mapped_flag)
LF_SET(db_flags[i]);
}
@@ -649,7 +675,7 @@ __db_set_flags(dbp, flags)
dbenv = dbp->dbenv;
if (LF_ISSET(DB_ENCRYPT) && !CRYPTO_ON(dbenv)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Database environment not configured for encryption");
return (EINVAL);
}
@@ -740,7 +766,7 @@ __db_set_alloc(dbp, mal_func, real_func, free_func)
DB_ILLEGAL_IN_ENV(dbp, "DB->set_alloc");
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_alloc");
- return (__dbenv_set_alloc(dbp->dbenv, mal_func, real_func, free_func));
+ return (__env_set_alloc(dbp->dbenv, mal_func, real_func, free_func));
}
static void
@@ -748,7 +774,7 @@ __db_set_msgcall(dbp, msgcall)
DB *dbp;
void (*msgcall) __P((const DB_ENV *, const char *));
{
- __dbenv_set_msgcall(dbp->dbenv, msgcall);
+ __env_set_msgcall(dbp->dbenv, msgcall);
}
static void
@@ -756,7 +782,7 @@ __db_get_msgfile(dbp, msgfilep)
DB *dbp;
FILE **msgfilep;
{
- __dbenv_get_msgfile(dbp->dbenv, msgfilep);
+ __env_get_msgfile(dbp->dbenv, msgfilep);
}
static void
@@ -764,7 +790,7 @@ __db_set_msgfile(dbp, msgfile)
DB *dbp;
FILE *msgfile;
{
- __dbenv_set_msgfile(dbp->dbenv, msgfile);
+ __env_set_msgfile(dbp->dbenv, msgfile);
}
static int
@@ -790,12 +816,12 @@ __db_set_pagesize(dbp, db_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",
+ __db_errx(dbp->dbenv, "page sizes may not be smaller than %lu",
(u_long)DB_MIN_PGSIZE);
return (EINVAL);
}
if (db_pagesize > DB_MAX_PGSIZE) {
- __db_err(dbp->dbenv, "page sizes may not be larger than %lu",
+ __db_errx(dbp->dbenv, "page sizes may not be larger than %lu",
(u_long)DB_MAX_PGSIZE);
return (EINVAL);
}
@@ -805,7 +831,7 @@ __db_set_pagesize(dbp, db_pagesize)
* for alignment of various types on the pages.
*/
if (!POWER_OF_TWO(db_pagesize)) {
- __db_err(dbp->dbenv, "page sizes must be a power-of-2");
+ __db_errx(dbp->dbenv, "page sizes must be a power-of-2");
return (EINVAL);
}
@@ -824,97 +850,5 @@ __db_set_paniccall(dbp, paniccall)
DB *dbp;
void (*paniccall) __P((DB_ENV *, int));
{
- return (__dbenv_set_paniccall(dbp->dbenv, paniccall));
-}
-
-#ifdef HAVE_RPC
-/*
- * __dbcl_init --
- * Initialize a DB structure on the server.
- */
-static int
-__dbcl_init(dbp, dbenv, flags)
- DB *dbp;
- DB_ENV *dbenv;
- u_int32_t flags;
-{
- TAILQ_INIT(&dbp->free_queue);
- TAILQ_INIT(&dbp->active_queue);
- /* !!!
- * Note that we don't need to initialize the join_queue; it's
- * 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;
- dbp->err = __dbh_err;
- dbp->errx = __dbh_errx;
- dbp->fd = __dbcl_db_fd;
- dbp->get = __dbcl_db_get;
- 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->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 = __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->get_pagesize = __dbcl_db_get_pagesize;
- dbp->set_pagesize = __dbcl_db_pagesize;
- dbp->set_paniccall = __dbcl_db_panic;
- 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;
-
- return (__dbcl_db_create(dbp, dbenv, flags));
+ return (__env_set_paniccall(dbp->dbenv, paniccall));
}
-#endif
diff --git a/db/db/db_open.c b/db/db/db_open.c
index 35e115091..6fe158900 100644
--- a/db/db/db_open.c
+++ b/db/db/db_open.c
@@ -1,24 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_open.c,v 11.240 2004/09/22 20:53:19 margo Exp $
+ * $Id: db_open.c,v 12.30 2006/09/19 15:06:58 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/db_swap.h"
#include "dbinc/btree.h"
#include "dbinc/crypto.h"
@@ -42,12 +34,15 @@
* 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
+ * 3. It can be called to open an in-memory database (name == NULL;
+ * subname = name).
+ * 4. 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
+ * 5. 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).
+ * 6. It can be called during recovery to open an in-memory database.
*
* PUBLIC: int __db_open __P((DB *, DB_TXN *,
* PUBLIC: const char *, const char *, DBTYPE, u_int32_t, int, db_pgno_t));
@@ -85,53 +80,74 @@ __db_open(dbp, txn, fname, dname, type, flags, mode, meta_pgno)
/* Convert any DB->open flags. */
if (LF_ISSET(DB_RDONLY))
F_SET(dbp, DB_AM_RDONLY);
- if (LF_ISSET(DB_DIRTY_READ))
- F_SET(dbp, DB_AM_DIRTY);
+ if (LF_ISSET(DB_READ_UNCOMMITTED))
+ F_SET(dbp, DB_AM_READ_UNCOMMITTED);
- if (txn != NULL)
+ if (IS_REAL_TXN(txn))
F_SET(dbp, DB_AM_TXN);
/* Fill in the type. */
dbp->type = type;
/*
- * 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 both fname and subname are NULL, it's always a create, so make
+ * sure that we have both DB_CREATE and 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 (fname == NULL) {
- F_SET(dbp, DB_AM_INMEM);
+ if (dname == NULL) {
+ if (!LF_ISSET(DB_CREATE)) {
+ __db_errx(dbenv,
+ "DB_CREATE must be specified to create databases.");
+ return (ENOENT);
+ }
- if (dbp->type == DB_UNKNOWN) {
- __db_err(dbenv,
- "DBTYPE of unknown without existing file");
- return (EINVAL);
- }
+ F_SET(dbp, DB_AM_INMEM);
+ F_SET(dbp, DB_AM_CREATED);
- if (dbp->pgsize == 0)
- dbp->pgsize = DB_DEF_IOSIZE;
+ if (dbp->type == DB_UNKNOWN) {
+ __db_errx(dbenv,
+ "DBTYPE of unknown without existing file");
+ return (EINVAL);
+ }
+
+ 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, NULL)) != 0)
+ return (ret);
+ } else
+ MAKE_INMEM(dbp);
/*
- * 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.
+ * Normally we would do handle locking here, however, with
+ * in-memory files, we cannot do any database manipulation
+ * until the mpool is open, so it happens later.
*/
- if (LOCKING_ON(dbenv) &&
- (ret = __lock_id(dbenv, (u_int32_t *)dbp->fileid)) != 0)
- return (ret);
} else if (dname == NULL && meta_pgno == PGNO_BASE_MD) {
/* Open/create the underlying file. Acquire locks. */
if ((ret =
@@ -161,40 +177,46 @@ __db_open(dbp, txn, fname, dname, type, flags, mode, meta_pgno)
LF_SET(DB_TRUNCATE);
/* Set up the underlying environment. */
- if ((ret = __db_dbenv_setup(dbp, txn, fname, id, flags)) != 0)
+ if ((ret = __db_dbenv_setup(dbp, txn, fname, dname, id, flags)) != 0)
return (ret);
- /*
- * Set the open flag. We use it to mean that the dbp has gone
- * through mpf setup, including dbreg_register. Also, below,
- * 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_AM_OPEN_CALLED);
-
- /*
- * For unnamed files, we need to actually create the file now
- * that the mpool is open.
- */
- if (fname == NULL && (ret = __db_new_file(dbp, txn, NULL, NULL)) != 0)
- return (ret);
+ /* For in-memory databases, we now need to open/create the database. */
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ if (dname == NULL)
+ ret = __db_new_file(dbp, txn, NULL, NULL);
+ else {
+ id = TXN_INVALID;
+ if ((ret = __fop_file_setup(dbp,
+ txn, dname, mode, flags, &id)) == 0 &&
+ DBENV_LOGGING(dbenv) && !F_ISSET(dbp, DB_AM_RECOVER)
+#if !defined(DEBUG_ROP)
+ && !F_ISSET(dbp, DB_AM_RDONLY)
+#endif
+ )
+ ret = __dbreg_log_id(dbp,
+ txn, dbp->log_filename->id, 1);
+ }
+ if (ret != 0)
+ goto err;
+ }
switch (dbp->type) {
- case DB_BTREE:
- ret = __bam_open(dbp, txn, fname, meta_pgno, flags);
- break;
- case DB_HASH:
- ret = __ham_open(dbp, txn, fname, meta_pgno, flags);
- break;
- case DB_RECNO:
- ret = __ram_open(dbp, txn, fname, meta_pgno, flags);
- break;
- case DB_QUEUE:
- ret = __qam_open(dbp, txn, fname, meta_pgno, mode, flags);
- break;
- case DB_UNKNOWN:
- return (__db_unknown_type(dbenv, "__db_dbopen", dbp->type));
+ case DB_BTREE:
+ ret = __bam_open(dbp, txn, fname, meta_pgno, flags);
+ break;
+ case DB_HASH:
+ ret = __ham_open(dbp, txn, fname, meta_pgno, flags);
+ break;
+ case DB_RECNO:
+ ret = __ram_open(dbp, txn, fname, meta_pgno, flags);
+ break;
+ case DB_QUEUE:
+ ret = __qam_open(
+ dbp, txn, fname, meta_pgno, mode, flags);
+ break;
+ case DB_UNKNOWN:
+ return (
+ __db_unknown_type(dbenv, "__db_dbopen", dbp->type));
}
if (ret != 0)
goto err;
@@ -202,16 +224,16 @@ __db_open(dbp, txn, fname, dname, type, flags, mode, meta_pgno)
DB_TEST_RECOVERY(dbp, DB_TEST_POSTOPEN, ret, fname);
/*
- * Unnamed files don't need handle locks, so we only have to check
+ * Temporary files don't need handle locks, so we only have to check
* for a handle lock downgrade or lockevent in the case of named
* files.
*/
- if (!F_ISSET(dbp, DB_AM_RECOVER) &&
- fname != NULL && LOCK_ISSET(dbp->handle_lock)) {
- if (txn != NULL) {
+ if (!F_ISSET(dbp, DB_AM_RECOVER) && (fname != NULL || dname != NULL) &&
+ LOCK_ISSET(dbp->handle_lock)) {
+ if (IS_REAL_TXN(txn))
ret = __txn_lockevent(dbenv,
txn, dbp, &dbp->handle_lock, dbp->lid);
- } else if (LOCKING_ON(dbenv))
+ else if (LOCKING_ON(dbenv))
/* Trade write handle lock for read handle lock. */
ret = __lock_downgrade(dbenv,
&dbp->handle_lock, DB_LOCK_READ, 0);
@@ -266,7 +288,7 @@ __db_new_file(dbp, txn, fhp, name)
break;
case DB_UNKNOWN:
default:
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"%s: Invalid type %d specified", name, dbp->type);
ret = EINVAL;
break;
@@ -303,7 +325,8 @@ __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 = __memp_fget(mpf, &dbp->meta_pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &dbp->meta_pgno,
+ txn, 0, &meta)) != 0)
goto err;
ret = __db_meta_setup(mdbp->dbenv, dbp, name, meta, 0, 0);
if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
@@ -331,7 +354,7 @@ __db_init_subdb(mdbp, dbp, name, txn)
break;
case DB_UNKNOWN:
default:
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"Invalid subdatabase type %d specified", dbp->type);
return (EINVAL);
}
@@ -341,8 +364,8 @@ err: return (ret);
/*
* __db_chk_meta --
- * Take a buffer containing a meta-data page and check it for a checksum
- * (and verify the checksum if necessary) and possibly decrypt it.
+ * Take a buffer containing a meta-data page and check it for a valid LSN,
+ * checksum (and verify the checksum if necessary) and possibly decrypt it.
*
* Return 0 on success, >0 (errno) on error, -1 on checksum mismatch.
*
@@ -355,11 +378,13 @@ __db_chk_meta(dbenv, dbp, meta, do_metachk)
DBMETA *meta;
int do_metachk;
{
+ DB_LSN swap_lsn;
int is_hmac, ret, swapped;
- u_int32_t orig_chk;
+ u_int32_t magic, orig_chk;
u_int8_t *chksum;
ret = 0;
+ swapped = 0;
if (FLD_ISSET(meta->metaflags, DBMETA_CHKSUM)) {
if (dbp != NULL)
@@ -381,7 +406,7 @@ __db_chk_meta(dbenv, dbp, meta, do_metachk)
*/
if (do_metachk) {
swapped = 0;
-chk_retry: if ((ret = __db_check_chksum(dbenv,
+chk_retry: if ((ret = __db_check_chksum(dbenv, NULL,
(DB_CIPHER *)dbenv->crypto_handle, chksum, meta,
DBMETASIZE, is_hmac)) != 0) {
if (is_hmac || swapped)
@@ -399,6 +424,40 @@ chk_retry: if ((ret = __db_check_chksum(dbenv,
#ifdef HAVE_CRYPTO
ret = __crypto_decrypt_meta(dbenv, dbp, (u_int8_t *)meta, do_metachk);
#endif
+
+ /* Now that we're decrypted, we can check LSN. */
+ if (LOGGING_ON(dbenv)) {
+ /*
+ * This gets called both before and after swapping, so we
+ * need to check ourselves. If we already swapped it above,
+ * we'll know that here.
+ */
+
+ swap_lsn = meta->lsn;
+ magic = meta->magic;
+lsn_retry:
+ if (swapped) {
+ M_32_SWAP(swap_lsn.file);
+ M_32_SWAP(swap_lsn.offset);
+ M_32_SWAP(magic);
+ }
+ switch (magic) {
+ case DB_BTREEMAGIC:
+ case DB_HASHMAGIC:
+ case DB_QAMMAGIC:
+ case DB_RENAMEMAGIC:
+ break;
+ default:
+ if (swapped)
+ return (EINVAL);
+ swapped = 1;
+ goto lsn_retry;
+ }
+ if (!IS_REP_CLIENT(dbenv) &&
+ !IS_NOT_LOGGED_LSN(swap_lsn) && !IS_ZERO_LSN(swap_lsn))
+ /* Need to do check. */
+ ret = __log_check_page_lsn(dbenv, dbp, &swap_lsn);
+ }
return (ret);
}
@@ -433,7 +492,7 @@ __db_meta_setup(dbenv, dbp, name, meta, oflags, do_metachk)
* 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);
+ F_CLR(dbp, DB_AM_SWAP | DB_AM_IN_RENAME);
magic = meta->magic;
swap_retry:
@@ -451,7 +510,7 @@ swap_retry:
* not yet initialized.
*/
if (F_ISSET(dbp, DB_AM_SUBDB) && ((IS_RECOVERING(dbenv) &&
- F_ISSET((DB_LOG *) dbenv->lg_handle, DBLOG_FORCE_OPEN)) ||
+ F_ISSET(dbenv->lg_handle, DBLOG_FORCE_OPEN)) ||
meta->pgno != PGNO_INVALID))
return (ENOENT);
@@ -474,7 +533,7 @@ swap_retry:
*/
if ((ret = __db_chk_meta(dbenv, dbp, meta, do_metachk)) != 0) {
if (ret == -1)
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: metadata page checksum error", name);
goto bad_format;
}
@@ -529,6 +588,6 @@ bad_format:
if (F_ISSET(dbp, DB_AM_RECOVER))
ret = ENOENT;
else
- __db_err(dbenv, "%s: unexpected file type or format", name);
+ __db_errx(dbenv, "%s: unexpected file type or format", name);
return (ret == 0 ? EINVAL : ret);
}
diff --git a/db/db/db_overflow.c b/db/db/db_overflow.c
index 046e60fab..bf39291fc 100644
--- a/db/db/db_overflow.c
+++ b/db/db/db_overflow.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,20 +39,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_overflow.c,v 11.54 2004/03/28 17:17:50 bostic Exp $
+ * $Id: db_overflow.c,v 12.13 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#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/mp.h"
@@ -69,12 +62,13 @@
* __db_goff --
* Get an offpage item.
*
- * PUBLIC: int __db_goff __P((DB *, DBT *,
+ * PUBLIC: int __db_goff __P((DB *, DB_TXN *, DBT *,
* PUBLIC: u_int32_t, db_pgno_t, void **, u_int32_t *));
*/
int
-__db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
+__db_goff(dbp, txn, dbt, tlen, pgno, bpp, bpsz)
DB *dbp;
+ DB_TXN *txn;
DBT *dbt;
u_int32_t tlen;
db_pgno_t pgno;
@@ -111,6 +105,9 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
needed = tlen;
}
+ if (F_ISSET(dbt, DB_DBT_USERCOPY))
+ goto skip_alloc;
+
/* Allocate any necessary memory. */
if (F_ISSET(dbt, DB_DBT_USERMEM)) {
if (needed > dbt->ulen) {
@@ -131,33 +128,42 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
} else if (bpp != NULL)
dbt->data = *bpp;
else {
- DB_ASSERT(
+ DB_ASSERT(dbenv,
F_ISSET(dbt,
DB_DBT_USERMEM | DB_DBT_MALLOC | DB_DBT_REALLOC) ||
bpsz != NULL || bpp != NULL);
return (DB_BUFFER_SMALL);
}
+skip_alloc:
/*
* Step through the linked list of pages, copying the data on each
* one into the buffer. Never copy more than the total data length.
*/
dbt->size = needed;
for (curoff = 0, p = dbt->data; pgno != PGNO_INVALID && needed > 0;) {
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn, 0, &h)) != 0)
return (ret);
+ DB_ASSERT(dbenv, TYPE(h) == P_OVERFLOW);
/* Check if we need any bytes from this page. */
if (curoff + OV_LEN(h) >= start) {
- src = (u_int8_t *)h + P_OVERHEAD(dbp);
bytes = OV_LEN(h);
+ src = (u_int8_t *)h + P_OVERHEAD(dbp);
if (start > curoff) {
src += start - curoff;
bytes -= start - curoff;
}
if (bytes > needed)
bytes = needed;
- memcpy(p, src, bytes);
+ if (F_ISSET(dbt, DB_DBT_USERCOPY)) {
+ if ((ret = dbenv->dbt_usercopy(dbt, curoff,
+ src, bytes, DB_USERCOPY_SETDATA)) != 0) {
+ (void)__memp_fput(mpf, h, 0);
+ return (ret);
+ }
+ } else
+ memcpy(p, src, bytes);
p += bytes;
needed -= bytes;
}
@@ -228,8 +234,7 @@ __db_poff(dbc, dbt, pgnop)
lastp == NULL ? &null_lsn : &LSN(lastp),
&null_lsn)) != 0) {
if (lastp != NULL)
- (void)__memp_fput(mpf,
- lastp, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, lastp, 0);
lastp = pagep;
break;
}
@@ -241,8 +246,6 @@ __db_poff(dbc, dbt, pgnop)
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(dbp), p, pagespace);
@@ -257,27 +260,26 @@ __db_poff(dbc, dbt, pgnop)
else {
lastp->next_pgno = PGNO(pagep);
pagep->prev_pgno = PGNO(lastp);
- (void)__memp_fput(mpf, lastp, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, lastp, 0);
}
lastp = pagep;
}
if (lastp != NULL &&
- (t_ret = __memp_fput(mpf, lastp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ (t_ret = __memp_fput(mpf, lastp, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
* __db_ovref --
- * Increment/decrement the reference count on an overflow page.
+ * Decrement the reference count on an overflow page.
*
- * PUBLIC: int __db_ovref __P((DBC *, db_pgno_t, int32_t));
+ * PUBLIC: int __db_ovref __P((DBC *, db_pgno_t));
*/
int
-__db_ovref(dbc, pgno, adjust)
+__db_ovref(dbc, pgno)
DBC *dbc;
db_pgno_t pgno;
- int32_t adjust;
{
DB *dbp;
DB_MPOOLFILE *mpf;
@@ -287,21 +289,30 @@ __db_ovref(dbc, pgno, adjust)
dbp = dbc->dbp;
mpf = dbp->mpf;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
- return (__db_pgerr(dbp, pgno, ret));
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, DB_MPOOL_DIRTY, &h)) != 0)
+ return (ret);
if (DBC_LOGGING(dbc)) {
if ((ret = __db_ovref_log(dbp,
- dbc->txn, &LSN(h), 0, h->pgno, adjust, &LSN(h))) != 0) {
+ dbc->txn, &LSN(h), 0, h->pgno, -1, &LSN(h))) != 0) {
(void)__memp_fput(mpf, h, 0);
return (ret);
}
} else
LSN_NOT_LOGGED(LSN(h));
- OV_REF(h) += adjust;
- (void)__memp_fput(mpf, h, DB_MPOOL_DIRTY);
- return (0);
+ /*
+ * In BDB releases before 4.5, the overflow reference counts were
+ * incremented when an overflow item was split onto an internal
+ * page. There was a lock race in that code, and rather than fix
+ * the race, we changed BDB to copy overflow items when splitting
+ * them onto internal pages. The code to decrement reference
+ * counts remains so databases already in the field continue to
+ * work.
+ */
+ --OV_REF(h);
+
+ return (__memp_fput(mpf, h, 0));
}
/*
@@ -326,17 +337,22 @@ __db_doff(dbc, pgno)
mpf = dbp->mpf;
do {
- if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) != 0)
- return (__db_pgerr(dbp, pgno, ret));
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &pagep)) != 0)
+ return (ret);
- DB_ASSERT(TYPE(pagep) == P_OVERFLOW);
+ DB_ASSERT(dbp->dbenv, TYPE(pagep) == P_OVERFLOW);
/*
* If it's referenced by more than one key/data item,
* decrement the reference count and return.
*/
if (OV_REF(pagep) > 1) {
(void)__memp_fput(mpf, pagep, 0);
- return (__db_ovref(dbc, pgno, -1));
+ return (__db_ovref(dbc, pgno));
+ }
+
+ if ((ret = __memp_dirty(mpf, &pagep, dbc->txn, 0)) != 0) {
+ (void)__memp_fput(mpf, pagep, 0);
+ return (ret);
}
if (DBC_LOGGING(dbc)) {
@@ -372,12 +388,13 @@ __db_doff(dbc, pgno)
* specified a comparison function. In this case, we need to materialize
* the entire object and call their comparison routine.
*
- * PUBLIC: int __db_moff __P((DB *, const DBT *, db_pgno_t, u_int32_t,
+ * PUBLIC: int __db_moff __P((DB *, DB_TXN *, const DBT *, db_pgno_t, u_int32_t,
* PUBLIC: int (*)(DB *, const DBT *, const DBT *), int *));
*/
int
-__db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)
+__db_moff(dbp, txn, dbt, pgno, tlen, cmpfunc, cmpp)
DB *dbp;
+ DB_TXN *txn;
const DBT *dbt;
db_pgno_t pgno;
u_int32_t tlen;
@@ -402,7 +419,7 @@ __db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)
buf = NULL;
bufsize = 0;
- if ((ret = __db_goff(dbp,
+ if ((ret = __db_goff(dbp, txn,
&local_dbt, tlen, pgno, &buf, &bufsize)) != 0)
return (ret);
/* Pass the key as the first argument */
@@ -414,7 +431,7 @@ __db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)
/* 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(mpf, &pgno, 0, &pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn, 0, &pagep)) != 0)
return (ret);
cmp_bytes = OV_LEN(pagep) < key_left ? OV_LEN(pagep) : key_left;
diff --git a/db/db/db_ovfl_vrfy.c b/db/db/db_ovfl_vrfy.c
index a3c5fba7c..85cb85eba 100644
--- a/db/db/db_ovfl_vrfy.c
+++ b/db/db/db_ovfl_vrfy.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,19 +39,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_ovfl_vrfy.c,v 11.56 2004/01/28 03:35:57 bostic Exp $
+ * $Id: db_ovfl_vrfy.c,v 12.8 2006/09/07 20:05:26 bostic Exp $
*/
#include "db_config.h"
-#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"
@@ -118,13 +112,15 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
u_int32_t flags;
{
DB *pgset;
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
db_pgno_t next, prev;
int isbad, ret, seen_cnt, t_ret;
u_int32_t refcount;
+ dbenv = dbp->dbenv;
pgset = vdp->pgset;
- DB_ASSERT(pgset != NULL);
+ DB_ASSERT(dbenv, pgset != NULL);
isbad = 0;
/* This shouldn't happen, but just to be sure. */
@@ -142,7 +138,7 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
refcount = pip->refcount;
if (pip->type != P_OVERFLOW) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: overflow page of invalid type %lu",
(u_long)pgno, (u_long)pip->type));
ret = DB_VERIFY_BAD;
@@ -151,7 +147,7 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
prev = pip->prev_pgno;
if (prev != PGNO_INVALID) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: first page in overflow chain has a prev_pgno %lu",
(u_long)pgno, (u_long)prev));
isbad = 1;
@@ -170,7 +166,7 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
if ((ret = __db_vrfy_pgset_get(pgset, pgno, &seen_cnt)) != 0)
goto err;
if ((u_int32_t)seen_cnt > refcount) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: encountered too many times in overflow traversal",
(u_long)pgno));
ret = DB_VERIFY_BAD;
@@ -205,7 +201,7 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
*/
if (LF_ISSET(ST_OVFL_LEAF)) {
if (F_ISSET(pip, VRFY_OVFL_LEAFSEEN)) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: overflow page linked twice from leaf or data page",
(u_long)pgno));
ret = DB_VERIFY_BAD;
@@ -248,19 +244,18 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
* to be sure...
*/
if (!IS_VALID_PGNO(next)) {
- DB_ASSERT(0);
- EPRINT((dbp->dbenv,
+ EPRINT((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 ||
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 ||
(ret = __db_vrfy_getpageinfo(vdp, next, &pip)) != 0)
return (ret);
if (pip->prev_pgno != pgno) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: bad prev_pgno %lu on overflow page (should be %lu)",
(u_long)next, (u_long)pip->prev_pgno,
(u_long)pgno));
@@ -276,13 +271,13 @@ __db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
if (tlen > 0) {
isbad = 1;
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: overflow item incomplete", (u_long)pgno));
}
done:
err: if ((t_ret =
- __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0 && ret == 0)
+ __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
@@ -323,7 +318,7 @@ __db_safe_goff(dbp, vdp, pgno, dbt, buf, flags)
if ((ret = __db_salvage_markdone(vdp, pgno)) != 0)
break;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
break;
/*
diff --git a/db/db/db_pr.c b/db/db/db_pr.c
index e63daf3ee..2a092ab0d 100644
--- a/db/db/db_pr.c
+++ b/db/db/db_pr.c
@@ -1,25 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_pr.c,v 11.121 2004/10/28 14:48:43 bostic Exp $
+ * $Id: db_pr.c,v 12.29 2006/09/07 20:05:26 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/btree.h"
#include "dbinc/hash.h"
#include "dbinc/mp.h"
@@ -35,9 +26,9 @@
void
__db_loadme()
{
- u_int32_t id;
+ pid_t pid;
- __os_id(&id);
+ __os_id(NULL, &pid, NULL);
}
#ifdef HAVE_STATISTICS
@@ -47,18 +38,19 @@ static void __db_meta __P((DB *, DBMETA *, FN const *, u_int32_t));
static const char *__db_pagetype_to_string __P((u_int32_t));
static void __db_prdb __P((DB *, u_int32_t));
static void __db_proff __P((DB_ENV *, DB_MSGBUF *, void *));
-static int __db_prtree __P((DB *, u_int32_t));
+static int __db_prtree __P((DB *, DB_TXN *, u_int32_t));
static int __db_qmeta __P((DB *, QMETA *, u_int32_t));
/*
* __db_dumptree --
* Dump the tree to a file.
*
- * PUBLIC: int __db_dumptree __P((DB *, char *, char *));
+ * PUBLIC: int __db_dumptree __P((DB *, DB_TXN *, char *, char *));
*/
int
-__db_dumptree(dbp, op, name)
+__db_dumptree(dbp, txn, op, name)
DB *dbp;
+ DB_TXN *txn;
char *op, *name;
{
DB_ENV *dbenv;
@@ -95,7 +87,7 @@ __db_dumptree(dbp, op, name)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
- ret = __db_prtree(dbp, flags);
+ ret = __db_prtree(dbp, txn, flags);
if (fp != NULL) {
(void)fclose(fp);
@@ -106,38 +98,37 @@ __db_dumptree(dbp, op, name)
}
static const FN __db_flags_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_NOT_DURABLE, "changes not logged" },
- { DB_AM_OPEN_CALLED, "open called" },
- { DB_AM_PAD, "pad value" },
- { DB_AM_PGDEF, "default page size" },
- { DB_AM_RDONLY, "read-only" },
- { DB_AM_RECNUM, "Btree record numbers" },
- { DB_AM_RECOVER, "opened for recovery" },
- { DB_AM_RENUMBER, "renumber" },
- { DB_AM_REPLICATION, "replication file" },
- { 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_AM_TXN, "transactional" },
- { DB_AM_VERIFYING, "verifier" },
- { 0, NULL }
+ { 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_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_NOT_DURABLE, "changes not logged" },
+ { DB_AM_OPEN_CALLED, "open called" },
+ { DB_AM_PAD, "pad value" },
+ { DB_AM_PGDEF, "default page size" },
+ { DB_AM_RDONLY, "read-only" },
+ { DB_AM_READ_UNCOMMITTED, "read-uncommitted" },
+ { 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_AM_TXN, "transactional" },
+ { DB_AM_VERIFYING, "verifier" },
+ { 0, NULL }
};
/*
@@ -182,8 +173,7 @@ __db_prdb(dbp, flags)
bt = dbp->bt_internal;
__db_msg(dbenv, "bt_meta: %lu bt_root: %lu",
(u_long)bt->bt_meta, (u_long)bt->bt_root);
- __db_msg(dbenv, "bt_maxkey: %lu bt_minkey: %lu",
- (u_long)bt->bt_maxkey, (u_long)bt->bt_minkey);
+ __db_msg(dbenv, "bt_minkey: %lu", (u_long)bt->bt_minkey);
if (!LF_ISSET(DB_PR_RECOVERYTEST))
__db_msg(dbenv, "bt_compare: %#lx bt_prefix: %#lx",
P_TO_ULONG(bt->bt_compare),
@@ -228,8 +218,9 @@ __db_prdb(dbp, flags)
* Print out the entire tree.
*/
static int
-__db_prtree(dbp, flags)
+__db_prtree(dbp, txn, flags)
DB *dbp;
+ DB_TXN *txn;
u_int32_t flags;
{
DB_MPOOLFILE *mpf;
@@ -246,9 +237,10 @@ __db_prtree(dbp, flags)
* Find out the page number of the last page in the database, then
* dump each page.
*/
- __memp_last_pgno(mpf, &last);
+ if ((ret = __memp_last_pgno(mpf, &last)) != 0)
+ return (ret);
for (i = 0; i <= last; ++i) {
- if ((ret = __memp_fget(mpf, &i, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &i, txn, 0, &h)) != 0)
return (ret);
(void)__db_prpage(dbp, h, flags);
if ((ret = __memp_fput(mpf, h, 0)) != 0)
@@ -298,7 +290,7 @@ __db_meta(dbp, dbmeta, fn, flags)
dbenv, &mb, "\tfree list: %lu", (u_long)dbmeta->free);
for (pgno = dbmeta->free,
cnt = 0, sep = ", "; pgno != PGNO_INVALID;) {
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0) {
DB_MSGBUF_FLUSH(dbenv, &mb);
__db_msg(dbenv,
"Unable to retrieve free-list page: %lu: %s",
@@ -362,8 +354,7 @@ __db_bmeta(dbp, h, flags)
__db_meta(dbp, (DBMETA *)h, fn, flags);
- __db_msg(dbenv, "\tmaxkey: %lu minkey: %lu",
- (u_long)h->maxkey, (u_long)h->minkey);
+ __db_msg(dbenv, "\tminkey: %lu", (u_long)h->minkey);
if (dbp->type == DB_RECNO)
__db_msg(dbenv, "\tre_len: %#lx re_pad: %#lx",
(u_long)h->re_len, (u_long)h->re_pad);
@@ -441,11 +432,12 @@ __db_qmeta(dbp, 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_TXN *, db_pgno_t));
*/
int
-__db_prnpage(dbp, pgno)
+__db_prnpage(dbp, txn, pgno)
DB *dbp;
+ DB_TXN *txn;
db_pgno_t pgno;
{
DB_MPOOLFILE *mpf;
@@ -454,7 +446,7 @@ __db_prnpage(dbp, pgno)
mpf = dbp->mpf;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn, 0, &h)) != 0)
return (ret);
ret = __db_prpage(dbp, h, DB_PR_PAGE);
@@ -518,19 +510,29 @@ __db_prpage(dbp, h, flags)
pagesize = (u_int32_t)dbp->mpf->mfp->stat.st_pagesize;
/* Page number, page type. */
- __db_msgadd(dbenv, &mb, "page %lu: %s level: %lu",
- (u_long)h->pgno, s, (u_long)h->level);
+ __db_msgadd(dbenv, &mb, "page %lu: %s:", (u_long)h->pgno, s);
+
+ /*
+ * LSNs on a metadata page will be different from the original after an
+ * abort, in some cases. Don't display them if we're testing recovery.
+ */
+ if (!LF_ISSET(DB_PR_RECOVERYTEST) ||
+ (TYPE(h) != P_BTREEMETA && TYPE(h) != P_HASHMETA &&
+ TYPE(h) != P_QAMMETA && TYPE(h) != P_QAMDATA))
+ __db_msgadd(dbenv, &mb, " LSN [%lu][%lu]:",
+ (u_long)LSN(h).file, (u_long)LSN(h).offset);
+
+ /*
+ * Page level (only applicable for Btree/Recno, but we always display
+ * it, for no particular reason.
+ */
+ __db_msgadd(dbenv, &mb, " level %lu", (u_long)h->level);
/* Record count. */
if (TYPE(h) == P_IBTREE ||
TYPE(h) == P_IRECNO || (TYPE(h) == P_LRECNO &&
h->pgno == ((BTREE *)dbp->bt_internal)->bt_root))
__db_msgadd(dbenv, &mb, " records: %lu", (u_long)RE_NREC(h));
-
- /* LSN. */
- if (!LF_ISSET(DB_PR_RECOVERYTEST))
- __db_msgadd(dbenv, &mb, " (lsn.file: %lu lsn.offset: %lu)",
- (u_long)LSN(h).file, (u_long)LSN(h).offset);
DB_MSGBUF_FLUSH(dbenv, &mb);
switch (TYPE(h)) {
@@ -564,11 +566,6 @@ __db_prpage(dbp, h, flags)
break;
}
- /* LSN. */
- if (LF_ISSET(DB_PR_RECOVERYTEST))
- __db_msg(dbenv, " (lsn.file: %lu lsn.offset: %lu)",
- (u_long)LSN(h).file, (u_long)LSN(h).offset);
-
s = "\t";
if (TYPE(h) != P_IBTREE && TYPE(h) != P_IRECNO) {
__db_msgadd(dbenv, &mb, "%sprev: %4lu next: %4lu",
@@ -680,7 +677,7 @@ __db_prpage(dbp, h, flags)
case P_IBTREE:
bi = sp;
__db_msgadd(dbenv, &mb,
- "count: %4lu pgno: %4lu type: %4lu",
+ "count: %4lu pgno: %4lu type: %lu ",
(u_long)bi->nrecs, (u_long)bi->pgno,
(u_long)bi->type);
switch (B_TYPE(bi->type)) {
@@ -867,8 +864,8 @@ __db_lockmode_to_string(mode)
return ("Intent shared/read");
case DB_LOCK_IWR:
return ("Intent to read/write");
- case DB_LOCK_DIRTY:
- return ("Dirty read");
+ case DB_LOCK_READ_UNCOMMITTED:
+ return ("Read uncommitted");
case DB_LOCK_WWRITE:
return ("Was written");
default:
@@ -938,13 +935,15 @@ __db_pagetype_to_string(type)
* __db_dumptree --
* Dump the tree to a file.
*
- * PUBLIC: int __db_dumptree __P((DB *, char *, char *));
+ * PUBLIC: int __db_dumptree __P((DB *, DB_TXN *, char *, char *));
*/
int
-__db_dumptree(dbp, op, name)
+__db_dumptree(dbp, txn, op, name)
DB *dbp;
+ DB_TXN *txn;
char *op, *name;
{
+ COMPQUIET(txn, NULL);
COMPQUIET(op, NULL);
COMPQUIET(name, NULL);
@@ -988,25 +987,31 @@ __db_dump_pp(dbp, subname, callback, handle, pflag, keyflag)
int pflag, keyflag;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
PANIC_CHECK(dbenv);
DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->dump");
+ ENV_ENTER(dbenv, ip);
+
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 1)) != 0)
- return (ret);
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 1)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
ret = __db_dump(dbp, subname, callback, handle, pflag, keyflag);
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
- return (0);
+err: ENV_LEAVE(dbenv, ip);
+ return (ret);
}
/*
@@ -1088,8 +1093,11 @@ retry: while ((ret =
data.ulen = data.size;
goto retry;
}
+ if (ret == DB_NOTFOUND)
+ ret = 0;
- (void)__db_prfooter(handle, callback);
+ if ((t_ret = __db_prfooter(handle, callback)) != 0 && ret == 0)
+ ret = t_ret;
err: if ((t_ret = __db_c_close(dbcp)) != 0 && ret == 0)
ret = t_ret;
@@ -1220,12 +1228,11 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
* 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;
+ DB_ASSERT(dbenv, dbp != NULL || vdp != NULL);
/*
* If we've been passed a verifier statistics object, use that; we're
@@ -1273,7 +1280,7 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
* 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));
+ DB_ASSERT(dbenv, F_ISSET(dbp, DB_AM_VERIFYING));
dbtype = DB_BTREE;
break;
}
@@ -1300,9 +1307,7 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
snprintf(buf, buflen, "database=");
if ((ret = callback(handle, buf)) != 0)
goto err;
- memset(&dbt, 0, sizeof(dbt));
- dbt.data = (char *)subname;
- dbt.size = (u_int32_t)strlen(subname);
+ DB_INIT_DBT(dbt, subname, strlen(subname));
if ((ret = __db_prdbt(&dbt, 1, NULL, handle, callback, 0)) != 0)
goto err;
}
@@ -1310,39 +1315,26 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
case DB_BTREE:
if ((ret = callback(handle, "type=btree\n")) != 0)
goto err;
- if (using_vdp) {
- if (F_ISSET(pip, VRFY_HAS_RECNUMS))
- if ((ret =
- callback(handle, "recnum=1\n")) != 0)
- goto err;
- if (pip->bt_maxkey != 0) {
- snprintf(buf, buflen,
- "bt_maxkey=%lu\n", (u_long)pip->bt_maxkey);
- if ((ret = callback(handle, buf)) != 0)
- goto err;
- }
- if (pip->bt_minkey != 0 &&
- pip->bt_minkey != DEFMINKEYPAGE) {
- snprintf(buf, buflen,
- "bt_minkey=%lu\n", (u_long)pip->bt_minkey);
- if ((ret = callback(handle, buf)) != 0)
- goto err;
+ if (using_vdp)
+ tmp_int = F_ISSET(pip, VRFY_HAS_RECNUMS) ? 1 : 0;
+ else {
+ if ((ret = __db_get_flags(dbp, &flags)) != 0) {
+ __db_err(dbenv, ret, "DB->get_flags");
+ goto err;
}
- break;
+ tmp_int = F_ISSET(dbp, DB_AM_RECNUM) ? 1 : 0;
}
-
- if ((ret = __db_get_flags(dbp, &flags)) != 0) {
- __db_err(dbenv, "DB->get_flags: %s", db_strerror(ret));
+ if (tmp_int && (ret = callback(handle, "recnum=1\n")) != 0)
goto err;
- }
- if (F_ISSET(dbp, DB_AM_RECNUM))
- if ((ret = callback(handle, "recnum=1\n")) != 0)
+
+ if (using_vdp)
+ tmp_u_int32 = pip->bt_minkey;
+ else
+ if ((ret =
+ __bam_get_bt_minkey(dbp, &tmp_u_int32)) != 0) {
+ __db_err(dbenv, ret, "DB->get_bt_minkey");
goto err;
- if ((ret = __bam_get_bt_minkey(dbp, &tmp_u_int32)) != 0) {
- __db_err(dbenv,
- "DB->get_bt_minkey: %s", db_strerror(ret));
- goto err;
- }
+ }
if (tmp_u_int32 != 0 && tmp_u_int32 != DEFMINKEYPAGE) {
snprintf(buf, buflen,
"bt_minkey=%lu\n", (u_long)tmp_u_int32);
@@ -1354,38 +1346,33 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
#ifdef HAVE_HASH
if ((ret = callback(handle, "type=hash\n")) != 0)
goto err;
- if (using_vdp) {
- if (pip->h_ffactor != 0) {
- snprintf(buf, buflen,
- "h_ffactor=%lu\n", (u_long)pip->h_ffactor);
- if ((ret = callback(handle, buf)) != 0)
- goto err;
- }
- if (pip->h_nelem != 0) {
- snprintf(buf, buflen,
- "h_nelem=%lu\n", (u_long)pip->h_nelem);
- if ((ret = callback(handle, buf)) != 0)
- goto err;
+ if (using_vdp)
+ tmp_u_int32 = pip->h_ffactor;
+ else
+ if ((ret =
+ __ham_get_h_ffactor(dbp, &tmp_u_int32)) != 0) {
+ __db_err(dbenv, ret, "DB->get_h_ffactor");
+ goto err;
}
- break;
- }
- if ((ret = __ham_get_h_ffactor(dbp, &tmp_u_int32)) != 0) {
- __db_err(dbenv,
- "DB->get_h_ffactor: %s", db_strerror(ret));
- goto err;
- }
if (tmp_u_int32 != 0) {
snprintf(buf, buflen,
"h_ffactor=%lu\n", (u_long)tmp_u_int32);
if ((ret = callback(handle, buf)) != 0)
goto err;
}
- if ((ret = __ham_get_h_nelem(dbp, &tmp_u_int32)) != 0) {
- __db_err(dbenv,
- "DB->get_h_nelem: %s", db_strerror(ret));
- goto err;
- }
- if (tmp_u_int32 != 0) {
+
+ if (using_vdp)
+ tmp_u_int32 = pip->h_nelem;
+ else
+ if ((ret = __ham_get_h_nelem(dbp, &tmp_u_int32)) != 0) {
+ __db_err(dbenv, ret, "DB->get_h_nelem");
+ goto err;
+ }
+ /*
+ * Hash databases have an h_nelem field of 0 or 1, neither
+ * of those values is interesting.
+ */
+ if (tmp_u_int32 > 1) {
snprintf(buf, buflen,
"h_nelem=%lu\n", (u_long)tmp_u_int32);
if ((ret = callback(handle, buf)) != 0)
@@ -1400,36 +1387,38 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
#ifdef HAVE_QUEUE
if ((ret = callback(handle, "type=queue\n")) != 0)
goto err;
- if (vdp != NULL) {
- snprintf(buf,
- buflen, "re_len=%lu\n", (u_long)vdp->re_len);
- if ((ret = callback(handle, buf)) != 0)
+ if (using_vdp)
+ tmp_u_int32 = vdp->re_len;
+ else
+ if ((ret = __ram_get_re_len(dbp, &tmp_u_int32)) != 0) {
+ __db_err(dbenv, ret, "DB->get_re_len");
goto err;
- break;
- }
- if ((ret = __ram_get_re_len(dbp, &tmp_u_int32)) != 0) {
- __db_err(dbenv,
- "DB->get_re_len: %s", db_strerror(ret));
- goto err;
- }
+ }
snprintf(buf, buflen, "re_len=%lu\n", (u_long)tmp_u_int32);
if ((ret = callback(handle, buf)) != 0)
goto err;
- if ((ret = __ram_get_re_pad(dbp, &tmp_int)) != 0) {
- __db_err(dbenv,
- "DB->get_re_pad: %s", db_strerror(ret));
- goto err;
- }
+
+ if (using_vdp)
+ tmp_int = (int)vdp->re_pad;
+ else
+ if ((ret = __ram_get_re_pad(dbp, &tmp_int)) != 0) {
+ __db_err(dbenv, ret, "DB->get_re_pad");
+ goto err;
+ }
if (tmp_int != 0 && tmp_int != ' ') {
snprintf(buf, buflen, "re_pad=%#x\n", tmp_int);
if ((ret = callback(handle, buf)) != 0)
goto err;
}
- if ((ret = __qam_get_extentsize(dbp, &tmp_u_int32)) != 0) {
- __db_err(dbenv,
- "DB->get_q_extentsize: %s", db_strerror(ret));
- goto err;
- }
+
+ if (using_vdp)
+ tmp_u_int32 = vdp->page_ext;
+ else
+ if ((ret =
+ __qam_get_extentsize(dbp, &tmp_u_int32)) != 0) {
+ __db_err(dbenv, ret, "DB->get_q_extentsize");
+ goto err;
+ }
if (tmp_u_int32 != 0) {
snprintf(buf, buflen,
"extentsize=%lu\n", (u_long)tmp_u_int32);
@@ -1444,38 +1433,40 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
case DB_RECNO:
if ((ret = callback(handle, "type=recno\n")) != 0)
goto err;
- if (using_vdp) {
- if (F_ISSET(pip, VRFY_IS_RRECNO))
+ if (using_vdp)
+ tmp_int = F_ISSET(pip, VRFY_IS_RRECNO) ? 1 : 0;
+ else
+ tmp_int = F_ISSET(dbp, DB_AM_RENUMBER) ? 1 : 0;
+ if (tmp_int != 0 &&
+ (ret = callback(handle, "renumber=1\n")) != 0)
+ goto err;
+
+ if (using_vdp)
+ tmp_int = F_ISSET(pip, VRFY_IS_FIXEDLEN) ? 1 : 0;
+ else
+ tmp_int = F_ISSET(dbp, DB_AM_FIXEDLEN) ? 1 : 0;
+ if (tmp_int) {
+ if (using_vdp)
+ tmp_u_int32 = pip->re_len;
+ else
if ((ret =
- callback(handle, "renumber=1\n")) != 0)
+ __ram_get_re_len(dbp, &tmp_u_int32)) != 0) {
+ __db_err(dbenv, ret, "DB->get_re_len");
goto err;
- if (pip->re_len > 0) {
- snprintf(buf, buflen,
- "re_len=%lu\n", (u_long)pip->re_len);
- if ((ret = callback(handle, buf)) != 0)
- goto err;
- }
- break;
- }
- if (F_ISSET(dbp, DB_AM_RENUMBER))
- if ((ret = callback(handle, "renumber=1\n")) != 0)
- goto err;
- if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
- if ((ret = __ram_get_re_len(dbp, &tmp_u_int32)) != 0) {
- __db_err(dbenv,
- "DB->get_re_len: %s", db_strerror(ret));
- goto err;
- }
+ }
snprintf(buf, buflen,
"re_len=%lu\n", (u_long)tmp_u_int32);
if ((ret = callback(handle, buf)) != 0)
goto err;
- if ((ret = __ram_get_re_pad(dbp, &tmp_int)) != 0) {
- __db_err(dbenv,
- "DB->get_re_pad: %s", db_strerror(ret));
- goto err;
- }
+ if (using_vdp)
+ tmp_int = (int)pip->re_pad;
+ else
+ if ((ret =
+ __ram_get_re_pad(dbp, &tmp_int)) != 0) {
+ __db_err(dbenv, ret, "DB->get_re_pad");
+ goto err;
+ }
if (tmp_int != 0 && tmp_int != ' ') {
snprintf(buf,
buflen, "re_pad=%#x\n", (u_int)tmp_int);
@@ -1484,22 +1475,27 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
}
}
break;
- case DB_UNKNOWN:
- DB_ASSERT(0); /* Impossible. */
- __db_err(dbenv,
- "Unknown or unsupported DB type in __db_prheader");
- ret = EINVAL;
+ case DB_UNKNOWN: /* Impossible. */
+ ret = __db_unknown_path(dbenv, "__db_prheader");
goto err;
}
if (using_vdp) {
+ if (F_ISSET(pip, VRFY_HAS_CHKSUM))
+ if ((ret = callback(handle, "chksum=1\n")) != 0)
+ goto err;
if (F_ISSET(pip, VRFY_HAS_DUPS))
if ((ret = callback(handle, "duplicates=1\n")) != 0)
goto err;
if (F_ISSET(pip, VRFY_HAS_DUPSORT))
if ((ret = callback(handle, "dupsort=1\n")) != 0)
goto err;
- /* We should handle page size. XXX */
+ /*
+ * !!!
+ * We don't know if the page size was the default if we're
+ * salvaging. It doesn't seem that interesting to have, so
+ * we ignore it for now.
+ */
} else {
if (F_ISSET(dbp, DB_AM_CHKSUM))
if ((ret = callback(handle, "chksum=1\n")) != 0)
diff --git a/db/db/db_rec.c b/db/db/db_rec.c
index bce2b8701..921b9c34a 100644
--- a/db/db/db_rec.c
+++ b/db/db/db_rec.c
@@ -1,29 +1,25 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_rec.c,v 11.61 2004/10/21 14:39:58 bostic Exp $
+ * $Id: db_rec.c,v 12.31 2006/09/19 04:04:49 ubell Exp $
*/
#include "db_config.h"
-#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/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));
+static int __db_pg_free_recover_42_int __P((DB_ENV *,
+ __db_pg_freedata_42_args *,
+ DB *, DB_LSN *, DB_MPOOLFILE *, db_recops, int));
/*
* PUBLIC: int __db_addrem_recover
@@ -45,48 +41,47 @@ __db_addrem_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t change;
- int cmp_n, cmp_p, ret;
+ int cmp_n, cmp_p, modified, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_addrem_print);
- REC_INTRO(__db_addrem_read, 1);
+ REC_INTRO(__db_addrem_read, 1, 1);
REC_FGET(mpf, argp->pgno, &pagep, done);
+ modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
- change = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_ADD_DUP) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == DB_REM_DUP)) {
-
/* Need to redo an add, or undo a delete. */
+ REC_DIRTY(mpf, &pagep);
if ((ret = __db_pitem(dbc, pagep, argp->indx, argp->nbytes,
argp->hdr.size == 0 ? NULL : &argp->hdr,
argp->dbt.size == 0 ? NULL : &argp->dbt)) != 0)
goto out;
-
- change = DB_MPOOL_DIRTY;
+ modified = 1;
} else if ((cmp_n == 0 && DB_UNDO(op) && argp->opcode == DB_ADD_DUP) ||
(cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_REM_DUP)) {
/* Need to undo an add, or redo a delete. */
+ REC_DIRTY(mpf, &pagep);
if ((ret = __db_ditem(dbc,
pagep, argp->indx, argp->nbytes)) != 0)
goto out;
- change = DB_MPOOL_DIRTY;
+ modified = 1;
}
- if (change) {
+ if (modified) {
if (DB_REDO(op))
LSN(pagep) = *lsnp;
else
LSN(pagep) = argp->pagelsn;
}
- if ((ret = __memp_fput(mpf, pagep, change)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -115,15 +110,15 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t change;
- int cmp_n, cmp_p, ret;
+ int cmp_n, cmp_p, modified, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_big_print);
- REC_INTRO(__db_big_read, 1);
+ REC_INTRO(__db_big_read, 1, 0);
REC_FGET(mpf, argp->pgno, &pagep, ppage);
+ modified = 0;
/*
* There are three pages we need to check. The one on which we are
@@ -131,13 +126,13 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
* been updated, and the next one whose prev_pointer may have
* been updated.
*/
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
- change = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_ADD_BIG) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == DB_REM_BIG)) {
/* We are either redo-ing an add, or undoing a delete. */
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, file_dbp->pgsize, argp->pgno, argp->prev_pgno,
argp->next_pgno, 0, P_OVERFLOW);
OV_LEN(pagep) = argp->dbt.size;
@@ -145,7 +140,7 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
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;
+ modified = 1;
} else if ((cmp_n == 0 && DB_UNDO(op) && argp->opcode == DB_ADD_BIG) ||
(cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_REM_BIG)) {
/*
@@ -153,14 +148,16 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
* The page is about to be reclaimed in either case, so
* there really isn't anything to do here.
*/
- change = DB_MPOOL_DIRTY;
+ REC_DIRTY(mpf, &pagep);
+ modified = 1;
}
- if (change)
+ if (modified)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
- if ((ret = __memp_fput(mpf, pagep, change)) != 0)
- goto out;
+ ret = __memp_fput(mpf, pagep, 0);
pagep = NULL;
+ if (ret != 0)
+ goto out;
/*
* We only delete a whole chain of overflow.
@@ -171,48 +168,56 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
/* Now check the previous page. */
ppage: if (argp->prev_pgno != PGNO_INVALID) {
- change = 0;
REC_FGET(mpf, argp->prev_pgno, &pagep, npage);
+ modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->prevlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->prevlsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->prevlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->prevlsn);
if (cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_ADD_BIG) {
/* Redo add, undo delete. */
+ REC_DIRTY(mpf, &pagep);
NEXT_PGNO(pagep) = argp->pgno;
- change = DB_MPOOL_DIRTY;
+ modified = 1;
} else if (cmp_n == 0 &&
DB_UNDO(op) && argp->opcode == DB_ADD_BIG) {
/* Redo delete, undo add. */
+ REC_DIRTY(mpf, &pagep);
NEXT_PGNO(pagep) = argp->next_pgno;
- change = DB_MPOOL_DIRTY;
+ modified = 1;
}
- if (change)
+ if (modified)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->prevlsn;
- if ((ret = __memp_fput(mpf, pagep, change)) != 0)
+ ret = __memp_fput(mpf, pagep, 0);
+ pagep = NULL;
+ if (ret != 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;
REC_FGET(mpf, argp->next_pgno, &pagep, done);
+ modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->nextlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->nextlsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->nextlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->nextlsn);
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
PREV_PGNO(pagep) = PGNO_INVALID;
- change = DB_MPOOL_DIRTY;
+ modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
+ REC_DIRTY(mpf, &pagep);
PREV_PGNO(pagep) = argp->pgno;
- change = DB_MPOOL_DIRTY;
+ modified = 1;
}
- if (change)
+ if (modified)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->nextlsn;
- if ((ret = __memp_fput(mpf, pagep, change)) != 0)
+ ret = __memp_fput(mpf, pagep, 0);
+ pagep = NULL;
+ if (ret != 0)
goto out;
}
pagep = NULL;
@@ -245,32 +250,31 @@ __db_ovref_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp, modified, ret;
+ int cmp, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_ovref_print);
- REC_INTRO(__db_ovref_read, 1);
+ REC_INTRO(__db_ovref_read, 1, 0);
REC_FGET(mpf, argp->pgno, &pagep, done);
- modified = 0;
- cmp = log_compare(&LSN(pagep), &argp->lsn);
- CHECK_LSN(op, cmp, &LSN(pagep), &argp->lsn);
+ cmp = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp, &LSN(pagep), &argp->lsn);
if (cmp == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
OV_REF(pagep) += argp->adjust;
-
pagep->lsn = *lsnp;
- modified = 1;
- } else if (log_compare(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
+ } else if (LOG_COMPARE(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
OV_REF(pagep) -= argp->adjust;
-
pagep->lsn = argp->lsn;
- modified = 1;
}
- if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ ret = __memp_fput(mpf, pagep, 0);
+ pagep = NULL;
+ if (ret != 0)
goto out;
pagep = NULL;
@@ -333,28 +337,26 @@ __db_noop_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- 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);
+ REC_INTRO(__db_noop_read, 0, 0);
REC_FGET(mpf, argp->pgno, &pagep, done);
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->prevlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->prevlsn);
- change = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->prevlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->prevlsn);
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
LSN(pagep) = *lsnp;
- change = DB_MPOOL_DIRTY;
} else if (cmp_n == 0 && DB_UNDO(op)) {
+ REC_DIRTY(mpf, &pagep);
LSN(pagep) = argp->prevlsn;
- change = DB_MPOOL_DIRTY;
}
- ret = __memp_fput(mpf, pagep, change);
+ ret = __memp_fput(mpf, pagep, 0);
pagep = NULL;
done: *lsnp = argp->prev_lsn;
@@ -385,13 +387,13 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
PAGE *pagep;
db_pgno_t pgno;
- int cmp_n, cmp_p, created, level, meta_modified, modified, ret;
+ int cmp_n, cmp_p, created, level, ret;
meta = NULL;
pagep = NULL;
- created = meta_modified = modified = 0;
+ created = 0;
REC_PRINT(__db_pg_alloc_print);
- REC_INTRO(__db_pg_alloc_read, 0);
+ REC_INTRO(__db_pg_alloc_read, 0, 0);
/*
* Fix up the metadata page. If we're redoing the operation, we have
@@ -400,7 +402,8 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
* it on the freelist.
*/
pgno = PGNO_BASE_MD;
- if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, NULL,
+ 0, &meta)) != 0) {
/* The metadata page must always exist on redo. */
if (DB_REDO(op)) {
ret = __db_pgerr(file_dbp, pgno, ret);
@@ -408,18 +411,19 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
} else
goto done;
}
- 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);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(meta));
+ cmp_p = LOG_COMPARE(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(meta), &argp->meta_lsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &meta);
LSN(meta) = *lsnp;
meta->free = argp->next;
- meta_modified = 1;
if (argp->pgno > meta->last_pgno)
meta->last_pgno = argp->pgno;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &meta);
LSN(meta) = argp->meta_lsn;
/*
* If the page has a zero LSN then its newly created
@@ -436,9 +440,31 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
*/
meta->last_pgno = argp->last_pgno;
#endif
- meta_modified = 1;
}
+#ifdef HAVE_FTRUNCATE
+ /*
+ * Check to see if we are keeping a sorted
+ * freelist, if so put this back in the in
+ * memory list. It must be the first element.
+ */
+ if (op == DB_TXN_ABORT && !IS_ZERO_LSN(argp->page_lsn)) {
+ db_pgno_t *list;
+ u_int32_t nelem;
+
+ if ((ret = __memp_get_freelist(mpf, &nelem, &list)) != 0)
+ goto out;
+ if (list != NULL) {
+ if ((ret =
+ __memp_extend_freelist(mpf, nelem + 1, &list)) != 0)
+ goto out;
+ if (nelem != 0)
+ memmove(list + 1, list, nelem * sizeof(list));
+ *list = argp->pgno;
+ }
+ }
+#endif
+
/*
* Fix up the allocated page. If the page does not exist
* and we can truncate it then don't create it.
@@ -447,7 +473,8 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
* LSN. If we're undoing the operation, we have to reset the page's
* LSN and put it on the free list, or into limbo..
*/
- if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ 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
@@ -460,19 +487,19 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
if (DB_UNDO(op))
goto do_truncate;
#endif
- if ((ret = __memp_fget(
- mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ DB_MPOOL_CREATE, &pagep)) != 0) {
if (DB_UNDO(op) && ret == ENOSPC)
goto do_truncate;
ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
- created = modified = 1;
+ created = 1;
}
/* Fix up the allocated page. */
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->page_lsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->page_lsn);
/*
* If an initial allocation is aborted and then reallocated during
@@ -485,7 +512,7 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
(IS_ZERO_LSN(argp->page_lsn) && IS_INIT_LSN(LSN(pagep))))
cmp_p = 0;
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->page_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->page_lsn);
/*
* 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
@@ -494,6 +521,7 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
*/
if (DB_REDO(op) && cmp_p == 0) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
switch (argp->ptype) {
case P_LBTREE:
case P_LRECNO:
@@ -508,7 +536,6 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
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
@@ -516,11 +543,11 @@ __db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
* Undo the allocation, reinitialize the page and
* link its next pointer to the free list.
*/
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, file_dbp->pgsize,
argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
pagep->lsn = argp->page_lsn;
- modified = 1;
}
do_truncate:
@@ -538,11 +565,11 @@ do_truncate:
__memp_fput(mpf, pagep, DB_MPOOL_DISCARD)) != 0)
goto out;
pagep = NULL;
- /* Give the page back to the OS. */
- if (meta->last_pgno <= argp->pgno &&
- (ret = __memp_ftruncate(mpf, argp->pgno, 0)) != 0)
- goto out;
}
+ /* Give the page back to the OS. */
+ if (meta->last_pgno <= argp->pgno && (ret =
+ __memp_ftruncate(mpf, argp->pgno, MP_TRUNC_RECOVER)) != 0)
+ goto out;
#else
/* Put the page in limbo.*/
if ((ret = __db_add_limbo(dbenv,
@@ -550,22 +577,23 @@ do_truncate:
goto out;
/* The last_pgno grows if this was a new page. */
if (argp->pgno > meta->last_pgno) {
+ REC_DIRTY(mpf, &meta);
meta->last_pgno = argp->pgno;
- meta_modified = 1;
}
#endif
}
- if (pagep != NULL &&
- (ret = __memp_fput(mpf,
- pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
- goto out;
- pagep = NULL;
+ if (pagep != NULL) {
+ ret = __memp_fput(mpf, pagep, 0);
+ pagep = NULL;
+ if (ret != 0)
+ goto out;
+ }
- if ((ret = __memp_fput(mpf,
- meta, meta_modified ? DB_MPOOL_DIRTY : 0)) != 0)
- goto out;
+ ret = __memp_fput(mpf, meta, 0);
meta = NULL;
+ if (ret != 0)
+ goto out;
done: *lsnp = argp->prev_lsn;
ret = 0;
@@ -594,32 +622,36 @@ __db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, data)
{
DBMETA *meta;
DB_LSN copy_lsn;
- PAGE *pagep;
- db_pgno_t pgno;
- int cmp_n, cmp_p, meta_modified, modified, ret;
+ PAGE *pagep, *prevp;
+ int cmp_n, cmp_p, is_meta, ret;
meta = NULL;
pagep = NULL;
- meta_modified = modified = 0;
+ prevp = NULL;
/*
- * Get the metapage first so we can see where we are.
+ * Get the "metapage". This will either be the metapage
+ * or the previous page in the free list if we are doing
+ * sorted allocations. If its a previous page then
+ * we will not be truncating.
*/
- 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;
- }
- 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);
+ is_meta = argp->meta_pgno == PGNO_BASE_MD;
+
+ REC_FGET(mpf, argp->meta_pgno, &meta, check_meta);
+
+ if (argp->meta_pgno != PGNO_BASE_MD)
+ prevp = (PAGE *)meta;
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(meta));
+ cmp_p = LOG_COMPARE(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(meta), &argp->meta_lsn);
/*
* Fix up the metadata page. If we're redoing or undoing the operation
* we get the page and update its LSN, last and free pointer.
*/
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &meta);
#ifdef HAVE_FTRUNCATE
/*
* If we are at the end of the file truncate, otherwise
@@ -627,28 +659,42 @@ __db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, data)
*/
if (argp->pgno == argp->last_pgno)
meta->last_pgno = argp->pgno - 1;
- else
+ else if (prevp == NULL)
meta->free = argp->pgno;
+ else
+ NEXT_PGNO(prevp) = argp->pgno;
#else
/* Need to redo the deallocation. */
- meta->free = argp->pgno;
+ if (prevp == NULL)
+ meta->free = argp->pgno;
+ else
+ NEXT_PGNO(prevp) = 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)
+ if (prevp == NULL && meta->last_pgno < meta->free)
meta->last_pgno = meta->free;
#endif
LSN(meta) = *lsnp;
- meta_modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo the deallocation. */
- meta->free = argp->next;
+ REC_DIRTY(mpf, &meta);
+ if (prevp == NULL)
+ meta->free = argp->next;
+ else
+ NEXT_PGNO(prevp) = argp->next;
LSN(meta) = argp->meta_lsn;
- if (meta->last_pgno < argp->pgno)
+ if (prevp == NULL && meta->last_pgno < argp->pgno)
meta->last_pgno = argp->pgno;
- meta_modified = 1;
+ }
+
+check_meta:
+ if (ret != 0 && is_meta) {
+ /* The metadata page must always exist. */
+ ret = __db_pgerr(file_dbp, argp->meta_pgno, ret);
+ goto out;
}
/*
@@ -661,21 +707,25 @@ __db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, data)
* and roll it back.
*/
#ifdef HAVE_FTRUNCATE
- if (DB_REDO(op) || meta->last_pgno < argp->pgno) {
- if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
- if (ret == DB_PAGE_NOTFOUND)
- goto done;
- goto out;
+ if (DB_REDO(op) || (is_meta && meta->last_pgno < argp->pgno)) {
+ if ((ret =
+ __memp_fget(mpf, &argp->pgno, NULL, 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND)
+ goto out;
+ if (is_meta &&
+ DB_REDO(op) && meta->last_pgno <= argp->pgno)
+ goto trunc;
+ goto done;
}
} else
#endif
if ((ret =
- __memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ __memp_fget(mpf, &argp->pgno, NULL, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
(void)__ua_memcpy(&copy_lsn, &LSN(argp->header.data), sizeof(DB_LSN));
- cmp_n = IS_ZERO_LSN(LSN(pagep)) ? 0 : log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &copy_lsn);
+ cmp_n = IS_ZERO_LSN(LSN(pagep)) ? 0 : LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &copy_lsn);
#ifdef HAVE_FTRUNCATE
/*
@@ -687,54 +737,87 @@ __db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, data)
cmp_p = 0;
#endif
- CHECK_LSN(op, cmp_p, &LSN(pagep), &copy_lsn);
+ CHECK_LSN(dbenv, 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))) {
+ LOG_COMPARE(&LSN(pagep), &argp->meta_lsn) <= 0))) {
/* Need to redo the deallocation. */
#ifdef HAVE_FTRUNCATE
- if (meta->last_pgno <= argp->pgno) {
+ /*
+ * The page can be truncated if it was truncated at runtime
+ * and the current metapage reflects the truncation.
+ */
+ if (is_meta && meta->last_pgno <= argp->pgno &&
+ argp->last_pgno <= argp->pgno) {
if ((ret =
__memp_fput(mpf, pagep, DB_MPOOL_DISCARD)) != 0)
goto out;
pagep = NULL;
- if ((ret = __memp_ftruncate(mpf, argp->pgno, 0)) != 0)
+trunc: if ((ret = __memp_ftruncate(mpf,
+ argp->pgno, MP_TRUNC_RECOVER)) != 0)
goto out;
} else if (argp->last_pgno == argp->pgno) {
/* The page was truncated at runtime, zero it out. */
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, 0, PGNO_INVALID,
PGNO_INVALID, PGNO_INVALID, 0, P_INVALID);
ZERO_LSN(pagep->lsn);
- modified = 1;
} else
#endif
{
+ REC_DIRTY(mpf, &pagep);
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 reallocate the page. */
+ REC_DIRTY(mpf, &pagep);
memcpy(pagep, argp->header.data, argp->header.size);
if (data)
- memcpy((u_int8_t*)pagep + pagep->hf_offset,
+ memcpy((u_int8_t*)pagep + HOFFSET(pagep),
argp->data.data, argp->data.size);
-
- modified = 1;
}
- if (pagep != NULL &&
- (ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if (pagep != NULL && (ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
#ifdef HAVE_FTRUNCATE
+ /*
+ * If we are keeping an in memory free list remove this
+ * element from the list.
+ */
+ if (op == DB_TXN_ABORT && argp->pgno != argp->last_pgno) {
+ db_pgno_t *lp;
+ u_int32_t nelem, pos;
+
+ if ((ret = __memp_get_freelist(mpf, &nelem, &lp)) != 0)
+ goto out;
+ if (lp != NULL) {
+ pos = 0;
+ if (!is_meta && nelem != 0) {
+ __db_freelist_pos(argp->pgno, lp, nelem, &pos);
+
+ DB_ASSERT(dbenv, argp->pgno == lp[pos]);
+ DB_ASSERT(dbenv,
+ argp->meta_pgno == lp[pos - 1]);
+ }
+
+ if (nelem != 0 && pos != nelem)
+ memmove(&lp[pos], &lp[pos + 1],
+ (nelem - pos) * sizeof(*lp));
+
+ /* Shrink the list */
+ if ((ret =
+ __memp_extend_freelist(mpf, nelem - 1, &lp)) != 0)
+ goto out;
+ }
+ }
done:
#endif
- if ((ret = __memp_fput(mpf,
- meta, meta_modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if (meta != NULL && (ret = __memp_fput(mpf, meta, 0)) != 0)
goto out;
meta = NULL;
@@ -771,7 +854,7 @@ __db_pg_free_recover(dbenv, dbtp, lsnp, op, info)
COMPQUIET(info, NULL);
REC_PRINT(__db_pg_free_print);
- REC_INTRO(__db_pg_free_read, 1);
+ REC_INTRO(__db_pg_free_read, 1, 0);
ret = __db_pg_free_recover_int(dbenv,
(__db_pg_freedata_args *)argp, file_dbp, lsnp, mpf, op, 0);
@@ -799,19 +882,36 @@ __db_pg_new_recover(dbenv, dbtp, lsnp, op, info)
{
#ifndef HAVE_FTRUNCATE
DB *file_dbp;
+ DBMETA *meta;
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, DB_TXN_ABORT);
+ REC_INTRO(__db_pg_free_read, 1, 0);
+
+ REC_FGET(mpf, argp->meta_pgno, &meta, done);
+ if (DB_UNDO(op)) {
+ if (LOG_COMPARE(lsnp, &LSN(meta)) == 0) {
+ meta->lsn = argp->meta_lsn;
+ REC_DIRTY(mpf, &meta);
+ }
+
+ } else if (DB_REDO(op)) {
+ if (LOG_COMPARE(&argp->meta_lsn, &LSN(meta)) == 0) {
+ meta->lsn = *lsnp;
+ REC_DIRTY(mpf, &meta);
+ }
+ }
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto out;
if ((ret =
__db_add_limbo(dbenv, info, argp->fileid, argp->pgno, 1)) == 0)
*lsnp = argp->prev_lsn;
+
done:
out:
REC_CLOSE;
@@ -848,7 +948,7 @@ __db_pg_freedata_recover(dbenv, dbtp, lsnp, op, info)
COMPQUIET(info, NULL);
REC_PRINT(__db_pg_freedata_print);
- REC_INTRO(__db_pg_freedata_read, 1);
+ REC_INTRO(__db_pg_freedata_read, 1, 0);
ret = __db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, 1);
@@ -892,7 +992,7 @@ __db_cksum_recover(dbenv, dbtp, lsnp, op, info)
if (F_ISSET(dbenv, DB_ENV_FATAL))
ret = 0;
else {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Checksum failure requires catastrophic recovery");
ret = __db_panic(dbenv, DB_RUNRECOVERY);
}
@@ -925,7 +1025,7 @@ __db_pg_prepare_recover(dbenv, dbtp, lsnp, op, info)
int ret, t_ret;
REC_PRINT(__db_pg_prepare_print);
- REC_INTRO(__db_pg_prepare_read, 1);
+ REC_INTRO(__db_pg_prepare_read, 1, 0);
mpf = file_dbp->mpf;
@@ -946,15 +1046,14 @@ __db_pg_prepare_recover(dbenv, dbtp, lsnp, op, info)
* this transaction which we will roll back.
*/
if (op == DB_TXN_ABORT) {
- if ((ret = __memp_fget(
- mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &argp->pgno,
+ NULL, DB_MPOOL_CREATE | DB_MPOOL_EDIT, &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)
+ if ((t_ret = __memp_fput(mpf, pagep, 0)) != 0 && ret == 0)
ret = t_ret;
}
@@ -974,7 +1073,7 @@ out: REC_CLOSE;
/*
* __db_pg_init_recover --
- * Recovery function to reinit pages for truncate.
+ * Recovery function to reinit pages after truncation.
*
* PUBLIC: int __db_pg_init_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -993,39 +1092,729 @@ __db_pg_init_recover(dbenv, dbtp, lsnp, op, info)
DB_LSN copy_lsn;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret, type;
COMPQUIET(info, NULL);
REC_PRINT(__db_pg_init_print);
- REC_INTRO(__db_pg_init_read, 1);
+ REC_INTRO(__db_pg_init_read, 1, 0);
mpf = file_dbp->mpf;
- REC_FGET(mpf, argp->pgno, &pagep, done);
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL, 0, &pagep)) != 0) {
+ if (DB_UNDO(op)) {
+ if (ret == DB_PAGE_NOTFOUND)
+ goto done;
+ else {
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ goto out;
+ }
+ }
+
+ /*
+ * This page was truncated and may simply not have
+ * had an item written to it yet. This should only
+ * happen on hash databases, so confirm that.
+ */
+ DB_ASSERT(dbenv, file_dbp->type == DB_HASH);
+ if ((ret = __memp_fget(mpf,
+ &argp->pgno, NULL, DB_MPOOL_CREATE, &pagep)) != 0) {
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ 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);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &copy_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &copy_lsn);
if (cmp_p == 0 && DB_REDO(op)) {
+ if (TYPE(pagep) == P_HASH)
+ type = P_HASH;
+ else
+ type = file_dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE;
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, file_dbp->pgsize, PGNO(pagep), PGNO_INVALID,
- PGNO_INVALID, TYPE(pagep) == P_HASH ? 0 : 1, TYPE(pagep));
+ PGNO_INVALID, TYPE(pagep) == P_HASH ? 0 : 1, type);
pagep->lsn = *lsnp;
- modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Put the data back on the page. */
+ REC_DIRTY(mpf, &pagep);
memcpy(pagep, argp->header.data, argp->header.size);
if (argp->data.size > 0)
- memcpy((u_int8_t*)pagep + pagep->hf_offset,
+ memcpy((u_int8_t*)pagep + HOFFSET(pagep),
argp->data.data, argp->data.size);
+ }
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
- modified = 1;
+done: *lsnp = argp->prev_lsn;
+out:
+ REC_CLOSE;
+}
+
+/*
+ * __db_pg_sort_recover --
+ * Recovery function for pg_sort.
+ *
+ * PUBLIC: int __db_pg_sort_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_sort_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+#ifdef HAVE_FTRUNCATE
+ __db_pg_sort_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DBMETA *meta;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ db_pgno_t pgno, *list;
+ u_int32_t felem, nelem;
+ struct pglist *pglist, *lp;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__db_pg_sort_print);
+ REC_INTRO(__db_pg_sort_read, 1, 1);
+
+ pglist = (struct pglist *) argp->list.data;
+ nelem = argp->list.size / sizeof(struct pglist);
+ if (DB_REDO(op)) {
+ pgno = argp->last_pgno;
+ if ((ret = __db_pg_truncate(mpf, NULL,
+ pglist, NULL, &nelem, &pgno, lsnp, 1)) != 0)
+ goto out;
+
+ if (argp->last_free != PGNO_INVALID) {
+ if ((ret = __memp_fget(mpf, &argp->last_free, NULL,
+ 0, &meta)) == 0) {
+ if (LOG_COMPARE(&LSN(meta),
+ &argp->last_lsn) == 0) {
+ REC_DIRTY(mpf, &meta);
+ NEXT_PGNO(meta) = PGNO_INVALID;
+ LSN(meta) = *lsnp;
+ }
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto out;
+ meta = NULL;
+ } else if (ret != DB_PAGE_NOTFOUND)
+ goto out;
+ }
+ if ((ret = __memp_fget(mpf, &argp->meta, NULL,
+ 0, &meta)) != 0)
+ goto out;
+ if (LOG_COMPARE(&LSN(meta), &argp->meta_lsn) == 0) {
+ REC_DIRTY(mpf, &meta);
+ if (argp->last_free == PGNO_INVALID) {
+ if (nelem == 0)
+ meta->free = PGNO_INVALID;
+ else
+ meta->free = pglist->pgno;
+ }
+ meta->last_pgno = pgno;
+ LSN(meta) = *lsnp;
+ }
+ } else {
+ /* Put the free list back in its original order. */
+ for (lp = pglist; lp < &pglist[nelem]; lp++) {
+ if ((ret = __memp_fget(mpf, &lp->pgno, NULL,
+ DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ if (IS_ZERO_LSN(LSN(pagep)) ||
+ LOG_COMPARE(&LSN(pagep), lsnp) == 0) {
+ REC_DIRTY(mpf, &pagep);
+ if (lp == &pglist[nelem - 1])
+ pgno = PGNO_INVALID;
+ else
+ pgno = lp[1].pgno;
+
+ P_INIT(pagep, file_dbp->pgsize,
+ lp->pgno, PGNO_INVALID, pgno, 0, P_INVALID);
+ LSN(pagep) = lp->lsn;
+ }
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ }
+ if (argp->last_free != PGNO_INVALID) {
+ if ((ret = __memp_fget(mpf, &argp->last_free, NULL,
+ DB_MPOOL_EDIT, &meta)) == 0) {
+ if (LOG_COMPARE(&LSN(meta), lsnp) == 0) {
+ REC_DIRTY(mpf, &pagep);
+ NEXT_PGNO(meta) = pglist->pgno;
+ LSN(meta) = argp->last_lsn;
+ }
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto out;
+ } else if (ret != DB_PAGE_NOTFOUND)
+ goto out;
+ meta = NULL;
+ }
+ if ((ret = __memp_fget(mpf, &argp->meta,
+ NULL, DB_MPOOL_EDIT, &meta)) != 0)
+ goto out;
+ if (LOG_COMPARE(&LSN(meta), lsnp) == 0) {
+ REC_DIRTY(mpf, &meta);
+ meta->last_pgno = argp->last_pgno;
+ if (argp->last_free == PGNO_INVALID)
+ meta->free = pglist->pgno;
+ LSN(meta) = argp->meta_lsn;
+ }
+ }
+ if (op == DB_TXN_ABORT) {
+ if ((ret = __memp_get_freelist(mpf, &felem, &list)) != 0)
+ goto out;
+ if (list != NULL) {
+ DB_ASSERT(dbenv, felem == 0 ||
+ argp->last_free == list[felem - 1]);
+ if ((ret = __memp_extend_freelist(
+ mpf, felem + nelem, &list)) != 0)
+ goto out;
+ for (lp = pglist; lp < &pglist[nelem]; lp++)
+ list[felem++] = lp->pgno;
+ }
+ }
+
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto out;
+
+done: *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+#else
+ /*
+ * If HAVE_FTRUNCATE is not defined, we'll never see pg_sort records
+ * to recover.
+ */
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dbtp, NULL);
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(op, DB_TXN_ABORT);
+ COMPQUIET(info, NULL);
+ return (EINVAL);
+#endif
+}
+
+/*
+ * __db_pg_alloc_42_recover --
+ * Recovery function for pg_alloc.
+ *
+ * PUBLIC: int __db_pg_alloc_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_alloc_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_alloc_42_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, ret;
+
+ meta = NULL;
+ pagep = NULL;
+ created = 0;
+ REC_PRINT(__db_pg_alloc_42_print);
+ REC_INTRO(__db_pg_alloc_42_read, 0, 0);
+
+ /*
+ * 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, NULL, 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;
+ }
+ cmp_n = LOG_COMPARE(lsnp, &LSN(meta));
+ cmp_p = LOG_COMPARE(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(meta), &argp->meta_lsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo update described. */
+ REC_DIRTY(mpf, &meta);
+ LSN(meta) = *lsnp;
+ meta->free = argp->next;
+ if (argp->pgno > meta->last_pgno)
+ meta->last_pgno = argp->pgno;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Need to undo update described. */
+ REC_DIRTY(mpf, &meta);
+ LSN(meta) = argp->meta_lsn;
+ /*
+ * If the page has a zero LSN then its newly created
+ * and will be truncated or go into limbo rather than
+ * directly on the free list.
+ */
+ if (!IS_ZERO_LSN(argp->page_lsn))
+ meta->free = argp->pgno;
+ }
+
+ /*
+ * Fix up the allocated page. If the page does not exist
+ * and we can truncate it then don't create it.
+ * Otherwise 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, or into limbo..
+ */
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL, 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, NULL, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if (DB_UNDO(op) && ret == ENOSPC)
+ goto do_truncate;
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ goto out;
+ }
+ created = 1;
+ }
+
+ /* Fix up the allocated page. */
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->page_lsn);
+
+ /*
+ * If an initial 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 we we rolled back this allocation previously during an
+ * archive restore, the page may have INIT_LSN from the limbo list.
+ */
+ if (IS_ZERO_LSN(LSN(pagep)) ||
+ (IS_ZERO_LSN(argp->page_lsn) && IS_INIT_LSN(LSN(pagep))))
+ cmp_p = 0;
+
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->page_lsn);
+ /*
+ * 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) {
+ /* Need to redo update described. */
+ switch (argp->ptype) {
+ case P_LBTREE:
+ case P_LRECNO:
+ case P_LDUP:
+ level = LEAFLEVEL;
+ break;
+ default:
+ level = 0;
+ break;
+ }
+ REC_DIRTY(mpf, &pagep);
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, PGNO_INVALID, level, argp->ptype);
+
+ pagep->lsn = *lsnp;
+ } 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.
+ */
+ REC_DIRTY(mpf, &pagep);
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
+
+ pagep->lsn = argp->page_lsn;
}
- if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+
+do_truncate:
+ /*
+ * If the page was newly created, give it back, if
+ * possible. Otherwise put it into limbo.
+ */
+ if ((pagep == NULL || 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;
+ /* The last_pgno grows if this was a new page. */
+ if (argp->pgno > meta->last_pgno) {
+ REC_DIRTY(mpf, &meta);
+ meta->last_pgno = argp->pgno;
+ }
+ }
+
+ if (pagep != NULL && (ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+ if ((ret = __memp_fput(mpf, meta, 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_42_int --
+ */
+static int
+__db_pg_free_recover_42_int(dbenv, argp, file_dbp, lsnp, mpf, op, data)
+ DB_ENV *dbenv;
+ __db_pg_freedata_42_args *argp;
+ DB *file_dbp;
+ DB_LSN *lsnp;
+ DB_MPOOLFILE *mpf;
+ db_recops op;
+ int data;
+{
+ DBMETA *meta;
+ DB_LSN copy_lsn;
+ PAGE *pagep, *prevp;
+ int cmp_n, cmp_p, is_meta, ret;
+
+ meta = NULL;
+ pagep = NULL;
+ prevp = NULL;
+
+ /*
+ * Get the "metapage". This will either be the metapage
+ * or the previous page in the free list if we are doing
+ * sorted allocations. If its a previous page then
+ * we will not be truncating.
+ */
+ is_meta = argp->meta_pgno == PGNO_BASE_MD;
+
+ REC_FGET(mpf, argp->meta_pgno, &meta, check_meta);
+
+ if (argp->meta_pgno != PGNO_BASE_MD)
+ prevp = (PAGE *)meta;
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(meta));
+ cmp_p = LOG_COMPARE(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(meta), &argp->meta_lsn);
+
+ /*
+ * Fix up the metadata page. If we're redoing or undoing the operation
+ * we get the page and update its LSN, last and free pointer.
+ */
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo the deallocation. */
+ REC_DIRTY(mpf, &meta);
+ if (prevp == NULL)
+ meta->free = argp->pgno;
+ else
+ NEXT_PGNO(prevp) = 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 (prevp == NULL && meta->last_pgno < meta->free)
+ meta->last_pgno = meta->free;
+ LSN(meta) = *lsnp;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Need to undo the deallocation. */
+ REC_DIRTY(mpf, &meta);
+ if (prevp == NULL)
+ meta->free = argp->next;
+ else
+ NEXT_PGNO(prevp) = argp->next;
+ LSN(meta) = argp->meta_lsn;
+ if (prevp == NULL && meta->last_pgno < argp->pgno)
+ meta->last_pgno = argp->pgno;
+ }
+
+check_meta:
+ if (ret != 0 && is_meta) {
+ /* The metadata page must always exist. */
+ ret = __db_pgerr(file_dbp, argp->meta_pgno, ret);
+ goto out;
+ }
+
+ /*
+ * Get the freed page. If we support truncate then don't
+ * create the page if we are going to free it. 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.
+ * If we don't support truncate, then we must create the page
+ * and roll it back.
+ */
+ if ((ret =
+ __memp_fget(mpf, &argp->pgno, NULL, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+
+ (void)__ua_memcpy(&copy_lsn, &LSN(argp->header.data), sizeof(DB_LSN));
+ cmp_n = IS_ZERO_LSN(LSN(pagep)) ? 0 : LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &copy_lsn);
+
+ CHECK_LSN(dbenv, 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 the deallocation. */
+ REC_DIRTY(mpf, &pagep);
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
+ pagep->lsn = *lsnp;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Need to reallocate the page. */
+ REC_DIRTY(mpf, &pagep);
+ memcpy(pagep, argp->header.data, argp->header.size);
+ if (data)
+ memcpy((u_int8_t*)pagep + HOFFSET(pagep),
+ argp->data.data, argp->data.size);
+ }
+ if (pagep != NULL && (ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+
+ pagep = NULL;
+ if (meta != NULL && (ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto out;
+ meta = NULL;
+
+ 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_42_recover --
+ * Recovery function for pg_free.
+ *
+ * PUBLIC: int __db_pg_free_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_free_42_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_42_args *argp;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__db_pg_free_42_print);
+ REC_INTRO(__db_pg_free_42_read, 1, 0);
+
+ ret = __db_pg_free_recover_42_int(dbenv,
+ (__db_pg_freedata_42_args *)argp, file_dbp, lsnp, mpf, op, 0);
+
+done: *lsnp = argp->prev_lsn;
+out:
+ REC_CLOSE;
+}
+
+/*
+ * __db_pg_freedata_42_recover --
+ * Recovery function for pg_freedata.
+ *
+ * PUBLIC: int __db_pg_freedata_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_freedata_42_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_42_args *argp;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__db_pg_freedata_42_print);
+ REC_INTRO(__db_pg_freedata_42_read, 1, 0);
+
+ ret = __db_pg_free_recover_42_int(
+ dbenv, argp, file_dbp, lsnp, mpf, op, 1);
done: *lsnp = argp->prev_lsn;
out:
REC_CLOSE;
}
+
+/*
+ * __db_relink_42_recover --
+ * Recovery function for relink.
+ *
+ * PUBLIC: int __db_relink_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_relink_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_relink_42_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ pagep = NULL;
+ COMPQUIET(info, NULL);
+ REC_PRINT(__db_relink_42_print);
+ REC_INTRO(__db_relink_42_read, 1, 0);
+
+ /*
+ * There are up to three pages we need to check -- the page, and the
+ * previous and next pages, if they existed. For a page add operation,
+ * 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, NULL, 0, &pagep)) != 0) {
+ if (DB_REDO(op)) {
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ goto out;
+ }
+ goto next2;
+ }
+ if (argp->opcode == DB_ADD_PAGE_COMPAT)
+ goto next1;
+
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Redo the relink. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->lsn = *lsnp;
+ } else if (LOG_COMPARE(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
+ /* Undo the relink. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->next_pgno = argp->next;
+ pagep->prev_pgno = argp->prev;
+ pagep->lsn = argp->lsn;
+ }
+next1: if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+next2: if ((ret = __memp_fget(mpf, &argp->next, NULL, 0, &pagep)) != 0) {
+ if (DB_REDO(op)) {
+ ret = __db_pgerr(file_dbp, argp->next, ret);
+ goto out;
+ }
+ goto prev;
+ }
+ modified = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn_next);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn_next);
+ if ((argp->opcode == DB_REM_PAGE_COMPAT && cmp_p == 0 && DB_REDO(op)) ||
+ (argp->opcode == DB_ADD_PAGE_COMPAT && cmp_n == 0 && DB_UNDO(op))) {
+ /* Redo the remove or undo the add. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->prev_pgno = argp->prev;
+ modified = 1;
+ } else if ((argp->opcode == DB_REM_PAGE_COMPAT &&
+ cmp_n == 0 && DB_UNDO(op)) ||
+ (argp->opcode == DB_ADD_PAGE_COMPAT && cmp_p == 0 && DB_REDO(op))) {
+ /* Undo the remove or redo the add. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->prev_pgno = argp->pgno;
+ modified = 1;
+ }
+ if (modified) {
+ if (DB_UNDO(op))
+ pagep->lsn = argp->lsn_next;
+ else
+ pagep->lsn = *lsnp;
+ }
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ pagep = NULL;
+ if (argp->opcode == DB_ADD_PAGE_COMPAT)
+ goto done;
+
+prev: if ((ret = __memp_fget(mpf, &argp->prev, NULL, 0, &pagep)) != 0) {
+ if (DB_REDO(op)) {
+ ret = __db_pgerr(file_dbp, argp->prev, ret);
+ goto out;
+ }
+ goto done;
+ }
+ modified = 0;
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->lsn_prev);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->lsn_prev);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Redo the relink. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->next_pgno = argp->next;
+ modified = 1;
+ } else if (LOG_COMPARE(lsnp, &LSN(pagep)) == 0 && DB_UNDO(op)) {
+ /* Undo the relink. */
+ REC_DIRTY(mpf, &pagep);
+ pagep->next_pgno = argp->pgno;
+ modified = 1;
+ }
+ if (modified) {
+ if (DB_UNDO(op))
+ pagep->lsn = argp->lsn_prev;
+ else
+ pagep->lsn = *lsnp;
+ }
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+done: *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
+}
diff --git a/db/db/db_reclaim.c b/db/db/db_reclaim.c
index 4795b8caa..afa81f4bf 100644
--- a/db/db/db_reclaim.c
+++ b/db/db/db_reclaim.c
@@ -1,22 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_reclaim.c,v 11.42 2004/06/10 04:46:44 ubell Exp $
+ * $Id: db_reclaim.c,v 12.8 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/mp.h"
@@ -28,13 +22,14 @@
* where did_put is a return value indicating if the page in question has
* already been returned to the mpool.
*
- * PUBLIC: int __db_traverse_big __P((DB *,
- * PUBLIC: db_pgno_t, int (*)(DB *, PAGE *, void *, int *), void *));
+ * PUBLIC: int __db_traverse_big __P((DB *, db_pgno_t, DB_TXN *,
+ * PUBLIC: int (*)(DB *, PAGE *, void *, int *), void *));
*/
int
-__db_traverse_big(dbp, pgno, callback, cookie)
+__db_traverse_big(dbp, pgno, txn, callback, cookie)
DB *dbp;
db_pgno_t pgno;
+ DB_TXN *txn;
int (*callback) __P((DB *, PAGE *, void *, int *));
void *cookie;
{
@@ -46,7 +41,7 @@ __db_traverse_big(dbp, pgno, callback, cookie)
do {
did_put = 0;
- if ((ret = __memp_fget(mpf, &pgno, 0, &p)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, txn, 0, &p)) != 0)
return (ret);
/*
* If we are freeing pages only process the overflow
@@ -88,7 +83,6 @@ __db_reclaim_callback(dbp, p, cookie, putp)
* If we abort then the subdb may not be openable to undo
* the free.
*/
-
if ((dbp->type == DB_BTREE || dbp->type == DB_RECNO) &&
PGNO(p) == ((BTREE *)dbp->bt_internal)->bt_root)
return (0);
@@ -145,6 +139,8 @@ __db_truncate_callback(dbp, p, cookie, putp)
}
break;
case P_OVERFLOW:
+ if ((ret = __memp_dirty(mpf, &p, param->dbc->txn, 0)) != 0)
+ return (ret);
if (DBC_LOGGING(param->dbc)) {
if ((ret = __db_ovref_log(dbp, param->dbc->txn,
&LSN(p), 0, p->pgno, -1, &LSN(p))) != 0)
@@ -202,15 +198,18 @@ __db_truncate_callback(dbp, p, cookie, putp)
if (PREV_PGNO(p) == PGNO_INVALID) {
type = P_HASH;
-reinit: *putp = 0;
+reinit: if ((ret =
+ __memp_dirty(mpf, &p, param->dbc->txn, 0)) != 0)
+ return (ret);
+ *putp = 0;
if (DBC_LOGGING(param->dbc)) {
memset(&ldbt, 0, sizeof(ldbt));
memset(&ddbt, 0, sizeof(ddbt));
ldbt.data = p;
ldbt.size = P_OVERHEAD(dbp);
ldbt.size += p->entries * sizeof(db_indx_t);
- ddbt.data = (u_int8_t *)p + p->hf_offset;
- ddbt.size = dbp->pgsize - p->hf_offset;
+ ddbt.data = (u_int8_t *)p + HOFFSET(p);
+ ddbt.size = dbp->pgsize - HOFFSET(p);
if ((ret = __db_pg_init_log(dbp,
param->dbc->txn, &LSN(p), 0,
p->pgno, &ldbt, &ddbt)) != 0)
@@ -230,7 +229,7 @@ reinit: *putp = 0;
if ((ret = __db_free(param->dbc, p)) != 0)
return (ret);
} else {
- if ((ret = __memp_fput(mpf, p, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, p, 0)) != 0)
return (ret);
*putp = 1;
}
diff --git a/db/db/db_remove.c b/db/db/db_remove.c
index 5497c5e01..2201ec1e5 100644
--- a/db/db/db_remove.c
+++ b/db/db/db_remove.c
@@ -1,74 +1,85 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_remove.c,v 11.219 2004/09/16 17:55:17 margo Exp $
+ * $Id: db_remove.c,v 12.28 2006/09/19 15:06:58 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/fop.h"
#include "dbinc/btree.h"
#include "dbinc/hash.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
-static int __db_dbtxn_remove __P((DB *, DB_TXN *, const char *));
+static int __db_dbtxn_remove __P((DB *, DB_TXN *, const char *, const char *));
static int __db_subdb_remove __P((DB *, DB_TXN *, const char *, const char *));
/*
- * __dbenv_dbremove_pp
+ * __env_dbremove_pp
* DB_ENV->dbremove pre/post processing.
*
- * PUBLIC: int __dbenv_dbremove_pp __P((DB_ENV *,
+ * PUBLIC: int __env_dbremove_pp __P((DB_ENV *,
* PUBLIC: DB_TXN *, const char *, const char *, u_int32_t));
*/
int
-__dbenv_dbremove_pp(dbenv, txn, name, subdb, flags)
+__env_dbremove_pp(dbenv, txn, name, subdb, flags)
DB_ENV *dbenv;
DB_TXN *txn;
const char *name, *subdb;
u_int32_t flags;
{
DB *dbp;
+ DB_THREAD_INFO *ip;
int handle_check, ret, t_ret, txn_local;
+ dbp = NULL;
+ txn_local = 0;
+
PANIC_CHECK(dbenv);
ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->dbremove");
- /* Validate arguments. */
+ /*
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
+ */
if ((ret = __db_fchk(dbenv, "DB->remove", flags, DB_AUTO_COMMIT)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __env_rep_enter(dbenv, 1)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
/*
* Create local transaction as necessary, check for consistent
* transaction usage.
*/
- if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if (IS_ENV_AUTO_COMMIT(dbenv, txn, flags)) {
if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
- return (ret);
+ goto err;
txn_local = 1;
- } else {
- if (txn != NULL && !TXN_ON(dbenv))
- return (__db_not_txn_env(dbenv));
- txn_local = 0;
- }
+ } else
+ if (txn != NULL && !TXN_ON(dbenv) &&
+ (!CDB_LOCKING(dbenv) || !F_ISSET(txn, TXN_CDSGROUP))) {
+ ret = __db_not_txn_env(dbenv);
+ goto err;
+ }
+ LF_CLR(DB_AUTO_COMMIT);
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, 1, txn != NULL)) != 0)
- goto err;
-
ret = __db_remove_int(dbp, txn, name, subdb, flags);
if (txn_local) {
@@ -90,19 +101,27 @@ __dbenv_dbremove_pp(dbenv, txn, name, subdb, flags)
dbp->lid = DB_LOCK_INVALIDID;
}
- if (handle_check)
- __env_db_rep_exit(dbenv);
-
-err: if (txn_local)
- ret = __db_txn_auto_resolve(dbenv, txn, 0, ret);
+err: if (txn_local && (t_ret =
+ __db_txn_auto_resolve(dbenv, txn, 0, ret)) != 0 && ret == 0)
+ ret = t_ret;
/*
* We never opened this dbp for real, so don't include a transaction
* handle, and use NOSYNC to avoid calling into mpool.
+ *
+ * !!!
+ * Note we're reversing the order of operations: we started the txn and
+ * then opened the DB handle; we're resolving the txn and then closing
+ * closing the DB handle -- it's safer.
*/
- if ((t_ret = __db_close(dbp, NULL, DB_NOSYNC)) != 0 && ret == 0)
+ if (dbp != NULL &&
+ (t_ret = __db_close(dbp, NULL, DB_NOSYNC)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -120,7 +139,8 @@ __db_remove_pp(dbp, name, subdb, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
@@ -149,15 +169,21 @@ __db_remove_pp(dbp, name, subdb, flags)
if ((ret = __db_check_txn(dbp, NULL, DB_LOCK_INVALIDID, 0)) != 0)
return (ret);
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 1, 0)) != 0)
- return (ret);
+ ENV_ENTER(dbenv, ip);
+
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 1, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
/* Remove the file. */
ret = __db_remove(dbp, NULL, name, subdb, flags);
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -206,15 +232,23 @@ __db_remove_int(dbp, txn, name, subdb, flags)
dbenv = dbp->dbenv;
real_name = tmpname = NULL;
- /* Handle subdatabase removes separately. */
- if (subdb != NULL) {
+ if (name == NULL && subdb == NULL) {
+ __db_errx(dbenv, "Remove on temporary files invalid");
+ ret = EINVAL;
+ goto err;
+ }
+
+ if (name == NULL) {
+ MAKE_INMEM(dbp);
+ real_name = (char *)subdb;
+ } else if (subdb != NULL) {
ret = __db_subdb_remove(dbp, txn, name, subdb);
goto err;
}
/* Handle transactional file removes separately. */
- if (txn != NULL) {
- ret = __db_dbtxn_remove(dbp, txn, name);
+ if (IS_REAL_TXN(txn)) {
+ ret = __db_dbtxn_remove(dbp, txn, name, subdb);
goto err;
}
@@ -223,15 +257,16 @@ __db_remove_int(dbp, txn, name, subdb, flags)
*
* Find the real name of the file.
*/
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
+ if (!F_ISSET(dbp, DB_AM_INMEM) && (ret =
+ __db_appname(dbenv, DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
goto err;
/*
- * If force is set, remove the temporary file. Ignore errors because
- * the backup file might not exist.
+ * If this is a file and force is set, remove the temporary file, which
+ * may have been left around. Ignore errors because the temporary file
+ * might not exist.
*/
- if (LF_ISSET(DB_FORCE) &&
+ if (!F_ISSET(dbp, DB_AM_INMEM) && LF_ISSET(DB_FORCE) &&
(ret = __db_backup_name(dbenv, real_name, NULL, &tmpname)) == 0)
(void)__os_unlink(dbenv, tmpname);
@@ -242,10 +277,12 @@ __db_remove_int(dbp, txn, name, subdb, flags)
(ret = dbp->db_am_remove(dbp, NULL, name, subdb)) != 0)
goto err;
- ret = __fop_remove(dbenv, NULL, dbp->fileid, name, DB_APP_DATA,
+ ret = F_ISSET(dbp, DB_AM_INMEM) ?
+ __db_inmem_remove(dbp, NULL, real_name) :
+ __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 (!F_ISSET(dbp, DB_AM_INMEM) && real_name != NULL)
__os_free(dbenv, real_name);
if (tmpname != NULL)
__os_free(dbenv, tmpname);
@@ -254,6 +291,71 @@ err: if (real_name != NULL)
}
/*
+ * __db_inmem_remove --
+ * Removal of a named in-memory database.
+ *
+ * PUBLIC: int __db_inmem_remove __P((DB *, DB_TXN *, const char *));
+ */
+int
+__db_inmem_remove(dbp, txn, name)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name;
+{
+ DB_ENV *dbenv;
+ DB_LSN lsn;
+ DBT fid_dbt, name_dbt;
+ u_int32_t locker;
+ int ret;
+
+ dbenv = dbp->dbenv;
+ locker = DB_LOCK_INVALIDID;
+
+ DB_ASSERT(dbenv, name != NULL);
+
+ /* This had better exist if we are trying to do a remove. */
+ (void)__memp_set_flags(dbp->mpf, DB_MPOOL_NOFILE, 1);
+ if ((ret = __memp_fopen(dbp->mpf, NULL, name, 0, 0, 0)) != 0)
+ return (ret);
+ if ((ret = __memp_get_fileid(dbp->mpf, dbp->fileid)) != 0)
+ return (ret);
+ dbp->preserve_fid = 1;
+
+ if (LOCKING_ON(dbenv)) {
+ if (dbp->lid == DB_LOCK_INVALIDID &&
+ (ret = __lock_id(dbenv, &dbp->lid, NULL)) != 0)
+ return (ret);
+ locker = txn == NULL ? dbp->lid : txn->txnid;
+ }
+
+ /*
+ * In a transactional environment, we'll play the same game we play
+ * for databases in the file system -- create a temporary database
+ * and put it in with the current name and then rename this one to
+ * another name. We'll then use a commit-time event to remove the
+ * entry.
+ */
+ if ((ret =
+ __fop_lock_handle(dbenv, dbp, locker, DB_LOCK_WRITE, NULL, 0)) != 0)
+ return (ret);
+
+ if (LOGGING_ON(dbenv)) {
+ if (txn != NULL && (ret =
+ __txn_remevent(dbenv, txn, name, dbp->fileid, 1)) != 0)
+ return (ret);
+
+ DB_INIT_DBT(name_dbt, name, strlen(name) + 1);
+ DB_INIT_DBT(fid_dbt, dbp->fileid, DB_FILE_ID_LEN);
+ if ((ret = __crdel_inmem_remove_log(
+ dbenv, txn, &lsn, 0, &name_dbt, &fid_dbt)) != 0)
+ return (ret);
+ }
+
+ return (!IS_REAL_TXN(txn) ?
+ __memp_nameop(dbenv, dbp->fileid, NULL, name, NULL, 1) : 0);
+}
+
+/*
* __db_subdb_remove --
* Remove a subdatabase.
*/
@@ -323,10 +425,10 @@ err:
}
static int
-__db_dbtxn_remove(dbp, txn, name)
+__db_dbtxn_remove(dbp, txn, name, subdb)
DB *dbp;
DB_TXN *txn;
- const char *name;
+ const char *name, *subdb;
{
DB_ENV *dbenv;
int ret;
@@ -336,27 +438,32 @@ __db_dbtxn_remove(dbp, txn, name)
tmpname = NULL;
/*
- * This is a transactional rename, so we have to keep the name
+ * This is a transactional remove, so we have to keep the name
* of the file locked until the transaction commits. As a result,
* we implement remove by renaming the file to some other name
* (which creates a dummy named file as a placeholder for the
* file being rename/dremoved) and then deleting that file as
* a delayed remove at commit.
*/
- if ((ret = __db_backup_name(dbenv, name, txn, &tmpname)) != 0)
+ if ((ret = __db_backup_name(dbenv,
+ F_ISSET(dbp, DB_AM_INMEM) ? subdb : name, txn, &tmpname)) != 0)
return (ret);
DB_TEST_RECOVERY(dbp, DB_TEST_PREDESTROY, ret, name);
- if ((ret = __db_rename_int(dbp, txn, name, NULL, tmpname)) != 0)
+ if ((ret = __db_rename_int(dbp, txn, name, subdb, tmpname)) != 0)
goto err;
- /* The internal removes will also translate into delayed removes. */
+ /*
+ * The internal removes will also translate into delayed removes.
+ */
if (dbp->db_am_remove != NULL &&
(ret = dbp->db_am_remove(dbp, txn, tmpname, NULL)) != 0)
goto err;
- ret = __fop_remove(dbenv, txn, dbp->fileid, tmpname, DB_APP_DATA,
+ ret = F_ISSET(dbp, DB_AM_INMEM) ?
+ __db_inmem_remove(dbp, txn, tmpname) :
+ __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 12f1f2276..e841542ca 100644
--- a/db/db/db_rename.c
+++ b/db/db/db_rename.c
@@ -1,96 +1,83 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_rename.c,v 11.216 2004/09/16 17:55:17 margo Exp $
+ * $Id: db_rename.c,v 12.20 2006/09/19 15:06:58 bostic Exp $
*/
#include "db_config.h"
-#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/fop.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
-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_pp
+ * __env_dbrename_pp
* DB_ENV->dbrename pre/post processing.
*
- * PUBLIC: int __dbenv_dbrename_pp __P((DB_ENV *, DB_TXN *,
+ * PUBLIC: int __env_dbrename_pp __P((DB_ENV *, DB_TXN *,
* PUBLIC: const char *, const char *, const char *, u_int32_t));
*/
int
-__dbenv_dbrename_pp(dbenv, txn, name, subdb, newname, flags)
+__env_dbrename_pp(dbenv, txn, name, subdb, newname, flags)
DB_ENV *dbenv;
DB_TXN *txn;
const char *name, *subdb, *newname;
u_int32_t flags;
{
- int ret, txn_local;
+ DB *dbp;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret, txn_local;
+
+ dbp = NULL;
+ txn_local = 0;
PANIC_CHECK(dbenv);
ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->dbrename");
- /* Validate arguments. */
+ /*
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
+ */
if ((ret = __db_fchk(dbenv, "DB->rename", flags, DB_AUTO_COMMIT)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __env_rep_enter(dbenv, 1)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
/*
* Create local transaction as necessary, check for consistent
* transaction usage.
*/
- if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if (IS_ENV_AUTO_COMMIT(dbenv, txn, flags)) {
if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
- return (ret);
+ goto err;
txn_local = 1;
- } else {
- if (txn != NULL && !TXN_ON(dbenv))
- return (__db_not_txn_env(dbenv));
- txn_local = 0;
- }
-
- ret = __dbenv_dbrename(dbenv, txn, name, subdb, newname, txn_local);
-
- return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
-}
+ } else
+ if (txn != NULL && !TXN_ON(dbenv) &&
+ (!CDB_LOCKING(dbenv) || !F_ISSET(txn, TXN_CDSGROUP))) {
+ ret = __db_not_txn_env(dbenv);
+ goto err;
+ }
-/*
- * __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;
+ LF_CLR(DB_AUTO_COMMIT);
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, 1, txn != NULL)) != 0)
goto err;
ret = __db_rename_int(dbp, txn, name, subdb, newname);
@@ -105,22 +92,36 @@ __dbenv_dbrename(dbenv, txn, name, subdb, newname, txn_local)
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.
+ * We created this handle locally so we need to close it and
+ * clean it up. Unfortunately, it's holding transactional
+ * or CDS group 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)
- __env_db_rep_exit(dbenv);
+err: if (txn_local && (t_ret =
+ __db_txn_auto_resolve(dbenv, txn, 0, ret)) != 0 && ret == 0)
+ ret = t_ret;
-err:
- if ((t_ret = __db_close(dbp, txn, DB_NOSYNC)) != 0 && ret == 0)
+ /*
+ * We never opened this dbp for real, so don't include a transaction
+ * handle, and use NOSYNC to avoid calling into mpool.
+ *
+ * !!!
+ * Note we're reversing the order of operations: we started the txn and
+ * then opened the DB handle; we're resolving the txn and then closing
+ * closing the DB handle -- it's safer.
+ */
+ if (dbp != NULL &&
+ (t_ret = __db_close(dbp, NULL, DB_NOSYNC)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -138,7 +139,8 @@ __db_rename_pp(dbp, name, subdb, newname, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
handle_check = 0;
@@ -155,20 +157,20 @@ __db_rename_pp(dbp, name, subdb, newname, flags)
* a database -- we'll destroy the handle, and the application won't
* ever be able to close the database.
*/
- if (F_ISSET(dbp, DB_AM_OPEN_CALLED)) {
- ret = __db_mi_open(dbenv, "DB->rename", 1);
- goto err;
- }
+ if (F_ISSET(dbp, DB_AM_OPEN_CALLED))
+ return (__db_mi_open(dbenv, "DB->rename", 1));
/* Validate arguments. */
if ((ret = __db_fchk(dbenv, "DB->rename", 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);
+
+ ENV_ENTER(dbenv, ip);
- handle_check = IS_REPLICATED(dbenv, dbp);
+ handle_check = IS_ENV_REPLICATED(dbenv);
if (handle_check && (ret = __db_rep_enter(dbp, 1, 1, 0)) != 0) {
handle_check = 0;
goto err;
@@ -177,9 +179,9 @@ __db_rename_pp(dbp, name, subdb, newname, flags)
/* Rename the file. */
ret = __db_rename(dbp, NULL, name, subdb, newname);
-err: if (handle_check)
- __env_db_rep_exit(dbenv);
-
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -222,26 +224,40 @@ __db_rename_int(dbp, txn, name, subdb, newname)
{
DB_ENV *dbenv;
int ret;
- char *real_name;
+ char *old, *real_name;
dbenv = dbp->dbenv;
real_name = NULL;
DB_TEST_RECOVERY(dbp, DB_TEST_PREDESTROY, ret, name);
- if (subdb != NULL) {
+ if (name == NULL && subdb == NULL) {
+ __db_errx(dbenv, "Rename on temporary files invalid");
+ ret = EINVAL;
+ goto err;
+ }
+
+ if (name == NULL)
+ MAKE_INMEM(dbp);
+ else if (subdb != NULL) {
ret = __db_subdb_rename(dbp, txn, name, subdb, newname);
goto err;
}
/*
- * From here on down, this pertains to files.
+ * From here on down, this pertains to files or in-memory databases.
*
* Find the real name of the file.
*/
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
- goto err;
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ old = (char *)subdb;
+ real_name = (char *)subdb;
+ } else {
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
+ goto err;
+ old = (char *)name;
+ }
if ((ret = __fop_remove_setup(dbp, txn, real_name, 0)) != 0)
goto err;
@@ -258,11 +274,11 @@ __db_rename_int(dbp, txn, name, subdb, newname)
* create a temporary object as a placeholder. This is all
* taken care of in the fop layer.
*/
- if (txn != NULL) {
- if ((ret = __fop_dummy(dbp, txn, name, newname, 0)) != 0)
+ if (IS_REAL_TXN(txn)) {
+ if ((ret = __fop_dummy(dbp, txn, old, newname, 0)) != 0)
goto err;
} else {
- if ((ret = __fop_dbrename(dbp, name, newname)) != 0)
+ if ((ret = __fop_dbrename(dbp, old, newname)) != 0)
goto err;
}
@@ -270,13 +286,13 @@ __db_rename_int(dbp, txn, name, subdb, newname)
* I am pretty sure that we haven't gotten a dbreg id, so calling
* dbreg_filelist_update is not necessary.
*/
- DB_ASSERT(dbp->log_filename == NULL ||
+ DB_ASSERT(dbenv, dbp->log_filename == NULL ||
dbp->log_filename->id == DB_LOGFILEID_INVALID);
DB_TEST_RECOVERY(dbp, DB_TEST_POSTDESTROY, ret, newname);
DB_TEST_RECOVERY_LABEL
-err: if (real_name != NULL)
+err: if (!F_ISSET(dbp, DB_AM_INMEM) && real_name != NULL)
__os_free(dbenv, real_name);
return (ret);
@@ -320,7 +336,8 @@ __db_subdb_rename(dbp, txn, name, subdb, newname)
MU_OPEN, NULL, 0)) != 0)
goto err;
- if ((ret = __memp_fget(mdbp->mpf, &dbp->meta_pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mdbp->mpf, &dbp->meta_pgno,
+ txn, 0, &meta)) != 0)
goto err;
memcpy(dbp->fileid, ((DBMETA *)meta)->uid, DB_FILE_ID_LEN);
if ((ret = __fop_lock_handle(dbenv,
diff --git a/db/db/db_ret.c b/db/db/db_ret.c
index 99421eccc..3de1776c6 100644
--- a/db/db/db_ret.c
+++ b/db/db/db_ret.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_ret.c,v 11.26 2004/02/05 02:25:13 mjc Exp $
+ * $Id: db_ret.c,v 12.6 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
@@ -23,12 +17,13 @@
* __db_ret --
* Build return DBT.
*
- * PUBLIC: int __db_ret __P((DB *,
+ * PUBLIC: int __db_ret __P((DB *, DB_TXN *,
* PUBLIC: PAGE *, u_int32_t, DBT *, void **, u_int32_t *));
*/
int
-__db_ret(dbp, h, indx, dbt, memp, memsize)
+__db_ret(dbp, txn, h, indx, dbt, memp, memsize)
DB *dbp;
+ DB_TXN *txn;
PAGE *h;
u_int32_t indx;
DBT *dbt;
@@ -47,7 +42,7 @@ __db_ret(dbp, h, indx, dbt, memp, memsize)
hk = P_ENTRY(dbp, h, indx);
if (HPAGE_PTYPE(hk) == H_OFFPAGE) {
memcpy(&ho, hk, sizeof(HOFFPAGE));
- return (__db_goff(dbp, dbt,
+ return (__db_goff(dbp, txn, dbt,
ho.tlen, ho.pgno, memp, memsize));
}
len = LEN_HKEYDATA(dbp, h, dbp->pgsize, indx);
@@ -59,7 +54,7 @@ __db_ret(dbp, h, indx, dbt, memp, memsize)
bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_OVERFLOW) {
bo = (BOVERFLOW *)bk;
- return (__db_goff(dbp, dbt,
+ return (__db_goff(dbp, txn, dbt,
bo->tlen, bo->pgno, memp, memsize));
}
len = bk->len;
@@ -118,17 +113,22 @@ __db_retcopy(dbenv, dbt, data, len, memp, memsize)
* If the length we're going to copy is 0, the application-supplied
* memory pointer is allowed to be NULL.
*/
- if (F_ISSET(dbt, DB_DBT_MALLOC)) {
+ if (F_ISSET(dbt, DB_DBT_USERCOPY)) {
+ dbt->size = len;
+ return (len == 0 ? 0 : dbenv->dbt_usercopy(dbt, 0, data,
+ len, DB_USERCOPY_SETDATA));
+
+ } else if (F_ISSET(dbt, DB_DBT_MALLOC))
ret = __os_umalloc(dbenv, len, &dbt->data);
- } else if (F_ISSET(dbt, DB_DBT_REALLOC)) {
+ else if (F_ISSET(dbt, DB_DBT_REALLOC)) {
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))
ret = DB_BUFFER_SMALL;
- } else if (memp == NULL || memsize == NULL) {
+ } else if (memp == NULL || memsize == NULL)
ret = EINVAL;
- } else {
+ else {
if (len != 0 && (*memsize == 0 || *memsize < len)) {
if ((ret = __os_realloc(dbenv, len, memp)) == 0)
*memsize = len;
diff --git a/db/db/db_setid.c b/db/db/db_setid.c
index fffba1c6d..3cbbb38ca 100644
--- a/db/db/db_setid.c
+++ b/db/db/db_setid.c
@@ -1,73 +1,142 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_setid.c,v 1.6 2004/09/24 13:41:08 bostic Exp $
+ * $Id: db_setid.c,v 12.16 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_swap.h"
#include "dbinc/db_am.h"
+#include "dbinc/mp.h"
+
+static int __env_fileid_reset __P((DB_ENV *, const char *, int));
/*
- * __db_fileid_reset --
- * Reset the file IDs for every database in the file.
+ * __env_fileid_reset_pp --
+ * DB_ENV->fileid_reset pre/post processing.
*
- * PUBLIC: int __db_fileid_reset __P((DB_ENV *, char *, int));
+ * PUBLIC: int __env_fileid_reset_pp __P((DB_ENV *, const char *, u_int32_t));
*/
int
-__db_fileid_reset(dbenv, name, passwd)
+__env_fileid_reset_pp(dbenv, name, flags)
DB_ENV *dbenv;
- char *name;
- int passwd;
+ const char *name;
+ u_int32_t flags;
+{
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->fileid_reset");
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
+ */
+ if (flags != 0 && flags != DB_ENCRYPT)
+ return (__db_ferr(dbenv, "DB_ENV->fileid_reset", 0));
+
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __env_rep_enter(dbenv, 1)) != 0)
+ goto err;
+
+ ret = __env_fileid_reset(dbenv, name, LF_ISSET(DB_ENCRYPT) ? 1 : 0);
+
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+err: ENV_LEAVE(dbenv, ip);
+ return (ret);
+}
+
+/*
+ * __env_fileid_reset --
+ * Reset the file IDs for every database in the file.
+ */
+static int
+__env_fileid_reset(dbenv, name, encrypted)
+ DB_ENV *dbenv;
+ const char *name;
+ int encrypted;
{
DB *dbp;
DBC *dbcp;
DBT key, data;
+ DB_FH *fhp;
DB_MPOOLFILE *mpf;
db_pgno_t pgno;
int t_ret, ret;
- void *pagep;
+ size_t n;
char *real_name;
- u_int8_t fileid[DB_FILE_ID_LEN];
+ u_int8_t fileid[DB_FILE_ID_LEN], mbuf[256];
+ void *pagep;
dbp = NULL;
dbcp = NULL;
+ fhp = NULL;
real_name = NULL;
/* Get the real backing file name. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
+ if ((ret =
+ __db_appname(dbenv, DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
return (ret);
/* Get a new file ID. */
- if ((ret = __os_fileid(dbenv, real_name, 1, fileid)) != 0) {
- dbenv->err(dbenv, ret, "unable to get new file ID");
+ if ((ret = __os_fileid(dbenv, real_name, 1, fileid)) != 0)
goto err;
- }
- /* Create the DB object. */
- if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "db_create");
+ /*
+ * The user may have physically copied a file currently open in the
+ * cache, which means if we open this file through the cache before
+ * updating the file ID on page 0, we might connect to the file from
+ * which the copy was made.
+ *
+ * !!!
+ * This code depends on page 0 of the file not being encrypted.
+ */
+ if ((ret = __os_open(dbenv, real_name, 0, 0, &fhp)) != 0)
+ goto err;
+ if ((ret = __os_read(dbenv, fhp, mbuf, sizeof(mbuf), &n)) != 0)
+ goto err;
+ if (n != sizeof(mbuf)) {
+ ret = EINVAL;
+ __db_errx(dbenv,
+ "%s: unexpected file type or format", real_name);
goto err;
}
+ memcpy(((DBMETA *)mbuf)->uid, fileid, DB_FILE_ID_LEN);
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
+ goto err;
+ if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
+ goto err;
+ if ((ret = __os_fsync(dbenv, fhp)) != 0)
+ goto err;
+
+ /*
+ * Page 0 of the file has an updated file ID, and we can open it in
+ * the cache without connecting to a different, existing file. Open
+ * the file in the cache, and update the file IDs for subdatabases.
+ * (No existing code, as far as I know, actually uses the file ID of
+ * a subdatabase, but it's cleaner to get them all.)
+ *
+ * Create the DB object.
+ */
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ goto err;
/* If configured with a password, the databases are encrypted. */
- if (passwd && (ret = dbp->set_flags(dbp, DB_ENCRYPT)) != 0) {
- dbp->err(dbp, ret, "DB->set_flags: DB_ENCRYPT");
+ if (encrypted && (ret = __db_set_flags(dbp, DB_ENCRYPT)) != 0)
goto err;
- }
/*
* Open the DB file.
@@ -76,26 +145,9 @@ __db_fileid_reset(dbenv, name, passwd)
* Note DB_RDWRMASTER flag, we need to open the master database file
* for writing in this case.
*/
- if ((ret = dbp->open(dbp,
- NULL, name, NULL, DB_UNKNOWN, DB_RDWRMASTER, 0)) != 0) {
- dbp->err(dbp, ret, "DB->open: %s", name);
+ if ((ret = __db_open(dbp, NULL,
+ name, NULL, DB_UNKNOWN, DB_RDWRMASTER, 0, PGNO_BASE_MD)) != 0)
goto err;
- }
-
- mpf = dbp->mpf;
-
- pgno = PGNO_BASE_MD;
- if ((ret = mpf->get(mpf, &pgno, 0, &pagep)) != 0) {
- dbp->err(dbp, ret,
- "%s: DB_MPOOLFILE->get: %lu", name, (u_long)pgno);
- goto err;
- }
- memcpy(((DBMETA *)pagep)->uid, fileid, DB_FILE_ID_LEN);
- if ((ret = mpf->put(mpf, pagep, DB_MPOOL_DIRTY)) != 0) {
- dbp->err(dbp, ret,
- "%s: DB_MPOOLFILE->put: %lu", name, (u_long)pgno);
- goto err;
- }
/*
* If the database file doesn't support subdatabases, we only have
@@ -106,13 +158,12 @@ __db_fileid_reset(dbenv, name, passwd)
if (!F_ISSET(dbp, DB_AM_SUBDB))
goto err;
+ mpf = dbp->mpf;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
- if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {
- dbp->err(dbp, ret, "DB->cursor");
+ if ((ret = __db_cursor(dbp, NULL, &dbcp, 0)) != 0)
goto err;
- }
- while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
+ while ((ret = __db_c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
/*
* XXX
* We're handling actual data, not on-page meta-data, so it
@@ -121,33 +172,23 @@ __db_fileid_reset(dbenv, name, passwd)
*/
memcpy(&pgno, data.data, sizeof(db_pgno_t));
DB_NTOHL(&pgno);
- if ((ret = mpf->get(mpf, &pgno, 0, &pagep)) != 0) {
- dbp->err(dbp, ret,
- "%s: DB_MPOOLFILE->get: %lu", name, (u_long)pgno);
+ if ((ret = __memp_fget(mpf, &pgno, NULL,
+ DB_MPOOL_DIRTY, &pagep)) != 0)
goto err;
- }
memcpy(((DBMETA *)pagep)->uid, fileid, DB_FILE_ID_LEN);
- if ((ret = mpf->put(mpf, pagep, DB_MPOOL_DIRTY)) != 0) {
- dbp->err(dbp, ret,
- "%s: DB_MPOOLFILE->put: %lu", name, (u_long)pgno);
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto err;
- }
}
if (ret == DB_NOTFOUND)
ret = 0;
- else
- dbp->err(dbp, ret, "DBcursor->get");
-err: if (dbcp != NULL && (t_ret = dbcp->c_close(dbcp)) != 0) {
- dbp->err(dbp, ret, "DBcursor->close");
- if (ret == 0)
- ret = t_ret;
- }
- if (dbp != NULL && (t_ret = dbp->close(dbp, 0)) != 0) {
- dbenv->err(dbenv, ret, "DB->close");
- if (ret == 0)
- ret = t_ret;
- }
+err: if (dbcp != NULL && (t_ret = __db_c_close(dbcp)) != 0 && ret == 0)
+ ret = t_ret;
+ if (dbp != NULL && (t_ret = __db_close(dbp, NULL, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (fhp != NULL &&
+ (t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+ ret = t_ret;
if (real_name != NULL)
__os_free(dbenv, real_name);
diff --git a/db/db/db_setlsn.c b/db/db/db_setlsn.c
index 5865798e5..acd4edfaa 100644
--- a/db/db/db_setlsn.c
+++ b/db/db/db_setlsn.c
@@ -1,35 +1,72 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_setlsn.c,v 1.2 2004/04/27 16:10:13 bostic Exp $
+ * $Id: db_setlsn.c,v 12.13 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#include "dbinc/mp.h"
+
+static int __env_lsn_reset __P((DB_ENV *, const char *, int));
/*
- * __db_lsn_reset --
- * Reset the LSNs for every page in the file.
+ * __env_lsn_reset_pp --
+ * DB_ENV->lsn_reset pre/post processing.
*
- * PUBLIC: int __db_lsn_reset __P((DB_ENV *, char *, int));
+ * PUBLIC: int __env_lsn_reset_pp __P((DB_ENV *, const char *, u_int32_t));
*/
int
-__db_lsn_reset(dbenv, name, passwd)
+__env_lsn_reset_pp(dbenv, name, flags)
+ DB_ENV *dbenv;
+ const char *name;
+ u_int32_t flags;
+{
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->lsn_reset");
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline, outside of
+ * the replication block.
+ */
+ if (flags != 0 && flags != DB_ENCRYPT)
+ return (__db_ferr(dbenv, "DB_ENV->lsn_reset", 0));
+
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __env_rep_enter(dbenv, 1)) != 0)
+ goto err;
+
+ ret = __env_lsn_reset(dbenv, name, LF_ISSET(DB_ENCRYPT) ? 1 : 0);
+
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+err: ENV_LEAVE(dbenv, ip);
+ return (ret);
+}
+
+/*
+ * __env_lsn_reset --
+ * Reset the LSNs for every page in the file.
+ */
+static int
+__env_lsn_reset(dbenv, name, encrypted)
DB_ENV *dbenv;
- char *name;
- int passwd;
+ const char *name;
+ int encrypted;
{
DB *dbp;
DB_MPOOLFILE *mpf;
@@ -38,16 +75,12 @@ __db_lsn_reset(dbenv, name, passwd)
int t_ret, ret;
/* Create the DB object. */
- if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "db_create");
- return (1);
- }
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ return (ret);
/* If configured with a password, the databases are encrypted. */
- if (passwd && (ret = dbp->set_flags(dbp, DB_ENCRYPT)) != 0) {
- dbp->err(dbp, ret, "DB->set_flags: DB_ENCRYPT");
+ if (encrypted && (ret = __db_set_flags(dbp, DB_ENCRYPT)) != 0)
goto err;
- }
/*
* Open the DB file.
@@ -56,28 +89,24 @@ __db_lsn_reset(dbenv, name, passwd)
* Note DB_RDWRMASTER flag, we need to open the master database file
* for writing in this case.
*/
- if ((ret = dbp->open(dbp,
- NULL, name, NULL, DB_UNKNOWN, DB_RDWRMASTER, 0)) != 0) {
- dbp->err(dbp, ret, "DB->open: %s", name);
+ if ((ret = __db_open(dbp, NULL,
+ name, NULL, DB_UNKNOWN, DB_RDWRMASTER, 0, PGNO_BASE_MD)) != 0)
goto err;
- }
/* Reset the LSN on every page of the database file. */
mpf = dbp->mpf;
- for (pgno = 0; (ret = mpf->get(mpf, &pgno, 0, &pagep)) == 0; ++pgno) {
+ for (pgno = 0;
+ (ret = __memp_fget(mpf, &pgno, NULL, DB_MPOOL_DIRTY, &pagep)) == 0;
+ ++pgno) {
LSN_NOT_LOGGED(pagep->lsn);
- if ((ret = mpf->put(mpf, pagep, DB_MPOOL_DIRTY)) != 0) {
- dbp->err(dbp, ret, "DB_MPOOLFILE->put: %s", name);
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto err;
- }
}
if (ret == DB_PAGE_NOTFOUND)
ret = 0;
- else
- dbp->err(dbp, ret, "DB_MPOOLFILE->get: %s", name);
-err: if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
+err: if ((t_ret = __db_close(dbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
- return (ret == 0 ? 0 : 1);
+ return (ret);
}
diff --git a/db/db/db_stati.c b/db/db/db_stati.c
index cd73b8ea4..2b1266717 100644
--- a/db/db/db_stati.c
+++ b/db/db/db_stati.c
@@ -1,38 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_stati.c,v 11.123 2004/07/19 16:40:51 bostic Exp $
+ * $Id: db_stati.c,v 12.21 2006/08/24 14:45:16 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 <string.h>
-#endif
-
#include "db_int.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"
@@ -57,7 +39,8 @@ __db_stat_pp(dbp, txn, spp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
@@ -67,17 +50,22 @@ __db_stat_pp(dbp, txn, spp, flags)
if ((ret = __db_stat_arg(dbp, flags)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0)
- return (ret);
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
ret = __db_stat(dbp, txn, spp, flags);
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -102,11 +90,11 @@ __db_stat(dbp, txn, spp, flags)
/* Acquire a cursor. */
if ((ret = __db_cursor(dbp, txn,
- &dbc, LF_ISSET(DB_DEGREE_2 | DB_DIRTY_READ))) != 0)
+ &dbc, LF_ISSET(DB_READ_COMMITTED | DB_READ_UNCOMMITTED))) != 0)
return (ret);
DEBUG_LWRITE(dbc, NULL, "DB->stat", NULL, NULL, flags);
- LF_CLR(DB_DEGREE_2 | DB_DIRTY_READ);
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED);
switch (dbp->type) {
case DB_BTREE:
@@ -145,18 +133,11 @@ __db_stat_arg(dbp, flags)
dbenv = dbp->dbenv;
/* Check for invalid function flags. */
- LF_CLR(DB_DEGREE_2 | DB_DIRTY_READ);
+ LF_CLR(DB_READ_COMMITTED | DB_READ_UNCOMMITTED);
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;
- /* FALLTHROUGH */
default:
return (__db_ferr(dbenv, "DB->stat", 0));
}
@@ -176,7 +157,8 @@ __db_stat_print_pp(dbp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int handle_check, ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbenv = dbp->dbenv;
@@ -187,21 +169,26 @@ __db_stat_print_pp(dbp, flags)
* !!!
* The actual argument checking is simple, do it inline.
*/
- if ((ret = __db_fchk(dbenv, "DB->stat_print",
- flags, DB_STAT_ALL | DB_STAT_CLEAR)) != 0)
+ if ((ret = __db_fchk(dbenv,
+ "DB->stat_print", flags, DB_FAST_STAT | DB_STAT_ALL)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
/* Check for replication block. */
- handle_check = IS_REPLICATED(dbenv, dbp);
- if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0)
- return (ret);
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
ret = __db_stat_print(dbp, flags);
/* Release replication block. */
- if (handle_check)
- __env_db_rep_exit(dbenv);
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -216,17 +203,19 @@ __db_stat_print(dbp, flags)
DB *dbp;
u_int32_t flags;
{
+ time_t now;
int ret;
+ char time_buf[CTIME_BUFLEN];
- if (flags == 0 || LF_ISSET(DB_STAT_ALL)) {
- ret = __db_print_stats(dbp, flags);
- if (flags == 0 || ret != 0)
- return (ret);
- }
+ (void)time(&now);
+ __db_msg(dbp->dbenv, "%.24s\tLocal time", __db_ctime(&now, time_buf));
if (LF_ISSET(DB_STAT_ALL) && (ret = __db_print_all(dbp, flags)) != 0)
return (ret);
+ if ((ret = __db_print_stats(dbp, flags)) != 0)
+ return (ret);
+
return (0);
}
@@ -284,40 +273,40 @@ __db_print_all(dbp, flags)
u_int32_t flags;
{
static const FN fn[] = {
- { DB_AM_CHKSUM, "DB_AM_CHKSUM" },
- { DB_AM_CL_WRITER, "DB_AM_CL_WRITER" },
- { DB_AM_COMPENSATE, "DB_AM_COMPENSATE" },
- { DB_AM_CREATED, "DB_AM_CREATED" },
- { DB_AM_CREATED_MSTR, "DB_AM_CREATED_MSTR" },
- { DB_AM_DBM_ERROR, "DB_AM_DBM_ERROR" },
- { DB_AM_DELIMITER, "DB_AM_DELIMITER" },
- { DB_AM_DIRTY, "DB_AM_DIRTY" },
- { DB_AM_DISCARD, "DB_AM_DISCARD" },
- { DB_AM_DUP, "DB_AM_DUP" },
- { DB_AM_DUPSORT, "DB_AM_DUPSORT" },
- { DB_AM_ENCRYPT, "DB_AM_ENCRYPT" },
- { DB_AM_FIXEDLEN, "DB_AM_FIXEDLEN" },
- { DB_AM_INMEM, "DB_AM_INMEM" },
- { DB_AM_IN_RENAME, "DB_AM_IN_RENAME" },
- { DB_AM_NOT_DURABLE, "DB_AM_NOT_DURABLE" },
- { DB_AM_OPEN_CALLED, "DB_AM_OPEN_CALLED" },
- { DB_AM_PAD, "DB_AM_PAD" },
- { DB_AM_PGDEF, "DB_AM_PGDEF" },
- { DB_AM_RDONLY, "DB_AM_RDONLY" },
- { DB_AM_RECNUM, "DB_AM_RECNUM" },
- { DB_AM_RECOVER, "DB_AM_RECOVER" },
- { DB_AM_RENUMBER, "DB_AM_RENUMBER" },
- { DB_AM_REPLICATION, "DB_AM_REPLICATION" },
- { DB_AM_REVSPLITOFF, "DB_AM_REVSPLITOFF" },
- { DB_AM_SECONDARY, "DB_AM_SECONDARY" },
- { DB_AM_SNAPSHOT, "DB_AM_SNAPSHOT" },
- { DB_AM_SUBDB, "DB_AM_SUBDB" },
- { DB_AM_SWAP, "DB_AM_SWAP" },
- { DB_AM_TXN, "DB_AM_TXN" },
- { DB_AM_VERIFYING, "DB_AM_VERIFYING" },
- { 0, NULL }
+ { DB_AM_CHKSUM, "DB_AM_CHKSUM" },
+ { DB_AM_CL_WRITER, "DB_AM_CL_WRITER" },
+ { DB_AM_COMPENSATE, "DB_AM_COMPENSATE" },
+ { DB_AM_CREATED, "DB_AM_CREATED" },
+ { DB_AM_CREATED_MSTR, "DB_AM_CREATED_MSTR" },
+ { DB_AM_DBM_ERROR, "DB_AM_DBM_ERROR" },
+ { DB_AM_DELIMITER, "DB_AM_DELIMITER" },
+ { DB_AM_DISCARD, "DB_AM_DISCARD" },
+ { DB_AM_DUP, "DB_AM_DUP" },
+ { DB_AM_DUPSORT, "DB_AM_DUPSORT" },
+ { DB_AM_ENCRYPT, "DB_AM_ENCRYPT" },
+ { DB_AM_FIXEDLEN, "DB_AM_FIXEDLEN" },
+ { DB_AM_INMEM, "DB_AM_INMEM" },
+ { DB_AM_IN_RENAME, "DB_AM_IN_RENAME" },
+ { DB_AM_NOT_DURABLE, "DB_AM_NOT_DURABLE" },
+ { DB_AM_OPEN_CALLED, "DB_AM_OPEN_CALLED" },
+ { DB_AM_PAD, "DB_AM_PAD" },
+ { DB_AM_PGDEF, "DB_AM_PGDEF" },
+ { DB_AM_RDONLY, "DB_AM_RDONLY" },
+ { DB_AM_READ_UNCOMMITTED, "DB_AM_READ_UNCOMMITTED" },
+ { DB_AM_RECNUM, "DB_AM_RECNUM" },
+ { DB_AM_RECOVER, "DB_AM_RECOVER" },
+ { DB_AM_RENUMBER, "DB_AM_RENUMBER" },
+ { DB_AM_REVSPLITOFF, "DB_AM_REVSPLITOFF" },
+ { DB_AM_SECONDARY, "DB_AM_SECONDARY" },
+ { DB_AM_SNAPSHOT, "DB_AM_SNAPSHOT" },
+ { DB_AM_SUBDB, "DB_AM_SUBDB" },
+ { DB_AM_SWAP, "DB_AM_SWAP" },
+ { DB_AM_TXN, "DB_AM_TXN" },
+ { DB_AM_VERIFYING, "DB_AM_VERIFYING" },
+ { 0, NULL }
};
DB_ENV *dbenv;
+ char time_buf[CTIME_BUFLEN];
dbenv = dbp->dbenv;
@@ -331,7 +320,7 @@ __db_print_all(dbp, flags)
STAT_ISSET("DbEnv", dbp->dbenv);
STAT_STRING("Type", __db_dbtype_to_string(dbp->type));
- __db_print_mutex(dbenv, NULL, dbp->mutexp, "Thread mutex", flags);
+ __mutex_print_debug_single(dbenv, "Thread mutex", dbp->mutex, flags);
STAT_STRING("File", dbp->fname);
STAT_STRING("Database", dbp->dname);
@@ -348,7 +337,7 @@ __db_print_all(dbp, flags)
__db_msg(dbenv,
"%.24s\tReplication handle timestamp",
- dbp->timestamp == 0 ? "0" : ctime(&dbp->timestamp));
+ dbp->timestamp == 0 ? "0" : __db_ctime(&dbp->timestamp, time_buf));
STAT_ISSET("Secondary callback", dbp->s_callback);
STAT_ISSET("Primary handle", dbp->s_primary);
@@ -389,23 +378,20 @@ __db_print_cursor(dbp)
__db_msg(dbenv, "DB handle cursors:");
ret = 0;
- MUTEX_THREAD_LOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbp->dbenv, dbp->mutex);
__db_msg(dbenv, "Active queue:");
- for (dbc = TAILQ_FIRST(&dbp->active_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
+ TAILQ_FOREACH(dbc, &dbp->active_queue, links)
if ((t_ret = __db_print_citem(dbc)) != 0 && ret == 0)
ret = t_ret;
__db_msg(dbenv, "Join queue:");
- for (dbc = TAILQ_FIRST(&dbp->join_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
+ TAILQ_FOREACH(dbc, &dbp->join_queue, links)
if ((t_ret = __db_print_citem(dbc)) != 0 && ret == 0)
ret = t_ret;
__db_msg(dbenv, "Free queue:");
- for (dbc = TAILQ_FIRST(&dbp->free_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
+ TAILQ_FOREACH(dbc, &dbp->free_queue, links)
if ((t_ret = __db_print_citem(dbc)) != 0 && ret == 0)
ret = t_ret;
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbp->dbenv, dbp->mutex);
return (ret);
}
@@ -416,18 +402,18 @@ int __db_print_citem(dbc)
{
static const FN fn[] = {
{ DBC_ACTIVE, "DBC_ACTIVE" },
- { DBC_COMPENSATE, "DBC_COMPENSATE" },
- { DBC_DEGREE_2, "DBC_DEGREE_2" },
- { DBC_DIRTY_READ, "DBC_DIRTY_READ" },
+ { DBC_DONTLOCK, "DBC_DONTLOCK" },
+ { DBC_MULTIPLE, "DBC_MULTIPLE" },
+ { DBC_MULTIPLE_KEY, "DBC_MULTIPLE_KEY" },
{ DBC_OPD, "DBC_OPD" },
+ { DBC_OWN_LID, "DBC_OWN_LID" },
+ { DBC_READ_COMMITTED, "DBC_READ_COMMITTED" },
+ { DBC_READ_UNCOMMITTED, "DBC_READ_UNCOMMITTED" },
{ DBC_RECOVER, "DBC_RECOVER" },
{ DBC_RMW, "DBC_RMW" },
{ DBC_TRANSIENT, "DBC_TRANSIENT" },
{ DBC_WRITECURSOR, "DBC_WRITECURSOR" },
{ DBC_WRITER, "DBC_WRITER" },
- { DBC_MULTIPLE, "DBC_MULTIPLE" },
- { DBC_MULTIPLE_KEY, "DBC_MULTIPLE_KEY" },
- { DBC_OWN_LID, "DBC_OWN_LID" },
{ 0, NULL }
};
DB *dbp;
@@ -438,16 +424,17 @@ int __db_print_citem(dbc)
dbenv = dbp->dbenv;
cp = dbc->internal;
- STAT_HEX("DBC", dbc);
- STAT_HEX("Associated dbp", dbc->dbp);
- STAT_HEX("Associated txn", dbc->txn);
- STAT_HEX("Internal", cp);
- STAT_HEX("Default locker ID", dbc->lid);
+ STAT_POINTER("DBC", dbc);
+ STAT_POINTER("Associated dbp", dbc->dbp);
+ STAT_POINTER("Associated txn", dbc->txn);
+ STAT_POINTER("Internal", cp);
+ STAT_HEX("Default locker ID",
+ dbc->lref == NULL ? 0 : ((DB_LOCKER *)dbc->lref)->id);
STAT_HEX("Locker", dbc->locker);
STAT_STRING("Type", __db_dbtype_to_string(dbc->dbtype));
- STAT_HEX("Off-page duplicate cursor", cp->opd);
- STAT_HEX("Referenced page", cp->page);
+ STAT_POINTER("Off-page duplicate cursor", cp->opd);
+ STAT_POINTER("Referenced page", cp->page);
STAT_ULONG("Root", cp->root);
STAT_ULONG("Page number", cp->pgno);
STAT_ULONG("Page index", cp->indx);
@@ -463,7 +450,7 @@ int __db_print_citem(dbc)
__ham_print_cursor(dbc);
break;
case DB_UNKNOWN:
- DB_ASSERT(dbp->type != DB_UNKNOWN);
+ DB_ASSERT(dbenv, dbp->type != DB_UNKNOWN);
/* FALLTHROUGH */
case DB_QUEUE:
default:
diff --git a/db/db/db_truncate.c b/db/db/db_truncate.c
index 801f3712f..7e5e7124b 100644
--- a/db/db/db_truncate.c
+++ b/db/db/db_truncate.c
@@ -1,26 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_truncate.c,v 11.201 2004/07/15 15:52:51 sue Exp $
+ * $Id: db_truncate.c,v 12.18 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/log.h"
#include "dbinc/btree.h"
#include "dbinc/hash.h"
#include "dbinc/qam.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
#include "dbinc/txn.h"
static int __db_cursor_check __P((DB *));
@@ -38,57 +33,85 @@ __db_truncate_pp(dbp, txn, countp, flags)
u_int32_t *countp, flags;
{
DB_ENV *dbenv;
- int handle_check, ret, txn_local;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret, txn_local;
dbenv = dbp->dbenv;
+ txn_local = 0;
+ handle_check = 0;
PANIC_CHECK(dbenv);
+ STRIP_AUTO_COMMIT(flags);
/* Check for invalid flags. */
if (F_ISSET(dbp, DB_AM_SECONDARY)) {
- __db_err(dbenv,
- "DBP->truncate forbidden on secondary indices");
+ __db_errx(dbenv,
+ "DB->truncate forbidden on secondary indices");
return (EINVAL);
}
- if ((ret =
- __db_fchk(dbenv, "DB->truncate", flags, DB_AUTO_COMMIT)) != 0)
+ if ((ret = __db_fchk(dbenv, "DB->truncate", flags, 0)) != 0)
return (ret);
+ ENV_ENTER(dbenv, ip);
+
/*
* 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_errx(dbenv,
"DB->truncate not permitted with active cursors");
- return (EINVAL);
+ goto err;
+ }
+
+#ifdef CONFIG_TEST
+ if (IS_REP_MASTER(dbenv))
+ DB_TEST_WAIT(dbenv, dbenv->test_check);
+#endif
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
+ /*
+ * Check for changes to a read-only database.
+ * This must be after the replication block so that we
+ * cannot race master/client state changes.
+ */
+ if (DB_IS_READONLY(dbp)) {
+ ret = __db_rdonly(dbenv, "DB->truncate");
+ goto err;
}
/*
* 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)
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
goto err;
txn_local = 1;
- 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, 0, txn != NULL)) != 0)
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0)) != 0)
goto err;
ret = __db_truncate(dbp, txn, countp);
- if (handle_check)
- __env_db_rep_exit(dbenv);
+err: if (txn_local &&
+ (t_ret = __db_txn_auto_resolve(dbenv, txn, 0, ret)) && ret == 0)
+ ret = t_ret;
+
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
-err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
}
/*
@@ -119,8 +142,9 @@ __db_truncate(dbp, txn, countp)
* 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_s_first(dbp, &sdbp)) != 0)
+ return (ret);
+ for (; sdbp != NULL && ret == 0; ret = __db_s_next(&sdbp))
if ((ret = __db_truncate(sdbp, txn, &scount)) != 0)
break;
if (sdbp != NULL)
@@ -180,23 +204,22 @@ __db_cursor_check(dbp)
dbenv = dbp->dbenv;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (found = 0, ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(dbc, &ldbp->active_queue, links)
if (IS_INITIALIZED(dbc)) {
found = 1;
break;
}
- }
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
if (found == 1)
break;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
return (found);
}
diff --git a/db/db/db_upg.c b/db/db/db_upg.c
index a41a1c49d..bb7107648 100644
--- a/db/db/db_upg.c
+++ b/db/db/db_upg.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_upg.c,v 11.35 2004/03/24 20:37:35 bostic Exp $
+ * $Id: db_upg.c,v 12.8 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_swap.h"
@@ -41,6 +35,7 @@ static int (* const func_31_list[P_PAGETYPE_MAX])
static int __db_page_pass __P((DB *, char *, u_int32_t, int (* const [])
(DB *, char *, u_int32_t, DB_FH *, PAGE *, int *), DB_FH *));
+static int __db_set_lastpgno __P((DB *, char *, DB_FH *));
/*
* __db_upgrade_pp --
@@ -100,7 +95,7 @@ __db_upgrade(dbp, fname, flags)
/* Open the file. */
if ((ret = __os_open(dbenv, real_name, 0, 0, &fhp)) != 0) {
- __db_err(dbenv, "%s: %s", real_name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", real_name);
return (ret);
}
@@ -126,8 +121,7 @@ __db_upgrade(dbp, fname, flags)
if ((ret =
__bam_30_btreemeta(dbp, real_name, mbuf)) != 0)
goto err;
- if ((ret = __os_seek(dbenv,
- fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
goto err;
if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
goto err;
@@ -144,10 +138,14 @@ __db_upgrade(dbp, fname, flags)
goto err;
/* FALLTHROUGH */
case 8:
+ if ((ret =
+ __db_set_lastpgno(dbp, real_name, fhp)) != 0)
+ goto err;
+ /* FALLTHROUGH */
case 9:
break;
default:
- __db_err(dbenv, "%s: unsupported btree version: %lu",
+ __db_errx(dbenv, "%s: unsupported btree version: %lu",
real_name, (u_long)((DBMETA *)mbuf)->version);
ret = DB_OLD_VERSION;
goto err;
@@ -164,8 +162,7 @@ __db_upgrade(dbp, fname, flags)
if ((ret =
__ham_30_hashmeta(dbp, real_name, mbuf)) != 0)
goto err;
- if ((ret = __os_seek(dbenv,
- fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
goto err;
if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
goto err;
@@ -201,10 +198,14 @@ __db_upgrade(dbp, fname, flags)
goto err;
/* FALLTHROUGH */
case 7:
+ if ((ret =
+ __db_set_lastpgno(dbp, real_name, fhp)) != 0)
+ goto err;
+ /* FALLTHROUGH */
case 8:
break;
default:
- __db_err(dbenv, "%s: unsupported hash version: %lu",
+ __db_errx(dbenv, "%s: unsupported hash version: %lu",
real_name, (u_long)((DBMETA *)mbuf)->version);
ret = DB_OLD_VERSION;
goto err;
@@ -224,8 +225,7 @@ __db_upgrade(dbp, fname, flags)
case 2:
if ((ret = __qam_32_qammeta(dbp, real_name, mbuf)) != 0)
return (ret);
- if ((ret = __os_seek(dbenv,
- fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
goto err;
if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
goto err;
@@ -234,7 +234,7 @@ __db_upgrade(dbp, fname, flags)
case 4:
break;
default:
- __db_err(dbenv, "%s: unsupported queue version: %lu",
+ __db_errx(dbenv, "%s: unsupported queue version: %lu",
real_name, (u_long)((DBMETA *)mbuf)->version);
ret = DB_OLD_VERSION;
goto err;
@@ -246,12 +246,12 @@ __db_upgrade(dbp, fname, flags)
case DB_BTREEMAGIC:
case DB_HASHMAGIC:
case DB_QAMMAGIC:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: DB->upgrade only supported on native byte-order systems",
real_name);
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: unrecognized file type", real_name);
break;
}
@@ -307,8 +307,7 @@ __db_page_pass(dbp, real_name, flags, fl, fhp)
if (dbp->db_feedback != NULL)
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)
+ if ((ret = __os_seek(dbenv, fhp, i, dbp->pgsize, 0)) != 0)
break;
if ((ret = __os_read(dbenv, fhp, page, dbp->pgsize, &n)) != 0)
break;
@@ -317,8 +316,8 @@ __db_page_pass(dbp, real_name, flags, fl, fhp)
(dbp, real_name, flags, fhp, page, &dirty)) != 0)
break;
if (dirty) {
- if ((ret = __os_seek(dbenv,
- fhp, dbp->pgsize, i, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret =
+ __os_seek(dbenv, fhp, i, dbp->pgsize, 0)) != 0)
break;
if ((ret = __os_write(dbenv,
fhp, page, dbp->pgsize, &n)) != 0)
@@ -352,13 +351,13 @@ __db_lastpgno(dbp, real_name, fhp, pgno_lastp)
if ((ret = __os_ioinfo(dbenv,
real_name, fhp, &mbytes, &bytes, NULL)) != 0) {
- __db_err(dbenv, "%s: %s", real_name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", real_name);
return (ret);
}
/* Page sizes have to be a power-of-two. */
if (bytes % dbp->pgsize != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: file size not a multiple of the pagesize", real_name);
return (EINVAL);
}
@@ -368,3 +367,36 @@ __db_lastpgno(dbp, real_name, fhp, pgno_lastp)
*pgno_lastp = pgno_last;
return (0);
}
+
+/*
+ * __db_set_lastpgno --
+ * Update the meta->last_pgno field.
+ *
+ * Code assumes that we do not have checksums/crypto on the page.
+ */
+static int
+__db_set_lastpgno(dbp, real_name, fhp)
+ DB *dbp;
+ char *real_name;
+ DB_FH *fhp;
+{
+ DB_ENV *dbenv;
+ DBMETA meta;
+ int ret;
+ size_t n;
+
+ dbenv = dbp->dbenv;
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
+ return (ret);
+ if ((ret = __os_read(dbenv, fhp, &meta, sizeof(meta), &n)) != 0)
+ return (ret);
+ dbp->pgsize = meta.pagesize;
+ if ((ret = __db_lastpgno(dbp, real_name, fhp, &meta.last_pgno)) != 0)
+ return (ret);
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
+ return (ret);
+ if ((ret = __os_write(dbenv, fhp, &meta, sizeof(meta), &n)) != 0)
+ return (ret);
+
+ return (0);
+}
diff --git a/db/db/db_upg_opd.c b/db/db/db_upg_opd.c
index fcae089ad..41dec2696 100644
--- a/db/db/db_upg_opd.c
+++ b/db/db/db_upg_opd.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_upg_opd.c,v 11.21 2004/03/19 16:10:26 bostic Exp $
+ * $Id: db_upg_opd.c,v 12.7 2006/08/24 14:45:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
@@ -24,16 +18,16 @@ static int __db_build_ri __P((DB *, DB_FH *, PAGE *, PAGE *, u_int32_t, int *));
static int __db_up_ovref __P((DB *, DB_FH *, db_pgno_t));
#define GET_PAGE(dbp, fhp, pgno, page) { \
- if ((ret = __os_seek(dbp->dbenv, \
- fhp, (dbp)->pgsize, pgno, 0, 0, DB_OS_SEEK_SET)) != 0) \
+ if ((ret = __os_seek( \
+ dbp->dbenv, fhp, pgno, (dbp)->pgsize, 0)) != 0) \
goto err; \
if ((ret = __os_read(dbp->dbenv, \
fhp, page, (dbp)->pgsize, &n)) != 0) \
goto err; \
}
#define PUT_PAGE(dbp, fhp, pgno, page) { \
- if ((ret = __os_seek(dbp->dbenv, \
- fhp, (dbp)->pgsize, pgno, 0, 0, DB_OS_SEEK_SET)) != 0) \
+ if ((ret = __os_seek( \
+ dbp->dbenv, fhp, pgno, (dbp)->pgsize, 0)) != 0) \
goto err; \
if ((ret = __os_write(dbp->dbenv, \
fhp, page, (dbp)->pgsize, &n)) != 0) \
@@ -224,7 +218,7 @@ __db_build_bi(dbp, fhp, ipage, page, indx, nomemp)
p = P_ENTRY(dbp, ipage, indx);
bi.len = child_bi->len;
- B_TSET(bi.type, child_bi->type, 0);
+ B_TSET(bi.type, child_bi->type);
bi.pgno = PGNO(page);
bi.nrecs = __bam_total(dbp, page);
memcpy(p, &bi, SSZA(BINTERNAL, data));
@@ -251,7 +245,7 @@ __db_build_bi(dbp, fhp, ipage, page, indx, nomemp)
p = P_ENTRY(dbp, ipage, indx);
bi.len = child_bk->len;
- B_TSET(bi.type, child_bk->type, 0);
+ B_TSET(bi.type, child_bk->type);
bi.pgno = PGNO(page);
bi.nrecs = __bam_total(dbp, page);
memcpy(p, &bi, SSZA(BINTERNAL, data));
@@ -269,7 +263,7 @@ __db_build_bi(dbp, fhp, ipage, page, indx, nomemp)
p = P_ENTRY(dbp, ipage, indx);
bi.len = BOVERFLOW_SIZE;
- B_TSET(bi.type, child_bk->type, 0);
+ B_TSET(bi.type, child_bk->type);
bi.pgno = PGNO(page);
bi.nrecs = __bam_total(dbp, page);
memcpy(p, &bi, SSZA(BINTERNAL, data));
diff --git a/db/db/db_vrfy.c b/db/db/db_vrfy.c
index d0cd22b6a..f502c35a9 100644
--- a/db/db/db_vrfy.c
+++ b/db/db/db_vrfy.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_vrfy.c,v 1.138 2004/10/11 18:47:50 bostic Exp $
+ * $Id: db_vrfy.c,v 12.29 2006/09/07 20:05:26 bostic Exp $
*/
#include "db_config.h"
-#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_swap.h"
#include "dbinc/db_verify.h"
#include "dbinc/btree.h"
@@ -120,26 +113,11 @@ __db_verify_internal(dbp, fname, dname, handle, callback, flags)
LF_SET(DB_UNREF);
#endif
- if ((ret = __db_verify_arg(dbp, dname, handle, flags)) != 0)
- goto err;
-
- /*
- * 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");
- ret = EINVAL;
- goto err;
- }
-
- ret = __db_verify(dbp, fname, dname, handle, callback, flags);
+ if ((ret = __db_verify_arg(dbp, dname, handle, flags)) == 0)
+ ret = __db_verify(dbp, fname, dname, handle, callback, flags);
/* Db.verify is a DB handle destructor. */
-err: if ((t_ret = __db_close(dbp, NULL, 0)) != 0 && ret == 0)
+ if ((t_ret = __db_close(dbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -176,7 +154,7 @@ __db_verify_arg(dbp, dname, handle, flags)
if (LF_ISSET(~(DB_AGGRESSIVE | DB_PRINTABLE | DB_SALVAGE)))
return (__db_ferr(dbenv, "DB->verify", 1));
if (handle == NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_SALVAGE requires a an output handle");
return (EINVAL);
}
@@ -184,7 +162,7 @@ __db_verify_arg(dbp, dname, handle, flags)
if (LF_ISSET(DB_AGGRESSIVE | DB_PRINTABLE))
return (__db_ferr(dbenv, "DB->verify", 1));
- /*
+ /*
* DB_ORDERCHKONLY is mutually exclusive with DB_SALVAGE and
* DB_NOORDERCHK, and requires a database name.
*/
@@ -192,7 +170,7 @@ __db_verify_arg(dbp, dname, handle, flags)
DB_ORDERCHKONLY, DB_SALVAGE | DB_NOORDERCHK)) != 0)
return (ret);
if (LF_ISSET(DB_ORDERCHKONLY) && dname == NULL) {
- __db_err(dbenv, "DB_ORDERCHKONLY requires a database name");
+ __db_errx(dbenv, "DB_ORDERCHKONLY requires a database name");
return (EINVAL);
}
return (0);
@@ -223,14 +201,14 @@ __db_verify(dbp, name, subdb, handle, callback, flags)
DB_ENV *dbenv;
DB_FH *fhp;
VRFY_DBINFO *vdp;
- int has, isbad, ret, t_ret;
+ int has_subdbs, isbad, ret, t_ret;
char *real_name;
dbenv = dbp->dbenv;
fhp = NULL;
vdp = NULL;
real_name = NULL;
- has = ret = isbad = 0;
+ has_subdbs = isbad = ret = 0;
F_SET(dbp, DB_AM_VERIFYING);
@@ -298,8 +276,8 @@ __db_verify(dbp, name, subdb, handle, callback, flags)
* and the mpool--manually.
*/
if ((ret = __db_dbenv_setup(dbp, NULL,
- name, TXN_INVALID, DB_ODDFILESIZE | DB_RDONLY)) != 0)
- return (ret);
+ name, subdb, TXN_INVALID, DB_ODDFILESIZE | DB_RDONLY)) != 0)
+ goto err;
/*
* Set our name in the Queue subsystem; we may need it later
@@ -307,13 +285,14 @@ __db_verify(dbp, name, subdb, handle, callback, flags)
*/
if (dbp->type == DB_QUEUE &&
(ret = __qam_set_ext_data(dbp, name)) != 0)
- return (ret);
+ goto err;
/* 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);
+ if ((ret = __memp_last_pgno(dbp->mpf, &vdp->last_pgno)) != 0)
+ goto err;
/*
* DB_ORDERCHKONLY is a special case; our file consists of
@@ -337,27 +316,25 @@ __db_verify(dbp, name, subdb, handle, callback, flags)
*/
if (LF_ISSET(DB_SALVAGE)) {
if ((ret = __db_salvage_init(vdp)) != 0)
- return (ret);
+ goto err;
/*
- * If we're not being aggressive, attempt to crack subdbs.
- * "has" will indicate whether the attempt has succeeded
+ * If we're not being aggressive, attempt to crack subdatabases.
+ * "has_subdbs" will indicate whether the attempt has succeeded
* (even in part), meaning that we have some semblance of
- * subdbs; on the walkpages pass, we print out
- * whichever data pages we have not seen.
+ * subdatabases; on the walkpages pass, we print out whichever
+ * data pages we have not seen.
*/
- if (!LF_ISSET(DB_AGGRESSIVE) && (__db_salvage_subdbs(dbp,
- vdp, handle, callback, flags, &has)) != 0)
+ if (!LF_ISSET(DB_AGGRESSIVE) && __db_salvage_subdbs(
+ dbp, vdp, handle, callback, flags, &has_subdbs) != 0)
isbad = 1;
/*
- * If we have subdatabases, we need to signal that if
- * any keys are found that don't belong to a subdatabase,
- * they'll need to have an "__OTHER__" subdatabase header
- * printed first. Flag this. Else, print a header for
- * the normal, non-subdb database.
+ * If we have subdatabases, flag if any keys are found that
+ * don't belong to a subdatabase -- they'll need to have an
+ * "__OTHER__" subdatabase header printed first.
*/
- if (has == 1)
+ if (has_subdbs)
F_SET(vdp, SALVAGE_PRINTHEADER);
}
@@ -392,12 +369,14 @@ __db_verify(dbp, name, subdb, handle, callback, flags)
__db_salvage_destroy(vdp);
}
-err: if (LF_ISSET(DB_SALVAGE) &&
- (has == 0 || F_ISSET(vdp, SALVAGE_PRINTFOOTER)))
+ /* Don't display a footer for a database holding other databases. */
+ if (LF_ISSET(DB_SALVAGE) &&
+ (!has_subdbs || F_ISSET(vdp, SALVAGE_PRINTFOOTER)))
(void)__db_prfooter(handle, callback);
+done: err:
/* Send feedback that we're done. */
-done: if (!LF_ISSET(DB_SALVAGE) && dbp->db_feedback != NULL)
+ if (!LF_ISSET(DB_SALVAGE) && dbp->db_feedback != NULL)
dbp->db_feedback(dbp, DB_VERIFY, 100);
if (fhp != NULL &&
@@ -423,7 +402,7 @@ done: if (!LF_ISSET(DB_SALVAGE) && dbp->db_feedback != NULL)
/* Make sure there's a public complaint if we found corruption. */
if (ret != 0)
- __db_err(dbenv, "%s: %s", name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", name);
return (ret);
}
@@ -456,17 +435,19 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
meta = (DBMETA *)mbuf;
dbp->type = DB_UNKNOWN;
+ if ((ret = __db_vrfy_getpageinfo(vdp, PGNO_BASE_MD, &pip)) != 0)
+ return (ret);
+
/*
* Seek to the metadata page.
* Note that if we're just starting a verification, dbp->pgsize
* 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 ||
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 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));
+ __db_err(dbenv, ret,
+ "Metadata page %lu cannot be read", (u_long)PGNO_BASE_MD);
return (ret);
}
@@ -574,6 +555,20 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
}
/*
+ * 26: Meta-flags.
+ */
+ if (meta->metaflags != 0) {
+ if (meta->metaflags == DBMETA_CHKSUM)
+ F_SET(pip, VRFY_HAS_CHKSUM);
+ else {
+ isbad = 1;
+ EPRINT((dbenv,
+ "Page %lu: bad meta-data flags value %#lx",
+ (u_long)PGNO_BASE_MD, (u_long)meta->metaflags));
+ }
+ }
+
+ /*
* 28-31: Free list page number.
* We'll verify its sensibility when we do inter-page
* verification later; for now, just store it.
@@ -587,8 +582,6 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
* this one page. We'll realloc later when we know how many
* pages there are.
*/
- if ((ret = __db_vrfy_getpageinfo(vdp, PGNO_BASE_MD, &pip)) != 0)
- return (ret);
pip->pgno = PGNO_BASE_MD;
pip->type = meta->type;
@@ -638,9 +631,8 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
for (i = 0; i <= vdp->last_pgno; 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 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;
@@ -649,7 +641,7 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
* 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 ((t_ret = __memp_fget(mpf, &i, NULL, 0, &h)) != 0) {
if (ret == 0)
ret = t_ret;
if (LF_ISSET(DB_SALVAGE))
@@ -677,11 +669,8 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
* 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.
+ *
+ * Verify info common to all page types.
*/
if (i != PGNO_BASE_MD) {
ret = __db_vrfy_common(dbp, vdp, h, i, flags);
@@ -895,9 +884,7 @@ __db_vrfy_structure(dbp, vdp, dbname, meta_pgno, flags)
goto err;
case DB_UNKNOWN:
default:
- /* This should only happen if the verifier is somehow broken. */
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__db_vrfy_structure");
goto err;
}
@@ -1038,29 +1025,25 @@ __db_vrfy_common(dbp, vdp, h, pgno, flags)
/*
* Hash expands the table by leaving some pages between the
- * old last and the new last totally zeroed. Its pgin function
- * should fix things, but we might not be using that (e.g. if
- * we're a subdatabase).
+ * old last and the new last totally zeroed. These pages may
+ * not be all zero if they were used, freed and then reallocated.
*
* Queue will create sparse files if sparse record numbers are used.
*/
if (pgno != 0 && PGNO(h) == 0) {
+ F_SET(pip, VRFY_IS_ALLZEROES);
for (p = (u_int8_t *)h; p < (u_int8_t *)h + dbp->pgsize; p++)
if (*p != 0) {
- EPRINT((dbenv,
- "Page %lu: partially zeroed page",
- (u_long)pgno));
- ret = DB_VERIFY_BAD;
- goto err;
+ F_CLR(pip, VRFY_IS_ALLZEROES);
+ break;
}
/*
- * It's totally zeroed; mark it as a hash, and we'll
+ * Mark it as a hash, and we'll
* check that that makes sense structurally later.
* (The queue verification doesn't care, since queues
* don't really have much in the way of structure.)
*/
pip->type = P_HASH;
- F_SET(pip, VRFY_IS_ALLZEROES);
ret = 0;
goto err; /* well, not really an err. */
}
@@ -1278,9 +1261,7 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
dbtype = DB_QUEUE;
break;
default:
- /* The verifier should never let us get here. */
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__db_vrfy_meta");
goto err;
}
@@ -1320,8 +1301,21 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
(u_long)pgno, (u_long)meta->pagesize));
}
- /* free list */
+ /* Flags */
+ if (meta->metaflags != 0) {
+ if (meta->metaflags == DBMETA_CHKSUM)
+ F_SET(pip, VRFY_HAS_CHKSUM);
+ else {
+ isbad = 1;
+ EPRINT((dbenv,
+ "Page %lu: bad meta-data flags value %#lx",
+ (u_long)PGNO_BASE_MD, (u_long)meta->metaflags));
+ }
+ }
+
/*
+ * Free list.
+ *
* If this is not the main, master-database meta page, it
* should not have a free list.
*/
@@ -1372,9 +1366,9 @@ __db_vrfy_freelist(dbp, vdp, meta, flags)
db_pgno_t cur_pgno, next_pgno;
int p, ret, t_ret;
- pgset = vdp->pgset;
- DB_ASSERT(pgset != NULL);
dbenv = dbp->dbenv;
+ pgset = vdp->pgset;
+ DB_ASSERT(dbenv, pgset != NULL);
if ((ret = __db_vrfy_getpageinfo(vdp, meta, &pip)) != 0)
return (ret);
@@ -1583,12 +1577,13 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
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);
+ DB_INIT_DBT(key, subdb, strlen(subdb));
memset(&data, 0, sizeof(data));
- if ((ret = __db_get(mdbp, NULL, &key, &data, 0)) != 0)
+ if ((ret = __db_get(mdbp, NULL, &key, &data, 0)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = ENOENT;
goto err;
+ }
if (data.size != sizeof(db_pgno_t)) {
EPRINT((dbenv, "Subdatabase entry of invalid size"));
@@ -1604,7 +1599,7 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
*/
DB_NTOHL(&meta_pgno);
- if ((ret = __memp_fget(mpf, &meta_pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &meta_pgno, NULL, 0, &h)) != 0)
goto err;
if ((ret = __db_vrfy_pgset(dbenv, dbp->pgsize, &pgset)) != 0)
@@ -1625,7 +1620,7 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
PGNO_INVALID, 0, DB_LOCK_INVALIDID, &pgsc)) != 0)
goto err;
while ((ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
- if ((ret = __memp_fget(mpf, &p, 0, &currpg)) != 0)
+ if ((ret = __memp_fget(mpf, &p, NULL, 0, &currpg)) != 0)
goto err;
if ((ret = __bam_vrfy_itemorder(dbp,
NULL, currpg, p, NUM_ENT(currpg), 1,
@@ -1677,7 +1672,7 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
pgno = BS_TO_PAGE(bucket, hmeta->spares);
while (pgno != PGNO_INVALID) {
if ((ret = __memp_fget(mpf,
- &pgno, 0, &currpg)) != 0)
+ &pgno, NULL, 0, &currpg)) != 0)
goto err;
if ((ret = __ham_vrfy_hashing(dbp,
NUM_ENT(currpg), hmeta, bucket, pgno,
@@ -1729,8 +1724,21 @@ __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));
+ DB_ENV *dbenv;
+ VRFY_PAGEINFO *pip;
+ int keyflag, ret, t_ret;
+
+ dbenv = dbp->dbenv;
+ DB_ASSERT(dbenv, LF_ISSET(DB_SALVAGE));
+
+ /*
+ * !!!
+ * We dump record numbers when salvaging Queue databases, but not for
+ * immutable Recno databases. The problem is we can't figure out the
+ * record number from the database page in the Recno case, while the
+ * offset in the file is sufficient for Queue.
+ */
+ keyflag = 0;
/* If we got this page in the subdb pass, we can safely skip it. */
if (__db_salvage_isdone(vdp, pgno))
@@ -1744,11 +1752,12 @@ __db_salvage(dbp, vdp, pgno, h, handle, callback, flags)
ret = __bam_vrfy_meta(dbp, vdp, (BTMETA *)h, pgno, flags);
break;
case P_QAMMETA:
+ keyflag = 1;
ret = __qam_vrfy_meta(dbp, vdp, (QMETA *)h, pgno, flags);
break;
case P_HASH:
- return (__ham_salvage(dbp,
- vdp, pgno, h, handle, callback, flags));
+ return (__ham_salvage(
+ dbp, vdp, pgno, h, handle, callback, flags));
case P_LBTREE:
return (__bam_salvage(dbp,
vdp, pgno, P_LBTREE, h, handle, callback, NULL, flags));
@@ -1778,13 +1787,30 @@ __db_salvage(dbp, vdp, pgno, h, handle, callback, flags)
case P_IRECNO:
case __P_DUPLICATE:
default:
- /* XXX: Should we be more aggressive here? */
+ /*
+ * There's no need to display an error, the page type was
+ * already checked and reported on.
+ */
return (0);
}
+ if (ret != 0)
+ return (ret);
- return (ret != 0 ? ret :
- __db_prheader(dbp, NULL, 0, 1,
- handle, callback, vdp, PGNO_BASE_MD));
+ /*
+ * We have to display the dump header if it's a metadata page. It's
+ * our last chance as the page was marked "seen" in the vrfy routine,
+ * and we won't see the page again. We don't display headers for
+ * the first database in a multi-database file, that database simply
+ * contains a list of subdatabases.
+ */
+ if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
+ return (ret);
+ if (!F_ISSET(pip, VRFY_HAS_SUBDBS))
+ ret = __db_prheader(
+ dbp, NULL, 0, keyflag, handle, callback, vdp, pgno);
+ if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
}
/*
@@ -1800,34 +1826,39 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
int (*callback) __P((void *, const void *));
u_int32_t flags;
{
+ DBC *dbc;
DBT unkdbt, key, *dbt;
DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t pgno;
u_int32_t pgtype;
- int ret, err_ret;
+ int ret, t_ret;
void *ovflbuf;
+ dbc = NULL;
dbenv = dbp->dbenv;
mpf = dbp->mpf;
- memset(&unkdbt, 0, sizeof(DBT));
- unkdbt.size = (u_int32_t)strlen("UNKNOWN") + 1;
- unkdbt.data = "UNKNOWN";
+ DB_INIT_DBT(unkdbt, "UNKNOWN", sizeof("UNKNOWN") - 1);
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(mpf, &pgno, 0, &h)) != 0) {
- err_ret = ret;
+ /*
+ * We make two passes -- in the first pass, skip SALVAGE_OVERFLOW
+ * pages, because they may be referenced by the standard database
+ * pages that we're resolving.
+ */
+ while ((t_ret =
+ __db_salvage_getnext(vdp, &dbc, &pgno, &pgtype, 1)) == 0) {
+ if ((t_ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
continue;
}
+ dbt = NULL;
switch (pgtype) {
case SALVAGE_LDUP:
case SALVAGE_LRECNODUP:
@@ -1835,28 +1866,17 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
/* FALLTHROUGH */
case SALVAGE_LBTREE:
case SALVAGE_LRECNO:
- if ((ret = __bam_salvage(dbp, vdp, pgno, pgtype,
- h, handle, callback, dbt, flags)) != 0)
- err_ret = ret;
+ if ((t_ret = __bam_salvage(dbp, vdp, pgno, pgtype,
+ h, handle, callback, dbt, flags)) != 0 && ret == 0)
+ ret = t_ret;
break;
case SALVAGE_OVERFLOW:
- /*
- * XXX:
- * This may generate multiple "UNKNOWN" keys in
- * a database with no dups. What to do?
- */
- if ((ret = __db_safe_goff(dbp,
- vdp, pgno, &key, &ovflbuf, flags)) != 0 ||
- (ret = __db_vrfy_prdbt(&key,
- 0, " ", handle, callback, 0, vdp)) != 0 ||
- (ret = __db_vrfy_prdbt(&unkdbt,
- 0, " ", handle, callback, 0, vdp)) != 0)
- err_ret = ret;
+ DB_ASSERT(dbenv, 0); /* Shouldn't ever happen. */
break;
case SALVAGE_HASH:
- if ((ret = __ham_salvage(
- dbp, vdp, pgno, h, handle, callback, flags)) != 0)
- err_ret = ret;
+ if ((t_ret = __ham_salvage(dbp, vdp,
+ pgno, h, handle, callback, flags)) != 0 && ret == 0)
+ ret = t_ret;
break;
case SALVAGE_INVALID:
case SALVAGE_IGNORE:
@@ -1865,19 +1885,70 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
* Shouldn't happen, but if it does, just do what the
* nice man says.
*/
- DB_ASSERT(0);
+ DB_ASSERT(dbenv, 0);
break;
}
- if ((ret = __memp_fput(mpf, h, 0)) != 0)
- err_ret = ret;
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
}
- __os_free(dbenv, ovflbuf);
+ /* We should have reached the end of the database. */
+ if (t_ret == DB_NOTFOUND)
+ t_ret = 0;
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+
+ /* Re-open the cursor so we traverse the database again. */
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ dbc = NULL;
+
+ /* Now, deal with any remaining overflow pages. */
+ while ((t_ret =
+ __db_salvage_getnext(vdp, &dbc, &pgno, &pgtype, 0)) == 0) {
+ if ((t_ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ continue;
+ }
+
+ switch (pgtype) {
+ case SALVAGE_OVERFLOW:
+ /*
+ * XXX:
+ * This may generate multiple "UNKNOWN" keys in
+ * a database with no dups. What to do?
+ */
+ if ((t_ret = __db_safe_goff(dbp,
+ vdp, pgno, &key, &ovflbuf, flags)) != 0 ||
+ ((vdp->type == DB_BTREE || vdp->type == DB_HASH) &&
+ (t_ret = __db_vrfy_prdbt(&unkdbt,
+ 0, " ", handle, callback, 0, vdp)) != 0) ||
+ (t_ret = __db_vrfy_prdbt(
+ &key, 0, " ", handle, callback, 0, vdp)) != 0)
+ if (ret == 0)
+ ret = t_ret;
+ break;
+ default:
+ DB_ASSERT(dbenv, 0); /* Shouldn't ever happen. */
+ break;
+ }
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+ /* We should have reached the end of the database. */
+ if (t_ret == DB_NOTFOUND)
+ t_ret = 0;
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
- if (err_ret != 0 && ret == 0)
- ret = err_ret;
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
- return (ret == DB_NOTFOUND ? 0 : ret);
+ __os_free(dbenv, ovflbuf);
+
+ return (ret);
}
/*
@@ -1916,7 +1987,7 @@ __db_vrfy_inpitem(dbp, h, pgno, i, is_btree, flags, himarkp, offsetp)
dbenv = dbp->dbenv;
- DB_ASSERT(himarkp != NULL);
+ DB_ASSERT(dbenv, himarkp != NULL);
inp = P_INP(dbp, h);
/*
@@ -2108,7 +2179,7 @@ __db_salvage_duptree(dbp, vdp, pgno, key, handle, callback, flags)
return (DB_VERIFY_BAD);
/* We have a plausible page. Try it. */
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
return (ret);
switch (TYPE(h)) {
@@ -2157,95 +2228,87 @@ __db_salvage_subdbs(dbp, vdp, handle, callback, flags, hassubsp)
u_int32_t flags;
int *hassubsp;
{
- BTMETA *btmeta;
DB *pgset;
DBC *pgsc;
+ DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
PAGE *h;
+ VRFY_PAGEINFO *pip;
db_pgno_t p, meta_pgno;
- int ret, err_ret;
+ int ret, t_ret;
+
+ *hassubsp = 0;
+ dbenv = dbp->dbenv;
pgset = NULL;
pgsc = NULL;
mpf = dbp->mpf;
- err_ret = 0;
+ h = NULL;
+ pip = NULL;
+ ret = 0;
+ /*
+ * Check to make sure the page is OK and find out if it contains
+ * subdatabases.
+ */
meta_pgno = PGNO_BASE_MD;
- if ((ret = __memp_fget(mpf, &meta_pgno, 0, &h)) != 0)
- return (ret);
-
- if (TYPE(h) == P_BTREEMETA)
- btmeta = (BTMETA *)h;
- else {
- /* Not a btree metadata, ergo no subdbs, so just return. */
- ret = 0;
- goto err;
- }
-
- /* If it's not a safe page, bail on the attempt. */
- if ((ret = __db_vrfy_common(dbp, vdp, h, PGNO_BASE_MD, flags)) != 0 ||
- (ret = __bam_vrfy_meta(dbp, vdp, btmeta, PGNO_BASE_MD, flags)) != 0)
- goto err;
-
- if (!F_ISSET(&btmeta->dbmeta, BTM_SUBDB)) {
- /* No subdbs, just return. */
- ret = 0;
- goto err;
+ if ((t_ret = __memp_fget(mpf, &meta_pgno, NULL, 0, &h)) == 0 &&
+ (t_ret = __db_vrfy_common(dbp, vdp, h, PGNO_BASE_MD, flags)) == 0 &&
+ (t_ret = __db_salvage(
+ dbp, vdp, PGNO_BASE_MD, h, handle, callback, flags)) == 0 &&
+ (t_ret = __db_vrfy_getpageinfo(vdp, 0, &pip)) == 0)
+ if (F_ISSET(pip, VRFY_HAS_SUBDBS))
+ *hassubsp = 1;
+ if (pip != NULL &&
+ (t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
+ ret = t_ret;
+ if (h != NULL) {
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ h = NULL;
}
-
- /* We think we've got subdbs. Mark it so. */
- *hassubsp = 1;
-
- if ((ret = __memp_fput(mpf, h, 0)) != 0)
+ if (ret != 0 || *hassubsp == 0)
return (ret);
/*
* We have subdbs. Try to crack them.
*
- * To do so, get a set of leaf pages in the master
- * database, and then walk each of the valid ones, salvaging
- * subdbs as we go. If any prove invalid, just drop them; we'll
- * pick them up on a later pass.
+ * To do so, get a set of leaf pages in the master database, and then
+ * walk each of the valid ones, salvaging subdbs as we go. If any
+ * prove invalid, just drop them; we'll pick them up on a later pass.
*/
- if ((ret = __db_vrfy_pgset(dbp->dbenv, dbp->pgsize, &pgset)) != 0)
- return (ret);
- if ((ret =
- __db_meta2pgset(dbp, vdp, PGNO_BASE_MD, flags, pgset)) != 0)
+ if ((ret = __db_vrfy_pgset(dbenv, dbp->pgsize, &pgset)) != 0)
+ goto err;
+ if ((ret = __db_meta2pgset(dbp, vdp, PGNO_BASE_MD, flags, pgset)) != 0)
goto err;
-
if ((ret = __db_cursor(pgset, NULL, &pgsc, 0)) != 0)
goto err;
- while ((ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
- if ((ret = __memp_fget(mpf, &p, 0, &h)) != 0) {
- err_ret = ret;
- continue;
+ while ((t_ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
+ if ((t_ret = __memp_fget(mpf, &p, NULL, 0, &h)) == 0 &&
+ (t_ret = __db_vrfy_common(dbp, vdp, h, p, flags)) == 0 &&
+ (t_ret =
+ __bam_vrfy(dbp, vdp, h, p, flags | DB_NOORDERCHK)) == 0)
+ t_ret = __db_salvage_subdbpg(
+ dbp, vdp, h, handle, callback, flags);
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+ if (h != NULL) {
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ h = NULL;
}
- if ((ret = __db_vrfy_common(dbp, vdp, h, p, flags)) != 0 ||
- (ret = __bam_vrfy(dbp,
- vdp, h, p, flags | DB_NOORDERCHK)) != 0)
- goto nextpg;
- if (TYPE(h) != P_LBTREE)
- goto nextpg;
- else if ((ret = __db_salvage_subdbpg(
- dbp, vdp, h, handle, callback, flags)) != 0)
- err_ret = ret;
-nextpg: if ((ret = __memp_fput(mpf, h, 0)) != 0)
- err_ret = ret;
}
- if (ret != DB_NOTFOUND)
- goto err;
- if ((ret = __db_c_close(pgsc)) != 0)
- goto err;
-
- ret = __db_close(pgset, NULL, 0);
- return ((ret == 0 && err_ret != 0) ? err_ret : ret);
+ if (t_ret != DB_NOTFOUND && ret == 0)
+ ret = t_ret;
-err: if (pgsc != NULL)
- (void)__db_c_close(pgsc);
- if (pgset != NULL)
- (void)__db_close(pgset, NULL, 0);
- (void)__memp_fput(mpf, h, 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 (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -2333,8 +2396,8 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
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(mpf, &meta_pgno, 0, &subpg)) != 0) {
+ if (!IS_VALID_PGNO(meta_pgno) || (ret =
+ __memp_fget(mpf, &meta_pgno, NULL, 0, &subpg)) != 0) {
err_ret = ret;
continue;
}
@@ -2395,7 +2458,8 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
if ((ret = __db_cursor(pgset, NULL, &pgsc, 0)) != 0)
goto err;
while ((ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
- if ((ret = __memp_fget(mpf, &p, 0, &subpg)) != 0) {
+ if ((ret =
+ __memp_fget(mpf, &p, NULL, 0, &subpg)) != 0) {
err_ret = ret;
continue;
}
@@ -2446,7 +2510,7 @@ __db_meta2pgset(dbp, vdp, pgno, flags, pgset)
mpf = dbp->mpf;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
return (ret);
switch (TYPE(h)) {
@@ -2495,8 +2559,8 @@ __db_guesspgsize(dbenv, fhp)
* our previous guess; that last one was probably the page size.
*/
for (i = 1; i <= 3; i++) {
- if (__os_seek(dbenv, fhp, guess,
- i, SSZ(DBMETA, type), 0, DB_OS_SEEK_SET) != 0)
+ if (__os_seek(
+ dbenv, fhp, i, guess, SSZ(DBMETA, type)) != 0)
break;
if (__os_read(dbenv,
fhp, &type, 1, &nr) != 0 || nr == 0)
diff --git a/db/db/db_vrfy_stub.c b/db/db/db_vrfy_stub.c
index 486802d7d..9bef99be0 100644
--- a/db/db/db_vrfy_stub.c
+++ b/db/db/db_vrfy_stub.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_vrfy_stub.c,v 11.6 2004/06/14 15:23:32 bostic Exp $
+ * $Id: db_vrfy_stub.c,v 12.5 2006/08/24 14:45:16 bostic Exp $
*/
-#include "db_config.h"
-
#ifndef HAVE_VERIFY
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
+#include "db_config.h"
#include "db_int.h"
#include "dbinc/db_page.h"
@@ -35,7 +31,7 @@ static int
__db_novrfy(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"library build did not include support for database verification");
return (DB_OPNOTSUP);
}
diff --git a/db/db/db_vrfyutil.c b/db/db/db_vrfyutil.c
index f1034af1f..414814079 100644
--- a/db/db/db_vrfyutil.c
+++ b/db/db/db_vrfyutil.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_vrfyutil.c,v 11.40 2004/10/11 18:47:50 bostic Exp $
+ * $Id: db_vrfyutil.c,v 12.12 2006/09/11 15:13:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_verify.h"
@@ -55,6 +49,10 @@ __db_vrfy_dbinfo_create(dbenv, pgsize, vdpp)
if ((ret = __db_set_pagesize(cdbp, pgsize)) != 0)
goto err;
+ /* If transactional, make sure we don't log. */
+ if (TXN_ON(dbenv) &&
+ (ret = __db_set_flags(cdbp, DB_TXN_NOT_DURABLE)) != 0)
+ goto err;
if ((ret = __db_open(cdbp,
NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0600, PGNO_BASE_MD)) != 0)
goto err;
@@ -65,6 +63,11 @@ __db_vrfy_dbinfo_create(dbenv, pgsize, vdpp)
if ((ret = __db_set_pagesize(pgdbp, pgsize)) != 0)
goto err;
+ /* If transactional, make sure we don't log. */
+ if (TXN_ON(dbenv) &&
+ (ret = __db_set_flags(pgdbp, DB_TXN_NOT_DURABLE)) != 0)
+ goto err;
+
if ((ret = __db_open(pgdbp,
NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0600, PGNO_BASE_MD)) != 0)
goto err;
@@ -102,13 +105,26 @@ __db_vrfy_dbinfo_destroy(dbenv, vdp)
DB_ENV *dbenv;
VRFY_DBINFO *vdp;
{
- VRFY_CHILDINFO *c, *d;
+ VRFY_CHILDINFO *c;
int t_ret, ret;
ret = 0;
- for (c = LIST_FIRST(&vdp->subdbs); c != NULL; c = d) {
- d = LIST_NEXT(c, links);
+ /*
+ * Discard active page structures. Ideally there wouldn't be any,
+ * but in some error cases we may not have cleared them all out.
+ */
+ while (LIST_FIRST(&vdp->activepips) != NULL)
+ if ((t_ret = __db_vrfy_putpageinfo(
+ dbenv, vdp, LIST_FIRST(&vdp->activepips))) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ break;
+ }
+
+ /* Discard subdatabase list structures. */
+ while ((c = LIST_FIRST(&vdp->subdbs)) != NULL) {
+ LIST_REMOVE(c, links);
__os_free(NULL, c);
}
@@ -121,8 +137,6 @@ __db_vrfy_dbinfo_destroy(dbenv, vdp)
if ((t_ret = __db_close(vdp->pgset, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
- DB_ASSERT(LIST_FIRST(&vdp->activepips) == NULL);
-
if (vdp->extents != NULL)
__os_free(dbenv, vdp->extents);
__os_free(dbenv, vdp);
@@ -142,6 +156,7 @@ __db_vrfy_getpageinfo(vdp, pgno, pipp)
db_pgno_t pgno;
VRFY_PAGEINFO **pipp;
{
+ DB_ENV *dbenv;
DBT key, data;
DB *pgdbp;
VRFY_PAGEINFO *pip;
@@ -166,14 +181,13 @@ __db_vrfy_getpageinfo(vdp, pgno, pipp)
*/
/* Case 1. */
- for (pip = LIST_FIRST(&vdp->activepips); pip != NULL;
- pip = LIST_NEXT(pip, links))
+ LIST_FOREACH(pip, &vdp->activepips, links)
if (pip->pgno == pgno)
- /* Found it. */
goto found;
/* Case 2. */
pgdbp = vdp->pgdbp;
+ dbenv = pgdbp->dbenv;
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
F_SET(&data, DB_DBT_MALLOC);
@@ -182,24 +196,21 @@ __db_vrfy_getpageinfo(vdp, pgno, pipp)
if ((ret = __db_get(pgdbp, NULL, &key, &data, 0)) == 0) {
/* Found it. */
- DB_ASSERT(data.size == sizeof(VRFY_PAGEINFO));
+ DB_ASSERT(dbenv, data.size == sizeof(VRFY_PAGEINFO));
pip = data.data;
- DB_ASSERT(pip->pi_refcount == 0);
LIST_INSERT_HEAD(&vdp->activepips, pip, links);
goto found;
} else if (ret != DB_NOTFOUND) /* Something nasty happened. */
return (ret);
/* Case 3 */
- if ((ret = __db_vrfy_pageinfo_create(pgdbp->dbenv, &pip)) != 0)
+ if ((ret = __db_vrfy_pageinfo_create(dbenv, &pip)) != 0)
return (ret);
LIST_INSERT_HEAD(&vdp->activepips, pip, links);
found: pip->pi_refcount++;
*pipp = pip;
-
- DB_ASSERT(pip->pi_refcount > 0);
return (0);
}
@@ -220,11 +231,6 @@ __db_vrfy_putpageinfo(dbenv, vdp, pip)
DB *pgdbp;
VRFY_PAGEINFO *p;
int ret;
-#ifdef DIAGNOSTIC
- int found;
-
- found = 0;
-#endif
if (--pip->pi_refcount > 0)
return (0);
@@ -241,22 +247,13 @@ __db_vrfy_putpageinfo(dbenv, vdp, pip)
if ((ret = __db_put(pgdbp, NULL, &key, &data, 0)) != 0)
return (ret);
- for (p = LIST_FIRST(&vdp->activepips); p != NULL;
- p = LIST_NEXT(p, links))
- if (p == pip) {
-#ifdef DIAGNOSTIC
- found++;
-#endif
- DB_ASSERT(p->pi_refcount == 0);
- LIST_REMOVE(p, links);
+ LIST_FOREACH(p, &vdp->activepips, links)
+ if (p == pip)
break;
- }
-#ifdef DIAGNOSTIC
- DB_ASSERT(found == 1);
-#endif
+ if (p != NULL)
+ LIST_REMOVE(p, links);
- DB_ASSERT(pip->pi_refcount == 0);
- __os_ufree(dbenv, pip);
+ __os_ufree(dbenv, p);
return (0);
}
@@ -281,6 +278,11 @@ __db_vrfy_pgset(dbenv, pgsize, dbpp)
return (ret);
if ((ret = __db_set_pagesize(dbp, pgsize)) != 0)
goto err;
+
+ /* If transactional, make sure we don't log. */
+ if (TXN_ON(dbenv) &&
+ (ret = __db_set_flags(dbp, DB_TXN_NOT_DURABLE)) != 0)
+ goto err;
if ((ret = __db_open(dbp,
NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0600, PGNO_BASE_MD)) == 0)
*dbpp = dbp;
@@ -316,7 +318,7 @@ __db_vrfy_pgset_get(dbp, pgno, valp)
F_SET(&data, DB_DBT_USERMEM);
if ((ret = __db_get(dbp, NULL, &key, &data, 0)) == 0) {
- DB_ASSERT(data.size == sizeof(int));
+ DB_ASSERT(dbp->dbenv, data.size == sizeof(int));
} else if (ret == DB_NOTFOUND)
val = 0;
else
@@ -353,7 +355,7 @@ __db_vrfy_pgset_inc(dbp, pgno)
F_SET(&data, DB_DBT_USERMEM);
if ((ret = __db_get(dbp, NULL, &key, &data, 0)) == 0) {
- DB_ASSERT(data.size == sizeof(int));
+ DB_ASSERT(dbp->dbenv, data.size == sizeof(int));
} else if (ret != DB_NOTFOUND)
return (ret);
@@ -390,7 +392,7 @@ __db_vrfy_pgset_next(dbc, pgnop)
if ((ret = __db_c_get(dbc, &key, &data, DB_NEXT)) != 0)
return (ret);
- DB_ASSERT(key.size == sizeof(db_pgno_t));
+ DB_ASSERT(dbc->dbp->dbenv, key.size == sizeof(db_pgno_t));
*pgnop = pgno;
return (0);
@@ -537,7 +539,7 @@ __db_vrfy_ccset(dbc, pgno, cipp)
if ((ret = __db_c_get(dbc, &key, &data, DB_SET)) != 0)
return (ret);
- DB_ASSERT(data.size == sizeof(VRFY_CHILDINFO));
+ DB_ASSERT(dbc->dbp->dbenv, data.size == sizeof(VRFY_CHILDINFO));
*cipp = (VRFY_CHILDINFO *)data.data;
return (0);
@@ -565,7 +567,7 @@ __db_vrfy_ccnext(dbc, cipp)
if ((ret = __db_c_get(dbc, &key, &data, DB_NEXT_DUP)) != 0)
return (ret);
- DB_ASSERT(data.size == sizeof(VRFY_CHILDINFO));
+ DB_ASSERT(dbc->dbp->dbenv, data.size == sizeof(VRFY_CHILDINFO));
*cipp = (VRFY_CHILDINFO *)data.data;
return (0);
@@ -595,11 +597,11 @@ __db_vrfy_ccclose(dbc)
* Constructor for VRFY_PAGEINFO; allocates and initializes.
*/
static int
-__db_vrfy_pageinfo_create(dbenv, pgipp)
+__db_vrfy_pageinfo_create(dbenv, pipp)
DB_ENV *dbenv;
- VRFY_PAGEINFO **pgipp;
+ VRFY_PAGEINFO **pipp;
{
- VRFY_PAGEINFO *pgip;
+ VRFY_PAGEINFO *pip;
int ret;
/*
@@ -609,13 +611,11 @@ __db_vrfy_pageinfo_create(dbenv, pgipp)
* 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)
+ if ((ret = __os_umalloc(dbenv, sizeof(VRFY_PAGEINFO), &pip)) != 0)
return (ret);
- memset(pgip, 0, sizeof(VRFY_PAGEINFO));
+ memset(pip, 0, sizeof(VRFY_PAGEINFO));
- DB_ASSERT(pgip->pi_refcount == 0);
-
- *pgipp = pgip;
+ *pipp = pip;
return (0);
}
@@ -668,16 +668,17 @@ __db_salvage_destroy(vdp)
* in this search, as well as the page we're returning.
*
* PUBLIC: int __db_salvage_getnext
- * PUBLIC: __P((VRFY_DBINFO *, db_pgno_t *, u_int32_t *));
+ * PUBLIC: __P((VRFY_DBINFO *, DBC **, db_pgno_t *, u_int32_t *, int));
*/
int
-__db_salvage_getnext(vdp, pgnop, pgtypep)
+__db_salvage_getnext(vdp, dbcp, pgnop, pgtypep, skip_overflow)
VRFY_DBINFO *vdp;
+ DBC **dbcp;
db_pgno_t *pgnop;
u_int32_t *pgtypep;
+ int skip_overflow;
{
DB *dbp;
- DBC *dbc;
DBT key, data;
int ret;
u_int32_t pgtype;
@@ -687,30 +688,29 @@ __db_salvage_getnext(vdp, pgnop, pgtypep)
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
- if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
+ if (*dbcp == NULL &&
+ (ret = __db_cursor(dbp, NULL, dbcp, 0)) != 0)
return (ret);
- while ((ret = __db_c_get(dbc, &key, &data, DB_NEXT)) == 0) {
- DB_ASSERT(data.size == sizeof(u_int32_t));
+ while ((ret = __db_c_get(*dbcp, &key, &data, DB_NEXT)) == 0) {
+ DB_ASSERT(dbp->dbenv, data.size == sizeof(u_int32_t));
memcpy(&pgtype, data.data, sizeof(pgtype));
- if ((ret = __db_c_del(dbc, 0)) != 0)
- goto err;
- if (pgtype != SALVAGE_IGNORE)
- goto found;
- }
+ if (skip_overflow && pgtype == SALVAGE_OVERFLOW)
+ continue;
- /* No more entries--ret probably equals DB_NOTFOUND. */
+ if ((ret = __db_c_del(*dbcp, 0)) != 0)
+ return (ret);
+ if (pgtype != SALVAGE_IGNORE) {
+ DB_ASSERT(dbp->dbenv, key.size == sizeof(db_pgno_t));
+ DB_ASSERT(dbp->dbenv, data.size == sizeof(u_int32_t));
- if (0) {
-found: DB_ASSERT(key.size == sizeof(db_pgno_t));
- DB_ASSERT(data.size == sizeof(u_int32_t));
-
- *pgnop = *(db_pgno_t *)key.data;
- *pgtypep = *(u_int32_t *)data.data;
+ *pgnop = *(db_pgno_t *)key.data;
+ *pgtypep = *(u_int32_t *)data.data;
+ break;
+ }
}
-err: (void)__db_c_close(dbc);
return (ret);
}
@@ -753,8 +753,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 = __db_get(dbp, NULL, &key, &data, 0);
- if (ret == 0) {
+ if ((ret = __db_get(dbp, NULL, &key, &data, 0)) == 0) {
/*
* The key's already here. Check and see if it's already
* marked done. If it is, return DB_KEYEXIST. If it's not,
@@ -887,11 +886,12 @@ __db_vrfy_prdbt(dbtp, checkprint, prefix, handle, callback, is_recno, vdp)
* Check and clear the SALVAGE_PRINTHEADER flag; if
* it was set, print a subdatabase header.
*/
- if (F_ISSET(vdp, SALVAGE_PRINTHEADER))
+ if (F_ISSET(vdp, SALVAGE_PRINTHEADER)) {
(void)__db_prheader(
NULL, "__OTHER__", 0, 0, handle, callback, vdp, 0);
- F_CLR(vdp, SALVAGE_PRINTHEADER);
- F_SET(vdp, SALVAGE_PRINTFOOTER);
+ F_CLR(vdp, SALVAGE_PRINTHEADER);
+ F_SET(vdp, SALVAGE_PRINTFOOTER);
+ }
/*
* Even if the printable flag wasn't set by our immediate
diff --git a/db/db185/db185.c b/db/db185/db185.c
index 8399eac42..484b43676 100644
--- a/db/db185/db185.c
+++ b/db/db185/db185.c
@@ -1,27 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db185.c,v 11.35 2004/03/24 20:37:35 bostic Exp $
+ * $Id: db185.c,v 12.7 2006/08/31 17:59:25 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h>
-#include <string.h>
-#endif
-
-#include "db_int.h"
#include "db185_int.h"
static int db185_close __P((DB185 *));
@@ -89,12 +83,6 @@ __db185_open(file, oflags, mode, type, openinfo)
(void)dbp->set_bt_minkey(dbp, bi->minkeypage);
if (bi->psize != 0)
(void)dbp->set_pagesize(dbp, bi->psize);
- /*
- * !!!
- * Comparisons and prefix calls work because the DBT
- * structures in 1.85 and 2.0 have the same initial
- * fields.
- */
if (bi->prefix != NULL) {
db185p->prefix = bi->prefix;
dbp->set_bt_prefix(dbp, db185_prefix);
@@ -156,7 +144,8 @@ __db185_open(file, oflags, mode, type, openinfo)
* that in DB 2.0, so do that cast.
*/
if (file != NULL) {
- if (oflags & O_CREAT && __os_exists(file, NULL) != 0)
+ if (oflags & O_CREAT &&
+ __os_exists(NULL, file, NULL) != 0)
if (__os_openhandle(NULL, file,
oflags, mode, &fhp) == 0)
(void)__os_closehandle(NULL, fhp);
@@ -546,7 +535,14 @@ db185_compare(dbp, a, b)
DB *dbp;
const DBT *a, *b;
{
- return (((DB185 *)dbp->api_internal)->compare(a, b));
+ DBT185 a185, b185;
+
+ a185.data = a->data;
+ a185.size = a->size;
+ b185.data = b->data;
+ b185.size = b->size;
+
+ return (((DB185 *)dbp->api_internal)->compare(&a185, &b185));
}
/*
@@ -558,7 +554,14 @@ db185_prefix(dbp, a, b)
DB *dbp;
const DBT *a, *b;
{
- return (((DB185 *)dbp->api_internal)->prefix(a, b));
+ DBT185 a185, b185;
+
+ a185.data = a->data;
+ a185.size = a->size;
+ b185.data = b->data;
+ b185.size = b->size;
+
+ return (((DB185 *)dbp->api_internal)->prefix(&a185, &b185));
}
/*
diff --git a/db/db185/db185_int.in b/db/db185/db185_int.in
index f9bfdbba0..acc44c91a 100644
--- a/db/db185/db185_int.in
+++ b/db/db185/db185_int.in
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -36,7 +36,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db185_int.in,v 11.14 2004/01/28 03:35:59 bostic Exp $
+ * $Id: db185_int.in,v 12.4 2006/08/24 14:45:17 bostic Exp $
*/
#ifndef _DB185_INT_H_
@@ -82,8 +82,8 @@ typedef struct __db185 {
*/
DBC *dbc; /* DB cursor. */
/* Various callback functions. */
- int (*compare) __P((const DBT *, const DBT *));
- size_t (*prefix) __P((const DBT *, const DBT *));
+ int (*compare) __P((const DBT185 *, const DBT185 *));
+ size_t (*prefix) __P((const DBT185 *, const DBT185 *));
u_int32_t (*hash) __P((const void *, size_t));
} DB185;
@@ -96,9 +96,9 @@ typedef struct {
u_int32_t minkeypage; /* minimum keys per page */
u_int32_t psize; /* page size */
int (*compare) /* comparison function */
- __P((const DBT *, const DBT *));
+ __P((const DBT185 *, const DBT185 *));
size_t (*prefix) /* prefix function */
- __P((const DBT *, const DBT *));
+ __P((const DBT185 *, const DBT185 *));
int lorder; /* byte order */
} BTREEINFO;
diff --git a/db/db_archive/db_archive.c b/db/db_archive/db_archive.c
index d5db42dee..48094e20f 100644
--- a/db/db_archive/db_archive.c
+++ b/db/db_archive/db_archive.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_archive.c,v 11.46 2004/06/10 01:00:08 bostic Exp $
+ * $Id: db_archive.c,v 12.9 2006/08/26 09:23:00 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include "db_int.h"
-
int main __P((int, char *[]));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -36,13 +29,17 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- const char *progname = "db_archive";
DB_ENV *dbenv;
u_int32_t flags;
int ch, exitval, ret, verbose;
char **file, *home, **list, *passwd;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbenv = NULL;
@@ -80,6 +77,12 @@ main(argc, argv)
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
case 'v':
+ /*
+ * !!!
+ * The verbose flag no longer actually does anything,
+ * but it's left rather than adding it back at some
+ * future date.
+ */
verbose = 1;
break;
case '?':
@@ -117,8 +120,7 @@ main(argc, argv)
* If attaching to a pre-existing environment fails, create a
* private one and try again.
*/
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
(ret == DB_VERSION_MISMATCH ||
(ret = dbenv->open(dbenv, home, DB_CREATE |
DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
@@ -161,13 +163,12 @@ int
usage()
{
(void)fprintf(stderr,
- "usage: db_archive [-adlsVv] [-h home] [-P password]\n");
+ "usage: %s [-adlsVv] [-h home] [-P password]\n", progname);
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_checkpoint/db_checkpoint.c b/db/db_checkpoint/db_checkpoint.c
index 538b66ddc..df0e5e286 100644
--- a/db/db_checkpoint/db_checkpoint.c
+++ b/db/db_checkpoint/db_checkpoint.c
@@ -1,47 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_checkpoint.c,v 11.54 2004/03/24 15:13:12 bostic Exp $
+ * $Id: db_checkpoint.c,v 12.15 2006/08/26 09:23:25 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-#include "dbinc/db_page.h"
-#include "dbinc/db_am.h"
-
int main __P((int, char *[]));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -51,14 +30,18 @@ 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, exitval, once, ret, verbose;
- char *home, *logfile, *passwd;
+ char *home, *logfile, *passwd, time_buf[CTIME_BUFLEN];
+
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
- if ((ret = version_check(progname)) != 0)
+ if ((ret = version_check()) != 0)
return (ret);
/*
@@ -86,7 +69,7 @@ main(argc, argv)
if (__db_getlong(NULL, progname,
optarg, 1, (long)MAX_UINT32_T, &argval))
return (EXIT_FAILURE);
- kbytes = argval;
+ kbytes = (u_int32_t)argval;
break;
case 'L':
logfile = optarg;
@@ -104,7 +87,7 @@ main(argc, argv)
if (__db_getlong(NULL, progname,
optarg, 1, (long)MAX_UINT32_T, &argval))
return (EXIT_FAILURE);
- minutes = argval;
+ minutes = (u_int32_t)argval;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
@@ -126,7 +109,7 @@ main(argc, argv)
(void)fprintf(stderr,
"%s: at least one of -1, -k and -p must be specified\n",
progname);
- return (EXIT_FAILURE);
+ return (usage());
}
/* Handle possible interruptions. */
@@ -154,18 +137,16 @@ main(argc, argv)
dbenv->err(dbenv, ret, "set_passwd");
goto shutdown;
}
- /* Initialize the environment. */
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0) {
- dbenv->err(dbenv, ret, "open");
- goto shutdown;
- }
- /* Register the standard pgin/pgout functions, in case we do I/O. */
- if ((ret = dbenv->memp_register(
- dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0) {
- dbenv->err(dbenv, ret,
- "DB_ENV->memp_register: failed to register access method functions");
+ /*
+ * If attaching to a pre-existing environment fails, create a
+ * private one and try again.
+ */
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
+ (!once || ret == DB_VERSION_MISMATCH ||
+ (ret = dbenv->open(dbenv, home,
+ DB_CREATE | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
+ dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
}
@@ -178,7 +159,8 @@ main(argc, argv)
while (!__db_util_interrupted()) {
if (verbose) {
(void)time(&now);
- dbenv->errx(dbenv, "checkpoint begin: %s", ctime(&now));
+ dbenv->errx(dbenv,
+ "checkpoint begin: %s", __db_ctime(&now, time_buf));
}
if ((ret = dbenv->txn_checkpoint(dbenv,
@@ -190,7 +172,7 @@ main(argc, argv)
if (verbose) {
(void)time(&now);
dbenv->errx(dbenv,
- "checkpoint complete: %s", ctime(&now));
+ "checkpoint complete: %s", __db_ctime(&now, time_buf));
}
if (once)
@@ -205,7 +187,7 @@ shutdown: exitval = 1;
/* Clean up the logfile. */
if (logfile != NULL)
- remove(logfile);
+ (void)remove(logfile);
/* Clean up the environment. */
if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
@@ -226,15 +208,13 @@ shutdown: exitval = 1;
int
usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_checkpoint [-1Vv]",
+ (void)fprintf(stderr, "usage: %s [-1Vv]\n\t%s\n", progname,
"[-h home] [-k kbytes] [-L file] [-P password] [-p min]");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_deadlock/db_deadlock.c b/db/db_deadlock/db_deadlock.c
index cc91db25d..4e82bfef5 100644
--- a/db/db_deadlock/db_deadlock.c
+++ b/db/db_deadlock/db_deadlock.c
@@ -1,45 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_deadlock.c,v 11.45 2004/03/24 15:13:12 bostic Exp $
+ * $Id: db_deadlock.c,v 12.13 2006/08/26 09:23:00 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-
int main __P((int, char *[]));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -48,23 +29,27 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- const char *progname = "db_deadlock";
DB_ENV *dbenv;
u_int32_t atype;
time_t now;
u_long secs, usecs;
int ch, exitval, ret, verbose;
- char *home, *logfile, *str;
+ char *home, *logfile, *passwd, *str, time_buf[CTIME_BUFLEN];
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbenv = NULL;
atype = DB_LOCK_DEFAULT;
- home = logfile = NULL;
+ home = logfile = passwd = NULL;
secs = usecs = 0;
exitval = verbose = 0;
- while ((ch = getopt(argc, argv, "a:h:L:t:Vvw")) != EOF)
+ while ((ch = getopt(argc, argv, "a:h:L:P:t:Vv")) != EOF)
switch (ch) {
case 'a':
switch (optarg[0]) {
@@ -102,6 +87,15 @@ main(argc, argv)
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 't':
if ((str = strchr(optarg, '.')) != NULL) {
*str++ = '\0';
@@ -116,18 +110,12 @@ main(argc, argv)
return (usage());
break;
-
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
case 'v':
verbose = 1;
break;
- case 'w': /* Undocumented. */
- /* Detect every 100ms (100000 us) when polling. */
- secs = 0;
- usecs = 100000;
- break;
case '?':
default:
return (usage());
@@ -158,14 +146,19 @@ main(argc, argv)
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;
+ }
+
if (verbose) {
(void)dbenv->set_verbose(dbenv, DB_VERB_DEADLOCK, 1);
(void)dbenv->set_verbose(dbenv, DB_VERB_WAITSFOR, 1);
}
/* An environment is required. */
- if ((ret =
- dbenv->open(dbenv, home, DB_INIT_LOCK | DB_USE_ENVIRON, 0)) != 0) {
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0) {
dbenv->err(dbenv, ret, "open");
goto shutdown;
}
@@ -173,7 +166,8 @@ main(argc, argv)
while (!__db_util_interrupted()) {
if (verbose) {
(void)time(&now);
- dbenv->errx(dbenv, "running at %.24s", ctime(&now));
+ dbenv->errx(dbenv,
+ "running at %.24s", __db_ctime(&now, time_buf));
}
if ((ret = dbenv->lock_detect(dbenv, 0, atype, NULL)) != 0) {
@@ -202,6 +196,9 @@ shutdown: exitval = 1;
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -211,15 +208,14 @@ shutdown: exitval = 1;
int
usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_deadlock [-Vv]",
- "[-a e | m | n | o | W | w | y] [-h home] [-L file] [-t sec.usec]");
+ (void)fprintf(stderr,
+ "usage: %s [-Vv] [-a e | m | n | o | W | w | y]\n\t%s\n", progname,
+ "[-h home] [-L file] [-P password] [-t sec.usec]");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_dump/db_dump.c b/db/db_dump/db_dump.c
index 732a4c62f..9202e53c7 100644
--- a/db/db_dump/db_dump.c
+++ b/db/db_dump/db_dump.c
@@ -1,39 +1,32 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_dump.c,v 11.99 2004/10/11 18:53:13 bostic Exp $
+ * $Id: db_dump.c,v 12.9 2006/08/26 09:23:01 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
int db_init __P((DB_ENV *, char *, int, u_int32_t, 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 *));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -42,7 +35,6 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- const char *progname = "db_dump";
DB_ENV *dbenv;
DB *dbp;
u_int32_t cache;
@@ -51,7 +43,12 @@ main(argc, argv)
int ret, Rflag, rflag, resize, subs;
char *dopt, *home, *passwd, *subname;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbenv = NULL;
@@ -223,7 +220,7 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
}
if (dopt != NULL) {
- if ((ret = __db_dumptree(dbp, dopt, NULL)) != 0) {
+ if ((ret = __db_dumptree(dbp, NULL, dopt, NULL)) != 0) {
dbp->err(dbp, ret, "__db_dumptree: %s", argv[0]);
goto err;
}
@@ -291,7 +288,7 @@ db_init(dbenv, home, is_salvage, cache, is_privatep)
* 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.
*
- * If we are not doing a salvage, we wish to use the DB_JOINENV flag;
+ * If we are not doing a salvage, we want to join the environment;
* 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
@@ -305,8 +302,8 @@ db_init(dbenv, home, is_salvage, cache, is_privatep)
* before we create our own.
*/
*is_privatep = 0;
- if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON |
- (is_salvage ? DB_INIT_MPOOL : DB_JOINENV), 0)) == 0)
+ if ((ret = dbenv->open(dbenv, home,
+ DB_USE_ENVIRON | (is_salvage ? DB_INIT_MPOOL : 0), 0)) == 0)
return (0);
if (ret == DB_VERSION_MISMATCH)
goto err;
@@ -490,15 +487,14 @@ show_subs(dbp)
int
usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_dump [-klNprRV]",
+ (void)fprintf(stderr, "usage: %s [-klNprRV]\n\t%s\n",
+ progname,
"[-d ahr] [-f output] [-h home] [-P password] [-s database] db_file");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_dump185/db_dump185.c b/db/db_dump185/db_dump185.c
index 2fb3cc5ab..14968a3dd 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_dump185.c,v 11.19 2004/01/28 03:36:00 bostic Exp $
+ * $Id: db_dump185.c,v 12.4 2006/08/26 09:23:04 bostic Exp $
*/
#ifndef lint
static char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
#include <sys/types.h>
diff --git a/db/db_hotbackup/db_hotbackup.c b/db/db_hotbackup/db_hotbackup.c
new file mode 100644
index 000000000..6bafd3659
--- /dev/null
+++ b/db/db_hotbackup/db_hotbackup.c
@@ -0,0 +1,824 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db_hotbackup.c,v 1.30 2006/08/26 09:23:07 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/log.h"
+#include "dbinc/db_page.h"
+#include "dbinc/qam.h"
+
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
+enum which_open { OPEN_ORIGINAL, OPEN_HOT_BACKUP };
+
+int backup_dir_clean __P((DB_ENV *, char *, int *, int, int));
+int data_copy __P((DB_ENV *, const char *, const char *, const char *, int));
+int env_init __P((DB_ENV **,
+ char *, const char **, const char ***, char *, enum which_open));
+int main __P((int, char *[]));
+int read_data_dir __P((DB_ENV *, char *, char *, const char *, int, int));
+int read_log_dir __P((DB_ENV *, char *, char *, const char *, int *, int, int));
+int usage __P((void));
+int version_check __P((void));
+
+const char *progname;
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ extern char *optarg;
+ extern int optind;
+ time_t now;
+ DB_ENV *dbenv;
+ u_int data_cnt, data_next;
+ int ch, checkpoint, copy_min, db_config, exitval;
+ int remove_max, ret, update, verbose;
+ char *backup_dir, **data_dir, *home, *passwd;
+ const char **ddir, **dir, *log_dir;
+ char home_buf[DB_MAXPATHLEN], time_buf[CTIME_BUFLEN];
+
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
+ return (ret);
+
+ checkpoint = db_config = data_cnt =
+ data_next = exitval = update = verbose = 0;
+ data_dir = NULL;
+ backup_dir = home = passwd = NULL;
+ log_dir = NULL;
+ copy_min = remove_max = 0;
+ while ((ch = getopt(argc, argv, "b:cDd:h:l:P:uVv")) != EOF)
+ switch (ch) {
+ case 'b':
+ backup_dir = optarg;
+ break;
+ case 'c':
+ checkpoint = 1;
+ break;
+ case 'D':
+ db_config = 1;
+ break;
+ case 'd':
+ /*
+ * User can specify a list of directories -- keep an
+ * array, leaving room for the trailing NULL.
+ */
+ if (data_dir == NULL || data_next >= data_cnt - 2) {
+ data_cnt = data_cnt == 0 ? 20 : data_cnt * 2;
+ if ((data_dir = realloc(data_dir,
+ data_cnt * sizeof(*data_dir))) == NULL) {
+ fprintf(stderr, "%s: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ }
+ data_dir[data_next++] = optarg;
+ break;
+ case 'h':
+ home = optarg;
+ break;
+ case 'l':
+ log_dir = 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 'u':
+ update = 1;
+ break;
+ case 'V':
+ printf("%s\n", db_version(NULL, NULL, NULL));
+ return (EXIT_SUCCESS);
+ case 'v':
+ verbose = 1;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 0)
+ return (usage());
+
+ if (db_config && (data_dir != NULL || log_dir != NULL)) {
+ fprintf(stderr,
+ "%s: cannot specify -D and -d or -l\n", progname);
+ return (usage());
+ }
+
+ /* Handle possible interruptions. */
+ __db_util_siginit();
+
+ /*
+ * The home directory defaults to the environment variable DB_HOME.
+ * The log directory defaults to the home directory.
+ *
+ * We require a source database environment directory and a target
+ * backup directory.
+ */
+ if (home == NULL) {
+ home = home_buf;
+ if ((ret = __os_getenv(
+ NULL, "DB_HOME", &home, sizeof(home_buf))) != 0) {
+ fprintf(stderr,
+ "%s failed to get environment variable DB_HOME: %s\n",
+ progname, db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+ /*
+ * home set to NULL if __os_getenv failed to find DB_HOME.
+ */
+ }
+ if (home == NULL) {
+ fprintf(stderr,
+ "%s: no source database environment specified\n", progname);
+ return (usage());
+ }
+ if (backup_dir == NULL) {
+ fprintf(stderr,
+ "%s: no target backup directory specified\n", progname);
+ return (usage());
+ }
+
+ /* NULL-terminate any list of data directories. */
+ if (data_dir != NULL)
+ data_dir[data_next] = NULL;
+
+ if (verbose) {
+ (void)time(&now);
+ printf("%s: hot backup started at %s",
+ progname, __db_ctime(&now, time_buf));
+ }
+
+ ddir = NULL;
+ /* Open the source environment. */
+ if ((ret = env_init(&dbenv, home,
+ (db_config || log_dir != NULL) ? &log_dir : NULL,
+ db_config ? &ddir : NULL, passwd, OPEN_ORIGINAL)) != 0)
+ goto shutdown;
+
+ if (!db_config)
+ ddir = (const char **)data_dir;
+
+ if (log_dir == NULL)
+ log_dir = home;
+
+ if (db_config && __os_abspath(log_dir)) {
+ fprintf(stderr,
+ "%s: DB_CONFIG must not contain an absolute path for the log directory",
+ progname);
+ goto shutdown;
+ }
+
+ /*
+ * If the -c option is specified, checkpoint the source home
+ * database environment, and remove any unnecessary log files.
+ */
+ if (checkpoint) {
+ if (verbose)
+ printf("%s: %s: force checkpoint\n", progname, home);
+ if ((ret =
+ dbenv->txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->txn_checkpoint");
+ goto shutdown;
+ }
+ if (!update) {
+ if (verbose)
+ printf("%s: %s: remove unnecessary log files\n",
+ progname, home);
+ if ((ret = dbenv->log_archive(dbenv,
+ NULL, DB_ARCH_REMOVE)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive");
+ goto shutdown;
+ }
+ }
+ }
+
+ /*
+ * If the target directory for the backup does not exist, create it
+ * with mode read-write-execute for the owner. Ignore errors here,
+ * it's simpler and more portable to just always try the create. If
+ * there's a problem, we'll fail with reasonable errors later.
+ */
+ (void)__os_mkdir(NULL, backup_dir, __db_omode("rwx------"));
+
+ /*
+ * If the target directory for the backup does exist and the -u option
+ * was specified, all log files in the target directory are removed;
+ * if the -u option was not specified, all files in the target directory
+ * are removed.
+ */
+ if ((ret = backup_dir_clean(
+ dbenv, backup_dir, &remove_max, update, verbose)) != 0)
+ goto shutdown;
+
+ /*
+ * If the -u option was not specified, copy all database files found in
+ * the database environment home directory, or any directory specified
+ * using the -d option, into the target directory for the backup.
+ */
+ if (!update) {
+ if (read_data_dir(dbenv, home,
+ backup_dir, home, verbose, db_config) != 0)
+ goto shutdown;
+ if (ddir != NULL)
+ for (dir = &ddir[0]; *dir != NULL; ++dir) {
+ if (__os_abspath(*dir)) {
+ fprintf(stderr,
+ "%s: data directory '%s' is absolute path, not permitted with -D option\n",
+ progname, *dir);
+ goto shutdown;
+ }
+ if (read_data_dir(dbenv, home,
+ backup_dir, *dir, verbose, db_config) != 0)
+ goto shutdown;
+ }
+ }
+
+ /*
+ * Copy all log files found in the directory specified by the -l option
+ * (or in the database environment home directory, if no -l option was
+ * specified), into the target directory for the backup.
+ *
+ * The log directory defaults to the home directory.
+ */
+ if (read_log_dir(dbenv, db_config ? home : NULL,
+ backup_dir, log_dir, &copy_min, update, verbose) != 0)
+ goto shutdown;
+
+ /*
+ * If we're updating a snapshot, the lowest-numbered log file copied
+ * into the backup directory should be less than, or equal to, the
+ * highest-numbered log file removed from the backup directory during
+ * cleanup.
+ */
+ if (update && remove_max < copy_min &&
+ !(remove_max == 0 && copy_min == 1)) {
+ fprintf(stderr,
+ "%s: the largest log file removed (%d) must be greater\n",
+ progname, remove_max);
+ fprintf(stderr,
+ "%s: than or equal the smallest log file copied (%d)\n",
+ progname, copy_min);
+ goto shutdown;
+ }
+
+ /* Close the source environment. */
+ if ((ret = dbenv->close(dbenv, 0)) != 0) {
+ fprintf(stderr,
+ "%s: dbenv->close: %s\n", progname, db_strerror(ret));
+ dbenv = NULL;
+ goto shutdown;
+ }
+ /* Perform catastrophic recovery on the hot backup. */
+ if (verbose)
+ printf("%s: %s: run catastrophic recovery\n",
+ progname, backup_dir);
+ if ((ret = env_init(
+ &dbenv, backup_dir, NULL, NULL, passwd, OPEN_HOT_BACKUP)) != 0)
+ goto shutdown;
+
+ /*
+ * Remove any unnecessary log files from the hot backup.
+ */
+ if (verbose)
+ printf("%s: %s: remove unnecessary log files\n",
+ progname, backup_dir);
+ if ((ret =
+ dbenv->log_archive(dbenv, NULL, DB_ARCH_REMOVE)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive");
+ goto shutdown;
+ }
+
+ if (0) {
+shutdown: exitval = 1;
+ }
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
+ exitval = 1;
+ fprintf(stderr,
+ "%s: dbenv->close: %s\n", progname, db_strerror(ret));
+ }
+
+ if (data_dir != NULL)
+ free(data_dir);
+ if (passwd != NULL)
+ free(passwd);
+
+ if (exitval == 0) {
+ if (verbose) {
+ (void)time(&now);
+ printf("%s: hot backup completed at %s",
+ progname, __db_ctime(&now, time_buf));
+ }
+ } else {
+ fprintf(stderr, "%s: HOT BACKUP FAILED!\n", progname);
+ }
+
+ /* Resend any caught signal. */
+ __db_util_sigresend();
+
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+
+}
+
+/*
+ * env_init --
+ * Open a database environment.
+ */
+int
+env_init(dbenvp, home, log_dir, data_dir, passwd, which)
+ DB_ENV **dbenvp;
+ char *home;
+ const char **log_dir, ***data_dir;
+ char *passwd;
+ enum which_open which;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ *dbenvp = NULL;
+
+ /*
+ * 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));
+ return (1);
+ }
+
+ dbenv->set_errfile(dbenv, stderr);
+ setbuf(stderr, NULL);
+ dbenv->set_errpfx(dbenv, progname);
+ (void)setvbuf(stdout, NULL, _IOLBF, 0);
+
+ /*
+ * If a log directory has been specified, and it's not the same as the
+ * home directory, set it for the environment.
+ */
+ if (log_dir != NULL && *log_dir != NULL && *log_dir != home &&
+ (ret = dbenv->set_lg_dir(dbenv, *log_dir)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->set_lg_dir: %s", log_dir);
+ return (1);
+ }
+
+ /* Optionally set the password. */
+ if (passwd != NULL &&
+ (ret = dbenv->set_encrypt(dbenv, passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->set_encrypt");
+ return (1);
+ }
+
+ switch (which) {
+ case OPEN_ORIGINAL:
+ /*
+ * Opening the database environment we're trying to back up.
+ * We try to attach to a pre-existing environment; if that
+ * fails, we create a private environment and try again.
+ */
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
+ (ret == DB_VERSION_MISMATCH ||
+ (ret = dbenv->open(dbenv, home, DB_CREATE |
+ DB_INIT_LOG | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON,
+ 0)) != 0)) {
+ dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
+ return (1);
+ }
+ if (log_dir != NULL && *log_dir == NULL) {
+ (void)dbenv->get_lg_dir(dbenv, log_dir);
+ if (*log_dir == NULL)
+ *log_dir = home;
+ }
+ if (data_dir != NULL && *data_dir == NULL)
+ (void)dbenv->get_data_dirs(dbenv, data_dir);
+ break;
+ case OPEN_HOT_BACKUP:
+ /*
+ * Opening the backup copy of the database environment. We
+ * better be the only user, we're running recovery.
+ */
+ if ((ret = dbenv->open(dbenv, home, DB_CREATE |
+ DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_PRIVATE |
+ DB_RECOVER_FATAL | DB_USE_ENVIRON, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
+ return (1);
+ }
+ break;
+ }
+
+ *dbenvp = dbenv;
+ return (0);
+}
+
+/*
+ * backup_dir_clean --
+ * Clean out the backup directory.
+ */
+int
+backup_dir_clean(dbenv, backup_dir, remove_maxp, update, verbose)
+ DB_ENV *dbenv;
+ char *backup_dir;
+ int *remove_maxp, update, verbose;
+{
+ int cnt, fcnt, ret, v;
+ char **names, buf[DB_MAXPATHLEN];
+
+ /* Get a list of file names. */
+ if ((ret = __os_dirlist(dbenv, backup_dir, &names, &fcnt)) != 0) {
+ dbenv->err(dbenv, ret, "%s: directory read", backup_dir);
+ return (1);
+ }
+ for (cnt = fcnt; --cnt >= 0;) {
+ /*
+ * Skip log files (if update wasn't specified).
+ */
+ if (strncmp(names[cnt], LFPREFIX, sizeof(LFPREFIX) - 1)) {
+ if (update)
+ continue;
+ } else {
+ /* Track the highest-numbered log file removed. */
+ v = atoi(names[cnt] + sizeof(LFPREFIX) - 1);
+ if (*remove_maxp < v)
+ *remove_maxp = v;
+ }
+ if ((size_t)snprintf(buf, sizeof(buf),
+ "%s/%s", backup_dir, names[cnt]) >= sizeof(buf)) {
+ dbenv->err(dbenv, ret,
+ "%s/%s: path too long", backup_dir, names[cnt]);
+ return (1);
+ }
+ if (verbose)
+ printf("%s: removing %s\n", progname, buf);
+ if ((ret = remove(buf)) != 0) {
+ dbenv->err(dbenv, ret, "%s: remove", buf);
+ return (1);
+ }
+ }
+
+ __os_dirfree(dbenv, names, fcnt);
+
+ if (verbose && *remove_maxp != 0)
+ printf("%s: highest numbered log file removed: %d\n",
+ progname, *remove_maxp);
+
+ return (0);
+}
+
+/*
+ * read_data_dir --
+ * Read a directory looking for databases to copy.
+ */
+int
+read_data_dir(dbenv, home, backup_dir, dir, verbose, db_config)
+ DB_ENV *dbenv;
+ char *home, *backup_dir;
+ const char *dir;
+ int verbose, db_config;
+{
+ int cnt, fcnt, ret;
+ char *bd, **names;
+ char buf[DB_MAXPATHLEN], bbuf[DB_MAXPATHLEN];
+
+ bd = backup_dir;
+ if (db_config && dir != home) {
+ /* Build a path name to the destination. */
+ if ((size_t)(cnt = snprintf(bbuf, sizeof(bbuf),
+ "%s/%s/", backup_dir, dir)) >= sizeof(buf)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", backup_dir, dir);
+ return (1);
+ }
+ bd = bbuf;
+
+ /* Create the path. */
+ if ((ret = dbenv->set_intermediate_dir(
+ dbenv, __db_omode("rwx------"), 0)) != 0 ||
+ (ret = __db_mkpath(dbenv, bd)) != 0) {
+ dbenv->err(dbenv, ret, "%s: cannot create", bd);
+ return (1);
+ }
+ /* step on the trailing '/' */
+ bd[cnt] = '\0';
+
+ /* Build a path name to the source. */
+ if ((size_t)snprintf(buf, sizeof(buf),
+ "%s/%s", home, dir) >= sizeof(buf)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", home, dir);
+ return (1);
+ }
+ dir = buf;
+ }
+ /* Get a list of file names. */
+ if ((ret = __os_dirlist(dbenv, dir, &names, &fcnt)) != 0) {
+ dbenv->err(dbenv, ret, "%s: directory read", dir);
+ return (1);
+ }
+ for (cnt = fcnt; --cnt >= 0;) {
+ /*
+ * Skip files in DB's name space (but not Queue
+ * extent files, we need them).
+ */
+ if (!strncmp(names[cnt], LFPREFIX, sizeof(LFPREFIX) - 1))
+ continue;
+ if (!strncmp(names[cnt],
+ DB_REGION_PREFIX, sizeof(DB_REGION_PREFIX) - 1) &&
+ strncmp(names[cnt],
+ QUEUE_EXTENT_PREFIX, sizeof(QUEUE_EXTENT_PREFIX) - 1))
+ continue;
+
+ /*
+ * Skip DB_CONFIG.
+ */
+ if (!db_config &&
+ !strncmp(names[cnt], "DB_CONFIG", sizeof("DB_CONFIG")))
+ continue;
+
+ /* Copy the file. */
+ if ((ret = data_copy(
+ dbenv, names[cnt], dir, bd, verbose)) != 0)
+ return (1);
+ }
+
+ __os_dirfree(dbenv, names, fcnt);
+
+ return (0);
+}
+
+/*
+ * read_log_dir --
+ * * Read a directory looking for log files to copy. If home
+ * is passed then we are possibly using a log dir in the destination,
+ * following DB_CONFIG configuration.
+ */
+int
+read_log_dir(dbenv, home, backup_dir, log_dir, copy_minp, update, verbose)
+ DB_ENV *dbenv;
+ char *home, *backup_dir;
+ const char *log_dir;
+ int *copy_minp, update, verbose;
+{
+ u_int32_t aflag;
+ int cnt, ret, v;
+ char **begin, **names, *backupd;
+ const char *logd;
+ char from[DB_MAXPATHLEN], to[DB_MAXPATHLEN];
+
+ logd = log_dir;
+ backupd = backup_dir;
+ if (home != NULL && log_dir != home) {
+ if ((size_t)snprintf(from, sizeof(from),
+ "%s/%s", home, log_dir) >= sizeof(from)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", home, log_dir);
+ return (1);
+ }
+ logd = strdup(from);
+ if ((size_t)(cnt = snprintf(to, sizeof(to),
+ "%s/%s/", backup_dir, log_dir)) >= sizeof(to)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", backup_dir, log_dir);
+ return (1);
+ }
+ backupd = strdup(to);
+ /* Create the path. */
+ if ((ret = dbenv->set_intermediate_dir(
+ dbenv, __db_omode("rwx------"), 0)) != 0 ||
+ (ret = __db_mkpath(dbenv, backupd)) != 0) {
+ dbenv->err(dbenv, ret, "%s: cannot create", backupd);
+ return (1);
+ }
+ /* step on the trailing '/' */
+ backupd[cnt] = '\0';
+ }
+
+again: aflag = DB_ARCH_LOG;
+
+ /*
+ * If this is an update and we are deleting files, first process
+ * those files that can be removed, then repeat with the rest.
+ */
+ if (update)
+ aflag = 0;
+ /* Get a list of file names to be copied. */
+ if ((ret = dbenv->log_archive(dbenv, &names, aflag)) != 0) {
+ dbenv->err(dbenv, ret, "%s: log_archive", log_dir);
+ return (1);
+ }
+ if (names == NULL)
+ goto done;
+ begin = names;
+ for (; *names != NULL; names++) {
+ /* Track the lowest-numbered log file copied. */
+ v = atoi(*names + sizeof(LFPREFIX) - 1);
+ if (*copy_minp == 0 || *copy_minp > v)
+ *copy_minp = v;
+
+ if ((size_t)snprintf(from, sizeof(from),
+ "%s/%s", logd, *names) >= sizeof(from)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", log_dir, *names);
+ return (1);
+ }
+
+ /*
+ * If we're going to remove the file, attempt to rename the
+ * instead of copying and then removing. The likely failure
+ * is EXDEV (source and destination are on different volumes).
+ * Fall back to a copy, regardless of the error. We don't
+ * worry about partial contents, the copy truncates the file
+ * on open.
+ */
+ if (update) {
+ if ((size_t)snprintf(to, sizeof(to),
+ "%s/%s", backupd, *names) >= sizeof(to)) {
+ dbenv->errx(dbenv,
+ "%s/%s: path too long", backupd, *names);
+ return (1);
+ }
+ if (rename(from, to) == 0) {
+ if (verbose)
+ printf("%s: moving %s to %s\n",
+ progname, from, to);
+ continue;
+ }
+ }
+
+ /* Copy the file. */
+ if ((ret = data_copy(dbenv,
+ *names, logd, backupd, verbose)) != 0)
+ return (1);
+
+ if (update) {
+ if (verbose)
+ printf("%s: removing %s\n", progname, from);
+ if ((ret = __os_unlink(dbenv, from)) != 0) {
+ dbenv->err(dbenv, ret,
+ "unlink of %s failed", from);
+ return (1);
+ }
+ }
+
+ }
+
+ free(begin);
+done: if (update) {
+ update = 0;
+ goto again;
+ }
+
+ if (verbose && *copy_minp != 0)
+ printf("%s: lowest numbered log file copied: %d\n",
+ progname, *copy_minp);
+ if (logd != log_dir)
+ free((char *)logd);
+ if (backupd != backup_dir)
+ free(backupd);
+
+ return (0);
+}
+
+/*
+ * data_copy --
+ * Copy a file into the backup directory.
+ */
+int
+data_copy(dbenv, file, from_dir, to_dir, verbose)
+ DB_ENV *dbenv;
+ const char *file, *from_dir, *to_dir;
+ int verbose;
+{
+ ssize_t nr, nw;
+ size_t offset;
+ int ret, rfd, wfd;
+ char *buf, *taddr;
+
+ ret = 0;
+ rfd = wfd = -1;
+
+ if (verbose)
+ printf("%s: copying %s/%s to %s/%s\n",
+ progname, from_dir, file, to_dir, file);
+
+ /*
+ * We MUST copy multiples of the page size, atomically, to ensure a
+ * database page is not updated by another thread of control during
+ * the copy.
+ *
+ * !!!
+ * The current maximum page size for Berkeley DB is 64KB; we will have
+ * to increase this value if the maximum page size is ever more than a
+ * megabyte
+ */
+ if ((buf = malloc(MEGABYTE)) == NULL) {
+ dbenv->err(dbenv,
+ errno, "%lu buffer allocation", (u_long)MEGABYTE);
+ return (1);
+ }
+
+ /* Open the input file. */
+ if ((u_int32_t)snprintf(
+ buf, MEGABYTE, "%s/%s", from_dir, file) >= MEGABYTE) {
+ dbenv->errx(dbenv, "%s/%s: path too long", from_dir, file);
+ goto err;
+ }
+ if ((rfd = open(buf, O_RDONLY, 0)) == -1) {
+ dbenv->err(dbenv, errno, "%s", buf);
+ goto err;
+ }
+
+ /* Open the output file. */
+ if ((u_int32_t)snprintf(
+ buf, MEGABYTE, "%s/%s", to_dir, file) >= MEGABYTE) {
+ dbenv->errx(dbenv, "%s/%s: path too long", to_dir, file);
+ goto err;
+ }
+ if ((wfd = open(
+ buf, O_CREAT | O_TRUNC | O_WRONLY, __db_omode(OWNER_RW))) == -1)
+ goto err;
+
+ /* Copy the data. */
+ while ((nr = read(rfd, buf, MEGABYTE)) > 0)
+ for (taddr = buf, offset = 0;
+ offset < (size_t)nr; taddr += nw, offset += (size_t)nw) {
+ RETRY_CHK(((nw = write(wfd,
+ taddr, (u_int)(nr - offset))) < 0 ? 1 : 0), ret);
+ if (ret != 0)
+ break;
+ }
+ if (nr == -1) {
+ dbenv->err(dbenv, errno, "%s/%s: read", from_dir, file);
+ goto err;
+ }
+
+ if (ret != 0) {
+ dbenv->err(dbenv, errno, "%s: write %s/%s", to_dir, file);
+ goto err;
+ }
+
+ if (0) {
+err: ret = 1;
+ }
+ if (buf != NULL)
+ free(buf);
+
+ if (rfd != -1)
+ (void)close(rfd);
+
+ /* We may be running on a remote filesystem; force the flush. */
+ if (wfd != -1 && (fsync(wfd) != 0 || close(wfd) != 0)) {
+ dbenv->err(dbenv,
+ errno, "%s: fsync %s/%s", to_dir, file);
+ ret = 1;
+ }
+ return (ret);
+}
+
+int
+usage()
+{
+ (void)fprintf(stderr, "usage: %s [-cDuVv]\n\t%s\n", progname,
+ "[-d data_dir ...] [-h home] [-l log_dir] [-P password] -b backup_dir");
+ return (EXIT_FAILURE);
+}
+
+int
+version_check()
+{
+ 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) {
+ fprintf(stderr,
+ "%s: version %d.%d doesn't match library version %d.%d\n",
+ progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
+ v_major, v_minor);
+ return (EXIT_FAILURE);
+ }
+ return (0);
+}
diff --git a/db/db_load/db_load.c b/db/db_load/db_load.c
index db0caf42d..5cdfc79e8 100644
--- a/db/db_load/db_load.c
+++ b/db/db_load/db_load.c
@@ -1,33 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_load.c,v 11.100 2004/10/29 17:29:02 bostic Exp $
+ * $Id: db_load.c,v 12.18 2006/08/26 09:23:08 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
typedef struct { /* XXX: Globals. */
const char *progname; /* Program name. */
char *hdrbuf; /* Input file header. */
@@ -42,7 +32,7 @@ typedef struct { /* XXX: Globals. */
u_int32_t cache; /* Env cache size. */
} LDG;
-void badend __P((DB_ENV *));
+int 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 **));
@@ -51,13 +41,14 @@ 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_ENV *, DB *, DBTYPE *, char **, int *, int *));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
#define G(f) ((LDG *)dbenv->app_private)->f
@@ -81,7 +72,15 @@ main(argc, argv)
int ch, existed, exitval, ret;
char **clist, **clp;
- ldg.progname = "db_load";
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
+ return (ret);
+
+ ldg.progname = progname;
ldg.lineno = 0;
ldg.endodata = ldg.endofile = 0;
ldg.version = 1;
@@ -90,9 +89,6 @@ main(argc, argv)
ldg.home = NULL;
ldg.passwd = NULL;
- if ((ret = version_check(ldg.progname)) != 0)
- return (ret);
-
mode = NOTSET;
ldf = 0;
exitval = existed = 0;
@@ -218,11 +214,11 @@ main(argc, argv)
switch (mode) {
case FILEID_RESET:
exitval = dbenv->fileid_reset(
- dbenv, argv[0], ldf & LDF_PASSWORD ? 1 : 0);
+ dbenv, argv[0], ldf & LDF_PASSWORD ? DB_ENCRYPT : 0);
break;
case LSN_RESET:
exitval = dbenv->lsn_reset(
- dbenv, argv[0], ldf & LDF_PASSWORD ? 1 : 0);
+ dbenv, argv[0], ldf & LDF_PASSWORD ? DB_ENCRYPT : 0);
break;
case NOTSET:
case STANDARD_LOAD:
@@ -401,7 +397,7 @@ retry_db:
/* Open the DB file. */
if ((ret = dbp->open(dbp, NULL, name, subdb, dbtype,
DB_CREATE | (TXN_ON(dbenv) ? DB_AUTO_COMMIT : 0),
- __db_omode("rwrwrw"))) != 0) {
+ __db_omode("rw-rw-rw-"))) != 0) {
dbp->err(dbp, ret, "DB->open: %s", name);
goto err;
}
@@ -529,7 +525,7 @@ retry: if (txn != NULL)
}
}
done: rval = 0;
- DB_ASSERT(ctxn == NULL);
+ DB_ASSERT(dbenv, ctxn == NULL);
if (txn != NULL && (ret = txn->commit(txn, 0)) != 0) {
txn = NULL;
goto err;
@@ -537,7 +533,7 @@ done: rval = 0;
if (0) {
err: rval = 1;
- DB_ASSERT(ctxn == NULL);
+ DB_ASSERT(dbenv, ctxn == NULL);
if (txn != NULL)
(void)txn->abort(txn);
}
@@ -652,23 +648,22 @@ err: dbenv->err(dbenv, ret, "DB_ENV->open");
if ((ret = dbp->set_flags(dbp, flag)) != 0) { \
dbp->err(dbp, ret, "%s: set_flags: %s", \
G(progname), name); \
- return (1); \
+ goto err; \
} \
break; \
case '0': \
break; \
default: \
badnum(dbenv); \
- return (1); \
+ goto err; \
} \
continue; \
}
#define NUMBER(name, value, keyword, func, t) \
if (strcmp(name, keyword) == 0) { \
- if (__db_getlong(dbenv, \
- NULL, value, 1, LONG_MAX, &val) != 0) \
- return (1); \
- if ((ret = dbp->func(dbp, (t)val)) != 0) \
+ if ((ret = __db_getlong(dbenv, \
+ NULL, value, 0, LONG_MAX, &val)) != 0 || \
+ (ret = dbp->func(dbp, (t)val)) != 0) \
goto nameerr; \
continue; \
}
@@ -680,6 +675,26 @@ err: dbenv->err(dbenv, ret, "DB_ENV->open");
}
/*
+ * The code to check a command-line or input header argument against a list
+ * of configuration options. It's #defined because it's used in two places
+ * and the two places have gotten out of sync more than once.
+ */
+#define CONFIGURATION_LIST_COMPARE \
+ NUMBER(name, value, "bt_minkey", set_bt_minkey, u_int32_t); \
+ FLAG(name, value, "chksum", DB_CHKSUM); \
+ NUMBER(name, value, "db_lorder", set_lorder, int); \
+ NUMBER(name, value, "db_pagesize", set_pagesize, u_int32_t); \
+ FLAG(name, value, "duplicates", DB_DUP); \
+ FLAG(name, value, "dupsort", DB_DUPSORT); \
+ NUMBER(name, value, "extentsize", set_q_extentsize, u_int32_t); \
+ 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)
+
+/*
* configure --
* Handle command-line configuration options.
*/
@@ -725,21 +740,7 @@ configure(dbenv, dbp, clp, subdbp, keysp)
continue;
}
-#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
-#endif
- 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, 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);
+ CONFIGURATION_LIST_COMPARE;
dbp->errx(dbp,
"unknown command-line configuration keyword \"%s\"", name);
@@ -749,7 +750,7 @@ configure(dbenv, dbp, clp, subdbp, keysp)
nameerr:
dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
- return (1);
+err: return (1);
}
/*
@@ -771,7 +772,7 @@ rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
*dbtypep = DB_UNKNOWN;
*checkprintp = 0;
- name = p = NULL;
+ name = NULL;
/*
* We start with a smallish buffer; most headers are small.
@@ -780,10 +781,8 @@ rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
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);
- }
+ if ((buf = malloc(buflen)) == NULL)
+ goto memerr;
G(hdrbuf) = buf;
G(origline) = G(lineno);
} else {
@@ -832,7 +831,6 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
start += linelen;
if (name != NULL) {
- *p = '=';
free(name);
name = NULL;
}
@@ -916,22 +914,7 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
continue;
}
-#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
-#endif
- 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, 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);
+ CONFIGURATION_LIST_COMPARE;
dbp->errx(dbp,
"unknown input-file header configuration keyword \"%s\"",
@@ -939,23 +922,71 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
goto err;
}
ret = 0;
+
if (0) {
nameerr: dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
-err: ret = 1;
+ 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);
+ if (0) {
+memerr: dbp->errx(dbp, "unable to allocate memory");
+err: ret = 1;
}
+ if (name != NULL)
+ free(name);
return (ret);
}
/*
+ * Macro to convert a pair of hex bytes to a decimal value.
+ *
+ * !!!
+ * Note that this macro is side-effect safe. This was done deliberately,
+ * callers depend on it.
+ */
+#define DIGITIZE(store, v1, v2) { \
+ char _v1, _v2; \
+ _v1 = (v1); \
+ _v2 = (v2); \
+ if ((_v1) > 'f' || (_v2) > 'f') \
+ return (badend(dbenv)); \
+ (store) = \
+ ((_v1) == '0' ? 0 : \
+ ((_v1) == '1' ? 1 : \
+ ((_v1) == '2' ? 2 : \
+ ((_v1) == '3' ? 3 : \
+ ((_v1) == '4' ? 4 : \
+ ((_v1) == '5' ? 5 : \
+ ((_v1) == '6' ? 6 : \
+ ((_v1) == '7' ? 7 : \
+ ((_v1) == '8' ? 8 : \
+ ((_v1) == '9' ? 9 : \
+ ((_v1) == 'a' ? 10 : \
+ ((_v1) == 'b' ? 11 : \
+ ((_v1) == 'c' ? 12 : \
+ ((_v1) == 'd' ? 13 : \
+ ((_v1) == 'e' ? 14 : 15))))))))))))))) << 4 | \
+ ((_v2) == '0' ? 0 : \
+ ((_v2) == '1' ? 1 : \
+ ((_v2) == '2' ? 2 : \
+ ((_v2) == '3' ? 3 : \
+ ((_v2) == '4' ? 4 : \
+ ((_v2) == '5' ? 5 : \
+ ((_v2) == '6' ? 6 : \
+ ((_v2) == '7' ? 7 : \
+ ((_v2) == '8' ? 8 : \
+ ((_v2) == '9' ? 9 : \
+ ((_v2) == 'a' ? 10 : \
+ ((_v2) == 'b' ? 11 : \
+ ((_v2) == 'c' ? 12 : \
+ ((_v2) == 'd' ? 13 : \
+ ((_v2) == 'e' ? 14 : 15))))))))))))))); \
+}
+
+/*
* convprintable --
* Convert a printable-encoded string into a newly allocated string.
*
@@ -973,8 +1004,7 @@ convprintable(dbenv, instr, outstrp)
DB_ENV *dbenv;
char *instr, **outstrp;
{
- char c, *outstr;
- int e1, e2;
+ char *outstr;
/*
* Just malloc a string big enough for the whole input string;
@@ -985,21 +1015,13 @@ convprintable(dbenv, instr, outstrp)
*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;
+ DIGITIZE(*outstr++, *instr, *++instr);
} else
*outstr++ = *instr;
@@ -1019,21 +1041,20 @@ dbt_rprint(dbenv, dbtp)
{
u_int32_t len;
u_int8_t *p;
- int c1, c2, e, escape, first;
+ int c1, c2, escape, first;
char buf[32];
++G(lineno);
first = 1;
- e = escape = 0;
+ escape = 0;
for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) {
if (c1 == EOF) {
if (len == 0) {
G(endofile) = G(endodata) = 1;
return (0);
}
- badend(dbenv);
- return (1);
+ return (badend(dbenv));
}
if (first) {
first = 0;
@@ -1042,10 +1063,8 @@ dbt_rprint(dbenv, dbtp)
buf[0] = c1;
if (fgets(buf + 1,
sizeof(buf) - 1, stdin) == NULL ||
- strcmp(buf, "DATA=END\n") != 0) {
- badend(dbenv);
- return (1);
- }
+ strcmp(buf, "DATA=END\n") != 0)
+ return (badend(dbenv));
G(endodata) = 1;
return (0);
}
@@ -1054,14 +1073,9 @@ dbt_rprint(dbenv, dbtp)
}
if (escape) {
if (c1 != '\\') {
- if ((c2 = getchar()) == EOF) {
- badend(dbenv);
- return (1);
- }
- c1 = digitize(dbenv,
- c1, &e) << 4 | digitize(dbenv, c2, &e);
- if (e)
- return (1);
+ if ((c2 = getchar()) == EOF)
+ return (badend(dbenv));
+ DIGITIZE(c1, c1, c2);
}
escape = 0;
} else
@@ -1097,21 +1111,19 @@ dbt_rdump(dbenv, dbtp)
{
u_int32_t len;
u_int8_t *p;
- int c1, c2, e, first;
+ int c1, c2, first;
char buf[32];
++G(lineno);
first = 1;
- e = 0;
for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) {
if (c1 == EOF) {
if (len == 0) {
G(endofile) = G(endodata) = 1;
return (0);
}
- badend(dbenv);
- return (1);
+ return (badend(dbenv));
}
if (first) {
first = 0;
@@ -1120,20 +1132,16 @@ dbt_rdump(dbenv, dbtp)
buf[0] = c1;
if (fgets(buf + 1,
sizeof(buf) - 1, stdin) == NULL ||
- strcmp(buf, "DATA=END\n") != 0) {
- badend(dbenv);
- return (1);
- }
+ strcmp(buf, "DATA=END\n") != 0)
+ return (badend(dbenv));
G(endodata) = 1;
return (0);
}
continue;
}
}
- if ((c2 = getchar()) == EOF) {
- badend(dbenv);
- return (1);
- }
+ if ((c2 = getchar()) == EOF)
+ return (badend(dbenv));
if (len >= dbtp->ulen - 10) {
dbtp->ulen *= 2;
if ((dbtp->data =
@@ -1144,9 +1152,7 @@ dbt_rdump(dbenv, dbtp)
p = (u_int8_t *)dbtp->data + len;
}
++len;
- *p++ = digitize(dbenv, c1, &e) << 4 | digitize(dbenv, c2, &e);
- if (e)
- return (1);
+ DIGITIZE(*p++, c1, c2);
}
dbtp->size = len;
@@ -1179,7 +1185,7 @@ dbt_rrecno(dbenv, dbtp, ishex)
}
if (buf[0] != ' ')
- goto bad;
+ goto err;
/*
* If we're expecting a hex key, do an in-place conversion
@@ -1195,22 +1201,22 @@ dbt_rrecno(dbenv, dbtp, ishex)
* end-of-string conditions.
*/
if (*q++ != '3')
- goto bad;
+ goto err;
if (*q == '\n' || *q == '\0')
- goto bad;
+ goto err;
*p++ = *q++;
}
*p = '\0';
}
- if (__db_getulong(dbenv, G(progname), buf + 1, 0, 0, &recno)) {
-bad: badend(dbenv);
- return (1);
- }
+ if (__db_getulong(dbenv, G(progname), buf + 1, 0, 0, &recno))
+ goto err;
*((db_recno_t *)dbtp->data) = recno;
dbtp->size = sizeof(db_recno_t);
return (0);
+
+err: return (badend(dbenv));
}
int
@@ -1228,42 +1234,6 @@ dbt_to_recno(dbenv, dbt, recnop)
}
/*
- * digitize --
- * Convert a character to an integer.
- */
-int
-digitize(dbenv, c, errorp)
- DB_ENV *dbenv;
- int c, *errorp;
-{
- switch (c) { /* Don't depend on ASCII ordering. */
- case '0': return (0);
- case '1': return (1);
- case '2': return (2);
- case '3': return (3);
- case '4': return (4);
- case '5': return (5);
- case '6': return (6);
- case '7': return (7);
- case '8': return (8);
- case '9': return (9);
- case 'a': return (10);
- case 'b': return (11);
- case 'c': return (12);
- case 'd': return (13);
- case 'e': return (14);
- case 'f': return (15);
- default: /* Not possible. */
- break;
- }
-
- dbenv->errx(dbenv, "unexpected hexadecimal value");
- *errorp = 1;
-
- return (0);
-}
-
-/*
* badnum --
* Display the bad number message.
*/
@@ -1279,11 +1249,12 @@ badnum(dbenv)
* badend --
* Display the bad end to input message.
*/
-void
+int
badend(dbenv)
DB_ENV *dbenv;
{
dbenv->errx(dbenv, "unexpected end of input data or key/data pair");
+ return (1);
}
/*
@@ -1293,17 +1264,16 @@ badend(dbenv)
int
usage()
{
- (void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_load [-nTV] [-c name=value] [-f file]",
+ (void)fprintf(stderr, "usage: %s %s\n\t%s\n", progname,
+ "[-nTV] [-c name=value] [-f file]",
"[-h home] [-P password] [-t btree | hash | recno | queue] db_file");
- (void)fprintf(stderr, "%s\n",
- "usage: db_load -r lsn | fileid [-h home] [-P password] db_file");
+ (void)fprintf(stderr, "usage: %s %s\n",
+ progname, "-r lsn | fileid [-h home] [-P password] db_file");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_printlog/README b/db/db_printlog/README
index d62596429..eca5383cb 100644
--- a/db/db_printlog/README
+++ b/db/db_printlog/README
@@ -1,4 +1,4 @@
-# $Id: README,v 10.7 2004/09/24 00:43:16 bostic Exp $
+# $Id: README,v 12.0 2004/11/17 03:43:23 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
diff --git a/db/db_printlog/commit.awk b/db/db_printlog/commit.awk
index 66391d3fb..4f03fd2ce 100644
--- a/db/db_printlog/commit.awk
+++ b/db/db_printlog/commit.awk
@@ -1,4 +1,4 @@
-# $Id: commit.awk,v 10.2 1999/11/21 18:01:42 bostic Exp $
+# $Id: commit.awk,v 12.0 2004/11/17 03:43:24 bostic Exp $
#
# Output tid of committed transactions.
diff --git a/db/db_printlog/count.awk b/db/db_printlog/count.awk
index 1d5a29195..6a80cbe1b 100644
--- a/db/db_printlog/count.awk
+++ b/db/db_printlog/count.awk
@@ -1,4 +1,4 @@
-# $Id: count.awk,v 10.2 1999/11/21 18:01:42 bostic Exp $
+# $Id: count.awk,v 12.0 2004/11/17 03:43:24 bostic Exp $
#
# Print out the number of log records for transactions that we
# encountered.
diff --git a/db/db_printlog/db_printlog.c b/db/db_printlog/db_printlog.c
index d06477160..1ef2896ee 100644
--- a/db/db_printlog/db_printlog.c
+++ b/db/db_printlog/db_printlog.c
@@ -1,29 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_printlog.c,v 11.64 2004/06/17 17:35:17 bostic Exp $
+ * $Id: db_printlog.c,v 12.20 2006/08/26 09:23:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
@@ -33,12 +18,27 @@ static const char copyright[] =
#include "dbinc/qam.h"
#include "dbinc/txn.h"
-int lsn_arg __P((const char *, char *, DB_LSN *));
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
+
+int env_init_print __P((DB_ENV *, u_int32_t,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int env_init_print_42 __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int env_init_print_43 __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int env_init_print_45 __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int lsn_arg __P((char *, DB_LSN *));
int main __P((int, char *[]));
int open_rep_db __P((DB_ENV *, DB **, DBC **));
int print_app_record __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -47,20 +47,24 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- const char *progname = "db_printlog";
DB *dbp;
DBC *dbc;
DBT data, keydbt;
DB_ENV *dbenv;
DB_LOGC *logc;
- DB_LSN key, start, stop;
+ DB_LSN key, start, stop, verslsn;
size_t dtabsize;
- u_int32_t logcflag;
+ u_int32_t logcflag, newversion, version;
int ch, cmp, exitval, nflag, rflag, ret, repflag;
int (**dtab) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
char *home, *passwd;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbp = NULL;
@@ -77,11 +81,13 @@ main(argc, argv)
while ((ch = getopt(argc, argv, "b:e:h:NP:rRV")) != EOF)
switch (ch) {
case 'b':
- if (lsn_arg(progname, optarg, &start))
+ /* Don't use getsubopt(3), not all systems have it. */
+ if (lsn_arg(optarg, &start))
return (usage());
break;
case 'e':
- if (lsn_arg(progname, optarg, &stop))
+ /* Don't use getsubopt(3), not all systems have it. */
+ if (lsn_arg(optarg, &stop))
return (usage());
break;
case 'h':
@@ -177,8 +183,7 @@ main(argc, argv)
dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
}
- } else if ((ret = dbenv->open(dbenv, home,
- DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
+ } else if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
(ret == DB_VERSION_MISMATCH ||
(ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) {
@@ -186,23 +191,6 @@ main(argc, argv)
goto shutdown;
}
- /* Initialize print callbacks. */
- if ((ret = __bam_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __crdel_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __db_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __dbreg_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
- (ret = __fop_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
-#ifdef HAVE_HASH
- (ret = __ham_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
-#endif
-#ifdef HAVE_QUEUE
- (ret = __qam_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
-#endif
- (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)
@@ -221,6 +209,24 @@ main(argc, argv)
}
memset(&data, 0, sizeof(data));
+ /*
+ * If we're using the repflag, we're immediately initializing
+ * the print table. Use the current version. If we're printing
+ * the log then initialize version to 0 so that we get the
+ * correct version right away.
+ */
+ if (repflag)
+ version = DB_LOGVERSION;
+ else
+ version = 0;
+ ZERO_LSN(verslsn);
+
+ /* Initialize print callbacks if repflag. */
+ if (repflag &&
+ (ret = env_init_print(dbenv, version, &dtab, &dtabsize)) != 0) {
+ dbenv->err(dbenv, ret, "callback: initialization");
+ goto shutdown;
+ }
for (; !__db_util_interrupted(); logcflag = rflag ? DB_PREV : DB_NEXT) {
if (repflag) {
ret = dbc->c_get(dbc, &keydbt, &data, logcflag);
@@ -232,7 +238,7 @@ main(argc, argv)
if (ret == DB_NOTFOUND)
break;
dbenv->err(dbenv,
- ret, repflag ? "DB_LOGC->get" : "DBC->get");
+ ret, repflag ? "DBC->get" : "DB_LOGC->get");
goto shutdown;
}
@@ -240,10 +246,30 @@ main(argc, argv)
* We may have reached the end of the range we're displaying.
*/
if (!IS_ZERO_LSN(stop)) {
- cmp = log_compare(&key, &stop);
+ cmp = LOG_COMPARE(&key, &stop);
if ((rflag && cmp < 0) || (!rflag && cmp > 0))
break;
}
+ if (!repflag && key.file != verslsn.file) {
+ /*
+ * If our log file changed, we need to see if the
+ * version of the log file changed as well.
+ * If it changed, reset the print table.
+ */
+ if ((ret = logc->version(logc, &newversion, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_LOGC->version");
+ goto shutdown;
+ }
+ if (version != newversion) {
+ version = newversion;
+ if ((ret = env_init_print(dbenv, version,
+ &dtab, &dtabsize)) != 0) {
+ dbenv->err(dbenv, ret,
+ "callback: initialization");
+ goto shutdown;
+ }
+ }
+ }
ret = __db_dispatch(dbenv,
dtab, dtabsize, &data, &key, DB_TXN_PRINT, NULL);
@@ -294,17 +320,154 @@ shutdown: exitval = 1;
return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
+/*
+ * env_init_print --
+ */
+int
+env_init_print(dbenv, version, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ u_int32_t version;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ /*
+ * We need to prime the print table with the current print
+ * functions. Then we overwrite only specific entries based on
+ * each previous version we support.
+ */
+ if ((ret = env_init_print_45(dbenv, dtabp, dtabsizep)) != 0)
+ return (ret);
+
+ switch (version) {
+ /*
+ * There are no log record/recovery differences between
+ * 4.4 and 4.5. The log version changed due to checksum.
+ */
+ case DB_LOGVERSION_45:
+ case DB_LOGVERSION_44:
+ ret = 0;
+ break;
+ case DB_LOGVERSION_43:
+ ret = env_init_print_43(dbenv, dtabp, dtabsizep);
+ break;
+ case DB_LOGVERSION_42:
+ ret = env_init_print_42(dbenv, dtabp, dtabsizep);
+ break;
+ default:
+ __db_errx(dbenv, "Unknown version %lu", (u_long)version);
+ ret = EINVAL;
+ break;
+ }
+ return (ret);
+}
+
+int
+env_init_print_42(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_relink_42_print, DB___db_relink_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_alloc_42_print, DB___db_pg_alloc_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_free_42_print, DB___db_pg_free_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_freedata_42_print, DB___db_pg_freedata_42)) != 0)
+ goto err;
+#if HAVE_HASH
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_metagroup_42_print, DB___ham_metagroup_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_groupalloc_42_print, DB___ham_groupalloc_42)) != 0)
+ goto err;
+#endif
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_ckp_42_print, DB___txn_ckp_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_42_print, DB___txn_regop_42)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
+int
+env_init_print_43(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_relink_43_print, DB___bam_relink_43)) != 0)
+ goto err;
+ /*
+ * We want to use the 4.2-based txn_regop record.
+ */
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_42_print, DB___txn_regop_42)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
+/*
+ * env_init_print_45 --
+ *
+ */
+int
+env_init_print_45(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __bam_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __crdel_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __db_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __dbreg_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+ if ((ret = __fop_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+#ifdef HAVE_HASH
+ if ((ret = __ham_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+#endif
+#ifdef HAVE_QUEUE
+ if ((ret = __qam_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+#endif
+ if ((ret = __txn_init_print(dbenv, dtabp, dtabsizep)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
int
usage()
{
- fprintf(stderr, "usage: db_printlog %s\n",
+ fprintf(stderr, "usage: %s %s\n", progname,
"[-NrV] [-b file/offset] [-e file/offset] [-h home] [-P password]");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
@@ -331,7 +494,7 @@ print_app_record(dbenv, dbt, lsnp, op)
int ch;
u_int32_t i, rectype;
- DB_ASSERT(op == DB_TXN_PRINT);
+ DB_ASSERT(dbenv, op == DB_TXN_PRINT);
COMPQUIET(dbenv, NULL);
COMPQUIET(op, DB_TXN_PRINT);
@@ -378,7 +541,7 @@ open_rep_db(dbenv, dbpp, dbcp)
dbp = *dbpp;
if ((ret =
- dbp->open(dbp, NULL, "__db.rep.db", NULL, DB_BTREE, 0, 0)) != 0) {
+ dbp->open(dbp, NULL, REPDBNAME, NULL, DB_BTREE, 0, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open");
goto err;
}
@@ -400,31 +563,24 @@ err: if (*dbpp != NULL)
* Parse a LSN argument.
*/
int
-lsn_arg(progname, optarg, lsnp)
- const char *progname;
- char *optarg;
+lsn_arg(arg, lsnp)
+ char *arg;
DB_LSN *lsnp;
{
- char *p;
u_long uval;
+ char *p;
/*
* Expected format is: lsn.file/lsn.offset.
- *
- * Don't use getsubopt(3), some systems don't have it.
*/
- if ((p = strchr(optarg, '/')) == NULL)
+ if ((p = strchr(arg, '/')) == NULL)
return (1);
*p = '\0';
- if (__db_getulong(NULL, progname, optarg, 0, 0, &uval))
- return (1);
- if (uval > UINT32_MAX)
+ if (__db_getulong(NULL, progname, arg, 0, UINT32_MAX, &uval))
return (1);
lsnp->file = uval;
- if (__db_getulong(NULL, progname, p + 1, 0, 0, &uval))
- return (1);
- if (uval > UINT32_MAX)
+ if (__db_getulong(NULL, progname, p + 1, 0, UINT32_MAX, &uval))
return (1);
lsnp->offset = uval;
return (0);
diff --git a/db/db_printlog/dbname.awk b/db/db_printlog/dbname.awk
index 41ef97a16..a864c95dd 100644
--- a/db/db_printlog/dbname.awk
+++ b/db/db_printlog/dbname.awk
@@ -1,4 +1,4 @@
-# $Id: dbname.awk,v 1.7 2003/11/21 20:00:03 ubell Exp $
+# $Id: dbname.awk,v 12.1 2005/03/23 04:56:51 ubell Exp $
#
# Take a comma-separated list of database names and spit out all the
# log records that affect those databases.
@@ -58,6 +58,7 @@ NR == 1 {
} else if ($2 <= nreg && files[$2] == 1) {
printme = 1
}
+ myfile = -1;
}
/^\[/{
diff --git a/db/db_printlog/fileid.awk b/db/db_printlog/fileid.awk
index 020644039..853ba866c 100644
--- a/db/db_printlog/fileid.awk
+++ b/db/db_printlog/fileid.awk
@@ -1,4 +1,4 @@
-# $Id: fileid.awk,v 10.4 2000/07/17 22:07:17 ubell Exp $
+# $Id: fileid.awk,v 12.0 2004/11/17 03:43:25 bostic Exp $
#
# Take a comma-separated list of file numbers and spit out all the
# log records that affect those file numbers.
diff --git a/db/db_printlog/logstat.awk b/db/db_printlog/logstat.awk
index 1009343eb..833864653 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 12.0 2004/11/17 03:43:25 bostic Exp $
#
# Output accumulated log record count/size statistics.
BEGIN {
diff --git a/db/db_printlog/pgno.awk b/db/db_printlog/pgno.awk
index 289fa853b..f58713523 100644
--- a/db/db_printlog/pgno.awk
+++ b/db/db_printlog/pgno.awk
@@ -1,4 +1,4 @@
-# $Id: pgno.awk,v 10.3 2000/07/17 22:07:17 ubell Exp $
+# $Id: pgno.awk,v 12.0 2004/11/17 03:43:25 bostic Exp $
#
# Take a comma-separated list of page numbers and spit out all the
# log records that affect those page numbers.
diff --git a/db/db_printlog/range.awk b/db/db_printlog/range.awk
index 7abb410b4..045c7fb20 100644
--- a/db/db_printlog/range.awk
+++ b/db/db_printlog/range.awk
@@ -1,4 +1,4 @@
-# $Id: range.awk,v 10.2 1999/11/21 18:01:42 bostic Exp $
+# $Id: range.awk,v 12.0 2004/11/17 03:43:25 bostic Exp $
#
# Print out a range of the log
diff --git a/db/db_printlog/rectype.awk b/db/db_printlog/rectype.awk
index f30124cac..25b280085 100644
--- a/db/db_printlog/rectype.awk
+++ b/db/db_printlog/rectype.awk
@@ -1,4 +1,4 @@
-# $Id: rectype.awk,v 11.4 2004/04/19 09:36:58 bostic Exp $
+# $Id: rectype.awk,v 12.0 2004/11/17 03:43:25 bostic Exp $
#
# Print out a range of the log.
# Command line should set RECTYPE to a comma separated list
diff --git a/db/db_printlog/status.awk b/db/db_printlog/status.awk
index a0c381ed9..a939431ef 100644
--- a/db/db_printlog/status.awk
+++ b/db/db_printlog/status.awk
@@ -1,4 +1,4 @@
-# $Id: status.awk,v 10.5 2004/09/24 00:43:17 bostic Exp $
+# $Id: status.awk,v 12.1 2006/02/15 20:35:26 ubell Exp $
#
# Read through db_printlog output and list all the transactions encountered
# and whether they committed or aborted.
@@ -10,7 +10,7 @@
BEGIN {
cur_txn = 0
}
-/^\[/{
+/^\[.*]\[/{
in_regop = 0
if (status[$5] == 0) {
status[$5] = 1;
diff --git a/db/db_printlog/txn.awk b/db/db_printlog/txn.awk
index be8c44e10..12f283ebf 100644
--- a/db/db_printlog/txn.awk
+++ b/db/db_printlog/txn.awk
@@ -1,4 +1,4 @@
-# $Id: txn.awk,v 10.3 2000/07/17 22:07:17 ubell Exp $
+# $Id: txn.awk,v 12.0 2004/11/17 03:43:25 bostic Exp $
#
# Print out all the records for a comma-separated list of transaction ids.
NR == 1 {
diff --git a/db/db_recover/db_recover.c b/db/db_recover/db_recover.c
index 75961f78c..4082279a8 100644
--- a/db/db_recover/db_recover.c
+++ b/db/db_recover/db_recover.c
@@ -1,44 +1,27 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_recover.c,v 11.41 2004/01/28 03:36:00 bostic Exp $
+ * $Id: db_recover.c,v 12.9 2006/08/26 09:23:13 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-
int main __P((int, char *[]));
-int read_timestamp __P((const char *, char *, time_t *));
+int read_timestamp __P((char *, time_t *));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -47,14 +30,18 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- const char *progname = "db_recover";
DB_ENV *dbenv;
time_t timestamp;
u_int32_t flags;
int ch, exitval, fatal_recover, ret, retain_env, verbose;
char *home, *passwd;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
home = passwd = NULL;
@@ -81,8 +68,7 @@ main(argc, argv)
}
break;
case 't':
- if ((ret =
- read_timestamp(progname, optarg, &timestamp)) != 0)
+ if ((ret = read_timestamp(optarg, &timestamp)) != 0)
return (ret);
break;
case 'V':
@@ -142,10 +128,10 @@ main(argc, argv)
* certainly use DB_CONFIG files in the directory.
*/
flags = 0;
- LF_SET(DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
+ LF_SET(DB_CREATE | DB_INIT_LOG |
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);
+ LF_SET(retain_env ? DB_INIT_LOCK : DB_PRIVATE);
if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0) {
dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
@@ -204,8 +190,7 @@ shutdown: exitval = 1;
* SUCH DAMAGE.
*/
int
-read_timestamp(progname, arg, timep)
- const char *progname;
+read_timestamp(arg, timep)
char *arg;
time_t *timep;
{
@@ -276,14 +261,13 @@ terr: fprintf(stderr,
int
usage()
{
- (void)fprintf(stderr, "%s\n",
-"usage: db_recover [-ceVv] [-h home] [-P password] [-t [[CC]YY]MMDDhhmm[.SS]]");
+ (void)fprintf(stderr, "usage: %s %s\n", progname,
+ "[-ceVv] [-h home] [-P password] [-t [[CC]YY]MMDDhhmm[.SS]]");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_stat/db_stat.c b/db/db_stat/db_stat.c
index aa1918655..62fa01878 100644
--- a/db/db_stat/db_stat.c
+++ b/db/db_stat/db_stat.c
@@ -1,50 +1,31 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_stat.c,v 11.158 2004/07/15 18:26:48 ubell Exp $
+ * $Id: db_stat.c,v 12.14 2006/08/26 09:23:19 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+#include "dbinc/db_page.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-#include "dbinc/db_page.h"
-#include "dbinc/txn.h"
-
typedef enum { T_NOTSET,
- T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_REP, T_TXN } test_t;
+ T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_MUTEX, T_REP, T_TXN } test_t;
int db_init __P((DB_ENV *, char *, test_t, u_int32_t, int *));
int main __P((int, char *[]));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -53,28 +34,31 @@ 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;
+ DB *dbp;
test_t ttype;
- u_int32_t cache, env_flags, fast, flags;
+ u_int32_t cache, flags;
int ch, exitval;
int nflag, private, resize, ret;
char *db, *home, *p, *passwd, *subdb;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbenv = NULL;
dbp = NULL;
ttype = T_NOTSET;
cache = MEGABYTE;
- exitval = fast = flags = nflag = private = 0;
+ exitval = flags = nflag = private = 0;
db = home = passwd = subdb = NULL;
- env_flags = 0;
- while ((ch = getopt(argc, argv, "C:cd:Eefh:L:lM:mNP:R:rs:tVZ")) != EOF)
+ while ((ch = getopt(argc,
+ argv, "C:cd:Eefh:L:lM:mNP:R:rs:tVxX:Z")) != EOF)
switch (ch) {
case 'C': case 'c':
if (ttype != T_NOTSET && ttype != T_LOCK)
@@ -119,7 +103,10 @@ main(argc, argv)
LF_SET(DB_STAT_ALL);
break;
case 'f':
- fast = DB_FAST_STAT;
+ if (ttype != T_NOTSET && ttype != T_DB)
+ goto argcombo;
+ ttype = T_DB;
+ LF_SET(DB_FAST_STAT);
break;
case 'h':
home = optarg;
@@ -194,13 +181,27 @@ main(argc, argv)
argcombo: fprintf(stderr,
"%s: illegal option combination\n",
progname);
- return (EXIT_FAILURE);
+ return (usage());
}
ttype = T_TXN;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
+ case 'X': case 'x':
+ if (ttype != T_NOTSET && ttype != T_MUTEX)
+ goto argcombo;
+ ttype = T_MUTEX;
+ if (ch != 'x')
+ for (p = optarg; *p; ++p)
+ switch (*p) {
+ case 'A':
+ LF_SET(DB_STAT_ALL);
+ break;
+ default:
+ return (usage());
+ }
+ break;
case 'Z':
LF_SET(DB_STAT_CLEAR);
break;
@@ -216,18 +217,16 @@ argcombo: fprintf(stderr,
if (db == NULL)
return (usage());
break;
- case T_NOTSET:
- return (usage());
- /* NOTREACHED */
case T_ENV:
case T_LOCK:
case T_LOG:
case T_MPOOL:
+ case T_MUTEX:
case T_REP:
case T_TXN:
- if (fast != 0)
- return (usage());
break;
+ case T_NOTSET:
+ return (usage());
}
/* Handle possible interruptions. */
@@ -237,7 +236,7 @@ argcombo: fprintf(stderr,
* Create an environment object and initialize it for error
* reporting.
*/
-retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
+retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto err;
@@ -269,17 +268,26 @@ retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
switch (ttype) {
case T_DB:
- if (flags != 0)
- return (usage());
-
/* Create the DB object and open the file. */
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
goto err;
}
- if ((ret = dbp->open(dbp,
- NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ /*
+ * We open the database for writing so we can update the cached
+ * statistics, but it's OK to fail, we can open read-only and
+ * proceed.
+ *
+ * Turn off error messages for now -- we can't open lots of
+ * databases read-write (for example, master databases and
+ * hash databases for which we don't know the hash function).
+ */
+ dbenv->set_errfile(dbenv, NULL);
+ ret = dbp->open(dbp, NULL, db, subdb, DB_UNKNOWN, 0, 0);
+ dbenv->set_errfile(dbenv, stderr);
+ if (ret != 0 && (ret = dbp->open(
+ dbp, NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open: %s", db);
goto err;
}
@@ -298,40 +306,6 @@ retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
}
}
- /*
- * See if we can open this db read/write to update counts.
- * If its a master-db then we cannot. So check to see,
- * if its btree then it might be.
- */
- if (subdb == NULL && dbp->type == DB_BTREE &&
- (ret = dbp->stat(dbp, NULL, &sp, DB_FAST_STAT)) != 0) {
- dbenv->err(dbenv, ret, "DB->stat");
- goto err;
- }
-
- if (subdb != NULL ||
- dbp->type != DB_BTREE ||
- (sp->bt_metaflags & BTM_SUBDB) == 0) {
- if ((ret = db_create(&alt_dbp, dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "db_create");
- goto err;
- }
- if ((ret = dbp->open(alt_dbp, NULL,
- db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
- if (subdb == NULL)
- dbenv->err(dbenv,
- ret, "DB->open: %s", db);
- else
- dbenv->err(dbenv,
- ret, "DB->open: %s:%s", db, subdb);
- (void)alt_dbp->close(alt_dbp, DB_NOSYNC);
- goto err;
- }
-
- (void)dbp->close(dbp, DB_NOSYNC);
- dbp = alt_dbp;
- }
-
if (dbp->stat_print(dbp, flags))
goto err;
break;
@@ -351,6 +325,10 @@ retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
if (dbenv->memp_stat_print(dbenv, flags))
goto err;
break;
+ case T_MUTEX:
+ if (dbenv->mutex_stat_print(dbenv, flags))
+ goto err;
+ break;
case T_REP:
if (dbenv->rep_stat_print(dbenv, flags))
goto err;
@@ -412,8 +390,7 @@ db_init(dbenv, home, ttype, cache, is_private)
* error, I think.
*/
*is_private = 0;
- if ((ret =
- dbenv->open(dbenv, home, DB_JOINENV | DB_USE_ENVIRON, 0)) == 0)
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) == 0)
return (0);
if (ret == DB_VERSION_MISMATCH)
goto err;
@@ -456,17 +433,16 @@ err: dbenv->err(dbenv, ret, "DB_ENV->open");
int
usage()
{
- fprintf(stderr, "usage: db_stat %s\n",
+ fprintf(stderr, "usage: %s %s\n", progname,
"-d file [-fN] [-h home] [-P password] [-s database]");
- fprintf(stderr, "usage: db_stat %s\n\t%s\n",
- "[-cEelmNrtVZ] [-C Aclop]",
- "[-h home] [-L A] [-M A] [-P password] [-R A]");
+ fprintf(stderr, "usage: %s %s\n\t%s\n", progname,
+ "[-cEelmNrtVxZ] [-C Aclop]",
+ "[-h home] [-L A] [-M A] [-P password] [-R A] [-X A]");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_stat/dd.sh b/db/db_stat/dd.sh
index d8bb7033f..eee34e61b 100644
--- a/db/db_stat/dd.sh
+++ b/db/db_stat/dd.sh
@@ -1,5 +1,5 @@
#! /bin/sh
-# $Id: dd.sh,v 1.3 2004/05/04 15:51:45 bostic Exp $
+# $Id: dd.sh,v 12.1 2006/08/30 16:11:57 bostic Exp $
#
# Display environment's deadlocks based on "db_stat -Co" output.
@@ -22,13 +22,16 @@ else
fi
# 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"
+egrep '\<WAIT\>.*\<page\>' $1 | awk '{print $1 " " $5 " " $7}' |
+while read l f p; do
+ for i in `egrep "\<HELD\>.*\<$f\>.*\<page\>.*\<$p\>" $1 |
+ awk '{print $1}'`; do
+ echo "$l $i"
+ done
done | tsort > /dev/null 2>$t1
# Display the locks in a single cycle.
+c=1
display_one() {
if [ -s $1 ]; then
echo "Deadlock #$c ============"
@@ -61,7 +64,6 @@ display_one() {
# 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
diff --git a/db/db_upgrade/db_upgrade.c b/db/db_upgrade/db_upgrade.c
index 0f43be6ba..0d7319050 100644
--- a/db/db_upgrade/db_upgrade.c
+++ b/db/db_upgrade/db_upgrade.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_upgrade.c,v 1.37 2004/06/10 01:00:09 bostic Exp $
+ * $Id: db_upgrade.c,v 12.9 2006/08/26 09:23:22 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include "db_int.h"
-
int main __P((int, char *[]));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -36,21 +29,25 @@ 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, exitval, nflag, ret, t_ret;
+ int ch, exitval, nflag, ret, t_ret, verbose;
char *home, *passwd;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbenv = NULL;
- flags = nflag = 0;
+ flags = nflag = verbose = 0;
exitval = 0;
home = passwd = NULL;
- while ((ch = getopt(argc, argv, "h:NP:sV")) != EOF)
+ while ((ch = getopt(argc, argv, "h:NP:sVv")) != EOF)
switch (ch) {
case 'h':
home = optarg;
@@ -73,6 +70,9 @@ main(argc, argv)
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
return (EXIT_SUCCESS);
+ case 'v':
+ verbose = 1;
+ break;
case '?':
default:
return (usage());
@@ -120,8 +120,7 @@ main(argc, argv)
* If attaching to a pre-existing environment fails, create a
* private one and try again.
*/
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
+ if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 &&
(ret == DB_VERSION_MISMATCH ||
(ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON,
@@ -146,6 +145,13 @@ main(argc, argv)
}
if (ret != 0)
goto shutdown;
+ /*
+ * People get concerned if they don't see a success message.
+ * If verbose is set, give them one.
+ */
+ if (verbose)
+ printf("%s: %s upgraded successfully\n",
+ progname, argv[0]);
}
if (0) {
@@ -169,14 +175,13 @@ shutdown: exitval = 1;
int
usage()
{
- fprintf(stderr, "%s\n",
- "usage: db_upgrade [-NsV] [-h home] [-P password] db_file ...");
+ fprintf(stderr, "usage: %s %s\n", progname,
+ "[-NsVv] [-h home] [-P password] db_file ...");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/db_verify/db_verify.c b/db/db_verify/db_verify.c
index 148ce1f8e..f09ebc4ff 100644
--- a/db/db_verify/db_verify.c
+++ b/db/db_verify/db_verify.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_verify.c,v 1.49 2004/08/01 00:21:58 bostic Exp $
+ * $Id: db_verify.c,v 12.8 2006/08/26 09:23:23 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
#endif
-#include "db_int.h"
-
int main __P((int, char *[]));
int usage __P((void));
-int version_check __P((const char *));
+int version_check __P((void));
+
+const char *progname;
int
main(argc, argv)
@@ -36,7 +29,6 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- const char *progname = "db_verify";
DB *dbp, *dbp1;
DB_ENV *dbenv;
u_int32_t flags, cache;
@@ -44,7 +36,12 @@ main(argc, argv)
int quiet, resize, ret;
char *home, *passwd;
- if ((ret = version_check(progname)) != 0)
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ if ((ret = version_check()) != 0)
return (ret);
dbenv = NULL;
@@ -150,12 +147,24 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
}
}
+ /*
+ * Find out if we have a transactional environment so that we can
+ * make sure that we don't open the verify database with logging
+ * enabled.
+ */
for (; !__db_util_interrupted() && argv[0] != NULL; ++argv) {
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "%s: db_create", progname);
goto shutdown;
}
+ if (TXN_ON(dbenv) &&
+ (ret = dbp->set_flags(dbp, DB_TXN_NOT_DURABLE)) != 0) {
+ dbenv->err(
+ dbenv, ret, "%s: db_set_flags", progname);
+ goto shutdown;
+ }
+
/*
* We create a 2nd dbp to this database to get its pagesize
* because the dbp we're using for verify cannot be opened.
@@ -171,6 +180,13 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
goto shutdown;
}
+ if (TXN_ON(dbenv) && (ret =
+ dbp1->set_flags(dbp1, DB_TXN_NOT_DURABLE)) != 0) {
+ dbenv->err(
+ dbenv, ret, "%s: db_set_flags", progname);
+ goto shutdown;
+ }
+
ret = dbp1->open(dbp1,
NULL, argv[0], NULL, DB_UNKNOWN, DB_RDONLY, 0);
@@ -230,14 +246,13 @@ shutdown: exitval = 1;
int
usage()
{
- fprintf(stderr, "%s\n",
- "usage: db_verify [-NoqV] [-h home] [-P password] db_file ...");
+ fprintf(stderr, "usage: %s %s\n", progname,
+ "[-NoqV] [-h home] [-P password] db_file ...");
return (EXIT_FAILURE);
}
int
-version_check(progname)
- const char *progname;
+version_check()
{
int v_major, v_minor, v_patch;
diff --git a/db/dbinc/btree.h b/db/dbinc/btree.h
index d6bb2c839..e7b3998b4 100644
--- a/db/dbinc/btree.h
+++ b/db/dbinc/btree.h
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995, 1996
@@ -39,11 +39,15 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: btree.h,v 11.50 2004/07/22 21:52:57 bostic Exp $
+ * $Id: btree.h,v 12.12 2006/08/24 14:45:27 bostic Exp $
*/
#ifndef _DB_BTREE_H_
#define _DB_BTREE_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/* Forward structure declarations. */
struct __btree; typedef struct __btree BTREE;
struct __cursor; typedef struct __cursor BTREE_CURSOR;
@@ -74,6 +78,7 @@ struct __recno; typedef struct __recno RECNO;
/* Flags for __bam_stkrel(). */
#define STK_CLRDBC 0x01 /* Clear dbc->page reference. */
#define STK_NOLOCK 0x02 /* Don't retain locks. */
+#define STK_PGONLY 0x04
/* Flags for __ram_ca(). These get logged, so make the values explicit. */
typedef enum {
@@ -97,30 +102,36 @@ typedef enum {
* to return deleted entries. To simplify both the mnemonic representation
* and the code that checks for various cases, we construct a set of bitmasks.
*/
-#define S_READ 0x00001 /* Read locks. */
-#define S_WRITE 0x00002 /* Write locks. */
-
-#define S_APPEND 0x00040 /* Append to the tree. */
-#define S_DELNO 0x00080 /* Don't return deleted items. */
-#define S_DUPFIRST 0x00100 /* Return first duplicate. */
-#define S_DUPLAST 0x00200 /* Return last duplicate. */
-#define S_EXACT 0x00400 /* Exact items only. */
-#define S_PARENT 0x00800 /* Lock page pair. */
-#define S_STACK 0x01000 /* Need a complete stack. */
-#define S_PAST_EOF 0x02000 /* If doing insert search (or keyfirst
+#define SR_READ 0x00001 /* Read locks. */
+#define SR_WRITE 0x00002 /* Write locks. */
+
+#define SR_APPEND 0x00040 /* Append to the tree. */
+#define SR_DELNO 0x00080 /* Don't return deleted items. */
+#define SR_DUPFIRST 0x00100 /* Return first duplicate. */
+#define SR_DUPLAST 0x00200 /* Return last duplicate. */
+#define SR_EXACT 0x00400 /* Exact items only. */
+#define SR_PARENT 0x00800 /* Lock page pair. */
+#define SR_STACK 0x01000 /* Need a complete stack. */
+#define SR_PAST_EOF 0x02000 /* If doing insert search (or keyfirst
* or keylast operations), or a split
* on behalf of an insert, it's okay to
* return an entry one past end-of-page.
*/
-#define S_STK_ONLY 0x04000 /* Just return info in the stack */
-
-#define S_DELETE (S_WRITE | S_DUPFIRST | S_DELNO | S_EXACT | S_STACK)
-#define S_FIND (S_READ | S_DUPFIRST | S_DELNO)
-#define S_FIND_WR (S_WRITE | S_DUPFIRST | S_DELNO)
-#define S_INSERT (S_WRITE | S_DUPLAST | S_PAST_EOF | S_STACK)
-#define S_KEYFIRST (S_WRITE | S_DUPFIRST | S_PAST_EOF | S_STACK)
-#define S_KEYLAST (S_WRITE | S_DUPLAST | S_PAST_EOF | S_STACK)
-#define S_WRPAIR (S_WRITE | S_DUPLAST | S_PAST_EOF | S_PARENT)
+#define SR_STK_ONLY 0x04000 /* Just return info in the stack */
+#define SR_MAX 0x08000 /* Get the right most key */
+#define SR_MIN 0x10000 /* Get the left most key */
+#define SR_NEXT 0x20000 /* Get the page after this key */
+#define SR_DEL 0x40000 /* Get the tree to delete this key. */
+#define SR_START 0x80000 /* Level to start stack. */
+
+#define SR_DELETE \
+ (SR_WRITE | SR_DUPFIRST | SR_DELNO | SR_EXACT | SR_STACK)
+#define SR_FIND (SR_READ | SR_DUPFIRST | SR_DELNO)
+#define SR_FIND_WR (SR_WRITE | SR_DUPFIRST | SR_DELNO)
+#define SR_INSERT (SR_WRITE | SR_DUPLAST | SR_PAST_EOF | SR_STACK)
+#define SR_KEYFIRST (SR_WRITE | SR_DUPFIRST | SR_PAST_EOF | SR_STACK)
+#define SR_KEYLAST (SR_WRITE | SR_DUPLAST | SR_PAST_EOF | SR_STACK)
+#define SR_WRPAIR (SR_WRITE | SR_DUPLAST | SR_PAST_EOF | SR_PARENT)
/*
* Various routines pass around page references. A page reference is
@@ -153,7 +164,7 @@ struct __epg {
if ((ret = ((c)->csp == (c)->esp ? \
__bam_stkgrow(dbenv, c) : 0)) == 0) { \
(c)->csp->page = pagep; \
- (c)->csp->indx = page_indx; \
+ (c)->csp->indx = (page_indx); \
(c)->csp->entries = NUM_ENT(pagep); \
(c)->csp->lock = l; \
(c)->csp->lock_mode = mode; \
@@ -166,10 +177,10 @@ struct __epg {
} while (0)
#define BT_STK_NUM(dbenv, c, pagep, page_indx, 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 = NULL; \
- (c)->csp->indx = page_indx; \
+ (c)->csp->indx = (page_indx); \
(c)->csp->entries = NUM_ENT(pagep); \
LOCK_INIT((c)->csp->lock); \
(c)->csp->lock_mode = DB_LOCK_NG; \
@@ -259,7 +270,6 @@ struct __btree { /* Btree access method. */
db_pgno_t bt_meta; /* Database meta-data page. */
db_pgno_t bt_root; /* Database root page. */
- u_int32_t bt_maxkey; /* Maximum keys per page. */
u_int32_t bt_minkey; /* Minimum keys per page. */
/* Btree comparison function. */
@@ -301,6 +311,7 @@ struct __btree { /* Btree access method. */
FILE *re_fp; /* Source file handle. */
int re_eof; /* Backing source file EOF reached. */
db_recno_t re_last; /* Last record number read. */
+
};
/*
@@ -315,6 +326,16 @@ typedef enum {
DB_CA_SPLIT = 4
} db_ca_mode;
+/*
+ * Flags for __bam_pinsert.
+ */
+#define BPI_SPACEONLY 0x01 /* Only check for space to update. */
+#define BPI_NORECNUM 0x02 /* Not update the recnum on the left. */
+
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/btree_auto.h"
#include "dbinc_auto/btree_ext.h"
#include "dbinc/db_am.h"
diff --git a/db/dbinc/crypto.h b/db/dbinc/crypto.h
index 8eeebf81b..86c7a0b7d 100644
--- a/db/dbinc/crypto.h
+++ b/db/dbinc/crypto.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: crypto.h,v 1.12 2004/01/28 03:36:00 bostic Exp $
+ * $Id: crypto.h,v 12.5 2006/08/24 14:45:27 bostic Exp $
*/
#ifndef _DB_CRYPTO_H_
#define _DB_CRYPTO_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* !!!
* These are the internal representations of the algorithm flags.
@@ -56,7 +60,7 @@ struct __db_cipher {
/*
* Shared ciphering structure
- * No DB_MUTEX needed because all information is read-only after creation.
+ * No mutex needed because all information is read-only after creation.
*/
typedef struct __cipher {
roff_t passwd; /* Offset to shared passwd */
@@ -75,4 +79,8 @@ typedef struct __aes_cipher {
#include "dbinc_auto/crypto_ext.h"
#endif /* HAVE_CRYPTO */
+
+#if defined(__cplusplus)
+}
+#endif
#endif /* !_DB_CRYPTO_H_ */
diff --git a/db/dbinc/cxx_int.h b/db/dbinc/cxx_int.h
index d71ca25d0..bde013543 100644
--- a/db/dbinc/cxx_int.h
+++ b/db/dbinc/cxx_int.h
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: cxx_int.h,v 11.25 2004/09/22 22:20:31 mjc Exp $
+ * $Id: cxx_int.h,v 12.4 2006/08/24 14:45:27 bostic Exp $
*/
-#ifndef _CXX_INT_H_
-#define _CXX_INT_H_
+#ifndef _DB_CXX_INT_H_
+#define _DB_CXX_INT_H_
// private data structures known to the implementation only
@@ -27,7 +27,6 @@
// for a wrapper class that has an underlying pointer representation.
//
#define WRAPPED_CLASS(_WRAPPER_CLASS, _IMP_CLASS, _WRAPPED_TYPE) \
- \
class _IMP_CLASS {}; \
\
inline _WRAPPED_TYPE *unwrap(_WRAPPER_CLASS *val) \
@@ -74,4 +73,4 @@ WRAPPED_CLASS(DbTxn, DbTxnImp, DB_TXN)
/* values for Db::flags_ */
#define DB_CXX_PRIVATE_ENV 0x00000001
-#endif /* !_CXX_INT_H_ */
+#endif /* !_DB_CXX_INT_H_ */
diff --git a/db/dbinc/db.in b/db/dbinc/db.in
index dc3d43594..19180e2c3 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db.in,v 11.463 2004/10/11 18:47:50 bostic Exp $
+ * $Id: db.in,v 12.108 2006/09/13 14:53:37 mjc Exp $
*
* db.h include file layout:
* General.
@@ -27,8 +27,11 @@
@stdint_h_decl@
@stddef_h_decl@
#include <stdio.h>
+@unistd_h_decl@
+@thread_h_decl@
#endif
+@platform_header@
#if defined(__cplusplus)
extern "C" {
#endif
@@ -82,9 +85,7 @@ extern "C" {
* (and we don't have to worry about systems that store floats in other than
* power-of-2 numbers of bytes). Additionally this fixes compilers that rewrite
* structure assignments and ANSI C memcpy calls to be in-line instructions
- * that happen to require alignment. Note: this alignment isn't sufficient for
- * mutexes, which depend on things like cache line alignment. Mutex alignment
- * is handled separately, in mutex.h.
+ * that happen to require alignment.
*
* uintptr_t --
* Unsigned type that's the same size as a pointer. There are places where
@@ -101,6 +102,10 @@ extern "C" {
*/
@db_seq_decl@
+/* Thread and process identification. */
+@db_threadid_t_decl@
+@pid_t_decl@
+
/* 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. */
@@ -127,6 +132,7 @@ typedef uintptr_t roff_t;
struct __db; typedef struct __db DB;
struct __db_bt_stat; typedef struct __db_bt_stat DB_BTREE_STAT;
struct __db_cipher; typedef struct __db_cipher DB_CIPHER;
+struct __db_compact; typedef struct __db_compact DB_COMPACT;
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;
@@ -134,6 +140,8 @@ 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_locktab; typedef struct __db_locktab DB_LOCKTAB;
+struct __db_log; typedef struct __db_log DB_LOG;
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;
@@ -141,13 +149,18 @@ 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_mutex_stat; typedef struct __db_mutex_stat DB_MUTEX_STAT;
+struct __db_mutex_t; typedef struct __db_mutex_t DB_MUTEX;
+struct __db_mutexmgr; typedef struct __db_mutexmgr DB_MUTEXMGR;
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_sequence; typedef struct __db_sequence DB_SEQUENCE;
+struct __db_repmgr_site; \
+ typedef struct __db_repmgr_site DB_REPMGR_SITE;
struct __db_seq_record; typedef struct __db_seq_record DB_SEQ_RECORD;
struct __db_seq_stat; typedef struct __db_seq_stat DB_SEQUENCE_STAT;
+struct __db_sequence; typedef struct __db_sequence DB_SEQUENCE;
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;
@@ -158,13 +171,9 @@ 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 {
- /*
- * data/size must be fields 1 and 2 for DB 1.85 compatibility.
- */
void *data; /* Key/data */
u_int32_t size; /* key/data length */
@@ -172,13 +181,16 @@ struct __db_dbt {
u_int32_t dlen; /* RO: get/put record length. */
u_int32_t doff; /* RO: get/put record offset. */
+ void *app_data;
+
#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. */
+#define DB_DBT_USERCOPY 0x020 /* Use the user-supplied callback. */
+#define DB_DBT_USERMEM 0x040 /* Return in user's memory. */
+#define DB_DBT_DUPOK 0x080 /* Insert if duplicate. */
u_int32_t flags;
};
@@ -188,17 +200,19 @@ struct __db_dbt {
* interface specific flags in this range.
*/
#define DB_CREATE 0x0000001 /* Create file as necessary. */
-#define DB_CXX_NO_EXCEPTIONS 0x0000002 /* C++: return error values. */
+#define DB_DURABLE_UNKNOWN 0x0000002 /* Durability on open (internal). */
#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. */
+#define DB_MULTIVERSION 0x0000008 /* Multiversion concurrency control. */
+#define DB_NOMMAP 0x0000010 /* Don't mmap underlying file. */
+#define DB_RDONLY 0x0000020 /* Read-only (O_RDONLY). */
+#define DB_RECOVER 0x0000040 /* Run normal recovery. */
+#define DB_THREAD 0x0000080 /* Applications are threaded. */
+#define DB_TRUNCATE 0x0000100 /* Discard existing DB (O_TRUNC). */
+#define DB_TXN_NOSYNC 0x0000200 /* Do not sync log on commit. */
+#define DB_TXN_NOT_DURABLE 0x0000400 /* Do not log changes. */
+#define DB_TXN_WRITE_NOSYNC 0x0000800 /* Write the log but don't sync. */
+#define DB_USE_ENVIRON 0x0001000 /* Use the environment. */
+#define DB_USE_ENVIRON_ROOT 0x0002000 /* Use the environment if root. */
/*
* Common flags --
@@ -206,66 +220,84 @@ struct __db_dbt {
* 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_DEGREE_2:
+ * DB_ENV->set_flags, DB->open
+ * (Note: until the 4.3 release, legal to DB->associate, DB->del,
+ * DB->put, DB->remove, DB->rename and DB->truncate, and others.)
+ * DB_READ_COMMITTED:
* DB->cursor, DB->get, DB->join, DBcursor->c_get, DB_ENV->txn_begin
- * DB_DIRTY_READ:
+ * DB_READ_UNCOMMITTED:
* 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
+ * DB_TXN_SNAPSHOT:
+ * DB_ENV->set_flags, DB_ENV->txn_begin, DB->cursor
*
* !!!
- * The DB_DIRTY_READ and DB_DEGREE_2 bit masks can't be changed without
- * also changing the masks for the flags that can be OR'd into DB
+ * The DB_READ_COMMITTED and DB_READ_UNCOMMITTED bit masks 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 0x01000000/* Implied transaction. */
-#define DB_DEGREE_2 0x02000000/* Degree 2. */
-#define DB_DIRTY_READ 0x04000000/* Dirty Read. */
-#define DB_NO_AUTO_COMMIT 0x08000000/* Override env-wide AUTOCOMMIT. */
+#define DB_AUTO_COMMIT 0x02000000/* Implied transaction. */
+
+#define DB_READ_COMMITTED 0x04000000/* Degree 2 isolation. */
+#define DB_DEGREE_2 0x04000000/* Historic name. */
+
+#define DB_READ_UNCOMMITTED 0x08000000/* Degree 1 isolation. */
+#define DB_DIRTY_READ 0x08000000/* Historic name. */
+
+#define DB_TXN_SNAPSHOT 0x10000000/* Snapshot isolation. */
/*
- * Flags private to db_env_create.
+ * Flags common to db_env_create and db_create.
*/
-#define DB_RPCCLIENT 0x0000001 /* An RPC client environment. */
+#define DB_CXX_NO_EXCEPTIONS 0x0000001 /* C++: return error values. */
+
+/*
+ * Flags private to db_env_create.
+ * Shared flags up to 0x0000001 */
+#define DB_RPCCLIENT 0x0000002 /* An RPC client environment. */
/*
* Flags private to db_create.
- */
-#define DB_REP_CREATE 0x0000001 /* Open of an internal rep database. */
+ * Shared flags up to 0x0000001 */
#define DB_XA_CREATE 0x0000002 /* Open in an XA environment. */
/*
* 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. */
+ * Shared flags up to 0x0002000 */
+#define DB_INIT_CDB 0x0004000 /* Concurrent Access Methods. */
+#define DB_INIT_LOCK 0x0008000 /* Initialize locking. */
+#define DB_INIT_LOG 0x0010000 /* Initialize logging. */
+#define DB_INIT_MPOOL 0x0020000 /* Initialize mpool. */
+#define DB_INIT_REP 0x0040000 /* Initialize replication. */
+#define DB_INIT_TXN 0x0080000 /* Initialize transactions. */
+#define DB_LOCKDOWN 0x0100000 /* Lock memory into physical core. */
+#define DB_PRIVATE 0x0200000 /* DB_ENV is process local. */
+#define DB_RECOVER_FATAL 0x0400000 /* Run catastrophic recovery. */
+#define DB_REGISTER 0x0800000 /* Multi-process registry. */
+#define DB_SYSTEM_MEM 0x1000000 /* Use system-backed memory. */
+
+#define DB_JOINENV 0x0 /* Compatibility. */
/*
* Flags private to DB->open.
- * 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. */
+ * Shared flags up to 0x0002000 */
+#define DB_EXCL 0x0004000 /* Exclusive open (O_EXCL). */
+#define DB_FCNTL_LOCKING 0x0008000 /* UNDOC: fcntl(2) locking. */
+#define DB_NO_AUTO_COMMIT 0x0010000 /* Override env-wide AUTOCOMMIT. */
+#define DB_RDWRMASTER 0x0020000 /* UNDOC: allow subdb master open R/W */
+#define DB_WRITEOPEN 0x0040000 /* UNDOC: open with write lock. */
+
+/*
+ * Flags private to DB->associate.
+ * Shared flags up to 0x0002000 */
+#define DB_IMMUTABLE_KEY 0x0004000 /* Secondary key is immutable. */
+/* Shared flags at 0x1000000 */
/*
* 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. */
+ * Shared flags up to 0x0002000 */
+#define DB_TXN_NOWAIT 0x0004000 /* Do not wait for locks in this TXN. */
+#define DB_TXN_SYNC 0x0008000 /* Always sync log on commit. */
/*
* Flags private to DB_ENV->set_encrypt.
@@ -274,25 +306,25 @@ struct __db_dbt {
/*
* Flags private to DB_ENV->set_flags.
- * Shared flags up to 0x00000800 */
-#define DB_CDB_ALLDB 0x00001000/* Set CDB locking per environment. */
-#define DB_DIRECT_DB 0x00002000/* Don't buffer databases in the OS. */
-#define DB_DIRECT_LOG 0x00004000/* Don't buffer log files in the OS. */
-#define DB_DSYNC_LOG 0x00008000/* Set O_DSYNC on the log. */
-#define DB_LOG_AUTOREMOVE 0x00010000/* Automatically remove log files. */
-#define DB_LOG_INMEMORY 0x00020000/* Store logs in buffers in memory. */
-#define DB_NOLOCKING 0x00040000/* Set locking/mutex behavior. */
-#define DB_NOPANIC 0x00080000/* Set panic state per DB_ENV. */
-#define DB_OVERWRITE 0x00100000/* Overwrite unlinked region files. */
-#define DB_PANIC_ENVIRONMENT 0x00200000/* Set panic state per environment. */
-#define DB_REGION_INIT 0x00400000/* Page-fault regions on open. */
-#define DB_TIME_NOTGRANTED 0x00800000/* Return NOTGRANTED on timeout. */
-/* Shared flags at 0x01000000 */
+ * Shared flags up to 0x00002000 */
+#define DB_CDB_ALLDB 0x00004000/* Set CDB locking per environment. */
+#define DB_DIRECT_DB 0x00008000/* Don't buffer databases in the OS. */
+#define DB_DIRECT_LOG 0x00010000/* Don't buffer log files in the OS. */
+#define DB_DSYNC_DB 0x00020000/* Set O_DSYNC on the databases. */
+#define DB_DSYNC_LOG 0x00040000/* Set O_DSYNC on the log. */
+#define DB_LOG_AUTOREMOVE 0x00080000/* Automatically remove log files. */
+#define DB_LOG_INMEMORY 0x00100000/* Store logs in buffers in memory. */
+#define DB_NOLOCKING 0x00200000/* Set locking/mutex behavior. */
+#define DB_NOPANIC 0x00400000/* Set panic state per DB_ENV. */
+#define DB_OVERWRITE 0x00800000/* Overwrite unlinked region files. */
+#define DB_PANIC_ENVIRONMENT 0x01000000/* Set panic state per environment. */
/* Shared flags at 0x02000000 */
/* Shared flags at 0x04000000 */
/* Shared flags at 0x08000000 */
-#define DB_TXN_WRITE_NOSYNC 0x10000000/* Write, don't sync, on txn commit. */
-#define DB_YIELDCPU 0x20000000/* Yield the CPU (a lot). */
+/* Shared flags at 0x10000000 */
+#define DB_REGION_INIT 0x20000000/* Page-fault regions on open. */
+#define DB_TIME_NOTGRANTED 0x40000000/* Return NOTGRANTED on timeout. */
+#define DB_YIELDCPU 0x80000000/* Yield the CPU (a lot). */
/*
* Flags private to DB->set_feedback's callback.
@@ -301,37 +333,47 @@ struct __db_dbt {
#define DB_VERIFY 0x0000002 /* Verifying. */
/*
+ * Flags private to DB->compact.
+ * Shared flags up to 0x00002000
+ */
+#define DB_FREELIST_ONLY 0x00004000 /* Just sort and truncate. */
+#define DB_FREE_SPACE 0x00008000 /* Free space . */
+#define DB_COMPACT_FLAGS \
+ (DB_FREELIST_ONLY | DB_FREE_SPACE)
+
+/*
* 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_DURABLE_UNKNOWN 0x0002000 /* internal: durability on open. */
-#define DB_EXTENT 0x0004000 /* internal: dealing with an extent. */
-#define DB_ODDFILESIZE 0x0008000 /* Truncate file to N * pgsize. */
+ * Shared flags up to 0x0002000 */
+#define DB_DIRECT 0x0004000 /* Don't buffer the file in the OS. */
+#define DB_EXTENT 0x0008000 /* internal: dealing with an extent. */
+#define DB_ODDFILESIZE 0x0010000 /* Truncate file to N * pgsize. */
/*
* Flags private to DB->set_flags.
- */
-#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_INORDER 0x0000010 /* Queue: strict ordering on consume. */
-#define DB_RECNUM 0x0000020 /* Btree: record numbers. */
-#define DB_RENUMBER 0x0000040 /* Recno: renumber on insert/delete. */
-#define DB_REVSPLITOFF 0x0000080 /* Btree: turn off reverse splits. */
-#define DB_SNAPSHOT 0x0000100 /* Recno: snapshot the input. */
+ * Shared flags up to 0x00002000 */
+#define DB_CHKSUM 0x00004000 /* Do checksumming */
+#define DB_DUP 0x00008000 /* Btree, Hash: duplicate keys. */
+#define DB_DUPSORT 0x00010000 /* Btree, Hash: duplicate keys. */
+#define DB_ENCRYPT 0x00020000 /* Btree, Hash: duplicate keys. */
+#define DB_INORDER 0x00040000 /* Queue: strict ordering on consume */
+#define DB_RECNUM 0x00080000 /* Btree: record numbers. */
+#define DB_RENUMBER 0x00100000 /* Recno: renumber on insert/delete. */
+#define DB_REVSPLITOFF 0x00200000 /* Btree: turn off reverse splits. */
+#define DB_SNAPSHOT 0x00400000 /* Recno: snapshot the input. */
/*
* Flags private to the DB_ENV->stat_print, DB->stat and DB->stat_print methods.
*/
-#define DB_STAT_ALL 0x0000001 /* Print: Everything. */
-#define DB_STAT_CLEAR 0x0000002 /* Clear stat after returning values. */
-#define DB_STAT_LOCK_CONF 0x0000004 /* Print: Lock conflict matrix. */
-#define DB_STAT_LOCK_LOCKERS 0x0000008 /* Print: Lockers. */
-#define DB_STAT_LOCK_OBJECTS 0x0000010 /* Print: Lock objects. */
-#define DB_STAT_LOCK_PARAMS 0x0000020 /* Print: Lock parameters. */
-#define DB_STAT_MEMP_HASH 0x0000040 /* Print: Mpool hash buckets. */
-#define DB_STAT_SUBSYSTEM 0x0000080 /* Print: Subsystems too. */
+#define DB_FAST_STAT 0x0000001 /* Don't traverse the database. */
+#define DB_STAT_ALL 0x0000002 /* Print: Everything. */
+#define DB_STAT_CLEAR 0x0000004 /* Clear stat after returning values. */
+#define DB_STAT_LOCK_CONF 0x0000008 /* Print: Lock conflict matrix. */
+#define DB_STAT_LOCK_LOCKERS 0x0000010 /* Print: Lockers. */
+#define DB_STAT_LOCK_OBJECTS 0x0000020 /* Print: Lock objects. */
+#define DB_STAT_LOCK_PARAMS 0x0000040 /* Print: Lock parameters. */
+#define DB_STAT_MEMP_HASH 0x0000080 /* Print: Mpool hash buckets. */
+#define DB_STAT_NOERROR 0x0000100 /* Internal: continue on error. */
+#define DB_STAT_SUBSYSTEM 0x0000200 /* Print: Subsystems too. */
/*
* Flags private to DB->join.
@@ -356,10 +398,45 @@ struct __db_dbt {
*/
/*
- * Flags private to DB->set_rep_transport's send callback.
+ * Flags private to DB->rep_set_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. */
+#define DB_REP_ANYWHERE 0x0000001 /* Message can be serviced anywhere. */
+#define DB_REP_NOBUFFER 0x0000002 /* Do not buffer this message. */
+#define DB_REP_PERMANENT 0x0000004 /* Important--app. may want to flush. */
+#define DB_REP_REREQUEST 0x0000008 /* This msg already been requested. */
+
+/*******************************************************
+ * Mutexes.
+ *******************************************************/
+typedef u_int32_t db_mutex_t;
+
+/*
+ * Flag arguments for DbEnv.mutex_alloc, DbEnv.is_alive and for the
+ * DB_MUTEX structure.
+ */
+#define DB_MUTEX_ALLOCATED 0x01 /* Mutex currently allocated. */
+#define DB_MUTEX_LOCKED 0x02 /* Mutex currently locked. */
+#define DB_MUTEX_LOGICAL_LOCK 0x04 /* Mutex backs a database lock. */
+#define DB_MUTEX_PROCESS_ONLY 0x08 /* Mutex private to a process. */
+#define DB_MUTEX_SELF_BLOCK 0x10 /* Must be able to block self. */
+
+struct __db_mutex_stat {
+ /* The following fields are maintained in the region's copy. */
+ u_int32_t st_mutex_align; /* Mutex alignment */
+ u_int32_t st_mutex_tas_spins; /* Mutex test-and-set spins */
+ u_int32_t st_mutex_cnt; /* Mutex count */
+ u_int32_t st_mutex_free; /* Available mutexes */
+ u_int32_t st_mutex_inuse; /* Mutexes in use */
+ u_int32_t st_mutex_inuse_max; /* Maximum mutexes ever in use */
+
+ /* The following fields are filled-in from other places. */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted without wait. */
+ roff_t st_regsize; /* Region size. */
+};
+
+/* This is the length of the buffer passed to DB_ENV->thread_id_string() */
+#define DB_THREADID_STRLEN 128
/*******************************************************
* Locking.
@@ -387,10 +464,9 @@ struct __db_dbt {
#define DB_LOCK_ABORT 0x001 /* Internal: Lock during abort. */
#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_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.
@@ -408,7 +484,7 @@ typedef enum {
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_READ_UNCOMMITTED=7, /* Degree 1 isolation. */
DB_LOCK_WWRITE=8 /* Was Written. */
} db_lockmode_t;
@@ -437,12 +513,10 @@ typedef enum {
DB_LSTAT_EXPIRED=2, /* Lock has expired. */
DB_LSTAT_FREE=3, /* Lock is unallocated. */
DB_LSTAT_HELD=4, /* Lock is currently held. */
- DB_LSTAT_NOTEXIST=5, /* Object on which lock was waiting
- * was removed */
- DB_LSTAT_PENDING=6, /* Lock was waiting and has been
+ DB_LSTAT_PENDING=5, /* Lock was waiting and has been
* promoted; waiting for the owner
* to run and upgrade it to held. */
- DB_LSTAT_WAITING=7 /* Lock is on the wait queue. */
+ DB_LSTAT_WAITING=6 /* Lock is on the wait queue. */
}db_status_t;
/* Lock statistics structure. */
@@ -459,11 +533,12 @@ struct __db_lock_stat {
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_nupgrade; /* Number of lock upgrades. */
+ u_int32_t st_ndowngrade; /* Number of lock downgrades. */
+ u_int32_t st_lock_wait; /* Lock conflicts w/ subsequent wait */
+ u_int32_t st_lock_nowait; /* Lock conflicts w/o subsequent wait */
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. */
@@ -512,8 +587,8 @@ struct __db_lockreq {
/*******************************************************
* Logging.
*******************************************************/
-#define DB_LOGVERSION 10 /* Current log version. */
-#define DB_LOGOLDVER 10 /* Oldest log version supported. */
+#define DB_LOGVERSION 12 /* Current log version. */
+#define DB_LOGOLDVER 8 /* Oldest log version supported. */
#define DB_LOGMAGIC 0x040988
/* Flag values for DB_ENV->log_archive(). */
@@ -528,9 +603,7 @@ struct __db_lockreq {
#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_RESEND 0x040 /* Resent log record */
-#define DB_LOG_WRNOSYNC 0x080 /* Write, don't sync log_put */
+#define DB_LOG_WRNOSYNC 0x020 /* Write, don't sync log_put */
/*
* A DB_LSN has two parts, a fileid which identifies a specific file, and an
@@ -571,8 +644,9 @@ struct __db_log_cursor {
u_int32_t c_prev; /* Cursor: previous record's offset */
DBT c_dbt; /* Return DBT. */
+ DB_LSN p_lsn; /* Persist LSN. */
+ u_int32_t p_version; /* Persist version. */
-#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. */
@@ -580,9 +654,11 @@ struct __db_log_cursor {
u_int32_t bp_maxrec; /* Max record length in the log file. */
- /* Methods. */
+ /* DB_LOGC PUBLIC HANDLE LIST BEGIN */
int (*close) __P((DB_LOGC *, u_int32_t));
int (*get) __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
+ int (*version) __P((DB_LOGC *, u_int32_t *, u_int32_t));
+ /* DB_LOGC PUBLIC HANDLE LIST END */
#define DB_LOG_DISK 0x01 /* Log record came from disk. */
#define DB_LOG_LOCKED 0x02 /* Log region already locked */
@@ -594,15 +670,17 @@ struct __db_log_cursor {
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. */
+ int st_mode; /* Log file permissions mode. */
u_int32_t st_lg_bsize; /* Log buffer size. */
u_int32_t st_lg_size; /* Log file size. */
+ u_int32_t st_record; /* Records entered into the log. */
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; /* Total I/O writes to the log. */
u_int32_t st_wcount_fill; /* Overflow writes to the log. */
+ u_int32_t st_rcount; /* Total I/O reads from 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. */
@@ -616,26 +694,28 @@ struct __db_log_stat {
};
/*
- * We need to record the first log record of a transaction.
- * For user defined logging this macro returns the place to
- * put that information, if it is need in rlsnp, otherwise it
- * leaves it unchanged.
+ * We need to record the first log record of a transaction. For user
+ * defined logging this macro returns the place to put that information,
+ * if it is need in rlsnp, otherwise it leaves it unchanged. We also
+ * need to track the last record of the transaction, this returns the
+ * place to put that info.
*/
-#define DB_SET_BEGIN_LSNP(txn, rlsnp) ((txn)->set_begin_lsnp(txn, rlsnp))
+#define DB_SET_TXN_LSNP(txn, blsnp, llsnp) \
+ ((txn)->set_txn_lsnp(txn, blsnp, llsnp))
/*******************************************************
* 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. */
+#define DB_MPOOL_DIRTY 0x002 /* Get page for an update. */
+#define DB_MPOOL_EDIT 0x004 /* Modify without copying. */
+#define DB_MPOOL_FREE 0x008 /* Free page if present. */
+#define DB_MPOOL_LAST 0x010 /* Return the last page. */
+#define DB_MPOOL_NEW 0x020 /* Create a new page. */
/* 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. */
-#define DB_MPOOL_FREE 0x008 /* Free page if present. */
+#define DB_MPOOL_DISCARD 0x001 /* Don't cache the page. */
/* Flags values for DB_MPOOLFILE->set_flags. */
#define DB_MPOOL_NOFILE 0x001 /* Never open a backing file. */
@@ -692,17 +772,17 @@ struct __db_mpoolfile {
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;
+ int32_t priority; /* Cache priority. */
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. */
+ /* DB_MPOOLFILE PUBLIC HANDLE LIST BEGIN */
int (*close) __P((DB_MPOOLFILE *, u_int32_t));
- int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ int (*get)
+ __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, 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));
@@ -723,6 +803,7 @@ struct __db_mpoolfile {
int (*get_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
int (*sync) __P((DB_MPOOLFILE *));
+ /* DB_MPOOLFILE PUBLIC HANDLE LIST END */
/*
* MP_FILEID_SET, MP_OPEN_CALLED and MP_READONLY do not need to be
@@ -734,8 +815,9 @@ struct __db_mpoolfile {
*/
#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. */
+#define MP_MULTIVERSION 0x004 /* Opened for multiversion access. */
+#define MP_OPEN_CALLED 0x008 /* File opened. */
+#define MP_READONLY 0x010 /* File is readonly. */
u_int32_t flags;
};
@@ -767,14 +849,19 @@ struct __db_mpool_stat {
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_nowait; /* Max hash lock granted with nowait. */
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_mvcc_frozen; /* Buffers frozen. */
+ u_int32_t st_mvcc_thawed; /* Buffers thawed. */
+ u_int32_t st_mvcc_freed; /* Frozen buffers freed. */
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. */
+ u_int32_t st_io_wait; /* Thread waited on buffer I/O. */
};
/* Mpool file statistics structure. */
@@ -818,12 +905,14 @@ typedef enum {
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. */
+ char *name; /* Transaction name */
+
+ db_threadid_t tid; /* Thread id for use in MT XA. */
+ void *td; /* Detail structure within region. */
db_timeout_t lock_timeout; /* Timeout for locks for this txn. */
- db_timeout_t expire; /* Time this txn expires. */
+ db_timeout_t expire; /* Time transaction expires. */
void *txn_list; /* Undo information for parent. */
/*
@@ -844,6 +933,16 @@ struct __db_txn {
/*
* !!!
* 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;
+
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
* TAILQ_HEAD(__events, __txn_event) events;
*/
struct {
@@ -864,16 +963,6 @@ struct __db_txn {
/*
* !!!
* 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;
-
- /*
- * !!!
- * Explicit representations of structures from queue.h.
* TAILQ_ENTRY(__db_txn) klinks;
*/
struct {
@@ -886,32 +975,44 @@ struct __db_txn {
u_int32_t cursors; /* Number of cursors open for txn */
- /* Methods. */
+ /* DB_TXN PUBLIC HANDLE LIST BEGIN */
int (*abort) __P((DB_TXN *));
int (*commit) __P((DB_TXN *, u_int32_t));
int (*discard) __P((DB_TXN *, u_int32_t));
+ int (*get_name) __P((DB_TXN *, const char **));
u_int32_t (*id) __P((DB_TXN *));
int (*prepare) __P((DB_TXN *, u_int8_t *));
- void (*set_begin_lsnp) __P((DB_TXN *txn, DB_LSN **));
+ int (*set_name) __P((DB_TXN *, const char *));
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_DEADLOCK 0x004 /* Transaction has deadlocked. */
-#define TXN_DEGREE_2 0x008 /* Has degree 2 isolation. */
-#define TXN_DIRTY_READ 0x010 /* Transaction does dirty reads. */
-#define TXN_LOCKTIMEOUT 0x020 /* Transaction has a lock timeout. */
-#define TXN_MALLOC 0x040 /* Structure allocated by TXN system. */
-#define TXN_NOSYNC 0x080 /* Do not sync on prepare and commit. */
-#define TXN_NOWAIT 0x100 /* Do not wait on locks. */
-#define TXN_RESTORED 0x200 /* Transaction has been restored. */
-#define TXN_SYNC 0x400 /* Sync on prepare and commit. */
+ /* DB_TXN PUBLIC HANDLE LIST END */
+
+ /* DB_TXN PRIVATE HANDLE LIST BEGIN */
+ void (*set_txn_lsnp) __P((DB_TXN *txn, DB_LSN **, DB_LSN **));
+ /* DB_TXN PRIVATE HANDLE LIST END */
+
+#define TXN_CHILDCOMMIT 0x0001 /* Txn has committed. */
+#define TXN_CDSGROUP 0x0002 /* CDS group handle. */
+#define TXN_COMPENSATE 0x0004 /* Compensating transaction. */
+#define TXN_DEADLOCK 0x0008 /* Txn has deadlocked. */
+#define TXN_LOCKTIMEOUT 0x0010 /* Txn has a lock timeout. */
+#define TXN_MALLOC 0x0020 /* Structure allocated by TXN system. */
+#define TXN_NOSYNC 0x0040 /* Do not sync on prepare and commit. */
+#define TXN_NOWAIT 0x0080 /* Do not wait on locks. */
+#define TXN_PRIVATE 0x0100 /* Txn owned by cursor.. */
+#define TXN_READ_COMMITTED 0x0200 /* Txn has degree 2 isolation. */
+#define TXN_READ_UNCOMMITTED 0x0400 /* Txn has degree 1 isolation. */
+#define TXN_RESTORED 0x0800 /* Txn has been restored. */
+#define TXN_SNAPSHOT 0x1000 /* Snapshot Isolation. */
+#define TXN_SYNC 0x2000 /* Write and sync on prepare/commit. */
+#define TXN_WRITE_NOSYNC 0x4000 /* Write only on prepare/commit. */
u_int32_t flags;
};
+#define TXN_SYNC_FLAGS (TXN_SYNC | TXN_NOSYNC | TXN_WRITE_NOSYNC)
+
/*
* Structure used for two phase commit interface. Berkeley DB support for two
- * phase commit is compatible with the X/open XA interface.
+ * 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
@@ -927,9 +1028,30 @@ struct __db_preplist {
struct __db_txn_active {
u_int32_t txnid; /* Transaction ID */
u_int32_t parentid; /* Transaction ID of parent */
+ pid_t pid; /* Process owning txn ID */
+ db_threadid_t tid; /* Thread owning txn ID */
+
DB_LSN lsn; /* LSN when transaction began */
+
+ DB_LSN read_lsn; /* Read LSN for MVCC */
+ u_int32_t mvcc_ref; /* MVCC reference count */
+
+#define TXN_ABORTED 1
+#define TXN_COMMITTED 2
+#define TXN_PREPARED 3
+#define TXN_RUNNING 4
+ u_int32_t status; /* Status of the transaction */
+
+#define TXN_XA_ABORTED 1
+#define TXN_XA_DEADLOCKED 2
+#define TXN_XA_ENDED 3
+#define TXN_XA_PREPARED 4
+#define TXN_XA_STARTED 5
+#define TXN_XA_SUSPENDED 6
u_int32_t xa_status; /* XA status */
- u_int8_t xid[DB_XIDDATASIZE]; /* XA global transaction ID */
+
+ u_int8_t xid[DB_XIDDATASIZE]; /* Global transaction ID */
+ char name[51]; /* 50 bytes of name, nul termination */
};
struct __db_txn_stat {
@@ -941,9 +1063,11 @@ struct __db_txn_stat {
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_nsnapshot; /* number of snapshot transactions */
u_int32_t st_nrestores; /* number of restored transactions
after recovery. */
u_int32_t st_maxnactive; /* maximum active transactions */
+ u_int32_t st_maxnsnapshot; /* maximum snapshot 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. */
@@ -957,9 +1081,60 @@ struct __db_txn_stat {
#define DB_EID_BROADCAST -1
#define DB_EID_INVALID -2
-/* rep_start flags values */
-#define DB_REP_CLIENT 0x001
-#define DB_REP_MASTER 0x002
+/* rep_config flag values. */
+#define DB_REP_CONF_BULK 0x0001 /* Bulk transfer. */
+#define DB_REP_CONF_DELAYCLIENT 0x0002 /* Delay client synchronization. */
+#define DB_REP_CONF_NOAUTOINIT 0x0004 /* No automatic client init. */
+#define DB_REP_CONF_NOWAIT 0x0008 /* Don't wait, return error. */
+
+/*
+ * Operation code values for rep_start and/or repmgr_start. Just one of the
+ * following values should be passed in the flags parameter. (If we ever need
+ * additional, independent bit flags for these methods, we can start allocating
+ * them from the high-order byte of the flags word, as we currently do elsewhere
+ * for DB_AFTER through DB_WRITELOCK and DB_AUTO_COMMIT, etc.)
+ */
+#define DB_REP_CLIENT 1
+#define DB_REP_ELECTION 2
+#define DB_REP_FULL_ELECTION 3
+#define DB_REP_MASTER 4
+
+/* Acknowledgement policies. */
+#define DB_REPMGR_ACKS_ALL 1
+#define DB_REPMGR_ACKS_ALL_PEERS 2
+#define DB_REPMGR_ACKS_NONE 3
+#define DB_REPMGR_ACKS_ONE 4
+#define DB_REPMGR_ACKS_ONE_PEER 5
+#define DB_REPMGR_ACKS_QUORUM 6
+
+/* Replication Framework timeout configuration values. */
+#define DB_REP_ACK_TIMEOUT 1
+#define DB_REP_ELECTION_TIMEOUT 2
+#define DB_REP_ELECTION_RETRY 3
+#define DB_REP_CONNECTION_RETRY 4
+
+/* Event notification types. */
+#define DB_EVENT_NO_SUCH_EVENT 0 /* out-of-band sentinel value */
+#define DB_EVENT_PANIC 1
+#define DB_EVENT_REP_CLIENT 2
+#define DB_EVENT_REP_MASTER 3
+#define DB_EVENT_REP_NEWMASTER 4
+#define DB_EVENT_REP_STARTUPDONE 5
+#define DB_EVENT_WRITE_FAILED 6
+
+/* Flag value for repmgr_add_remote_site. */
+#define DB_REPMGR_PEER 0x01
+
+/* Replication Manager site status. */
+struct __db_repmgr_site {
+ int eid;
+ char *host;
+ u_int port;
+
+#define DB_REPMGR_CONNECTED 0x01
+#define DB_REPMGR_DISCONNECTED 0x02
+ u_int32_t status;
+};
/* Replication statistics. */
struct __db_rep_stat {
@@ -982,6 +1157,15 @@ struct __db_rep_stat {
condition was detected.+ */
int st_env_id; /* Current environment ID. */
int st_env_priority; /* Current environment priority. */
+ u_int32_t st_bulk_fills; /* Bulk buffer fills. */
+ u_int32_t st_bulk_overflows; /* Bulk buffer overflows. */
+ u_int32_t st_bulk_records; /* Bulk records stored. */
+ u_int32_t st_bulk_transfers; /* Transfers of bulk buffers. */
+ u_int32_t st_client_rerequests; /* Number of forced rerequests. */
+ u_int32_t st_client_svc_req; /* Number of client service requests
+ received by this client. */
+ u_int32_t st_client_svc_miss; /* Number of client service requests
+ missing on this client. */
u_int32_t st_gen; /* Current generation number. */
u_int32_t st_egen; /* Current election gen number. */
u_int32_t st_log_duplicated; /* Log records received multiply.+ */
@@ -1024,7 +1208,13 @@ struct __db_rep_stat {
int st_election_status; /* Current election status. */
u_int32_t st_election_tiebreaker;/* Election tiebreaker value. */
int st_election_votes; /* Votes received in this round. */
+ u_int32_t st_election_sec; /* Last election time seconds. */
+ u_int32_t st_election_usec; /* Last election time useconds. */
};
+
+/*******************************************************
+ * Sequences.
+ *******************************************************/
/*
* The storage record for a sequence.
*/
@@ -1034,6 +1224,7 @@ struct __db_seq_record {
#define DB_SEQ_INC 0x00000002 /* Increment sequence. */
#define DB_SEQ_RANGE_SET 0x00000004 /* Range set (internal). */
#define DB_SEQ_WRAP 0x00000008 /* Wrap sequence at min/max. */
+#define DB_SEQ_WRAPPED 0x00000010 /* Just wrapped (internal). */
u_int32_t flags; /* Flags. */
db_seq_t seq_value; /* Current value. */
db_seq_t seq_max; /* Max permitted. */
@@ -1045,7 +1236,7 @@ struct __db_seq_record {
*/
struct __db_sequence {
DB *seq_dbp; /* DB handle for this sequence. */
- DB_MUTEX *seq_mutexp; /* Mutex if sequence is threaded. */
+ db_mutex_t mtx_seq; /* Mutex if sequence is threaded. */
DB_SEQ_RECORD *seq_rp; /* Pointer to current data. */
DB_SEQ_RECORD seq_record; /* Data from DB_SEQUENCE. */
int32_t seq_cache_size; /* Number of values cached. */
@@ -1056,6 +1247,7 @@ struct __db_sequence {
/* API-private structure: used by C++ and Java. */
void *api_internal;
+ /* DB_SEQUENCE PUBLIC HANDLE LIST BEGIN */
int (*close) __P((DB_SEQUENCE *, u_int32_t));
int (*get) __P((DB_SEQUENCE *,
DB_TXN *, int32_t, db_seq_t *, u_int32_t));
@@ -1075,18 +1267,19 @@ struct __db_sequence {
int (*stat) __P((DB_SEQUENCE *,
DB_SEQUENCE_STAT **, u_int32_t));
int (*stat_print) __P((DB_SEQUENCE *, u_int32_t));
+ /* DB_SEQUENCE PUBLIC HANDLE LIST END */
};
struct __db_seq_stat {
- u_int32_t st_wait; /* Sequence lock granted without wait. */
- u_int32_t st_nowait; /* Sequence lock granted after wait. */
- db_seq_t st_current; /* Current value in db. */
- db_seq_t st_value; /* Current cached value. */
- db_seq_t st_last_value; /* Last cached value. */
- db_seq_t st_min; /* Minimum value. */
- db_seq_t st_max; /* Maximum value. */
- int32_t st_cache_size; /* Cache size. */
- u_int32_t st_flags; /* Flag value. */
+ u_int32_t st_wait; /* Sequence lock granted w/o wait. */
+ u_int32_t st_nowait; /* Sequence lock granted after wait. */
+ db_seq_t st_current; /* Current value in db. */
+ db_seq_t st_value; /* Current cached value. */
+ db_seq_t st_last_value; /* Last cached value. */
+ db_seq_t st_min; /* Minimum value. */
+ db_seq_t st_max; /* Maximum value. */
+ int32_t st_cache_size; /* Cache size. */
+ u_int32_t st_flags; /* Flag value. */
};
/*******************************************************
@@ -1114,7 +1307,8 @@ typedef enum {
#define DB_QAMOLDVER 3 /* Oldest queue version supported. */
#define DB_QAMMAGIC 0x042253
-#define DB_SEQUENCE_VERSION 1 /* Current sequence version. */
+#define DB_SEQUENCE_VERSION 2 /* Current sequence version. */
+#define DB_SEQUENCE_OLDVER 1 /* Oldest sequence version supported. */
/*
* DB access method and cursor operation values. Each value is an operation
@@ -1123,62 +1317,56 @@ typedef enum {
#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) */
+#define DB_CONSUME 4 /* get() */
+#define DB_CONSUME_WAIT 5 /* get() */
+#define DB_CURRENT 6 /* c_get(), c_put(), DB_LOGC->get() */
+#define DB_FIRST 7 /* c_get(), DB_LOGC->get() */
+#define DB_GET_BOTH 8 /* get(), c_get() */
+#define DB_GET_BOTHC 9 /* c_get() (internal) */
+#define DB_GET_BOTH_RANGE 10 /* get(), c_get() */
+#define DB_GET_RECNO 11 /* c_get() */
+#define DB_JOIN_ITEM 12 /* c_get(); do not do primary lookup */
+#define DB_KEYFIRST 13 /* c_put() */
+#define DB_KEYLAST 14 /* c_put() */
+#define DB_LAST 15 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT 16 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT_DUP 17 /* c_get() */
+#define DB_NEXT_NODUP 18 /* c_get() */
+#define DB_NODUPDATA 19 /* put(), c_put() */
+#define DB_NOOVERWRITE 20 /* put() */
+#define DB_NOSYNC 21 /* close() */
+#define DB_POSITION 22 /* c_dup() */
+#define DB_PREV 23 /* c_get(), DB_LOGC->get() */
+#define DB_PREV_NODUP 24 /* c_get(), DB_LOGC->get() */
+#define DB_SET 25 /* c_get(), DB_LOGC->get() */
+#define DB_SET_LOCK_TIMEOUT 26 /* set_timout() */
+#define DB_SET_RANGE 27 /* c_get() */
+#define DB_SET_RECNO 28 /* get(), c_get() */
+#define DB_SET_TXN_NOW 29 /* set_timout() (internal) */
+#define DB_SET_TXN_TIMEOUT 30 /* set_timout() */
+#define DB_UPDATE_SECONDARY 31 /* c_get(), c_del() (internal) */
+#define DB_WRITECURSOR 32 /* cursor() */
+#define DB_WRITELOCK 33 /* cursor() (internal) */
/* This has to change when the max opcode hits 255. */
#define DB_OPFLAGS_MASK 0x000000ff /* Mask for operations flags. */
/*
* Masks for flags that can be OR'd into DB access method and cursor
- * operation values.
+ * operation values. Three top bits have already been taken:
*
- * DB_DIRTY_READ 0x04000000 Dirty Read. */
-#define DB_MULTIPLE 0x08000000 /* Return multiple data values. */
-#define DB_MULTIPLE_KEY 0x10000000 /* Return multiple data/key pairs. */
-#define DB_RMW 0x20000000 /* Acquire write flag immediately. */
+ * DB_AUTO_COMMIT 0x02000000
+ * DB_READ_COMMITTED 0x04000000
+ * DB_READ_UNCOMMITTED 0x08000000
+ */
+#define DB_MULTIPLE 0x10000000 /* Return multiple data values. */
+#define DB_MULTIPLE_KEY 0x20000000 /* Return multiple data/key pairs. */
+#define DB_RMW 0x40000000 /* Acquire write lock immediately. */
/*
* DB (user visible) error return codes.
*
* !!!
- * For source compatibility with DB 2.X deadlock return (EAGAIN), use the
- * following:
- * #include <errno.h>
- * #define DB_LOCK_DEADLOCK EAGAIN
- *
- * !!!
* We don't want our error returns to conflict with other packages where
* 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.
@@ -1200,22 +1388,24 @@ typedef enum {
#define DB_REP_DUPMASTER (-30986)/* There are two masters. */
#define DB_REP_HANDLE_DEAD (-30985)/* Rolled back a commit. */
#define DB_REP_HOLDELECTION (-30984)/* Time to hold an election. */
-#define DB_REP_ISPERM (-30983)/* Cached not written perm written.*/
-#define DB_REP_NEWMASTER (-30982)/* We have learned of a new master. */
-#define DB_REP_NEWSITE (-30981)/* New site entered system. */
-#define DB_REP_NOTPERM (-30980)/* Permanent log record not written. */
-#define DB_REP_STARTUPDONE (-30979)/* Client startup complete. */
-#define DB_REP_UNAVAIL (-30978)/* Site cannot currently be reached. */
-#define DB_RUNRECOVERY (-30977)/* Panic return. */
-#define DB_SECONDARY_BAD (-30976)/* Secondary index corrupt. */
-#define DB_VERIFY_BAD (-30975)/* Verify failed; bad format. */
-#define DB_VERSION_MISMATCH (-30974)/* Environment version mismatch. */
+#define DB_REP_IGNORE (-30983)/* This msg should be ignored.*/
+#define DB_REP_ISPERM (-30982)/* Cached not written perm written.*/
+#define DB_REP_JOIN_FAILURE (-30981)/* Unable to join replication group. */
+#define DB_REP_LOCKOUT (-30980)/* API/Replication lockout now. */
+#define DB_REP_NEWMASTER (-30979)/* We have learned of a new master. */
+#define DB_REP_NEWSITE (-30978)/* New site entered system. */
+#define DB_REP_NOTPERM (-30977)/* Permanent log record not written. */
+#define DB_REP_UNAVAIL (-30976)/* Site cannot currently be reached. */
+#define DB_RUNRECOVERY (-30975)/* Panic return. */
+#define DB_SECONDARY_BAD (-30974)/* Secondary index corrupt. */
+#define DB_VERIFY_BAD (-30973)/* Verify failed; bad format. */
+#define DB_VERSION_MISMATCH (-30972)/* Environment version mismatch. */
/* DB (private) error return codes. */
#define DB_ALREADY_ABORTED (-30899)
#define DB_DELETED (-30898)/* Recovery file marked deleted. */
-#define DB_LOCK_NOTEXIST (-30897)/* Object to lock is gone. */
-#define DB_NEEDSPLIT (-30896)/* Page needs to be split. */
+#define DB_NEEDSPLIT (-30897)/* Page needs to be split. */
+#define DB_REP_BULKOVF (-30896)/* Rep bulk buffer overflow. */
#define DB_REP_EGENCHG (-30895)/* Egen changed while in election. */
#define DB_REP_LOGREADY (-30894)/* Rep log ready for recovery. */
#define DB_REP_PAGEDONE (-30893)/* This page was already done. */
@@ -1249,7 +1439,7 @@ struct __db {
DB_MPOOLFILE *mpf; /* Backing buffer pool. */
- DB_MUTEX *mutexp; /* Synchronization for free threading */
+ db_mutex_t mutex; /* Synchronization for free threading */
char *fname, *dname; /* File/database passed to DB->open. */
u_int32_t open_flags; /* Flags passed to DB->open. */
@@ -1265,11 +1455,12 @@ struct __db {
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. */
+ DB_LOCK handle_lock; /* Lock held on this handle. */
u_int cl_id; /* RPC: remote client id. */
time_t timestamp; /* Handle timestamp for replication. */
+ u_int32_t fid_gen; /* Rep generation number for fids. */
/*
* Returned data memory for DB->get() and friends.
@@ -1299,11 +1490,11 @@ struct __db {
*
* !!!
* Explicit representations of structures from queue.h.
- * LIST_ENTRY(__db) dblistlinks;
+ * TAILQ_ENTRY(__db) dblistlinks;
*/
struct {
- struct __db *le_next;
- struct __db **le_prev;
+ struct __db *tqe_next;
+ struct __db **tqe_prev;
} dblistlinks;
/*
@@ -1365,6 +1556,11 @@ struct __db {
/* Reference to primary -- set in the secondary. */
DB *s_primary;
+#define DB_ASSOC_IMMUTABLE_KEY 0x00000001 /* Secondary key is immutable. */
+
+ /* Flags passed to associate -- set in the secondary. */
+ u_int32_t s_assoc_flags;
+
/* API-private structure: used by DB 1.85, C++, Java, Perl and Tcl */
void *api_internal;
@@ -1374,19 +1570,19 @@ struct __db {
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));
+ /* DB PUBLIC HANDLE LIST BEGIN */
+ 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 (*compact) __P((DB *,
+ DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
int (*cursor) __P((DB *, DB_TXN *, DBC **, u_int32_t));
int (*del) __P((DB *, DB_TXN *, DBT *, u_int32_t));
- int (*dump) __P((DB *,
- const char *, int (*)(void *, const void *), void *, int, int));
void (*err) __P((DB *, int, const char *, ...));
void (*errx) __P((DB *, const char *, ...));
int (*fd) __P((DB *, int *));
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_bt_minkey) __P((DB *, 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 **));
@@ -1395,77 +1591,78 @@ struct __db {
void (*get_errfile) __P((DB *, FILE **));
void (*get_errpfx) __P((DB *, const char **));
int (*get_flags) __P((DB *, u_int32_t *));
+ int (*get_h_ffactor) __P((DB *, u_int32_t *));
+ int (*get_h_nelem) __P((DB *, u_int32_t *));
int (*get_lorder) __P((DB *, int *));
+ DB_MPOOLFILE *(*get_mpf) __P((DB *));
+ void (*get_msgfile) __P((DB *, FILE **));
int (*get_open_flags) __P((DB *, u_int32_t *));
int (*get_pagesize) __P((DB *, u_int32_t *));
+ int (*get_q_extentsize) __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 (*get_transactional) __P((DB *));
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 *, DB_TXN *,
- const char *, const char *, DBTYPE, u_int32_t, int));
+ int (*key_range)
+ __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+ int (*open) __P((DB *,
+ DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
+ int (*pget) __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
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)));
+ const char *, const char *, const char *, u_int32_t));
int (*set_alloc) __P((DB *, void *(*)(size_t),
void *(*)(void *, size_t), void (*)(void *)));
+ int (*set_append_recno) __P((DB *, int (*)(DB *, DBT *, db_recno_t)));
+ int (*set_bt_compare)
+ __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
+ int (*set_bt_minkey) __P((DB *, u_int32_t));
+ int (*set_bt_prefix)
+ __P((DB *, size_t (*)(DB *, const DBT *, const DBT *)));
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_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 DB_ENV *, const char *, const char *)));
+ void (*)(const DB_ENV *, const char *, const 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_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 (*set_lorder) __P((DB *, int));
void (*set_msgcall) __P((DB *, void (*)(const DB_ENV *, const char *)));
- void (*get_msgfile) __P((DB *, FILE **));
void (*set_msgfile) __P((DB *, FILE *));
int (*set_pagesize) __P((DB *, u_int32_t));
int (*set_paniccall) __P((DB *, void (*)(DB_ENV *, int)));
- int (*stat) __P((DB *, DB_TXN *, void *, u_int32_t));
- int (*stat_print) __P((DB *, 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));
- int (*set_bt_minkey) __P((DB *, u_int32_t));
- 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_q_extentsize) __P((DB *, u_int32_t));
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 (*stat) __P((DB *, DB_TXN *, void *, u_int32_t));
+ int (*stat_print) __P((DB *, u_int32_t));
+ int (*sync) __P((DB *, u_int32_t));
+ int (*truncate) __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
+ int (*upgrade) __P((DB *, const char *, u_int32_t));
+ int (*verify)
+ __P((DB *, const char *, const char *, FILE *, u_int32_t));
+ /* DB PUBLIC HANDLE LIST END */
- int (*get_q_extentsize) __P((DB *, u_int32_t *));
- int (*set_q_extentsize) __P((DB *, u_int32_t));
-
+ /* DB PRIVATE HANDLE LIST BEGIN */
+ int (*dump) __P((DB *, const char *,
+ int (*)(void *, const void *), void *, int, int));
int (*db_am_remove) __P((DB *, DB_TXN *, const char *, const char *));
int (*db_am_rename) __P((DB *, DB_TXN *,
const char *, const char *, const char *));
+ /* DB PRIVATE HANDLE LIST END */
/*
* Never called; these are a place to save function pointers
@@ -1480,39 +1677,45 @@ struct __db {
#define DB_OK_RECNO 0x08
u_int32_t am_ok; /* Legal AM choices. */
-#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_INORDER 0x00004000 /* DB_INORDER. */
-#define DB_AM_IN_RENAME 0x00008000 /* File is being renamed. */
-#define DB_AM_NOT_DURABLE 0x00010000 /* Do not log changes. */
-#define DB_AM_OPEN_CALLED 0x00020000 /* DB->open called. */
-#define DB_AM_PAD 0x00040000 /* Fixed-length record pad. */
-#define DB_AM_PGDEF 0x00080000 /* Page size was defaulted. */
-#define DB_AM_RDONLY 0x00100000 /* Database is readonly. */
-#define DB_AM_RECNUM 0x00200000 /* DB_RECNUM. */
-#define DB_AM_RECOVER 0x00400000 /* DB opened by recovery routine. */
-#define DB_AM_RENUMBER 0x00800000 /* DB_RENUMBER. */
-#define DB_AM_REPLICATION 0x01000000 /* An internal replication file. */
-#define DB_AM_REVSPLITOFF 0x02000000 /* DB_REVSPLITOFF. */
-#define DB_AM_SECONDARY 0x04000000 /* Database is a secondary index. */
-#define DB_AM_SNAPSHOT 0x08000000 /* DB_SNAPSHOT. */
-#define DB_AM_SUBDB 0x10000000 /* Subdatabases supported. */
-#define DB_AM_SWAP 0x20000000 /* Pages need to be byte-swapped. */
-#define DB_AM_TXN 0x40000000 /* Opened in a transaction. */
-#define DB_AM_VERIFYING 0x80000000 /* DB handle is in the verifier. */
- u_int32_t orig_flags; /* Flags at open, for refresh. */
+ /*
+ * This field really ought to be an AM_FLAG, but we have
+ * have run out of bits. If/when we decide to split up
+ * the flags, we can incorporate it.
+ */
+ int preserve_fid; /* Do not free fileid on close. */
+
+#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_DISCARD 0x00000080 /* Discard any cached pages */
+#define DB_AM_DUP 0x00000100 /* DB_DUP */
+#define DB_AM_DUPSORT 0x00000200 /* DB_DUPSORT */
+#define DB_AM_ENCRYPT 0x00000400 /* Encryption */
+#define DB_AM_FIXEDLEN 0x00000800 /* Fixed-length records */
+#define DB_AM_INMEM 0x00001000 /* In-memory; no sync on close */
+#define DB_AM_INORDER 0x00002000 /* DB_INORDER */
+#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_READ_UNCOMMITTED 0x00100000 /* Support degree 1 isolation */
+#define DB_AM_RECNUM 0x00200000 /* DB_RECNUM */
+#define DB_AM_RECOVER 0x00400000 /* DB opened by recovery routine */
+#define DB_AM_RENUMBER 0x00800000 /* DB_RENUMBER */
+#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;
};
@@ -1614,7 +1817,7 @@ struct __dbc {
DBT my_rkey; /* Space for returned [primary] key. */
DBT my_rdata; /* Space for returned data. */
- u_int32_t lid; /* Default process' locker id. */
+ void *lref; /* Reference to default locker. */
u_int32_t locker; /* Locker for this operation. */
DBT lock_dbt; /* DBT referencing lock. */
DB_LOCK_ILOCK lock; /* Object to be locked. */
@@ -1626,15 +1829,17 @@ struct __dbc {
DBC_INTERNAL *internal; /* Access method private. */
- int (*c_close) __P((DBC *)); /* Methods: public. */
+ /* DBC PUBLIC HANDLE LIST BEGIN */
+ int (*c_close) __P((DBC *));
int (*c_count) __P((DBC *, db_recno_t *, u_int32_t));
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));
+ /* DBC PUBLIC HANDLE LIST END */
- /* Methods: private. */
+ /* DBC PRIVATE HANDLE LIST BEGIN */
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 *));
@@ -1642,20 +1847,29 @@ struct __dbc {
int (*c_am_get) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_put) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_writelock) __P((DBC *));
+ /* DBC PRIVATE HANDLE LIST END */
-#define DBC_ACTIVE 0x0001 /* Cursor in use. */
-#define DBC_COMPENSATE 0x0002 /* Cursor compensating, don't lock. */
-#define DBC_DEGREE_2 0x0004 /* Cursor has degree 2 isolation. */
-#define DBC_DIRTY_READ 0x0008 /* Cursor supports dirty reads. */
-#define DBC_OPD 0x0010 /* Cursor references off-page dups. */
-#define DBC_RECOVER 0x0020 /* Recovery cursor; don't log/lock. */
-#define DBC_RMW 0x0040 /* Acquire write flag in read op. */
-#define DBC_TRANSIENT 0x0080 /* Cursor is transient. */
-#define DBC_WRITECURSOR 0x0100 /* Cursor may be used to write (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. */
+/*
+ * DBC_DONTLOCK and DBC_RECOVER are used during recovery and transaction
+ * abort. If a transaction is being aborted or recovered then DBC_RECOVER
+ * will be set and locking and logging will be disabled on this cursor. If
+ * we are performing a compensating transaction (e.g. free page processing)
+ * then DB_DONTLOCK will be set to inhibit locking, but logging will still
+ * be required. DB_DONTLOCK is also used if the whole database is locked.
+ */
+#define DBC_ACTIVE 0x0001 /* Cursor in use. */
+#define DBC_DONTLOCK 0x0002 /* Don't lock on this cursor. */
+#define DBC_MULTIPLE 0x0004 /* Return Multiple data. */
+#define DBC_MULTIPLE_KEY 0x0008 /* Return Multiple keys and data. */
+#define DBC_OPD 0x0010 /* Cursor references off-page dups. */
+#define DBC_OWN_LID 0x0020 /* Free lock id on destroy. */
+#define DBC_READ_COMMITTED 0x0040 /* Cursor has degree 2 isolation. */
+#define DBC_READ_UNCOMMITTED 0x0080 /* Cursor has degree 1 isolation. */
+#define DBC_RECOVER 0x0100 /* Recovery cursor; don't log/lock. */
+#define DBC_RMW 0x0200 /* Acquire write flag in read op. */
+#define DBC_TRANSIENT 0x0400 /* Cursor is transient. */
+#define DBC_WRITECURSOR 0x0800 /* Cursor may be used to write (CDB). */
+#define DBC_WRITER 0x1000 /* Cursor immediately writing (CDB). */
u_int32_t flags;
};
@@ -1674,7 +1888,6 @@ struct __db_bt_stat {
u_int32_t bt_nkeys; /* Number of unique keys. */
u_int32_t bt_ndata; /* Number of data items. */
u_int32_t bt_pagesize; /* Page size. */
- u_int32_t bt_maxkey; /* Maxkey value. */
u_int32_t bt_minkey; /* Minkey value. */
u_int32_t bt_re_len; /* Fixed-length record length. */
u_int32_t bt_re_pad; /* Fixed-length record pad. */
@@ -1691,6 +1904,21 @@ struct __db_bt_stat {
u_int32_t bt_over_pgfree; /* Bytes free in overflow pages. */
};
+struct __db_compact {
+ /* Input Parameters. */
+ u_int32_t compact_fillpercent; /* Desired fillfactor: 1-100 */
+ db_timeout_t compact_timeout; /* Lock timeout. */
+ u_int32_t compact_pages; /* Max pages to process. */
+ /* Output Stats. */
+ u_int32_t compact_pages_free; /* Number of pages freed. */
+ u_int32_t compact_pages_examine; /* Number of pages examine. */
+ u_int32_t compact_levels; /* Number of levels removed. */
+ u_int32_t compact_deadlock; /* Number of deadlocks. */
+ db_pgno_t compact_pages_truncated; /* Pages truncated to OS. */
+ /* Internal. */
+ db_pgno_t compact_truncate; /* Page number for truncation */
+};
+
/* Hash statistics structure. */
struct __db_h_stat {
u_int32_t hash_magic; /* Magic number. */
@@ -1750,12 +1978,19 @@ struct __db_env {
/* Other Callbacks. */
void (*db_feedback) __P((DB_ENV *, int, int));
void (*db_paniccall) __P((DB_ENV *, int));
+ void (*db_event_func) __P((DB_ENV *, u_int32_t, void *));
/* App-specified alloc functions. */
void *(*db_malloc) __P((size_t));
void *(*db_realloc) __P((void *, size_t));
void (*db_free) __P((void *));
+ /* Application callback to copy data to/from a custom data source. */
+#define DB_USERCOPY_GETDATA 0x0001
+#define DB_USERCOPY_SETDATA 0x0002
+ int (*dbt_usercopy)
+ __P((DBT *, u_int32_t, void *, u_int32_t, u_int32_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
@@ -1763,8 +1998,9 @@ struct __db_env {
*/
#define DB_VERB_DEADLOCK 0x0001 /* Deadlock detection information. */
#define DB_VERB_RECOVERY 0x0002 /* Recovery information. */
-#define DB_VERB_REPLICATION 0x0004 /* Replication information. */
-#define DB_VERB_WAITSFOR 0x0008 /* Dump waits-for table. */
+#define DB_VERB_REGISTER 0x0004 /* Dump waits-for table. */
+#define DB_VERB_REPLICATION 0x0008 /* Replication information. */
+#define DB_VERB_WAITSFOR 0x0010 /* Dump waits-for table. */
u_int32_t verbose; /* Verbose output. */
void *app_private; /* Application-private handle. */
@@ -1772,6 +2008,19 @@ struct __db_env {
int (*app_dispatch) /* User-specified recovery dispatch. */
__P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+ /* Mutexes. */
+ u_int32_t mutex_align; /* Mutex alignment */
+ u_int32_t mutex_cnt; /* Number of mutexes to configure */
+ u_int32_t mutex_inc; /* Number of mutexes to add */
+ u_int32_t mutex_tas_spins;/* Test-and-set spin count */
+
+ struct {
+ int alloc_id; /* Allocation ID argument */
+ u_int32_t flags; /* Flags argument */
+ } *mutex_iq; /* Initial mutexes queue */
+ u_int mutex_iq_next; /* Count of initial mutexes */
+ u_int mutex_iq_max; /* Maximum initial mutexes */
+
/* Locking. */
u_int8_t *lk_conflicts; /* Two dimensional conflict matrix. */
int lk_modes; /* Number of lock modes in table. */
@@ -1785,6 +2034,7 @@ struct __db_env {
u_int32_t lg_bsize; /* Buffer size. */
u_int32_t lg_size; /* Log file size. */
u_int32_t lg_regionmax; /* Region size. */
+ int lg_filemode; /* Log file permission mode. */
/* Memory pool. */
u_int32_t mp_gbytes; /* Cachesize: GB. */
@@ -1796,20 +2046,21 @@ struct __db_env {
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. */
time_t tx_timestamp; /* Recover to specific timestamp. */
db_timeout_t tx_timeout; /* Timeout for transactions. */
+ /* Thread tracking. */
+ u_int32_t thr_nbucket; /* Number of hash buckets. */
+ u_int32_t thr_max; /* Max before garbage collection. */
+ void *thr_hashtab; /* Hash table of DB_THREAD_INFO. */
+
/*******************************************************
* Private: owned by DB.
*******************************************************/
+ pid_t pid_cache; /* Cached process ID. */
+
/* User files, paths. */
char *db_home; /* Database home. */
char *db_log_dir; /* Database log file directory. */
@@ -1821,12 +2072,28 @@ struct __db_env {
int db_mode; /* Default open permissions. */
int dir_mode; /* Intermediate directory perms. */
- u_int32_t env_lid; /* Locker ID in non-threaded handles. */
+ void *env_lref; /* Locker in non-threaded handles. */
u_int32_t open_flags; /* Flags passed to DB_ENV->open. */
void *reginfo; /* REGINFO structure reference. */
DB_FH *lockfhp; /* fcntl(2) locking file handle. */
+ DB_FH *registry; /* DB_REGISTER file handle. */
+ u_int32_t registry_off; /*
+ * Offset of our slot. We can't use
+ * off_t because its size depends on
+ * build settings.
+ */
+
+ /* Return IDs. */
+ void (*thread_id) __P((DB_ENV *, pid_t *, db_threadid_t *));
+ /* Return if IDs alive. */
+ int (*is_alive)
+ __P((DB_ENV *, pid_t, db_threadid_t, u_int32_t));
+ /* Format IDs into a string. */
+ char *(*thread_id_string)
+ __P((DB_ENV *, pid_t, db_threadid_t, char *));
+
int (**recover_dtab) /* Dispatch table for recover funcs. */
__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
size_t recover_dtab_size;
@@ -1838,7 +2105,6 @@ struct __db_env {
int db_ref; /* DB reference count. */
long shm_key; /* shmget(2) key. */
- u_int32_t tas_spins; /* test-and-set spins. */
/*
* List of open DB handles for this DB_ENV, used for cursor
@@ -1851,11 +2117,12 @@ struct __db_env {
*
* !!!
* Explicit representation of structure in queue.h.
- * LIST_HEAD(dblist, __db);
+ * TAILQ_HEAD(__dblist, __db);
*/
- DB_MUTEX *dblist_mutexp; /* Mutex. */
- struct {
- struct __db *lh_first;
+ db_mutex_t mtx_dblist; /* Mutex. */
+ struct __dblist {
+ struct __db *tqh_first;
+ struct __db **tqh_last;
} dblist;
/*
@@ -1876,161 +2143,200 @@ struct __db_env {
} xa_txn;
int xa_rmid; /* XA Resource Manager ID. */
- /* API-private structure. */
- void *api1_internal; /* C++, Perl API private */
- void *api2_internal; /* Java API private */
-
char *passwd; /* Cryptography support. */
size_t passwd_len;
void *crypto_handle; /* Primary handle. */
- DB_MUTEX *mt_mutexp; /* Mersenne Twister mutex. */
+ db_mutex_t mtx_mt; /* Mersenne Twister mutex. */
int mti; /* Mersenne Twister index. */
u_long *mt; /* Mersenne Twister state vector. */
- /* DB_ENV Methods. */
+ /* API-private structure. */
+ void *api1_internal; /* C++, Perl API private */
+ void *api2_internal; /* Java API private */
+
+ DB_LOCKTAB *lk_handle; /* Lock handle. */
+ DB_LOG *lg_handle; /* Log handle. */
+ DB_MPOOL *mp_handle; /* Mpool handle. */
+ DB_MUTEXMGR *mutex_handle; /* Mutex handle. */
+ DB_REP *rep_handle; /* Replication handle. */
+ DB_TXNMGR *tx_handle; /* Txn handle. */
+
+ /* DB_ENV PUBLIC HANDLE LIST BEGIN */
+ int (*cdsgroup_begin) __P((DB_ENV *, DB_TXN **));
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));
+ 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 (*open) __P((DB_ENV *, const char *, u_int32_t, int));
- int (*remove) __P((DB_ENV *, const char *, u_int32_t));
- int (*stat_print) __P((DB_ENV *, u_int32_t));
-
- /* House-keeping. */
- int (*fileid_reset) __P((DB_ENV *, char *, int));
- int (*is_bigendian) __P((void));
- int (*lsn_reset) __P((DB_ENV *, char *, int));
- int (*prdbt) __P((DBT *,
- int, const char *, void *, int (*)(void *, const void *), int));
-
- /* Setters/getters. */
- 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 (*failchk) __P((DB_ENV *, u_int32_t));
+ int (*fileid_reset) __P((DB_ENV *, const char *, u_int32_t));
+ int (*get_cachesize) __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
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 DB_ENV *, const char *, const 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 (*get_home) __P((DB_ENV *, const char **));
- int (*set_intermediate_dir) __P((DB_ENV *, int, u_int32_t));
- int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
- 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));
- void (*set_msgcall) __P((DB_ENV *,
- void (*)(const DB_ENV *, const char *)));
- void (*get_msgfile) __P((DB_ENV *, FILE **));
- void (*set_msgfile) __P((DB_ENV *, FILE *));
- 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_filemode) __P((DB_ENV *, int *));
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));
- int (*log_stat_print) __P((DB_ENV *, 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_locks) __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 (*get_mp_max_openfd) __P((DB_ENV *, int *));
+ int (*get_mp_max_write) __P((DB_ENV *, int *, int *));
+ int (*get_mp_mmapsize) __P((DB_ENV *, size_t *));
+ void (*get_msgfile) __P((DB_ENV *, FILE **));
+ int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
+ int (*get_shm_key) __P((DB_ENV *, long *));
+ int (*get_timeout) __P((DB_ENV *, db_timeout_t *, u_int32_t));
+ int (*get_tmp_dir) __P((DB_ENV *, const char **));
+ int (*get_tx_max) __P((DB_ENV *, u_int32_t *));
+ int (*get_tx_timestamp) __P((DB_ENV *, time_t *));
+ int (*get_verbose) __P((DB_ENV *, u_int32_t, int *));
+ int (*is_bigendian) __P((void));
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_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_put) __P((DB_ENV *, DB_LOCK *));
int (*lock_stat) __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
int (*lock_stat_print) __P((DB_ENV *, 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_max_openfd) __P((DB_ENV *, int *));
- int (*set_mp_max_openfd) __P((DB_ENV *, int));
- int (*get_mp_max_write) __P((DB_ENV *, int *, int *));
- int (*set_mp_max_write) __P((DB_ENV *, int, int));
+ 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_printf) __P((DB_ENV *, DB_TXN *, const char *, ...));
+ 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));
+ int (*log_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*lsn_reset) __P((DB_ENV *, const char *, u_int32_t));
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_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_stat_print) __P((DB_ENV *, 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, int,
- u_int32_t, int *, u_int32_t));
+ int (*mutex_alloc) __P((DB_ENV *, u_int32_t, db_mutex_t *));
+ int (*mutex_free) __P((DB_ENV *, db_mutex_t));
+ int (*mutex_get_align) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_increment) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_max) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_get_tas_spins) __P((DB_ENV *, u_int32_t *));
+ int (*mutex_lock) __P((DB_ENV *, db_mutex_t));
+ int (*mutex_set_align) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_increment) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_max) __P((DB_ENV *, u_int32_t));
+ int (*mutex_set_tas_spins) __P((DB_ENV *, u_int32_t));
+ int (*mutex_stat) __P((DB_ENV *, DB_MUTEX_STAT **, u_int32_t));
+ int (*mutex_stat_print) __P((DB_ENV *, u_int32_t));
+ int (*mutex_unlock) __P((DB_ENV *, db_mutex_t));
+ int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
+ int (*remove) __P((DB_ENV *, const char *, u_int32_t));
+ int (*rep_elect)
+ __P((DB_ENV *, int, int, int *, u_int32_t));
int (*rep_flush) __P((DB_ENV *));
- int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *,
- int *, DB_LSN *));
+ int (*rep_get_config) __P((DB_ENV *, u_int32_t, int *));
+ int (*rep_get_limit) __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ int (*rep_get_nsites) __P((DB_ENV *, int *));
+ int (*rep_get_priority) __P((DB_ENV *, int *));
+ int (*rep_get_timeout) __P((DB_ENV *, int, u_int32_t *));
+ int (*rep_process_message)
+ __P((DB_ENV *, DBT *, DBT *, int *, DB_LSN *));
+ int (*rep_set_config) __P((DB_ENV *, u_int32_t, int));
+ int (*rep_set_limit) __P((DB_ENV *, u_int32_t, u_int32_t));
+ int (*rep_set_nsites) __P((DB_ENV *, int));
+ int (*rep_set_priority) __P((DB_ENV *, int));
+ int (*rep_set_timeout) __P((DB_ENV *, int, db_timeout_t));
+ int (*rep_set_transport) __P((DB_ENV *, int, int (*)(DB_ENV *,
+ const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)));
int (*rep_start) __P((DB_ENV *, DBT *, u_int32_t));
int (*rep_stat) __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
int (*rep_stat_print) __P((DB_ENV *, 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 (*rep_sync) __P((DB_ENV *, u_int32_t));
+ int (*repmgr_add_remote_site) __P((DB_ENV *, const char *, u_int,
+ int *, u_int32_t));
+ int (*repmgr_get_ack_policy) __P((DB_ENV *, int *));
+ int (*repmgr_set_ack_policy) __P((DB_ENV *, int));
+ int (*repmgr_set_local_site) __P((DB_ENV *, const char *, u_int,
+ u_int32_t));
+ int (*repmgr_site_list) __P((DB_ENV *, u_int *,
+ DB_REPMGR_SITE **));
+ int (*repmgr_start) __P((DB_ENV *, int, 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 (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ int (*set_data_dir) __P((DB_ENV *, const char *));
+ int (*set_encrypt) __P((DB_ENV *, const char *, u_int32_t));
+ void (*set_errcall) __P((DB_ENV *,
+ void (*)(const DB_ENV *, const char *, const char *)));
+ void (*set_errfile) __P((DB_ENV *, FILE *));
+ void (*set_errpfx) __P((DB_ENV *, const char *));
+ int (*set_event_notify)
+ __P((DB_ENV *, void (*)(DB_ENV *, u_int32_t, void *)));
+ int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+ int (*set_flags) __P((DB_ENV *, u_int32_t, int));
+ int (*set_intermediate_dir) __P((DB_ENV *, int, u_int32_t));
+ int (*set_isalive) __P((DB_ENV *,
+ int (*)(DB_ENV *, pid_t, db_threadid_t, u_int32_t)));
+ int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
+ int (*set_lg_dir) __P((DB_ENV *, const char *));
+ int (*set_lg_filemode) __P((DB_ENV *, int));
+ int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ int (*set_lg_regionmax) __P((DB_ENV *, u_int32_t));
+ 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_lockers) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
+ int (*set_mp_max_openfd) __P((DB_ENV *, int));
+ int (*set_mp_max_write) __P((DB_ENV *, int, int));
+ int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ void (*set_msgcall)
+ __P((DB_ENV *, void (*)(const DB_ENV *, const char *)));
+ void (*set_msgfile) __P((DB_ENV *, FILE *));
+ int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
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_rpc_server)
+ __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+ int (*set_shm_key) __P((DB_ENV *, long));
+ int (*set_thread_count) __P((DB_ENV *, u_int32_t));
+ int (*set_thread_id) __P((DB_ENV *,
+ void (*)(DB_ENV *, pid_t *, db_threadid_t *)));
+ int (*set_thread_id_string) __P((DB_ENV *,
+ char *(*)(DB_ENV *, pid_t, db_threadid_t, char *)));
+ int (*set_timeout) __P((DB_ENV *, db_timeout_t, u_int32_t));
+ int (*set_tmp_dir) __P((DB_ENV *, const char *));
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 (*set_verbose) __P((DB_ENV *, u_int32_t, int));
+ int (*stat_print) __P((DB_ENV *, u_int32_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_recover)
+ __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
int (*txn_stat) __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
int (*txn_stat_print) __P((DB_ENV *, 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));
+ /* DB_ENV PUBLIC HANDLE LIST END */
+
+ /* DB_ENV PRIVATE HANDLE LIST BEGIN */
+ int (*prdbt) __P((DBT *,
+ int, const char *, void *, int (*)(void *, const void *), int));
+ /* DB_ENV PRIVATE HANDLE LIST END */
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
#define DB_TEST_ELECTVOTE1 2 /* after sending VOTE1 */
@@ -2041,38 +2347,42 @@ struct __db_env {
#define DB_TEST_POSTSYNC 7 /* after syncing the log */
#define DB_TEST_PREDESTROY 8 /* before destroy op */
#define DB_TEST_PREOPEN 9 /* before __os_open */
-#define DB_TEST_SUBDB_LOCKS 10 /* subdb locking tests */
+#define DB_TEST_RECYCLE 10 /* test rep and txn_recycle */
+#define DB_TEST_SUBDB_LOCKS 11 /* subdb locking tests */
int test_abort; /* Abort value for testing. */
int test_check; /* Checkpoint value for testing. */
int test_copy; /* Copy value for testing. */
-#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_DSYNC_LOG 0x0000080 /* DB_DSYNC_LOG set. */
-#define DB_ENV_FATAL 0x0000100 /* Doing fatal recovery in env. */
-#define DB_ENV_LOCKDOWN 0x0000200 /* DB_LOCKDOWN set. */
-#define DB_ENV_LOG_AUTOREMOVE 0x0000400 /* DB_LOG_AUTOREMOVE set. */
-#define DB_ENV_LOG_INMEMORY 0x0000800 /* DB_LOG_INMEMORY set. */
-#define DB_ENV_NOLOCKING 0x0001000 /* DB_NOLOCKING set. */
-#define DB_ENV_NOMMAP 0x0002000 /* DB_NOMMAP set. */
-#define DB_ENV_NOPANIC 0x0004000 /* Okay if panic set. */
-#define DB_ENV_OPEN_CALLED 0x0008000 /* DB_ENV->open called. */
-#define DB_ENV_OVERWRITE 0x0010000 /* DB_OVERWRITE set. */
-#define DB_ENV_PRIVATE 0x0020000 /* DB_PRIVATE set. */
-#define DB_ENV_REGION_INIT 0x0040000 /* DB_REGION_INIT set. */
-#define DB_ENV_RPCCLIENT 0x0080000 /* DB_RPCCLIENT 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_TIME_NOTGRANTED 0x0800000 /* DB_TIME_NOTGRANTED set. */
-#define DB_ENV_TXN_NOSYNC 0x1000000 /* DB_TXN_NOSYNC set. */
-#define DB_ENV_TXN_WRITE_NOSYNC 0x2000000 /* DB_TXN_WRITE_NOSYNC set. */
-#define DB_ENV_YIELDCPU 0x4000000 /* DB_YIELDCPU set. */
+#define DB_ENV_AUTO_COMMIT 0x00000001 /* DB_AUTO_COMMIT. */
+#define DB_ENV_CDB 0x00000002 /* DB_INIT_CDB. */
+#define DB_ENV_CDB_ALLDB 0x00000004 /* CDB environment wide locking. */
+#define DB_ENV_CREATE 0x00000008 /* DB_CREATE set. */
+#define DB_ENV_DBLOCAL 0x00000010 /* Environment for a private DB. */
+#define DB_ENV_DIRECT_DB 0x00000020 /* DB_DIRECT_DB set. */
+#define DB_ENV_DIRECT_LOG 0x00000040 /* DB_DIRECT_LOG set. */
+#define DB_ENV_DSYNC_DB 0x00000080 /* DB_DSYNC_DB set. */
+#define DB_ENV_DSYNC_LOG 0x00000100 /* DB_DSYNC_LOG set. */
+#define DB_ENV_FATAL 0x00000200 /* Doing fatal recovery in env. */
+#define DB_ENV_LOCKDOWN 0x00000400 /* DB_LOCKDOWN set. */
+#define DB_ENV_LOG_AUTOREMOVE 0x00000800 /* DB_LOG_AUTOREMOVE set. */
+#define DB_ENV_LOG_INMEMORY 0x00001000 /* DB_LOG_INMEMORY set. */
+#define DB_ENV_MULTIVERSION 0x00002000 /* DB_MULTIVERSION set. */
+#define DB_ENV_NOLOCKING 0x00004000 /* DB_NOLOCKING set. */
+#define DB_ENV_NOMMAP 0x00008000 /* DB_NOMMAP set. */
+#define DB_ENV_NOPANIC 0x00010000 /* Okay if panic set. */
+#define DB_ENV_OPEN_CALLED 0x00020000 /* DB_ENV->open called. */
+#define DB_ENV_OVERWRITE 0x00040000 /* DB_OVERWRITE set. */
+#define DB_ENV_PRIVATE 0x00080000 /* DB_PRIVATE set. */
+#define DB_ENV_REGION_INIT 0x00100000 /* DB_REGION_INIT set. */
+#define DB_ENV_RPCCLIENT 0x00200000 /* DB_RPCCLIENT set. */
+#define DB_ENV_RPCCLIENT_GIVEN 0x00400000 /* User-supplied RPC client struct */
+#define DB_ENV_SYSTEM_MEM 0x00800000 /* DB_SYSTEM_MEM set. */
+#define DB_ENV_THREAD 0x01000000 /* DB_THREAD set. */
+#define DB_ENV_TIME_NOTGRANTED 0x02000000 /* DB_TIME_NOTGRANTED set. */
+#define DB_ENV_TXN_NOSYNC 0x04000000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_TXN_SNAPSHOT 0x08000000 /* DB_TXN_SNAPSHOT set. */
+#define DB_ENV_TXN_WRITE_NOSYNC 0x10000000 /* DB_TXN_WRITE_NOSYNC set. */
+#define DB_ENV_YIELDCPU 0x20000000 /* DB_YIELDCPU set. */
u_int32_t flags;
};
@@ -2162,4 +2472,6 @@ typedef struct entry {
#if defined(__cplusplus)
}
#endif
+
+@platform_footer@
#endif /* !_DB_H_ */
diff --git a/db/dbinc/db_185.in b/db/dbinc/db_185.in
index 338455a60..bf3af8abb 100644
--- a/db/dbinc/db_185.in
+++ b/db/dbinc/db_185.in
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -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.11 2004/01/28 03:36:01 bostic Exp $
+ * $Id: db_185.in,v 12.5 2006/08/24 14:45:28 bostic Exp $
*/
#ifndef _DB_185_H_
@@ -42,6 +42,10 @@
#include <limits.h>
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* XXX
* Handle function prototypes and the keyword "const". This steps on name
@@ -72,7 +76,7 @@
* XXX
* SGI/IRIX already has a pgno_t.
*/
-#ifdef sgi
+#ifdef __sgi
#define pgno_t db_pgno_t
#endif
@@ -166,4 +170,8 @@ typedef struct {
/* Re-define the user's dbopen calls. */
#define dbopen __db185_open@DB_VERSION_UNIQUE_NAME@
+#if defined(__cplusplus)
+}
+#endif
+
#endif /* !_DB_185_H_ */
diff --git a/db/dbinc/db_am.h b/db/dbinc/db_am.h
index ed1956c66..887255eb1 100644
--- a/db/dbinc/db_am.h
+++ b/db/dbinc/db_am.h
@@ -1,42 +1,61 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_am.h,v 11.78 2004/09/22 21:14:56 ubell Exp $
+ * $Id: db_am.h,v 12.17 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_AM_H_
#define _DB_AM_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
- * IS_AUTO_COMMIT --
- * Test for local auto-commit flag or global flag with no local DbTxn
- * handle.
+ * IS_ENV_AUTO_COMMIT --
+ * Auto-commit test for enviroment operations: DbEnv::{open,remove,rename}
*/
-#define IS_AUTO_COMMIT(dbenv, txn, flags) \
+#define IS_ENV_AUTO_COMMIT(dbenv, txn, flags) \
(LF_ISSET(DB_AUTO_COMMIT) || \
((txn) == NULL && F_ISSET((dbenv), DB_ENV_AUTO_COMMIT) && \
!LF_ISSET(DB_NO_AUTO_COMMIT)))
+/*
+ * IS_DB_AUTO_COMMIT --
+ * Auto-commit test for database operations.
+ */
+#define IS_DB_AUTO_COMMIT(dbp, txn) \
+ ((txn) == NULL && F_ISSET((dbp), DB_AM_TXN))
+
+/*
+ * STRIP_AUTO_COMMIT --
+ * Releases after 4.3 no longer requires DB operations to specify the
+ * AUTO_COMMIT flag, but the API continues to allow it to be specified.
+ */
+#define STRIP_AUTO_COMMIT(f) FLD_CLR((f), DB_AUTO_COMMIT)
+
/* DB recovery operation codes. */
#define DB_ADD_DUP 1
#define DB_REM_DUP 2
#define DB_ADD_BIG 3
#define DB_REM_BIG 4
+#define DB_ADD_PAGE_COMPAT 5 /* Compatibility for 4.2 db_relink */
+#define DB_REM_PAGE_COMPAT 6 /* Compatibility for 4.2 db_relink */
/*
* Standard initialization and shutdown macros for all recovery functions.
*/
-#define REC_INTRO(func, inc_count) do { \
+#define REC_INTRO(func, inc_count, do_cursor) do { \
argp = NULL; \
- dbc = NULL; \
file_dbp = NULL; \
+ COMPQUIET(dbc, NULL); \
/* mpf isn't used by all of the recovery functions. */ \
COMPQUIET(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->txnp, \
&file_dbp, argp->fileid, inc_count)) != 0) { \
if (ret == DB_DELETED) { \
ret = 0; \
@@ -44,9 +63,11 @@
} \
goto out; \
} \
- if ((ret = __db_cursor(file_dbp, NULL, &dbc, 0)) != 0) \
- goto out; \
- F_SET(dbc, DBC_RECOVER); \
+ if (do_cursor) { \
+ if ((ret = __db_cursor(file_dbp, NULL, &dbc, 0)) != 0) \
+ goto out; \
+ F_SET(dbc, DBC_RECOVER); \
+ } \
mpf = file_dbp->mpf; \
} while (0)
@@ -80,7 +101,7 @@
*/
#ifndef HAVE_FTRUNCATE
#define REC_FGET(mpf, pgno, pagep, cont) \
- if ((ret = __memp_fget(mpf, &(pgno), 0, pagep)) != 0) { \
+ if ((ret = __memp_fget(mpf, &(pgno), NULL, 0, pagep)) != 0) { \
if (ret != DB_PAGE_NOTFOUND || DB_REDO(op)) { \
ret = __db_pgerr(file_dbp, pgno, ret); \
goto out; \
@@ -89,7 +110,7 @@
}
#else
#define REC_FGET(mpf, pgno, pagep, cont) \
- if ((ret = __memp_fget(mpf, &(pgno), 0, pagep)) != 0) { \
+ if ((ret = __memp_fget(mpf, &(pgno), NULL, 0, pagep)) != 0) { \
if (ret != DB_PAGE_NOTFOUND) { \
ret = __db_pgerr(file_dbp, pgno, ret); \
goto out; \
@@ -97,6 +118,11 @@
goto cont; \
}
#endif
+#define REC_DIRTY(mpf, pagep) \
+ if ((ret = __memp_dirty(mpf, pagep, NULL, DB_MPOOL_EDIT)) != 0) {\
+ ret = __db_pgerr(file_dbp, PGNO(*(pagep)), ret); \
+ goto out; \
+ }
/*
* Standard debugging macro for all recovery functions.
@@ -124,10 +150,10 @@
* we don't tie up the internal pages of the tree longer than necessary.
*/
#define __LPUT(dbc, lock) \
- __ENV_LPUT((dbc)->dbp->dbenv, \
- lock, F_ISSET((dbc)->dbp, DB_AM_DIRTY) ? DB_LOCK_DOWNGRADE : 0)
-#define __ENV_LPUT(dbenv, lock, flags) \
- (LOCK_ISSET(lock) ? __lock_put(dbenv, &(lock), flags) : 0)
+ __ENV_LPUT((dbc)->dbp->dbenv, lock)
+
+#define __ENV_LPUT(dbenv, lock) \
+ (LOCK_ISSET(lock) ? __lock_put(dbenv, &(lock)) : 0)
/*
* __TLPUT -- transactional lock put
@@ -147,6 +173,51 @@ typedef struct {
u_int32_t count;
} db_trunc_param;
+/*
+ * 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 DB_IS_READONLY(dbp) \
+ (F_ISSET(dbp, DB_AM_RDONLY) || \
+ (IS_REP_CLIENT((dbp)->dbenv)))
+
+/*
+ * For portability, primary keys that are record numbers are stored in
+ * secondaries in the same byte order as the secondary database. As a
+ * consequence, we need to swap the byte order of these keys before attempting
+ * to use them for lookups in the primary. We also need to swap user-supplied
+ * primary keys that are used in secondary lookups (for example, with the
+ * DB_GET_BOTH flag on a secondary get).
+ */
+#include "dbinc/db_swap.h"
+
+#define SWAP_IF_NEEDED(sdbp, pkey) \
+ do { \
+ if (((sdbp)->s_primary->type == DB_QUEUE || \
+ (sdbp)->s_primary->type == DB_RECNO) && \
+ F_ISSET((sdbp), DB_AM_SWAP)) \
+ P_32_SWAP((pkey)->data); \
+ } while (0)
+
+/*
+ * Cursor adjustment:
+ * Return the first DB handle in the sorted DB_ENV list of DB
+ * handles that has a matching file ID.
+ */
+#define FIND_FIRST_DB_MATCH(dbenv, dbp, tdbp) do { \
+ for ((tdbp) = (dbp); \
+ TAILQ_PREV((tdbp), __dblist, dblistlinks) != NULL && \
+ TAILQ_PREV((tdbp), \
+ __dblist, dblistlinks)->adj_fileid == (dbp)->adj_fileid;\
+ (tdbp) = TAILQ_PREV((tdbp), __dblist, dblistlinks)) \
+ ; \
+} while (0)
+
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc/db_dispatch.h"
#include "dbinc_auto/db_auto.h"
#include "dbinc_auto/crdel_auto.h"
diff --git a/db/dbinc/db_cxx.in b/db/dbinc/db_cxx.in
index 356145765..ca08f98d8 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_cxx.in,v 11.147 2004/10/07 21:39:48 bostic Exp $
+ * $Id: db_cxx.in,v 12.28 2006/09/13 14:53:37 mjc Exp $
*/
#ifndef _DB_CXX_H_
@@ -73,11 +73,9 @@ class DbLogc; // forward
class DbLsn; // forward
class DbMpoolFile; // forward
class DbPreplist; // forward
-class Dbt; // forward
-class DbTxn; // forward
-class DbLock; // forward
class DbSequence; // forward
class Dbt; // forward
+class DbTxn; // forward
class DbMultipleIterator; // forward
class DbMultipleKeyDataIterator; // forward
@@ -88,6 +86,7 @@ class DbException; // forward
class DbDeadlockException; // forward
class DbLockNotGrantedException; // forward
class DbMemoryException; // forward
+class DbRepHandleDeadException; // forward
class DbRunRecoveryException; // forward
////////////////////////////////////////////////////////////////
@@ -109,6 +108,7 @@ class DbRunRecoveryException; // forward
// 4514: unreferenced inline function has been removed
// certain include files in MSVC define methods that are not called
//
+#pragma warning(push)
#pragma warning(disable: 4201 4514)
#endif
@@ -178,8 +178,8 @@ class _exported Db
friend class DbEnv;
public:
- Db(DbEnv*, u_int32_t); // create a Db object, then call open()
- virtual ~Db(); // does *not* call close.
+ Db(DbEnv*, u_int32_t); // Create a Db object.
+ virtual ~Db(); // Calls close() if the user hasn't.
// These methods exactly match those in the C interface.
//
@@ -187,6 +187,8 @@ public:
int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
u_int32_t flags);
virtual int close(u_int32_t flags);
+ virtual int compact(DbTxn *txnid, Dbt *start, Dbt *stop,
+ DB_COMPACT *c_data, u_int32_t flags, Dbt *end);
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 *, ...);
@@ -204,17 +206,16 @@ public:
virtual int open(DbTxn *txnid,
const char *, const char *subname, DBTYPE, u_int32_t, int);
virtual int pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Dbt *data,
- u_int32_t flags);
+ u_int32_t flags);
virtual int put(DbTxn *, Dbt *, Dbt *, u_int32_t);
virtual int remove(const char *, const char *, u_int32_t);
virtual int rename(const char *, const char *, const char *, u_int32_t);
virtual int set_alloc(db_malloc_fcn_type, db_realloc_fcn_type,
- db_free_fcn_type);
+ db_free_fcn_type);
virtual void set_app_private(void *);
virtual int set_append_recno(int (*)(Db *, Dbt *, db_recno_t));
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*/
@@ -226,7 +227,7 @@ public:
virtual int get_encrypt_flags(u_int32_t *);
virtual int set_encrypt(const char *, u_int32_t);
virtual void set_errcall(
- void (*)(const DbEnv *, const char *, const char *));
+ void (*)(const DbEnv *, const char *, const char *));
virtual void get_errfile(FILE **);
virtual void set_errfile(FILE *);
virtual void get_errpfx(const char **);
@@ -385,6 +386,7 @@ public:
// These methods match those in the C interface.
//
+ virtual int cdsgroup_begin(DbTxn **tid);
virtual int close(u_int32_t);
virtual int dbremove(DbTxn *txn, const char *name, const char *subdb,
u_int32_t flags);
@@ -392,11 +394,15 @@ public:
const char *newname, u_int32_t flags);
virtual void err(int, const char *, ...);
virtual void errx(const char *, ...);
+ virtual int failchk(u_int32_t);
+ virtual int fileid_reset(const char *, u_int32_t);
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 stat_print(u_int32_t flags);
+
virtual int set_alloc(db_malloc_fcn_type, db_realloc_fcn_type,
db_free_fcn_type);
virtual void set_app_private(void *);
@@ -405,6 +411,9 @@ public:
virtual int get_data_dirs(const char ***);
virtual int set_data_dir(const char *);
virtual int get_encrypt_flags(u_int32_t *);
+ virtual int set_intermediate_dir(int, u_int32_t);
+ virtual int set_isalive(
+ int (*)(DbEnv *, pid_t, db_threadid_t, u_int32_t));
virtual int set_encrypt(const char *, u_int32_t);
virtual void set_errcall(
void (*)(const DbEnv *, const char *, const char *));
@@ -412,13 +421,18 @@ public:
virtual void set_errfile(FILE *);
virtual void get_errpfx(const char **);
virtual void set_errpfx(const char *);
+ virtual int set_event_notify(void (*)(DbEnv *, u_int32_t, void *));
virtual int get_flags(u_int32_t *);
virtual int set_flags(u_int32_t, int);
+ virtual bool is_bigendian();
+ virtual int lsn_reset(const char *, u_int32_t);
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_filemode(int *);
+ virtual int set_lg_filemode(int);
virtual int get_lg_max(u_int32_t *);
virtual int set_lg_max(u_int32_t);
virtual int get_lg_regionmax(u_int32_t *);
@@ -427,7 +441,6 @@ public:
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 *);
@@ -436,6 +449,10 @@ public:
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 get_mp_max_openfd(int *);
+ virtual int set_mp_max_openfd(int);
+ virtual int get_mp_max_write(int *, int *);
+ virtual int set_mp_max_write(int, int);
virtual void set_msgcall(void (*)(const DbEnv *, const char *));
virtual void get_msgfile(FILE **);
virtual void set_msgfile(FILE *);
@@ -447,8 +464,6 @@ public:
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 *,
@@ -510,6 +525,7 @@ public:
virtual int log_file(DbLsn *lsn, char *namep, size_t len);
virtual int log_flush(const DbLsn *lsn);
virtual int log_put(DbLsn *lsn, const Dbt *data, u_int32_t flags);
+ virtual int log_printf(DbTxn *, const char *, ...);
virtual int log_stat(DB_LOG_STAT **spp, u_int32_t flags);
virtual int log_stat_print(u_int32_t flags);
@@ -526,6 +542,23 @@ public:
virtual int memp_sync(DbLsn *lsn);
virtual int memp_trickle(int pct, int *nwrotep);
+ // Mpool functions
+ //
+ virtual int mutex_alloc(u_int32_t, db_mutex_t *);
+ virtual int mutex_free(db_mutex_t);
+ virtual int mutex_get_align(u_int32_t *);
+ virtual int mutex_get_increment(u_int32_t *);
+ virtual int mutex_get_max(u_int32_t *);
+ virtual int mutex_get_tas_spins(u_int32_t *);
+ virtual int mutex_lock(db_mutex_t);
+ virtual int mutex_set_align(u_int32_t);
+ virtual int mutex_set_increment(u_int32_t);
+ virtual int mutex_set_max(u_int32_t);
+ virtual int mutex_set_tas_spins(u_int32_t);
+ virtual int mutex_stat(DB_MUTEX_STAT **, u_int32_t);
+ virtual int mutex_stat_print(u_int32_t);
+ virtual int mutex_unlock(db_mutex_t);
+
// Transaction functions
//
virtual int txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags);
@@ -538,15 +571,41 @@ public:
// Replication functions
//
- virtual int rep_elect(int, int, int, u_int32_t, int *, u_int32_t);
+ virtual int rep_elect(int, int, int *, u_int32_t);
+ virtual int rep_flush();
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 rep_stat_print(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(int, int (*)(DbEnv *,
+ virtual int rep_get_limit(u_int32_t *, u_int32_t *);
+ virtual int rep_set_limit(u_int32_t, u_int32_t);
+ virtual int rep_set_transport(int, int (*)(DbEnv *,
const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t));
+ virtual int set_rep_request(u_int32_t, u_int32_t);
+ virtual int set_thread_count(u_int32_t);
+ virtual int set_thread_id(void (*)(DbEnv *, pid_t *, db_threadid_t *));
+ virtual int set_thread_id_string(char *(*)(DbEnv *,
+ pid_t, db_threadid_t, char *));
+ virtual int rep_set_config(u_int32_t which, int onoff);
+ virtual int rep_get_config(u_int32_t which, int *onoffp);
+ virtual int rep_sync(u_int32_t flags);
+
+ // Advanced replication functions
+ //
+ virtual int rep_get_nsites(int *n);
+ virtual int rep_set_nsites(int n);
+ virtual int rep_get_priority(int *priority);
+ virtual int rep_set_priority(int priority);
+ virtual int rep_get_timeout(int which, db_timeout_t *timeout);
+ virtual int rep_set_timeout(int which, db_timeout_t timeout);
+ virtual int repmgr_add_remote_site(const char * host, u_int16_t port,
+ int *eidp, u_int32_t flags);
+ virtual int repmgr_get_ack_policy(int *policy);
+ virtual int repmgr_set_ack_policy(int policy);
+ virtual int repmgr_set_local_site(const char * host, u_int16_t port,
+ u_int32_t flags);
+ virtual int repmgr_site_list(u_int *countp, DB_REPMGR_SITE **listp);
+ virtual int repmgr_start(int nthreads, u_int32_t flags);
// Conversion functions
//
@@ -581,15 +640,19 @@ public:
db_recops op);
static void _paniccall_intercept(DB_ENV *env, int errval);
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,
- const DB_LSN *lsn, int id,
- u_int32_t flags);
+ static void _event_func_intercept(DB_ENV *env, u_int32_t, void *);
+ static int _isalive_intercept(DB_ENV *env, pid_t pid,
+ db_threadid_t thrid, u_int32_t flags);
+ static int _rep_send_intercept(DB_ENV *env, const DBT *cntrl,
+ const DBT *data, const DB_LSN *lsn, int id, u_int32_t flags);
static void _stream_error_function(const DB_ENV *env,
- const char *prefix,
- const char *message);
+ const char *prefix, const char *message);
static void _stream_message_function(const DB_ENV *env,
- const char *message);
+ const char *message);
+ static void _thread_id_intercept(DB_ENV *env, pid_t *pidp,
+ db_threadid_t *thridp);
+ static char *_thread_id_string_intercept(DB_ENV *env, pid_t pid,
+ db_threadid_t thrid, char *buf);
private:
void cleanup();
@@ -611,16 +674,17 @@ private:
__DB_STD(ostream) *message_stream_;
int (*app_dispatch_callback_)(DbEnv *, Dbt *, DbLsn *, db_recops);
+ int (*isalive_callback_)(DbEnv *, pid_t, db_threadid_t, u_int32_t);
void (*error_callback_)(const DbEnv *, const char *, const char *);
void (*feedback_callback_)(DbEnv *, int, int);
void (*message_callback_)(const DbEnv *, const char *);
void (*paniccall_callback_)(DbEnv *, int);
- int (*pgin_callback_)(DbEnv *dbenv, db_pgno_t pgno,
- void *pgaddr, Dbt *pgcookie);
- int (*pgout_callback_)(DbEnv *dbenv, db_pgno_t pgno,
- void *pgaddr, Dbt *pgcookie);
- int (*rep_send_callback_)(DbEnv *,
- const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t);
+ void (*event_func_callback_)(DbEnv *, u_int32_t, void *);
+ int (*rep_send_callback_)(DbEnv *, const Dbt *, const Dbt *,
+ const DbLsn *, int, u_int32_t);
+ void (*thread_id_callback_)(DbEnv *, pid_t *, db_threadid_t *);
+ char *(*thread_id_string_callback_)(DbEnv *, pid_t, db_threadid_t,
+ char *);
};
//
@@ -688,7 +752,7 @@ class _exported DbMpoolFile
public:
int close(u_int32_t flags);
- int get(db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep);
+ int get(db_pgno_t *pgnoaddr, DbTxn *txn, u_int32_t flags, void *pagep);
int open(const char *file, u_int32_t flags, int mode, size_t pagesize);
int get_transactional(void);
int put(void *pgaddr, u_int32_t flags);
@@ -768,7 +832,7 @@ public:
int remove(DbTxn *txnid, u_int32_t flags);
int stat(DB_SEQUENCE_STAT **sp, u_int32_t flags);
int stat_print(u_int32_t flags);
-
+
int get(DbTxn *txnid, int32_t delta, db_seq_t *retp, u_int32_t flags);
int get_cachesize(int32_t *sizep);
int set_cachesize(int32_t size);
@@ -825,7 +889,9 @@ public:
int commit(u_int32_t flags);
int discard(u_int32_t flags);
u_int32_t id();
+ int get_name(const char **namep);
int prepare(u_int8_t *gid);
+ int set_name(const char *name);
int set_timeout(db_timeout_t timeout, u_int32_t flags);
virtual DB_TXN *get_DB_TXN()
@@ -1073,6 +1139,20 @@ private:
};
//
+// A specific sort of exception that occurs when a change of replication
+// master requires that all handles be re-opened.
+//
+class _exported DbRepHandleDeadException : public DbException
+{
+public:
+ virtual ~DbRepHandleDeadException() throw();
+ DbRepHandleDeadException(const char *description);
+
+ DbRepHandleDeadException(const DbRepHandleDeadException &);
+ DbRepHandleDeadException &operator = (const DbRepHandleDeadException &);
+};
+
+//
// A specific sort of exception that occurs when
// recovery is required before continuing DB activity.
//
@@ -1085,4 +1165,17 @@ public:
DbRunRecoveryException(const DbRunRecoveryException &);
DbRunRecoveryException &operator = (const DbRunRecoveryException &);
};
+
+//
+// A specific sort of exception that occurs when
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// Restore default compiler warnings
+//
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
#endif /* !_DB_CXX_H_ */
diff --git a/db/dbinc/db_dispatch.h b/db/dbinc/db_dispatch.h
index bbaff69db..c86f2c999 100644
--- a/db/dbinc/db_dispatch.h
+++ b/db/dbinc/db_dispatch.h
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1995, 1996
@@ -32,12 +32,16 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_dispatch.h,v 11.38 2004/07/26 19:54:08 margo Exp $
+ * $Id: db_dispatch.h,v 12.8 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_DISPATCH_H_
#define _DB_DISPATCH_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* Declarations and typedefs for the list of transaction IDs used during
* recovery. This is a generic list used to pass along whatever information
@@ -68,6 +72,7 @@ struct __db_txnhead {
LIST_HEAD(__db_headlink, __db_txnlist) head[1];
};
+#define DB_LSN_STACK_SIZE 4
struct __db_txnlist {
db_txnlist_type type;
LIST_ENTRY(__db_txnlist) links;
@@ -78,9 +83,9 @@ struct __db_txnlist {
u_int32_t status;
} t;
struct {
- u_int32_t ntxns;
- u_int32_t maxn;
- DB_LSN *lsn_array;
+ u_int32_t stack_size;
+ u_int32_t stack_indx;
+ DB_LSN *lsn_stack;
} l;
struct {
u_int32_t nentries;
@@ -95,15 +100,8 @@ struct __db_txnlist {
};
/*
- * Flag value for __db_txnlist_lsnadd. Distinguish whether we are replacing
- * an entry in the transaction list or adding a new one.
- */
-#define TXNLIST_NEW 0x1
-
-/*
* States for limbo list processing.
*/
-
typedef enum {
LIMBO_NORMAL, /* Normal processing. */
LIMBO_PREPARE, /* We are preparing a transaction. */
@@ -112,4 +110,8 @@ typedef enum {
LIMBO_COMPENSATE /* After recover to ts, generate log records. */
} db_limbo_state;
+#if defined(__cplusplus)
+}
+#endif
+
#endif /* !_DB_DISPATCH_H_ */
diff --git a/db/dbinc/db_int.in b/db/dbinc/db_int.in
index 522f2f728..7c3e085cf 100644
--- a/db/dbinc/db_int.in
+++ b/db/dbinc/db_int.in
@@ -1,26 +1,74 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_int.in,v 11.155 2004/10/28 16:07:38 ubell Exp $
+ * $Id: db_int.in,v 12.41 2006/09/19 15:06:59 bostic Exp $
*/
-#ifndef _DB_INTERNAL_H_
-#define _DB_INTERNAL_H_
+#ifndef _DB_INT_H_
+#define _DB_INT_H_
/*******************************************************
- * 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.
+ * Berkeley DB includes.
*******************************************************/
#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#ifdef DIAG_MVCC
+#include <sys/mman.h>
+#endif
+#include <sys/stat.h>
+
+#if defined(__INCLUDE_SELECT_H)
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_VXWORKS
+#include <selectLib.h>
+#endif
+#endif
+
+#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_VXWORKS
+#include <net/uio.h>
+#else
+#include <sys/uio.h>
+#endif
+
+#if defined(__INCLUDE_NETWORKING)
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#endif
+
#if defined(STDC_HEADERS) || defined(__cplusplus)
#include <stdarg.h>
#else
#include <varargs.h>
#endif
+
+#include <ctype.h>
#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#endif
#include "db.h"
@@ -46,7 +94,7 @@ extern "C" {
#endif
#endif
-#if defined(HAVE_LONG_LONG) && defined(HAVE_UNSIGNED_LONG_LONG)
+#if defined(HAVE_64BIT_TYPES)
#undef INT64_MAX
#undef INT64_MIN
#undef UINT64_MAX
@@ -55,9 +103,6 @@ extern "C" {
#define INT64_MAX _I64_MAX
#define INT64_MIN _I64_MIN
#define UINT64_MAX _UI64_MAX
-
-#define INT64_FMT "%l64d"
-#define UINT64_FMT "%l64u"
#else
/*
* Override the system's 64-bit min/max constants. AIX's 32-bit compiler can
@@ -67,11 +112,16 @@ extern "C" {
#define INT64_MAX 9223372036854775807LL
#define INT64_MIN (-INT64_MAX-1)
#define UINT64_MAX 18446744073709551615ULL
-
-#define INT64_FMT "%lld"
-#define UINT64_FMT "%llu"
#endif /* DB_WIN32 */
-#endif /* HAVE_LONG_LONG && HAVE_UNSIGNED_LONG_LONG */
+
+@INT64_FMT@
+@UINT64_FMT@
+#endif /* HAVE_64BIT_TYPES */
+
+#undef FALSE
+#define FALSE 0
+#undef TRUE
+#define TRUE (!FALSE)
#define MEGABYTE 1048576
#define GIGABYTE 1073741824
@@ -102,17 +152,17 @@ extern "C" {
/* Align an integer to a specific boundary. */
#undef DB_ALIGN
#define DB_ALIGN(v, bound) \
- (((v) + (bound) - 1) & ~(((uintmax_t)bound) - 1))
+ (((v) + (bound) - 1) & ~(((uintmax_t)(bound)) - 1))
/* Increment a pointer to a specific boundary. */
#undef ALIGNP_INC
#define ALIGNP_INC(p, bound) \
- (void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)bound) - 1))
+ (void *)(((uintptr_t)(p) + (bound) - 1) & ~(((uintptr_t)(bound)) - 1))
/* Decrement a pointer to a specific boundary. */
#undef ALIGNP_DEC
#define ALIGNP_DEC(p, bound) \
- (void *)((uintptr_t)(p) & ~(((uintptr_t)bound) - 1))
+ (void *)((uintptr_t)(p) & ~(((uintptr_t)(bound)) - 1))
/*
* Print an address as a u_long (a u_long is the largest type we can print
@@ -180,7 +230,7 @@ typedef struct __fn {
((int)((total) == 0 ? 0 : ((double)(v) * 100) / (total)))
#define DB_PCT_PG(v, total, pgsize) \
((int)((total) == 0 ? 0 : \
- 100 - ((double)(v) * 100) / ((total) * (pgsize))))
+ 100 - ((double)(v) * 100) / (((double)total) * (pgsize))))
/*
* Structure used for callback message aggregation.
@@ -220,6 +270,8 @@ typedef struct __db_msgbuf {
#define STAT_LSN(msg, lsnp) \
__db_msg(dbenv, "%lu/%lu\t%s", \
(u_long)(lsnp)->file, (u_long)(lsnp)->offset, msg)
+#define STAT_POINTER(msg, v) \
+ __db_msg(dbenv, "%#lx\t%s", P_TO_ULONG(v), msg)
#define STAT_STRING(msg, p) do { \
const char *__p = p; /* p may be a function call. */ \
__db_msg(dbenv, "%s\t%s", __p == NULL ? "!Set" : __p, msg); \
@@ -227,6 +279,21 @@ typedef struct __db_msgbuf {
#define STAT_ULONG(msg, v) \
__db_msg(dbenv, "%lu\t%s", (u_long)(v), msg)
+/*
+ * There are quite a few places in Berkeley DB where we want to initialize
+ * a DBT from a string or other random pointer type, using a length typed
+ * to size_t in most cases. This macro avoids a lot of casting. The macro
+ * comes in two flavors because we often want to clear the DBT first.
+ */
+#define DB_SET_DBT(dbt, d, s) do { \
+ (dbt).data = (void *)(d); \
+ (dbt).size = (u_int32_t)(s); \
+} while (0)
+#define DB_INIT_DBT(dbt, d, s) do { \
+ memset(&(dbt), 0, sizeof(dbt)); \
+ DB_SET_DBT(dbt, d, s); \
+} while (0)
+
/*******************************************************
* API return values
*******************************************************/
@@ -248,11 +315,11 @@ typedef struct __db_msgbuf {
#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_IGNORE || \
(ret) == DB_REP_ISPERM || \
(ret) == DB_REP_NEWMASTER || \
(ret) == DB_REP_NEWSITE || \
- (ret) == DB_REP_NOTPERM || \
- (ret) == DB_REP_STARTUPDONE)
+ (ret) == DB_REP_NOTPERM)
/* Find a reasonable operation-not-supported error. */
#ifdef EOPNOTSUPP
@@ -273,8 +340,7 @@ typedef struct __db_msgbuf {
* 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 DB_MAXPATHLEN 1024
#define PATH_DOT "." /* Current working directory. */
/* Path separator character(s). */
@@ -292,21 +358,33 @@ typedef enum {
} APPNAME;
/*
+ * A set of macros to check if various functionality has been configured.
+ *
+ * ALIVE_ON The is_alive function is configured.
* CDB_LOCKING CDB product locking.
* CRYPTO_ON Security has been configured.
* LOCKING_ON Locking has been configured.
* LOGGING_ON Logging has been configured.
+ * MUTEX_ON Mutexes have 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.
+ *
+ * REP_ON is more complex than most: if the BDB library was compiled without
+ * replication support, dbenv->rep_handle will be NULL; if the BDB library
+ * has replication support, but it was not configured, the region reference
+ * will be NULL.
*/
+#define ALIVE_ON(dbenv) ((dbenv)->is_alive != NULL)
#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 MUTEX_ON(dbenv) ((dbenv)->mutex_handle != NULL)
+#define REP_ON(dbenv) \
+ ((dbenv)->rep_handle != NULL && (dbenv)->rep_handle->region != NULL)
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)
@@ -323,8 +401,7 @@ typedef enum {
* IS_RECOVERING: The system is running recovery.
*/
#define IS_RECOVERING(dbenv) \
- (LOGGING_ON(dbenv) && \
- F_ISSET((DB_LOG *)(dbenv)->lg_handle, DBLOG_RECOVER))
+ (LOGGING_ON(dbenv) && F_ISSET((dbenv)->lg_handle, DBLOG_RECOVER))
/* Initialization methods are often illegal before/after open is called. */
#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \
@@ -338,10 +415,90 @@ typedef enum {
#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flags) \
if (handle == NULL) \
return (__db_env_config(dbenv, i, flags));
+#define ENV_REQUIRES_CONFIG_XX(dbenv, handle, i, flags) \
+ if ((dbenv)->handle->region == NULL) \
+ return (__db_env_config(dbenv, i, flags));
#define ENV_NOT_CONFIGURED(dbenv, handle, i, flags) \
if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \
ENV_REQUIRES_CONFIG(dbenv, handle, i, flags)
+#define ENV_ENTER(dbenv, ip) do { \
+ int __ret; \
+ if ((dbenv)->thr_hashtab == NULL) \
+ ip = NULL; \
+ else { \
+ if ((__ret = \
+ __env_set_state(dbenv, &(ip), THREAD_ACTIVE)) != 0) \
+ return (__ret); \
+ } \
+} while (0)
+
+#ifdef DIAGNOSTIC
+#define ENV_LEAVE(dbenv, ip) do { \
+ if ((ip) != NULL) { \
+ DB_ASSERT(dbenv, ip->dbth_state == THREAD_ACTIVE); \
+ (ip)->dbth_state = THREAD_OUT; \
+ } \
+} while (0)
+#else
+#define ENV_LEAVE(dbenv, ip) do { \
+ if ((ip) != NULL) \
+ (ip)->dbth_state = THREAD_OUT; \
+} while (0)
+#endif
+#ifdef DIAGNOSTIC
+#define CHECK_THREAD(dbenv) do { \
+ DB_THREAD_INFO *__ip; \
+ if ((dbenv)->thr_hashtab != NULL) { \
+ (void)__env_set_state(dbenv, &__ip, THREAD_DIAGNOSTIC); \
+ DB_ASSERT(dbenv, \
+ __ip != NULL && __ip->dbth_state != THREAD_OUT); \
+ } \
+} while (0)
+#ifdef HAVE_STATISTICS
+#define CHECK_MTX_THREAD(dbenv, mtx) do { \
+ if (mtx->alloc_id != MTX_MUTEX_REGION && \
+ mtx->alloc_id != MTX_ENV_REGION && \
+ mtx->alloc_id != MTX_APPLICATION) \
+ CHECK_THREAD(dbenv); \
+} while (0)
+#else
+#define CHECK_MTX_THREAD(dbenv, mtx)
+#endif
+#else
+#define CHECK_THREAD(dbenv)
+#define CHECK_MTX_THREAD(dbenv, mtx)
+#endif
+
+typedef enum {
+ THREAD_SLOT_NOT_IN_USE=0,
+ THREAD_OUT,
+ THREAD_ACTIVE,
+ THREAD_BLOCKED
+#ifdef DIAGNOSTIC
+ , THREAD_DIAGNOSTIC
+#endif
+} DB_THREAD_STATE;
+
+typedef struct __db_thread_info {
+ pid_t dbth_pid;
+ db_threadid_t dbth_tid;
+ DB_THREAD_STATE dbth_state;
+ SH_TAILQ_ENTRY dbth_links;
+} DB_THREAD_INFO;
+
+typedef struct __env_thread_info {
+ u_int32_t thr_count;
+ u_int32_t thr_max;
+ u_int32_t thr_nbucket;
+ roff_t thr_hashoff;
+} THREAD_INFO;
+
+#define DB_EVENT(dbenv, e, einfo) do { \
+ if ((dbenv)->db_event_func != NULL) \
+ (dbenv)->db_event_func(dbenv, e, einfo); \
+} while (0)
+
/*******************************************************
* Database Access Methods.
*******************************************************/
@@ -350,7 +507,7 @@ typedef enum {
* The database handle is free-threaded (was opened with DB_THREAD).
*/
#define DB_IS_THREADED(dbp) \
- ((dbp)->mutexp != NULL)
+ ((dbp)->mutex != MUTEX_INVALID)
/* Initialization methods are often illegal before/after open is called. */
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
@@ -398,9 +555,9 @@ typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
#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) \
+#define FREE_IF_NEEDED(dbenv, dbt) \
if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
- __os_ufree((sdbp)->dbenv, (dbt)->data); \
+ __os_ufree((dbenv), (dbt)->data); \
F_CLR((dbt), DB_DBT_APPMALLOC); \
}
@@ -437,8 +594,10 @@ typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
/*
* File types for DB access methods. Negative numbers are reserved to DB.
*/
-#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
-#define DB_FTYPE_NOTSET 0 /* Don't call... */
+#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */
+#define DB_FTYPE_NOTSET 0 /* Don't call... */
+#define DB_LSN_OFF_NOTSET -1 /* Not yet set. */
+#define DB_CLEARLEN_NOTSET UINT32_MAX /* Not yet set. */
/* Structure used as the DB pgin/pgout pgcookie. */
typedef struct __dbpginfo {
@@ -478,12 +637,25 @@ typedef struct __dbpginfo {
#define IS_NOT_LOGGED_LSN(LSN) \
((LSN).file == 0 && (LSN).offset == 1)
+/*
+ * LOG_COMPARE -- compare two LSNs.
+ */
+
+#define LOG_COMPARE(lsn0, lsn1) \
+ ((lsn0)->file != (lsn1)->file ? \
+ ((lsn0)->file < (lsn1)->file ? -1 : 1) : \
+ ((lsn0)->offset != (lsn1)->offset ? \
+ ((lsn0)->offset < (lsn1)->offset ? -1 : 1) : 0))
+
+
/*******************************************************
* Txn.
*******************************************************/
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
#define NOWAIT_FLAG(txn) \
((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)
+#define IS_REAL_TXN(txn) \
+ ((txn) != NULL && !F_ISSET(txn, TXN_CDSGROUP))
#define IS_SUBTRANSACTION(txn) \
((txn) != NULL && (txn)->parent != NULL)
@@ -526,10 +698,12 @@ typedef struct __dbpginfo {
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
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_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;
+typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;
+
#if defined(__cplusplus)
}
#endif
@@ -541,11 +715,13 @@ struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
#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/mutex.h"
#include "dbinc/os.h"
+#ifdef HAVE_REPLICATION_THREADS
+#include "dbinc/repmgr.h"
+#endif
#include "dbinc/rep.h"
#include "dbinc_auto/clib_ext.h"
#include "dbinc_auto/common_ext.h"
@@ -577,15 +753,18 @@ struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
* 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 we're not in recovery (master - doing an abort a client applying
+ * a txn), then a client's only path through here is on an internal
+ * operation, and a master's only path through here is a transactional
+ * operation. Detect if either is not the case.
*/
#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))
+#define DBC_LOGGING(dbc) __dbc_logging(dbc)
#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_ */
+#endif /* !_DB_INT_H_ */
diff --git a/db/dbinc/db_join.h b/db/dbinc/db_join.h
index 3fea2ad2f..089972f6f 100644
--- a/db/dbinc/db_join.h
+++ b/db/dbinc/db_join.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * @(#)db_join.h 11.1 (Sleepycat) 7/25/99
+ * $Id: db_join.h,v 12.5 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_JOIN_H_
#define _DB_JOIN_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* Joins use a join cursor that is similar to a regular DB cursor except
* that it only supports c_get and c_close functionality. Also, it does
@@ -28,4 +32,7 @@ typedef struct __join_cursor {
u_int32_t flags;
} JOIN_CURSOR;
+#if defined(__cplusplus)
+}
+#endif
#endif /* !_DB_JOIN_H_ */
diff --git a/db/dbinc/db_page.h b/db/dbinc/db_page.h
index 59a1292ff..4f2973cc3 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_page.h,v 11.63 2004/09/17 22:00:27 mjc Exp $
+ * $Id: db_page.h,v 12.10 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_PAGE_H_
@@ -48,6 +48,8 @@ extern "C" {
#define P_QAMDATA 11 /* Queue data page. */
#define P_LDUP 12 /* Off-page duplicate leaf. */
#define P_PAGETYPE_MAX 13
+/* Flag to __db_new */
+#define P_DONTEXTEND 0x8000 /* Don't allocate if there are no free pages. */
/*
* When we create pages in mpool, we ask mpool to clear some number of bytes
@@ -100,12 +102,12 @@ typedef struct _btmeta33 {
#define BTM_MASK 0x07f
DBMETA dbmeta; /* 00-71: Generic meta-data header. */
- u_int32_t maxkey; /* 72-75: Btree: Maxkey. */
+ u_int32_t unused1; /* 72-75: Unused space. */
u_int32_t minkey; /* 76-79: Btree: Minkey. */
u_int32_t re_len; /* 80-83: Recno: fixed-length record length. */
u_int32_t re_pad; /* 84-87: Recno: fixed-length record pad. */
u_int32_t root; /* 88-91: Root page. */
- u_int32_t unused[92]; /* 92-459: Unused space */
+ u_int32_t unused2[92]; /* 92-459: Unused space. */
u_int32_t crypto_magic; /* 460-463: Crypto magic number */
u_int32_t trash[3]; /* 464-475: Trash space - Do not use */
u_int8_t iv[DB_IV_BYTES]; /* 476-495: Crypto IV */
@@ -268,7 +270,7 @@ typedef struct _db_page {
(F_ISSET((dbp), DB_AM_ENCRYPT) ? ((u_int8_t *)(pg) + \
SIZEOF_PAGE + SSZA(PG_CRYPTO, chksum)) : \
(F_ISSET((dbp), DB_AM_CHKSUM) ? ((u_int8_t *)(pg) + \
- SIZEOF_PAGE + SSZA(PG_CHKSUM, chksum)) \
+ SIZEOF_PAGE + SSZA(PG_CHKSUM, chksum)) \
: NULL))
/* PAGE element macros. */
@@ -531,12 +533,9 @@ typedef struct _hoffdup {
#define B_DSET(t) (t) |= B_DELETE
#define B_DISSET(t) ((t) & B_DELETE)
-#define B_TYPE(t) ((t) & ~B_DELETE)
-#define B_TSET(t, type, deleted) { \
- (t) = (type); \
- if (deleted) \
- B_DSET(t); \
-}
+#define B_TYPE(t) ((t) & ~B_DELETE)
+#define B_TSET(t, type) ((t) = B_TYPE(type))
+#define B_TSET_DELETED(t, type) ((t) = (type) | B_DELETE)
/*
* The first type is B_KEYDATA, represented by the BKEYDATA structure:
@@ -588,6 +587,14 @@ typedef struct _boverflow {
#define BOVERFLOW_PSIZE \
(BOVERFLOW_SIZE + sizeof(db_indx_t))
+#define BITEM_SIZE(bk) \
+ (B_TYPE((bk)->type) != B_KEYDATA ? BOVERFLOW_SIZE : \
+ BKEYDATA_SIZE((bk)->len))
+
+#define BITEM_PSIZE(bk) \
+ (B_TYPE((bk)->type) != B_KEYDATA ? BOVERFLOW_PSIZE : \
+ BKEYDATA_PSIZE((bk)->len))
+
/*
* Btree leaf and hash page layouts group indices in sets of two, one for the
* key and one for the data. Everything else does it in sets of one to save
@@ -650,6 +657,11 @@ typedef struct _rinternal {
#define RINTERNAL_PSIZE \
(RINTERNAL_SIZE + sizeof(db_indx_t))
+struct pglist {
+ db_pgno_t pgno;
+ DB_LSN lsn;
+};
+
#if defined(__cplusplus)
}
#endif
diff --git a/db/dbinc/db_server_int.h b/db/dbinc/db_server_int.h
index eba36efcb..f93ba15ba 100644
--- a/db/dbinc/db_server_int.h
+++ b/db/dbinc/db_server_int.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_server_int.h,v 1.25 2004/01/28 03:36:02 bostic Exp $
+ * $Id: db_server_int.h,v 12.9 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_SERVER_INT_H_
#define _DB_SERVER_INT_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
#define DB_SERVER_TIMEOUT 300 /* 5 minutes */
#define DB_SERVER_MAXTIMEOUT 1200 /* 20 minutes */
#define DB_SERVER_IDLETIMEOUT 86400 /* 1 day */
@@ -58,7 +62,7 @@ struct home_entry {
DB_INIT_CDB | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | \
DB_INIT_TXN | DB_JOINENV)
-#define DB_SERVER_DBFLAGS (DB_DIRTY_READ | DB_NOMMAP | DB_RDONLY)
+#define DB_SERVER_DBFLAGS (DB_NOMMAP | DB_RDONLY | DB_READ_UNCOMMITTED)
#define DB_SERVER_DBNOSHARE (DB_EXCL | DB_TRUNCATE)
typedef struct ct_envdata ct_envdata;
@@ -135,14 +139,23 @@ extern int __dbsrv_verbose;
* Assumes local variable 'replyp'.
* NOTE: May 'return' from macro.
*/
-#define ACTIVATE_CTP(ctp, id, type) { \
- (ctp) = get_tableent(id); \
- if ((ctp) == NULL) { \
- replyp->status = DB_NOSERVER_ID;\
- return; \
- } \
- DB_ASSERT((ctp)->ct_type & (type)); \
- __dbsrv_active(ctp); \
+#define ACTIVATE_CTP(ctp, id, type) { \
+ (ctp) = get_tableent(id); \
+ if ((ctp) == NULL) { \
+ replyp->status = DB_NOSERVER_ID; \
+ return; \
+ } \
+ /* We don't have a dbenv handle at this point. */ \
+ DB_ASSERT(NULL, (ctp)->ct_type & (type)); \
+ __dbsrv_active(ctp); \
}
+#define FREE_IF_CHANGED(dbenv, p, orig) do { \
+ if ((p) != NULL && (p) != (orig)) \
+ __os_ufree((dbenv), (p)); \
+} while (0)
+
+#if defined(__cplusplus)
+}
+#endif
#endif /* !_DB_SERVER_INT_H_ */
diff --git a/db/dbinc/db_swap.h b/db/dbinc/db_swap.h
index dcfac416a..1fc13b159 100644
--- a/db/dbinc/db_swap.h
+++ b/db/dbinc/db_swap.h
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -32,12 +32,60 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: db_swap.h,v 11.11 2004/01/28 03:36:02 bostic Exp $
+ * $Id: db_swap.h,v 12.6 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_SWAP_H_
#define _DB_SWAP_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*
+ * Little endian <==> big endian 64-bit swap macros.
+ * M_64_SWAP swap a memory location
+ * P_64_COPY copy potentially unaligned 4 byte quantities
+ * P_64_SWAP swap a referenced memory location
+ */
+#undef M_64_SWAP
+#define M_64_SWAP(a) { \
+ u_int64_t _tmp; \
+ _tmp = (u_int64_t)a; \
+ ((u_int8_t *)&a)[0] = ((u_int8_t *)&_tmp)[7]; \
+ ((u_int8_t *)&a)[1] = ((u_int8_t *)&_tmp)[6]; \
+ ((u_int8_t *)&a)[2] = ((u_int8_t *)&_tmp)[5]; \
+ ((u_int8_t *)&a)[3] = ((u_int8_t *)&_tmp)[4]; \
+ ((u_int8_t *)&a)[4] = ((u_int8_t *)&_tmp)[3]; \
+ ((u_int8_t *)&a)[5] = ((u_int8_t *)&_tmp)[2]; \
+ ((u_int8_t *)&a)[6] = ((u_int8_t *)&_tmp)[1]; \
+ ((u_int8_t *)&a)[7] = ((u_int8_t *)&_tmp)[0]; \
+}
+#undef P_64_COPY
+#define P_64_COPY(a, b) { \
+ ((u_int8_t *)b)[0] = ((u_int8_t *)a)[0]; \
+ ((u_int8_t *)b)[1] = ((u_int8_t *)a)[1]; \
+ ((u_int8_t *)b)[2] = ((u_int8_t *)a)[2]; \
+ ((u_int8_t *)b)[3] = ((u_int8_t *)a)[3]; \
+ ((u_int8_t *)b)[4] = ((u_int8_t *)a)[4]; \
+ ((u_int8_t *)b)[5] = ((u_int8_t *)a)[5]; \
+ ((u_int8_t *)b)[6] = ((u_int8_t *)a)[6]; \
+ ((u_int8_t *)b)[7] = ((u_int8_t *)a)[7]; \
+}
+#undef P_64_SWAP
+#define P_64_SWAP(a) { \
+ u_int64_t _tmp; \
+ P_64_COPY(a, &_tmp); \
+ ((u_int8_t *)a)[0] = ((u_int8_t *)&_tmp)[7]; \
+ ((u_int8_t *)a)[1] = ((u_int8_t *)&_tmp)[6]; \
+ ((u_int8_t *)a)[2] = ((u_int8_t *)&_tmp)[5]; \
+ ((u_int8_t *)a)[3] = ((u_int8_t *)&_tmp)[4]; \
+ ((u_int8_t *)a)[4] = ((u_int8_t *)&_tmp)[3]; \
+ ((u_int8_t *)a)[5] = ((u_int8_t *)&_tmp)[2]; \
+ ((u_int8_t *)a)[6] = ((u_int8_t *)&_tmp)[1]; \
+ ((u_int8_t *)a)[7] = ((u_int8_t *)&_tmp)[0]; \
+}
+
/*
* Little endian <==> big endian 32-bit swap macros.
* M_32_SWAP swap a memory location
@@ -47,7 +95,7 @@
#undef M_32_SWAP
#define M_32_SWAP(a) { \
u_int32_t _tmp; \
- _tmp = a; \
+ _tmp = (u_int32_t)a; \
((u_int8_t *)&a)[0] = ((u_int8_t *)&_tmp)[3]; \
((u_int8_t *)&a)[1] = ((u_int8_t *)&_tmp)[2]; \
((u_int8_t *)&a)[2] = ((u_int8_t *)&_tmp)[1]; \
@@ -123,4 +171,7 @@
P_32_SWAP(p); \
} while (0)
+#if defined(__cplusplus)
+}
+#endif
#endif /* !_DB_SWAP_H_ */
diff --git a/db/dbinc/db_upgrade.h b/db/dbinc/db_upgrade.h
index e7ac0bc96..6e52859b5 100644
--- a/db/dbinc/db_upgrade.h
+++ b/db/dbinc/db_upgrade.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_upgrade.h,v 1.12 2004/01/28 03:36:02 bostic Exp $
+ * $Id: db_upgrade.h,v 12.4 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_UPGRADE_H_
#define _DB_UPGRADE_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* This file defines the metadata pages from the previous release.
* These structures are only used to upgrade old versions of databases.
@@ -239,4 +243,7 @@ typedef struct hashhdr { /* Disk resident portion */
*/
} HASHHDR;
+#if defined(__cplusplus)
+}
+#endif
#endif /* !_DB_UPGRADE_H_ */
diff --git a/db/dbinc/db_verify.h b/db/dbinc/db_verify.h
index 528ba8f04..cc88d1c87 100644
--- a/db/dbinc/db_verify.h
+++ b/db/dbinc/db_verify.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_verify.h,v 1.34 2004/05/20 14:34:12 bostic Exp $
+ * $Id: db_verify.h,v 12.9 2006/09/08 21:57:14 bostic Exp $
*/
#ifndef _DB_VERIFY_H_
#define _DB_VERIFY_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* Structures and macros for the storage and retrieval of all information
* needed for inter-page verification of a database.
@@ -21,15 +25,9 @@
*/
#define EPRINT(x) do { \
if (!LF_ISSET(DB_SALVAGE)) \
- __db_err x; \
+ __db_errx x; \
} while (0)
-/* For fatal type errors--i.e., verifier bugs. */
-#define TYPE_ERR_PRINT(dbenv, func, pgno, ptype) \
- EPRINT(((dbenv), \
- "Page %lu: %s called on nonsensical page of type %lu", \
- (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 { \
EPRINT(((dbenv), "Page %lu: %s is of inappropriate type %lu", \
@@ -124,7 +122,8 @@ struct __vrfy_dbinfo {
u_int8_t leaf_type;
/* Queue needs these to verify data pages in the first pass. */
- u_int32_t re_len;
+ u_int32_t re_pad; /* Record pad character. */
+ u_int32_t re_len; /* Record length. */
u_int32_t rec_page;
u_int32_t page_ext;
u_int32_t first_recno;
@@ -165,9 +164,9 @@ struct __vrfy_pageinfo {
db_indx_t entries; /* Actual number of entries. */
u_int16_t unused;
db_recno_t rec_cnt; /* Record count. */
+ u_int32_t re_pad; /* Record pad character. */
u_int32_t re_len; /* Record length. */
u_int32_t bt_minkey;
- u_int32_t bt_maxkey;
u_int32_t h_ffactor;
u_int32_t h_nelem;
@@ -180,16 +179,17 @@ struct __vrfy_pageinfo {
u_int32_t olen;
#define VRFY_DUPS_UNSORTED 0x0001 /* Have to flag the negative! */
-#define VRFY_HAS_DUPS 0x0002
-#define VRFY_HAS_DUPSORT 0x0004 /* Has the flag set. */
-#define VRFY_HAS_SUBDBS 0x0008
+#define VRFY_HAS_CHKSUM 0x0002
+#define VRFY_HAS_DUPS 0x0004
+#define VRFY_HAS_DUPSORT 0x0008 /* Has the flag set. */
#define VRFY_HAS_RECNUMS 0x0010
-#define VRFY_INCOMPLETE 0x0020 /* Meta or item order checks incomp. */
-#define VRFY_IS_ALLZEROES 0x0040 /* Hash page we haven't touched? */
-#define VRFY_IS_FIXEDLEN 0x0080
-#define VRFY_IS_RECNO 0x0100
-#define VRFY_IS_RRECNO 0x0200
-#define VRFY_OVFL_LEAFSEEN 0x0400
+#define VRFY_HAS_SUBDBS 0x0020
+#define VRFY_INCOMPLETE 0x0040 /* Meta or item order checks incomp. */
+#define VRFY_IS_ALLZEROES 0x0080 /* Hash page we haven't touched? */
+#define VRFY_IS_FIXEDLEN 0x0100
+#define VRFY_IS_RECNO 0x0200
+#define VRFY_IS_RRECNO 0x0400
+#define VRFY_OVFL_LEAFSEEN 0x0800
u_int32_t flags;
LIST_ENTRY(__vrfy_pageinfo) links;
@@ -213,4 +213,7 @@ struct __vrfy_childinfo {
LIST_ENTRY(__vrfy_childinfo) links;
}; /* VRFY_CHILDINFO */
+#if defined(__cplusplus)
+}
+#endif
#endif /* !_DB_VERIFY_H_ */
diff --git a/db/dbinc/debug.h b/db/dbinc/debug.h
index 068c8af2b..e47f3f614 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: debug.h,v 11.44 2004/09/24 00:43:18 bostic Exp $
+ * $Id: debug.h,v 12.8 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_DEBUG_H_
@@ -33,10 +33,11 @@ extern "C" {
*
* Use __STDC__ rather than STDC_HEADERS, the #e construct is ANSI C specific.
*/
-#if defined(__STDC__) && defined(DIAGNOSTIC)
-#define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(#e, __FILE__, __LINE__))
+#if defined(DIAGNOSTIC) && defined(__STDC__)
+#define DB_ASSERT(env, e) \
+ ((e) ? (void)0 : __db_assert(env, #e, __FILE__, __LINE__))
#else
-#define DB_ASSERT(e)
+#define DB_ASSERT(env, e)
#endif
/*
@@ -45,9 +46,10 @@ extern "C" {
* 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)
+#define COMPQUIET(n, v) do { \
+ (n) = (v); \
+ (n) = (n); \
+} while (0)
/*
* Purify and other run-time tools complain about uninitialized reads/writes
@@ -61,6 +63,17 @@ extern "C" {
#endif
/*
+ * Errors are in one of two areas: a Berkeley DB error, or a system-level
+ * error. We use db_strerror to translate the former and __os_strerror to
+ * translate the latter.
+ */
+typedef enum {
+ DB_ERROR_NOT_SET=0,
+ DB_ERROR_SET=1,
+ DB_ERROR_SYSTEM=2
+} db_error_set_t;
+
+/*
* Message handling. Use a macro instead of a function because va_list
* references to variadic arguments cannot be reset to the beginning of the
* variadic argument list (and then rescanned), by functions other than the
@@ -209,6 +222,13 @@ extern "C" {
(flags) |= DB_LOCK_NOWAIT; \
} while (0)
+#define DB_ENV_TEST_RECYCLE(env, ret) do { \
+ if ((env)->test_copy == DB_TEST_RECYCLE) { \
+ ret = 0; \
+ goto db_tr_err; \
+ } \
+} while (0)
+
#define DB_ENV_TEST_RECOVERY(env, val, ret, name) do { \
int __ret; \
PANIC_CHECK((env)); \
@@ -247,15 +267,16 @@ extern "C" {
#define DB_TEST_RECOVERY_LABEL db_tr_err:
-#define DB_TEST_CHECKPOINT(env, val) \
- if ((val) != 0) \
+#define DB_TEST_WAIT(env, val) \
+ if ((val) != 0) \
__os_sleep((env), (u_long)(val), 0)
#else
+#define DB_ENV_TEST_RECYCLE(env, ret);
#define DB_TEST_SUBLOCKS(env, flags)
#define DB_ENV_TEST_RECOVERY(env, val, ret, name)
#define DB_TEST_RECOVERY(dbp, val, ret, name)
#define DB_TEST_RECOVERY_LABEL
-#define DB_TEST_CHECKPOINT(env, val)
+#define DB_TEST_WAIT(env, val)
#endif
#if defined(__cplusplus)
diff --git a/db/dbinc/fop.h b/db/dbinc/fop.h
index ef87ff6e2..33f919d22 100644
--- a/db/dbinc/fop.h
+++ b/db/dbinc/fop.h
@@ -1,16 +1,28 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: fop.h,v 11.5 2004/01/28 03:36:02 bostic Exp $
+ * $Id: fop.h,v 12.6 2006/08/24 14:45:29 bostic Exp $
*/
-#ifndef _FOP_H_
-#define _FOP_H_
+#ifndef _DB_FOP_H_
+#define _DB_FOP_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#define MAKE_INMEM(D) do { \
+ F_SET((D), DB_AM_INMEM); \
+ (void)__memp_set_flags((D)->mpf, DB_MPOOL_NOFILE, 1); \
+} while (0)
#include "dbinc_auto/fileops_auto.h"
#include "dbinc_auto/fileops_ext.h"
-#endif /* !_FOP_H_ */
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_DB_FOP_H_ */
diff --git a/db/dbinc/globals.h b/db/dbinc/globals.h
index 95d96533a..3d68423ef 100644
--- a/db/dbinc/globals.h
+++ b/db/dbinc/globals.h
@@ -1,12 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: globals.h,v 11.9 2004/09/17 22:00:27 mjc Exp $
+ * $Id: globals.h,v 12.4 2006/08/24 14:45:29 bostic Exp $
*/
+#ifndef _DB_GLOBALS_H_
+#define _DB_GLOBALS_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*******************************************************
* Global variables.
*
@@ -90,3 +97,8 @@ extern DB_GLOBALS __db_global_values;
#endif
#define DB_GLOBAL(v) __db_global_values.v
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_DB_GLOBALS_H_ */
diff --git a/db/dbinc/hash.h b/db/dbinc/hash.h
index 10059a5e0..acc608802 100644
--- a/db/dbinc/hash.h
+++ b/db/dbinc/hash.h
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -39,12 +39,16 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash.h,v 11.28 2004/01/28 03:36:02 bostic Exp $
+ * $Id: hash.h,v 12.5 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_HASH_H_
#define _DB_HASH_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/* Hash internal structure. */
typedef struct hash_t {
db_pgno_t meta_pgno; /* Page number of the meta data page. */
@@ -78,13 +82,12 @@ typedef struct cursor_t {
#define H_CONTINUE 0x0001 /* Join--search strictly fwd for data */
#define H_DELETED 0x0002 /* Cursor item is deleted. */
-#define H_DIRTY 0x0004 /* Meta-data page needs to be written */
-#define H_DUPONLY 0x0008 /* Dups only; do not change key. */
-#define H_EXPAND 0x0010 /* Table expanded. */
-#define H_ISDUP 0x0020 /* Cursor is within duplicate set. */
-#define H_NEXT_NODUP 0x0040 /* Get next non-dup entry. */
-#define H_NOMORE 0x0080 /* No more entries in bucket. */
-#define H_OK 0x0100 /* Request succeeded. */
+#define H_DUPONLY 0x0004 /* Dups only; do not change key. */
+#define H_EXPAND 0x0008 /* Table expanded. */
+#define H_ISDUP 0x0010 /* Cursor is within duplicate set. */
+#define H_NEXT_NODUP 0x0020 /* Get next non-dup entry. */
+#define H_NOMORE 0x0040 /* No more entries in bucket. */
+#define H_OK 0x0080 /* Request succeeded. */
u_int32_t flags;
} HASH_CURSOR;
@@ -141,6 +144,10 @@ typedef enum {
DB_HAM_SPLIT = 6
} db_ham_mode;
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/hash_auto.h"
#include "dbinc_auto/hash_ext.h"
#include "dbinc/db_am.h"
diff --git a/db/dbinc/hmac.h b/db/dbinc/hmac.h
index 439537927..5868d7bfb 100644
--- a/db/dbinc/hmac.h
+++ b/db/dbinc/hmac.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hmac.h,v 1.5 2004/01/28 03:36:02 bostic Exp $
+ * $Id: hmac.h,v 12.4 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_HMAC_H_
#define _DB_HMAC_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* Algorithm specific information.
*/
@@ -28,5 +32,9 @@ typedef struct {
#define DB_MAC_MAGIC "mac derivation key magic value"
#define DB_ENC_MAGIC "encryption and decryption key value magic"
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/hmac_ext.h"
#endif /* !_DB_HMAC_H_ */
diff --git a/db/dbinc/lock.h b/db/dbinc/lock.h
index e59abbff8..8d5a6a367 100644
--- a/db/dbinc/lock.h
+++ b/db/dbinc/lock.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock.h,v 11.53 2004/09/22 21:14:56 ubell Exp $
+ * $Id: lock.h,v 12.11 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_LOCK_H_
#define _DB_LOCK_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
#define DB_LOCK_DEFAULT_N 1000 /* Default # of locks in region. */
/*
@@ -54,11 +58,21 @@ typedef struct {
((t1)->tv_sec > (t2)->tv_sec || \
((t1)->tv_sec == (t2)->tv_sec && (t1)->tv_usec > (t2)->tv_usec))
+/* Macros to lock/unlock the lock region as a whole. */
+#define LOCK_SYSTEM_LOCK(dbenv) \
+ MUTEX_LOCK(dbenv, ((DB_LOCKREGION *) \
+ (dbenv)->lk_handle->reginfo.primary)->mtx_region)
+#define LOCK_SYSTEM_UNLOCK(dbenv) \
+ MUTEX_UNLOCK(dbenv, ((DB_LOCKREGION *) \
+ (dbenv)->lk_handle->reginfo.primary)->mtx_region)
+
/*
* DB_LOCKREGION --
* The lock shared region.
*/
typedef struct __db_lockregion {
+ db_mutex_t mtx_region; /* Region mutex. */
+
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 */
@@ -79,15 +93,9 @@ typedef struct __db_lockregion {
roff_t conf_off; /* offset of conflicts array */
roff_t obj_off; /* offset of object hash table */
- roff_t osynch_off; /* offset of the object mutex table */
roff_t locker_off; /* offset of locker hash table */
- roff_t lsynch_off; /* offset of the locker mutex table */
DB_LOCK_STAT stat; /* stats about locking. */
-
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- roff_t maint_off; /* offset of region maintenance info */
-#endif
} DB_LOCKREGION;
/*
@@ -122,9 +130,15 @@ typedef struct __db_lockobj {
*/
typedef struct __db_locker {
u_int32_t id; /* Locker id. */
+
+ pid_t pid; /* Process owning locker ID */
+ db_threadid_t tid; /* Thread owning locker ID */
+
u_int32_t dd_id; /* Deadlock detector id. */
+
u_int32_t nlocks; /* Number of locks held. */
u_int32_t nwrites; /* Number of write locks held. */
+
roff_t master_locker; /* Locker of master transaction. */
roff_t parent_locker; /* Parent of this child. */
SH_LIST_HEAD(_child) child_locker; /* List of descendant txns;
@@ -152,13 +166,13 @@ typedef struct __db_locker {
* The primary library lock data structure (i.e., the one referenced
* by the environment, as opposed to the internal one laid out in the region.)
*/
-typedef struct __db_locktab {
+struct __db_locktab {
DB_ENV *dbenv; /* Environment. */
REGINFO reginfo; /* Region information. */
u_int8_t *conflicts; /* Pointer to conflict matrix. */
DB_HASHTAB *obj_tab; /* Beginning of object hash table. */
DB_HASHTAB *locker_tab; /* Beginning of locker hash table. */
-} DB_LOCKTAB;
+};
/*
* Test for conflicts.
@@ -175,7 +189,7 @@ struct __db_lock {
* Wait on mutex to wait on lock. You reference your own mutex with
* ID 0 and others reference your mutex with ID 1.
*/
- DB_MUTEX mutex;
+ db_mutex_t mtx_lock;
u_int32_t holder; /* Who holds this lock. */
u_int32_t gen; /* Generation count. */
@@ -195,10 +209,9 @@ struct __db_lock {
* (used by __lock_put_internal).
* DB_LOCK_UNLINK: Remove from the locker links (used in checklocker).
* Make sure that these do not conflict with the interface flags because
- * we pass some of those around (i.e., DB_LOCK_REMOVE).
+ * we pass some of those around.
*/
#define DB_LOCK_DOALL 0x010000
-#define DB_LOCK_DOWNGRADE 0x020000
#define DB_LOCK_FREE 0x040000
#define DB_LOCK_NOPROMOTE 0x080000
#define DB_LOCK_UNLINK 0x100000
@@ -212,11 +225,20 @@ struct __db_lock {
ndx = __lock_ohash(obj) % (reg)->object_t_size
#define SHOBJECT_LOCK(lt, reg, shobj, ndx) \
ndx = __lock_lhash(shobj) % (reg)->object_t_size
+
+/*
+ * __lock_locker_hash --
+ * Hash function for entering lockers into the locker hash table.
+ * Since these are simply 32-bit unsigned integers at the moment,
+ * just return the locker value.
+ */
+#define __lock_locker_hash(locker) (locker)
#define LOCKER_LOCK(lt, reg, locker, ndx) \
ndx = __lock_locker_hash(locker) % (reg)->locker_t_size;
-#define LOCKREGION(dbenv, lt) R_LOCK((dbenv), &((DB_LOCKTAB *)lt)->reginfo)
-#define UNLOCKREGION(dbenv, lt) R_UNLOCK((dbenv), &((DB_LOCKTAB *)lt)->reginfo)
+#if defined(__cplusplus)
+}
+#endif
#include "dbinc_auto/lock_ext.h"
#endif /* !_DB_LOCK_H_ */
diff --git a/db/dbinc/log.h b/db/dbinc/log.h
index 9a8690138..3acd1b7ec 100644
--- a/db/dbinc/log.h
+++ b/db/dbinc/log.h
@@ -1,14 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log.h,v 11.90 2004/10/15 16:59:39 bostic Exp $
+ * $Id: log.h,v 12.24 2006/08/24 14:45:29 bostic Exp $
*/
-#ifndef _LOG_H_
-#define _LOG_H_
+#ifndef _DB_LOG_H_
+#define _DB_LOG_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
/*******************************************************
* DBREG:
@@ -32,6 +36,7 @@ struct __fname {
SH_TAILQ_ENTRY q; /* File name queue. */
int32_t id; /* Logging file id. */
+ int32_t old_id; /* Saved logging file id. */
DBTYPE s_type; /* Saved DB type. */
roff_t name_off; /* Name offset. */
@@ -42,20 +47,23 @@ struct __fname {
* Txn ID of the DB create, stored so
* we can log it at register time.
*/
- int is_durable; /* Is this file durable or not. */
+#define DB_FNAME_NOTLOGGED 0x01 /* Log of close failed. */
+#define DB_FNAME_DURABLE 0x02 /* File is durable. */
+ u_int32_t flags;
};
/* 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. */
+#define DBREG_PREOPEN 4 /* Open in mpool only. */
+#define DBREG_RCLOSE 5 /* File close after recovery. */
+#define DBREG_REOPEN 6 /* Open for in-memory database. */
/*******************************************************
* 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;
struct __log_persist; typedef struct __log_persist LOGP;
@@ -66,39 +74,42 @@ struct __log_persist; typedef struct __log_persist LOGP;
#define LG_MAX_DEFAULT (10 * MEGABYTE) /* 10 MB. */
#define LG_MAX_INMEM (256 * 1024) /* 256 KB. */
-#define LG_BSIZE_DEFAULT (32 * 1024) /* 32 KB. */
#define LG_BSIZE_INMEM (1 * MEGABYTE) /* 1 MB. */
-#define LG_BASE_REGION_SIZE (60 * 1024) /* 60 KB. */
+
+/*
+ * Allocate a few bytes under a power-of-two value. BDB doesn't care if it's
+ * a power-of-two or not, and requesting slightly under a power-of-two allows
+ * stupid allocators to avoid wasting space.
+ */
+#define LG_BASE_REGION_SIZE (65000) /* 64KB - 536B */
+#define LG_BSIZE_DEFAULT (32000) /* 32 KB - 768B */
+#define LG_CURSOR_BUF_SIZE (32000) /* 32KB - 768B */
/*
* DB_LOG
* Per-process log structure.
*/
struct __db_log {
-/*
- * These fields need to 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.
- */
- DB_MUTEX *mutexp; /* Mutex for thread protection. */
+ /*
+ * These fields need to be protected for multi-threaded support.
+ */
+ db_mutex_t mtx_dbreg; /* Mutex for thread protection. */
DB_ENTRY *dbentry; /* Recovery file-id mapping. */
#define DB_GROW_SIZE 64
- int32_t dbentry_cnt; /* Entries. Grows by DB_GROW_SIZE. */
+ int32_t dbentry_cnt; /* Entries. Grows by DB_GROW_SIZE. */
-/*
- * 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.
- */
+ /*
+ * These fields are only accessed when the region lock is held, so
+ * they do not have to be protected by the thread lock as well.
+ */
u_int32_t lfname; /* Log file "name". */
DB_FH *lfhp; /* Log file handle. */
+ time_t lf_timestamp; /* Log file timestamp. */
u_int8_t *bufp; /* Region buffer. */
-/* These fields are not protected. */
+ /* These fields are not thread protected. */
DB_ENV *dbenv; /* Reference to error information. */
REGINFO reginfo; /* Region information. */
@@ -123,6 +134,21 @@ struct __hdr {
};
/*
+ * LOG_HDR_SUM -- XOR in prev and len
+ * This helps avoids the race misreading the log while it
+ * it is being updated.
+ */
+#define LOG_HDR_SUM(crypto, hdr, sum) do { \
+ if (crypto) { \
+ ((u_int32_t *)sum)[0] ^= ((HDR *)hdr)->prev; \
+ ((u_int32_t *)sum)[1] ^= ((HDR *)hdr)->len; \
+ } else { \
+ ((u_int32_t *)sum)[0] ^= \
+ ((HDR *)hdr)->prev ^ ((HDR *)hdr)->len; \
+ } \
+} while (0)
+
+/*
* We use HDR internally, and then when we write out, we write out
* prev, len, and then a 4-byte checksum if normal operation or
* a crypto-checksum and IV and original size if running in crypto
@@ -138,24 +164,28 @@ struct __log_persist {
u_int32_t version; /* DB_LOGVERSION */
u_int32_t log_size; /* Log file size. */
- u_int32_t mode; /* Log file mode. */
+ u_int32_t notused; /* Historically the log file mode. */
};
+/* Macros to lock/unlock the log region as a whole. */
+#define LOG_SYSTEM_LOCK(dbenv) \
+ MUTEX_LOCK(dbenv, ((LOG *) \
+ (dbenv)->lg_handle->reginfo.primary)->mtx_region)
+#define LOG_SYSTEM_UNLOCK(dbenv) \
+ MUTEX_UNLOCK(dbenv, ((LOG *) \
+ (dbenv)->lg_handle->reginfo.primary)->mtx_region)
+
/*
* LOG --
* Shared log region. One of these is allocated in shared memory,
* and describes the log.
*/
struct __log {
- /*
- * Due to alignment constraints on some architectures (e.g. HP-UX),
- * DB_MUTEXes must be the first element of shalloced structures,
- * and as a corollary there can be only one per structure. Thus,
- * flush_mutex_off points to a mutex in a separately-allocated chunk.
- */
- DB_MUTEX fq_mutex; /* Mutex guarding file name list. */
+ db_mutex_t mtx_region; /* Region mutex. */
- LOGP persist; /* Persistent information. */
+ db_mutex_t mtx_filelist; /* Mutex guarding file name list. */
+
+ LOGP persist; /* Persistent information. */
SH_TAILQ_HEAD(__fq1) fq; /* List of file names. */
int32_t fid_max; /* Max fid allocated. */
@@ -185,28 +215,34 @@ struct __log {
file. */
/*
- * Due to alignment constraints on some architectures (e.g. HP-UX),
- * DB_MUTEXes must be the first element of shalloced structures,
- * and as a corollary there can be only one per structure. Thus,
- * flush_mutex_off points to a mutex in a separately-allocated chunk.
- *
* The s_lsn LSN is the last LSN that we know is on disk, not just
* written, but synced. This field is protected by the flush mutex
* rather than by the region mutex.
*/
- int in_flush; /* Log flush in progress. */
- roff_t flush_mutex_off; /* Mutex guarding flushing. */
- DB_LSN s_lsn; /* LSN of the last sync. */
+ db_mutex_t mtx_flush; /* Mutex guarding flushing. */
+ int in_flush; /* Log flush in progress. */
+ DB_LSN s_lsn; /* LSN of the last sync. */
DB_LOG_STAT stat; /* Log statistics. */
/*
- * !!! - NOTE that the next 7 fields, waiting_lsn, verify_lsn,
- * max_wait_lsn, maxperm_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 db_rep->db_mutexp
- * before acquiring the log region lock.
+ * This timestamp is updated anytime someone unlinks log
+ * files. This can happen when calling __log_vtruncate
+ * or replication internal init when it unlinks log files.
+ *
+ * The timestamp is used so that other processes that might
+ * have file handles to log files know to close/reopen them
+ * so they're not potentially writing to now-removed files.
+ */
+ time_t timestamp; /* Log trunc timestamp. */
+
+ /*
+ * !!!
+ * NOTE: the next 11 fields, waiting_lsn, verify_lsn, max_wait_lsn,
+ * maxperm_lsn, wait_recs, rcvd_recs, ready_lsn and bulk_* are NOT
+ * protected by the log region lock. They are protected by
+ * REP->mtx_clientdb. If you need access to both, you must acquire
+ * REP->mtx_clientdb 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
@@ -235,6 +271,16 @@ struct __log {
* header), rather than to 0.
*/
DB_LSN ready_lsn;
+ /*
+ * The bulk_buf is used by replication for bulk transfer. While this
+ * is protected by REP->mtx_clientdb, this doesn't contend with the
+ * above fields because the above are used by clients and the bulk
+ * fields below are used by a master.
+ */
+ roff_t bulk_buf; /* Bulk transfer buffer in region. */
+ uintptr_t bulk_off; /* Current offset into bulk buffer. */
+ u_int32_t bulk_len; /* Length of buffer. */
+ u_int32_t bulk_flags; /* Bulk buffer flags. */
/*
* During initialization, the log system walks forward through the
@@ -253,6 +299,8 @@ struct __log {
u_int32_t log_size; /* Log file's size. */
u_int32_t log_nsize; /* Next log file's size. */
+ int filemode; /* Log file permissions mode. */
+
/*
* DB_LOG_AUTOREMOVE and DB_LOG_INMEMORY: not protected by a mutex,
* all we care about is if they're zero or non-zero.
@@ -272,12 +320,6 @@ struct __log {
*/
SH_TAILQ_HEAD(__logfile) logfiles;
SH_TAILQ_HEAD(__free_logfile) free_logfiles;
-
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-#define LG_MAINT_SIZE (sizeof(roff_t) * DB_MAX_HANDLES)
-
- roff_t maint_off; /* offset of region maintenance info */
-#endif
};
/*
@@ -285,7 +327,7 @@ struct __log {
* One of these is allocated for each transaction waiting to commit.
*/
struct __db_commit {
- DB_MUTEX mutex; /* Mutex for txn to wait on. */
+ db_mutex_t mtx_txnwait; /* Mutex for txn to wait on. */
DB_LSN lsn; /* LSN of commit record. */
SH_TAILQ_ENTRY links; /* Either on free or waiting list. */
@@ -309,16 +351,18 @@ struct __db_commit {
*/
#ifdef HAVE_FTRUNCATE
-#define CHECK_LSN(redo, cmp, lsn, prev) \
+#define CHECK_LSN(e, redo, cmp, lsn, prev) \
if (DB_REDO(redo) && (cmp) < 0 && \
- !IS_NOT_LOGGED_LSN(*(lsn)) && !IS_ZERO_LSN(*(lsn))) { \
- ret = __db_check_lsn(dbenv, lsn, prev); \
+ ((!IS_NOT_LOGGED_LSN(*(lsn)) && !IS_ZERO_LSN(*(lsn))) || \
+ IS_REP_CLIENT(e))) { \
+ ret = __db_check_lsn(e, lsn, prev); \
goto out; \
}
#else
-#define CHECK_LSN(redo, cmp, lsn, prev) \
- if (DB_REDO(redo) && (cmp) < 0 && !IS_NOT_LOGGED_LSN(*(lsn))) { \
- ret = __db_check_lsn(dbenv, lsn, prev); \
+#define CHECK_LSN(e, redo, cmp, lsn, prev) \
+ if (DB_REDO(redo) && (cmp) < 0 && \
+ (!IS_NOT_LOGGED_LSN(*(lsn)) || IS_REP_CLIENT(e))) { \
+ ret = __db_check_lsn(e, lsn, prev); \
goto out; \
}
#endif
@@ -341,17 +385,19 @@ struct __db_filestart {
/*
* Internal macro to set pointer to the begin_lsn for generated
* logging routines. If begin_lsn is already set then do nothing.
+ * Return a pointer to the last lsn too.
*/
-#undef DB_SET_BEGIN_LSNP
-#define DB_SET_BEGIN_LSNP(txn, rlsnp) do { \
+#undef DB_SET_TXN_LSNP
+#define DB_SET_TXN_LSNP(txn, blsnp, llsnp) do { \
DB_LSN *__lsnp; \
TXN_DETAIL *__td; \
- __td = R_ADDR(&(txn)->mgrp->reginfo, (txn)->off); \
+ __td = (txn)->td; \
+ *(llsnp) = &__td->last_lsn; \
while (__td->parent != INVALID_ROFF) \
__td = R_ADDR(&(txn)->mgrp->reginfo, __td->parent); \
__lsnp = &__td->begin_lsn; \
if (IS_ZERO_LSN(*__lsnp)) \
- *(rlsnp) = __lsnp; \
+ *(blsnp) = __lsnp; \
} while (0)
/*
@@ -373,7 +419,11 @@ typedef enum {
DB_LV_OLD_UNREADABLE
} logfile_validity;
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/dbreg_auto.h"
#include "dbinc_auto/dbreg_ext.h"
#include "dbinc_auto/log_ext.h"
-#endif /* !_LOG_H_ */
+#endif /* !_DB_LOG_H_ */
diff --git a/db/dbinc/mp.h b/db/dbinc/mp.h
index 871bd6df9..7c4bed813 100644
--- a/db/dbinc/mp.h
+++ b/db/dbinc/mp.h
@@ -1,16 +1,22 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp.h,v 11.61 2004/09/17 22:00:27 mjc Exp $
+ * $Id: mp.h,v 12.23 2006/09/07 15:11:26 mjc Exp $
*/
#ifndef _DB_MP_H_
#define _DB_MP_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
struct __bh; typedef struct __bh BH;
+struct __bh_frozen; typedef struct __bh_frozen_p BH_FROZEN_PAGE;
+struct __bh_frozen_a; typedef struct __bh_frozen_a BH_FROZEN_ALLOC;
struct __db_mpool_hash; typedef struct __db_mpool_hash DB_MPOOL_HASH;
struct __db_mpreg; typedef struct __db_mpreg DB_MPREG;
struct __mpool; typedef struct __mpool MPOOL;
@@ -42,9 +48,14 @@ typedef enum {
*/
struct __db_mpool {
/* These fields need to be protected for multi-threaded support. */
- DB_MUTEX *mutexp; /* Structure thread lock. */
+ db_mutex_t mutex; /* Thread mutex. */
- /* List of pgin/pgout routines. */
+ /*
+ * DB_MPREG structure for the DB pgin/pgout routines.
+ *
+ * Linked list of application-specified pgin/pgout routines.
+ */
+ DB_MPREG *pg_inout;
LIST_HEAD(__db_mpregh, __db_mpreg) dbregq;
/* List of DB_MPOOLFILE's. */
@@ -85,7 +96,8 @@ struct __db_mpreg {
* more frequent than a random data page.
*/
#define NCACHE(mp, mf_offset, pgno) \
- (((pgno) ^ ((u_int32_t)(mf_offset) >> 3)) % ((MPOOL *)mp)->nreg)
+ (((MPOOL *)mp)->nreg == 1 ? 0 : \
+ (((pgno) ^ ((u_int32_t)(mf_offset) >> 3)) % ((MPOOL *)mp)->nreg))
/*
* NBUCKET --
@@ -103,6 +115,34 @@ struct __db_mpreg {
(((pgno) ^ ((mf_offset) << 9)) % (mc)->htab_buckets)
/*
+ * File hashing --
+ * We hash each file to hash bucket based on its fileid
+ * or, in the case of in memory files, its name.
+ */
+
+/* Number of file hash buckets, a small prime number */
+#define MPOOL_FILE_BUCKETS 17
+
+#define FHASH(id, len) __ham_func5(NULL, id, (u_int32_t)(len))
+
+#define FNBUCKET(id, len) \
+ (FHASH(id, len) % MPOOL_FILE_BUCKETS)
+
+/* Macros to lock/unlock the mpool region as a whole. */
+#define MPOOL_SYSTEM_LOCK(dbenv) \
+ MUTEX_LOCK(dbenv, ((MPOOL *) \
+ (dbenv)->mp_handle->reginfo[0].primary)->mtx_region)
+#define MPOOL_SYSTEM_UNLOCK(dbenv) \
+ MUTEX_UNLOCK(dbenv, ((MPOOL *) \
+ (dbenv)->mp_handle->reginfo[0].primary)->mtx_region)
+
+/* Macros to lock/unlock a specific mpool region. */
+#define MPOOL_REGION_LOCK(dbenv, infop) \
+ MUTEX_LOCK(dbenv, ((MPOOL *)(infop)->primary)->mtx_region)
+#define MPOOL_REGION_UNLOCK(dbenv, infop) \
+ MUTEX_UNLOCK(dbenv, ((MPOOL *)(infop)->primary)->mtx_region)
+
+/*
* MPOOL --
* Shared memory pool region.
*/
@@ -117,6 +157,7 @@ struct __mpool {
* the first of these pieces/files describes the entire pool, the
* second only describe a piece of the cache.
*/
+ db_mutex_t mtx_region; /* Region mutex. */
/*
* The lsn field and list of underlying MPOOLFILEs are thread protected
@@ -124,8 +165,6 @@ struct __mpool {
*/
DB_LSN lsn; /* Maximum checkpoint LSN. */
- SH_TAILQ_HEAD(__mpfq) mpfq; /* List of MPOOLFILEs. */
-
/* Configuration information: protected by the region lock. */
size_t mp_mmapsize; /* Maximum file size for mmap. */
int mp_maxopenfd; /* Maximum open file descriptors. */
@@ -140,10 +179,6 @@ struct __mpool {
u_int32_t nreg; /* Number of underlying REGIONS. */
roff_t regids; /* Array of underlying REGION Ids. */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- roff_t maint_off; /* Maintenance information offset */
-#endif
-
/*
* The following structure fields only describe the per-cache portion
* of the region.
@@ -157,7 +192,9 @@ struct __mpool {
u_int32_t 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 */
+ u_int32_t lru_count; /* Counter for buffer LRU */
+
+ roff_t ftab; /* Hash table of files. */
/*
* The stat fields are generally not thread protected, and cannot be
@@ -173,26 +210,32 @@ struct __mpool {
* if it changes.
*/
u_int32_t put_counter; /* Count of page put calls. */
+
+ /* Free frozen buffer headers, protected by the region lock. */
+ SH_TAILQ_HEAD(__free_frozen) free_frozen;
+
+ /* Allocated blocks of frozen buffer headers. */
+ SH_TAILQ_HEAD(__alloc_frozen) alloc_frozen;
};
struct __db_mpool_hash {
- DB_MUTEX hash_mutex; /* Per-bucket mutex. */
+ db_mutex_t mtx_hash; /* Per-bucket mutex. */
+ db_mutex_t mtx_io; /* Buffer I/O mutex. */
DB_HASHTAB hash_bucket; /* Head of bucket. */
u_int32_t hash_page_dirty;/* Count of dirty pages. */
u_int32_t hash_priority; /* Minimum priority of bucket buffer. */
-#ifdef HPUX_MUTEX_PAD
- /*
- * !!!
- * We allocate the mpool hash buckets as an array, which means that
- * they are not individually aligned. This fails on one platform:
- * HPUX 10.20, where mutexes require 16 byte alignment. This is a
- * grievous hack for that single platform.
- */
- u_int8_t pad[HPUX_MUTEX_PAD];
-#endif
+ u_int32_t hash_io_wait; /* Count of I/O waits. */
+ u_int32_t hash_frozen; /* Count of frozen buffers. */
+ u_int32_t hash_thawed; /* Count of thawed buffers. */
+ u_int32_t hash_frozen_freed;/* Count of freed frozen buffers. */
+
+ DB_LSN old_reader; /* Oldest snapshot reader (cached). */
+
+#define IO_WAITER 0x001 /* Thread is waiting on page. */
+ u_int32_t flags;
};
/*
@@ -218,14 +261,33 @@ struct __db_mpool_hash {
* Shared DB_MPOOLFILE information.
*/
struct __mpoolfile {
- DB_MUTEX mutex;
+ db_mutex_t mutex; /* MPOOLFILE mutex. */
/* Protected by MPOOLFILE mutex. */
u_int32_t mpf_cnt; /* Ref count: DB_MPOOLFILEs. */
u_int32_t block_cnt; /* Ref count: blocks in cache. */
+ db_pgno_t last_pgno; /* Last page in the file. */
+ db_pgno_t last_flushed_pgno; /* Last page flushed to disk. */
+ db_pgno_t orig_last_pgno; /* Original last page in the file. */
+ db_pgno_t maxpgno; /* Maximum page number. */
roff_t path_off; /* File name location. */
+ /* Protected by hash bucket mutex. */
+ SH_TAILQ_ENTRY q; /* List of MPOOLFILEs */
+
+ /*
+ * The following are used for file compaction processing.
+ * They are only used when a thread is in the process
+ * of trying to move free pages to the end of the file.
+ * Other threads may look here when freeing a page.
+ * Protected by a lock on the metapage.
+ */
+ u_int32_t free_ref; /* Refcount to freelist. */
+ u_int32_t free_cnt; /* Count of free pages. */
+ size_t free_size; /* Allocated size of free list. */
+ roff_t free_list; /* Offset to free list. */
+
/*
* 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
@@ -233,11 +295,7 @@ struct __mpoolfile {
*/
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. */
+ u_int32_t bucket; /* hash bucket for this file. */
/*
* None of the following fields are thread protected.
@@ -276,6 +334,7 @@ struct __mpoolfile {
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. */
+ int32_t multiversion; /* Number of DB_MULTIVERSION handles. */
/*
* We do not protect the statistics in "stat" because of the cost of
@@ -316,31 +375,38 @@ struct __mpoolfile {
* Flags to __memp_bh_free.
*/
#define BH_FREE_FREEMEM 0x01
-#define BH_FREE_UNLOCKED 0x02
+#define BH_FREE_REUSE 0x02
+#define BH_FREE_UNLOCKED 0x04
/*
* BH --
* Buffer header.
*/
struct __bh {
- DB_MUTEX mutex; /* Buffer thread/process lock. */
-
u_int16_t ref; /* Reference count. */
u_int16_t ref_sync; /* Sync wait-for reference count. */
#define BH_CALLPGIN 0x001 /* Convert the page before use. */
-#define BH_DIRTY 0x002 /* Page was modified. */
-#define BH_DIRTY_CREATE 0x004 /* Page created, must be written. */
+#define BH_DIRTY 0x002 /* Page is modified. */
+#define BH_DIRTY_CREATE 0x004 /* Page is modified. */
#define BH_DISCARD 0x008 /* Page is useless. */
-#define BH_LOCKED 0x010 /* Page is locked (I/O in progress). */
-#define BH_TRASH 0x020 /* Page is garbage. */
+#define BH_FREED 0x010 /* Page was freed. */
+#define BH_FROZEN 0x020 /* Frozen buffer: allocate & re-read. */
+#define BH_LOCKED 0x040 /* Page is locked (I/O in progress). */
+#define BH_TRASH 0x080 /* Page is garbage. */
u_int16_t flags;
u_int32_t priority; /* LRU priority. */
SH_TAILQ_ENTRY hq; /* MPOOL hash bucket queue. */
- db_pgno_t pgno; /* Underlying MPOOLFILE page number. */
- roff_t mf_offset; /* Associated MPOOLFILE offset. */
+ db_pgno_t pgno; /* Underlying MPOOLFILE page number. */
+ roff_t mf_offset; /* Associated MPOOLFILE offset. */
+
+ roff_t td_off; /* MVCC: creating TXN_DETAIL offset. */
+ SH_CHAIN_ENTRY vc; /* MVCC: version chain. */
+#ifdef DIAG_MVCC
+ u_int16_t align_off; /* Alignment offset for diagnostics.*/
+#endif
/*
* !!!
@@ -352,5 +418,117 @@ struct __bh {
u_int8_t buf[1]; /* Variable length data. */
};
+/*
+ * BH_FROZEN_PAGE --
+ * Data used to find a frozen buffer header.
+ */
+struct __bh_frozen_p {
+ BH header;
+ db_pgno_t spgno; /* Page number in freezer file. */
+};
+
+/*
+ * BH_FROZEN_ALLOC --
+ * Frozen buffer headers are allocated a page at a time in general. This
+ * structure is allocated at the beginning of the page so that the
+ * allocation chunks can be tracked and freed (for private environments).
+ */
+struct __bh_frozen_a {
+ SH_TAILQ_ENTRY links;
+};
+
+#define MULTIVERSION(dbp) ((dbp)->mpf->mfp->multiversion)
+#define IS_DIRTY(p) \
+ F_ISSET((BH *)((u_int8_t *)(p) - SSZA(BH, buf)), BH_DIRTY)
+
+#define BH_OWNER(dbenv, bhp) \
+ ((TXN_DETAIL *)R_ADDR(&dbenv->tx_handle->reginfo, bhp->td_off))
+
+#define BH_OWNED_BY(dbenv, bhp, txn) ((txn) != NULL && \
+ (bhp)->td_off != INVALID_ROFF && \
+ (txn)->td == BH_OWNER(dbenv, bhp))
+
+#define BH_PRIORITY(bhp) \
+ (SH_CHAIN_SINGLETON(bhp, vc) ? (bhp)->priority : \
+ __memp_bh_priority(bhp))
+
+#define VISIBLE_LSN(dbenv, bhp) \
+ (&BH_OWNER(dbenv, bhp)->visible_lsn)
+
+#define BH_OBSOLETE(bhp, old_lsn) ((SH_CHAIN_HASNEXT(bhp, vc) ? \
+ LOG_COMPARE(&(old_lsn), VISIBLE_LSN(dbenv, \
+ SH_CHAIN_NEXTP(bhp, vc, __bh))) : \
+ (bhp->td_off == INVALID_ROFF ? 1 : \
+ LOG_COMPARE(&(old_lsn), VISIBLE_LSN(dbenv, bhp)))) > 0)
+
+#define MVCC_SKIP_CURADJ(dbc, pgno) \
+ (dbc->txn != NULL && F_ISSET(dbc->txn, TXN_SNAPSHOT) && \
+ dbc->txn->td != NULL && __memp_skip_curadj(dbc, pgno))
+
+#if defined(DIAG_MVCC) && defined(HAVE_MPROTECT)
+#define VM_PAGESIZE 4096
+#define MVCC_BHSIZE(mfp, sz) do { \
+ sz += VM_PAGESIZE + sizeof(BH); \
+ if (mfp->stat.st_pagesize < VM_PAGESIZE) \
+ sz += VM_PAGESIZE - mfp->stat.st_pagesize; \
+} while (0)
+
+#define MVCC_BHALIGN(mfp, p) do { \
+ if (mfp != NULL) { \
+ BH *__bhp; \
+ void *__orig = (p); \
+ p = ALIGNP_INC(p, VM_PAGESIZE); \
+ if ((u_int8_t *)p < (u_int8_t *)__orig + sizeof(BH)) \
+ p = (u_int8_t *)p + VM_PAGESIZE; \
+ __bhp = (BH *)((u_int8_t *)p - SSZA(BH, buf)); \
+ DB_ASSERT(dbenv, \
+ ((uintptr_t)__bhp->buf & (VM_PAGESIZE - 1)) == 0); \
+ DB_ASSERT(dbenv, \
+ (u_int8_t *)__bhp >= (u_int8_t *)__orig); \
+ DB_ASSERT(dbenv, (u_int8_t *)p + mfp->stat.st_pagesize <\
+ (u_int8_t *)__orig + len); \
+ __bhp->align_off = \
+ (u_int16_t)((u_int8_t *)__bhp - (u_int8_t *)__orig);\
+ p = __bhp; \
+ } \
+} while (0)
+
+#define MVCC_BHUNALIGN(mfp, p) do { \
+ if ((mfp) != NULL) { \
+ BH *bhp = (BH *)(p); \
+ (p) = ((u_int8_t *)bhp - bhp->align_off); \
+ } \
+} while (0)
+
+#ifdef linux
+#define MVCC_MPROTECT(buf, sz, mode) do { \
+ int __ret = mprotect((buf), (sz), (mode)); \
+ DB_ASSERT(dbenv, __ret == 0); \
+} while (0)
+#else
+#define MVCC_MPROTECT(buf, sz, mode) do { \
+ if (!F_ISSET(dbenv, DB_ENV_PRIVATE | DB_ENV_SYSTEM_MEM)) { \
+ int __ret = mprotect((buf), (sz), (mode)); \
+ DB_ASSERT(dbenv, __ret == 0); \
+ } \
+} while (0)
+#endif /* linux */
+
+#else /* defined(DIAG_MVCC) && defined(HAVE_MPROTECT) */
+#define MVCC_BHSIZE(mfp, sz) do {} while (0)
+#define MVCC_BHALIGN(mfp, p) do {} while (0)
+#define MVCC_BHUNALIGN(mfp, p) do {} while (0)
+#define MVCC_MPROTECT(buf, size, mode) do {} while (0)
+#endif
+
+/*
+ * Flags to __memp_ftruncate.
+ */
+#define MP_TRUNC_RECOVER 0x01
+
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/mp_ext.h"
#endif /* !_DB_MP_H_ */
diff --git a/db/dbinc/mutex.h b/db/dbinc/mutex.h
index 056d34bab..3adf150a0 100644
--- a/db/dbinc/mutex.h
+++ b/db/dbinc/mutex.h
@@ -1,296 +1,118 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mutex.h,v 11.100 2004/10/05 14:41:12 mjc Exp $
+ * $Id: mutex.h,v 12.20 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_MUTEX_H_
#define _DB_MUTEX_H_
-/*
- * Some of the Berkeley DB ports require single-threading at various
- * places in the code. In those cases, these #defines will be set.
- */
-#define DB_BEGIN_SINGLE_THREAD
-#define DB_END_SINGLE_THREAD
-
-/*********************************************************************
- * POSIX.1 pthreads interface.
- *********************************************************************/
-#ifdef HAVE_MUTEX_PTHREADS
-#include <pthread.h>
-
-#define MUTEX_FIELDS \
- pthread_mutex_t mutex; /* Mutex. */ \
- pthread_cond_t cond; /* Condition variable. */
-#endif
-
-/*********************************************************************
- * Solaris lwp threads interface.
- *
- * !!!
- * We use LWP mutexes on Solaris instead of UI or POSIX mutexes (both of
- * which are available), for two reasons. First, the Solaris C library
- * includes versions of the both UI and POSIX thread mutex interfaces, but
- * they are broken in that they don't support inter-process locking, and
- * there's no way to detect it, e.g., calls to configure the mutexes for
- * inter-process locking succeed without error. So, we use LWP mutexes so
- * that we don't fail in fairly undetectable ways because the application
- * wasn't linked with the appropriate threads library. Second, there were
- * bugs in SunOS 5.7 (Solaris 7) where if an application loaded the C library
- * before loading the libthread/libpthread threads libraries (e.g., by using
- * dlopen to load the DB library), the pwrite64 interface would be translated
- * into a call to pwrite and DB would drop core.
- *********************************************************************/
-#ifdef HAVE_MUTEX_SOLARIS_LWP
-/*
- * XXX
- * Don't change <synch.h> to <sys/lwp.h> -- although lwp.h is listed in the
- * Solaris manual page as the correct include to use, it causes the Solaris
- * compiler on SunOS 2.6 to fail.
- */
-#include <synch.h>
-
-#define MUTEX_FIELDS \
- lwp_mutex_t mutex; /* Mutex. */ \
- lwp_cond_t cond; /* Condition variable. */
-#endif
-
-/*********************************************************************
- * Solaris/Unixware threads interface.
- *********************************************************************/
-#ifdef HAVE_MUTEX_UI_THREADS
-#include <thread.h>
-#include <synch.h>
-
-#define MUTEX_FIELDS \
- mutex_t mutex; /* Mutex. */ \
- cond_t cond; /* Condition variable. */
-#endif
-
-/*********************************************************************
- * AIX C library functions.
- *********************************************************************/
-#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
-#define MUTEX_SET(x) (!_check_lock(x, 0, 1))
-#define MUTEX_UNSET(x) _clear_lock(x, 0)
-#endif
-#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).
- *
- * !!!
- * Check for HPPA as a special case, because it requires unusual alignment,
- * and doesn't support semaphores in malloc(3) or shmget(2) memory.
- *
- * !!!
- * Do not remove the MSEM_IF_NOWAIT flag. The problem is that if a single
- * process makes two msem_lock() calls in a row, the second one returns an
- * error. We depend on the fact that we can lock against ourselves in the
- * locking subsystem, where we set up a mutex so that we can block ourselves.
- * Tested on OSF1 v4.0.
- *********************************************************************/
-#ifdef HAVE_MUTEX_HPPA_MSEM_INIT
-#define MUTEX_NO_MALLOC_LOCKS
-#define MUTEX_NO_SHMGET_LOCKS
-
-#ifndef MUTEX_ALIGN
-#define MUTEX_ALIGN 16
-#define HPUX_MUTEX_PAD 8
-#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
-#define MUTEX_ALIGN sizeof(int)
-#endif
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_INIT(x) (msem_init(x, MSEM_UNLOCKED) <= (msemaphore *)0)
-#define MUTEX_SET(x) (!msem_lock(x, MSEM_IF_NOWAIT))
-#define MUTEX_UNSET(x) msem_unlock(x, 0)
-#endif
-#endif
-
-/*********************************************************************
- * Plan 9 library functions.
- *********************************************************************/
-#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)
-#define MUTEX_UNSET(x) unlock(x)
-#endif
-
-/*********************************************************************
- * Reliant UNIX C library functions.
- *********************************************************************/
-#ifdef HAVE_MUTEX_RELIANTUNIX_INITSPIN
-#include <ulocks.h>
-typedef spinlock_t tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_INIT(x) (initspin(x, 1), 0)
-#define MUTEX_SET(x) (cspinlock(x) == 0)
-#define MUTEX_UNSET(x) spinunlock(x)
-#endif
-#endif
-
-/*********************************************************************
- * General C library functions (POSIX 1003.1 sema_XXX).
- *
- * !!!
- * Never selected by autoconfig in this release (semaphore calls are known
- * to not work in Solaris 5.5).
- *********************************************************************/
-#ifdef HAVE_MUTEX_SEMA_INIT
-#include <synch.h>
-typedef sema_t tsl_t;
-
-#ifndef MUTEX_ALIGN
-#define MUTEX_ALIGN sizeof(int)
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*
+ * Mutexes are represented by unsigned, 32-bit integral values. As the
+ * OOB value is 0, mutexes can be initialized by zero-ing out the memory
+ * in which they reside.
+ */
+#define MUTEX_INVALID 0
+
+/*
+ * We track mutex allocations by ID.
+ */
+#define MTX_APPLICATION 1
+#define MTX_DB_HANDLE 2
+#define MTX_ENV_DBLIST 3
+#define MTX_ENV_REGION 4
+#define MTX_LOCK_REGION 5
+#define MTX_LOGICAL_LOCK 6
+#define MTX_LOG_FILENAME 7
+#define MTX_LOG_FLUSH 8
+#define MTX_LOG_HANDLE 9
+#define MTX_LOG_REGION 10
+#define MTX_MPOOLFILE_HANDLE 11
+#define MTX_MPOOL_FH 12
+#define MTX_MPOOL_FILE_BUCKET 13
+#define MTX_MPOOL_HANDLE 14
+#define MTX_MPOOL_HASH_BUCKET 15
+#define MTX_MPOOL_IO 16
+#define MTX_MPOOL_REGION 17
+#define MTX_MUTEX_REGION 18
+#define MTX_MUTEX_TEST 19
+#define MTX_REP_DATABASE 20
+#define MTX_REP_REGION 21
+#define MTX_SEQUENCE 22
+#define MTX_TWISTER 23
+#define MTX_TXN_ACTIVE 24
+#define MTX_TXN_CHKPT 25
+#define MTX_TXN_COMMIT 26
+#define MTX_TXN_MVCC 27
+#define MTX_TXN_REGION 28
+#define MTX_MAX_ENTRY 28
+
+/* Redirect mutex calls to the correct functions. */
+#if defined(HAVE_MUTEX_PTHREADS) || \
+ defined(HAVE_MUTEX_SOLARIS_LWP) || \
+ defined(HAVE_MUTEX_UI_THREADS)
+#define __mutex_init(a, b, c) __db_pthread_mutex_init(a, b, c)
+#define __mutex_lock(a, b) __db_pthread_mutex_lock(a, b)
+#define __mutex_unlock(a, b) __db_pthread_mutex_unlock(a, b)
+#define __mutex_destroy(a, b) __db_pthread_mutex_destroy(a, b)
#endif
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_DESTROY(x) sema_destroy(x)
-#define MUTEX_INIT(x) (sema_init(x, 1, USYNC_PROCESS, NULL) != 0)
-#define MUTEX_SET(x) (sema_wait(x) == 0)
-#define MUTEX_UNSET(x) sema_post(x)
-#endif
+#if defined(HAVE_MUTEX_WIN32) || defined(HAVE_MUTEX_WIN32_GCC)
+#define __mutex_init(a, b, c) __db_win32_mutex_init(a, b, c)
+#define __mutex_lock(a, b) __db_win32_mutex_lock(a, b)
+#define __mutex_unlock(a, b) __db_win32_mutex_unlock(a, b)
+#define __mutex_destroy(a, b) __db_win32_mutex_destroy(a, b)
#endif
-/*********************************************************************
- * SGI C library functions.
- *********************************************************************/
-#ifdef HAVE_MUTEX_SGI_INIT_LOCK
-#include <abi_mutex.h>
-typedef abilock_t tsl_t;
-
-#ifndef MUTEX_ALIGN
-#define MUTEX_ALIGN sizeof(int)
+#if defined(HAVE_MUTEX_FCNTL)
+#define __mutex_init(a, b, c) __db_fcntl_mutex_init(a, b, c)
+#define __mutex_lock(a, b) __db_fcntl_mutex_lock(a, b)
+#define __mutex_unlock(a, b) __db_fcntl_mutex_unlock(a, b)
+#define __mutex_destroy(a, b) __db_fcntl_mutex_destroy(a, b)
#endif
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_INIT(x) (init_lock(x) != 0)
-#define MUTEX_SET(x) (!acquire_lock(x))
-#define MUTEX_UNSET(x) release_lock(x)
-#endif
+#ifndef __mutex_init /* Test-and-set is the default */
+#define __mutex_init(a, b, c) __db_tas_mutex_init(a, b, c)
+#define __mutex_lock(a, b) __db_tas_mutex_lock(a, b)
+#define __mutex_unlock(a, b) __db_tas_mutex_unlock(a, b)
+#define __mutex_destroy(a, b) __db_tas_mutex_destroy(a, b)
#endif
-/*********************************************************************
- * Solaris C library functions.
+/*
+ * Lock/unlock a mutex. If the mutex was never required, the thread of
+ * control can proceed without it.
*
- * !!!
- * These are undocumented functions, but they're the only ones that work
- * correctly as far as we know.
- *********************************************************************/
-#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
-#define MUTEX_SET(x) _lock_try(x)
-#define MUTEX_UNSET(x) _lock_clear(x)
-#endif
-#endif
-
-/*********************************************************************
- * VMS.
- *********************************************************************/
-#ifdef HAVE_MUTEX_VMS
-#include <sys/mman.h>;
-#include <builtins.h>
-typedef volatile unsigned char tsl_t;
-
-#ifndef MUTEX_ALIGN
-#define MUTEX_ALIGN sizeof(unsigned int)
-#endif
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#ifdef __ALPHA
-#define MUTEX_SET(tsl) (!__TESTBITSSI(tsl, 0))
-#else /* __VAX */
-#define MUTEX_SET(tsl) (!(int)_BBSSI(0, tsl))
-#endif
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
+ * We never fail to acquire or release a mutex without panicing. Simplify
+ * the macros to always return a panic value rather than saving the actual
+ * return value of the mutex routine.
+ */
+#define MUTEX_LOCK(dbenv, mutex) do { \
+ if ((mutex) != MUTEX_INVALID && \
+ __mutex_lock(dbenv, mutex) != 0) \
+ return (DB_RUNRECOVERY); \
+} while (0)
+#define MUTEX_UNLOCK(dbenv, mutex) do { \
+ if ((mutex) != MUTEX_INVALID && \
+ __mutex_unlock(dbenv, mutex) != 0) \
+ return (DB_RUNRECOVERY); \
+} while (0)
-/*********************************************************************
- * VxWorks
- * Use basic binary semaphores in VxWorks, as we currently do not need
- * any special features. We do need the ability to single-thread the
- * entire system, however, because VxWorks doesn't support the open(2)
- * flag O_EXCL, the mechanism we normally use to single thread access
- * when we're first looking for a DB environment.
- *********************************************************************/
+/*
+ * Berkeley DB ports may require single-threading at places in the code.
+ */
#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)
-#define MUTEX_UNSET(tsl) (semGive((*tsl)))
-#define MUTEX_INIT(tsl) \
- ((*(tsl) = semBCreate(SEM_Q_FIFO, SEM_FULL)) == NULL)
-#define MUTEX_DESTROY(tsl) semDelete(*tsl)
-#endif
-
/*
* Use the taskLock() mutex to eliminate a race where two tasks are
* trying to initialize the global lock at the same time.
*/
-#undef DB_BEGIN_SINGLE_THREAD
#define DB_BEGIN_SINGLE_THREAD do { \
if (DB_GLOBAL(db_global_init)) \
(void)semTake(DB_GLOBAL(db_global_lock), WAIT_FOREVER); \
@@ -309,673 +131,22 @@ typedef SEM_ID tsl_t;
taskUnlock(); \
} \
} while (DB_GLOBAL(db_global_init) == 0)
-#undef DB_END_SINGLE_THREAD
#define DB_END_SINGLE_THREAD (void)semGive(DB_GLOBAL(db_global_lock))
#endif
-/*********************************************************************
- * Win16
- *
- * Win16 spinlocks are simple because we cannot possibly be preempted.
- *
- * !!!
- * We should simplify this by always returning a no-need-to-lock lock
- * when we initialize the mutex.
- *********************************************************************/
-#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
-#define MUTEX_SET(tsl) (*(tsl) = 1)
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#endif
-#endif
-
-/*********************************************************************
- * Win32
- *********************************************************************/
-#if defined(HAVE_MUTEX_WIN32) || defined(HAVE_MUTEX_WIN32_GCC)
-#define MUTEX_FIELDS \
- LONG tas; \
- LONG nwaiters; \
- u_int32_t id; /* ID used for creating events */ \
-
-#if defined(LOAD_ACTUAL_MUTEX_CODE)
-#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
-#ifndef _WIN64
-#define MUTEX_PAUSE {__asm{_emit 0xf3}; __asm{_emit 0x90}}
-#endif
-#endif
-#ifdef HAVE_MUTEX_WIN32_GCC
-#define MUTEX_PAUSE asm volatile ("rep; nop" : : );
-#endif
-#endif
-#endif
-
-/*********************************************************************
- * 68K/gcc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_68K_GCC_ASSEMBLY
-typedef unsigned char tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_SET_TEST 1 /* gcc/68K: 0 is clear, 1 is set. */
-
-#define MUTEX_SET(tsl) ({ \
- register tsl_t *__l = (tsl); \
- int __r; \
- asm volatile("tas %1; \n \
- seq %0" \
- : "=dm" (__r), "=m" (*__l) \
- : "1" (*__l) \
- ); \
- __r & 1; \
-})
-
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * ALPHA/gcc assembly.
- *********************************************************************/
-#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.
- */
-static inline int
-MUTEX_SET(tsl_t *tsl) {
- register tsl_t *__l = tsl;
- register tsl_t __r;
- asm volatile(
- "1: ldl_l %0,%2\n"
- " blbs %0,2f\n"
- " or $31,1,%0\n"
- " stl_c %0,%1\n"
- " beq %0,3f\n"
- " mb\n"
- " br 3f\n"
- "2: xor %0,%0\n"
- "3:"
- : "=&r"(__r), "=m"(*__l) : "1"(*__l) : "memory");
- return __r;
-}
-
-/*
- * Unset mutex. Judging by Alpha Architecture Handbook, the mb instruction
- * might be necessary before unlocking
- */
-static inline int
-MUTEX_UNSET(tsl_t *tsl) {
- asm volatile(" mb\n");
- return *tsl = 0;
-}
-
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * 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) (__UNLOCK_LONG(tsl))
-
-#define MUTEX_INIT(tsl) (MUTEX_UNSET(tsl), 0)
-#endif
-#endif
-
-/*********************************************************************
- * ARM/gcc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_ARM_GCC_ASSEMBLY
-typedef unsigned char tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_SET_TEST 1 /* gcc/arm: 0 is clear, 1 is set. */
-
-#define MUTEX_SET(tsl) ({ \
- int __r; \
- asm volatile( \
- "swpb %0, %1, [%2]\n\t" \
- "eor %0, %0, #1\n\t" \
- : "=&r" (__r) \
- : "r" (1), "r" (tsl) \
- ); \
- __r & 1; \
-})
-
-#define MUTEX_UNSET(tsl) (*(volatile tsl_t *)(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * HPPA/gcc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_HPPA_GCC_ASSEMBLY
-typedef u_int32_t tsl_t;
-
-#ifndef MUTEX_ALIGN
-#define MUTEX_ALIGN 16
-#define HPUX_MUTEX_PAD 8
-#endif
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-/*
- * The PA-RISC has a "load and clear" instead of a "test and set" instruction.
- * The 32-bit word used by that instruction must be 16-byte aligned. We could
- * use the "aligned" attribute in GCC but that doesn't work for stack variables.
- */
-#define MUTEX_SET(tsl) ({ \
- register tsl_t *__l = (tsl); \
- int __r; \
- asm volatile("ldcws 0(%1),%0" : "=r" (__r) : "r" (__l)); \
- __r & 1; \
-})
-
-#define MUTEX_UNSET(tsl) (*(tsl) = -1)
-#define MUTEX_INIT(tsl) (MUTEX_UNSET(tsl), 0)
-#endif
-#endif
-
-/*********************************************************************
- * IA64/gcc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_IA64_GCC_ASSEMBLY
-typedef unsigned char tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_SET_TEST 1 /* gcc/ia64: 0 is clear, 1 is set. */
-
-#define MUTEX_SET(tsl) ({ \
- register tsl_t *__l = (tsl); \
- long __r; \
- asm volatile("xchg1 %0=%1,%3" : "=r"(__r), "=m"(*__l) : "1"(*__l), "r"(1));\
- __r ^ 1; \
-})
-
-/*
- * Store through a "volatile" pointer so we get a store with "release"
- * semantics.
- */
-#define MUTEX_UNSET(tsl) (*(volatile unsigned char *)(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * PowerPC/gcc assembly.
- *********************************************************************/
-#if defined(HAVE_MUTEX_PPC_GCC_ASSEMBLY)
-typedef u_int32_t tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
/*
- * The PowerPC does a sort of pseudo-atomic locking. You set up a
- * 'reservation' on a chunk of memory containing a mutex by loading the
- * mutex value with LWARX. If the mutex has an 'unlocked' (arbitrary)
- * value, you then try storing into it with STWCX. If no other process or
- * thread broke your 'reservation' by modifying the memory containing the
- * mutex, then the STCWX succeeds; otherwise it fails and you try to get
- * a reservation again.
- *
- * While mutexes are explicitly 4 bytes, a 'reservation' applies to an
- * entire cache line, normally 32 bytes, aligned naturally. If the mutex
- * lives near data that gets changed a lot, there's a chance that you'll
- * see more broken reservations than you might otherwise. The only
- * situation in which this might be a problem is if one processor is
- * beating on a variable in the same cache block as the mutex while another
- * processor tries to acquire the mutex. That's bad news regardless
- * because of the way it bashes caches, but if you can't guarantee that a
- * mutex will reside in a relatively quiescent cache line, you might
- * consider padding the mutex to force it to live in a cache line by
- * itself. No, you aren't guaranteed that cache lines are 32 bytes. Some
- * embedded processors use 16-byte cache lines, while some 64-bit
- * processors use 128-bit cache lines. But assuming a 32-byte cache line
- * won't get you into trouble for now.
- *
- * If mutex locking is a bottleneck, then you can speed it up by adding a
- * regular LWZ load before the LWARX load, so that you can test for the
- * common case of a locked mutex without wasting cycles making a reservation.
- *
- * '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.
+ * Single-threading defaults to a no-op.
*/
-#define MUTEX_SET_TEST 1 /* gcc/ppc: 0 is clear, 1 is set. */
-
-static inline int
-MUTEX_SET(int *tsl) {
- int __r;
- int __tmp = (int)tsl;
- asm volatile (
-"0: \n\t"
-" lwarx %0,0,%2 \n\t"
-" cmpwi %0,0 \n\t"
-" bne- 1f \n\t"
-" stwcx. %2,0,%2 \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)
- : "r" (__tmp)
- : "cr0", "memory");
- return (int)tsl;
-}
-
-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
-#endif
-
-/*********************************************************************
- * S/390 32-bit assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_S390_GCC_ASSEMBLY
-typedef int tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_SET_TEST 1 /* gcc/S390: 0 is clear, 1 is set. */
-
-static inline int
-MUTEX_SET(tsl_t *tsl) { \
- register tsl_t *__l = (tsl); \
- int __r; \
- asm volatile( \
- " la 1,%1\n" \
- " lhi 0,1\n" \
- " l %0,%1\n" \
- "0: cs %0,0,0(1)\n" \
- " jl 0b" \
- : "=&d" (__r), "+m" (*__l) \
- : : "0", "1", "cc"); \
- return !__r; \
-}
-
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * SCO/cc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY
-typedef unsigned char tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-/*
- * UnixWare has threads in libthread, but OpenServer doesn't (yet).
- */
-#define MUTEX_SET_TEST 1 /* cc/x86: 0 is clear, 1 is set. */
-
-#if defined(__USLC__)
-asm int
-_tsl_set(void *tsl)
-{
-%mem tsl
- movl tsl, %ecx
- movl $1, %eax
- lock
- xchgb (%ecx),%al
- xorl $1,%eax
-}
-#endif
-
-#define MUTEX_SET(tsl) _tsl_set(tsl)
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * Sparc/gcc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_SPARC_GCC_ASSEMBLY
-typedef unsigned char tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-/*
- *
- * The ldstub instruction takes the location specified by its first argument
- * (a register containing a memory address) and loads its contents into its
- * second argument (a register) and atomically sets the contents the location
- * specified by its first argument to a byte of 1s. (The value in the second
- * argument is never read, but only overwritten.)
- *
- * The stbar is needed for v8, and is implemented as membar #sync on v9,
- * so is functional there as well. For v7, stbar may generate an illegal
- * instruction and we have no way to tell what we're running on. Some
- * operating systems notice and skip this instruction in the fault handler.
- */
-#define MUTEX_SET_TEST 1 /* gcc/sparc: 0 is clear, 1 is set. */
-
-#define MUTEX_SET(tsl) ({ \
- register tsl_t *__l = (tsl); \
- register tsl_t __r; \
- __asm__ volatile \
- ("ldstub [%1],%0; stbar" \
- : "=r"( __r) : "r" (__l)); \
- !__r; \
-})
-
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
-#endif
-#endif
-
-/*********************************************************************
- * UTS/cc assembly.
- *********************************************************************/
-#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))
-#define MUTEX_UNSET(x) (*(x) = 0)
-#endif
-#endif
-
-/*********************************************************************
- * x86/gcc assembly.
- *********************************************************************/
-#ifdef HAVE_MUTEX_X86_GCC_ASSEMBLY
-typedef unsigned char tsl_t;
-
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#define MUTEX_SET_TEST 1 /* gcc/x86: 0 is clear, 1 is set. */
-
-#define MUTEX_SET(tsl) ({ \
- register tsl_t *__l = (tsl); \
- int __r; \
- asm volatile("movl $1,%%eax; lock; xchgb %1,%%al; xorl $1,%%eax"\
- : "=&a" (__r), "=m" (*__l) \
- : "1" (*__l) \
- ); \
- __r & 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."
- */
-#define MUTEX_PAUSE asm volatile ("rep; nop" : : );
-#endif
-#endif
-
-/*
- * Mutex alignment defaults to one byte.
- *
- * !!!
- * Various systems require different alignments for mutexes (the worst we've
- * seen so far is 16-bytes on some HP architectures). Malloc(3) is assumed
- * to return reasonable alignment, all other mutex users must ensure proper
- * alignment locally.
- */
-#ifndef MUTEX_ALIGN
-#define MUTEX_ALIGN 1
-#endif
-
-/*
- * Mutex destruction defaults to a no-op.
- */
-#ifdef LOAD_ACTUAL_MUTEX_CODE
-#ifndef MUTEX_DESTROY
-#define MUTEX_DESTROY(x)
-#endif
-#endif
-
-/*
- * !!!
- * The flag arguments for __db_mutex_setup (and the underlying initialization
- * 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.
- */
-#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 {
-#ifdef HAVE_MUTEX_THREADS
-#ifdef MUTEX_FIELDS
- MUTEX_FIELDS
-#else
- tsl_t tas; /* Test and set. */
-#endif
- u_int32_t locked; /* !0 if locked. */
-#else
- u_int32_t off; /* Byte offset to lock. */
- u_int32_t pid; /* Lock holder: 0 or process pid. */
+#ifndef DB_BEGIN_SINGLE_THREAD
+#define DB_BEGIN_SINGLE_THREAD
#endif
- u_int32_t mutex_set_wait; /* Granted after wait. */
- u_int32_t mutex_set_nowait; /* Granted without waiting. */
- u_int32_t mutex_set_spin; /* Granted without spinning. */
- u_int32_t mutex_set_spins; /* Total number of spins. */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- roff_t reg_off; /* Shared lock info offset. */
+#ifndef DB_END_SINGLE_THREAD
+#define DB_END_SINGLE_THREAD
#endif
- /*
- * 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 */
-};
-/* Macro to clear mutex statistics. */
-#define MUTEX_CLEAR(mp) { \
- (mp)->mutex_set_wait = (mp)->mutex_set_nowait = 0; \
+#if defined(__cplusplus)
}
-
-/* Redirect calls to the correct functions. */
-#ifdef HAVE_MUTEX_THREADS
-#if defined(HAVE_MUTEX_PTHREADS) || \
- defined(HAVE_MUTEX_SOLARIS_LWP) || \
- defined(HAVE_MUTEX_UI_THREADS)
-#define __db_mutex_init_int(a, b, c, d) __db_pthread_mutex_init(a, b, d)
-#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)
-#else
-#if 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)
-#define __db_mutex_destroy(a) __db_win32_mutex_destroy(a)
-#else
-#define __db_mutex_init_int(a, b, c, d) __db_tas_mutex_init(a, b, d)
-#define __db_mutex_lock(a, b) __db_tas_mutex_lock(a, b)
-#define __db_mutex_unlock(a, b) __db_tas_mutex_unlock(a, b)
-#define __db_mutex_destroy(a) __db_tas_mutex_destroy(a)
-#endif
#endif
-#else
-#define __db_mutex_init_int(a, b, c, d) __db_fcntl_mutex_init(a, b, c)
-#define __db_mutex_lock(a, b) __db_fcntl_mutex_lock(a, b)
-#define __db_mutex_unlock(a, b) __db_fcntl_mutex_unlock(a, b)
-#define __db_mutex_destroy(a) __db_fcntl_mutex_destroy(a)
-#endif
-
-/* Redirect system resource calls to correct functions */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-#define __db_maintinit(a, b, c) __db_shreg_maintinit(a, b, c)
-#define __db_shlocks_clear(a, b, c) __db_shreg_locks_clear(a, b, c)
-#define __db_shlocks_destroy(a, b) __db_shreg_locks_destroy(a, b)
-#define __db_mutex_init(a, b, c, d, e, f) \
- __db_shreg_mutex_init(a, b, c, d, e, f)
-#else
-#define __db_maintinit(a, b, c)
-#define __db_shlocks_clear(a, b, c)
-#define __db_shlocks_destroy(a, b)
-#define __db_mutex_init(a, b, c, d, e, f) __db_mutex_init_int(a, b, c, d)
-#endif
-
-/*
- * Lock/unlock a mutex. If the mutex was marked as uninteresting, the thread
- * of control can proceed without it.
- *
- * If the lock is for threads-only, then it was optionally not allocated and
- * file handles aren't necessary, as threaded applications aren't supported by
- * fcntl(2) locking.
- */
-#ifdef DIAGNOSTIC
- /*
- * XXX
- * We want to switch threads as often as possible. Yield every time
- * we get a mutex to ensure contention.
- */
-#define MUTEX_LOCK(dbenv, mp) \
- if (!F_ISSET((mp), MUTEX_IGNORE)) \
- DB_ASSERT(__db_mutex_lock(dbenv, mp) == 0); \
- if (F_ISSET(dbenv, DB_ENV_YIELDCPU)) \
- __os_yield(NULL, 1);
-#else
-#define MUTEX_LOCK(dbenv, mp) \
- if (!F_ISSET((mp), MUTEX_IGNORE)) \
- (void)__db_mutex_lock(dbenv, mp);
-#endif
-#define MUTEX_UNLOCK(dbenv, mp) \
- if (!F_ISSET((mp), MUTEX_IGNORE)) \
- (void)__db_mutex_unlock(dbenv, mp);
-#define MUTEX_THREAD_LOCK(dbenv, mp) \
- if (mp != NULL) \
- MUTEX_LOCK(dbenv, mp)
-#define MUTEX_THREAD_UNLOCK(dbenv, mp) \
- if (mp != NULL) \
- MUTEX_UNLOCK(dbenv, mp)
-/*
- * We use a single file descriptor for fcntl(2) locking, and (generally) the
- * object's offset in a shared region as the byte that we're locking. So,
- * there's a (remote) possibility that two objects might have the same offsets
- * such that the locks could conflict, resulting in deadlock. To avoid this
- * possibility, we offset the region offset by a small integer value, using a
- * different offset for each subsystem's locks. Since all region objects are
- * suitably aligned, the offset guarantees that we don't collide with another
- * region's objects.
- */
-#define DB_FCNTL_OFF_GEN 0 /* Everything else. */
-#define DB_FCNTL_OFF_LOCK 1 /* Lock subsystem offset. */
-#define DB_FCNTL_OFF_MPOOL 2 /* Mpool subsystem offset. */
-
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-/*
- * When the underlying mutexes require library (most likely heap) or system
- * resources, we have to clean up when we discard mutexes (for the library
- * resources) and both when discarding mutexes and after application failure
- * (for the mutexes requiring system resources). This violates the rule that
- * we never look at a shared region after application failure, but we've no
- * other choice. In those cases, the #define HAVE_MUTEX_SYSTEM_RESOURCES is
- * set.
- *
- * To support mutex release after application failure, allocate thread-handle
- * mutexes in shared memory instead of in the heap. The number of slots we
- * allocate for this purpose isn't configurable, but this tends to be an issue
- * only on embedded systems where we don't expect large server applications.
- */
-#define DB_MAX_HANDLES 100 /* Mutex slots for handles. */
-#endif
+#include "dbinc_auto/mutex_ext.h"
#endif /* !_DB_MUTEX_H_ */
diff --git a/db/dbinc/mutex_int.h b/db/dbinc/mutex_int.h
new file mode 100644
index 000000000..74bc813e2
--- /dev/null
+++ b/db/dbinc/mutex_int.h
@@ -0,0 +1,851 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mutex_int.h,v 12.22 2006/08/24 14:45:29 bostic Exp $
+ */
+
+#ifndef _DB_MUTEX_INT_H_
+#define _DB_MUTEX_INT_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*********************************************************************
+ * POSIX.1 pthreads interface.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_PTHREADS
+#include <pthread.h>
+
+#define MUTEX_FIELDS \
+ pthread_mutex_t mutex; /* Mutex. */ \
+ pthread_cond_t cond; /* Condition variable. */
+#endif
+
+#ifdef HAVE_MUTEX_UI_THREADS
+#include <thread.h>
+#endif
+
+/*********************************************************************
+ * Solaris lwp threads interface.
+ *
+ * !!!
+ * We use LWP mutexes on Solaris instead of UI or POSIX mutexes (both of
+ * which are available), for two reasons. First, the Solaris C library
+ * includes versions of the both UI and POSIX thread mutex interfaces, but
+ * they are broken in that they don't support inter-process locking, and
+ * there's no way to detect it, e.g., calls to configure the mutexes for
+ * inter-process locking succeed without error. So, we use LWP mutexes so
+ * that we don't fail in fairly undetectable ways because the application
+ * wasn't linked with the appropriate threads library. Second, there were
+ * bugs in SunOS 5.7 (Solaris 7) where if an application loaded the C library
+ * before loading the libthread/libpthread threads libraries (e.g., by using
+ * dlopen to load the DB library), the pwrite64 interface would be translated
+ * into a call to pwrite and DB would drop core.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_SOLARIS_LWP
+/*
+ * XXX
+ * Don't change <synch.h> to <sys/lwp.h> -- although lwp.h is listed in the
+ * Solaris manual page as the correct include to use, it causes the Solaris
+ * compiler on SunOS 2.6 to fail.
+ */
+#include <synch.h>
+
+#define MUTEX_FIELDS \
+ lwp_mutex_t mutex; /* Mutex. */ \
+ lwp_cond_t cond; /* Condition variable. */
+#endif
+
+/*********************************************************************
+ * Solaris/Unixware threads interface.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_UI_THREADS
+#include <thread.h>
+#include <synch.h>
+
+#define MUTEX_FIELDS \
+ mutex_t mutex; /* Mutex. */ \
+ cond_t cond; /* Condition variable. */
+#endif
+
+/*********************************************************************
+ * AIX C library functions.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_AIX_CHECK_LOCK
+#include <sys/atomic_op.h>
+typedef int tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) 0
+#define MUTEX_SET(x) (!_check_lock(x, 0, 1))
+#define MUTEX_UNSET(x) _clear_lock(x, 0)
+#endif
+#endif
+
+/*********************************************************************
+ * Apple/Darwin library functions.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY
+typedef u_int32_t tsl_t;
+
+#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).
+ *
+ * !!!
+ * Check for HPPA as a special case, because it requires unusual alignment,
+ * and doesn't support semaphores in malloc(3) or shmget(2) memory.
+ *
+ * !!!
+ * Do not remove the MSEM_IF_NOWAIT flag. The problem is that if a single
+ * process makes two msem_lock() calls in a row, the second one returns an
+ * error. We depend on the fact that we can lock against ourselves in the
+ * locking subsystem, where we set up a mutex so that we can block ourselves.
+ * Tested on OSF1 v4.0.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_HPPA_MSEM_INIT
+#define MUTEX_ALIGN 16
+#endif
+
+#if defined(HAVE_MUTEX_MSEM_INIT) || defined(HAVE_MUTEX_HPPA_MSEM_INIT)
+#include <sys/mman.h>
+typedef msemaphore tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) (msem_init(x, MSEM_UNLOCKED) <= (msemaphore *)0)
+#define MUTEX_SET(x) (!msem_lock(x, MSEM_IF_NOWAIT))
+#define MUTEX_UNSET(x) msem_unlock(x, 0)
+#endif
+#endif
+
+/*********************************************************************
+ * Plan 9 library functions.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_PLAN9
+typedef Lock tsl_t;
+
+#define MUTEX_INIT(x) (memset(x, 0, sizeof(Lock)), 0)
+#define MUTEX_SET(x) canlock(x)
+#define MUTEX_UNSET(x) unlock(x)
+#endif
+
+/*********************************************************************
+ * Reliant UNIX C library functions.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_RELIANTUNIX_INITSPIN
+#include <ulocks.h>
+typedef spinlock_t tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) (initspin(x, 1), 0)
+#define MUTEX_SET(x) (cspinlock(x) == 0)
+#define MUTEX_UNSET(x) spinunlock(x)
+#endif
+#endif
+
+/*********************************************************************
+ * General C library functions (POSIX 1003.1 sema_XXX).
+ *
+ * !!!
+ * Never selected by autoconfig in this release (semaphore calls are known
+ * to not work in Solaris 5.5).
+ *********************************************************************/
+#ifdef HAVE_MUTEX_SEMA_INIT
+#include <synch.h>
+typedef sema_t tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_DESTROY(x) sema_destroy(x)
+#define MUTEX_INIT(x) (sema_init(x, 1, USYNC_PROCESS, NULL) != 0)
+#define MUTEX_SET(x) (sema_wait(x) == 0)
+#define MUTEX_UNSET(x) sema_post(x)
+#endif
+#endif
+
+/*********************************************************************
+ * SGI C library functions.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_SGI_INIT_LOCK
+#include <abi_mutex.h>
+typedef abilock_t tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) (init_lock(x) != 0)
+#define MUTEX_SET(x) (!acquire_lock(x))
+#define MUTEX_UNSET(x) release_lock(x)
+#endif
+#endif
+
+/*********************************************************************
+ * Solaris C library functions.
+ *
+ * !!!
+ * These are undocumented functions, but they're the only ones that work
+ * correctly as far as we know.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_SOLARIS_LOCK_TRY
+#include <sys/machlock.h>
+typedef lock_t tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) 0
+#define MUTEX_SET(x) _lock_try(x)
+#define MUTEX_UNSET(x) _lock_clear(x)
+#endif
+#endif
+
+/*********************************************************************
+ * VMS.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_VMS
+#include <sys/mman.h>
+#include <builtins.h>
+typedef volatile unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#ifdef __ALPHA
+#define MUTEX_SET(tsl) (!__TESTBITSSI(tsl, 0))
+#else /* __VAX */
+#define MUTEX_SET(tsl) (!(int)_BBSSI(0, tsl))
+#endif
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * VxWorks
+ * Use basic binary semaphores in VxWorks, as we currently do not need
+ * any special features. We do need the ability to single-thread the
+ * entire system, however, because VxWorks doesn't support the open(2)
+ * flag O_EXCL, the mechanism we normally use to single thread access
+ * when we're first looking for a DB environment.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_VXWORKS
+#include "taskLib.h"
+typedef SEM_ID tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_SET(tsl) (semTake((*tsl), WAIT_FOREVER) == OK)
+#define MUTEX_UNSET(tsl) (semGive((*tsl)))
+#define MUTEX_INIT(tsl) \
+ ((*(tsl) = semBCreate(SEM_Q_FIFO, SEM_FULL)) == NULL)
+#define MUTEX_DESTROY(tsl) semDelete(*tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * Win16
+ *
+ * Win16 spinlocks are simple because we cannot possibly be preempted.
+ *
+ * !!!
+ * We should simplify this by always returning a no-need-to-lock lock
+ * when we initialize the mutex.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_WIN16
+typedef unsigned int tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) 0
+#define MUTEX_SET(tsl) (*(tsl) = 1)
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#endif
+#endif
+
+/*********************************************************************
+ * Win32
+ *********************************************************************/
+#if defined(HAVE_MUTEX_WIN32) || defined(HAVE_MUTEX_WIN32_GCC)
+#define MUTEX_FIELDS \
+ LONG volatile tas; \
+ LONG nwaiters; \
+ u_int32_t id; /* ID used for creating events */ \
+
+#if defined(LOAD_ACTUAL_MUTEX_CODE)
+#define MUTEX_SET(tsl) (!InterlockedExchange((PLONG)tsl, 1))
+#define MUTEX_UNSET(tsl) InterlockedExchange((PLONG)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
+#ifndef _WIN64
+#define MUTEX_PAUSE {__asm{_emit 0xf3}; __asm{_emit 0x90}}
+#endif
+#endif
+#ifdef HAVE_MUTEX_WIN32_GCC
+#define MUTEX_PAUSE asm volatile ("rep; nop" : : );
+#endif
+#endif
+#endif
+
+/*********************************************************************
+ * 68K/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_68K_GCC_ASSEMBLY
+typedef unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/* gcc/68K: 0 is clear, 1 is set. */
+#define MUTEX_SET(tsl) ({ \
+ register tsl_t *__l = (tsl); \
+ int __r; \
+ asm volatile("tas %1; \n \
+ seq %0" \
+ : "=dm" (__r), "=m" (*__l) \
+ : "1" (*__l) \
+ ); \
+ __r & 1; \
+})
+
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * ALPHA/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY
+typedef u_int32_t tsl_t;
+
+#define MUTEX_ALIGN 4
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ * For gcc/alpha. Should return 0 if could not acquire the lock, 1 if
+ * lock was acquired properly.
+ */
+static inline int
+MUTEX_SET(tsl_t *tsl) {
+ register tsl_t *__l = tsl;
+ register tsl_t __r;
+ asm volatile(
+ "1: ldl_l %0,%2\n"
+ " blbs %0,2f\n"
+ " or $31,1,%0\n"
+ " stl_c %0,%1\n"
+ " beq %0,3f\n"
+ " mb\n"
+ " br 3f\n"
+ "2: xor %0,%0\n"
+ "3:"
+ : "=&r"(__r), "=m"(*__l) : "1"(*__l) : "memory");
+ return __r;
+}
+
+/*
+ * Unset mutex. Judging by Alpha Architecture Handbook, the mb instruction
+ * might be necessary before unlocking
+ */
+static inline int
+MUTEX_UNSET(tsl_t *tsl) {
+ asm volatile(" mb\n");
+ return *tsl = 0;
+}
+
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * Tru64/cc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_TRU64_CC_ASSEMBLY
+typedef volatile u_int32_t tsl_t;
+
+#define MUTEX_ALIGN 4
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#include <alpha/builtins.h>
+#define MUTEX_SET(tsl) (__LOCK_LONG_RETRY((tsl), 1) != 0)
+#define MUTEX_UNSET(tsl) (__UNLOCK_LONG(tsl))
+
+#define MUTEX_INIT(tsl) (MUTEX_UNSET(tsl), 0)
+#endif
+#endif
+
+/*********************************************************************
+ * ARM/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_ARM_GCC_ASSEMBLY
+typedef unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/* gcc/arm: 0 is clear, 1 is set. */
+#define MUTEX_SET(tsl) ({ \
+ int __r; \
+ asm volatile( \
+ "swpb %0, %1, [%2]\n\t" \
+ "eor %0, %0, #1\n\t" \
+ : "=&r" (__r) \
+ : "r" (1), "r" (tsl) \
+ ); \
+ __r & 1; \
+})
+
+#define MUTEX_UNSET(tsl) (*(volatile tsl_t *)(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * HPPA/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_HPPA_GCC_ASSEMBLY
+typedef u_int32_t tsl_t;
+
+#define MUTEX_ALIGN 16
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ * The PA-RISC has a "load and clear" instead of a "test and set" instruction.
+ * The 32-bit word used by that instruction must be 16-byte aligned. We could
+ * use the "aligned" attribute in GCC but that doesn't work for stack variables.
+ */
+#define MUTEX_SET(tsl) ({ \
+ register tsl_t *__l = (tsl); \
+ int __r; \
+ asm volatile("ldcws 0(%1),%0" : "=r" (__r) : "r" (__l)); \
+ __r & 1; \
+})
+
+#define MUTEX_UNSET(tsl) (*(volatile tsl_t *)(tsl) = -1)
+#define MUTEX_INIT(tsl) (MUTEX_UNSET(tsl), 0)
+#endif
+#endif
+
+/*********************************************************************
+ * IA64/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_IA64_GCC_ASSEMBLY
+typedef volatile unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/* gcc/ia64: 0 is clear, 1 is set. */
+#define MUTEX_SET(tsl) ({ \
+ register tsl_t *__l = (tsl); \
+ long __r; \
+ asm volatile("xchg1 %0=%1,%2" : \
+ "=r"(__r), "+m"(*__l) : "r"(1)); \
+ __r ^ 1; \
+})
+
+/*
+ * Store through a "volatile" pointer so we get a store with "release"
+ * semantics.
+ */
+#define MUTEX_UNSET(tsl) (*(tsl_t *)(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * PowerPC/gcc assembly.
+ *********************************************************************/
+#if defined(HAVE_MUTEX_PPC_GCC_ASSEMBLY)
+typedef u_int32_t tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ * The PowerPC does a sort of pseudo-atomic locking. You set up a
+ * 'reservation' on a chunk of memory containing a mutex by loading the
+ * mutex value with LWARX. If the mutex has an 'unlocked' (arbitrary)
+ * value, you then try storing into it with STWCX. If no other process or
+ * thread broke your 'reservation' by modifying the memory containing the
+ * mutex, then the STCWX succeeds; otherwise it fails and you try to get
+ * a reservation again.
+ *
+ * While mutexes are explicitly 4 bytes, a 'reservation' applies to an
+ * entire cache line, normally 32 bytes, aligned naturally. If the mutex
+ * lives near data that gets changed a lot, there's a chance that you'll
+ * see more broken reservations than you might otherwise. The only
+ * situation in which this might be a problem is if one processor is
+ * beating on a variable in the same cache block as the mutex while another
+ * processor tries to acquire the mutex. That's bad news regardless
+ * because of the way it bashes caches, but if you can't guarantee that a
+ * mutex will reside in a relatively quiescent cache line, you might
+ * consider padding the mutex to force it to live in a cache line by
+ * itself. No, you aren't guaranteed that cache lines are 32 bytes. Some
+ * embedded processors use 16-byte cache lines, while some 64-bit
+ * processors use 128-bit cache lines. But assuming a 32-byte cache line
+ * won't get you into trouble for now.
+ *
+ * If mutex locking is a bottleneck, then you can speed it up by adding a
+ * regular LWZ load before the LWARX load, so that you can test for the
+ * common case of a locked mutex without wasting cycles making a reservation.
+ *
+ * gcc/ppc: 0 is clear, 1 is set.
+ */
+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;
+}
+
+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;
+
+#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
+#endif
+
+/*********************************************************************
+ * S/390 32-bit assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_S390_GCC_ASSEMBLY
+typedef int tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/* gcc/S390: 0 is clear, 1 is set. */
+static inline int
+MUTEX_SET(tsl_t *tsl) { \
+ register tsl_t *__l = (tsl); \
+ int __r; \
+ asm volatile( \
+ " la 1,%1\n" \
+ " lhi 0,1\n" \
+ " l %0,%1\n" \
+ "0: cs %0,0,0(1)\n" \
+ " jl 0b" \
+ : "=&d" (__r), "+m" (*__l) \
+ : : "0", "1", "cc"); \
+ return !__r; \
+}
+
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * SCO/cc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY
+typedef unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ * UnixWare has threads in libthread, but OpenServer doesn't (yet).
+ *
+ * cc/x86: 0 is clear, 1 is set.
+ */
+#if defined(__USLC__)
+asm int
+_tsl_set(void *tsl)
+{
+%mem tsl
+ movl tsl, %ecx
+ movl $1, %eax
+ lock
+ xchgb (%ecx),%al
+ xorl $1,%eax
+}
+#endif
+
+#define MUTEX_SET(tsl) _tsl_set(tsl)
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * Sparc/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_SPARC_GCC_ASSEMBLY
+typedef unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ *
+ * The ldstub instruction takes the location specified by its first argument
+ * (a register containing a memory address) and loads its contents into its
+ * second argument (a register) and atomically sets the contents the location
+ * specified by its first argument to a byte of 1s. (The value in the second
+ * argument is never read, but only overwritten.)
+ *
+ * The stbar is needed for v8, and is implemented as membar #sync on v9,
+ * so is functional there as well. For v7, stbar may generate an illegal
+ * instruction and we have no way to tell what we're running on. Some
+ * operating systems notice and skip this instruction in the fault handler.
+ *
+ * gcc/sparc: 0 is clear, 1 is set.
+ */
+#define MUTEX_SET(tsl) ({ \
+ register tsl_t *__l = (tsl); \
+ register tsl_t __r; \
+ __asm__ volatile \
+ ("ldstub [%1],%0; stbar" \
+ : "=r"( __r) : "r" (__l)); \
+ !__r; \
+})
+
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * UTS/cc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_UTS_CC_ASSEMBLY
+typedef int tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+#define MUTEX_INIT(x) 0
+#define MUTEX_SET(x) (!uts_lock(x, 1))
+#define MUTEX_UNSET(x) (*(x) = 0)
+#endif
+#endif
+
+/*********************************************************************
+ * MIPS/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_MIPS_GCC_ASSEMBLY
+typedef u_int32_t tsl_t;
+
+#define MUTEX_ALIGN 4
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ * For gcc/MIPS. Should return 0 if could not acquire the lock, 1 if
+ * lock was acquired properly.
+ */
+static inline int
+MUTEX_SET(tsl_t *tsl) {
+ register tsl_t *__l = tsl;
+ register tsl_t __r;
+ __asm__ __volatile__(
+ " .set push \n"
+ " .set mips2 \n"
+ " .set noreorder \n"
+ " .set nomacro \n"
+ "1: ll %0,%1 \n"
+ " bne %0,$0,1f \n"
+ " xori %0,%0,1 \n"
+ " sc %0,%1 \n"
+ " beql %0,$0,1b \n"
+ " xori %0,1 \n"
+ "1: .set pop "
+ : "=&r" (__r), "+R" (*__l));
+ return __r;
+}
+
+#define MUTEX_UNSET(tsl) (*(volatile tsl_t *)(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * x86/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_X86_GCC_ASSEMBLY
+typedef unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/* gcc/x86: 0 is clear, 1 is set. */
+#define MUTEX_SET(tsl) ({ \
+ register tsl_t *__l = (tsl); \
+ int __r; \
+ asm volatile("movl $1,%%eax\n" \
+ "lock\n" \
+ "xchgb %1,%%al\n" \
+ "xorl $1,%%eax" \
+ : "=&a" (__r), "=m" (*__l) \
+ : "m1" (*__l) \
+ ); \
+ __r & 1; \
+})
+
+#define MUTEX_UNSET(tsl) (*(volatile tsl_t *)(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
+
+/*********************************************************************
+ * x86_64/gcc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_X86_64_GCC_ASSEMBLY
+typedef unsigned char tsl_t;
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/* gcc/x86_64: 0 is clear, 1 is set. */
+#define MUTEX_SET(tsl) ({ \
+ register tsl_t *__l = (tsl); \
+ int __r; \
+ asm volatile("mov $1,%%rax\n" \
+ "lock\n" \
+ "xchgb %1,%%al\n" \
+ "xor $1,%%rax" \
+ : "=&a" (__r), "=m" (*__l) \
+ : "1m" (*__l) \
+ ); \
+ __r & 1; \
+})
+
+#define MUTEX_UNSET(tsl) (*(tsl) = 0)
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*
+ * Mutex alignment defaults to sizeof(unsigned int).
+ *
+ * !!!
+ * Various systems require different alignments for mutexes (the worst we've
+ * seen so far is 16-bytes on some HP architectures). Malloc(3) is assumed
+ * to return reasonable alignment, all other mutex users must ensure proper
+ * alignment locally.
+ */
+#ifndef MUTEX_ALIGN
+#define MUTEX_ALIGN sizeof(unsigned int)
+#endif
+
+/*
+ * Mutex destruction defaults to a no-op.
+ */
+#ifndef MUTEX_DESTROY
+#define MUTEX_DESTROY(x)
+#endif
+
+/*
+ * DB_MUTEXMGR --
+ * The mutex manager encapsulates the mutex system.
+ */
+struct __db_mutexmgr {
+ /* These fields are never updated after creation, so not protected. */
+ DB_ENV *dbenv; /* Environment */
+ REGINFO reginfo; /* Region information */
+
+ void *mutex_array; /* Base of the mutex array */
+};
+
+/* Macros to lock/unlock the mutex region as a whole. */
+#define MUTEX_SYSTEM_LOCK(dbenv) \
+ MUTEX_LOCK(dbenv, ((DB_MUTEXREGION *) \
+ (dbenv)->mutex_handle->reginfo.primary)->mtx_region)
+#define MUTEX_SYSTEM_UNLOCK(dbenv) \
+ MUTEX_UNLOCK(dbenv, ((DB_MUTEXREGION *) \
+ (dbenv)->mutex_handle->reginfo.primary)->mtx_region)
+
+/*
+ * DB_MUTEXREGION --
+ * The primary mutex data structure in the shared memory region.
+ */
+typedef struct __db_mutexregion {
+ /* These fields are initialized at create time and never modified. */
+ roff_t mutex_offset; /* Offset of mutex array */
+ size_t mutex_size; /* Size of the aligned mutex */
+ roff_t thread_off; /* Offset of the thread area. */
+
+ db_mutex_t mtx_region; /* Region mutex. */
+
+ /* Protected using the region mutex. */
+ u_int32_t mutex_next; /* Next free mutex */
+
+ DB_MUTEX_STAT stat; /* Mutex statistics */
+} DB_MUTEXREGION;
+
+struct __db_mutex_t { /* Mutex. */
+#ifdef MUTEX_FIELDS
+ MUTEX_FIELDS
+#endif
+#if !defined(MUTEX_FIELDS) && !defined(HAVE_MUTEX_FCNTL)
+ tsl_t tas; /* Test and set. */
+#endif
+ pid_t pid; /* Process owning mutex */
+ db_threadid_t tid; /* Thread owning mutex */
+
+ u_int32_t mutex_next_link; /* Linked list of free mutexes. */
+
+#ifdef HAVE_STATISTICS
+ int alloc_id; /* Allocation ID. */
+
+ u_int32_t mutex_set_wait; /* Granted after wait. */
+ u_int32_t mutex_set_nowait; /* Granted without waiting. */
+#endif
+
+ /*
+ * A subset of the flag arguments for __mutex_alloc().
+ *
+ * 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 */
+};
+
+/* Macro to get a reference to a specific mutex. */
+#define MUTEXP_SET(indx) \
+ (DB_MUTEX *) \
+ ((u_int8_t *)mtxmgr->mutex_array + (indx) * mtxregion->mutex_size);
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_DB_MUTEX_INT_H_ */
diff --git a/db/dbinc/os.h b/db/dbinc/os.h
index 24685a4a7..792c04dd9 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os.h,v 11.25 2004/09/22 03:40:20 bostic Exp $
+ * $Id: os.h,v 12.18 2006/09/05 15:02:30 mjc Exp $
*/
#ifndef _DB_OS_H_
@@ -17,22 +17,60 @@ extern "C" {
/* Number of times to retry system calls that return EINTR or EBUSY. */
#define DB_RETRY 100
+#ifdef __TANDEM
+/*
+ * OSS Tandem problem: fsync can return a Guardian file system error of 70,
+ * which has no symbolic name in OSS. HP says to retry the fsync. [#12957]
+ */
+#define RETRY_CHK(op, ret) do { \
+ int __retries, __t_ret; \
+ for ((ret) = 0, __retries = DB_RETRY;;) { \
+ if ((op) == 0) \
+ break; \
+ (ret) = __os_get_syserr(); \
+ if (((__t_ret = __os_posix_err(ret)) == EAGAIN || \
+ __t_ret == EBUSY || __t_ret == EINTR || \
+ __t_ret == EIO || __t_ret == 70) && --__retries > 0)\
+ continue; \
+ break; \
+ } \
+} while (0)
+#else
#define RETRY_CHK(op, ret) do { \
- int __retries = DB_RETRY; \
- do { \
- (ret) = (op); \
- } while ((ret) != 0 && (((ret) = __os_get_errno()) == EAGAIN || \
- (ret) == EBUSY || (ret) == EINTR) && --__retries > 0); \
+ int __retries, __t_ret; \
+ for ((ret) = 0, __retries = DB_RETRY;;) { \
+ if ((op) == 0) \
+ break; \
+ (ret) = __os_get_syserr(); \
+ if (((__t_ret = __os_posix_err(ret)) == EAGAIN || \
+ __t_ret == EBUSY || __t_ret == EINTR || \
+ __t_ret == EIO) && --__retries > 0) \
+ continue; \
+ break; \
+ } \
+} while (0)
+#endif
+
+#define RETRY_CHK_EINTR_ONLY(op, ret) do { \
+ int __retries; \
+ for ((ret) = 0, __retries = DB_RETRY;;) { \
+ if ((op) == 0) \
+ break; \
+ (ret) = __os_get_syserr(); \
+ if (__os_posix_err(ret) == EINTR && --__retries > 0) \
+ continue; \
+ break; \
+ } \
} while (0)
/*
* 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_DSYNC 0x0004 /* POSIX: O_DSYNC. */
-#define DB_OSO_EXCL 0x0008 /* POSIX: O_EXCL */
-#define DB_OSO_LOG 0x0010 /* Opening a log file. */
+#define DB_OSO_ABSMODE 0x0001 /* Absolute mode specified. */
+#define DB_OSO_CREATE 0x0002 /* POSIX: O_CREAT */
+#define DB_OSO_DIRECT 0x0004 /* Don't buffer the file in the OS. */
+#define DB_OSO_DSYNC 0x0008 /* POSIX: O_DSYNC. */
+#define DB_OSO_EXCL 0x0010 /* POSIX: O_EXCL */
#define DB_OSO_RDONLY 0x0020 /* POSIX: O_RDONLY */
#define DB_OSO_REGION 0x0040 /* Opening a region file. */
#define DB_OSO_SEQ 0x0080 /* Expected sequential access. */
@@ -40,15 +78,6 @@ extern "C" {
#define DB_OSO_TRUNC 0x0200 /* 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.
*/
@@ -62,14 +91,15 @@ struct __fh_t {
* 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. */
+ db_mutex_t mtx_fh; /* Mutex to lock. */
- int ref; /* Reference count. */
+ int ref; /* Reference count. */
#if defined(DB_WIN32)
- HANDLE handle; /* Windows/32 file handle. */
+ HANDLE handle; /* Windows/32 file handle. */
+ HANDLE trunc_handle; /* Handle for truncate calls. */
#endif
- int fd; /* POSIX file descriptor. */
+ int fd; /* POSIX file descriptor. */
char *name; /* File name (ref DB_FH_UNLINK) */
@@ -87,6 +117,12 @@ struct __fh_t {
u_int8_t flags;
};
+/* Standard 600 mode for __db_omode. */
+#define OWNER_RW "rw-------"
+
+/* Standard buffer size for ctime/ctime_r function calls. */
+#define CTIME_BUFLEN 26
+
#if defined(__cplusplus)
}
#endif
diff --git a/db/dbinc/qam.h b/db/dbinc/qam.h
index 43910d01d..b76c92cd2 100644
--- a/db/dbinc/qam.h
+++ b/db/dbinc/qam.h
@@ -1,15 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam.h,v 11.49 2004/09/17 22:00:27 mjc Exp $
+ * $Id: qam.h,v 12.9 2006/08/24 14:45:29 bostic Exp $
*/
#ifndef _DB_QAM_H_
#define _DB_QAM_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*
* QAM data elements: a status field and the data.
*/
@@ -69,8 +73,9 @@ struct __queue {
};
/* Format for queue extent names. */
-#define QUEUE_EXTENT "%s%c__dbq.%s.%d"
-#define QUEUE_EXTENT_HEAD "__dbq.%s."
+#define QUEUE_EXTENT "%s%c__dbq.%s.%d"
+#define QUEUE_EXTENT_HEAD "__dbq.%s."
+#define QUEUE_EXTENT_PREFIX "__dbq."
typedef struct __qam_filelist {
DB_MPOOLFILE *mpf;
@@ -119,16 +124,16 @@ typedef struct __qam_filelist {
((QUEUE *)(dbp)->q_internal)->re_len, sizeof(u_int32_t)) * index))))
#define QAM_AFTER_CURRENT(meta, recno) \
- ((recno) > (meta)->cur_recno && \
+ ((recno) >= (meta)->cur_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 || \
+ ((meta)->first_recno <= (meta)->cur_recno || \
((recno) > (meta)->cur_recno && \
- (recno) - (meta)->cur_recno > (meta)->first_recno - (recno)))))
+ (recno) - (meta)->cur_recno > (meta)->first_recno - (recno))))
#define QAM_NOT_VALID(meta, recno) \
(recno == RECNO_OOB || \
@@ -141,18 +146,10 @@ typedef struct __qam_filelist {
#define QAM_SETCUR 0x02
#define QAM_TRUNCATE 0x04
-/*
- * Parameter to __qam_position.
- */
-typedef enum {
- QAM_READ,
- QAM_WRITE,
- QAM_CONSUME
-} qam_position_mode;
-
typedef enum {
QAM_PROBE_GET,
QAM_PROBE_PUT,
+ QAM_PROBE_DIRTY,
QAM_PROBE_MPF
} qam_probe_mode;
@@ -165,11 +162,18 @@ typedef enum {
QAM_NAME_REMOVE
} qam_name_op;
-#define __qam_fget(dbp, pgnoaddr, flags, addrp) \
- __qam_fprobe(dbp, *pgnoaddr, addrp, QAM_PROBE_GET, flags)
+#define __qam_fget(dbp, pgnoaddr, lsnp, flags, addrp) \
+ __qam_fprobe(dbp, *pgnoaddr, lsnp, addrp, QAM_PROBE_GET, flags)
+
+#define __qam_fput(dbp, pgno, addrp, flags) \
+ __qam_fprobe(dbp, pgno, NULL, addrp, QAM_PROBE_PUT, flags)
+
+#define __qam_dirty(dbp, pgno, pagep, lsnp, flags) \
+ __qam_fprobe(dbp, pgno, lsnp, pagep, QAM_PROBE_DIRTY, flags)
-#define __qam_fput(dbp, pageno, addrp, flags) \
- __qam_fprobe(dbp, pageno, addrp, QAM_PROBE_PUT, flags)
+#if defined(__cplusplus)
+}
+#endif
#include "dbinc_auto/qam_auto.h"
#include "dbinc_auto/qam_ext.h"
diff --git a/db/dbinc/queue.h b/db/dbinc/queue.h
index bf09b12d7..d76f2019f 100644
--- a/db/dbinc/queue.h
+++ b/db/dbinc/queue.h
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
diff --git a/db/dbinc/region.h b/db/dbinc/region.h
index 98f6ea07b..d184f4418 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: region.h,v 11.51 2004/10/15 16:59:39 bostic Exp $
+ * $Id: region.h,v 12.9 2006/08/24 14:45:30 bostic Exp $
*/
#ifndef _DB_REGION_H_
@@ -24,16 +24,18 @@
* file mapped into memory (mmap, MapViewOfFile)
* system memory (shmget, CreateFileMapping)
*
- * If the regions are private to a process, they're in malloc. If they're
- * public, they're in file mapped memory, or, optionally, in system memory.
+ * By default, regions are created in filesystem-backed shared memory. They
+ * can also be created in system shared memory (DB_SYSTEM_MEM), or, if private
+ * to a process, in heap memory (DB_PRIVATE).
+ *
* Regions in the filesystem are named "__db.001", "__db.002" and so on. If
- * we're not using a private environment allocated using malloc(3), the file
- * "__db.001" will always exist, as we use it to synchronize on the regions,
- * whether they exist in file mapped memory or system memory.
+ * we're not using a private environment allocated in heap, "__db.001" will
+ * always exist, as we use it to synchronize on the regions, whether they are
+ * in filesystem-backed memory or system memory.
*
- * The file "__db.001" contains a REGENV structure and a linked list of some
- * number of REGION structures. Each of the REGION structures describes and
- * locks one of the underlying shared regions used by DB.
+ * The file "__db.001" contains a REGENV structure and an array of REGION
+ * structures. Each REGION structures describes an underlying chunk of
+ * shared memory.
*
* __db.001
* +---------+
@@ -49,22 +51,32 @@
* | | +----------+
* +---------+
*
- * The only tricky part about manipulating the regions is correctly creating
- * or joining the REGENV file, i.e., __db.001. We have to be absolutely sure
- * that only one process creates it, and that everyone else joins it without
- * seeing inconsistent data. Once that region is created, we can use normal
- * shared locking procedures to do mutual exclusion for all other regions.
+ * The tricky part about manipulating the regions is creating or joining the
+ * database environment. We have to be sure only a single thread of control
+ * creates and/or recovers a database environment. All other threads should
+ * then join without seeing inconsistent data.
+ *
+ * We do this in two parts: first, we use the underlying O_EXCL flag to the
+ * open system call to serialize creation of the __db.001 file. The thread
+ * of control creating that file then proceeds to create the remaining
+ * regions in the environment, including the mutex region. Once the mutex
+ * region has been created, the creating thread of control fills in the
+ * __db.001 file's magic number. Other threads of control (the ones that
+ * didn't create the __db.001 file), wait on the initialization of the
+ * __db.001 file's magic number. After it has been initialized, all threads
+ * of control can proceed, using normal shared mutex locking procedures for
+ * exclusion.
*
- * One of the REGION structures in the main environment region describes the
- * environment region itself.
+ * REGIONs are not moved or removed during the life of the environment, and
+ * so processes can have long-lived references to them.
*
- * To lock a region, locate the REGION structure that describes it and acquire
- * the region's mutex. There is one exception to this rule -- the lock for the
- * environment region itself is in the REGENV structure, and not in the REGION
- * that describes the environment region. That's so that we can acquire a lock
- * without walking linked lists that could potentially change underneath us.
- * The REGION will not be moved or removed during the life of the region, and
- * so long-lived references to it can be held by the process.
+ * One of the REGION structures describes the environment region itself.
+ *
+ * The REGION array is not locked in any way. It's an array so we don't have
+ * to manipulate data structures after a crash -- on some systems, we have to
+ * join and clean up the mutex region after application failure. Using an
+ * array means we don't have to worry about broken links or other nastiness
+ * after the failure.
*
* All requests to create or join a region return a REGINFO structure, which
* is held by the caller and used to open and subsequently close the reference
@@ -82,17 +94,19 @@
* Although DB does not currently grow regions when they run out of memory, it
* would be possible to do so. To grow a region, allocate a new region of the
* appropriate size, then copy the old region over it and insert the additional
- * space into the already existing shalloc arena. Callers may have to fix up
- * local references, but that should be easy to do. This failed in historic
- * versions of DB because the region lock lived in the mapped memory, and when
- * it was unmapped and remapped (or copied), threads could lose track of it.
- * Once we moved that lock into a region that is never unmapped, growing should
- * work. That all said, current versions of DB don't implement region grow
- * because some systems don't support mutex copying, e.g., from OSF1 V4.0:
+ * memory into the already existing shalloc arena. Region users must reset
+ * their base addresses and any local pointers into the memory, of course.
+ * This failed in historic versions of DB because the region mutexes lived in
+ * the mapped memory, and when it was unmapped and remapped (or copied),
+ * threads could lose track of it. Also, some systems didn't support mutex
+ * copying, e.g., from OSF1 V4.0:
*
* The address of an msemaphore structure may be significant. If the
* msemaphore structure contains any value copied from an msemaphore
* structure at a different address, the result is undefined.
+ *
+ * All mutexes are now maintained in a separate region which is never unmapped,
+ * so growing regions should be possible.
*/
#if defined(__cplusplus)
@@ -138,42 +152,55 @@ typedef struct __db_reg_env_ref {
typedef struct __db_reg_env {
/*
* !!!
- * The mutex must be the first entry in the structure to guarantee
- * correct alignment.
- */
- DB_MUTEX mutex; /* Environment mutex. */
-
- /*
+ * The magic, panic, version and envid fields of the region are fixed
+ * in size, the timestamp field is the first field which is variable
+ * length. These fields must never change in order, to guarantee we
+ * can always read them, no matter what Berkeley DB release we have.
+ *
* !!!
- * 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 magic and panic fields are NOT protected by any mutex, and for
+ * this reason cannot be anything more complicated than zero/non-zero.
*/
- u_int32_t magic; /* Valid region magic number. */
- u_int32_t envid; /* Unique environment ID. */
+ u_int32_t magic; /* Valid region magic number. */
+ u_int32_t panic; /* Environment is dead. */
- int envpanic; /* Environment is dead. */
+ u_int32_t majver; /* Major DB version number. */
+ u_int32_t minver; /* Minor DB version number. */
+ u_int32_t patchver; /* Patch DB version number. */
- int majver; /* Major DB version number. */
- int minver; /* Minor DB version number. */
- int patch; /* Patch DB version number. */
+ u_int32_t envid; /* Unique environment ID. */
- u_int32_t init_flags; /* Flags the env was initialized with.*/
- roff_t cipher_off; /* Offset of cipher area */
+ time_t timestamp; /* Creation time. */
- /* List of regions. */
- SH_LIST_HEAD(__db_regionh) regionq;
+ u_int32_t init_flags; /* Flags environment initialized with.*/
+ /*
+ * The mtx_regenv mutex protects the environment reference count and
+ * memory allocation from the primary shared region (the crypto and
+ * replication implementations allocate memory from the primary shared
+ * region). The rest of the fields are initialized at creation time,
+ * and so don't need mutex protection. The flags, op_timestamp and
+ * rep_timestamp fields are used by replication only and are
+ * protected * by the replication mutex. The rep_timestamp is
+ * is not protected when it is used in recovery as that is already
+ * single threaded.
+ */
+ db_mutex_t mtx_regenv; /* Refcnt, region allocation mutex. */
u_int32_t refcnt; /* References to the environment. */
- roff_t rep_off; /* Offset of the replication area. */
+ u_int32_t region_cnt; /* Number of REGIONs. */
+ roff_t region_off; /* Offset of region array */
+
+ roff_t cipher_off; /* Offset of cipher area */
+
+ roff_t rep_off; /* Offset of the replication area. */
#define DB_REGENV_REPLOCKED 0x0001 /* Env locked for rep backup. */
- u_int32_t flags; /* Shared environment flags. */
+ u_int32_t flags; /* Shared environment flags. */
#define DB_REGENV_TIMEOUT 30 /* Backup timeout. */
- time_t op_timestamp; /* Timestamp for operations. */
- time_t rep_timestamp; /* Timestamp for rep db handles. */
+ time_t op_timestamp; /* Timestamp for operations. */
+ time_t rep_timestamp; /* Timestamp for rep db handles. */
- size_t pad; /* Guarantee that following memory is
+ size_t pad; /* Guarantee that following memory is
* size_t aligned. This is necessary
* because we're going to store the
* allocation region information there.
@@ -182,24 +209,15 @@ typedef struct __db_reg_env {
/* Per-region shared region information. */
typedef struct __db_region {
- /*
- * !!!
- * The mutex must be the first entry in the structure to guarantee
- * correct alignment.
- */
- DB_MUTEX mutex; /* Region mutex. */
+ u_int32_t id; /* Region id. */
+ reg_type_t type; /* Region type. */
- SH_LIST_ENTRY q; /* Linked list of REGIONs. */
+ roff_t size_orig; /* Region size in bytes (original). */
+ roff_t size; /* Region size in bytes (adjusted). */
- reg_type_t type; /* Region type. */
- u_int32_t id; /* Region id. */
+ roff_t primary; /* Primary data structure offset. */
- roff_t size_orig; /* Region size in bytes (original). */
- roff_t size; /* Region size in bytes (adjusted). */
-
- roff_t primary; /* Primary data structure offset. */
-
- long segid; /* UNIX shmget(2), Win16 segment ID. */
+ long segid; /* UNIX shmget(2), Win16 segment ID. */
} REGION;
/*
@@ -233,26 +251,6 @@ struct __db_reginfo_t { /* __db_r_attach IN parameters. */
};
/*
- * Mutex maintenance information each subsystem region must keep track
- * of to manage resources adequately.
- */
-typedef struct __db_regmaint_stat_t {
- u_int32_t st_hint_hit;
- u_int32_t st_hint_miss;
- u_int32_t st_records;
- u_int32_t st_clears;
- u_int32_t st_destroys;
- u_int32_t st_max_locks;
-} REGMAINT_STAT;
-
-typedef struct __db_regmaint_t {
- u_int32_t reglocks; /* Maximum # of mutexes we track. */
- u_int32_t regmutex_hint; /* Hint for next slot */
- REGMAINT_STAT stat; /* Stats */
- roff_t regmutexes[1]; /* Region mutexes in use. */
-} REGMAINT;
-
-/*
* R_ADDR Return a per-process address for a shared region offset.
* R_OFFSET Return a shared region offset for a per-process address.
*/
@@ -263,40 +261,13 @@ typedef struct __db_regmaint_t {
(F_ISSET((reginfop)->dbenv, DB_ENV_PRIVATE) ? (roff_t)(p) : \
(roff_t)((u_int8_t *)(p) - (u_int8_t *)(reginfop)->addr))
-/*
- * R_LOCK Lock/unlock a region.
- * R_UNLOCK
- */
-#define R_LOCK(dbenv, reginfo) \
- MUTEX_LOCK(dbenv, &(reginfo)->rp->mutex)
-#define R_UNLOCK(dbenv, reginfo) \
- MUTEX_UNLOCK(dbenv, &(reginfo)->rp->mutex)
-
/* PANIC_CHECK: Check to see if the DB environment is dead. */
#define PANIC_CHECK(dbenv) \
- if (!F_ISSET((dbenv), DB_ENV_NOPANIC) && \
- (dbenv)->reginfo != NULL && ((REGENV *) \
- ((REGINFO *)(dbenv)->reginfo)->primary)->envpanic != 0) \
+ if ((dbenv)->reginfo != NULL && ((REGENV *) \
+ ((REGINFO *)(dbenv)->reginfo)->primary)->panic != 0 && \
+ !F_ISSET((dbenv), DB_ENV_NOPANIC)) \
return (__db_panic_msg(dbenv));
-#define PANIC_SET(dbenv, 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
- * don't make some underlying VM unhappy. Make sure we don't overflow or
- * underflow.
- */
-#define OS_VMPAGESIZE (8 * 1024)
-#define OS_VMROUNDOFF(i) { \
- if ((i) < \
- (UINT32_MAX - OS_VMPAGESIZE) + 1 || (i) < OS_VMPAGESIZE) \
- (i) += OS_VMPAGESIZE - 1; \
- (i) -= (i) % OS_VMPAGESIZE; \
-}
-
#if defined(__cplusplus)
}
#endif
diff --git a/db/dbinc/rep.h b/db/dbinc/rep.h
index ec1f290f4..f1ea36e2f 100644
--- a/db/dbinc/rep.h
+++ b/db/dbinc/rep.h
@@ -1,46 +1,107 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep.h,v 12.57 2006/09/12 01:06:35 alanb Exp $
*/
-#ifndef _REP_H_
-#define _REP_H_
+#ifndef _DB_REP_H_
+#define _DB_REP_H_
#include "dbinc_auto/rep_auto.h"
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*
+ * Names of client temp databases.
+ */
+#define REPDBNAME "__db.rep.db"
+#define REPPAGENAME "__db.reppg.db"
+
+/*
+ * Message types
+ */
+#define REP_INVALID 0 /* Invalid message type. */
#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_DUPMASTER 4 /* Duplicate master detected; propagate. */
-#define REP_FILE 5 /* Page of a database file. NOTUSED */
-#define REP_FILE_FAIL 6 /* File requested does not exist. */
-#define REP_FILE_REQ 7 /* Request for a database file. NOTUSED */
-#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_BULK_LOG 4 /* Bulk transfer of log records. */
+#define REP_BULK_PAGE 5 /* Bulk transfer of pages. */
+#define REP_DUPMASTER 6 /* Duplicate master detected; propagate. */
+#define REP_FILE 7 /* Page of a database file. NOTUSED */
+#define REP_FILE_FAIL 8 /* File requested does not exist. */
+#define REP_FILE_REQ 9 /* Request for a database file. NOTUSED */
+#define REP_LOG 10 /* Log record. */
+#define REP_LOG_MORE 11 /* There are more log records to request. */
+#define REP_LOG_REQ 12 /* Request for a log record. */
+#define REP_MASTER_REQ 13 /* Who is the master */
+#define REP_NEWCLIENT 14 /* Announces the presence of a new client. */
+#define REP_NEWFILE 15 /* Announce a log file change. */
+#define REP_NEWMASTER 16 /* Announces who the master is. */
+#define REP_NEWSITE 17 /* 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_FAIL 17 /* Requested page does not exist. */
-#define REP_PAGE_MORE 18 /* There are more pages to request. */
-#define REP_PAGE_REQ 19 /* Request for a database page. */
-#define REP_UPDATE 20 /* Environment hotcopy information. */
-#define REP_UPDATE_REQ 21 /* Request for hotcopy information. */
-#define REP_VERIFY 22 /* A log record for verification. */
-#define REP_VERIFY_FAIL 23 /* The client is outdated. */
-#define REP_VERIFY_REQ 24 /* Request for a log record to verify. */
-#define REP_VOTE1 25 /* Send out your information for an election. */
-#define REP_VOTE2 26 /* Send a "you are master" vote. */
+#define REP_PAGE 18 /* Database page. */
+#define REP_PAGE_FAIL 19 /* Requested page does not exist. */
+#define REP_PAGE_MORE 20 /* There are more pages to request. */
+#define REP_PAGE_REQ 21 /* Request for a database page. */
+#define REP_REREQUEST 22 /* Force rerequest. */
+#define REP_UPDATE 23 /* Environment hotcopy information. */
+#define REP_UPDATE_REQ 24 /* Request for hotcopy information. */
+#define REP_VERIFY 25 /* A log record for verification. */
+#define REP_VERIFY_FAIL 26 /* The client is outdated. */
+#define REP_VERIFY_REQ 27 /* Request for a log record to verify. */
+#define REP_VOTE1 28 /* Send out your information for an election. */
+#define REP_VOTE2 29 /* Send a "you are master" vote. */
+
+/*
+ * Maximum message number for conversion tables. Update this
+ * value as the largest message number above increases.
+ *
+ * !!!
+ * NOTE: When changing messages above, the two tables for upgrade support
+ * need adjusting. They are in rep_record.c.
+ */
+#define REP_MAX_MSG 29
+
+/*
+ * This is the list of client-to-client requests messages.
+ * We use this to decide if we're doing client-to-client and
+ * might need to send a rerequest.
+ */
+#define REP_MSG_REQ(rectype) \
+ (rectype == REP_ALL_REQ || \
+ rectype == REP_LOG_REQ || \
+ rectype == REP_PAGE_REQ || \
+ rectype == REP_VERIFY_REQ)
+
+/*
+ * Note that the version information should be at the beginning of the
+ * structure, so that we can rearrange the rest of it while letting the
+ * version checks continue to work. DB_REPVERSION should be revved any time
+ * the rest of the structure changes or when the message numbers change.
+ *
+ * Define also, the corresponding log versions that are tied to the
+ * replication/release versions. These are only used in replication
+ * and that is why they're defined here.
+ */
+#define DB_LOGVERSION_42 8
+#define DB_LOGVERSION_43 10
+#define DB_LOGVERSION_44 11
+#define DB_LOGVERSION_45 12
+#define DB_REPVERSION_INVALID 0
+#define DB_REPVERSION_42 1
+#define DB_REPVERSION_43 2
+#define DB_REPVERSION_44 3
+#define DB_REPVERSION_45 3
+#define DB_REPVERSION 3
/*
* REP_PRINT_MESSAGE
@@ -52,40 +113,42 @@
* !!! This function assumes a local DB_MSGBUF variable called 'mb'.
*/
#ifdef DIAGNOSTIC
-#define REP_PRINT_MESSAGE(dbenv, eid, rp, str) \
- __rep_print_message(dbenv, eid, rp, str)
-#define RPRINT(e, r, x) do { \
+#define REP_PRINT_MESSAGE(dbenv, eid, rp, str, fl) \
+ __rep_print_message(dbenv, eid, rp, str, fl)
+#define RPRINT(e, x) do { \
if (FLD_ISSET((e)->verbose, DB_VERB_REPLICATION)) { \
DB_MSGBUF_INIT(&mb); \
- if ((e)->db_errpfx == NULL) { \
- if (F_ISSET((r), REP_F_CLIENT)) \
+ if ((e)->db_errpfx != NULL) \
+ __db_msgadd((e), &mb, "%s: ", (e)->db_errpfx); \
+ else if (REP_ON(e)) { \
+ REP *_r = (e)->rep_handle->region; \
+ if (F_ISSET(_r, REP_F_CLIENT)) \
__db_msgadd((e), &mb, "CLIENT: "); \
- else if (F_ISSET((r), REP_F_MASTER)) \
+ else if (F_ISSET((_r), REP_F_MASTER)) \
__db_msgadd((e), &mb, "MASTER: "); \
else \
__db_msgadd((e), &mb, "REP_UNDEF: "); \
} else \
- __db_msgadd((e), &mb, "%s: ",(e)->db_errpfx); \
+ __db_msgadd((e), &mb, "REP_UNDEF: "); \
__db_msgadd x; \
DB_MSGBUF_FLUSH((e), &mb); \
} \
-} while (0)
+} while (0)
#else
-#define REP_PRINT_MESSAGE(dbenv, eid, rp, str)
-#define RPRINT(e, r, x)
+#define REP_PRINT_MESSAGE(dbenv, eid, rp, str, fl)
+#define RPRINT(e, x)
#endif
/*
* Election gen file name
- * The file contains an egen number for an election this client
- * has NOT participated in. I.e. it is the number of a future
- * election. We create it when we create the rep region, if it
- * doesn't already exist and initialize egen to 1. If it does
- * exist, we read it when we create the rep region. We write it
- * immediately before sending our VOTE1 in an election. That way,
- * if a client has ever sent a vote for any election, the file is
- * already going to be updated to reflect a future election,
- * should it crash.
+ * The file contains an egen number for an election this client has NOT
+ * participated in. I.e. it is the number of a future election. We
+ * create it when we create the rep region, if it doesn't already exist
+ * and initialize egen to 1. If it does exist, we read it when we create
+ * the rep region. We write it immediately before sending our VOTE1 in
+ * an election. That way, if a client has ever sent a vote for any
+ * election, the file is already going to be updated to reflect a future
+ * election, should it crash.
*/
#define REP_EGENNAME "__db.rep.egen"
@@ -97,21 +160,24 @@ typedef enum {
REP_PG /* Pg database. */
} repdb_t;
-/* Shared replication structure. */
+/* Macros to lock/unlock the replication region as a whole. */
+#define REP_SYSTEM_LOCK(dbenv) \
+ MUTEX_LOCK(dbenv, (dbenv)->rep_handle->region->mtx_region)
+#define REP_SYSTEM_UNLOCK(dbenv) \
+ MUTEX_UNLOCK(dbenv, (dbenv)->rep_handle->region->mtx_region)
+/*
+ * REP --
+ * Shared replication structure.
+ */
typedef struct __rep {
- /*
- * Due to alignment constraints on some architectures (e.g. HP-UX),
- * DB_MUTEXes must be the first element of shalloced structures,
- * and as a corollary there can be only one per structure. Thus,
- * db_mutex_off points to a mutex in a separately-allocated chunk.
- */
- DB_MUTEX mutex; /* Region lock. */
- roff_t db_mutex_off; /* Client database mutex. */
+ db_mutex_t mtx_region; /* Region mutex. */
+ db_mutex_t mtx_clientdb; /* Client database mutex. */
roff_t tally_off; /* Offset of the tally region. */
roff_t v2tally_off; /* Offset of the vote2 tally region. */
int eid; /* Environment id. */
int master_id; /* ID of the master site. */
+ u_int32_t version; /* Current replication version. */
u_int32_t egen; /* Replication election generation. */
u_int32_t gen; /* Replication generation number. */
u_int32_t recover_gen; /* Last generation number in log. */
@@ -119,6 +185,8 @@ typedef struct __rep {
int nsites; /* Number of sites in group. */
int nvotes; /* Number of votes needed. */
int priority; /* My priority in an election. */
+ int config_nsites;
+ db_timeout_t elect_timeout;
u_int32_t gbytes; /* Limit on data sent in single... */
u_int32_t bytes; /* __rep_process_message call. */
#define DB_REP_REQUEST_GAP 4
@@ -130,19 +198,20 @@ typedef struct __rep {
/* Status change information */
int elect_th; /* A thread is in rep_elect. */
u_int32_t msg_th; /* Number of callers in rep_proc_msg. */
- int start_th; /* A thread is in rep_start. */
+ int lockout_th; /* A thread is in msg lockout. */
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. */
/* Backup information. */
- int nfiles; /* Number of files we have info on. */
- int curfile; /* Current file we're getting. */
+ u_int32_t nfiles; /* Number of files we have info on. */
+ u_int32_t curfile; /* Current file we're getting. */
__rep_fileinfo_args *curinfo; /* Current file info ptr. */
void *finfo; /* Current file info buffer. */
void *nextinfo; /* Next file info buffer. */
void *originfo; /* Original file info buffer. */
DB_LSN first_lsn; /* Earliest LSN we need. */
+ u_int32_t first_vers; /* Log version of first log file. */
DB_LSN last_lsn; /* Latest LSN we need. */
db_pgno_t ready_pg; /* Next pg expected. */
db_pgno_t waiting_pg; /* First pg after gap. */
@@ -160,22 +229,32 @@ typedef struct __rep {
DB_LSN w_lsn; /* Winner LSN. */
u_int32_t w_tiebreaker; /* Winner tiebreaking value. */
int votes; /* Number of votes for this site. */
+ u_int32_t esec; /* Election start seconds. */
+ u_int32_t eusec; /* Election start useconds. */
/* Statistics. */
DB_REP_STAT stat;
+ /* Configuration. */
+#define REP_C_BULK 0x00001 /* Bulk transfer. */
+#define REP_C_DELAYCLIENT 0x00002 /* Delay client sync-up. */
+#define REP_C_NOAUTOINIT 0x00004 /* No auto initialization. */
+#define REP_C_NOWAIT 0x00008 /* Immediate error return. */
+ u_int32_t config; /* Configuration flags. */
+
#define REP_F_CLIENT 0x00001 /* Client replica. */
-#define REP_F_EPHASE1 0x00002 /* In phase 1 of election. */
-#define REP_F_EPHASE2 0x00004 /* In phase 2 of election. */
-#define REP_F_MASTER 0x00008 /* Master replica. */
-#define REP_F_MASTERELECT 0x00010 /* Master elect */
-#define REP_F_NOARCHIVE 0x00020 /* Rep blocks log_archive */
-#define REP_F_READY 0x00040 /* Wait for txn_cnt to be 0. */
-#define REP_F_RECOVER_LOG 0x00080 /* In recovery - log. */
-#define REP_F_RECOVER_PAGE 0x00100 /* In recovery - pages. */
-#define REP_F_RECOVER_UPDATE 0x00200 /* In recovery - files. */
-#define REP_F_RECOVER_VERIFY 0x00400 /* In recovery - verify. */
-#define REP_F_TALLY 0x00800 /* Tallied vote before elect. */
+#define REP_F_DELAY 0x00002 /* Delaying client sync-up. */
+#define REP_F_EPHASE1 0x00004 /* In phase 1 of election. */
+#define REP_F_EPHASE2 0x00008 /* In phase 2 of election. */
+#define REP_F_MASTER 0x00010 /* Master replica. */
+#define REP_F_MASTERELECT 0x00020 /* Master elect */
+#define REP_F_NOARCHIVE 0x00040 /* Rep blocks log_archive */
+#define REP_F_READY 0x00080 /* Wait for txn_cnt to be 0. */
+#define REP_F_RECOVER_LOG 0x00100 /* In recovery - log. */
+#define REP_F_RECOVER_PAGE 0x00200 /* In recovery - pages. */
+#define REP_F_RECOVER_UPDATE 0x00400 /* In recovery - files. */
+#define REP_F_RECOVER_VERIFY 0x00800 /* In recovery - verify. */
+#define REP_F_TALLY 0x01000 /* Tallied vote before elect. */
u_int32_t flags;
} REP;
@@ -184,47 +263,65 @@ typedef struct __rep {
* REP_F_READY and all REP_F_RECOVER*. This must change if the values
* of the flags change.
*/
-#define REP_F_RECOVER_MASK \
- (REP_F_READY | REP_F_RECOVER_LOG | REP_F_RECOVER_PAGE | \
+#define REP_F_RECOVER_MASK \
+ (REP_F_READY | REP_F_RECOVER_LOG | REP_F_RECOVER_PAGE | \
REP_F_RECOVER_UPDATE | REP_F_RECOVER_VERIFY)
-#define IN_ELECTION(R) F_ISSET((R), REP_F_EPHASE1 | REP_F_EPHASE2)
+#define IN_ELECTION(R) \
+ F_ISSET((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 ELECTION_MAJORITY(n) (((n) / 2) + 1)
+
#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))
+ (REP_ON(dbenv) && \
+ F_ISSET(((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_F_CLIENT))
+ (REP_ON(dbenv) && \
+ F_ISSET(((REP *)(dbenv)->rep_handle->region), REP_F_CLIENT))
#define IS_CLIENT_PGRECOVER(dbenv) \
(IS_REP_CLIENT(dbenv) && \
- F_ISSET(((REP *)((DB_REP *)(dbenv)->rep_handle)->region), \
- REP_F_RECOVER_PAGE))
+ F_ISSET(((REP *)(dbenv)->rep_handle->region), REP_F_RECOVER_PAGE))
/*
- * Macros to figure out if we need to do replication pre/post-amble
- * processing.
+ * Macros to figure out if we need to do replication pre/post-amble processing.
+ * Skip for specific DB handles owned by the replication layer, either because
+ * replication is running recovery or because it's a handle entirely owned by
+ * the replication code (replication opens its own databases to track state).
*/
-#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(dbenv) \
+ (REP_ON(dbenv) && (dbenv)->rep_handle->region->flags != 0)
-#define IS_ENV_REPLICATED(E) (REP_ON(E) && \
- ((DB_REP *)((E)->rep_handle))->region != NULL && \
- ((DB_REP *)((E)->rep_handle))->region->flags != 0)
+/*
+ * Gap processing flags. These provide control over the basic
+ * gap processing algorithm for some special cases.
+ */
+#define REP_GAP_FORCE 0x001 /* Force a request for a gap. */
+#define REP_GAP_REREQUEST 0x002 /* Gap request is a forced rerequest. */
+ /* REREQUEST is a superset of FORCE. */
+
+/*
+ * Basic pre/post-amble processing.
+ */
+#define REPLICATION_WRAP(dbenv, func_call, ret) do { \
+ int __rep_check, __t_ret; \
+ __rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0; \
+ if (__rep_check && ((ret) = __env_rep_enter(dbenv, 0)) != 0) \
+ return ((ret)); \
+ (ret) = func_call; \
+ if (__rep_check && \
+ (__t_ret = __env_db_rep_exit(dbenv)) != 0 && (ret) == 0) \
+ (ret) = __t_ret; \
+} while (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 per-process flags, and bookkeeping
+ * 1. mtx_region - This protects the fields of the rep region above.
+ * 2. mtx_clientdb - This protects the per-process flags, and 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
@@ -233,50 +330,143 @@ typedef struct __rep {
* 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.
+ * These fields in the log region are NOT protected by the log region lock at
+ * all.
*
- * Note that the per-process flags should truly be protected by a
- * special per-process thread mutex, but it is currently set in so
- * isolated a manner that it didn't make sense to do so and in most
- * case we're already holding the db_mutexp anyway.
+ * Note that the per-process flags should truly be protected by a special
+ * per-process thread mutex, but it is currently set in so isolated a manner
+ * that it didn't make sense to do so and in most case we're already holding
+ * the mtx_clientdb anyway.
*
- * 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.
+ * The lock ordering protocol is that mtx_clientdb must be acquired first and
+ * then either REP->mtx_region, or the LOG->mtx_region mutex may be acquired if
+ * necessary.
*/
struct __db_rep {
- DB_MUTEX *rep_mutexp; /* Mutex for rep region */
+ /*
+ * Shared configuration information -- copied to and maintained in the
+ * shared region as soon as the shared region is created.
+ */
+ int eid; /* Environment ID. */
+
+ u_int32_t gbytes; /* Limit on data sent in single... */
+ u_int32_t bytes; /* __rep_process_message call. */
+
+ u_int32_t request_gap; /* # of records to receive before we
+ * request a missing log record. */
+ u_int32_t max_gap; /* Maximum number of records before
+ * requesting a missing log record. */
+
+ u_int32_t config; /* Configuration flags. */
+ int config_nsites;
+ db_timeout_t elect_timeout;
+ int my_priority;
+ /*
+ * End of shared configuration information.
+ */
+
+ int (*send) /* Send function. */
+ __P((DB_ENV *, const DBT *, const DBT *,
+ const DB_LSN *, int, u_int32_t));
- DB_MUTEX *db_mutexp; /* Mutex for bookkeeping database. */
DB *rep_db; /* Bookkeeping database. */
REP *region; /* In memory structure. */
+ u_int8_t *bulk; /* Shared memory bulk area. */
+
#define DBREP_OPENFILES 0x0001 /* This handle has opened files. */
u_int32_t flags; /* per-process flags. */
+
+#ifdef HAVE_REPLICATION_THREADS
+ /*
+ * Replication Framework (repmgr) information.
+ */
+ int nthreads;
+ u_int32_t init_policy;
+ int perm_policy;
+ int peer; /* Site to use for C2C sync. */
+ db_timeout_t ack_timeout;
+ db_timeout_t election_retry_wait;
+ db_timeout_t connection_retry_wait;
+
+ /* Repmgr's copies of rep stuff. */
+ int master_eid;
+ u_int32_t generation;
+
+ /* Thread synchronization. */
+ REPMGR_RUNNABLE *selector, **messengers, *elect_thread;
+ mgr_mutex_t mutex;
+ cond_var_t queue_nonempty, check_election;
+#ifdef DB_WIN32
+ ACK_WAITERS_TABLE *waiters;
+ HANDLE signaler;
+ int wsa_inited;
+#else
+ pthread_cond_t ack_condition;
+ int read_pipe, write_pipe;
+ int chg_sig_handler;
+#endif
+
+ /* Operational stuff. */
+ REPMGR_SITE *sites; /* Array of known sites. */
+ u_int site_cnt; /* Array slots in use. */
+ u_int site_max; /* Total array slots allocated. */
+
+ CONNECTION_LIST connections;
+ RETRY_Q_HEADER retries; /* Sites needing connection retry. */
+ REPMGR_QUEUE *input_queue;
+
+ socket_t listen_fd;
+ repmgr_netaddr_t my_addr;
+
+ int finished;
+ int done_one; /* TODO: rename */
+ int found_master;
+
+/* The repertoire of operations we can ask election thread to perform: */
+#define ELECT_ELECTION 1 /* Call for an election. */
+#define ELECT_REPSTART 2 /* Call rep_start(CLIENT) to find a master. */
+#define ELECT_FAILURE_ELECTION 3 /* Do election, adjusting nsites to account
+ for a failed master. */
+ int operation_needed; /* Next op for election thread. */
+#endif /* HAVE_REPLICATION_THREADS */
};
/*
* Control structure for replication communication infrastructure.
- *
- * Note that the version information should be at the beginning of the
- * structure, so that we can rearrange the rest of it while letting the
- * version checks continue to work. DB_REPVERSION should be revved any time
- * the rest of the structure changes or when the message numbers change.
*/
-typedef struct __rep_control {
-#define DB_REPVERSION 2
+typedef struct {
+#define DB_REPVERSION 3
u_int32_t rep_version; /* Replication version number. */
u_int32_t log_version; /* Log version number. */
DB_LSN lsn; /* Log sequence number. */
u_int32_t rectype; /* Message type. */
u_int32_t gen; /* Generation number. */
+/*
+ * Define old DB_LOG_ values that we must support here.
+ */
+#define DB_LOG_PERM_42_44 0x20
+#define DB_LOG_RESEND_42_44 0x40
+
+#define REPCTL_ELECTABLE 0x01 /* Upgraded client is electable. */
+#define REPCTL_INIT 0x02 /* Internal init message. */
+#define REPCTL_PERM DB_LOG_PERM_42_44
+#define REPCTL_RESEND DB_LOG_RESEND_42_44
u_int32_t flags; /* log_put flag value. */
} REP_CONTROL;
+/* Election vote information, 4.2 version. Does not have nvotes. */
+typedef struct __rep_old_vote {
+ u_int32_t egen; /* Election generation. */
+ int nsites; /* Number of sites I've been in
+ * communication with. */
+ int priority; /* My site's priority. */
+ u_int32_t tiebreaker; /* Tie-breaking quasi-random value. */
+} REP_OLD_VOTE_INFO;
+
/* Election vote information. */
-typedef struct __rep_vote {
+typedef struct {
u_int32_t egen; /* Election generation. */
int nsites; /* Number of sites I've been in
* communication with. */
@@ -285,18 +475,55 @@ typedef struct __rep_vote {
u_int32_t tiebreaker; /* Tie-breaking quasi-random value. */
} REP_VOTE_INFO;
-typedef struct __rep_vtally {
+typedef struct {
u_int32_t egen; /* Voter's election generation. */
int eid; /* Voter's ID. */
} REP_VTALLY;
/*
+ * The REP_THROTTLE_ONLY flag is used to do throttle processing only.
+ * If set, it will only allow sending the REP_*_MORE message, but not
+ * the normal, non-throttled message. It is used to support throttling
+ * with bulk transfer.
+ */
+/* Flags for __rep_send_throttle. */
+#define REP_THROTTLE_ONLY 0x0001 /* Send _MORE message only. */
+
+/* Throttled message processing information. */
+typedef struct {
+ DB_LSN lsn; /* LSN of this record. */
+ DBT *data_dbt; /* DBT of this record. */
+ u_int32_t gbytes; /* This call's max gbytes sent. */
+ u_int32_t bytes; /* This call's max bytes sent. */
+ u_int32_t type; /* Record type. */
+} REP_THROTTLE;
+
+/* Bulk processing information. */
+/*
+ * !!!
+ * We use a uintptr_t for the offset. We'd really like to use a ptrdiff_t
+ * since that really is what it is. But ptrdiff_t is not portable and
+ * doesn't exist everywhere.
+ */
+typedef struct {
+ u_int8_t *addr; /* Address of bulk buffer. */
+ uintptr_t *offp; /* Ptr to current offset into buffer. */
+ u_int32_t len; /* Bulk buffer length. */
+ u_int32_t type; /* Item type in buffer (log, page). */
+ DB_LSN lsn; /* First LSN in buffer. */
+ int eid; /* ID of potential recipients. */
+#define BULK_FORCE 0x001 /* Force buffer after this record. */
+#define BULK_XMIT 0x002 /* Buffer in transit. */
+ u_int32_t *flagsp; /* Buffer flags. */
+} REP_BULK;
+
+/*
* This structure takes care of representing a transaction.
* It holds all the records, sorted by page number so that
* we can obtain locks and apply updates in a deadlock free
* order.
*/
-typedef struct __lsn_collection {
+typedef struct {
u_int nlsns;
u_int nalloc;
DB_LSN *array;
@@ -307,11 +534,15 @@ typedef struct __lsn_collection {
* apply the updates for a single transaction or a collection of
* transactions.
*/
-typedef struct _linfo {
+typedef struct {
int n;
DB_LOCKREQ *reqs;
DBT *objs;
} linfo_t;
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/rep_ext.h"
-#endif /* !_REP_H_ */
+#endif /* !_DB_REP_H_ */
diff --git a/db/dbinc/repmgr.h b/db/dbinc/repmgr.h
new file mode 100644
index 000000000..c027035f0
--- /dev/null
+++ b/db/dbinc/repmgr.h
@@ -0,0 +1,375 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr.h,v 12.10 2006/09/19 14:14:07 mjc Exp $
+ */
+
+#ifndef _DB_REPMGR_H_
+#define _DB_REPMGR_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*
+ * Replication Framework message types. Normal replication messages are
+ * encapsulated in repmgr messages of type REP_MESSAGE.
+ */
+#define REPMGR_ACK 1 /* Acknowledgement. */
+#define REPMGR_HANDSHAKE 2 /* Connection establishment sequence. */
+#define REPMGR_REP_MESSAGE 3 /* Normal replication message. */
+
+#ifdef DB_WIN32
+typedef SOCKET socket_t;
+typedef HANDLE thread_id_t;
+typedef HANDLE mgr_mutex_t;
+typedef HANDLE cond_var_t;
+typedef WSABUF db_iovec_t;
+#else
+typedef int socket_t;
+typedef pthread_t thread_id_t;
+typedef pthread_mutex_t mgr_mutex_t;
+typedef pthread_cond_t cond_var_t;
+typedef struct iovec db_iovec_t;
+#endif
+
+/*
+ * The system value is available from sysconf(_SC_HOST_NAME_MAX).
+ * Historically, the maximum host name was 256.
+ */
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 256
+#endif
+
+/* A buffer big enough for the string "site host.domain.com:65535". */
+#define MAX_SITE_LOC_STRING (MAXHOSTNAMELEN+20)
+typedef char SITE_STRING_BUFFER[MAX_SITE_LOC_STRING+1];
+
+struct __repmgr_connection;
+ typedef struct __repmgr_connection REPMGR_CONNECTION;
+struct __repmgr_queue; typedef struct __repmgr_queue REPMGR_QUEUE;
+struct __queued_output; typedef struct __queued_output QUEUED_OUTPUT;
+struct __repmgr_retry; typedef struct __repmgr_retry REPMGR_RETRY;
+struct __repmgr_runnable; typedef struct __repmgr_runnable REPMGR_RUNNABLE;
+struct __repmgr_site; typedef struct __repmgr_site REPMGR_SITE;
+struct __ack_waiters_table;
+ typedef struct __ack_waiters_table ACK_WAITERS_TABLE;
+
+typedef TAILQ_HEAD(__repmgr_conn_list, __repmgr_connection) CONNECTION_LIST;
+typedef STAILQ_HEAD(__repmgr_out_q_head, __queued_output) OUT_Q_HEADER;
+typedef TAILQ_HEAD(__repmgr_retry_q, __repmgr_retry) RETRY_Q_HEADER;
+
+/* Information about threads managed by Replication Framework. */
+struct __repmgr_runnable {
+ DB_ENV *dbenv;
+ thread_id_t thread_id;
+ void *(*run) __P((void *));
+ int finished;
+};
+
+typedef struct {
+ u_int32_t tv_sec;
+ u_int32_t tv_usec;
+} repmgr_timeval_t;
+
+/*
+ * Information about pending connection establishment retry operations.
+ *
+ * We keep these in order by time. This works, under the assumption that the
+ * DB_REP_CONNECTION_RETRY never changes once we get going (though that
+ * assumption is of course wrong, so this needs to be fixed).
+ *
+ * Usually, we put things onto the tail end of the list. But when we add a new
+ * site while threads are running, we trigger its first connection attempt by
+ * scheduling a retry for "0" microseconds from now, putting its retry element
+ * at the head of the list instead.
+ *
+ * TODO: I think this can be fixed by defining "time" to be the time the element
+ * was added (with some convention like "0" meaning immediate), rather than the
+ * deadline time.
+ */
+struct __repmgr_retry {
+ TAILQ_ENTRY(__repmgr_retry) entries;
+ u_int eid;
+ repmgr_timeval_t time;
+};
+
+/*
+ * We use scatter/gather I/O for both reading and writing. The largest number
+ * of buffers we ever try to use at once is 5, corresponding to the 5 segments
+ * of a message described in the "wire protocol" (repmgr_net.c).
+ */
+typedef struct {
+ db_iovec_t vectors[5];
+
+ /*
+ * Index of the first iovec to be used. Initially of course this is
+ * zero. But as we progress through partial I/O transfers, it ends up
+ * pointing to the first iovec to be used on the next operation.
+ */
+ int offset;
+
+ /*
+ * Total number of pieces defined for this message; equal to the number
+ * of times add_buffer and/or add_dbt were called to populate it. We do
+ * *NOT* revise this as we go along. So subsequent I/O operations must
+ * use count-offset to get the number of active vector pieces still
+ * remaining.
+ */
+ int count;
+
+ /*
+ * Total number of bytes accounted for in all the pieces of this
+ * message. We do *NOT* revise this as we go along (though it's not
+ * clear we shouldn't).
+ */
+ size_t total_bytes;
+} REPMGR_IOVECS;
+
+typedef struct {
+ size_t length; /* number of bytes in data */
+ int ref_count; /* # of sites' send queues pointing to us */
+ u_int8_t data[1]; /* variable size data area */
+} REPMGR_FLAT;
+
+struct __queued_output {
+ STAILQ_ENTRY(__queued_output) entries;
+ REPMGR_FLAT *msg;
+ size_t offset;
+};
+
+/*
+ * The following is for input. Once we know the sizes of the pieces of an
+ * incoming message, we can create this struct (and also the data areas for the
+ * pieces themselves, in the same memory allocation). This is also the struct
+ * in which the message lives while it's waiting to be processed by message
+ * threads.
+ */
+typedef struct __repmgr_message {
+ STAILQ_ENTRY(__repmgr_message) entries;
+ int originating_eid;
+ DBT control, rec;
+} REPMGR_MESSAGE;
+
+typedef enum {
+ SIZES_PHASE,
+ DATA_PHASE
+} phase_t;
+
+/*
+ * If another site initiates a connection to us, when we receive it the
+ * connection state is immediately "connected". But when we initiate the
+ * connection to another site, it first has to go through a "connecting" state,
+ * until the non-blocking connect() I/O operation completes successfully.
+ * With an outgoing connection, we always know the associated site (and so
+ * we have a valid eid). But with an incoming connection, we don't know the
+ * site until we get a handshake message, so until that time the eid is
+ * invalid.
+ */
+struct __repmgr_connection {
+ TAILQ_ENTRY(__repmgr_connection) entries;
+
+ int eid; /* index into sites array in machtab */
+ socket_t fd;
+#ifdef DB_WIN32
+ WSAEVENT event_object;
+#endif
+#define CONN_CONNECTING 0x01 /* nonblocking connect in progress */
+#define CONN_DEFUNCT 0x02 /* socket close pending */
+ u_int32_t flags;
+
+ /*
+ * Output: usually we just simply write messages right in line, in the
+ * send() function's thread. But if TCP doesn't have enough network
+ * buffer space for us when we first try it, we instead allocate some
+ * memory, and copy the message, and then send it as space becomes
+ * available in our main select() thread.
+ */
+ OUT_Q_HEADER outbound_queue;
+ int out_queue_length;
+
+ /*
+ * Input: while we're reading a message, we keep track of what phase
+ * we're in. In both phases, we use a REPMGR_IOVECS to keep track of
+ * our progress within the phase. Depending upon the message type, we
+ * end up with either a rep_message (which is a wrapper for the control
+ * and rec DBTs), or a single generic DBT.
+ * Any time we're in DATA_PHASE, it means we have already received
+ * the message header (consisting of msg_type and 2 sizes), and
+ * therefore we have allocated buffer space to read the data. (This is
+ * important for resource clean-up.)
+ */
+ phase_t reading_phase;
+ REPMGR_IOVECS iovecs;
+
+ u_int8_t msg_type;
+ u_int32_t control_size_buf, rec_size_buf;
+
+ union {
+ REPMGR_MESSAGE *rep_message;
+ struct {
+ DBT cntrl, rec;
+ } repmgr_msg;
+ } input;
+};
+
+#ifdef HAVE_GETADDRINFO
+typedef struct addrinfo ADDRINFO;
+#else
+/*
+ * Some windows platforms have getaddrinfo (Windows XP), some don't. We don't
+ * support conditional compilation in our Windows build, so we always use our
+ * own getaddrinfo implementation. Rename everything so that we don't collide
+ * with the system libraries.
+ */
+#undef AI_PASSIVE
+#define AI_PASSIVE 0x01
+#undef AI_CANONNAME
+#define AI_CANONNAME 0x02
+#undef AI_NUMERICHOST
+#define AI_NUMERICHOST 0x04
+
+typedef struct __addrinfo {
+ int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
+ int ai_family; /* PF_xxx */
+ int ai_socktype; /* SOCK_xxx */
+ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+ size_t ai_addrlen; /* length of ai_addr */
+ char *ai_canonname; /* canonical name for nodename */
+ struct sockaddr *ai_addr; /* binary address */
+ struct __addrinfo *ai_next; /* next structure in linked list */
+} ADDRINFO;
+#endif /* HAVE_GETADDRINFO */
+
+typedef struct {
+ char *host; /* Separately allocated copy of string. */
+ u_int16_t port; /* Stored in plain old host-byte-order. */
+ ADDRINFO *address_list;
+ ADDRINFO *current;
+} repmgr_netaddr_t;
+
+/*
+ * Each site that we know about is either idle or connected. If it's connected,
+ * we have a reference to a connection object; if it's idle, we have a reference
+ * to a retry object.
+ * We store site objects in a simple array in the machtab, indexed by EID.
+ * (We allocate EID numbers for other sites simply according to their index
+ * within this array; we use the special value INT_MAX to represent our own
+ * EID.)
+ */
+struct __repmgr_site {
+ repmgr_netaddr_t net_addr;
+ DB_LSN max_ack; /* Best ack we've heard from this site. */
+ int priority;
+
+#define SITE_IDLE 1 /* Waiting til time to retry connecting. */
+#define SITE_CONNECTED 2
+ int state;
+
+ union {
+ REPMGR_CONNECTION *conn; /* when CONNECTED */
+ REPMGR_RETRY *retry; /* when IDLE */
+ } ref;
+};
+
+/*
+ * Repmgr message formats. We pass these in the "control" portion of a message.
+ * For an ack, we just let the "rec" part go unused. But for a handshake, the
+ * "rec" part contains the variable-length host name (including terminating NUL
+ * character).
+ */
+typedef struct {
+ u_int32_t generation;
+ DB_LSN lsn;
+} DB_REPMGR_ACK;
+
+/*
+ * The hand-shake message is exchanged upon establishment of a connection. The
+ * message protocol version number here refers to the connection as a whole. In
+ * other words, it's an assertion that every message sent or received on this
+ * connection shall be of the specified version. Since repmgr uses TCP, a
+ * reliable stream-oriented protocol, this assertion is meaningful.
+ */
+typedef struct {
+#define DB_REPMGR_VERSION 1
+ u_int32_t version;
+ u_int16_t port;
+ u_int32_t priority;
+} DB_REPMGR_HANDSHAKE;
+
+/*
+ * We store site structs in a dynamically allocated, growable array, indexed by
+ * EID. We allocate EID numbers for remote sites simply according to their
+ * index within this array. We don't need (the same kind of) info for ourself
+ * (the local site), so we use an EID value that won't conflict with any valid
+ * array index.
+ */
+#define SITE_FROM_EID(eid) (&db_rep->sites[eid])
+#define EID_FROM_SITE(s) ((int)((s) - (&db_rep->sites[0])))
+#define IS_VALID_EID(e) ((e) >= 0)
+#define SELF_EID INT_MAX
+
+#define IS_PEER_POLICY(p) ((p) == DB_REPMGR_ACKS_ALL_PEERS || \
+ (p) == DB_REPMGR_ACKS_QUORUM || \
+ (p) == DB_REPMGR_ACKS_ONE_PEER)
+
+#define LOCK_MUTEX(m) do { \
+ int __ret; \
+ if ((__ret = __repmgr_lock_mutex(&(m))) != 0) \
+ return (__ret); \
+} while (0)
+
+#define UNLOCK_MUTEX(m) do { \
+ int __ret; \
+ if ((__ret = __repmgr_unlock_mutex(&(m))) != 0) \
+ return (__ret); \
+} while (0)
+
+/* POSIX/Win32 socket (and other) portability. */
+#ifdef DB_WIN32
+#define WOULDBLOCK WSAEWOULDBLOCK
+#define INPROGRESS WSAEWOULDBLOCK
+
+#define net_errno WSAGetLastError()
+typedef int socklen_t;
+typedef char * sockopt_t;
+
+#define iov_len len
+#define iov_base buf
+
+typedef DWORD select_timeout_t;
+typedef DWORD threadsync_timeout_t;
+
+#define REPMGR_SYNC_INITED(db_rep) (db_rep->waiters != NULL)
+#else
+
+#define INVALID_SOCKET -1
+#define SOCKET_ERROR -1
+#define WOULDBLOCK EWOULDBLOCK
+#define INPROGRESS EINPROGRESS
+
+#define net_errno errno
+typedef void * sockopt_t;
+
+#define closesocket(fd) close(fd)
+
+typedef struct timeval select_timeout_t;
+typedef struct timespec threadsync_timeout_t;
+
+#define REPMGR_SYNC_INITED(db_rep) (db_rep->read_pipe >= 0)
+#endif
+
+/* Macros to proceed, as with a cursor, through the address_list: */
+#define ADDR_LIST_CURRENT(na) ((na)->current)
+#define ADDR_LIST_FIRST(na) ((na)->current = (na)->address_list)
+#define ADDR_LIST_NEXT(na) ((na)->current = (na)->current->ai_next)
+
+#include "dbinc_auto/repmgr_ext.h"
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_DB_REPMGR_H_ */
diff --git a/db/dbinc/shqueue.h b/db/dbinc/shqueue.h
index 8d7e4eef9..ffaa15748 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: shqueue.h,v 11.15 2004/03/24 20:37:37 bostic Exp $
+ * $Id: shqueue.h,v 12.9 2006/09/07 15:11:26 mjc Exp $
*/
-#ifndef _SYS_SHQUEUE_H_
-#define _SYS_SHQUEUE_H_
+#ifndef _DB_SHQUEUE_H_
+#define _DB_SHQUEUE_H_
/*
- * This file defines two types of data structures: lists and tail queues
- * similarly to the include file <sys/queue.h>.
+ * This file defines three types of data structures: chains, 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
@@ -35,6 +35,70 @@
extern "C" {
#endif
+#define SH_PTR_TO_OFF(src, dest) \
+ ((ssize_t)(((u_int8_t *)(dest)) - ((u_int8_t *)(src))))
+
+/*
+ * Shared memory chain definitions.
+ */
+#define SH_CHAIN_ENTRY \
+struct { \
+ ssize_t sce_next; /* relative offset to next element */ \
+ ssize_t sce_prev; /* relative offset of prev element */ \
+}
+
+#define SH_CHAIN_INIT(elm, field) \
+ (elm)->field.sce_next = (elm)->field.sce_prev = -1
+
+#define SH_CHAIN_HASNEXT(elm, field) ((elm)->field.sce_next != -1)
+#define SH_CHAIN_NEXTP(elm, field, type) \
+ ((struct type *)((u_int8_t *)(elm) + (elm)->field.sce_next))
+#define SH_CHAIN_NEXT(elm, field, type) (SH_CHAIN_HASNEXT(elm, field) ? \
+ SH_CHAIN_NEXTP(elm, field, type) : (struct type *)NULL)
+
+#define SH_CHAIN_HASPREV(elm, field) ((elm)->field.sce_prev != -1)
+#define SH_CHAIN_PREVP(elm, field, type) \
+ ((struct type *)((u_int8_t *)(elm) + (elm)->field.sce_prev))
+#define SH_CHAIN_PREV(elm, field, type) (SH_CHAIN_HASPREV(elm, field) ? \
+ SH_CHAIN_PREVP(elm, field, type) : (struct type *)NULL)
+
+#define SH_CHAIN_SINGLETON(elm, field) \
+ (!(SH_CHAIN_HASNEXT(elm, field) || SH_CHAIN_HASPREV(elm, field)))
+
+#define SH_CHAIN_INSERT_AFTER(listelm, elm, field, type) do { \
+ struct type *__next = SH_CHAIN_NEXT(listelm, field, type); \
+ if (__next != NULL) { \
+ (elm)->field.sce_next = SH_PTR_TO_OFF(elm, __next); \
+ __next->field.sce_prev = SH_PTR_TO_OFF(__next, elm); \
+ } else \
+ (elm)->field.sce_next = -1; \
+ (elm)->field.sce_prev = SH_PTR_TO_OFF(elm, listelm); \
+ (listelm)->field.sce_next = SH_PTR_TO_OFF(listelm, elm); \
+} while (0)
+
+#define SH_CHAIN_INSERT_BEFORE(listelm, elm, field, type) do { \
+ struct type *__prev = SH_CHAIN_PREV(listelm, field, type); \
+ if (__prev != NULL) { \
+ (elm)->field.sce_prev = SH_PTR_TO_OFF(elm, __prev); \
+ __prev->field.sce_next = SH_PTR_TO_OFF(__prev, elm); \
+ } else \
+ (elm)->field.sce_prev = -1; \
+ (elm)->field.sce_next = SH_PTR_TO_OFF(elm, listelm); \
+ (listelm)->field.sce_prev = SH_PTR_TO_OFF(listelm, elm); \
+} while (0)
+
+#define SH_CHAIN_REMOVE(elm, field, type) do { \
+ struct type *__prev = SH_CHAIN_PREV(elm, field, type); \
+ struct type *__next = SH_CHAIN_NEXT(elm, field, type); \
+ if (__next != NULL) \
+ __next->field.sce_prev = (__prev == NULL) ? -1 : \
+ SH_PTR_TO_OFF(__next, __prev); \
+ if (__prev != NULL) \
+ __prev->field.sce_next = (__next == NULL) ? -1 : \
+ SH_PTR_TO_OFF(__prev, __next); \
+ SH_CHAIN_INIT(elm, field); \
+} while (0)
+
/*
* Shared memory list definitions.
*/
@@ -55,7 +119,6 @@ struct { \
/*
* Shared memory list functions.
*/
-
#define SH_LIST_EMPTY(head) \
((head)->slh_first == -1)
@@ -82,16 +145,13 @@ struct { \
((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)))
+ (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) != NULL; \
(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]
@@ -227,12 +287,14 @@ struct { \
#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) + \
+#define SH_TAILQ_LASTP(head, field, type) \
+ ((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))))))
+ &(SH_TAILQ_FIRSTP(head, type)->field.stqe_next))))))
+
+#define SH_TAILQ_LAST(head, field, type) \
+ (SH_TAILQ_EMPTY(head) ? NULL : SH_TAILQ_LASTP(head, field, type))
/*
* Given correct A.next: B.prev = SH_TAILQ_NEXT_TO_PREV(A)
@@ -250,12 +312,12 @@ struct { \
#define SH_TAILQ_FOREACH(var, head, field, type) \
for ((var) = SH_TAILQ_FIRST((head), type); \
- (var); \
+ (var) != NULL; \
(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) != NULL; \
(var) = SH_TAILQ_PREV((head), (var), field, type))
#define SH_TAILQ_INIT(head) { \
@@ -342,4 +404,4 @@ struct { \
#if defined(__cplusplus)
}
#endif
-#endif /* !_SYS_SHQUEUE_H_ */
+#endif /* !_DB_SHQUEUE_H_ */
diff --git a/db/dbinc/tcl_db.h b/db/dbinc/tcl_db.h
index f1adea5ae..4f589431b 100644
--- a/db/dbinc/tcl_db.h
+++ b/db/dbinc/tcl_db.h
@@ -1,20 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_db.h,v 11.40 2004/09/22 03:40:20 bostic Exp $
+ * $Id: tcl_db.h,v 12.8 2006/08/24 14:45:30 bostic Exp $
*/
#ifndef _DB_TCL_DB_H_
#define _DB_TCL_DB_H_
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
#define MSG_SIZE 100 /* Message size */
enum INFOTYPE {
- I_ENV, I_DB, I_DBC, I_TXN, I_MP,
- I_PG, I_LOCK, I_LOGC, I_NDBM, I_MUTEX, I_SEQ};
+ I_ENV, I_DB, I_DBC, I_TXN, I_MP, I_PG, I_LOCK, I_LOGC, I_NDBM, I_SEQ};
#define MAX_ID 8 /* Maximum number of sub-id's we need */
#define DBTCL_PREP 64 /* Size of txn_recover preplist */
@@ -22,33 +25,6 @@ enum INFOTYPE {
#define DBTCL_DBM 1
#define DBTCL_NDBM 2
-typedef struct _mutex_entry {
- union {
- struct {
- DB_MUTEX real_m;
- int real_val;
- } r;
- /*
- * This is here to make sure that each of the mutex structures
- * are 16-byte aligned, which is required on HP architectures.
- * The db_mutex_t structure might be >32 bytes itself, or the
- * real_val might push it over the 32 byte boundary. The best
- * we can do is use a 48 byte boundary.
- */
- char c[48];
- } u;
-} _MUTEX_ENTRY;
-
-#define m u.r.real_m
-#define val u.r.real_val
-
-typedef struct _mutex_data {
- DB_ENV *env;
- REGINFO reginfo;
- _MUTEX_ENTRY *marray;
- size_t size;
-} _MUTEX_DATA;
-
/*
* Why use a home grown package over the Tcl_Hash functions?
*
@@ -83,15 +59,14 @@ typedef struct dbtcl_info {
char *i_name;
enum INFOTYPE i_type;
union infop {
- DB_ENV *envp;
- void *anyp;
DB *dbp;
DBC *dbcp;
- DB_TXN *txnp;
- DB_MPOOLFILE *mp;
+ DB_ENV *envp;
DB_LOCK *lock;
- _MUTEX_DATA *mutex;
DB_LOGC *logc;
+ DB_MPOOLFILE *mp;
+ DB_TXN *txnp;
+ void *anyp;
} un;
union data {
int anydata;
@@ -101,6 +76,7 @@ typedef struct dbtcl_info {
union data2 {
int anydata;
int pagesz;
+ DB_COMPACT *c_data;
} und2;
DBT i_lockobj;
FILE *i_err;
@@ -109,6 +85,7 @@ typedef struct dbtcl_info {
/* Callbacks--Tcl_Objs containing proc names */
Tcl_Obj *i_btcompare;
Tcl_Obj *i_dupcompare;
+ Tcl_Obj *i_event;
Tcl_Obj *i_hashproc;
Tcl_Obj *i_rep_send;
Tcl_Obj *i_second_call;
@@ -128,7 +105,6 @@ typedef struct dbtcl_info {
#define i_txnp un.txnp
#define i_mp un.mp
#define i_lock un.lock
-#define i_mutex un.mutex
#define i_logc un.logc
#define i_data und.anydata
@@ -136,12 +112,12 @@ typedef struct dbtcl_info {
#define i_locker und.lockid
#define i_data2 und2.anydata
#define i_pgsz und2.pagesz
+#define i_cdata und2.c_data
#define i_envtxnid i_otherid[0]
#define i_envmpid i_otherid[1]
#define i_envlockid i_otherid[2]
-#define i_envmutexid i_otherid[3]
-#define i_envlogcid i_otherid[4]
+#define i_envlogcid i_otherid[3]
#define i_mppgid i_otherid[0]
@@ -266,5 +242,9 @@ extern DBTCL_GLOBAL __dbtcl_global;
#define IS_HELP(s) \
(strcmp(Tcl_GetStringFromObj(s,NULL), "-?") == 0) ? TCL_OK : TCL_ERROR
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/tcl_ext.h"
#endif /* !_DB_TCL_DB_H_ */
diff --git a/db/dbinc/txn.h b/db/dbinc/txn.h
index 514b740e8..4d0048809 100644
--- a/db/dbinc/txn.h
+++ b/db/dbinc/txn.h
@@ -1,17 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn.h,v 11.54 2004/09/24 00:43:18 bostic Exp $
+ * $Id: txn.h,v 12.13 2006/08/24 14:45:30 bostic Exp $
*/
-#ifndef _TXN_H_
-#define _TXN_H_
+#ifndef _DB_TXN_H_
+#define _DB_TXN_H_
#include "dbinc/xa.h"
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/* Operation parameters to the delayed commit processing code. */
typedef enum {
TXN_CLOSE, /* Close a DB handle whose close had failed. */
@@ -31,7 +35,7 @@ struct __txn_logrec; typedef struct __txn_logrec DB_TXNLOGREC;
#define TXN_MAXIMUM 0xffffffff /* Maximum number of txn ids. */
#define TXN_INVALID 0 /* Invalid transaction ID. */
-#define DEF_MAX_TXNS 20 /* Default max transactions. */
+#define DEF_MAX_TXNS 100 /* Default max transactions. */
/*
* Internal data maintained in shared memory for each transaction.
@@ -39,27 +43,35 @@ struct __txn_logrec; typedef struct __txn_logrec DB_TXNLOGREC;
typedef struct __txn_detail {
u_int32_t txnid; /* current transaction id
used to link free list also */
- DB_LSN last_lsn; /* last lsn written for this txn */
- DB_LSN begin_lsn; /* lsn of begin record */
+ pid_t pid; /* Process owning txn */
+ db_threadid_t tid; /* Thread owning txn */
+
+ DB_LSN last_lsn; /* Last LSN written for this txn. */
+ DB_LSN begin_lsn; /* LSN of begin record. */
roff_t parent; /* Offset of transaction's parent. */
+ roff_t name; /* Offset of txn name. */
+
+ DB_LSN read_lsn; /* Read LSN for MVCC. */
+ DB_LSN visible_lsn; /* LSN at which this transaction's
+ changes are visible. */
+ db_mutex_t mvcc_mtx; /* Version mutex. */
+ u_int32_t mvcc_ref; /* Number of buffers created by this
+ transaction still in cache. */
-#define TXN_RUNNING 1
-#define TXN_ABORTED 2
-#define TXN_PREPARED 3
-#define TXN_COMMITTED 4
+ SH_TAILQ_HEAD(__tdkids) kids; /* Linked list of child txn detail. */
+ SH_TAILQ_ENTRY klinks;
+
+ /* TXN_{ABORTED, COMMITTED PREPARED, RUNNING} */
u_int32_t status; /* status of the transaction */
-#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 */
-
-#define TXN_XA_ABORTED 1
-#define TXN_XA_DEADLOCKED 2
-#define TXN_XA_ENDED 3
-#define TXN_XA_PREPARED 4
-#define TXN_XA_STARTED 5
-#define TXN_XA_SUSPENDED 6
+
+#define TXN_DTL_COLLECTED 0x1 /* collected during txn_recover */
+#define TXN_DTL_RESTORED 0x2 /* prepared txn restored */
+#define TXN_DTL_INMEMORY 0x4 /* uses in memory logs */
+ u_int32_t flags;
+
+ /* TXN_XA_{ABORTED, DEADLOCKED, ENDED, PREPARED, STARTED, SUSPENDED} */
+ SH_TAILQ_ENTRY links; /* active/free/snapshot list */
+
u_int32_t xa_status; /* XA status */
/*
@@ -80,33 +92,40 @@ struct __db_txnmgr {
/*
* These fields need to 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.
+ * Lock list of active transactions (including the content of each
+ * TXN_DETAIL structure on the list).
*/
- DB_MUTEX *mutexp; /* Lock list of active transactions
- * (including the content of each
- * TXN_DETAIL structure on the list).
- */
+ db_mutex_t mutex;
/* List of active transactions. */
TAILQ_HEAD(_chain, __db_txn) txn_chain;
- u_int32_t n_discards; /* Number of txns discarded. */
-/* These fields are never updated after creation, and so not protected. */
- DB_ENV *dbenv; /* Environment. */
- REGINFO reginfo; /* Region information. */
+ u_int32_t n_discards; /* Number of txns discarded. */
+
+ /* These fields are never updated after creation, so not protected. */
+ DB_ENV *dbenv; /* Environment. */
+ REGINFO reginfo; /* Region information. */
};
+/* Macros to lock/unlock the transaction region as a whole. */
+#define TXN_SYSTEM_LOCK(dbenv) \
+ MUTEX_LOCK(dbenv, ((DB_TXNREGION *) \
+ (dbenv)->tx_handle->reginfo.primary)->mtx_region)
+#define TXN_SYSTEM_UNLOCK(dbenv) \
+ MUTEX_UNLOCK(dbenv, ((DB_TXNREGION *) \
+ (dbenv)->tx_handle->reginfo.primary)->mtx_region)
+
/*
* DB_TXNREGION --
* The primary transaction data structure in the shared memory region.
*/
struct __db_txnregion {
+ db_mutex_t mtx_region; /* Region mutex. */
+
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_mutex_t mtx_ckp; /* Single thread checkpoints. */
DB_LSN last_ckp; /* lsn of the last checkpoint */
time_t time_ckp; /* time of last checkpoint */
@@ -116,11 +135,7 @@ struct __db_txnregion {
u_int32_t flags;
/* active TXN list */
SH_TAILQ_HEAD(__active) active_txn;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-#define TXN_MAINT_SIZE (sizeof(roff_t) * DB_MAX_HANDLES)
-
- roff_t maint_off; /* offset of region maintenance info */
-#endif
+ SH_TAILQ_HEAD(__mvcc) mvcc_txn;
};
/*
@@ -209,7 +224,11 @@ struct __txn_logrec {
#define TXN_EXPECTED 5
#define TXN_UNEXPECTED 6
+#if defined(__cplusplus)
+}
+#endif
+
#include "dbinc_auto/txn_auto.h"
#include "dbinc_auto/txn_ext.h"
#include "dbinc_auto/xa_ext.h"
-#endif /* !_TXN_H_ */
+#endif /* !_DB_TXN_H_ */
diff --git a/db/dbinc/xa.h b/db/dbinc/xa.h
index 71333c2c9..5768c58c9 100644
--- a/db/dbinc/xa.h
+++ b/db/dbinc/xa.h
@@ -1,18 +1,22 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: xa.h,v 11.7 2004/01/28 03:36:02 bostic Exp $
+ * $Id: xa.h,v 12.4 2006/08/24 14:45:30 bostic Exp $
*/
/*
* Start of xa.h header
*
* Define a symbol to prevent multiple inclusions of this header file
*/
-#ifndef XA_H
-#define XA_H
+#ifndef _DB_XA_H_
+#define _DB_XA_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
/*
* Transaction branch identification: XID and NULLXID:
@@ -173,7 +177,8 @@ struct xa_switch_t {
#define XAER_DUPID -8 /* the XID already exists */
#define XAER_OUTSIDE -9 /* resource manager doing work outside
transaction */
-#endif /* ifndef XA_H */
-/*
- * End of xa.h header
- */
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_DB_XA_H_ */
diff --git a/db/dbinc_auto/btree_auto.h b/db/dbinc_auto/btree_auto.h
index d9d4e47ad..d39ee3b08 100644
--- a/db/dbinc_auto/btree_auto.h
+++ b/db/dbinc_auto/btree_auto.h
@@ -5,7 +5,7 @@
#define DB___bam_split 62
typedef struct ___bam_split_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t left;
@@ -23,7 +23,7 @@ typedef struct ___bam_split_args {
#define DB___bam_rsplit 63
typedef struct ___bam_rsplit_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -37,7 +37,7 @@ typedef struct ___bam_rsplit_args {
#define DB___bam_adj 55
typedef struct ___bam_adj_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -50,7 +50,7 @@ typedef struct ___bam_adj_args {
#define DB___bam_cadjust 56
typedef struct ___bam_cadjust_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -63,7 +63,7 @@ typedef struct ___bam_cadjust_args {
#define DB___bam_cdel 57
typedef struct ___bam_cdel_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -74,7 +74,7 @@ typedef struct ___bam_cdel_args {
#define DB___bam_repl 58
typedef struct ___bam_repl_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -90,7 +90,7 @@ typedef struct ___bam_repl_args {
#define DB___bam_root 59
typedef struct ___bam_root_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t meta_pgno;
@@ -101,7 +101,7 @@ typedef struct ___bam_root_args {
#define DB___bam_curadj 64
typedef struct ___bam_curadj_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_ca_mode mode;
@@ -116,7 +116,7 @@ typedef struct ___bam_curadj_args {
#define DB___bam_rcuradj 65
typedef struct ___bam_rcuradj_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
ca_recno_arg mode;
@@ -125,18 +125,60 @@ typedef struct ___bam_rcuradj_args {
u_int32_t order;
} __bam_rcuradj_args;
+#define DB___bam_relink_43 147
+typedef struct ___bam_relink_43_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t pgno;
+ DB_LSN lsn;
+ db_pgno_t prev;
+ DB_LSN lsn_prev;
+ db_pgno_t next;
+ DB_LSN lsn_next;
+} __bam_relink_43_args;
+
#define DB___bam_relink 147
typedef struct ___bam_relink_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
- DB_LSN lsn;
+ db_pgno_t new_pgno;
db_pgno_t prev;
DB_LSN lsn_prev;
db_pgno_t next;
DB_LSN lsn_next;
} __bam_relink_args;
+#define DB___bam_merge 148
+typedef struct ___bam_merge_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t pgno;
+ DB_LSN lsn;
+ db_pgno_t npgno;
+ DB_LSN nlsn;
+ DBT hdr;
+ DBT data;
+ DBT ind;
+} __bam_merge_args;
+
+#define DB___bam_pgno 149
+typedef struct ___bam_pgno_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t pgno;
+ DB_LSN lsn;
+ u_int32_t indx;
+ db_pgno_t opgno;
+ db_pgno_t npgno;
+} __bam_pgno_args;
+
#endif
diff --git a/db/dbinc_auto/btree_ext.h b/db/dbinc_auto/btree_ext.h
index 9acb14051..82916e84b 100644
--- a/db/dbinc_auto/btree_ext.h
+++ b/db/dbinc_auto/btree_ext.h
@@ -6,20 +6,21 @@
extern "C" {
#endif
-int __bam_cmp __P((DB *, const DBT *, PAGE *, u_int32_t, int (*)(DB *, const DBT *, const DBT *), int *));
+int __bam_compact __P((DB *, DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
+int __bam_cmp __P((DB *, DB_TXN *, const DBT *, PAGE *, u_int32_t, int (*)(DB *, const DBT *, const DBT *), int *));
int __bam_defcmp __P((DB *, const DBT *, const DBT *));
size_t __bam_defpfx __P((DB *, const DBT *, const DBT *));
int __bam_pgin __P((DB_ENV *, DB *, db_pgno_t, void *, DBT *));
int __bam_pgout __P((DB_ENV *, DB *, db_pgno_t, void *, DBT *));
int __bam_mswap __P((PAGE *));
-int __bam_ca_delete __P((DB *, db_pgno_t, u_int32_t, int));
-int __ram_ca_delete __P((DB *, db_pgno_t));
+int __bam_ca_delete __P((DB *, db_pgno_t, u_int32_t, int, int *));
+int __ram_ca_delete __P((DB *, db_pgno_t, int *));
int __bam_ca_di __P((DBC *, db_pgno_t, u_int32_t, int));
int __bam_ca_dup __P((DBC *, u_int32_t, db_pgno_t, u_int32_t, db_pgno_t, u_int32_t));
int __bam_ca_undodup __P((DB *, u_int32_t, db_pgno_t, u_int32_t, u_int32_t));
int __bam_ca_rsplit __P((DBC *, db_pgno_t, db_pgno_t));
int __bam_ca_split __P((DBC *, db_pgno_t, db_pgno_t, db_pgno_t, u_int32_t, int));
-void __bam_ca_undosplit __P((DB *, db_pgno_t, db_pgno_t, db_pgno_t, u_int32_t));
+int __bam_ca_undosplit __P((DB *, db_pgno_t, db_pgno_t, db_pgno_t, u_int32_t));
int __bam_c_init __P((DBC *, DBTYPE));
int __bam_c_refresh __P((DBC *));
int __bam_c_count __P((DBC *, db_recno_t *));
@@ -27,10 +28,12 @@ int __bam_c_dup __P((DBC *, DBC *));
int __bam_bulk_overflow __P((DBC *, u_int32_t, db_pgno_t, u_int8_t *));
int __bam_bulk_duplicates __P((DBC *, db_pgno_t, u_int8_t *, int32_t *, int32_t **, u_int8_t **, u_int32_t *, int));
int __bam_c_rget __P((DBC *, DBT *));
+int __bam_opd_exists __P((DBC *, db_pgno_t));
int __bam_ditem __P((DBC *, PAGE *, u_int32_t));
int __bam_adjindx __P((DBC *, PAGE *, u_int32_t, u_int32_t, int));
-int __bam_dpages __P((DBC *, EPG *));
-int __bam_relink __P((DBC *, PAGE *, PAGE **));
+int __bam_dpages __P((DBC *, int, int));
+int __bam_relink __P((DBC *, PAGE *, db_pgno_t));
+int __bam_pupdate __P((DBC *, PAGE *));
int __bam_db_create __P((DB *));
int __bam_db_close __P((DB *));
void __bam_map_flags __P((DB *, u_int32_t *, u_int32_t *));
@@ -58,6 +61,9 @@ 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_relink_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __bam_merge_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __bam_pgno_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __bam_relink_43_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_reclaim __P((DB *, DB_TXN *));
int __bam_truncate __P((DBC *, u_int32_t *));
int __ram_open __P((DB *, DB_TXN *, const char *, db_pgno_t, u_int32_t));
@@ -65,17 +71,19 @@ int __ram_append __P((DBC *, DBT *, DBT *));
int __ram_c_del __P((DBC *));
int __ram_c_get __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int __ram_c_put __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
-int __ram_ca __P((DBC *, ca_recno_arg));
+int __ram_ca __P((DBC *, ca_recno_arg, int *));
int __ram_getno __P((DBC *, const DBT *, db_recno_t *, int));
int __ram_writeback __P((DB *));
int __bam_rsearch __P((DBC *, db_recno_t *, u_int32_t, int, int *));
int __bam_adjust __P((DBC *, int32_t));
int __bam_nrecs __P((DBC *, db_recno_t *));
db_recno_t __bam_total __P((DB *, PAGE *));
+int __bam_get_root __P((DBC *, db_pgno_t, int, u_int32_t, int *));
int __bam_search __P((DBC *, db_pgno_t, const DBT *, u_int32_t, int, db_recno_t *, int *));
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_pinsert __P((DBC *, EPG *, PAGE *, PAGE *, int));
int __bam_copy __P((DB *, PAGE *, PAGE *, u_int32_t, u_int32_t));
int __bam_stat __P((DBC *, void *, u_int32_t));
int __bam_stat_print __P((DBC *, u_int32_t));
@@ -113,8 +121,13 @@ int __bam_curadj_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_ca_mode, db_pg
int __bam_curadj_read __P((DB_ENV *, void *, __bam_curadj_args **));
int __bam_rcuradj_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, ca_recno_arg, db_pgno_t, db_recno_t, u_int32_t));
int __bam_rcuradj_read __P((DB_ENV *, void *, __bam_rcuradj_args **));
-int __bam_relink_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *));
+int __bam_relink_43_read __P((DB_ENV *, void *, __bam_relink_43_args **));
+int __bam_relink_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, db_pgno_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *));
int __bam_relink_read __P((DB_ENV *, void *, __bam_relink_args **));
+int __bam_merge_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, const DBT *, const DBT *, const DBT *));
+int __bam_merge_read __P((DB_ENV *, void *, __bam_merge_args **));
+int __bam_pgno_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, u_int32_t, db_pgno_t, db_pgno_t));
+int __bam_pgno_read __P((DB_ENV *, void *, __bam_pgno_args **));
int __bam_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __bam_split_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_rsplit_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -125,7 +138,10 @@ int __bam_repl_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_root_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_curadj_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_rcuradj_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __bam_relink_43_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_relink_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __bam_merge_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __bam_pgno_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
#if defined(__cplusplus)
diff --git a/db/dbinc_auto/clib_ext.h b/db/dbinc_auto/clib_ext.h
index a471268e0..941152326 100644
--- a/db/dbinc_auto/clib_ext.h
+++ b/db/dbinc_auto/clib_ext.h
@@ -6,12 +6,40 @@
extern "C" {
#endif
+#ifndef HAVE_ABORT
+void abort __P((void));
+#endif
+#ifndef HAVE_ATOI
+int atoi __P((const char *));
+#endif
+#ifndef HAVE_ATOL
+long atol __P((const char *));
+#endif
+char *__db_ctime __P((const time_t *, char *));
+#if defined(HAVE_REPLICATION_THREADS)
+int __db_getaddrinfo __P((DB_ENV *, const char *, u_int, const char *, const ADDRINFO *, ADDRINFO **));
+#endif
+#if defined(HAVE_REPLICATION_THREADS)
+void __db_freeaddrinfo __P((DB_ENV *, ADDRINFO *));
+#endif
#ifndef HAVE_GETCWD
char *getcwd __P((char *, size_t));
#endif
#ifndef HAVE_GETOPT
int getopt __P((int, char * const *, const char *));
#endif
+#ifndef HAVE_ISALPHA
+int isalpha __P((int));
+#endif
+#ifndef HAVE_ISDIGIT
+int isdigit __P((int));
+#endif
+#ifndef HAVE_ISPRINT
+int isprint __P((int));
+#endif
+#ifndef HAVE_ISSPACE
+int isspace __P((int));
+#endif
#ifndef HAVE_MEMCMP
int memcmp __P((const void *, const void *, size_t));
#endif
@@ -21,9 +49,22 @@ void *memcpy __P((void *, const void *, size_t));
#ifndef HAVE_MEMMOVE
void *memmove __P((void *, const void *, size_t));
#endif
+#ifndef HAVE_PRINTF
+int printf __P((const char *, ...));
+#endif
+#ifndef HAVE_PRINTF
+int fprintf __P((FILE *, const char *, ...));
+#endif
+#ifndef HAVE_PRINTF
+int vfprintf __P((FILE *, const char *, va_list));
+#endif
#ifndef HAVE_RAISE
int raise __P((int));
#endif
+#ifndef HAVE_RAND
+int rand __P((void));
+void srand __P((unsigned int));
+#endif
#ifndef HAVE_SNPRINTF
int snprintf __P((char *, size_t, const char *, ...));
#endif
@@ -36,12 +77,36 @@ int strcasecmp __P((const char *, const char *));
#ifndef HAVE_STRCASECMP
int strncasecmp __P((const char *, const char *, size_t));
#endif
+#ifndef HAVE_STRCAT
+char *strcat __P((char *, const char *));
+#endif
+#ifndef HAVE_STRCHR
+char *strchr __P((const char *, int));
+#endif
#ifndef HAVE_STRDUP
char *strdup __P((const char *));
#endif
#ifndef HAVE_STRERROR
char *strerror __P((int));
#endif
+#ifndef HAVE_STRNCAT
+char *strncat __P((char *, const char *, size_t));
+#endif
+#ifndef HAVE_STRNCMP
+int strncmp __P((const char *, const char *, size_t));
+#endif
+#ifndef HAVE_STRRCHR
+char *strrchr __P((const char *, int));
+#endif
+#ifndef HAVE_STRSEP
+char *strsep __P((char **, const char *));
+#endif
+#ifndef HAVE_STRTOL
+long strtol __P((const char *, char **, int));
+#endif
+#ifndef HAVE_STRTOUL
+unsigned long strtoul __P((const char *, char **, int));
+#endif
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/common_ext.h b/db/dbinc_auto/common_ext.h
index d9f05406d..8d90d72fe 100644
--- a/db/dbinc_auto/common_ext.h
+++ b/db/dbinc_auto/common_ext.h
@@ -9,6 +9,7 @@ extern "C" {
int __crypto_region_init __P((DB_ENV *));
int __db_isbigendian __P((void));
int __db_byteorder __P((DB_ENV *, int));
+void __db_difftime __P((u_int32_t, u_int32_t, u_int32_t, u_int32_t, u_int32_t *, u_int32_t *));
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));
@@ -16,27 +17,37 @@ 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));
#ifdef DIAGNOSTIC
-void __db_assert __P((const char *, const char *, int));
+void __db_assert __P((DB_ENV *, 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 *, ...)) __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_panic_set __P((DB_ENV *, int));
+char *__db_unknown_error __P((int));
+void __db_syserr __P((const DB_ENV *, int, const char *, ...)) __attribute__ ((__format__ (__printf__, 3, 4)));
+void __db_err __P((const DB_ENV *, int, const char *, ...)) __attribute__ ((__format__ (__printf__, 3, 4)));
+void __db_errx __P((const DB_ENV *, const char *, ...)) __attribute__ ((__format__ (__printf__, 2, 3)));
+void __db_errcall __P((const DB_ENV *, int, db_error_set_t, const char *, va_list));
+void __db_errfile __P((const DB_ENV *, int, db_error_set_t, const char *, va_list));
void __db_msgadd __P((DB_ENV *, DB_MSGBUF *, const char *, ...)) __attribute__ ((__format__ (__printf__, 3, 4)));
void __db_msg __P((const DB_ENV *, const char *, ...)) __attribute__ ((__format__ (__printf__, 2, 3)));
-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_unknown_path __P((DB_ENV *, char *));
int __db_check_txn __P((DB *, DB_TXN *, u_int32_t, int));
+int __db_txn_deadlock_err __P((DB_ENV *));
int __db_not_txn_env __P((DB_ENV *));
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 __dbc_logging __P((DBC *));
int __db_check_lsn __P((DB_ENV *, DB_LSN *, DB_LSN *));
+int __db_rdonly __P((const DB_ENV *, const char *));
+int __db_space_err __P((const DB *));
+int __db_failed __P((const DB_ENV *, const char *, pid_t, db_threadid_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_mkpath __P((DB_ENV *, const char *));
int __db_util_arg __P((char *, char *, int *, char ***));
int __db_util_cache __P((DB *, u_int32_t *, int *));
int __db_util_logset __P((const char *, char *));
diff --git a/db/dbinc_auto/crdel_auto.h b/db/dbinc_auto/crdel_auto.h
index bdae193fa..209dcb0b7 100644
--- a/db/dbinc_auto/crdel_auto.h
+++ b/db/dbinc_auto/crdel_auto.h
@@ -5,7 +5,7 @@
#define DB___crdel_metasub 142
typedef struct ___crdel_metasub_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -13,4 +13,34 @@ typedef struct ___crdel_metasub_args {
DB_LSN lsn;
} __crdel_metasub_args;
+#define DB___crdel_inmem_create 138
+typedef struct ___crdel_inmem_create_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ DBT name;
+ DBT fid;
+ u_int32_t pgsize;
+} __crdel_inmem_create_args;
+
+#define DB___crdel_inmem_rename 139
+typedef struct ___crdel_inmem_rename_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ DBT oldname;
+ DBT newname;
+ DBT fid;
+} __crdel_inmem_rename_args;
+
+#define DB___crdel_inmem_remove 140
+typedef struct ___crdel_inmem_remove_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ DBT name;
+ DBT fid;
+} __crdel_inmem_remove_args;
+
#endif
diff --git a/db/dbinc_auto/db_auto.h b/db/dbinc_auto/db_auto.h
index c2edcedbc..dc6d5304e 100644
--- a/db/dbinc_auto/db_auto.h
+++ b/db/dbinc_auto/db_auto.h
@@ -5,7 +5,7 @@
#define DB___db_addrem 41
typedef struct ___db_addrem_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t fileid;
@@ -20,7 +20,7 @@ typedef struct ___db_addrem_args {
#define DB___db_big 43
typedef struct ___db_big_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t fileid;
@@ -36,7 +36,7 @@ typedef struct ___db_big_args {
#define DB___db_ovref 44
typedef struct ___db_ovref_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -44,10 +44,25 @@ typedef struct ___db_ovref_args {
DB_LSN lsn;
} __db_ovref_args;
+#define DB___db_relink_42 45
+typedef struct ___db_relink_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ u_int32_t opcode;
+ int32_t fileid;
+ db_pgno_t pgno;
+ DB_LSN lsn;
+ db_pgno_t prev;
+ DB_LSN lsn_prev;
+ db_pgno_t next;
+ DB_LSN lsn_next;
+} __db_relink_42_args;
+
#define DB___db_debug 47
typedef struct ___db_debug_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT op;
int32_t fileid;
@@ -59,17 +74,31 @@ typedef struct ___db_debug_args {
#define DB___db_noop 48
typedef struct ___db_noop_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
DB_LSN prevlsn;
} __db_noop_args;
+#define DB___db_pg_alloc_42 49
+typedef struct ___db_pg_alloc_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ 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;
+} __db_pg_alloc_42_args;
+
#define DB___db_pg_alloc 49
typedef struct ___db_pg_alloc_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
DB_LSN meta_lsn;
@@ -81,10 +110,23 @@ typedef struct ___db_pg_alloc_args {
db_pgno_t last_pgno;
} __db_pg_alloc_args;
+#define DB___db_pg_free_42 50
+typedef struct ___db_pg_free_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ 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_free_42_args;
+
#define DB___db_pg_free 50
typedef struct ___db_pg_free_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -98,14 +140,28 @@ typedef struct ___db_pg_free_args {
#define DB___db_cksum 51
typedef struct ___db_cksum_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
} __db_cksum_args;
+#define DB___db_pg_freedata_42 52
+typedef struct ___db_pg_freedata_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ 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_42_args;
+
#define DB___db_pg_freedata 52
typedef struct ___db_pg_freedata_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -120,7 +176,7 @@ typedef struct ___db_pg_freedata_args {
#define DB___db_pg_prepare 53
typedef struct ___db_pg_prepare_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -129,7 +185,7 @@ typedef struct ___db_pg_prepare_args {
#define DB___db_pg_new 54
typedef struct ___db_pg_new_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -142,7 +198,7 @@ typedef struct ___db_pg_new_args {
#define DB___db_pg_init 60
typedef struct ___db_pg_init_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -150,4 +206,18 @@ typedef struct ___db_pg_init_args {
DBT data;
} __db_pg_init_args;
+#define DB___db_pg_sort 61
+typedef struct ___db_pg_sort_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t meta;
+ DB_LSN meta_lsn;
+ db_pgno_t last_free;
+ DB_LSN last_lsn;
+ db_pgno_t last_pgno;
+ DBT list;
+} __db_pg_sort_args;
+
#endif
diff --git a/db/dbinc_auto/db_ext.h b/db/dbinc_auto/db_ext.h
index c7124c350..141bd5149 100644
--- a/db/dbinc_auto/db_ext.h
+++ b/db/dbinc_auto/db_ext.h
@@ -8,19 +8,30 @@ extern "C" {
int __crdel_metasub_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, const DBT *, DB_LSN *));
int __crdel_metasub_read __P((DB_ENV *, void *, __crdel_metasub_args **));
+int __crdel_inmem_create_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, int32_t, const DBT *, const DBT *, u_int32_t));
+int __crdel_inmem_create_read __P((DB_ENV *, void *, __crdel_inmem_create_args **));
+int __crdel_inmem_rename_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, const DBT *, const DBT *, const DBT *));
+int __crdel_inmem_rename_read __P((DB_ENV *, void *, __crdel_inmem_rename_args **));
+int __crdel_inmem_remove_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, const DBT *, const DBT *));
+int __crdel_inmem_remove_read __P((DB_ENV *, void *, __crdel_inmem_remove_args **));
int __crdel_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __crdel_metasub_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __crdel_inmem_create_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __crdel_inmem_rename_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __crdel_inmem_remove_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __crdel_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __crdel_metasub_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __crdel_inmem_create_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __crdel_inmem_rename_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __crdel_inmem_remove_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_dbenv_setup __P((DB *, DB_TXN *, const char *, const char *, u_int32_t, u_int32_t));
int __db_dbenv_mpool __P((DB *, const char *, 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_refresh __P((DB *, DB_TXN *, u_int32_t, int *, 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 *__dblist_get __P((DB_ENV *, u_int32_t));
#ifdef CONFIG_TEST
int __db_testcopy __P((DB_ENV *, DB *, const char *));
#endif
@@ -36,16 +47,20 @@ int __db_big_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, db_pgno_t,
int __db_big_read __P((DB_ENV *, void *, __db_big_args **));
int __db_ovref_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, int32_t, DB_LSN *));
int __db_ovref_read __P((DB_ENV *, void *, __db_ovref_args **));
+int __db_relink_42_read __P((DB_ENV *, void *, __db_relink_42_args **));
int __db_debug_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, const DBT *, int32_t, const DBT *, const DBT *, u_int32_t));
int __db_debug_read __P((DB_ENV *, void *, __db_debug_args **));
int __db_noop_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *));
int __db_noop_read __P((DB_ENV *, void *, __db_noop_args **));
+int __db_pg_alloc_42_read __P((DB_ENV *, void *, __db_pg_alloc_42_args **));
int __db_pg_alloc_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t, u_int32_t, db_pgno_t, db_pgno_t));
int __db_pg_alloc_read __P((DB_ENV *, void *, __db_pg_alloc_args **));
+int __db_pg_free_42_read __P((DB_ENV *, void *, __db_pg_free_42_args **));
int __db_pg_free_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *, db_pgno_t, db_pgno_t));
int __db_pg_free_read __P((DB_ENV *, void *, __db_pg_free_args **));
int __db_cksum_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t));
int __db_cksum_read __P((DB_ENV *, void *, __db_cksum_args **));
+int __db_pg_freedata_42_read __P((DB_ENV *, void *, __db_pg_freedata_42_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, db_pgno_t, const DBT *));
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));
@@ -54,19 +69,26 @@ int __db_pg_new_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN
int __db_pg_new_read __P((DB_ENV *, void *, __db_pg_new_args **));
int __db_pg_init_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, const DBT *, const DBT *));
int __db_pg_init_read __P((DB_ENV *, void *, __db_pg_init_args **));
+int __db_pg_sort_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *));
+int __db_pg_sort_read __P((DB_ENV *, void *, __db_pg_sort_args **));
int __db_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __db_addrem_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_big_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_ovref_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_relink_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_debug_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_noop_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_alloc_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_pg_alloc_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_free_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_pg_free_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_cksum_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_freedata_42_print __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_prepare_print __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_init_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_sort_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_init_print __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 *));
@@ -81,33 +103,31 @@ int __db_duperr __P((DB *, 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 *));
+int __db_s_first __P((DB *, DB **));
int __db_s_next __P((DB **));
int __db_s_done __P((DB *));
u_int32_t __db_partsize __P((u_int32_t, DBT *));
+int __cdsgroup_begin __P((DB_ENV *, DB_TXN **));
int __db_pgin __P((DB_ENV *, db_pgno_t, void *, DBT *));
int __db_pgout __P((DB_ENV *, db_pgno_t, void *, DBT *));
void __db_metaswap __P((PAGE *));
int __db_byteswap __P((DB_ENV *, DB *, db_pgno_t, PAGE *, size_t, int));
-int __db_dispatch __P((DB_ENV *, int (**)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)), size_t, DBT *, DB_LSN *, db_recops, void *));
+int __db_dispatch __P((DB_ENV *, int (**)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)), size_t, DBT *, DB_LSN *, db_recops, DB_TXNHEAD *));
int __db_add_recovery __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *, int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), u_int32_t));
-int __db_txnlist_init __P((DB_ENV *, u_int32_t, u_int32_t, DB_LSN *, void *));
-int __db_txnlist_add __P((DB_ENV *, void *, u_int32_t, u_int32_t, DB_LSN *));
-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, u_int32_t *));
-int __db_txnlist_update __P((DB_ENV *, void *, u_int32_t, u_int32_t, DB_LSN *, u_int32_t *, int));
-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_init __P((DB_ENV *, u_int32_t, u_int32_t, DB_LSN *, DB_TXNHEAD **));
+int __db_txnlist_add __P((DB_ENV *, DB_TXNHEAD *, u_int32_t, u_int32_t, DB_LSN *));
+int __db_txnlist_remove __P((DB_ENV *, DB_TXNHEAD *, u_int32_t));
+void __db_txnlist_ckp __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *));
+void __db_txnlist_end __P((DB_ENV *, DB_TXNHEAD *));
+int __db_txnlist_find __P((DB_ENV *, DB_TXNHEAD *, u_int32_t, u_int32_t *));
+int __db_txnlist_update __P((DB_ENV *, DB_TXNHEAD *, u_int32_t, u_int32_t, DB_LSN *, u_int32_t *, int));
+int __db_txnlist_gen __P((DB_ENV *, DB_TXNHEAD *, int, u_int32_t, u_int32_t));
+int __db_txnlist_lsnadd __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *));
+int __db_txnlist_lsnget __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *, u_int32_t));
int __db_txnlist_lsninit __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *));
-#ifndef HAVE_FTRUNCATE
-int __db_add_limbo __P((DB_ENV *, void *, int32_t, db_pgno_t, int32_t));
-#endif
-#ifndef HAVE_FTRUNCATE
+int __db_add_limbo __P((DB_ENV *, DB_TXNHEAD *, int32_t, db_pgno_t, u_int32_t));
int __db_do_the_limbo __P((DB_ENV *, DB_TXN *, DB_TXN *, DB_TXNHEAD *, db_limbo_state));
-#endif
-void __db_txnlist_print __P((void *));
+void __db_txnlist_print __P((DB_TXNHEAD *));
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_associate_pp __P((DB *, DB_TXN *, DB *, int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
@@ -124,11 +144,11 @@ int __db_open_pp __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int3
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_compact_pp __P((DB *, DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *));
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_secondary_close_pp __P((DB *, u_int32_t));
@@ -136,11 +156,22 @@ 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 __dbt_usercopy __P((DB_ENV *, DBT *));
+void __dbt_userfree __P((DB_ENV *, DBT *, DBT *, DBT *));
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 *));
+#ifdef HAVE_FTRUNCATE
+void __db_freelist_pos __P((db_pgno_t, db_pgno_t *, u_int32_t, u_int32_t *));
+#endif
+#ifdef HAVE_FTRUNCATE
+int __db_pg_truncate __P((DB_MPOOLFILE *, DB_TXN *, struct pglist *list, DB_COMPACT *, u_int32_t *, db_pgno_t *, DB_LSN *, int));
+#endif
+#ifdef HAVE_FTRUNCATE
+int __db_free_truncate __P((DB *, DB_TXN *, u_int32_t, DB_COMPACT *, struct pglist **, u_int32_t *, db_pgno_t *));
+#endif
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 *));
@@ -156,23 +187,23 @@ 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));
int __db_meta_setup __P((DB_ENV *, DB *, const char *, DBMETA *, u_int32_t, int));
-int __db_goff __P((DB *, DBT *, u_int32_t, db_pgno_t, void **, u_int32_t *));
+int __db_goff __P((DB *, DB_TXN *, DBT *, u_int32_t, db_pgno_t, void **, u_int32_t *));
int __db_poff __P((DBC *, const DBT *, db_pgno_t *));
-int __db_ovref __P((DBC *, db_pgno_t, int32_t));
+int __db_ovref __P((DBC *, db_pgno_t));
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_moff __P((DB *, DB_TXN *, 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));
void __db_loadme __P((void));
-int __db_dumptree __P((DB *, char *, char *));
+int __db_dumptree __P((DB *, DB_TXN *, char *, char *));
const FN * __db_get_flags_fn __P((void));
-int __db_prnpage __P((DB *, db_pgno_t));
+int __db_prnpage __P((DB *, DB_TXN *, db_pgno_t));
int __db_prpage __P((DB *, PAGE *, u_int32_t));
void __db_pr __P((DB_ENV *, DB_MSGBUF *, u_int8_t *, u_int32_t));
void __db_prflags __P((DB_ENV *, DB_MSGBUF *, u_int32_t, const FN *, const char *, const char *));
const char * __db_lockmode_to_string __P((db_lockmode_t));
-int __db_dumptree __P((DB *, char *, char *));
+int __db_dumptree __P((DB *, DB_TXN *, char *, char *));
const FN * __db_get_flags_fn __P((void));
int __db_dump_pp __P((DB *, const char *, int (*)(void *, const void *), void *, int, int));
int __db_dump __P((DB *, const char *, int (*)(void *, const void *), void *, int, int));
@@ -193,21 +224,27 @@ 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_pg_init_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_pg_sort_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_alloc_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_free_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_freedata_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_relink_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_traverse_big __P((DB *, db_pgno_t, DB_TXN *, 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_pp __P((DB_ENV *, DB_TXN *, const char *, const char *, u_int32_t));
+int __env_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_inmem_remove __P((DB *, DB_TXN *, const char *));
+int __env_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_ret __P((DB *, DB_TXN *, 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_fileid_reset __P((DB_ENV *, char *, int));
-int __db_lsn_reset __P((DB_ENV *, char *, int));
+int __env_fileid_reset_pp __P((DB_ENV *, const char *, u_int32_t));
+int __env_lsn_reset_pp __P((DB_ENV *, const char *, u_int32_t));
int __db_stat_pp __P((DB *, DB_TXN *, void *, u_int32_t));
int __db_stat __P((DB *, DB_TXN *, void *, u_int32_t));
int __db_stat_print_pp __P((DB *, u_int32_t));
@@ -243,7 +280,7 @@ int __db_vrfy_ccnext __P((DBC *, VRFY_CHILDINFO **));
int __db_vrfy_ccclose __P((DBC *));
int __db_salvage_init __P((VRFY_DBINFO *));
void __db_salvage_destroy __P((VRFY_DBINFO *));
-int __db_salvage_getnext __P((VRFY_DBINFO *, db_pgno_t *, u_int32_t *));
+int __db_salvage_getnext __P((VRFY_DBINFO *, DBC **, db_pgno_t *, u_int32_t *, int));
int __db_salvage_isdone __P((VRFY_DBINFO *, db_pgno_t));
int __db_salvage_markdone __P((VRFY_DBINFO *, db_pgno_t));
int __db_salvage_markneeded __P((VRFY_DBINFO *, db_pgno_t, u_int32_t));
diff --git a/db/dbinc_auto/dbreg_auto.h b/db/dbinc_auto/dbreg_auto.h
index 4d7d4a91b..a9722d0e9 100644
--- a/db/dbinc_auto/dbreg_auto.h
+++ b/db/dbinc_auto/dbreg_auto.h
@@ -5,7 +5,7 @@
#define DB___dbreg_register 2
typedef struct ___dbreg_register_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
DBT name;
diff --git a/db/dbinc_auto/dbreg_ext.h b/db/dbinc_auto/dbreg_ext.h
index 5902b9db9..6e7aa8487 100644
--- a/db/dbinc_auto/dbreg_ext.h
+++ b/db/dbinc_auto/dbreg_ext.h
@@ -13,24 +13,27 @@ 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, int32_t));
int __dbreg_close_id __P((DB *, DB_TXN *, u_int32_t));
+int __dbreg_log_close __P((DB_ENV *, FNAME *, DB_TXN *, u_int32_t));
+int __dbreg_log_id __P((DB *, DB_TXN *, int32_t, int));
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_read __P((DB_ENV *, void *, __dbreg_register_args **));
int __dbreg_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __dbreg_register_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __dbreg_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __dbreg_register_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __dbreg_stat_print __P((DB_ENV *, u_int32_t));
void __dbreg_print_fname __P((DB_ENV *, FNAME *));
-void __dbreg_print_dblist __P((DB_ENV *, u_int32_t));
int __dbreg_add_dbentry __P((DB_ENV *, DB_LOG *, DB *, int32_t));
-void __dbreg_rem_dbentry __P((DB_LOG *, int32_t));
+int __dbreg_rem_dbentry __P((DB_LOG *, int32_t));
int __dbreg_log_files __P((DB_ENV *));
int __dbreg_close_files __P((DB_ENV *));
+int __dbreg_invalidate_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 **));
-int __dbreg_do_open __P((DB_ENV *, DB_TXN *, DB_LOG *, u_int8_t *, char *, DBTYPE, int32_t, db_pgno_t, void *, u_int32_t));
+int __dbreg_do_open __P((DB_ENV *, DB_TXN *, DB_LOG *, u_int8_t *, char *, DBTYPE, int32_t, db_pgno_t, void *, u_int32_t, u_int32_t));
int __dbreg_lazy_id __P((DB *));
#if defined(__cplusplus)
diff --git a/db/dbinc_auto/env_ext.h b/db/dbinc_auto/env_ext.h
index 03b3ae995..2e0882415 100644
--- a/db/dbinc_auto/env_ext.h
+++ b/db/dbinc_auto/env_ext.h
@@ -13,49 +13,60 @@ void __db_shalloc_free __P((REGINFO *, void *));
size_t __db_shalloc_sizeof __P((void *));
u_int32_t __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 *));
-int __dbenv_set_intermediate_dir __P((DB_ENV *, int, u_int32_t));
-void __dbenv_set_errcall __P((DB_ENV *, void (*)(const DB_ENV *, const char *, const 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 *));
-void __dbenv_set_msgcall __P((DB_ENV *, void (*)(const DB_ENV *, const char *)));
-void __dbenv_get_msgfile __P((DB_ENV *, FILE **));
-void __dbenv_set_msgfile __P((DB_ENV *, FILE *));
-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 __env_read_db_config __P((DB_ENV *));
+int __env_failchk_pp __P((DB_ENV *, u_int32_t));
+int __env_thread_init __P((DB_ENV *, int));
+int __env_set_state __P((DB_ENV *, DB_THREAD_INFO **, DB_THREAD_STATE));
+char *__env_thread_id_string __P((DB_ENV *, pid_t, db_threadid_t, char *));
+int __db_file_extend __P((DB_ENV *, DB_FH *, size_t));
+int __db_file_multi_write __P((DB_ENV *, const char *));
+int __db_file_write __P((DB_ENV *, DB_FH *, u_int32_t, u_int32_t, int));
+void __db_env_destroy __P((DB_ENV *));
+int __env_set_alloc __P((DB_ENV *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)));
+int __env_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
+int __env_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
+int __env_set_flags __P((DB_ENV *, u_int32_t, int));
+int __env_set_data_dir __P((DB_ENV *, const char *));
+int __env_set_intermediate_dir __P((DB_ENV *, int, u_int32_t));
+void __env_set_errcall __P((DB_ENV *, void (*)(const DB_ENV *, const char *, const char *)));
+void __env_get_errfile __P((DB_ENV *, FILE **));
+void __env_set_errfile __P((DB_ENV *, FILE *));
+void __env_get_errpfx __P((DB_ENV *, const char **));
+void __env_set_errpfx __P((DB_ENV *, const char *));
+void __env_set_msgcall __P((DB_ENV *, void (*)(const DB_ENV *, const char *)));
+void __env_get_msgfile __P((DB_ENV *, FILE **));
+void __env_set_msgfile __P((DB_ENV *, FILE *));
+int __env_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
+int __env_set_shm_key __P((DB_ENV *, long));
+int __env_set_tmp_dir __P((DB_ENV *, const char *));
+int __env_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_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 __env_open_pp __P((DB_ENV *, const char *, u_int32_t, int));
+int __env_open __P((DB_ENV *, const char *, u_int32_t, int));
+int __env_remove __P((DB_ENV *, const char *, u_int32_t));
+int __env_config __P((DB_ENV *, const char *, u_int32_t, int));
+int __env_close_pp __P((DB_ENV *, u_int32_t));
+int __env_close __P((DB_ENV *, int));
+int __env_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 *, DB_LSN *, int, u_int32_t));
int __log_backup __P((DB_ENV *, DB_LOGC *, DB_LSN *, DB_LSN *, u_int32_t));
int __env_openfiles __P((DB_ENV *, DB_LOGC *, void *, DBT *, DB_LSN *, DB_LSN *, double, int));
+int __env_init_rec __P((DB_ENV *, u_int32_t));
int __db_e_attach __P((DB_ENV *, u_int32_t *));
+int __db_e_golive __P((DB_ENV *));
int __db_e_detach __P((DB_ENV *, int));
int __db_e_remove __P((DB_ENV *, u_int32_t));
int __db_r_attach __P((DB_ENV *, REGINFO *, size_t));
int __db_r_detach __P((DB_ENV *, REGINFO *, int));
-int __dbenv_stat_print_pp __P((DB_ENV *, u_int32_t));
-void __db_print_fh __P((DB_ENV *, DB_FH *, u_int32_t));
+int __envreg_register __P((DB_ENV *, int *));
+int __envreg_unregister __P((DB_ENV *, int));
+int __envreg_xunlock __P((DB_ENV *));
+int __env_stat_print_pp __P((DB_ENV *, u_int32_t));
+void __db_print_fh __P((DB_ENV *, const char *, DB_FH *, u_int32_t));
void __db_print_fileid __P((DB_ENV *, u_int8_t *, const char *));
-void __db_print_mutex __P((DB_ENV *, DB_MSGBUF *, DB_MUTEX *, const char *, u_int32_t));
void __db_dl __P((DB_ENV *, const char *, u_long));
void __db_dl_pct __P((DB_ENV *, const char *, u_long, int, const char *));
void __db_dlbytes __P((DB_ENV *, const char *, u_long, u_long, u_long));
diff --git a/db/dbinc_auto/ext_def.in b/db/dbinc_auto/ext_def.in
index 37577a77e..f1952ba3d 100644
--- a/db/dbinc_auto/ext_def.in
+++ b/db/dbinc_auto/ext_def.in
@@ -57,6 +57,6 @@
#define __db_hsearch __db_hsearch@DB_VERSION_UNIQUE_NAME@
#define __db_hdestroy __db_hdestroy@DB_VERSION_UNIQUE_NAME@
#endif
-#define db_xa_switch db_xa_switch@DB_VERSION_UNIQUE_NAME@
+#define db_xa_switch db_xa_switch@DB_VERSION_UNIQUE_NAME@
#endif /* !_DB_EXT_DEF_IN_ */
diff --git a/db/dbinc_auto/fileops_auto.h b/db/dbinc_auto/fileops_auto.h
index 12440264d..9b3a65649 100644
--- a/db/dbinc_auto/fileops_auto.h
+++ b/db/dbinc_auto/fileops_auto.h
@@ -5,7 +5,7 @@
#define DB___fop_create 143
typedef struct ___fop_create_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT name;
u_int32_t appname;
@@ -15,7 +15,7 @@ typedef struct ___fop_create_args {
#define DB___fop_remove 144
typedef struct ___fop_remove_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT name;
DBT fid;
@@ -25,7 +25,7 @@ typedef struct ___fop_remove_args {
#define DB___fop_write 145
typedef struct ___fop_write_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT name;
u_int32_t appname;
@@ -39,7 +39,7 @@ typedef struct ___fop_write_args {
#define DB___fop_rename 146
typedef struct ___fop_rename_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT oldname;
DBT newname;
@@ -50,7 +50,7 @@ typedef struct ___fop_rename_args {
#define DB___fop_file_remove 141
typedef struct ___fop_file_remove_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT real_fid;
DBT tmp_fid;
diff --git a/db/dbinc_auto/hash_auto.h b/db/dbinc_auto/hash_auto.h
index 5b5525363..8d9f93d0d 100644
--- a/db/dbinc_auto/hash_auto.h
+++ b/db/dbinc_auto/hash_auto.h
@@ -5,7 +5,7 @@
#define DB___ham_insdel 21
typedef struct ___ham_insdel_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t fileid;
@@ -19,7 +19,7 @@ typedef struct ___ham_insdel_args {
#define DB___ham_newpage 22
typedef struct ___ham_newpage_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t fileid;
@@ -34,7 +34,7 @@ typedef struct ___ham_newpage_args {
#define DB___ham_splitdata 24
typedef struct ___ham_splitdata_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
u_int32_t opcode;
@@ -46,7 +46,7 @@ typedef struct ___ham_splitdata_args {
#define DB___ham_replace 25
typedef struct ___ham_replace_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -61,7 +61,7 @@ typedef struct ___ham_replace_args {
#define DB___ham_copypage 28
typedef struct ___ham_copypage_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -73,10 +73,26 @@ typedef struct ___ham_copypage_args {
DBT page;
} __ham_copypage_args;
+#define DB___ham_metagroup_42 29
+typedef struct ___ham_metagroup_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ u_int32_t bucket;
+ 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;
+} __ham_metagroup_42_args;
+
#define DB___ham_metagroup 29
typedef struct ___ham_metagroup_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
u_int32_t bucket;
@@ -90,23 +106,35 @@ typedef struct ___ham_metagroup_args {
db_pgno_t last_pgno;
} __ham_metagroup_args;
+#define DB___ham_groupalloc_42 32
+typedef struct ___ham_groupalloc_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ DB_LSN meta_lsn;
+ db_pgno_t start_pgno;
+ u_int32_t num;
+ db_pgno_t free;
+} __ham_groupalloc_42_args;
+
#define DB___ham_groupalloc 32
typedef struct ___ham_groupalloc_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
DB_LSN meta_lsn;
db_pgno_t start_pgno;
u_int32_t num;
- db_pgno_t free;
+ db_pgno_t unused;
db_pgno_t last_pgno;
} __ham_groupalloc_args;
#define DB___ham_curadj 33
typedef struct ___ham_curadj_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_pgno_t pgno;
@@ -121,7 +149,7 @@ typedef struct ___ham_curadj_args {
#define DB___ham_chgpg 34
typedef struct ___ham_chgpg_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_ham_mode mode;
diff --git a/db/dbinc_auto/hash_ext.h b/db/dbinc_auto/hash_ext.h
index 4869df741..f821675ae 100644
--- a/db/dbinc_auto/hash_ext.h
+++ b/db/dbinc_auto/hash_ext.h
@@ -24,8 +24,10 @@ int __ham_replace_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, u_int
int __ham_replace_read __P((DB_ENV *, void *, __ham_replace_args **));
int __ham_copypage_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, const DBT *));
int __ham_copypage_read __P((DB_ENV *, void *, __ham_copypage_args **));
+int __ham_metagroup_42_read __P((DB_ENV *, void *, __ham_metagroup_42_args **));
int __ham_metagroup_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, u_int32_t, db_pgno_t));
int __ham_metagroup_read __P((DB_ENV *, void *, __ham_metagroup_args **));
+int __ham_groupalloc_42_read __P((DB_ENV *, void *, __ham_groupalloc_42_args **));
int __ham_groupalloc_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_pgno_t, db_pgno_t));
int __ham_groupalloc_read __P((DB_ENV *, void *, __ham_groupalloc_args **));
int __ham_curadj_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, u_int32_t, u_int32_t, u_int32_t, int, int, u_int32_t));
@@ -38,7 +40,9 @@ int __ham_newpage_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_splitdata_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_replace_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_copypage_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __ham_metagroup_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_metagroup_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __ham_groupalloc_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_groupalloc_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_curadj_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_chgpg_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -57,7 +61,7 @@ u_int32_t __ham_func5 __P((DB *, const void *, u_int32_t));
u_int32_t __ham_test __P((DB *, const void *, u_int32_t));
int __ham_get_meta __P((DBC *));
int __ham_release_meta __P((DBC *));
-int __ham_dirty_meta __P((DBC *));
+int __ham_dirty_meta __P((DBC *, u_int32_t));
int __ham_db_create __P((DB *));
int __ham_db_close __P((DB *));
int __ham_get_h_ffactor __P((DB *, u_int32_t *));
@@ -83,7 +87,7 @@ int __ham_add_el __P((DBC *, const DBT *, const DBT *, int));
void __ham_copy_item __P((DB *, PAGE *, u_int32_t, PAGE *));
int __ham_add_ovflpage __P((DBC *, PAGE *, int, PAGE **));
int __ham_get_cpage __P((DBC *, db_lockmode_t));
-int __ham_next_cpage __P((DBC *, db_pgno_t, int));
+int __ham_next_cpage __P((DBC *, db_pgno_t));
int __ham_lock_bucket __P((DBC *, db_lockmode_t));
void __ham_dpair __P((DB *, PAGE *, u_int32_t));
int __ham_insdel_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -95,6 +99,8 @@ int __ham_metagroup_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
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_metagroup_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __ham_groupalloc_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_reclaim __P((DB *, DB_TXN *txn));
int __ham_truncate __P((DBC *, u_int32_t *));
int __ham_stat __P((DBC *, void *, u_int32_t));
diff --git a/db/dbinc_auto/hmac_ext.h b/db/dbinc_auto/hmac_ext.h
index d161a7291..1555abb01 100644
--- a/db/dbinc_auto/hmac_ext.h
+++ b/db/dbinc_auto/hmac_ext.h
@@ -6,9 +6,9 @@
extern "C" {
#endif
-void __db_chksum __P((u_int8_t *, size_t, u_int8_t *, u_int8_t *));
+void __db_chksum __P((void *, u_int8_t *, size_t, u_int8_t *, u_int8_t *));
void __db_derive_mac __P((u_int8_t *, size_t, u_int8_t *));
-int __db_check_chksum __P((DB_ENV *, DB_CIPHER *, u_int8_t *, void *, size_t, int));
+int __db_check_chksum __P((DB_ENV *, void *, DB_CIPHER *, u_int8_t *, void *, size_t, int));
void __db_SHA1Transform __P((u_int32_t *, unsigned char *));
void __db_SHA1Init __P((SHA1_CTX *));
void __db_SHA1Update __P((SHA1_CTX *, unsigned char *, size_t));
diff --git a/db/dbinc_auto/int_def.in b/db/dbinc_auto/int_def.in
index eb8756bf4..f88b35dd2 100644
--- a/db/dbinc_auto/int_def.in
+++ b/db/dbinc_auto/int_def.in
@@ -4,10 +4,22 @@
#define __crdel_metasub_log __crdel_metasub_log@DB_VERSION_UNIQUE_NAME@
#define __crdel_metasub_read __crdel_metasub_read@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_create_log __crdel_inmem_create_log@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_create_read __crdel_inmem_create_read@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_rename_log __crdel_inmem_rename_log@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_rename_read __crdel_inmem_rename_read@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_remove_log __crdel_inmem_remove_log@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_remove_read __crdel_inmem_remove_read@DB_VERSION_UNIQUE_NAME@
#define __crdel_init_recover __crdel_init_recover@DB_VERSION_UNIQUE_NAME@
#define __crdel_metasub_print __crdel_metasub_print@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_create_print __crdel_inmem_create_print@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_rename_print __crdel_inmem_rename_print@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_remove_print __crdel_inmem_remove_print@DB_VERSION_UNIQUE_NAME@
#define __crdel_init_print __crdel_init_print@DB_VERSION_UNIQUE_NAME@
#define __crdel_metasub_recover __crdel_metasub_recover@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_create_recover __crdel_inmem_create_recover@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_rename_recover __crdel_inmem_rename_recover@DB_VERSION_UNIQUE_NAME@
+#define __crdel_inmem_remove_recover __crdel_inmem_remove_recover@DB_VERSION_UNIQUE_NAME@
#define __db_master_open __db_master_open@DB_VERSION_UNIQUE_NAME@
#define __db_master_update __db_master_update@DB_VERSION_UNIQUE_NAME@
#define __db_dbenv_setup __db_dbenv_setup@DB_VERSION_UNIQUE_NAME@
@@ -16,7 +28,6 @@
#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@
-#define __dblist_get __dblist_get@DB_VERSION_UNIQUE_NAME@
#ifdef CONFIG_TEST
#define __db_testcopy __db_testcopy@DB_VERSION_UNIQUE_NAME@
#endif
@@ -32,16 +43,20 @@
#define __db_big_read __db_big_read@DB_VERSION_UNIQUE_NAME@
#define __db_ovref_log __db_ovref_log@DB_VERSION_UNIQUE_NAME@
#define __db_ovref_read __db_ovref_read@DB_VERSION_UNIQUE_NAME@
+#define __db_relink_42_read __db_relink_42_read@DB_VERSION_UNIQUE_NAME@
#define __db_debug_log __db_debug_log@DB_VERSION_UNIQUE_NAME@
#define __db_debug_read __db_debug_read@DB_VERSION_UNIQUE_NAME@
#define __db_noop_log __db_noop_log@DB_VERSION_UNIQUE_NAME@
#define __db_noop_read __db_noop_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_alloc_42_read __db_pg_alloc_42_read@DB_VERSION_UNIQUE_NAME@
#define __db_pg_alloc_log __db_pg_alloc_log@DB_VERSION_UNIQUE_NAME@
#define __db_pg_alloc_read __db_pg_alloc_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_free_42_read __db_pg_free_42_read@DB_VERSION_UNIQUE_NAME@
#define __db_pg_free_log __db_pg_free_log@DB_VERSION_UNIQUE_NAME@
#define __db_pg_free_read __db_pg_free_read@DB_VERSION_UNIQUE_NAME@
#define __db_cksum_log __db_cksum_log@DB_VERSION_UNIQUE_NAME@
#define __db_cksum_read __db_cksum_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_42_read __db_pg_freedata_42_read@DB_VERSION_UNIQUE_NAME@
#define __db_pg_freedata_log __db_pg_freedata_log@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@
@@ -50,19 +65,26 @@
#define __db_pg_new_read __db_pg_new_read@DB_VERSION_UNIQUE_NAME@
#define __db_pg_init_log __db_pg_init_log@DB_VERSION_UNIQUE_NAME@
#define __db_pg_init_read __db_pg_init_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_sort_log __db_pg_sort_log@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_sort_read __db_pg_sort_read@DB_VERSION_UNIQUE_NAME@
#define __db_init_recover __db_init_recover@DB_VERSION_UNIQUE_NAME@
#define __db_addrem_print __db_addrem_print@DB_VERSION_UNIQUE_NAME@
#define __db_big_print __db_big_print@DB_VERSION_UNIQUE_NAME@
#define __db_ovref_print __db_ovref_print@DB_VERSION_UNIQUE_NAME@
+#define __db_relink_42_print __db_relink_42_print@DB_VERSION_UNIQUE_NAME@
#define __db_debug_print __db_debug_print@DB_VERSION_UNIQUE_NAME@
#define __db_noop_print __db_noop_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_alloc_42_print __db_pg_alloc_42_print@DB_VERSION_UNIQUE_NAME@
#define __db_pg_alloc_print __db_pg_alloc_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_free_42_print __db_pg_free_42_print@DB_VERSION_UNIQUE_NAME@
#define __db_pg_free_print __db_pg_free_print@DB_VERSION_UNIQUE_NAME@
#define __db_cksum_print __db_cksum_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_42_print __db_pg_freedata_42_print@DB_VERSION_UNIQUE_NAME@
#define __db_pg_freedata_print __db_pg_freedata_print@DB_VERSION_UNIQUE_NAME@
#define __db_pg_prepare_print __db_pg_prepare_print@DB_VERSION_UNIQUE_NAME@
#define __db_pg_new_print __db_pg_new_print@DB_VERSION_UNIQUE_NAME@
#define __db_pg_init_print __db_pg_init_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_sort_print __db_pg_sort_print@DB_VERSION_UNIQUE_NAME@
#define __db_init_print __db_init_print@DB_VERSION_UNIQUE_NAME@
#define __db_c_close __db_c_close@DB_VERSION_UNIQUE_NAME@
#define __db_c_destroy __db_c_destroy@DB_VERSION_UNIQUE_NAME@
@@ -81,6 +103,7 @@
#define __db_s_next __db_s_next@DB_VERSION_UNIQUE_NAME@
#define __db_s_done __db_s_done@DB_VERSION_UNIQUE_NAME@
#define __db_partsize __db_partsize@DB_VERSION_UNIQUE_NAME@
+#define __cdsgroup_begin __cdsgroup_begin@DB_VERSION_UNIQUE_NAME@
#define __db_pgin __db_pgin@DB_VERSION_UNIQUE_NAME@
#define __db_pgout __db_pgout@DB_VERSION_UNIQUE_NAME@
#define __db_metaswap __db_metaswap@DB_VERSION_UNIQUE_NAME@
@@ -96,13 +119,10 @@
#define __db_txnlist_update __db_txnlist_update@DB_VERSION_UNIQUE_NAME@
#define __db_txnlist_gen __db_txnlist_gen@DB_VERSION_UNIQUE_NAME@
#define __db_txnlist_lsnadd __db_txnlist_lsnadd@DB_VERSION_UNIQUE_NAME@
+#define __db_txnlist_lsnget __db_txnlist_lsnget@DB_VERSION_UNIQUE_NAME@
#define __db_txnlist_lsninit __db_txnlist_lsninit@DB_VERSION_UNIQUE_NAME@
-#ifndef HAVE_FTRUNCATE
#define __db_add_limbo __db_add_limbo@DB_VERSION_UNIQUE_NAME@
-#endif
-#ifndef HAVE_FTRUNCATE
#define __db_do_the_limbo __db_do_the_limbo@DB_VERSION_UNIQUE_NAME@
-#endif
#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@
@@ -120,11 +140,11 @@
#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_compact_pp __db_compact_pp@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_secondary_close_pp __db_secondary_close_pp@DB_VERSION_UNIQUE_NAME@
@@ -132,11 +152,22 @@
#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 __dbt_usercopy __dbt_usercopy@DB_VERSION_UNIQUE_NAME@
+#define __dbt_userfree __dbt_userfree@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@
+#ifdef HAVE_FTRUNCATE
+#define __db_freelist_pos __db_freelist_pos@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifdef HAVE_FTRUNCATE
+#define __db_pg_truncate __db_pg_truncate@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifdef HAVE_FTRUNCATE
+#define __db_free_truncate __db_free_truncate@DB_VERSION_UNIQUE_NAME@
+#endif
#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@
@@ -189,21 +220,27 @@
#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_pg_init_recover __db_pg_init_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_sort_recover __db_pg_sort_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_alloc_42_recover __db_pg_alloc_42_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_free_42_recover __db_pg_free_42_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_42_recover __db_pg_freedata_42_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_relink_42_recover __db_relink_42_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_pp __dbenv_dbremove_pp@DB_VERSION_UNIQUE_NAME@
+#define __env_dbremove_pp __env_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_int __db_remove_int@DB_VERSION_UNIQUE_NAME@
-#define __dbenv_dbrename_pp __dbenv_dbrename_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_inmem_remove __db_inmem_remove@DB_VERSION_UNIQUE_NAME@
+#define __env_dbrename_pp __env_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_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_fileid_reset __db_fileid_reset@DB_VERSION_UNIQUE_NAME@
-#define __db_lsn_reset __db_lsn_reset@DB_VERSION_UNIQUE_NAME@
+#define __env_fileid_reset_pp __env_fileid_reset_pp@DB_VERSION_UNIQUE_NAME@
+#define __env_lsn_reset_pp __env_lsn_reset_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_stat_print_pp __db_stat_print_pp@DB_VERSION_UNIQUE_NAME@
@@ -244,6 +281,7 @@
#define __db_salvage_markdone __db_salvage_markdone@DB_VERSION_UNIQUE_NAME@
#define __db_salvage_markneeded __db_salvage_markneeded@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_prdbt __db_vrfy_prdbt@DB_VERSION_UNIQUE_NAME@
+#define __bam_compact __bam_compact@DB_VERSION_UNIQUE_NAME@
#define __bam_cmp __bam_cmp@DB_VERSION_UNIQUE_NAME@
#define __bam_defcmp __bam_defcmp@DB_VERSION_UNIQUE_NAME@
#define __bam_defpfx __bam_defpfx@DB_VERSION_UNIQUE_NAME@
@@ -265,10 +303,12 @@
#define __bam_bulk_overflow __bam_bulk_overflow@DB_VERSION_UNIQUE_NAME@
#define __bam_bulk_duplicates __bam_bulk_duplicates@DB_VERSION_UNIQUE_NAME@
#define __bam_c_rget __bam_c_rget@DB_VERSION_UNIQUE_NAME@
+#define __bam_opd_exists __bam_opd_exists@DB_VERSION_UNIQUE_NAME@
#define __bam_ditem __bam_ditem@DB_VERSION_UNIQUE_NAME@
#define __bam_adjindx __bam_adjindx@DB_VERSION_UNIQUE_NAME@
#define __bam_dpages __bam_dpages@DB_VERSION_UNIQUE_NAME@
#define __bam_relink __bam_relink@DB_VERSION_UNIQUE_NAME@
+#define __bam_pupdate __bam_pupdate@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@
@@ -296,6 +336,9 @@
#define __bam_curadj_recover __bam_curadj_recover@DB_VERSION_UNIQUE_NAME@
#define __bam_rcuradj_recover __bam_rcuradj_recover@DB_VERSION_UNIQUE_NAME@
#define __bam_relink_recover __bam_relink_recover@DB_VERSION_UNIQUE_NAME@
+#define __bam_merge_recover __bam_merge_recover@DB_VERSION_UNIQUE_NAME@
+#define __bam_pgno_recover __bam_pgno_recover@DB_VERSION_UNIQUE_NAME@
+#define __bam_relink_43_recover __bam_relink_43_recover@DB_VERSION_UNIQUE_NAME@
#define __bam_reclaim __bam_reclaim@DB_VERSION_UNIQUE_NAME@
#define __bam_truncate __bam_truncate@DB_VERSION_UNIQUE_NAME@
#define __ram_open __ram_open@DB_VERSION_UNIQUE_NAME@
@@ -310,10 +353,12 @@
#define __bam_adjust __bam_adjust@DB_VERSION_UNIQUE_NAME@
#define __bam_nrecs __bam_nrecs@DB_VERSION_UNIQUE_NAME@
#define __bam_total __bam_total@DB_VERSION_UNIQUE_NAME@
+#define __bam_get_root __bam_get_root@DB_VERSION_UNIQUE_NAME@
#define __bam_search __bam_search@DB_VERSION_UNIQUE_NAME@
#define __bam_stkrel __bam_stkrel@DB_VERSION_UNIQUE_NAME@
#define __bam_stkgrow __bam_stkgrow@DB_VERSION_UNIQUE_NAME@
#define __bam_split __bam_split@DB_VERSION_UNIQUE_NAME@
+#define __bam_pinsert __bam_pinsert@DB_VERSION_UNIQUE_NAME@
#define __bam_copy __bam_copy@DB_VERSION_UNIQUE_NAME@
#define __bam_stat __bam_stat@DB_VERSION_UNIQUE_NAME@
#define __bam_stat_print __bam_stat_print@DB_VERSION_UNIQUE_NAME@
@@ -351,8 +396,13 @@
#define __bam_curadj_read __bam_curadj_read@DB_VERSION_UNIQUE_NAME@
#define __bam_rcuradj_log __bam_rcuradj_log@DB_VERSION_UNIQUE_NAME@
#define __bam_rcuradj_read __bam_rcuradj_read@DB_VERSION_UNIQUE_NAME@
+#define __bam_relink_43_read __bam_relink_43_read@DB_VERSION_UNIQUE_NAME@
#define __bam_relink_log __bam_relink_log@DB_VERSION_UNIQUE_NAME@
#define __bam_relink_read __bam_relink_read@DB_VERSION_UNIQUE_NAME@
+#define __bam_merge_log __bam_merge_log@DB_VERSION_UNIQUE_NAME@
+#define __bam_merge_read __bam_merge_read@DB_VERSION_UNIQUE_NAME@
+#define __bam_pgno_log __bam_pgno_log@DB_VERSION_UNIQUE_NAME@
+#define __bam_pgno_read __bam_pgno_read@DB_VERSION_UNIQUE_NAME@
#define __bam_init_recover __bam_init_recover@DB_VERSION_UNIQUE_NAME@
#define __bam_split_print __bam_split_print@DB_VERSION_UNIQUE_NAME@
#define __bam_rsplit_print __bam_rsplit_print@DB_VERSION_UNIQUE_NAME@
@@ -363,14 +413,45 @@
#define __bam_root_print __bam_root_print@DB_VERSION_UNIQUE_NAME@
#define __bam_curadj_print __bam_curadj_print@DB_VERSION_UNIQUE_NAME@
#define __bam_rcuradj_print __bam_rcuradj_print@DB_VERSION_UNIQUE_NAME@
+#define __bam_relink_43_print __bam_relink_43_print@DB_VERSION_UNIQUE_NAME@
#define __bam_relink_print __bam_relink_print@DB_VERSION_UNIQUE_NAME@
+#define __bam_merge_print __bam_merge_print@DB_VERSION_UNIQUE_NAME@
+#define __bam_pgno_print __bam_pgno_print@DB_VERSION_UNIQUE_NAME@
#define __bam_init_print __bam_init_print@DB_VERSION_UNIQUE_NAME@
+#ifndef HAVE_ABORT
+#define abort abort@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_ATOI
+#define atoi atoi@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_ATOL
+#define atol atol@DB_VERSION_UNIQUE_NAME@
+#endif
+#define __db_ctime __db_ctime@DB_VERSION_UNIQUE_NAME@
+#if defined(HAVE_REPLICATION_THREADS)
+#define __db_getaddrinfo __db_getaddrinfo@DB_VERSION_UNIQUE_NAME@
+#endif
+#if defined(HAVE_REPLICATION_THREADS)
+#define __db_freeaddrinfo __db_freeaddrinfo@DB_VERSION_UNIQUE_NAME@
+#endif
#ifndef HAVE_GETCWD
#define getcwd getcwd@DB_VERSION_UNIQUE_NAME@
#endif
#ifndef HAVE_GETOPT
#define getopt getopt@DB_VERSION_UNIQUE_NAME@
#endif
+#ifndef HAVE_ISALPHA
+#define isalpha isalpha@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_ISDIGIT
+#define isdigit isdigit@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_ISPRINT
+#define isprint isprint@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_ISSPACE
+#define isspace isspace@DB_VERSION_UNIQUE_NAME@
+#endif
#ifndef HAVE_MEMCMP
#define memcmp memcmp@DB_VERSION_UNIQUE_NAME@
#endif
@@ -380,9 +461,22 @@
#ifndef HAVE_MEMMOVE
#define memmove memmove@DB_VERSION_UNIQUE_NAME@
#endif
+#ifndef HAVE_PRINTF
+#define printf printf@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_PRINTF
+#define fprintf fprintf@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_PRINTF
+#define vfprintf vfprintf@DB_VERSION_UNIQUE_NAME@
+#endif
#ifndef HAVE_RAISE
#define raise raise@DB_VERSION_UNIQUE_NAME@
#endif
+#ifndef HAVE_RAND
+#define rand rand@DB_VERSION_UNIQUE_NAME@
+#define srand srand@DB_VERSION_UNIQUE_NAME@
+#endif
#ifndef HAVE_SNPRINTF
#define snprintf snprintf@DB_VERSION_UNIQUE_NAME@
#endif
@@ -395,15 +489,40 @@
#ifndef HAVE_STRCASECMP
#define strncasecmp strncasecmp@DB_VERSION_UNIQUE_NAME@
#endif
+#ifndef HAVE_STRCAT
+#define strcat strcat@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_STRCHR
+#define strchr strchr@DB_VERSION_UNIQUE_NAME@
+#endif
#ifndef HAVE_STRDUP
#define strdup strdup@DB_VERSION_UNIQUE_NAME@
#endif
#ifndef HAVE_STRERROR
#define strerror strerror@DB_VERSION_UNIQUE_NAME@
#endif
+#ifndef HAVE_STRNCAT
+#define strncat strncat@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_STRNCMP
+#define strncmp strncmp@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_STRRCHR
+#define strrchr strrchr@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_STRSEP
+#define strsep strsep@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_STRTOL
+#define strtol strtol@DB_VERSION_UNIQUE_NAME@
+#endif
+#ifndef HAVE_STRTOUL
+#define strtoul strtoul@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_difftime __db_difftime@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@
@@ -415,23 +534,33 @@
#endif
#define __db_panic_msg __db_panic_msg@DB_VERSION_UNIQUE_NAME@
#define __db_panic __db_panic@DB_VERSION_UNIQUE_NAME@
+#define __db_panic_set __db_panic_set@DB_VERSION_UNIQUE_NAME@
+#define __db_unknown_error __db_unknown_error@DB_VERSION_UNIQUE_NAME@
+#define __db_syserr __db_syserr@DB_VERSION_UNIQUE_NAME@
#define __db_err __db_err@DB_VERSION_UNIQUE_NAME@
+#define __db_errx __db_errx@DB_VERSION_UNIQUE_NAME@
#define __db_errcall __db_errcall@DB_VERSION_UNIQUE_NAME@
#define __db_errfile __db_errfile@DB_VERSION_UNIQUE_NAME@
#define __db_msgadd __db_msgadd@DB_VERSION_UNIQUE_NAME@
#define __db_msg __db_msg@DB_VERSION_UNIQUE_NAME@
-#define __db_logmsg __db_logmsg@DB_VERSION_UNIQUE_NAME@
#define __db_unknown_flag __db_unknown_flag@DB_VERSION_UNIQUE_NAME@
#define __db_unknown_type __db_unknown_type@DB_VERSION_UNIQUE_NAME@
+#define __db_unknown_path __db_unknown_path@DB_VERSION_UNIQUE_NAME@
#define __db_check_txn __db_check_txn@DB_VERSION_UNIQUE_NAME@
+#define __db_txn_deadlock_err __db_txn_deadlock_err@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 __dbc_logging __dbc_logging@DB_VERSION_UNIQUE_NAME@
#define __db_check_lsn __db_check_lsn@DB_VERSION_UNIQUE_NAME@
+#define __db_rdonly __db_rdonly@DB_VERSION_UNIQUE_NAME@
+#define __db_space_err __db_space_err@DB_VERSION_UNIQUE_NAME@
+#define __db_failed __db_failed@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@
#define __db_log2 __db_log2@DB_VERSION_UNIQUE_NAME@
+#define __db_mkpath __db_mkpath@DB_VERSION_UNIQUE_NAME@
#define __db_util_arg __db_util_arg@DB_VERSION_UNIQUE_NAME@
#define __db_util_cache __db_util_cache@DB_VERSION_UNIQUE_NAME@
#define __db_util_logset __db_util_logset@DB_VERSION_UNIQUE_NAME@
@@ -470,18 +599,21 @@
#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@
+#define __dbreg_log_close __dbreg_log_close@DB_VERSION_UNIQUE_NAME@
+#define __dbreg_log_id __dbreg_log_id@DB_VERSION_UNIQUE_NAME@
#define __dbreg_register_log __dbreg_register_log@DB_VERSION_UNIQUE_NAME@
#define __dbreg_register_read __dbreg_register_read@DB_VERSION_UNIQUE_NAME@
#define __dbreg_init_recover __dbreg_init_recover@DB_VERSION_UNIQUE_NAME@
#define __dbreg_register_print __dbreg_register_print@DB_VERSION_UNIQUE_NAME@
#define __dbreg_init_print __dbreg_init_print@DB_VERSION_UNIQUE_NAME@
#define __dbreg_register_recover __dbreg_register_recover@DB_VERSION_UNIQUE_NAME@
+#define __dbreg_stat_print __dbreg_stat_print@DB_VERSION_UNIQUE_NAME@
#define __dbreg_print_fname __dbreg_print_fname@DB_VERSION_UNIQUE_NAME@
-#define __dbreg_print_dblist __dbreg_print_dblist@DB_VERSION_UNIQUE_NAME@
#define __dbreg_add_dbentry __dbreg_add_dbentry@DB_VERSION_UNIQUE_NAME@
#define __dbreg_rem_dbentry __dbreg_rem_dbentry@DB_VERSION_UNIQUE_NAME@
#define __dbreg_log_files __dbreg_log_files@DB_VERSION_UNIQUE_NAME@
#define __dbreg_close_files __dbreg_close_files@DB_VERSION_UNIQUE_NAME@
+#define __dbreg_invalidate_files __dbreg_invalidate_files@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@
@@ -496,49 +628,60 @@
#define __db_shalloc_sizeof __db_shalloc_sizeof@DB_VERSION_UNIQUE_NAME@
#define __db_tablesize __db_tablesize@DB_VERSION_UNIQUE_NAME@
#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_intermediate_dir __dbenv_set_intermediate_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_msgcall __dbenv_set_msgcall@DB_VERSION_UNIQUE_NAME@
-#define __dbenv_get_msgfile __dbenv_get_msgfile@DB_VERSION_UNIQUE_NAME@
-#define __dbenv_set_msgfile __dbenv_set_msgfile@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 __env_read_db_config __env_read_db_config@DB_VERSION_UNIQUE_NAME@
+#define __env_failchk_pp __env_failchk_pp@DB_VERSION_UNIQUE_NAME@
+#define __env_thread_init __env_thread_init@DB_VERSION_UNIQUE_NAME@
+#define __env_set_state __env_set_state@DB_VERSION_UNIQUE_NAME@
+#define __env_thread_id_string __env_thread_id_string@DB_VERSION_UNIQUE_NAME@
+#define __db_file_extend __db_file_extend@DB_VERSION_UNIQUE_NAME@
+#define __db_file_multi_write __db_file_multi_write@DB_VERSION_UNIQUE_NAME@
+#define __db_file_write __db_file_write@DB_VERSION_UNIQUE_NAME@
+#define __db_env_destroy __db_env_destroy@DB_VERSION_UNIQUE_NAME@
+#define __env_set_alloc __env_set_alloc@DB_VERSION_UNIQUE_NAME@
+#define __env_get_encrypt_flags __env_get_encrypt_flags@DB_VERSION_UNIQUE_NAME@
+#define __env_set_encrypt __env_set_encrypt@DB_VERSION_UNIQUE_NAME@
+#define __env_set_flags __env_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __env_set_data_dir __env_set_data_dir@DB_VERSION_UNIQUE_NAME@
+#define __env_set_intermediate_dir __env_set_intermediate_dir@DB_VERSION_UNIQUE_NAME@
+#define __env_set_errcall __env_set_errcall@DB_VERSION_UNIQUE_NAME@
+#define __env_get_errfile __env_get_errfile@DB_VERSION_UNIQUE_NAME@
+#define __env_set_errfile __env_set_errfile@DB_VERSION_UNIQUE_NAME@
+#define __env_get_errpfx __env_get_errpfx@DB_VERSION_UNIQUE_NAME@
+#define __env_set_errpfx __env_set_errpfx@DB_VERSION_UNIQUE_NAME@
+#define __env_set_msgcall __env_set_msgcall@DB_VERSION_UNIQUE_NAME@
+#define __env_get_msgfile __env_get_msgfile@DB_VERSION_UNIQUE_NAME@
+#define __env_set_msgfile __env_set_msgfile@DB_VERSION_UNIQUE_NAME@
+#define __env_set_paniccall __env_set_paniccall@DB_VERSION_UNIQUE_NAME@
+#define __env_set_shm_key __env_set_shm_key@DB_VERSION_UNIQUE_NAME@
+#define __env_set_tmp_dir __env_set_tmp_dir@DB_VERSION_UNIQUE_NAME@
+#define __env_set_verbose __env_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 __env_open_pp __env_open_pp@DB_VERSION_UNIQUE_NAME@
+#define __env_open __env_open@DB_VERSION_UNIQUE_NAME@
+#define __env_remove __env_remove@DB_VERSION_UNIQUE_NAME@
+#define __env_config __env_config@DB_VERSION_UNIQUE_NAME@
+#define __env_close_pp __env_close_pp@DB_VERSION_UNIQUE_NAME@
+#define __env_close __env_close@DB_VERSION_UNIQUE_NAME@
+#define __env_get_open_flags __env_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@
#define __log_backup __log_backup@DB_VERSION_UNIQUE_NAME@
#define __env_openfiles __env_openfiles@DB_VERSION_UNIQUE_NAME@
+#define __env_init_rec __env_init_rec@DB_VERSION_UNIQUE_NAME@
#define __db_e_attach __db_e_attach@DB_VERSION_UNIQUE_NAME@
+#define __db_e_golive __db_e_golive@DB_VERSION_UNIQUE_NAME@
#define __db_e_detach __db_e_detach@DB_VERSION_UNIQUE_NAME@
#define __db_e_remove __db_e_remove@DB_VERSION_UNIQUE_NAME@
#define __db_r_attach __db_r_attach@DB_VERSION_UNIQUE_NAME@
#define __db_r_detach __db_r_detach@DB_VERSION_UNIQUE_NAME@
-#define __dbenv_stat_print_pp __dbenv_stat_print_pp@DB_VERSION_UNIQUE_NAME@
+#define __envreg_register __envreg_register@DB_VERSION_UNIQUE_NAME@
+#define __envreg_unregister __envreg_unregister@DB_VERSION_UNIQUE_NAME@
+#define __envreg_xunlock __envreg_xunlock@DB_VERSION_UNIQUE_NAME@
+#define __env_stat_print_pp __env_stat_print_pp@DB_VERSION_UNIQUE_NAME@
#define __db_print_fh __db_print_fh@DB_VERSION_UNIQUE_NAME@
#define __db_print_fileid __db_print_fileid@DB_VERSION_UNIQUE_NAME@
-#define __db_print_mutex __db_print_mutex@DB_VERSION_UNIQUE_NAME@
#define __db_dl __db_dl@DB_VERSION_UNIQUE_NAME@
#define __db_dl_pct __db_dl_pct@DB_VERSION_UNIQUE_NAME@
#define __db_dlbytes __db_dlbytes@DB_VERSION_UNIQUE_NAME@
@@ -595,8 +738,10 @@
#define __ham_replace_read __ham_replace_read@DB_VERSION_UNIQUE_NAME@
#define __ham_copypage_log __ham_copypage_log@DB_VERSION_UNIQUE_NAME@
#define __ham_copypage_read __ham_copypage_read@DB_VERSION_UNIQUE_NAME@
+#define __ham_metagroup_42_read __ham_metagroup_42_read@DB_VERSION_UNIQUE_NAME@
#define __ham_metagroup_log __ham_metagroup_log@DB_VERSION_UNIQUE_NAME@
#define __ham_metagroup_read __ham_metagroup_read@DB_VERSION_UNIQUE_NAME@
+#define __ham_groupalloc_42_read __ham_groupalloc_42_read@DB_VERSION_UNIQUE_NAME@
#define __ham_groupalloc_log __ham_groupalloc_log@DB_VERSION_UNIQUE_NAME@
#define __ham_groupalloc_read __ham_groupalloc_read@DB_VERSION_UNIQUE_NAME@
#define __ham_curadj_log __ham_curadj_log@DB_VERSION_UNIQUE_NAME@
@@ -609,7 +754,9 @@
#define __ham_splitdata_print __ham_splitdata_print@DB_VERSION_UNIQUE_NAME@
#define __ham_replace_print __ham_replace_print@DB_VERSION_UNIQUE_NAME@
#define __ham_copypage_print __ham_copypage_print@DB_VERSION_UNIQUE_NAME@
+#define __ham_metagroup_42_print __ham_metagroup_42_print@DB_VERSION_UNIQUE_NAME@
#define __ham_metagroup_print __ham_metagroup_print@DB_VERSION_UNIQUE_NAME@
+#define __ham_groupalloc_42_print __ham_groupalloc_42_print@DB_VERSION_UNIQUE_NAME@
#define __ham_groupalloc_print __ham_groupalloc_print@DB_VERSION_UNIQUE_NAME@
#define __ham_curadj_print __ham_curadj_print@DB_VERSION_UNIQUE_NAME@
#define __ham_chgpg_print __ham_chgpg_print@DB_VERSION_UNIQUE_NAME@
@@ -666,6 +813,8 @@
#define __ham_groupalloc_recover __ham_groupalloc_recover@DB_VERSION_UNIQUE_NAME@
#define __ham_curadj_recover __ham_curadj_recover@DB_VERSION_UNIQUE_NAME@
#define __ham_chgpg_recover __ham_chgpg_recover@DB_VERSION_UNIQUE_NAME@
+#define __ham_metagroup_42_recover __ham_metagroup_42_recover@DB_VERSION_UNIQUE_NAME@
+#define __ham_groupalloc_42_recover __ham_groupalloc_42_recover@DB_VERSION_UNIQUE_NAME@
#define __ham_reclaim __ham_reclaim@DB_VERSION_UNIQUE_NAME@
#define __ham_truncate __ham_truncate@DB_VERSION_UNIQUE_NAME@
#define __ham_stat __ham_stat@DB_VERSION_UNIQUE_NAME@
@@ -702,8 +851,10 @@
#define __lock_promote __lock_promote@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_failchk __lock_failchk@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_set_thread_id __lock_set_thread_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_id_set __lock_id_set@DB_VERSION_UNIQUE_NAME@
@@ -715,16 +866,22 @@
#define __lock_get_list __lock_get_list@DB_VERSION_UNIQUE_NAME@
#define __lock_list_print __lock_list_print@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_dbenv_destroy __lock_dbenv_destroy@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_lk_conflicts __lock_get_lk_conflicts@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_lk_conflicts __lock_set_lk_conflicts@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_lk_detect __lock_get_lk_detect@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_get_lk_max_locks __lock_get_lk_max_locks@DB_VERSION_UNIQUE_NAME@
#define __lock_set_lk_max_locks __lock_set_lk_max_locks@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_lk_max_lockers __lock_get_lk_max_lockers@DB_VERSION_UNIQUE_NAME@
#define __lock_set_lk_max_lockers __lock_set_lk_max_lockers@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_lk_max_objects __lock_get_lk_max_objects@DB_VERSION_UNIQUE_NAME@
#define __lock_set_lk_max_objects __lock_set_lk_max_objects@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_env_timeout __lock_get_env_timeout@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_region_mutex_count __lock_region_mutex_count@DB_VERSION_UNIQUE_NAME@
#define __lock_stat_pp __lock_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_stat_print_pp __lock_stat_print_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_stat_print __lock_stat_print@DB_VERSION_UNIQUE_NAME@
@@ -734,42 +891,56 @@
#define __lock_inherit_timeout __lock_inherit_timeout@DB_VERSION_UNIQUE_NAME@
#define __lock_expires __lock_expires@DB_VERSION_UNIQUE_NAME@
#define __lock_expired __lock_expired@DB_VERSION_UNIQUE_NAME@
-#define __lock_cmp __lock_cmp@DB_VERSION_UNIQUE_NAME@
-#define __lock_locker_cmp __lock_locker_cmp@DB_VERSION_UNIQUE_NAME@
#define __lock_ohash __lock_ohash@DB_VERSION_UNIQUE_NAME@
#define __lock_lhash __lock_lhash@DB_VERSION_UNIQUE_NAME@
-#define __lock_locker_hash __lock_locker_hash@DB_VERSION_UNIQUE_NAME@
#define __lock_nomem __lock_nomem@DB_VERSION_UNIQUE_NAME@
#define __log_open __log_open@DB_VERSION_UNIQUE_NAME@
#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_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_region_mutex_count __log_region_mutex_count@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_zero __log_zero@DB_VERSION_UNIQUE_NAME@
#define __log_inmem_lsnoff __log_inmem_lsnoff@DB_VERSION_UNIQUE_NAME@
#define __log_inmem_newfile __log_inmem_newfile@DB_VERSION_UNIQUE_NAME@
#define __log_inmem_chkspace __log_inmem_chkspace@DB_VERSION_UNIQUE_NAME@
#define __log_inmem_copyout __log_inmem_copyout@DB_VERSION_UNIQUE_NAME@
#define __log_inmem_copyin __log_inmem_copyin@DB_VERSION_UNIQUE_NAME@
+#define __log_set_version __log_set_version@DB_VERSION_UNIQUE_NAME@
+#define __log_get_oldversion __log_get_oldversion@DB_VERSION_UNIQUE_NAME@
#define __log_archive_pp __log_archive_pp@DB_VERSION_UNIQUE_NAME@
+#define __log_get_stable_lsn __log_get_stable_lsn@DB_VERSION_UNIQUE_NAME@
#define __log_autoremove __log_autoremove@DB_VERSION_UNIQUE_NAME@
+#define __log_check_page_lsn __log_check_page_lsn@DB_VERSION_UNIQUE_NAME@
+#define __log_printf_capi __log_printf_capi@DB_VERSION_UNIQUE_NAME@
+#define __log_printf_pp __log_printf_pp@DB_VERSION_UNIQUE_NAME@
+#define __log_printf __log_printf@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_version __log_c_version@DB_VERSION_UNIQUE_NAME@
#define __log_c_get __log_c_get@DB_VERSION_UNIQUE_NAME@
+#define __log_rep_split __log_rep_split@DB_VERSION_UNIQUE_NAME@
#define __log_dbenv_create __log_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __log_dbenv_destroy __log_dbenv_destroy@DB_VERSION_UNIQUE_NAME@
+#define __log_get_lg_bsize __log_get_lg_bsize@DB_VERSION_UNIQUE_NAME@
#define __log_set_lg_bsize __log_set_lg_bsize@DB_VERSION_UNIQUE_NAME@
+#define __log_get_lg_filemode __log_get_lg_filemode@DB_VERSION_UNIQUE_NAME@
+#define __log_set_lg_filemode __log_set_lg_filemode@DB_VERSION_UNIQUE_NAME@
+#define __log_get_lg_max __log_get_lg_max@DB_VERSION_UNIQUE_NAME@
#define __log_set_lg_max __log_set_lg_max@DB_VERSION_UNIQUE_NAME@
+#define __log_get_lg_regionmax __log_get_lg_regionmax@DB_VERSION_UNIQUE_NAME@
#define __log_set_lg_regionmax __log_set_lg_regionmax@DB_VERSION_UNIQUE_NAME@
+#define __log_get_lg_dir __log_get_lg_dir@DB_VERSION_UNIQUE_NAME@
#define __log_set_lg_dir __log_set_lg_dir@DB_VERSION_UNIQUE_NAME@
#define __log_get_flags __log_get_flags@DB_VERSION_UNIQUE_NAME@
#define __log_set_flags __log_set_flags@DB_VERSION_UNIQUE_NAME@
#define __log_check_sizes __log_check_sizes@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_current_lsn __log_current_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@
@@ -781,6 +952,7 @@
#define __log_stat_print_pp __log_stat_print_pp@DB_VERSION_UNIQUE_NAME@
#define __log_stat_print __log_stat_print@DB_VERSION_UNIQUE_NAME@
#define __memp_alloc __memp_alloc@DB_VERSION_UNIQUE_NAME@
+#define __memp_free __memp_free@DB_VERSION_UNIQUE_NAME@
#ifdef DIAGNOSTIC
#define __memp_check_order __memp_check_order@DB_VERSION_UNIQUE_NAME@
#endif
@@ -809,28 +981,44 @@
#define __memp_fclose_pp __memp_fclose_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_fclose __memp_fclose@DB_VERSION_UNIQUE_NAME@
#define __memp_mf_discard __memp_mf_discard@DB_VERSION_UNIQUE_NAME@
+#define __memp_inmemlist __memp_inmemlist@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_dirty __memp_dirty@DB_VERSION_UNIQUE_NAME@
#define __memp_dbenv_create __memp_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __memp_dbenv_destroy __memp_dbenv_destroy@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_get_mp_max_openfd __memp_get_mp_max_openfd@DB_VERSION_UNIQUE_NAME@
#define __memp_set_mp_max_openfd __memp_set_mp_max_openfd@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_mp_max_write __memp_get_mp_max_write@DB_VERSION_UNIQUE_NAME@
#define __memp_set_mp_max_write __memp_set_mp_max_write@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_mp_mmapsize __memp_get_mp_mmapsize@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_ftruncate __memp_ftruncate@DB_VERSION_UNIQUE_NAME@
+#define __memp_alloc_freelist __memp_alloc_freelist@DB_VERSION_UNIQUE_NAME@
+#define __memp_free_freelist __memp_free_freelist@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_freelist __memp_get_freelist@DB_VERSION_UNIQUE_NAME@
+#define __memp_extend_freelist __memp_extend_freelist@DB_VERSION_UNIQUE_NAME@
+#define __memp_bh_priority __memp_bh_priority@DB_VERSION_UNIQUE_NAME@
+#define __memp_bucket_reorder __memp_bucket_reorder@DB_VERSION_UNIQUE_NAME@
+#define __memp_bh_settxn __memp_bh_settxn@DB_VERSION_UNIQUE_NAME@
+#define __memp_skip_curadj __memp_skip_curadj@DB_VERSION_UNIQUE_NAME@
+#define __memp_bh_freeze __memp_bh_freeze@DB_VERSION_UNIQUE_NAME@
+#define __memp_bh_thaw __memp_bh_thaw@DB_VERSION_UNIQUE_NAME@
#define __memp_open __memp_open@DB_VERSION_UNIQUE_NAME@
+#define __memp_region_mutex_count __memp_region_mutex_count@DB_VERSION_UNIQUE_NAME@
#define __memp_dbenv_refresh __memp_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
-#define __memp_region_destroy __memp_region_destroy@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_pp __memp_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_stat_print_pp __memp_stat_print_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_stat_print __memp_stat_print@DB_VERSION_UNIQUE_NAME@
#define __memp_stat_hash __memp_stat_hash@DB_VERSION_UNIQUE_NAME@
+#define __memp_walk_files __memp_walk_files@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@
@@ -839,14 +1027,40 @@
#define __memp_sync_int __memp_sync_int@DB_VERSION_UNIQUE_NAME@
#define __memp_mf_sync __memp_mf_sync@DB_VERSION_UNIQUE_NAME@
#define __memp_trickle_pp __memp_trickle_pp@DB_VERSION_UNIQUE_NAME@
+#define __mutex_alloc __mutex_alloc@DB_VERSION_UNIQUE_NAME@
+#define __mutex_alloc_int __mutex_alloc_int@DB_VERSION_UNIQUE_NAME@
+#define __mutex_free __mutex_free@DB_VERSION_UNIQUE_NAME@
+#define __mutex_free_int __mutex_free_int@DB_VERSION_UNIQUE_NAME@
+#define __mut_failchk __mut_failchk@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@
#define __db_fcntl_mutex_destroy __db_fcntl_mutex_destroy@DB_VERSION_UNIQUE_NAME@
+#define __mutex_alloc_pp __mutex_alloc_pp@DB_VERSION_UNIQUE_NAME@
+#define __mutex_free_pp __mutex_free_pp@DB_VERSION_UNIQUE_NAME@
+#define __mutex_lock_pp __mutex_lock_pp@DB_VERSION_UNIQUE_NAME@
+#define __mutex_unlock_pp __mutex_unlock_pp@DB_VERSION_UNIQUE_NAME@
+#define __mutex_get_align __mutex_get_align@DB_VERSION_UNIQUE_NAME@
+#define __mutex_set_align __mutex_set_align@DB_VERSION_UNIQUE_NAME@
+#define __mutex_get_increment __mutex_get_increment@DB_VERSION_UNIQUE_NAME@
+#define __mutex_set_increment __mutex_set_increment@DB_VERSION_UNIQUE_NAME@
+#define __mutex_get_max __mutex_get_max@DB_VERSION_UNIQUE_NAME@
+#define __mutex_set_max __mutex_set_max@DB_VERSION_UNIQUE_NAME@
+#define __mutex_get_tas_spins __mutex_get_tas_spins@DB_VERSION_UNIQUE_NAME@
+#define __mutex_set_tas_spins __mutex_set_tas_spins@DB_VERSION_UNIQUE_NAME@
#define __db_pthread_mutex_init __db_pthread_mutex_init@DB_VERSION_UNIQUE_NAME@
#define __db_pthread_mutex_lock __db_pthread_mutex_lock@DB_VERSION_UNIQUE_NAME@
#define __db_pthread_mutex_unlock __db_pthread_mutex_unlock@DB_VERSION_UNIQUE_NAME@
#define __db_pthread_mutex_destroy __db_pthread_mutex_destroy@DB_VERSION_UNIQUE_NAME@
+#define __mutex_open __mutex_open@DB_VERSION_UNIQUE_NAME@
+#define __mutex_dbenv_refresh __mutex_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
+#define __mutex_resource_return __mutex_resource_return@DB_VERSION_UNIQUE_NAME@
+#define __mutex_stat __mutex_stat@DB_VERSION_UNIQUE_NAME@
+#define __mutex_stat_print __mutex_stat_print@DB_VERSION_UNIQUE_NAME@
+#define __mutex_print_debug_single __mutex_print_debug_single@DB_VERSION_UNIQUE_NAME@
+#define __mutex_print_debug_stats __mutex_print_debug_stats@DB_VERSION_UNIQUE_NAME@
+#define __mutex_set_wait_info __mutex_set_wait_info@DB_VERSION_UNIQUE_NAME@
+#define __mutex_clear __mutex_clear@DB_VERSION_UNIQUE_NAME@
#define __db_tas_mutex_init __db_tas_mutex_init@DB_VERSION_UNIQUE_NAME@
#define __db_tas_mutex_lock __db_tas_mutex_lock@DB_VERSION_UNIQUE_NAME@
#define __db_tas_mutex_unlock __db_tas_mutex_unlock@DB_VERSION_UNIQUE_NAME@
@@ -855,12 +1069,6 @@
#define __db_win32_mutex_lock __db_win32_mutex_lock@DB_VERSION_UNIQUE_NAME@
#define __db_win32_mutex_unlock __db_win32_mutex_unlock@DB_VERSION_UNIQUE_NAME@
#define __db_win32_mutex_destroy __db_win32_mutex_destroy@DB_VERSION_UNIQUE_NAME@
-#define __db_mutex_setup __db_mutex_setup@DB_VERSION_UNIQUE_NAME@
-#define __db_mutex_free __db_mutex_free@DB_VERSION_UNIQUE_NAME@
-#define __db_shreg_locks_clear __db_shreg_locks_clear@DB_VERSION_UNIQUE_NAME@
-#define __db_shreg_locks_destroy __db_shreg_locks_destroy@DB_VERSION_UNIQUE_NAME@
-#define __db_shreg_mutex_init __db_shreg_mutex_init@DB_VERSION_UNIQUE_NAME@
-#define __db_shreg_maintinit __db_shreg_maintinit@DB_VERSION_UNIQUE_NAME@
#define __os_abspath __os_abspath@DB_VERSION_UNIQUE_NAME@
#define __os_umalloc __os_umalloc@DB_VERSION_UNIQUE_NAME@
#define __os_urealloc __os_urealloc@DB_VERSION_UNIQUE_NAME@
@@ -873,30 +1081,38 @@
#define __ua_memcpy __ua_memcpy@DB_VERSION_UNIQUE_NAME@
#define __os_clock __os_clock@DB_VERSION_UNIQUE_NAME@
#define __os_fs_notzero __os_fs_notzero@DB_VERSION_UNIQUE_NAME@
+#define __os_support_direct_io __os_support_direct_io@DB_VERSION_UNIQUE_NAME@
+#define __os_support_db_register __os_support_db_register@DB_VERSION_UNIQUE_NAME@
+#define __os_support_replication __os_support_replication@DB_VERSION_UNIQUE_NAME@
#define __os_dirlist __os_dirlist@DB_VERSION_UNIQUE_NAME@
#define __os_dirfree __os_dirfree@DB_VERSION_UNIQUE_NAME@
#define __os_get_errno_ret_zero __os_get_errno_ret_zero@DB_VERSION_UNIQUE_NAME@
#define __os_get_errno __os_get_errno@DB_VERSION_UNIQUE_NAME@
+#define __os_get_neterr __os_get_neterr@DB_VERSION_UNIQUE_NAME@
+#define __os_get_syserr __os_get_syserr@DB_VERSION_UNIQUE_NAME@
#define __os_set_errno __os_set_errno@DB_VERSION_UNIQUE_NAME@
+#define __os_strerror __os_strerror@DB_VERSION_UNIQUE_NAME@
+#define __os_posix_err __os_posix_err@DB_VERSION_UNIQUE_NAME@
#define __os_fileid __os_fileid@DB_VERSION_UNIQUE_NAME@
+#define __os_fdlock __os_fdlock@DB_VERSION_UNIQUE_NAME@
#define __os_fsync __os_fsync@DB_VERSION_UNIQUE_NAME@
+#define __os_zerofill __os_zerofill@DB_VERSION_UNIQUE_NAME@
+#define __os_getenv __os_getenv@DB_VERSION_UNIQUE_NAME@
#define __os_openhandle __os_openhandle@DB_VERSION_UNIQUE_NAME@
#define __os_closehandle __os_closehandle@DB_VERSION_UNIQUE_NAME@
-#define __os_id __os_id@DB_VERSION_UNIQUE_NAME@
-#define __os_unique_id __os_unique_id@DB_VERSION_UNIQUE_NAME@
#define __os_r_sysattach __os_r_sysattach@DB_VERSION_UNIQUE_NAME@
#define __os_r_sysdetach __os_r_sysdetach@DB_VERSION_UNIQUE_NAME@
#define __os_mapfile __os_mapfile@DB_VERSION_UNIQUE_NAME@
#define __os_unmapfile __os_unmapfile@DB_VERSION_UNIQUE_NAME@
+#define __os_mkdir __os_mkdir@DB_VERSION_UNIQUE_NAME@
#define __db_oflags __db_oflags@DB_VERSION_UNIQUE_NAME@
#define __db_omode __db_omode@DB_VERSION_UNIQUE_NAME@
-#define __db_shm_mode __db_shm_mode@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
+#define __os_id __os_id@DB_VERSION_UNIQUE_NAME@
#define __os_r_attach __os_r_attach@DB_VERSION_UNIQUE_NAME@
#define __os_r_detach __os_r_detach@DB_VERSION_UNIQUE_NAME@
#define __os_rename __os_rename@DB_VERSION_UNIQUE_NAME@
@@ -905,25 +1121,27 @@
#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_physwrite __os_physwrite@DB_VERSION_UNIQUE_NAME@
#define __os_seek __os_seek@DB_VERSION_UNIQUE_NAME@
#define __os_sleep __os_sleep@DB_VERSION_UNIQUE_NAME@
#define __os_spin __os_spin@DB_VERSION_UNIQUE_NAME@
-#define __os_yield __os_yield@DB_VERSION_UNIQUE_NAME@
#define __os_exists __os_exists@DB_VERSION_UNIQUE_NAME@
#define __os_ioinfo __os_ioinfo@DB_VERSION_UNIQUE_NAME@
#define __os_tmpdir __os_tmpdir@DB_VERSION_UNIQUE_NAME@
#define __os_truncate __os_truncate@DB_VERSION_UNIQUE_NAME@
+#define __os_unique_id __os_unique_id@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_yield __os_yield@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 __os_unlink __os_unlink@DB_VERSION_UNIQUE_NAME@
+#define __os_get_neterr __os_get_neterr@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@
#define __qam_c_dup __qam_c_dup@DB_VERSION_UNIQUE_NAME@
#define __qam_c_init __qam_c_init@DB_VERSION_UNIQUE_NAME@
#define __qam_truncate __qam_truncate@DB_VERSION_UNIQUE_NAME@
+#define __qam_delete __qam_delete@DB_VERSION_UNIQUE_NAME@
#define __qam_incfirst_log __qam_incfirst_log@DB_VERSION_UNIQUE_NAME@
#define __qam_incfirst_read __qam_incfirst_read@DB_VERSION_UNIQUE_NAME@
#define __qam_mvptr_log __qam_mvptr_log@DB_VERSION_UNIQUE_NAME@
@@ -986,34 +1204,61 @@
#define __rep_update_req __rep_update_req@DB_VERSION_UNIQUE_NAME@
#define __rep_page_req __rep_page_req@DB_VERSION_UNIQUE_NAME@
#define __rep_update_setup __rep_update_setup@DB_VERSION_UNIQUE_NAME@
+#define __rep_bulk_page __rep_bulk_page@DB_VERSION_UNIQUE_NAME@
#define __rep_page __rep_page@DB_VERSION_UNIQUE_NAME@
#define __rep_page_fail __rep_page_fail@DB_VERSION_UNIQUE_NAME@
+#define __rep_init_cleanup __rep_init_cleanup@DB_VERSION_UNIQUE_NAME@
#define __rep_pggap_req __rep_pggap_req@DB_VERSION_UNIQUE_NAME@
-#define __rep_loggap_req __rep_loggap_req@DB_VERSION_UNIQUE_NAME@
#define __rep_finfo_alloc __rep_finfo_alloc@DB_VERSION_UNIQUE_NAME@
+#define __rep_elect __rep_elect@DB_VERSION_UNIQUE_NAME@
+#define __rep_vote1 __rep_vote1@DB_VERSION_UNIQUE_NAME@
+#define __rep_vote2 __rep_vote2@DB_VERSION_UNIQUE_NAME@
+#define __rep_elect_master __rep_elect_master@DB_VERSION_UNIQUE_NAME@
+#define __rep_allreq __rep_allreq@DB_VERSION_UNIQUE_NAME@
+#define __rep_log __rep_log@DB_VERSION_UNIQUE_NAME@
+#define __rep_bulk_log __rep_bulk_log@DB_VERSION_UNIQUE_NAME@
+#define __rep_logreq __rep_logreq@DB_VERSION_UNIQUE_NAME@
+#define __rep_loggap_req __rep_loggap_req@DB_VERSION_UNIQUE_NAME@
+#define __rep_logready __rep_logready@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_dbenv_destroy __rep_dbenv_destroy@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_config __rep_get_config@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_config __rep_set_config@DB_VERSION_UNIQUE_NAME@
+#define __rep_start __rep_start@DB_VERSION_UNIQUE_NAME@
#define __rep_client_dbinit __rep_client_dbinit@DB_VERSION_UNIQUE_NAME@
-#define __rep_elect_master __rep_elect_master@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_limit __rep_get_limit@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_limit __rep_set_limit@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_nsites __rep_set_nsites@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_nsites __rep_get_nsites@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_priority __rep_set_priority@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_priority __rep_get_priority@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_timeout __rep_set_timeout@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_timeout __rep_get_timeout@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_request __rep_get_request@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_request __rep_set_request@DB_VERSION_UNIQUE_NAME@
+#define __rep_set_transport __rep_set_transport@DB_VERSION_UNIQUE_NAME@
+#define __rep_flush __rep_flush@DB_VERSION_UNIQUE_NAME@
+#define __rep_sync __rep_sync@DB_VERSION_UNIQUE_NAME@
#define __rep_process_message __rep_process_message@DB_VERSION_UNIQUE_NAME@
+#define __rep_apply __rep_apply@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_check_doreq __rep_check_doreq@DB_VERSION_UNIQUE_NAME@
-#define __rep_lockout __rep_lockout@DB_VERSION_UNIQUE_NAME@
-#define __rep_region_init __rep_region_init@DB_VERSION_UNIQUE_NAME@
+#define __rep_open __rep_open@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_close __rep_close@DB_VERSION_UNIQUE_NAME@
#define __rep_preclose __rep_preclose@DB_VERSION_UNIQUE_NAME@
+#define __rep_closefiles __rep_closefiles@DB_VERSION_UNIQUE_NAME@
#define __rep_write_egen __rep_write_egen@DB_VERSION_UNIQUE_NAME@
#define __rep_stat_pp __rep_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __rep_stat_print_pp __rep_stat_print_pp@DB_VERSION_UNIQUE_NAME@
#define __rep_stat_print __rep_stat_print@DB_VERSION_UNIQUE_NAME@
+#define __rep_bulk_message __rep_bulk_message@DB_VERSION_UNIQUE_NAME@
+#define __rep_send_bulk __rep_send_bulk@DB_VERSION_UNIQUE_NAME@
+#define __rep_bulk_alloc __rep_bulk_alloc@DB_VERSION_UNIQUE_NAME@
+#define __rep_bulk_free __rep_bulk_free@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_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@
@@ -1024,8 +1269,92 @@
#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_lockout_api __rep_lockout_api@DB_VERSION_UNIQUE_NAME@
+#define __rep_lockout_msg __rep_lockout_msg@DB_VERSION_UNIQUE_NAME@
+#define __rep_send_throttle __rep_send_throttle@DB_VERSION_UNIQUE_NAME@
+#define __rep_msg_to_old __rep_msg_to_old@DB_VERSION_UNIQUE_NAME@
+#define __rep_msg_from_old __rep_msg_from_old@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 __rep_verify __rep_verify@DB_VERSION_UNIQUE_NAME@
+#define __rep_verify_fail __rep_verify_fail@DB_VERSION_UNIQUE_NAME@
+#define __rep_verify_req __rep_verify_req@DB_VERSION_UNIQUE_NAME@
+#define __rep_verify_match __rep_verify_match@DB_VERSION_UNIQUE_NAME@
+#define __rep_log_backup __rep_log_backup@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_init_election __repmgr_init_election@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_become_master __repmgr_become_master@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_start __repmgr_start@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_close __repmgr_close@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_set_ack_policy __repmgr_set_ack_policy@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_get_ack_policy __repmgr_get_ack_policy@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_dbenv_create __repmgr_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_dbenv_destroy __repmgr_dbenv_destroy@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_stop_threads __repmgr_stop_threads@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_set_local_site __repmgr_set_local_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_add_remote_site __repmgr_add_remote_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_msg_thread __repmgr_msg_thread@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_stash_generation __repmgr_stash_generation@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_send __repmgr_send@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_send_one __repmgr_send_one@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_is_permanent __repmgr_is_permanent@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_bust_connection __repmgr_bust_connection@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_cleanup_connection __repmgr_cleanup_connection@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_find_site __repmgr_find_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_pack_netaddr __repmgr_pack_netaddr@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_getaddr __repmgr_getaddr@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_add_site __repmgr_add_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_net_create __repmgr_net_create@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_listen __repmgr_listen@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_net_close __repmgr_net_close@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_net_destroy __repmgr_net_destroy@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_thread_start __repmgr_thread_start@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_thread_join __repmgr_thread_join@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_set_nonblocking __repmgr_set_nonblocking@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_wake_waiting_senders __repmgr_wake_waiting_senders@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_await_ack __repmgr_await_ack@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_compute_wait_deadline __repmgr_compute_wait_deadline@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_init_sync __repmgr_init_sync@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_close_sync __repmgr_close_sync@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_net_init __repmgr_net_init@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_lock_mutex __repmgr_lock_mutex@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_unlock_mutex __repmgr_unlock_mutex@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_signal __repmgr_signal@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_wake_main_thread __repmgr_wake_main_thread@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_writev __repmgr_writev@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_readv __repmgr_readv@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_timeval_diff_current __repmgr_timeval_diff_current@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_select_loop __repmgr_select_loop@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_queue_create __repmgr_queue_create@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_queue_destroy __repmgr_queue_destroy@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_queue_get __repmgr_queue_get@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_queue_put __repmgr_queue_put@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_queue_size __repmgr_queue_size@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_select_thread __repmgr_select_thread@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_accept __repmgr_accept@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_retry_connections __repmgr_retry_connections@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_first_try_connections __repmgr_first_try_connections@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_connect_site __repmgr_connect_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_send_handshake __repmgr_send_handshake@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_read_from_site __repmgr_read_from_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_write_some __repmgr_write_some@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_site_list __repmgr_site_list@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_print_stats __repmgr_print_stats@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_schedule_connection_attempt __repmgr_schedule_connection_attempt@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_reset_for_reading __repmgr_reset_for_reading@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_new_connection __repmgr_new_connection@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_new_site __repmgr_new_site@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_cleanup_netaddr __repmgr_cleanup_netaddr@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_iovec_init __repmgr_iovec_init@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_add_buffer __repmgr_add_buffer@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_add_dbt __repmgr_add_dbt@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_update_consumed __repmgr_update_consumed@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_prepare_my_addr __repmgr_prepare_my_addr@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_timeval_cmp __repmgr_timeval_cmp@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_get_nsites __repmgr_get_nsites@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_thread_failure __repmgr_thread_failure@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_format_eid_loc __repmgr_format_eid_loc@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_format_site_loc __repmgr_format_site_loc@DB_VERSION_UNIQUE_NAME@
+#define __repmgr_wsa_init __repmgr_wsa_init@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_set_rpc_server __dbcl_env_set_rpc_server@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@
@@ -1036,192 +1365,88 @@
#define __dbcl_c_refresh __dbcl_c_refresh@DB_VERSION_UNIQUE_NAME@
#define __dbcl_c_setup __dbcl_c_setup@DB_VERSION_UNIQUE_NAME@
#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_dbenv_illegal __dbcl_dbenv_illegal@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_cdsgroup_begin __dbcl_env_cdsgroup_begin@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_close __dbcl_env_close@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_cachesize __dbcl_env_get_cachesize@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_max_openfd __dbcl_get_mp_max_openfd@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_set_mp_max_openfd __dbcl_set_mp_max_openfd@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_get_mp_max_write __dbcl_get_mp_max_write@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_set_mp_max_write __dbcl_set_mp_max_write@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@
-#define __dbcl_txn_checkpoint __dbcl_txn_checkpoint@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_commit __dbcl_txn_commit@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_discard __dbcl_txn_discard@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_prepare __dbcl_txn_prepare@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_recover __dbcl_txn_recover@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_stat __dbcl_txn_stat@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_timeout __dbcl_txn_timeout@DB_VERSION_UNIQUE_NAME@
-#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@
-#define __dbcl_rep_start __dbcl_rep_start@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_rep_stat __dbcl_rep_stat@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_db_alloc __dbcl_db_alloc@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_set_cachesize __dbcl_env_set_cachesize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_set_encrypt __dbcl_env_set_encrypt@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_set_flags __dbcl_env_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_txn_begin __dbcl_env_txn_begin@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_txn_recover __dbcl_env_txn_recover@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_create __dbcl_db_create@DB_VERSION_UNIQUE_NAME@
#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_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_cursor __dbcl_db_cursor@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 __dbcl_db_get@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_bt_minkey __dbcl_db_get_bt_minkey@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_dbname __dbcl_db_get_dbname@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_open_flags __dbcl_db_get_open_flags@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_q_extentsize __dbcl_db_get_q_extentsize@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_join __dbcl_db_join@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_key_range __dbcl_db_key_range@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_open __dbcl_db_open@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_remove __dbcl_db_remove@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_rename __dbcl_db_rename@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_bt_minkey __dbcl_db_set_bt_minkey@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_encrypt __dbcl_db_set_encrypt@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_flags __dbcl_db_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_h_ffactor __dbcl_db_set_h_ffactor@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_h_nelem __dbcl_db_set_h_nelem@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_lorder __dbcl_db_set_lorder@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_pagesize __dbcl_db_set_pagesize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_q_extentsize __dbcl_db_set_q_extentsize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_re_delim __dbcl_db_set_re_delim@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_re_len __dbcl_db_set_re_len@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_set_re_pad __dbcl_db_set_re_pad@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_stat __dbcl_db_stat@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_sync __dbcl_db_sync@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_truncate __dbcl_db_truncate@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_db_upgrade __dbcl_db_upgrade@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_db_verify __dbcl_db_verify@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_db_cursor __dbcl_db_cursor@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_db_join __dbcl_db_join@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_close __dbcl_dbc_close@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_count __dbcl_dbc_count@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_del __dbcl_dbc_del@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_dup __dbcl_dbc_dup@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_get __dbcl_dbc_get@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_pget __dbcl_dbc_pget@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_put __dbcl_dbc_put@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_detect __dbcl_lock_detect@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_get __dbcl_lock_get@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_id __dbcl_lock_id@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_id_free __dbcl_lock_id_free@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_put __dbcl_lock_put@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_stat __dbcl_lock_stat@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_lock_vec __dbcl_lock_vec@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_log_archive __dbcl_log_archive@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_log_cursor __dbcl_log_cursor@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_log_file __dbcl_log_file@DB_VERSION_UNIQUE_NAME@
-#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_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_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_dbc_c_close __dbcl_dbc_c_close@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_count __dbcl_dbc_c_count@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_del __dbcl_dbc_c_del@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_dup __dbcl_dbc_c_dup@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_get __dbcl_dbc_c_get@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_pget __dbcl_dbc_c_pget@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_put __dbcl_dbc_c_put@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_txn_abort __dbcl_txn_abort@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_txn_commit __dbcl_txn_commit@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_txn_discard __dbcl_txn_discard@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_txn_prepare __dbcl_txn_prepare@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbp_init __dbcl_dbp_init@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_init __dbcl_dbc_init@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbenv_init __dbcl_dbenv_init@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_txn_init __dbcl_txn_init@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@
#define __dbcl_txn_abort_ret __dbcl_txn_abort_ret@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_begin_ret __dbcl_txn_begin_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_txn_begin_ret __dbcl_env_txn_begin_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_cdsgroup_begin_ret __dbcl_env_cdsgroup_begin_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_txn_commit_ret __dbcl_txn_commit_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_txn_discard_ret __dbcl_txn_discard_ret@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_txn_recover_ret __dbcl_txn_recover_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_txn_recover_ret __dbcl_env_txn_recover_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_close_ret __dbcl_db_close_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_create_ret __dbcl_db_create_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_get_ret __dbcl_db_get_ret@DB_VERSION_UNIQUE_NAME@
@@ -1235,66 +1460,66 @@
#define __dbcl_db_truncate_ret __dbcl_db_truncate_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_cursor_ret __dbcl_db_cursor_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_join_ret __dbcl_db_join_ret@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_close_ret __dbcl_dbc_close_ret@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_count_ret __dbcl_dbc_count_ret@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_dbc_dup_ret __dbcl_dbc_dup_ret@DB_VERSION_UNIQUE_NAME@
-#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 __dbcl_dbc_c_close_ret __dbcl_dbc_c_close_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_count_ret __dbcl_dbc_c_count_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_dup_ret __dbcl_dbc_c_dup_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_get_ret __dbcl_dbc_c_get_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_pget_ret __dbcl_dbc_c_pget_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_dbc_c_put_ret __dbcl_dbc_c_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_set_cachesize_proc __env_set_cachesize_proc@DB_VERSION_UNIQUE_NAME@
+#define __env_cdsgroup_begin_proc __env_cdsgroup_begin_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_set_encrypt_proc __env_set_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_set_flags_proc __env_set_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@
-#define __txn_begin_proc __txn_begin_proc@DB_VERSION_UNIQUE_NAME@
+#define __env_txn_begin_proc __env_txn_begin_proc@DB_VERSION_UNIQUE_NAME@
#define __txn_commit_proc __txn_commit_proc@DB_VERSION_UNIQUE_NAME@
#define __txn_discard_proc __txn_discard_proc@DB_VERSION_UNIQUE_NAME@
#define __txn_prepare_proc __txn_prepare_proc@DB_VERSION_UNIQUE_NAME@
-#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 __env_txn_recover_proc __env_txn_recover_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_set_bt_minkey_proc __db_set_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_set_encrypt_proc __db_set_encrypt_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_q_extentsize_proc __db_get_q_extentsize_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_set_q_extentsize_proc __db_set_q_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_set_flags_proc __db_set_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_set_h_ffactor_proc __db_set_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_set_h_nelem_proc __db_set_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_set_lorder_proc __db_set_lorder_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_dbname_proc __db_get_dbname_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_set_pagesize_proc __db_set_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_set_re_delim_proc __db_set_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_set_re_len_proc __db_set_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_set_re_pad_proc __db_set_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@
#define __db_stat_proc __db_stat_proc@DB_VERSION_UNIQUE_NAME@
@@ -1302,15 +1527,14 @@
#define __db_truncate_proc __db_truncate_proc@DB_VERSION_UNIQUE_NAME@
#define __db_cursor_proc __db_cursor_proc@DB_VERSION_UNIQUE_NAME@
#define __db_join_proc __db_join_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_close_proc __dbc_close_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_count_proc __dbc_count_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_del_proc __dbc_del_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_dup_proc __dbc_dup_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_get_proc __dbc_get_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_pget_proc __dbc_pget_proc@DB_VERSION_UNIQUE_NAME@
-#define __dbc_put_proc __dbc_put_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_close_proc __dbc_c_close_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_count_proc __dbc_c_count_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_del_proc __dbc_c_del_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_dup_proc __dbc_c_dup_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_get_proc __dbc_c_get_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_pget_proc __dbc_c_pget_proc@DB_VERSION_UNIQUE_NAME@
+#define __dbc_c_put_proc __dbc_c_put_proc@DB_VERSION_UNIQUE_NAME@
#define __dbsrv_settimeout __dbsrv_settimeout@DB_VERSION_UNIQUE_NAME@
-#define __dbsrv_timeout __dbsrv_timeout@DB_VERSION_UNIQUE_NAME@
#define __dbclear_ctp __dbclear_ctp@DB_VERSION_UNIQUE_NAME@
#define __dbdel_ctp __dbdel_ctp@DB_VERSION_UNIQUE_NAME@
#define new_ct_ent new_ct_ent@DB_VERSION_UNIQUE_NAME@
@@ -1320,7 +1544,7 @@
#define __dbsrv_active __dbsrv_active@DB_VERSION_UNIQUE_NAME@
#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 __env_close_int __env_close_int@DB_VERSION_UNIQUE_NAME@
#define get_fullhome get_fullhome@DB_VERSION_UNIQUE_NAME@
#define __seq_stat __seq_stat@DB_VERSION_UNIQUE_NAME@
#define __seq_stat_print __seq_stat_print@DB_VERSION_UNIQUE_NAME@
@@ -1336,11 +1560,16 @@
#define ndbm_Cmd ndbm_Cmd@DB_VERSION_UNIQUE_NAME@
#define _DbInfoDelete _DbInfoDelete@DB_VERSION_UNIQUE_NAME@
#define db_Cmd db_Cmd@DB_VERSION_UNIQUE_NAME@
+#define tcl_CompactStat tcl_CompactStat@DB_VERSION_UNIQUE_NAME@
+#define tcl_rep_send tcl_rep_send@DB_VERSION_UNIQUE_NAME@
#define dbc_Cmd dbc_Cmd@DB_VERSION_UNIQUE_NAME@
#define env_Cmd env_Cmd@DB_VERSION_UNIQUE_NAME@
#define tcl_EnvRemove tcl_EnvRemove@DB_VERSION_UNIQUE_NAME@
+#define tcl_EnvIdReset tcl_EnvIdReset@DB_VERSION_UNIQUE_NAME@
+#define tcl_EnvLsnReset tcl_EnvLsnReset@DB_VERSION_UNIQUE_NAME@
#define tcl_EnvVerbose tcl_EnvVerbose@DB_VERSION_UNIQUE_NAME@
#define tcl_EnvAttr tcl_EnvAttr@DB_VERSION_UNIQUE_NAME@
+#define tcl_EventNotify tcl_EventNotify@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@
@@ -1362,6 +1591,7 @@
#define _ReturnSetup _ReturnSetup@DB_VERSION_UNIQUE_NAME@
#define _ErrorSetup _ErrorSetup@DB_VERSION_UNIQUE_NAME@
#define _ErrorFunc _ErrorFunc@DB_VERSION_UNIQUE_NAME@
+#define _EventFunc _EventFunc@DB_VERSION_UNIQUE_NAME@
#define _GetLsn _GetLsn@DB_VERSION_UNIQUE_NAME@
#define _GetUInt32 _GetUInt32@DB_VERSION_UNIQUE_NAME@
#define _GetFlagsList _GetFlagsList@DB_VERSION_UNIQUE_NAME@
@@ -1385,43 +1615,49 @@
#define tcl_MpTrickle tcl_MpTrickle@DB_VERSION_UNIQUE_NAME@
#define tcl_Mp tcl_Mp@DB_VERSION_UNIQUE_NAME@
#define tcl_MpStat tcl_MpStat@DB_VERSION_UNIQUE_NAME@
+#define tcl_RepConfig tcl_RepConfig@DB_VERSION_UNIQUE_NAME@
+#define tcl_RepGetConfig tcl_RepGetConfig@DB_VERSION_UNIQUE_NAME@
#define tcl_RepElect tcl_RepElect@DB_VERSION_UNIQUE_NAME@
#define tcl_RepFlush tcl_RepFlush@DB_VERSION_UNIQUE_NAME@
+#define tcl_RepSync tcl_RepSync@DB_VERSION_UNIQUE_NAME@
#define tcl_RepLimit tcl_RepLimit@DB_VERSION_UNIQUE_NAME@
#define tcl_RepRequest tcl_RepRequest@DB_VERSION_UNIQUE_NAME@
+#define tcl_RepTransport tcl_RepTransport@DB_VERSION_UNIQUE_NAME@
#define tcl_RepStart tcl_RepStart@DB_VERSION_UNIQUE_NAME@
#define tcl_RepProcessMessage tcl_RepProcessMessage@DB_VERSION_UNIQUE_NAME@
#define tcl_RepStat tcl_RepStat@DB_VERSION_UNIQUE_NAME@
+#define tcl_RepMgr tcl_RepMgr@DB_VERSION_UNIQUE_NAME@
#define seq_Cmd seq_Cmd@DB_VERSION_UNIQUE_NAME@
#define _TxnInfoDelete _TxnInfoDelete@DB_VERSION_UNIQUE_NAME@
#define tcl_TxnCheckpoint tcl_TxnCheckpoint@DB_VERSION_UNIQUE_NAME@
#define tcl_Txn tcl_Txn@DB_VERSION_UNIQUE_NAME@
+#define tcl_CDSGroup tcl_CDSGroup@DB_VERSION_UNIQUE_NAME@
#define tcl_TxnStat tcl_TxnStat@DB_VERSION_UNIQUE_NAME@
#define tcl_TxnTimeout tcl_TxnTimeout@DB_VERSION_UNIQUE_NAME@
#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_recycle_id __txn_recycle_id@DB_VERSION_UNIQUE_NAME@
#define __txn_compensate_begin __txn_compensate_begin@DB_VERSION_UNIQUE_NAME@
+#define __txn_continue __txn_continue@DB_VERSION_UNIQUE_NAME@
#define __txn_commit __txn_commit@DB_VERSION_UNIQUE_NAME@
#define __txn_abort __txn_abort@DB_VERSION_UNIQUE_NAME@
-#define __txn_discard __txn_discard@DB_VERSION_UNIQUE_NAME@
+#define __txn_discard_int __txn_discard_int@DB_VERSION_UNIQUE_NAME@
#define __txn_prepare __txn_prepare@DB_VERSION_UNIQUE_NAME@
#define __txn_id __txn_id@DB_VERSION_UNIQUE_NAME@
+#define __txn_get_name __txn_get_name@DB_VERSION_UNIQUE_NAME@
+#define __txn_set_name __txn_set_name@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_getactive __txn_getactive@DB_VERSION_UNIQUE_NAME@
-#define __txn_getckp __txn_getckp@DB_VERSION_UNIQUE_NAME@
#define __txn_activekids __txn_activekids@DB_VERSION_UNIQUE_NAME@
#define __txn_force_abort __txn_force_abort@DB_VERSION_UNIQUE_NAME@
#define __txn_preclose __txn_preclose@DB_VERSION_UNIQUE_NAME@
#define __txn_reset __txn_reset@DB_VERSION_UNIQUE_NAME@
-#define __txn_updateckp __txn_updateckp@DB_VERSION_UNIQUE_NAME@
+#define __txn_regop_42_read __txn_regop_42_read@DB_VERSION_UNIQUE_NAME@
#define __txn_regop_log __txn_regop_log@DB_VERSION_UNIQUE_NAME@
#define __txn_regop_read __txn_regop_read@DB_VERSION_UNIQUE_NAME@
+#define __txn_ckp_42_read __txn_ckp_42_read@DB_VERSION_UNIQUE_NAME@
#define __txn_ckp_log __txn_ckp_log@DB_VERSION_UNIQUE_NAME@
#define __txn_ckp_read __txn_ckp_read@DB_VERSION_UNIQUE_NAME@
#define __txn_child_log __txn_child_log@DB_VERSION_UNIQUE_NAME@
@@ -1431,21 +1667,34 @@
#define __txn_recycle_log __txn_recycle_log@DB_VERSION_UNIQUE_NAME@
#define __txn_recycle_read __txn_recycle_read@DB_VERSION_UNIQUE_NAME@
#define __txn_init_recover __txn_init_recover@DB_VERSION_UNIQUE_NAME@
+#define __txn_regop_42_print __txn_regop_42_print@DB_VERSION_UNIQUE_NAME@
#define __txn_regop_print __txn_regop_print@DB_VERSION_UNIQUE_NAME@
+#define __txn_ckp_42_print __txn_ckp_42_print@DB_VERSION_UNIQUE_NAME@
#define __txn_ckp_print __txn_ckp_print@DB_VERSION_UNIQUE_NAME@
#define __txn_child_print __txn_child_print@DB_VERSION_UNIQUE_NAME@
#define __txn_xa_regop_print __txn_xa_regop_print@DB_VERSION_UNIQUE_NAME@
#define __txn_recycle_print __txn_recycle_print@DB_VERSION_UNIQUE_NAME@
#define __txn_init_print __txn_init_print@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_getactive __txn_getactive@DB_VERSION_UNIQUE_NAME@
+#define __txn_getckp __txn_getckp@DB_VERSION_UNIQUE_NAME@
+#define __txn_updateckp __txn_updateckp@DB_VERSION_UNIQUE_NAME@
+#define __txn_failchk __txn_failchk@DB_VERSION_UNIQUE_NAME@
#define __txn_dbenv_create __txn_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __txn_dbenv_destroy __txn_dbenv_destroy@DB_VERSION_UNIQUE_NAME@
+#define __txn_get_tx_max __txn_get_tx_max@DB_VERSION_UNIQUE_NAME@
#define __txn_set_tx_max __txn_set_tx_max@DB_VERSION_UNIQUE_NAME@
+#define __txn_get_tx_timestamp __txn_get_tx_timestamp@DB_VERSION_UNIQUE_NAME@
+#define __txn_set_tx_timestamp __txn_set_tx_timestamp@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@
#define __txn_child_recover __txn_child_recover@DB_VERSION_UNIQUE_NAME@
#define __txn_restore_txn __txn_restore_txn@DB_VERSION_UNIQUE_NAME@
#define __txn_recycle_recover __txn_recycle_recover@DB_VERSION_UNIQUE_NAME@
-#define __txn_continue __txn_continue@DB_VERSION_UNIQUE_NAME@
+#define __txn_regop_42_recover __txn_regop_42_recover@DB_VERSION_UNIQUE_NAME@
+#define __txn_ckp_42_recover __txn_ckp_42_recover@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@
@@ -1454,8 +1703,10 @@
#define __txn_open __txn_open@DB_VERSION_UNIQUE_NAME@
#define __txn_findlastckp __txn_findlastckp@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_oldest_reader __txn_oldest_reader@DB_VERSION_UNIQUE_NAME@
+#define __txn_add_buffer __txn_add_buffer@DB_VERSION_UNIQUE_NAME@
+#define __txn_remove_buffer __txn_remove_buffer@DB_VERSION_UNIQUE_NAME@
#define __txn_stat_pp __txn_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __txn_stat_print_pp __txn_stat_print_pp@DB_VERSION_UNIQUE_NAME@
#define __txn_stat_print __txn_stat_print@DB_VERSION_UNIQUE_NAME@
@@ -1473,7 +1724,7 @@
#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 __db_global_values __db_global_values@DB_VERSION_UNIQUE_NAME@
-#define __db_jump __db_jump@DB_VERSION_UNIQUE_NAME@
+#define __db_global_values __db_global_values@DB_VERSION_UNIQUE_NAME@
+#define __db_jump __db_jump@DB_VERSION_UNIQUE_NAME@
#endif /* !_DB_INT_DEF_IN_ */
diff --git a/db/dbinc_auto/lock_ext.h b/db/dbinc_auto/lock_ext.h
index 4b3ab4905..f84f27483 100644
--- a/db/dbinc_auto/lock_ext.h
+++ b/db/dbinc_auto/lock_ext.h
@@ -12,14 +12,16 @@ int __lock_get_pp __P((DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_
int __lock_get __P((DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
int __lock_get_internal __P((DB_LOCKTAB *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, db_timeout_t, DB_LOCK *));
int __lock_put_pp __P((DB_ENV *, DB_LOCK *));
-int __lock_put __P((DB_ENV *, DB_LOCK *, u_int32_t));
+int __lock_put __P((DB_ENV *, DB_LOCK *));
int __lock_downgrade __P((DB_ENV *, DB_LOCK *, db_lockmode_t, u_int32_t));
int __lock_locker_is_parent __P((DB_ENV *, u_int32_t, u_int32_t, int *));
-int __lock_promote __P((DB_LOCKTAB *, DB_LOCKOBJ *, u_int32_t));
+int __lock_promote __P((DB_LOCKTAB *, DB_LOCKOBJ *, int *, u_int32_t));
int __lock_detect_pp __P((DB_ENV *, u_int32_t, u_int32_t, int *));
int __lock_detect __P((DB_ENV *, u_int32_t, int *));
+int __lock_failchk __P((DB_ENV *));
int __lock_id_pp __P((DB_ENV *, u_int32_t *));
-int __lock_id __P((DB_ENV *, u_int32_t *));
+int __lock_id __P((DB_ENV *, u_int32_t *, DB_LOCKER **));
+void __lock_set_thread_id __P((DB_LOCKER *, pid_t, db_threadid_t));
int __lock_id_free_pp __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));
@@ -30,17 +32,23 @@ void __lock_freelocker __P((DB_LOCKTAB *, DB_LOCKREGION *, DB_LOCKER *, u_int32_
int __lock_fix_list __P((DB_ENV *, DBT *, u_int32_t));
int __lock_get_list __P((DB_ENV *, u_int32_t, u_int32_t, db_lockmode_t, DBT *));
void __lock_list_print __P((DB_ENV *, DBT *));
-void __lock_dbenv_create __P((DB_ENV *));
-int __lock_dbenv_close __P((DB_ENV *));
+int __lock_dbenv_create __P((DB_ENV *));
+void __lock_dbenv_destroy __P((DB_ENV *));
+int __lock_get_lk_conflicts __P((DB_ENV *, const u_int8_t **, int *));
+int __lock_set_lk_conflicts __P((DB_ENV *, u_int8_t *, int));
+int __lock_get_lk_detect __P((DB_ENV *, u_int32_t *));
int __lock_set_lk_detect __P((DB_ENV *, u_int32_t));
-int __lock_set_lk_max __P((DB_ENV *, u_int32_t));
+int __lock_get_lk_max_locks __P((DB_ENV *, u_int32_t *));
int __lock_set_lk_max_locks __P((DB_ENV *, u_int32_t));
+int __lock_get_lk_max_lockers __P((DB_ENV *, u_int32_t *));
int __lock_set_lk_max_lockers __P((DB_ENV *, u_int32_t));
+int __lock_get_lk_max_objects __P((DB_ENV *, u_int32_t *));
int __lock_set_lk_max_objects __P((DB_ENV *, u_int32_t));
+int __lock_get_env_timeout __P((DB_ENV *, db_timeout_t *, 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 *));
+u_int32_t __lock_region_mutex_count __P((DB_ENV *));
int __lock_stat_pp __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
int __lock_stat_print_pp __P((DB_ENV *, u_int32_t));
int __lock_stat_print __P((DB_ENV *, u_int32_t));
@@ -50,11 +58,8 @@ int __lock_set_timeout_internal __P((DB_ENV *, u_int32_t, db_timeout_t, u_int32_
int __lock_inherit_timeout __P(( DB_ENV *, u_int32_t, u_int32_t));
void __lock_expires __P((DB_ENV *, db_timeval_t *, db_timeout_t));
int __lock_expired __P((DB_ENV *, db_timeval_t *, db_timeval_t *));
-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 *));
u_int32_t __lock_lhash __P((DB_LOCKOBJ *));
-u_int32_t __lock_locker_hash __P((u_int32_t));
int __lock_nomem __P((DB_ENV *, const char *));
#if defined(__cplusplus)
diff --git a/db/dbinc_auto/log_ext.h b/db/dbinc_auto/log_ext.h
index c1fbd211b..a231bc23e 100644
--- a/db/dbinc_auto/log_ext.h
+++ b/db/dbinc_auto/log_ext.h
@@ -8,35 +8,52 @@ 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, DB_FH **, u_int32_t, logfile_validity *));
+int __log_valid __P((DB_LOG *, u_int32_t, int, DB_FH **, u_int32_t, logfile_validity *, u_int32_t *));
int __log_dbenv_refresh __P((DB_ENV *));
-void __log_get_cached_ckp_lsn __P((DB_ENV *, DB_LSN *));
-void __log_region_destroy __P((DB_ENV *, REGINFO *));
+int __log_get_cached_ckp_lsn __P((DB_ENV *, DB_LSN *));
+u_int32_t __log_region_mutex_count __P((DB_ENV *));
int __log_vtruncate __P((DB_ENV *, DB_LSN *, DB_LSN *, DB_LSN *));
int __log_is_outdated __P((DB_ENV *, u_int32_t, int *));
+int __log_zero __P((DB_ENV *, DB_LSN *, DB_LSN *));
int __log_inmem_lsnoff __P((DB_LOG *, DB_LSN *, size_t *));
int __log_inmem_newfile __P((DB_LOG *, u_int32_t));
int __log_inmem_chkspace __P((DB_LOG *, size_t));
void __log_inmem_copyout __P((DB_LOG *, size_t, void *, size_t));
void __log_inmem_copyin __P((DB_LOG *, size_t, void *, size_t));
+void __log_set_version __P((DB_ENV *, u_int32_t));
+int __log_get_oldversion __P((DB_ENV *, u_int32_t *));
int __log_archive_pp __P((DB_ENV *, char **[], u_int32_t));
+int __log_get_stable_lsn __P((DB_ENV *, DB_LSN *));
void __log_autoremove __P((DB_ENV *));
+int __log_check_page_lsn __P((DB_ENV *, DB *, DB_LSN *));
+int __log_printf_capi __P((DB_ENV *, DB_TXN *, const char *, ...)) __attribute__ ((__format__ (__printf__, 3, 4)));
+int __log_printf_pp __P((DB_ENV *, DB_TXN *, const char *, va_list));
+int __log_printf __P((DB_ENV *, DB_TXN *, const char *, ...)) __attribute__ ((__format__ (__printf__, 3, 4)));
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_version __P((DB_LOGC *, u_int32_t *));
int __log_c_get __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
-void __log_dbenv_create __P((DB_ENV *));
+int __log_rep_split __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *, DB_LSN *));
+int __log_dbenv_create __P((DB_ENV *));
+void __log_dbenv_destroy __P((DB_ENV *));
+int __log_get_lg_bsize __P((DB_ENV *, u_int32_t *));
int __log_set_lg_bsize __P((DB_ENV *, u_int32_t));
+int __log_get_lg_filemode __P((DB_ENV *, int *));
+int __log_set_lg_filemode __P((DB_ENV *, int));
+int __log_get_lg_max __P((DB_ENV *, u_int32_t *));
int __log_set_lg_max __P((DB_ENV *, u_int32_t));
+int __log_get_lg_regionmax __P((DB_ENV *, u_int32_t *));
int __log_set_lg_regionmax __P((DB_ENV *, u_int32_t));
+int __log_get_lg_dir __P((DB_ENV *, const char **));
int __log_set_lg_dir __P((DB_ENV *, const char *));
void __log_get_flags __P((DB_ENV *, u_int32_t *));
void __log_set_flags __P((DB_ENV *, u_int32_t, int));
int __log_check_sizes __P((DB_ENV *, u_int32_t, u_int32_t));
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 *, u_int32_t));
+int __log_current_lsn __P((DB_ENV *, DB_LSN *, u_int32_t *, u_int32_t *));
+int __log_newfile __P((DB_LOG *, DB_LSN *, u_int32_t, u_int32_t));
int __log_flush_pp __P((DB_ENV *, const DB_LSN *));
int __log_flush __P((DB_ENV *, const DB_LSN *));
int __log_flush_int __P((DB_LOG *, const DB_LSN *, int));
diff --git a/db/dbinc_auto/mp_ext.h b/db/dbinc_auto/mp_ext.h
index ada970431..13e6b1be1 100644
--- a/db/dbinc_auto/mp_ext.h
+++ b/db/dbinc_auto/mp_ext.h
@@ -7,15 +7,16 @@ extern "C" {
#endif
int __memp_alloc __P((DB_MPOOL *, REGINFO *, MPOOLFILE *, size_t, roff_t *, void *));
+void __memp_free __P((REGINFO *, MPOOLFILE *, void *));
#ifdef DIAGNOSTIC
-void __memp_check_order __P((DB_MPOOL_HASH *));
+void __memp_check_order __P((DB_ENV *, DB_MPOOL_HASH *));
#endif
int __memp_bhwrite __P((DB_MPOOL *, DB_MPOOL_HASH *, MPOOLFILE *, BH *, int));
-int __memp_pgread __P((DB_MPOOLFILE *, DB_MUTEX *, BH *, int));
+int __memp_pgread __P((DB_MPOOLFILE *, DB_MPOOL_HASH *, BH *, int));
int __memp_pg __P((DB_MPOOLFILE *, BH *, int));
-void __memp_bhfree __P((DB_MPOOL *, DB_MPOOL_HASH *, BH *, u_int32_t));
-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_bhfree __P((DB_MPOOL *, DB_MPOOL_HASH *, BH *, u_int32_t));
+int __memp_fget_pp __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, u_int32_t, void *));
+int __memp_fget __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, u_int32_t, void *));
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));
@@ -27,7 +28,7 @@ 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 *));
-void __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
+int __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
char * __memp_fn __P((DB_MPOOLFILE *));
char * __memp_fns __P((DB_MPOOL *, MPOOLFILE *));
int __memp_fopen_pp __P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
@@ -35,35 +36,51 @@ int __memp_fopen __P((DB_MPOOLFILE *, MPOOLFILE *, const char *, u_int32_t, int,
int __memp_fclose_pp __P((DB_MPOOLFILE *, u_int32_t));
int __memp_fclose __P((DB_MPOOLFILE *, u_int32_t));
int __memp_mf_discard __P((DB_MPOOL *, MPOOLFILE *));
+int __memp_inmemlist __P((DB_ENV *, char ***, int *));
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_dirty __P((DB_MPOOLFILE *, void *, DB_TXN *, u_int32_t));
+int __memp_dbenv_create __P((DB_ENV *));
+void __memp_dbenv_destroy __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_get_mp_max_openfd __P((DB_ENV *, int *));
int __memp_set_mp_max_openfd __P((DB_ENV *, int));
+int __memp_get_mp_max_write __P((DB_ENV *, int *, int *));
int __memp_set_mp_max_write __P((DB_ENV *, int, int));
+int __memp_get_mp_mmapsize __P((DB_ENV *, size_t *));
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 *, u_int32_t *));
+int __memp_nameop __P((DB_ENV *, u_int8_t *, const char *, const char *, const char *, int));
int __memp_ftruncate __P((DB_MPOOLFILE *, db_pgno_t, u_int32_t));
+int __memp_alloc_freelist __P((DB_MPOOLFILE *, u_int32_t, db_pgno_t **));
+int __memp_free_freelist __P((DB_MPOOLFILE *));
+int __memp_get_freelist __P(( DB_MPOOLFILE *, u_int32_t *, db_pgno_t **));
+int __memp_extend_freelist __P(( DB_MPOOLFILE *, u_int32_t , db_pgno_t **));
+u_int32_t __memp_bh_priority __P((BH *));
+void __memp_bucket_reorder __P((DB_ENV *, DB_MPOOL_HASH *, BH *));
+int __memp_bh_settxn __P((DB_MPOOL *, MPOOLFILE *mfp, BH *, void *));
+int __memp_skip_curadj __P((DBC *, db_pgno_t));
+int __memp_bh_freeze __P((DB_MPOOL *, REGINFO *, DB_MPOOL_HASH *, BH *, int *));
+int __memp_bh_thaw __P((DB_MPOOL *, REGINFO *, DB_MPOOL_HASH *, BH *, BH *));
int __memp_open __P((DB_ENV *));
+u_int32_t __memp_region_mutex_count __P((DB_ENV *));
int __memp_dbenv_refresh __P((DB_ENV *));
-void __memp_region_destroy __P((DB_ENV *, REGINFO *));
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_pp __P((DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
int __memp_stat_print_pp __P((DB_ENV *, u_int32_t));
int __memp_stat_print __P((DB_ENV *, u_int32_t));
void __memp_stat_hash __P((REGINFO *, MPOOL *, u_int32_t *));
+int __memp_walk_files __P((DB_ENV *, MPOOL *, int (*) __P((DB_ENV *, MPOOLFILE *, void *, u_int32_t *, u_int32_t)), void *, u_int32_t *, 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 *, u_int32_t, db_sync_op, u_int32_t *));
-int __memp_mf_sync __P((DB_MPOOL *, MPOOLFILE *));
+int __memp_mf_sync __P((DB_MPOOL *, MPOOLFILE *, int));
int __memp_trickle_pp __P((DB_ENV *, int, int *));
#if defined(__cplusplus)
diff --git a/db/dbinc_auto/mutex_ext.h b/db/dbinc_auto/mutex_ext.h
index a40f04d55..7b06e67d1 100644
--- a/db/dbinc_auto/mutex_ext.h
+++ b/db/dbinc_auto/mutex_ext.h
@@ -6,28 +6,48 @@
extern "C" {
#endif
-int __db_fcntl_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
-int __db_fcntl_mutex_lock __P((DB_ENV *, DB_MUTEX *));
-int __db_fcntl_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
-int __db_fcntl_mutex_destroy __P((DB_MUTEX *));
-int __db_pthread_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
-int __db_pthread_mutex_lock __P((DB_ENV *, DB_MUTEX *));
-int __db_pthread_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
-int __db_pthread_mutex_destroy __P((DB_MUTEX *));
-int __db_tas_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
-int __db_tas_mutex_lock __P((DB_ENV *, DB_MUTEX *));
-int __db_tas_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
-int __db_tas_mutex_destroy __P((DB_MUTEX *));
-int __db_win32_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
-int __db_win32_mutex_lock __P((DB_ENV *, DB_MUTEX *));
-int __db_win32_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
-int __db_win32_mutex_destroy __P((DB_MUTEX *));
-int __db_mutex_setup __P((DB_ENV *, REGINFO *, void *, u_int32_t));
-void __db_mutex_free __P((DB_ENV *, REGINFO *, DB_MUTEX *));
-void __db_shreg_locks_clear __P((DB_MUTEX *, REGINFO *, REGMAINT *));
-void __db_shreg_locks_destroy __P((REGINFO *, REGMAINT *));
-int __db_shreg_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t, u_int32_t, REGINFO *, REGMAINT *));
-void __db_shreg_maintinit __P((REGINFO *, void *addr, size_t));
+int __mutex_alloc __P((DB_ENV *, int, u_int32_t, db_mutex_t *));
+int __mutex_alloc_int __P((DB_ENV *, int, int, u_int32_t, db_mutex_t *));
+int __mutex_free __P((DB_ENV *, db_mutex_t *));
+int __mutex_free_int __P((DB_ENV *, int, db_mutex_t *));
+int __mut_failchk __P((DB_ENV *));
+int __db_fcntl_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
+int __db_fcntl_mutex_lock __P((DB_ENV *, db_mutex_t));
+int __db_fcntl_mutex_unlock __P((DB_ENV *, db_mutex_t));
+int __db_fcntl_mutex_destroy __P((DB_ENV *, db_mutex_t));
+int __mutex_alloc_pp __P((DB_ENV *, u_int32_t, db_mutex_t *));
+int __mutex_free_pp __P((DB_ENV *, db_mutex_t));
+int __mutex_lock_pp __P((DB_ENV *, db_mutex_t));
+int __mutex_unlock_pp __P((DB_ENV *, db_mutex_t));
+int __mutex_get_align __P((DB_ENV *, u_int32_t *));
+int __mutex_set_align __P((DB_ENV *, u_int32_t));
+int __mutex_get_increment __P((DB_ENV *, u_int32_t *));
+int __mutex_set_increment __P((DB_ENV *, u_int32_t));
+int __mutex_get_max __P((DB_ENV *, u_int32_t *));
+int __mutex_set_max __P((DB_ENV *, u_int32_t));
+int __mutex_get_tas_spins __P((DB_ENV *, u_int32_t *));
+int __mutex_set_tas_spins __P((DB_ENV *, u_int32_t));
+int __db_pthread_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
+int __db_pthread_mutex_lock __P((DB_ENV *, db_mutex_t));
+int __db_pthread_mutex_unlock __P((DB_ENV *, db_mutex_t));
+int __db_pthread_mutex_destroy __P((DB_ENV *, db_mutex_t));
+int __mutex_open __P((DB_ENV *));
+int __mutex_dbenv_refresh __P((DB_ENV *));
+void __mutex_resource_return __P((DB_ENV *, REGINFO *));
+int __mutex_stat __P((DB_ENV *, DB_MUTEX_STAT **, u_int32_t));
+int __mutex_stat_print __P((DB_ENV *, u_int32_t));
+void __mutex_print_debug_single __P((DB_ENV *, const char *, db_mutex_t, u_int32_t));
+void __mutex_print_debug_stats __P((DB_ENV *, DB_MSGBUF *, db_mutex_t, u_int32_t));
+void __mutex_set_wait_info __P((DB_ENV *, db_mutex_t, u_int32_t *, u_int32_t *));
+void __mutex_clear __P((DB_ENV *, db_mutex_t));
+int __db_tas_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
+int __db_tas_mutex_lock __P((DB_ENV *, db_mutex_t));
+int __db_tas_mutex_unlock __P((DB_ENV *, db_mutex_t));
+int __db_tas_mutex_destroy __P((DB_ENV *, db_mutex_t));
+int __db_win32_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
+int __db_win32_mutex_lock __P((DB_ENV *, db_mutex_t));
+int __db_win32_mutex_unlock __P((DB_ENV *, db_mutex_t));
+int __db_win32_mutex_destroy __P((DB_ENV *, db_mutex_t));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/os_ext.h b/db/dbinc_auto/os_ext.h
index a26958501..2481c42b8 100644
--- a/db/dbinc_auto/os_ext.h
+++ b/db/dbinc_auto/os_ext.h
@@ -18,51 +18,60 @@ void __os_free __P((DB_ENV *, void *));
void *__ua_memcpy __P((void *, const void *, size_t));
void __os_clock __P((DB_ENV *, u_int32_t *, u_int32_t *));
int __os_fs_notzero __P((void));
+int __os_support_direct_io __P((void));
+int __os_support_db_register __P((void));
+int __os_support_replication __P((void));
int __os_dirlist __P((DB_ENV *, const char *, char ***, int *));
void __os_dirfree __P((DB_ENV *, char **, int));
int __os_get_errno_ret_zero __P((void));
int __os_get_errno __P((void));
+int __os_get_neterr __P((void));
+int __os_get_syserr __P((void));
void __os_set_errno __P((int));
+char *__os_strerror __P((int, char *, size_t));
+int __os_posix_err __P((int));
int __os_fileid __P((DB_ENV *, const char *, int, u_int8_t *));
+int __os_fdlock __P((DB_ENV *, DB_FH *, off_t, int, int));
int __os_fsync __P((DB_ENV *, DB_FH *));
+int __os_zerofill __P((DB_ENV *, DB_FH *));
+int __os_getenv __P((DB_ENV *, const char *, char **, size_t));
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 *));
-void __os_unique_id __P((DB_ENV *, u_int32_t *));
int __os_r_sysattach __P((DB_ENV *, REGINFO *, REGION *));
int __os_r_sysdetach __P((DB_ENV *, REGINFO *, int));
int __os_mapfile __P((DB_ENV *, char *, DB_FH *, size_t, int, void **));
int __os_unmapfile __P((DB_ENV *, void *, size_t));
+int __os_mkdir __P((DB_ENV *, const char *, int));
u_int32_t __db_oflags __P((int));
int __db_omode __P((const char *));
-int __db_shm_mode __P((DB_ENV *));
-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, int, DB_FH **));
#ifdef HAVE_QNX
int __os_shmname __P((DB_ENV *, const char *, char **));
#endif
+void __os_id __P((DB_ENV *, pid_t *, db_threadid_t*));
int __os_r_attach __P((DB_ENV *, REGINFO *, REGION *));
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 *, int, DB_FH *, db_pgno_t, u_int32_t, u_int8_t *, size_t *));
+int __os_io __P((DB_ENV *, int, DB_FH *, db_pgno_t, u_int32_t, u_int32_t, u_int32_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 *, u_int32_t, db_pgno_t, u_int32_t, int, DB_OS_SEEK));
+int __os_physwrite __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
+int __os_seek __P((DB_ENV *, DB_FH *, db_pgno_t, u_int32_t, u_int32_t));
void __os_sleep __P((DB_ENV *, u_long, u_long));
-void __os_spin __P((DB_ENV *));
-void __os_yield __P((DB_ENV*, u_long));
-int __os_exists __P((const char *, int *));
+u_int32_t __os_spin __P((DB_ENV *));
+int __os_exists __P((DB_ENV *, 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_truncate __P((DB_ENV *, DB_FH *, db_pgno_t, u_int32_t));
+void __os_unique_id __P((DB_ENV *, u_int32_t *));
int __os_region_unlink __P((DB_ENV *, const char *));
int __os_unlink __P((DB_ENV *, const char *));
+void __os_yield __P((DB_ENV *));
int __os_is_winnt __P((void));
-int __os_have_direct __P((void));
-int __os_unlink __P((DB_ENV *, const char *));
+int __os_get_neterr __P((void));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/qam_auto.h b/db/dbinc_auto/qam_auto.h
index 655c6d028..3b80956a2 100644
--- a/db/dbinc_auto/qam_auto.h
+++ b/db/dbinc_auto/qam_auto.h
@@ -5,7 +5,7 @@
#define DB___qam_incfirst 84
typedef struct ___qam_incfirst_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
db_recno_t recno;
@@ -15,7 +15,7 @@ typedef struct ___qam_incfirst_args {
#define DB___qam_mvptr 85
typedef struct ___qam_mvptr_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t fileid;
@@ -30,7 +30,7 @@ typedef struct ___qam_mvptr_args {
#define DB___qam_del 79
typedef struct ___qam_del_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
DB_LSN lsn;
@@ -42,7 +42,7 @@ typedef struct ___qam_del_args {
#define DB___qam_add 80
typedef struct ___qam_add_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
DB_LSN lsn;
@@ -57,7 +57,7 @@ typedef struct ___qam_add_args {
#define DB___qam_delext 83
typedef struct ___qam_delext_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
int32_t fileid;
DB_LSN lsn;
diff --git a/db/dbinc_auto/qam_ext.h b/db/dbinc_auto/qam_ext.h
index 98ca31c03..4c0571f1d 100644
--- a/db/dbinc_auto/qam_ext.h
+++ b/db/dbinc_auto/qam_ext.h
@@ -6,12 +6,13 @@
extern "C" {
#endif
-int __qam_position __P((DBC *, db_recno_t *, qam_position_mode, int *));
+int __qam_position __P((DBC *, db_recno_t *, db_lockmode_t, u_int32_t, int *));
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((DBC *, u_int32_t *));
+int __qam_delete __P((DBC *, DBT *));
int __qam_incfirst_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_recno_t, db_pgno_t));
int __qam_incfirst_read __P((DB_ENV *, void *, __qam_incfirst_args **));
int __qam_mvptr_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, db_recno_t, db_recno_t, db_recno_t, db_recno_t, DB_LSN *, db_pgno_t));
@@ -31,7 +32,7 @@ int __qam_delext_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __qam_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __qam_mswap __P((PAGE *));
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_fprobe __P((DB *, db_pgno_t, DB_TXN *, 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 *));
diff --git a/db/dbinc_auto/rep_auto.h b/db/dbinc_auto/rep_auto.h
index 5e8b7818c..4a566e3da 100644
--- a/db/dbinc_auto/rep_auto.h
+++ b/db/dbinc_auto/rep_auto.h
@@ -4,14 +4,15 @@
#define __rep_AUTO_H
typedef struct ___rep_update_args {
DB_LSN first_lsn;
- int num_files;
+ u_int32_t first_vers;
+ u_int32_t num_files;
} __rep_update_args;
typedef struct ___rep_fileinfo_args {
- size_t pgsize;
+ u_int32_t pgsize;
db_pgno_t pgno;
db_pgno_t max_pgno;
- int filenum;
+ u_int32_t filenum;
int32_t id;
u_int32_t type;
u_int32_t flags;
diff --git a/db/dbinc_auto/rep_ext.h b/db/dbinc_auto/rep_ext.h
index 13486c735..9430a895c 100644
--- a/db/dbinc_auto/rep_ext.h
+++ b/db/dbinc_auto/rep_ext.h
@@ -6,52 +6,89 @@
extern "C" {
#endif
-int __rep_update_buf __P((u_int8_t *, size_t, size_t *, DB_LSN *, int));
+int __rep_update_buf __P((u_int8_t *, size_t, size_t *, DB_LSN *, u_int32_t, u_int32_t));
int __rep_update_read __P((DB_ENV *, void *, void **, __rep_update_args **));
-int __rep_fileinfo_buf __P((u_int8_t *, size_t, size_t *, size_t, db_pgno_t, db_pgno_t, int, int32_t, u_int32_t, u_int32_t, const DBT *, const DBT *));
+int __rep_fileinfo_buf __P((u_int8_t *, size_t, size_t *, u_int32_t, db_pgno_t, db_pgno_t, u_int32_t, int32_t, u_int32_t, u_int32_t, const DBT *, const DBT *));
int __rep_fileinfo_read __P((DB_ENV *, void *, void **, __rep_fileinfo_args **));
int __rep_update_req __P((DB_ENV *, int));
int __rep_page_req __P((DB_ENV *, int, DBT *));
int __rep_update_setup __P((DB_ENV *, int, REP_CONTROL *, DBT *));
+int __rep_bulk_page __P((DB_ENV *, int, REP_CONTROL *, DBT *));
int __rep_page __P((DB_ENV *, int, REP_CONTROL *, DBT *));
int __rep_page_fail __P((DB_ENV *, int, DBT *));
-int __rep_pggap_req __P((DB_ENV *, REP *, __rep_fileinfo_args *, int));
-void __rep_loggap_req __P((DB_ENV *, REP *, DB_LSN *, int));
+int __rep_init_cleanup __P((DB_ENV *, REP *, int));
+int __rep_pggap_req __P((DB_ENV *, REP *, __rep_fileinfo_args *, u_int32_t));
int __rep_finfo_alloc __P((DB_ENV *, __rep_fileinfo_args *, __rep_fileinfo_args **));
-void __rep_dbenv_create __P((DB_ENV *));
-int __rep_open __P((DB_ENV *));
-int __rep_client_dbinit __P((DB_ENV *, int, repdb_t));
+int __rep_elect __P((DB_ENV *, int, int, int *, u_int32_t));
+int __rep_vote1 __P((DB_ENV *, REP_CONTROL *, DBT *, int *));
+int __rep_vote2 __P((DB_ENV *, DBT *, int *));
void __rep_elect_master __P((DB_ENV *, REP *, int *));
+int __rep_allreq __P((DB_ENV *, REP_CONTROL *, int));
+int __rep_log __P((DB_ENV *, REP_CONTROL *, DBT *, time_t, DB_LSN *));
+int __rep_bulk_log __P((DB_ENV *, REP_CONTROL *, DBT *, time_t, DB_LSN *));
+int __rep_logreq __P((DB_ENV *, REP_CONTROL *, DBT *, int));
+int __rep_loggap_req __P((DB_ENV *, REP *, DB_LSN *, u_int32_t));
+int __rep_logready __P((DB_ENV *, REP *, time_t, DB_LSN *));
+int __rep_dbenv_create __P((DB_ENV *));
+void __rep_dbenv_destroy __P((DB_ENV *));
+int __rep_get_config __P((DB_ENV *, u_int32_t, int *));
+int __rep_set_config __P((DB_ENV *, u_int32_t, int));
+int __rep_start __P((DB_ENV *, DBT *, u_int32_t));
+int __rep_client_dbinit __P((DB_ENV *, int, repdb_t));
+int __rep_get_limit __P((DB_ENV *, u_int32_t *, u_int32_t *));
+int __rep_set_limit __P((DB_ENV *, u_int32_t, u_int32_t));
+int __rep_set_nsites __P((DB_ENV *, int));
+int __rep_get_nsites __P((DB_ENV *, int *));
+int __rep_set_priority __P((DB_ENV *, int));
+int __rep_get_priority __P((DB_ENV *, int *));
+int __rep_set_timeout __P((DB_ENV *, int, db_timeout_t));
+int __rep_get_timeout __P((DB_ENV *, int, db_timeout_t *));
+int __rep_get_request __P((DB_ENV *, u_int32_t *, u_int32_t *));
+int __rep_set_request __P((DB_ENV *, u_int32_t, u_int32_t));
+int __rep_set_transport __P((DB_ENV *, int, int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)));
+int __rep_flush __P((DB_ENV *));
+int __rep_sync __P((DB_ENV *, u_int32_t));
int __rep_process_message __P((DB_ENV *, DBT *, DBT *, int *, DB_LSN *));
+int __rep_apply __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *, int *, DB_LSN *));
int __rep_process_txn __P((DB_ENV *, DBT *));
-int __rep_tally __P((DB_ENV *, REP *, int, int *, u_int32_t, roff_t));
-void __rep_cmp_vote __P((DB_ENV *, REP *, int *, DB_LSN *, int, u_int32_t, u_int32_t));
-int __rep_cmp_vote2 __P((DB_ENV *, REP *, int, u_int32_t));
int __rep_check_doreq __P((DB_ENV *, REP *));
-void __rep_lockout __P((DB_ENV *, DB_REP *, REP *, u_int32_t));
-int __rep_region_init __P((DB_ENV *));
+int __rep_open __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_close __P((DB_ENV *));
+int __rep_preclose __P((DB_ENV *));
+int __rep_closefiles __P((DB_ENV *));
int __rep_write_egen __P((DB_ENV *, u_int32_t));
int __rep_stat_pp __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
int __rep_stat_print_pp __P((DB_ENV *, u_int32_t));
int __rep_stat_print __P((DB_ENV *, u_int32_t));
-int __rep_send_message __P((DB_ENV *, int, u_int32_t, DB_LSN *, const DBT *, u_int32_t));
+int __rep_bulk_message __P((DB_ENV *, REP_BULK *, REP_THROTTLE *, DB_LSN *, const DBT *, u_int32_t));
+int __rep_send_bulk __P((DB_ENV *, REP_BULK *, u_int32_t));
+int __rep_bulk_alloc __P((DB_ENV *, REP_BULK *, int, uintptr_t *, u_int32_t *, u_int32_t));
+int __rep_bulk_free __P((DB_ENV *, REP_BULK *, u_int32_t));
+int __rep_send_message __P((DB_ENV *, int, u_int32_t, DB_LSN *, const DBT *, u_int32_t, u_int32_t));
int __rep_new_master __P((DB_ENV *, REP_CONTROL *, int));
-int __rep_is_client __P((DB_ENV *));
int __rep_noarchive __P((DB_ENV *));
-void __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int, u_int32_t, u_int32_t, int, u_int32_t));
+void __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int, u_int32_t, u_int32_t, int, u_int32_t, u_int32_t));
void __rep_elect_done __P((DB_ENV *, REP *));
int __rep_grow_sites __P((DB_ENV *dbenv, int nsites));
-void __env_rep_enter __P((DB_ENV *));
-void __env_db_rep_exit __P((DB_ENV *));
+int __env_rep_enter __P((DB_ENV *, int));
+int __env_db_rep_exit __P((DB_ENV *));
int __db_rep_enter __P((DB *, int, int, int));
-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 *));
+int __op_rep_enter __P((DB_ENV *));
+int __op_rep_exit __P((DB_ENV *));
+int __rep_get_gen __P((DB_ENV *, u_int32_t *));
+int __rep_lockout_api __P((DB_ENV *, REP *));
+int __rep_lockout_msg __P((DB_ENV *, REP *, u_int32_t));
+int __rep_send_throttle __P((DB_ENV *, int, REP_THROTTLE *, u_int32_t));
+u_int32_t __rep_msg_to_old __P((u_int32_t, u_int32_t));
+u_int32_t __rep_msg_from_old __P((u_int32_t, u_int32_t));
+void __rep_print_message __P((DB_ENV *, int, REP_CONTROL *, char *, u_int32_t));
+int __rep_verify __P((DB_ENV *, REP_CONTROL *, DBT *, int, time_t));
+int __rep_verify_fail __P((DB_ENV *, REP_CONTROL *, int));
+int __rep_verify_req __P((DB_ENV *, REP_CONTROL *, int));
+int __rep_verify_match __P((DB_ENV *, DB_LSN *, time_t));
+int __rep_log_backup __P((DB_ENV *, REP *, DB_LOGC *, DB_LSN *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/repmgr_ext.h b/db/dbinc_auto/repmgr_ext.h
new file mode 100644
index 000000000..78979b987
--- /dev/null
+++ b/db/dbinc_auto/repmgr_ext.h
@@ -0,0 +1,87 @@
+/* DO NOT EDIT: automatically built by dist/s_include. */
+#ifndef _repmgr_ext_h_
+#define _repmgr_ext_h_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+int __repmgr_init_election __P((DB_ENV *, int));
+int __repmgr_become_master __P((DB_ENV *));
+int __repmgr_start __P((DB_ENV *, int, u_int32_t));
+int __repmgr_close __P((DB_ENV *));
+int __repmgr_set_ack_policy __P((DB_ENV *, int));
+int __repmgr_get_ack_policy __P((DB_ENV *, int *));
+int __repmgr_dbenv_create __P((DB_ENV *, DB_REP *));
+void __repmgr_dbenv_destroy __P((DB_ENV *, DB_REP *));
+int __repmgr_stop_threads __P((DB_ENV *));
+int __repmgr_set_local_site __P((DB_ENV *, const char *, u_int, u_int32_t));
+int __repmgr_add_remote_site __P((DB_ENV *, const char *, u_int, int *, u_int32_t));
+void *__repmgr_msg_thread __P((void *));
+int __repmgr_stash_generation __P((DB_ENV *));
+int __repmgr_send __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t));
+int __repmgr_send_one __P((DB_ENV *, REPMGR_CONNECTION *, u_int, const DBT *, const DBT *));
+int __repmgr_is_permanent __P((DB_ENV *, const DB_LSN *));
+int __repmgr_bust_connection __P((DB_ENV *, REPMGR_CONNECTION *, int));
+void __repmgr_cleanup_connection __P((DB_ENV *, REPMGR_CONNECTION *));
+int __repmgr_find_site __P((DB_ENV *, const char *, u_int));
+int __repmgr_pack_netaddr __P((DB_ENV *, const char *, u_int, ADDRINFO *, repmgr_netaddr_t *));
+int __repmgr_getaddr __P((DB_ENV *, const char *, u_int, int, ADDRINFO **));
+int __repmgr_add_site __P((DB_ENV *, const char *, u_int, REPMGR_SITE **));
+int __repmgr_net_create __P((DB_ENV *, DB_REP *));
+int __repmgr_listen __P((DB_ENV *));
+int __repmgr_net_close __P((DB_ENV *));
+void __repmgr_net_destroy __P((DB_ENV *, DB_REP *));
+int __repmgr_thread_start __P((DB_ENV *, REPMGR_RUNNABLE *));
+int __repmgr_thread_join __P((REPMGR_RUNNABLE *));
+int __repmgr_set_nonblocking __P((socket_t));
+int __repmgr_wake_waiting_senders __P((DB_ENV *));
+int __repmgr_await_ack __P((DB_ENV *, const DB_LSN *));
+void __repmgr_compute_wait_deadline __P((DB_ENV*, struct timespec *, db_timeout_t));
+int __repmgr_init_sync __P((DB_ENV *, DB_REP *));
+int __repmgr_close_sync __P((DB_ENV *));
+int __repmgr_net_init __P((DB_ENV *, DB_REP *));
+int __repmgr_lock_mutex __P((mgr_mutex_t *));
+int __repmgr_unlock_mutex __P((mgr_mutex_t *));
+int __repmgr_signal __P((cond_var_t *));
+int __repmgr_wake_main_thread __P((DB_ENV*));
+int __repmgr_writev __P((socket_t, db_iovec_t *, int, size_t *));
+int __repmgr_readv __P((socket_t, db_iovec_t *, int, size_t *));
+void __repmgr_timeval_diff_current __P((DB_ENV *, repmgr_timeval_t *, select_timeout_t *));
+int __repmgr_select_loop __P((DB_ENV *));
+int __repmgr_queue_create __P((DB_ENV *, DB_REP *));
+void __repmgr_queue_destroy __P((DB_ENV *));
+int __repmgr_queue_get __P((DB_ENV *, REPMGR_MESSAGE **));
+int __repmgr_queue_put __P((DB_ENV *, REPMGR_MESSAGE *));
+int __repmgr_queue_size __P((DB_ENV *));
+void *__repmgr_select_thread __P((void *));
+int __repmgr_accept __P((DB_ENV *));
+int __repmgr_retry_connections __P((DB_ENV *));
+int __repmgr_first_try_connections __P((DB_ENV *));
+int __repmgr_connect_site __P((DB_ENV *, u_int eid));
+int __repmgr_send_handshake __P((DB_ENV *, REPMGR_CONNECTION *));
+int __repmgr_read_from_site __P((DB_ENV *, REPMGR_CONNECTION *));
+int __repmgr_write_some __P((DB_ENV *, REPMGR_CONNECTION *));
+int __repmgr_site_list __P((DB_ENV *, u_int *, DB_REPMGR_SITE **));
+int __repmgr_print_stats __P((DB_ENV *));
+int __repmgr_schedule_connection_attempt __P((DB_ENV *, u_int, int));
+void __repmgr_reset_for_reading __P((REPMGR_CONNECTION *));
+int __repmgr_new_connection __P((DB_ENV *, REPMGR_CONNECTION **, socket_t, u_int32_t));
+int __repmgr_new_site __P((DB_ENV *, REPMGR_SITE**, const repmgr_netaddr_t *, int));
+void __repmgr_cleanup_netaddr __P((DB_ENV *, repmgr_netaddr_t *));
+void __repmgr_iovec_init __P((REPMGR_IOVECS *));
+void __repmgr_add_buffer __P((REPMGR_IOVECS *, void *, size_t));
+void __repmgr_add_dbt __P((REPMGR_IOVECS *, const DBT *));
+int __repmgr_update_consumed __P((REPMGR_IOVECS *, size_t));
+int __repmgr_prepare_my_addr __P((DB_ENV *, DBT *));
+int __repmgr_timeval_cmp __P((repmgr_timeval_t *, repmgr_timeval_t *));
+u_int __repmgr_get_nsites __P((DB_REP *));
+void __repmgr_thread_failure __P((DB_ENV *, int));
+char *__repmgr_format_eid_loc __P((DB_REP *, int, char *));
+char *__repmgr_format_site_loc __P((REPMGR_SITE *, char *));
+int __repmgr_wsa_init __P((DB_ENV *));
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_repmgr_ext_h_ */
diff --git a/db/dbinc_auto/rpc_client_ext.h b/db/dbinc_auto/rpc_client_ext.h
index b58047136..a578bbcd1 100644
--- a/db/dbinc_auto/rpc_client_ext.h
+++ b/db/dbinc_auto/rpc_client_ext.h
@@ -6,7 +6,7 @@
extern "C" {
#endif
-int __dbcl_envrpcserver __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+int __dbcl_env_set_rpc_server __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));
@@ -17,192 +17,88 @@ void __dbcl_txn_setup __P((DB_ENV *, DB_TXN *, DB_TXN *, u_int32_t));
void __dbcl_c_refresh __P((DBC *));
int __dbcl_c_setup __P((u_int, 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_dbenv_illegal __P((DB_ENV *));
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_cdsgroup_begin __P((DB_ENV *, DB_TXN **));
+int __dbcl_env_close __P((DB_ENV *, u_int32_t));
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_cachesize __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
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_max_openfd __P((DB_ENV *, int *));
-int __dbcl_set_mp_max_openfd __P((DB_ENV *, int));
-int __dbcl_get_mp_max_write __P((DB_ENV *, int *, int *));
-int __dbcl_set_mp_max_write __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));
-int __dbcl_txn_checkpoint __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
-int __dbcl_txn_commit __P((DB_TXN *, u_int32_t));
-int __dbcl_txn_discard __P((DB_TXN *, u_int32_t));
-int __dbcl_txn_prepare __P((DB_TXN *, u_int8_t *));
-int __dbcl_txn_recover __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
-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, int, u_int32_t, int *, u_int32_t));
-int __dbcl_rep_flush __P((DB_ENV *));
-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 *, 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_env_set_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
+int __dbcl_env_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
+int __dbcl_env_set_flags __P((DB_ENV *, u_int32_t, int));
+int __dbcl_env_txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
+int __dbcl_env_txn_recover __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
+int __dbcl_db_create __P((DB *, DB_ENV *, u_int32_t));
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_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_cursor __P((DB *, DB_TXN *, DBC **, 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 __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+int __dbcl_db_get_bt_minkey __P((DB *, u_int32_t *));
+int __dbcl_db_get_dbname __P((DB *, const char * *, const char * *));
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_open_flags __P((DB *, u_int32_t *));
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_q_extentsize __P((DB *, 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_join __P((DB *, DBC **, DBC **, u_int32_t));
+int __dbcl_db_key_range __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+int __dbcl_db_open __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, 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_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));
+int __dbcl_db_set_bt_minkey __P((DB *, u_int32_t));
+int __dbcl_db_set_encrypt __P((DB *, const char *, u_int32_t));
+int __dbcl_db_set_flags __P((DB *, u_int32_t));
+int __dbcl_db_set_h_ffactor __P((DB *, u_int32_t));
+int __dbcl_db_set_h_nelem __P((DB *, u_int32_t));
+int __dbcl_db_set_lorder __P((DB *, int));
+int __dbcl_db_set_pagesize __P((DB *, u_int32_t));
+int __dbcl_db_set_q_extentsize __P((DB *, u_int32_t));
+int __dbcl_db_set_re_delim __P((DB *, int));
+int __dbcl_db_set_re_len __P((DB *, u_int32_t));
+int __dbcl_db_set_re_pad __P((DB *, int));
int __dbcl_db_stat __P((DB *, DB_TXN *, void *, u_int32_t));
int __dbcl_db_sync __P((DB *, u_int32_t));
int __dbcl_db_truncate __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
-int __dbcl_db_upgrade __P((DB *, const char *, u_int32_t));
-int __dbcl_db_verify __P((DB *, const char *, const char *, FILE *, u_int32_t));
-int __dbcl_db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
-int __dbcl_db_join __P((DB *, DBC **, DBC **, u_int32_t));
-int __dbcl_dbc_close __P((DBC *));
-int __dbcl_dbc_count __P((DBC *, db_recno_t *, u_int32_t));
-int __dbcl_dbc_del __P((DBC *, u_int32_t));
-int __dbcl_dbc_dup __P((DBC *, DBC **, u_int32_t));
-int __dbcl_dbc_get __P((DBC *, DBT *, DBT *, u_int32_t));
-int __dbcl_dbc_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
-int __dbcl_dbc_put __P((DBC *, DBT *, DBT *, u_int32_t));
-int __dbcl_lock_detect __P((DB_ENV *, u_int32_t, u_int32_t, int *));
-int __dbcl_lock_get __P((DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
-int __dbcl_lock_id __P((DB_ENV *, u_int32_t *));
-int __dbcl_lock_id_free __P((DB_ENV *, u_int32_t));
-int __dbcl_lock_put __P((DB_ENV *, DB_LOCK *));
-int __dbcl_lock_stat __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
-int __dbcl_lock_vec __P((DB_ENV *, u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
-int __dbcl_log_archive __P((DB_ENV *, char ***, u_int32_t));
-int __dbcl_log_cursor __P((DB_ENV *, DB_LOGC **, u_int32_t));
-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_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_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_dbc_c_close __P((DBC *));
+int __dbcl_dbc_c_count __P((DBC *, db_recno_t *, u_int32_t));
+int __dbcl_dbc_c_del __P((DBC *, u_int32_t));
+int __dbcl_dbc_c_dup __P((DBC *, DBC **, u_int32_t));
+int __dbcl_dbc_c_get __P((DBC *, DBT *, DBT *, u_int32_t));
+int __dbcl_dbc_c_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
+int __dbcl_dbc_c_put __P((DBC *, DBT *, DBT *, u_int32_t));
+int __dbcl_txn_abort __P((DB_TXN *));
+int __dbcl_txn_commit __P((DB_TXN *, u_int32_t));
+int __dbcl_txn_discard __P((DB_TXN *, u_int32_t));
+int __dbcl_txn_prepare __P((DB_TXN *, u_int8_t *));
+void __dbcl_dbp_init __P((DB *));
+void __dbcl_dbc_init __P((DBC *));
+void __dbcl_dbenv_init __P((DB_ENV *));
+void __dbcl_txn_init __P((DB_TXN *));
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 *));
int __dbcl_txn_abort_ret __P((DB_TXN *, __txn_abort_reply *));
-int __dbcl_txn_begin_ret __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t, __txn_begin_reply *));
+int __dbcl_env_txn_begin_ret __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t, __env_txn_begin_reply *));
+int __dbcl_env_cdsgroup_begin_ret __P((DB_ENV *, DB_TXN **, __env_cdsgroup_begin_reply *));
int __dbcl_txn_commit_ret __P((DB_TXN *, u_int32_t, __txn_commit_reply *));
int __dbcl_txn_discard_ret __P((DB_TXN *, u_int32_t, __txn_discard_reply *));
-int __dbcl_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t, __txn_recover_reply *));
+int __dbcl_env_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t, __env_txn_recover_reply *));
int __dbcl_db_close_ret __P((DB *, u_int32_t, __db_close_reply *));
int __dbcl_db_create_ret __P((DB *, DB_ENV *, u_int32_t, __db_create_reply *));
int __dbcl_db_get_ret __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t, __db_get_reply *));
@@ -216,12 +112,12 @@ int __dbcl_db_stat_ret __P((DB *, DB_TXN *, void *, u_int32_t, __db_stat_reply *
int __dbcl_db_truncate_ret __P((DB *, DB_TXN *, u_int32_t *, u_int32_t, __db_truncate_reply *));
int __dbcl_db_cursor_ret __P((DB *, DB_TXN *, DBC **, u_int32_t, __db_cursor_reply *));
int __dbcl_db_join_ret __P((DB *, DBC **, DBC **, u_int32_t, __db_join_reply *));
-int __dbcl_dbc_close_ret __P((DBC *, __dbc_close_reply *));
-int __dbcl_dbc_count_ret __P((DBC *, db_recno_t *, u_int32_t, __dbc_count_reply *));
-int __dbcl_dbc_dup_ret __P((DBC *, DBC **, u_int32_t, __dbc_dup_reply *));
-int __dbcl_dbc_get_ret __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_get_reply *));
-int __dbcl_dbc_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t, __dbc_pget_reply *));
-int __dbcl_dbc_put_ret __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_put_reply *));
+int __dbcl_dbc_c_close_ret __P((DBC *, __dbc_c_close_reply *));
+int __dbcl_dbc_c_count_ret __P((DBC *, db_recno_t *, u_int32_t, __dbc_c_count_reply *));
+int __dbcl_dbc_c_dup_ret __P((DBC *, DBC **, u_int32_t, __dbc_c_dup_reply *));
+int __dbcl_dbc_c_get_ret __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_c_get_reply *));
+int __dbcl_dbc_c_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t, __dbc_c_pget_reply *));
+int __dbcl_dbc_c_put_ret __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_c_put_reply *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/rpc_server_ext.h b/db/dbinc_auto/rpc_server_ext.h
index 6d8cbc71f..589aef156 100644
--- a/db/dbinc_auto/rpc_server_ext.h
+++ b/db/dbinc_auto/rpc_server_ext.h
@@ -6,76 +6,75 @@
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_get_cachesize_proc __P((u_int, __env_get_cachesize_reply *));
+void __env_set_cachesize_proc __P((u_int, u_int32_t, u_int32_t, u_int32_t, __env_set_cachesize_reply *));
+void __env_cdsgroup_begin_proc __P((u_int, __env_cdsgroup_begin_reply *));
+void __env_close_proc __P((u_int, 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 *));
-void __txn_begin_proc __P((long, long, u_int32_t, __txn_begin_reply *));
-void __txn_commit_proc __P((long, u_int32_t, __txn_commit_reply *));
-void __txn_discard_proc __P((long, u_int32_t, __txn_discard_reply *));
-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 *));
-void __db_stat_proc __P((long, long, u_int32_t, __db_stat_reply *, int *));
-void __db_sync_proc __P((long, u_int32_t, __db_sync_reply *));
-void __db_truncate_proc __P((long, long, u_int32_t, __db_truncate_reply *));
-void __db_cursor_proc __P((long, long, u_int32_t, __db_cursor_reply *));
-void __db_join_proc __P((long, u_int32_t *, u_int32_t, u_int32_t, __db_join_reply *));
-void __dbc_close_proc __P((long, __dbc_close_reply *));
-void __dbc_count_proc __P((long, u_int32_t, __dbc_count_reply *));
-void __dbc_del_proc __P((long, u_int32_t, __dbc_del_reply *));
-void __dbc_dup_proc __P((long, u_int32_t, __dbc_dup_reply *));
-void __dbc_get_proc __P((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, __dbc_get_reply *, int *));
-void __dbc_pget_proc __P((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, __dbc_pget_reply *, int *));
-void __dbc_put_proc __P((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, __dbc_put_reply *, int *));
+void __env_dbremove_proc __P((u_int, u_int, char *, char *, u_int32_t, __env_dbremove_reply *));
+void __env_dbrename_proc __P((u_int, u_int, char *, char *, char *, u_int32_t, __env_dbrename_reply *));
+void __env_get_encrypt_flags_proc __P((u_int, __env_get_encrypt_flags_reply *));
+void __env_set_encrypt_proc __P((u_int, char *, u_int32_t, __env_set_encrypt_reply *));
+void __env_get_flags_proc __P((u_int, __env_get_flags_reply *));
+void __env_set_flags_proc __P((u_int, u_int32_t, u_int32_t, __env_set_flags_reply *));
+void __env_get_home_proc __P((u_int, __env_get_home_reply *));
+void __env_get_open_flags_proc __P((u_int, __env_get_open_flags_reply *));
+void __env_open_proc __P((u_int, char *, u_int32_t, u_int32_t, __env_open_reply *));
+void __env_remove_proc __P((u_int, char *, u_int32_t, __env_remove_reply *));
+void __txn_abort_proc __P((u_int, __txn_abort_reply *));
+void __env_txn_begin_proc __P((u_int, u_int, u_int32_t, __env_txn_begin_reply *));
+void __txn_commit_proc __P((u_int, u_int32_t, __txn_commit_reply *));
+void __txn_discard_proc __P((u_int, u_int32_t, __txn_discard_reply *));
+void __txn_prepare_proc __P((u_int, u_int8_t *, __txn_prepare_reply *));
+void __env_txn_recover_proc __P((u_int, u_int32_t, u_int32_t, __env_txn_recover_reply *, int *));
+void __db_associate_proc __P((u_int, u_int, u_int, u_int32_t, __db_associate_reply *));
+void __db_get_bt_minkey_proc __P((u_int, __db_get_bt_minkey_reply *));
+void __db_set_bt_minkey_proc __P((u_int, u_int32_t, __db_set_bt_minkey_reply *));
+void __db_close_proc __P((u_int, u_int32_t, __db_close_reply *));
+void __db_create_proc __P((u_int, u_int32_t, __db_create_reply *));
+void __db_del_proc __P((u_int, u_int, 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((u_int, __db_get_encrypt_flags_reply *));
+void __db_set_encrypt_proc __P((u_int, char *, u_int32_t, __db_set_encrypt_reply *));
+void __db_get_q_extentsize_proc __P((u_int, __db_get_q_extentsize_reply *));
+void __db_set_q_extentsize_proc __P((u_int, u_int32_t, __db_set_q_extentsize_reply *));
+void __db_get_flags_proc __P((u_int, __db_get_flags_reply *));
+void __db_set_flags_proc __P((u_int, u_int32_t, __db_set_flags_reply *));
+void __db_get_proc __P((u_int, u_int, 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((u_int, __db_get_h_ffactor_reply *));
+void __db_set_h_ffactor_proc __P((u_int, u_int32_t, __db_set_h_ffactor_reply *));
+void __db_get_h_nelem_proc __P((u_int, __db_get_h_nelem_reply *));
+void __db_set_h_nelem_proc __P((u_int, u_int32_t, __db_set_h_nelem_reply *));
+void __db_key_range_proc __P((u_int, u_int, 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((u_int, __db_get_lorder_reply *));
+void __db_set_lorder_proc __P((u_int, u_int32_t, __db_set_lorder_reply *));
+void __db_get_dbname_proc __P((u_int, __db_get_dbname_reply *));
+void __db_get_open_flags_proc __P((u_int, __db_get_open_flags_reply *));
+void __db_open_proc __P((u_int, u_int, char *, char *, u_int32_t, u_int32_t, u_int32_t, __db_open_reply *));
+void __db_get_pagesize_proc __P((u_int, __db_get_pagesize_reply *));
+void __db_set_pagesize_proc __P((u_int, u_int32_t, __db_set_pagesize_reply *));
+void __db_pget_proc __P((u_int, u_int, 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((u_int, u_int, 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((u_int, __db_get_re_delim_reply *));
+void __db_set_re_delim_proc __P((u_int, u_int32_t, __db_set_re_delim_reply *));
+void __db_get_re_len_proc __P((u_int, __db_get_re_len_reply *));
+void __db_set_re_len_proc __P((u_int, u_int32_t, __db_set_re_len_reply *));
+void __db_get_re_pad_proc __P((u_int, __db_get_re_pad_reply *));
+void __db_set_re_pad_proc __P((u_int, u_int32_t, __db_set_re_pad_reply *));
+void __db_remove_proc __P((u_int, char *, char *, u_int32_t, __db_remove_reply *));
+void __db_rename_proc __P((u_int, char *, char *, char *, u_int32_t, __db_rename_reply *));
+void __db_stat_proc __P((u_int, u_int, u_int32_t, __db_stat_reply *, int *));
+void __db_sync_proc __P((u_int, u_int32_t, __db_sync_reply *));
+void __db_truncate_proc __P((u_int, u_int, u_int32_t, __db_truncate_reply *));
+void __db_cursor_proc __P((u_int, u_int, u_int32_t, __db_cursor_reply *));
+void __db_join_proc __P((u_int, u_int32_t *, u_int32_t, u_int32_t, __db_join_reply *));
+void __dbc_c_close_proc __P((u_int, __dbc_c_close_reply *));
+void __dbc_c_count_proc __P((u_int, u_int32_t, __dbc_c_count_reply *));
+void __dbc_c_del_proc __P((u_int, u_int32_t, __dbc_c_del_reply *));
+void __dbc_c_dup_proc __P((u_int, u_int32_t, __dbc_c_dup_reply *));
+void __dbc_c_get_proc __P((u_int, 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, __dbc_c_get_reply *, int *));
+void __dbc_c_pget_proc __P((u_int, 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, __dbc_c_pget_reply *, int *));
+void __dbc_c_put_proc __P((u_int, 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, __dbc_c_put_reply *, int *));
void __dbsrv_settimeout __P((ct_entry *, u_int32_t));
-void __dbsrv_timeout __P((int));
void __dbclear_ctp __P((ct_entry *));
void __dbdel_ctp __P((ct_entry *));
ct_entry *new_ct_ent __P((int *));
@@ -85,7 +84,7 @@ ct_entry *__dbsrv_shareenv __P((ct_entry *, home_entry *, u_int32_t));
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));
+int __env_close_int __P((long, u_int32_t, int));
home_entry *get_fullhome __P((char *));
#if defined(__cplusplus)
diff --git a/db/dbinc_auto/tcl_ext.h b/db/dbinc_auto/tcl_ext.h
index d147bd4f8..e5395c539 100644
--- a/db/dbinc_auto/tcl_ext.h
+++ b/db/dbinc_auto/tcl_ext.h
@@ -16,11 +16,16 @@ int bdb_DbmCommand __P((Tcl_Interp *, int, Tcl_Obj * CONST*, int, DBM *));
int ndbm_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
void _DbInfoDelete __P((Tcl_Interp *, DBTCL_INFO *));
int db_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
+int tcl_CompactStat __P((Tcl_Interp *, DBTCL_INFO *));
+int tcl_rep_send __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t));
int dbc_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
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_EnvIdReset __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+int tcl_EnvLsnReset __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
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_EventNotify __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *, DBTCL_INFO *));
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 *));
@@ -42,11 +47,12 @@ int _GetGlobPrefix __P((char *, char **));
int _ReturnSetup __P((Tcl_Interp *, int, int, char *));
int _ErrorSetup __P((Tcl_Interp *, int, char *));
void _ErrorFunc __P((const DB_ENV *, CONST char *, const char *));
+void _EventFunc __P((DB_ENV *, u_int32_t, void *));
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, const FN *));
void _debug_check __P((void));
-int _CopyObjBytes __P((Tcl_Interp *, Tcl_Obj *obj, void **, u_int32_t *, 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 *));
@@ -65,22 +71,27 @@ int tcl_MpSync __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_MpTrickle __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_Mp __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
int tcl_MpStat __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+int tcl_RepConfig __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *));
+int tcl_RepGetConfig __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *));
int tcl_RepElect __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
int tcl_RepFlush __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
+int tcl_RepSync __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
int tcl_RepLimit __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
int tcl_RepRequest __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
+int tcl_RepTransport __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *, DBTCL_INFO *));
int tcl_RepStart __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
int tcl_RepProcessMessage __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
int tcl_RepStat __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
+int tcl_RepMgr __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
int seq_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
void _TxnInfoDelete __P((Tcl_Interp *, DBTCL_INFO *));
int tcl_TxnCheckpoint __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_Txn __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
+int tcl_CDSGroup __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
int tcl_TxnStat __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_TxnTimeout __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_TxnRecover __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
int bdb_RandCommand __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
-int tcl_Mutex __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/txn_auto.h b/db/dbinc_auto/txn_auto.h
index 2611df15e..ec3eb2081 100644
--- a/db/dbinc_auto/txn_auto.h
+++ b/db/dbinc_auto/txn_auto.h
@@ -2,20 +2,42 @@
#ifndef __txn_AUTO_H
#define __txn_AUTO_H
+#define DB___txn_regop_42 10
+typedef struct ___txn_regop_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ u_int32_t opcode;
+ int32_t timestamp;
+ DBT locks;
+} __txn_regop_42_args;
+
#define DB___txn_regop 10
typedef struct ___txn_regop_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t timestamp;
+ u_int32_t envid;
DBT locks;
} __txn_regop_args;
+#define DB___txn_ckp_42 11
+typedef struct ___txn_ckp_42_args {
+ u_int32_t type;
+ DB_TXN *txnp;
+ DB_LSN prev_lsn;
+ DB_LSN ckp_lsn;
+ DB_LSN last_ckp;
+ int32_t timestamp;
+ u_int32_t rep_gen;
+} __txn_ckp_42_args;
+
#define DB___txn_ckp 11
typedef struct ___txn_ckp_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DB_LSN ckp_lsn;
DB_LSN last_ckp;
@@ -27,7 +49,7 @@ typedef struct ___txn_ckp_args {
#define DB___txn_child 12
typedef struct ___txn_child_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t child;
DB_LSN c_lsn;
@@ -36,7 +58,7 @@ typedef struct ___txn_child_args {
#define DB___txn_xa_regop 13
typedef struct ___txn_xa_regop_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t opcode;
DBT xid;
@@ -50,7 +72,7 @@ typedef struct ___txn_xa_regop_args {
#define DB___txn_recycle 14
typedef struct ___txn_recycle_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
u_int32_t min;
u_int32_t max;
diff --git a/db/dbinc_auto/txn_ext.h b/db/dbinc_auto/txn_ext.h
index 94ca6f332..48ba76efc 100644
--- a/db/dbinc_auto/txn_ext.h
+++ b/db/dbinc_auto/txn_ext.h
@@ -9,24 +9,25 @@ extern "C" {
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));
+int __txn_recycle_id __P((DB_ENV *));
+int __txn_compensate_begin __P((DB_ENV *, DB_TXN **));
+void __txn_continue __P((DB_ENV *, DB_TXN *, TXN_DETAIL *));
int __txn_commit __P((DB_TXN *, u_int32_t));
int __txn_abort __P((DB_TXN *));
-int __txn_discard __P((DB_TXN *, u_int32_t flags));
+int __txn_discard_int __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_get_name __P((DB_TXN *, const char **));
+int __txn_set_name __P((DB_TXN *, const char *));
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));
-void __txn_getactive __P((DB_ENV *, DB_LSN *));
-int __txn_getckp __P((DB_ENV *, DB_LSN *));
int __txn_activekids __P((DB_ENV *, u_int32_t, DB_TXN *));
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, const DBT *));
+int __txn_regop_42_read __P((DB_ENV *, void *, __txn_regop_42_args **));
+int __txn_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, int32_t, u_int32_t, const DBT *));
int __txn_regop_read __P((DB_ENV *, void *, __txn_regop_args **));
+int __txn_ckp_42_read __P((DB_ENV *, void *, __txn_ckp_42_args **));
int __txn_ckp_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, DB_LSN *, DB_LSN *, int32_t, u_int32_t, u_int32_t));
int __txn_ckp_read __P((DB_ENV *, void *, __txn_ckp_args **));
int __txn_child_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, DB_LSN *));
@@ -36,21 +37,34 @@ int __txn_xa_regop_read __P((DB_ENV *, void *, __txn_xa_regop_args **));
int __txn_recycle_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, u_int32_t));
int __txn_recycle_read __P((DB_ENV *, void *, __txn_recycle_args **));
int __txn_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
+int __txn_regop_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_regop_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __txn_ckp_42_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_ckp_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_child_print __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_recycle_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
-void __txn_dbenv_create __P((DB_ENV *));
+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_getactive __P((DB_ENV *, DB_LSN *));
+int __txn_getckp __P((DB_ENV *, DB_LSN *));
+int __txn_updateckp __P((DB_ENV *, DB_LSN *));
+int __txn_failchk __P((DB_ENV *));
+int __txn_dbenv_create __P((DB_ENV *));
+void __txn_dbenv_destroy __P((DB_ENV *));
+int __txn_get_tx_max __P((DB_ENV *, u_int32_t *));
int __txn_set_tx_max __P((DB_ENV *, u_int32_t));
+int __txn_get_tx_timestamp __P((DB_ENV *, time_t *));
+int __txn_set_tx_timestamp __P((DB_ENV *, time_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 *));
int __txn_child_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
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_regop_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __txn_ckp_42_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_map_gid __P((DB_ENV *, u_int8_t *, TXN_DETAIL **, roff_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));
@@ -59,13 +73,15 @@ int __txn_openfiles __P((DB_ENV *, DB_LSN *, int));
int __txn_open __P((DB_ENV *));
int __txn_findlastckp __P((DB_ENV *, DB_LSN *, DB_LSN *));
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_oldest_reader __P((DB_ENV *, DB_LSN *));
+int __txn_add_buffer __P((DB_ENV *, TXN_DETAIL *));
+int __txn_remove_buffer __P((DB_ENV *, TXN_DETAIL *, db_mutex_t));
int __txn_stat_pp __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
int __txn_stat_print_pp __P((DB_ENV *, u_int32_t));
int __txn_stat_print __P((DB_ENV *, 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*));
+int __txn_remevent __P((DB_ENV *, DB_TXN *, const char *, u_int8_t *, int));
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));
diff --git a/db/dbinc_auto/xa_ext.h b/db/dbinc_auto/xa_ext.h
index 3247b5bb7..272d4cdbd 100644
--- a/db/dbinc_auto/xa_ext.h
+++ b/db/dbinc_auto/xa_ext.h
@@ -12,7 +12,7 @@ int __db_rmid_to_env __P((int rmid, DB_ENV **envp));
int __db_xid_to_txn __P((DB_ENV *, XID *, roff_t *));
int __db_map_rmid __P((int, DB_ENV *));
int __db_unmap_rmid __P((int));
-int __db_map_xid __P((DB_ENV *, XID *, size_t));
+int __db_map_xid __P((DB_ENV *, XID *, TXN_DETAIL *));
void __db_unmap_xid __P((DB_ENV *, XID *, size_t));
#if defined(__cplusplus)
diff --git a/db/dbm/dbm.c b/db/dbm/dbm.c
index 842b8d0a4..0093ce703 100644
--- a/db/dbm/dbm.c
+++ b/db/dbm/dbm.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993
@@ -39,19 +39,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: dbm.c,v 11.18 2004/05/10 21:26:47 bostic Exp $
+ * $Id: dbm.c,v 12.8 2006/08/24 14:45:31 bostic Exp $
*/
+#define DB_DBM_HSEARCH 1
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h>
-#include <string.h>
-#endif
-
-#define DB_DBM_HSEARCH 1
#include "db_int.h"
/*
@@ -98,7 +91,7 @@ __db_dbm_init(file)
if (__cur_db != NULL)
dbm_close(__cur_db);
if ((__cur_db =
- dbm_open(file, O_CREAT | O_RDWR, __db_omode("rw----"))) != NULL)
+ dbm_open(file, O_CREAT | O_RDWR, __db_omode(OWNER_RW))) != NULL)
return (0);
if ((__cur_db = dbm_open(file, O_RDONLY, 0)) != NULL)
return (0);
@@ -123,7 +116,8 @@ __db_dbm_fetch(key)
if (__cur_db == NULL) {
__db_no_open();
- item.dptr = 0;
+ item.dptr = NULL;
+ item.dsize = 0;
return (item);
}
return (dbm_fetch(__cur_db, key));
@@ -136,7 +130,8 @@ __db_dbm_firstkey()
if (__cur_db == NULL) {
__db_no_open();
- item.dptr = 0;
+ item.dptr = NULL;
+ item.dsize = 0;
return (item);
}
return (dbm_firstkey(__cur_db));
@@ -152,7 +147,8 @@ __db_dbm_nextkey(key)
if (__cur_db == NULL) {
__db_no_open();
- item.dptr = 0;
+ item.dptr = NULL;
+ item.dsize = 0;
return (item);
}
return (dbm_nextkey(__cur_db));
@@ -204,7 +200,7 @@ __db_ndbm_open(file, oflags, mode)
DB *dbp;
DBC *dbc;
int ret;
- char path[MAXPATHLEN];
+ char path[DB_MAXPATHLEN];
/*
* !!!
@@ -282,10 +278,8 @@ __db_ndbm_fetch(dbm, key)
dbc = (DBC *)dbm;
- memset(&_key, 0, sizeof(DBT));
+ DB_INIT_DBT(_key, key.dptr, key.dsize);
memset(&_data, 0, sizeof(DBT));
- _key.size = (u_int32_t)key.dsize;
- _key.data = key.dptr;
/*
* Note that we can't simply use the dbc we have to do a c_get/SET,
@@ -394,9 +388,7 @@ __db_ndbm_delete(dbm, key)
dbc = (DBC *)dbm;
- memset(&_key, 0, sizeof(DBT));
- _key.data = key.dptr;
- _key.size = (u_int32_t)key.dsize;
+ DB_INIT_DBT(_key, key.dptr, key.dsize);
if ((ret = dbc->dbp->del(dbc->dbp, NULL, &_key, 0)) == 0)
return (0);
@@ -428,13 +420,8 @@ __db_ndbm_store(dbm, key, data, flags)
dbc = (DBC *)dbm;
- memset(&_key, 0, sizeof(DBT));
- _key.data = key.dptr;
- _key.size = (u_int32_t)key.dsize;
-
- memset(&_data, 0, sizeof(DBT));
- _data.data = data.dptr;
- _data.size = (u_int32_t)data.dsize;
+ DB_INIT_DBT(_key, key.dptr, key.dsize);
+ DB_INIT_DBT(_data, data.dptr, data.dsize);
if ((ret = dbc->dbp->put(dbc->dbp, NULL,
&_key, &_data, flags == DBM_INSERT ? DB_NOOVERWRITE : 0)) == 0)
diff --git a/db/dbreg/dbreg.c b/db/dbreg/dbreg.c
index 930c8bb7a..edc4599be 100644
--- a/db/dbreg/dbreg.c
+++ b/db/dbreg/dbreg.c
@@ -1,27 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: dbreg.c,v 11.90 2004/10/15 16:59:39 bostic Exp $
+ * $Id: dbreg.c,v 12.20 2006/08/24 14:45:31 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
#include "dbinc/db_am.h"
-static int __dbreg_push_id __P((DB_ENV *, int32_t));
+static int __dbreg_push_id __P((DB_ENV *, DB *, int32_t));
static int __dbreg_pop_id __P((DB_ENV *, int32_t *));
static int __dbreg_pluck_id __P((DB_ENV *, int32_t));
@@ -60,9 +54,9 @@ static int __dbreg_pluck_id __P((DB_ENV *, int32_t));
* region list so they can get logged on checkpoints.
*
* An FNAME that may/does have a valid id must be accessed under
- * protection of the fq_mutex, with the following exception:
+ * protection of the mtx_filelist, with the following exception:
*
- * We don't want to have to grab the fq_mutex on every log
+ * We don't want to have to grab the mtx_filelist on every log
* record, and it should be safe not to do so when we're just
* looking at the id, because once allocated, the id should
* not change under a handle until the handle is closed.
@@ -114,7 +108,7 @@ __dbreg_setup(dbp, name, create_txnid)
namep = NULL;
/* Allocate an FNAME and, if necessary, a buffer for the name itself. */
- R_LOCK(dbenv, infop);
+ LOG_SYSTEM_LOCK(dbenv);
if ((ret = __db_shalloc(infop, sizeof(FNAME), 0, &fnp)) != 0)
goto err;
memset(fnp, 0, sizeof(FNAME));
@@ -127,13 +121,13 @@ __dbreg_setup(dbp, name, create_txnid)
} else
fnp->name_off = INVALID_ROFF;
- R_UNLOCK(dbenv, infop);
+ LOG_SYSTEM_UNLOCK(dbenv);
/*
* Fill in all the remaining info that we'll need later to register
* the file, if we use it for logging.
*/
- fnp->id = DB_LOGFILEID_INVALID;
+ fnp->id = fnp->old_id = DB_LOGFILEID_INVALID;
fnp->s_type = dbp->type;
memcpy(fnp->ufid, dbp->fileid, DB_FILE_ID_LEN);
fnp->meta_pgno = dbp->meta_pgno;
@@ -143,9 +137,9 @@ __dbreg_setup(dbp, name, create_txnid)
return (0);
-err: R_UNLOCK(dbenv, infop);
+err: LOG_SYSTEM_UNLOCK(dbenv);
if (ret == ENOMEM)
- __db_err(dbenv,
+ __db_errx(dbenv,
"Logging region out of memory; you may need to increase its size");
return (ret);
@@ -175,16 +169,16 @@ __dbreg_teardown(dbp)
* We may not have an FNAME if we were never opened. This is not an
* error.
*/
- if (fnp == NULL)
+ if (fnp == NULL || F_ISSET(fnp, DB_FNAME_NOTLOGGED))
return (0);
- DB_ASSERT(fnp->id == DB_LOGFILEID_INVALID);
+ DB_ASSERT(dbenv, fnp->id == DB_LOGFILEID_INVALID);
- R_LOCK(dbenv, infop);
+ LOG_SYSTEM_LOCK(dbenv);
if (fnp->name_off != INVALID_ROFF)
__db_shalloc_free(infop, R_ADDR(infop, fnp->name_off));
__db_shalloc_free(infop, fnp);
- R_UNLOCK(dbenv, infop);
+ LOG_SYSTEM_UNLOCK(dbenv);
dbp->log_filename = NULL;
@@ -216,22 +210,22 @@ __dbreg_new_id(dbp, txn)
lp = dblp->reginfo.primary;
fnp = dbp->log_filename;
- /* The fq_mutex protects the FNAME list and id management. */
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ /* The mtx_filelist protects the FNAME list and id management. */
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
if (fnp->id != DB_LOGFILEID_INVALID) {
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (0);
}
if ((ret = __dbreg_get_id(dbp, txn, &id)) == 0)
fnp->id = id;
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
/*
* __dbreg_get_id --
* Assign an unused dbreg id to this database handle.
- * Assume the caller holds the fq_mutex locked. Assume the
+ * Assume the caller holds the mtx_filelist 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 *));
@@ -242,10 +236,8 @@ __dbreg_get_id(dbp, txn, idp)
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;
@@ -269,7 +261,9 @@ __dbreg_get_id(dbp, txn, idp)
if (id == DB_LOGFILEID_INVALID)
id = lp->fid_max++;
- fnp->is_durable = !F_ISSET(dbp, DB_AM_NOT_DURABLE);
+ /* If the file is durable (i.e., not, not-durable), mark it as such. */
+ if (!F_ISSET(dbp, DB_AM_NOT_DURABLE))
+ F_SET(fnp, DB_FNAME_DURABLE);
/* Hook the FNAME into the list of open files. */
SH_TAILQ_INSERT_HEAD(&lp->fq, fnp, q, __fname);
@@ -278,21 +272,11 @@ __dbreg_get_id(dbp, txn, idp)
* Log the registry. We should only request a new ID in situations
* where logging is reasonable.
*/
- DB_ASSERT(!F_ISSET(dbp, DB_AM_RECOVER));
+ DB_ASSERT(dbenv, !F_ISSET(dbp, DB_AM_RECOVER));
- memset(&fid_dbt, 0, sizeof(fid_dbt));
- memset(&r_name, 0, sizeof(r_name));
- if (fnp->name_off != INVALID_ROFF) {
- r_name.data = R_ADDR(&dblp->reginfo, fnp->name_off);
- r_name.size = (u_int32_t)strlen((char *)r_name.data) + 1;
- }
- fid_dbt.data = dbp->fileid;
- fid_dbt.size = DB_FILE_ID_LEN;
- 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)
+ if ((ret = __dbreg_log_id(dbp, txn, id, 0)) != 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
@@ -300,8 +284,8 @@ __dbreg_get_id(dbp, txn, idp)
*/
fnp->create_txnid = TXN_INVALID;
- DB_ASSERT(dbp->type == fnp->s_type);
- DB_ASSERT(dbp->meta_pgno == fnp->meta_pgno);
+ DB_ASSERT(dbenv, dbp->type == fnp->s_type);
+ DB_ASSERT(dbenv, dbp->meta_pgno == fnp->meta_pgno);
if ((ret = __dbreg_add_dbentry(dbenv, dblp, dbp, id)) != 0)
goto err;
@@ -345,11 +329,11 @@ __dbreg_assign_id(dbp, id)
close_dbp = NULL;
close_fnp = NULL;
- /* The fq_mutex protects the FNAME list and id management. */
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ /* The mtx_filelist protects the FNAME list and id management. */
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
/* We should only call this on DB handles that have no ID. */
- DB_ASSERT(fnp->id == DB_LOGFILEID_INVALID);
+ DB_ASSERT(dbenv, fnp->id == DB_LOGFILEID_INVALID);
/*
* Make sure there isn't already a file open with this ID. There can
@@ -358,8 +342,8 @@ __dbreg_assign_id(dbp, id)
*/
if (__dbreg_id_to_fname(dblp, id, 1, &close_fnp) == 0) {
/*
- * We want to save off any dbp we have open with this id.
- * We can't safely close it now, because we hold the fq_mutex,
+ * We want to save off any dbp we have open with this id. We
+ * can't safely close it now, because we hold the mtx_filelist,
* but we should be able to rely on it being open in this
* process, and we're running recovery, so no other thread
* should muck with it if we just put off closing it until
@@ -391,7 +375,9 @@ cont: if ((ret = __dbreg_pluck_id(dbenv, id)) != 0)
/* Now go ahead and assign the id to our dbp. */
fnp->id = id;
- fnp->is_durable = !F_ISSET(dbp, DB_AM_NOT_DURABLE);
+ /* If the file is durable (i.e., not, not-durable), mark it as such. */
+ if (!F_ISSET(dbp, DB_AM_NOT_DURABLE))
+ F_SET(fnp, DB_FNAME_DURABLE);
SH_TAILQ_INSERT_HEAD(&lp->fq, fnp, q, __fname);
/*
@@ -402,7 +388,7 @@ cont: if ((ret = __dbreg_pluck_id(dbenv, id)) != 0)
if ((ret = __dbreg_add_dbentry(dbenv, dblp, dbp, id)) != 0)
(void)__dbreg_revoke_id(dbp, 1, id);
-err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+err: MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
/* There's nothing useful that our caller can do if this close fails. */
if (close_dbp != NULL)
@@ -435,6 +421,7 @@ __dbreg_revoke_id(dbp, have_lock, force_id)
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
fnp = dbp->log_filename;
+ ret = 0;
/* If we lack an ID, this is a null-op. */
if (fnp == NULL)
@@ -447,26 +434,38 @@ __dbreg_revoke_id(dbp, have_lock, force_id)
*/
if (force_id != DB_LOGFILEID_INVALID)
id = force_id;
- else if (fnp->id == DB_LOGFILEID_INVALID)
- return (0);
- else
+ else if (fnp->id == DB_LOGFILEID_INVALID) {
+ if (fnp->old_id == DB_LOGFILEID_INVALID)
+ return (0);
+ id = fnp->old_id;
+ } else
id = fnp->id;
if (!have_lock)
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
fnp->id = DB_LOGFILEID_INVALID;
+ fnp->old_id = DB_LOGFILEID_INVALID;
/* Remove the FNAME from the list of open files. */
SH_TAILQ_REMOVE(&lp->fq, fnp, q, __fname);
- /* Remove this id from the dbentry table. */
- __dbreg_rem_dbentry(dblp, id);
-
- /* Push this id onto the free list. */
- ret = __dbreg_push_id(dbenv, id);
+ /*
+ * Remove this id from the dbentry table and push it onto the
+ * free list.
+ */
+ if ((ret = __dbreg_rem_dbentry(dblp, id)) == 0) {
+ /*
+ * If we are not in recovery but the file was opened
+ * for a recovery operation, then this process aborted
+ * a transaction for another process and the id may
+ * still be in use, so don't reuse this id.
+ */
+ if (!F_ISSET(dbp, DB_AM_RECOVER) || IS_RECOVERING(dbenv))
+ ret = __dbreg_push_id(dbenv, dbp, id);
+ }
if (!have_lock)
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
@@ -483,10 +482,8 @@ __dbreg_close_id(dbp, txn, op)
DB_TXN *txn;
u_int32_t op;
{
- DBT fid_dbt, r_name, *dbtp;
DB_ENV *dbenv;
DB_LOG *dblp;
- DB_LSN r_unused;
FNAME *fnp;
LOG *lp;
int ret;
@@ -497,10 +494,48 @@ __dbreg_close_id(dbp, txn, op)
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);
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ if (fnp->id == DB_LOGFILEID_INVALID)
+ return (__dbreg_revoke_id(dbp, 0, DB_LOGFILEID_INVALID));
+
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+
+ if ((ret = __dbreg_log_close(dbenv, fnp, txn, op)) != 0)
+ goto err;
+ ret = __dbreg_revoke_id(dbp, 1, DB_LOGFILEID_INVALID);
+
+err: MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
+ return (ret);
+}
+
+/*
+ * __dbreg_log_close --
+ *
+ * Log a close of a database. Called when closing a file or when a
+ * replication client is becoming a master. That closes all the
+ * files it previously had open.
+ *
+ * Assumes caller holds the lp->mutex_filelist lock already.
+ *
+ * PUBLIC: int __dbreg_log_close __P((DB_ENV *, FNAME *,
+ * PUBLIC: DB_TXN *, u_int32_t));
+ */
+int
+__dbreg_log_close(dbenv, fnp, txn, op)
+ DB_ENV *dbenv;
+ FNAME *fnp;
+ DB_TXN *txn;
+ u_int32_t op;
+{
+ DB_LOG *dblp;
+ DBT fid_dbt, r_name, *dbtp;
+ DB_LSN r_unused;
+ int ret;
+
+ dblp = dbenv->lg_handle;
+ ret = 0;
if (fnp->name_off == INVALID_ROFF)
dbtp = NULL;
@@ -515,14 +550,22 @@ __dbreg_close_id(dbp, txn, op)
fid_dbt.data = fnp->ufid;
fid_dbt.size = DB_FILE_ID_LEN;
if ((ret = __dbreg_register_log(dbenv, txn, &r_unused,
- F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0,
+ F_ISSET(fnp, DB_FNAME_DURABLE) ? 0 : DB_LOG_NOT_DURABLE,
op, dbtp, &fid_dbt, fnp->id,
- fnp->s_type, fnp->meta_pgno, TXN_INVALID)) != 0)
- goto err;
-
- ret = __dbreg_revoke_id(dbp, 1, DB_LOGFILEID_INVALID);
-
-err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ fnp->s_type, fnp->meta_pgno, TXN_INVALID)) != 0) {
+ /*
+ * We are trying to close, but the log write failed.
+ * Unfortunately, close needs to plow forward, because
+ * the application can't do anything with the handle.
+ * Make the entry in the shared memory region so that
+ * when we close the environment, we know that this
+ * happened. Also, make sure we remove this from the
+ * per-process table, so that we don't try to close it
+ * later.
+ */
+ F_SET(fnp, DB_FNAME_NOTLOGGED);
+ (void)__dbreg_rem_dbentry(dblp, fnp->id);
+ }
return (ret);
}
@@ -533,15 +576,17 @@ err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
* process keeps open files in an array by ID.) Push them to the stack and
* pop them from it, managing memory as appropriate.
*
- * The stack is protected by the fq_mutex, and in both functions we assume
- * that this is already locked.
+ * The stack is protected by the mtx_filelist, and both functions assume it
+ * is already locked.
*/
static int
-__dbreg_push_id(dbenv, id)
+__dbreg_push_id(dbenv, dbp, id)
DB_ENV *dbenv;
+ DB *dbp;
int32_t id;
{
DB_LOG *dblp;
+ DB_REP *db_rep;
LOG *lp;
REGINFO *infop;
int32_t *stack, *newstack;
@@ -550,34 +595,37 @@ __dbreg_push_id(dbenv, id)
dblp = dbenv->lg_handle;
infop = &dblp->reginfo;
lp = infop->primary;
+ db_rep = dbenv->rep_handle;
- if (lp->free_fid_stack == INVALID_ROFF) {
- stack = NULL;
- DB_ASSERT(lp->free_fids_alloced == 0);
- } else
- stack = R_ADDR(infop, lp->free_fid_stack);
-
+ /*
+ * If our fid generation in replication has changed, this fid should
+ * not be pushed back onto the stack.
+ */
+ if (REP_ON(dbenv) && ((REP *)db_rep->region)->gen != dbp->fid_gen)
+ return (0);
/* Check if we have room on the stack. */
- if (lp->free_fids_alloced <= lp->free_fids + 1) {
- R_LOCK(dbenv, infop);
+ if (lp->free_fid_stack == INVALID_ROFF ||
+ lp->free_fids_alloced <= lp->free_fids + 1) {
+ LOG_SYSTEM_LOCK(dbenv);
if ((ret = __db_shalloc(infop,
(lp->free_fids_alloced + 20) * sizeof(u_int32_t), 0,
&newstack)) != 0) {
- R_UNLOCK(dbenv, infop);
+ LOG_SYSTEM_UNLOCK(dbenv);
return (ret);
}
- if (stack != NULL) {
+ if (lp->free_fid_stack != INVALID_ROFF) {
+ stack = R_ADDR(infop, lp->free_fid_stack);
memcpy(newstack, stack,
lp->free_fids_alloced * sizeof(u_int32_t));
__db_shalloc_free(infop, stack);
}
- stack = newstack;
- lp->free_fid_stack = R_OFFSET(infop, stack);
+ lp->free_fid_stack = R_OFFSET(infop, newstack);
lp->free_fids_alloced += 20;
- R_UNLOCK(dbenv, infop);
+ LOG_SYSTEM_UNLOCK(dbenv);
}
+ stack = R_ADDR(infop, lp->free_fid_stack);
stack[lp->free_fids++] = id;
return (0);
}
@@ -611,7 +659,7 @@ __dbreg_pop_id(dbenv, id)
* be on the stack.
*
* Returns success whether or not the particular id was found, and like
- * push and pop, assumes that the fq_mutex is locked.
+ * push and pop, assumes that the mtx_filelist is locked.
*/
static int
__dbreg_pluck_id(dbenv, id)
@@ -644,3 +692,73 @@ __dbreg_pluck_id(dbenv, id)
return (0);
}
+
+/*
+ * __dbreg_log_id --
+ * Used for in-memory named files. They are created in mpool and
+ * are given id's early in the open process so that we can read and
+ * create pages in the mpool for the files. However, at the time that
+ * the mpf is created, the file may not be fully created and/or its
+ * meta-data may not be fully known, so we can't do a full dbregister.
+ * This is a routine exported that will log a complete dbregister
+ * record that will allow for both recovery and replication.
+ *
+ * PUBLIC: int __dbreg_log_id __P((DB *, DB_TXN *, int32_t, int));
+ */
+int
+__dbreg_log_id(dbp, txn, id, needlock)
+ DB *dbp;
+ DB_TXN *txn;
+ int32_t id;
+ int needlock;
+{
+ DBT fid_dbt, r_name;
+ DB_ENV *dbenv;
+ DB_LOG *dblp;
+ DB_LSN unused;
+ FNAME *fnp;
+ LOG *lp;
+ u_int32_t op;
+ int ret;
+
+ dbenv = dbp->dbenv;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ fnp = dbp->log_filename;
+
+ /* Verify that the fnp has been initialized. */
+ if (fnp->s_type == DB_UNKNOWN) {
+ memcpy(fnp->ufid, dbp->fileid, DB_FILE_ID_LEN);
+ fnp->s_type = dbp->type;
+ }
+
+ /*
+ * Log the registry. We should only request a new ID in situations
+ * where logging is reasonable.
+ */
+ memset(&fid_dbt, 0, sizeof(fid_dbt));
+ memset(&r_name, 0, sizeof(r_name));
+
+ if (needlock)
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+
+ if (fnp->name_off != INVALID_ROFF) {
+ r_name.data = R_ADDR(&dblp->reginfo, fnp->name_off);
+ r_name.size = (u_int32_t)strlen((char *)r_name.data) + 1;
+ }
+
+ fid_dbt.data = dbp->fileid;
+ fid_dbt.size = DB_FILE_ID_LEN;
+
+ op = !F_ISSET(dbp, DB_AM_OPEN_CALLED) ? DBREG_PREOPEN :
+ (F_ISSET(dbp, DB_AM_INMEM) ? DBREG_REOPEN : DBREG_OPEN);
+ ret = __dbreg_register_log(dbenv, txn, &unused,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0,
+ op, r_name.size == 0 ? NULL : &r_name, &fid_dbt, id,
+ fnp->s_type, fnp->meta_pgno, fnp->create_txnid);
+
+ if (needlock)
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
+
+ return (ret);
+}
diff --git a/db/dbreg/dbreg.src b/db/dbreg/dbreg.src
index ff3fc2923..6f229e287 100644
--- a/db/dbreg/dbreg.src
+++ b/db/dbreg/dbreg.src
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: dbreg.src,v 10.26 2004/06/17 17:35:17 bostic Exp $
+ * $Id: dbreg.src,v 12.5 2006/08/24 14:45:31 bostic Exp $
*/
PREFIX __dbreg
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
@@ -35,7 +28,7 @@ INCLUDE
* ftype: database type
* id: transaction id of the subtransaction that created the fs object
*/
-BEGIN register 2
+BEGIN register 42 2
ARG opcode u_int32_t lu
DBT name DBT s
DBT uid DBT s
diff --git a/db/dbreg/dbreg_auto.c b/db/dbreg/dbreg_auto.c
index a9cc5f704..519786c14 100644
--- a/db/dbreg/dbreg_auto.c
+++ b/db/dbreg/dbreg_auto.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -23,11 +16,11 @@
* PUBLIC: int32_t, DBTYPE, db_pgno_t, u_int32_t));
*/
int
-__dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
+__dbreg_register_log(dbenv, txnp, ret_lsnp, flags,
opcode, name, uid, fileid, ftype, meta_pgno,
id)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -55,29 +48,30 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -94,7 +88,7 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -168,12 +162,13 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -192,20 +187,21 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__dbreg_register_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -230,13 +226,14 @@ __dbreg_register_read(dbenv, recbuf, argpp)
sizeof(__dbreg_register_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
diff --git a/db/dbreg/dbreg_autop.c b/db/dbreg/dbreg_autop.c
index 3889b357d..b2e12e2d4 100644
--- a/db/dbreg/dbreg_autop.c
+++ b/db/dbreg/dbreg_autop.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -34,20 +27,18 @@ __dbreg_register_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __dbreg_register_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__dbreg_register%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__dbreg_register%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\topcode: %lu\n", (u_long)argp->opcode);
(void)printf("\tname: ");
for (i = 0; i < argp->name.size; i++) {
diff --git a/db/dbreg/dbreg_rec.c b/db/dbreg/dbreg_rec.c
index 07b175a1f..180239842 100644
--- a/db/dbreg/dbreg_rec.c
+++ b/db/dbreg/dbreg_rec.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1995, 1996
@@ -32,23 +32,15 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: dbreg_rec.c,v 11.133 2004/09/24 00:43:18 bostic Exp $
+ * $Id: dbreg_rec.c,v 12.17 2006/09/07 20:05:28 bostic Exp $
*/
#include "db_config.h"
-#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/log.h"
-#include "dbinc/mp.h"
#include "dbinc/txn.h"
static int __dbreg_open_file __P((DB_ENV *,
@@ -84,11 +76,19 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
goto out;
switch (argp->opcode) {
+ case DBREG_REOPEN:
+ case DBREG_PREOPEN:
case DBREG_OPEN:
+ /*
+ * In general, we redo the open on REDO and abort on UNDO.
+ * However, a reopen is a second instance of an open of
+ * in-memory files and we don't want to close them yet
+ * on abort, so just skip that here.
+ */
if ((DB_REDO(op) ||
op == DB_TXN_OPENFILES || op == DB_TXN_POPENFILES))
do_open = 1;
- else
+ else if (argp->opcode != DBREG_REOPEN)
do_close = 1;
break;
case DBREG_CLOSE:
@@ -117,9 +117,8 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
do_open = 1;
break;
default:
- DB_ASSERT(0);
- ret = EINVAL;
- break;
+ ret = __db_unknown_path(dbenv, "__dbreg_register_recover");
+ goto out;
}
if (do_open) {
@@ -137,7 +136,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
*/
ret = __dbreg_open_file(dbenv,
op == DB_TXN_ABORT || op == DB_TXN_POPENFILES ?
- argp->txnid : NULL, argp, info);
+ argp->txnp : NULL, argp, info);
if (ret == DB_PAGE_NOTFOUND && argp->meta_pgno != PGNO_BASE_MD)
ret = ENOENT;
if (ret == ENOENT || ret == EINVAL) {
@@ -149,7 +148,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
* for that case and possibly retry.
*/
if (op == DB_TXN_FORWARD_ROLL &&
- argp->txnid != 0 &&
+ argp->txnp != 0 &&
dblp->dbentry[argp->fileid].deleted) {
dblp->dbentry[argp->fileid].deleted = 0;
ret =
@@ -172,7 +171,9 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
if (do_close) {
/*
* If we are undoing an open, or redoing a close,
- * then we need to close the file.
+ * then we need to close the file. If we are simply
+ * revoking then we just need to grab the DBP and revoke
+ * the log id.
*
* If the file is deleted, then we can just ignore this close.
* Otherwise, we should usually have a valid dbp we should
@@ -181,7 +182,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
* fact, not have the file open, and that's OK.
*/
do_rem = 0;
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+ MUTEX_LOCK(dbenv, dblp->mtx_dbreg);
if (argp->fileid < dblp->dbentry_cnt) {
/*
* Typically, closes should match an open which means
@@ -205,13 +206,12 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
if ((DB_REDO(op) &&
argp->opcode != DBREG_RCLOSE) ||
argp->opcode == DBREG_CHKPNT) {
- __db_err(dbenv,
- "Improper file close at %lu/%lu",
+ __db_errx(dbenv,
+ "Warning: Improper file close at %lu/%lu",
(u_long)lsnp->file,
(u_long)lsnp->offset);
- ret = EINVAL;
}
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
goto done;
}
@@ -228,7 +228,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
*/
do_rem = F_ISSET(dbp, DB_AM_RECOVER) ||
op == DB_TXN_ABORT;
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
if (op == DB_TXN_ABORT)
(void)__dbreg_close_id(dbp,
NULL, DBREG_RCLOSE);
@@ -236,11 +236,13 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
(void)__dbreg_revoke_id(dbp, 0,
DB_LOGFILEID_INVALID);
} else if (dbe->deleted) {
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
- __dbreg_rem_dbentry(dblp, argp->fileid);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
+ if ((ret = __dbreg_rem_dbentry(
+ dblp, argp->fileid)) != 0)
+ goto out;
}
} else
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
/*
* During recovery, all files are closed. On an abort, we only
@@ -262,7 +264,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
if (do_rem && dbp != NULL) {
if (argp->id != TXN_INVALID) {
if ((ret = __db_txnlist_find(dbenv,
- info, argp->txnid->txnid, &status))
+ info, argp->txnp->txnid, &status))
!= DB_NOTFOUND && ret != 0)
goto out;
if (ret == DB_NOTFOUND || status != TXN_COMMIT)
@@ -273,7 +275,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
if (op == DB_TXN_ABORT &&
!F_ISSET(dbp, DB_AM_RECOVER)) {
if ((t_ret = __db_refresh(dbp,
- NULL, DB_NOSYNC, NULL)) != 0 && ret == 0)
+ NULL, DB_NOSYNC, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
} else {
if (op == DB_TXN_APPLY &&
@@ -311,27 +313,29 @@ __dbreg_open_file(dbenv, txn, argp, info)
u_int32_t id, status;
int ret;
- dblp = (DB_LOG *)dbenv->lg_handle;
+ dblp = dbenv->lg_handle;
/*
* When we're opening, we have to check that the name we are opening
* is what we expect. If it's not, then we close the old file and
* open the new one.
*/
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
- if (argp->fileid < dblp->dbentry_cnt)
+ MUTEX_LOCK(dbenv, dblp->mtx_dbreg);
+ if (argp->fileid != DB_LOGFILEID_INVALID &&
+ argp->fileid < dblp->dbentry_cnt)
dbe = &dblp->dbentry[argp->fileid];
else
dbe = NULL;
if (dbe != NULL) {
if (dbe->deleted) {
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
return (ENOENT);
}
/*
- * At the end of OPENFILES, we may have a file open. The
+ * At the end of OPENFILES, we may have a file open. If this
+ * is a reopen, then we will always close and reopen. If the
* open was part of a committed transaction, so it doesn't
* get undone. However, if the fileid was previously used,
* we'll see a close that may need to get undone. There are
@@ -342,11 +346,12 @@ __dbreg_open_file(dbenv, txn, argp, info)
* which case it should never be opened during recovery.
*/
if ((dbp = dbe->dbp) != NULL) {
- if (dbp->meta_pgno != argp->meta_pgno ||
+ if (argp->opcode == DBREG_REOPEN ||
+ dbp->meta_pgno != argp->meta_pgno ||
argp->name.size == 0 ||
memcmp(dbp->fileid, argp->uid.data,
DB_FILE_ID_LEN) != 0) {
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
(void)__dbreg_revoke_id(dbp, 0,
DB_LOGFILEID_INVALID);
if (F_ISSET(dbp, DB_AM_RECOVER))
@@ -359,8 +364,8 @@ __dbreg_open_file(dbenv, txn, argp, info)
* dbp from an openfiles pass, in which case, what's
* here had better be the same dbp.
*/
- DB_ASSERT(dbe->dbp == dbp);
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ DB_ASSERT(dbenv, dbe->dbp == dbp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
/*
* This is a successful open. We need to record that
@@ -375,7 +380,7 @@ __dbreg_open_file(dbenv, txn, argp, info)
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
reopen:
/*
@@ -402,6 +407,6 @@ reopen:
}
return (__dbreg_do_open(dbenv,
- txn, dblp, argp->uid.data, argp->name.data,
- argp->ftype, argp->fileid, argp->meta_pgno, info, argp->id));
+ txn, dblp, argp->uid.data, argp->name.data, argp->ftype,
+ argp->fileid, argp->meta_pgno, info, argp->id, argp->opcode));
}
diff --git a/db/dbreg/dbreg_stat.c b/db/dbreg/dbreg_stat.c
index dd53b77c3..c19adc688 100644
--- a/db/dbreg/dbreg_stat.c
+++ b/db/dbreg/dbreg_stat.c
@@ -1,19 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: dbreg_stat.c,v 11.48 2004/10/15 16:59:41 bostic Exp $
+ * $Id: dbreg_stat.c,v 12.9 2006/08/24 14:45:32 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
@@ -21,6 +16,28 @@
#include "dbinc/txn.h"
#ifdef HAVE_STATISTICS
+static int __dbreg_print_dblist __P((DB_ENV *, u_int32_t));
+
+/*
+ * __dbreg_stat_print --
+ * Print the dbreg statistics.
+ *
+ * PUBLIC: int __dbreg_stat_print __P((DB_ENV *, u_int32_t));
+ */
+int
+__dbreg_stat_print(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ int ret;
+
+ if (LF_ISSET(DB_STAT_ALL) &&
+ (ret = __dbreg_print_dblist(dbenv, flags)) != 0)
+ return (ret);
+
+ return (0);
+}
+
/*
* __dbreg_print_fname --
* Display the contents of an FNAME structure.
@@ -32,22 +49,26 @@ __dbreg_print_fname(dbenv, fnp)
DB_ENV *dbenv;
FNAME *fnp;
{
+ static const FN fn[] = {
+ { DB_FNAME_DURABLE, "DB_FNAME_DURABLE" },
+ { DB_FNAME_NOTLOGGED, "DB_FNAME_NOTLOGGED" },
+ { 0, NULL }
+ };
+
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB handle FNAME contents:");
STAT_LONG("log ID", fnp->id);
STAT_ULONG("Meta pgno", fnp->meta_pgno);
__db_print_fileid(dbenv, fnp->ufid, "\tFile ID");
STAT_ULONG("create txn", fnp->create_txnid);
- STAT_LONG("durable", fnp->is_durable);
+ __db_prflags(dbenv, NULL, fnp->flags, fn, NULL, "\tFlags");
}
/*
* __dbreg_print_dblist --
* Display the DB_ENV's list of files.
- *
- * PUBLIC: void __dbreg_print_dblist __P((DB_ENV *, u_int32_t));
*/
-void
+static int
__dbreg_print_dblist(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
@@ -64,13 +85,14 @@ __dbreg_print_dblist(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "LOG FNAME list:");
- __db_print_mutex(dbenv, NULL, &lp->fq_mutex, "File name mutex", flags);
+ __mutex_print_debug_single(
+ dbenv, "File name mutex", lp->mtx_filelist, flags);
STAT_LONG("Fid max", lp->fid_max);
- 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)) {
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+ first = 1;
+ SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname) {
if (first) {
first = 0;
__db_msg(dbenv,
@@ -92,6 +114,8 @@ __dbreg_print_dblist(dbenv, flags)
dbp == NULL ? "No DBP" : "DBP", del, P_TO_ULONG(dbp),
(u_long)(dbp == NULL ? 0 : dbp->flags));
}
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
+
+ return (0);
}
#endif
diff --git a/db/dbreg/dbreg_util.c b/db/dbreg/dbreg_util.c
index 6f1cc9297..5037810c1 100644
--- a/db/dbreg/dbreg_util.c
+++ b/db/dbreg/dbreg_util.c
@@ -1,23 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: dbreg_util.c,v 11.50 2004/10/15 16:59:41 bostic Exp $
+ * $Id: dbreg_util.c,v 12.20 2006/09/09 14:28:22 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#include "dbinc/fop.h"
#include "dbinc/log.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
static int __dbreg_check_master __P((DB_ENV *, u_int8_t *, char *));
@@ -40,7 +37,7 @@ __dbreg_add_dbentry(dbenv, dblp, dbp, ndx)
ret = 0;
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+ MUTEX_LOCK(dbenv, dblp->mtx_dbreg);
/*
* Check if we need to grow the table. Note, ndx is 0-based (the
@@ -61,11 +58,11 @@ __dbreg_add_dbentry(dbenv, dblp, dbp, ndx)
dblp->dbentry_cnt = i;
}
- DB_ASSERT(dblp->dbentry[ndx].dbp == NULL);
+ DB_ASSERT(dbenv, dblp->dbentry[ndx].dbp == NULL);
dblp->dbentry[ndx].deleted = dbp == NULL;
dblp->dbentry[ndx].dbp = dbp;
-err: MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+err: MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
return (ret);
}
@@ -73,19 +70,21 @@ err: MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
* __dbreg_rem_dbentry
* Remove an entry from the DB entry table.
*
- * PUBLIC: void __dbreg_rem_dbentry __P((DB_LOG *, int32_t));
+ * PUBLIC: int __dbreg_rem_dbentry __P((DB_LOG *, int32_t));
*/
-void
+int
__dbreg_rem_dbentry(dblp, ndx)
DB_LOG *dblp;
int32_t ndx;
{
- MUTEX_THREAD_LOCK(dblp->dbenv, dblp->mutexp);
+ MUTEX_LOCK(dblp->dbenv, dblp->mtx_dbreg);
if (dblp->dbentry_cnt > ndx) {
dblp->dbentry[ndx].dbp = NULL;
dblp->dbentry[ndx].deleted = 0;
}
- MUTEX_THREAD_UNLOCK(dblp->dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dblp->dbenv, dblp->mtx_dbreg);
+
+ return (0);
}
/*
@@ -110,11 +109,12 @@ __dbreg_log_files(dbenv)
ret = 0;
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
-
- for (fnp = SH_TAILQ_FIRST(&lp->fq, __fname);
- fnp != NULL; fnp = SH_TAILQ_NEXT(fnp, q, __fname)) {
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+ SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname) {
+ /* This id was revoked by a switch in replication master. */
+ if (fnp->id == DB_LOGFILEID_INVALID)
+ continue;
if (fnp->name_off == INVALID_ROFF)
dbtp = NULL;
else {
@@ -136,14 +136,14 @@ __dbreg_log_files(dbenv)
*/
if ((ret = __dbreg_register_log(dbenv,
NULL, &r_unused,
- fnp->is_durable ? 0 : DB_LOG_NOT_DURABLE,
+ F_ISSET(fnp, DB_FNAME_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;
}
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
@@ -173,7 +173,8 @@ __dbreg_close_files(dbenv)
dblp = dbenv->lg_handle;
ret = 0;
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+
+ MUTEX_LOCK(dbenv, dblp->mtx_dbreg);
for (i = 0; i < dblp->dbentry_cnt; i++) {
/*
* We only want to close dbps that recovery opened. Any
@@ -182,6 +183,12 @@ __dbreg_close_files(dbenv)
* 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.
+ *
+ * Any FNAME entries that were marked NOTLOGGED had the
+ * log write fail while they were being closed. Since it's
+ * too late to be logging now we flag that as a failure
+ * so recovery will be run. This will get returned by
+ * __dbreg_revoke_id.
*/
if ((dbp = dblp->dbentry[i].dbp) != NULL) {
/*
@@ -195,7 +202,7 @@ __dbreg_close_files(dbenv)
* we're in this loop anyway--we're in the process of
* making all outstanding dbps invalid.
*/
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
if (F_ISSET(dbp, DB_AM_RECOVER))
t_ret = __db_close(dbp,
NULL, dbp->mpf == NULL ? DB_NOSYNC : 0);
@@ -204,13 +211,52 @@ __dbreg_close_files(dbenv)
dbp, 0, DB_LOGFILEID_INVALID);
if (ret == 0)
ret = t_ret;
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+ MUTEX_LOCK(dbenv, dblp->mtx_dbreg);
}
dblp->dbentry[i].deleted = 0;
dblp->dbentry[i].dbp = NULL;
}
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
+ return (ret);
+}
+
+/*
+ * __dbreg_invalidate_files --
+ * Invalidate files when we change replication roles. Save the
+ * id so that another process will be able to clean up the information
+ * when it notices.
+ *
+ * PUBLIC: int __dbreg_invalidate_files __P((DB_ENV *));
+ */
+int
+__dbreg_invalidate_files(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_LOG *dblp;
+ FNAME *fnp;
+ LOG *lp;
+ int ret;
+
+ /* If we haven't initialized logging, we have nothing to do. */
+ if (!LOGGING_ON(dbenv))
+ return (0);
+
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ ret = 0;
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+ SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname) {
+ if (fnp->id != DB_LOGFILEID_INVALID) {
+ if ((ret = __dbreg_log_close(dbenv,
+ fnp, NULL, DBREG_RCLOSE)) != 0)
+ goto err;
+ fnp->old_id = fnp->id;
+ fnp->id = DB_LOGFILEID_INVALID;
+ }
+ }
+err: MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
@@ -261,7 +307,7 @@ __dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, tryopen)
dblp = dbenv->lg_handle;
COMPQUIET(inc, 0);
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+ MUTEX_LOCK(dbenv, dblp->mtx_dbreg);
/*
* Under XA, a process different than the one issuing DB operations
@@ -277,12 +323,12 @@ __dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, tryopen)
}
/*
- * __dbreg_id_to_fname acquires the region's fq_mutex,
- * which we can't safely acquire while we hold the thread lock.
- * We no longer need it anyway--the dbentry table didn't
- * have what we needed.
+ * __dbreg_id_to_fname acquires the mtx_filelist mutex, which
+ * we can't safely acquire while we hold the thread lock. We
+ * no longer need it anyway--the dbentry table didn't have what
+ * we needed.
*/
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
if (__dbreg_id_to_fname(dblp, ndx, 0, &fname) != 0)
/*
@@ -294,11 +340,11 @@ __dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, tryopen)
return (ENOENT);
/*
- * Note that we're relying on fname not to change, even
- * though we released the mutex that protects it (fq_mutex)
- * inside __dbreg_id_to_fname. This should be a safe
- * assumption, because the other process that has the file
- * open shouldn't be closing it while we're trying to abort.
+ * Note that we're relying on fname not to change, even though
+ * we released the mutex that protects it (mtx_filelist) inside
+ * __dbreg_id_to_fname. This should be a safe assumption, the
+ * other process that has the file open shouldn't be closing it
+ * while we're trying to abort.
*/
name = R_ADDR(&dblp->reginfo, fname->name_off);
@@ -313,7 +359,7 @@ __dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, tryopen)
*/
if ((ret = __dbreg_do_open(dbenv, txn, dblp,
fname->ufid, name, fname->s_type,
- ndx, fname->meta_pgno, NULL, 0)) != 0)
+ ndx, fname->meta_pgno, NULL, 0, DBREG_OPEN)) != 0)
return (ret);
*dbpp = dblp->dbentry[ndx].dbp;
@@ -331,8 +377,20 @@ __dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, tryopen)
/* It's an error if we don't have a corresponding writeable DB. */
if ((*dbpp = dblp->dbentry[ndx].dbp) == NULL)
ret = ENOENT;
+ else
+ /*
+ * If we are in recovery, then set that the file has
+ * been written. It is possible to run recovery,
+ * find all the pages in their post update state
+ * in the OS buffer pool, put a checkpoint in the log
+ * and then crash the system without forcing the pages
+ * to disk. If this is an in-memory file, we may not have
+ * an mpf yet.
+ */
+ if ((*dbpp)->mpf != NULL && (*dbpp)->mpf->mfp != NULL)
+ (*dbpp)->mpf->mfp->file_written = 1;
-err: MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+err: MUTEX_UNLOCK(dbenv, dblp->mtx_dbreg);
return (ret);
}
@@ -361,17 +419,15 @@ __dbreg_id_to_fname(dblp, id, have_lock, fnamep)
ret = -1;
if (!have_lock)
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
- for (fnp = SH_TAILQ_FIRST(&lp->fq, __fname);
- fnp != NULL; fnp = SH_TAILQ_NEXT(fnp, q, __fname)) {
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+ SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname)
if (fnp->id == id) {
*fnamep = fnp;
ret = 0;
break;
}
- }
if (!have_lock)
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
@@ -400,17 +456,15 @@ __dbreg_fid_to_fname(dblp, fid, have_lock, fnamep)
ret = -1;
if (!have_lock)
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
- for (fnp = SH_TAILQ_FIRST(&lp->fq, __fname);
- fnp != NULL; fnp = SH_TAILQ_NEXT(fnp, q, __fname)) {
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+ SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname)
if (memcmp(fnp->ufid, fid, DB_FILE_ID_LEN) == 0) {
*fnamep = fnp;
ret = 0;
break;
}
- }
if (!have_lock)
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
@@ -448,11 +502,12 @@ __dbreg_get_name(dbenv, fid, namep)
* Open files referenced in the log. This is the part of the open that
* is not protected by the thread mutex.
* PUBLIC: int __dbreg_do_open __P((DB_ENV *, DB_TXN *, DB_LOG *, u_int8_t *,
- * PUBLIC: char *, DBTYPE, int32_t, db_pgno_t, void *, u_int32_t));
+ * PUBLIC: char *, DBTYPE, int32_t, db_pgno_t, void *, u_int32_t,
+ * PUBLIC: u_int32_t));
*/
int
__dbreg_do_open(dbenv,
- txn, lp, uid, name, ftype, ndx, meta_pgno, info, id)
+ txn, lp, uid, name, ftype, ndx, meta_pgno, info, id, opcode)
DB_ENV *dbenv;
DB_TXN *txn;
DB_LOG *lp;
@@ -462,12 +517,16 @@ __dbreg_do_open(dbenv,
int32_t ndx;
db_pgno_t meta_pgno;
void *info;
- u_int32_t id;
+ u_int32_t id, opcode;
{
DB *dbp;
u_int32_t cstat, ret_stat;
int ret;
+ char *dname, *fname;
+ cstat = TXN_EXPECTED;
+ fname = name;
+ dname = NULL;
if ((ret = db_create(&dbp, lp->dbenv, 0)) != 0)
return (ret);
@@ -490,9 +549,24 @@ __dbreg_do_open(dbenv,
memcpy(dbp->fileid, uid, DB_FILE_ID_LEN);
dbp->meta_pgno = meta_pgno;
}
- if ((ret = __db_open(dbp, txn, name, NULL,
- ftype, DB_ODDFILESIZE, __db_omode("rw----"), meta_pgno)) == 0) {
+ if (opcode == DBREG_PREOPEN) {
+ dbp->type = ftype;
+ if ((ret = __dbreg_setup(dbp, name, id)) != 0)
+ goto err;
+ MAKE_INMEM(dbp);
+ goto skip_open;
+ }
+
+ if (opcode == DBREG_REOPEN) {
+ MAKE_INMEM(dbp);
+ fname = NULL;
+ dname = name;
+ }
+ if ((ret = __db_open(dbp, txn, fname, dname, ftype,
+ DB_DURABLE_UNKNOWN | DB_ODDFILESIZE,
+ __db_omode(OWNER_RW), meta_pgno)) == 0) {
+skip_open:
/*
* Verify that we are opening the same file that we were
* referring to when we wrote this log record.
@@ -500,7 +574,7 @@ __dbreg_do_open(dbenv,
if ((meta_pgno != PGNO_BASE_MD &&
__dbreg_check_master(dbenv, uid, name) != 0) ||
memcmp(uid, dbp->fileid, DB_FILE_ID_LEN) != 0)
- cstat = TXN_IGNORE;
+ cstat = TXN_UNEXPECTED;
else
cstat = TXN_EXPECTED;
@@ -518,7 +592,7 @@ __dbreg_do_open(dbenv,
ret = __db_txnlist_update(dbenv,
info, id, cstat, NULL, &ret_stat, 1);
-err: if (cstat == TXN_IGNORE)
+err: if (cstat == TXN_UNEXPECTED)
goto not_right;
return (ret);
} else if (ret == ENOENT) {
@@ -547,8 +621,8 @@ __dbreg_check_master(dbenv, uid, name)
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
return (ret);
F_SET(dbp, DB_AM_RECOVER);
- ret = __db_open(dbp,
- NULL, name, NULL, DB_BTREE, 0, __db_omode("rw----"), PGNO_BASE_MD);
+ ret = __db_open(dbp, NULL,
+ name, NULL, DB_BTREE, 0, __db_omode(OWNER_RW), PGNO_BASE_MD);
if (ret == 0 && memcmp(uid, dbp->fileid, DB_FILE_ID_LEN) != 0)
ret = EINVAL;
@@ -569,6 +643,10 @@ __dbreg_check_master(dbenv, uid, name)
* at this point we have no way of knowing whether the log record that incited
* us to call this will be part of a committed transaction.
*
+ * We first revoke any old id this handle may have had. That can happen
+ * if a master becomes a client and then becomes a master again and
+ * there are other processes with valid open handles to this env.
+ *
* PUBLIC: int __dbreg_lazy_id __P((DB *));
*/
int
@@ -585,20 +663,28 @@ __dbreg_lazy_id(dbp)
dbenv = dbp->dbenv;
- DB_ASSERT(IS_REP_MASTER(dbenv));
+ DB_ASSERT(dbenv, IS_REP_MASTER(dbenv));
dbenv = dbp->dbenv;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
fnp = dbp->log_filename;
- /* The fq_mutex protects the FNAME list and id management. */
- MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ /* The mtx_filelist protects the FNAME list and id management. */
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
if (fnp->id != DB_LOGFILEID_INVALID) {
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (0);
}
id = DB_LOGFILEID_INVALID;
+ /*
+ * When we became master we moved the fnp->id to old_id in
+ * every FNAME structure that was open. If our id was changed,
+ * we need to revoke and give back that id.
+ */
+ if (fnp->old_id != DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_revoke_id(dbp, 1, DB_LOGFILEID_INVALID)) != 0)
+ goto err;
if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
goto err;
@@ -612,7 +698,7 @@ __dbreg_lazy_id(dbp)
/*
* All DB related logging routines check the id value *without*
- * holding the fq_mutex to know whether we need to call
+ * holding the mtx_filelist 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
@@ -624,6 +710,6 @@ __dbreg_lazy_id(dbp)
err:
if (ret != 0 && id != DB_LOGFILEID_INVALID)
(void)__dbreg_revoke_id(dbp, 1, id);
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
return (ret);
}
diff --git a/db/dist/Makefile.in b/db/dist/Makefile.in
index cf484b6bf..190103e6b 100644
--- a/db/dist/Makefile.in
+++ b/db/dist/Makefile.in
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 11.264 2004/11/01 21:55:33 mark Exp $
+# $Id: Makefile.in,v 12.79 2006/09/13 14:53:38 mjc Exp $
srcdir= @srcdir@/..
builddir=.
@@ -22,15 +22,15 @@ transform=@program_transform_name@
##################################################
# Paths for standard user-level commands.
##################################################
+AR= @AR@
+CHMOD= @CHMOD@
+CP= @CP@
+LN= @LN@
+MKDIR= @MKDIR@
+RANLIB= @RANLIB@
+RM= @RM@
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@
-strip= @db_cv_path_strip@
+STRIP= @STRIP@
##################################################
# General library information.
@@ -51,14 +51,14 @@ CPPFLAGS= -I$(builddir) -I$(srcdir) @CPPFLAGS@
##################################################
# C API.
##################################################
-CFLAGS= -c $(CPPFLAGS) @CFLAGS@
+CFLAGS= -c $(CPPFLAGS) @CFLAGS@
CC= @MAKEFILE_CC@
CCLINK= @MAKEFILE_CCLINK@ @CFLAGS@
LDFLAGS= @LDFLAGS@
-LIBS= @LIBS@
+LIBS= @LIBSO_LIBS@
TEST_LIBS= @TEST_LIBS@
-LIBSO_LIBS= @LIBSO_LIBS@
+LIBCSO_LIBS= @LIBCSO_LIBS@ @LIBSO_LIBS@
libdb_base= libdb
libdb= $(libdb_base).a
@@ -77,7 +77,7 @@ CXXFLAGS= -c $(CPPFLAGS) @CXXFLAGS@
CXX= @MAKEFILE_CXX@
CXXLINK= @MAKEFILE_CXXLINK@ @CXXFLAGS@
XSOLINK= @MAKEFILE_XSOLINK@ @CXXFLAGS@
-LIBXSO_LIBS= @LIBXSO_LIBS@
+LIBXSO_LIBS= @LIBXSO_LIBS@ @LIBSO_LIBS@
libcxx_base= libdb_cxx
libcxx= $(libcxx_base).a
@@ -93,25 +93,20 @@ libxso_major= $(libcxx_base)-$(LIBMAJOR)@SOSUFFIX@
# Java support is optional and requires shared librarires.
##################################################
CLASSPATH= $(JAVA_CLASSTOP)
-LIBJSO_LIBS= @LIBJSO_LIBS@
+LIBJSO_LIBS= @LIBJSO_LIBS@ @LIBSO_LIBS@
+SWIGCFLAGS= @SWIGCFLAGS@
JAR= @JAR@
JAVAC= env CLASSPATH="$(CLASSPATH)" @JAVAC@
JAVACFLAGS= @JAVACFLAGS@
JAVA_CLASSTOP= ./classes
-JAVA_RPCCLASSTOP=./classes.rpc
JAVA_EXCLASSTOP=./classes.ex
-JAVA_DBREL= com/sleepycat/db
-JAVA_EXREL= com/sleepycat/examples
-JAVA_RPCREL= com/sleepycat/db/rpcserver
JAVA_SRCDIR= $(srcdir)/java/src
-JAVA_EXDIR= $(srcdir)/examples_java/src/com/sleepycat/examples
-JAVA_RPCDIR= $(srcdir)/rpc_server/java
+JAVA_EXDIR= $(srcdir)/examples_java/src
JAVA_SLEEPYCAT= $(srcdir)/java/src/com/sleepycat
libj_jarfile= db.jar
libj_exjarfile= dbexamples.jar
-rpc_jarfile= dbsvc.jar
libjso_base= libdb_java
libjso= $(libjso_base)-$(LIBVERSION)@JMODSUFFIX@
libjso_static= $(libjso_base)-$(LIBVERSION).a
@@ -125,8 +120,8 @@ libjso_g= $(libjso_base)-$(LIBVERSION)_g@JMODSUFFIX@
#
# Tcl support is optional and requires shared libraries.
##################################################
-TCFLAGS= @TCFLAGS@
-LIBTSO_LIBS= @LIBTSO_LIBS@
+TCL_INCLUDE_SPEC= @TCL_INCLUDE_SPEC@
+LIBTSO_LIBS= @LIBTSO_LIBS@ @LIBSO_LIBS@
libtso_base= libdb_tcl
libtso= $(libtso_base)-$(LIBVERSION)@MODSUFFIX@
libtso_static= $(libtso_base)-$(LIBVERSION).a
@@ -158,7 +153,7 @@ 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@
+ bt_compact@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=\
@@ -173,40 +168,49 @@ QUEUE_OBJS=\
QUEUE_VRFY_OBJS=\
qam_verify@o@
REP_OBJS=\
- rep_auto@o@ rep_backup@o@ rep_method@o@ rep_record@o@ rep_region@o@ \
- rep_stat@o@ rep_util@o@
+ rep_auto@o@ rep_backup@o@ rep_elect@o@ rep_log@o@ rep_method@o@ \
+ rep_record@o@ rep_region@o@ rep_stat@o@ rep_util@o@ rep_verify@o@
+REPMGR_OBJS=\
+ getaddrinfo@o@\
+ repmgr_elect@o@ repmgr_method@o@ repmgr_msg@o@ repmgr_net@o@ \
+ repmgr_posix@o@ repmgr_queue@o@ repmgr_sel@o@ repmgr_stat@o@ \
+ repmgr_util@o@
PRINT_OBJS=\
btree_autop@o@ crdel_autop@o@ db_autop@o@ dbreg_autop@o@ \
fileops_autop@o@ hash_autop@o@ qam_autop@o@ rep_autop@o@ \
txn_autop@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_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_setid@o@ db_setlsn@o@ db_shash@o@ \
- db_stati@o@ db_truncate@o@ db_upg@o@ db_upg_opd@o@ dbm@o@ \
- dbreg@o@ dbreg_auto@o@ dbreg_rec@o@ dbreg_stat@o@ dbreg_util@o@ \
- env_file@o@ env_method@o@ env_open@o@ env_recover@o@ \
- env_region@o@ env_stat@o@ fileops_auto@o@ fop_basic@o@ \
+ crdel_auto@o@ crdel_rec@o@ ctime@o@ db@o@ db_am@o@ db_auto@o@ \
+ db_byteorder@o@ db_cam@o@ db_cds@o@ db_clock@o@ db_conv@o@ \
+ db_dispatch@o@ db_dup@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_remove@o@ \
+ db_rename@o@ db_ret@o@ db_salloc@o@ db_setid@o@ db_setlsn@o@ \
+ db_shash@o@ db_stati@o@ db_truncate@o@ db_upg@o@ db_upg_opd@o@ \
+ dbm@o@ dbreg@o@ dbreg_auto@o@ dbreg_rec@o@ dbreg_stat@o@ \
+ dbreg_util@o@ env_config@o@ env_failchk@o@ env_file@o@ \
+ env_method@o@ env_open@o@ env_recover@o@ env_region@o@ \
+ env_register@o@ env_stat@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_id@o@ lock_list@o@ lock_method@o@ \
- lock_region@o@ lock_stat@o@ lock_timer@o@ lock_util@o@ log@o@ \
- log_archive@o@ log_compare@o@ log_get@o@ log_method@o@ \
- log_put@o@ log_stat@o@ mp_alloc@o@ mp_bh@o@ mp_fget@o@ \
- mp_fmethod@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_truncate@o@ os_unlink@o@ sha1@o@ seq_stat@o@ sequence@o@ \
- snprintf@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@
+ lock_deadlock@o@ lock_failchk@o@ lock_id@o@ lock_list@o@ \
+ lock_method@o@ lock_region@o@ lock_stat@o@ lock_timer@o@ \
+ lock_util@o@ log@o@ log_archive@o@ log_compare@o@ log_debug@o@ \
+ log_get@o@ log_method@o@ log_put@o@ log_stat@o@ mkpath@o@ \
+ mp_alloc@o@ mp_bh@o@ mp_fget@o@ mp_fmethod@o@ mp_fopen@o@ \
+ mp_fput@o@ mp_fset@o@ mp_method@o@ mp_mvcc@o@ mp_region@o@ \
+ mp_register@o@ mp_stat@o@ mp_sync@o@ mp_trickle@o@ mut_alloc@o@ \
+ mut_failchk@o@ mut_method@o@ mut_region@o@ mut_stat@o@ os_abs@o@ \
+ os_alloc@o@ os_clock@o@ os_config@o@ os_dir@o@ os_errno@o@ \
+ os_fid@o@ os_flock@o@ os_fsync@o@ os_fzero@o@ os_getenv@o@ \
+ os_handle@o@ os_map@o@ os_method@o@ os_mkdir@o@ os_oflags@o@ \
+ os_open@o@ os_pid@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_truncate@o@ os_uid@o@ os_unlink@o@ \
+ os_yield@o@ seq_stat@o@ sequence@o@ sha1@o@ snprintf@o@ txn@o@ \
+ txn_auto@o@ txn_chkpt@o@ txn_failchk@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@
CXX_OBJS=\
cxx_db@o@ cxx_dbc@o@ cxx_dbt@o@ cxx_env@o@ cxx_except@o@ cxx_lock@o@ \
@@ -225,6 +229,7 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/bind/EntryBinding.java \
$(JAVA_SLEEPYCAT)/bind/RecordNumberBinding.java \
$(JAVA_SLEEPYCAT)/bind/serial/ClassCatalog.java \
+ $(JAVA_SLEEPYCAT)/bind/serial/SerialBase.java \
$(JAVA_SLEEPYCAT)/bind/serial/SerialBinding.java \
$(JAVA_SLEEPYCAT)/bind/serial/SerialInput.java \
$(JAVA_SLEEPYCAT)/bind/serial/SerialOutput.java \
@@ -245,7 +250,10 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/bind/tuple/MarshalledTupleEntry.java \
$(JAVA_SLEEPYCAT)/bind/tuple/MarshalledTupleKeyEntity.java \
$(JAVA_SLEEPYCAT)/bind/tuple/ShortBinding.java \
+ $(JAVA_SLEEPYCAT)/bind/tuple/SortedDoubleBinding.java \
+ $(JAVA_SLEEPYCAT)/bind/tuple/SortedFloatBinding.java \
$(JAVA_SLEEPYCAT)/bind/tuple/StringBinding.java \
+ $(JAVA_SLEEPYCAT)/bind/tuple/TupleBase.java \
$(JAVA_SLEEPYCAT)/bind/tuple/TupleBinding.java \
$(JAVA_SLEEPYCAT)/bind/tuple/TupleInput.java \
$(JAVA_SLEEPYCAT)/bind/tuple/TupleInputBinding.java \
@@ -255,14 +263,14 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/bind/tuple/TupleTupleKeyCreator.java \
$(JAVA_SLEEPYCAT)/bind/tuple/TupleTupleMarshalledBinding.java \
$(JAVA_SLEEPYCAT)/bind/tuple/TupleTupleMarshalledKeyCreator.java \
+ $(JAVA_SLEEPYCAT)/collections/BaseIterator.java \
+ $(JAVA_SLEEPYCAT)/collections/BlockIterator.java \
$(JAVA_SLEEPYCAT)/collections/CurrentTransaction.java \
$(JAVA_SLEEPYCAT)/collections/DataCursor.java \
$(JAVA_SLEEPYCAT)/collections/DataView.java \
- $(JAVA_SLEEPYCAT)/collections/KeyRange.java \
- $(JAVA_SLEEPYCAT)/collections/KeyRangeException.java \
$(JAVA_SLEEPYCAT)/collections/MapEntryParameter.java \
+ $(JAVA_SLEEPYCAT)/collections/MyRangeCursor.java \
$(JAVA_SLEEPYCAT)/collections/PrimaryKeyAssigner.java \
- $(JAVA_SLEEPYCAT)/collections/RangeCursor.java \
$(JAVA_SLEEPYCAT)/collections/StoredCollection.java \
$(JAVA_SLEEPYCAT)/collections/StoredCollections.java \
$(JAVA_SLEEPYCAT)/collections/StoredContainer.java \
@@ -288,6 +296,8 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/db/CacheFileStats.java \
$(JAVA_SLEEPYCAT)/db/CacheStats.java \
$(JAVA_SLEEPYCAT)/db/CheckpointConfig.java \
+ $(JAVA_SLEEPYCAT)/db/CompactConfig.java \
+ $(JAVA_SLEEPYCAT)/db/CompactStats.java \
$(JAVA_SLEEPYCAT)/db/Cursor.java \
$(JAVA_SLEEPYCAT)/db/CursorConfig.java \
$(JAVA_SLEEPYCAT)/db/Database.java \
@@ -300,6 +310,8 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/db/Environment.java \
$(JAVA_SLEEPYCAT)/db/EnvironmentConfig.java \
$(JAVA_SLEEPYCAT)/db/ErrorHandler.java \
+ $(JAVA_SLEEPYCAT)/db/EventHandler.java \
+ $(JAVA_SLEEPYCAT)/db/EventType.java \
$(JAVA_SLEEPYCAT)/db/FeedbackHandler.java \
$(JAVA_SLEEPYCAT)/db/HashStats.java \
$(JAVA_SLEEPYCAT)/db/Hasher.java \
@@ -320,19 +332,33 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/db/LogStats.java \
$(JAVA_SLEEPYCAT)/db/MemoryException.java \
$(JAVA_SLEEPYCAT)/db/MessageHandler.java \
+ $(JAVA_SLEEPYCAT)/db/MultipleNIODataEntry.java \
+ $(JAVA_SLEEPYCAT)/db/MultipleKeyNIODataEntry.java \
+ $(JAVA_SLEEPYCAT)/db/MultipleRecnoNIODataEntry.java \
$(JAVA_SLEEPYCAT)/db/MultipleDataEntry.java \
$(JAVA_SLEEPYCAT)/db/MultipleEntry.java \
$(JAVA_SLEEPYCAT)/db/MultipleKeyDataEntry.java \
$(JAVA_SLEEPYCAT)/db/MultipleRecnoDataEntry.java \
+ $(JAVA_SLEEPYCAT)/db/MutexStats.java \
$(JAVA_SLEEPYCAT)/db/OperationStatus.java \
$(JAVA_SLEEPYCAT)/db/PanicHandler.java \
$(JAVA_SLEEPYCAT)/db/PreparedTransaction.java \
$(JAVA_SLEEPYCAT)/db/QueueStats.java \
$(JAVA_SLEEPYCAT)/db/RecordNumberAppender.java \
$(JAVA_SLEEPYCAT)/db/RecoveryOperation.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationConfig.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationDuplicateMasterException.java \
$(JAVA_SLEEPYCAT)/db/ReplicationHandleDeadException.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationHoldElectionException.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationHostAddress.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationJoinFailureException.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationLockoutException.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationManagerAckPolicy.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationManagerStartPolicy.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationSiteUnavailableException.java \
$(JAVA_SLEEPYCAT)/db/ReplicationStats.java \
$(JAVA_SLEEPYCAT)/db/ReplicationStatus.java \
+ $(JAVA_SLEEPYCAT)/db/ReplicationTimeoutType.java \
$(JAVA_SLEEPYCAT)/db/ReplicationTransport.java \
$(JAVA_SLEEPYCAT)/db/RunRecoveryException.java \
$(JAVA_SLEEPYCAT)/db/SecondaryConfig.java \
@@ -347,8 +373,8 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/db/TransactionConfig.java \
$(JAVA_SLEEPYCAT)/db/TransactionStats.java \
$(JAVA_SLEEPYCAT)/db/VerifyConfig.java \
+ $(JAVA_SLEEPYCAT)/db/VersionMismatchException.java \
$(JAVA_SLEEPYCAT)/db/internal/Db.java \
- $(JAVA_SLEEPYCAT)/db/internal/DbClient.java \
$(JAVA_SLEEPYCAT)/db/internal/DbConstants.java \
$(JAVA_SLEEPYCAT)/db/internal/DbEnv.java \
$(JAVA_SLEEPYCAT)/db/internal/DbLock.java \
@@ -365,8 +391,12 @@ JAVA_DBSRCS=\
$(JAVA_SLEEPYCAT)/util/FastInputStream.java \
$(JAVA_SLEEPYCAT)/util/FastOutputStream.java \
$(JAVA_SLEEPYCAT)/util/IOExceptionWrapper.java \
+ $(JAVA_SLEEPYCAT)/util/PackedInteger.java \
$(JAVA_SLEEPYCAT)/util/RuntimeExceptionWrapper.java \
- $(JAVA_SLEEPYCAT)/util/UtfOps.java
+ $(JAVA_SLEEPYCAT)/util/UtfOps.java \
+ $(JAVA_SLEEPYCAT)/util/keyrange/KeyRange.java \
+ $(JAVA_SLEEPYCAT)/util/keyrange/KeyRangeException.java \
+ $(JAVA_SLEEPYCAT)/util/keyrange/RangeCursor.java
JAVA_EXSRCS=\
$(JAVA_EXDIR)/collections/access/AccessExample.java \
@@ -452,6 +482,7 @@ JAVA_EXSRCS=\
$(JAVA_EXDIR)/db/AccessExample.java \
$(JAVA_EXDIR)/db/BtRecExample.java \
$(JAVA_EXDIR)/db/BulkAccessExample.java \
+ $(JAVA_EXDIR)/db/BulkAccessNIOExample.java \
$(JAVA_EXDIR)/db/EnvExample.java \
$(JAVA_EXDIR)/db/GettingStarted/ExampleDatabaseLoad.java \
$(JAVA_EXDIR)/db/GettingStarted/ExampleDatabaseRead.java \
@@ -463,7 +494,14 @@ JAVA_EXSRCS=\
$(JAVA_EXDIR)/db/LockExample.java \
$(JAVA_EXDIR)/db/RPCExample.java \
$(JAVA_EXDIR)/db/SequenceExample.java \
- $(JAVA_EXDIR)/db/TpcbExample.java
+ $(JAVA_EXDIR)/db/TpcbExample.java \
+ $(JAVA_EXDIR)/db/repquote/RepConfig.java \
+ $(JAVA_EXDIR)/db/repquote/RepQuoteEnvironment.java \
+ $(JAVA_EXDIR)/db/repquote/RepQuoteExample.java \
+ $(JAVA_EXDIR)/db/txn/DBWriter.java \
+ $(JAVA_EXDIR)/db/txn/PayloadData.java \
+ $(JAVA_EXDIR)/db/txn/TxnGuide.java \
+ $(JAVA_EXDIR)/db/txn/TxnGuideInMemory.java
TCL_OBJS=\
tcl_compat@o@ tcl_db@o@ tcl_db_pkg@o@ tcl_dbcursor@o@ tcl_env@o@ \
@@ -482,162 +520,10 @@ RPC_CXXSRV_OBJS=\
db_server_cxxproc@o@ db_server_cxxutil@o@ db_server_svc@o@ \
gen_db_server@o@
-RPC_JAVASRV_SRCS=\
- $(JAVA_RPCDIR)/AssociateCallbacks.java \
- $(JAVA_RPCDIR)/Dispatcher.java \
- $(JAVA_RPCDIR)/FreeList.java \
- $(JAVA_RPCDIR)/JoinCursorAdapter.java \
- $(JAVA_RPCDIR)/LocalIterator.java \
- $(JAVA_RPCDIR)/RpcDb.java \
- $(JAVA_RPCDIR)/RpcDbEnv.java \
- $(JAVA_RPCDIR)/RpcDbTxn.java \
- $(JAVA_RPCDIR)/RpcDbc.java \
- $(JAVA_RPCDIR)/Server.java \
- $(JAVA_RPCDIR)/Timer.java \
- $(JAVA_RPCDIR)/Util.java \
- $(JAVA_RPCDIR)/gen/ServerStubs.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
+ db_archive db_checkpoint db_deadlock db_dump db_hotbackup \
+ db_load db_printlog db_recover db_stat db_upgrade db_verify
##################################################
# List of files installed into the library directory.
@@ -674,7 +560,7 @@ LIB_INSTALL_FILE_LIST=\
##################################################
all: @BUILD_TARGET@
-install-strip install: all @INSTALL_TARGET@
+install: all @INSTALL_TARGET@
##################################################
# Library and standard utilities build.
@@ -686,33 +572,33 @@ $(libdb): $(DEF_LIB)
# Real static C library.
$(libdb_version): $(C_OBJS)
- $(ar) cr $@ $(C_OBJS)
- test ! -f $(ranlib) || $(ranlib) $@
- $(rm) -f $(libdb)
- $(ln) -s $(libdb_version) $(libdb)
+ $(AR) cr $@ $(C_OBJS)
+ test "$(RANLIB)" = "none" || $(RANLIB) $@
+ $(RM) -f $(libdb)
+ $(LN) -s $(libdb_version) $(libdb)
# Shared C library.
$(libso_target): $(C_OBJS)
- $(SOLINK) $(SOFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(LIBSO_LIBS)
- $(rm) -f $(libdb)
- $(ln) -s .libs/$(libdb_version) $(libdb)
+ $(SOLINK) $(SOFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(LIBCSO_LIBS)
+ $(RM) -f $(libdb)
+ $(LN) -s .libs/$(libdb_version) $(libdb)
# Static C++ library named libdb_cxx.a.
$(libcxx): $(DEF_LIB_CXX)
# Real static C++ library.
$(libcxx_version): $(CXX_OBJS) $(C_OBJS)
- $(ar) cr $@ $(CXX_OBJS) $(C_OBJS)
- test ! -f $(ranlib) || $(ranlib) $@
- $(rm) -f $(libcxx)
- $(ln) -s $(libcxx_version) $(libcxx)
+ $(AR) cr $@ $(CXX_OBJS) $(C_OBJS)
+ test "$(RANLIB)" = "none" || $(RANLIB) $@
+ $(RM) -f $(libcxx)
+ $(LN) -s $(libcxx_version) $(libcxx)
# Shared C++ library.
$(libxso_target): $(CXX_OBJS) $(C_OBJS)
$(XSOLINK) $(SOFLAGS) $(LDFLAGS) \
-o $@ $(CXX_OBJS) $(C_OBJS) $(LIBXSO_LIBS)
- $(rm) -f $(libcxx)
- $(ln) -s .libs/$(libcxx_version) $(libcxx)
+ $(RM) -f $(libcxx)
+ $(LN) -s .libs/$(libcxx_version) $(libcxx)
# Shared Java library.
$(libjso_target): $(JAVA_OBJS) $(C_OBJS)
@@ -732,26 +618,19 @@ java: $(libj_jarfile) $(libj_exjarfile)
$(libj_jarfile): $(JAVA_DBSRCS)
@test -d $(JAVA_CLASSTOP) || \
- ($(mkdir) -p $(JAVA_CLASSTOP) && $(chmod) $(dmode) $(JAVA_CLASSTOP))
+ ($(MKDIR) -p $(JAVA_CLASSTOP) && \
+ $(CHMOD) $(dmode) $(JAVA_CLASSTOP))
$(JAVAC) -d $(JAVA_CLASSTOP) $(JAVACFLAGS) $(JAVA_DBSRCS)
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))
+ ($(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
##################################################
@@ -765,14 +644,6 @@ berkeley_db_cxxsvc: $(RPC_CXXSRV_OBJS) util_log@o@ $(DEF_LIB_CXX)
$(RPC_CXXSRV_OBJS) util_log@o@ $(DEF_LIB_CXX) $(LIBS)
$(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.Server \$$@ >> $@
- chmod +x $@
-
db_archive: db_archive@o@ util_sig@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) \
db_archive@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
@@ -797,6 +668,11 @@ db_dump185: db_dump185@o@ @REPLACEMENT_OBJS@
$(CCLINK) -o $@ $(LDFLAGS) db_dump185@o@ @REPLACEMENT_OBJS@ $(DB185LIB)
$(POSTLINK) $@
+db_hotbackup: db_hotbackup@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_hotbackup@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
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)
@@ -837,118 +713,119 @@ uninstall: uninstall_include uninstall_lib uninstall_utilities uninstall_docs
install_setup:
@test -d $(DESTDIR)$(prefix) || \
- ($(mkdir) -p $(DESTDIR)$(prefix) && \
- $(chmod) $(dmode) $(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: $(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)
+ ($(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 $(DESTDIR)$(includedir) && $(rm) -f $(INCDOT)
+ @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)
+ ($(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 $(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)) || exit 0
@(test -f $(libj_jarfile) && \
- $(cp) $(libj_jarfile) $(DESTDIR)$(libdir) && \
- $(chmod) $(fmode) $(DESTDIR)$(libdir)/$(libj_jarfile)) || true
+ $(CP) $(libj_jarfile) $(DESTDIR)$(libdir) && \
+ $(CHMOD) $(fmode) $(DESTDIR)$(libdir)/$(libj_jarfile)) || exit 0
uninstall_lib:
- @cd $(DESTDIR)$(libdir) && $(rm) -f $(LIB_INSTALL_FILE_LIST)
+ @cd $(DESTDIR)$(libdir) && $(RM) -f $(LIB_INSTALL_FILE_LIST)
install_utilities:
@echo "Installing DB utilities: $(DESTDIR)$(bindir) ..."
@test -d $(DESTDIR)$(bindir) || \
- ($(mkdir) -p $(DESTDIR)$(bindir) && \
- $(chmod) $(dmode) $(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; \
+ test -f $$i.exe && i=$$i.exe || i=$$i; \
+ $(RM) -f $(DESTDIR)$(bindir)/$$i; \
$(INSTALLER) $$i $(DESTDIR)$(bindir)/$$i; \
- test -f $(strip) && $(strip) $(DESTDIR)$(bindir)/$$i || true; \
- $(chmod) $(emode) $(DESTDIR)$(bindir)/$$i; \
+ test "$(STRIP)" = "none" || $(STRIP) $(DESTDIR)$(bindir)/$$i; \
+ $(CHMOD) $(emode) $(DESTDIR)$(bindir)/$$i; \
done
uninstall_utilities:
@(cd $(DESTDIR)$(bindir); for i in $(UTIL_PROGS); do \
- $(rm) -f $$i $$i.exe; \
+ $(RM) -f $$i $$i.exe; \
done)
-DOCLIST=api_c api_cxx api_tcl collections gsg images index.html java ref \
- sleepycat utility
+DOCLIST=api_c api_cxx api_tcl collections gsg gsg_db_rep gsg_txn images \
+ index.html java license ref utility
install_docs:
@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)/
+ ($(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 $(DESTDIR)$(DOCLIST)
+ @cd $(DESTDIR)$(docdir) && $(RM) -rf $(DOCLIST)
##################################################
# Remaining standard Makefile targets.
##################################################
CLEAN_LIST=\
- bench_001 berkeley_db_cxxsvc berkeley_db_javasvc berkeley_db_svc \
- db_dump185 db_perf dbs ex_access ex_apprec ex_btrec ex_dbclient \
- ex_env ex_lock ex_mpool ex_repquote ex_sequence ex_thread \
- ex_tpcb example_database_load example_database_read excxx_access \
+ TxnGuide TxnGuideInMemory bench_001 berkeley_db_cxxsvc \
+ berkeley_db_svc db_dump185 db_perf db_reptest dbs ex_access \
+ ex_apprec ex_btrec ex_dbclient ex_env ex_lock ex_mpool \
+ ex_rep_base ex_rep_mgr ex_sequence ex_thread ex_tpcb \
+ example_database_load example_database_read excxx_access \
excxx_btrec excxx_env excxx_example_database_load \
excxx_example_database_read excxx_lock excxx_mpool \
- excxx_sequence excxx_tpcb
+ excxx_repquote excxx_sequence excxx_tpcb txn_guide \
+ txn_guide_inmemory
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.* PARALLEL_TESTDIR.*
- $(rm) -rf RUN_LOG RUNQUEUE TESTDIR TESTDIR.A
- $(rm) -rf TEST.LIST logtrack_seen.db tm .libs $(LIB_INSTALL_FILE_LIST)
+ $(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 tags *@o@ *.o *.o.lock *.lo core *.core
+ $(RM) -rf ALL.OUT.* PARALLEL_TESTDIR.*
+ $(RM) -rf RUN_LOG RUNQUEUE TESTDIR TESTDIR.A TEST.LIST
+ $(RM) -rf logtrack_seen.db tm .libs $(LIB_INSTALL_FILE_LIST)
REALCLEAN_LIST=\
- Makefile confdefs.h config.cache config.log config.status \
+ Makefile clib_port.h confdefs.h config.cache config.log config.status \
configure.lineno db.h db185_int.h db_185.h db_config.h \
db_cxx.h db_int.h db_int_def.h include.tcl \
db_server.h db_server_clnt.c db_server_svc.c db_server_xdr.c \
gen_db_server.c win_db.h
distclean maintainer-clean realclean: clean
- $(rm) -rf $(REALCLEAN_LIST)
- $(rm) -rf libtool
+ $(RM) -rf $(REALCLEAN_LIST)
+ $(RM) -rf libtool
check depend dvi info obj TAGS:
- @echo "$@: make target not supported" && true
+ @echo "make: $@ target not available"
dist rpm rpmbuild:
- @echo "$@: make target not supported" && false
+ @echo "make: $@ target not available" && exit 1
##################################################
# Multi-threaded testers, benchmarks.
@@ -1038,6 +915,67 @@ db_perf: $(DBPERF_OBJS) $(DEF_LIB)
$(LDFLAGS) $(DBPERF_OBJS) $(DEF_LIB) $(TEST_LIBS) $(LIBS)
$(POSTLINK) $@
+db_reptest@o@: $(srcdir)/test_rep/db_reptest.c
+ $(CC) $(CFLAGS) $?
+reptest_accept@o@: $(srcdir)/test_rep/reptest_accept.c
+ $(CC) $(CFLAGS) $?
+reptest_client@o@: $(srcdir)/test_rep/reptest_client.c
+ $(CC) $(CFLAGS) $?
+reptest_config@o@: $(srcdir)/test_rep/reptest_config.c
+ $(CC) $(CFLAGS) $?
+reptest_dbs@o@: $(srcdir)/test_rep/reptest_dbs.c
+ $(CC) $(CFLAGS) $?
+reptest_debug@o@: $(srcdir)/test_rep/reptest_debug.c
+ $(CC) $(CFLAGS) $?
+reptest_elect@o@: $(srcdir)/test_rep/reptest_elect.c
+ $(CC) $(CFLAGS) $?
+reptest_env@o@: $(srcdir)/test_rep/reptest_env.c
+ $(CC) $(CFLAGS) $?
+reptest_exec@o@: $(srcdir)/test_rep/reptest_exec.c
+ $(CC) $(CFLAGS) $?
+reptest_file@o@: $(srcdir)/test_rep/reptest_file.c
+ $(CC) $(CFLAGS) $?
+reptest_key@o@: $(srcdir)/test_rep/reptest_key.c
+ $(CC) $(CFLAGS) $?
+reptest_master@o@: $(srcdir)/test_rep/reptest_master.c
+ $(CC) $(CFLAGS) $?
+reptest_misc@o@: $(srcdir)/test_rep/reptest_misc.c
+ $(CC) $(CFLAGS) $?
+reptest_msg_thread@o@: $(srcdir)/test_rep/reptest_msg_thread.c
+ $(CC) $(CFLAGS) $?
+reptest_op@o@: $(srcdir)/test_rep/reptest_op.c
+ $(CC) $(CFLAGS) $?
+reptest_parse@o@: $(srcdir)/test_rep/reptest_parse.c
+ $(CC) $(CFLAGS) $?
+reptest_send@o@: $(srcdir)/test_rep/reptest_send.c
+ $(CC) $(CFLAGS) $?
+reptest_site@o@: $(srcdir)/test_rep/reptest_site.c
+ $(CC) $(CFLAGS) $?
+reptest_socket@o@: $(srcdir)/test_rep/reptest_socket.c
+ $(CC) $(CFLAGS) $?
+reptest_spawn@o@: $(srcdir)/test_rep/reptest_spawn.c
+ $(CC) $(CFLAGS) $?
+reptest_thread@o@: $(srcdir)/test_rep/reptest_thread.c
+ $(CC) $(CFLAGS) $?
+reptest_txn@o@: $(srcdir)/test_rep/reptest_txn.c
+ $(CC) $(CFLAGS) $?
+reptest_util@o@: $(srcdir)/test_rep/reptest_util.c
+ $(CC) $(CFLAGS) $?
+DBREPTEST_OBJS=\
+ db_reptest@o@ perf_rand@o@ reptest_accept@o@ reptest_client@o@ \
+ reptest_config@o@ reptest_dbs@o@ reptest_debug@o@ \
+ reptest_elect@o@ reptest_env@o@ reptest_exec@o@ reptest_file@o@ \
+ reptest_key@o@ reptest_master@o@ reptest_misc@o@ \
+ reptest_msg_thread@o@ reptest_op@o@ reptest_parse@o@ \
+ reptest_send@o@ reptest_site@o@ reptest_socket@o@ \
+ reptest_spawn@o@ reptest_thread@o@ reptest_txn@o@ \
+ reptest_util@o@
+
+db_reptest: $(DBREPTEST_OBJS) $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) $(DBREPTEST_OBJS) $(DEF_LIB) $(TEST_LIBS) $(LIBS)
+ $(POSTLINK) $@
+
tm@o@: $(srcdir)/mutex/tm.c
$(CC) $(CFLAGS) $?
tm: tm@o@ $(DEF_LIB)
@@ -1063,9 +1001,12 @@ ex_apprec@o@: $(srcdir)/examples_c/ex_apprec/ex_apprec.c
$(CC) $(CFLAGS) $?
ex_apprec_auto@o@: $(srcdir)/examples_c/ex_apprec/ex_apprec_auto.c
$(CC) $(CFLAGS) $?
+ex_apprec_autop@o@: $(srcdir)/examples_c/ex_apprec/ex_apprec_autop.c
+ $(CC) $(CFLAGS) $?
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_OBJS=\
+ ex_apprec@o@ ex_apprec_auto@o@ ex_apprec_autop@o@ ex_apprec_rec@o@
ex_apprec: $(EX_APPREC_OBJS) $(DEF_LIB)
$(CCLINK) -o $@ \
$(LDFLAGS) $(EX_APPREC_OBJS) $(DEF_LIB) $(TEST_LIBS) $(LIBS)
@@ -1100,21 +1041,28 @@ ex_mpool: ex_mpool@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) ex_mpool@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-ex_rq_client@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_client.c
+rep_base@o@: $(srcdir)/examples_c/ex_rep/base/rep_base.c
$(CC) $(CFLAGS) $?
-ex_rq_main@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_main.c
+rep_common@o@: $(srcdir)/examples_c/ex_rep/common/rep_common.c
$(CC) $(CFLAGS) $?
-ex_rq_master@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_master.c
+rep_msg@o@: $(srcdir)/examples_c/ex_rep/base/rep_msg.c
$(CC) $(CFLAGS) $?
-ex_rq_net@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_net.c
+rep_net@o@: $(srcdir)/examples_c/ex_rep/base/rep_net.c
$(CC) $(CFLAGS) $?
-ex_rq_util@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_util.c
+EX_REP_BASE_OBJS=\
+ rep_base@o@ rep_common@o@ rep_msg@o@ rep_net@o@
+ex_rep_base: $(EX_REP_BASE_OBJS) $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) $(EX_REP_BASE_OBJS) $(DEF_LIB) $(TEST_LIBS) $(LIBS)
+ $(POSTLINK) $@
+
+rep_mgr@o@: $(srcdir)/examples_c/ex_rep/mgr/rep_mgr.c
$(CC) $(CFLAGS) $?
-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)
+EX_REP_MGR_OBJS=\
+ rep_common@o@ rep_mgr@o@
+ex_rep_mgr: $(EX_REP_MGR_OBJS) $(DEF_LIB)
$(CCLINK) -o $@ \
- $(LDFLAGS) $(EX_RQ_OBJS) $(DEF_LIB) $(TEST_LIBS) $(LIBS)
+ $(LDFLAGS) $(EX_REP_MGR_OBJS) $(DEF_LIB) $(TEST_LIBS) $(LIBS)
$(POSTLINK) $@
ex_sequence@o@: $(srcdir)/examples_c/ex_sequence.c
@@ -1156,6 +1104,18 @@ example_database_read: example_database_read@o@ gettingstarted_common@o@ \
example_database_read@o@ gettingstarted_common@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
+txn_guide_inmemory@o@: $(srcdir)/examples_c/txn_guide/txn_guide_inmemory.c
+ $(CC) $(CFLAGS) $?
+txn_guide_inmemory: txn_guide_inmemory@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) txn_guide_inmemory@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+txn_guide@o@: $(srcdir)/examples_c/txn_guide/txn_guide.c
+ $(CC) $(CFLAGS) $?
+txn_guide: txn_guide@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) txn_guide@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
##################################################
# Example programs for C++.
##################################################
@@ -1189,6 +1149,15 @@ excxx_mpool: MpoolExample@o@ $(DEF_LIB_CXX)
$(CXXLINK) -o $@ $(LDFLAGS) MpoolExample@o@ $(DEF_LIB_CXX) $(LIBS)
$(POSTLINK) $@
+RepQuoteExample@o@: $(srcdir)/examples_cxx/excxx_repquote/RepQuoteExample.cpp
+ $(CXX) -I$(srcdir)/examples_cxx/excxx_repquote $(CXXFLAGS) $?
+RepConfigInfo@o@: $(srcdir)/examples_cxx/excxx_repquote/RepConfigInfo.cpp
+ $(CXX) -I$(srcdir)/examples_cxx/excxx_repquote $(CXXFLAGS) $?
+excxx_repquote: RepQuoteExample@o@ RepConfigInfo@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) \
+ RepQuoteExample@o@ RepConfigInfo@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
SequenceExample@o@: $(srcdir)/examples_cxx/SequenceExample.cpp
$(CXX) $(CXXFLAGS) $?
excxx_sequence: SequenceExample@o@ $(DEF_LIB_CXX)
@@ -1220,6 +1189,18 @@ excxx_example_database_read: \
excxx_example_database_read@o@ MyDb@o@ $(DEF_LIB_CXX) $(LIBS)
$(POSTLINK) $@
+TxnGuideInMemory@o@: $(srcdir)/examples_cxx/txn_guide/TxnGuideInMemory.cpp
+ $(CXX) $(CXXFLAGS) $?
+TxnGuideInMemory: TxnGuideInMemory@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) TxnGuideInMemory@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+TxnGuide@o@: $(srcdir)/examples_cxx/txn_guide/TxnGuide.cpp
+ $(CXX) $(CXXFLAGS) $?
+TxnGuide: TxnGuide@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) TxnGuide@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
##################################################
# C API build rules.
##################################################
@@ -1255,6 +1236,8 @@ bt_split@o@: $(srcdir)/btree/bt_split.c
$(CC) $(CFLAGS) $?
bt_stat@o@: $(srcdir)/btree/bt_stat.c
$(CC) $(CFLAGS) $?
+bt_compact@o@: $(srcdir)/btree/bt_compact.c
+ $(CC) $(CFLAGS) $?
bt_upgrade@o@: $(srcdir)/btree/bt_upgrade.c
$(CC) $(CFLAGS) $?
bt_verify@o@: $(srcdir)/btree/bt_verify.c
@@ -1287,6 +1270,10 @@ db_byteorder@o@: $(srcdir)/common/db_byteorder.c
$(CC) $(CFLAGS) $?
db_cam@o@: $(srcdir)/db/db_cam.c
$(CC) $(CFLAGS) $?
+db_cds@o@: $(srcdir)/db/db_cds.c
+ $(CC) $(CFLAGS) $?
+db_clock@o@: $(srcdir)/common/db_clock.c
+ $(CC) $(CFLAGS) $?
db_conv@o@: $(srcdir)/db/db_conv.c
$(CC) $(CFLAGS) $?
db_dispatch@o@: $(srcdir)/db/db_dispatch.c
@@ -1363,6 +1350,10 @@ dbreg_stat@o@: $(srcdir)/dbreg/dbreg_stat.c
$(CC) $(CFLAGS) $?
dbreg_util@o@: $(srcdir)/dbreg/dbreg_util.c
$(CC) $(CFLAGS) $?
+env_config@o@: $(srcdir)/env/env_config.c
+ $(CC) $(CFLAGS) $?
+env_failchk@o@: $(srcdir)/env/env_failchk.c
+ $(CC) $(CFLAGS) $?
env_file@o@: $(srcdir)/env/env_file.c
$(CC) $(CFLAGS) $?
env_method@o@: $(srcdir)/env/env_method.c
@@ -1373,6 +1364,8 @@ env_recover@o@: $(srcdir)/env/env_recover.c
$(CC) $(CFLAGS) $?
env_region@o@: $(srcdir)/env/env_region.c
$(CC) $(CFLAGS) $?
+env_register@o@: $(srcdir)/env/env_register.c
+ $(CC) $(CFLAGS) $?
env_stat@o@: $(srcdir)/env/env_stat.c
$(CC) $(CFLAGS) $?
fileops_auto@o@: $(srcdir)/fileops/fileops_auto.c
@@ -1425,6 +1418,8 @@ lock@o@: $(srcdir)/lock/lock.c
$(CC) $(CFLAGS) $?
lock_deadlock@o@:$(srcdir)/lock/lock_deadlock.c
$(CC) $(CFLAGS) $?
+lock_failchk@o@:$(srcdir)/lock/lock_failchk.c
+ $(CC) $(CFLAGS) $?
lock_id@o@:$(srcdir)/lock/lock_id.c
$(CC) $(CFLAGS) $?
lock_list@o@:$(srcdir)/lock/lock_list.c
@@ -1445,6 +1440,8 @@ log_archive@o@: $(srcdir)/log/log_archive.c
$(CC) $(CFLAGS) $?
log_compare@o@: $(srcdir)/log/log_compare.c
$(CC) $(CFLAGS) $?
+log_debug@o@: $(srcdir)/log/log_debug.c
+ $(CC) $(CFLAGS) $?
log_get@o@: $(srcdir)/log/log_get.c
$(CC) $(CFLAGS) $?
log_method@o@: $(srcdir)/log/log_method.c
@@ -1453,6 +1450,8 @@ log_put@o@: $(srcdir)/log/log_put.c
$(CC) $(CFLAGS) $?
log_stat@o@: $(srcdir)/log/log_stat.c
$(CC) $(CFLAGS) $?
+mkpath@o@: $(srcdir)/common/mkpath.c
+ $(CC) $(CFLAGS) $?
mp_alloc@o@: $(srcdir)/mp/mp_alloc.c
$(CC) $(CFLAGS) $?
mp_bh@o@: $(srcdir)/mp/mp_bh.c
@@ -1469,6 +1468,8 @@ mp_fset@o@: $(srcdir)/mp/mp_fset.c
$(CC) $(CFLAGS) $?
mp_method@o@: $(srcdir)/mp/mp_method.c
$(CC) $(CFLAGS) $?
+mp_mvcc@o@: $(srcdir)/mp/mp_mvcc.c
+ $(CC) $(CFLAGS) $?
mp_region@o@: $(srcdir)/mp/mp_region.c
$(CC) $(CFLAGS) $?
mp_register@o@: $(srcdir)/mp/mp_register.c
@@ -1481,16 +1482,24 @@ mp_trickle@o@: $(srcdir)/mp/mp_trickle.c
$(CC) $(CFLAGS) $?
mt19937db@o@: $(srcdir)/crypto/mersenne/mt19937db.c
$(CC) $(CFLAGS) $?
+mut_alloc@o@: $(srcdir)/mutex/mut_alloc.c
+ $(CC) $(CFLAGS) $?
+mut_failchk@o@: $(srcdir)/mutex/mut_failchk.c
+ $(CC) $(CFLAGS) $?
mut_fcntl@o@: $(srcdir)/mutex/mut_fcntl.c
$(CC) $(CFLAGS) $?
+mut_method@o@: $(srcdir)/mutex/mut_method.c
+ $(CC) $(CFLAGS) $?
mut_pthread@o@: $(srcdir)/mutex/mut_pthread.c
$(CC) $(CFLAGS) $?
+mut_region@o@: $(srcdir)/mutex/mut_region.c
+ $(CC) $(CFLAGS) $?
+mut_stat@o@: $(srcdir)/mutex/mut_stat.c
+ $(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
@@ -1505,9 +1514,13 @@ os_errno@o@: $(srcdir)/@OSDIR@/os_errno.c
$(CC) $(CFLAGS) $?
os_fid@o@: $(srcdir)/@OSDIR@/os_fid.c
$(CC) $(CFLAGS) $?
+os_flock@o@: $(srcdir)/@OSDIR@/os_flock.c
+ $(CC) $(CFLAGS) $?
os_fsync@o@: $(srcdir)/@OSDIR@/os_fsync.c
$(CC) $(CFLAGS) $?
-os_id@o@: $(srcdir)/os/os_id.c
+os_fzero@o@: $(srcdir)/os/os_fzero.c
+ $(CC) $(CFLAGS) $?
+os_getenv@o@: $(srcdir)/@OSDIR@/os_getenv.c
$(CC) $(CFLAGS) $?
os_handle@o@: $(srcdir)/@OSDIR@/os_handle.c
$(CC) $(CFLAGS) $?
@@ -1515,10 +1528,14 @@ os_map@o@: $(srcdir)/@OSDIR@/os_map.c
$(CC) $(CFLAGS) $?
os_method@o@: $(srcdir)/os/os_method.c
$(CC) $(CFLAGS) $?
+os_mkdir@o@: $(srcdir)/os/os_mkdir.c
+ $(CC) $(CFLAGS) $?
os_oflags@o@: $(srcdir)/os/os_oflags.c
$(CC) $(CFLAGS) $?
os_open@o@: $(srcdir)/@OSDIR@/os_open.c
$(CC) $(CFLAGS) $?
+os_pid@o@: $(srcdir)/os/os_pid.c
+ $(CC) $(CFLAGS) $?
os_region@o@: $(srcdir)/os/os_region.c
$(CC) $(CFLAGS) $?
os_rename@o@: $(srcdir)/@OSDIR@/os_rename.c
@@ -1541,8 +1558,12 @@ os_tmpdir@o@: $(srcdir)/os/os_tmpdir.c
$(CC) $(CFLAGS) $?
os_truncate@o@: $(srcdir)/@OSDIR@/os_truncate.c
$(CC) $(CFLAGS) $?
+os_uid@o@: $(srcdir)/os/os_uid.c
+ $(CC) $(CFLAGS) $?
os_unlink@o@: $(srcdir)/os/os_unlink.c
$(CC) $(CFLAGS) $?
+os_yield@o@: $(srcdir)/os/os_yield.c
+ $(CC) $(CFLAGS) $?
qam@o@: $(srcdir)/qam/qam.c
$(CC) $(CFLAGS) $?
qam_auto@o@: $(srcdir)/qam/qam_auto.c
@@ -1573,6 +1594,10 @@ rep_autop@o@: $(srcdir)/rep/rep_autop.c
$(CC) $(CFLAGS) $?
rep_backup@o@: $(srcdir)/rep/rep_backup.c
$(CC) $(CFLAGS) $?
+rep_elect@o@: $(srcdir)/rep/rep_elect.c
+ $(CC) $(CFLAGS) $?
+rep_log@o@: $(srcdir)/rep/rep_log.c
+ $(CC) $(CFLAGS) $?
rep_method@o@: $(srcdir)/rep/rep_method.c
$(CC) $(CFLAGS) $?
rep_record@o@: $(srcdir)/rep/rep_record.c
@@ -1585,6 +1610,26 @@ rep_stat@o@: $(srcdir)/rep/rep_stat.c
$(CC) $(CFLAGS) $?
rep_util@o@: $(srcdir)/rep/rep_util.c
$(CC) $(CFLAGS) $?
+rep_verify@o@: $(srcdir)/rep/rep_verify.c
+ $(CC) $(CFLAGS) $?
+repmgr_elect@o@: $(srcdir)/repmgr/repmgr_elect.c
+ $(CC) $(CFLAGS) $?
+repmgr_method@o@: $(srcdir)/repmgr/repmgr_method.c
+ $(CC) $(CFLAGS) $?
+repmgr_msg@o@: $(srcdir)/repmgr/repmgr_msg.c
+ $(CC) $(CFLAGS) $?
+repmgr_net@o@: $(srcdir)/repmgr/repmgr_net.c
+ $(CC) $(CFLAGS) $?
+repmgr_posix@o@: $(srcdir)/repmgr/repmgr_posix.c
+ $(CC) $(CFLAGS) $?
+repmgr_queue@o@: $(srcdir)/repmgr/repmgr_queue.c
+ $(CC) $(CFLAGS) $?
+repmgr_sel@o@: $(srcdir)/repmgr/repmgr_sel.c
+ $(CC) $(CFLAGS) $?
+repmgr_stat@o@: $(srcdir)/repmgr/repmgr_stat.c
+ $(CC) $(CFLAGS) $?
+repmgr_util@o@: $(srcdir)/repmgr/repmgr_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
@@ -1603,6 +1648,10 @@ txn_auto@o@: $(srcdir)/txn/txn_auto.c
$(CC) $(CFLAGS) $?
txn_autop@o@: $(srcdir)/txn/txn_autop.c
$(CC) $(CFLAGS) $?
+txn_chkpt@o@: $(srcdir)/txn/txn_chkpt.c
+ $(CC) $(CFLAGS) $?
+txn_failchk@o@: $(srcdir)/txn/txn_failchk.c
+ $(CC) $(CFLAGS) $?
txn_method@o@: $(srcdir)/txn/txn_method.c
$(CC) $(CFLAGS) $?
txn_rec@o@: $(srcdir)/txn/txn_rec.c
@@ -1660,37 +1709,37 @@ cxx_txn@o@: $(srcdir)/cxx/cxx_txn.cpp
# Java API build rules.
##################################################
db_java_wrap@o@: $(srcdir)/libdb_java/db_java_wrap.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $(SWIGCFLAGS) $?
##################################################
# Tcl API build rules.
##################################################
tcl_compat@o@: $(srcdir)/tcl/tcl_compat.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_db@o@: $(srcdir)/tcl/tcl_db.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_db_pkg@o@: $(srcdir)/tcl/tcl_db_pkg.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_dbcursor@o@: $(srcdir)/tcl/tcl_dbcursor.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_env@o@: $(srcdir)/tcl/tcl_env.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_internal@o@: $(srcdir)/tcl/tcl_internal.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_lock@o@: $(srcdir)/tcl/tcl_lock.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_log@o@: $(srcdir)/tcl/tcl_log.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_mp@o@: $(srcdir)/tcl/tcl_mp.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_rep@o@: $(srcdir)/tcl/tcl_rep.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_seq@o@: $(srcdir)/tcl/tcl_seq.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_txn@o@: $(srcdir)/tcl/tcl_txn.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
tcl_util@o@: $(srcdir)/tcl/tcl_util.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
+ $(CC) $(CFLAGS) $(TCL_INCLUDE_SPEC) $?
##################################################
# RPC build rules.
@@ -1734,6 +1783,8 @@ db_dump@o@: $(srcdir)/db_dump/db_dump.c
$(CC) $(CFLAGS) $?
db_dump185@o@: $(srcdir)/db_dump185/db_dump185.c
$(CC) $(DB185INC) $?
+db_hotbackup@o@: $(srcdir)/db_hotbackup/db_hotbackup.c
+ $(CC) $(CFLAGS) $?
db_load@o@: $(srcdir)/db_load/db_load.c
$(CC) $(CFLAGS) $?
db_printlog@o@: $(srcdir)/db_printlog/db_printlog.c
@@ -1750,26 +1801,58 @@ db_verify@o@: $(srcdir)/db_verify/db_verify.c
##################################################
# C library replacement files.
##################################################
+atoi@o@: $(srcdir)/clib/atoi.c
+ $(CC) $(CFLAGS) $?
+atol@o@: $(srcdir)/clib/atol.c
+ $(CC) $(CFLAGS) $?
+ctime@o@: $(srcdir)/clib/ctime.c
+ $(CC) $(CFLAGS) $?
+getaddrinfo@o@: $(srcdir)/clib/getaddrinfo.c
+ $(CC) $(CFLAGS) $?
getcwd@o@: $(srcdir)/clib/getcwd.c
$(CC) $(CFLAGS) $?
getopt@o@: $(srcdir)/clib/getopt.c
$(CC) $(CFLAGS) $?
+isalpha@o@: $(srcdir)/clib/isalpha.c
+ $(CC) $(CFLAGS) $?
+isdigit@o@: $(srcdir)/clib/isdigit.c
+ $(CC) $(CFLAGS) $?
+isprint@o@: $(srcdir)/clib/isprint.c
+ $(CC) $(CFLAGS) $?
+isspace@o@: $(srcdir)/clib/isspace.c
+ $(CC) $(CFLAGS) $?
memcmp@o@: $(srcdir)/clib/memcmp.c
$(CC) $(CFLAGS) $?
memcpy@o@: $(srcdir)/clib/memmove.c
$(CC) -DMEMCOPY $(CFLAGS) $? -o $@
memmove@o@: $(srcdir)/clib/memmove.c
$(CC) -DMEMMOVE $(CFLAGS) $?
+printf@o@: $(srcdir)/clib/printf.c
+ $(CC) $(CFLAGS) $?
raise@o@: $(srcdir)/clib/raise.c
$(CC) $(CFLAGS) $?
+rand@o@: $(srcdir)/clib/rand.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) $?
+strcat@o@: $(srcdir)/clib/strcat.c
+ $(CC) $(CFLAGS) $?
+strchr@o@: $(srcdir)/clib/strchr.c
+ $(CC) $(CFLAGS) $?
strerror@o@: $(srcdir)/clib/strerror.c
$(CC) $(CFLAGS) $?
+strncat@o@: $(srcdir)/clib/strncat.c
+ $(CC) $(CFLAGS) $?
+strncmp@o@: $(srcdir)/clib/strncmp.c
+ $(CC) $(CFLAGS) $?
+strrchr@o@: $(srcdir)/clib/strrchr.c
+ $(CC) $(CFLAGS) $?
+strsep@o@: $(srcdir)/clib/strsep.c
+ $(CC) $(CFLAGS) $?
strtol@o@: $(srcdir)/clib/strtol.c
$(CC) $(CFLAGS) $?
strtoul@o@: $(srcdir)/clib/strtoul.c
diff --git a/db/dist/RELEASE b/db/dist/RELEASE
index 6de537058..0874a36d3 100644
--- a/db/dist/RELEASE
+++ b/db/dist/RELEASE
@@ -1,11 +1,11 @@
-# $Id: RELEASE,v 11.195 2004/11/09 01:30:41 bostic Exp $
+# $Id: RELEASE,v 12.38 2006/09/20 20:08:48 bostic Exp $
DB_VERSION_MAJOR=4
-DB_VERSION_MINOR=3
-DB_VERSION_PATCH=27
+DB_VERSION_MINOR=5
+DB_VERSION_PATCH=20
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_RELEASE_DATE=`date "+%B %e, %Y"`
-DB_VERSION_STRING="Sleepycat Software: Berkeley DB $DB_VERSION: ($DB_RELEASE_DATE)"
+DB_VERSION_STRING="Berkeley DB $DB_VERSION: ($DB_RELEASE_DATE)"
diff --git a/db/dist/aclocal/config.ac b/db/dist/aclocal/config.ac
index 717a0becc..3ae2ff2eb 100644
--- a/db/dist/aclocal/config.ac
+++ b/db/dist/aclocal/config.ac
@@ -15,47 +15,7 @@ AH_TEMPLATE(HAVE_FILESYSTEM_NOTZERO,
AH_TEMPLATE(HAVE_UNLINK_WITH_OPEN_FAILURE,
[Define to 1 if unlink of file with open file descriptors will fail.])
-AH_BOTTOM([/*
- * Exit success/failure macros.
- */
-#ifndef HAVE_EXIT_SUCCESS
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-#endif
-
-/*
- * 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.
- */
-#ifndef HAVE_GETCWD
-#define getcwd __db_Cgetcwd
-#endif
-#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
+AH_BOTTOM([#include "clib_port.h"
#ifdef DB_WIN32
#include "win_db.h"
diff --git a/db/dist/aclocal/libtool.ac b/db/dist/aclocal/libtool.ac
index 71dae456a..0f53cb592 100644
--- a/db/dist/aclocal/libtool.ac
+++ b/db/dist/aclocal/libtool.ac
@@ -1,28 +1,13 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
## 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.
+## This file is free software; the Free Software Foundation gives
+## unlimited permission to copy and/or distribute it, with or without
+## modifications, as long as this notice is preserved.
-# serial 47 AC_PROG_LIBTOOL
+# serial 48 AC_PROG_LIBTOOL
# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
@@ -132,7 +117,7 @@ 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//'
+Xsed='sed -e 1s/^X//'
[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
# Same as above, but do not quote variable references.
@@ -152,7 +137,7 @@ rm="rm -f"
default_ofile=libtool
can_build_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
+# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
ltmain="$ac_aux_dir/ltmain.sh"
@@ -172,6 +157,7 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
test -z "$AS" && AS=as
test -z "$CC" && CC=cc
test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$DLLTOOL" && DLLTOOL=dlltool
test -z "$LD" && LD=ld
test -z "$LN_S" && LN_S="ln -s"
@@ -191,16 +177,16 @@ 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="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
;;
*)
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
;;
esac
old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+_LT_CC_BASENAME([$compiler])
# Only perform the check for file, if the check method requires it
case $deplibs_check_method in
@@ -242,11 +228,56 @@ AC_DEFUN([_LT_AC_SYS_COMPILER],
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# Allow CC to be a program name with arguments.
compiler=$CC
])# _LT_AC_SYS_COMPILER
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+AC_DEFUN([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+AC_DEFUN([_LT_LINKER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_LINKER_BOILERPLATE
+
+
# _LT_AC_SYS_LIBPATH_AIX
# ----------------------
# Links a minimal program and checks the executable
@@ -326,8 +357,8 @@ 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`" &&
+ 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
@@ -496,7 +527,7 @@ 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
+ case `/usr/bin/file conftest.o` in
*32-bit*)
case $host in
x86_64-*linux*)
@@ -547,6 +578,22 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
CFLAGS="$SAVE_CFLAGS"
fi
;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
@@ -578,7 +625,7 @@ AC_CACHE_CHECK([$1], [$2],
# 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:.*FLAGS}\{0,1\} :&$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)
@@ -588,8 +635,10 @@ AC_CACHE_CHECK([$1], [$2],
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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
$2=yes
fi
fi
@@ -615,11 +664,16 @@ AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
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
+ # The linker 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
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
else
$2=yes
fi
@@ -678,20 +732,50 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192;
;;
- netbsd* | freebsd* | openbsd* | darwin* )
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
elif test -x /usr/sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
else
- lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
fi
# And add a safety zone
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
;;
- *)
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
# 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.
@@ -722,7 +806,7 @@ fi
# _LT_AC_CHECK_DLFCN
-# --------------------
+# ------------------
AC_DEFUN([_LT_AC_CHECK_DLFCN],
[AC_CHECK_HEADERS(dlfcn.h)dnl
])# _LT_AC_CHECK_DLFCN
@@ -730,7 +814,7 @@ AC_DEFUN([_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],
[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
if test "$cross_compiling" = yes; then :
@@ -796,17 +880,19 @@ int main ()
else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
/* dlclose (self); */
}
+ else
+ puts (dlerror ());
exit (status);
}]
EOF
if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) 2>/dev/null
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
lt_status=$?
case x$lt_status in
x$lt_dlno_uscore) $1 ;;
x$lt_dlneed_uscore) $2 ;;
- x$lt_unknown|x*) $3 ;;
+ x$lt_dlunknown|x*) $3 ;;
esac
else :
# compilation failed
@@ -818,7 +904,7 @@ rm -fr conftest*
# AC_LIBTOOL_DLOPEN_SELF
-# -------------------
+# ----------------------
AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
if test "x$enable_dlopen" != xyes; then
@@ -889,7 +975,7 @@ else
test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
save_LDFLAGS="$LDFLAGS"
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
save_LIBS="$LIBS"
LIBS="$lt_cv_dlopen_libs $LIBS"
@@ -902,7 +988,7 @@ else
])
if test "x$lt_cv_dlopen_self" = xyes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
lt_cv_dlopen_self_static, [dnl
_LT_AC_TRY_DLOPEN_SELF(
@@ -950,7 +1036,7 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
# 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:.*FLAGS}\{0,1\} :&$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)
@@ -962,11 +1048,13 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$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
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
fi
fi
- chmod u+w .
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -1226,7 +1314,8 @@ cygwin* | mingw* | pw32*)
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'
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -1256,7 +1345,7 @@ cygwin* | mingw* | pw32*)
;;
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}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -1279,7 +1368,7 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
# Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
if test "$GCC" = yes; 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"`
@@ -1314,8 +1403,17 @@ kfreebsd*-gnu)
dynamic_linker='GNU ld.so'
;;
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -1333,14 +1431,19 @@ freebsd*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.[01]* | freebsdelf3.[01]*)
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- *) # from 3.2 on
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
+ freebsd*) # from 4.6 on
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
esac
;;
@@ -1360,7 +1463,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -1400,6 +1503,18 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
+interix3*)
+ 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'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -1459,7 +1574,7 @@ linux*)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '`
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -1521,8 +1636,13 @@ nto-qnx*)
openbsd*)
version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- need_version=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
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
@@ -1560,13 +1680,6 @@ osf3* | osf4* | osf5*)
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
@@ -1592,7 +1705,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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'
@@ -1625,6 +1738,29 @@ sysv4*MP*)
fi
;;
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -1638,6 +1774,11 @@ uts4*)
esac
AC_MSG_RESULT([$dynamic_linker])
test "$dynamic_linker" = 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
])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
@@ -1662,6 +1803,9 @@ if test -f "$ltmain" && test -n "$tagnames"; then
AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
fi
fi
+ if test -z "$LTCFLAGS"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+ fi
# Extract list of available tagged configurations in $ofile.
# Note that this assumes the entire list is on one line.
@@ -1688,7 +1832,9 @@ if test -f "$ltmain" && test -n "$tagnames"; then
case $tagname in
CXX)
- if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
AC_LIBTOOL_LANG_CXX_CONFIG
else
tagname=""
@@ -1750,7 +1896,7 @@ AC_DEFUN([AC_LIBTOOL_DLOPEN],
# AC_LIBTOOL_WIN32_DLL
# --------------------
-# declare package support for building win32 dll's
+# declare package support for building win32 DLLs
AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
])# AC_LIBTOOL_WIN32_DLL
@@ -1788,7 +1934,7 @@ AC_ARG_ENABLE([shared],
# AC_DISABLE_SHARED
# -----------------
-#- set the default shared flag to --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)
@@ -1924,7 +2070,7 @@ dnl not every word. This closes a longstanding sh security hole.
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"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
@@ -2034,7 +2180,7 @@ AC_CACHE_VAL(lt_cv_path_LD,
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.
+ # but apparently some variants of GNU ld 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'*)
@@ -2066,7 +2212,7 @@ AC_PROG_LD_GNU
AC_DEFUN([AC_PROG_LD_GNU],
[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.
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
@@ -2096,7 +2242,7 @@ reload_cmds='$LD$reload_flag -o $output$reload_objs'
case $host_os in
darwin*)
if test "$GCC" = yes; then
- reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
else
reload_cmds='$LD$reload_flag -o $output$reload_objs'
fi
@@ -2158,13 +2304,13 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | kfreebsd*-gnu)
+freebsd* | kfreebsd*-gnu | dragonfly*)
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_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/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.*`
;;
@@ -2180,7 +2326,7 @@ gnu*)
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
- case "$host_cpu" in
+ 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
@@ -2196,6 +2342,11 @@ hpux10.20* | hpux11*)
esac
;;
+interix3*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
irix5* | irix6* | nonstopux*)
case $LD in
*-32|*"-32 ") libmagic=32-bit;;
@@ -2208,15 +2359,6 @@ irix5* | irix6* | nonstopux*)
# This must be Linux ELF.
linux*)
- case $host_cpu in
- alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*)
- lt_cv_deplibs_check_method=pass_all ;;
- *)
- # glibc up to 2.1.1 does not perform some relocations on ARM
- # this will be overridden with pass_all, but let us keep it just in case
- 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`
lt_cv_deplibs_check_method=pass_all
;;
@@ -2250,15 +2392,11 @@ osf3* | osf4* | osf5*)
lt_cv_deplibs_check_method=pass_all
;;
-sco3.2v5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
solaris*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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]]'
@@ -2279,10 +2417,13 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
siemens)
lt_cv_deplibs_check_method=pass_all
;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
esac
@@ -2302,36 +2443,43 @@ AC_DEFUN([AC_PROG_NM],
# 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=.
- 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"
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_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
;;
*)
- 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
+ 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
- esac
- fi
+ fi
+ done
+ IFS="$lt_save_ifs"
done
- IFS="$lt_save_ifs"
test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi])
NM="$lt_cv_path_NM"
@@ -2363,13 +2511,13 @@ esac
# -----------------------------------
# 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.
+# --enable-ltdl-convenience to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. 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.
AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
case $enable_ltdl_convenience in
@@ -2388,13 +2536,13 @@ AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
# -----------------------------------
# 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.
+# --enable-ltdl-install to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. 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 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
@@ -2432,10 +2580,21 @@ AC_DEFUN([AC_LIBTOOL_CXX],
# ---------------
AC_DEFUN([_LT_AC_LANG_CXX],
[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([AC_PROG_CXXCPP])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
])# _LT_AC_LANG_CXX
+# _LT_AC_PROG_CXXCPP
+# ------------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([AC_PROG_CXX])
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+fi
+])# _LT_AC_PROG_CXXCPP
# AC_LIBTOOL_F77
# --------------
@@ -2475,7 +2634,7 @@ _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
# AC_LIBTOOL_RC
-# --------------
+# -------------
# enable support for Windows resource files
AC_DEFUN([AC_LIBTOOL_RC],
[AC_REQUIRE([LT_AC_PROG_RC])
@@ -2508,36 +2667,9 @@ 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)=])
-
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
@@ -2551,9 +2683,9 @@ AC_LIBTOOL_PROG_LD_SHLIBS($1)
AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
+AC_LIBTOOL_DLOPEN_SELF
-# Report which librarie types wil actually be built
+# Report which library types will actually be built
AC_MSG_CHECKING([if libtool supports shared libraries])
AC_MSG_RESULT([$can_build_shared])
@@ -2562,7 +2694,7 @@ 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
+case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
@@ -2600,7 +2732,7 @@ 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])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_AC_TAGVAR(allow_undefined_flag, $1)=
@@ -2612,6 +2744,7 @@ _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_shlibpath_var, $1)=unsupported
_LT_AC_TAGVAR(hardcode_automatic, $1)=no
_LT_AC_TAGVAR(module_cmds, $1)=
_LT_AC_TAGVAR(module_expsym_cmds, $1)=
@@ -2629,7 +2762,7 @@ _LT_AC_TAGVAR(postdeps, $1)=
_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
# Source file extension for C++ test sources.
-ac_ext=cc
+ac_ext=cpp
# Object file extension for compiled C++ test sources.
objext=o
@@ -2639,11 +2772,15 @@ _LT_AC_TAGVAR(objext, $1)=$objext
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'
+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
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
# Allow CC to be a program name with arguments.
lt_save_CC=$CC
lt_save_LD=$LD
@@ -2654,18 +2791,18 @@ 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
+ $as_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
+ $as_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%^.*/%%'`
+_LT_CC_BASENAME([$compiler])
# We don't want -fno-exception wen compiling C++ code, so set the
# no_builtin_flag separately
@@ -2754,6 +2891,7 @@ case $host_os in
;;
esac
done
+ ;;
esac
exp_sym_flag='-bexport'
@@ -2772,7 +2910,7 @@ case $host_os in
_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
if test "$GXX" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
+ 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`
@@ -2791,8 +2929,12 @@ case $host_os in
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
fi
+ ;;
esac
shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -2819,12 +2961,12 @@ case $host_os in
_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"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${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"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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
@@ -2833,16 +2975,26 @@ case $host_os in
# -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(whole_archive_flag_spec, $1)='$convenience'
_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'
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
+
+ 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
+ ;;
+
chorus*)
case $cc_basename in
*)
@@ -2852,7 +3004,6 @@ case $host_os in
esac
;;
-
cygwin* | mingw* | pw32*)
# _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
# as there is no search path for DLLs.
@@ -2862,7 +3013,7 @@ case $host_os in
_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'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $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
@@ -2871,13 +3022,13 @@ case $host_os in
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'
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
_LT_AC_TAGVAR(ld_shlibs, $1)=no
fi
;;
darwin* | rhapsody*)
- case "$host_os" in
+ case $host_os in
rhapsody* | darwin1.[[012]])
_LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
;;
@@ -2915,7 +3066,7 @@ case $host_os in
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -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 $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
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
@@ -2923,12 +3074,12 @@ case $host_os in
fi
_LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
output_verbose_link_cmd='echo'
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
_LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
_LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$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 $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
@@ -2941,11 +3092,11 @@ case $host_os in
dgux*)
case $cc_basename in
- ec++)
+ ec++*)
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
- ghcx)
+ ghcx*)
# Green Hills C++ Compiler
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
@@ -2956,14 +3107,14 @@ case $host_os in
;;
esac
;;
- freebsd[12]*)
+ 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* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
_LT_AC_TAGVAR(ld_shlibs, $1)=yes
@@ -2980,11 +3131,11 @@ case $host_os in
# location of the library.
case $cc_basename in
- CC)
+ CC*)
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
- aCC)
+ 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
@@ -2994,7 +3145,7 @@ case $host_os in
# 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'
+ 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
@@ -3008,33 +3159,22 @@ case $host_os in
;;
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, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
_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*)
+ case $host_cpu in
+ hppa*64*|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
@@ -3045,14 +3185,17 @@ case $host_os in
esac
case $cc_basename in
- CC)
+ 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'
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
_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'
@@ -3071,9 +3214,12 @@ case $host_os in
*)
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'
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
_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'
@@ -3087,11 +3233,25 @@ case $host_os in
;;
esac
;;
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
irix5* | irix6*)
case $cc_basename in
- CC)
+ 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'
+ _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 ${output_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
@@ -3102,7 +3262,7 @@ case $host_os in
*)
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'
+ _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}${output_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
@@ -3115,7 +3275,7 @@ case $host_os in
;;
linux*)
case $cc_basename in
- KCC)
+ KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -3140,7 +3300,7 @@ case $host_os in
# "CC -Bstatic", where "CC" is the KAI C++ compiler.
_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
;;
- icpc)
+ icpc*)
# Intel C++
with_gnu_ld=yes
# version 8.0 and above of icpc choke on multiply defined symbols
@@ -3152,8 +3312,12 @@ case $host_os in
_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'
;;
*) # Version 8.0 or newer
- _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'
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
;;
esac
_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
@@ -3161,7 +3325,16 @@ case $host_os in
_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)
+ pgCC*)
+ # Portland Group C++ compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_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'
@@ -3192,7 +3365,7 @@ case $host_os in
;;
mvs*)
case $cc_basename in
- cxx)
+ cxx*)
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
@@ -3218,6 +3391,8 @@ case $host_os in
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
@@ -3229,7 +3404,7 @@ case $host_os in
;;
osf3*)
case $cc_basename in
- KCC)
+ KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -3245,14 +3420,14 @@ case $host_os in
_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
;;
- RCC)
+ RCC*)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
- cxx)
+ 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(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 ${output_objdir}/so_locations -o $lib'
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -3270,7 +3445,7 @@ case $host_os in
*)
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(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}${output_objdir}/so_locations -o $lib'
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -3289,7 +3464,7 @@ case $host_os in
;;
osf4* | osf5*)
case $cc_basename in
- KCC)
+ KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -3304,17 +3479,17 @@ case $host_os in
# the KAI C++ compiler.
_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
;;
- RCC)
+ RCC*)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
- cxx)
+ 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_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 ${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~
- $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~
+ $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 ${output_objdir}/so_locations -o $lib~
$rm $lib.exp'
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -3333,7 +3508,7 @@ case $host_os in
*)
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(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}${output_objdir}/so_locations -o $lib'
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -3354,27 +3529,14 @@ case $host_os in
# 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)
+ CC*)
# Sun C++ 4.x
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
;;
- lcc)
+ lcc*)
# Lucid
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
@@ -3387,36 +3549,33 @@ case $host_os in
;;
solaris*)
case $cc_basename in
- CC)
+ CC*)
# Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
_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_cmds, $1)='$CC -G${allow_undefined_flag} -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'
+ $CC -G${allow_undefined_flag} ${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].*) ;;
+ 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.
+ # linker. We must also pass each convience library through
+ # to the system linker between allextract/defaultextract.
+ # The C++ compiler will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl.
# 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'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_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'
+ output_verbose_link_cmd='echo'
# Archives containing C++ object files must be created using
# "CC -xar", where "CC" is the Sun C++ compiler. This is
@@ -3424,7 +3583,7 @@ case $host_os in
# in the archive.
_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
;;
- gcx)
+ 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'
@@ -3462,12 +3621,63 @@ case $host_os in
;;
esac
;;
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ # So that behaviour is only enabled if SCOABSPATH is set to a
+ # non-empty value in the environment. Most likely only useful for
+ # creating official distributions of packages.
+ # This is a hack until libtool officially supports absolute path
+ # names for shared libraries.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
;;
tandem*)
case $cc_basename in
- NCC)
+ NCC*)
# NonStop-UX NCC 3.20
# FIXME: insert proper C++ library support
_LT_AC_TAGVAR(ld_shlibs, $1)=no
@@ -3504,8 +3714,6 @@ AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
AC_LIBTOOL_PROG_LD_SHLIBS($1)
AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
AC_LIBTOOL_CONFIG($1)
@@ -3523,7 +3731,7 @@ 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
@@ -3577,7 +3785,7 @@ if AC_TRY_EVAL(ac_compile); then
# 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\"`"
+ 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
@@ -3653,13 +3861,37 @@ fi
$rm -f confest.$objext
+# PORTME: override above test on systems where it is broken
+ifelse([$1],[CXX],
+[case $host_os in
+interix3*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_AC_TAGVAR(predep_objects,$1)=
+ _LT_AC_TAGVAR(postdep_objects,$1)=
+ _LT_AC_TAGVAR(postdeps,$1)=
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
+ ;;
+ esac
+ ;;
+esac
+])
+
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'.
@@ -3703,12 +3935,16 @@ 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
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
# 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%^.*/%%'`
+_LT_CC_BASENAME([$compiler])
AC_MSG_CHECKING([if libtool supports shared libraries])
AC_MSG_RESULT([$can_build_shared])
@@ -3718,7 +3954,7 @@ 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
+case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
@@ -3727,7 +3963,9 @@ aix3*)
fi
;;
aix4* | aix5*)
- test "$enable_shared" = yes && enable_static=no
+ 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])
@@ -3737,8 +3975,6 @@ AC_MSG_CHECKING([whether to build static libraries])
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"
@@ -3748,8 +3984,6 @@ AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
AC_LIBTOOL_PROG_LD_SHLIBS($1)
AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-
AC_LIBTOOL_CONFIG($1)
@@ -3778,20 +4012,27 @@ _LT_AC_TAGVAR(objext, $1)=$objext
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'
+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
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
CC=${GCJ-"gcj"}
compiler=$CC
_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
# GCJ did not exist at the time GCC didn't implicitly link libc in.
_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
## 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
@@ -3803,8 +4044,6 @@ AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
AC_LIBTOOL_PROG_LD_SHLIBS($1)
AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
AC_LIBTOOL_CONFIG($1)
@@ -3814,7 +4053,7 @@ CC="$lt_save_CC"
# 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'.
@@ -3838,11 +4077,16 @@ 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
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
# 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_CC_BASENAME([$compiler])
_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
AC_LIBTOOL_CONFIG($1)
@@ -3872,7 +4116,7 @@ if test -f "$ltmain"; then
# 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 \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -3978,7 +4222,7 @@ ifelse([$1], [],
#
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -3989,7 +4233,7 @@ ifelse([$1], [],
SED=$lt_SED
# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e s/^X//"
+Xsed="$SED -e 1s/^X//"
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
@@ -4024,6 +4268,12 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -4035,6 +4285,9 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
# A language-specific compiler.
CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
@@ -4100,7 +4353,7 @@ 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 ?
+# Must we lock files when doing compilation?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -4374,9 +4627,6 @@ 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'"
@@ -4398,15 +4648,31 @@ hpux*) # Its linker distinguishes data from code symbols
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'"
;;
+linux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDGIRSTW]]'
+ 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'"
+ fi
+ ;;
irix* | nonstopux*)
symcode='[[BCDEGRST]]'
;;
osf*)
symcode='[[BCDEGQRST]]'
;;
-solaris* | sysv5*)
+solaris*)
symcode='[[BDRT]]'
;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
sysv4)
symcode='[[DFNSTU]]'
;;
@@ -4429,8 +4695,11 @@ esac
# Try without a prefix undercore, then with it.
for ac_symprfx in "" "_"; do
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
# 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'"
+ 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
@@ -4586,6 +4855,10 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
# DJGPP does not support shared libraries at all
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
sysv4*MP*)
if test -d /usr/nec; then
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
@@ -4594,7 +4867,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case "$host_cpu" in
+ case $host_cpu in
hppa*64*|ia64*)
;;
*)
@@ -4619,7 +4892,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
chorus*)
case $cc_basename in
- cxch68)
+ 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"
;;
@@ -4628,7 +4901,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
@@ -4637,10 +4910,10 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
dgux*)
case $cc_basename in
- ec++)
+ ec++*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
;;
- ghcx)
+ ghcx*)
# Green Hills C++ Compiler
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
;;
@@ -4648,22 +4921,22 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
esac
;;
- freebsd* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
case $cc_basename in
- CC)
+ 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"
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
if test "$host_cpu" != ia64; then
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
fi
;;
- aCC)
+ 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
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -4676,9 +4949,13 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
esac
;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
irix5* | irix6* | nonstopux*)
case $cc_basename in
- CC)
+ 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.
@@ -4689,18 +4966,24 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
linux*)
case $cc_basename in
- KCC)
+ KCC*)
# KAI C++ Compiler
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
- icpc)
+ icpc* | ecpc*)
# 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)
+ pgCC*)
+ # Portland Group C++ compiler.
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
# Compaq C++
# Make sure the PIC flag is empty. It appears that all Alpha
# Linux and Compaq Tru64 Unix objects are PIC.
@@ -4717,7 +5000,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
mvs*)
case $cc_basename in
- cxx)
+ cxx*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
;;
*)
@@ -4728,14 +5011,14 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
osf3* | osf4* | osf5*)
case $cc_basename in
- KCC)
+ KCC*)
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
;;
- RCC)
+ RCC*)
# Rational C++ 2.4.1
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
;;
- cxx)
+ 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
@@ -4749,24 +5032,15 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
psos*)
;;
- sco*)
- case $cc_basename in
- CC)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- *)
- ;;
- esac
- ;;
solaris*)
case $cc_basename in
- CC)
+ 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)
+ gcx*)
# Green Hills C++ Compiler
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
;;
@@ -4776,12 +5050,12 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
sunos4*)
case $cc_basename in
- CC)
+ CC*)
# Sun C++ 4.x
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
- lcc)
+ lcc*)
# Lucid
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
;;
@@ -4791,7 +5065,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
tandem*)
case $cc_basename in
- NCC)
+ NCC*)
# NonStop-UX NCC 3.20
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
;;
@@ -4799,7 +5073,14 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
esac
;;
- unixware*)
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _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'
+ ;;
+ esac
;;
vxworks*)
;;
@@ -4846,6 +5127,11 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -4862,7 +5148,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case "$host_cpu" in
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -4891,7 +5177,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
@@ -4909,7 +5195,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
_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
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -4933,12 +5219,19 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
;;
linux*)
- case $CC in
+ case $cc_basename 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'
;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
ccc*)
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
# All Alpha code is PIC.
@@ -4953,15 +5246,15 @@ AC_MSG_CHECKING([for $compiler option to produce 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'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
;;
sunos4*)
@@ -4970,7 +5263,7 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.2uw2* | sysv4.3*)
_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'
@@ -4983,6 +5276,17 @@ AC_MSG_CHECKING([for $compiler option to produce PIC])
fi
;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _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'
+ ;;
+
+ unicos*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
uts4*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
@@ -5010,7 +5314,7 @@ if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
[_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
fi
-case "$host_os" in
+case $host_os in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
@@ -5019,6 +5323,16 @@ case "$host_os" in
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
;;
esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
])
@@ -5043,7 +5357,7 @@ ifelse([$1],[CXX],[
_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 -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[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'
@@ -5086,7 +5400,8 @@ ifelse([$1],[CXX],[
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
extract_expsyms_cmds=
-
+ # Just being paranoid about ensuring that cc_basename is set.
+ _LT_CC_BASENAME([$compiler])
case $host_os in
cygwin* | mingw* | pw32*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
@@ -5096,6 +5411,10 @@ ifelse([$1],[CXX],[
with_gnu_ld=no
fi
;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
openbsd*)
with_gnu_ld=no
;;
@@ -5106,6 +5425,27 @@ ifelse([$1],[CXX],[
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ 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
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
# See if GNU ld supports shared libraries.
case $host_os in
aix3* | aix4* | aix5*)
@@ -5156,10 +5496,10 @@ EOF
_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'
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /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'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $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
@@ -5168,9 +5508,55 @@ EOF
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'
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
- ld_shlibs=no
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
fi
;;
@@ -5184,7 +5570,7 @@ EOF
fi
;;
- solaris* | sysv5*)
+ solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
_LT_AC_TAGVAR(ld_shlibs, $1)=no
cat <<EOF 1>&2
@@ -5205,6 +5591,33 @@ EOF
fi
;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
sunos4*)
_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -5212,31 +5625,6 @@ EOF
_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds"
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
- if test $supports_anon_versioning = yes; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
-cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-$echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- else
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds"
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
*)
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'
@@ -5247,16 +5635,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
;;
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
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -5268,7 +5651,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# 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
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
@@ -5302,6 +5685,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
break
fi
done
+ ;;
esac
exp_sym_flag='-bexport'
@@ -5320,7 +5704,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
+ 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`
@@ -5339,8 +5723,12 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
fi
+ ;;
esac
shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -5348,11 +5736,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -5366,12 +5754,12 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# 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"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${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"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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
@@ -5380,13 +5768,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# -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(whole_archive_flag_spec, $1)='$convenience'
_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'
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -5420,12 +5806,12 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
;;
darwin* | rhapsody*)
- case "$host_os" in
+ case $host_os in
rhapsody* | darwin1.[[012]])
_LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
;;
@@ -5454,16 +5840,16 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
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 $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
_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 $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
output_verbose_link_cmd='echo'
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
_LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
_LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$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 $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
@@ -5504,7 +5890,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
_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
@@ -5527,47 +5913,62 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
;;
- hpux10* | hpux11*)
+ hpux10*)
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 -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _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
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -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'
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_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, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
_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'
@@ -5661,7 +6062,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_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'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_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'
@@ -5669,21 +6070,15 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_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
+ wlarc='${wl}'
_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
+ wlarc=''
_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'
@@ -5692,8 +6087,18 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
_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' ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ *)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
esac
_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
;;
@@ -5750,36 +6155,45 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
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
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
+ 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'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$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'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$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)=
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
;;
uts4*)
@@ -5797,11 +6211,6 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
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?
#
@@ -5829,6 +6238,7 @@ x|xyes)
libobjs=conftest.$ac_objext
deplibs=
wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
compiler_flags=-v
linker_flags=-v
verstring=
@@ -5956,7 +6366,7 @@ 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
+ test ! -f $lt_ac_sed && continue
cat /dev/null > conftest.in
lt_ac_count=0
echo $ECHO_N "0123456789$ECHO_C" >conftest.in
diff --git a/db/dist/aclocal/mutex.ac b/db/dist/aclocal/mutex.ac
index 959ed4ebe..31b3d2942 100644
--- a/db/dist/aclocal/mutex.ac
+++ b/db/dist/aclocal/mutex.ac
@@ -1,4 +1,4 @@
-# $Id: mutex.ac,v 11.46 2004/07/09 16:23:19 bostic Exp $
+# $Id: mutex.ac,v 12.18 2006/06/20 20:31:01 bostic Exp $
# POSIX pthreads tests: inter-process safe and intra-process only.
AC_DEFUN(AM_PTHREADS_SHARED, [
@@ -105,18 +105,14 @@ orig_libs=$LIBS
# *BSD systems).
#
# 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.
+# on Solaris, for two reasons: a bug in SunOS 5.7 causes applications to
+# 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. Second,
+# LWP mutexes are faster than POSIX pthread mutexes by some amount.
#
# Otherwise, test for POSIX threads before UI threads. There are Linux systems
# that support a UI compatibility mode, and applications are more likely to be
# written for POSIX threads than UI threads.
-#
-# Try and link with a threads library if possible. 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.
if test "$db_cv_posixmutexes" = yes; then
db_cv_mutex="posix_only";
fi
@@ -353,6 +349,28 @@ AC_TRY_COMPILE(,[
], [db_cv_mutex="ARM/gcc-assembly"])
fi
+# MIPS/gcc: Linux
+if test "$db_cv_mutex" = no; then
+AC_TRY_COMPILE(,[
+#if (defined(__mips) || defined(__mips__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+], [db_cv_mutex="MIPS/gcc-assembly"])
+fi
+
+# MIPS/gcc: Linux
+if test "$db_cv_mutex" = no; then
+AC_TRY_COMPILE(,[
+#if (defined(__mips) || defined(__mips__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+], [db_cv_mutex="MIPS/gcc-assembly"])
+fi
+
# PaRisc/gcc: HP/UX
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
@@ -400,7 +418,7 @@ fi
# x86/gcc: FreeBSD, NetBSD, BSD/OS, Linux
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
-#if (defined(i386) || defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
+#if (defined(i386) || defined(__i386__)) && defined(__GNUC__)
exit(0);
#else
FAIL TO COMPILE/LINK
@@ -408,6 +426,17 @@ AC_TRY_COMPILE(,[
], [db_cv_mutex="x86/gcc-assembly"])
fi
+# x86_64/gcc: FreeBSD, NetBSD, BSD/OS, Linux
+if test "$db_cv_mutex" = no; then
+AC_TRY_COMPILE(,[
+#if (defined(x86_64) || defined(__x86_64__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+], [db_cv_mutex="x86_64/gcc-assembly"])
+fi
+
# S390/cc: IBM OS/390 Unix
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
@@ -430,7 +459,7 @@ AC_TRY_COMPILE(,[
], [db_cv_mutex="S390/gcc-assembly"])
fi
-# ia86/gcc: Linux
+# ia64/gcc: Linux
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
#if defined(__ia64) && defined(__GNUC__)
@@ -458,6 +487,10 @@ if test "$db_cv_mutex" = no; then
fi
])
+AC_SUBST(thread_h_decl)
+AC_SUBST(db_threadid_t_decl)
+db_threadid_t_decl=notset
+
case "$db_cv_mutex" in
68K/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_68K_GCC_ASSEMBLY)
@@ -502,17 +535,11 @@ POSIX/pthreads/private) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_THREAD_ONLY)
AH_TEMPLATE(HAVE_MUTEX_THREAD_ONLY,
[Define to 1 to configure mutexes intra-process only.]);;
-POSIX/pthreads/library) LIBS="$LIBS -lpthread"
- LIBJSO_LIBS="$LIBJSO_LIBS -lpthread"
- LIBTSO_LIBS="$LIBTSO_LIBS -lpthread"
- ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
+POSIX/pthreads/library) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_PTHREADS)
AH_TEMPLATE(HAVE_MUTEX_PTHREADS,
[Define to 1 to use POSIX 1003.1 pthread_XXX mutexes.]);;
POSIX/pthreads/library/private)
- LIBS="$LIBS -lpthread"
- LIBJSO_LIBS="$LIBJSO_LIBS -lpthread"
- LIBTSO_LIBS="$LIBTSO_LIBS -lpthread"
ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_PTHREADS)
AH_TEMPLATE(HAVE_MUTEX_PTHREADS,
@@ -525,7 +552,7 @@ PPC/gcc-assembly)
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"
+ReliantUNIX/initspin) LIBSO_LIBS="$LIBSO_LIBS -lmproc"
ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_RELIANTUNIX_INITSPIN)
AH_TEMPLATE(HAVE_MUTEX_RELIANTUNIX_INITSPIN,
@@ -562,13 +589,11 @@ 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,
[Define to 1 to use the UNIX International mutexes.]);;
-UI/threads/library) LIBS="$LIBS -lthread"
- ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
+UI/threads/library) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_UI_THREADS)
AH_TEMPLATE(HAVE_MUTEX_UI_THREADS,
[Define to 1 to use the UNIX International mutexes.]);;
@@ -590,10 +615,18 @@ win32) ADDITIONAL_OBJS="mut_win32${o} $ADDITIONAL_OBJS"
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.]);;
+MIPS/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_MIPS_GCC_ASSEMBLY)
+ AH_TEMPLATE(HAVE_MUTEX_MIPS_GCC_ASSEMBLY,
+ [Define to 1 to use the GCC compiler and MIPS assembly language 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,
[Define to 1 to use the GCC compiler and x86 assembly language mutexes.]);;
+x86_64/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_X86_64_GCC_ASSEMBLY)
+ AH_TEMPLATE(HAVE_MUTEX_X86_64_GCC_ASSEMBLY,
+ [Define to 1 to use the GCC compiler and amd64 assembly language mutexes.]);;
UNIX/fcntl) AC_MSG_WARN(
[NO FAST MUTEXES FOUND FOR THIS COMPILER/ARCHITECTURE.])
ADDITIONAL_OBJS="mut_fcntl${o} $ADDITIONAL_OBJS"
@@ -603,10 +636,88 @@ UNIX/fcntl) AC_MSG_WARN(
*) AC_MSG_ERROR([Unknown mutex interface: $db_cv_mutex]);;
esac
-if test "$db_cv_mutex" != "UNIX/fcntl"; then
- AC_DEFINE(HAVE_MUTEX_THREADS)
- AH_TEMPLATE(HAVE_MUTEX_THREADS,
- [Define to 1 if fast mutexes are available.])
+# The mutex selection may require specific declarations -- we fill in most of
+# them above, but here are the common ones.
+#
+# The mutex selection may tell us what kind of thread package we're using,
+# which we use to figure out the thread type.
+#
+# If we're configured for the POSIX pthread API, then force the thread ID type
+# and include function, regardless of the mutex selection. Ditto for the
+# (default) Solaris lwp mutexes, because they don't have a way to return the
+# thread ID.
+#
+# Try and link with a threads library if possible. 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.
+# For that reason always add -lpthread if we're using pthread calls or mutexes
+# and there's a pthread library.
+#
+# 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.
+case "$db_cv_mutex" in
+POSIX/pthread*|Solaris/lwp)
+ thread_h_decl="#include <pthread.h>"
+ db_threadid_t_decl="typedef pthread_t db_threadid_t;"
+ AC_HAVE_LIBRARY(pthread, LIBSO_LIBS="$LIBSO_LIBS -lpthread");;
+UI/threads*)
+ thread_h_decl="#include <thread.h>"
+ db_threadid_t_decl="typedef thread_t db_threadid_t;"
+ AC_HAVE_LIBRARY(thread, LIBSO_LIBS="$LIBSO_LIBS -lthread");;
+*)
+ if test "$db_cv_pthread_api" = "yes"; then
+ thread_h_decl="#include <pthread.h>"
+ db_threadid_t_decl="typedef pthread_t db_threadid_t;"
+ AC_HAVE_LIBRARY(pthread, LIBSO_LIBS="$LIBSO_LIBS -lpthread")
+ fi;;
+esac
+
+# We need to know if the thread ID type will fit into an integral type and we
+# can compare it for equality and generally treat it like an int, or if it's a
+# non-integral type and we have to treat it like a structure or other untyped
+# block of bytes. For example, MVS typedef's pthread_t to a structure.
+AH_TEMPLATE(HAVE_SIMPLE_THREAD_TYPE,
+ [Define to 1 if thread identifier type db_threadid_t is integral.])
+if test "$db_threadid_t_decl" = "notset"; then
+ db_threadid_t_decl="typedef uintmax_t db_threadid_t;"
+ AC_DEFINE(HAVE_SIMPLE_THREAD_TYPE)
+else
+ AC_TRY_COMPILE(
+ #include <sys/types.h>
+ $thread_h_decl, [
+ $db_threadid_t_decl
+ db_threadid_t a;
+ a = 0;
+ ], AC_DEFINE(HAVE_SIMPLE_THREAD_TYPE))
+fi
+
+# If we're building replication and configured with POSIX pthreads or were
+# told to build using the POSIX API, build the replication manager framework.
+db_cv_build_replication_mgr="no"
+if test "$db_cv_build_replication" = "yes"; then
+ AH_TEMPLATE(HAVE_REPLICATION_THREADS,
+ [Define to 1 if building the Berkeley DB replication framework.])
+ case "$db_cv_mutex" in
+ POSIX/pthread*|Solaris/lwp)
+ db_cv_build_replication_mgr="yes";;
+ esac
+ if test "$db_cv_pthread_api" = "yes"; then
+ db_cv_build_replication_mgr="yes"
+ fi
+
+ if test "$db_cv_build_replication_mgr" = "yes"; then
+ AC_DEFINE(HAVE_REPLICATION_THREADS)
+
+ # Solaris requires the socket and nsl libraries to build the
+ # replication manager. Don't add nsl regardless of the OS,
+ # it causes RPC to fail on AIX 4.3.3.
+ case "$host_os" in
+ solaris*)
+ AC_HAVE_LIBRARY(nsl, LIBSO_LIBS="$LIBSO_LIBS -lnsl")
+ AC_HAVE_LIBRARY(socket,
+ LIBSO_LIBS="$LIBSO_LIBS -lsocket");;
+ esac
+ fi
fi
# There are 3 classes of mutexes:
diff --git a/db/dist/aclocal/options.ac b/db/dist/aclocal/options.ac
index b770fc444..81e1361b8 100644
--- a/db/dist/aclocal/options.ac
+++ b/db/dist/aclocal/options.ac
@@ -1,4 +1,4 @@
-# $Id: options.ac,v 11.37 2004/06/10 16:38:18 bostic Exp $
+# $Id: options.ac,v 12.4 2006/04/07 15:08:58 bostic Exp $
# Process user-specified options.
AC_DEFUN(AM_OPTIONS_SET, [
@@ -161,6 +161,28 @@ AC_ARG_ENABLE(posixmutexes,
[db_cv_posixmutexes="$enable_posixmutexes"], [db_cv_posixmutexes="no"])
AC_MSG_RESULT($db_cv_posixmutexes)
+AC_ARG_ENABLE(pthread_self,
+ [AC_HELP_STRING([--enable-pthread_self],
+ [Obsolete; use --enable-pthread_api instead.])],
+ [AC_MSG_ERROR(
+ [--enable-pthread_self no longer supported, use --enable-pthread_api])])
+
+AC_MSG_CHECKING(if --enable-pthread_api option specified)
+AC_ARG_ENABLE(pthread_api,
+ [AC_HELP_STRING([--enable-pthread_api],
+ [Configure Berkeley DB for POSIX pthread API.])],
+ [db_cv_pthread_api="$enable_pthread_api"], [db_cv_pthread_api="no"])
+# POSIX mutexes implies other POSIX APIs.
+if test "$db_cv_posixmutexes" != "no"; then
+ db_cv_pthread_api="yes"
+fi
+AC_MSG_RESULT($db_cv_pthread_api)
+AH_TEMPLATE(HAVE_PTHREAD_API,
+ [Define to 1 to configure Berkeley DB for POSIX pthread API.])
+if test "$db_cv_pthread_api" = "yes"; then
+ AC_DEFINE(HAVE_PTHREAD_API)
+fi
+
AC_MSG_CHECKING(if --enable-rpc option specified)
AC_ARG_ENABLE(rpc,
[AC_HELP_STRING([--enable-rpc],
@@ -224,20 +246,13 @@ if test "$with_mutex" != "no"; then
fi
AC_MSG_RESULT($with_mutex)
-AH_TEMPLATE(MUTEX_ALIGN,
- [Define to a value if using non-standard mutex alignment.])
-AC_MSG_CHECKING(if --with-mutexalign=ALIGNMENT option specified)
+# --with-mutexalign=ALIGNMENT was the configuration option that Berkeley DB
+# used before the DbEnv::mutex_set_align method was added.
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)
+ [Obsolete; use DbEnv::mutex_set_align instead.])],
+ [AC_MSG_ERROR(
+ [--with-mutexalign no longer supported, use DbEnv::mutex_set_align])])
AC_MSG_CHECKING([if --with-tcl=DIR option specified])
AC_ARG_WITH(tcl,
@@ -273,20 +288,4 @@ if test "$db_cv_test" = "yes"; then
if test "$db_cv_tcl" = "no"; then
AC_MSG_ERROR([--enable-test requires --enable-tcl])
fi
-fi
-
-# Uniquename excludes C++, Java, RPC.
-if test "$db_cv_uniquename" = "yes"; then
- if test "$db_cv_rpc" = "yes"; then
- AC_MSG_ERROR(
- [--with-uniquename is not compatible with --enable-rpc])
- fi
- if test "$db_cv_cxx" = "yes"; then
- AC_MSG_ERROR(
- [--with-uniquename is not compatible with --enable-cxx])
- fi
- if test "$db_cv_java" = "yes"; then
- AC_MSG_ERROR(
- [--with-uniquename is not compatible with --enable-java])
- fi
fi])
diff --git a/db/dist/aclocal/programs.ac b/db/dist/aclocal/programs.ac
index db6b4f03e..3fb61f045 100644
--- a/db/dist/aclocal/programs.ac
+++ b/db/dist/aclocal/programs.ac
@@ -1,71 +1,52 @@
-# $Id: programs.ac,v 11.22 2004/06/10 16:38:18 bostic Exp $
+# $Id: programs.ac,v 12.2 2006/07/06 14:00:28 bostic Exp $
# Check for programs used in building/installation.
AC_DEFUN(AM_PROGRAMS_SET, [
-AC_CHECK_TOOL(db_cv_path_ar, ar, missing_ar)
-if test "$db_cv_path_ar" = missing_ar; then
- AC_MSG_ERROR([No ar utility found.])
-fi
+AC_CHECK_TOOL(AR, ar, none)
+test "$AR" = "none" && AC_MSG_ERROR([No ar utility found.])
-AC_CHECK_TOOL(db_cv_path_chmod, chmod, missing_chmod)
-if test "$db_cv_path_chmod" = missing_chmod; then
- AC_MSG_ERROR([No chmod utility found.])
-fi
+AC_CHECK_TOOL(CHMOD, chmod, none)
+test "$CHMOD" = "none" && AC_MSG_ERROR([No chmod utility found.])
-AC_CHECK_TOOL(db_cv_path_cp, cp, missing_cp)
-if test "$db_cv_path_cp" = missing_cp; then
- AC_MSG_ERROR([No cp utility found.])
-fi
+AC_CHECK_TOOL(CP, cp, none)
+test "$CP" = "none" && AC_MSG_ERROR([No cp utility found.])
-AC_CHECK_TOOL(db_cv_path_ln, ln, missing_ln)
-if test "$db_cv_path_ln" = missing_ln; then
- AC_MSG_ERROR([No ln utility found.])
+# The Tcl test suite requires a kill utility.
+if test "$db_cv_test" = "yes"; then
+ AC_CHECK_TOOL(KILL, kill, none)
+ test "$KILL" = "none" && AC_MSG_ERROR([No kill utility found.])
fi
-AC_CHECK_TOOL(db_cv_path_mkdir, mkdir, missing_mkdir)
-if test "$db_cv_path_mkdir" = missing_mkdir; then
- AC_MSG_ERROR([No mkdir utility found.])
-fi
+AC_CHECK_TOOL(LN, ln, none)
+test "$LN" = "none" && AC_MSG_ERROR([No ln utility found.])
-# We need a complete path for ranlib, because it doesn't exist on some
-# architectures because the ar utility packages the library itself.
-AC_CHECK_TOOL(path_ranlib, ranlib, missing_ranlib)
-AC_PATH_PROG(db_cv_path_ranlib, $path_ranlib, missing_ranlib)
+AC_CHECK_TOOL(MKDIR, mkdir, none)
+test "$MKDIR" = "none" && AC_MSG_ERROR([No mkdir utility found.])
-AC_CHECK_TOOL(db_cv_path_rm, rm, missing_rm)
-if test "$db_cv_path_rm" = missing_rm; then
- AC_MSG_ERROR([No rm utility found.])
-fi
+# Ranlib doesn't exist on some architectures because the ar utility
+# packages the library itself.
+AC_CHECK_TOOL(RANLIB, ranlib, none)
+
+AC_CHECK_TOOL(RM, rm, none)
+test "$RM" = "none" && AC_MSG_ERROR([No rm utility found.])
if test "$db_cv_rpc" = "yes"; then
- AC_CHECK_TOOL(db_cv_path_rpcgen, rpcgen, missing_rpcgen)
- if test "$db_cv_path_rpcgen" = missing_rpcgen; then
- AC_MSG_ERROR([No rpcgen utility found.])
- fi
+ AC_CHECK_TOOL(RPCGEN, rpcgen, none)
+ test "$RPCGEN" = "none" && AC_MSG_ERROR([No rpcgen utility found.])
fi
-# We need a complete path for sh, because some implementations of make
-# get upset if SHELL is set to just the command name.
-AC_CHECK_TOOL(path_sh, sh, missing_sh)
-AC_PATH_PROG(db_cv_path_sh, $path_sh, missing_sh)
-if test "$db_cv_path_sh" = missing_sh; then
- AC_MSG_ERROR([No sh utility found.])
-fi
+# We need a complete path for sh, because some make utility implementations get
+# upset if SHELL is set to just the command name. Don't use the SHELL variable
+# here because the user likely has the SHELL variable set to something other
+# than the Bourne shell, which is what Make wants.
+AC_PATH_TOOL(db_cv_path_sh, sh, none)
+test "$db_cv_path_sh" = "none" && AC_MSG_ERROR([No sh utility found.])
# 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
+ STRIP="none"
else
- AC_CHECK_TOOL(path_strip, strip, missing_strip)
- AC_PATH_PROG(db_cv_path_strip, $path_strip, missing_strip)
-fi
-
-if test "$db_cv_test" = "yes"; then
- AC_CHECK_TOOL(db_cv_path_kill, kill, missing_kill)
- if test "$db_cv_path_kill" = missing_kill; then
- AC_MSG_ERROR([No kill utility found.])
- fi
-fi
-
-])
+ AC_CHECK_TOOL(STRIP, strip, none)
+ test "$STRIP" = "none" && AC_MSG_WARN([No strip utility found.])
+fi])
diff --git a/db/dist/aclocal/rpc.ac b/db/dist/aclocal/rpc.ac
index 7d7f4dabe..11fb0e925 100644
--- a/db/dist/aclocal/rpc.ac
+++ b/db/dist/aclocal/rpc.ac
@@ -1,4 +1,4 @@
-# $Id: rpc.ac,v 11.9 2004/09/27 21:33:48 mjc Exp $
+# $Id: rpc.ac,v 12.1 2006/05/08 20:52:36 bostic Exp $
# Try and configure RPC support.
AC_DEFUN(AM_RPC_CONFIGURE, [
@@ -71,13 +71,7 @@ AC_DEFUN(AM_RPC_CONFIGURE, [
RPC_CLIENT_OBJS="\$(RPC_CLIENT_OBJS)"
ADDITIONAL_PROGS="berkeley_db_svc $ADDITIONAL_PROGS"
- case "$host_os" in
- hpux*)
- AC_CHECK_FUNC(svc_run,,
- AC_CHECK_LIB(nsl, svc_run,
- 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
+ # Solaris and HPUX need the nsl library to build RPC.
+ AC_CHECK_FUNC(svc_run,,
+ AC_HAVE_LIBRARY(nsl, LIBSO_LIBS="$LIBSO_LIBS -lnsl"))
])
diff --git a/db/dist/aclocal/sequence.ac b/db/dist/aclocal/sequence.ac
index ca320b232..75cf19bfd 100644
--- a/db/dist/aclocal/sequence.ac
+++ b/db/dist/aclocal/sequence.ac
@@ -1,8 +1,9 @@
-# $Id: sequence.ac,v 1.3 2004/10/28 18:14:30 bostic Exp $
+# $Id: sequence.ac,v 12.3 2005/11/24 00:49:24 bostic Exp $
# Try and configure sequence support.
AC_DEFUN(AM_SEQUENCE_CONFIGURE, [
AC_MSG_CHECKING([for 64-bit integral type support for sequences])
+
db_cv_build_sequence="yes"
# Have to have found 64-bit types to support sequences. If we don't
@@ -14,13 +15,27 @@ AC_DEFUN(AM_SEQUENCE_CONFIGURE, [
db_cv_build_sequence="no"
fi
- # Have to be able to cast variables to the "unsigned long long" and
- # "long long" types, that's our cast for the printf "%ll[du]" format.
- if test "$ac_cv_type_long_long" = "no"; then
+ # Figure out what type is the right size, and set the format.
+ AC_SUBST(INT64_FMT)
+ AC_SUBST(UINT64_FMT)
+ db_cv_seq_type="no"
+ if test "$db_cv_build_sequence" = "yes" -a\
+ "$ac_cv_sizeof_long" -eq "8"; then
+ db_cv_seq_type="long"
+ db_cv_seq_fmt='"%ld"'
+ db_cv_seq_ufmt='"%lu"'
+ INT64_FMT='#define INT64_FMT "%ld"'
+ UINT64_FMT='#define UINT64_FMT "%lu"'
+ else if test "$db_cv_build_sequence" = "yes" -a\
+ "$ac_cv_sizeof_long_long" -eq "8"; then
+ db_cv_seq_type="long long"
+ db_cv_seq_fmt='"%lld"'
+ db_cv_seq_ufmt='"%llu"'
+ INT64_FMT='#define INT64_FMT "%lld"'
+ UINT64_FMT='#define UINT64_FMT "%llu"'
+ else
db_cv_build_sequence="no"
fi
- if test "$ac_cv_type_unsigned_long_long" = "no"; then
- db_cv_build_sequence="no"
fi
# Test to see if we can declare variables of the appropriate size
@@ -29,45 +44,45 @@ AC_DEFUN(AM_SEQUENCE_CONFIGURE, [
if test "$db_cv_build_sequence" = "yes"; then
AC_TRY_RUN([
main() {
- long long l;
- unsigned long long u;
- char buf[100];
+ $db_cv_seq_type l;
+ unsigned $db_cv_seq_type u;
+ char buf@<:@100@:>@;
- buf[0] = 'a';
+ buf@<:@0@:>@ = 'a';
l = 9223372036854775807LL;
- (void)snprintf(buf, sizeof(buf), "%lld", l);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_fmt, l);
if (strcmp(buf, "9223372036854775807"))
return (1);
u = 18446744073709551615ULL;
- (void)snprintf(buf, sizeof(buf), "%llu", u);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_ufmt, u);
if (strcmp(buf, "18446744073709551615"))
return (1);
return (0);
}],, [db_cv_build_sequence="no"],
AC_TRY_LINK(,[
- long long l;
- unsigned long long u;
- char buf[100];
+ $db_cv_seq_type l;
+ unsigned $db_cv_seq_type u;
+ char buf@<:@100@:>@;
- buf[0] = 'a';
+ buf@<:@0@:>@ = 'a';
l = 9223372036854775807LL;
- (void)snprintf(buf, sizeof(buf), "%lld", l);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_fmt, l);
if (strcmp(buf, "9223372036854775807"))
return (1);
u = 18446744073709551615ULL;
- (void)snprintf(buf, sizeof(buf), "%llu", u);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_ufmt, u);
if (strcmp(buf, "18446744073709551615"))
return (1);
return (0);
],, [db_cv_build_sequence="no"]))
fi
if test "$db_cv_build_sequence" = "yes"; then
- AC_DEFINE(HAVE_SEQUENCE)
- AH_TEMPLATE(HAVE_SEQUENCE,
- [Define to 1 if building sequence support.])
-
AC_SUBST(db_seq_decl)
db_seq_decl="typedef int64_t db_seq_t;";
+
+ AC_DEFINE(HAVE_64BIT_TYPES)
+ AH_TEMPLATE(HAVE_64BIT_TYPES,
+ [Define to 1 if 64-bit types are available.])
else
# It still has to compile, but it won't run.
db_seq_decl="typedef int db_seq_t;";
diff --git a/db/dist/aclocal/sosuffix.ac b/db/dist/aclocal/sosuffix.ac
index 8864280f1..bd391e248 100644
--- a/db/dist/aclocal/sosuffix.ac
+++ b/db/dist/aclocal/sosuffix.ac
@@ -1,4 +1,4 @@
-# $Id: sosuffix.ac,v 1.4 2004/08/14 20:00:45 dda Exp $
+# $Id: sosuffix.ac,v 12.0 2004/11/17 03:43:38 bostic Exp $
# Determine shared object suffixes.
#
# Our method is to use the libtool variable $library_names_spec,
diff --git a/db/dist/aclocal/tcl.ac b/db/dist/aclocal/tcl.ac
index d28d36083..360cf62b1 100644
--- a/db/dist/aclocal/tcl.ac
+++ b/db/dist/aclocal/tcl.ac
@@ -1,4 +1,4 @@
-# $Id: tcl.ac,v 11.18 2004/03/11 20:11:17 bostic Exp $
+# $Id: tcl.ac,v 12.2 2005/06/28 20:45:25 gmf 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
@@ -93,12 +93,11 @@ AC_DEFUN(SC_LOAD_TCLCONFIG, [
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
- #
- eval TCL_LIB_FILE="${TCL_LIB_FILE}"
- eval TCL_LIB_FLAG="${TCL_LIB_FLAG}"
+ # The eval is required to do substitution (for example, the TCL_DBGX
+ # substitution in the TCL_LIB_FILE variable.
+ eval "TCL_INCLUDE_SPEC=\"${TCL_INCLUDE_SPEC}\""
+ eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
+ eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
#
@@ -115,8 +114,9 @@ AC_DEFUN(SC_LOAD_TCLCONFIG, [
LIBTSO_LIBS="$LIBTSO_LIBS $TCL_LIB_SPEC $TCL_LIB_FLAG";;
esac
AC_SUBST(TCL_BIN_DIR)
- AC_SUBST(TCL_SRC_DIR)
+ AC_SUBST(TCL_INCLUDE_SPEC)
AC_SUBST(TCL_LIB_FILE)
+ AC_SUBST(TCL_SRC_DIR)
AC_SUBST(TCL_TCLSH)
TCL_TCLSH="${TCL_PREFIX}/bin/tclsh${TCL_VERSION}"
@@ -128,14 +128,8 @@ AC_DEFUN(AM_TCL_LOAD, [
AC_MSG_ERROR([Tcl requires shared libraries])
fi
- AC_SUBST(TCFLAGS)
-
SC_PATH_TCLCONFIG
SC_LOAD_TCLCONFIG
- 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)"
])
diff --git a/db/dist/aclocal/types.ac b/db/dist/aclocal/types.ac
index b5843385c..f9291386d 100644
--- a/db/dist/aclocal/types.ac
+++ b/db/dist/aclocal/types.ac
@@ -1,4 +1,4 @@
-# $Id: types.ac,v 11.18 2004/10/25 18:14:14 bostic Exp $
+# $Id: types.ac,v 12.3 2005/11/03 17:46:14 bostic Exp $
# Check the sizes we know about, and see if any of them match what's needed.
#
@@ -68,6 +68,11 @@ AC_CHECK_HEADER(stddef.h, [
db_includes="$db_includes
#include <stddef.h>"
stddef_h_decl="#include <stddef.h>"])
+AC_SUBST(unistd_h_decl)
+AC_CHECK_HEADER(unistd.h, [
+ db_includes="$db_includes
+#include <unistd.h>"
+ unistd_h_decl="#include <unistd.h>"])
db_includes="$db_includes
#include <stdio.h>"
@@ -76,10 +81,6 @@ db_includes="$db_includes
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)
-# Check for long long and unsigned long long, we only support sequences
-# if those types are available.
-AC_CHECK_TYPES([long long, unsigned long long],,, $db_includes)
-
# We need to know the sizes of various objects on this system.
AC_CHECK_SIZEOF(char,, $db_includes)
AC_CHECK_SIZEOF(unsigned char,, $db_includes)
@@ -148,6 +149,9 @@ AC_CHECK_TYPE(ssize_t,,
[AM_SEARCH_SSIZES(ssize_t_decl, ssize_t, $ac_cv_sizeof_size_t)],
$db_includes)
+# So far, no autoconf'd systems lack pid_t.
+AC_SUBST(pid_t_decl)
+
# Check for uintmax_t -- if none exists, first the largest unsigned integral
# type available.
AC_SUBST(uintmax_t_decl)
diff --git a/db/dist/aclocal_java/ac_check_class.ac b/db/dist/aclocal_java/ac_check_class.ac
index 915198af5..b12e7f02f 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 12.0 2004/11/17 03:43:38 bostic 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 4a78d0f87..b18d479b3 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 12.0 2004/11/17 03:43:38 bostic 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 3b81d1dc3..cc02e3276 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 12.0 2004/11/17 03:43:38 bostic 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 ab62e33c8..c7c26b877 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 12.0 2004/11/17 03:43:38 bostic 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 567afca7f..e71adfe68 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 12.0 2004/11/17 03:43:38 bostic 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 b70d108d6..177f62f85 100644
--- a/db/dist/aclocal_java/ac_jni_include_dirs.ac
+++ b/db/dist/aclocal_java/ac_jni_include_dirs.ac
@@ -27,8 +27,8 @@ dnl
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.12 2003/10/05 18:10:06 dda Exp $
+dnl @author Don Anderson
+dnl @version $Id: ac_jni_include_dirs.ac,v 12.1 2006/08/24 14:45:36 bostic Exp $
dnl
AC_DEFUN(AC_JNI_INCLUDE_DIR,[
diff --git a/db/dist/aclocal_java/ac_prog_jar.ac b/db/dist/aclocal_java/ac_prog_jar.ac
index 9dfa1be6d..c60a79a85 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 12.0 2004/11/17 03:43:38 bostic 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 67a879ffc..05c65e7c4 100644
--- a/db/dist/aclocal_java/ac_prog_java.ac
+++ b/db/dist/aclocal_java/ac_prog_java.ac
@@ -62,9 +62,9 @@ dnl
dnl AC_OUTPUT(Makefile)
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version $Id: ac_prog_java.ac,v 1.2 2003/05/10 17:46:09 dda Exp $
+dnl @version $Id: ac_prog_java.ac,v 12.1 2006/08/24 14:45:36 bostic Exp $
dnl
-dnl Note: Modified by dda@sleepycat.com to prefer java over kaffe. [#8059]
+dnl Note: Modified to prefer java over kaffe. [#8059]
dnl
AC_DEFUN([AC_PROG_JAVA],[
AC_REQUIRE([AC_EXEEXT])dnl
diff --git a/db/dist/aclocal_java/ac_prog_java_works.ac b/db/dist/aclocal_java/ac_prog_java_works.ac
index 36acd2676..f0ff8c57f 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 12.0 2004/11/17 03:43:38 bostic 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 5ded7d1b7..b3607dcf8 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 12.0 2004/11/17 03:43:38 bostic 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 139a99f98..0cfd1f213 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 12.0 2004/11/17 03:43:38 bostic 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 5154d3f1f..36b95bd00 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 12.0 2004/11/17 03:43:38 bostic 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 1b16d9e24..7563036c0 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 12.0 2004/11/17 03:43:38 bostic 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 775569ba0..d22aeab42 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 12.0 2004/11/17 03:43:38 bostic 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 cf91306af..012493588 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 12.0 2004/11/17 03:43:38 bostic 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 2537376a8..1d2263cb5 100644
--- a/db/dist/buildrel
+++ b/db/dist/buildrel
@@ -1,11 +1,12 @@
-# $Id: buildrel,v 1.65 2004/11/09 01:26:29 bostic Exp $
+# $Id: buildrel,v 12.14 2006/09/20 01:12:33 bostic Exp $
#
# Build the distribution package.
#
# A set of commands intended to be cut and pasted into a csh window.
-# Development tree, release home.
-setenv D `pwd`
+setenv D ~bostic/berkeleydb/db.rel
+setenv DBCONF "~bostic/bin/dbconf thread"
+setenv TARGETDIR ~bostic/berkeleydb/
# Update the release number.
cd $D/dist
@@ -24,7 +25,7 @@ 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
+setenv R $TARGETDIR/db-$VERSION
rm -rf $R && mkdir -p $R
cd $D && cvs -q status | \
grep "Repository revision" | \
@@ -38,19 +39,25 @@ cd db_docs && sh build $D clean && sh build $D |& sed '/.html$/d'
cd je/docs_src && sh build db ../../db
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
+########################################
+# PATCH RELEASE: starting point.
+########################################
# Fix symbolic links and permissions.
cd $R/dist && sh s_perm
cd $R/dist && sh s_symlink
+# Remove source directories we don't distribute.
+cd $R && rm -rf build_brew os_brew
+cd $R && rm -rf docs_src docs/api_java docs/api_c/pindex.src
+cd $R && rm -rf java/src/com/sleepycat/xa
+cd $R && rm -rf rpc_server/java
+cd $R && rm -rf test/TODO test/upgrade test_perf test_purify
+cd $R && rm -rf test_rep test_server test_thread test_vxworks test_xa
+
# Build a version and smoke test.
cd $R && rm -rf build_run && mkdir build_run
-cd $R/build_run && ~bostic/bin/dbconf && make >& mklog
+cd $R/build_run && $DBCONF && make >& mklog
cd $R/build_run && make ex_access && ./ex_access
# Check the install
@@ -67,7 +74,7 @@ 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 && chmod 664 build_windows/*.dsp
cd $R/dist && sh s_perm
chown -R 100 $R
chgrp -R 100 $R
@@ -88,14 +95,14 @@ awk '{ if (length() > 99) print "Path length: " length() " bytes: " $0;}'
# Create the non-crypto tree.
setenv RNC "$R/../db-$VERSION.NC"
rm -rf $RNC $R/../__TMP && mkdir $R/../__TMP
-cd $R/../__TMP && gzcat $T | tar xpf - && mv -i db-$VERSION $RNC
+cd $R/../__TMP && gzcat $T | pax -r && mv -i db-$VERSION $RNC
cd $R && rm -rf $R/../__TMP
cd $RNC/dist && sh s_crypto
# ACQUIRE ROOT PRIVILEGES
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 && chmod 664 build_windows/*.dsp
cd $RNC/dist && sh s_perm
chown -R 100 $RNC
chgrp -R 100 $RNC
@@ -112,17 +119,25 @@ awk '{ if (length() > 99) print "Path length: " length() " bytes: " $0;}'
# Remove tags files. They're large and we don't want to store symbolic links
# in the zip archive for portability reasons.
+#
+# Modify the text files to have Windows end-of-line characters.
# ACQUIRE ROOT PRIVILEGES
cd $R && rm -f `find . -name 'tags'`
cd $RNC && rm -f `find . -name 'tags'`
+
+set t=__tmp
+cd $R && awk '{print $0 "\r"}' < LICENSE > $t && cp $t LICENSE && rm -f $t
+cd $R && awk '{print $0 "\r"}' < README > $t && cp $t README && rm -f $t
+cd $RNC && awk '{print $0 "\r"}' < LICENSE > $t && cp $t LICENSE && rm -f $t
+cd $RNC && awk '{print $0 "\r"}' < README > $t && cp $t README && rm -f $t
# DISCARD ROOT PRIVILEGES
# Create the crypto zip archive release.
setenv T "$R/../db-$VERSION.zip"
-cd $R/.. && zip -r - db-$VERSION > $T
+cd $R/.. && zip -q -r - db-$VERSION > $T
chmod 444 $T
# Create the non-crypto zip archive release.
setenv T "$R/../db-$VERSION.NC.zip"
-cd $RNC/.. && zip -r - db-$VERSION.NC > $T
+cd $RNC/.. && zip -q -r - db-$VERSION.NC > $T
chmod 444 $T
diff --git a/db/dist/clib_port.h b/db/dist/clib_port.h
new file mode 100644
index 000000000..cfefbb37d
--- /dev/null
+++ b/db/dist/clib_port.h
@@ -0,0 +1,97 @@
+/*
+ * Exit success/failure macros.
+ */
+#ifndef HAVE_EXIT_SUCCESS
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+#endif
+
+/*
+ * 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.
+ */
+#ifndef HAVE_ATOI
+#define atoi __db_Catoi
+#endif
+#ifndef HAVE_ATOL
+#define atol __db_Catol
+#endif
+#ifndef HAVE_GETADDRINFO
+#define freeaddrinfo(a) __db_Cfreeaddrinfo(a)
+#define getaddrinfo(a, b, c, d) __db_Cgetaddrinfo(a, b, c, d)
+#endif
+#ifndef HAVE_GETCWD
+#define getcwd __db_Cgetcwd
+#endif
+#ifndef HAVE_GETOPT
+#define getopt __db_Cgetopt
+#define optarg __db_Coptarg
+#define opterr __db_Copterr
+#define optind __db_Coptind
+#define optopt __db_Coptopt
+#define optreset __db_Coptreset
+#endif
+#ifndef HAVE_ISSPACE
+#define isspace __db_Cisspace
+#endif
+#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_PRINTF
+#define printf __db_Cprintf
+#define fprintf __db_Cfprintf
+#endif
+#ifndef HAVE_RAISE
+#define raise __db_Craise
+#endif
+#ifndef HAVE_RAND
+#define rand __db_Crand
+#define srand __db_Csrand
+#endif
+#ifndef HAVE_SNPRINTF
+#define snprintf __db_Csnprintf
+#endif
+#ifndef HAVE_STRCASECMP
+#define strcasecmp __db_Cstrcasecmp
+#define strncasecmp __db_Cstrncasecmp
+#endif
+#ifndef HAVE_STRCAT
+#define strcat __db_Cstrcat
+#endif
+#ifndef HAVE_STRCHR
+#define strchr __db_Cstrchr
+#endif
+#ifndef HAVE_STRDUP
+#define strdup __db_Cstrdup
+#endif
+#ifndef HAVE_STRERROR
+#define strerror __db_Cstrerror
+#endif
+#ifndef HAVE_STRNCAT
+#define strncat __db_Cstrncat
+#endif
+#ifndef HAVE_STRNCMP
+#define strncmp __db_Cstrncmp
+#endif
+#ifndef HAVE_STRRCHR
+#define strrchr __db_Cstrrchr
+#endif
+#ifndef HAVE_STRSEP
+#define strsep __db_Cstrsep
+#endif
+#ifndef HAVE_STRTOL
+#define strtol __db_Cstrtol
+#endif
+#ifndef HAVE_STRTOUL
+#define strtoul __db_Cstrtoul
+#endif
+#ifndef HAVE_VSNPRINTF
+#define vsnprintf __db_Cvsnprintf
+#endif
diff --git a/db/dist/config.guess b/db/dist/config.guess
index 7d0185e01..396482d6c 100755
--- a/db/dist/config.guess
+++ b/db/dist/config.guess
@@ -1,9 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
-timestamp='2004-09-07'
+timestamp='2006-07-02'
# 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
@@ -17,13 +18,15 @@ timestamp='2004-09-07'
#
# 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.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
# 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.
@@ -53,7 +56,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
@@ -66,11 +69,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
+ echo "$timestamp" ; exit ;;
--version | -v )
- echo "$version" ; exit 0 ;;
+ echo "$version" ; exit ;;
--help | --h* | -h )
- echo "$usage"; exit 0 ;;
+ echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
@@ -104,7 +107,7 @@ 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" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$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 ; } ;
@@ -123,7 +126,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
+esac ; set_cc_for_build= ;'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
@@ -196,55 +199,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}"
- exit 0 ;;
- amd64:OpenBSD:*:*)
- echo x86_64-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- cats:OpenBSD:*:*)
- echo arm-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- luna88k:OpenBSD:*:*)
- echo m88k-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 ;;
- sgi:OpenBSD:*:*)
- echo mips64-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
*:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
macppc:MirBSD:*:*)
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- exit 0 ;;
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -297,37 +268,43 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
+ exit ;;
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
# of the specific Alpha model?
echo alpha-pc-interix
- exit 0 ;;
+ exit ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
- exit 0 ;;
+ exit ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-unknown-sysv4
- exit 0;;
+ exit ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
+ exit ;;
*:[Mm]orph[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-morphos
- exit 0 ;;
+ exit ;;
*:OS/390:*:*)
echo i370-ibm-openedition
- exit 0 ;;
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
*:OS400:*:*)
echo powerpc-ibm-os400
- exit 0 ;;
+ exit ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
+ exit ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -335,32 +312,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
else
echo pyramid-pyramid-bsd
fi
- exit 0 ;;
+ exit ;;
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
- exit 0 ;;
+ exit ;;
DRS?6000:unix:4.0:6*)
echo sparc-icl-nx6
- exit 0 ;;
- DRS?6000:UNIX_SV:4.2*:7*)
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7 && exit 0 ;;
+ sparc) echo sparc-icl-nx7; exit ;;
esac ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
i86pc:SunOS:5.*:*)
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
sun4*:SunOS:*:*)
case "`/usr/bin/arch -k`" in
Series*|S4*)
@@ -369,10 +346,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
+ exit ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
@@ -384,10 +361,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo sparc-sun-sunos${UNAME_RELEASE}
;;
esac
- exit 0 ;;
+ exit ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
# 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
@@ -398,40 +375,40 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
- exit 0 ;;
+ exit ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -455,32 +432,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exit (-1);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c \
- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && exit 0
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
Motorola:PowerMAX_OS:*:*)
echo powerpc-motorola-powermax
- exit 0 ;;
+ exit ;;
Motorola:*:4.3:PL8-*)
echo powerpc-harris-powermax
- exit 0 ;;
+ exit ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
echo powerpc-harris-powermax
- exit 0 ;;
+ exit ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
- exit 0 ;;
+ exit ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
- exit 0 ;;
+ exit ;;
m88k:*:4*:R4*)
echo m88k-motorola-sysv4
- exit 0 ;;
+ exit ;;
m88k:*:3*:R3*)
echo m88k-motorola-sysv3
- exit 0 ;;
+ exit ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
@@ -496,29 +474,29 @@ EOF
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit 0 ;;
+ exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
- exit 0 ;;
+ exit ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
echo m88k-motorola-sysv3
- exit 0 ;;
+ exit ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
echo m88k-tektronix-sysv3
- exit 0 ;;
+ exit ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
echo m68k-tektronix-bsd
- exit 0 ;;
+ exit ;;
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
+ exit ;;
????????: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 '
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
echo i386-ibm-aix
- exit 0 ;;
+ exit ;;
ia64:AIX:*:*)
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
@@ -526,7 +504,7 @@ EOF
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
+ exit ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
eval $set_cc_for_build
@@ -541,14 +519,18 @@ EOF
exit(0);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- echo rs6000-ibm-aix3.2.5
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
else
echo rs6000-ibm-aix3.2
fi
- exit 0 ;;
+ exit ;;
*: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
@@ -562,28 +544,28 @@ EOF
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
+ exit ;;
*:AIX:*:*)
echo rs6000-ibm-aix
- exit 0 ;;
+ exit ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
- exit 0 ;;
+ exit ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
+ exit ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
- exit 0 ;;
+ exit ;;
DPX/2?00:B.O.S.:*:*)
echo m68k-bull-sysv3
- exit 0 ;;
+ exit ;;
9000/[34]??:4.3bsd:1.*:*)
echo m68k-hp-bsd
- exit 0 ;;
+ exit ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
- exit 0 ;;
+ exit ;;
9000/[34678]??:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
@@ -645,9 +627,19 @@ EOF
esac
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
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
then
HP_ARCH="hppa2.0w"
else
@@ -655,11 +647,11 @@ EOF
fi
fi
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
+ exit ;;
ia64:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
+ exit ;;
3050*:HI-UX:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -687,158 +679,179 @@ EOF
exit (0);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
echo unknown-hitachi-hiuxwe2
- exit 0 ;;
+ exit ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
- exit 0 ;;
+ exit ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
- exit 0 ;;
+ exit ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
- exit 0 ;;
+ exit ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
- exit 0 ;;
+ exit ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
- exit 0 ;;
+ exit ;;
i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
echo ${UNAME_MACHINE}-unknown-osf1
fi
- exit 0 ;;
+ exit ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
- exit 0 ;;
+ exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit 0 ;;
+ exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit 0 ;;
+ exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit 0 ;;
+ exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit 0 ;;
+ exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit 0 ;;
+ exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*T3E:*:*:*)
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
*:UNICOS/mp:*:*)
echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
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 "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
+ exit ;;
5000:UNIX_System_V:4.*:*)
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
+ exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
+ exit ;;
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit 0 ;;
+ exit ;;
+ x86:Interix*:[3456]*)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T:Interix*:[3456]*)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
- exit 0 ;;
+ exit ;;
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 i586-pc-interix
- exit 0 ;;
+ exit ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
- exit 0 ;;
+ exit ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
*:GNU:*:*)
# the GNU system
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
+ exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit 0 ;;
+ exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
+ exit ;;
arm*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
cris:Linux:*:*)
echo cris-axis-linux-gnu
- exit 0 ;;
+ exit ;;
crisv32:Linux:*:*)
echo crisv32-axis-linux-gnu
- exit 0 ;;
+ exit ;;
frv:Linux:*:*)
echo frv-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
ia64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
m32r*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
mips:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -855,8 +868,12 @@ EOF
#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
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
mips64:Linux:*:*)
eval $set_cc_for_build
@@ -874,15 +891,22 @@ EOF
#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
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
ppc:Linux:*:*)
echo powerpc-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
ppc64:Linux:*:*)
echo powerpc64-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
EV5) UNAME_MACHINE=alphaev5 ;;
@@ -896,7 +920,7 @@ EOF
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 ;;
+ exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -904,25 +928,28 @@ EOF
PA8*) echo hppa2.0-unknown-linux-gnu ;;
*) echo hppa-unknown-linux-gnu ;;
esac
- exit 0 ;;
+ exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
echo hppa64-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
+ exit ;;
sh64*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
x86_64:Linux:*:*)
echo x86_64-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
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
@@ -940,15 +967,15 @@ EOF
;;
a.out-i386-linux)
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
+ exit ;;
coff-i386)
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
+ exit ;;
"")
# 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 ;;
+ exit ;;
esac
# Determine whether the default compiler is a.out or elf
eval $set_cc_for_build
@@ -965,7 +992,7 @@ EOF
LIBC=gnulibc1
# endif
#else
- #ifdef __INTEL_COMPILER
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
LIBC=gnu
#else
LIBC=gnuaout
@@ -975,16 +1002,23 @@ EOF
LIBC=dietlibc
#endif
EOF
- 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
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
;;
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 ;;
+ exit ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
@@ -992,27 +1026,27 @@ EOF
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
+ exit ;;
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 ;;
+ exit ;;
i*86:XTS-300:*:STOP)
echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
+ exit ;;
i*86:atheos:*:*)
echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
- i*86:syllable:*:*)
+ exit ;;
+ i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable
- exit 0 ;;
+ exit ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
+ exit ;;
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
@@ -1020,15 +1054,16 @@ EOF
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
- exit 0 ;;
- i*86:*:5:[78]*)
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
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 ;;
+ exit ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1046,73 +1081,73 @@ EOF
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
- exit 0 ;;
+ exit ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
echo i386-pc-msdosdjgpp
- exit 0 ;;
+ exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
- exit 0 ;;
+ exit ;;
paragon:*:*:*)
echo i860-intel-osf1
- exit 0 ;;
+ exit ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
fi
- exit 0 ;;
+ exit ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
echo m68010-convergent-sysv
- exit 0 ;;
+ exit ;;
mc68k:UNIX:SYSTEM5:3.51m)
echo m68k-convergent-sysv
- exit 0 ;;
+ exit ;;
M680?0:D-NIX:5.3:*)
echo m68k-diab-dnix
- exit 0 ;;
+ exit ;;
M68*:*:R3V[5678]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
3[345]??:*: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 | S7501*:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
+ && { echo i486-ncr-sysv4; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
- exit 0 ;;
+ exit ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
RM*:ReliantUNIX-*:*:*)
echo mips-sni-sysv4
- exit 0 ;;
+ exit ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
- exit 0 ;;
+ exit ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1120,69 +1155,72 @@ EOF
else
echo ns32k-sni-sysv
fi
- exit 0 ;;
+ exit ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
echo i586-unisys-sysv4
- exit 0 ;;
+ exit ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
echo hppa1.1-stratus-sysv4
- exit 0 ;;
+ exit ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
- exit 0 ;;
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
echo hppa1.1-stratus-vos
- exit 0 ;;
+ exit ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
news*:NEWS-OS:6*:*)
echo mips-sony-newsos6
- exit 0 ;;
+ exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit 0 ;;
+ exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
- exit 0 ;;
+ exit ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
- exit 0 ;;
+ exit ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
- exit 0 ;;
+ exit ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
SX-6:SUPER-UX:*:*)
echo sx6-nec-superux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
case $UNAME_PROCESSOR in
- *86) UNAME_PROCESSOR=i686 ;;
unknown) UNAME_PROCESSOR=powerpc ;;
esac
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = "x86"; then
@@ -1190,22 +1228,25 @@ EOF
UNAME_MACHINE=pc
fi
echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:QNX:*:4*)
echo i386-pc-qnx
- exit 0 ;;
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
NSR-?:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:NonStop-UX:*:*)
echo mips-compaq-nonstopux
- exit 0 ;;
+ exit ;;
BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv
- exit 0 ;;
+ exit ;;
DS/*:UNIX_System_V:*:*)
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
@@ -1216,38 +1257,47 @@ EOF
UNAME_MACHINE="$cputype"
fi
echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
+ exit ;;
*:TOPS-10:*:*)
echo pdp10-unknown-tops10
- exit 0 ;;
+ exit ;;
*:TENEX:*:*)
echo pdp10-unknown-tenex
- exit 0 ;;
+ exit ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
echo pdp10-dec-tops20
- exit 0 ;;
+ exit ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
echo pdp10-xkl-tops20
- exit 0 ;;
+ exit ;;
*:TOPS-20:*:*)
echo pdp10-unknown-tops20
- exit 0 ;;
+ exit ;;
*:ITS:*:*)
echo pdp10-unknown-its
- exit 0 ;;
+ exit ;;
SEI:*:*:SEIUX)
echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:DragonFly:*:*)
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
+ exit ;;
*:*VMS:*:*)
UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms && exit 0 ;;
- I*) echo ia64-dec-vms && exit 0 ;;
- V*) echo vax-dec-vms && exit 0 ;;
- esac
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1279,7 +1329,7 @@ main ()
#endif
#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
+ printf ("arm-acorn-riscix\n"); exit (0);
#endif
#if defined (hp300) && !defined (hpux)
@@ -1368,11 +1418,12 @@ main ()
}
EOF
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
# Apollos put the system type in the environment.
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
# Convex versions that predate uname can use getsysinfo(1)
@@ -1381,22 +1432,22 @@ then
case `getsysinfo -f cpu_type` in
c1*)
echo c1-convex-bsd
- exit 0 ;;
+ exit ;;
c2*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit 0 ;;
+ exit ;;
c34*)
echo c34-convex-bsd
- exit 0 ;;
+ exit ;;
c38*)
echo c38-convex-bsd
- exit 0 ;;
+ exit ;;
c4*)
echo c4-convex-bsd
- exit 0 ;;
+ exit ;;
esac
fi
@@ -1407,7 +1458,9 @@ 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/
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
If the version you run ($0) is already up to date, please
send the following data and any information you think might be
diff --git a/db/dist/config.hin b/db/dist/config.hin
index 28d618102..d4a3f3138 100644
--- a/db/dist/config.hin
+++ b/db/dist/config.hin
@@ -21,12 +21,30 @@
/* Define to 1 if you want a version with run-time diagnostic checking. */
#undef DIAGNOSTIC
+/* Define to 1 if 64-bit types are available. */
+#undef HAVE_64BIT_TYPES
+
+/* Define to 1 if you have the `abort' function. */
+#undef HAVE_ABORT
+
+/* Define to 1 if you have the `atoi' function. */
+#undef HAVE_ATOI
+
+/* Define to 1 if you have the `atol' function. */
+#undef HAVE_ATOL
+
/* Define to 1 if you have the `clock_gettime' function. */
#undef HAVE_CLOCK_GETTIME
/* Define to 1 if Berkeley DB release includes strong cryptography. */
#undef HAVE_CRYPTO
+/* Define to 1 if you have the `ctime_r' function. */
+#undef HAVE_CTIME_R
+
+/* Define to 1 if ctime_r takes a buffer length as a third argument. */
+#undef HAVE_CTIME_R_3ARG
+
/* Define to 1 if you have the `directio' function. */
#undef HAVE_DIRECTIO
@@ -40,6 +58,12 @@
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
#undef HAVE_EXIT_SUCCESS
+/* Define to 1 if you have the `fchmod' function. */
+#undef HAVE_FCHMOD
+
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
+
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
#undef HAVE_FCNTL_F_SETFD
@@ -52,9 +76,15 @@
/* Define to 1 if you have the `ftruncate' function. */
#undef HAVE_FTRUNCATE
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
/* Define to 1 if you have the `getcwd' function. */
#undef HAVE_GETCWD
+/* Define to 1 if you have the `getenv' function. */
+#undef HAVE_GETENV
+
/* Define to 1 if you have the `getopt' function. */
#undef HAVE_GETOPT
@@ -73,11 +103,17 @@
/* 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 `isalpha' function. */
+#undef HAVE_ISALPHA
+
+/* Define to 1 if you have the `isdigit' function. */
+#undef HAVE_ISDIGIT
-/* Define to 1 if the system has the type `long long'. */
-#undef HAVE_LONG_LONG
+/* Define to 1 if you have the `isprint' function. */
+#undef HAVE_ISPRINT
+
+/* Define to 1 if you have the `isspace' function. */
+#undef HAVE_ISSPACE
/* Define to 1 if you have the `memcmp' function. */
#undef HAVE_MEMCMP
@@ -97,6 +133,9 @@
/* Define to 1 if you have the `mmap' function. */
#undef HAVE_MMAP
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
/* Define to 1 if you have the `munlock' function. */
#undef HAVE_MUNLOCK
@@ -131,6 +170,9 @@
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
#undef HAVE_MUTEX_IA64_GCC_ASSEMBLY
+/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
+#undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY
+
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
#undef HAVE_MUTEX_MSEM_INIT
@@ -172,9 +214,6 @@
/* Define to 1 if mutexes hold system resources. */
#undef HAVE_MUTEX_SYSTEM_RESOURCES
-/* Define to 1 if fast mutexes are available. */
-#undef HAVE_MUTEX_THREADS
-
/* Define to 1 to configure mutexes intra-process only. */
#undef HAVE_MUTEX_THREAD_ONLY
@@ -199,6 +238,9 @@
/* 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 amd64 assembly language mutexes. */
+#undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
#undef HAVE_MUTEX_X86_GCC_ASSEMBLY
@@ -211,9 +253,18 @@
/* Define to 1 if you have the `pread' function. */
#undef HAVE_PREAD
+/* Define to 1 if you have the `printf' function. */
+#undef HAVE_PRINTF
+
/* Define to 1 if you have the `pstat_getdynamic' function. */
#undef HAVE_PSTAT_GETDYNAMIC
+/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
+#undef HAVE_PTHREAD_API
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#undef HAVE_PTHREAD_YIELD
+
/* Define to 1 if you have the `pwrite' function. */
#undef HAVE_PWRITE
@@ -232,6 +283,9 @@
/* Define to 1 if building replication support. */
#undef HAVE_REPLICATION
+/* Define to 1 if building the Berkeley DB replication framework. */
+#undef HAVE_REPLICATION_THREADS
+
/* Define to 1 if building RPC client/server. */
#undef HAVE_RPC
@@ -241,17 +295,20 @@
/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
-/* Define to 1 if building sequence support. */
-#undef HAVE_SEQUENCE
-
/* Define to 1 if you have the `shmget' function. */
#undef HAVE_SHMGET
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if thread identifier type db_threadid_t is integral. */
+#undef HAVE_SIMPLE_THREAD_TYPE
+
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
-/* Define to 1 if you have the `srand' function. */
-#undef HAVE_SRAND
+/* Define to 1 if you have the `stat' function. */
+#undef HAVE_STAT
/* Define to 1 if building statistics support. */
#undef HAVE_STATISTICS
@@ -265,18 +322,39 @@
/* Define to 1 if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP
+/* Define to 1 if you have the `strcat' function. */
+#undef HAVE_STRCAT
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
/* 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 to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
/* 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 `strncat' function. */
+#undef HAVE_STRNCAT
+
+/* Define to 1 if you have the `strncmp' function. */
+#undef HAVE_STRNCMP
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strsep' function. */
+#undef HAVE_STRSEP
+
/* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL
@@ -318,9 +396,6 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
#undef HAVE_UNLINK_WITH_OPEN_FAILURE
-/* Define to 1 if the system has the type `unsigned long long'. */
-#undef HAVE_UNSIGNED_LONG_LONG
-
/* Define to 1 if building access method verification support. */
#undef HAVE_VERIFY
@@ -336,9 +411,6 @@
/* 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. */
#undef PACKAGE_BUGREPORT
@@ -354,40 +426,40 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
-/* The size of a `char', as computed by sizeof. */
+/* The size of `char', as computed by sizeof. */
#undef SIZEOF_CHAR
-/* The size of a `char *', as computed by sizeof. */
+/* The size of `char *', as computed by sizeof. */
#undef SIZEOF_CHAR_P
-/* The size of a `int', as computed by sizeof. */
+/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT
-/* The size of a `long', as computed by sizeof. */
+/* The size of `long', as computed by sizeof. */
#undef SIZEOF_LONG
-/* The size of a `long long', as computed by sizeof. */
+/* The size of `long long', as computed by sizeof. */
#undef SIZEOF_LONG_LONG
-/* The size of a `short', as computed by sizeof. */
+/* The size of `short', as computed by sizeof. */
#undef SIZEOF_SHORT
-/* The size of a `size_t', as computed by sizeof. */
+/* The size of `size_t', as computed by sizeof. */
#undef SIZEOF_SIZE_T
-/* The size of a `unsigned char', as computed by sizeof. */
+/* The size of `unsigned char', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_CHAR
-/* The size of a `unsigned int', as computed by sizeof. */
+/* The size of `unsigned int', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_INT
-/* The size of a `unsigned long', as computed by sizeof. */
+/* The size of `unsigned long', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_LONG
-/* The size of a `unsigned long long', as computed by sizeof. */
+/* The size of `unsigned long long', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_LONG_LONG
-/* The size of a `unsigned short', as computed by sizeof. */
+/* The size of `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. */
@@ -411,47 +483,7 @@
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
-/*
- * Exit success/failure macros.
- */
-#ifndef HAVE_EXIT_SUCCESS
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-#endif
-
-/*
- * 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.
- */
-#ifndef HAVE_GETCWD
-#define getcwd __db_Cgetcwd
-#endif
-#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
+#include "clib_port.h"
#ifdef DB_WIN32
#include "win_db.h"
diff --git a/db/dist/config.sub b/db/dist/config.sub
index edb6b663c..53954dbe9 100755
--- a/db/dist/config.sub
+++ b/db/dist/config.sub
@@ -1,9 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+# Inc.
-timestamp='2004-08-29'
+timestamp='2006-08-14'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -21,14 +22,15 @@ timestamp='2004-08-29'
#
# 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.
-
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
# Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry.
#
@@ -70,7 +72,7 @@ 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, 2002, 2003, 2004
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
@@ -83,11 +85,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
+ echo "$timestamp" ; exit ;;
--version | -v )
- echo "$version" ; exit 0 ;;
+ echo "$version" ; exit ;;
--help | --h* | -h )
- echo "$usage"; exit 0 ;;
+ echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
@@ -99,7 +101,7 @@ while test $# -gt 0 ; do
*local*)
# First pass through any local machine types.
echo $1
- exit 0;;
+ exit ;;
* )
break ;;
@@ -118,8 +120,9 @@ 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* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -170,6 +173,10 @@ case $os in
-hiux*)
os=-hiuxwe2
;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-sco5)
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -186,6 +193,10 @@ case $os in
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -230,14 +241,16 @@ case $basic_machine in
| 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 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
| 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 | m32rle | m68000 | m68k | m88k | mcore \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
@@ -246,6 +259,7 @@ case $basic_machine in
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
| mipsisa64 | mipsisa64el \
@@ -254,20 +268,23 @@ case $basic_machine in
| mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
+ | mt \
| msp430 \
+ | nios | nios2 \
| ns16k | ns32k \
- | openrisc | or32 \
+ | 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 \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
| v850 | v850e \
| we32k \
- | x86 | xscale | xstormy16 | xtensa \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
| z8k)
basic_machine=$basic_machine-unknown
;;
@@ -278,6 +295,9 @@ case $basic_machine in
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -297,8 +317,8 @@ case $basic_machine in
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bs2000-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
@@ -308,9 +328,9 @@ case $basic_machine in
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
+ | m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
@@ -319,6 +339,7 @@ case $basic_machine in
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
| mipsisa64-* | mipsisa64el-* \
@@ -327,24 +348,27 @@ case $basic_machine in
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
+ | mt-* \
| msp430-* \
+ | nios-* | nios2-* \
| none-* | np1-* | 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-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tron-* \
| v850-* | v850e-* | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- | xtensa-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
| ymp-* \
| z8k-*)
;;
@@ -489,6 +513,10 @@ case $basic_machine in
basic_machine=m88k-motorola
os=-sysv3
;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
dpx20 | dpx20-*)
basic_machine=rs6000-bull
os=-bosx
@@ -679,6 +707,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-msdos
;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
mvs)
basic_machine=i370-ibm
os=-mvs
@@ -754,9 +785,8 @@ case $basic_machine in
basic_machine=hppa1.1-oki
os=-proelf
;;
- or32 | or32-*)
+ openrisc | openrisc-*)
basic_machine=or32-unknown
- os=-coff
;;
os400)
basic_machine=powerpc-ibm
@@ -787,6 +817,12 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
@@ -843,6 +879,10 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@@ -869,6 +909,10 @@ case $basic_machine in
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
sei)
basic_machine=mips-sei
os=-seiux
@@ -1029,6 +1073,10 @@ case $basic_machine in
basic_machine=hppa1.1-winbond
os=-proelf
;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
xps | xps100)
basic_machine=xps100-honeywell
;;
@@ -1078,13 +1126,10 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sparc-sun
;;
cydra)
@@ -1157,20 +1202,23 @@ case $os in
| -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
| -ekkobsd* | -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* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
| -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* | -dragonfly*)
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1188,7 +1236,7 @@ case $os in
os=`echo $os | sed -e 's|nto|nto-qnx|'`
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;;
-mac*)
@@ -1297,6 +1345,9 @@ case $os in
-kaos*)
os=-kaos
;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
-none)
;;
*)
@@ -1319,6 +1370,9 @@ else
# system, and we'll never get to this point.
case $basic_machine in
+ spu-*)
+ os=-elf
+ ;;
*-acorn)
os=-riscix1.2
;;
@@ -1328,9 +1382,9 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
@@ -1374,6 +1428,9 @@ case $basic_machine in
*-be)
os=-beos
;;
+ *-haiku)
+ os=-haiku
+ ;;
*-ibm)
os=-aix
;;
@@ -1545,7 +1602,7 @@ case $basic_machine in
esac
echo $basic_machine$os
-exit 0
+exit
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/db/dist/configure b/db/dist/configure
index 6cda7d877..b7af6f85c 100755
--- a/db/dist/configure
+++ b/db/dist/configure
@@ -1,10 +1,11 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for Berkeley DB 4.3.27.
+# Generated by GNU Autoconf 2.60 for Berkeley DB 4.5.20.
#
-# Report bugs to <support@sleepycat.com>.
+# Report bugs to <Oracle Technology Network Berkeley DB forum>.
#
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
@@ -18,11 +19,35 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
# 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
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh
+
+# PATH needs CR
+# 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
+
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
as_unset=unset
@@ -31,8 +56,43 @@ else
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+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
+IFS=$as_save_IFS
+
+ ;;
+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_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
@@ -46,18 +106,19 @@ do
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- $as_unset $as_var
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -65,157 +126,386 @@ fi
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+# CDPATH.
+$as_unset CDPATH
-# 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
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
fi
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+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
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
- ;;
- 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
- '')
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+for as_dir in /usr/bin/posix$PATH_SEPARATOR/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
+ case $as_dir in
/*)
- if ("$as_dir/$as_base" -c '
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+# 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+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+# 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+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
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
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell autoconf@gnu.org about your system,
+ echo including any error possibly output before this
+ echo message
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# 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.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, 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 |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $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
+ # original and so on. Autoconf is especially sensitive 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= ;;
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
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='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
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
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -224,7 +514,19 @@ else
as_mkdir_p=false
fi
-as_executable_p="test -f"
+# Find out whether ``test -x'' works. Don't use a zero-byte file, as
+# systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ as_executable_p="test -x"
+else
+ as_executable_p=:
+fi
+rm -f conf$$.file
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -233,15 +535,6 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval 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.
@@ -287,8 +580,8 @@ 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`" &&
+ 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
@@ -397,38 +690,35 @@ tagnames=${tagnames+${tagnames},}CXX
tagnames=${tagnames+${tagnames},}F77
+exec 7<&0 </dev/null 6>&1
+
# 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
+ac_clean_files=
ac_config_libobj_dir=.
+LIBOBJS=
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.3.27'
-PACKAGE_VERSION='4.3.27'
-PACKAGE_STRING='Berkeley DB 4.3.27'
-PACKAGE_BUGREPORT='support@sleepycat.com'
+PACKAGE_TARNAME='db-4.5.20'
+PACKAGE_VERSION='4.5.20'
+PACKAGE_STRING='Berkeley DB 4.5.20'
+PACKAGE_BUGREPORT='Oracle Technology Network Berkeley DB forum'
ac_unique_file="../db/db.c"
-ac_default_prefix=/usr/local/BerkeleyDB.4.3
+ac_default_prefix=/usr/local/BerkeleyDB.4.5
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -457,17 +747,197 @@ ac_includes_default="\
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
+#endif
+#if HAVE_STDINT_H
+# include <stdint.h>
#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 DB_PROTO1 DB_PROTO2 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 MAKEFILE_CC MAKEFILE_CCLINK MAKEFILE_CXX MAKEFILE_CXXLINK MAKEFILE_SOLINK MAKEFILE_XSOLINK OSDIR POSTLINK REPLACEMENT_OBJS RPC_CLIENT_OBJS RPC_SERVER_H SOFLAGS TEST_LIBS 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 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_rpcgen ac_ct_db_cv_path_rpcgen 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_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 inttypes_h_decl stdint_h_decl stddef_h_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 u_int64_decl int64_decl ssize_t_decl uintmax_t_decl uintptr_t_decl LIBOBJS TCFLAGS TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_TCLSH db_seq_decl LTLIBOBJS'
+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
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+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
+DB_PROTO1
+DB_PROTO2
+DEFAULT_LIB
+DEFAULT_LIB_CXX
+INSTALLER
+INSTALL_LIBS
+INSTALL_TARGET
+JAR
+JAVACFLAGS
+LDFLAGS
+LIBCSO_LIBS
+LIBJSO_LIBS
+LIBSO_LIBS
+LIBTOOL
+LIBTSO_LIBS
+LIBTSO_MODSUFFIX
+LIBTSO_MODULE
+LIBXSO_LIBS
+MAKEFILE_CC
+MAKEFILE_CCLINK
+MAKEFILE_CXX
+MAKEFILE_CXXLINK
+MAKEFILE_SOLINK
+MAKEFILE_XSOLINK
+OSDIR
+POSTLINK
+REPLACEMENT_OBJS
+RPC_CLIENT_OBJS
+RPC_SERVER_H
+SOFLAGS
+SWIGCFLAGS
+TEST_LIBS
+db_int_def
+o
+platform_header
+platform_footer
+DB_VERSION_MAJOR
+DB_VERSION_MINOR
+DB_VERSION_PATCH
+DB_VERSION_STRING
+DB_VERSION_UNIQUE_NAME
+AR
+CHMOD
+CP
+KILL
+LN
+MKDIR
+RANLIB
+RM
+RPCGEN
+db_cv_path_sh
+STRIP
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CC
+ac_ct_CC
+EXEEXT
+OBJEXT
+DB_CONST
+CCC
+ac_ct_CXX
+CXXCPP
+cxx_have_stdheaders
+GREP
+EGREP
+LN_S
+ECHO
+CPP
+F77
+FFLAGS
+ac_ct_F77
+SOSUFFIX
+MODSUFFIX
+JMODSUFFIX
+JAVAC
+JAVA
+uudecode
+_ACJNI_JAVAC
+inttypes_h_decl
+stdint_h_decl
+stddef_h_decl
+unistd_h_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
+u_int64_decl
+int64_decl
+ssize_t_decl
+pid_t_decl
+uintmax_t_decl
+uintptr_t_decl
+thread_h_decl
+db_threadid_t_decl
+LIBOBJS
+TCL_BIN_DIR
+TCL_INCLUDE_SPEC
+TCL_LIB_FILE
+TCL_SRC_DIR
+TCL_TCLSH
+INT64_FMT
+UINT64_FMT
+db_seq_decl
+LTLIBOBJS'
ac_subst_files=''
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+CPP
+F77
+FFLAGS'
+
# Initialize some variables set by options.
ac_init_help=
@@ -494,34 +964,48 @@ x_libraries=NONE
# 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.
+# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
ac_prev=
+ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
+ eval $ac_prev=\$ac_option
ac_prev=
continue
fi
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
# Accept the important Cygnus configure options, so we can diagnose typos.
- case $ac_option in
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
@@ -543,12 +1027,18 @@ do
--config-cache | -C)
cache_file=config.cache ;;
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ -datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
-disable-* | --disable-*)
ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
@@ -556,7 +1046,17 @@ do
{ 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" ;;
+ eval enable_$ac_feature=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
-enable-* | --enable-*)
ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
@@ -565,11 +1065,7 @@ do
{ 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- \
@@ -596,6 +1092,12 @@ do
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
@@ -620,13 +1122,16 @@ do
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
-localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
+ | --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
@@ -691,6 +1196,16 @@ do
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
@@ -747,11 +1262,7 @@ do
{ 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
- *=*) 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=`expr "x$ac_option" : 'x-*without-\(.*\)'`
@@ -760,7 +1271,7 @@ do
{ 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" ;;
+ eval with_$ac_package=no ;;
--x)
# Obsolete; use --with-x.
@@ -791,8 +1302,7 @@ Try \`$0 --help' for more information." >&2
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'"
+ eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
@@ -812,27 +1322,19 @@ if test -n "$ac_prev"; then
{ (exit 1); exit 1; }; }
fi
-# 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
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
+# Be sure to have absolute directory names.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
do
- eval ac_val=$`echo $ac_var`
+ eval ac_val=\$$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; }; };;
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
done
# There might be people who depend on the old broken behavior: `$host'
@@ -859,94 +1361,76 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
# 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_confdir=`(dirname "$0") 2>/dev/null ||
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$0" ||
$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$0" : 'X\(//\)[^/]' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ 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'`
+ 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
+ if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
{ (exit 1); exit 1; }; }
- fi
fi
-(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
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&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
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
#
# Report the --help message.
@@ -955,7 +1439,7 @@ 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.3.27 to adapt to many kinds of systems.
+\`configure' configures Berkeley DB 4.5.20 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -975,9 +1459,6 @@ Configuration:
-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]
@@ -995,15 +1476,22 @@ 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]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/db-4.5.20]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
@@ -1021,7 +1509,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Berkeley DB 4.3.27:";;
+ short | recursive ) echo "Configuration of Berkeley DB 4.5.20:";;
esac
cat <<\_ACEOF
@@ -1046,16 +1534,16 @@ Optional Features:
--enable-mingw Build Berkeley DB for MinGW.
--enable-o_direct Enable the O_DIRECT flag for direct I/O.
--enable-posixmutexes Force use of POSIX standard mutexes.
+ --enable-pthread_self Obsolete; use --enable-pthread_api instead.
+ --enable-pthread_api Configure Berkeley DB for POSIX pthread API.
--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 uninitialized memory read/writes.
- --enable-shared[=PKGS]
- build shared libraries [default=yes]
- --enable-static[=PKGS]
- build static libraries [default=yes]
+ --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)
@@ -1066,22 +1554,21 @@ Optional Packages:
--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.
+ Obsolete; use DbEnv::mutex_set_align instead.
--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]
+ --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>
+ CPPFLAGS C/C++/Objective 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
@@ -1092,122 +1579,88 @@ Some influential environment variables:
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>.
+Report bugs to <Oracle Technology Network Berkeley DB forum>.
_ACEOF
+ac_status=$?
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
+ test -d "$ac_dir" || continue
ac_builddir=.
-if test "$ac_dir" != .; then
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
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
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # 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_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
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
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
-
- 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
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested 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
else
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd $ac_popdir
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
done
fi
-test -n "$ac_init_help" && exit 0
+test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Berkeley DB configure 4.3.27
-generated by GNU Autoconf 2.59
+Berkeley DB configure 4.5.20
+generated by GNU Autoconf 2.60
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 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
+ exit
fi
-exec 5>config.log
-cat >&5 <<_ACEOF
+cat >config.log <<_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.3.27, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+It was created by Berkeley DB $as_me 4.5.20, which was
+generated by GNU Autoconf 2.60. Invocation command line was
$ $0 $@
_ACEOF
+exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
@@ -1226,7 +1679,7 @@ uname -v = `(uname -v) 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`
+/usr/bin/hostinfo = `(/usr/bin/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`
@@ -1240,6 +1693,7 @@ do
test -z "$as_dir" && as_dir=.
echo "PATH: $as_dir"
done
+IFS=$as_save_IFS
} >&5
@@ -1261,7 +1715,6 @@ _ACEOF
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
-ac_sep=
ac_must_keep_next=false
for ac_pass in 1 2
do
@@ -1272,7 +1725,7 @@ do
-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
@@ -1294,9 +1747,7 @@ do
-* ) 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=" "
+ ac_configure_args="$ac_configure_args '$ac_arg'"
;;
esac
done
@@ -1307,8 +1758,8 @@ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_
# 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.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
@@ -1321,20 +1772,34 @@ trap 'exit_status=$?
_ASBOX
echo
# The following way of writing the cache mishandles newlines in values,
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
(set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
+ "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"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-}
+ esac |
+ sort
+)
echo
cat <<\_ASBOX
@@ -1345,22 +1810,28 @@ _ASBOX
echo
for ac_var in $ac_subst_vars
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
_ASBOX
echo
for ac_var in $ac_subst_files
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
@@ -1372,26 +1843,24 @@ _ASBOX
## ----------- ##
_ASBOX
echo
- sed "/^$/d" confdefs.h | sort
+ cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
echo "$as_me: caught signal $ac_signal"
echo "$as_me: exit $exit_status"
} >&5
- rm -f core *.core &&
- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
- ' 0
+' 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
+rm -f -r conftest* confdefs.h
# Predefined preprocessor variables.
@@ -1422,14 +1891,17 @@ _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
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
+if test -n "$CONFIG_SITE"; then
+ set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+ set x "$ac_default_prefix/share/config.site" \
+ "$ac_default_prefix/etc/config.site"
fi
-for ac_site_file in $CONFIG_SITE; do
+shift
+for ac_site_file
+do
if test -r "$ac_site_file"; then
{ echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
echo "$as_me: loading site script $ac_site_file" >&6;}
@@ -1445,8 +1917,8 @@ if test -r "$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;;
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
esac
fi
else
@@ -1458,12 +1930,11 @@ 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
+for ac_var in $ac_precious_vars; 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"
+ 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
@@ -1488,8 +1959,7 @@ echo "$as_me: current value: $ac_new_val" >&2;}
# 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=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -1506,12 +1976,6 @@ echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start ov
{ (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
-
@@ -1536,118 +2000,165 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+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
- ac_config_headers="$ac_config_headers db_config.h:config.hin"
+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
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
- elif test -f $ac_dir/install.sh; then
+ elif test -f "$ac_dir/install.sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
- elif test -f $ac_dir/shtool; then
+ 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 "$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;}
+ { { 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="$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.
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
# 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;}
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/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
+{ 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" &&
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
{ { 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;}
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_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
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
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
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ 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;}
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
{ (exit 1); exit 1; }; }
+fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
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/'`
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
test "$program_prefix" != NONE &&
- program_transform_name="s,^,$program_prefix,;$program_transform_name"
+ 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"
+ 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
+rm -f 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
+{ 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;}
+ { 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. \
+Change directory to the build_unix directory and run ../dist/configure \
+from there." >&5
+echo "$as_me: error: \
+Berkeley DB should not be built in the top-level or \"dist\" directories. \
+Change directory to the build_unix directory and run ../dist/configure \
+from there." >&2;}
{ (exit 1); exit 1; }; }
+
fi
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
# Substitution variables.
@@ -1697,6 +2208,12 @@ echo "${ECHO_T}no" >&6
+
+
+# The Windows public header has two extra symbols we need to remove.
+
+
+
# Set the default installation location.
@@ -1704,11 +2221,11 @@ echo "${ECHO_T}no" >&6
DB_VERSION_MAJOR="4"
-DB_VERSION_MINOR="3"
+DB_VERSION_MINOR="5"
-DB_VERSION_PATCH="27"
+DB_VERSION_PATCH="20"
-DB_VERSION_STRING='"Sleepycat Software: Berkeley DB 4.3.27: (December 22, 2004)"'
+DB_VERSION_STRING='"Berkeley DB 4.5.20: (September 20, 2006)"'
# Process all options before using them.
@@ -1716,285 +2233,317 @@ DB_VERSION_STRING='"Sleepycat Software: Berkeley DB 4.3.27: (December 22, 2004)"
# --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.
+# Check whether --enable-bigfile was given.
if test "${enable_bigfile+set}" = set; then
- enableval="$enable_bigfile"
- { { echo "$as_me:$LINENO: error: --enable-bigfile no longer supported, use --enable-largefile" >&5
+ enableval=$enable_bigfile; { { 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;
+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"
+{ 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 was given.
+if test "${enable_cryptography+set}" = set; then
+ enableval=$enable_cryptography;
else
enableval="yes"
-fi;
+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;;
+ 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.
+{ 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 was given.
if test "${enable_hash+set}" = set; then
- enableval="$enable_hash"
-
+ enableval=$enable_hash;
else
enableval="yes"
-fi;
+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;;
+ 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-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.
+{ 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 was given.
if test "${enable_queue+set}" = set; then
- enableval="$enable_queue"
-
+ enableval=$enable_queue;
else
enableval="yes"
-fi;
+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;;
+ 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.
+{ 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 was given.
if test "${enable_replication+set}" = set; then
- enableval="$enable_replication"
-
+ enableval=$enable_replication;
else
enableval="yes"
-fi;
+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;;
+ 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-statistics option specified" >&5
-echo $ECHO_N "checking if --disable-statistics option specified... $ECHO_C" >&6
-# Check whether --enable-statistics or --disable-statistics was given.
+{ echo "$as_me:$LINENO: checking if --disable-statistics option specified" >&5
+echo $ECHO_N "checking if --disable-statistics option specified... $ECHO_C" >&6; }
+# Check whether --enable-statistics was given.
if test "${enable_statistics+set}" = set; then
- enableval="$enable_statistics"
-
+ enableval=$enable_statistics;
else
enableval="yes"
-fi;
+fi
+
db_cv_build_statistics="$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;;
+ 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-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.
+{ 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 was given.
if test "${enable_verify+set}" = set; then
- enableval="$enable_verify"
-
+ enableval=$enable_verify;
else
enableval="yes"
-fi;
+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;;
+ 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.
+{ 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 was given.
if test "${enable_compat185+set}" = set; then
- enableval="$enable_compat185"
- db_cv_compat185="$enable_compat185"
+ enableval=$enable_compat185; db_cv_compat185="$enable_compat185"
else
db_cv_compat185="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_compat185" >&5
-echo "${ECHO_T}$db_cv_compat185" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_compat185" >&5
+echo "${ECHO_T}$db_cv_compat185" >&6; }
+
+{ 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 was given.
if test "${enable_cxx+set}" = set; then
- enableval="$enable_cxx"
- db_cv_cxx="$enable_cxx"
+ enableval=$enable_cxx; db_cv_cxx="$enable_cxx"
else
db_cv_cxx="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_cxx" >&5
-echo "${ECHO_T}$db_cv_cxx" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_cxx" >&5
+echo "${ECHO_T}$db_cv_cxx" >&6; }
+
+{ 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 was given.
if test "${enable_debug+set}" = set; then
- enableval="$enable_debug"
- db_cv_debug="$enable_debug"
+ enableval=$enable_debug; db_cv_debug="$enable_debug"
else
db_cv_debug="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_debug" >&5
-echo "${ECHO_T}$db_cv_debug" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_debug" >&5
+echo "${ECHO_T}$db_cv_debug" >&6; }
+
+{ 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 was given.
if test "${enable_debug_rop+set}" = set; then
- enableval="$enable_debug_rop"
- db_cv_debug_rop="$enable_debug_rop"
+ enableval=$enable_debug_rop; db_cv_debug_rop="$enable_debug_rop"
else
db_cv_debug_rop="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_debug_rop" >&5
-echo "${ECHO_T}$db_cv_debug_rop" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_debug_rop" >&5
+echo "${ECHO_T}$db_cv_debug_rop" >&6; }
+
+{ 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 was given.
if test "${enable_debug_wop+set}" = set; then
- enableval="$enable_debug_wop"
- db_cv_debug_wop="$enable_debug_wop"
+ enableval=$enable_debug_wop; db_cv_debug_wop="$enable_debug_wop"
else
db_cv_debug_wop="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_debug_wop" >&5
-echo "${ECHO_T}$db_cv_debug_wop" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_debug_wop" >&5
+echo "${ECHO_T}$db_cv_debug_wop" >&6; }
+
+{ 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 was given.
if test "${enable_diagnostic+set}" = set; then
- enableval="$enable_diagnostic"
- db_cv_diagnostic="$enable_diagnostic"
+ enableval=$enable_diagnostic; db_cv_diagnostic="$enable_diagnostic"
else
db_cv_diagnostic="no"
-fi;
+fi
+
if test "$db_cv_diagnostic" = "yes"; then
- echo "$as_me:$LINENO: result: $db_cv_diagnostic" >&5
-echo "${ECHO_T}$db_cv_diagnostic" >&6
+ { 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
+ { 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
+ { 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
+ { echo "$as_me:$LINENO: result: $db_cv_diagnostic" >&5
+echo "${ECHO_T}$db_cv_diagnostic" >&6; }
fi
-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.
+{ 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 was given.
if test "${enable_dump185+set}" = set; then
- enableval="$enable_dump185"
- db_cv_dump185="$enable_dump185"
+ enableval=$enable_dump185; db_cv_dump185="$enable_dump185"
else
db_cv_dump185="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_dump185" >&5
-echo "${ECHO_T}$db_cv_dump185" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_dump185" >&5
+echo "${ECHO_T}$db_cv_dump185" >&6; }
+
+{ 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 was given.
if test "${enable_java+set}" = set; then
- enableval="$enable_java"
- db_cv_java="$enable_java"
+ enableval=$enable_java; db_cv_java="$enable_java"
else
db_cv_java="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_java" >&5
-echo "${ECHO_T}$db_cv_java" >&6
+fi
-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.
+{ 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 was given.
if test "${enable_mingw+set}" = set; then
- enableval="$enable_mingw"
- db_cv_mingw="$enable_mingw"
+ 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
+fi
-echo "$as_me:$LINENO: checking if --enable-o_direct option specified" >&5
-echo $ECHO_N "checking if --enable-o_direct option specified... $ECHO_C" >&6
-# Check whether --enable-o_direct or --disable-o_direct was given.
+{ echo "$as_me:$LINENO: result: $db_cv_mingw" >&5
+echo "${ECHO_T}$db_cv_mingw" >&6; }
+
+{ echo "$as_me:$LINENO: checking if --enable-o_direct option specified" >&5
+echo $ECHO_N "checking if --enable-o_direct option specified... $ECHO_C" >&6; }
+# Check whether --enable-o_direct was given.
if test "${enable_o_direct+set}" = set; then
- enableval="$enable_o_direct"
- db_cv_o_direct="$enable_o_direct"
+ enableval=$enable_o_direct; db_cv_o_direct="$enable_o_direct"
else
db_cv_o_direct="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_o_direct" >&5
-echo "${ECHO_T}$db_cv_o_direct" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_o_direct" >&5
+echo "${ECHO_T}$db_cv_o_direct" >&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 was given.
if test "${enable_posixmutexes+set}" = set; then
- enableval="$enable_posixmutexes"
- db_cv_posixmutexes="$enable_posixmutexes"
+ enableval=$enable_posixmutexes; db_cv_posixmutexes="$enable_posixmutexes"
else
db_cv_posixmutexes="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_posixmutexes" >&5
-echo "${ECHO_T}$db_cv_posixmutexes" >&6
+fi
+
+{ echo "$as_me:$LINENO: result: $db_cv_posixmutexes" >&5
+echo "${ECHO_T}$db_cv_posixmutexes" >&6; }
-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.
+# Check whether --enable-pthread_self was given.
+if test "${enable_pthread_self+set}" = set; then
+ enableval=$enable_pthread_self; { { echo "$as_me:$LINENO: error: --enable-pthread_self no longer supported, use --enable-pthread_api" >&5
+echo "$as_me: error: --enable-pthread_self no longer supported, use --enable-pthread_api" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+{ echo "$as_me:$LINENO: checking if --enable-pthread_api option specified" >&5
+echo $ECHO_N "checking if --enable-pthread_api option specified... $ECHO_C" >&6; }
+# Check whether --enable-pthread_api was given.
+if test "${enable_pthread_api+set}" = set; then
+ enableval=$enable_pthread_api; db_cv_pthread_api="$enable_pthread_api"
+else
+ db_cv_pthread_api="no"
+fi
+
+# POSIX mutexes implies other POSIX APIs.
+if test "$db_cv_posixmutexes" != "no"; then
+ db_cv_pthread_api="yes"
+fi
+{ echo "$as_me:$LINENO: result: $db_cv_pthread_api" >&5
+echo "${ECHO_T}$db_cv_pthread_api" >&6; }
+
+
+if test "$db_cv_pthread_api" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_PTHREAD_API 1
+_ACEOF
+
+fi
+
+{ 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 was given.
if test "${enable_rpc+set}" = set; then
- enableval="$enable_rpc"
- db_cv_rpc="$enable_rpc"
+ enableval=$enable_rpc; db_cv_rpc="$enable_rpc"
else
db_cv_rpc="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_rpc" >&5
-echo "${ECHO_T}$db_cv_rpc" >&6
+fi
-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.
+{ 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 was given.
if test "${enable_smallbuild+set}" = set; then
- enableval="$enable_smallbuild"
- db_cv_smallbuild="$enable_smallbuild"
+ enableval=$enable_smallbuild; db_cv_smallbuild="$enable_smallbuild"
else
db_cv_smallbuild="no"
-fi;
+fi
+
if test "$db_cv_smallbuild" = "yes"; then
db_cv_build_cryptography="no"
db_cv_build_hash="no"
@@ -2003,67 +2552,67 @@ if test "$db_cv_smallbuild" = "yes"; then
db_cv_build_statistics="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: 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.
+{ 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 was given.
if test "${enable_tcl+set}" = set; then
- enableval="$enable_tcl"
- db_cv_tcl="$enable_tcl"
+ enableval=$enable_tcl; db_cv_tcl="$enable_tcl"
else
db_cv_tcl="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_tcl" >&5
-echo "${ECHO_T}$db_cv_tcl" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_tcl" >&5
+echo "${ECHO_T}$db_cv_tcl" >&6; }
+
+{ 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 was given.
if test "${enable_test+set}" = set; then
- enableval="$enable_test"
- db_cv_test="$enable_test"
+ enableval=$enable_test; db_cv_test="$enable_test"
else
db_cv_test="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_test" >&5
-echo "${ECHO_T}$db_cv_test" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_test" >&5
+echo "${ECHO_T}$db_cv_test" >&6; }
+
+{ 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 was given.
if test "${enable_uimutexes+set}" = set; then
- enableval="$enable_uimutexes"
- db_cv_uimutexes="$enable_uimutexes"
+ enableval=$enable_uimutexes; db_cv_uimutexes="$enable_uimutexes"
else
db_cv_uimutexes="no"
-fi;
-echo "$as_me:$LINENO: result: $db_cv_uimutexes" >&5
-echo "${ECHO_T}$db_cv_uimutexes" >&6
+fi
-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.
+{ echo "$as_me:$LINENO: result: $db_cv_uimutexes" >&5
+echo "${ECHO_T}$db_cv_uimutexes" >&6; }
+
+{ 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 was given.
if test "${enable_umrw+set}" = set; then
- enableval="$enable_umrw"
- db_cv_umrw="$enable_umrw"
+ 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
+fi
-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
+{ echo "$as_me:$LINENO: result: $db_cv_umrw" >&5
+echo "${ECHO_T}$db_cv_umrw" >&6; }
-# Check whether --with-mutex or --without-mutex was given.
+{ 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 was given.
if test "${with_mutex+set}" = set; then
- withval="$with_mutex"
- with_mutex="$withval"
+ withval=$with_mutex; with_mutex="$withval"
else
with_mutex="no"
-fi;
+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;}
@@ -2072,75 +2621,60 @@ 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: 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
+# --with-mutexalign=ALIGNMENT was the configuration option that Berkeley DB
+# used before the DbEnv::mutex_set_align method was added.
-# Check whether --with-mutexalign or --without-mutexalign was given.
+# Check whether --with-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;}
+ withval=$with_mutexalign; { { echo "$as_me:$LINENO: error: --with-mutexalign no longer supported, use DbEnv::mutex_set_align" >&5
+echo "$as_me: error: --with-mutexalign no longer supported, use DbEnv::mutex_set_align" >&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-tcl=DIR option specified" >&5
-echo $ECHO_N "checking if --with-tcl=DIR option specified... $ECHO_C" >&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; }
-# Check whether --with-tcl or --without-tcl was given.
+# Check whether --with-tcl was given.
if test "${with_tcl+set}" = set; then
- withval="$with_tcl"
- with_tclconfig="$withval"
+ withval=$with_tcl; with_tclconfig="$withval"
else
with_tclconfig="no"
-fi;
-echo "$as_me:$LINENO: result: $with_tclconfig" >&5
-echo "${ECHO_T}$with_tclconfig" >&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
+{ 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; }
-# Check whether --with-uniquename or --without-uniquename was given.
+# Check whether --with-uniquename was given.
if test "${with_uniquename+set}" = set; then
- withval="$with_uniquename"
- with_uniquename="$withval"
+ withval=$with_uniquename; with_uniquename="$withval"
else
with_uniquename="no"
-fi;
+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
+ { 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="_4003"
+ DB_VERSION_UNIQUE_NAME="_4005"
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
+ { echo "$as_me:$LINENO: result: $DB_VERSION_UNIQUE_NAME" >&5
+echo "${ECHO_T}$DB_VERSION_UNIQUE_NAME" >&6; }
fi
# Test requires Tcl
@@ -2152,25 +2686,6 @@ echo "$as_me: error: --enable-test requires --enable-tcl" >&2;}
fi
fi
-# Uniquename excludes C++, Java, RPC.
-if test "$db_cv_uniquename" = "yes"; then
-# if test "$db_cv_rpc" = "yes"; then
-# { { echo "$as_me:$LINENO: error: --with-uniquename is not compatible with --enable-rpc" >&5
-#echo "$as_me: error: --with-uniquename is not compatible with --enable-rpc" >&2;}
-# { (exit 1); exit 1; }; }
-# fi
- if test "$db_cv_cxx" = "yes"; then
- { { echo "$as_me:$LINENO: error: --with-uniquename is not compatible with --enable-cxx" >&5
-echo "$as_me: error: --with-uniquename is not compatible with --enable-cxx" >&2;}
- { (exit 1); exit 1; }; }
- fi
- if test "$db_cv_java" = "yes"; then
- { { echo "$as_me:$LINENO: error: --with-uniquename is not compatible with --enable-java" >&5
-echo "$as_me: error: --with-uniquename is not compatible with --enable-java" >&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
@@ -2220,13 +2735,13 @@ fi
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 "$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
- 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.
+ 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
@@ -2234,37 +2749,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { 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
+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_db_cv_path_ar+set}" = set; then
+{ 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_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.
+ 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
@@ -2272,47 +2789,59 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- 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
+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 "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_ar=$ac_ct_db_cv_path_ar
+ if test "x$ac_ct_AR" = x; then
+ AR="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
else
- db_cv_path_ar="$ac_cv_prog_db_cv_path_ar"
+ AR="$ac_cv_prog_AR"
fi
-if test "$db_cv_path_ar" = missing_ar; then
- { { echo "$as_me:$LINENO: error: No ar utility found." >&5
+test "$AR" = "none" && { { 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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_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.
+ if test -n "$CHMOD"; then
+ ac_cv_prog_CHMOD="$CHMOD" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2320,37 +2849,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CHMOD="${ac_tool_prefix}chmod"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
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
+CHMOD=$ac_cv_prog_CHMOD
+if test -n "$CHMOD"; then
+ { echo "$as_me:$LINENO: result: $CHMOD" >&5
+echo "${ECHO_T}$CHMOD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { 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
+if test -z "$ac_cv_prog_CHMOD"; then
+ ac_ct_CHMOD=$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 "$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_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.
+ if test -n "$ac_ct_CHMOD"; then
+ ac_cv_prog_ac_ct_CHMOD="$ac_ct_CHMOD" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2358,47 +2889,59 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CHMOD="chmod"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- 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
+ac_ct_CHMOD=$ac_cv_prog_ac_ct_CHMOD
+if test -n "$ac_ct_CHMOD"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_CHMOD" >&5
+echo "${ECHO_T}$ac_ct_CHMOD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_chmod=$ac_ct_db_cv_path_chmod
+ if test "x$ac_ct_CHMOD" = x; then
+ CHMOD="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CHMOD=$ac_ct_CHMOD
+ fi
else
- db_cv_path_chmod="$ac_cv_prog_db_cv_path_chmod"
+ CHMOD="$ac_cv_prog_CHMOD"
fi
-if test "$db_cv_path_chmod" = missing_chmod; then
- { { echo "$as_me:$LINENO: error: No chmod utility found." >&5
+test "$CHMOD" = "none" && { { 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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_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.
+ if test -n "$CP"; then
+ ac_cv_prog_CP="$CP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2406,37 +2949,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CP="${ac_tool_prefix}cp"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
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
+CP=$ac_cv_prog_CP
+if test -n "$CP"; then
+ { echo "$as_me:$LINENO: result: $CP" >&5
+echo "${ECHO_T}$CP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { 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
+if test -z "$ac_cv_prog_CP"; then
+ ac_ct_CP=$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 "$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_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.
+ if test -n "$ac_ct_CP"; then
+ ac_cv_prog_ac_ct_CP="$ac_ct_CP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2444,47 +2989,61 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CP="cp"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- 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
+ac_ct_CP=$ac_cv_prog_ac_ct_CP
+if test -n "$ac_ct_CP"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_CP" >&5
+echo "${ECHO_T}$ac_ct_CP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_cp=$ac_ct_db_cv_path_cp
+ if test "x$ac_ct_CP" = x; then
+ CP="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CP=$ac_ct_CP
+ fi
else
- db_cv_path_cp="$ac_cv_prog_db_cv_path_cp"
+ CP="$ac_cv_prog_CP"
fi
-if test "$db_cv_path_cp" = missing_cp; then
- { { echo "$as_me:$LINENO: error: No cp utility found." >&5
+test "$CP" = "none" && { { 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 -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
+# The Tcl test suite requires a kill utility.
+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_KILL+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.
+ if test -n "$KILL"; then
+ ac_cv_prog_KILL="$KILL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2492,37 +3051,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_KILL="${ac_tool_prefix}kill"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
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
+KILL=$ac_cv_prog_KILL
+if test -n "$KILL"; then
+ { echo "$as_me:$LINENO: result: $KILL" >&5
+echo "${ECHO_T}$KILL" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
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
+if test -z "$ac_cv_prog_KILL"; then
+ ac_ct_KILL=$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_KILL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- 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.
+ if test -n "$ac_ct_KILL"; then
+ ac_cv_prog_ac_ct_KILL="$ac_ct_KILL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2530,47 +3091,60 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_KILL="kill"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_db_cv_path_ln" && ac_cv_prog_ac_ct_db_cv_path_ln="missing_ln"
fi
fi
-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
+ac_ct_KILL=$ac_cv_prog_ac_ct_KILL
+if test -n "$ac_ct_KILL"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_KILL" >&5
+echo "${ECHO_T}$ac_ct_KILL" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_ln=$ac_ct_db_cv_path_ln
+ if test "x$ac_ct_KILL" = x; then
+ KILL="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ KILL=$ac_ct_KILL
+ fi
else
- db_cv_path_ln="$ac_cv_prog_db_cv_path_ln"
+ KILL="$ac_cv_prog_KILL"
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;}
+ test "$KILL" = "none" && { { echo "$as_me:$LINENO: error: No kill utility found." >&5
+echo "$as_me: error: No kill 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
+ # 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_LN+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- 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.
+ if test -n "$LN"; then
+ ac_cv_prog_LN="$LN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2578,37 +3152,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LN="${ac_tool_prefix}ln"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
-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
+LN=$ac_cv_prog_LN
+if test -n "$LN"; then
+ { echo "$as_me:$LINENO: result: $LN" >&5
+echo "${ECHO_T}$LN" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
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
+if test -z "$ac_cv_prog_LN"; then
+ ac_ct_LN=$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_LN+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- 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.
+ if test -n "$ac_ct_LN"; then
+ ac_cv_prog_ac_ct_LN="$ac_ct_LN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2616,49 +3192,59 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LN="ln"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_db_cv_path_mkdir" && ac_cv_prog_ac_ct_db_cv_path_mkdir="missing_mkdir"
fi
fi
-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
+ac_ct_LN=$ac_cv_prog_ac_ct_LN
+if test -n "$ac_ct_LN"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_LN" >&5
+echo "${ECHO_T}$ac_ct_LN" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_mkdir=$ac_ct_db_cv_path_mkdir
+ if test "x$ac_ct_LN" = x; then
+ LN="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ LN=$ac_ct_LN
+ fi
else
- db_cv_path_mkdir="$ac_cv_prog_db_cv_path_mkdir"
+ LN="$ac_cv_prog_LN"
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;}
+test "$LN" = "none" && { { echo "$as_me:$LINENO: error: No ln utility found." >&5
+echo "$as_me: error: No ln 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
+ # 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_MKDIR+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.
+ if test -n "$MKDIR"; then
+ ac_cv_prog_MKDIR="$MKDIR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2666,37 +3252,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_MKDIR="${ac_tool_prefix}mkdir"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
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
+MKDIR=$ac_cv_prog_MKDIR
+if test -n "$MKDIR"; then
+ { echo "$as_me:$LINENO: result: $MKDIR" >&5
+echo "${ECHO_T}$MKDIR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { 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
+if test -z "$ac_cv_prog_MKDIR"; then
+ ac_ct_MKDIR=$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_MKDIR+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.
+ if test -n "$ac_ct_MKDIR"; then
+ ac_cv_prog_ac_ct_MKDIR="$ac_ct_MKDIR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2704,82 +3292,61 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_MKDIR="mkdir"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- 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
+ac_ct_MKDIR=$ac_cv_prog_ac_ct_MKDIR
+if test -n "$ac_ct_MKDIR"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_MKDIR" >&5
+echo "${ECHO_T}$ac_ct_MKDIR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- path_ranlib=$ac_ct_path_ranlib
-else
- path_ranlib="$ac_cv_prog_path_ranlib"
-fi
-
-# 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
- 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"
- ;;
+ if test "x$ac_ct_MKDIR" = x; then
+ MKDIR="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
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
+ MKDIR=$ac_ct_MKDIR
+ fi
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ MKDIR="$ac_cv_prog_MKDIR"
fi
+test "$MKDIR" = "none" && { { echo "$as_me:$LINENO: error: No mkdir utility found." >&5
+echo "$as_me: error: No mkdir utility found." >&2;}
+ { (exit 1); exit 1; }; }
+# Ranlib 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}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
+ # 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
- 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.
+ 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
@@ -2787,37 +3354,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
-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
+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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
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
+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
- 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.
+ 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
@@ -2825,48 +3394,56 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- 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
+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 "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_rm=$ac_ct_db_cv_path_rm
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
else
- db_cv_path_rm="$ac_cv_prog_db_cv_path_rm"
+ RANLIB="$ac_cv_prog_RANLIB"
fi
-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
-if test "$db_cv_rpc" = "yes"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}rpcgen", so it can be a program name with args.
-set dummy ${ac_tool_prefix}rpcgen; 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_rpcgen+set}" = set; then
+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_RM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$db_cv_path_rpcgen"; then
- ac_cv_prog_db_cv_path_rpcgen="$db_cv_path_rpcgen" # Let the user override the test.
+ if test -n "$RM"; then
+ ac_cv_prog_RM="$RM" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2874,37 +3451,39 @@ 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_rpcgen="${ac_tool_prefix}rpcgen"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RM="${ac_tool_prefix}rm"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
-db_cv_path_rpcgen=$ac_cv_prog_db_cv_path_rpcgen
-if test -n "$db_cv_path_rpcgen"; then
- echo "$as_me:$LINENO: result: $db_cv_path_rpcgen" >&5
-echo "${ECHO_T}$db_cv_path_rpcgen" >&6
+RM=$ac_cv_prog_RM
+if test -n "$RM"; then
+ { echo "$as_me:$LINENO: result: $RM" >&5
+echo "${ECHO_T}$RM" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
-if test -z "$ac_cv_prog_db_cv_path_rpcgen"; then
- ac_ct_db_cv_path_rpcgen=$db_cv_path_rpcgen
- # Extract the first word of "rpcgen", so it can be a program name with args.
-set dummy rpcgen; 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_rpcgen+set}" = set; then
+if test -z "$ac_cv_prog_RM"; then
+ ac_ct_RM=$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_RM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$ac_ct_db_cv_path_rpcgen"; then
- ac_cv_prog_ac_ct_db_cv_path_rpcgen="$ac_ct_db_cv_path_rpcgen" # Let the user override the test.
+ if test -n "$ac_ct_RM"; then
+ ac_cv_prog_ac_ct_RM="$ac_ct_RM" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2912,50 +3491,60 @@ 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_rpcgen="rpcgen"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RM="rm"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_db_cv_path_rpcgen" && ac_cv_prog_ac_ct_db_cv_path_rpcgen="missing_rpcgen"
fi
fi
-ac_ct_db_cv_path_rpcgen=$ac_cv_prog_ac_ct_db_cv_path_rpcgen
-if test -n "$ac_ct_db_cv_path_rpcgen"; then
- echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_rpcgen" >&5
-echo "${ECHO_T}$ac_ct_db_cv_path_rpcgen" >&6
+ac_ct_RM=$ac_cv_prog_ac_ct_RM
+if test -n "$ac_ct_RM"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_RM" >&5
+echo "${ECHO_T}$ac_ct_RM" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_rpcgen=$ac_ct_db_cv_path_rpcgen
+ if test "x$ac_ct_RM" = x; then
+ RM="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RM=$ac_ct_RM
+ fi
else
- db_cv_path_rpcgen="$ac_cv_prog_db_cv_path_rpcgen"
+ RM="$ac_cv_prog_RM"
fi
- if test "$db_cv_path_rpcgen" = missing_rpcgen; then
- { { echo "$as_me:$LINENO: error: No rpcgen utility found." >&5
-echo "$as_me: error: No rpcgen utility found." >&2;}
+test "$RM" = "none" && { { echo "$as_me:$LINENO: error: No rm utility found." >&5
+echo "$as_me: error: No rm 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
+if test "$db_cv_rpc" = "yes"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}rpcgen", so it can be a program name with args.
+set dummy ${ac_tool_prefix}rpcgen; 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_RPCGEN+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.
+ if test -n "$RPCGEN"; then
+ ac_cv_prog_RPCGEN="$RPCGEN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -2963,37 +3552,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RPCGEN="${ac_tool_prefix}rpcgen"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
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
+RPCGEN=$ac_cv_prog_RPCGEN
+if test -n "$RPCGEN"; then
+ { echo "$as_me:$LINENO: result: $RPCGEN" >&5
+echo "${ECHO_T}$RPCGEN" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { 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
+if test -z "$ac_cv_prog_RPCGEN"; then
+ ac_ct_RPCGEN=$RPCGEN
+ # Extract the first word of "rpcgen", so it can be a program name with args.
+set dummy rpcgen; 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_RPCGEN+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.
+ if test -n "$ac_ct_RPCGEN"; then
+ ac_cv_prog_ac_ct_RPCGEN="$ac_ct_RPCGEN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -3001,35 +3592,59 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RPCGEN="rpcgen"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- 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
+ac_ct_RPCGEN=$ac_cv_prog_ac_ct_RPCGEN
+if test -n "$ac_ct_RPCGEN"; then
+ { echo "$as_me:$LINENO: result: $ac_ct_RPCGEN" >&5
+echo "${ECHO_T}$ac_ct_RPCGEN" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- path_sh=$ac_ct_path_sh
+ if test "x$ac_ct_RPCGEN" = x; then
+ RPCGEN="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RPCGEN=$ac_ct_RPCGEN
+ fi
else
- path_sh="$ac_cv_prog_path_sh"
+ RPCGEN="$ac_cv_prog_RPCGEN"
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
+ test "$RPCGEN" = "none" && { { echo "$as_me:$LINENO: error: No rpcgen utility found." >&5
+echo "$as_me: error: No rpcgen utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# We need a complete path for sh, because some make utility implementations get
+# upset if SHELL is set to just the command name. Don't use the SHELL variable
+# here because the user likely has the SHELL variable set to something other
+# than the Bourne shell, which is what Make wants.
+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_path_db_cv_path_sh+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3044,128 +3659,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- 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
+ { 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; }; }
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
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
+if test -z "$ac_cv_path_db_cv_path_sh"; then
+ ac_pt_db_cv_path_sh=$db_cv_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_path_ac_pt_db_cv_path_sh+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case $db_cv_path_strip in
+ case $ac_pt_db_cv_path_sh in
[\\/]* | ?:[\\/]*)
- ac_cv_path_db_cv_path_strip="$db_cv_path_strip" # Let the user override the test with a path.
+ ac_cv_path_ac_pt_db_cv_path_sh="$ac_pt_db_cv_path_sh" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3174,41 +3702,64 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_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
+IFS=$as_save_IFS
- 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
+ac_pt_db_cv_path_sh=$ac_cv_path_ac_pt_db_cv_path_sh
+if test -n "$ac_pt_db_cv_path_sh"; then
+ { echo "$as_me:$LINENO: result: $ac_pt_db_cv_path_sh" >&5
+echo "${ECHO_T}$ac_pt_db_cv_path_sh" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+ if test "x$ac_pt_db_cv_path_sh" = x; then
+ db_cv_path_sh="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ db_cv_path_sh=$ac_pt_db_cv_path_sh
+ fi
+else
+ db_cv_path_sh="$ac_cv_path_db_cv_path_sh"
fi
-if test "$db_cv_test" = "yes"; then
+test "$db_cv_path_sh" = "none" && { { echo "$as_me:$LINENO: error: No sh utility found." >&5
+echo "$as_me: error: No sh utility found." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Don't strip the binaries if --enable-debug was specified.
+if test "$db_cv_debug" = yes; then
+ STRIP="none"
+else
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
+ # 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
- 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.
+ 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
@@ -3216,37 +3767,39 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+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
+ { 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
+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_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.
+ 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
@@ -3254,39 +3807,48 @@ 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"
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- 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
+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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- db_cv_path_kill=$ac_ct_db_cv_path_kill
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP="none"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
else
- db_cv_path_kill="$ac_cv_prog_db_cv_path_kill"
+ STRIP="$ac_cv_prog_STRIP"
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
+ test "$STRIP" = "none" && { echo "$as_me:$LINENO: WARNING: No strip utility found." >&5
+echo "$as_me: WARNING: No strip utility found." >&2;}
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:
@@ -3300,8 +3862,8 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./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
+{ 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
@@ -3323,7 +3885,7 @@ case $as_dir/ in
# 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 -f "$as_dir/$ac_prog$ac_exec_ext" && $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.
@@ -3342,21 +3904,22 @@ case $as_dir/ in
;;
esac
done
+IFS=$as_save_IFS
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
+ # As a last resort, use the slow shell script. Don't cache a
+ # value 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.
+ # removed, or if the value is a relative name.
INSTALL=$ac_install_sh
fi
fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ 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.
@@ -3384,15 +3947,15 @@ INSTALL_TARGET="library_install"
# because the makefile CC may be set to use $(LIBTOOL).
#
# Don't override anything if it's already set from the environment.
-optimize_def="-O"
+optimize_debug="-O"
case "$host_os" in
aix4.3.*|aix5*)
- optimize_def="-O2"
+ optimize_debug="-O2"
CC=${CC-"xlc_r"}
CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
LDFLAGS="$LDFLAGS -Wl,-brtl";;
bsdi3*) CC=${CC-"shlicc2"}
- LIBS="$LIBS -lipc";;
+ LIBSO_LIBS="$LIBSO_LIBS -lipc";;
cygwin*)
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
freebsd*)
@@ -3401,10 +3964,10 @@ freebsd*)
gnu*|k*bsd*-gnu|linux*)
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
hpux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
-irix*) optimize_def="-O2"
+irix*) optimize_debug="-O2"
CPPFLAGS="$CPPFLAGS -D_SGI_MP_SOURCE";;
mpeix*) CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE -D_SOCKET_SOURCE"
- LIBS="$LIBS -lsocket -lsvipc";;
+ LIBSO_LIBS="$LIBSO_LIBS -lsocket -lsvipc";;
osf*) CPPFLAGS="$CPPFLAGS -pthread";;
*qnx*) cat >>confdefs.h <<\_ACEOF
#define HAVE_QNX 1
@@ -3413,20 +3976,14 @@ _ACEOF
;;
solaris*)
- CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS ";;
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 the user wants a debugging environment, change any compiler optimization
+# flags to -g. We used to add -g to the -O compiler flags, but compilers are
+# good enough at code re-organization that debugging with -O no longer works.
+# If you want to compile with a different set of flags, specify CFLAGS in the
+# environment before configuring.
if test "$db_cv_debug" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define DEBUG 1
@@ -3435,13 +3992,14 @@ _ACEOF
- CFLAGS="$CFLAGS -g"
- CXXFLAGS="$CXXFLAGS -g"
- db_cv_build_type=debug
-else
- db_cv_build_type=release
+ optimize_debug="-g"
fi
+# 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_debug}
+CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
# 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
@@ -3456,8 +4014,8 @@ if test -n "$ac_tool_prefix"; then
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
+{ 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
@@ -3470,25 +4028,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$CC" && break
done
fi
@@ -3498,8 +4058,8 @@ if test -z "$CC"; then
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
+{ 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
@@ -3512,29 +4072,45 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_CC" && break
done
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
fi
@@ -3545,21 +4121,35 @@ 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
+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_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler --version >&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_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -v >&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_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
@@ -3584,46 +4174,70 @@ 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 file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $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
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort. b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions. Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files
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.
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
;;
[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
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
break;;
* )
break;;
esac
done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
@@ -3636,19 +4250,23 @@ See \`config.log' for more details." >&2;}
fi
ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
+{ 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
+# Check that 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
+{ 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -3667,22 +4285,27 @@ See \`config.log' for more details." >&2;}
fi
fi
fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&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
+# Check that 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
+{ 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 { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
@@ -3693,9 +4316,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
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_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
break;;
* ) break;;
esac
@@ -3709,14 +4331,14 @@ See \`config.log' for more details." >&2;}
fi
rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
+{ 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
+{ 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
@@ -3736,14 +4358,20 @@ main ()
}
_ACEOF
rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
@@ -3761,12 +4389,12 @@ 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
+{ 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
+{ 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
@@ -3789,24 +4417,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -3815,24 +4455,28 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
+{ 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
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -3848,24 +4492,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -3874,12 +4530,131 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
+/* 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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* 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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+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
elif test $ac_cv_prog_cc_g = yes; then
@@ -3895,12 +4670,12 @@ 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 "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_prog_cc_stdc=no
+ ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3934,12 +4709,17 @@ static char *f (char * (*g) (char **, int), char **p, ...)
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not '\xHH' hex character constants.
These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
+ as 'x'. The following induces an error, until -std is added to get
proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
+ that's true only with -std. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
@@ -3954,205 +4734,74 @@ 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__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cv_prog_cc_c89=$ac_arg
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext
+
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f conftest.$ac_ext
CC=$ac_save_CC
fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+ xno)
+ { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&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" ;;
+ CC="$CC $ac_cv_prog_cc_c89"
+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4160,11 +4809,19 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# Set specific per-compiler flags.
+# We know what compiler we're going to use, now. Set per-compiler flags.
if test "$GCC" = "yes"; then
- # We want -O2 if we're using gcc.
+ # Use -O3 if we're using gcc, unless we're doing a small build, in
+ # which case we use -Os alone. The code size for -O3 is quite a
+ # bit larger than -O2: a compromise is "-Os -finline-functions",
+ # it's smaller and explicitly inlining the functions helps Berkeley
+ # DB.
CFLAGS="$CFLAGS "
- CFLAGS=`echo "$CFLAGS" | sed 's/-O /-O2 /g'`
+ if test "$db_cv_smallbuild" = "yes"; then
+ CFLAGS=`echo "$CFLAGS" | sed 's/-O /-Os /g'`
+ else
+ CFLAGS=`echo "$CFLAGS" | sed 's/-O /-O3 /g'`
+ fi
else
case "$host_os" in
hpux11.0*) ;;
@@ -4184,8 +4841,8 @@ else
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
+{ 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
@@ -4225,6 +4882,7 @@ main ()
char const *s = 0 ? (char *) 0 : (char const *) 0;
*t++ = 0;
+ if (s) return 0;
}
{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
int x[] = {25, 17};
@@ -4243,7 +4901,9 @@ main ()
}
{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
const int foo = 10;
+ if (!foo) return 0;
}
+ return !x[0] && !zero.x;
#endif
;
@@ -4251,24 +4911,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -4277,12 +4949,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_c_const=no
+ ac_cv_c_const=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -4317,8 +4990,8 @@ if test "$db_cv_cxx" = "yes"; then
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
+{ 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
@@ -4331,32 +5004,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$as_me:$LINENO: result: $CCC" >&5
-echo "${ECHO_T}$CCC" >&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
+ { 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 "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&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
@@ -4369,37 +5044,52 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CCC=$ac_ct_CCC
+ if test "x$ac_ct_CCC" = x; then
+ CCC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CCC=$ac_ct_CCC
+ fi
else
CCC="$ac_cv_prog_CCC"
fi
LIBXSO_LIBS="-lC_r $LIBXSO_LIBS"
- LIBS="-lC_r $LIBS";;
+ LIBSO_LIBS="-lC_r $LIBSO_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
+{ 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
@@ -4412,32 +5102,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$as_me:$LINENO: result: $CCC" >&5
-echo "${ECHO_T}$CCC" >&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
+ { 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 "aCC", so it can be a program name with args.
set dummy aCC; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&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
@@ -4450,26 +5142,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CCC=$ac_ct_CCC
+ if test "x$ac_ct_CCC" = x; then
+ CCC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CCC=$ac_ct_CCC
+ fi
else
CCC="$ac_cv_prog_CCC"
fi
@@ -4477,8 +5184,8 @@ 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
+{ 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
@@ -4491,32 +5198,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$as_me:$LINENO: result: $CCC" >&5
-echo "${ECHO_T}$CCC" >&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
+ { 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
+{ 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
@@ -4529,26 +5238,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CCC=$ac_ct_CCC
+ if test "x$ac_ct_CCC" = x; then
+ CCC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CCC=$ac_ct_CCC
+ fi
else
CCC="$ac_cv_prog_CCC"
fi
@@ -4556,8 +5280,8 @@ fi
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
+{ 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
@@ -4570,32 +5294,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$as_me:$LINENO: result: $CCC" >&5
-echo "${ECHO_T}$CCC" >&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
+ { 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
+{ 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
@@ -4608,26 +5334,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CCC=$ac_ct_CCC
+ if test "x$ac_ct_CCC" = x; then
+ CCC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CCC=$ac_ct_CCC
+ fi
else
CCC="$ac_cv_prog_CCC"
fi
@@ -4635,8 +5376,8 @@ fi
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
+{ 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
@@ -4649,32 +5390,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$as_me:$LINENO: result: $CCC" >&5
-echo "${ECHO_T}$CCC" >&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
+ { 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
+{ 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
@@ -4687,44 +5430,63 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CCC=$ac_ct_CCC
+ if test "x$ac_ct_CCC" = x; then
+ CCC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CCC=$ac_ct_CCC
+ fi
else
CCC="$ac_cv_prog_CCC"
fi
;;
esac
fi
- ac_ext=cc
+ ac_ext=cpp
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
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe 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
+{ 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
@@ -4737,36 +5499,38 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
+ { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
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
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe 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
+{ 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
@@ -4779,55 +5543,85 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_CXX" && break
done
-test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
- CXX=$ac_ct_CXX
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
fi
-
+ fi
+fi
# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C++ compiler version" >&5
+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_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler --version >&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_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -v >&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_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -V >&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
+{ 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
@@ -4850,24 +5644,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -4876,24 +5682,28 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
+{ 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
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -4909,24 +5719,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -4935,70 +5757,53 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cxx_g=no
-fi
-rm -f conftest.err 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
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-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
+ CXXFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
/* 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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -5007,61 +5812,91 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* 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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- break
+ ac_cv_prog_cxx_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err 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
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+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
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5069,13 +5904,13 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
###### WORKAROUND: SEE SR #7938
- ac_ext=cc
+ ac_ext=cpp
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
+{ 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
@@ -5105,8 +5940,13 @@ cat >>conftest.$ac_ext <<_ACEOF
#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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -5131,9 +5971,10 @@ 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
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -5143,8 +5984,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -5171,6 +6017,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -5188,8 +6035,8 @@ fi
else
ac_cv_prog_CXXCPP=$CXXCPP
fi
-echo "$as_me:$LINENO: result: $CXXCPP" >&5
-echo "${ECHO_T}$CXXCPP" >&6
+{ 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
@@ -5212,8 +6059,13 @@ cat >>conftest.$ac_ext <<_ACEOF
#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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -5238,9 +6090,10 @@ 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
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -5250,8 +6103,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -5278,6 +6136,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -5303,14 +6162,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-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
+{ 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_ext=cpp
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'
@@ -5333,24 +6191,36 @@ std::ostream *o; return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -5359,9 +6229,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-db_cv_cxx_have_stdheaders=no
+ db_cv_cxx_have_stdheaders=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5370,8 +6241,8 @@ 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
+{ 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
@@ -5381,8 +6252,8 @@ fi
# 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
+{ 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
@@ -5396,8 +6267,8 @@ if test "$GCC" = "yes"; then
esac
fi
fi
-echo "$as_me:$LINENO: result: $db_cv_gcc_2_96" >&5
-echo "${ECHO_T}$db_cv_gcc_2_96" >&6
+{ 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/'`
@@ -5407,8 +6278,8 @@ echo "$as_me: WARNING: INSTALLED GCC COMPILER HAS SERIOUS BUGS; PLEASE UPGRADE."
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
+{ 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
@@ -5422,8 +6293,8 @@ if test "$GXX" = "yes"; then
esac
fi
fi
-echo "$as_me:$LINENO: result: $db_cv_gxx_except" >&5
-echo "${ECHO_T}$db_cv_gxx_except" >&6
+{ 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
@@ -5447,10 +6318,9 @@ export CC CCC
CCC=CXX
# Libtool configuration.
-# Check whether --enable-shared or --disable-shared was given.
+# Check whether --enable-shared was given.
if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- p=${PACKAGE-default}
+ enableval=$enable_shared; p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
@@ -5469,12 +6339,12 @@ if test "${enable_shared+set}" = set; then
esac
else
enable_shared=yes
-fi;
+fi
-# Check whether --enable-static or --disable-static was given.
+
+# Check whether --enable-static was given.
if test "${enable_static+set}" = set; then
- enableval="$enable_static"
- p=${PACKAGE-default}
+ enableval=$enable_static; p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
@@ -5493,12 +6363,12 @@ if test "${enable_static+set}" = set; then
esac
else
enable_static=yes
-fi;
+fi
-# Check whether --enable-fast-install or --disable-fast-install was given.
+
+# Check whether --enable-fast-install was given.
if test "${enable_fast_install+set}" = set; then
- enableval="$enable_fast_install"
- p=${PACKAGE-default}
+ enableval=$enable_fast_install; p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
@@ -5517,10 +6387,11 @@ if test "${enable_fast_install+set}" = set; then
esac
else
enable_fast_install=yes
-fi;
+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
+
+{ 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
@@ -5544,7 +6415,7 @@ 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
+ test ! -f $lt_ac_sed && continue
cat /dev/null > conftest.in
lt_ac_count=0
echo $ECHO_N "0123456789$ECHO_C" >conftest.in
@@ -5573,37 +6444,184 @@ done
fi
SED=$lt_cv_path_SED
-echo "$as_me:$LINENO: result: $SED" >&5
-echo "${ECHO_T}$SED" >&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 "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
+ ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_executable_p "$ac_path_GREP"; } || continue
+ # Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+ $ac_path_GREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_executable_p "$ac_path_EGREP"; } || continue
+ # Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+ $ac_path_EGREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
+
+# Check whether --with-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
-fi;
+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
+ { 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
@@ -5632,11 +6650,11 @@ echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
;;
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
+ { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
else
- echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+ { 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
@@ -5649,7 +6667,7 @@ else
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.
+ # but apparently some variants of GNU ld 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'*)
@@ -5669,21 +6687,21 @@ fi
LD="$lt_cv_path_LD"
if test -n "$LD"; then
- echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
+ { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
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
+{ 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.
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
@@ -5693,20 +6711,20 @@ case `$LD -v 2>&1 </dev/null` in
;;
esac
fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+{ 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
+{ 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
+{ 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
"" | " "*) ;;
@@ -5716,15 +6734,15 @@ reload_cmds='$LD$reload_flag -o $output$reload_objs'
case $host_os in
darwin*)
if test "$GCC" = yes; then
- reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
else
reload_cmds='$LD$reload_flag -o $output$reload_objs'
fi
;;
esac
-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+{ 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
@@ -5732,56 +6750,63 @@ else
# 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=.
- 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"
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_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
;;
*)
- 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
+ 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
- esac
- fi
+ fi
+ done
+ IFS="$lt_save_ifs"
done
- 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
+{ 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
+{ 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
+ { 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
+ { 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
+{ 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
@@ -5831,13 +6856,13 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | kfreebsd*-gnu)
+freebsd* | kfreebsd*-gnu | dragonfly*)
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_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/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.*`
;;
@@ -5853,7 +6878,7 @@ gnu*)
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
- case "$host_cpu" in
+ 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
@@ -5869,6 +6894,11 @@ hpux10.20* | hpux11*)
esac
;;
+interix3*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
irix5* | irix6* | nonstopux*)
case $LD in
*-32|*"-32 ") libmagic=32-bit;;
@@ -5881,15 +6911,6 @@ irix5* | irix6* | nonstopux*)
# This must be Linux ELF.
linux*)
- case $host_cpu in
- alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*)
- lt_cv_deplibs_check_method=pass_all ;;
- *)
- # glibc up to 2.1.1 does not perform some relocations on ARM
- # this will be overridden with pass_all, but let us keep it just in case
- 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`
lt_cv_deplibs_check_method=pass_all
;;
@@ -5923,15 +6944,11 @@ osf3* | osf4* | osf5*)
lt_cv_deplibs_check_method=pass_all
;;
-sco3.2v5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
solaris*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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]'
@@ -5952,17 +6969,20 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
siemens)
lt_cv_deplibs_check_method=pass_all
;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
esac
fi
-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+{ 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
@@ -5973,14 +6993,17 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# Allow CC to be a program name with arguments.
compiler=$CC
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+# Check whether --enable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then
- enableval="$enable_libtool_lock"
+ enableval=$enable_libtool_lock;
+fi
-fi;
test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
@@ -6007,7 +7030,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 6010 "configure"' > conftest.$ac_ext
+ echo '#line 7033 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -6050,7 +7073,7 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- case "`/usr/bin/file conftest.o`" in
+ case `/usr/bin/file conftest.o` in
*32-bit*)
case $host in
x86_64-*linux*)
@@ -6092,8 +7115,8 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# 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
+ { 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
@@ -6119,24 +7142,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6145,9 +7180,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-lt_cv_cc_needs_belf=no
+ lt_cv_cc_needs_belf=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -6156,13 +7192,33 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
+{ 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
;;
+sparc*-*solaris*)
+ # 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
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
esac
@@ -6174,8 +7230,8 @@ 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
+{ 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=
@@ -6209,8 +7265,13 @@ cat >>conftest.$ac_ext <<_ACEOF
#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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6235,9 +7296,10 @@ 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
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6247,8 +7309,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6275,6 +7342,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -6292,8 +7360,8 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
+{ 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
@@ -6316,8 +7384,13 @@ cat >>conftest.$ac_ext <<_ACEOF
#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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6342,9 +7415,10 @@ 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
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6354,8 +7428,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6382,6 +7461,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -6404,8 +7484,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
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
+{ 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
@@ -6429,24 +7509,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6455,9 +7547,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_header_stdc=no
+ ac_cv_header_stdc=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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.
@@ -6513,6 +7606,7 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ctype.h>
+#include <stdlib.h>
#if ((' ' & 0x0FF) == 0x020)
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
@@ -6532,18 +7626,27 @@ main ()
for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i))
|| toupper (i) != TOUPPER (i))
- exit(2);
- exit (0);
+ return 2;
+ return 0;
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6556,12 +7659,14 @@ sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
ac_cv_header_stdc=no
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
+{ 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
cat >>confdefs.h <<\_ACEOF
@@ -6584,9 +7689,9 @@ 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 "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -6600,24 +7705,36 @@ $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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6626,12 +7743,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
+ eval "$as_ac_Header=no"
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_Header'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
@@ -6646,18 +7765,19 @@ 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
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+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
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&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
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -6668,24 +7788,36 @@ $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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6694,15 +7826,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+
+rm -f core conftest.err 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
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -6711,8 +7844,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -6736,9 +7874,10 @@ 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
+{ 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:$ac_c_preproc_warn_flag in
@@ -6762,25 +7901,24 @@ echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to support@sleepycat.com ##
-## ------------------------------------ ##
+ ( cat <<\_ASBOX
+## ---------------------------------------------------------- ##
+## Report this to Oracle Technology Network Berkeley DB forum ##
+## ---------------------------------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | 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 "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
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
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
fi
if test `eval echo '${'$as_ac_Header'}'` = yes; then
@@ -6792,17 +7930,278 @@ fi
done
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ ac_ext=cpp
+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
+/* 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 { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ 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 nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_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
+
+ # 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
+ break
+fi
+
+ 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
+/* 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 { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ 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 nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_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
+
+ # 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 "$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
+
+ac_ext=cpp
+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
+
+fi
+
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 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+ for ac_prog in g77 f77 xlf frt pgf77 cf77 fort77 fl32 af77 f90 xlf90 pgf90 pghpf epcf90 gfortran g95 f95 fort xlf95 ifort ifc efc pgf95 lf95 ftn
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
+{ 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
@@ -6815,36 +8214,38 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
F77=$ac_cv_prog_F77
if test -n "$F77"; then
- echo "$as_me:$LINENO: result: $F77" >&5
-echo "${ECHO_T}$F77" >&6
+ { echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&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 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+ for ac_prog in g77 f77 xlf frt pgf77 cf77 fort77 fl32 af77 f90 xlf90 pgf90 pghpf epcf90 gfortran g95 f95 fort xlf95 ifort ifc efc pgf95 lf95 ftn
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
+{ 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
@@ -6857,48 +8258,78 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_F77" && break
done
- F77=$ac_ct_F77
+ if test "x$ac_ct_F77" = x; then
+ F77=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ F77=$ac_ct_F77
+ fi
fi
# Provide some information about the compiler.
-echo "$as_me:6887:" \
- "checking for Fortran 77 compiler version" >&5
+echo "$as_me:$LINENO: 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_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler --version >&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_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -v >&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_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
@@ -6908,8 +8339,8 @@ rm -f a.out
# input file. (Note that this only needs to work for GNU compilers.)
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
+{ 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
@@ -6922,24 +8353,36 @@ else
end
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6948,20 +8391,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
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
+{ 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
@@ -6972,24 +8416,36 @@ cat >conftest.$ac_ext <<_ACEOF
end
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -6998,13 +8454,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_f77_g=no
+ ac_cv_prog_f77_g=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -7033,8 +8490,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# 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
+{ 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
@@ -7074,20 +8531,50 @@ else
lt_cv_sys_max_cmd_len=8192;
;;
- netbsd* | freebsd* | openbsd* | darwin* )
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
elif test -x /usr/sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
else
- lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
fi
# And add a safety zone
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
;;
- *)
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
# 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.
@@ -7112,19 +8599,19 @@ else
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
+ { 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
+ { echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6; }
fi
# 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
+{ 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
@@ -7138,9 +8625,6 @@ 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'"
@@ -7162,15 +8646,31 @@ hpux*) # Its linker distinguishes data from code symbols
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'"
;;
+linux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDGIRSTW]'
+ 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'"
+ fi
+ ;;
irix* | nonstopux*)
symcode='[BCDEGRST]'
;;
osf*)
symcode='[BCDEGQRST]'
;;
-solaris* | sysv5*)
+solaris*)
symcode='[BDRT]'
;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
sysv4)
symcode='[DFNSTU]'
;;
@@ -7193,8 +8693,11 @@ esac
# Try without a prefix undercore, then with it.
for ac_symprfx in "" "_"; do
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
# 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'"
+ 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
@@ -7312,15 +8815,15 @@ 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
+ { 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
+ { echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6; }
fi
-echo "$as_me:$LINENO: checking for objdir" >&5
-echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+{ 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
@@ -7334,8 +8837,8 @@ else
fi
rmdir .libs 2>/dev/null
fi
-echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-echo "${ECHO_T}$lt_cv_objdir" >&6
+{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6; }
objdir=$lt_cv_objdir
@@ -7356,7 +8859,7 @@ 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//'
+Xsed='sed -e 1s/^X//'
sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
# Same as above, but do not quote variable references.
@@ -7376,7 +8879,7 @@ rm="rm -f"
default_ofile=libtool
can_build_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
+# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
ltmain="$ac_aux_dir/ltmain.sh"
@@ -7386,8 +8889,8 @@ 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
+{ 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
@@ -7400,32 +8903,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
- echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6
+ { echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
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
+{ 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
@@ -7438,27 +8943,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- 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
+ { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- AR=$ac_ct_AR
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
else
AR="$ac_cv_prog_AR"
fi
@@ -7466,8 +8985,8 @@ fi
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
+{ 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
@@ -7480,32 +8999,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
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
+{ 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
@@ -7518,27 +9039,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
fi
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
+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- RANLIB=$ac_ct_RANLIB
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
else
RANLIB="$ac_cv_prog_RANLIB"
fi
@@ -7546,8 +9081,8 @@ 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
+{ 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
@@ -7560,32 +9095,34 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
+ { 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
+ { 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
+{ 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
@@ -7598,27 +9135,41 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
- 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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- STRIP=$ac_ct_STRIP
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
else
STRIP="$ac_cv_prog_STRIP"
fi
@@ -7633,6 +9184,7 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
test -z "$AS" && AS=as
test -z "$CC" && CC=cc
test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$DLLTOOL" && DLLTOOL=dlltool
test -z "$LD" && LD=ld
test -z "$LN_S" && LN_S="ln -s"
@@ -7652,23 +9204,32 @@ 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="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
;;
*)
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
;;
esac
old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
# 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
+ { 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
@@ -7688,7 +9249,7 @@ else
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"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
@@ -7720,17 +9281,17 @@ 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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
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
+ { 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
@@ -7750,7 +9311,7 @@ else
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"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
@@ -7782,11 +9343,11 @@ 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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
else
@@ -7801,21 +9362,21 @@ esac
enable_dlopen=no
enable_win32_dll=no
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+# Check whether --enable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then
- enableval="$enable_libtool_lock"
+ enableval=$enable_libtool_lock;
+fi
-fi;
test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-# Check whether --with-pic or --without-pic was given.
+# Check whether --with-pic was given.
if test "${with_pic+set}" = set; then
- withval="$with_pic"
- pic_mode="$withval"
+ withval=$with_pic; pic_mode="$withval"
else
pic_mode=default
-fi;
+fi
+
test -z "$pic_mode" && pic_mode=default
# Use C for the default configuration in the libtool script
@@ -7845,68 +9406,25 @@ lt_simple_link_test_code='int main(){return(0);}\n'
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# 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
-
-
-#
-# 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
-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
- lt_prog_compiler_static=
-fi
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
## CAVEAT EMPTOR:
@@ -7920,8 +9438,8 @@ 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
+{ 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
@@ -7935,26 +9453,28 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7941: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9459: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7945: \$? = $ac_status" >&5
+ echo "$as_me:9463: \$? = $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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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
+{ 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"
@@ -7968,8 +9488,8 @@ 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
+{ 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,'
@@ -8007,6 +9527,11 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
lt_prog_compiler_pic='-fno-common'
;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -8023,7 +9548,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case "$host_cpu" in
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -8052,7 +9577,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
lt_prog_compiler_pic='-qnocommon'
lt_prog_compiler_wl='-Wl,'
@@ -8070,7 +9595,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
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
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -8094,12 +9619,19 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
linux*)
- case $CC in
+ case $cc_basename in
icc* | ecc*)
lt_prog_compiler_wl='-Wl,'
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-static'
;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
ccc*)
lt_prog_compiler_wl='-Wl,'
# All Alpha code is PIC.
@@ -8114,15 +9646,15 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
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'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
;;
sunos4*)
@@ -8131,7 +9663,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
lt_prog_compiler_static='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.2uw2* | sysv4.3*)
lt_prog_compiler_wl='-Wl,'
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-Bstatic'
@@ -8144,6 +9676,17 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
fi
;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
uts4*)
lt_prog_compiler_pic='-pic'
lt_prog_compiler_static='-Bstatic'
@@ -8155,16 +9698,16 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
esac
fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+{ 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
+{ 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
@@ -8178,26 +9721,28 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8184: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9727: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8188: \$? = $ac_status" >&5
+ echo "$as_me:9731: \$? = $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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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
+{ 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
@@ -8210,7 +9755,7 @@ else
fi
fi
-case "$host_os" in
+case $host_os in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic=
@@ -8220,8 +9765,50 @@ case "$host_os" in
;;
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
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag 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_tmp_static_flag"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker 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
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works=yes
+ fi
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ 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
+ lt_prog_compiler_static=
+fi
+
+
+{ 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
@@ -8238,23 +9825,25 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8244: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9831: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8248: \$? = $ac_status" >&5
+ echo "$as_me:9835: \$? = $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
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
lt_cv_prog_compiler_c_o=yes
fi
fi
- chmod u+w .
+ chmod u+w . 2>&5
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -8265,23 +9854,23 @@ else
$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
+{ 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
+ { 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
+ { 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;}
@@ -8291,8 +9880,8 @@ 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
+{ 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=
@@ -8330,6 +9919,16 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
case $host_os in
cygwin* | mingw* | pw32*)
@@ -8340,6 +9939,10 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
with_gnu_ld=no
fi
;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
openbsd*)
with_gnu_ld=no
;;
@@ -8350,6 +9953,27 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ 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
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
# See if GNU ld supports shared libraries.
case $host_os in
aix3* | aix4* | aix5*)
@@ -8400,10 +10024,10 @@ EOF
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'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /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'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $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
@@ -8412,7 +10036,53 @@ EOF
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'
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix3*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
else
ld_shlibs=no
fi
@@ -8428,7 +10098,7 @@ EOF
fi
;;
- solaris* | sysv5*)
+ solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
cat <<EOF 1>&2
@@ -8449,6 +10119,33 @@ EOF
fi
;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
sunos4*)
archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -8456,31 +10153,6 @@ EOF
hardcode_shlibpath_var=no
;;
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_cmds="$tmp_archive_cmds"
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
-cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-$echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- else
- archive_expsym_cmds="$tmp_archive_cmds"
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
*)
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'
@@ -8491,16 +10163,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
;;
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
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -8512,7 +10179,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# 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
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
@@ -8546,6 +10213,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
break
fi
done
+ ;;
esac
exp_sym_flag='-bexport'
@@ -8564,7 +10232,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
link_all_deplibs=yes
if test "$GCC" = yes; then
- case $host_os in aix4.012|aix4.012.*)
+ 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`
@@ -8583,8 +10251,12 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
+ ;;
esac
shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -8592,11 +10264,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -8624,24 +10296,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -8655,18 +10339,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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"
+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${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"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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
@@ -8685,24 +10371,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -8716,8 +10414,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -8726,13 +10426,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -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=' '
+ whole_archive_flag_spec='$convenience'
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'
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -8771,7 +10469,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
darwin* | rhapsody*)
- case "$host_os" in
+ case $host_os in
rhapsody* | darwin1.[012])
allow_undefined_flag='${wl}-undefined ${wl}suppress'
;;
@@ -8800,16 +10498,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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 $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
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 $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
output_verbose_link_cmd='echo'
archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$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 $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
@@ -8850,7 +10548,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@@ -8873,47 +10571,62 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec='${wl}-E'
;;
- hpux10* | hpux11*)
+ hpux10*)
if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ 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
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -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'
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_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='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
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'
@@ -9007,7 +10720,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
# Both c and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
@@ -9015,21 +10728,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ wlarc='${wl}'
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
+ wlarc=''
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'
@@ -9038,8 +10745,18 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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' ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ *)
+ whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
esac
link_all_deplibs=yes
;;
@@ -9096,36 +10813,45 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
;;
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=no
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
+ 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'
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
else
- archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$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=
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
;;
uts4*)
@@ -9140,15 +10866,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
fi
-echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-echo "${ECHO_T}$ld_shlibs" >&6
+{ 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?
#
@@ -9166,8 +10887,8 @@ x|xyes)
# 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
+ { 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
@@ -9181,6 +10902,7 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
compiler_flags=-v
linker_flags=-v
verstring=
@@ -9203,16 +10925,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
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
+ { 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 dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+{ 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=
@@ -9341,7 +11063,8 @@ cygwin* | mingw* | pw32*)
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'
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -9371,7 +11094,7 @@ cygwin* | mingw* | pw32*)
;;
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}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -9394,7 +11117,7 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
# Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
if test "$GCC" = yes; 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"`
@@ -9429,8 +11152,17 @@ kfreebsd*-gnu)
dynamic_linker='GNU ld.so'
;;
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -9448,14 +11180,19 @@ freebsd*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.01* | freebsdelf3.01*)
+ freebsd3.[01]* | freebsdelf3.[01]*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- *) # from 3.2 on
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
+ freebsd*) # from 4.6 on
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
esac
;;
@@ -9475,7 +11212,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -9515,6 +11252,18 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
+interix3*)
+ 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'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -9574,7 +11323,7 @@ linux*)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -9636,8 +11385,13 @@ nto-qnx*)
openbsd*)
version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- need_version=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
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
@@ -9675,13 +11429,6 @@ osf3* | osf4* | osf5*)
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
@@ -9707,7 +11454,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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'
@@ -9740,6 +11487,29 @@ sysv4*MP*)
fi
;;
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -9751,12 +11521,17 @@ uts4*)
dynamic_linker=no
;;
esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
test "$dynamic_linker" = no && can_build_shared=no
-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
+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
+
+{ 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" || \
@@ -9780,8 +11555,8 @@ else
# directories.
hardcode_action=unsupported
fi
-echo "$as_me:$LINENO: result: $hardcode_action" >&5
-echo "${ECHO_T}$hardcode_action" >&6
+{ 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
@@ -9794,29 +11569,29 @@ 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
+{ 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
+ { 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
+ { 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
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
;;
esac
fi
@@ -9848,8 +11623,8 @@ else
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
+ { 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
@@ -9862,40 +11637,52 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -9904,14 +11691,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_dl_dlopen=no
+ ac_cv_lib_dl_dlopen=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
@@ -9925,8 +11713,8 @@ fi
;;
*)
- echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+ { 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
@@ -9953,53 +11741,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef shl_load
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -10008,18 +11802,19 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_shl_load=no
+ ac_cv_func_shl_load=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
+ { 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
@@ -10032,40 +11827,52 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -10074,19 +11881,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_dld_shl_load=no
+ ac_cv_lib_dld_shl_load=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
+ { 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
@@ -10113,53 +11921,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef dlopen
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#if defined __stub_dlopen || defined __stub___dlopen
choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != dlopen;
+return 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -10168,18 +11982,19 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_dlopen=no
+ ac_cv_func_dlopen=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
+ { 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
@@ -10192,40 +12007,52 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -10234,19 +12061,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_dl_dlopen=no
+ ac_cv_lib_dl_dlopen=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
+ { 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
@@ -10259,40 +12087,52 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -10301,19 +12141,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_svld_dlopen=no
+ ac_cv_lib_svld_dlopen=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
+ { 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
@@ -10326,40 +12167,52 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -10368,14 +12221,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_dld_dld_link=no
+ ac_cv_lib_dld_dld_link=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
@@ -10410,13 +12264,13 @@ fi
test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
save_LDFLAGS="$LDFLAGS"
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+ wl=$lt_prog_compiler_wl 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
+ { 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
@@ -10426,7 +12280,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10429 "configure"
+#line 12283 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10483,6 +12337,8 @@ int main ()
else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
/* dlclose (self); */
}
+ else
+ puts (dlerror ());
exit (status);
}
@@ -10492,12 +12348,12 @@ EOF
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
+ (./conftest; exit; ) >&5 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 ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
esac
else :
# compilation failed
@@ -10508,13 +12364,13 @@ rm -fr conftest*
fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+{ 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
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { 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
@@ -10524,7 +12380,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10527 "configure"
+#line 12383 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10581,6 +12437,8 @@ int main ()
else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
/* dlclose (self); */
}
+ else
+ puts (dlerror ());
exit (status);
}
@@ -10590,12 +12448,12 @@ EOF
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
+ (./conftest; exit; ) >&5 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 ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
esac
else :
# compilation failed
@@ -10606,8 +12464,8 @@ rm -fr conftest*
fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; }
fi
CPPFLAGS="$save_CPPFLAGS"
@@ -10628,19 +12486,19 @@ echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
fi
-# 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
+# Report which library types will 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
+{ 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
+case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
@@ -10655,15 +12513,15 @@ aix4* | aix5*)
fi
;;
esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
+{ 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
+{ 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
+{ 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
@@ -10678,7 +12536,7 @@ if test -f "$ltmain"; then
# 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 \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -10782,7 +12640,7 @@ echo "$as_me: creating $ofile" >&6;}
#
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -10793,7 +12651,7 @@ echo "$as_me: creating $ofile" >&6;}
SED=$lt_SED
# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e s/^X//"
+Xsed="$SED -e 1s/^X//"
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
@@ -10827,6 +12685,12 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -10838,6 +12702,9 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
# A language-specific compiler.
CC=$lt_compiler
@@ -10903,7 +12770,7 @@ 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 ?
+# Must we lock files when doing compilation?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -11146,11 +13013,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
CC="$lt_save_CC"
-# Check whether --with-tags or --without-tags was given.
+# Check whether --with-tags was given.
if test "${with_tags+set}" = set; then
- withval="$with_tags"
- tagnames="$withval"
-fi;
+ withval=$with_tags; tagnames="$withval"
+fi
+
if test -f "$ltmain" && test -n "$tagnames"; then
if test ! -f "${ofile}"; then
@@ -11168,6 +13035,9 @@ echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script
echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
fi
fi
+ if test -z "$LTCFLAGS"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+ fi
# Extract list of available tagged configurations in $ofile.
# Note that this assumes the entire list is on one line.
@@ -11198,8 +13068,10 @@ echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
case $tagname in
CXX)
- if test -n "$CXX" && test "X$CXX" != "Xno"; then
- ac_ext=cc
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ ac_ext=cpp
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'
@@ -11218,6 +13090,7 @@ hardcode_libdir_flag_spec_CXX=
hardcode_libdir_flag_spec_ld_CXX=
hardcode_libdir_separator_CXX=
hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
hardcode_automatic_CXX=no
module_cmds_CXX=
module_expsym_cmds_CXX=
@@ -11235,7 +13108,7 @@ postdeps_CXX=
compiler_lib_search_path_CXX=
# Source file extension for C++ test sources.
-ac_ext=cc
+ac_ext=cpp
# Object file extension for compiled C++ test sources.
objext=o
@@ -11245,17 +13118,34 @@ objext_CXX=$objext
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'
+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"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# Allow CC to be a program name with arguments.
compiler=$CC
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
# Allow CC to be a program name with arguments.
lt_save_CC=$CC
lt_save_LD=$LD
@@ -11266,18 +13156,27 @@ 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
+ $as_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
+ $as_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%^.*/%%'`
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
# We don't want -fno-exception wen compiling C++ code, so set the
# no_builtin_flag separately
@@ -11291,18 +13190,18 @@ if test "$GXX" = yes; then
# Set up default GNU C++ configuration
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
+# Check whether --with-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
-fi;
+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
+ { 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
@@ -11331,11 +13230,11 @@ echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
;;
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
+ { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
else
- echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+ { 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
@@ -11348,7 +13247,7 @@ else
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.
+ # but apparently some variants of GNU ld 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'*)
@@ -11368,21 +13267,21 @@ fi
LD="$lt_cv_path_LD"
if test -n "$LD"; then
- echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
+ { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
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
+{ 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.
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
@@ -11392,8 +13291,8 @@ case `$LD -v 2>&1 </dev/null` in
;;
esac
fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+{ 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
@@ -11443,8 +13342,8 @@ else
fi
# 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
+{ 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*)
@@ -11473,6 +13372,7 @@ case $host_os in
;;
esac
done
+ ;;
esac
exp_sym_flag='-bexport'
@@ -11491,7 +13391,7 @@ case $host_os in
link_all_deplibs_CXX=yes
if test "$GXX" = yes; then
- case $host_os in aix4.012|aix4.012.*)
+ 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`
@@ -11510,8 +13410,12 @@ case $host_os in
hardcode_libdir_flag_spec_CXX='-L$libdir'
hardcode_libdir_separator_CXX=
fi
+ ;;
esac
shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -11551,24 +13455,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -11582,19 +13498,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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"
+ archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${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"
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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
@@ -11613,24 +13531,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -11644,8 +13574,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -11654,16 +13586,26 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -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=' '
+ whole_archive_flag_spec_CXX='$convenience'
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'
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_CXX=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
chorus*)
case $cc_basename in
*)
@@ -11673,7 +13615,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
;;
-
cygwin* | mingw* | pw32*)
# _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
# as there is no search path for DLLs.
@@ -11683,7 +13624,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $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
@@ -11692,13 +13633,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
ld_shlibs_CXX=no
fi
;;
darwin* | rhapsody*)
- case "$host_os" in
+ case $host_os in
rhapsody* | darwin1.[012])
allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
;;
@@ -11736,7 +13677,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
archive_cmds_CXX='$CC -r -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 $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
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
@@ -11744,12 +13685,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
output_verbose_link_cmd='echo'
archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
@@ -11762,11 +13703,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
dgux*)
case $cc_basename in
- ec++)
+ ec++*)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- ghcx)
+ ghcx*)
# Green Hills C++ Compiler
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
@@ -11777,14 +13718,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
esac
;;
- freebsd12*)
+ freebsd[12]*)
# 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* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
ld_shlibs_CXX=yes
@@ -11801,11 +13742,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# location of the library.
case $cc_basename in
- CC)
+ CC*)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- aCC)
+ 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
@@ -11815,7 +13756,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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'
+ 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
@@ -11829,33 +13770,22 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
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_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
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*)
+ case $host_cpu in
+ hppa*64*|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
@@ -11866,14 +13796,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
case $cc_basename in
- CC)
+ 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'
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
@@ -11892,9 +13825,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
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'
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
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'
@@ -11908,11 +13844,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
esac
;;
+ interix3*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
irix5* | irix6*)
case $cc_basename in
- CC)
+ 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'
+ 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 ${output_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
@@ -11923,7 +13873,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
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'
+ 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}${output_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
@@ -11936,7 +13886,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
linux*)
case $cc_basename in
- KCC)
+ KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -11961,7 +13911,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# "CC -Bstatic", where "CC" is the KAI C++ compiler.
old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
;;
- icpc)
+ icpc*)
# Intel C++
with_gnu_ld=yes
# version 8.0 and above of icpc choke on multiply defined symbols
@@ -11973,8 +13923,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
;;
*) # Version 8.0 or newer
- archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
;;
esac
archive_cmds_need_lc_CXX=no
@@ -11982,7 +13936,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
;;
- cxx)
+ pgCC*)
+ # Portland Group C++ compiler
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $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'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_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'
@@ -12013,7 +13976,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
mvs*)
case $cc_basename in
- cxx)
+ cxx*)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
@@ -12039,6 +14002,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
ld_shlibs_CXX=no
;;
openbsd*)
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
@@ -12050,7 +14015,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
osf3*)
case $cc_basename in
- KCC)
+ KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -12066,14 +14031,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
;;
- RCC)
+ RCC*)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- cxx)
+ 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'
+ 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 ${output_objdir}/so_locations -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -12091,7 +14056,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
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'
+ 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}${output_objdir}/so_locations -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -12110,7 +14075,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
osf4* | osf5*)
case $cc_basename in
- KCC)
+ KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -12125,17 +14090,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# the KAI C++ compiler.
old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
;;
- RCC)
+ RCC*)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- cxx)
+ 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_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 ${output_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~
+ $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 ${output_objdir}/so_locations -o $lib~
$rm $lib.exp'
hardcode_libdir_flag_spec_CXX='-rpath $libdir'
@@ -12154,7 +14119,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
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'
+ 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}${output_objdir}/so_locations -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -12175,27 +14140,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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)
+ CC*)
# Sun C++ 4.x
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- lcc)
+ lcc*)
# Lucid
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
@@ -12208,36 +14160,33 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
solaris*)
case $cc_basename in
- CC)
+ CC*)
# Sun C++ 4.2, 5.x and Centerline C++
+ archive_cmds_need_lc_CXX=yes
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_cmds_CXX='$CC -G${allow_undefined_flag} -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'
+ $CC -G${allow_undefined_flag} ${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.*) ;;
+ 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.
+ # linker. We must also pass each convience library through
+ # to the system linker between allextract/defaultextract.
+ # The C++ compiler will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl.
# Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_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'
+ output_verbose_link_cmd='echo'
# Archives containing C++ object files must be created using
# "CC -xar", where "CC" is the Sun C++ compiler. This is
@@ -12245,7 +14194,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# in the archive.
old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
;;
- gcx)
+ gcx*)
# Green Hills C++ Compiler
archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
@@ -12283,12 +14232,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
esac
;;
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag_CXX='${wl}-z,text'
archive_cmds_need_lc_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ # So that behaviour is only enabled if SCOABSPATH is set to a
+ # non-empty value in the environment. Most likely only useful for
+ # creating official distributions of packages.
+ # This is a hack until libtool officially supports absolute path
+ # names for shared libraries.
+ no_undefined_flag_CXX='${wl}-z,text'
+ allow_undefined_flag_CXX='${wl}-z,nodefs'
+ archive_cmds_need_lc_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+ export_dynamic_flag_spec_CXX='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
;;
tandem*)
case $cc_basename in
- NCC)
+ NCC*)
# NonStop-UX NCC 3.20
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
@@ -12308,8 +14308,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
ld_shlibs_CXX=no
;;
esac
-echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6
+{ 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"
@@ -12345,7 +14345,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
# 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\"`"
+ 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
@@ -12421,6 +14421,29 @@ fi
$rm -f confest.$objext
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix3*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ predep_objects_CXX=
+ postdep_objects_CXX=
+ postdeps_CXX=
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ postdeps_CXX='-lCstd -lCrun'
+ ;;
+ esac
+ ;;
+esac
+
+
case " $postdeps_CXX " in
*" -lc "*) archive_cmds_need_lc_CXX=no ;;
esac
@@ -12429,8 +14452,8 @@ 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
+{ 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
@@ -12468,6 +14491,10 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
# DJGPP does not support shared libraries at all
lt_prog_compiler_pic_CXX=
;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
sysv4*MP*)
if test -d /usr/nec; then
lt_prog_compiler_pic_CXX=-Kconform_pic
@@ -12476,7 +14503,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case "$host_cpu" in
+ case $host_cpu in
hppa*64*|ia64*)
;;
*)
@@ -12501,7 +14528,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
chorus*)
case $cc_basename in
- cxch68)
+ 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"
;;
@@ -12510,7 +14537,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
lt_prog_compiler_pic_CXX='-qnocommon'
lt_prog_compiler_wl_CXX='-Wl,'
@@ -12519,10 +14546,10 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
dgux*)
case $cc_basename in
- ec++)
+ ec++*)
lt_prog_compiler_pic_CXX='-KPIC'
;;
- ghcx)
+ ghcx*)
# Green Hills C++ Compiler
lt_prog_compiler_pic_CXX='-pic'
;;
@@ -12530,22 +14557,22 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
esac
;;
- freebsd* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
case $cc_basename in
- CC)
+ CC*)
lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
if test "$host_cpu" != ia64; then
lt_prog_compiler_pic_CXX='+Z'
fi
;;
- aCC)
+ 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
+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -12558,9 +14585,13 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
esac
;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
irix5* | irix6* | nonstopux*)
case $cc_basename in
- CC)
+ CC*)
lt_prog_compiler_wl_CXX='-Wl,'
lt_prog_compiler_static_CXX='-non_shared'
# CC pic flag -KPIC is the default.
@@ -12571,18 +14602,24 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
linux*)
case $cc_basename in
- KCC)
+ KCC*)
# KAI C++ Compiler
lt_prog_compiler_wl_CXX='--backend -Wl,'
lt_prog_compiler_pic_CXX='-fPIC'
;;
- icpc)
+ icpc* | ecpc*)
# Intel C++
lt_prog_compiler_wl_CXX='-Wl,'
lt_prog_compiler_pic_CXX='-KPIC'
lt_prog_compiler_static_CXX='-static'
;;
- cxx)
+ pgCC*)
+ # Portland Group C++ compiler.
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-fpic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ cxx*)
# Compaq C++
# Make sure the PIC flag is empty. It appears that all Alpha
# Linux and Compaq Tru64 Unix objects are PIC.
@@ -12599,7 +14636,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
mvs*)
case $cc_basename in
- cxx)
+ cxx*)
lt_prog_compiler_pic_CXX='-W c,exportall'
;;
*)
@@ -12610,14 +14647,14 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
osf3* | osf4* | osf5*)
case $cc_basename in
- KCC)
+ KCC*)
lt_prog_compiler_wl_CXX='--backend -Wl,'
;;
- RCC)
+ RCC*)
# Rational C++ 2.4.1
lt_prog_compiler_pic_CXX='-pic'
;;
- cxx)
+ cxx*)
# Digital/Compaq C++
lt_prog_compiler_wl_CXX='-Wl,'
# Make sure the PIC flag is empty. It appears that all Alpha
@@ -12631,24 +14668,15 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
psos*)
;;
- sco*)
- case $cc_basename in
- CC)
- lt_prog_compiler_pic_CXX='-fPIC'
- ;;
- *)
- ;;
- esac
- ;;
solaris*)
case $cc_basename in
- CC)
+ 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)
+ gcx*)
# Green Hills C++ Compiler
lt_prog_compiler_pic_CXX='-PIC'
;;
@@ -12658,12 +14686,12 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
sunos4*)
case $cc_basename in
- CC)
+ CC*)
# Sun C++ 4.x
lt_prog_compiler_pic_CXX='-pic'
lt_prog_compiler_static_CXX='-Bstatic'
;;
- lcc)
+ lcc*)
# Lucid
lt_prog_compiler_pic_CXX='-pic'
;;
@@ -12673,7 +14701,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
tandem*)
case $cc_basename in
- NCC)
+ NCC*)
# NonStop-UX NCC 3.20
lt_prog_compiler_pic_CXX='-KPIC'
;;
@@ -12681,7 +14709,14 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
esac
;;
- unixware*)
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ esac
;;
vxworks*)
;;
@@ -12691,16 +14726,16 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
esac
fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+{ 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
+{ 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
@@ -12714,26 +14749,28 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12720: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14755: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:12724: \$? = $ac_status" >&5
+ echo "$as_me:14759: \$? = $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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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
+{ 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
@@ -12746,7 +14783,7 @@ else
fi
fi
-case "$host_os" in
+case $host_os in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic_CXX=
@@ -12756,8 +14793,50 @@ case "$host_os" in
;;
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
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works_CXX=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker 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
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works_CXX=yes
+ fi
+ else
+ lt_prog_compiler_static_works_CXX=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_prog_compiler_static_works_CXX" = xyes; then
+ :
+else
+ lt_prog_compiler_static_CXX=
+fi
+
+
+{ 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
@@ -12774,23 +14853,25 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12780: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14859: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:12784: \$? = $ac_status" >&5
+ echo "$as_me:14863: \$? = $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
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
lt_cv_prog_compiler_c_o_CXX=yes
fi
fi
- chmod u+w .
+ chmod u+w . 2>&5
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -12801,23 +14882,23 @@ else
$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
+{ 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
+ { 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
+ { 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;}
@@ -12827,8 +14908,8 @@ 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
+{ 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
@@ -12845,22 +14926,17 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
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 -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[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
+{ 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?
#
@@ -12878,8 +14954,8 @@ x|xyes)
# 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
+ { 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
@@ -12893,6 +14969,7 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl_CXX
+ pic_flag=$lt_prog_compiler_pic_CXX
compiler_flags=-v
linker_flags=-v
verstring=
@@ -12915,16 +14992,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
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
+ { 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 dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+{ 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=
@@ -13053,7 +15130,8 @@ cygwin* | mingw* | pw32*)
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'
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -13083,7 +15161,7 @@ cygwin* | mingw* | pw32*)
;;
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}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -13106,7 +15184,7 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
# Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
if test "$GCC" = yes; 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"`
@@ -13141,8 +15219,17 @@ kfreebsd*-gnu)
dynamic_linker='GNU ld.so'
;;
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -13160,14 +15247,19 @@ freebsd*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.01* | freebsdelf3.01*)
+ freebsd3.[01]* | freebsdelf3.[01]*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- *) # from 3.2 on
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
+ freebsd*) # from 4.6 on
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
esac
;;
@@ -13187,7 +15279,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -13227,6 +15319,18 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
+interix3*)
+ 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'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -13286,7 +15390,7 @@ linux*)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -13348,8 +15452,13 @@ nto-qnx*)
openbsd*)
version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- need_version=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
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
@@ -13387,13 +15496,6 @@ osf3* | osf4* | osf5*)
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
@@ -13419,7 +15521,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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'
@@ -13452,6 +15554,29 @@ sysv4*MP*)
fi
;;
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -13463,12 +15588,17 @@ uts4*)
dynamic_linker=no
;;
esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
test "$dynamic_linker" = no && can_build_shared=no
-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
+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
+
+{ 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" || \
@@ -13492,8 +15622,8 @@ else
# directories.
hardcode_action_CXX=unsupported
fi
-echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-echo "${ECHO_T}$hardcode_action_CXX" >&6
+{ 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
@@ -13504,841 +15634,6 @@ elif test "$shlibpath_overrides_runpath" = yes ||
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
-
-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
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-
-fi
-
- ;;
-
- *)
- 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* 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
-
-#undef shl_load
-
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* 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
-
-#undef dlopen
-
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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 "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err 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
-
-
-fi
-
-
-fi
-
-
-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 14141 "configure"
-#include "confdefs.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 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
- 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 14239 "configure"
-#include "confdefs.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 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
@@ -14353,7 +15648,7 @@ if test -f "$ltmain"; then
# 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 \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -14454,6 +15749,12 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -14465,6 +15766,9 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
# A language-specific compiler.
CC=$lt_compiler_CXX
@@ -14530,7 +15834,7 @@ 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 ?
+# Must we lock files when doing compilation?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -14807,29 +16111,55 @@ lt_simple_link_test_code=" program t\n end\n"
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# Allow CC to be a program name with arguments.
compiler=$CC
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
# 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%^.*/%%'`
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
-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 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
+{ 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
+case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
@@ -14838,20 +16168,20 @@ aix3*)
fi
;;
aix4* | aix5*)
- test "$enable_shared" = yes && enable_static=no
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
;;
esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
+{ 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
+{ 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
+{ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6; }
GCC_F77="$G77"
LD_F77="$LD"
@@ -14860,8 +16190,8 @@ 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
+{ 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,'
@@ -14899,6 +16229,11 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
lt_prog_compiler_pic_F77='-fno-common'
;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -14915,7 +16250,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case "$host_cpu" in
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -14944,7 +16279,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
lt_prog_compiler_pic_F77='-qnocommon'
lt_prog_compiler_wl_F77='-Wl,'
@@ -14962,7 +16297,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
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
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -14986,12 +16321,19 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
linux*)
- case $CC in
+ case $cc_basename in
icc* | ecc*)
lt_prog_compiler_wl_F77='-Wl,'
lt_prog_compiler_pic_F77='-KPIC'
lt_prog_compiler_static_F77='-static'
;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-fpic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
ccc*)
lt_prog_compiler_wl_F77='-Wl,'
# All Alpha code is PIC.
@@ -15006,15 +16348,15 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
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'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl_F77='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl_F77='-Wl,';;
+ esac
;;
sunos4*)
@@ -15023,7 +16365,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
lt_prog_compiler_static_F77='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.2uw2* | sysv4.3*)
lt_prog_compiler_wl_F77='-Wl,'
lt_prog_compiler_pic_F77='-KPIC'
lt_prog_compiler_static_F77='-Bstatic'
@@ -15036,6 +16378,17 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
fi
;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_can_build_shared_F77=no
+ ;;
+
uts4*)
lt_prog_compiler_pic_F77='-pic'
lt_prog_compiler_static_F77='-Bstatic'
@@ -15047,16 +16400,16 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
esac
fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+{ 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
+{ 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
@@ -15070,26 +16423,28 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15076: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16429: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:15080: \$? = $ac_status" >&5
+ echo "$as_me:16433: \$? = $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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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
+{ 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
@@ -15102,7 +16457,7 @@ else
fi
fi
-case "$host_os" in
+case $host_os in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic_F77=
@@ -15112,8 +16467,50 @@ case "$host_os" in
;;
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
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works_F77=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker 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
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works_F77=yes
+ fi
+ else
+ lt_prog_compiler_static_works_F77=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; }
+
+if test x"$lt_prog_compiler_static_works_F77" = xyes; then
+ :
+else
+ lt_prog_compiler_static_F77=
+fi
+
+
+{ 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
@@ -15130,23 +16527,25 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15136: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16533: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15140: \$? = $ac_status" >&5
+ echo "$as_me:16537: \$? = $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
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
lt_cv_prog_compiler_c_o_F77=yes
fi
fi
- chmod u+w .
+ chmod u+w . 2>&5
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -15157,23 +16556,23 @@ else
$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
+{ 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
+ { 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
+ { 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;}
@@ -15183,8 +16582,8 @@ 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
+{ 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=
@@ -15222,6 +16621,16 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
case $host_os in
cygwin* | mingw* | pw32*)
@@ -15232,6 +16641,10 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
with_gnu_ld=no
fi
;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
openbsd*)
with_gnu_ld=no
;;
@@ -15242,6 +16655,27 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ 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
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
# See if GNU ld supports shared libraries.
case $host_os in
aix3* | aix4* | aix5*)
@@ -15292,10 +16726,10 @@ EOF
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'
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /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'
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $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
@@ -15304,9 +16738,55 @@ EOF
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'
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
- ld_shlibs=no
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ interix3*)
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_F77='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs_F77=no
fi
;;
@@ -15320,7 +16800,7 @@ EOF
fi
;;
- solaris* | sysv5*)
+ solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs_F77=no
cat <<EOF 1>&2
@@ -15341,6 +16821,33 @@ EOF
fi
;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs_F77=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+ esac
+ ;;
+
sunos4*)
archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -15348,31 +16855,6 @@ EOF
hardcode_shlibpath_var_F77=no
;;
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_cmds_F77="$tmp_archive_cmds"
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
-cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-$echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- else
- archive_expsym_cmds_F77="$tmp_archive_cmds"
- fi
- else
- ld_shlibs_F77=no
- fi
- ;;
-
*)
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'
@@ -15383,16 +16865,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
;;
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
+ if test "$ld_shlibs_F77" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec_F77=
+ export_dynamic_flag_spec_F77=
+ whole_archive_flag_spec_F77=
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -15404,7 +16881,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# 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
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct_F77=unsupported
@@ -15438,6 +16915,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
break
fi
done
+ ;;
esac
exp_sym_flag='-bexport'
@@ -15456,7 +16934,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
link_all_deplibs_F77=yes
if test "$GCC" = yes; then
- case $host_os in aix4.012|aix4.012.*)
+ 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`
@@ -15475,8 +16953,12 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
hardcode_libdir_flag_spec_F77='-L$libdir'
hardcode_libdir_separator_F77=
fi
+ ;;
esac
shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -15484,11 +16966,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -15506,24 +16988,36 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
end
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -15537,18 +17031,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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"
+ archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${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"
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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
@@ -15557,24 +17053,36 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
end
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_f77_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -15588,8 +17096,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -15598,13 +17108,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -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=' '
+ whole_archive_flag_spec_F77='$convenience'
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'
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -15638,12 +17146,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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"`'
+ fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
enable_shared_with_static_runtimes_F77=yes
;;
darwin* | rhapsody*)
- case "$host_os" in
+ case $host_os in
rhapsody* | darwin1.[012])
allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
;;
@@ -15672,16 +17180,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
output_verbose_link_cmd='echo'
archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
archive_expsym_cmds_F77='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_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
output_verbose_link_cmd='echo'
archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
@@ -15722,7 +17230,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec_F77='-R$libdir'
hardcode_direct_F77=yes
@@ -15745,47 +17253,62 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_F77='${wl}-E'
;;
- hpux10* | hpux11*)
+ hpux10*)
if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ 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
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
+ ia64*)
+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -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'
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_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_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
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'
@@ -15879,7 +17402,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
# Both c and cxx compiler support -rpath directly
hardcode_libdir_flag_spec_F77='-rpath $libdir'
@@ -15887,21 +17410,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ wlarc='${wl}'
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
+ wlarc=''
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'
@@ -15910,8 +17427,18 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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' ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+ *)
+ whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
esac
link_all_deplibs_F77=yes
;;
@@ -15968,36 +17495,45 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
;;
- sysv4.2uw2*)
- archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_F77=yes
- hardcode_minus_L_F77=no
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+ no_undefined_flag_F77='${wl}-z,text'
+ archive_cmds_need_lc_F77=no
hardcode_shlibpath_var_F77=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
+ 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'
+ archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
else
- archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$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=
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag_F77='${wl}-z,text'
+ allow_undefined_flag_F77='${wl}-z,nodefs'
+ archive_cmds_need_lc_F77=no
hardcode_shlibpath_var_F77=no
+ hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator_F77=':'
+ link_all_deplibs_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
;;
uts4*)
@@ -16012,15 +17548,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
fi
-echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-echo "${ECHO_T}$ld_shlibs_F77" >&6
+{ 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?
#
@@ -16038,8 +17569,8 @@ x|xyes)
# 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
+ { 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
@@ -16053,6 +17584,7 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl_F77
+ pic_flag=$lt_prog_compiler_pic_F77
compiler_flags=-v
linker_flags=-v
verstring=
@@ -16075,16 +17607,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
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
+ { 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 dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+{ 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=
@@ -16213,7 +17745,8 @@ cygwin* | mingw* | pw32*)
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'
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -16243,7 +17776,7 @@ cygwin* | mingw* | pw32*)
;;
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}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -16266,7 +17799,7 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
# Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
if test "$GCC" = yes; 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"`
@@ -16301,8 +17834,17 @@ kfreebsd*-gnu)
dynamic_linker='GNU ld.so'
;;
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -16320,14 +17862,19 @@ freebsd*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.01* | freebsdelf3.01*)
+ freebsd3.[01]* | freebsdelf3.[01]*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- *) # from 3.2 on
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
+ freebsd*) # from 4.6 on
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
esac
;;
@@ -16347,7 +17894,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -16387,6 +17934,18 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
+interix3*)
+ 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'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -16446,7 +18005,7 @@ linux*)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -16508,8 +18067,13 @@ nto-qnx*)
openbsd*)
version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- need_version=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
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
@@ -16547,13 +18111,6 @@ osf3* | osf4* | osf5*)
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
@@ -16579,7 +18136,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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'
@@ -16612,6 +18169,29 @@ sysv4*MP*)
fi
;;
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -16623,12 +18203,17 @@ uts4*)
dynamic_linker=no
;;
esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
test "$dynamic_linker" = no && can_build_shared=no
-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
+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
+
+{ 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" || \
@@ -16652,8 +18237,8 @@ else
# directories.
hardcode_action_F77=unsupported
fi
-echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-echo "${ECHO_T}$hardcode_action_F77" >&6
+{ 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
@@ -16664,36 +18249,6 @@ elif test "$shlibpath_overrides_runpath" = yes ||
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
-
-
# The else clause should only fire when bootstrapping the
# libtool distribution, otherwise you forgot to ship ltmain.sh
@@ -16708,7 +18263,7 @@ if test -f "$ltmain"; then
# 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 \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -16809,6 +18364,12 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -16820,6 +18381,9 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
# A language-specific compiler.
CC=$lt_compiler_F77
@@ -16885,7 +18449,7 @@ 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 ?
+# Must we lock files when doing compilation?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -17111,7 +18675,6 @@ CC="$lt_save_CC"
if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-
# Source file extension for Java test sources.
ac_ext=java
@@ -17123,26 +18686,55 @@ objext_GCJ=$objext
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'
+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"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# Allow CC to be a program name with arguments.
compiler=$CC
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
CC=${GCJ-"gcj"}
compiler=$CC
compiler_GCJ=$CC
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
# GCJ did not exist at the time GCC didn't implicitly link libc in.
archive_cmds_need_lc_GCJ=no
+old_archive_cmds_GCJ=$old_archive_cmds
+
## 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
@@ -17154,8 +18746,8 @@ 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
+{ 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
@@ -17169,26 +18761,28 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17175: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18767: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17179: \$? = $ac_status" >&5
+ echo "$as_me:18771: \$? = $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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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
+{ 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"
@@ -17202,8 +18796,8 @@ 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
+{ 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,'
@@ -17241,6 +18835,11 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
lt_prog_compiler_pic_GCJ='-fno-common'
;;
+ interix3*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -17257,7 +18856,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case "$host_cpu" in
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -17286,7 +18885,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
lt_prog_compiler_pic_GCJ='-qnocommon'
lt_prog_compiler_wl_GCJ='-Wl,'
@@ -17304,7 +18903,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
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
+ case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
@@ -17328,12 +18927,19 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
;;
linux*)
- case $CC in
+ case $cc_basename in
icc* | ecc*)
lt_prog_compiler_wl_GCJ='-Wl,'
lt_prog_compiler_pic_GCJ='-KPIC'
lt_prog_compiler_static_GCJ='-static'
;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-fpic'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
ccc*)
lt_prog_compiler_wl_GCJ='-Wl,'
# All Alpha code is PIC.
@@ -17348,15 +18954,15 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
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'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl_GCJ='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl_GCJ='-Wl,';;
+ esac
;;
sunos4*)
@@ -17365,7 +18971,7 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
lt_prog_compiler_static_GCJ='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.2uw2* | sysv4.3*)
lt_prog_compiler_wl_GCJ='-Wl,'
lt_prog_compiler_pic_GCJ='-KPIC'
lt_prog_compiler_static_GCJ='-Bstatic'
@@ -17378,6 +18984,17 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
fi
;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_can_build_shared_GCJ=no
+ ;;
+
uts4*)
lt_prog_compiler_pic_GCJ='-pic'
lt_prog_compiler_static_GCJ='-Bstatic'
@@ -17389,16 +19006,16 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
esac
fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+{ 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
+{ 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
@@ -17412,26 +19029,28 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17418: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19035: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17422: \$? = $ac_status" >&5
+ echo "$as_me:19039: \$? = $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
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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
+{ 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
@@ -17444,7 +19063,7 @@ else
fi
fi
-case "$host_os" in
+case $host_os in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic_GCJ=
@@ -17454,8 +19073,50 @@ case "$host_os" in
;;
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
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works_GCJ=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker 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
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_prog_compiler_static_works_GCJ=yes
+ fi
+ else
+ lt_prog_compiler_static_works_GCJ=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; }
+
+if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then
+ :
+else
+ lt_prog_compiler_static_GCJ=
+fi
+
+
+{ 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
@@ -17472,23 +19133,25 @@ else
# 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:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17478: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19139: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17482: \$? = $ac_status" >&5
+ echo "$as_me:19143: \$? = $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
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
lt_cv_prog_compiler_c_o_GCJ=yes
fi
fi
- chmod u+w .
+ chmod u+w . 2>&5
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -17499,23 +19162,23 @@ else
$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
+{ 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
+ { 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
+ { 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;}
@@ -17525,8 +19188,8 @@ 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
+{ 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=
@@ -17564,6 +19227,16 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
case $host_os in
cygwin* | mingw* | pw32*)
@@ -17574,6 +19247,10 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
with_gnu_ld=no
fi
;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
openbsd*)
with_gnu_ld=no
;;
@@ -17584,6 +19261,27 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ 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
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
# See if GNU ld supports shared libraries.
case $host_os in
aix3* | aix4* | aix5*)
@@ -17634,10 +19332,10 @@ EOF
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'
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /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'
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $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
@@ -17646,9 +19344,55 @@ EOF
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'
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
- ld_shlibs=no
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+ interix3*)
+ hardcode_direct_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ ld_shlibs_GCJ=no
fi
;;
@@ -17662,7 +19406,7 @@ EOF
fi
;;
- solaris* | sysv5*)
+ solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs_GCJ=no
cat <<EOF 1>&2
@@ -17683,6 +19427,33 @@ EOF
fi
;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs_GCJ=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+ esac
+ ;;
+
sunos4*)
archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -17690,31 +19461,6 @@ EOF
hardcode_shlibpath_var_GCJ=no
;;
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_cmds_GCJ="$tmp_archive_cmds"
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
-cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-$echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- else
- archive_expsym_cmds_GCJ="$tmp_archive_cmds"
- fi
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
*)
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'
@@ -17725,16 +19471,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
;;
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
+ if test "$ld_shlibs_GCJ" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec_GCJ=
+ export_dynamic_flag_spec_GCJ=
+ whole_archive_flag_spec_GCJ=
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -17746,7 +19487,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# 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
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct_GCJ=unsupported
@@ -17780,6 +19521,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
break
fi
done
+ ;;
esac
exp_sym_flag='-bexport'
@@ -17798,7 +19540,7 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
link_all_deplibs_GCJ=yes
if test "$GCC" = yes; then
- case $host_os in aix4.012|aix4.012.*)
+ 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`
@@ -17817,8 +19559,12 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
hardcode_libdir_flag_spec_GCJ='-L$libdir'
hardcode_libdir_separator_GCJ=
fi
+ ;;
esac
shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -17826,11 +19572,11 @@ $echo "local: *; };" >> $output_objdir/$libname.ver~
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -17858,24 +19604,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -17889,18 +19647,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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"
+ archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${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"
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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
@@ -17919,24 +19679,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -17950,8 +19722,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -17960,13 +19734,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -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=' '
+ whole_archive_flag_spec_GCJ='$convenience'
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'
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -18000,12 +19772,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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"`'
+ fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
enable_shared_with_static_runtimes_GCJ=yes
;;
darwin* | rhapsody*)
- case "$host_os" in
+ case $host_os in
rhapsody* | darwin1.[012])
allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
;;
@@ -18034,16 +19806,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
output_verbose_link_cmd='echo'
archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
archive_expsym_cmds_GCJ='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_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
output_verbose_link_cmd='echo'
archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $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
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
@@ -18084,7 +19856,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | kfreebsd*-gnu)
+ freebsd* | kfreebsd*-gnu | dragonfly*)
archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec_GCJ='-R$libdir'
hardcode_direct_GCJ=yes
@@ -18107,47 +19879,62 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_GCJ='${wl}-E'
;;
- hpux10* | hpux11*)
+ hpux10*)
if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*|ia64*)
+ archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ 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
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
+ ia64*)
+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -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'
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_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_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
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'
@@ -18241,7 +20028,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
# Both c and cxx compiler support -rpath directly
hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
@@ -18249,21 +20036,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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
+ wlarc='${wl}'
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
+ wlarc=''
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'
@@ -18272,8 +20053,18 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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' ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+ *)
+ whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
esac
link_all_deplibs_GCJ=yes
;;
@@ -18330,36 +20121,45 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
;;
- sysv4.2uw2*)
- archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=no
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+ no_undefined_flag_GCJ='${wl}-z,text'
+ archive_cmds_need_lc_GCJ=no
hardcode_shlibpath_var_GCJ=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
+ 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'
+ archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
else
- archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$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=
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag_GCJ='${wl}-z,text'
+ allow_undefined_flag_GCJ='${wl}-z,nodefs'
+ archive_cmds_need_lc_GCJ=no
hardcode_shlibpath_var_GCJ=no
+ hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator_GCJ=':'
+ link_all_deplibs_GCJ=yes
+ export_dynamic_flag_spec_GCJ='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
;;
uts4*)
@@ -18374,15 +20174,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
fi
-echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+{ 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
-
#
# Do we need to explicitly link libc?
#
@@ -18400,8 +20195,8 @@ x|xyes)
# 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
+ { 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
@@ -18415,6 +20210,7 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl_GCJ
+ pic_flag=$lt_prog_compiler_pic_GCJ
compiler_flags=-v
linker_flags=-v
verstring=
@@ -18437,16 +20233,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&
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
+ { 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 dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+{ 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=
@@ -18575,7 +20371,8 @@ cygwin* | mingw* | pw32*)
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'
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -18605,7 +20402,7 @@ cygwin* | mingw* | pw32*)
;;
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}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -18628,7 +20425,7 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
# Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
if test "$GCC" = yes; 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"`
@@ -18663,8 +20460,17 @@ kfreebsd*-gnu)
dynamic_linker='GNU ld.so'
;;
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -18682,14 +20488,19 @@ freebsd*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.01* | freebsdelf3.01*)
+ freebsd3.[01]* | freebsdelf3.[01]*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- *) # from 3.2 on
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
+ freebsd*) # from 4.6 on
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
esac
;;
@@ -18709,7 +20520,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -18749,6 +20560,18 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
+interix3*)
+ 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'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -18808,7 +20631,7 @@ linux*)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -18870,8 +20693,13 @@ nto-qnx*)
openbsd*)
version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- need_version=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
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
@@ -18909,13 +20737,6 @@ osf3* | osf4* | osf5*)
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
@@ -18941,7 +20762,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+sysv4 | sysv4.3*)
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'
@@ -18974,6 +20795,29 @@ sysv4*MP*)
fi
;;
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -18985,12 +20829,17 @@ uts4*)
dynamic_linker=no
;;
esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
test "$dynamic_linker" = no && can_build_shared=no
-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
+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
+
+{ 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" || \
@@ -19014,8 +20863,8 @@ else
# directories.
hardcode_action_GCJ=unsupported
fi
-echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-echo "${ECHO_T}$hardcode_action_GCJ" >&6
+{ 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
@@ -19026,841 +20875,6 @@ elif test "$shlibpath_overrides_runpath" = yes ||
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
-
-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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-
-fi
-
- ;;
-
- *)
- 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* 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
-
-#undef shl_load
-
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* 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
-
-#undef dlopen
-
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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 "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err 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
-
-
-fi
-
-
-fi
-
-
-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 19663 "configure"
-#include "confdefs.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 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
- 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 19761 "configure"
-#include "confdefs.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 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
@@ -19875,7 +20889,7 @@ if test -f "$ltmain"; then
# 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 \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -19976,6 +20990,12 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -19987,6 +21007,9 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
# A language-specific compiler.
CC=$lt_compiler_GCJ
@@ -20052,7 +21075,7 @@ 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 ?
+# Must we lock files when doing compilation?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -20277,7 +21300,6 @@ CC="$lt_save_CC"
RC)
-
# Source file extension for RC test sources.
ac_ext=rc
@@ -20296,15 +21318,42 @@ lt_simple_link_test_code="$lt_simple_compile_test_code"
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
# Allow CC to be a program name with arguments.
compiler=$CC
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
CC=${RC-"windres"}
compiler=$CC
compiler_RC=$CC
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
lt_cv_prog_compiler_c_o_RC=yes
# The else clause should only fire when bootstrapping the
@@ -20320,7 +21369,7 @@ if test -f "$ltmain"; then
# 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 \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -20421,6 +21470,12 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -20432,6 +21487,9 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
# A language-specific compiler.
CC=$lt_compiler_RC
@@ -20497,7 +21555,7 @@ 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 ?
+# Must we lock files when doing compilation?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -20778,8 +21836,8 @@ 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
+ { echo "$as_me:$LINENO: checking SOSUFFIX from libtool" >&5
+echo $ECHO_N "checking SOSUFFIX from libtool... $ECHO_C" >&6; }
module=no
versuffix=""
@@ -20800,13 +21858,13 @@ echo "$as_me: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&2;}
fi
SOSUFFIX=$_SOSUFFIX
- echo "$as_me:$LINENO: result: $SOSUFFIX" >&5
-echo "${ECHO_T}$SOSUFFIX" >&6
+ { 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
+ { echo "$as_me:$LINENO: checking MODSUFFIX from libtool" >&5
+echo $ECHO_N "checking MODSUFFIX from libtool... $ECHO_C" >&6; }
module=yes
versuffix=""
@@ -20827,13 +21885,13 @@ echo "$as_me: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&2;}
fi
MODSUFFIX=$_SOSUFFIX
- echo "$as_me:$LINENO: result: $MODSUFFIX" >&5
-echo "${ECHO_T}$MODSUFFIX" >&6
+ { 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
+ { echo "$as_me:$LINENO: checking JMODSUFFIX from libtool" >&5
+echo $ECHO_N "checking JMODSUFFIX from libtool... $ECHO_C" >&6; }
module=yes
versuffix=""
@@ -20858,8 +21916,8 @@ echo "$as_me: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&2;}
else
JMODSUFFIX=$_SOSUFFIX
fi
- echo "$as_me:$LINENO: result: $JMODSUFFIX" >&5
-echo "${ECHO_T}$JMODSUFFIX" >&6
+ { echo "$as_me:$LINENO: result: $JMODSUFFIX" >&5
+echo "${ECHO_T}$JMODSUFFIX" >&6; }
@@ -20905,7 +21963,7 @@ case "$host_os" in
;;
*)
LIBTSO_MODULE="-module"
- LIBTSO_MODSUFFIX=@MODSUFFIX@
+ LIBTSO_MODSUFFIX=$MODSUFFIX
;;
esac
@@ -20956,8 +22014,8 @@ if test "x$JAVAPREFIX" = x; then
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
+{ 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
@@ -20970,25 +22028,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAVAC=$ac_cv_prog_JAVAC
if test -n "$JAVAC"; then
- echo "$as_me:$LINENO: result: $JAVAC" >&5
-echo "${ECHO_T}$JAVAC" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAVAC" && break
done
@@ -20997,8 +22057,8 @@ else
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
+{ 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
@@ -21011,25 +22071,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAVAC=$ac_cv_prog_JAVAC
if test -n "$JAVAC"; then
- echo "$as_me:$LINENO: result: $JAVAC" >&5
-echo "${ECHO_T}$JAVAC" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAVAC" && break
done
test -n "$JAVAC" || JAVAC="$JAVAPREFIX"
@@ -21039,8 +22101,8 @@ test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: no acceptable Java compil
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
+{ 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
@@ -21048,7 +22110,7 @@ else
JAVA_TEST=Test.java
CLASS_TEST=Test.class
cat << \EOF > $JAVA_TEST
-/* #line 21051 "configure" */
+/* #line 22113 "configure" */
public class Test {
}
EOF
@@ -21069,8 +22131,8 @@ 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
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_javac_works" >&5
+echo "${ECHO_T}$ac_cv_prog_javac_works" >&6; }
@@ -21079,8 +22141,8 @@ if test "x$JAVAPREFIX" = x; then
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
+{ 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
@@ -21093,25 +22155,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAR=$ac_cv_prog_JAR
if test -n "$JAR"; then
- echo "$as_me:$LINENO: result: $JAR" >&5
-echo "${ECHO_T}$JAR" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAR" && break
done
@@ -21120,8 +22184,8 @@ else
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
+{ 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
@@ -21134,25 +22198,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAR=$ac_cv_prog_JAR
if test -n "$JAR"; then
- echo "$as_me:$LINENO: result: $JAR" >&5
-echo "${ECHO_T}$JAR" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAR" && break
done
test -n "$JAR" || JAR="$JAVAPREFIX"
@@ -21168,8 +22234,8 @@ if test x$JAVAPREFIX = x; then
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
+{ 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
@@ -21182,25 +22248,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAVA=$ac_cv_prog_JAVA
if test -n "$JAVA"; then
- echo "$as_me:$LINENO: result: $JAVA" >&5
-echo "${ECHO_T}$JAVA" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAVA" && break
done
@@ -21209,8 +22277,8 @@ else
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
+{ 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
@@ -21223,25 +22291,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAVA=$ac_cv_prog_JAVA
if test -n "$JAVA"; then
- echo "$as_me:$LINENO: result: $JAVA" >&5
-echo "${ECHO_T}$JAVA" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAVA" && break
done
test -n "$JAVA" || JAVA="$JAVAPREFIX"
@@ -21253,8 +22323,8 @@ echo "$as_me: error: no acceptable Java virtual machine found in \$PATH" >&2;}
# 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
+{ 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
@@ -21267,28 +22337,30 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
uudecode=$ac_cv_prog_uudecode
if test -n "$uudecode"; then
- echo "$as_me:$LINENO: result: $uudecode" >&5
-echo "${ECHO_T}$uudecode" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
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
+{ 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
@@ -21307,15 +22379,15 @@ EOF
if uudecode$EXEEXT Test.uue; then
ac_cv_prog_uudecode_base64=yes
else
- echo "configure: 21310: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+ echo "configure: 22382: 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
+{ 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
@@ -21333,8 +22405,8 @@ if test "x$JAVAPREFIX" = x; then
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
+{ 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
@@ -21347,25 +22419,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAVAC=$ac_cv_prog_JAVAC
if test -n "$JAVAC"; then
- echo "$as_me:$LINENO: result: $JAVAC" >&5
-echo "${ECHO_T}$JAVAC" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAVAC" && break
done
@@ -21374,8 +22448,8 @@ else
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
+{ 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
@@ -21388,25 +22462,27 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
fi
fi
JAVAC=$ac_cv_prog_JAVAC
if test -n "$JAVAC"; then
- echo "$as_me:$LINENO: result: $JAVAC" >&5
-echo "${ECHO_T}$JAVAC" >&6
+ { 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
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$JAVAC" && break
done
test -n "$JAVAC" || JAVAC="$JAVAPREFIX"
@@ -21416,8 +22492,8 @@ test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: no acceptable Java compil
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
+{ 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
@@ -21425,7 +22501,7 @@ else
JAVA_TEST=Test.java
CLASS_TEST=Test.class
cat << \EOF > $JAVA_TEST
-/* #line 21428 "configure" */
+/* #line 22504 "configure" */
public class Test {
}
EOF
@@ -21446,14 +22522,14 @@ 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
+{ 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
+{ 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
@@ -21462,7 +22538,7 @@ JAVA_TEST=Test.java
CLASS_TEST=Test.class
TEST=Test
cat << \EOF > $JAVA_TEST
-/* [#]line 21465 "configure" */
+/* [#]line 22541 "configure" */
public class Test {
public static void main (String args[]) {
System.exit (0);
@@ -21501,8 +22577,8 @@ fi
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
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_java_works" >&5
+echo "${ECHO_T}$ac_cv_prog_java_works" >&6; }
@@ -21515,8 +22591,8 @@ 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
+{ 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
@@ -21531,36 +22607,37 @@ 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
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $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
+IFS=$as_save_IFS
test -z "$ac_cv_path__ACJNI_JAVAC" && ac_cv_path__ACJNI_JAVAC="$JAVAC"
;;
esac
fi
_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
+ { 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
+ { 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
+{ 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: 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; }; };;
@@ -21570,16 +22647,16 @@ 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
+ { 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
+ { echo "$as_me:$LINENO: result: $_cur" >&5
+echo "${ECHO_T}$_cur" >&6; }
done
_ACJNI_FOLLOWED="$_cur"
@@ -21632,8 +22709,8 @@ do
done
- echo "$as_me:$LINENO: checking java version" >&5
-echo $ECHO_N "checking java version... $ECHO_C" >&6
+ { 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 |
@@ -21641,8 +22718,8 @@ echo $ECHO_N "checking java version... $ECHO_C" >&6
* ) 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
+ { 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]* ) ;;
* )
@@ -21651,6 +22728,14 @@ echo "$as_me: error: Java version 1.3 or higher required, got $JAVA_VERSION" >&2
{ (exit 1); exit 1; }; } ;;
esac
+ # Because of the code that SWIG generates to cast between pointers and
+ # integers, we need to add the flag "-fno-strict-aliasing" to the gcc
+ # command line when compiling the JNI code. This is documented in
+ # [#14953] and at http://www.swig.org/Doc1.3/Java.html
+ if test ${GCC} = "yes"; then
+ SWIGCFLAGS="-fno-strict-aliasing"
+ fi
+
for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
do
CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
@@ -21664,7 +22749,7 @@ fi
# MinGW support.
if test "$db_cv_mingw" = "yes"; then
- OSDIR=os_win32
+ OSDIR=os_windows
PATH_SEPARATOR="\\\\/:"
cat >>confdefs.h <<\_ACEOF
@@ -21681,8 +22766,8 @@ else
fi
# 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
+{ 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
@@ -21695,25 +22780,25 @@ cat >>conftest.$ac_ext <<_ACEOF
#include <sys/types.h>
#include <sys/stat.h>
-#if defined(S_ISBLK) && defined(S_IFDIR)
+#if defined S_ISBLK && defined S_IFDIR
# if S_ISBLK (S_IFDIR)
You lose.
# endif
#endif
-#if defined(S_ISBLK) && defined(S_IFCHR)
+#if defined S_ISBLK && defined S_IFCHR
# if S_ISBLK (S_IFCHR)
You lose.
# endif
#endif
-#if defined(S_ISLNK) && defined(S_IFREG)
+#if defined S_ISLNK && defined S_IFREG
# if S_ISLNK (S_IFREG)
You lose.
# endif
#endif
-#if defined(S_ISSOCK) && defined(S_IFREG)
+#if defined S_ISSOCK && defined S_IFREG
# if S_ISSOCK (S_IFREG)
You lose.
# endif
@@ -21729,8 +22814,8 @@ 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
+{ 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
cat >>confdefs.h <<\_ACEOF
@@ -21739,8 +22824,8 @@ _ACEOF
fi
-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
+{ 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
@@ -21764,24 +22849,36 @@ return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -21790,12 +22887,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_header_time=no
+ ac_cv_header_time=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -21812,9 +22910,9 @@ fi
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 "$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 { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -21836,24 +22934,36 @@ return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -21862,12 +22972,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
+ eval "$as_ac_Header=no"
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_Header'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
@@ -21879,13 +22991,12 @@ 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
+ { 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
/* confdefs.h. */
_ACEOF
@@ -21893,126 +23004,99 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+for ac_lib in '' dir; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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"
+ ac_cv_search_opendir=$ac_res
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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 core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then
+ break
fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+ :
+else
+ ac_cv_search_opendir=no
fi
+rm conftest.$ac_ext
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"
+{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
else
- echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+ { 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
/* confdefs.h. */
_ACEOF
@@ -22020,115 +23104,89 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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 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>conftest.er1
+for ac_lib in '' x; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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"
+ ac_cv_search_opendir=$ac_res
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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 core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then
+ break
fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+ :
+else
+ ac_cv_search_opendir=no
fi
+rm conftest.$ac_ext
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"
+{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -22140,18 +23198,19 @@ fi
for ac_header in sys/select.h sys/time.h sys/fcntl.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
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+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
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&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
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22162,24 +23221,36 @@ $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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -22188,15 +23259,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+
+rm -f core conftest.err 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
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22205,8 +23277,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -22230,9 +23307,10 @@ 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
+{ 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:$ac_c_preproc_warn_flag in
@@ -22256,25 +23334,24 @@ echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to support@sleepycat.com ##
-## ------------------------------------ ##
+ ( cat <<\_ASBOX
+## ---------------------------------------------------------- ##
+## Report this to Oracle Technology Network Berkeley DB forum ##
+## ---------------------------------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | 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 "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
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
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
fi
if test `eval echo '${'$as_ac_Header'}'` = yes; then
@@ -22286,8 +23363,8 @@ 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
+{ 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
@@ -22309,24 +23386,36 @@ return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -22335,7 +23424,7 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -22353,24 +23442,36 @@ return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -22379,14 +23480,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_member_struct_stat_st_blksize=no
+ ac_cv_member_struct_stat_st_blksize=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -22411,17 +23514,17 @@ fi
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
+ { 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
+{ 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
+{ echo "$as_me:$LINENO: checking inttypes.h usability" >&5
+echo $ECHO_N "checking inttypes.h usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22432,24 +23535,36 @@ $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>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -22458,15 +23573,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+
+rm -f core conftest.err 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
+{ echo "$as_me:$LINENO: checking inttypes.h presence" >&5
+echo $ECHO_N "checking inttypes.h presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22475,8 +23591,13 @@ 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
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -22500,9 +23621,10 @@ 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
+{ 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:$ac_c_preproc_warn_flag in
@@ -22526,25 +23648,23 @@ echo "$as_me: WARNING: inttypes.h: section \"Present But Cannot Be Compiled\
echo "$as_me: WARNING: inttypes.h: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: inttypes.h: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: inttypes.h: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to support@sleepycat.com ##
-## ------------------------------------ ##
+ ( cat <<\_ASBOX
+## ---------------------------------------------------------- ##
+## Report this to Oracle Technology Network Berkeley DB forum ##
+## ---------------------------------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | 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
+{ 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
+{ 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
@@ -22557,17 +23677,17 @@ fi
if test "${ac_cv_header_stdint_h+set}" = set; then
- echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
if test "${ac_cv_header_stdint_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_h" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
else
# Is the header compilable?
-echo "$as_me:$LINENO: checking stdint.h usability" >&5
-echo $ECHO_N "checking stdint.h usability... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking stdint.h usability" >&5
+echo $ECHO_N "checking stdint.h usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22578,24 +23698,36 @@ $ac_includes_default
#include <stdint.h>
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -22604,15 +23736,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+
+rm -f core conftest.err 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 stdint.h presence" >&5
-echo $ECHO_N "checking stdint.h presence... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking stdint.h presence" >&5
+echo $ECHO_N "checking stdint.h presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22621,8 +23754,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <stdint.h>
_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -22646,9 +23784,10 @@ 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
+{ 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:$ac_c_preproc_warn_flag in
@@ -22672,25 +23811,23 @@ echo "$as_me: WARNING: stdint.h: section \"Present But Cannot Be Compiled\""
echo "$as_me: WARNING: stdint.h: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: stdint.h: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: stdint.h: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to support@sleepycat.com ##
-## ------------------------------------ ##
+ ( cat <<\_ASBOX
+## ---------------------------------------------------------- ##
+## Report this to Oracle Technology Network Berkeley DB forum ##
+## ---------------------------------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
-echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
if test "${ac_cv_header_stdint_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_stdint_h=$ac_header_preproc
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_h" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
fi
if test $ac_cv_header_stdint_h = yes; then
@@ -22703,17 +23840,17 @@ fi
if test "${ac_cv_header_stddef_h+set}" = set; then
- echo "$as_me:$LINENO: checking for stddef.h" >&5
-echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for stddef.h" >&5
+echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6; }
if test "${ac_cv_header_stddef_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
-echo "${ECHO_T}$ac_cv_header_stddef_h" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
+echo "${ECHO_T}$ac_cv_header_stddef_h" >&6; }
else
# Is the header compilable?
-echo "$as_me:$LINENO: checking stddef.h usability" >&5
-echo $ECHO_N "checking stddef.h usability... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking stddef.h usability" >&5
+echo $ECHO_N "checking stddef.h usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22724,24 +23861,36 @@ $ac_includes_default
#include <stddef.h>
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -22750,15 +23899,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+
+rm -f core conftest.err 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 stddef.h presence" >&5
-echo $ECHO_N "checking stddef.h presence... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking stddef.h presence" >&5
+echo $ECHO_N "checking stddef.h presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -22767,8 +23917,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <stddef.h>
_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
@@ -22792,9 +23947,10 @@ 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
+{ 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:$ac_c_preproc_warn_flag in
@@ -22818,25 +23974,23 @@ echo "$as_me: WARNING: stddef.h: section \"Present But Cannot Be Compiled\""
echo "$as_me: WARNING: stddef.h: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: stddef.h: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: stddef.h: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to support@sleepycat.com ##
-## ------------------------------------ ##
+ ( cat <<\_ASBOX
+## ---------------------------------------------------------- ##
+## Report this to Oracle Technology Network Berkeley DB forum ##
+## ---------------------------------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
-echo "$as_me:$LINENO: checking for stddef.h" >&5
-echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for stddef.h" >&5
+echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6; }
if test "${ac_cv_header_stddef_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_stddef_h=$ac_header_preproc
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
-echo "${ECHO_T}$ac_cv_header_stddef_h" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
+echo "${ECHO_T}$ac_cv_header_stddef_h" >&6; }
fi
if test $ac_cv_header_stddef_h = yes; then
@@ -22847,147 +24001,177 @@ if test $ac_cv_header_stddef_h = yes; then
fi
-db_includes="$db_includes
-#include <stdio.h>"
-# 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
+if test "${ac_cv_header_unistd_h+set}" = set; then
+ { echo "$as_me:$LINENO: checking for unistd.h" >&5
+echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_unistd_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5
+echo "${ECHO_T}$ac_cv_header_unistd_h" >&6; }
else
- cat >conftest.$ac_ext <<_ACEOF
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking unistd.h usability" >&5
+echo $ECHO_N "checking unistd.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
/* 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;
-}
+$ac_includes_default
+#include <unistd.h>
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_header_compiler=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.err 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; }; }
+ ac_header_compiler=no
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
+rm -f core conftest.err 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 unistd.h presence" >&5
+echo $ECHO_N "checking unistd.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
/* 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;
-}
+#include <unistd.h>
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_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_cv_type_size_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_header_preproc=no
fi
-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
- :
+
+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:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: unistd.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: unistd.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: unistd.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: unistd.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: unistd.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: unistd.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: unistd.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: unistd.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: unistd.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: unistd.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: unistd.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: unistd.h: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------------------------------- ##
+## Report this to Oracle Technology Network Berkeley DB forum ##
+## ---------------------------------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for unistd.h" >&5
+echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_unistd_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- { { echo "$as_me:$LINENO: error: No size_t type." >&5
-echo "$as_me: error: No size_t type." >&2;}
- { (exit 1); exit 1; }; }
+ ac_cv_header_unistd_h=$ac_header_preproc
fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5
+echo "${ECHO_T}$ac_cv_header_unistd_h" >&6; }
+fi
+if test $ac_cv_header_unistd_h = yes; then
-# Check for long long and unsigned long long, we only support sequences
-# if those types are available.
-echo "$as_me:$LINENO: checking for long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6
-if test "${ac_cv_type_long_long+set}" = set; then
+ db_includes="$db_includes
+#include <unistd.h>"
+ unistd_h_decl="#include <unistd.h>"
+fi
+
+
+db_includes="$db_includes
+#include <stdio.h>"
+
+# 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
@@ -22998,61 +24182,75 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef off_t ac__type_new_;
int
main ()
{
-if ((long long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (long long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_type_long_long=yes
+ ac_cv_type_off_t=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_long_long=no
+ ac_cv_type_off_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6
-if test $ac_cv_type_long_long = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONG_LONG 1
-_ACEOF
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-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 "$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
@@ -23063,63 +24261,76 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef size_t ac__type_new_;
int
main ()
{
-if ((unsigned long long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned long long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cv_type_size_t=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_long_long=no
+ ac_cv_type_size_t=no
fi
-rm -f conftest.err 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
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UNSIGNED_LONG_LONG 1
-_ACEOF
-
+rm -f core conftest.err 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; }
+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 need to know the sizes of various objects on this system.
-echo "$as_me:$LINENO: checking for char" >&5
-echo $ECHO_N "checking for char... $ECHO_C" >&6
+{ 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
@@ -23131,36 +24342,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef char ac__type_new_;
int
main ()
{
-if ((char *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (char))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23169,20 +24393,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_char=no
+ ac_cv_type_char=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -23196,10 +24421,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -23207,24 +24433,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23238,10 +24476,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -23249,24 +24488,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23275,20 +24526,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -23296,10 +24548,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -23307,24 +24560,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23338,10 +24603,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -23349,24 +24615,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23375,24 +24653,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -23404,10 +24685,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -23415,24 +24697,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23441,26 +24735,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_char=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char), 77
+echo "$as_me: error: cannot compute sizeof (char)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -23469,8 +24757,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (char)); }
-unsigned long ulongval () { return (long) (sizeof (char)); }
+ typedef char ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -23479,35 +24768,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (char))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (char))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (char))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23518,29 +24816,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char), 77
+echo "$as_me: error: cannot compute sizeof (char)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -23552,36 +24849,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef unsigned char ac__type_new_;
int
main ()
{
-if ((unsigned char *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned char))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23590,20 +24900,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_char=no
+ ac_cv_type_unsigned_char=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -23617,10 +24928,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -23628,24 +24940,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23659,10 +24983,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -23670,24 +24995,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23696,20 +25033,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -23717,10 +25055,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -23728,24 +25067,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23759,10 +25110,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -23770,24 +25122,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23796,24 +25160,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -23825,10 +25192,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -23836,24 +25204,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23862,26 +25242,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned char)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned char), 77
+echo "$as_me: error: cannot compute sizeof (unsigned char)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -23890,8 +25264,9 @@ 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)); }
+ typedef unsigned char ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -23900,35 +25275,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (unsigned char))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (unsigned char))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (unsigned char))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -23939,29 +25323,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned char)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned char), 77
+echo "$as_me: error: cannot compute sizeof (unsigned char)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -23973,36 +25356,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef short ac__type_new_;
int
main ()
{
-if ((short *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (short))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24011,20 +25407,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_short=no
+ ac_cv_type_short=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -24038,10 +25435,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -24049,24 +25447,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24080,10 +25490,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -24091,24 +25502,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24117,20 +25540,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -24138,10 +25562,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -24149,24 +25574,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24180,10 +25617,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -24191,24 +25629,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24217,24 +25667,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -24246,10 +25699,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -24257,24 +25711,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24283,26 +25749,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short), 77
+echo "$as_me: error: cannot compute sizeof (short)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -24311,8 +25771,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (short)); }
-unsigned long ulongval () { return (long) (sizeof (short)); }
+ typedef short ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -24321,35 +25782,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (short))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (short))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (short))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24360,29 +25830,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short), 77
+echo "$as_me: error: cannot compute sizeof (short)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -24394,36 +25863,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef unsigned short ac__type_new_;
int
main ()
{
-if ((unsigned short *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned short))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24432,20 +25914,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_short=no
+ ac_cv_type_unsigned_short=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -24459,10 +25942,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -24470,24 +25954,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24501,10 +25997,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -24512,24 +26009,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24538,20 +26047,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -24559,10 +26069,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -24570,24 +26081,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24601,10 +26124,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -24612,24 +26136,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24638,24 +26174,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -24667,10 +26206,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -24678,24 +26218,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24704,26 +26256,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned short)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned short), 77
+echo "$as_me: error: cannot compute sizeof (unsigned short)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -24732,8 +26278,9 @@ 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)); }
+ typedef unsigned short ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -24742,35 +26289,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (unsigned short))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (unsigned short))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (unsigned short))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24781,29 +26337,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned short)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned short), 77
+echo "$as_me: error: cannot compute sizeof (unsigned short)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -24815,36 +26370,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef int ac__type_new_;
int
main ()
{
-if ((int *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24853,20 +26421,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int=no
+ ac_cv_type_int=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -24880,10 +26449,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -24891,24 +26461,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24922,10 +26504,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -24933,24 +26516,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -24959,20 +26554,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -24980,10 +26576,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -24991,24 +26588,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25022,10 +26631,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -25033,24 +26643,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25059,24 +26681,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -25088,10 +26713,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -25099,24 +26725,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25125,26 +26763,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int), 77
+echo "$as_me: error: cannot compute sizeof (int)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -25153,8 +26785,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (int)); }
-unsigned long ulongval () { return (long) (sizeof (int)); }
+ typedef int ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -25163,35 +26796,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (int))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (int))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (int))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25202,29 +26844,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int), 77
+echo "$as_me: error: cannot compute sizeof (int)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -25236,36 +26877,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef unsigned int ac__type_new_;
int
main ()
{
-if ((unsigned int *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned int))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25274,20 +26928,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_int=no
+ ac_cv_type_unsigned_int=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -25301,10 +26956,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -25312,24 +26968,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25343,10 +27011,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -25354,24 +27023,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25380,20 +27061,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -25401,10 +27083,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -25412,24 +27095,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25443,10 +27138,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -25454,24 +27150,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25480,24 +27188,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -25509,10 +27220,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -25520,24 +27232,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25546,26 +27270,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned int), 77
+echo "$as_me: error: cannot compute sizeof (unsigned int)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -25574,8 +27292,9 @@ 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)); }
+ typedef unsigned int ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -25584,35 +27303,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (unsigned int))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (unsigned int))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (unsigned int))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25623,29 +27351,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned int), 77
+echo "$as_me: error: cannot compute sizeof (unsigned int)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -25657,36 +27384,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef long ac__type_new_;
int
main ()
{
-if ((long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25695,20 +27435,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_long=no
+ ac_cv_type_long=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -25722,10 +27463,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -25733,24 +27475,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25764,10 +27518,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -25775,24 +27530,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25801,20 +27568,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -25822,10 +27590,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -25833,24 +27602,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25864,10 +27645,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -25875,24 +27657,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25901,24 +27695,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -25930,10 +27727,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -25941,24 +27739,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -25967,26 +27777,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long), 77
+echo "$as_me: error: cannot compute sizeof (long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -25995,8 +27799,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (long)); }
-unsigned long ulongval () { return (long) (sizeof (long)); }
+ typedef long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -26005,35 +27810,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (long))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (long))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (long))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26044,29 +27858,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long), 77
+echo "$as_me: error: cannot compute sizeof (long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -26078,36 +27891,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef unsigned long ac__type_new_;
int
main ()
{
-if ((unsigned long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26116,20 +27942,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_long=no
+ ac_cv_type_unsigned_long=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -26143,10 +27970,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -26154,24 +27982,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26185,10 +28025,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -26196,24 +28037,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26222,20 +28075,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -26243,10 +28097,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -26254,24 +28109,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26285,10 +28152,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -26296,24 +28164,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26322,24 +28202,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -26351,10 +28234,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -26362,24 +28246,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26388,26 +28284,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned long), 77
+echo "$as_me: error: cannot compute sizeof (unsigned long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -26416,8 +28306,9 @@ 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)); }
+ typedef unsigned long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -26426,35 +28317,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (unsigned long))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (unsigned long))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (unsigned long))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26465,29 +28365,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned long), 77
+echo "$as_me: error: cannot compute sizeof (unsigned long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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 long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
if test "${ac_cv_type_long_long+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -26499,36 +28398,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef long long ac__type_new_;
int
main ()
{
-if ((long long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (long long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26537,20 +28449,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_long_long=no
+ ac_cv_type_long_long=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
-echo "$as_me:$LINENO: checking size of long long" >&5
-echo $ECHO_N "checking size of long long... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of long long" >&5
+echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_long_long+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_long_long" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int 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.
@@ -26564,10 +28477,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -26575,24 +28489,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26606,10 +28532,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -26617,24 +28544,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26643,20 +28582,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -26664,10 +28604,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -26675,24 +28616,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26706,10 +28659,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -26717,24 +28671,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26743,24 +28709,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -26772,10 +28741,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -26783,24 +28753,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26809,26 +28791,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long), 77
+echo "$as_me: error: cannot compute sizeof (long long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -26837,8 +28813,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (long long)); }
-unsigned long ulongval () { return (long) (sizeof (long long)); }
+ typedef long long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -26847,35 +28824,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (long long))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (long long))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (long long))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26886,29 +28872,28 @@ 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 long), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long), 77
+echo "$as_me: error: cannot compute sizeof (long long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_long_long=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
_ACEOF
-echo "$as_me:$LINENO: checking for unsigned long long" >&5
-echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+{ 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
@@ -26920,36 +28905,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef unsigned long long ac__type_new_;
int
main ()
{
-if ((unsigned long long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned long long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -26958,20 +28956,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_long_long=no
+ ac_cv_type_unsigned_long_long=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6; }
-echo "$as_me:$LINENO: checking size of unsigned long long" >&5
-echo $ECHO_N "checking size of unsigned long long... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of unsigned long long" >&5
+echo $ECHO_N "checking size of unsigned long long... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_unsigned_long_long+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_unsigned_long_long" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int 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.
@@ -26985,10 +28984,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long long))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -26996,24 +28996,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27027,10 +29039,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -27038,24 +29051,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27064,20 +29089,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -27085,10 +29111,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long long))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -27096,24 +29123,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27127,10 +29166,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long long))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -27138,24 +29178,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27164,24 +29216,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -27193,10 +29248,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef unsigned long long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (unsigned long long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -27204,24 +29260,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27230,26 +29298,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_unsigned_long_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long long), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned long long), 77
+echo "$as_me: error: cannot compute sizeof (unsigned long long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -27258,8 +29320,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (unsigned long long)); }
-unsigned long ulongval () { return (long) (sizeof (unsigned long long)); }
+ typedef unsigned long long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -27268,35 +29331,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (unsigned long long))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (unsigned long long))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (unsigned long long))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27307,29 +29379,28 @@ 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 long), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (unsigned long long), 77
+echo "$as_me: error: cannot compute sizeof (unsigned long long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_unsigned_long_long=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_unsigned_long_long" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_unsigned_long_long" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
_ACEOF
-echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+{ 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
@@ -27341,36 +29412,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef size_t ac__type_new_;
int
main ()
{
-if ((size_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (size_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27379,20 +29463,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_size_t=no
+ ac_cv_type_size_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
if test "$ac_cv_type_size_t" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int 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.
@@ -27406,10 +29491,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef size_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -27417,24 +29503,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27448,10 +29546,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef size_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -27459,24 +29558,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27485,20 +29596,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -27506,10 +29618,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef size_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (size_t))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -27517,24 +29630,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27548,10 +29673,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef size_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -27559,24 +29685,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27585,24 +29723,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -27614,10 +29755,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef size_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -27625,24 +29767,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27651,26 +29805,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (size_t), 77
+echo "$as_me: error: cannot compute sizeof (size_t)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -27679,8 +29827,9 @@ 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)); }
+ typedef size_t ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -27689,35 +29838,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (size_t))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (size_t))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (size_t))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27728,29 +29886,28 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (size_t), 77
+echo "$as_me: error: cannot compute sizeof (size_t)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
+{ 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
@@ -27762,36 +29919,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef char * ac__type_new_;
int
main ()
{
-if ((char * *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (char *))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27800,20 +29970,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_char_p=no
+ ac_cv_type_char_p=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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: 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
+{ 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
+ # The cast to long int 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.
@@ -27827,10 +29998,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char * ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char *))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -27838,24 +30010,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27869,10 +30053,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char * ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char *))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -27880,24 +30065,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27906,20 +30103,21 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -27927,10 +30125,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char * ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char *))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -27938,24 +30137,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -27969,10 +30180,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char * ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char *))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -27980,24 +30192,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28006,24 +30230,27 @@ 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`
+ 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.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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=
+ ac_lo= ac_hi=
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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`
@@ -28035,10 +30262,11 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+ typedef char * ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char *))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -28046,24 +30274,36 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28072,26 +30312,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char *)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char *), 77
+echo "$as_me: error: cannot compute sizeof (char *)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
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
/* confdefs.h. */
_ACEOF
@@ -28100,8 +30334,9 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
-long longval () { return (long) (sizeof (char *)); }
-unsigned long ulongval () { return (long) (sizeof (char *)); }
+ typedef char * ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -28110,35 +30345,44 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (char *))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (char *))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (char *))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return 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
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28149,22 +30393,21 @@ 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
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char *)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char *), 77
+echo "$as_me: error: cannot compute sizeof (char *)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
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
+{ 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
@@ -28174,8 +30417,8 @@ _ACEOF
# 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
+{ 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
@@ -28187,36 +30430,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_char ac__type_new_;
int
main ()
{
-if ((u_char *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_char))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28225,12 +30481,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_char=no
+ ac_cv_type_u_char=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28239,8 +30496,8 @@ fi
-echo "$as_me:$LINENO: checking for u_short" >&5
-echo $ECHO_N "checking for u_short... $ECHO_C" >&6
+{ 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
@@ -28252,36 +30509,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_short ac__type_new_;
int
main ()
{
-if ((u_short *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_short))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28290,12 +30560,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_short=no
+ ac_cv_type_u_short=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28304,8 +30575,8 @@ fi
-echo "$as_me:$LINENO: checking for u_int" >&5
-echo $ECHO_N "checking for u_int... $ECHO_C" >&6
+{ 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
@@ -28317,36 +30588,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_int ac__type_new_;
int
main ()
{
-if ((u_int *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28355,12 +30639,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int=no
+ ac_cv_type_u_int=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28369,8 +30654,8 @@ fi
-echo "$as_me:$LINENO: checking for u_long" >&5
-echo $ECHO_N "checking for u_long... $ECHO_C" >&6
+{ 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
@@ -28382,36 +30667,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_long ac__type_new_;
int
main ()
{
-if ((u_long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28420,12 +30718,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_long=no
+ ac_cv_type_u_long=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28435,8 +30734,8 @@ fi
# We look for fixed-size variants of u_char, u_short, u_int, u_long as well.
-echo "$as_me:$LINENO: checking for u_int8_t" >&5
-echo $ECHO_N "checking for u_int8_t... $ECHO_C" >&6
+{ 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
@@ -28448,36 +30747,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_int8_t ac__type_new_;
int
main ()
{
-if ((u_int8_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int8_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28486,12 +30798,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int8_t=no
+ ac_cv_type_u_int8_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28518,8 +30831,8 @@ fi
-echo "$as_me:$LINENO: checking for u_int16_t" >&5
-echo $ECHO_N "checking for u_int16_t... $ECHO_C" >&6
+{ 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
@@ -28531,36 +30844,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_int16_t ac__type_new_;
int
main ()
{
-if ((u_int16_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int16_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28569,12 +30895,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int16_t=no
+ ac_cv_type_u_int16_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28601,8 +30928,8 @@ fi
-echo "$as_me:$LINENO: checking for int16_t" >&5
-echo $ECHO_N "checking for int16_t... $ECHO_C" >&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
@@ -28614,36 +30941,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef int16_t ac__type_new_;
int
main ()
{
-if ((int16_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int16_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28652,12 +30992,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int16_t=no
+ ac_cv_type_int16_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28684,8 +31025,8 @@ fi
-echo "$as_me:$LINENO: checking for u_int32_t" >&5
-echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6
+{ 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
@@ -28697,36 +31038,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_int32_t ac__type_new_;
int
main ()
{
-if ((u_int32_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int32_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28735,12 +31089,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int32_t=no
+ ac_cv_type_u_int32_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28767,8 +31122,8 @@ fi
-echo "$as_me:$LINENO: checking for int32_t" >&5
-echo $ECHO_N "checking for int32_t... $ECHO_C" >&6
+{ 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
@@ -28780,36 +31135,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef int32_t ac__type_new_;
int
main ()
{
-if ((int32_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int32_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28818,12 +31186,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int32_t=no
+ ac_cv_type_int32_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -28850,8 +31219,8 @@ fi
-echo "$as_me:$LINENO: checking for u_int64_t" >&5
-echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for u_int64_t" >&5
+echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6; }
if test "${ac_cv_type_u_int64_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -28863,36 +31232,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef u_int64_t ac__type_new_;
int
main ()
{
-if ((u_int64_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int64_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28901,12 +31283,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int64_t=no
+ ac_cv_type_u_int64_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
-echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6; }
if test $ac_cv_type_u_int64_t = yes; then
:
else
@@ -28933,8 +31316,8 @@ fi
-echo "$as_me:$LINENO: checking for int64_t" >&5
-echo $ECHO_N "checking for int64_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for int64_t" >&5
+echo $ECHO_N "checking for int64_t... $ECHO_C" >&6; }
if test "${ac_cv_type_int64_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -28946,36 +31329,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef int64_t ac__type_new_;
int
main ()
{
-if ((int64_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int64_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -28984,12 +31380,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int64_t=no
+ ac_cv_type_int64_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5
-echo "${ECHO_T}$ac_cv_type_int64_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5
+echo "${ECHO_T}$ac_cv_type_int64_t" >&6; }
if test $ac_cv_type_int64_t = yes; then
:
else
@@ -29018,8 +31415,8 @@ fi
# 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
+{ 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
@@ -29031,36 +31428,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef ssize_t ac__type_new_;
int
main ()
{
-if ((ssize_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (ssize_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -29069,12 +31479,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_ssize_t=no
+ ac_cv_type_ssize_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -29100,11 +31511,14 @@ echo "$as_me: error: No signed $ac_cv_sizeof_size_t-byte integral type" >&2;}
fi
+# So far, no autoconf'd systems lack pid_t.
+
+
# Check for uintmax_t -- if none exists, first the largest unsigned integral
# type available.
-echo "$as_me:$LINENO: checking for uintmax_t" >&5
-echo $ECHO_N "checking for uintmax_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for uintmax_t" >&5
+echo $ECHO_N "checking for uintmax_t... $ECHO_C" >&6; }
if test "${ac_cv_type_uintmax_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -29115,36 +31529,49 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef uintmax_t ac__type_new_;
int
main ()
{
-if ((uintmax_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (uintmax_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -29153,17 +31580,18 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_uintmax_t=no
+ ac_cv_type_uintmax_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uintmax_t" >&5
-echo "${ECHO_T}$ac_cv_type_uintmax_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uintmax_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintmax_t" >&6; }
if test $ac_cv_type_uintmax_t = yes; then
:
else
- echo "$as_me:$LINENO: checking for unsigned long long" >&5
-echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+ { 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
@@ -29175,36 +31603,49 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$db_includes
+typedef unsigned long long ac__type_new_;
int
main ()
{
-if ((unsigned long long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (unsigned long long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -29213,12 +31654,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_unsigned_long_long=no
+ ac_cv_type_unsigned_long_long=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
uintmax_t_decl="typedef unsigned long long uintmax_t;"
else
@@ -29231,8 +31673,8 @@ fi
# Check for uintptr_t -- if none exists, find an integral type which is
# the same size as a pointer.
-echo "$as_me:$LINENO: checking for uintptr_t" >&5
-echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; }
if test "${ac_cv_type_uintptr_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -29243,36 +31685,49 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef uintptr_t ac__type_new_;
int
main ()
{
-if ((uintptr_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (uintptr_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -29281,12 +31736,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_uintptr_t=no
+ ac_cv_type_uintptr_t=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
-echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; }
if test $ac_cv_type_uintptr_t = yes; then
:
else
@@ -29313,8 +31769,8 @@ fi
-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
+{ 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
@@ -29335,24 +31791,36 @@ return (EXIT_SUCCESS);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -29361,12 +31829,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-db_cv_exit_defines=no
+ db_cv_exit_defines=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
@@ -29376,540 +31845,8 @@ _ACEOF
fi
-# Test for various functions/libraries -- do tests that change library values
-# first.
-#
-# The Berkeley DB library calls fdatasync, and it's only available in -lrt on
-# Solaris. See if we can find it either without additional libraries or in
-# -lrt. If fdatasync is found in -lrt, add -lrt to the Java and Tcl shared
-# library link lines.
-echo "$as_me:$LINENO: checking for library containing fdatasync" >&5
-echo $ECHO_N "checking for library containing fdatasync... $ECHO_C" >&6
-if test "${ac_cv_search_fdatasync+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_func_search_save_LIBS=$LIBS
-ac_cv_search_fdatasync=no
-cat >conftest.$ac_ext <<_ACEOF
-/* 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 fdatasync ();
-int
-main ()
-{
-fdatasync ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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_fdatasync="none required"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_fdatasync" = no; then
- for ac_lib in rt; do
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* 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 fdatasync ();
-int
-main ()
-{
-fdatasync ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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_fdatasync="-l$ac_lib"
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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_fdatasync" >&5
-echo "${ECHO_T}$ac_cv_search_fdatasync" >&6
-if test "$ac_cv_search_fdatasync" != no; then
- test "$ac_cv_search_fdatasync" = "none required" || LIBS="$ac_cv_search_fdatasync $LIBS"
- if test "$ac_cv_search_fdatasync" != "none required" ; then
- LIBJSO_LIBS="$LIBJSO_LIBS -lrt";
- LIBSO_LIBS="$LIBSO_LIBS -lrt";
- LIBTSO_LIBS="$LIBTSO_LIBS -lrt";
- fi
-fi
-
-
-# The test and example programs use the sched_yield function, taken from -lrt
-# on Solaris.
-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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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_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"
-
-fi
-
-
-# !!!
-# 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
-# inter-process safe. For that reason we always add -lpthread if we find a
-# pthread library.
-#
-# 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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
- TEST_LIBS="$TEST_LIBS -lpthread"
-fi
-ac_cv_lib_pthread=ac_cv_lib_pthread_main
-
-
-# !!!
-# We could be more exact about whether these libraries are needed, but don't
-# bother -- if they exist, we load them, it's only the test programs anyway.
-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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
- TEST_LIBS="$TEST_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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
- TEST_LIBS="$TEST_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
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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 "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_nsl_main=no
-fi
-rm -f conftest.err 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
- TEST_LIBS="$TEST_LIBS -lnsl"
-fi
-ac_cv_lib_nsl=ac_cv_lib_nsl_main
-
-
# Check for mutexes.
-# We do this here because it changes $LIBS.
+# We do this first because it changes $LIBSO_LIBS.
# Mutexes we don't test for, but want the #defines to exist for
@@ -29919,8 +31856,8 @@ ac_cv_lib_nsl=ac_cv_lib_nsl_main
-echo "$as_me:$LINENO: checking for mutexes" >&5
-echo $ECHO_N "checking for mutexes... $ECHO_C" >&6
+{ 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
@@ -29939,18 +31876,14 @@ orig_libs=$LIBS
# *BSD systems).
#
# 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.
+# on Solaris, for two reasons: a bug in SunOS 5.7 causes applications to
+# 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. Second,
+# LWP mutexes are faster than POSIX pthread mutexes by some amount.
#
# Otherwise, test for POSIX threads before UI threads. There are Linux systems
# that support a UI compatibility mode, and applications are more likely to be
# written for POSIX threads than UI threads.
-#
-# Try and link with a threads library if possible. 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.
if test "$db_cv_posixmutexes" = yes; then
db_cv_mutex="posix_only";
fi
@@ -29990,24 +31923,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30016,8 +31961,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -30064,24 +32011,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30090,8 +32049,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
else
cat >conftest.$ac_ext <<_ACEOF
@@ -30123,13 +32084,22 @@ main() {
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30140,8 +32110,10 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
LIBS="$orig_libs"
fi
if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then
@@ -30182,24 +32154,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30208,8 +32192,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
else
cat >conftest.$ac_ext <<_ACEOF
@@ -30241,13 +32227,22 @@ main() {
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30258,8 +32253,10 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
if test "$db_cv_mutex" = "posix_only"; then
@@ -30297,24 +32294,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30323,8 +32332,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
else
cat >conftest.$ac_ext <<_ACEOF
@@ -30354,13 +32365,22 @@ main() {
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30371,8 +32391,10 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
if test "$db_cv_mutex" = "posix_only"; then
LIBS="$LIBS -lpthread"
@@ -30411,24 +32433,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30437,8 +32471,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
else
cat >conftest.$ac_ext <<_ACEOF
@@ -30468,13 +32504,22 @@ main() {
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30485,8 +32530,10 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* 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"; then
@@ -30525,24 +32572,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30551,8 +32610,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS="$orig_libs"
fi
@@ -30584,24 +32645,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30610,8 +32683,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
if test "$db_cv_mutex" = "ui_only"; then
@@ -30651,24 +32726,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30677,8 +32764,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -30709,24 +32798,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30735,8 +32836,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -30766,24 +32869,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30792,8 +32907,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS="$orig_libs"
fi
@@ -30822,24 +32939,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30848,8 +32977,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# abilock_t: SGI
@@ -30877,24 +33008,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30903,8 +33046,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -30936,24 +33081,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -30962,8 +33119,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -30995,24 +33154,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31021,8 +33192,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -31049,24 +33222,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31075,8 +33260,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -31102,24 +33289,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31128,8 +33327,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
@@ -31157,24 +33358,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31183,8 +33396,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# Alpha/gcc
@@ -31211,24 +33426,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31237,8 +33464,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# ARM/gcc: Linux
@@ -31265,24 +33494,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31291,8 +33532,146 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+# MIPS/gcc: Linux
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(__mips) || defined(__mips__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="MIPS/gcc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+# MIPS/gcc: Linux
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(__mips) || defined(__mips__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="MIPS/gcc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# PaRisc/gcc: HP/UX
@@ -31319,24 +33698,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31345,8 +33736,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# PPC/gcc:
@@ -31373,24 +33766,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31399,8 +33804,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# Sparc/gcc: SunOS, Solaris
@@ -31427,24 +33834,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31453,8 +33872,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# 68K/gcc: SunOS
@@ -31481,24 +33902,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31507,8 +33940,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# x86/gcc: FreeBSD, NetBSD, BSD/OS, Linux
@@ -31524,7 +33959,7 @@ int
main ()
{
-#if (defined(i386) || defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
+#if (defined(i386) || defined(__i386__)) && defined(__GNUC__)
exit(0);
#else
FAIL TO COMPILE/LINK
@@ -31535,24 +33970,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31561,8 +34008,78 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+# x86_64/gcc: FreeBSD, NetBSD, BSD/OS, Linux
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(x86_64) || defined(__x86_64__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="x86_64/gcc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# S390/cc: IBM OS/390 Unix
@@ -31589,24 +34106,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31615,8 +34144,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# S390/gcc: Linux
@@ -31643,24 +34174,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31669,11 +34212,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-# ia86/gcc: Linux
+# ia64/gcc: Linux
if test "$db_cv_mutex" = no; then
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -31697,24 +34242,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31723,8 +34280,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# uts/cc: UTS
@@ -31751,24 +34310,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -31777,8 +34348,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
# default to UNIX fcntl system call mutexes.
@@ -31787,8 +34360,12 @@ if test "$db_cv_mutex" = no; then
fi
fi
-echo "$as_me:$LINENO: result: $db_cv_mutex" >&5
-echo "${ECHO_T}$db_cv_mutex" >&6
+{ echo "$as_me:$LINENO: result: $db_cv_mutex" >&5
+echo "${ECHO_T}$db_cv_mutex" >&6; }
+
+
+
+db_threadid_t_decl=notset
case "$db_cv_mutex" in
68K/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
@@ -31867,10 +34444,7 @@ _ACEOF
;;
-POSIX/pthreads/library) LIBS="$LIBS -lpthread"
- LIBJSO_LIBS="$LIBJSO_LIBS -lpthread"
- LIBTSO_LIBS="$LIBTSO_LIBS -lpthread"
- ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
+POSIX/pthreads/library) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_PTHREADS 1
_ACEOF
@@ -31878,9 +34452,6 @@ _ACEOF
;;
POSIX/pthreads/library/private)
- LIBS="$LIBS -lpthread"
- LIBJSO_LIBS="$LIBJSO_LIBS -lpthread"
- LIBTSO_LIBS="$LIBTSO_LIBS -lpthread"
ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_PTHREADS 1
@@ -31902,7 +34473,7 @@ _ACEOF
;;
-ReliantUNIX/initspin) LIBS="$LIBS -lmproc"
+ReliantUNIX/initspin) LIBSO_LIBS="$LIBSO_LIBS -lmproc"
ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_RELIANTUNIX_INITSPIN 1
@@ -31966,7 +34537,6 @@ _ACEOF
;;
-
UI/threads) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_UI_THREADS 1
@@ -31974,8 +34544,7 @@ _ACEOF
;;
-UI/threads/library) LIBS="$LIBS -lthread"
- ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
+UI/threads/library) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_UI_THREADS 1
_ACEOF
@@ -32017,6 +34586,13 @@ _ACEOF
;;
+MIPS/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_MIPS_GCC_ASSEMBLY 1
+_ACEOF
+
+
+;;
x86/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_X86_GCC_ASSEMBLY 1
@@ -32024,6 +34600,13 @@ _ACEOF
;;
+x86_64/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_X86_64_GCC_ASSEMBLY 1
+_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"
@@ -32038,13 +34621,527 @@ echo "$as_me: error: Unknown mutex interface: $db_cv_mutex" >&2;}
{ (exit 1); exit 1; }; };;
esac
-if test "$db_cv_mutex" != "UNIX/fcntl"; then
+# The mutex selection may require specific declarations -- we fill in most of
+# them above, but here are the common ones.
+#
+# The mutex selection may tell us what kind of thread package we're using,
+# which we use to figure out the thread type.
+#
+# If we're configured for the POSIX pthread API, then force the thread ID type
+# and include function, regardless of the mutex selection. Ditto for the
+# (default) Solaris lwp mutexes, because they don't have a way to return the
+# thread ID.
+#
+# Try and link with a threads library if possible. 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.
+# For that reason always add -lpthread if we're using pthread calls or mutexes
+# and there's a pthread library.
+#
+# 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.
+case "$db_cv_mutex" in
+POSIX/pthread*|Solaris/lwp)
+ thread_h_decl="#include <pthread.h>"
+ db_threadid_t_decl="typedef pthread_t db_threadid_t;"
+ { 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
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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 core conftest.err 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
+ LIBSO_LIBS="$LIBSO_LIBS -lpthread"
+fi
+ac_cv_lib_pthread=ac_cv_lib_pthread_main
+;;
+UI/threads*)
+ thread_h_decl="#include <thread.h>"
+ db_threadid_t_decl="typedef thread_t db_threadid_t;"
+ { echo "$as_me:$LINENO: checking for main in -lthread" >&5
+echo $ECHO_N "checking for main in -lthread... $ECHO_C" >&6; }
+if test "${ac_cv_lib_thread_main+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lthread $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_thread_main=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_thread_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_thread_main" >&5
+echo "${ECHO_T}$ac_cv_lib_thread_main" >&6; }
+if test $ac_cv_lib_thread_main = yes; then
+ LIBSO_LIBS="$LIBSO_LIBS -lthread"
+fi
+ac_cv_lib_thread=ac_cv_lib_thread_main
+;;
+*)
+ if test "$db_cv_pthread_api" = "yes"; then
+ thread_h_decl="#include <pthread.h>"
+ db_threadid_t_decl="typedef pthread_t db_threadid_t;"
+ { 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
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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 core conftest.err 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
+ LIBSO_LIBS="$LIBSO_LIBS -lpthread"
+fi
+ac_cv_lib_pthread=ac_cv_lib_pthread_main
+
+ fi;;
+esac
+
+# We need to know if the thread ID type will fit into an integral type and we
+# can compare it for equality and generally treat it like an int, or if it's a
+# non-integral type and we have to treat it like a structure or other untyped
+# block of bytes. For example, MVS typedef's pthread_t to a structure.
+
+
+if test "$db_threadid_t_decl" = "notset"; then
+ db_threadid_t_decl="typedef uintmax_t db_threadid_t;"
cat >>confdefs.h <<\_ACEOF
-#define HAVE_MUTEX_THREADS 1
+#define HAVE_SIMPLE_THREAD_TYPE 1
+_ACEOF
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ $thread_h_decl
+int
+main ()
+{
+
+ $db_threadid_t_decl
+ db_threadid_t a;
+ a = 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_SIMPLE_THREAD_TYPE 1
+_ACEOF
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+# If we're building replication and configured with POSIX pthreads or were
+# told to build using the POSIX API, build the replication manager framework.
+db_cv_build_replication_mgr="no"
+if test "$db_cv_build_replication" = "yes"; then
+
+
+ case "$db_cv_mutex" in
+ POSIX/pthread*|Solaris/lwp)
+ db_cv_build_replication_mgr="yes";;
+ esac
+ if test "$db_cv_pthread_api" = "yes"; then
+ db_cv_build_replication_mgr="yes"
+ fi
+
+ if test "$db_cv_build_replication_mgr" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_REPLICATION_THREADS 1
+_ACEOF
+
+
+ # Solaris requires the socket and nsl libraries to build the
+ # replication manager. Don't add nsl regardless of the OS,
+ # it causes RPC to fail on AIX 4.3.3.
+ case "$host_os" in
+ solaris*)
+ { 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
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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 "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_nsl_main=no
+fi
+
+rm -f core conftest.err 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
+ LIBSO_LIBS="$LIBSO_LIBS -lnsl"
+fi
+ac_cv_lib_nsl=ac_cv_lib_nsl_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
+/* confdefs.h. */
_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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 core conftest.err 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
+ LIBSO_LIBS="$LIBSO_LIBS -lsocket"
+fi
+ac_cv_lib_socket=ac_cv_lib_socket_main
+;;
+ esac
+ fi
fi
# There are 3 classes of mutexes:
@@ -32075,127 +35172,549 @@ _ACEOF
;;
esac
-# Checks for system functions for which we have replacements.
+# Test for various functions/libraries -- do tests that change library values
+# first.
#
-# 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().
+# The yield function on Solaris is almost certainly pthread_yield (LWP threads
+# or POSIX pthreads), or thr_yield (UI threads). There's an outside chance it
+# is sched_yield() though, only available in -lrt on Solaris.
+#
+# The Berkeley DB library calls fdatasync, only available in -lrt on Solaris.
+# See if we can find either without additional libraries or in -lrt. If found
+# in -lrt and we haven't yet added -lrt, add it to the shared library list.
+{ echo "$as_me:$LINENO: checking for library containing fdatasync" >&5
+echo $ECHO_N "checking for library containing fdatasync... $ECHO_C" >&6; }
+if test "${ac_cv_search_fdatasync+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fdatasync ();
+int
+main ()
+{
+return fdatasync ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_fdatasync=$ac_res
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_fdatasync+set}" = set; then
+ break
+fi
+done
+if test "${ac_cv_search_fdatasync+set}" = set; then
+ :
+else
+ ac_cv_search_fdatasync=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_fdatasync" >&5
+echo "${ECHO_T}$ac_cv_search_fdatasync" >&6; }
+ac_res=$ac_cv_search_fdatasync
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ if test "$ac_cv_search_fdatasync" != "none required" ; then
+ LIBSO_LIBS="$LIBSO_LIBS -lrt";
+ fi
+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
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sched_yield ();
+int
+main ()
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_sched_yield=$ac_res
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-for ac_func in getcwd getopt memcmp memcpy memmove raise
-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
+fi
+
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_sched_yield+set}" = set; then
+ break
+fi
+done
+if test "${ac_cv_search_sched_yield+set}" = set; then
+ :
+else
+ ac_cv_search_sched_yield=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_sched_yield" >&5
+echo "${ECHO_T}$ac_cv_search_sched_yield" >&6; }
+ac_res=$ac_cv_search_sched_yield
+if test "$ac_res" != no; then
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ if test "$ac_cv_search_sched_yield" != "none required" ; then
+ LIBSO_LIBS="$LIBSO_LIBS -lrt";
+ fi
+fi
+
+fi
+
+
+# !!!
+# We could be more exact about whether these libraries are needed, but don't
+# bother -- if they exist, we load them, it's only the test programs anyway.
+{ 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
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-/* 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
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
-#undef $ac_func
+ ac_cv_lib_m_main=no
+fi
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
+rm -f core conftest.err 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
+ TEST_LIBS="$TEST_LIBS -lm"
+fi
+ac_cv_lib_m=ac_cv_lib_m_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
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
{
-#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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
+return main ();
+ ;
+ return 0;
}
-#endif
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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 "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_nsl_main=no
+fi
+
+rm -f core conftest.err 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
+ TEST_LIBS="$TEST_LIBS -lnsl"
+fi
+ac_cv_lib_nsl=ac_cv_lib_nsl_main
+
+{ 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
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
int
main ()
{
-return f != $ac_func;
+return 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ ac_cv_lib_pthread_main=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ ac_cv_lib_pthread_main=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
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
+{ 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
+ TEST_LIBS="$TEST_LIBS -lpthread"
+fi
+ac_cv_lib_pthread=ac_cv_lib_pthread_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
- case $LIBOBJS in
- "$ac_func.$ac_objext" | \
- *" $ac_func.$ac_objext" | \
- "$ac_func.$ac_objext "* | \
- *" $ac_func.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
-done
+
+rm -f core conftest.err 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
+ TEST_LIBS="$TEST_LIBS -lsocket"
+fi
+ac_cv_lib_socket=ac_cv_lib_socket_main
+
+
+# Update LIBS so that the rest of our tests are run with the libraries we'll
+# load against.
+LIBS="$LIBSO_LIBS"
+
+# Checks for system functions for which we have replacements.
+#
+# 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().
+
+
+
+
+
+
+
+
+
+
+
+
@@ -32203,12 +35722,23 @@ done
-for ac_func in strcasecmp strdup strerror strtol strtoul
+
+
+
+
+
+
+
+
+for ac_func in \
+ abort atoi atol getcwd getenv getopt isalpha isdigit isprint isspace\
+ memcmp memcpy memmove printf raise rand strcasecmp strcat strchr\
+ strdup strerror strncat strncmp strrchr strsep strtol strtoul
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -32234,53 +35764,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32289,25 +35825,25 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&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
- case $LIBOBJS in
- "$ac_func.$ac_objext" | \
- *" $ac_func.$ac_objext" | \
- "$ac_func.$ac_objext "* | \
+ case " $LIBOBJS " in
*" $ac_func.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
esac
fi
@@ -32322,12 +35858,32 @@ done
-for ac_func in _fstati64 clock_gettime directio fdatasync ftruncate getrusage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in \
+ _fstati64 clock_gettime directio fchmod fcntl fdatasync getaddrinfo\
+ getrusage gettimeofday getuid mprotect pstat_getdynamic pthread_yield\
+ sched_yield select sigaction snprintf stat strftime sysconf vsnprintf\
+ yield
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -32353,53 +35909,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32408,13 +35970,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -32424,16 +35988,14 @@ fi
done
+# Replication can't run correctly if ftruncate isn't available.
-
-
-
-for ac_func in gettimeofday getuid pstat_getdynamic rand sched_yield
+for ac_func in ftruncate
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -32459,53 +36021,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32514,13 +36082,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -32529,18 +36099,25 @@ _ACEOF
fi
done
+if test \
+ "$db_cv_build_replication" = "yes" -a "$ac_cv_func_ftruncate" = "no"; then
+ db_cv_build_replication=no
+ { echo "$as_me:$LINENO: WARNING: replication requires ftruncate, replication disabled." >&5
+echo "$as_me: WARNING: replication requires ftruncate, replication disabled." >&2;}
+fi
+# ctime_r --
+#
+# There are two versions of ctime_r, one of which takes a buffer length as a
+# third argument, and one which only takes two arguments. (There is also a
+# difference in return values, but we handle that in the code itself.)
-
-
-
-
-for ac_func in select snprintf srand sysconf vsnprintf yield
+for ac_func in ctime_r
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -32566,53 +36143,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32621,13 +36204,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -32636,6 +36221,87 @@ _ACEOF
fi
done
+if test "$ac_cv_func_ctime_r" = "yes"; then
+{ echo "$as_me:$LINENO: checking for 2 or 3 argument version of ctime_r" >&5
+echo $ECHO_N "checking for 2 or 3 argument version of ctime_r... $ECHO_C" >&6; }
+if test "${db_cv_ctime_r_3arg+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <time.h>
+int
+main ()
+{
+
+ ctime_r(NULL, NULL, 100);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_ctime_r_3arg="3-argument"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ db_cv_ctime_r_3arg="2-argument"
+fi
+
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $db_cv_ctime_r_3arg" >&5
+echo "${ECHO_T}$db_cv_ctime_r_3arg" >&6; }
+fi
+if test "$db_cv_ctime_r_3arg" = "3-argument"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_CTIME_R_3ARG 1
+_ACEOF
+
+
+
+fi
# Pread/pwrite.
# HP-UX has pread/pwrite, but it doesn't work with largefile support.
@@ -32650,9 +36316,9 @@ echo "$as_me: WARNING: pread/pwrite interfaces ignored on $host_os-$host_vendor.
for ac_func in pread pwrite
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -32678,53 +36344,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32733,13 +36405,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -32751,8 +36425,8 @@ done
esac
# 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
+{ 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
@@ -32777,24 +36451,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32803,13 +36489,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-db_cv_fcntl_f_setfd=no
+ db_cv_fcntl_f_setfd=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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
@@ -32821,12 +36508,10 @@ fi
# A/UX has a broken getopt(3).
case "$host_os" in
-aux*) case $LIBOBJS in
- "getopt.$ac_objext" | \
- *" getopt.$ac_objext" | \
- "getopt.$ac_objext "* | \
+aux*) case " $LIBOBJS " in
*" getopt.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS getopt.$ac_objext" ;;
+ *) LIBOBJS="$LIBOBJS getopt.$ac_objext"
+ ;;
esac
;;
esac
@@ -32835,8 +36520,8 @@ esac
# Linux and SGI require buffer alignment we may not match, otherwise writes
# will fail. Default to not using the O_DIRECT flag.
if test "$db_cv_o_direct" = "yes"; then
- echo "$as_me:$LINENO: checking for open/O_DIRECT" >&5
-echo $ECHO_N "checking for open/O_DIRECT... $ECHO_C" >&6
+ { 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
@@ -32861,24 +36546,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32887,13 +36584,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-db_cv_open_o_direct=no
+ db_cv_open_o_direct=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ echo "$as_me:$LINENO: result: $db_cv_open_o_direct" >&5
+echo "${ECHO_T}$db_cv_open_o_direct" >&6; }
if test \
"$db_cv_o_direct" = "yes" -a "$db_cv_open_o_direct" = "yes"; then
cat >>confdefs.h <<\_ACEOF
@@ -32906,15 +36604,15 @@ _ACEOF
fi
# Check for largefile support.
-# Check whether --enable-largefile or --disable-largefile was given.
+# Check whether --enable-largefile was given.
if test "${enable_largefile+set}" = set; then
- enableval="$enable_largefile"
+ enableval=$enable_largefile;
+fi
-fi;
if test "$enable_largefile" != no; then
- 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
+ { 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
@@ -32922,8 +36620,8 @@ else
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.
+ # 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
/* confdefs.h. */
_ACEOF
@@ -32947,25 +36645,37 @@ main ()
return 0;
}
_ACEOF
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -32974,28 +36684,42 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext
- CC="$CC -n32"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33004,22 +36728,24 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext
+
+rm -f core conftest.err 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
+{ 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
+ { 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
@@ -33049,24 +36775,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33075,8 +36813,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -33102,24 +36842,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33128,13 +36880,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
cat >>confdefs.h <<_ACEOF
@@ -33143,8 +36897,8 @@ _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
+ { 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
@@ -33174,24 +36928,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33200,8 +36966,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -33227,24 +36995,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33253,13 +37033,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err 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
+{ 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
cat >>confdefs.h <<_ACEOF
@@ -33293,9 +37075,9 @@ echo "$as_me: WARNING: mlock(2) interface ignored on $host_os-$host_vendor." >&2
for ac_func in mmap munmap
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -33321,53 +37103,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33376,13 +37164,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -33403,9 +37193,9 @@ echo "$as_me: WARNING: mmap(2) interface ignored on $host_os-$host_vendor." >&2;
for ac_func in mlock munlock
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -33431,53 +37221,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33486,13 +37282,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -33506,9 +37304,9 @@ done
for ac_func in mmap munmap
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -33534,53 +37332,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33589,13 +37393,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -33623,9 +37429,9 @@ echo "$as_me: WARNING: shmget(2) interface ignored on $host_os-$host_vendor." >&
for ac_func in shmget
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 "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -33651,53 +37457,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 $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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33706,13 +37518,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -33748,21 +37562,21 @@ _ACEOF
# Prefer the -C option to rpcgen which generates ANSI C-conformant
# code.
RPCGEN="rpcgen -C"
- echo "$as_me:$LINENO: checking \"$RPCGEN\" build of db_server.h" >&5
-echo $ECHO_N "checking \"$RPCGEN\" build of db_server.h... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking \"$RPCGEN\" build of db_server.h" >&5
+echo $ECHO_N "checking \"$RPCGEN\" build of db_server.h... $ECHO_C" >&6; }
$RPCGEN -h $XDR_FILE > db_server.h 2>/dev/null
if test $? -ne 0; then
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
# Try rpcgen without the -C option.
RPCGEN="rpcgen"
- echo "$as_me:$LINENO: checking \"$RPCGEN\" build of db_server.h" >&5
-echo $ECHO_N "checking \"$RPCGEN\" build of db_server.h... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking \"$RPCGEN\" build of db_server.h" >&5
+echo $ECHO_N "checking \"$RPCGEN\" build of db_server.h... $ECHO_C" >&6; }
$RPCGEN -h $XDR_FILE > db_server.h 2>/dev/null
if test $? -ne 0; then
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
{ { echo "$as_me:$LINENO: error: Unable to build RPC support: $RPCGEN failed." >&5
echo "$as_me: error: Unable to build RPC support: $RPCGEN failed." >&2;}
{ (exit 1); exit 1; }; }
@@ -33785,8 +37599,8 @@ echo "$as_me: error: Unable to build RPC support: $RPCGEN failed." >&2;}
< $srcdir/../rpc_server/c/gen_db_server.c > gen_db_server.c
fi
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
$RPCGEN -l $XDR_FILE |
sed -e 's/^#include.*db_server.h.*/#include "db_server.h"/' \
@@ -33802,7 +37616,6 @@ echo "${ECHO_T}yes" >&6
-e 's/^}/__dbsrv_timeout(0);}/' \
-e '}' \
-e '1,/^#include/s/^#include/#include "db_config.h"\
-#include "db_int_def.h"\
&/' > db_server_svc.c
$RPCGEN -c $XDR_FILE |
@@ -33814,10 +37627,9 @@ echo "${ECHO_T}yes" >&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
+ # Solaris and HPUX need the nsl library to build RPC.
+ { 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
@@ -33844,53 +37656,59 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef svc_run
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#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)
+#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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -33899,19 +37717,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_svc_run=no
+ ac_cv_func_svc_run=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err 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
+{ 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 "$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 "$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
@@ -33923,234 +37742,70 @@ 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define svc_run to an innocuous variant, in case <limits.h> declares svc_run.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define svc_run innocuous_svc_run
-
-/* 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
-
-#undef svc_run
-
-/* 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 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>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ ac_cv_lib_nsl_main=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.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+ ac_cv_lib_nsl_main=no
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 "$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
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* 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>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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (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); }; } &&
- { 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.err conftest.$ac_objext \
+rm -f core conftest.err 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"
-
+{ 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
+ LIBSO_LIBS="$LIBSO_LIBS -lnsl"
fi
+ac_cv_lib_nsl=ac_cv_lib_nsl_main
fi
-;;
- esac
+
fi
@@ -34164,8 +37819,6 @@ echo "$as_me: error: Tcl requires shared libraries" >&2;}
fi
-
-
if test "${ac_cv_c_tclconfig+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -34206,16 +37859,16 @@ echo "$as_me: error: can't find Tcl configuration definitions" >&2;}
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
+ { 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
+ { 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
+ { echo "$as_me:$LINENO: result: file not found" >&5
+echo "${ECHO_T}file not found" >&6; }
fi
# DB requires at least version 8.4.
@@ -34226,12 +37879,11 @@ 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}"
+ # The eval is required to do substitution (for example, the TCL_DBGX
+ # substitution in the TCL_LIB_FILE variable.
+ eval "TCL_INCLUDE_SPEC=\"${TCL_INCLUDE_SPEC}\""
+ eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
+ eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
#
@@ -34252,12 +37904,9 @@ echo "$as_me: error: Berkeley DB requires Tcl version 8.4 or better." >&2;}
- TCL_TCLSH="${TCL_PREFIX}/bin/tclsh${TCL_VERSION}"
+ 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)"
@@ -34265,8 +37914,9 @@ fi
# Optional sequence code.
- echo "$as_me:$LINENO: checking for 64-bit integral type support for sequences" >&5
-echo $ECHO_N "checking for 64-bit integral type support for sequences... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for 64-bit integral type support for sequences" >&5
+echo $ECHO_N "checking for 64-bit integral type support for sequences... $ECHO_C" >&6; }
+
db_cv_build_sequence="yes"
# Have to have found 64-bit types to support sequences. If we don't
@@ -34278,13 +37928,27 @@ echo $ECHO_N "checking for 64-bit integral type support for sequences... $ECHO_C
db_cv_build_sequence="no"
fi
- # Have to be able to cast variables to the "unsigned long long" and
- # "long long" types, that's our cast for the printf "%ll[du]" format.
- if test "$ac_cv_type_long_long" = "no"; then
+ # Figure out what type is the right size, and set the format.
+
+
+ db_cv_seq_type="no"
+ if test "$db_cv_build_sequence" = "yes" -a\
+ "$ac_cv_sizeof_long" -eq "8"; then
+ db_cv_seq_type="long"
+ db_cv_seq_fmt='"%ld"'
+ db_cv_seq_ufmt='"%lu"'
+ INT64_FMT='#define INT64_FMT "%ld"'
+ UINT64_FMT='#define UINT64_FMT "%lu"'
+ else if test "$db_cv_build_sequence" = "yes" -a\
+ "$ac_cv_sizeof_long_long" -eq "8"; then
+ db_cv_seq_type="long long"
+ db_cv_seq_fmt='"%lld"'
+ db_cv_seq_ufmt='"%llu"'
+ INT64_FMT='#define INT64_FMT "%lld"'
+ UINT64_FMT='#define UINT64_FMT "%llu"'
+ else
db_cv_build_sequence="no"
fi
- if test "$ac_cv_type_unsigned_long_long" = "no"; then
- db_cv_build_sequence="no"
fi
# Test to see if we can declare variables of the appropriate size
@@ -34303,17 +37967,17 @@ int
main ()
{
- long long l;
- unsigned long long u;
- char buf100;
+ $db_cv_seq_type l;
+ unsigned $db_cv_seq_type u;
+ char buf[100];
- buf0 = 'a';
+ buf[0] = 'a';
l = 9223372036854775807LL;
- (void)snprintf(buf, sizeof(buf), "%lld", l);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_fmt, l);
if (strcmp(buf, "9223372036854775807"))
return (1);
u = 18446744073709551615ULL;
- (void)snprintf(buf, sizeof(buf), "%llu", u);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_ufmt, u);
if (strcmp(buf, "18446744073709551615"))
return (1);
return (0);
@@ -34323,24 +37987,36 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 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); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -34349,9 +38025,10 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-db_cv_build_sequence="no"
+ db_cv_build_sequence="no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
else
cat >conftest.$ac_ext <<_ACEOF
@@ -34362,30 +38039,39 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
main() {
- long long l;
- unsigned long long u;
+ $db_cv_seq_type l;
+ unsigned $db_cv_seq_type u;
char buf[100];
buf[0] = 'a';
l = 9223372036854775807LL;
- (void)snprintf(buf, sizeof(buf), "%lld", l);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_fmt, l);
if (strcmp(buf, "9223372036854775807"))
return (1);
u = 18446744073709551615ULL;
- (void)snprintf(buf, sizeof(buf), "%llu", u);
+ (void)snprintf(buf, sizeof(buf), $db_cv_seq_ufmt, u);
if (strcmp(buf, "18446744073709551615"))
return (1);
return (0);
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
@@ -34398,25 +38084,27 @@ sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
db_cv_build_sequence="no"
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
if test "$db_cv_build_sequence" = "yes"; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SEQUENCE 1
-_ACEOF
+ db_seq_decl="typedef int64_t db_seq_t;";
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_64BIT_TYPES 1
+_ACEOF
- db_seq_decl="typedef int64_t db_seq_t;";
else
# It still has to compile, but it won't run.
db_seq_decl="typedef int db_seq_t;";
fi
- echo "$as_me:$LINENO: result: $db_cv_build_sequence" >&5
-echo "${ECHO_T}$db_cv_build_sequence" >&6
+ { echo "$as_me:$LINENO: result: $db_cv_build_sequence" >&5
+echo "${ECHO_T}$db_cv_build_sequence" >&6; }
# Optional DB 1.85 compatibility API.
@@ -34478,6 +38166,10 @@ _ACEOF
ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(REP_OBJS)"
+
+ if test "$db_cv_build_replication_mgr" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(REPMGR_OBJS)"
+ fi
else
ADDITIONAL_OBJS="$ADDITIONAL_OBJS rep_stub${o}"
fi
@@ -34519,6 +38211,12 @@ else
CRYPTO_OBJS="crypto_stub${o}"
fi
+# If DIAGNOSTIC is defined, include the log print routines in the library
+# itself, various diagnostic modes use them.
+if test "$db_cv_diagnostic" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(PRINT_OBJS)"
+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
@@ -34540,6 +38238,7 @@ LTLIBOBJS=`echo "$LIBOBJS" |
CREATE_LIST="Makefile
db_cxx.h:$srcdir/../dbinc/db_cxx.in
db_int.h:$srcdir/../dbinc/db_int.in
+ clib_port.h:$srcdir/../dist/clib_port.h
include.tcl:$srcdir/../test/include.tcl"
# MinGW needs win_db.h.
@@ -34583,7 +38282,7 @@ if test "$db_cv_compat185" = "yes"; then
fi
fi
- ac_config_files="$ac_config_files $CREATE_LIST"
+ac_config_files="$ac_config_files $CREATE_LIST"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -34603,39 +38302,58 @@ _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.
+# So, we kill variables containing newlines.
# 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.
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}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"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-} |
+ esac |
+ sort
+) |
sed '
+ /^ac_cv_env_/b end
t clear
- : 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"
+ 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 "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
cat confcache >$cache_file
else
- echo "not updating unwritable cache $cache_file"
+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -34644,32 +38362,18 @@ 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
-
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'
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
@@ -34707,11 +38411,35 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
# 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
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh
+
+# PATH needs CR
+# 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
+
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
as_unset=unset
@@ -34720,8 +38448,43 @@ else
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+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
+IFS=$as_save_IFS
+
+ ;;
+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_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
@@ -34735,18 +38498,19 @@ do
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- $as_unset $as_var
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -34754,159 +38518,120 @@ fi
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+# CDPATH.
+$as_unset CDPATH
-# 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:$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
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# 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.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, 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 |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\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;}
+ 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
+ # original and so on. Autoconf is especially sensitive 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= ;;
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
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='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
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
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -34915,7 +38640,19 @@ else
as_mkdir_p=false
fi
-as_executable_p="test -f"
+# Find out whether ``test -x'' works. Don't use a zero-byte file, as
+# systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ as_executable_p="test -x"
+else
+ as_executable_p=:
+fi
+rm -f conf$$.file
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -34924,31 +38661,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval 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
+# Save the log message, 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.3.27, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+# values after options handling.
+ac_log="
+This file was extended by Berkeley DB $as_me 4.5.20, which was
+generated by GNU Autoconf 2.60. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -34956,30 +38676,19 @@ generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
_ACEOF
+cat >>$CONFIG_STATUS <<_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 -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
+_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
-
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
@@ -35003,19 +38712,21 @@ Configuration headers:
$config_headers
Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
+_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-Berkeley DB config.status 4.3.27
-configured by $0, generated by GNU Autoconf 2.59,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+Berkeley DB config.status 4.5.20
+configured by $0, generated by GNU Autoconf 2.60,
+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2006 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"
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
@@ -35026,39 +38737,24 @@ while test $# != 0
do
case $1 in
--*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
- -*)
+ *)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
esac
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 )
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
@@ -35068,18 +38764,24 @@ Try \`$0 --help' for more information." >&2;}
$ac_shift
CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { 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 ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# 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;}
+ -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; } ;;
- *) ac_config_targets="$ac_config_targets $1" ;;
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
esac
shift
@@ -35095,29 +38797,43 @@ fi
_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
+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ CONFIG_SHELL=$SHELL
+ export CONFIG_SHELL
+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
fi
_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ echo "$ac_log"
+} >&5
-
-
-
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
for ac_config_target in $ac_config_targets
do
- 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" ;;
+ case $ac_config_target in
+ "db_config.h") CONFIG_HEADERS="$CONFIG_HEADERS db_config.h:config.hin" ;;
+ "$CREATE_LIST") CONFIG_FILES="$CONFIG_FILES $CREATE_LIST" ;;
+
*) { { 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
+
# 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
@@ -35128,678 +38844,660 @@ if $ac_need_defaults; then
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,
+# simply because there is no reason against having 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.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
trap '{ (exit 1); exit 1; }' 1 2 13 15
}
-
# Create a (secure) tmp directory for tmp files.
{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
} ||
{
echo "$me: cannot create a temporary directory in ." >&2
{ (exit 1); exit 1; }
}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
#
-# CONFIG_FILES section.
+# Set up the sed scripts for 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,@DB_PROTO1@,$DB_PROTO1,;t t
-s,@DB_PROTO2@,$DB_PROTO2,;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,@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,@RPC_SERVER_H@,$RPC_SERVER_H,;t t
-s,@SOFLAGS@,$SOFLAGS,;t t
-s,@TEST_LIBS@,$TEST_LIBS,;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,@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_rpcgen@,$db_cv_path_rpcgen,;t t
-s,@ac_ct_db_cv_path_rpcgen@,$ac_ct_db_cv_path_rpcgen,;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_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,@inttypes_h_decl@,$inttypes_h_decl,;t t
-s,@stdint_h_decl@,$stdint_h_decl,;t t
-s,@stddef_h_decl@,$stddef_h_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,@u_int64_decl@,$u_int64_decl,;t t
-s,@int64_decl@,$int64_decl,;t t
-s,@ssize_t_decl@,$ssize_t_decl,;t t
-s,@uintmax_t_decl@,$uintmax_t_decl,;t t
-s,@uintptr_t_decl@,$uintptr_t_decl,;t t
-s,@LIBOBJS@,$LIBOBJS,;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,@db_seq_decl@,$db_seq_decl,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_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
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- 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
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+ADDITIONAL_INCS!$ADDITIONAL_INCS$ac_delim
+ADDITIONAL_LANG!$ADDITIONAL_LANG$ac_delim
+ADDITIONAL_OBJS!$ADDITIONAL_OBJS$ac_delim
+ADDITIONAL_PROGS!$ADDITIONAL_PROGS$ac_delim
+BUILD_TARGET!$BUILD_TARGET$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+CONFIGURATION_ARGS!$CONFIGURATION_ARGS$ac_delim
+CONFIGURATION_PATH!$CONFIGURATION_PATH$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+CRYPTO_OBJS!$CRYPTO_OBJS$ac_delim
+CXX!$CXX$ac_delim
+CXXFLAGS!$CXXFLAGS$ac_delim
+DB_PROTO1!$DB_PROTO1$ac_delim
+DB_PROTO2!$DB_PROTO2$ac_delim
+DEFAULT_LIB!$DEFAULT_LIB$ac_delim
+DEFAULT_LIB_CXX!$DEFAULT_LIB_CXX$ac_delim
+INSTALLER!$INSTALLER$ac_delim
+INSTALL_LIBS!$INSTALL_LIBS$ac_delim
+INSTALL_TARGET!$INSTALL_TARGET$ac_delim
+JAR!$JAR$ac_delim
+JAVACFLAGS!$JAVACFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+LIBCSO_LIBS!$LIBCSO_LIBS$ac_delim
+LIBJSO_LIBS!$LIBJSO_LIBS$ac_delim
+LIBSO_LIBS!$LIBSO_LIBS$ac_delim
+LIBTOOL!$LIBTOOL$ac_delim
+LIBTSO_LIBS!$LIBTSO_LIBS$ac_delim
+LIBTSO_MODSUFFIX!$LIBTSO_MODSUFFIX$ac_delim
+LIBTSO_MODULE!$LIBTSO_MODULE$ac_delim
+LIBXSO_LIBS!$LIBXSO_LIBS$ac_delim
+MAKEFILE_CC!$MAKEFILE_CC$ac_delim
+MAKEFILE_CCLINK!$MAKEFILE_CCLINK$ac_delim
+MAKEFILE_CXX!$MAKEFILE_CXX$ac_delim
+MAKEFILE_CXXLINK!$MAKEFILE_CXXLINK$ac_delim
+MAKEFILE_SOLINK!$MAKEFILE_SOLINK$ac_delim
+MAKEFILE_XSOLINK!$MAKEFILE_XSOLINK$ac_delim
+OSDIR!$OSDIR$ac_delim
+POSTLINK!$POSTLINK$ac_delim
+REPLACEMENT_OBJS!$REPLACEMENT_OBJS$ac_delim
+RPC_CLIENT_OBJS!$RPC_CLIENT_OBJS$ac_delim
+RPC_SERVER_H!$RPC_SERVER_H$ac_delim
+SOFLAGS!$SOFLAGS$ac_delim
+SWIGCFLAGS!$SWIGCFLAGS$ac_delim
+TEST_LIBS!$TEST_LIBS$ac_delim
+db_int_def!$db_int_def$ac_delim
+o!$o$ac_delim
+platform_header!$platform_header$ac_delim
+platform_footer!$platform_footer$ac_delim
+DB_VERSION_MAJOR!$DB_VERSION_MAJOR$ac_delim
+DB_VERSION_MINOR!$DB_VERSION_MINOR$ac_delim
+DB_VERSION_PATCH!$DB_VERSION_PATCH$ac_delim
+DB_VERSION_STRING!$DB_VERSION_STRING$ac_delim
+_ACEOF
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
-fi # test -n "$CONFIG_FILES"
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+ ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+DB_VERSION_UNIQUE_NAME!$DB_VERSION_UNIQUE_NAME$ac_delim
+AR!$AR$ac_delim
+CHMOD!$CHMOD$ac_delim
+CP!$CP$ac_delim
+KILL!$KILL$ac_delim
+LN!$LN$ac_delim
+MKDIR!$MKDIR$ac_delim
+RANLIB!$RANLIB$ac_delim
+RM!$RM$ac_delim
+RPCGEN!$RPCGEN$ac_delim
+db_cv_path_sh!$db_cv_path_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+CC!$CC$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DB_CONST!$DB_CONST$ac_delim
+CCC!$CCC$ac_delim
+ac_ct_CXX!$ac_ct_CXX$ac_delim
+CXXCPP!$CXXCPP$ac_delim
+cxx_have_stdheaders!$cxx_have_stdheaders$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+LN_S!$LN_S$ac_delim
+ECHO!$ECHO$ac_delim
+CPP!$CPP$ac_delim
+F77!$F77$ac_delim
+FFLAGS!$FFLAGS$ac_delim
+ac_ct_F77!$ac_ct_F77$ac_delim
+SOSUFFIX!$SOSUFFIX$ac_delim
+MODSUFFIX!$MODSUFFIX$ac_delim
+JMODSUFFIX!$JMODSUFFIX$ac_delim
+JAVAC!$JAVAC$ac_delim
+JAVA!$JAVA$ac_delim
+uudecode!$uudecode$ac_delim
+_ACJNI_JAVAC!$_ACJNI_JAVAC$ac_delim
+inttypes_h_decl!$inttypes_h_decl$ac_delim
+stdint_h_decl!$stdint_h_decl$ac_delim
+stddef_h_decl!$stddef_h_decl$ac_delim
+unistd_h_decl!$unistd_h_decl$ac_delim
+u_char_decl!$u_char_decl$ac_delim
+u_short_decl!$u_short_decl$ac_delim
+u_int_decl!$u_int_decl$ac_delim
+u_long_decl!$u_long_decl$ac_delim
+u_int8_decl!$u_int8_decl$ac_delim
+u_int16_decl!$u_int16_decl$ac_delim
+int16_decl!$int16_decl$ac_delim
+u_int32_decl!$u_int32_decl$ac_delim
+int32_decl!$int32_decl$ac_delim
+u_int64_decl!$u_int64_decl$ac_delim
+int64_decl!$int64_decl$ac_delim
+ssize_t_decl!$ssize_t_decl$ac_delim
+pid_t_decl!$pid_t_decl$ac_delim
+uintmax_t_decl!$uintmax_t_decl$ac_delim
+uintptr_t_decl!$uintptr_t_decl$ac_delim
+thread_h_decl!$thread_h_decl$ac_delim
+db_threadid_t_decl!$db_threadid_t_decl$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+TCL_BIN_DIR!$TCL_BIN_DIR$ac_delim
+TCL_INCLUDE_SPEC!$TCL_INCLUDE_SPEC$ac_delim
+TCL_LIB_FILE!$TCL_LIB_FILE$ac_delim
+TCL_SRC_DIR!$TCL_SRC_DIR$ac_delim
+TCL_TCLSH!$TCL_TCLSH$ac_delim
+INT64_FMT!$INT64_FMT$ac_delim
+UINT64_FMT!$UINT64_FMT$ac_delim
+db_seq_decl!$db_seq_decl$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 70; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+ ac_eof=`expr $ac_eof + 1`
+fi
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
_ACEOF
+
+
+# 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
+
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
- - | *:- | *:-:* ) # 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 ;;
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ ac_file_inputs="$ac_file_inputs $ac_f"
+ done
+
+ # 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. */
+ configure_input="Generated from "`IFS=:
+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ fi
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin";;
+ esac
+ ;;
esac
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ 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"
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ 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'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
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;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
ac_builddir=.
-if test "$ac_dir" != .; then
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
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
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # 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_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
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 ;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+_ACEOF
- 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; }
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+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=' '
-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=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
+
+ rm -f "$tmp/stdin"
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 ;;
+ -) cat "$tmp/out"; rm -f "$tmp/out";;
+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
esac
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+_ACEOF
- 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; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- 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
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status. If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless. But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
+ac_dB='\\)[ (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+ sed -n '
+ t rset
+ :rset
+ s/^[ ]*#[ ]*define[ ][ ]*//
+ t ok
+ d
+ :ok
+ s/[\\&,]/\\&/g
+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+ ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #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.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
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[ #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
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
+ # Write a here document:
+ cat >>$CONFIG_STATUS <<_ACEOF
+ # First, check the format of the line:
+ cat >"\$tmp/defines.sed" <<\\CEOF
+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
+/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
+b
+:def
+_ACEOF
+ sed ${ac_max_sed_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
+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+ grep . conftest.tail >/dev/null || break
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 grep . conftest.undefs >/dev/null
-do
- # 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 $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
+rm -f conftest.defines conftest.tail
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
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
- 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 "/* $configure_input */" >"$tmp/config.h"
+ cat "$ac_result" >>"$tmp/config.h"
+ 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
+ mv "$tmp/config.h" $ac_file
fi
else
- cat $tmp/config.h
- rm -f $tmp/config.h
+ echo "/* $configure_input */"
+ cat "$ac_result"
fi
-done
-_ACEOF
+ rm -f "$tmp/out12"
+ ;;
+
+
+ esac
+
+done # for ac_tag
-cat >>$CONFIG_STATUS <<\_ACEOF
{ (exit 0); exit 0; }
_ACEOF
diff --git a/db/dist/configure.ac b/db/dist/configure.ac
index 8106d51d0..592fb5511 100644
--- a/db/dist/configure.ac
+++ b/db/dist/configure.ac
@@ -1,9 +1,10 @@
-# $Id: configure.ac,v 11.221 2004/11/16 01:07:57 mjc Exp $
+# $Id: configure.ac,v 12.46 2006/09/19 00:33:58 bostic 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_INIT(Berkeley DB, __EDIT_DB_VERSION__,
+ [Oracle Technology Network Berkeley DB forum],
+ db-__EDIT_DB_VERSION__)
AC_CONFIG_SRCDIR([../db/db.c])
AC_CONFIG_HEADERS([db_config.h:config.hin])
@@ -15,8 +16,11 @@ AC_ARG_PROGRAM()
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.])
+ AC_MSG_ERROR([\
+Berkeley DB should not be built in the top-level or "dist" directories. \
+Change directory to the build_unix directory and run ../dist/configure \
+from there.])
+
fi
AC_MSG_RESULT(no)
@@ -43,6 +47,7 @@ AC_SUBST(INSTALL_TARGET)
AC_SUBST(JAR)
AC_SUBST(JAVACFLAGS)
AC_SUBST(LDFLAGS)
+AC_SUBST(LIBCSO_LIBS)
AC_SUBST(LIBJSO_LIBS)
AC_SUBST(LIBS)
AC_SUBST(LIBSO_LIBS)
@@ -64,10 +69,15 @@ AC_SUBST(REPLACEMENT_OBJS)
AC_SUBST(RPC_CLIENT_OBJS)
AC_SUBST(RPC_SERVER_H)
AC_SUBST(SOFLAGS)
+AC_SUBST(SWIGCFLAGS)
AC_SUBST(TEST_LIBS)
AC_SUBST(db_int_def)
AC_SUBST(o)
+# The Windows public header has two extra symbols we need to remove.
+AC_SUBST(platform_header)
+AC_SUBST(platform_footer)
+
# Set the default installation location.
AC_PREFIX_DEFAULT(/usr/local/BerkeleyDB.__EDIT_DB_VERSION_MAJOR__.__EDIT_DB_VERSION_MINOR__)
@@ -134,15 +144,15 @@ INSTALL_TARGET="library_install"
# because the makefile CC may be set to use $(LIBTOOL).
#
# Don't override anything if it's already set from the environment.
-optimize_def="-O"
+optimize_debug="-O"
case "$host_os" in
aix4.3.*|aix5*)
- optimize_def="-O2"
+ optimize_debug="-O2"
CC=${CC-"xlc_r"}
CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
LDFLAGS="$LDFLAGS -Wl,-brtl";;
bsdi3*) CC=${CC-"shlicc2"}
- LIBS="$LIBS -lipc";;
+ LIBSO_LIBS="$LIBSO_LIBS -lipc";;
cygwin*)
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
freebsd*)
@@ -151,50 +161,53 @@ freebsd*)
gnu*|k*bsd*-gnu|linux*)
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
hpux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
-irix*) optimize_def="-O2"
+irix*) optimize_debug="-O2"
CPPFLAGS="$CPPFLAGS -D_SGI_MP_SOURCE";;
mpeix*) CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE -D_SOCKET_SOURCE"
- LIBS="$LIBS -lsocket -lsvipc";;
+ LIBSO_LIBS="$LIBSO_LIBS -lsocket -lsvipc";;
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";;
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS ";;
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 the user wants a debugging environment, change any compiler optimization
+# flags to -g. We used to add -g to the -O compiler flags, but compilers are
+# good enough at code re-organization that debugging with -O no longer works.
+# If you want to compile with a different set of flags, specify CFLAGS in the
+# environment before configuring.
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
+ optimize_debug="-g"
fi
-AC_SUBST(db_cv_build_type)
+
+# 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_debug}
+CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
# 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)
-# Set specific per-compiler flags.
+# We know what compiler we're going to use, now. Set per-compiler flags.
if test "$GCC" = "yes"; then
- # We want -O2 if we're using gcc.
+ # Use -O3 if we're using gcc, unless we're doing a small build, in
+ # which case we use -Os alone. The code size for -O3 is quite a
+ # bit larger than -O2: a compromise is "-Os -finline-functions",
+ # it's smaller and explicitly inlining the functions helps Berkeley
+ # DB.
CFLAGS="$CFLAGS "
- CFLAGS=`echo "$CFLAGS" | sed 's/-O /-O2 /g'`
+ if test "$db_cv_smallbuild" = "yes"; then
+ CFLAGS=`echo "$CFLAGS" | sed 's/-O /-Os /g'`
+ else
+ CFLAGS=`echo "$CFLAGS" | sed 's/-O /-O3 /g'`
+ fi
else
case "$host_os" in
hpux11.0*) ;;
@@ -239,7 +252,7 @@ if test "$db_cv_cxx" = "yes"; then
case "$host_os" in
aix*) AC_CHECK_TOOL(CCC, xlC_r)
LIBXSO_LIBS="-lC_r $LIBXSO_LIBS"
- LIBS="-lC_r $LIBS";;
+ LIBSO_LIBS="-lC_r $LIBSO_LIBS";;
hpux*) AC_CHECK_TOOL(CCC, aCC);;
irix*) AC_CHECK_TOOL(CCC, CC);;
osf*) AC_CHECK_TOOL(CCC, cxx);;
@@ -330,7 +343,7 @@ case "$host_os" in
;;
*)
LIBTSO_MODULE="-module"
- LIBTSO_MODSUFFIX=@MODSUFFIX@
+ LIBTSO_MODSUFFIX=$MODSUFFIX
;;
esac
@@ -393,6 +406,14 @@ if test "$db_cv_java" = "yes"; then
AC_MSG_ERROR([Java version 1.3 or higher required, got $JAVA_VERSION]) ;;
esac
+ # Because of the code that SWIG generates to cast between pointers and
+ # integers, we need to add the flag "-fno-strict-aliasing" to the gcc
+ # command line when compiling the JNI code. This is documented in
+ # [#14953] and at http://www.swig.org/Doc1.3/Java.html
+ if test ${GCC} = "yes"; then
+ SWIGCFLAGS="-fno-strict-aliasing"
+ fi
+
for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
do
CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
@@ -406,7 +427,7 @@ fi
# MinGW support.
if test "$db_cv_mingw" = "yes"; then
- OSDIR=os_win32
+ OSDIR=os_windows
PATH_SEPARATOR="\\\\/:"
AC_DEFINE(DB_WIN32)
@@ -433,58 +454,84 @@ if test "$db_cv_exit_defines" = "yes"; then
[Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines.])
fi
+# Check for mutexes.
+# We do this first because it changes $LIBSO_LIBS.
+AM_DEFINE_MUTEXES
+
# Test for various functions/libraries -- do tests that change library values
# first.
#
-# The Berkeley DB library calls fdatasync, and it's only available in -lrt on
-# Solaris. See if we can find it either without additional libraries or in
-# -lrt. If fdatasync is found in -lrt, add -lrt to the Java and Tcl shared
-# library link lines.
+# The yield function on Solaris is almost certainly pthread_yield (LWP threads
+# or POSIX pthreads), or thr_yield (UI threads). There's an outside chance it
+# is sched_yield() though, only available in -lrt on Solaris.
+#
+# The Berkeley DB library calls fdatasync, only available in -lrt on Solaris.
+# See if we can find either without additional libraries or in -lrt. If found
+# in -lrt and we haven't yet added -lrt, add it to the shared library list.
AC_SEARCH_LIBS(fdatasync, rt, [dnl
if test "$ac_cv_search_fdatasync" != "none required" ; then
- LIBJSO_LIBS="$LIBJSO_LIBS -lrt";
- LIBSO_LIBS="$LIBSO_LIBS -lrt";
- LIBTSO_LIBS="$LIBTSO_LIBS -lrt";
- fi])
-
-# The test and example programs use the sched_yield function, taken from -lrt
-# on Solaris.
-AC_SEARCH_LIBS(sched_yield, rt)
-
-# !!!
-# 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
-# inter-process safe. For that reason we always add -lpthread if we find a
-# pthread library.
-#
-# 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.
-AC_HAVE_LIBRARY(pthread, TEST_LIBS="$TEST_LIBS -lpthread")
+ LIBSO_LIBS="$LIBSO_LIBS -lrt";
+ fi], [dnl
+ AC_SEARCH_LIBS(sched_yield, rt, [dnl
+ if test "$ac_cv_search_sched_yield" != "none required" ; then
+ LIBSO_LIBS="$LIBSO_LIBS -lrt";
+ fi])])
# !!!
# We could be more exact about whether these libraries are needed, but don't
# bother -- if they exist, we load them, it's only the test programs anyway.
AC_HAVE_LIBRARY(m, TEST_LIBS="$TEST_LIBS -lm")
-AC_HAVE_LIBRARY(socket, TEST_LIBS="$TEST_LIBS -lsocket")
AC_HAVE_LIBRARY(nsl, TEST_LIBS="$TEST_LIBS -lnsl")
+AC_HAVE_LIBRARY(pthread, TEST_LIBS="$TEST_LIBS -lpthread")
+AC_HAVE_LIBRARY(socket, TEST_LIBS="$TEST_LIBS -lsocket")
-# Check for mutexes.
-# We do this here because it changes $LIBS.
-AM_DEFINE_MUTEXES
+# Update LIBS so that the rest of our tests are run with the libraries we'll
+# load against.
+LIBS="$LIBSO_LIBS"
# 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().
-AC_REPLACE_FUNCS(getcwd getopt memcmp memcpy memmove raise)
-AC_REPLACE_FUNCS(strcasecmp strdup strerror strtol strtoul)
+AC_REPLACE_FUNCS(\
+ abort atoi atol getcwd getenv getopt isalpha isdigit isprint isspace\
+ memcmp memcpy memmove printf raise rand strcasecmp strcat strchr\
+ strdup strerror strncat strncmp strrchr strsep strtol strtoul)
# Check for system functions we optionally use.
-AC_CHECK_FUNCS(_fstati64 clock_gettime directio fdatasync ftruncate getrusage)
-AC_CHECK_FUNCS(gettimeofday getuid pstat_getdynamic rand sched_yield)
-AC_CHECK_FUNCS(select snprintf srand sysconf vsnprintf yield)
+AC_CHECK_FUNCS(\
+ _fstati64 clock_gettime directio fchmod fcntl fdatasync getaddrinfo\
+ getrusage gettimeofday getuid mprotect pstat_getdynamic pthread_yield\
+ sched_yield select sigaction snprintf stat strftime sysconf vsnprintf\
+ yield)
+
+# Replication can't run correctly if ftruncate isn't available.
+AC_CHECK_FUNCS(ftruncate)
+if test \
+ "$db_cv_build_replication" = "yes" -a "$ac_cv_func_ftruncate" = "no"; then
+ db_cv_build_replication=no
+ AC_MSG_WARN([replication requires ftruncate, replication disabled.])
+fi
+
+# ctime_r --
+#
+# There are two versions of ctime_r, one of which takes a buffer length as a
+# third argument, and one which only takes two arguments. (There is also a
+# difference in return values, but we handle that in the code itself.)
+AC_CHECK_FUNCS(ctime_r)
+if test "$ac_cv_func_ctime_r" = "yes"; then
+AC_CACHE_CHECK([for 2 or 3 argument version of ctime_r], db_cv_ctime_r_3arg, [
+AC_TRY_LINK([
+#include <time.h>], [
+ ctime_r(NULL, NULL, 100);
+], [db_cv_ctime_r_3arg="3-argument"], [db_cv_ctime_r_3arg="2-argument"])])
+fi
+if test "$db_cv_ctime_r_3arg" = "3-argument"; then
+ AC_DEFINE(HAVE_CTIME_R_3ARG)
+ AH_TEMPLATE(HAVE_CTIME_R_3ARG,
+ [Define to 1 if ctime_r takes a buffer length as a third argument.])
+fi
# Pread/pwrite.
# HP-UX has pread/pwrite, but it doesn't work with largefile support.
@@ -640,6 +687,10 @@ if test "$db_cv_build_replication" = "yes"; then
AH_TEMPLATE(HAVE_REPLICATION,
[Define to 1 if building replication support.])
ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(REP_OBJS)"
+
+ if test "$db_cv_build_replication_mgr" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(REPMGR_OBJS)"
+ fi
else
ADDITIONAL_OBJS="$ADDITIONAL_OBJS rep_stub${o}"
fi
@@ -672,6 +723,12 @@ else
CRYPTO_OBJS="crypto_stub${o}"
fi
+# If DIAGNOSTIC is defined, include the log print routines in the library
+# itself, various diagnostic modes use them.
+if test "$db_cv_diagnostic" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(PRINT_OBJS)"
+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
@@ -693,6 +750,7 @@ AC_SUBST(LTLIBOBJS)
CREATE_LIST="Makefile
db_cxx.h:$srcdir/../dbinc/db_cxx.in
db_int.h:$srcdir/../dbinc/db_int.in
+ clib_port.h:$srcdir/../dist/clib_port.h
include.tcl:$srcdir/../test/include.tcl"
# MinGW needs win_db.h.
diff --git a/db/dist/errno.h b/db/dist/errno.h
new file mode 100644
index 000000000..ae5bc88c8
--- /dev/null
+++ b/db/dist/errno.h
@@ -0,0 +1,186 @@
+/*-
+ * Copyright (c) 1982, 1986, 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * 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.
+ * 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.
+ *
+ * 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.
+ *
+ * @(#)errno.h 8.5 (Berkeley) 1/21/94
+ * FreeBSD: /repoman/r/ncvs/src/sys/sys/errno.h,v 1.28 2005/04/02 12:33:28 das Exp $
+ *
+ * $Id: errno.h,v 1.2 2006/06/11 16:13:13 bostic Exp $
+ */
+
+#ifndef _SYS_ERRNO_H_
+#define _SYS_ERRNO_H_
+
+#undef errno
+#define errno __db_errno
+extern int __db_errno;
+
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* Input/output error */
+#define ENXIO 6 /* Device not configured */
+#define E2BIG 7 /* Argument list too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file descriptor */
+#define ECHILD 10 /* No child processes */
+#define EDEADLK 11 /* Resource deadlock avoided */
+ /* 11 was EAGAIN */
+#define ENOMEM 12 /* Cannot allocate memory */
+#define EACCES 13 /* Permission denied */
+#define EFAULT 14 /* Bad address */
+#ifndef _POSIX_SOURCE
+#define ENOTBLK 15 /* Block device required */
+#endif
+#define EBUSY 16 /* Device busy */
+#define EEXIST 17 /* File exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* Operation not supported by device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* Too many open files in system */
+#define EMFILE 24 /* Too many open files */
+#define ENOTTY 25 /* Inappropriate ioctl for device */
+#ifndef _POSIX_SOURCE
+#define ETXTBSY 26 /* Text file busy */
+#endif
+#define EFBIG 27 /* File too large */
+#define ENOSPC 28 /* No space left on device */
+#define ESPIPE 29 /* Illegal seek */
+#define EROFS 30 /* Read-only filesystem */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+
+/* math software */
+#define EDOM 33 /* Numerical argument out of domain */
+#define ERANGE 34 /* Result too large */
+
+/* non-blocking and interrupt i/o */
+#define EAGAIN 35 /* Resource temporarily unavailable */
+#ifndef _POSIX_SOURCE
+#define EWOULDBLOCK EAGAIN /* Operation would block */
+#define EINPROGRESS 36 /* Operation now in progress */
+#define EALREADY 37 /* Operation already in progress */
+
+/* ipc/network software -- argument errors */
+#define ENOTSOCK 38 /* Socket operation on non-socket */
+#define EDESTADDRREQ 39 /* Destination address required */
+#define EMSGSIZE 40 /* Message too long */
+#define EPROTOTYPE 41 /* Protocol wrong type for socket */
+#define ENOPROTOOPT 42 /* Protocol not available */
+#define EPROTONOSUPPORT 43 /* Protocol not supported */
+#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
+#define EOPNOTSUPP 45 /* Operation not supported */
+#define ENOTSUP EOPNOTSUPP /* Operation not supported */
+#define EPFNOSUPPORT 46 /* Protocol family not supported */
+#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
+#define EADDRINUSE 48 /* Address already in use */
+#define EADDRNOTAVAIL 49 /* Can't assign requested address */
+
+/* ipc/network software -- operational errors */
+#define ENETDOWN 50 /* Network is down */
+#define ENETUNREACH 51 /* Network is unreachable */
+#define ENETRESET 52 /* Network dropped connection on reset */
+#define ECONNABORTED 53 /* Software caused connection abort */
+#define ECONNRESET 54 /* Connection reset by peer */
+#define ENOBUFS 55 /* No buffer space available */
+#define EISCONN 56 /* Socket is already connected */
+#define ENOTCONN 57 /* Socket is not connected */
+#define ESHUTDOWN 58 /* Can't send after socket shutdown */
+#define ETOOMANYREFS 59 /* Too many references: can't splice */
+#define ETIMEDOUT 60 /* Operation timed out */
+#define ECONNREFUSED 61 /* Connection refused */
+
+#define ELOOP 62 /* Too many levels of symbolic links */
+#endif /* _POSIX_SOURCE */
+#define ENAMETOOLONG 63 /* File name too long */
+
+/* should be rearranged */
+#ifndef _POSIX_SOURCE
+#define EHOSTDOWN 64 /* Host is down */
+#define EHOSTUNREACH 65 /* No route to host */
+#endif /* _POSIX_SOURCE */
+#define ENOTEMPTY 66 /* Directory not empty */
+
+/* quotas & mush */
+#ifndef _POSIX_SOURCE
+#define EPROCLIM 67 /* Too many processes */
+#define EUSERS 68 /* Too many users */
+#define EDQUOT 69 /* Disc quota exceeded */
+
+/* Network File System */
+#define ESTALE 70 /* Stale NFS file handle */
+#define EREMOTE 71 /* Too many levels of remote in path */
+#define EBADRPC 72 /* RPC struct is bad */
+#define ERPCMISMATCH 73 /* RPC version wrong */
+#define EPROGUNAVAIL 74 /* RPC prog. not avail */
+#define EPROGMISMATCH 75 /* Program version wrong */
+#define EPROCUNAVAIL 76 /* Bad procedure for program */
+#endif /* _POSIX_SOURCE */
+
+#define ENOLCK 77 /* No locks available */
+#define ENOSYS 78 /* Function not implemented */
+
+#ifndef _POSIX_SOURCE
+#define EFTYPE 79 /* Inappropriate file type or format */
+#define EAUTH 80 /* Authentication error */
+#define ENEEDAUTH 81 /* Need authenticator */
+#define EIDRM 82 /* Identifier removed */
+#define ENOMSG 83 /* No message of desired type */
+#define EOVERFLOW 84 /* Value too large to be stored in data type */
+#define ECANCELED 85 /* Operation canceled */
+#define EILSEQ 86 /* Illegal byte sequence */
+#define ENOATTR 87 /* Attribute not found */
+
+#define EDOOFUS 88 /* Programming error */
+#endif /* _POSIX_SOURCE */
+
+#define EBADMSG 89 /* Bad message */
+#define EMULTIHOP 90 /* Multihop attempted */
+#define ENOLINK 91 /* Link has been severed */
+#define EPROTO 92 /* Protocol error */
+
+#ifndef _POSIX_SOURCE
+#define ELAST 92 /* Must be equal largest errno */
+#endif /* _POSIX_SOURCE */
+
+#ifdef _KERNEL
+/* pseudo-errors returned inside kernel to modify return to process */
+#define ERESTART (-1) /* restart syscall */
+#define EJUSTRETURN (-2) /* don't modify regs, just return */
+#define ENOIOCTL (-3) /* ioctl not handled by this layer */
+#define EDIRIOCTL (-4) /* do direct ioctl in GEOM */
+#endif
+
+#endif
diff --git a/db/dist/gen_inc.awk b/db/dist/gen_inc.awk
index d48d02bb1..3d631d17c 100644
--- a/db/dist/gen_inc.awk
+++ b/db/dist/gen_inc.awk
@@ -5,7 +5,7 @@
# PUBLIC lines are put into two versions of per-directory include files:
# 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.
+# unique names for every global C-language 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
@@ -37,20 +37,6 @@
}
}
-# 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|^#ifdef|^#ifndef|^#else|^#endif") {
@@ -62,7 +48,7 @@
if (eline ~ "\\)\\);") {
sub("^[ ]*", "", eline)
print eline >> e_pfile
- if (eline !~ db_version_unique_name && eline !~ "^int txn_") {
+ if (eline !~ db_version_unique_name) {
gsub("[ ][ ]*__P.*", "", eline)
sub("^.*[ ][*]*", "", eline)
printf("#define %s %s@DB_VERSION_UNIQUE_NAME@\n",
diff --git a/db/dist/gen_rec.awk b/db/dist/gen_rec.awk
index 001ec65f0..a8f1f01f3 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: gen_rec.awk,v 11.110 2004/10/20 20:40:58 bostic Exp $
+# $Id: gen_rec.awk,v 12.22 2006/09/14 15:00:47 bostic Exp $
#
# This awk script generates all the log, print, and read routines for the DB
@@ -89,10 +89,6 @@ BEGIN {
# Write recovery template file headers
# This assumes we're doing DB recovery.
printf("#include \"db_config.h\"\n\n") > TFILE
- printf("#ifndef NO_SYSTEM_INCLUDES\n") >> TFILE
- printf("#include <sys/types.h>\n\n") >> TFILE
- printf("#include <string.h>\n") >> TFILE
- printf("#endif\n\n") >> TFILE
printf("#include \"db_int.h\"\n") >> TFILE
printf("#include \"dbinc/db_page.h\"\n") >> TFILE
printf("#include \"dbinc/%s.h\"\n", prefix) >> TFILE
@@ -106,7 +102,7 @@ BEGIN {
printf("%s ", $i) >> PFILE
printf("%s\n", $i) >> PFILE
}
-/^[ ]*(BEGIN|IGNORED|BEGIN_BUF)/ {
+/^[ ]*(BEGIN|BEGIN_COMPAT|BEGIN_BUF)/ {
if (in_begin) {
print "Invalid format: missing END statement"
exit
@@ -115,19 +111,31 @@ BEGIN {
is_dbt = 0;
has_dbp = 0;
is_uint = 0;
+ #
+ # BEGIN_COMPAT does not need logging function or rec table entry.
+ #
need_log_function = ($1 == "BEGIN") || ($1 == "BEGIN_BUF");
- not_buf = ($1 == "BEGIN") || ($1 == "IGNORED");
+ is_compat = ($1 == "BEGIN_COMPAT");
+ not_buf = ($1 == "BEGIN") || ($1 == "BEGIN_COMPAT");
if (not_buf)
buf_only = 0;
nvars = 0;
thisfunc = $2;
- funcname = sprintf("%s_%s", prefix, $2);
+ version = $3;
if (not_buf)
- rectype = $3;
+ rectype = $4;
+ logfunc = sprintf("%s_%s", prefix, $2);
+ logname[num_funcs] = logfunc;
+ if (is_compat) {
+ funcname = sprintf("%s_%s_%s", prefix, $2, version);
+ } else {
+ funcname = logfunc;
+ }
funcs[num_funcs] = funcname;
+ functable[num_funcs] = is_compat;
++num_funcs;
}
/^[ ]*(DB|ARG|DBT|LOCKS|PGDBT|POINTER|TIME)/ {
@@ -172,7 +180,7 @@ BEGIN {
# Here are the required fields for every structure
if (not_buf) {
- printf("\tu_int32_t type;\n\tDB_TXN *txnid;\n") >> HFILE
+ printf("\tu_int32_t type;\n\tDB_TXN *txnp;\n") >> HFILE
printf("\tDB_LSN prev_lsn;\n") >>HFILE
}
@@ -181,7 +189,7 @@ BEGIN {
t = types[i];
if (modes[i] == "POINTER") {
ndx = index(t, "*");
- t = substr(types[i], 0, ndx - 2);
+ t = substr(types[i], 1, ndx - 2);
}
printf("\t%s\t%s;\n", t, vars[i]) >> HFILE
}
@@ -243,6 +251,8 @@ END {
printf("\tint ret;\n\n") >> PFILE;
for (i = 0; i < num_funcs; i++) {
+ if (functable[i] == 1)
+ continue;
printf("\tif ((ret = __db_add_recovery(dbenv, ") >> PFILE;
printf("dtabp, dtabsizep,\n") >> PFILE;
printf("\t %s_print, DB_%s)) != 0)\n", \
@@ -278,6 +288,8 @@ END {
printf(" db_recops, void *));\n") >> CFILE;
printf("\tsize_t *dtabsizep;\n{\n\tint ret;\n\n") >> CFILE;
for (i = 0; i < num_funcs; i++) {
+ if (functable[i] == 1)
+ continue;
printf("\tif ((ret = __db_add_recovery(dbenv, ") >> CFILE;
printf("dtabp, dtabsizep,\n") >> CFILE;
printf("\t %s_recover, DB_%s)) != 0)\n", \
@@ -292,7 +304,7 @@ function log_function()
# Write the log function; function prototype
pi = 1;
if (not_buf) {
- p[pi++] = sprintf("int %s_log", funcname);
+ p[pi++] = sprintf("int %s_log", logfunc);
p[pi++] = " ";
if (has_dbp == 1) {
p[pi++] = "__P((DB *";
@@ -301,7 +313,7 @@ function log_function()
}
p[pi++] = ", DB_TXN *, DB_LSN *, u_int32_t";
} else {
- p[pi++] = sprintf("int %s_buf", funcname);
+ p[pi++] = sprintf("int %s_buf", logfunc);
p[pi++] = " ";
p[pi++] = "__P((u_int8_t *, size_t, size_t *";
}
@@ -322,13 +334,13 @@ function log_function()
# Function declaration
if (not_buf && has_dbp == 1) {
- printf("int\n%s_log(dbp, txnid, ret_lsnp, flags", \
- funcname) >> CFILE;
+ printf("int\n%s_log(dbp, txnp, ret_lsnp, flags", \
+ logfunc) >> CFILE;
} else if (not_buf) {
- printf("int\n%s_log(dbenv, txnid, ret_lsnp, flags", \
- funcname) >> CFILE;
+ printf("int\n%s_log(dbenv, txnp, ret_lsnp, flags", \
+ logfunc) >> CFILE;
} else {
- printf("int\n%s_buf(buf, max, lenp", funcname) >> CFILE;
+ printf("int\n%s_buf(buf, max, lenp", logfunc) >> CFILE;
}
for (i = 0; i < nvars; i++) {
if (modes[i] == "DB") {
@@ -352,7 +364,7 @@ function log_function()
} else {
printf("\tDB_ENV *dbenv;\n") >> CFILE;
}
- printf("\tDB_TXN *txnid;\n\tDB_LSN *ret_lsnp;\n") >> CFILE;
+ printf("\tDB_TXN *txnp;\n\tDB_LSN *ret_lsnp;\n") >> CFILE;
printf("\tu_int32_t flags;\n") >> CFILE;
} else {
printf("\tu_int8_t *buf;\n") >> CFILE;
@@ -403,7 +415,7 @@ function log_function()
printf("\tdbenv = dbp->dbenv;\n") >> CFILE;
if (dbprivate)
printf("\tCOMPQUIET(lr, NULL);\n\n") >> CFILE;
- printf("\trectype = DB_%s;\n", funcname) >> CFILE;
+ printf("\trectype = DB_%s;\n", logfunc) >> CFILE;
printf("\tnpad = 0;\n") >> CFILE;
printf("\trlsnp = ret_lsnp;\n\n") >> CFILE;
}
@@ -419,23 +431,25 @@ function log_function()
>> CFILE;
} else {
printf(") {\n") >> CFILE;
- printf("\t\tif (txnid == NULL)\n") >> CFILE;
+ printf("\t\tif (txnp == NULL)\n") >> CFILE;
printf("\t\t\treturn (0);\n") >> CFILE;
}
+ printf("\t\tif (txnp == NULL)\n") >> CFILE;
+ printf("\t\t\treturn (0);\n") >> CFILE;
printf("\t\tis_durable = 0;\n") >> CFILE;
printf("\t} else\n") >> CFILE;
printf("\t\tis_durable = 1;\n\n") >> CFILE;
}
- printf("\tif (txnid == NULL) {\n") >> CFILE;
+ printf("\tif (txnp == NULL) {\n") >> CFILE;
printf("\t\ttxn_num = 0;\n") >> CFILE;
printf("\t\tlsnp = &null_lsn;\n") >> CFILE;
printf("\t\tnull_lsn.file = null_lsn.offset = 0;\n") >> CFILE;
printf("\t} else {\n") >> CFILE;
- if (dbprivate && funcname != "__db_debug") {
+ if (dbprivate && logfunc != "__db_debug") {
printf(\
- "\t\tif (TAILQ_FIRST(&txnid->kids) != NULL &&\n") >> CFILE;
+ "\t\tif (TAILQ_FIRST(&txnp->kids) != NULL &&\n") >> CFILE;
printf("\t\t (ret = __txn_activekids(") >> CFILE;
- printf("dbenv, rectype, txnid)) != 0)\n") >> CFILE;
+ printf("dbenv, rectype, txnp)) != 0)\n") >> CFILE;
printf("\t\t\treturn (ret);\n") >> CFILE;
}
printf("\t\t/*\n\t\t * We need to assign begin_lsn while ") \
@@ -445,11 +459,10 @@ function log_function()
printf("DbEnv->log_put call,\n\t\t * ") >> CFILE;
printf("so pass in the appropriate memory location to be ") \
>> CFILE;
- printf("filled\n\t\t * in by the log_put code.\n\t\t*/\n") \
+ printf("filled\n\t\t * in by the log_put code.\n\t\t */\n") \
>> CFILE;
- printf("\t\tDB_SET_BEGIN_LSNP(txnid, &rlsnp);\n") >> CFILE;
- printf("\t\ttxn_num = txnid->txnid;\n") >> CFILE;
- printf("\t\tlsnp = &txnid->last_lsn;\n") >> CFILE;
+ printf("\t\tDB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);\n") >> CFILE;
+ printf("\t\ttxn_num = txnp->txnid;\n") >> CFILE;
printf("\t}\n\n") >> CFILE;
# If we're logging a DB handle, make sure we have a log
@@ -471,7 +484,7 @@ function log_function()
printf("->adj_size(logrec.size);\n") >> CFILE;
printf("\t\tlogrec.size += npad;\n\t}\n\n") >> CFILE
- printf("\tif (is_durable || txnid == NULL) {\n") \
+ printf("\tif (is_durable || txnp == NULL) {\n") \
>> CFILE;
printf("\t\tif ((ret =\n\t\t __os_malloc(dbenv, ") \
>> CFILE;
@@ -576,10 +589,27 @@ function log_function()
sizes[i]) >> CFILE;
printf("\t\treturn (ENOMEM);\n") >> CFILE;
}
- printf("\tif (%s != NULL)\n", vars[i]) >> CFILE;
- printf("\t\tmemcpy(bp, %s, %s);\n", vars[i], \
+ printf("\tif (%s != NULL)", vars[i]) >> CFILE;
+ if (not_buf && has_dbp && types[i] == "DB_LSN *") {
+ printf(" {\n\t\tif (txnp != NULL) {\n") \
+ >> CFILE;
+ printf( \
+ "\t\t\tLOG *lp = dbenv->lg_handle->reginfo.primary;\n") >> CFILE;
+ printf( \
+ "\t\t\tif (LOG_COMPARE(%s, &lp->lsn) >= 0 && (ret =\n", vars[i]) \
+ >> CFILE;
+ printf( \
+ "\t\t\t __log_check_page_lsn(dbenv, dbp, %s) != 0))\n", vars[i]) \
+ >> CFILE;
+ printf("\t\t\t\treturn (ret);\n") >> CFILE;
+ printf("\t\t}") >> CFILE;
+ }
+ printf("\n\t\tmemcpy(bp, %s, %s);\n", vars[i], \
sizes[i]) >> CFILE;
- printf("\telse\n") >> CFILE;
+ if (not_buf && has_dbp && types[i] == "DB_LSN *")
+ printf("\t} else\n") >> CFILE;
+ else
+ printf("\telse\n") >> CFILE;
printf("\t\tmemset(bp, 0, %s);\n", sizes[i]) >> CFILE;
printf("\tbp += %s;\n\n", sizes[i]) >> CFILE;
}
@@ -590,9 +620,9 @@ function log_function()
# rather than requiring assert.h.
if (not_buf) {
if (dbprivate) {
- printf("\tDB_ASSERT((u_int32_t)") >> CFILE;
- printf("(bp - (u_int8_t *)logrec.data) ") >> CFILE;
- printf("<= logrec.size);\n\n") >> CFILE;
+ printf("\tDB_ASSERT(dbenv,\n") >> CFILE;
+ printf("\t (u_int32_t)(bp - (u_int8_t *)") >> CFILE;
+ printf("logrec.data) <= logrec.size);\n\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
@@ -600,15 +630,15 @@ function log_function()
# the right header files to find the function), so
# we have to copy the log record to make sure the
# alignment is correct.
- printf("\tif (is_durable || txnid == NULL) {\n") \
+ printf("\tif (is_durable || txnp == NULL) {\n") \
>> CFILE;
# Output the log record and update the return LSN.
printf("\t\tif ((ret = __log_put(dbenv, rlsnp,") \
>> CFILE;
printf("(DBT *)&logrec,\n") >> CFILE;
printf("\t\t flags | DB_LOG_NOCOPY)) == 0") >> CFILE;
- printf(" && txnid != NULL) {\n") >> CFILE;
- printf("\t\t\ttxnid->last_lsn = *rlsnp;\n") >> CFILE;
+ printf(" && txnp != NULL) {\n") >> CFILE;
+ printf("\t\t\t*lsnp = *rlsnp;\n") >> CFILE;
printf("\t\t\tif (rlsnp != ret_lsnp)\n") >> CFILE;
printf("\t\t\t\t *ret_lsnp = *rlsnp;\n") >> CFILE;
@@ -637,8 +667,10 @@ function log_function()
printf("\t\tret = 0;\n") >> CFILE;
printf("#endif\n") >> CFILE;
# Add a ND record to the txn list.
- printf("\t\tSTAILQ_INSERT_HEAD(&txnid") >> CFILE;
+ printf("\t\tSTAILQ_INSERT_HEAD(&txnp") >> CFILE;
printf("->logs, lr, links);\n") >> CFILE;
+ printf("\t\tF_SET((TXN_DETAIL *)") >> CFILE;
+ printf("txnp->td, TXN_DTL_INMEMORY);\n") >> CFILE;
# Update the return LSN.
printf("\t\tLSN_NOT_LOGGED(*ret_lsnp);\n") >> CFILE;
printf("\t}\n\n") >> CFILE;
@@ -646,10 +678,10 @@ function log_function()
printf("\tif ((ret = dbenv->log_put(dbenv, rlsnp,") >> CFILE;
printf(" (DBT *)&logrec,\n") >> CFILE;
printf("\t flags | DB_LOG_NOCOPY)) == 0") >> CFILE;
- printf(" && txnid != NULL) {\n") >> CFILE;
+ printf(" && txnp != NULL) {\n") >> CFILE;
# Update the transactions last_lsn.
- printf("\t\ttxnid->last_lsn = *rlsnp;\n") >> CFILE;
+ printf("\t\t*lsnp = *rlsnp;\n") >> CFILE;
printf("\t\tif (rlsnp != ret_lsnp)\n") >> CFILE;
printf("\t\t\t *ret_lsnp = *rlsnp;\n") >> CFILE;
printf("\t}\n") >> CFILE;
@@ -660,15 +692,14 @@ function log_function()
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\n") >> CFILE
+ printf("\t\t (DBT *)&logrec, ret_lsnp, ") >> CFILE
+ printf("DB_TXN_PRINT, NULL);\n#endif\n\n") >> CFILE
# Free and return
if (dbprivate) {
printf("#ifdef DIAGNOSTIC\n") >> CFILE
write_free("\t", "logrec.data", CFILE)
printf("#else\n") >> CFILE
- printf("\tif (is_durable || txnid == NULL)\n") >> CFILE;
+ printf("\tif (is_durable || txnp == NULL)\n") >> CFILE;
write_free("\t\t", "logrec.data", CFILE)
printf("#endif\n") >> CFILE
} else {
@@ -691,7 +722,7 @@ function db_handle_id_function(modes, n)
# that ID we're able to acquire an open handle
# at recovery time.
printf(\
- "\tDB_ASSERT(dbp->log_filename != NULL);\n") \
+ "\tDB_ASSERT(dbenv, dbp->log_filename != NULL);\n") \
>> CFILE;
printf("\tif (dbp->log_filename->id == ") \
>> CFILE;
@@ -727,6 +758,7 @@ function print_function()
if (modes[i] == "TIME") {
printf("\tstruct tm *lt;\n") >> PFILE
printf("\ttime_t timeval;\n") >> PFILE
+ printf("\tchar time_buf[CTIME_BUFLEN];\n") >> PFILE
break;
}
for (i = 0; i < nvars; i ++)
@@ -738,7 +770,7 @@ function print_function()
printf("\tint ret;\n\n") >> PFILE;
# Get rid of complaints about unused parameters.
- printf("\tnotused2 = DB_TXN_ABORT;\n\tnotused3 = NULL;\n\n") >> PFILE;
+ printf("\tnotused2 = DB_TXN_PRINT;\n\tnotused3 = NULL;\n\n") >> PFILE;
# Call read routine to initialize structure
printf("\tif ((ret = %s_read(dbenv, dbtp->data, &argp)) != 0)\n", \
@@ -746,18 +778,15 @@ function print_function()
printf("\t\treturn (ret);\n") >> PFILE;
# Print values in every record
- printf("\t(void)printf(\n\t \"[%%lu][%%lu]%s%%s: ",\
- funcname) >> PFILE;
- printf("rec: %%lu txnid %%lx ") >> PFILE;
- printf("prevlsn [%%lu][%%lu]\\n\",\n") >> PFILE;
- printf("\t (u_long)lsnp->file,\n") >> PFILE;
- printf("\t (u_long)lsnp->offset,\n") >> PFILE;
+ printf("\t(void)printf(\n \"[%%lu][%%lu]%s%%s: ", funcname) >> PFILE;
+ printf("rec: %%lu txnp %%lx prevlsn [%%lu][%%lu]\\n\",\n") >> PFILE;
+ printf("\t (u_long)lsnp->file, (u_long)lsnp->offset,\n") >> PFILE;
printf("\t (argp->type & DB_debug_FLAG) ? \"_debug\" : \"\",\n") \
>> PFILE;
printf("\t (u_long)argp->type,\n") >> PFILE;
- printf("\t (u_long)argp->txnid->txnid,\n") >> PFILE;
- printf("\t (u_long)argp->prev_lsn.file,\n") >> PFILE;
- printf("\t (u_long)argp->prev_lsn.offset);\n") >> PFILE;
+ printf("\t (u_long)argp->txnp->txnid,\n") >> PFILE;
+ printf("\t (u_long)argp->prev_lsn.file, ") >> PFILE;
+ printf("(u_long)argp->prev_lsn.offset);\n") >> PFILE;
# Now print fields of argp
for (i = 0; i < nvars; i ++) {
@@ -794,7 +823,8 @@ function print_function()
"%%%s (%%.24s, 20%%02lu%%02lu%%02lu%%02lu%%02lu.%%02lu)\\n\",\n", \
formats[i]) >> PFILE;
printf("\t (long)argp->%s, ", vars[i]) >> PFILE;
- printf("ctime(&timeval),", vars[i]) >> PFILE;
+ printf("__db_ctime(&timeval, time_buf),", \
+ vars[i]) >> PFILE;
printf("\n\t (u_long)lt->tm_year - 100, ") >> PFILE;
printf("(u_long)lt->tm_mon+1,") >> PFILE;
printf("\n\t (u_long)lt->tm_mday, ") >> PFILE;
@@ -874,20 +904,21 @@ function read_function()
}
write_malloc("\t", "argp", malloc_size, CFILE)
- # Set up the pointers to the txnid.
+ # Set up the pointers to the DB_TXN *.
printf("\tbp = recbuf;\n") >> CFILE;
if (not_buf) {
- printf("\targp->txnid = (DB_TXN *)&argp[1];\n\n") >> CFILE;
-
- # First get the record type, prev_lsn, and txnid fields.
+ printf("\targp->txnp = (DB_TXN *)&argp[1];\n") >> CFILE;
+ printf("\tmemset(argp->txnp, 0, sizeof(DB_TXN));\n\n") \
+ >> CFILE;
+ # First get the record type, prev_lsn, and txnp fields.
printf("\tmemcpy(&argp->type, bp, 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\n") >> CFILE;
+ printf("\tmemcpy(&argp->txnp->txnid, bp, ") >> CFILE;
+ printf("sizeof(argp->txnp->txnid));\n") >> CFILE;
+ printf("\tbp += sizeof(argp->txnp->txnid);\n\n") >> CFILE;
printf("\tmemcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));\n") \
>> CFILE;
printf("\tbp += sizeof(DB_LSN);\n\n") >> CFILE;
diff --git a/db/dist/gen_rpc.awk b/db/dist/gen_rpc.awk
index 7eee77b3d..e4bf85e76 100644
--- a/db/dist/gen_rpc.awk
+++ b/db/dist/gen_rpc.awk
@@ -1,5 +1,5 @@
#
-# $Id: gen_rpc.awk,v 11.58 2004/08/19 20:28:37 mjc Exp $
+# $Id: gen_rpc.awk,v 12.7 2006/05/05 15:29:43 bostic Exp $
# Awk script for generating client/server RPC code.
#
# This awk script generates most of the RPC routines for DB client/server
@@ -54,6 +54,12 @@ BEGIN {
printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \
> XFILE
nendlist = 1;
+
+ # Output headers
+ general_headers()
+
+ # Put out the actual illegal and no-server functions.
+ illegal_functions(CFILE)
}
END {
if (error == 0) {
@@ -65,29 +71,60 @@ END {
printf("\t} = %d%03d;\n", major, minor) >> XFILE
printf("} = 351457;\n") >> XFILE
+
+ obj_init("DB", "dbp", obj_db, CFILE)
+ obj_init("DBC", "dbc", obj_dbc, CFILE)
+ obj_init("DB_ENV", "dbenv", obj_dbenv, CFILE)
+ obj_init("DB_TXN", "txn", obj_txn, CFILE)
}
}
+/^[ ]*LOCAL/ {
+ # LOCAL methods are ones where we don't override the handle
+ # method for RPC, nor is it illegal -- it's just satisfied
+ # locally.
+ next;
+}
+/^[ ]*NOFUNC/ {
+ ++obj_indx;
+
+ # NOFUNC methods are illegal on the RPC client.
+ if ($2 ~ "^db_")
+ obj_illegal(obj_db, "dbp", $2, $3)
+ else if ($2 ~ "^dbc_")
+ obj_illegal(obj_dbc, "dbc", $2, $3)
+ else if ($2 ~ "^env_")
+ obj_illegal(obj_dbenv, "dbenv", $2, $3)
+ else if ($2 ~ "^txn_")
+ obj_illegal(obj_txn, "txn", $2, $3)
+ else {
+ print "unexpected handle prefix: " $2
+ error = 1; exit
+ }
+ next;
+}
/^[ ]*BEGIN/ {
+ ++obj_indx;
+
name = $2;
- nofunc_code = 0;
- funcvars = 0;
- ret_code = 0;
- if ($3 == "NOFUNC")
- nofunc_code = 1;
- if ($3 == "RETCODE")
- ret_code = 1;
+ link_only = ret_code = 0
+ if ($3 == "LINKONLY")
+ link_only = 1
+ else if ($3 == "RETCODE")
+ ret_code = 1
+ funcvars = 0;
+ newvars = 0;
nvars = 0;
rvars = 0;
- newvars = 0;
+ xdr_free = 0;
+
db_handle = 0;
- env_handle = 0;
dbc_handle = 0;
- txn_handle = 0;
- mp_handle = 0;
dbt_handle = 0;
- xdr_free = 0;
+ env_handle = 0;
+ mp_handle = 0;
+ txn_handle = 0;
}
/^[ ]*ARG/ {
rpc_type[nvars] = $2;
@@ -102,36 +139,36 @@ END {
if (c_type[nvars] == "DBT *")
dbt_handle = 1;
-
- if (c_type[nvars] == "DB_ENV *") {
+ else if (c_type[nvars] == "DB_ENV *") {
ctp_type[nvars] = "CT_ENV";
env_handle = 1;
env_idx = nvars;
- }
- if (c_type[nvars] == "DB *") {
+ if (nvars == 0)
+ obj_func("dbenv", obj_dbenv);
+ } else if (c_type[nvars] == "DB *") {
ctp_type[nvars] = "CT_DB";
if (db_handle != 1) {
db_handle = 1;
db_idx = nvars;
}
- }
- if (c_type[nvars] == "DBC *") {
+ if (nvars == 0)
+ obj_func("dbp", obj_db);
+ } else if (c_type[nvars] == "DBC *") {
ctp_type[nvars] = "CT_CURSOR";
dbc_handle = 1;
dbc_idx = nvars;
- }
- if (c_type[nvars] == "DB_TXN *") {
+ if (nvars == 0)
+ obj_func("dbc", obj_dbc);
+ } else if (c_type[nvars] == "DB_TXN *") {
ctp_type[nvars] = "CT_TXN";
txn_handle = 1;
txn_idx = nvars;
- }
- if (c_type[nvars] == "DB_MPOOLFILE *") {
- mp_handle = 1;
- mp_idx = nvars;
+ if (nvars == 0)
+ obj_func("txn", obj_txn);
}
++nvars;
@@ -189,198 +226,10 @@ END {
/^[ ]*END/ {
#
# =====================================================
- # File headers, if necessary.
+ # LINKONLY -- just reference the function, that's all.
#
- if (first == 0) {
- printf("#include \"db_config.h\"\n") >> CFILE
- printf("\n") >> CFILE
- printf("#ifndef NO_SYSTEM_INCLUDES\n") >> CFILE
- printf("#include <sys/types.h>\n") >> CFILE
- printf("\n") >> CFILE
- printf("#include <rpc/rpc.h>\n") >> CFILE
- printf("\n") >> CFILE
- printf("#include <string.h>\n") >> CFILE
- printf("#endif\n") >> CFILE
- printf("\n") >> CFILE
- printf("#include \"db_server.h\"\n") >> CFILE
- printf("\n") >> CFILE
- printf("#include \"db_int.h\"\n") >> CFILE
- printf("#include \"dbinc/txn.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("#ifndef NO_SYSTEM_INCLUDES\n") >> TFILE
- printf("#include <sys/types.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/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("\n") >> SFILE
- printf("#include <string.h>\n") >> SFILE
- printf("#endif\n") >> SFILE
- printf("\n") >> SFILE
- printf("#include \"db_server.h\"\n") >> SFILE
- printf("\n") >> SFILE
- printf("#include \"db_int.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_server.h\"\n") >> PFILE
- printf("\n") >> PFILE
- printf("#include \"db_int.h\"\n") >> PFILE
- printf("#include \"dbinc/db_server_int.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
- # out to the XDR and server files, we just generate this
- # and move on if this is all we are doing.
- #
- if (nofunc_code == 1) {
- #
- # First time through, put out the general no server and
- # illegal functions.
- #
- if (first_nofunc == 0) {
- 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,") >> 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
- }
- #
- # Spit out PUBLIC prototypes.
- #
- delete p;
- pi = 1;
- p[pi++] = sprintf("int __dbcl_%s __P((", name);
- p[pi++] = "";
- for (i = 0; i < nvars; ++i) {
- p[pi++] = pr_type[i];
- p[pi++] = ", ";
- }
- p[pi - 1] = "";
- p[pi] = "));";
- proto_format(p, CFILE);
-
- #
- # Spit out function name/args.
- #
- printf("int\n") >> CFILE
- printf("__dbcl_%s(", name) >> CFILE
- sep = "";
- for (i = 0; i < nvars; ++i) {
- printf("%s%s", sep, args[i]) >> CFILE
- sep = ", ";
- }
- printf(")\n") >> CFILE
-
- for (i = 0; i < nvars; ++i)
- if (func_arg[i] == 0)
- printf("\t%s %s;\n", c_type[i], args[i]) \
- >> CFILE
- else
- printf("\t%s;\n", c_type[i]) >> CFILE
-
- #
- # Call error function and return EINVAL
- #
- printf("{\n") >> CFILE
-
- #
- # If we don't have a local env, set one.
- #
- if (env_handle == 0) {
- printf("\tDB_ENV *dbenv;\n\n") >> CFILE
- if (db_handle)
- printf("\tdbenv = %s->dbenv;\n", \
- args[db_idx]) >> CFILE
- else if (dbc_handle)
- printf("\tdbenv = %s->dbp->dbenv;\n", \
- args[dbc_idx]) >> CFILE
- else if (txn_handle)
- printf("\tdbenv = %s->mgrp->dbenv;\n", \
- args[txn_idx]) >> CFILE
- else if (mp_handle)
- printf("\tdbenv = %s->dbenv;\n", \
- args[mp_idx]) >> CFILE
- else
- printf("\tdbenv = NULL;\n") >> CFILE
- }
- #
- # Quiet the compiler for all variables.
- #
- # NOTE: Index 'i' starts at 1, not 0. Our first arg is
- # the handle we need to get to the env, and we do not want
- # 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] == "GID") {
- printf("\tCOMPQUIET(%s, NULL);\n", args[i]) \
- >> CFILE
- }
- if (rpc_type[i] == "INT" || rpc_type[i] == "IGNORE" ||
- rpc_type[i] == "ID") {
- printf("\tCOMPQUIET(%s, 0);\n", args[i]) \
- >> CFILE
- }
- }
-
- if (!env_handle) {
- printf("\treturn (__dbcl_rpc_illegal(dbenv, ") >> CFILE
- printf("\"%s\"));\n", name) >> CFILE
- } else
- printf("\treturn (__dbcl_rpc_illegal(%s, \"%s\"));\n", \
- args[env_idx], name) >> CFILE
- printf("}\n\n") >> CFILE
-
+ if (link_only)
next;
- }
#
# =====================================================
@@ -716,7 +565,7 @@ END {
#
for (i = 0; i < nvars; ++i) {
if (rpc_type[i] == "ID") {
- printf("\tlong %scl_id;\n", args[i]) >> PFILE
+ printf("\tunsigned int %scl_id;\n", args[i]) >> PFILE
}
if (rpc_type[i] == "STRING") {
printf("\tchar *%s;\n", args[i]) >> PFILE
@@ -851,8 +700,7 @@ END {
args[txn_idx]) >> CFILE
else
printf("\tdbenv = NULL;\n") >> CFILE
- printf("\tif (dbenv == NULL || !RPC_ON(dbenv))\n") \
- >> CFILE
+ printf("\tif (dbenv == NULL || !RPC_ON(dbenv))\n") >> CFILE
printf("\t\treturn (__dbcl_noserver(NULL));\n") >> CFILE
} else {
printf("\tif (%s == NULL || !RPC_ON(%s))\n", \
@@ -862,13 +710,8 @@ END {
}
printf("\n") >> CFILE
- if (!env_handle)
- printf("\tcl = (CLIENT *)dbenv->cl_handle;\n") >> CFILE
- else
- printf("\tcl = (CLIENT *)%s->cl_handle;\n", \
- args[env_idx]) >> CFILE
-
- printf("\n") >> CFILE
+ printf("\tcl = (CLIENT *)%s->cl_handle;\n\n", \
+ env_handle ? args[env_idx] : "dbenv") >> CFILE
#
# If there is a function arg, check that it is NULL
@@ -878,9 +721,9 @@ END {
continue;
printf("\tif (%s != NULL) {\n", args[i]) >> CFILE
if (!env_handle) {
- printf("\t\t__db_err(dbenv, ") >> CFILE
+ printf("\t\t__db_errx(dbenv, ") >> CFILE
} else {
- printf("\t\t__db_err(%s, ", args[env_idx]) >> CFILE
+ printf("\t\t__db_errx(%s, ", args[env_idx]) >> CFILE
}
printf("\"User functions not supported in RPC\");\n") >> CFILE
printf("\t\treturn (EINVAL);\n\t}\n") >> CFILE
@@ -891,15 +734,22 @@ END {
#
for (i = 0; i < nvars; ++i) {
if (rpc_type[i] == "ID") {
- printf("\tif (%s == NULL)\n", args[i]) >> CFILE
- printf("\t\tmsg.%scl_id = 0;\n\telse\n", \
- args[i]) >> CFILE
+ # We don't need to check for a NULL DB_ENV *, because
+ # we already checked for it. I frankly couldn't care
+ # less, but lint gets all upset at the wasted cycles.
+ if (c_type[i] != "DB_ENV *") {
+ printf("\tif (%s == NULL)\n", args[i]) >> CFILE
+ printf("\t\tmsg.%scl_id = 0;\n\telse\n", \
+ args[i]) >> CFILE
+ indent = "\t\t";
+ } else
+ indent = "\t";
if (c_type[i] == "DB_TXN *") {
- printf("\t\tmsg.%scl_id = %s->txnid;\n", \
- args[i], args[i]) >> CFILE
+ printf("%smsg.%scl_id = %s->txnid;\n", \
+ indent, args[i], args[i]) >> CFILE
} else {
- printf("\t\tmsg.%scl_id = %s->cl_id;\n", \
- args[i], args[i]) >> CFILE
+ printf("%smsg.%scl_id = %s->cl_id;\n", \
+ indent, args[i], args[i]) >> CFILE
}
}
if (rpc_type[i] == "GID") {
@@ -990,10 +840,10 @@ END {
}
printf("\tif (replyp == NULL) {\n") >> CFILE
if (!env_handle) {
- printf("\t\t__db_err(dbenv, ") >> CFILE
+ printf("\t\t__db_errx(dbenv, ") >> CFILE
printf("clnt_sperror(cl, \"Berkeley DB\"));\n") >> CFILE
} else {
- printf("\t\t__db_err(%s, ", args[env_idx]) >> CFILE
+ printf("\t\t__db_errx(%s, ", args[env_idx]) >> CFILE
printf("clnt_sperror(cl, \"Berkeley DB\"));\n") >> CFILE
}
printf("\t\tret = DB_NOSERVER;\n") >> CFILE
@@ -1129,6 +979,154 @@ END {
}
}
+function general_headers()
+{
+ printf("#include \"db_config.h\"\n") >> CFILE
+ printf("\n") >> CFILE
+ printf("#include \"db_int.h\"\n") >> CFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> CFILE
+ printf("#include <rpc/rpc.h>\n") >> CFILE
+ printf("#endif\n") >> CFILE
+ printf("#include \"db_server.h\"\n") >> CFILE
+ printf("#include \"dbinc/txn.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("#include \"db_int.h\"\n") >> TFILE
+ printf("#include \"dbinc/txn.h\"\n") >> TFILE
+ printf("\n") >> TFILE
+
+ printf("#include \"db_config.h\"\n") >> SFILE
+ printf("\n") >> SFILE
+ printf("#include \"db_int.h\"\n") >> SFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> SFILE
+ printf("#include <rpc/rpc.h>\n") >> SFILE
+ printf("#endif\n") >> SFILE
+ printf("#include \"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("#include \"db_int.h\"\n") >> PFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> PFILE
+ printf("#include <rpc/rpc.h>\n") >> PFILE
+ printf("#endif\n") >> PFILE
+ printf("#include \"db_server.h\"\n") >> PFILE
+ printf("#include \"dbinc/db_server_int.h\"\n") >> PFILE
+ printf("\n") >> PFILE
+}
+
+#
+# illegal_functions --
+# Output general illegal-call functions
+function illegal_functions(OUTPUT)
+{
+ printf("static int __dbcl_dbp_illegal __P((DB *));\n") >> OUTPUT
+ printf("static int __dbcl_noserver __P((DB_ENV *));\n") >> OUTPUT
+ printf("static int __dbcl_txn_illegal __P((DB_TXN *));\n") >> OUTPUT
+ printf("\n") >> OUTPUT
+
+ printf("static int\n") >> OUTPUT
+ printf("__dbcl_noserver(dbenv)\n") >> OUTPUT
+ printf("\tDB_ENV *dbenv;\n") >> OUTPUT
+ printf("{\n\t__db_errx(dbenv,") >> OUTPUT
+ printf(" \"No Berkeley DB RPC server environment\");\n") >> OUTPUT
+ printf("\treturn (DB_NOSERVER);\n") >> OUTPUT
+ printf("}\n\n") >> OUTPUT
+
+ printf("/*\n") >> OUTPUT
+ printf(" * __dbcl_dbenv_illegal --\n") >> OUTPUT
+ printf(" * DB_ENV method not supported under RPC.\n") >> OUTPUT
+ printf(" *\n") >> OUTPUT
+ printf(" * PUBLIC: int __dbcl_dbenv_illegal __P((DB_ENV *));\n")\
+ >> OUTPUT
+ printf(" */\n") >> OUTPUT
+ printf("int\n") >> OUTPUT
+ printf("__dbcl_dbenv_illegal(dbenv)\n") >> OUTPUT
+ printf("\tDB_ENV *dbenv;\n") >> OUTPUT
+ printf("{\n\t__db_errx(dbenv,") >> OUTPUT
+ printf("\n\t \"Interface not supported by ") >> OUTPUT
+ printf("Berkeley DB RPC client environments\");\n") >> OUTPUT
+ printf("\treturn (DB_OPNOTSUP);\n") >> OUTPUT
+ printf("}\n\n") >> OUTPUT
+ printf("/*\n") >> OUTPUT
+ printf(" * __dbcl_dbp_illegal --\n") >> OUTPUT
+ printf(" * DB method not supported under RPC.\n") >> OUTPUT
+ printf(" */\n") >> OUTPUT
+ printf("static int\n") >> OUTPUT
+ printf("__dbcl_dbp_illegal(dbp)\n") >> OUTPUT
+ printf("\tDB *dbp;\n") >> OUTPUT
+ printf("{\n\treturn (__dbcl_dbenv_illegal(dbp->dbenv));\n") >> OUTPUT
+ printf("}\n\n") >> OUTPUT
+ printf("/*\n") >> OUTPUT
+ printf(" * __dbcl_txn_illegal --\n") >> OUTPUT
+ printf(" * DB_TXN method not supported under RPC.\n") >> OUTPUT
+ printf(" */\n") >> OUTPUT
+ printf("static int\n__dbcl_txn_illegal(txn)\n") >> OUTPUT
+ printf("\tDB_TXN *txn;\n") >> OUTPUT
+ printf("{\n\treturn (__dbcl_dbenv_illegal(txn->mgrp->dbenv));\n")\
+ >> OUTPUT
+ printf("}\n\n") >> OUTPUT
+}
+
+function obj_func(v, l)
+{
+ # Ignore db_create -- there's got to be something cleaner, but I
+ # don't want to rewrite rpc.src right now.
+ if (name == "db_create")
+ return;
+ if (name == "env_create")
+ return;
+
+ # Strip off the leading prefix for the method name -- there's got to
+ # be something cleaner, but I don't want to rewrite rpc.src right now.
+ len = length(name);
+ i = index(name, "_");
+ l[obj_indx] = sprintf("\t%s->%s = __dbcl_%s;",
+ v, substr(name, i + 1, len - i), name);
+}
+
+function obj_illegal(l, handle, method, proto)
+{
+ # All of the functions return an int, with one exception. Hack
+ # to make that work.
+ type = method == "db_get_mpf" ? "DB_MPOOLFILE *" : "int"
+
+ # Strip off the leading prefix for the method name -- there's got to
+ # be something cleaner, but I don't want to rewrite rpc.src right now.
+ len = length(method);
+ i = index(method, "_");
+
+ l[obj_indx] =\
+ sprintf("\t%s->%s =\n\t (%s (*)(",\
+ handle, substr(method, i + 1, len - i), type)\
+ proto\
+ sprintf("))\n\t __dbcl_%s_illegal;", handle);
+}
+
+function obj_init(obj, v, list, OUTPUT) {
+ printf("/*\n") >> OUTPUT
+ printf(" * __dbcl_%s_init --\n", v) >> OUTPUT
+ printf(" *\tInitialize %s handle methods.\n", obj) >> OUTPUT
+ printf(" *\n") >> OUTPUT
+ printf(\
+ " * PUBLIC: void __dbcl_%s_init __P((%s *));\n", v, obj) >> OUTPUT
+ printf(" */\n") >> OUTPUT
+ printf("void\n") >> OUTPUT
+ printf("__dbcl_%s_init(%s)\n", v, v) >> OUTPUT
+ printf("\t%s *%s;\n", obj, v) >> OUTPUT
+ printf("{\n") >> OUTPUT
+ for (i = 1; i < obj_indx; ++i) {
+ if (i in list)
+ print list[i] >> OUTPUT
+ }
+ printf("\treturn;\n}\n\n") >> OUTPUT
+}
+
#
# split_lines --
# Add line separators to pretty-print the output.
diff --git a/db/dist/ltmain.sh b/db/dist/ltmain.sh
index c96a96ddd..06823e057 100644
--- a/db/dist/ltmain.sh
+++ b/db/dist/ltmain.sh
@@ -1,7 +1,7 @@
# ltmain.sh - Provide generalized library-building support services.
# NOTE: Changing this file will not affect anything until you rerun configure.
#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
# Free Software Foundation, Inc.
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
@@ -17,7 +17,7 @@
#
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -43,8 +43,8 @@ EXIT_FAILURE=1
PROGRAM=ltmain.sh
PACKAGE=libtool
-VERSION=1.5.8
-TIMESTAMP=" (1.1220.2.117 2004/08/04 14:12:05)"
+VERSION=1.5.22
+TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
# See if we are running on zsh, and set the options which allow our
# commands through without removal of \ escapes.
@@ -88,14 +88,15 @@ rm="rm -f"
Xsed="${SED}"' -e 1s/^X//'
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
# 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'"
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ SP2NL='tr \040 \012'
+ NL2SP='tr \015\012 \040\040'
;;
- *) # Assume ASCII based system
- SP2NL="tr '\040' '\012'"
- NL2SP="tr '\015\012' '\040\040'"
+ *) # EBCDIC based system
+ SP2NL='tr \100 \n'
+ NL2SP='tr \r\n \100\100'
;;
esac
@@ -112,8 +113,9 @@ if test "${LANG+set}" = set; then
fi
# Make sure IFS has a sensible default
-: ${IFS="
-"}
+lt_nl='
+'
+IFS=" $lt_nl"
if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
$echo "$modename: not configured to build any kind of library" 1>&2
@@ -130,6 +132,8 @@ run=
show="$echo"
show_help=
execute_dlfiles=
+duplicate_deps=no
+preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
@@ -137,13 +141,51 @@ o2lo="s/\\.${objext}\$/.lo/"
# Shell function definitions:
# This seems to be the best place for them
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+ if test "$run" = ":"; then
+ # Return a directory name, but don't create it in dry-run mode
+ my_tmpdir="${my_template}-$$"
+ else
+
+ # If mktemp works, use that first and foremost
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$my_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $mkdir "$my_tmpdir"
+ umask $save_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$my_tmpdir" || {
+ $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
+ exit $EXIT_FAILURE
+ }
+ fi
+
+ $echo "X$my_tmpdir" | $Xsed
+}
+
+
# func_win32_libid arg
# return the library type of file 'arg'
#
# 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.
-func_win32_libid () {
+func_win32_libid ()
+{
win32_libid_type="unknown"
win32_fileres=`file -L $1 2>/dev/null`
case $win32_fileres in
@@ -154,12 +196,11 @@ func_win32_libid () {
if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
$EGREP -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
+ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
fi
;;
*DLL*)
@@ -183,7 +224,8 @@ func_win32_libid () {
# Only attempt this if the compiler in the base compile
# command doesn't match the default compiler.
# arg is usually of the form 'gcc ...'
-func_infer_tag () {
+func_infer_tag ()
+{
if test -n "$available_tags" && test -z "$tagname"; then
CC_quoted=
for arg in $CC; do
@@ -242,8 +284,25 @@ func_infer_tag () {
}
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+
+ $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
+ $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
+ exit $EXIT_FAILURE
+ fi
+}
+
# func_extract_archives gentop oldlib ...
-func_extract_archives () {
+func_extract_archives ()
+{
my_gentop="$1"; shift
my_oldlibs=${1+"$@"}
my_oldobjs=""
@@ -274,9 +333,9 @@ func_extract_archives () {
$run ${rm}r "$my_xdir"
$show "$mkdir $my_xdir"
$run $mkdir "$my_xdir"
- status=$?
- if test "$status" -ne 0 && test ! -d "$my_xdir"; then
- exit $status
+ exit_status=$?
+ if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
+ exit $exit_status
fi
case $host in
*-darwin*)
@@ -287,7 +346,7 @@ func_extract_archives () {
cd $my_xdir || exit $?
darwin_archive=$my_xabs
darwin_curdir=`pwd`
- darwin_base_archive=`basename $darwin_archive`
+ darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
if test -n "$darwin_arches"; then
darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
@@ -296,64 +355,33 @@ func_extract_archives () {
for darwin_arch in $darwin_arches ; do
mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
- # Remove the table of contents from the thin files.
- $AR -d "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" __.SYMDEF 2>/dev/null || true
- $AR -d "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" __.SYMDEF\ SORTED 2>/dev/null || true
cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- $AR -xo "${darwin_base_archive}"
- rm "${darwin_base_archive}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
cd "$darwin_curdir"
+ $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
done # $darwin_arches
## Okay now we have a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f | xargs basename | sort -u | $NL2SP`
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
darwin_file=
darwin_files=
for darwin_file in $darwin_filelist; do
darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
lipo -create -output "$darwin_file" $darwin_files
done # $darwin_filelist
- rm -rf unfat-$$
+ ${rm}r unfat-$$
cd "$darwin_orig_dir"
else
- cd $darwin_orig_dir
- (cd $my_xdir && $AR x $my_xabs) || exit $?
+ cd "$darwin_orig_dir"
+ func_extract_an_archive "$my_xdir" "$my_xabs"
fi # $darwin_arches
fi # $run
- ;;
- *)
- # 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 $my_xdir && $AR x $my_xabs)"
- $run eval "(cd \$my_xdir && $AR x \$my_xabs)" || exit $?
- if ($AR t "$my_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 "$my_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 "$my_xdir/$name_to"
- do
- name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
- done
- $show "(cd $my_xdir && $AR xN $i $my_xabs '$name' && $mv '$name' '$name_to')"
- $run eval "(cd \$my_xdir && $AR xN $i \$my_xabs '$name' && $mv '$name' '$name_to')" || exit $?
- i=`expr $i + 1`
- done
- done
- fi
;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
esac
my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
done
-
func_extract_archives_result="$my_oldobjs"
}
# End of Shell function definitions
@@ -362,6 +390,8 @@ func_extract_archives () {
# Darwin sucks
eval std_shrext=\"$shrext_cmds\"
+disable_libs=no
+
# Parse our command line options once, thoroughly.
while test "$#" -gt 0
do
@@ -426,10 +456,10 @@ do
--version)
$echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
$echo
- $echo "Copyright (C) 2003 Free Software Foundation, Inc."
+ $echo "Copyright (C) 2005 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 $EXIT_SUCCESS
+ exit $?
;;
--config)
@@ -438,7 +468,7 @@ do
for tagname in $taglist; do
${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
done
- exit $EXIT_SUCCESS
+ exit $?
;;
--debug)
@@ -463,7 +493,7 @@ do
else
$echo "disable static libraries"
fi
- exit $EXIT_SUCCESS
+ exit $?
;;
--finish) mode="finish" ;;
@@ -478,7 +508,11 @@ do
preserve_args="$preserve_args $arg"
;;
- --tag) prevopt="--tag" prev=tag ;;
+ --tag)
+ prevopt="--tag"
+ prev=tag
+ preserve_args="$preserve_args --tag"
+ ;;
--tag=*)
set tag "$optarg" ${1+"$@"}
shift
@@ -510,6 +544,18 @@ if test -n "$prevopt"; then
exit $EXIT_FAILURE
fi
+case $disable_libs in
+no)
+ ;;
+shared)
+ build_libtool_libs=no
+ build_old_libs=yes
+ ;;
+static)
+ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+ ;;
+esac
+
# 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.
@@ -520,7 +566,7 @@ if test -z "$show_help"; then
# Infer the operation mode.
if test -z "$mode"; then
$echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
- $echo "*** Future versions of Libtool will require -mode=MODE be specified." 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
@@ -586,7 +632,7 @@ if test -z "$show_help"; then
for arg
do
- case "$arg_mode" in
+ case $arg_mode in
arg )
# do not "continue". Instead, add this to base_compile
lastarg="$arg"
@@ -668,7 +714,10 @@ if test -z "$show_help"; then
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.
+ # in scan sets, and some SunOS ksh mistreat backslash-escaping
+ # in scan sets (worked around with variable expansion),
+ # and furthermore cannot handle '|' '&' '(' ')' in scan sets
+ # at all, so we specify them separately.
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
lastarg="\"$lastarg\""
;;
@@ -742,6 +791,14 @@ if test -z "$show_help"; then
esac
done
+ qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
+ case $qlibobj in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qlibobj="\"$qlibobj\"" ;;
+ esac
+ test "X$libobj" != "X$qlibobj" \
+ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
if test "X$xdir" = "X$obj"; then
@@ -814,12 +871,17 @@ compiler."
$run $rm $removelist
exit $EXIT_FAILURE
fi
- $echo $srcfile > "$lockfile"
+ $echo "$srcfile" > "$lockfile"
fi
if test -n "$fix_srcfile_path"; then
eval srcfile=\"$fix_srcfile_path\"
fi
+ qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
+ case $qsrcfile in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qsrcfile="\"$qsrcfile\"" ;;
+ esac
$run $rm "$libobj" "${libobj}T"
@@ -841,18 +903,18 @@ EOF
fbsd_hideous_sh_bug=$base_compile
if test "$pic_mode" != no; then
- command="$base_compile $srcfile $pic_flag"
+ command="$base_compile $qsrcfile $pic_flag"
else
# Don't build PIC code
- command="$base_compile $srcfile"
+ command="$base_compile $qsrcfile"
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
+ exit_status=$?
+ if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $exit_status
fi
fi
@@ -924,9 +986,9 @@ EOF
if test "$build_old_libs" = yes; then
if test "$pic_mode" != yes; then
# Don't build PIC code
- command="$base_compile $srcfile"
+ command="$base_compile $qsrcfile"
else
- command="$base_compile $srcfile $pic_flag"
+ command="$base_compile $qsrcfile $pic_flag"
fi
if test "$compiler_c_o" = yes; then
command="$command -o $obj"
@@ -1055,6 +1117,7 @@ EOF
no_install=no
objs=
non_pic_objects=
+ notinst_path= # paths that contain not-installed libtool libraries
precious_files_regex=
prefer_static_libs=no
preload=no
@@ -1083,14 +1146,15 @@ EOF
if test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
+ prefer_static_libs=yes
else
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
+ prefer_static_libs=built
fi
build_libtool_libs=no
build_old_libs=yes
- prefer_static_libs=yes
break
;;
esac
@@ -1265,6 +1329,11 @@ EOF
if test -z "$pic_object" || test "$pic_object" = none ; then
arg="$non_pic_object"
fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
@@ -1348,6 +1417,13 @@ EOF
prev=
continue
;;
+ darwin_framework|darwin_framework_skip)
+ test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ prev=
+ continue
+ ;;
*)
eval "$prev=\"\$arg\""
prev=
@@ -1406,6 +1482,18 @@ EOF
continue
;;
+ -framework|-arch|-isysroot)
+ case " $CC " in
+ *" ${arg} ${1} "* | *" ${arg} ${1} "*)
+ prev=darwin_framework_skip ;;
+ *) compiler_flags="$compiler_flags $arg"
+ prev=darwin_framework ;;
+ esac
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ continue
+ ;;
+
-inst-prefix-dir)
prev=inst_prefix
continue
@@ -1432,7 +1520,8 @@ EOF
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
$echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- exit $EXIT_FAILURE
+ absdir="$dir"
+ notinst_path="$notinst_path $dir"
fi
dir="$absdir"
;;
@@ -1446,10 +1535,15 @@ EOF
esac
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$dir:"*) ;;
*) dllsearchpath="$dllsearchpath:$dir";;
esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
;;
esac
continue
@@ -1458,15 +1552,15 @@ EOF
-l*)
if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
case $host in
- *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
# These systems don't actually have a C or math library (as such)
continue
;;
- *-*-mingw* | *-*-os2*)
+ *-*-os2*)
# These systems don't actually have a C library (as such)
test "X$arg" = "X-lc" && continue
;;
- *-*-openbsd* | *-*-freebsd*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
# Do not include libc due to us having libc/libc_r.
test "X$arg" = "X-lc" && continue
;;
@@ -1474,10 +1568,19 @@ EOF
# Rhapsody C and math libraries are in the System framework
deplibs="$deplibs -framework System"
continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
esac
elif test "X$arg" = "X-lc_r"; then
case $host in
- *-*-openbsd* | *-*-freebsd*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
@@ -1487,8 +1590,20 @@ EOF
continue
;;
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ -model)
+ compile_command="$compile_command $arg"
+ compiler_flags="$compiler_flags $arg"
+ finalize_command="$finalize_command $arg"
+ prev=xcompiler
+ continue
+ ;;
+
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
- deplibs="$deplibs $arg"
+ compiler_flags="$compiler_flags $arg"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
continue
;;
@@ -1497,13 +1612,19 @@ EOF
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*)
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
+ # -q* pass through compiler args for the IBM compiler
+ # -m* pass through architecture-specific compiler args for GCC
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+ # -pg pass through profiling flag for GCC
+ # @file GCC response files
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
+ -t[45]*|-txscale*|@*)
+
# 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"`
@@ -1514,34 +1635,10 @@ EOF
esac
compile_command="$compile_command $arg"
finalize_command="$finalize_command $arg"
- if test "$with_gcc" = "yes" ; then
- compiler_flags="$compiler_flags $arg"
- fi
+ compiler_flags="$compiler_flags $arg"
continue
;;
- ################################################################
- #### Local edit for Sleepycat SR #8705
- #### This case was given to us by Albert Chin, and we expect
- #### this to be included in future versions of libtool,
- #### though we must verify that before upgrading.
- ################################################################
- # Flags for IRIX and Solaris compiler
- -64|-mips[0-9]|-xarch=*)
- # 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"
- compiler_flags="$compiler_flags $arg"
- continue
- ;;
-
-shrext)
prev=shrext
continue
@@ -1776,6 +1873,11 @@ EOF
if test -z "$pic_object" || test "$pic_object" = none ; then
arg="$non_pic_object"
fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
@@ -1881,9 +1983,9 @@ EOF
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
+ exit_status=$?
+ if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $exit_status
fi
fi
@@ -1946,7 +2048,6 @@ EOF
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"
@@ -1998,7 +2099,7 @@ EOF
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
- deplibs="$deplib $deplibs"
+ compiler_flags="$compiler_flags $deplib"
fi
continue
;;
@@ -2007,10 +2108,6 @@ EOF
$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
for search_ext in .la $std_shrext .so .a; do
@@ -2186,7 +2283,7 @@ EOF
esac # case $deplib
if test "$found" = yes || test -f "$lib"; then :
else
- $echo "$modename: cannot find the library \`$lib'" 1>&2
+ $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
exit $EXIT_FAILURE
fi
@@ -2210,6 +2307,8 @@ EOF
# it will not redefine variables installed, or shouldnotlink
installed=yes
shouldnotlink=no
+ avoidtemprpath=
+
# Read the .la file
case $lib in
@@ -2308,6 +2407,7 @@ EOF
dir="$libdir"
absdir="$libdir"
fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
else
if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
dir="$ladir"
@@ -2392,12 +2492,12 @@ EOF
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
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
# Make sure the rpath contains only unique directories.
case "$temp_rpath " in
*" $dir "*) ;;
*" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
+ *) temp_rpath="$temp_rpath $absdir" ;;
esac
fi
@@ -2434,8 +2534,12 @@ EOF
fi
link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test "$use_static_libs" = built && test "$installed" = yes ; then
+ use_static_libs=no
+ fi
if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
if test "$installed" = no; then
notinst_deplibs="$notinst_deplibs $lib"
need_relink=yes
@@ -2548,11 +2652,15 @@ EOF
if test "$hardcode_direct" = no; then
add="$dir/$linklib"
case $host in
- *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) 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 | $EGREP "bundle" >/dev/null ; then
+ if /usr/bin/file -L $add 2> /dev/null |
+ $EGREP ": [^:]* bundle" >/dev/null ; then
$echo "** Warning, lib $linklib is a module, not a shared library"
if test -z "$old_library" ; then
$echo
@@ -2583,7 +2691,7 @@ EOF
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
+ case $libdir in
[\\/]*)
add_dir="$add_dir -L$inst_prefix_dir$libdir"
;;
@@ -2656,7 +2764,7 @@ EOF
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
+ case $libdir in
[\\/]*)
add_dir="$add_dir -L$inst_prefix_dir$libdir"
;;
@@ -2717,8 +2825,6 @@ EOF
fi
fi
else
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
deplibs="$dir/$old_library $deplibs"
link_static=yes
fi
@@ -2836,12 +2942,12 @@ EOF
*) continue ;;
esac
case " $deplibs " in
- *" $depdepl "*) ;;
- *) deplibs="$depdepl $deplibs" ;;
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
esac
case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$deplibs $path" ;;
+ *" $depdepl "*) ;;
+ *) deplibs="$depdepl $deplibs" ;;
esac
done
fi # link_all_deplibs != no
@@ -3106,27 +3212,27 @@ EOF
# Check that each of the things are valid numbers.
case $current in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+ $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit $EXIT_FAILURE
;;
esac
case $revision in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+ $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit $EXIT_FAILURE
;;
esac
case $age in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+ $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit $EXIT_FAILURE
;;
@@ -3305,9 +3411,9 @@ EOF
# 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'`
+ 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
@@ -3358,9 +3464,14 @@ EOF
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *-*-openbsd* | *-*-freebsd*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
# Do not include libc due to us having libc/libc_r.
- test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
;;
*)
# Add libc to deplibs on all other systems if necessary.
@@ -3404,11 +3515,11 @@ EOF
int main() { return 0; }
EOF
$rm conftest
- $LTCC -o conftest conftest.c $deplibs
+ $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
if test "$?" -eq 0 ; then
ldd_output=`ldd conftest`
for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
+ name=`expr $i : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
if test "$name" != "" && test "$name" -ne "0"; then
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
@@ -3445,11 +3556,11 @@ EOF
# 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\(.*\)'`"
+ name=`expr $i : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
if test "$name" != "" && test "$name" != "0"; then
$rm conftest
- $LTCC -o conftest conftest.c $i
+ $LTCC $LTCFLAGS -o conftest conftest.c $i
# Did it work?
if test "$?" -eq 0 ; then
ldd_output=`ldd conftest`
@@ -3497,7 +3608,7 @@ EOF
set dummy $deplibs_check_method
file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
+ name=`expr $a_deplib : '-l\(.*\)'`
# If $name is empty we are operating on a -L argument.
if test "$name" != "" && test "$name" != "0"; then
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
@@ -3566,7 +3677,7 @@ EOF
set dummy $deplibs_check_method
match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
+ 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
@@ -3696,6 +3807,35 @@ EOF
deplibs=$newdeplibs
fi
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
+
+
# All the library-specific variables (install_libdir is set above).
library_names=
old_library=
@@ -3779,6 +3919,7 @@ EOF
fi
lib="$output_objdir/$realname"
+ linknames=
for link
do
linknames="$linknames $link"
@@ -3807,6 +3948,9 @@ EOF
# The command line is too long to execute in one step.
$show "using reloadable object file for export list..."
skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
fi
done
IFS="$save_ifs"
@@ -3876,7 +4020,8 @@ EOF
fi
fi
- if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
+ if test "X$skipped_export" != "X:" &&
+ len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
:
else
@@ -3895,6 +4040,7 @@ EOF
save_libobjs=$libobjs
fi
save_output=$output
+ output_la=`$echo "X$output" | $Xsed -e "$basename"`
# Clear the reloadable object creation command queue and
# initialize k to one.
@@ -3904,13 +4050,13 @@ EOF
delfiles=
last_robj=
k=1
- output=$output_objdir/$save_output-${k}.$objext
+ output=$output_objdir/$output_la-${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" : ".*"` &&
+ { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
test "$len" -le "$max_cmd_len"; }; then
objlist="$objlist $obj"
else
@@ -3924,9 +4070,9 @@ EOF
# the last one created.
eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
fi
- last_robj=$output_objdir/$save_output-${k}.$objext
+ last_robj=$output_objdir/$output_la-${k}.$objext
k=`expr $k + 1`
- output=$output_objdir/$save_output-${k}.$objext
+ output=$output_objdir/$output_la-${k}.$objext
objlist=$obj
len=1
fi
@@ -3946,13 +4092,13 @@ EOF
eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
fi
- # Set up a command to remove the reloadale object files
+ # Set up a command to remove the reloadable 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"
+ delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
done
$echo "creating a temporary reloadable object file: $output"
@@ -4000,13 +4146,30 @@ EOF
IFS="$save_ifs"
eval cmd=\"$cmd\"
$show "$cmd"
- $run eval "$cmd" || exit $?
+ $run eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
+ fi
+
+ exit $lt_exit
+ }
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 $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ fi
+ fi
+
exit $EXIT_SUCCESS
fi
@@ -4188,6 +4351,35 @@ EOF
;;
esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
compile_command="$compile_command $compile_deplibs"
finalize_command="$finalize_command $finalize_deplibs"
@@ -4232,10 +4424,15 @@ EOF
fi
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$libdir:"*) ;;
*) dllsearchpath="$dllsearchpath:$libdir";;
esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
;;
esac
done
@@ -4349,13 +4546,25 @@ extern \"C\" {
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$output.exp"
+ export_symbols="$output_objdir/$outputname.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"'
+ case $host in
+ *cygwin* | *mingw* )
+ $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
else
- $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 "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
$run eval 'mv "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* )
+ $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
fi
fi
@@ -4406,7 +4615,26 @@ extern \"C\" {
#endif
/* The mapping between symbol names and symbols. */
+"
+
+ case $host in
+ *cygwin* | *mingw* )
+ $echo >> "$output_objdir/$dlsyms" "\
+/* DATA imports from DLLs on WIN32 can't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs */
+struct {
+"
+ ;;
+ * )
+ $echo >> "$output_objdir/$dlsyms" "\
const struct {
+"
+ ;;
+ esac
+
+
+ $echo >> "$output_objdir/$dlsyms" "\
const char *name;
lt_ptr address;
}
@@ -4453,16 +4681,29 @@ static const void *lt_preloaded_setup() {
esac
# Now compile the dynamic symbol file.
- $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 $?
+ $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -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"
$run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
# Transform the symbol file into the correct name.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ case $host in
+ *cygwin* | *mingw* )
+ if test -f "$output_objdir/${outputname}.def" ; then
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+ else
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ fi
+ ;;
+ * )
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ ;;
+ esac
;;
*)
$echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
@@ -4487,7 +4728,7 @@ static const void *lt_preloaded_setup() {
# We have no uninstalled library dependencies, so finalize right now.
$show "$link_command"
$run eval "$link_command"
- status=$?
+ exit_status=$?
# Delete the generated files.
if test -n "$dlsyms"; then
@@ -4495,7 +4736,7 @@ static const void *lt_preloaded_setup() {
$run $rm "$output_objdir/${outputname}S.${objext}"
fi
- exit $status
+ exit $exit_status
fi
if test -n "$shlibpath_var"; then
@@ -4635,10 +4876,12 @@ static const void *lt_preloaded_setup() {
esac
case $host in
*cygwin* | *mingw* )
- cwrappersource=`$echo ${objdir}/lt-${output}.c`
- cwrapper=`$echo ${output}.exe`
- $rm $cwrappersource $cwrapper
- trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+ output_name=`basename $output`
+ output_path=`dirname $output`
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
cat > $cwrappersource <<EOF
@@ -4663,6 +4906,9 @@ EOF
#include <malloc.h>
#include <stdarg.h>
#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
#if defined(PATH_MAX)
# define LT_PATHMAX PATH_MAX
@@ -4673,15 +4919,19 @@ EOF
#endif
#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
+# define DIR_SEPARATOR '/'
+# define PATH_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
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
#endif
#ifndef DIR_SEPARATOR_2
@@ -4691,17 +4941,32 @@ EOF
(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
#endif /* DIR_SEPARATOR_2 */
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
#define XFREE(stale) do { \
if (stale) { free ((void *) stale); stale = 0; } \
} while (0)
+/* -DDEBUG is fairly common in CFLAGS. */
+#undef DEBUG
+#if defined DEBUGWRAPPER
+# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
+#else
+# define DEBUG(format, ...)
+#endif
+
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);
+const char * base_name (const char *name);
+char * find_executable(const char *wrapper);
+int check_executable(const char *path);
char * strendzap(char *str, const char *pat);
void lt_fatal (const char *message, ...);
@@ -4711,29 +4976,51 @@ main (int argc, char *argv[])
char **newargz;
int i;
- program_name = (char *) xstrdup ((char *) basename (argv[0]));
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ DEBUG("(main) argv[0] : %s\n",argv[0]);
+ DEBUG("(main) program_name : %s\n",program_name);
newargz = XMALLOC(char *, argc+2);
EOF
- cat >> $cwrappersource <<EOF
- newargz[0] = "$SHELL";
+ cat >> $cwrappersource <<EOF
+ newargz[0] = (char *) xstrdup("$SHELL");
EOF
- cat >> $cwrappersource <<"EOF"
- newargz[1] = fnqualify(argv[0]);
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = find_executable(argv[0]);
+ if (newargz[1] == NULL)
+ lt_fatal("Couldn't find %s", argv[0]);
+ DEBUG("(main) found exe at : %s\n",newargz[1]);
/* 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;
+
+ for (i=0; i<argc+1; i++)
+ {
+ DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]);
+ ;
+ }
+
EOF
- cat >> $cwrappersource <<EOF
+ case $host_os in
+ mingw*)
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",(char const **)newargz);
+EOF
+ ;;
+ *)
+ cat >> $cwrappersource <<EOF
execv("$SHELL",newargz);
EOF
+ ;;
+ esac
- cat >> $cwrappersource <<"EOF"
+ cat >> $cwrappersource <<"EOF"
+ return 127;
}
void *
@@ -4753,48 +5040,148 @@ xstrdup (const char *string)
;
}
-char *
-basename (const char *name)
+const char *
+base_name (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] == ':')
+ if (isalpha ((unsigned char)name[0]) && name[1] == ':')
name += 2;
#endif
for (base = name; *name; name++)
if (IS_DIR_SEPARATOR (*name))
base = name + 1;
- return (char *) base;
+ return base;
+}
+
+int
+check_executable(const char * path)
+{
+ struct stat st;
+
+ DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0) &&
+ (
+ /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
+#if defined (S_IXOTH)
+ ((st.st_mode & S_IXOTH) == S_IXOTH) ||
+#endif
+#if defined (S_IXGRP)
+ ((st.st_mode & S_IXGRP) == S_IXGRP) ||
+#endif
+ ((st.st_mode & S_IXUSR) == S_IXUSR))
+ )
+ return 1;
+ else
+ return 0;
}
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise */
char *
-fnqualify(const char *path)
+find_executable (const char* wrapper)
{
- size_t size;
- char *p;
+ int has_slash = 0;
+ const char* p;
+ const char* p_next;
+ /* static buffer for getcwd */
char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char* concat_name;
+
+ DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
- assert(path != NULL);
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
- /* Is it qualified already? */
+ /* Absolute path? */
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (isalpha (path[0]) && path[1] == ':')
- return xstrdup (path);
+ if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
#endif
- if (IS_DIR_SEPARATOR (path[0]))
- return xstrdup (path);
- /* prepend the current directory */
- /* doesn't handle '~' */
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char* path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char* q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR(*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen(tmp);
+ concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
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;
+ tmp_len = strlen(tmp);
+ concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable(concat_name))
+ return concat_name;
+ XFREE(concat_name);
+ return NULL;
}
char *
@@ -4838,16 +5225,16 @@ lt_fatal (const char *message, ...)
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 $EXIT_FAILURE" 1 2 15
+ # 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 $LTCFLAGS -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
$echo > $output "\
#! $SHELL
@@ -4997,13 +5384,13 @@ else
# Backslashes separate directories on plain windows
*-*-mingw | *-*-os2*)
$echo >> $output "\
- exec \$progdir\\\\\$program \${1+\"\$@\"}
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
"
;;
*)
$echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
"
;;
esac
@@ -5013,7 +5400,7 @@ else
fi
else
# The program doesn't exist.
- \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+ \$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
exit $EXIT_FAILURE
@@ -5055,6 +5442,63 @@ fi\
if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
cmds=$old_archive_from_new_cmds
else
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "copying selected object files to avoid basename conflicts..."
+
+ if test -z "$gentop"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ exit_status=$?
+ if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
+ exit $exit_status
+ fi
+ fi
+
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ counter=`expr $counter + 1`
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ $run ln "$obj" "$gentop/$newobj" ||
+ $run cp "$obj" "$gentop/$newobj"
+ oldobjs="$oldobjs $gentop/$newobj"
+ ;;
+ *) oldobjs="$oldobjs $obj" ;;
+ esac
+ done
+ fi
+
eval cmds=\"$old_archive_cmds\"
if len=`expr "X$cmds" : ".*"` &&
@@ -5068,20 +5512,7 @@ fi\
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
@@ -5092,7 +5523,7 @@ fi\
oldobjs="$objlist $obj"
objlist="$objlist $obj"
eval test_cmds=\"$old_archive_cmds\"
- if len=`expr "X$test_cmds" : ".*"` &&
+ if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
test "$len" -le "$max_cmd_len"; then
:
else
@@ -5289,11 +5720,11 @@ relink_command=\"$relink_command\""
# install_prog (especially on Windows NT).
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
+ $echo "X$nonopt" | grep shtool > /dev/null; then
# Aesthetically quote it.
arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
arg="\"$arg\""
;;
esac
@@ -5302,14 +5733,14 @@ relink_command=\"$relink_command\""
shift
else
install_prog=
- arg="$nonopt"
+ arg=$nonopt
fi
# 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
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
arg="\"$arg\""
;;
esac
@@ -5327,28 +5758,31 @@ relink_command=\"$relink_command\""
do
if test -n "$dest"; then
files="$files $dest"
- dest="$arg"
+ dest=$arg
continue
fi
case $arg in
-d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
+ -f)
+ case " $install_prog " in
+ *[\\\ /]cp\ *) ;;
+ *) prev=$arg ;;
+ esac
+ ;;
+ -g | -m | -o) prev=$arg ;;
-s)
stripme=" -s"
continue
;;
- -*) ;;
-
+ -*)
+ ;;
*)
# If the previous option needed an argument, then skip it.
if test -n "$prev"; then
prev=
else
- dest="$arg"
+ dest=$arg
continue
fi
;;
@@ -5357,7 +5791,7 @@ relink_command=\"$relink_command\""
# Aesthetically quote the argument.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
arg="\"$arg\""
;;
esac
@@ -5526,11 +5960,14 @@ relink_command=\"$relink_command\""
if test "$#" -gt 0; then
# Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
for linkname
do
if test "$linkname" != "$realname"; then
- $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
+ $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
fi
done
fi
@@ -5543,7 +5980,16 @@ relink_command=\"$relink_command\""
IFS="$save_ifs"
eval cmd=\"$cmd\"
$show "$cmd"
- $run eval "$cmd" || exit $?
+ $run eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
+ fi
+
+ exit $lt_exit
+ }
done
IFS="$save_ifs"
fi
@@ -5637,17 +6083,15 @@ relink_command=\"$relink_command\""
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
+ # Note that it is not necessary on cygwin/mingw to append a dot to
+ # foo even if both foo and FILE.exe exist: automatic-append-.exe
+ # behavior happens only for exec(3), not for open(2)! Also, sourcing
+ # `FILE.' does not work on cygwin managed mounts.
+ #
# If there is no directory component, then add one.
- case $file in
- */* | *\\*) . ${wrapperdot} ;;
- *) . ./${wrapperdot} ;;
+ case $wrapper in
+ */* | *\\*) . ${wrapper} ;;
+ *) . ./${wrapper} ;;
esac
# Check the variables that should have been set.
@@ -5675,34 +6119,21 @@ relink_command=\"$relink_command\""
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
+ # Note that it is not necessary on cygwin/mingw to append a dot to
+ # foo even if both foo and FILE.exe exist: automatic-append-.exe
+ # behavior happens only for exec(3), not for open(2)! Also, sourcing
+ # `FILE.' does not work on cygwin managed mounts.
+ #
# If there is no directory component, then add one.
- case $file in
- */* | *\\*) . ${wrapperdot} ;;
- *) . ./${wrapperdot} ;;
+ case $wrapper in
+ */* | *\\*) . ${wrapper} ;;
+ *) . ./${wrapper} ;;
esac
outputname=
if test "$fast_install" = no && test -n "$relink_command"; then
if test "$finalize" = yes && test -z "$run"; then
- tmpdir="/tmp"
- test -n "$TMPDIR" && tmpdir="$TMPDIR"
- tmpdir="$tmpdir/libtool-$$"
- save_umask=`umask`
- umask 0077
- if $mkdir "$tmpdir"; then
- umask $save_umask
- else
- umask $save_umask
- $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- continue
- fi
+ tmpdir=`func_mktempdir`
file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
outputname="$tmpdir/$file"
# Replace the output file specification.
@@ -5726,7 +6157,7 @@ relink_command=\"$relink_command\""
fi
# remove .exe since cygwin /usr/bin/install will append another
- # one anyways
+ # one anyway
case $install_prog,$host in
*/usr/bin/install*,*cygwin*)
case $file:$destfile in
@@ -5826,7 +6257,7 @@ relink_command=\"$relink_command\""
# Exit here if they wanted silent mode.
test "$show" = : && exit $EXIT_SUCCESS
- $echo "----------------------------------------------------------------------"
+ $echo "X----------------------------------------------------------------------" | $Xsed
$echo "Libraries have been installed in:"
for libdir in $libdirs; do
$echo " $libdir"
@@ -5859,7 +6290,7 @@ relink_command=\"$relink_command\""
$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 "X----------------------------------------------------------------------" | $Xsed
exit $EXIT_SUCCESS
;;
@@ -6076,9 +6507,17 @@ relink_command=\"$relink_command\""
rmfiles="$rmfiles $objdir/$n"
done
test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
- test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- if test "$mode" = uninstall; then
+ case "$mode" in
+ clean)
+ case " $library_names " in
+ # " " in the beginning catches empty $dlname
+ *" $dlname "*) ;;
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ esac
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ ;;
+ uninstall)
if test -n "$library_names"; then
# Do each command in the postuninstall commands.
cmds=$postuninstall_cmds
@@ -6111,7 +6550,8 @@ relink_command=\"$relink_command\""
IFS="$save_ifs"
fi
# FIXME: should reinstall the best remaining shared library.
- fi
+ ;;
+ esac
fi
;;
@@ -6396,7 +6836,7 @@ esac
$echo
$echo "Try \`$modename --help' for more information about other modes."
-exit $EXIT_SUCCESS
+exit $?
# The TAGs below are defined such that we never get into a situation
# in which we disable both kinds of libraries. Given conflicting
@@ -6410,12 +6850,11 @@ exit $EXIT_SUCCESS
# 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
+disable_libs=shared
# ### 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`
+disable_libs=static
# ### END LIBTOOL TAG CONFIG: disable-static
# Local Variables:
diff --git a/db/dist/pubdef.in b/db/dist/pubdef.in
index 7f6ad2ebd..67b222499 100644
--- a/db/dist/pubdef.in
+++ b/db/dist/pubdef.in
@@ -1,386 +1,437 @@
+# $Id: pubdef.in,v 12.35 2006/09/13 14:53:38 mjc Exp $
+#
# Name
# D == documentation
# I == include file
# J == Java constant
# N == wrapped by the Java native layer
-DB_AFTER D I J
-DB_AGGRESSIVE D I J
-DB_ALREADY_ABORTED * I *
-DB_AM_CHKSUM * I *
-DB_AM_CL_WRITER * I *
-DB_AM_COMPENSATE * I *
-DB_AM_CREATED * I *
-DB_AM_CREATED_MSTR * I *
-DB_AM_DBM_ERROR * I *
-DB_AM_DELIMITER * I *
-DB_AM_DIRTY * I *
-DB_AM_DISCARD * I *
-DB_AM_DUP * I *
-DB_AM_DUPSORT * I *
-DB_AM_ENCRYPT * I *
-DB_AM_FIXEDLEN * I *
-DB_AM_INMEM * I *
-DB_AM_INORDER * I *
-DB_AM_IN_RENAME * I *
-DB_AM_NOT_DURABLE * I *
-DB_AM_OPEN_CALLED * I *
-DB_AM_PAD * I *
-DB_AM_PGDEF * I *
-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 *
-DB_AM_SUBDB * I *
-DB_AM_SWAP * I *
-DB_AM_TXN * I *
-DB_AM_VERIFYING * I *
-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 J
-DB_BTREEMAGIC * I *
-DB_BTREEOLDVER * I *
-DB_BTREEVERSION * I *
-DB_BUFFER_SMALL D I N
-DB_CACHED_COUNTS * I *
-DB_CDB_ALLDB D I J
-DB_CHKSUM D I J
-DB_CONFIG D * *
-DB_CONSUME D I J
-DB_CONSUME_WAIT D I J
-DB_CREATE D I J
-DB_CURRENT D I J
-DB_CXX_NO_EXCEPTIONS D I *
-DB_DBM_HSEARCH * I *
-DB_DBT_APPMALLOC D I N
-DB_DBT_DUPOK * I *
-DB_DBT_ISSET * I *
-DB_DBT_MALLOC D I J
-DB_DBT_PARTIAL D I J
-DB_DBT_REALLOC D I N
-DB_DBT_USERMEM D I J
-DB_DEGREE_2 D I J
-DB_DELETED * I *
-DB_DIRECT D I *
-DB_DIRECT_DB D I J
-DB_DIRECT_LOG D I J
-DB_DIRTY_READ D I J
-DB_DONOTINDEX D I J
-DB_DSYNC_LOG D I J
-DB_DUP D I J
-DB_DUPSORT D I J
-DB_DURABLE_UNKNOWN * I *
-DB_EID_BROADCAST D I J
-DB_EID_INVALID D I J
-DB_ENCRYPT D I J
-DB_ENCRYPT_AES D I J
-DB_ENV_AUTO_COMMIT * I *
-DB_ENV_CDB * I *
-DB_ENV_CDB_ALLDB * I *
-DB_ENV_CREATE * I *
-DB_ENV_DBLOCAL * I *
-DB_ENV_DIRECT_DB * I *
-DB_ENV_DIRECT_LOG * I *
-DB_ENV_DSYNC_LOG * I *
-DB_ENV_FATAL * I *
-DB_ENV_LOCKDOWN * I *
-DB_ENV_LOG_AUTOREMOVE * I *
-DB_ENV_LOG_INMEMORY * I *
-DB_ENV_NOLOCKING * I *
-DB_ENV_NOMMAP * I *
-DB_ENV_NOPANIC * I *
-DB_ENV_OPEN_CALLED * I *
-DB_ENV_OVERWRITE * I *
-DB_ENV_PRIVATE * I *
-DB_ENV_REGION_INIT * 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_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_FILE_ID_LEN * I *
-DB_FIRST D I J
-DB_FLUSH D I J
-DB_FORCE D I J
-DB_GET_BOTH D I J
-DB_GET_BOTHC * I *
-DB_GET_BOTH_RANGE D I J
-DB_GET_RECNO D I J
-DB_HANDLE_LOCK * I *
-DB_HASH D I J
-DB_HASHMAGIC * I *
-DB_HASHOLDVER * I *
-DB_HASHVERSION * I *
-DB_HOME D * *
-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_INORDER D I J
-DB_JOINENV D I J
-DB_JOIN_ITEM D I J
-DB_JOIN_NOSORT D I J
-DB_KEYEMPTY D I J
-DB_KEYEXIST D I J
-DB_KEYFIRST D I J
-DB_KEYLAST D I J
-DB_LAST D I J
-DB_LOCKDOWN D I J
-DB_LOCKVERSION * I *
-DB_LOCK_ABORT * I *
-DB_LOCK_DEADLOCK D I J
-DB_LOCK_DEFAULT D I J
-DB_LOCK_DIRTY * I *
-DB_LOCK_DUMP * I *
-DB_LOCK_EXPIRE D I J
-DB_LOCK_GET D I J
-DB_LOCK_GET_TIMEOUT D I J
-DB_LOCK_INHERIT * I *
-DB_LOCK_IREAD D I J
-DB_LOCK_IWR D I J
-DB_LOCK_IWRITE D I J
-DB_LOCK_MAXLOCKS D I J
-DB_LOCK_MAXWRITE D I J
-DB_LOCK_MINLOCKS D I J
-DB_LOCK_MINWRITE D I J
-DB_LOCK_NG * I *
-DB_LOCK_NORUN * I *
-DB_LOCK_NOTEXIST * I *
-DB_LOCK_NOTGRANTED D I J
-DB_LOCK_NOWAIT D I J
-DB_LOCK_OLDEST D I J
-DB_LOCK_PUT D I J
-DB_LOCK_PUT_ALL D I J
-DB_LOCK_PUT_OBJ D I J
-DB_LOCK_PUT_READ * I *
-DB_LOCK_RANDOM D I J
-DB_LOCK_READ D I J
-DB_LOCK_RECORD * I *
-DB_LOCK_REMOVE * I *
-DB_LOCK_SET_TIMEOUT * I *
-DB_LOCK_SWITCH * I *
-DB_LOCK_TIMEOUT D I J
-DB_LOCK_TRADE * I *
-DB_LOCK_UPGRADE * I *
-DB_LOCK_UPGRADE_WRITE * I *
-DB_LOCK_WAIT * I *
-DB_LOCK_WRITE D I J
-DB_LOCK_WWRITE * I *
-DB_LOCK_YOUNGEST D I J
-DB_LOGC_BUF_SIZE * I *
-DB_LOGFILEID_INVALID * I *
-DB_LOGMAGIC * I *
-DB_LOGOLDVER * I *
-DB_LOGVERSION * I *
-DB_LOG_AUTOREMOVE D I J
-DB_LOG_BUFFER_FULL D I *
-DB_LOG_CHKPNT * I *
-DB_LOG_COMMIT * I *
-DB_LOG_DISK * I *
-DB_LOG_INMEMORY D I J
-DB_LOG_LOCKED * I *
-DB_LOG_NOCOPY * I *
-DB_LOG_NOT_DURABLE * I *
-DB_LOG_PERM * I *
-DB_LOG_RESEND * I *
-DB_LOG_SILENT_ERR * I *
-DB_LOG_WRNOSYNC * I *
-DB_LSTAT_ABORTED * I *
-DB_LSTAT_EXPIRED * I *
-DB_LSTAT_FREE * I *
-DB_LSTAT_HELD * I *
-DB_LSTAT_NOTEXIST * I *
-DB_LSTAT_PENDING * I *
-DB_LSTAT_WAITING * I *
-DB_MAX_PAGES * I *
-DB_MAX_RECORDS * I *
-DB_MPOOL_CLEAN D I *
-DB_MPOOL_CREATE D I *
-DB_MPOOL_DIRTY D I *
-DB_MPOOL_DISCARD D I *
-DB_MPOOL_FREE * I *
-DB_MPOOL_LAST D I *
-DB_MPOOL_NEW D I *
-DB_MPOOL_NOFILE D I J
-DB_MPOOL_UNLINK D I J
-DB_MULTIPLE D I J
-DB_MULTIPLE_INIT D I *
-DB_MULTIPLE_KEY D I J
-DB_MULTIPLE_KEY_NEXT D I *
-DB_MULTIPLE_NEXT D I *
-DB_MULTIPLE_RECNO_NEXT D I *
-DB_NEEDSPLIT * I *
-DB_NEXT D I J
-DB_NEXT_DUP D I J
-DB_NEXT_NODUP D I J
-DB_NODUPDATA D I J
-DB_NOLOCKING D I J
-DB_NOMMAP D I J
-DB_NOORDERCHK D I J
-DB_NOOVERWRITE D I J
-DB_NOPANIC D I J
-DB_NOSERVER D I *
-DB_NOSERVER_HOME D I J
-DB_NOSERVER_ID D I J
-DB_NOSYNC D I J
-DB_NOTFOUND D I J
-DB_NO_AUTO_COMMIT * I *
-DB_ODDFILESIZE D I *
-DB_OK_BTREE * I *
-DB_OK_HASH * I *
-DB_OK_QUEUE * I *
-DB_OK_RECNO * I *
-DB_OLD_VERSION D I *
-DB_OPFLAGS_MASK * I *
-DB_ORDERCHKONLY D I J
-DB_OVERWRITE D I J
-DB_PAGE_LOCK * I *
-DB_PAGE_NOTFOUND D I *
-DB_PANIC_ENVIRONMENT D I J
-DB_POSITION D I J
-DB_PREV D I J
-DB_PREV_NODUP D I J
-DB_PRINTABLE D I J
-DB_PRIORITY_DEFAULT D I J
-DB_PRIORITY_HIGH D I J
-DB_PRIORITY_LOW D I J
-DB_PRIORITY_VERY_HIGH D I J
-DB_PRIORITY_VERY_LOW D I J
-DB_PRIVATE D I J
-DB_PR_PAGE * I *
-DB_PR_RECOVERYTEST * I *
-DB_QAMMAGIC * I *
-DB_QAMOLDVER * I *
-DB_QAMVERSION * I *
-DB_QUEUE D I J
-DB_RDONLY D I J
-DB_RDWRMASTER * I *
-DB_RECNO D I J
-DB_RECNUM D I J
-DB_RECORDCOUNT * I *
-DB_RECORD_LOCK * I *
-DB_RECOVER D I J
-DB_RECOVER_FATAL D I J
-DB_REDO * I *
-DB_REGION_INIT D I J
-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 J
-DB_REP_EGENCHG * I *
-DB_REP_HANDLE_DEAD D I N
-DB_REP_HOLDELECTION D I J
-DB_REP_ISPERM D I J
-DB_REP_LOGREADY * I *
-DB_REP_MASTER D I J
-DB_REP_NEWMASTER D I J
-DB_REP_NEWSITE D I J
-DB_REP_NOBUFFER D I J
-DB_REP_NOTPERM D I J
-DB_REP_PAGEDONE * I *
-DB_REP_PERMANENT D I J
-DB_REP_STARTUPDONE D I J
-DB_REP_UNAVAIL D I *
-DB_REVSPLITOFF D I J
-DB_RMW D I J
-DB_RPCCLIENT D I J
-DB_RUNRECOVERY D I N
-DB_SALVAGE D I J
-DB_SECONDARY_BAD D I *
-DB_SEQUENCE_VERSION * I *
-DB_SEQ_DEC D I J
-DB_SEQ_INC D I J
-DB_SEQ_RANGE_SET * I *
-DB_SEQ_WRAP D I J
-DB_SET D I J
-DB_SET_BEGIN_LSNP * I *
-DB_SET_LOCK_TIMEOUT D I J
-DB_SET_RANGE D I J
-DB_SET_RECNO D I J
-DB_SET_TXN_NOW * I *
-DB_SET_TXN_TIMEOUT D I J
-DB_SNAPSHOT D I J
-DB_STAT_ALL D I *
-DB_STAT_CLEAR D I J
-DB_STAT_LOCK_CONF D I *
-DB_STAT_LOCK_LOCKERS D I *
-DB_STAT_LOCK_OBJECTS D I *
-DB_STAT_LOCK_PARAMS D I *
-DB_STAT_MEMP_HASH D I *
-DB_STAT_SUBSYSTEM D I *
-DB_SURPRISE_KID * I *
-DB_SWAPBYTES * I *
-DB_SYSTEM_MEM D I J
-DB_TEST_ELECTINIT * I *
-DB_TEST_ELECTVOTE1 * I *
-DB_TEST_POSTDESTROY * I *
-DB_TEST_POSTLOG * I *
-DB_TEST_POSTLOGMETA * I *
-DB_TEST_POSTOPEN * I *
-DB_TEST_POSTSYNC * I *
-DB_TEST_PREDESTROY * I *
-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 J
-DB_TXN_APPLY D I J
-DB_TXN_BACKWARD_ALLOC * I *
-DB_TXN_BACKWARD_ROLL D I J
-DB_TXN_CKP * I *
-DB_TXN_FORWARD_ROLL D I J
-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 *
-DB_TXN_PRINT D I J
-DB_TXN_SYNC D I J
-DB_TXN_WRITE_NOSYNC D I J
-DB_UNDO * I *
-DB_UNKNOWN D I J
-DB_UNREF * I *
-DB_UPDATE_SECONDARY * I *
-DB_UPGRADE D I J
-DB_USE_ENVIRON D I J
-DB_USE_ENVIRON_ROOT D I J
-DB_VERB_DEADLOCK D I J
-DB_VERB_RECOVERY D I J
-DB_VERB_REPLICATION D I J
-DB_VERB_WAITSFOR D I J
-DB_VERIFY D I J
-DB_VERIFY_BAD D I N
-DB_VERIFY_FATAL * I *
-DB_VERSION_MAJOR * I J
-DB_VERSION_MINOR * I J
-DB_VERSION_MISMATCH D I *
-DB_VERSION_PATCH * I J
-DB_VERSION_STRING * I N
-DB_WRITECURSOR D I J
-DB_WRITELOCK * I *
-DB_WRITEOPEN * I *
-DB_XA_CREATE D I J
-DB_XIDDATASIZE D I J
-DB_YIELDCPU D I J
+DB_AFTER D I J
+DB_AGGRESSIVE D I J
+DB_ALREADY_ABORTED * I *
+DB_AM_CHKSUM * I *
+DB_AM_CL_WRITER * I *
+DB_AM_COMPENSATE * I *
+DB_AM_CREATED * I *
+DB_AM_CREATED_MSTR * I *
+DB_AM_DBM_ERROR * I *
+DB_AM_DELIMITER * I *
+DB_AM_DISCARD * I *
+DB_AM_DUP * I *
+DB_AM_DUPSORT * I *
+DB_AM_ENCRYPT * I *
+DB_AM_FIXEDLEN * I *
+DB_AM_INMEM * I *
+DB_AM_INORDER * I *
+DB_AM_IN_RENAME * I *
+DB_AM_NOT_DURABLE * I *
+DB_AM_OPEN_CALLED * I *
+DB_AM_PAD * I *
+DB_AM_PGDEF * I *
+DB_AM_RDONLY * I *
+DB_AM_READ_UNCOMMITTED * I *
+DB_AM_RECNUM * I *
+DB_AM_RECOVER * I *
+DB_AM_RENUMBER * I *
+DB_AM_REVSPLITOFF * I *
+DB_AM_SECONDARY * I *
+DB_AM_SNAPSHOT * I *
+DB_AM_SUBDB * I *
+DB_AM_SWAP * I *
+DB_AM_TXN * I *
+DB_AM_VERIFYING * I *
+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_ASSOC_IMMUTABLE_KEY * I *
+DB_AUTO_COMMIT D I J
+DB_BEFORE D I J
+DB_BTREE D I J
+DB_BTREEMAGIC * I *
+DB_BTREEOLDVER * I *
+DB_BTREEVERSION * I *
+DB_BUFFER_SMALL D I N
+DB_CDB_ALLDB D I J
+DB_CHKSUM D I J
+DB_COMPACT_FLAGS * I *
+DB_CONFIG D * *
+DB_CONSUME D I J
+DB_CONSUME_WAIT D I J
+DB_CREATE D I J
+DB_CURRENT D I J
+DB_CXX_NO_EXCEPTIONS D I *
+DB_DBM_HSEARCH * I *
+DB_DBT_APPMALLOC D I N
+DB_DBT_DUPOK * I *
+DB_DBT_ISSET * I *
+DB_DBT_MALLOC D I J
+DB_DBT_PARTIAL D I J
+DB_DBT_REALLOC D I N
+DB_DBT_USERCOPY * I N
+DB_DBT_USERMEM D I J
+DB_DEGREE_2 * I *
+DB_DELETED * I *
+DB_DIRECT D I *
+DB_DIRECT_DB D I J
+DB_DIRECT_LOG D I J
+DB_DIRTY_READ * I *
+DB_DONOTINDEX D I J
+DB_DSYNC_DB D I J
+DB_DSYNC_LOG D I J
+DB_DUP D I J
+DB_DUPSORT D I J
+DB_DURABLE_UNKNOWN * I *
+DB_EID_BROADCAST D I J
+DB_EID_INVALID D I J
+DB_ENCRYPT D I J
+DB_ENCRYPT_AES D I J
+DB_ENV_AUTO_COMMIT * I *
+DB_ENV_CDB * I *
+DB_ENV_CDB_ALLDB * I *
+DB_ENV_CREATE * I *
+DB_ENV_DBLOCAL * I *
+DB_ENV_DIRECT_DB * I *
+DB_ENV_DIRECT_LOG * I *
+DB_ENV_DSYNC_DB * I *
+DB_ENV_DSYNC_LOG * I *
+DB_ENV_FATAL * I *
+DB_ENV_LOCKDOWN * I *
+DB_ENV_LOG_AUTOREMOVE * I *
+DB_ENV_LOG_INMEMORY * I *
+DB_ENV_MULTIVERSION * I *
+DB_ENV_NOLOCKING * I *
+DB_ENV_NOMMAP * I *
+DB_ENV_NOPANIC * I *
+DB_ENV_OPEN_CALLED * I *
+DB_ENV_OVERWRITE * I *
+DB_ENV_PRIVATE * I *
+DB_ENV_REGION_INIT * 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_SNAPSHOT * I *
+DB_ENV_TXN_WRITE_NOSYNC * I *
+DB_ENV_YIELDCPU * I *
+DB_EVENT_NO_SUCH_EVENT * I *
+DB_EVENT_PANIC D I J
+DB_EVENT_REP_CLIENT D I J
+DB_EVENT_REP_MASTER D I J
+DB_EVENT_REP_NEWMASTER D I J
+DB_EVENT_REP_STARTUPDONE D I J
+DB_EVENT_WRITE_FAILED D I J
+DB_EXCL D I J
+DB_EXTENT * I *
+DB_FAST_STAT D I J
+DB_FCNTL_LOCKING * I *
+DB_FILE_ID_LEN * I *
+DB_FIRST D I J
+DB_FLUSH D I J
+DB_FORCE D I J
+DB_FREELIST_ONLY D I J
+DB_FREE_SPACE D I J
+DB_GET_BOTH D I J
+DB_GET_BOTHC * I *
+DB_GET_BOTH_RANGE D I J
+DB_GET_RECNO D I J
+DB_HANDLE_LOCK * I *
+DB_HASH D I J
+DB_HASHMAGIC * I *
+DB_HASHOLDVER * I *
+DB_HASHVERSION * I *
+DB_HOME D * *
+DB_IMMUTABLE_KEY D I J
+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_INORDER D I J
+DB_JOINENV * I J
+DB_JOIN_ITEM D I J
+DB_JOIN_NOSORT D I J
+DB_KEYEMPTY D I J
+DB_KEYEXIST D I J
+DB_KEYFIRST D I J
+DB_KEYLAST D I J
+DB_LAST D I J
+DB_LOCKDOWN D I J
+DB_LOCKVERSION * I *
+DB_LOCK_ABORT * I *
+DB_LOCK_DEADLOCK D I J
+DB_LOCK_DEFAULT D I J
+DB_LOCK_DUMP * I *
+DB_LOCK_EXPIRE D I J
+DB_LOCK_GET D I J
+DB_LOCK_GET_TIMEOUT D I J
+DB_LOCK_INHERIT * I *
+DB_LOCK_IREAD D I J
+DB_LOCK_IWR D I J
+DB_LOCK_IWRITE D I J
+DB_LOCK_MAXLOCKS D I J
+DB_LOCK_MAXWRITE D I J
+DB_LOCK_MINLOCKS D I J
+DB_LOCK_MINWRITE D I J
+DB_LOCK_NG * I *
+DB_LOCK_NORUN * I *
+DB_LOCK_NOTGRANTED D I J
+DB_LOCK_NOWAIT D I J
+DB_LOCK_OLDEST D I J
+DB_LOCK_PUT D I J
+DB_LOCK_PUT_ALL D I J
+DB_LOCK_PUT_OBJ D I J
+DB_LOCK_PUT_READ * I *
+DB_LOCK_RANDOM D I J
+DB_LOCK_READ D I J
+DB_LOCK_READ_UNCOMMITTED * I *
+DB_LOCK_RECORD * I *
+DB_LOCK_SET_TIMEOUT * I *
+DB_LOCK_SWITCH * I *
+DB_LOCK_TIMEOUT D I J
+DB_LOCK_TRADE * I *
+DB_LOCK_UPGRADE * I *
+DB_LOCK_UPGRADE_WRITE * I *
+DB_LOCK_WAIT * I *
+DB_LOCK_WRITE D I J
+DB_LOCK_WWRITE * I *
+DB_LOCK_YOUNGEST D I J
+DB_LOGFILEID_INVALID * I *
+DB_LOGMAGIC * I *
+DB_LOGOLDVER * I *
+DB_LOGVERSION * I *
+DB_LOG_AUTOREMOVE D I J
+DB_LOG_BUFFER_FULL D I *
+DB_LOG_CHKPNT * I *
+DB_LOG_COMMIT * I *
+DB_LOG_DISK * I *
+DB_LOG_INMEMORY D I J
+DB_LOG_LOCKED * I *
+DB_LOG_NOCOPY * I *
+DB_LOG_NOT_DURABLE * I *
+DB_LOG_SILENT_ERR * I *
+DB_LOG_WRNOSYNC * I *
+DB_LSTAT_ABORTED * I *
+DB_LSTAT_EXPIRED * I *
+DB_LSTAT_FREE * I *
+DB_LSTAT_HELD * I *
+DB_LSTAT_PENDING * I *
+DB_LSTAT_WAITING * I *
+DB_MAX_PAGES * I *
+DB_MAX_RECORDS * I *
+DB_MPOOL_CREATE D I *
+DB_MPOOL_DIRTY D I *
+DB_MPOOL_DISCARD D I *
+DB_MPOOL_EDIT D I *
+DB_MPOOL_FREE * I *
+DB_MPOOL_LAST D I *
+DB_MPOOL_NEW D I *
+DB_MPOOL_NOFILE D I J
+DB_MPOOL_UNLINK D I J
+DB_MULTIPLE D I J
+DB_MULTIPLE_INIT D I *
+DB_MULTIPLE_KEY D I J
+DB_MULTIPLE_KEY_NEXT D I *
+DB_MULTIPLE_NEXT D I *
+DB_MULTIPLE_RECNO_NEXT D I *
+DB_MULTIVERSION D I J
+DB_MUTEX_ALLOCATED * I *
+DB_MUTEX_LOCKED * I *
+DB_MUTEX_LOGICAL_LOCK * I *
+DB_MUTEX_PROCESS_ONLY D I *
+DB_MUTEX_SELF_BLOCK D I *
+DB_NEEDSPLIT * I *
+DB_NEXT D I J
+DB_NEXT_DUP D I J
+DB_NEXT_NODUP D I J
+DB_NODUPDATA D I J
+DB_NOLOCKING D I J
+DB_NOMMAP D I J
+DB_NOORDERCHK D I J
+DB_NOOVERWRITE D I J
+DB_NOPANIC D I J
+DB_NOSERVER D I *
+DB_NOSERVER_HOME D I J
+DB_NOSERVER_ID D I J
+DB_NOSYNC D I J
+DB_NOTFOUND D I J
+DB_NO_AUTO_COMMIT * I *
+DB_ODDFILESIZE D I *
+DB_OK_BTREE * I *
+DB_OK_HASH * I *
+DB_OK_QUEUE * I *
+DB_OK_RECNO * I *
+DB_OLD_VERSION D I *
+DB_OPFLAGS_MASK * I *
+DB_ORDERCHKONLY D I J
+DB_OVERWRITE D I J
+DB_PAGE_LOCK * I *
+DB_PAGE_NOTFOUND D I *
+DB_PANIC_ENVIRONMENT D I J
+DB_POSITION D I J
+DB_PREV D I J
+DB_PREV_NODUP D I J
+DB_PRINTABLE D I J
+DB_PRIORITY_DEFAULT D I J
+DB_PRIORITY_HIGH D I J
+DB_PRIORITY_LOW D I J
+DB_PRIORITY_VERY_HIGH D I J
+DB_PRIORITY_VERY_LOW D I J
+DB_PRIVATE D I J
+DB_PR_PAGE * I *
+DB_PR_RECOVERYTEST * I *
+DB_QAMMAGIC * I *
+DB_QAMOLDVER * I *
+DB_QAMVERSION * I *
+DB_QUEUE D I J
+DB_RDONLY D I J
+DB_RDWRMASTER * I *
+DB_READ_COMMITTED D I J
+DB_READ_UNCOMMITTED D I J
+DB_RECNO D I J
+DB_RECNUM D I J
+DB_RECORD_LOCK * I *
+DB_RECOVER D I J
+DB_RECOVER_FATAL D I J
+DB_REDO * I *
+DB_REGION_INIT D I J
+DB_REGION_MAGIC * I *
+DB_REGISTER D I J
+DB_RENAMEMAGIC * I *
+DB_RENUMBER D I J
+DB_REPMGR_ACKS_ALL D I J
+DB_REPMGR_ACKS_ALL_PEERS D I J
+DB_REPMGR_ACKS_NONE D I J
+DB_REPMGR_ACKS_ONE D I J
+DB_REPMGR_ACKS_ONE_PEER D I J
+DB_REPMGR_ACKS_QUORUM D I J
+DB_REPMGR_CONNECTED D I J
+DB_REPMGR_DISCONNECTED D I *
+DB_REPMGR_PEER D I J
+DB_REP_ACK_TIMEOUT D I J
+DB_REP_ANYWHERE D I J
+DB_REP_BULKOVF * I *
+DB_REP_CLIENT D I J
+DB_REP_CONF_BULK D I J
+DB_REP_CONF_DELAYCLIENT D I J
+DB_REP_CONF_NOAUTOINIT D I J
+DB_REP_CONF_NOWAIT D I J
+DB_REP_CONNECTION_RETRY D I J
+DB_REP_DUPMASTER D I N
+DB_REP_EGENCHG * I *
+DB_REP_ELECTION D I J
+DB_REP_ELECTION_RETRY D I J
+DB_REP_ELECTION_TIMEOUT D I J
+DB_REP_FULL_ELECTION D I J
+DB_REP_HANDLE_DEAD D I N
+DB_REP_HOLDELECTION D I N
+DB_REP_IGNORE D I J
+DB_REP_ISPERM D I J
+DB_REP_JOIN_FAILURE D I N
+DB_REP_LOCKOUT D I N
+DB_REP_LOGREADY * I *
+DB_REP_MASTER D I J
+DB_REP_NEWMASTER D I J
+DB_REP_NEWSITE D I J
+DB_REP_NOBUFFER D I J
+DB_REP_NOTPERM D I J
+DB_REP_PAGEDONE * I *
+DB_REP_PERMANENT D I J
+DB_REP_REREQUEST D I J
+DB_REP_UNAVAIL D I N
+DB_REVSPLITOFF D I J
+DB_RMW D I J
+DB_RPCCLIENT D I J
+DB_RUNRECOVERY D I N
+DB_SALVAGE D I J
+DB_SECONDARY_BAD D I *
+DB_SEQUENCE_OLDVER * I *
+DB_SEQUENCE_VERSION * I *
+DB_SEQ_DEC D I J
+DB_SEQ_INC D I J
+DB_SEQ_RANGE_SET * I *
+DB_SEQ_WRAP D I J
+DB_SEQ_WRAPPED * I *
+DB_SET D I J
+DB_SET_LOCK_TIMEOUT D I J
+DB_SET_RANGE D I J
+DB_SET_RECNO D I J
+DB_SET_TXN_LSNP * I *
+DB_SET_TXN_NOW * I *
+DB_SET_TXN_TIMEOUT D I J
+DB_SNAPSHOT D I J
+DB_STAT_ALL D I *
+DB_STAT_CLEAR D I J
+DB_STAT_LOCK_CONF D I *
+DB_STAT_LOCK_LOCKERS D I *
+DB_STAT_LOCK_OBJECTS D I *
+DB_STAT_LOCK_PARAMS D I *
+DB_STAT_MEMP_HASH D I *
+DB_STAT_NOERROR * I *
+DB_STAT_SUBSYSTEM D I *
+DB_SURPRISE_KID * I *
+DB_SWAPBYTES * I *
+DB_SYSTEM_MEM D I J
+DB_TEST_ELECTINIT * I *
+DB_TEST_ELECTVOTE1 * I *
+DB_TEST_POSTDESTROY * I *
+DB_TEST_POSTLOG * I *
+DB_TEST_POSTLOGMETA * I *
+DB_TEST_POSTOPEN * I *
+DB_TEST_POSTSYNC * I *
+DB_TEST_PREDESTROY * I *
+DB_TEST_PREOPEN * I *
+DB_TEST_RECYCLE * I *
+DB_TEST_SUBDB_LOCKS * I *
+DB_THREAD D I J
+DB_THREADID_STRLEN D I *
+DB_TIMEOUT * I *
+DB_TIME_NOTGRANTED D I J
+DB_TRUNCATE D I J
+DB_TXNVERSION * I *
+DB_TXN_ABORT D I J
+DB_TXN_APPLY D I J
+DB_TXN_BACKWARD_ALLOC * I *
+DB_TXN_BACKWARD_ROLL D I J
+DB_TXN_CKP * I *
+DB_TXN_FORWARD_ROLL D I J
+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 *
+DB_TXN_PRINT D I J
+DB_TXN_SNAPSHOT D I J
+DB_TXN_SYNC D I J
+DB_TXN_WRITE_NOSYNC D I J
+DB_UNDO * I *
+DB_UNKNOWN D I J
+DB_UNREF * I *
+DB_UPDATE_SECONDARY * I *
+DB_UPGRADE D I J
+DB_USERCOPY_GETDATA * I N
+DB_USERCOPY_SETDATA * I N
+DB_USE_ENVIRON D I J
+DB_USE_ENVIRON_ROOT D I J
+DB_VERB_DEADLOCK D I J
+DB_VERB_RECOVERY D I J
+DB_VERB_REGISTER D I J
+DB_VERB_REPLICATION D I J
+DB_VERB_WAITSFOR D I J
+DB_VERIFY D I J
+DB_VERIFY_BAD D I N
+DB_VERIFY_FATAL * I *
+DB_VERSION_MAJOR * I J
+DB_VERSION_MINOR * I J
+DB_VERSION_MISMATCH D I N
+DB_VERSION_PATCH * I J
+DB_VERSION_STRING * I N
+DB_WRITECURSOR D I J
+DB_WRITELOCK * I *
+DB_WRITEOPEN * 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 02686b742..0891a713b 100644..100755
--- a/db/dist/s_all
+++ b/db/dist/s_all
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_all,v 1.11 2002/10/30 15:26:36 bostic Exp $
+# $Id: s_all,v 12.2 2005/12/01 03:24:24 bostic Exp $
sh s_perm # permissions.
sh s_symlink # symbolic links.
@@ -13,8 +13,8 @@ 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_windows # Windows include files.
+sh s_windows_dsp # Windows build environment.
sh s_vxworks # VxWorks include files.
sh s_java # Java support.
sh s_test # Test suite support.
diff --git a/db/dist/s_config b/db/dist/s_config
index 604a1d089..194df83a5 100755
--- a/db/dist/s_config
+++ b/db/dist/s_config
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_config,v 1.13 2003/07/02 15:27:44 bostic Exp $
+# $Id: s_config,v 12.1 2005/08/16 05:19:18 mjc Exp $
#
# Build the autoconfiguration files.
@@ -20,14 +20,13 @@ rm -f configure
autoconf
# 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
+sed -e "s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" \
+ -e "s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" \
+ -e "s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" \
+ -e "s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" \
+ -e "s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" \
+ -e "s/__EDIT_DB_VERSION__/$DB_VERSION/g" configure > configure.version
+mv configure.version configure
rm -rf autom4te.cache
chmod 555 configure
diff --git a/db/dist/s_crypto b/db/dist/s_crypto
index 05a93043a..8dc736207 100644..100755
--- a/db/dist/s_crypto
+++ b/db/dist/s_crypto
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_crypto,v 11.8 2003/11/24 22:41:26 bostic Exp $
+# $Id: s_crypto,v 12.1 2005/12/01 03:24:24 bostic Exp $
# Remove crypto from the DB source tree.
@@ -43,8 +43,8 @@ chmod 664 $f
echo 'w' &&
echo 'q') | ed $f
- sh ./s_win32
- sh ./s_win32_dsp
+ sh ./s_windows
+ sh ./s_windows_dsp
# VxWorks
f=vx_config.in
diff --git a/db/dist/s_include b/db/dist/s_include
index ab058d86d..57a048ed8 100755
--- a/db/dist/s_include
+++ b/db/dist/s_include
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_include,v 1.22 2004/04/19 18:27:17 mjc Exp $
+# $Id: s_include,v 12.3 2006/04/27 13:40:36 mjc Exp $
#
# Build the automatically generated function prototype files.
@@ -72,11 +72,12 @@ 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 sequence tcl txn xa; do
+ lock log mp mutex os qam rep repmgr rpc_client rpc_server \
+ sequence tcl txn xa; do
head "_${i}_ext_h_" > $i_pfile
if [ $i = os ] ; then
- f=`ls ../$i/*.c ../os_win32/*.c`
+ f=`ls ../$i/*.c ../os_windows/*.c`
elif [ $i = rpc_server ] ; then
f=`ls ../$i/c/*.c`
elif [ $i = crypto ] ; then
@@ -112,9 +113,9 @@ done
# 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
+(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
diff --git a/db/dist/s_java b/db/dist/s_java
index ae715ccd6..57b88e8e5 100755
--- a/db/dist/s_java
+++ b/db/dist/s_java
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_java,v 11.8 2004/04/06 20:43:35 mjc Exp $
+# $Id: s_java,v 12.0 2004/11/17 03:43:35 bostic Exp $
#
# Build the Java files.
diff --git a/db/dist/s_java_const b/db/dist/s_java_const
index 644b32324..8374b1f61 100755
--- a/db/dist/s_java_const
+++ b/db/dist/s_java_const
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_java_const,v 1.27 2004/07/30 14:51:37 mjc Exp $
+# $Id: s_java_const,v 12.0 2004/11/17 03:43:35 bostic Exp $
#
# Build the Java files.
diff --git a/db/dist/s_java_stat b/db/dist/s_java_stat
index 4eb2ab147..67fa917f8 100755
--- a/db/dist/s_java_stat
+++ b/db/dist/s_java_stat
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_java_stat,v 1.33 2004/09/28 19:30:36 mjc Exp $
+# $Id: s_java_stat,v 12.14 2006/08/24 14:45:35 bostic Exp $
#
# Build the Java files.
@@ -8,11 +8,10 @@ msgjava="/*-
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/"
-
s=/tmp/__java.sed
t=/tmp/__java
c=/tmp/__javajnic
@@ -28,8 +27,9 @@ jclass()
/__db_$1/d
/;/!d
/^}/d
- /char[ ]*\*/{
- s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/\\
+ /db_threadid_t/d
+ /char[ ]*/{
+ s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/\\
$2 private String \1;\\
$2 public String get_\1() {\\
$2 return \1;\\
@@ -84,12 +84,15 @@ $2 }/p
}
EOF
sed -n -f $s < ../dbinc/db.in |
- perl -w -p -e 's/get_(st|bt|hash|qs)_/get_/;' \
+ perl -w -p -e 's/get_(st|bt|hash|qs|compact)_/get_/;' \
-e 'if (m/get.*\(/) {' \
- -e 's/_n([b-df-hj-np-tv-z])/_num_$1/;' \
+ -e 's/_n([b-df-hj-np-tv-z]|upgrade)/_num_$1/;' \
-e 's/_(min|max)([a-z])/_$1_$2/;' \
- -e 's/pg(.)/_pages_$1/;' \
- -e 's/(count|flag|free|id\(|page|size|timeout)/_$1/g;' \
+ -e 's/_mvcc/_multiversion/;' \
+ -e 's/_cnt/_count_/;' \
+ -e 's/_pg/_pages_/;' \
+ -e 's/(count|flag|free|page|percent|size|timeout)/_$1/g;' \
+ -e 's/([^p])(id\()/$1_$2/g;' \
-e 's/__*/_/g;' \
-e 's/_(.)/\U$1/g' \
-e '};' \
@@ -109,8 +112,9 @@ jclass_jni()
/__db_$1/d
/;/!d
/^}/d
- /char[ ]*\*/{
- s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ JAVADB_STAT_STRING(jnienv, jobj, $1_\1_fid, statp, \1);/p
+ /db_threadid_t/d
+ /char[ ]*/{
+ s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/ JAVADB_STAT_STRING(jnienv, jobj, $1_\1_fid, statp, \1);/p
d
}
/time_t/{
@@ -136,7 +140,7 @@ jclass_jni()
s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_INT(jnienv, jobj, $1_\1_fid, statp, \1);/p
}
EOF
- echo "static int $fill(JNIEnv *jnienv, " >> $c
+ echo "static int $fill(JNIEnv *jnienv," >> $c
echo " jobject jobj, struct __db_$1 *statp) {" >> $c
sed -n -f $s < ../dbinc/db.in >> $c
echo ' return (0);' >> $c
@@ -150,8 +154,9 @@ jni_fieldid_decls()
/__db_$1/d
/;/!d
/^}/d
- /char[ ]*\*/{
- s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
+ /db_threadid_t/d
+ /char[ ]*/{
+ s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/static jfieldID $1_\1_fid;/p
d
}
/time_t/{
@@ -187,8 +192,9 @@ jni_fieldids()
/__db_$1/d
/;/!d
/^}/d
- /char[ ]*\*/{
- s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"Ljava\/lang\/String;\" },/p
+ /db_threadid_t/d
+ /char[ ]*/{
+ s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"Ljava\/lang\/String;\" },/p
d
}
/time_t/{
@@ -225,8 +231,9 @@ jclass_toString()
/__db_$1/d
/;/!d
/^}/d
- /char[ ]*\*/{
- s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$3 + "\\\\n$3 \1=" + \1/p
+ /db_threadid_t/d
+ /char[ ]*/{
+ s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/$3 + "\\\\n$3 \1=" + \1/p
d
}
/DB_TXN_ACTIVE[ ]*\*/{
@@ -260,7 +267,7 @@ stat_class()
echo
echo "public class $j_class$extends {"
echo " // no public constructor"
- echo " protected $j_class() {}"
+ echo " /* package */ $j_class() {}"
jclass $1
jclass_toString $1 $2
echo '}') > $t
@@ -275,11 +282,42 @@ echo "$msgjava" > $c
> $u2
stat_class bt_stat BtreeStats " extends DatabaseStats"
+
+# Build CompactStats.java - not purely a statistics class, but close enough to
+# share this code.
+(echo "$msgjava"
+ echo
+ echo 'package com.sleepycat.db;'
+ echo
+ echo 'import com.sleepycat.db.internal.DbUtil;'
+ echo
+ echo "public class CompactStats"
+ echo '{'
+ echo " // no public constructor"
+ echo " /* package */ CompactStats() {}"
+ echo
+ echo " /* package */"
+ echo " CompactStats(int fillpercent, int timeout, int pages) {"
+ echo " this.compact_fillpercent = fillpercent;"
+ echo " this.compact_timeout = timeout;"
+ echo " this.compact_pages = pages;"
+ echo " }"
+ jclass compact
+ jclass_toString compact CompactStats
+ echo '}'
+ echo '// end of TransactionStats.java') |
+ psed 's,public int get\(FillPercent\|Pages(\|Timeout\|Truncate\),/* package */ int get\1,g'> $t
+jclass_jni compact __dbj_fill_compact
+f=../java/src/com/sleepycat/db/CompactStats.java
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
stat_class h_stat HashStats " extends DatabaseStats"
stat_class lock_stat LockStats
stat_class log_stat LogStats
stat_class mpool_fstat CacheFileStats
stat_class mpool_stat CacheStats
+stat_class mutex_stat MutexStats
stat_class qam_stat QueueStats " extends DatabaseStats"
stat_class rep_stat ReplicationStats
stat_class seq_stat SequenceStats
@@ -294,11 +332,11 @@ stat_class seq_stat SequenceStats
echo "public class TransactionStats"
echo '{'
echo " // no public constructor"
- echo " protected TransactionStats() {}"
+ echo " /* package */ TransactionStats() {}"
echo
echo -n " public static class Active {"
echo " // no public constructor"
- echo " protected Active() {}"
+ echo " /* package */ Active() {}"
jclass txn_active " "
jclass_toString txn_active Active " "
echo ' };'
diff --git a/db/dist/s_java_swig b/db/dist/s_java_swig
index c1e67e316..6a12b67d0 100755
--- a/db/dist/s_java_swig
+++ b/db/dist/s_java_swig
@@ -1,8 +1,12 @@
#!/bin/sh -
-# $Id: s_java_swig,v 11.11 2004/09/23 17:31:53 mjc Exp $
+# $Id: s_java_swig,v 12.6 2006/09/08 20:28:44 bostic Exp $
#
# Run SWIG to generate the Java APIs
+t=/tmp/__db_a
+trap 'rm -f $t ; exit 0' 0
+trap 'rm -f $t ; exit 1' 1 2 3 13 15
+
SWIG=swig
SWIG_DIR=../libdb_java
SWIG_FILE=$SWIG_DIR/db.i
@@ -21,7 +25,7 @@ for api in java ; do
swig_args=""
case $api in
java)
- swig_args="-nodefault -package $PACKAGE $args"
+ swig_args="-nodefaultctor -nodefaultdtor -package $PACKAGE $args"
;;
esac
@@ -53,3 +57,17 @@ for f in *.java ; do
perl -p $SWIG_DIR/java-post.pl < $f > $JAVA_SRCDIR/$f || exit $?
rm -f $f
done
+
+# db_config.h must be the first #include, move it to the top of the file.
+(
+ echo '#include "db_config.h"'
+ sed '/#include "db_config.h"/d' < db_java_wrap.c
+) > $t && cp $t db_java_wrap.c
+
+# The following might become redundant with newer swig versions.
+# builds usually already define _CRT_SECURE_NO_DEPRECATE
+(
+ sed -e '/# define _CRT_SECURE_NO_DEPRECATE/i\
+# undef _CRT_SECURE_NO_DEPRECATE' < db_java_wrap.c
+) > $t && cp $t db_java_wrap.c
+
diff --git a/db/dist/s_je2db b/db/dist/s_je2db
index aaaa42cf1..a5c64197e 100644
--- a/db/dist/s_je2db
+++ b/db/dist/s_je2db
@@ -52,7 +52,7 @@ E1='s/com\.sleepycat\.je/com.sleepycat.db/g'
E2='/import com\.sleepycat\.db\.ForeignKeyNullifier/d'
E3='/implements/s/, ForeignKeyNullifier//'
E4='/<!-- begin JE only -->/,/<!-- end JE only -->/d'
-EXCLUDETESTS="\(\(ForeignKeyTest\)\|\(TupleSerialFactoryTest\)\)"
+EXCLUDETESTS="\(\(ForeignKeyTest\)\|\(TupleSerialFactoryTest\)\\|\(XACollectionTest\)\)"
cd "$JESRC"
for f in `find . -name '*.java' | grep $DIRMATCH` ; do
diff --git a/db/dist/s_perm b/db/dist/s_perm
index 8c3a0f746..834645b98 100755
--- a/db/dist/s_perm
+++ b/db/dist/s_perm
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_perm,v 1.31 2004/10/05 18:56:58 bostic Exp $
+# $Id: s_perm,v 12.2 2005/12/01 03:24:24 bostic Exp $
d=..
echo 'Updating Berkeley DB source tree permissions...'
@@ -15,7 +15,7 @@ run()
fi
}
-run build_win32/include.tcl 664
+run build_windows/include.tcl 664
run dist/config.guess 555
run dist/config.sub 555
run dist/configure 555
@@ -36,8 +36,8 @@ 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/s_windows 555
+run dist/s_windows_dsp 555
run dist/vx_buildcd 555
run mod_db4/configure 555
diff --git a/db/dist/s_readme b/db/dist/s_readme
index f2ed07044..afa8c5b60 100755
--- a/db/dist/s_readme
+++ b/db/dist/s_readme
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_readme,v 1.7 2003/07/02 15:27:44 bostic Exp $
+# $Id: s_readme,v 12.1 2006/08/24 14:45:35 bostic Exp $
#
# Build the README.
@@ -15,7 +15,7 @@ trap 'rm -f $t; exit 0' 0 1 2 3 13 15
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
+This is version $DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH of Berkeley DB from Oracle Corporation. To view
the release and installation documentation, load the distribution file
docs/index.html into your web browser.
END_OF_README
diff --git a/db/dist/s_recover b/db/dist/s_recover
index b30a08554..5bc67e7e8 100755
--- a/db/dist/s_recover
+++ b/db/dist/s_recover
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_recover,v 1.17 2004/06/17 17:35:19 bostic Exp $
+# $Id: s_recover,v 12.1 2006/05/24 16:24:24 sue Exp $
#
# Build the automatically generated logging/recovery files.
@@ -23,11 +23,11 @@ for i in $DIR; do
# so it's okay to just take the first.
grep '^PREFIX' $f | sed q
egrep '^BEGIN[ ]|^IGNORED[ ]|^DEPRECATED[ ]' $f |
- awk '{print $1 "\t" $2 "\t" $3}'
+ awk '{print $1 "\t" $2 "\t" $3 "\t" $4}'
done
done > $loglist
grep -v '^PREFIX' $loglist |
- awk '{print $2 "\t" $3}' | sort -n -k 2 | uniq -d -f 1 > $tmp
+ awk '{print $2 "\t" $3 "\t" $4}' | sort -n -k 3 | uniq -d -f 1 > $tmp
[ -s $tmp ] && {
echo "DUPLICATE LOG VALUES:"
cat $tmp
diff --git a/db/dist/s_rpc b/db/dist/s_rpc
index 8dada0e3b..7da75819e 100644..100755
--- a/db/dist/s_rpc
+++ b/db/dist/s_rpc
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_rpc,v 11.20 2004/03/11 20:11:17 bostic Exp $
+# $Id: s_rpc,v 12.0 2004/11/17 03:43:35 bostic Exp $
#
# Build the automatically generated RPC files
diff --git a/db/dist/s_symlink b/db/dist/s_symlink
index 533eb6b44..9625e0134 100755
--- a/db/dist/s_symlink
+++ b/db/dist/s_symlink
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_symlink,v 1.32 2004/04/01 15:10:53 bostic Exp $
+# $Id: s_symlink,v 12.5 2006/09/13 17:51:34 bostic Exp $
echo 'Creating Berkeley DB source tree symbolic links...'
@@ -22,6 +22,7 @@ build db_checkpoint/tags ../dist/tags
build db_deadlock/tags ../dist/tags
build db_dump/tags ../dist/tags
build db_dump185/tags ../dist/tags
+build db_hotbackup/tags ../dist/tags
build db_load/tags ../dist/tags
build db_printlog/tags ../dist/tags
build db_recover/tags ../dist/tags
@@ -45,10 +46,12 @@ build log/tags ../dist/tags
build mp/tags ../dist/tags
build mutex/tags ../dist/tags
build os/tags ../dist/tags
+build os_brew/tags ../dist/tags
build os_vxworks/tags ../dist/tags
-build os_win32/tags ../dist/tags
+build os_windows/tags ../dist/tags
build qam/tags ../dist/tags
build rep/tags ../dist/tags
+build repmgr/tags ../dist/tags
build rpc_client/tags ../dist/tags
build rpc_server/tags ../dist/tags
build sequence/tags ../dist/tags
diff --git a/db/dist/s_tags b/db/dist/s_tags
index d1c21e5b2..ff59d826e 100755
--- a/db/dist/s_tags
+++ b/db/dist/s_tags
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_tags,v 1.18 2004/04/01 15:11:14 bostic Exp $
+# $Id: s_tags,v 12.2 2006/04/23 15:58:33 bostic Exp $
#
# Build tags files.
@@ -27,6 +27,7 @@ files=`echo ../dbinc/*.h \
../os/*.[ch] \
../qam/*.[ch] \
../rep/*.[ch] \
+ ../repmgr/*.[ch] \
../rpc_client/*.[ch] \
../rpc_server/c/*.[ch] \
../sequence/*.[ch] \
@@ -55,7 +56,9 @@ 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
+for i in test_perf test_rep test_server; do
+ f=../$i/tags
+ echo "Building $f"
+ (cd ../$i && ctags $flags *.[ch] 2>/dev/null)
+ chmod 444 $f
+done
diff --git a/db/dist/s_test b/db/dist/s_test
index df0648d56..543d95b9f 100755
--- a/db/dist/s_test
+++ b/db/dist/s_test
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_test,v 1.29 2004/05/13 18:51:43 mjc Exp $
+# $Id: s_test,v 12.5 2006/07/07 19:05:59 bostic Exp $
#
# Build the Tcl test files.
@@ -30,11 +30,19 @@ trap 'rm -f $t; exit 0' 0 1 2 3 13 15
echo "global dict" && \
echo "global util_path" && \
echo "" && \
+ echo "global is_freebsd_test" && \
echo "global is_hp_test" && \
+ echo "global is_linux_test" && \
echo "global is_qnx_test" && \
+ echo "global is_sunos_test" && \
echo "global is_windows_test" && \
+ echo "global is_windows9x_test" && \
echo "" && \
- echo "set KILL \"@db_cv_path_kill@\"") > $t
+ echo "global valid_methods" && \
+ echo "global checking_valid_methods" && \
+ echo "global test_recopts" && \
+ echo "" && \
+ echo "set KILL \"@KILL@\"") > $t
f=../test/include.tcl
cmp $t $f > /dev/null 2>&1 ||
@@ -55,13 +63,21 @@ cmp $t $f > /dev/null 2>&1 ||
echo "global dict" && \
echo "global util_path" && \
echo "" && \
+ echo "global is_freebsd_test" && \
echo "global is_hp_test" && \
+ echo "global is_linux_test" && \
echo "global is_qnx_test" && \
+ echo "global is_sunos_test" && \
echo "global is_windows_test" && \
+ echo "global is_windows9x_test" && \
+ echo "" && \
+ echo "global valid_methods" && \
+ echo "global checking_valid_methods" && \
+ echo "global test_recopts" && \
echo "" && \
echo "set KILL ./dbkill.exe") > $t
-f=../build_win32/include.tcl
+f=../build_windows/include.tcl
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_vxworks b/db/dist/s_vxworks
index fbff44ab0..ff974e676 100644..100755
--- a/db/dist/s_vxworks
+++ b/db/dist/s_vxworks
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_vxworks,v 1.52 2004/10/15 18:28:21 bostic Exp $
+# $Id: s_vxworks,v 12.13 2006/09/13 16:57:49 bostic Exp $
#
# Build the VxWorks files.
@@ -29,15 +29,17 @@ i\\
#endif
}
/@inttypes_h_decl@/d
-/@stdint_h_decl@/d
/@stddef_h_decl@/d
+/@stdint_h_decl@/d
+/@unistd_h_decl@/d
+/@thread_h_decl@/d
s/@u_int8_decl@/typedef unsigned char u_int8_t;/
/@int16_decl@/d
s/@u_int16_decl@/typedef unsigned short u_int16_t;/
/@int32_decl@/d
s/@u_int32_decl@/typedef unsigned int u_int32_t;/
s/@int64_decl@//
-s/@u_int64_decl@//
+s/@u_int64_decl@/typedef unsigned long long u_int64_t;/
/@u_char_decl@/d
/@u_short_decl@/d
/@u_int_decl@/d
@@ -46,6 +48,8 @@ s/@u_int64_decl@//
s/@uintmax_t_decl@/typedef unsigned long uintmax_t;/
s/@uintptr_t_decl@/typedef unsigned long uintptr_t;/
s/@db_seq_decl@/typedef int db_seq_t;/
+/@pid_t_decl@/d
+s/@db_threadid_t_decl@/typedef uintmax_t db_threadid_t;/
s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/
s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/
s/@DB_VERSION_PATCH@/$DB_VERSION_PATCH/
@@ -54,11 +58,14 @@ s/@DB_VERSION_UNIQUE_NAME@//
s/@DB_CONST@//
s/@DB_PROTO1@/#undef __P/
s/@DB_PROTO2@/#define __P(protos) protos/
+/@platform_header@/d
+/@platform_footer@/d
ENDOFSEDTEXT
(echo "$msgc" &&
sed -f $s ../dbinc/db.in &&
cat ../dbinc_auto/ext_prot.in) > $t
-`egrep '@.*@' $t` && {
+test `egrep '@.*@' $t` && {
+ egrep '@.*@' $t
echo 'Unexpanded autoconf variables found in VxWorks db.h.'
exit 1
}
@@ -67,11 +74,14 @@ cmp $t $f > /dev/null 2>&1 ||
(echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
cat <<ENDOFSEDTEXT > $s
+s/@INT64_FMT@/#define INT64_FMT "%lld"/
+s/@UINT64_FMT@/#define UINT64_FMT "%llu"/
s/@PATH_SEPARATOR@/\/\\\\\\\\/
s/@db_int_def@//
ENDOFSEDTEXT
(echo "$msgc" && sed -f $s ../dbinc/db_int.in) > $t
-`egrep '@.*@' $t` && {
+test `egrep '@.*@' $t` && {
+ egrep '@.*@' $t
echo 'Unexpanded autoconf variables found in VxWorks db_int.h.'
exit 1
}
@@ -79,6 +89,21 @@ f=../build_vxworks/db_int.h
cmp $t $f > /dev/null 2>&1 ||
(echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+# Build the VxWorks db_config.h file.
+# We don't fail, but we complain if the vx_config.in file isn't up-to-date.
+check_config()
+{
+ egrep '^#undef' config.hin |
+ awk '{print $2}' | sed '/^SIZEOF_/d' | sort > $s
+ (egrep '#undef' $1 | awk '{print $3}'
+ egrep '^#define' $1 | awk '{print $2}') | sort > $t
+ cmp $s $t || {
+ echo "config.hin and $1 differ"
+ echo "<<< config.hin >>> $1"
+ diff $s $t
+ }
+}
+check_config vx_config.in
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 ||
@@ -97,6 +122,10 @@ f=../build_vxworks/db_config_small.h
cmp $t $f > /dev/null 2>&1 ||
(echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+f=../build_vxworks/clib_port.h
+cmp clib_port.h $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp clib_port.h $f && chmod 444 $f)
+
# Build a sed script that will change a "standard" DB utility into
# VxWorks-compatible code.
transform()
@@ -163,8 +192,8 @@ ENDOFSEDTEXT
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"
+PROGRAM_LIST="db_archive db_checkpoint db_deadlock db_dump db_hotbackup \
+ 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
@@ -184,21 +213,80 @@ for i in $PROGRAM_LIST; do
(echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
done
+# Output the build lines for a single utility.
+# $1 == application name
+util_one()
+{
+ egrep "app=$1" srcfiles.in |
+ awk '{print $1}' |
+ sed 's/ex_access/dbdemo/' > $u
+
+ # Build a list of source files.
+ for i in `cat $u`; do
+ if test "$1" = "ex_access" -o "$1" = `basename $i .c`; then
+ i=`basename $i`
+ else
+ i="\$(PRJ_DIR)/../../$i"
+ fi
+ o="<BEGIN> FILE_$i"
+
+ echo "${o}_dependDone"
+ echo "FALSE"
+ echo "<END>"
+ echo
+ echo "${o}_dependencies"
+ 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"
+ for i in `cat $u`; do
+ if test "$1" = "ex_access" -o "$1" = `basename $i .c`; then
+ i="`basename $i`"
+ else
+ i="../../$i"
+ fi
+ echo "\$(PRJ_DIR)/$i"
+ done |
+ sed -e '${' \
+ -e 'p' \
+ -e 'd' \
+ -e '}' \
+ -e 's/$/ \\/'
+ echo "<END>"
+ echo
+ echo "<BEGIN> userComments"
+ if test "$1" = "ex_access"; then
+ echo "dbdemo"
+ else
+ echo "$1"
+ fi
+ echo "<END>"
+}
+
# 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
+ (sed -e "s/__DB_APPLICATION_NAME__/$target/g" < vx_2.0/wpj.in
+ util_one $i) > $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
+
+ (sed -e "s/__DB_APPLICATION_NAME__/$target/g" < vx_2.2/wpj.in
+ util_one $i) > $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)
@@ -291,4 +379,3 @@ for v in 0 2 ; do
cmp $u $f > /dev/null 2>&1 ||
(echo "Building $f" && rm -f $f && cp $u $f && chmod 444 $f)
done
-
diff --git a/db/dist/s_windows b/db/dist/s_windows
new file mode 100755
index 000000000..b5f46eabf
--- /dev/null
+++ b/db/dist/s_windows
@@ -0,0 +1,197 @@
+#!/bin/sh -
+# $Id: s_windows,v 12.20 2006/07/13 06:19:45 mjc Exp $
+#
+# Build Windows include files.
+
+msgc="/* DO NOT EDIT: automatically built by dist/s_windows. */"
+msgw="; DO NOT EDIT: automatically built by dist/s_windows."
+
+. RELEASE
+
+s=/tmp/__db_a$$
+t=/tmp/__db_b$$
+rm -f $s $t
+
+trap 'rm -f $s $t ; exit 1' 1 2 3 13 15
+
+# Build the Win32 automatically generated files.
+cat <<ENDOFSEDTEXT > $s
+/@inttypes_h_decl@/d
+/@stdint_h_decl@/d
+s/@stddef_h_decl@/#include <stddef.h>/
+/@unistd_h_decl@/d
+/@thread_h_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;/
+s/@int32_decl@/typedef int int32_t;/
+s/@u_int32_decl@/typedef unsigned int u_int32_t;/
+s/@int64_decl@/typedef __int64 int64_t;/
+s/@u_int64_decl@/typedef unsigned __int64 u_int64_t;/
+s/@db_seq_decl@/typedef int64_t db_seq_t;/
+s/@pid_t_decl@/typedef int pid_t;/
+s/@db_threadid_t_decl@/typedef u_int32_t db_threadid_t;/
+/@u_char_decl@/{
+ i\\
+#ifndef _WINSOCKAPI_
+ s/@u_char_decl@/typedef unsigned char u_char;/
+}
+s/@u_short_decl@/typedef unsigned short u_short;/
+s/@u_int_decl@/typedef unsigned int u_int;/
+/@u_long_decl@/{
+ s/@u_long_decl@/typedef unsigned long u_long;/
+ a\\
+#endif
+}
+/@ssize_t_decl@/{
+ i\\
+#ifdef _WIN64\\
+typedef int64_t ssize_t;\\
+#else\\
+typedef int32_t ssize_t;\\
+#endif
+ d
+}
+s/@uintmax_t_decl@/typedef u_int64_t uintmax_t;/
+/@uintptr_t_decl@/{
+ i\\
+#ifdef _WIN64\\
+typedef u_int64_t uintptr_t;\\
+#else\\
+typedef u_int32_t uintptr_t;\\
+#endif
+ d
+}
+/@platform_header@/{
+ i\\
+/*\\
+\ * Turn off inappropriate compiler warnings\\
+\ */\\
+#ifdef _MSC_VER\\
+/*\\
+\ * This warning is explicitly disabled in Visual C++ by default.\\
+\ * It is necessary to explicitly enable the /Wall flag to generate this\\
+\ * warning.\\
+\ * Since this is a shared include file it should compile without warnings\\
+\ * at the highest warning level, so third party applications can use\\
+\ * higher warning levels cleanly.\\
+\ *\\
+\ * 4820: 'bytes' bytes padding added after member 'member'\\
+\ * The type and order of elements caused the compiler to\\
+\ * add padding to the end of a struct.\\
+\ */\\
+#pragma warning(push)\\
+#pragma warning(disable: 4820)\\
+#endif /* _MSC_VER */
+ d
+}
+/@platform_footer@/{
+ i\\
+/* Restore default compiler warnings */\\
+#ifdef _MSC_VER\\
+#pragma warning(pop)\\
+#endif
+ d
+}
+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/ext_prot.in) > $t
+test `egrep '@.*@' $t` && {
+ egrep '@.*@' $t
+ echo 'Unexpanded autoconf variables found in Windows db.h.'
+ exit 1
+}
+f=../build_windows/db.h
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+cat <<ENDOFSEDTEXT > $s
+s/@cxx_have_stdheaders@/#define HAVE_CXX_STDHEADERS 1/
+ENDOFSEDTEXT
+(echo "$msgc" && sed -f $s ../dbinc/db_cxx.in) > $t
+test `egrep '@.*@' $t` && {
+ egrep '@.*@' $t
+ echo 'Unexpanded autoconf variables found in Windows db_cxx.h.'
+ exit 1
+}
+f=../build_windows/db_cxx.h
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+cat <<ENDOFSEDTEXT > $s
+s/@INT64_FMT@/#define INT64_FMT "%I64d"/
+s/@UINT64_FMT@/#define UINT64_FMT "%I64u"/
+s/@PATH_SEPARATOR@/\\\\\\\\\/:/
+s/@db_int_def@//
+ENDOFSEDTEXT
+(echo "$msgc" && sed -f $s ../dbinc/db_int.in) > $t
+test `egrep '@.*@' $t` && {
+ egrep '@.*@' $t
+ echo 'Unexpanded autoconf variables found in Windows db_int.h.'
+ exit 1
+}
+f=../build_windows/db_int.h
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+# Build the Windows db_config.h file.
+# We don't fail, but we complain if the win_config.in file isn't up-to-date.
+check_config()
+{
+ egrep '^#undef' config.hin |
+ awk '{print $2}' | sed '/^SIZEOF_/d' | sort > $s
+ (egrep '#undef' $1 | awk '{print $3}'
+ egrep '^#define' $1 | awk '{print $2}') | sed '/__STDC__/d' | sort > $t
+ cmp $s $t || {
+ echo "config.hin and $1 differ"
+ echo "<<< config.hin >>> $1"
+ diff $s $t
+ }
+}
+check_config win_config.in
+f=../build_windows/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_windows/libdb.rc
+cat <<ENDOFSEDTEXT > $s
+s/%MAJOR%/$DB_VERSION_MAJOR/
+s/%MINOR%/$DB_VERSION_MINOR/
+s/%PATCH%/$DB_VERSION_PATCH/
+ENDOFSEDTEXT
+sed -f $s ../build_windows/libdbrc.src > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+f=../build_windows/libdb.def
+(echo $msgw &&
+ 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_windows/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)
+
+f=../build_windows/clib_port.h
+cmp clib_port.h $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp clib_port.h $f && chmod 444 $f)
+
+rm -f $s $t
diff --git a/db/dist/s_windows_dsp b/db/dist/s_windows_dsp
new file mode 100755
index 000000000..c7a94fe64
--- /dev/null
+++ b/db/dist/s_windows_dsp
@@ -0,0 +1,144 @@
+#!/bin/sh -
+# $Id: s_windows_dsp,v 12.9 2006/07/13 06:19:45 mjc Exp $
+#
+# Build Windows/32 .dsp files.
+
+. RELEASE
+
+SRCFILES=srcfiles.in
+
+create_dsp()
+{
+ projname="$1" # name of the .dsp file
+ match="$2" # the string used to egrep the $sources file
+ sources="$3" # a modified version of $SRCFILES to facilitate matches
+ dsptemplate="$4" # overall template file for the .dsp
+ extra_cppflags="$5" # extra flags to send to compiler
+ release_libs="$6" # libraries to link against in Release builds
+ debug_libs="$7" # libraries to link against in Debug builds
+ lib_suffix="$8" # the library name is libdb@lib_suffix@@VERSION@
+
+ srctemplate="$BUILDDIR/srcfile_dsp.src" # template file for the src file fragments
+ dspoutput=$BUILDDIR/$projname.dsp
+
+
+ postbuild=$dspoutput.postbuild
+ if [ ! -f $postbuild ] ; then
+ postbuild=/dev/null
+ fi
+
+ rm -f $dspoutput.insert
+ for srcpath in `egrep "$match" $sources | sed -e 's/[ ].*//'`
+ do
+ # take the path name and break it up, converting / to \\.
+ # so many backslashes needed because of shell quoting and
+ # sed quoting -- we'll end up with two backslashes for every
+ # forward slash, but we need that when feeding that to the
+ # later sed command.
+ set - `echo $srcpath | sed -e 's;\(.*\)/;../\\1 ;' \
+ -e "s;$BUILDDIR;.;" \
+ -e 's;/;\\\\\\\\;g'`
+ srcdir="$1"
+ srcfile="$2"
+ sed -e "s/@srcdir@/$srcdir/g" \
+ -e "s/@srcfile@/$srcfile/g" \
+ < $srctemplate >> $dspoutput.insert
+ done
+ sed -e "/@SOURCE_FILES@/r$dspoutput.insert" \
+ -e "/@SOURCE_FILES@/d" \
+ -e "/@POST_BUILD@/r$postbuild" \
+ -e "/@POST_BUILD@/d" \
+ -e "s/@project_name@/$projname/g" \
+ -e "s/@bin_rel_dest@/Release/g" \
+ -e "s/@lib_rel_dest@/Release/g" \
+ -e "s/@bin_debug_dest@/Debug/g" \
+ -e "s/@lib_debug_dest@/Debug/g" \
+ -e "s,@extra_cppflags@,$extra_cppflags,g" \
+ -e "s,@release_libs@,$release_libs,g" \
+ -e "s,@debug_libs@,$debug_libs,g" \
+ -e "s,@lib_suffix@,$lib_suffix,g" \
+ -e "s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/g" \
+ -e "s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/g" \
+ < $dsptemplate > $dspoutput.new
+
+ # 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/swindsp$$a
+trap "rm -f $TMPA; exit 1" 1 2 3 15
+
+# 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 "/[ ]/!d" \
+ -e "s/$/ /" < $SRCFILES > $TMPA
+
+# get a list of all modules mentioned
+#
+MODULES="`sed -e 's/^[^ ]* //' < $TMPA \
+ | tr ' ' '\012' | sort | uniq`"
+
+for BUILDDIR in ../build_windows
+do
+ for module in $MODULES
+ do
+ case "$module" in
+ dynamic )
+ create_dsp db_dll " $module " $TMPA $BUILDDIR/dynamic_dsp.src \
+ '' 'ws2_32.lib' 'ws2_32.lib'
+ ;;
+ small )
+ create_dsp db_small " $module " $TMPA $BUILDDIR/static_dsp.src \
+ '/D "HAVE_SMALLBUILD"' '' '' _small
+ ;;
+ static )
+ create_dsp db_static " $module " $TMPA $BUILDDIR/static_dsp.src
+ ;;
+ java )
+ create_dsp db_java " $module " $TMPA $BUILDDIR/dynamic_dsp.src '' \
+ 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib' \
+ 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib' _java
+ ;;
+ tcl )
+ create_dsp db_tcl " $module " $TMPA $BUILDDIR/dynamic_dsp.src \
+ '/D "DB_TCL_SUPPORT"' \
+ 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib tcl84.lib' \
+ 'libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib tcl84g.lib' _tcl
+ ;;
+ testutil )
+ create_dsp db_test " $module " $TMPA $BUILDDIR/app_dsp.src \
+ '' '/out:"dbkill.exe"' '/out:"dbkill.exe"'
+ ;;
+ app=* )
+ appname=`echo $module | sed -e 's/^app=//'`
+ case "$appname" in
+ ex_rep_base )
+ libs='ws2_32.lib'
+ ;;
+ * )
+ libs=''
+ ;;
+ esac
+ create_dsp $appname " $module " $TMPA $BUILDDIR/app_dsp.src '' \
+ $libs $libs
+ ;;
+ vx|vxsmall )
+ ;;
+ * )
+ echo \
+ "s_windows_dsp: module name $module in $SRCFILES is unknown type"
+ ;;
+ esac
+ done
+done
+
+rm -f $TMPA
diff --git a/db/dist/s_winmsi b/db/dist/s_winmsi
new file mode 100644
index 000000000..77acd0e4b
--- /dev/null
+++ b/db/dist/s_winmsi
@@ -0,0 +1,134 @@
+#!/bin/bash -
+# $Id: s_winmsi,v 1.8 2005/12/01 03:04:20 bostic Exp $
+#
+# Note: The s_winmsi script in Berkeley DB core closely parallels the
+# s_winmsi script in Berkeley DB/XML. If you change one,
+# consider whether your changes apply to the other.
+# As of this writing, the two s_winmsi scripts 'diff' very closely, and
+# identical portions have been factored into functions in s_winmsi.fcn.
+#
+# Usage: s_winmsi [ options ]
+#
+# See the Usage() function in s_winmsi.fcn for a full list of options.
+# By default, this script expects a db-X.Y.Z.NC.zip file
+# to be in this directory, and uses it to build all binaries
+# needed for an Windows install, and finally builds the an
+# output db-X.Y.Z.NC.msi file that can be installed on
+# Windows XP and 2000.
+#
+# The major other inputs to this script are these files:
+#
+# features.in list of choosable features (like Java,PHP,...)
+# files.in what files are in each feature and where they belong
+# links.in a list of URLs that end up as part of the Start Menu
+# environment.in a list of environment vars that must be set
+#
+# This script does a number of operations, using the directory
+# './winmsi/stage' as a staging area:
+#
+# extracts the contents of the input ZIP file and uses those
+# files (minus docs/...) to build a Sources directory for
+# the Sources features.
+#
+# builds Berkeley DB using Visual Studio tools using a .BAT
+# script derived from winbuild.in .
+#
+# builds Perl and other APIs .
+#
+# uses {features,files,links,environment}.in to build some include
+# files in WiX XML format. These files are named
+# *.wixinc (e.g. directory.wixinc)
+#
+# run m4 on dbcorewix.in to create dbcore.wxs . dbcorewix.in
+# uses m4 macros to allow reasonable refactoring of repeated
+# UI code. Also, m4 is used to include the files created in
+# the previous step.
+#
+# Use the WiX compiler/linker on the .wxs files to create the .msi file.
+#
+################################################################
+
+# Define all needed shell functions
+. ./winmsi/s_winmsi.fcn
+
+ERRORLOG="$0".log
+SetupErrorLog
+
+# Do this before parsing options, we need the version number
+. ./RELEASE
+dbver=db-$DB_VERSION.NC
+
+# Set variables used by functions to customize this installer
+PRODUCT_NAME="Berkeley DB"
+PRODUCT_VERSION="$DB_VERSION"
+PRODUCT_STAGE=`pwd`/winmsi/stage
+PRODUCT_LICENSEDIR="${PRODUCT_STAGE}/$dbver"
+PRODUCT_SUB_BLDDIR="${PRODUCT_STAGE}/$dbver"
+PRODUCT_BLDDIR="${PRODUCT_STAGE}/$dbver"
+PRODUCT_SRCDIR="${PRODUCT_STAGE}/$dbver"
+PRODUCT_DBBUILDDIR="${PRODUCT_STAGE}/$dbver/build_unix"
+PRODUCT_SHARED_WINMSIDIR=`pwd`/winmsi
+PRODUCT_IMAGEDIR=$PRODUCT_SHARED_WINMSIDIR/images
+PRODUCT_ZIP_FILEFMT="db-X.Y.Z.NC.zip"
+PRODUCT_MSI_FILEFMT="db-X.Y.Z.NC.msi"
+
+PRODUCT_MAJOR=`echo "$PRODUCT_VERSION" | \
+ sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'`
+PRODUCT_MINOR=`echo "$PRODUCT_VERSION" | \
+ sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'`
+PRODUCT_PATCH=`echo "$PRODUCT_VERSION" | \
+ sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'`
+PRODUCT_MAJMIN="${PRODUCT_MAJOR}${PRODUCT_MINOR}"
+
+# Gather command line options, and use reasonable defaults
+SetupOptions \
+ -input "$dbver.zip" \
+ -output "$dbver.msi" \
+ "$@"
+
+if [ "$OPT_USEBUILD" != '' ]; then
+ PRODUCT_BLDDIR="${OPT_USEBUILD}"
+ PRODUCT_SUB_BLDDIR="${OPT_USEBUILD}"
+fi
+
+Progress "s_winmsi starting, errors to $ERRORLOG"
+
+# Fail fast for certain missing files
+
+RequireCygwin
+RequireJava
+RequireTcl
+RequireWix
+RequirePerl
+
+CreateStage
+cd ${PRODUCT_STAGE}
+
+
+CreateSources ${PRODUCT_STAGE}/Sources
+
+# The docs are put into a separate feature set
+mv ${PRODUCT_STAGE}/Sources/docs ${PRODUCT_STAGE}/
+
+# Build everything unless we were told to use a preexisting build
+if [ "$OPT_USEBUILD" = '' ]; then
+ CreateWindowsBuild
+ CreateWindowsSystem
+ CreateInclude \
+ ${PRODUCT_SUB_BLDDIR}/installed_include \
+ ${PRODUCT_SUB_BLDDIR}/dbinc/* \
+ ${PRODUCT_SUB_BLDDIR}/dbinc_auto/* \
+ ${PRODUCT_SUB_BLDDIR}/build_windows/*.h
+ CreateDbPerl
+fi
+
+if ! "$OPT_SKIPGEN" ; then
+ CreateLicenseRtf ../../../LICENSE license.rtf
+ CreateWixIncludeFiles
+fi
+
+CreateMsi ../dbcorewix.in dbcore.wxs "$OPT_OUTFILE"
+
+Progress "s_winmsi finished, $OPT_OUTFILE created."
+exit 0
+
diff --git a/db/dist/srcfiles.in b/db/dist/srcfiles.in
index b00be5a10..870ab3be4 100644
--- a/db/dist/srcfiles.in
+++ b/db/dist/srcfiles.in
@@ -1,8 +1,8 @@
-# $Id: srcfiles.in,v 1.87 2004/10/30 21:07:01 bostic Exp $
+# $Id: srcfiles.in,v 12.53 2006/09/09 14:08:39 bostic Exp $
#
-# This is an input file for the s_win32_dsp and s_vxworks scripts. It lists
+# This is an input file for the s_windows_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.
+# the Windows and VxWorks libraries.
#
# Please keep this list sorted alphabetically!
#
@@ -21,6 +21,7 @@
# vx File is in the VxWorks library.
# vxsmall File is in the small VxWorks library.
+btree/bt_compact.c dynamic small static vx vxsmall
btree/bt_compare.c dynamic small static vx vxsmall
btree/bt_conv.c dynamic small static vx vxsmall
btree/bt_curadj.c dynamic small static vx vxsmall
@@ -44,6 +45,7 @@ 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_hotbackup/db_hotbackup.c
build_vxworks/db_load/db_load.c
build_vxworks/db_printlog/db_printlog.c
build_vxworks/db_recover/db_recover.c
@@ -51,27 +53,46 @@ 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
+build_windows/dbkill.cpp testutil
+build_windows/libdb.def dynamic
+build_windows/libdb.rc dynamic
+build_windows/libdb_tcl.def tcl
+clib/abort.c
+clib/atoi.c
+clib/atol.c
+clib/ctime.c dynamic small static vx vxsmall
+clib/getaddrinfo.c dynamic static
clib/getcwd.c
clib/getopt.c vx vxsmall
+clib/isalpha.c
+clib/isdigit.c
+clib/isprint.c
+clib/isspace.c
clib/memcmp.c
clib/memmove.c
+clib/printf.c
clib/raise.c
+clib/rand.c
clib/snprintf.c vx vxsmall
clib/strcasecmp.c dynamic small static vx vxsmall
+clib/strcat.c
+clib/strchr.c
clib/strdup.c vx vxsmall
clib/strerror.c
+clib/strncat.c
+clib/strncmp.c
+clib/strrchr.c
+clib/strsep.c dynamic small static vx vxsmall
clib/strtol.c
clib/strtoul.c
common/crypto_stub.c small vxsmall
common/db_byteorder.c dynamic small static vx vxsmall
+common/db_clock.c dynamic static vx
common/db_err.c dynamic small static vx vxsmall
common/db_getlong.c dynamic small static vx vxsmall
common/db_idspace.c dynamic small static vx vxsmall
common/db_log2.c dynamic small static vx vxsmall
+common/mkpath.c dynamic small static vx vxsmall
common/util_arg.c vx vxsmall
common/util_cache.c dynamic small static vx vxsmall
common/util_log.c dynamic small static vx vxsmall
@@ -100,6 +121,7 @@ db/db_am.c dynamic small static vx vxsmall
db/db_auto.c dynamic small static vx vxsmall
db/db_autop.c app=db_printlog
db/db_cam.c dynamic small static vx vxsmall
+db/db_cds.c dynamic small static vx vxsmall
db/db_conv.c dynamic small static vx vxsmall
db/db_dispatch.c dynamic small static vx vxsmall
db/db_dup.c dynamic small static vx vxsmall
@@ -131,6 +153,7 @@ 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_hotbackup/db_hotbackup.c app=db_hotbackup
db_load/db_load.c app=db_load
db_printlog/db_printlog.c app=db_printlog
db_recover/db_recover.c app=db_recover
@@ -149,13 +172,25 @@ dbreg/dbreg_stat.c dynamic small static vx vxsmall
dbreg/dbreg_util.c dynamic small static vx vxsmall
env/db_salloc.c dynamic small static vx vxsmall
env/db_shash.c dynamic small static vx vxsmall
+env/env_config.c dynamic small static vx vxsmall
+env/env_failchk.c dynamic small static vx vxsmall
env/env_file.c dynamic small static vx vxsmall
env/env_method.c dynamic small static vx vxsmall
env/env_open.c dynamic small static vx vxsmall
env/env_recover.c dynamic small static vx vxsmall
env/env_region.c dynamic small static vx vxsmall
+env/env_register.c dynamic small static vx vxsmall
env/env_stat.c dynamic small static vx vxsmall
examples_c/bench_001.c
+examples_c/csv/DbRecord.c app=ex_csvload app=ex_csvquery
+examples_c/csv/code.c app=ex_csvcode
+examples_c/csv/csv_local.c app=ex_csvload app=ex_csvquery
+examples_c/csv/db.c app=ex_csvload app=ex_csvquery
+examples_c/csv/load.c app=ex_csvload
+examples_c/csv/load_main.c app=ex_csvload
+examples_c/csv/query.c app=ex_csvquery
+examples_c/csv/query_main.c app=ex_csvquery
+examples_c/csv/util.c app=ex_csvload app=ex_csvquery
examples_c/ex_access.c app=ex_access
examples_c/ex_apprec/ex_apprec.c
examples_c/ex_apprec/ex_apprec_auto.c
@@ -166,27 +201,33 @@ 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_sequence.c
+examples_c/ex_rep/base/rep_base.c app=ex_rep_base
+examples_c/ex_rep/base/rep_msg.c app=ex_rep_base
+examples_c/ex_rep/base/rep_net.c app=ex_rep_base
+examples_c/ex_rep/common/rep_common.c app=ex_rep_base app=ex_rep_mgr
+examples_c/ex_rep/mgr/rep_mgr.c app=ex_rep_mgr
+examples_c/ex_sequence.c app=ex_sequence
examples_c/ex_thread.c
examples_c/ex_tpcb.c app=ex_tpcb
-examples_c/getting_started/example_database_load.c
-examples_c/getting_started/example_database_read.c
-examples_c/getting_started/gettingstarted_common.c
+examples_c/getting_started/example_database_load.c app=example_database_load
+examples_c/getting_started/example_database_read.c app=example_database_read
+examples_c/getting_started/gettingstarted_common.c app=example_database_load app=example_database_read
+examples_c/txn_guide/txn_guide.c app=ex_txnguide
+examples_c/txn_guide/txn_guide_inmemory.c app=ex_txnguide_inmem
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/SequenceExample.cpp
+examples_cxx/SequenceExample.cpp app=excxx_sequence
examples_cxx/TpcbExample.cpp app=excxx_tpcb
-examples_cxx/getting_started/MyDb.cpp
-examples_cxx/getting_started/excxx_example_database_load.cpp
-examples_cxx/getting_started/excxx_example_database_read.cpp
+examples_cxx/excxx_repquote/RepConfigInfo.cpp app=excxx_repquote
+examples_cxx/excxx_repquote/RepQuoteExample.cpp app=excxx_repquote
+examples_cxx/getting_started/MyDb.cpp app=excxx_example_database_load app=excxx_example_database_read
+examples_cxx/getting_started/excxx_example_database_load.cpp app=excxx_example_database_load
+examples_cxx/getting_started/excxx_example_database_read.cpp app=excxx_example_database_read
+examples_cxx/txn_guide/TxnGuide.cpp app=excxx_txnguide
+examples_cxx/txn_guide/TxnGuideInMemory.cpp app=excxx_txnguide_inmem
fileops/fileops_auto.c dynamic small static vx vxsmall
fileops/fileops_autop.c app=db_printlog
fileops/fop_basic.c dynamic small static vx vxsmall
@@ -215,6 +256,7 @@ hsearch/hsearch.c dynamic static vx
libdb_java/db_java_wrap.c java
lock/lock.c dynamic small static vx vxsmall
lock/lock_deadlock.c dynamic small static vx vxsmall
+lock/lock_failchk.c dynamic small static vx vxsmall
lock/lock_id.c dynamic small static vx vxsmall
lock/lock_list.c dynamic small static vx vxsmall
lock/lock_method.c dynamic small static vx vxsmall
@@ -225,6 +267,7 @@ lock/lock_util.c dynamic small static vx vxsmall
log/log.c dynamic small static vx vxsmall
log/log_archive.c dynamic small static vx vxsmall
log/log_compare.c dynamic small static vx vxsmall
+log/log_debug.c dynamic small static vx vxsmall
log/log_get.c dynamic small static vx vxsmall
log/log_method.c dynamic small static vx vxsmall
log/log_put.c dynamic small static vx vxsmall
@@ -237,17 +280,22 @@ mp/mp_fopen.c dynamic small static vx vxsmall
mp/mp_fput.c dynamic small static vx vxsmall
mp/mp_fset.c dynamic small static vx vxsmall
mp/mp_method.c dynamic small static vx vxsmall
+mp/mp_mvcc.c dynamic small static vx vxsmall
mp/mp_region.c dynamic small static vx vxsmall
mp/mp_register.c dynamic small static vx vxsmall
mp/mp_stat.c dynamic small static vx vxsmall
mp/mp_sync.c dynamic small static vx vxsmall
mp/mp_trickle.c dynamic small static vx vxsmall
+mutex/mut_alloc.c dynamic small static vx vxsmall
+mutex/mut_failchk.c dynamic small static vx vxsmall
mutex/mut_fcntl.c
+mutex/mut_method.c dynamic small static vx vxsmall
mutex/mut_pthread.c
+mutex/mut_region.c dynamic small static vx vxsmall
+mutex/mut_stat.c dynamic small static vx vxsmall
mutex/mut_tas.c vx vxsmall
mutex/mut_win32.c dynamic small static
-mutex/mutex.c dynamic small static vx vxsmall
-mutex/tm.c
+mutex/tm.c app=tm
os/os_abs.c
os/os_alloc.c dynamic small static vx vxsmall
os/os_clock.c vx vxsmall
@@ -255,17 +303,21 @@ os/os_config.c
os/os_dir.c vx vxsmall
os/os_errno.c vx vxsmall
os/os_fid.c vx vxsmall
+os/os_flock.c vx vxsmall
os/os_fsync.c vx vxsmall
+os/os_fzero.c dynamic small static vx vxsmall
+os/os_getenv.c vx vxsmall
os/os_handle.c vx vxsmall
-os/os_id.c dynamic small static vx vxsmall
os/os_map.c
-os/os_method.c dynamic small static vx vxsmall
+os/os_method.c vx vxsmall
+os/os_mkdir.c dynamic small static vx vxsmall
os/os_oflags.c dynamic small static vx vxsmall
os/os_open.c vx vxsmall
+os/os_pid.c dynamic small static vx vxsmall
os/os_region.c dynamic small static vx vxsmall
os/os_rename.c vx vxsmall
os/os_root.c dynamic small static vx vxsmall
-os/os_rpath.c dynamic small static vx vxsmall
+os/os_rpath.c dynamic small static
os/os_rw.c vx vxsmall
os/os_seek.c vx vxsmall
os/os_sleep.c vx vxsmall
@@ -273,28 +325,60 @@ os/os_spin.c vx vxsmall
os/os_stat.c vx vxsmall
os/os_tmpdir.c dynamic small static vx vxsmall
os/os_truncate.c vx vxsmall
+os/os_uid.c dynamic small static vx vxsmall
os/os_unlink.c vx vxsmall
+os/os_yield.c vx vxsmall
+os_brew/abort.c
+os_brew/ctime.c
+os_brew/fclose.c
+os_brew/fgetc.c
+os_brew/fgets.c
+os_brew/fopen.c
+os_brew/fwrite.c
+os_brew/getcwd.c
+os_brew/localtime.c
+os_brew/os_abs.c
+os_brew/os_config.c
+os_brew/os_dir.c
+os_brew/os_errno.c
+os_brew/os_handle.c
+os_brew/os_mkdir.c
+os_brew/os_oflags.c
+os_brew/os_open.c
+os_brew/os_pid.c
+os_brew/os_rename.c
+os_brew/os_rw.c
+os_brew/os_seek.c
+os_brew/os_sleep.c
+os_brew/os_stat.c
+os_brew/os_truncate.c
+os_brew/os_unlink.c
+os_brew/time.c
os_vxworks/os_vx_abs.c vx vxsmall
os_vxworks/os_vx_config.c vx vxsmall
os_vxworks/os_vx_map.c vx vxsmall
-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
-os_win32/os_truncate.c dynamic small static
-os_win32/os_unlink.c dynamic small static
+os_vxworks/os_vx_rpath.c vx vxsmall
+os_windows/os_abs.c dynamic small static
+os_windows/os_clock.c dynamic small static
+os_windows/os_config.c dynamic small static
+os_windows/os_dir.c dynamic small static
+os_windows/os_errno.c dynamic small static
+os_windows/os_fid.c dynamic small static
+os_windows/os_flock.c dynamic small static
+os_windows/os_fsync.c dynamic small static
+os_windows/os_getenv.c dynamic small static
+os_windows/os_handle.c dynamic small static
+os_windows/os_map.c dynamic small static
+os_windows/os_open.c dynamic small static
+os_windows/os_rename.c dynamic small static
+os_windows/os_rw.c dynamic small static
+os_windows/os_seek.c dynamic small static
+os_windows/os_sleep.c dynamic small static
+os_windows/os_spin.c dynamic small static
+os_windows/os_stat.c dynamic small static
+os_windows/os_truncate.c dynamic small static
+os_windows/os_unlink.c dynamic small static
+os_windows/os_yield.c dynamic small static
qam/qam.c dynamic static vx
qam/qam_auto.c dynamic static vx
qam/qam_autop.c app=db_printlog
@@ -310,12 +394,25 @@ qam/qam_verify.c dynamic static vx
rep/rep_auto.c dynamic static vx
rep/rep_autop.c app=db_printlog
rep/rep_backup.c dynamic static vx
+rep/rep_elect.c dynamic static vx
+rep/rep_log.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_stat.c dynamic static vx
rep/rep_stub.c small vxsmall
rep/rep_util.c dynamic static vx
+rep/rep_verify.c dynamic static vx
+repmgr/repmgr_elect.c dynamic static
+repmgr/repmgr_method.c dynamic static
+repmgr/repmgr_msg.c dynamic static
+repmgr/repmgr_net.c dynamic static
+repmgr/repmgr_posix.c
+repmgr/repmgr_queue.c dynamic static
+repmgr/repmgr_sel.c dynamic static
+repmgr/repmgr_stat.c dynamic static
+repmgr/repmgr_util.c dynamic static
+repmgr/repmgr_windows.c dynamic static
rpc_client/client.c
rpc_client/gen_client.c
rpc_client/gen_client_ret.c
@@ -350,7 +447,7 @@ 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_rand.c app=db_perf app=db_reptest
test_perf/perf_spawn.c app=db_perf
test_perf/perf_stat.c app=db_perf
test_perf/perf_sync.c app=db_perf
@@ -359,9 +456,34 @@ 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
+test_rep/db_reptest.c app=db_reptest
+test_rep/reptest_accept.c app=db_reptest
+test_rep/reptest_client.c app=db_reptest
+test_rep/reptest_config.c app=db_reptest
+test_rep/reptest_dbs.c app=db_reptest
+test_rep/reptest_debug.c app=db_reptest
+test_rep/reptest_elect.c app=db_reptest
+test_rep/reptest_env.c app=db_reptest
+test_rep/reptest_exec.c app=db_reptest
+test_rep/reptest_file.c app=db_reptest
+test_rep/reptest_key.c app=db_reptest
+test_rep/reptest_master.c app=db_reptest
+test_rep/reptest_misc.c app=db_reptest
+test_rep/reptest_msg_thread.c app=db_reptest
+test_rep/reptest_op.c app=db_reptest
+test_rep/reptest_parse.c app=db_reptest
+test_rep/reptest_send.c app=db_reptest
+test_rep/reptest_site.c app=db_reptest
+test_rep/reptest_socket.c app=db_reptest
+test_rep/reptest_spawn.c app=db_reptest
+test_rep/reptest_thread.c app=db_reptest
+test_rep/reptest_txn.c app=db_reptest
+test_rep/reptest_util.c app=db_reptest
txn/txn.c dynamic small static vx vxsmall
txn/txn_auto.c dynamic small static vx vxsmall
txn/txn_autop.c app=db_printlog
+txn/txn_chkpt.c dynamic small static vx vxsmall
+txn/txn_failchk.c dynamic small static vx vxsmall
txn/txn_method.c dynamic small static vx vxsmall
txn/txn_rec.c dynamic small static vx vxsmall
txn/txn_recover.c dynamic small static vx vxsmall
diff --git a/db/dist/tags b/db/dist/tags
index 479f7d5f9..46ff0c65d 100644
--- a/db/dist/tags
+++ b/db/dist/tags
@@ -1,559 +1,698 @@
+ACK_WAITER ../repmgr/repmgr_windows.c /^} ACK_WAITER;$/
+ACK_WAITERS_TABLE ../dbinc/repmgr.h /^struct __ack_waiters_table;$/
ACQUIRE ../btree/bt_cursor.c /^#define ACQUIRE(dbc, mode, lpgno, lock, fpgno, pag/
-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) do { \\$/
-ACQUIRE_CUR_COUPLE ../btree/bt_cursor.c /^#define ACQUIRE_CUR_COUPLE(dbc, mode, p, ret) do {/
+ACQUIRE_CUR ../btree/bt_cursor.c /^#define ACQUIRE_CUR(dbc, mode, p, flags, ret) do {/
ACQUIRE_WRITE_LOCK ../btree/bt_cursor.c /^#define ACQUIRE_WRITE_LOCK(dbc, ret) do { \\$/
-ACTION ../dbinc/db.in 2149
-ACTIVATE_CTP ../dbinc/db_server_int.h /^#define ACTIVATE_CTP(ctp, id, type) { \\$/
+ACTION ../dbinc/db.in /^} ACTION;$/
+ACTIVATE_CTP ../dbinc/db_server_int.h /^#define ACTIVATE_CTP(ctp, id, type) { \\$/
+ADDRINFO ../dbinc/repmgr.h /^typedef struct addrinfo ADDRINFO;$/
+ADDR_LIST_CURRENT ../dbinc/repmgr.h /^#define ADDR_LIST_CURRENT(na) ((na)->current)$/
+ADDR_LIST_FIRST ../dbinc/repmgr.h /^#define ADDR_LIST_FIRST(na) ((na)->current = (na)-/
+ADDR_LIST_NEXT ../dbinc/repmgr.h /^#define ADDR_LIST_NEXT(na) ((na)->current = (na)->/
+ADD_CONFIG_NAME ../tcl/tcl_db_pkg.c /^#define ADD_CONFIG_NAME(name) \\$/
+AES_CIPHER ../dbinc/crypto.h /^} AES_CIPHER;$/
+AI_CANONNAME ../dbinc/repmgr.h /^#define AI_CANONNAME 0x02$/
+AI_NUMERICHOST ../dbinc/repmgr.h /^#define AI_NUMERICHOST 0x04$/
+AI_PASSIVE ../dbinc/repmgr.h /^#define AI_PASSIVE 0x01$/
ALIGNP_DEC ../dbinc/db_int.in /^#define ALIGNP_DEC(p, bound) \\$/
ALIGNP_INC ../dbinc/db_int.in /^#define ALIGNP_INC(p, bound) \\$/
+ALIVE_ON ../dbinc/db_int.in /^#define ALIVE_ON(dbenv) ((dbenv)->is_alive != NUL/
+ALREADY_FLUSHED ../log/log_put.c /^#define ALREADY_FLUSHED(lp, lsnp) \\$/
ANYSITE ../rep/rep_record.c /^#define ANYSITE(rep)$/
-APPNAME ../dbinc/db_int.in 292
-BACKUP_PREFIX ../db/db.c 1007
-BADARG ../clib/getopt.c 59
-BADCH ../clib/getopt.c 57
-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 40
-BAD_OTHER ../crypto/rijndael/rijndael-api-fst.h 67
-BFMSG ../db185/db185.c 176
-BH ../dbinc/mp.h 13
-BH_CALLPGIN ../dbinc/mp.h 331
-BH_DIRTY ../dbinc/mp.h 332
-BH_DIRTY_CREATE ../dbinc/mp.h 333
-BH_DISCARD ../dbinc/mp.h 334
-BH_FREE_FREEMEM ../dbinc/mp.h 318
-BH_FREE_UNLOCKED ../dbinc/mp.h 319
-BH_LOCKED ../dbinc/mp.h 335
-BH_TRASH ../dbinc/mp.h 336
+APPNAME ../dbinc/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_BLOCK_LENGTH ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_BLOCK_LENGTH -6$/
+BAD_CIPHER_INSTANCE ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_CIPHER_INSTANCE -7$/
+BAD_CIPHER_MODE ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_CIPHER_MODE -4 \/* Params st/
+BAD_CIPHER_STATE ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_CIPHER_STATE -5 \/* Cipher in/
+BAD_DATA ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_DATA -8 \/* Data cont/
+BAD_KEY_DIR ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_KEY_DIR -1 \/* Key direc/
+BAD_KEY_INSTANCE ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_KEY_INSTANCE -3 \/* Key passe/
+BAD_KEY_MAT ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_KEY_MAT -2 \/* Key mater/
+BAD_KILLID ../lock/lock_deadlock.c /^#define BAD_KILLID 0xffffffff$/
+BAD_OTHER ../crypto/rijndael/rijndael-api-fst.h /^#define BAD_OTHER -9 \/* Unknown e/
+BFMSG ../db185/db185.c /^#define BFMSG \\$/
+BH ../dbinc/mp.h /^struct __bh; typedef struct __bh BH;$/
+BH_CALLPGIN ../dbinc/mp.h /^#define BH_CALLPGIN 0x001 \/* Convert the page be/
+BH_DIRTY ../dbinc/mp.h /^#define BH_DIRTY 0x002 \/* Page is modified. *\/$/
+BH_DIRTY_CREATE ../dbinc/mp.h /^#define BH_DIRTY_CREATE 0x004 \/* Page is modifie/
+BH_DISCARD ../dbinc/mp.h /^#define BH_DISCARD 0x008 \/* Page is useless. *\//
+BH_FREED ../dbinc/mp.h /^#define BH_FREED 0x010 \/* Page was freed. *\/$/
+BH_FREE_FREEMEM ../dbinc/mp.h /^#define BH_FREE_FREEMEM 0x01$/
+BH_FREE_REUSE ../dbinc/mp.h /^#define BH_FREE_REUSE 0x02$/
+BH_FREE_UNLOCKED ../dbinc/mp.h /^#define BH_FREE_UNLOCKED 0x04$/
+BH_FROZEN ../dbinc/mp.h /^#define BH_FROZEN 0x020 \/* Frozen buffer: alloca/
+BH_FROZEN_ALLOC ../dbinc/mp.h /^struct __bh_frozen_a; typedef struct __bh_frozen_a/
+BH_FROZEN_PAGE ../dbinc/mp.h /^struct __bh_frozen; typedef struct __bh_frozen_p B/
+BH_LOCKED ../dbinc/mp.h /^#define BH_LOCKED 0x040 \/* Page is locked (I\/O /
+BH_OBSOLETE ../dbinc/mp.h /^#define BH_OBSOLETE(bhp, old_lsn) ((SH_CHAIN_HASNE/
+BH_OWNED_BY ../dbinc/mp.h /^#define BH_OWNED_BY(dbenv, bhp, txn) ((txn) != NUL/
+BH_OWNER ../dbinc/mp.h /^#define BH_OWNER(dbenv, bhp) \\$/
+BH_PRIORITY ../dbinc/mp.h /^#define BH_PRIORITY(bhp) \\$/
+BH_TRACK ../mp/mp_sync.c /^} BH_TRACK;$/
+BH_TRASH ../dbinc/mp.h /^#define BH_TRASH 0x080 \/* Page is garbage. *\/$/
+BINTERNAL ../dbinc/db_page.h /^} BINTERNAL;$/
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
+BITEM_PSIZE ../dbinc/db_page.h /^#define BITEM_PSIZE(bk) \\$/
+BITEM_SIZE ../dbinc/db_page.h /^#define BITEM_SIZE(bk) \\$/
+BITSPERBLOCK ../crypto/rijndael/rijndael-api-fst.h /^#define BITSPERBLOCK 128 \/* Default nu/
+BI_DELETED ../dbinc/btree.h /^#define BI_DELETED 0x01 \/* Key\/data pair only p/
+BKEYDATA ../dbinc/db_page.h /^} BKEYDATA;$/
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
+BOVERFLOW ../dbinc/db_page.h /^} BOVERFLOW;$/
+BOVERFLOW_PSIZE ../dbinc/db_page.h /^#define BOVERFLOW_PSIZE \\$/
+BOVERFLOW_SIZE ../dbinc/db_page.h /^#define BOVERFLOW_SIZE \\$/
+BPI_NORECNUM ../dbinc/btree.h /^#define BPI_NORECNUM 0x02 \/* Not update the recn/
+BPI_SPACEONLY ../dbinc/btree.h /^#define BPI_SPACEONLY 0x01 \/* Only check for spa/
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
+BTMETA ../dbinc/db_page.h /^} BTMETA33, BTMETA;$/
+BTMETA2X ../dbinc/db_upgrade.h /^} BTMETA2X;$/
+BTMETA30 ../dbinc/db_upgrade.h /^} BTMETA30;$/
+BTMETA31 ../dbinc/db_upgrade.h /^} BTMETA31;$/
+BTM_DUP ../dbinc/db_page.h /^#define BTM_DUP 0x001 \/* Duplicates. *\/$/
+BTM_DUPSORT ../dbinc/db_page.h /^#define BTM_DUPSORT 0x040 \/* Duplicates are sor/
+BTM_FIXEDLEN ../dbinc/db_page.h /^#define BTM_FIXEDLEN 0x008 \/* Recno: fixed leng/
+BTM_MASK ../dbinc/db_page.h /^#define BTM_MASK 0x07f$/
+BTM_RECNO ../dbinc/db_page.h /^#define BTM_RECNO 0x002 \/* Recno tree. *\/$/
+BTM_RECNUM ../dbinc/db_page.h /^#define BTM_RECNUM 0x004 \/* Btree: maintain rec/
+BTM_RENUMBER ../dbinc/db_page.h /^#define BTM_RENUMBER 0x010 \/* Recno: renumber o/
+BTM_SUBDB ../dbinc/db_page.h /^#define BTM_SUBDB 0x020 \/* Subdatabases. *\/$/
+BTREE ../dbinc/btree.h /^struct __btree; typedef struct __btree BTREE;$/
+BTREEINFO ../dbinc/db_185.in /^} BTREEINFO;$/
+BTREEMAGIC ../dbinc/db_185.in /^#define BTREEMAGIC 0x053162$/
+BTREEVERSION ../dbinc/db_185.in /^#define BTREEVERSION 3$/
+BTREE_CURSOR ../dbinc/btree.h /^struct __cursor; typedef struct __cursor BTREE_CUR/
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_INVALID ../dbinc/hash.h /^#define BUCKET_INVALID 0xFFFFFFFF$/
BUCKET_TO_PAGE ../dbinc/hash.h /^#define BUCKET_TO_PAGE(I, B) (BS_TO_PAGE((B), (I)-/
+BULK_FORCE ../dbinc/rep.h /^#define BULK_FORCE 0x001 \/* Force buffer after t/
+BULK_XMIT ../dbinc/rep.h /^#define BULK_XMIT 0x002 \/* Buffer in transit. */
B_DCLR ../dbinc/db_page.h /^#define B_DCLR(t) (t) &= ~B_DELETE$/
-B_DELETE ../dbinc/db_page.h 529
+B_DELETE ../dbinc/db_page.h /^#define B_DELETE (0x80)$/
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_DUPLICATE ../dbinc/db_page.h /^#define B_DUPLICATE 2 \/* Duplicate key\/data item/
+B_KEYDATA ../dbinc/db_page.h /^#define B_KEYDATA 1 \/* Key\/data item. *\/$/
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
+B_OVERFLOW ../dbinc/db_page.h /^#define B_OVERFLOW 3 \/* Overflow key\/data item. /
+B_TSET ../dbinc/db_page.h /^#define B_TSET(t, type) ((t) = B_TYPE(type))$/
+B_TSET_DELETED ../dbinc/db_page.h /^#define B_TSET_DELETED(t, type) ((t) = (type) | B_/
+B_TYPE ../dbinc/db_page.h /^#define B_TYPE(t) ((t) & ~B_DELETE)$/
+CAD_UPDATEROOT ../dbinc/btree.h /^#define CAD_UPDATEROOT 0x01 \/* Root page count w/
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) \\$/
+CDB_LOCKING_DONE ../db/db_cam.c /^#define CDB_LOCKING_DONE(dbenv, dbc) \\$/
+CDB_LOCKING_INIT ../db/db_cam.c /^#define CDB_LOCKING_INIT(dbenv, 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 ../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
-CKPLSN_CMP ../dbinc/log.h 361
-CLEAR_BYTE ../dbinc/debug.h 28
+CHAR64LONG16 ../hmac/sha1.c /^} CHAR64LONG16;$/
+CHARKEY ../dbinc/hash.h /^#define CHARKEY "%$sniglet^&"$/
+CHECK_LSN ../dbinc/log.h /^#define CHECK_LSN(e, redo, cmp, lsn, prev) \\$/
+CHECK_MTX_THREAD ../dbinc/db_int.in /^#define CHECK_MTX_THREAD(dbenv, mtx) do { \\$/
+CHECK_THREAD ../dbinc/db_int.in /^#define CHECK_THREAD(dbenv) do { \\$/
+CIPHER ../dbinc/crypto.h /^} CIPHER;$/
+CIPHER_AES ../dbinc/crypto.h /^#define CIPHER_AES 1 \/* AES algorithm *\/$/
+CIPHER_ANY ../dbinc/crypto.h /^#define CIPHER_ANY 0x00000001 \/* Only for DB_CIPH/
+CKPLSN_CMP ../dbinc/log.h /^#define CKPLSN_CMP 0$/
+CLEAR_BYTE ../dbinc/debug.h /^#define CLEAR_BYTE 0xdb$/
CLEAR_MAP ../lock/lock_deadlock.c /^#define CLEAR_MAP(M, N) { \\$/
CLIENT_ONLY ../rep/rep_record.c /^#define CLIENT_ONLY(rep, rp) do { \\$/
+CLIENT_REREQ ../rep/rep_record.c /^#define CLIENT_REREQ 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) \\$/
+CLR_MAP ../lock/lock_deadlock.c /^#define CLR_MAP(M, B) ((M)[(B) \/ 32] &= ~((u_int)/
+COMPQUIET ../dbinc/debug.h /^#define COMPQUIET(n, v) do { \\$/
+CONFIG_GET_INT ../env/env_config.c /^#define CONFIG_GET_INT(s, vp) do { \\$/
+CONFIG_GET_LONG ../env/env_config.c /^#define CONFIG_GET_LONG(s, vp) do { \\$/
+CONFIG_GET_UINT32 ../env/env_config.c /^#define CONFIG_GET_UINT32(s, vp) do { \\$/
+CONFIG_INT ../env/env_config.c /^#define CONFIG_INT(s, f) do { \\$/
+CONFIG_SLOTS ../env/env_config.c /^#define CONFIG_SLOTS 10$/
+CONFIG_UINT32 ../env/env_config.c /^#define CONFIG_UINT32(s, f) do { \\$/
CONFLICTS ../dbinc/lock.h /^#define CONFLICTS(T, R, HELD, WANTED) \\$/
+CONNECTION_LIST ../dbinc/repmgr.h /^typedef TAILQ_HEAD(__repmgr_conn_list, __repmgr_co/
+CONN_CONNECTING ../dbinc/repmgr.h /^#define CONN_CONNECTING 0x01 \/* nonblocking conne/
+CONN_DEFUNCT ../dbinc/repmgr.h /^#define CONN_DEFUNCT 0x02 \/* socket close pending/
COPY_OBJ ../lock/lock_list.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
+CRYPTO_ONLY ../libdb_java/db_java_wrap.c /^#define CRYPTO_ONLY(x) (x);$/
+CS_DEL ../btree/bt_compact.c /^#define CS_DEL 4 \/* Get a stack to delete a page/
+CS_GETRECNO ../btree/bt_compact.c /^#define CS_GETRECNO 0x80 \/* Extract record nu/
+CS_NEXT ../btree/bt_compact.c /^#define CS_NEXT 2 \/* Get the next page. *\/$/
+CS_NEXT_WRITE ../btree/bt_compact.c /^#define CS_NEXT_WRITE 3 \/* Get the next page and /
+CS_PARENT ../btree/bt_compact.c /^#define CS_PARENT 1 \/* We want the parent too, wr/
+CS_READ ../btree/bt_compact.c /^#define CS_READ 0 \/* We are just reading. *\/$/
+CS_START ../btree/bt_compact.c /^#define CS_START 5 \/* Starting level for stack, w/
+CTIME_BUFLEN ../dbinc/os.h /^#define CTIME_BUFLEN 26$/
+CTRACE ../btree/bt_compact.c /^#define CTRACE(dbc, location, t, start, f) do { /
+CT_CURSOR ../dbinc/db_server_int.h /^#define CT_CURSOR 0x001 \/* Cursor *\/$/
+CT_DB ../dbinc/db_server_int.h /^#define CT_DB 0x002 \/* Database *\/$/
+CT_ENV ../dbinc/db_server_int.h /^#define CT_ENV 0x004 \/* Env *\/$/
+CT_JOIN ../dbinc/db_server_int.h /^#define CT_JOIN 0x10000000 \/* Join cursor compon/
+CT_JOINCUR ../dbinc/db_server_int.h /^#define CT_JOINCUR 0x20000000 \/* Join cursor *\/$/
+CT_TXN ../dbinc/db_server_int.h /^#define CT_TXN 0x008 \/* Txn *\/$/
CURADJ_LOG ../btree/bt_recno.c /^#define CURADJ_LOG(dbc) \\$/
-C_DELETED ../dbinc/btree.h 215
+C_DELETED ../dbinc/btree.h /^#define C_DELETED 0x0001 \/* Record was deleted. /
C_EQUAL ../btree/bt_recno.c /^#define C_EQUAL(cp1, cp2) \\$/
C_LESSTHAN ../btree/bt_recno.c /^#define C_LESSTHAN(cp1, cp2) \\$/
-C_RECNUM ../dbinc/btree.h 221
-C_RENUMBER ../dbinc/btree.h 228
-DATA_INIT_CNT ../env/env_method.c 640
-DB ../dbinc/db.in 127
-DB2JDBENV ../libdb_java/db_java_wrap.c 812
-DBC ../dbinc/db.in 155
-DBC2JDBENV ../libdb_java/db_java_wrap.c 813
-DBC_ACTIVE ../dbinc/db.in 1646
-DBC_COMPENSATE ../dbinc/db.in 1647
-DBC_DEGREE_2 ../dbinc/db.in 1648
-DBC_DIRTY_READ ../dbinc/db.in 1649
-DBC_INTERNAL ../dbinc/db.in 156
-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 1656
-DBC_MULTIPLE_KEY ../dbinc/db.in 1657
-DBC_OPD ../dbinc/db.in 1650
-DBC_OWN_LID ../dbinc/db.in 1658
-DBC_RECOVER ../dbinc/db.in 1651
-DBC_RMW ../dbinc/db.in 1652
-DBC_TRANSIENT ../dbinc/db.in 1653
-DBC_WRITECURSOR ../dbinc/db.in 1654
-DBC_WRITER ../dbinc/db.in 1655
+C_RECNUM ../dbinc/btree.h /^#define C_RECNUM 0x0002 \/* Tree requires record /
+C_RENUMBER ../dbinc/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 ../dbinc/db.in /^struct __db; typedef struct __db DB;$/
+DB2JDBENV ../libdb_java/db_java_wrap.c /^#define DB2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->/
+DBC ../dbinc/db.in /^struct __dbc; typedef struct __dbc DBC;$/
+DBC2JDBENV ../libdb_java/db_java_wrap.c /^#define DBC2JDBENV ((jobject)DB_ENV_INTERNAL(arg1-/
+DBC_ACTIVE ../dbinc/db.in /^#define DBC_ACTIVE 0x0001 \/* Cursor in use. *\/$/
+DBC_DONTLOCK ../dbinc/db.in /^#define DBC_DONTLOCK 0x0002 \/* Don't lock on thi/
+DBC_INTERNAL ../dbinc/db.in /^struct __dbc_internal; typedef struct __dbc_intern/
+DBC_LOGGING ../dbinc/db_int.in /^#define DBC_LOGGING(dbc) __dbc_logging(dbc)$/
+DBC_METHOD ../cxx/cxx_dbc.cpp /^\/\/ Helper macro for simple methods that pass thr/
+DBC_MULTIPLE ../dbinc/db.in /^#define DBC_MULTIPLE 0x0004 \/* Return Multiple d/
+DBC_MULTIPLE_KEY ../dbinc/db.in /^#define DBC_MULTIPLE_KEY 0x0008 \/* Return Multipl/
+DBC_OPD ../dbinc/db.in /^#define DBC_OPD 0x0010 \/* Cursor references off/
+DBC_OWN_LID ../dbinc/db.in /^#define DBC_OWN_LID 0x0020 \/* Free lock id on de/
+DBC_READ_COMMITTED ../dbinc/db.in /^#define DBC_READ_COMMITTED 0x0040 \/* Cursor has d/
+DBC_READ_UNCOMMITTED ../dbinc/db.in /^#define DBC_READ_UNCOMMITTED 0x0080 \/* Cursor has/
+DBC_RECOVER ../dbinc/db.in /^#define DBC_RECOVER 0x0100 \/* Recovery cursor; d/
+DBC_RMW ../dbinc/db.in /^#define DBC_RMW 0x0200 \/* Acquire write flag in/
+DBC_TRANSIENT ../dbinc/db.in /^#define DBC_TRANSIENT 0x0400 \/* Cursor is transi/
+DBC_WRITECURSOR ../dbinc/db.in /^#define DBC_WRITECURSOR 0x0800 \/* Cursor may be /
+DBC_WRITER ../dbinc/db.in /^#define DBC_WRITER 0x1000 \/* Cursor immediately /
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_ERR ../cxx/cxx_env.cpp /^\/\/ Helper macros for simple methods that pass th/
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 106
-DBLOG_RECOVER ../dbinc/log.h 105
-DBM ../dbinc/db.in 2086
-DBMETASIZE ../dbinc/db_page.h 180
-DBMETA_CHKSUM ../dbinc/db_page.h 76
-DBM_INSERT ../dbinc/db.in 2088
-DBM_REPLACE ../dbinc/db.in 2089
-DBM_SUFFIX ../dbinc/db.in 2095
-DBREG_CHKPNT ../dbinc/log.h 49
-DBREG_CLOSE ../dbinc/log.h 50
-DBREG_OPEN ../dbinc/log.h 51
-DBREG_RCLOSE ../dbinc/log.h 52
-DBREP_OPENFILES ../dbinc/rep.h 255
-DBSEQ_METHOD ../cxx/cxx_seq.cpp /^#define DBSEQ_METHOD(_name, _argspec, _arglist, _d/
-DBT ../dbinc/db.in 130
-DBTBUFLEN ../db/db_pr.c 1122
-DBTCL_DBM ../dbinc/tcl_db.h 22
-DBTCL_NDBM ../dbinc/tcl_db.h 23
-DBTCL_PREP ../dbinc/tcl_db.h 20
-DBTXN_METHOD ../cxx/cxx_txn.cpp /^#define DBTXN_METHOD(_name, _delete, _argspec, _ar/
-DBTYPE ../dbinc/db.in 1101
+DBLOG_FORCE_OPEN ../dbinc/log.h /^#define DBLOG_FORCE_OPEN 0x02 \/* Force the DB ope/
+DBLOG_RECOVER ../dbinc/log.h /^#define DBLOG_RECOVER 0x01 \/* We are in recovery/
+DBM ../dbinc/db.in /^typedef struct __db DBM;$/
+DBMETA ../dbinc/db_page.h /^} DBMETA33, DBMETA;$/
+DBMETA30 ../dbinc/db_upgrade.h /^} DBMETA30;$/
+DBMETA31 ../dbinc/db_upgrade.h /^} DBMETA31;$/
+DBMETASIZE ../dbinc/db_page.h /^#define DBMETASIZE 512$/
+DBMETA_CHKSUM ../dbinc/db_page.h /^#define DBMETA_CHKSUM 0x01$/
+DBM_INSERT ../dbinc/db.in /^#define DBM_INSERT 0 \/* Flags to dbm_store(). */
+DBM_REPLACE ../dbinc/db.in /^#define DBM_REPLACE 1$/
+DBM_SUFFIX ../dbinc/db.in /^#define DBM_SUFFIX ".db"$/
+DBREG_CHKPNT ../dbinc/log.h /^#define DBREG_CHKPNT 1 \/* Checkpoint: file name/
+DBREG_CLOSE ../dbinc/log.h /^#define DBREG_CLOSE 2 \/* File close. *\/$/
+DBREG_OPEN ../dbinc/log.h /^#define DBREG_OPEN 3 \/* File open. *\/$/
+DBREG_PREOPEN ../dbinc/log.h /^#define DBREG_PREOPEN 4 \/* Open in mpool only. */
+DBREG_RCLOSE ../dbinc/log.h /^#define DBREG_RCLOSE 5 \/* File close after recov/
+DBREG_REOPEN ../dbinc/log.h /^#define DBREG_REOPEN 6 \/* Open for in-memory dat/
+DBREP_OPENFILES ../dbinc/rep.h /^#define DBREP_OPENFILES 0x0001 \/* This handle ha/
+DBSEQ_METHOD ../cxx/cxx_seq.cpp /^\/\/ Helper macro for simple methods that pass thr/
+DBT ../dbinc/db.in /^struct __db_dbt; typedef struct __db_dbt DBT;$/
+DBTBUFLEN ../db/db_pr.c /^#define DBTBUFLEN 100$/
+DBTCL_DBM ../dbinc/tcl_db.h /^#define DBTCL_DBM 1$/
+DBTCL_GLOBAL ../dbinc/tcl_db.h /^} DBTCL_GLOBAL;$/
+DBTCL_INFO ../dbinc/tcl_db.h /^} DBTCL_INFO;$/
+DBTCL_NDBM ../dbinc/tcl_db.h /^#define DBTCL_NDBM 2$/
+DBTCL_PREP ../dbinc/tcl_db.h /^#define DBTCL_PREP 64 \/* Size of txn_recover prep/
+DBTXN_METHOD ../cxx/cxx_txn.cpp /^\/\/ Helper macro for simple methods that pass thr/
+DBTYPE ../dbinc/db.in /^} DBTYPE;$/
+DBT_LOCKED ../libdb_java/db_java_wrap.c /^} DBT_LOCKED;$/
DB_ADDSTR ../env/env_open.c /^#define DB_ADDSTR(add) { \\$/
-DB_ADD_BIG ../dbinc/db_am.h 25
-DB_ADD_DUP ../dbinc/db_am.h 23
-DB_AES_CHUNK ../dbinc/crypto.h 68
-DB_AES_KEYLEN ../dbinc/crypto.h 67
-DB_AFTER ../dbinc/db.in 1123
-DB_AGGRESSIVE ../dbinc/db.in 344
+DB_ADD_BIG ../dbinc/db_am.h /^#define DB_ADD_BIG 3$/
+DB_ADD_DUP ../dbinc/db_am.h /^#define DB_ADD_DUP 1$/
+DB_ADD_PAGE_COMPAT ../dbinc/db_am.h /^#define DB_ADD_PAGE_COMPAT 5 \/* Compatibility for/
+DB_AES_CHUNK ../dbinc/crypto.h /^#define DB_AES_CHUNK 16 \/* AES byte unit size *\//
+DB_AES_KEYLEN ../dbinc/crypto.h /^#define DB_AES_KEYLEN 128 \/* AES key length *\/$/
+DB_AFTER ../dbinc/db.in /^#define DB_AFTER 1 \/* c_put() *\/$/
+DB_AGGRESSIVE ../dbinc/db.in /^#define DB_AGGRESSIVE 0x0000001 \/* Salvage /
DB_ALIGN ../dbinc/db_int.in /^#define DB_ALIGN(v, bound) \\$/
-DB_ALREADY_ABORTED ../dbinc/db.in 1215
-DB_AM_CHKSUM ../dbinc/db.in 1483
-DB_AM_CL_WRITER ../dbinc/db.in 1484
-DB_AM_COMPENSATE ../dbinc/db.in 1485
-DB_AM_CREATED ../dbinc/db.in 1486
-DB_AM_CREATED_MSTR ../dbinc/db.in 1487
-DB_AM_DBM_ERROR ../dbinc/db.in 1488
-DB_AM_DELIMITER ../dbinc/db.in 1489
-DB_AM_DIRTY ../dbinc/db.in 1490
-DB_AM_DISCARD ../dbinc/db.in 1491
-DB_AM_DUP ../dbinc/db.in 1492
-DB_AM_DUPSORT ../dbinc/db.in 1493
-DB_AM_ENCRYPT ../dbinc/db.in 1494
-DB_AM_FIXEDLEN ../dbinc/db.in 1495
-DB_AM_INMEM ../dbinc/db.in 1496
-DB_AM_INORDER ../dbinc/db.in 1497
-DB_AM_IN_RENAME ../dbinc/db.in 1498
-DB_AM_NOT_DURABLE ../dbinc/db.in 1499
-DB_AM_OPEN_CALLED ../dbinc/db.in 1500
-DB_AM_PAD ../dbinc/db.in 1501
-DB_AM_PGDEF ../dbinc/db.in 1502
-DB_AM_RDONLY ../dbinc/db.in 1503
-DB_AM_RECNUM ../dbinc/db.in 1504
-DB_AM_RECOVER ../dbinc/db.in 1505
-DB_AM_RENUMBER ../dbinc/db.in 1506
-DB_AM_REPLICATION ../dbinc/db.in 1507
-DB_AM_REVSPLITOFF ../dbinc/db.in 1508
-DB_AM_SECONDARY ../dbinc/db.in 1509
-DB_AM_SNAPSHOT ../dbinc/db.in 1510
-DB_AM_SUBDB ../dbinc/db.in 1511
-DB_AM_SWAP ../dbinc/db.in 1512
-DB_AM_TXN ../dbinc/db.in 1513
-DB_AM_VERIFYING ../dbinc/db.in 1514
-DB_APPEND ../dbinc/db.in 1124
-DB_ARCH_ABS ../dbinc/db.in 520
-DB_ARCH_DATA ../dbinc/db.in 521
-DB_ARCH_LOG ../dbinc/db.in 522
-DB_ARCH_REMOVE ../dbinc/db.in 523
-DB_ASSERT ../dbinc/debug.h /^#define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(/
-DB_AUTO_COMMIT ../dbinc/db.in 225
-DB_BEFORE ../dbinc/db.in 1125
-DB_BEGIN_SINGLE_THREAD ../dbinc/mutex.h 17
-DB_BTREEMAGIC ../dbinc/db.in 1107
-DB_BTREEOLDVER ../dbinc/db.in 1106
-DB_BTREEVERSION ../dbinc/db.in 1105
-DB_BTREE_STAT ../dbinc/db.in 128
-DB_BUFFER_SMALL ../dbinc/db.in 1187
-DB_CACHED_COUNTS ../dbinc/db.in 1126
-DB_CACHESIZE_MIN ../dbinc/mp.h 19
-DB_CACHE_PRIORITY ../dbinc/db.in 651
-DB_CALLBACK_C_INTERCEPT ../cxx/cxx_db.cpp /^#define DB_CALLBACK_C_INTERCEPT(_name, _rettype, _/
-DB_CDB_ALLDB ../dbinc/db.in 278
-DB_CHKSUM ../dbinc/db.in 314
-DB_CIPHER ../dbinc/db.in 129
-DB_COMMIT_FLUSH ../dbinc/log.h 292
-DB_CONSUME ../dbinc/db.in 1127
-DB_CONSUME_WAIT ../dbinc/db.in 1128
-DB_CREATE ../dbinc/db.in 190
-DB_CURRENT ../dbinc/db.in 1129
-DB_CXX_NO_EXCEPTIONS ../dbinc/db.in 191
-DB_CXX_PRIVATE_ENV ../dbinc/cxx_int.h 75
-DB_DBM_HSEARCH ../dbinc/db.in 2080
-DB_DBT_APPMALLOC ../dbinc/db.in 175
-DB_DBT_DUPOK ../dbinc/db.in 181
-DB_DBT_ISSET ../dbinc/db.in 176
-DB_DBT_MALLOC ../dbinc/db.in 177
-DB_DBT_PARTIAL ../dbinc/db.in 178
-DB_DBT_REALLOC ../dbinc/db.in 179
-DB_DBT_USERMEM ../dbinc/db.in 180
-DB_DEF_IOSIZE ../dbinc/db_int.in 100
-DB_DEGREE_2 ../dbinc/db.in 226
-DB_DELETED ../dbinc/db.in 1216
+DB_ALREADY_ABORTED ../dbinc/db.in /^#define DB_ALREADY_ABORTED (-30899)$/
+DB_AM_CHKSUM ../dbinc/db.in /^#define DB_AM_CHKSUM 0x00000001 \/* Checksumming /
+DB_AM_CL_WRITER ../dbinc/db.in /^#define DB_AM_CL_WRITER 0x00000002 \/* Allow writ/
+DB_AM_COMPENSATE ../dbinc/db.in /^#define DB_AM_COMPENSATE 0x00000004 \/* Created by/
+DB_AM_CREATED ../dbinc/db.in /^#define DB_AM_CREATED 0x00000008 \/* Database was/
+DB_AM_CREATED_MSTR ../dbinc/db.in /^#define DB_AM_CREATED_MSTR 0x00000010 \/* Encompas/
+DB_AM_DBM_ERROR ../dbinc/db.in /^#define DB_AM_DBM_ERROR 0x00000020 \/* Error in D/
+DB_AM_DELIMITER ../dbinc/db.in /^#define DB_AM_DELIMITER 0x00000040 \/* Variable l/
+DB_AM_DISCARD ../dbinc/db.in /^#define DB_AM_DISCARD 0x00000080 \/* Discard any /
+DB_AM_DUP ../dbinc/db.in /^#define DB_AM_DUP 0x00000100 \/* DB_DUP *\/$/
+DB_AM_DUPSORT ../dbinc/db.in /^#define DB_AM_DUPSORT 0x00000200 \/* DB_DUPSORT */
+DB_AM_ENCRYPT ../dbinc/db.in /^#define DB_AM_ENCRYPT 0x00000400 \/* Encryption */
+DB_AM_FIXEDLEN ../dbinc/db.in /^#define DB_AM_FIXEDLEN 0x00000800 \/* Fixed-lengt/
+DB_AM_INMEM ../dbinc/db.in /^#define DB_AM_INMEM 0x00001000 \/* In-memory; no /
+DB_AM_INORDER ../dbinc/db.in /^#define DB_AM_INORDER 0x00002000 \/* DB_INORDER */
+DB_AM_IN_RENAME ../dbinc/db.in /^#define DB_AM_IN_RENAME 0x00004000 \/* File is be/
+DB_AM_NOT_DURABLE ../dbinc/db.in /^#define DB_AM_NOT_DURABLE 0x00008000 \/* Do not lo/
+DB_AM_OPEN_CALLED ../dbinc/db.in /^#define DB_AM_OPEN_CALLED 0x00010000 \/* DB->open /
+DB_AM_PAD ../dbinc/db.in /^#define DB_AM_PAD 0x00020000 \/* Fixed-length rec/
+DB_AM_PGDEF ../dbinc/db.in /^#define DB_AM_PGDEF 0x00040000 \/* Page size was /
+DB_AM_RDONLY ../dbinc/db.in /^#define DB_AM_RDONLY 0x00080000 \/* Database is r/
+DB_AM_READ_UNCOMMITTED ../dbinc/db.in /^#define DB_AM_READ_UNCOMMITTED 0x00100000 \/* Supp/
+DB_AM_RECNUM ../dbinc/db.in /^#define DB_AM_RECNUM 0x00200000 \/* DB_RECNUM *\//
+DB_AM_RECOVER ../dbinc/db.in /^#define DB_AM_RECOVER 0x00400000 \/* DB opened by/
+DB_AM_RENUMBER ../dbinc/db.in /^#define DB_AM_RENUMBER 0x00800000 \/* DB_RENUMBER/
+DB_AM_REVSPLITOFF ../dbinc/db.in /^#define DB_AM_REVSPLITOFF 0x01000000 \/* DB_REVSPL/
+DB_AM_SECONDARY ../dbinc/db.in /^#define DB_AM_SECONDARY 0x02000000 \/* Database i/
+DB_AM_SNAPSHOT ../dbinc/db.in /^#define DB_AM_SNAPSHOT 0x04000000 \/* DB_SNAPSHOT/
+DB_AM_SUBDB ../dbinc/db.in /^#define DB_AM_SUBDB 0x08000000 \/* Subdatabases s/
+DB_AM_SWAP ../dbinc/db.in /^#define DB_AM_SWAP 0x10000000 \/* Pages need to b/
+DB_AM_TXN ../dbinc/db.in /^#define DB_AM_TXN 0x20000000 \/* Opened in a tran/
+DB_AM_VERIFYING ../dbinc/db.in /^#define DB_AM_VERIFYING 0x40000000 \/* DB handle /
+DB_APPEND ../dbinc/db.in /^#define DB_APPEND 2 \/* put() *\/$/
+DB_ARCH_ABS ../dbinc/db.in /^#define DB_ARCH_ABS 0x001 \/* Absolute pathnames./
+DB_ARCH_DATA ../dbinc/db.in /^#define DB_ARCH_DATA 0x002 \/* Data files. *\/$/
+DB_ARCH_LOG ../dbinc/db.in /^#define DB_ARCH_LOG 0x004 \/* Log files. *\/$/
+DB_ARCH_REMOVE ../dbinc/db.in /^#define DB_ARCH_REMOVE 0x008 \/* Remove log files./
+DB_ASSERT ../dbinc/debug.h /^#define DB_ASSERT(env, e) \\$/
+DB_ASSOC_IMMUTABLE_KEY ../dbinc/db.in /^#define DB_ASSOC_IMMUTABLE_KEY 0x00000001 \/* S/
+DB_AUTO_COMMIT ../dbinc/db.in /^#define DB_AUTO_COMMIT 0x02000000\/* Implied/
+DB_BEFORE ../dbinc/db.in /^#define DB_BEFORE 3 \/* c_put() *\/$/
+DB_BEGIN_SINGLE_THREAD ../dbinc/mutex.h /^#define DB_BEGIN_SINGLE_THREAD do { \\$/
+DB_BTREEMAGIC ../dbinc/db.in /^#define DB_BTREEMAGIC 0x053162$/
+DB_BTREEOLDVER ../dbinc/db.in /^#define DB_BTREEOLDVER 8 \/* Oldest btree version/
+DB_BTREEVERSION ../dbinc/db.in /^#define DB_BTREEVERSION 9 \/* Current btree versi/
+DB_BTREE_STAT ../dbinc/db.in /^struct __db_bt_stat; typedef struct __db_bt_stat D/
+DB_BUFFER_SMALL ../dbinc/db.in /^#define DB_BUFFER_SMALL (-30999)\/* User memory t/
+DB_CACHESIZE_MIN ../dbinc/mp.h /^#define DB_CACHESIZE_MIN (20 * 1024)$/
+DB_CACHE_PRIORITY ../dbinc/db.in /^} DB_CACHE_PRIORITY;$/
+DB_CDB_ALLDB ../dbinc/db.in /^#define DB_CDB_ALLDB 0x00004000\/* Set CDB l/
+DB_CHKSUM ../dbinc/db.in /^#define DB_CHKSUM 0x00004000 \/* Do checksum/
+DB_CIPHER ../dbinc/db.in /^struct __db_cipher; typedef struct __db_cipher DB_/
+DB_CLEARLEN_NOTSET ../dbinc/db_int.in /^#define DB_CLEARLEN_NOTSET UINT32_MAX \/* Not yet /
+DB_COMMIT_FLUSH ../dbinc/log.h /^#define DB_COMMIT_FLUSH 0x0001 \/* Flush the log /
+DB_COMPACT ../dbinc/db.in /^struct __db_compact; typedef struct __db_compact D/
+DB_COMPACT_FLAGS ../dbinc/db.in /^#define DB_COMPACT_FLAGS \\$/
+DB_CONSUME ../dbinc/db.in /^#define DB_CONSUME 4 \/* get() *\/$/
+DB_CONSUME_WAIT ../dbinc/db.in /^#define DB_CONSUME_WAIT 5 \/* get() *\/$/
+DB_CREATE ../dbinc/db.in /^#define DB_CREATE 0x0000001 \/* Create file /
+DB_CURRENT ../dbinc/db.in /^#define DB_CURRENT 6 \/* c_get(), c_put(), DB_LO/
+DB_CXX_NO_EXCEPTIONS ../dbinc/db.in /^#define DB_CXX_NO_EXCEPTIONS 0x0000001 \/* C++: r/
+DB_DBM_HSEARCH ../dbinc/db.in /^#define DB_DBM_HSEARCH 0 \/* No historic interfac/
+DB_DBT_APPMALLOC ../dbinc/db.in /^#define DB_DBT_APPMALLOC 0x001 \/* Callback alloca/
+DB_DBT_DUPOK ../dbinc/db.in /^#define DB_DBT_DUPOK 0x080 \/* Insert if duplicat/
+DB_DBT_ISSET ../dbinc/db.in /^#define DB_DBT_ISSET 0x002 \/* Lower level calls /
+DB_DBT_MALLOC ../dbinc/db.in /^#define DB_DBT_MALLOC 0x004 \/* Return in malloc'/
+DB_DBT_PARTIAL ../dbinc/db.in /^#define DB_DBT_PARTIAL 0x008 \/* Partial put\/get/
+DB_DBT_REALLOC ../dbinc/db.in /^#define DB_DBT_REALLOC 0x010 \/* Return in reallo/
+DB_DBT_USERCOPY ../dbinc/db.in /^#define DB_DBT_USERCOPY 0x020 \/* Use the user-su/
+DB_DBT_USERMEM ../dbinc/db.in /^#define DB_DBT_USERMEM 0x040 \/* Return in user's/
+DB_DEF_IOSIZE ../dbinc/db_int.in /^#define DB_DEF_IOSIZE (8 * 1024)$/
+DB_DEGREE_2 ../dbinc/db.in /^#define DB_DEGREE_2 0x04000000\/* Historic n/
+DB_DELETED ../dbinc/db.in /^#define DB_DELETED (-30898)\/* Recovery file mark/
DB_DESTRUCTOR ../cxx/cxx_db.cpp /^#define DB_DESTRUCTOR(_name, _argspec, _arglist, _/
-DB_DIRECT ../dbinc/db.in 306
-DB_DIRECT_DB ../dbinc/db.in 279
-DB_DIRECT_LOG ../dbinc/db.in 280
-DB_DIRTY_READ ../dbinc/db.in 227
-DB_DONOTINDEX ../dbinc/db.in 1188
-DB_DSYNC_LOG ../dbinc/db.in 281
-DB_DUP ../dbinc/db.in 315
-DB_DUPSORT ../dbinc/db.in 316
-DB_DURABLE_UNKNOWN ../dbinc/db.in 307
-DB_EID_BROADCAST ../dbinc/db.in 957
-DB_EID_INVALID ../dbinc/db.in 958
-DB_ENCRYPT ../dbinc/db.in 317
-DB_ENCRYPT_AES ../dbinc/db.in 273
-DB_ENC_MAGIC ../dbinc/hmac.h 29
-DB_END_SINGLE_THREAD ../dbinc/mutex.h 18
-DB_ENV ../dbinc/db.in 131
-DB_ENV_AUTO_COMMIT ../dbinc/db.in 2049
-DB_ENV_CDB ../dbinc/db.in 2050
-DB_ENV_CDB_ALLDB ../dbinc/db.in 2051
-DB_ENV_CREATE ../dbinc/db.in 2052
-DB_ENV_DBLOCAL ../dbinc/db.in 2053
-DB_ENV_DIRECT_DB ../dbinc/db.in 2054
-DB_ENV_DIRECT_LOG ../dbinc/db.in 2055
-DB_ENV_DSYNC_LOG ../dbinc/db.in 2056
-DB_ENV_FATAL ../dbinc/db.in 2057
+DB_DIRECT ../dbinc/db.in /^#define DB_DIRECT 0x0004000 \/* Don't buffer/
+DB_DIRECT_DB ../dbinc/db.in /^#define DB_DIRECT_DB 0x00008000\/* Don't buf/
+DB_DIRECT_LOG ../dbinc/db.in /^#define DB_DIRECT_LOG 0x00010000\/* Don't bu/
+DB_DIRTY_READ ../dbinc/db.in /^#define DB_DIRTY_READ 0x08000000\/* Historic/
+DB_DONOTINDEX ../dbinc/db.in /^#define DB_DONOTINDEX (-30998)\/* "Null" return f/
+DB_DSYNC_DB ../dbinc/db.in /^#define DB_DSYNC_DB 0x00020000\/* Set O_DSYN/
+DB_DSYNC_LOG ../dbinc/db.in /^#define DB_DSYNC_LOG 0x00040000\/* Set O_DSY/
+DB_DUP ../dbinc/db.in /^#define DB_DUP 0x00008000 \/* Btree, Hash: /
+DB_DUPSORT ../dbinc/db.in /^#define DB_DUPSORT 0x00010000 \/* Btree, Has/
+DB_DURABLE_UNKNOWN ../dbinc/db.in /^#define DB_DURABLE_UNKNOWN 0x0000002 \/* Durabi/
+DB_EID_BROADCAST ../dbinc/db.in /^#define DB_EID_BROADCAST -1$/
+DB_EID_INVALID ../dbinc/db.in /^#define DB_EID_INVALID -2$/
+DB_ENCRYPT ../dbinc/db.in /^#define DB_ENCRYPT 0x00020000 \/* Btree, Has/
+DB_ENCRYPT_AES ../dbinc/db.in /^#define DB_ENCRYPT_AES 0x0000001 \/* AES, as/
+DB_ENC_MAGIC ../dbinc/hmac.h /^#define DB_ENC_MAGIC "encryption and decryption ke/
+DB_END_SINGLE_THREAD ../dbinc/mutex.h /^#define DB_END_SINGLE_THREAD (void)semGive(DB_GLOB/
+DB_ENTRY ../dbinc/log.h /^} DB_ENTRY;$/
+DB_ENV ../dbinc/db.in /^struct __db_env; typedef struct __db_env DB_ENV;$/
+DB_ENV_AUTO_COMMIT ../dbinc/db.in /^#define DB_ENV_AUTO_COMMIT 0x00000001 \/* DB_AUTO_/
+DB_ENV_CDB ../dbinc/db.in /^#define DB_ENV_CDB 0x00000002 \/* DB_INIT_CDB. */
+DB_ENV_CDB_ALLDB ../dbinc/db.in /^#define DB_ENV_CDB_ALLDB 0x00000004 \/* CDB enviro/
+DB_ENV_CREATE ../dbinc/db.in /^#define DB_ENV_CREATE 0x00000008 \/* DB_CREATE se/
+DB_ENV_DBLOCAL ../dbinc/db.in /^#define DB_ENV_DBLOCAL 0x00000010 \/* Environment/
+DB_ENV_DIRECT_DB ../dbinc/db.in /^#define DB_ENV_DIRECT_DB 0x00000020 \/* DB_DIRECT_/
+DB_ENV_DIRECT_LOG ../dbinc/db.in /^#define DB_ENV_DIRECT_LOG 0x00000040 \/* DB_DIRECT/
+DB_ENV_DSYNC_DB ../dbinc/db.in /^#define DB_ENV_DSYNC_DB 0x00000080 \/* DB_DSYNC_D/
+DB_ENV_DSYNC_LOG ../dbinc/db.in /^#define DB_ENV_DSYNC_LOG 0x00000100 \/* DB_DSYNC_L/
+DB_ENV_FATAL ../dbinc/db.in /^#define DB_ENV_FATAL 0x00000200 \/* Doing fatal r/
DB_ENV_INTERNAL ../libdb_java/db_java_wrap.c /^#define DB_ENV_INTERNAL(dbenv) ((dbenv)->api2_inte/
-DB_ENV_LOCKDOWN ../dbinc/db.in 2058
-DB_ENV_LOG_AUTOREMOVE ../dbinc/db.in 2059
-DB_ENV_LOG_INMEMORY ../dbinc/db.in 2060
-DB_ENV_NOLOCKING ../dbinc/db.in 2061
-DB_ENV_NOMMAP ../dbinc/db.in 2062
-DB_ENV_NOPANIC ../dbinc/db.in 2063
-DB_ENV_OPEN_CALLED ../dbinc/db.in 2064
-DB_ENV_OVERWRITE ../dbinc/db.in 2065
-DB_ENV_PRIVATE ../dbinc/db.in 2066
-DB_ENV_REGION_INIT ../dbinc/db.in 2067
-DB_ENV_RPCCLIENT ../dbinc/db.in 2068
-DB_ENV_RPCCLIENT_GIVEN ../dbinc/db.in 2069
-DB_ENV_SYSTEM_MEM ../dbinc/db.in 2070
+DB_ENV_LOCKDOWN ../dbinc/db.in /^#define DB_ENV_LOCKDOWN 0x00000400 \/* DB_LOCKDOW/
+DB_ENV_LOG_AUTOREMOVE ../dbinc/db.in /^#define DB_ENV_LOG_AUTOREMOVE 0x00000800 \/* DB_/
+DB_ENV_LOG_INMEMORY ../dbinc/db.in /^#define DB_ENV_LOG_INMEMORY 0x00001000 \/* DB_/
+DB_ENV_MULTIVERSION ../dbinc/db.in /^#define DB_ENV_MULTIVERSION 0x00002000 \/* DB_MULT/
+DB_ENV_NOLOCKING ../dbinc/db.in /^#define DB_ENV_NOLOCKING 0x00004000 \/* DB_NOLOCKI/
+DB_ENV_NOMMAP ../dbinc/db.in /^#define DB_ENV_NOMMAP 0x00008000 \/* DB_NOMMAP se/
+DB_ENV_NOPANIC ../dbinc/db.in /^#define DB_ENV_NOPANIC 0x00010000 \/* Okay if pan/
+DB_ENV_OPEN_CALLED ../dbinc/db.in /^#define DB_ENV_OPEN_CALLED 0x00020000 \/* DB_ENV->/
+DB_ENV_OVERWRITE ../dbinc/db.in /^#define DB_ENV_OVERWRITE 0x00040000 \/* DB_OVERWRI/
+DB_ENV_PRIVATE ../dbinc/db.in /^#define DB_ENV_PRIVATE 0x00080000 \/* DB_PRIVATE /
+DB_ENV_REGION_INIT ../dbinc/db.in /^#define DB_ENV_REGION_INIT 0x00100000 \/* DB_REGIO/
+DB_ENV_RPCCLIENT ../dbinc/db.in /^#define DB_ENV_RPCCLIENT 0x00200000 \/* DB_RPCCLIE/
+DB_ENV_RPCCLIENT_GIVEN ../dbinc/db.in /^#define DB_ENV_RPCCLIENT_GIVEN 0x00400000 \/* User/
+DB_ENV_SYSTEM_MEM ../dbinc/db.in /^#define DB_ENV_SYSTEM_MEM 0x00800000 \/* DB_SYSTEM/
DB_ENV_TEST_RECOVERY ../dbinc/debug.h /^#define DB_ENV_TEST_RECOVERY(env, val, ret, name) /
-DB_ENV_THREAD ../dbinc/db.in 2071
-DB_ENV_TIME_NOTGRANTED ../dbinc/db.in 2072
-DB_ENV_TXN_NOSYNC ../dbinc/db.in 2073
-DB_ENV_TXN_WRITE_NOSYNC ../dbinc/db.in 2074
-DB_ENV_YIELDCPU ../dbinc/db.in 2075
-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 259
-DB_EXTENT ../dbinc/db.in 308
-DB_FAST_STAT ../dbinc/db.in 1130
-DB_FCNTL_LOCKING ../dbinc/db.in 260
-DB_FCNTL_OFF_GEN ../dbinc/mutex.h 960
-DB_FCNTL_OFF_LOCK ../dbinc/mutex.h 961
-DB_FCNTL_OFF_MPOOL ../dbinc/mutex.h 962
-DB_FH ../dbinc/db.in 157
-DB_FH_NOSYNC ../dbinc/os.h 84
-DB_FH_OPENED ../dbinc/os.h 85
-DB_FH_UNLINK ../dbinc/os.h 86
-DB_FILE_ID_LEN ../dbinc/db.in 369
-DB_FIRST ../dbinc/db.in 1131
-DB_FLUSH ../dbinc/db.in 526
-DB_FORCE ../dbinc/db.in 192
-DB_FTYPE_NOTSET ../dbinc/db_int.in 441
-DB_FTYPE_SET ../dbinc/db_int.in 440
-DB_GET_BOTH ../dbinc/db.in 1132
-DB_GET_BOTHC ../dbinc/db.in 1133
-DB_GET_BOTH_RANGE ../dbinc/db.in 1134
-DB_GET_RECNO ../dbinc/db.in 1135
+DB_ENV_TEST_RECYCLE ../dbinc/debug.h /^#define DB_ENV_TEST_RECYCLE(env, ret) do { \\$/
+DB_ENV_THREAD ../dbinc/db.in /^#define DB_ENV_THREAD 0x01000000 \/* DB_THREAD se/
+DB_ENV_TIME_NOTGRANTED ../dbinc/db.in /^#define DB_ENV_TIME_NOTGRANTED 0x02000000 \/* DB_T/
+DB_ENV_TXN_NOSYNC ../dbinc/db.in /^#define DB_ENV_TXN_NOSYNC 0x04000000 \/* DB_TXN_NO/
+DB_ENV_TXN_SNAPSHOT ../dbinc/db.in /^#define DB_ENV_TXN_SNAPSHOT 0x08000000 \/* DB_TXN_/
+DB_ENV_TXN_WRITE_NOSYNC ../dbinc/db.in /^#define DB_ENV_TXN_WRITE_NOSYNC 0x10000000 \/* DB_/
+DB_ENV_YIELDCPU ../dbinc/db.in /^#define DB_ENV_YIELDCPU 0x20000000 \/* DB_YIELDCP/
+DB_EVENT ../dbinc/db_int.in /^#define DB_EVENT(dbenv, e, einfo) do { \\$/
+DB_EVENT_NO_SUCH_EVENT ../dbinc/db.in /^#define DB_EVENT_NO_SUCH_EVENT 0 \/* out-of-band /
+DB_EVENT_PANIC ../dbinc/db.in /^#define DB_EVENT_PANIC 1$/
+DB_EVENT_REP_CLIENT ../dbinc/db.in /^#define DB_EVENT_REP_CLIENT 2$/
+DB_EVENT_REP_MASTER ../dbinc/db.in /^#define DB_EVENT_REP_MASTER 3$/
+DB_EVENT_REP_NEWMASTER ../dbinc/db.in /^#define DB_EVENT_REP_NEWMASTER 4$/
+DB_EVENT_REP_STARTUPDONE ../dbinc/db.in /^#define DB_EVENT_REP_STARTUPDONE 5$/
+DB_EVENT_WRITE_FAILED ../dbinc/db.in /^#define DB_EVENT_WRITE_FAILED 6$/
+DB_EXCL ../dbinc/db.in /^#define DB_EXCL 0x0004000 \/* Exclusive ope/
+DB_EXTENT ../dbinc/db.in /^#define DB_EXTENT 0x0008000 \/* internal: de/
+DB_FAST_STAT ../dbinc/db.in /^#define DB_FAST_STAT 0x0000001 \/* Don't tra/
+DB_FCNTL_LOCKING ../dbinc/db.in /^#define DB_FCNTL_LOCKING 0x0008000 \/* UNDOC:/
+DB_FH ../dbinc/db.in /^struct __fh_t; typedef struct __fh_t DB_FH;$/
+DB_FH_NOSYNC ../dbinc/os.h /^#define DB_FH_NOSYNC 0x01 \/* Handle doesn't need/
+DB_FH_OPENED ../dbinc/os.h /^#define DB_FH_OPENED 0x02 \/* Handle is valid. */
+DB_FH_UNLINK ../dbinc/os.h /^#define DB_FH_UNLINK 0x04 \/* Unlink on close *\//
+DB_FILE_ID_LEN ../dbinc/db.in /^#define DB_FILE_ID_LEN 20 \/* Unique file ID leng/
+DB_FIRST ../dbinc/db.in /^#define DB_FIRST 7 \/* c_get(), DB_LOGC->get() */
+DB_FLUSH ../dbinc/db.in /^#define DB_FLUSH 0x001 \/* Flush data to disk (pu/
+DB_FNAME_DURABLE ../dbinc/log.h /^#define DB_FNAME_DURABLE 0x02 \/* File is durable./
+DB_FNAME_NOTLOGGED ../dbinc/log.h /^#define DB_FNAME_NOTLOGGED 0x01 \/* Log of close f/
+DB_FORCE ../dbinc/db.in /^#define DB_FORCE 0x0000004 \/* Force (anythi/
+DB_FREELIST_ONLY ../dbinc/db.in /^#define DB_FREELIST_ONLY 0x00004000 \/* Just /
+DB_FREEZER_MAGIC ../mp/mp_mvcc.c /^#define DB_FREEZER_MAGIC 0x06102002$/
+DB_FREE_SPACE ../dbinc/db.in /^#define DB_FREE_SPACE 0x00008000 \/* Free /
+DB_FTYPE_NOTSET ../dbinc/db_int.in /^#define DB_FTYPE_NOTSET 0 \/* Don't call... *\//
+DB_FTYPE_SET ../dbinc/db_int.in /^#define DB_FTYPE_SET -1 \/* Call pgin\/pgout fun/
+DB_GET_BOTH ../dbinc/db.in /^#define DB_GET_BOTH 8 \/* get(), c_get() *\/$/
+DB_GET_BOTHC ../dbinc/db.in /^#define DB_GET_BOTHC 9 \/* c_get() (internal) */
+DB_GET_BOTH_RANGE ../dbinc/db.in /^#define DB_GET_BOTH_RANGE 10 \/* get(), c_get() */
+DB_GET_RECNO ../dbinc/db.in /^#define DB_GET_RECNO 11 \/* c_get() *\/$/
DB_GLOBAL ../dbinc/globals.h /^#define DB_GLOBAL(v) __db_global_values.v$/
-DB_GROW_SIZE ../dbinc/log.h 89
-DB_HANDLE_LOCK ../dbinc/db.in 484
-DB_HASHMAGIC ../dbinc/db.in 1111
-DB_HASHOLDVER ../dbinc/db.in 1110
-DB_HASHVERSION ../dbinc/db.in 1109
-DB_HASH_DUP ../dbinc/db_page.h 123
-DB_HASH_DUPSORT ../dbinc/db_page.h 125
-DB_HASH_STAT ../dbinc/db.in 132
-DB_HASH_SUBDB ../dbinc/db_page.h 124
+DB_GLOBALS ../dbinc/globals.h /^} DB_GLOBALS;$/
+DB_GROW_SIZE ../dbinc/log.h /^#define DB_GROW_SIZE 64$/
+DB_HANDLE_LOCK ../dbinc/db.in /^#define DB_HANDLE_LOCK 1$/
+DB_HASHMAGIC ../dbinc/db.in /^#define DB_HASHMAGIC 0x061561$/
+DB_HASHOLDVER ../dbinc/db.in /^#define DB_HASHOLDVER 7 \/* Oldest hash version s/
+DB_HASHTAB ../dbinc/db_int.in /^typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;$/
+DB_HASHVERSION ../dbinc/db.in /^#define DB_HASHVERSION 8 \/* Current hash version/
+DB_HASH_DUP ../dbinc/db_page.h /^#define DB_HASH_DUP 0x01 \/* Duplicates. *\/$/
+DB_HASH_DUPSORT ../dbinc/db_page.h /^#define DB_HASH_DUPSORT 0x04 \/* Duplicates are /
+DB_HASH_STAT ../dbinc/db.in /^struct __db_h_stat; typedef struct __db_h_stat DB_/
+DB_HASH_SUBDB ../dbinc/db_page.h /^#define DB_HASH_SUBDB 0x02 \/* Subdatabases. *\//
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 95
-DB_INITENV_CDB_ALLDB ../env/env_open.c 96
-DB_INITENV_LOCK ../env/env_open.c 97
-DB_INITENV_LOG ../env/env_open.c 98
-DB_INITENV_MPOOL ../env/env_open.c 99
-DB_INITENV_REP ../env/env_open.c 100
-DB_INITENV_TXN ../env/env_open.c 101
-DB_INITIALIZE_DB_GLOBALS ../env/env_method.c 31
-DB_INIT_CDB ../dbinc/db.in 244
-DB_INIT_LOCK ../dbinc/db.in 245
-DB_INIT_LOG ../dbinc/db.in 246
-DB_INIT_MPOOL ../dbinc/db.in 247
-DB_INIT_REP ../dbinc/db.in 248
-DB_INIT_TXN ../dbinc/db.in 249
-DB_INORDER ../dbinc/db.in 318
+DB_IMMUTABLE_KEY ../dbinc/db.in /^#define DB_IMMUTABLE_KEY 0x0004000 \/* Second/
+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_REP ../env/env_open.c /^#define DB_INITENV_REP 0x0020 \/* DB_INIT_REP *\//
+DB_INITENV_TXN ../env/env_open.c /^#define DB_INITENV_TXN 0x0040 \/* DB_INIT_TXN *\//
+DB_INITIALIZE_DB_GLOBALS ../env/env_method.c /^#define DB_INITIALIZE_DB_GLOBALS 1$/
+DB_INIT_CDB ../dbinc/db.in /^#define DB_INIT_CDB 0x0004000 \/* Concurrent/
+DB_INIT_DBT ../dbinc/db_int.in /^#define DB_INIT_DBT(dbt, d, s) do { \\$/
+DB_INIT_LOCK ../dbinc/db.in /^#define DB_INIT_LOCK 0x0008000 \/* Initializ/
+DB_INIT_LOG ../dbinc/db.in /^#define DB_INIT_LOG 0x0010000 \/* Initialize/
+DB_INIT_MPOOL ../dbinc/db.in /^#define DB_INIT_MPOOL 0x0020000 \/* Initiali/
+DB_INIT_REP ../dbinc/db.in /^#define DB_INIT_REP 0x0040000 \/* Initialize/
+DB_INIT_TXN ../dbinc/db.in /^#define DB_INIT_TXN 0x0080000 \/* Initialize/
+DB_INORDER ../dbinc/db.in /^#define DB_INORDER 0x00040000 \/* Queue: str/
DB_INTERNAL ../libdb_java/db_java_wrap.c /^#define DB_INTERNAL(db) ((db)->api_internal)$/
-DB_IO_READ ../dbinc/os.h 55
-DB_IO_WRITE ../dbinc/os.h 56
+DB_IO_READ ../dbinc/os.h /^#define DB_IO_READ 1$/
+DB_IO_WRITE ../dbinc/os.h /^#define DB_IO_WRITE 2$/
+DB_IS_READONLY ../dbinc/db_am.h /^#define DB_IS_READONLY(dbp) \\$/
DB_IS_THREADED ../dbinc/db_int.in /^#define DB_IS_THREADED(dbp) \\$/
-DB_IV_BYTES ../dbinc/db_int.in 493
-DB_JOINENV ../dbinc/db.in 250
-DB_JOIN_ITEM ../dbinc/db.in 1136
-DB_JOIN_NOSORT ../dbinc/db.in 339
-DB_KEYEMPTY ../dbinc/db.in 1189
-DB_KEYEXIST ../dbinc/db.in 1190
-DB_KEYFIRST ../dbinc/db.in 1137
-DB_KEYLAST ../dbinc/db.in 1138
-DB_KEY_RANGE ../dbinc/db.in 159
-DB_LAST ../dbinc/db.in 1139
-DB_LOCK ../dbinc/db.in 135
-DB_LOCKDOWN ../dbinc/db.in 251
-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 136
-DB_LOCKVERSION ../dbinc/db.in 367
-DB_LOCK_ABORT ../dbinc/db.in 387
-DB_LOCK_CDB_N ../lock/lock_region.c 53
-DB_LOCK_DEADLOCK ../dbinc/db.in 1191
-DB_LOCK_DEFAULT ../dbinc/db.in 376
-DB_LOCK_DEFAULT_N ../dbinc/lock.h 13
-DB_LOCK_DOALL ../dbinc/lock.h 200
-DB_LOCK_DOWNGRADE ../dbinc/lock.h 201
-DB_LOCK_EXPIRE ../dbinc/db.in 377
-DB_LOCK_FREE ../dbinc/lock.h 202
-DB_LOCK_ILOCK ../dbinc/db.in 133
-DB_LOCK_INVALIDID ../dbinc/lock.h 20
-DB_LOCK_MAXID ../dbinc/lock.h 21
-DB_LOCK_MAXLOCKS ../dbinc/db.in 378
-DB_LOCK_MAXWRITE ../dbinc/db.in 379
-DB_LOCK_MINLOCKS ../dbinc/db.in 380
-DB_LOCK_MINWRITE ../dbinc/db.in 381
-DB_LOCK_NOPROMOTE ../dbinc/lock.h 203
-DB_LOCK_NOREGION ../dbinc/lock.h 205
-DB_LOCK_NORUN ../dbinc/db.in 375
-DB_LOCK_NOTEXIST ../dbinc/db.in 1217
-DB_LOCK_NOTGRANTED ../dbinc/db.in 1192
-DB_LOCK_NOWAIT ../dbinc/db.in 388
-DB_LOCK_NOWAITERS ../dbinc/lock.h 206
-DB_LOCK_OLDEST ../dbinc/db.in 382
-DB_LOCK_RANDOM ../dbinc/db.in 383
-DB_LOCK_RECORD ../dbinc/db.in 389
-DB_LOCK_REMOVE ../dbinc/db.in 390
-DB_LOCK_RIW_N ../lock/lock_region.c 34
-DB_LOCK_SET_TIMEOUT ../dbinc/db.in 391
-DB_LOCK_STAT ../dbinc/db.in 134
-DB_LOCK_SWITCH ../dbinc/db.in 392
-DB_LOCK_UNLINK ../dbinc/lock.h 204
-DB_LOCK_UPGRADE ../dbinc/db.in 393
-DB_LOCK_YOUNGEST ../dbinc/db.in 384
-DB_LOG ../dbinc/log.h 58
-DB_LOGC ../dbinc/db.in 137
-DB_LOGC_BUF_SIZE ../dbinc/db.in 575
-DB_LOGFILEID_INVALID ../dbinc/db.in 1261
-DB_LOGMAGIC ../dbinc/db.in 517
-DB_LOGOLDVER ../dbinc/db.in 516
-DB_LOGVERSION ../dbinc/db.in 515
-DB_LOG_AUTOREMOVE ../dbinc/db.in 282
-DB_LOG_BUFFER_FULL ../dbinc/db.in 1193
-DB_LOG_CHKPNT ../dbinc/db.in 527
-DB_LOG_COMMIT ../dbinc/db.in 528
-DB_LOG_DISK ../dbinc/db.in 587
-DB_LOG_INMEMORY ../dbinc/db.in 283
-DB_LOG_LOCKED ../dbinc/db.in 588
-DB_LOG_NOCOPY ../dbinc/db.in 529
-DB_LOG_NOT_DURABLE ../dbinc/db.in 530
-DB_LOG_PERM ../dbinc/db.in 531
-DB_LOG_RESEND ../dbinc/db.in 532
-DB_LOG_SILENT_ERR ../dbinc/db.in 589
-DB_LOG_STAT ../dbinc/db.in 138
-DB_LOG_WRNOSYNC ../dbinc/db.in 533
-DB_LSN ../dbinc/db.in 139
-DB_MAC_KEY ../dbinc/db_int.in 494
-DB_MAC_MAGIC ../dbinc/hmac.h 28
-DB_MAXMMAPSIZE ../mp/mp_fopen.c 493
-DB_MAX_HANDLES ../dbinc/mutex.h 979
-DB_MAX_PAGES ../dbinc/db.in 107
-DB_MAX_PGSIZE ../dbinc/db_int.in 89
-DB_MAX_RECORDS ../dbinc/db.in 110
-DB_METHOD ../cxx/cxx_db.cpp /^#define DB_METHOD(_name, _argspec, _arglist, _reto/
+DB_IV_BYTES ../dbinc/db_int.in /^#define DB_IV_BYTES 16 \/* Bytes per IV *\/$/
+DB_JOINENV ../dbinc/db.in /^#define DB_JOINENV 0x0 \/* Compatibility. */
+DB_JOIN_ITEM ../dbinc/db.in /^#define DB_JOIN_ITEM 12 \/* c_get(); do not do pr/
+DB_JOIN_NOSORT ../dbinc/db.in /^#define DB_JOIN_NOSORT 0x0000001 \/* Don't t/
+DB_KEYEMPTY ../dbinc/db.in /^#define DB_KEYEMPTY (-30997)\/* Key\/data deleted/
+DB_KEYEXIST ../dbinc/db.in /^#define DB_KEYEXIST (-30996)\/* The key\/data pai/
+DB_KEYFIRST ../dbinc/db.in /^#define DB_KEYFIRST 13 \/* c_put() *\/$/
+DB_KEYLAST ../dbinc/db.in /^#define DB_KEYLAST 14 \/* c_put() *\/$/
+DB_KEY_RANGE ../dbinc/db.in /^struct __key_range; typedef struct __key_range DB_/
+DB_LAST ../dbinc/db.in /^#define DB_LAST 15 \/* c_get(), DB_LOGC->get() */
+DB_LOCK ../dbinc/db.in /^struct __db_lock_u; typedef struct __db_lock_u DB_/
+DB_LOCKDOWN ../dbinc/db.in /^#define DB_LOCKDOWN 0x0100000 \/* Lock memor/
+DB_LOCKER ../dbinc/lock.h /^} DB_LOCKER;$/
+DB_LOCKER_DELETED ../dbinc/lock.h /^#define DB_LOCKER_DELETED 0x0001$/
+DB_LOCKER_DIRTY ../dbinc/lock.h /^#define DB_LOCKER_DIRTY 0x0002$/
+DB_LOCKER_INABORT ../dbinc/lock.h /^#define DB_LOCKER_INABORT 0x0004$/
+DB_LOCKER_TIMEOUT ../dbinc/lock.h /^#define DB_LOCKER_TIMEOUT 0x0008$/
+DB_LOCKOBJ ../dbinc/lock.h /^} DB_LOCKOBJ;$/
+DB_LOCKREGION ../dbinc/lock.h /^} DB_LOCKREGION;$/
+DB_LOCKREQ ../dbinc/db.in /^struct __db_lockreq; typedef struct __db_lockreq D/
+DB_LOCKTAB ../dbinc/db.in /^struct __db_locktab; typedef struct __db_locktab D/
+DB_LOCKVERSION ../dbinc/db.in /^#define DB_LOCKVERSION 1$/
+DB_LOCK_ABORT ../dbinc/db.in /^#define DB_LOCK_ABORT 0x001 \/* Internal: Lock du/
+DB_LOCK_CDB_N ../lock/lock_region.c /^#define DB_LOCK_CDB_N 5$/
+DB_LOCK_DEADLOCK ../dbinc/db.in /^#define DB_LOCK_DEADLOCK (-30995)\/* Deadlock. *\//
+DB_LOCK_DEFAULT ../dbinc/db.in /^#define DB_LOCK_DEFAULT 1 \/* Default policy. *\//
+DB_LOCK_DEFAULT_N ../dbinc/lock.h /^#define DB_LOCK_DEFAULT_N 1000 \/* Default # of lo/
+DB_LOCK_DOALL ../dbinc/lock.h /^#define DB_LOCK_DOALL 0x010000$/
+DB_LOCK_EXPIRE ../dbinc/db.in /^#define DB_LOCK_EXPIRE 2 \/* Only expire locks, n/
+DB_LOCK_FREE ../dbinc/lock.h /^#define DB_LOCK_FREE 0x040000$/
+DB_LOCK_ILOCK ../dbinc/db.in /^struct __db_ilock; typedef struct __db_ilock DB_LO/
+DB_LOCK_INVALIDID ../dbinc/lock.h /^#define DB_LOCK_INVALIDID 0$/
+DB_LOCK_MAXID ../dbinc/lock.h /^#define DB_LOCK_MAXID 0x7fffffff$/
+DB_LOCK_MAXLOCKS ../dbinc/db.in /^#define DB_LOCK_MAXLOCKS 3 \/* Select locker with /
+DB_LOCK_MAXWRITE ../dbinc/db.in /^#define DB_LOCK_MAXWRITE 4 \/* Select locker with /
+DB_LOCK_MINLOCKS ../dbinc/db.in /^#define DB_LOCK_MINLOCKS 5 \/* Select locker with /
+DB_LOCK_MINWRITE ../dbinc/db.in /^#define DB_LOCK_MINWRITE 6 \/* Select locker with /
+DB_LOCK_NOPROMOTE ../dbinc/lock.h /^#define DB_LOCK_NOPROMOTE 0x080000$/
+DB_LOCK_NOREGION ../dbinc/lock.h /^#define DB_LOCK_NOREGION 0x200000$/
+DB_LOCK_NORUN ../dbinc/db.in /^#define DB_LOCK_NORUN 0$/
+DB_LOCK_NOTGRANTED ../dbinc/db.in /^#define DB_LOCK_NOTGRANTED (-30994)\/* Lock unavai/
+DB_LOCK_NOWAIT ../dbinc/db.in /^#define DB_LOCK_NOWAIT 0x002 \/* Don't wait on un/
+DB_LOCK_NOWAITERS ../dbinc/lock.h /^#define DB_LOCK_NOWAITERS 0x400000$/
+DB_LOCK_OLDEST ../dbinc/db.in /^#define DB_LOCK_OLDEST 7 \/* Select oldest locker/
+DB_LOCK_RANDOM ../dbinc/db.in /^#define DB_LOCK_RANDOM 8 \/* Select random locker/
+DB_LOCK_RECORD ../dbinc/db.in /^#define DB_LOCK_RECORD 0x004 \/* Internal: record/
+DB_LOCK_RIW_N ../lock/lock_region.c /^#define DB_LOCK_RIW_N 9$/
+DB_LOCK_SET_TIMEOUT ../dbinc/db.in /^#define DB_LOCK_SET_TIMEOUT 0x008 \/* Internal: se/
+DB_LOCK_STAT ../dbinc/db.in /^struct __db_lock_stat; typedef struct __db_lock_st/
+DB_LOCK_SWITCH ../dbinc/db.in /^#define DB_LOCK_SWITCH 0x010 \/* Internal: switch/
+DB_LOCK_UNLINK ../dbinc/lock.h /^#define DB_LOCK_UNLINK 0x100000$/
+DB_LOCK_UPGRADE ../dbinc/db.in /^#define DB_LOCK_UPGRADE 0x020 \/* Internal: upgra/
+DB_LOCK_YOUNGEST ../dbinc/db.in /^#define DB_LOCK_YOUNGEST 9 \/* Select youngest loc/
+DB_LOG ../dbinc/db.in /^struct __db_log; typedef struct __db_log DB_LOG;$/
+DB_LOGC ../dbinc/db.in /^struct __db_log_cursor; typedef struct __db_log_cu/
+DB_LOGFILEID_INVALID ../dbinc/db.in /^#define DB_LOGFILEID_INVALID -1$/
+DB_LOGMAGIC ../dbinc/db.in /^#define DB_LOGMAGIC 0x040988$/
+DB_LOGOLDVER ../dbinc/db.in /^#define DB_LOGOLDVER 8 \/* Oldest log version sup/
+DB_LOGVERSION ../dbinc/db.in /^#define DB_LOGVERSION 12 \/* Current log version./
+DB_LOGVERSION_42 ../dbinc/rep.h /^#define DB_LOGVERSION_42 8$/
+DB_LOGVERSION_43 ../dbinc/rep.h /^#define DB_LOGVERSION_43 10$/
+DB_LOGVERSION_44 ../dbinc/rep.h /^#define DB_LOGVERSION_44 11$/
+DB_LOGVERSION_45 ../dbinc/rep.h /^#define DB_LOGVERSION_45 12$/
+DB_LOG_AUTOREMOVE ../dbinc/db.in /^#define DB_LOG_AUTOREMOVE 0x00080000\/* Automa/
+DB_LOG_BUFFER_FULL ../dbinc/db.in /^#define DB_LOG_BUFFER_FULL (-30993)\/* In-memory l/
+DB_LOG_CHKPNT ../dbinc/db.in /^#define DB_LOG_CHKPNT 0x002 \/* Flush supports a /
+DB_LOG_COMMIT ../dbinc/db.in /^#define DB_LOG_COMMIT 0x004 \/* Flush supports a /
+DB_LOG_DISK ../dbinc/db.in /^#define DB_LOG_DISK 0x01 \/* Log record came from/
+DB_LOG_INMEMORY ../dbinc/db.in /^#define DB_LOG_INMEMORY 0x00100000\/* Store /
+DB_LOG_LOCKED ../dbinc/db.in /^#define DB_LOG_LOCKED 0x02 \/* Log region already/
+DB_LOG_NOCOPY ../dbinc/db.in /^#define DB_LOG_NOCOPY 0x008 \/* Don't copy data */
+DB_LOG_NOT_DURABLE ../dbinc/db.in /^#define DB_LOG_NOT_DURABLE 0x010 \/* Do not log; k/
+DB_LOG_PERM_42_44 ../dbinc/rep.h /^#define DB_LOG_PERM_42_44 0x20$/
+DB_LOG_RESEND_42_44 ../dbinc/rep.h /^#define DB_LOG_RESEND_42_44 0x40$/
+DB_LOG_SILENT_ERR ../dbinc/db.in /^#define DB_LOG_SILENT_ERR 0x04 \/* Turn-off error /
+DB_LOG_STAT ../dbinc/db.in /^struct __db_log_stat; typedef struct __db_log_stat/
+DB_LOG_WRNOSYNC ../dbinc/db.in /^#define DB_LOG_WRNOSYNC 0x020 \/* Write, don't sy/
+DB_LSN ../dbinc/db.in /^struct __db_lsn; typedef struct __db_lsn DB_LSN;$/
+DB_LSN_OFF_NOTSET ../dbinc/db_int.in /^#define DB_LSN_OFF_NOTSET -1 \/* Not yet set. *\//
+DB_LSN_STACK_SIZE ../dbinc/db_dispatch.h /^#define DB_LSN_STACK_SIZE 4$/
+DB_MAC_KEY ../dbinc/db_int.in /^#define DB_MAC_KEY 20 \/* Bytes per MAC checksum /
+DB_MAC_MAGIC ../dbinc/hmac.h /^#define DB_MAC_MAGIC "mac derivation key magic val/
+DB_MAXMMAPSIZE ../mp/mp_fopen.c /^#define DB_MAXMMAPSIZE (10 * 1024 * 1024) \/* 10 M/
+DB_MAXPATHLEN ../dbinc/db_int.in /^#define DB_MAXPATHLEN 1024$/
+DB_MAX_PAGES ../dbinc/db.in /^#define DB_MAX_PAGES 0xffffffff \/* >= # of pages /
+DB_MAX_PGSIZE ../dbinc/db_int.in /^#define DB_MAX_PGSIZE 0x010000 \/* Maximum page si/
+DB_MAX_RECORDS ../dbinc/db.in /^#define DB_MAX_RECORDS 0xffffffff \/* >= # of reco/
+DB_METHOD ../cxx/cxx_db.cpp /^\/\/ Helper macros for simple methods that pass th/
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 94
-DB_MIN_PGSIZE ../dbinc/db_int.in 88
-DB_MPOOL ../dbinc/db.in 140
-DB_MPOOLFILE ../dbinc/db.in 143
-DB_MPOOLFILE_METHOD ../cxx/cxx_mpool.cpp /^#define DB_MPOOLFILE_METHOD(_name, _argspec, _argl/
+DB_MINPAGECACHE ../dbinc/db_int.in /^#define DB_MINPAGECACHE 16$/
+DB_MIN_PGSIZE ../dbinc/db_int.in /^#define DB_MIN_PGSIZE 0x000200 \/* Minimum page si/
+DB_MPOOL ../dbinc/db.in /^struct __db_mpool; typedef struct __db_mpool DB_MP/
+DB_MPOOLFILE ../dbinc/db.in /^struct __db_mpoolfile; typedef struct __db_mpoolfi/
+DB_MPOOLFILE_METHOD ../cxx/cxx_mpool.cpp /^\/\/ Helper macros for simple methods that pass th/
DB_MPOOLFILE_METHOD_VOID ../cxx/cxx_mpool.cpp /^#define DB_MPOOLFILE_METHOD_VOID(_name, _argspec, /
-DB_MPOOL_CLEAN ../dbinc/db.in 635
-DB_MPOOL_CREATE ../dbinc/db.in 630
-DB_MPOOL_DIRTY ../dbinc/db.in 636
-DB_MPOOL_DISCARD ../dbinc/db.in 637
-DB_MPOOL_FREE ../dbinc/db.in 638
-DB_MPOOL_FSTAT ../dbinc/db.in 141
-DB_MPOOL_HASH ../dbinc/mp.h 14
-DB_MPOOL_LAST ../dbinc/db.in 631
-DB_MPOOL_NEW ../dbinc/db.in 632
-DB_MPOOL_NOFILE ../dbinc/db.in 641
-DB_MPOOL_STAT ../dbinc/db.in 142
-DB_MPOOL_UNLINK ../dbinc/db.in 642
-DB_MPREG ../dbinc/mp.h 15
+DB_MPOOL_CREATE ../dbinc/db.in /^#define DB_MPOOL_CREATE 0x001 \/* Create a page. /
+DB_MPOOL_DIRTY ../dbinc/db.in /^#define DB_MPOOL_DIRTY 0x002 \/* Get page for an /
+DB_MPOOL_DISCARD ../dbinc/db.in /^#define DB_MPOOL_DISCARD 0x001 \/* Don't cache the/
+DB_MPOOL_EDIT ../dbinc/db.in /^#define DB_MPOOL_EDIT 0x004 \/* Modify without co/
+DB_MPOOL_FREE ../dbinc/db.in /^#define DB_MPOOL_FREE 0x008 \/* Free page if pres/
+DB_MPOOL_FSTAT ../dbinc/db.in /^struct __db_mpool_fstat;typedef struct __db_mpool_/
+DB_MPOOL_HASH ../dbinc/mp.h /^struct __db_mpool_hash; typedef struct __db_mpool_/
+DB_MPOOL_LAST ../dbinc/db.in /^#define DB_MPOOL_LAST 0x010 \/* Return the last p/
+DB_MPOOL_NEW ../dbinc/db.in /^#define DB_MPOOL_NEW 0x020 \/* Create a new page./
+DB_MPOOL_NOFILE ../dbinc/db.in /^#define DB_MPOOL_NOFILE 0x001 \/* Never open a ba/
+DB_MPOOL_STAT ../dbinc/db.in /^struct __db_mpool_stat; typedef struct __db_mpool_/
+DB_MPOOL_UNLINK ../dbinc/db.in /^#define DB_MPOOL_UNLINK 0x002 \/* Unlink the file/
+DB_MPREG ../dbinc/mp.h /^struct __db_mpreg; typedef struct __db_mpreg DB_MP/
+DB_MSGBUF ../dbinc/db_int.in /^} DB_MSGBUF;$/
DB_MSGBUF_FLUSH ../dbinc/db_int.in /^#define DB_MSGBUF_FLUSH(dbenv, a) do { \\$/
DB_MSGBUF_INIT ../dbinc/db_int.in /^#define DB_MSGBUF_INIT(a) do { \\$/
-DB_MULTIPLE ../dbinc/db.in 1168
+DB_MULTIPLE ../dbinc/db.in /^#define DB_MULTIPLE 0x10000000 \/* Return multiple/
DB_MULTIPLE_INIT ../dbinc/db.in /^#define DB_MULTIPLE_INIT(pointer, dbt) \\$/
-DB_MULTIPLE_KEY ../dbinc/db.in 1169
+DB_MULTIPLE_KEY ../dbinc/db.in /^#define DB_MULTIPLE_KEY 0x20000000 \/* Return mult/
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 161
-DB_NEEDSPLIT ../dbinc/db.in 1218
-DB_NEXT ../dbinc/db.in 1140
-DB_NEXT_DUP ../dbinc/db.in 1141
-DB_NEXT_NODUP ../dbinc/db.in 1142
-DB_NODUPDATA ../dbinc/db.in 1143
-DB_NOLOCKING ../dbinc/db.in 284
-DB_NOMMAP ../dbinc/db.in 193
+DB_MULTIVERSION ../dbinc/db.in /^#define DB_MULTIVERSION 0x0000008 \/* Multiv/
+DB_MUTEX ../dbinc/db.in /^struct __db_mutex_t; typedef struct __db_mutex_t D/
+DB_MUTEXMGR ../dbinc/db.in /^struct __db_mutexmgr; typedef struct __db_mutexmgr/
+DB_MUTEXREGION ../dbinc/mutex_int.h /^} DB_MUTEXREGION;$/
+DB_MUTEX_ALLOCATED ../dbinc/db.in /^#define DB_MUTEX_ALLOCATED 0x01 \/* Mutex currentl/
+DB_MUTEX_LOCKED ../dbinc/db.in /^#define DB_MUTEX_LOCKED 0x02 \/* Mutex currently /
+DB_MUTEX_LOGICAL_LOCK ../dbinc/db.in /^#define DB_MUTEX_LOGICAL_LOCK 0x04 \/* Mutex backs/
+DB_MUTEX_PROCESS_ONLY ../dbinc/db.in /^#define DB_MUTEX_PROCESS_ONLY 0x08 \/* Mutex priva/
+DB_MUTEX_SELF_BLOCK ../dbinc/db.in /^#define DB_MUTEX_SELF_BLOCK 0x10 \/* Must be able /
+DB_MUTEX_STAT ../dbinc/db.in /^struct __db_mutex_stat; typedef struct __db_mutex_/
+DB_NEEDSPLIT ../dbinc/db.in /^#define DB_NEEDSPLIT (-30897)\/* Page needs to be/
+DB_NEXT ../dbinc/db.in /^#define DB_NEXT 16 \/* c_get(), DB_LOGC->get() */
+DB_NEXT_DUP ../dbinc/db.in /^#define DB_NEXT_DUP 17 \/* c_get() *\/$/
+DB_NEXT_NODUP ../dbinc/db.in /^#define DB_NEXT_NODUP 18 \/* c_get() *\/$/
+DB_NODUPDATA ../dbinc/db.in /^#define DB_NODUPDATA 19 \/* put(), c_put() *\/$/
+DB_NOLOCKING ../dbinc/db.in /^#define DB_NOLOCKING 0x00200000\/* Set locki/
+DB_NOMMAP ../dbinc/db.in /^#define DB_NOMMAP 0x0000010 \/* Don't mmap u/
DB_NONBLOCK ../dbinc/db_int.in /^#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSE/
-DB_NOORDERCHK ../dbinc/db.in 345
-DB_NOOVERWRITE ../dbinc/db.in 1144
-DB_NOPANIC ../dbinc/db.in 285
-DB_NOSERVER ../dbinc/db.in 1194
-DB_NOSERVER_HOME ../dbinc/db.in 1195
-DB_NOSERVER_ID ../dbinc/db.in 1196
-DB_NOSYNC ../dbinc/db.in 1145
-DB_NOTFOUND ../dbinc/db.in 1197
-DB_NO_AUTO_COMMIT ../dbinc/db.in 228
+DB_NOORDERCHK ../dbinc/db.in /^#define DB_NOORDERCHK 0x0000002 \/* Skip sor/
+DB_NOOVERWRITE ../dbinc/db.in /^#define DB_NOOVERWRITE 20 \/* put() *\/$/
+DB_NOPANIC ../dbinc/db.in /^#define DB_NOPANIC 0x00400000\/* Set panic s/
+DB_NOSERVER ../dbinc/db.in /^#define DB_NOSERVER (-30992)\/* Server panic retu/
+DB_NOSERVER_HOME ../dbinc/db.in /^#define DB_NOSERVER_HOME (-30991)\/* Bad home sent/
+DB_NOSERVER_ID ../dbinc/db.in /^#define DB_NOSERVER_ID (-30990)\/* Bad ID sent to/
+DB_NOSYNC ../dbinc/db.in /^#define DB_NOSYNC 21 \/* close() *\/$/
+DB_NOTFOUND ../dbinc/db.in /^#define DB_NOTFOUND (-30989)\/* Key\/data pair no/
+DB_NO_AUTO_COMMIT ../dbinc/db.in /^#define DB_NO_AUTO_COMMIT 0x0010000 \/* Overri/
DB_NTOHL ../dbinc/db_swap.h /^#define DB_NTOHL(p) do { \\$/
-DB_ODDFILESIZE ../dbinc/db.in 309
-DB_OK_BTREE ../dbinc/db.in 1477
-DB_OK_HASH ../dbinc/db.in 1478
-DB_OK_QUEUE ../dbinc/db.in 1479
-DB_OK_RECNO ../dbinc/db.in 1480
-DB_OLD_VERSION ../dbinc/db.in 1198
-DB_OPFLAGS_MASK ../dbinc/db.in 1161
-DB_OPNOTSUP ../dbinc/db_int.in 259
-DB_ORDERCHKONLY ../dbinc/db.in 346
-DB_OSO_CREATE ../dbinc/os.h 31
-DB_OSO_DIRECT ../dbinc/os.h 32
-DB_OSO_DSYNC ../dbinc/os.h 33
-DB_OSO_EXCL ../dbinc/os.h 34
-DB_OSO_LOG ../dbinc/os.h 35
-DB_OSO_RDONLY ../dbinc/os.h 36
-DB_OSO_REGION ../dbinc/os.h 37
-DB_OSO_SEQ ../dbinc/os.h 38
-DB_OSO_TEMP ../dbinc/os.h 39
-DB_OSO_TRUNC ../dbinc/os.h 40
-DB_OS_SEEK ../dbinc/os.h 49
-DB_OVERFLOWED_DBT ../dbinc/cxx_int.h /^#define DB_OVERFLOWED_DBT(dbt) \\$/
-DB_OVERWRITE ../dbinc/db.in 286
-DB_PAGE_DB_LEN ../dbinc/db_page.h 58
-DB_PAGE_LOCK ../dbinc/db.in 486
-DB_PAGE_NOTFOUND ../dbinc/db.in 1199
-DB_PAGE_QUEUE_LEN ../dbinc/db_page.h 59
-DB_PANIC_ENVIRONMENT ../dbinc/db.in 287
+DB_ODDFILESIZE ../dbinc/db.in /^#define DB_ODDFILESIZE 0x0010000 \/* Truncat/
+DB_OK_BTREE ../dbinc/db.in /^#define DB_OK_BTREE 0x01$/
+DB_OK_HASH ../dbinc/db.in /^#define DB_OK_HASH 0x02$/
+DB_OK_QUEUE ../dbinc/db.in /^#define DB_OK_QUEUE 0x04$/
+DB_OK_RECNO ../dbinc/db.in /^#define DB_OK_RECNO 0x08$/
+DB_OLD_VERSION ../dbinc/db.in /^#define DB_OLD_VERSION (-30988)\/* Out-of-date ve/
+DB_OPFLAGS_MASK ../dbinc/db.in /^#define DB_OPFLAGS_MASK 0x000000ff \/* Mask for op/
+DB_OPNOTSUP ../dbinc/db_int.in /^#define DB_OPNOTSUP EOPNOTSUPP$/
+DB_ORDERCHKONLY ../dbinc/db.in /^#define DB_ORDERCHKONLY 0x0000004 \/* Only p/
+DB_OSO_ABSMODE ../dbinc/os.h /^#define DB_OSO_ABSMODE 0x0001 \/* Absolute mode s/
+DB_OSO_CREATE ../dbinc/os.h /^#define DB_OSO_CREATE 0x0002 \/* POSIX: O_CREAT */
+DB_OSO_DIRECT ../dbinc/os.h /^#define DB_OSO_DIRECT 0x0004 \/* Don't buffer the/
+DB_OSO_DSYNC ../dbinc/os.h /^#define DB_OSO_DSYNC 0x0008 \/* POSIX: O_DSYNC. */
+DB_OSO_EXCL ../dbinc/os.h /^#define DB_OSO_EXCL 0x0010 \/* POSIX: O_EXCL *\/$/
+DB_OSO_RDONLY ../dbinc/os.h /^#define DB_OSO_RDONLY 0x0020 \/* POSIX: O_RDONLY /
+DB_OSO_REGION ../dbinc/os.h /^#define DB_OSO_REGION 0x0040 \/* Opening a region/
+DB_OSO_SEQ ../dbinc/os.h /^#define DB_OSO_SEQ 0x0080 \/* Expected sequential/
+DB_OSO_TEMP ../dbinc/os.h /^#define DB_OSO_TEMP 0x0100 \/* Remove after last /
+DB_OSO_TRUNC ../dbinc/os.h /^#define DB_OSO_TRUNC 0x0200 \/* POSIX: O_TRUNC */
+DB_OVERWRITE ../dbinc/db.in /^#define DB_OVERWRITE 0x00800000\/* Overwrite/
+DB_PAGE_DB_LEN ../dbinc/db_page.h /^#define DB_PAGE_DB_LEN 32$/
+DB_PAGE_LOCK ../dbinc/db.in /^#define DB_PAGE_LOCK 3$/
+DB_PAGE_NOTFOUND ../dbinc/db.in /^#define DB_PAGE_NOTFOUND (-30987)\/* Requested pag/
+DB_PAGE_QUEUE_LEN ../dbinc/db_page.h /^#define DB_PAGE_QUEUE_LEN 0$/
+DB_PANIC_ENVIRONMENT ../dbinc/db.in /^#define DB_PANIC_ENVIRONMENT 0x01000000\/* Set pa/
DB_PCT ../dbinc/db_int.in /^#define DB_PCT(v, total) \\$/
DB_PCT_PG ../dbinc/db_int.in /^#define DB_PCT_PG(v, total, pgsize) \\$/
-DB_PKG ../libdb_java/db_java_wrap.c 80
-DB_POSITION ../dbinc/db.in 1146
-DB_PREPLIST ../dbinc/db.in 144
-DB_PREV ../dbinc/db.in 1147
-DB_PREV_NODUP ../dbinc/db.in 1148
-DB_PRINTABLE ../dbinc/db.in 349
-DB_PRIVATE ../dbinc/db.in 252
-DB_PR_PAGE ../dbinc/db.in 347
-DB_PR_RECOVERYTEST ../dbinc/db.in 348
-DB_QAMMAGIC ../dbinc/db.in 1115
-DB_QAMOLDVER ../dbinc/db.in 1114
-DB_QAMVERSION ../dbinc/db.in 1113
-DB_QUEUE_STAT ../dbinc/db.in 145
-DB_RDONLY ../dbinc/db.in 194
-DB_RDWRMASTER ../dbinc/db.in 261
+DB_PGINFO ../dbinc/db_int.in /^} DB_PGINFO;$/
+DB_PKG ../libdb_java/db_java_wrap.c /^#define DB_PKG "com\/sleepycat\/db\/"$/
+DB_POSITION ../dbinc/db.in /^#define DB_POSITION 22 \/* c_dup() *\/$/
+DB_PREPLIST ../dbinc/db.in /^struct __db_preplist; typedef struct __db_preplist/
+DB_PREV ../dbinc/db.in /^#define DB_PREV 23 \/* c_get(), DB_LOGC->get() */
+DB_PREV_NODUP ../dbinc/db.in /^#define DB_PREV_NODUP 24 \/* c_get(), DB_LOGC->ge/
+DB_PRINTABLE ../dbinc/db.in /^#define DB_PRINTABLE 0x0000020 \/* Use print/
+DB_PRIVATE ../dbinc/db.in /^#define DB_PRIVATE 0x0200000 \/* DB_ENV is p/
+DB_PR_PAGE ../dbinc/db.in /^#define DB_PR_PAGE 0x0000008 \/* Show page c/
+DB_PR_RECOVERYTEST ../dbinc/db.in /^#define DB_PR_RECOVERYTEST 0x0000010 \/* Recove/
+DB_QAMMAGIC ../dbinc/db.in /^#define DB_QAMMAGIC 0x042253$/
+DB_QAMOLDVER ../dbinc/db.in /^#define DB_QAMOLDVER 3 \/* Oldest queue version s/
+DB_QAMVERSION ../dbinc/db.in /^#define DB_QAMVERSION 4 \/* Current queue version/
+DB_QUEUE_STAT ../dbinc/db.in /^struct __db_qam_stat; typedef struct __db_qam_stat/
+DB_RDONLY ../dbinc/db.in /^#define DB_RDONLY 0x0000020 \/* Read-only (O/
+DB_RDWRMASTER ../dbinc/db.in /^#define DB_RDWRMASTER 0x0020000 \/* UNDOC: a/
+DB_READ_COMMITTED ../dbinc/db.in /^#define DB_READ_COMMITTED 0x04000000\/* Degree/
+DB_READ_UNCOMMITTED ../dbinc/db.in /^#define DB_READ_UNCOMMITTED 0x08000000\/* Degree/
DB_REAL_ERR ../dbinc/debug.h /^#define DB_REAL_ERR(env, error, error_set, default/
DB_REAL_MSG ../dbinc/debug.h /^#define DB_REAL_MSG(env, fmt) { \\$/
-DB_RECNUM ../dbinc/db.in 319
-DB_RECORDCOUNT ../dbinc/db.in 1149
-DB_RECORD_LOCK ../dbinc/db.in 485
-DB_RECOVER ../dbinc/db.in 195
-DB_RECOVER_FATAL ../dbinc/db.in 253
+DB_RECNUM ../dbinc/db.in /^#define DB_RECNUM 0x00080000 \/* Btree: reco/
+DB_RECORD_LOCK ../dbinc/db.in /^#define DB_RECORD_LOCK 2$/
+DB_RECOVER ../dbinc/db.in /^#define DB_RECOVER 0x0000040 \/* Run normal /
+DB_RECOVER_FATAL ../dbinc/db.in /^#define DB_RECOVER_FATAL 0x0400000 \/* Run ca/
DB_REDO ../dbinc/db.in /^#define DB_REDO(op) ((op) == DB_TXN_FORWARD_ROLL |/
-DB_REGENV_REPLOCKED ../dbinc/region.h 170
-DB_REGENV_TIMEOUT ../dbinc/region.h 172
-DB_REGION_ENV ../dbinc/region.h 104
-DB_REGION_FMT ../dbinc/region.h 103
-DB_REGION_INIT ../dbinc/db.in 288
-DB_REGION_MAGIC ../dbinc/db.in 1734
-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_RENAMEMAGIC ../dbinc/db.in 1103
-DB_RENUMBER ../dbinc/db.in 320
-DB_REP ../dbinc/db.in 146
-DB_REPVERSION ../dbinc/rep.h 268
-DB_REP_CLIENT ../dbinc/db.in 961
-DB_REP_CREATE ../dbinc/db.in 238
-DB_REP_DUPMASTER ../dbinc/db.in 1200
-DB_REP_EGENCHG ../dbinc/db.in 1219
-DB_REP_HANDLE_DEAD ../dbinc/db.in 1201
-DB_REP_HOLDELECTION ../dbinc/db.in 1202
-DB_REP_ISPERM ../dbinc/db.in 1203
-DB_REP_LOGREADY ../dbinc/db.in 1220
-DB_REP_MASTER ../dbinc/db.in 962
-DB_REP_MAX_GAP ../dbinc/rep.h 125
-DB_REP_NEWMASTER ../dbinc/db.in 1204
-DB_REP_NEWSITE ../dbinc/db.in 1205
-DB_REP_NOBUFFER ../dbinc/db.in 361
-DB_REP_NOTPERM ../dbinc/db.in 1206
-DB_REP_PAGEDONE ../dbinc/db.in 1221
-DB_REP_PERMANENT ../dbinc/db.in 362
-DB_REP_REQUEST_GAP ../dbinc/rep.h 124
-DB_REP_STARTUPDONE ../dbinc/db.in 1207
-DB_REP_STAT ../dbinc/db.in 147
-DB_REP_UNAVAIL ../dbinc/db.in 1208
+DB_REGENV_REPLOCKED ../dbinc/region.h /^#define DB_REGENV_REPLOCKED 0x0001 \/* Env locked /
+DB_REGENV_TIMEOUT ../dbinc/region.h /^#define DB_REGENV_TIMEOUT 30 \/* Backup timeout. */
+DB_REGION_ENV ../dbinc/region.h /^#define DB_REGION_ENV "__db.001" \/* Primary envi/
+DB_REGION_FMT ../dbinc/region.h /^#define DB_REGION_FMT "__db.%03d" \/* Region file/
+DB_REGION_INIT ../dbinc/db.in /^#define DB_REGION_INIT 0x20000000\/* Page-fa/
+DB_REGION_MAGIC ../dbinc/db.in /^#define DB_REGION_MAGIC 0x120897 \/* Environment m/
+DB_REGION_NAME_LENGTH ../dbinc/region.h /^#define DB_REGION_NAME_LENGTH 8 \/* Length of fil/
+DB_REGION_PREFIX ../dbinc/region.h /^#define DB_REGION_PREFIX "__db" \/* DB file name /
+DB_REGISTER ../dbinc/db.in /^#define DB_REGISTER 0x0800000 \/* Multi-proc/
+DB_REM_BIG ../dbinc/db_am.h /^#define DB_REM_BIG 4$/
+DB_REM_DUP ../dbinc/db_am.h /^#define DB_REM_DUP 2$/
+DB_REM_PAGE_COMPAT ../dbinc/db_am.h /^#define DB_REM_PAGE_COMPAT 6 \/* Compatibility for/
+DB_RENAMEMAGIC ../dbinc/db.in /^#define DB_RENAMEMAGIC 0x030800 \/* File has been /
+DB_RENUMBER ../dbinc/db.in /^#define DB_RENUMBER 0x00100000 \/* Recno: re/
+DB_REP ../dbinc/db.in /^struct __db_rep; typedef struct __db_rep DB_REP;$/
+DB_REPMGR_ACK ../dbinc/repmgr.h /^} DB_REPMGR_ACK;$/
+DB_REPMGR_ACKS_ALL ../dbinc/db.in /^#define DB_REPMGR_ACKS_ALL 1$/
+DB_REPMGR_ACKS_ALL_PEERS ../dbinc/db.in /^#define DB_REPMGR_ACKS_ALL_PEERS 2$/
+DB_REPMGR_ACKS_NONE ../dbinc/db.in /^#define DB_REPMGR_ACKS_NONE 3$/
+DB_REPMGR_ACKS_ONE ../dbinc/db.in /^#define DB_REPMGR_ACKS_ONE 4$/
+DB_REPMGR_ACKS_ONE_PEER ../dbinc/db.in /^#define DB_REPMGR_ACKS_ONE_PEER 5$/
+DB_REPMGR_ACKS_QUORUM ../dbinc/db.in /^#define DB_REPMGR_ACKS_QUORUM 6$/
+DB_REPMGR_CONNECTED ../dbinc/db.in /^#define DB_REPMGR_CONNECTED 0x01$/
+DB_REPMGR_DISCONNECTED ../dbinc/db.in /^#define DB_REPMGR_DISCONNECTED 0x02$/
+DB_REPMGR_HANDSHAKE ../dbinc/repmgr.h /^} DB_REPMGR_HANDSHAKE;$/
+DB_REPMGR_PEER ../dbinc/db.in /^#define DB_REPMGR_PEER 0x01$/
+DB_REPMGR_SITE ../dbinc/db.in /^ typedef struct __db_repmgr_site DB_REPMGR_SITE;/
+DB_REPMGR_VERSION ../dbinc/repmgr.h /^#define DB_REPMGR_VERSION 1$/
+DB_REPVERSION ../dbinc/rep.h /^#define DB_REPVERSION 3$/
+DB_REPVERSION_42 ../dbinc/rep.h /^#define DB_REPVERSION_42 1$/
+DB_REPVERSION_43 ../dbinc/rep.h /^#define DB_REPVERSION_43 2$/
+DB_REPVERSION_44 ../dbinc/rep.h /^#define DB_REPVERSION_44 3$/
+DB_REPVERSION_45 ../dbinc/rep.h /^#define DB_REPVERSION_45 3$/
+DB_REPVERSION_INVALID ../dbinc/rep.h /^#define DB_REPVERSION_INVALID 0$/
+DB_REP_ACK_TIMEOUT ../dbinc/db.in /^#define DB_REP_ACK_TIMEOUT 1$/
+DB_REP_ANYWHERE ../dbinc/db.in /^#define DB_REP_ANYWHERE 0x0000001 \/* Messag/
+DB_REP_BULKOVF ../dbinc/db.in /^#define DB_REP_BULKOVF (-30896)\/* Rep bulk buffe/
+DB_REP_CLIENT ../dbinc/db.in /^#define DB_REP_CLIENT 1$/
+DB_REP_CONF_BULK ../dbinc/db.in /^#define DB_REP_CONF_BULK 0x0001 \/* Bulk transfer./
+DB_REP_CONF_DELAYCLIENT ../dbinc/db.in /^#define DB_REP_CONF_DELAYCLIENT 0x0002 \/* Delay c/
+DB_REP_CONF_NOAUTOINIT ../dbinc/db.in /^#define DB_REP_CONF_NOAUTOINIT 0x0004 \/* No autom/
+DB_REP_CONF_NOWAIT ../dbinc/db.in /^#define DB_REP_CONF_NOWAIT 0x0008 \/* Don't wait, /
+DB_REP_CONNECTION_RETRY ../dbinc/db.in /^#define DB_REP_CONNECTION_RETRY 4$/
+DB_REP_DUPMASTER ../dbinc/db.in /^#define DB_REP_DUPMASTER (-30986)\/* There are two/
+DB_REP_EGENCHG ../dbinc/db.in /^#define DB_REP_EGENCHG (-30895)\/* Egen changed w/
+DB_REP_ELECTION ../dbinc/db.in /^#define DB_REP_ELECTION 2$/
+DB_REP_ELECTION_RETRY ../dbinc/db.in /^#define DB_REP_ELECTION_RETRY 3$/
+DB_REP_ELECTION_TIMEOUT ../dbinc/db.in /^#define DB_REP_ELECTION_TIMEOUT 2$/
+DB_REP_FULL_ELECTION ../dbinc/db.in /^#define DB_REP_FULL_ELECTION 3$/
+DB_REP_HANDLE_DEAD ../dbinc/db.in /^#define DB_REP_HANDLE_DEAD (-30985)\/* Rolled back/
+DB_REP_HOLDELECTION ../dbinc/db.in /^#define DB_REP_HOLDELECTION (-30984)\/* Time to ho/
+DB_REP_IGNORE ../dbinc/db.in /^#define DB_REP_IGNORE (-30983)\/* This msg should/
+DB_REP_ISPERM ../dbinc/db.in /^#define DB_REP_ISPERM (-30982)\/* Cached not writ/
+DB_REP_JOIN_FAILURE ../dbinc/db.in /^#define DB_REP_JOIN_FAILURE (-30981)\/* Unable to /
+DB_REP_LOCKOUT ../dbinc/db.in /^#define DB_REP_LOCKOUT (-30980)\/* API\/Replicati/
+DB_REP_LOGREADY ../dbinc/db.in /^#define DB_REP_LOGREADY (-30894)\/* Rep log ready/
+DB_REP_MASTER ../dbinc/db.in /^#define DB_REP_MASTER 4$/
+DB_REP_MAX_GAP ../dbinc/rep.h /^#define DB_REP_MAX_GAP 128$/
+DB_REP_NEWMASTER ../dbinc/db.in /^#define DB_REP_NEWMASTER (-30979)\/* We have learn/
+DB_REP_NEWSITE ../dbinc/db.in /^#define DB_REP_NEWSITE (-30978)\/* New site enter/
+DB_REP_NOBUFFER ../dbinc/db.in /^#define DB_REP_NOBUFFER 0x0000002 \/* Do not/
+DB_REP_NOTPERM ../dbinc/db.in /^#define DB_REP_NOTPERM (-30977)\/* Permanent log /
+DB_REP_PAGEDONE ../dbinc/db.in /^#define DB_REP_PAGEDONE (-30893)\/* This page was/
+DB_REP_PERMANENT ../dbinc/db.in /^#define DB_REP_PERMANENT 0x0000004 \/* Import/
+DB_REP_REQUEST_GAP ../dbinc/rep.h /^#define DB_REP_REQUEST_GAP 4$/
+DB_REP_REREQUEST ../dbinc/db.in /^#define DB_REP_REREQUEST 0x0000008 \/* This m/
+DB_REP_STAT ../dbinc/db.in /^struct __db_rep_stat; typedef struct __db_rep_stat/
+DB_REP_UNAVAIL ../dbinc/db.in /^#define DB_REP_UNAVAIL (-30976)\/* Site cannot cu/
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) /
@@ -564,915 +703,759 @@ DB_RETOK_LGGET ../dbinc/db_int.in /^#define DB_RETOK_LGGET(ret) ((ret) == 0 || (
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/os.h 18
-DB_REVSPLITOFF ../dbinc/db.in 321
-DB_RMW ../dbinc/db.in 1170
-DB_RPC2ND_CONCATDATAKEY ../dbinc/db_int.in 515
-DB_RPC2ND_CONCATKEYDATA ../dbinc/db_int.in 514
-DB_RPC2ND_CONSTANT ../dbinc/db_int.in 518
-DB_RPC2ND_GETNAME ../dbinc/db_int.in 520
-DB_RPC2ND_GETZIP ../dbinc/db_int.in 519
-DB_RPC2ND_MASK ../dbinc/db_int.in 510
-DB_RPC2ND_NOOP ../dbinc/db_int.in 513
-DB_RPC2ND_REVERSECONCAT ../dbinc/db_int.in 516
-DB_RPC2ND_REVERSEDATA ../dbinc/db_int.in 512
-DB_RPC2ND_TRUNCDATA ../dbinc/db_int.in 517
-DB_RPCCLIENT ../dbinc/db.in 233
-DB_RUNRECOVERY ../dbinc/db.in 1209
-DB_SALVAGE ../dbinc/db.in 350
-DB_SECONDARY_BAD ../dbinc/db.in 1210
-DB_SEQUENCE ../dbinc/db.in 148
-DB_SEQUENCE_STAT ../dbinc/db.in 150
-DB_SEQUENCE_VERSION ../dbinc/db.in 1117
-DB_SEQ_DEC ../dbinc/db.in 1033
-DB_SEQ_INC ../dbinc/db.in 1034
-DB_SEQ_RANGE_SET ../dbinc/db.in 1035
-DB_SEQ_RECORD ../dbinc/db.in 149
-DB_SEQ_WRAP ../dbinc/db.in 1036
-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 1150
-DB_SET_BEGIN_LSNP ../dbinc/log.h /^#define DB_SET_BEGIN_LSNP(txn, rlsnp) do { \\$/
+DB_RETRY ../dbinc/os.h /^#define DB_RETRY 100$/
+DB_REVSPLITOFF ../dbinc/db.in /^#define DB_REVSPLITOFF 0x00200000 \/* Btree:/
+DB_RMW ../dbinc/db.in /^#define DB_RMW 0x40000000 \/* Acquire write lock /
+DB_RPC2ND_CONCATDATAKEY ../dbinc/db_int.in /^#define DB_RPC2ND_CONCATDATAKEY 0x00400000 \/* cal/
+DB_RPC2ND_CONCATKEYDATA ../dbinc/db_int.in /^#define DB_RPC2ND_CONCATKEYDATA 0x00300000 \/* cal/
+DB_RPC2ND_CONSTANT ../dbinc/db_int.in /^#define DB_RPC2ND_CONSTANT 0x00700000 \/* callback/
+DB_RPC2ND_GETNAME ../dbinc/db_int.in /^#define DB_RPC2ND_GETNAME 0x00900000 \/* sj_getnam/
+DB_RPC2ND_GETZIP ../dbinc/db_int.in /^#define DB_RPC2ND_GETZIP 0x00800000 \/* sj_getzip /
+DB_RPC2ND_MASK ../dbinc/db_int.in /^#define DB_RPC2ND_MASK 0x00f00000 \/* Reserved bi/
+DB_RPC2ND_NOOP ../dbinc/db_int.in /^#define DB_RPC2ND_NOOP 0x00200000 \/* callback_n(/
+DB_RPC2ND_REVERSECONCAT ../dbinc/db_int.in /^#define DB_RPC2ND_REVERSECONCAT 0x00500000 \/* cal/
+DB_RPC2ND_REVERSEDATA ../dbinc/db_int.in /^#define DB_RPC2ND_REVERSEDATA 0x00100000 \/* callb/
+DB_RPC2ND_TRUNCDATA ../dbinc/db_int.in /^#define DB_RPC2ND_TRUNCDATA 0x00600000 \/* callbac/
+DB_RPCCLIENT ../dbinc/db.in /^#define DB_RPCCLIENT 0x0000002 \/* An RPC cl/
+DB_RUNRECOVERY ../dbinc/db.in /^#define DB_RUNRECOVERY (-30975)\/* Panic return. /
+DB_SALVAGE ../dbinc/db.in /^#define DB_SALVAGE 0x0000040 \/* Salvage wha/
+DB_SECONDARY_BAD ../dbinc/db.in /^#define DB_SECONDARY_BAD (-30974)\/* Secondary ind/
+DB_SEQUENCE ../dbinc/db.in /^struct __db_sequence; typedef struct __db_sequence/
+DB_SEQUENCE_OLDVER ../dbinc/db.in /^#define DB_SEQUENCE_OLDVER 1 \/* Oldest sequence/
+DB_SEQUENCE_STAT ../dbinc/db.in /^struct __db_seq_stat; typedef struct __db_seq_stat/
+DB_SEQUENCE_VERSION ../dbinc/db.in /^#define DB_SEQUENCE_VERSION 2 \/* Current sequenc/
+DB_SEQ_DEC ../dbinc/db.in /^#define DB_SEQ_DEC 0x00000001 \/* Decrement seque/
+DB_SEQ_INC ../dbinc/db.in /^#define DB_SEQ_INC 0x00000002 \/* Increment seque/
+DB_SEQ_RANGE_SET ../dbinc/db.in /^#define DB_SEQ_RANGE_SET 0x00000004 \/* Range set /
+DB_SEQ_RECORD ../dbinc/db.in /^struct __db_seq_record; typedef struct __db_seq_re/
+DB_SEQ_WRAP ../dbinc/db.in /^#define DB_SEQ_WRAP 0x00000008 \/* Wrap sequence /
+DB_SEQ_WRAPPED ../dbinc/db.in /^#define DB_SEQ_WRAPPED 0x00000010 \/* Just wrappe/
+DB_SERVER_DBFLAGS ../dbinc/db_server_int.h /^#define DB_SERVER_DBFLAGS (DB_NOMMAP | DB_RDONLY /
+DB_SERVER_DBNOSHARE ../dbinc/db_server_int.h /^#define DB_SERVER_DBNOSHARE (DB_EXCL | DB_TRUNCAT/
+DB_SERVER_ENVFLAGS ../dbinc/db_server_int.h /^#define DB_SERVER_ENVFLAGS ( \\$/
+DB_SERVER_FLAGMASK ../dbinc/db_server_int.h /^#define DB_SERVER_FLAGMASK ( \\$/
+DB_SERVER_IDLETIMEOUT ../dbinc/db_server_int.h /^#define DB_SERVER_IDLETIMEOUT 86400 \/* 1 day *\/$/
+DB_SERVER_MAXTIMEOUT ../dbinc/db_server_int.h /^#define DB_SERVER_MAXTIMEOUT 1200 \/* 20 minutes */
+DB_SERVER_TIMEOUT ../dbinc/db_server_int.h /^#define DB_SERVER_TIMEOUT 300 \/* 5 minutes *\/$/
+DB_SET ../dbinc/db.in /^#define DB_SET 25 \/* c_get(), DB_LOGC->get() */
DB_SET_CALLBACK ../cxx/cxx_db.cpp /^#define DB_SET_CALLBACK(_cxxname, _name, _cxxargsp/
-DB_SET_LOCK_TIMEOUT ../dbinc/db.in 1151
-DB_SET_RANGE ../dbinc/db.in 1152
-DB_SET_RECNO ../dbinc/db.in 1153
-DB_SET_TXN_NOW ../dbinc/db.in 1154
-DB_SET_TXN_TIMEOUT ../dbinc/db.in 1155
-DB_SNAPSHOT ../dbinc/db.in 322
-DB_STAT_ALL ../dbinc/db.in 327
-DB_STAT_CLEAR ../dbinc/db.in 328
-DB_STAT_LOCK_CONF ../dbinc/db.in 329
-DB_STAT_LOCK_FLAGS ../lock/lock_stat.c 150
-DB_STAT_LOCK_LOCKERS ../dbinc/db.in 330
-DB_STAT_LOCK_OBJECTS ../dbinc/db.in 331
-DB_STAT_LOCK_PARAMS ../dbinc/db.in 332
-DB_STAT_MEMP_FLAGS ../mp/mp_stat.c 288
-DB_STAT_MEMP_HASH ../dbinc/db.in 333
-DB_STAT_SUBSYSTEM ../dbinc/db.in 334
-DB_SURPRISE_KID ../dbinc/db.in 1222
-DB_SWAPBYTES ../dbinc/db.in 1224
-DB_SYSTEM_MEM ../dbinc/db.in 254
-DB_TEST_CHECKPOINT ../dbinc/debug.h /^#define DB_TEST_CHECKPOINT(env, val) \\$/
-DB_TEST_ELECTINIT ../dbinc/db.in 2035
-DB_TEST_ELECTVOTE1 ../dbinc/db.in 2036
-DB_TEST_POSTDESTROY ../dbinc/db.in 2037
-DB_TEST_POSTLOG ../dbinc/db.in 2038
-DB_TEST_POSTLOGMETA ../dbinc/db.in 2039
-DB_TEST_POSTOPEN ../dbinc/db.in 2040
-DB_TEST_POSTSYNC ../dbinc/db.in 2041
-DB_TEST_PREDESTROY ../dbinc/db.in 2042
-DB_TEST_PREOPEN ../dbinc/db.in 2043
+DB_SET_DBT ../dbinc/db_int.in /^#define DB_SET_DBT(dbt, d, s) do { \\$/
+DB_SET_LOCK_TIMEOUT ../dbinc/db.in /^#define DB_SET_LOCK_TIMEOUT 26 \/* set_timout() */
+DB_SET_RANGE ../dbinc/db.in /^#define DB_SET_RANGE 27 \/* c_get() *\/$/
+DB_SET_RECNO ../dbinc/db.in /^#define DB_SET_RECNO 28 \/* get(), c_get() *\/$/
+DB_SET_TXN_LSNP ../dbinc/log.h /^#define DB_SET_TXN_LSNP(txn, blsnp, llsnp) do { /
+DB_SET_TXN_NOW ../dbinc/db.in /^#define DB_SET_TXN_NOW 29 \/* set_timout() (inter/
+DB_SET_TXN_TIMEOUT ../dbinc/db.in /^#define DB_SET_TXN_TIMEOUT 30 \/* set_timout() *\//
+DB_SNAPSHOT ../dbinc/db.in /^#define DB_SNAPSHOT 0x00400000 \/* Recno: sn/
+DB_STAT_ALL ../dbinc/db.in /^#define DB_STAT_ALL 0x0000002 \/* Print: Eve/
+DB_STAT_CLEAR ../dbinc/db.in /^#define DB_STAT_CLEAR 0x0000004 \/* Clear st/
+DB_STAT_LOCK_CONF ../dbinc/db.in /^#define DB_STAT_LOCK_CONF 0x0000008 \/* Print:/
+DB_STAT_LOCK_FLAGS ../lock/lock_stat.c /^#define DB_STAT_LOCK_FLAGS \\$/
+DB_STAT_LOCK_LOCKERS ../dbinc/db.in /^#define DB_STAT_LOCK_LOCKERS 0x0000010 \/* Print:/
+DB_STAT_LOCK_OBJECTS ../dbinc/db.in /^#define DB_STAT_LOCK_OBJECTS 0x0000020 \/* Print:/
+DB_STAT_LOCK_PARAMS ../dbinc/db.in /^#define DB_STAT_LOCK_PARAMS 0x0000040 \/* Print:/
+DB_STAT_MEMP_FLAGS ../mp/mp_stat.c /^#define DB_STAT_MEMP_FLAGS \\$/
+DB_STAT_MEMP_HASH ../dbinc/db.in /^#define DB_STAT_MEMP_HASH 0x0000080 \/* Print:/
+DB_STAT_NOERROR ../dbinc/db.in /^#define DB_STAT_NOERROR 0x0000100 \/* Intern/
+DB_STAT_SUBSYSTEM ../dbinc/db.in /^#define DB_STAT_SUBSYSTEM 0x0000200 \/* Print:/
+DB_SURPRISE_KID ../dbinc/db.in /^#define DB_SURPRISE_KID (-30892)\/* Child commit /
+DB_SWAPBYTES ../dbinc/db.in /^#define DB_SWAPBYTES (-30891)\/* Database needs b/
+DB_SYSTEM_MEM ../dbinc/db.in /^#define DB_SYSTEM_MEM 0x1000000 \/* Use syst/
+DB_TEST_ELECTINIT ../dbinc/db.in /^#define DB_TEST_ELECTINIT 1 \/* after __rep_elect/
+DB_TEST_ELECTVOTE1 ../dbinc/db.in /^#define DB_TEST_ELECTVOTE1 2 \/* after sending VO/
+DB_TEST_POSTDESTROY ../dbinc/db.in /^#define DB_TEST_POSTDESTROY 3 \/* after destroy o/
+DB_TEST_POSTLOG ../dbinc/db.in /^#define DB_TEST_POSTLOG 4 \/* after logging all /
+DB_TEST_POSTLOGMETA ../dbinc/db.in /^#define DB_TEST_POSTLOGMETA 5 \/* after logging m/
+DB_TEST_POSTOPEN ../dbinc/db.in /^#define DB_TEST_POSTOPEN 6 \/* after __os_open */
+DB_TEST_POSTSYNC ../dbinc/db.in /^#define DB_TEST_POSTSYNC 7 \/* after syncing the /
+DB_TEST_PREDESTROY ../dbinc/db.in /^#define DB_TEST_PREDESTROY 8 \/* before destroy o/
+DB_TEST_PREOPEN ../dbinc/db.in /^#define DB_TEST_PREOPEN 9 \/* before __os_open */
DB_TEST_RECOVERY ../dbinc/debug.h /^#define DB_TEST_RECOVERY(dbp, val, ret, name) do {/
-DB_TEST_RECOVERY_LABEL ../dbinc/debug.h 248
-DB_TEST_SUBDB_LOCKS ../dbinc/db.in 2044
+DB_TEST_RECOVERY_LABEL ../dbinc/debug.h /^#define DB_TEST_RECOVERY_LABEL db_tr_err:$/
+DB_TEST_RECYCLE ../dbinc/db.in /^#define DB_TEST_RECYCLE 10 \/* test rep and txn_/
+DB_TEST_SUBDB_LOCKS ../dbinc/db.in /^#define DB_TEST_SUBDB_LOCKS 11 \/* subdb locking /
DB_TEST_SUBLOCKS ../dbinc/debug.h /^#define DB_TEST_SUBLOCKS(env, flags) do { \\$/
-DB_THREAD ../dbinc/db.in 196
-DB_TIMEOUT ../dbinc/db.in 1225
-DB_TIME_NOTGRANTED ../dbinc/db.in 289
-DB_TRAIL ../env/env_open.c 920
-DB_TRUNCATE ../dbinc/db.in 197
-DB_TXN ../dbinc/db.in 151
-DB_TXNHEAD ../dbinc/db_int.in 527
-DB_TXNLIST ../dbinc/db_int.in 528
+DB_TEST_WAIT ../dbinc/debug.h /^#define DB_TEST_WAIT(env, val) \\$/
+DB_THREAD ../dbinc/db.in /^#define DB_THREAD 0x0000080 \/* Applications/
+DB_THREADID_STRLEN ../dbinc/db.in /^#define DB_THREADID_STRLEN 128$/
+DB_THREAD_INFO ../dbinc/db_int.in /^} DB_THREAD_INFO;$/
+DB_THREAD_STATE ../dbinc/db_int.in /^} DB_THREAD_STATE;$/
+DB_TIMEOUT ../dbinc/db.in /^#define DB_TIMEOUT (-30890)\/* Timed out waiting /
+DB_TIME_NOTGRANTED ../dbinc/db.in /^#define DB_TIME_NOTGRANTED 0x40000000\/* Return/
+DB_TRAIL ../env/env_open.c /^#define DB_TRAIL "BDBXXXXX"$/
+DB_TRUNCATE ../dbinc/db.in /^#define DB_TRUNCATE 0x0000100 \/* Discard ex/
+DB_TXN ../dbinc/db.in /^struct __db_txn; typedef struct __db_txn DB_TXN;$/
+DB_TXNHEAD ../dbinc/db_int.in /^struct __db_txnhead; typedef struct __db_txnhead D/
+DB_TXNLIST ../dbinc/db_int.in /^struct __db_txnlist; typedef struct __db_txnlist D/
DB_TXNLIST_MASK ../dbinc/db_dispatch.h /^#define DB_TXNLIST_MASK(hp, n) (n % hp->nslots)$/
-DB_TXNLIST_MAX_PGNO ../db/db_dispatch.c 1469
-DB_TXNLOGREC ../dbinc/txn.h 24
-DB_TXNMGR ../dbinc/db.in 154
-DB_TXNREGION ../dbinc/txn.h 23
-DB_TXNVERSION ../dbinc/db.in 795
-DB_TXN_ACTIVE ../dbinc/db.in 152
-DB_TXN_CKP ../dbinc/db.in 1226
-DB_TXN_NOSYNC ../dbinc/db.in 198
-DB_TXN_NOT_DURABLE ../dbinc/db.in 199
-DB_TXN_NOWAIT ../dbinc/db.in 267
-DB_TXN_STAT ../dbinc/db.in 153
-DB_TXN_SYNC ../dbinc/db.in 268
-DB_TXN_WRITE_NOSYNC ../dbinc/db.in 294
+DB_TXNLIST_MAX_PGNO ../db/db_dispatch.c /^#define DB_TXNLIST_MAX_PGNO 8 \/* A nice even num/
+DB_TXNLOGREC ../dbinc/txn.h /^struct __txn_logrec; typedef struct __txn_logrec D/
+DB_TXNMGR ../dbinc/db.in /^struct __db_txnmgr; typedef struct __db_txnmgr DB_/
+DB_TXNREGION ../dbinc/txn.h /^struct __db_txnregion; typedef struct __db_txnregi/
+DB_TXNVERSION ../dbinc/db.in /^#define DB_TXNVERSION 1$/
+DB_TXN_ACTIVE ../dbinc/db.in /^struct __db_txn_active; typedef struct __db_txn_ac/
+DB_TXN_CKP ../dbinc/db.in /^#define DB_TXN_CKP (-30889)\/* Encountered ckp re/
+DB_TXN_NOSYNC ../dbinc/db.in /^#define DB_TXN_NOSYNC 0x0000200 \/* Do not s/
+DB_TXN_NOT_DURABLE ../dbinc/db.in /^#define DB_TXN_NOT_DURABLE 0x0000400 \/* Do not/
+DB_TXN_NOWAIT ../dbinc/db.in /^#define DB_TXN_NOWAIT 0x0004000 \/* Do not w/
+DB_TXN_SNAPSHOT ../dbinc/db.in /^#define DB_TXN_SNAPSHOT 0x10000000\/* Snapsh/
+DB_TXN_STAT ../dbinc/db.in /^struct __db_txn_stat; typedef struct __db_txn_stat/
+DB_TXN_SYNC ../dbinc/db.in /^#define DB_TXN_SYNC 0x0008000 \/* Always syn/
+DB_TXN_WRITE_NOSYNC ../dbinc/db.in /^#define DB_TXN_WRITE_NOSYNC 0x0000800 \/* Write /
DB_UNDO ../dbinc/db.in /^#define DB_UNDO(op) ((op) == DB_TXN_ABORT || \\$/
-DB_UNREF ../dbinc/db.in 351
-DB_UPDATE_SECONDARY ../dbinc/db.in 1156
-DB_UPGRADE ../dbinc/db.in 300
-DB_USE_ENVIRON ../dbinc/db.in 200
-DB_USE_ENVIRON_ROOT ../dbinc/db.in 201
-DB_VERB_DEADLOCK ../dbinc/db.in 1764
-DB_VERB_RECOVERY ../dbinc/db.in 1765
-DB_VERB_REPLICATION ../dbinc/db.in 1766
-DB_VERB_WAITSFOR ../dbinc/db.in 1767
-DB_VERIFY ../dbinc/db.in 301
-DB_VERIFY_BAD ../dbinc/db.in 1211
-DB_VERIFY_FATAL ../dbinc/db.in 1227
-DB_VERSION_MAJOR ../dbinc/db.in 43
-DB_VERSION_MINOR ../dbinc/db.in 44
-DB_VERSION_MISMATCH ../dbinc/db.in 1212
-DB_VERSION_PATCH ../dbinc/db.in 45
-DB_VERSION_STRING ../dbinc/db.in 46
-DB_WRITECURSOR ../dbinc/db.in 1157
-DB_WRITELOCK ../dbinc/db.in 1158
-DB_WRITEOPEN ../dbinc/db.in 262
-DB_XA_CREATE ../dbinc/db.in 239
-DB_XIDDATASIZE ../dbinc/db.in 920
-DB_YIELDCPU ../dbinc/db.in 295
-DB_debug_FLAG ../dbinc/db.in 559
-DB_user_BEGIN ../dbinc/db.in 558
+DB_UNREF ../dbinc/db.in /^#define DB_UNREF 0x0000080 \/* Report unrefe/
+DB_UPDATE_SECONDARY ../dbinc/db.in /^#define DB_UPDATE_SECONDARY 31 \/* c_get(), c_del(/
+DB_UPGRADE ../dbinc/db.in /^#define DB_UPGRADE 0x0000001 \/* Upgrading. /
+DB_USERCOPY_GETDATA ../dbinc/db.in /^#define DB_USERCOPY_GETDATA 0x0001$/
+DB_USERCOPY_SETDATA ../dbinc/db.in /^#define DB_USERCOPY_SETDATA 0x0002$/
+DB_USE_ENVIRON ../dbinc/db.in /^#define DB_USE_ENVIRON 0x0001000 \/* Use the/
+DB_USE_ENVIRON_ROOT ../dbinc/db.in /^#define DB_USE_ENVIRON_ROOT 0x0002000 \/* Use th/
+DB_VERB_DEADLOCK ../dbinc/db.in /^#define DB_VERB_DEADLOCK 0x0001 \/* Deadlock detec/
+DB_VERB_RECOVERY ../dbinc/db.in /^#define DB_VERB_RECOVERY 0x0002 \/* Recovery infor/
+DB_VERB_REGISTER ../dbinc/db.in /^#define DB_VERB_REGISTER 0x0004 \/* Dump waits-for/
+DB_VERB_REPLICATION ../dbinc/db.in /^#define DB_VERB_REPLICATION 0x0008 \/* Replication/
+DB_VERB_WAITSFOR ../dbinc/db.in /^#define DB_VERB_WAITSFOR 0x0010 \/* Dump waits-for/
+DB_VERIFY ../dbinc/db.in /^#define DB_VERIFY 0x0000002 \/* Verifying. */
+DB_VERIFY_BAD ../dbinc/db.in /^#define DB_VERIFY_BAD (-30973)\/* Verify failed; /
+DB_VERIFY_FATAL ../dbinc/db.in /^#define DB_VERIFY_FATAL (-30888)\/* DB->verify ca/
+DB_VERSION_MAJOR ../dbinc/db.in /^#define DB_VERSION_MAJOR @DB_VERSION_MAJOR@$/
+DB_VERSION_MINOR ../dbinc/db.in /^#define DB_VERSION_MINOR @DB_VERSION_MINOR@$/
+DB_VERSION_MISMATCH ../dbinc/db.in /^#define DB_VERSION_MISMATCH (-30972)\/* Environmen/
+DB_VERSION_PATCH ../dbinc/db.in /^#define DB_VERSION_PATCH @DB_VERSION_PATCH@$/
+DB_VERSION_STRING ../dbinc/db.in /^#define DB_VERSION_STRING @DB_VERSION_STRING@$/
+DB_WRITECURSOR ../dbinc/db.in /^#define DB_WRITECURSOR 32 \/* cursor() *\/$/
+DB_WRITELOCK ../dbinc/db.in /^#define DB_WRITELOCK 33 \/* cursor() (internal) */
+DB_WRITEOPEN ../dbinc/db.in /^#define DB_WRITEOPEN 0x0040000 \/* UNDOC: op/
+DB_XA_CREATE ../dbinc/db.in /^#define DB_XA_CREATE 0x0000002 \/* Open in a/
+DB_XIDDATASIZE ../dbinc/db.in /^#define DB_XIDDATASIZE 128$/
+DB_YIELDCPU ../dbinc/db.in /^#define DB_YIELDCPU 0x80000000\/* Yield the /
+DB_debug_FLAG ../dbinc/db.in /^#define DB_debug_FLAG 0x80000000$/
+DB_user_BEGIN ../dbinc/db.in /^#define DB_user_BEGIN 10000$/
DCHARHASH ../hash/hash_func.c /^#define DCHARHASH(h, c) ((h) = 0x63c63cd9*(h) + 0x/
-DD_INVALID_ID ../lock/lock_deadlock.c 370
+DD_INVALID_ID ../lock/lock_deadlock.c /^#define DD_INVALID_ID ((u_int32_t) -1)$/
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/
-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
+DEFMINKEYPAGE ../dbinc/btree.h /^#define DEFMINKEYPAGE (2)$/
+DEF_MAX_TXNS ../dbinc/txn.h /^#define DEF_MAX_TXNS 100 \/* Default max transact/
+DELOVFL ../dbinc/hash.h /^#define DELOVFL 0x50$/
+DELPAIR ../dbinc/hash.h /^#define DELPAIR 0x30$/
+DIR_DECRYPT ../crypto/rijndael/rijndael-api-fst.h /^#define DIR_DECRYPT 1 \/* Are we de/
+DIR_ENCRYPT ../crypto/rijndael/rijndael-api-fst.h /^#define DIR_ENCRYPT 0 \/* Are we en/
DISCARD_CUR ../btree/bt_cursor.c /^#define DISCARD_CUR(dbc, ret) do { \\$/
+DONT_NEED_LOCKS ../qam/qam.c /^#define DONT_NEED_LOCKS(dbc) ((dbc)->txn == NULL |/
DO_PREPLIST ../tcl/tcl_txn.c /^#define DO_PREPLIST(count) \\$/
-DO_TRADE ../txn/txn_util.c 218
+DO_TRADE ../txn/txn_util.c /^#define DO_TRADE do { \\$/
DUP_SIZE ../dbinc/hash.h /^#define DUP_SIZE(len) ((len) + 2 * sizeof(db_indx_/
-Db ../libdb_java/db_java_wrap.c 1737
-Db::Db ../cxx/cxx_db.cpp /^Db::Db(DbEnv *env, u_int32_t flags)$/
-Db::cleanup ../cxx/cxx_db.cpp /^void Db::cleanup()$/
-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_STD(ostream) *error/
-Db::set_message_stream ../cxx/cxx_db.cpp /^void Db::set_message_stream(__DB_STD(ostream) *mes/
-Db::set_msgcall ../cxx/cxx_db.cpp /^void Db::set_msgcall(void (*arg)(const DbEnv *, co/
-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() throw(/
-DbEnv ../libdb_java/db_java_wrap.c 1740
-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($/
-DbEnv::_stream_message_function ../cxx/cxx_env.cpp /^void DbEnv::_stream_message_function(const DB_ENV /
-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_STD(ostream) *st/
-DbEnv::set_feedback ../cxx/cxx_env.cpp /^int DbEnv::set_feedback(void (*arg)(DbEnv *, int, /
-DbEnv::set_message_stream ../cxx/cxx_env.cpp /^void DbEnv::set_message_stream(__DB_STD(ostream) */
-DbEnv::set_paniccall ../cxx/cxx_env.cpp /^int DbEnv::set_paniccall(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_close ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_close(struct DbEnv *self,u_int32_t /
-DbEnv_dbremove ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_dbremove(struct DbEnv *self,DB_TXN /
-DbEnv_dbrename ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_dbrename(struct DbEnv *self,DB_TXN /
-DbEnv_err ../libdb_java/db_java_wrap.c /^void DbEnv_err(struct DbEnv *self,int error,char c/
-DbEnv_errx ../libdb_java/db_java_wrap.c /^void DbEnv_errx(struct DbEnv *self,char const *mes/
-DbEnv_get_cachesize ../libdb_java/db_java_wrap.c /^jlong DbEnv_get_cachesize(struct DbEnv *self){$/
-DbEnv_get_cachesize_ncache ../libdb_java/db_java_wrap.c /^int DbEnv_get_cachesize_ncache(struct DbEnv *self)/
-DbEnv_get_data_dirs ../libdb_java/db_java_wrap.c /^char const **DbEnv_get_data_dirs(struct DbEnv *sel/
-DbEnv_get_encrypt_flags ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_encrypt_flags(struct DbEnv *se/
-DbEnv_get_errpfx ../libdb_java/db_java_wrap.c /^char const *DbEnv_get_errpfx(struct DbEnv *self){$/
-DbEnv_get_flags ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_flags(struct DbEnv *self){$/
-DbEnv_get_home ../libdb_java/db_java_wrap.c /^char const *DbEnv_get_home(struct DbEnv *self){$/
-DbEnv_get_lg_bsize ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lg_bsize(struct DbEnv *self){$/
-DbEnv_get_lg_dir ../libdb_java/db_java_wrap.c /^char const *DbEnv_get_lg_dir(struct DbEnv *self){$/
-DbEnv_get_lg_max ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lg_max(struct DbEnv *self){$/
-DbEnv_get_lg_regionmax ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lg_regionmax(struct DbEnv *sel/
-DbEnv_get_lk_conflicts ../libdb_java/db_java_wrap.c /^struct __db_lk_conflicts DbEnv_get_lk_conflicts(st/
-DbEnv_get_lk_detect ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lk_detect(struct DbEnv *self){/
-DbEnv_get_lk_max_lockers ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lk_max_lockers(struct DbEnv *s/
-DbEnv_get_lk_max_locks ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lk_max_locks(struct DbEnv *sel/
-DbEnv_get_lk_max_objects ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_lk_max_objects(struct DbEnv *s/
-DbEnv_get_mp_mmapsize ../libdb_java/db_java_wrap.c /^size_t DbEnv_get_mp_mmapsize(struct DbEnv *self){$/
-DbEnv_get_open_flags ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_open_flags(struct DbEnv *self)/
-DbEnv_get_rep_limit ../libdb_java/db_java_wrap.c /^jlong DbEnv_get_rep_limit(struct DbEnv *self){$/
-DbEnv_get_shm_key ../libdb_java/db_java_wrap.c /^long DbEnv_get_shm_key(struct DbEnv *self){$/
-DbEnv_get_tas_spins ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_tas_spins(struct DbEnv *self){/
-DbEnv_get_timeout ../libdb_java/db_java_wrap.c /^db_timeout_t DbEnv_get_timeout(struct DbEnv *self,/
-DbEnv_get_tmp_dir ../libdb_java/db_java_wrap.c /^char const *DbEnv_get_tmp_dir(struct DbEnv *self){/
-DbEnv_get_tx_max ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_get_tx_max(struct DbEnv *self){$/
-DbEnv_get_tx_timestamp ../libdb_java/db_java_wrap.c /^time_t DbEnv_get_tx_timestamp(struct DbEnv *self){/
-DbEnv_get_verbose ../libdb_java/db_java_wrap.c /^int_bool DbEnv_get_verbose(struct DbEnv *self,u_in/
-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_lock_detect ../libdb_java/db_java_wrap.c /^int DbEnv_lock_detect(struct DbEnv *self,u_int32_t/
-DbEnv_lock_get ../libdb_java/db_java_wrap.c /^DB_LOCK *DbEnv_lock_get(struct DbEnv *self,u_int32/
-DbEnv_lock_id ../libdb_java/db_java_wrap.c /^u_int32_t DbEnv_lock_id(struct DbEnv *self){$/
-DbEnv_lock_id_free ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_lock_id_free(struct DbEnv *self,u_i/
-DbEnv_lock_put ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_lock_put(struct DbEnv *self,DB_LOCK/
-DbEnv_lock_stat ../libdb_java/db_java_wrap.c /^DB_LOCK_STAT *DbEnv_lock_stat(struct DbEnv *self,u/
-DbEnv_log_archive ../libdb_java/db_java_wrap.c /^char **DbEnv_log_archive(struct DbEnv *self,u_int3/
-DbEnv_log_compare ../libdb_java/db_java_wrap.c /^int DbEnv_log_compare(DB_LSN const *lsn0,DB_LSN co/
-DbEnv_log_cursor ../libdb_java/db_java_wrap.c /^DB_LOGC *DbEnv_log_cursor(struct DbEnv *self,u_int/
-DbEnv_log_file ../libdb_java/db_java_wrap.c /^char *DbEnv_log_file(struct DbEnv *self,DB_LSN *ls/
-DbEnv_log_flush ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_log_flush(struct DbEnv *self,DB_LSN/
-DbEnv_log_put ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_log_put(struct DbEnv *self,DB_LSN */
-DbEnv_log_stat ../libdb_java/db_java_wrap.c /^DB_LOG_STAT *DbEnv_log_stat(struct DbEnv *self,u_i/
-DbEnv_memp_fstat ../libdb_java/db_java_wrap.c /^DB_MPOOL_FSTAT **DbEnv_memp_fstat(struct DbEnv *se/
-DbEnv_memp_stat ../libdb_java/db_java_wrap.c /^DB_MPOOL_STAT *DbEnv_memp_stat(struct DbEnv *self,/
-DbEnv_memp_trickle ../libdb_java/db_java_wrap.c /^int DbEnv_memp_trickle(struct DbEnv *self,int perc/
-DbEnv_open ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_open(struct DbEnv *self,char const /
-DbEnv_remove ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_remove(struct DbEnv *self,char cons/
-DbEnv_rep_elect ../libdb_java/db_java_wrap.c /^int DbEnv_rep_elect(struct DbEnv *self,int nsites,/
-DbEnv_rep_process_message ../libdb_java/db_java_wrap.c /^int DbEnv_rep_process_message(struct DbEnv *self,D/
-DbEnv_rep_start ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_rep_start(struct DbEnv *self,DBT *c/
-DbEnv_rep_stat ../libdb_java/db_java_wrap.c /^DB_REP_STAT *DbEnv_rep_stat(struct DbEnv *self,u_i/
-DbEnv_set_app_dispatch ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_app_dispatch(struct DbEnv *self/
-DbEnv_set_cachesize ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_cachesize(struct DbEnv *self,jl/
-DbEnv_set_data_dir ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_data_dir(struct DbEnv *self,cha/
-DbEnv_set_encrypt ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_encrypt(struct DbEnv *self,char/
-DbEnv_set_errcall ../libdb_java/db_java_wrap.c /^void DbEnv_set_errcall(struct DbEnv *self,void (*d/
-DbEnv_set_errpfx ../libdb_java/db_java_wrap.c /^void DbEnv_set_errpfx(struct DbEnv *self,char cons/
-DbEnv_set_feedback ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_feedback(struct DbEnv *self,voi/
-DbEnv_set_flags ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_flags(struct DbEnv *self,u_int3/
-DbEnv_set_lg_bsize ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lg_bsize(struct DbEnv *self,u_i/
-DbEnv_set_lg_dir ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lg_dir(struct DbEnv *self,char /
-DbEnv_set_lg_max ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lg_max(struct DbEnv *self,u_int/
-DbEnv_set_lg_regionmax ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lg_regionmax(struct DbEnv *self/
-DbEnv_set_lk_conflicts ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lk_conflicts(struct DbEnv *self/
-DbEnv_set_lk_detect ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lk_detect(struct DbEnv *self,u_/
-DbEnv_set_lk_max_lockers ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lk_max_lockers(struct DbEnv *se/
-DbEnv_set_lk_max_locks ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lk_max_locks(struct DbEnv *self/
-DbEnv_set_lk_max_objects ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_lk_max_objects(struct DbEnv *se/
-DbEnv_set_mp_mmapsize ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_mp_mmapsize(struct DbEnv *self,/
-DbEnv_set_msgcall ../libdb_java/db_java_wrap.c /^void DbEnv_set_msgcall(struct DbEnv *self,void (*d/
-DbEnv_set_paniccall ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_paniccall(struct DbEnv *self,vo/
-DbEnv_set_rep_limit ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_rep_limit(struct DbEnv *self,jl/
-DbEnv_set_rep_transport ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_rep_transport(struct DbEnv *sel/
-DbEnv_set_rpc_server ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_rpc_server(struct DbEnv *self,v/
-DbEnv_set_shm_key ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_shm_key(struct DbEnv *self,long/
-DbEnv_set_tas_spins ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_tas_spins(struct DbEnv *self,u_/
-DbEnv_set_timeout ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_timeout(struct DbEnv *self,db_t/
-DbEnv_set_tmp_dir ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_tmp_dir(struct DbEnv *self,char/
-DbEnv_set_tx_max ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_tx_max(struct DbEnv *self,u_int/
-DbEnv_set_tx_timestamp ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_tx_timestamp(struct DbEnv *self/
-DbEnv_set_verbose ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_set_verbose(struct DbEnv *self,u_in/
-DbEnv_strerror ../libdb_java/db_java_wrap.c /^char const *DbEnv_strerror(int error){$/
-DbEnv_txn_begin ../libdb_java/db_java_wrap.c /^DB_TXN *DbEnv_txn_begin(struct DbEnv *self,DB_TXN /
-DbEnv_txn_checkpoint ../libdb_java/db_java_wrap.c /^db_ret_t DbEnv_txn_checkpoint(struct DbEnv *self,u/
-DbEnv_txn_recover ../libdb_java/db_java_wrap.c /^DB_PREPLIST *DbEnv_txn_recover(struct DbEnv *self,/
-DbEnv_txn_stat ../libdb_java/db_java_wrap.c /^DB_TXN_STAT *DbEnv_txn_stat(struct DbEnv *self,u_i/
-DbException::DbException ../cxx/cxx_except.cpp /^DbException::DbException(int err)$/
-DbException::describe ../cxx/cxx_except.cpp /^void DbException::describe(const char *prefix, con/
-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 throw()$/
-DbException::~DbException ../cxx/cxx_except.cpp /^DbException::~DbException() throw()$/
-DbLock ../libdb_java/db_java_wrap.c 1741
-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 ../libdb_java/db_java_wrap.c 1742
-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()$/
-DbLogc_close ../libdb_java/db_java_wrap.c /^db_ret_t DbLogc_close(struct DbLogc *self,u_int32_/
-DbLogc_get ../libdb_java/db_java_wrap.c /^int DbLogc_get(struct DbLogc *self,DB_LSN *lsn,DBT/
-DbLsn ../libdb_java/db_java_wrap.c 1743
-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() throw()$/
-DbMpoolFile ../libdb_java/db_java_wrap.c 1744
-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()$/
-DbMpoolFile_get_flags ../libdb_java/db_java_wrap.c /^u_int32_t DbMpoolFile_get_flags(struct DbMpoolFile/
-DbMpoolFile_get_maxsize ../libdb_java/db_java_wrap.c /^jlong DbMpoolFile_get_maxsize(struct DbMpoolFile */
-DbMpoolFile_get_priority ../libdb_java/db_java_wrap.c /^DB_CACHE_PRIORITY DbMpoolFile_get_priority(struct /
-DbMpoolFile_set_flags ../libdb_java/db_java_wrap.c /^db_ret_t DbMpoolFile_set_flags(struct DbMpoolFile /
-DbMpoolFile_set_maxsize ../libdb_java/db_java_wrap.c /^db_ret_t DbMpoolFile_set_maxsize(struct DbMpoolFil/
-DbMpoolFile_set_priority ../libdb_java/db_java_wrap.c /^db_ret_t DbMpoolFile_set_priority(struct DbMpoolFi/
-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() /
-DbSequence ../libdb_java/db_java_wrap.c 1745
-DbSequence::DbSequence ../cxx/cxx_seq.cpp /^DbSequence::DbSequence(Db *db, u_int32_t flags)$/
-DbSequence::get_key ../cxx/cxx_seq.cpp /^Dbt *DbSequence::get_key()$/
-DbSequence::wrap_DB_SEQUENCE ../cxx/cxx_seq.cpp /^DbSequence *DbSequence::wrap_DB_SEQUENCE(DB_SEQUEN/
-DbSequence::~DbSequence ../cxx/cxx_seq.cpp /^DbSequence::~DbSequence()$/
-DbSequence_close ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_close(struct DbSequence *self,/
-DbSequence_get ../libdb_java/db_java_wrap.c /^db_seq_t DbSequence_get(struct DbSequence *self,DB/
-DbSequence_get_cachesize ../libdb_java/db_java_wrap.c /^int32_t DbSequence_get_cachesize(struct DbSequence/
-DbSequence_get_db ../libdb_java/db_java_wrap.c /^DB *DbSequence_get_db(struct DbSequence *self){$/
-DbSequence_get_flags ../libdb_java/db_java_wrap.c /^u_int32_t DbSequence_get_flags(struct DbSequence */
-DbSequence_get_key ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_get_key(struct DbSequence *sel/
-DbSequence_get_range_max ../libdb_java/db_java_wrap.c /^db_seq_t DbSequence_get_range_max(struct DbSequenc/
-DbSequence_get_range_min ../libdb_java/db_java_wrap.c /^db_seq_t DbSequence_get_range_min(struct DbSequenc/
-DbSequence_initial_value ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_initial_value(struct DbSequenc/
-DbSequence_open ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_open(struct DbSequence *self,D/
-DbSequence_remove ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_remove(struct DbSequence *self/
-DbSequence_set_cachesize ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_set_cachesize(struct DbSequenc/
-DbSequence_set_flags ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_set_flags(struct DbSequence *s/
-DbSequence_set_range ../libdb_java/db_java_wrap.c /^db_ret_t DbSequence_set_range(struct DbSequence *s/
-DbSequence_stat ../libdb_java/db_java_wrap.c /^DB_SEQUENCE_STAT *DbSequence_stat(struct DbSequenc/
-DbTxn ../libdb_java/db_java_wrap.c 1746
-DbTxn::DbTxn ../cxx/cxx_txn.cpp /^DbTxn::DbTxn()$/
-DbTxn::~DbTxn ../cxx/cxx_txn.cpp /^DbTxn::~DbTxn()$/
-DbTxn_abort ../libdb_java/db_java_wrap.c /^db_ret_t DbTxn_abort(struct DbTxn *self){$/
-DbTxn_commit ../libdb_java/db_java_wrap.c /^db_ret_t DbTxn_commit(struct DbTxn *self,u_int32_t/
-DbTxn_discard ../libdb_java/db_java_wrap.c /^db_ret_t DbTxn_discard(struct DbTxn *self,u_int32_/
-DbTxn_id ../libdb_java/db_java_wrap.c /^u_int32_t DbTxn_id(struct DbTxn *self){$/
-DbTxn_prepare ../libdb_java/db_java_wrap.c /^db_ret_t DbTxn_prepare(struct DbTxn *self,u_int8_t/
-DbTxn_set_timeout ../libdb_java/db_java_wrap.c /^db_ret_t DbTxn_set_timeout(struct DbTxn *self,db_t/
-Db_associate ../libdb_java/db_java_wrap.c /^db_ret_t Db_associate(struct Db *self,DB_TXN *txni/
-Db_close ../libdb_java/db_java_wrap.c /^int Db_close(struct Db *self,u_int32_t flags){$/
-Db_cursor ../libdb_java/db_java_wrap.c /^DBC *Db_cursor(struct Db *self,DB_TXN *txnid,u_int/
-Db_del ../libdb_java/db_java_wrap.c /^int Db_del(struct Db *self,DB_TXN *txnid,DBT *key,/
-Db_err ../libdb_java/db_java_wrap.c /^void Db_err(struct Db *self,int error,char const */
-Db_errx ../libdb_java/db_java_wrap.c /^void Db_errx(struct Db *self,char const *message){/
-Db_get ../libdb_java/db_java_wrap.c /^int Db_get(struct Db *self,DB_TXN *txnid,DBT *key,/
-Db_get_bt_minkey ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_bt_minkey(struct Db *self){$/
-Db_get_byteswapped ../libdb_java/db_java_wrap.c /^int_bool Db_get_byteswapped(struct Db *self){$/
-Db_get_cachesize ../libdb_java/db_java_wrap.c /^jlong Db_get_cachesize(struct Db *self){$/
-Db_get_cachesize_ncache ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_cachesize_ncache(struct Db *self)/
-Db_get_dbname ../libdb_java/db_java_wrap.c /^char const *Db_get_dbname(struct Db *self){$/
-Db_get_encrypt_flags ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_encrypt_flags(struct Db *self){$/
-Db_get_errpfx ../libdb_java/db_java_wrap.c /^char const *Db_get_errpfx(struct Db *self){$/
-Db_get_filename ../libdb_java/db_java_wrap.c /^char const *Db_get_filename(struct Db *self){$/
-Db_get_flags ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_flags(struct Db *self){$/
-Db_get_h_ffactor ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_h_ffactor(struct Db *self){$/
-Db_get_h_nelem ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_h_nelem(struct Db *self){$/
-Db_get_lorder ../libdb_java/db_java_wrap.c /^int Db_get_lorder(struct Db *self){$/
-Db_get_mpf ../libdb_java/db_java_wrap.c /^DB_MPOOLFILE *Db_get_mpf(struct Db *self){$/
-Db_get_open_flags ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_open_flags(struct Db *self){$/
-Db_get_pagesize ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_pagesize(struct Db *self){$/
-Db_get_q_extentsize ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_q_extentsize(struct Db *self){$/
-Db_get_re_delim ../libdb_java/db_java_wrap.c /^int Db_get_re_delim(struct Db *self){$/
-Db_get_re_len ../libdb_java/db_java_wrap.c /^u_int32_t Db_get_re_len(struct Db *self){$/
-Db_get_re_pad ../libdb_java/db_java_wrap.c /^int Db_get_re_pad(struct Db *self){$/
-Db_get_re_source ../libdb_java/db_java_wrap.c /^char const *Db_get_re_source(struct Db *self){$/
-Db_get_transactional ../libdb_java/db_java_wrap.c /^int_bool Db_get_transactional(struct Db *self){$/
-Db_get_type ../libdb_java/db_java_wrap.c /^DBTYPE Db_get_type(struct Db *self){$/
-Db_join ../libdb_java/db_java_wrap.c /^DBC *Db_join(struct Db *self,DBC **curslist,u_int3/
-Db_key_range ../libdb_java/db_java_wrap.c /^db_ret_t Db_key_range(struct Db *self,DB_TXN *txni/
-Db_open ../libdb_java/db_java_wrap.c /^db_ret_t Db_open(struct Db *self,DB_TXN *txnid,cha/
-Db_pget ../libdb_java/db_java_wrap.c /^int Db_pget(struct Db *self,DB_TXN *txnid,DBT *key/
-Db_put ../libdb_java/db_java_wrap.c /^int Db_put(struct Db *self,DB_TXN *txnid,DBT *key,/
-Db_remove ../libdb_java/db_java_wrap.c /^db_ret_t Db_remove(struct Db *self,char const *fil/
-Db_rename ../libdb_java/db_java_wrap.c /^db_ret_t Db_rename(struct Db *self,char const *fil/
-Db_set_append_recno ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_append_recno(struct Db *self,int (/
-Db_set_bt_compare ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_bt_compare(struct Db *self,int (*b/
-Db_set_bt_maxkey ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_bt_maxkey(struct Db *self,u_int32_/
-Db_set_bt_minkey ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_bt_minkey(struct Db *self,u_int32_/
-Db_set_bt_prefix ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_bt_prefix(struct Db *self,size_t (/
-Db_set_cachesize ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_cachesize(struct Db *self,jlong by/
-Db_set_dup_compare ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_dup_compare(struct Db *self,int (*/
-Db_set_encrypt ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_encrypt(struct Db *self,char const/
-Db_set_errpfx ../libdb_java/db_java_wrap.c /^void Db_set_errpfx(struct Db *self,char const *err/
-Db_set_feedback ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_feedback(struct Db *self,void (*db/
-Db_set_flags ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_flags(struct Db *self,u_int32_t fl/
-Db_set_h_ffactor ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_h_ffactor(struct Db *self,u_int32_/
-Db_set_h_hash ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_h_hash(struct Db *self,u_int32_t (/
-Db_set_h_nelem ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_h_nelem(struct Db *self,u_int32_t /
-Db_set_lorder ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_lorder(struct Db *self,int lorder)/
-Db_set_pagesize ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_pagesize(struct Db *self,u_int32_t/
-Db_set_q_extentsize ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_q_extentsize(struct Db *self,u_int/
-Db_set_re_delim ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_re_delim(struct Db *self,int re_de/
-Db_set_re_len ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_re_len(struct Db *self,u_int32_t r/
-Db_set_re_pad ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_re_pad(struct Db *self,int re_pad)/
-Db_set_re_source ../libdb_java/db_java_wrap.c /^db_ret_t Db_set_re_source(struct Db *self,char *so/
-Db_stat ../libdb_java/db_java_wrap.c /^void *Db_stat(struct Db *self,DB_TXN *txnid,u_int3/
-Db_sync ../libdb_java/db_java_wrap.c /^db_ret_t Db_sync(struct Db *self,u_int32_t flags){/
+Db ../cxx/cxx_db.cpp /^\/\/ If the DB handle is still open, we close it. /
+DbDeadlockException ../cxx/cxx_except.cpp /^DbDeadlockException::~DbDeadlockException() throw(/
+DbEnv ../cxx/cxx_env.cpp /^\/\/ If the DB_ENV handle is still open, we close /
+DbEnv_cdsgroup_begin ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_TXN *DbEnv_cdsgroup_begin(struct DbE/
+DbEnv_close ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_close(struct DbEnv *self/
+DbEnv_dbremove ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_dbremove(struct DbEnv *s/
+DbEnv_dbrename ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_dbrename(struct DbEnv *s/
+DbEnv_err ../libdb_java/db_java_wrap.c /^SWIGINTERN void DbEnv_err(struct DbEnv *self,int e/
+DbEnv_errx ../libdb_java/db_java_wrap.c /^SWIGINTERN void DbEnv_errx(struct DbEnv *self,char/
+DbEnv_fileid_reset ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_fileid_reset(struct DbEn/
+DbEnv_get_cachesize ../libdb_java/db_java_wrap.c /^SWIGINTERN jlong DbEnv_get_cachesize(struct DbEnv /
+DbEnv_get_cachesize_ncache ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_cachesize_ncache(struct D/
+DbEnv_get_data_dirs ../libdb_java/db_java_wrap.c /^SWIGINTERN char const **DbEnv_get_data_dirs(struct/
+DbEnv_get_encrypt_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_encrypt_flags(struc/
+DbEnv_get_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_flags(struct DbEnv /
+DbEnv_get_home ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *DbEnv_get_home(struct DbEnv/
+DbEnv_get_lg_bsize ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lg_bsize(struct DbE/
+DbEnv_get_lg_dir ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *DbEnv_get_lg_dir(struct DbE/
+DbEnv_get_lg_filemode ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_lg_filemode(struct DbEnv /
+DbEnv_get_lg_max ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lg_max(struct DbEnv/
+DbEnv_get_lg_regionmax ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lg_regionmax(struct/
+DbEnv_get_lk_conflicts ../libdb_java/db_java_wrap.c /^SWIGINTERN struct __db_lk_conflicts DbEnv_get_lk_c/
+DbEnv_get_lk_detect ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lk_detect(struct Db/
+DbEnv_get_lk_max_lockers ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lk_max_lockers(stru/
+DbEnv_get_lk_max_locks ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lk_max_locks(struct/
+DbEnv_get_lk_max_objects ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_lk_max_objects(stru/
+DbEnv_get_mp_max_openfd ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_mp_max_openfd(struct DbEn/
+DbEnv_get_mp_max_write ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_mp_max_write(struct DbEnv/
+DbEnv_get_mp_max_write_sleep ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_mp_max_write_sleep(struct/
+DbEnv_get_mp_mmapsize ../libdb_java/db_java_wrap.c /^SWIGINTERN size_t DbEnv_get_mp_mmapsize(struct DbE/
+DbEnv_get_open_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_open_flags(struct D/
+DbEnv_get_shm_key ../libdb_java/db_java_wrap.c /^SWIGINTERN long DbEnv_get_shm_key(struct DbEnv *se/
+DbEnv_get_timeout ../libdb_java/db_java_wrap.c /^SWIGINTERN db_timeout_t DbEnv_get_timeout(struct D/
+DbEnv_get_tmp_dir ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *DbEnv_get_tmp_dir(struct Db/
+DbEnv_get_tx_max ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_get_tx_max(struct DbEnv/
+DbEnv_get_tx_timestamp ../libdb_java/db_java_wrap.c /^SWIGINTERN time_t DbEnv_get_tx_timestamp(struct Db/
+DbEnv_get_verbose ../libdb_java/db_java_wrap.c /^SWIGINTERN int_bool DbEnv_get_verbose(struct DbEnv/
+DbEnv_get_version_major ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_version_major(){$/
+DbEnv_get_version_minor ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_version_minor(){$/
+DbEnv_get_version_patch ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_get_version_patch(){$/
+DbEnv_get_version_string ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *DbEnv_get_version_string(){/
+DbEnv_is_bigendian ../libdb_java/db_java_wrap.c /^SWIGINTERN int_bool DbEnv_is_bigendian(struct DbEn/
+DbEnv_lock_detect ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_lock_detect(struct DbEnv *sel/
+DbEnv_lock_get ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_LOCK *DbEnv_lock_get(struct DbEnv *s/
+DbEnv_lock_id ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_lock_id(struct DbEnv *s/
+DbEnv_lock_id_free ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_lock_id_free(struct DbEn/
+DbEnv_lock_put ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_lock_put(struct DbEnv *s/
+DbEnv_lock_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_LOCK_STAT *DbEnv_lock_stat(struct Db/
+DbEnv_log_archive ../libdb_java/db_java_wrap.c /^SWIGINTERN char **DbEnv_log_archive(struct DbEnv */
+DbEnv_log_compare ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_log_compare(DB_LSN const *lsn/
+DbEnv_log_cursor ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_LOGC *DbEnv_log_cursor(struct DbEnv /
+DbEnv_log_file ../libdb_java/db_java_wrap.c /^SWIGINTERN char *DbEnv_log_file(struct DbEnv *self/
+DbEnv_log_flush ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_log_flush(struct DbEnv */
+DbEnv_log_print ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_log_print(struct DbEnv */
+DbEnv_log_put ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_log_put(struct DbEnv *se/
+DbEnv_log_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_LOG_STAT *DbEnv_log_stat(struct DbEn/
+DbEnv_lsn_reset ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_lsn_reset(struct DbEnv */
+DbEnv_memp_fstat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_MPOOL_FSTAT **DbEnv_memp_fstat(struc/
+DbEnv_memp_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_MPOOL_STAT *DbEnv_memp_stat(struct D/
+DbEnv_memp_trickle ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_memp_trickle(struct DbEnv *se/
+DbEnv_mutex_get_align ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_mutex_get_align(struct /
+DbEnv_mutex_get_increment ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_mutex_get_increment(str/
+DbEnv_mutex_get_max ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_mutex_get_max(struct Db/
+DbEnv_mutex_get_tas_spins ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_mutex_get_tas_spins(str/
+DbEnv_mutex_set_align ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_mutex_set_align(struct D/
+DbEnv_mutex_set_increment ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_mutex_set_increment(stru/
+DbEnv_mutex_set_max ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_mutex_set_max(struct DbE/
+DbEnv_mutex_set_tas_spins ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_mutex_set_tas_spins(stru/
+DbEnv_mutex_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_MUTEX_STAT *DbEnv_mutex_stat(struct /
+DbEnv_open ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_open(struct DbEnv *self,/
+DbEnv_remove ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_remove(struct DbEnv *sel/
+DbEnv_rep_elect ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_rep_elect(struct DbEnv *self,/
+DbEnv_rep_flush ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_flush(struct DbEnv */
+DbEnv_rep_get_config ../libdb_java/db_java_wrap.c /^SWIGINTERN int_bool DbEnv_rep_get_config(struct Db/
+DbEnv_rep_get_limit ../libdb_java/db_java_wrap.c /^SWIGINTERN jlong DbEnv_rep_get_limit(struct DbEnv /
+DbEnv_rep_get_nsites ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_rep_get_nsites(struct DbEnv */
+DbEnv_rep_get_priority ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_rep_get_priority(struct DbEnv/
+DbEnv_rep_get_timeout ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbEnv_rep_get_timeout(struct /
+DbEnv_rep_process_message ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_rep_process_message(struct Db/
+DbEnv_rep_set_config ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_set_config(struct Db/
+DbEnv_rep_set_limit ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_set_limit(struct DbE/
+DbEnv_rep_set_nsites ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_set_nsites(struct Db/
+DbEnv_rep_set_priority ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_set_priority(struct /
+DbEnv_rep_set_timeout ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_set_timeout(struct D/
+DbEnv_rep_set_transport ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_set_transport(struct/
+DbEnv_rep_start ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_start(struct DbEnv */
+DbEnv_rep_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_REP_STAT *DbEnv_rep_stat(struct DbEn/
+DbEnv_rep_sync ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_rep_sync(struct DbEnv *s/
+DbEnv_repmgr_add_remote_site ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbEnv_repmgr_add_remote_site(struct/
+DbEnv_repmgr_get_ack_policy ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_repmgr_get_ack_policy(st/
+DbEnv_repmgr_set_ack_policy ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_repmgr_set_ack_policy(st/
+DbEnv_repmgr_set_local_site ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_repmgr_set_local_site(st/
+DbEnv_repmgr_site_list ../libdb_java/db_java_wrap.c /^SWIGINTERN struct __db_repmgr_sites DbEnv_repmgr_s/
+DbEnv_repmgr_start ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_repmgr_start(struct DbEn/
+DbEnv_set_app_dispatch ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_app_dispatch(struct /
+DbEnv_set_cachesize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_cachesize(struct DbE/
+DbEnv_set_data_dir ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_data_dir(struct DbEn/
+DbEnv_set_encrypt ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_encrypt(struct DbEnv/
+DbEnv_set_errcall ../libdb_java/db_java_wrap.c /^SWIGINTERN void DbEnv_set_errcall(struct DbEnv *se/
+DbEnv_set_event_notify ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_event_notify(struct /
+DbEnv_set_feedback ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_feedback(struct DbEn/
+DbEnv_set_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_flags(struct DbEnv */
+DbEnv_set_intermediate_dir ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_intermediate_dir(str/
+DbEnv_set_lg_bsize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lg_bsize(struct DbEn/
+DbEnv_set_lg_dir ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lg_dir(struct DbEnv /
+DbEnv_set_lg_filemode ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lg_filemode(struct D/
+DbEnv_set_lg_max ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lg_max(struct DbEnv /
+DbEnv_set_lg_regionmax ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lg_regionmax(struct /
+DbEnv_set_lk_conflicts ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lk_conflicts(struct /
+DbEnv_set_lk_detect ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lk_detect(struct DbE/
+DbEnv_set_lk_max_lockers ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lk_max_lockers(struc/
+DbEnv_set_lk_max_locks ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lk_max_locks(struct /
+DbEnv_set_lk_max_objects ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_lk_max_objects(struc/
+DbEnv_set_mp_max_openfd ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_mp_max_openfd(struct/
+DbEnv_set_mp_max_write ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_mp_max_write(struct /
+DbEnv_set_mp_mmapsize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_mp_mmapsize(struct D/
+DbEnv_set_msgcall ../libdb_java/db_java_wrap.c /^SWIGINTERN void DbEnv_set_msgcall(struct DbEnv *se/
+DbEnv_set_paniccall ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_paniccall(struct DbE/
+DbEnv_set_rep_request ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_rep_request(struct D/
+DbEnv_set_rpc_server ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_rpc_server(struct Db/
+DbEnv_set_shm_key ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_shm_key(struct DbEnv/
+DbEnv_set_timeout ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_timeout(struct DbEnv/
+DbEnv_set_tmp_dir ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_tmp_dir(struct DbEnv/
+DbEnv_set_tx_max ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_tx_max(struct DbEnv /
+DbEnv_set_tx_timestamp ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_tx_timestamp(struct /
+DbEnv_set_verbose ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_set_verbose(struct DbEnv/
+DbEnv_strerror ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *DbEnv_strerror(int error){$/
+DbEnv_txn_begin ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_TXN *DbEnv_txn_begin(struct DbEnv *s/
+DbEnv_txn_checkpoint ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbEnv_txn_checkpoint(struct Db/
+DbEnv_txn_recover ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_PREPLIST *DbEnv_txn_recover(struct D/
+DbEnv_txn_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_TXN_STAT *DbEnv_txn_stat(struct DbEn/
+DbException ../cxx/cxx_except.cpp /^DbException::~DbException() throw()$/
+DbLock ../cxx/cxx_lock.cpp /^DbLock::DbLock()$/
+DbLockNotGrantedException ../cxx/cxx_except.cpp /^DbLockNotGrantedException::~DbLockNotGrantedExcept/
+DbLogc ../cxx/cxx_logc.cpp /^\/\/ It's private, and should never be called,$/
+DbLogc_close ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbLogc_close(struct DbLogc *se/
+DbLogc_get ../libdb_java/db_java_wrap.c /^SWIGINTERN int DbLogc_get(struct DbLogc *self,DB_L/
+DbLsn ../libdb_java/db_java_wrap.c /^#define DbLsn __db_lsn$/
+DbMemoryException ../cxx/cxx_except.cpp /^DbMemoryException::~DbMemoryException() throw()$/
+DbMpoolFile ../cxx/cxx_mpool.cpp /^DbMpoolFile::~DbMpoolFile()$/
+DbMpoolFile_get_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbMpoolFile_get_flags(struct /
+DbMpoolFile_get_maxsize ../libdb_java/db_java_wrap.c /^SWIGINTERN jlong DbMpoolFile_get_maxsize(struct Db/
+DbMpoolFile_get_priority ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_CACHE_PRIORITY DbMpoolFile_get_prior/
+DbMpoolFile_set_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbMpoolFile_set_flags(struct D/
+DbMpoolFile_set_maxsize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbMpoolFile_set_maxsize(struct/
+DbMpoolFile_set_priority ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbMpoolFile_set_priority(struc/
+DbRepHandleDeadException ../cxx/cxx_except.cpp /^DbRepHandleDeadException::~DbRepHandleDeadExceptio/
+DbRunRecoveryException ../cxx/cxx_except.cpp /^DbRunRecoveryException::~DbRunRecoveryException() /
+DbSequence ../cxx/cxx_seq.cpp /^DbSequence::~DbSequence()$/
+DbSequence_close ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_close(struct DbSequ/
+DbSequence_get ../libdb_java/db_java_wrap.c /^SWIGINTERN db_seq_t DbSequence_get(struct DbSequen/
+DbSequence_get_cachesize ../libdb_java/db_java_wrap.c /^SWIGINTERN int32_t DbSequence_get_cachesize(struct/
+DbSequence_get_db ../libdb_java/db_java_wrap.c /^SWIGINTERN DB *DbSequence_get_db(struct DbSequence/
+DbSequence_get_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbSequence_get_flags(struct D/
+DbSequence_get_key ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_get_key(struct DbSe/
+DbSequence_get_range_max ../libdb_java/db_java_wrap.c /^SWIGINTERN db_seq_t DbSequence_get_range_max(struc/
+DbSequence_get_range_min ../libdb_java/db_java_wrap.c /^SWIGINTERN db_seq_t DbSequence_get_range_min(struc/
+DbSequence_initial_value ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_initial_value(struc/
+DbSequence_open ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_open(struct DbSeque/
+DbSequence_remove ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_remove(struct DbSeq/
+DbSequence_set_cachesize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_set_cachesize(struc/
+DbSequence_set_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_set_flags(struct Db/
+DbSequence_set_range ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbSequence_set_range(struct Db/
+DbSequence_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_SEQUENCE_STAT *DbSequence_stat(struc/
+DbTxn ../cxx/cxx_txn.cpp /^DbTxn::~DbTxn()$/
+DbTxn_abort ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbTxn_abort(struct DbTxn *self/
+DbTxn_commit ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbTxn_commit(struct DbTxn *sel/
+DbTxn_discard ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbTxn_discard(struct DbTxn *se/
+DbTxn_get_name ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *DbTxn_get_name(struct DbTxn/
+DbTxn_id ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t DbTxn_id(struct DbTxn *self){/
+DbTxn_prepare ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbTxn_prepare(struct DbTxn *se/
+DbTxn_set_name ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbTxn_set_name(struct DbTxn *s/
+DbTxn_set_timeout ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t DbTxn_set_timeout(struct DbTxn/
+Db_associate ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_associate(struct Db *self,D/
+Db_close ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_close(struct Db *self,u_int32_t /
+Db_compact ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_compact(struct Db *self,DB_/
+Db_cursor ../libdb_java/db_java_wrap.c /^SWIGINTERN DBC *Db_cursor(struct Db *self,DB_TXN */
+Db_del ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_del(struct Db *self,DB_TXN *txni/
+Db_err ../libdb_java/db_java_wrap.c /^SWIGINTERN void Db_err(struct Db *self,int error,c/
+Db_errx ../libdb_java/db_java_wrap.c /^SWIGINTERN void Db_errx(struct Db *self,char const/
+Db_get ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_get(struct Db *self,DB_TXN *txni/
+Db_get_bt_minkey ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_bt_minkey(struct Db *s/
+Db_get_byteswapped ../libdb_java/db_java_wrap.c /^SWIGINTERN int_bool Db_get_byteswapped(struct Db */
+Db_get_cachesize ../libdb_java/db_java_wrap.c /^SWIGINTERN jlong Db_get_cachesize(struct Db *self)/
+Db_get_cachesize_ncache ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_cachesize_ncache(struc/
+Db_get_dbname ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *Db_get_dbname(struct Db *se/
+Db_get_encrypt_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_encrypt_flags(struct D/
+Db_get_filename ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *Db_get_filename(struct Db */
+Db_get_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_flags(struct Db *self)/
+Db_get_h_ffactor ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_h_ffactor(struct Db *s/
+Db_get_h_nelem ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_h_nelem(struct Db *sel/
+Db_get_lorder ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_get_lorder(struct Db *self){$/
+Db_get_mpf ../libdb_java/db_java_wrap.c /^SWIGINTERN DB_MPOOLFILE *Db_get_mpf(struct Db *sel/
+Db_get_open_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_open_flags(struct Db */
+Db_get_pagesize ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_pagesize(struct Db *se/
+Db_get_q_extentsize ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_q_extentsize(struct Db/
+Db_get_re_delim ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_get_re_delim(struct Db *self){$/
+Db_get_re_len ../libdb_java/db_java_wrap.c /^SWIGINTERN u_int32_t Db_get_re_len(struct Db *self/
+Db_get_re_pad ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_get_re_pad(struct Db *self){$/
+Db_get_re_source ../libdb_java/db_java_wrap.c /^SWIGINTERN char const *Db_get_re_source(struct Db /
+Db_get_transactional ../libdb_java/db_java_wrap.c /^SWIGINTERN int_bool Db_get_transactional(struct Db/
+Db_get_type ../libdb_java/db_java_wrap.c /^SWIGINTERN DBTYPE Db_get_type(struct Db *self){$/
+Db_join ../libdb_java/db_java_wrap.c /^SWIGINTERN DBC *Db_join(struct Db *self,DBC **curs/
+Db_key_range ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_key_range(struct Db *self,D/
+Db_open ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_open(struct Db *self,DB_TXN/
+Db_pget ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_pget(struct Db *self,DB_TXN *txn/
+Db_put ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_put(struct Db *self,DB_TXN *txni/
+Db_remove ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_remove(struct Db *self,char/
+Db_rename ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_rename(struct Db *self,char/
+Db_set_append_recno ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_append_recno(struct Db /
+Db_set_bt_compare ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_bt_compare(struct Db *s/
+Db_set_bt_minkey ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_bt_minkey(struct Db *se/
+Db_set_bt_prefix ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_bt_prefix(struct Db *se/
+Db_set_cachesize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_cachesize(struct Db *se/
+Db_set_dup_compare ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_dup_compare(struct Db */
+Db_set_encrypt ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_encrypt(struct Db *self/
+Db_set_feedback ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_feedback(struct Db *sel/
+Db_set_flags ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_flags(struct Db *self,u/
+Db_set_h_ffactor ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_h_ffactor(struct Db *se/
+Db_set_h_hash ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_h_hash(struct Db *self,/
+Db_set_h_nelem ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_h_nelem(struct Db *self/
+Db_set_lorder ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_lorder(struct Db *self,/
+Db_set_pagesize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_pagesize(struct Db *sel/
+Db_set_q_extentsize ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_q_extentsize(struct Db /
+Db_set_re_delim ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_re_delim(struct Db *sel/
+Db_set_re_len ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_re_len(struct Db *self,/
+Db_set_re_pad ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_re_pad(struct Db *self,/
+Db_set_re_source ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_set_re_source(struct Db *se/
+Db_stat ../libdb_java/db_java_wrap.c /^SWIGINTERN void *Db_stat(struct Db *self,DB_TXN *t/
+Db_sync ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_sync(struct Db *self,u_int3/
Db_tcl_Init ../tcl/tcl_db_pkg.c /^Db_tcl_Init(interp)$/
-Db_truncate ../libdb_java/db_java_wrap.c /^int Db_truncate(struct Db *self,DB_TXN *txnid,u_in/
-Db_upgrade ../libdb_java/db_java_wrap.c /^db_ret_t Db_upgrade(struct Db *self,char const *fi/
-Db_verify ../libdb_java/db_java_wrap.c /^int_bool Db_verify(struct Db *self,char const *fil/
-Dbc ../libdb_java/db_java_wrap.c 1738
-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()$/
-Dbc_close ../libdb_java/db_java_wrap.c /^db_ret_t Dbc_close(struct Dbc *self){$/
-Dbc_count ../libdb_java/db_java_wrap.c /^db_recno_t Dbc_count(struct Dbc *self,u_int32_t fl/
-Dbc_del ../libdb_java/db_java_wrap.c /^int Dbc_del(struct Dbc *self,u_int32_t flags){$/
-Dbc_dup ../libdb_java/db_java_wrap.c /^DBC *Dbc_dup(struct Dbc *self,u_int32_t flags){$/
-Dbc_get ../libdb_java/db_java_wrap.c /^int Dbc_get(struct Dbc *self,DBT *key,DBT *data,u_/
-Dbc_pget ../libdb_java/db_java_wrap.c /^int Dbc_pget(struct Dbc *self,DBT *key,DBT *pkey,D/
-Dbc_put ../libdb_java/db_java_wrap.c /^int Dbc_put(struct Dbc *self,DBT *key,DBT *data,u_/
-Dbt ../libdb_java/db_java_wrap.c 1739
-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 61
+Db_truncate ../libdb_java/db_java_wrap.c /^SWIGINTERN int Db_truncate(struct Db *self,DB_TXN /
+Db_upgrade ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Db_upgrade(struct Db *self,cha/
+Db_verify ../libdb_java/db_java_wrap.c /^SWIGINTERN int_bool Db_verify(struct Db *self,char/
+Dbc ../cxx/cxx_dbc.cpp /^\/\/ It's private, and should never be called, but/
+Dbc_close ../libdb_java/db_java_wrap.c /^SWIGINTERN db_ret_t Dbc_close(struct Dbc *self){$/
+Dbc_count ../libdb_java/db_java_wrap.c /^SWIGINTERN db_recno_t Dbc_count(struct Dbc *self,u/
+Dbc_del ../libdb_java/db_java_wrap.c /^SWIGINTERN int Dbc_del(struct Dbc *self,u_int32_t /
+Dbc_dup ../libdb_java/db_java_wrap.c /^SWIGINTERN DBC *Dbc_dup(struct Dbc *self,u_int32_t/
+Dbc_get ../libdb_java/db_java_wrap.c /^SWIGINTERN int Dbc_get(struct Dbc *self,DBT *key,D/
+Dbc_pget ../libdb_java/db_java_wrap.c /^SWIGINTERN int Dbc_pget(struct Dbc *self,DBT *key,/
+Dbc_put ../libdb_java/db_java_wrap.c /^SWIGINTERN int Dbc_put(struct Dbc *self,DBT *key,D/
+Dbt ../cxx/cxx_dbt.cpp /^Dbt::Dbt()$/
+EID_FROM_SITE ../dbinc/repmgr.h /^#define EID_FROM_SITE(s) ((int)((s) - (&db_rep->si/
+ELECTION_MAJORITY ../dbinc/rep.h /^#define ELECTION_MAJORITY(n) (((n) \/ 2) + 1)$/
+ELECT_ELECTION ../dbinc/rep.h /^#define ELECT_ELECTION 1 \/* Call for an election./
+ELECT_FAILURE_ELECTION ../dbinc/rep.h /^#define ELECT_FAILURE_ELECTION 3 \/* Do election, /
+ELECT_REPSTART ../dbinc/rep.h /^#define ELECT_REPSTART 2 \/* Call rep_start(CLIENT/
+EMSG ../clib/getopt.c /^#define EMSG ""$/
+ENTRY ../dbinc/db.in /^} ENTRY;$/
+ENV_ENTER ../dbinc/db_int.in /^#define ENV_ENTER(dbenv, ip) do { \\$/
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_ILLEGAL_BEFORE_OPEN ../dbinc/db_int.in /^#define ENV_ILLEGAL_BEFORE_OPEN(dbenv, name) \\/
+ENV_LEAVE ../dbinc/db_int.in /^#define ENV_LEAVE(dbenv, ip) do { \\$/
ENV_NOT_CONFIGURED ../dbinc/db_int.in /^#define ENV_NOT_CONFIGURED(dbenv, handle, i, flags/
ENV_REQUIRES_CONFIG ../dbinc/db_int.in /^#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flag/
-EPG ../dbinc/btree.h 50
+ENV_REQUIRES_CONFIG_XX ../dbinc/db_int.in /^#define ENV_REQUIRES_CONFIG_XX(dbenv, handle, i, f/
+EPG ../dbinc/btree.h /^struct __epg; typedef struct __epg EPG;$/
EPRINT ../dbinc/db_verify.h /^#define EPRINT(x) do { \\$/
-FALSE ../crypto/rijndael/rijndael-api-fst.h 55
+FALSE ../dbinc/db_int.in /^#define FALSE 0$/
FAST_HASH ../lock/lock_util.c /^#define FAST_HASH(P) { \\$/
+FHASH ../dbinc/mp.h /^#define FHASH(id, len) __ham_func5(NULL, id, (u_in/
+FILE_EXTEND_IO_SIZE ../env/env_file.c /^#define FILE_EXTEND_IO_SIZE (8 * 1024)$/
+FILE_WRITE_IO_SIZE ../env/env_file.c /^#define FILE_WRITE_IO_SIZE (64 * 1024)$/
+FIND_FIRST_DB_MATCH ../dbinc/db_am.h /^#define FIND_FIRST_DB_MATCH(dbenv, dbp, tdbp) do {/
FLAG_CHECK ../dbinc/tcl_db.h /^#define FLAG_CHECK(flag) do { \\$/
FLAG_CHECK2 ../dbinc/tcl_db.h /^#define FLAG_CHECK2(flag, val) do { \\$/
+FLAG_CHECK2_STDARG ../tcl/tcl_dbcursor.c /^#define FLAG_CHECK2_STDARG \\$/
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 303
-FNAME ../dbinc/db.in 158
-FREE_IF_CHANGED ../rpc_client/gen_client_ret.c /^#define FREE_IF_CHANGED(dbtp, orig) do { \\$/
-FREE_IF_NEEDED ../dbinc/db_int.in /^#define FREE_IF_NEEDED(sdbp, dbt) \\$/
+FMAP_ENTRIES ../mp/mp_stat.c /^#define FMAP_ENTRIES 200 \/* Files we map. *\/$/
+FN ../dbinc/db_int.in /^} FN;$/
+FNAME ../dbinc/db.in /^struct __fname; typedef struct __fname FNAME;$/
+FNBUCKET ../dbinc/mp.h /^#define FNBUCKET(id, len) \\$/
+FREE_IF_CHANGED ../dbinc/db_server_int.h /^#define FREE_IF_CHANGED(dbenv, p, orig) do { \\/
+FREE_IF_NEEDED ../dbinc/db_int.in /^#define FREE_IF_NEEDED(dbenv, 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)$/
+GCC_HASCLASSVISIBILITY ../libdb_java/db_java_wrap.c /^# define GCC_HASCLASSVISIBILITY$/
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_list.c /^#define GET_COUNT(dp, count) do { \\$/
GET_ENVLOCK ../fileops/fop_util.c /^#define GET_ENVLOCK(ENV, ID, L) (0)$/
-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_PCOUNT ../lock/lock_list.c /^#define GET_PCOUNT(dp, count) do { \\$/
GET_PGNO ../lock/lock_list.c /^#define GET_PGNO(dp, pgno) do { \\$/
GET_RINTERNAL ../dbinc/db_page.h /^#define GET_RINTERNAL(dbp, pg, indx) \\$/
GET_SIZE ../lock/lock_list.c /^#define GET_SIZE(dp, size) do { \\$/
-GIGABYTE ../dbinc/db_int.in 77
+GIGABYTE ../dbinc/db_int.in /^#define GIGABYTE 1073741824$/
GLOB_CHAR ../tcl/tcl_internal.c /^#define GLOB_CHAR(c) ((c) == '*' || (c) == '?')$/
-GUARD_BYTE ../dbinc/debug.h 29
-HASH4 ../hash/hash_func.c 166
-HASH4a ../hash/hash_func.c 164
-HASH4b ../hash/hash_func.c 165
-HASHC ../hash/hash_func.c 113
-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 134
-HDR_NORMAL_SZ ../dbinc/log.h 133
+GUARD_BYTE ../dbinc/debug.h /^#define GUARD_BYTE 0xdc$/
+HASH ../dbinc/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 ../dbinc/db_upgrade.h /^} HASHHDR;$/
+HASHINFO ../dbinc/db_185.in /^} HASHINFO;$/
+HASHMAGIC ../dbinc/db_185.in /^#define HASHMAGIC 0x061561$/
+HASHVERSION ../dbinc/db_185.in /^#define HASHVERSION 2$/
+HASH_CURSOR ../dbinc/hash.h /^} HASH_CURSOR;$/
+HASH_UNUSED1 ../dbinc/hash.h /^#define HASH_UNUSED1 0x60$/
+HASH_UNUSED2 ../dbinc/hash.h /^#define HASH_UNUSED2 0x70$/
+HDR ../dbinc/log.h /^struct __hdr; typedef struct __hdr HDR;$/
+HDR_CRYPTO_SZ ../dbinc/log.h /^#define HDR_CRYPTO_SZ 12 + DB_MAC_KEY + DB_IV_BYTE/
+HDR_NORMAL_SZ ../dbinc/log.h /^#define HDR_NORMAL_SZ 12$/
+HKEYDATA ../dbinc/db_page.h /^} HKEYDATA;$/
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 26
-HMAC_OUTPUT_SIZE ../hmac/hmac.c 25
+HMAC_BLOCK_SIZE ../hmac/hmac.c /^#define HMAC_BLOCK_SIZE 64$/
+HMAC_OUTPUT_SIZE ../hmac/hmac.c /^#define HMAC_OUTPUT_SIZE 20$/
+HMETA ../dbinc/db_page.h /^} HMETA33, HMETA;$/
+HMETA30 ../dbinc/db_upgrade.h /^} HMETA30;$/
+HMETA31 ../dbinc/db_upgrade.h /^} HMETA31;$/
+HOFFDUP ../dbinc/db_page.h /^} HOFFDUP;$/
HOFFDUP_PGNO ../dbinc/db_page.h /^#define HOFFDUP_PGNO(p) (((u_int8_t *)p) + SSZ(HO/
-HOFFDUP_SIZE ../dbinc/db_page.h 512
+HOFFDUP_SIZE ../dbinc/db_page.h /^#define HOFFDUP_SIZE (sizeof(HOFFDUP))$/
+HOFFPAGE ../dbinc/db_page.h /^} HOFFPAGE;$/
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_PSIZE ../dbinc/db_page.h /^#define HOFFPAGE_PSIZE (HOFFPAGE_SIZE + sizeof(db/
+HOFFPAGE_SIZE ../dbinc/db_page.h /^#define HOFFPAGE_SIZE (sizeof(HOFFPAGE))$/
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/
-HPUX_MUTEX_PAD ../dbinc/mutex.h 131
-H_CONTINUE ../dbinc/hash.h 79
+H_CONTINUE ../dbinc/hash.h /^#define H_CONTINUE 0x0001 \/* Join--search strict/
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_DELETED ../dbinc/hash.h /^#define H_DELETED 0x0002 \/* Cursor item is delet/
+H_DUPLICATE ../dbinc/db_page.h /^#define H_DUPLICATE 2 \/* Duplicate key\/data item/
+H_DUPONLY ../dbinc/hash.h /^#define H_DUPONLY 0x0004 \/* Dups only; do not ch/
+H_EXPAND ../dbinc/hash.h /^#define H_EXPAND 0x0008 \/* Table expanded. *\/$/
+H_ISDUP ../dbinc/hash.h /^#define H_ISDUP 0x0010 \/* Cursor is within dupl/
+H_KEYDATA ../dbinc/db_page.h /^#define H_KEYDATA 1 \/* Key\/data item. *\/$/
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_NEXT_NODUP ../dbinc/hash.h /^#define H_NEXT_NODUP 0x0020 \/* Get next non-dup /
+H_NOMORE ../dbinc/hash.h /^#define H_NOMORE 0x0040 \/* No more entries in bu/
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_OFFDUP ../dbinc/db_page.h /^#define H_OFFDUP 4 \/* Overflow page of duplicates/
+H_OFFPAGE ../dbinc/db_page.h /^#define H_OFFPAGE 3 \/* Overflow key\/data item. */
+H_OK ../dbinc/hash.h /^#define H_OK 0x0080 \/* Request succeeded. *\/$/
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 37
-INITIAL_DEAD_ALLOC ../lock/lock_deadlock.c 698
+ILLEGAL_SIZE ../env/db_salloc.c /^#define ILLEGAL_SIZE 1 \/* An illegal size. *\/$/
+INFOTYPE ../dbinc/tcl_db.h /^enum INFOTYPE {$/
+INITIAL_ALLOCATION ../repmgr/repmgr_windows.c /^#define INITIAL_ALLOCATION 5 \/* arbitrary size */
+INITIAL_DEAD_ALLOC ../lock/lock_deadlock.c /^#define INITIAL_DEAD_ALLOC 8$/
+INITIAL_SITES_ALLOCATION ../repmgr/repmgr_util.c /^#define INITIAL_SITES_ALLOCATION 10 \/* Arbitrary/
INIT_LSN ../dbinc/db_int.in /^#define INIT_LSN(LSN) do { \\$/
+INPROGRESS ../dbinc/repmgr.h /^#define INPROGRESS WSAEWOULDBLOCK$/
INP_OFFSET ../db/db_vrfy.c /^#define INP_OFFSET(dbp, h, i) \\$/
-INT64_FMT ../dbinc/db_int.in 59
-INT64_MAX ../dbinc/db_int.in 55
-INT64_MIN ../dbinc/db_int.in 56
-INVALID_LSNMSG ../tcl/tcl_internal.c 525
-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/
+INT64_MAX ../dbinc/db_int.in /^#define INT64_MAX _I64_MAX$/
+INT64_MIN ../dbinc/db_int.in /^#define INT64_MIN _I64_MIN$/
+INVALID_LSNMSG ../tcl/tcl_internal.c /^#define INVALID_LSNMSG "Invalid LSN with %d parts./
+INVALID_ORDER ../dbinc/btree.h /^#define INVALID_ORDER 0$/
+INVALID_REGION_ID ../dbinc/region.h /^#define INVALID_REGION_ID 0 \/* Out-of-band region/
+INVALID_REGION_SEGID ../dbinc/region.h /^#define INVALID_REGION_SEGID -1 \/* Segment IDs ar/
+INVALID_ROFF ../dbinc/region.h /^#define INVALID_ROFF 0$/
+INVALID_SOCKET ../dbinc/repmgr.h /^#define INVALID_SOCKET -1$/
+IN_ELECTION ../dbinc/rep.h /^#define IN_ELECTION(R) \\$/
IN_ELECTION_TALLY ../dbinc/rep.h /^#define IN_ELECTION_TALLY(R) \\$/
+IO_WAITER ../dbinc/mp.h /^#define IO_WAITER 0x001 \/* Thread is waiting on /
ISBIG ../dbinc/hash.h /^#define ISBIG(I, N) (((N) > ((I)->hdr->dbmeta.page/
ISDOT ../clib/getcwd.c /^#define ISDOT(dp) \\$/
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) \\$/
+ISSET_MAP ../lock/lock_deadlock.c /^#define ISSET_MAP(M, N) ((M)[(N) \/ 32] & (1 << ((/
IS_BTREE_PAGE ../btree/bt_rec.c /^#define IS_BTREE_PAGE(pagep) \\$/
IS_CLIENT_PGRECOVER ../dbinc/rep.h /^#define IS_CLIENT_PGRECOVER(dbenv) \\$/
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_DB_AUTO_COMMIT ../dbinc/db_am.h /^#define IS_DB_AUTO_COMMIT(dbp, txn) \\$/
IS_DELETED ../btree/bt_cursor.c /^#define IS_DELETED(dbp, page, indx) \\$/
+IS_DIRTY ../dbinc/mp.h /^#define IS_DIRTY(p) \\$/
IS_DUPLICATE ../btree/bt_cursor.c /^#define IS_DUPLICATE(dbc, i1, i2) \\$/
-IS_ENV_REPLICATED ../dbinc/rep.h /^#define IS_ENV_REPLICATED(E) (REP_ON(E) && \\$/
+IS_ENV_AUTO_COMMIT ../dbinc/db_am.h /^#define IS_ENV_AUTO_COMMIT(dbenv, txn, flags) /
+IS_ENV_REPLICATED ../dbinc/rep.h /^#define IS_ENV_REPLICATED(dbenv) \\$/
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_IN_RESTORE ../qam/qam_rec.c /^#define IS_IN_RESTORE(dbenv) \\$/
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_PEER_POLICY ../dbinc/repmgr.h /^#define IS_PEER_POLICY(p) ((p) == DB_REPMGR_ACKS_A/
+IS_PHASE1_DONE ../rep/rep_elect.c /^#define IS_PHASE1_DONE(rep) \\$/
+IS_REAL_TXN ../dbinc/db_int.in /^#define IS_REAL_TXN(txn) \\$/
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_MASTER ../dbinc/rep.h /^#define IS_REP_MASTER(dbenv) \\$/
IS_SUBTRANSACTION ../dbinc/db_int.in /^#define IS_SUBTRANSACTION(txn) \\$/
+IS_VALID_EID ../dbinc/repmgr.h /^#define IS_VALID_EID(e) ((e) >= 0)$/
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_ZERO_LSN ../dbinc/db_int.in /^#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN)/
+I_HAVE_WON ../rep/rep_elect.c /^#define I_HAVE_WON(rep, winner) \\$/
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, jobj, fid, statp, na/
JAVADB_STAT_LONG ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_LONG(jenv, jobj, fid, statp, n/
JAVADB_STAT_LSN ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_LSN(jenv, jobj, fid, statp, na/
JAVADB_STAT_STRING ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_STRING(jenv, jobj, fid, statp,/
JAVADB_STAT_XID ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_XID(jenv, jobj, fid, statp, na/
-JDBENV ../libdb_java/db_java_wrap.c 811
-JOIN_RETRY ../dbinc/db_join.h 27
+JDBENV ../libdb_java/db_java_wrap.c /^#define JDBENV (arg1 ? (jobject)DB_ENV_INTERNAL(ar/
+JOIN_CURSOR ../dbinc/db_join.h /^} JOIN_CURSOR;$/
+JOIN_RETRY ../dbinc/db_join.h /^#define JOIN_RETRY 0x01 \/* Error on primary get; /
Java_com_sleepycat_db_internal_DbUtil_is_1big_1endian ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_DbUtil_is_1big_1end/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1dbremove ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1dbrename ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1err ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1errx ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1cachesize_1ncache ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1data_1dirs ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1encrypt_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1errpfx ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1home ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lg_1bsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lg_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lg_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lg_1regionmax ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lk_1conflicts ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lk_1detect ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lk_1max_1lockers ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lk_1max_1locks ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lk_1max_1objects ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1mp_1mmapsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1open_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1rep_1limit ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1shm_1key ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tas_1spins ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1timeout ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tmp_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tx_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tx_1timestamp ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1verbose ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_i/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1version_1major ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1version_1minor ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1version_1patch ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1version_1string ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1detect ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1id ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1id_1free ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1vec ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1archive ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1compare ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1cursor ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1file ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1flush ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1fstat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1trickle ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1open ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1remove0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1elect ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1process_1message ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1start ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1app_1dispatch ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1data_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1encrypt ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1errcall ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1errpfx ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1feedback ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1bsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1regionmax ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1conflicts ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1detect ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1max_1lockers ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1max_1locks ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1max_1objects ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1mp_1mmapsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1msgcall ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1paniccall ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rep_1limit ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rep_1transport ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rpc_1server ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1shm_1key ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tas_1spins ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1timeout ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tmp_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tx_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tx_1timestamp0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1verbose ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1strerror ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1begin ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1checkpoint ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1recover ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbLogc_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbLogc_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1get_1maxsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1get_1priority ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1set_1maxsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1set_1priority ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1db ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1key ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1range_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1range_1min ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1initial_1value ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1open ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1remove0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1range ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1abort0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1discard0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1id ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1prepare ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1set_1timeout ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1associate ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1cursor ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1del ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1err ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1errx ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1bt_1minkey ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1byteswapped ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_i/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1cachesize_1ncache ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1dbname ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1encrypt_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1errpfx ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1filename ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1h_1ffactor ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1h_1nelem ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1lorder ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1mpf ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1open_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1pagesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1q_1extentsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1re_1delim ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1re_1len ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1re_1pad ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1re_1source ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1transactional ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_i/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1type ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1join ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1key_1range ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1open ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1pget ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1remove0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1rename0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1append_1recno ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1bt_1compare ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1bt_1maxkey ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1bt_1minkey ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1bt_1prefix ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1dup_1compare ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1encrypt ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1errpfx ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1feedback ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1h_1ffactor ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1h_1hash ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1h_1nelem ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1lorder ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1pagesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1q_1extentsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1re_1delim ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1re_1len ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1re_1pad ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1re_1source ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_in/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1sync ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1truncate ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1upgrade ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Db_1verify0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_i/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1count ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1del ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1dup ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1pget ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
-Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_inter/
+Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1vec ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1/
Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0 ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_db_1javaJNI_deleteR/
-Java_com_sleepycat_db_internal_db_1javaJNI_delete_1DbLock ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
Java_com_sleepycat_db_internal_db_1javaJNI_getDbEnv0 ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_db_1javaJNI_getDbEn/
Java_com_sleepycat_db_internal_db_1javaJNI_initDbEnvRef0 ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_db_1javaJNI_initDbE/
Java_com_sleepycat_db_internal_db_1javaJNI_initDbRef0 ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_db_1javaJNI_initDbR/
-Java_com_sleepycat_db_internal_db_1javaJNI_initialize ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_internal_db_1javaJNI_initial/
-Java_com_sleepycat_db_internal_db_1javaJNI_new_1Db ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_new_1DbEnv ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-Java_com_sleepycat_db_internal_db_1javaJNI_new_1DbSequence ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_inte/
-LASTCKP_CMP ../dbinc/log.h 362
-LCK_ALWAYS ../dbinc/db_am.h 114
-LCK_COUPLE ../dbinc/db_am.h 115
-LCK_COUPLE_ALWAYS ../dbinc/db_am.h 116
-LCK_DOWNGRADE ../dbinc/db_am.h 117
-LCK_ROLLBACK ../dbinc/db_am.h 118
-LEAFLEVEL ../dbinc/db_page.h 240
+Java_com_sleepycat_db_internal_db_1javaJNI_initialize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_inter/
+LASTCKP_CMP ../dbinc/log.h /^#define LASTCKP_CMP 1$/
+LCK_ALWAYS ../dbinc/db_am.h /^#define LCK_ALWAYS 1 \/* Lock even for off page d/
+LCK_COUPLE ../dbinc/db_am.h /^#define LCK_COUPLE 2 \/* Lock Couple *\/$/
+LCK_COUPLE_ALWAYS ../dbinc/db_am.h /^#define LCK_COUPLE_ALWAYS 3 \/* Lock Couple even i/
+LCK_DOWNGRADE ../dbinc/db_am.h /^#define LCK_DOWNGRADE 4 \/* Downgrade the lock. (/
+LCK_ROLLBACK ../dbinc/db_am.h /^#define LCK_ROLLBACK 5 \/* Lock even if in rollba/
+LEAFLEVEL ../dbinc/db_page.h /^#define LEAFLEVEL 1$/
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
+LFNAME ../dbinc/log.h /^#define LFNAME "log.%010d" \/* Log file name temp/
+LFNAME_V1 ../dbinc/log.h /^#define LFNAME_V1 "log.%05d" \/* Log file name tem/
+LFPREFIX ../dbinc/log.h /^#define LFPREFIX "log." \/* Log file name prefix./
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 71
-LG_BSIZE_DEFAULT ../dbinc/log.h 69
-LG_BSIZE_INMEM ../dbinc/log.h 70
-LG_MAINT_SIZE ../dbinc/log.h 277
-LG_MAX_DEFAULT ../dbinc/log.h 67
-LG_MAX_INMEM ../dbinc/log.h 68
+LG_BASE_REGION_SIZE ../dbinc/log.h /^#define LG_BASE_REGION_SIZE (65000) \/* 64KB - 53/
+LG_BSIZE_DEFAULT ../dbinc/log.h /^#define LG_BSIZE_DEFAULT (32000) \/* 32 KB - 768B/
+LG_BSIZE_INMEM ../dbinc/log.h /^#define LG_BSIZE_INMEM (1 * MEGABYTE) \/* 1 MB. */
+LG_CURSOR_BUF_SIZE ../dbinc/log.h /^#define LG_CURSOR_BUF_SIZE (32000) \/* 32KB - 768/
+LG_MAX_DEFAULT ../dbinc/log.h /^#define LG_MAX_DEFAULT (10 * MEGABYTE) \/* 10 MB./
+LG_MAX_INMEM ../dbinc/log.h /^#define LG_MAX_INMEM (256 * 1024) \/* 256 KB. *\//
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 209
+LIST_INCREMENT ../log/log_archive.c /^#define LIST_INCREMENT 64$/
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 22
+LOAD_ACTUAL_MUTEX_CODE ../mutex/mut_tas.c /^#define LOAD_ACTUAL_MUTEX_CODE$/
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), &((/
LOCK_INIT ../dbinc/lock.h /^#define LOCK_INIT(lock) ((lock).off = LOCK_INVALI/
-LOCK_INVALID ../dbinc/lock.h 27
+LOCK_INVALID ../dbinc/lock.h /^#define LOCK_INVALID INVALID_ROFF$/
LOCK_ISSET ../dbinc/lock.h /^#define LOCK_ISSET(lock) ((lock).off != LOCK_INVAL/
+LOCK_MUTEX ../dbinc/repmgr.h /^#define LOCK_MUTEX(m) do { \\$/
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_SYSTEM_LOCK ../dbinc/lock.h /^#define LOCK_SYSTEM_LOCK(dbenv) \\$/
+LOCK_SYSTEM_UNLOCK ../dbinc/lock.h /^#define LOCK_SYSTEM_UNLOCK(dbenv) \\$/
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
+LOG ../dbinc/log.h /^struct __log; typedef struct __log LOG;$/
LOGGING_ON ../dbinc/db_int.in /^#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != N/
-LOGP ../dbinc/log.h 61
+LOGP ../dbinc/log.h /^struct __log_persist; typedef struct __log_persist/
+LOG_COMPARE ../dbinc/db_int.in /^#define LOG_COMPARE(lsn0, lsn1) \\$/
+LOG_HDR_SUM ../dbinc/log.h /^#define LOG_HDR_SUM(crypto, hdr, sum) do { \\$/
LOG_OP ../dbinc/debug.h /^#define LOG_OP(C, T, O, K, A, F) { \\$/
-LOWER_MASK ../crypto/mersenne/mt19937db.c 41
+LOG_SYSTEM_LOCK ../dbinc/log.h /^#define LOG_SYSTEM_LOCK(dbenv) \\$/
+LOG_SYSTEM_UNLOCK ../dbinc/log.h /^#define LOG_SYSTEM_UNLOCK(dbenv) \\$/
+LOWER_MASK ../crypto/mersenne/mt19937db.c /^#define LOWER_MASK 0x7fffffff \/* least significan/
LSN ../dbinc/db_page.h /^#define LSN(p) (((PAGE *)p)->lsn)$/
+LSN_COLLECTION ../dbinc/rep.h /^} LSN_COLLECTION;$/
LSN_NOT_LOGGED ../dbinc/db_int.in /^#define LSN_NOT_LOGGED(LSN) do { \\$/
-M ../crypto/mersenne/mt19937db.c 38
+M ../crypto/mersenne/mt19937db.c /^#define M 397$/
+MAKE_INMEM ../dbinc/fop.h /^#define MAKE_INMEM(D) do { \\$/
MAKE_STAT_LIST ../dbinc/tcl_db.h /^#define MAKE_STAT_LIST(s, v) do { \\$/
MAKE_STAT_LSN ../dbinc/tcl_db.h /^#define MAKE_STAT_LSN(s, lsn) do { \\$/
MAKE_STAT_STRLIST ../dbinc/tcl_db.h /^#define MAKE_STAT_STRLIST(s,s1) do { \\$/
MAKE_WSTAT_LIST ../dbinc/tcl_db.h /^#define MAKE_WSTAT_LIST(s, v) do { \\$/
-MAP_FAILED ../mutex/tm.c 734
-MAP_FILE ../mutex/tm.c 737
-MASTER_CHECK ../rep/rep_record.c /^#define MASTER_CHECK(dbenv, eid, rep) do { \\$/
+MAP_FAILED ../mutex/tm.c /^#define MAP_FAILED (void *)-1$/
+MAP_FILE ../mutex/tm.c /^#define MAP_FILE 0$/
MASTER_ONLY ../rep/rep_record.c /^#define MASTER_ONLY(rep, rp) do { \\$/
MASTER_UPDATE ../rep/rep_record.c /^#define MASTER_UPDATE(dbenv, renv) do { \\$/
-MATRIX_A ../crypto/mersenne/mt19937db.c 39
-MAXARGS ../common/util_arg.c 34
-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 277
-MAX_ID ../dbinc/tcl_db.h 19
-MAX_IV_SIZE ../crypto/rijndael/rijndael-api-fst.h 71
-MAX_KEY_SIZE ../crypto/rijndael/rijndael-api-fst.h 70
+MATRIX_A ../crypto/mersenne/mt19937db.c /^#define MATRIX_A 0x9908b0df \/* constant vector /
+MAXARGS ../common/util_arg.c /^#define MAXARGS 25$/
+MAXBQUALSIZE ../dbinc/xa.h /^#define MAXBQUALSIZE 64 \/* maximum size in byte/
+MAXBTREELEVEL ../dbinc/db_page.h /^#define MAXBTREELEVEL 255$/
+MAXGTRIDSIZE ../dbinc/xa.h /^#define MAXGTRIDSIZE 64 \/* maximum size in byte/
+MAXHOSTNAMELEN ../dbinc/repmgr.h /^#define MAXHOSTNAMELEN 256$/
+MAXINFOSIZE ../dbinc/xa.h /^#define MAXINFOSIZE 256 \/* maximum size in bytes/
+MAXKB ../crypto/rijndael/rijndael-alg-fst.h /^#define MAXKB (256\/8)$/
+MAXKC ../crypto/rijndael/rijndael-alg-fst.h /^#define MAXKC (256\/32)$/
+MAXNR ../crypto/rijndael/rijndael-alg-fst.h /^#define MAXNR 14$/
+MAX_ID ../dbinc/tcl_db.h /^#define MAX_ID 8 \/* Maximum number of sub-id's w/
+MAX_IV_SIZE ../crypto/rijndael/rijndael-api-fst.h /^#define MAX_IV_SIZE 16 \/* # bytes ne/
+MAX_KEY_SIZE ../crypto/rijndael/rijndael-api-fst.h /^#define MAX_KEY_SIZE 64 \/* # of ASCII/
MAX_LSN ../dbinc/db_int.in /^#define MAX_LSN(LSN) do { \\$/
-MAX_LSN_TO_TEXT ../db/db.c 1010
-MAX_PAGE_NUMBER ../dbinc/db_185.in 79
-MAX_PAGE_OFFSET ../dbinc/db_185.in 81
-MAX_PGNOS ../lock/lock_list.c 54
-MAX_REC_NUMBER ../dbinc/db_185.in 83
-MEGABYTE ../dbinc/db_int.in 76
-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
+MAX_LSN_TO_TEXT ../db/db.c /^#define MAX_LSN_TO_TEXT 17$/
+MAX_PAGE_NUMBER ../dbinc/db_185.in /^#define MAX_PAGE_NUMBER 0xffffffff \/* >= # of pag/
+MAX_PAGE_OFFSET ../dbinc/db_185.in /^#define MAX_PAGE_OFFSET 65535 \/* >= # of bytes i/
+MAX_PGNOS ../lock/lock_list.c /^#define MAX_PGNOS 0xffff$/
+MAX_REC_NUMBER ../dbinc/db_185.in /^#define MAX_REC_NUMBER 0xffffffff \/* >= # of reco/
+MAX_SITE_LOC_STRING ../dbinc/repmgr.h /^#define MAX_SITE_LOC_STRING (MAXHOSTNAMELEN+20)$/
+MEGABYTE ../dbinc/db_int.in /^#define MEGABYTE 1048576$/
+MEM_ALIGN ../repmgr/repmgr_sel.c /^#define MEM_ALIGN sizeof(double)$/
+MINFILL ../dbinc/hash.h /^#define MINFILL 4$/
+MODE_CBC ../crypto/rijndael/rijndael-api-fst.h /^#define MODE_CBC 2 \/* Are we ci/
+MODE_CFB1 ../crypto/rijndael/rijndael-api-fst.h /^#define MODE_CFB1 3 \/* Are we ci/
+MODE_ECB ../crypto/rijndael/rijndael-api-fst.h /^#define MODE_ECB 1 \/* Are we ci/
+MPFARRAY ../dbinc/qam.h /^} MPFARRAY;$/
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 160
-MPOOL_BASE_DECREMENT ../dbinc/mp.h 203
+MPF_ILLEGAL_BEFORE_OPEN ../dbinc/mp.h /^#define MPF_ILLEGAL_BEFORE_OPEN(dbmfp, name) \\/
+MPOOL ../dbinc/mp.h /^struct __mpool; typedef struct __mpool MPOOL;$/
+MPOOLFILE ../dbinc/db.in /^struct __mpoolfile; typedef struct __mpoolfile MPO/
+MPOOL_BASE_DECREMENT ../dbinc/mp.h /^#define MPOOL_BASE_DECREMENT (UINT32_MAX - (UINT32/
+MPOOL_FILE_BUCKETS ../dbinc/mp.h /^#define MPOOL_FILE_BUCKETS 17$/
MPOOL_ON ../dbinc/db_int.in /^#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NU/
-MPOOL_PRI_DEFAULT ../dbinc/mp.h 211
-MPOOL_PRI_DIRTY ../dbinc/mp.h 213
-MPOOL_PRI_HIGH ../dbinc/mp.h 212
-MPOOL_PRI_LOW ../dbinc/mp.h 210
-MPOOL_PRI_VERY_HIGH ../dbinc/mp.h 214
-MPOOL_PRI_VERY_LOW ../dbinc/mp.h 209
-MP_CAN_MMAP ../dbinc/mp.h 302
-MP_DIRECT ../dbinc/mp.h 303
-MP_DURABLE_UNKNOWN ../dbinc/mp.h 304
-MP_EXTENT ../dbinc/mp.h 305
-MP_FAKE_DEADFILE ../dbinc/mp.h 306
-MP_FAKE_FILEWRITTEN ../dbinc/mp.h 307
-MP_FAKE_NB ../dbinc/mp.h 308
-MP_FAKE_UOC ../dbinc/mp.h 309
-MP_FILEID_SET ../dbinc/db.in 735
-MP_FLUSH ../dbinc/db.in 736
-MP_NOT_DURABLE ../dbinc/mp.h 310
-MP_OPEN_CALLED ../dbinc/db.in 737
-MP_READONLY ../dbinc/db.in 738
-MP_TEMP ../dbinc/mp.h 311
-MSG ../mutex/mut_fcntl.c 151
-MSG1 ../mutex/mut_pthread.c 23
-MSG2 ../mutex/mut_pthread.c 25
-MSG_SIZE ../dbinc/tcl_db.h 13
-MS_PER_SEC ../dbinc/db_int.in 79
-MT_FILE ../mutex/tm.c 42
-MT_FILE_QUIT ../mutex/tm.c 43
-MUTEX_ALIGN ../dbinc/mutex.h 82
-MUTEX_ALLOC ../dbinc/mutex.h 830
-MUTEX_CLEAR ../dbinc/mutex.h /^#define MUTEX_CLEAR(mp) { \\$/
-MUTEX_DESTROY ../dbinc/mutex.h /^#define MUTEX_DESTROY(x) sema_destroy(x)$/
-MUTEX_FIELDS ../dbinc/mutex.h 26
-MUTEX_IGNORE ../dbinc/mutex.h 831
-MUTEX_INIT ../dbinc/mutex.h /^#define MUTEX_INIT(x) 0$/
-MUTEX_INITED ../dbinc/mutex.h 832
-MUTEX_LOCK ../dbinc/mutex.h /^#define MUTEX_LOCK(dbenv, mp) \\$/
-MUTEX_LOGICAL_LOCK ../dbinc/mutex.h 833
-MUTEX_MPOOL ../dbinc/mutex.h 834
-MUTEX_NO_MALLOC_LOCKS ../dbinc/mutex.h 126
-MUTEX_NO_RECORD ../dbinc/mutex.h 835
-MUTEX_NO_RLOCK ../dbinc/mutex.h 836
-MUTEX_NO_SHMGET_LOCKS ../dbinc/mutex.h 127
-MUTEX_PAUSE ../dbinc/mutex.h 364
-MUTEX_SELF_BLOCK ../dbinc/mutex.h 837
-MUTEX_SET ../dbinc/mutex.h /^#define MUTEX_SET(x) (!_check_lock(x, 0, 1))$/
-MUTEX_SET_TEST ../dbinc/mutex.h 380
-MUTEX_THREAD ../dbinc/mutex.h 838
-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
+MPOOL_PRI_DEFAULT ../dbinc/mp.h /^#define MPOOL_PRI_DEFAULT 0 \/* No adjustment -- s/
+MPOOL_PRI_DIRTY ../dbinc/mp.h /^#define MPOOL_PRI_DIRTY 10 \/* Dirty gets a 10% b/
+MPOOL_PRI_HIGH ../dbinc/mp.h /^#define MPOOL_PRI_HIGH 10 \/* With the dirty buff/
+MPOOL_PRI_LOW ../dbinc/mp.h /^#define MPOOL_PRI_LOW -2 \/* Low. *\/$/
+MPOOL_PRI_VERY_HIGH ../dbinc/mp.h /^#define MPOOL_PRI_VERY_HIGH 1 \/* Add number of bu/
+MPOOL_PRI_VERY_LOW ../dbinc/mp.h /^#define MPOOL_PRI_VERY_LOW -1 \/* Dead duck. Chec/
+MPOOL_REGION_LOCK ../dbinc/mp.h /^#define MPOOL_REGION_LOCK(dbenv, infop) \\$/
+MPOOL_REGION_UNLOCK ../dbinc/mp.h /^#define MPOOL_REGION_UNLOCK(dbenv, infop) \\$/
+MPOOL_SYSTEM_LOCK ../dbinc/mp.h /^#define MPOOL_SYSTEM_LOCK(dbenv) \\$/
+MPOOL_SYSTEM_UNLOCK ../dbinc/mp.h /^#define MPOOL_SYSTEM_UNLOCK(dbenv) \\$/
+MP_CAN_MMAP ../dbinc/mp.h /^#define MP_CAN_MMAP 0x001 \/* If the file can be /
+MP_DIRECT ../dbinc/mp.h /^#define MP_DIRECT 0x002 \/* No OS buffering. *\/$/
+MP_DURABLE_UNKNOWN ../dbinc/mp.h /^#define MP_DURABLE_UNKNOWN 0x004 \/* We don't care/
+MP_EXTENT ../dbinc/mp.h /^#define MP_EXTENT 0x008 \/* Extent file. *\/$/
+MP_FAKE_DEADFILE ../dbinc/mp.h /^#define MP_FAKE_DEADFILE 0x010 \/* Deadfile field:/
+MP_FAKE_FILEWRITTEN ../dbinc/mp.h /^#define MP_FAKE_FILEWRITTEN 0x020 \/* File_written/
+MP_FAKE_NB ../dbinc/mp.h /^#define MP_FAKE_NB 0x040 \/* No_backing_file fiel/
+MP_FAKE_UOC ../dbinc/mp.h /^#define MP_FAKE_UOC 0x080 \/* Unlink_on_close fie/
+MP_FILEID_SET ../dbinc/db.in /^#define MP_FILEID_SET 0x001 \/* Application suppl/
+MP_FLUSH ../dbinc/db.in /^#define MP_FLUSH 0x002 \/* Was opened to flush a /
+MP_MULTIVERSION ../dbinc/db.in /^#define MP_MULTIVERSION 0x004 \/* Opened for mult/
+MP_NOT_DURABLE ../dbinc/mp.h /^#define MP_NOT_DURABLE 0x100 \/* File is not dura/
+MP_OPEN_CALLED ../dbinc/db.in /^#define MP_OPEN_CALLED 0x008 \/* File opened. *\//
+MP_READONLY ../dbinc/db.in /^#define MP_READONLY 0x010 \/* File is readonly. */
+MP_TEMP ../dbinc/mp.h /^#define MP_TEMP 0x200 \/* Backing file is a temp/
+MP_TRUNC_RECOVER ../dbinc/mp.h /^#define MP_TRUNC_RECOVER 0x01$/
+MSG_SIZE ../dbinc/tcl_db.h /^#define MSG_SIZE 100 \/* Message size *\/$/
+MS_PER_SEC ../dbinc/db_int.in /^#define MS_PER_SEC 1000 \/* Milliseconds in a sec/
+MTX_APPLICATION ../dbinc/mutex.h /^#define MTX_APPLICATION 1$/
+MTX_DB_HANDLE ../dbinc/mutex.h /^#define MTX_DB_HANDLE 2$/
+MTX_ENV_DBLIST ../dbinc/mutex.h /^#define MTX_ENV_DBLIST 3$/
+MTX_ENV_REGION ../dbinc/mutex.h /^#define MTX_ENV_REGION 4$/
+MTX_LOCK_REGION ../dbinc/mutex.h /^#define MTX_LOCK_REGION 5$/
+MTX_LOGICAL_LOCK ../dbinc/mutex.h /^#define MTX_LOGICAL_LOCK 6$/
+MTX_LOG_FILENAME ../dbinc/mutex.h /^#define MTX_LOG_FILENAME 7$/
+MTX_LOG_FLUSH ../dbinc/mutex.h /^#define MTX_LOG_FLUSH 8$/
+MTX_LOG_HANDLE ../dbinc/mutex.h /^#define MTX_LOG_HANDLE 9$/
+MTX_LOG_REGION ../dbinc/mutex.h /^#define MTX_LOG_REGION 10$/
+MTX_MAX_ENTRY ../dbinc/mutex.h /^#define MTX_MAX_ENTRY 28$/
+MTX_MPOOLFILE_HANDLE ../dbinc/mutex.h /^#define MTX_MPOOLFILE_HANDLE 11$/
+MTX_MPOOL_FH ../dbinc/mutex.h /^#define MTX_MPOOL_FH 12$/
+MTX_MPOOL_FILE_BUCKET ../dbinc/mutex.h /^#define MTX_MPOOL_FILE_BUCKET 13$/
+MTX_MPOOL_HANDLE ../dbinc/mutex.h /^#define MTX_MPOOL_HANDLE 14$/
+MTX_MPOOL_HASH_BUCKET ../dbinc/mutex.h /^#define MTX_MPOOL_HASH_BUCKET 15$/
+MTX_MPOOL_IO ../dbinc/mutex.h /^#define MTX_MPOOL_IO 16$/
+MTX_MPOOL_REGION ../dbinc/mutex.h /^#define MTX_MPOOL_REGION 17$/
+MTX_MUTEX_REGION ../dbinc/mutex.h /^#define MTX_MUTEX_REGION 18$/
+MTX_MUTEX_TEST ../dbinc/mutex.h /^#define MTX_MUTEX_TEST 19$/
+MTX_REP_DATABASE ../dbinc/mutex.h /^#define MTX_REP_DATABASE 20$/
+MTX_REP_REGION ../dbinc/mutex.h /^#define MTX_REP_REGION 21$/
+MTX_SEQUENCE ../dbinc/mutex.h /^#define MTX_SEQUENCE 22$/
+MTX_TWISTER ../dbinc/mutex.h /^#define MTX_TWISTER 23$/
+MTX_TXN_ACTIVE ../dbinc/mutex.h /^#define MTX_TXN_ACTIVE 24$/
+MTX_TXN_CHKPT ../dbinc/mutex.h /^#define MTX_TXN_CHKPT 25$/
+MTX_TXN_COMMIT ../dbinc/mutex.h /^#define MTX_TXN_COMMIT 26$/
+MTX_TXN_MVCC ../dbinc/mutex.h /^#define MTX_TXN_MVCC 27$/
+MTX_TXN_REGION ../dbinc/mutex.h /^#define MTX_TXN_REGION 28$/
+MT_FILE ../mutex/tm.c /^#define MT_FILE "TESTDIR\/mutex.file"$/
+MT_FILE_QUIT ../mutex/tm.c /^#define MT_FILE_QUIT "TESTDIR\/mutex.file.quit"$/
+MULTIVERSION ../dbinc/mp.h /^#define MULTIVERSION(dbp) ((dbp)->mpf->mfp->multiv/
+MUTEXP_SET ../dbinc/mutex_int.h /^#define MUTEXP_SET(indx) \\$/
+MUTEX_ALIGN ../dbinc/mutex_int.h /^#define MUTEX_ALIGN 16$/
+MUTEX_DESTROY ../dbinc/mutex_int.h /^#define MUTEX_DESTROY(x) sema_destroy(x)$/
+MUTEX_FIELDS ../dbinc/mutex_int.h /^#define MUTEX_FIELDS \\$/
+MUTEX_INIT ../dbinc/mutex_int.h /^#define MUTEX_INIT(x) 0$/
+MUTEX_INVALID ../dbinc/mutex.h /^#define MUTEX_INVALID 0$/
+MUTEX_LOCK ../dbinc/mutex.h /^#define MUTEX_LOCK(dbenv, mutex) do { \\$/
+MUTEX_ON ../dbinc/db_int.in /^#define MUTEX_ON(dbenv) ((dbenv)->mutex_handle !=/
+MUTEX_PAUSE ../dbinc/mutex_int.h /^#define MUTEX_PAUSE {__asm{_emit 0xf3}; __asm{_em/
+MUTEX_SET ../dbinc/mutex_int.h /^#define MUTEX_SET(x) (!_check_lock(x, 0, 1))$/
+MUTEX_SYSTEM_LOCK ../dbinc/mutex_int.h /^#define MUTEX_SYSTEM_LOCK(dbenv) \\$/
+MUTEX_SYSTEM_UNLOCK ../dbinc/mutex_int.h /^#define MUTEX_SYSTEM_UNLOCK(dbenv) \\$/
+MUTEX_UNLOCK ../dbinc/mutex.h /^#define MUTEX_UNLOCK(dbenv, mutex) do { \\$/
+MUTEX_UNSET ../dbinc/mutex_int.h /^#define MUTEX_UNSET(x) _clear_lock(x, 0)$/
+MVCC_BHALIGN ../dbinc/mp.h /^#define MVCC_BHALIGN(mfp, p) do { \\$/
+MVCC_BHSIZE ../dbinc/mp.h /^#define MVCC_BHSIZE(mfp, sz) do { \\$/
+MVCC_BHUNALIGN ../dbinc/mp.h /^#define MVCC_BHUNALIGN(mfp, p) do { \\$/
+MVCC_MPROTECT ../dbinc/mp.h /^#define MVCC_MPROTECT(buf, sz, mode) do { \\$/
+MVCC_SKIP_CURADJ ../dbinc/mp.h /^#define MVCC_SKIP_CURADJ(dbc, pgno) \\$/
M_16_SWAP ../dbinc/db_swap.h /^#define M_16_SWAP(a) { \\$/
M_32_SWAP ../dbinc/db_swap.h /^#define M_32_SWAP(a) { \\$/
+M_64_SWAP ../dbinc/db_swap.h /^#define M_64_SWAP(a) { \\$/
Mtm ../mutex/tm.c /^main(argc, argv)$/
-N ../crypto/mersenne/mt19937db.c 37
+N ../crypto/mersenne/mt19937db.c /^#define N 624$/
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/
@@ -1483,53 +1466,61 @@ NAME_TO_TXN ../dbinc/tcl_db.h /^#define NAME_TO_TXN(name) (DB_TXN *)_NameToPtr((
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]))$/
+NCACHED ../dbinc/db_page.h /^#define NCACHED 32 \/* number of spare points *\//
+NCACHED2X ../dbinc/db_upgrade.h /^#define NCACHED2X 32 \/* number of spare points */
+NCACHED30 ../dbinc/db_upgrade.h /^#define NCACHED30 32 \/* number of spare points */
+NDX_INVALID ../dbinc/hash.h /^#define NDX_INVALID 0xFFFF$/
+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)$/
NOWAIT_FLAG ../dbinc/db_int.in /^#define NOWAIT_FLAG(txn) \\$/
NUM_ENT ../dbinc/db_page.h /^#define NUM_ENT(p) (((PAGE *)p)->entries)$/
NewStringObj ../dbinc/tcl_db.h /^#define NewStringObj(a, b) \\$/
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 ../db/db_iface.c 1068
-OKFLAGS_CDB ../env/env_open.c 86
-OK_CRYPTO_FLAGS ../env/env_method.c 351
-OK_FLAGS ../env/env_method.c 550
-ON_ERROR_RETURN ../dbinc/cxx_int.h 57
-ON_ERROR_THROW ../dbinc/cxx_int.h 56
-ON_ERROR_UNKNOWN ../dbinc/cxx_int.h 58
+OKFLAGS ../db/db_iface.c /^#define OKFLAGS \\$/
+OKFLAGS_CDB ../env/env_open.c /^#define OKFLAGS_CDB \\$/
+OK_CRYPTO_FLAGS ../env/env_method.c /^#define OK_CRYPTO_FLAGS (DB_ENCRYPT_AES)$/
+OK_FLAGS ../env/env_method.c /^#define OK_FLAGS \\$/
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_VMPAGESIZE ../dbinc/region.h 292
-OS_VMROUNDOFF ../dbinc/region.h /^#define OS_VMROUNDOFF(i) { \\$/
-OVERFLOW_ERROR ../clib/snprintf.c 122
+OS_BAD_PID ../mutex/tm.c /^#define OS_BAD_PID (os_pid_t)-1$/
+OS_VMPAGESIZE ../os/os_region.c /^#define OS_VMPAGESIZE (8 * 1024)$/
+OS_VMROUNDOFF ../os/os_region.c /^#define OS_VMROUNDOFF(i) { \\$/
+OUT_QUEUE_LIMIT ../repmgr/repmgr_net.c /^#define OUT_QUEUE_LIMIT 10 \/* arbitrary, for now /
+OUT_Q_HEADER ../dbinc/repmgr.h /^typedef STAILQ_HEAD(__repmgr_out_q_head, __queued_/
+OVERFLOW_ERROR ../clib/snprintf.c /^#define OVERFLOW_ERROR "internal buffer overflow, /
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 53
-O_INDX ../dbinc/db_page.h 596
-PAIR_DATAMASK ../dbinc/hash.h 118
-PAIR_DUPMASK ../dbinc/hash.h 119
+OWNER_RW ../dbinc/os.h /^#define OWNER_RW "rw-------"$/
+O_ACCMODE ../os/os_oflags.c /^#define O_ACCMODE (O_RDONLY | O_RDWR | O_WRONLY)$/
+O_INDX ../dbinc/db_page.h /^#define O_INDX 1$/
+PAGE ../dbinc/db_page.h /^} PAGE;$/
+PAIR_DATAMASK ../dbinc/hash.h /^#define PAIR_DATAMASK 0x2$/
+PAIR_DUPMASK ../dbinc/hash.h /^#define PAIR_DUPMASK 0x4$/
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
+PAIR_KEYMASK ../dbinc/hash.h /^#define PAIR_KEYMASK 0x1$/
+PAIR_MASK ../dbinc/hash.h /^#define PAIR_MASK 0xf$/
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 279
-PATH_SEPARATOR ../dbinc/db_int.in 281
+PATH_DOT ../dbinc/db_int.in /^#define PATH_DOT "." \/* Current working directory/
+PATH_SEPARATOR ../dbinc/db_int.in /^#define PATH_SEPARATOR "@PATH_SEPARATOR@"$/
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
+PGNO_BASE_MD ../dbinc/db_page.h /^#define PGNO_BASE_MD 0 \/* Base database: metadata/
+PGNO_INVALID ../dbinc/db_page.h /^#define PGNO_INVALID 0 \/* Invalid page number in /
+PG_CHKSUM ../dbinc/db_page.h /^} PG_CHKSUM;$/
+PG_CRYPTO ../dbinc/db_page.h /^} PG_CRYPTO;$/
+PID_EMPTY ../env/env_register.c /^#define PID_EMPTY "X 0\\n" \//
+PID_FMT ../env/env_register.c /^#define PID_FMT "%24lu\\n" \/* PID entry format/
+PID_ISEMPTY ../env/env_register.c /^#define PID_ISEMPTY(p) (memcmp(p, PID_EMPTY, PID_L/
+PID_LEN ../env/env_register.c /^#define PID_LEN (25) \/* PID entry length *\/$/
POWER_OF_TWO ../dbinc/db_int.in /^#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)$/
-PREPLISTSIZE ../rep/rep_method.c 536
+PREPLISTSIZE ../rep/rep_method.c /^#define PREPLISTSIZE 50$/
PREV_PGNO ../dbinc/db_page.h /^#define PREV_PGNO(p) (((PAGE *)p)->prev_pgno)$/
-PTHREAD_UNLOCK_ATTEMPTS ../mutex/mut_pthread.c 57
-PUTOVFL ../dbinc/hash.h 128
-PUTPAIR ../dbinc/hash.h 126
+PTHREAD_UNLOCK_ATTEMPTS ../mutex/mut_pthread.c /^#define PTHREAD_UNLOCK_ATTEMPTS 5$/
+PTRACE ../btree/bt_compact.c /^#define PTRACE(dbc, location, p, start, f) do { /
+PUTOVFL ../dbinc/hash.h /^#define PUTOVFL 0x40$/
+PUTPAIR ../dbinc/hash.h /^#define PUTPAIR 0x20$/
PUTU32 ../crypto/rijndael/rijndael-alg-fst.c /^#define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st/
PUT_COUNT ../lock/lock_list.c /^#define PUT_COUNT(dp, count) do { u_int32_t *ip = /
PUT_HKEYDATA ../dbinc/db_page.h /^#define PUT_HKEYDATA(pe, kd, len, type) { \\$/
@@ -1541,34 +1532,39 @@ 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_64_COPY ../dbinc/db_swap.h /^#define P_64_COPY(a, b) { \\$/
+P_64_SWAP ../dbinc/db_swap.h /^#define P_64_SWAP(a) { \\$/
+P_BTREEMETA ../dbinc/db_page.h /^#define P_BTREEMETA 9 \/* Btree metadata page. *\//
P_CHKSUM ../dbinc/db_page.h /^#define P_CHKSUM(dbp, pg) \\$/
+P_DONTEXTEND ../dbinc/db_page.h /^#define P_DONTEXTEND 0x8000 \/* Don't allocate if /
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_HASH ../dbinc/db_page.h /^#define P_HASH 2 \/* Hash. *\/$/
+P_HASHMETA ../dbinc/db_page.h /^#define P_HASHMETA 8 \/* Hash metadata page. *\/$/
+P_IBTREE ../dbinc/db_page.h /^#define P_IBTREE 3 \/* Btree internal. *\/$/
+P_INDX ../dbinc/db_page.h /^#define P_INDX 2$/
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_INVALID ../dbinc/db_page.h /^#define P_INVALID 0 \/* Invalid page type. *\/$/
+P_IRECNO ../dbinc/db_page.h /^#define P_IRECNO 4 \/* Recno internal. *\/$/
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_LBTREE ../dbinc/db_page.h /^#define P_LBTREE 5 \/* Btree leaf. *\/$/
+P_LDUP ../dbinc/db_page.h /^#define P_LDUP 12 \/* Off-page duplicate leaf. */
+P_LRECNO ../dbinc/db_page.h /^#define P_LRECNO 6 \/* Recno leaf. *\/$/
P_MAXSPACE ../dbinc/db_page.h /^#define P_MAXSPACE(dbp, psize) ((psize) - P_OVERHE/
-P_OVERFLOW ../dbinc/db_page.h 44
+P_OVERFLOW ../dbinc/db_page.h /^#define P_OVERFLOW 7 \/* Overflow. *\/$/
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_PAGETYPE_MAX ../dbinc/db_page.h /^#define P_PAGETYPE_MAX 13$/
+P_QAMDATA ../dbinc/db_page.h /^#define P_QAMDATA 11 \/* Queue data page. *\/$/
+P_QAMMETA ../dbinc/db_page.h /^#define P_QAMMETA 10 \/* Queue metadata page. *\/$/
P_TO_UINT16 ../dbinc/db_int.in /^#define P_TO_UINT16(p) ((u_int16_t)(uintptr_t)(p))/
P_TO_UINT32 ../dbinc/db_int.in /^#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))/
P_TO_ULONG ../dbinc/db_int.in /^#define P_TO_ULONG(p) ((u_long)(uintptr_t)(p))$/
+QAMDATA ../dbinc/qam.h /^} QAMDATA;$/
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_DIRTY ../qam/qam_rec.c /^#define QAM_DIRTY(dbp, pgno, pagep) \\$/
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) \\$/
@@ -1577,148 +1573,231 @@ 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 611
+QAM_SET ../dbinc/qam.h /^#define QAM_SET 0x02$/
+QAM_SETCUR ../dbinc/qam.h /^#define QAM_SETCUR 0x02$/
+QAM_SETFIRST ../dbinc/qam.h /^#define QAM_SETFIRST 0x01$/
+QAM_TRUNCATE ../dbinc/qam.h /^#define QAM_TRUNCATE 0x04$/
+QAM_VALID ../dbinc/qam.h /^#define QAM_VALID 0x01$/
+QDEBUG ../qam/qam.c /^#define QDEBUG$/
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
+QMETA ../dbinc/db_page.h /^} QMETA33, QMETA;$/
+QMETA30 ../dbinc/db_upgrade.h /^} QMETA30;$/
+QMETA31 ../dbinc/db_upgrade.h /^} QMETA31;$/
+QMETA32 ../dbinc/db_upgrade.h /^} QMETA32;$/
+QPAGE ../dbinc/db_page.h /^} QPAGE;$/
+QPAGE_CHKSUM ../dbinc/db_page.h /^#define QPAGE_CHKSUM 48$/
+QPAGE_NORMAL ../dbinc/db_page.h /^#define QPAGE_NORMAL 28$/
+QPAGE_SEC ../dbinc/db_page.h /^#define QPAGE_SEC 64$/
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
+QUEUE ../dbinc/qam.h /^struct __queue; typedef struct __queue QUEUE;$/
+QUEUED_OUTPUT ../dbinc/repmgr.h /^struct __queued_output; typedef struct __queued_ou/
+QUEUE_CURSOR ../dbinc/qam.h /^struct __qcursor; typedef struct __qcursor QUEUE_C/
+QUEUE_EXTENT ../dbinc/qam.h /^#define QUEUE_EXTENT "%s%c__dbq.%s.%d"$/
+QUEUE_EXTENT_HEAD ../dbinc/qam.h /^#define QUEUE_EXTENT_HEAD "__dbq.%s."$/
+QUEUE_EXTENT_PREFIX ../dbinc/qam.h /^#define QUEUE_EXTENT_PREFIX "__dbq."$/
+QUEUE_FILELIST ../dbinc/qam.h /^} QUEUE_FILELIST;$/
+QUEUE_MACRO_DEBUG ../dbinc/queue.h /^#define QUEUE_MACRO_DEBUG 0$/
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/
-RECNO ../dbinc/btree.h 51
-RECNO_OOB ../dbinc/db_int.in 82
-REC_CLOSE ../dbinc/db_am.h 53
+RECNO ../dbinc/btree.h /^struct __recno; typedef struct __recno RECNO;$/
+RECNOINFO ../dbinc/db_185.in /^} RECNOINFO;$/
+RECNO_OOB ../dbinc/db_int.in /^#define RECNO_OOB 0 \/* Illegal record number. */
+RECOVERING_LOG_SKIP ../rep/rep_record.c /^#define RECOVERING_LOG_SKIP do { \\$/
+RECOVERING_SKIP ../rep/rep_record.c /^#define RECOVERING_SKIP do { \\$/
+REC_CLOSE ../dbinc/db_am.h /^#define REC_CLOSE { \\$/
+REC_DIRTY ../dbinc/db_am.h /^#define REC_DIRTY(mpf, pagep) \\$/
REC_FGET ../dbinc/db_am.h /^#define REC_FGET(mpf, pgno, pagep, cont) \\$/
-REC_INTRO ../dbinc/db_am.h /^#define REC_INTRO(func, inc_count) do { \\$/
-REC_NOOP_CLOSE ../dbinc/db_am.h 71
+REC_INTRO ../dbinc/db_am.h /^#define REC_INTRO(func, inc_count, do_cursor) do {/
+REC_NOOP_CLOSE ../dbinc/db_am.h /^#define REC_NOOP_CLOSE \\$/
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 526
-REGION_CREATE ../dbinc/region.h 229
-REGION_CREATE_OK ../dbinc/region.h 230
-REGION_ID_ENV ../dbinc/region.h 108
-REGION_JOIN_OK ../dbinc/region.h 231
-REPDBNAME ../rep/rep_method.c 431
-REPPAGENAME ../rep/rep_method.c 432
-REP_ALIVE ../dbinc/rep.h 13
-REP_ALIVE_REQ ../dbinc/rep.h 14
-REP_ALL_REQ ../dbinc/rep.h 15
-REP_DUPMASTER ../dbinc/rep.h 16
-REP_EGENNAME ../dbinc/rep.h 90
-REP_FILE ../dbinc/rep.h 17
-REP_FILE_FAIL ../dbinc/rep.h 18
-REP_FILE_REQ ../dbinc/rep.h 19
-REP_F_CLIENT ../dbinc/rep.h 167
-REP_F_EPHASE1 ../dbinc/rep.h 168
-REP_F_EPHASE2 ../dbinc/rep.h 169
-REP_F_MASTER ../dbinc/rep.h 170
-REP_F_MASTERELECT ../dbinc/rep.h 171
-REP_F_NOARCHIVE ../dbinc/rep.h 172
-REP_F_READY ../dbinc/rep.h 173
-REP_F_RECOVER_LOG ../dbinc/rep.h 174
-REP_F_RECOVER_MASK ../dbinc/rep.h 187
-REP_F_RECOVER_PAGE ../dbinc/rep.h 175
-REP_F_RECOVER_UPDATE ../dbinc/rep.h 176
-REP_F_RECOVER_VERIFY ../dbinc/rep.h 177
-REP_F_TALLY ../dbinc/rep.h 178
-REP_LOG ../dbinc/rep.h 20
-REP_LOG_MORE ../dbinc/rep.h 21
-REP_LOG_REQ ../dbinc/rep.h 22
-REP_MASTER_REQ ../dbinc/rep.h 23
-REP_NEWCLIENT ../dbinc/rep.h 24
-REP_NEWFILE ../dbinc/rep.h 25
-REP_NEWMASTER ../dbinc/rep.h 26
-REP_NEWSITE ../dbinc/rep.h 27
-REP_ON ../dbinc/db_int.in /^#define REP_ON(dbenv) ((dbenv)->rep_handle != NUL/
-REP_PAGE ../dbinc/rep.h 33
-REP_PAGE_FAIL ../dbinc/rep.h 34
-REP_PAGE_MORE ../dbinc/rep.h 35
-REP_PAGE_REQ ../dbinc/rep.h 36
-REP_PRINT_MESSAGE ../dbinc/rep.h /^#define REP_PRINT_MESSAGE(dbenv, eid, rp, str) /
-REP_UPDATE ../dbinc/rep.h 37
-REP_UPDATE_REQ ../dbinc/rep.h 38
-REP_VERIFY ../dbinc/rep.h 39
-REP_VERIFY_FAIL ../dbinc/rep.h 40
-REP_VERIFY_REQ ../dbinc/rep.h 41
-REP_VOTE1 ../dbinc/rep.h 42
-REP_VOTE2 ../dbinc/rep.h 43
+REGENV ../dbinc/region.h /^} REGENV;$/
+REGENV_REF ../dbinc/region.h /^} REGENV_REF;$/
+REGINFO ../dbinc/db_int.in /^struct __db_reginfo_t; typedef struct __db_reginfo/
+REGION ../dbinc/region.h /^} REGION;$/
+REGION_CREATE ../dbinc/region.h /^#define REGION_CREATE 0x01 \/* Caller created reg/
+REGION_CREATE_OK ../dbinc/region.h /^#define REGION_CREATE_OK 0x02 \/* Caller willing t/
+REGION_ID_ENV ../dbinc/region.h /^#define REGION_ID_ENV 1 \/* Primary environment I/
+REGION_JOIN_OK ../dbinc/region.h /^#define REGION_JOIN_OK 0x04 \/* Caller is looking/
+REGISTER_FILE ../env/env_register.c /^#define REGISTER_FILE "__db.register"$/
+REGISTRY_EXCL_LOCK ../env/env_register.c /^#define REGISTRY_EXCL_LOCK(dbenv, nowait) \\$/
+REGISTRY_EXCL_UNLOCK ../env/env_register.c /^#define REGISTRY_EXCL_UNLOCK(dbenv) \\$/
+REGISTRY_LOCK ../env/env_register.c /^#define REGISTRY_LOCK(dbenv, pos, nowait) \\$/
+REGISTRY_UNLOCK ../env/env_register.c /^#define REGISTRY_UNLOCK(dbenv, pos) \\$/
+REP ../dbinc/rep.h /^} REP;$/
+REPCTL_ELECTABLE ../dbinc/rep.h /^#define REPCTL_ELECTABLE 0x01 \/* Upgraded client /
+REPCTL_INIT ../dbinc/rep.h /^#define REPCTL_INIT 0x02 \/* Internal init messag/
+REPCTL_PERM ../dbinc/rep.h /^#define REPCTL_PERM DB_LOG_PERM_42_44$/
+REPCTL_RESEND ../dbinc/rep.h /^#define REPCTL_RESEND DB_LOG_RESEND_42_44$/
+REPDBNAME ../dbinc/rep.h /^#define REPDBNAME "__db.rep.db"$/
+REPLICATION_WRAP ../dbinc/rep.h /^#define REPLICATION_WRAP(dbenv, func_call, ret) do/
+REPMGR_ACK ../dbinc/repmgr.h /^#define REPMGR_ACK 1 \/* Acknowledgement. *\/$/
+REPMGR_CONNECTION ../dbinc/repmgr.h /^struct __repmgr_connection;$/
+REPMGR_FLAT ../dbinc/repmgr.h /^} REPMGR_FLAT;$/
+REPMGR_HANDSHAKE ../dbinc/repmgr.h /^#define REPMGR_HANDSHAKE 2 \/* Connection establis/
+REPMGR_IOVECS ../dbinc/repmgr.h /^} REPMGR_IOVECS;$/
+REPMGR_MESSAGE ../dbinc/repmgr.h /^} REPMGR_MESSAGE;$/
+REPMGR_QUEUE ../dbinc/repmgr.h /^struct __repmgr_queue; typedef struct __repmgr_que/
+REPMGR_REP_MESSAGE ../dbinc/repmgr.h /^#define REPMGR_REP_MESSAGE 3 \/* Normal replicatio/
+REPMGR_RETRY ../dbinc/repmgr.h /^struct __repmgr_retry; typedef struct __repmgr_ret/
+REPMGR_RUNNABLE ../dbinc/repmgr.h /^struct __repmgr_runnable; typedef struct __repmgr_/
+REPMGR_SITE ../dbinc/repmgr.h /^struct __repmgr_site; typedef struct __repmgr_site/
+REPMGR_SYNC_INITED ../dbinc/repmgr.h /^#define REPMGR_SYNC_INITED(db_rep) (db_rep->waiter/
+REPPAGENAME ../dbinc/rep.h /^#define REPPAGENAME "__db.reppg.db"$/
+REP_ALIVE ../dbinc/rep.h /^#define REP_ALIVE 1 \/* I am alive message. *\/$/
+REP_ALIVE_REQ ../dbinc/rep.h /^#define REP_ALIVE_REQ 2 \/* Request for alive mess/
+REP_ALL_REQ ../dbinc/rep.h /^#define REP_ALL_REQ 3 \/* Request all log records /
+REP_BULK ../dbinc/rep.h /^} REP_BULK;$/
+REP_BULK_LOG ../dbinc/rep.h /^#define REP_BULK_LOG 4 \/* Bulk transfer of log re/
+REP_BULK_PAGE ../dbinc/rep.h /^#define REP_BULK_PAGE 5 \/* Bulk transfer of pages/
+REP_CONTROL ../dbinc/rep.h /^} REP_CONTROL;$/
+REP_C_BULK ../dbinc/rep.h /^#define REP_C_BULK 0x00001 \/* Bulk transfer. */
+REP_C_DELAYCLIENT ../dbinc/rep.h /^#define REP_C_DELAYCLIENT 0x00002 \/* Delay clien/
+REP_C_NOAUTOINIT ../dbinc/rep.h /^#define REP_C_NOAUTOINIT 0x00004 \/* No auto init/
+REP_C_NOWAIT ../dbinc/rep.h /^#define REP_C_NOWAIT 0x00008 \/* Immediate error/
+REP_DUPMASTER ../dbinc/rep.h /^#define REP_DUPMASTER 6 \/* Duplicate master detec/
+REP_EGENNAME ../dbinc/rep.h /^#define REP_EGENNAME "__db.rep.egen"$/
+REP_FILE ../dbinc/rep.h /^#define REP_FILE 7 \/* Page of a database file. NO/
+REP_FILE_FAIL ../dbinc/rep.h /^#define REP_FILE_FAIL 8 \/* File requested does no/
+REP_FILE_REQ ../dbinc/rep.h /^#define REP_FILE_REQ 9 \/* Request for a database /
+REP_F_CLIENT ../dbinc/rep.h /^#define REP_F_CLIENT 0x00001 \/* Client replica./
+REP_F_DELAY ../dbinc/rep.h /^#define REP_F_DELAY 0x00002 \/* Delaying client /
+REP_F_EPHASE1 ../dbinc/rep.h /^#define REP_F_EPHASE1 0x00004 \/* In phase 1 of /
+REP_F_EPHASE2 ../dbinc/rep.h /^#define REP_F_EPHASE2 0x00008 \/* In phase 2 of /
+REP_F_MASTER ../dbinc/rep.h /^#define REP_F_MASTER 0x00010 \/* Master replica./
+REP_F_MASTERELECT ../dbinc/rep.h /^#define REP_F_MASTERELECT 0x00020 \/* Master elec/
+REP_F_NOARCHIVE ../dbinc/rep.h /^#define REP_F_NOARCHIVE 0x00040 \/* Rep blocks l/
+REP_F_READY ../dbinc/rep.h /^#define REP_F_READY 0x00080 \/* Wait for txn_cnt/
+REP_F_RECOVER_LOG ../dbinc/rep.h /^#define REP_F_RECOVER_LOG 0x00100 \/* In recovery/
+REP_F_RECOVER_MASK ../dbinc/rep.h /^#define REP_F_RECOVER_MASK \\$/
+REP_F_RECOVER_PAGE ../dbinc/rep.h /^#define REP_F_RECOVER_PAGE 0x00200 \/* In recover/
+REP_F_RECOVER_UPDATE ../dbinc/rep.h /^#define REP_F_RECOVER_UPDATE 0x00400 \/* In recov/
+REP_F_RECOVER_VERIFY ../dbinc/rep.h /^#define REP_F_RECOVER_VERIFY 0x00800 \/* In recov/
+REP_F_TALLY ../dbinc/rep.h /^#define REP_F_TALLY 0x01000 \/* Tallied vote bef/
+REP_GAP_FORCE ../dbinc/rep.h /^#define REP_GAP_FORCE 0x001 \/* Force a request f/
+REP_GAP_REREQUEST ../dbinc/rep.h /^#define REP_GAP_REREQUEST 0x002 \/* Gap request is/
+REP_INVALID ../dbinc/rep.h /^#define REP_INVALID 0 \/* Invalid message type. */
+REP_LOG ../dbinc/rep.h /^#define REP_LOG 10 \/* Log record. *\/$/
+REP_LOG_MORE ../dbinc/rep.h /^#define REP_LOG_MORE 11 \/* There are more log rec/
+REP_LOG_REQ ../dbinc/rep.h /^#define REP_LOG_REQ 12 \/* Request for a log recor/
+REP_MASTER_REQ ../dbinc/rep.h /^#define REP_MASTER_REQ 13 \/* Who is the master */
+REP_MAX_MSG ../dbinc/rep.h /^#define REP_MAX_MSG 29$/
+REP_MSG_REQ ../dbinc/rep.h /^#define REP_MSG_REQ(rectype) \\$/
+REP_NEWCLIENT ../dbinc/rep.h /^#define REP_NEWCLIENT 14 \/* Announces the presenc/
+REP_NEWFILE ../dbinc/rep.h /^#define REP_NEWFILE 15 \/* Announce a log file cha/
+REP_NEWMASTER ../dbinc/rep.h /^#define REP_NEWMASTER 16 \/* Announces who the mas/
+REP_NEWSITE ../dbinc/rep.h /^#define REP_NEWSITE 17 \/* Announces that a site h/
+REP_OLD_VOTE_INFO ../dbinc/rep.h /^} REP_OLD_VOTE_INFO;$/
+REP_ON ../dbinc/db_int.in /^#define REP_ON(dbenv) \\$/
+REP_PAGE ../dbinc/rep.h /^#define REP_PAGE 18 \/* Database page. *\/$/
+REP_PAGE_FAIL ../dbinc/rep.h /^#define REP_PAGE_FAIL 19 \/* Requested page does n/
+REP_PAGE_MORE ../dbinc/rep.h /^#define REP_PAGE_MORE 20 \/* There are more pages /
+REP_PAGE_REQ ../dbinc/rep.h /^#define REP_PAGE_REQ 21 \/* Request for a database/
+REP_PRINT_MESSAGE ../dbinc/rep.h /^#define REP_PRINT_MESSAGE(dbenv, eid, rp, str, fl)/
+REP_REREQUEST ../dbinc/rep.h /^#define REP_REREQUEST 22 \/* Force rerequest. *\/$/
+REP_SYSTEM_LOCK ../dbinc/rep.h /^#define REP_SYSTEM_LOCK(dbenv) \\$/
+REP_SYSTEM_UNLOCK ../dbinc/rep.h /^#define REP_SYSTEM_UNLOCK(dbenv) \\$/
+REP_THROTTLE ../dbinc/rep.h /^} REP_THROTTLE;$/
+REP_THROTTLE_ONLY ../dbinc/rep.h /^#define REP_THROTTLE_ONLY 0x0001 \/* Send _MORE me/
+REP_UPDATE ../dbinc/rep.h /^#define REP_UPDATE 23 \/* Environment hotcopy info/
+REP_UPDATE_REQ ../dbinc/rep.h /^#define REP_UPDATE_REQ 24 \/* Request for hotcopy /
+REP_VERIFY ../dbinc/rep.h /^#define REP_VERIFY 25 \/* A log record for verific/
+REP_VERIFY_FAIL ../dbinc/rep.h /^#define REP_VERIFY_FAIL 26 \/* The client is outda/
+REP_VERIFY_REQ ../dbinc/rep.h /^#define REP_VERIFY_REQ 27 \/* Request for a log re/
+REP_VOTE1 ../dbinc/rep.h /^#define REP_VOTE1 28 \/* Send out your information/
+REP_VOTE2 ../dbinc/rep.h /^#define REP_VOTE2 29 \/* Send a "you are master" v/
+REP_VOTE_INFO ../dbinc/rep.h /^} REP_VOTE_INFO;$/
+REP_VTALLY ../dbinc/rep.h /^} REP_VTALLY;$/
+RESET_MPF ../fileops/fop_util.c /^#define RESET_MPF(D, F) do { \\$/
RESET_RET_MEM ../dbinc/db_int.in /^#define RESET_RET_MEM(dbc) \\$/
+RESTORE_START ../btree/bt_compact.c /^#define RESTORE_START \\$/
RETRY_CHK ../dbinc/os.h /^#define RETRY_CHK(op, ret) do { \\$/
-RET_ERROR ../dbinc/db_185.in 58
+RETRY_CHK_EINTR_ONLY ../dbinc/os.h /^#define RETRY_CHK_EINTR_ONLY(op, ret) do { \\$/
+RETRY_Q_HEADER ../dbinc/repmgr.h /^typedef TAILQ_HEAD(__repmgr_retry_q, __repmgr_retr/
+RET_ERROR ../dbinc/db_185.in /^#define RET_ERROR -1 \/* Return values. *\/$/
+RET_SET ../mutex/mut_pthread.c /^#define RET_SET(f, ret) do { \\$/
RET_SIZE ../lock/lock_list.c /^#define RET_SIZE(size, count) ((size) + \\$/
-RET_SPECIAL ../dbinc/db_185.in 60
-RET_SUCCESS ../dbinc/db_185.in 59
+RET_SPECIAL ../dbinc/db_185.in /^#define RET_SPECIAL 1$/
+RET_SUCCESS ../dbinc/db_185.in /^#define RET_SUCCESS 0$/
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) \\$/
RINGBUF_LEN ../dbinc/log.h /^#define RINGBUF_LEN(lp, start, end) \\$/
-RINTERNAL_PSIZE ../dbinc/db_page.h 650
-RINTERNAL_SIZE ../dbinc/db_page.h 648
-RLOCK ../log/log_get.c 25
-RMNAMESZ ../dbinc/xa.h 44
+RINTERNAL ../dbinc/db_page.h /^} RINTERNAL;$/
+RINTERNAL_PSIZE ../dbinc/db_page.h /^#define RINTERNAL_PSIZE \\$/
+RINTERNAL_SIZE ../dbinc/db_page.h /^#define RINTERNAL_SIZE \\$/
+RLOCK ../log/log_get.c /^typedef enum { L_ALREADY, L_ACQUIRED, L_NONE } RLO/
+RMNAMESZ ../dbinc/xa.h /^#define RMNAMESZ 32 \/* length of resource manage/
RPC_ON ../dbinc/db_int.in /^#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL/
-RPRINT ../dbinc/rep.h /^#define RPRINT(e, r, x) do { \\$/
-RSMSG ../db185/db185.c 522
+RPRINT ../dbinc/rep.h /^#define RPRINT(e, x) do { \\$/
+RSMSG ../db185/db185.c /^#define RSMSG \\$/
R_ADDR ../dbinc/region.h /^#define R_ADDR(reginfop, 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_CURSOR ../dbinc/db_185.in /^#define R_CURSOR 1 \/* del, put, seq *\/$/
+R_DUP ../dbinc/db_185.in /^#define R_DUP 0x01 \/* duplicate keys *\/$/
+R_FIRST ../dbinc/db_185.in /^#define R_FIRST 3 \/* seq *\/$/
+R_FIXEDLEN ../dbinc/db_185.in /^#define R_FIXEDLEN 0x01 \/* fixed-length records */
+R_IAFTER ../dbinc/db_185.in /^#define R_IAFTER 4 \/* put (RECNO) *\/$/
+R_IBEFORE ../dbinc/db_185.in /^#define R_IBEFORE 5 \/* put (RECNO) *\/$/
+R_LAST ../dbinc/db_185.in /^#define R_LAST 6 \/* seq (BTREE, RECNO) *\/$/
+R_NEXT ../dbinc/db_185.in /^#define R_NEXT 7 \/* seq *\/$/
+R_NOKEY ../dbinc/db_185.in /^#define R_NOKEY 0x02 \/* key not required *\/$/
+R_NOOVERWRITE ../dbinc/db_185.in /^#define R_NOOVERWRITE 8 \/* put *\/$/
R_OFFSET ../dbinc/region.h /^#define R_OFFSET(reginfop, 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 109
-SALVAGE_IGNORE ../dbinc/db_verify.h 104
-SALVAGE_INVALID ../dbinc/db_verify.h 103
-SALVAGE_LBTREE ../dbinc/db_verify.h 108
-SALVAGE_LDUP ../dbinc/db_verify.h 105
-SALVAGE_LRECNO ../dbinc/db_verify.h 110
-SALVAGE_LRECNODUP ../dbinc/db_verify.h 106
-SALVAGE_OVERFLOW ../dbinc/db_verify.h 107
-SALVAGE_PRINTABLE ../dbinc/db_verify.h 135
-SALVAGE_PRINTFOOTER ../dbinc/db_verify.h 137
-SALVAGE_PRINTHEADER ../dbinc/db_verify.h 136
-SA_SKIPFIRSTKEY ../dbinc/db_verify.h 66
+R_PREV ../dbinc/db_185.in /^#define R_PREV 9 \/* seq (BTREE, RECNO) *\/$/
+R_RECNOSYNC ../dbinc/db_185.in /^#define R_RECNOSYNC 11 \/* sync (RECNO) *\/$/
+R_SETCURSOR ../dbinc/db_185.in /^#define R_SETCURSOR 10 \/* put (RECNO) *\/$/
+R_SNAPSHOT ../dbinc/db_185.in /^#define R_SNAPSHOT 0x04 \/* snapshot the input *\//
+SALVAGE_HASH ../dbinc/db_verify.h /^#define SALVAGE_HASH 6$/
+SALVAGE_IGNORE ../dbinc/db_verify.h /^#define SALVAGE_IGNORE 1$/
+SALVAGE_INVALID ../dbinc/db_verify.h /^#define SALVAGE_INVALID 0$/
+SALVAGE_LBTREE ../dbinc/db_verify.h /^#define SALVAGE_LBTREE 5$/
+SALVAGE_LDUP ../dbinc/db_verify.h /^#define SALVAGE_LDUP 2$/
+SALVAGE_LRECNO ../dbinc/db_verify.h /^#define SALVAGE_LRECNO 7$/
+SALVAGE_LRECNODUP ../dbinc/db_verify.h /^#define SALVAGE_LRECNODUP 3$/
+SALVAGE_OVERFLOW ../dbinc/db_verify.h /^#define SALVAGE_OVERFLOW 4$/
+SALVAGE_PRINTABLE ../dbinc/db_verify.h /^#define SALVAGE_PRINTABLE 0x01 \/* Output printabl/
+SALVAGE_PRINTFOOTER ../dbinc/db_verify.h /^#define SALVAGE_PRINTFOOTER 0x04 \/* Print the unk/
+SALVAGE_PRINTHEADER ../dbinc/db_verify.h /^#define SALVAGE_PRINTHEADER 0x02 \/* Print the unk/
+SAVE_START ../btree/bt_compact.c /^#define SAVE_START \\$/
+SA_SKIPFIRSTKEY ../dbinc/db_verify.h /^#define SA_SKIPFIRSTKEY 0x00080000$/
+SELF_EID ../dbinc/repmgr.h /^#define SELF_EID INT_MAX$/
SEQ_ILLEGAL_AFTER_OPEN ../sequence/sequence.c /^#define SEQ_ILLEGAL_AFTER_OPEN(seq, name) \\$/
SEQ_ILLEGAL_BEFORE_OPEN ../sequence/sequence.c /^#define SEQ_ILLEGAL_BEFORE_OPEN(seq, name) \\$/
-SEQ_OPEN_FLAGS ../sequence/sequence.c 123
-SEQ_SET_FLAGS ../sequence/sequence.c 261
-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)/
+SEQ_IS_OPEN ../sequence/sequence.c /^#define SEQ_IS_OPEN(seq) ((seq)->seq_key.data != N/
+SEQ_OPEN_FLAGS ../sequence/sequence.c /^#define SEQ_OPEN_FLAGS (DB_CREATE | DB_EXCL | DB_T/
+SEQ_SET_FLAGS ../sequence/sequence.c /^#define SEQ_SET_FLAGS (DB_SEQ_WRAP | DB_SEQ_INC | /
+SEQ_SWAP ../sequence/sequence.c /^#define SEQ_SWAP(rp) \\$/
+SEQ_SWAP_IN ../sequence/sequence.c /^#define SEQ_SWAP_IN(seq) \\$/
+SEQ_SWAP_OUT ../sequence/sequence.c /^#define SEQ_SWAP_OUT(seq) \\$/
+SET_LOG_FLAGS ../txn/txn.c /^#define SET_LOG_FLAGS(dbenv, txn, 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 77
-SHALLOC_FRAGMENT ../env/db_salloc.c 192
-SHM_R ../os/os_oflags.c 136
-SHM_W ../os/os_oflags.c 139
+SHA1HANDSOFF ../hmac/sha1.c /^#define SHA1HANDSOFF$/
+SHA1_CTX ../dbinc/hmac.h /^} SHA1_CTX;$/
+SHALLOC_FRAGMENT ../env/db_salloc.c /^#define SHALLOC_FRAGMENT 32$/
+SHM_R ../os/os_map.c /^#define SHM_R 0400$/
+SHM_W ../os/os_map.c /^#define SHM_W 0200$/
SHOBJECT_LOCK ../dbinc/lock.h /^#define SHOBJECT_LOCK(lt, reg, shobj, ndx) \\$/
+SH_CHAIN_ENTRY ../dbinc/shqueue.h /^#define SH_CHAIN_ENTRY \\$/
+SH_CHAIN_HASNEXT ../dbinc/shqueue.h /^#define SH_CHAIN_HASNEXT(elm, field) ((elm)->field/
+SH_CHAIN_HASPREV ../dbinc/shqueue.h /^#define SH_CHAIN_HASPREV(elm, field) ((elm)->field/
+SH_CHAIN_INIT ../dbinc/shqueue.h /^#define SH_CHAIN_INIT(elm, field) \\$/
+SH_CHAIN_INSERT_AFTER ../dbinc/shqueue.h /^#define SH_CHAIN_INSERT_AFTER(listelm, elm, field,/
+SH_CHAIN_INSERT_BEFORE ../dbinc/shqueue.h /^#define SH_CHAIN_INSERT_BEFORE(listelm, elm, field/
+SH_CHAIN_NEXT ../dbinc/shqueue.h /^#define SH_CHAIN_NEXT(elm, field, type) (SH_CHAIN_/
+SH_CHAIN_NEXTP ../dbinc/shqueue.h /^#define SH_CHAIN_NEXTP(elm, field, type) \\$/
+SH_CHAIN_PREV ../dbinc/shqueue.h /^#define SH_CHAIN_PREV(elm, field, type) (SH_CHAIN_/
+SH_CHAIN_PREVP ../dbinc/shqueue.h /^#define SH_CHAIN_PREVP(elm, field, type) \\$/
+SH_CHAIN_REMOVE ../dbinc/shqueue.h /^#define SH_CHAIN_REMOVE(elm, field, type) do { /
+SH_CHAIN_SINGLETON ../dbinc/shqueue.h /^#define SH_CHAIN_SINGLETON(elm, field) \\$/
+SH_DBT ../dbinc/lock.h /^} SH_DBT;$/
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_ENTRY ../dbinc/shqueue.h /^#define SH_LIST_ENTRY \\$/
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) /
@@ -1732,16 +1811,16 @@ 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 ../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_ENTRY ../dbinc/shqueue.h /^#define SH_TAILQ_ENTRY \\$/
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 ../dbinc/shqueue.h /^#define SH_TAILQ_HEAD(name) \\$/
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, /
@@ -1749,13 +1828,17 @@ SH_TAILQ_INSERT_BEFORE ../dbinc/shqueue.h /^#define SH_TAILQ_INSERT_BEFORE(head,
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_LASTP ../dbinc/shqueue.h /^#define SH_TAILQ_LASTP(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_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
+SITE_CONNECTED ../dbinc/repmgr.h /^#define SITE_CONNECTED 2$/
+SITE_FROM_EID ../dbinc/repmgr.h /^#define SITE_FROM_EID(eid) (&db_rep->sites[eid])$/
+SITE_IDLE ../dbinc/repmgr.h /^#define SITE_IDLE 1 \/* Waiting til time to retry/
+SIZEOF_PAGE ../dbinc/db_page.h /^#define SIZEOF_PAGE 26$/
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)$/
@@ -1769,10 +1852,34 @@ SLIST_INSERT_HEAD ../dbinc/queue.h /^#define SLIST_INSERT_HEAD(head, elm, field)
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 { \\$/
+SOCKET_ERROR ../dbinc/repmgr.h /^#define SOCKET_ERROR -1$/
SORTED_SET ../db/db_join.c /^#define SORTED_SET(jc, n) ((jc)->j_curslist[(n)]/
-SPLITNEW ../dbinc/hash.h 133
-SPLITOLD ../dbinc/hash.h 132
-SPL_NRECS ../dbinc/btree.h 69
+SPLITNEW ../dbinc/hash.h /^#define SPLITNEW 0x90$/
+SPLITOLD ../dbinc/hash.h /^#define SPLITOLD 0x80$/
+SPL_NRECS ../dbinc/btree.h /^#define SPL_NRECS 0x01 \/* Split tree has record /
+SR_APPEND ../dbinc/btree.h /^#define SR_APPEND 0x00040 \/* Append to the tree./
+SR_DEL ../dbinc/btree.h /^#define SR_DEL 0x40000 \/* Get the tree to delet/
+SR_DELETE ../dbinc/btree.h /^#define SR_DELETE \\$/
+SR_DELNO ../dbinc/btree.h /^#define SR_DELNO 0x00080 \/* Don't return deleted/
+SR_DUPFIRST ../dbinc/btree.h /^#define SR_DUPFIRST 0x00100 \/* Return first dupl/
+SR_DUPLAST ../dbinc/btree.h /^#define SR_DUPLAST 0x00200 \/* Return last duplic/
+SR_EXACT ../dbinc/btree.h /^#define SR_EXACT 0x00400 \/* Exact items only. */
+SR_FIND ../dbinc/btree.h /^#define SR_FIND (SR_READ | SR_DUPFIRST | SR_DELNO/
+SR_FIND_WR ../dbinc/btree.h /^#define SR_FIND_WR (SR_WRITE | SR_DUPFIRST | SR_DE/
+SR_INSERT ../dbinc/btree.h /^#define SR_INSERT (SR_WRITE | SR_DUPLAST | SR_PAST/
+SR_KEYFIRST ../dbinc/btree.h /^#define SR_KEYFIRST (SR_WRITE | SR_DUPFIRST | SR_P/
+SR_KEYLAST ../dbinc/btree.h /^#define SR_KEYLAST (SR_WRITE | SR_DUPLAST | SR_PAS/
+SR_MAX ../dbinc/btree.h /^#define SR_MAX 0x08000 \/* Get the right most ke/
+SR_MIN ../dbinc/btree.h /^#define SR_MIN 0x10000 \/* Get the left most key/
+SR_NEXT ../dbinc/btree.h /^#define SR_NEXT 0x20000 \/* Get the page after t/
+SR_PARENT ../dbinc/btree.h /^#define SR_PARENT 0x00800 \/* Lock page pair. *\//
+SR_PAST_EOF ../dbinc/btree.h /^#define SR_PAST_EOF 0x02000 \/* If doing insert s/
+SR_READ ../dbinc/btree.h /^#define SR_READ 0x00001 \/* Read locks. *\/$/
+SR_STACK ../dbinc/btree.h /^#define SR_STACK 0x01000 \/* Need a complete stac/
+SR_START ../dbinc/btree.h /^#define SR_START 0x80000 \/* Level to start stack/
+SR_STK_ONLY ../dbinc/btree.h /^#define SR_STK_ONLY 0x04000 \/* Just return info /
+SR_WRITE ../dbinc/btree.h /^#define SR_WRITE 0x00002 \/* Write locks. *\/$/
+SR_WRPAIR ../dbinc/btree.h /^#define SR_WRPAIR (SR_WRITE | SR_DUPLAST | SR_PAST/
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, ret) { \\$/
@@ -1790,59 +1897,57 @@ STAILQ_INSERT_TAIL ../dbinc/queue.h /^#define STAILQ_INSERT_TAIL(head, elm, fiel
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 ../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)/
STAT_FMT ../dbinc/db_int.in /^#define STAT_FMT(msg, fmt, type, v) do { \\$/
STAT_HEX ../dbinc/db_int.in /^#define STAT_HEX(msg, v) \\$/
STAT_ISSET ../dbinc/db_int.in /^#define STAT_ISSET(msg, p) \\$/
STAT_LONG ../dbinc/db_int.in /^#define STAT_LONG(msg, v) \\$/
STAT_LSN ../dbinc/db_int.in /^#define STAT_LSN(msg, lsnp) \\$/
+STAT_POINTER ../dbinc/db_int.in /^#define STAT_POINTER(msg, v) \\$/
STAT_STRING ../dbinc/db_int.in /^#define STAT_STRING(msg, p) do { \\$/
STAT_ULONG ../dbinc/db_int.in /^#define STAT_ULONG(msg, v) \\$/
-STDERR_FILENO ../clib/snprintf.c 124
+STDERR_FILENO ../clib/snprintf.c /^#define STDERR_FILENO 2$/
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 52
-ST_DUPSET ../dbinc/db_verify.h 53
-ST_DUPSORT ../dbinc/db_verify.h 54
-ST_IS_RECNO ../dbinc/db_verify.h 55
-ST_OVFL_LEAF ../dbinc/db_verify.h 56
-ST_RECNUM ../dbinc/db_verify.h 57
-ST_RELEN ../dbinc/db_verify.h 58
-ST_TOPLEVEL ../dbinc/db_verify.h 59
+STK_CLRDBC ../dbinc/btree.h /^#define STK_CLRDBC 0x01 \/* Clear dbc->page refer/
+STK_NOLOCK ../dbinc/btree.h /^#define STK_NOLOCK 0x02 \/* Don't retain locks. */
+STK_PGONLY ../dbinc/btree.h /^#define STK_PGONLY 0x04$/
+STRIP_AUTO_COMMIT ../dbinc/db_am.h /^#define STRIP_AUTO_COMMIT(f) FLD_CLR((f), DB_AUTO_/
+ST_DUPOK ../dbinc/db_verify.h /^#define ST_DUPOK 0x00010000 \/* Duplicates are acc/
+ST_DUPSET ../dbinc/db_verify.h /^#define ST_DUPSET 0x00020000 \/* Subtree is in a d/
+ST_DUPSORT ../dbinc/db_verify.h /^#define ST_DUPSORT 0x00040000 \/* Duplicates are s/
+ST_IS_RECNO ../dbinc/db_verify.h /^#define ST_IS_RECNO 0x00080000 \/* Subtree is a re/
+ST_OVFL_LEAF ../dbinc/db_verify.h /^#define ST_OVFL_LEAF 0x00100000 \/* Overflow reffe/
+ST_RECNUM ../dbinc/db_verify.h /^#define ST_RECNUM 0x00200000 \/* Subtree has recor/
+ST_RELEN ../dbinc/db_verify.h /^#define ST_RELEN 0x00400000 \/* Subtree has fixed-/
+ST_TOPLEVEL ../dbinc/db_verify.h /^#define ST_TOPLEVEL 0x00800000 \/* Subtree == enti/
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 31
-SWIG_JavaThrowException ../libdb_java/db_java_wrap.c /^static void SWIG_JavaThrowException(JNIEnv *jenv, /
-SWIG_NOINCLUDE ../libdb_java/db_java_wrap.c 75
+SWAP_IF_NEEDED ../dbinc/db_am.h /^#define SWAP_IF_NEEDED(sdbp, pkey) \\$/
+SWIGEXPORT ../libdb_java/db_java_wrap.c /^# define SWIGEXPORT$/
+SWIGINLINE ../libdb_java/db_java_wrap.c /^# define SWIGINLINE inline$/
+SWIGINTERN ../libdb_java/db_java_wrap.c /^# define SWIGINTERN static SWIGUNUSED$/
+SWIGINTERNINLINE ../libdb_java/db_java_wrap.c /^# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE$/
+SWIGSTDCALL ../libdb_java/db_java_wrap.c /^# define SWIGSTDCALL __stdcall$/
+SWIGTEMPLATEDISAMBIGUATOR ../libdb_java/db_java_wrap.c /^# define SWIGTEMPLATEDISAMBIGUATOR template$/
+SWIGUNUSED ../libdb_java/db_java_wrap.c /^# define SWIGUNUSED __attribute__ ((__unused__/
+SWIGUNUSEDPARM ../libdb_java/db_java_wrap.c /^# define SWIGUNUSEDPARM(p)$/
+SWIG_JavaExceptionCodes ../libdb_java/db_java_wrap.c /^} SWIG_JavaExceptionCodes;$/
+SWIG_JavaExceptions_t ../libdb_java/db_java_wrap.c /^} SWIG_JavaExceptions_t;$/
+SWIG_JavaThrowException ../libdb_java/db_java_wrap.c /^static void SWIGUNUSED SWIG_JavaThrowException(JNI/
+SWIG_NOINCLUDE ../libdb_java/db_java_wrap.c /^#define SWIG_NOINCLUDE 1$/
SWIG_contract_assert ../libdb_java/db_java_wrap.c /^#define SWIG_contract_assert(nullreturn, expr, msg/
-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 74
-S_IROTH ../os/os_oflags.c 80
-S_IRUSR ../os/os_oflags.c 68
+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 *\/$/
S_ISDIR ../os/os_stat.c /^#define S_ISDIR(m) (_S_IFDIR & (m))$/
-S_IWGRP ../os/os_oflags.c 77
-S_IWOTH ../os/os_oflags.c 83
-S_IWUSR ../os/os_oflags.c 71
-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
+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_IXGRP ../os/os_oflags.c /^#define S_IXGRP 0 \/* X for group *\/$/
+S_IXOTH ../os/os_oflags.c /^#define S_IXOTH 0 \/* X for other *\/$/
+S_IXUSR ../os/os_oflags.c /^#define S_IXUSR 0 \/* X for owner *\/$/
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) \\$/
@@ -1860,190 +1965,213 @@ 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 3467
-TEMPERING_MASK_B ../crypto/mersenne/mt19937db.c 44
-TEMPERING_MASK_C ../crypto/mersenne/mt19937db.c 45
+TCLDB_EVENTITEMS ../tcl/tcl_internal.c /^#define TCLDB_EVENTITEMS 2 \/* Event name and any /
+TCLDB_MAXREPFLAGS ../tcl/tcl_db_pkg.c /^#define TCLDB_MAXREPFLAGS 32$/
+TCLDB_SENDEVENT ../tcl/tcl_internal.c /^#define TCLDB_SENDEVENT 2$/
+TCLDB_SENDITEMS ../tcl/tcl_db_pkg.c /^#define TCLDB_SENDITEMS 7$/
+TEMPERING_MASK_B ../crypto/mersenne/mt19937db.c /^#define TEMPERING_MASK_B 0x9d2c5680$/
+TEMPERING_MASK_C ../crypto/mersenne/mt19937db.c /^#define TEMPERING_MASK_C 0xefc60000$/
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)$/
-TIMESTAMP_CHECK ../rep/rep_util.c /^#define TIMESTAMP_CHECK(dbenv, ts, renv) \\$/
+TESTDIR ../mutex/tm.c /^#define TESTDIR "TESTDIR" \/* Working area *\/$/
+THREAD_INFO ../dbinc/db_int.in /^} THREAD_INFO;$/
+TIMESTAMP_CHECK ../rep/rep_util.c /^#define TIMESTAMP_CHECK(dbenv, ts, renv) do { /
TLOOP ../clib/memmove.c /^#define TLOOP(s) if (t) TLOOP1(s)$/
TLOOP1 ../clib/memmove.c /^#define TLOOP1(s) do { s; } while (--t)$/
-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
+TM ../mutex/tm.c /^} TM;$/
+TMASYNC ../dbinc/xa.h /^#define TMASYNC 0x80000000L \/* perform routine a/
+TMENDRSCAN ../dbinc/xa.h /^#define TMENDRSCAN 0x00800000L \/* end a recovery /
+TMER_INVAL ../dbinc/xa.h /^#define TMER_INVAL -2 \/* invalid arguments were /
+TMER_PROTO ../dbinc/xa.h /^#define TMER_PROTO -3 \/* routine invoked in an i/
+TMER_TMERR ../dbinc/xa.h /^#define TMER_TMERR -1 \/* an error occurred in th/
+TMFAIL ../dbinc/xa.h /^#define TMFAIL 0x20000000L \/* dissociates caller/
+TMJOIN ../dbinc/xa.h /^#define TMJOIN 0x00200000L \/* caller is joining /
+TMMIGRATE ../dbinc/xa.h /^#define TMMIGRATE 0x00100000L \/* caller intends t/
+TMMULTIPLE ../dbinc/xa.h /^#define TMMULTIPLE 0x00400000L \/* wait for any as/
+TMNOFLAGS ../dbinc/xa.h /^#define TMNOFLAGS 0x00000000L \/* no resource mana/
+TMNOMIGRATE ../dbinc/xa.h /^#define TMNOMIGRATE 0x00000002L \/* resource manag/
+TMNOWAIT ../dbinc/xa.h /^#define TMNOWAIT 0x10000000L \/* return if blockin/
+TMONEPHASE ../dbinc/xa.h /^#define TMONEPHASE 0x40000000L \/* caller is using/
+TMREGISTER ../dbinc/xa.h /^#define TMREGISTER 0x00000001L \/* resource manage/
+TMRESUME ../dbinc/xa.h /^#define TMRESUME 0x08000000L \/* caller is resumin/
+TMSTARTRSCAN ../dbinc/xa.h /^#define TMSTARTRSCAN 0x01000000L \/* start a recov/
+TMSUCCESS ../dbinc/xa.h /^#define TMSUCCESS 0x04000000L \/* dissociate calle/
+TMSUSPEND ../dbinc/xa.h /^#define TMSUSPEND 0x02000000L \/* caller is suspen/
+TMUSEASYNC ../dbinc/xa.h /^#define TMUSEASYNC 0x00000004L \/* resource manage/
+TM_JOIN ../dbinc/xa.h /^#define TM_JOIN 2 \/* caller is joining existing/
+TM_OK ../dbinc/xa.h /^#define TM_OK 0 \/* normal execution *\/$/
+TM_RESUME ../dbinc/xa.h /^#define TM_RESUME 1 \/* caller is resuming associ/
+TRACEBUF ../dbinc/queue.h /^#define TRACEBUF struct qm_trace trace;$/
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 814
-TXNLIST_NEW ../dbinc/db_dispatch.h 101
-TXN_ABORT ../dbinc/txn.h 207
-TXN_ABORTED ../dbinc/txn.h 47
-TXN_BUBBLE ../db/db_dispatch.c /^#define TXN_BUBBLE(AP, MAX) { \\$/
-TXN_CHILDCOMMIT ../dbinc/db.in 898
-TXN_COMMIT ../dbinc/txn.h 205
-TXN_COMMITTED ../dbinc/txn.h 49
-TXN_COMPENSATE ../dbinc/db.in 899
-TXN_DEADLOCK ../dbinc/db.in 900
-TXN_DEGREE_2 ../dbinc/db.in 901
-TXN_DIRTY_READ ../dbinc/db.in 902
-TXN_DTL_COLLECTED ../dbinc/txn.h 51
-TXN_DTL_RESTORED ../dbinc/txn.h 52
-TXN_EVENT ../txn/txn_util.c 25
-TXN_EVENT_T ../dbinc/txn.h 21
-TXN_EXPECTED ../dbinc/txn.h 209
-TXN_IGNORE ../dbinc/txn.h 208
-TXN_INVALID ../dbinc/txn.h 32
-TXN_IN_RECOVERY ../dbinc/txn.h 115
-TXN_LOCKTIMEOUT ../dbinc/db.in 903
-TXN_MAINT_SIZE ../dbinc/txn.h 120
-TXN_MALLOC ../dbinc/db.in 904
-TXN_MAXIMUM ../dbinc/txn.h 31
-TXN_MINIMUM ../dbinc/txn.h 30
-TXN_NOSYNC ../dbinc/db.in 905
-TXN_NOWAIT ../dbinc/db.in 906
-TXN_OK ../dbinc/txn.h 204
+TRUE ../dbinc/db_int.in /^#define TRUE (!FALSE)$/
+TXN2JDBENV ../libdb_java/db_java_wrap.c /^#define TXN2JDBENV ((jobject)DB_ENV_INTERNAL(arg1-/
+TXN_ABORT ../dbinc/txn.h /^#define TXN_ABORT 3$/
+TXN_ABORTED ../dbinc/db.in /^#define TXN_ABORTED 1$/
+TXN_CDSGROUP ../dbinc/db.in /^#define TXN_CDSGROUP 0x0002 \/* CDS group handle./
+TXN_CHILDCOMMIT ../dbinc/db.in /^#define TXN_CHILDCOMMIT 0x0001 \/* Txn has commit/
+TXN_COMMIT ../dbinc/txn.h /^#define TXN_COMMIT 1$/
+TXN_COMMITTED ../dbinc/db.in /^#define TXN_COMMITTED 2$/
+TXN_COMPENSATE ../dbinc/db.in /^#define TXN_COMPENSATE 0x0004 \/* Compensating tr/
+TXN_DEADLOCK ../dbinc/db.in /^#define TXN_DEADLOCK 0x0008 \/* Txn has deadlocke/
+TXN_DETAIL ../dbinc/txn.h /^} TXN_DETAIL;$/
+TXN_DTL_COLLECTED ../dbinc/txn.h /^#define TXN_DTL_COLLECTED 0x1 \/* collected during/
+TXN_DTL_INMEMORY ../dbinc/txn.h /^#define TXN_DTL_INMEMORY 0x4 \/* uses in memory lo/
+TXN_DTL_RESTORED ../dbinc/txn.h /^#define TXN_DTL_RESTORED 0x2 \/* prepared txn rest/
+TXN_EVENT ../txn/txn_util.c /^typedef struct __txn_event TXN_EVENT;$/
+TXN_EVENT_T ../dbinc/txn.h /^} TXN_EVENT_T;$/
+TXN_EXPECTED ../dbinc/txn.h /^#define TXN_EXPECTED 5$/
+TXN_IGNORE ../dbinc/txn.h /^#define TXN_IGNORE 4$/
+TXN_INVALID ../dbinc/txn.h /^#define TXN_INVALID 0 \/* Invalid transaction ID./
+TXN_IN_RECOVERY ../dbinc/txn.h /^#define TXN_IN_RECOVERY 0x01 \/* environment is /
+TXN_LOCKTIMEOUT ../dbinc/db.in /^#define TXN_LOCKTIMEOUT 0x0010 \/* Txn has a lock/
+TXN_MALLOC ../dbinc/db.in /^#define TXN_MALLOC 0x0020 \/* Structure allocated/
+TXN_MAXIMUM ../dbinc/txn.h /^#define TXN_MAXIMUM 0xffffffff \/* Maximum number /
+TXN_MINIMUM ../dbinc/txn.h /^#define TXN_MINIMUM 0x80000000$/
+TXN_NOSYNC ../dbinc/db.in /^#define TXN_NOSYNC 0x0040 \/* Do not sync on prep/
+TXN_NOWAIT ../dbinc/db.in /^#define TXN_NOWAIT 0x0080 \/* Do not wait on lock/
+TXN_OK ../dbinc/txn.h /^#define TXN_OK 0$/
TXN_ON ../dbinc/db_int.in /^#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL/
-TXN_PREPARE ../dbinc/txn.h 206
-TXN_PREPARED ../dbinc/txn.h 48
-TXN_RESTORED ../dbinc/db.in 907
-TXN_RUNNING ../dbinc/txn.h 46
-TXN_SYNC ../dbinc/db.in 908
-TXN_UNEXPECTED ../dbinc/txn.h 210
-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
+TXN_PREPARE ../dbinc/txn.h /^#define TXN_PREPARE 2$/
+TXN_PREPARED ../dbinc/db.in /^#define TXN_PREPARED 3$/
+TXN_PRIVATE ../dbinc/db.in /^#define TXN_PRIVATE 0x0100 \/* Txn owned by curso/
+TXN_READ_COMMITTED ../dbinc/db.in /^#define TXN_READ_COMMITTED 0x0200 \/* Txn has degr/
+TXN_READ_UNCOMMITTED ../dbinc/db.in /^#define TXN_READ_UNCOMMITTED 0x0400 \/* Txn has de/
+TXN_RESTORED ../dbinc/db.in /^#define TXN_RESTORED 0x0800 \/* Txn has been rest/
+TXN_RUNNING ../dbinc/db.in /^#define TXN_RUNNING 4$/
+TXN_SNAPSHOT ../dbinc/db.in /^#define TXN_SNAPSHOT 0x1000 \/* Snapshot Isolatio/
+TXN_SYNC ../dbinc/db.in /^#define TXN_SYNC 0x2000 \/* Write and sync on pre/
+TXN_SYNC_FLAGS ../dbinc/db.in /^#define TXN_SYNC_FLAGS (TXN_SYNC | TXN_NOSYNC | TX/
+TXN_SYSTEM_LOCK ../dbinc/txn.h /^#define TXN_SYSTEM_LOCK(dbenv) \\$/
+TXN_SYSTEM_UNLOCK ../dbinc/txn.h /^#define TXN_SYSTEM_UNLOCK(dbenv) \\$/
+TXN_UNEXPECTED ../dbinc/txn.h /^#define TXN_UNEXPECTED 6$/
+TXN_WRITE_NOSYNC ../dbinc/db.in /^#define TXN_WRITE_NOSYNC 0x4000 \/* Write only on /
+TXN_XA_ABORTED ../dbinc/db.in /^#define TXN_XA_ABORTED 1$/
+TXN_XA_DEADLOCKED ../dbinc/db.in /^#define TXN_XA_DEADLOCKED 2$/
+TXN_XA_ENDED ../dbinc/db.in /^#define TXN_XA_ENDED 3$/
+TXN_XA_PREPARED ../dbinc/db.in /^#define TXN_XA_PREPARED 4$/
+TXN_XA_STARTED ../dbinc/db.in /^#define TXN_XA_STARTED 5$/
+TXN_XA_SUSPENDED ../dbinc/db.in /^#define TXN_XA_SUSPENDED 6$/
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_MAX ../dbinc/db_int.in 39
+UINT16_MAX ../dbinc/db_int.in /^#define UINT16_MAX 65535 \/* Maximum 16-bit unsig/
UINT32_CMP ../lock/lock_list.c /^#define UINT32_CMP(A, B) ((A) == (B) ? 0 : ((A) > /
-UINT32_MAX ../dbinc/db_int.in 43
-UINT64_FMT ../dbinc/db_int.in 60
-UINT64_MAX ../dbinc/db_int.in 57
+UINT32_MAX ../dbinc/db_int.in /^#define UINT32_MAX 4294967295U \/* Maximum 32-bit /
+UINT64_MAX ../dbinc/db_int.in /^#define UINT64_MAX _UI64_MAX$/
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 40
-UPREFIX ../clib/strerror.c 55
-USEC_PER_MS ../dbinc/db_int.in 80
-VERIFY_FLAGS ../db/db_vrfy.c 65
-VRFY_CHILDINFO ../dbinc/db_int.in 529
-VRFY_DBINFO ../dbinc/db_int.in 530
-VRFY_DUPS_UNSORTED ../dbinc/db_verify.h 182
-VRFY_HAS_DUPS ../dbinc/db_verify.h 183
-VRFY_HAS_DUPSORT ../dbinc/db_verify.h 184
-VRFY_HAS_RECNUMS ../dbinc/db_verify.h 186
-VRFY_HAS_SUBDBS ../dbinc/db_verify.h 185
-VRFY_INCOMPLETE ../dbinc/db_verify.h 187
-VRFY_IS_ALLZEROES ../dbinc/db_verify.h 188
-VRFY_IS_FIXEDLEN ../dbinc/db_verify.h 189
-VRFY_IS_RECNO ../dbinc/db_verify.h 190
-VRFY_IS_RRECNO ../dbinc/db_verify.h 191
-VRFY_ITEM ../btree/bt_verify.c 507
-VRFY_LEAFCHAIN_BROKEN ../dbinc/db_verify.h 138
-VRFY_OVFL_LEAFSEEN ../dbinc/db_verify.h 192
-VRFY_PAGEINFO ../dbinc/db_int.in 531
-VRFY_QMETA_SET ../dbinc/db_verify.h 139
-V_DUPLICATE ../dbinc/db_verify.h 203
-V_OVERFLOW ../dbinc/db_verify.h 204
-V_RECNO ../dbinc/db_verify.h 205
-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 174
-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
+UNLOCK_MUTEX ../dbinc/repmgr.h /^#define UNLOCK_MUTEX(m) do { \\$/
+UPPER_MASK ../crypto/mersenne/mt19937db.c /^#define UPPER_MASK 0x80000000 \/* most significant/
+USEC_PER_MS ../dbinc/db_int.in /^#define USEC_PER_MS 1000 \/* Microseconds in a mi/
+VERIFY_FLAGS ../db/db_vrfy.c /^#define VERIFY_FLAGS \\$/
+VISIBLE_LSN ../dbinc/mp.h /^#define VISIBLE_LSN(dbenv, bhp) \\$/
+VM_PAGESIZE ../dbinc/mp.h /^#define VM_PAGESIZE 4096$/
+VRFY_CHILDINFO ../dbinc/db_int.in /^struct __vrfy_childinfo;typedef struct __vrfy_chil/
+VRFY_DBINFO ../dbinc/db_int.in /^struct __vrfy_dbinfo; typedef struct __vrfy_dbin/
+VRFY_DUPS_UNSORTED ../dbinc/db_verify.h /^#define VRFY_DUPS_UNSORTED 0x0001 \/* Have to flag/
+VRFY_HAS_CHKSUM ../dbinc/db_verify.h /^#define VRFY_HAS_CHKSUM 0x0002$/
+VRFY_HAS_DUPS ../dbinc/db_verify.h /^#define VRFY_HAS_DUPS 0x0004$/
+VRFY_HAS_DUPSORT ../dbinc/db_verify.h /^#define VRFY_HAS_DUPSORT 0x0008 \/* Has the flag s/
+VRFY_HAS_RECNUMS ../dbinc/db_verify.h /^#define VRFY_HAS_RECNUMS 0x0010$/
+VRFY_HAS_SUBDBS ../dbinc/db_verify.h /^#define VRFY_HAS_SUBDBS 0x0020$/
+VRFY_INCOMPLETE ../dbinc/db_verify.h /^#define VRFY_INCOMPLETE 0x0040 \/* Meta or item o/
+VRFY_IS_ALLZEROES ../dbinc/db_verify.h /^#define VRFY_IS_ALLZEROES 0x0080 \/* Hash page we /
+VRFY_IS_FIXEDLEN ../dbinc/db_verify.h /^#define VRFY_IS_FIXEDLEN 0x0100$/
+VRFY_IS_RECNO ../dbinc/db_verify.h /^#define VRFY_IS_RECNO 0x0200$/
+VRFY_IS_RRECNO ../dbinc/db_verify.h /^#define VRFY_IS_RRECNO 0x0400$/
+VRFY_ITEM ../btree/bt_verify.c /^typedef enum { VRFY_ITEM_NOTSET=0, VRFY_ITEM_BEGIN/
+VRFY_LEAFCHAIN_BROKEN ../dbinc/db_verify.h /^#define VRFY_LEAFCHAIN_BROKEN 0x08 \/* Lost one or/
+VRFY_OVFL_LEAFSEEN ../dbinc/db_verify.h /^#define VRFY_OVFL_LEAFSEEN 0x0800$/
+VRFY_PAGEINFO ../dbinc/db_int.in /^struct __vrfy_pageinfo; typedef struct __vrfy_page/
+VRFY_QMETA_SET ../dbinc/db_verify.h /^#define VRFY_QMETA_SET 0x10 \/* We've seen a Q/
+V_DUPLICATE ../dbinc/db_verify.h /^#define V_DUPLICATE 1 \/* off-page dup metadata */
+V_OVERFLOW ../dbinc/db_verify.h /^#define V_OVERFLOW 2 \/* overflow page *\/$/
+V_RECNO ../dbinc/db_verify.h /^#define V_RECNO 3 \/* btree internal or leaf pag/
+WAITER_SLOT_IN_USE ../repmgr/repmgr_windows.c /^#define WAITER_SLOT_IN_USE(w) ((w)->lsnp != NULL)$/
+WOULDBLOCK ../dbinc/repmgr.h /^#define WOULDBLOCK WSAEWOULDBLOCK$/
+WRAPPED_CLASS ../dbinc/cxx_int.h /^\/\/$/
+XAER_ASYNC ../dbinc/xa.h /^#define XAER_ASYNC -2 \/* asynchronous operation /
+XAER_DUPID ../dbinc/xa.h /^#define XAER_DUPID -8 \/* the XID already exists /
+XAER_INVAL ../dbinc/xa.h /^#define XAER_INVAL -5 \/* invalid arguments were /
+XAER_NOTA ../dbinc/xa.h /^#define XAER_NOTA -4 \/* the XID is not valid *\//
+XAER_OUTSIDE ../dbinc/xa.h /^#define XAER_OUTSIDE -9 \/* resource manager doin/
+XAER_PROTO ../dbinc/xa.h /^#define XAER_PROTO -6 \/* routine invoked in an i/
+XAER_RMERR ../dbinc/xa.h /^#define XAER_RMERR -3 \/* a resource manager erro/
+XAER_RMFAIL ../dbinc/xa.h /^#define XAER_RMFAIL -7 \/* resource manager unava/
+XA_FLAGS ../xa/xa.c /^#define XA_FLAGS \\$/
+XA_HEURCOM ../dbinc/xa.h /^#define XA_HEURCOM 7 \/* the transaction branch h/
+XA_HEURHAZ ../dbinc/xa.h /^#define XA_HEURHAZ 8 \/* the transaction branch m/
+XA_HEURMIX ../dbinc/xa.h /^#define XA_HEURMIX 5 \/* the transaction branch h/
+XA_HEURRB ../dbinc/xa.h /^#define XA_HEURRB 6 \/* the transaction branch ha/
+XA_METHODS ../xa/xa_db.c /^} XA_METHODS;$/
+XA_NOMIGRATE ../dbinc/xa.h /^#define XA_NOMIGRATE 9 \/* resumption must occur /
+XA_OK ../dbinc/xa.h /^#define XA_OK 0 \/* normal execution *\/$/
+XA_RBBASE ../dbinc/xa.h /^#define XA_RBBASE 100 \/* The inclusive lower bou/
+XA_RBCOMMFAIL ../dbinc/xa.h /^#define XA_RBCOMMFAIL XA_RBBASE+1 \/* The rollback/
+XA_RBDEADLOCK ../dbinc/xa.h /^#define XA_RBDEADLOCK XA_RBBASE+2 \/* A deadlock w/
+XA_RBEND ../dbinc/xa.h /^#define XA_RBEND XA_RBTRANSIENT \/* The inclusive /
+XA_RBINTEGRITY ../dbinc/xa.h /^#define XA_RBINTEGRITY XA_RBBASE+3 \/* A condition/
+XA_RBOTHER ../dbinc/xa.h /^#define XA_RBOTHER XA_RBBASE+4 \/* The resource ma/
+XA_RBPROTO ../dbinc/xa.h /^#define XA_RBPROTO XA_RBBASE+5 \/* A protocol erro/
+XA_RBROLLBACK ../dbinc/xa.h /^#define XA_RBROLLBACK XA_RBBASE \/* The rollback w/
+XA_RBTIMEOUT ../dbinc/xa.h /^#define XA_RBTIMEOUT XA_RBBASE+6 \/* A transaction/
+XA_RBTRANSIENT ../dbinc/xa.h /^#define XA_RBTRANSIENT XA_RBBASE+7 \/* May retry t/
+XA_RDONLY ../dbinc/xa.h /^#define XA_RDONLY 3 \/* the transaction branch wa/
+XA_RETRY ../dbinc/xa.h /^#define XA_RETRY 4 \/* routine returned with no e/
+XID ../dbinc/xa.h /^typedef struct xid_t XID;$/
+XIDDATASIZE ../dbinc/xa.h /^#define XIDDATASIZE 128 \/* size in bytes *\/$/
+XID_FIELD_IS_SET ../txn/txn_stat.c /^#define XID_FIELD_IS_SET(p) \\$/
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 273
-_CXX_INT_H_ ../dbinc/cxx_int.h 11
+ZF_LARGE_WRITE ../os/os_fzero.c /^#define ZF_LARGE_WRITE (64 * 1024)$/
+_CRT_SECURE_NO_DEPRECATE ../libdb_java/db_java_wrap.c /^# define _CRT_SECURE_NO_DEPRECATE$/
_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
+_DB_185_H_ ../dbinc/db_185.in /^#define _DB_185_H_$/
+_DB_AM_H_ ../dbinc/db_am.h /^#define _DB_AM_H_$/
+_DB_BTREE_H_ ../dbinc/btree.h /^#define _DB_BTREE_H_$/
+_DB_CRYPTO_H_ ../dbinc/crypto.h /^#define _DB_CRYPTO_H_$/
+_DB_CXX_H_ ../dbinc/db_cxx.in /^#define _DB_CXX_H_$/
+_DB_CXX_INT_H_ ../dbinc/cxx_int.h /^#define _DB_CXX_INT_H_$/
+_DB_DEBUG_H_ ../dbinc/debug.h /^#define _DB_DEBUG_H_$/
+_DB_DISPATCH_H_ ../dbinc/db_dispatch.h /^#define _DB_DISPATCH_H_$/
+_DB_FOP_H_ ../dbinc/fop.h /^#define _DB_FOP_H_$/
+_DB_GLOBALS_H_ ../dbinc/globals.h /^#define _DB_GLOBALS_H_$/
+_DB_HASH_H_ ../dbinc/hash.h /^#define _DB_HASH_H_$/
+_DB_HMAC_H_ ../dbinc/hmac.h /^#define _DB_HMAC_H_$/
+_DB_H_ ../dbinc/db.in /^#define _DB_H_$/
+_DB_INT_H_ ../dbinc/db_int.in /^#define _DB_INT_H_$/
+_DB_JOIN_H_ ../dbinc/db_join.h /^#define _DB_JOIN_H_$/
+_DB_LOCK_H_ ../dbinc/lock.h /^#define _DB_LOCK_H_$/
+_DB_LOG_H_ ../dbinc/log.h /^#define _DB_LOG_H_$/
+_DB_MP_H_ ../dbinc/mp.h /^#define _DB_MP_H_$/
+_DB_MUTEX_H_ ../dbinc/mutex.h /^#define _DB_MUTEX_H_$/
+_DB_MUTEX_INT_H_ ../dbinc/mutex_int.h /^#define _DB_MUTEX_INT_H_$/
+_DB_OS_H_ ../dbinc/os.h /^#define _DB_OS_H_$/
+_DB_PAGE_H_ ../dbinc/db_page.h /^#define _DB_PAGE_H_$/
+_DB_QAM_H_ ../dbinc/qam.h /^#define _DB_QAM_H_$/
+_DB_QUEUE_H_ ../dbinc/queue.h /^#define _DB_QUEUE_H_$/
+_DB_REGION_H_ ../dbinc/region.h /^#define _DB_REGION_H_$/
+_DB_REPMGR_H_ ../dbinc/repmgr.h /^#define _DB_REPMGR_H_$/
+_DB_REP_H_ ../dbinc/rep.h /^#define _DB_REP_H_$/
+_DB_SERVER_INT_H_ ../dbinc/db_server_int.h /^#define _DB_SERVER_INT_H_$/
+_DB_SHQUEUE_H_ ../dbinc/shqueue.h /^#define _DB_SHQUEUE_H_$/
+_DB_SWAP_H_ ../dbinc/db_swap.h /^#define _DB_SWAP_H_$/
+_DB_TCL_DB_H_ ../dbinc/tcl_db.h /^#define _DB_TCL_DB_H_$/
+_DB_TXN_H_ ../dbinc/txn.h /^#define _DB_TXN_H_$/
+_DB_UPGRADE_H_ ../dbinc/db_upgrade.h /^#define _DB_UPGRADE_H_$/
+_DB_VERIFY_H_ ../dbinc/db_verify.h /^#define _DB_VERIFY_H_$/
+_DB_XA_H_ ../dbinc/xa.h /^#define _DB_XA_H_$/
_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(dbenv, pfx, msg)$/
_ErrorSetup ../tcl/tcl_internal.c /^_ErrorSetup(interp, ret, errmsg)$/
-_FOP_H_ ../dbinc/fop.h 11
+_EventFunc ../tcl/tcl_internal.c /^_EventFunc(dbenv, event, info)$/
_GetFlagsList ../tcl/tcl_internal.c /^_GetFlagsList(interp, flags, fnp)$/
_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/
_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)$/
_MpInfoDelete ../tcl/tcl_mp.c /^_MpInfoDelete(interp, mpip)$/
@@ -2051,9 +2179,7 @@ _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)$/
-_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/
@@ -2061,24 +2187,25 @@ _SetListElemInt ../tcl/tcl_internal.c /^_SetListElemInt(interp, list, elem1, ele
_SetListElemWideInt ../tcl/tcl_internal.c /^_SetListElemWideInt(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_ ../dbinc/txn.h 11
_TxnInfoDelete ../tcl/tcl_txn.c /^_TxnInfoDelete(interp, txnip)$/
-__BIT_TYPES_DEFINED__ ../dbinc/db.in 62
-__DBC_INTERNAL ../dbinc/db_int.in 376
-__DB_OVFL ../env/env_open.c /^#define __DB_OVFL(v, max) \\$/
+__BIT_TYPES_DEFINED__ ../dbinc/db.in /^#define __BIT_TYPES_DEFINED__$/
+__DBC_INTERNAL ../dbinc/db_int.in /^#define __DBC_INTERNAL \\$/
__DB_STD ../dbinc/db_cxx.in /^#define __DB_STD(x) std::x$/
-__ENV_LPUT ../dbinc/db_am.h /^#define __ENV_LPUT(dbenv, lock, flags) \\$/
+__ENV_LPUT ../dbinc/db_am.h /^#define __ENV_LPUT(dbenv, lock) \\$/
+__INCLUDE_NETWORKING ../clib/getaddrinfo.c /^#define __INCLUDE_NETWORKING 1$/
+__INCLUDE_SELECT_H ../os/os_sleep.c /^#define __INCLUDE_SELECT_H 1$/
__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
+__P ../dbinc/db_185.in /^#define __P(protos) protos \/* ANSI C prototypes /
+__P_DUPLICATE ../dbinc/db_page.h /^#define __P_DUPLICATE 1 \/* Duplicate. DEPRECATED /
+__RIJNDAEL_ALG_FST_H ../crypto/rijndael/rijndael-alg-fst.h /^#define __RIJNDAEL_ALG_FST_H$/
+__RIJNDAEL_API_FST_H ../crypto/rijndael/rijndael-api-fst.h /^#define __RIJNDAEL_API_FST_H$/
+__R_UNUSED ../dbinc/db_185.in /^#define __R_UNUSED 2 \/* UNUSED *\/$/
__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)$/
+__ack_waiters_table ../repmgr/repmgr_windows.c /^struct __ack_waiters_table {$/
__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_/
@@ -2091,7 +2218,7 @@ __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(dbp, txnid, ret_lsnp, flags, pgno, l/
+__bam_adj_log ../btree/btree_auto.c /^__bam_adj_log(dbp, txnp, ret_lsnp, flags, pgno, ls/
__bam_adj_print ../btree/btree_autop.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)$/
@@ -2107,11 +2234,9 @@ __bam_c_count ../btree/bt_cursor.c /^__bam_c_count(dbc, recnop)$/
__bam_c_del ../btree/bt_cursor.c /^__bam_c_del(dbc)$/
__bam_c_destroy ../btree/bt_cursor.c /^__bam_c_destroy(dbc)$/
__bam_c_dup ../btree/bt_cursor.c /^__bam_c_dup(orig_dbc, new_dbc)$/
-__bam_c_first ../btree/bt_cursor.c /^__bam_c_first(dbc)$/
__bam_c_get ../btree/bt_cursor.c /^__bam_c_get(dbc, key, data, flags, pgnop)$/
__bam_c_getstack ../btree/bt_cursor.c /^__bam_c_getstack(dbc)$/
__bam_c_init ../btree/bt_cursor.c /^__bam_c_init(dbc, dbtype)$/
-__bam_c_last ../btree/bt_cursor.c /^__bam_c_last(dbc)$/
__bam_c_next ../btree/bt_cursor.c /^__bam_c_next(dbc, initial_move, deleted_okay)$/
__bam_c_physdel ../btree/bt_cursor.c /^__bam_c_physdel(dbc)$/
__bam_c_prev ../btree/bt_cursor.c /^__bam_c_prev(dbc)$/
@@ -2120,24 +2245,28 @@ __bam_c_refresh ../btree/bt_cursor.c /^__bam_c_refresh(dbc)$/
__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)$/
-__bam_ca_delete ../btree/bt_curadj.c /^__bam_ca_delete(dbp, pgno, indx, delete)$/
+__bam_ca_delete ../btree/bt_curadj.c /^__bam_ca_delete(dbp, pgno, indx, delete, countp)$/
__bam_ca_di ../btree/bt_curadj.c /^__bam_ca_di(my_dbc, pgno, indx, adjust)$/
__bam_ca_dup ../btree/bt_curadj.c /^__bam_ca_dup(my_dbc, first, fpgno, fi, tpgno, ti)$/
__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(dbp, txnid, ret_lsnp, flags, pgn/
+__bam_cadjust_log ../btree/btree_auto.c /^__bam_cadjust_log(dbp, txnp, ret_lsnp, flags, pgno/
__bam_cadjust_print ../btree/btree_autop.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(dbp, txnid, ret_lsnp, flags, pgno, /
+__bam_cdel_log ../btree/btree_auto.c /^__bam_cdel_log(dbp, txnp, ret_lsnp, flags, pgno, l/
__bam_cdel_print ../btree/btree_autop.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_cmp ../btree/bt_compare.c /^__bam_cmp(dbp, txn, dbt, h, indx, func, cmpp)$/
+__bam_compact ../btree/bt_compact.c /^__bam_compact(dbp, txn, start, stop, c_data, flags/
+__bam_compact_dups ../btree/bt_compact.c /^__bam_compact_dups(dbc, ppg, factor, have_lock, c_/
+__bam_compact_int ../btree/bt_compact.c /^__bam_compact_int(dbc, start, stop, factor, spanp,/
__bam_copy ../btree/bt_split.c /^__bam_copy(dbp, pp, cp, nxt, stop)$/
-__bam_curadj_log ../btree/btree_auto.c /^__bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode/
+__bam_csearch ../btree/bt_compact.c /^__bam_csearch(dbc, start, sflag, level)$/
+__bam_curadj_log ../btree/btree_auto.c /^__bam_curadj_log(dbp, txnp, ret_lsnp, flags, mode,/
__bam_curadj_print ../btree/btree_autop.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)$/
@@ -2146,10 +2275,13 @@ __bam_db_create ../btree/bt_method.c /^__bam_db_create(dbp)$/
__bam_defcmp ../btree/bt_compare.c /^__bam_defcmp(dbp, a, b)$/
__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_dpages ../btree/bt_delete.c /^__bam_dpages(dbc, use_top, update)$/
+__bam_dup_check ../btree/bt_put.c /^__bam_dup_check(dbc, op, h, indx, sz, cntp)$/
+__bam_dup_convert ../btree/bt_put.c /^__bam_dup_convert(dbc, h, indx, cnt)$/
+__bam_free_freelist ../btree/bt_compact.c /^__bam_free_freelist(dbp, txn)$/
__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_get_root ../btree/bt_search.c /^__bam_get_root(dbc, pg, slevel, flags, stack)$/
__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)$/
@@ -2159,6 +2291,14 @@ __bam_init_recover ../btree/btree_auto.c /^__bam_init_recover(dbenv, dtabp, dtab
__bam_isopd ../btree/bt_cursor.c /^__bam_isopd(dbc, pgnop)$/
__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_merge ../btree/bt_compact.c /^__bam_merge(dbc, ndbc, factor, stop, c_data, donep/
+__bam_merge_internal ../btree/bt_compact.c /^__bam_merge_internal(dbc, ndbc, level, c_data, mer/
+__bam_merge_log ../btree/btree_auto.c /^__bam_merge_log(dbp, txnp, ret_lsnp, flags, pgno, /
+__bam_merge_pages ../btree/bt_compact.c /^__bam_merge_pages(dbc, ndbc, c_data)$/
+__bam_merge_print ../btree/btree_autop.c /^__bam_merge_print(dbenv, dbtp, lsnp, notused2, not/
+__bam_merge_read ../btree/btree_auto.c /^__bam_merge_read(dbenv, recbuf, argpp)$/
+__bam_merge_records ../btree/bt_compact.c /^__bam_merge_records(dbc, ndbc, factor, c_data)$/
+__bam_merge_recover ../btree/bt_rec.c /^__bam_merge_recover(dbenv, dbtp, lsnp, op, info)$/
__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)$/
@@ -2166,52 +2306,62 @@ __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_opd_exists ../btree/bt_cursor.c /^__bam_opd_exists(dbc, pgno)$/
__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(dbp, op, data, h, indx)$/
__bam_pgin ../btree/bt_conv.c /^__bam_pgin(dbenv, dummydbp, pg, pp, cookie)$/
+__bam_pgno_log ../btree/btree_auto.c /^__bam_pgno_log(dbp, txnp, ret_lsnp, flags, pgno, l/
+__bam_pgno_print ../btree/btree_autop.c /^__bam_pgno_print(dbenv, dbtp, lsnp, notused2, notu/
+__bam_pgno_read ../btree/btree_auto.c /^__bam_pgno_read(dbenv, recbuf, argpp)$/
+__bam_pgno_recover ../btree/bt_rec.c /^__bam_pgno_recover(dbenv, dbtp, lsnp, op, info)$/
__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_pinsert ../btree/bt_split.c /^__bam_pinsert(dbc, parent, lchild, rchild, flags)$/
__bam_print_cursor ../btree/bt_stat.c /^__bam_print_cursor(dbc)$/
__bam_psplit ../btree/bt_split.c /^__bam_psplit(dbc, cp, lp, rp, splitret)$/
-__bam_rcuradj_log ../btree/btree_auto.c /^__bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mod/
+__bam_pupdate ../btree/bt_delete.c /^__bam_pupdate(dbc, lpg)$/
+__bam_rcuradj_log ../btree/btree_auto.c /^__bam_rcuradj_log(dbp, txnp, ret_lsnp, flags, mode/
__bam_rcuradj_print ../btree/btree_autop.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, txn, base_pgno, flags)$/
__bam_reclaim ../btree/bt_reclaim.c /^__bam_reclaim(dbp, txn)$/
-__bam_relink ../btree/bt_delete.c /^__bam_relink(dbc, pagep, new_next)$/
-__bam_relink_log ../btree/btree_auto.c /^__bam_relink_log(dbp, txnid, ret_lsnp, flags, pgno/
+__bam_relink ../btree/bt_delete.c /^__bam_relink(dbc, pagep, new_pgno)$/
+__bam_relink_43_print ../btree/btree_autop.c /^__bam_relink_43_print(dbenv, dbtp, lsnp, notused2,/
+__bam_relink_43_read ../btree/btree_auto.c /^__bam_relink_43_read(dbenv, recbuf, argpp)$/
+__bam_relink_43_recover ../btree/bt_rec.c /^__bam_relink_43_recover(dbenv, dbtp, lsnp, op, inf/
+__bam_relink_log ../btree/btree_auto.c /^__bam_relink_log(dbp, txnp, ret_lsnp, flags, pgno,/
__bam_relink_print ../btree/btree_autop.c /^__bam_relink_print(dbenv, dbtp, lsnp, notused2, no/
__bam_relink_read ../btree/btree_auto.c /^__bam_relink_read(dbenv, recbuf, argpp)$/
__bam_relink_recover ../btree/bt_rec.c /^__bam_relink_recover(dbenv, dbtp, lsnp, op, info)$/
-__bam_repl_log ../btree/btree_auto.c /^__bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, /
+__bam_repl_log ../btree/btree_auto.c /^__bam_repl_log(dbp, txnp, ret_lsnp, flags, pgno, l/
__bam_repl_print ../btree/btree_autop.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(dbp, txnid, ret_lsnp, flags, meta_p/
+__bam_root_log ../btree/btree_auto.c /^__bam_root_log(dbp, txnp, ret_lsnp, flags, meta_pg/
__bam_root_print ../btree/btree_autop.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_rsplit_log ../btree/btree_auto.c /^__bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno/
+__bam_rsplit_log ../btree/btree_auto.c /^__bam_rsplit_log(dbp, txnp, ret_lsnp, flags, pgno,/
__bam_rsplit_print ../btree/btree_autop.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)$/
__bam_safe_getdata ../btree/bt_verify.c /^__bam_safe_getdata(dbp, h, i, ovflok, dbt, freedbt/
__bam_salvage ../btree/bt_verify.c /^__bam_salvage(dbp, vdp, pgno, pgtype, h, handle, c/
__bam_salvage_walkdupint ../btree/bt_verify.c /^__bam_salvage_walkdupint(dbp, vdp, h, key, handle,/
-__bam_search ../btree/bt_search.c /^__bam_search(dbc, root_pgno, key, flags, stop, rec/
+__bam_savekey ../btree/bt_compact.c /^__bam_savekey(dbc, next, start)$/
+__bam_search ../btree/bt_search.c /^__bam_search(dbc, root_pgno, key, flags, slevel, r/
__bam_set_bt_compare ../btree/bt_method.c /^__bam_set_bt_compare(dbp, func)$/
-__bam_set_bt_maxkey ../btree/bt_method.c /^__bam_set_bt_maxkey(dbp, bt_maxkey)$/
__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_setup_freelist ../btree/bt_compact.c /^__bam_setup_freelist(dbp, list, nelems)$/
__bam_split ../btree/bt_split.c /^__bam_split(dbc, arg, root_pgnop)$/
-__bam_split_log ../btree/btree_auto.c /^__bam_split_log(dbp, txnid, ret_lsnp, flags, left,/
+__bam_split_log ../btree/btree_auto.c /^__bam_split_log(dbp, txnp, ret_lsnp, flags, left, /
__bam_split_print ../btree/btree_autop.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)$/
@@ -2223,19 +2373,54 @@ __bam_stkrel ../btree/bt_search.c /^__bam_stkrel(dbc, flags)$/
__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(dbc, countp)$/
+__bam_truncate_internal ../btree/bt_compact.c /^__bam_truncate_internal(dbp, txn, c_data)$/
+__bam_truncate_internal_overflow ../btree/bt_compact.c /^__bam_truncate_internal_overflow(dbc, page, c_data/
+__bam_truncate_overflow ../btree/bt_compact.c /^__bam_truncate_overflow(dbc, pgno, pg_lock, c_data/
+__bam_truncate_page ../btree/bt_compact.c /^__bam_truncate_page(dbc, pgp, update_parent)$/
+__bam_truncate_root_page ../btree/bt_compact.c /^__bam_truncate_root_page(dbc, pg, indx, c_data)$/
__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, vdp, pgno, l, r, flags, le/
-__bam_vrfy_treeorder ../btree/bt_verify.c /^__bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, f/
+__bam_vrfy_treeorder ../btree/bt_verify.c /^__bam_vrfy_treeorder(dbp, h, lp, rp, func, flags)$/
+__bh ../dbinc/mp.h /^struct __bh {$/
+__bh_frozen_a ../dbinc/mp.h /^struct __bh_frozen_a {$/
+__bh_frozen_p ../dbinc/mp.h /^struct __bh_frozen_p {$/
__bhcmp ../mp/mp_sync.c /^__bhcmp(p1, p2)$/
+__btree ../dbinc/btree.h /^struct __btree { \/* Btree access method. *\/$/
__build_data ../log/log_archive.c /^__build_data(dbenv, pref, listp)$/
+__cdsgroup_abort ../db/db_cds.c /^static int __cdsgroup_abort(txn)$/
+__cdsgroup_begin ../db/db_cds.c /^int __cdsgroup_begin(dbenv, txnpp)$/
+__cdsgroup_commit ../db/db_cds.c /^static int __cdsgroup_commit(txn, flags)$/
+__cdsgroup_discard ../db/db_cds.c /^static int __cdsgroup_discard(txn, flags)$/
+__cdsgroup_id ../db/db_cds.c /^static u_int32_t __cdsgroup_id(txn)$/
+__cdsgroup_notsup ../db/db_cds.c /^__cdsgroup_notsup(dbenv, meth)$/
+__cdsgroup_prepare ../db/db_cds.c /^static int __cdsgroup_prepare(txn, gid)$/
+__cdsgroup_set_name ../db/db_cds.c /^static int __cdsgroup_set_name(txn, name)$/
+__cdsgroup_set_timeout ../db/db_cds.c /^static int __cdsgroup_set_timeout(txn, timeout, fl/
__cmpfunc ../log/log_archive.c /^__cmpfunc(p1, p2)$/
+__config_parse ../env/env_config.c /^__config_parse(dbenv, s, lc)$/
+__config_split ../env/env_config.c /^__config_split(input, argv)$/
+__cq_aq ../dbinc/db.in /^ struct __cq_aq {$/
+__cq_fq ../dbinc/db.in /^ struct __cq_fq {$/
+__cq_jq ../dbinc/db.in /^ struct __cq_jq {$/
__crdel_init_print ../db/crdel_autop.c /^__crdel_init_print(dbenv, dtabp, dtabsizep)$/
__crdel_init_recover ../db/crdel_auto.c /^__crdel_init_recover(dbenv, dtabp, dtabsizep)$/
-__crdel_metasub_log ../db/crdel_auto.c /^__crdel_metasub_log(dbp, txnid, ret_lsnp, flags, p/
+__crdel_inmem_create_log ../db/crdel_auto.c /^__crdel_inmem_create_log(dbenv, txnp, ret_lsnp, fl/
+__crdel_inmem_create_print ../db/crdel_autop.c /^__crdel_inmem_create_print(dbenv, dbtp, lsnp, notu/
+__crdel_inmem_create_read ../db/crdel_auto.c /^__crdel_inmem_create_read(dbenv, recbuf, argpp)$/
+__crdel_inmem_create_recover ../db/crdel_rec.c /^__crdel_inmem_create_recover(dbenv, dbtp, lsnp, op/
+__crdel_inmem_remove_log ../db/crdel_auto.c /^__crdel_inmem_remove_log(dbenv, txnp, ret_lsnp, fl/
+__crdel_inmem_remove_print ../db/crdel_autop.c /^__crdel_inmem_remove_print(dbenv, dbtp, lsnp, notu/
+__crdel_inmem_remove_read ../db/crdel_auto.c /^__crdel_inmem_remove_read(dbenv, recbuf, argpp)$/
+__crdel_inmem_remove_recover ../db/crdel_rec.c /^__crdel_inmem_remove_recover(dbenv, dbtp, lsnp, op/
+__crdel_inmem_rename_log ../db/crdel_auto.c /^__crdel_inmem_rename_log(dbenv, txnp, ret_lsnp, fl/
+__crdel_inmem_rename_print ../db/crdel_autop.c /^__crdel_inmem_rename_print(dbenv, dbtp, lsnp, notu/
+__crdel_inmem_rename_read ../db/crdel_auto.c /^__crdel_inmem_rename_read(dbenv, recbuf, argpp)$/
+__crdel_inmem_rename_recover ../db/crdel_rec.c /^__crdel_inmem_rename_recover(dbenv, dbtp, lsnp, op/
+__crdel_metasub_log ../db/crdel_auto.c /^__crdel_metasub_log(dbp, txnp, ret_lsnp, flags, pg/
__crdel_metasub_print ../db/crdel_autop.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/
@@ -2245,6 +2430,9 @@ __crypto_decrypt_meta ../crypto/crypto.c /^__crypto_decrypt_meta(dbenv, dbp, mbu
__crypto_region_destroy ../crypto/crypto.c /^__crypto_region_destroy(dbenv)$/
__crypto_region_init ../crypto/crypto.c /^__crypto_region_init(dbenv)$/
__crypto_set_passwd ../crypto/crypto.c /^__crypto_set_passwd(dbenv_src, dbenv_dest)$/
+__cursor ../dbinc/btree.h /^struct __cursor {$/
+__data ../env/db_salloc.c /^struct __data {$/
+__db ../dbinc/db.in /^struct __db {$/
__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)$/
@@ -2252,30 +2440,30 @@ __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_limbo ../db/db_dispatch.c /^__db_add_limbo(dbenv, hp, fileid, pgno, count)$/
__db_add_recovery ../db/db_dispatch.c /^__db_add_recovery(dbenv, dtab, dtabsize, func, ndx/
-__db_addrem_log ../db/db_auto.c /^__db_addrem_log(dbp, txnid, ret_lsnp, flags,$/
+__db_addrem_log ../db/db_auto.c /^__db_addrem_log(dbp, txnp, ret_lsnp, flags,$/
__db_addrem_print ../db/db_autop.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_allocinfo ../os/os_alloc.c /^union __db_allocinfo {$/
__db_append_primary ../db/db_am.c /^__db_append_primary(dbc, key, data)$/
__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_assert ../common/db_err.c /^__db_assert(dbenv, e, file, line)$/
__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_log ../db/db_auto.c /^__db_big_log(dbp, txnid, ret_lsnp, flags,$/
+__db_big_log ../db/db_auto.c /^__db_big_log(dbp, txnp, ret_lsnp, flags,$/
__db_big_print ../db/db_autop.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, h, flags)$/
-__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_bt_stat ../dbinc/db.in /^struct __db_bt_stat {$/
__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)$/
@@ -2288,6 +2476,7 @@ __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_oldskey ../db/db_cam.c /^__db_c_del_oldskey(sdbp, dbc_arg, skey, pkey, oldd/
__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)$/
@@ -2307,14 +2496,15 @@ __db_c_put ../db/db_cam.c /^__db_c_put(dbc_arg, key, data, flags)$/
__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_chksum ../hmac/hmac.c /^__db_check_chksum(dbenv, hdr, db_cipher, chksum, d/
__db_check_lsn ../common/db_err.c /^__db_check_lsn(dbenv, lsn, prev)$/
__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_chksum ../hmac/hmac.c /^__db_chksum(hdr, data, data_len, mac_key, store)$/
+__db_cipher ../dbinc/crypto.h /^struct __db_cipher {$/
__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_log ../db/db_auto.c /^__db_cksum_log(dbenv, txnid, ret_lsnp, flags)$/
+__db_cksum_log ../db/db_auto.c /^__db_cksum_log(dbenv, txnp, ret_lsnp, flags)$/
__db_cksum_print ../db/db_autop.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)$/
@@ -2322,7 +2512,11 @@ __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_commit ../dbinc/log.h /^struct __db_commit {$/
+__db_compact ../dbinc/db.in /^struct __db_compact {$/
+__db_compact_pp ../db/db_iface.c /^__db_compact_pp(dbp, txn, start, stop, c_data, fla/
__db_create_proc ../rpc_server/c/db_server_proc.c /^__db_create_proc(dbenvcl_id, flags, replyp)$/
+__db_ctime ../clib/ctime.c /^__db_ctime(tod, time_buf)$/
__db_curinval ../db/db_iface.c /^__db_curinval(dbenv)$/
__db_cursor ../db/db_iface.c /^__db_cursor(dbp, txn, dbcp, flags)$/
__db_cursor_arg ../db/db_iface.c /^__db_cursor_arg(dbp, flags)$/
@@ -2330,56 +2524,55 @@ __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, flags, reply/
-__db_db_associate_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_associate_4003__SVCSUFFIX__(msg, req)$/
-__db_db_bt_maxkey_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_bt_maxkey_4003__SVCSUFFIX__(msg, req)$/
-__db_db_bt_minkey_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_bt_minkey_4003__SVCSUFFIX__(msg, req)$/
-__db_db_close_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_close_4003__SVCSUFFIX__(msg, req)$/
-__db_db_create_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_create_4003__SVCSUFFIX__(msg, req)$/
-__db_db_cursor_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_cursor_4003__SVCSUFFIX__(msg, req)$/
-__db_db_del_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_del_4003__SVCSUFFIX__(msg, req)$/
-__db_db_encrypt_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_encrypt_4003__SVCSUFFIX__(msg, req)$/
-__db_db_extentsize_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_extentsize_4003__SVCSUFFIX__(msg, req)$/
-__db_db_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_flags_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_bt_minkey_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_bt_minkey_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_encrypt_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_encrypt_flags_4003__SVCSUFFIX__(msg, r/
-__db_db_get_extentsize_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_extentsize_4003__SVCSUFFIX__(msg, req)/
-__db_db_get_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_flags_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_h_ffactor_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_h_ffactor_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_h_nelem_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_h_nelem_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_lorder_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_lorder_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_name_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_name_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_open_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_open_flags_4003__SVCSUFFIX__(msg, req)/
-__db_db_get_pagesize_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_pagesize_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_re_delim_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_re_delim_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_re_len_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_re_len_4003__SVCSUFFIX__(msg, req)$/
-__db_db_get_re_pad_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_re_pad_4003__SVCSUFFIX__(msg, req)$/
-__db_db_h_ffactor_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_h_ffactor_4003__SVCSUFFIX__(msg, req)$/
-__db_db_h_nelem_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_h_nelem_4003__SVCSUFFIX__(msg, req)$/
-__db_db_join_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_join_4003__SVCSUFFIX__(msg, req)$/
-__db_db_key_range_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_key_range_4003__SVCSUFFIX__(msg, req)$/
-__db_db_lorder_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_lorder_4003__SVCSUFFIX__(msg, req)$/
-__db_db_open_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_open_4003__SVCSUFFIX__(msg, req)$/
-__db_db_pagesize_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_pagesize_4003__SVCSUFFIX__(msg, req)$/
-__db_db_pget_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_pget_4003__SVCSUFFIX__(msg, req)$/
-__db_db_put_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_put_4003__SVCSUFFIX__(msg, req)$/
-__db_db_re_delim_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_re_delim_4003__SVCSUFFIX__(msg, req)$/
-__db_db_re_len_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_re_len_4003__SVCSUFFIX__(msg, req)$/
-__db_db_re_pad_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_re_pad_4003__SVCSUFFIX__(msg, req)$/
-__db_db_remove_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_remove_4003__SVCSUFFIX__(msg, req)$/
-__db_db_rename_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_rename_4003__SVCSUFFIX__(msg, req)$/
-__db_db_stat_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_stat_4003__SVCSUFFIX__(msg, req)$/
-__db_db_sync_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_sync_4003__SVCSUFFIX__(msg, req)$/
-__db_db_truncate_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_truncate_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_close_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_close_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_count_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_count_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_del_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_del_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_dup_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_dup_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_get_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_get_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_pget_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_pget_4003__SVCSUFFIX__(msg, req)$/
-__db_dbc_put_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_put_4003__SVCSUFFIX__(msg, req)$/
+__db_db_associate_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_associate_4005__SVCSUFFIX__(msg, req)$/
+__db_db_close_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_close_4005__SVCSUFFIX__(msg, req)$/
+__db_db_create_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_create_4005__SVCSUFFIX__(msg, req)$/
+__db_db_cursor_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_cursor_4005__SVCSUFFIX__(msg, req)$/
+__db_db_del_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_del_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_bt_minkey_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_bt_minkey_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_dbname_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_dbname_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_encrypt_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_encrypt_flags_4005__SVCSUFFIX__(msg, r/
+__db_db_get_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_flags_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_h_ffactor_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_h_ffactor_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_h_nelem_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_h_nelem_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_lorder_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_lorder_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_open_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_open_flags_4005__SVCSUFFIX__(msg, req)/
+__db_db_get_pagesize_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_pagesize_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_q_extentsize_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_q_extentsize_4005__SVCSUFFIX__(msg, re/
+__db_db_get_re_delim_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_re_delim_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_re_len_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_re_len_4005__SVCSUFFIX__(msg, req)$/
+__db_db_get_re_pad_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_get_re_pad_4005__SVCSUFFIX__(msg, req)$/
+__db_db_join_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_join_4005__SVCSUFFIX__(msg, req)$/
+__db_db_key_range_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_key_range_4005__SVCSUFFIX__(msg, req)$/
+__db_db_open_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_open_4005__SVCSUFFIX__(msg, req)$/
+__db_db_pget_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_pget_4005__SVCSUFFIX__(msg, req)$/
+__db_db_put_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_put_4005__SVCSUFFIX__(msg, req)$/
+__db_db_remove_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_remove_4005__SVCSUFFIX__(msg, req)$/
+__db_db_rename_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_rename_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_bt_minkey_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_bt_minkey_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_encrypt_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_encrypt_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_flags_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_h_ffactor_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_h_ffactor_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_h_nelem_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_h_nelem_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_lorder_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_lorder_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_pagesize_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_pagesize_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_q_extentsize_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_q_extentsize_4005__SVCSUFFIX__(msg, re/
+__db_db_set_re_delim_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_re_delim_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_re_len_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_re_len_4005__SVCSUFFIX__(msg, req)$/
+__db_db_set_re_pad_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_set_re_pad_4005__SVCSUFFIX__(msg, req)$/
+__db_db_stat_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_stat_4005__SVCSUFFIX__(msg, req)$/
+__db_db_sync_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_sync_4005__SVCSUFFIX__(msg, req)$/
+__db_db_truncate_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_db_truncate_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_close_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_close_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_count_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_count_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_del_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_del_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_dup_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_dup_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_get_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_get_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_pget_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_pget_4005__SVCSUFFIX__(msg, req)$/
+__db_dbc_c_put_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_dbc_c_put_4005__SVCSUFFIX__(msg, req)$/
__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_dbenv_setup ../db/db.c /^__db_dbenv_setup(dbp, txn, fname, dname, 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)$/
@@ -2387,19 +2580,21 @@ __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_dbtxn_remove ../db/db_remove.c /^__db_dbtxn_remove(dbp, txn, name)$/
+__db_dbt ../dbinc/db.in /^struct __db_dbt {$/
+__db_dbtxn_remove ../db/db_remove.c /^__db_dbtxn_remove(dbp, txn, name, subdb)$/
__db_dbtype_to_string ../db/db_pr.c /^__db_dbtype_to_string(type)$/
-__db_debug_log ../db/db_auto.c /^__db_debug_log(dbenv, txnid, ret_lsnp, flags,$/
+__db_debug_log ../db/db_auto.c /^__db_debug_log(dbenv, txnp, ret_lsnp, flags,$/
__db_debug_print ../db/db_autop.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 ../db/db_am.c /^__db_del(dbp, txn, key, flags)$/
-__db_del_arg ../db/db_iface.c /^__db_del_arg(dbp, flags)$/
+__db_del_arg ../db/db_iface.c /^__db_del_arg(dbp, key, 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, keydof/
__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_destroy ../env/env_region.c /^__db_des_destroy(dbenv, rp)$/
__db_des_get ../env/env_region.c /^__db_des_get(dbenv, env_infop, infop, rpp)$/
+__db_difftime ../common/db_clock.c /^__db_difftime(ssec, esec, susec, eusec, secp, usec/
__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)$/
@@ -2410,46 +2605,57 @@ __db_do_the_limbo ../db/db_dispatch.c /^__db_do_the_limbo(dbenv, ptxn, txn, hp,
__db_doff ../db/db_overflow.c /^__db_doff(dbc, pgno)$/
__db_dump ../db/db_pr.c /^__db_dump(dbp, subname, callback, handle, pflag, k/
__db_dump_pp ../db/db_pr.c /^__db_dump_pp(dbp, subname, callback, handle, pflag/
-__db_dumptree ../db/db_pr.c /^__db_dumptree(dbp, op, name)$/
+__db_dumptree ../db/db_pr.c /^__db_dumptree(dbp, txn, 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_golive ../env/env_region.c /^__db_e_golive(dbenv)$/
__db_e_remfile ../env/env_region.c /^__db_e_remfile(dbenv)$/
__db_e_remove ../env/env_region.c /^__db_e_remove(dbenv, flags)$/
-__db_encrypt_proc ../rpc_server/c/db_server_proc.c /^__db_encrypt_proc(dbpcl_id, passwd, flags, replyp)/
-__db_env_cachesize_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_cachesize_4003__SVCSUFFIX__(msg, req)$/
-__db_env_close_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_close_4003__SVCSUFFIX__(msg, req)$/
+__db_env ../dbinc/db.in /^struct __db_env {$/
+__db_env_cdsgroup_begin_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_cdsgroup_begin_4005__SVCSUFFIX__(msg, req/
+__db_env_close_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_close_4005__SVCSUFFIX__(msg, req)$/
__db_env_config ../env/env_method.c /^__db_env_config(dbenv, i, flags)$/
-__db_env_create_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_create_4003__SVCSUFFIX__(msg, req)$/
-__db_env_dbremove_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_dbremove_4003__SVCSUFFIX__(msg, req)$/
-__db_env_dbrename_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_dbrename_4003__SVCSUFFIX__(msg, req)$/
-__db_env_encrypt_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_encrypt_4003__SVCSUFFIX__(msg, req)$/
-__db_env_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_flags_4003__SVCSUFFIX__(msg, req)$/
-__db_env_get_cachesize_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_cachesize_4003__SVCSUFFIX__(msg, req)/
-__db_env_get_encrypt_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_encrypt_flags_4003__SVCSUFFIX__(msg, /
-__db_env_get_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_flags_4003__SVCSUFFIX__(msg, req)$/
-__db_env_get_home_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_home_4003__SVCSUFFIX__(msg, req)$/
-__db_env_get_open_flags_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_open_flags_4003__SVCSUFFIX__(msg, req/
-__db_env_open_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_open_4003__SVCSUFFIX__(msg, req)$/
-__db_env_remove_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_remove_4003__SVCSUFFIX__(msg, req)$/
-__db_err ../common/db_err.c /^__db_err(const DB_ENV *dbenv, const char *fmt, .../
+__db_env_create_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_create_4005__SVCSUFFIX__(msg, req)$/
+__db_env_dbremove_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_dbremove_4005__SVCSUFFIX__(msg, req)$/
+__db_env_dbrename_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_dbrename_4005__SVCSUFFIX__(msg, req)$/
+__db_env_destroy ../env/env_method.c /^__db_env_destroy(dbenv)$/
+__db_env_get_cachesize_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_cachesize_4005__SVCSUFFIX__(msg, req)/
+__db_env_get_encrypt_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_encrypt_flags_4005__SVCSUFFIX__(msg, /
+__db_env_get_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_flags_4005__SVCSUFFIX__(msg, req)$/
+__db_env_get_home_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_home_4005__SVCSUFFIX__(msg, req)$/
+__db_env_get_open_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_get_open_flags_4005__SVCSUFFIX__(msg, req/
+__db_env_open_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_open_4005__SVCSUFFIX__(msg, req)$/
+__db_env_remove_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_remove_4005__SVCSUFFIX__(msg, req)$/
+__db_env_set_cachesize_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_set_cachesize_4005__SVCSUFFIX__(msg, req)/
+__db_env_set_encrypt_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_set_encrypt_4005__SVCSUFFIX__(msg, req)$/
+__db_env_set_flags_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_set_flags_4005__SVCSUFFIX__(msg, req)$/
+__db_env_txn_begin_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_txn_begin_4005__SVCSUFFIX__(msg, req)$/
+__db_env_txn_recover_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_env_txn_recover_4005__SVCSUFFIX__(msg, req)$/
+__db_err ../common/db_err.c /^__db_err(dbenv, error fmt, va_alist)$/
__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/c/db_server_proc.c /^__db_extentsize_proc(dbpcl_id, extentsize, replyp)/
+__db_errx ../common/db_err.c /^__db_errx(dbenv, fmt, va_alist)$/
+__db_failed ../common/db_err.c /^__db_failed(dbenv, msg, pid, tid)$/
__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)$/
-__db_fcntl_mutex_unlock ../mutex/mut_fcntl.c /^__db_fcntl_mutex_unlock(dbenv, mutexp)$/
+__db_fcntl_mutex_destroy ../mutex/mut_fcntl.c /^__db_fcntl_mutex_destroy(dbenv, mutex)$/
+__db_fcntl_mutex_init ../mutex/mut_fcntl.c /^__db_fcntl_mutex_init(dbenv, mutex, flags)$/
+__db_fcntl_mutex_lock ../mutex/mut_fcntl.c /^__db_fcntl_mutex_lock(dbenv, mutex)$/
+__db_fcntl_mutex_unlock ../mutex/mut_fcntl.c /^__db_fcntl_mutex_unlock(dbenv, mutex)$/
__db_fd_pp ../db/db_iface.c /^__db_fd_pp(dbp, fdp)$/
__db_ferr ../common/db_err.c /^__db_ferr(dbenv, name, iscombo)$/
-__db_fileid_reset ../db/db_setid.c /^__db_fileid_reset(dbenv, name, passwd)$/
-__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_file_extend ../env/env_file.c /^__db_file_extend(dbenv, fhp, size)$/
+__db_file_multi_write ../env/env_file.c /^__db_file_multi_write(dbenv, path)$/
+__db_file_write ../env/env_file.c /^__db_file_write(dbenv, fhp, mbytes, bytes, pattern/
+__db_filestart ../dbinc/log.h /^struct __db_filestart {$/
__db_fnl ../common/db_err.c /^__db_fnl(dbenv, name)$/
__db_free ../db/db_meta.c /^__db_free(dbc, h)$/
+__db_free_truncate ../db/db_meta.c /^__db_free_truncate(dbp, txn, flags, c_data, listp,/
+__db_freeaddrinfo ../clib/getaddrinfo.c /^__db_freeaddrinfo(dbenv, ai)$/
+__db_freelist_pos ../db/db_meta.c /^__db_freelist_pos(pgno, list, nelem, posp)$/
+__db_freelist_sort ../db/db_meta.c /^__db_freelist_sort(list, nelems)$/
__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)$/
@@ -2458,12 +2664,12 @@ __db_get_bt_minkey_proc ../rpc_server/c/db_server_proc.c /^__db_get_bt_minkey_pr
__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_dbname ../db/db_method.c /^__db_get_dbname(dbp, fnamep, dnamep)$/
+__db_get_dbname_proc ../rpc_server/c/db_server_proc.c /^__db_get_dbname_proc(dbpcl_id, replyp)$/
__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)$/
__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_flags ../db/db_method.c /^__db_get_flags(dbp, flagsp)$/
__db_get_flags_fn ../db/db_pr.c /^__db_get_flags_fn()$/
__db_get_flags_proc ../rpc_server/c/db_server_proc.c /^__db_get_flags_proc(dbpcl_id, replyp)$/
@@ -2471,41 +2677,43 @@ __db_get_h_ffactor_proc ../rpc_server/c/db_server_proc.c /^__db_get_h_ffactor_pr
__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 ../db/db_method.c /^__db_get_mpf(dbp)$/
__db_get_msgfile ../db/db_method.c /^__db_get_msgfile(dbp, msgfilep)$/
-__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, keydof/
+__db_get_q_extentsize_proc ../rpc_server/c/db_server_proc.c /^__db_get_q_extentsize_proc(dbpcl_id, replyp)$/
__db_get_re_delim_proc ../rpc_server/c/db_server_proc.c /^__db_get_re_delim_proc(dbpcl_id, replyp)$/
__db_get_re_len_proc ../rpc_server/c/db_server_proc.c /^__db_get_re_len_proc(dbpcl_id, replyp)$/
__db_get_re_pad_proc ../rpc_server/c/db_server_proc.c /^__db_get_re_pad_proc(dbpcl_id, replyp)$/
__db_get_seq_flags_fn ../sequence/seq_stat.c /^__db_get_seq_flags_fn()$/
__db_get_transactional ../db/db_method.c /^__db_get_transactional(dbp)$/
__db_get_type ../db/db_method.c /^__db_get_type(dbp, dbtype)$/
+__db_getaddrinfo ../clib/getaddrinfo.c /^__db_getaddrinfo(dbenv, nodename, port, servname, /
__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_goff ../db/db_overflow.c /^__db_goff(dbp, txn, dbt, tlen, pgno, bpp, bpsz)$/
__db_guesspgsize ../db/db_vrfy.c /^__db_guesspgsize(dbenv, fhp)$/
-__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_h_stat ../dbinc/db.in /^struct __db_h_stat {$/
__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, h, flags)$/
-__db_home ../env/env_open.c /^__db_home(dbenv, db_home, flags)$/
__db_hsearch ../hsearch/hsearch.c /^__db_hsearch(item, action)$/
__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_ilock ../dbinc/db.in /^struct __db_ilock {$/
+__db_infohead ../dbinc/tcl_db.h /^#define __db_infohead __dbtcl_global.g_infohead$/
+__db_init ../db/db_method.c /^__db_init(dbenv, dbp, flags)$/
__db_init_meta ../db/db_meta.c /^__db_init_meta(dbp, p, pgno, pgtype)$/
__db_init_print ../db/db_autop.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_inmem_remove ../db/db_remove.c /^__db_inmem_remove(dbp, txn, name)$/
__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()$/
@@ -2530,24 +2738,30 @@ __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_lk_conflicts ../libdb_java/db_java_wrap.c /^struct __db_lk_conflicts {$/
__db_loadme ../db/db_pr.c /^__db_loadme()$/
+__db_lock ../dbinc/lock.h /^struct __db_lock {$/
__db_lock_move ../db/db_dispatch.c /^__db_lock_move(dbenv, fileid, pgno, mode, ptxn, tx/
+__db_lock_stat ../dbinc/db.in /^struct __db_lock_stat {$/
+__db_lock_u ../dbinc/db.in /^struct __db_lock_u {$/
__db_lockmode_to_string ../db/db_pr.c /^__db_lockmode_to_string(mode)$/
+__db_lockreq ../dbinc/db.in /^struct __db_lockreq {$/
+__db_locktab ../dbinc/lock.h /^struct __db_locktab {$/
+__db_log ../dbinc/log.h /^struct __db_log {$/
__db_log2 ../common/db_log2.c /^__db_log2(num)$/
__db_log_corrupt ../env/env_recover.c /^__db_log_corrupt(dbenv, lsnp)$/
+__db_log_cursor ../dbinc/db.in /^struct __db_log_cursor {$/
__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_log_stat ../dbinc/db.in /^struct __db_log_stat {$/
__db_lprint ../db/db_meta.c /^__db_lprint(dbc)$/
__db_lput ../db/db_meta.c /^__db_lput(dbc, lockp)$/
__db_lsgenrand ../crypto/mersenne/mt19937db.c /^__db_lsgenrand(seed_array, mt, mtip)$/
-__db_lsn_reset ../db/db_setlsn.c /^__db_lsn_reset(dbenv, name, passwd)$/
-__db_maintinit ../dbinc/mutex.h /^#define __db_maintinit(a, b, c) __db_shreg_mainti/
+__db_lsn ../dbinc/db.in /^struct __db_lsn {$/
__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, dbenv)$/
-__db_map_xid ../xa/xa_map.c /^__db_map_xid(dbenv, xid, off)$/
+__db_map_xid ../xa/xa_map.c /^__db_map_xid(dbenv, xid, td)$/
__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, fn, flags)$/
@@ -2556,20 +2770,21 @@ __db_meta_setup ../db/db_open.c /^__db_meta_setup(dbenv, dbp, name, meta, oflags
__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_moff ../db/db_overflow.c /^__db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)$/
-__db_msg ../common/db_err.c /^__db_msg(const DB_ENV *dbenv, const char *fmt, .../
-__db_msgadd ../common/db_err.c /^__db_msgadd(DB_ENV *dbenv, DB_MSGBUF *mbp, const c/
+__db_mkpath ../common/mkpath.c /^__db_mkpath(dbenv, name)$/
+__db_moff ../db/db_overflow.c /^__db_moff(dbp, txn, dbt, pgno, tlen, cmpfunc, cmpp/
+__db_mpool ../dbinc/mp.h /^struct __db_mpool {$/
+__db_mpool_fstat ../dbinc/db.in /^struct __db_mpool_fstat {$/
+__db_mpool_hash ../dbinc/mp.h /^struct __db_mpool_hash {$/
+__db_mpool_stat ../dbinc/db.in /^struct __db_mpool_stat {$/
+__db_mpoolfile ../dbinc/db.in /^struct __db_mpoolfile {$/
+__db_mpreg ../dbinc/mp.h /^struct __db_mpreg {$/
+__db_msg ../common/db_err.c /^__db_msg(dbenv, fmt, va_alist)$/
+__db_msgadd ../common/db_err.c /^__db_msgadd(dbenv, mbp, fmt, va_alist)$/
__db_msgcall ../common/db_err.c /^__db_msgcall(dbenv, fmt, ap)$/
__db_msgfile ../common/db_err.c /^__db_msgfile(dbenv, fmt, ap)$/
-__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 ../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_mutex_stat ../dbinc/db.in /^struct __db_mutex_stat {$/
+__db_mutex_t ../dbinc/mutex_int.h /^struct __db_mutex_t { \/* Mutex. *\/$/
+__db_mutexmgr ../dbinc/mutex_int.h /^struct __db_mutexmgr {$/
__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)$/
@@ -2585,11 +2800,11 @@ __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(dbp, txnid, ret_lsnp, flags, pgno, p/
+__db_noop_log ../db/db_auto.c /^__db_noop_log(dbp, txnp, ret_lsnp, flags, pgno, pr/
__db_noop_print ../db/db_autop.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_norepmgr ../env/env_method.c /^__db_norepmgr(dbenv)$/
__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)$/
@@ -2597,47 +2812,60 @@ __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, subdb, t/
-__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(dbp, txnid, ret_lsnp, flags, pgno, /
+__db_out_stream ../libdb_java/db_java_wrap.c /^struct __db_out_stream {$/
+__db_ovref ../db/db_overflow.c /^__db_ovref(dbc, pgno)$/
+__db_ovref_log ../db/db_auto.c /^__db_ovref_log(dbp, txnp, ret_lsnp, flags, pgno, a/
__db_ovref_print ../db/db_autop.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/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_panic_set ../common/db_err.c /^__db_panic_set(dbenv, on)$/
__db_partsize ../db/db_cam.c /^__db_partsize(nbytes, data)$/
-__db_pg_alloc_log ../db/db_auto.c /^__db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, met/
+__db_pg_alloc_42_print ../db/db_autop.c /^__db_pg_alloc_42_print(dbenv, dbtp, lsnp, notused2/
+__db_pg_alloc_42_read ../db/db_auto.c /^__db_pg_alloc_42_read(dbenv, recbuf, argpp)$/
+__db_pg_alloc_42_recover ../db/db_rec.c /^__db_pg_alloc_42_recover(dbenv, dbtp, lsnp, op, in/
+__db_pg_alloc_log ../db/db_auto.c /^__db_pg_alloc_log(dbp, txnp, ret_lsnp, flags, meta/
__db_pg_alloc_print ../db/db_autop.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_log ../db/db_auto.c /^__db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno/
+__db_pg_free_42_print ../db/db_autop.c /^__db_pg_free_42_print(dbenv, dbtp, lsnp, notused2,/
+__db_pg_free_42_read ../db/db_auto.c /^__db_pg_free_42_read(dbenv, recbuf, argpp)$/
+__db_pg_free_42_recover ../db/db_rec.c /^__db_pg_free_42_recover(dbenv, dbtp, lsnp, op, inf/
+__db_pg_free_log ../db/db_auto.c /^__db_pg_free_log(dbp, txnp, ret_lsnp, flags, pgno,/
__db_pg_free_print ../db/db_autop.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_42_int ../db/db_rec.c /^__db_pg_free_recover_42_int(dbenv, argp, file_dbp,/
__db_pg_free_recover_int ../db/db_rec.c /^__db_pg_free_recover_int(dbenv, argp, file_dbp, ls/
-__db_pg_freedata_log ../db/db_auto.c /^__db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, /
+__db_pg_freedata_42_print ../db/db_autop.c /^__db_pg_freedata_42_print(dbenv, dbtp, lsnp, notus/
+__db_pg_freedata_42_read ../db/db_auto.c /^__db_pg_freedata_42_read(dbenv, recbuf, argpp)$/
+__db_pg_freedata_42_recover ../db/db_rec.c /^__db_pg_freedata_42_recover(dbenv, dbtp, lsnp, op,/
+__db_pg_freedata_log ../db/db_auto.c /^__db_pg_freedata_log(dbp, txnp, ret_lsnp, flags, p/
__db_pg_freedata_print ../db/db_autop.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_init_log ../db/db_auto.c /^__db_pg_init_log(dbp, txnid, ret_lsnp, flags, pgno/
+__db_pg_init_log ../db/db_auto.c /^__db_pg_init_log(dbp, txnp, ret_lsnp, flags, pgno,/
__db_pg_init_print ../db/db_autop.c /^__db_pg_init_print(dbenv, dbtp, lsnp, notused2, no/
__db_pg_init_read ../db/db_auto.c /^__db_pg_init_read(dbenv, recbuf, argpp)$/
__db_pg_init_recover ../db/db_rec.c /^__db_pg_init_recover(dbenv, dbtp, lsnp, op, info)$/
-__db_pg_new_log ../db/db_auto.c /^__db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno,/
+__db_pg_new_log ../db/db_auto.c /^__db_pg_new_log(dbp, txnp, ret_lsnp, flags, pgno, /
__db_pg_new_print ../db/db_autop.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_log ../db/db_auto.c /^__db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, p/
+__db_pg_prepare_log ../db/db_auto.c /^__db_pg_prepare_log(dbp, txnp, ret_lsnp, flags, pg/
__db_pg_prepare_print ../db/db_autop.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_pg_sort_log ../db/db_auto.c /^__db_pg_sort_log(dbp, txnp, ret_lsnp, flags, meta,/
+__db_pg_sort_print ../db/db_autop.c /^__db_pg_sort_print(dbenv, dbtp, lsnp, notused2, no/
+__db_pg_sort_read ../db/db_auto.c /^__db_pg_sort_read(dbenv, recbuf, argpp)$/
+__db_pg_sort_recover ../db/db_rec.c /^__db_pg_sort_recover(dbenv, dbtp, lsnp, op, info)$/
+__db_pg_truncate ../db/db_meta.c /^__db_pg_truncate(mpf, txn, list, c_data, nelemp, l/
__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_arg ../db/db_iface.c /^__db_pget_arg(dbp, pkey, flags)$/
@@ -2645,6 +2873,7 @@ __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, skey/
__db_pgfmt ../common/db_err.c /^__db_pgfmt(dbenv, pgno)$/
__db_pgin ../db/db_conv.c /^__db_pgin(dbenv, pg, pp, cookie)$/
+__db_pglistcmp ../db/db_meta.c /^__db_pglistcmp(a, b)$/
__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)$/
@@ -2652,42 +2881,43 @@ __db_pr ../db/db_pr.c /^__db_pr(dbenv, mbp, p, len)$/
__db_pr_callback ../db/db_pr.c /^__db_pr_callback(handle, str_arg)$/
__db_prdb ../db/db_pr.c /^__db_prdb(dbp, flags)$/
__db_prdbt ../db/db_pr.c /^__db_prdbt(dbtp, checkprint, prefix, handle, callb/
+__db_preplist ../dbinc/db.in /^struct __db_preplist {$/
__db_prflags ../db/db_pr.c /^__db_prflags(dbenv, mbp, flags, fn, prefix, suffix/
__db_prfooter ../db/db_pr.c /^__db_prfooter(handle, callback)$/
__db_prheader ../db/db_pr.c /^__db_prheader(dbp, subname, pflag, keyflag, handle/
__db_print_all ../db/db_stati.c /^__db_print_all(dbp, flags)$/
__db_print_citem ../db/db_stati.c /^int __db_print_citem(dbc)$/
__db_print_cursor ../db/db_stati.c /^__db_print_cursor(dbp)$/
-__db_print_fh ../env/env_stat.c /^__db_print_fh(dbenv, fh, flags)$/
+__db_print_fh ../env/env_stat.c /^__db_print_fh(dbenv, tag, fh, flags)$/
__db_print_fileid ../env/env_stat.c /^__db_print_fileid(dbenv, id, suffix)$/
-__db_print_mutex ../env/env_stat.c /^__db_print_mutex(dbenv, mbp, mutex, suffix, flags)/
__db_print_reginfo ../env/env_stat.c /^__db_print_reginfo(dbenv, infop, s)$/
__db_print_stats ../db/db_stati.c /^__db_print_stats(dbp, flags)$/
-__db_prnpage ../db/db_pr.c /^__db_prnpage(dbp, pgno)$/
+__db_prnpage ../db/db_pr.c /^__db_prnpage(dbp, txn, pgno)$/
__db_proff ../db/db_pr.c /^__db_proff(dbenv, mbp, 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_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_prtree ../db/db_pr.c /^__db_prtree(dbp, txn, flags)$/
+__db_pthread_mutex_destroy ../mutex/mut_pthread.c /^__db_pthread_mutex_destroy(dbenv, mutex)$/
+__db_pthread_mutex_init ../mutex/mut_pthread.c /^__db_pthread_mutex_init(dbenv, mutex, flags)$/
+__db_pthread_mutex_lock ../mutex/mut_pthread.c /^__db_pthread_mutex_lock(dbenv, mutex)$/
+__db_pthread_mutex_unlock ../mutex/mut_pthread.c /^__db_pthread_mutex_unlock(dbenv, mutex)$/
__db_put ../db/db_am.c /^__db_put(dbp, txn, key, data, flags)$/
__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, keydof/
+__db_qam_stat ../dbinc/db.in /^struct __db_qam_stat {$/
__db_qmeta ../db/db_pr.c /^__db_qmeta(dbp, 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/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_rdonly ../common/db_err.c /^__db_rdonly(dbenv, name)$/
__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, txn, flags, deferred_closep)$/
-__db_region_destroy ../env/env_region.c /^__db_region_destroy(dbenv, infop)$/
+__db_refresh ../db/db.c /^__db_refresh(dbp, txn, flags, deferred_closep, reu/
+__db_reginfo_t ../dbinc/region.h /^struct __db_reginfo_t { \/* __db_r_attach IN para/
+__db_relink_42_print ../db/db_autop.c /^__db_relink_42_print(dbenv, dbtp, lsnp, notused2, /
+__db_relink_42_read ../db/db_auto.c /^__db_relink_42_read(dbenv, recbuf, argpp)$/
+__db_relink_42_recover ../db/db_rec.c /^__db_relink_42_recover(dbenv, dbtp, lsnp, op, info/
__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)$/
@@ -2696,8 +2926,12 @@ __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, newname, f/
+__db_rep ../dbinc/rep.h /^struct __db_rep {$/
__db_rep_enter ../rep/rep_util.c /^__db_rep_enter(dbp, checkgen, checklock, return_no/
-__db_ret ../db/db_ret.c /^__db_ret(dbp, h, indx, dbt, memp, memsize)$/
+__db_rep_stat ../dbinc/db.in /^struct __db_rep_stat {$/
+__db_repmgr_site ../dbinc/db.in /^struct __db_repmgr_site {$/
+__db_repmgr_sites ../libdb_java/db_java_wrap.c /^struct __db_repmgr_sites {$/
+__db_ret ../db/db_ret.c /^__db_ret(dbp, txn, h, indx, dbt, 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)$/
@@ -2707,14 +2941,15 @@ __db_rijndaelKeySetupDec ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelKe
__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, dbenvp)$/
__db_rpath ../os/os_rpath.c /^__db_rpath(path)$/
+__db_s_count ../db/db_cam.c /^__db_s_count(pdbp)$/
__db_s_done ../db/db_cam.c /^__db_s_done(sdbp)$/
-__db_s_first ../db/db_cam.c /^__db_s_first(pdbp)$/
+__db_s_first ../db/db_cam.c /^__db_s_first(pdbp, sdbpp)$/
__db_s_next ../db/db_cam.c /^__db_s_next(sdbpp)$/
__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, /
-__db_salvage_getnext ../db/db_vrfyutil.c /^__db_salvage_getnext(vdp, pgnop, pgtypep)$/
+__db_salvage_getnext ../db/db_vrfyutil.c /^__db_salvage_getnext(vdp, dbcp, pgnop, pgtypep, sk/
__db_salvage_init ../db/db_vrfyutil.c /^__db_salvage_init(vdp)$/
__db_salvage_isdone ../db/db_vrfyutil.c /^__db_salvage_isdone(vdp, pgno)$/
__db_salvage_markdone ../db/db_vrfyutil.c /^__db_salvage_markdone(vdp, pgno)$/
@@ -2726,35 +2961,43 @@ __db_secondary_close ../db/db_am.c /^__db_secondary_close(sdbp, flags)$/
__db_secondary_close_pp ../db/db_iface.c /^__db_secondary_close_pp(dbp, 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_seq_record ../dbinc/db.in /^struct __db_seq_record {$/
+__db_seq_stat ../dbinc/db.in /^struct __db_seq_stat {$/
+__db_sequence ../dbinc/db.in /^struct __db_sequence {$/
__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_minkey_proc ../rpc_server/c/db_server_proc.c /^__db_set_bt_minkey_proc(dbpcl_id, minkey, replyp)$/
__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_encrypt_proc ../rpc_server/c/db_server_proc.c /^__db_set_encrypt_proc(dbpcl_id, passwd, flags, rep/
__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_flags_proc ../rpc_server/c/db_server_proc.c /^__db_set_flags_proc(dbpcl_id, flags, replyp)$/
+__db_set_h_ffactor_proc ../rpc_server/c/db_server_proc.c /^__db_set_h_ffactor_proc(dbpcl_id, ffactor, replyp)/
+__db_set_h_nelem_proc ../rpc_server/c/db_server_proc.c /^__db_set_h_nelem_proc(dbpcl_id, nelem, replyp)$/
+__db_set_lastpgno ../db/db_upg.c /^__db_set_lastpgno(dbp, real_name, fhp)$/
__db_set_lorder ../db/db_method.c /^__db_set_lorder(dbp, db_lorder)$/
+__db_set_lorder_proc ../rpc_server/c/db_server_proc.c /^__db_set_lorder_proc(dbpcl_id, lorder, replyp)$/
__db_set_msgcall ../db/db_method.c /^__db_set_msgcall(dbp, msgcall)$/
__db_set_msgfile ../db/db_method.c /^__db_set_msgfile(dbp, msgfile)$/
__db_set_pagesize ../db/db_method.c /^__db_set_pagesize(dbp, db_pagesize)$/
+__db_set_pagesize_proc ../rpc_server/c/db_server_proc.c /^__db_set_pagesize_proc(dbpcl_id, pagesize, replyp)/
__db_set_paniccall ../db/db_method.c /^__db_set_paniccall(dbp, paniccall)$/
+__db_set_q_extentsize_proc ../rpc_server/c/db_server_proc.c /^__db_set_q_extentsize_proc(dbpcl_id, extentsize, r/
+__db_set_re_delim_proc ../rpc_server/c/db_server_proc.c /^__db_set_re_delim_proc(dbpcl_id, delim, replyp)$/
+__db_set_re_len_proc ../rpc_server/c/db_server_proc.c /^__db_set_re_len_proc(dbpcl_id, len, replyp)$/
+__db_set_re_pad_proc ../rpc_server/c/db_server_proc.c /^__db_set_re_pad_proc(dbpcl_id, pad, replyp)$/
__db_sgenrand ../crypto/mersenne/mt19937db.c /^__db_sgenrand(seed, mt, mtip)$/
__db_shalloc ../env/db_salloc.c /^__db_shalloc(infop, len, align, retp)$/
__db_shalloc_free ../env/db_salloc.c /^__db_shalloc_free(infop, ptr)$/
__db_shalloc_init ../env/db_salloc.c /^__db_shalloc_init(infop, size)$/
__db_shalloc_size ../env/db_salloc.c /^__db_shalloc_size(len, align)$/
__db_shalloc_sizeof ../env/db_salloc.c /^__db_shalloc_sizeof(ptr)$/
-__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_shm_mode ../os/os_oflags.c /^__db_shm_mode(dbenv)$/
-__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_space_err ../common/db_err.c /^__db_space_err(dbp)$/
__db_stat ../db/db_stati.c /^__db_stat(dbp, txn, spp, flags)$/
__db_stat_arg ../db/db_stati.c /^__db_stat_arg(dbp, flags)$/
__db_stat_not_built ../env/env_stat.c /^__db_stat_not_built(dbenv)$/
@@ -2768,41 +3011,53 @@ __db_subdb_rename ../db/db_rename.c /^__db_subdb_rename(dbp, txn, name, subdb, n
__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_syserr ../common/db_err.c /^__db_syserr(dbenv, error fmt, va_alist)$/
__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_tas_mutex_destroy ../mutex/mut_tas.c /^__db_tas_mutex_destroy(dbenv, mutex)$/
+__db_tas_mutex_init ../mutex/mut_tas.c /^__db_tas_mutex_init(dbenv, mutex, flags)$/
+__db_tas_mutex_lock ../mutex/mut_tas.c /^__db_tas_mutex_lock(dbenv, mutex)$/
+__db_tas_mutex_unlock ../mutex/mut_tas.c /^__db_tas_mutex_unlock(dbenv, mutex)$/
__db_testcopy ../db/db.c /^__db_testcopy(dbenv, dbp, name)$/
__db_testdocopy ../db/db.c /^__db_testdocopy(dbenv, name)$/
+__db_threadid ../env/env_failchk.c /^struct __db_threadid {$/
__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_traverse_big ../db/db_reclaim.c /^__db_traverse_big(dbp, pgno, txn, callback, cookie/
__db_truncate ../db/db_truncate.c /^__db_truncate(dbp, txn, countp)$/
__db_truncate_callback ../db/db_reclaim.c /^__db_truncate_callback(dbp, p, cookie, putp)$/
+__db_truncate_freelist ../db/db_meta.c /^__db_truncate_freelist(dbc, meta, h, list, start, /
__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, flags, rep/
-__db_txn_abort_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_abort_4003__SVCSUFFIX__(msg, req)$/
+__db_txn ../dbinc/db.in /^struct __db_txn {$/
+__db_txn_abort_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_abort_4005__SVCSUFFIX__(msg, req)$/
+__db_txn_active ../dbinc/db.in /^struct __db_txn_active {$/
__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_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_begin_4003__SVCSUFFIX__(msg, req)$/
-__db_txn_commit_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_commit_4003__SVCSUFFIX__(msg, req)$/
-__db_txn_discard_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_discard_4003__SVCSUFFIX__(msg, req)$/
-__db_txn_prepare_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_prepare_4003__SVCSUFFIX__(msg, req)$/
-__db_txn_recover_4003__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_recover_4003__SVCSUFFIX__(msg, req)$/
-__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, statusp)$/
+__db_txn_commit_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_commit_4005__SVCSUFFIX__(msg, req)$/
+__db_txn_deadlock_err ../common/db_err.c /^__db_txn_deadlock_err(dbenv)$/
+__db_txn_discard_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_discard_4005__SVCSUFFIX__(msg, req)$/
+__db_txn_prepare_4005__SVCSUFFIX__ ../rpc_server/c/gen_db_server.c /^__db_txn_prepare_4005__SVCSUFFIX__(msg, req)$/
+__db_txn_stat ../dbinc/db.in /^struct __db_txn_stat {$/
+__db_txnhead ../dbinc/db_dispatch.h /^struct __db_txnhead {$/
+__db_txnlist ../dbinc/db_dispatch.h /^struct __db_txnlist {$/
+__db_txnlist_add ../db/db_dispatch.c /^__db_txnlist_add(dbenv, hp, txnid, status, lsn)$/
+__db_txnlist_ckp ../db/db_dispatch.c /^__db_txnlist_ckp(dbenv, hp, ckp_lsn)$/
+__db_txnlist_end ../db/db_dispatch.c /^__db_txnlist_end(dbenv, hp)$/
+__db_txnlist_find ../db/db_dispatch.c /^__db_txnlist_find(dbenv, hp, txnid, statusp)$/
__db_txnlist_find_internal ../db/db_dispatch.c /^__db_txnlist_find_internal(dbenv,$/
-__db_txnlist_gen ../db/db_dispatch.c /^__db_txnlist_gen(dbenv, listp, incr, min, max)$/
+__db_txnlist_gen ../db/db_dispatch.c /^__db_txnlist_gen(dbenv, hp, 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_lsnadd ../db/db_dispatch.c /^__db_txnlist_lsnadd(dbenv, hp, lsnp)$/
+__db_txnlist_lsnget ../db/db_dispatch.c /^__db_txnlist_lsnget(dbenv, hp, 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_txnlist_update ../db/db_dispatch.c /^__db_txnlist_update(dbenv, listp, txnid, status, l/
+__db_txnlist_print ../db/db_dispatch.c /^__db_txnlist_print(hp)$/
+__db_txnlist_remove ../db/db_dispatch.c /^__db_txnlist_remove(dbenv, hp, txnid)$/
+__db_txnlist_update ../db/db_dispatch.c /^__db_txnlist_update(dbenv, hp, txnid, status, lsn,/
+__db_txnmgr ../dbinc/txn.h /^struct __db_txnmgr {$/
+__db_txnregion ../dbinc/txn.h /^struct __db_txnregion {$/
+__db_unknown_error ../common/db_err.c /^__db_unknown_error(error)$/
__db_unknown_flag ../common/db_err.c /^__db_unknown_flag(dbenv, routine, flag)$/
+__db_unknown_path ../common/db_err.c /^__db_unknown_path(dbenv, routine)$/
__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(dbenv, xid, off)$/
@@ -2838,7 +3093,7 @@ __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_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_pageinfo_create ../db/db_vrfyutil.c /^__db_vrfy_pageinfo_create(dbenv, pipp)$/
__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_get ../db/db_vrfyutil.c /^__db_vrfy_pgset_get(dbp, pgno, valp)$/
@@ -2850,10 +3105,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_win32_mutex_destroy ../mutex/mut_win32.c /^__db_win32_mutex_destroy(dbenv, mutex)$/
+__db_win32_mutex_init ../mutex/mut_win32.c /^__db_win32_mutex_init(dbenv, mutex, flags)$/
+__db_win32_mutex_lock ../mutex/mut_win32.c /^__db_win32_mutex_lock(dbenv, mutex)$/
+__db_win32_mutex_unlock ../mutex/mut_win32.c /^__db_win32_mutex_unlock(dbenv, mutex)$/
__db_wrlock_err ../db/db_cam.c /^__db_wrlock_err(dbenv)$/
__db_xa_close ../xa/xa.c /^__db_xa_close(xa_info, rmid, arg_flags)$/
__db_xa_commit ../xa/xa.c /^__db_xa_commit(xid, rmid, arg_flags)$/
@@ -2867,24 +3122,21 @@ __db_xa_recover ../xa/xa.c /^__db_xa_recover(xids, count, rmid, flags)$/
__db_xa_rollback ../xa/xa.c /^__db_xa_rollback(xid, rmid, arg_flags)$/
__db_xa_start ../xa/xa.c /^__db_xa_start(xid, rmid, arg_flags)$/
__db_xid_to_txn ../xa/xa_map.c /^__db_xid_to_txn(dbenv, xid, offp)$/
+__dbc ../dbinc/db.in /^struct __dbc {$/
+__dbc_c_close_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_close_proc(dbccl_id, replyp)$/
+__dbc_c_count_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_count_proc(dbccl_id, flags, replyp)$/
+__dbc_c_del_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_del_proc(dbccl_id, flags, replyp)$/
+__dbc_c_dup_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_dup_proc(dbccl_id, flags, replyp)$/
+__dbc_c_get_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_get_proc(dbccl_id, keydlen, keydoff, keyul/
+__dbc_c_pget_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_pget_proc(dbccl_id, skeydlen, skeydoff, sk/
+__dbc_c_put_proc ../rpc_server/c/db_server_proc.c /^__dbc_c_put_proc(dbccl_id, keydlen, keydoff, keyul/
__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_proc ../rpc_server/c/db_server_proc.c /^__dbc_count_proc(dbccl_id, flags, replyp)$/
-__dbc_del_proc ../rpc_server/c/db_server_proc.c /^__dbc_del_proc(dbccl_id, flags, replyp)$/
-__dbc_dup_proc ../rpc_server/c/db_server_proc.c /^__dbc_dup_proc(dbccl_id, flags, replyp)$/
-__dbc_get_proc ../rpc_server/c/db_server_proc.c /^__dbc_get_proc(dbccl_id, keydlen, keydoff, keyulen/
-__dbc_pget_proc ../rpc_server/c/db_server_proc.c /^__dbc_pget_proc(dbccl_id, skeydlen, skeydoff, skey/
-__dbc_put_proc ../rpc_server/c/db_server_proc.c /^__dbc_put_proc(dbccl_id, keydlen, keydoff, keyulen/
+__dbc_internal ../dbinc/db_int.in /^struct __dbc_internal {$/
+__dbc_logging ../common/db_err.c /^__dbc_logging(dbc)$/
__dbcl_c_destroy ../rpc_client/client.c /^__dbcl_c_destroy(dbc)$/
__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, 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)$/
-__dbcl_db_bt_prefix ../rpc_client/gen_client.c /^__dbcl_db_bt_prefix(dbp, func0)$/
-__dbcl_db_cachesize ../rpc_client/gen_client.c /^__dbcl_db_cachesize(dbp, gbytes, bytes, ncache)$/
__dbcl_db_close ../rpc_client/gen_client.c /^__dbcl_db_close(dbp, flags)$/
__dbcl_db_close_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_close_ret(dbp, flags, replyp)$/
__dbcl_db_create ../rpc_client/gen_client.c /^__dbcl_db_create(dbp, dbenv, flags)$/
@@ -2892,86 +3144,79 @@ __dbcl_db_create_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_create_ret(dbp,
__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, 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_dbname ../rpc_client/gen_client.c /^__dbcl_db_get_dbname(dbp, filenamep, dbnamep)$/
__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_q_extentsize ../rpc_client/gen_client.c /^__dbcl_db_get_q_extentsize(dbp, extentsizep)$/
__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, 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, 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)/
__dbcl_db_pget_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_pget_ret(dbp, txnp, skey, pkey, data, fl/
__dbcl_db_put ../rpc_client/gen_client.c /^__dbcl_db_put(dbp, txnp, key, data, flags)$/
__dbcl_db_put_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_put_ret(dbp, txnp, key, data, flags, rep/
-__dbcl_db_re_delim ../rpc_client/gen_client.c /^__dbcl_db_re_delim(dbp, delim)$/
-__dbcl_db_re_len ../rpc_client/gen_client.c /^__dbcl_db_re_len(dbp, len)$/
-__dbcl_db_re_pad ../rpc_client/gen_client.c /^__dbcl_db_re_pad(dbp, pad)$/
-__dbcl_db_re_source ../rpc_client/gen_client.c /^__dbcl_db_re_source(dbp, re_source)$/
__dbcl_db_remove ../rpc_client/gen_client.c /^__dbcl_db_remove(dbp, name, subdb, flags)$/
__dbcl_db_remove_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_remove_ret(dbp, name, subdb, flags, repl/
__dbcl_db_rename ../rpc_client/gen_client.c /^__dbcl_db_rename(dbp, name, subdb, newname, flags)/
__dbcl_db_rename_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_rename_ret(dbp, name, subdb, newname, fl/
-__dbcl_db_set_append_recno ../rpc_client/gen_client.c /^__dbcl_db_set_append_recno(dbp, func0)$/
+__dbcl_db_set_bt_minkey ../rpc_client/gen_client.c /^__dbcl_db_set_bt_minkey(dbp, minkey)$/
+__dbcl_db_set_encrypt ../rpc_client/gen_client.c /^__dbcl_db_set_encrypt(dbp, passwd, flags)$/
+__dbcl_db_set_flags ../rpc_client/gen_client.c /^__dbcl_db_set_flags(dbp, flags)$/
+__dbcl_db_set_h_ffactor ../rpc_client/gen_client.c /^__dbcl_db_set_h_ffactor(dbp, ffactor)$/
+__dbcl_db_set_h_nelem ../rpc_client/gen_client.c /^__dbcl_db_set_h_nelem(dbp, nelem)$/
+__dbcl_db_set_lorder ../rpc_client/gen_client.c /^__dbcl_db_set_lorder(dbp, lorder)$/
+__dbcl_db_set_pagesize ../rpc_client/gen_client.c /^__dbcl_db_set_pagesize(dbp, pagesize)$/
+__dbcl_db_set_q_extentsize ../rpc_client/gen_client.c /^__dbcl_db_set_q_extentsize(dbp, extentsize)$/
+__dbcl_db_set_re_delim ../rpc_client/gen_client.c /^__dbcl_db_set_re_delim(dbp, delim)$/
+__dbcl_db_set_re_len ../rpc_client/gen_client.c /^__dbcl_db_set_re_len(dbp, len)$/
+__dbcl_db_set_re_pad ../rpc_client/gen_client.c /^__dbcl_db_set_re_pad(dbp, pad)$/
__dbcl_db_stat ../rpc_client/gen_client.c /^__dbcl_db_stat(dbp, txnp, sp, flags)$/
__dbcl_db_stat_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_stat_ret(dbp, txnp, 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, 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(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(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(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(dbc, key, data, flags, replyp)$/
+__dbcl_dbc_c_close ../rpc_client/gen_client.c /^__dbcl_dbc_c_close(dbc)$/
+__dbcl_dbc_c_close_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_c_close_ret(dbc, replyp)$/
+__dbcl_dbc_c_count ../rpc_client/gen_client.c /^__dbcl_dbc_c_count(dbc, countp, flags)$/
+__dbcl_dbc_c_count_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_c_count_ret(dbc, countp, flags, replyp)/
+__dbcl_dbc_c_del ../rpc_client/gen_client.c /^__dbcl_dbc_c_del(dbc, flags)$/
+__dbcl_dbc_c_dup ../rpc_client/gen_client.c /^__dbcl_dbc_c_dup(dbc, dbcp, flags)$/
+__dbcl_dbc_c_dup_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_c_dup_ret(dbc, dbcp, flags, replyp)$/
+__dbcl_dbc_c_get ../rpc_client/gen_client.c /^__dbcl_dbc_c_get(dbc, key, data, flags)$/
+__dbcl_dbc_c_get_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_c_get_ret(dbc, key, data, flags, replyp/
+__dbcl_dbc_c_pget ../rpc_client/gen_client.c /^__dbcl_dbc_c_pget(dbc, skey, pkey, data, flags)$/
+__dbcl_dbc_c_pget_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_c_pget_ret(dbc, skey, pkey, data, flags/
+__dbcl_dbc_c_put ../rpc_client/gen_client.c /^__dbcl_dbc_c_put(dbc, key, data, flags)$/
+__dbcl_dbc_c_put_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_c_put_ret(dbc, key, data, flags, replyp/
+__dbcl_dbc_init ../rpc_client/gen_client.c /^__dbcl_dbc_init(dbc)$/
__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_dbenv_illegal ../rpc_client/gen_client.c /^__dbcl_dbenv_illegal(dbenv)$/
+__dbcl_dbenv_init ../rpc_client/gen_client.c /^__dbcl_dbenv_init(dbenv)$/
+__dbcl_dbp_illegal ../rpc_client/gen_client.c /^__dbcl_dbp_illegal(dbp)$/
+__dbcl_dbp_init ../rpc_client/gen_client.c /^__dbcl_dbp_init(dbp)$/
+__dbcl_env_cdsgroup_begin ../rpc_client/gen_client.c /^__dbcl_env_cdsgroup_begin(dbenv, txnpp)$/
+__dbcl_env_cdsgroup_begin_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_cdsgroup_begin_ret(envp, txnpp, replyp)/
__dbcl_env_close ../rpc_client/gen_client.c /^__dbcl_env_close(dbenv, flags)$/
__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)$/
@@ -2980,177 +3225,37 @@ __dbcl_env_get_open_flags ../rpc_client/gen_client.c /^__dbcl_env_get_open_flags
__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)$/
-__dbcl_env_paniccall ../rpc_client/gen_client.c /^__dbcl_env_paniccall(dbenv, func0)$/
__dbcl_env_remove ../rpc_client/gen_client.c /^__dbcl_env_remove(dbenv, home, flags)$/
__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_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_max_openfd ../rpc_client/gen_client.c /^__dbcl_get_mp_max_openfd(dbenv, nopenp)$/
-__dbcl_get_mp_max_write ../rpc_client/gen_client.c /^__dbcl_get_mp_max_write(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, 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_put ../rpc_client/gen_client.c /^__dbcl_log_put(dbenv, lsn, data, flags)$/
-__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_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_env_set_cachesize ../rpc_client/gen_client.c /^__dbcl_env_set_cachesize(dbenv, gbytes, bytes, nca/
+__dbcl_env_set_encrypt ../rpc_client/gen_client.c /^__dbcl_env_set_encrypt(dbenv, passwd, flags)$/
+__dbcl_env_set_flags ../rpc_client/gen_client.c /^__dbcl_env_set_flags(dbenv, flags, onoff)$/
+__dbcl_env_set_rpc_server ../rpc_client/client.c /^__dbcl_env_set_rpc_server(dbenv, clnt, host, tsec,/
+__dbcl_env_txn_begin ../rpc_client/gen_client.c /^__dbcl_env_txn_begin(dbenv, parent, txnpp, flags)$/
+__dbcl_env_txn_begin_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_txn_begin_ret(envp, parent, txnpp, flag/
+__dbcl_env_txn_recover ../rpc_client/gen_client.c /^__dbcl_env_txn_recover(dbenv, preplist, count, ret/
+__dbcl_env_txn_recover_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_txn_recover_ret(dbenv, preplist, count,/
__dbcl_noserver ../rpc_client/gen_client.c /^__dbcl_noserver(dbenv)$/
__dbcl_refresh ../rpc_client/client.c /^__dbcl_refresh(dbenv)$/
-__dbcl_rep_elect ../rpc_client/gen_client.c /^__dbcl_rep_elect(dbenv, nsites, nvotes, pri, timeo/
-__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)$/
-__dbcl_set_lg_max ../rpc_client/gen_client.c /^__dbcl_set_lg_max(dbenv, max)$/
-__dbcl_set_lg_regionmax ../rpc_client/gen_client.c /^__dbcl_set_lg_regionmax(dbenv, max)$/
-__dbcl_set_lk_conflict ../rpc_client/gen_client.c /^__dbcl_set_lk_conflict(dbenv, conflicts, modes)$/
-__dbcl_set_lk_detect ../rpc_client/gen_client.c /^__dbcl_set_lk_detect(dbenv, detect)$/
-__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_max_openfd ../rpc_client/gen_client.c /^__dbcl_set_mp_max_openfd(dbenv, nopen)$/
-__dbcl_set_mp_max_write ../rpc_client/gen_client.c /^__dbcl_set_mp_max_write(dbenv, nwrite, nsleep)$/
-__dbcl_set_mp_mmapsize ../rpc_client/gen_client.c /^__dbcl_set_mp_mmapsize(dbenv, mmapsize)$/
-__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_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, 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_illegal ../rpc_client/gen_client.c /^__dbcl_txn_illegal(txn)$/
+__dbcl_txn_init ../rpc_client/gen_client.c /^__dbcl_txn_init(txn)$/
__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, 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_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_msgfile ../env/env_method.c /^__dbenv_get_msgfile(dbenv, msgfilep)$/
-__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_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_print_all ../env/env_stat.c /^__dbenv_print_all(dbenv, flags)$/
-__dbenv_print_stats ../env/env_stat.c /^__dbenv_print_stats(dbenv, flags)$/
-__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, on)$/
-__dbenv_set_intermediate_dir ../env/env_method.c /^__dbenv_set_intermediate_dir(dbenv, mode, flags)$/
-__dbenv_set_msgcall ../env/env_method.c /^__dbenv_set_msgcall(dbenv, msgcall)$/
-__dbenv_set_msgfile ../env/env_method.c /^__dbenv_set_msgfile(dbenv, msgfile)$/
-__dbenv_set_paniccall ../env/env_method.c /^__dbenv_set_paniccall(dbenv, paniccall)$/
-__dbenv_set_rpc_server_noclnt ../env/env_method.c /^__dbenv_set_rpc_server_noclnt(dbenv, cl, host, tse/
-__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, on)$/
-__dbenv_stat_print ../env/env_stat.c /^__dbenv_stat_print(dbenv, flags)$/
-__dbenv_stat_print_pp ../env/env_stat.c /^__dbenv_stat_print_pp(dbenv, flags)$/
__dbh_am_chk ../db/db_method.c /^__dbh_am_chk(dbp, flags)$/
-__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, ...)$/
+__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)$/
__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/
@@ -3158,21 +3263,25 @@ __dbj_bt_prefix ../libdb_java/db_java_wrap.c /^static size_t __dbj_bt_prefix(DB
__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_memcopy ../libdb_java/db_java_wrap.c /^static int __dbj_dbt_memcopy(DBT *dbt, u_int32_t o/
__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 DB_ENV *dbenv, const/
-__dbj_fill_bt_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_bt_stat(JNIEnv *jnienv, $/
-__dbj_fill_h_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_h_stat(JNIEnv *jnienv, $/
-__dbj_fill_lock_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_lock_stat(JNIEnv *jnienv, $/
-__dbj_fill_log_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_log_stat(JNIEnv *jnienv, $/
-__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, $/
-__dbj_fill_qam_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_qam_stat(JNIEnv *jnienv, $/
-__dbj_fill_rep_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_rep_stat(JNIEnv *jnienv, $/
-__dbj_fill_seq_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_seq_stat(JNIEnv *jnienv, $/
-__dbj_fill_txn_active ../libdb_java/java_stat_auto.c /^static int __dbj_fill_txn_active(JNIEnv *jnienv, $/
-__dbj_fill_txn_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_txn_stat(JNIEnv *jnienv, $/
+__dbj_error ../libdb_java/db_java_wrap.c /^static void __dbj_error(const DB_ENV *dbenv,$/
+__dbj_event_notify ../libdb_java/db_java_wrap.c /^static void __dbj_event_notify(DB_ENV *dbenv, u_in/
+__dbj_fill_bt_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_bt_stat(JNIEnv *jnienv,$/
+__dbj_fill_compact ../libdb_java/java_stat_auto.c /^static int __dbj_fill_compact(JNIEnv *jnienv,$/
+__dbj_fill_h_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_h_stat(JNIEnv *jnienv,$/
+__dbj_fill_lock_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_lock_stat(JNIEnv *jnienv,$/
+__dbj_fill_log_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_log_stat(JNIEnv *jnienv,$/
+__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,$/
+__dbj_fill_mutex_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_mutex_stat(JNIEnv *jnienv,$/
+__dbj_fill_qam_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_qam_stat(JNIEnv *jnienv,$/
+__dbj_fill_rep_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_rep_stat(JNIEnv *jnienv,$/
+__dbj_fill_seq_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_seq_stat(JNIEnv *jnienv,$/
+__dbj_fill_txn_active ../libdb_java/java_stat_auto.c /^static int __dbj_fill_txn_active(JNIEnv *jnienv,$/
+__dbj_fill_txn_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_txn_stat(JNIEnv *jnienv,$/
__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 */
@@ -3182,8 +3291,9 @@ __dbj_rep_transport ../libdb_java/db_java_wrap.c /^static int __dbj_rep_transpor
__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,$/
__dbj_verify_callback ../libdb_java/db_java_wrap.c /^static int __dbj_verify_callback(void *handle, con/
+__dbj_verify_data ../libdb_java/db_java_wrap.c /^struct __dbj_verify_data {$/
__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)$/
+__dblist ../dbinc/db.in /^ struct __dblist {$/
__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)$/
@@ -3198,22 +3308,26 @@ __dbreg_id_to_db_int ../dbreg/dbreg_util.c /^__dbreg_id_to_db_int(dbenv, txn, db
__dbreg_id_to_fname ../dbreg/dbreg_util.c /^__dbreg_id_to_fname(dblp, id, have_lock, fnamep)$/
__dbreg_init_print ../dbreg/dbreg_autop.c /^__dbreg_init_print(dbenv, dtabp, dtabsizep)$/
__dbreg_init_recover ../dbreg/dbreg_auto.c /^__dbreg_init_recover(dbenv, dtabp, dtabsizep)$/
+__dbreg_invalidate_files ../dbreg/dbreg_util.c /^__dbreg_invalidate_files(dbenv)$/
__dbreg_lazy_id ../dbreg/dbreg_util.c /^__dbreg_lazy_id(dbp)$/
+__dbreg_log_close ../dbreg/dbreg.c /^__dbreg_log_close(dbenv, fnp, txn, op)$/
__dbreg_log_files ../dbreg/dbreg_util.c /^__dbreg_log_files(dbenv)$/
+__dbreg_log_id ../dbreg/dbreg.c /^__dbreg_log_id(dbp, txn, id, needlock)$/
__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_pluck_id ../dbreg/dbreg.c /^__dbreg_pluck_id(dbenv, id)$/
__dbreg_pop_id ../dbreg/dbreg.c /^__dbreg_pop_id(dbenv, id)$/
__dbreg_print_dblist ../dbreg/dbreg_stat.c /^__dbreg_print_dblist(dbenv, flags)$/
__dbreg_print_fname ../dbreg/dbreg_stat.c /^__dbreg_print_fname(dbenv, fnp)$/
-__dbreg_push_id ../dbreg/dbreg.c /^__dbreg_push_id(dbenv, id)$/
-__dbreg_register_log ../dbreg/dbreg_auto.c /^__dbreg_register_log(dbenv, txnid, ret_lsnp, flags/
+__dbreg_push_id ../dbreg/dbreg.c /^__dbreg_push_id(dbenv, dbp, id)$/
+__dbreg_register_log ../dbreg/dbreg_auto.c /^__dbreg_register_log(dbenv, txnp, ret_lsnp, flags,/
__dbreg_register_print ../dbreg/dbreg_autop.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_stat_print ../dbreg/dbreg_stat.c /^__dbreg_stat_print(dbenv, flags)$/
__dbreg_teardown ../dbreg/dbreg.c /^__dbreg_teardown(dbp)$/
__dbsrv_active ../rpc_server/c/db_server_util.c /^__dbsrv_active(ctp)$/
__dbsrv_settimeout ../rpc_server/c/db_server_util.c /^__dbsrv_settimeout(ctp, to)$/
@@ -3221,60 +3335,145 @@ __dbsrv_sharedb ../rpc_server/c/db_server_util.c /^__dbsrv_sharedb(db_ctp, name,
__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)$/
+__dbt_usercopy ../db/db_iface.c /^__dbt_usercopy(dbenv, dbt)$/
+__dbt_userfree ../db/db_iface.c /^__dbt_userfree(dbenv, key, pkey, data)$/
+__dd_abort ../lock/lock_deadlock.c /^__dd_abort(dbenv, info, statusp)$/
__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_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, nc/
+__env_cdsgroup_begin_proc ../rpc_server/c/db_server_proc.c /^__env_cdsgroup_begin_proc(dbenvcl_id, replyp)$/
+__env_close ../env/env_open.c /^__env_close(dbenv, rep_check)$/
+__env_close_int ../rpc_server/c/db_server_util.c /^__env_close_int(id, flags, force)$/
+__env_close_pp ../env/env_open.c /^__env_close_pp(dbenv, flags)$/
__env_close_proc ../rpc_server/c/db_server_proc.c /^__env_close_proc(dbenvcl_id, flags, replyp)$/
+__env_config ../env/env_open.c /^__env_config(dbenv, db_home, flags, mode)$/
__env_create_proc ../rpc_server/c/db_server_proc.c /^__env_create_proc(timeout, replyp)$/
__env_db_rep_exit ../rep/rep_util.c /^__env_db_rep_exit(dbenv)$/
+__env_dbremove_pp ../db/db_remove.c /^__env_dbremove_pp(dbenv, txn, name, subdb, flags)$/
__env_dbremove_proc ../rpc_server/c/db_server_proc.c /^__env_dbremove_proc(dbenvcl_id, txnpcl_id, name, s/
+__env_dbrename_pp ../db/db_rename.c /^__env_dbrename_pp(dbenv, txn, name, subdb, newname/
__env_dbrename_proc ../rpc_server/c/db_server_proc.c /^__env_dbrename_proc(dbenvcl_id, txnpcl_id, name, s/
-__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_err ../env/env_method.c /^__env_err(dbenv, error, fmt, va_alist)$/
+__env_errx ../env/env_method.c /^__env_errx(dbenv, fmt, va_alist)$/
+__env_failchk_pp ../env/env_failchk.c /^__env_failchk_pp(dbenv, flags)$/
+__env_fileid_reset ../db/db_setid.c /^__env_fileid_reset(dbenv, name, encrypted)$/
+__env_fileid_reset_pp ../db/db_setid.c /^__env_fileid_reset_pp(dbenv, name, flags)$/
__env_get_cachesize_proc ../rpc_server/c/db_server_proc.c /^__env_get_cachesize_proc(dbenvcl_id, replyp)$/
+__env_get_data_dirs ../env/env_method.c /^__env_get_data_dirs(dbenv, dirpp)$/
+__env_get_encrypt_flags ../env/env_method.c /^__env_get_encrypt_flags(dbenv, flagsp)$/
__env_get_encrypt_flags_proc ../rpc_server/c/db_server_proc.c /^__env_get_encrypt_flags_proc(dbenvcl_id, replyp)$/
+__env_get_errfile ../env/env_method.c /^__env_get_errfile(dbenv, errfilep)$/
+__env_get_errpfx ../env/env_method.c /^__env_get_errpfx(dbenv, errpfxp)$/
+__env_get_flags ../env/env_method.c /^__env_get_flags(dbenv, flagsp)$/
__env_get_flags_proc ../rpc_server/c/db_server_proc.c /^__env_get_flags_proc(dbenvcl_id, replyp)$/
+__env_get_home ../env/env_method.c /^__env_get_home(dbenv, homep)$/
__env_get_home_proc ../rpc_server/c/db_server_proc.c /^__env_get_home_proc(dbenvcl_id, replyp)$/
+__env_get_msgfile ../env/env_method.c /^__env_get_msgfile(dbenv, msgfilep)$/
+__env_get_open_flags ../env/env_open.c /^__env_get_open_flags(dbenv, flagsp)$/
__env_get_open_flags_proc ../rpc_server/c/db_server_proc.c /^__env_get_open_flags_proc(dbenvcl_id, replyp)$/
+__env_get_shm_key ../env/env_method.c /^__env_get_shm_key(dbenv, shm_keyp)$/
+__env_get_tmp_dir ../env/env_method.c /^__env_get_tmp_dir(dbenv, dirp)$/
+__env_get_verbose ../env/env_method.c /^__env_get_verbose(dbenv, which, onoffp)$/
+__env_in_api ../env/env_failchk.c /^__env_in_api(dbenv)$/
+__env_init ../env/env_method.c /^__env_init(dbenv)$/
+__env_init_rec ../env/env_recover.c /^__env_init_rec(dbenv, version)$/
+__env_init_rec_42 ../env/env_recover.c /^__env_init_rec_42(dbenv)$/
+__env_init_rec_43 ../env/env_recover.c /^__env_init_rec_43(dbenv)$/
+__env_init_rec_45 ../env/env_recover.c /^__env_init_rec_45(dbenv)$/
+__env_lsn_reset ../db/db_setlsn.c /^__env_lsn_reset(dbenv, name, encrypted)$/
+__env_lsn_reset_pp ../db/db_setlsn.c /^__env_lsn_reset_pp(dbenv, name, flags)$/
+__env_map_flags ../env/env_method.c /^__env_map_flags(dbenv, inflagsp, outflagsp)$/
+__env_open ../env/env_open.c /^__env_open(dbenv, db_home, flags, mode)$/
+__env_open_pp ../env/env_open.c /^__env_open_pp(dbenv, db_home, flags, mode)$/
__env_open_proc ../rpc_server/c/db_server_proc.c /^__env_open_proc(dbenvcl_id, home, flags, mode, rep/
__env_openfiles ../env/env_recover.c /^__env_openfiles(dbenv, logc, txninfo,$/
+__env_print_all ../env/env_stat.c /^__env_print_all(dbenv, flags)$/
+__env_print_stats ../env/env_stat.c /^__env_print_stats(dbenv, flags)$/
+__env_print_threads ../env/env_stat.c /^__env_print_threads(dbenv)$/
+__env_read_db_config ../env/env_config.c /^__env_read_db_config(dbenv)$/
+__env_refresh ../env/env_open.c /^__env_refresh(dbenv, orig_flags, rep_check)$/
+__env_remove ../env/env_open.c /^__env_remove(dbenv, db_home, flags)$/
__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_enter ../rep/rep_util.c /^__env_rep_enter(dbenv, checklock)$/
+__env_set_alloc ../env/env_method.c /^__env_set_alloc(dbenv, mal_func, real_func, free_f/
+__env_set_app_dispatch ../env/env_method.c /^__env_set_app_dispatch(dbenv, app_dispatch)$/
+__env_set_cachesize_proc ../rpc_server/c/db_server_proc.c /^__env_set_cachesize_proc(dbenvcl_id, gbytes, bytes/
+__env_set_data_dir ../env/env_method.c /^__env_set_data_dir(dbenv, dir)$/
+__env_set_encrypt ../env/env_method.c /^__env_set_encrypt(dbenv, passwd, flags)$/
+__env_set_encrypt_proc ../rpc_server/c/db_server_proc.c /^__env_set_encrypt_proc(dbenvcl_id, passwd, flags, /
+__env_set_errcall ../env/env_method.c /^__env_set_errcall(dbenv, errcall)$/
+__env_set_errfile ../env/env_method.c /^__env_set_errfile(dbenv, errfile)$/
+__env_set_errpfx ../env/env_method.c /^__env_set_errpfx(dbenv, errpfx)$/
+__env_set_event_notify ../env/env_method.c /^__env_set_event_notify(dbenv, event_func)$/
+__env_set_feedback ../env/env_method.c /^__env_set_feedback(dbenv, feedback)$/
+__env_set_flags ../env/env_method.c /^__env_set_flags(dbenv, flags, on)$/
+__env_set_flags_proc ../rpc_server/c/db_server_proc.c /^__env_set_flags_proc(dbenvcl_id, flags, onoff, rep/
+__env_set_intermediate_dir ../env/env_method.c /^__env_set_intermediate_dir(dbenv, mode, flags)$/
+__env_set_isalive ../env/env_method.c /^__env_set_isalive(dbenv, is_alive)$/
+__env_set_msgcall ../env/env_method.c /^__env_set_msgcall(dbenv, msgcall)$/
+__env_set_msgfile ../env/env_method.c /^__env_set_msgfile(dbenv, msgfile)$/
+__env_set_paniccall ../env/env_method.c /^__env_set_paniccall(dbenv, paniccall)$/
+__env_set_rpc_server ../env/env_method.c /^__env_set_rpc_server(dbenv, cl, host, tsec, ssec, /
+__env_set_shm_key ../env/env_method.c /^__env_set_shm_key(dbenv, shm_key)$/
+__env_set_state ../env/env_failchk.c /^__env_set_state(dbenv, ipp, state)$/
+__env_set_thread_count ../env/env_method.c /^__env_set_thread_count(dbenv, count)$/
+__env_set_thread_id ../env/env_method.c /^__env_set_thread_id(dbenv, id)$/
+__env_set_thread_id_string ../env/env_method.c /^__env_set_thread_id_string(dbenv, thread_id_string/
+__env_set_tmp_dir ../env/env_method.c /^__env_set_tmp_dir(dbenv, dir)$/
+__env_set_verbose ../env/env_method.c /^__env_set_verbose(dbenv, which, on)$/
+__env_stat_print ../env/env_stat.c /^__env_stat_print(dbenv, flags)$/
+__env_stat_print_pp ../env/env_stat.c /^__env_stat_print_pp(dbenv, flags)$/
+__env_thread_id_string ../env/env_failchk.c /^__env_thread_id_string(dbenv, pid, tid, buf)$/
+__env_thread_init ../env/env_failchk.c /^__env_thread_init(dbenv, created)$/
+__env_thread_state_print ../env/env_stat.c /^__env_thread_state_print(state)$/
+__env_txn_begin_proc ../rpc_server/c/db_server_proc.c /^__env_txn_begin_proc(dbenvcl_id, parentcl_id, flag/
+__env_txn_recover_proc ../rpc_server/c/db_server_proc.c /^__env_txn_recover_proc(dbenvcl_id, count, flags, r/
+__envreg_add ../env/env_register.c /^__envreg_add(dbenv, need_recoveryp)$/
+__envreg_register ../env/env_register.c /^__envreg_register(dbenv, need_recoveryp)$/
+__envreg_unregister ../env/env_register.c /^__envreg_unregister(dbenv, recovery_failed)$/
+__envreg_xunlock ../env/env_register.c /^__envreg_xunlock(dbenv)$/
+__epg ../dbinc/btree.h /^struct __epg {$/
+__fh_t ../dbinc/os.h /^struct __fh_t {$/
+__fname ../dbinc/log.h /^struct __fname {$/
__fop_create ../fileops/fop_basic.c /^__fop_create(dbenv, txn, fhpp, name, appname, mode/
-__fop_create_log ../fileops/fileops_auto.c /^__fop_create_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_create_log ../fileops/fileops_auto.c /^__fop_create_log(dbenv, txnp, ret_lsnp, flags,$/
__fop_create_print ../fileops/fileops_autop.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_log ../fileops/fileops_auto.c /^__fop_file_remove_log(dbenv, txnid, ret_lsnp, flag/
+__fop_file_remove_log ../fileops/fileops_auto.c /^__fop_file_remove_log(dbenv, txnp, ret_lsnp, flags/
__fop_file_remove_print ../fileops/fileops_autop.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_print ../fileops/fileops_autop.c /^__fop_init_print(dbenv, dtabp, dtabsizep)$/
__fop_init_recover ../fileops/fileops_auto.c /^__fop_init_recover(dbenv, dtabp, dtabsizep)$/
+__fop_inmem_create ../fileops/fop_util.c /^__fop_inmem_create(dbp, name, txn, flags)$/
+__fop_inmem_dummy ../fileops/fop_util.c /^__fop_inmem_dummy(dbp, txn, name, mbuf)$/
+__fop_inmem_read_meta ../fileops/fop_util.c /^__fop_inmem_read_meta(dbp, txn, name, flags)$/
+__fop_inmem_swap ../fileops/fop_util.c /^__fop_inmem_swap(olddbp, backdbp, txn, old, new, b/
__fop_lock_handle ../fileops/fop_util.c /^__fop_lock_handle(dbenv, dbp, locker, mode, elockp/
+__fop_ondisk_dummy ../fileops/fop_util.c /^__fop_ondisk_dummy(dbp, txn, name, mbuf, flags)$/
+__fop_ondisk_swap ../fileops/fop_util.c /^__fop_ondisk_swap(dbp, tmpdbp, txn, old, new, back/
__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_log ../fileops/fileops_auto.c /^__fop_remove_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_remove_log ../fileops/fileops_auto.c /^__fop_remove_log(dbenv, txnp, ret_lsnp, flags,$/
__fop_remove_print ../fileops/fileops_autop.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_log ../fileops/fileops_auto.c /^__fop_rename_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_rename_log ../fileops/fileops_auto.c /^__fop_rename_log(dbenv, txnp, ret_lsnp, flags,$/
__fop_rename_print ../fileops/fileops_autop.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_log ../fileops/fileops_auto.c /^__fop_write_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_write_log ../fileops/fileops_auto.c /^__fop_write_log(dbenv, txnp, ret_lsnp, flags,$/
__fop_write_print ../fileops/fileops_autop.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)$/
@@ -3285,7 +3484,8 @@ __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, lsnp)$/
+__ham_alloc_pages ../hash/hash_rec.c /^__ham_alloc_pages(file_dbp, argp, lsnp)$/
+__ham_alloc_pages_42 ../hash/hash_rec.c /^__ham_alloc_pages_42(dbp, argp, lsnp)$/
__ham_bulk ../hash/hash.c /^__ham_bulk(dbc, data, flags)$/
__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)$/
@@ -3301,16 +3501,16 @@ __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(dbp, txnid, ret_lsnp, flags, mode,/
+__ham_chgpg_log ../hash/hash_auto.c /^__ham_chgpg_log(dbp, txnp, ret_lsnp, flags, mode, /
__ham_chgpg_print ../hash/hash_autop.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(dbp, src_page, src_ndx, dest_page)/
-__ham_copypage_log ../hash/hash_auto.c /^__ham_copypage_log(dbp, txnid, ret_lsnp, flags, pg/
+__ham_copypage_log ../hash/hash_auto.c /^__ham_copypage_log(dbp, txnp, ret_lsnp, flags, pgn/
__ham_copypage_print ../hash/hash_autop.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_curadj_log ../hash/hash_auto.c /^__ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno/
+__ham_curadj_log ../hash/hash_auto.c /^__ham_curadj_log(dbp, txnp, ret_lsnp, flags, pgno,/
__ham_curadj_print ../hash/hash_autop.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)$/
@@ -3318,7 +3518,7 @@ __ham_db_close ../hash/hash_method.c /^__ham_db_close(dbp)$/
__ham_db_create ../hash/hash_method.c /^__ham_db_create(dbp)$/
__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_dirty_meta ../hash/hash_meta.c /^__ham_dirty_meta(dbc, flags)$/
__ham_dpair ../hash/hash_page.c /^__ham_dpair(dbp, p, indx)$/
__ham_dsearch ../hash/hash_dup.c /^__ham_dsearch(dbc, dbt, offp, cmpp, flags)$/
__ham_dup_convert ../hash/hash_dup.c /^__ham_dup_convert(dbc)$/
@@ -3334,7 +3534,10 @@ __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_groupalloc_log ../hash/hash_auto.c /^__ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, /
+__ham_groupalloc_42_print ../hash/hash_autop.c /^__ham_groupalloc_42_print(dbenv, dbtp, lsnp, notus/
+__ham_groupalloc_42_read ../hash/hash_auto.c /^__ham_groupalloc_42_read(dbenv, recbuf, argpp)$/
+__ham_groupalloc_42_recover ../hash/hash_rec.c /^__ham_groupalloc_42_recover(dbenv, dbtp, lsnp, op,/
+__ham_groupalloc_log ../hash/hash_auto.c /^__ham_groupalloc_log(dbp, txnp, ret_lsnp, flags, m/
__ham_groupalloc_print ../hash/hash_autop.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/
@@ -3342,7 +3545,7 @@ __ham_init_dbt ../hash/hash.c /^__ham_init_dbt(dbenv, dbt, size, bufp, sizep)$/
__ham_init_meta ../hash/hash_open.c /^__ham_init_meta(dbp, meta, pgno, lsnp)$/
__ham_init_print ../hash/hash_autop.c /^__ham_init_print(dbenv, dtabp, dtabsizep)$/
__ham_init_recover ../hash/hash_auto.c /^__ham_init_recover(dbenv, dtabp, dtabsizep)$/
-__ham_insdel_log ../hash/hash_auto.c /^__ham_insdel_log(dbp, txnid, ret_lsnp, flags,$/
+__ham_insdel_log ../hash/hash_auto.c /^__ham_insdel_log(dbp, txnp, ret_lsnp, flags,$/
__ham_insdel_print ../hash/hash_autop.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)$/
@@ -3356,9 +3559,12 @@ __ham_item_reset ../hash/hash_page.c /^__ham_item_reset(dbc)$/
__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_meta2pgset ../hash/hash_verify.c /^__ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)$/
__ham_metachk ../hash/hash_open.c /^__ham_metachk(dbp, name, hashm)$/
-__ham_metagroup_log ../hash/hash_auto.c /^__ham_metagroup_log(dbp, txnid, ret_lsnp, flags, b/
+__ham_metagroup_42_print ../hash/hash_autop.c /^__ham_metagroup_42_print(dbenv, dbtp, lsnp, notuse/
+__ham_metagroup_42_read ../hash/hash_auto.c /^__ham_metagroup_42_read(dbenv, recbuf, argpp)$/
+__ham_metagroup_42_recover ../hash/hash_rec.c /^__ham_metagroup_42_recover(dbenv, dbtp, lsnp, op, /
+__ham_metagroup_log ../hash/hash_auto.c /^__ham_metagroup_log(dbp, txnp, ret_lsnp, flags, bu/
__ham_metagroup_print ../hash/hash_autop.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/
@@ -3366,11 +3572,11 @@ __ham_move_offpage ../hash/hash_dup.c /^__ham_move_offpage(dbc, pagep, ndx, pgno
__ham_mswap ../hash/hash_conv.c /^__ham_mswap(pg)$/
__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_log ../hash/hash_auto.c /^__ham_newpage_log(dbp, txnid, ret_lsnp, flags,$/
+__ham_newpage_log ../hash/hash_auto.c /^__ham_newpage_log(dbp, txnp, ret_lsnp, flags,$/
__ham_newpage_print ../hash/hash_autop.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_next_cpage ../hash/hash_page.c /^__ham_next_cpage(dbc, pgno, dirty)$/
+__ham_next_cpage ../hash/hash_page.c /^__ham_next_cpage(dbc, pgno)$/
__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)$/
@@ -3381,7 +3587,7 @@ __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(dbp, txnid, ret_lsnp, flags, pgn/
+__ham_replace_log ../hash/hash_auto.c /^__ham_replace_log(dbp, txnp, ret_lsnp, flags, pgno/
__ham_replace_print ../hash/hash_autop.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)/
@@ -3392,7 +3598,7 @@ __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(dbp, txnid, ret_lsnp, flags, o/
+__ham_splitdata_log ../hash/hash_auto.c /^__ham_splitdata_log(dbp, txnp, ret_lsnp, flags, op/
__ham_splitdata_print ../hash/hash_autop.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/
@@ -3408,11 +3614,13 @@ __ham_vrfy_hashing ../hash/hash_verify.c /^__ham_vrfy_hashing(dbp, nentries, m,
__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)$/
-__int64 ../libdb_java/db_java_wrap.c 13
+__hdr ../dbinc/log.h /^struct __hdr {$/
+__int64 ../libdb_java/db_java_wrap.c /^ typedef long long __int64;$/
+__key_range ../dbinc/db.in /^struct __key_range {$/
+__kids ../dbinc/db.in /^ struct __kids {$/
__lock_addfamilylocker ../lock/lock_id.c /^__lock_addfamilylocker(dbenv, pid, id)$/
-__lock_cmp ../lock/lock_util.c /^__lock_cmp(dbt, lock_obj)$/
-__lock_dbenv_close ../lock/lock_method.c /^__lock_dbenv_close(dbenv)$/
__lock_dbenv_create ../lock/lock_method.c /^__lock_dbenv_create(dbenv)$/
+__lock_dbenv_destroy ../lock/lock_method.c /^__lock_dbenv_destroy(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)$/
@@ -3421,6 +3629,7 @@ __lock_dump_locker ../lock/lock_stat.c /^__lock_dump_locker(dbenv, mbp, lt, lip)
__lock_dump_object ../lock/lock_stat.c /^__lock_dump_object(lt, mbp, op)$/
__lock_expired ../lock/lock_timer.c /^__lock_expired(dbenv, now, timevalp)$/
__lock_expires ../lock/lock_timer.c /^__lock_expires(dbenv, timevalp, timeout)$/
+__lock_failchk ../lock/lock_failchk.c /^__lock_failchk(dbenv)$/
__lock_fix_list ../lock/lock_list.c /^__lock_fix_list(dbenv, list_dbt, nlocks)$/
__lock_freefamilylocker ../lock/lock_id.c /^__lock_freefamilylocker(lt, locker)$/
__lock_freelock ../lock/lock.c /^__lock_freelock(lt, lockp, locker, flags)$/
@@ -3437,7 +3646,7 @@ __lock_get_lk_max_objects ../lock/lock_method.c /^__lock_get_lk_max_objects(dben
__lock_get_pp ../lock/lock.c /^__lock_get_pp(dbenv, locker, flags, obj, lock_mode/
__lock_getlocker ../lock/lock_id.c /^__lock_getlocker(lt, locker, indx, create, retp)$/
__lock_getobj ../lock/lock.c /^__lock_getobj(lt, obj, ndx, create, retp)$/
-__lock_id ../lock/lock_id.c /^__lock_id(dbenv, idp)$/
+__lock_id ../lock/lock_id.c /^__lock_id(dbenv, idp, lkp)$/
__lock_id_free ../lock/lock_id.c /^__lock_id_free(dbenv, id)$/
__lock_id_free_pp ../lock/lock_id.c /^__lock_id_free_pp(dbenv, id)$/
__lock_id_pp ../lock/lock_id.c /^__lock_id_pp(dbenv, idp)$/
@@ -3447,8 +3656,7 @@ __lock_inherit_timeout ../lock/lock_timer.c /^__lock_inherit_timeout(dbenv, pare
__lock_is_parent ../lock/lock.c /^__lock_is_parent(lt, locker, sh_locker)$/
__lock_lhash ../lock/lock_util.c /^__lock_lhash(lock_obj)$/
__lock_list_print ../lock/lock_list.c /^__lock_list_print(dbenv, list)$/
-__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_locker_hash ../dbinc/lock.h /^#define __lock_locker_hash(locker) (locker)$/
__lock_locker_is_parent ../lock/lock.c /^__lock_locker_is_parent(dbenv, locker, child, retp/
__lock_nomem ../lock/lock_util.c /^__lock_nomem(dbenv, res)$/
__lock_ohash ../lock/lock_util.c /^__lock_ohash(dbt)$/
@@ -3457,23 +3665,22 @@ __lock_print_all ../lock/lock_stat.c /^__lock_print_all(dbenv, flags)$/
__lock_print_header ../lock/lock_stat.c /^__lock_print_header(dbenv)$/
__lock_print_stats ../lock/lock_stat.c /^__lock_print_stats(dbenv, flags)$/
__lock_printlock ../lock/lock_stat.c /^__lock_printlock(lt, mbp, lp, ispgno)$/
-__lock_promote ../lock/lock.c /^__lock_promote(lt, obj, flags)$/
-__lock_put ../lock/lock.c /^__lock_put(dbenv, lock, flags)$/
+__lock_promote ../lock/lock.c /^__lock_promote(lt, obj, state_changedp, 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_init ../lock/lock_region.c /^__lock_region_init(dbenv, lt)$/
-__lock_region_maint ../lock/lock_region.c /^__lock_region_maint(dbenv)$/
+__lock_region_mutex_count ../lock/lock_region.c /^__lock_region_mutex_count(dbenv)$/
__lock_region_size ../lock/lock_region.c /^__lock_region_size(dbenv)$/
__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)$/
+__lock_set_thread_id ../lock/lock_id.c /^__lock_set_thread_id(lref, pid, tid)$/
__lock_set_timeout ../lock/lock_timer.c /^__lock_set_timeout(dbenv, locker, timeout, op)$/
__lock_set_timeout_internal ../lock/lock_timer.c /^__lock_set_timeout_internal(dbenv, locker, timeout/
__lock_sort_cmp ../lock/lock_list.c /^__lock_sort_cmp(a, b)$/
@@ -3484,6 +3691,7 @@ __lock_stat_print_pp ../lock/lock_stat.c /^__lock_stat_print_pp(dbenv, 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 ../dbinc/log.h /^struct __log {$/
__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_archive.c /^__log_autoremove(dbenv)$/
@@ -3500,10 +3708,15 @@ __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_c_version ../log/log_get.c /^__log_c_version(logc, versionp)$/
+__log_c_version_pp ../log/log_get.c /^__log_c_version_pp(logc, versionp, flags)$/
+__log_check_page_lsn ../log/log_compare.c /^__log_check_page_lsn(dbenv, dbp, lsnp)$/
__log_check_sizes ../log/log_method.c /^__log_check_sizes(dbenv, lg_max, lg_bsize)$/
+__log_current_lsn ../log/log_put.c /^__log_current_lsn(dbenv, lsnp, mbytesp, bytesp)$/
__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_dbenv_destroy ../log/log_method.c /^__log_dbenv_destroy(dbenv)$/
__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)$/
@@ -3519,64 +3732,87 @@ __log_get_cached_ckp_lsn ../log/log.c /^__log_get_cached_ckp_lsn(dbenv, ckp_lsnp
__log_get_flags ../log/log_method.c /^__log_get_flags(dbenv, flagsp)$/
__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_filemode ../log/log_method.c /^__log_get_lg_filemode(dbenv, lg_modep)$/
__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_get_oldversion ../log/log.c /^__log_get_oldversion(dbenv, ver)$/
+__log_get_stable_lsn ../log/log_archive.c /^__log_get_stable_lsn(dbenv, stable_lsn)$/
__log_init ../log/log.c /^__log_init(dbenv, dblp)$/
__log_inmem_chkspace ../log/log.c /^__log_inmem_chkspace(dblp, len)$/
__log_inmem_copyin ../log/log.c /^__log_inmem_copyin(dblp, offset, buf, size)$/
__log_inmem_copyout ../log/log.c /^__log_inmem_copyout(dblp, offset, buf, size)$/
-__log_inmem_lsnoff ../log/log.c /^__log_inmem_lsnoff(dblp, lsn, offsetp)$/
+__log_inmem_lsnoff ../log/log.c /^__log_inmem_lsnoff(dblp, lsnp, offsetp)$/
__log_inmem_newfile ../log/log.c /^__log_inmem_newfile(dblp, file)$/
__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, create)$/
-__log_newfile ../log/log_put.c /^__log_newfile(dblp, lsnp, logfile)$/
+__log_newfile ../log/log_put.c /^__log_newfile(dblp, lsnp, logfile, version)$/
__log_open ../log/log.c /^__log_open(dbenv)$/
+__log_persist ../dbinc/log.h /^struct __log_persist {$/
__log_print_all ../log/log_stat.c /^__log_print_all(dbenv, flags)$/
__log_print_stats ../log/log_stat.c /^__log_print_stats(dbenv, flags)$/
+__log_printf ../log/log_debug.c /^__log_printf(dbenv, txnid, fmt, va_alist)$/
+__log_printf_capi ../log/log_debug.c /^__log_printf_capi(dbenv, txnid, fmt, va_alist)$/
+__log_printf_int ../log/log_debug.c /^__log_printf_int(dbenv, txnid, fmt, ap)$/
+__log_printf_pp ../log/log_debug.c /^__log_printf_pp(dbenv, txnid, fmt, ap)$/
__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_mutex_count ../log/log.c /^__log_region_mutex_count(dbenv)$/
__log_region_size ../log/log.c /^__log_region_size(dbenv)$/
__log_rep_put ../log/log_put.c /^__log_rep_put(dbenv, lsnp, rec)$/
+__log_rep_split ../log/log_get.c /^__log_rep_split(dbenv, rp, rec, ret_lsnp, last_lsn/
__log_set_flags ../log/log_method.c /^__log_set_flags(dbenv, flags, on)$/
__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_filemode ../log/log_method.c /^__log_set_lg_filemode(dbenv, lg_mode)$/
__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_set_version ../log/log.c /^__log_set_version(dbenv, newver)$/
__log_stat ../log/log_stat.c /^__log_stat(dbenv, statp, flags)$/
__log_stat_pp ../log/log_stat.c /^__log_stat_pp(dbenv, statp, flags)$/
__log_stat_print ../log/log_stat.c /^__log_stat_print(dbenv, flags)$/
__log_stat_print_pp ../log/log_stat.c /^__log_stat_print_pp(dbenv, 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, infop, mfp, len, offsetp, retp)/
-__memp_bad_buffer ../mp/mp_alloc.c /^__memp_bad_buffer(hp)$/
+__memp_alloc_freelist ../mp/mp_method.c /^__memp_alloc_freelist(dbmfp, nelems, listp)$/
+__memp_bad_buffer ../mp/mp_alloc.c /^__memp_bad_buffer(dbenv, hp)$/
+__memp_bh_freeze ../mp/mp_mvcc.c /^__memp_bh_freeze(dbmp, infop, hp, bhp, need_frozen/
+__memp_bh_priority ../mp/mp_mvcc.c /^__memp_bh_priority(bhp)$/
+__memp_bh_settxn ../mp/mp_mvcc.c /^int __memp_bh_settxn(dbmp, mfp, bhp, vtd)$/
+__memp_bh_thaw ../mp/mp_mvcc.c /^__memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_/
__memp_bhfree ../mp/mp_bh.c /^__memp_bhfree(dbmp, hp, bhp, flags)$/
__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_bucket_reorder ../mp/mp_mvcc.c /^__memp_bucket_reorder(dbenv, hp, bhp)$/
+__memp_check_order ../mp/mp_alloc.c /^__memp_check_order(dbenv, hp)$/
__memp_close_flush_files ../mp/mp_sync.c /^__memp_close_flush_files(dbenv, dbmp, dosync)$/
+__memp_count_files ../mp/mp_stat.c /^__memp_count_files(dbenv, mfp, argp, countp, flags/
__memp_dbenv_create ../mp/mp_method.c /^__memp_dbenv_create(dbenv)$/
+__memp_dbenv_destroy ../mp/mp_method.c /^__memp_dbenv_destroy(dbenv)$/
__memp_dbenv_refresh ../mp/mp_region.c /^__memp_dbenv_refresh(dbenv)$/
+__memp_dirty ../mp/mp_fset.c /^__memp_dirty(dbmfp, addrp, txn, flags)$/
+__memp_extend_freelist ../mp/mp_method.c /^__memp_extend_freelist(dbmfp, count, listp)$/
__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_fmethod.c /^__memp_fcreate(dbenv, retp)$/
__memp_fcreate_pp ../mp/mp_fmethod.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_fget ../mp/mp_fget.c /^__memp_fget(dbmfp, pgnoaddr, txn, flags, addrp)$/
+__memp_fget_pp ../mp/mp_fget.c /^__memp_fget_pp(dbmfp, pgnoaddr, txnp, flags, addrp/
+__memp_file_stats ../mp/mp_stat.c /^__memp_file_stats(dbenv, mfp, argp, countp, flags)/
__memp_fn ../mp/mp_fmethod.c /^__memp_fn(dbmfp)$/
__memp_fns ../mp/mp_fmethod.c /^__memp_fns(dbmp, mfp)$/
__memp_fopen ../mp/mp_fopen.c /^__memp_fopen(dbmfp, mfp, path, flags, mode, pgsize/
__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_free ../mp/mp_alloc.c /^__memp_free(infop, mfp, buf)$/
+__memp_free_freelist ../mp/mp_method.c /^__memp_free_freelist(dbmfp)$/
__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)$/
@@ -3585,7 +3821,9 @@ __memp_ftruncate ../mp/mp_method.c /^__memp_ftruncate(dbmfp, pgno, flags)$/
__memp_get_cachesize ../mp/mp_method.c /^__memp_get_cachesize(dbenv, gbytesp, bytesp, ncach/
__memp_get_clear_len ../mp/mp_fmethod.c /^__memp_get_clear_len(dbmfp, clear_lenp)$/
__memp_get_fileid ../mp/mp_fmethod.c /^__memp_get_fileid(dbmfp, fileid)$/
+__memp_get_files ../mp/mp_stat.c /^__memp_get_files(dbenv, mfp, argp, countp, flags)$/
__memp_get_flags ../mp/mp_fmethod.c /^__memp_get_flags(dbmfp, flagsp)$/
+__memp_get_freelist ../mp/mp_method.c /^__memp_get_freelist(dbmfp, nelemp, listp)$/
__memp_get_ftype ../mp/mp_fmethod.c /^__memp_get_ftype(dbmfp, ftypep)$/
__memp_get_lsn_offset ../mp/mp_fmethod.c /^__memp_get_lsn_offset(dbmfp, lsn_offsetp)$/
__memp_get_maxsize ../mp/mp_fmethod.c /^__memp_get_maxsize(dbmfp, gbytesp, bytesp)$/
@@ -3594,23 +3832,25 @@ __memp_get_mp_max_write ../mp/mp_method.c /^__memp_get_mp_max_write(dbenv, maxwr
__memp_get_mp_mmapsize ../mp/mp_method.c /^__memp_get_mp_mmapsize(dbenv, mp_mmapsizep)$/
__memp_get_pgcookie ../mp/mp_fmethod.c /^__memp_get_pgcookie(dbmfp, pgcookie)$/
__memp_get_priority ../mp/mp_fmethod.c /^__memp_get_priority(dbmfp, priorityp)$/
-__memp_get_refcnt ../mp/mp_method.c /^__memp_get_refcnt(dbenv, fileid, refp)$/
__memp_init ../mp/mp_region.c /^__memp_init(dbenv, dbmp, reginfo_off, htab_buckets/
__memp_init_config ../mp/mp_region.c /^__memp_init_config(dbenv, mp)$/
+__memp_inmemlist ../mp/mp_fopen.c /^__memp_inmemlist(dbenv, namesp, cntp)$/
__memp_last_pgno ../mp/mp_fmethod.c /^__memp_last_pgno(dbmfp, pgnoaddr)$/
__memp_mf_discard ../mp/mp_fopen.c /^__memp_mf_discard(dbmp, mfp)$/
-__memp_mf_sync ../mp/mp_sync.c /^__memp_mf_sync(dbmp, mfp)$/
+__memp_mf_sync ../mp/mp_sync.c /^__memp_mf_sync(dbmp, mfp, region_locked)$/
+__memp_mfp_alloc ../mp/mp_fopen.c /^__memp_mfp_alloc(dbmp, dbmfp, path, pagesize, flag/
__memp_nameop ../mp/mp_method.c /^__memp_nameop(dbenv, fileid, newname, fullold, ful/
__memp_open ../mp/mp_region.c /^__memp_open(dbenv)$/
__memp_pg ../mp/mp_bh.c /^__memp_pg(dbmfp, bhp, is_pgin)$/
-__memp_pgread ../mp/mp_bh.c /^__memp_pgread(dbmfp, mutexp, bhp, can_create)$/
+__memp_pgread ../mp/mp_bh.c /^__memp_pgread(dbmfp, hp, bhp, can_create)$/
__memp_pgwrite ../mp/mp_bh.c /^__memp_pgwrite(dbenv, dbmfp, hp, bhp)$/
__memp_print_all ../mp/mp_stat.c /^__memp_print_all(dbenv, flags)$/
-__memp_print_bh ../mp/mp_stat.c /^__memp_print_bh(dbenv, dbmp, bhp, fmap, flags)$/
+__memp_print_bh ../mp/mp_stat.c /^__memp_print_bh(dbenv, dbmp, prefix, bhp, fmap)$/
+__memp_print_files ../mp/mp_stat.c /^__memp_print_files(dbenv, mfp, argp, countp, flags/
__memp_print_hash ../mp/mp_stat.c /^__memp_print_hash(dbenv, dbmp, reginfo, fmap, flag/
__memp_print_stats ../mp/mp_stat.c /^__memp_print_stats(dbenv, flags)$/
-__memp_region_destroy ../mp/mp_region.c /^__memp_region_destroy(dbenv, infop)$/
-__memp_region_maint ../mp/mp_region.c /^__memp_region_maint(infop)$/
+__memp_region_mutex_count ../mp/mp_region.c /^__memp_region_mutex_count(dbenv)$/
+__memp_region_size ../mp/mp_region.c /^__memp_region_size(dbenv, reg_sizep, htab_bucketsp/
__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, infop)$/
@@ -3626,20 +3866,62 @@ __memp_set_mp_max_write ../mp/mp_method.c /^__memp_set_mp_max_write(dbenv, maxwr
__memp_set_mp_mmapsize ../mp/mp_method.c /^__memp_set_mp_mmapsize(dbenv, mp_mmapsize)$/
__memp_set_pgcookie ../mp/mp_fmethod.c /^__memp_set_pgcookie(dbmfp, pgcookie)$/
__memp_set_priority ../mp/mp_fmethod.c /^__memp_set_priority(dbmfp, priority)$/
+__memp_skip_curadj ../mp/mp_mvcc.c /^__memp_skip_curadj(dbc, pgno)$/
__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_print ../mp/mp_stat.c /^__memp_stat_print(dbenv, flags)$/
__memp_stat_print_pp ../mp/mp_stat.c /^__memp_stat_print_pp(dbenv, flags)$/
-__memp_stat_wait ../mp/mp_stat.c /^__memp_stat_wait(reginfo, mp, mstat, flags)$/
+__memp_stat_wait ../mp/mp_stat.c /^__memp_stat_wait(dbenv, reginfo, mp, mstat, flags)/
__memp_sync ../mp/mp_sync.c /^__memp_sync(dbenv, lsnp)$/
+__memp_sync_file ../mp/mp_sync.c /^__memp_sync_file(dbenv, mfp, argp, countp, flags)$/
__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)$/
+__memp_walk_files ../mp/mp_sync.c /^__memp_walk_files(dbenv, mp, func, arg, countp, fl/
__mp_xxx_fh ../mp/mp_sync.c /^__mp_xxx_fh(dbmfp, fhp)$/
__mpe_fsync ../os/os_fsync.c /^__mpe_fsync(fd)$/
+__mpool ../dbinc/mp.h /^struct __mpool {$/
+__mpoolfile ../dbinc/mp.h /^struct __mpoolfile {$/
+__mut_failchk ../mutex/mut_failchk.c /^__mut_failchk(dbenv)$/
+__mutex_alloc ../mutex/mut_alloc.c /^__mutex_alloc(dbenv, alloc_id, flags, indxp)$/
+__mutex_alloc_int ../mutex/mut_alloc.c /^__mutex_alloc_int(dbenv, locksys, alloc_id, flags,/
+__mutex_alloc_pp ../mutex/mut_method.c /^__mutex_alloc_pp(dbenv, flags, indxp)$/
+__mutex_clear ../mutex/mut_stat.c /^__mutex_clear(dbenv, mutex)$/
+__mutex_dbenv_refresh ../mutex/mut_region.c /^__mutex_dbenv_refresh(dbenv)$/
+__mutex_destroy ../dbinc/mutex.h /^#define __mutex_destroy(a, b) __db_pthread_mutex_/
+__mutex_free ../mutex/mut_alloc.c /^__mutex_free(dbenv, indxp)$/
+__mutex_free_int ../mutex/mut_alloc.c /^__mutex_free_int(dbenv, locksys, indxp)$/
+__mutex_free_pp ../mutex/mut_method.c /^__mutex_free_pp(dbenv, indx)$/
+__mutex_get_align ../mutex/mut_method.c /^__mutex_get_align(dbenv, alignp)$/
+__mutex_get_increment ../mutex/mut_method.c /^__mutex_get_increment(dbenv, incrementp)$/
+__mutex_get_max ../mutex/mut_method.c /^__mutex_get_max(dbenv, maxp)$/
+__mutex_get_tas_spins ../mutex/mut_method.c /^__mutex_get_tas_spins(dbenv, tas_spinsp)$/
+__mutex_init ../dbinc/mutex.h /^#define __mutex_init(a, b, c) __db_pthread_mutex_/
+__mutex_lock ../dbinc/mutex.h /^#define __mutex_lock(a, b) __db_pthread_mutex_loc/
+__mutex_lock_pp ../mutex/mut_method.c /^__mutex_lock_pp(dbenv, indx)$/
+__mutex_open ../mutex/mut_region.c /^__mutex_open(dbenv)$/
+__mutex_print_all ../mutex/mut_stat.c /^__mutex_print_all(dbenv, flags)$/
+__mutex_print_debug_single ../mutex/mut_stat.c /^__mutex_print_debug_single(dbenv, tag, mutex, flag/
+__mutex_print_debug_stats ../mutex/mut_stat.c /^__mutex_print_debug_stats(dbenv, mbp, mutex, flags/
+__mutex_print_id ../mutex/mut_stat.c /^__mutex_print_id(alloc_id)$/
+__mutex_print_stats ../mutex/mut_stat.c /^__mutex_print_stats(dbenv, flags)$/
+__mutex_print_summary ../mutex/mut_stat.c /^__mutex_print_summary(dbenv)$/
+__mutex_region_init ../mutex/mut_region.c /^__mutex_region_init(dbenv, mtxmgr)$/
+__mutex_region_size ../mutex/mut_region.c /^__mutex_region_size(dbenv)$/
+__mutex_resource_return ../mutex/mut_region.c /^__mutex_resource_return(dbenv, infop)$/
+__mutex_set_align ../mutex/mut_method.c /^__mutex_set_align(dbenv, align)$/
+__mutex_set_increment ../mutex/mut_method.c /^__mutex_set_increment(dbenv, increment)$/
+__mutex_set_max ../mutex/mut_method.c /^__mutex_set_max(dbenv, max)$/
+__mutex_set_tas_spins ../mutex/mut_method.c /^__mutex_set_tas_spins(dbenv, tas_spins)$/
+__mutex_set_wait_info ../mutex/mut_stat.c /^__mutex_set_wait_info(dbenv, mutex, waitp, nowaitp/
+__mutex_stat ../mutex/mut_stat.c /^__mutex_stat(dbenv, statp, flags)$/
+__mutex_stat_print ../mutex/mut_stat.c /^__mutex_stat_print(dbenv, flags)$/
+__mutex_unlock ../dbinc/mutex.h /^#define __mutex_unlock(a, b) __db_pthread_mutex_u/
+__mutex_unlock_pp ../mutex/mut_method.c /^__mutex_unlock_pp(dbenv, indx)$/
+__no_system_mem ../os/os_map.c /^__no_system_mem(dbenv)$/
__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)$/
@@ -3648,28 +3930,31 @@ __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_exists ../os/os_stat.c /^__os_exists(dbenv, path, isdirp)$/
+__os_fdlock ../os/os_flock.c /^__os_fdlock(dbenv, fhp, offset, acquire, nowait)$/
__os_fileid ../os/os_fid.c /^__os_fileid(dbenv, fname, unique_okay, fidp)$/
__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_get_neterr ../os/os_errno.c /^__os_get_neterr()$/
+__os_get_syserr ../os/os_errno.c /^__os_get_syserr()$/
+__os_getenv ../os/os_getenv.c /^__os_getenv(dbenv, name, bpp, buflen)$/
__os_guard ../os/os_alloc.c /^__os_guard(dbenv)$/
-__os_have_direct ../os/os_open.c /^__os_have_direct()$/
-__os_id ../os/os_id.c /^__os_id(idp)$/
-__os_intermediate_dir ../os/os_open.c /^__os_intermediate_dir(dbenv, name)$/
-__os_io ../os/os_rw.c /^__os_io(dbenv, op, fhp, pgno, pagesize, buf, niop)/
+__os_id ../os/os_pid.c /^__os_id(dbenv, pidp, tidp)$/
+__os_io ../os/os_rw.c /^__os_io(dbenv, op, fhp, pgno, pgsize, relative, io/
__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_mkdir ../os/os_open.c /^__os_mkdir(dbenv, name)$/
+__os_mkdir ../os/os_mkdir.c /^__os_mkdir(dbenv, name, mode)$/
__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, page_size, flags, mo/
__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_posix_err ../os/os_errno.c /^__os_posix_err(error)$/
__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)$/
@@ -3680,27 +3965,32 @@ __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_unlink ../os/os_unlink.c /^__os_region_unlink(dbenv, path)$/
__os_rename ../os/os_rename.c /^__os_rename(dbenv, old, new, silent)$/
-__os_seek ../os/os_seek.c /^__os_seek(dbenv, fhp, pgsize, pageno, relative, is/
+__os_seek ../os/os_seek.c /^__os_seek(dbenv, fhp, pgno, pgsize, relative)$/
__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(dbenv)$/
__os_strdup ../os/os_alloc.c /^__os_strdup(dbenv, str, storep)$/
+__os_strerror ../os/os_errno.c /^__os_strerror(error, buf, len)$/
+__os_support_db_register ../os/os_config.c /^__os_support_db_register()$/
+__os_support_direct_io ../os/os_config.c /^__os_support_direct_io()$/
+__os_support_replication ../os/os_config.c /^__os_support_replication()$/
__os_sysconf ../os/os_spin.c /^__os_sysconf()$/
__os_tmpdir ../os/os_tmpdir.c /^__os_tmpdir(dbenv, flags)$/
__os_truncate ../os/os_truncate.c /^__os_truncate(dbenv, fhp, pgno, pgsize)$/
__os_ufree ../os/os_alloc.c /^__os_ufree(dbenv, ptr)$/
__os_umalloc ../os/os_alloc.c /^__os_umalloc(dbenv, size, storep)$/
-__os_unique_id ../os/os_id.c /^__os_unique_id(dbenv, idp)$/
+__os_unique_id ../os/os_uid.c /^__os_unique_id(dbenv, idp)$/
__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)$/
+__os_yield ../os/os_yield.c /^__os_yield(dbenv)$/
+__os_zerofill ../os/os_fzero.c /^__os_zerofill(dbenv, fhp)$/
+__pgno_cmp ../mp/mp_mvcc.c /^__pgno_cmp(a, b)$/
__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(dbp, txnid, ret_lsnp, flags, lsn, pg/
+__qam_add_log ../qam/qam_auto.c /^__qam_add_log(dbp, txnp, ret_lsnp, flags, lsn, pgn/
__qam_add_print ../qam/qam_autop.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)$/
@@ -3716,25 +4006,27 @@ __qam_c_put ../qam/qam.c /^__qam_c_put(dbc, key, data, flags, pgnop)$/
__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(dbp, txnid, ret_lsnp, flags, lsn, pg/
+__qam_del_log ../qam/qam_auto.c /^__qam_del_log(dbp, txnp, ret_lsnp, flags, lsn, pgn/
__qam_del_print ../qam/qam_autop.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_delext_log ../qam/qam_auto.c /^__qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn,/
+__qam_delete ../qam/qam.c /^__qam_delete(dbc, key)$/
+__qam_delext_log ../qam/qam_auto.c /^__qam_delext_log(dbp, txnp, ret_lsnp, flags, lsn, /
__qam_delext_print ../qam/qam_autop.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_dirty ../dbinc/qam.h /^#define __qam_dirty(dbp, pgno, pagep, lsnp, flags)/
__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 ../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 ../dbinc/qam.h /^#define __qam_fput(dbp, pageno, addrp, flags) \\$/
+__qam_fget ../dbinc/qam.h /^#define __qam_fget(dbp, pgnoaddr, lsnp, flags, add/
+__qam_fprobe ../qam/qam_files.c /^__qam_fprobe(dbp, pgno, txn, addrp, mode, flags)$/
+__qam_fput ../dbinc/qam.h /^#define __qam_fput(dbp, pgno, 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_incfirst_log ../qam/qam_auto.c /^__qam_incfirst_log(dbp, txnid, ret_lsnp, flags, re/
+__qam_incfirst_log ../qam/qam_auto.c /^__qam_incfirst_log(dbp, txnp, ret_lsnp, flags, rec/
__qam_incfirst_print ../qam/qam_autop.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/
@@ -3744,7 +4036,7 @@ __qam_init_recover ../qam/qam_auto.c /^__qam_init_recover(dbenv, dtabp, dtabsize
__qam_map_flags ../qam/qam_method.c /^__qam_map_flags(dbp, inflagsp, outflagsp)$/
__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(dbp, txnid, ret_lsnp, flags,$/
+__qam_mvptr_log ../qam/qam_auto.c /^__qam_mvptr_log(dbp, txnp, ret_lsnp, flags,$/
__qam_mvptr_print ../qam/qam_autop.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)$/
@@ -3753,7 +4045,7 @@ __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_position ../qam/qam.c /^__qam_position(dbc, recnop, lock_mode, get_mode, e/
__qam_remove ../qam/qam_method.c /^__qam_remove(dbp, txn, name, subdb)$/
__qam_rename ../qam/qam_method.c /^__qam_rename(dbp, txn, name, subdb, newname)$/
__qam_rr ../qam/qam_method.c /^__qam_rr(dbp, txn, name, subdb, newname, op)$/
@@ -3770,14 +4062,18 @@ __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)$/
__qam_vrfy_walkqueue ../qam/qam_verify.c /^__qam_vrfy_walkqueue(dbp, vdp, handle, callback, f/
+__qcursor ../dbinc/qam.h /^struct __qcursor {$/
+__qmpf ../dbinc/qam.h /^ struct __qmpf {$/
+__queue ../dbinc/qam.h /^struct __queue {$/
__queue_pageinfo ../qam/qam_method.c /^__queue_pageinfo(dbp, firstp, lastp, emptyp, prpag/
+__queued_output ../dbinc/repmgr.h /^struct __queued_output {$/
__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)$/
__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_ca ../btree/bt_recno.c /^__ram_ca(dbc_arg, op, foundp)$/
+__ram_ca_delete ../btree/bt_curadj.c /^__ram_ca_delete(dbp, root_pgno, foundp)$/
__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)$/
@@ -3799,85 +4095,209 @@ __ram_vrfy_leaf ../btree/bt_verify.c /^__ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
__ram_writeback ../btree/bt_recno.c /^__ram_writeback(dbp)$/
__reg_type ../env/env_stat.c /^__reg_type(t)$/
__rep_abort_prepared ../rep/rep_method.c /^__rep_abort_prepared(dbenv)$/
-__rep_apply ../rep/rep_record.c /^__rep_apply(dbenv, rp, rec, ret_lsnp, is_dupp)$/
+__rep_allreq ../rep/rep_log.c /^__rep_allreq(dbenv, rp, eid)$/
+__rep_apply ../rep/rep_record.c /^__rep_apply(dbenv, rp, rec, ret_lsnp, is_dupp, las/
__rep_bt_cmp ../rep/rep_method.c /^__rep_bt_cmp(dbp, dbt1, dbt2)$/
+__rep_bulk_alloc ../rep/rep_util.c /^__rep_bulk_alloc(dbenv, bulkp, eid, offp, flagsp, /
+__rep_bulk_free ../rep/rep_util.c /^__rep_bulk_free(dbenv, bulkp, flags)$/
+__rep_bulk_log ../rep/rep_log.c /^__rep_bulk_log(dbenv, rp, rec, savetime, ret_lsnp)/
+__rep_bulk_message ../rep/rep_util.c /^__rep_bulk_message(dbenv, bulk, repth, lsn, dbt, f/
+__rep_bulk_page ../rep/rep_backup.c /^__rep_bulk_page(dbenv, eid, rp, rec)$/
__rep_check_doreq ../rep/rep_record.c /^__rep_check_doreq(dbenv, rep)$/
+__rep_check_uid ../rep/rep_backup.c /^__rep_check_uid(dbenv, fp, endfp, uid)$/
+__rep_chk_newfile ../rep/rep_log.c /^__rep_chk_newfile(dbenv, logc, rep, rp, eid)$/
__rep_client_dbinit ../rep/rep_method.c /^__rep_client_dbinit(dbenv, startup, which)$/
-__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_close ../rep/rep_region.c /^__rep_close(dbenv)$/
+__rep_closefiles ../rep/rep_region.c /^__rep_closefiles(dbenv)$/
+__rep_cmp_vote ../rep/rep_elect.c /^__rep_cmp_vote(dbenv, rep, eid, lsnp, priority, ge/
__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_config_map ../rep/rep_method.c /^__rep_config_map(dbenv, inflagsp, outflagsp)$/
+__rep_conv_vers ../rep/rep_method.c /^__rep_conv_vers(dbenv, log_ver)$/
__rep_dbenv_create ../rep/rep_method.c /^__rep_dbenv_create(dbenv)$/
+__rep_dbenv_destroy ../rep/rep_method.c /^__rep_dbenv_destroy(dbenv)$/
__rep_dbenv_refresh ../rep/rep_region.c /^__rep_dbenv_refresh(dbenv)$/
__rep_do_ckp ../rep/rep_record.c /^__rep_do_ckp(dbenv, rec, rp)$/
-__rep_dorecovery ../rep/rep_record.c /^__rep_dorecovery(dbenv, lsnp, trunclsnp)$/
+__rep_dorecovery ../rep/rep_verify.c /^__rep_dorecovery(dbenv, lsnp, trunclsnp)$/
__rep_egen_init ../rep/rep_region.c /^__rep_egen_init(dbenv, rep)$/
-__rep_elect ../rep/rep_method.c /^__rep_elect(dbenv, nsites, nvotes, priority, timeo/
+__rep_elect ../rep/rep_elect.c /^__rep_elect(dbenv, given_nsites, nvotes, eidp, fla/
__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, nvotes, prio/
-__rep_elect_master ../rep/rep_method.c /^__rep_elect_master(dbenv, rep, eidp)$/
+__rep_elect_init ../rep/rep_elect.c /^__rep_elect_init(dbenv, lsnp, nsites, nvotes, begi/
+__rep_elect_master ../rep/rep_elect.c /^__rep_elect_master(dbenv, rep, eidp)$/
__rep_filedone ../rep/rep_backup.c /^__rep_filedone(dbenv, eid, rep, msgfp, type)$/
__rep_fileinfo_buf ../rep/rep_auto.c /^__rep_fileinfo_buf(buf, max, lenp,$/
__rep_fileinfo_read ../rep/rep_auto.c /^__rep_fileinfo_read(dbenv, recbuf, nextp, argpp)$/
-__rep_files_data ../rep/rep_backup.c /^__rep_files_data(dbenv, fp, fileszp, filelenp, fil/
-__rep_files_inmem ../rep/rep_backup.c /^__rep_files_inmem(dbenv, fp, fileszp, filelenp, fi/
+__rep_find_dbs ../rep/rep_backup.c /^__rep_find_dbs(dbenv, fp, fileszp, filelenp, filec/
__rep_finfo_alloc ../rep/rep_backup.c /^__rep_finfo_alloc(dbenv, rfpsrc, rfpp)$/
__rep_flush ../rep/rep_method.c /^__rep_flush(dbenv)$/
-__rep_get_fileinfo ../rep/rep_backup.c /^__rep_get_fileinfo(dbenv, file, rfp, uid, filecntp/
+__rep_get_config ../rep/rep_method.c /^__rep_get_config(dbenv, which, onp)$/
+__rep_get_fileinfo ../rep/rep_backup.c /^__rep_get_fileinfo(dbenv, file, subdb, rfp, uid, f/
__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_get_nsites ../rep/rep_method.c /^__rep_get_nsites(dbenv, n)$/
+__rep_get_priority ../rep/rep_method.c /^__rep_get_priority(dbenv, priority)$/
+__rep_get_request ../rep/rep_method.c /^__rep_get_request(dbenv, minp, maxp)$/
+__rep_get_timeout ../rep/rep_method.c /^__rep_get_timeout(dbenv, which, timeout)$/
__rep_getnext ../rep/rep_record.c /^__rep_getnext(dbenv)$/
__rep_grow_sites ../rep/rep_util.c /^__rep_grow_sites(dbenv, nsites)$/
-__rep_is_client ../rep/rep_util.c /^__rep_is_client(dbenv)$/
-__rep_lockout ../rep/rep_record.c /^__rep_lockout(dbenv, db_rep, rep, msg_th)$/
+__rep_init_cleanup ../rep/rep_backup.c /^__rep_init_cleanup(dbenv, rep, force)$/
+__rep_lockout_api ../rep/rep_util.c /^__rep_lockout_api(dbenv, rep)$/
+__rep_lockout_msg ../rep/rep_util.c /^__rep_lockout_msg(dbenv, rep, msg_th)$/
+__rep_log ../rep/rep_log.c /^__rep_log(dbenv, rp, rec, savetime, ret_lsnp)$/
+__rep_log_backup ../rep/rep_verify.c /^__rep_log_backup(dbenv, rep, logc, lsn)$/
__rep_log_setup ../rep/rep_backup.c /^__rep_log_setup(dbenv, rep)$/
-__rep_loggap_req ../rep/rep_backup.c /^__rep_loggap_req(dbenv, rep, lsnp, moregap)$/
+__rep_loggap_req ../rep/rep_log.c /^__rep_loggap_req(dbenv, rep, lsnp, gapflags)$/
+__rep_logready ../rep/rep_log.c /^__rep_logready(dbenv, rep, savetime, last_lsnp)$/
+__rep_logreq ../rep/rep_log.c /^__rep_logreq(dbenv, rp, rec, eid)$/
__rep_lsn_cmp ../rep/rep_record.c /^__rep_lsn_cmp(lsn1, lsn2)$/
-__rep_mpf_open ../rep/rep_backup.c /^__rep_mpf_open(dbenv, mpfp, rfp)$/
+__rep_mpf_open ../rep/rep_backup.c /^__rep_mpf_open(dbenv, mpfp, rfp, flags)$/
+__rep_msg_from_old ../rep/rep_util.c /^__rep_msg_from_old(version, rectype)$/
+__rep_msg_to_old ../rep/rep_util.c /^__rep_msg_to_old(version, rectype)$/
__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_newfile ../rep/rep_record.c /^__rep_newfile(dbenv, rc, rec, lsnp)$/
+__rep_newmaster_empty ../rep/rep_util.c /^__rep_newmaster_empty(dbenv, lsnp, cntrl, eid)$/
__rep_noarchive ../rep/rep_util.c /^__rep_noarchive(dbenv)$/
-__rep_open ../rep/rep_method.c /^__rep_open(dbenv)$/
+__rep_open ../rep/rep_region.c /^__rep_open(dbenv)$/
__rep_page ../rep/rep_backup.c /^__rep_page(dbenv, eid, rp, rec)$/
__rep_page_fail ../rep/rep_backup.c /^__rep_page_fail(dbenv, eid, rec)$/
__rep_page_gap ../rep/rep_backup.c /^__rep_page_gap(dbenv, rep, msgfp, type)$/
__rep_page_req ../rep/rep_backup.c /^__rep_page_req(dbenv, eid, rec)$/
__rep_page_sendpages ../rep/rep_backup.c /^__rep_page_sendpages(dbenv, eid, msgfp, mpf, dbp)$/
-__rep_pggap_req ../rep/rep_backup.c /^__rep_pggap_req(dbenv, rep, reqfp, moregap)$/
-__rep_preclose ../rep/rep_region.c /^__rep_preclose(dbenv, do_closefiles)$/
+__rep_pggap_req ../rep/rep_backup.c /^__rep_pggap_req(dbenv, rep, reqfp, gapflags)$/
+__rep_preclose ../rep/rep_region.c /^__rep_preclose(dbenv)$/
__rep_print_all ../rep/rep_stat.c /^__rep_print_all(dbenv, flags)$/
__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_print_message ../rep/rep_util.c /^__rep_print_message(dbenv, eid, rp, str, flags)$/
__rep_print_stats ../rep/rep_stat.c /^__rep_print_stats(dbenv, flags)$/
__rep_process_message ../rep/rep_record.c /^__rep_process_message(dbenv, control, rec, eidp, r/
__rep_process_rec ../rep/rep_record.c /^__rep_process_rec(dbenv, rp, rec, typep, ret_lsnp)/
__rep_process_txn ../rep/rep_record.c /^__rep_process_txn(dbenv, rec)$/
__rep_queue_filedone ../rep/rep_backup.c /^__rep_queue_filedone(dbenv, rep, rfp)$/
__rep_region_destroy ../rep/rep_region.c /^__rep_region_destroy(dbenv)$/
-__rep_region_init ../rep/rep_region.c /^__rep_region_init(dbenv)$/
__rep_remfirst ../rep/rep_record.c /^__rep_remfirst(dbenv, cntrl, rec)$/
-__rep_resend_req ../rep/rep_record.c /^__rep_resend_req(dbenv, eid)$/
+__rep_remove_dbs ../rep/rep_backup.c /^__rep_remove_dbs(dbenv)$/
+__rep_remove_logs ../rep/rep_backup.c /^__rep_remove_logs(dbenv)$/
+__rep_resend_req ../rep/rep_record.c /^__rep_resend_req(dbenv, rereq)$/
__rep_restore_prepared ../rep/rep_method.c /^__rep_restore_prepared(dbenv)$/
-__rep_send_message ../rep/rep_util.c /^__rep_send_message(dbenv, eid, rtype, lsnp, dbtp, /
+__rep_send_bulk ../rep/rep_util.c /^__rep_send_bulk(dbenv, bulkp, ctlflags)$/
+__rep_send_message ../rep/rep_util.c /^__rep_send_message(dbenv, eid, rtype, lsnp, dbt, c/
+__rep_send_throttle ../rep/rep_util.c /^__rep_send_throttle(dbenv, eid, repth, flags)$/
__rep_send_vote ../rep/rep_util.c /^__rep_send_vote(dbenv, lsnp, nsites, nvotes, pri, /
+__rep_set_config ../rep/rep_method.c /^__rep_set_config(dbenv, which, on)$/
__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_nsites ../rep/rep_method.c /^__rep_set_nsites(dbenv, n)$/
+__rep_set_priority ../rep/rep_method.c /^__rep_set_priority(dbenv, priority)$/
__rep_set_request ../rep/rep_method.c /^__rep_set_request(dbenv, min, max)$/
+__rep_set_timeout ../rep/rep_method.c /^__rep_set_timeout(dbenv, which, timeout)$/
+__rep_set_transport ../rep/rep_method.c /^__rep_set_transport(dbenv, eid, f_send)$/
+__rep_skip_msg ../rep/rep_record.c /^__rep_skip_msg(dbenv, rep, eid, rectype)$/
__rep_start ../rep/rep_method.c /^__rep_start(dbenv, dbt, flags)$/
__rep_stat ../rep/rep_stat.c /^__rep_stat(dbenv, statp, flags)$/
__rep_stat_pp ../rep/rep_stat.c /^__rep_stat_pp(dbenv, statp, flags)$/
__rep_stat_print ../rep/rep_stat.c /^__rep_stat_print(dbenv, flags)$/
__rep_stat_print_pp ../rep/rep_stat.c /^__rep_stat_print_pp(dbenv, flags)$/
-__rep_tally ../rep/rep_record.c /^__rep_tally(dbenv, rep, eid, countp, egen, vtoff)$/
+__rep_sync ../rep/rep_method.c /^__rep_sync(dbenv, flags)$/
+__rep_tally ../rep/rep_elect.c /^__rep_tally(dbenv, rep, eid, countp, egen, vtoff)$/
__rep_update_buf ../rep/rep_auto.c /^__rep_update_buf(buf, max, lenp,$/
__rep_update_read ../rep/rep_auto.c /^__rep_update_read(dbenv, recbuf, nextp, argpp)$/
__rep_update_req ../rep/rep_backup.c /^__rep_update_req(dbenv, eid)$/
__rep_update_setup ../rep/rep_backup.c /^__rep_update_setup(dbenv, eid, rp, rec)$/
-__rep_verify_match ../rep/rep_record.c /^__rep_verify_match(dbenv, reclsnp, savetime)$/
-__rep_wait ../rep/rep_method.c /^__rep_wait(dbenv, timeout, eidp, flags)$/
-__rep_walk_dir ../rep/rep_backup.c /^__rep_walk_dir(dbenv, dir, fp, fileszp, filelenp, /
+__rep_verify ../rep/rep_verify.c /^__rep_verify(dbenv, rp, rec, eid, savetime)$/
+__rep_verify_fail ../rep/rep_verify.c /^__rep_verify_fail(dbenv, rp, eid)$/
+__rep_verify_match ../rep/rep_verify.c /^__rep_verify_match(dbenv, reclsnp, savetime)$/
+__rep_verify_req ../rep/rep_verify.c /^__rep_verify_req(dbenv, rp, eid)$/
+__rep_vote1 ../rep/rep_elect.c /^__rep_vote1(dbenv, rp, rec, eidp)$/
+__rep_vote2 ../rep/rep_elect.c /^__rep_vote2(dbenv, rec, eidp)$/
+__rep_wait ../rep/rep_elect.c /^__rep_wait(dbenv, timeout, eidp, flags)$/
+__rep_walk_dir ../rep/rep_backup.c /^__rep_walk_dir(dbenv, dir, fp, origfp, fileszp, fi/
__rep_write_egen ../rep/rep_region.c /^__rep_write_egen(dbenv, egen)$/
__rep_write_page ../rep/rep_backup.c /^__rep_write_page(dbenv, rep, msgfp)$/
+__repmgr_accept ../repmgr/repmgr_sel.c /^__repmgr_accept(dbenv)$/
+__repmgr_add_buffer ../repmgr/repmgr_util.c /^__repmgr_add_buffer(v, address, length)$/
+__repmgr_add_dbt ../repmgr/repmgr_util.c /^__repmgr_add_dbt(v, dbt)$/
+__repmgr_add_remote_site ../repmgr/repmgr_method.c /^__repmgr_add_remote_site(dbenv, host, port, eidp, /
+__repmgr_add_site ../repmgr/repmgr_net.c /^__repmgr_add_site(dbenv, host, port, newsitep)$/
+__repmgr_available_site ../repmgr/repmgr_net.c /^__repmgr_available_site(dbenv, eid)$/
+__repmgr_await_ack ../repmgr/repmgr_posix.c /^__repmgr_await_ack(dbenv, lsnp)$/
+__repmgr_await_threads ../repmgr/repmgr_method.c /^__repmgr_await_threads(dbenv)$/
+__repmgr_become_master ../repmgr/repmgr_elect.c /^__repmgr_become_master(dbenv)$/
+__repmgr_bust_connection ../repmgr/repmgr_net.c /^__repmgr_bust_connection(dbenv, conn, do_close)$/
+__repmgr_cleanup_connection ../repmgr/repmgr_net.c /^__repmgr_cleanup_connection(dbenv, conn)$/
+__repmgr_cleanup_netaddr ../repmgr/repmgr_util.c /^__repmgr_cleanup_netaddr(dbenv, addr)$/
+__repmgr_close ../repmgr/repmgr_method.c /^__repmgr_close(dbenv)$/
+__repmgr_close_sync ../repmgr/repmgr_posix.c /^__repmgr_close_sync(dbenv)$/
+__repmgr_compute_wait_deadline ../repmgr/repmgr_posix.c /^__repmgr_compute_wait_deadline(dbenv, result, wait/
+__repmgr_connect ../repmgr/repmgr_sel.c /^__repmgr_connect(dbenv, socket_result, site)$/
+__repmgr_connect_site ../repmgr/repmgr_sel.c /^__repmgr_connect_site(dbenv, eid)$/
+__repmgr_connection ../dbinc/repmgr.h /^struct __repmgr_connection {$/
+__repmgr_dbenv_create ../repmgr/repmgr_method.c /^__repmgr_dbenv_create(dbenv, db_rep)$/
+__repmgr_dbenv_destroy ../repmgr/repmgr_method.c /^__repmgr_dbenv_destroy(dbenv, db_rep)$/
+__repmgr_elect_main ../repmgr/repmgr_elect.c /^__repmgr_elect_main(dbenv)$/
+__repmgr_elect_thread ../repmgr/repmgr_elect.c /^__repmgr_elect_thread(args)$/
+__repmgr_find_site ../repmgr/repmgr_net.c /^__repmgr_find_site(dbenv, host, port)$/
+__repmgr_first_try_connections ../repmgr/repmgr_sel.c /^__repmgr_first_try_connections(dbenv)$/
+__repmgr_format_eid_loc ../repmgr/repmgr_util.c /^__repmgr_format_eid_loc(db_rep, eid, buffer)$/
+__repmgr_format_site_loc ../repmgr/repmgr_util.c /^__repmgr_format_site_loc(site, buffer)$/
+__repmgr_get_ack_policy ../repmgr/repmgr_method.c /^__repmgr_get_ack_policy(dbenv, policy)$/
+__repmgr_get_nsites ../repmgr/repmgr_util.c /^__repmgr_get_nsites(db_rep)$/
+__repmgr_getaddr ../repmgr/repmgr_net.c /^__repmgr_getaddr(dbenv, host, port, flags, result)/
+__repmgr_init_election ../repmgr/repmgr_elect.c /^__repmgr_init_election(dbenv, initial_operation)$/
+__repmgr_init_sync ../repmgr/repmgr_posix.c /^__repmgr_init_sync(dbenv, db_rep)$/
+__repmgr_iovec_init ../repmgr/repmgr_util.c /^__repmgr_iovec_init(v)$/
+__repmgr_is_permanent ../repmgr/repmgr_net.c /^__repmgr_is_permanent(dbenv, lsnp)$/
+__repmgr_is_ready ../repmgr/repmgr_elect.c /^__repmgr_is_ready(dbenv)$/
+__repmgr_listen ../repmgr/repmgr_net.c /^__repmgr_listen(dbenv)$/
+__repmgr_lock_mutex ../repmgr/repmgr_posix.c /^__repmgr_lock_mutex(mutex)$/
+__repmgr_msg_thread ../repmgr/repmgr_msg.c /^__repmgr_msg_thread(args)$/
+__repmgr_net_close ../repmgr/repmgr_net.c /^__repmgr_net_close(dbenv)$/
+__repmgr_net_create ../repmgr/repmgr_net.c /^__repmgr_net_create(dbenv, db_rep)$/
+__repmgr_net_destroy ../repmgr/repmgr_net.c /^__repmgr_net_destroy(dbenv, db_rep)$/
+__repmgr_net_init ../repmgr/repmgr_posix.c /^__repmgr_net_init(dbenv, db_rep)$/
+__repmgr_new_connection ../repmgr/repmgr_util.c /^__repmgr_new_connection(dbenv, connp, s, flags)$/
+__repmgr_new_site ../repmgr/repmgr_util.c /^__repmgr_new_site(dbenv, sitep, addr, state)$/
+__repmgr_pack_netaddr ../repmgr/repmgr_net.c /^__repmgr_pack_netaddr(dbenv, host, port, list, add/
+__repmgr_prepare_my_addr ../repmgr/repmgr_util.c /^__repmgr_prepare_my_addr(dbenv, dbt)$/
+__repmgr_print_stats ../repmgr/repmgr_stat.c /^__repmgr_print_stats(dbenv)$/
+__repmgr_queue_create ../repmgr/repmgr_queue.c /^__repmgr_queue_create(dbenv, db_rep)$/
+__repmgr_queue_destroy ../repmgr/repmgr_queue.c /^__repmgr_queue_destroy(dbenv)$/
+__repmgr_queue_get ../repmgr/repmgr_queue.c /^__repmgr_queue_get(dbenv, msgp)$/
+__repmgr_queue_put ../repmgr/repmgr_queue.c /^__repmgr_queue_put(dbenv, msg)$/
+__repmgr_queue_size ../repmgr/repmgr_queue.c /^__repmgr_queue_size(dbenv)$/
+__repmgr_read_from_site ../repmgr/repmgr_sel.c /^__repmgr_read_from_site(dbenv, conn)$/
+__repmgr_readv ../repmgr/repmgr_posix.c /^__repmgr_readv(fd, iovec, buf_count, byte_count_p)/
+__repmgr_reset_for_reading ../repmgr/repmgr_util.c /^__repmgr_reset_for_reading(con)$/
+__repmgr_retry ../dbinc/repmgr.h /^struct __repmgr_retry {$/
+__repmgr_retry_connections ../repmgr/repmgr_sel.c /^__repmgr_retry_connections(dbenv)$/
+__repmgr_runnable ../dbinc/repmgr.h /^struct __repmgr_runnable {$/
+__repmgr_schedule_connection_attempt ../repmgr/repmgr_util.c /^__repmgr_schedule_connection_attempt(dbenv, eid, i/
+__repmgr_select_loop ../repmgr/repmgr_posix.c /^__repmgr_select_loop(dbenv)$/
+__repmgr_select_thread ../repmgr/repmgr_sel.c /^__repmgr_select_thread(args)$/
+__repmgr_send ../repmgr/repmgr_net.c /^__repmgr_send(dbenv, control, rec, lsnp, eid, flag/
+__repmgr_send_broadcast ../repmgr/repmgr_net.c /^__repmgr_send_broadcast(dbenv, control, rec, nsite/
+__repmgr_send_handshake ../repmgr/repmgr_sel.c /^__repmgr_send_handshake(dbenv, conn)$/
+__repmgr_send_internal ../repmgr/repmgr_net.c /^__repmgr_send_internal(dbenv, conn, msg)$/
+__repmgr_send_one ../repmgr/repmgr_net.c /^__repmgr_send_one(dbenv, conn, msg_type, control, /
+__repmgr_set_ack_policy ../repmgr/repmgr_method.c /^__repmgr_set_ack_policy(dbenv, policy)$/
+__repmgr_set_local_site ../repmgr/repmgr_method.c /^__repmgr_set_local_site(dbenv, host, port, flags)$/
+__repmgr_set_nonblocking ../repmgr/repmgr_posix.c /^int __repmgr_set_nonblocking(fd)$/
+__repmgr_signal ../repmgr/repmgr_posix.c /^__repmgr_signal(v)$/
+__repmgr_site ../dbinc/repmgr.h /^struct __repmgr_site {$/
+__repmgr_site_list ../repmgr/repmgr_stat.c /^__repmgr_site_list(dbenv, countp, listp)$/
+__repmgr_start ../repmgr/repmgr_method.c /^__repmgr_start(dbenv, nthreads, flags)$/
+__repmgr_stash_generation ../repmgr/repmgr_msg.c /^__repmgr_stash_generation(dbenv)$/
+__repmgr_stop_threads ../repmgr/repmgr_method.c /^__repmgr_stop_threads(dbenv)$/
+__repmgr_thread_failure ../repmgr/repmgr_util.c /^__repmgr_thread_failure(dbenv, why)$/
+__repmgr_thread_join ../repmgr/repmgr_posix.c /^__repmgr_thread_join(thread)$/
+__repmgr_thread_start ../repmgr/repmgr_posix.c /^__repmgr_thread_start(dbenv, runnable)$/
+__repmgr_timeval_cmp ../repmgr/repmgr_util.c /^__repmgr_timeval_cmp(a, b)$/
+__repmgr_timeval_diff_current ../repmgr/repmgr_posix.c /^__repmgr_timeval_diff_current(dbenv, when, result)/
+__repmgr_unlock_mutex ../repmgr/repmgr_posix.c /^__repmgr_unlock_mutex(mutex)$/
+__repmgr_update_consumed ../repmgr/repmgr_util.c /^__repmgr_update_consumed(v, byte_count)$/
+__repmgr_wake_main_thread ../repmgr/repmgr_posix.c /^__repmgr_wake_main_thread(dbenv)$/
+__repmgr_wake_waiting_senders ../repmgr/repmgr_posix.c /^__repmgr_wake_waiting_senders(dbenv)$/
+__repmgr_write_some ../repmgr/repmgr_sel.c /^__repmgr_write_some(dbenv, conn)$/
+__repmgr_writev ../repmgr/repmgr_posix.c /^__repmgr_writev(fd, iovec, buf_count, byte_count_p/
+__repmgr_wsa_init ../repmgr/repmgr_windows.c /^__repmgr_wsa_init(dbenv)$/
+__seq_chk_cachesize ../sequence/sequence.c /^__seq_chk_cachesize(dbenv, cachesize, max, min)$/
__seq_close ../sequence/sequence.c /^__seq_close(seq, flags)$/
__seq_get ../sequence/sequence.c /^__seq_get(seq, txn, delta, retp, flags)$/
__seq_get_cachesize ../sequence/sequence.c /^__seq_get_cachesize(seq, cachesize)$/
@@ -3886,7 +4306,7 @@ __seq_get_flags ../sequence/sequence.c /^__seq_get_flags(seq, flagsp)$/
__seq_get_key ../sequence/sequence.c /^__seq_get_key(seq, key)$/
__seq_get_range ../sequence/sequence.c /^__seq_get_range(seq, minp, maxp)$/
__seq_initial_value ../sequence/sequence.c /^__seq_initial_value(seq, value)$/
-__seq_open ../sequence/sequence.c /^__seq_open(seq, txn, keyp, flags)$/
+__seq_open_pp ../sequence/sequence.c /^__seq_open_pp(seq, txn, keyp, flags)$/
__seq_print_all ../sequence/seq_stat.c /^__seq_print_all(seq, flags)$/
__seq_print_stats ../sequence/seq_stat.c /^__seq_print_stats(seq, flags)$/
__seq_remove ../sequence/sequence.c /^__seq_remove(seq, txn, flags)$/
@@ -3896,97 +4316,115 @@ __seq_set_range ../sequence/sequence.c /^__seq_set_range(seq, min, max)$/
__seq_stat ../sequence/seq_stat.c /^__seq_stat(seq, spp, flags)$/
__seq_stat_print ../sequence/seq_stat.c /^__seq_stat_print(seq, flags)$/
__seq_update ../sequence/sequence.c /^__seq_update(seq, txn, delta, flags)$/
-__txn_abort ../txn/txn.c /^__txn_abort(txnp)$/
-__txn_abort_pp ../txn/txn.c /^__txn_abort_pp(txnp)$/
+__shm_mode ../os/os_map.c /^__shm_mode(dbenv)$/
+__txn_abort ../txn/txn.c /^__txn_abort(txn)$/
+__txn_abort_pp ../txn/txn.c /^__txn_abort_pp(txn)$/
__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_activekids ../txn/txn.c /^__txn_activekids(dbenv, rectype, txn)$/
+__txn_add_buffer ../txn/txn_region.c /^int __txn_add_buffer(dbenv, td)$/
__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, flags, r/
-__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_log ../txn/txn_auto.c /^__txn_child_log(dbenv, txnid, ret_lsnp, flags,$/
+__txn_checkpoint ../txn/txn_chkpt.c /^__txn_checkpoint(dbenv, kbytes, minutes, flags)$/
+__txn_checkpoint_pp ../txn/txn_chkpt.c /^__txn_checkpoint_pp(dbenv, kbytes, minutes, flags)/
+__txn_child_log ../txn/txn_auto.c /^__txn_child_log(dbenv, txnp, ret_lsnp, flags,$/
__txn_child_print ../txn/txn_autop.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_log ../txn/txn_auto.c /^__txn_ckp_log(dbenv, txnid, ret_lsnp, flags,$/
+__txn_ckp_42_print ../txn/txn_autop.c /^__txn_ckp_42_print(dbenv, dbtp, lsnp, notused2, no/
+__txn_ckp_42_read ../txn/txn_auto.c /^__txn_ckp_42_read(dbenv, recbuf, argpp)$/
+__txn_ckp_42_recover ../txn/txn_rec.c /^__txn_ckp_42_recover(dbenv, dbtp, lsnp, op, info)$/
+__txn_ckp_log ../txn/txn_auto.c /^__txn_ckp_log(dbenv, txnp, ret_lsnp, flags,$/
__txn_ckp_print ../txn/txn_autop.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_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 ../txn/txn.c /^__txn_commit(txn, flags)$/
+__txn_commit_pp ../txn/txn.c /^__txn_commit_pp(txn, flags)$/
__txn_commit_proc ../rpc_server/c/db_server_proc.c /^__txn_commit_proc(txnpcl_id, flags, replyp)$/
__txn_compare ../txn/txn_stat.c /^__txn_compare(a1, b1)$/
__txn_compensate_begin ../txn/txn.c /^__txn_compensate_begin(dbenv, txnpp)$/
-__txn_continue ../txn/txn_recover.c /^__txn_continue(env, txnp, td, off)$/
+__txn_continue ../txn/txn.c /^__txn_continue(env, txn, td)$/
__txn_dbenv_create ../txn/txn_method.c /^__txn_dbenv_create(dbenv)$/
+__txn_dbenv_destroy ../txn/txn_method.c /^__txn_dbenv_destroy(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 ../txn/txn.c /^__txn_discard(txn, flags)$/
+__txn_discard_int ../txn/txn.c /^__txn_discard_int(txn, 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_dispatch_undo ../txn/txn.c /^__txn_dispatch_undo(dbenv, txn, rdbt, key_lsn, txn/
__txn_doevents ../txn/txn_util.c /^__txn_doevents(dbenv, txn, opcode, preprocess)$/
-__txn_end ../txn/txn.c /^__txn_end(txnp, is_commit)$/
+__txn_end ../txn/txn.c /^__txn_end(txn, is_commit)$/
+__txn_event ../txn/txn_util.c /^struct __txn_event {$/
+__txn_failchk ../txn/txn_failchk.c /^__txn_failchk(dbenv)$/
__txn_findlastckp ../txn/txn_region.c /^__txn_findlastckp(dbenv, lsnp, max_lsn)$/
__txn_force_abort ../txn/txn.c /^__txn_force_abort(dbenv, buffer)$/
+__txn_get_name ../txn/txn.c /^__txn_get_name(txn, namep)$/
__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_getactive ../txn/txn.c /^__txn_getactive(dbenv, lsnp)$/
-__txn_getckp ../txn/txn.c /^__txn_getckp(dbenv, lsnp)$/
-__txn_id ../txn/txn.c /^__txn_id(txnp)$/
+__txn_getactive ../txn/txn_chkpt.c /^__txn_getactive(dbenv, lsnp)$/
+__txn_getckp ../txn/txn_chkpt.c /^__txn_getckp(dbenv, lsnp)$/
+__txn_gid ../txn/txn_stat.c /^__txn_gid(dbenv, mbp, txn)$/
+__txn_id ../txn/txn.c /^__txn_id(txn)$/
__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 ../txn/txn_region.c /^__txn_init(dbenv, mgr)$/
__txn_init_print ../txn/txn_autop.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_isvalid ../txn/txn.c /^__txn_isvalid(txn, op)$/
__txn_lockevent ../txn/txn_util.c /^__txn_lockevent(dbenv, txn, dbp, lock, locker)$/
+__txn_logrec ../dbinc/txn.h /^struct __txn_logrec {$/
__txn_map_gid ../txn/txn_recover.c /^__txn_map_gid(dbenv, gid, tdp, offp)$/
+__txn_oldest_reader ../txn/txn_region.c /^__txn_oldest_reader(dbenv, lsnp)$/
__txn_open ../txn/txn_region.c /^__txn_open(dbenv)$/
__txn_openfiles ../txn/txn_recover.c /^__txn_openfiles(dbenv, min, force)$/
__txn_preclose ../txn/txn.c /^__txn_preclose(dbenv)$/
-__txn_prepare ../txn/txn.c /^__txn_prepare(txnp, gid)$/
+__txn_prepare ../txn/txn.c /^__txn_prepare(txn, gid)$/
__txn_prepare_proc ../rpc_server/c/db_server_proc.c /^__txn_prepare_proc(txnpcl_id, gid, replyp)$/
__txn_print_all ../txn/txn_stat.c /^__txn_print_all(dbenv, flags)$/
__txn_print_stats ../txn/txn_stat.c /^__txn_print_stats(dbenv, flags)$/
__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, flags, reply/
-__txn_recycle_log ../txn/txn_auto.c /^__txn_recycle_log(dbenv, txnid, ret_lsnp, flags,$/
+__txn_recycle_id ../txn/txn.c /^__txn_recycle_id(dbenv)$/
+__txn_recycle_log ../txn/txn_auto.c /^__txn_recycle_log(dbenv, txnp, ret_lsnp, flags,$/
__txn_recycle_print ../txn/txn_autop.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_log ../txn/txn_auto.c /^__txn_regop_log(dbenv, txnid, ret_lsnp, flags,$/
+__txn_regop_42_print ../txn/txn_autop.c /^__txn_regop_42_print(dbenv, dbtp, lsnp, notused2, /
+__txn_regop_42_read ../txn/txn_auto.c /^__txn_regop_42_read(dbenv, recbuf, argpp)$/
+__txn_regop_42_recover ../txn/txn_rec.c /^__txn_regop_42_recover(dbenv, dbtp, lsnp, op, info/
+__txn_regop_log ../txn/txn_auto.c /^__txn_regop_log(dbenv, txnp, ret_lsnp, flags,$/
__txn_regop_print ../txn/txn_autop.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_remevent ../txn/txn_util.c /^__txn_remevent(dbenv, txn, name, fileid, inmem)$/
__txn_remlock ../txn/txn_util.c /^__txn_remlock(dbenv, txn, lock, locker)$/
+__txn_remove_buffer ../txn/txn_region.c /^int __txn_remove_buffer(dbenv, td, hash_mtx)$/
__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_begin_lsnp ../txn/txn.c /^__txn_set_begin_lsnp(txn, rlsnp)$/
-__txn_set_timeout ../txn/txn.c /^__txn_set_timeout(txnp, timeout, op)$/
+__txn_set_name ../txn/txn.c /^__txn_set_name(txn, name)$/
+__txn_set_timeout ../txn/txn.c /^__txn_set_timeout(txn, 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_set_txn_lsnp ../txn/txn.c /^__txn_set_txn_lsnp(txn, blsnp, llsnp)$/
__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_stat_print ../txn/txn_stat.c /^__txn_stat_print(dbenv, flags)$/
__txn_stat_print_pp ../txn/txn_stat.c /^__txn_stat_print_pp(dbenv, flags)$/
-__txn_undo ../txn/txn.c /^__txn_undo(txnp)$/
-__txn_updateckp ../txn/txn.c /^__txn_updateckp(dbenv, lsnp)$/
+__txn_status ../txn/txn_stat.c /^__txn_status(txn)$/
+__txn_undo ../txn/txn.c /^__txn_undo(txn)$/
+__txn_updateckp ../txn/txn_chkpt.c /^__txn_updateckp(dbenv, lsnp)$/
__txn_xa_begin ../txn/txn.c /^__txn_xa_begin(dbenv, txn)$/
-__txn_xa_regop_log ../txn/txn_auto.c /^__txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,$/
+__txn_xa_regop_log ../txn/txn_auto.c /^__txn_xa_regop_log(dbenv, txnp, ret_lsnp, flags,$/
__txn_xa_regop_print ../txn/txn_autop.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/
-__txn_xid_stats ../txn/txn_stat.c /^__txn_xid_stats(dbenv, mbp, txnp)$/
__ua_memcpy ../os/os_alloc.c /^__ua_memcpy(dst, src, len)$/
__usermem ../log/log_archive.c /^__usermem(dbenv, listp)$/
+__vrfy_childinfo ../dbinc/db_verify.h /^struct __vrfy_childinfo {$/
+__vrfy_dbinfo ../dbinc/db_verify.h /^struct __vrfy_dbinfo {$/
+__vrfy_pageinfo ../dbinc/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)$/
@@ -3996,16 +4434,39 @@ __xa_get_txn ../xa/xa.c /^__xa_get_txn(dbenv, 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_put_txn ../xa/xa.c /^__xa_put_txn(dbenv, txnp)$/
+__xa_set_txn ../xa/xa_db.c /^__xa_set_txn(dbp, txnpp, no_xa_txn)$/
+__xa_truncate ../xa/xa_db.c /^__xa_truncate(dbp, txn, countp, flags)$/
+__xa_txn ../dbinc/db.in /^ struct __xa_txn { \/* XA Active Transactions. *\//
+_app_dispatch_intercept ../cxx/cxx_env.cpp /^int DbEnv::_app_dispatch_intercept(DB_ENV *env, DB/
_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()$/
-_exported ../dbinc/db_cxx.in 132
+_event_func_intercept ../cxx/cxx_env.cpp /^void DbEnv::_event_func_intercept($/
+_event_func_intercept_c ../cxx/cxx_env.cpp /^void _event_func_intercept_c(DB_ENV *env, u_int32_/
+_exported ../dbinc/db_cxx.in /^# define _exported __declspec(dllexport) /
+_feedback_intercept ../cxx/cxx_env.cpp /^void DbEnv::_feedback_intercept(DB_ENV *env, int o/
_feedback_intercept_c ../cxx/cxx_env.cpp /^void _feedback_intercept_c(DB_ENV *env, int opcode/
+_isalive_intercept ../cxx/cxx_env.cpp /^int DbEnv::_isalive_intercept($/
+_isalive_intercept_c ../cxx/cxx_env.cpp /^int _isalive_intercept_c($/
+_paniccall_intercept ../cxx/cxx_env.cpp /^void DbEnv::_paniccall_intercept(DB_ENV *env, int /
_paniccall_intercept_c ../cxx/cxx_env.cpp /^void _paniccall_intercept_c(DB_ENV *env, int errva/
+_rep_send_intercept ../cxx/cxx_env.cpp /^int DbEnv::_rep_send_intercept(DB_ENV *env, const /
_rep_send_intercept_c ../cxx/cxx_env.cpp /^int _rep_send_intercept_c(DB_ENV *env, const DBT */
+_stream_error_function ../cxx/cxx_env.cpp /^void DbEnv::_stream_error_function($/
_stream_error_function_c ../cxx/cxx_env.cpp /^void _stream_error_function_c(const DB_ENV *env,$/
+_stream_message_function ../cxx/cxx_env.cpp /^void DbEnv::_stream_message_function(const DB_ENV /
_stream_message_function_c ../cxx/cxx_env.cpp /^void _stream_message_function_c(const DB_ENV *env,/
+_thread_id_intercept ../cxx/cxx_env.cpp /^void DbEnv::_thread_id_intercept(DB_ENV *env,$/
+_thread_id_intercept_c ../cxx/cxx_env.cpp /^void _thread_id_intercept_c(DB_ENV *env, pid_t *pi/
+_thread_id_string_intercept ../cxx/cxx_env.cpp /^char *DbEnv::_thread_id_string_intercept(DB_ENV *e/
+_thread_id_string_intercept_c ../cxx/cxx_env.cpp /^char *_thread_id_string_intercept_c(DB_ENV *env, p/
+abort ../clib/abort.c /^abort()$/
+ack_message ../repmgr/repmgr_msg.c /^ack_message(dbenv, generation, lsn)$/
add_home ../rpc_server/c/db_server_util.c /^add_home(home)$/
add_passwd ../rpc_server/c/db_server_util.c /^add_passwd(passwd)$/
+allocate_wait_slot ../repmgr/repmgr_windows.c /^allocate_wait_slot(dbenv, resultp)$/
+archopts ../tcl/tcl_log.c /^ enum archopts {$/
+atoi ../clib/atoi.c /^atoi(str)$/
+atol ../clib/atol.c /^atol(str)$/
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)$/
@@ -4013,6 +4474,7 @@ 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)$/
bdb_EnvOpen ../tcl/tcl_db_pkg.c /^bdb_EnvOpen(interp, objc, objv, ip, env)$/
+bdb_GetConfig ../tcl/tcl_db_pkg.c /^bdb_GetConfig(interp, objc, objv)$/
bdb_HCommand ../tcl/tcl_compat.c /^bdb_HCommand(interp, objc, objv)$/
bdb_Handles ../tcl/tcl_db_pkg.c /^bdb_Handles(interp, objc, objv)$/
bdb_MsgType ../tcl/tcl_db_pkg.c /^bdb_MsgType(interp, objc, objv)$/
@@ -4020,23 +4482,41 @@ bdb_NdbmOpen ../tcl/tcl_compat.c /^bdb_NdbmOpen(interp, objc, objv, dbpp)$/
bdb_RandCommand ../tcl/tcl_util.c /^bdb_RandCommand(interp, objc, objv)$/
bdb_SeqOpen ../tcl/tcl_db_pkg.c /^bdb_SeqOpen(interp, objc, objv, ip, seqp)$/
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 {$/
+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 {$/
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 159
-bt_prefix_fcn_type ../dbinc/db_cxx.in 161
-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
+ca_recno_arg ../dbinc/btree.h /^} ca_recno_arg;$/
+cdsgroup_begin ../cxx/cxx_env.cpp /^int DbEnv::cdsgroup_begin(DbTxn **tid)$/
+cipherInstance ../crypto/rijndael/rijndael-api-fst.h /^} cipherInstance;$/
+cleanup ../cxx/cxx_db.cpp /^\/\/ private method to cleanup after destructor or/
+close ../cxx/cxx_env.cpp /^int DbEnv::close(u_int32_t flags)$/
+closesocket ../dbinc/repmgr.h /^#define closesocket(fd) close(fd)$/
+commitopt ../tcl/tcl_txn.c /^ enum commitopt {$/
+cond_var_t ../dbinc/repmgr.h /^typedef HANDLE cond_var_t;$/
+confonoff ../tcl/tcl_rep.c /^ enum confonoff {$/
+confwhich ../tcl/tcl_rep.c /^ enum confwhich {$/
+const ../dbinc/db_185.in /^#define const$/
+ct_anyp ../dbinc/db_server_int.h /^#define ct_anyp handle_u.anyp$/
+ct_dbc ../dbinc/db_server_int.h /^#define ct_dbc handle_u.dbc$/
+ct_dbdata ../dbinc/db_server_int.h /^typedef struct ct_dbdata ct_dbdata;$/
+ct_dbdp ../dbinc/db_server_int.h /^#define ct_dbdp private_u.dbdp$/
+ct_dbp ../dbinc/db_server_int.h /^#define ct_dbp handle_u.dbp$/
+ct_entry ../dbinc/db_server_int.h /^typedef struct ct_entry ct_entry;$/
+ct_envdata ../dbinc/db_server_int.h /^typedef struct ct_envdata ct_envdata;$/
+ct_envdp ../dbinc/db_server_int.h /^#define ct_envdp private_u.envdp$/
+ct_envp ../dbinc/db_server_int.h /^#define ct_envp handle_u.envp$/
+ct_txnp ../dbinc/db_server_int.h /^#define ct_txnp handle_u.txnp$/
+data ../dbinc/tcl_db.h /^ union data {$/
+data2 ../dbinc/tcl_db.h /^ union data2 {$/
+datum ../dbinc/db.in /^} datum;$/
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)$/
@@ -4048,7 +4528,7 @@ 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 ../dbinc/btree.h 316
+db_ca_mode ../dbinc/btree.h /^} db_ca_mode;$/
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)$/
@@ -4073,26 +4553,41 @@ 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_free_fcn_type ../dbinc/db_cxx.in 157
-db_ham_mode ../dbinc/hash.h 142
-db_indx_t ../dbinc/db.in 106
-db_limbo_state ../dbinc/db_dispatch.h 113
-db_lockmode_t ../dbinc/db.in 413
-db_lockop_t ../dbinc/db.in 430
-db_malloc_fcn_type ../dbinc/db_cxx.in 153
-db_pgno_t ../dbinc/db.in 105
-db_realloc_fcn_type ../dbinc/db_cxx.in 155
-db_recno_t ../dbinc/db.in 109
-db_recops ../dbinc/db.in 806
-db_ret_t ../libdb_java/db_java_wrap.c 1724
+db_error_set_t ../dbinc/debug.h /^} db_error_set_t;$/
+db_ham_mode ../dbinc/hash.h /^} db_ham_mode;$/
+db_indx_t ../dbinc/db.in /^typedef u_int16_t db_indx_t; \/* Page offset type./
+db_iovec_t ../dbinc/repmgr.h /^typedef WSABUF db_iovec_t;$/
+db_limbo_state ../dbinc/db_dispatch.h /^} db_limbo_state;$/
+db_lockmode_t ../dbinc/db.in /^} db_lockmode_t;$/
+db_lockop_t ../dbinc/db.in /^} db_lockop_t;$/
+db_mutex_t ../dbinc/db.in /^typedef u_int32_t db_mutex_t;$/
+db_pgno_t ../dbinc/db.in /^typedef u_int32_t db_pgno_t; \/* Page number type./
+db_recno_t ../dbinc/db.in /^typedef u_int32_t db_recno_t; \/* Record number ty/
+db_recops ../dbinc/db.in /^} db_recops;$/
+db_ret_t ../libdb_java/db_java_wrap.c /^typedef int db_ret_t;$/
db_sequence_create ../sequence/sequence.c /^db_sequence_create(seqp, dbp, flags)$/
-db_status_t ../dbinc/db.in 446
+db_status_t ../dbinc/db.in /^}db_status_t;$/
db_strerror ../common/db_err.c /^db_strerror(error)$/
-db_sync_op ../dbinc/mp.h 37
-db_timeout_t ../dbinc/db.in 112
-db_txnlist_type ../dbinc/db_dispatch.h 51
+db_sync_op ../dbinc/mp.h /^} db_sync_op;$/
+db_timeout_t ../dbinc/db.in /^typedef u_int32_t db_timeout_t; \/* Type of a time/
+db_timeval_t ../dbinc/lock.h /^} db_timeval_t;$/
+db_trunc_param ../dbinc/db_am.h /^} db_trunc_param;$/
+db_txnlist_type ../dbinc/db_dispatch.h /^} db_txnlist_type;$/
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 {$/
+dbclose ../tcl/tcl_db.c /^ enum dbclose {$/
+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 {$/
+dbjopts ../tcl/tcl_db.c /^ enum dbjopts {$/
+dbkeyropts ../tcl/tcl_db.c /^ enum dbkeyropts {$/
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/
@@ -4105,15 +4600,23 @@ 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 2135
+dbmclose ../dbinc/db.in /^#define dbmclose __db_dbm_close@DB_VERSION_UNIQUE_/
+dbmcmds ../tcl/tcl_compat.c /^ enum dbmcmds {$/
dbminit ../dbinc/db.in /^#define dbminit(a) __db_dbm_init@DB_VERSION_UNIQUE/
-dbopen ../dbinc/db_185.in 167
+dbopen ../dbinc/db_185.in /^#define dbopen __db185_open@DB_VERSION_UNIQUE_NAME/
+dbputapp ../tcl/tcl_db.c /^ enum dbputapp { DBPUT_APPEND0 };$/
+dbputopts ../tcl/tcl_db.c /^ enum dbputopts {$/
+dbstatopts ../tcl/tcl_db.c /^ enum dbstatopts {$/
+dbt_ ../cxx/cxx_except.cpp /^, dbt_(dbt)$/
delete ../dbinc/db.in /^#define delete(a) __db_dbm_delete@DB_VERSION_UNIQU/
-delete_DbLock ../libdb_java/db_java_wrap.c /^void delete_DbLock(struct DbLock *self){$/
-dirent ../clib/getcwd.c 48
+delete_DbLock ../libdb_java/db_java_wrap.c /^SWIGINTERN void delete_DbLock(struct DbLock *self)/
+describe ../cxx/cxx_except.cpp /^void DbException::describe(const char *prefix, con/
+dirent ../clib/getcwd.c /^# define dirent direct$/
dirfd ../clib/getcwd.c /^#define dirfd(dirp) ((dirp)->dd_fd)$/
-dupString ../cxx/cxx_except.cpp /^static char *dupString(const char *s)$/
-dup_compare_fcn_type ../dbinc/db_cxx.in 163
+dispatch_phase_completion ../repmgr/repmgr_sel.c /^dispatch_phase_completion(dbenv, conn)$/
+dupString ../cxx/cxx_except.cpp /^\/\/ Note: would not be needed if we can inherit f/
+enqueue_msg ../repmgr/repmgr_net.c /^enqueue_msg(dbenv, conn, msg, offset)$/
+env_ ../cxx/cxx_except.cpp /^, env_(0)$/
env_Cmd ../tcl/tcl_env.c /^env_Cmd(clientData, interp, objc, objv)$/
env_DbRemove ../tcl/tcl_env.c /^env_DbRemove(interp, objc, objv, dbenv)$/
env_DbRename ../tcl/tcl_env.c /^env_DbRename(interp, objc, objv, dbenv)$/
@@ -4123,126 +4626,239 @@ 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)$/
+envcmds ../tcl/tcl_env.c /^ enum envcmds {$/
+envdbmv ../tcl/tcl_env.c /^ enum envdbmv {$/
+envdbrem ../tcl/tcl_env.c /^ enum envdbrem {$/
+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 {$/
+error_policy ../cxx/cxx_db.cpp /^\/\/ Return a tristate value corresponding to whet/
+errx ../cxx/cxx_db.cpp /^void Db::errx(const char *format, ...)$/
fetch ../dbinc/db.in /^#define fetch(a) __db_dbm_fetch@DB_VERSION_UNIQUE_/
-firstkey ../dbinc/db.in 2140
+finish_connecting ../repmgr/repmgr_posix.c /^finish_connecting(dbenv, conn)$/
+firstkey ../dbinc/db.in /^#define firstkey __db_dbm_firstkey@DB_VERSION_UNIQ/
+flatten ../repmgr/repmgr_net.c /^flatten(dbenv, msg)$/
+fprintf ../clib/printf.c /^fprintf(fp, fmt, va_alist)$/
+free_wait_slot ../repmgr/repmgr_windows.c /^free_wait_slot(dbenv, slot)$/
fsync ../os/os_fsync.c /^#define fsync(fd) __vx_fsync(fd)$/
+get ../cxx/cxx_dbc.cpp /^int Dbc::get(Dbt* key, Dbt *data, u_int32_t _flags/
+get_app_private ../cxx/cxx_env.cpp /^void *DbEnv::get_app_private() const$/
+get_byteswapped ../cxx/cxx_db.cpp /^int Db::get_byteswapped(int *isswapped)$/
+get_dbt ../cxx/cxx_except.cpp /^Dbt *DbMemoryException::get_dbt() const$/
+get_env ../cxx/cxx_db.cpp /^DbEnv *Db::get_env()$/
+get_errno ../cxx/cxx_except.cpp /^int DbException::get_errno() const$/
+get_error_stream ../cxx/cxx_env.cpp /^__DB_STD(ostream) *DbEnv::get_error_stream()$/
get_fullhome ../rpc_server/c/db_server_util.c /^get_fullhome(name)$/
+get_handle ../mutex/mut_win32.c /^static __inline int get_handle(dbenv, mutexp, even/
+get_index ../cxx/cxx_except.cpp /^int DbLockNotGrantedException::get_index() const$/
+get_key ../cxx/cxx_seq.cpp /^Dbt *DbSequence::get_key()$/
+get_lock ../cxx/cxx_except.cpp /^DbLock* DbLockNotGrantedException::get_lock() cons/
+get_message_stream ../cxx/cxx_env.cpp /^__DB_STD(ostream) *DbEnv::get_message_stream()$/
+get_mode ../cxx/cxx_except.cpp /^db_lockmode_t DbLockNotGrantedException::get_mode(/
+get_mpf ../cxx/cxx_db.cpp /^DbMpoolFile *Db::get_mpf()$/
+get_obj ../cxx/cxx_except.cpp /^const Dbt* DbLockNotGrantedException::get_obj() co/
+get_op ../cxx/cxx_except.cpp /^db_lockop_t DbLockNotGrantedException::get_op() co/
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)$/
-h_hash_fcn_type ../dbinc/db_cxx.in 165
+h_hash_callback_ ../cxx/cxx_db.cpp /^, h_hash_callback_(0)$/
+handle_completion ../repmgr/repmgr_windows.c /^handle_completion(dbenv, conn)$/
+handle_newsite ../repmgr/repmgr_msg.c /^handle_newsite(dbenv, rec)$/
+hcmds ../tcl/tcl_compat.c /^ enum hcmds {$/
hcreate ../dbinc/db.in /^#define hcreate(a) __db_hcreate@DB_VERSION_UNIQUE_/
-hdestroy ../dbinc/db.in 2157
-home_entry ../dbinc/db_server_int.h 40
+hdestroy ../dbinc/db.in /^#define hdestroy __db_hdestroy@DB_VERSION_UNIQUE_N/
+header ../repmgr/repmgr_queue.c /^};$/
+home_entry ../dbinc/db_server_int.h /^typedef struct home_entry home_entry;$/
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 1725
-item ../hsearch/hsearch.c /^ ENTRY item;$/
+i_anyp ../dbinc/tcl_db.h /^#define i_anyp un.anyp$/
+i_cdata ../dbinc/tcl_db.h /^#define i_cdata und2.c_data$/
+i_data ../dbinc/tcl_db.h /^#define i_data und.anydata$/
+i_data2 ../dbinc/tcl_db.h /^#define i_data2 und2.anydata$/
+i_dbcp ../dbinc/tcl_db.h /^#define i_dbcp un.dbcp$/
+i_dbdbcid ../dbinc/tcl_db.h /^#define i_dbdbcid i_otherid[0]$/
+i_dbp ../dbinc/tcl_db.h /^#define i_dbp un.dbp$/
+i_envlockid ../dbinc/tcl_db.h /^#define i_envlockid i_otherid[2]$/
+i_envlogcid ../dbinc/tcl_db.h /^#define i_envlogcid i_otherid[3]$/
+i_envmpid ../dbinc/tcl_db.h /^#define i_envmpid i_otherid[1]$/
+i_envp ../dbinc/tcl_db.h /^#define i_envp un.envp$/
+i_envtxnid ../dbinc/tcl_db.h /^#define i_envtxnid i_otherid[0]$/
+i_lock ../dbinc/tcl_db.h /^#define i_lock un.lock$/
+i_locker ../dbinc/tcl_db.h /^#define i_locker und.lockid$/
+i_logc ../dbinc/tcl_db.h /^#define i_logc un.logc$/
+i_mp ../dbinc/tcl_db.h /^#define i_mp un.mp$/
+i_mppgid ../dbinc/tcl_db.h /^#define i_mppgid i_otherid[0]$/
+i_pagep ../dbinc/tcl_db.h /^#define i_pagep un.anyp$/
+i_pgno ../dbinc/tcl_db.h /^#define i_pgno und.pgno$/
+i_pgsz ../dbinc/tcl_db.h /^#define i_pgsz und2.pagesz$/
+i_txnp ../dbinc/tcl_db.h /^#define i_txnp un.txnp$/
+idwhich ../tcl/tcl_env.c /^ enum idwhich {$/
+imp_ ../cxx/cxx_mpool.cpp /^: imp_(0)$/
+index_ ../cxx/cxx_except.cpp /^, index_(index)$/
+indx_t ../dbinc/db_185.in /^typedef u_int16_t indx_t;$/
+infop ../dbinc/tcl_db.h /^ union infop {$/
+initialize ../cxx/cxx_db.cpp /^\/\/ private method to initialize during construct/
+int ../db/db_upg.c /^static int (* const func_31_list[P_PAGETYPE_MAX])$/
+int_bool ../libdb_java/db_java_wrap.c /^typedef int int_bool;$/
+iov_base ../dbinc/repmgr.h /^#define iov_base buf$/
+iov_len ../dbinc/repmgr.h /^#define iov_len len$/
+isalpha ../clib/isalpha.c /^isalpha(c)$/
+isdigit ../clib/isdigit.c /^isdigit(c)$/
+isprint ../clib/isprint.c /^isprint(c)$/
+isspace ../clib/isspace.c /^isspace(c)$/
+keyInstance ../crypto/rijndael/rijndael-api-fst.h /^} keyInstance;$/
+ldopts ../tcl/tcl_lock.c /^ enum ldopts {$/
+lgopts ../tcl/tcl_lock.c /^ enum lgopts {$/
+linfo_t ../dbinc/rep.h /^} linfo_t;$/
+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)$/
lock_Cmd ../tcl/tcl_lock.c /^lock_Cmd(clientData, interp, objc, objv)$/
+locker_info ../lock/lock_deadlock.c /^} locker_info;$/
+locker_start ../mutex/tm.c /^locker_start(id)$/
+locker_wait ../mutex/tm.c /^locker_wait()$/
log_compare ../log/log_compare.c /^log_compare(lsn0, lsn1)$/
logc_Cmd ../tcl/tcl_log.c /^logc_Cmd(clientData, interp, objc, objv)$/
-logfile_validity ../dbinc/log.h 374
-m ../dbinc/tcl_db.h 42
-map_file ../mutex/tm.c /^map_file(gm_addrp, tm_addrp, lm_addrp, fdp)$/
+logccmds ../tcl/tcl_log.c /^ enum logccmds {$/
+logcgetopts ../tcl/tcl_log.c /^ enum logcgetopts {$/
+logfile_validity ../dbinc/log.h /^} logfile_validity;$/
+logputopts ../tcl/tcl_log.c /^ enum logputopts {$/
+lsnwhich ../tcl/tcl_env.c /^ enum lsnwhich {$/
+lvopts ../tcl/tcl_lock.c /^ enum lvopts {$/
+map_file ../mutex/tm.c /^map_file(gm_addrp, tm_addrp, lm_addrp, fhpp)$/
memcmp ../clib/memcmp.c /^memcmp(s1, s2, n)$/
-memcpy ../clib/memmove.c /^memcpy(dst0, src0, length)$/
+message_loop ../repmgr/repmgr_msg.c /^message_loop(dbenv)$/
+mgr_mutex_t ../dbinc/repmgr.h /^typedef HANDLE mgr_mutex_t;$/
mp_Cmd ../tcl/tcl_mp.c /^mp_Cmd(clientData, interp, objc, objv)$/
-mu_action ../dbinc/db_int.in 392
-mutex_Cmd ../tcl/tcl_util.c /^mutex_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 ../dbinc/db_int.in /^typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_/
+ndbcmds ../tcl/tcl_compat.c /^ enum ndbcmds {$/
ndbm_Cmd ../tcl/tcl_compat.c /^ndbm_Cmd(clientData, interp, objc, objv)$/
-new_Db ../libdb_java/db_java_wrap.c /^struct Db *new_Db(DB_ENV *dbenv,u_int32_t flags){$/
-new_DbEnv ../libdb_java/db_java_wrap.c /^struct DbEnv *new_DbEnv(u_int32_t flags){$/
-new_DbSequence ../libdb_java/db_java_wrap.c /^struct DbSequence *new_DbSequence(DB *db,u_int32_t/
+ndbopen ../tcl/tcl_compat.c /^ enum ndbopen {$/
+net_errno ../dbinc/repmgr.h /^#define net_errno WSAGetLastError()$/
+new_Db ../libdb_java/db_java_wrap.c /^SWIGINTERN struct Db *new_Db(DB_ENV *dbenv,u_int32/
+new_DbEnv ../libdb_java/db_java_wrap.c /^SWIGINTERN struct DbEnv *new_DbEnv(u_int32_t flags/
+new_DbSequence ../libdb_java/db_java_wrap.c /^SWIGINTERN struct DbSequence *new_DbSequence(DB *d/
new_ct_ent ../rpc_server/c/db_server_util.c /^new_ct_ent(errp)$/
+next ../cxx/cxx_multi.cpp /^bool DbMultipleDataIterator::next(Dbt &data)$/
nextkey ../dbinc/db.in /^#define nextkey(a) __db_dbm_nextkey@DB_VERSION_UNI/
-onint ../common/util_sig.c /^onint(signo)$/
+notify_handshake ../repmgr/repmgr_sel.c /^notify_handshake(dbenv, conn)$/
+op_is_remove ../mp/mp_method.c /^#define op_is_remove (newname == NULL)$/
+os_pid_t ../mutex/tm.c /^typedef HANDLE os_pid_t;$/
+os_spawn ../mutex/tm.c /^os_spawn(path, argv)$/
+os_thread_create ../mutex/tm.c /^#define os_thread_create(thrp, attr, func, arg) /
+os_thread_join ../mutex/tm.c /^#define os_thread_join(thr, statusp) \\$/
+os_thread_self ../mutex/tm.c /^#define os_thread_self() GetCurrentThreadId()$/
+os_thread_t ../mutex/tm.c /^typedef HANDLE os_thread_t;$/
+os_wait ../mutex/tm.c /^os_wait(procs, nprocs)$/
+p_ ../cxx/cxx_multi.cpp /^ p_((u_int32_t*)(data_ + dbt.get_ulen() - sizeof/
pg_Cmd ../tcl/tcl_mp.c /^pg_Cmd(clientData, interp, objc, objv)$/
-pgin_fcn_type ../dbinc/db_cxx.in 167
-pgno_t ../dbinc/db_185.in 76
-pgout_fcn_type ../dbinc/db_cxx.in 169
+pgcmds ../tcl/tcl_mp.c /^ enum pgcmds {$/
+pgcookie ../dbinc/db_cxx.in /^ (DB_ENV *dbenv, db_pgno_t pgno, void *pgaddr, DB/
+pget ../cxx/cxx_db.cpp /^int Db::pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Db/
+pglist ../dbinc/db_page.h /^struct pglist {$/
+pgno_t ../dbinc/db_185.in /^#define pgno_t db_pgno_t$/
+pgopt ../tcl/tcl_mp.c /^ enum pgopt {$/
+phase_t ../dbinc/repmgr.h /^} phase_t;$/
+printf ../clib/printf.c /^printf(fmt, va_alist)$/
+process_message ../repmgr/repmgr_msg.c /^process_message(dbenv, control, rec, eid)$/
pthread_cond_destroy ../mutex/mut_pthread.c /^#define pthread_cond_destroy(x) 0$/
-pthread_cond_signal ../mutex/mut_pthread.c 33
-pthread_cond_wait ../mutex/mut_pthread.c 34
+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$/
pthread_mutex_destroy ../mutex/mut_pthread.c /^#define pthread_mutex_destroy(x) 0$/
-pthread_mutex_lock ../mutex/mut_pthread.c 36
-pthread_mutex_trylock ../mutex/mut_pthread.c 37
-pthread_mutex_unlock ../mutex/mut_pthread.c 38
-pthread_self ../mutex/mut_pthread.c 54
-qam_name_op ../dbinc/qam.h 166
-qam_position_mode ../dbinc/qam.h 151
-qam_probe_mode ../dbinc/qam.h 157
+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$/
+qam_name_op ../dbinc/qam.h /^} qam_name_op;$/
+qam_probe_mode ../dbinc/qam.h /^} qam_probe_mode;$/
+qm_trace ../dbinc/queue.h /^struct qm_trace {$/
raise ../clib/raise.c /^raise(s)$/
-recno_t ../dbinc/db_185.in 84
-reg_type_t ../dbinc/region.h 117
-repdb_t ../dbinc/rep.h 98
-retval ../hsearch/hsearch.c /^static ENTRY retval;$/
-roff_t ../dbinc/db.in 121
+rand ../clib/rand.c /^int rand(void) \/* RAND_MAX assumed to be 32767 */
+rcmds ../tcl/tcl_util.c /^ enum rcmds {$/
+recno_t ../dbinc/db_185.in /^typedef u_int32_t recno_t;$/
+record_ack ../repmgr/repmgr_sel.c /^record_ack(dbenv, site, ack)$/
+reg_type_t ../dbinc/region.h /^ REGION_TYPE_TXN } reg_type_t;$/
+remove ../cxx/cxx_env.cpp /^int DbEnv::remove(const char *db_home, u_int32_t f/
+rep_send_callback_ ../cxx/cxx_env.cpp /^, rep_send_callback_(0)$/
+repdb_t ../dbinc/rep.h /^} repdb_t;$/
+repmgr_netaddr_t ../dbinc/repmgr.h /^} repmgr_netaddr_t;$/
+repmgr_timeval_t ../dbinc/repmgr.h /^} repmgr_timeval_t;$/
+rmgr ../tcl/tcl_rep.c /^ enum rmgr {$/
+roff_t ../dbinc/db.in /^typedef uintptr_t roff_t;$/
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)$/
+runtime_error ../cxx/cxx_env.cpp /^\/\/ Report an error associated with the DbEnv.$/
+runtime_error_dbt ../cxx/cxx_env.cpp /^\/\/ Like DbEnv::runtime_error, but issue a DbMemo/
+runtime_error_lock_get ../cxx/cxx_env.cpp /^\/\/ Like DbEnv::runtime_error, but issue a DbLock/
+select_timeout_t ../dbinc/repmgr.h /^typedef DWORD select_timeout_t;$/
+sending_msg ../repmgr/repmgr_net.c /^struct sending_msg {$/
seq_Cmd ../tcl/tcl_seq.c /^seq_Cmd(clientData, interp, objc, objv)$/
-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, .../
+seqcmds ../tcl/tcl_seq.c /^ enum seqcmds {$/
+seqgetopts ../tcl/tcl_seq.c /^ enum seqgetopts {$/
+seqopen ../tcl/tcl_db_pkg.c /^ enum seqopen {$/
+set_env ../cxx/cxx_except.cpp /^void DbException::set_env(DbEnv *env)$/
+set_error_stream ../cxx/cxx_env.cpp /^void DbEnv::set_error_stream(__DB_STD(ostream) *st/
+set_event_notify ../cxx/cxx_env.cpp /^int DbEnv::set_event_notify(void (*arg)(DbEnv *, u/
+set_feedback ../cxx/cxx_env.cpp /^int DbEnv::set_feedback(void (*arg)(DbEnv *, int, /
+set_message_stream ../cxx/cxx_env.cpp /^void DbEnv::set_message_stream(__DB_STD(ostream) */
+set_paniccall ../cxx/cxx_env.cpp /^int DbEnv::set_paniccall(void (*arg)(DbEnv *, int)/
+set_signal ../common/util_sig.c /^set_signal(s, is_dflt)$/
+set_thread_id_string ../cxx/cxx_env.cpp /^int DbEnv::set_thread_id_string($/
+setup_sending_msg ../repmgr/repmgr_net.c /^setup_sending_msg(msg, type, control, rec)$/
+sfonoff ../tcl/tcl_env.c /^ enum sfonoff {$/
+sfwhich ../tcl/tcl_env.c /^ enum sfwhich {$/
+signal_handler ../common/util_sig.c /^signal_handler(signo)$/
+size_t ../dbinc/db_cxx.in /^ (size_t);$/
+snprintf ../clib/snprintf.c /^snprintf(str, n, fmt, va_alist)$/
+socket_t ../dbinc/repmgr.h /^typedef SOCKET socket_t;$/
+socklen_t ../dbinc/repmgr.h /^typedef int socklen_t;$/
+sockopt_t ../dbinc/repmgr.h /^typedef char * sockopt_t;$/
+spawn_proc ../mutex/tm.c /^spawn_proc(id, tmpath, typearg)$/
sprintf_overflow ../clib/snprintf.c /^sprintf_overflow()$/
sprintf_retcharpnt ../clib/snprintf.c /^sprintf_retcharpnt()$/
+srand ../clib/rand.c /^void srand(unsigned int seed)$/
+srchacts ../tcl/tcl_compat.c /^ enum srchacts {$/
+start_election_thread ../repmgr/repmgr_elect.c /^start_election_thread(dbenv)$/
+stflag ../tcl/tcl_compat.c /^ enum stflag {$/
store ../dbinc/db.in /^#define store(a, b) __db_dbm_store@DB_VERSION_UNIQ/
strcasecmp ../clib/strcasecmp.c /^strcasecmp(s1, s2)$/
+strcat ../clib/strcat.c /^strcat(char *s, const char *append)$/
+strchr ../clib/strchr.c /^char *strchr(const char *p, int ch)$/
strdup ../clib/strdup.c /^strdup(str)$/
strerror ../clib/strerror.c /^strerror(num)$/
strncasecmp ../clib/strcasecmp.c /^strncasecmp(s1, s2, n)$/
+strncat ../clib/strncat.c /^strncat(char *dst, const char *src, size_t n)$/
+strncmp ../clib/strncmp.c /^strncmp(s1, s2, n)$/
+strrchr ../clib/strrchr.c /^char *strrchr(const char *p, int ch)$/
+strsep ../clib/strsep.c /^strsep(stringp, delim)$/
strtol ../clib/strtol.c /^strtol(nptr, endptr, base)$/
strtoul ../clib/strtoul.c /^strtoul(nptr, endptr, base)$/
+tcl_CDSGroup ../tcl/tcl_txn.c /^tcl_CDSGroup(interp, objc, objv, envp, envip)$/
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_EnvAttr ../tcl/tcl_env.c /^tcl_EnvAttr(interp, objc, objv, dbenv)$/
tcl_EnvGetEncryptFlags ../tcl/tcl_env.c /^tcl_EnvGetEncryptFlags(interp, objc, objv, dbenv)$/
+tcl_EnvIdReset ../tcl/tcl_env.c /^tcl_EnvIdReset(interp, objc, objv, dbenv)$/
+tcl_EnvLsnReset ../tcl/tcl_env.c /^tcl_EnvLsnReset(interp, objc, objv, dbenv)$/
tcl_EnvRemove ../tcl/tcl_env.c /^tcl_EnvRemove(interp, objc, objv, dbenv, envip)$/
tcl_EnvSetErrfile ../tcl/tcl_env.c /^tcl_EnvSetErrfile(interp, dbenv, ip, errf)$/
tcl_EnvSetErrpfx ../tcl/tcl_env.c /^tcl_EnvSetErrpfx(interp, dbenv, ip, pfx)$/
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_EventNotify ../tcl/tcl_env.c /^tcl_EventNotify(interp, dbenv, eobj, ip)$/
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)$/
@@ -4261,17 +4877,21 @@ 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_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_RepConfig ../tcl/tcl_rep.c /^tcl_RepConfig(interp, dbenv, list)$/
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_RepGetConfig ../tcl/tcl_rep.c /^tcl_RepGetConfig(interp, dbenv, which)$/
tcl_RepLimit ../tcl/tcl_rep.c /^tcl_RepLimit(interp, objc, objv, dbenv)$/
+tcl_RepMgr ../tcl/tcl_rep.c /^tcl_RepMgr(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_RepSync ../tcl/tcl_rep.c /^tcl_RepSync(interp, objc, objv, dbenv)$/
+tcl_RepTransport ../tcl/tcl_rep.c /^tcl_RepTransport(interp, objc, objv, dbenv, ip)$/
tcl_SeqClose ../tcl/tcl_seq.c /^tcl_SeqClose(interp, objc, objv, seq, ip)$/
tcl_SeqGet ../tcl/tcl_seq.c /^tcl_SeqGet(interp, objc, objv, seq)$/
tcl_SeqGetFlags ../tcl/tcl_seq.c /^tcl_SeqGetFlags(interp, objc, objv, seq)$/
@@ -4291,22 +4911,41 @@ 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_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)$/
+tclrpstrt ../tcl/tcl_rep.c /^ enum tclrpstrt {$/
+thread_id_t ../dbinc/repmgr.h /^typedef HANDLE thread_id_t;$/
+threadsync_timeout_t ../dbinc/repmgr.h /^typedef DWORD threadsync_timeout_t;$/
+tm_env_close ../mutex/tm.c /^tm_env_close()$/
+tm_env_init ../mutex/tm.c /^tm_env_init()$/
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()$/
-tsl_t ../dbinc/mutex.h 79
+tsl_t ../dbinc/mutex_int.h /^typedef int tsl_t;$/
txn_Cmd ../tcl/tcl_txn.c /^txn_Cmd(clientData, interp, objc, objv)$/
-txnop_t ../txn/txn.c 96
-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)$/
+txn_begin ../cxx/cxx_env.cpp /^int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_in/
+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 {$/
+u16 ../crypto/rijndael/rijndael-alg-fst.h /^typedef u_int16_t u16;$/
+u32 ../crypto/rijndael/rijndael-alg-fst.h /^typedef u_int32_t u32;$/
+u8 ../crypto/rijndael/rijndael-alg-fst.h /^typedef u_int8_t u8;$/
+u_int32_t ../dbinc/db_cxx.in /^ (DB *, const void *, u_int32_t);$/
+unmap_file ../mutex/tm.c /^unmap_file(addr, fhp)$/
usage ../mutex/tm.c /^usage()$/
-val ../dbinc/tcl_db.h 43
+verbonoff ../tcl/tcl_env.c /^ enum verbonoff {$/
+verbwhich ../tcl/tcl_env.c /^ enum verbwhich {$/
version_check ../rpc_server/c/db_server_util.c /^version_check()$/
+vfprintf ../clib/printf.c /^vfprintf(fp, fmt, ap)$/
+void ../dbinc/db_cxx.in /^ (void *);$/
vsnprintf ../clib/snprintf.c /^vsnprintf(str, n, fmt, ap)$/
-wmask ../clib/memmove.c 53
-word ../clib/memmove.c 48
-wsize ../clib/memmove.c 51
+wakeup_start ../mutex/tm.c /^wakeup_start(id)$/
+wakeup_wait ../mutex/tm.c /^wakeup_wait()$/
+what ../cxx/cxx_except.cpp /^const char *DbException::what() const throw()$/
+wmask ../clib/memmove.c /^#define wmask (wsize - 1)$/
+word ../clib/memmove.c /^typedef int word; \/* "word" used for optimal cop/
+wrap_DB_ENV ../cxx/cxx_env.cpp /^\/\/ static method$/
+wrap_DB_SEQUENCE ../cxx/cxx_seq.cpp /^\/\/ static method$/
+wsize ../clib/memmove.c /^#define wsize sizeof(word)$/
+xa_switch_t ../dbinc/xa.h /^struct xa_switch_t {$/
+xid_t ../dbinc/xa.h /^struct xid_t {$/
diff --git a/db/dist/template/db_server_proc b/db/dist/template/db_server_proc
index 224c83684..04ada6b5d 100644
--- a/db/dist/template/db_server_proc
+++ b/db/dist/template/db_server_proc
@@ -1,32 +1,21 @@
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
#include <rpc/rpc.h>
-
-#include <string.h>
#endif
-
#include "db_server.h"
-
-#include "db_int.h"
#include "dbinc/db_server_int.h"
-/* BEGIN __env_get_cachesize_proc */
+/* BEGIN __env_create_proc */
void
-__env_get_cachesize_proc(dbenvcl_id,
- replyp)
- long dbenvcl_id;
- __env_get_cachesize_reply *replyp;
-/* END __env_get_cachesize_proc */
+__env_create_proc(timeout, replyp)
+ u_int32_t timeout;
+ __env_create_reply *replyp;
+/* END __env_create_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
@@ -36,16 +25,12 @@ __env_get_cachesize_proc(dbenvcl_id,
return;
}
-/* BEGIN __env_cachesize_proc */
+/* BEGIN __env_cdsgroup_begin_proc */
void
-__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_proc */
+__env_cdsgroup_begin_proc(dbenvcl_id, replyp)
+ unsigned int dbenvcl_id;
+ __env_cdsgroup_begin_reply *replyp;
+/* END __env_cdsgroup_begin_proc */
{
int ret;
DB_ENV * dbenv;
@@ -65,7 +50,7 @@ __env_cachesize_proc(dbenvcl_id, gbytes, bytes,
/* BEGIN __env_close_proc */
void
__env_close_proc(dbenvcl_id, flags, replyp)
- long dbenvcl_id;
+ unsigned int dbenvcl_id;
u_int32_t flags;
__env_close_reply *replyp;
/* END __env_close_proc */
@@ -85,30 +70,12 @@ __env_close_proc(dbenvcl_id, flags, replyp)
return;
}
-/* BEGIN __env_create_proc */
-void
-__env_create_proc(timeout, replyp)
- u_int32_t timeout;
- __env_create_reply *replyp;
-/* 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;
+ unsigned int dbenvcl_id;
+ unsigned int txnpcl_id;
char *name;
char *subdb;
u_int32_t flags;
@@ -138,8 +105,8 @@ __env_dbremove_proc(dbenvcl_id, txnpcl_id, name,
void
__env_dbrename_proc(dbenvcl_id, txnpcl_id, name,
subdb, newname, flags, replyp)
- long dbenvcl_id;
- long txnpcl_id;
+ unsigned int dbenvcl_id;
+ unsigned int txnpcl_id;
char *name;
char *subdb;
char *newname;
@@ -166,12 +133,13 @@ __env_dbrename_proc(dbenvcl_id, txnpcl_id, name,
return;
}
-/* BEGIN __env_get_encrypt_flags_proc */
+/* BEGIN __env_get_cachesize_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 */
+__env_get_cachesize_proc(dbenvcl_id,
+ replyp)
+ unsigned int dbenvcl_id;
+ __env_get_cachesize_reply *replyp;
+/* END __env_get_cachesize_proc */
{
int ret;
DB_ENV * dbenv;
@@ -188,14 +156,12 @@ __env_get_encrypt_flags_proc(dbenvcl_id, replyp)
return;
}
-/* BEGIN __env_encrypt_proc */
+/* BEGIN __env_get_encrypt_flags_proc */
void
-__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 */
+__env_get_encrypt_flags_proc(dbenvcl_id, replyp)
+ unsigned int dbenvcl_id;
+ __env_get_encrypt_flags_reply *replyp;
+/* END __env_get_encrypt_flags_proc */
{
int ret;
DB_ENV * dbenv;
@@ -215,7 +181,7 @@ __env_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
/* BEGIN __env_get_flags_proc */
void
__env_get_flags_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ unsigned int dbenvcl_id;
__env_get_flags_reply *replyp;
/* END __env_get_flags_proc */
{
@@ -234,34 +200,10 @@ __env_get_flags_proc(dbenvcl_id, replyp)
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_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;
+ unsigned int dbenvcl_id;
__env_get_home_reply *replyp;
/* END __env_get_home_proc */
{
@@ -283,7 +225,7 @@ __env_get_home_proc(dbenvcl_id, replyp)
/* BEGIN __env_get_open_flags_proc */
void
__env_get_open_flags_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ unsigned int dbenvcl_id;
__env_get_open_flags_reply *replyp;
/* END __env_get_open_flags_proc */
{
@@ -306,7 +248,7 @@ __env_get_open_flags_proc(dbenvcl_id, replyp)
void
__env_open_proc(dbenvcl_id, home, flags,
mode, replyp)
- long dbenvcl_id;
+ unsigned int dbenvcl_id;
char *home;
u_int32_t flags;
u_int32_t mode;
@@ -331,7 +273,7 @@ __env_open_proc(dbenvcl_id, home, flags,
/* BEGIN __env_remove_proc */
void
__env_remove_proc(dbenvcl_id, home, flags, replyp)
- long dbenvcl_id;
+ unsigned int dbenvcl_id;
char *home;
u_int32_t flags;
__env_remove_reply *replyp;
@@ -352,19 +294,23 @@ __env_remove_proc(dbenvcl_id, home, flags, replyp)
return;
}
-/* BEGIN __txn_abort_proc */
+/* BEGIN __env_set_cachesize_proc */
void
-__txn_abort_proc(txnpcl_id, replyp)
- long txnpcl_id;
- __txn_abort_reply *replyp;
-/* END __txn_abort_proc */
+__env_set_cachesize_proc(dbenvcl_id, gbytes, bytes,
+ ncache, replyp)
+ unsigned int dbenvcl_id;
+ u_int32_t gbytes;
+ u_int32_t bytes;
+ u_int32_t ncache;
+ __env_set_cachesize_reply *replyp;
+/* END __env_set_cachesize_proc */
{
int ret;
- DB_TXN * txnp;
- ct_entry *txnp_ctp;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
- ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
- txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -374,26 +320,21 @@ __txn_abort_proc(txnpcl_id, replyp)
return;
}
-/* BEGIN __txn_begin_proc */
+/* BEGIN __env_set_encrypt_proc */
void
-__txn_begin_proc(dbenvcl_id, parentcl_id,
- flags, replyp)
- long dbenvcl_id;
- long parentcl_id;
+__env_set_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
+ unsigned int dbenvcl_id;
+ char *passwd;
u_int32_t flags;
- __txn_begin_reply *replyp;
-/* END __txn_begin_proc */
+ __env_set_encrypt_reply *replyp;
+/* END __env_set_encrypt_proc */
{
int ret;
DB_ENV * dbenv;
ct_entry *dbenv_ctp;
- DB_TXN * parent;
- ct_entry *parent_ctp;
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;
/*
* XXX Code goes here
@@ -403,20 +344,21 @@ __txn_begin_proc(dbenvcl_id, parentcl_id,
return;
}
-/* BEGIN __txn_commit_proc */
+/* BEGIN __env_set_flags_proc */
void
-__txn_commit_proc(txnpcl_id, flags, replyp)
- long txnpcl_id;
+__env_set_flags_proc(dbenvcl_id, flags, onoff, replyp)
+ unsigned int dbenvcl_id;
u_int32_t flags;
- __txn_commit_reply *replyp;
-/* END __txn_commit_proc */
+ u_int32_t onoff;
+ __env_set_flags_reply *replyp;
+/* END __env_set_flags_proc */
{
int ret;
- DB_TXN * txnp;
- ct_entry *txnp_ctp;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
- ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
- txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -426,20 +368,26 @@ __txn_commit_proc(txnpcl_id, flags, replyp)
return;
}
-/* BEGIN __txn_discard_proc */
+/* BEGIN __env_txn_begin_proc */
void
-__txn_discard_proc(txnpcl_id, flags, replyp)
- long txnpcl_id;
+__env_txn_begin_proc(dbenvcl_id, parentcl_id,
+ flags, replyp)
+ unsigned int dbenvcl_id;
+ unsigned int parentcl_id;
u_int32_t flags;
- __txn_discard_reply *replyp;
-/* END __txn_discard_proc */
+ __env_txn_begin_reply *replyp;
+/* END __env_txn_begin_proc */
{
int ret;
- DB_TXN * txnp;
- ct_entry *txnp_ctp;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+ DB_TXN * parent;
+ ct_entry *parent_ctp;
- ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
- txnp = (DB_TXN *)txnp_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;
/*
* XXX Code goes here
@@ -449,20 +397,23 @@ __txn_discard_proc(txnpcl_id, flags, replyp)
return;
}
-/* BEGIN __txn_prepare_proc */
+/* BEGIN __env_txn_recover_proc */
void
-__txn_prepare_proc(txnpcl_id, gid, replyp)
- long txnpcl_id;
- u_int8_t *gid;
- __txn_prepare_reply *replyp;
-/* END __txn_prepare_proc */
+__env_txn_recover_proc(dbenvcl_id, count,
+ flags, replyp, freep)
+ unsigned int dbenvcl_id;
+ u_int32_t count;
+ u_int32_t flags;
+ __env_txn_recover_reply *replyp;
+ int * freep;
+/* END __env_txn_recover_proc */
{
int ret;
- DB_TXN * txnp;
- ct_entry *txnp_ctp;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
- ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
- txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -472,16 +423,13 @@ __txn_prepare_proc(txnpcl_id, gid, replyp)
return;
}
-/* BEGIN __txn_recover_proc */
+/* BEGIN __db_create_proc */
void
-__txn_recover_proc(dbenvcl_id, count,
- flags, replyp, freep)
- long dbenvcl_id;
- u_int32_t count;
+__db_create_proc(dbenvcl_id, flags, replyp)
+ unsigned int dbenvcl_id;
u_int32_t flags;
- __txn_recover_reply *replyp;
- int * freep;
-/* END __txn_recover_proc */
+ __db_create_reply *replyp;
+/* END __db_create_proc */
{
int ret;
DB_ENV * dbenv;
@@ -502,9 +450,9 @@ __txn_recover_proc(dbenvcl_id, count,
void
__db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id,
flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
- long sdbpcl_id;
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
+ unsigned int sdbpcl_id;
u_int32_t flags;
__db_associate_reply *replyp;
/* END __db_associate_proc */
@@ -532,78 +480,10 @@ __db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id,
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_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;
- 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_bt_minkey_proc */
-void
-__db_bt_minkey_proc(dbpcl_id, minkey, replyp)
- long dbpcl_id;
- u_int32_t minkey;
- __db_bt_minkey_reply *replyp;
-/* END __db_bt_minkey_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_close_proc */
void
__db_close_proc(dbpcl_id, flags, replyp)
- long dbpcl_id;
+ unsigned int dbpcl_id;
u_int32_t flags;
__db_close_reply *replyp;
/* END __db_close_proc */
@@ -623,20 +503,26 @@ __db_close_proc(dbpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_create_proc */
+/* BEGIN __db_cursor_proc */
void
-__db_create_proc(dbenvcl_id, flags, replyp)
- long dbenvcl_id;
+__db_cursor_proc(dbpcl_id, txnpcl_id,
+ flags, replyp)
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
u_int32_t flags;
- __db_create_reply *replyp;
-/* END __db_create_proc */
+ __db_cursor_reply *replyp;
+/* END __db_cursor_proc */
{
int ret;
- DB_ENV * dbenv;
- ct_entry *dbenv_ctp;
+ DB * dbp;
+ ct_entry *dbp_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(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
@@ -651,8 +537,8 @@ void
__db_del_proc(dbpcl_id, txnpcl_id, keydlen,
keydoff, keyulen, keyflags, keydata,
keysize, flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -682,19 +568,41 @@ __db_del_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_get_encrypt_flags_proc */
+/* BEGIN __db_get_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 */
+__db_get_proc(dbpcl_id, txnpcl_id, keydlen,
+ keydoff, keyulen, keyflags, keydata,
+ keysize, datadlen, datadoff, dataulen,
+ dataflags, datadata, datasize, flags, replyp, freep)
+ unsigned int dbpcl_id;
+ unsigned int 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_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
@@ -704,14 +612,12 @@ __db_get_encrypt_flags_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_encrypt_proc */
+/* BEGIN __db_get_bt_minkey_proc */
void
-__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 */
+__db_get_bt_minkey_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_bt_minkey_reply *replyp;
+/* END __db_get_bt_minkey_proc */
{
int ret;
DB * dbp;
@@ -728,12 +634,12 @@ __db_encrypt_proc(dbpcl_id, passwd, flags, replyp)
return;
}
-/* BEGIN __db_get_extentsize_proc */
+/* BEGIN __db_get_dbname_proc */
void
-__db_get_extentsize_proc(dbpcl_id, replyp)
- long dbpcl_id;
- __db_get_extentsize_reply *replyp;
-/* END __db_get_extentsize_proc */
+__db_get_dbname_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_dbname_reply *replyp;
+/* END __db_get_dbname_proc */
{
int ret;
DB * dbp;
@@ -750,13 +656,12 @@ __db_get_extentsize_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_extentsize_proc */
+/* BEGIN __db_get_encrypt_flags_proc */
void
-__db_extentsize_proc(dbpcl_id, extentsize, replyp)
- long dbpcl_id;
- u_int32_t extentsize;
- __db_extentsize_reply *replyp;
-/* END __db_extentsize_proc */
+__db_get_encrypt_flags_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_encrypt_flags_reply *replyp;
+/* END __db_get_encrypt_flags_proc */
{
int ret;
DB * dbp;
@@ -776,7 +681,7 @@ __db_extentsize_proc(dbpcl_id, extentsize, replyp)
/* BEGIN __db_get_flags_proc */
void
__db_get_flags_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ unsigned int dbpcl_id;
__db_get_flags_reply *replyp;
/* END __db_get_flags_proc */
{
@@ -795,13 +700,12 @@ __db_get_flags_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_flags_proc */
+/* BEGIN __db_get_h_ffactor_proc */
void
-__db_flags_proc(dbpcl_id, flags, replyp)
- long dbpcl_id;
- u_int32_t flags;
- __db_flags_reply *replyp;
-/* END __db_flags_proc */
+__db_get_h_ffactor_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_h_ffactor_reply *replyp;
+/* END __db_get_h_ffactor_proc */
{
int ret;
DB * dbp;
@@ -818,41 +722,19 @@ __db_flags_proc(dbpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_get_proc */
+/* BEGIN __db_get_h_nelem_proc */
void
-__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_proc */
+__db_get_h_nelem_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_h_nelem_reply *replyp;
+/* END __db_get_h_nelem_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
@@ -862,12 +744,12 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_get_name_proc */
+/* BEGIN __db_get_lorder_proc */
void
-__db_get_name_proc(dbpcl_id, replyp)
- long dbpcl_id;
- __db_get_name_reply *replyp;
-/* END __db_get_name_proc */
+__db_get_lorder_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_lorder_reply *replyp;
+/* END __db_get_lorder_proc */
{
int ret;
DB * dbp;
@@ -887,7 +769,7 @@ __db_get_name_proc(dbpcl_id, replyp)
/* BEGIN __db_get_open_flags_proc */
void
__db_get_open_flags_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ unsigned int dbpcl_id;
__db_get_open_flags_reply *replyp;
/* END __db_get_open_flags_proc */
{
@@ -906,12 +788,12 @@ __db_get_open_flags_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_get_h_ffactor_proc */
+/* BEGIN __db_get_pagesize_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 */
+__db_get_pagesize_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_pagesize_reply *replyp;
+/* END __db_get_pagesize_proc */
{
int ret;
DB * dbp;
@@ -928,13 +810,12 @@ __db_get_h_ffactor_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_h_ffactor_proc */
+/* BEGIN __db_get_q_extentsize_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_proc */
+__db_get_q_extentsize_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_q_extentsize_reply *replyp;
+/* END __db_get_q_extentsize_proc */
{
int ret;
DB * dbp;
@@ -951,12 +832,12 @@ __db_h_ffactor_proc(dbpcl_id, ffactor, replyp)
return;
}
-/* BEGIN __db_get_h_nelem_proc */
+/* BEGIN __db_get_re_delim_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 */
+__db_get_re_delim_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_re_delim_reply *replyp;
+/* END __db_get_re_delim_proc */
{
int ret;
DB * dbp;
@@ -973,13 +854,12 @@ __db_get_h_nelem_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_h_nelem_proc */
+/* BEGIN __db_get_re_len_proc */
void
-__db_h_nelem_proc(dbpcl_id, nelem, replyp)
- long dbpcl_id;
- u_int32_t nelem;
- __db_h_nelem_reply *replyp;
-/* END __db_h_nelem_proc */
+__db_get_re_len_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_re_len_reply *replyp;
+/* END __db_get_re_len_proc */
{
int ret;
DB * dbp;
@@ -996,33 +876,19 @@ __db_h_nelem_proc(dbpcl_id, nelem, replyp)
return;
}
-/* BEGIN __db_key_range_proc */
+/* BEGIN __db_get_re_pad_proc */
void
-__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_proc */
+__db_get_re_pad_proc(dbpcl_id, replyp)
+ unsigned int dbpcl_id;
+ __db_get_re_pad_reply *replyp;
+/* END __db_get_re_pad_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
@@ -1032,12 +898,16 @@ __db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_get_lorder_proc */
+/* BEGIN __db_join_proc */
void
-__db_get_lorder_proc(dbpcl_id, replyp)
- long dbpcl_id;
- __db_get_lorder_reply *replyp;
-/* END __db_get_lorder_proc */
+__db_join_proc(dbpcl_id, curs, curslen,
+ flags, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t * curs;
+ u_int32_t curslen;
+ u_int32_t flags;
+ __db_join_reply *replyp;
+/* END __db_join_proc */
{
int ret;
DB * dbp;
@@ -1054,20 +924,33 @@ __db_get_lorder_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_lorder_proc */
+/* BEGIN __db_key_range_proc */
void
-__db_lorder_proc(dbpcl_id, lorder, replyp)
- long dbpcl_id;
- u_int32_t lorder;
- __db_lorder_reply *replyp;
-/* END __db_lorder_proc */
+__db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,
+ keydoff, keyulen, keyflags, keydata,
+ keysize, flags, replyp)
+ unsigned int dbpcl_id;
+ unsigned int 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_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
@@ -1081,8 +964,8 @@ __db_lorder_proc(dbpcl_id, lorder, replyp)
void
__db_open_proc(dbpcl_id, txnpcl_id, name,
subdb, type, flags, mode, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
char *name;
char *subdb;
u_int32_t type;
@@ -1110,51 +993,6 @@ __db_open_proc(dbpcl_id, txnpcl_id, name,
return;
}
-/* BEGIN __db_get_pagesize_proc */
-void
-__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_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_pget_proc */
void
__db_pget_proc(dbpcl_id, txnpcl_id, skeydlen,
@@ -1163,8 +1001,8 @@ __db_pget_proc(dbpcl_id, txnpcl_id, skeydlen,
pkeyflags, pkeydata, pkeysize, datadlen,
datadoff, dataulen, dataflags, datadata,
datasize, flags, replyp, freep)
- long dbpcl_id;
- long txnpcl_id;
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
u_int32_t skeydlen;
u_int32_t skeydoff;
u_int32_t skeyulen;
@@ -1213,8 +1051,8 @@ __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;
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -1251,12 +1089,16 @@ __db_put_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_get_re_delim_proc */
+/* BEGIN __db_remove_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 */
+__db_remove_proc(dbpcl_id, name, subdb,
+ flags, replyp)
+ unsigned int dbpcl_id;
+ char *name;
+ char *subdb;
+ u_int32_t flags;
+ __db_remove_reply *replyp;
+/* END __db_remove_proc */
{
int ret;
DB * dbp;
@@ -1273,13 +1115,17 @@ __db_get_re_delim_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_re_delim_proc */
+/* BEGIN __db_rename_proc */
void
-__db_re_delim_proc(dbpcl_id, delim, replyp)
- long dbpcl_id;
- u_int32_t delim;
- __db_re_delim_reply *replyp;
-/* END __db_re_delim_proc */
+__db_rename_proc(dbpcl_id, name, subdb,
+ newname, flags, replyp)
+ unsigned int dbpcl_id;
+ char *name;
+ char *subdb;
+ char *newname;
+ u_int32_t flags;
+ __db_rename_reply *replyp;
+/* END __db_rename_proc */
{
int ret;
DB * dbp;
@@ -1296,12 +1142,13 @@ __db_re_delim_proc(dbpcl_id, delim, replyp)
return;
}
-/* BEGIN __db_get_re_len_proc */
+/* BEGIN __db_set_bt_minkey_proc */
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_set_bt_minkey_proc(dbpcl_id, minkey, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t minkey;
+ __db_set_bt_minkey_reply *replyp;
+/* END __db_set_bt_minkey_proc */
{
int ret;
DB * dbp;
@@ -1318,13 +1165,14 @@ __db_get_re_len_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_re_len_proc */
+/* BEGIN __db_set_encrypt_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_proc */
+__db_set_encrypt_proc(dbpcl_id, passwd, flags, replyp)
+ unsigned int dbpcl_id;
+ char *passwd;
+ u_int32_t flags;
+ __db_set_encrypt_reply *replyp;
+/* END __db_set_encrypt_proc */
{
int ret;
DB * dbp;
@@ -1341,13 +1189,13 @@ __db_re_len_proc(dbpcl_id, len, replyp)
return;
}
-/* BEGIN __db_re_pad_proc */
+/* BEGIN __db_set_flags_proc */
void
-__db_re_pad_proc(dbpcl_id, pad, replyp)
- long dbpcl_id;
- u_int32_t pad;
- __db_re_pad_reply *replyp;
-/* END __db_re_pad_proc */
+__db_set_flags_proc(dbpcl_id, flags, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t flags;
+ __db_set_flags_reply *replyp;
+/* END __db_set_flags_proc */
{
int ret;
DB * dbp;
@@ -1364,12 +1212,13 @@ __db_re_pad_proc(dbpcl_id, pad, replyp)
return;
}
-/* BEGIN __db_get_re_pad_proc */
+/* BEGIN __db_set_h_ffactor_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 */
+__db_set_h_ffactor_proc(dbpcl_id, ffactor, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t ffactor;
+ __db_set_h_ffactor_reply *replyp;
+/* END __db_set_h_ffactor_proc */
{
int ret;
DB * dbp;
@@ -1386,16 +1235,13 @@ __db_get_re_pad_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_remove_proc */
+/* BEGIN __db_set_h_nelem_proc */
void
-__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_proc */
+__db_set_h_nelem_proc(dbpcl_id, nelem, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t nelem;
+ __db_set_h_nelem_reply *replyp;
+/* END __db_set_h_nelem_proc */
{
int ret;
DB * dbp;
@@ -1412,17 +1258,13 @@ __db_remove_proc(dbpcl_id, name, subdb,
return;
}
-/* BEGIN __db_rename_proc */
+/* BEGIN __db_set_lorder_proc */
void
-__db_rename_proc(dbpcl_id, name, subdb,
- newname, flags, replyp)
- long dbpcl_id;
- char *name;
- char *subdb;
- char *newname;
- u_int32_t flags;
- __db_rename_reply *replyp;
-/* END __db_rename_proc */
+__db_set_lorder_proc(dbpcl_id, lorder, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t lorder;
+ __db_set_lorder_reply *replyp;
+/* END __db_set_lorder_proc */
{
int ret;
DB * dbp;
@@ -1439,27 +1281,20 @@ __db_rename_proc(dbpcl_id, name, subdb,
return;
}
-/* BEGIN __db_stat_proc */
+/* BEGIN __db_set_pagesize_proc */
void
-__db_stat_proc(dbpcl_id, txnpcl_id,
- flags, replyp, freep)
- long dbpcl_id;
- long txnpcl_id;
- u_int32_t flags;
- __db_stat_reply *replyp;
- int * freep;
-/* END __db_stat_proc */
+__db_set_pagesize_proc(dbpcl_id, pagesize, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t pagesize;
+ __db_set_pagesize_reply *replyp;
+/* END __db_set_pagesize_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
@@ -1469,13 +1304,13 @@ __db_stat_proc(dbpcl_id, txnpcl_id,
return;
}
-/* BEGIN __db_sync_proc */
+/* BEGIN __db_set_q_extentsize_proc */
void
-__db_sync_proc(dbpcl_id, flags, replyp)
- long dbpcl_id;
- u_int32_t flags;
- __db_sync_reply *replyp;
-/* END __db_sync_proc */
+__db_set_q_extentsize_proc(dbpcl_id, extentsize, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t extentsize;
+ __db_set_q_extentsize_reply *replyp;
+/* END __db_set_q_extentsize_proc */
{
int ret;
DB * dbp;
@@ -1492,15 +1327,85 @@ __db_sync_proc(dbpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_truncate_proc */
+/* BEGIN __db_set_re_delim_proc */
void
-__db_truncate_proc(dbpcl_id, txnpcl_id,
- flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+__db_set_re_delim_proc(dbpcl_id, delim, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t delim;
+ __db_set_re_delim_reply *replyp;
+/* END __db_set_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_set_re_len_proc */
+void
+__db_set_re_len_proc(dbpcl_id, len, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t len;
+ __db_set_re_len_reply *replyp;
+/* END __db_set_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_set_re_pad_proc */
+void
+__db_set_re_pad_proc(dbpcl_id, pad, replyp)
+ unsigned int dbpcl_id;
+ u_int32_t pad;
+ __db_set_re_pad_reply *replyp;
+/* END __db_set_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_stat_proc */
+void
+__db_stat_proc(dbpcl_id, txnpcl_id,
+ flags, replyp, freep)
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
u_int32_t flags;
- __db_truncate_reply *replyp;
-/* END __db_truncate_proc */
+ __db_stat_reply *replyp;
+ int * freep;
+/* END __db_stat_proc */
{
int ret;
DB * dbp;
@@ -1521,26 +1426,20 @@ __db_truncate_proc(dbpcl_id, txnpcl_id,
return;
}
-/* BEGIN __db_cursor_proc */
+/* BEGIN __db_sync_proc */
void
-__db_cursor_proc(dbpcl_id, txnpcl_id,
- flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+__db_sync_proc(dbpcl_id, flags, replyp)
+ unsigned int dbpcl_id;
u_int32_t flags;
- __db_cursor_reply *replyp;
-/* END __db_cursor_proc */
+ __db_sync_reply *replyp;
+/* END __db_sync_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
@@ -1550,23 +1449,26 @@ __db_cursor_proc(dbpcl_id, txnpcl_id,
return;
}
-/* BEGIN __db_join_proc */
+/* BEGIN __db_truncate_proc */
void
-__db_join_proc(dbpcl_id, curs, curslen,
+__db_truncate_proc(dbpcl_id, txnpcl_id,
flags, replyp)
- long dbpcl_id;
- u_int32_t * curs;
- u_int32_t curslen;
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
u_int32_t flags;
- __db_join_reply *replyp;
-/* END __db_join_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
@@ -1576,12 +1478,12 @@ __db_join_proc(dbpcl_id, curs, curslen,
return;
}
-/* BEGIN __dbc_close_proc */
+/* BEGIN __dbc_c_close_proc */
void
-__dbc_close_proc(dbccl_id, replyp)
- long dbccl_id;
- __dbc_close_reply *replyp;
-/* END __dbc_close_proc */
+__dbc_c_close_proc(dbccl_id, replyp)
+ unsigned int dbccl_id;
+ __dbc_c_close_reply *replyp;
+/* END __dbc_c_close_proc */
{
int ret;
DBC * dbc;
@@ -1598,13 +1500,13 @@ __dbc_close_proc(dbccl_id, replyp)
return;
}
-/* BEGIN __dbc_count_proc */
+/* BEGIN __dbc_c_count_proc */
void
-__dbc_count_proc(dbccl_id, flags, replyp)
- long dbccl_id;
+__dbc_c_count_proc(dbccl_id, flags, replyp)
+ unsigned int dbccl_id;
u_int32_t flags;
- __dbc_count_reply *replyp;
-/* END __dbc_count_proc */
+ __dbc_c_count_reply *replyp;
+/* END __dbc_c_count_proc */
{
int ret;
DBC * dbc;
@@ -1621,13 +1523,13 @@ __dbc_count_proc(dbccl_id, flags, replyp)
return;
}
-/* BEGIN __dbc_del_proc */
+/* BEGIN __dbc_c_del_proc */
void
-__dbc_del_proc(dbccl_id, flags, replyp)
- long dbccl_id;
+__dbc_c_del_proc(dbccl_id, flags, replyp)
+ unsigned int dbccl_id;
u_int32_t flags;
- __dbc_del_reply *replyp;
-/* END __dbc_del_proc */
+ __dbc_c_del_reply *replyp;
+/* END __dbc_c_del_proc */
{
int ret;
DBC * dbc;
@@ -1644,13 +1546,13 @@ __dbc_del_proc(dbccl_id, flags, replyp)
return;
}
-/* BEGIN __dbc_dup_proc */
+/* BEGIN __dbc_c_dup_proc */
void
-__dbc_dup_proc(dbccl_id, flags, replyp)
- long dbccl_id;
+__dbc_c_dup_proc(dbccl_id, flags, replyp)
+ unsigned int dbccl_id;
u_int32_t flags;
- __dbc_dup_reply *replyp;
-/* END __dbc_dup_proc */
+ __dbc_c_dup_reply *replyp;
+/* END __dbc_c_dup_proc */
{
int ret;
DBC * dbc;
@@ -1667,13 +1569,13 @@ __dbc_dup_proc(dbccl_id, flags, replyp)
return;
}
-/* BEGIN __dbc_get_proc */
+/* BEGIN __dbc_c_get_proc */
void
-__dbc_get_proc(dbccl_id, keydlen, keydoff,
+__dbc_c_get_proc(dbccl_id, keydlen, keydoff,
keyulen, keyflags, keydata, keysize,
datadlen, datadoff, dataulen, dataflags,
datadata, datasize, flags, replyp, freep)
- long dbccl_id;
+ unsigned int dbccl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -1687,9 +1589,9 @@ __dbc_get_proc(dbccl_id, keydlen, keydoff,
void *datadata;
u_int32_t datasize;
u_int32_t flags;
- __dbc_get_reply *replyp;
+ __dbc_c_get_reply *replyp;
int * freep;
-/* END __dbc_get_proc */
+/* END __dbc_c_get_proc */
{
int ret;
DBC * dbc;
@@ -1706,15 +1608,15 @@ __dbc_get_proc(dbccl_id, keydlen, keydoff,
return;
}
-/* BEGIN __dbc_pget_proc */
+/* BEGIN __dbc_c_pget_proc */
void
-__dbc_pget_proc(dbccl_id, skeydlen, skeydoff,
+__dbc_c_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;
+ unsigned int dbccl_id;
u_int32_t skeydlen;
u_int32_t skeydoff;
u_int32_t skeyulen;
@@ -1734,9 +1636,9 @@ __dbc_pget_proc(dbccl_id, skeydlen, skeydoff,
void *datadata;
u_int32_t datasize;
u_int32_t flags;
- __dbc_pget_reply *replyp;
+ __dbc_c_pget_reply *replyp;
int * freep;
-/* END __dbc_pget_proc */
+/* END __dbc_c_pget_proc */
{
int ret;
DBC * dbc;
@@ -1753,13 +1655,13 @@ __dbc_pget_proc(dbccl_id, skeydlen, skeydoff,
return;
}
-/* BEGIN __dbc_put_proc */
+/* BEGIN __dbc_c_put_proc */
void
-__dbc_put_proc(dbccl_id, keydlen, keydoff,
+__dbc_c_put_proc(dbccl_id, keydlen, keydoff,
keyulen, keyflags, keydata, keysize,
datadlen, datadoff, dataulen, dataflags,
datadata, datasize, flags, replyp, freep)
- long dbccl_id;
+ unsigned int dbccl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -1773,9 +1675,9 @@ __dbc_put_proc(dbccl_id, keydlen, keydoff,
void *datadata;
u_int32_t datasize;
u_int32_t flags;
- __dbc_put_reply *replyp;
+ __dbc_c_put_reply *replyp;
int * freep;
-/* END __dbc_put_proc */
+/* END __dbc_c_put_proc */
{
int ret;
DBC * dbc;
@@ -1792,3 +1694,94 @@ __dbc_put_proc(dbccl_id, keydlen, keydoff,
return;
}
+/* BEGIN __txn_abort_proc */
+void
+__txn_abort_proc(txnpcl_id, replyp)
+ unsigned int txnpcl_id;
+ __txn_abort_reply *replyp;
+/* END __txn_abort_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_commit_proc */
+void
+__txn_commit_proc(txnpcl_id, flags, replyp)
+ unsigned int txnpcl_id;
+ u_int32_t flags;
+ __txn_commit_reply *replyp;
+/* END __txn_commit_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_discard_proc */
+void
+__txn_discard_proc(txnpcl_id, flags, replyp)
+ unsigned int 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)
+ unsigned int 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;
+}
+
diff --git a/db/dist/template/gen_client_ret b/db/dist/template/gen_client_ret
index 3d897e609..8d679a749 100644
--- a/db/dist/template/gen_client_ret
+++ b/db/dist/template/gen_client_ret
@@ -1,11 +1,6 @@
/* Do not edit: automatically built by gen_rpc.awk. */
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
#include "db_int.h"
#include "dbinc/txn.h"
@@ -34,23 +29,21 @@ __dbcl_env_create_ret(dbenv, timeout, replyp)
}
/*
- * PUBLIC: int __dbcl_env_open_ret __P((DB_ENV *, const char *, u_int32_t, int,
- * PUBLIC: __env_open_reply *));
+ * PUBLIC: int __dbcl_env_cdsgroup_begin_ret __P((DB_ENV *, DB_TXN **,
+ * PUBLIC: __env_cdsgroup_begin_reply *));
*/
int
-__dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
+__dbcl_env_cdsgroup_begin_ret(dbenv, txnpp, replyp)
DB_ENV * dbenv;
- const char * home;
- u_int32_t flags;
- int mode;
- __env_open_reply *replyp;
+ DB_TXN ** txnpp;
+ __env_cdsgroup_begin_reply *replyp;
{
int ret;
- long env;
+ long txnid;
if (replyp->status != 0)
return (replyp->status);
- env = replyp->envcl_id;
+ txnid = replyp->txnidcl_id;
/*
* XXX Code goes here
@@ -60,20 +53,23 @@ __dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
}
/*
- * PUBLIC: int __dbcl_env_remove_ret __P((DB_ENV *, const char *, u_int32_t,
- * PUBLIC: __env_remove_reply *));
+ * PUBLIC: int __dbcl_env_open_ret __P((DB_ENV *, const char *, u_int32_t, int,
+ * PUBLIC: __env_open_reply *));
*/
int
-__dbcl_env_remove_ret(dbenv, home, flags, replyp)
+__dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
DB_ENV * dbenv;
const char * home;
u_int32_t flags;
- __env_remove_reply *replyp;
+ int mode;
+ __env_open_reply *replyp;
{
int ret;
+ long env;
if (replyp->status != 0)
return (replyp->status);
+ env = replyp->envcl_id;
/*
* XXX Code goes here
@@ -83,12 +79,15 @@ __dbcl_env_remove_ret(dbenv, home, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_txn_abort_ret __P((DB_TXN *, __txn_abort_reply *));
+ * PUBLIC: int __dbcl_env_remove_ret __P((DB_ENV *, const char *, u_int32_t,
+ * PUBLIC: __env_remove_reply *));
*/
int
-__dbcl_txn_abort_ret(txnp, replyp)
- DB_TXN * txnp;
- __txn_abort_reply *replyp;
+__dbcl_env_remove_ret(dbenv, home, flags, replyp)
+ DB_ENV * dbenv;
+ const char * home;
+ u_int32_t flags;
+ __env_remove_reply *replyp;
{
int ret;
@@ -103,16 +102,16 @@ __dbcl_txn_abort_ret(txnp, replyp)
}
/*
- * PUBLIC: int __dbcl_txn_begin_ret __P((DB_ENV *, DB_TXN *, DB_TXN **,
- * PUBLIC: u_int32_t, __txn_begin_reply *));
+ * PUBLIC: int __dbcl_env_txn_begin_ret __P((DB_ENV *, DB_TXN *, DB_TXN **,
+ * PUBLIC: u_int32_t, __env_txn_begin_reply *));
*/
int
-__dbcl_txn_begin_ret(dbenv, parent, txnpp, flags, replyp)
+__dbcl_env_txn_begin_ret(dbenv, parent, txnpp, flags, replyp)
DB_ENV * dbenv;
DB_TXN * parent;
DB_TXN ** txnpp;
u_int32_t flags;
- __txn_begin_reply *replyp;
+ __env_txn_begin_reply *replyp;
{
int ret;
long txnid;
@@ -129,41 +128,36 @@ __dbcl_txn_begin_ret(dbenv, parent, txnpp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_txn_commit_ret __P((DB_TXN *, u_int32_t,
- * PUBLIC: __txn_commit_reply *));
+ * PUBLIC: int __dbcl_env_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long,
+ * PUBLIC: long *, u_int32_t, __env_txn_recover_reply *));
*/
int
-__dbcl_txn_commit_ret(txnp, flags, replyp)
- DB_TXN * txnp;
+__dbcl_env_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp)
+ DB_ENV * dbenv;
+ DB_PREPLIST * preplist;
+ long count;
+ long * retp;
u_int32_t flags;
- __txn_commit_reply *replyp;
+ __env_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 Code goes here
+ * XXX Handle list
*/
- 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;
+ /*
+ * XXX Handle list
+ */
- if (replyp->status != 0)
- return (replyp->status);
+ retcount = replyp->retcount;
/*
* XXX Code goes here
@@ -173,36 +167,22 @@ __dbcl_txn_discard_ret(txnp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long,
- * PUBLIC: long *, u_int32_t, __txn_recover_reply *));
+ * PUBLIC: int __dbcl_db_create_ret __P((DB *, DB_ENV *, u_int32_t,
+ * PUBLIC: __db_create_reply *));
*/
int
-__dbcl_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp)
+__dbcl_db_create_ret(dbp, dbenv, flags, replyp)
+ DB * dbp;
DB_ENV * dbenv;
- DB_PREPLIST * preplist;
- long count;
- long * retp;
u_int32_t flags;
- __txn_recover_reply *replyp;
+ __db_create_reply *replyp;
{
int ret;
- u_int32_t *__db_txn;
- u_int8_t *__db_gid;
- long retcount;
+ long db;
if (replyp->status != 0)
return (replyp->status);
-
- /*
- * XXX Handle list
- */
-
-
- /*
- * XXX Handle list
- */
-
- retcount = replyp->retcount;
+ db = replyp->dbcl_id;
/*
* XXX Code goes here
@@ -233,22 +213,23 @@ __dbcl_db_close_ret(dbp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_db_create_ret __P((DB *, DB_ENV *, u_int32_t,
- * PUBLIC: __db_create_reply *));
+ * PUBLIC: int __dbcl_db_cursor_ret __P((DB *, DB_TXN *, DBC **, u_int32_t,
+ * PUBLIC: __db_cursor_reply *));
*/
int
-__dbcl_db_create_ret(dbp, dbenv, flags, replyp)
+__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
DB * dbp;
- DB_ENV * dbenv;
+ DB_TXN * txnp;
+ DBC ** dbcpp;
u_int32_t flags;
- __db_create_reply *replyp;
+ __db_cursor_reply *replyp;
{
int ret;
- long db;
+ long dbcid;
if (replyp->status != 0)
return (replyp->status);
- db = replyp->dbcl_id;
+ dbcid = replyp->dbcidcl_id;
/*
* XXX Code goes here
@@ -287,6 +268,32 @@ __dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp)
}
/*
+ * 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;
+ DBC ** curs;
+ DBC ** dbcp;
+ u_int32_t flags;
+ __db_join_reply *replyp;
+{
+ int ret;
+ long dbcid;
+
+ if (replyp->status != 0)
+ return (replyp->status);
+ dbcid = replyp->dbcidcl_id;
+
+ /*
+ * XXX Code goes here
+ */
+
+ 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 *));
*/
@@ -515,23 +522,17 @@ __dbcl_db_truncate_ret(dbp, txnp, countp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_db_cursor_ret __P((DB *, DB_TXN *, DBC **, u_int32_t,
- * PUBLIC: __db_cursor_reply *));
+ * PUBLIC: int __dbcl_dbc_c_close_ret __P((DBC *, __dbc_c_close_reply *));
*/
int
-__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
- DB * dbp;
- DB_TXN * txnp;
- DBC ** dbcpp;
- u_int32_t flags;
- __db_cursor_reply *replyp;
+__dbcl_dbc_c_close_ret(dbc, replyp)
+ DBC * dbc;
+ __dbc_c_close_reply *replyp;
{
int ret;
- long dbcid;
if (replyp->status != 0)
return (replyp->status);
- dbcid = replyp->dbcidcl_id;
/*
* XXX Code goes here
@@ -541,23 +542,22 @@ __dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_db_join_ret __P((DB *, DBC **, DBC **, u_int32_t,
- * PUBLIC: __db_join_reply *));
+ * PUBLIC: int __dbcl_dbc_c_count_ret __P((DBC *, db_recno_t *, u_int32_t,
+ * PUBLIC: __dbc_c_count_reply *));
*/
int
-__dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)
- DB * dbp;
- DBC ** curs;
- DBC ** dbcp;
+__dbcl_dbc_c_count_ret(dbc, countp, flags, replyp)
+ DBC * dbc;
+ db_recno_t * countp;
u_int32_t flags;
- __db_join_reply *replyp;
+ __dbc_c_count_reply *replyp;
{
int ret;
- long dbcid;
+ db_recno_t dupcount;
if (replyp->status != 0)
return (replyp->status);
- dbcid = replyp->dbcidcl_id;
+ dupcount = replyp->dupcount;
/*
* XXX Code goes here
@@ -567,17 +567,22 @@ __dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_close_ret __P((DBC *, __dbc_close_reply *));
+ * PUBLIC: int __dbcl_dbc_c_dup_ret __P((DBC *, DBC **, u_int32_t,
+ * PUBLIC: __dbc_c_dup_reply *));
*/
int
-__dbcl_dbc_close_ret(dbc, replyp)
+__dbcl_dbc_c_dup_ret(dbc, dbcp, flags, replyp)
DBC * dbc;
- __dbc_close_reply *replyp;
+ DBC ** dbcp;
+ u_int32_t flags;
+ __dbc_c_dup_reply *replyp;
{
int ret;
+ long dbcid;
if (replyp->status != 0)
return (replyp->status);
+ dbcid = replyp->dbcidcl_id;
/*
* XXX Code goes here
@@ -587,22 +592,25 @@ __dbcl_dbc_close_ret(dbc, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_count_ret __P((DBC *, db_recno_t *, u_int32_t,
- * PUBLIC: __dbc_count_reply *));
+ * PUBLIC: int __dbcl_dbc_c_get_ret __P((DBC *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_c_get_reply *));
*/
int
-__dbcl_dbc_count_ret(dbc, countp, flags, replyp)
+__dbcl_dbc_c_get_ret(dbc, key, data, flags, replyp)
DBC * dbc;
- db_recno_t * countp;
+ DBT * key;
+ DBT * data;
u_int32_t flags;
- __dbc_count_reply *replyp;
+ __dbc_c_get_reply *replyp;
{
int ret;
- db_recno_t dupcount;
+ /* DBT key; */
+ /* DBT data; */
if (replyp->status != 0)
return (replyp->status);
- dupcount = replyp->dupcount;
+ /* Handle replyp->keydata; */
+ /* Handle replyp->datadata; */
/*
* XXX Code goes here
@@ -612,22 +620,28 @@ __dbcl_dbc_count_ret(dbc, countp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_dup_ret __P((DBC *, DBC **, u_int32_t,
- * PUBLIC: __dbc_dup_reply *));
+ * PUBLIC: int __dbcl_dbc_c_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_c_pget_reply *));
*/
int
-__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
+__dbcl_dbc_c_pget_ret(dbc, skey, pkey, data, flags, replyp)
DBC * dbc;
- DBC ** dbcp;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
u_int32_t flags;
- __dbc_dup_reply *replyp;
+ __dbc_c_pget_reply *replyp;
{
int ret;
- long dbcid;
+ /* DBT skey; */
+ /* DBT pkey; */
+ /* DBT data; */
if (replyp->status != 0)
return (replyp->status);
- dbcid = replyp->dbcidcl_id;
+ /* Handle replyp->skeydata; */
+ /* Handle replyp->pkeydata; */
+ /* Handle replyp->datadata; */
/*
* XXX Code goes here
@@ -637,25 +651,23 @@ __dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_get_ret __P((DBC *, DBT *, DBT *, u_int32_t,
- * PUBLIC: __dbc_get_reply *));
+ * PUBLIC: int __dbcl_dbc_c_put_ret __P((DBC *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_c_put_reply *));
*/
int
-__dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
+__dbcl_dbc_c_put_ret(dbc, key, data, flags, replyp)
DBC * dbc;
DBT * key;
DBT * data;
u_int32_t flags;
- __dbc_get_reply *replyp;
+ __dbc_c_put_reply *replyp;
{
int ret;
/* DBT key; */
- /* DBT data; */
if (replyp->status != 0)
return (replyp->status);
/* Handle replyp->keydata; */
- /* Handle replyp->datadata; */
/*
* XXX Code goes here
@@ -665,28 +677,39 @@ __dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t,
- * PUBLIC: __dbc_pget_reply *));
+ * PUBLIC: int __dbcl_txn_abort_ret __P((DB_TXN *, __txn_abort_reply *));
*/
int
-__dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp)
- DBC * dbc;
- DBT * skey;
- DBT * pkey;
- DBT * data;
+__dbcl_txn_abort_ret(txnp, replyp)
+ DB_TXN * txnp;
+ __txn_abort_reply *replyp;
+{
+ int ret;
+
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ /*
+ * XXX Code goes here
+ */
+
+ 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;
u_int32_t flags;
- __dbc_pget_reply *replyp;
+ __txn_commit_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
@@ -696,23 +719,19 @@ __dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_put_ret __P((DBC *, DBT *, DBT *, u_int32_t,
- * PUBLIC: __dbc_put_reply *));
+ * PUBLIC: int __dbcl_txn_discard_ret __P((DB_TXN *, u_int32_t,
+ * PUBLIC: __txn_discard_reply *));
*/
int
-__dbcl_dbc_put_ret(dbc, key, data, flags, replyp)
- DBC * dbc;
- DBT * key;
- DBT * data;
+__dbcl_txn_discard_ret(txnp, flags, replyp)
+ DB_TXN * txnp;
u_int32_t flags;
- __dbc_put_reply *replyp;
+ __txn_discard_reply *replyp;
{
int ret;
- /* DBT key; */
if (replyp->status != 0)
return (replyp->status);
- /* Handle replyp->keydata; */
/*
* XXX Code goes here
diff --git a/db/dist/template/rec_btree b/db/dist/template/rec_btree
index 0b2c96182..64a123ae3 100644
--- a/db/dist/template/rec_btree
+++ b/db/dist/template/rec_btree
@@ -1,11 +1,5 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/__bam.h"
@@ -631,3 +625,189 @@ __bam_relink_recover(dbenv, dbtp, lsnp, op, info)
out: REC_CLOSE;
}
+/*
+ * __bam_relink_recover --
+ * Recovery function for relink.
+ *
+ * PUBLIC: int __bam_relink_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__bam_relink_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __bam_relink_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__bam_relink_print);
+ REC_INTRO(__bam_relink_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;
+}
+
+/*
+ * __bam_merge_recover --
+ * Recovery function for merge.
+ *
+ * PUBLIC: int __bam_merge_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__bam_merge_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __bam_merge_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__bam_merge_print);
+ REC_INTRO(__bam_merge_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;
+}
+
+/*
+ * __bam_pgno_recover --
+ * Recovery function for pgno.
+ *
+ * PUBLIC: int __bam_pgno_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__bam_pgno_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __bam_pgno_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__bam_pgno_print);
+ REC_INTRO(__bam_pgno_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;
+}
+
diff --git a/db/dist/template/rec_crdel b/db/dist/template/rec_crdel
index 352e9ae5f..3909fe620 100644
--- a/db/dist/template/rec_crdel
+++ b/db/dist/template/rec_crdel
@@ -1,77 +1,9 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "db_page.h"
-#include "crdel.h"
-#include "log.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;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__crdel_fileopen_print);
- REC_INTRO(__crdel_fileopen_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
+#include "dbinc/db_page.h"
+#include "dbinc/__crdel.h"
+#include "dbinc/log.h"
/*
* __crdel_metasub_recover --
@@ -96,73 +28,11 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__crdel_metasub_print);
- REC_INTRO(__crdel_metasub_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *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 *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__crdel_metapage_print);
- REC_INTRO(__crdel_metapage_read);
+ REC_INTRO(__crdel_metasub_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 +58,7 @@ __crdel_metapage_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 +68,33 @@ out: REC_CLOSE;
}
/*
- * __crdel_old_delete_recover --
- * Recovery function for old_delete.
+ * __crdel_inmem_create_recover --
+ * Recovery function for inmem_create.
*
- * PUBLIC: int __crdel_old_delete_recover
+ * PUBLIC: int __crdel_inmem_create_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__crdel_old_delete_recover(dbenv, dbtp, lsnp, op, info)
+__crdel_inmem_create_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __crdel_old_delete_args *argp;
+ __crdel_inmem_create_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__crdel_old_delete_print);
- REC_INTRO(__crdel_old_delete_read);
+ REC_PRINT(__crdel_inmem_create_print);
+ REC_INTRO(__crdel_inmem_create_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 +120,7 @@ __crdel_old_delete_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 +130,33 @@ out: REC_CLOSE;
}
/*
- * __crdel_rename_recover --
- * Recovery function for rename.
+ * __crdel_inmem_rename_recover --
+ * Recovery function for inmem_rename.
*
- * PUBLIC: int __crdel_rename_recover
+ * PUBLIC: int __crdel_inmem_rename_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__crdel_rename_recover(dbenv, dbtp, lsnp, op, info)
+__crdel_inmem_rename_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __crdel_rename_args *argp;
+ __crdel_inmem_rename_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__crdel_rename_print);
- REC_INTRO(__crdel_rename_read);
+ REC_PRINT(__crdel_inmem_rename_print);
+ REC_INTRO(__crdel_inmem_rename_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 +182,7 @@ __crdel_rename_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 +192,33 @@ out: REC_CLOSE;
}
/*
- * __crdel_delete_recover --
- * Recovery function for delete.
+ * __crdel_inmem_remove_recover --
+ * Recovery function for inmem_remove.
*
- * PUBLIC: int __crdel_delete_recover
+ * PUBLIC: int __crdel_inmem_remove_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__crdel_delete_recover(dbenv, dbtp, lsnp, op, info)
+__crdel_inmem_remove_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __crdel_delete_args *argp;
+ __crdel_inmem_remove_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__crdel_delete_print);
- REC_INTRO(__crdel_delete_read);
+ REC_PRINT(__crdel_inmem_remove_print);
+ REC_INTRO(__crdel_inmem_remove_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 +244,7 @@ __crdel_delete_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/template/rec_ctemp b/db/dist/template/rec_ctemp
index 6be6d3166..2951189c5 100644
--- a/db/dist/template/rec_ctemp
+++ b/db/dist/template/rec_ctemp
@@ -1,31 +1,31 @@
/*
- * __PREF_FUNC_recover --
+ * PREF_FUNC_recover --
* Recovery function for FUNC.
*
- * PUBLIC: int __PREF_FUNC_recover
+ * PUBLIC: int PREF_FUNC_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__PREF_FUNC_recover(dbenv, dbtp, lsnp, op, info)
+PREF_FUNC_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __PREF_FUNC_args *argp;
+ PREF_FUNC_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__PREF_FUNC_print);
- REC_INTRO(__PREF_FUNC_read);
+ REC_PRINT(PREF_FUNC_print);
+ REC_INTRO(PREF_FUNC_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 {
@@ -51,7 +51,7 @@ __PREF_FUNC_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/template/rec_db b/db/dist/template/rec_db
index 5c4c8f08d..5e3f70cef 100644
--- a/db/dist/template/rec_db
+++ b/db/dist/template/rec_db
@@ -1,11 +1,5 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/__db.h"
@@ -198,6 +192,68 @@ out: REC_CLOSE;
}
/*
+ * __db_relink_recover --
+ * Recovery function for relink.
+ *
+ * PUBLIC: int __db_relink_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_relink_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_relink_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, 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_debug_recover --
* Recovery function for debug.
*
@@ -384,6 +440,130 @@ out: 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;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__db_pg_alloc_print);
+ REC_INTRO(__db_pg_alloc_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_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_pg_free_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ 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_pg_free_recover --
* Recovery function for pg_free.
*
@@ -570,6 +750,68 @@ 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.
*
@@ -755,3 +997,65 @@ __db_pg_init_recover(dbenv, dbtp, lsnp, op, info)
out: REC_CLOSE;
}
+/*
+ * __db_pg_sort_recover --
+ * Recovery function for pg_sort.
+ *
+ * PUBLIC: int __db_pg_sort_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_sort_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_sort_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__db_pg_sort_print);
+ REC_INTRO(__db_pg_sort_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;
+}
+
diff --git a/db/dist/template/rec_dbreg b/db/dist/template/rec_dbreg
index bbdf19d5f..765424ccb 100644
--- a/db/dist/template/rec_dbreg
+++ b/db/dist/template/rec_dbreg
@@ -1,11 +1,5 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/__dbreg.h"
diff --git a/db/dist/template/rec_fileops b/db/dist/template/rec_fileops
index c1487835e..492208635 100644
--- a/db/dist/template/rec_fileops
+++ b/db/dist/template/rec_fileops
@@ -1,11 +1,5 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/__fop.h"
diff --git a/db/dist/template/rec_hash b/db/dist/template/rec_hash
index bcee2131c..dc0303139 100644
--- a/db/dist/template/rec_hash
+++ b/db/dist/template/rec_hash
@@ -1,15 +1,9 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "db_page.h"
-#include "ham.h"
-#include "log.h"
+#include "dbinc/db_page.h"
+#include "dbinc/__ham.h"
+#include "dbinc/log.h"
/*
* __ham_insdel_recover --
@@ -34,11 +28,11 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_insdel_print);
- REC_INTRO(__ham_insdel_read);
+ REC_INTRO(__ham_insdel_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 +58,7 @@ __ham_insdel_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;
@@ -96,11 +90,11 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_newpage_print);
- REC_INTRO(__ham_newpage_read);
+ REC_INTRO(__ham_newpage_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,69 +120,7 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
-
-/*
- * __ham_splitmeta_recover --
- * Recovery function for splitmeta.
- *
- * PUBLIC: int __ham_splitmeta_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__ham_splitmeta_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __ham_splitmeta_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__ham_splitmeta_print);
- REC_INTRO(__ham_splitmeta_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = 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;
@@ -220,11 +152,11 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_splitdata_print);
- REC_INTRO(__ham_splitdata_read);
+ REC_INTRO(__ham_splitdata_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 +182,7 @@ __ham_splitdata_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;
@@ -282,73 +214,11 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_replace_print);
- REC_INTRO(__ham_replace_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
+ REC_INTRO(__ham_replace_read, 1);
-out: REC_CLOSE;
-}
-
-/*
- * __ham_newpgno_recover --
- * Recovery function for newpgno.
- *
- * PUBLIC: int __ham_newpgno_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__ham_newpgno_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __ham_newpgno_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__ham_newpgno_print);
- REC_INTRO(__ham_newpgno_read);
-
- 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,69 +244,7 @@ __ham_newpgno_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
-
-/*
- * __ham_ovfl_recover --
- * Recovery function for ovfl.
- *
- * PUBLIC: int __ham_ovfl_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__ham_ovfl_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __ham_ovfl_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__ham_ovfl_print);
- REC_INTRO(__ham_ovfl_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = 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;
@@ -468,11 +276,11 @@ __ham_copypage_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_copypage_print);
- REC_INTRO(__ham_copypage_read);
+ REC_INTRO(__ham_copypage_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 +306,7 @@ __ham_copypage_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;
@@ -530,11 +338,11 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_metagroup_print);
- REC_INTRO(__ham_metagroup_read);
+ REC_INTRO(__ham_metagroup_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 {
@@ -560,7 +368,7 @@ __ham_metagroup_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;
@@ -570,33 +378,33 @@ out: REC_CLOSE;
}
/*
- * __ham_groupalloc1_recover --
- * Recovery function for groupalloc1.
+ * __ham_metagroup_recover --
+ * Recovery function for metagroup.
*
- * PUBLIC: int __ham_groupalloc1_recover
+ * PUBLIC: int __ham_metagroup_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__ham_groupalloc1_recover(dbenv, dbtp, lsnp, op, info)
+__ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __ham_groupalloc1_args *argp;
+ __ham_metagroup_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__ham_groupalloc1_print);
- REC_INTRO(__ham_groupalloc1_read);
+ REC_PRINT(__ham_metagroup_print);
+ REC_INTRO(__ham_metagroup_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 {
@@ -622,7 +430,7 @@ __ham_groupalloc1_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;
@@ -632,33 +440,33 @@ out: REC_CLOSE;
}
/*
- * __ham_groupalloc2_recover --
- * Recovery function for groupalloc2.
+ * __ham_groupalloc_recover --
+ * Recovery function for groupalloc.
*
- * PUBLIC: int __ham_groupalloc2_recover
+ * PUBLIC: int __ham_groupalloc_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__ham_groupalloc2_recover(dbenv, dbtp, lsnp, op, info)
+__ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __ham_groupalloc2_args *argp;
+ __ham_groupalloc_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__ham_groupalloc2_print);
- REC_INTRO(__ham_groupalloc2_read);
+ REC_PRINT(__ham_groupalloc_print);
+ REC_INTRO(__ham_groupalloc_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 {
@@ -684,7 +492,7 @@ __ham_groupalloc2_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;
@@ -716,11 +524,11 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_groupalloc_print);
- REC_INTRO(__ham_groupalloc_read);
+ REC_INTRO(__ham_groupalloc_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 {
@@ -746,7 +554,7 @@ __ham_groupalloc_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;
@@ -778,11 +586,11 @@ __ham_curadj_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_curadj_print);
- REC_INTRO(__ham_curadj_read);
+ REC_INTRO(__ham_curadj_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 {
@@ -808,7 +616,7 @@ __ham_curadj_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;
@@ -840,11 +648,11 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__ham_chgpg_print);
- REC_INTRO(__ham_chgpg_read);
+ REC_INTRO(__ham_chgpg_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 {
@@ -870,7 +678,7 @@ __ham_chgpg_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/template/rec_qam b/db/dist/template/rec_qam
index fcd24d6a2..af4f4e97a 100644
--- a/db/dist/template/rec_qam
+++ b/db/dist/template/rec_qam
@@ -1,77 +1,9 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "db_page.h"
-#include "qam.h"
-#include "log.h"
-
-/*
- * __qam_inc_recover --
- * Recovery function for inc.
- *
- * PUBLIC: int __qam_inc_recover
- * PUBLIC: __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_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__qam_inc_print);
- REC_INTRO(__qam_inc_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
+#include "dbinc/db_page.h"
+#include "dbinc/__qam.h"
+#include "dbinc/log.h"
/*
* __qam_incfirst_recover --
@@ -96,11 +28,11 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__qam_incfirst_print);
- REC_INTRO(__qam_incfirst_read);
+ REC_INTRO(__qam_incfirst_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 +58,7 @@ __qam_incfirst_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;
@@ -158,11 +90,11 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__qam_mvptr_print);
- REC_INTRO(__qam_mvptr_read);
+ REC_INTRO(__qam_mvptr_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 +120,7 @@ __qam_mvptr_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;
@@ -220,11 +152,11 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__qam_del_print);
- REC_INTRO(__qam_del_read);
+ REC_INTRO(__qam_del_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 +182,7 @@ __qam_del_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;
@@ -282,135 +214,11 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__qam_add_print);
- REC_INTRO(__qam_add_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
-
-/*
- * __qam_delete_recover --
- * Recovery function for delete.
- *
- * 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;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__qam_delete_print);
- REC_INTRO(__qam_delete_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
-
-/*
- * __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;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__qam_rename_print);
- REC_INTRO(__qam_rename_read);
+ REC_INTRO(__qam_add_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 +244,7 @@ __qam_rename_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;
@@ -468,11 +276,11 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__qam_delext_print);
- REC_INTRO(__qam_delext_read);
+ REC_INTRO(__qam_delext_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 +306,7 @@ __qam_delext_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/template/rec_rep b/db/dist/template/rec_rep
index 872812cd0..8008c9de9 100644
--- a/db/dist/template/rec_rep
+++ b/db/dist/template/rec_rep
@@ -1,11 +1,5 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/__rep.h"
diff --git a/db/dist/template/rec_txn b/db/dist/template/rec_txn
index c66d604f5..d48d51739 100644
--- a/db/dist/template/rec_txn
+++ b/db/dist/template/rec_txn
@@ -1,44 +1,38 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "db_page.h"
-#include "txn.h"
-#include "log.h"
+#include "dbinc/db_page.h"
+#include "dbinc/__txn.h"
+#include "dbinc/log.h"
/*
- * __txn_old_regop_recover --
- * Recovery function for old_regop.
+ * __txn_regop_recover --
+ * Recovery function for regop.
*
- * PUBLIC: int __txn_old_regop_recover
+ * PUBLIC: int __txn_regop_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__txn_old_regop_recover(dbenv, dbtp, lsnp, op, info)
+__txn_regop_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __txn_old_regop_args *argp;
+ __txn_regop_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__txn_old_regop_print);
- REC_INTRO(__txn_old_regop_read);
+ REC_PRINT(__txn_regop_print);
+ REC_INTRO(__txn_regop_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 +58,7 @@ __txn_old_regop_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;
@@ -96,11 +90,11 @@ __txn_regop_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__txn_regop_print);
- REC_INTRO(__txn_regop_read);
+ REC_INTRO(__txn_regop_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 +120,7 @@ __txn_regop_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 +130,33 @@ out: REC_CLOSE;
}
/*
- * __txn_old_ckp_recover --
- * Recovery function for old_ckp.
+ * __txn_ckp_recover --
+ * Recovery function for ckp.
*
- * PUBLIC: int __txn_old_ckp_recover
+ * PUBLIC: int __txn_ckp_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__txn_old_ckp_recover(dbenv, dbtp, lsnp, op, info)
+__txn_ckp_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __txn_old_ckp_args *argp;
+ __txn_ckp_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__txn_old_ckp_print);
- REC_INTRO(__txn_old_ckp_read);
+ REC_PRINT(__txn_ckp_print);
+ REC_INTRO(__txn_ckp_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 +182,7 @@ __txn_old_ckp_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;
@@ -220,11 +214,11 @@ __txn_ckp_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__txn_ckp_print);
- REC_INTRO(__txn_ckp_read);
+ REC_INTRO(__txn_ckp_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 +244,7 @@ __txn_ckp_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 +254,33 @@ out: REC_CLOSE;
}
/*
- * __txn_xa_regop_old_recover --
- * Recovery function for xa_regop_old.
+ * __txn_child_recover --
+ * Recovery function for child.
*
- * PUBLIC: int __txn_xa_regop_old_recover
+ * PUBLIC: int __txn_child_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__txn_xa_regop_old_recover(dbenv, dbtp, lsnp, op, info)
+__txn_child_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __txn_xa_regop_old_args *argp;
+ __txn_child_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__txn_xa_regop_old_print);
- REC_INTRO(__txn_xa_regop_old_read);
+ REC_PRINT(__txn_child_print);
+ REC_INTRO(__txn_child_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 +306,7 @@ __txn_xa_regop_old_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;
@@ -344,73 +338,11 @@ __txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__txn_xa_regop_print);
- REC_INTRO(__txn_xa_regop_read);
-
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
- if (DB_REDO(op)) {
- if ((ret = memp_fget(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 = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
- goto out;
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
+ REC_INTRO(__txn_xa_regop_read, 1);
-/*
- * __txn_child_old_recover --
- * Recovery function for child_old.
- *
- * PUBLIC: int __txn_child_old_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__txn_child_old_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __txn_child_old_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- int cmp_n, cmp_p, modified, ret;
-
- REC_PRINT(__txn_child_old_print);
- REC_INTRO(__txn_child_old_read);
-
- 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 +368,7 @@ __txn_child_old_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 +378,33 @@ out: REC_CLOSE;
}
/*
- * __txn_child_recover --
- * Recovery function for child.
+ * __txn_recycle_recover --
+ * Recovery function for recycle.
*
- * PUBLIC: int __txn_child_recover
+ * PUBLIC: int __txn_recycle_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__txn_child_recover(dbenv, dbtp, lsnp, op, info)
+__txn_recycle_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __txn_child_args *argp;
+ __txn_recycle_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__txn_child_print);
- REC_INTRO(__txn_child_read);
+ REC_PRINT(__txn_recycle_print);
+ REC_INTRO(__txn_recycle_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 +430,7 @@ __txn_child_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/wpj.in b/db/dist/vx_2.0/wpj.in
index a38cf7251..88b27dff2 100644
--- a/db/dist/vx_2.0/wpj.in
+++ b/db/dist/vx_2.0/wpj.in
@@ -134,27 +134,3 @@ PENTIUMgnu
<BEGIN> CORE_INFO_VERSION
2.0
<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_2.2/wpj.in b/db/dist/vx_2.2/wpj.in
index d883ef2b1..17816d9d1 100644
--- a/db/dist/vx_2.2/wpj.in
+++ b/db/dist/vx_2.2/wpj.in
@@ -168,27 +168,3 @@ PENTIUM2gnu
<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_buildcd b/db/dist/vx_buildcd
index a94d78db9..11f473bd9 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 12.1 2006/08/24 14:45:35 bostic Exp $
#
# Build the Setup SDK CD image on the VxWorks host machine.
@@ -75,7 +75,7 @@ f=$D/filelist.demo
(sed -f $s $D/vx_demofile.in) > $t
(echo "Building $f" && rm -f $f && cp $t $f)
-# Copy the Sleepycat specific files into the SetupSDK area.
+# Copy files into the SetupSDK area.
(cd $D && cp README.TXT $S)
(cd $D && cp LICENSE.TXT $S)
(cd $D && cp CONFIG.TCL $S/RESOURCE/TCL)
@@ -88,7 +88,7 @@ f=$D/filelist.demo
f=../docs/LIB
(echo "Building $f" && rm -f $f)
cat <<ENDOFLIBTEXT >> $f
-{BerkeleyDB.$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH} {Sleepycat Software Berkeley DB} {<b>BerkeleyDB.$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH</b>} {<b><a href="./index.html">BerkeleyDB.$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH</a></b>} {Sleepycat BerkeleyDB} {} {} {}
+{BerkeleyDB.$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH} {Berkeley DB} {<b>BerkeleyDB.$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH</b>} {<b><a href="./index.html">BerkeleyDB.$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH</a></b>} {BerkeleyDB} {} {} {}
ENDOFLIBTEXT
#
diff --git a/db/dist/vx_config.in b/db/dist/vx_config.in
index 29e679e54..2f9b7d1a0 100644
--- a/db/dist/vx_config.in
+++ b/db/dist/vx_config.in
@@ -31,12 +31,30 @@
/* Define to 1 if you want a version with run-time diagnostic checking. */
/* #undef DIAGNOSTIC */
+/* Define to 1 if 64-bit types are available. */
+#define HAVE_64BIT_TYPES 1
+
+/* Define to 1 if you have the `abort' function. */
+#define HAVE_ABORT 1
+
+/* Define to 1 if you have the `atoi' function. */
+#define HAVE_ATOI 1
+
+/* Define to 1 if you have the `atol' function. */
+#define HAVE_ATOL 1
+
/* Define to 1 if you have the `clock_gettime' function. */
#define HAVE_CLOCK_GETTIME 1
/* Define to 1 if Berkeley DB release includes strong cryptography. */
#define HAVE_CRYPTO 1
+/* Define to 1 if you have the `ctime_r' function. */
+#define HAVE_CTIME_R 1
+
+/* Define to 1 if ctime_r takes a buffer length as a third argument. */
+#define HAVE_CTIME_R_3ARG 1
+
/* Define to 1 if you have the `directio' function. */
/* #undef HAVE_DIRECTIO */
@@ -50,6 +68,12 @@
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
#define HAVE_EXIT_SUCCESS 1
+/* Define to 1 if you have the `fchmod' function. */
+/* #undef HAVE_FCHMOD */
+
+/* Define to 1 if you have the `fcntl' function. */
+/* #undef HAVE_FCNTL */
+
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
/* #undef HAVE_FCNTL_F_SETFD */
@@ -60,11 +84,17 @@
#define HAVE_FILESYSTEM_NOTZERO 1
/* Define to 1 if you have the `ftruncate' function. */
-/* #undef HAVE_FTRUNCATE */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
/* Define to 1 if you have the `getcwd' function. */
#define HAVE_GETCWD 1
+/* Define to 1 if you have the `getenv' function. */
+#define HAVE_GETENV 1
+
/* Define to 1 if you have the `getopt' function. */
/* #undef HAVE_GETOPT */
@@ -83,11 +113,17 @@
/* 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 `isalpha' function. */
+#define HAVE_ISALPHA 1
+
+/* Define to 1 if you have the `isdigit' function. */
+#define HAVE_ISDIGIT 1
+
+/* Define to 1 if you have the `isprint' function. */
+#define HAVE_ISPRINT 1
-/* Define to 1 if the system has the type `long long'. */
-/* #undef HAVE_LONG_LONG */
+/* Define to 1 if you have the `isspace' function. */
+#define HAVE_ISSPACE 1
/* Define to 1 if you have the `memcmp' function. */
#define HAVE_MEMCMP 1
@@ -107,6 +143,9 @@
/* Define to 1 if you have the `mmap' function. */
/* #undef HAVE_MMAP */
+/* Define to 1 if you have the `mprotect' function. */
+/* #undef HAVE_MPROTECT */
+
/* Define to 1 if you have the `munlock' function. */
/* #undef HAVE_MUNLOCK */
@@ -141,6 +180,9 @@
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
+/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
+/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
+
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
@@ -182,9 +224,6 @@
/* Define to 1 if mutexes hold system resources. */
#define HAVE_MUTEX_SYSTEM_RESOURCES 1
-/* Define to 1 if fast mutexes are available. */
-#define HAVE_MUTEX_THREADS 1
-
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
@@ -209,6 +248,9 @@
/* 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 amd64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -221,9 +263,18 @@
/* Define to 1 if you have the `pread' function. */
/* #undef HAVE_PREAD */
+/* Define to 1 if you have the `printf' function. */
+#define HAVE_PRINTF 1
+
/* Define to 1 if you have the `pstat_getdynamic' function. */
/* #undef HAVE_PSTAT_GETDYNAMIC */
+/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
+/* #undef HAVE_PTHREAD_API */
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#define HAVE_PTHREAD_YIELD 1
+
/* Define to 1 if you have the `pwrite' function. */
/* #undef HAVE_PWRITE */
@@ -242,6 +293,9 @@
/* Define to 1 if building replication support. */
#define HAVE_REPLICATION 1
+/* Define to 1 if building the Berkeley DB replication framework. */
+/* #undef HAVE_REPLICATION_THREADS */
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -251,17 +305,20 @@
/* Define to 1 if you have the `select' function. */
#define HAVE_SELECT 1
-/* Define to 1 if building sequence support. */
-/* #undef HAVE_SEQUENCE */
-
/* Define to 1 if you have the `shmget' function. */
/* #undef HAVE_SHMGET */
+/* Define to 1 if you have the `sigaction' function. */
+/* #undef HAVE_SIGACTION */
+
+/* Define to 1 if thread identifier type db_threadid_t is integral. */
+#define HAVE_SIMPLE_THREAD_TYPE 1
+
/* Define to 1 if you have the `snprintf' function. */
/* #undef HAVE_SNPRINTF */
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
+/* Define to 1 if you have the `stat' function. */
+#define HAVE_STAT 1
/* Define to 1 if building statistics support. */
#define HAVE_STATISTICS 1
@@ -275,18 +332,39 @@
/* Define to 1 if you have the `strcasecmp' function. */
/* #undef HAVE_STRCASECMP */
+/* Define to 1 if you have the `strcat' function. */
+#define HAVE_STRCAT 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
/* Define to 1 if you have the `strdup' function. */
/* #undef HAVE_STRDUP */
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
+/* Define to 1 if you have the `strncat' function. */
+#define HAVE_STRNCAT 1
+
+/* Define to 1 if you have the `strncmp' function. */
+#define HAVE_STRNCMP 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the `strsep' function. */
+/* #undef HAVE_STRSEP */
+
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
@@ -328,9 +406,6 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
-/* Define to 1 if the system has the type `unsigned long long'. */
-/* #undef HAVE_UNSIGNED_LONG_LONG */
-
/* Define to 1 if building access method verification support. */
#define HAVE_VERIFY 1
@@ -346,11 +421,8 @@
/* 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"
+#define PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
/* Define to the full name of this package. */
#define PACKAGE_NAME "Berkeley DB"
@@ -385,58 +457,5 @@
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
-/*
- * Exit success/failure macros.
- */
-#ifndef HAVE_EXIT_SUCCESS
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-#endif
-
-/*
- * 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.
- */
-#ifndef HAVE_GETCWD
-#define getcwd __db_Cgetcwd
-#endif
-#ifndef HAVE_GETOPT
-#define getopt __db_Cgetopt
-#define optarg __db_Coptarg
-#define opterr __db_Copterr
-#define optind __db_Coptind
-#define optopt __db_Coptopt
-#endif
-#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
-
-/*
- * !!!
- * The following is not part of the automatic configuration setup, but
- * provides the information necessary to build Berkeley DB on VxWorks.
- */
+#include "clib_port.h"
#include "vxWorks.h"
diff --git a/db/dist/vx_setup/LICENSE.TXT b/db/dist/vx_setup/LICENSE.TXT
index f31971375..7a7fe62bc 100644
--- a/db/dist/vx_setup/LICENSE.TXT
+++ b/db/dist/vx_setup/LICENSE.TXT
@@ -1,3 +1,3 @@
-Copyright (c) 1996-2004
- Sleepycat Software. All rights reserved.
+Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
See the file LICENSE for redistribution information.
diff --git a/db/dist/vx_setup/README.in b/db/dist/vx_setup/README.in
index f96948c37..c8cefacad 100644
--- a/db/dist/vx_setup/README.in
+++ b/db/dist/vx_setup/README.in
@@ -1,7 +1,7 @@
-README.TXT: Sleepycat Software Berkeley DB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@ Release v@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
+README.TXT: Oracle Corporation Berkeley DB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@ Release v@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
Information on known problems, changes introduced with the
current revision of the CD-ROM, and other product bulletins
-can be obtained from the Sleepycat Software web site:
+can be obtained from the Oracle Corporation web site:
http://www.sleepycat.com/
diff --git a/db/dist/vx_setup/SETUP.BMP b/db/dist/vx_setup/SETUP.BMP
index 2918480b8..1b79293d0 100644
--- a/db/dist/vx_setup/SETUP.BMP
+++ b/db/dist/vx_setup/SETUP.BMP
Binary files differ
diff --git a/db/dist/vx_setup/vx_setup.in b/db/dist/vx_setup/vx_setup.in
index 7bc3f510c..24fbabc86 100644
--- a/db/dist/vx_setup/vx_setup.in
+++ b/db/dist/vx_setup/vx_setup.in
@@ -1,8 +1,8 @@
-Sleepycat Software BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
+Oracle Corporation BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
db@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@ demo-db@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
@DB_SETUP_DIR@
-Sleepycat Software BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
+Oracle Corporation BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
db@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
@DB_SETUP_DIR@/filelist.all
BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@-Demo
@@ -10,4 +10,4 @@ BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@-Demo
BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@ Demo program
demo-db@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
@DB_SETUP_DIR@/filelist.demo
-Sleepycat Software BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
+Oracle Corporation BerkeleyDB @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@
diff --git a/db/dist/win_config.in b/db/dist/win_config.in
index 3406c8774..809b73b8e 100644
--- a/db/dist/win_config.in
+++ b/db/dist/win_config.in
@@ -8,7 +8,6 @@
#define DB_WIN32 1
/* Define to 1 if you want a debugging version. */
-/* #undef DEBUG */
#if defined(_DEBUG)
#if !defined(DEBUG)
#define DEBUG 1
@@ -24,6 +23,18 @@
/* Define to 1 if you want a version with run-time diagnostic checking. */
/* #undef DIAGNOSTIC */
+/* Define to 1 if 64-bit types are available. */
+#define HAVE_64BIT_TYPES 1
+
+/* Define to 1 if you have the `abort' function. */
+#define HAVE_ABORT 1
+
+/* Define to 1 if you have the `atoi' function. */
+#define HAVE_ATOI 1
+
+/* Define to 1 if you have the `atol' function. */
+#define HAVE_ATOL 1
+
/* Define to 1 if you have the `clock_gettime' function. */
/* #undef HAVE_CLOCK_GETTIME */
@@ -32,6 +43,12 @@
#define HAVE_CRYPTO 1
#endif
+/* Define to 1 if you have the `ctime_r' function. */
+/* #undef HAVE_CTIME_R */
+
+/* Define to 1 if ctime_r takes a buffer length as a third argument. */
+/* #undef HAVE_CTIME_R_3ARG */
+
/* Define to 1 if you have the `directio' function. */
/* #undef HAVE_DIRECTIO */
@@ -45,6 +62,12 @@
/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
#define HAVE_EXIT_SUCCESS 1
+/* Define to 1 if you have the `fchmod' function. */
+/* #undef HAVE_FCHMOD */
+
+/* Define to 1 if you have the `fcntl' function. */
+/* #undef HAVE_FCNTL */
+
/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
/* #undef HAVE_FCNTL_F_SETFD */
@@ -57,11 +80,21 @@
/* Define to 1 if you have the `ftruncate' function. */
#define HAVE_FTRUNCATE 1
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
/* Define to 1 if you have the `getcwd' function. */
#define HAVE_GETCWD 1
+/* Define to 1 if you have the `getenv' function. */
+#define HAVE_GETENV 1
+
/* Define to 1 if you have the `getopt' function. */
-/* #undef HAVE_GETOPT */
+/*
+ * Windows does not have the getopt function, but as Berkeley DB example
+ * programs require getopt, we handle it outside of this configuration.
+ */
+#define HAVE_GETOPT 1
/* Define to 1 if you have the `getrusage' function. */
/* #undef HAVE_GETRUSAGE */
@@ -80,11 +113,17 @@
/* 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 `isalpha' function. */
+#define HAVE_ISALPHA 1
+
+/* Define to 1 if you have the `isdigit' function. */
+#define HAVE_ISDIGIT 1
-/* Define to 1 if the system has the type `long long'. */
-#define HAVE_LONG_LONG 1
+/* Define to 1 if you have the `isprint' function. */
+#define HAVE_ISPRINT 1
+
+/* Define to 1 if you have the `isspace' function. */
+#define HAVE_ISSPACE 1
/* Define to 1 if you have the `memcmp' function. */
#define HAVE_MEMCMP 1
@@ -104,6 +143,9 @@
/* Define to 1 if you have the `mmap' function. */
/* #undef HAVE_MMAP */
+/* Define to 1 if you have the `mprotect' function. */
+/* #undef HAVE_MPROTECT */
+
/* Define to 1 if you have the `munlock' function. */
/* #undef HAVE_MUNLOCK */
@@ -138,6 +180,9 @@
/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
+/* Define to 1 to use the GCC compiler and MIPS assembly language mutexes. */
+/* #undef HAVE_MUTEX_MIPS_GCC_ASSEMBLY */
+
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
@@ -179,9 +224,6 @@
/* Define to 1 if mutexes hold system resources. */
/* #undef HAVE_MUTEX_SYSTEM_RESOURCES */
-/* Define to 1 if fast mutexes are available. */
-#define HAVE_MUTEX_THREADS 1
-
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
@@ -206,6 +248,9 @@
/* 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 amd64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_64_GCC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -218,9 +263,18 @@
/* Define to 1 if you have the `pread' function. */
/* #undef HAVE_PREAD */
+/* Define to 1 if you have the `printf' function. */
+#define HAVE_PRINTF 1
+
/* Define to 1 if you have the `pstat_getdynamic' function. */
/* #undef HAVE_PSTAT_GETDYNAMIC */
+/* Define to 1 to configure Berkeley DB for POSIX pthread API. */
+/* #undef HAVE_PTHREAD_API */
+
+/* Define to 1 if you have the `pthread_yield' function. */
+/* #undef HAVE_PTHREAD_YIELD */
+
/* Define to 1 if you have the `pwrite' function. */
/* #undef HAVE_PWRITE */
@@ -243,6 +297,11 @@
#define HAVE_REPLICATION 1
#endif
+/* Define to 1 if building the Berkeley DB replication framework. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_REPLICATION_THREADS 1
+#endif
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -252,17 +311,20 @@
/* Define to 1 if you have the `select' function. */
/* #undef HAVE_SELECT */
-/* Define to 1 if building sequence support. */
-#define HAVE_SEQUENCE 1
-
/* Define to 1 if you have the `shmget' function. */
/* #undef HAVE_SHMGET */
+/* Define to 1 if you have the `sigaction' function. */
+/* #undef HAVE_SIGACTION */
+
+/* Define to 1 if thread identifier type db_threadid_t is integral. */
+#define HAVE_SIMPLE_THREAD_TYPE 1
+
/* Define to 1 if you have the `snprintf' function. */
#define HAVE_SNPRINTF 1
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
+/* Define to 1 if you have the `stat' function. */
+#define HAVE_STAT 1
/* Define to 1 if building statistics support. */
#define HAVE_STATISTICS 1
@@ -276,18 +338,39 @@
/* Define to 1 if you have the `strcasecmp' function. */
/* #undef HAVE_STRCASECMP */
+/* Define to 1 if you have the `strcat' function. */
+#define HAVE_STRCAT 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
+/* Define to 1 if you have the `strncat' function. */
+#define HAVE_STRNCAT 1
+
+/* Define to 1 if you have the `strncmp' function. */
+#define HAVE_STRNCMP 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the `strsep' function. */
+/* #undef HAVE_STRSEP */
+
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
@@ -329,9 +412,6 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
/* #undef HAVE_UNLINK_WITH_OPEN_FAILURE */
-/* Define to 1 if the system has the type `unsigned long long'. */
-#define HAVE_UNSIGNED_LONG_LONG 1
-
/* Define to 1 if building access method verification support. */
#ifndef HAVE_SMALLBUILD
#define HAVE_VERIFY 1
@@ -349,11 +429,8 @@
/* 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 PACKAGE_BUGREPORT "Oracle Technology Network Berkeley DB forum"
/* Define to the full name of this package. */
#define PACKAGE_NAME "Berkeley DB"
@@ -388,48 +465,7 @@
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
-/*
- * Exit success/failure macros.
- */
-#ifndef HAVE_EXIT_SUCCESS
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-#endif
-
-/*
- * 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.
- */
-#ifndef HAVE_GETCWD
-#define getcwd __db_Cgetcwd
-#endif
-#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
-
+#include "clib_port.h"
#include "win_db.h"
/*
diff --git a/db/dist/win_db.in b/db/dist/win_db.in
index d623610f4..7e0e6f15b 100644
--- a/db/dist/win_db.in
+++ b/db/dist/win_db.in
@@ -1,14 +1,28 @@
/*-
- * $Id: win_db.in,v 11.4 2004/10/07 13:59:24 carol Exp $
+ * $Id: win_db.in,v 12.19 2006/06/19 15:56:39 bostic Exp $
*
* The following provides the information necessary to build Berkeley
* DB on native Windows, and other Windows environments such as MinGW.
*/
+/*
+ * Avoid warnings with Visual Studio 8.
+ */
+#define _CRT_SECURE_NO_DEPRECATE 1
+
+/*
+ * Windows NT 4.0 and later required for the replication manager.
+ */
+#ifdef HAVE_REPLICATION_THREADS
+#define _WIN32_WINNT 0x0400
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/timeb.h>
#include <direct.h>
+#include <errno.h>
#include <fcntl.h>
#include <io.h>
#include <limits.h>
@@ -19,7 +33,6 @@
#include <stdlib.h>
#include <tchar.h>
#include <time.h>
-#include <errno.h>
/*
* To build Tcl interface libraries, the include path must be configured to
@@ -32,6 +45,16 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
+#include <winsock2.h>
+
+#ifdef HAVE_GETADDRINFO
+/*
+ * Need explicit includes for IPv6 support on Windows. Both are necessary to
+ * ensure that pre WinXP versions have an implementation of the getaddrinfo API.
+ */
+#include <ws2tcpip.h>
+#include <wspiapi.h>
+#endif
/*
* All of the necessary includes have been included, ignore the #includes
@@ -40,47 +63,61 @@
#define NO_SYSTEM_INCLUDES
/*
- * Win32 has getcwd, snprintf and vsnprintf, but under different names.
+ * Microsoft's C runtime library has fsync, getcwd, getpid, snprintf and
+ * vsnprintf, but under different names.
*/
+#define fsync _commit
#define getcwd(buf, size) _getcwd(buf, size)
+#define getpid _getpid
#define snprintf _snprintf
#define vsnprintf _vsnprintf
+#define h_errno WSAGetLastError()
+
+/*
+ * Windows defines off_t to long (i.e., 32 bits). We need to pass 64-bit
+ * file offsets, so we declare our own.
+ */
+#define off_t __db_off_t
+typedef __int64 off_t;
+
/*
- * Win32 does not define getopt and friends in any header file, so we must.
+ * Win32 does not have getopt.
+ *
+ * The externs are here (instead of using db_config.h and clib_port.h),
+ * because Berkeley DB example programs use getopt and they can't #include
+ * those files.
*/
#if defined(__cplusplus)
extern "C" {
#endif
-extern int optind;
-extern char *optarg;
extern int getopt(int, char * const *, const char *);
#if defined(__cplusplus)
}
#endif
#ifdef _UNICODE
-#define TO_TSTRING(dbenv, s, ts, ret) do { \
- int __len = strlen(s) + 1; \
+#define TO_TSTRING(dbenv, s, ts, ret) do { \
+ int __len = (int)strlen(s) + 1; \
ts = NULL; \
if ((ret = __os_malloc((dbenv), \
- __len * sizeof (_TCHAR), &(ts))) == 0 && \
+ __len * sizeof(_TCHAR), &(ts))) == 0 && \
MultiByteToWideChar(CP_UTF8, 0, \
(s), -1, (ts), __len) == 0) \
- ret = __os_get_errno(); \
+ ret = __os_posix_err(__os_get_syserr()); \
} while (0)
-#define FROM_TSTRING(dbenv, ts, s, ret) { \
+#define FROM_TSTRING(dbenv, ts, s, ret) { \
int __len = WideCharToMultiByte(CP_UTF8, 0, ts, -1, \
NULL, 0, NULL, NULL); \
s = NULL; \
if ((ret = __os_malloc((dbenv), __len, &(s))) == 0 && \
WideCharToMultiByte(CP_UTF8, 0, \
(ts), -1, (s), __len, NULL, NULL) == 0) \
- ret = __os_get_errno(); \
+ ret = __os_posix_err(__os_get_syserr()); \
} while (0)
-#define FREE_STRING(dbenv, s) do { \
+#define FREE_STRING(dbenv, s) do { \
if ((s) != NULL) { \
__os_free((dbenv), (s)); \
(s) = NULL; \
@@ -88,7 +125,19 @@ extern int getopt(int, char * const *, const char *);
} while (0)
#else
-#define TO_TSTRING(dbenv, s, ts, ret) (ret) = 0, (ts) = (_TCHAR *)(s)
-#define FROM_TSTRING(dbenv, ts, s, ret) (ret) = 0, (s) = (char *)(ts)
-#define FREE_STRING(dbenv, ts)
+#define TO_TSTRING(dbenv, s, ts, ret) (ret) = 0, (ts) = (_TCHAR *)(s)
+#define FROM_TSTRING(dbenv, ts, s, ret) (ret) = 0, (s) = (char *)(ts)
+#define FREE_STRING(dbenv, ts)
+#endif
+
+#ifndef INVALID_HANDLE_VALUE
+#define INVALID_HANDLE_VALUE ((HANDLE)-1)
+#endif
+
+#ifndef INVALID_FILE_ATTRIBUTES
+#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
+#endif
+
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER ((DWORD)-1)
#endif
diff --git a/db/dist/win_exports.in b/db/dist/win_exports.in
index 9087875cc..e1d3023d7 100644
--- a/db/dist/win_exports.in
+++ b/db/dist/win_exports.in
@@ -1,4 +1,4 @@
-# $Id: win_exports.in,v 1.41 2004/10/12 17:44:10 bostic Exp $
+# $Id: win_exports.in,v 12.20 2006/08/10 08:21:51 alexg Exp $
# Standard interfaces.
db_create
@@ -9,30 +9,6 @@
db_xa_switch
log_compare
-# Library configuration interfaces.
- db_env_set_func_close
- db_env_set_func_dirfree
- db_env_set_func_dirlist
- db_env_set_func_exists
- db_env_set_func_free
- db_env_set_func_fsync
- db_env_set_func_ftruncate
- db_env_set_func_ioinfo
- db_env_set_func_malloc
- db_env_set_func_map
- db_env_set_func_open
- db_env_set_func_pread
- db_env_set_func_pwrite
- db_env_set_func_read
- db_env_set_func_realloc
- db_env_set_func_rename
- db_env_set_func_seek
- db_env_set_func_sleep
- db_env_set_func_unlink
- db_env_set_func_unmap
- db_env_set_func_write
- db_env_set_func_yield
-
# Needed for application-specific logging and recovery routines.
__db_add_recovery
@@ -65,9 +41,6 @@
__db_panic
__db_r_attach
__db_r_detach
- __db_win32_mutex_init
- __db_win32_mutex_lock
- __db_win32_mutex_unlock
__ham_func2
__ham_func3
__ham_func4
@@ -76,58 +49,78 @@
__lock_id_set
__os_calloc
__os_closehandle
+ __os_dirfree
+ __os_dirlist
__os_free
+ __os_get_syserr
+ __os_getenv
__os_ioinfo
__os_malloc
+ __os_mkdir
__os_open
__os_openhandle
+ __os_posix_err
__os_read
__os_realloc
__os_strdup
__os_umalloc
+ __os_unlink
__os_write
__txn_id_set
-#These are needed for linking tools or java.
+# These are needed for linking tools or java.
__bam_adj_read
__bam_cadjust_read
__bam_cdel_read
__bam_curadj_read
+ __bam_merge_read
__bam_pgin
+ __bam_pgno_read
__bam_pgout
__bam_rcuradj_read
+ __bam_relink_43_read
__bam_relink_read
__bam_repl_read
__bam_root_read
__bam_rsplit_read
__bam_split_read
+ __crdel_inmem_create_read
+ __crdel_inmem_remove_read
+ __crdel_inmem_rename_read
__crdel_metasub_read
__db_addrem_read
__db_big_read
__db_cksum_read
+ __db_ctime
__db_debug_read
__db_dispatch
+ __db_dl
__db_dumptree
__db_err
- __db_fileid_reset
+ __db_errx
__db_getlong
__db_getulong
__db_global_values
__db_isbigendian
- __db_lsn_reset
+ __db_mkpath
+ __db_msg
__db_noop_read
__db_omode
- __db_overwrite
__db_ovref_read
+ __db_pg_alloc_42_read
__db_pg_alloc_read
+ __db_pg_free_42_read
__db_pg_free_read
+ __db_pg_freedata_42_read
__db_pg_freedata_read
__db_pg_init_read
__db_pg_new_read
__db_pg_prepare_read
+ __db_pg_sort_read
__db_pgin
__db_pgout
__db_pr_callback
+ __db_relink_42_read
__db_rpath
__db_stat_pp
__db_stat_print_pp
@@ -147,8 +140,10 @@
__ham_copypage_read
__ham_curadj_read
__ham_get_meta
+ __ham_groupalloc_42_read
__ham_groupalloc_read
__ham_insdel_read
+ __ham_metagroup_42_read
__ham_metagroup_read
__ham_newpage_read
__ham_pgin
@@ -158,12 +153,19 @@
__ham_splitdata_read
__lock_list_print
__log_stat_pp
+ __mutex_set_wait_info
+ __os_abspath
__os_clock
+ __os_exists
__os_get_errno
__os_id
+ __os_mapfile
+ __os_seek
__os_set_errno
__os_sleep
+ __os_spin
__os_ufree
+ __os_unmapfile
__os_yield
__qam_add_read
__qam_del_read
@@ -173,7 +175,9 @@
__qam_pgin_out
__rep_stat_print
__txn_child_read
+ __txn_ckp_42_read
__txn_ckp_read
__txn_recycle_read
+ __txn_regop_42_read
__txn_regop_read
__txn_xa_regop_read
diff --git a/db/dist/winmsi/dbcorewix.in b/db/dist/winmsi/dbcorewix.in
new file mode 100644
index 000000000..2ac664a61
--- /dev/null
+++ b/db/dist/winmsi/dbcorewix.in
@@ -0,0 +1,196 @@
+<!-- $Id: dbcorewix.in,v 1.10 2006/09/14 15:50:50 mjc Exp $
+ -
+ - Dbcorewix.in is the DB core WiX input file, and is used by
+ - s_winmsi to create dbcore.wxs (an input to WiX).
+ - Most everything here is pure 'WiX' syntax within XML,
+ - the exceptions are:
+ - 1) everything is pushed through the m4 preprocessor first.
+ - this makes certain boilerplate actions in the UI tolerable.
+ - We put all needed defines at the top of this file.
+ - 2) a very few identifiers beginning with WIX_DB_*
+ - are predefined as m4 macros on the command line.
+ - These are items that only the caller (s_winmsi) can know.
+ -
+ - M4 makes many things easier, but there are peculiarities.
+ - In particular, if you are using a macro with args, like
+ - TOPSTRIPE, note that *any* occurance of the characters "( ) ,"
+ - are interpreted by m4, even if they occur in an Xml comment or string.
+ - Remember this when editing this file!
+ -
+ - Beyond that, there is a lot to understand about WiX
+ - and how this file operates, to get started, look at
+ - various WiX tutorials, like:
+ - http://www.ondotnet.com/pub/a/dotnet/2004/04/19/wix.html
+ - http://blogs.msdn.com/robmen/archive/2004/04/05/107709.aspx
+ - Also view the lecture covered here:
+ - http://blogs.msdn.com/robmen/archive/2004/09/23/233684.aspx
+ -
+ - Finally, understand that WiX is an XML layering above the concepts
+ - defined by the world of the MSI installer. To really know how to do WiX,
+ - (and especially the UI), you need to understand the MSI installer.
+ - A key point is that MSI (and hence WiX) is not really procedural.
+ - MSI defines a number of tables (like Feature or CustomAction) in
+ - an internal database. WiX merely specifies how to fill these tables,
+ - and the msiexec program merely cranks through the various tables,
+ - processing each row. It is true that you can do procedural things
+ - via CustomActions, but to get them in order, you must specify columns
+ - in the table with things like After="SomeOtherRowId".
+ -
+ - See "About the User Interface" and subordinate documents:
+ - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/about_the_user_interface.asp
+-->
+
+m4_include(WIX_DB_SHARED_WINMSIDIR/dbwix.m4) <!-- Define common macros -->
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
+
+ <!-- The ???? stuff asks WiX to create a unique GUID for us -->
+ <Product Id='????????-????-????-????-????????????'
+ Name='Berkeley DB WIX_DB_VERSION' Version='WIX_DB_VERSION.0'
+ Manufacturer='Oracle Corporation' Language='1033'>
+
+ <!-- Store files as a compressed 'cabinet' embedded in the .MSI file. -->
+ <Package Id='????????-????-????-????-????????????'
+ Keywords="Embedded Database Datastore"
+ Description='Berkeley DB WIX_DB_VERSION'
+ Comments='includes sources and binaries' InstallerVersion='200'
+ Compressed='yes' Platforms="Intel"
+ Languages="1033" SummaryCodepage="1252" />
+
+ <Media Id='1' Cabinet='dbcore.cab' EmbedCab='yes' />
+
+ COMMON_PROPERTIES()
+
+ <!-- Declare properties for environment -->
+ WIX_DB_ENV_FEATURE_PROPS()
+
+ <Condition Message=
+ "To install [ProductName], you must be running Windows 2000 or Windows XP.">
+ <![CDATA[VersionNT>=500]]></Condition>
+
+ <Condition Message=
+ "You must have administrative access to install this product.">
+ NOT Priviledged
+ </Condition>
+
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="DesktopFolder" Name="." SourceName="." />
+ <Directory Id="FavoritesFolder" Name="." SourceName="." />
+
+ <Directory Id="ProgramFilesFolder" Name="." SourceName=".">
+ <Directory Id="OracleFolder" Name="Oracle" LongName="Oracle">
+ <Directory Id="INSTALLDIR" Name="WIX_DB_8CHAR_VERSION"
+ LongName="Berkeley DB WIX_DB_VERSION">
+ <Directory Id="INSTALLUTIL" Name="instutil"
+ LongName="installutil">
+ </Directory>
+
+
+ <!-- Note: these guids must be changed when an installer
+ - for a new release is made available.
+ -
+ - TODO: to play by the rules of components (see
+ - http://blogs.msdn.com/robmen/archive/2003/10/18/56497.aspx,
+ - "Component Rules 101" by Rob Mensching),
+ - we should devise a strategy for ALL guids (remember
+ - many are created by s_winmsi). This should work:
+ -
+ - Each guid is composed of three parts, like so:
+ - PPPPPPPP-VVVV-VVVV-HHHH-HHHHHHHHHHHH
+ - The P part is unique to the product, e.g.
+ - the bdb core installer might always use 9A3FE019.
+ - The V part is the version of the product, e.g.
+ - 4.2.37 might be translated as 0402-0025 # 25 is 37 in hex
+ - The H part is a hash value created from the directory
+ - that houses the component. Like if the component for
+ - the directory "bin/Debug" hashed to 1234567890abcdef,
+ - then the H part is 1234-567890abcdef.
+ -
+ - This scheme guarantees that rebuilds of the installer
+ - over the same release tree get the same GUIDs.
+ - But for a different release tree (which *should* get
+ - installed in a different directory, since install
+ - directories are named by release number), we will get
+ - completely different GUIDs.
+ -->
+ <Component Id="RequiredFiles"
+ Guid="13E1DF48-903B-11D9-8BDE-F66BAD1E3F3A"
+ KeyPath="yes" SharedDllRefCount="yes"
+ Location="either" DiskId="1">
+
+ <File Id="LICENSE.txt" Name="LICENSE.txt"
+ src="WIX_DB_SRCDIR\LICENSE" />
+ <File Id="README.txt" Name="README.txt"
+ src="WIX_DB_SRCDIR\README" />
+ <Registry Id="RootDir.RegistryVal" Root="HKLM"
+ Key="SOFTWARE\Oracle\Berkeley DB\WIX_DB_VERSION"
+ Name="RootDirectory" Value="[INSTALLDIR]" Type="string"
+ Action="write" />
+ <CreateFolder />
+ </Component>
+
+ COMMON_COMPONENTS()
+
+ <!-- <Directory>, <Component> generated from files.in -->
+ WIX_DB_DIRECTORY_STRUCTURE()
+
+ </Directory>
+ </Directory>
+ </Directory>
+ <Directory Id="ProgramMenuFolder" Name="." SourceName=".">
+ <Directory Id="BerkeleyDbMenu" Name="WIX_DB_8CHAR_VERSION"
+ LongName="Berkeley DB WIX_DB_VERSION" />
+ </Directory>
+ </Directory>
+
+ <!-- <File>, <Shortcut> generated from links.in -->
+ WIX_DB_LINKS()
+
+ COMMON_FEATURES(`Berkeley DB')
+
+ <!-- ================================================================ -->
+ <UI>
+
+ <Property Id="DefaultUIFont"><![CDATA[Tahoma8]]></Property>
+ <TextStyle Id="Tahoma8" FaceName="Tahoma" Size="8" />
+
+ DIALOG_WELCOME(MainWelcomeDlg, , ShowLicenseDlg)
+ DIALOG_LICENSE(ShowLicenseDlg, MainWelcomeDlg, TargetFolderDlg,
+ `Berkeley DB')
+ DIALOG_TARGET(TargetFolderDlg, ShowLicenseDlg, FeatureSelectionDlg)
+ DIALOG_FEATURE(FeatureSelectionDlg, TargetFolderDlg, EnvVarDlg,
+ `Debug libraries are needed for working C/C++ examples.')
+ DIALOG_ENVIRONMENT(EnvVarDlg, FeatureSelectionDlg, ReadyToInstallDlg)
+ DIALOG_READY(ReadyToInstallDlg, EnvVarDlg, )
+
+ DIALOG_PROGRESS(ShowProgressDlg, , )
+ DIALOG_SUCCESS(InstallSuccessDlg, , , `Berkeley DB',
+ `Oracle Technology Network Berkeley DB forum')
+
+
+ <!-- Here are extra admin dialogs -->
+ DIALOG_ADMIN_CANCEL(CancelInstallerDlg)
+ DIALOG_ADMIN_NOSPACE(OutOfSpaceDlg, FeatureSelectionDlg)
+ DIALOG_ADMIN_INTERRUPTED(InstallErrorDlg, Return)
+ DIALOG_ADMIN_INTERRUPTED(InstallCancelledDlg, Exit)
+
+
+ <!-- This sequence tells MSI what to do when (at the highest level) -->
+ <InstallUISequence>
+ <Show Dialog="InstallErrorDlg" OnExit="error" />
+ <Show Dialog="InstallCancelledDlg" OnExit="cancel" />
+ <Show Dialog="InstallSuccessDlg" OnExit="success" />
+ <Show Dialog="MainWelcomeDlg" After="CostFinalize" />
+ <Show Dialog="ShowProgressDlg" After="MainWelcomeDlg" />
+ </InstallUISequence>
+
+ COMMON_UI_TEXT()
+ <Property Id="MaxInstallSize">49 MB</Property>
+
+
+ </UI>
+
+ COMMON_EXECUTE_SEQUENCE()
+
+ </Product>
+</Wix>
diff --git a/db/dist/winmsi/dbvarsbat.in b/db/dist/winmsi/dbvarsbat.in
new file mode 100644
index 000000000..a39e9d425
--- /dev/null
+++ b/db/dist/winmsi/dbvarsbat.in
@@ -0,0 +1,25 @@
+@echo off
+
+:: $Id: dbvarsbat.in,v 1.3 2006/09/14 15:50:50 mjc Exp $
+:: This file sets the environment variables needed to run Berkeley DB.
+
+set DBROOTDIR=
+for /F "tokens=3 delims= " %%A in ('REG QUERY "HKLM\SOFTWARE\Oracle\Berkeley DB\WIX_DB_VERSION" /v RootDirectory') do set DBROOTDIR=%%A
+if ERRORLEVEL 2 goto MISSING
+if not defined DBROOTDIR goto MISSING
+
+echo Setting environment variables for Berkeley DB, installed in %DBROOTDIR%
+
+set PATH=%DBROOTDIR%\bin;%DBROOTDIR%\bin\debug;%PATH%
+set CLASSPATH=%CLASSPATH%;%DBROOTDIR%\jar\debug\db.jar;%DBROOTDIR%\jar\debug\dbexamples.jar;%CLASSPATH%;%DBROOTDIR%\jar\db.jar;%DBROOTDIR%\jar\dbexamples.jar
+goto END
+
+:MISSING
+echo
+echo NOTE:
+echo The Berkeley DB version could not be determined.
+echo If you are running on Windows 2000, make sure the
+echo REG.EXE program is installed from the Tools disk"
+echo
+
+:END
diff --git a/db/dist/winmsi/dbwix.m4 b/db/dist/winmsi/dbwix.m4
new file mode 100644
index 000000000..a7fb9b326
--- /dev/null
+++ b/db/dist/winmsi/dbwix.m4
@@ -0,0 +1,833 @@
+<!-- $Id: dbwix.m4,v 1.8 2006/09/14 15:50:50 mjc Exp $
+ - This file is included by WiX input files to define m4 macros.
+ - m4 is tricky. It has NO notion of XML comments, so
+ - take care using these names in comments after they are defined,
+ - since they will be expanded (probably what you don't want).
+ -
+ - Note that this file is shared by multiple installers.
+ - If you want to change a definition to customize an individual project,
+ - consider redefining the macro in a local file.
+ -->
+
+<!-- Some basic UI characteristics -->
+m4_define(`DIALOG_WIDTH', `390')
+m4_define(`DIALOG_HEIGHT', `320')
+m4_define(`BOTTOMSTRIPE_Y', `m4_eval(DIALOG_HEIGHT-32)')
+m4_define(`NAVBUTTON_Y', `m4_eval(DIALOG_HEIGHT-23)')
+m4_define(`NAVBUTTON_DIM', `X="`$1'" Y="NAVBUTTON_Y" Width="66" Height="17"')
+
+<!-- _YPOS is a running total of the current Y position -->
+m4_define(`_YPOS', `0')
+m4_define(`SETY', `m4_define(`_YPOS', `$1')')
+m4_define(`INCY', `SETY(m4_eval(_YPOS+(`$1')))')
+
+<!-- PARTIALHEIGHT(yheight [, gap=10 ]) -->
+m4_define(`PARTIALHEIGHT', `Y="_YPOS" Height="`$1'" INCY(`$1') INCY(_GETGAP(`$2'))')
+m4_define(`_GETGAP', `m4_ifelse(`',`$1', 10, `$1')')
+m4_define(`FULLHEIGHT', `Y="_YPOS" Height="m4_eval(BOTTOMSTRIPE_Y - _YPOS - 10)"')
+
+<!-- BOTTOM_Y: bottom of the usable area before nav buttons -->
+m4_define(`BOTTOM_Y', `m4_eval(BOTTOMSTRIPE_Y - 10)')
+
+m4_define(`DIALOGPROP', `Width="DIALOG_WIDTH" Height="DIALOG_HEIGHT"
+ Title="[ProductName] - Installer" NoMinimize="yes"')
+
+m4_define(`TOPSTRIPE', `
+ SETY(`$1')
+ INCY(10)
+<!-- stripe bitmap removed for now until we get better quality bitmaps.
+ <Control Id="TopStripe" Type="Bitmap"
+ X="0" Y="0" Width="DIALOG_WIDTH" Height="`$1'" Text="Stripe" />
+-->
+ <Control Id="TopStripeBorder" Type="Line"
+ X="0" Y="`$1'" Width="DIALOG_WIDTH" Height="0" />
+ <Control Id="TopTitle" Type="Text"
+ X="8" Y="6" Width="292" Height="25" Transparent="yes">
+ <Text>{&amp;MSSansBold8}`$2'</Text>
+ </Control>
+ <Control Id="TopText" Type="Text"
+ X="16" Y="23" Width="m4_eval(DIALOG_WIDTH-34)"
+ Height="m4_eval(`$1' - 19)" Transparent="yes">
+ <Text>`$3'</Text>
+ </Control>')
+
+m4_define(`TEXTCONTROL', `
+ <Control Id="`$1'" Type="Text"
+ X="20" Y="_YPOS" Width="m4_eval(DIALOG_WIDTH-42)" Height="`$2'">
+ <Text>`$3'</Text>
+ </Control>
+ INCY(`$2')')
+
+<!-- TEXTCONTROL2 (name,height,text). No newline -->
+m4_define(`TEXTCONTROL2', `
+ <Control Id="`$1'" Type="Text"
+ X="20" Y="_YPOS" Width="m4_eval(DIALOG_WIDTH-42)" Height="`$2'" Transparent="yes">
+ <Text>`$3'</Text>
+ </Control>')
+
+m4_define(`BOTTOMSTRIPE', `
+ <Control Id="BottomStripeBorder" Type="Line"
+ X="0" Y="BOTTOMSTRIPE_Y" Width="DIALOG_WIDTH" Height="0" />')
+
+m4_define(`NEWDIALOGEVENT', `
+ <Publish Event="NewDialog" Value="`$1'">
+ <![CDATA[1]]>
+ </Publish>')
+
+m4_define(`SPAWNDIALOGEVENT', `
+ <Publish Event="SpawnDialog" Value="`$1'">
+ <![CDATA[1]]>
+ </Publish>')
+
+<!-- use an arrow only if the text is Back, like this: "< Back" -->
+m4_define(`BACKBUTTON_GENERIC', `
+ <Control Id="`$1'" Type="PushButton"
+ NAVBUTTON_DIM(170)
+ Text="m4_ifelse(Back,`$1',&lt; )&amp;`$1'" `$2'>
+ `$3'
+ </Control>')
+
+<!-- use an arrow only if the text is Next, like this: "Next >" -->
+m4_define(`NEXTBUTTON_GENERIC', `
+ <Control Id="`$1'" Type="PushButton"
+ NAVBUTTON_DIM(236)
+ Default="yes" Text="&amp;`$1'm4_ifelse(Next,`$1', &gt;)" `$2'>
+ `$3'
+ </Control>')
+
+m4_define(`CANCELBUTTON_GENERIC', `
+ <Control Id="`$1'" Type="PushButton"
+ NAVBUTTON_DIM(308)
+ Text="`$1'" `$2'>
+ `$3'
+ </Control>')
+
+m4_define(`NEXTBUTTON_NOTDEFAULT', `
+ <Control Id="`$1'" Type="PushButton"
+ NAVBUTTON_DIM(236)
+ Default="no" Text="&amp;`$1'm4_ifelse(Next,`$1', &gt;)" `$2'>
+ `$3'
+ </Control>')
+
+<!-- typical usages -->
+m4_define(`BACKBUTTON_DISABLED', `BACKBUTTON_GENERIC(Back, Disabled="yes")')
+m4_define(`BACKBUTTON', `BACKBUTTON_GENERIC(Back, , NEWDIALOGEVENT(`$1'))')
+m4_define(`NEXTBUTTON_DISABLED', `NEXTBUTTON_GENERIC(Next, Disabled="yes")')
+m4_define(`NEXTBUTTON', `NEXTBUTTON_GENERIC(Next, , NEWDIALOGEVENT(`$1'))')
+m4_define(`CANCELBUTTON', `CANCELBUTTON_GENERIC(Cancel, Cancel="yes",
+ SPAWNDIALOGEVENT(CancelInstallerDlg))')
+
+<!-- a little (imperfect) magic to create some unique GUIDs. -->
+m4_define(`_GUIDSUFFIX', `10000000')
+m4_define(`_SETGUID', `m4_define(`_GUIDSUFFIX', `$1')')
+m4_define(`_GUIDINC', `_SETGUID(m4_eval(_GUIDSUFFIX+1))')
+m4_define(`GUID_CREATE_UNIQUE', `_GUIDINC()WIX_DB_GUID_PREFIX()`'_GUIDSUFFIX()')
+
+<!-- These three defines are data values, used by GUID_CREATE_PERSISTENT -->
+m4_define(`_WIXDB_PRODUCT', WIX_DB_PRODUCT_NAME)
+m4_define(`_WIXDB_VERSION', WIX_DB_VERSION)
+m4_define(`_WIXDB_CURDIR', `unknown')
+m4_define(`_WIXDB_CURFILE', `unknown')
+m4_define(`_WIXDB_SUBDIR', `')
+
+<!-- These defines set the data values above -->
+m4_define(`WIX_DB_SET_PRODUCT', `m4_define(`_WIXDB_PRODUCT', `$1')')
+m4_define(`WIX_DB_SET_VERSION', `m4_define(`_WIXDB_VERSION', `$1')')
+m4_define(`WIX_DB_SET_CURDIR', `m4_define(`_WIXDB_CURDIR', `$1')')
+m4_define(`WIX_DB_SET_CURFILE', `m4_define(`_WIXDB_CURFILE', `$1')')
+m4_define(`WIX_DB_SET_SUBDIR', `m4_define(`_WIXDB_SUBDIR', `$1')')
+
+m4_define(`_LASTCHAR', `m4_substr(`$1',m4_eval(m4_len(`$1')-1))')
+m4_define(`_LOPCHAR', `m4_substr(`$1',0,m4_eval(m4_len(`$1')-1))')
+m4_define(`_CHOPNAME', `m4_ifelse(_LASTCHAR(`$1'),/,`$1',`_CHOPNAME(_LOPCHAR(`$1'))')')
+m4_define(`WIX_DB_BEGIN_SUBDIR', `WIX_DB_SET_SUBDIR(_WIXDB_SUBDIR/`$1')')
+m4_define(`WIX_DB_END_SUBDIR', `WIX_DB_SET_SUBDIR(_LOPCHAR(_CHOPNAME(_WIXDB_SUBDIR)))')
+m4_define(`WIX_DB_CLEAR_SUBDIR', `WIX_DB_SET_SUBDIR()')
+
+<!-- Create a GUID from the current product, directory, file -->
+m4_define(`WIX_DB_PERSISTENT_GUID', `m4_esyscmd(echo "_WIXDB_PRODUCT @@ _WIXDB_VERSION @@ _WIXDB_CURDIR @@ _WIXDB_SUBDIR @@ _WIXDB_CURFILE" | openssl md5 | sed -e "s/^\(........\)\(....\)\(....\)\(....\)\(....\)\(............\)/\1-\2-\3-\4-\5/")')
+
+m4_define(`DB_LICENSE_INTRO', `The following license applies to this copy of software you are about to install. Please read it carefully before proceeding. Select below the nature of the license by which you will use this product. For more information about Oracle Corporation&apos;s licensing please contact us at berkeleydb-info_us@oracle.com')
+
+m4_define(`DB_ENVIRONMENT_INTRO', `[ProductName] will need to modify certain environment variables to work properly. If you elect not to set these variables you may find that some utilities`,' scripts and other parts of [ProductName] won&apos;t work properly. Please indicate that you skipped this step if you request support help from us.')
+
+m4_define(`COMMON_PROPERTIES', `
+ <Property Id="ApplicationUsers"><![CDATA[AnyUser]]></Property>
+ <Property Id="LicenseType"><![CDATA[Open]]></Property>
+
+ <!-- The ARP* properties affect the Add/Remove Programs dialog -->
+ <Property Id="ARPURLINFOABOUT"><![CDATA[http://www.oracle.com]]></Property>
+ <Property Id="ARPCONTACT"><![CDATA[berkeleydb-info_us@oracle.com]]></Property>
+ <Property Id="ARPNOMODIFY"><![CDATA[1]]></Property>
+ <Property Id="ARPNOREPAIR"><![CDATA[1]]></Property>
+ <!-- TODO: this icon does not work here -->
+ <Property Id="ARPPRODUCTION"><![CDATA[IconWeb]]></Property>
+
+ <Property Id="INSTALLLEVEL"><![CDATA[200]]></Property>
+ <Property Id="FullOrCustom"><![CDATA[Full]]></Property>
+
+ <Property Id="DiscussionCheck" Hidden="yes"><![CDATA[yes]]></Property>
+ <Property Id="AnnouncementsCheck" Hidden="yes"><![CDATA[yes]]></Property>
+ <Property Id="NewsletterCheck" Hidden="yes"><![CDATA[yes]]></Property>
+ <Property Id="EmailAddress" Hidden="yes"></Property>
+ <Property Id="SalesContactCheck" Hidden="yes"><![CDATA[yes]]></Property>
+ <Property Id="EnvironmentSetCheck" Hidden="yes"><![CDATA[1]]></Property>
+ <Property Id="EnvironmentGenCheck" Hidden="yes"><![CDATA[1]]></Property>
+<!-- (PBR) We use DebugCheck to track the state of the debug checkbox -->
+ <Property Id="DebugCheck" Hidden="yes"><![CDATA[yes]]></Property>
+
+ <!-- Part of the build process creates a program instenv.exe
+ - that is installed into InstUtil and used only by the installer.
+ - When a user wants to generate a file with environment vars,
+ - we launch instreg and that program creates it.
+ -
+ - The final location of the instenv.exe program is not known
+ - when we create this property, we set the real value of the
+ - property later.
+ -->
+
+ <Property Id="InstEnvironmentProgram"><![CDATA[0]]></Property>
+<!-- TODO: should not have to hardwire PATH and CLASSPATH here -->
+ <CustomAction Id="InstEnvironment" Property="InstEnvironmentProgram"
+ ExeCommand="[INSTALLDIR]\dbvars.bat PATH=[PATHEscValue] CLASSPATH=[CLASSPATHEscValue]" Return="asyncNoWait"/>
+
+ <!-- Some properties to aid in debugging.
+ - Sometimes creating a msg dialog is the easiest way to see the
+ - value of a property. To make this work when you hit the next
+ - button, add this to your NEXTBUTTON__GENERIC call:
+
+ <Publish Event="DoAction" Value="InstDebug"><![CDATA[1]]></Publish>
+
+ -->
+ <Property Id="DebugUserId">dda</Property>
+ <Property Id="DebugShowProgram">msg.exe</Property>
+
+ <!-- tweek me as needed -->
+ <CustomAction Id="InstDebug" Property="DebugShowProgram"
+ ExeCommand="[DebugUserId] InstEnvironmentProgram=[InstEnvironmentProgram]= EnvironmentGenCheck=[EnvironmentGenCheck]= AlwaysInstall=[!AlwaysInstall]=" Return="asyncNoWait" />
+
+ <Property Id="NULL" Hidden="yes"></Property>
+ <Property Id="FeatureList" Hidden="yes"></Property>
+ <Property Id="DoInstallDebug" Hidden="yes">yes</Property>
+ <Property Id="DoInstallEnvironment" Hidden="yes">yes</Property>
+
+ <Binary Id="OracleLogo" src="WIX_DB_IMAGEDIR\oracle.jpg" />
+ <Binary Id="Stripe" src="WIX_DB_IMAGEDIR\topstripe.ibd" />
+
+ <!-- TODO: does not work yet -->
+ <Binary Id="IconWeb" src="WIX_DB_IMAGEDIR\caticon.ibd" />
+
+ <!-- These are 16x16 Windows ico files -->
+ <Binary Id="IconCreateDir" src="WIX_DB_IMAGEDIR\foldernew.ibd" />
+ <Binary Id="IconUp" src="WIX_DB_IMAGEDIR\folderup.ibd" />
+
+')
+
+m4_define(`COMMON_COMPONENTS', `
+ <Component Id="RequiredCommonFiles"
+ Guid="545CFE00-93D7-11D9-EAD3-F63F68BDEB1A"
+ KeyPath="yes" SharedDllRefCount="yes"
+ Location="either" DiskId="1">
+ <Registry Id="Ext.Registry" Root="HKCR"
+ Key=".bdbsc"
+ Value="Oracle.InformationalShortcut"
+ Type="string" Action="write" />
+ <Registry Id="Name.Registry" Root="HKCR"
+ Key="Oracle.InformationalShortcut"
+ Value="Oracle Corporation Informational Shortcut"
+ Type="string" Action="write" />
+ <Registry Id="Tip.Registry" Root="HKCR"
+ Key="Oracle.InformationalShortcut" Name="InfoTip"
+ Value="Oracle Corporation Informational Shortcut"
+ Type="string" Action="write" />
+ <Registry Id="NoShow.Registry" Root="HKCR"
+ Key="Oracle.InformationalShortcut" Name="NeverShowExt"
+ Type="string" Action="write" />
+ <Registry Id="Icon.Registry" Root="HKCR"
+ Key="Oracle.InformationalShortcut\DefaultIcon"
+ Value="[INSTALLDIR]\installutil\webicon.ico"
+ Type="string" Action="write" />
+ <Registry Id="Command.Registry" Root="HKCR"
+ Key="Oracle.InformationalShortcut\shell\open\command"
+ Value="rundll32.exe shdocvw.dll,OpenURL %1"
+ Type="string" Action="write" />
+ <Registry Id="Explore.Registry" Root="HKCU"
+ Key="Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bdbsc\OpenWithProgIds\Oracle.InformationalShortcut"
+ Action="write" />
+ <Registry Id="HklmExt.Registry" Root="HKLM"
+ Key="Software\Classes\.bdbsc"
+ Value="Oracle.InformationalShortcut"
+ Type="string" Action="write" />
+ <Registry Id="HklmCommand.Registry" Root="HKLM"
+ Key="Software\Classes\Oracle.InformationalShortcut\shell\open\command"
+ Value="rundll32.exe shdocvw.dll,OpenURL %1"
+ Type="string" Action="write" />
+ </Component>
+')
+
+m4_define(`COMMON_UI_TEXT', `
+ <!-- These are needed to show various canned text -->
+ <UIText Id="AbsentPath" />
+ <UIText Id="NewFolder">Fldr|New Folder</UIText>
+ <UIText Id="bytes">bytes</UIText>
+ <UIText Id="GB">GB</UIText>
+ <UIText Id="KB">KB</UIText>
+ <UIText Id="MB">MB</UIText>
+ <UIText Id="MenuAbsent">This feature will not be installed.</UIText>
+ <UIText Id="MenuAllLocal">This feature, and all subfeatures, will be installed.</UIText>
+ <UIText Id="MenuLocal">This feature will be installed.</UIText>
+ <UIText Id="SelAbsentAbsent">This feature will remain uninstalled.</UIText>
+ <UIText Id="SelAbsentLocal">This feature will be installed.</UIText>
+ <UIText Id="SelChildCostNeg">This feature frees up [1] on your hard drive.</UIText>
+ <UIText Id="SelChildCostPos">This feature requires [1] on your hard drive.</UIText>
+ <UIText Id="SelCostPending">Compiling cost for this feature...</UIText>
+ <UIText Id="SelLocalAbsent">This feature will be completely removed.</UIText>
+ <UIText Id="SelLocalLocal">This feature will remain installed.</UIText>
+ <UIText Id="SelParentCostNegNeg">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
+ <UIText Id="SelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
+ <UIText Id="SelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
+ <UIText Id="SelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
+ <UIText Id="TimeRemaining">Time remaining: {[1] min }[2] sec</UIText>
+ <UIText Id="VolumeCostAvailable">Available</UIText>
+ <UIText Id="VolumeCostDifference">Differences</UIText>
+ <UIText Id="VolumeCostRequired">Required</UIText>
+ <UIText Id="VolumeCostSize">Disk Size</UIText>
+ <UIText Id="VolumeCostVolume">Volume</UIText>
+')
+
+m4_define(`COMMON_FEATURES', `
+ <!-- Here we list all the features to be installed.
+ - There is one canned feature, the rest of the
+ - features come from features.in, by way of a file
+ - that gets included.
+ -->
+ <Feature Id="AlwaysInstall" Title="Always Install"
+ Description="`$1'" Display="hidden" Level="1"
+ AllowAdvertise="no"
+ ConfigurableDirectory="INSTALLDIR" Absent="disallow">
+ <ComponentRef Id="RequiredFiles" />
+ <ComponentRef Id="RequiredCommonFiles" />
+ </Feature>
+
+ <!-- <Feature>, <ComponentRef> generated from {features,files}.in -->
+ WIX_DB_FEATURE_STRUCTURE()
+')
+
+m4_define(`COMMON_EXECUTE_SEQUENCE', `
+ <!-- TODO: fix comment
+ - We modify the execute sequence to insert some custom actions:
+ - we want the instenv program to run during install (after files
+ - are installed), and during uninstall (before files are removed).
+ - We set a condition on the custom actions to make this happen.
+ - The "!ident" notation indicates the current action for a feature
+ - with that identifier. We use the AlwaysInstall feature because
+ - it is always present in our feature list. A value of 3 means
+ - it is being installed locally, 1 means it is being uninstalled.
+ - TODO: removed for now
+ <Custom Action="InstEnvironment" After="PublishProduct">
+ <![CDATA[Not Installed]]></Custom>
+ -->
+ <InstallExecuteSequence>
+ </InstallExecuteSequence>
+')
+
+<!--
+ - Here are macros for each dialog that is shared by the installers.
+ - The idea for any customization is that each installer
+ - could potentially override a particular dialog.
+ - However, if it is feasible to share code, any of these
+ - dialogs could be parameterized further.
+ -
+ - In general, these macros have 3 parameters.
+ - The first is the id name of the dialog.
+ - The second is the id of the previous dialog (for the Back button).
+ - The third is the id of the next dialog (for the Next button).
+ -->
+m4_define(`DIALOG_WELCOME', `
+ <Dialog Id="`$1'" DIALOGPROP>
+ BOTTOMSTRIPE()
+ BACKBUTTON_DISABLED()
+ CANCELBUTTON()
+ NEXTBUTTON(`$3')
+
+ TOPSTRIPE(54, `Welcome',
+`The Installer will install [ProductName] on your computer.
+To continue, click Next.')
+
+ <Control Id="Logo" Type="Bitmap" Text="OracleLogo"
+ X="0" Width="DIALOG_WIDTH" PARTIALHEIGHT(168) />
+ </Dialog>
+')
+
+<!-- Takes a 4th parameter, a short product name, like "Berkeley DB" -->
+m4_define(`DIALOG_LICENSE', `
+ <RadioGroup Property="LicenseType">
+ <RadioButton Value="Open"
+ X="0" Y="0" Width="310" Height="15"
+ Text="I qualify for the &amp;open source license shown above" />
+ <RadioButton Value="Commercial"
+ X="0" Y="15" Width="310" Height="15"
+ Text="I will need a co&amp;mmercial license when I ship my product" />
+ </RadioGroup>
+
+ <Dialog Id="`$1'" DIALOGPROP>
+
+ TOPSTRIPE(84, `Open Source License', DB_LICENSE_INTRO(`$4'))
+ BOTTOMSTRIPE()
+ BACKBUTTON(`$2')
+ CANCELBUTTON()
+ NEXTBUTTON(`$3')
+
+ <Control Id="LicenseText" Type="ScrollableText" X="8" Width="368"
+ PARTIALHEIGHT(130) Sunken="yes">
+ <Text>WIX_DB_LICENSE_RTF()</Text>
+ </Control>
+
+ <Control Id="LicenseRadio" Type="RadioButtonGroup" X="8" Width="340"
+ PARTIALHEIGHT(35) Property="LicenseType" />
+
+ </Dialog>
+')
+
+m4_define(`DIALOG_TARGET', `
+
+ <RadioGroup Property="ApplicationUsers">
+ <RadioButton Value="AnyUser" X="0" Y="0" Width="270" Height="15"
+ Text="&amp;Anyone who uses this computer (all users)" />
+ <RadioButton Value="CurUser" X="0" Y="15" Width="270" Height="15"
+ Text="Only for the current user" />
+ </RadioGroup>
+
+ <Dialog Id="`$1'" DIALOGPROP>
+
+ TOPSTRIPE(44, `Installation Folder',
+ `Click Next to install to the default folder.')
+ BOTTOMSTRIPE()
+ BACKBUTTON(`$2')
+ CANCELBUTTON()
+
+ NEXTBUTTON_GENERIC(Next,,
+ NEWDIALOGEVENT(`$3')
+ <Publish Event="SetInstallLevel" Value="300">
+ <![CDATA[0]]></Publish>
+ <Publish Property="ALLUSERS" Value="1">
+ <![CDATA[ApplicationUsers = "AnyUser"]]></Publish>
+ <Publish Property="ALLUSERS" Value="{}">
+ <![CDATA[ApplicationUsers = "CurUser"]]></Publish>
+ <Publish Property="SelectedSetupType" Value="Custom">
+ <![CDATA[1]]></Publish>
+
+ )
+
+ TEXTCONTROL(InstallToText, 16, `Install [ProductName] to:')
+
+ <Control Id="ChangeFolder" Type="PushButton" X="318" Y="_YPOS"
+ Width="66" Height="17" Text="&amp;Change...">
+ <Publish Event="SpawnDialog" Value="ChangeFolderDlg">
+ <![CDATA[1]]></Publish>
+ <Publish Property="NewInstallDir" Value="INSTALLDIR">
+ <![CDATA[1]]></Publish>
+ </Control>
+
+ <Control Id="InstallToValue" Type="Text" X="40" Width="250"
+ PARTIALHEIGHT(20, 20)
+ Property="NewInstallDir" Text="[INSTALLDIR]" />
+
+ TEXTCONTROL(InstallForText, 14, `Install [ProductName] for:')
+
+ <Control Id="InstallForRadio" Type="RadioButtonGroup" PARTIALHEIGHT(50)
+ X="40" Width="310" Property="ApplicationUsers" />
+ </Dialog>
+
+ <Dialog Id="ChangeFolderDlg" DIALOGPROP>
+ TOPSTRIPE(44, `Change the Installation Folder',
+ `Browse to the folder you want to install to.')
+ BOTTOMSTRIPE()
+ NEXTBUTTON_GENERIC(OK,,
+ <Publish Event="SetTargetPath"
+ Value="[NewInstallDir]"><![CDATA[1]]></Publish>
+ <Publish Event="EndDialog" Value="Return"><![CDATA[1]]></Publish>
+ )
+ CANCELBUTTON_GENERIC(Cancel, Cancel="yes",
+ <Publish Event="Reset" Value="0"><![CDATA[1]]></Publish>
+ <Publish Event="EndDialog" Value="Return"><![CDATA[1]]></Publish>
+ )
+
+ TEXTCONTROL(LookText, 15, `&amp;Install into:')
+
+ <Control Id="DirCombo" Type="DirectoryCombo"
+ X="20" Width="270" Y="_YPOS" Height="80"
+ Property="NewInstallDir" Indirect="yes" Removable="yes"
+ Fixed="yes" Remote="yes" CDROM="yes" RAMDisk="yes" Floppy="yes" />
+
+ <Control Id="FolderUp" Type="PushButton"
+ X="320" Width="19" Y="_YPOS" Height="19"
+ ToolTip="Up One Level" Icon="yes" FixedSize="yes"
+ IconSize="16" Text="IconUp">
+ <Publish Event="DirectoryListUp" Value="0"><![CDATA[1]]></Publish>
+ </Control>
+
+ <Control Id="FolderCreate" Type="PushButton"
+ X="345" Width="19" Y="_YPOS" Height="19"
+ ToolTip="Create New Folder" Icon="yes" FixedSize="yes"
+ IconSize="16" Text="IconCreateDir">
+ <Publish Event="DirectoryListNew" Value="0"><![CDATA[1]]></Publish>
+ </Control>
+
+ INCY(25)
+ <Control Id="DirList" Type="DirectoryList"
+ X="20" Width="342" PARTIALHEIGHT(100, 5)
+ Property="NewInstallDir" Sunken="yes"
+ Indirect="yes" TabSkip="no" />
+
+ <Control Id="FolderText" Type="Text"
+ X="20" Width="99" PARTIALHEIGHT(14, 1)
+ TabSkip="no" Text="&amp;Folder name:" />
+
+ <Control Id="PathEditControl" Type="PathEdit"
+ X="20" Width="342" PARTIALHEIGHT(17)
+ Property="NewInstallDir" Sunken="yes" Indirect="yes" />
+
+ </Dialog>
+
+')
+
+<!-- Takes a 4th parameter, any extra text (restrictions) for debug libs -->
+m4_define(`DIALOG_FEATURE', `
+ <Dialog Id="`$1'" DIALOGPROP TrackDiskSpace="yes">
+
+ TOPSTRIPE(36, `Feature Selection',
+ `Select the features of [ProductName] you want. Maximum install size is [MaxInstallSize].')
+ BOTTOMSTRIPE()
+ CANCELBUTTON
+ BACKBUTTON(`$2')
+
+ NEXTBUTTON_GENERIC(Next,,
+ <Publish Event="NewDialog" Value="`$3'">
+ <![CDATA[OutOfNoRbDiskSpace <> 1]]></Publish>
+ <Publish Event="NewDialog" Value="OutOfSpaceDlg">
+ <![CDATA[OutOfNoRbDiskSpace = 1]]></Publish>
+ <Publish Property="FullOrCustom" Value="Custom">
+ <![CDATA[1]]></Publish>
+
+ <!--
+ - This updates the FeatureList property and the
+ - properties like PATHValue that track the value
+ - to be displayed for environment variables.
+ -->
+ WIX_DB_ENV_FEATURE_SET()
+ )
+
+
+ <!-- TODO: When the debug checkbox is clicked,
+ - we would like to update the disk space usage numbers
+ - as shown in the SelectionTreeControl. Tried this:
+ <Publish Event="DoAction" Value="CostFinalize">
+ <![CDATA[1]]></Publish>
+ - but it made all the numbers zero. Probably need
+ - to perform a whole sequence, (like CostInitialize,...)
+ -->
+
+
+ TEXTCONTROL(ClickText, 15,
+`Click on an icon in the list below to change how a feature is installed.')
+ INCY(5)
+
+ <Control Id="SelectionTreeControl" Type="SelectionTree"
+ X="8" Width="220" FULLHEIGHT
+ Property="NewInstallDir" Sunken="yes" TabSkip="no" />
+
+ <Control Id="GroupBoxControl" Type="GroupBox"
+ X="235" Width="131" FULLHEIGHT
+ Text="Feature Description" />
+ INCY(15)
+
+ <Control Id="ItemDescription" Type="Text"
+ X="241" Width="120" PARTIALHEIGHT(50) >
+ <Text></Text>
+ <Subscribe Event="SelectionDescription" Attribute="Text" />
+ </Control>
+
+ <Control Id="Size" Type="Text"
+ X="241" Width="120" PARTIALHEIGHT(50)
+ Text="Feature size">
+ <Subscribe Event="SelectionSize" Attribute="Text" />
+ </Control>
+
+ </Dialog>
+')
+
+<!--
+ - Note: for Win/9X, Win/ME
+ - Here we must do costfinalize whenever leaving
+ - this dialog (via Back or Next) because changing whether we have
+ - environment enabled or not changes the list of features
+ - (which is finalized by costfinalize).
+ - Calling costfinalize more than once is apparently not
+ - supported on older (9X,ME) systems.
+ -->
+m4_define(`DIALOG_ENVIRONMENT', `
+ <Dialog Id="`$1'" DIALOGPROP>
+ TOPSTRIPE(84, `Setting Environment Variables', DB_ENVIRONMENT_INTRO)
+ BOTTOMSTRIPE()
+ CANCELBUTTON
+ BACKBUTTON_GENERIC(Back, ,
+ NEWDIALOGEVENT(`$2')
+<!--PBR (4/4/2005) I removed this because it resets the feature choices
+ <Publish Event="DoAction" Value="CostFinalize">
+ <![CDATA[1]]></Publish>
+-->
+ )
+ NEXTBUTTON_GENERIC(Next, ,
+ NEWDIALOGEVENT(`$3')
+<!--PBR (4/4/2005) I removed this because it resets the feature choices
+ <Publish Event="DoAction" Value="CostFinalize">
+ <![CDATA[1]]></Publish>
+-->
+ <Publish Property="DoInstallEnvironment" Value="yes">
+ <![CDATA[EnvironmentSetCheck = "1"]]></Publish>
+ <Publish Property="DoInstallEnvironment" Value="no">
+ <![CDATA[EnvironmentSetCheck <> "1"]]></Publish>
+ )
+
+ <Control Id="SetEnvBox" Type="CheckBox" PARTIALHEIGHT(15, 5)
+ Text="Set the values in the environment variables"
+ X="26" Width="250" Property="EnvironmentSetCheck" CheckBoxValue="1"/>
+ <Control Id="GenEnvBox" Type="CheckBox" PARTIALHEIGHT(15, 8)
+ Text="Generate a dbvars.bat file with the given values"
+ X="26" Width="250" Property="EnvironmentGenCheck" CheckBoxValue="1"/>
+ INCY(5)
+
+ TEXTCONTROL(ReviewText, 12,
+`Here are the new environment values:')
+
+ <Control Id="LargeBox" Type="Text"
+ X="19" Width="340" FULLHEIGHT
+ Disabled="yes" Sunken="yes" Transparent="yes" TabSkip="no" />
+
+ INCY(5)
+
+ <!-- Show the properties for environment -->
+ WIX_DB_ENV_FEATURE_SHOW()
+
+ </Dialog>
+')
+
+m4_define(`DIALOG_READY', `
+ <Dialog Id="`$1'" DIALOGPROP TrackDiskSpace="yes">
+ NEXTBUTTON_GENERIC(Install,,
+ <Publish Event="NewDialog" Value="OutOfSpaceDlg">
+ <![CDATA[OutOfNoRbDiskSpace = 1]]></Publish>
+ <Publish Event="EndDialog" Value="Return">
+ <![CDATA[OutOfNoRbDiskSpace <> 1]]></Publish>
+
+<!-- Note: we set the name of the instenv now because we do not know
+ the installed pathname at the beginning of the execution -->
+
+ <Publish Property="InstEnvironmentProgram"
+ Value="[INSTALLDIR]\installutil\bin\instenv.exe">
+ <![CDATA[1]]></Publish>
+ )
+
+ TOPSTRIPE(44, `Ready', `The installer is ready to begin.')
+ BOTTOMSTRIPE()
+ CANCELBUTTON()
+ BACKBUTTON(`$2')
+
+ TEXTCONTROL(ReviewText, 24,
+`If you want to review or change any of your installation settings, click Back to the Feature Selection. Click Cancel to exit the installer.')
+
+ <Control Id="LargeBox" Type="Text"
+ X="19" Width="340" FULLHEIGHT
+ Disabled="yes" Sunken="yes" Transparent="yes" TabSkip="no" />
+
+ INCY(5)
+
+ <Control Id="DestinationText" Type="Text"
+ X="23" Width="316" PARTIALHEIGHT(11, 4)
+ TabSkip="no" Text="Destination Folder:" />
+
+ <Control Id="DestinationValue" Type="Text"
+ X="37" Width="316" PARTIALHEIGHT(13, 8)
+ TabSkip="no" Text="[INSTALLDIR]" />
+
+ <Control Id="FeatureListText" Type="Text"
+ X="23" Width="316" PARTIALHEIGHT(13, 4)
+ TabSkip="no" Text="Features to be installed:" />
+
+ <Control Id="FeatureListValue" Type="Text"
+ X="37" Width="316" PARTIALHEIGHT(30, 8)
+ TabSkip="no" Text="Shortcuts[FeatureList]" />
+
+ <Control Id="EnvironmentText" Type="Text"
+ X="23" Width="316" PARTIALHEIGHT(15, 0)
+ TabSkip="no" Text="Environment Variables:" />
+
+ <Control Id="EnvironmentValue" Type="Text"
+ X="37" Width="316" PARTIALHEIGHT(20, 0)
+ TabSkip="no" Text="[DoInstallEnvironment]" />
+
+ </Dialog>
+
+')
+
+m4_define(`DIALOG_PROGRESS', `
+ <Dialog Id="`$1'" DIALOGPROP Modeless="yes">
+ BOTTOMSTRIPE()
+ BACKBUTTON_DISABLED()
+ CANCELBUTTON()
+ NEXTBUTTON_DISABLED()
+
+ TOPSTRIPE(44, `Installer Progress', `Installing [ProductName].')
+
+ <Control Id="ActionText" Type="Text"
+ X="59" Y="100" Width="275" Height="12">
+ <Subscribe Event="ActionText" Attribute="Text" />
+ </Control>
+
+ <Control Id="ActionProgress95" Type="ProgressBar"
+ X="59" Y="113" Width="275" Height="12"
+ ProgressBlocks="yes" Text="Progress done">
+ <Subscribe Event="InstallFiles" Attribute="Progress" />
+ <Subscribe Event="MoveFiles" Attribute="Progress" />
+ <Subscribe Event="RemoveFiles" Attribute="Progress" />
+ <Subscribe Event="RemoveRegistryValues" Attribute="Progress" />
+ <Subscribe Event="WriteIniValues" Attribute="Progress" />
+ <Subscribe Event="WriteRegistryValues" Attribute="Progress" />
+ <Subscribe Event="UnmoveFiles" Attribute="Progress" />
+ <Subscribe Event="AdminInstallFinalize" Attribute="Progress" />
+ <Subscribe Event="SetProgress" Attribute="Progress" />
+ </Control>
+ </Dialog>
+')
+
+<!--
+ - Takes two extra parameters (in addition to the usual dialog parms)
+ - 4th: a short product name, like "Berkeley DB"
+ - 5th: a description of where to find online info, like "on www.xyz.com"
+ -->
+m4_define(`DIALOG_SUCCESS', `
+ <Dialog Id="`$1'" DIALOGPROP>
+ BOTTOMSTRIPE()
+ NEXTBUTTON_GENERIC(Finish, Cancel="yes",
+ <Publish Event="DoAction" Value="CleanUp">
+ <![CDATA[ISSCRIPTRUNNING="1"]]></Publish>
+ <Publish Event="EndDialog" Value="Exit">
+ <![CDATA[1]]></Publish>
+ )
+ CANCELBUTTON_GENERIC(Cancel, Disabled="yes", )
+ BACKBUTTON_DISABLED()
+
+ TOPSTRIPE(44, `Installed', `[ProductName] is now installed.')
+
+ TEXTCONTROL(InstallSuccessText, 80,
+`Please go to http://forums.oracle.com/forums/category.jspa?categoryID=18 for any technical issues or contact berkeleydb-info_us@oracle.com for sales and licensing questions.
+
+Information about this product can also be found $5.
+
+Thank you for installing [ProductName].')
+
+ <Control Id="Image" Type="Bitmap" Text="OracleLogo"
+ X="0" Width="DIALOG_WIDTH" FULLHEIGHT TabSkip="no" />
+
+ </Dialog>
+')
+
+
+m4_define(`DIALOG_ADMIN_INTERRUPTED', `
+ <Dialog Id="`$1'" DIALOGPROP>
+ TOPSTRIPE(44, `Interrupted',
+`The installer was interrupted before [ProductName] could be completely installed.')
+
+ BOTTOMSTRIPE()
+ NEXTBUTTON_GENERIC(Finish, Cancel="yes",
+ <Publish Event="DoAction" Value="CleanUp">
+ <![CDATA[ISSCRIPTRUNNING="1"]]></Publish>
+ <Publish Event="EndDialog" Value="Exit">
+ <![CDATA[1]]></Publish>
+ <Condition Action="default">
+ <![CDATA[NOT UpdateStarted]]></Condition>
+ )
+ CANCELBUTTON_GENERIC(Cancel, Disabled="yes",
+ <Publish Property="Suspend" Value="1"><![CDATA[1]]></Publish>
+ <Publish Event="EndDialog" Value="`$2'"><![CDATA[1]]></Publish>
+ <Condition Action="disable"><![CDATA[NOT UpdateStarted]]></Condition>
+ <Condition Action="enable"><![CDATA[UpdateStarted]]></Condition>
+ )
+ BACKBUTTON_GENERIC(Back, Disabled="yes",
+ <Publish Property="Suspend" Value="{}"><![CDATA[1]]></Publish>
+ <Publish Event="EndDialog" Value="`$2'"><![CDATA[1]]></Publish>
+ <Condition Action="disable"><![CDATA[NOT UpdateStarted]]></Condition>
+ <Condition Action="enable"><![CDATA[UpdateStarted]]></Condition>
+ <Condition Action="default"><![CDATA[UpdateStarted]]></Condition>
+ )
+
+ <Control Id="NotModifiedText" Type="Text"
+ X="20" Y="_YPOS" Width="228" Height="50" Transparent="yes">
+ <Text>Your system has not been modified. To complete the installation later, please run the installer again.</Text>
+ <Condition Action="hide"><![CDATA[UpdateStarted]]></Condition>
+ <Condition Action="show"><![CDATA[NOT UpdateStarted]]></Condition>
+ </Control>
+
+ <Control Id="YesModifiedText" Type="Text"
+ X="20" Y="_YPOS" Width="228" Height="50" Transparent="yes">
+ <Text>The product may be partially installed. Any installed elements will be removed when you exit.</Text>
+ <Condition Action="hide"><![CDATA[NOT UpdateStarted]]></Condition>
+ <Condition Action="show"><![CDATA[UpdateStarted]]></Condition>
+ </Control>
+ INCY(30)
+
+ TEXTCONTROL(FinishText, 25, `Click Finish to exit the install.')
+
+ <Control Id="Image" Type="Bitmap"
+ X="0" Width="DIALOG_WIDTH" PARTIALHEIGHT(168) Text="OracleLogo" />
+ </Dialog>
+')
+
+m4_define(`DIALOG_ADMIN_CANCEL', `
+
+ <Dialog Id="`$1'" Width="280" Height="90"
+ Title="[ProductName] - Installer" NoMinimize="yes">
+
+ SETY(20)
+ TEXTCONTROL(CancelText, 24,
+`Are you sure you want to cancel [ProductName] installation?')
+
+ <Control Id="YesButton" Type="PushButton"
+ X="60" Y="60" Width="66" Height="17" Text="&amp;Yes">
+ <Publish Event="DoAction" Value="CleanUp">
+ <![CDATA[ISSCRIPTRUNNING="1"]]></Publish>
+ <Publish Event="EndDialog" Value="Exit"><![CDATA[1]]></Publish>
+ </Control>
+
+ <Control Id="NoButton" Type="PushButton"
+ X="130" Y="60" Width="66" Height="17"
+ Default="yes" Cancel="yes" Text="&amp;No">
+ <Publish Event="EndDialog" Value="Return">
+ <![CDATA[1]]></Publish>
+ </Control>
+
+ </Dialog>
+')
+
+m4_define(`DIALOG_ADMIN_NOSPACE', `
+ <Dialog Id="`$1'" DIALOGPROP>
+ TOPSTRIPE(44, `Out of Disk Space',
+`The disk does not have enough space for the selected features.')
+ BOTTOMSTRIPE()
+
+ CANCELBUTTON_GENERIC(OK, Default="yes" Cancel="yes",
+ <Publish Event="NewDialog" Value="`$2'">
+ <![CDATA[ACTION <> "ADMIN"]]></Publish>
+ )
+
+ TEXTCONTROL(NoSpaceText, 43,
+`The highlighted volumes (if any) do not have enough disk space for the currently selected features. You can either remove files from the highlighted volumes, or choose to install fewer features, or choose a different destination drive.')
+
+ <Control Id="VolumeCostListControl" Type="VolumeCostList"
+ X="23" Width="310" FULLHEIGHT
+ Sunken="yes" Fixed="yes" Remote="yes">
+ <Text>{120}{70}{70}{70}{70}</Text>
+ </Control>
+ </Dialog>
+')
diff --git a/db/dist/winmsi/environment.in b/db/dist/winmsi/environment.in
new file mode 100644
index 000000000..860954e54
--- /dev/null
+++ b/db/dist/winmsi/environment.in
@@ -0,0 +1,23 @@
+# $Id: environment.in,v 1.5 2005/04/15 19:00:19 philipr Exp $
+# Lists environment variables needed to install particular
+# features in Windows. Feature names must be
+# listed in features.in . The meaning of each line is:
+# if a given FEATURE is selected, add to the environment VARIABLE
+# the given VALUE (relative to the root of the tree).
+# Options may be +first or +last to put it at the beginning or end
+# of the variable. The items are processed in the order given here,
+# so an entry with +first will no longer be first if another line
+# with +first follows it.
+
+# Note: columns below must be separated by tabs.
+
+# feature variable value options
+
+DCoreAPI PATH /bin\\debug +first
+CoreAPI PATH /bin +first
+
+# The debug versions go last, they are preferred if they are installed.
+JavaEx CLASSPATH /jar\\dbexamples.jar +last
+JavaAPI CLASSPATH /jar\\db.jar +last
+DJavaEx CLASSPATH /jar\\debug\\dbexamples.jar +last
+DJavaAPI CLASSPATH /jar\\debug\\db.jar +last
diff --git a/db/dist/winmsi/features.in b/db/dist/winmsi/features.in
new file mode 100644
index 000000000..04ba54c94
--- /dev/null
+++ b/db/dist/winmsi/features.in
@@ -0,0 +1,33 @@
+# $Id: features.in,v 1.5 2005/04/15 19:03:35 philipr Exp $
+# Lists features that can be installed on Windows,
+# and their dependencies.
+
+# Note: columns below must be separated by tabs.
+#
+# Feature: the feature identifier. If it is dependent on another feature,
+# that is specified via Dependent/Featurename
+# Short name: the name as it shows in the installer's tree display
+# Description: the description that shows when the item is selected
+#
+# Options are one or more of:
+# +default: the feature is installed by default
+# +required: the feature cannot be deselected (implies default)
+# +invisible: the feature is not shown to the user (implies required)
+#
+
+# feature short name description options
+
+CoreAPI "Core Features" "C/C++ API and required binaries" +required
+CoreAPI/DCoreAPI "Debug Core Features" ""
+CoreTools "Tools and Utilities" "Compiled tools for DB maintenance" +default
+CoreEx "C/C++ Examples" "C and C++ compiled examples (requires debug libraries to function)" +default
+
+JavaAPI "Java" "Java API JAR and JNI native libraries"
+JavaAPI/JavaEx "Java Examples" "Java examples JAR"
+JavaAPI/DJavaAPI "Debug Java" ""
+JavaAPI/DJavaAPI/DJavaEx "Debug Java Examples" ""
+PerlAPI "Perl" "Perl API .pm and .pod files"
+TclAPI "Tcl" "Tcl API binaries"
+TclAPI/DTclAPI "Debug Tcl" ""
+Docs "Documentation" "Documentation for all products"
+Sources "Source files" "Source files for all products" +default
diff --git a/db/dist/winmsi/files.in b/db/dist/winmsi/files.in
new file mode 100644
index 000000000..82bcbcdd2
--- /dev/null
+++ b/db/dist/winmsi/files.in
@@ -0,0 +1,91 @@
+# $Id: files.in,v 1.10 2006/09/14 15:50:50 mjc Exp $
+# Lists files needed to install particular
+# features in Windows. Feature names must be
+# listed in features.in .
+#
+
+# Note: columns below must be separated by tabs.
+# ${PRODUCT_MAJMIN} is a macro for "43" (for BDB 4.3.x)
+
+# feature source file targdir shortname
+
+CoreAPI build_windows/Release/libdb${PRODUCT_MAJMIN}.dll /bin/
+DCoreAPI build_windows/Debug/libdb${PRODUCT_MAJMIN}d.dll /bin/debug/
+DCoreAPI build_windows/Debug/db_dll.pdb /bin/debug/
+CoreAPI build_windows/Release/libdb${PRODUCT_MAJMIN}.lib /lib/
+DCoreAPI build_windows/Debug/libdb${PRODUCT_MAJMIN}d.lib /lib/
+CoreAPI build_windows/Release/msvcr71.dll /bin/
+DCoreAPI build_windows/Debug/msvcr71d.dll /bin/debug/
+CoreAPI build_windows/Release/msvcp71.dll /bin/
+DCoreAPI build_windows/Debug/msvcp71d.dll /bin/debug/
+
+# After the build process, we create an installed_include directory
+# housing all the needed include files, for user convenience
+CoreAPI installed_include/ /include/
+
+CoreAPI ${PRODUCT_SHARED_WINMSIDIR}/images/webicon.ico /installutil/
+CoreAPI ${PRODUCT_STAGE}/dbvars.bat /
+
+# We don't include the .lib files for Java, nobody needs to
+# link C/C++ against the java library
+JavaAPI build_windows/Release/libdb_java${PRODUCT_MAJMIN}.dll /bin/ dbj${PRODUCT_MAJMIN}.dll
+DJavaAPI build_windows/Debug/libdb_java${PRODUCT_MAJMIN}d.dll /bin/debug/ dbj${PRODUCT_MAJMIN}d.dll
+DJavaAPI build_windows/Debug/db_java.pdb /bin/debug/
+JavaAPI build_windows/Release/db.jar /jar/
+DJavaAPI build_windows/Debug/db.jar /jar/debug/
+
+JavaEx build_windows/Release/dbexamples.jar /jar/ dbexam~1.jar
+DJavaEx build_windows/Debug/dbexamples.jar /jar/debug/ dbexam~1.jar
+
+# We don't include the .lib files for Tcl, nobody needs to
+# link C/C++ against the Tcl library
+DTclAPI build_windows/Debug/libdb_tcl${PRODUCT_MAJMIN}d.dll /bin/debug/ dbt${PRODUCT_MAJMIN}d.dll
+DTclAPI build_windows/Debug/db_tcl.pdb /bin/debug/
+TclAPI build_windows/Release/libdb_tcl${PRODUCT_MAJMIN}.dll /bin/ dbt${PRODUCT_MAJMIN}.dll
+
+PerlAPI perl/BerkeleyDB/blib/ /lib/perl/
+
+CoreTools build_windows/Release/db_archive.exe /bin/ db_arc~1.exe
+CoreTools build_windows/Release/db_checkpoint.exe /bin/ db_che~1.exe
+CoreTools build_windows/Release/db_deadlock.exe /bin/ db_dea~1.exe
+CoreTools build_windows/Release/db_dump.exe /bin/ db_dump.exe
+CoreTools build_windows/Release/db_load.exe /bin/ db_load.exe
+CoreTools build_windows/Release/db_printlog.exe /bin/ db_pri~1.exe
+CoreTools build_windows/Release/db_recover.exe /bin/ db_rec~1.exe
+CoreTools build_windows/Release/db_stat.exe /bin/ db_sta~1.exe
+CoreTools build_windows/Release/db_upgrade.exe /bin/ db_upg~1.exe
+CoreTools build_windows/Release/db_verify.exe /bin/ db_ver~1.exe
+
+CoreEx build_windows/Debug/ex_access.exe /bin/debug/ ex_acc~1.exe
+CoreEx build_windows/Debug/ex_access.pdb /bin/debug/ ex_acc~1.pdb
+CoreEx build_windows/Debug/ex_btrec.exe /bin/debug/ ex_btr~1.exe
+CoreEx build_windows/Debug/ex_btrec.pdb /bin/debug/ ex_btr~1.pdb
+CoreEx build_windows/Debug/ex_env.exe /bin/debug/ ex_env.exe
+CoreEx build_windows/Debug/ex_env.pdb /bin/debug/ ex_env.pdb
+CoreEx build_windows/Debug/ex_lock.exe /bin/debug/ ex_loc~1.exe
+CoreEx build_windows/Debug/ex_lock.pdb /bin/debug/ ex_loc~1.pdb
+CoreEx build_windows/Debug/ex_mpool.pdb /bin/debug/ ex_mpo~1.pdb
+CoreEx build_windows/Debug/ex_mpool.exe /bin/debug/ ex_mpo~1.exe
+CoreEx build_windows/Debug/ex_rep_base.exe /bin/debug/ ex_rep~1.exe
+CoreEx build_windows/Debug/ex_rep_base.pdb /bin/debug/ ex_rep~1.pdb
+CoreEx build_windows/Debug/ex_rep_mgr.exe /bin/debug/ ex_rep~2.exe
+CoreEx build_windows/Debug/ex_rep_mgr.pdb /bin/debug/ ex_rep~2.pdb
+CoreEx build_windows/Debug/ex_tpcb.exe /bin/debug/ ex_tpcb.exe
+CoreEx build_windows/Debug/ex_tpcb.pdb /bin/debug/ ex_tpcb.pdb
+
+CoreEx build_windows/Debug/excxx_access.exe /bin/debug/ excxx_ac.exe
+CoreEx build_windows/Debug/excxx_access.pdb /bin/debug/ excxx_ac.pdb
+CoreEx build_windows/Debug/excxx_btrec.exe /bin/debug/ excxx_bt.exe
+CoreEx build_windows/Debug/excxx_btrec.pdb /bin/debug/ excxx_bt.pdb
+CoreEx build_windows/Debug/excxx_env.exe /bin/debug/ excxx_en.exe
+CoreEx build_windows/Debug/excxx_env.pdb /bin/debug/ excxx_en.pdb
+CoreEx build_windows/Debug/excxx_lock.exe /bin/debug/ excxx_lk.exe
+CoreEx build_windows/Debug/excxx_lock.pdb /bin/debug/ excxx_lk.pdb
+CoreEx build_windows/Debug/excxx_mpool.exe /bin/debug/ excxx_mp.exe
+CoreEx build_windows/Debug/excxx_mpool.pdb /bin/debug/ excxx_mp.pdb
+CoreEx build_windows/Debug/excxx_tpcb.exe /bin/debug/ excxx_tp.exe
+CoreEx build_windows/Debug/excxx_tpcb.pdb /bin/debug/ excxx_tp.pdb
+
+Docs ${PRODUCT_STAGE}/docs/ /docs/
+
+Sources ${PRODUCT_STAGE}/Sources/ /db-${PRODUCT_VERSION}/
diff --git a/db/dist/winmsi/images/caticon.ibd b/db/dist/winmsi/images/caticon.ibd
new file mode 100644
index 000000000..e8b17bff4
--- /dev/null
+++ b/db/dist/winmsi/images/caticon.ibd
Binary files differ
diff --git a/db/dist/winmsi/images/foldernew.ibd b/db/dist/winmsi/images/foldernew.ibd
new file mode 100644
index 000000000..108241368
--- /dev/null
+++ b/db/dist/winmsi/images/foldernew.ibd
Binary files differ
diff --git a/db/dist/winmsi/images/folderup.ibd b/db/dist/winmsi/images/folderup.ibd
new file mode 100644
index 000000000..f1d369697
--- /dev/null
+++ b/db/dist/winmsi/images/folderup.ibd
Binary files differ
diff --git a/db/dist/winmsi/images/oracle.jpg b/db/dist/winmsi/images/oracle.jpg
new file mode 100644
index 000000000..bfa618e00
--- /dev/null
+++ b/db/dist/winmsi/images/oracle.jpg
Binary files differ
diff --git a/db/dist/winmsi/images/topstripe.ibd b/db/dist/winmsi/images/topstripe.ibd
new file mode 100644
index 000000000..be72f9067
--- /dev/null
+++ b/db/dist/winmsi/images/topstripe.ibd
Binary files differ
diff --git a/db/dist/winmsi/images/webicon.ico b/db/dist/winmsi/images/webicon.ico
new file mode 100644
index 000000000..d2b225a2a
--- /dev/null
+++ b/db/dist/winmsi/images/webicon.ico
Binary files differ
diff --git a/db/dist/winmsi/links.in b/db/dist/winmsi/links.in
new file mode 100644
index 000000000..04e021806
--- /dev/null
+++ b/db/dist/winmsi/links.in
@@ -0,0 +1,17 @@
+# $Id: links.in,v 1.6 2006/09/15 06:52:59 mjc Exp $
+# Lists links to Web sites to be installed on Windows.
+# If the URL starts with file: it is assumed to be a local file,
+# relative to the installation directory.
+
+# Note: columns below must be separated by tabs.
+
+# shortname name URL
+
+oraclecp "Command Prompt" "cmd:dbvars.bat"
+oraclewb "Oracle Website" "http://www.oracle.com"
+oracletn "Oracle Technology Network" "http://forums.oracle.com/forums/category.jspa?categoryID=18"
+oraclech "Change Log for Berkeley DB WIX_DB_VERSION" "http://www.sleepycat.com/update/WIX_DB_VERSION/if.WIX_DB_VERSION.html"
+oraclenw "Berkeley DB Newsgroup" "http://groups-beta.google.com/group/comp.databases.berkeley-db"
+oraclesu "Support for Berkeley DB" "https://metalink.oracle.com/"
+oracleon "Online Documentation" "http://dev.sleepycat.com/documentation/bdb.html"
+oracleld "On disk Documentation" "file:docs/index.html"
diff --git a/db/dist/winmsi/s_winmsi.fcn b/db/dist/winmsi/s_winmsi.fcn
new file mode 100644
index 000000000..28a60df2a
--- /dev/null
+++ b/db/dist/winmsi/s_winmsi.fcn
@@ -0,0 +1,1435 @@
+# $Id: s_winmsi.fcn,v 1.12 2006/09/14 15:50:51 mjc Exp $
+#
+# The common functions used by the s_winmsi scripts (both
+# for core DB and DB/XML).
+#
+# This script uses several bash extensions that are convenient
+# since we "know" it will always run under Cygwin: shell functions,
+# 'return', declaration of 'local' variables, $(command) syntax,
+# ${#X} (counting chars), ${X#regexp} (searching) $((expr)) (arithmetic)
+#
+# These functions use 'global' variables:
+# ERRORLOG - a filename
+# PRODUCT_NAME - e.g. "Berkeley DB"
+# PRODUCT_VERSION - e.g. "4.1.25", derived from dist/RELEASE
+# PRODUCT_MAJOR - e.g. "4", (for release 4.1.25) from dist/RELEASE
+# PRODUCT_MINOR - e.g. "1", (for release 4.1.25) from dist/RELEASE
+# PRODUCT_PATCH - e.g. "25", (for release 4.1.25) from dist/RELEASE
+# PRODUCT_MAJMIN - e.g. "41", (for release 4.1.25) from dist/RELEASE
+# PRODUCT_STAGE - the staging directory for temp files and builds
+# PRODUCT_LICENSEDIR - the tree containing LICENSE and README
+# PRODUCT_SUB_BLDDIR - top of the subproduct build e.g. "dbxml-2.0.1/dbxml"
+# PRODUCT_BLDDIR - top of the build tree e.g. "dbxml-2.0.1"
+# PRODUCT_SRCDIR - the dir we unzip to e.g. "dbxml-2.0.1"
+# PRODUCT_DBBUILDDIR - where build_unix dir is for Berkeley DB (for Perl)
+# PRODUCT_SHARED_WINMSIDIR - where the master winmsi directory is
+# PRODUCT_IMAGEDIR - where the images are (usually winmsi/images)
+# PRODUCT_ZIP_FILEFMT - what zip file looks like e.g. "db-X.Y.Z.NC.zip"
+# PRODUCT_MSI_FILEFMT - what msi file looks like e.g. "db-X.Y.Z.NC.msi"
+#
+# Some of these may seem redundant, but there are options to take
+# an already built tree from a different place than where we'll unzip
+# to and take our sources from, for example. This allows a lot of flexibility
+# for development and debugging (especially when these trees can be huge).
+
+# This is the magic tag that creates a new unique GUID in Wix.
+# GUIDs are needed on every <Component ... > entry to ensure
+# that the component can be uninstalled.
+GENGUID='Guid="GUID_CREATE_UNIQUE()"'
+PERSISTGUID='Guid="WIX_DB_PERSISTENT_GUID()"'
+
+# MakeRtf()
+# Standard input is plain text, standard output is RTF.
+#
+MakeRtf() {
+ temp1=/tmp/sbm$$a
+ cat > $temp1
+
+
+# Courier is a good font, but the lines with all caps
+# overflows our current dialog size:
+# {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}
+# \viewkind4\uc1\pard\lang1033\f0\fs16
+#
+# Using Small fonts works:
+# {\rtf1\ansi\deff0{\fonttbl{\f0\fswiss\fprq2\fcharset0 Small Fonts;}}
+# {\colortbl ;\red0\green0\blue0;}
+# \viewkind4\uc1\pard\cf1\lang1033\f0\fs14
+
+# Arial is the best compromise:
+ sed -e 's/^ *//' << 'EndOfRTFHeader'
+ {\rtf1\ansi\deff0{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}
+ {\colortbl ;\red0\green0\blue0;}
+ \viewkind4\uc1\pard\cf1\lang1033\f0\fs16
+EndOfRTFHeader
+
+# Embedded '<' and '>' can cause problems for Wix
+ sed -e 's:$:\\par:' -e 's:<: \\lquote :' -e 's:>: \\rquote :' < $temp1
+ echo -n '}'
+ rm -f $temp1
+}
+
+# NextId()
+# Get the next available unique id, a simple integer counter.
+# We use a file, rather than a shell variable to track the
+# number, because this is called from subshells at various
+# points, and they cannot affect the variables in the parent shell.
+#
+ComponentID=component.id
+NextId()
+{
+ local id=`cat $ComponentID 2>/dev/null`
+ if [ "$id" = '' ]; then
+ id=0
+ fi
+ id=$(($id + 1))
+ echo "$id" > $ComponentID
+ echo "$id"
+}
+
+# CleanFileName(FILENAME)
+# Removes any strange characters in file names,
+# returning the new name on standard output.
+CleanFileName()
+{
+ echo "$1" | sed -e 's/[-%@!]//g'
+}
+
+# GetShortName(FILENAME)
+# Get a Windows short name for the file,
+# to fit into the 8.3 name space.
+# This is not a great algorithm, but it works.
+# The fact is, the names must be unique, but on
+# Win2000 and WinXP, we'll never see them.
+
+ShortID=short.id
+GetShortName()
+{
+ local name=`echo "$1" | tr '[a-z]' '[A-Z]'`
+
+ # See if the name fits into 8.3. If so,
+ # return it right away.
+ #
+ case "$name" in
+ ?????????*.* ) ;;
+ *.????* ) ;;
+ *.*.* ) ;;
+ *[-%@!]* ) ;;
+ *.* ) echo "$name"
+ return
+ ;;
+ * )
+ if [ "${#1}" -le 8 ]; then
+ echo "$name"
+ return
+ fi
+ ;;
+ esac
+
+ # From NAMEISLONG.EXTLONG, build a name
+ # like NAME~ZZZ.EXT, where ZZZ is a unique (hex)
+ # number we build. This is
+
+ local id=`cat $ShortID 2>/dev/null`
+ if [ "$id" = '' ]; then
+ id=0
+ fi
+ id=$(($id + 1))
+ echo "$id" > $ShortID
+ if [ "$id" -ge 4096 ]; then
+ echo "BADBADBAD.TXT" # return something that will give an error
+ Error "ShortId overflow"
+ exit 1
+ fi
+
+ # Convert the id to hex (I ran out of space using decimal)
+ # This is too slow: id=`echo 16 o $id p | dc`
+ id=`printf "%x" $id`
+
+ # Collect and clean up the part of the name before, and after, the dot
+ local before=`CleanFileName "$name" | sed -e 's/^\([^.]*\)[.].*$/\1/'`
+ local after=`CleanFileName "$name" | sed -e 's/^[^.]*[.]\(.*\)$/\1/'`
+
+ # Make sure the before part fits in 5 chars (not 8, since
+ # we need a few for the unique number).
+ if [ "${#before}" -gt 5 ]; then
+ before=`echo "$before" | sed -e 's/^\(.....\).*/\1/'`
+ fi
+ if [ "${#after}" -gt 3 ]; then
+ after=`echo "$after" | sed -e 's/^\(...\).*/\1/'`
+ fi
+ echo "${before}~${id}.${after}"
+}
+
+# Progress([OPTION,]STRING...)
+# Show a major processing step via echo to stdout and to the error log.
+# An OPTION is "-minor", indicating no big banner.
+#
+Progress()
+{
+ if [ "$1" = -minor ]; then
+ shift
+ else
+ echo "" >> $ERRORLOG
+ echo "============================" >> $ERRORLOG
+ fi
+ echo "$@" >> $ERRORLOG
+ echo "$@" >&15
+}
+
+# Error(STRING...)
+# Show an error in a standard way.
+#
+Error()
+{
+ echo "" >> $ERRORLOG
+ echo "****************** FAIL ******************" >> $ERRORLOG
+ echo "ERROR: $@" >> $ERRORLOG
+ echo "ERROR: $@" >&15
+ echo "See $ERRORLOG for details" >&15
+ return 1
+}
+
+# RequireFileInPath(NAME, PATHVAL, FILE)
+# Look for FILE in the path that has value PATHVAL.
+# The path's name is NAME if it needs to be shown.
+#
+RequireFileInPath()
+{
+ local type="$1"
+ local origpath="$2"
+ local file="$3"
+ local upath="$origpath"
+ if [ "$1" != PATH ]; then
+ upath=`cygpath -up "$origpath"`
+ fi
+
+ SAVEIFS="$IFS"
+ IFS=":"
+ found=no
+ for dir in $upath; do
+ if [ -f "$dir/$file" ]; then
+ IFS="$SAVEIFS"
+ return
+ fi
+ done
+ IFS="$SAVEIFS"
+ Error "File $file not found in $type path: $origpath"
+ exit 1
+}
+
+# Rand4X()
+# Return 4 random hex digits on output
+#
+Rand4X() {
+ # The sed command pads the front with 0's as needed
+ (echo 'obase=16'; echo $RANDOM ) | bc |
+ sed -e 's/^/0000/' -e 's/^.*\(....\)$/\1/'
+
+}
+
+# RunM4()
+# Run M4, making appropriate substitutions.
+# This function uses GLOBAL variables: PRODUCT_VERSION (e.g. "4.1.25")
+# and PRODUCT_LICENSEDIR, which is where certain text files are found
+#
+RunM4() {
+
+ # Given a version number, like 2.3.45, we want to
+ # create a 8 character name for the directory like db2_3_45.
+ # This name is under a "Oracle" directory,
+ # so it only needs to be unique within the universe of BDB versions.
+ # TODO: instead of using a version number like $DB_VERSION,
+ # maybe use $DB_VERSION_UNIQUE_NAME which looks like "_2003"
+
+ local DB_8CHAR_VERSION=`echo $PRODUCT_VERSION | sed -e 's/[.]/_/g'`
+ if [ ${#DB_8CHAR_VERSION} -le 6 ]; then
+ DB_8CHAR_VERSION="db$DB_8CHAR_VERSION"
+ elif [ ${#DB_8CHAR_VERSION} -le 7 ]; then
+ DB_8CHAR_VERSION="d$DB_8CHAR_VERSION"
+ else
+ Error "Version number too large for simple version number algorithm"
+ exit 1
+ fi
+
+ # Remove leading ./ from PRODUCT_LICENSEDIR if present.
+ local licensedir=`cygpath -w "$PRODUCT_LICENSEDIR"`
+
+ # Create a GUID prefix of the form: ????????-????-????-????-????
+ # This leaves 8 digits of GUID to be manipulated by m4.
+ local GUID_PREFIX="`Rand4X``Rand4X`-`Rand4X`-`Rand4X`-`Rand4X`-`Rand4X`"
+
+ # -P requires that all m4 macros, like define, eval, etc.
+ # are prefixed, like m4_define, m4_eval, etc. This avoids
+ # various name conflicts with input files.
+ # TODO: rename DB_SRCDIR as DB_LICENSEDIR
+ m4 -P \
+ -DWIX_DB_VERSION="$PRODUCT_VERSION" \
+ -DWIX_DB_8CHAR_VERSION="$DB_8CHAR_VERSION" \
+ -DWIX_DB_GUID_PREFIX="$GUID_PREFIX" \
+ -DWIX_DB_PRODUCT_NAME="$PRODUCT_NAME" \
+ -DWIX_DB_SRCDIR="$licensedir" \
+ -DWIX_DB_TOP="`cygpath -w $PRODUCT_BLDDIR`" \
+ -DWIX_DB_SHARED_WINMSIDIR="$PRODUCT_SHARED_WINMSIDIR" \
+ -DWIX_DB_IMAGEDIR="`cygpath -w $PRODUCT_IMAGEDIR`" \
+ -DWIX_DB_FEATURE_STRUCTURE="m4_include(features.wixinc)" \
+ -DWIX_DB_DIRECTORY_STRUCTURE="m4_include(directory.wixinc)" \
+ -DWIX_DB_LINKS="m4_include(links.wixinc)" \
+ -DWIX_DB_LICENSE_RTF="m4_include(license.rtf)" \
+ -DWIX_DB_ENV_FEATURE_PROPS="m4_include(envprops.wixinc)" \
+ -DWIX_DB_ENV_FEATURE_SET="m4_include(envset.wixinc)" \
+ -DWIX_DB_ENV_FEATURE_SHOW="m4_include(envshow.wixinc)"
+}
+
+# RunTallow(DIR, OPTIONS)
+# Run Tallow, a tool from the WiX distribution
+RunTallow() {
+ local dir="$1"
+ shift
+
+ Id1=`NextId`
+ Id2=`NextId`
+ Id3=`NextId`
+
+ # Tallow is a tool that walks a tree, producing
+ # a WiX directory heirarchy naming the files.
+ # The IDs it produces are not unique (between tallow
+ # runs), so we must make them so here. Thus "directory78"
+ # becomes "MyFeatureName.123.78" where 123 is an id from NextId.
+ # Secondly, instead of using the tallow output as a separately
+ # compiled fragment, we want to include it directly, so
+ # we need to strip out some extraneous XML entries at the top
+ # and bottom of its output.
+ #
+ # Another thing we do is when we see <Directory></Directory>
+ # pairs, we call m4 macros WIX_DB_{BEGIN,END}_SUBDIR because
+ # we need to track the current directory to generate 'persistent'
+ # GUIDs. See the discussion about GUIDs in dbwix.m4 .
+ #
+ # !!! For stripping out the extraneous XML, we rely heavily
+ # !!! on the output format, so this is likely to be fragile
+ # !!! between versions of tallow. Fortunately, it should fail hard.
+ #
+ echo "=============" >> tallow.log
+ echo tallow -nologo -d `cygpath -w "$dir"` "$@" >> tallow.log
+ echo " <!-- TALLOW output begins here -->"
+ tallow -nologo -d `cygpath -w "$dir"` "$@" > tallow.out || exit 1
+ cat tallow.out >> tallow.log
+ echo "-------------" >> tallow.log
+
+ sed -e '1,/<DirectoryRef/d' -e '/<\/DirectoryRef/,$d' \
+ -e "s/Id=\"directory/Id=\"$feature.$Id1./" \
+ -e "s/Id=\"component/Id=\"$feature.$Id2./" \
+ -e "s/Id=\"file/Id=\"$feature.$Id3./" \
+ -e '/^ <Directory/d' \
+ -e '/^ <\/Directory/d' \
+ -e '/<Directory/s/Name=\"\([^"]*\)"/Name="\1" WIX_DB_BEGIN_SUBDIR(\1) /' \
+ -e '/<\/Directory>/s/$/ WIX_DB_END_SUBDIR()/' \
+ -e "/<Component/s/>/ $PERSISTGUID>/" \
+ < tallow.out > tallow.postsed || exit 1
+
+ echo 'WIX_DB_SET_CURFILE()'
+ echo 'WIX_DB_CLEAR_SUBDIR()'
+ cat tallow.postsed
+ echo 'WIX_DB_CLEAR_SUBDIR()'
+
+ cat tallow.postsed >> tallow.log
+ echo " <!-- TALLOW output ends here -->"
+}
+
+# ProcessFeatures(INFILES, INFEATURES, INENV, OUTDIRECTORIES, OUTFEATURES,
+# OUTSET)
+# Use the files.in and features.in files as
+# input to create two output files, one containing a WiX XML
+# fragment showing directories and needed files,
+# and another containing a WiX XML fragment showing
+# the features in a dependency tree.
+#
+# This creates the heart of the installer flexibility.
+#
+ProcessFeatures() {
+ InFiles="infiles.tmp"; CleanInputFile "$1" "$InFiles" 3 4
+ InFeatures="infeatures.tmp"; CleanInputFile "$2" "$InFeatures" 3 4
+ InEnv="inenv.tmp"; CleanInputFile "$3" "$InEnv" 3 4
+ OutDirs="$4"
+ OutFeatures="$5"
+ OutSet="$6"
+
+ rm -f $OutDirs; touch $OutDirs
+ rm -f $OutFeatures; touch $OutFeatures
+
+ # Initialize the feature list.
+ # This will be expanded (per feature) in ProcessOneFeature
+ #
+ XmlLevel=4
+ Xecho "<Publish Property=\"FeatureList\" Value=\"[NULL]\">" >> $OutSet
+ Xecho " <![CDATA[1]]></Publish>" >> $OutSet
+
+ Dirs=`cut -f 3 < $InFiles | sort | uniq`
+ Prevdir="/"
+ ProcessDirTransition "$Prevdir" "/" >> $OutDirs
+
+ for Dir in $Dirs; do
+ ProcessDirTransition "$Prevdir" "$Dir" >> $OutDirs
+ ProcessOneDirectory "$Dir" < $InFiles >> $OutDirs || exit 1
+ Prevdir="$Dir"
+ done
+ ProcessDirTransition "$Prevdir" "/" >> $OutDirs
+
+ cat $InEnv | (
+ read line
+ while [ "$line" != '' ]; do
+ local FeatureName=`echo "$line" | cut -f 1`
+ local EnvVariable=`echo "$line" | cut -f 2`
+ local EnvValue=`echo "$line" | cut -f 3`
+ local EnvOption=`echo "$line" | cut -f 4`
+ ProcessOneEnv "$FeatureName" "$EnvVariable" "$EnvValue" "$EnvOption" "$OutDirs" "$OutSet"
+ read line
+ done
+ return 0
+ ) || Error "Error processing environment" || exit 1
+
+ cat $InFeatures | (
+ read line
+ while [ "$line" != '' ]; do
+ local FeaturePath=`echo "$line" | cut -f 1`
+ local ShortName=`echo "$line" | cut -f 2 | StripDoubleQuotes`
+ local Description=`echo "$line" | cut -f 3 | StripDoubleQuotes`
+ local FeatureOptions=`echo "$line" | cut -f 4 | StripDoubleQuotes`
+ ProcessOneFeature "$FeaturePath" "$ShortName" "$Description" "$FeatureOptions" "$OutDirs" "$OutFeatures" "$OutSet"
+ read line
+ done
+ return 0
+ ) || Error "Error processing features" || exit 1
+
+# (PBR)
+# This test code didn't work. My hope was that I could force INSTALLLEVEL
+# to 4 and this would then enable the debug features.
+# Xecho "<Publish Property=\"INSTALLLEVEL\" Value=\"4\" />" >> $OutSet
+# Xecho "<Publish Event=\"SetInstallLevel\" Value=\"4\" />" >> $OutSet
+
+}
+
+# ProcessLinks(INLINKS, OUTFEATURES)
+# Process the INLINKS file, and produce XML on stdout.
+# Each line of the input file requires the creation
+# of a '.URL' file in the installation, and a Shortcut
+# in the Windows menu to point to that.
+# Also add the components generated to a feature, put in OUTFEATURES.
+#
+# TODO: We ought to have a Features column in the links.in file,
+# otherwise, the local doc link is always installed.
+#
+ProcessLinks() {
+ # Set a var to a carriage return without actually putting one in this file
+ local CR=`echo A | tr A '\015'`
+ local InLinks="infiles.tmp"; CleanInputFile "$1" "$InLinks" 3 4
+ local here_win=`cygpath -w $(pwd)`
+ # TODO: maybe get a real modification time, but not sure why we need it.
+ local MODTIMEHEX="0000000007DCC301DE"
+ XmlLevel=6
+ local OutFeatures="$2"
+
+ Xecho + "<Feature Id=\"LinksFeature\" Title=\"Links\"" >> $OutFeatures
+ Xecho " Description=\"Links\" Display=\"hidden\"" >> $OutFeatures
+ Xecho " Level=\"1\" AllowAdvertise=\"no\"" >> $OutFeatures
+ Xecho " ConfigurableDirectory=\"INSTALLUTIL\"" >> $$OUTFeatures
+ Xecho " Absent=\"disallow\">" >> $OutFeatures
+
+ Xecho "<DirectoryRef Id=\"INSTALLUTIL\">"
+ Xecho " <Directory Id=\"INSTALLURL\" Name=\"url\">"
+ Xecho "WIX_DB_SET_CURDIR(/installutil/url)"
+ cat $InLinks | (
+ read line
+ while [ "$line" != '' ]; do
+ local Shortname=`echo "$line" | cut -f 1 | StripDoubleQuotes`
+ local Name=`echo "$line" | cut -f 2 | StripDoubleQuotes`
+ local Url=`echo "$line" | cut -f 3 | StripDoubleQuotes`
+ read line
+
+ # We register the name .bdbsc extension to get the proper icon
+ local UrlName="$Shortname.bdbsc"
+ local UrlShortName="$Shortname.d1b"
+ local TargetFile="[INSTALLDIR]\\installutil\\url\\$UrlName"
+ local CreateUrlFile=true
+ local CommandShortcut=false
+ local Program=""
+ case "$Url" in
+ file:* ) CreateUrlFile=false
+ TargetFile=`echo $Url | sed -e 's/file://'`
+ TargetFile="[INSTALLDIR]"`cygpath -w $TargetFile`;;
+ cmd:* ) CreateUrlFile=false
+ UrlName="$Shortname.bat"
+ UrlShortName="$Shortname.bat"
+ TargetFile="[INSTALLDIR]\\installutil\\url\\$UrlName"
+ Program=`echo $Url | sed -e 's/cmd://'`
+ CommandShortcut=true;;
+ esac
+
+ Xecho "WIX_DB_SET_CURFILE($Shortname)"
+ Xecho + "<Component Id=\"Links.$Shortname\""
+ Xecho " $PERSISTGUID"
+ Xecho " SharedDllRefCount=\"yes\" Location=\"either\">"
+
+ if $CreateUrlFile; then
+ echo "[Default]$CR" > $UrlName
+ echo "BASEURL=$Url$CR" | RunM4 >> $UrlName || exit 1
+ echo "[InternetShortcut]$CR" >> $UrlName
+ echo "URL=$Url$CR" | RunM4 >> $UrlName || exit 1
+ echo "Modified=$MODTIMEHEX$CR" >> $UrlName
+ # TODO: we could have an Entry for IconFile=oracleweb.ico IconIndex=1?
+ echo ''
+ Xecho "<File Id=\"File.$Shortname\" "
+ Xecho " LongName=\"$UrlName\" Name=\"$UrlShortName\""
+ Xecho " Compressed=\"yes\" DiskId=\"1\""
+ Xecho " src=\"$here_win\\$UrlName\" />"
+ fi
+
+ if $CommandShortcut; then
+ echo "@echo off" > $UrlName
+ echo "set DBROOTDIR=" >> $UrlName
+ echo "for /F \"tokens=3 delims= \" %%A in ('REG QUERY \"HKLM\\SOFTWARE\\Oracle\\$PRODUCT_NAME\\$PRODUCT_VERSION\" /v RootDirectory') do set DBROOTDIR=%%A" >> $UrlName
+ echo "if ERRORLEVEL 2 goto MISSING" >> $UrlName
+ echo "if not defined DBROOTDIR goto MISSING" >> $UrlName
+ echo "set FN=\"%DBROOTDIR%$Program\"" >> $UrlName
+ echo "if not exist %FN% goto NOTFOUND" >> $UrlName
+ echo "cmd /k \"%DBROOTDIR%$Program\"$CR" >> $UrlName
+ echo "goto END" >> $UrlName
+ echo ":NOTFOUND" >> $UrlName
+ echo "echo" >> $UrlName
+ echo "echo Error: The program does not appear to be installed." >> $UrlName
+ echo "echo" >> $UrlName
+ echo "cmd /k" >> $UrlName
+ echo "goto END" >> $UrlName
+ echo ":MISSING" >> $UrlName
+ echo "echo" >> $UrlName
+ echo "echo NOTE:" >> $UrlName
+ echo "echo The $PRODUCT_NAME version could not be determined." >> $UrlName
+ echo "echo If you are running on Windows 2000, make sure the" >> $UrlName
+ echo "echo REG.EXE program is installed from the Tools disk" >> $UrlName
+ echo "echo" >> $UrlName
+ echo "cmd /k" >> $UrlName
+ echo ":END" >> $UrlName
+
+ Xecho "<File Id=\"File.$Shortname\" "
+ Xecho " LongName=\"$UrlName\" Name=\"$UrlShortName\""
+ Xecho " Compressed=\"yes\" DiskId=\"1\""
+ Xecho " src=\"$here_win\\$UrlName\" />"
+
+ Xecho "<Shortcut Id=\"Short.$Shortname\" Directory=\"BerkeleyDbMenu\""
+ Xecho " Name=\"$Shortname\" LongName=\"$Name\""
+ Xecho " WorkingDirectory=\"[INSTALLDIR]\""
+ Xecho " Target='$TargetFile'"
+ Xecho " Show=\"normal\" />"
+ else
+ Xecho "<Shortcut Id=\"Short.$Shortname\" Directory=\"BerkeleyDbMenu\""
+ Xecho " Name=\"$Shortname\" LongName=\"$Name\""
+ Xecho " Target='$TargetFile'"
+ Xecho " Show=\"normal\" />"
+ fi
+
+
+ Xecho - "</Component>"
+
+ Xecho "<ComponentRef Id=\"Links.$Shortname\" />" >> $OutFeatures
+ done
+ return 0
+ ) || Error "Error processing links" || exit 1
+
+ Xecho "</Directory>"
+ Xecho "</DirectoryRef>"
+ Xecho - "</Feature>" >> $OutFeatures
+}
+
+# ProcessOneDirectory(DIRECTORYNAME)
+# Called by ProcessFeatures.
+# Argument is the directory name to process
+# Standard input is cleaned up files.in (dirname is 3rd column)
+# Standard output will be WiX XML Component/File entries
+#
+ProcessOneDirectory()
+{
+ Dir="$1"
+ grep " ${Dir} " | (
+ read line
+ while [ "$line" != '' ]; do
+ local feature=`echo "$line" | cut -f 1`
+ local srcfile=`echo "$line" | cut -f 2`
+ local targetdir=`echo "$line" | cut -f 3`
+ local shortname=`echo "$line" | cut -f 4`
+
+ ProcessOneDirectoryFile "$feature" "$srcfile" "$targetdir" "$shortname" || exit 1
+ read line
+ done
+ return 0
+ ) || Error "Error processing directory $Dir" || exit 1
+}
+
+# ProcessOneDirectoryFile(DIRECTORYNAME)
+# Called by ProcessOneDirectory to process a single file in a directory.
+# Standard output will be a single WiX XML Component/File entries
+#
+ProcessOneDirectoryFile()
+{
+ local feature="$1"
+ local srcfile="$2"
+ local targetdir="$3"
+ local shortname="$4"
+ local base=`basename $srcfile`
+
+ #echo "processing file $srcfile in $feature to directory $targetdir..." >&2
+
+ # Prepend the WIX_DB_TOP unless the source file is absolute
+
+ local root=
+ local checkfile=
+ local wsrcfile=
+
+ case "$srcfile" in
+ /* ) root=""
+ wsrcfile=`cygpath -w $srcfile`
+ checkfile="$srcfile"
+ ;;
+ * ) root="$PRODUCT_BLDDIR/"
+ wsrcfile="WIX_DB_TOP()\\`cygpath -w $srcfile`"
+ checkfile="$PRODUCT_BLDDIR/$srcfile"
+ ;;
+ esac
+
+ # If srcfile ends in / then we'll use tallow to walk the directory
+ case "$srcfile" in
+ */ ) if [ ! -d "$root$srcfile" ]; then
+ Error "$root$srcfile: not a directory"
+ exit 1
+ fi
+ Progress -minor " expanding $root$srcfile..."
+ RunTallow "$root$srcfile"
+ return 0
+ ;;
+ *'*'* )
+ local dirname=`dirname "$root$srcfile"`
+ RunTallow "$dirname" -df "$base"
+ return 0
+ ;;
+ esac
+
+ if [ "$shortname" = '' ]; then
+ shortname=`GetShortName "$base"`
+ fi
+ ID=`NextId`
+
+ if [ ! -r "$checkfile" ]; then
+ Error "$srcfile: file in feature $feature does not exist"
+ Error " curdir=`pwd`, pathname=$checkfile"
+ exit 1
+ fi
+
+ Xecho "WIX_DB_SET_CURFILE(${base})"
+ Xecho + "<Component Id=\"$feature.$ID\" Location=\"either\" $PERSISTGUID>"
+ Xecho "<File Id=\"${feature}.${ID}\" Name=\"${shortname}\" LongName=\"${base}\" Compressed=\"yes\" KeyPath=\"yes\" DiskId=\"1\" src=\"${wsrcfile}\" />"
+ Xecho - "</Component>"
+ return 0
+}
+
+# ProcessOneFeature(FEATUREPATH, SHORTNAME, DESCRIPTION, OPTS, INDIRECTORYFILE,
+# OUTFEATURE, OUTSET)
+# Called by ProcessFeatures to process a line in the features.in file.
+# The first three arguments are the values of the first three columns:
+# the feature dependency path (e.g. "Java/JavaExamples"), the short
+# name, and a descriptive name. The last argument is the directory
+# file that lists the components. We use the last name of the feature
+# path (e.g. JavaExamples) to locate all components (really directories)
+# named accordingly, so they can be listed as needed parts of the Feature.
+# Standard output will be WiX XML Feature entries.
+#
+ProcessOneFeature() {
+ local featurename="$1"
+ local shortname="$2"
+ local opts="$4"
+ local dirfile="$5"
+ local outfeature="$6"
+ local outset="$7"
+
+ XmlLevel=4
+ local featcount=0
+ local featurestring=""
+ if [ $(SlashCount $featurename) -gt 0 ]; then
+ local parent=`echo $featurename | sed -e 's:/[^/]*$::' -e 's:.*/::'`
+ featurename=`echo $featurename | sed -e 's:^.*/::'`
+ featcount=1
+ Xecho "<FeatureRef Id=\"$parent\">" >> $outfeature
+ fi
+
+
+ # TODO: how to get +default to work?
+ # have tried messing with level="0" (doesn't show it)
+ # InstallDefault=\"source\" (doesn't make a difference)
+ #
+ local leveldebug="Level=\"4\""
+ local levelparam="Level=\"1\""
+ local leveldisable="Level=\"0\""
+ local defparam="InstallDefault=\"source\""
+ local displayparam="Display=\"expand\""
+ local params="AllowAdvertise=\"no\""
+ local regfeature=""
+
+ local descparam=""
+ if [ "$3" != '' ]; then
+ descparam="Description=\"$3\""
+ fi
+
+ local opt
+ local reqtext=""
+ local isdebugFeature=false
+ for opt in $opts; do
+ case "$opt" in
+ +default ) ;;
+ +required ) params="$params Absent=\"disallow\""
+ reqtext=" (required)";;
+ +invisible ) displayparam="Display=\"hidden\""
+ params="$params Absent=\"disallow\"";;
+ +debug ) isdebugFeature=true;;
+
+ * ) Error "features.in: Bad option $opt"
+ exit 1;;
+ esac
+ done
+
+
+# (PBR)
+# I tried to get debugging features to work but I could not. The last thing I
+# tried was to set either ADDSOURCE or INSTALLLEVEL. Neither of these solutions
+# will cause the feature conditions to rerun. The only thing I've found to do
+# that is to rerun CostFinalize. The problem with this is it will re-enable all
+# the options again. I'm keeping the basic framework for +debug support
+ if "$isdebugFeature"; then
+ regfeature="${featurename:1}"
+ echo "regfeature = $regfeature"
+
+ Xecho + "<Feature Id=\"$featurename\" Title=\"$shortname$reqtext\" $descparam $params $displayparam $leveldebug $defparam>" >> $outfeature
+ else
+ Xecho + "<Feature Id=\"$featurename\" Title=\"$shortname$reqtext\" $descparam $params $displayparam $levelparam $defparam>" >> $outfeature
+ fi
+
+
+ grep 'Component.*Id="'$featurename'[.0-9]*"' "$dirfile" | sed -e 's/\(Id="[^"]*"\).*/\1 \/>/' -e 's/Component /ComponentRef /' >> $outfeature
+
+ # Create a separate subfeature for any environment variables
+ # associated with the main feature.
+ # The <Condition> stuff is the magic that enables/disables
+ # setting the environment variables depending on the check box property.
+
+ Xecho + "<Feature Id=\"env.$featurename\" Title=\"env vars\" $params Display=\"hidden\" $levelparam $defparam>" >> $outfeature
+
+ Xecho "<Condition $leveldisable><![CDATA[EnvironmentSetCheck<>1]]></Condition>" >> $outfeature
+ Xecho "<Condition $levelparam><![CDATA[EnvironmentSetCheck=1]]></Condition>" >> $outfeature
+ grep 'Component.*Id="env\.'$featurename'[.0-9]*"' "$dirfile" | sed -e 's/\(Id="[^"]*"\).*/\1 \/>/' -e 's/Component /ComponentRef /' >> $outfeature
+
+ Xecho - "</Feature>" >> $outfeature
+ Xecho - "</Feature>" >> $outfeature
+
+ while [ "$featcount" -gt 0 ]; do
+ Xecho - "</FeatureRef>" >> $outfeature
+ featcount=$(($featcount - 1))
+ done
+
+ # Append the name to the feature list if it is to be installed.
+ # This publish fragment gets 'executed' when leaving the
+ # dialog to select features. Note that we have to quote
+ # the comma for m4 (`,') since this appears in a macro usage.
+ #
+
+# (PBR)
+# This code sets ADDSOURCE to show which debug options to include. This does not work
+ # If this is a debug feature, only turn on the value if the parent is on
+ if "$isdebugFeature"; then
+ regfeature="${featurename:1}"
+
+# Xecho "<Publish Property=\"ADDSOURCE\" Value=\"[ADDSOURCE]\`,'\">" >> $outset
+# Xecho " <![CDATA[&${regfeature} = 3 AND DebugCheck=\"yes\" AND ADDSOURCE <> NULL]]></Publish>" >> $outset
+
+# Xecho "<Publish Property=\"ADDSOURCE\" Value=\"[ADDSOURCE]${featurename}\">" >> $outset
+# Xecho " <![CDATA[&${regfeature} = 3 AND DebugCheck=\"yes\"]]></Publish>" >> $outset
+
+ Xecho "<Publish Property=\"FeatureList\" Value=\"[FeatureList]\`,' ${shortname}\">" >> $outset
+ Xecho " <![CDATA[&${regfeature} = 3 AND DebugCheck=\"yes\"]]></Publish>" >> $outset
+
+ else
+ Xecho "<Publish Property=\"FeatureList\" Value=\"[FeatureList]\`,' ${shortname}\">" >> $outset
+ Xecho " <![CDATA[&${featurename} = 3]]></Publish>" >> $outset
+ fi
+}
+
+# ProcessOneEnv(FEATURE, ENVNAME, ENVVALUE, OPTS, OUTDIRS, OUTSET)
+# Called by ProcessFeatures to process a line in the environment.in file.
+# The four arguments are the values of the four columns.
+# The output will be into two files:
+# OUTDIRS: WiX XML Component entries, that contain environment values.
+# This controls the actual setting of the variables.
+# OUTSET: WiX XML to set the installer variables if an env variable
+# is set or a feature selected.
+#
+ProcessOneEnv() {
+ local feature="$1"
+ local envname="$2"
+ local envvalue="$3"
+ local opts="$4"
+ local outdirs="$5"
+ local outset="$6"
+
+ # Make the path uniform.
+ # echo "c:\Program Files\...\/Lib/Hello" | sed -e 's:\\/:\\:' -e 's:/:\\:g`
+ # This produces c:\Program Files\...\Lib\Hello
+ case "$envvalue" in
+ /* ) envvalue=`echo "$envvalue" | sed -e 's:^/::'`
+ esac
+
+ local path="[INSTALLDIR]$envvalue"
+
+ local opt
+ part="last"
+ for opt in $opts; do
+ case "$opt" in
+ +first ) part="first";;
+ +last ) part="last";;
+ * ) Error "environment.in: Bad option $opt"
+ exit 1;;
+ esac
+ done
+
+ # Generate the OUTDIRS fragment
+ # This looks like:
+ #
+ # <Component Id="env.CoreAPI.43" Guid="4B75755F-1129-292C-3434-238410000247">
+ # <Environment Id="env.44" Name="+-LIB" Action="set"
+ # Permanent="no" Part="first" Value="[INSTALLDIR]Lib" />
+ # </Component>
+ #
+ # Having a unique guid makes uninstall work.
+ # Note: We really want these installed as System rather than
+ # User vars (using the System="yes" tag), but only if user
+ # installs for *all* users. There is no convenient way to
+ # do that, so we leave them as default (User variables).
+
+
+ XmlLevel=4
+ local Id=`NextId`
+ Xecho "WIX_DB_SET_CURFILE(${envname})" >> $outdirs
+ Xecho + "<Component Id=\"env.$feature.$Id\" $PERSISTGUID>" >> $outdirs
+ Id=`NextId`
+
+ Xecho "<Environment Id=\"env.$Id\" Name=\"+-$envname\" Action=\"set\"" >> $outdirs
+ Xecho " Permanent=\"no\" Part=\"$part\" Value=\"$path\" />" >> $outdirs
+
+ Xecho "</Component>" >> $outdirs
+
+ # Generate the OUTSET fragment
+ # This looks like:
+ #
+ # <Publish Property="CLASSPATHValue" Value="[INSTALLDIR]Lib/db.jar;[CLASSPATHValue]">
+ # <![CDATA[&JavaAPI = 3]]></Publish>
+ # <Publish Property="CLASSPATHEscValue" Value="[INSTALLDIR]Lib/db.jar;[CLASSPATHEscValue]">
+ # <![CDATA[&JavaAPI = 3]]></Publish>
+ #
+ # This is equivalent to pseudocode:
+ # if (InstallFeature(JavaAPI)) {
+ # Prepend CLASSPATHValue with "Lib/db.jar;"
+ # Prepend CLASSPATHEscValue with "Lib/db.jar;"
+ # }
+ #
+ XmlLevel=4
+ Xecho "<Publish Property=\"${envname}Value\" Value=\"[INSTALLDIR]${envvalue};[${envname}Value]\">" >> $outset
+ Xecho " <![CDATA[&${feature} = 3]]></Publish>" >> $outset
+
+ Xecho "<Publish Property=\"${envname}EscValue\" Value=\"[INSTALLDIR]${envvalue};[${envname}EscValue]\">" >> $outset
+ Xecho " <![CDATA[&${feature} = 3]]></Publish>" >> $outset
+
+
+}
+
+# CreateProperty(ID, VALUE)
+# Generate a <Property...> tag on the stdout
+CreateProperty() {
+ Xecho "<Property Id=\"$1\" Hidden=\"yes\"><![CDATA[$2]]></Property>"
+}
+
+# ProcessTagProperties(OUTPROPS)
+# Generate some identification tags as properties.
+# This will let us look at an installer and figure out
+# when it was built, etc.
+ProcessTagProperties() {
+ local outprops="$1"
+ local insdate=`date`
+ XmlLevel=4
+
+ CreateProperty _DB_MSI_INSTALLER_DATE "$insdate" >> $outprops
+ CreateProperty _DB_MSI_PRODUCT_NAME "$PRODUCT_NAME" >> $outprops
+ CreateProperty _DB_MSI_PRODUCT_VERSION "$PRODUCT_VERSION" >> $outprops
+ CreateProperty ARPCOMMENTS "Installer for $PRODUCT_NAME $PRODUCT_VERSION built on $insdate" >> $outprops
+}
+
+# ProcessEnv(INENVFILE, INBATFILE, OUTPROPS, OUTSET, OUTSHOW)
+# We generate some Property magic to show the user what is set.
+#
+ProcessEnv() {
+ InEnv="inenv.tmp"; CleanInputFile "$1" "$InEnv" 3 4
+ inbat="$2"
+ outprops="$3"
+ outset="$4"
+ outshow="$5"
+
+ # Get a list of the environment variables
+ local envvar
+ local envvars=`cut -f 2 < $InEnv | sort | uniq`
+
+ # For each environment var, create lines that declare
+ # a pair of properties in the envprops.wixinc file like:
+ #
+ # <Property Id="CLASSPATHValue" Hidden="yes"></Property>
+ # <Property Id="CLASSPATHEscValue" Hidden="yes"></Property>
+ #
+ # And create lines in the envset.wixinc file like:
+ #
+ # <Publish Property="CLASSPATHValue" Value="%CLASSPATH%">
+ # <![CDATA[1]]></Publish>
+ # <Publish Property="CLASSPATHEscValue" Value="\\%CLASSPATH\\%">
+ # <![CDATA[1]]></Publish>
+ #
+ # More will be added to that file later.
+ # Then, create lines in the envshow.wixinc file like:
+ #
+ # <Control Id="CLASSPATHText" Type="Text"
+ # X="23" Width="316" PARTIALHEIGHT(10, 2)
+ # TabSkip="no" Text="CLASSPATH:" />
+ #
+ # <Control Id="CLASSPATHValueText" Type="Text"
+ # X="37" Width="316" PARTIALHEIGHT(20, 7)
+ # TabSkip="no" Text="[CLASSPATHValue]" />
+
+ for envvar in $envvars; do
+ XmlLevel=4
+ CreateProperty "${envvar}Value" "" >> $outprops
+ CreateProperty "${envvar}EscValue" "" >> $outprops
+
+ XmlLevel=4
+ Xecho "<Publish Property=\"${envvar}Value\" Value=\"%${envvar}%\">" >> $outset
+ Xecho " <![CDATA[1]]></Publish>" >> $outset
+ Xecho "<Publish Property=\"${envvar}EscValue\" Value=\"\\%${envvar}\\%\">" >> $outset
+ Xecho " <![CDATA[1]]></Publish>" >> $outset
+
+ XmlLevel=4
+ Xecho "<Control Id=\"${envvar}Text\" Type=\"Text\"" >> $outshow
+ Xecho " X=\"23\" Width=\"316\" PARTIALHEIGHT(10, 2)" >> $outshow
+ Xecho " TabSkip=\"no\" Text=\"${envvar}:\" />" >> $outshow
+
+ Xecho "<Control Id=\"${envvar}ValueText\" Type=\"Text\"" >> $outshow
+ Xecho " X=\"37\" Width=\"316\" PARTIALHEIGHT(20, 7)" >> $outshow
+ Xecho " TabSkip=\"no\" Text=\"[${envvar}Value]\" />" >> $outshow
+
+ done
+
+ # Create the dbvars.bat file from the .bat template file
+ # TODO: the bat template file currently knows the variables
+ # and their values, it should get them from the environment.in
+
+ RunM4 <"$inbat" >"$PRODUCT_STAGE/dbvars.bat" || Error "m4 failed" || exit 1
+}
+
+
+# CleanInputFile(INFILENAME, OUTFILENAME, MINELEMENTS, MAXELEMENTS)
+# A filter to preprocess and validate input files.
+# We end up without comment lines, a single tab between elements,
+# and a trailing tab.
+# Also some selected shell variables are expanded for convenience.
+# We verify that each line has the number of elements that fall within
+# the given min and max.
+#
+CleanInputFile() {
+ sed \
+ -e 's/#.*//' \
+ -e 's/ * / /g' \
+ -e 's/ */ /g' \
+ -e '/^[ ]*$/d' \
+ -e 's/$/ /' \
+ -e 's/ */ /g' \
+ -e 's:\${PRODUCT_VERSION}:'"${PRODUCT_VERSION}":g \
+ -e 's:\${PRODUCT_MAJOR}:'"${PRODUCT_MAJOR}":g \
+ -e 's:\${PRODUCT_MINOR}:'"${PRODUCT_MINOR}":g \
+ -e 's:\${PRODUCT_PATCH}:'"${PRODUCT_PATCH}":g \
+ -e 's:\${PRODUCT_MAJMIN}:'"${PRODUCT_MAJMIN}":g \
+ -e 's:\${PRODUCT_STAGE}:'"${PRODUCT_STAGE}":g \
+ -e 's:\${PRODUCT_SHARED_WINMSIDIR}:'"${PRODUCT_SHARED_WINMSIDIR}":g \
+ -e 's/^[ \t]*$//' \
+ < "$1" > "$2"
+
+ # count tabs on each line
+ sed -e 's/[^\t]//g' -e 's/[\t]/x/g' < "$2" | (
+ read line
+ linecount=1
+ while [ "$line" != '' ]; do
+ chars=`echo "$line" | wc -c`
+ chars=$(($chars - 1)) # Remove newline
+ if [ "$chars" -lt "$3" -o "$chars" -gt "$4" ]; then
+ Error "$1: Input file error on or after line $linecount"
+ fi
+ read line
+ linecount=$(($linecount + 1))
+ done
+ )
+}
+
+# StripDoubleQuotes()
+# In some input files, we allow double quotes around
+# multi-word strings for readability. We strip them
+# here from standard input and write to standard output.
+# We only expect them at the beginning and end.
+#
+StripDoubleQuotes() {
+ sed -e 's/^"//' -e 's/"$//'
+}
+
+# IndentXml(PLUSMINUS_ARG)
+# A global variable $XmlLevel is kept for the indent level.
+# Every call creates blank output that matches the indent level.
+# In addition, with a '-' argument, the indent level
+# decrements by one before printing.
+# With a '+', the indent level increments after printing.
+# This is generally just used by Xecho
+#
+XmlLevel=0
+IndentXml() {
+ if [ "$1" = '-' -a $XmlLevel != 0 ]; then
+ XmlLevel=$(($XmlLevel - 1))
+ fi
+ local idx=0
+ while [ "$idx" != "$XmlLevel" ]; do
+ echo -n ' '
+ idx=$(($idx + 1))
+ done
+ if [ "$1" = '+' ]; then
+ XmlLevel=$(($XmlLevel + 1))
+ fi
+}
+
+# Xecho [ - | + ] ...
+# echoes arguments (like) echo, except that the output
+# is indented for XML first. If +, the indentation changes
+# after printing, if -, the indentation changes before printing.
+#
+Xecho()
+{
+ local xarg=
+ if [ "$1" = '-' -o "$1" = '+' ]; then
+ xarg="$1"
+ shift
+ fi
+ IndentXml $xarg
+ echo "$@"
+}
+
+# SlashCount(PATH)
+# Returns the number of slashes in its argument
+# Note, we are relying on some advanced
+# features of bash shell substitution
+#
+SlashCount()
+{
+ local allslash=`echo "$1" | sed -e 's:[^/]*::g'`
+ echo "${#allslash}"
+}
+
+# ProcessDirTransition(PREVDIR, NEXTDIR)
+# Used by ProcessFeatures to create the parts
+# of an WiX <Directory> heirarchy (on stdout) needed to
+# transition from directory PREVDIR to NEXTDIR.
+# This may include any needed </Directory> entries as well.
+# For example, ProcessDirTransition /Bin/Stuff /Bin/Foo/Bar
+# produces:
+# </Directory> ...to go up one from 'Stuff'
+# <Directory Foo>
+# <Directory Bar>
+#
+ProcessDirTransition() {
+ local p="$1"
+ local n="$2"
+ if [ "$p" = '' ]; then p=/; fi
+ if [ "$n" = '' ]; then n=/; fi
+ local nextdir="$2"
+
+ # The number of slashes in $p is the current directory level.
+ XmlLevel=$(($(SlashCount $p) + 4))
+
+ while [ "$p" != / ]; do
+ if [ "${n#${p}}" != "$n" ]; then
+ break
+ fi
+
+ # go up one level, and keep $p terminated with a /
+ p=`dirname $p`
+ case "$p" in
+ */ ) ;;
+ * ) p=$p/;;
+ esac
+ Xecho - "</Directory>"
+ done
+ n=${n#${p}}
+ while [ "$n" != '' ]; do
+ local dirname=`echo $n | sed -e 's:/.*::'`
+ local cleanname=`CleanFileName "$dirname"`
+ local shortname=`GetShortName "$cleanname"`
+ local dirid=`NextId`
+
+ local larg=""
+ if [ "${shortname}" != "${dirname}" ]; then
+ larg="LongName=\"${dirname}\""
+ fi
+ Xecho + "<Directory Id=\"${cleanname}Dir.$dirid\" Name=\"${shortname}\" $larg>"
+
+ n=`echo $n | sed -e 's:^[^/]*/::'`
+ done
+
+ Xecho "WIX_DB_SET_CURDIR($nextdir)" # Tell the m4 macro what the current dir is
+}
+
+# SetupErrorLog()
+# Given the global variable ERRORLOG for the name of the
+# error output file, do any setup required to make that happen.
+#
+SetupErrorLog() {
+
+ # Before we start to use ERRORLOG, we get a full pathname,
+ # since the caller may change directories at times.
+ case "$ERRORLOG" in
+ /* ) ;;
+ *) ERRORLOG=`pwd`"/$ERRORLOG" ;;
+ esac
+
+ rm -f $ERRORLOG
+
+ # File descriptor tricks.
+ # Duplicate current stderr to 15, as we'll occasionally
+ # need to report progress to it. Then, redirect all
+ # stderr from now on to the ERRORLOG.
+ #
+ exec 15>&2
+ exec 2>>$ERRORLOG
+}
+
+# RequireCygwin
+# Cygwin does not install certain needed components by default.
+# Check to make sure that everything needed by the script
+# and functions is here.
+#
+RequireCygwin() {
+ Progress -minor "checking for Cygwin..."
+ RequireFileInPath PATH "$PATH" m4
+ RequireFileInPath PATH "$PATH" gcc
+ RequireFileInPath PATH "$PATH" make
+ RequireFileInPath PATH "$PATH" unzip
+ RequireFileInPath PATH "$PATH" bc
+ RequireFileInPath PATH "$PATH" openssl # needed for MD5 hashing
+}
+
+# RequireJava()
+# A java SDK (with include files) must be installed
+#
+RequireJava() {
+ Progress -minor "checking for Java..."
+ RequireFileInPath INCLUDE "$INCLUDE" jni.h
+ RequireFileInPath INCLUDE "$INCLUDE" jni_md.h
+ RequireFileInPath PATH "$PATH" jar.exe
+ RequireFileInPath PATH "$PATH" javac.exe
+}
+
+# RequireTcl()
+# A Tcl SDK (with compatible .lib files) must be installed
+#
+RequireTcl() {
+ Progress -minor "checking for Tcl..."
+ RequireFileInPath INCLUDE "$INCLUDE" tcl.h
+ RequireFileInPath LIB "$LIB" tcl84g.lib
+ RequireFileInPath LIB "$LIB" tcl84.lib
+}
+
+# RequireWix()
+# WiX must be installed
+#
+RequireWix() {
+ Progress -minor "checking for WiX..."
+ RequireFileInPath PATH "$PATH" candle.exe
+ RequireFileInPath PATH "$PATH" light.exe
+ RequireFileInPath PATH "$PATH" tallow.exe
+}
+
+# RequirePerl()
+# Perl must be installed
+#
+RequirePerl() {
+ Progress -minor "checking for Perl..."
+ RequireFileInPath PATH "$PATH" perl.exe
+}
+
+# RequirePython()
+# Python (and include files) must be installed
+#
+RequirePython() {
+ Progress -minor "checking for Python..."
+ RequireFileInPath INCLUDE "$INCLUDE" Python.h
+ RequireFileInPath PATH "$PATH" python.exe
+}
+
+# CreateDbPerl()
+# Build Perl interface (for Berkeley DB only).
+#
+CreateDbPerl() {
+
+ # First build Berkeley DB using cygwin, as that version is
+ # needed for the Perl build
+ local here=`pwd`
+ Progress "building using Cygwin tools (needed for perl)"
+ cd "${PRODUCT_DBBUILDDIR}"
+ insdir="${PRODUCT_STAGE}/install_unix"
+ ../dist/configure --prefix="$insdir" >>$ERRORLOG || exit 1
+ make install >>$ERRORLOG || exit 1
+
+ Progress "building perl"
+ cd ../perl/BerkeleyDB
+ BERKELEYDB_INCLUDE="$insdir/installed_include" BERKELEYDB_LIB="$insdir/lib" \
+ perl Makefile.PL >>$ERRORLOG || exit 1
+ make >>$ERRORLOG
+ cd $here
+}
+
+# CreateWindowsSystem()
+# Copy Window system files
+#
+CreateWindowsSystem() {
+ local here=`pwd`
+ Progress "Copy Window system files..."
+ cd "${PRODUCT_SUB_BLDDIR}"
+ cp -f $SYSTEMROOT/system32/msvcr71.dll build_windows/Release/ || exit 1
+ cp -f $SYSTEMROOT/system32/msvcp71.dll build_windows/Release/ || exit 1
+ cp -f $SYSTEMROOT/system32/msvcr71d.dll build_windows/Debug/ || exit 1
+ cp -f $SYSTEMROOT/system32/msvcp71d.dll build_windows/Debug/ || exit 1
+ cd $here
+}
+
+# CreateInclude(DIR, FILES)
+# Create an include directory populated with the files given
+#
+CreateInclude() {
+
+ local incdir="$1"
+ shift
+
+ Progress "creating the "$incdir" directory..."
+ rm -rf "$incdir"
+ mkdir "$incdir" || exit 1
+ cp -r "$@" "$incdir"
+}
+
+# CreateWindowsBuild()
+# Do the windows build as defined by the winbuild.bat file
+#
+CreateWindowsBuild() {
+ local here=`pwd`
+ Progress "building using Windows tools..."
+ cd "${PRODUCT_SUB_BLDDIR}" || exit 1
+
+ # Before starting, copy any installer tools here.
+ # This makes building these tools straightforward
+ # and the results are left in the build directory.
+ #
+ cp -r ${PRODUCT_SHARED_WINMSIDIR}/instenv .
+
+ # We create a wbuild.bat file, which is essentially
+ # identical, except it has the carriage returns added.
+ # This allows us to use our favorite editors on winbuild.bat .
+ #
+ sed -e 's/$//' < ${PRODUCT_STAGE}/../winbuild.bat | tr '\001' '\015' > wbuild.bat
+ # TODO: Needed?
+ rm -f build_windows/Berkeley_DB.sln
+ rm -f winbld.out winbld.err
+ touch winbld.out winbld.err
+ echo "Build output and errors are collected in" >> $ERRORLOG
+ echo " winbld.{out,err} until the build has completed." >> $ERRORLOG
+ cmd.exe /x /c call wbuild.bat
+ status=$?
+ cat winbld.out >> $ERRORLOG
+ if [ -s winbld.err -o "$status" != 0 ]; then
+ cat winbld.err >> $ERRORLOG
+ Error "Errors during windows build"
+ exit 1
+ fi
+ cd $here
+}
+
+# CreateSources(SOURCESDIR,DOCDIR...)
+# Create the sources directory, ignoring things in the docdirs
+#
+CreateSources() {
+ local sources="$1"
+
+ Progress "creating the Sources directory in $sources..."
+ rm -rf "$sources"
+ cp -r ${PRODUCT_SRCDIR} "$sources" || exit 1
+}
+
+# Usage()
+# Show the usage for this script.
+#
+Usage()
+{
+ echo "Usage: s_winmsi [ options ]" >&2
+ echo "Options: " >&2
+ echo " -input file use file rather than ${PRODUCT_ZIP_FILEFMT}" >&2
+ echo " where X.Y.Z is defined by ../RELEASE" >&2
+ echo " -output file use file rather than ${PRODUCT_MSI_FILEFMT}" >&2
+ echo " where X.Y.Z is defined by ../RELEASE" >&2
+ echo " -usebuild DIR use DIR for exes, DLLs, etc. " >&2
+ echo " rather than building from scratch" >&2
+ echo " -preserve preserve the winmsi/msi_staging directory" >&2
+ echo " -skipgen skip generating m4 include files" >&2
+}
+
+# SetupOptions()
+# Parse command line options and set global variables as indicated below.
+#
+SetupOptions() {
+ OPT_USEBUILD=
+ OPT_PRESERVE=false
+ OPT_INFILE=
+ OPT_OUTFILE=
+ OPT_SKIPGEN=false
+ while [ "$#" -gt 0 ]; do
+ arg="$1"; shift
+ case "$arg" in
+ -usebuild ) OPT_USEBUILD="$1"; shift ;;
+ -skipgen ) OPT_SKIPGEN=true ;;
+ -preserve ) OPT_PRESERVE=true;;
+ -input ) OPT_INFILE="$1"; shift ;;
+ -output ) OPT_OUTFILE="$1"; shift ;;
+ * )
+ echo "ERROR: Unknown argument '$arg' to s_winmsi" >&2
+ Usage
+ exit 1
+ ;;
+ esac
+ done
+ if [ "$OPT_INFILE" = '' -o ! -f "$OPT_INFILE" ]; then
+ echo "$OPT_INFILE: not found"
+ exit 1
+ fi
+}
+
+# CreateStage()
+# Create the staging area
+#
+CreateStage() {
+ Progress "creating staging area..."
+ if [ "$PRODUCT_STAGE" = '' ]; then
+ Error "PRODUCT_STAGE not set"
+ exit 1
+ fi
+ if ! $OPT_PRESERVE; then
+ trap 'rm -rf ${PRODUCT_STAGE} ; exit 0' 0 1 2 3 13 15
+ fi
+ rm -rf ${PRODUCT_STAGE} || exit 1
+ mkdir ${PRODUCT_STAGE} || exit 1
+
+ cd ${PRODUCT_STAGE}
+
+ Progress "extracting $OPT_INFILE..."
+ unzip -q ../../$OPT_INFILE || exit 1
+
+ if [ ! -d $PRODUCT_LICENSEDIR ]; then
+ Error "$OPT_INFILE: no top level $PRODUCT_LICENSEDIR directory"
+ exit 1
+ fi
+}
+
+# CreateLicenseRtf(LICENSEIN, LICENSERTF)
+# From a text LICENSE file, create the equivalent in .rtf format.
+#
+CreateLicenseRtf() {
+ local licensein="$1"
+ local licensertf="$2"
+
+ if [ ! -f "$licensein" ]; then
+ Error "License file $licensein: does not exist"
+ exit 1
+ fi
+ Progress "creating ${licensertf}..."
+
+ # Build a list of references to components ids (i.e. directories)
+ # that are listed in the .wxs file. This is needed to refer to
+ # all of the source (sadly it appears there is no better way!)
+ #
+ if ! grep '^=-=-=-=' $licensein > /dev/null; then
+ Error "LICENSE has changed format, this script must be adapted"
+ exit 1
+ fi
+
+ sed -e '1,/^=-=-=-=-=/d' < $licensein | MakeRtf > $licensertf
+}
+
+
+# CreateMsi(INFILE,WXSFILE,MSIFILE)
+# Do the final creation of the output .MSI file.
+# It is assumed that all *.wixinc files are now in place.
+# INFILE is an absolute name of the m4 input WiX file.
+# WXSFILE is a short (basename) of the postprocessed WiX file,
+# after macro expansion, it will be left in staging directory.
+# MSIFILE is a short (basename) of the output .MSI name
+#
+CreateMsi() {
+ local infile="$1"
+ local wxs="$2"
+ local msifile="$3"
+ local o=`echo "$wxs" | sed -e 's/[.]wxs$//' -e 's/$/.wixobj/'`
+
+ rm -f $o $wxs
+
+ # Preprocess the ${PROD}wix.in file, adding the things we need
+ #
+ Progress "Running m4 to create $wxs..."
+ RunM4 < "$infile" > "$PRODUCT_STAGE/$wxs" || Error "m4 failed" || exit 1
+
+ local here=`pwd`
+ cd "$PRODUCT_STAGE"
+ rm -f "$o" "$msifile"
+ Progress "compiling $wxs..."
+ candle -w0 $wxs >> $ERRORLOG || Error "candle (compiler) failed" || exit 1
+
+ Progress "linking .msi file..."
+ light -o "$msifile" $o >> $ERRORLOG || Error "light (linker) failed" || exit 1
+ (rm -f "../../$msifile" && mv "$msifile" ../..) >> $ERRORLOG || exit 1
+ cd $here
+}
+
+# CreateWixIncludeFiles()
+# Do all processing of input files to produce
+# the include files that we need to process the Wix input file.
+#
+CreateWixIncludeFiles() {
+ local here=`pwd`
+ cd "$PRODUCT_STAGE"
+ # Touch all the wix include files in case any end up empty.
+ touch directory.wixinc features.wixinc envprops.wixinc \
+ envset.wixinc envshow.wixinc links.wixinc
+
+ Progress "tagging the installer..."
+ ProcessTagProperties envprops.wixinc
+
+ Progress "processing environment..."
+ ProcessEnv ../environment.in ../dbvarsbat.in envprops.wixinc envset.wixinc envshow.wixinc
+
+ Progress "processing features and files..."
+ ProcessFeatures ../files.in ../features.in ../environment.in \
+ directory.wixinc features.wixinc \
+ envset.wixinc
+
+ Progress "processing links..."
+ ProcessLinks ../links.in features.wixinc > links.wixinc
+ cd $here
+}
diff --git a/db/dist/winmsi/winbuild.bat b/db/dist/winmsi/winbuild.bat
new file mode 100644
index 000000000..3783944d8
--- /dev/null
+++ b/db/dist/winmsi/winbuild.bat
@@ -0,0 +1,113 @@
+@echo off
+:: $Id: winbuild.bat,v 1.6 2005/12/01 03:04:21 bostic Exp $
+:: Helper script to build Berkeley DB libraries and executables
+:: using MSDEV
+::
+
+cd build_windows
+
+:: One of these calls should find the desired batch file
+
+call :TryBat "c:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat" && goto BATFOUND1
+
+call :TryBat "c:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\vsvars32.bat" && goto BATFOUND2
+
+call :TryBat "c:\Program Files\Microsoft Visual Studio.NET\Common7\Tools\vsvars32.bat" && goto BATFOUND3
+
+goto BATNOTFOUND
+
+:BATFOUND1
+echo Using Visual Studio .NET 2003
+goto BATFOUND
+
+:BATFOUND2
+echo Using Visual Studio .NET
+echo *********** CHECK: Make sure the binaries are built with the same system libraries that are shipped.
+goto BATFOUND
+
+:BATFOUND3
+echo Using Visual Studio.NET
+echo *********** CHECK: Make sure the binaries are built with the same system libraries that are shipped.
+goto BATFOUND
+
+:BATFOUND
+:CONVERSION
+start /wait devenv /useenv Berkeley_DB.dsw
+
+:: For some reason, the command doesn't wait, at least on XP.
+:: So we ask for input to continue.
+
+
+echo.
+echo ============================================================
+echo.
+echo Converting the Berkeley DB Workspace to a .NET Solution.
+echo This will run the IDE to interactively convert.
+echo.
+echo When prompted during the conversion, say: Yes-to-All.
+echo When finished with the conversion, do a Save-All and Exit.
+echo Then hit ENTER to continue this script.
+echo.
+echo ============================================================
+set result=y
+set /P result="Continue? [y] "
+if %result% == n goto NSTOP
+
+if exist Berkeley_DB.sln goto ENDCONVERSION
+echo ************* Berkeley_DB.sln was not created ***********
+echo Trying the conversion again...
+goto CONVERSION
+:ENDCONVERSION
+
+::intenv is used to set environment variables but this isn't used anymore
+::devenv /useenv /build Release /project instenv ..\instenv\instenv.sln >> ..\winbld.out 2>&1
+::if not %errorlevel% == 0 goto ERROR
+
+echo Building Berkeley DB
+devenv /useenv /build Debug /project build_all Berkeley_DB.sln >> ..\winbld.out 2>&1
+if not %errorlevel% == 0 goto ERROR
+devenv /useenv /build Release /project build_all Berkeley_DB.sln >> ..\winbld.out 2>&1
+if not %errorlevel% == 0 goto ERROR
+devenv /useenv /build Debug /project db_java Berkeley_DB.sln >> ..\winbld.out 2>&1
+if not %errorlevel% == 0 goto ERROR
+devenv /useenv /build Release /project db_java Berkeley_DB.sln >> ..\winbld.out 2>&1
+if not %errorlevel% == 0 goto ERROR
+devenv /useenv /build Debug /project db_tcl Berkeley_DB.sln >> ..\winbld.out 2>&1
+if not %errorlevel% == 0 goto ERROR
+devenv /useenv /build Release /project db_tcl Berkeley_DB.sln >> ..\winbld.out 2>&1
+if not %errorlevel% == 0 goto ERROR
+
+
+goto END
+
+
+:ERROR
+echo *********** ERROR: during win_build.bat *************
+echo *********** ERROR: during win_build.bat ************* >> ..\winbld.err
+exit 1
+goto END
+
+:NSTOP
+echo *********** ERROR: win_build.bat stop requested *************
+echo *********** ERROR: win_built.bat stop requested ************* >> ..\winbld.err
+exit 2
+goto END
+
+:BATNOTFOUND
+echo *********** ERROR: VC Config batch file not found *************
+echo *********** ERROR: VC Config batch file not found ************* >> ..\winbld.err
+exit 3
+goto END
+
+:: TryBat(BATPATH)
+:: If the BATPATH exists, use it and return 0,
+:: otherwise, return 1.
+
+:TryBat
+:: Filename = %1
+if not exist %1 exit /b 1
+call %1
+exit /b 0
+goto :EOF
+
+:END
diff --git a/db/docs/api_c/api_core.html b/db/docs/api_c/api_core.html
index 7b5d52380..a9049d318 100644
--- a/db/docs/api_c/api_core.html
+++ b/db/docs/api_c/api_core.html
@@ -1,33 +1,32 @@
<!--DO NOT EDIT: automatically built by build script.-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Berkeley DB: C Handle Methods (version 4.3.27)</title>
+<title>Berkeley DB: Berkeley DB: C Handle Methods (version 4.5.20)</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h3 align=center>Berkeley DB: C Handle Methods (version 4.3.27)</h3>
+<h3 align=center>Berkeley DB: C Handle Methods (version 4.5.20)</h3>
<table border=1 align=center>
<tr><th>C Handle Methods</th><th>Description</th></tr>
<!--Db::--><tr><td><a href="../api_c/db_class.html">db_create</a></td><td>Create a database handle</td></tr>
<!--Db::associate--><tr><td><a href="../api_c/db_associate.html">DB-&gt;associate</a></td><td>Associate a secondary index</td></tr>
<!--Db::close--><tr><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
-<!--Db::cursor--><tr><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Create a cursor</td></tr>
-<!--Db::cursor--><tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
+<!--Db::compact--><tr><td><a href="../api_c/db_compact.html">DB-&gt;compact</a></td><td>Compact a database</td></tr>
+<!--Db::cursor--><tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor</td></tr>
<!--Db::del--><tr><td><a href="../api_c/db_del.html">DB-&gt;del</a></td><td>Delete items from a database</td></tr>
<!--Db::err--><tr><td><a href="../api_c/db_err.html">DB-&gt;err</a>, <a href="../api_c/db_err.html">DB-&gt;errx</a></td><td>Error message</td></tr>
<!--Db::fd--><tr><td><a href="../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
<!--Db::get--><tr><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>
<!--Db::get_byteswapped--><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>
-<!--Db::get_env--><tr><td><a href="../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return database environment handle</td></tr>
-<!--Db::get_mpf--><tr><td><a href="../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return underlying <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle</td></tr>
+<!--Db::get_env--><tr><td><a href="../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return <a href="../api_c/db_class.html">DB</a>'s underlying <a href="../api_c/env_class.html">DB_ENV</a> handle</td></tr>
<!--Db::get_type--><tr><td><a href="../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
<!--Db::join--><tr><td><a href="../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
<!--Db::key_range--><tr><td><a href="../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
-<!--Db::mpf--><tr><td><a href="../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<!--Db::mpf--><tr><td><a href="../api_c/db_get_mpf.html">DB-&gt;get_mpf</a></td><td>Return <a href="../api_c/db_class.html">DB</a>'s underlying <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle</td></tr>
<!--Db::open--><tr><td><a href="../api_c/db_open.html">DB-&gt;open</a></td><td>Open a database</td></tr>
<!--Db::put--><tr><td><a href="../api_c/db_put.html">DB-&gt;put</a></td><td>Store items into a database</td></tr>
<!--Db::remove--><tr><td><a href="../api_c/db_remove.html">DB-&gt;remove</a></td><td>Remove a database</td></tr>
@@ -51,7 +50,6 @@
<!--Db::set_h_nelem--><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>
<!--Db::set_lorder--><tr><td><a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td><td>Set the database byte order</td></tr>
<!--Db::set_pagesize--><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>
-<!--Db::set_paniccall--><tr><td><a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
<!--Db::set_q_extentsize--><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>
<!--Db::set_re_delim--><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>
<!--Db::set_re_len--><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>
@@ -70,12 +68,15 @@
<!--DbCursor::put--><tr><td><a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a></td><td>Store by cursor</td></tr>
<!--DbDeadlockException-->
<!--DbEnv::--><tr><td><a href="../api_c/env_class.html">db_env_create</a></td><td>Create an environment handle</td></tr>
+<!--DbEnv::cdsgroup_begin--><tr><td><a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a></td><td>Get a locker ID in Berkeley DB Concurrent Data Store</td></tr>
<!--DbEnv::close--><tr><td><a href="../api_c/env_close.html">DB_ENV-&gt;close</a></td><td>Close an environment</td></tr>
<!--DbEnv::dbremove--><tr><td><a href="../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a></td><td>Remove a database</td></tr>
<!--DbEnv::dbrename--><tr><td><a href="../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a></td><td>Rename a database</td></tr>
<!--DbEnv::err--><tr><td><a href="../api_c/env_err.html">DB_ENV-&gt;err</a>, <a href="../api_c/env_err.html">DB_ENV-&gt;errx</a></td><td>Error message</td></tr>
+<!--DbEnv::failchk--><tr><td><a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a></td><td>Check for thread failure</td></tr>
+<!--DbEnv::fileid_reset--><tr><td><a href="../api_c/env_fileid_reset.html">DB_ENV-&gt;fileid_reset</a></td><td>Reset database file IDs</td></tr>
<!--DbEnv::get_home--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;get_home</a></td><td>Return environment's home directory</td></tr>
-<!--DbEnv::get_open_flags--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;get_open_flags</a></td><td>Return the flags with which the environment was opened</td></tr>
+<!--DbEnv::get_open_flags--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;get_open_flags</a></td><td>Return flags with which the environment was opened</td></tr>
<!--DbEnv::lock_detect--><tr><td><a href="../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a></td><td>Perform deadlock detection</td></tr>
<!--DbEnv::lock_get--><tr><td><a href="../api_c/lock_get.html">DB_ENV-&gt;lock_get</a></td><td>Acquire a lock</td></tr>
<!--DbEnv::lock_id--><tr><td><a href="../api_c/lock_id.html">DB_ENV-&gt;lock_id</a></td><td>Acquire a locker ID</td></tr>
@@ -86,35 +87,58 @@
<!--DbEnv::log_archive--><tr><td><a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
<!--DbEnv::log_file--><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>
<!--DbEnv::log_flush--><tr><td><a href="../api_c/log_flush.html">DB_ENV-&gt;log_flush</a></td><td>Flush log records</td></tr>
+<!--DbEnv::log_printf--><tr><td><a href="../api_c/log_printf.html">DB_ENV-&gt;log_printf</a></td><td>Append informational message to the log</td></tr>
<!--DbEnv::log_put--><tr><td><a href="../api_c/log_put.html">DB_ENV-&gt;log_put</a></td><td>Write a log record</td></tr>
<!--DbEnv::log_stat--><tr><td><a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a></td><td>Return log subsystem statistics</td></tr>
+<!--DbEnv::lsn_reset--><tr><td><a href="../api_c/env_lsn_reset.html">DB_ENV-&gt;lsn_reset</a></td><td>Reset database file LSNs</td></tr>
<!--DbEnv::memp_fcreate--><tr><td><a href="../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
<!--DbEnv::memp_register--><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>
-<!--DbEnv::memp_set_max_openfd--><tr><td><a href="../api_c/memp_openfd.html">DB_ENV-&gt;memp_set_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
-<!--DbEnv::memp_set_max_write--><tr><td><a href="../api_c/memp_maxwrite.html">DB_ENV-&gt;memp_set_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::memp_stat--><tr><td><a href="../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td><td>Return memory pool statistics</td></tr>
<!--DbEnv::memp_sync--><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>
<!--DbEnv::memp_trickle--><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>
+<!--DbEnv::mutex_alloc--><tr><td><a href="../api_c/mutex_alloc.html">DB_ENV-&gt;mutex_alloc</a></td><td>Allocate a mutex</td></tr>
+<!--DbEnv::mutex_free--><tr><td><a href="../api_c/mutex_free.html">DB_ENV-&gt;mutex_free</a></td><td>Free a mutex</td></tr>
+<!--DbEnv::mutex_lock--><tr><td><a href="../api_c/mutex_lock.html">DB_ENV-&gt;mutex_lock</a></td><td>Lock a mutex</td></tr>
+<!--DbEnv::mutex_set_align--><tr><td><a href="../api_c/mutex_set_align.html">DB_ENV-&gt;mutex_set_align</a></td><td>Configure mutex alignment</td></tr>
+<!--DbEnv::mutex_set_increment--><tr><td><a href="../api_c/mutex_set_max.html">DB_ENV-&gt;mutex_set_increment</a></td><td>Configure number of additional mutexes</td></tr>
+<!--DbEnv::mutex_set_max--><tr><td><a href="../api_c/mutex_set_max.html">DB_ENV-&gt;mutex_set_max</a></td><td>Configure total number of mutexes</td></tr>
+<!--DbEnv::mutex_set_tas_spins--><tr><td><a href="../api_c/mutex_set_tas_spins.html">DB_ENV-&gt;mutex_set_tas_spins</a></td><td>Configure test-and-set mutex spin count</td></tr>
+<!--DbEnv::mutex_stat--><tr><td><a href="../api_c/mutex_stat.html">DB_ENV-&gt;mutex_stat</a></td><td>Mutex statistics</td></tr>
+<!--DbEnv::mutex_unlock--><tr><td><a href="../api_c/mutex_unlock.html">DB_ENV-&gt;mutex_unlock</a></td><td>Unlock a mutex</td></tr>
<!--DbEnv::open--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;open</a></td><td>Open an environment</td></tr>
<!--DbEnv::remove--><tr><td><a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a></td><td>Remove an environment</td></tr>
<!--DbEnv::rep_elect--><tr><td><a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
<!--DbEnv::rep_process_message--><tr><td><a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a></td><td>Process a replication message</td></tr>
+<!--DbEnv::rep_set_config--><tr><td><a href="../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a></td><td>Configure the replication subsystem</td></tr>
+<!--DbEnv::rep_set_limit--><tr><td><a href="../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<!--DbEnv::rep_set_nsites--><tr><td><a href="../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a></td><td>Configure replication group site count</td></tr>
+<!--DbEnv::rep_set_priority--><tr><td><a href="../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a></td><td>Configure replication site priority</td></tr>
+<!--DbEnv::rep_set_timeout--><tr><td><a href="../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a></td><td>Configure replication timeouts</td></tr>
+<!--DbEnv::rep_set_transport--><tr><td><a href="../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a></td><td>Configure replication transport callback</td></tr>
<!--DbEnv::rep_start--><tr><td><a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
<!--DbEnv::rep_stat--><tr><td><a href="../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
+<!--DbEnv::rep_sync--><tr><td><a href="../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a></td><td>Replication synchronization</td></tr>
+<!--DbEnv::repmgr_add_remote_site--><tr><td><a href="../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a></td><td>Specify the replication manager's remote sites</td></tr>
+<!--DbEnv::repmgr_set_ack_policy--><tr><td><a href="../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a></td><td>Specify the replication manager's client acknowledgement policy</td></tr>
+<!--DbEnv::repmgr_set_local_site--><tr><td><a href="../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a></td><td>Specify the replication manager's local site</td></tr>
+<!--DbEnv::repmgr_site_list--><tr><td><a href="../api_c/repmgr_site_list.html">DB_ENV-&gt;repmgr_site_list</a></td><td>List the sites and their status</td></tr>
+<!--DbEnv::repmgr_start--><tr><td><a href="../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a></td><td>Start the replication manager</td></tr>
<!--DbEnv::set_alloc--><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>
<!--DbEnv::set_app_dispatch--><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>
<!--DbEnv::set_cachesize--><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>
-<!--DbEnv::set_cachesize--><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>
<!--DbEnv::set_data_dir--><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>
<!--DbEnv::set_encrypt--><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>
<!--DbEnv::set_errcall--><tr><td><a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>, <a href="../api_c/env_set_msgcall.html">DB_ENV-&gt;set_msgcall</a></td><td>Set error and informational message callbacks</td></tr>
<!--DbEnv::set_errfile--><tr><td><a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>, <a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a></td><td>Set error and informational message FILE</td></tr>
<!--DbEnv::set_error_stream-->
<!--DbEnv::set_errpfx--><tr><td><a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<!--DbEnv::set_event_notify--><tr><td><a href="../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a></td><td>Set event notification callback</td></tr>
<!--DbEnv::set_feedback--><tr><td><a href="../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
<!--DbEnv::set_flags--><tr><td><a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a></td><td>Environment configuration</td></tr>
+<!--DbEnv::set_isalive--><tr><td><a href="../api_c/env_set_isalive.html">DB_ENV-&gt;set_isalive</a></td><td>Set thread is-alive callback</td></tr>
<!--DbEnv::set_lg_bsize--><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>
<!--DbEnv::set_lg_dir--><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>
+<!--DbEnv::set_lg_filemode--><tr><td><a href="../api_c/env_set_lg_mode.html">DB_ENV-&gt;set_lg_filemode</a></td><td>Set log file mode</td></tr>
<!--DbEnv::set_lg_max--><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>
<!--DbEnv::set_lg_regionmax--><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>
<!--DbEnv::set_lk_conflicts--><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>
@@ -122,15 +146,14 @@
<!--DbEnv::set_lk_max_lockers--><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>
<!--DbEnv::set_lk_max_locks--><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>
<!--DbEnv::set_lk_max_objects--><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>
+<!--DbEnv::set_mp_max_openfd--><tr><td><a href="../api_c/memp_openfd.html">DB_ENV-&gt;set_mp_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
+<!--DbEnv::set_mp_max_write--><tr><td><a href="../api_c/memp_maxwrite.html">DB_ENV-&gt;set_mp_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_mp_mmapsize--><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>
-<!--DbEnv::set_paniccall--><tr><td><a href="../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
-<!--DbEnv::set_rep_limit--><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>
-<!--DbEnv::set_rep_transport--><tr><td><a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
<!--DbEnv::set_rpc_server--><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>
<!--DbEnv::set_shm_key--><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>
-<!--DbEnv::set_tas_spins--><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>
-<!--DbEnv::set_timeout--><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>
-<!--DbEnv::set_timeout--><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>
+<!--DbEnv::set_thread_count--><tr><td><a href="../api_c/env_set_thread_count.html">DB_ENV-&gt;set_thread_count</a></td><td>Set approximate thread count</td></tr>
+<!--DbEnv::set_thread_id--><tr><td><a href="../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a></td><td>Set thread of control ID function</td></tr>
+<!--DbEnv::set_thread_id_string--><tr><td><a href="../api_c/env_set_thread_id_string.html">DB_ENV-&gt;set_thread_id_string</a></td><td>Set thread of control ID format function</td></tr>
<!--DbEnv::set_timeout--><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>
<!--DbEnv::set_tmp_dir--><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>
<!--DbEnv::set_tx_max--><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>
@@ -169,7 +192,7 @@
<!--DbSequence::get--><tr><td><a href="../api_c/seq_get.html">DB_SEQUENCE-&gt;get</a></td><td>Get the next sequence element(s)</td></tr>
<!--DbSequence::get_dbp--><tr><td><a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;get_dbp</a></td><td>Return a handle for the underlying sequence database</td></tr>
<!--DbSequence::get_key--><tr><td><a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;get_key</a></td><td>Return the key for a sequence</td></tr>
-<!--DbSequence::init_value--><tr><td><a href="../api_c/seq_init_value.html">DB_SEQUENCE-&gt;init_value</a></td><td>Set the initial value of a sequence</td></tr>
+<!--DbSequence::initial_value--><tr><td><a href="../api_c/seq_initial_value.html">DB_SEQUENCE-&gt;initial_value</a></td><td>Set the initial value of a sequence</td></tr>
<!--DbSequence::open--><tr><td><a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;open</a></td><td>Open a sequence</td></tr>
<!--DbSequence::remove--><tr><td><a href="../api_c/seq_remove.html">DB_SEQUENCE-&gt;remove</a></td><td>Remove a sequence</td></tr>
<!--DbSequence::set_cachesize--><tr><td><a href="../api_c/seq_set_cachesize.html">DB_SEQUENCE-&gt;set_cachesize</a></td><td>Set the cache size of a sequence</td></tr>
@@ -182,11 +205,12 @@
<!--DbTxn::discard--><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>
<!--DbTxn::id--><tr><td><a href="../api_c/txn_id.html">DB_TXN-&gt;id</a></td><td>Return a transaction's ID</td></tr>
<!--DbTxn::prepare--><tr><td><a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<!--DbTxn::set_name--><tr><td><a href="../api_c/txn_set_name.html">DB_TXN-&gt;set_name</a></td><td>Associate a string with a transaction</td></tr>
<!--DbTxn::set_timeout--><tr><td><a href="../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a></td><td>Set transaction timeout</td></tr>
<!--db_strerror--><tr><td><a href="../api_c/env_strerror.html">db_strerror</a></td><td>Error strings</td></tr>
<!--db_version--><tr><td><a href="../api_c/env_version.html">db_version</a></td><td>Return version information</td></tr>
<!--log_compare--><tr><td><a href="../api_c/log_compare.html">log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/c_pindex.html b/db/docs/api_c/c_pindex.html
index d33a4db41..fe5a3539d 100644
--- a/db/docs/api_c/c_pindex.html
+++ b/db/docs/api_c/c_pindex.html
@@ -14,6 +14,7 @@
<tr><td align=right>Building a small memory footprint library </td><td>&nbsp;<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>&nbsp;<a href="../ref/build_unix/small.html#--disable-replication">--disable-replication</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--disable-shared">--disable-shared</a></td></tr>
+<tr><td align=right>QNX </td><td>&nbsp;<a href="../ref/build_unix/qnx.html#--disable-shared">--disable-shared</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<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>&nbsp;<a href="../ref/build_unix/small.html#--disable-statistics">--disable-statistics</a></td></tr>
<tr><td align=right>Building a small memory footprint library </td><td>&nbsp;<a href="../ref/build_unix/small.html#--disable-verify">--disable-verify</a></td></tr>
@@ -26,6 +27,7 @@
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-pthread_api">--enable-pthread_api</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<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>&nbsp;<a href="../ref/build_unix/small.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
@@ -34,8 +36,6 @@
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename=NAME</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
@@ -53,15 +53,16 @@
<tr><td align=right>introduction to the </td><td>&nbsp;<a href="../ref/mp/intro.html#4">buffer</a> pool subsystem</td></tr>
<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_c/memp_fopen.html#2">buffering</a></td></tr>
<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_c/env_set_flags.html#3">buffering</a> for database files</td></tr>
+<tr><td align=right>turn off system </td><td>&nbsp;<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>&nbsp;<a href="../api_c/env_set_flags.html#4">buffering</a> for log files</td></tr>
-<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_c/env_set_flags.html#5">buffering</a> for log files</td></tr>
+<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_c/env_set_flags.html#6">buffering</a> for log files</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/intro.html#3">building</a> for QNX</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_vxworks/introae.html#2">building</a> for VxWorks AE</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/intro.html#2">building</a> for Windows</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/dbt_bulk.html#2">bulk</a> retrieval</td></tr>
<tr><td align=right>selecting a </td><td>&nbsp;<a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
@@ -70,16 +71,16 @@
<tr><td align=right>selecting a </td><td>&nbsp;<a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
<tr><td align=right>introduction to the memory </td><td>&nbsp;<a href="../ref/mp/intro.html#3">cache</a> subsystem</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
-<tr><td align=right>Patches, Updates and </td><td>&nbsp;<a href="http://www.sleepycat.com/update/index.html">Change</a> logs</td></tr>
+<tr><td align=right>Patches, Updates and </td><td>&nbsp;<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Change</a> logs</td></tr>
<tr><td align=right>database page </td><td>&nbsp;<a href="../api_c/db_set_flags.html#2">checksum</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/close.html#2">closing</a> a database</td></tr>
-<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am_misc/faq.html#3">compaction</a></td></tr>
<tr><td align=right>specifying a Btree </td><td>&nbsp;<a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
<tr><td align=right>changing </td><td>&nbsp;<a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
<tr><td align=right>database environment </td><td>&nbsp;<a href="../ref/env/db_config.html#3">configuration</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/program/copy.html#2">copying</a> databases</td></tr>
<tr><td align=right>salvaging </td><td>&nbsp;<a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
<tr><td align=right>closing a </td><td>&nbsp;<a href="../ref/am/curclose.html#3">cursor</a></td></tr>
@@ -88,7 +89,7 @@
<tr><td align=right>retrieving records with a </td><td>&nbsp;<a href="../ref/am/curget.html#3">cursor</a></td></tr>
<tr><td align=right>storing records with a </td><td>&nbsp;<a href="../ref/am/curput.html#3">cursor</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/stability.html#2">cursor</a> stability</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#3">cursor</a> stability</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#4">cursor</a> stability</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am/cursor.html#2">cursors</a></td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#data">data</a></td></tr>
<tr><td align=right>DBcursor-&gt;c_put </td><td>&nbsp;<a href="../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a></td></tr>
@@ -98,18 +99,10 @@
<tr><td align=right>DB_ENV-&gt;log_archive </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>DB_SEQUENCE-&gt;get </td><td>&nbsp;<a href="../api_c/seq_get.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>DB_SEQUENCE-&gt;open </td><td>&nbsp;<a href="../api_c/seq_open.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>DB_SEQUENCE-&gt;remove </td><td>&nbsp;<a href="../api_c/seq_remove.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
<tr><td align=right>DBcursor-&gt;c_put </td><td>&nbsp;<a href="../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a></td></tr>
<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_BTREE">DB_BTREE</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/dbt_class.html#3">DB_BUFFER_SMALL</a></td></tr>
@@ -131,21 +124,11 @@
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a></td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a></td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a></td></tr>
-<tr><td align=right>DB-&gt;cursor </td><td>&nbsp;<a href="../api_c/db_cursor.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
-<tr><td align=right>DB-&gt;get </td><td>&nbsp;<a href="../api_c/db_get.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
-<tr><td align=right>DB-&gt;stat </td><td>&nbsp;<a href="../api_c/db_stat.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
-<tr><td align=right>DB_ENV-&gt;txn_begin </td><td>&nbsp;<a href="../api_c/txn_begin.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>DB-&gt;stat </td><td>&nbsp;<a href="../api_c/db_stat.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get </td><td>&nbsp;<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>&nbsp;<a href="../api_c/txn_begin.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/db_associate.html#3">DB_DONOTINDEX</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_DSYNC_DB">DB_DSYNC_DB</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_DSYNC_LOG">DB_DSYNC_LOG</a></td></tr>
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<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>&nbsp;<a href="../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
@@ -154,6 +137,12 @@
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/env_set_encrypt.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_event_notify </td><td>&nbsp;<a href="../api_c/env_event_notify.html#DB_EVENT_PANIC">DB_EVENT_PANIC</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_event_notify </td><td>&nbsp;<a href="../api_c/env_event_notify.html#DB_EVENT_REP_CLIENT">DB_EVENT_REP_CLIENT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_event_notify </td><td>&nbsp;<a href="../api_c/env_event_notify.html#DB_EVENT_REP_MASTER">DB_EVENT_REP_MASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_event_notify </td><td>&nbsp;<a href="../api_c/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_event_notify </td><td>&nbsp;<a href="../api_c/env_event_notify.html#DB_EVENT_REP_STARTUPDONE">DB_EVENT_REP_STARTUPDONE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_event_notify </td><td>&nbsp;<a href="../api_c/env_event_notify.html#DB_EVENT_WRITE_FAILED">DB_EVENT_WRITE_FAILED</a></td></tr>
<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_EXCL">DB_EXCL</a></td></tr>
<tr><td align=right>DB_SEQUENCE-&gt;open </td><td>&nbsp;<a href="../api_c/seq_open.html#DB_EXCL">DB_EXCL</a></td></tr>
<tr><td align=right>DB-&gt;stat </td><td>&nbsp;<a href="../api_c/db_stat.html#DB_FAST_STAT">DB_FAST_STAT</a></td></tr>
@@ -163,6 +152,8 @@
<tr><td align=right>DB_ENV-&gt;log_put </td><td>&nbsp;<a href="../api_c/log_put.html#DB_FLUSH">DB_FLUSH</a></td></tr>
<tr><td align=right>DB_ENV-&gt;remove </td><td>&nbsp;<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>&nbsp;<a href="../api_c/txn_checkpoint.html#DB_FORCE">DB_FORCE</a></td></tr>
+<tr><td align=right>DB-&gt;compact </td><td>&nbsp;<a href="../api_c/db_compact.html#DB_FREELIST_ONLY">DB_FREELIST_ONLY</a></td></tr>
+<tr><td align=right>DB-&gt;compact </td><td>&nbsp;<a href="../api_c/db_compact.html#DB_FREE_SPACE">DB_FREE_SPACE</a></td></tr>
<tr><td align=right>DB-&gt;get </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/dbc_get.html#DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a></td></tr>
@@ -170,6 +161,7 @@
<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_HASH">DB_HASH</a></td></tr>
<tr><td align=right>File naming </td><td>&nbsp;<a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
<tr><td align=right>File naming </td><td>&nbsp;<a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
+<tr><td align=right>DB-&gt;associate </td><td>&nbsp;<a href="../api_c/db_associate.html#DB_IMMUTABLE_KEY">DB_IMMUTABLE_KEY</a></td></tr>
<tr><td align=right>DB_ENV-&gt;open </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a></td></tr>
@@ -177,7 +169,6 @@
<tr><td align=right>DB_ENV-&gt;open </td><td>&nbsp;<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>&nbsp;<a href="../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a></td></tr>
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<a href="../api_c/db_set_flags.html#DB_INORDER">DB_INORDER</a></td></tr>
-<tr><td align=right>DB_ENV-&gt;open </td><td>&nbsp;<a href="../api_c/env_open.html#DB_JOINENV">DB_JOINENV</a></td></tr>
<tr><td align=right>DB-&gt;join </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/db_join.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</a></td></tr>
@@ -188,6 +179,7 @@
<tr><td align=right>DBcursor-&gt;c_get </td><td>&nbsp;<a href="../api_c/dbc_get.html#DB_LAST">DB_LAST</a></td></tr>
<tr><td align=right>DB_LOGC-&gt;get </td><td>&nbsp;<a href="../api_c/logc_get.html#DB_LAST">DB_LAST</a></td></tr>
<tr><td align=right>DB_ENV-&gt;open </td><td>&nbsp;<a href="../api_c/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td>&nbsp;<a href="../api_c/txn_begin.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/errorret.html#4">DB_LOCK_DEADLOCK</a></td></tr>
<tr><td align=right>Error returns to applications </td><td>&nbsp;<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>&nbsp;<a href="../api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
@@ -225,13 +217,11 @@
<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_LOG_BUFFER_FULL">DB_LOG_BUFFER_FULL</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_LOG_INMEMORY">DB_LOG_INMEMORY</a></td></tr>
-<tr><td align=right>DB_MPOOLFILE-&gt;put </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/memp_fset.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;get </td><td>&nbsp;<a href="../api_c/memp_fget.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
<tr><td align=right>DB_MPOOLFILE-&gt;put </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/memp_fget.html#DB_MPOOL_EDIT">DB_MPOOL_EDIT</a></td></tr>
<tr><td align=right>DB_MPOOLFILE-&gt;get </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/memp_set_flags.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a></td></tr>
@@ -243,6 +233,12 @@
<tr><td align=right>DBT </td><td>&nbsp;<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>&nbsp;<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a></td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_MULTIVERSION">DB_MULTIVERSION</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td>&nbsp;<a href="../api_c/memp_fopen.html#DB_MULTIVERSION">DB_MULTIVERSION</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_isalive </td><td>&nbsp;<a href="../api_c/env_set_isalive.html#DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;mutex_alloc </td><td>&nbsp;<a href="../api_c/mutex_alloc.html#DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;mutex_alloc </td><td>&nbsp;<a href="../api_c/mutex_alloc.html#DB_MUTEX_SELF_BLOCK">DB_MUTEX_SELF_BLOCK</a></td></tr>
<tr><td align=right>DBcursor-&gt;c_get </td><td>&nbsp;<a href="../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
<tr><td align=right>DB_LOGC-&gt;get </td><td>&nbsp;<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>&nbsp;<a href="../api_c/txn_recover.html#DB_NEXT">DB_NEXT</a></td></tr>
@@ -259,6 +255,7 @@
<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_NOPANIC">DB_NOPANIC</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/env_set_rpc_server.html#2">DB_NOSERVER</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_rpc_server </td><td>&nbsp;<a href="../api_c/env_set_rpc_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../api_c/env_set_thread_id_string.html#2">DB_NOSERVER</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_rpc_server </td><td>&nbsp;<a href="../api_c/env_set_rpc_server.html#DB_NOSERVER_HOME">DB_NOSERVER_HOME</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/env_set_rpc_server.html#3">DB_NOSERVER_ID</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_rpc_server </td><td>&nbsp;<a href="../api_c/env_set_rpc_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
@@ -284,24 +281,62 @@
<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_QUEUE">DB_QUEUE</a></td></tr>
<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a></td></tr>
<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td>&nbsp;<a href="../api_c/memp_fopen.html#DB_RDONLY">DB_RDONLY</a></td></tr>
+<tr><td align=right>DB-&gt;cursor </td><td>&nbsp;<a href="../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td>&nbsp;<a href="../api_c/db_get.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;stat </td><td>&nbsp;<a href="../api_c/db_stat.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td>&nbsp;<a href="../api_c/txn_begin.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;cursor </td><td>&nbsp;<a href="../api_c/db_cursor.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td>&nbsp;<a href="../api_c/db_get.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;join </td><td>&nbsp;<a href="../api_c/db_join.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DB-&gt;stat </td><td>&nbsp;<a href="../api_c/db_stat.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td>&nbsp;<a href="../api_c/dbc_get.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td>&nbsp;<a href="../api_c/txn_begin.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
<tr><td align=right>DB-&gt;open </td><td>&nbsp;<a href="../api_c/db_open.html#DB_RECNO">DB_RECNO</a></td></tr>
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td>&nbsp;<a href="../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a></td></tr>
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_ALL">DB_REPMGR_ACKS_ALL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_ALL_PEERS">DB_REPMGR_ACKS_ALL_PEERS</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_NONE">DB_REPMGR_ACKS_NONE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_ONE">DB_REPMGR_ACKS_ONE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_ONE_PEER">DB_REPMGR_ACKS_ONE_PEER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_QUORUM">DB_REPMGR_ACKS_QUORUM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_site_list </td><td>&nbsp;<a href="../api_c/repmgr_site_list.html#DB_REPMGR_CONNECTED">DB_REPMGR_CONNECTED</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_site_list </td><td>&nbsp;<a href="../api_c/repmgr_site_list.html#DB_REPMGR_DISCONNECTED">DB_REPMGR_DISCONNECTED</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_add_remote_site </td><td>&nbsp;<a href="../api_c/repmgr_remote_site.html#DB_REPMGR_PEER">DB_REPMGR_PEER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_timeout </td><td>&nbsp;<a href="../api_c/rep_timeout.html#DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_transport </td><td>&nbsp;<a href="../api_c/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_start </td><td>&nbsp;<a href="../api_c/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_start </td><td>&nbsp;<a href="../api_c/repmgr_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_config </td><td>&nbsp;<a href="../api_c/rep_config.html#DB_REP_CONF_BULK">DB_REP_CONF_BULK</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_config </td><td>&nbsp;<a href="../api_c/rep_config.html#DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_config </td><td>&nbsp;<a href="../api_c/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_config </td><td>&nbsp;<a href="../api_c/rep_config.html#DB_REP_CONF_NOWAIT">DB_REP_CONF_NOWAIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_timeout </td><td>&nbsp;<a href="../api_c/rep_timeout.html#DB_REP_CONNECTION_RETRY">DB_REP_CONNECTION_RETRY</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td>&nbsp;<a href="../api_c/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_start </td><td>&nbsp;<a href="../api_c/repmgr_start.html#DB_REP_ELECTION">DB_REP_ELECTION</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_timeout </td><td>&nbsp;<a href="../api_c/rep_timeout.html#DB_REP_ELECTION_RETRY">DB_REP_ELECTION_RETRY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_timeout </td><td>&nbsp;<a href="../api_c/rep_timeout.html#DB_REP_ELECTION_TIMEOUT">DB_REP_ELECTION_TIMEOUT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_start </td><td>&nbsp;<a href="../api_c/repmgr_start.html#DB_REP_FULL_ELECTION">DB_REP_FULL_ELECTION</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../api_c/db_put.html#2">DB_REP_HANDLE_DEAD</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td>&nbsp;<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>&nbsp;<a href="../api_c/rep_message.html#DB_REP_IGNORE">DB_REP_IGNORE</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td>&nbsp;<a href="../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td>&nbsp;<a href="../api_c/rep_message.html#DB_REP_JOIN_FAILURE">DB_REP_JOIN_FAILURE</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../api_c/db_put.html#3">DB_REP_LOCKOUT</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_start </td><td>&nbsp;<a href="../api_c/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;repmgr_start </td><td>&nbsp;<a href="../api_c/repmgr_start.html#DB_REP_MASTER">DB_REP_MASTER</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/rep_transport.html#DB_REP_NOBUFFER">DB_REP_NOBUFFER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_transport </td><td>&nbsp;<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>&nbsp;<a href="../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a></td></tr>
-<tr><td align=right>DB_ENV-&gt;set_rep_transport </td><td>&nbsp;<a href="../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a></td></tr>
-<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td>&nbsp;<a href="../api_c/rep_message.html#DB_REP_STARTUPDONE">DB_REP_STARTUPDONE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_transport </td><td>&nbsp;<a href="../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_set_transport </td><td>&nbsp;<a href="../api_c/rep_transport.html#DB_REP_REREQUEST">DB_REP_REREQUEST</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/rep_elect.html#2">DB_REP_UNAVAIL</a></td></tr>
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<a href="../api_c/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a></td></tr>
<tr><td align=right>DB-&gt;get </td><td>&nbsp;<a href="../api_c/db_get.html#DB_RMW">DB_RMW</a></td></tr>
@@ -328,11 +363,15 @@
<tr><td align=right>DB_ENV-&gt;lock_stat </td><td>&nbsp;<a href="../api_c/lock_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DB_ENV-&gt;log_stat </td><td>&nbsp;<a href="../api_c/log_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DB_ENV-&gt;memp_stat </td><td>&nbsp;<a href="../api_c/memp_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;mutex_stat </td><td>&nbsp;<a href="../api_c/mutex_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_stat </td><td>&nbsp;<a href="../api_c/rep_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DB_ENV-&gt;txn_stat </td><td>&nbsp;<a href="../api_c/txn_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
+<tr><td align=right>DB-&gt;stat </td><td>&nbsp;<a href="../api_c/db_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;stat_print </td><td>&nbsp;<a href="../api_c/env_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DB_ENV-&gt;lock_stat </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/memp_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;mutex_stat </td><td>&nbsp;<a href="../api_c/mutex_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DB_ENV-&gt;rep_stat </td><td>&nbsp;<a href="../api_c/rep_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DB_SEQUENCE-&gt;stat </td><td>&nbsp;<a href="../api_c/seq_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DB_ENV-&gt;txn_stat </td><td>&nbsp;<a href="../api_c/txn_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
@@ -360,6 +399,9 @@
<tr><td align=right>DB-&gt;set_flags </td><td>&nbsp;<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;txn_begin </td><td>&nbsp;<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>&nbsp;<a href="../api_c/env_set_app_dispatch.html#DB_TXN_PRINT">DB_TXN_PRINT</a></td></tr>
+<tr><td align=right>DB-&gt;cursor </td><td>&nbsp;<a href="../api_c/db_cursor.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td>&nbsp;<a href="../api_c/env_set_flags.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td>&nbsp;<a href="../api_c/txn_begin.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a></td></tr>
<tr><td align=right>DB_ENV-&gt;txn_begin </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a></td></tr>
@@ -371,6 +413,7 @@
<tr><td align=right>DB_ENV-&gt;remove </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/env_set_verbose.html#DB_VERB_REGISTER">DB_VERB_REGISTER</a></td></tr>
<tr><td align=right>DB_ENV-&gt;set_verbose </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_c/db_set_feedback.html#DB_VERIFY">DB_VERIFY</a></td></tr>
@@ -383,16 +426,17 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
<tr><td align=right>introduction to </td><td>&nbsp;<a href="../ref/debug/intro.html#2">debugging</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#5">degree</a> 2 isolation</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#8">degree</a> 1 isolation</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#6">degree</a> 2 isolation</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/stability.html#4">degrees</a> of isolation</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#8">dirty</a> reads</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#10">dirty</a> reads</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/diskspace.html#2">disk</a> space requirements</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/xa/intro.html#2">Distributed</a> Transactions</td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#dlen">dlen</a></td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#doff">doff</a></td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/faq.html#5">double</a> buffering</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/faq.html#3">double</a> buffering</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/db_set_flags.html#5">duplicate</a> data items</td></tr>
<tr><td align=right>sorted </td><td>&nbsp;<a href="../api_c/db_set_flags.html#6">duplicate</a> data items</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
@@ -401,12 +445,12 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/truncate.html#3">emptying</a> a database</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../api_c/db_set_flags.html#3">encryption</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/env/encrypt.html#2">encryption</a></td></tr>
-<tr><td align=right>turn off access to a database </td><td>&nbsp;<a href="../api_c/env_set_flags.html#11">environment</a></td></tr>
+<tr><td align=right>turn off access to a database </td><td>&nbsp;<a href="../api_c/env_set_flags.html#12">environment</a></td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/env/create.html#2">environment</a></td></tr>
<tr><td align=right>use </td><td>&nbsp;<a href="../api_c/env_open.html#2">environment</a> constants in naming</td></tr>
<tr><td align=right>use </td><td>&nbsp;<a href="../api_c/env_remove.html#2">environment</a> constants in naming</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/env/faq.html#2">environment</a> FAQ</td></tr>
-<tr><td align=right>fault database </td><td>&nbsp;<a href="../api_c/env_set_flags.html#12">environment</a> in during open</td></tr>
+<tr><td align=right>fault database </td><td>&nbsp;<a href="../api_c/env_set_flags.html#13">environment</a> in during open</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
<tr><td align=right>introduction to database </td><td>&nbsp;<a href="../ref/env/intro.html#2">environments</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/join.html#2">equality</a> join</td></tr>
@@ -420,10 +464,10 @@
<tr><td align=right>XA </td><td>&nbsp;<a href="../ref/xa/faq.html#2">FAQ</a></td></tr>
<tr><td align=right>configuring without large </td><td>&nbsp;<a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/install/file.html#3">file</a> utility</td></tr>
-<tr><td align=right>returning pages to the </td><td>&nbsp;<a href="../ref/am_misc/faq.html#4">filesystem</a></td></tr>
<tr><td align=right>recovery and </td><td>&nbsp;<a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
<tr><td align=right>remote </td><td>&nbsp;<a href="../ref/env/remote.html#2">filesystems</a></td></tr>
<tr><td align=right>page </td><td>&nbsp;<a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/program/ram.html#2">Flash</a> memory configurations</td></tr>
<tr><td align=right>configuring a small memory </td><td>&nbsp;<a href="../ref/build_unix/conf.html#12">footprint</a> library</td></tr>
<tr><td align=right>Berkeley DB </td><td>&nbsp;<a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
@@ -435,7 +479,8 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
<tr><td align=right>degrees of </td><td>&nbsp;<a href="../ref/am_misc/stability.html#5">isolation</a></td></tr>
-<tr><td align=right>degree 2 </td><td>&nbsp;<a href="../ref/transapp/read.html#6">isolation</a></td></tr>
+<tr><td align=right>degree 2 </td><td>&nbsp;<a href="../ref/transapp/read.html#5">isolation</a></td></tr>
+<tr><td align=right>degree 1 </td><td>&nbsp;<a href="../ref/transapp/read.html#7">isolation</a></td></tr>
<tr><td align=right>configuring the </td><td>&nbsp;<a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
@@ -448,7 +493,7 @@
<tr><td align=right>changing compile or </td><td>&nbsp;<a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
<tr><td align=right>DB_ENV-&gt;lock_vec </td><td>&nbsp;<a href="../api_c/lock_vec.html#lock">lock</a></td></tr>
<tr><td align=right>standard </td><td>&nbsp;<a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
-<tr><td align=right>ignore </td><td>&nbsp;<a href="../api_c/env_set_flags.html#8">locking</a></td></tr>
+<tr><td align=right>ignore </td><td>&nbsp;<a href="../api_c/env_set_flags.html#9">locking</a></td></tr>
<tr><td align=right>page-level </td><td>&nbsp;<a href="../ref/lock/page.html#2">locking</a></td></tr>
<tr><td align=right>two-phase </td><td>&nbsp;<a href="../ref/lock/twopl.html#2">locking</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
@@ -461,19 +506,22 @@
<tr><td align=right>sizing the </td><td>&nbsp;<a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
-<tr><td align=right>automatic </td><td>&nbsp;<a href="../api_c/env_set_flags.html#6">log</a> file removal</td></tr>
+<tr><td align=right>automatic </td><td>&nbsp;<a href="../api_c/env_set_flags.html#7">log</a> file removal</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
<tr><td align=right>introduction to the </td><td>&nbsp;<a href="../ref/log/intro.html#2">logging</a> subsystem</td></tr>
<tr><td align=right>retrieving Btree records by </td><td>&nbsp;<a href="../ref/am_conf/bt_recnum.html#3">logical</a> record @number</td></tr>
-<tr><td align=right>in memory </td><td>&nbsp;<a href="../api_c/env_set_flags.html#7">logs</a></td></tr>
+<tr><td align=right>in memory </td><td>&nbsp;<a href="../api_c/env_set_flags.html#8">logs</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/macosx.html#2">Mac</a> OS X</td></tr>
-<tr><td align=right>turn off database file </td><td>&nbsp;<a href="../api_c/env_set_flags.html#9">memory</a> mapping</td></tr>
+<tr><td align=right>turn off database file </td><td>&nbsp;<a href="../api_c/env_set_flags.html#10">memory</a> mapping</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
<tr><td align=right>introduction to the </td><td>&nbsp;<a href="../ref/mp/intro.html#2">memory</a> pool subsystem</td></tr>
<tr><td align=right>configuring for </td><td>&nbsp;<a href="../ref/build_win/faq.html#4">MinGW</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/ext/mod.html#3">mod</a></td></tr>
<tr><td align=right>DB_ENV-&gt;lock_vec </td><td>&nbsp;<a href="../api_c/lock_vec.html#mode">mode</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/program/copy.html#3">moving</a> databases</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#12">multiversion</a> concurrency control</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#13">MVCC</a></td></tr>
<tr><td align=right>Berkeley DB library </td><td>&nbsp;<a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
<tr><td align=right>file </td><td>&nbsp;<a href="../ref/env/naming.html#2">naming</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/join.html#4">natural</a> join</td></tr>
@@ -485,24 +533,24 @@
<tr><td align=right></td><td>&nbsp;<a href="../api_c/db_set_flags.html#10">ordered</a> retrieval of records from Queue databases</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
<tr><td align=right>selecting a </td><td>&nbsp;<a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
-<tr><td align=right>ignore database environment </td><td>&nbsp;<a href="../api_c/env_set_flags.html#10">panic</a></td></tr>
+<tr><td align=right>ignore database environment </td><td>&nbsp;<a href="../api_c/env_set_flags.html#11">panic</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/partial.html#2">partial</a> record storage and retrieval</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="http://www.sleepycat.com/update/index.html">Patches,</a> Updates and Change logs</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Patches,</a> Updates and Change logs</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/ext/perl.html#2">Perl</a></td></tr>
<tr><td align=right>retrieved key/data </td><td>&nbsp;<a href="../ref/am_misc/perm.html#2">permanence</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/ext/php.html#2">PHP</a></td></tr>
<tr><td align=right>task/thread </td><td>&nbsp;<a href="../ref/program/faq.html#2">priority</a></td></tr>
-<tr><td align=right>Sleepycat Software's Berkeley DB </td><td>&nbsp;<a href="../ref/intro/products.html#2">products</a></td></tr>
+<tr><td align=right>Berkeley DB </td><td>&nbsp;<a href="../ref/intro/products.html#2">products</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_unix/intro.html#5">QNX</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
-<tr><td align=right>dirty </td><td>&nbsp;<a href="../ref/transapp/read.html#7">reads</a></td></tr>
+<tr><td align=right>dirty </td><td>&nbsp;<a href="../ref/transapp/read.html#9">reads</a></td></tr>
<tr><td align=right>accessing Btree records by </td><td>&nbsp;<a href="../api_c/db_set_flags.html#7">record</a> number</td></tr>
<tr><td align=right>logical </td><td>&nbsp;<a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
<tr><td align=right>managing </td><td>&nbsp;<a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
<tr><td align=right>logically renumbering </td><td>&nbsp;<a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
<tr><td align=right>Berkeley DB </td><td>&nbsp;<a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_c/db_set_flags.html#11">renumbering</a> records in Recno databases</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#2">repeatable</a> read</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#2">repeatable</a> reads</td></tr>
<tr><td align=right>introduction to </td><td>&nbsp;<a href="../ref/rep/intro.html#2">replication</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/xa/intro.html#3">Resource</a> Manager</td></tr>
<tr><td align=right>XA </td><td>&nbsp;<a href="../ref/xa/xa_intro.html#3">Resource</a> Manager</td></tr>
@@ -525,17 +573,17 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#size">size</a></td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="http://www.sleepycat.com/">Sleepycat</a> Software</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#11">snapshot</a> isolation</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
<tr><td align=right>turn off reverse </td><td>&nbsp;<a href="../api_c/db_set_flags.html#9">splits</a> in Btree databases</td></tr>
<tr><td align=right>cursor </td><td>&nbsp;<a href="../ref/am_misc/stability.html#3">stability</a></td></tr>
-<tr><td align=right>cursor </td><td>&nbsp;<a href="../ref/transapp/read.html#4">stability</a></td></tr>
+<tr><td align=right>cursor </td><td>&nbsp;<a href="../ref/transapp/read.html#3">stability</a></td></tr>
<tr><td align=right>disabling </td><td>&nbsp;<a href="../ref/build_unix/conf.html#6">static</a> libraries</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am/stat.html#2">statistics</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/put.html#2">storing</a> records</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
-<tr><td align=right>configure for </td><td>&nbsp;<a href="../api_c/env_set_flags.html#15">stress</a> testing</td></tr>
+<tr><td align=right>configure for </td><td>&nbsp;<a href="../api_c/env_set_flags.html#16">stress</a> testing</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
<tr><td align=right>loading Berkeley DB with </td><td>&nbsp;<a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
<tr><td align=right>using Berkeley DB with </td><td>&nbsp;<a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
@@ -554,8 +602,8 @@
<tr><td align=right>building </td><td>&nbsp;<a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
<tr><td align=right>lock </td><td>&nbsp;<a href="../ref/lock/timeout.html#2">timeouts</a></td></tr>
<tr><td align=right>transaction </td><td>&nbsp;<a href="../ref/lock/timeout.html#3">timeouts</a></td></tr>
-<tr><td align=right>turn off synchronous </td><td>&nbsp;<a href="../api_c/env_set_flags.html#13">transaction</a> commit</td></tr>
<tr><td align=right>turn off synchronous </td><td>&nbsp;<a href="../api_c/env_set_flags.html#14">transaction</a> commit</td></tr>
+<tr><td align=right>turn off synchronous </td><td>&nbsp;<a href="../api_c/env_set_flags.html#15">transaction</a> commit</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/faq.html#2">transaction</a> FAQ</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
@@ -576,11 +624,10 @@
<tr><td align=right>configuring Berkeley DB with the </td><td>&nbsp;<a href="../ref/xa/xa_config.html#2">Tuxedo</a> System</td></tr>
<tr><td align=right>DBT </td><td>&nbsp;<a href="../api_c/dbt_class.html#ulen">ulen</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/unicode.html#2">Unicode</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_unix/intro.html#4">UNIX</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
<tr><td align=right>configuring Berkeley DB for </td><td>&nbsp;<a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
-<tr><td align=right>Patches, </td><td>&nbsp;<a href="http://www.sleepycat.com/update/index.html">Updates</a> and Change logs</td></tr>
+<tr><td align=right>Patches, </td><td>&nbsp;<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Updates</a> and Change logs</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.2.0/toc.html#2">Upgrading</a> to release 2.0</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.3.0/toc.html#2">Upgrading</a> to release 3.0</td></tr>
@@ -591,6 +638,8 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.1/toc.html#2">Upgrading</a> to release 4.1</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.2/toc.html#2">Upgrading</a> to release 4.2</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.3/toc.html#2">Upgrading</a> to release 4.3</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.4/toc.html#2">Upgrading</a> to release 4.4</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.5/toc.html#2">Upgrading</a> to release 4.5</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am/verify.html#2">verification</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
@@ -603,6 +652,6 @@
<tr><td align=right></td><td>&nbsp;<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>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_associate.html b/db/docs/api_c/db_associate.html
index 87bac813a..80e629979 100644
--- a/db/docs/api_c/db_associate.html
+++ b/db/docs/api_c/db_associate.html
@@ -1,5 +1,5 @@
-<!--$Id: db_associate.so,v 10.37 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_associate.so,v 10.43 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,8 +24,8 @@
<p>
int
DB-&gt;associate(DB *primary, DB_TXN *txnid, DB *secondary,
- int (*callback)(DB *, const DBT *, const DBT *, DBT *),
- u_int32_t flags);
+ int (*callback)(DB *secondary,
+ const DBT *key, const DBT *data, DBT *result), u_int32_t flags);
</pre></h3>
<hr size=1 noshade>
<h3>Description: DB-&gt;associate</h3>
@@ -78,8 +78,12 @@ 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>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</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:
<dl compact>
<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. This operation is potentially
@@ -96,13 +100,17 @@ 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:
-<dl compact>
-<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.
+<dt><a name="DB_IMMUTABLE_KEY">DB_IMMUTABLE_KEY</a><dd>Specifies the secondary key is immutable.
+<p>This flag can be used to optimize updates when the secondary key in a
+primary record will never be changed after the primary record is
+inserted. For immutable secondary keys, a best effort is made to avoid
+calling the secondary callback function when primary records are
+updated. This optimization may reduce the overhead of update operations
+significantly if the callback function is expensive.</p>
+<p>Be sure to specify this flag only if the secondary key in the primary
+record is never changed. If this rule is violated, the secondary index
+will become corrupted, that is, it will become out of sync with the
+primary.</p>
</dl>
<dt><b>primary</b><dd>The <b>primary</b> parameter should be a database handle for the primary
database that is to be indexed.
@@ -116,10 +124,15 @@ with the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag it is saf
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.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The DB-&gt;associate method
@@ -127,6 +140,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the secondary database handle has already been associated with this or
@@ -143,6 +157,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bba37b470..04c525b81 100644
--- a/db/docs/api_c/db_class.html
+++ b/db/docs/api_c/db_class.html
@@ -1,5 +1,5 @@
-<!--$Id: db_class.so,v 10.49 2004/08/18 02:33:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_class.so,v 10.52 2005/12/01 02:02:58 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,13 +38,15 @@ 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 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>
+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>,
+<a href="../api_c/db_rename.html">DB-&gt;rename</a>, or <a href="../api_c/db_verify.html">DB-&gt;verify</a> methods are called, the handle may
+not be accessed again, regardless of the method's return.</p>
+<p>The db_create function creates a DB structure that is
+the handle for a Berkeley DB database. This function allocates memory for the
+structure, returning a pointer to the structure in the memory to which
+<b>dbp</b> refers. To release the allocated memory and discard the
+handle, call the <a href="../api_c/db_close.html">DB-&gt;close</a>, <a href="../api_c/db_remove.html">DB-&gt;remove</a>,
+<a href="../api_c/db_rename.html">DB-&gt;rename</a>, or <a href="../api_c/db_verify.html">DB-&gt;verify</a> methods.</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
@@ -92,6 +94,6 @@ DB
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5860930fa..b510ee19c 100644
--- a/db/docs/api_c/db_close.html
+++ b/db/docs/api_c/db_close.html
@@ -1,5 +1,5 @@
<!--$Id: db_close.so,v 10.55 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -88,6 +88,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_compact.html b/db/docs/api_c/db_compact.html
new file mode 100644
index 000000000..05fcb7609
--- /dev/null
+++ b/db/docs/api_c/db_compact.html
@@ -0,0 +1,140 @@
+<!--$Id: db_compact.so,v 1.6 2006/09/08 18:36:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB-&gt;compact</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB-&gt;compact</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;compact(DB *db, DB_TXN *txnid,
+ DBT *start, DBT *stop, DB_COMPACT *c_data, u_int32_t flags, DBT *end);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;compact</h3>
+<p>The DB-&gt;compact method compacts Btree and Recno access method
+databases, and optionally returns unused Btree, Hash or Recno database
+pages to the underlying filesystem.</p>
+<p>The DB-&gt;compact method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>txnid</b><dd>If the operation is part of an application-specified transaction, 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. If no transaction handle is
+specified, but the operation occurs in a transactional database, the
+operation will be implicitly transaction protected using multiple
+transactions. These transactions will be periodically committed to
+avoid locking large sections of the tree. Any deadlocks encountered
+cause the compaction operation to retried from the point of the last
+transaction commit.
+<dt><b>start</b><dd>If non-NULL, the <b>start</b> parameter is the starting point for
+compaction in a Btree or Recno database. Compaction will start at the
+smallest key greater than or equal to the specified key. If NULL,
+compaction will start at the beginning of the database.
+<dt><b>stop</b><dd>If non-NULL, the <b>stop</b> parameter is the stopping point for
+compaction in a Btree or Recno database. Compaction will stop at the
+page with the smallest key greater than the specified key. If NULL,
+compaction will stop at the end of the database.
+<dt><b>c_data</b><dd><p>If non-NULL, the <b>c_data</b> parameter contains additional compaction
+configuration parameters, and returns compaction operation statistics,
+in a structure of type DB_COMPACT.</p>
+<p>The following input configuration fields are available from the
+DB_COMPACT structure:</p>
+<dl compact>
+<dt>int compact_fillpercent;<dd>If non-zero, the goal for filling pages, specified as a percentage
+between 1 and 100. Any page in a Btree or Recno databases not at or
+above this percentage full will be considered for compaction. The
+default behavior is to consider every page for compaction, regardless
+of its page fill percentage.
+<dt>int compact_pages;<dd>If non-zero, the call will return after that number of pages have been
+freed.
+<dt>db_timeout_t compact_timeout;<dd>If non-zero, and no <b>txnid</b> parameter was specified, the lock
+timeout set for implicit transactions, in microseconds.
+</dl>
+<p>The following output statistics fields are available from the
+DB_COMPACT structure:</p>
+<dl compact>
+<dt>u_int32_t compact_deadlock;<dd>An output statistics parameter: if no <b>txnid</b> parameter was
+specified, the number of deadlocks which occurred.
+<dt>u_int32_t compact_pages_examine;<dd>An output statistics parameter: the number of database pages reviewed
+during the compaction phase.
+<dt>u_int32_t compact_pages_free;<dd>An output statistics parameter: the number of database pages freed during
+the compaction phase.
+<dt>u_int32_t compact_levels;<dd>An output statistics parameter: the number of levels removed from the
+Btree or Recno database during the compaction phase.
+<dt>u_int32_t compact_pages_truncated;<dd>An output statistics parameter: the number of database pages returned
+to the filesystem.
+</dl>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+one of the following values:
+<dl compact>
+<dt><a name="DB_FREELIST_ONLY">DB_FREELIST_ONLY</a><dd>Do no page compaction, only returning pages to the filesystem that are
+already free and at the end of the file. This flag must be set if the
+database is a Hash access method database.
+<dt><a name="DB_FREE_SPACE">DB_FREE_SPACE</a><dd>Return pages to the filesystem when possible.
+If this flag is not specified, pages emptied as a result of compaction
+will be placed on the free list for re-use, but never returned to the
+filesystem.
+<p>Note that only pages at the end of a file can be returned to the
+filesystem. Because of the one-pass nature of the compaction algorithm,
+any unemptied page near the end of the file inhibits returning pages to
+the file system. A repeated call to the DB-&gt;compact method with a low
+<b>compact_fillpercent</b> may be used to return pages in this case.</p>
+</dl>
+<dt><b>end</b><dd>If non-NULL, the <b>end</b> parameter will be filled in with the
+database key marking the end of the compaction operation in a Btree or
+Recno database. This is generally the first key of the page where the
+operation stopped.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;compact method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<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>
+<dl compact>
+<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
+</dl>
+<dl compact>
+<dt>EACCES<dd>An attempt was made to modify a read-only database.
+</dl>
+<dl compact>
+<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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/db_cursor.html b/db/docs/api_c/db_cursor.html
index 2e8c89421..ee39e73c2 100644
--- a/db/docs/api_c/db_cursor.html
+++ b/db/docs/api_c/db_cursor.html
@@ -1,5 +1,5 @@
-<!--$Id: db_cursor.so,v 10.47 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_cursor.so,v 10.53 2006/08/08 05:24:02 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,7 +28,9 @@ DB-&gt;cursor(DB *db,
</pre></h3>
<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 created database cursor.</p>
+<p>Cursors may span threads, but only serially, that is, the application
+must serialize access to the cursor handle.</p>
<p>The DB-&gt;cursor method
returns a non-zero error value on failure
and 0 on success.
@@ -36,27 +38,38 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>cursorp</b><dd>The <b>cursorp</b> parameter references memory into which
-a pointer to the allocated cursor is copied.
+a pointer to the allocated cursor is copied.
<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:
<dl compact>
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>This cursor will have degree 2 isolation. This ensures the stability
-of the current data item read by this cursor but permits data read
-by this cursor to be modified or deleted prior to the commit of
-the transaction for this cursor.
-<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.
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>This cursor will have degree 2 isolation. This ensures the stability
+of the current data item read by this cursor but permits data read by
+this cursor to be modified or deleted prior to the commit of the
+transaction for this cursor.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>This cursor will have degree 1 isolation. 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_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when
+the underlying database was opened.
<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.
+<dt><a name="DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a><dd>Specify that the cursor operate with read-only
+<a href="../ref/transapp/read.html">snapshot isolation</a>. For databases
+with the <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> flag set, data values will be read as
+they are when the cursor is opened, without taking read locks. This
+flag implicitly begins a transaction that is committed when the cursor
+is closed. Silently ignored if <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> not set on the
+underlying database or if a transaction is supplied in the <b>txnid</b>
+parameter.
</dl>
-<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.
+<dt><b>txnid</b><dd>Cursor operations are not automatically transaction-protected, even if
+the <a href="../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag is specified to the
+<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> or <a href="../api_c/db_open.html">DB-&gt;open</a> methods. If cursor operations are
+to be transaction-protected, the <b>txnid</b> parameter must be 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
@@ -64,6 +77,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -78,6 +92,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d836f5ce0..df370a156 100644
--- a/db/docs/api_c/db_del.html
+++ b/db/docs/api_c/db_del.html
@@ -1,5 +1,5 @@
-<!--$Id: db_del.so,v 10.45 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_del.so,v 10.49 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,18 +44,17 @@ and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
<dt><b>key</b><dd>The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
-<dl compact>
-<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>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The DB-&gt;del method
@@ -69,6 +68,7 @@ to grant a lock in the allowed time.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -89,6 +89,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f9f19080e..660034861 100644
--- a/db/docs/api_c/db_err.html
+++ b/db/docs/api_c/db_err.html
@@ -1,6 +1,6 @@
<!--$Id: db_err.so,v 1.3 2002/08/18 21:15:48 bostic Exp $-->
-<!--$Id: env_err.so,v 10.32 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_err.so,v 10.34 2006/04/27 20:17:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,8 +34,8 @@ DB-&gt;errx(DB *db, const char *fmt, ...);
<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>
+<p>The DB-&gt;err and <a href="../api_c/env_err.html">DB_ENV-&gt;err</a> methods constructs an error message
+consisting of the following elements:</p>
<blockquote><dl compact>
<dt>An optional prefix string<dd>If no error callback function has been set using the
<a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a> method, any prefix string specified using the
@@ -49,6 +49,10 @@ are converted for output.
<b>error</b> value, as returned by the <a href="../api_c/env_strerror.html">db_strerror</a> method.
</dl>
</blockquote>
+<p>The DB-&gt;errx and <a href="../api_c/env_err.html">DB_ENV-&gt;errx</a> methods are the same as the
+DB-&gt;err and <a href="../api_c/env_err.html">DB_ENV-&gt;err</a> methods, except they do not append the
+final separator characters and standard error string to the error
+message.</p>
<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
@@ -66,17 +70,6 @@ is written to stderr, the standard error output stream.</p></blockquote>
string.
<dt><b>fmt</b><dd>The <b>fmt</b> parameter is an optional printf-style message to display.
</dl>
-<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.</p>
-<h3>Parameters</h3>
-<dl compact>
-<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.
-<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>
@@ -86,6 +79,6 @@ string.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9a527721e..4a16f872c 100644
--- a/db/docs/api_c/db_fd.html
+++ b/db/docs/api_c/db_fd.html
@@ -1,5 +1,5 @@
-<!--$Id: db_fd.so,v 10.30 2003/10/31 15:17:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_fd.so,v 10.31 2005/06/14 14:06:57 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,9 +32,7 @@ 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>
+<b>fcntl</b>(2) and <b>flock</b>(2) locking functions.</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
@@ -44,7 +42,7 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>fdp</b><dd>The <b>fdp</b> parameter references memory into which
- the current file descriptor is copied.
+ the current file descriptor is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -55,6 +53,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2b58ea571..ff73c65d6 100644
--- a/db/docs/api_c/db_get.html
+++ b/db/docs/api_c/db_get.html
@@ -1,5 +1,5 @@
-<!--$Id: db_get.so,v 10.84 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_get.so,v 10.89 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -96,16 +96,6 @@ of type Btree, and it must have been created with the DB_RECNUM flag.</p>
In addition, the following flags may be set by
bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<dl compact>
-<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.
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>Perform the get operation with degree 2 isolation.
-The read is not repeatable.
-<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.
<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
@@ -131,6 +121,12 @@ into secondary indices using the <a href="../api_c/db_associate.html">DB-&gt;ass
<p>See
<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a>
for more information.</p>
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>Perform the get operation with degree 2 isolation. The read is not
+repeatable.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Perform the get operation with degree 1 isolation, reading modified but
+not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
+database was opened.
<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
@@ -143,14 +139,23 @@ transactions.</p>
</dl>
<dt><b>key</b><dd>The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
<dt><b>pkey</b><dd>The <b>pkey</b> parameter is the return key from the primary database.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The DB-&gt;get method
may fail and return one of the following non-zero errors:</p>
<dl compact>
+<dt>DB_BUFFER_SMALL<dd>The requested item could not be returned due to undersized buffer.
+</dl>
+<dl compact>
<dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
a deadlock.
<dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
@@ -163,6 +168,7 @@ timers were configured and the lock could not be granted before the wait-time ex
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -176,9 +182,6 @@ the DB-&gt;pget method was called with a <a href="../api_c/db_class.html">DB</a>
refer to a secondary index; or if an
invalid flag value or parameter was specified.
</dl>
-<dl compact>
-<dt>DB_BUFFER_SMALL<dd>The requested item could not be returned due to undersized buffer.
-</dl>
<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_c/db_class.html">DB</a>
@@ -188,6 +191,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2b9aecb35..73dae3fb3 100644
--- a/db/docs/api_c/db_get_byteswapped.html
+++ b/db/docs/api_c/db_get_byteswapped.html
@@ -1,5 +1,5 @@
<!--$Id: db_get_byteswapped.so,v 10.23 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -63,6 +63,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index cbc9d1e01..bf2a64f0e 100644
--- a/db/docs/api_c/db_get_mpf.html
+++ b/db/docs/api_c/db_get_mpf.html
@@ -1,17 +1,17 @@
-<!--$Id: db_get_mpf.so,v 1.7 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_mpf.so,v 1.8 2005/07/20 16:22:18 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB-&gt;mpf</title>
+<title>Berkeley DB: DB-&gt;get_mpf</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB-&gt;mpf</h3>
+<h3>DB-&gt;get_mpf</h3>
</td>
<td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -22,15 +22,14 @@
<h3><pre>
#include &lt;db.h&gt;
<p>
-DB_MPOOLFILE *DB-&gt;mpf
+DB_MPOOLFILE *
+DB-&gt;get_mpf(DB *db);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DB-&gt;mpf</h3>
-<p>The DB-&gt;mpf method returns the Db.get_mpf.</p>
-<p>The DB-&gt;mpf method may be called at any time during the life of the
+<h3>Description: DB-&gt;get_mpf</h3>
+<p>The DB-&gt;get_mpf method returns the handle for the cache file underlying the database.</p>
+<p>The DB-&gt;get_mpf method may be called at any time during the life of the
application.</p>
-<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>
@@ -40,6 +39,6 @@ with a <a href="../api_c/db_class.html">DB</a> object.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 220d7cbae..8860df9f6 100644
--- a/db/docs/api_c/db_get_type.html
+++ b/db/docs/api_c/db_get_type.html
@@ -1,5 +1,5 @@
<!--$Id: db_get_type.so,v 10.27 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,7 +41,7 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>type</b><dd>The <b>type</b> parameter references memory into which
- the type of the underlying access method is copied.
+ the type of the underlying access method is copied.
</dl>
<h3>Errors</h3>
<p>The DB-&gt;get_type method
@@ -59,6 +59,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_getenv.html b/db/docs/api_c/db_getenv.html
index 8c941b9c8..68c891326 100644
--- a/db/docs/api_c/db_getenv.html
+++ b/db/docs/api_c/db_getenv.html
@@ -1,5 +1,5 @@
-<!--$Id: db_getenv.so,v 10.8 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_getenv.so,v 10.9 2005/07/20 16:22:49 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,7 +27,7 @@ DB-&gt;get_env(DB *db);
</pre></h3>
<hr size=1 noshade>
<h3>Description: DB-&gt;get_env</h3>
-<p>The DB-&gt;get_env method returns the Db.getDbEnv.</p>
+<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>
<hr size=1 noshade>
@@ -39,6 +39,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 af4143c25..f39fef408 100644
--- a/db/docs/api_c/db_join.html
+++ b/db/docs/api_c/db_join.html
@@ -1,5 +1,5 @@
-<!--$Id: db_join.so,v 10.56 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_join.so,v 10.57 2005/02/10 20:02:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,8 +52,8 @@ The data parameter is left unchanged.
In addition, the following flag may be set by
bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
<dl compact>
-<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
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
database was opened.
<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
@@ -108,6 +108,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -126,6 +127,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8ac7852a4..5391d5dba 100644
--- a/db/docs/api_c/db_key_range.html
+++ b/db/docs/api_c/db_key_range.html
@@ -1,5 +1,5 @@
<!--$Id: db_key_range.so,v 10.23 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,9 +58,15 @@ contains three elements of type double: <b>less</b>, <b>equal</b>, and
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.
-<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
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected. 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.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
@@ -76,6 +82,7 @@ to grant a lock in the allowed time.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the underlying database was not of type Btree; or if an
@@ -90,6 +97,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2c34d17e5..6b651793d 100644
--- a/db/docs/api_c/db_list.html
+++ b/db/docs/api_c/db_list.html
@@ -1,5 +1,5 @@
<!--$Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,20 +10,19 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Databases and Related Methods</h3>
-<!--$Id: m4.methods,v 1.7 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.11 2006/08/25 16:40:00 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Operations</th><th>Description</th></tr>
<!--Db::--><tr><td><a href="../api_c/db_class.html">db_create</a></td><td>Create a database handle</td></tr>
<!--Db::associate--><tr><td><a href="../api_c/db_associate.html">DB-&gt;associate</a></td><td>Associate a secondary index</td></tr>
<!--Db::close--><tr><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
-<!--Db::cursor--><tr><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Create a cursor</td></tr>
+<!--Db::compact--><tr><td><a href="../api_c/db_compact.html">DB-&gt;compact</a></td><td>Compact a database</td></tr>
+<!--Db::cursor--><tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor</td></tr>
<!--Db::del--><tr><td><a href="../api_c/db_del.html">DB-&gt;del</a></td><td>Delete items from a database</td></tr>
<!--Db::err--><tr><td><a href="../api_c/db_err.html">DB-&gt;err</a>, <a href="../api_c/db_err.html">DB-&gt;errx</a></td><td>Error message</td></tr>
<!--Db::fd--><tr><td><a href="../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
<!--Db::get--><tr><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>
<!--Db::get_byteswapped--><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>
-<!--Db::get_env--><tr><td><a href="../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return database environment handle</td></tr>
-<!--Db::get_mpf--><tr><td><a href="../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return underlying <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle</td></tr>
<!--Db::get_type--><tr><td><a href="../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
<!--Db::join--><tr><td><a href="../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
<!--Db::key_range--><tr><td><a href="../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
@@ -49,7 +48,6 @@
<!--Db::set_flags--><tr><td><a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a></td><td>General database configuration</td></tr>
<!--Db::set_lorder--><tr><td><a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td><td>Set the database byte order</td></tr>
<!--Db::set_pagesize--><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>
-<!--Db::set_paniccall--><tr><td><a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
<tr><th>Btree/Recno Configuration</th><th><br></th></tr>
<!--Db::set_append_recno--><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>
<!--Db::set_bt_compare--><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>
@@ -66,6 +64,6 @@
<tr><th>Queue Configuration</th><th><br></th></tr>
<!--Db::set_q_extentsize--><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>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 230419b6d..de5dfca30 100644
--- a/db/docs/api_c/db_open.html
+++ b/db/docs/api_c/db_open.html
@@ -1,5 +1,5 @@
-<!--$Id: db_open.so,v 10.106 2004/10/06 19:16:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_open.so,v 10.119 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,7 +55,7 @@ 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
+If DB-&gt;open fails, the <a href="../api_c/db_close.html">DB-&gt;close</a> method must be called to
discard the <a href="../api_c/db_class.html">DB</a> handle.
</p>
<h3>Parameters</h3>
@@ -70,40 +70,49 @@ 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>
+created by setting the <b>file</b> parameter to NULL. If the
+<b>database</b> parameter is also NULL, the database is strictly
+temporary and cannot be opened by any other thread of control, thus the
+database can only be accessed by sharing the single database handle that
+created it, in circumstances where doing so is safe. If the
+<b>database</b> parameter is not set to NULL, the database can be opened
+by other threads of control and will be replicated to client sites in
+any replication group.</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.
+will be used to back the database; see <a href="../ref/env/naming.html">File naming</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>
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+created by setting the <b>file</b> parameter to NULL.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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:
<dl compact>
<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.
+succeeds, the open operation will be recoverable and all subsequent
+database modification operations based on this handle will be
+transactionally protected. If the call fails, no database will have
+been created.
<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.
-<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.
<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.
+<dt><a name="DB_MULTIVERSION">DB_MULTIVERSION</a><dd>Open the database with support for <a href="../ref/transapp/read.html">multiversion concurrency control</a>. This will cause updates to the
+database to follow a copy-on-write protocol, which is required to
+support snapshot isolation. The DB_MULTIVERSION flag requires
+that the database be transactionally protected during its open and is
+not supported by the queue format.
<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).
<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.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Support read operations with degree 1 isolation. 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.
<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, concurrently usable by multiple
threads in the address space.
@@ -125,12 +134,18 @@ defaults, and is not further specified by Berkeley DB. System shared memory
segments created by the database open are created with mode <b>mode</b>, unmodified
by the process' umask value. If <b>mode</b> is 0, the database open will use a
default mode of readable and writable by both owner and group.</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
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+DB_AUTO_COMMIT flag is specified,
+the operation will be implicitly transaction protected. 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.
+during its open. Also note that the transaction must be committed before
+the handle is closed; see <a href="../ref/program/scope.html">Berkeley DB
+handles</a> for more information.
<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
@@ -188,6 +203,7 @@ invalid flag value or parameter was specified.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<hr size=1 noshade>
<h3>Description: DB-&gt;get_database</h3>
@@ -196,9 +212,9 @@ name.</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>filenamep</b><dd>The <b>filenamep</b> parameter references memory into which
-a pointer to the current filename is copied.
+a pointer to the current filename is copied.
<dt><b>dbnamep</b><dd>The <b>dbnamep</b> parameter references memory into which
-a pointer to the current database name is copied.
+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>
@@ -235,6 +251,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 260c67e4a..58f46cb3c 100644
--- a/db/docs/api_c/db_put.html
+++ b/db/docs/api_c/db_put.html
@@ -1,5 +1,5 @@
-<!--$Id: db_put.so,v 10.54 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_put.so,v 10.59 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -71,20 +71,20 @@ supports duplicates.
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:
-<dl compact>
-<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>
<dt><b>data</b><dd>The data <a href="../api_c/dbt_class.html">DBT</a> operated on.
<dt><b>key</b><dd>The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
+<a name="2"><!--meow--></a>
+<a name="3"><!--meow--></a>
<h3>Errors</h3>
<p>The DB-&gt;put method
may fail and return one of the following non-zero errors:</p>
@@ -100,6 +100,7 @@ to grant a lock in the allowed time.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If a record number of 0 was specified;
@@ -121,6 +122,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f2b386f13..eb033b406 100644
--- a/db/docs/api_c/db_remove.html
+++ b/db/docs/api_c/db_remove.html
@@ -1,6 +1,6 @@
<!--$Id: db_remove.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
-<!--$Id: env_dbremove.so,v 10.48 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 10.49 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,8 +57,9 @@ and 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be removed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be removed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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>
@@ -87,6 +88,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 40560583f..cfc89c30b 100644
--- a/db/docs/api_c/db_rename.html
+++ b/db/docs/api_c/db_rename.html
@@ -1,6 +1,6 @@
<!--$Id: db_rename.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
-<!--$Id: env_dbrename.so,v 10.36 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 10.37 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,8 +59,9 @@ and 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be renamed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be renamed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
<dt><b>newname</b><dd>The <b>newname</b> parameter is the new name of the database or file.
</dl>
@@ -90,6 +91,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 536d3034e..dd2ec4d7e 100644
--- a/db/docs/api_c/db_set_alloc.html
+++ b/db/docs/api_c/db_set_alloc.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_alloc.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
<!--$Id: env_set_alloc.so,v 1.22 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -83,6 +83,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d2572b41a..f20531277 100644
--- a/db/docs/api_c/db_set_append_recno.html
+++ b/db/docs/api_c/db_set_append_recno.html
@@ -1,5 +1,5 @@
-<!--$Id: db_set_append_recno.so,v 1.23 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_append_recno.so,v 1.24 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,6 +59,10 @@ 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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<h3>Errors</h3>
<p>The DB-&gt;set_append_recno method
@@ -76,6 +80,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c39438b83..fb2cb6f70 100644
--- a/db/docs/api_c/db_set_bt_compare.html
+++ b/db/docs/api_c/db_set_bt_compare.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_bt_compare.so,v 10.49 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -86,6 +86,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 460dcbb19..4ee6ce699 100644
--- a/db/docs/api_c/db_set_bt_minkey.html
+++ b/db/docs/api_c/db_set_bt_minkey.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_bt_minkey.so,v 10.38 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -85,6 +85,6 @@ leaf page in <b>bt_minkeyp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8546a7fc9..3f0bbecfe 100644
--- a/db/docs/api_c/db_set_bt_prefix.html
+++ b/db/docs/api_c/db_set_bt_prefix.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_bt_prefix.so,v 10.48 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -89,6 +89,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_cachesize.html b/db/docs/api_c/db_set_cachesize.html
index 4fe4eab15..91efa1707 100644
--- a/db/docs/api_c/db_set_cachesize.html
+++ b/db/docs/api_c/db_set_cachesize.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_cachesize.so,v 10.21 2002/08/18 21:15:53 bostic Exp $-->
-<!--$Id: env_set_cachesize.so,v 10.49 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_cachesize.so,v 10.50 2005/01/10 07:18:43 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,17 +41,18 @@ 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^18 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>
+used as specified. The maximum size of a single cache is 4GB on 32-bit
+systems and 10TB on 64-bit systems. (All sizes are in powers-of-two,
+that is, 256KB is 2^18 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 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>
@@ -91,11 +92,11 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>bytesp</b><dd>The <b>bytesp</b> parameter references memory into which
- the additional bytes of memory in the cache is copied.
+ the additional bytes of memory in the cache is copied.
<dt><b>gbytesp</b><dd>The <b>gbytesp</b> parameter references memory into which
- the gigabytes of memory in the cache is copied.
+ the gigabytes of memory in the cache is copied.
<dt><b>ncachep</b><dd>The <b>ncachep</b> parameter references memory into which
- the number of caches is copied.
+ the number of caches is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -106,6 +107,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a0f6f5de8..cabcf2e99 100644
--- a/db/docs/api_c/db_set_dup_compare.html
+++ b/db/docs/api_c/db_set_dup_compare.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_dup_compare.so,v 10.50 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -84,6 +84,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bc821687f..022dfbcee 100644
--- a/db/docs/api_c/db_set_encrypt.html
+++ b/db/docs/api_c/db_set_encrypt.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_encrypt.so,v 10.3 2002/08/18 21:15:54 bostic Exp $-->
<!--$Id: env_set_encrypt.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -89,6 +89,6 @@ encryption flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 88feac654..8220992de 100644
--- a/db/docs/api_c/db_set_errcall.html
+++ b/db/docs/api_c/db_set_errcall.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_errcall.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
-<!--$Id: env_set_errcall.so,v 10.37 2004/10/12 20:00:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errcall.so,v 10.39 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,9 @@ 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 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_errcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -61,6 +64,10 @@ reporting function. The function takes three parameters:
<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>).
<dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -71,6 +78,6 @@ reporting function. The function takes three parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cc73d0557..6b9edd696 100644
--- a/db/docs/api_c/db_set_errfile.html
+++ b/db/docs/api_c/db_set_errfile.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_errfile.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
-<!--$Id: env_set_errfile.so,v 10.34 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errfile.so,v 10.36 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,9 @@ 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 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_errfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -60,9 +63,18 @@ 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 .</p>
+<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>
+<dl compact>
+<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>
@@ -72,6 +84,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7d94a1c23..b7b9668ab 100644
--- a/db/docs/api_c/db_set_errpfx.html
+++ b/db/docs/api_c/db_set_errpfx.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_errpfx.so,v 10.10 2002/08/18 21:15:55 bostic Exp $-->
-<!--$Id: env_set_errpfx.so,v 10.33 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errpfx.so,v 10.34 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,9 @@ 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 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_errpfx method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -70,6 +73,6 @@ error prefix in <b>errpfxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 85543ef65..fad31a2ef 100644
--- a/db/docs/api_c/db_set_feedback.html
+++ b/db/docs/api_c/db_set_feedback.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_feedback.so,v 10.29 2003/10/19 01:27:11 bostic Exp $-->
-<!--$Id: env_set_feedback.so,v 10.42 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_feedback.so,v 10.43 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,10 @@ parameter may take on any of the following values:
<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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -68,6 +72,6 @@ been completed, specified as an integer value between 0 and 100.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ac942b4e2..e686d824f 100644
--- a/db/docs/api_c/db_set_flags.html
+++ b/db/docs/api_c/db_set_flags.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_flags.so,v 10.68 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -292,6 +292,6 @@ current flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d7c37b2df..e3df5935d 100644
--- a/db/docs/api_c/db_set_h_ffactor.html
+++ b/db/docs/api_c/db_set_h_ffactor.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_h_ffactor.so,v 10.37 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -84,6 +84,6 @@ hash table density in <b>h_ffactorp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 82798780f..870eb2a4a 100644
--- a/db/docs/api_c/db_set_h_hash.html
+++ b/db/docs/api_c/db_set_h_hash.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_h_hash.so,v 10.40 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -70,6 +70,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 dd8f09644..84f4f8935 100644
--- a/db/docs/api_c/db_set_h_nelem.html
+++ b/db/docs/api_c/db_set_h_nelem.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_h_nelem.so,v 10.36 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -82,6 +82,6 @@ estimate of the final size of the hash table in <b>h_nelemp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 827a2098a..8bb2cda36 100644
--- a/db/docs/api_c/db_set_lorder.html
+++ b/db/docs/api_c/db_set_lorder.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_lorder.so,v 10.38 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -87,6 +87,6 @@ database byte order in <b>lorderp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_msgcall.html b/db/docs/api_c/db_set_msgcall.html
index 6144b213b..bcb76b949 100644
--- a/db/docs/api_c/db_set_msgcall.html
+++ b/db/docs/api_c/db_set_msgcall.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_msgcall.so,v 10.1 2004/04/16 19:01:56 bostic Exp $-->
-<!--$Id: env_set_msgcall.so,v 10.5 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgcall.so,v 10.7 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,6 +44,9 @@ manner.</p>
<p>For <a href="../api_c/db_class.html">DB</a> handles opened inside of Berkeley DB environments, calling the
DB-&gt;set_msgcall method affects the entire environment and is equivalent to calling
the DB_ENV-&gt;set_msgcall method.</p>
+<p>The DB-&gt;set_msgcall 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_msgcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -54,6 +57,10 @@ reporting function. The function takes two parameters:
<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment.
<dt><b>msg</b><dd>The <b>msg</b> parameter is the message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -64,6 +71,6 @@ reporting function. The function takes two parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_msgfile.html b/db/docs/api_c/db_set_msgfile.html
index f45574812..096b0338b 100644
--- a/db/docs/api_c/db_set_msgfile.html
+++ b/db/docs/api_c/db_set_msgfile.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_msgfile.so,v 1.1 2004/07/14 19:30:39 bostic Exp $-->
-<!--$Id: env_set_msgfile.so,v 10.5 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgfile.so,v 10.7 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,9 @@ in a way that does not use C library FILE *'s.</p>
<p>For <a href="../api_c/db_class.html">DB</a> handles opened inside of Berkeley DB environments, calling the
DB-&gt;set_msgfile method affects the entire environment and is equivalent to calling
the <a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method.</p>
+<p>The DB-&gt;set_msgfile 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_msgfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -55,9 +58,18 @@ displaying messages.
</dl>
<hr size=1 noshade>
<h3>Description: DB-&gt;get_msgfile</h3>
-<p>The DB-&gt;get_msgfile method returns the .</p>
+<p>The DB-&gt;get_msgfile method returns the FILE *.</p>
<p>The DB-&gt;get_msgfile method may be called at any time during the life of the
application.</p>
+<p>The DB-&gt;get_msgfile method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>msgfilep</b><dd>The DB-&gt;get_msgfile method returns the
+FILE * in <b>msgfilep</b>.
+</dl>
<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_c/db_class.html">DB</a>
@@ -67,6 +79,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3f7efbe36..86ed71290 100644
--- a/db/docs/api_c/db_set_pagesize.html
+++ b/db/docs/api_c/db_set_pagesize.html
@@ -1,5 +1,5 @@
-<!--$Id: db_set_pagesize.so,v 10.39 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_pagesize.so,v 10.40 2005/12/16 01:19:35 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,9 +45,9 @@ 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.
+If creating additional databases in a single physical file, information
+specified to DB-&gt;set_pagesize will be ignored and the page size
+of the existing databases will be used.
<p>The DB-&gt;set_pagesize method
returns a non-zero error value on failure
and 0 on success.
@@ -86,6 +86,6 @@ page size in <b>pagesizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c4658e746..76cb6d4e5 100644
--- a/db/docs/api_c/db_set_q_extentsize.html
+++ b/db/docs/api_c/db_set_q_extentsize.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_q_extentsize.so,v 1.23 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -82,6 +82,6 @@ number of pages in an extent in <b>extentsizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b4e48f213..1a29e54ae 100644
--- a/db/docs/api_c/db_set_re_delim.html
+++ b/db/docs/api_c/db_set_re_delim.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_delim.so,v 10.39 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -82,6 +82,6 @@ delimiting byte in <b>delimp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 eecbc9c58..e6b2b5e3d 100644
--- a/db/docs/api_c/db_set_re_len.html
+++ b/db/docs/api_c/db_set_re_len.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_len.so,v 10.40 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -89,6 +89,6 @@ record length in <b>re_lenp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0c4206123..de79cd924 100644
--- a/db/docs/api_c/db_set_re_pad.html
+++ b/db/docs/api_c/db_set_re_pad.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_pad.so,v 10.37 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -80,6 +80,6 @@ pad character in <b>re_padp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e50ce8f47..40e4ed195 100644
--- a/db/docs/api_c/db_set_re_source.html
+++ b/db/docs/api_c/db_set_re_source.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_source.so,v 10.42 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -88,8 +88,9 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>source</b><dd>The backing flat text database file for a Recno database.
-<p>On Windows, the <b>source</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>source</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DB-&gt;set_re_source method
@@ -112,6 +113,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5aaca3aa1..f8a6eb7be 100644
--- a/db/docs/api_c/db_stat.html
+++ b/db/docs/api_c/db_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: db_stat.so,v 10.88 2004/10/29 18:42:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 10.89 2005/02/10 20:02:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,21 +39,28 @@ copied into the memory location to which it refers.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
one of the following values:
<dl compact>
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>Database items read during this operation will have degree 2 isolation.
-This ensures the stability of the data items read during the stat
-operation but permits that data to be modified or deleted by other
-transactions prior to the commit of the specified transaction.
-<dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Database items read during this operation may include 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.
<dt><a name="DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only the values which do not require traversal of the database.
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.
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>Database items read during this operation will have degree 2 isolation.
+This ensures the stability of the data items read during the stat
+operation but permits that data to be modified or deleted by other
+transactions prior to the commit of the specified transaction.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Database items read during this operation will have degree 1 isolation,
+including modified but not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
+database was opened.
</dl>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<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
@@ -195,6 +202,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -202,7 +210,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DB-&gt;stat_print</h3>
-<p>The DB-&gt;stat_print method returns the
+<p>The DB-&gt;stat_print method displays the
database statistical information, as described for the DB-&gt;stat method.
The information is printed to a specified output channel (see the
<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or passed to an
@@ -216,10 +224,15 @@ and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
+<dt><a name="DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only the values which do not require traversal of the database.
+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.
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -231,6 +244,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 be630ebe4..b64570e42 100644
--- a/db/docs/api_c/db_sync.html
+++ b/db/docs/api_c/db_sync.html
@@ -1,5 +1,5 @@
<!--$Id: db_sync.so,v 10.36 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -68,6 +69,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e06eeb517..04bf1e286 100644
--- a/db/docs/api_c/db_truncate.html
+++ b/db/docs/api_c/db_truncate.html
@@ -1,5 +1,5 @@
-<!--$Id: db_truncate.so,v 1.26 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_truncate.so,v 1.29 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,18 +44,17 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>countp</b><dd>The <b>countp</b> parameter references memory into which
- the number of records discarded from the database is copied.
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
-<dl compact>
-<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>
-<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.
+ the number of records discarded from the database is copied.
+<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The DB-&gt;truncate method
@@ -79,6 +78,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c6a7e08c6..d51ef8c65 100644
--- a/db/docs/api_c/db_upgrade.html
+++ b/db/docs/api_c/db_upgrade.html
@@ -1,5 +1,5 @@
<!--$Id: db_upgrade.so,v 10.37 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -100,6 +100,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7e3a34181..c4c3244d2 100644
--- a/db/docs/api_c/db_verify.html
+++ b/db/docs/api_c/db_verify.html
@@ -1,5 +1,5 @@
-<!--$Id: db_verify.so,v 10.29 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_verify.so,v 10.30 2005/03/08 16:29:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -66,9 +66,10 @@ to be verified are found.
the following value:
<dl compact>
<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.
+stream named in the <b>outfile</b> parameter. Key values are written
+for Btree, Hash and Queue databases, but not for Recno databases.
+<p>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>
<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.</p>
@@ -142,6 +143,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 342e301a4..e1489da31 100644
--- a/db/docs/api_c/dbc_class.html
+++ b/db/docs/api_c/dbc_class.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_class.so,v 10.19 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ handle may not be accessed again, regardless of the method's return.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 70e6e8ac2..016e23623 100644
--- a/db/docs/api_c/dbc_close.html
+++ b/db/docs/api_c/dbc_close.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_close.so,v 10.32 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_close.so,v 10.34 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 28164ea8d..42eac1b51 100644
--- a/db/docs/api_c/dbc_count.html
+++ b/db/docs/api_c/dbc_count.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_count.so,v 10.25 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,7 +36,7 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<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.
+ the count of the number of duplicate data items is copied.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
<h3>Errors</h3>
@@ -45,6 +45,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the cursor has not been initialized; or if an
@@ -59,6 +60,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 392a9f272..9a8b6de92 100644
--- a/db/docs/api_c/dbc_del.html
+++ b/db/docs/api_c/dbc_del.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_del.so,v 10.44 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_del.so,v 10.46 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,6 +57,7 @@ to grant a lock in the allowed time.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -81,6 +82,6 @@ specified to <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 84010fd78..0f670831a 100644
--- a/db/docs/api_c/dbc_dup.html
+++ b/db/docs/api_c/dbc_dup.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_dup.so,v 10.32 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,7 @@ may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -68,6 +69,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7ee271096..7fec70baa 100644
--- a/db/docs/api_c/dbc_get.html
+++ b/db/docs/api_c/dbc_get.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_get.so,v 10.112 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_get.so,v 10.114 2005/02/10 20:02:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -190,8 +190,8 @@ flag.</p>
In addition, the following flags may be set by
bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<dl compact>
-<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
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
database was opened.
<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
@@ -275,6 +275,9 @@ in its own read-modify-write cycle, will not result in deadlock.
<p>The DBcursor-&gt;c_get method
may fail and return one of the following non-zero errors:</p>
<dl compact>
+<dt>DB_BUFFER_SMALL<dd>The requested item could not be returned due to undersized buffer.
+</dl>
+<dl compact>
<dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
a deadlock.
<dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
@@ -283,6 +286,7 @@ to grant a lock in the allowed time.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -294,9 +298,6 @@ 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>
-<dl compact>
-<dt>DB_BUFFER_SMALL<dd>The requested item could not be returned due to undersized buffer.
-</dl>
<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_c/dbc_class.html">DBC</a>
@@ -306,6 +307,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1dd508a69..0f40200ae 100644
--- a/db/docs/api_c/dbc_list.html
+++ b/db/docs/api_c/dbc_list.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,10 +10,10 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Database Cursors and Related Methods</h3>
-<!--$Id: m4.methods,v 1.3 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.4 2005/02/09 13:11:05 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
-<!--Db::cursor--><tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
+<!--Db::cursor--><tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor</td></tr>
<!--DbCursor::close--><tr><td><a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a></td><td>Close a cursor</td></tr>
<!--DbCursor::count--><tr><td><a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a></td><td>Return count of duplicates</td></tr>
<!--DbCursor::del--><tr><td><a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a></td><td>Delete by cursor</td></tr>
@@ -21,6 +21,6 @@
<!--DbCursor::get--><tr><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>
<!--DbCursor::put--><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="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5f0bb5e07..d10555ed2 100644
--- a/db/docs/api_c/dbc_put.html
+++ b/db/docs/api_c/dbc_put.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_put.so,v 10.58 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_put.so,v 10.60 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -127,6 +127,7 @@ to grant a lock in the allowed time.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the DB_AFTER, DB_BEFORE or DB_CURRENT flags
@@ -156,6 +157,6 @@ specified to <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbm.html b/db/docs/api_c/dbm.html
index 310fb4db0..e4eb56fb8 100644
--- a/db/docs/api_c/dbm.html
+++ b/db/docs/api_c/dbm.html
@@ -1,5 +1,5 @@
<!--$Id: dbm.so,v 10.26 2003/10/18 19:15:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -217,6 +217,6 @@ specified for other Berkeley DB and C library or system functions.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ebc4a5beb..2141977d1 100644
--- a/db/docs/api_c/dbt_bulk.html
+++ b/db/docs/api_c/dbt_bulk.html
@@ -1,5 +1,5 @@
-<!--$Id: dbt_bulk.so,v 10.12 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbt_bulk.so,v 10.13 2005/12/01 02:27:35 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,16 +22,16 @@
<a name="2"><!--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
+<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:</p>
<dl compact>
<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 <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>
+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 <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>
<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
@@ -47,35 +47,35 @@ 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_class.html">DBT</a> *data,
void *retkey, size_t retklen, 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/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>
+successful call to <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> with the Btree or Hash access methods
+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>
<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> 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>
+successful call to <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> with the Queue or Recno access
+methods 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. Deleted records are not
+included in the results. 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/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ce0891632..75518917c 100644
--- a/db/docs/api_c/dbt_class.html
+++ b/db/docs/api_c/dbt_class.html
@@ -1,6 +1,6 @@
<!--$Id: dbt_class.so,v 10.1 2002/08/24 18:22:30 bostic Exp $-->
<!--$Id: dbt_c.so,v 10.51 2004/10/14 15:58:42 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -132,6 +132,6 @@ those specified by the put call.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbt_package.html b/db/docs/api_c/dbt_package.html
index 788b8bc7d..031fb49bf 100644
--- a/db/docs/api_c/dbt_package.html
+++ b/db/docs/api_c/dbt_package.html
@@ -1,5 +1,5 @@
<!--$Id: dbt_package.so,v 10.2 2004/08/29 14:00:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,6 +18,6 @@
<tr><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a></td><td>Next bulk get retrieval</td></tr>
<tr><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a></td><td>Next bulk get retrieval</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_cdsgroup_begin.html b/db/docs/api_c/env_cdsgroup_begin.html
new file mode 100644
index 000000000..3e961b135
--- /dev/null
+++ b/db/docs/api_c/env_cdsgroup_begin.html
@@ -0,0 +1,60 @@
+<!--$Id: env_cdsgroup_begin.so,v 1.2 2006/08/24 19:02:06 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;cdsgroup_begin</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;cdsgroup_begin</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;cdsgroup_begin(DB_ENV *dbenv, DB_TXN **tid);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;cdsgroup_begin</h3>
+<p>The DB_ENV-&gt;cdsgroup_begin method allocates a locker ID in an
+environment configured for Berkeley DB Concurrent Data Store applications. It copies a pointer to
+a <a href="../api_c/txn_class.html">DB_TXN</a> that uniquely identifies the locker ID into the memory
+to which <b>tid</b> refers. Calling the <a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a> method will
+discard the allocated locker ID.</p>
+<p>See <a href="../ref/cam/intro.html">Berkeley DB Concurrent Data Store applications</a> for more
+information about when this is required.</p>
+<p>The DB_ENV-&gt;cdsgroup_begin method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;cdsgroup_begin method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;cdsgroup_begin method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>ENOMEM<dd>The maximum number of lockers has been reached.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 718ea711f..91e112c9c 100644
--- a/db/docs/api_c/env_class.html
+++ b/db/docs/api_c/env_class.html
@@ -1,5 +1,5 @@
-<!--$Id: env_class.so,v 10.41 2004/08/18 02:33:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_class.so,v 10.45 2005/11/30 19:09:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,7 +30,7 @@ db_env_create(DB_ENV **dbenvp, u_int32_t flags);
<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
+Methods of the DB_ENV handle are used to configure the
environment as well as to operate on subsystems and databases in the
environment.</p>
<p>DB_ENV handles are free-threaded if the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag
@@ -40,11 +40,11 @@ remains open that is using it as a reference (for example, <a href="../api_c/db_
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>
-<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_create function creates a DB_ENV structure that
+is the handle for a Berkeley DB environment. This function allocates memory
+for the structure, returning a pointer to the structure in the memory
+to which <b>dbenvp</b> refers. To release the allocated memory and
+discard the handle, call 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.</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
@@ -74,6 +74,6 @@ DB_ENV
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b79e8ca76..5fe2f2a9a 100644
--- a/db/docs/api_c/env_close.html
+++ b/db/docs/api_c/env_close.html
@@ -1,5 +1,5 @@
<!--$Id: env_close.so,v 10.38 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -78,6 +78,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_dbremove.html b/db/docs/api_c/env_dbremove.html
index 7b8312e32..1ac2676d0 100644
--- a/db/docs/api_c/env_dbremove.html
+++ b/db/docs/api_c/env_dbremove.html
@@ -1,5 +1,5 @@
-<!--$Id: env_dbremove.so,v 10.48 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 10.49 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,8 +47,9 @@ and 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be removed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be removed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
the following value:
<dl compact>
@@ -56,9 +57,14 @@ the following value:
changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+DB_AUTO_COMMIT flag is specified,
+the operation will be implicitly transaction protected.
</dl>
<h3>Environment Variables</h3>
<p>The
@@ -92,6 +98,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f441ea8d7..4c8177b10 100644
--- a/db/docs/api_c/env_dbrename.html
+++ b/db/docs/api_c/env_dbrename.html
@@ -1,5 +1,5 @@
-<!--$Id: env_dbrename.so,v 10.36 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 10.37 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,8 +49,9 @@ and 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be renamed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be renamed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
the following value:
<dl compact>
@@ -59,9 +60,14 @@ changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
<dt><b>newname</b><dd>The <b>newname</b> parameter is the new name of the database or file.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+DB_AUTO_COMMIT flag is specified,
+the operation will be implicitly transaction protected.
</dl>
<h3>Environment Variables</h3>
<p>The
@@ -95,6 +101,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e1a0f3ba7..463f61269 100644
--- a/db/docs/api_c/env_err.html
+++ b/db/docs/api_c/env_err.html
@@ -1,5 +1,5 @@
-<!--$Id: env_err.so,v 10.32 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_err.so,v 10.34 2006/04/27 20:17:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,8 +33,8 @@ DB_ENV-&gt;errx(DB_ENV *dbenv, const char *fmt, ...);
<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>
+<p>The <a href="../api_c/db_err.html">DB-&gt;err</a> and DB_ENV-&gt;err methods constructs an error message
+consisting of the following elements:</p>
<blockquote><dl compact>
<dt>An optional prefix string<dd>If no error callback function has been set using the
<a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a> method, any prefix string specified using the
@@ -48,6 +48,10 @@ are converted for output.
<b>error</b> value, as returned by the <a href="../api_c/env_strerror.html">db_strerror</a> method.
</dl>
</blockquote>
+<p>The <a href="../api_c/db_err.html">DB-&gt;errx</a> and DB_ENV-&gt;errx methods are the same as the
+<a href="../api_c/db_err.html">DB-&gt;err</a> and DB_ENV-&gt;err methods, except they do not append the
+final separator characters and standard error string to the error
+message.</p>
<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
@@ -65,17 +69,6 @@ DB_ENV-&gt;err and <a href="../api_c/db_err.html">DB-&gt;err</a> methods will
string.
<dt><b>fmt</b><dd>The <b>fmt</b> parameter is an optional printf-style message to display.
</dl>
-<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.</p>
-<h3>Parameters</h3>
-<dl compact>
-<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.
-<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>
@@ -85,6 +78,6 @@ string.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_event_notify.html b/db/docs/api_c/env_event_notify.html
new file mode 100644
index 000000000..c5471d823
--- /dev/null
+++ b/db/docs/api_c/env_event_notify.html
@@ -0,0 +1,93 @@
+<!--$Id: env_event_notify.so,v 10.9 2006/06/27 22:49:29 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;set_event_notify</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_event_notify</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;set_event_notify(DB_ENV *dbenv,
+ void (*db_event_fcn)(DB_ENV *dbenv, u_int32_t event, void *event_info));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_event_notify</h3>
+<p>The DB_ENV-&gt;set_event_notify method configures a callback function which
+is called to notify the process of specific Berkeley DB events.</p>
+<p>The DB_ENV-&gt;set_event_notify 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_event_notify method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_event_notify method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>db_event_fcn</b><dd>The <b>db_event_fcn</b> parameter is the application's event
+notification function. The function takes three parameters:
+<dl compact>
+<dt>dbenv<dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<dt>event<dd>The <b>event</b> parameter is one of the following values:
+<dl compact>
+<dt><a name="DB_EVENT_PANIC">DB_EVENT_PANIC</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). 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.
+<p>When <b>event</b> is set to DB_EVENT_PANIC, the database
+environment has failed. All threads of control in the database
+environment should exit the environment, and recovery should be run.</p>
+<dt><a name="DB_EVENT_REP_CLIENT">DB_EVENT_REP_CLIENT</a><dd>The local site is now a replication client.
+<dt><a name="DB_EVENT_REP_MASTER">DB_EVENT_REP_MASTER</a><dd>The local site is now the master site of its replication group. It is
+the application's responsibility to begin acting as the master environment.
+<dt><a name="DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a><dd>The replication group of which this site is a member has just established a
+new master; the local site is not the new master. The
+<b>event_info</b> parameter points to an integer containing the
+environment ID of the new master.
+<p>The DB_EVENT_REP_NEWMASTER event is provided only to applications using
+the replication manager support.</p>
+<dt><a name="DB_EVENT_REP_STARTUPDONE">DB_EVENT_REP_STARTUPDONE</a><dd>The client has completed startup synchronization and is now processing
+live log records received from the master.
+<dt><a name="DB_EVENT_WRITE_FAILED">DB_EVENT_WRITE_FAILED</a><dd>A Berkeley DB write to stable storage failed.
+</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
+<dt>event_info<dd>The <b>event_info</b> parameter may reference memory which contains
+additional information describing an event. By default,
+<b>event_info</b> is NULL; specific events may pass non-NULL values,
+in which case the event will also describe the memory's structure.
+</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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/env_failchk.html b/db/docs/api_c/env_failchk.html
new file mode 100644
index 000000000..f1a8d8ba7
--- /dev/null
+++ b/db/docs/api_c/env_failchk.html
@@ -0,0 +1,92 @@
+<!--$Id: env_failchk.so,v 10.5 2006/05/26 20:40:50 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;failchk</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;failchk</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;dbenv_failchk(DB_ENV *dbenv, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;failchk</h3>
+<p>The DB_ENV-&gt;failchk method checks for threads of control (either a true
+thread or a process) that have exited while manipulating Berkeley DB library
+data structures, while holding a logical database lock, or with an
+unresolved transaction (that is, a transaction that was never aborted
+or committed). For more information, see <a href="../ref/cam/app.html">Architecting Data Store and Concurrent Data Store applications</a>, and
+<a href="../ref/transapp/app.html">Architecting Transactional Data Store
+applications</a>.</p>
+<p>The DB_ENV-&gt;failchk method is based on the "thread_id" and "is_alive"
+functions specified to the <a href="../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a> method. Applications
+calling the DB_ENV-&gt;failchk method must have already called the
+<a href="../api_c/env_set_isalive.html">DB_ENV-&gt;set_isalive</a> method, on the same <a href="../api_c/env_class.html">DB_ENV</a>, and must have
+configured their database environment using the
+<a href="../api_c/env_set_thread_count.html">DB_ENV-&gt;set_thread_count</a> method.</p>
+<p>If DB_ENV-&gt;failchk determines a thread of control exited while
+holding database read locks, it will release those locks. If
+DB_ENV-&gt;failchk determines a thread of control exited with an
+unresolved transaction, the transaction will be aborted. In either of
+these cases, DB_ENV-&gt;failchk will return 0 and the application may
+continue to use the database environment.</p>
+<p>In either of these cases, the DB_ENV-&gt;failchk method will also report
+the process and thread IDs associated with any released locks or
+aborted transactions. The information is printed to a specified output
+channel (see the <a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or
+passed to an application callback function (see the
+<a href="../api_c/env_set_msgcall.html">DB_ENV-&gt;set_msgcall</a> method for more information).</p>
+<p>If DB_ENV-&gt;failchk determines a thread of control has exited such
+that database environment recovery is required, it will return
+<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>. In this case, the application should not
+continue to use the database environment. For a further description as
+to the actions the application should take when this failure occurs, see
+<a href="../ref/cam/fail.html">Handling failure in Data Store and
+Concurrent Data Store applications</a>, and
+<a href="../ref/transapp/fail.html">Handling failure in Transactional
+Data Store applications</a>.</p>
+<p>The DB_ENV-&gt;failchk 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;failchk method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<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;failchk method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/env_fileid_reset.html b/db/docs/api_c/env_fileid_reset.html
new file mode 100644
index 000000000..4d463aedd
--- /dev/null
+++ b/db/docs/api_c/env_fileid_reset.html
@@ -0,0 +1,72 @@
+<!--$Id: env_fileid_reset.so,v 1.3 2005/12/13 16:48:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;fileid_reset</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;fileid_reset</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;fileid_reset(DB_ENV *dbenv, const char *file, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;fileid_reset</h3>
+<p>The DB_ENV-&gt;fileid_reset method allows database files to be copied, and
+then the copy used in the same database environment as the original.</p>
+<p>All databases contain an ID string used to identify the database in the
+database environment cache. If a physical database file is copied, and
+used in the same environment as another file with the same ID strings,
+corruption can occur. The DB_ENV-&gt;fileid_reset method creates new ID
+strings for all of the databases in the physical file.</p>
+<p>The DB_ENV-&gt;fileid_reset method modifies the physical file, in-place.
+Applications should not reset IDs in files that are currently in use.</p>
+<p>The DB_ENV-&gt;fileid_reset method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;fileid_reset method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>file</b><dd>The name of the physical file in which new file IDs are to be created.
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt>DB_ENCRYPT<dd>The file contains encrypted databases.
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;fileid_reset method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 44d3996a5..e6ec0358c 100644
--- a/db/docs/api_c/env_list.html
+++ b/db/docs/api_c/env_list.html
@@ -1,5 +1,5 @@
<!--$Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,16 +10,20 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Database Environments and Related Methods</h3>
-<!--$Id: m4.methods,v 10.7 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 10.17 2006/08/25 16:40:00 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Environment Operations</th><th>Description</th></tr>
<!--DbEnv::--><tr><td><a href="../api_c/env_class.html">db_env_create</a></td><td>Create an environment handle</td></tr>
+<!--Db::get_env--><tr><td><a href="../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return <a href="../api_c/db_class.html">DB</a>'s underlying <a href="../api_c/env_class.html">DB_ENV</a> handle</td></tr>
<!--DbEnv::close--><tr><td><a href="../api_c/env_close.html">DB_ENV-&gt;close</a></td><td>Close an environment</td></tr>
<!--DbEnv::dbremove--><tr><td><a href="../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a></td><td>Remove a database</td></tr>
<!--DbEnv::dbrename--><tr><td><a href="../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a></td><td>Rename a database</td></tr>
<!--DbEnv::err--><tr><td><a href="../api_c/env_err.html">DB_ENV-&gt;err</a>, <a href="../api_c/env_err.html">DB_ENV-&gt;errx</a></td><td>Error message</td></tr>
+<!--DbEnv::failchk--><tr><td><a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a></td><td>Check for thread failure</td></tr>
+<!--DbEnv::fileid_reset--><tr><td><a href="../api_c/env_fileid_reset.html">DB_ENV-&gt;fileid_reset</a></td><td>Reset database file IDs</td></tr>
<!--DbEnv::get_home--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;get_home</a></td><td>Return environment's home directory</td></tr>
-<!--DbEnv::get_open_flags--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;get_open_flags</a></td><td>Return the flags with which the environment was opened</td></tr>
+<!--DbEnv::get_open_flags--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;get_open_flags</a></td><td>Return flags with which the environment was opened</td></tr>
+<!--DbEnv::lsn_reset--><tr><td><a href="../api_c/env_lsn_reset.html">DB_ENV-&gt;lsn_reset</a></td><td>Reset database file LSNs</td></tr>
<!--DbEnv::open--><tr><td><a href="../api_c/env_open.html">DB_ENV-&gt;open</a></td><td>Open an environment</td></tr>
<!--DbEnv::remove--><tr><td><a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a></td><td>Remove an environment</td></tr>
<!--DbEnv::stat_print--><tr><td><a href="../api_c/env_stat.html">DB_ENV-&gt;stat_print</a></td><td>Environment statistics</td></tr>
@@ -35,16 +39,19 @@
<!--DbEnv::set_errfile--><tr><td><a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>, <a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a></td><td>Set error and informational message FILE</td></tr>
<!--DbEnv::set_error_stream-->
<!--DbEnv::set_errpfx--><tr><td><a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<!--DbEnv::set_event_notify--><tr><td><a href="../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a></td><td>Set event notification callback</td></tr>
<!--DbEnv::set_feedback--><tr><td><a href="../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
<!--DbEnv::set_flags--><tr><td><a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a></td><td>Environment configuration</td></tr>
-<!--DbEnv::set_paniccall--><tr><td><a href="../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
+<!--DbEnv::set_isalive--><tr><td><a href="../api_c/env_set_isalive.html">DB_ENV-&gt;set_isalive</a></td><td>Set thread is-alive callback</td></tr>
<!--DbEnv::set_rpc_server--><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>
<!--DbEnv::set_shm_key--><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>
-<!--DbEnv::set_tas_spins--><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>
+<!--DbEnv::set_thread_id--><tr><td><a href="../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a></td><td>Set thread of control ID function</td></tr>
+<!--DbEnv::set_thread_count--><tr><td><a href="../api_c/env_set_thread_count.html">DB_ENV-&gt;set_thread_count</a></td><td>Set approximate thread count</td></tr>
+<!--DbEnv::set_thread_id_string--><tr><td><a href="../api_c/env_set_thread_id_string.html">DB_ENV-&gt;set_thread_id_string</a></td><td>Set thread of control ID format function</td></tr>
<!--DbEnv::set_timeout--><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>
<!--DbEnv::set_tmp_dir--><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>
<!--DbEnv::set_verbose--><tr><td><a href="../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a></td><td>Set verbose messages</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_lsn_reset.html b/db/docs/api_c/env_lsn_reset.html
new file mode 100644
index 000000000..9ba115c25
--- /dev/null
+++ b/db/docs/api_c/env_lsn_reset.html
@@ -0,0 +1,78 @@
+<!--$Id: env_lsn_reset.so,v 1.4 2005/12/13 16:48:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;lsn_reset</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;lsn_reset</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;lsn_reset(DB_ENV *dbenv, const char *file, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lsn_reset</h3>
+<p>The DB_ENV-&gt;lsn_reset method allows database files to be moved from one
+transactional database environment to another.</p>
+<p>Database pages in transactional database environments contain references
+to the environment's log files (that is, log sequence numbers, or LSNs).
+Copying or moving a database file from one database environment to
+another, and then modifying it, can result in data corruption if the
+LSNs are not first cleared.</p>
+<p>Note that LSNs should be reset before moving or copying the database
+file into a new database environment, rather than moving or copying the
+database file and then resetting the LSNs. Berkeley DB has consistency checks
+that may be triggered if an application calls DB_ENV-&gt;lsn_reset
+on a database in a new environment when the database LSNs still reflect
+the old environment.</p>
+<p>The DB_ENV-&gt;lsn_reset method modifies the physical file, in-place.
+Applications should not reset LSNs in files that are currently in use.</p>
+<p>The DB_ENV-&gt;lsn_reset method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;lsn_reset method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>file</b><dd>The name of the physical file in which the LSNs are to be cleared.
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt>DB_ENCRYPT<dd>The file contains encrypted databases.
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lsn_reset method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3482118c1..9d09bd8ab 100644
--- a/db/docs/api_c/env_open.html
+++ b/db/docs/api_c/env_open.html
@@ -1,5 +1,5 @@
-<!--$Id: env_open.so,v 10.98 2004/10/14 15:07:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_open.so,v 10.111 2006/08/02 17:39:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,7 +39,7 @@ 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
+If DB_ENV-&gt;open fails, the <a href="../api_c/env_close.html">DB_ENV-&gt;close</a> method must be called
to discard the <a href="../api_c/env_class.html">DB_ENV</a> handle.
</p>
<h3>Parameters</h3>
@@ -50,8 +50,9 @@ 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>On Windows, the <b>db_home</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>db_home</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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.
@@ -59,11 +60,20 @@ The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'
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>
+indicates which of the Berkeley DB subsystems should be initialized.</p>
+<p>The choice of subsystems initialized for a Berkeley DB database environment
+is specified by the thread of control initially creating the
+environment. Any subsequent thread of control joining the environment
+will automatically be configured to use the same subsystems as were
+created in the environment (unless the thread of control requests a
+subsystem not available in the environment, which will fail).
+Applications joining an environment, able to adapt to whatever
+subsystems have been configured in the environment, should open the
+environment without specifying any subsystem flags. Applications
+joining an environment, requiring specific subsystems from their
+environments, should open the environment specifying those specific
+subsystem flags.</p>
<dl compact>
-<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
-the environment supports.
<dt><a name="DB_INIT_CDB">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
@@ -95,11 +105,14 @@ DB_INIT_TXN flag implies the DB_INIT_LOG flag.
the environment is initialized:</p>
<dl compact>
<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.
+use. If this flag is set, the DB_CREATE and DB_INIT_TXN
+flags must also be set, because the regions will be removed and
+re-created, and transactions are required for application recovery.
<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.
+normal use. If this flag is set, the DB_CREATE and
+DB_INIT_TXN flags must also be set, because the regions will be
+removed and re-created, and transactions are required for application
+recovery.
</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
@@ -145,27 +158,45 @@ example, users with a user-ID of 0 on UNIX systems).
<dt><a name="DB_CREATE">DB_CREATE</a><dd>Cause Berkeley DB subsystems to create any underlying files, as necessary.
<dt><a name="DB_LOCKDOWN">DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory-mapped databases into
memory.
-<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 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.
+<dt><a name="DB_PRIVATE">DB_PRIVATE</a><dd>Allocate region memory from the heap instead of from memory backed by
+the filesystem or system shared memory.
+<p>This flag implies 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 accessible to more than a single process. Second, mutexes are only
+configured to work between threads.</p>
<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 DB_PRIVATE flag should not be
-specified.</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.
+application and Berkeley DB utilities (for example, <a href="../utility/db_archive.html">db_archive</a>,
+<a href="../utility/db_checkpoint.html">db_checkpoint</a> or <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>See <a href="../ref/env/region.html">Shared Memory Regions</a> for more
+information.</p>
+<dt><a name="DB_REGISTER">DB_REGISTER</a><dd>Check to see if recovery needs to be performed before opening the
+database environment. (For this check to be accurate, all processes
+using the environment must specify DB_REGISTER when opening the
+environment.) If recovery needs to be performed for any reason
+(including the initial use of the DB_REGISTER flag), and
+DB_RECOVER is also specified, recovery will be performed and the
+open will proceed normally. If recovery needs to be performed and
+DB_RECOVER is not specified, <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> will be
+returned. If recovery does not need to be performed, the
+DB_RECOVER flag will be ignored. See
+<a href="../ref/transapp/app.html">Architecting Transactional Data Store
+applications</a> for more information.
+<dt><a name="DB_SYSTEM_MEM">DB_SYSTEM_MEM</a><dd>Allocate region memory from system shared memory instead of from heap
+memory or memory backed by the filesystem.
+<p>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_c/env_class.html">DB_ENV</a> handle returned by DB_ENV-&gt;open to be
<i>free-threaded</i>; that is, concurrently usable by multiple
threads in the address space. The DB_THREAD flag should be specified
-if the <a href="../api_c/env_class.html">DB_ENV</a> handle will be concurrently used by multiple
-threads of control or if multiple DB handles, opened within the database
-environment, will be used concurrently.
+if the <a href="../api_c/env_class.html">DB_ENV</a> handle will be concurrently used by more than one
+thread in the process, or if any <a href="../api_c/db_class.html">DB</a> handles opened in the scope
+of the <a href="../api_c/env_class.html">DB_ENV</a> handle will be concurrently used by more than one
+thread in the process.
</dl>
<dt><b>mode</b><dd>On Windows systems, the mode parameter is ignored.
<p>On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, files created by Berkeley DB
@@ -183,6 +214,10 @@ default mode of readable and writable by both owner and group.</p>
<p>The DB_ENV-&gt;open method
may fail and return one of the following non-zero errors:</p>
<dl compact>
+<dt>DB_RUNRECOVERY<dd>The DB_REGISTER flag was specified, a failure has occurred, and no
+recovery flag was specified.
+</dl>
+<dl compact>
<dt>DB_VERSION_MISMATCH<dd>The version of the Berkeley DB library doesn't match the version that created
the database environment.
</dl>
@@ -197,8 +232,12 @@ An incorrectly formatted <b>NAME VALUE</b> entry or line was found; or if an
invalid flag value or parameter was specified.
</dl>
<dl compact>
-<dt>ENOSPC<dd>HP-UX only: a previously created Berkeley DB environment for this process still
-exists.
+<dt>ENOSPC<dd>HP-UX only:
+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; that is, calls to DB_ENV-&gt;open will fail if the
+specified Berkeley DB environment has been opened and not subsequently closed.
</dl>
<dl compact>
<dt>ENOENT<dd>The file or directory does not exist.
@@ -231,6 +270,6 @@ open method flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 82f79ca80..fbfcf3b27 100644
--- a/db/docs/api_c/env_remove.html
+++ b/db/docs/api_c/env_remove.html
@@ -1,5 +1,5 @@
<!--$Id: env_remove.so,v 10.44 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -73,8 +73,9 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>db_home</b><dd>The <b>db_home</b> parameter names the database environment to be removed.
-<p>On Windows, the <b>db_home</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>db_home</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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:
<dl compact>
@@ -115,6 +116,6 @@ may fail and return one of the following non-zero errors:</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 99836916a..41d20f753 100644
--- a/db/docs/api_c/env_set_alloc.html
+++ b/db/docs/api_c/env_set_alloc.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_alloc.so,v 1.22 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -90,6 +90,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a0fd8a3aa..1643eaac1 100644
--- a/db/docs/api_c/env_set_app_dispatch.html
+++ b/db/docs/api_c/env_set_app_dispatch.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_app_dispatch.so,v 10.54 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -97,6 +97,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8d50a3188..60093c69a 100644
--- a/db/docs/api_c/env_set_cachesize.html
+++ b/db/docs/api_c/env_set_cachesize.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_cachesize.so,v 10.49 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_cachesize.so,v 10.50 2005/01/10 07:18:43 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,21 +40,22 @@ 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^18 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
+used as specified. The maximum size of a single cache is 4GB on 32-bit
+systems and 10TB on 64-bit systems. (All sizes are in powers-of-two,
+that is, 256KB is 2^18 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 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 configured 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.
@@ -102,11 +103,11 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>bytesp</b><dd>The <b>bytesp</b> parameter references memory into which
- the additional bytes of memory in the cache is copied.
+ the additional bytes of memory in the cache is copied.
<dt><b>gbytesp</b><dd>The <b>gbytesp</b> parameter references memory into which
- the gigabytes of memory in the cache is copied.
+ the gigabytes of memory in the cache is copied.
<dt><b>ncachep</b><dd>The <b>ncachep</b> parameter references memory into which
- the number of caches is copied.
+ the number of caches is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -117,6 +118,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8048f43c3..3de0dc2cd 100644
--- a/db/docs/api_c/env_set_data_dir.html
+++ b/db/docs/api_c/env_set_data_dir.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_data_dir.so,v 10.28 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,10 +41,10 @@ path specified.</p>
either by absolute paths or relative to the environment home directory.
See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more
information.</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>The database environment's data directories may also be configured 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 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
@@ -63,8 +63,9 @@ and 0 on success.
<dl compact>
<dt><b>dir</b><dd>The <b>dir</b> parameter is a directory to be used as a location for
database files.
-<p>On Windows, the <b>dir</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>dir</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;set_data_dir method
@@ -96,6 +97,6 @@ NULL-terminated array of directories in <b>dirpp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7f3f8ff31..ff7e63170 100644
--- a/db/docs/api_c/env_set_encrypt.html
+++ b/db/docs/api_c/env_set_encrypt.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_encrypt.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -92,6 +92,6 @@ encryption flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7b6f57b48..776359f91 100644
--- a/db/docs/api_c/env_set_errcall.html
+++ b/db/docs/api_c/env_set_errcall.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_errcall.so,v 10.37 2004/10/12 20:00:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errcall.so,v 10.39 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,6 +45,9 @@ 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>
+<p>The DB_ENV-&gt;set_errcall 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_errcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -57,6 +60,10 @@ reporting function. The function takes three parameters:
<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>).
<dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -67,6 +74,6 @@ reporting function. The function takes three parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cbcd57649..4336b62de 100644
--- a/db/docs/api_c/env_set_errfile.html
+++ b/db/docs/api_c/env_set_errfile.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_errfile.so,v 10.34 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errfile.so,v 10.36 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,6 +47,9 @@ 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>
+<p>The DB_ENV-&gt;set_errfile 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_errfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -56,9 +59,18 @@ 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 .</p>
+<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>
+<dl compact>
+<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>
@@ -68,6 +80,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 971b17a49..8da220984 100644
--- a/db/docs/api_c/env_set_errpfx.html
+++ b/db/docs/api_c/env_set_errpfx.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_errpfx.so,v 10.33 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errpfx.so,v 10.34 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,9 @@ 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 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_errpfx method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -67,6 +70,6 @@ error prefix in <b>errpfxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 22d5094e1..5ae94d5c6 100644
--- a/db/docs/api_c/env_set_feedback.html
+++ b/db/docs/api_c/env_set_feedback.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_feedback.so,v 10.42 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_feedback.so,v 10.43 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,6 +59,10 @@ parameter may take on any of the following values:
<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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -69,6 +73,6 @@ been completed, specified as an integer value between 0 and 100.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2ec68ced4..c18435a1a 100644
--- a/db/docs/api_c/env_set_flags.html
+++ b/db/docs/api_c/env_set_flags.html
@@ -1,5 +1,5 @@
<!--$Id-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,10 +31,10 @@ DB_ENV-&gt;get_flags(DB_ENV *dbenv, u_int32_t *flagsp);
<hr size=1 noshade>
<h3>Description: DB_ENV-&gt;set_flags</h3>
<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 method flag parameter as a string; for example, "set_flags
+<p>The database environment's flag values may also be configured 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
@@ -48,11 +48,9 @@ and 0 on success.
<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:
<dl compact>
-<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.
+<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>If set, <a href="../api_c/db_class.html">DB</a> handle operations for which no explicit transaction
+handle was specified, and which modify databases in the database
+environment, will be automatically enclosed within a transaction.
<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).
@@ -97,15 +95,37 @@ 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="5"><!--meow--></a>
+<dt><a name="DB_DSYNC_DB">DB_DSYNC_DB</a><dd>Configure Berkeley DB to flush database writes to the backing disk before
+returning from the write system call, rather than flushing database
+writes explicitly in a separate system call, as necessary. This is only
+available on some systems (for example, systems supporting the
+IEEE/ANSI Std 1003.1 (POSIX) standard O_DSYNC flag, or systems supporting the Windows
+FILE_FLAG_WRITE_THROUGH flag). This flag may result in inaccurate file
+modification times and other file-level information for Berkeley DB database
+files. This flag will almost certainly result in a performance decrease
+on most systems. This flag is only applicable to certain filesysystem
+(for example, the Veritas VxFS filesystem), where the filesystem's
+support for trickling writes back to stable storage behaves badly (or
+more likely, has been misconfigured).
+<p>Calling DB_ENV-&gt;set_flags with the DB_DSYNC_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_DSYNC_DB flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_DSYNC_DB flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="6"><!--meow--></a>
<dt><a name="DB_DSYNC_LOG">DB_DSYNC_LOG</a><dd>Configure Berkeley DB to flush log writes to the backing disk before returning
from the write system call, rather than flushing log writes explicitly
-in a separate system call. This is only available on some systems (for
-example, systems supporting the IEEE/ANSI Std 1003.1 (POSIX) standard O_DSYNC flag,
-or systems supporting the Win32 FILE_FLAG_WRITE_THROUGH flag). This
-configuration may result in inaccurate file modification times and other
-file-level information for Berkeley DB log files. This configuration may
-offer a performance increase on some systems and a performance decrease
-on others.
+in a separate system call, as necessary. This is only available on some
+systems (for example, systems supporting the IEEE/ANSI Std 1003.1 (POSIX) standard
+O_DSYNC flag, or systems supporting the Windows FILE_FLAG_WRITE_THROUGH
+flag). This flag may result in inaccurate file modification times and
+other file-level information for Berkeley DB log files. This flag may offer
+a performance increase on some systems and a performance decrease on
+others.
<p>Calling DB_ENV-&gt;set_flags with the DB_DSYNC_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).
@@ -115,7 +135,7 @@ or the flag should be specified in the <b>DB_CONFIG</b> configuration
file.</p>
<p>The DB_DSYNC_LOG flag may be used to configure Berkeley DB at any time during
the life of the application.</p>
-<a name="6"><!--meow--></a>
+<a name="7"><!--meow--></a>
<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.
@@ -124,7 +144,7 @@ database environment, including all threads of control accessing the
database environment.</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="7"><!--meow--></a>
+<a name="8"><!--meow--></a>
<dt><a name="DB_LOG_INMEMORY">DB_LOG_INMEMORY</a><dd>If set, maintain transaction logs in memory rather than on disk. This
means that transactions exhibit the ACI (atomicity, consistency, and
isolation) properties, but not D (durability); that is, database
@@ -145,7 +165,7 @@ database environment, including all threads of control accessing the
database environment.</p>
<p>The DB_LOG_INMEMORY 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="8"><!--meow--></a>
+<a name="9"><!--meow--></a>
<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.
@@ -155,7 +175,20 @@ 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>
+<dt><a name="DB_MULTIVERSION">DB_MULTIVERSION</a><dd>If set, all databases in the environment will be opened as if
+DB_MULTIVERSION is passed to <a href="../api_c/db_open.html">DB-&gt;open</a>. This flag will
+be ignored for queue databases for which DB_MULTIVERSION is not
+supported.
+<p>Calling DB_ENV-&gt;set_flags with the DB_MULTIVERSION 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_MULTIVERSION flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_MULTIVERSION flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="10"><!--meow--></a>
<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
@@ -169,7 +202,7 @@ 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>
+<a name="11"><!--meow--></a>
<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
@@ -192,7 +225,7 @@ 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>
+<a name="12"><!--meow--></a>
<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
@@ -204,7 +237,7 @@ 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>
+<a name="13"><!--meow--></a>
<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
@@ -237,7 +270,7 @@ 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>
+<a name="14"><!--meow--></a>
<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,
@@ -256,7 +289,20 @@ 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>
+<dt><a name="DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a><dd>If set, all transactions in the environment will be started as if
+DB_TXN_SNAPSHOT were passed to <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>, and all
+non-transactional cursors will be opened as if DB_TXN_SNAPSHOT
+were passed to <a href="../api_c/db_cursor.html">DB-&gt;cursor</a>.
+<p>Calling DB_ENV-&gt;set_flags with the DB_TXN_SNAPSHOT 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_SNAPSHOT flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_TXN_SNAPSHOT flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="15"><!--meow--></a>
<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,
@@ -275,7 +321,7 @@ 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="15"><!--meow--></a>
+<a name="16"><!--meow--></a>
<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.
@@ -322,6 +368,6 @@ configuration flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_isalive.html b/db/docs/api_c/env_set_isalive.html
new file mode 100644
index 000000000..72e5ea44a
--- /dev/null
+++ b/db/docs/api_c/env_set_isalive.html
@@ -0,0 +1,83 @@
+<!--$Id: env_set_isalive.so,v 10.4 2006/01/27 16:13:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;set_isalive</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_isalive</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;set_isalive(DB_ENV *dbenv,
+ int (*is_alive)(DB_ENV *dbenv, pid_t pid, db_threadid_t tid, u_int32_t flags));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_isalive</h3>
+<p>Declare a function that returns if a thread of control (either a true
+thread or a process) is still running. The DB_ENV-&gt;set_isalive method
+supports the <a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method. For more information, see
+<a href="../ref/cam/app.html">Architecting Data Store and Concurrent
+Data Store applications</a>, and <a href="../ref/transapp/app.html">Architecting Transactional Data Store applications</a>.</p>
+<p>The DB_ENV-&gt;set_isalive 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_isalive method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_isalive method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>is_alive</b><dd>The <b>is_alive</b> parameter is a function which returns non-zero if
+the thread of control, identified by the <b>pid</b> and <b>tid</b>
+arguments, is still running. The function takes four arguments:
+<dl compact>
+<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment
+handle, allowing application access to the application-private fields
+of that object.
+<dt><b>pid</b><dd>The <b>pid</b> parameter is a process ID returned by the function
+specified to the <a href="../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a> method.
+<dt><b>tid</b><dd>The <b>tid</b> parameter is a thread ID returned by the function
+specified to the <a href="../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a> method.
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt><a name="DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a><dd>Return only if the process is alive, the thread ID should be ignored.
+</dl>
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_isalive method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7d2f08b35..39d0d3bc6 100644
--- a/db/docs/api_c/env_set_lg_bsize.html
+++ b/db/docs/api_c/env_set_lg_bsize.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_lg_bsize.so,v 10.35 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_bsize.so,v 10.36 2006/08/30 10:04:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,11 +32,12 @@ DB_ENV-&gt;get_lg_bsize(DB_ENV *dbenv, u_int32_t *lg_bsizep);
<h3>Description: DB_ENV-&gt;set_lg_bsize</h3>
<p>Set the size of the in-memory log buffer, in bytes.</p>
<p>When the logging subsystem is configured for on-disk logging, the
-default size of the in-memory log buffer is 32KB. 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>
+default size of the in-memory log buffer is approximately 32KB. 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>When the logging subsystem is configured for in-memory logging, the
default size of the in-memory log buffer is 1MB. Log information is
stored in-memory until the storage space fills up or transaction abort
@@ -49,10 +50,10 @@ should ensure the in-memory log buffer size is large enough that no
transaction will ever span the entire buffer, and avoid a state where
the in-memory buffer is full and no space can be freed because a
transaction that started in the first log "file" is still active.</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.
+<p>The database environment's log buffer size may also be configured 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>
@@ -103,6 +104,6 @@ size of the log buffer, in bytes in <b>lg_bsizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 39f47e6b0..03113b545 100644
--- a/db/docs/api_c/env_set_lg_dir.html
+++ b/db/docs/api_c/env_set_lg_dir.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lg_dir.so,v 10.25 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,10 +38,10 @@ environment home directory. See <a href="../ref/env/naming.html">Berkeley DB F
<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.
+<p>The database environment's logging directory may also be configured 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>
@@ -61,8 +61,9 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>dir</b><dd>The <b>dir</b> parameter is the directory used to store the logging files.
-<p>On Windows, the <b>dir</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>dir</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;set_lg_dir method
@@ -94,6 +95,6 @@ log directory in <b>dirp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7a40ed80c..aff55f831 100644
--- a/db/docs/api_c/env_set_lg_max.html
+++ b/db/docs/api_c/env_set_lg_max.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lg_max.so,v 10.45 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,10 +49,10 @@ the in-memory buffer is full and no space can be freed because a
transaction that started in the first log "file" is still active.</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.
+<p>The database environment's log file size may also be configured 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>
@@ -104,6 +104,6 @@ maximum log file size in <b>lg_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lg_mode.html b/db/docs/api_c/env_set_lg_mode.html
new file mode 100644
index 000000000..63b54011e
--- /dev/null
+++ b/db/docs/api_c/env_set_lg_mode.html
@@ -0,0 +1,89 @@
+<!--$Id: env_set_lg_mode.so,v 1.1 2004/12/15 15:46:44 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;set_lg_filemode</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_lg_filemode</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;set_lg_filemode(DB_ENV *dbenv, int lg_mode);
+<p>
+int
+DB_ENV-&gt;get_lg_filemode(DB_ENV *dbenv, int *lg_modep);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lg_filemode</h3>
+<p>Set the absolute file mode for created log files. This method is
+<b>only</b> useful for the rare Berkeley DB application that does not
+control its umask value.</p>
+<p>Normally, if Berkeley DB applications set their umask appropriately, all
+processes in the application suite will have read permission on the log
+files created by any process in the application suite. However, if the
+Berkeley DB application is a library, a process using the library might set
+its umask to a value preventing other processes in the application suite
+from reading the log files it creates. In this rare case, the
+DB_ENV-&gt;set_lg_filemode method can be used to set the mode of created
+log files to an absolute value.</p>
+<p>The database environment's log file mode may also be configured 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_filemode", one or more whitespace
+characters, and the absolute mode of created log files.
+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_lg_filemode 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_filemode method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_lg_filemode method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>lg_filemode</b><dd>The <b>lg_filemode</b> parameter is the absolute mode of the created
+log file.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lg_filemode</h3>
+<p>The DB_ENV-&gt;set_lg_filemode method returns the log file mode.</p>
+<p>The DB_ENV-&gt;set_lg_filemode method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_lg_filemode method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>lg_modep</b><dd>The DB_ENV-&gt;set_lg_filemode method returns the
+log file mode in <b>lg_modep</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2be4c021a..be05ff5b0 100644
--- a/db/docs/api_c/env_set_lg_regionmax.html
+++ b/db/docs/api_c/env_set_lg_regionmax.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_lg_regionmax.so,v 10.22 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_regionmax.so,v 10.23 2006/08/30 10:04:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,13 +32,14 @@ DB_ENV-&gt;get_lg_regionmax(DB_ENV *dbenv, u_int32_t *lg_regionmaxp);
<h3>Description: DB_ENV-&gt;set_lg_regionmax</h3>
<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>
-<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.
+approximately 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 configured 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>
@@ -89,6 +90,6 @@ size of the underlying logging subsystem region in <b>lg_regionmaxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8cf77d30f..9bc2658ec 100644
--- a/db/docs/api_c/env_set_lk_conflicts.html
+++ b/db/docs/api_c/env_set_lk_conflicts.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_conflicts.so,v 10.43 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -80,9 +80,9 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<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.
+a pointer to the current conflicts array is copied.
<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.
+ the size of the current conflicts array is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -93,6 +93,6 @@ a pointer to the current conflicts array is copied.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cf88ff2c4..4eb1375ca 100644
--- a/db/docs/api_c/env_set_lk_detect.html
+++ b/db/docs/api_c/env_set_lk_detect.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_lk_detect.so,v 10.48 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_detect.so,v 10.50 2006/02/27 14:51:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,19 +35,18 @@ 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,
+<p>The database environment's deadlock detector configuration may also be configured 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 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>Although the DB_ENV-&gt;set_lk_detect 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-&gt;set_lk_detect method may be called at any time during the life of the
+application.</p>
<p>The DB_ENV-&gt;set_lk_detect method
returns a non-zero error value on failure
and 0 on success.
@@ -75,7 +74,7 @@ is performed.
<p>The DB_ENV-&gt;set_lk_detect method
may fail and return one of the following non-zero errors:</p>
<dl compact>
-<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
+<dt>EINVAL<dd>An
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
@@ -101,6 +100,6 @@ deadlock detector configuration in <b>lk_detectp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4f16a8a4b..454faee43 100644
--- a/db/docs/api_c/env_set_lk_max_lockers.html
+++ b/db/docs/api_c/env_set_lk_max_lockers.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_max_lockers.so,v 1.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,10 +35,10 @@ environment. This value is used by <a href="../api_c/env_open.html">DB_ENV-&gt;
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.
+<p>The database environment's maximum number of lockers may also be configured 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>
@@ -89,6 +89,6 @@ maximum number of lockers in <b>lk_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cfc8fb63d..89278f8ad 100644
--- a/db/docs/api_c/env_set_lk_max_locks.html
+++ b/db/docs/api_c/env_set_lk_max_locks.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_max_locks.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,10 +36,10 @@ 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.
+<p>The database environment's maximum number of locks may also be configured 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>
@@ -90,6 +90,6 @@ maximum number of locks in <b>lk_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ffa1dc06a..81985ea97 100644
--- a/db/docs/api_c/env_set_lk_max_objects.html
+++ b/db/docs/api_c/env_set_lk_max_objects.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_max_objects.so,v 1.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,10 +35,10 @@ environment. This value is used by <a href="../api_c/env_open.html">DB_ENV-&gt;
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.
+<p>The database environment's maximum number of objects may also be configured 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>
@@ -89,6 +89,6 @@ maximum number of locked objects in <b>lk_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 40e9d226d..754b9b1f6 100644
--- a/db/docs/api_c/env_set_mp_mmapsize.html
+++ b/db/docs/api_c/env_set_mp_mmapsize.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_mp_mmapsize.so,v 10.40 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,10 +41,10 @@ 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.
+<p>The database environment's maximum mapped file size may also be configured 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>
@@ -91,6 +91,6 @@ maximum file map size in <b>mp_mmapsizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_msgcall.html b/db/docs/api_c/env_set_msgcall.html
index b18c34acc..0eaa2494b 100644
--- a/db/docs/api_c/env_set_msgcall.html
+++ b/db/docs/api_c/env_set_msgcall.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_msgcall.so,v 10.5 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgcall.so,v 10.7 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,9 @@ manner.</p>
<p>Setting <b>db_msgcall_fcn</b> to NULL unconfigures the callback interface.</p>
<p>Alternatively, you can use the <a href="../api_c/db_set_msgfile.html">DB-&gt;set_msgfile</a> or
<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> methods to display the messages via a C library FILE *.</p>
+<p>The DB_ENV-&gt;set_msgcall 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_msgcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -50,6 +53,10 @@ reporting function. The function takes two parameters:
<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment.
<dt><b>msg</b><dd>The <b>msg</b> parameter is the message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -60,6 +67,6 @@ reporting function. The function takes two parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_msgfile.html b/db/docs/api_c/env_set_msgfile.html
index 7d1869444..27d6dcfdb 100644
--- a/db/docs/api_c/env_set_msgfile.html
+++ b/db/docs/api_c/env_set_msgfile.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_msgfile.so,v 10.5 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgfile.so,v 10.7 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,6 +42,9 @@ character.</p>
<p>Alternatively, you can use the <a href="../api_c/env_set_msgcall.html">DB_ENV-&gt;set_msgcall</a> or
<a href="../api_c/db_set_msgcall.html">DB-&gt;set_msgcall</a> methods to capture the additional error information
in a way that does not use C library FILE *'s.</p>
+<p>The DB_ENV-&gt;set_msgfile 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_msgfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -51,9 +54,18 @@ displaying messages.
</dl>
<hr size=1 noshade>
<h3>Description: DB_ENV-&gt;get_msgfile</h3>
-<p>The DB_ENV-&gt;get_msgfile method returns the .</p>
+<p>The DB_ENV-&gt;get_msgfile method returns the FILE *.</p>
<p>The DB_ENV-&gt;get_msgfile method may be called at any time during the life of the
application.</p>
+<p>The DB_ENV-&gt;get_msgfile method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>msgfilep</b><dd>The DB_ENV-&gt;get_msgfile method returns the
+FILE * in <b>msgfilep</b>.
+</dl>
<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>
@@ -63,6 +75,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 aef190ccb..4ad810599 100644
--- a/db/docs/api_c/env_set_rpc_server.html
+++ b/db/docs/api_c/env_set_rpc_server.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_rpc_server.so,v 10.29 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -82,6 +82,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 63093c12e..cfb852b3a 100644
--- a/db/docs/api_c/env_set_shm_key.html
+++ b/db/docs/api_c/env_set_shm_key.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_shm_key.so,v 10.28 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,10 +52,10 @@ 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.
+<p>The database environment's base segment ID may also be configured 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>
@@ -107,6 +107,6 @@ base segment ID in <b>shm_keyp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_thread_count.html b/db/docs/api_c/env_set_thread_count.html
new file mode 100644
index 000000000..2f612f208
--- /dev/null
+++ b/db/docs/api_c/env_set_thread_count.html
@@ -0,0 +1,93 @@
+<!--$Id: env_set_thread_count.so,v 10.1 2006/05/26 20:14:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;set_thread_count</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_thread_count</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;set_thread_count(DB_ENV *dbenv, u_int32_t count);
+<p>
+int
+DB_ENV-&gt;get_thread_count(DB_ENV *dbenv, u_int32_t *countp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_thread_count</h3>
+<p>Declare an approximate number of threads in the database environment.
+The DB_ENV-&gt;set_thread_count method must be called prior to opening the
+database environment if the <a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method will be used. The
+DB_ENV-&gt;set_thread_count method does not set the maximum number of
+threads but is used to determine memory sizing and the thread control
+block reclamation policy.</p>
+<p>The database environment's thread count may also be configured 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_thread_count", one or more whitespace
+characters, and the thread count.
+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_thread_count 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_thread_count 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_thread_count method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>count</b><dd>The <b>count</b> parameter is an approximate thread count for the
+database environment.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_thread_count method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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_thread_count</h3>
+<p>The DB_ENV-&gt;get_thread_count method returns the thread count.</p>
+<p>The DB_ENV-&gt;get_thread_count method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_thread_count method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>countp</b><dd>The DB_ENV-&gt;get_thread_count method returns the
+thread count in <b>countp</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/env_set_thread_id.html b/db/docs/api_c/env_set_thread_id.html
new file mode 100644
index 000000000..61f897353
--- /dev/null
+++ b/db/docs/api_c/env_set_thread_id.html
@@ -0,0 +1,123 @@
+<!--$Id: env_set_thread_id.so,v 10.9 2006/08/24 16:32:23 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;set_thread_id</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_thread_id</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;set_thread_id(DB_ENV *dbenv,
+ void (*thread_id)(DB_ENV *dbenv, pid_t *pid, db_threadid_t *tid));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_thread_id</h3>
+<p>Declare a function that returns a unique identifier pair for the current
+thread of control. The DB_ENV-&gt;set_thread_id method supports the
+<a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method. For more information, see
+<a href="../ref/cam/app.html">Architecting Data Store and Concurrent
+Data Store applications</a>, and <a href="../ref/transapp/app.html">Architecting Transactional Data Store applications</a>.</p>
+<p>The DB_ENV-&gt;set_thread_id 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_thread_id method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_thread_id method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>thread_id</b><dd>The <b>thread_id</b> parameter is a function which returns a unique
+identifier pair for a thread of control in a Berkeley DB application. The
+function takes three arguments:
+<dl compact>
+<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment
+handle, allowing application access to the application-private fields
+of that object.
+<dt><b>pid</b><dd>The <b>pid</b> points to a memory location of type pid_t. The
+process ID of the current thread of control may be returned in
+this memory location.
+<dt><b>tid</b><dd>The <b>tid</b> points to a memory location of type db_threadid_t. The
+thread ID of the current thread of control may be returned in this
+memory location.
+</dl>
+</dl>
+<p>The standard system library calls to return process and thread IDs are
+often sufficient for this purpose (for example, getpid() and
+pthread_self() on POSIX systems or GetCurrentThreadID on Windows
+systems). However, if the Berkeley DB application dynamically creates
+processes or threads, some care may be necessary in assigning unique
+IDs. In most threading systems, process and thread IDs are available
+for re-use as soon as the process or thread exits. If a new process or
+thread is created between the time of process or thread exit, and the
+<a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method is run, it may be possible for
+<a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> to not detect that a thread of control exited
+without properly releasing all Berkeley DB resources.</p>
+<p>It may be possible to handle this problem by inhibiting process or
+thread creation between thread of control exit and calling
+<a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>. Alternatively, the <b>thread_id</b> function
+must be constructed to not re-use <b>pid</b>/<b>tid</b> pairs. For
+example, in a single process application, the returned process ID might
+be used as an incremental counter, with the returned thread ID set to
+the actual thread ID. Obviously, the <b>is_alive</b> function
+specified to the <a href="../api_c/env_set_isalive.html">DB_ENV-&gt;set_isalive</a> method must be compatible with any
+<b>thread_id</b> function specified to DB_ENV-&gt;set_thread_id.</p>
+<p>The db_threadid_t type is configured to be the same type as a standard
+thread identifier, in Berkeley DB configurations where this type is known (for
+example, systems supporting pthread_t or thread_t, or DWORD on Windows).
+If the Berkeley DB configuration process is unable to determine the type of a
+standard thread identifier, the db_thread_t type is set to uintmax_t (or
+the largest available unsigned integral type, on systems lacking the
+uintmax_t type). Applications running on systems lacking a detectable
+standard thread type, and which are also using thread APIs where a
+thread identifier is not an integral value and so will not fit into the
+configured db_threadid_t type, must either translate between the
+db_threadid_t type and the thread identifier (mapping the thread
+identifier to a unique identifier of the appropriate size), or modify
+the Berkeley DB sources to use an appropriate db_threadid_t type. Note: we
+do not currently know of any systems where this is necessary. If your
+application has to solve this problem, please contact our support group
+and let us know.</p>
+<p>If no <b>thread_id</b> function is specified by the application, the
+Berkeley DB library will identify threads of control by using the taskIdSelf()
+call on VxWorks, the getpid() and GetCurrentThreadID() calls on Windows,
+the getpid() and pthread_self() calls when the Berkeley DB library has been
+configured for POSIX pthreads or Solaris LWP threads, the getpid() and
+thr_self() calls when the Berkeley DB library has been configured for UI
+threads, and otherwise getpid().</p>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_thread_id method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/env_set_thread_id_string.html b/db/docs/api_c/env_set_thread_id_string.html
new file mode 100644
index 000000000..568b00e4f
--- /dev/null
+++ b/db/docs/api_c/env_set_thread_id_string.html
@@ -0,0 +1,85 @@
+<!--$Id: env_set_thread_id_string.so,v 10.1 2005/10/20 17:16:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;set_thread_id_string</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_thread_id_string</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;set_thread_id_string(DB_ENV *dbenv,
+ char *(*thread_id_string)(DB_ENV *dbenv,
+ pid_t pid, db_threadid_t tid, char *buf));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_thread_id_string</h3>
+<p>Declare a function that formats a process ID and thread ID identifier
+pair for display into a caller-supplied buffer. The function must
+return a reference to the caller-specified buffer. The
+DB_ENV-&gt;set_thread_id_string method supports the
+<a href="../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a> method.</p>
+<p>The DB_ENV-&gt;set_thread_id_string 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_thread_id_string method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_thread_id_string method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>thread_id_string</b><dd>The <b>thread_id_string</b> parameter is a function which returns a
+buffer in which is an identifier pair formatted for display. The
+function takes four arguments:
+<dl compact>
+<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment
+handle, allowing application access to the application-private fields
+of that object.
+<dt><b>pid</b><dd>The <b>pid</b> argument is a process ID.
+<dt><b>tid</b><dd>The <b>tid</b> argument is a thread ID.
+<dt><b>buf</b><dd><a name="2"><!--meow--></a>
+The <b>buf</b> argument is character array of at least
+DB_THREADID_STRLEN bytes in length, into which the identifier
+pair should be formatted.
+</dl>
+</dl>
+<p>If no <b>thread_id_string</b> function is specified, the default
+routine displays the identifier pair as "pid/tid", that is, the process
+ID represented as an unsigned integer value, a slash ('/') character,
+then the thread ID represented as an unsigned integer value.</p>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_thread_id_string method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5cd8aaad7..c3e12e905 100644
--- a/db/docs/api_c/env_set_timeout.html
+++ b/db/docs/api_c/env_set_timeout.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_timeout.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_timeout.so,v 10.24 2005/05/20 15:07:45 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,8 +32,8 @@ DB_ENV-&gt;get_timeout(DB_ENV *dbenv, db_timeout_t *timeoutp, u_int32_t flag);
<h3>Description: DB_ENV-&gt;set_timeout</h3>
<p>The DB_ENV-&gt;set_timeout 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
+<p>All 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
through the Lock subsystem interfaces. In the case of
DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of a
@@ -58,18 +58,18 @@ and 0 on success.
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to one of the following values:
<dl compact>
<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.
+<p>The database environment's lock timeout value may also be configured 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>
<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.
+<p>The database environment's transaction timeout value may also be configured 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>
@@ -102,7 +102,7 @@ and 0 on success.
<dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Return the timeout value for transactions in this database environment.
</dl>
<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.
+ the timeout value of the specified <b>flag</b> parameter is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -113,6 +113,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b852c81d4..967624864 100644
--- a/db/docs/api_c/env_set_tmp_dir.html
+++ b/db/docs/api_c/env_set_tmp_dir.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_tmp_dir.so,v 10.26 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,10 +55,10 @@ all temporary files.</p>
<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>
<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.
+<p>The database environment's temporary file directory may also be configured 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>
@@ -79,8 +79,9 @@ and 0 on success.
<dl compact>
<dt><b>dir</b><dd>The <b>dir</b> parameter is the directory to be used to store temporary
files.
-<p>On Windows, the <b>dir</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>dir</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;set_tmp_dir method
@@ -112,6 +113,6 @@ database environment temporary file directory in <b>dirp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 038821b58..fd39bbc44 100644
--- a/db/docs/api_c/env_set_tx_max.html
+++ b/db/docs/api_c/env_set_tx_max.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_tx_max.so,v 10.45 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tx_max.so,v 10.47 2006/06/19 22:25:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,15 +34,19 @@ DB_ENV-&gt;get_tx_max(DB_ENV *dbenv, u_int32_t *tx_maxp);
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>Transactions that update multiversion databases are not freed until the
+last page version that the transaction created is flushed from cache.
+This means that applications using multi-version concurrency control may
+need a transaction for each page in cache, in the extreme case.</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
+active transactions complete). If this interface is never called, the
+database environment is configured to support at least 100 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.
+<p>The database environment's number of active transactions may also be configured 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>
@@ -94,6 +98,6 @@ number of active transactions in <b>tx_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 793b1d79a..837f955a6 100644
--- a/db/docs/api_c/env_set_tx_timestamp.html
+++ b/db/docs/api_c/env_set_tx_timestamp.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_tx_timestamp.so,v 10.29 2004/09/28 15:04:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -84,6 +84,6 @@ recovery timestamp in <b>timestampp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 084f0f8f0..aa19c4685 100644
--- a/db/docs/api_c/env_set_verbose.html
+++ b/db/docs/api_c/env_set_verbose.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_verbose.so,v 10.48 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_verbose.so,v 10.52 2005/12/28 16:10:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,11 +34,11 @@ DB_ENV-&gt;get_verbose(DB_ENV *dbenv, u_int32_t which, int *onoffp);
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,
+<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method.</p>
+<p>The database environment's messages may also be configured 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_RECOVERY".
Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
@@ -60,8 +60,10 @@ messages are output.
<dl compact>
<dt><a name="DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a><dd>Display additional information when doing deadlock detection.
<dt><a name="DB_VERB_RECOVERY">DB_VERB_RECOVERY</a><dd>Display additional information when performing recovery.
+<dt><a name="DB_VERB_REGISTER">DB_VERB_REGISTER</a><dd>Display additional information concerning support for the
+<a href="../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a> flag to the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method.
<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
+<p>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>
@@ -76,12 +78,12 @@ may fail and return one of the following non-zero errors:</p>
invalid flag value or parameter was specified.
</dl>
<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>
+<h3>Description: <a href="../api_c/env_set_verbose.html">DB_ENV-&gt;get_verbose</a></h3>
+<p>The <a href="../api_c/env_set_verbose.html">DB_ENV-&gt;get_verbose</a> 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
+<p>The <a href="../api_c/env_set_verbose.html">DB_ENV-&gt;get_verbose</a> method may be called at any time during the life of the
application.</p>
-<p>The DB_ENV-&gt;get_verbose method
+<p>The <a href="../api_c/env_set_verbose.html">DB_ENV-&gt;get_verbose</a> method
returns a non-zero error value on failure
and 0 on success.
</p>
@@ -90,7 +92,8 @@ and 0 on success.
<dt><b>which</b><dd>The <b>which</b> parameter is the message value for which configuration
is being checked.
<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.
+ the configuration of the specified <b>which</b> parameter is copied. If the returned <b>onoff</b> value is zero, the parameter is off;
+otherwise on.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -101,6 +104,6 @@ is being checked.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_stat.html b/db/docs/api_c/env_stat.html
index f9593e921..2992517bc 100644
--- a/db/docs/api_c/env_stat.html
+++ b/db/docs/api_c/env_stat.html
@@ -1,5 +1,5 @@
<!--$Id: env_stat.so,v 10.5 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,7 +27,7 @@ DB_ENV-&gt;stat_print(DB_ENV *dbenv, u_int32_t flags);
</pre></h3>
<hr size=1 noshade>
<h3>Description: DB_ENV-&gt;stat_print</h3>
-<p>The DB_ENV-&gt;stat_print method returns the
+<p>The DB_ENV-&gt;stat_print method displays the
default statistical information.
The information is printed to a specified output channel (see the
<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or passed to an
@@ -41,14 +41,11 @@ and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
-</dl>
-In addition, the following flag may be set by
-bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
-<dl compact>
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
<dt><a name="DB_STAT_SUBSYSTEM">DB_STAT_SUBSYSTEM</a><dd>Display information for all configured subsystems.
</dl>
</dl>
@@ -61,6 +58,6 @@ bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 202569676..d2cf5f209 100644
--- a/db/docs/api_c/env_strerror.html
+++ b/db/docs/api_c/env_strerror.html
@@ -1,5 +1,5 @@
<!--$Id: env_strerror.so,v 8.13 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,6 +50,6 @@ string is wanted.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ad3683c92..8f75e50aa 100644
--- a/db/docs/api_c/env_version.html
+++ b/db/docs/api_c/env_version.html
@@ -1,5 +1,5 @@
<!--$Id: env_version.so,v 10.26 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,6 +47,6 @@ is copied to the memory to which it refers.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/frame.html b/db/docs/api_c/frame.html
index dd70c69b3..3f1a25891 100644
--- a/db/docs/api_c/frame.html
+++ b/db/docs/api_c/frame.html
@@ -1,8 +1,8 @@
-<!--$Id: frame.so,v 10.7 2004/11/08 18:07:47 bostic Exp $-->
+<!--$Id: frame.so,v 10.8 2005/04/19 17:44:03 bostic Exp $-->
<html>
<head>
<title>
-Berkeley DB API (Version: 4.3.27)
+Berkeley DB API (Version: 4.5.20)
</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
@@ -12,7 +12,7 @@ Berkeley DB API (Version: 4.3.27)
<frame
src="api_core.html"
name="method" title=
-"Berkeley DB API (Version: 4.3.27)">
+"Berkeley DB API (Version: 4.5.20)">
<noframes>
<meta http-equiv="refresh" content="0;url=api_index.html">
</noframes>
diff --git a/db/docs/api_c/hsearch.html b/db/docs/api_c/hsearch.html
index eb335b5ef..58a2d0c59 100644
--- a/db/docs/api_c/hsearch.html
+++ b/db/docs/api_c/hsearch.html
@@ -1,5 +1,5 @@
<!--$Id: hsearch.so,v 10.28 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -97,6 +97,6 @@ system functions.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3a57d954f..d4bb8753c 100644
--- a/db/docs/api_c/lock_class.html
+++ b/db/docs/api_c/lock_class.html
@@ -1,5 +1,5 @@
<!--$Id: lock_class.so,v 10.21 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ for a single lock, and has no methods of its own.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f76a0cc4c..d19857f6c 100644
--- a/db/docs/api_c/lock_detect.html
+++ b/db/docs/api_c/lock_detect.html
@@ -1,5 +1,5 @@
<!--$Id: lock_detect.so,v 10.49 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -77,6 +77,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d5bd7738c..45b2a12e3 100644
--- a/db/docs/api_c/lock_get.html
+++ b/db/docs/api_c/lock_get.html
@@ -1,5 +1,5 @@
<!--$Id: lock_get.so,v 10.53 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -94,6 +94,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 28f81db5a..721d4a384 100644
--- a/db/docs/api_c/lock_id.html
+++ b/db/docs/api_c/lock_id.html
@@ -1,5 +1,5 @@
<!--$Id: lock_id.so,v 10.33 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,7 +39,7 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>idp</b><dd>The <b>idp</b> parameter references memory into which
- the allocated locker ID is copied.
+ the allocated locker ID is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -50,6 +50,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ec2e44127..5d66f5196 100644
--- a/db/docs/api_c/lock_id_free.html
+++ b/db/docs/api_c/lock_id_free.html
@@ -1,5 +1,5 @@
<!--$Id: lock_id_free.so,v 10.14 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8e9bdc042..fd6a3f08f 100644
--- a/db/docs/api_c/lock_list.html
+++ b/db/docs/api_c/lock_list.html
@@ -1,5 +1,5 @@
<!--$Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Locking Subsystem and Related Methods</h3>
-<!--$Id: m4.methods,v 1.5 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2006/08/08 05:15:56 mjc Exp $-->
<table border=1 align=center>
<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbDeadlockException-->
@@ -21,6 +21,7 @@
<!--DbEnv::lock_put--><tr><td><a href="../api_c/lock_put.html">DB_ENV-&gt;lock_put</a></td><td>Release a lock</td></tr>
<!--DbEnv::lock_stat--><tr><td><a href="../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
<!--DbEnv::lock_vec--><tr><td><a href="../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a></td><td>Acquire/release locks</td></tr>
+<!--DbEnv::cdsgroup_begin--><tr><td><a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a></td><td>Get a locker ID in Berkeley DB Concurrent Data Store</td></tr>
<!--DbLockNotGrantedException-->
<!--DbLock-->
<tr><th>Locking Subsystem Configuration</th><th><br></th></tr>
@@ -31,6 +32,6 @@
<!--DbEnv::set_lk_max_objects--><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>
<!--DbEnv::set_timeout--><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>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6168fc7fc..f7c699029 100644
--- a/db/docs/api_c/lock_put.html
+++ b/db/docs/api_c/lock_put.html
@@ -1,5 +1,5 @@
<!--$Id: lock_put.so,v 10.37 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,6 +52,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a1366a87a..c3cd8b55a 100644
--- a/db/docs/api_c/lock_stat.html
+++ b/db/docs/api_c/lock_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: lock_stat.so,v 10.62 2004/09/17 17:13:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: lock_stat.so,v 10.65 2005/07/20 16:26:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,9 +57,12 @@ individually freed.</p>
<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 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_nupgrade;<dd>The total number of locks upgraded.
+<dt>u_int32_t st_ndowngrade;<dd>The total number of locks downgraded.
+<dt>u_int32_t st_lock_wait;<dd>The number of lock requests not immediately available due to conflicts,
+for which the thread of control waited.
+<dt>u_int32_t st_lock_nowait;<dd>The number of lock requests not immediately available due to conflicts,
+for which the thread of control did not wait.
<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.
@@ -69,9 +72,9 @@ component of <b>st_ndeadlocks</b>, the total number of deadlocks
detected.
<dt>roff_t st_regsize;<dd>The size of the lock region, in bytes.
<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.
+obtaining the lock region mutex.
<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.
+the lock region mutex without waiting.
</dl>
<p>The DB_ENV-&gt;lock_stat method
returns a non-zero error value on failure
@@ -85,7 +88,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;lock_stat method
@@ -125,6 +128,6 @@ of the following values:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8b506dac2..7265f4075 100644
--- a/db/docs/api_c/lock_vec.html
+++ b/db/docs/api_c/lock_vec.html
@@ -1,5 +1,5 @@
<!--$Id: lock_vec.so,v 10.69 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -153,6 +153,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8d84f633e..f98246de1 100644
--- a/db/docs/api_c/log_archive.html
+++ b/db/docs/api_c/log_archive.html
@@ -1,5 +1,5 @@
<!--$Id: log_archive.so,v 10.49 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -109,6 +109,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4679c1c3c..7f870cfcc 100644
--- a/db/docs/api_c/log_compare.html
+++ b/db/docs/api_c/log_compare.html
@@ -1,5 +1,5 @@
<!--$Id: log_compare.so,v 10.22 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ to be compared.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9dd78ed0b..a80fa59ab 100644
--- a/db/docs/api_c/log_cursor.html
+++ b/db/docs/api_c/log_cursor.html
@@ -1,5 +1,5 @@
<!--$Id: log_cursor.so,v 10.12 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,7 +35,7 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>cursorp</b><dd>The <b>cursorp</b> parameter references memory into which
-a pointer to the created log cursor is copied.
+a pointer to the created log cursor is copied.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
<h3>Errors</h3>
@@ -54,6 +54,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 785f5750f..f2ca9743a 100644
--- a/db/docs/api_c/log_file.html
+++ b/db/docs/api_c/log_file.html
@@ -1,5 +1,5 @@
<!--$Id: log_file.so,v 10.34 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,7 +49,7 @@ and 0 on success.
DB_LSN structure
for which a filename is wanted.
<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.
+ the name of the file containing the record named by <b>lsn</b> is copied.
<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,
@@ -71,6 +71,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 909a6e9e5..6d93c820a 100644
--- a/db/docs/api_c/log_flush.html
+++ b/db/docs/api_c/log_flush.html
@@ -1,5 +1,5 @@
<!--$Id: log_flush.so,v 10.31 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e496a5772..1e4fdf309 100644
--- a/db/docs/api_c/log_list.html
+++ b/db/docs/api_c/log_list.html
@@ -1,5 +1,5 @@
<!--$Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Logging Subsystem and Related Methods</h3>
-<!--$Id: m4.methods,v 1.4 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2005/09/30 19:00:24 bostic Exp $-->
<table border=1 align=center>
<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbLsn--><tr><td><a href="../api_c/lsn_class.html">DB_LSN</a></td><td>Log Sequence Numbers</td></tr>
@@ -18,6 +18,7 @@
<!--DbEnv::log_archive--><tr><td><a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
<!--DbEnv::log_file--><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>
<!--DbEnv::log_flush--><tr><td><a href="../api_c/log_flush.html">DB_ENV-&gt;log_flush</a></td><td>Flush log records</td></tr>
+<!--DbEnv::log_printf--><tr><td><a href="../api_c/log_printf.html">DB_ENV-&gt;log_printf</a></td><td>Append informational message to the log</td></tr>
<!--DbEnv::log_put--><tr><td><a href="../api_c/log_put.html">DB_ENV-&gt;log_put</a></td><td>Write a log record</td></tr>
<!--DbEnv::log_stat--><tr><td><a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a></td><td>Return log subsystem statistics</td></tr>
<tr><th>Logging Subsystem Cursors</th><th><br></th></tr>
@@ -28,9 +29,10 @@
<tr><th>Logging Subsystem Configuration</th><th><br></th></tr>
<!--DbEnv::set_lg_bsize--><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>
<!--DbEnv::set_lg_dir--><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>
+<!--DbEnv::set_lg_filemode--><tr><td><a href="../api_c/env_set_lg_mode.html">DB_ENV-&gt;set_lg_filemode</a></td><td>Set log file mode</td></tr>
<!--DbEnv::set_lg_max--><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>
<!--DbEnv::set_lg_regionmax--><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>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_printf.html b/db/docs/api_c/log_printf.html
new file mode 100644
index 000000000..c0264c6d0
--- /dev/null
+++ b/db/docs/api_c/log_printf.html
@@ -0,0 +1,69 @@
+<!--$Id: log_printf.so,v 1.1 2005/09/30 19:00:24 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;log_printf</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;log_printf</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;log_printf(DB_ENV *env, DB_TXN *txnid, const char *fmt, ...);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_printf</h3>
+<p>The DB_ENV-&gt;log_printf method appends an informational message to the Berkeley DB
+database environment log files.</p>
+<p>The DB_ENV-&gt;log_printf method allows applications to include information in
+the database environment log files, for later review using the
+<a href="../utility/db_printlog.html">db_printlog</a> utility. This method is intended for debugging and
+performance tuning.</p>
+<p>The DB_ENV-&gt;log_printf method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>txnid</b><dd>If the logged message refers to an application-specified transaction,
+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.
+<dt><b>fmt</b><dd>A format string that specifies how subsequent arguments (or arguments
+accessed via the variable-length argument facilities of stdarg(3)) are
+converted for output. The format string may contain any formatting
+directives supported by the underlying C library vsnprintf(3)
+function.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;log_printf method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fcbe7d4ec..91241c6e9 100644
--- a/db/docs/api_c/log_put.html
+++ b/db/docs/api_c/log_put.html
@@ -1,5 +1,5 @@
<!--$Id: log_put.so,v 10.41 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,7 +53,7 @@ that all records with <a href="../api_c/lsn_class.html">DB_LSN</a> values less t
one being "put" are on disk before DB_ENV-&gt;log_put returns.
</dl>
<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.
+ the <a href="../api_c/lsn_class.html">DB_LSN</a> of the put record is copied.
</dl>
<h3>Errors</h3>
<p>The <a href="../api_c/log_flush.html">DB_ENV-&gt;log_flush</a> method
@@ -71,6 +71,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b4f97a18a..05a01cd17 100644
--- a/db/docs/api_c/log_stat.html
+++ b/db/docs/api_c/log_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: log_stat.so,v 10.53 2004/09/17 17:13:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: log_stat.so,v 10.57 2005/10/28 19:45:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,7 +47,8 @@ individually freed.</p>
<dt>u_int32_t st_version;<dd>The version of the log file type.
<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_size;<dd>The current log file size.
+<dt>u_int32_t st_lg_size;<dd>The log file size.
+<dt>u_int32_t st_record;<dd>The number of records written to this log.
<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.
@@ -56,6 +57,7 @@ since the last checkpoint.
<dt>u_int32_t st_wcount;<dd>The number of times the log has been written to disk.
<dt>u_int32_t 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>u_int32_t st_rcount;<dd>The number of times the log has been read from disk.
<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.
@@ -64,11 +66,11 @@ in-memory log record cache filled up.
<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>roff_t st_regsize;<dd>The size of the region, in bytes.
+<dt>roff_t st_regsize;<dd>The size of the log region, in bytes.
<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.
+obtaining the log region mutex.
<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.
+the log region mutex without waiting.
</dl>
<p>The DB_ENV-&gt;log_stat method
returns a non-zero error value on failure
@@ -82,7 +84,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;log_stat method
@@ -93,7 +95,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DB_ENV-&gt;log_stat_print</h3>
-<p>The DB_ENV-&gt;log_stat_print method returns the
+<p>The DB_ENV-&gt;log_stat_print method displays the
logging subsystem statistical information, as described for the DB_ENV-&gt;log_stat method.
The information is printed to a specified output channel (see the
<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or passed to an
@@ -107,10 +109,11 @@ and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -122,6 +125,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c784685e0..67c981f9a 100644
--- a/db/docs/api_c/logc_class.html
+++ b/db/docs/api_c/logc_class.html
@@ -1,5 +1,5 @@
<!--$Id: logc_class.so,v 1.8 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ return.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 34834140d..4484867bd 100644
--- a/db/docs/api_c/logc_close.html
+++ b/db/docs/api_c/logc_close.html
@@ -1,5 +1,5 @@
<!--$Id: logc_close.so,v 10.13 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 579bef8e9..887dba5c6 100644
--- a/db/docs/api_c/logc_get.html
+++ b/db/docs/api_c/logc_get.html
@@ -1,5 +1,5 @@
<!--$Id: logc_get.so,v 10.48 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -103,6 +103,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9683ee4ef..96c4e9106 100644
--- a/db/docs/api_c/lsn_class.html
+++ b/db/docs/api_c/lsn_class.html
@@ -1,5 +1,5 @@
<!--$Id: lsn_class.so,v 10.21 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ the other specifies an offset in the log file.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fd9c28144..7be4e8279 100644
--- a/db/docs/api_c/memp_fclose.html
+++ b/db/docs/api_c/memp_fclose.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fclose.so,v 10.33 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,6 +52,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 606c19e26..2d846db77 100644
--- a/db/docs/api_c/memp_fcreate.html
+++ b/db/docs/api_c/memp_fcreate.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fcreate.so,v 10.12 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -48,6 +48,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 39765ae51..fa8e931b6 100644
--- a/db/docs/api_c/memp_fget.html
+++ b/db/docs/api_c/memp_fget.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_fget.so,v 10.43 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fget.so,v 10.48 2006/09/13 14:30:54 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,7 +24,7 @@
<p>
int
DB_MPOOLFILE-&gt;get(DB_MPOOLFILE *mpf,
- db_pgno_t *pgnoaddr, u_int32_t flags, void **pagep);
+ db_pgno_t *pgnoaddr, DB_TXN * txnid, u_int32_t flags, void **pagep);
</pre></h3>
<hr size=1 noshade>
<h3>Description: DB_MPOOLFILE-&gt;get</h3>
@@ -52,6 +52,15 @@ or more of the following values:
<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.
+<dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page will be modified and must be written to the source file before
+being evicted from the pool. For files open with the
+<a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> flag set, a new copy of the page will be made
+if this is the first time the specified transaction is modifying it.
+<dt><a name="DB_MPOOL_EDIT">DB_MPOOL_EDIT</a><dd>The page will be modified and must be written to the source file before
+being evicted from the pool. No copy of the page will be made, regardless
+of the <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> setting. This flag is only intended for
+use in situations where a transaction handle is not available, such as during
+aborts or recovery.
<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.
<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
@@ -62,7 +71,7 @@ location to which <b>pgnoaddr</b> refers. In this case, the
<p>The DB_MPOOL_CREATE, DB_MPOOL_LAST, and
DB_MPOOL_NEW flags are mutually exclusive.</p>
<dt><b>pagep</b><dd>The <b>pagep</b> parameter references memory into which
-a pointer to the returned page is copied.
+a pointer to the returned page is copied.
<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
@@ -70,11 +79,22 @@ 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>
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, 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. A transaction is
+required if the file is open for multiversion concurrency control by
+passing <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> to <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> and the
+DB_MPOOL_DIRTY, DB_MPOOL_CREATE or
+DB_MPOOL_NEW flags were specified. Otherwise it is ignored.
</dl>
<h3>Errors</h3>
<p>The DB_MPOOLFILE-&gt;get method
may fail and return one of the following non-zero errors:</p>
<dl compact>
+<dt>EACCES<dd>The DB_MPOOL_DIRTY or DB_MPOOL_EDIT flag was set and
+the source file was not opened for writing.
+</dl>
+<dl compact>
<dt>EAGAIN<dd>The page reference count has overflowed. (This should never happen
unless there is a bug in the application.)
</dl>
@@ -82,10 +102,14 @@ unless there is a bug in the application.)
<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
+DB_MPOOL_NEW was set.; or if an
invalid flag value or parameter was specified.
</dl>
<dl compact>
+<dt>DB_LOCK_DEADLOCK<dd>For transactions configured with <a href="../api_c/txn_begin.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a>, the page has
+been modified since the transaction began.
+</dl>
+<dl compact>
<dt>ENOMEM<dd>The cache is full, and no more pages will fit in the pool.
</dl>
<hr size=1 noshade>
@@ -97,6 +121,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fcd569020..f4a8d8ff0 100644
--- a/db/docs/api_c/memp_fopen.html
+++ b/db/docs/api_c/memp_fopen.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_fopen.so,v 10.51 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fopen.so,v 10.53 2006/08/08 05:24:05 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,8 +39,9 @@ and 0 on success.
<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>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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:
<dl compact>
@@ -50,6 +51,8 @@ fail.
<a name="2"><!--meow--></a>
<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.
+<dt><a name="DB_MULTIVERSION">DB_MULTIVERSION</a><dd>Open the file with support for <a href="../ref/transapp/read.html">multiversion concurrency control</a>. Calls to <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a> which
+dirty pages will cause copies to be made in the cache.
<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">DB_ENV-&gt;set_mp_mmapsize</a> method for further information).
@@ -98,6 +101,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e4f0512c4..f2ffc9bfe 100644
--- a/db/docs/api_c/memp_fput.html
+++ b/db/docs/api_c/memp_fput.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_fput.so,v 10.31 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fput.so,v 10.33 2006/09/11 23:31:27 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,27 +40,16 @@ address previously returned by <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&g
<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:
<dl compact>
-<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).
-<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.
<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>
</dl>
<h3>Errors</h3>
<p>The DB_MPOOLFILE-&gt;put method
may fail and return one of the following non-zero errors:</p>
<dl compact>
-<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>
-<dl compact>
<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
+<a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a>; or if an
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
@@ -72,6 +61,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a41155ce6..651236d34 100644
--- a/db/docs/api_c/memp_fset.html
+++ b/db/docs/api_c/memp_fset.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fset.so,v 10.30 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,14 +40,9 @@ address previously returned by <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&g
<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:
<dl compact>
-<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).
-<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.
<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>
</dl>
<h3>Errors</h3>
<p>The DB_MPOOLFILE-&gt;set method
@@ -65,6 +60,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4cd997df5..a36f62551 100644
--- a/db/docs/api_c/memp_fsync.html
+++ b/db/docs/api_c/memp_fsync.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fsync.so,v 10.35 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,6 +45,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c445ccfe4..3fd62b851 100644
--- a/db/docs/api_c/memp_list.html
+++ b/db/docs/api_c/memp_list.html
@@ -1,5 +1,5 @@
<!--$Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,19 +10,19 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Memory Pools and Related Methods</h3>
-<!--$Id: m4.methods,v 1.7 2004/11/03 15:52:02 bostic Exp $-->
+<!--$Id: m4.methods,v 1.9 2006/08/25 16:40:01 bostic Exp $-->
<table border=1 align=center>
<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
-<!--Db::mpf--><tr><td><a href="../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<!--Db::mpf--><tr><td><a href="../api_c/db_get_mpf.html">DB-&gt;get_mpf</a></td><td>Return <a href="../api_c/db_class.html">DB</a>'s underlying <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle</td></tr>
<!--DbEnv::memp_stat--><tr><td><a href="../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td><td>Return memory pool statistics</td></tr>
<!--DbEnv::memp_sync--><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>
<!--DbEnv::memp_trickle--><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>
<!--DbMemoryException-->
<tr><th>Memory Pool Configuration</th><th><br></th></tr>
<!--DbEnv::memp_register--><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>
-<!--DbEnv::memp_set_max_openfd--><tr><td><a href="../api_c/memp_openfd.html">DB_ENV-&gt;memp_set_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
-<!--DbEnv::memp_set_max_write--><tr><td><a href="../api_c/memp_maxwrite.html">DB_ENV-&gt;memp_set_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_cachesize--><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>
+<!--DbEnv::set_mp_max_openfd--><tr><td><a href="../api_c/memp_openfd.html">DB_ENV-&gt;set_mp_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
+<!--DbEnv::set_mp_max_write--><tr><td><a href="../api_c/memp_maxwrite.html">DB_ENV-&gt;set_mp_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_mp_mmapsize--><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><th>Memory Pool Files</th><th><br></th></tr>
<!--DbEnv::memp_fcreate--><tr><td><a href="../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
@@ -43,6 +43,6 @@
<!--DbMpoolFile::set_pgcookie--><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>
<!--DbMpoolFile::set_priority--><tr><td><a href="../api_c/memp_set_priority.html">DB_MPOOLFILE-&gt;set_priority</a></td><td>Set memory pool file priority</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_maxwrite.html b/db/docs/api_c/memp_maxwrite.html
index 6cf7396f3..d074fe342 100644
--- a/db/docs/api_c/memp_maxwrite.html
+++ b/db/docs/api_c/memp_maxwrite.html
@@ -1,17 +1,17 @@
-<!--$Id: memp_maxwrite.so,v 10.2 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_maxwrite.so,v 10.4 2006/04/26 16:55:20 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB_ENV-&gt;memp_set_max_write</title>
+<title>Berkeley DB: DB_ENV-&gt;set_mp_max_write</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;memp_set_max_write</h3>
+<h3>DB_ENV-&gt;set_mp_max_write</h3>
</td>
<td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,50 +23,51 @@
#include &lt;db.h&gt;
<p>
int
-DB_ENV-&gt;memp_set_max_write(DB_ENV *env, int maxwrite, int maxwrite_sleep);
+DB_ENV-&gt;set_mp_max_write(DB_ENV *env, int maxwrite, int maxwrite_sleep);
<p>
int
-DB_ENV-&gt;memp_get_max_write(DB_ENV *env, int *maxwritep, int *maxwrite_sleepp);
+DB_ENV-&gt;get_mp_max_write(DB_ENV *env, int *maxwritep, int *maxwrite_sleepp);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DB_ENV-&gt;memp_set_max_write</h3>
-<p>The DB_ENV-&gt;memp_set_max_write method limits the number of sequential write
+<h3>Description: DB_ENV-&gt;set_mp_max_write</h3>
+<p>The DB_ENV-&gt;set_mp_max_write method limits the number of sequential write
operations scheduled by the library when flushing dirty pages from the
cache.</p>
-<p>The DB_ENV-&gt;memp_set_max_write method
+<p>The DB_ENV-&gt;set_mp_max_write method
returns a non-zero error value on failure
and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>maxwrite</b><dd>The maximum number of sequential write operations scheduled by the
-library when flushing dirty pages from the cache.
+library when flushing dirty pages from the cache, or 0 if there is
+no limitation on the number of sequential write operations.
<dt><b>maxwrite_sleep</b><dd>The number of microseconds the thread of control should pause before
scheduling further write operations.
</dl>
<h3>Errors</h3>
-<p>The DB_ENV-&gt;memp_set_max_write method
+<p>The DB_ENV-&gt;set_mp_max_write method
may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>EINVAL<dd>An
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
-<h3>Description: DB_ENV-&gt;memp_get_max_write</h3>
-<p>The DB_ENV-&gt;memp_get_max_write method returns the current maximum number of
+<h3>Description: DB_ENV-&gt;get_mp_max_write</h3>
+<p>The DB_ENV-&gt;get_mp_max_write method returns the current maximum number of
sequential write operations and microseconds to pause.</p>
-<p>The DB_ENV-&gt;memp_get_max_write method may be called at any time during the life of the
+<p>The DB_ENV-&gt;get_mp_max_write method may be called at any time during the life of the
application.</p>
-<p>The DB_ENV-&gt;memp_get_max_write method
+<p>The DB_ENV-&gt;get_mp_max_write method
returns a non-zero error value on failure
and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>maxwritep</b><dd>The <b>maxwritep</b> parameter references memory into which
- the maximum number of sequential write operations is copied.
+ the maximum number of sequential write operations is copied.
<dt><b>maxwrite_sleepp</b><dd>The <b>maxwrite_sleepp</b> parameter references memory into which
- the microseconds to pause before scheduling further write operations is copied.
+ the microseconds to pause before scheduling further write operations is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -77,6 +78,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_openfd.html b/db/docs/api_c/memp_openfd.html
index 749085d9e..3f38d9239 100644
--- a/db/docs/api_c/memp_openfd.html
+++ b/db/docs/api_c/memp_openfd.html
@@ -1,17 +1,17 @@
-<!--$Id: memp_openfd.so,v 10.2 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_openfd.so,v 10.3 2005/03/08 14:36:15 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB_ENV-&gt;memp_set_max_openfd</title>
+<title>Berkeley DB: DB_ENV-&gt;set_mp_max_openfd</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;memp_set_max_openfd</h3>
+<h3>DB_ENV-&gt;set_mp_max_openfd</h3>
</td>
<td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,17 +23,17 @@
#include &lt;db.h&gt;
<p>
int
-DB_ENV-&gt;memp_set_max_openfd(DB_ENV *env, int maxopenfd);
+DB_ENV-&gt;set_mp_max_openfd(DB_ENV *env, int maxopenfd);
<p>
int
-DB_ENV-&gt;memp_get_max_openfd(DB_ENV *env, int *maxopenfdp);
+DB_ENV-&gt;get_mp_max_openfd(DB_ENV *env, int *maxopenfdp);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DB_ENV-&gt;memp_set_max_openfd</h3>
-<p>The DB_ENV-&gt;memp_set_max_openfd method limits the number of file descriptors
+<h3>Description: DB_ENV-&gt;set_mp_max_openfd</h3>
+<p>The DB_ENV-&gt;set_mp_max_openfd method limits the number of file descriptors
the library will open concurrently when flushing dirty pages from the
cache.</p>
-<p>The DB_ENV-&gt;memp_set_max_openfd method
+<p>The DB_ENV-&gt;set_mp_max_openfd method
returns a non-zero error value on failure
and 0 on success.
</p>
@@ -43,24 +43,24 @@ and 0 on success.
by the library when flushing dirty pages from the cache.
</dl>
<h3>Errors</h3>
-<p>The DB_ENV-&gt;memp_set_max_openfd method
+<p>The DB_ENV-&gt;set_mp_max_openfd method
may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>EINVAL<dd>An
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
-<h3>Description: DB_ENV-&gt;memp_get_max_openfd</h3>
-<p>The DB_ENV-&gt;memp_get_max_openfd method returns the maximum number of file descriptors open.</p>
-<p>The DB_ENV-&gt;memp_get_max_openfd method may be called at any time during the life of the
+<h3>Description: DB_ENV-&gt;get_mp_max_openfd</h3>
+<p>The DB_ENV-&gt;get_mp_max_openfd method returns the maximum number of file descriptors open.</p>
+<p>The DB_ENV-&gt;get_mp_max_openfd method may be called at any time during the life of the
application.</p>
-<p>The DB_ENV-&gt;memp_get_max_openfd method
+<p>The DB_ENV-&gt;get_mp_max_openfd method
returns a non-zero error value on failure
and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>maxopenfdp</b><dd>The DB_ENV-&gt;memp_get_max_openfd method returns the
+<dt><b>maxopenfdp</b><dd>The DB_ENV-&gt;get_mp_max_openfd method returns the
maximum number of file descriptors open in <b>maxopenfdp</b>.
</dl>
<hr size=1 noshade>
@@ -72,6 +72,6 @@ maximum number of file descriptors open in <b>maxopenfdp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e2ae5b2bb..661cb7079 100644
--- a/db/docs/api_c/memp_register.html
+++ b/db/docs/api_c/memp_register.html
@@ -1,5 +1,5 @@
<!--$Id: memp_register.so,v 10.38 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -76,6 +76,6 @@ the Berkeley DB library).</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 64024b0b0..9e377a0bd 100644
--- a/db/docs/api_c/memp_set_clear_len.html
+++ b/db/docs/api_c/memp_set_clear_len.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_clear_len.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_clear_len.so,v 10.18 2005/11/30 19:46:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,8 +33,8 @@ DB_MPOOLFILE-&gt;get_clear_len(DB_MPOOLFILE *mpf, u_int32_t *lenp);
<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.</p>
+specified to <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a>. If no clear length is specified, the
+entire page is cleared when it is created.</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>
<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
@@ -56,9 +56,18 @@ 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 .</p>
+<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>
+<dl compact>
+<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>
@@ -68,6 +77,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f0495ff58..eae255654 100644
--- a/db/docs/api_c/memp_set_fileid.html
+++ b/db/docs/api_c/memp_set_fileid.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_fileid.so,v 10.13 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_fileid.so,v 10.14 2005/04/14 13:08:06 sue Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -73,11 +73,11 @@ Unique file identifiers must be a DB_FILE_ID_LEN length array of bytes.
<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
+<p>The DB_MPOOLFILE-&gt;get_fileid 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
+<p>The DB_MPOOLFILE-&gt;get_fileid method may be called at any time during the life of the
application.</p>
<hr size=1 noshade>
<h3>Class</h3>
@@ -88,6 +88,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index aed5c0bc7..5b2c1801a 100644
--- a/db/docs/api_c/memp_set_flags.html
+++ b/db/docs/api_c/memp_set_flags.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_flags.so,v 1.17 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_flags.so,v 1.18 2005/09/17 16:30:18 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,9 +46,13 @@ of the following values:
<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 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>
<p>The DB_MPOOL_NOFILE flag may be used to configure Berkeley DB at any time during
the life of the application.</p>
<dt><a name="DB_MPOOL_UNLINK">DB_MPOOL_UNLINK</a><dd>If set, remove the file when the last reference to it is closed.
+<p>The DB_MPOOL_NOFILE flag 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>
<p>The DB_MPOOL_UNLINK flag may be used to configure Berkeley DB at any time during
the life of the application.</p>
</dl>
@@ -79,6 +83,6 @@ flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d2e353330..8065afada 100644
--- a/db/docs/api_c/memp_set_ftype.html
+++ b/db/docs/api_c/memp_set_ftype.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_ftype.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_ftype.so,v 10.17 2005/11/30 19:46:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,9 +53,18 @@ and output processing. The <b>ftype</b> must be the same as a
</dl>
<hr size=1 noshade>
<h3>Description: DB_MPOOLFILE-&gt;get_ftype</h3>
-<p>The DB_MPOOLFILE-&gt;get_ftype method returns the .</p>
+<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>
+<dl compact>
+<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>
@@ -65,6 +74,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 da77e6502..68fdc863b 100644
--- a/db/docs/api_c/memp_set_lsn_offset.html
+++ b/db/docs/api_c/memp_set_lsn_offset.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_lsn_offset.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_lsn_offset.so,v 10.17 2005/04/14 17:57:54 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,9 +54,18 @@ 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 .</p>
+<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>
+<dl compact>
+<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>
@@ -66,6 +75,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 66f9ddc41..2c87a30d6 100644
--- a/db/docs/api_c/memp_set_maxsize.html
+++ b/db/docs/api_c/memp_set_maxsize.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_maxsize.so,v 1.14 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_maxsize.so,v 1.15 2005/09/17 16:30:18 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,8 @@ limit has been reached will fail.</p>
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 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>
<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
@@ -63,9 +65,9 @@ application.</p>
<h3>Parameters</h3>
<dl compact>
<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.
+ the additional bytes of memory in the maximum file size is copied.
<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.
+ the gigabytes of memory in the maximum file size is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -76,6 +78,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6dca6fcea..78ac56582 100644
--- a/db/docs/api_c/memp_set_pgcookie.html
+++ b/db/docs/api_c/memp_set_pgcookie.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_pgcookie.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_pgcookie.so,v 10.17 2005/11/30 19:46:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,9 +54,18 @@ pages.
</dl>
<hr size=1 noshade>
<h3>Description: DB_MPOOLFILE-&gt;get_pgcookie</h3>
-<p>The DB_MPOOLFILE-&gt;get_pgcookie method returns the .</p>
+<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>
+<dl compact>
+<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>
@@ -66,6 +75,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 32a0211dc..99fc01d11 100644
--- a/db/docs/api_c/memp_set_priority.html
+++ b/db/docs/api_c/memp_set_priority.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_priority.so,v 10.22 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_priority.so,v 10.23 2005/08/12 17:05:52 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,8 @@ 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 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>
<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
@@ -80,6 +82,6 @@ cache priority in <b>priorityp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0052105d2..776872db0 100644
--- a/db/docs/api_c/memp_stat.html
+++ b/db/docs/api_c/memp_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_stat.so,v 10.63 2004/09/28 18:18:30 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_stat.so,v 10.67 2006/09/11 16:56:44 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,6 +52,10 @@ The following DB_MPOOL_STAT fields will be filled in:</p>
<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>roff_t st_regsize;<dd>Individual cache size, in bytes.
+<dt>size_t st_mmapsize;<dd>Maximum memory-mapped file size.
+<dt>int st_maxopenfd;<dd>Maximum open file descriptors.
+<dt>int st_maxwrite;<dd>Maximum sequential buffer writes.
+<dt>int st_maxwrite_sleep;<dd>Sleep after writing maximum sequential buffers.
<dt>u_int32_t st_map;<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).
@@ -68,27 +72,30 @@ although examining the application page fault rate may be helpful).
<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_longest;<dd>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_hash_nowait;<dd>The number of times that a thread of control was able to obtain a hash
+<dt>u_int32_t st_hash_nowait;<dd>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
+<dt>u_int32_t st_hash_wait;<dd>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
+<dt>u_int32_t st_hash_max_nowait;<dd>The number of times a thread of control was able to obtain the hash
+bucket lock without waiting on the bucket which had the maximum number
+of times that a thread of control needed to wait.
+<dt>u_int32_t st_hash_max_wait;<dd>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 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_region_wait;<dd>Number of times that a thread of control was forced to wait before
+obtaining a cache region mutex.
+<dt>u_int32_t st_region_nowait;<dd>Number of times that a thread of control was able to obtain a cache
+region mutex without waiting.
+<dt>u_int32_t st_mvcc_frozen;<dd>Number of buffers frozen.
+<dt>u_int32_t st_mvcc_thawed;<dd>Number of buffers thawed.
+<dt>u_int32_t st_mvcc_freed;<dd>Number of frozen buffers freed.
<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.
-<dt>u_int32_t st_mmapsize;<dd>Maximum memory-mapped file size.
-<dt>u_int32_t st_maxopenfd;<dd>Maximum open file descriptors.
-<dt>u_int32_t st_maxwrite;<dd>Maximum sequential buffer writes.
-<dt>u_int32_t st_maxwrite_sleep;<dd>Sleep after writing maximum sequential buffers.
+<dt>u_int32_t st_io_wait;<dd>Number of operations blocked waiting for I/O to complete.
</dl>
The <b>flags</b> parameter must be set to 0 or
the following value:
@@ -125,9 +132,9 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<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.
+a pointer to the allocated per-file statistics structures is copied.
<dt><b>gsp</b><dd>The <b>gsp</b> parameter references memory into which
-a pointer to the allocated global statistics structure is copied.
+a pointer to the allocated global statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;memp_stat method
@@ -164,6 +171,6 @@ of the following values:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7fabce9f8..39cfe91a9 100644
--- a/db/docs/api_c/memp_sync.html
+++ b/db/docs/api_c/memp_sync.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_sync.so,v 10.41 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_sync.so,v 10.42 2004/11/12 02:55:19 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,14 +51,6 @@ a certain time have been written to disk.
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>
-<dl compact>
-<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>
<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>
@@ -68,6 +60,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5bf0a79bb..e2c0bb5ea 100644
--- a/db/docs/api_c/memp_trickle.html
+++ b/db/docs/api_c/memp_trickle.html
@@ -1,5 +1,5 @@
<!--$Id: memp_trickle.so,v 10.36 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,7 +41,7 @@ and 0 on success.
<dl compact>
<dt><b>nwrotep</b><dd>The <b>nwrotep</b> parameter references memory into which
the number of pages written to reach the specified
-percentage is copied.
+percentage is copied.
<dt><b>percent</b><dd>The <b>percent</b> parameter is the percent of the pages in the cache
that should be clean.
</dl>
@@ -61,6 +61,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 401f01b50..4361cb352 100644
--- a/db/docs/api_c/mempfile_class.html
+++ b/db/docs/api_c/mempfile_class.html
@@ -1,5 +1,5 @@
<!--$Id: mempfile_class.so,v 10.24 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ method's return.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/mutex_alloc.html b/db/docs/api_c/mutex_alloc.html
new file mode 100644
index 000000000..344b85f23
--- /dev/null
+++ b/db/docs/api_c/mutex_alloc.html
@@ -0,0 +1,74 @@
+<!--$Id: mutex_alloc.so,v 10.2 2006/01/27 16:13:49 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_alloc</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_alloc</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_alloc(DB_ENV *dbenv, u_int32_t flags, db_mutex_t *mutexp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_alloc</h3>
+<p>The DB_ENV-&gt;mutex_alloc method allocates a mutex and returns a reference to
+it into the memory specified by <b>mutexp</b>.</p>
+<p>The DB_ENV-&gt;mutex_alloc 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;mutex_alloc method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt><a name="DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a><dd>The mutex is associated with a single process. The <a href="../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method
+will release mutexes held by any process which has exited.
+<dt><a name="DB_MUTEX_SELF_BLOCK">DB_MUTEX_SELF_BLOCK</a><dd>The mutex must be self-blocking. That is, if a thread of control locks
+the mutex and then attempts to lock the mutex again, the thread of
+control will block until another thread of control releases the original
+lock on the mutex, allowing the original thread of control to lock the
+mutex the second time. Attempting to re-acquire a mutex for which the
+DB_MUTEX_SELF_BLOCK flag was not specified will result in
+undefined behavior.
+</dl>
+<dt><b>mutexp</b><dd>The <b>mutexp</b> parameter references memory into which
+ the mutex reference is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_alloc method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_free.html b/db/docs/api_c/mutex_free.html
new file mode 100644
index 000000000..6bcdcfb8d
--- /dev/null
+++ b/db/docs/api_c/mutex_free.html
@@ -0,0 +1,60 @@
+<!--$Id: mutex_free.so,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_free</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_free</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_free(DB_ENV *dbenv, db_mutex_t mutex);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_free</h3>
+<p>The DB_ENV-&gt;mutex_free method discards a mutex allocated by <a href="../api_c/mutex_alloc.html">DB_ENV-&gt;mutex_alloc</a>.</p>
+<p>The DB_ENV-&gt;mutex_free 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;mutex_free method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>mutex</b><dd>The <b>mutex</b> parameter is a mutex previously allocated by
+<a href="../api_c/mutex_alloc.html">DB_ENV-&gt;mutex_alloc</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_free method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_list.html b/db/docs/api_c/mutex_list.html
new file mode 100644
index 000000000..520925f4f
--- /dev/null
+++ b/db/docs/api_c/mutex_list.html
@@ -0,0 +1,29 @@
+<!--$Id: mutex_list.so,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Berkeley DB: Mutexes and Related Methods</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<h3 align=center>Berkeley DB: Mutexes and Related Methods</h3>
+<!--$Id: m4.methods,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Mutexes and Related Methods</th><th>Description</th></tr>
+<!--DbEnv::mutex_alloc--><tr><td><a href="../api_c/mutex_alloc.html">DB_ENV-&gt;mutex_alloc</a></td><td>Allocate a mutex</td></tr>
+<!--DbEnv::mutex_free--><tr><td><a href="../api_c/mutex_free.html">DB_ENV-&gt;mutex_free</a></td><td>Free a mutex</td></tr>
+<!--DbEnv::mutex_lock--><tr><td><a href="../api_c/mutex_lock.html">DB_ENV-&gt;mutex_lock</a></td><td>Lock a mutex</td></tr>
+<!--DbEnv::mutex_stat--><tr><td><a href="../api_c/mutex_stat.html">DB_ENV-&gt;mutex_stat</a></td><td>Mutex statistics</td></tr>
+<!--DbEnv::mutex_unlock--><tr><td><a href="../api_c/mutex_unlock.html">DB_ENV-&gt;mutex_unlock</a></td><td>Unlock a mutex</td></tr>
+<tr><th>Mutex Configuration</th><th><br></th></tr>
+<!--DbEnv::mutex_set_align--><tr><td><a href="../api_c/mutex_set_align.html">DB_ENV-&gt;mutex_set_align</a></td><td>Configure mutex alignment</td></tr>
+<!--DbEnv::mutex_set_increment--><tr><td><a href="../api_c/mutex_set_max.html">DB_ENV-&gt;mutex_set_increment</a></td><td>Configure number of additional mutexes</td></tr>
+<!--DbEnv::mutex_set_max--><tr><td><a href="../api_c/mutex_set_max.html">DB_ENV-&gt;mutex_set_max</a></td><td>Configure total number of mutexes</td></tr>
+<!--DbEnv::mutex_set_tas_spins--><tr><td><a href="../api_c/mutex_set_tas_spins.html">DB_ENV-&gt;mutex_set_tas_spins</a></td><td>Configure test-and-set mutex spin count</td></tr>
+</table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_lock.html b/db/docs/api_c/mutex_lock.html
new file mode 100644
index 000000000..2f3481780
--- /dev/null
+++ b/db/docs/api_c/mutex_lock.html
@@ -0,0 +1,62 @@
+<!--$Id: mutex_lock.so,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_lock</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_lock</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_lock(DB_ENV *dbenv, db_mutex_t mutex);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_lock</h3>
+<p>The DB_ENV-&gt;mutex_lock method locks the mutex allocated by
+<a href="../api_c/mutex_alloc.html">DB_ENV-&gt;mutex_alloc</a>. The thread of control calling DB_ENV-&gt;mutex_lock
+will block until the lock is available.</p>
+<p>The DB_ENV-&gt;mutex_lock 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;mutex_lock method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>mutex</b><dd>The <b>mutex</b> parameter is a mutex previously allocated by
+<a href="../api_c/mutex_alloc.html">DB_ENV-&gt;mutex_alloc</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_lock method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_set_align.html b/db/docs/api_c/mutex_set_align.html
new file mode 100644
index 000000000..b258971dd
--- /dev/null
+++ b/db/docs/api_c/mutex_set_align.html
@@ -0,0 +1,94 @@
+<!--$Id: mutex_set_align.so,v 10.1 2005/07/20 16:34:00 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_set_align</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_set_align</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_set_align(DB_ENV *dbenv, u_int32_t align);
+<p>
+int
+DB_ENV-&gt;mutex_get_align(DB_ENV *dbenv, u_int32_t *alignp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_set_align</h3>
+<p>Set the mutex alignment, in bytes.</p>
+<p>It is sometimes advantageous to align mutexes on specific byte
+boundaries in order to minimize cache line collisions. The
+DB_ENV-&gt;mutex_set_align method specifies an alignment for mutexes allocated
+by Berkeley DB.</p>
+<p>The database environment's mutex alignment may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "mutex_set_align", one or more whitespace
+characters, and the mutex alignment 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 DB_ENV-&gt;mutex_set_align 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;mutex_set_align 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;mutex_set_align
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;mutex_set_align method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>align</b><dd>The <b>align</b> parameter is the mutex alignment, in bytes. The mutex
+alignment must be a power-of-two.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_set_align method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_get_align</h3>
+<p>The DB_ENV-&gt;mutex_get_align method returns the mutex alignment, in bytes.</p>
+<p>The DB_ENV-&gt;mutex_get_align method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;mutex_get_align method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>alignp</b><dd>The DB_ENV-&gt;mutex_get_align method returns the
+mutex alignment, in bytes in <b>alignp</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_set_max.html b/db/docs/api_c/mutex_set_max.html
new file mode 100644
index 000000000..dc5d3dd24
--- /dev/null
+++ b/db/docs/api_c/mutex_set_max.html
@@ -0,0 +1,158 @@
+<!--$Id: mutex_set_max.so,v 10.3 2005/08/03 21:24:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_set_max</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_set_max</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_set_increment(DB_ENV *dbenv, u_int32_t increment);
+<p>
+int
+DB_ENV-&gt;mutex_get_increment(DB_ENV *dbenv, u_int32_t *incrementp);
+<p>
+int
+DB_ENV-&gt;mutex_set_max(DB_ENV *dbenv, u_int32_t max);
+<p>
+int
+DB_ENV-&gt;mutex_get_max(DB_ENV *dbenv, u_int32_t *maxp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_set_max</h3>
+<p>Configure the total number of mutexes to allocate.</p>
+<p>Berkeley DB allocates a default number of mutexes based on the initial
+configuration of the database environment. That default calculation may
+be too small if the application has an unusual need for mutexes (for
+example, if the application opens an unexpectedly large number of
+databases) or too large (if the application is trying to minimize its
+memory footprint). The DB_ENV-&gt;mutex_set_max method is used to specify an
+absolute number of mutexes to allocate.</p>
+<p>Calling the DB_ENV-&gt;mutex_set_max method discards any value previously
+set using the DB_ENV-&gt;mutex_set_increment method.</p>
+<p>The database environment's total number of mutexes may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "mutex_set_max", one or more whitespace
+characters, and the total number of mutexes.
+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;mutex_set_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;mutex_set_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;mutex_set_max
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;mutex_set_max method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>max</b><dd>The <b>max</b> parameter is the absolute number of mutexes to
+allocate.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_set_max method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_get_max</h3>
+<p>The DB_ENV-&gt;mutex_get_max method returns the total number of mutexes allocated.</p>
+<p>The DB_ENV-&gt;mutex_get_max method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;mutex_get_max method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>maxp</b><dd>The DB_ENV-&gt;mutex_get_max method returns the
+total number of mutexes allocated in <b>maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_set_increment</h3>
+<p>Configure the number of additional mutexes to allocate.</p>
+<p>Additionally, an application may want to allocate mutexes for its own
+use. The DB_ENV-&gt;mutex_set_increment method is used to add a number of
+mutexes to the default allocation.</p>
+<p>Calling the DB_ENV-&gt;mutex_set_increment method discards any value previously
+set using the DB_ENV-&gt;mutex_set_max method.</p>
+<p>The database environment's number of additional mutexes may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "mutex_set_increment", one or more whitespace
+characters, and the number of additional mutexes.
+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;mutex_set_increment 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;mutex_set_increment 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;mutex_set_increment
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;mutex_set_increment method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>increment</b><dd>The <b>increment</b> parameter is the number of additional mutexes to
+allocate.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_set_increment method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_get_increment</h3>
+<p>The DB_ENV-&gt;mutex_get_increment method returns the number of additional mutexes to allocate.</p>
+<p>The DB_ENV-&gt;mutex_get_increment method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;mutex_get_increment method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>incrementp</b><dd>The DB_ENV-&gt;mutex_get_increment method returns the
+number of additional mutexes to allocate in <b>incrementp</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_set_tas_spins.html b/db/docs/api_c/mutex_set_tas_spins.html
new file mode 100644
index 000000000..5df720c79
--- /dev/null
+++ b/db/docs/api_c/mutex_set_tas_spins.html
@@ -0,0 +1,89 @@
+<!--$Id: mutex_set_tas_spins.so,v 10.30 2005/07/20 16:34:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_set_tas_spins</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_set_tas_spins</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_set_tas_spins(DB_ENV *dbenv, u_int32_t tas_spins);
+<p>
+int
+DB_ENV-&gt;mutex_get_tas_spins(DB_ENV *dbenv, u_int32_t *tas_spinsp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_set_tas_spins</h3>
+<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>
+<p>The database environment's test-and-set spin count may also be configured 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 DB_ENV-&gt;mutex_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;mutex_set_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;mutex_set_tas_spins method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<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;mutex_set_tas_spins method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_get_tas_spins</h3>
+<p>The DB_ENV-&gt;mutex_get_tas_spins method returns the test-and-set spin count.</p>
+<p>The DB_ENV-&gt;mutex_get_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;mutex_get_tas_spins method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>tas_spinsp</b><dd>The DB_ENV-&gt;mutex_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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_stat.html b/db/docs/api_c/mutex_stat.html
new file mode 100644
index 000000000..a60fcdce6
--- /dev/null
+++ b/db/docs/api_c/mutex_stat.html
@@ -0,0 +1,113 @@
+<!--$Id: mutex_stat.so,v 10.2 2005/11/08 11:43:55 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_stat</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_stat</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_stat(DB_ENV *env, DB_MUTEX_STAT **statp, u_int32_t flags);
+<p>
+int
+DB_ENV-&gt;mutex_stat_print(DB_ENV *env, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_stat</h3>
+<p>The DB_ENV-&gt;mutex_stat method returns the mutex subsystem statistics.</p>
+<p>The DB_ENV-&gt;mutex_stat method creates a statistical structure of type
+DB_MUTEX_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_MUTEX_STAT fields will be filled in:</p>
+<dl compact>
+<dt>u_int32_t st_mutex_align;<dd>The mutex alignment, in bytes.
+<dt>u_int32_t st_mutex_tas_spins;<dd>The number of times test-and-set mutexes will spin without blocking.
+<dt>int st_mutex_cnt;<dd>The total number of mutexes configured.
+<dt>u_int32_t st_mutex_free;<dd>The number of mutexes currently available.
+<dt>u_int32_t st_mutex_inuse;<dd>The number of mutexes currently in use.
+<dt>u_int32_t st_mutex_inuse_max;<dd>The maximum number of mutexes ever in use.
+<dt>roff_t st_regsize;<dd>The size of the mutex region, in bytes.
+<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
+obtaining the mutex region mutex.
+<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
+the mutex region mutex without waiting.
+</dl>
+<p>The DB_ENV-&gt;mutex_stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<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;mutex_stat method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_stat_print</h3>
+<p>The DB_ENV-&gt;mutex_stat_print method displays the
+mutex subsystem statistical information, as described for the DB_ENV-&gt;mutex_stat method.
+The information is printed to a specified output channel (see the
+<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or passed to an
+application callback function (see the <a href="../api_c/env_set_msgcall.html">DB_ENV-&gt;set_msgcall</a> method for
+more information).</p>
+<p>The DB_ENV-&gt;mutex_stat_print 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;mutex_stat_print method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<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:
+<dl compact>
+<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
+</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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/mutex_unlock.html b/db/docs/api_c/mutex_unlock.html
new file mode 100644
index 000000000..5b3f85179
--- /dev/null
+++ b/db/docs/api_c/mutex_unlock.html
@@ -0,0 +1,61 @@
+<!--$Id: mutex_unlock.so,v 10.1 2005/07/20 16:34:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;mutex_unlock</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;mutex_unlock</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;mutex_unlock(DB_ENV *dbenv, db_mutex_t mutex);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;mutex_unlock</h3>
+<p>The DB_ENV-&gt;mutex_unlock method unlocks the mutex locked by
+<a href="../api_c/mutex_lock.html">DB_ENV-&gt;mutex_lock</a>.</p>
+<p>The DB_ENV-&gt;mutex_unlock 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;mutex_unlock method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>mutex</b><dd>The <b>mutex</b> parameter is a mutex previously locked by
+<a href="../api_c/mutex_lock.html">DB_ENV-&gt;mutex_lock</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;mutex_unlock method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/object.html b/db/docs/api_c/object.html
index c0ca280d7..1aff307b0 100644
--- a/db/docs/api_c/object.html
+++ b/db/docs/api_c/object.html
@@ -1,4 +1,4 @@
-<!--$Id: object.so,v 10.14 2004/11/04 21:28:28 bostic Exp $-->
+<!--$Id: object.so,v 10.18 2005/09/13 19:23:43 gmf Exp $-->
<html>
<head>
<title>Berkeley DB API</title>
@@ -23,6 +23,7 @@ href="../api_c/c_pindex.html"
<a target="method" href="lock_list.html">Locking</a><br>
<a target="method" href="log_list.html">Logging</a><br>
<a target="method" href="memp_list.html">Memory Pool</a><br>
+<a target="method" href="mutex_list.html">Mutexes</a><br>
<a target="method" href="rep_list.html">Replication</a><br>
<a target="method" href="seq_list.html">Sequences</a><br>
<a target="method" href="txn_list.html">Transactions</a><br>
diff --git a/db/docs/api_c/rep_config.html b/db/docs/api_c/rep_config.html
new file mode 100644
index 000000000..d6cd0aca5
--- /dev/null
+++ b/db/docs/api_c/rep_config.html
@@ -0,0 +1,106 @@
+<!--$Id: rep_config.so,v 1.3 2006/07/14 23:08:59 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;rep_set_config</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;rep_set_config</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;rep_set_config(DB_ENV *env, u_int32_t which, int onoff);
+<p>
+int
+DB_ENV-&gt;rep_get_config(DB_ENV *dbenv, u_int32_t which, int *onoffp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_set_config</h3>
+<p>The DB_ENV-&gt;rep_set_config method method configures the Berkeley DB replication
+subsystem.</p>
+<p>The database environment's replication subsystem may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "rep_set_config", one or more whitespace
+characters, and the method <b>which</b> parameter as a string; for example,
+"rep_set_config REP_CONF_NOWAIT".
+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;rep_set_config 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;rep_set_config method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_set_config method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>onoff</b><dd>If the <b>onoff</b> parameter is zero, the configuration flag is turned
+off. Otherwise, it is turned on.
+<dt><b>which</b><dd>The <b>which</b> parameter must be set to one of the following values:
+<dl compact>
+<dt><a name="DB_REP_CONF_BULK">DB_REP_CONF_BULK</a><dd>The replication master sends groups of records to the clients in a
+single network transfer (defaults to off).
+<dt><a name="DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a><dd>The client should delay synchronizing to a newly declared master
+(defaults to off). Clients configured in this way will remain
+unsynchronized until the application calls the <a href="../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a> method.
+<dt><a name="DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a><dd>The replication master will not automatically re-initialize outdated
+clients (defaults to off).
+<p>The DB_REP_CONF_NOAUTOINIT flag is not supported by Replication
+Manager.</p>
+<dt><a name="DB_REP_CONF_NOWAIT">DB_REP_CONF_NOWAIT</a><dd>Berkeley DB method calls that would normally block while clients are in
+recovery will return errors immediately (defaults to off).
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;rep_set_config method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_get_config</h3>
+<p>The DB_ENV-&gt;rep_get_config method returns whether the specified <b>which</b>
+parameter is currently set or not.</p>
+<p>The DB_ENV-&gt;rep_get_config method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_get_config method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>which</b><dd>The <b>which</b> parameter is the message value for which configuration
+is being checked.
+<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. If the returned <b>onoff</b> value is zero, the parameter is off;
+otherwise on.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/rep_elect.html b/db/docs/api_c/rep_elect.html
index f765b4dea..d8dcf255a 100644
--- a/db/docs/api_c/rep_elect.html
+++ b/db/docs/api_c/rep_elect.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_elect.so,v 1.21 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_elect.so,v 1.24 2006/06/23 01:28:47 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,57 +23,89 @@
#include &lt;db.h&gt;
<p>
int
-DB_ENV-&gt;rep_elect(DB_ENV *env, int nsites, int nvotes,
- int priority, u_int32_t timeout, int *envid, u_int32_t flags);
+DB_ENV-&gt;rep_elect(DB_ENV *env,
+ int nsites, int nvotes, int *envid, u_int32_t flags);
</pre></h3>
<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.</p>
+<p>The DB_ENV-&gt;rep_elect method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</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>
+previous master, or the ID of the current replication site. The
+application is responsible for adjusting its relationship to the other
+database 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>
<h3>Parameters</h3>
<dl compact>
<dt><b>envid</b><dd>The <b>envid</b> parameter references memory into which
- the newly elected master's ID is copied.
-<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
-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.
-<dt><b>nvotes</b><dd>The <b>nvotes</b> parameter indicates the number of votes required by
-the application to successfully elect a new master. It must be a
-positive integer, no greater than <b>nsites</b>, or 0 if the election
-should use a simple majority of the <b>nsites</b> value as the
-requirement. A warning is given if half or fewer votes are required to
-win an election as that can potentially lead to multiple masters in the
-face of a network partition.
-<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).
-<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.
+ the newly elected master's ID is copied.
+<dt><b>nsites</b><dd>The <b>nsites</b> parameter specifies the number of replication sites
+expected to participate in the election. Once the current site has
+election information from that many sites, it will short-circuit the
+election and immediately cast its vote for a new master. The
+<b>nsites</b> parameter must be a positive integer, no less than
+<b>nvotes</b>, or 0 if the election should use the value previously set
+using the <a href="../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a> method.
+<dt><b>nvotes</b><dd>The <b>nvotes</b> parameter specifies the minimum number of replication
+sites from which the current site must have election information, before
+the current site will cast a vote for a new master. The <b>nvotes</b>
+parameter must be a positive integer and no greater than <b>nsites</b>,
+or 0 if the election should use the value ((<b>nsites</b> / 2) + 1) as
+the <b>nvotes</b> argument.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
+<p>Elections are done in two parts: first, replication sites collect
+information from the other replication sites they know about, and
+second, replication sites cast their votes for a new master. The second
+phase is triggered by one of two things: either the replication site
+gets election information from <b>nsites</b> sites, or the election
+<b>timeout</b> expires. Once the second phase is triggered, the
+replication site will cast a vote for the new master of its choice if,
+and only if, the site has election information from at least
+<b>nvotes</b> sites. If a site receives <b>nvotes</b> votes for it
+to become the new master, then it will become the new master.</p>
+<p>We recommend <b>nvotes</b> be set to at least:</p>
+<blockquote><pre>(sites participating in the election / 2) + 1</pre></blockquote>
+<p>to ensure there are never more than two masters active at the same time
+even in the case of a network partition. When a network partitions, 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 of the environments will fail to find a new master, as no site
+can get <b>nvotes</b> votes.</p>
+<p>We recommend <b>nsites</b> be set to:</p>
+<blockquote><pre>number of sites in the replication group - 1</pre></blockquote>
+<p>when choosing a new master after a current master fails. This allows
+the group to reach a consensus without having to wait for the timeout
+to expire.</p>
+<p>When choosing a master from among a group of client
+sites all restarting at the same time, it makes more sense to set
+<b>nsites</b> to the total number of sites in the group, since there is no
+known missing site. Furthermore, in order to ensure the best choice
+from among sites that may take longer to boot than the local site,
+setting <b>nvotes</b> also to this same total number of sites will
+guarantee that every site in the group is considered. (See the
+<a href="../ref/rep/elect.html">Elections</a>
+section in the Berkeley DB Reference Guide for more information.)</p>
+<p>Setting <b>nsites</b> to lower values can increase the speed of an
+election, but can also result in election failure, and is usually not
+recommended.</p>
<a name="2"><!--meow--></a>
<h3>Errors</h3>
<p>The DB_ENV-&gt;rep_elect method
may fail and return one of the following non-zero errors:</p>
<dl compact>
<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.
+complete the election in the election timeout period (see
+<a href="../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a> method for more information).
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -84,6 +116,6 @@ complete the election in the specified <b>timeout</b> period.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 67b592219..68d01cb67 100644
--- a/db/docs/api_c/rep_limit.html
+++ b/db/docs/api_c/rep_limit.html
@@ -1,17 +1,17 @@
-<!--$Id: rep_limit.so,v 1.18 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_limit.so,v 1.22 2006/03/15 19:39:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB_ENV-&gt;set_rep_limit</title>
+<title>Berkeley DB: DB_ENV-&gt;rep_set_limit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_rep_limit</h3>
+<h3>DB_ENV-&gt;rep_set_limit</h3>
</td>
<td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,20 +23,22 @@
#include &lt;db.h&gt;
<p>
int
-DB_ENV-&gt;set_rep_limit(DB_ENV *env, u_int32_t gbytes, u_int32_t bytes);
+DB_ENV-&gt;rep_set_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);
+DB_ENV-&gt;rep_get_limit(DB_ENV *dbenv, u_int32_t *gbytesp, u_int32_t *bytesp);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DB_ENV-&gt;set_rep_limit</h3>
-<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
+<h3>Description: DB_ENV-&gt;rep_set_limit</h3>
+<p>The DB_ENV-&gt;rep_set_limit method sets a byte-count limit on the amount of data
+that will be transmitted from a site in response to a single message
+processed by the <a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method. The limit is not a hard limit,
+and the record that exceeds the limit is the last record to be sent.</p>
+<p>The DB_ENV-&gt;rep_set_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
+<p>The DB_ENV-&gt;rep_set_limit method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_set_limit method
returns a non-zero error value on failure
and 0 on success.
</p>
@@ -48,19 +50,19 @@ number of bytes that will be sent in a single call to <a href="../api_c/rep_mess
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
+<h3>Description: rep_get_limit</h3>
+<p>The DB_ENV-&gt;rep_get_limit method may be called at any time during the life of the
application.</p>
-<p>The DB_ENV-&gt;get_rep_limit method
+<p>The DB_ENV-&gt;rep_get_limit method
returns a non-zero error value on failure
and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
<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.
+ the additional bytes of memory in the current transmit limit is copied.
<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.
+ the gigabytes of memory in the in the current transmit limit is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -71,6 +73,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 275110849..95c4f8bff 100644
--- a/db/docs/api_c/rep_list.html
+++ b/db/docs/api_c/rep_list.html
@@ -1,5 +1,5 @@
<!--$Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,17 +10,29 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Replication and Related Methods</h3>
-<!--$Id: m4.methods,v 1.3 2004/11/02 20:04:10 bostic Exp $-->
+<!--$Id: m4.methods,v 1.8 2006/09/07 16:17:58 bostic Exp $-->
<table border=1 align=center>
-<tr><th>Replication and Related Methods</th><th>Description</th></tr>
+<tr><th>Replication Manager Methods</th><th>Description</th></tr>
+<!--DbEnv::repmgr_add_remote_site--><tr><td><a href="../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a></td><td>Specify the replication manager's remote sites</td></tr>
+<!--DbEnv::repmgr_set_ack_policy--><tr><td><a href="../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a></td><td>Specify the replication manager's client acknowledgement policy</td></tr>
+<!--DbEnv::repmgr_set_local_site--><tr><td><a href="../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a></td><td>Specify the replication manager's local site</td></tr>
+<!--DbEnv::repmgr_site_list--><tr><td><a href="../api_c/repmgr_site_list.html">DB_ENV-&gt;repmgr_site_list</a></td><td>List the sites and their status</td></tr>
+<!--DbEnv::repmgr_start--><tr><td><a href="../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a></td><td>Start the replication manager</td></tr>
+<tr><th>Base Replication API</th><th><br></th></tr>
<!--DbEnv::rep_elect--><tr><td><a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
<!--DbEnv::rep_process_message--><tr><td><a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a></td><td>Process a replication message</td></tr>
+<!--DbEnv::rep_start--><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><th>Additional Replication Methods</th><th><br></th></tr>
<!--DbEnv::rep_stat--><tr><td><a href="../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
+<!--DbEnv::rep_sync--><tr><td><a href="../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a></td><td>Replication synchronization</td></tr>
<tr><th>Replication Configuration</th><th><br></th></tr>
-<!--DbEnv::rep_start--><tr><td><a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
-<!--DbEnv::set_rep_limit--><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>
-<!--DbEnv::set_rep_transport--><tr><td><a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
+<!--DbEnv::rep_set_config--><tr><td><a href="../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a></td><td>Configure the replication subsystem</td></tr>
+<!--DbEnv::rep_set_limit--><tr><td><a href="../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<!--DbEnv::rep_set_nsites--><tr><td><a href="../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a></td><td>Configure replication group site count</td></tr>
+<!--DbEnv::rep_set_priority--><tr><td><a href="../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a></td><td>Configure replication site priority</td></tr>
+<!--DbEnv::rep_set_timeout--><tr><td><a href="../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a></td><td>Configure replication timeouts</td></tr>
+<!--DbEnv::rep_set_transport--><tr><td><a href="../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a></td><td>Configure replication transport callback</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c13301089..66f7c15dc 100644
--- a/db/docs/api_c/rep_message.html
+++ b/db/docs/api_c/rep_message.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_message.so,v 1.30 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_message.so,v 1.38 2006/06/24 00:33:22 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,11 @@ DB_ENV-&gt;rep_process_message(DB_ENV *env,
<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>The DB_ENV-&gt;rep_process_message method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</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
@@ -48,13 +53,25 @@ The application should reconfigure itself as a client by calling the
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>
+<dt><a name="DB_REP_IGNORE">DB_REP_IGNORE</a><dd>
+<p>The DB_ENV-&gt;rep_process_message method will return DB_REP_IGNORE if this message cannot be processed.
+This is an indication that this message is irrelevant to the current
+replication state (for example, an old message
+from a previous generation arrives and is processed late).
+</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>
+<dt><a name="DB_REP_JOIN_FAILURE">DB_REP_JOIN_FAILURE</a><dd>
+<p>The DB_ENV-&gt;rep_process_message method will return DB_REP_JOIN_FAILURE if a new master has been chosen but the client is unable to synchronize
+with the new master (possibly because the client has been configured
+with the <a href="../api_c/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a> flag to turn-off automatic
+internal initialization).
+</p>
<dt><a name="DB_REP_NEWMASTER">DB_REP_NEWMASTER</a><dd>
-<p>The DB_ENV-&gt;rep_process_message method will return DB_REP_NEWMASTER if a new master has been elected.
+<p>The DB_ENV-&gt;rep_process_message method will return DB_REP_NEWMASTER if a new master has been chosen.
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
@@ -70,14 +87,9 @@ channel with this new environment.
<dt><a name="DB_REP_NOTPERM">DB_REP_NOTPERM</a><dd>
<p>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>
-<dt><a name="DB_REP_STARTUPDONE">DB_REP_STARTUPDONE</a><dd>
-<p>The DB_ENV-&gt;rep_process_message method will return DB_REP_STARTUPDONE if the system detects that a client completed startup synchronization.
-The client application knows that this client is now processing
-live log records received from the master.
+The LSN of this record is returned. The application should take
+whatever action is deemed necessary to retain its recoverability
+characteristics.
</p>
</dl>
<p>Unless otherwise specified, the DB_ENV-&gt;rep_process_message method
@@ -95,7 +107,7 @@ corresponds to the environment that sent the message to be processed
information).
<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.
-<dt><b>ret_lsn</b><dd>If DB_ENV-&gt;rep_process_message method returns DB_REP_NOTPERM then the <b>ret_lsnp</b>
+<dt><b>ret_lsnp</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
@@ -112,6 +124,6 @@ cases the value of <b>ret_lsnp</b> is undefined.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_nsites.html b/db/docs/api_c/rep_nsites.html
new file mode 100644
index 000000000..f6845b926
--- /dev/null
+++ b/db/docs/api_c/rep_nsites.html
@@ -0,0 +1,77 @@
+<!--$Id: rep_nsites.so,v 1.2 2006/06/23 01:28:47 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;rep_set_nsites</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;rep_set_nsites</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;rep_set_nsites(DB_ENV *env, int nsites);
+<p>
+int
+DB_ENV-&gt;rep_get_nsites(DB_ENV *env, int *nsitesp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_set_nsites</h3>
+<p>The DB_ENV-&gt;rep_set_nsites method specifies the total number of sites
+in a replication group.</p>
+<p>The DB_ENV-&gt;rep_set_nsites method is typically called by applications which
+use the Berkeley DB library "replication manager" support. (However, see
+also the <a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> man page, the description of the <b>nsites</b>
+parameter.)</p>
+<p>The DB_ENV-&gt;rep_set_nsites 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;rep_set_nsites method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_set_nsites method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>nsites</b><dd>A positive integer specifying the total number of sites in the replication
+group.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_get_nsites</h3>
+<p>The DB_ENV-&gt;rep_get_nsites method returns the total number of sites in the replication group.</p>
+<p>The DB_ENV-&gt;rep_get_nsites method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_get_nsites method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>nsitesp</b><dd>The DB_ENV-&gt;rep_get_nsites method returns the
+total number of sites in the replication group in <b>nsitesp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/rep_priority.html b/db/docs/api_c/rep_priority.html
new file mode 100644
index 000000000..aa87e9125
--- /dev/null
+++ b/db/docs/api_c/rep_priority.html
@@ -0,0 +1,75 @@
+<!--$Id: rep_priority.so,v 1.1 2006/03/15 19:39:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;rep_set_priority</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;rep_set_priority</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;rep_set_priority(DB_ENV *env, int priority);
+int
+DB_ENV-&gt;rep_get_priority(DB_ENV *env, int *priorityp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_set_priority</h3>
+<p>The DB_ENV-&gt;rep_set_priority method specifies the database environment's
+priority in replication group elections. The priority must be a
+positive integer, or 0 if this environment cannot be a replication
+group master.</p>
+<p>The DB_ENV-&gt;rep_set_priority 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;rep_set_priority method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_set_priority method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>priority</b><dd>The priority of this database environment in the replication group. The
+priority must be a positive integer, or 0 if this environment cannot be
+a replication group master. (See <a href="../ref/rep/pri.html">Replication environment priorities</a> for more information).
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_get_priority</h3>
+<p>The DB_ENV-&gt;rep_get_priority method returns the database environment priority.</p>
+<p>The DB_ENV-&gt;rep_get_priority method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_get_priority method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>priorityp</b><dd>The DB_ENV-&gt;rep_get_priority method returns the
+database environment priority in <b>priorityp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8d425dfd9..b13ac31c7 100644
--- a/db/docs/api_c/rep_start.html
+++ b/db/docs/api_c/rep_start.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_start.so,v 1.16 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_start.so,v 1.17 2006/03/15 19:39:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,26 +28,31 @@ DB_ENV-&gt;rep_start(DB_ENV *env, DBT *cdata, u_int32_t flags);
<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.</p>
+or master in a group of replicated database environments.</p>
+<p>The DB_ENV-&gt;rep_start method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</p>
+<p>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="../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>
+to send replication messages by calling the <a href="../api_c/rep_transport.html">DB_ENV-&gt;rep_set_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>
<dl compact>
-<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.
+<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 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.
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to one of the following values:
<dl compact>
<dt><a name="DB_REP_CLIENT">DB_REP_CLIENT</a><dd>Configure the environment as a replication client.
@@ -59,7 +64,7 @@ should be NULL.
may fail and return one of the following non-zero errors:</p>
<dl compact>
<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>;
+a replication group by a call to <a href="../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a>;
the database environment was not already opened; or if an
invalid flag value or parameter was specified.
</dl>
@@ -72,6 +77,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 627fdab2c..5c38ed2ae 100644
--- a/db/docs/api_c/rep_stat.html
+++ b/db/docs/api_c/rep_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_stat.so,v 10.32 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_stat.so,v 10.39 2005/11/11 19:00:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -43,19 +43,45 @@ the memory reference; references inside the returned memory need not be
individually freed.</p>
<p>The following DB_REP_STAT fields will be filled in:</p>
<dl compact>
-<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, 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 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_bulk_fills;<dd>The number of times the bulk buffer filled up, forcing the buffer content
+to be sent.
+<dt>u_int32_t st_bulk_overflows;<dd>The number of times a record was bigger than the entire bulk buffer,
+and therefore had to be sent as a singleton.
+<dt>u_int32_t st_bulk_records;<dd>The number of records added to a bulk buffer.
+<dt>u_int32_t st_bulk_transfers;<dd>The number of bulk buffers transferred (via a call to the
+application's <b>send</b> function).
+<dt>u_int32_t st_client_rerequests;<dd>The number of times this client site received a "re-request" message,
+indicating that a request it previously sent to another client could
+not be serviced by that client. (Compare to
+<b>st_client_svc_miss</b>.)
+<dt>u_int32_t st_client_svc_miss;<dd>The number of "request" type messages received by this client that
+could not be processed, forcing the originating requester to try sending
+the request to the master (or another client).
+<dt>u_int32_t st_client_svc_req;<dd>The number of "request" type messages received by this client.
+("Request" messages are usually sent from a client to the master, but a
+message marked with the <a href="../api_c/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a> flag in the invocation
+of the application's <b>send</b> function may be sent to another client
+instead.)
<dt>u_int32_t st_dupmasters;<dd>The number of duplicate master conditions detected.
+<dt>u_int32_t st_egen;<dd>The current election generation number.
+<dt>u_int32_t st_election_cur_winner;<dd>The election winner.
+<dt>u_int32_t st_election_gen;<dd>The election generation number.
+<dt>DB_LSN st_election_lsn;<dd>The maximum LSN of election winner.
+<dt>u_int32_t st_election_nsites;<dd>The number sites responding to this site during the last election.
+<dt>u_int32_t st_election_nvotes;<dd>The number of votes required in the last election.
+<dt>u_int32_t st_election_priority;<dd>The election priority.
+<dt>u_int32_t st_election_sec;<dd>The number of seconds the last election took (the total election time
+is <b>st_election_sec</b> plus <b>st_election_usec</b>).
+<dt>u_int32_t st_election_status;<dd>The current election phase (0 if no election is in progress).
+<dt>u_int32_t st_election_tiebreaker;<dd>The election tiebreaker value.
+<dt>u_int32_t st_election_usec;<dd>The number of microseconds the last election took (the total election
+time is <b>st_election_sec</b> plus <b>st_election_usec</b>).
+<dt>u_int32_t st_election_votes;<dd>The number of votes received in the last election.
+<dt>u_int32_t st_elections;<dd>The number of elections held.
+<dt>u_int32_t st_elections_won;<dd>The number of elections won.
<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_egen;<dd>The current election generation number.
<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.
@@ -70,31 +96,28 @@ being waited for, or 0 if no log 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>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>u_int32_t st_next_pg;<dd>The next page number we expect to receive.
-<dt>u_int32_t st_waiting_pg;<dd>The page number of the first page we have after missing pages
-being waited for, or 0 if no pages are currently missing.
+<dt>int st_nsites;<dd>The number of sites used in the last election.
+<dt>u_int32_t 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_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>.
+<dt>u_int32_t st_outdated;<dd>The number of outdated conditions detected.
<dt>u_int32_t st_pg_duplicated;<dd>The number of duplicate pages received.
<dt>u_int32_t st_pg_records;<dd>The number of pages received and stored.
<dt>u_int32_t st_pg_requested;<dd>The number of pages missed and requested from the master.
<dt>u_int32_t st_startup_complete;<dd>The client site has completed its startup procedures and is now
handling live records from the master.
+<dt>u_int32_t st_status;<dd>The current replication mode. Set to <a href="../api_c/repmgr_start.html#DB_REP_MASTER">DB_REP_MASTER</a> if the
+environment is a replication master, <a href="../api_c/repmgr_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a> if the
+environment is a replication client, or 0 if replication is not
+configured.
<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.
-<dt>u_int32_t st_elections_won;<dd>The number of elections won.
-<dt>u_int32_t st_election_status;<dd>The current election phase (0 if no election is in progress).
-<dt>u_int32_t st_election_cur_winner;<dd>The election winner.
-<dt>u_int32_t st_election_gen;<dd>The election generation number.
-<dt>DB_LSN st_election_lsn;<dd>The maximum LSN of election winner.
-<dt>u_int32_t st_election_nsites;<dd>The number sites expected to participate in elections.
-<dt>u_int32_t st_election_nvotes;<dd>The number of votes required to complete the election.
-<dt>u_int32_t 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_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>.
-<dt>u_int32_t st_election_priority;<dd>The election priority.
-<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.
+<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_waiting_pg;<dd>The page number of the first page we have after missing pages
+being waited for, or 0 if no pages are currently missing.
</dl>
<p>The DB_ENV-&gt;rep_stat method
returns a non-zero error value on failure
@@ -108,7 +131,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;rep_stat method
@@ -119,7 +142,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DB_ENV-&gt;rep_stat_print</h3>
-<p>The DB_ENV-&gt;rep_stat_print method returns the
+<p>The DB_ENV-&gt;rep_stat_print method displays the
replication subsystem statistical information, as described for the DB_ENV-&gt;rep_stat method.
The information is printed to a specified output channel (see the
<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or passed to an
@@ -133,10 +156,11 @@ and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -148,6 +172,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_sync.html b/db/docs/api_c/rep_sync.html
new file mode 100644
index 000000000..e0d55abf5
--- /dev/null
+++ b/db/docs/api_c/rep_sync.html
@@ -0,0 +1,62 @@
+<!--$Id: rep_sync.so,v 1.9 2006/07/12 20:32:35 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;rep_sync</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;rep_sync</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;rep_sync(DB_ENV *env, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_sync</h3>
+<p>The DB_ENV-&gt;rep_sync method forces master synchronization to begin for this
+client. This method is the other half of setting the
+<a href="../api_c/rep_config.html#DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a> flag via the <a href="../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a> method.</p>
+<p>If an application has configured delayed master synchronization, the
+application must synchronize explicitly (otherwise the client will
+remain out-of-date and will ignore all database changes forwarded from
+the replication group master). The DB_ENV-&gt;rep_sync method may be called any
+time after the client application learns that the new master has been
+established, either by receiving a <a href="../api_c/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a> event
+notification, or from a <a href="../api_c/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a> return code from
+<a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>.</p>
+<p>The DB_ENV-&gt;rep_sync 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;rep_sync method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/rep_timeout.html b/db/docs/api_c/rep_timeout.html
new file mode 100644
index 000000000..c535cbff6
--- /dev/null
+++ b/db/docs/api_c/rep_timeout.html
@@ -0,0 +1,97 @@
+<!--$Id: rep_timeout.so,v 1.3 2006/06/30 23:05:16 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;rep_set_timeout</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;rep_set_timeout</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;rep_set_timeout(DB_ENV *env, int which, u_int32_t timeout);
+<p>
+int
+DB_ENV-&gt;rep_get_timeout(DB_ENV *env, int which, u_int32_t *timeoutp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_set_timeout</h3>
+<p>The DB_ENV-&gt;rep_set_timeout method specifies a variety of replication timeout
+values.</p>
+<p>The DB_ENV-&gt;rep_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>
+<p>The DB_ENV-&gt;rep_set_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_set_timeout method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>which</b><dd>The <b>which</b> parameter must be set to one of the following values:
+<dl compact>
+<dt><a name="DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a><dd>Configure the amount of time the replication manager's transport
+function waits to collect enough acknowledgments from replication group
+clients, before giving up and returning a failure indication. The
+default wait time is 1 second.
+<dt><a name="DB_REP_ELECTION_TIMEOUT">DB_REP_ELECTION_TIMEOUT</a><dd>The timeout period for an election. The default timeout is 2 seconds.
+<dt><a name="DB_REP_ELECTION_RETRY">DB_REP_ELECTION_RETRY</a><dd>Configure the amount of time the replication manager will wait before
+retrying a failed election. The default wait time is 10 seconds.
+<dt><a name="DB_REP_CONNECTION_RETRY">DB_REP_CONNECTION_RETRY</a><dd>Configure the amount of time the replication manager will wait before
+trying to re-establish a connection to another site after a communication
+failure. The default wait time is 30 seconds.
+</dl>
+<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>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;rep_set_timeout method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_get_timeout</h3>
+<p>The DB_ENV-&gt;rep_get_timeout method returns the timeout value for the specified
+<b>which</b> parameter.</p>
+<p>The DB_ENV-&gt;rep_get_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;rep_get_timeout method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>which</b><dd>The <b>which</b> parameter is the timeout value for which the value
+is being returned.
+<dt><b>timeoutp</b><dd>The <b>timeoutp</b> parameter references memory into which
+ the timeout value of the specified <b>which</b> parameter is copied. The returned <b>timeout</b> value is in microseconds.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f4ee7ae9a..f6addcbd8 100644
--- a/db/docs/api_c/rep_transport.html
+++ b/db/docs/api_c/rep_transport.html
@@ -1,17 +1,17 @@
-<!--$Id: rep_transport.so,v 1.31 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_transport.so,v 1.35 2006/06/05 23:03:53 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB_ENV-&gt;set_rep_transport</title>
+<title>Berkeley DB: DB_ENV-&gt;rep_set_transport</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;set_rep_transport</h3>
+<h3>DB_ENV-&gt;rep_set_transport</h3>
</td>
<td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,28 +23,33 @@
#include &lt;db.h&gt;
<p>
int
-DB_ENV-&gt;set_rep_transport(DB_ENV *env, int envid,
+DB_ENV-&gt;rep_set_transport(DB_ENV *env, int envid,
int (*send)(DB_ENV *dbenv,
const DBT *control, const DBT *rec, const DB_LSN *lsnp,
int envid, u_int32_t flags));
</pre></h3>
<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
+<h3>Description: DB_ENV-&gt;rep_set_transport</h3>
+<p>The DB_ENV-&gt;rep_set_transport method initializes the communication infrastructure
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
+<p>The DB_ENV-&gt;rep_set_transport method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</p>
+<p>The DB_ENV-&gt;rep_set_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
+<p>The DB_ENV-&gt;rep_set_transport method may be called at any time during the life of the
application.</p>
-<p>The DB_ENV-&gt;set_rep_transport method
+<p>The DB_ENV-&gt;rep_set_transport method
returns a non-zero error value on failure
and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
<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
+a non-negative integer and uniquely identify this Berkeley DB database environment
(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
information).
<dt><b>send</b><dd>The <b>send</b> callback function is used to transmit data using the
@@ -73,6 +78,8 @@ cases, the sending site should not be asked to process the message.</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:
<dl compact>
+<dt><a name="DB_REP_ANYWHERE">DB_REP_ANYWHERE</a><dd>The message is a client request that can be satisfied by another client
+as well as by the master.
<dt><a name="DB_REP_NOBUFFER">DB_REP_NOBUFFER</a><dd>The record being sent should be transmitted immediately and not buffered
or delayed.
<dt><a name="DB_REP_PERMANENT">DB_REP_PERMANENT</a><dd>The record being sent is critical for maintaining database integrity
@@ -80,20 +87,25 @@ or delayed.
application should take appropriate action to enforce the reliability
guarantees it has chosen, such as waiting for acknowledgement from one
or more clients.
+<dt><a name="DB_REP_REREQUEST">DB_REP_REREQUEST</a><dd>The message is a client request that has already been made and to which
+no response was received.
</dl>
</dl>
<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>
-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>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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<h3>Errors</h3>
-<p>The DB_ENV-&gt;set_rep_transport method
+<p>The DB_ENV-&gt;rep_set_transport method
may fail and return one of the following non-zero errors:</p>
<dl compact>
<dt>EINVAL<dd>An
@@ -108,6 +120,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/repmgr_ack_policy.html b/db/docs/api_c/repmgr_ack_policy.html
new file mode 100644
index 000000000..b5688f6e8
--- /dev/null
+++ b/db/docs/api_c/repmgr_ack_policy.html
@@ -0,0 +1,100 @@
+<!--$Id: repmgr_ack_policy.so,v 1.5 2006/09/07 19:26:44 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;repmgr_set_ack_policy</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;repmgr_set_ack_policy</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;repmgr_set_ack_policy(DB_ENV *env, int ack_policy);
+<p>
+int
+DB_ENV-&gt;repmgr_get_ack_policy(DB_ENV *env, int *ack_policyp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;repmgr_set_ack_policy</h3>
+<p>The DB_ENV-&gt;repmgr_set_ack_policy method specifies how master and client sites
+will handle acknowledgment of replication messages which are necessary
+for "permanent" records. The current implementation requires all
+sites in a replication group configure the same acknowledgement
+policy.</p>
+<p>The DB_ENV-&gt;repmgr_set_ack_policy 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;repmgr_set_ack_policy method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;repmgr_set_ack_policy method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>ack_policy</b><dd>The <b>ack_policy</b> parameter must be set to one of the following
+values:
+<dl compact>
+<dt><a name="DB_REPMGR_ACKS_ALL">DB_REPMGR_ACKS_ALL</a><dd>The master should wait until all replication clients have acknowledged
+each permanent replication message.
+<dt><a name="DB_REPMGR_ACKS_ALL_PEERS">DB_REPMGR_ACKS_ALL_PEERS</a><dd>The master should wait until all electable peers have acknowledged each
+permanent replication message (where "electable peer" means a client
+capable of being subsequently elected master of the replication
+group).
+<dt><a name="DB_REPMGR_ACKS_NONE">DB_REPMGR_ACKS_NONE</a><dd>The master should not wait for any client replication message
+acknowledgments.
+<dt><a name="DB_REPMGR_ACKS_ONE">DB_REPMGR_ACKS_ONE</a><dd>The master should wait until at least one client site has acknowledged
+each permanent replication message.
+<dt><a name="DB_REPMGR_ACKS_ONE_PEER">DB_REPMGR_ACKS_ONE_PEER</a><dd>The master should wait until at least one electable peer has
+acknowledged each permanent replication message (where "electable peer"
+means a client capable of being subsequently elected master of the
+replication group).
+<dt><a name="DB_REPMGR_ACKS_QUORUM">DB_REPMGR_ACKS_QUORUM</a><dd>The master should wait until it has received acknowledgements from the
+minimum number of electable peers sufficient to ensure that the effect
+of the permanent record remains durable if an election is held (where
+"electable peer" means a client capable of being subsequently elected
+master of the replication group). This is the default acknowledgement
+policy.
+</dl>
+<p>Waiting for client acknowledgements is always limited by the
+<a href="../api_c/rep_timeout.html#DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a> specified by <a href="../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a>.</p>
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;repmgr_get_ack_policy</h3>
+<p>The DB_ENV-&gt;repmgr_get_ack_policy method returns the replication manager's client acknowledgment policy.</p>
+<p>The DB_ENV-&gt;repmgr_get_ack_policy method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;repmgr_get_ack_policy method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>ack_policyp</b><dd>The DB_ENV-&gt;repmgr_get_ack_policy method returns the
+replication manager's client acknowledgment policy in <b>ack_policyp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/repmgr_local_site.html b/db/docs/api_c/repmgr_local_site.html
new file mode 100644
index 000000000..86ddf2f31
--- /dev/null
+++ b/db/docs/api_c/repmgr_local_site.html
@@ -0,0 +1,56 @@
+<!--$Id: repmgr_local_site.so,v 1.2 2006/04/27 18:07:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;repmgr_set_local_site</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;repmgr_set_local_site</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;repmgr_set_local_site(DB_ENV *env,
+ const char *host, u_int port, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;repmgr_set_local_site</h3>
+<p>The DB_ENV-&gt;repmgr_set_local_site method specifies the host identification
+string and port number for the local system.</p>
+<p>The DB_ENV-&gt;repmgr_set_local_site method must be called before the <a href="../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a> method has been
+called.</p>
+<p>The DB_ENV-&gt;repmgr_set_local_site method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<dt><b>host</b><dd>The site's host identification string, generally a TCP/IP host name.
+<dt><b>port</b><dd>The port number on which the local site is listening.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/repmgr_remote_site.html b/db/docs/api_c/repmgr_remote_site.html
new file mode 100644
index 000000000..7562086a2
--- /dev/null
+++ b/db/docs/api_c/repmgr_remote_site.html
@@ -0,0 +1,68 @@
+<!--$Id: repmgr_remote_site.so,v 1.5 2006/09/08 18:33:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;repmgr_add_remote_site</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;repmgr_add_remote_site</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;repmgr_add_remote_site(DB_ENV *env,
+ const char *host, u_int port, int *eidp, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;repmgr_add_remote_site</h3>
+<p>The DB_ENV-&gt;repmgr_add_remote_site method adds a new replication site to the
+replication manager's list of known sites. It is not necessary for
+all sites in a replication group to know about all other sites in the
+group.</p>
+<p>The DB_ENV-&gt;repmgr_add_remote_site method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;repmgr_add_remote_site method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>eidp</b><dd>If <b>eidp</b> is non-NULL, the
+environment ID assigned to the remote site is
+returned in the memory location referenced by <b>eidp</b>.
+<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:
+<dl compact>
+<dt><a name="DB_REPMGR_PEER">DB_REPMGR_PEER</a><dd>Specifying the DB_REPMGR_PEER flag configures client-to-client
+synchronization with the specified remote site.
+<p>Currently, the replication manager framework only supports a single client
+peer, and the last specified peer is used.</p>
+</dl>
+<dt><b>host</b><dd>The site's host identification string, generally a TCP/IP host name.
+<dt><b>port</b><dd>The port number on which the remote site is receiving.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/repmgr_site_list.html b/db/docs/api_c/repmgr_site_list.html
new file mode 100644
index 000000000..654e798f6
--- /dev/null
+++ b/db/docs/api_c/repmgr_site_list.html
@@ -0,0 +1,77 @@
+<!--$Id: repmgr_site_list.so,v 1.7 2006/09/11 16:57:54 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;repmgr_site_list</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;repmgr_site_list</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;repmgr_site_list(DB_ENV *env,
+ u_int *countp, DB_REPMGR_SITE **listp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;repmgr_site_list</h3>
+<p>The DB_ENV-&gt;repmgr_site_list method returns the status of the sites currently
+known by the replication manager.</p>
+<p>The DB_ENV-&gt;repmgr_site_list method creates a statistical structure of type
+DB_REPMGR_SITE 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_REPMGR_SITE fields will be filled in:</p>
+<dl compact>
+<dt>int eid;<dd>Environment ID assigned by the replication manager.
+This is the same value that is passed to the application's
+event notification function for the <a href="../api_c/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a> event.
+<dt>char host[];<dd>Nul-terminated host name.
+<dt>u_int port;<dd>TCP/IP port number.
+<dt>u_int32_t status;<dd>One of the following list of constants: <a name="DB_REPMGR_CONNECTED">DB_REPMGR_CONNECTED</a>,
+<a name="DB_REPMGR_DISCONNECTED">DB_REPMGR_DISCONNECTED</a>.
+</dl>
+<p>The DB_ENV-&gt;repmgr_site_list method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;repmgr_site_list method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>countp</b><dd>A count of the returned structures will be stored into the memory
+referenced by <b>countp</b>.
+<dt><b>listp</b><dd>A reference to an array of structures will be stored into the memory
+referenced by <b>listp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/repmgr_start.html b/db/docs/api_c/repmgr_start.html
new file mode 100644
index 000000000..f9dc53205
--- /dev/null
+++ b/db/docs/api_c/repmgr_start.html
@@ -0,0 +1,96 @@
+<!--$Id: repmgr_start.so,v 1.3 2006/07/14 23:08:18 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_ENV-&gt;repmgr_start</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_ENV-&gt;repmgr_start</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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-&gt;repmgr_start(DB_ENV *env, int nthreads, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;repmgr_start</h3>
+<p>The DB_ENV-&gt;repmgr_start method starts the replication manager.</p>
+<p>There are two ways to build Berkeley DB replication applications: the most
+common approach is to use the Berkeley DB library "replication manager"
+support, where the Berkeley DB library manages the replication group,
+including network transport, all replication message processing and
+acknowledgment, and group elections. Applications using the replication
+manager support generally make the following calls:</p>
+<ol>
+<p><li>Call <a href="../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a> to configure the local site in the
+replication group.
+<p><li>Call <a href="../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a> to configure the remote site(s) in
+the replication group.
+<p><li>Call <a href="../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a> to configure the message
+acknowledgment policy which provides the replication group's
+transactional needs.
+<p><li>Call <a href="../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> to configure the local site's election
+priority.
+<p><li>Call DB_ENV-&gt;repmgr_start to start the replication application.
+</ol>
+<p>For more information on building replication manager applications,
+please see the "Replication Manager Getting Started Guide" included in
+the Berkeley DB documentation.</p>
+<p>Applications with special needs (for example, applications using network
+protocols not supported by the Berkeley DB replication manager), must perform
+additional configuration and call other Berkeley DB replication methods. For
+more information on building advanced replication applications, please
+see the "Advanced Replication Applications Guide" included in the Berkeley DB
+documentation.</p>
+<p>The DB_ENV-&gt;repmgr_start 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;repmgr_start method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to one of the following values:
+<dl compact>
+<dt><a name="DB_REP_MASTER">DB_REP_MASTER</a><dd>Start as a master site, and do not call for an election. Note there
+must never be more than a single master in any replication group, and
+only one site at a time should ever be started with the
+DB_REP_MASTER flag specified.
+<dt><a name="DB_REP_CLIENT">DB_REP_CLIENT</a><dd>Start as a client site, and do not call for an election.
+<dt><a name="DB_REP_ELECTION">DB_REP_ELECTION</a><dd>Start as a client, and call for an election if no master is found.
+<dt><a name="DB_REP_FULL_ELECTION">DB_REP_FULL_ELECTION</a><dd>Start as a client, and call for an election if no master is found.
+<p>The <a href="../api_c/repmgr_start.html#DB_REP_FULL_ELECTION">DB_REP_FULL_ELECTION</a> flag configures a single special
+election on startup, where a master will only be confirmed if all
+members of the replication group vote. Subsequent elections will revert
+to only requiring a simple majority to elect a new master.</p>
+</dl>
+<dt><b>nthreads</b><dd>Specify the number of threads of control created and dedicated to processing
+replication messages. In addition to these message processing threads,
+the replication manager creates and manages a few of its own threads of
+control.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/seq_class.html b/db/docs/api_c/seq_class.html
index 706278617..bdc006c49 100644
--- a/db/docs/api_c/seq_class.html
+++ b/db/docs/api_c/seq_class.html
@@ -1,5 +1,5 @@
<!--$Id: seq_class.so,v 1.12 2004/10/18 19:46:31 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -73,6 +73,6 @@ DB_SEQUENCE
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_close.html b/db/docs/api_c/seq_close.html
index 7b17eebb1..160b1c437 100644
--- a/db/docs/api_c/seq_close.html
+++ b/db/docs/api_c/seq_close.html
@@ -1,5 +1,5 @@
<!--$Id: seq_close.so,v 1.2 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,6 +55,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_get.html b/db/docs/api_c/seq_get.html
index 3be578ea6..01e63be09 100644
--- a/db/docs/api_c/seq_get.html
+++ b/db/docs/api_c/seq_get.html
@@ -1,5 +1,5 @@
-<!--$Id: seq_get.so,v 1.8 2004/08/28 23:44:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: seq_get.so,v 1.11 2005/08/09 14:23:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,15 +35,15 @@ values in the sequence handle then they will be returned. Otherwise the
next value will be fetched from the database and incremented
(decremented) by enough to cover the <b>delta</b> and the next batch
of cached values.</p>
-<p>If the underlying database handle was opened in a transaction then
-either the <b>txnid</b> parameter must be a valid transaction handle or
-DB_AUTO_COMMIT must be specified. The <b>txnid</b> handle must be NULL
-if the sequence handle was opened with a non-zero cache size.</p>
<p>For maximum concurrency a non-zero cache size should be specified prior
-to opening the sequence handle and DB_AUTO_COMMIT | DB_TXN_NOSYNC should
-be specified each DB_SEQUENCE-&gt;get method call.</p>
-<p>The DB_SEQUENCE-&gt;get method will return EINVAL if the record in the database is not a valid sequence record,
-or the sequences have overflowed is range.
+to opening the sequence handle and <a href="../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> should be
+specified for each DB_SEQUENCE-&gt;get method call.</p>
+<p>By default, sequence ranges do not wrap; to cause the sequence to wrap
+around the beginning or end of its range, specify the <a href="../api_c/seq_set_flags.html#DB_SEQ_WRAP">DB_SEQ_WRAP</a>
+flag to the <a href="../api_c/seq_set_flags.html">DB_SEQUENCE-&gt;set_flags</a> method.</p>
+<p>The DB_SEQUENCE-&gt;get method will return EINVAL if the record in the database is not a valid sequence
+record, or the sequence has reached the beginning or end of its range
+and is not configured to wrap.
</p>
<h3>Parameters</h3>
<dl compact>
@@ -51,17 +51,32 @@ or the sequences have overflowed is range.
<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:
<dl compact>
-<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>If the database
-must be updated the update will be enclosed in a transaction
-and will be recoverable.
-<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If a DB_AUTO_COMMIT
-triggers a transaction, do not synchronously flush the log.
+<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If the operation is implicitly transaction protected (the <b>txnid</b>
+argument is NULL but the operation occurs to a transactional database),
+do not synchronously flush the log when the transaction commits.
</dl>
<dt><b>retp</b><dd><b>retp</b> points to the memory to hold the return value from
the sequence.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected. No <b>txnid</b> handle may be specified if the sequence handle was
+opened with a non-zero cache size.
+<p>If the underlying database handle was opened in a transaction, calling
+DB_SEQUENCE-&gt;get may result in changes to the sequence object; these
+changes will be automatically committed in a transaction internal to the
+Berkeley DB library. If the thread of control calling DB_SEQUENCE-&gt;get has
+an active transaction, which holds locks on the same database as the
+one in which the sequence object is stored, it is possible for a thread
+of control calling DB_SEQUENCE-&gt;get to self-deadlock because the active
+transaction's locks conflict with the internal transaction's locks.
+For this reason, it is often preferable for sequence objects to be
+stored in their own database.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -72,6 +87,6 @@ the <b>txnid</b> parameter is a transaction handle returned from
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_initial_value.html b/db/docs/api_c/seq_initial_value.html
new file mode 100644
index 000000000..f5a8f89f0
--- /dev/null
+++ b/db/docs/api_c/seq_initial_value.html
@@ -0,0 +1,60 @@
+<!--$Id: seq_initial_value.so,v 1.6 2004/11/29 15:30:23 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_SEQUENCE-&gt;initial_value</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_SEQUENCE-&gt;initial_value</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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_SEQUENCE-&gt;initial_value(DB_SEQUENCE *seq, db_seq_t value);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_SEQUENCE-&gt;initial_value</h3>
+<p>Set the initial value for a sequence. This call is only effective when
+the sequence is being created.</p>
+<p>The DB_SEQUENCE-&gt;initial_value method may not be called after the
+<a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;open</a> method is called.</p>
+<p>The DB_SEQUENCE-&gt;initial_value method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>value</b><dd>The initial value to set.
+</dl>
+<h3>Errors</h3>
+<p>The DB_SEQUENCE-&gt;initial_value method
+may fail and return one of the following non-zero errors:</p>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/seq_class.html">DB_SEQUENCE</a>
+<h3>See Also</h3>
+<a href="../api_c/seq_list.html">Sequences and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/seq_list.html b/db/docs/api_c/seq_list.html
index 54407bbc0..881d578cc 100644
--- a/db/docs/api_c/seq_list.html
+++ b/db/docs/api_c/seq_list.html
@@ -1,5 +1,5 @@
<!--$Id: seq_list.so,v 1.2 2004/08/18 02:34:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Sequences and Related Methods</h3>
-<!--$Id: m4.methods,v 1.6 2004/11/02 20:04:10 bostic Exp $-->
+<!--$Id: m4.methods,v 1.7 2004/11/29 15:34:22 bostic Exp $-->
<table border=1 align=center>
<tr><th>Sequences and Related Methods</th><th>Description</th></tr>
<!--DbSequence::--><tr><td><a href="../api_c/seq_class.html">db_sequence_create</a></td><td>Create a sequence handle</td></tr>
@@ -18,7 +18,7 @@
<!--DbSequence::get--><tr><td><a href="../api_c/seq_get.html">DB_SEQUENCE-&gt;get</a></td><td>Get the next sequence element(s)</td></tr>
<!--DbSequence::get_dbp--><tr><td><a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;get_dbp</a></td><td>Return a handle for the underlying sequence database</td></tr>
<!--DbSequence::get_key--><tr><td><a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;get_key</a></td><td>Return the key for a sequence</td></tr>
-<!--DbSequence::init_value--><tr><td><a href="../api_c/seq_init_value.html">DB_SEQUENCE-&gt;init_value</a></td><td>Set the initial value of a sequence</td></tr>
+<!--DbSequence::initial_value--><tr><td><a href="../api_c/seq_initial_value.html">DB_SEQUENCE-&gt;initial_value</a></td><td>Set the initial value of a sequence</td></tr>
<!--DbSequence::open--><tr><td><a href="../api_c/seq_open.html">DB_SEQUENCE-&gt;open</a></td><td>Open a sequence</td></tr>
<!--DbSequence::remove--><tr><td><a href="../api_c/seq_remove.html">DB_SEQUENCE-&gt;remove</a></td><td>Remove a sequence</td></tr>
<!--DbSequence::stat--><tr><td><a href="../api_c/seq_stat.html">DB_SEQUENCE-&gt;stat</a></td><td>Return sequence statistics</td></tr>
@@ -27,6 +27,6 @@
<!--DbSequence::set_flags--><tr><td><a href="../api_c/seq_set_flags.html">DB_SEQUENCE-&gt;set_flags</a></td><td>Set the flags for a sequence</td></tr>
<!--DbSequence::set_range--><tr><td><a href="../api_c/seq_set_range.html">DB_SEQUENCE-&gt;set_range</a></td><td>Set the range for a sequence</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_open.html b/db/docs/api_c/seq_open.html
index 2a3b56b47..72acbfa9b 100644
--- a/db/docs/api_c/seq_open.html
+++ b/db/docs/api_c/seq_open.html
@@ -1,5 +1,5 @@
-<!--$Id: seq_open.so,v 1.7 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: seq_open.so,v 1.9 2005/01/20 01:15:15 ubell Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,10 +45,6 @@ the persistent sequence data.
<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:
<dl compact>
-<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB_SEQUENCE-&gt;open call within a transaction. If the call
-succeeds, the open operation will be recoverable. If the
-<a href="../api_c/env_open.html#DB_CREATE">DB_CREATE</a> flag is specified and the call fails, no sequence will
-have been created.
<dt><a name="DB_CREATE">DB_CREATE</a><dd>Create the sequence. If the sequence does not already exist and the
DB_CREATE flag is not specified, the DB_SEQUENCE-&gt;open will fail.
<dt><a name="DB_EXCL">DB_EXCL</a><dd>Return an error if the sequence already exists. The <a href="../api_c/db_open.html#DB_EXCL">DB_EXCL</a>
@@ -56,13 +52,20 @@ flag is only meaningful when specified with the <a href="../api_c/env_open.html#
flag.
<dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_c/seq_class.html">DB_SEQUENCE</a> handle returned by DB_SEQUENCE-&gt;open to be
<i>free-threaded</i>; that is, usable by multiple threads within a
-single address space.
+single address space. Note that if multiple threads create multiple
+sequences using the same database handle that handle must have been
+opened specifying <a name="DB_THREAD">DB_THREAD</a>.
</dl>
-<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/seq_class.html">DB_SEQUENCE</a>
-handle require the <a href="../api_c/seq_class.html">DB_SEQUENCE</a> handle itself be transactionally
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected. Transactionally protected operations on a <a href="../api_c/seq_class.html">DB_SEQUENCE</a> handle
+require the <a href="../api_c/seq_class.html">DB_SEQUENCE</a> handle itself be transactionally
protected during its open if the open creates the sequence.
</dl>
<hr size=1 noshade>
@@ -71,7 +74,7 @@ protected during its open if the open creates the sequence.
<h3>Parameters</h3>
<dl compact>
<dt><b>dbp</b><dd>The <b>dbp</b> parameter references memory into which
-a pointer to the database handle is copied.
+a pointer to the database handle is copied.
</dl>
<p>The DB_SEQUENCE-&gt;get_dbp method may be called at any time during the life of the
application.</p>
@@ -85,7 +88,7 @@ and 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>key</b><dd>The <b>key</b> parameter references memory into which
-a pointer to the key data is copied.
+a pointer to the key data is copied.
</dl>
<p>The DB_SEQUENCE-&gt;get_key method may be called at any time during the life of the
application.</p>
@@ -102,6 +105,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_remove.html b/db/docs/api_c/seq_remove.html
index 015fe8268..91c36093d 100644
--- a/db/docs/api_c/seq_remove.html
+++ b/db/docs/api_c/seq_remove.html
@@ -1,5 +1,5 @@
-<!--$Id: seq_remove.so,v 1.5 2004/08/18 02:34:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: seq_remove.so,v 1.6 2004/12/16 19:13:04 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,14 +41,19 @@ and 0 on success.
<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:
<dl compact>
-<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>The remove
-will be enclosed in a transaction and will be recoverable.
-<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If a DB_AUTO_COMMIT
-triggers a transaction, do not synchronously flush the log.
+<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If the operation is implicitly transaction protected (the <b>txnid</b>
+argument is NULL but the operation occurs to a transactional database),
+do not synchronously flush the log when the transaction commits.
</dl>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The DB_SEQUENCE-&gt;remove method
@@ -66,6 +71,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_set_cachesize.html b/db/docs/api_c/seq_set_cachesize.html
index 81f1b8430..020f65088 100644
--- a/db/docs/api_c/seq_set_cachesize.html
+++ b/db/docs/api_c/seq_set_cachesize.html
@@ -1,5 +1,5 @@
<!--$Id: seq_set_cachesize.so,v 1.8 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -71,6 +71,6 @@ current cache size in <b>sizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_set_flags.html b/db/docs/api_c/seq_set_flags.html
index 184faad18..8384d7242 100644
--- a/db/docs/api_c/seq_set_flags.html
+++ b/db/docs/api_c/seq_set_flags.html
@@ -1,5 +1,5 @@
<!--$Id: seq_set_flags.so,v 1.7 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -84,6 +84,6 @@ current flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_set_range.html b/db/docs/api_c/seq_set_range.html
index fd6a4feb2..af814e2d5 100644
--- a/db/docs/api_c/seq_set_range.html
+++ b/db/docs/api_c/seq_set_range.html
@@ -1,5 +1,5 @@
<!--$Id: seq_set_range.so,v 1.6 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -74,6 +74,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/seq_stat.html b/db/docs/api_c/seq_stat.html
index 897348901..907b15a8f 100644
--- a/db/docs/api_c/seq_stat.html
+++ b/db/docs/api_c/seq_stat.html
@@ -1,5 +1,5 @@
<!--$Id: seq_stat.so,v 1.8 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -94,6 +94,6 @@ of the following values:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3cbf08343..41151bd0f 100644
--- a/db/docs/api_c/set_func_close.html
+++ b/db/docs/api_c/set_func_close.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_close.so,v 10.14 2003/09/25 15:28:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1df305627..8bcc7af23 100644
--- a/db/docs/api_c/set_func_dirfree.html
+++ b/db/docs/api_c/set_func_dirfree.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_dirfree.so,v 10.19 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,6 @@ function.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f78f085cd..96e939272 100644
--- a/db/docs/api_c/set_func_dirlist.html
+++ b/db/docs/api_c/set_func_dirlist.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_dirlist.so,v 10.19 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,8 +23,7 @@
#include &lt;db.h&gt;
<p>
int
-db_env_set_func_dirlist(
- int (*func_dirlist)(const char *dir, char ***namesp, int *cntp));
+db_env_set_func_dirlist(int (*func_dirlist)(const char *dir, char ***namesp, int *cntp));
</pre></h3>
<hr size=1 noshade>
<h3>Description: db_env_set_func_dirlist</h3>
@@ -59,6 +58,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 285a660ec..3712b85f7 100644
--- a/db/docs/api_c/set_func_exists.html
+++ b/db/docs/api_c/set_func_exists.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_exists.so,v 10.18 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -56,6 +56,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e9ad98c58..ec8a6923c 100644
--- a/db/docs/api_c/set_func_free.html
+++ b/db/docs/api_c/set_func_free.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_free.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 116cd322a..bfed92e75 100644
--- a/db/docs/api_c/set_func_fsync.html
+++ b/db/docs/api_c/set_func_fsync.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_fsync.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_ftruncate.html b/db/docs/api_c/set_func_ftruncate.html
index 1d781d3a0..491cabef0 100644
--- a/db/docs/api_c/set_func_ftruncate.html
+++ b/db/docs/api_c/set_func_ftruncate.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_ftruncate.so,v 1.3 2004/09/20 14:29:50 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e8035c1c0..cadf0ee3e 100644
--- a/db/docs/api_c/set_func_ioinfo.html
+++ b/db/docs/api_c/set_func_ioinfo.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_ioinfo.so,v 10.17 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -64,6 +64,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5db5269f2..ac150fb79 100644
--- a/db/docs/api_c/set_func_malloc.html
+++ b/db/docs/api_c/set_func_malloc.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_malloc.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 98adb57d1..6f264d66d 100644
--- a/db/docs/api_c/set_func_map.html
+++ b/db/docs/api_c/set_func_map.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_map.so,v 10.20 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,6 +68,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2884f1fd6..d669b5dde 100644
--- a/db/docs/api_c/set_func_open.html
+++ b/db/docs/api_c/set_func_open.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_open.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_pread.html b/db/docs/api_c/set_func_pread.html
index cbca35cf9..903c54f00 100644
--- a/db/docs/api_c/set_func_pread.html
+++ b/db/docs/api_c/set_func_pread.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_pread.so,v 1.1 2003/12/11 21:32:46 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_pwrite.html b/db/docs/api_c/set_func_pwrite.html
index c5b85f705..d62fdcf83 100644
--- a/db/docs/api_c/set_func_pwrite.html
+++ b/db/docs/api_c/set_func_pwrite.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_pwrite.so,v 1.1 2003/12/11 21:32:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 24cec6802..336a98fc8 100644
--- a/db/docs/api_c/set_func_read.html
+++ b/db/docs/api_c/set_func_read.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_read.so,v 10.14 2003/09/25 15:28:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ec9ca76f8..8bac96017 100644
--- a/db/docs/api_c/set_func_realloc.html
+++ b/db/docs/api_c/set_func_realloc.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_realloc.so,v 10.14 2003/09/25 15:28:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 29c8701ee..c417ccfc0 100644
--- a/db/docs/api_c/set_func_rename.html
+++ b/db/docs/api_c/set_func_rename.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_rename.so,v 10.16 2003/09/25 15:28:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f00154ff0..d2be1904d 100644
--- a/db/docs/api_c/set_func_seek.html
+++ b/db/docs/api_c/set_func_seek.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_seek.so,v 10.19 2004/09/20 14:29:50 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,6 +59,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ce7bbe6ad..ece4db13a 100644
--- a/db/docs/api_c/set_func_sleep.html
+++ b/db/docs/api_c/set_func_sleep.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_sleep.so,v 10.20 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 aab4d9487..5b67ed106 100644
--- a/db/docs/api_c/set_func_unlink.html
+++ b/db/docs/api_c/set_func_unlink.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_unlink.so,v 10.14 2003/09/25 15:28:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d3499a0d4..dd2ec61a8 100644
--- a/db/docs/api_c/set_func_unmap.html
+++ b/db/docs/api_c/set_func_unmap.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_unmap.so,v 10.18 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,6 +57,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 58791e407..78d876db1 100644
--- a/db/docs/api_c/set_func_write.html
+++ b/db/docs/api_c/set_func_write.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_write.so,v 10.14 2003/09/25 15:28:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,8 +23,7 @@
#include &lt;db.h&gt;
<p>
int
-db_env_set_func_write(
- ssize_t (*func_write)(int fd, const void *buffer, size_t nbytes));
+db_env_set_func_write(ssize_t (*func_write)(int fd, const void *buffer, size_t nbytes));
</pre></h3>
<hr size=1 noshade>
<h3>Description: db_env_set_func_write</h3>
@@ -52,6 +51,6 @@ to the standard interface specification.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0c5e32566..3ac4f40ff 100644
--- a/db/docs/api_c/set_func_yield.html
+++ b/db/docs/api_c/set_func_yield.html
@@ -1,5 +1,5 @@
<!--$Id: set_func_yield.so,v 10.20 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -65,6 +65,6 @@ failure and 0 on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2b6bfeab5..9000506bf 100644
--- a/db/docs/api_c/txn_abort.html
+++ b/db/docs/api_c/txn_abort.html
@@ -1,5 +1,5 @@
<!--$Id: txn_abort.so,v 10.39 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ and 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 982fc81a4..b910a55f4 100644
--- a/db/docs/api_c/txn_begin.html
+++ b/db/docs/api_c/txn_begin.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_begin.so,v 10.72 2004/08/18 02:31:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_begin.so,v 10.78 2006/09/13 14:30:57 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,7 +36,7 @@ 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
+transactions as well; no 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>
@@ -53,13 +53,14 @@ and 0 on success.
<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:
<dl compact>
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>This transaction will have degree 2 isolation. This provides for cursor
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>This transaction will have degree 2 isolation. This provides for cursor
stability but not repeatable reads. Data items which have been
previously read by this transaction may be deleted or modified by other
transactions before this transaction completes.
-<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.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>This transaction will have degree 1 isolation. 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_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not
+specified when the underlying database was opened.
<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); that is,
@@ -72,6 +73,14 @@ overrides that setting.</p>
of this transaction, cause the operation to
return DB_LOCK_DEADLOCK
immediately instead of blocking on the lock.
+<dt><a name="DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a><dd>This transaction will execute with <a href="../ref/transapp/read.html">snapshot isolation</a>. For databases with the <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a>
+flag set, data values will be read as they are when the transaction
+begins, without taking read locks. Silently ignored for operations on
+databases with <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> not set on the underlying
+database (read locks are acquired).
+<p>The error <a name="DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> will be returned from update
+operations if a snapshot transaction attempts to update data
+which was modified after the snapshot transaction read it.</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, isolation, and durability) properties.
@@ -102,6 +111,6 @@ may fail and return one of the following non-zero errors:</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 318018834..eadfb307e 100644
--- a/db/docs/api_c/txn_checkpoint.html
+++ b/db/docs/api_c/txn_checkpoint.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_checkpoint.so,v 10.48 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_checkpoint.so,v 10.49 2005/03/02 22:57:15 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,8 +28,10 @@ DB_ENV-&gt;txn_checkpoint(const DB_ENV *env,
</pre></h3>
<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>If there has been any logging activity in the database environment since
+the last checkpoint, 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.
@@ -67,6 +69,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2aed01a4f..4604b6e8f 100644
--- a/db/docs/api_c/txn_class.html
+++ b/db/docs/api_c/txn_class.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_class.so,v 10.24 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_class.so,v 10.25 2005/05/17 15:25:50 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,7 +26,7 @@ typedef struct __db_txn DB_TXN;
</pre></h3>
<hr size=1 noshade>
<h3>Description: DB_TXN</h3>
-<p>The DB_TXN object is the handle for a transaction. Methods off
+<p>The DB_TXN object is the handle for a transaction. Methods of
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.</p>
@@ -48,6 +48,6 @@ and <a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a>.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 40ab12feb..61d429f48 100644
--- a/db/docs/api_c/txn_commit.html
+++ b/db/docs/api_c/txn_commit.html
@@ -1,5 +1,5 @@
<!--$Id: txn_commit.so,v 10.49 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -79,6 +79,6 @@ method overrides both of those settings.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 138bef8d7..3ce7e3da3 100644
--- a/db/docs/api_c/txn_discard.html
+++ b/db/docs/api_c/txn_discard.html
@@ -1,5 +1,5 @@
<!--$Id: txn_discard.so,v 10.16 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -62,6 +62,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6cedcdd6a..a27712446 100644
--- a/db/docs/api_c/txn_id.html
+++ b/db/docs/api_c/txn_id.html
@@ -1,5 +1,5 @@
<!--$Id: txn_id.so,v 10.21 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ to the <a href="../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> or <a href="../a
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 321064511..61eeae746 100644
--- a/db/docs/api_c/txn_list.html
+++ b/db/docs/api_c/txn_list.html
@@ -1,5 +1,5 @@
<!--$Id: txn_list.so,v 1.3 2004/11/02 20:04:11 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h3>
-<!--$Id: m4.methods,v 1.5 2004/11/03 15:52:02 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2005/03/16 21:26:51 bostic Exp $-->
<table border=1 align=center>
<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbEnv::txn_checkpoint--><tr><td><a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
@@ -28,8 +28,9 @@
<!--DbTxn::discard--><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>
<!--DbTxn::id--><tr><td><a href="../api_c/txn_id.html">DB_TXN-&gt;id</a></td><td>Return a transaction's ID</td></tr>
<!--DbTxn::prepare--><tr><td><a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<!--DbTxn::set_name--><tr><td><a href="../api_c/txn_set_name.html">DB_TXN-&gt;set_name</a></td><td>Associate a string with a transaction</td></tr>
<!--DbTxn::set_timeout--><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="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5f7e6a9a5..cb2dea5aa 100644
--- a/db/docs/api_c/txn_prepare.html
+++ b/db/docs/api_c/txn_prepare.html
@@ -1,5 +1,5 @@
<!--$Id: txn_prepare.so,v 10.35 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ transactions must be resolved.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5b1e54b44..976905306 100644
--- a/db/docs/api_c/txn_recover.html
+++ b/db/docs/api_c/txn_recover.html
@@ -1,5 +1,5 @@
<!--$Id: txn_recover.so,v 10.25 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,7 +68,7 @@ array.
starting where the last call to DB_ENV-&gt;txn_recover left off.
</dl>
<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.
+ the list of transactions to be resolved by the application is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -79,6 +79,6 @@ starting where the last call to DB_ENV-&gt;txn_recover left off.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_set_name.html b/db/docs/api_c/txn_set_name.html
new file mode 100644
index 000000000..df0e91376
--- /dev/null
+++ b/db/docs/api_c/txn_set_name.html
@@ -0,0 +1,76 @@
+<!--$Id: txn_set_name.so,v 10.2 2005/05/17 04:01:01 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_TXN-&gt;set_name</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DB_TXN-&gt;set_name</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" 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_TXN-&gt;set_name(DB_TXN *txn, const char *name);
+<p>
+int
+DB_TXN-&gt;get_name(DB_TXN *txn, const char **namep);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;set_name</h3>
+<p>The DB_TXN-&gt;set_name method associates the specified string with the
+transaction. The string is returned by <a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a> and displayed
+by <a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat_print</a>.</p>
+<p>If the database environment has been configured for logging and the
+Berkeley DB library was configured with
+<a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a>, a debugging log record is written including the
+transaction ID and the name.</p>
+<p>The DB_TXN-&gt;set_name method may be called at any time during the life of the
+application.</p>
+<p>The DB_TXN-&gt;set_name method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>name</b><dd>The <b>name</b> parameter is the string to associate with the
+transaction.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;get_name</h3>
+<p>The DB_TXN-&gt;get_name method returns the string associated with the transaction.</p>
+<p>The DB_TXN-&gt;get_name method may be called at any time during the life of the
+application.</p>
+<p>The DB_TXN-&gt;get_name method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<dl compact>
+<dt><b>namep</b><dd>The DB_TXN-&gt;get_name method returns a reference to the
+string associated with the transaction in <b>namep</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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 84dfe9b37..45a21dc19 100644
--- a/db/docs/api_c/txn_set_timeout.html
+++ b/db/docs/api_c/txn_set_timeout.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_set_timeout.so,v 10.20 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_set_timeout.so,v 10.21 2005/05/20 15:07:45 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,8 +29,8 @@ DB_TXN-&gt;set_timeout(DB_TXN *tid, db_timeout_t timeout, u_int32_t flags);
<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.</p>
-<p>Timeouts are checked whenever a thread of control blocks on a lock or
-when deadlock detection is performed. In the case of
+<p>All 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 timeout is for any single lock request.
In the case of DB_SET_TXN_TIMEOUT, the timeout is for the life
of the transaction. As timeouts are only checked when the lock request
@@ -74,6 +74,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a27febdb8..3dc82f1ea 100644
--- a/db/docs/api_c/txn_stat.html
+++ b/db/docs/api_c/txn_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_stat.so,v 10.61 2004/09/28 17:57:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_stat.so,v 10.66 2006/08/22 14:28:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,26 +49,45 @@ since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> functi
<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 configured.
<dt>u_int32_t st_nactive;<dd>The number of transactions that are currently active.
+<dt>u_int32_t st_nsnapshot;<dd>The number of transactions on the snapshot list. These are transactions
+which modified a database opened with <a href="../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a>,
+and which have committed or aborted, but the copies of pages they
+created are still in the cache.
<dt>u_int32_t st_maxnactive;<dd>The maximum number of active transactions at any one time.
+<dt>u_int32_t st_maxnsnapshot;<dd>The maximum number of transactions on the snapshot list 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>roff_t st_regsize;<dd>The size of the region, in bytes.
+<dt>roff_t st_regsize;<dd>The size of the transaction region, in bytes.
<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.
+obtaining the transaction region mutex.
<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.
+the transaction region mutex without waiting.
<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:
<dl compact>
<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>pid_t pid;<dd>The process ID of the originator of the transaction.
+<dt>uintmax_t tid;<dd>The thread of control ID of the originator of the transaction.
<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.
+<dt>DbLsn read_lsn;<dd>The log sequence number of reads for snapshot transactions.
+<dt>u_int32_t mvcc_ref;<dd>The number of buffer copies created by this transaction that remain in cache.
+<dt>u_int32_t status;<dd>One of the following list of constants: TXN_ABORTED, TXN_COMMITTED,
+TXN_PREPARED, TXN_RUNNING.
+<dt>u_int32_t xa_status;<dd>If the transaction is an XA transaction, the <b>xa_status</b> of the
+transaction will be one of the following list of constants:
+TXN_XA_ABORTED, TXN_XA_DEADLOCKED, TXN_XA_ENDED, TXN_XA_PREPARED,
+TXN_XA_STARTED, or TXN_XA_SUSPENDED. Otherwise, the <b>xa_status</b>
+will be 0.
+<dt>u_int8_t xid[DB_XIDDATASIZE];<dd>If the transaction is an XA transaction, the transaction's XA ID. If
+the transaction was prepared separately from the XA interfaces, the
+transaction's Global ID. Otherwise, the <b>xid</b> contents are
+undefined.
+<dt>char name[];<dd>If a name was specified for the transaction, up to the first 50 bytes
+of that name, followed by a nul termination byte.
</dl>
</dl>
<p>The DB_ENV-&gt;txn_stat method
@@ -83,7 +102,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DB_ENV-&gt;txn_stat method
@@ -94,7 +113,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DB_ENV-&gt;txn_stat_print</h3>
-<p>The DB_ENV-&gt;txn_stat_print method returns the
+<p>The DB_ENV-&gt;txn_stat_print method displays the
transaction subsystem statistical information, as described for the DB_ENV-&gt;txn_stat method.
The information is printed to a specified output channel (see the
<a href="../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a> method for more information), or passed to an
@@ -108,10 +127,11 @@ and 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -123,6 +143,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_c/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/api_core.html b/db/docs/api_cxx/api_core.html
index a5240ecd8..93eea10ff 100644
--- a/db/docs/api_cxx/api_core.html
+++ b/db/docs/api_cxx/api_core.html
@@ -1,33 +1,32 @@
<!--DO NOT EDIT: automatically built by build script.-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Berkeley DB: C++ Handle Methods (version 4.3.27)</title>
+<title>Berkeley DB: Berkeley DB: C++ Handle Methods (version 4.5.20)</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h3 align=center>Berkeley DB: C++ Handle Methods (version 4.3.27)</h3>
+<h3 align=center>Berkeley DB: C++ Handle Methods (version 4.5.20)</h3>
<table border=1 align=center>
<tr><th>C++ Handle Methods</th><th>Description</th></tr>
<!--Db::--><tr><td><a href="../api_cxx/db_class.html">Db</a></td><td>Create a database handle</td></tr>
<!--Db::associate--><tr><td><a href="../api_cxx/db_associate.html">Db::associate</a></td><td>Associate a secondary index</td></tr>
<!--Db::close--><tr><td><a href="../api_cxx/db_close.html">Db::close</a></td><td>Close a database</td></tr>
-<!--Db::cursor--><tr><td><a href="../api_cxx/db_close.html">Db::close</a></td><td>Create a cursor</td></tr>
-<!--Db::cursor--><tr><td><a href="../api_cxx/db_cursor.html">Db::cursor</a></td><td>Create a cursor handle</td></tr>
+<!--Db::compact--><tr><td><a href="../api_cxx/db_compact.html">Db::compact</a></td><td>Compact a database</td></tr>
+<!--Db::cursor--><tr><td><a href="../api_cxx/db_cursor.html">Db::cursor</a></td><td>Create a cursor</td></tr>
<!--Db::del--><tr><td><a href="../api_cxx/db_del.html">Db::del</a></td><td>Delete items from a database</td></tr>
<!--Db::err--><tr><td><a href="../api_cxx/db_err.html">Db::err</a>, <a href="../api_cxx/db_err.html">Db::errx</a></td><td>Error message</td></tr>
<!--Db::fd--><tr><td><a href="../api_cxx/db_fd.html">Db::fd</a></td><td>Return a file descriptor from a database</td></tr>
<!--Db::get--><tr><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>
<!--Db::get_byteswapped--><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>
-<!--Db::get_env--><tr><td><a href="../api_cxx/db_getenv.html">Db::getenv</a></td><td>Return database environment handle</td></tr>
-<!--Db::get_mpf--><tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return underlying <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle</td></tr>
+<!--Db::get_env--><tr><td><a href="../api_cxx/db_getenv.html">Db::getenv</a></td><td>Return <a href="../api_cxx/db_class.html">Db</a>'s underlying <a href="../api_cxx/env_class.html">DbEnv</a> handle</td></tr>
<!--Db::get_type--><tr><td><a href="../api_cxx/db_get_type.html">Db::get_type</a></td><td>Return the database type</td></tr>
<!--Db::join--><tr><td><a href="../api_cxx/db_join.html">Db::join</a></td><td>Perform a database join on cursors</td></tr>
<!--Db::key_range--><tr><td><a href="../api_cxx/db_key_range.html">Db::key_range</a></td><td>Return estimate of key location</td></tr>
-<!--Db::mpf--><tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<!--Db::mpf--><tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return <a href="../api_cxx/db_class.html">Db</a>'s underlying <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle</td></tr>
<!--Db::open--><tr><td><a href="../api_cxx/db_open.html">Db::open</a></td><td>Open a database</td></tr>
<!--Db::put--><tr><td><a href="../api_cxx/db_put.html">Db::put</a></td><td>Store items into a database</td></tr>
<!--Db::remove--><tr><td><a href="../api_cxx/db_remove.html">Db::remove</a></td><td>Remove a database</td></tr>
@@ -51,7 +50,6 @@
<!--Db::set_h_nelem--><tr><td><a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a></td><td>Set the Hash table size</td></tr>
<!--Db::set_lorder--><tr><td><a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a></td><td>Set the database byte order</td></tr>
<!--Db::set_pagesize--><tr><td><a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a></td><td>Set the underlying database page size</td></tr>
-<!--Db::set_paniccall--><tr><td><a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a></td><td>Set panic callback</td></tr>
<!--Db::set_q_extentsize--><tr><td><a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
<!--Db::set_re_delim--><tr><td><a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a></td><td>Set the variable-length record delimiter</td></tr>
<!--Db::set_re_len--><tr><td><a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a></td><td>Set the fixed-length record length</td></tr>
@@ -70,12 +68,15 @@
<!--DbCursor::put--><tr><td><a href="../api_cxx/dbc_put.html">Dbc::put</a></td><td>Store by cursor</td></tr>
<!--DbDeadlockException--><tr><td><a href="../api_cxx/deadlock_class.html">DbDeadlockException</a></td><td>Deadlock exception</td></tr>
<!--DbEnv::--><tr><td><a href="../api_cxx/env_class.html">DbEnv</a></td><td>Create an environment handle</td></tr>
+<!--DbEnv::cdsgroup_begin--><tr><td><a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a></td><td>Get a locker ID in Berkeley DB Concurrent Data Store</td></tr>
<!--DbEnv::close--><tr><td><a href="../api_cxx/env_close.html">DbEnv::close</a></td><td>Close an environment</td></tr>
<!--DbEnv::dbremove--><tr><td><a href="../api_cxx/env_dbremove.html">DbEnv::dbremove</a></td><td>Remove a database</td></tr>
<!--DbEnv::dbrename--><tr><td><a href="../api_cxx/env_dbrename.html">DbEnv::dbrename</a></td><td>Rename a database</td></tr>
<!--DbEnv::err--><tr><td><a href="../api_cxx/env_err.html">DbEnv::err</a>, <a href="../api_cxx/env_err.html">DbEnv::errx</a></td><td>Error message</td></tr>
+<!--DbEnv::failchk--><tr><td><a href="../api_cxx/env_failchk.html">DbEnv::failchk</a></td><td>Check for thread failure</td></tr>
+<!--DbEnv::fileid_reset--><tr><td><a href="../api_cxx/env_fileid_reset.html">DbEnv::fileid_reset</a></td><td>Reset database file IDs</td></tr>
<!--DbEnv::get_home--><tr><td><a href="../api_cxx/env_open.html">DbEnv::get_home</a></td><td>Return environment's home directory</td></tr>
-<!--DbEnv::get_open_flags--><tr><td><a href="../api_cxx/env_open.html">DbEnv::get_open_flags</a></td><td>Return the flags with which the environment was opened</td></tr>
+<!--DbEnv::get_open_flags--><tr><td><a href="../api_cxx/env_open.html">DbEnv::get_open_flags</a></td><td>Return flags with which the environment was opened</td></tr>
<!--DbEnv::lock_detect--><tr><td><a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a></td><td>Perform deadlock detection</td></tr>
<!--DbEnv::lock_get--><tr><td><a href="../api_cxx/lock_get.html">DbEnv::lock_get</a></td><td>Acquire a lock</td></tr>
<!--DbEnv::lock_id--><tr><td><a href="../api_cxx/lock_id.html">DbEnv::lock_id</a></td><td>Acquire a locker ID</td></tr>
@@ -86,35 +87,58 @@
<!--DbEnv::log_archive--><tr><td><a href="../api_cxx/log_archive.html">DbEnv::log_archive</a></td><td>List log and database files</td></tr>
<!--DbEnv::log_file--><tr><td><a href="../api_cxx/log_file.html">DbEnv::log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
<!--DbEnv::log_flush--><tr><td><a href="../api_cxx/log_flush.html">DbEnv::log_flush</a></td><td>Flush log records</td></tr>
+<!--DbEnv::log_printf--><tr><td><a href="../api_cxx/log_printf.html">DbEnv::log_printf</a></td><td>Append informational message to the log</td></tr>
<!--DbEnv::log_put--><tr><td><a href="../api_cxx/log_put.html">DbEnv::log_put</a></td><td>Write a log record</td></tr>
<!--DbEnv::log_stat--><tr><td><a href="../api_cxx/log_stat.html">DbEnv::log_stat</a></td><td>Return log subsystem statistics</td></tr>
+<!--DbEnv::lsn_reset--><tr><td><a href="../api_cxx/env_lsn_reset.html">DbEnv::lsn_reset</a></td><td>Reset database file LSNs</td></tr>
<!--DbEnv::memp_fcreate--><tr><td><a href="../api_cxx/memp_fcreate.html">DbEnv::memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
<!--DbEnv::memp_register--><tr><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>
-<!--DbEnv::memp_set_max_openfd--><tr><td><a href="../api_cxx/memp_openfd.html">DbEnv::set_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
-<!--DbEnv::memp_set_max_write--><tr><td><a href="../api_cxx/memp_maxwrite.html">DbEnv::set_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::memp_stat--><tr><td><a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a></td><td>Return memory pool statistics</td></tr>
<!--DbEnv::memp_sync--><tr><td><a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a></td><td>Flush pages from a memory pool</td></tr>
<!--DbEnv::memp_trickle--><tr><td><a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
+<!--DbEnv::mutex_alloc--><tr><td><a href="../api_cxx/mutex_alloc.html">DbEnv::mutex_alloc</a></td><td>Allocate a mutex</td></tr>
+<!--DbEnv::mutex_free--><tr><td><a href="../api_cxx/mutex_free.html">DbEnv::mutex_free</a></td><td>Free a mutex</td></tr>
+<!--DbEnv::mutex_lock--><tr><td><a href="../api_cxx/mutex_lock.html">DbEnv::mutex_lock</a></td><td>Lock a mutex</td></tr>
+<!--DbEnv::mutex_set_align--><tr><td><a href="../api_cxx/mutex_set_align.html">DbEnv::mutex_set_align</a></td><td>Configure mutex alignment</td></tr>
+<!--DbEnv::mutex_set_increment--><tr><td><a href="../api_cxx/mutex_set_max.html">DbEnv::mutex_set_increment</a></td><td>Configure number of additional mutexes</td></tr>
+<!--DbEnv::mutex_set_max--><tr><td><a href="../api_cxx/mutex_set_max.html">DbEnv::mutex_set_max</a></td><td>Configure total number of mutexes</td></tr>
+<!--DbEnv::mutex_set_tas_spins--><tr><td><a href="../api_cxx/mutex_set_tas_spins.html">DbEnv::mutex_set_tas_spins</a></td><td>Configure test-and-set mutex spin count</td></tr>
+<!--DbEnv::mutex_stat--><tr><td><a href="../api_cxx/mutex_stat.html">DbEnv::mutex_stat</a></td><td>Mutex statistics</td></tr>
+<!--DbEnv::mutex_unlock--><tr><td><a href="../api_cxx/mutex_unlock.html">DbEnv::mutex_unlock</a></td><td>Unlock a mutex</td></tr>
<!--DbEnv::open--><tr><td><a href="../api_cxx/env_open.html">DbEnv::open</a></td><td>Open an environment</td></tr>
<!--DbEnv::remove--><tr><td><a href="../api_cxx/env_remove.html">DbEnv::remove</a></td><td>Remove an environment</td></tr>
<!--DbEnv::rep_elect--><tr><td><a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a></td><td>Hold a replication election</td></tr>
<!--DbEnv::rep_process_message--><tr><td><a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a></td><td>Process a replication message</td></tr>
+<!--DbEnv::rep_set_config--><tr><td><a href="../api_cxx/rep_config.html">DbEnv::rep_set_config</a></td><td>Configure the replication subsystem</td></tr>
+<!--DbEnv::rep_set_limit--><tr><td><a href="../api_cxx/rep_limit.html">DbEnv::rep_set_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<!--DbEnv::rep_set_nsites--><tr><td><a href="../api_cxx/rep_nsites.html">DbEnv::rep_set_nsites</a></td><td>Configure replication group site count</td></tr>
+<!--DbEnv::rep_set_priority--><tr><td><a href="../api_cxx/rep_priority.html">DbEnv::rep_set_priority</a></td><td>Configure replication site priority</td></tr>
+<!--DbEnv::rep_set_timeout--><tr><td><a href="../api_cxx/rep_timeout.html">DbEnv::rep_set_timeout</a></td><td>Configure replication timeouts</td></tr>
+<!--DbEnv::rep_set_transport--><tr><td><a href="../api_cxx/rep_transport.html">DbEnv::rep_set_transport</a></td><td>Configure replication transport callback</td></tr>
<!--DbEnv::rep_start--><tr><td><a href="../api_cxx/rep_start.html">DbEnv::rep_start</a></td><td>Configure an environment for replication</td></tr>
<!--DbEnv::rep_stat--><tr><td><a href="../api_cxx/rep_stat.html">DbEnv::rep_stat</a></td><td>Replication statistics</td></tr>
+<!--DbEnv::rep_sync--><tr><td><a href="../api_cxx/rep_sync.html">DbEnv::rep_sync</a></td><td>Replication synchronization</td></tr>
+<!--DbEnv::repmgr_add_remote_site--><tr><td><a href="../api_cxx/repmgr_remote_site.html">DbEnv::repmgr_add_remote_site</a></td><td>Specify the replication manager's remote sites</td></tr>
+<!--DbEnv::repmgr_set_ack_policy--><tr><td><a href="../api_cxx/repmgr_ack_policy.html">DbEnv::repmgr_set_ack_policy</a></td><td>Specify the replication manager's client acknowledgement policy</td></tr>
+<!--DbEnv::repmgr_set_local_site--><tr><td><a href="../api_cxx/repmgr_local_site.html">DbEnv::repmgr_set_local_site</a></td><td>Specify the replication manager's local site</td></tr>
+<!--DbEnv::repmgr_site_list--><tr><td><a href="../api_cxx/repmgr_site_list.html">DbEnv::repmgr_site_list</a></td><td>List the sites and their status</td></tr>
+<!--DbEnv::repmgr_start--><tr><td><a href="../api_cxx/repmgr_start.html">DbEnv::repmgr_start</a></td><td>Start the replication manager</td></tr>
<!--DbEnv::set_alloc--><tr><td><a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a></td><td>Set local space allocation functions</td></tr>
<!--DbEnv::set_app_dispatch--><tr><td><a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a></td><td>Configure application recovery</td></tr>
<!--DbEnv::set_cachesize--><tr><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
-<!--DbEnv::set_cachesize--><tr><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
<!--DbEnv::set_data_dir--><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>
<!--DbEnv::set_encrypt--><tr><td><a href="../api_cxx/env_set_encrypt.html">DbEnv::set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
<!--DbEnv::set_errcall--><tr><td><a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>, <a href="../api_cxx/env_set_msgcall.html">DbEnv::set_msgcall</a></td><td>Set error and informational message callbacks</td></tr>
<!--DbEnv::set_errfile--><tr><td><a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>, <a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a></td><td>Set error and informational message FILE</td></tr>
<!--DbEnv::set_error_stream--><tr><td><a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>, <a href="../api_cxx/env_set_msg_stream.html">DbEnv::set_message_stream</a></td><td>Set error and informational message output stream</td></tr>
<!--DbEnv::set_errpfx--><tr><td><a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a></td><td>Set error message prefix</td></tr>
+<!--DbEnv::set_event_notify--><tr><td><a href="../api_cxx/env_event_notify.html">DbEnv::set_event_notify</a></td><td>Set event notification callback</td></tr>
<!--DbEnv::set_feedback--><tr><td><a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a></td><td>Set feedback callback</td></tr>
<!--DbEnv::set_flags--><tr><td><a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a></td><td>Environment configuration</td></tr>
+<!--DbEnv::set_isalive--><tr><td><a href="../api_cxx/env_set_isalive.html">DbEnv::set_isalive</a></td><td>Set thread is-alive callback</td></tr>
<!--DbEnv::set_lg_bsize--><tr><td><a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a></td><td>Set log buffer size</td></tr>
<!--DbEnv::set_lg_dir--><tr><td><a href="../api_cxx/env_set_lg_dir.html">DbEnv::set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
+<!--DbEnv::set_lg_filemode--><tr><td><a href="../api_cxx/env_set_lg_mode.html">DbEnv::set_lg_filemode</a></td><td>Set log file mode</td></tr>
<!--DbEnv::set_lg_max--><tr><td><a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a></td><td>Set log file size</td></tr>
<!--DbEnv::set_lg_regionmax--><tr><td><a href="../api_cxx/env_set_lg_regionmax.html">DbEnv::set_lg_regionmax</a></td><td>Set logging region size</td></tr>
<!--DbEnv::set_lk_conflicts--><tr><td><a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
@@ -122,15 +146,14 @@
<!--DbEnv::set_lk_max_lockers--><tr><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>
<!--DbEnv::set_lk_max_locks--><tr><td><a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
<!--DbEnv::set_lk_max_objects--><tr><td><a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
+<!--DbEnv::set_mp_max_openfd--><tr><td><a href="../api_cxx/memp_openfd.html">DbEnv::set_mp_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
+<!--DbEnv::set_mp_max_write--><tr><td><a href="../api_cxx/memp_maxwrite.html">DbEnv::set_mp_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_mp_mmapsize--><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>
-<!--DbEnv::set_paniccall--><tr><td><a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a></td><td>Set panic callback</td></tr>
-<!--DbEnv::set_rep_limit--><tr><td><a href="../api_cxx/rep_limit.html">DbEnv::set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
-<!--DbEnv::set_rep_transport--><tr><td><a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a></td><td>Configure replication transport</td></tr>
<!--DbEnv::set_rpc_server--><tr><td><a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a></td><td>Establish an RPC server connection</td></tr>
<!--DbEnv::set_shm_key--><tr><td><a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
-<!--DbEnv::set_tas_spins--><tr><td><a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
-<!--DbEnv::set_timeout--><tr><td><a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
-<!--DbEnv::set_timeout--><tr><td><a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
+<!--DbEnv::set_thread_count--><tr><td><a href="../api_cxx/env_set_thread_count.html">DbEnv::set_thread_count</a></td><td>Set approximate thread count</td></tr>
+<!--DbEnv::set_thread_id--><tr><td><a href="../api_cxx/env_set_thread_id.html">DbEnv::set_thread_id</a></td><td>Set thread of control ID function</td></tr>
+<!--DbEnv::set_thread_id_string--><tr><td><a href="../api_cxx/env_set_thread_id_string.html">DbEnv::set_thread_id_string</a></td><td>Set thread of control ID format function</td></tr>
<!--DbEnv::set_timeout--><tr><td><a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
<!--DbEnv::set_tmp_dir--><tr><td><a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
<!--DbEnv::set_tx_max--><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>
@@ -169,7 +192,7 @@
<!--DbSequence::get--><tr><td><a href="../api_cxx/seq_get.html">DbSequence::get</a></td><td>Get the next sequence element(s)</td></tr>
<!--DbSequence::get_dbp--><tr><td><a href="../api_cxx/seq_open.html">DbSequence::get_dbp</a></td><td>Return a handle for the underlying sequence database</td></tr>
<!--DbSequence::get_key--><tr><td><a href="../api_cxx/seq_open.html">DbSequence::get_key</a></td><td>Return the key for a sequence</td></tr>
-<!--DbSequence::init_value--><tr><td><a href="../api_cxx/seq_init_value.html">DbSequence::init_value</a></td><td>Set the initial value of a sequence</td></tr>
+<!--DbSequence::initial_value--><tr><td><a href="../api_cxx/seq_initial_value.html">DbSequence::initial_value</a></td><td>Set the initial value of a sequence</td></tr>
<!--DbSequence::open--><tr><td><a href="../api_cxx/seq_open.html">DbSequence::open</a></td><td>Open a sequence</td></tr>
<!--DbSequence::remove--><tr><td><a href="../api_cxx/seq_remove.html">DbSequence::remove</a></td><td>Remove a sequence</td></tr>
<!--DbSequence::set_cachesize--><tr><td><a href="../api_cxx/seq_set_cachesize.html">DbSequence::set_cachesize</a></td><td>Set the cache size of a sequence</td></tr>
@@ -182,11 +205,12 @@
<!--DbTxn::discard--><tr><td><a href="../api_cxx/txn_discard.html">DbTxn::discard</a></td><td>Discard a prepared but not resolved transaction handle</td></tr>
<!--DbTxn::id--><tr><td><a href="../api_cxx/txn_id.html">DbTxn::id</a></td><td>Return a transaction's ID</td></tr>
<!--DbTxn::prepare--><tr><td><a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<!--DbTxn::set_name--><tr><td><a href="../api_cxx/txn_set_name.html">DbTxn::set_name</a></td><td>Associate a string with a transaction</td></tr>
<!--DbTxn::set_timeout--><tr><td><a href="../api_cxx/txn_set_timeout.html">DbTxn::set_timeout</a></td><td>Set transaction timeout</td></tr>
<!--db_strerror--><tr><td><a href="../api_cxx/env_strerror.html">DbEnv::strerror</a></td><td>Error strings</td></tr>
<!--db_version--><tr><td><a href="../api_cxx/env_version.html">DbEnv::version</a></td><td>Return version information</td></tr>
<!--log_compare--><tr><td><a href="../api_cxx/log_compare.html">DbEnv::log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d98ef63da..7bb989153 100644
--- a/db/docs/api_cxx/cxx_pindex.html
+++ b/db/docs/api_cxx/cxx_pindex.html
@@ -14,6 +14,7 @@
<tr><td align=right>Building a small memory footprint library </td><td>&nbsp;<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>&nbsp;<a href="../ref/build_unix/small.html#--disable-replication">--disable-replication</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--disable-shared">--disable-shared</a></td></tr>
+<tr><td align=right>QNX </td><td>&nbsp;<a href="../ref/build_unix/qnx.html#--disable-shared">--disable-shared</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<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>&nbsp;<a href="../ref/build_unix/small.html#--disable-statistics">--disable-statistics</a></td></tr>
<tr><td align=right>Building a small memory footprint library </td><td>&nbsp;<a href="../ref/build_unix/small.html#--disable-verify">--disable-verify</a></td></tr>
@@ -26,6 +27,7 @@
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-pthread_api">--enable-pthread_api</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<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>&nbsp;<a href="../ref/build_unix/small.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
@@ -34,8 +36,6 @@
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
<tr><td align=right>Configuring Berkeley DB </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename=NAME</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
@@ -53,15 +53,16 @@
<tr><td align=right>introduction to the </td><td>&nbsp;<a href="../ref/mp/intro.html#4">buffer</a> pool subsystem</td></tr>
<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_cxx/memp_fopen.html#2">buffering</a></td></tr>
<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#3">buffering</a> for database files</td></tr>
+<tr><td align=right>turn off system </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_flags.html#4">buffering</a> for log files</td></tr>
-<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#5">buffering</a> for log files</td></tr>
+<tr><td align=right>turn off system </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#6">buffering</a> for log files</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/intro.html#3">building</a> for QNX</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_vxworks/introae.html#2">building</a> for VxWorks AE</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/intro.html#2">building</a> for Windows</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
<tr><td align=right>selecting a </td><td>&nbsp;<a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
<tr><td align=right>configuring the </td><td>&nbsp;<a href="../ref/build_unix/conf.html#8">C++</a> API</td></tr>
@@ -69,16 +70,16 @@
<tr><td align=right>selecting a </td><td>&nbsp;<a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
<tr><td align=right>introduction to the memory </td><td>&nbsp;<a href="../ref/mp/intro.html#3">cache</a> subsystem</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
-<tr><td align=right>Patches, Updates and </td><td>&nbsp;<a href="http://www.sleepycat.com/update/index.html">Change</a> logs</td></tr>
+<tr><td align=right>Patches, Updates and </td><td>&nbsp;<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Change</a> logs</td></tr>
<tr><td align=right>database page </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#2">checksum</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/close.html#2">closing</a> a database</td></tr>
-<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am_misc/faq.html#3">compaction</a></td></tr>
<tr><td align=right>specifying a Btree </td><td>&nbsp;<a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
<tr><td align=right>changing </td><td>&nbsp;<a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
<tr><td align=right>database environment </td><td>&nbsp;<a href="../ref/env/db_config.html#3">configuration</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/program/copy.html#2">copying</a> databases</td></tr>
<tr><td align=right>salvaging </td><td>&nbsp;<a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
<tr><td align=right>closing a </td><td>&nbsp;<a href="../ref/am/curclose.html#3">cursor</a></td></tr>
@@ -87,7 +88,7 @@
<tr><td align=right>retrieving records with a </td><td>&nbsp;<a href="../ref/am/curget.html#3">cursor</a></td></tr>
<tr><td align=right>storing records with a </td><td>&nbsp;<a href="../ref/am/curput.html#3">cursor</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/stability.html#2">cursor</a> stability</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#3">cursor</a> stability</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#4">cursor</a> stability</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am/cursor.html#2">cursors</a></td></tr>
<tr><td align=right>Dbc::put </td><td>&nbsp;<a href="../api_cxx/dbc_put.html#DB_AFTER">DB_AFTER</a></td></tr>
<tr><td align=right>Db::verify </td><td>&nbsp;<a href="../api_cxx/db_verify.html#DB_AGGRESSIVE">DB_AGGRESSIVE</a></td></tr>
@@ -96,18 +97,10 @@
<tr><td align=right>DbEnv::log_archive </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_cxx/log_archive.html#DB_ARCH_REMOVE">DB_ARCH_REMOVE</a></td></tr>
-<tr><td align=right>Db::associate </td><td>&nbsp;<a href="../api_cxx/db_associate.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>Db::del </td><td>&nbsp;<a href="../api_cxx/db_del.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>Db::put </td><td>&nbsp;<a href="../api_cxx/db_put.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>Db::truncate </td><td>&nbsp;<a href="../api_cxx/db_truncate.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
<tr><td align=right>DbEnv::dbremove </td><td>&nbsp;<a href="../api_cxx/env_dbremove.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
<tr><td align=right>DbEnv::dbrename </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>DbSequence::get </td><td>&nbsp;<a href="../api_cxx/seq_get.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>DbSequence::open </td><td>&nbsp;<a href="../api_cxx/seq_open.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
-<tr><td align=right>DbSequence::remove </td><td>&nbsp;<a href="../api_cxx/seq_remove.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
<tr><td align=right>Dbc::put </td><td>&nbsp;<a href="../api_cxx/dbc_put.html#DB_BEFORE">DB_BEFORE</a></td></tr>
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_BTREE">DB_BTREE</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/dbt_class.html#3">DB_BUFFER_SMALL</a></td></tr>
@@ -132,21 +125,11 @@
<tr><td align=right>Dbt </td><td>&nbsp;<a href="../api_cxx/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a></td></tr>
<tr><td align=right>Dbt </td><td>&nbsp;<a href="../api_cxx/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a></td></tr>
<tr><td align=right>Dbt </td><td>&nbsp;<a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a></td></tr>
-<tr><td align=right>Db::cursor </td><td>&nbsp;<a href="../api_cxx/db_cursor.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
-<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
-<tr><td align=right>Db::stat </td><td>&nbsp;<a href="../api_cxx/db_stat.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
-<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<a href="../api_cxx/txn_begin.html#DB_DEGREE_2">DB_DEGREE_2</a></td></tr>
<tr><td align=right>DbMpoolFile::open </td><td>&nbsp;<a href="../api_cxx/memp_fopen.html#DB_DIRECT">DB_DIRECT</a></td></tr>
<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_cxx/db_cursor.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>Db::join </td><td>&nbsp;<a href="../api_cxx/db_join.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>Db::stat </td><td>&nbsp;<a href="../api_cxx/db_stat.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
-<tr><td align=right>Dbc::get </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/txn_begin.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/db_associate.html#3">DB_DONOTINDEX</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_DSYNC_DB">DB_DSYNC_DB</a></td></tr>
<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_DSYNC_LOG">DB_DSYNC_LOG</a></td></tr>
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_DUP">DB_DUP</a></td></tr>
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
@@ -155,6 +138,12 @@
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_ENCRYPT">DB_ENCRYPT</a></td></tr>
<tr><td align=right>Db::set_encrypt </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_encrypt.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</a></td></tr>
+<tr><td align=right>DbEnv::set_event_notify </td><td>&nbsp;<a href="../api_cxx/env_event_notify.html#DB_EVENT_PANIC">DB_EVENT_PANIC</a></td></tr>
+<tr><td align=right>DbEnv::set_event_notify </td><td>&nbsp;<a href="../api_cxx/env_event_notify.html#DB_EVENT_REP_CLIENT">DB_EVENT_REP_CLIENT</a></td></tr>
+<tr><td align=right>DbEnv::set_event_notify </td><td>&nbsp;<a href="../api_cxx/env_event_notify.html#DB_EVENT_REP_MASTER">DB_EVENT_REP_MASTER</a></td></tr>
+<tr><td align=right>DbEnv::set_event_notify </td><td>&nbsp;<a href="../api_cxx/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a></td></tr>
+<tr><td align=right>DbEnv::set_event_notify </td><td>&nbsp;<a href="../api_cxx/env_event_notify.html#DB_EVENT_REP_STARTUPDONE">DB_EVENT_REP_STARTUPDONE</a></td></tr>
+<tr><td align=right>DbEnv::set_event_notify </td><td>&nbsp;<a href="../api_cxx/env_event_notify.html#DB_EVENT_WRITE_FAILED">DB_EVENT_WRITE_FAILED</a></td></tr>
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_EXCL">DB_EXCL</a></td></tr>
<tr><td align=right>DbSequence::open </td><td>&nbsp;<a href="../api_cxx/seq_open.html#DB_EXCL">DB_EXCL</a></td></tr>
<tr><td align=right>Db::stat </td><td>&nbsp;<a href="../api_cxx/db_stat.html#DB_FAST_STAT">DB_FAST_STAT</a></td></tr>
@@ -164,6 +153,8 @@
<tr><td align=right>DbEnv::log_put </td><td>&nbsp;<a href="../api_cxx/log_put.html#DB_FLUSH">DB_FLUSH</a></td></tr>
<tr><td align=right>DbEnv::remove </td><td>&nbsp;<a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a></td></tr>
<tr><td align=right>DbEnv::txn_checkpoint </td><td>&nbsp;<a href="../api_cxx/txn_checkpoint.html#DB_FORCE">DB_FORCE</a></td></tr>
+<tr><td align=right>Db::compact </td><td>&nbsp;<a href="../api_cxx/db_compact.html#DB_FREELIST_ONLY">DB_FREELIST_ONLY</a></td></tr>
+<tr><td align=right>Db::compact </td><td>&nbsp;<a href="../api_cxx/db_compact.html#DB_FREE_SPACE">DB_FREE_SPACE</a></td></tr>
<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a></td></tr>
@@ -171,6 +162,7 @@
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_HASH">DB_HASH</a></td></tr>
<tr><td align=right>File naming </td><td>&nbsp;<a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
<tr><td align=right>File naming </td><td>&nbsp;<a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
+<tr><td align=right>Db::associate </td><td>&nbsp;<a href="../api_cxx/db_associate.html#DB_IMMUTABLE_KEY">DB_IMMUTABLE_KEY</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a></td></tr>
@@ -178,7 +170,6 @@
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_INIT_REP">DB_INIT_REP</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a></td></tr>
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_INORDER">DB_INORDER</a></td></tr>
-<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_JOINENV">DB_JOINENV</a></td></tr>
<tr><td align=right>Db::join </td><td>&nbsp;<a href="../api_cxx/db_join.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
<tr><td align=right>Db::join </td><td>&nbsp;<a href="../api_cxx/db_join.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</a></td></tr>
@@ -189,6 +180,7 @@
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_LAST">DB_LAST</a></td></tr>
<tr><td align=right>DbLogc::get </td><td>&nbsp;<a href="../api_cxx/logc_get.html#DB_LAST">DB_LAST</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<a href="../api_cxx/txn_begin.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/errorret.html#4">DB_LOCK_DEADLOCK</a></td></tr>
<tr><td align=right>Error returns to applications </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
@@ -226,13 +218,11 @@
<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a></td></tr>
<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_LOG_BUFFER_FULL">DB_LOG_BUFFER_FULL</a></td></tr>
<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_LOG_INMEMORY">DB_LOG_INMEMORY</a></td></tr>
-<tr><td align=right>DbMpoolFile::put </td><td>&nbsp;<a href="../api_cxx/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
-<tr><td align=right>DbMpoolFile::set </td><td>&nbsp;<a href="../api_cxx/memp_fset.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
<tr><td align=right>DbMpoolFile::get </td><td>&nbsp;<a href="../api_cxx/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a></td></tr>
-<tr><td align=right>DbMpoolFile::put </td><td>&nbsp;<a href="../api_cxx/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
-<tr><td align=right>DbMpoolFile::set </td><td>&nbsp;<a href="../api_cxx/memp_fset.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
+<tr><td align=right>DbMpoolFile::get </td><td>&nbsp;<a href="../api_cxx/memp_fget.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
<tr><td align=right>DbMpoolFile::put </td><td>&nbsp;<a href="../api_cxx/memp_fput.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
<tr><td align=right>DbMpoolFile::set </td><td>&nbsp;<a href="../api_cxx/memp_fset.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
+<tr><td align=right>DbMpoolFile::get </td><td>&nbsp;<a href="../api_cxx/memp_fget.html#DB_MPOOL_EDIT">DB_MPOOL_EDIT</a></td></tr>
<tr><td align=right>DbMpoolFile::get </td><td>&nbsp;<a href="../api_cxx/memp_fget.html#DB_MPOOL_LAST">DB_MPOOL_LAST</a></td></tr>
<tr><td align=right>DbMpoolFile::get </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/memp_set_flags.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a></td></tr>
@@ -240,6 +230,12 @@
<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_MULTIPLE">DB_MULTIPLE</a></td></tr>
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a></td></tr>
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a></td></tr>
+<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_MULTIVERSION">DB_MULTIVERSION</a></td></tr>
+<tr><td align=right>DbMpoolFile::open </td><td>&nbsp;<a href="../api_cxx/memp_fopen.html#DB_MULTIVERSION">DB_MULTIVERSION</a></td></tr>
+<tr><td align=right>DbEnv::set_isalive </td><td>&nbsp;<a href="../api_cxx/env_set_isalive.html#DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a></td></tr>
+<tr><td align=right>DbEnv::mutex_alloc </td><td>&nbsp;<a href="../api_cxx/mutex_alloc.html#DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a></td></tr>
+<tr><td align=right>DbEnv::mutex_alloc </td><td>&nbsp;<a href="../api_cxx/mutex_alloc.html#DB_MUTEX_SELF_BLOCK">DB_MUTEX_SELF_BLOCK</a></td></tr>
<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
<tr><td align=right>DbLogc::get </td><td>&nbsp;<a href="../api_cxx/logc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
<tr><td align=right>DbEnv::txn_recover </td><td>&nbsp;<a href="../api_cxx/txn_recover.html#DB_NEXT">DB_NEXT</a></td></tr>
@@ -256,6 +252,7 @@
<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_NOPANIC">DB_NOPANIC</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/env_set_rpc_server.html#2">DB_NOSERVER</a></td></tr>
<tr><td align=right>DbEnv::set_rpc_server </td><td>&nbsp;<a href="../api_cxx/env_set_rpc_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/env_set_thread_id_string.html#2">DB_NOSERVER</a></td></tr>
<tr><td align=right>DbEnv::set_rpc_server </td><td>&nbsp;<a href="../api_cxx/env_set_rpc_server.html#DB_NOSERVER_HOME">DB_NOSERVER_HOME</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/env_set_rpc_server.html#3">DB_NOSERVER_ID</a></td></tr>
<tr><td align=right>DbEnv::set_rpc_server </td><td>&nbsp;<a href="../api_cxx/env_set_rpc_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
@@ -281,24 +278,62 @@
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_QUEUE">DB_QUEUE</a></td></tr>
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_RDONLY">DB_RDONLY</a></td></tr>
<tr><td align=right>DbMpoolFile::open </td><td>&nbsp;<a href="../api_cxx/memp_fopen.html#DB_RDONLY">DB_RDONLY</a></td></tr>
+<tr><td align=right>Db::cursor </td><td>&nbsp;<a href="../api_cxx/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>Db::stat </td><td>&nbsp;<a href="../api_cxx/db_stat.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<a href="../api_cxx/txn_begin.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a></td></tr>
+<tr><td align=right>Db::cursor </td><td>&nbsp;<a href="../api_cxx/db_cursor.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>Db::join </td><td>&nbsp;<a href="../api_cxx/db_join.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>Db::stat </td><td>&nbsp;<a href="../api_cxx/db_stat.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>Dbc::get </td><td>&nbsp;<a href="../api_cxx/dbc_get.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<a href="../api_cxx/txn_begin.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a></td></tr>
<tr><td align=right>Db::open </td><td>&nbsp;<a href="../api_cxx/db_open.html#DB_RECNO">DB_RECNO</a></td></tr>
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_RECOVER">DB_RECOVER</a></td></tr>
<tr><td align=right>DbEnv::set_feedback </td><td>&nbsp;<a href="../api_cxx/env_set_feedback.html#DB_RECOVER">DB_RECOVER</a></td></tr>
<tr><td align=right>DbEnv::open </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td>&nbsp;<a href="../api_cxx/env_open.html#DB_REGISTER">DB_REGISTER</a></td></tr>
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_cxx/repmgr_ack_policy.html#DB_REPMGR_ACKS_ALL">DB_REPMGR_ACKS_ALL</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_cxx/repmgr_ack_policy.html#DB_REPMGR_ACKS_ALL_PEERS">DB_REPMGR_ACKS_ALL_PEERS</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_cxx/repmgr_ack_policy.html#DB_REPMGR_ACKS_NONE">DB_REPMGR_ACKS_NONE</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_cxx/repmgr_ack_policy.html#DB_REPMGR_ACKS_ONE">DB_REPMGR_ACKS_ONE</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_cxx/repmgr_ack_policy.html#DB_REPMGR_ACKS_ONE_PEER">DB_REPMGR_ACKS_ONE_PEER</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_set_ack_policy </td><td>&nbsp;<a href="../api_cxx/repmgr_ack_policy.html#DB_REPMGR_ACKS_QUORUM">DB_REPMGR_ACKS_QUORUM</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_site_list </td><td>&nbsp;<a href="../api_cxx/repmgr_site_list.html#DB_REPMGR_CONNECTED">DB_REPMGR_CONNECTED</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_site_list </td><td>&nbsp;<a href="../api_cxx/repmgr_site_list.html#DB_REPMGR_DISCONNECTED">DB_REPMGR_DISCONNECTED</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_add_remote_site </td><td>&nbsp;<a href="../api_cxx/repmgr_remote_site.html#DB_REPMGR_PEER">DB_REPMGR_PEER</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_timeout </td><td>&nbsp;<a href="../api_cxx/rep_timeout.html#DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_transport </td><td>&nbsp;<a href="../api_cxx/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a></td></tr>
<tr><td align=right>DbEnv::rep_start </td><td>&nbsp;<a href="../api_cxx/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_start </td><td>&nbsp;<a href="../api_cxx/repmgr_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_config </td><td>&nbsp;<a href="../api_cxx/rep_config.html#DB_REP_CONF_BULK">DB_REP_CONF_BULK</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_config </td><td>&nbsp;<a href="../api_cxx/rep_config.html#DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_config </td><td>&nbsp;<a href="../api_cxx/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_config </td><td>&nbsp;<a href="../api_cxx/rep_config.html#DB_REP_CONF_NOWAIT">DB_REP_CONF_NOWAIT</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_timeout </td><td>&nbsp;<a href="../api_cxx/rep_timeout.html#DB_REP_CONNECTION_RETRY">DB_REP_CONNECTION_RETRY</a></td></tr>
<tr><td align=right>DbEnv::rep_process_message </td><td>&nbsp;<a href="../api_cxx/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_start </td><td>&nbsp;<a href="../api_cxx/repmgr_start.html#DB_REP_ELECTION">DB_REP_ELECTION</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_timeout </td><td>&nbsp;<a href="../api_cxx/rep_timeout.html#DB_REP_ELECTION_RETRY">DB_REP_ELECTION_RETRY</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_timeout </td><td>&nbsp;<a href="../api_cxx/rep_timeout.html#DB_REP_ELECTION_TIMEOUT">DB_REP_ELECTION_TIMEOUT</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_start </td><td>&nbsp;<a href="../api_cxx/repmgr_start.html#DB_REP_FULL_ELECTION">DB_REP_FULL_ELECTION</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/db_put.html#2">DB_REP_HANDLE_DEAD</a></td></tr>
<tr><td align=right>DbEnv::rep_process_message </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/rep_message.html#DB_REP_IGNORE">DB_REP_IGNORE</a></td></tr>
<tr><td align=right>DbEnv::rep_process_message </td><td>&nbsp;<a href="../api_cxx/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td>&nbsp;<a href="../api_cxx/rep_message.html#DB_REP_JOIN_FAILURE">DB_REP_JOIN_FAILURE</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/db_put.html#3">DB_REP_LOCKOUT</a></td></tr>
<tr><td align=right>DbEnv::rep_start </td><td>&nbsp;<a href="../api_cxx/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a></td></tr>
+<tr><td align=right>DbEnv::repmgr_start </td><td>&nbsp;<a href="../api_cxx/repmgr_start.html#DB_REP_MASTER">DB_REP_MASTER</a></td></tr>
<tr><td align=right>DbEnv::rep_process_message </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_cxx/rep_transport.html#DB_REP_NOBUFFER">DB_REP_NOBUFFER</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_transport </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a></td></tr>
-<tr><td align=right>DbEnv::set_rep_transport </td><td>&nbsp;<a href="../api_cxx/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a></td></tr>
-<tr><td align=right>DbEnv::rep_process_message </td><td>&nbsp;<a href="../api_cxx/rep_message.html#DB_REP_STARTUPDONE">DB_REP_STARTUPDONE</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_transport </td><td>&nbsp;<a href="../api_cxx/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a></td></tr>
+<tr><td align=right>DbEnv::rep_set_transport </td><td>&nbsp;<a href="../api_cxx/rep_transport.html#DB_REP_REREQUEST">DB_REP_REREQUEST</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/rep_elect.html#2">DB_REP_UNAVAIL</a></td></tr>
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a></td></tr>
<tr><td align=right>Db::get </td><td>&nbsp;<a href="../api_cxx/db_get.html#DB_RMW">DB_RMW</a></td></tr>
@@ -325,11 +360,15 @@
<tr><td align=right>DbEnv::lock_stat </td><td>&nbsp;<a href="../api_cxx/lock_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DbEnv::log_stat </td><td>&nbsp;<a href="../api_cxx/log_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DbEnv::memp_stat </td><td>&nbsp;<a href="../api_cxx/memp_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
+<tr><td align=right>DbEnv::mutex_stat </td><td>&nbsp;<a href="../api_cxx/mutex_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DbEnv::rep_stat </td><td>&nbsp;<a href="../api_cxx/rep_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
<tr><td align=right>DbEnv::txn_stat </td><td>&nbsp;<a href="../api_cxx/txn_stat.html#DB_STAT_ALL">DB_STAT_ALL</a></td></tr>
+<tr><td align=right>Db::stat </td><td>&nbsp;<a href="../api_cxx/db_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::stat_print </td><td>&nbsp;<a href="../api_cxx/env_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DbEnv::lock_stat </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_cxx/memp_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::mutex_stat </td><td>&nbsp;<a href="../api_cxx/mutex_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DbEnv::rep_stat </td><td>&nbsp;<a href="../api_cxx/rep_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DbSequence::stat </td><td>&nbsp;<a href="../api_cxx/seq_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
<tr><td align=right>DbEnv::txn_stat </td><td>&nbsp;<a href="../api_cxx/txn_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
@@ -357,6 +396,9 @@
<tr><td align=right>Db::set_flags </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a></td></tr>
<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_app_dispatch.html#DB_TXN_PRINT">DB_TXN_PRINT</a></td></tr>
+<tr><td align=right>Db::cursor </td><td>&nbsp;<a href="../api_cxx/db_cursor.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<a href="../api_cxx/txn_begin.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a></td></tr>
<tr><td align=right>DbEnv::txn_begin </td><td>&nbsp;<a href="../api_cxx/txn_begin.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
<tr><td align=right>DbTxn::commit </td><td>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a></td></tr>
@@ -368,6 +410,7 @@
<tr><td align=right>DbEnv::remove </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_cxx/env_set_verbose.html#DB_VERB_REGISTER">DB_VERB_REGISTER</a></td></tr>
<tr><td align=right>DbEnv::set_verbose </td><td>&nbsp;<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>&nbsp;<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>&nbsp;<a href="../api_cxx/db_set_feedback.html#DB_VERIFY">DB_VERIFY</a></td></tr>
@@ -380,14 +423,15 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
<tr><td align=right>introduction to </td><td>&nbsp;<a href="../ref/debug/intro.html#2">debugging</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#5">degree</a> 2 isolation</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#8">degree</a> 1 isolation</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#6">degree</a> 2 isolation</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/stability.html#4">degrees</a> of isolation</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#8">dirty</a> reads</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#10">dirty</a> reads</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/diskspace.html#2">disk</a> space requirements</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/xa/intro.html#2">Distributed</a> Transactions</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/faq.html#5">double</a> buffering</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/faq.html#3">double</a> buffering</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#5">duplicate</a> data items</td></tr>
<tr><td align=right>sorted </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#6">duplicate</a> data items</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
@@ -396,12 +440,12 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/truncate.html#3">emptying</a> a database</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#3">encryption</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/env/encrypt.html#2">encryption</a></td></tr>
-<tr><td align=right>turn off access to a database </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#11">environment</a></td></tr>
+<tr><td align=right>turn off access to a database </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#12">environment</a></td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/env/create.html#2">environment</a></td></tr>
<tr><td align=right>use </td><td>&nbsp;<a href="../api_cxx/env_open.html#2">environment</a> constants in naming</td></tr>
<tr><td align=right>use </td><td>&nbsp;<a href="../api_cxx/env_remove.html#2">environment</a> constants in naming</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/env/faq.html#2">environment</a> FAQ</td></tr>
-<tr><td align=right>fault database </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#12">environment</a> in during open</td></tr>
+<tr><td align=right>fault database </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#13">environment</a> in during open</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
<tr><td align=right>introduction to database </td><td>&nbsp;<a href="../ref/env/intro.html#2">environments</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/join.html#2">equality</a> join</td></tr>
@@ -415,10 +459,10 @@
<tr><td align=right>XA </td><td>&nbsp;<a href="../ref/xa/faq.html#2">FAQ</a></td></tr>
<tr><td align=right>configuring without large </td><td>&nbsp;<a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/install/file.html#3">file</a> utility</td></tr>
-<tr><td align=right>returning pages to the </td><td>&nbsp;<a href="../ref/am_misc/faq.html#4">filesystem</a></td></tr>
<tr><td align=right>recovery and </td><td>&nbsp;<a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
<tr><td align=right>remote </td><td>&nbsp;<a href="../ref/env/remote.html#2">filesystems</a></td></tr>
<tr><td align=right>page </td><td>&nbsp;<a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/program/ram.html#2">Flash</a> memory configurations</td></tr>
<tr><td align=right>configuring a small memory </td><td>&nbsp;<a href="../ref/build_unix/conf.html#12">footprint</a> library</td></tr>
<tr><td align=right>Berkeley DB </td><td>&nbsp;<a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
@@ -430,7 +474,8 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
<tr><td align=right>degrees of </td><td>&nbsp;<a href="../ref/am_misc/stability.html#5">isolation</a></td></tr>
-<tr><td align=right>degree 2 </td><td>&nbsp;<a href="../ref/transapp/read.html#6">isolation</a></td></tr>
+<tr><td align=right>degree 2 </td><td>&nbsp;<a href="../ref/transapp/read.html#5">isolation</a></td></tr>
+<tr><td align=right>degree 1 </td><td>&nbsp;<a href="../ref/transapp/read.html#7">isolation</a></td></tr>
<tr><td align=right>configuring the </td><td>&nbsp;<a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
@@ -443,7 +488,7 @@
<tr><td align=right>changing compile or </td><td>&nbsp;<a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
<tr><td align=right>DbEnv::lock_vec </td><td>&nbsp;<a href="../api_cxx/lock_vec.html#lock">lock</a></td></tr>
<tr><td align=right>standard </td><td>&nbsp;<a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
-<tr><td align=right>ignore </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#8">locking</a></td></tr>
+<tr><td align=right>ignore </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#9">locking</a></td></tr>
<tr><td align=right>page-level </td><td>&nbsp;<a href="../ref/lock/page.html#2">locking</a></td></tr>
<tr><td align=right>two-phase </td><td>&nbsp;<a href="../ref/lock/twopl.html#2">locking</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
@@ -456,19 +501,22 @@
<tr><td align=right>sizing the </td><td>&nbsp;<a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
-<tr><td align=right>automatic </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#6">log</a> file removal</td></tr>
+<tr><td align=right>automatic </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#7">log</a> file removal</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
<tr><td align=right>introduction to the </td><td>&nbsp;<a href="../ref/log/intro.html#2">logging</a> subsystem</td></tr>
<tr><td align=right>retrieving Btree records by </td><td>&nbsp;<a href="../ref/am_conf/bt_recnum.html#3">logical</a> record @number</td></tr>
-<tr><td align=right>in memory </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#7">logs</a></td></tr>
+<tr><td align=right>in memory </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#8">logs</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/macosx.html#2">Mac</a> OS X</td></tr>
-<tr><td align=right>turn off database file </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#9">memory</a> mapping</td></tr>
+<tr><td align=right>turn off database file </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#10">memory</a> mapping</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
<tr><td align=right>introduction to the </td><td>&nbsp;<a href="../ref/mp/intro.html#2">memory</a> pool subsystem</td></tr>
<tr><td align=right>configuring for </td><td>&nbsp;<a href="../ref/build_win/faq.html#4">MinGW</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/ext/mod.html#3">mod</a></td></tr>
<tr><td align=right>DbEnv::lock_vec </td><td>&nbsp;<a href="../api_cxx/lock_vec.html#mode">mode</a></td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/program/copy.html#3">moving</a> databases</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#12">multiversion</a> concurrency control</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#13">MVCC</a></td></tr>
<tr><td align=right>Berkeley DB library </td><td>&nbsp;<a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
<tr><td align=right>file </td><td>&nbsp;<a href="../ref/env/naming.html#2">naming</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/join.html#4">natural</a> join</td></tr>
@@ -480,24 +528,24 @@
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#10">ordered</a> retrieval of records from Queue databases</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
<tr><td align=right>selecting a </td><td>&nbsp;<a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
-<tr><td align=right>ignore database environment </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#10">panic</a></td></tr>
+<tr><td align=right>ignore database environment </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#11">panic</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am_misc/partial.html#2">partial</a> record storage and retrieval</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="http://www.sleepycat.com/update/index.html">Patches,</a> Updates and Change logs</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Patches,</a> Updates and Change logs</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/ext/perl.html#2">Perl</a></td></tr>
<tr><td align=right>retrieved key/data </td><td>&nbsp;<a href="../ref/am_misc/perm.html#2">permanence</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/ext/php.html#2">PHP</a></td></tr>
<tr><td align=right>task/thread </td><td>&nbsp;<a href="../ref/program/faq.html#2">priority</a></td></tr>
-<tr><td align=right>Sleepycat Software's Berkeley DB </td><td>&nbsp;<a href="../ref/intro/products.html#2">products</a></td></tr>
+<tr><td align=right>Berkeley DB </td><td>&nbsp;<a href="../ref/intro/products.html#2">products</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_unix/intro.html#5">QNX</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
-<tr><td align=right>dirty </td><td>&nbsp;<a href="../ref/transapp/read.html#7">reads</a></td></tr>
+<tr><td align=right>dirty </td><td>&nbsp;<a href="../ref/transapp/read.html#9">reads</a></td></tr>
<tr><td align=right>accessing Btree records by </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#7">record</a> number</td></tr>
<tr><td align=right>logical </td><td>&nbsp;<a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
<tr><td align=right>managing </td><td>&nbsp;<a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
<tr><td align=right>logically renumbering </td><td>&nbsp;<a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
<tr><td align=right>Berkeley DB </td><td>&nbsp;<a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#11">renumbering</a> records in Recno databases</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#2">repeatable</a> read</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#2">repeatable</a> reads</td></tr>
<tr><td align=right>introduction to </td><td>&nbsp;<a href="../ref/rep/intro.html#2">replication</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/xa/intro.html#3">Resource</a> Manager</td></tr>
<tr><td align=right>XA </td><td>&nbsp;<a href="../ref/xa/xa_intro.html#3">Resource</a> Manager</td></tr>
@@ -519,17 +567,17 @@
<tr><td align=right>disabling </td><td>&nbsp;<a href="../ref/build_unix/conf.html#5">shared</a> libraries</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="http://www.sleepycat.com/">Sleepycat</a> Software</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/read.html#11">snapshot</a> isolation</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
<tr><td align=right>turn off reverse </td><td>&nbsp;<a href="../api_cxx/db_set_flags.html#9">splits</a> in Btree databases</td></tr>
<tr><td align=right>cursor </td><td>&nbsp;<a href="../ref/am_misc/stability.html#3">stability</a></td></tr>
-<tr><td align=right>cursor </td><td>&nbsp;<a href="../ref/transapp/read.html#4">stability</a></td></tr>
+<tr><td align=right>cursor </td><td>&nbsp;<a href="../ref/transapp/read.html#3">stability</a></td></tr>
<tr><td align=right>disabling </td><td>&nbsp;<a href="../ref/build_unix/conf.html#6">static</a> libraries</td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am/stat.html#2">statistics</a></td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/put.html#2">storing</a> records</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
-<tr><td align=right>configure for </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#15">stress</a> testing</td></tr>
+<tr><td align=right>configure for </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#16">stress</a> testing</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
<tr><td align=right>loading Berkeley DB with </td><td>&nbsp;<a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
<tr><td align=right>using Berkeley DB with </td><td>&nbsp;<a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
@@ -548,8 +596,8 @@
<tr><td align=right>building </td><td>&nbsp;<a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
<tr><td align=right>lock </td><td>&nbsp;<a href="../ref/lock/timeout.html#2">timeouts</a></td></tr>
<tr><td align=right>transaction </td><td>&nbsp;<a href="../ref/lock/timeout.html#3">timeouts</a></td></tr>
-<tr><td align=right>turn off synchronous </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#13">transaction</a> commit</td></tr>
<tr><td align=right>turn off synchronous </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#14">transaction</a> commit</td></tr>
+<tr><td align=right>turn off synchronous </td><td>&nbsp;<a href="../api_cxx/env_set_flags.html#15">transaction</a> commit</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/transapp/faq.html#2">transaction</a> FAQ</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
@@ -569,11 +617,10 @@
<tr><td align=right>transaction </td><td>&nbsp;<a href="../ref/transapp/tune.html#3">tuning</a></td></tr>
<tr><td align=right>configuring Berkeley DB with the </td><td>&nbsp;<a href="../ref/xa/xa_config.html#2">Tuxedo</a> System</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
-<tr><td align=right></td><td>&nbsp;<a href="../ref/build_win/unicode.html#2">Unicode</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_unix/intro.html#4">UNIX</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
<tr><td align=right>configuring Berkeley DB for </td><td>&nbsp;<a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
-<tr><td align=right>Patches, </td><td>&nbsp;<a href="http://www.sleepycat.com/update/index.html">Updates</a> and Change logs</td></tr>
+<tr><td align=right>Patches, </td><td>&nbsp;<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Updates</a> and Change logs</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.2.0/toc.html#2">Upgrading</a> to release 2.0</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.3.0/toc.html#2">Upgrading</a> to release 3.0</td></tr>
@@ -584,6 +631,8 @@
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.1/toc.html#2">Upgrading</a> to release 4.1</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.2/toc.html#2">Upgrading</a> to release 4.2</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.3/toc.html#2">Upgrading</a> to release 4.3</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.4/toc.html#2">Upgrading</a> to release 4.4</td></tr>
+<tr><td align=right></td><td>&nbsp;<a href="../ref/upgrade.4.5/toc.html#2">Upgrading</a> to release 4.5</td></tr>
<tr><td align=right></td><td>&nbsp;<a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
<tr><td align=right>database </td><td>&nbsp;<a href="../ref/am/verify.html#2">verification</a></td></tr>
<tr><td align=right>building for </td><td>&nbsp;<a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
@@ -596,6 +645,6 @@
<tr><td align=right></td><td>&nbsp;<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>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_associate.html b/db/docs/api_cxx/db_associate.html
index 512889d59..967c68e5d 100644
--- a/db/docs/api_cxx/db_associate.html
+++ b/db/docs/api_cxx/db_associate.html
@@ -1,5 +1,5 @@
-<!--$Id: db_associate.so,v 10.37 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_associate.so,v 10.43 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,8 +24,8 @@
<p>
int
Db::associate(DbTxn *txnid, Db *secondary,
- int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
- u_int32_t flags);
+ int (*callback)(Db *secondary,
+ const Dbt *key, const Dbt *data, Dbt *result), u_int32_t flags);
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::associate</h3>
@@ -79,8 +79,12 @@ 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>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</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:
<dl compact>
<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. This operation is potentially
@@ -97,15 +101,19 @@ 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>
+<dt><a name="DB_IMMUTABLE_KEY">DB_IMMUTABLE_KEY</a><dd>Specifies the secondary key is immutable.
+<p>This flag can be used to optimize updates when the secondary key in a
+primary record will never be changed after the primary record is
+inserted. For immutable secondary keys, a best effort is made to avoid
+calling the secondary callback function when primary records are
+updated. This optimization may reduce the overhead of update operations
+significantly if the callback function is expensive.</p>
+<p>Be sure to specify this flag only if the secondary key in the primary
+record is never changed. If this rule is violated, the secondary index
+will become corrupted, that is, it will become out of sync with the
+primary.</p>
</dl>
-In addition, the following flag may be set by
-bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
-<dl compact>
-<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>
-<dt><b>primary</b><dd>The associate method called should be a method off a database handle for
+<dt><b>primary</b><dd>The associate method called should be a method of a database handle for
the primary database that is to be indexed.
<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
@@ -117,10 +125,15 @@ with the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag it is s
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.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The Db::associate method
@@ -131,6 +144,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the secondary database handle has already been associated with this or
@@ -147,6 +161,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 01dae8395..61b611659 100644
--- a/db/docs/api_cxx/db_class.html
+++ b/db/docs/api_cxx/db_class.html
@@ -1,5 +1,5 @@
-<!--$Id: db_class.so,v 10.49 2004/08/18 02:33:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_class.so,v 10.52 2005/12/01 02:02:58 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,9 +45,9 @@ 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>
+aborted. Once the <a href="../api_cxx/db_close.html">Db::close</a>, <a href="../api_cxx/db_remove.html">Db::remove</a>,
+<a href="../api_cxx/db_rename.html">Db::rename</a>, or <a href="../api_cxx/db_verify.html">Db::verify</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
@@ -105,6 +105,6 @@ Db
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0a870b481..90529a2d7 100644
--- a/db/docs/api_cxx/db_close.html
+++ b/db/docs/api_cxx/db_close.html
@@ -1,5 +1,5 @@
<!--$Id: db_close.so,v 10.55 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -92,6 +92,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_compact.html b/db/docs/api_cxx/db_compact.html
new file mode 100644
index 000000000..a3985945e
--- /dev/null
+++ b/db/docs/api_cxx/db_compact.html
@@ -0,0 +1,146 @@
+<!--$Id: db_compact.so,v 1.6 2006/09/08 18:36:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Db::compact</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>Db::compact</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+Db::compact(DbTxn *txnid,
+ Dbt *start, Dbt *stop, DB_COMPACT *c_data, u_int32_t flags, Dbt *end);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: Db::compact</h3>
+<p>The Db::compact method compacts Btree and Recno access method
+databases, and optionally returns unused Btree, Hash or Recno database
+pages to the underlying filesystem.</p>
+<p>The Db::compact method
+either 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>
+<dl compact>
+<dt><b>txnid</b><dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the operation occurs in a transactional database, the
+operation will be implicitly transaction protected using multiple
+transactions. These transactions will be periodically committed to
+avoid locking large sections of the tree. Any deadlocks encountered
+cause the compaction operation to retried from the point of the last
+transaction commit.
+<dt><b>start</b><dd>If non-NULL, the <b>start</b> parameter is the starting point for
+compaction in a Btree or Recno database. Compaction will start at the
+smallest key greater than or equal to the specified key. If NULL,
+compaction will start at the beginning of the database.
+<dt><b>stop</b><dd>If non-NULL, the <b>stop</b> parameter is the stopping point for
+compaction in a Btree or Recno database. Compaction will stop at the
+page with the smallest key greater than the specified key. If NULL,
+compaction will stop at the end of the database.
+<dt><b>c_data</b><dd><p>If non-NULL, the <b>c_data</b> parameter contains additional compaction
+configuration parameters, and returns compaction operation statistics,
+in a structure of type DB_COMPACT.</p>
+<p>The following input configuration fields are available from the
+DB_COMPACT structure:</p>
+<dl compact>
+<dt>int compact_fillpercent;<dd>If non-zero, the goal for filling pages, specified as a percentage
+between 1 and 100. Any page in a Btree or Recno databases not at or
+above this percentage full will be considered for compaction. The
+default behavior is to consider every page for compaction, regardless
+of its page fill percentage.
+<dt>int compact_pages;<dd>If non-zero, the call will return after that number of pages have been
+freed.
+<dt>db_timeout_t compact_timeout;<dd>If non-zero, and no <b>txnid</b> parameter was specified, the lock
+timeout set for implicit transactions, in microseconds.
+</dl>
+<p>The following output statistics fields are available from the
+DB_COMPACT structure:</p>
+<dl compact>
+<dt>u_int32_t compact_deadlock;<dd>An output statistics parameter: if no <b>txnid</b> parameter was
+specified, the number of deadlocks which occurred.
+<dt>u_int32_t compact_pages_examine;<dd>An output statistics parameter: the number of database pages reviewed
+during the compaction phase.
+<dt>u_int32_t compact_pages_free;<dd>An output statistics parameter: the number of database pages freed during
+the compaction phase.
+<dt>u_int32_t compact_levels;<dd>An output statistics parameter: the number of levels removed from the
+Btree or Recno database during the compaction phase.
+<dt>u_int32_t compact_pages_truncated;<dd>An output statistics parameter: the number of database pages returned
+to the filesystem.
+</dl>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+one of the following values:
+<dl compact>
+<dt><a name="DB_FREELIST_ONLY">DB_FREELIST_ONLY</a><dd>Do no page compaction, only returning pages to the filesystem that are
+already free and at the end of the file. This flag must be set if the
+database is a Hash access method database.
+<dt><a name="DB_FREE_SPACE">DB_FREE_SPACE</a><dd>Return pages to the filesystem when possible.
+If this flag is not specified, pages emptied as a result of compaction
+will be placed on the free list for re-use, but never returned to the
+filesystem.
+<p>Note that only pages at the end of a file can be returned to the
+filesystem. Because of the one-pass nature of the compaction algorithm,
+any unemptied page near the end of the file inhibits returning pages to
+the file system. A repeated call to the Db::compact method with a low
+<b>compact_fillpercent</b> may be used to return pages in this case.</p>
+</dl>
+<dt><b>end</b><dd>If non-NULL, the <b>end</b> parameter will be filled in with the
+database key marking the end of the compaction operation in a Btree or
+Recno database. This is generally the first key of the page where the
+operation stopped.
+</dl>
+<h3>Errors</h3>
+<p>The Db::compact 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>
+<dl compact>
+<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
+</dl>
+<dl compact>
+<dt>EACCES<dd>An attempt was made to modify a read-only database.
+</dl>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::compact 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::compact 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>
+<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_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 019a82906..77709be8a 100644
--- a/db/docs/api_cxx/db_cursor.html
+++ b/db/docs/api_cxx/db_cursor.html
@@ -1,5 +1,5 @@
-<!--$Id: db_cursor.so,v 10.47 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_cursor.so,v 10.53 2006/08/08 05:24:02 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,7 +27,9 @@ Db::cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags);
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::cursor</h3>
-The Db::cursor method returns a created database cursor.
+<p>The Db::cursor method returns a created database cursor.</p>
+<p>Cursors may span threads, but only serially, that is, the application
+must serialize access to the cursor handle.</p>
<p>The Db::cursor method
either returns a non-zero error value
or throws an exception that encapsulates a non-zero error value on
@@ -36,27 +38,38 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>cursorp</b><dd>The <b>cursorp</b> parameter references memory into which
-a pointer to the allocated cursor is copied.
+a pointer to the allocated cursor is copied.
<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:
<dl compact>
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>This cursor will have degree 2 isolation. This ensures the stability
-of the current data item read by this cursor but permits data read
-by this cursor to be modified or deleted prior to the commit of
-the transaction for this cursor.
-<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.
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>This cursor will have degree 2 isolation. This ensures the stability
+of the current data item read by this cursor but permits data read by
+this cursor to be modified or deleted prior to the commit of the
+transaction for this cursor.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>This cursor will have degree 1 isolation. 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_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when
+the underlying database was opened.
<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.
+<dt><a name="DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a><dd>Specify that the cursor operate with read-only
+<a href="../ref/transapp/read.html">snapshot isolation</a>. For databases
+with the <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> flag set, data values will be read as
+they are when the cursor is opened, without taking read locks. This
+flag implicitly begins a transaction that is committed when the cursor
+is closed. Silently ignored if <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> not set on the
+underlying database or if a transaction is supplied in the <b>txnid</b>
+parameter.
</dl>
-<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.
+<dt><b>txnid</b><dd>Cursor operations are not automatically transaction-protected, even if
+the <a href="../api_cxx/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag is specified to the
+<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> or <a href="../api_cxx/db_open.html">Db::open</a> methods. If cursor operations are
+to be transaction-protected, the <b>txnid</b> parameter must be 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
@@ -67,6 +80,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -81,6 +95,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1951faa0b..a9b0edacd 100644
--- a/db/docs/api_cxx/db_del.html
+++ b/db/docs/api_cxx/db_del.html
@@ -1,5 +1,5 @@
-<!--$Id: db_del.so,v 10.45 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_del.so,v 10.49 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,18 +45,17 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
<dt><b>key</b><dd>The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
-<dl compact>
-<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>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The Db::del method
@@ -67,6 +66,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -95,6 +95,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a9ea77f1c..1b083aab4 100644
--- a/db/docs/api_cxx/db_err.html
+++ b/db/docs/api_cxx/db_err.html
@@ -1,6 +1,6 @@
<!--$Id: db_err.so,v 1.3 2002/08/18 21:15:48 bostic Exp $-->
-<!--$Id: env_err.so,v 10.32 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_err.so,v 10.34 2006/04/27 20:17:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,8 +32,8 @@ Db::errx(const char *fmt, ...);
<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>
+<p>The Db::err and <a href="../api_cxx/env_err.html">DbEnv::err</a> methods constructs an error message
+consisting of the following elements:</p>
<blockquote><dl compact>
<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
@@ -47,6 +47,10 @@ are converted for output.
<b>error</b> value, as returned by the <a href="../api_cxx/env_strerror.html">DbEnv::strerror</a> method.
</dl>
</blockquote>
+<p>The Db::errx and <a href="../api_cxx/env_err.html">DbEnv::errx</a> methods are the same as the
+Db::err and <a href="../api_cxx/env_err.html">DbEnv::err</a> methods, except they do not append the
+final separator characters and standard error string to the error
+message.</p>
<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
@@ -67,17 +71,6 @@ is written to stderr, the standard error output stream.</p></blockquote>
string.
<dt><b>fmt</b><dd>The <b>fmt</b> parameter is an optional printf-style message to display.
</dl>
-<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.</p>
-<h3>Parameters</h3>
-<dl compact>
-<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.
-<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/db_class.html">Db</a>
@@ -87,6 +80,6 @@ string.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 15437bebc..b0440c39b 100644
--- a/db/docs/api_cxx/db_fd.html
+++ b/db/docs/api_cxx/db_fd.html
@@ -1,5 +1,5 @@
-<!--$Id: db_fd.so,v 10.30 2003/10/31 15:17:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_fd.so,v 10.31 2005/06/14 14:06:57 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,9 +32,7 @@ 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>
+<b>fcntl</b>(2) and <b>flock</b>(2) locking functions.</p>
<p>The Db::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::fd method
@@ -45,7 +43,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>fdp</b><dd>The <b>fdp</b> parameter references memory into which
- the current file descriptor is copied.
+ the current file descriptor is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -56,6 +54,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7ac771a78..304b9e645 100644
--- a/db/docs/api_cxx/db_get.html
+++ b/db/docs/api_cxx/db_get.html
@@ -1,5 +1,5 @@
-<!--$Id: db_get.so,v 10.84 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_get.so,v 10.89 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -96,16 +96,6 @@ of type Btree, and it must have been created with the DB_RECNUM flag.</p>
In addition, the following flags may be set by
bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<dl compact>
-<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.
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>Perform the get operation with degree 2 isolation.
-The read is not repeatable.
-<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.
<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
@@ -131,6 +121,12 @@ into secondary indices using the <a href="../api_cxx/db_associate.html">Db::asso
<p>See
<a href="../api_cxx/dbt_bulk_class.html">DbMultipleDataIterator</a>
for more information.</p>
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>Perform the get operation with degree 2 isolation. The read is not
+repeatable.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Perform the get operation with degree 1 isolation, reading modified but
+not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
+database was opened.
<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
@@ -143,9 +139,15 @@ transactions.</p>
</dl>
<dt><b>key</b><dd>The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
<dt><b>pkey</b><dd>The <b>pkey</b> parameter is the return key from the primary database.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The Db::get method
@@ -156,6 +158,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -169,6 +172,9 @@ the Db::pget method was called with a <a href="../api_cxx/db_class.html">Db</a>
refer to a secondary index; or if an
invalid flag value or parameter was specified.
</dl>
+<p>If the requested item could not be returned due to undersized buffer, the Db::get method will fail and
+either return DB_BUFFER_SMALL or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
<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
@@ -182,9 +188,6 @@ timers were configured and the lock could not be granted before the wait-time ex
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 undersized buffer, the Db::get method will fail and
-either return DB_BUFFER_SMALL 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>
@@ -194,6 +197,6 @@ throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 93f7a04d9..50169a3d8 100644
--- a/db/docs/api_cxx/db_get_byteswapped.html
+++ b/db/docs/api_cxx/db_get_byteswapped.html
@@ -1,5 +1,5 @@
<!--$Id: db_get_byteswapped.so,v 10.23 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -67,6 +67,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index c7105270f..b92c1074f 100644
--- a/db/docs/api_cxx/db_get_mpf.html
+++ b/db/docs/api_cxx/db_get_mpf.html
@@ -1,5 +1,5 @@
-<!--$Id: db_get_mpf.so,v 1.7 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_mpf.so,v 1.8 2005/07/20 16:22:18 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,11 +27,9 @@ Db::get_mpf();
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::get_mpf</h3>
-<p>The Db::get_mpf method returns the Db.get_mpf.</p>
+<p>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>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>
@@ -41,6 +39,6 @@ with a <a href="../api_cxx/db_class.html">Db</a> object.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f0a91157f..a519b8fb4 100644
--- a/db/docs/api_cxx/db_get_type.html
+++ b/db/docs/api_cxx/db_get_type.html
@@ -1,5 +1,5 @@
<!--$Id: db_get_type.so,v 10.27 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,7 +42,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>type</b><dd>The <b>type</b> parameter references memory into which
- the type of the underlying access method is copied.
+ the type of the underlying access method is copied.
</dl>
<h3>Errors</h3>
<p>The Db::get_type method
@@ -63,6 +63,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_getenv.html b/db/docs/api_cxx/db_getenv.html
index 868b5e8e6..2c501c008 100644
--- a/db/docs/api_cxx/db_getenv.html
+++ b/db/docs/api_cxx/db_getenv.html
@@ -1,5 +1,5 @@
-<!--$Id: db_getenv.so,v 10.8 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_getenv.so,v 10.9 2005/07/20 16:22:49 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,7 +27,7 @@ Db::get_env();
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::getenv</h3>
-<p>The Db::getenv method returns the Db.getDbEnv.</p>
+<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>
<hr size=1 noshade>
@@ -39,6 +39,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f35f25665..08ca7c37f 100644
--- a/db/docs/api_cxx/db_join.html
+++ b/db/docs/api_cxx/db_join.html
@@ -1,5 +1,5 @@
-<!--$Id: db_join.so,v 10.56 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_join.so,v 10.57 2005/02/10 20:02:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,8 +51,8 @@ The data parameter is left unchanged.
In addition, the following flag may be set by
bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
<dl compact>
-<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
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
database was opened.
<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
@@ -111,6 +111,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -129,6 +130,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 55f492548..7db750f40 100644
--- a/db/docs/api_cxx/db_key_range.html
+++ b/db/docs/api_cxx/db_key_range.html
@@ -1,5 +1,5 @@
<!--$Id: db_key_range.so,v 10.23 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,9 +59,15 @@ contains three elements of type double: <b>less</b>, <b>equal</b>, and
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.
-<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
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected. The Db::key_range method does not retain the locks it acquires for the
life of the transaction, so estimates may not be repeatable.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
@@ -74,6 +80,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the underlying database was not of type Btree; or if an
@@ -96,6 +103,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 656e55685..f3d3c5fa4 100644
--- a/db/docs/api_cxx/db_list.html
+++ b/db/docs/api_cxx/db_list.html
@@ -1,5 +1,5 @@
<!--$Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,20 +10,19 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Databases and Related Methods</h3>
-<!--$Id: m4.methods,v 1.7 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.11 2006/08/25 16:40:00 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Operations</th><th>Description</th></tr>
<!--Db::--><tr><td><a href="../api_cxx/db_class.html">Db</a></td><td>Create a database handle</td></tr>
<!--Db::associate--><tr><td><a href="../api_cxx/db_associate.html">Db::associate</a></td><td>Associate a secondary index</td></tr>
<!--Db::close--><tr><td><a href="../api_cxx/db_close.html">Db::close</a></td><td>Close a database</td></tr>
-<!--Db::cursor--><tr><td><a href="../api_cxx/db_close.html">Db::close</a></td><td>Create a cursor</td></tr>
+<!--Db::compact--><tr><td><a href="../api_cxx/db_compact.html">Db::compact</a></td><td>Compact a database</td></tr>
+<!--Db::cursor--><tr><td><a href="../api_cxx/db_cursor.html">Db::cursor</a></td><td>Create a cursor</td></tr>
<!--Db::del--><tr><td><a href="../api_cxx/db_del.html">Db::del</a></td><td>Delete items from a database</td></tr>
<!--Db::err--><tr><td><a href="../api_cxx/db_err.html">Db::err</a>, <a href="../api_cxx/db_err.html">Db::errx</a></td><td>Error message</td></tr>
<!--Db::fd--><tr><td><a href="../api_cxx/db_fd.html">Db::fd</a></td><td>Return a file descriptor from a database</td></tr>
<!--Db::get--><tr><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>
<!--Db::get_byteswapped--><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>
-<!--Db::get_env--><tr><td><a href="../api_cxx/db_getenv.html">Db::getenv</a></td><td>Return database environment handle</td></tr>
-<!--Db::get_mpf--><tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return underlying <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle</td></tr>
<!--Db::get_type--><tr><td><a href="../api_cxx/db_get_type.html">Db::get_type</a></td><td>Return the database type</td></tr>
<!--Db::join--><tr><td><a href="../api_cxx/db_join.html">Db::join</a></td><td>Perform a database join on cursors</td></tr>
<!--Db::key_range--><tr><td><a href="../api_cxx/db_key_range.html">Db::key_range</a></td><td>Return estimate of key location</td></tr>
@@ -49,7 +48,6 @@
<!--Db::set_flags--><tr><td><a href="../api_cxx/db_set_flags.html">Db::set_flags</a></td><td>General database configuration</td></tr>
<!--Db::set_lorder--><tr><td><a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a></td><td>Set the database byte order</td></tr>
<!--Db::set_pagesize--><tr><td><a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a></td><td>Set the underlying database page size</td></tr>
-<!--Db::set_paniccall--><tr><td><a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a></td><td>Set panic callback</td></tr>
<tr><th>Btree/Recno Configuration</th><th><br></th></tr>
<!--Db::set_append_recno--><tr><td><a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a></td><td>Set record append callback</td></tr>
<!--Db::set_bt_compare--><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>
@@ -66,6 +64,6 @@
<tr><th>Queue Configuration</th><th><br></th></tr>
<!--Db::set_q_extentsize--><tr><td><a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9894c4e03..314095537 100644
--- a/db/docs/api_cxx/db_open.html
+++ b/db/docs/api_cxx/db_open.html
@@ -1,5 +1,5 @@
-<!--$Id: db_open.so,v 10.106 2004/10/06 19:16:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_open.so,v 10.119 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -56,7 +56,7 @@ repeatedly opening and closing the database for each new query.</p>
either 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
+If Db::open fails, the <a href="../api_cxx/db_close.html">Db::close</a> method must be called to
discard the <a href="../api_cxx/db_class.html">Db</a> handle.
</p>
<h3>Parameters</h3>
@@ -71,40 +71,49 @@ 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>
+created by setting the <b>file</b> parameter to NULL. If the
+<b>database</b> parameter is also NULL, the database is strictly
+temporary and cannot be opened by any other thread of control, thus the
+database can only be accessed by sharing the single database handle that
+created it, in circumstances where doing so is safe. If the
+<b>database</b> parameter is not set to NULL, the database can be opened
+by other threads of control and will be replicated to client sites in
+any replication group.</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.
+will be used to back the database; see <a href="../ref/env/naming.html">File naming</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>
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+created by setting the <b>file</b> parameter to NULL.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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:
<dl compact>
<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.
+succeeds, the open operation will be recoverable and all subsequent
+database modification operations based on this handle will be
+transactionally protected. If the call fails, no database will have
+been created.
<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.
-<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.
<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.
+<dt><a name="DB_MULTIVERSION">DB_MULTIVERSION</a><dd>Open the database with support for <a href="../ref/transapp/read.html">multiversion concurrency control</a>. This will cause updates to the
+database to follow a copy-on-write protocol, which is required to
+support snapshot isolation. The DB_MULTIVERSION flag requires
+that the database be transactionally protected during its open and is
+not supported by the queue format.
<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).
<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.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Support read operations with degree 1 isolation. 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.
<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, concurrently usable by multiple
threads in the address space.
@@ -126,12 +135,18 @@ defaults, and is not further specified by Berkeley DB. System shared memory
segments created by the database open are created with mode <b>mode</b>, unmodified
by the process' umask value. If <b>mode</b> is 0, the database open will use a
default mode of readable and writable by both owner and group.</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
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+DB_AUTO_COMMIT flag is specified,
+the operation will be implicitly transaction protected. 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.
+during its open. Also note that the transaction must be committed before
+the handle is closed; see <a href="../ref/program/scope.html">Berkeley DB
+handles</a> for more information.
<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
@@ -186,6 +201,7 @@ invalid flag value or parameter was specified.
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<p>If a transactional database environment operation was selected to
resolve a deadlock, the Db::open method will fail and
@@ -202,9 +218,9 @@ name.</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>filenamep</b><dd>The <b>filenamep</b> parameter references memory into which
-a pointer to the current filename is copied.
+a pointer to the current filename is copied.
<dt><b>dbnamep</b><dd>The <b>dbnamep</b> parameter references memory into which
-a pointer to the current database name is copied.
+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>
@@ -243,6 +259,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e73fce9b0..aa948d33e 100644
--- a/db/docs/api_cxx/db_put.html
+++ b/db/docs/api_cxx/db_put.html
@@ -1,5 +1,5 @@
-<!--$Id: db_put.so,v 10.54 2004/08/13 03:38:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_put.so,v 10.59 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -71,20 +71,20 @@ supports duplicates.
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:
-<dl compact>
-<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>
<dt><b>data</b><dd>The data <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
<dt><b>key</b><dd>The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
+<a name="2"><!--meow--></a>
+<a name="3"><!--meow--></a>
<h3>Errors</h3>
<p>The Db::put method
may fail and throw
@@ -97,6 +97,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If a record number of 0 was specified;
@@ -126,6 +127,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 16ebb9aa7..37c96adb9 100644
--- a/db/docs/api_cxx/db_remove.html
+++ b/db/docs/api_cxx/db_remove.html
@@ -1,6 +1,6 @@
<!--$Id: db_remove.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
-<!--$Id: env_dbremove.so,v 10.48 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 10.49 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,8 +57,9 @@ failure, and returns 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be removed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be removed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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>
@@ -90,6 +91,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 19c04d5d4..e46e6253f 100644
--- a/db/docs/api_cxx/db_rename.html
+++ b/db/docs/api_cxx/db_rename.html
@@ -1,6 +1,6 @@
<!--$Id: db_rename.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
-<!--$Id: env_dbrename.so,v 10.36 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 10.37 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -60,8 +60,9 @@ failure, and returns 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be renamed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be renamed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
<dt><b>newname</b><dd>The <b>newname</b> parameter is the new name of the database or file.
</dl>
@@ -94,6 +95,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d9da6c738..6f8197a29 100644
--- a/db/docs/api_cxx/db_set_alloc.html
+++ b/db/docs/api_cxx/db_set_alloc.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_alloc.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
<!--$Id: env_set_alloc.so,v 1.22 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -92,6 +92,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 09875438d..814c1cee0 100644
--- a/db/docs/api_cxx/db_set_append_recno.html
+++ b/db/docs/api_cxx/db_set_append_recno.html
@@ -1,5 +1,5 @@
-<!--$Id: db_set_append_recno.so,v 1.23 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_append_recno.so,v 1.24 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,8 +23,7 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::set_append_recno(
- int (*db_append_recno_fcn)(DB *dbp, Dbt *data, db_recno_t recno));
+Db::set_append_recno(int (*db_append_recno_fcn)(DB *dbp, Dbt *data, db_recno_t recno));
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::set_append_recno</h3>
@@ -60,6 +59,10 @@ 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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<h3>Errors</h3>
<p>The Db::set_append_recno method
@@ -80,6 +83,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bc2a30f8e..fd65aaf14 100644
--- a/db/docs/api_cxx/db_set_bt_compare.html
+++ b/db/docs/api_cxx/db_set_bt_compare.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_bt_compare.so,v 10.49 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -92,6 +92,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 14ca06749..7eb5a136a 100644
--- a/db/docs/api_cxx/db_set_bt_minkey.html
+++ b/db/docs/api_cxx/db_set_bt_minkey.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_bt_minkey.so,v 10.38 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -90,6 +90,6 @@ leaf page in <b>bt_minkeyp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e151bdc2a..eec5af02f 100644
--- a/db/docs/api_cxx/db_set_bt_prefix.html
+++ b/db/docs/api_cxx/db_set_bt_prefix.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_bt_prefix.so,v 10.48 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -95,6 +95,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_cachesize.html b/db/docs/api_cxx/db_set_cachesize.html
index 72200125d..4321c99e7 100644
--- a/db/docs/api_cxx/db_set_cachesize.html
+++ b/db/docs/api_cxx/db_set_cachesize.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_cachesize.so,v 10.21 2002/08/18 21:15:53 bostic Exp $-->
-<!--$Id: env_set_cachesize.so,v 10.49 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_cachesize.so,v 10.50 2005/01/10 07:18:43 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,17 +38,18 @@ 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^18 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>
+used as specified. The maximum size of a single cache is 4GB on 32-bit
+systems and 10TB on 64-bit systems. (All sizes are in powers-of-two,
+that is, 256KB is 2^18 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 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>
@@ -93,11 +94,11 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>bytesp</b><dd>The <b>bytesp</b> parameter references memory into which
- the additional bytes of memory in the cache is copied.
+ the additional bytes of memory in the cache is copied.
<dt><b>gbytesp</b><dd>The <b>gbytesp</b> parameter references memory into which
- the gigabytes of memory in the cache is copied.
+ the gigabytes of memory in the cache is copied.
<dt><b>ncachep</b><dd>The <b>ncachep</b> parameter references memory into which
- the number of caches is copied.
+ the number of caches is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -108,6 +109,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4ff9166e1..6a5e30a0d 100644
--- a/db/docs/api_cxx/db_set_dup_compare.html
+++ b/db/docs/api_cxx/db_set_dup_compare.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_dup_compare.so,v 10.50 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -90,6 +90,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 99cb5cc63..75597da1d 100644
--- a/db/docs/api_cxx/db_set_encrypt.html
+++ b/db/docs/api_cxx/db_set_encrypt.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_encrypt.so,v 10.3 2002/08/18 21:15:54 bostic Exp $-->
<!--$Id: env_set_encrypt.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -94,6 +94,6 @@ encryption flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6a435d6c4..770975cf8 100644
--- a/db/docs/api_cxx/db_set_errcall.html
+++ b/db/docs/api_cxx/db_set_errcall.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_errcall.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
-<!--$Id: env_set_errcall.so,v 10.37 2004/10/12 20:00:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errcall.so,v 10.39 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,9 @@ 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>
+<p>The Db::set_errcall 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_errcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -63,6 +66,10 @@ reporting function. The function takes three parameters:
<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>).
<dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -73,6 +80,6 @@ reporting function. The function takes three parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 beb630c2d..47f457961 100644
--- a/db/docs/api_cxx/db_set_errfile.html
+++ b/db/docs/api_cxx/db_set_errfile.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_errfile.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
-<!--$Id: env_set_errfile.so,v 10.34 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errfile.so,v 10.36 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,6 +55,9 @@ 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>
+<p>The Db::set_errfile 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_errfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -64,9 +67,19 @@ 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 .</p>
+<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>
+<dl compact>
+<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/db_class.html">Db</a>
@@ -76,6 +89,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 76f6abf96..c4bb79d52 100644
--- a/db/docs/api_cxx/db_set_error_stream.html
+++ b/db/docs/api_cxx/db_set_error_stream.html
@@ -1,6 +1,6 @@
<!--$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.29 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_error_stream.so,v 10.30 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,11 @@ 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.</p>
+<p>The Db::set_error_stream 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_error_stream method may be called at any time during the life of the
+application.</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>stream</b><dd>The <b>stream</b> parameter is the application-specified output stream to
@@ -68,6 +73,6 @@ be used for additional error information.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fafde76e8..ef8101b2b 100644
--- a/db/docs/api_cxx/db_set_errpfx.html
+++ b/db/docs/api_cxx/db_set_errpfx.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_errpfx.so,v 10.10 2002/08/18 21:15:55 bostic Exp $-->
-<!--$Id: env_set_errpfx.so,v 10.33 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errpfx.so,v 10.34 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,9 @@ 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>
+<p>The Db::set_errpfx 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_errpfx method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -70,6 +73,6 @@ error prefix in <b>errpfxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c436c22c5..5f37e396b 100644
--- a/db/docs/api_cxx/db_set_feedback.html
+++ b/db/docs/api_cxx/db_set_feedback.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_feedback.so,v 10.29 2003/10/19 01:27:11 bostic Exp $-->
-<!--$Id: env_set_feedback.so,v 10.42 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_feedback.so,v 10.43 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,8 +24,7 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::set_feedback(
- void (*db_feedback_fcn)(DB *dbp, int opcode, int percent));
+Db::set_feedback(void (*db_feedback_fcn)(DB *dbp, int opcode, int percent));
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::set_feedback</h3>
@@ -59,6 +58,10 @@ parameter may take on any of the following values:
<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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -69,6 +72,6 @@ been completed, specified as an integer value between 0 and 100.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 dbac4c7bc..5067b3462 100644
--- a/db/docs/api_cxx/db_set_flags.html
+++ b/db/docs/api_cxx/db_set_flags.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_flags.so,v 10.68 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -296,6 +296,6 @@ current flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 948b8c306..0475e217d 100644
--- a/db/docs/api_cxx/db_set_h_ffactor.html
+++ b/db/docs/api_cxx/db_set_h_ffactor.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_h_ffactor.so,v 10.37 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -88,6 +88,6 @@ hash table density in <b>h_ffactorp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3e2df3574..98537b5c1 100644
--- a/db/docs/api_cxx/db_set_h_hash.html
+++ b/db/docs/api_cxx/db_set_h_hash.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_h_hash.so,v 10.40 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -77,6 +77,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 30073a927..d4da2c4f6 100644
--- a/db/docs/api_cxx/db_set_h_nelem.html
+++ b/db/docs/api_cxx/db_set_h_nelem.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_h_nelem.so,v 10.36 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -87,6 +87,6 @@ estimate of the final size of the hash table in <b>h_nelemp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2e4355370..add3c5d17 100644
--- a/db/docs/api_cxx/db_set_lorder.html
+++ b/db/docs/api_cxx/db_set_lorder.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_lorder.so,v 10.38 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -92,6 +92,6 @@ database byte order in <b>lorderp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_msg_stream.html b/db/docs/api_cxx/db_set_msg_stream.html
index 3131a2a42..6f75880d9 100644
--- a/db/docs/api_cxx/db_set_msg_stream.html
+++ b/db/docs/api_cxx/db_set_msg_stream.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_msg_stream.so,v 1.1 2004/07/14 19:30:39 bostic Exp $-->
-<!--$Id: env_set_msg_stream.so,v 10.4 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msg_stream.so,v 10.5 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,6 +45,11 @@ approaches.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_message_stream method affects the entire environment and is equivalent to calling
the <a href="../api_cxx/env_set_msg_stream.html">DbEnv::set_message_stream</a> method.</p>
+<p>The Db::set_message_stream 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_message_stream method may be called at any time during the life of the
+application.</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>stream</b><dd>The <b>stream</b> parameter is the application-specified output stream to
@@ -59,6 +64,6 @@ be used for additional message information.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_msgcall.html b/db/docs/api_cxx/db_set_msgcall.html
index 878ae80ea..73d5acc7c 100644
--- a/db/docs/api_cxx/db_set_msgcall.html
+++ b/db/docs/api_cxx/db_set_msgcall.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_msgcall.so,v 10.1 2004/04/16 19:01:56 bostic Exp $-->
-<!--$Id: env_set_msgcall.so,v 10.5 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgcall.so,v 10.7 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,8 +23,7 @@
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-void Db::set_msgcall(
- void (*db_msgcall_fcn)(const DbEnv *dbenv, char *msg));
+void Db::set_msgcall(void (*db_msgcall_fcn)(const DbEnv *dbenv, char *msg));
</pre></h3>
<hr size=1 noshade>
<h3>Description: Db::set_msgcall</h3>
@@ -45,6 +44,9 @@ to display the messages via a C library FILE *.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_msgcall method affects the entire environment and is equivalent to calling
the DbEnv::set_msgcall method.</p>
+<p>The Db::set_msgcall 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_msgcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -55,6 +57,10 @@ reporting function. The function takes two parameters:
<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment.
<dt><b>msg</b><dd>The <b>msg</b> parameter is the message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -65,6 +71,6 @@ reporting function. The function takes two parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_msgfile.html b/db/docs/api_cxx/db_set_msgfile.html
index b0e2b62fb..787ce7e65 100644
--- a/db/docs/api_cxx/db_set_msgfile.html
+++ b/db/docs/api_cxx/db_set_msgfile.html
@@ -1,6 +1,6 @@
<!--$Id: db_set_msgfile.so,v 1.1 2004/07/14 19:30:39 bostic Exp $-->
-<!--$Id: env_set_msgfile.so,v 10.5 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgfile.so,v 10.7 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,9 @@ approaches.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_msgfile method affects the entire environment and is equivalent to calling
the <a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method.</p>
+<p>The Db::set_msgfile 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_msgfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -55,9 +58,19 @@ displaying messages.
</dl>
<hr size=1 noshade>
<h3>Description: Db::get_msgfile</h3>
-<p>The Db::get_msgfile method returns the .</p>
+<p>The Db::get_msgfile method returns the FILE *.</p>
<p>The Db::get_msgfile method may be called at any time during the life of the
application.</p>
+<p>The Db::get_msgfile method
+either 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>
+<dl compact>
+<dt><b>msgfilep</b><dd>The Db::get_msgfile method returns the
+FILE * in <b>msgfilep</b>.
+</dl>
<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
@@ -67,6 +80,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e8c29ef3c..de4c2f96f 100644
--- a/db/docs/api_cxx/db_set_pagesize.html
+++ b/db/docs/api_cxx/db_set_pagesize.html
@@ -1,5 +1,5 @@
-<!--$Id: db_set_pagesize.so,v 10.39 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_pagesize.so,v 10.40 2005/12/16 01:19:35 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,9 +45,9 @@ 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.
+If creating additional databases in a single physical file, information
+specified to Db::set_pagesize will be ignored and the page size
+of the existing databases will be used.
<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
@@ -91,6 +91,6 @@ page size in <b>pagesizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0944ad04f..63f24adda 100644
--- a/db/docs/api_cxx/db_set_q_extentsize.html
+++ b/db/docs/api_cxx/db_set_q_extentsize.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_q_extentsize.so,v 1.23 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -87,6 +87,6 @@ number of pages in an extent in <b>extentsizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0efa76b06..85d7173ed 100644
--- a/db/docs/api_cxx/db_set_re_delim.html
+++ b/db/docs/api_cxx/db_set_re_delim.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_delim.so,v 10.39 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -87,6 +87,6 @@ delimiting byte in <b>delimp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c67ca5363..61fca4731 100644
--- a/db/docs/api_cxx/db_set_re_len.html
+++ b/db/docs/api_cxx/db_set_re_len.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_len.so,v 10.40 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -94,6 +94,6 @@ record length in <b>re_lenp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 713196441..c099776d7 100644
--- a/db/docs/api_cxx/db_set_re_pad.html
+++ b/db/docs/api_cxx/db_set_re_pad.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_pad.so,v 10.37 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -85,6 +85,6 @@ pad character in <b>re_padp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4e3f8d179..a6234502a 100644
--- a/db/docs/api_cxx/db_set_re_source.html
+++ b/db/docs/api_cxx/db_set_re_source.html
@@ -1,5 +1,5 @@
<!--$Id: db_set_re_source.so,v 10.42 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -89,8 +89,9 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>source</b><dd>The backing flat text database file for a Recno database.
-<p>On Windows, the <b>source</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>source</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The Db::set_re_source method
@@ -116,6 +117,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e26b1f013..8a3f19326 100644
--- a/db/docs/api_cxx/db_stat.html
+++ b/db/docs/api_cxx/db_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: db_stat.so,v 10.88 2004/10/29 18:42:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 10.89 2005/02/10 20:02:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,21 +39,28 @@ copied into the memory location to which it refers.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
one of the following values:
<dl compact>
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>Database items read during this operation will have degree 2 isolation.
-This ensures the stability of the data items read during the stat
-operation but permits that data to be modified or deleted by other
-transactions prior to the commit of the specified transaction.
-<dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Database items read during this operation may include 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.
<dt><a name="DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only the values which do not require traversal of the database.
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.
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>Database items read during this operation will have degree 2 isolation.
+This ensures the stability of the data items read during the stat
+operation but permits that data to be modified or deleted by other
+transactions prior to the commit of the specified transaction.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Database items read during this operation will have degree 1 isolation,
+including modified but not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
+database was opened.
</dl>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<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
@@ -199,6 +206,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -206,7 +214,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: Db::stat_print</h3>
-<p>The Db::stat_print method returns the
+<p>The Db::stat_print method displays the
database statistical information, as described for the Db::stat method.
The information is printed to a specified output channel (see the
<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or passed to an
@@ -221,10 +229,15 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
+<dt><a name="DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only the values which do not require traversal of the database.
+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.
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -236,6 +249,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5fc73a3c9..7d1e41679 100644
--- a/db/docs/api_cxx/db_sync.html
+++ b/db/docs/api_cxx/db_sync.html
@@ -1,5 +1,5 @@
<!--$Id: db_sync.so,v 10.36 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -72,6 +73,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f2a5bfcd2..0a182abe5 100644
--- a/db/docs/api_cxx/db_truncate.html
+++ b/db/docs/api_cxx/db_truncate.html
@@ -1,5 +1,5 @@
-<!--$Id: db_truncate.so,v 1.26 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_truncate.so,v 1.29 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,18 +44,17 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>countp</b><dd>The <b>countp</b> parameter references memory into which
- the number of records discarded from the database is copied.
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
-<dl compact>
-<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>
-<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.
+ the number of records discarded from the database is copied.
+<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The Db::truncate method
@@ -84,6 +83,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c106f9037..7e3243101 100644
--- a/db/docs/api_cxx/db_upgrade.html
+++ b/db/docs/api_cxx/db_upgrade.html
@@ -1,5 +1,5 @@
<!--$Id: db_upgrade.so,v 10.37 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -101,6 +101,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 223d2e8ae..621cc6309 100644
--- a/db/docs/api_cxx/db_verify.html
+++ b/db/docs/api_cxx/db_verify.html
@@ -1,5 +1,5 @@
-<!--$Id: db_verify.so,v 10.29 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_verify.so,v 10.30 2005/03/08 16:29:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -64,9 +64,10 @@ to be verified are found.
the following value:
<dl compact>
<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.
+stream named in the <b>outfile</b> parameter. Key values are written
+for Btree, Hash and Queue databases, but not for Recno databases.
+<p>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>
<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>
@@ -143,6 +144,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1c63f983d..fc4cbb09a 100644
--- a/db/docs/api_cxx/dbc_class.html
+++ b/db/docs/api_cxx/dbc_class.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_class.so,v 10.19 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ handle may not be accessed again, regardless of the method's return.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d69c812ea..2664ca9b5 100644
--- a/db/docs/api_cxx/dbc_close.html
+++ b/db/docs/api_cxx/dbc_close.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_close.so,v 10.32 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_close.so,v 10.34 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -67,6 +67,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f6a5b4079..f9f717496 100644
--- a/db/docs/api_cxx/dbc_count.html
+++ b/db/docs/api_cxx/dbc_count.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_count.so,v 10.25 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,7 +37,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<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.
+ the count of the number of duplicate data items is copied.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
<h3>Errors</h3>
@@ -49,6 +49,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the cursor has not been initialized; or if an
@@ -63,6 +64,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c64ff0548..bd735bf7a 100644
--- a/db/docs/api_cxx/dbc_del.html
+++ b/db/docs/api_cxx/dbc_del.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_del.so,v 10.44 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_del.so,v 10.46 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,6 +55,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -87,6 +88,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7ba5f9628..9c4eb6de2 100644
--- a/db/docs/api_cxx/dbc_dup.html
+++ b/db/docs/api_cxx/dbc_dup.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_dup.so,v 10.32 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>An
@@ -72,6 +73,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c647bf6a7..68bed52f6 100644
--- a/db/docs/api_cxx/dbc_get.html
+++ b/db/docs/api_cxx/dbc_get.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_get.so,v 10.112 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_get.so,v 10.114 2005/02/10 20:02:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -189,8 +189,8 @@ flag.</p>
In addition, the following flags may be set by
bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<dl compact>
-<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
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not specified when the underlying
database was opened.
<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
@@ -279,6 +279,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
@@ -290,6 +291,9 @@ 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>If the requested item could not be returned due to undersized buffer, the Dbc::get method will fail and
+either return DB_BUFFER_SMALL or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
<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
@@ -298,9 +302,6 @@ throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> excepti
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 undersized buffer, the Dbc::get method will fail and
-either return DB_BUFFER_SMALL 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>
@@ -310,6 +311,6 @@ throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 49b2904b1..e3772cc00 100644
--- a/db/docs/api_cxx/dbc_list.html
+++ b/db/docs/api_cxx/dbc_list.html
@@ -1,5 +1,5 @@
<!--$Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,10 +10,10 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Database Cursors and Related Methods</h3>
-<!--$Id: m4.methods,v 1.3 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.4 2005/02/09 13:11:05 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
-<!--Db::cursor--><tr><td><a href="../api_cxx/db_cursor.html">Db::cursor</a></td><td>Create a cursor handle</td></tr>
+<!--Db::cursor--><tr><td><a href="../api_cxx/db_cursor.html">Db::cursor</a></td><td>Create a cursor</td></tr>
<!--DbCursor::close--><tr><td><a href="../api_cxx/dbc_close.html">Dbc::close</a></td><td>Close a cursor</td></tr>
<!--DbCursor::count--><tr><td><a href="../api_cxx/dbc_count.html">Dbc::count</a></td><td>Return count of duplicates</td></tr>
<!--DbCursor::del--><tr><td><a href="../api_cxx/dbc_del.html">Dbc::del</a></td><td>Delete by cursor</td></tr>
@@ -21,6 +21,6 @@
<!--DbCursor::get--><tr><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>
<!--DbCursor::put--><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="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f364db07f..b9a952dc2 100644
--- a/db/docs/api_cxx/dbc_put.html
+++ b/db/docs/api_cxx/dbc_put.html
@@ -1,5 +1,5 @@
-<!--$Id: dbc_put.so,v 10.58 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_put.so,v 10.60 2006/09/13 14:30:52 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -125,6 +125,7 @@ the following non-zero errors:</p>
<dl compact>
<dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
unrolled a committed transaction.
+<dt>DB_REP_LOCKOUT<dd>The operation was blocked by client/master synchronization.
</dl>
<dl compact>
<dt>EINVAL<dd>If the DB_AFTER, DB_BEFORE or DB_CURRENT flags
@@ -162,6 +163,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbt_bulk_class.html b/db/docs/api_cxx/dbt_bulk_class.html
index 307745185..9acd12223 100644
--- a/db/docs/api_cxx/dbt_bulk_class.html
+++ b/db/docs/api_cxx/dbt_bulk_class.html
@@ -1,5 +1,5 @@
<!--$Id: dbt_bulk_class.so,v 1.15 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -158,6 +158,6 @@ original bulk retrieval buffer.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 feb978c9e..b0638fa78 100644
--- a/db/docs/api_cxx/dbt_class.html
+++ b/db/docs/api_cxx/dbt_class.html
@@ -1,6 +1,6 @@
<!--$Id: dbt_class.so,v 10.1 2002/08/24 18:22:30 bostic Exp $-->
-<!--$Id: dbt_cxx.so,v 10.69 2004/10/14 15:58:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbt_cxx.so,v 10.71 2005/04/01 01:53:16 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -189,7 +189,7 @@ information.</p>
<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>
+<h3>Description: Dbt::set_flags</h3>
<p>Set the object flag value.</p>
<h3>Parameters</h3>
<dl compact>
@@ -220,8 +220,9 @@ DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
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 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 DB_BUFFER_SMALL is returned.
+Otherwise, the <b>size</b> fields of both the key and data Dbt
+objects are set to the length needed for the requested item, and the
+error DB_BUFFER_SMALL is returned.
<p>It is an error to specify more than one of DB_DBT_MALLOC,
DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
</dl>
@@ -271,12 +272,12 @@ bytes would be those specified by the put call.</p>
</dl>
</dl>
<hr size=1 noshade>
-<h3>Description: Dbt::set_object</h3>
+<h3>Description: Dbt::get_flags</h3>
<p>Return the object flag value.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbt_package.html b/db/docs/api_cxx/dbt_package.html
index 07ca6bc02..88bcfb497 100644
--- a/db/docs/api_cxx/dbt_package.html
+++ b/db/docs/api_cxx/dbt_package.html
@@ -1,5 +1,5 @@
<!--$Id: dbt_package.so,v 10.2 2004/08/29 14:00:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,6 +17,6 @@
<tr><td><a href="../api_cxx/dbt_bulk_class.html">DbMultipleKeyDataIterator</a></td><td>Next bulk get retrieval</td></tr>
<tr><td><a href="../api_cxx/dbt_bulk_class.html">DbMultipleRecnoDataIterator</a></td><td>Next bulk get retrieval</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 236b7c77a..b55697a1f 100644
--- a/db/docs/api_cxx/deadlock_class.html
+++ b/db/docs/api_cxx/deadlock_class.html
@@ -1,5 +1,5 @@
<!--$Id: deadlock_class.so,v 10.17 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ termination, and a DbDeadlockException is thrown to that thread.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_cdsgroup_begin.html b/db/docs/api_cxx/env_cdsgroup_begin.html
new file mode 100644
index 000000000..1cc8af4cd
--- /dev/null
+++ b/db/docs/api_cxx/env_cdsgroup_begin.html
@@ -0,0 +1,59 @@
+<!--$Id: env_cdsgroup_begin.so,v 1.2 2006/08/24 19:02:06 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::cdsgroup_begin</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::cdsgroup_begin</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::cdsgroup_begin(DbTxn **tid);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::cdsgroup_begin</h3>
+<p>The DbEnv::cdsgroup_begin method allocates a locker ID in an
+environment configured for Berkeley DB Concurrent Data Store applications. It copies a pointer to
+a <a href="../api_cxx/txn_class.html">DbTxn</a> that uniquely identifies the locker ID into the memory
+to which <b>tid</b> refers. Calling the <a href="../api_cxx/txn_commit.html">DbTxn::commit</a> method will
+discard the allocated locker ID.</p>
+<p>See <a href="../ref/cam/intro.html">Berkeley DB Concurrent Data Store applications</a> for more
+information about when this is required.</p>
+<p>The DbEnv::cdsgroup_begin method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::cdsgroup_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>Errors</h3>
+<p>If the maximum number of lockers has been reached, the DbEnv::cdsgroup_begin method will fail and
+either return ENOMEM or
+throw a DbMemoryException.</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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8e9b90287..d4c6a47d4 100644
--- a/db/docs/api_cxx/env_class.html
+++ b/db/docs/api_cxx/env_class.html
@@ -1,5 +1,5 @@
-<!--$Id: env_class.so,v 10.41 2004/08/18 02:33:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_class.so,v 10.45 2005/11/30 19:09:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,7 +39,7 @@ public:
<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
+Methods of 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="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag
@@ -93,6 +93,6 @@ DbEnv
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 303846928..ceb0e6d62 100644
--- a/db/docs/api_cxx/env_close.html
+++ b/db/docs/api_cxx/env_close.html
@@ -1,5 +1,5 @@
<!--$Id: env_close.so,v 10.38 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -78,6 +78,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b4186551f..14219f092 100644
--- a/db/docs/api_cxx/env_dbremove.html
+++ b/db/docs/api_cxx/env_dbremove.html
@@ -1,5 +1,5 @@
-<!--$Id: env_dbremove.so,v 10.48 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 10.49 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -48,8 +48,9 @@ failure, and returns 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be removed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be removed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
the following value:
<dl compact>
@@ -57,9 +58,14 @@ the following value:
changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+DB_AUTO_COMMIT flag is specified,
+the operation will be implicitly transaction protected.
</dl>
<h3>Environment Variables</h3>
<p>The
@@ -98,6 +104,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 50ee81bae..4ecdd706c 100644
--- a/db/docs/api_cxx/env_dbrename.html
+++ b/db/docs/api_cxx/env_dbrename.html
@@ -1,5 +1,5 @@
-<!--$Id: env_dbrename.so,v 10.36 2004/08/29 19:27:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 10.37 2004/12/16 19:13:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,8 +50,9 @@ failure, and returns 0 on success.
<dt><b>database</b><dd>The <b>database</b> parameter is the database to be renamed.
<dt><b>file</b><dd>The <b>file</b> parameter is the physical file which contains the
database(s) to be renamed.
-<p>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
the following value:
<dl compact>
@@ -60,9 +61,14 @@ changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
<dt><b>newname</b><dd>The <b>newname</b> parameter is the new name of the database or file.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+DB_AUTO_COMMIT flag is specified,
+the operation will be implicitly transaction protected.
</dl>
<h3>Environment Variables</h3>
<p>The
@@ -101,6 +107,6 @@ throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exc
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cbf4836dd..638d6e0e6 100644
--- a/db/docs/api_cxx/env_err.html
+++ b/db/docs/api_cxx/env_err.html
@@ -1,5 +1,5 @@
-<!--$Id: env_err.so,v 10.32 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_err.so,v 10.34 2006/04/27 20:17:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,8 +31,8 @@ DbEnv::errx(const char *fmt, ...);
<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.</p>
-<p>The DbEnv::err method constructs an error message consisting of the
-following elements:</p>
+<p>The <a href="../api_cxx/db_err.html">Db::err</a> and DbEnv::err methods constructs an error message
+consisting of the following elements:</p>
<blockquote><dl compact>
<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
@@ -46,6 +46,10 @@ are converted for output.
<b>error</b> value, as returned by the <a href="../api_cxx/env_strerror.html">DbEnv::strerror</a> method.
</dl>
</blockquote>
+<p>The <a href="../api_cxx/db_err.html">Db::errx</a> and DbEnv::errx methods are the same as the
+<a href="../api_cxx/db_err.html">Db::err</a> and DbEnv::err methods, except they do not append the
+final separator characters and standard error string to the error
+message.</p>
<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
@@ -66,17 +70,6 @@ DbEnv::err and <a href="../api_cxx/db_err.html">Db::err</a> methods will displ
string.
<dt><b>fmt</b><dd>The <b>fmt</b> parameter is an optional printf-style message to display.
</dl>
-<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.</p>
-<h3>Parameters</h3>
-<dl compact>
-<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.
-<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>
@@ -86,6 +79,6 @@ string.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_event_notify.html b/db/docs/api_cxx/env_event_notify.html
new file mode 100644
index 000000000..e0b28313e
--- /dev/null
+++ b/db/docs/api_cxx/env_event_notify.html
@@ -0,0 +1,94 @@
+<!--$Id: env_event_notify.so,v 10.9 2006/06/27 22:49:29 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::set_event_notify</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_event_notify</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::set_event_notify(void (*db_event_fcn)(DB_ENV *dbenv, u_int32_t event, void *event_info));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_event_notify</h3>
+<p>The DbEnv::set_event_notify method configures a callback function which
+is called to notify the process of specific Berkeley DB events.</p>
+<p>The DbEnv::set_event_notify 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_event_notify method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_event_notify method
+either 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>
+<dl compact>
+<dt><b>db_event_fcn</b><dd>The <b>db_event_fcn</b> parameter is the application's event
+notification function. The function takes three parameters:
+<dl compact>
+<dt>dbenv<dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<dt>event<dd>The <b>event</b> parameter is one of the following values:
+<dl compact>
+<dt><a name="DB_EVENT_PANIC">DB_EVENT_PANIC</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). 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.
+<p>When <b>event</b> is set to DB_EVENT_PANIC, the database
+environment has failed. All threads of control in the database
+environment should exit the environment, and recovery should be run.</p>
+<dt><a name="DB_EVENT_REP_CLIENT">DB_EVENT_REP_CLIENT</a><dd>The local site is now a replication client.
+<dt><a name="DB_EVENT_REP_MASTER">DB_EVENT_REP_MASTER</a><dd>The local site is now the master site of its replication group. It is
+the application's responsibility to begin acting as the master environment.
+<dt><a name="DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a><dd>The replication group of which this site is a member has just established a
+new master; the local site is not the new master. The
+<b>event_info</b> parameter points to an integer containing the
+environment ID of the new master.
+<p>The DB_EVENT_REP_NEWMASTER event is provided only to applications using
+the replication manager support.</p>
+<dt><a name="DB_EVENT_REP_STARTUPDONE">DB_EVENT_REP_STARTUPDONE</a><dd>The client has completed startup synchronization and is now processing
+live log records received from the master.
+<dt><a name="DB_EVENT_WRITE_FAILED">DB_EVENT_WRITE_FAILED</a><dd>A Berkeley DB write to stable storage failed.
+</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
+<dt>event_info<dd>The <b>event_info</b> parameter may reference memory which contains
+additional information describing an event. By default,
+<b>event_info</b> is NULL; specific events may pass non-NULL values,
+in which case the event will also describe the memory's structure.
+</dl>
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/env_failchk.html b/db/docs/api_cxx/env_failchk.html
new file mode 100644
index 000000000..83acfd93a
--- /dev/null
+++ b/db/docs/api_cxx/env_failchk.html
@@ -0,0 +1,96 @@
+<!--$Id: env_failchk.so,v 10.5 2006/05/26 20:40:50 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::failchk</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::failchk</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::dbenv_failchk(u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::failchk</h3>
+<p>The DbEnv::failchk method checks for threads of control (either a true
+thread or a process) that have exited while manipulating Berkeley DB library
+data structures, while holding a logical database lock, or with an
+unresolved transaction (that is, a transaction that was never aborted
+or committed). For more information, see <a href="../ref/cam/app.html">Architecting Data Store and Concurrent Data Store applications</a>, and
+<a href="../ref/transapp/app.html">Architecting Transactional Data Store
+applications</a>.</p>
+<p>The DbEnv::failchk method is based on the "thread_id" and "is_alive"
+functions specified to the <a href="../api_cxx/env_set_thread_id.html">DbEnv::set_thread_id</a> method. Applications
+calling the DbEnv::failchk method must have already called the
+<a href="../api_cxx/env_set_isalive.html">DbEnv::set_isalive</a> method, on the same <a href="../api_cxx/env_class.html">DbEnv</a>, and must have
+configured their database environment using the
+<a href="../api_cxx/env_set_thread_count.html">DbEnv::set_thread_count</a> method.</p>
+<p>If DbEnv::failchk determines a thread of control exited while
+holding database read locks, it will release those locks. If
+DbEnv::failchk determines a thread of control exited with an
+unresolved transaction, the transaction will be aborted. In either of
+these cases, DbEnv::failchk will return 0 and the application may
+continue to use the database environment.</p>
+<p>In either of these cases, the DbEnv::failchk method will also report
+the process and thread IDs associated with any released locks or
+aborted transactions. The information is printed to a specified output
+channel (see the <a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or
+passed to an application callback function (see the
+<a href="../api_cxx/env_set_msgcall.html">DbEnv::set_msgcall</a> method for more information).</p>
+<p>If DbEnv::failchk determines a thread of control has exited such
+that database environment recovery is required, it will return
+<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>. In this case, the application should not
+continue to use the database environment. For a further description as
+to the actions the application should take when this failure occurs, see
+<a href="../ref/cam/fail.html">Handling failure in Data Store and
+Concurrent Data Store applications</a>, and
+<a href="../ref/transapp/fail.html">Handling failure in Transactional
+Data Store applications</a>.</p>
+<p>The DbEnv::failchk 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::failchk method
+either 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>
+<dl compact>
+<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::failchk 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/env_fileid_reset.html b/db/docs/api_cxx/env_fileid_reset.html
new file mode 100644
index 000000000..b366b68cf
--- /dev/null
+++ b/db/docs/api_cxx/env_fileid_reset.html
@@ -0,0 +1,76 @@
+<!--$Id: env_fileid_reset.so,v 1.3 2005/12/13 16:48:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::fileid_reset</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::fileid_reset</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::fileid_reset(const char *file, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::fileid_reset</h3>
+<p>The DbEnv::fileid_reset method allows database files to be copied, and
+then the copy used in the same database environment as the original.</p>
+<p>All databases contain an ID string used to identify the database in the
+database environment cache. If a physical database file is copied, and
+used in the same environment as another file with the same ID strings,
+corruption can occur. The DbEnv::fileid_reset method creates new ID
+strings for all of the databases in the physical file.</p>
+<p>The DbEnv::fileid_reset method modifies the physical file, in-place.
+Applications should not reset IDs in files that are currently in use.</p>
+<p>The DbEnv::fileid_reset method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::fileid_reset method
+either 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>
+<dl compact>
+<dt><b>file</b><dd>The name of the physical file in which new file IDs are to be created.
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt>DB_ENCRYPT<dd>The file contains encrypted databases.
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::fileid_reset 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 798bd29a5..58486c7d0 100644
--- a/db/docs/api_cxx/env_list.html
+++ b/db/docs/api_cxx/env_list.html
@@ -1,5 +1,5 @@
<!--$Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,16 +10,20 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Database Environments and Related Methods</h3>
-<!--$Id: m4.methods,v 10.7 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 10.17 2006/08/25 16:40:00 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Environment Operations</th><th>Description</th></tr>
<!--DbEnv::--><tr><td><a href="../api_cxx/env_class.html">DbEnv</a></td><td>Create an environment handle</td></tr>
+<!--Db::get_env--><tr><td><a href="../api_cxx/db_getenv.html">Db::getenv</a></td><td>Return <a href="../api_cxx/db_class.html">Db</a>'s underlying <a href="../api_cxx/env_class.html">DbEnv</a> handle</td></tr>
<!--DbEnv::close--><tr><td><a href="../api_cxx/env_close.html">DbEnv::close</a></td><td>Close an environment</td></tr>
<!--DbEnv::dbremove--><tr><td><a href="../api_cxx/env_dbremove.html">DbEnv::dbremove</a></td><td>Remove a database</td></tr>
<!--DbEnv::dbrename--><tr><td><a href="../api_cxx/env_dbrename.html">DbEnv::dbrename</a></td><td>Rename a database</td></tr>
<!--DbEnv::err--><tr><td><a href="../api_cxx/env_err.html">DbEnv::err</a>, <a href="../api_cxx/env_err.html">DbEnv::errx</a></td><td>Error message</td></tr>
+<!--DbEnv::failchk--><tr><td><a href="../api_cxx/env_failchk.html">DbEnv::failchk</a></td><td>Check for thread failure</td></tr>
+<!--DbEnv::fileid_reset--><tr><td><a href="../api_cxx/env_fileid_reset.html">DbEnv::fileid_reset</a></td><td>Reset database file IDs</td></tr>
<!--DbEnv::get_home--><tr><td><a href="../api_cxx/env_open.html">DbEnv::get_home</a></td><td>Return environment's home directory</td></tr>
-<!--DbEnv::get_open_flags--><tr><td><a href="../api_cxx/env_open.html">DbEnv::get_open_flags</a></td><td>Return the flags with which the environment was opened</td></tr>
+<!--DbEnv::get_open_flags--><tr><td><a href="../api_cxx/env_open.html">DbEnv::get_open_flags</a></td><td>Return flags with which the environment was opened</td></tr>
+<!--DbEnv::lsn_reset--><tr><td><a href="../api_cxx/env_lsn_reset.html">DbEnv::lsn_reset</a></td><td>Reset database file LSNs</td></tr>
<!--DbEnv::open--><tr><td><a href="../api_cxx/env_open.html">DbEnv::open</a></td><td>Open an environment</td></tr>
<!--DbEnv::remove--><tr><td><a href="../api_cxx/env_remove.html">DbEnv::remove</a></td><td>Remove an environment</td></tr>
<!--DbEnv::stat_print--><tr><td><a href="../api_cxx/env_stat.html">DbEnv::stat_print</a></td><td>Environment statistics</td></tr>
@@ -35,16 +39,19 @@
<!--DbEnv::set_errfile--><tr><td><a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>, <a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a></td><td>Set error and informational message FILE</td></tr>
<!--DbEnv::set_error_stream--><tr><td><a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>, <a href="../api_cxx/env_set_msg_stream.html">DbEnv::set_message_stream</a></td><td>Set error and informational message output stream</td></tr>
<!--DbEnv::set_errpfx--><tr><td><a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a></td><td>Set error message prefix</td></tr>
+<!--DbEnv::set_event_notify--><tr><td><a href="../api_cxx/env_event_notify.html">DbEnv::set_event_notify</a></td><td>Set event notification callback</td></tr>
<!--DbEnv::set_feedback--><tr><td><a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a></td><td>Set feedback callback</td></tr>
<!--DbEnv::set_flags--><tr><td><a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a></td><td>Environment configuration</td></tr>
-<!--DbEnv::set_paniccall--><tr><td><a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a></td><td>Set panic callback</td></tr>
+<!--DbEnv::set_isalive--><tr><td><a href="../api_cxx/env_set_isalive.html">DbEnv::set_isalive</a></td><td>Set thread is-alive callback</td></tr>
<!--DbEnv::set_rpc_server--><tr><td><a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a></td><td>Establish an RPC server connection</td></tr>
<!--DbEnv::set_shm_key--><tr><td><a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
-<!--DbEnv::set_tas_spins--><tr><td><a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
+<!--DbEnv::set_thread_id--><tr><td><a href="../api_cxx/env_set_thread_id.html">DbEnv::set_thread_id</a></td><td>Set thread of control ID function</td></tr>
+<!--DbEnv::set_thread_count--><tr><td><a href="../api_cxx/env_set_thread_count.html">DbEnv::set_thread_count</a></td><td>Set approximate thread count</td></tr>
+<!--DbEnv::set_thread_id_string--><tr><td><a href="../api_cxx/env_set_thread_id_string.html">DbEnv::set_thread_id_string</a></td><td>Set thread of control ID format function</td></tr>
<!--DbEnv::set_timeout--><tr><td><a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
<!--DbEnv::set_tmp_dir--><tr><td><a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
<!--DbEnv::set_verbose--><tr><td><a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a></td><td>Set verbose messages</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_lsn_reset.html b/db/docs/api_cxx/env_lsn_reset.html
new file mode 100644
index 000000000..edbfe38ca
--- /dev/null
+++ b/db/docs/api_cxx/env_lsn_reset.html
@@ -0,0 +1,82 @@
+<!--$Id: env_lsn_reset.so,v 1.4 2005/12/13 16:48:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::lsn_reset</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::lsn_reset</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::lsn_reset(const char *file, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::lsn_reset</h3>
+<p>The DbEnv::lsn_reset method allows database files to be moved from one
+transactional database environment to another.</p>
+<p>Database pages in transactional database environments contain references
+to the environment's log files (that is, log sequence numbers, or LSNs).
+Copying or moving a database file from one database environment to
+another, and then modifying it, can result in data corruption if the
+LSNs are not first cleared.</p>
+<p>Note that LSNs should be reset before moving or copying the database
+file into a new database environment, rather than moving or copying the
+database file and then resetting the LSNs. Berkeley DB has consistency checks
+that may be triggered if an application calls DbEnv::lsn_reset
+on a database in a new environment when the database LSNs still reflect
+the old environment.</p>
+<p>The DbEnv::lsn_reset method modifies the physical file, in-place.
+Applications should not reset LSNs in files that are currently in use.</p>
+<p>The DbEnv::lsn_reset method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::lsn_reset method
+either 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>
+<dl compact>
+<dt><b>file</b><dd>The name of the physical file in which the LSNs are to be cleared.
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt>DB_ENCRYPT<dd>The file contains encrypted databases.
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lsn_reset 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e63f2ce13..4958414b7 100644
--- a/db/docs/api_cxx/env_open.html
+++ b/db/docs/api_cxx/env_open.html
@@ -1,5 +1,5 @@
-<!--$Id: env_open.so,v 10.98 2004/10/14 15:07:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_open.so,v 10.111 2006/08/02 17:39:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,7 +40,7 @@ or more of the features of Berkeley DB.</p>
either 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
+If DbEnv::open fails, the <a href="../api_cxx/env_close.html">DbEnv::close</a> method must be called
to discard the <a href="../api_cxx/env_class.html">DbEnv</a> handle.
</p>
<h3>Parameters</h3>
@@ -51,8 +51,9 @@ 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>On Windows, the <b>db_home</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>db_home</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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.
@@ -60,11 +61,20 @@ The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'
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>
+indicates which of the Berkeley DB subsystems should be initialized.</p>
+<p>The choice of subsystems initialized for a Berkeley DB database environment
+is specified by the thread of control initially creating the
+environment. Any subsequent thread of control joining the environment
+will automatically be configured to use the same subsystems as were
+created in the environment (unless the thread of control requests a
+subsystem not available in the environment, which will fail).
+Applications joining an environment, able to adapt to whatever
+subsystems have been configured in the environment, should open the
+environment without specifying any subsystem flags. Applications
+joining an environment, requiring specific subsystems from their
+environments, should open the environment specifying those specific
+subsystem flags.</p>
<dl compact>
-<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
-the environment supports.
<dt><a name="DB_INIT_CDB">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
@@ -96,11 +106,14 @@ DB_INIT_TXN flag implies the DB_INIT_LOG flag.
the environment is initialized:</p>
<dl compact>
<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.
+use. If this flag is set, the DB_CREATE and DB_INIT_TXN
+flags must also be set, because the regions will be removed and
+re-created, and transactions are required for application recovery.
<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.
+normal use. If this flag is set, the DB_CREATE and
+DB_INIT_TXN flags must also be set, because the regions will be
+removed and re-created, and transactions are required for application
+recovery.
</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
@@ -146,27 +159,45 @@ example, users with a user-ID of 0 on UNIX systems).
<dt><a name="DB_CREATE">DB_CREATE</a><dd>Cause Berkeley DB subsystems to create any underlying files, as necessary.
<dt><a name="DB_LOCKDOWN">DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory-mapped databases into
memory.
-<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 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.
+<dt><a name="DB_PRIVATE">DB_PRIVATE</a><dd>Allocate region memory from the heap instead of from memory backed by
+the filesystem or system shared memory.
+<p>This flag implies 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 accessible to more than a single process. Second, mutexes are only
+configured to work between threads.</p>
<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 DB_PRIVATE flag should not be
-specified.</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.
+application and Berkeley DB utilities (for example, <a href="../utility/db_archive.html">db_archive</a>,
+<a href="../utility/db_checkpoint.html">db_checkpoint</a> or <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>See <a href="../ref/env/region.html">Shared Memory Regions</a> for more
+information.</p>
+<dt><a name="DB_REGISTER">DB_REGISTER</a><dd>Check to see if recovery needs to be performed before opening the
+database environment. (For this check to be accurate, all processes
+using the environment must specify DB_REGISTER when opening the
+environment.) If recovery needs to be performed for any reason
+(including the initial use of the DB_REGISTER flag), and
+DB_RECOVER is also specified, recovery will be performed and the
+open will proceed normally. If recovery needs to be performed and
+DB_RECOVER is not specified, <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> will be
+returned. If recovery does not need to be performed, the
+DB_RECOVER flag will be ignored. See
+<a href="../ref/transapp/app.html">Architecting Transactional Data Store
+applications</a> for more information.
+<dt><a name="DB_SYSTEM_MEM">DB_SYSTEM_MEM</a><dd>Allocate region memory from system shared memory instead of from heap
+memory or memory backed by the filesystem.
+<p>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/env_class.html">DbEnv</a> handle returned by DbEnv::open to be
<i>free-threaded</i>; that is, concurrently usable by multiple
threads in the address space. The DB_THREAD flag should be specified
-if the <a href="../api_cxx/env_class.html">DbEnv</a> handle will be concurrently used by multiple
-threads of control or if multiple DB handles, opened within the database
-environment, will be used concurrently.
+if the <a href="../api_cxx/env_class.html">DbEnv</a> handle will be concurrently used by more than one
+thread in the process, or if any <a href="../api_cxx/db_class.html">Db</a> handles opened in the scope
+of the <a href="../api_cxx/env_class.html">DbEnv</a> handle will be concurrently used by more than one
+thread in the process.
</dl>
<dt><b>mode</b><dd>On Windows systems, the mode parameter is ignored.
<p>On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, files created by Berkeley DB
@@ -187,6 +218,10 @@ may fail and throw
encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<dl compact>
+<dt>DB_RUNRECOVERY<dd>The DB_REGISTER flag was specified, a failure has occurred, and no
+recovery flag was specified.
+</dl>
+<dl compact>
<dt>DB_VERSION_MISMATCH<dd>The version of the Berkeley DB library doesn't match the version that created
the database environment.
</dl>
@@ -201,8 +236,12 @@ An incorrectly formatted <b>NAME VALUE</b> entry or line was found; or if an
invalid flag value or parameter was specified.
</dl>
<dl compact>
-<dt>ENOSPC<dd>HP-UX only: a previously created Berkeley DB environment for this process still
-exists.
+<dt>ENOSPC<dd>HP-UX only:
+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; that is, calls to DbEnv::open will fail if the
+specified Berkeley DB environment has been opened and not subsequently closed.
</dl>
<dl compact>
<dt>ENOENT<dd>The file or directory does not exist.
@@ -236,6 +275,6 @@ open method flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7bd166158..ea4474377 100644
--- a/db/docs/api_cxx/env_remove.html
+++ b/db/docs/api_cxx/env_remove.html
@@ -1,5 +1,5 @@
<!--$Id: env_remove.so,v 10.44 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -74,8 +74,9 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>db_home</b><dd>The <b>db_home</b> parameter names the database environment to be removed.
-<p>On Windows, the <b>db_home</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>db_home</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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:
<dl compact>
@@ -119,6 +120,6 @@ the following non-zero errors:</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7a288892c..0fc20ffcc 100644
--- a/db/docs/api_cxx/env_set_alloc.html
+++ b/db/docs/api_cxx/env_set_alloc.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_alloc.so,v 1.22 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -99,6 +99,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8e5cfc1d9..6d643330e 100644
--- a/db/docs/api_cxx/env_set_app_dispatch.html
+++ b/db/docs/api_cxx/env_set_app_dispatch.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_app_dispatch.so,v 10.54 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -100,6 +100,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 07f2881cd..74692e0a6 100644
--- a/db/docs/api_cxx/env_set_cachesize.html
+++ b/db/docs/api_cxx/env_set_cachesize.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_cachesize.so,v 10.49 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_cachesize.so,v 10.50 2005/01/10 07:18:43 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,21 +38,22 @@ 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^18 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
+used as specified. The maximum size of a single cache is 4GB on 32-bit
+systems and 10TB on 64-bit systems. (All sizes are in powers-of-two,
+that is, 256KB is 2^18 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 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 configured 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.
@@ -105,11 +106,11 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>bytesp</b><dd>The <b>bytesp</b> parameter references memory into which
- the additional bytes of memory in the cache is copied.
+ the additional bytes of memory in the cache is copied.
<dt><b>gbytesp</b><dd>The <b>gbytesp</b> parameter references memory into which
- the gigabytes of memory in the cache is copied.
+ the gigabytes of memory in the cache is copied.
<dt><b>ncachep</b><dd>The <b>ncachep</b> parameter references memory into which
- the number of caches is copied.
+ the number of caches is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -120,6 +121,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 adb0d7434..11823c1dc 100644
--- a/db/docs/api_cxx/env_set_data_dir.html
+++ b/db/docs/api_cxx/env_set_data_dir.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_data_dir.so,v 10.28 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,10 +41,10 @@ path specified.</p>
either by absolute paths or relative to the environment home directory.
See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more
information.</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>The database environment's data directories may also be configured 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::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
@@ -64,8 +64,9 @@ failure, and returns 0 on success.
<dl compact>
<dt><b>dir</b><dd>The <b>dir</b> parameter is a directory to be used as a location for
database files.
-<p>On Windows, the <b>dir</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>dir</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DbEnv::set_data_dir method
@@ -101,6 +102,6 @@ NULL-terminated array of directories in <b>dirpp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 34d0d0581..05f5be827 100644
--- a/db/docs/api_cxx/env_set_encrypt.html
+++ b/db/docs/api_cxx/env_set_encrypt.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_encrypt.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -97,6 +97,6 @@ encryption flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2d415529c..a1bf2730a 100644
--- a/db/docs/api_cxx/env_set_errcall.html
+++ b/db/docs/api_cxx/env_set_errcall.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_errcall.so,v 10.37 2004/10/12 20:00:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errcall.so,v 10.39 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,6 +47,9 @@ 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>
+<p>The DbEnv::set_errcall 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_errcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -59,6 +62,10 @@ reporting function. The function takes three parameters:
<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>).
<dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -69,6 +76,6 @@ reporting function. The function takes three parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bfbd66706..46370d6d3 100644
--- a/db/docs/api_cxx/env_set_errfile.html
+++ b/db/docs/api_cxx/env_set_errfile.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_errfile.so,v 10.34 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errfile.so,v 10.36 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,9 @@ 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>
+<p>The DbEnv::set_errfile 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_errfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -62,9 +65,19 @@ 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 .</p>
+<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>
+<dl compact>
+<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/env_class.html">DbEnv</a>
@@ -74,6 +87,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 55c7785b1..85f0b1733 100644
--- a/db/docs/api_cxx/env_set_error_stream.html
+++ b/db/docs/api_cxx/env_set_error_stream.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_error_stream.so,v 10.29 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_error_stream.so,v 10.30 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,6 +50,11 @@ 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::set_error_stream 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_error_stream method may be called at any time during the life of the
+application.</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>stream</b><dd>The <b>stream</b> parameter is the application-specified output stream to
@@ -64,6 +69,6 @@ be used for additional error information.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 19e9f7254..952f72a9c 100644
--- a/db/docs/api_cxx/env_set_errpfx.html
+++ b/db/docs/api_cxx/env_set_errpfx.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_errpfx.so,v 10.33 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errpfx.so,v 10.34 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,9 @@ 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 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_errpfx method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -68,6 +71,6 @@ error prefix in <b>errpfxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fa611afd8..02f0f6d0d 100644
--- a/db/docs/api_cxx/env_set_feedback.html
+++ b/db/docs/api_cxx/env_set_feedback.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_feedback.so,v 10.42 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_feedback.so,v 10.43 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,8 +23,7 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_feedback(
- void (*db_feedback_fcn)(DbEnv *dbenv, int opcode, int percent));
+DbEnv::set_feedback(void (*db_feedback_fcn)(DbEnv *dbenv, int opcode, int percent));
</pre></h3>
<hr size=1 noshade>
<h3>Description: DbEnv::set_feedback</h3>
@@ -60,6 +59,10 @@ parameter may take on any of the following values:
<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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -70,6 +73,6 @@ been completed, specified as an integer value between 0 and 100.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5e18829bf..ffe93f00a 100644
--- a/db/docs/api_cxx/env_set_flags.html
+++ b/db/docs/api_cxx/env_set_flags.html
@@ -1,5 +1,5 @@
<!--$Id-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,10 +31,10 @@ DbEnv::get_flags(u_int32_t *flagsp)
<hr size=1 noshade>
<h3>Description: DbEnv::set_flags</h3>
<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 method flag parameter as a string; for example, "set_flags
+<p>The database environment's flag values may also be configured 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
@@ -49,11 +49,9 @@ failure, and returns 0 on success.
<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:
<dl compact>
-<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.
+<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>If set, <a href="../api_cxx/db_class.html">Db</a> handle operations for which no explicit transaction
+handle was specified, and which modify databases in the database
+environment, will be automatically enclosed within a transaction.
<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).
@@ -98,15 +96,37 @@ 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="5"><!--meow--></a>
+<dt><a name="DB_DSYNC_DB">DB_DSYNC_DB</a><dd>Configure Berkeley DB to flush database writes to the backing disk before
+returning from the write system call, rather than flushing database
+writes explicitly in a separate system call, as necessary. This is only
+available on some systems (for example, systems supporting the
+IEEE/ANSI Std 1003.1 (POSIX) standard O_DSYNC flag, or systems supporting the Windows
+FILE_FLAG_WRITE_THROUGH flag). This flag may result in inaccurate file
+modification times and other file-level information for Berkeley DB database
+files. This flag will almost certainly result in a performance decrease
+on most systems. This flag is only applicable to certain filesysystem
+(for example, the Veritas VxFS filesystem), where the filesystem's
+support for trickling writes back to stable storage behaves badly (or
+more likely, has been misconfigured).
+<p>Calling DbEnv::set_flags with the DB_DSYNC_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_DSYNC_DB flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_DSYNC_DB flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="6"><!--meow--></a>
<dt><a name="DB_DSYNC_LOG">DB_DSYNC_LOG</a><dd>Configure Berkeley DB to flush log writes to the backing disk before returning
from the write system call, rather than flushing log writes explicitly
-in a separate system call. This is only available on some systems (for
-example, systems supporting the IEEE/ANSI Std 1003.1 (POSIX) standard O_DSYNC flag,
-or systems supporting the Win32 FILE_FLAG_WRITE_THROUGH flag). This
-configuration may result in inaccurate file modification times and other
-file-level information for Berkeley DB log files. This configuration may
-offer a performance increase on some systems and a performance decrease
-on others.
+in a separate system call, as necessary. This is only available on some
+systems (for example, systems supporting the IEEE/ANSI Std 1003.1 (POSIX) standard
+O_DSYNC flag, or systems supporting the Windows FILE_FLAG_WRITE_THROUGH
+flag). This flag may result in inaccurate file modification times and
+other file-level information for Berkeley DB log files. This flag may offer
+a performance increase on some systems and a performance decrease on
+others.
<p>Calling DbEnv::set_flags with the DB_DSYNC_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).
@@ -116,7 +136,7 @@ or the flag should be specified in the <b>DB_CONFIG</b> configuration
file.</p>
<p>The DB_DSYNC_LOG flag may be used to configure Berkeley DB at any time during
the life of the application.</p>
-<a name="6"><!--meow--></a>
+<a name="7"><!--meow--></a>
<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.
@@ -125,7 +145,7 @@ database environment, including all threads of control accessing the
database environment.</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="7"><!--meow--></a>
+<a name="8"><!--meow--></a>
<dt><a name="DB_LOG_INMEMORY">DB_LOG_INMEMORY</a><dd>If set, maintain transaction logs in memory rather than on disk. This
means that transactions exhibit the ACI (atomicity, consistency, and
isolation) properties, but not D (durability); that is, database
@@ -146,7 +166,7 @@ database environment, including all threads of control accessing the
database environment.</p>
<p>The DB_LOG_INMEMORY 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="8"><!--meow--></a>
+<a name="9"><!--meow--></a>
<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.
@@ -156,7 +176,20 @@ 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>
+<dt><a name="DB_MULTIVERSION">DB_MULTIVERSION</a><dd>If set, all databases in the environment will be opened as if
+DB_MULTIVERSION is passed to <a href="../api_cxx/db_open.html">Db::open</a>. This flag will
+be ignored for queue databases for which DB_MULTIVERSION is not
+supported.
+<p>Calling DbEnv::set_flags with the DB_MULTIVERSION 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_MULTIVERSION flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_MULTIVERSION flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="10"><!--meow--></a>
<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
@@ -170,7 +203,7 @@ 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>
+<a name="11"><!--meow--></a>
<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
@@ -193,7 +226,7 @@ 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>
+<a name="12"><!--meow--></a>
<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
@@ -205,7 +238,7 @@ 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>
+<a name="13"><!--meow--></a>
<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
@@ -239,7 +272,7 @@ 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>
+<a name="14"><!--meow--></a>
<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,
@@ -258,7 +291,20 @@ 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>
+<dt><a name="DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a><dd>If set, all transactions in the environment will be started as if
+DB_TXN_SNAPSHOT were passed to <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, and all
+non-transactional cursors will be opened as if DB_TXN_SNAPSHOT
+were passed to <a href="../api_cxx/db_cursor.html">Db::cursor</a>.
+<p>Calling DbEnv::set_flags with the DB_TXN_SNAPSHOT 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_SNAPSHOT flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_TXN_SNAPSHOT flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="15"><!--meow--></a>
<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,
@@ -277,7 +323,7 @@ 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="15"><!--meow--></a>
+<a name="16"><!--meow--></a>
<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.
@@ -328,6 +374,6 @@ configuration flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_isalive.html b/db/docs/api_cxx/env_set_isalive.html
new file mode 100644
index 000000000..b92e780c3
--- /dev/null
+++ b/db/docs/api_cxx/env_set_isalive.html
@@ -0,0 +1,86 @@
+<!--$Id: env_set_isalive.so,v 10.4 2006/01/27 16:13:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::set_isalive</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_isalive</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::set_isalive(int (*is_alive)(DbEnv *dbenv, pid_t pid, db_threadid_t tid, u_int32_t flags));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_isalive</h3>
+<p>Declare a function that returns if a thread of control (either a true
+thread or a process) is still running. The DbEnv::set_isalive method
+supports the <a href="../api_cxx/env_failchk.html">DbEnv::failchk</a> method. For more information, see
+<a href="../ref/cam/app.html">Architecting Data Store and Concurrent
+Data Store applications</a>, and <a href="../ref/transapp/app.html">Architecting Transactional Data Store applications</a>.</p>
+<p>The DbEnv::set_isalive 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_isalive method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_isalive method
+either 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>
+<dl compact>
+<dt><b>is_alive</b><dd>The <b>is_alive</b> parameter is a function which returns non-zero if
+the thread of control, identified by the <b>pid</b> and <b>tid</b>
+arguments, is still running. The function takes four arguments:
+<dl compact>
+<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment
+handle, allowing application access to the application-private fields
+of that object.
+<dt><b>pid</b><dd>The <b>pid</b> parameter is a process ID returned by the function
+specified to the <a href="../api_cxx/env_set_thread_id.html">DbEnv::set_thread_id</a> method.
+<dt><b>tid</b><dd>The <b>tid</b> parameter is a thread ID returned by the function
+specified to the <a href="../api_cxx/env_set_thread_id.html">DbEnv::set_thread_id</a> method.
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt><a name="DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a><dd>Return only if the process is alive, the thread ID should be ignored.
+</dl>
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_isalive 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 35a62a0ac..4354a787e 100644
--- a/db/docs/api_cxx/env_set_lg_bsize.html
+++ b/db/docs/api_cxx/env_set_lg_bsize.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_lg_bsize.so,v 10.35 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_bsize.so,v 10.36 2006/08/30 10:04:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,11 +32,12 @@ DbEnv::get_lg_bsize(u_int32_t *lg_bsizep);
<h3>Description: DbEnv::set_lg_bsize</h3>
<p>Set the size of the in-memory log buffer, in bytes.</p>
<p>When the logging subsystem is configured for on-disk logging, the
-default size of the in-memory log buffer is 32KB. 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>
+default size of the in-memory log buffer is approximately 32KB. 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>When the logging subsystem is configured for in-memory logging, the
default size of the in-memory log buffer is 1MB. Log information is
stored in-memory until the storage space fills up or transaction abort
@@ -49,10 +50,10 @@ should ensure the in-memory log buffer size is large enough that no
transaction will ever span the entire buffer, and avoid a state where
the in-memory buffer is full and no space can be freed because a
transaction that started in the first log "file" is still active.</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.
+<p>The database environment's log buffer size may also be configured 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>
@@ -108,6 +109,6 @@ size of the log buffer, in bytes in <b>lg_bsizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d3cb50830..d695f3192 100644
--- a/db/docs/api_cxx/env_set_lg_dir.html
+++ b/db/docs/api_cxx/env_set_lg_dir.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lg_dir.so,v 10.25 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,10 +38,10 @@ environment home directory. See <a href="../ref/env/naming.html">Berkeley DB F
<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.
+<p>The database environment's logging directory may also be configured 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>
@@ -62,8 +62,9 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>dir</b><dd>The <b>dir</b> parameter is the directory used to store the logging files.
-<p>On Windows, the <b>dir</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>dir</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DbEnv::set_lg_dir method
@@ -99,6 +100,6 @@ log directory in <b>dirp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b172b10dc..0025b4aaa 100644
--- a/db/docs/api_cxx/env_set_lg_max.html
+++ b/db/docs/api_cxx/env_set_lg_max.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lg_max.so,v 10.45 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,10 +49,10 @@ the in-memory buffer is full and no space can be freed because a
transaction that started in the first log "file" is still active.</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.
+<p>The database environment's log file size may also be configured 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>
@@ -109,6 +109,6 @@ maximum log file size in <b>lg_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lg_mode.html b/db/docs/api_cxx/env_set_lg_mode.html
new file mode 100644
index 000000000..6f8eec36b
--- /dev/null
+++ b/db/docs/api_cxx/env_set_lg_mode.html
@@ -0,0 +1,91 @@
+<!--$Id: env_set_lg_mode.so,v 1.1 2004/12/15 15:46:44 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::set_lg_filemode</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_lg_filemode</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::set_lg_filemode(int lg_mode);
+<p>
+int
+DbEnv::get_lg_filemode(int *);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lg_filemode</h3>
+<p>Set the absolute file mode for created log files. This method is
+<b>only</b> useful for the rare Berkeley DB application that does not
+control its umask value.</p>
+<p>Normally, if Berkeley DB applications set their umask appropriately, all
+processes in the application suite will have read permission on the log
+files created by any process in the application suite. However, if the
+Berkeley DB application is a library, a process using the library might set
+its umask to a value preventing other processes in the application suite
+from reading the log files it creates. In this rare case, the
+DbEnv::set_lg_filemode method can be used to set the mode of created
+log files to an absolute value.</p>
+<p>The database environment's log file mode may also be configured 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_filemode", one or more whitespace
+characters, and the absolute mode of created log files.
+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_lg_filemode 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_filemode method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_lg_filemode method
+either 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>
+<dl compact>
+<dt><b>lg_filemode</b><dd>The <b>lg_filemode</b> parameter is the absolute mode of the created
+log file.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lg_filemode</h3>
+<p>The DbEnv::set_lg_filemode method returns the log file mode.</p>
+<p>The DbEnv::set_lg_filemode method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_lg_filemode method
+either 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>
+<dl compact>
+<dt><b>lg_modep</b><dd>The DbEnv::set_lg_filemode method returns the
+log file mode in <b>lg_modep</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 eeb8d958d..3643ec74e 100644
--- a/db/docs/api_cxx/env_set_lg_regionmax.html
+++ b/db/docs/api_cxx/env_set_lg_regionmax.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_lg_regionmax.so,v 10.22 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_regionmax.so,v 10.23 2006/08/30 10:04:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,13 +32,14 @@ DbEnv::get_lg_regionmax(u_int32_t *lg_regionmaxp);
<h3>Description: DbEnv::set_lg_regionmax</h3>
<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>
-<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.
+approximately 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 configured 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>
@@ -94,6 +95,6 @@ size of the underlying logging subsystem region in <b>lg_regionmaxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3ce8babf1..35570cc96 100644
--- a/db/docs/api_cxx/env_set_lk_conflicts.html
+++ b/db/docs/api_cxx/env_set_lk_conflicts.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_conflicts.so,v 10.43 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -83,9 +83,9 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<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.
+a pointer to the current conflicts array is copied.
<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.
+ the size of the current conflicts array is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -96,6 +96,6 @@ a pointer to the current conflicts array is copied.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c8b896d95..fbde86a08 100644
--- a/db/docs/api_cxx/env_set_lk_detect.html
+++ b/db/docs/api_cxx/env_set_lk_detect.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_lk_detect.so,v 10.48 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_detect.so,v 10.50 2006/02/27 14:51:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,19 +35,18 @@ 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,
+<p>The database environment's deadlock detector configuration may also be configured 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::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>Although the DbEnv::set_lk_detect 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 DbEnv::set_lk_detect method may be called at any time during the life of the
+application.</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
@@ -79,7 +78,7 @@ may fail and throw
encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<dl compact>
-<dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+<dt>EINVAL<dd>An
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
@@ -106,6 +105,6 @@ deadlock detector configuration in <b>lk_detectp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 91ad31dc4..f4a06a486 100644
--- a/db/docs/api_cxx/env_set_lk_max_lockers.html
+++ b/db/docs/api_cxx/env_set_lk_max_lockers.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_max_lockers.so,v 1.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,10 +35,10 @@ environment. This value is used by <a href="../api_cxx/env_open.html">DbEnv::op
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.
+<p>The database environment's maximum number of lockers may also be configured 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>
@@ -94,6 +94,6 @@ maximum number of lockers in <b>lk_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8383ac004..e72170586 100644
--- a/db/docs/api_cxx/env_set_lk_max_locks.html
+++ b/db/docs/api_cxx/env_set_lk_max_locks.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_max_locks.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,10 +36,10 @@ 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.
+<p>The database environment's maximum number of locks may also be configured 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>
@@ -95,6 +95,6 @@ maximum number of locks in <b>lk_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 770aba038..17069d8df 100644
--- a/db/docs/api_cxx/env_set_lk_max_objects.html
+++ b/db/docs/api_cxx/env_set_lk_max_objects.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_lk_max_objects.so,v 1.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,10 +35,10 @@ environment. This value is used by <a href="../api_cxx/env_open.html">DbEnv::op
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.
+<p>The database environment's maximum number of objects may also be configured 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>
@@ -94,6 +94,6 @@ maximum number of locked objects in <b>lk_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cf23f7ef9..ac2577d2d 100644
--- a/db/docs/api_cxx/env_set_mp_mmapsize.html
+++ b/db/docs/api_cxx/env_set_mp_mmapsize.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_mp_mmapsize.so,v 10.40 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,10 +41,10 @@ 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.
+<p>The database environment's maximum mapped file size may also be configured 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>
@@ -96,6 +96,6 @@ maximum file map size in <b>mp_mmapsizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_msg_stream.html b/db/docs/api_cxx/env_set_msg_stream.html
index d9a193c27..cd5815394 100644
--- a/db/docs/api_cxx/env_set_msg_stream.html
+++ b/db/docs/api_cxx/env_set_msg_stream.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_msg_stream.so,v 10.4 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msg_stream.so,v 10.5 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,6 +41,11 @@ or the <a href="../api_cxx/env_set_msgcall.html">DbEnv::set_msgcall</a> and <a h
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>
+<p>The DbEnv::set_message_stream 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_message_stream method may be called at any time during the life of the
+application.</p>
<h3>Parameters</h3>
<dl compact>
<dt><b>stream</b><dd>The <b>stream</b> parameter is the application-specified output stream to
@@ -55,6 +60,6 @@ be used for additional message information.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_msgcall.html b/db/docs/api_cxx/env_set_msgcall.html
index 3c8bdf26c..4da39490b 100644
--- a/db/docs/api_cxx/env_set_msgcall.html
+++ b/db/docs/api_cxx/env_set_msgcall.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_msgcall.so,v 10.5 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgcall.so,v 10.7 2006/05/17 20:47:46 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,8 +22,7 @@
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-void DbEnv::set_msgcall(
- void (*db_msgcall_fcn)(const DbEnv *dbenv, const char *msg));
+void DbEnv::set_msgcall(void (*db_msgcall_fcn)(const DbEnv *dbenv, const char *msg));
</pre></h3>
<hr size=1 noshade>
<h3>Description: DbEnv::set_msgcall</h3>
@@ -41,6 +40,9 @@ manner.</p>
<a href="../api_cxx/db_set_msg_stream.html">Db::set_message_stream</a> methods to display the messages via an output
stream, or the <a href="../api_cxx/db_set_msgfile.html">Db::set_msgfile</a> or <a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> methods
to display the messages via a C library FILE *.</p>
+<p>The DbEnv::set_msgcall 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_msgcall method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -51,6 +53,10 @@ reporting function. The function takes two parameters:
<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment.
<dt><b>msg</b><dd>The <b>msg</b> parameter is the message string.
</dl>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -61,6 +67,6 @@ reporting function. The function takes two parameters:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_msgfile.html b/db/docs/api_cxx/env_set_msgfile.html
index 42cf5b20b..fdcc4a8a5 100644
--- a/db/docs/api_cxx/env_set_msgfile.html
+++ b/db/docs/api_cxx/env_set_msgfile.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_msgfile.so,v 10.5 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_msgfile.so,v 10.7 2006/02/10 22:54:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,6 +44,9 @@ stream, or the <a href="../api_cxx/env_set_msgcall.html">DbEnv::set_msgcall</a>
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>
+<p>The DbEnv::set_msgfile 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_msgfile method may be called at any time during the life of the
application.</p>
<h3>Parameters</h3>
@@ -53,9 +56,19 @@ displaying messages.
</dl>
<hr size=1 noshade>
<h3>Description: DbEnv::get_msgfile</h3>
-<p>The DbEnv::get_msgfile method returns the .</p>
+<p>The DbEnv::get_msgfile method returns the FILE *.</p>
<p>The DbEnv::get_msgfile method may be called at any time during the life of the
application.</p>
+<p>The DbEnv::get_msgfile method
+either 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>
+<dl compact>
+<dt><b>msgfilep</b><dd>The DbEnv::get_msgfile method returns the
+FILE * in <b>msgfilep</b>.
+</dl>
<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>
@@ -65,6 +78,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 64e812c3e..da69cd9bd 100644
--- a/db/docs/api_cxx/env_set_rpc_server.html
+++ b/db/docs/api_cxx/env_set_rpc_server.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_rpc_server.so,v 10.29 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -86,6 +86,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6cdb186f2..3245f6fd8 100644
--- a/db/docs/api_cxx/env_set_shm_key.html
+++ b/db/docs/api_cxx/env_set_shm_key.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_shm_key.so,v 10.28 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,10 +52,10 @@ 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.
+<p>The database environment's base segment ID may also be configured 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>
@@ -112,6 +112,6 @@ base segment ID in <b>shm_keyp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_thread_count.html b/db/docs/api_cxx/env_set_thread_count.html
new file mode 100644
index 000000000..39bd833e6
--- /dev/null
+++ b/db/docs/api_cxx/env_set_thread_count.html
@@ -0,0 +1,98 @@
+<!--$Id: env_set_thread_count.so,v 10.1 2006/05/26 20:14:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::set_thread_count</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_thread_count</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::set_thread_count(u_int32_t count);
+<p>
+int
+DbEnv::get_thread_count(u_int32_t *countp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_thread_count</h3>
+<p>Declare an approximate number of threads in the database environment.
+The DbEnv::set_thread_count method must be called prior to opening the
+database environment if the <a href="../api_cxx/env_failchk.html">DbEnv::failchk</a> method will be used. The
+DbEnv::set_thread_count method does not set the maximum number of
+threads but is used to determine memory sizing and the thread control
+block reclamation policy.</p>
+<p>The database environment's thread count may also be configured 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_thread_count", one or more whitespace
+characters, and the thread count.
+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_thread_count 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_thread_count 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_thread_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>
+<dl compact>
+<dt><b>count</b><dd>The <b>count</b> parameter is an approximate thread count for the
+database environment.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_thread_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>
+<dl compact>
+<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_thread_count</h3>
+<p>The DbEnv::get_thread_count method returns the thread count.</p>
+<p>The DbEnv::get_thread_count method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_thread_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>
+<dl compact>
+<dt><b>countp</b><dd>The DbEnv::get_thread_count method returns the
+thread count in <b>countp</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/env_set_thread_id.html b/db/docs/api_cxx/env_set_thread_id.html
new file mode 100644
index 000000000..54a0feb64
--- /dev/null
+++ b/db/docs/api_cxx/env_set_thread_id.html
@@ -0,0 +1,126 @@
+<!--$Id: env_set_thread_id.so,v 10.9 2006/08/24 16:32:23 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::set_thread_id</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_thread_id</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::set_thread_id(void (*thread_id)(DbEnv *dbenv, pid_t *pid, db_threadid_t *tid));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_thread_id</h3>
+<p>Declare a function that returns a unique identifier pair for the current
+thread of control. The DbEnv::set_thread_id method supports the
+<a href="../api_cxx/env_failchk.html">DbEnv::failchk</a> method. For more information, see
+<a href="../ref/cam/app.html">Architecting Data Store and Concurrent
+Data Store applications</a>, and <a href="../ref/transapp/app.html">Architecting Transactional Data Store applications</a>.</p>
+<p>The DbEnv::set_thread_id 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_thread_id method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_thread_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>
+<dl compact>
+<dt><b>thread_id</b><dd>The <b>thread_id</b> parameter is a function which returns a unique
+identifier pair for a thread of control in a Berkeley DB application. The
+function takes three arguments:
+<dl compact>
+<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment
+handle, allowing application access to the application-private fields
+of that object.
+<dt><b>pid</b><dd>The <b>pid</b> points to a memory location of type pid_t. The
+process ID of the current thread of control may be returned in
+this memory location.
+<dt><b>tid</b><dd>The <b>tid</b> points to a memory location of type db_threadid_t. The
+thread ID of the current thread of control may be returned in this
+memory location.
+</dl>
+</dl>
+<p>The standard system library calls to return process and thread IDs are
+often sufficient for this purpose (for example, getpid() and
+pthread_self() on POSIX systems or GetCurrentThreadID on Windows
+systems). However, if the Berkeley DB application dynamically creates
+processes or threads, some care may be necessary in assigning unique
+IDs. In most threading systems, process and thread IDs are available
+for re-use as soon as the process or thread exits. If a new process or
+thread is created between the time of process or thread exit, and the
+<a href="../api_cxx/env_failchk.html">DbEnv::failchk</a> method is run, it may be possible for
+<a href="../api_cxx/env_failchk.html">DbEnv::failchk</a> to not detect that a thread of control exited
+without properly releasing all Berkeley DB resources.</p>
+<p>It may be possible to handle this problem by inhibiting process or
+thread creation between thread of control exit and calling
+<a href="../api_cxx/env_failchk.html">DbEnv::failchk</a>. Alternatively, the <b>thread_id</b> function
+must be constructed to not re-use <b>pid</b>/<b>tid</b> pairs. For
+example, in a single process application, the returned process ID might
+be used as an incremental counter, with the returned thread ID set to
+the actual thread ID. Obviously, the <b>is_alive</b> function
+specified to the <a href="../api_cxx/env_set_isalive.html">DbEnv::set_isalive</a> method must be compatible with any
+<b>thread_id</b> function specified to DbEnv::set_thread_id.</p>
+<p>The db_threadid_t type is configured to be the same type as a standard
+thread identifier, in Berkeley DB configurations where this type is known (for
+example, systems supporting pthread_t or thread_t, or DWORD on Windows).
+If the Berkeley DB configuration process is unable to determine the type of a
+standard thread identifier, the db_thread_t type is set to uintmax_t (or
+the largest available unsigned integral type, on systems lacking the
+uintmax_t type). Applications running on systems lacking a detectable
+standard thread type, and which are also using thread APIs where a
+thread identifier is not an integral value and so will not fit into the
+configured db_threadid_t type, must either translate between the
+db_threadid_t type and the thread identifier (mapping the thread
+identifier to a unique identifier of the appropriate size), or modify
+the Berkeley DB sources to use an appropriate db_threadid_t type. Note: we
+do not currently know of any systems where this is necessary. If your
+application has to solve this problem, please contact our support group
+and let us know.</p>
+<p>If no <b>thread_id</b> function is specified by the application, the
+Berkeley DB library will identify threads of control by using the taskIdSelf()
+call on VxWorks, the getpid() and GetCurrentThreadID() calls on Windows,
+the getpid() and pthread_self() calls when the Berkeley DB library has been
+configured for POSIX pthreads or Solaris LWP threads, the getpid() and
+thr_self() calls when the Berkeley DB library has been configured for UI
+threads, and otherwise getpid().</p>
+<h3>Errors</h3>
+<p>The DbEnv::set_thread_id 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/env_set_thread_id_string.html b/db/docs/api_cxx/env_set_thread_id_string.html
new file mode 100644
index 000000000..87eb34c57
--- /dev/null
+++ b/db/docs/api_cxx/env_set_thread_id_string.html
@@ -0,0 +1,88 @@
+<!--$Id: env_set_thread_id_string.so,v 10.1 2005/10/20 17:16:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::set_thread_id_string</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_thread_id_string</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::set_thread_id(char *(*thread_id_string)(DbEnv *dbenv,
+ pid_t pid, db_threadid_t tid, char *buf));
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_thread_id_string</h3>
+<p>Declare a function that formats a process ID and thread ID identifier
+pair for display into a caller-supplied buffer. The function must
+return a reference to the caller-specified buffer. The
+DbEnv::set_thread_id_string method supports the
+<a href="../api_cxx/env_set_thread_id.html">DbEnv::set_thread_id</a> method.</p>
+<p>The DbEnv::set_thread_id_string 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_thread_id_string method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_thread_id_string method
+either 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>
+<dl compact>
+<dt><b>thread_id_string</b><dd>The <b>thread_id_string</b> parameter is a function which returns a
+buffer in which is an identifier pair formatted for display. The
+function takes four arguments:
+<dl compact>
+<dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment
+handle, allowing application access to the application-private fields
+of that object.
+<dt><b>pid</b><dd>The <b>pid</b> argument is a process ID.
+<dt><b>tid</b><dd>The <b>tid</b> argument is a thread ID.
+<dt><b>buf</b><dd><a name="2"><!--meow--></a>
+The <b>buf</b> argument is character array of at least
+DB_THREADID_STRLEN bytes in length, into which the identifier
+pair should be formatted.
+</dl>
+</dl>
+<p>If no <b>thread_id_string</b> function is specified, the default
+routine displays the identifier pair as "pid/tid", that is, the process
+ID represented as an unsigned integer value, a slash ('/') character,
+then the thread ID represented as an unsigned integer value.</p>
+<h3>Errors</h3>
+<p>The DbEnv::set_thread_id_string 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 096a6781f..7f42abccb 100644
--- a/db/docs/api_cxx/env_set_timeout.html
+++ b/db/docs/api_cxx/env_set_timeout.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_timeout.so,v 10.23 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_timeout.so,v 10.24 2005/05/20 15:07:45 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,8 +32,8 @@ DbEnv::get_timeout(db_timeout_t *timeoutp, u_int32_t flag);
<h3>Description: DbEnv::set_timeout</h3>
<p>The DbEnv::set_timeout 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
+<p>All 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
through the Lock subsystem interfaces. In the case of
DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of a
@@ -59,18 +59,18 @@ failure, and returns 0 on success.
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to one of the following values:
<dl compact>
<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.
+<p>The database environment's lock timeout value may also be configured 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>
<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.
+<p>The database environment's transaction timeout value may also be configured 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>
@@ -107,7 +107,7 @@ failure, and returns 0 on success.
<dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Return the timeout value for transactions in this database environment.
</dl>
<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.
+ the timeout value of the specified <b>flag</b> parameter is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -118,6 +118,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cacb15f7a..c6678fcba 100644
--- a/db/docs/api_cxx/env_set_tmp_dir.html
+++ b/db/docs/api_cxx/env_set_tmp_dir.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_tmp_dir.so,v 10.26 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,10 +55,10 @@ all temporary files.</p>
<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>
<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.
+<p>The database environment's temporary file directory may also be configured 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>
@@ -80,8 +80,9 @@ failure, and returns 0 on success.
<dl compact>
<dt><b>dir</b><dd>The <b>dir</b> parameter is the directory to be used to store temporary
files.
-<p>On Windows, the <b>dir</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>dir</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</p>
</dl>
<h3>Errors</h3>
<p>The DbEnv::set_tmp_dir method
@@ -117,6 +118,6 @@ database environment temporary file directory in <b>dirp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5448e8328..08c310f50 100644
--- a/db/docs/api_cxx/env_set_tx_max.html
+++ b/db/docs/api_cxx/env_set_tx_max.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_tx_max.so,v 10.45 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tx_max.so,v 10.47 2006/06/19 22:25:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,15 +34,19 @@ DbEnv::get_tx_max(u_int32_t *tx_maxp);
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>Transactions that update multiversion databases are not freed until the
+last page version that the transaction created is flushed from cache.
+This means that applications using multi-version concurrency control may
+need a transaction for each page in cache, in the extreme case.</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
+active transactions complete). If this interface is never called, the
+database environment is configured to support at least 100 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.
+<p>The database environment's number of active transactions may also be configured 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>
@@ -99,6 +103,6 @@ number of active transactions in <b>tx_maxp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fd5ea85fd..790ab5c6c 100644
--- a/db/docs/api_cxx/env_set_tx_timestamp.html
+++ b/db/docs/api_cxx/env_set_tx_timestamp.html
@@ -1,5 +1,5 @@
<!--$Id: env_set_tx_timestamp.so,v 10.29 2004/09/28 15:04:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -89,6 +89,6 @@ recovery timestamp in <b>timestampp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e4f2c48ad..54f303b35 100644
--- a/db/docs/api_cxx/env_set_verbose.html
+++ b/db/docs/api_cxx/env_set_verbose.html
@@ -1,5 +1,5 @@
-<!--$Id: env_set_verbose.so,v 10.48 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_verbose.so,v 10.52 2005/12/28 16:10:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,11 +34,11 @@ DbEnv::get_verbose(u_int32_t which, int *onoffp);
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,
+<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method.</p>
+<p>The database environment's messages may also be configured 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_RECOVERY".
Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
@@ -61,8 +61,10 @@ messages are output.
<dl compact>
<dt><a name="DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a><dd>Display additional information when doing deadlock detection.
<dt><a name="DB_VERB_RECOVERY">DB_VERB_RECOVERY</a><dd>Display additional information when performing recovery.
+<dt><a name="DB_VERB_REGISTER">DB_VERB_REGISTER</a><dd>Display additional information concerning support for the
+<a href="../api_cxx/env_open.html#DB_REGISTER">DB_REGISTER</a> flag to the <a href="../api_cxx/env_open.html">DbEnv::open</a> method.
<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
+<p>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>
@@ -80,12 +82,12 @@ the following non-zero errors:</p>
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>
+<h3>Description: <a href="../api_cxx/env_set_verbose.html">DbEnv::get_verbose</a></h3>
+<p>The <a href="../api_cxx/env_set_verbose.html">DbEnv::get_verbose</a> 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
+<p>The <a href="../api_cxx/env_set_verbose.html">DbEnv::get_verbose</a> method may be called at any time during the life of the
application.</p>
-<p>The DbEnv::get_verbose method
+<p>The <a href="../api_cxx/env_set_verbose.html">DbEnv::get_verbose</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.
@@ -95,7 +97,8 @@ failure, and returns 0 on success.
<dt><b>which</b><dd>The <b>which</b> parameter is the message value for which configuration
is being checked.
<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.
+ the configuration of the specified <b>which</b> parameter is copied. If the returned <b>onoff</b> value is zero, the parameter is off;
+otherwise on.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -106,6 +109,6 @@ is being checked.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_stat.html b/db/docs/api_cxx/env_stat.html
index a56f98d74..34583a0ad 100644
--- a/db/docs/api_cxx/env_stat.html
+++ b/db/docs/api_cxx/env_stat.html
@@ -1,5 +1,5 @@
<!--$Id: env_stat.so,v 10.5 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,7 +27,7 @@ DbEnv::stat_print(u_int32_t flags);
</pre></h3>
<hr size=1 noshade>
<h3>Description: DbEnv::stat_print</h3>
-<p>The DbEnv::stat_print method returns the
+<p>The DbEnv::stat_print method displays the
default statistical information.
The information is printed to a specified output channel (see the
<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or passed to an
@@ -42,14 +42,11 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
-</dl>
-In addition, the following flag may be set by
-bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
-<dl compact>
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
<dt><a name="DB_STAT_SUBSYSTEM">DB_STAT_SUBSYSTEM</a><dd>Display information for all configured subsystems.
</dl>
</dl>
@@ -62,6 +59,6 @@ bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7bd6bae1d..eb9cfea1d 100644
--- a/db/docs/api_cxx/env_strerror.html
+++ b/db/docs/api_cxx/env_strerror.html
@@ -1,5 +1,5 @@
<!--$Id: env_strerror.so,v 8.13 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,6 +50,6 @@ string is wanted.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f69707718..8e867a5d5 100644
--- a/db/docs/api_cxx/env_version.html
+++ b/db/docs/api_cxx/env_version.html
@@ -1,5 +1,5 @@
<!--$Id: env_version.so,v 10.26 2004/09/28 15:04:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,6 +47,6 @@ is copied to the memory to which it refers.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/exc_package.html b/db/docs/api_cxx/exc_package.html
index 2ff788b56..4861a717c 100644
--- a/db/docs/api_cxx/exc_package.html
+++ b/db/docs/api_cxx/exc_package.html
@@ -1,5 +1,5 @@
<!--$Id: exc_package.so,v 10.1 2004/08/27 13:49:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,6 +18,6 @@
<tr><td><a href="../api_cxx/memp_class.html">DbMemoryException</a></td><td>Exception Class for insufficient memory</td></tr>
<tr><td><a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a></td><td>Exception Class for failures requiring recovery</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b11a931dd..756595b57 100644
--- a/db/docs/api_cxx/except_class.html
+++ b/db/docs/api_cxx/except_class.html
@@ -1,5 +1,5 @@
<!--$Id: except_class.so,v 10.38 2004/09/28 15:04:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -60,6 +60,6 @@ not appear in the database.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/frame.html b/db/docs/api_cxx/frame.html
index dd70c69b3..3f1a25891 100644
--- a/db/docs/api_cxx/frame.html
+++ b/db/docs/api_cxx/frame.html
@@ -1,8 +1,8 @@
-<!--$Id: frame.so,v 10.7 2004/11/08 18:07:47 bostic Exp $-->
+<!--$Id: frame.so,v 10.8 2005/04/19 17:44:03 bostic Exp $-->
<html>
<head>
<title>
-Berkeley DB API (Version: 4.3.27)
+Berkeley DB API (Version: 4.5.20)
</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
@@ -12,7 +12,7 @@ Berkeley DB API (Version: 4.3.27)
<frame
src="api_core.html"
name="method" title=
-"Berkeley DB API (Version: 4.3.27)">
+"Berkeley DB API (Version: 4.5.20)">
<noframes>
<meta http-equiv="refresh" content="0;url=api_index.html">
</noframes>
diff --git a/db/docs/api_cxx/lock_class.html b/db/docs/api_cxx/lock_class.html
index 821c89965..37abbbbde 100644
--- a/db/docs/api_cxx/lock_class.html
+++ b/db/docs/api_cxx/lock_class.html
@@ -1,5 +1,5 @@
<!--$Id: lock_class.so,v 10.21 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,6 +44,6 @@ for a single lock, and has no methods of its own.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a40a7b2d2..b1b945d97 100644
--- a/db/docs/api_cxx/lock_detect.html
+++ b/db/docs/api_cxx/lock_detect.html
@@ -1,5 +1,5 @@
<!--$Id: lock_detect.so,v 10.49 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -77,6 +77,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 12885c5cc..ff6c2f16f 100644
--- a/db/docs/api_cxx/lock_get.html
+++ b/db/docs/api_cxx/lock_get.html
@@ -1,5 +1,5 @@
<!--$Id: lock_get.so,v 10.53 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -101,6 +101,6 @@ throw a DbMemoryException.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2353ed97c..67510468e 100644
--- a/db/docs/api_cxx/lock_id.html
+++ b/db/docs/api_cxx/lock_id.html
@@ -1,5 +1,5 @@
<!--$Id: lock_id.so,v 10.33 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,7 +40,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>idp</b><dd>The <b>idp</b> parameter references memory into which
- the allocated locker ID is copied.
+ the allocated locker ID is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -51,6 +51,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 149da764f..2910fc160 100644
--- a/db/docs/api_cxx/lock_id_free.html
+++ b/db/docs/api_cxx/lock_id_free.html
@@ -1,5 +1,5 @@
<!--$Id: lock_id_free.so,v 10.14 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,6 +57,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ff01d8a69..a0720601f 100644
--- a/db/docs/api_cxx/lock_list.html
+++ b/db/docs/api_cxx/lock_list.html
@@ -1,5 +1,5 @@
<!--$Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Locking Subsystem and Related Methods</h3>
-<!--$Id: m4.methods,v 1.5 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2006/08/08 05:15:56 mjc Exp $-->
<table border=1 align=center>
<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbDeadlockException--><tr><td><a href="../api_cxx/deadlock_class.html">DbDeadlockException</a></td><td>Deadlock exception</td></tr>
@@ -21,6 +21,7 @@
<!--DbEnv::lock_put--><tr><td><a href="../api_cxx/lock_put.html">DbEnv::lock_put</a></td><td>Release a lock</td></tr>
<!--DbEnv::lock_stat--><tr><td><a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
<!--DbEnv::lock_vec--><tr><td><a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a></td><td>Acquire/release locks</td></tr>
+<!--DbEnv::cdsgroup_begin--><tr><td><a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a></td><td>Get a locker ID in Berkeley DB Concurrent Data Store</td></tr>
<!--DbLockNotGrantedException--><tr><td><a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a></td><td>Lock-not-granted exception</td></tr>
<!--DbLock--><tr><td><a href="../api_cxx/lock_class.html">DbLock</a></td><td>Lock object</td></tr>
<tr><th>Locking Subsystem Configuration</th><th><br></th></tr>
@@ -31,6 +32,6 @@
<!--DbEnv::set_lk_max_objects--><tr><td><a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
<!--DbEnv::set_timeout--><tr><td><a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 37e714b49..9a6412019 100644
--- a/db/docs/api_cxx/lock_put.html
+++ b/db/docs/api_cxx/lock_put.html
@@ -1,5 +1,5 @@
<!--$Id: lock_put.so,v 10.37 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -56,6 +56,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 920011aa5..de730af45 100644
--- a/db/docs/api_cxx/lock_stat.html
+++ b/db/docs/api_cxx/lock_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: lock_stat.so,v 10.62 2004/09/17 17:13:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: lock_stat.so,v 10.65 2005/07/20 16:26:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,9 +57,12 @@ individually freed.</p>
<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 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_nupgrade;<dd>The total number of locks upgraded.
+<dt>u_int32_t st_ndowngrade;<dd>The total number of locks downgraded.
+<dt>u_int32_t st_lock_wait;<dd>The number of lock requests not immediately available due to conflicts,
+for which the thread of control waited.
+<dt>u_int32_t st_lock_nowait;<dd>The number of lock requests not immediately available due to conflicts,
+for which the thread of control did not wait.
<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.
@@ -69,9 +72,9 @@ component of <b>st_ndeadlocks</b>, the total number of deadlocks
detected.
<dt>roff_t st_regsize;<dd>The size of the lock region, in bytes.
<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.
+obtaining the lock region mutex.
<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.
+the lock region mutex without waiting.
</dl>
<p>The DbEnv::lock_stat method
either returns a non-zero error value
@@ -86,7 +89,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DbEnv::lock_stat method
@@ -130,6 +133,6 @@ of the following values:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d90a144c5..746587ff5 100644
--- a/db/docs/api_cxx/lock_vec.html
+++ b/db/docs/api_cxx/lock_vec.html
@@ -1,5 +1,5 @@
<!--$Id: lock_vec.so,v 10.69 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -163,6 +163,6 @@ throw a DbMemoryException.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 603f5ed6f..8fc73e26f 100644
--- a/db/docs/api_cxx/lockng_class.html
+++ b/db/docs/api_cxx/lockng_class.html
@@ -1,5 +1,5 @@
<!--$Id: lockng_class.so,v 1.14 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -70,6 +70,6 @@ called, and returns the index of the failed DB_LOCKREQ when
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5b229b551..8ce3120b3 100644
--- a/db/docs/api_cxx/log_archive.html
+++ b/db/docs/api_cxx/log_archive.html
@@ -1,5 +1,5 @@
<!--$Id: log_archive.so,v 10.49 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -110,6 +110,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 216f1909d..5b0ef3ab5 100644
--- a/db/docs/api_cxx/log_compare.html
+++ b/db/docs/api_cxx/log_compare.html
@@ -1,5 +1,5 @@
<!--$Id: log_compare.so,v 10.22 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ to be compared.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e18d90c9b..205e81a0b 100644
--- a/db/docs/api_cxx/log_cursor.html
+++ b/db/docs/api_cxx/log_cursor.html
@@ -1,5 +1,5 @@
<!--$Id: log_cursor.so,v 10.12 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,7 +36,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>cursorp</b><dd>The <b>cursorp</b> parameter references memory into which
-a pointer to the created log cursor is copied.
+a pointer to the created log cursor is copied.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
<h3>Errors</h3>
@@ -58,6 +58,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 557c9f6e1..ab48e1c80 100644
--- a/db/docs/api_cxx/log_file.html
+++ b/db/docs/api_cxx/log_file.html
@@ -1,5 +1,5 @@
<!--$Id: log_file.so,v 10.34 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,7 +49,7 @@ failure, and returns 0 on success.
<a href="../api_cxx/lsn_class.html">DbLsn</a> object
for which a filename is wanted.
<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.
+ the name of the file containing the record named by <b>lsn</b> is copied.
<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,
@@ -74,6 +74,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6df36b365..9e3717f37 100644
--- a/db/docs/api_cxx/log_flush.html
+++ b/db/docs/api_cxx/log_flush.html
@@ -1,5 +1,5 @@
<!--$Id: log_flush.so,v 10.31 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 20c54ad5d..1804953c1 100644
--- a/db/docs/api_cxx/log_list.html
+++ b/db/docs/api_cxx/log_list.html
@@ -1,5 +1,5 @@
<!--$Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Logging Subsystem and Related Methods</h3>
-<!--$Id: m4.methods,v 1.4 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2005/09/30 19:00:24 bostic Exp $-->
<table border=1 align=center>
<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbLsn--><tr><td><a href="../api_cxx/lsn_class.html">DbLsn</a></td><td>Log Sequence Numbers</td></tr>
@@ -18,6 +18,7 @@
<!--DbEnv::log_archive--><tr><td><a href="../api_cxx/log_archive.html">DbEnv::log_archive</a></td><td>List log and database files</td></tr>
<!--DbEnv::log_file--><tr><td><a href="../api_cxx/log_file.html">DbEnv::log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
<!--DbEnv::log_flush--><tr><td><a href="../api_cxx/log_flush.html">DbEnv::log_flush</a></td><td>Flush log records</td></tr>
+<!--DbEnv::log_printf--><tr><td><a href="../api_cxx/log_printf.html">DbEnv::log_printf</a></td><td>Append informational message to the log</td></tr>
<!--DbEnv::log_put--><tr><td><a href="../api_cxx/log_put.html">DbEnv::log_put</a></td><td>Write a log record</td></tr>
<!--DbEnv::log_stat--><tr><td><a href="../api_cxx/log_stat.html">DbEnv::log_stat</a></td><td>Return log subsystem statistics</td></tr>
<tr><th>Logging Subsystem Cursors</th><th><br></th></tr>
@@ -28,9 +29,10 @@
<tr><th>Logging Subsystem Configuration</th><th><br></th></tr>
<!--DbEnv::set_lg_bsize--><tr><td><a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a></td><td>Set log buffer size</td></tr>
<!--DbEnv::set_lg_dir--><tr><td><a href="../api_cxx/env_set_lg_dir.html">DbEnv::set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
+<!--DbEnv::set_lg_filemode--><tr><td><a href="../api_cxx/env_set_lg_mode.html">DbEnv::set_lg_filemode</a></td><td>Set log file mode</td></tr>
<!--DbEnv::set_lg_max--><tr><td><a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a></td><td>Set log file size</td></tr>
<!--DbEnv::set_lg_regionmax--><tr><td><a href="../api_cxx/env_set_lg_regionmax.html">DbEnv::set_lg_regionmax</a></td><td>Set logging region size</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_printf.html b/db/docs/api_cxx/log_printf.html
new file mode 100644
index 000000000..f9333cd6b
--- /dev/null
+++ b/db/docs/api_cxx/log_printf.html
@@ -0,0 +1,73 @@
+<!--$Id: log_printf.so,v 1.1 2005/09/30 19:00:24 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::log_printf</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::log_printf</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::log_printf(DB_TXN *txnid, const char *fmt, ...);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_printf</h3>
+<p>The DbEnv::log_printf method appends an informational message to the Berkeley DB
+database environment log files.</p>
+<p>The DbEnv::log_printf method allows applications to include information in
+the database environment log files, for later review using the
+<a href="../utility/db_printlog.html">db_printlog</a> utility. This method is intended for debugging and
+performance tuning.</p>
+<p>The DbEnv::log_printf method
+either 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>
+<dl compact>
+<dt><b>txnid</b><dd>If the logged message refers to an application-specified transaction,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise NULL.
+<dt><b>fmt</b><dd>A format string that specifies how subsequent arguments (or arguments
+accessed via the variable-length argument facilities of stdarg(3)) are
+converted for output. The format string may contain any formatting
+directives supported by the underlying C library vsnprintf(3)
+function.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::log_printf 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>
+<dl compact>
+<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>
+<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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bf26c120d..737e2e6fb 100644
--- a/db/docs/api_cxx/log_put.html
+++ b/db/docs/api_cxx/log_put.html
@@ -1,5 +1,5 @@
<!--$Id: log_put.so,v 10.41 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,7 +53,7 @@ that all records with <a href="../api_cxx/lsn_class.html">DbLsn</a> values less
one being "put" are on disk before DbEnv::log_put returns.
</dl>
<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.
+ 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
@@ -74,6 +74,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 027dd2622..32d0cdab6 100644
--- a/db/docs/api_cxx/log_stat.html
+++ b/db/docs/api_cxx/log_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: log_stat.so,v 10.53 2004/09/17 17:13:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: log_stat.so,v 10.57 2005/10/28 19:45:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,7 +47,8 @@ individually freed.</p>
<dt>u_int32_t st_version;<dd>The version of the log file type.
<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_size;<dd>The current log file size.
+<dt>u_int32_t st_lg_size;<dd>The log file size.
+<dt>u_int32_t st_record;<dd>The number of records written to this log.
<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.
@@ -56,6 +57,7 @@ since the last checkpoint.
<dt>u_int32_t st_wcount;<dd>The number of times the log has been written to disk.
<dt>u_int32_t 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>u_int32_t st_rcount;<dd>The number of times the log has been read from disk.
<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.
@@ -64,11 +66,11 @@ in-memory log record cache filled up.
<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>roff_t st_regsize;<dd>The size of the region, in bytes.
+<dt>roff_t st_regsize;<dd>The size of the log region, in bytes.
<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.
+obtaining the log region mutex.
<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.
+the log region mutex without waiting.
</dl>
<p>The DbEnv::log_stat method
either returns a non-zero error value
@@ -83,7 +85,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DbEnv::log_stat method
@@ -97,7 +99,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DbEnv::log_stat_print</h3>
-<p>The DbEnv::log_stat_print method returns the
+<p>The DbEnv::log_stat_print method displays the
logging subsystem statistical information, as described for the DbEnv::log_stat method.
The information is printed to a specified output channel (see the
<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or passed to an
@@ -112,10 +114,11 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -127,6 +130,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bc6e7725f..e118ce2df 100644
--- a/db/docs/api_cxx/logc_class.html
+++ b/db/docs/api_cxx/logc_class.html
@@ -1,5 +1,5 @@
<!--$Id: logc_class.so,v 1.8 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ return.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 478bb47d9..51e871000 100644
--- a/db/docs/api_cxx/logc_close.html
+++ b/db/docs/api_cxx/logc_close.html
@@ -1,5 +1,5 @@
<!--$Id: logc_close.so,v 10.13 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cebb31795..ae4d6d836 100644
--- a/db/docs/api_cxx/logc_get.html
+++ b/db/docs/api_cxx/logc_get.html
@@ -1,5 +1,5 @@
<!--$Id: logc_get.so,v 10.48 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -107,6 +107,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c0e378615..93a0a00c3 100644
--- a/db/docs/api_cxx/lsn_class.html
+++ b/db/docs/api_cxx/lsn_class.html
@@ -1,5 +1,5 @@
<!--$Id: lsn_class.so,v 10.21 2004/08/13 03:38:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ the other specifies an offset in the log file.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cac910732..24183716a 100644
--- a/db/docs/api_cxx/memp_class.html
+++ b/db/docs/api_cxx/memp_class.html
@@ -1,5 +1,5 @@
<!--$Id: memp_class.so,v 10.20 2004/10/14 15:58:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -48,6 +48,6 @@ is still in scope and has not been deleted.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9062b6ef9..bd79adc89 100644
--- a/db/docs/api_cxx/memp_fclose.html
+++ b/db/docs/api_cxx/memp_fclose.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fclose.so,v 10.33 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9a6972648..0e0e34907 100644
--- a/db/docs/api_cxx/memp_fcreate.html
+++ b/db/docs/api_cxx/memp_fcreate.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fcreate.so,v 10.12 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6ee003a54..7d3e33458 100644
--- a/db/docs/api_cxx/memp_fget.html
+++ b/db/docs/api_cxx/memp_fget.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_fget.so,v 10.43 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fget.so,v 10.48 2006/09/13 14:30:54 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,7 +23,8 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbMpoolFile::get(db_pgno_t *pgnoaddr, u_int32_t flags, void **pagep);
+DbMpoolFile::get(db_pgno_t *pgnoaddr,
+ DbTxn *txnid, u_int32_t flags, void **pagep);
</pre></h3>
<hr size=1 noshade>
<h3>Description: DbMpoolFile::get</h3>
@@ -53,6 +54,15 @@ or more of the following values:
<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.
+<dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page will be modified and must be written to the source file before
+being evicted from the pool. For files open with the
+<a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> flag set, a new copy of the page will be made
+if this is the first time the specified transaction is modifying it.
+<dt><a name="DB_MPOOL_EDIT">DB_MPOOL_EDIT</a><dd>The page will be modified and must be written to the source file before
+being evicted from the pool. No copy of the page will be made, regardless
+of the <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> setting. This flag is only intended for
+use in situations where a transaction handle is not available, such as during
+aborts or recovery.
<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.
<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
@@ -63,7 +73,7 @@ location to which <b>pgnoaddr</b> refers. In this case, the
<p>The DB_MPOOL_CREATE, DB_MPOOL_LAST, and
DB_MPOOL_NEW flags are mutually exclusive.</p>
<dt><b>pagep</b><dd>The <b>pagep</b> parameter references memory into which
-a pointer to the returned page is copied.
+a pointer to the returned page is copied.
<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
@@ -71,6 +81,13 @@ 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>
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise NULL. A transaction is
+required if the file is open for multiversion concurrency control by
+passing <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> to <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> and the
+DB_MPOOL_DIRTY, DB_MPOOL_CREATE or
+DB_MPOOL_NEW flags were specified. Otherwise it is ignored.
</dl>
<h3>Errors</h3>
<p>The DbMpoolFile::get method
@@ -79,6 +96,10 @@ may fail and throw
encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<dl compact>
+<dt>EACCES<dd>The DB_MPOOL_DIRTY or DB_MPOOL_EDIT flag was set and
+the source file was not opened for writing.
+</dl>
+<dl compact>
<dt>EAGAIN<dd>The page reference count has overflowed. (This should never happen
unless there is a bug in the application.)
</dl>
@@ -86,9 +107,13 @@ unless there is a bug in the application.)
<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
+DB_MPOOL_NEW was set.; or if an
invalid flag value or parameter was specified.
</dl>
+<dl compact>
+<dt>DB_LOCK_DEADLOCK<dd>For transactions configured with <a href="../api_cxx/txn_begin.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a>, the page has
+been modified since the transaction began.
+</dl>
<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 DbMemoryException.</p>
@@ -101,6 +126,6 @@ throw a DbMemoryException.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 07cc22511..b10470969 100644
--- a/db/docs/api_cxx/memp_fopen.html
+++ b/db/docs/api_cxx/memp_fopen.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_fopen.so,v 10.51 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fopen.so,v 10.53 2006/08/08 05:24:05 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,8 +39,9 @@ failure, and returns 0 on success.
<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>On Windows, the <b>file</b> argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.</p>
+<p>When using a Unicode build on Windows (the default), the <b>file</b>
+argument will be interpreted as a UTF-8 string, which is equivalent to
+ASCII for Latin characters.</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:
<dl compact>
@@ -50,6 +51,8 @@ fail.
<a name="2"><!--meow--></a>
<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.
+<dt><a name="DB_MULTIVERSION">DB_MULTIVERSION</a><dd>Open the file with support for <a href="../ref/transapp/read.html">multiversion concurrency control</a>. Calls to <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a> which
+dirty pages will cause copies to be made in the cache.
<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).
@@ -101,6 +104,6 @@ throw a DbMemoryException.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e4051e506..4c3f9ae9f 100644
--- a/db/docs/api_cxx/memp_fput.html
+++ b/db/docs/api_cxx/memp_fput.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_fput.so,v 10.31 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fput.so,v 10.33 2006/09/11 23:31:27 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,14 +41,9 @@ address previously returned by <a href="../api_cxx/memp_fget.html">DbMpoolFile::
<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:
<dl compact>
-<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).
-<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.
<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>
</dl>
<h3>Errors</h3>
<p>The DbMpoolFile::put method
@@ -57,14 +52,8 @@ may fail and throw
encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<dl compact>
-<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>
-<dl compact>
<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
+<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>; or if an
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
@@ -76,6 +65,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 18b780d9f..4c1bc1033 100644
--- a/db/docs/api_cxx/memp_fset.html
+++ b/db/docs/api_cxx/memp_fset.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fset.so,v 10.30 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,14 +41,9 @@ address previously returned by <a href="../api_cxx/memp_fget.html">DbMpoolFile::
<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:
<dl compact>
-<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).
-<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.
<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>
</dl>
<h3>Errors</h3>
<p>The DbMpoolFile::set method
@@ -69,6 +64,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4685e2fea..c33dc840c 100644
--- a/db/docs/api_cxx/memp_fsync.html
+++ b/db/docs/api_cxx/memp_fsync.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fsync.so,v 10.35 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 211eec229..d300fad59 100644
--- a/db/docs/api_cxx/memp_list.html
+++ b/db/docs/api_cxx/memp_list.html
@@ -1,5 +1,5 @@
<!--$Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,19 +10,19 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Memory Pools and Related Methods</h3>
-<!--$Id: m4.methods,v 1.7 2004/11/03 15:52:02 bostic Exp $-->
+<!--$Id: m4.methods,v 1.9 2006/08/25 16:40:01 bostic Exp $-->
<table border=1 align=center>
<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
-<!--Db::mpf--><tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<!--Db::mpf--><tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return <a href="../api_cxx/db_class.html">Db</a>'s underlying <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle</td></tr>
<!--DbEnv::memp_stat--><tr><td><a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a></td><td>Return memory pool statistics</td></tr>
<!--DbEnv::memp_sync--><tr><td><a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a></td><td>Flush pages from a memory pool</td></tr>
<!--DbEnv::memp_trickle--><tr><td><a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
<!--DbMemoryException--><tr><td><a href="../api_cxx/memp_class.html">DbMemoryException</a></td><td>Insufficient memory exception</td></tr>
<tr><th>Memory Pool Configuration</th><th><br></th></tr>
<!--DbEnv::memp_register--><tr><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>
-<!--DbEnv::memp_set_max_openfd--><tr><td><a href="../api_cxx/memp_openfd.html">DbEnv::set_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
-<!--DbEnv::memp_set_max_write--><tr><td><a href="../api_cxx/memp_maxwrite.html">DbEnv::set_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_cachesize--><tr><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
+<!--DbEnv::set_mp_max_openfd--><tr><td><a href="../api_cxx/memp_openfd.html">DbEnv::set_mp_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
+<!--DbEnv::set_mp_max_write--><tr><td><a href="../api_cxx/memp_maxwrite.html">DbEnv::set_mp_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_mp_mmapsize--><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>
<tr><th>Memory Pool Files</th><th><br></th></tr>
<!--DbEnv::memp_fcreate--><tr><td><a href="../api_cxx/memp_fcreate.html">DbEnv::memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
@@ -43,6 +43,6 @@
<!--DbMpoolFile::set_pgcookie--><tr><td><a href="../api_cxx/memp_set_pgcookie.html">DbMpoolFile::set_pgcookie</a></td><td>Set file cookie for pgin/pgout</td></tr>
<!--DbMpoolFile::set_priority--><tr><td><a href="../api_cxx/memp_set_priority.html">DbMpoolFile::set_priority</a></td><td>Set memory pool file priority</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_maxwrite.html b/db/docs/api_cxx/memp_maxwrite.html
index 60364aa6d..0c54e094a 100644
--- a/db/docs/api_cxx/memp_maxwrite.html
+++ b/db/docs/api_cxx/memp_maxwrite.html
@@ -1,17 +1,17 @@
-<!--$Id: memp_maxwrite.so,v 10.2 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_maxwrite.so,v 10.4 2006/04/26 16:55:20 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DbEnv::set_max_write</title>
+<title>Berkeley DB: DbEnv::set_mp_max_write</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_max_write</h3>
+<h3>DbEnv::set_mp_max_write</h3>
</td>
<td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,17 +23,17 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::memp_set_max_write(int maxwrite, int maxwrite_sleep);
+DbEnv::set_mp_max_write(int maxwrite, int maxwrite_sleep);
<p>
int
-DbEnv::memp_get_max_write(int *maxwritep, int *maxwrite_sleepp);
+DbEnv::get_mp_max_write(int *maxwritep, int *maxwrite_sleepp);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DbEnv::set_max_write</h3>
-<p>The DbEnv::set_max_write method limits the number of sequential write
+<h3>Description: DbEnv::set_mp_max_write</h3>
+<p>The DbEnv::set_mp_max_write method limits the number of sequential write
operations scheduled by the library when flushing dirty pages from the
cache.</p>
-<p>The DbEnv::set_max_write method
+<p>The DbEnv::set_mp_max_write method
either returns a non-zero error value
or throws an exception that encapsulates a non-zero error value on
failure, and returns 0 on success.
@@ -41,12 +41,13 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>maxwrite</b><dd>The maximum number of sequential write operations scheduled by the
-library when flushing dirty pages from the cache.
+library when flushing dirty pages from the cache, or 0 if there is
+no limitation on the number of sequential write operations.
<dt><b>maxwrite_sleep</b><dd>The number of microseconds the thread of control should pause before
scheduling further write operations.
</dl>
<h3>Errors</h3>
-<p>The DbEnv::set_max_write method
+<p>The DbEnv::set_mp_max_write 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
@@ -56,12 +57,12 @@ the following non-zero errors:</p>
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
-<h3>Description: DbEnv::get_max_write</h3>
-<p>The DbEnv::get_max_write method returns the current maximum number of
+<h3>Description: DbEnv::get_mp_max_write</h3>
+<p>The DbEnv::get_mp_max_write method returns the current maximum number of
sequential write operations and microseconds to pause.</p>
-<p>The DbEnv::get_max_write method may be called at any time during the life of the
+<p>The DbEnv::get_mp_max_write method may be called at any time during the life of the
application.</p>
-<p>The DbEnv::get_max_write method
+<p>The DbEnv::get_mp_max_write method
either returns a non-zero error value
or throws an exception that encapsulates a non-zero error value on
failure, and returns 0 on success.
@@ -69,9 +70,9 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>maxwritep</b><dd>The <b>maxwritep</b> parameter references memory into which
- the maximum number of sequential write operations is copied.
+ the maximum number of sequential write operations is copied.
<dt><b>maxwrite_sleepp</b><dd>The <b>maxwrite_sleepp</b> parameter references memory into which
- the microseconds to pause before scheduling further write operations is copied.
+ the microseconds to pause before scheduling further write operations is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -82,6 +83,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_openfd.html b/db/docs/api_cxx/memp_openfd.html
index 9d81dc760..bc45eeb99 100644
--- a/db/docs/api_cxx/memp_openfd.html
+++ b/db/docs/api_cxx/memp_openfd.html
@@ -1,17 +1,17 @@
-<!--$Id: memp_openfd.so,v 10.2 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_openfd.so,v 10.3 2005/03/08 14:36:15 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DbEnv::set_max_openfd</title>
+<title>Berkeley DB: DbEnv::set_mp_max_openfd</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_max_openfd</h3>
+<h3>DbEnv::set_mp_max_openfd</h3>
</td>
<td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,17 +23,17 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::memp_set_max_openfd(int maxopenfd);
+DbEnv::set_mp_max_openfd(int maxopenfd);
<p>
int
-DbEnv::memp_get_max_openfd(int *maxopenfdp);
+DbEnv::get_mp_max_openfd(int *maxopenfdp);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DbEnv::set_max_openfd</h3>
-<p>The DbEnv::set_max_openfd method limits the number of file descriptors
+<h3>Description: DbEnv::set_mp_max_openfd</h3>
+<p>The DbEnv::set_mp_max_openfd method limits the number of file descriptors
the library will open concurrently when flushing dirty pages from the
cache.</p>
-<p>The DbEnv::set_max_openfd method
+<p>The DbEnv::set_mp_max_openfd method
either returns a non-zero error value
or throws an exception that encapsulates a non-zero error value on
failure, and returns 0 on success.
@@ -44,7 +44,7 @@ failure, and returns 0 on success.
by the library when flushing dirty pages from the cache.
</dl>
<h3>Errors</h3>
-<p>The DbEnv::set_max_openfd method
+<p>The DbEnv::set_mp_max_openfd 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
@@ -54,18 +54,18 @@ the following non-zero errors:</p>
invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
-<h3>Description: DbEnv::get_max_openfd</h3>
-<p>The DbEnv::get_max_openfd method returns the maximum number of file descriptors open.</p>
-<p>The DbEnv::get_max_openfd method may be called at any time during the life of the
+<h3>Description: DbEnv::get_mp_max_openfd</h3>
+<p>The DbEnv::get_mp_max_openfd method returns the maximum number of file descriptors open.</p>
+<p>The DbEnv::get_mp_max_openfd method may be called at any time during the life of the
application.</p>
-<p>The DbEnv::get_max_openfd method
+<p>The DbEnv::get_mp_max_openfd method
either 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>
<dl compact>
-<dt><b>maxopenfdp</b><dd>The DbEnv::get_max_openfd method returns the
+<dt><b>maxopenfdp</b><dd>The DbEnv::get_mp_max_openfd method returns the
maximum number of file descriptors open in <b>maxopenfdp</b>.
</dl>
<hr size=1 noshade>
@@ -77,6 +77,6 @@ maximum number of file descriptors open in <b>maxopenfdp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b1385445e..1feaf0bdf 100644
--- a/db/docs/api_cxx/memp_register.html
+++ b/db/docs/api_cxx/memp_register.html
@@ -1,5 +1,5 @@
<!--$Id: memp_register.so,v 10.38 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -82,6 +82,6 @@ the Berkeley DB library).</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 828892a8e..e970073e2 100644
--- a/db/docs/api_cxx/memp_set_clear_len.html
+++ b/db/docs/api_cxx/memp_set_clear_len.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_clear_len.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_clear_len.so,v 10.18 2005/11/30 19:46:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,8 +33,8 @@ DbMpoolFile::get_clear_len(u_int32_t *lenp);
<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.</p>
+specified to <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>. If no clear length is specified, the
+entire page is cleared when it is created.</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>
<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
@@ -57,9 +57,19 @@ 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 .</p>
+<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>
+<dl compact>
+<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>
@@ -69,6 +79,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 53711e951..3bab6f092 100644
--- a/db/docs/api_cxx/memp_set_fileid.html
+++ b/db/docs/api_cxx/memp_set_fileid.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_fileid.so,v 10.13 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_fileid.so,v 10.14 2005/04/14 13:08:06 sue Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -73,12 +73,12 @@ Unique file identifiers must be a DB_FILE_ID_LEN length array of bytes.
<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
+<p>The DbMpoolFile::get_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>
-<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
+<p>The DbMpoolFile::get_fileid method may be called at any time during the life of the
application.</p>
<hr size=1 noshade>
<h3>Class</h3>
@@ -89,6 +89,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 757bc2f88..0742e8f1a 100644
--- a/db/docs/api_cxx/memp_set_flags.html
+++ b/db/docs/api_cxx/memp_set_flags.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_flags.so,v 1.17 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_flags.so,v 1.18 2005/09/17 16:30:18 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,9 +47,13 @@ of the following values:
<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 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>
<p>The DB_MPOOL_NOFILE flag may be used to configure Berkeley DB at any time during
the life of the application.</p>
<dt><a name="DB_MPOOL_UNLINK">DB_MPOOL_UNLINK</a><dd>If set, remove the file when the last reference to it is closed.
+<p>The DB_MPOOL_NOFILE flag 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>
<p>The DB_MPOOL_UNLINK flag may be used to configure Berkeley DB at any time during
the life of the application.</p>
</dl>
@@ -81,6 +85,6 @@ flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fa978e582..464f67dbf 100644
--- a/db/docs/api_cxx/memp_set_ftype.html
+++ b/db/docs/api_cxx/memp_set_ftype.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_ftype.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_ftype.so,v 10.17 2005/11/30 19:46:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,9 +54,19 @@ and output processing. The <b>ftype</b> must be the same as a
</dl>
<hr size=1 noshade>
<h3>Description: DbMpoolFile::get_ftype</h3>
-<p>The DbMpoolFile::get_ftype method returns the .</p>
+<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>
+<dl compact>
+<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>
@@ -66,6 +76,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2244072fc..09f42311c 100644
--- a/db/docs/api_cxx/memp_set_lsn_offset.html
+++ b/db/docs/api_cxx/memp_set_lsn_offset.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_lsn_offset.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_lsn_offset.so,v 10.17 2005/04/14 17:57:54 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,9 +55,19 @@ 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 .</p>
+<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>
+<dl compact>
+<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>
@@ -67,6 +77,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 488e0f40e..102053a6f 100644
--- a/db/docs/api_cxx/memp_set_maxsize.html
+++ b/db/docs/api_cxx/memp_set_maxsize.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_maxsize.so,v 1.14 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_maxsize.so,v 1.15 2005/09/17 16:30:18 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,8 @@ limit has been reached will fail.</p>
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 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>
<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
@@ -63,9 +65,9 @@ application.</p>
<h3>Parameters</h3>
<dl compact>
<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.
+ the additional bytes of memory in the maximum file size is copied.
<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.
+ the gigabytes of memory in the maximum file size is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -76,6 +78,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ae9ff48fc..8d8b7ab4d 100644
--- a/db/docs/api_cxx/memp_set_pgcookie.html
+++ b/db/docs/api_cxx/memp_set_pgcookie.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_pgcookie.so,v 10.16 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_pgcookie.so,v 10.17 2005/11/30 19:46:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,9 +55,19 @@ pages.
</dl>
<hr size=1 noshade>
<h3>Description: DbMpoolFile::get_pgcookie</h3>
-<p>The DbMpoolFile::get_pgcookie method returns the .</p>
+<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>
+<dl compact>
+<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>
@@ -67,6 +77,6 @@ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 263223e4b..cde1c365b 100644
--- a/db/docs/api_cxx/memp_set_priority.html
+++ b/db/docs/api_cxx/memp_set_priority.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_set_priority.so,v 10.22 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_priority.so,v 10.23 2005/08/12 17:05:52 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,8 @@ 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 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>
<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
@@ -82,6 +84,6 @@ cache priority in <b>priorityp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 093f7cbda..0d0651621 100644
--- a/db/docs/api_cxx/memp_stat.html
+++ b/db/docs/api_cxx/memp_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_stat.so,v 10.63 2004/09/28 18:18:30 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_stat.so,v 10.67 2006/09/11 16:56:44 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,6 +52,10 @@ The following DB_MPOOL_STAT fields will be filled in:</p>
<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>roff_t st_regsize;<dd>Individual cache size, in bytes.
+<dt>size_t st_mmapsize;<dd>Maximum memory-mapped file size.
+<dt>int st_maxopenfd;<dd>Maximum open file descriptors.
+<dt>int st_maxwrite;<dd>Maximum sequential buffer writes.
+<dt>int st_maxwrite_sleep;<dd>Sleep after writing maximum sequential buffers.
<dt>u_int32_t st_map;<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).
@@ -68,27 +72,30 @@ although examining the application page fault rate may be helpful).
<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_longest;<dd>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_hash_nowait;<dd>The number of times that a thread of control was able to obtain a hash
+<dt>u_int32_t st_hash_nowait;<dd>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
+<dt>u_int32_t st_hash_wait;<dd>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
+<dt>u_int32_t st_hash_max_nowait;<dd>The number of times a thread of control was able to obtain the hash
+bucket lock without waiting on the bucket which had the maximum number
+of times that a thread of control needed to wait.
+<dt>u_int32_t st_hash_max_wait;<dd>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 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_region_wait;<dd>Number of times that a thread of control was forced to wait before
+obtaining a cache region mutex.
+<dt>u_int32_t st_region_nowait;<dd>Number of times that a thread of control was able to obtain a cache
+region mutex without waiting.
+<dt>u_int32_t st_mvcc_frozen;<dd>Number of buffers frozen.
+<dt>u_int32_t st_mvcc_thawed;<dd>Number of buffers thawed.
+<dt>u_int32_t st_mvcc_freed;<dd>Number of frozen buffers freed.
<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.
-<dt>u_int32_t st_mmapsize;<dd>Maximum memory-mapped file size.
-<dt>u_int32_t st_maxopenfd;<dd>Maximum open file descriptors.
-<dt>u_int32_t st_maxwrite;<dd>Maximum sequential buffer writes.
-<dt>u_int32_t st_maxwrite_sleep;<dd>Sleep after writing maximum sequential buffers.
+<dt>u_int32_t st_io_wait;<dd>Number of operations blocked waiting for I/O to complete.
</dl>
The <b>flags</b> parameter must be set to 0 or
the following value:
@@ -126,9 +133,9 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<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.
+a pointer to the allocated per-file statistics structures is copied.
<dt><b>gsp</b><dd>The <b>gsp</b> parameter references memory into which
-a pointer to the allocated global statistics structure is copied.
+a pointer to the allocated global statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DbEnv::memp_stat method
@@ -169,6 +176,6 @@ of the following values:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d66302c6d..f2d7c8065 100644
--- a/db/docs/api_cxx/memp_sync.html
+++ b/db/docs/api_cxx/memp_sync.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_sync.so,v 10.41 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_sync.so,v 10.42 2004/11/12 02:55:19 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,17 +52,6 @@ a certain time have been written to disk.
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>
-<dl compact>
-<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>
<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>
@@ -72,6 +61,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d809b6d6e..45378320e 100644
--- a/db/docs/api_cxx/memp_trickle.html
+++ b/db/docs/api_cxx/memp_trickle.html
@@ -1,5 +1,5 @@
<!--$Id: memp_trickle.so,v 10.36 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,7 +42,7 @@ failure, and returns 0 on success.
<dl compact>
<dt><b>nwrotep</b><dd>The <b>nwrotep</b> parameter references memory into which
the number of pages written to reach the specified
-percentage is copied.
+percentage is copied.
<dt><b>percent</b><dd>The <b>percent</b> parameter is the percent of the pages in the cache
that should be clean.
</dl>
@@ -65,6 +65,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 388cee9c8..70c412804 100644
--- a/db/docs/api_cxx/mempfile_class.html
+++ b/db/docs/api_cxx/mempfile_class.html
@@ -1,5 +1,5 @@
<!--$Id: mempfile_class.so,v 10.24 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -67,6 +67,6 @@ calls in a purely C++ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/mutex_alloc.html b/db/docs/api_cxx/mutex_alloc.html
new file mode 100644
index 000000000..b42d72cf6
--- /dev/null
+++ b/db/docs/api_cxx/mutex_alloc.html
@@ -0,0 +1,78 @@
+<!--$Id: mutex_alloc.so,v 10.2 2006/01/27 16:13:49 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_alloc</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_alloc</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_alloc(u_int32_t flags, db_mutex_t *mutexp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_alloc</h3>
+<p>The DbEnv::mutex_alloc method allocates a mutex and returns a reference to
+it into the memory specified by <b>mutexp</b>.</p>
+<p>The DbEnv::mutex_alloc 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::mutex_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>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt><a name="DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a><dd>The mutex is associated with a single process. The <a href="../api_cxx/env_failchk.html">DbEnv::failchk</a> method
+will release mutexes held by any process which has exited.
+<dt><a name="DB_MUTEX_SELF_BLOCK">DB_MUTEX_SELF_BLOCK</a><dd>The mutex must be self-blocking. That is, if a thread of control locks
+the mutex and then attempts to lock the mutex again, the thread of
+control will block until another thread of control releases the original
+lock on the mutex, allowing the original thread of control to lock the
+mutex the second time. Attempting to re-acquire a mutex for which the
+DB_MUTEX_SELF_BLOCK flag was not specified will result in
+undefined behavior.
+</dl>
+<dt><b>mutexp</b><dd>The <b>mutexp</b> parameter references memory into which
+ the mutex reference is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_free.html b/db/docs/api_cxx/mutex_free.html
new file mode 100644
index 000000000..b6c8bfd05
--- /dev/null
+++ b/db/docs/api_cxx/mutex_free.html
@@ -0,0 +1,64 @@
+<!--$Id: mutex_free.so,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_free</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_free</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_free(db_mutex_t mutex);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_free</h3>
+<p>The DbEnv::mutex_free method discards a mutex allocated by <a href="../api_cxx/mutex_alloc.html">DbEnv::mutex_alloc</a>.</p>
+<p>The DbEnv::mutex_free 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::mutex_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>
+<dl compact>
+<dt><b>mutex</b><dd>The <b>mutex</b> parameter is a mutex previously allocated by
+<a href="../api_cxx/mutex_alloc.html">DbEnv::mutex_alloc</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_list.html b/db/docs/api_cxx/mutex_list.html
new file mode 100644
index 000000000..0b09b1b06
--- /dev/null
+++ b/db/docs/api_cxx/mutex_list.html
@@ -0,0 +1,29 @@
+<!--$Id: mutex_list.so,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Berkeley DB: Mutexes and Related Methods</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<h3 align=center>Berkeley DB: Mutexes and Related Methods</h3>
+<!--$Id: m4.methods,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Mutexes and Related Methods</th><th>Description</th></tr>
+<!--DbEnv::mutex_alloc--><tr><td><a href="../api_cxx/mutex_alloc.html">DbEnv::mutex_alloc</a></td><td>Allocate a mutex</td></tr>
+<!--DbEnv::mutex_free--><tr><td><a href="../api_cxx/mutex_free.html">DbEnv::mutex_free</a></td><td>Free a mutex</td></tr>
+<!--DbEnv::mutex_lock--><tr><td><a href="../api_cxx/mutex_lock.html">DbEnv::mutex_lock</a></td><td>Lock a mutex</td></tr>
+<!--DbEnv::mutex_stat--><tr><td><a href="../api_cxx/mutex_stat.html">DbEnv::mutex_stat</a></td><td>Mutex statistics</td></tr>
+<!--DbEnv::mutex_unlock--><tr><td><a href="../api_cxx/mutex_unlock.html">DbEnv::mutex_unlock</a></td><td>Unlock a mutex</td></tr>
+<tr><th>Mutex Configuration</th><th><br></th></tr>
+<!--DbEnv::mutex_set_align--><tr><td><a href="../api_cxx/mutex_set_align.html">DbEnv::mutex_set_align</a></td><td>Configure mutex alignment</td></tr>
+<!--DbEnv::mutex_set_increment--><tr><td><a href="../api_cxx/mutex_set_max.html">DbEnv::mutex_set_increment</a></td><td>Configure number of additional mutexes</td></tr>
+<!--DbEnv::mutex_set_max--><tr><td><a href="../api_cxx/mutex_set_max.html">DbEnv::mutex_set_max</a></td><td>Configure total number of mutexes</td></tr>
+<!--DbEnv::mutex_set_tas_spins--><tr><td><a href="../api_cxx/mutex_set_tas_spins.html">DbEnv::mutex_set_tas_spins</a></td><td>Configure test-and-set mutex spin count</td></tr>
+</table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_lock.html b/db/docs/api_cxx/mutex_lock.html
new file mode 100644
index 000000000..b1b70816a
--- /dev/null
+++ b/db/docs/api_cxx/mutex_lock.html
@@ -0,0 +1,66 @@
+<!--$Id: mutex_lock.so,v 10.1 2005/07/20 16:33:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_lock</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_lock</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_lock(db_mutex_t mutex);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_lock</h3>
+<p>The DbEnv::mutex_lock method locks the mutex allocated by
+<a href="../api_cxx/mutex_alloc.html">DbEnv::mutex_alloc</a>. The thread of control calling DbEnv::mutex_lock
+will block until the lock is available.</p>
+<p>The DbEnv::mutex_lock 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::mutex_lock method
+either 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>
+<dl compact>
+<dt><b>mutex</b><dd>The <b>mutex</b> parameter is a mutex previously allocated by
+<a href="../api_cxx/mutex_alloc.html">DbEnv::mutex_alloc</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_lock 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_set_align.html b/db/docs/api_cxx/mutex_set_align.html
new file mode 100644
index 000000000..a8f659d4c
--- /dev/null
+++ b/db/docs/api_cxx/mutex_set_align.html
@@ -0,0 +1,99 @@
+<!--$Id: mutex_set_align.so,v 10.1 2005/07/20 16:34:00 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_set_align</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_set_align</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_set_align(u_int32_t align);
+<p>
+int
+DbEnv::mutex_get_align(u_int32_t *alignp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_set_align</h3>
+<p>Set the mutex alignment, in bytes.</p>
+<p>It is sometimes advantageous to align mutexes on specific byte
+boundaries in order to minimize cache line collisions. The
+DbEnv::mutex_set_align method specifies an alignment for mutexes allocated
+by Berkeley DB.</p>
+<p>The database environment's mutex alignment may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "mutex_set_align", one or more whitespace
+characters, and the mutex alignment 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::mutex_set_align 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::mutex_set_align 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::mutex_set_align
+will be ignored.
+</p>
+<p>The DbEnv::mutex_set_align method
+either 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>
+<dl compact>
+<dt><b>align</b><dd>The <b>align</b> parameter is the mutex alignment, in bytes. The mutex
+alignment must be a power-of-two.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_set_align 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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_get_align</h3>
+<p>The DbEnv::mutex_get_align method returns the mutex alignment, in bytes.</p>
+<p>The DbEnv::mutex_get_align method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::mutex_get_align method
+either 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>
+<dl compact>
+<dt><b>alignp</b><dd>The DbEnv::mutex_get_align method returns the
+mutex alignment, in bytes in <b>alignp</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_set_max.html b/db/docs/api_cxx/mutex_set_max.html
new file mode 100644
index 000000000..c65040152
--- /dev/null
+++ b/db/docs/api_cxx/mutex_set_max.html
@@ -0,0 +1,167 @@
+<!--$Id: mutex_set_max.so,v 10.3 2005/08/03 21:24:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_set_max</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_set_max</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_set_increment(u_int32_t increment);
+<p>
+int
+DbEnv::mutex_get_increment(u_int32_t *incrementp);
+int
+DbEnv::mutex_set_max(u_int32_t max);
+<p>
+int
+DbEnv::mutex_get_max(u_int32_t *maxp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_set_max</h3>
+<p>Configure the total number of mutexes to allocate.</p>
+<p>Berkeley DB allocates a default number of mutexes based on the initial
+configuration of the database environment. That default calculation may
+be too small if the application has an unusual need for mutexes (for
+example, if the application opens an unexpectedly large number of
+databases) or too large (if the application is trying to minimize its
+memory footprint). The DbEnv::mutex_set_max method is used to specify an
+absolute number of mutexes to allocate.</p>
+<p>Calling the DbEnv::mutex_set_max method discards any value previously
+set using the DbEnv::mutex_set_increment method.</p>
+<p>The database environment's total number of mutexes may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "mutex_set_max", one or more whitespace
+characters, and the total number of mutexes.
+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::mutex_set_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::mutex_set_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::mutex_set_max
+will be ignored.
+</p>
+<p>The DbEnv::mutex_set_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>
+<dl compact>
+<dt><b>max</b><dd>The <b>max</b> parameter is the absolute number of mutexes to
+allocate.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_set_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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_get_max</h3>
+<p>The DbEnv::mutex_get_max method returns the total number of mutexes allocated.</p>
+<p>The DbEnv::mutex_get_max method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::mutex_get_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>
+<dl compact>
+<dt><b>maxp</b><dd>The DbEnv::mutex_get_max method returns the
+total number of mutexes allocated in <b>maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_set_increment</h3>
+<p>Configure the number of additional mutexes to allocate.</p>
+<p>Additionally, an application may want to allocate mutexes for its own
+use. The DbEnv::mutex_set_increment method is used to add a number of
+mutexes to the default allocation.</p>
+<p>Calling the DbEnv::mutex_set_increment method discards any value previously
+set using the DbEnv::mutex_set_max method.</p>
+<p>The database environment's number of additional mutexes may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "mutex_set_increment", one or more whitespace
+characters, and the number of additional mutexes.
+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::mutex_set_increment 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::mutex_set_increment 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::mutex_set_increment
+will be ignored.
+</p>
+<p>The DbEnv::mutex_set_increment method
+either 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>
+<dl compact>
+<dt><b>increment</b><dd>The <b>increment</b> parameter is the number of additional mutexes to
+allocate.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_set_increment 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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_get_increment</h3>
+<p>The DbEnv::mutex_get_increment method returns the number of additional mutexes to allocate.</p>
+<p>The DbEnv::mutex_get_increment method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::mutex_get_increment method
+either 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>
+<dl compact>
+<dt><b>incrementp</b><dd>The DbEnv::mutex_get_increment method returns the
+number of additional mutexes to allocate in <b>incrementp</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_set_tas_spins.html b/db/docs/api_cxx/mutex_set_tas_spins.html
new file mode 100644
index 000000000..b8f688d87
--- /dev/null
+++ b/db/docs/api_cxx/mutex_set_tas_spins.html
@@ -0,0 +1,94 @@
+<!--$Id: mutex_set_tas_spins.so,v 10.30 2005/07/20 16:34:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_set_tas_spins</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_set_tas_spins</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_set_tas_spins(u_int32_t tas_spins);
+<p>
+int
+DbEnv::mutex_get_tas_spins(u_int32_t *, tas_spinsp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_set_tas_spins</h3>
+<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>
+<p>The database environment's test-and-set spin count may also be configured 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::mutex_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::mutex_set_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::mutex_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>
+<dl compact>
+<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::mutex_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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_get_tas_spins</h3>
+<p>The DbEnv::mutex_get_tas_spins method returns the test-and-set spin count.</p>
+<p>The DbEnv::mutex_get_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::mutex_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>
+<dl compact>
+<dt><b>tas_spinsp</b><dd>The DbEnv::mutex_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/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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_stat.html b/db/docs/api_cxx/mutex_stat.html
new file mode 100644
index 000000000..ca82a24f0
--- /dev/null
+++ b/db/docs/api_cxx/mutex_stat.html
@@ -0,0 +1,118 @@
+<!--$Id: mutex_stat.so,v 10.2 2005/11/08 11:43:55 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_stat</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_stat</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_stat(DB_MUTEX_STAT **statp, u_int32_t flags);
+<p>
+int
+DbEnv::mutex_stat_print(u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_stat</h3>
+<p>The DbEnv::mutex_stat method returns the mutex subsystem statistics.</p>
+<p>The DbEnv::mutex_stat method creates a statistical structure of type
+DB_MUTEX_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_MUTEX_STAT fields will be filled in:</p>
+<dl compact>
+<dt>u_int32_t st_mutex_align;<dd>The mutex alignment, in bytes.
+<dt>u_int32_t st_mutex_tas_spins;<dd>The number of times test-and-set mutexes will spin without blocking.
+<dt>int st_mutex_cnt;<dd>The total number of mutexes configured.
+<dt>u_int32_t st_mutex_free;<dd>The number of mutexes currently available.
+<dt>u_int32_t st_mutex_inuse;<dd>The number of mutexes currently in use.
+<dt>u_int32_t st_mutex_inuse_max;<dd>The maximum number of mutexes ever in use.
+<dt>roff_t st_regsize;<dd>The size of the mutex region, in bytes.
+<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
+obtaining the mutex region mutex.
+<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
+the mutex region mutex without waiting.
+</dl>
+<p>The DbEnv::mutex_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>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
+the following value:
+<dl compact>
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<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::mutex_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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_stat_print</h3>
+<p>The DbEnv::mutex_stat_print method displays the
+mutex subsystem statistical information, as described for the DbEnv::mutex_stat method.
+The information is printed to a specified output channel (see the
+<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or passed to an
+application callback function (see the <a href="../api_cxx/env_set_msgcall.html">DbEnv::set_msgcall</a> method for
+more information).</p>
+<p>The DbEnv::mutex_stat_print 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::mutex_stat_print method
+either 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>
+<dl compact>
+<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:
+<dl compact>
+<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
+</dl>
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/mutex_unlock.html b/db/docs/api_cxx/mutex_unlock.html
new file mode 100644
index 000000000..8c2244199
--- /dev/null
+++ b/db/docs/api_cxx/mutex_unlock.html
@@ -0,0 +1,65 @@
+<!--$Id: mutex_unlock.so,v 10.1 2005/07/20 16:34:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::mutex_unlock</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::mutex_unlock</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::mutex_unlock(db_mutex_t mutex);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::mutex_unlock</h3>
+<p>The DbEnv::mutex_unlock method unlocks the mutex locked by
+<a href="../api_cxx/mutex_lock.html">DbEnv::mutex_lock</a>.</p>
+<p>The DbEnv::mutex_unlock 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::mutex_unlock method
+either 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>
+<dl compact>
+<dt><b>mutex</b><dd>The <b>mutex</b> parameter is a mutex previously locked by
+<a href="../api_cxx/mutex_lock.html">DbEnv::mutex_lock</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::mutex_unlock 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>
+<dl compact>
+<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/env_list.html">Database Environments and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/object.html b/db/docs/api_cxx/object.html
index 998189610..e1b081b0d 100644
--- a/db/docs/api_cxx/object.html
+++ b/db/docs/api_cxx/object.html
@@ -1,4 +1,4 @@
-<!--$Id: object.so,v 10.14 2004/11/04 21:28:28 bostic Exp $-->
+<!--$Id: object.so,v 10.18 2005/09/13 19:23:43 gmf Exp $-->
<html>
<head>
<title>Berkeley DB API</title>
@@ -24,6 +24,7 @@ href="../api_cxx/cxx_pindex.html"
<a target="method" href="lock_list.html">Locking</a><br>
<a target="method" href="log_list.html">Logging</a><br>
<a target="method" href="memp_list.html">Memory Pool</a><br>
+<a target="method" href="mutex_list.html">Mutexes</a><br>
<a target="method" href="rep_list.html">Replication</a><br>
<a target="method" href="seq_list.html">Sequences</a><br>
<a target="method" href="txn_list.html">Transactions</a><br>
diff --git a/db/docs/api_cxx/pindex.src b/db/docs/api_cxx/pindex.src
index ceb1c9f0a..1f012c39e 100644
--- a/db/docs/api_cxx/pindex.src
+++ b/db/docs/api_cxx/pindex.src
@@ -1,33 +1,35 @@
__APIREL__/api_cxx/db_associate.html__OCT__2 @DB_DBT_APPMALLOC
__APIREL__/api_cxx/db_associate.html__OCT__3 @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_associate.html__OCT__DB_IMMUTABLE_KEY Db::associate@DB_IMMUTABLE_KEY
__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__DB_NOSYNC Db::close@DB_NOSYNC
-__APIREL__/api_cxx/db_cursor.html__OCT__DB_DEGREE_2 Db::cursor@DB_DEGREE_2
-__APIREL__/api_cxx/db_cursor.html__OCT__DB_DIRTY_READ Db::cursor@DB_DIRTY_READ
+__APIREL__/api_cxx/db_compact.html__OCT__DB_FREELIST_ONLY Db::compact@DB_FREELIST_ONLY
+__APIREL__/api_cxx/db_compact.html__OCT__DB_FREE_SPACE Db::compact@DB_FREE_SPACE
+__APIREL__/api_cxx/db_cursor.html__OCT__DB_READ_COMMITTED Db::cursor@DB_READ_COMMITTED
+__APIREL__/api_cxx/db_cursor.html__OCT__DB_READ_UNCOMMITTED Db::cursor@DB_READ_UNCOMMITTED
__APIREL__/api_cxx/db_cursor.html__OCT__DB_WRITECURSOR Db::cursor@DB_WRITECURSOR
-__APIREL__/api_cxx/db_del.html__OCT__DB_AUTO_COMMIT Db::del@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_cursor.html__OCT__DB_TXN_SNAPSHOT Db::cursor@DB_TXN_SNAPSHOT
__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_DEGREE_2 Db::get@DB_DEGREE_2
-__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_READ_COMMITTED Db::get@DB_READ_COMMITTED
+__APIREL__/api_cxx/db_get.html__OCT__DB_READ_UNCOMMITTED Db::get@DB_READ_UNCOMMITTED
__APIREL__/api_cxx/db_get.html__OCT__DB_RMW Db::get@DB_RMW
__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_READ_UNCOMMITTED Db::join@DB_READ_UNCOMMITTED
__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_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_MULTIVERSION Db::open@DB_MULTIVERSION
__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_READ_UNCOMMITTED Db::open@DB_READ_UNCOMMITTED
__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
@@ -38,7 +40,8 @@ __APIREL__/api_cxx/db_open.html__OCT__DB_UNKNOWN Db::open@DB_UNKNOWN
__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_put.html__OCT__2 @DB_REP_HANDLE_DEAD
+__APIREL__/api_cxx/db_put.html__OCT__3 @DB_REP_LOCKOUT
__APIREL__/api_cxx/db_set_encrypt.html__OCT__DB_ENCRYPT_AES Db::set_encrypt@DB_ENCRYPT_AES
__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
@@ -65,11 +68,12 @@ __APIREL__/api_cxx/db_set_flags.html__OCT__11 @renumbering records in Recno data
__APIREL__/api_cxx/db_set_flags.html__OCT__DB_RENUMBER Db::set_flags@DB_RENUMBER
__APIREL__/api_cxx/db_set_flags.html__OCT__12 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_stat.html__OCT__DB_DEGREE_2 Db::stat@DB_DEGREE_2
-__APIREL__/api_cxx/db_stat.html__OCT__DB_DIRTY_READ Db::stat@DB_DIRTY_READ
+__APIREL__/api_cxx/db_stat.html__OCT__DB_FAST_STAT Db::stat@DB_FAST_STAT
+__APIREL__/api_cxx/db_stat.html__OCT__DB_READ_COMMITTED Db::stat@DB_READ_COMMITTED
+__APIREL__/api_cxx/db_stat.html__OCT__DB_READ_UNCOMMITTED Db::stat@DB_READ_UNCOMMITTED
__APIREL__/api_cxx/db_stat.html__OCT__DB_FAST_STAT Db::stat@DB_FAST_STAT
__APIREL__/api_cxx/db_stat.html__OCT__DB_STAT_ALL Db::stat@DB_STAT_ALL
-__APIREL__/api_cxx/db_truncate.html__OCT__DB_AUTO_COMMIT Db::truncate@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_stat.html__OCT__DB_STAT_CLEAR Db::stat@DB_STAT_CLEAR
__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_BAD
@@ -100,7 +104,7 @@ __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_READ_UNCOMMITTED Dbc::get@DB_READ_UNCOMMITTED
__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
@@ -114,7 +118,12 @@ __APIREL__/api_cxx/env_class.html__OCT__DB_CXX_NO_EXCEPTIONS DbEnv@DB_CXX_NO_EXC
__APIREL__/api_cxx/env_class.html__OCT__DB_RPCCLIENT DbEnv@DB_RPCCLIENT
__APIREL__/api_cxx/env_dbremove.html__OCT__DB_AUTO_COMMIT DbEnv::dbremove@DB_AUTO_COMMIT
__APIREL__/api_cxx/env_dbrename.html__OCT__DB_AUTO_COMMIT DbEnv::dbrename@DB_AUTO_COMMIT
-__APIREL__/api_cxx/env_open.html__OCT__DB_JOINENV DbEnv::open@DB_JOINENV
+__APIREL__/api_cxx/env_event_notify.html__OCT__DB_EVENT_PANIC DbEnv::set_event_notify@DB_EVENT_PANIC
+__APIREL__/api_cxx/env_event_notify.html__OCT__DB_EVENT_REP_CLIENT DbEnv::set_event_notify@DB_EVENT_REP_CLIENT
+__APIREL__/api_cxx/env_event_notify.html__OCT__DB_EVENT_REP_MASTER DbEnv::set_event_notify@DB_EVENT_REP_MASTER
+__APIREL__/api_cxx/env_event_notify.html__OCT__DB_EVENT_REP_NEWMASTER DbEnv::set_event_notify@DB_EVENT_REP_NEWMASTER
+__APIREL__/api_cxx/env_event_notify.html__OCT__DB_EVENT_REP_STARTUPDONE DbEnv::set_event_notify@DB_EVENT_REP_STARTUPDONE
+__APIREL__/api_cxx/env_event_notify.html__OCT__DB_EVENT_WRITE_FAILED DbEnv::set_event_notify@DB_EVENT_WRITE_FAILED
__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
@@ -129,6 +138,7 @@ __APIREL__/api_cxx/env_open.html__OCT__DB_USE_ENVIRON_ROOT DbEnv::open@DB_USE_EN
__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_REGISTER DbEnv::open@DB_REGISTER
__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_open.html__OCT__3 @DB_VERSION_MISMATCH
@@ -150,36 +160,42 @@ __APIREL__/api_cxx/env_set_flags.html__OCT__3 turn off system @buffering for dat
__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__4 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__5 turn off system @buffering for log files
+__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_DSYNC_DB DbEnv::set_flags@DB_DSYNC_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_DSYNC_LOG DbEnv::set_flags@DB_DSYNC_LOG
-__APIREL__/api_cxx/env_set_flags.html__OCT__6 automatic @log file removal
+__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__7 in memory @logs
+__APIREL__/api_cxx/env_set_flags.html__OCT__8 in memory @logs
__APIREL__/api_cxx/env_set_flags.html__OCT__DB_LOG_INMEMORY DbEnv::set_flags@DB_LOG_INMEMORY
__APIREL__/api_cxx/env_set_flags.html__OCT__DB_LOG_BUFFER_FULL DbEnv::set_flags@DB_LOG_BUFFER_FULL
-__APIREL__/api_cxx/env_set_flags.html__OCT__8 ignore @locking
+__APIREL__/api_cxx/env_set_flags.html__OCT__9 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_MULTIVERSION DbEnv::set_flags@DB_MULTIVERSION
+__APIREL__/api_cxx/env_set_flags.html__OCT__10 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__11 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__12 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__13 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 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__DB_TXN_SNAPSHOT DbEnv::set_flags@DB_TXN_SNAPSHOT
+__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__15 configure for @stress testing
+__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_isalive.html__OCT__DB_MUTEX_PROCESS_ONLY DbEnv::set_isalive@DB_MUTEX_PROCESS_ONLY
__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__2 @DB_NOSERVER
__APIREL__/api_cxx/env_set_rpc_server.html__OCT__3 @DB_NOSERVER_ID
+__APIREL__/api_cxx/env_set_thread_id_string.html__OCT__2 @DB_NOSERVER
__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
@@ -187,9 +203,11 @@ __APIREL__/api_cxx/env_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DbEnv::set_time
__APIREL__/api_cxx/env_set_tmp_dir.html__OCT__2 @temporary files
__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_REGISTER DbEnv::set_verbose@DB_VERB_REGISTER
__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_stat.html__OCT__DB_STAT_ALL DbEnv::stat_print@DB_STAT_ALL
+__APIREL__/api_cxx/env_stat.html__OCT__DB_STAT_CLEAR DbEnv::stat_print@DB_STAT_CLEAR
__APIREL__/api_cxx/env_stat.html__OCT__DB_STAT_SUBSYSTEM DbEnv::stat_print@DB_STAT_SUBSYSTEM
__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
@@ -239,6 +257,7 @@ __APIREL__/api_cxx/log_archive.html__OCT__DB_ARCH_REMOVE DbEnv::log_archive@DB_A
__APIREL__/api_cxx/log_put.html__OCT__DB_FLUSH DbEnv::log_put@DB_FLUSH
__APIREL__/api_cxx/log_stat.html__OCT__DB_STAT_CLEAR DbEnv::log_stat@DB_STAT_CLEAR
__APIREL__/api_cxx/log_stat.html__OCT__DB_STAT_ALL DbEnv::log_stat@DB_STAT_ALL
+__APIREL__/api_cxx/log_stat.html__OCT__DB_STAT_CLEAR DbEnv::log_stat@DB_STAT_CLEAR
__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
@@ -247,19 +266,18 @@ __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/memp_fget.html__OCT__2 @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_DIRTY DbMpoolFile::get@DB_MPOOL_DIRTY
+__APIREL__/api_cxx/memp_fget.html__OCT__DB_MPOOL_EDIT DbMpoolFile::get@DB_MPOOL_EDIT
__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__DB_CREATE DbMpoolFile::open@DB_CREATE
__APIREL__/api_cxx/memp_fopen.html__OCT__2 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_MULTIVERSION DbMpoolFile::open@DB_MULTIVERSION
__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__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__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_set_flags.html__OCT__DB_MPOOL_NOFILE DbMpoolFile::set_flags@DB_MPOOL_NOFILE
__APIREL__/api_cxx/memp_set_flags.html__OCT__DB_MPOOL_UNLINK DbMpoolFile::set_flags@DB_MPOOL_UNLINK
@@ -273,38 +291,68 @@ __APIREL__/api_cxx/memp_stat.html__OCT__DB_STAT_CLEAR DbEnv::memp_stat@DB_STAT_C
__APIREL__/api_cxx/memp_stat.html__OCT__DB_STAT_ALL DbEnv::memp_stat@DB_STAT_ALL
__APIREL__/api_cxx/memp_stat.html__OCT__DB_STAT_MEMP_HASH DbEnv::memp_stat@DB_STAT_MEMP_HASH
__APIREL__/api_cxx/memp_class.html__OCT__DB_BUFFER_SMALL DbMemoryException@DB_BUFFER_SMALL
+__APIREL__/api_cxx/mutex_alloc.html__OCT__DB_MUTEX_PROCESS_ONLY DbEnv::mutex_alloc@DB_MUTEX_PROCESS_ONLY
+__APIREL__/api_cxx/mutex_alloc.html__OCT__DB_MUTEX_SELF_BLOCK DbEnv::mutex_alloc@DB_MUTEX_SELF_BLOCK
+__APIREL__/api_cxx/mutex_stat.html__OCT__DB_STAT_CLEAR DbEnv::mutex_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/mutex_stat.html__OCT__DB_STAT_ALL DbEnv::mutex_stat@DB_STAT_ALL
+__APIREL__/api_cxx/mutex_stat.html__OCT__DB_STAT_CLEAR DbEnv::mutex_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/rep_config.html__OCT__DB_REP_CONF_BULK DbEnv::rep_set_config@DB_REP_CONF_BULK
+__APIREL__/api_cxx/rep_config.html__OCT__DB_REP_CONF_DELAYCLIENT DbEnv::rep_set_config@DB_REP_CONF_DELAYCLIENT
+__APIREL__/api_cxx/rep_config.html__OCT__DB_REP_CONF_NOAUTOINIT DbEnv::rep_set_config@DB_REP_CONF_NOAUTOINIT
+__APIREL__/api_cxx/rep_config.html__OCT__DB_REP_CONF_NOWAIT DbEnv::rep_set_config@DB_REP_CONF_NOWAIT
__APIREL__/api_cxx/rep_elect.html__OCT__2 @DB_REP_UNAVAIL
__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_IGNORE DbEnv::rep_process_message@DB_REP_IGNORE
__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_JOIN_FAILURE DbEnv::rep_process_message@DB_REP_JOIN_FAILURE
__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_STARTUPDONE DbEnv::rep_process_message@DB_REP_STARTUPDONE
__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_MASTER DbEnv::rep_start@DB_REP_MASTER
__APIREL__/api_cxx/rep_stat.html__OCT__DB_STAT_CLEAR DbEnv::rep_stat@DB_STAT_CLEAR
__APIREL__/api_cxx/rep_stat.html__OCT__DB_STAT_ALL DbEnv::rep_stat@DB_STAT_ALL
+__APIREL__/api_cxx/rep_stat.html__OCT__DB_STAT_CLEAR DbEnv::rep_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/rep_timeout.html__OCT__DB_REP_ACK_TIMEOUT DbEnv::rep_set_timeout@DB_REP_ACK_TIMEOUT
+__APIREL__/api_cxx/rep_timeout.html__OCT__DB_REP_ELECTION_TIMEOUT DbEnv::rep_set_timeout@DB_REP_ELECTION_TIMEOUT
+__APIREL__/api_cxx/rep_timeout.html__OCT__DB_REP_ELECTION_RETRY DbEnv::rep_set_timeout@DB_REP_ELECTION_RETRY
+__APIREL__/api_cxx/rep_timeout.html__OCT__DB_REP_CONNECTION_RETRY DbEnv::rep_set_timeout@DB_REP_CONNECTION_RETRY
__APIREL__/api_cxx/rep_transport.html__OCT__2 @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/seq_get.html__OCT__DB_AUTO_COMMIT DbSequence::get@DB_AUTO_COMMIT
+__APIREL__/api_cxx/rep_transport.html__OCT__DB_REP_ANYWHERE DbEnv::rep_set_transport@DB_REP_ANYWHERE
+__APIREL__/api_cxx/rep_transport.html__OCT__DB_REP_NOBUFFER DbEnv::rep_set_transport@DB_REP_NOBUFFER
+__APIREL__/api_cxx/rep_transport.html__OCT__DB_REP_PERMANENT DbEnv::rep_set_transport@DB_REP_PERMANENT
+__APIREL__/api_cxx/rep_transport.html__OCT__DB_REP_REREQUEST DbEnv::rep_set_transport@DB_REP_REREQUEST
+__APIREL__/api_cxx/repmgr_ack_policy.html__OCT__DB_REPMGR_ACKS_ALL DbEnv::repmgr_set_ack_policy@DB_REPMGR_ACKS_ALL
+__APIREL__/api_cxx/repmgr_ack_policy.html__OCT__DB_REPMGR_ACKS_ALL_PEERS DbEnv::repmgr_set_ack_policy@DB_REPMGR_ACKS_ALL_PEERS
+__APIREL__/api_cxx/repmgr_ack_policy.html__OCT__DB_REPMGR_ACKS_NONE DbEnv::repmgr_set_ack_policy@DB_REPMGR_ACKS_NONE
+__APIREL__/api_cxx/repmgr_ack_policy.html__OCT__DB_REPMGR_ACKS_ONE DbEnv::repmgr_set_ack_policy@DB_REPMGR_ACKS_ONE
+__APIREL__/api_cxx/repmgr_ack_policy.html__OCT__DB_REPMGR_ACKS_ONE_PEER DbEnv::repmgr_set_ack_policy@DB_REPMGR_ACKS_ONE_PEER
+__APIREL__/api_cxx/repmgr_ack_policy.html__OCT__DB_REPMGR_ACKS_QUORUM DbEnv::repmgr_set_ack_policy@DB_REPMGR_ACKS_QUORUM
+__APIREL__/api_cxx/repmgr_remote_site.html__OCT__DB_REPMGR_PEER DbEnv::repmgr_add_remote_site@DB_REPMGR_PEER
+__APIREL__/api_cxx/repmgr_site_list.html__OCT__DB_REPMGR_CONNECTED DbEnv::repmgr_site_list@DB_REPMGR_CONNECTED
+__APIREL__/api_cxx/repmgr_site_list.html__OCT__DB_REPMGR_DISCONNECTED DbEnv::repmgr_site_list@DB_REPMGR_DISCONNECTED
+__APIREL__/api_cxx/repmgr_start.html__OCT__DB_REP_MASTER DbEnv::repmgr_start@DB_REP_MASTER
+__APIREL__/api_cxx/repmgr_start.html__OCT__DB_REP_CLIENT DbEnv::repmgr_start@DB_REP_CLIENT
+__APIREL__/api_cxx/repmgr_start.html__OCT__DB_REP_ELECTION DbEnv::repmgr_start@DB_REP_ELECTION
+__APIREL__/api_cxx/repmgr_start.html__OCT__DB_REP_FULL_ELECTION DbEnv::repmgr_start@DB_REP_FULL_ELECTION
__APIREL__/api_cxx/seq_get.html__OCT__DB_TXN_NOSYNC DbSequence::get@DB_TXN_NOSYNC
-__APIREL__/api_cxx/seq_open.html__OCT__DB_AUTO_COMMIT DbSequence::open@DB_AUTO_COMMIT
__APIREL__/api_cxx/seq_open.html__OCT__DB_CREATE DbSequence::open@DB_CREATE
__APIREL__/api_cxx/seq_open.html__OCT__DB_EXCL DbSequence::open@DB_EXCL
__APIREL__/api_cxx/seq_open.html__OCT__DB_THREAD DbSequence::open@DB_THREAD
+__APIREL__/api_cxx/seq_open.html__OCT__DB_THREAD DbSequence::open@DB_THREAD
+__APIREL__/api_cxx/seq_remove.html__OCT__DB_TXN_NOSYNC DbSequence::remove@DB_TXN_NOSYNC
__APIREL__/api_cxx/seq_set_flags.html__OCT__DB_SEQ_DEC DbSequence::set_flags@DB_SEQ_DEC
__APIREL__/api_cxx/seq_set_flags.html__OCT__DB_SEQ_INC DbSequence::set_flags@DB_SEQ_INC
__APIREL__/api_cxx/seq_set_flags.html__OCT__DB_SEQ_WRAP DbSequence::set_flags@DB_SEQ_WRAP
__APIREL__/api_cxx/seq_stat.html__OCT__DB_STAT_CLEAR DbSequence::stat@DB_STAT_CLEAR
__APIREL__/api_cxx/seq_stat.html__OCT__DB_STAT_CLEAR DbSequence::stat@DB_STAT_CLEAR
-__APIREL__/api_cxx/seq_remove.html__OCT__DB_AUTO_COMMIT DbSequence::remove@DB_AUTO_COMMIT
-__APIREL__/api_cxx/seq_remove.html__OCT__DB_TXN_NOSYNC DbSequence::remove@DB_TXN_NOSYNC
-__APIREL__/api_cxx/txn_begin.html__OCT__DB_DEGREE_2 DbEnv::txn_begin@DB_DEGREE_2
-__APIREL__/api_cxx/txn_begin.html__OCT__DB_DIRTY_READ DbEnv::txn_begin@DB_DIRTY_READ
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_READ_COMMITTED DbEnv::txn_begin@DB_READ_COMMITTED
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_READ_UNCOMMITTED DbEnv::txn_begin@DB_READ_UNCOMMITTED
__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_SNAPSHOT DbEnv::txn_begin@DB_TXN_SNAPSHOT
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_LOCK_DEADLOCK DbEnv::txn_begin@DB_LOCK_DEADLOCK
__APIREL__/api_cxx/txn_begin.html__OCT__DB_TXN_SYNC DbEnv::txn_begin@DB_TXN_SYNC
__APIREL__/api_cxx/txn_checkpoint.html__OCT__DB_FORCE DbEnv::txn_checkpoint@DB_FORCE
__APIREL__/api_cxx/txn_commit.html__OCT__DB_TXN_NOSYNC DbTxn::commit@DB_TXN_NOSYNC
@@ -316,3 +364,4 @@ __APIREL__/api_cxx/txn_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DbTxn::set_tim
__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__DB_STAT_CLEAR DbEnv::txn_stat@DB_STAT_CLEAR
__APIREL__/api_cxx/txn_stat.html__OCT__DB_STAT_ALL DbEnv::txn_stat@DB_STAT_ALL
+__APIREL__/api_cxx/txn_stat.html__OCT__DB_STAT_CLEAR DbEnv::txn_stat@DB_STAT_CLEAR
diff --git a/db/docs/api_cxx/rep_config.html b/db/docs/api_cxx/rep_config.html
new file mode 100644
index 000000000..ceaeb0d77
--- /dev/null
+++ b/db/docs/api_cxx/rep_config.html
@@ -0,0 +1,111 @@
+<!--$Id: rep_config.so,v 1.3 2006/07/14 23:08:59 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::rep_set_config</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::rep_set_config</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::rep_set_config(u_int32_t which, int onoff);
+<p>
+int
+DbEnv::rep_get_config(u_int32_t which, int *onoffp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_set_config</h3>
+<p>The DbEnv::rep_set_config method method configures the Berkeley DB replication
+subsystem.</p>
+<p>The database environment's replication subsystem may also be configured using the
+environment's <b>DB_CONFIG</b> file. The syntax of the entry in that
+file is a single line with the string "rep_set_config", one or more whitespace
+characters, and the method <b>which</b> parameter as a string; for example,
+"rep_set_config REP_CONF_NOWAIT".
+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::rep_set_config 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::rep_set_config method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_set_config method
+either 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>
+<dl compact>
+<dt><b>onoff</b><dd>If the <b>onoff</b> parameter is zero, the configuration flag is turned
+off. Otherwise, it is turned on.
+<dt><b>which</b><dd>The <b>which</b> parameter must be set to one of the following values:
+<dl compact>
+<dt><a name="DB_REP_CONF_BULK">DB_REP_CONF_BULK</a><dd>The replication master sends groups of records to the clients in a
+single network transfer (defaults to off).
+<dt><a name="DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a><dd>The client should delay synchronizing to a newly declared master
+(defaults to off). Clients configured in this way will remain
+unsynchronized until the application calls the <a href="../api_cxx/rep_sync.html">DbEnv::rep_sync</a> method.
+<dt><a name="DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a><dd>The replication master will not automatically re-initialize outdated
+clients (defaults to off).
+<p>The DB_REP_CONF_NOAUTOINIT flag is not supported by Replication
+Manager.</p>
+<dt><a name="DB_REP_CONF_NOWAIT">DB_REP_CONF_NOWAIT</a><dd>Berkeley DB method calls that would normally block while clients are in
+recovery will return errors immediately (defaults to off).
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::rep_set_config 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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_get_config</h3>
+<p>The DbEnv::rep_get_config method returns whether the specified <b>which</b>
+parameter is currently set or not.</p>
+<p>The DbEnv::rep_get_config method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_get_config method
+either 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>
+<dl compact>
+<dt><b>which</b><dd>The <b>which</b> parameter is the message value for which configuration
+is being checked.
+<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. If the returned <b>onoff</b> value is zero, the parameter is off;
+otherwise on.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/rep_elect.html b/db/docs/api_cxx/rep_elect.html
index 39748891c..673c62bce 100644
--- a/db/docs/api_cxx/rep_elect.html
+++ b/db/docs/api_cxx/rep_elect.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_elect.so,v 1.21 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_elect.so,v 1.24 2006/06/23 01:28:47 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,50 +23,80 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::rep_elect(int nsites, int nvotes,
- int priority, u_int32_t timeout, int *envid, u_int32_t flags);
+DbEnv::rep_elect(int nsites, int nvotes, int *envid, u_int32_t flags);
</pre></h3>
<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.</p>
+<p>The DbEnv::rep_elect method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</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>
+previous master, or the ID of the current replication site. The
+application is responsible for adjusting its relationship to the other
+database 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>
<h3>Parameters</h3>
<dl compact>
<dt><b>envid</b><dd>The <b>envid</b> parameter references memory into which
- the newly elected master's ID is copied.
-<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
-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.
-<dt><b>nvotes</b><dd>The <b>nvotes</b> parameter indicates the number of votes required by
-the application to successfully elect a new master. It must be a
-positive integer, no greater than <b>nsites</b>, or 0 if the election
-should use a simple majority of the <b>nsites</b> value as the
-requirement. A warning is given if half or fewer votes are required to
-win an election as that can potentially lead to multiple masters in the
-face of a network partition.
-<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).
-<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.
+ the newly elected master's ID is copied.
+<dt><b>nsites</b><dd>The <b>nsites</b> parameter specifies the number of replication sites
+expected to participate in the election. Once the current site has
+election information from that many sites, it will short-circuit the
+election and immediately cast its vote for a new master. The
+<b>nsites</b> parameter must be a positive integer, no less than
+<b>nvotes</b>, or 0 if the election should use the value previously set
+using the <a href="../api_cxx/rep_nsites.html">DbEnv::rep_set_nsites</a> method.
+<dt><b>nvotes</b><dd>The <b>nvotes</b> parameter specifies the minimum number of replication
+sites from which the current site must have election information, before
+the current site will cast a vote for a new master. The <b>nvotes</b>
+parameter must be a positive integer and no greater than <b>nsites</b>,
+or 0 if the election should use the value ((<b>nsites</b> / 2) + 1) as
+the <b>nvotes</b> argument.
<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
+<p>Elections are done in two parts: first, replication sites collect
+information from the other replication sites they know about, and
+second, replication sites cast their votes for a new master. The second
+phase is triggered by one of two things: either the replication site
+gets election information from <b>nsites</b> sites, or the election
+<b>timeout</b> expires. Once the second phase is triggered, the
+replication site will cast a vote for the new master of its choice if,
+and only if, the site has election information from at least
+<b>nvotes</b> sites. If a site receives <b>nvotes</b> votes for it
+to become the new master, then it will become the new master.</p>
+<p>We recommend <b>nvotes</b> be set to at least:</p>
+<blockquote><pre>(sites participating in the election / 2) + 1</pre></blockquote>
+<p>to ensure there are never more than two masters active at the same time
+even in the case of a network partition. When a network partitions, 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 of the environments will fail to find a new master, as no site
+can get <b>nvotes</b> votes.</p>
+<p>We recommend <b>nsites</b> be set to:</p>
+<blockquote><pre>number of sites in the replication group - 1</pre></blockquote>
+<p>when choosing a new master after a current master fails. This allows
+the group to reach a consensus without having to wait for the timeout
+to expire.</p>
+<p>When choosing a master from among a group of client
+sites all restarting at the same time, it makes more sense to set
+<b>nsites</b> to the total number of sites in the group, since there is no
+known missing site. Furthermore, in order to ensure the best choice
+from among sites that may take longer to boot than the local site,
+setting <b>nvotes</b> also to this same total number of sites will
+guarantee that every site in the group is considered. (See the
+<a href="../ref/rep/elect.html">Elections</a>
+section in the Berkeley DB Reference Guide for more information.)</p>
+<p>Setting <b>nsites</b> to lower values can increase the speed of an
+election, but can also result in election failure, and is usually not
+recommended.</p>
<a name="2"><!--meow--></a>
<h3>Errors</h3>
<p>The DbEnv::rep_elect method
@@ -76,7 +106,8 @@ encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<dl compact>
<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.
+complete the election in the election timeout period (see
+<a href="../api_cxx/rep_timeout.html">DbEnv::rep_set_timeout</a> method for more information).
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -87,6 +118,6 @@ complete the election in the specified <b>timeout</b> period.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bb52806f7..de5b162f8 100644
--- a/db/docs/api_cxx/rep_limit.html
+++ b/db/docs/api_cxx/rep_limit.html
@@ -1,17 +1,17 @@
-<!--$Id: rep_limit.so,v 1.18 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_limit.so,v 1.22 2006/03/15 19:39:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DbEnv::set_rep_limit</title>
+<title>Berkeley DB: DbEnv::rep_set_limit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_rep_limit</h3>
+<h3>DbEnv::rep_set_limit</h3>
</td>
<td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,20 +23,22 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_rep_limit(u_int32_t gbytes, u_int32_t bytes);
+DbEnv::rep_set_limit(u_int32_t gbytes, u_int32_t bytes);
<p>
int
-DbEnv::get_rep_limit(u_int32_t *gbytesp, u_int32_t *bytesp);
+DbEnv::rep_get_limit(u_int32_t *gbytesp, u_int32_t *bytesp);
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DbEnv::set_rep_limit</h3>
-<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
+<h3>Description: DbEnv::rep_set_limit</h3>
+<p>The DbEnv::rep_set_limit method sets a byte-count limit on the amount of data
+that will be transmitted from a site in response to a single message
+processed by the <a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a> method. The limit is not a hard limit,
+and the record that exceeds the limit is the last record to be sent.</p>
+<p>The DbEnv::rep_set_limit 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_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
+<p>The DbEnv::rep_set_limit method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_set_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.
@@ -49,10 +51,10 @@ number of bytes that will be sent in a single call to <a href="../api_cxx/rep_me
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
+<h3>Description: rep_get_limit</h3>
+<p>The DbEnv::rep_get_limit method may be called at any time during the life of the
application.</p>
-<p>The DbEnv::get_rep_limit method
+<p>The DbEnv::rep_get_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.
@@ -60,9 +62,9 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<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.
+ the additional bytes of memory in the current transmit limit is copied.
<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.
+ the gigabytes of memory in the in the current transmit limit is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -73,6 +75,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 251fefd29..f9cc9ebe5 100644
--- a/db/docs/api_cxx/rep_list.html
+++ b/db/docs/api_cxx/rep_list.html
@@ -1,5 +1,5 @@
<!--$Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,17 +10,29 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Replication and Related Methods</h3>
-<!--$Id: m4.methods,v 1.3 2004/11/02 20:04:10 bostic Exp $-->
+<!--$Id: m4.methods,v 1.8 2006/09/07 16:17:58 bostic Exp $-->
<table border=1 align=center>
-<tr><th>Replication and Related Methods</th><th>Description</th></tr>
+<tr><th>Replication Manager Methods</th><th>Description</th></tr>
+<!--DbEnv::repmgr_add_remote_site--><tr><td><a href="../api_cxx/repmgr_remote_site.html">DbEnv::repmgr_add_remote_site</a></td><td>Specify the replication manager's remote sites</td></tr>
+<!--DbEnv::repmgr_set_ack_policy--><tr><td><a href="../api_cxx/repmgr_ack_policy.html">DbEnv::repmgr_set_ack_policy</a></td><td>Specify the replication manager's client acknowledgement policy</td></tr>
+<!--DbEnv::repmgr_set_local_site--><tr><td><a href="../api_cxx/repmgr_local_site.html">DbEnv::repmgr_set_local_site</a></td><td>Specify the replication manager's local site</td></tr>
+<!--DbEnv::repmgr_site_list--><tr><td><a href="../api_cxx/repmgr_site_list.html">DbEnv::repmgr_site_list</a></td><td>List the sites and their status</td></tr>
+<!--DbEnv::repmgr_start--><tr><td><a href="../api_cxx/repmgr_start.html">DbEnv::repmgr_start</a></td><td>Start the replication manager</td></tr>
+<tr><th>Base Replication API</th><th><br></th></tr>
<!--DbEnv::rep_elect--><tr><td><a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a></td><td>Hold a replication election</td></tr>
<!--DbEnv::rep_process_message--><tr><td><a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a></td><td>Process a replication message</td></tr>
+<!--DbEnv::rep_start--><tr><td><a href="../api_cxx/rep_start.html">DbEnv::rep_start</a></td><td>Configure an environment for replication</td></tr>
+<tr><th>Additional Replication Methods</th><th><br></th></tr>
<!--DbEnv::rep_stat--><tr><td><a href="../api_cxx/rep_stat.html">DbEnv::rep_stat</a></td><td>Replication statistics</td></tr>
+<!--DbEnv::rep_sync--><tr><td><a href="../api_cxx/rep_sync.html">DbEnv::rep_sync</a></td><td>Replication synchronization</td></tr>
<tr><th>Replication Configuration</th><th><br></th></tr>
-<!--DbEnv::rep_start--><tr><td><a href="../api_cxx/rep_start.html">DbEnv::rep_start</a></td><td>Configure an environment for replication</td></tr>
-<!--DbEnv::set_rep_limit--><tr><td><a href="../api_cxx/rep_limit.html">DbEnv::set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
-<!--DbEnv::set_rep_transport--><tr><td><a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a></td><td>Configure replication transport</td></tr>
+<!--DbEnv::rep_set_config--><tr><td><a href="../api_cxx/rep_config.html">DbEnv::rep_set_config</a></td><td>Configure the replication subsystem</td></tr>
+<!--DbEnv::rep_set_limit--><tr><td><a href="../api_cxx/rep_limit.html">DbEnv::rep_set_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<!--DbEnv::rep_set_nsites--><tr><td><a href="../api_cxx/rep_nsites.html">DbEnv::rep_set_nsites</a></td><td>Configure replication group site count</td></tr>
+<!--DbEnv::rep_set_priority--><tr><td><a href="../api_cxx/rep_priority.html">DbEnv::rep_set_priority</a></td><td>Configure replication site priority</td></tr>
+<!--DbEnv::rep_set_timeout--><tr><td><a href="../api_cxx/rep_timeout.html">DbEnv::rep_set_timeout</a></td><td>Configure replication timeouts</td></tr>
+<!--DbEnv::rep_set_transport--><tr><td><a href="../api_cxx/rep_transport.html">DbEnv::rep_set_transport</a></td><td>Configure replication transport callback</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 aa4d39ef5..d05a31b3a 100644
--- a/db/docs/api_cxx/rep_message.html
+++ b/db/docs/api_cxx/rep_message.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_message.so,v 1.30 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_message.so,v 1.38 2006/06/24 00:33:22 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,6 +29,11 @@ DbEnv::rep_process_message(Dbt *control, Dbt *rec, int *envid, DbLsn *ret_lsnp)
<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>The DbEnv::rep_process_message method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</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
@@ -49,13 +54,25 @@ 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>
+<dt><a name="DB_REP_IGNORE">DB_REP_IGNORE</a><dd>
+<p>The DbEnv::rep_process_message method will return DB_REP_IGNORE if this message cannot be processed.
+This is an indication that this message is irrelevant to the current
+replication state (for example, an old message
+from a previous generation arrives and is processed late).
+</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>
+<dt><a name="DB_REP_JOIN_FAILURE">DB_REP_JOIN_FAILURE</a><dd>
+<p>The DbEnv::rep_process_message method will return DB_REP_JOIN_FAILURE if a new master has been chosen but the client is unable to synchronize
+with the new master (possibly because the client has been configured
+with the <a href="../api_cxx/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a> flag to turn-off automatic
+internal initialization).
+</p>
<dt><a name="DB_REP_NEWMASTER">DB_REP_NEWMASTER</a><dd>
-<p>The DbEnv::rep_process_message method will return DB_REP_NEWMASTER if a new master has been elected.
+<p>The DbEnv::rep_process_message method will return DB_REP_NEWMASTER if a new master has been chosen.
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
@@ -71,14 +88,9 @@ channel with this new environment.
<dt><a name="DB_REP_NOTPERM">DB_REP_NOTPERM</a><dd>
<p>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>
-<dt><a name="DB_REP_STARTUPDONE">DB_REP_STARTUPDONE</a><dd>
-<p>The DbEnv::rep_process_message method will return DB_REP_STARTUPDONE if the system detects that a client completed startup synchronization.
-The client application knows that this client is now processing
-live log records received from the master.
+The LSN of this record is returned. The application should take
+whatever action is deemed necessary to retain its recoverability
+characteristics.
</p>
</dl>
<p>Unless otherwise specified, the DbEnv::rep_process_message method
@@ -97,7 +109,7 @@ corresponds to the environment that sent the message to be processed
information).
<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.
-<dt><b>ret_lsn</b><dd>If DbEnv::rep_process_message method returns DB_REP_NOTPERM then the <b>ret_lsnp</b>
+<dt><b>ret_lsnp</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
@@ -114,6 +126,6 @@ cases the value of <b>ret_lsnp</b> is undefined.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_nsites.html b/db/docs/api_cxx/rep_nsites.html
new file mode 100644
index 000000000..bfdc3c35e
--- /dev/null
+++ b/db/docs/api_cxx/rep_nsites.html
@@ -0,0 +1,79 @@
+<!--$Id: rep_nsites.so,v 1.2 2006/06/23 01:28:47 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::rep_set_nsites</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::rep_set_nsites</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::rep_set_nsites(int nsites);
+<p>
+int
+DbEnv::rep_get_nsites(int *nsitesp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_set_nsites</h3>
+<p>The DbEnv::rep_set_nsites method specifies the total number of sites
+in a replication group.</p>
+<p>The DbEnv::rep_set_nsites method is typically called by applications which
+use the Berkeley DB library "replication manager" support. (However, see
+also the <a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a> man page, the description of the <b>nsites</b>
+parameter.)</p>
+<p>The DbEnv::rep_set_nsites 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::rep_set_nsites method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_set_nsites method
+either 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>
+<dl compact>
+<dt><b>nsites</b><dd>A positive integer specifying the total number of sites in the replication
+group.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_get_nsites</h3>
+<p>The DbEnv::rep_get_nsites method returns the total number of sites in the replication group.</p>
+<p>The DbEnv::rep_get_nsites method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_get_nsites method
+either 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>
+<dl compact>
+<dt><b>nsitesp</b><dd>The DbEnv::rep_get_nsites method returns the
+total number of sites in the replication group in <b>nsitesp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/rep_priority.html b/db/docs/api_cxx/rep_priority.html
new file mode 100644
index 000000000..98e464bbf
--- /dev/null
+++ b/db/docs/api_cxx/rep_priority.html
@@ -0,0 +1,77 @@
+<!--$Id: rep_priority.so,v 1.1 2006/03/15 19:39:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::rep_set_priority</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::rep_set_priority</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::rep_set_priority(int priority);
+int
+DbEnv::rep_get_priority(int *priorityp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_set_priority</h3>
+<p>The DbEnv::rep_set_priority method specifies the database environment's
+priority in replication group elections. The priority must be a
+positive integer, or 0 if this environment cannot be a replication
+group master.</p>
+<p>The DbEnv::rep_set_priority 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::rep_set_priority method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_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>
+<dl compact>
+<dt><b>priority</b><dd>The priority of this database environment in the replication group. The
+priority must be a positive integer, or 0 if this environment cannot be
+a replication group master. (See <a href="../ref/rep/pri.html">Replication environment priorities</a> for more information).
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_get_priority</h3>
+<p>The DbEnv::rep_get_priority method returns the database environment priority.</p>
+<p>The DbEnv::rep_get_priority method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_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>
+<dl compact>
+<dt><b>priorityp</b><dd>The DbEnv::rep_get_priority method returns the
+database environment priority in <b>priorityp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1dd14500d..c9dc432f0 100644
--- a/db/docs/api_cxx/rep_start.html
+++ b/db/docs/api_cxx/rep_start.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_start.so,v 1.16 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_start.so,v 1.17 2006/03/15 19:39:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,15 +28,20 @@ DbEnv::rep_start(Dbt *cdata, u_int32_t flags);
<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.</p>
+or master in a group of replicated database environments.</p>
+<p>The DbEnv::rep_start method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</p>
+<p>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="../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>
+to send replication messages by calling the <a href="../api_cxx/rep_transport.html">DbEnv::rep_set_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
@@ -44,11 +49,11 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<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.
+<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 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.
<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to one of the following values:
<dl compact>
<dt><a name="DB_REP_CLIENT">DB_REP_CLIENT</a><dd>Configure the environment as a replication client.
@@ -63,7 +68,7 @@ encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<dl compact>
<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>;
+a replication group by a call to <a href="../api_cxx/rep_transport.html">DbEnv::rep_set_transport</a>;
the database environment was not already opened; or if an
invalid flag value or parameter was specified.
</dl>
@@ -76,6 +81,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3fcc60930..0844a45de 100644
--- a/db/docs/api_cxx/rep_stat.html
+++ b/db/docs/api_cxx/rep_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: rep_stat.so,v 10.32 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_stat.so,v 10.39 2005/11/11 19:00:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -43,19 +43,45 @@ the memory reference; references inside the returned memory need not be
individually freed.</p>
<p>The following DB_REP_STAT fields will be filled in:</p>
<dl compact>
-<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, 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 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_bulk_fills;<dd>The number of times the bulk buffer filled up, forcing the buffer content
+to be sent.
+<dt>u_int32_t st_bulk_overflows;<dd>The number of times a record was bigger than the entire bulk buffer,
+and therefore had to be sent as a singleton.
+<dt>u_int32_t st_bulk_records;<dd>The number of records added to a bulk buffer.
+<dt>u_int32_t st_bulk_transfers;<dd>The number of bulk buffers transferred (via a call to the
+application's <b>send</b> function).
+<dt>u_int32_t st_client_rerequests;<dd>The number of times this client site received a "re-request" message,
+indicating that a request it previously sent to another client could
+not be serviced by that client. (Compare to
+<b>st_client_svc_miss</b>.)
+<dt>u_int32_t st_client_svc_miss;<dd>The number of "request" type messages received by this client that
+could not be processed, forcing the originating requester to try sending
+the request to the master (or another client).
+<dt>u_int32_t st_client_svc_req;<dd>The number of "request" type messages received by this client.
+("Request" messages are usually sent from a client to the master, but a
+message marked with the <a href="../api_cxx/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a> flag in the invocation
+of the application's <b>send</b> function may be sent to another client
+instead.)
<dt>u_int32_t st_dupmasters;<dd>The number of duplicate master conditions detected.
+<dt>u_int32_t st_egen;<dd>The current election generation number.
+<dt>u_int32_t st_election_cur_winner;<dd>The election winner.
+<dt>u_int32_t st_election_gen;<dd>The election generation number.
+<dt>DB_LSN st_election_lsn;<dd>The maximum LSN of election winner.
+<dt>u_int32_t st_election_nsites;<dd>The number sites responding to this site during the last election.
+<dt>u_int32_t st_election_nvotes;<dd>The number of votes required in the last election.
+<dt>u_int32_t st_election_priority;<dd>The election priority.
+<dt>u_int32_t st_election_sec;<dd>The number of seconds the last election took (the total election time
+is <b>st_election_sec</b> plus <b>st_election_usec</b>).
+<dt>u_int32_t st_election_status;<dd>The current election phase (0 if no election is in progress).
+<dt>u_int32_t st_election_tiebreaker;<dd>The election tiebreaker value.
+<dt>u_int32_t st_election_usec;<dd>The number of microseconds the last election took (the total election
+time is <b>st_election_sec</b> plus <b>st_election_usec</b>).
+<dt>u_int32_t st_election_votes;<dd>The number of votes received in the last election.
+<dt>u_int32_t st_elections;<dd>The number of elections held.
+<dt>u_int32_t st_elections_won;<dd>The number of elections won.
<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_egen;<dd>The current election generation number.
<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.
@@ -70,31 +96,28 @@ being waited for, or 0 if no log 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>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>u_int32_t st_next_pg;<dd>The next page number we expect to receive.
-<dt>u_int32_t st_waiting_pg;<dd>The page number of the first page we have after missing pages
-being waited for, or 0 if no pages are currently missing.
+<dt>int st_nsites;<dd>The number of sites used in the last election.
+<dt>u_int32_t 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_cxx/rep_message.html">DbEnv::rep_process_message</a>.
+<dt>u_int32_t st_outdated;<dd>The number of outdated conditions detected.
<dt>u_int32_t st_pg_duplicated;<dd>The number of duplicate pages received.
<dt>u_int32_t st_pg_records;<dd>The number of pages received and stored.
<dt>u_int32_t st_pg_requested;<dd>The number of pages missed and requested from the master.
<dt>u_int32_t st_startup_complete;<dd>The client site has completed its startup procedures and is now
handling live records from the master.
+<dt>u_int32_t st_status;<dd>The current replication mode. Set to <a href="../api_cxx/repmgr_start.html#DB_REP_MASTER">DB_REP_MASTER</a> if the
+environment is a replication master, <a href="../api_cxx/repmgr_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a> if the
+environment is a replication client, or 0 if replication is not
+configured.
<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.
-<dt>u_int32_t st_elections_won;<dd>The number of elections won.
-<dt>u_int32_t st_election_status;<dd>The current election phase (0 if no election is in progress).
-<dt>u_int32_t st_election_cur_winner;<dd>The election winner.
-<dt>u_int32_t st_election_gen;<dd>The election generation number.
-<dt>DB_LSN st_election_lsn;<dd>The maximum LSN of election winner.
-<dt>u_int32_t st_election_nsites;<dd>The number sites expected to participate in elections.
-<dt>u_int32_t st_election_nvotes;<dd>The number of votes required to complete the election.
-<dt>u_int32_t 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_cxx/rep_message.html">DbEnv::rep_process_message</a>.
-<dt>u_int32_t st_election_priority;<dd>The election priority.
-<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.
+<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_waiting_pg;<dd>The page number of the first page we have after missing pages
+being waited for, or 0 if no pages are currently missing.
</dl>
<p>The DbEnv::rep_stat method
either returns a non-zero error value
@@ -109,7 +132,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DbEnv::rep_stat method
@@ -123,7 +146,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DbEnv::rep_stat_print</h3>
-<p>The DbEnv::rep_stat_print method returns the
+<p>The DbEnv::rep_stat_print method displays the
replication subsystem statistical information, as described for the DbEnv::rep_stat method.
The information is printed to a specified output channel (see the
<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or passed to an
@@ -138,10 +161,11 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -153,6 +177,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_sync.html b/db/docs/api_cxx/rep_sync.html
new file mode 100644
index 000000000..23bc82f79
--- /dev/null
+++ b/db/docs/api_cxx/rep_sync.html
@@ -0,0 +1,63 @@
+<!--$Id: rep_sync.so,v 1.9 2006/07/12 20:32:35 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::rep_sync</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::rep_sync</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::rep_sync(u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_sync</h3>
+<p>The DbEnv::rep_sync method forces master synchronization to begin for this
+client. This method is the other half of setting the
+<a href="../api_cxx/rep_config.html#DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a> flag via the <a href="../api_cxx/rep_config.html">DbEnv::rep_set_config</a> method.</p>
+<p>If an application has configured delayed master synchronization, the
+application must synchronize explicitly (otherwise the client will
+remain out-of-date and will ignore all database changes forwarded from
+the replication group master). The DbEnv::rep_sync method may be called any
+time after the client application learns that the new master has been
+established, either by receiving a <a href="../api_cxx/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a> event
+notification, or from a <a href="../api_cxx/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a> return code from
+<a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a>.</p>
+<p>The DbEnv::rep_sync 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::rep_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>
+<dl compact>
+<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>
+<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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/rep_timeout.html b/db/docs/api_cxx/rep_timeout.html
new file mode 100644
index 000000000..ebe203f09
--- /dev/null
+++ b/db/docs/api_cxx/rep_timeout.html
@@ -0,0 +1,102 @@
+<!--$Id: rep_timeout.so,v 1.3 2006/06/30 23:05:16 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::rep_set_timeout</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::rep_set_timeout</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::rep_set_timeout(int which, u_int32_t timeout);
+<p>
+int
+DbEnv::rep_get_timeout(int which, u_int32_t *timeoutp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_set_timeout</h3>
+<p>The DbEnv::rep_set_timeout method specifies a variety of replication timeout
+values.</p>
+<p>The DbEnv::rep_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>
+<p>The DbEnv::rep_set_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_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>
+<dl compact>
+<dt><b>which</b><dd>The <b>which</b> parameter must be set to one of the following values:
+<dl compact>
+<dt><a name="DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a><dd>Configure the amount of time the replication manager's transport
+function waits to collect enough acknowledgments from replication group
+clients, before giving up and returning a failure indication. The
+default wait time is 1 second.
+<dt><a name="DB_REP_ELECTION_TIMEOUT">DB_REP_ELECTION_TIMEOUT</a><dd>The timeout period for an election. The default timeout is 2 seconds.
+<dt><a name="DB_REP_ELECTION_RETRY">DB_REP_ELECTION_RETRY</a><dd>Configure the amount of time the replication manager will wait before
+retrying a failed election. The default wait time is 10 seconds.
+<dt><a name="DB_REP_CONNECTION_RETRY">DB_REP_CONNECTION_RETRY</a><dd>Configure the amount of time the replication manager will wait before
+trying to re-establish a connection to another site after a communication
+failure. The default wait time is 30 seconds.
+</dl>
+<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>
+<h3>Errors</h3>
+<p>The DbEnv::rep_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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_get_timeout</h3>
+<p>The DbEnv::rep_get_timeout method returns the timeout value for the specified
+<b>which</b> parameter.</p>
+<p>The DbEnv::rep_get_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::rep_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>
+<dl compact>
+<dt><b>which</b><dd>The <b>which</b> parameter is the timeout value for which the value
+is being returned.
+<dt><b>timeoutp</b><dd>The <b>timeoutp</b> parameter references memory into which
+ the timeout value of the specified <b>which</b> parameter is copied. The returned <b>timeout</b> value is in microseconds.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2d6d28773..8b6928618 100644
--- a/db/docs/api_cxx/rep_transport.html
+++ b/db/docs/api_cxx/rep_transport.html
@@ -1,17 +1,17 @@
-<!--$Id: rep_transport.so,v 1.31 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: rep_transport.so,v 1.35 2006/06/05 23:03:53 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DbEnv::set_rep_transport</title>
+<title>Berkeley DB: DbEnv::rep_set_transport</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::set_rep_transport</h3>
+<h3>DbEnv::rep_set_transport</h3>
</td>
<td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a>
@@ -23,21 +23,26 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_rep_transport(int envid,
+DbEnv::rep_set_transport(int envid,
int (*send)(DB_ENV *dbenv,
const Dbt *control, const Dbt *rec, const DbLsn *lsnp,
int envid, u_int32_t flags));
</pre></h3>
<hr size=1 noshade>
-<h3>Description: DbEnv::set_rep_transport</h3>
-<p>The DbEnv::set_rep_transport method initializes the communication infrastructure
+<h3>Description: DbEnv::rep_set_transport</h3>
+<p>The DbEnv::rep_set_transport method initializes the communication infrastructure
for a database environment participating in a replicated application.</p>
-<p>The DbEnv::set_rep_transport method configures operations performed using the specified
+<p>The DbEnv::rep_set_transport method is not called by most replication
+applications. It should only be called by applications implementing
+their own network transport layer, explicitly holding replication group
+elections and handling replication messages outside of the replication
+manager framework.</p>
+<p>The DbEnv::rep_set_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
+<p>The DbEnv::rep_set_transport method may be called at any time during the life of the
application.</p>
-<p>The DbEnv::set_rep_transport method
+<p>The DbEnv::rep_set_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.
@@ -45,7 +50,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<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
+a non-negative integer and uniquely identify this Berkeley DB database environment
(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
information).
<dt><b>send</b><dd>The <b>send</b> callback function is used to transmit data using the
@@ -74,6 +79,8 @@ cases, the sending site should not be asked to process the message.</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:
<dl compact>
+<dt><a name="DB_REP_ANYWHERE">DB_REP_ANYWHERE</a><dd>The message is a client request that can be satisfied by another client
+as well as by the master.
<dt><a name="DB_REP_NOBUFFER">DB_REP_NOBUFFER</a><dd>The record being sent should be transmitted immediately and not buffered
or delayed.
<dt><a name="DB_REP_PERMANENT">DB_REP_PERMANENT</a><dd>The record being sent is critical for maintaining database integrity
@@ -81,20 +88,25 @@ or delayed.
application should take appropriate action to enforce the reliability
guarantees it has chosen, such as waiting for acknowledgement from one
or more clients.
+<dt><a name="DB_REP_REREQUEST">DB_REP_REREQUEST</a><dd>The message is a client request that has already been made and to which
+no response was received.
</dl>
</dl>
<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>
-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>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>
+<p>Berkeley DB is not re-entrant. Callback functions should not attempt to make
+library calls (for example, to release locks or close open handles).
+Re-entering Berkeley DB is not guaranteed to work correctly, and the results
+are undefined.</p>
</dl>
<h3>Errors</h3>
-<p>The DbEnv::set_rep_transport method
+<p>The DbEnv::rep_set_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
@@ -112,6 +124,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/repmgr_ack_policy.html b/db/docs/api_cxx/repmgr_ack_policy.html
new file mode 100644
index 000000000..25dda52a5
--- /dev/null
+++ b/db/docs/api_cxx/repmgr_ack_policy.html
@@ -0,0 +1,102 @@
+<!--$Id: repmgr_ack_policy.so,v 1.5 2006/09/07 19:26:44 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::repmgr_set_ack_policy</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::repmgr_set_ack_policy</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::repmgr_set_ack_policy(int ack_policy);
+<p>
+int
+DbEnv::repmgr_get_ack_policy(int *ack_policyp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::repmgr_set_ack_policy</h3>
+<p>The DbEnv::repmgr_set_ack_policy method specifies how master and client sites
+will handle acknowledgment of replication messages which are necessary
+for "permanent" records. The current implementation requires all
+sites in a replication group configure the same acknowledgement
+policy.</p>
+<p>The DbEnv::repmgr_set_ack_policy 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::repmgr_set_ack_policy method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::repmgr_set_ack_policy method
+either 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>
+<dl compact>
+<dt><b>ack_policy</b><dd>The <b>ack_policy</b> parameter must be set to one of the following
+values:
+<dl compact>
+<dt><a name="DB_REPMGR_ACKS_ALL">DB_REPMGR_ACKS_ALL</a><dd>The master should wait until all replication clients have acknowledged
+each permanent replication message.
+<dt><a name="DB_REPMGR_ACKS_ALL_PEERS">DB_REPMGR_ACKS_ALL_PEERS</a><dd>The master should wait until all electable peers have acknowledged each
+permanent replication message (where "electable peer" means a client
+capable of being subsequently elected master of the replication
+group).
+<dt><a name="DB_REPMGR_ACKS_NONE">DB_REPMGR_ACKS_NONE</a><dd>The master should not wait for any client replication message
+acknowledgments.
+<dt><a name="DB_REPMGR_ACKS_ONE">DB_REPMGR_ACKS_ONE</a><dd>The master should wait until at least one client site has acknowledged
+each permanent replication message.
+<dt><a name="DB_REPMGR_ACKS_ONE_PEER">DB_REPMGR_ACKS_ONE_PEER</a><dd>The master should wait until at least one electable peer has
+acknowledged each permanent replication message (where "electable peer"
+means a client capable of being subsequently elected master of the
+replication group).
+<dt><a name="DB_REPMGR_ACKS_QUORUM">DB_REPMGR_ACKS_QUORUM</a><dd>The master should wait until it has received acknowledgements from the
+minimum number of electable peers sufficient to ensure that the effect
+of the permanent record remains durable if an election is held (where
+"electable peer" means a client capable of being subsequently elected
+master of the replication group). This is the default acknowledgement
+policy.
+</dl>
+<p>Waiting for client acknowledgements is always limited by the
+<a href="../api_cxx/rep_timeout.html#DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a> specified by <a href="../api_cxx/rep_timeout.html">DbEnv::rep_set_timeout</a>.</p>
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::repmgr_get_ack_policy</h3>
+<p>The DbEnv::repmgr_get_ack_policy method returns the replication manager's client acknowledgment policy.</p>
+<p>The DbEnv::repmgr_get_ack_policy method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::repmgr_get_ack_policy method
+either 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>
+<dl compact>
+<dt><b>ack_policyp</b><dd>The DbEnv::repmgr_get_ack_policy method returns the
+replication manager's client acknowledgment policy in <b>ack_policyp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/repmgr_local_site.html b/db/docs/api_cxx/repmgr_local_site.html
new file mode 100644
index 000000000..98059f90d
--- /dev/null
+++ b/db/docs/api_cxx/repmgr_local_site.html
@@ -0,0 +1,56 @@
+<!--$Id: repmgr_local_site.so,v 1.2 2006/04/27 18:07:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::repmgr_set_local_site</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::repmgr_set_local_site</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::repmgr_set_add_site(const char *host, u_int port, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::repmgr_set_local_site</h3>
+<p>The DbEnv::repmgr_set_local_site method specifies the host identification
+string and port number for the local system.</p>
+<p>The DbEnv::repmgr_set_local_site method must be called before the <a href="../api_cxx/repmgr_start.html">DbEnv::repmgr_start</a> method has been
+called.</p>
+<p>The DbEnv::repmgr_set_local_site method
+either 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>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<dt><b>host</b><dd>The site's host identification string, generally a TCP/IP host name.
+<dt><b>port</b><dd>The port number on which the local site is listening.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/repmgr_remote_site.html b/db/docs/api_cxx/repmgr_remote_site.html
new file mode 100644
index 000000000..7bf3e0782
--- /dev/null
+++ b/db/docs/api_cxx/repmgr_remote_site.html
@@ -0,0 +1,68 @@
+<!--$Id: repmgr_remote_site.so,v 1.5 2006/09/08 18:33:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::repmgr_add_remote_site</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::repmgr_add_remote_site</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::repmgr_add_remote_site(const char *host, u_int port, int *eidp, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::repmgr_add_remote_site</h3>
+<p>The DbEnv::repmgr_add_remote_site method adds a new replication site to the
+replication manager's list of known sites. It is not necessary for
+all sites in a replication group to know about all other sites in the
+group.</p>
+<p>The DbEnv::repmgr_add_remote_site method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::repmgr_add_remote_site method
+either 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>
+<dl compact>
+<dt><b>eidp</b><dd>If <b>eidp</b> is non-NULL, the
+environment ID assigned to the remote site is
+returned in the memory location referenced by <b>eidp</b>.
+<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:
+<dl compact>
+<dt><a name="DB_REPMGR_PEER">DB_REPMGR_PEER</a><dd>Specifying the DB_REPMGR_PEER flag configures client-to-client
+synchronization with the specified remote site.
+<p>Currently, the replication manager framework only supports a single client
+peer, and the last specified peer is used.</p>
+</dl>
+<dt><b>host</b><dd>The site's host identification string, generally a TCP/IP host name.
+<dt><b>port</b><dd>The port number on which the remote site is receiving.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/repmgr_site_list.html b/db/docs/api_cxx/repmgr_site_list.html
new file mode 100644
index 000000000..1217cb903
--- /dev/null
+++ b/db/docs/api_cxx/repmgr_site_list.html
@@ -0,0 +1,77 @@
+<!--$Id: repmgr_site_list.so,v 1.7 2006/09/11 16:57:54 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::repmgr_site_list</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::repmgr_site_list</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::repmgr_site_list(u_int *countp, DB_REPMGR_SITE **listp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::repmgr_site_list</h3>
+<p>The DbEnv::repmgr_site_list method returns the status of the sites currently
+known by the replication manager.</p>
+<p>The DbEnv::repmgr_site_list method creates a statistical structure of type
+DB_REPMGR_SITE 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_REPMGR_SITE fields will be filled in:</p>
+<dl compact>
+<dt>int eid;<dd>Environment ID assigned by the replication manager.
+This is the same value that is passed to the application's
+event notification function for the <a href="../api_cxx/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a> event.
+<dt>char host[];<dd>Nul-terminated host name.
+<dt>u_int port;<dd>TCP/IP port number.
+<dt>u_int32_t status;<dd>One of the following list of constants: <a name="DB_REPMGR_CONNECTED">DB_REPMGR_CONNECTED</a>,
+<a name="DB_REPMGR_DISCONNECTED">DB_REPMGR_DISCONNECTED</a>.
+</dl>
+<p>The DbEnv::repmgr_site_list method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::repmgr_site_list method
+either 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>
+<dl compact>
+<dt><b>countp</b><dd>A count of the returned structures will be stored into the memory
+referenced by <b>countp</b>.
+<dt><b>listp</b><dd>A reference to an array of structures will be stored into the memory
+referenced by <b>listp</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/rep_list.html">Replication and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/repmgr_start.html b/db/docs/api_cxx/repmgr_start.html
new file mode 100644
index 000000000..9d34984a9
--- /dev/null
+++ b/db/docs/api_cxx/repmgr_start.html
@@ -0,0 +1,97 @@
+<!--$Id: repmgr_start.so,v 1.3 2006/07/14 23:08:18 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbEnv::repmgr_start</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbEnv::repmgr_start</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbEnv::repmgr_start(int nthreads, u_int32_t flags);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbEnv::repmgr_start</h3>
+<p>The DbEnv::repmgr_start method starts the replication manager.</p>
+<p>There are two ways to build Berkeley DB replication applications: the most
+common approach is to use the Berkeley DB library "replication manager"
+support, where the Berkeley DB library manages the replication group,
+including network transport, all replication message processing and
+acknowledgment, and group elections. Applications using the replication
+manager support generally make the following calls:</p>
+<ol>
+<p><li>Call <a href="../api_cxx/repmgr_local_site.html">DbEnv::repmgr_set_local_site</a> to configure the local site in the
+replication group.
+<p><li>Call <a href="../api_cxx/repmgr_remote_site.html">DbEnv::repmgr_add_remote_site</a> to configure the remote site(s) in
+the replication group.
+<p><li>Call <a href="../api_cxx/repmgr_ack_policy.html">DbEnv::repmgr_set_ack_policy</a> to configure the message
+acknowledgment policy which provides the replication group's
+transactional needs.
+<p><li>Call <a href="../api_cxx/rep_priority.html">DbEnv::rep_set_priority</a> to configure the local site's election
+priority.
+<p><li>Call DbEnv::repmgr_start to start the replication application.
+</ol>
+<p>For more information on building replication manager applications,
+please see the "Replication Manager Getting Started Guide" included in
+the Berkeley DB documentation.</p>
+<p>Applications with special needs (for example, applications using network
+protocols not supported by the Berkeley DB replication manager), must perform
+additional configuration and call other Berkeley DB replication methods. For
+more information on building advanced replication applications, please
+see the "Advanced Replication Applications Guide" included in the Berkeley DB
+documentation.</p>
+<p>The DbEnv::repmgr_start 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::repmgr_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>
+<dl compact>
+<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to one of the following values:
+<dl compact>
+<dt><a name="DB_REP_MASTER">DB_REP_MASTER</a><dd>Start as a master site, and do not call for an election. Note there
+must never be more than a single master in any replication group, and
+only one site at a time should ever be started with the
+DB_REP_MASTER flag specified.
+<dt><a name="DB_REP_CLIENT">DB_REP_CLIENT</a><dd>Start as a client site, and do not call for an election.
+<dt><a name="DB_REP_ELECTION">DB_REP_ELECTION</a><dd>Start as a client, and call for an election if no master is found.
+<dt><a name="DB_REP_FULL_ELECTION">DB_REP_FULL_ELECTION</a><dd>Start as a client, and call for an election if no master is found.
+<p>The <a href="../api_cxx/repmgr_start.html#DB_REP_FULL_ELECTION">DB_REP_FULL_ELECTION</a> flag configures a single special
+election on startup, where a master will only be confirmed if all
+members of the replication group vote. Subsequent elections will revert
+to only requiring a simple majority to elect a new master.</p>
+</dl>
+<dt><b>nthreads</b><dd>Specify the number of threads of control created and dedicated to processing
+replication messages. In addition to these message processing threads,
+the replication manager creates and manages a few of its own threads of
+control.
+</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/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a3f4a46a9..b10d2a956 100644
--- a/db/docs/api_cxx/runrec_class.html
+++ b/db/docs/api_cxx/runrec_class.html
@@ -1,5 +1,5 @@
<!--$Id: runrec_class.so,v 10.19 2004/08/13 03:38:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ occurs, recovery should be performed.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_class.html b/db/docs/api_cxx/seq_class.html
index 2241514a5..8cfbfca06 100644
--- a/db/docs/api_cxx/seq_class.html
+++ b/db/docs/api_cxx/seq_class.html
@@ -1,5 +1,5 @@
<!--$Id: seq_class.so,v 1.12 2004/10/18 19:46:31 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -67,6 +67,6 @@ DbSequence
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_close.html b/db/docs/api_cxx/seq_close.html
index fca3d7c35..42f64fc64 100644
--- a/db/docs/api_cxx/seq_close.html
+++ b/db/docs/api_cxx/seq_close.html
@@ -1,5 +1,5 @@
<!--$Id: seq_close.so,v 1.2 2004/08/13 03:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,6 +59,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_get.html b/db/docs/api_cxx/seq_get.html
index dd5934093..bc8efc2da 100644
--- a/db/docs/api_cxx/seq_get.html
+++ b/db/docs/api_cxx/seq_get.html
@@ -1,5 +1,5 @@
-<!--$Id: seq_get.so,v 1.8 2004/08/28 23:44:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: seq_get.so,v 1.11 2005/08/09 14:23:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,15 +34,15 @@ values in the sequence handle then they will be returned. Otherwise the
next value will be fetched from the database and incremented
(decremented) by enough to cover the <b>delta</b> and the next batch
of cached values.</p>
-<p>If the underlying database handle was opened in a transaction then
-either the <b>txnid</b> parameter must be a valid transaction handle or
-DB_AUTO_COMMIT must be specified. The <b>txnid</b> handle must be NULL
-if the sequence handle was opened with a non-zero cache size.</p>
<p>For maximum concurrency a non-zero cache size should be specified prior
-to opening the sequence handle and DB_AUTO_COMMIT | DB_TXN_NOSYNC should
-be specified each DbSequence::get method call.</p>
-<p>The DbSequence::get method will return EINVAL if the record in the database is not a valid sequence record,
-or the sequences have overflowed is range.
+to opening the sequence handle and <a href="../api_cxx/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> should be
+specified for each DbSequence::get method call.</p>
+<p>By default, sequence ranges do not wrap; to cause the sequence to wrap
+around the beginning or end of its range, specify the <a href="../api_cxx/seq_set_flags.html#DB_SEQ_WRAP">DB_SEQ_WRAP</a>
+flag to the <a href="../api_cxx/seq_set_flags.html">DbSequence::set_flags</a> method.</p>
+<p>The DbSequence::get method will return EINVAL if the record in the database is not a valid sequence
+record, or the sequence has reached the beginning or end of its range
+and is not configured to wrap.
</p>
<h3>Parameters</h3>
<dl compact>
@@ -50,17 +50,32 @@ or the sequences have overflowed is range.
<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:
<dl compact>
-<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>If the database
-must be updated the update will be enclosed in a transaction
-and will be recoverable.
-<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If a DB_AUTO_COMMIT
-triggers a transaction, do not synchronously flush the log.
+<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If the operation is implicitly transaction protected (the <b>txnid</b>
+argument is NULL but the operation occurs to a transactional database),
+do not synchronously flush the log when the transaction commits.
</dl>
<dt><b>retp</b><dd><b>retp</b> points to the memory to hold the return value from
the sequence.
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected. No <b>txnid</b> handle may be specified if the sequence handle was
+opened with a non-zero cache size.
+<p>If the underlying database handle was opened in a transaction, calling
+DbSequence::get may result in changes to the sequence object; these
+changes will be automatically committed in a transaction internal to the
+Berkeley DB library. If the thread of control calling DbSequence::get has
+an active transaction, which holds locks on the same database as the
+one in which the sequence object is stored, it is possible for a thread
+of control calling DbSequence::get to self-deadlock because the active
+transaction's locks conflict with the internal transaction's locks.
+For this reason, it is often preferable for sequence objects to be
+stored in their own database.</p>
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -71,6 +86,6 @@ the <b>txnid</b> parameter is a transaction handle returned from
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_initial_value.html b/db/docs/api_cxx/seq_initial_value.html
new file mode 100644
index 000000000..95af3518e
--- /dev/null
+++ b/db/docs/api_cxx/seq_initial_value.html
@@ -0,0 +1,64 @@
+<!--$Id: seq_initial_value.so,v 1.6 2004/11/29 15:30:23 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbSequence::initial_value</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbSequence::initial_value</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbSequence::initial_value(db_seq_t value);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbSequence::initial_value</h3>
+<p>Set the initial value for a sequence. This call is only effective when
+the sequence is being created.</p>
+<p>The DbSequence::initial_value method may not be called after the
+<a href="../api_cxx/seq_open.html">DbSequence::open</a> method is called.</p>
+<p>The DbSequence::initial_value method
+either 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>
+<dl compact>
+<dt><b>value</b><dd>The initial value to set.
+</dl>
+<h3>Errors</h3>
+<p>The DbSequence::initial_value 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>
+<dl compact>
+<dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/seq_class.html">DbSequence</a>
+<h3>See Also</h3>
+<a href="../api_cxx/seq_list.html">Sequences and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/seq_list.html b/db/docs/api_cxx/seq_list.html
index fd7372e18..72430a117 100644
--- a/db/docs/api_cxx/seq_list.html
+++ b/db/docs/api_cxx/seq_list.html
@@ -1,5 +1,5 @@
<!--$Id: seq_list.so,v 1.2 2004/08/18 02:34:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Sequences and Related Methods</h3>
-<!--$Id: m4.methods,v 1.6 2004/11/02 20:04:10 bostic Exp $-->
+<!--$Id: m4.methods,v 1.7 2004/11/29 15:34:22 bostic Exp $-->
<table border=1 align=center>
<tr><th>Sequences and Related Methods</th><th>Description</th></tr>
<!--DbSequence::--><tr><td><a href="../api_cxx/seq_class.html">DbSequence</a></td><td>Create a sequence handle</td></tr>
@@ -18,7 +18,7 @@
<!--DbSequence::get--><tr><td><a href="../api_cxx/seq_get.html">DbSequence::get</a></td><td>Get the next sequence element(s)</td></tr>
<!--DbSequence::get_dbp--><tr><td><a href="../api_cxx/seq_open.html">DbSequence::get_dbp</a></td><td>Return a handle for the underlying sequence database</td></tr>
<!--DbSequence::get_key--><tr><td><a href="../api_cxx/seq_open.html">DbSequence::get_key</a></td><td>Return the key for a sequence</td></tr>
-<!--DbSequence::init_value--><tr><td><a href="../api_cxx/seq_init_value.html">DbSequence::init_value</a></td><td>Set the initial value of a sequence</td></tr>
+<!--DbSequence::initial_value--><tr><td><a href="../api_cxx/seq_initial_value.html">DbSequence::initial_value</a></td><td>Set the initial value of a sequence</td></tr>
<!--DbSequence::open--><tr><td><a href="../api_cxx/seq_open.html">DbSequence::open</a></td><td>Open a sequence</td></tr>
<!--DbSequence::remove--><tr><td><a href="../api_cxx/seq_remove.html">DbSequence::remove</a></td><td>Remove a sequence</td></tr>
<!--DbSequence::stat--><tr><td><a href="../api_cxx/seq_stat.html">DbSequence::stat</a></td><td>Return sequence statistics</td></tr>
@@ -27,6 +27,6 @@
<!--DbSequence::set_flags--><tr><td><a href="../api_cxx/seq_set_flags.html">DbSequence::set_flags</a></td><td>Set the flags for a sequence</td></tr>
<!--DbSequence::set_range--><tr><td><a href="../api_cxx/seq_set_range.html">DbSequence::set_range</a></td><td>Set the range for a sequence</td></tr>
</table>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_open.html b/db/docs/api_cxx/seq_open.html
index f7f04f159..bfee02ecc 100644
--- a/db/docs/api_cxx/seq_open.html
+++ b/db/docs/api_cxx/seq_open.html
@@ -1,5 +1,5 @@
-<!--$Id: seq_open.so,v 1.7 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: seq_open.so,v 1.9 2005/01/20 01:15:15 ubell Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,10 +44,6 @@ the persistent sequence data.
<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:
<dl compact>
-<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DbSequence::open call within a transaction. If the call
-succeeds, the open operation will be recoverable. If the
-<a href="../api_cxx/env_open.html#DB_CREATE">DB_CREATE</a> flag is specified and the call fails, no sequence will
-have been created.
<dt><a name="DB_CREATE">DB_CREATE</a><dd>Create the sequence. If the sequence does not already exist and the
DB_CREATE flag is not specified, the DbSequence::open will fail.
<dt><a name="DB_EXCL">DB_EXCL</a><dd>Return an error if the sequence already exists. The <a href="../api_cxx/db_open.html#DB_EXCL">DB_EXCL</a>
@@ -55,13 +51,20 @@ flag is only meaningful when specified with the <a href="../api_cxx/env_open.htm
flag.
<dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_cxx/seq_class.html">DbSequence</a> handle returned by DbSequence::open to be
<i>free-threaded</i>; that is, usable by multiple threads within a
-single address space.
+single address space. Note that if multiple threads create multiple
+sequences using the same database handle that handle must have been
+opened specifying <a name="DB_THREAD">DB_THREAD</a>.
</dl>
-<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/seq_class.html">DbSequence</a>
-handle require the <a href="../api_cxx/seq_class.html">DbSequence</a> handle itself be transactionally
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected. Transactionally protected operations on a <a href="../api_cxx/seq_class.html">DbSequence</a> handle
+require the <a href="../api_cxx/seq_class.html">DbSequence</a> handle itself be transactionally
protected during its open if the open creates the sequence.
</dl>
<hr size=1 noshade>
@@ -70,7 +73,7 @@ protected during its open if the open creates the sequence.
<h3>Parameters</h3>
<dl compact>
<dt><b>dbp</b><dd>The <b>dbp</b> parameter references memory into which
-a pointer to the database handle is copied.
+a pointer to the database handle is copied.
</dl>
<p>The DbSequence::get_dbp method may be called at any time during the life of the
application.</p>
@@ -85,7 +88,7 @@ failure, and returns 0 on success.
<h3>Parameters</h3>
<dl compact>
<dt><b>key</b><dd>The <b>key</b> parameter references memory into which
-a pointer to the key data is copied.
+a pointer to the key data is copied.
</dl>
<p>The DbSequence::get_key method may be called at any time during the life of the
application.</p>
@@ -103,6 +106,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_remove.html b/db/docs/api_cxx/seq_remove.html
index d915c7777..3c79239de 100644
--- a/db/docs/api_cxx/seq_remove.html
+++ b/db/docs/api_cxx/seq_remove.html
@@ -1,5 +1,5 @@
-<!--$Id: seq_remove.so,v 1.5 2004/08/18 02:34:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: seq_remove.so,v 1.6 2004/12/16 19:13:04 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,14 +42,19 @@ failure, and returns 0 on success.
<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:
<dl compact>
-<dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>The remove
-will be enclosed in a transaction and will be recoverable.
-<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If a DB_AUTO_COMMIT
-triggers a transaction, do not synchronously flush the log.
+<dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If the operation is implicitly transaction protected (the <b>txnid</b>
+argument is NULL but the operation occurs to a transactional database),
+do not synchronously flush the log when the transaction commits.
</dl>
-<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.
+<dt><b>txnid</b><dd>If the operation is part of an application-specified
+transaction, the <b>txnid</b> parameter is a transaction handle
+returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store
+group, the <b>txnid</b> parameter is a handle returned from
+<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL. If no transaction handle is
+specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<h3>Errors</h3>
<p>The DbSequence::remove method
@@ -70,6 +75,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_set_cachesize.html b/db/docs/api_cxx/seq_set_cachesize.html
index 1f737b6c8..effe7d110 100644
--- a/db/docs/api_cxx/seq_set_cachesize.html
+++ b/db/docs/api_cxx/seq_set_cachesize.html
@@ -1,5 +1,5 @@
<!--$Id: seq_set_cachesize.so,v 1.8 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -75,6 +75,6 @@ current cache size in <b>sizep</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_set_flags.html b/db/docs/api_cxx/seq_set_flags.html
index 6f18d3fc3..67070d33f 100644
--- a/db/docs/api_cxx/seq_set_flags.html
+++ b/db/docs/api_cxx/seq_set_flags.html
@@ -1,5 +1,5 @@
<!--$Id: seq_set_flags.so,v 1.7 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -88,6 +88,6 @@ current flags in <b>flagsp</b>.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_set_range.html b/db/docs/api_cxx/seq_set_range.html
index 9b1bb0270..1f38d71ed 100644
--- a/db/docs/api_cxx/seq_set_range.html
+++ b/db/docs/api_cxx/seq_set_range.html
@@ -1,5 +1,5 @@
<!--$Id: seq_set_range.so,v 1.6 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -78,6 +78,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/seq_stat.html b/db/docs/api_cxx/seq_stat.html
index 2cfef1099..7e385c2eb 100644
--- a/db/docs/api_cxx/seq_stat.html
+++ b/db/docs/api_cxx/seq_stat.html
@@ -1,5 +1,5 @@
<!--$Id: seq_stat.so,v 1.8 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -95,6 +95,6 @@ of the following values:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 607a07912..f768d09ee 100644
--- a/db/docs/api_cxx/txn_abort.html
+++ b/db/docs/api_cxx/txn_abort.html
@@ -1,5 +1,5 @@
<!--$Id: txn_abort.so,v 10.39 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -52,6 +52,6 @@ failure, and returns 0 on success.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2cfc96707..08c49fbfe 100644
--- a/db/docs/api_cxx/txn_begin.html
+++ b/db/docs/api_cxx/txn_begin.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_begin.so,v 10.72 2004/08/18 02:31:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_begin.so,v 10.78 2006/09/13 14:30:57 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,7 +35,7 @@ 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
+transactions as well; no 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>
@@ -53,13 +53,14 @@ failure, and returns 0 on success.
<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:
<dl compact>
-<dt><a name="DB_DEGREE_2">DB_DEGREE_2</a><dd>This transaction will have degree 2 isolation. This provides for cursor
+<dt><a name="DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>This transaction will have degree 2 isolation. This provides for cursor
stability but not repeatable reads. Data items which have been
previously read by this transaction may be deleted or modified by other
transactions before this transaction completes.
-<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.
+<dt><a name="DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a><dd>This transaction will have degree 1 isolation. 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_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag was not
+specified when the underlying database was opened.
<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); that is,
@@ -72,6 +73,14 @@ overrides that setting.</p>
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.
+<dt><a name="DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a><dd>This transaction will execute with <a href="../ref/transapp/read.html">snapshot isolation</a>. For databases with the <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a>
+flag set, data values will be read as they are when the transaction
+begins, without taking read locks. Silently ignored for operations on
+databases with <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> not set on the underlying
+database (read locks are acquired).
+<p>The error <a name="DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> will be returned from update
+operations if a snapshot transaction attempts to update data
+which was modified after the snapshot transaction read it.</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, isolation, and durability) properties.
@@ -100,6 +109,6 @@ throw a DbMemoryException.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2668fc211..d5038f0c2 100644
--- a/db/docs/api_cxx/txn_checkpoint.html
+++ b/db/docs/api_cxx/txn_checkpoint.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_checkpoint.so,v 10.48 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_checkpoint.so,v 10.49 2005/03/02 22:57:15 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,8 +27,10 @@ DbEnv::txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags) const;
</pre></h3>
<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>If there has been any logging activity in the database environment since
+the last checkpoint, 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
@@ -67,6 +69,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ffc57889d..73311cb46 100644
--- a/db/docs/api_cxx/txn_class.html
+++ b/db/docs/api_cxx/txn_class.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_class.so,v 10.24 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_class.so,v 10.25 2005/05/17 15:25:50 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,7 +33,7 @@ public:
</pre></h3>
<hr size=1 noshade>
<h3>Description: DbTxn</h3>
-<p>The DbTxn object is the handle for a transaction. Methods off
+<p>The DbTxn object is the handle for a transaction. Methods of
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>
@@ -70,6 +70,6 @@ calls in a purely C++ application.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 11c7be811..be53f7096 100644
--- a/db/docs/api_cxx/txn_commit.html
+++ b/db/docs/api_cxx/txn_commit.html
@@ -1,5 +1,5 @@
<!--$Id: txn_commit.so,v 10.49 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -80,6 +80,6 @@ method overrides both of those settings.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9393f96b8..c3f743bec 100644
--- a/db/docs/api_cxx/txn_discard.html
+++ b/db/docs/api_cxx/txn_discard.html
@@ -1,5 +1,5 @@
<!--$Id: txn_discard.so,v 10.16 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -66,6 +66,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cbd797fbf..9f2da7876 100644
--- a/db/docs/api_cxx/txn_id.html
+++ b/db/docs/api_cxx/txn_id.html
@@ -1,5 +1,5 @@
<!--$Id: txn_id.so,v 10.21 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ to the <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> or <a href="../api
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 99da21d0c..f25365c96 100644
--- a/db/docs/api_cxx/txn_list.html
+++ b/db/docs/api_cxx/txn_list.html
@@ -1,5 +1,5 @@
<!--$Id: txn_list.so,v 1.3 2004/11/02 20:04:11 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h3>
-<!--$Id: m4.methods,v 1.5 2004/11/03 15:52:02 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2005/03/16 21:26:51 bostic Exp $-->
<table border=1 align=center>
<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbEnv::txn_checkpoint--><tr><td><a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
@@ -28,8 +28,9 @@
<!--DbTxn::discard--><tr><td><a href="../api_cxx/txn_discard.html">DbTxn::discard</a></td><td>Discard a prepared but not resolved transaction handle</td></tr>
<!--DbTxn::id--><tr><td><a href="../api_cxx/txn_id.html">DbTxn::id</a></td><td>Return a transaction's ID</td></tr>
<!--DbTxn::prepare--><tr><td><a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<!--DbTxn::set_name--><tr><td><a href="../api_cxx/txn_set_name.html">DbTxn::set_name</a></td><td>Associate a string with a transaction</td></tr>
<!--DbTxn::set_timeout--><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="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 01448a95c..0fba00631 100644
--- a/db/docs/api_cxx/txn_prepare.html
+++ b/db/docs/api_cxx/txn_prepare.html
@@ -1,5 +1,5 @@
<!--$Id: txn_prepare.so,v 10.35 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -62,6 +62,6 @@ transactions must be resolved.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4d30ae730..9fa7649f9 100644
--- a/db/docs/api_cxx/txn_recover.html
+++ b/db/docs/api_cxx/txn_recover.html
@@ -1,5 +1,5 @@
<!--$Id: txn_recover.so,v 10.25 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -69,7 +69,7 @@ array.
starting where the last call to DbEnv::txn_recover left off.
</dl>
<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.
+ the list of transactions to be resolved by the application is copied.
</dl>
<hr size=1 noshade>
<h3>Class</h3>
@@ -80,6 +80,6 @@ starting where the last call to DbEnv::txn_recover left off.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_set_name.html b/db/docs/api_cxx/txn_set_name.html
new file mode 100644
index 000000000..ab365560a
--- /dev/null
+++ b/db/docs/api_cxx/txn_set_name.html
@@ -0,0 +1,78 @@
+<!--$Id: txn_set_name.so,v 10.2 2005/05/17 04:01:01 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbTxn::set_name</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>DbTxn::set_name</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" 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
+DbTxn::set_name(const char *name);
+<p>
+int
+DbTxn::get_name(const char **namep);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbTxn::set_name</h3>
+<p>The DbTxn::set_name method associates the specified string with the
+transaction. The string is returned by <a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a> and displayed
+by <a href="../api_cxx/txn_stat.html">DbEnv::txn_stat_print</a>.</p>
+<p>If the database environment has been configured for logging and the
+Berkeley DB library was configured with
+<a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a>, a debugging log record is written including the
+transaction ID and the name.</p>
+<p>The DbTxn::set_name method may be called at any time during the life of the
+application.</p>
+<p>The DbTxn::set_name method
+either 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>
+<dl compact>
+<dt><b>name</b><dd>The <b>name</b> parameter is the string to associate with the
+transaction.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbTxn::get_name</h3>
+<p>The DbTxn::get_name method returns the string associated with the transaction.</p>
+<p>The DbTxn::get_name method may be called at any time during the life of the
+application.</p>
+<p>The DbTxn::get_name method
+either 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>
+<dl compact>
+<dt><b>namep</b><dd>The DbTxn::get_name method returns a reference to the
+string associated with the transaction in <b>namep</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 width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f61034af2..3e1efa18e 100644
--- a/db/docs/api_cxx/txn_set_timeout.html
+++ b/db/docs/api_cxx/txn_set_timeout.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_set_timeout.so,v 10.20 2004/08/13 03:39:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_set_timeout.so,v 10.21 2005/05/20 15:07:45 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,8 +29,8 @@ DbTxn::set_timeout(db_timeout_t timeout, u_int32_t flags);
<h3>Description: DbTxn::set_timeout</h3>
<p>The DbTxn::set_timeout 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
+<p>All 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 timeout is for any single lock request.
In the case of DB_SET_TXN_TIMEOUT, the timeout is for the life
of the transaction. As timeouts are only checked when the lock request
@@ -78,6 +78,6 @@ invalid flag value or parameter was specified.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f615203f3..d2da587ed 100644
--- a/db/docs/api_cxx/txn_stat.html
+++ b/db/docs/api_cxx/txn_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: txn_stat.so,v 10.61 2004/09/28 17:57:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_stat.so,v 10.66 2006/08/22 14:28:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,26 +49,45 @@ since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> functi
<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 configured.
<dt>u_int32_t st_nactive;<dd>The number of transactions that are currently active.
+<dt>u_int32_t st_nsnapshot;<dd>The number of transactions on the snapshot list. These are transactions
+which modified a database opened with <a href="../api_cxx/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a>,
+and which have committed or aborted, but the copies of pages they
+created are still in the cache.
<dt>u_int32_t st_maxnactive;<dd>The maximum number of active transactions at any one time.
+<dt>u_int32_t st_maxnsnapshot;<dd>The maximum number of transactions on the snapshot list 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>roff_t st_regsize;<dd>The size of the region, in bytes.
+<dt>roff_t st_regsize;<dd>The size of the transaction region, in bytes.
<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.
+obtaining the transaction region mutex.
<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.
+the transaction region mutex without waiting.
<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:
<dl compact>
<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>pid_t pid;<dd>The process ID of the originator of the transaction.
+<dt>uintmax_t tid;<dd>The thread of control ID of the originator of the transaction.
<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.
+<dt>DbLsn read_lsn;<dd>The log sequence number of reads for snapshot transactions.
+<dt>u_int32_t mvcc_ref;<dd>The number of buffer copies created by this transaction that remain in cache.
+<dt>u_int32_t status;<dd>One of the following list of constants: TXN_ABORTED, TXN_COMMITTED,
+TXN_PREPARED, TXN_RUNNING.
+<dt>u_int32_t xa_status;<dd>If the transaction is an XA transaction, the <b>xa_status</b> of the
+transaction will be one of the following list of constants:
+TXN_XA_ABORTED, TXN_XA_DEADLOCKED, TXN_XA_ENDED, TXN_XA_PREPARED,
+TXN_XA_STARTED, or TXN_XA_SUSPENDED. Otherwise, the <b>xa_status</b>
+will be 0.
+<dt>u_int8_t xid[DB_XIDDATASIZE];<dd>If the transaction is an XA transaction, the transaction's XA ID. If
+the transaction was prepared separately from the XA interfaces, the
+transaction's Global ID. Otherwise, the <b>xid</b> contents are
+undefined.
+<dt>char name[];<dd>If a name was specified for the transaction, up to the first 50 bytes
+of that name, followed by a nul termination byte.
</dl>
</dl>
<p>The DbEnv::txn_stat method
@@ -84,7 +103,7 @@ the following value:
<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
<dt><b>statp</b><dd>The <b>statp</b> parameter references memory into which
-a pointer to the allocated statistics structure is copied.
+a pointer to the allocated statistics structure is copied.
</dl>
<h3>Errors</h3>
<p>The DbEnv::txn_stat method
@@ -98,7 +117,7 @@ invalid flag value or parameter was specified.
</dl>
<hr size=1 noshade>
<h3>Description: DbEnv::txn_stat_print</h3>
-<p>The DbEnv::txn_stat_print method returns the
+<p>The DbEnv::txn_stat_print method displays the
transaction subsystem statistical information, as described for the DbEnv::txn_stat method.
The information is printed to a specified output channel (see the
<a href="../api_cxx/env_set_msgfile.html">DbEnv::set_msgfile</a> method for more information), or passed to an
@@ -113,10 +132,11 @@ failure, and returns 0 on success.
</p>
<h3>Parameters</h3>
<dl compact>
-<dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or
-the following value:
+<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:
<dl compact>
<dt><a name="DB_STAT_ALL">DB_STAT_ALL</a><dd>Display all available information.
+<dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after displaying their values.
</dl>
</dl>
<hr size=1 noshade>
@@ -128,6 +148,6 @@ the following value:
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/api_tcl.html b/db/docs/api_tcl/api_tcl.html
index 686809792..bc7caf3b4 100644
--- a/db/docs/api_tcl/api_tcl.html
+++ b/db/docs/api_tcl/api_tcl.html
@@ -1,5 +1,5 @@
<!--$Id: api_tcl.so,v 11.21 2003/10/18 19:16:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -10,7 +10,7 @@
</head>
<body bgcolor=white>
<h3 align=center>Tcl API</h3>
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
<table border=1 align=center>
<tr><th>Tcl Command</th><th>Description</th></tr>
<tr><td><a href="../api_tcl/env_open.html"><b>berkdb env</b></a></td><td>Create an environment handle</td></tr>
@@ -49,6 +49,6 @@
<tr><td><br></td><td><br></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="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_close.html b/db/docs/api_tcl/db_close.html
index 3ec6cbe62..a6b0abd40 100644
--- a/db/docs/api_tcl/db_close.html
+++ b/db/docs/api_tcl/db_close.html
@@ -1,6 +1,6 @@
<!--$Id: db_close.so,v 11.15 2002/08/18 21:17:23 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,6 +55,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 79af69465..4f3a06000 100644
--- a/db/docs/api_tcl/db_count.html
+++ b/db/docs/api_tcl/db_count.html
@@ -1,6 +1,6 @@
<!--$Id: db_count.so,v 11.4 2002/08/18 21:17:24 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,6 +33,6 @@ Tcl error is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7aed97220..f164eaf31 100644
--- a/db/docs/api_tcl/db_cursor.html
+++ b/db/docs/api_tcl/db_cursor.html
@@ -1,6 +1,6 @@
<!--$Id: db_cursor.so,v 11.13 2002/08/18 21:17:25 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,16 +31,18 @@ It is through this Tcl command that the script accesses the cursor
methods.</p>
<p>The options are as follows:</p>
<dl compact>
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</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/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5179e8f15..c464070d4 100644
--- a/db/docs/api_tcl/db_del.html
+++ b/db/docs/api_tcl/db_del.html
@@ -1,6 +1,6 @@
-<!--$Id: db_del.so,v 11.14 2002/08/18 21:17:25 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_del.so,v 11.15 2004/12/16 19:13:04 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,7 +21,6 @@
<hr size=1 noshade>
<tt>
<h3><pre>db del
- [-auto_commit]
[-glob]
[-txn txnid]
key
@@ -32,17 +31,16 @@
designated key will be discarded.</p>
<p>The options are as follows:</p>
<dl compact>
-<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.
<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.
This option only works on databases using the Btree access method.
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</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.</p>
@@ -50,6 +48,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 935349de4..ddaddd147 100644
--- a/db/docs/api_tcl/db_get.html
+++ b/db/docs/api_tcl/db_get.html
@@ -1,6 +1,6 @@
-<!--$Id: db_get.so,v 11.19 2002/11/14 21:07:39 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_get.so,v 11.20 2004/12/16 19:13:04 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,7 +21,6 @@
<hr size=1 noshade>
<tt>
<h3><pre>db get
- [-auto_commit]
[-consume]
[-consume_wait]
[-glob]
@@ -44,10 +43,6 @@ duplicate items. Duplicates are sorted by insert order except where this
order has been overridden by cursor operations.</p>
<p>The options are as follows:</p>
<dl compact>
-<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.
<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
positioned on the deleted record. A record is available if it is not
@@ -86,10 +81,12 @@ result in deadlock.
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>
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<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,
@@ -102,6 +99,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 28eaa49e8..43ebe9d8e 100644
--- a/db/docs/api_tcl/db_get_join.html
+++ b/db/docs/api_tcl/db_get_join.html
@@ -1,6 +1,6 @@
<!--$Id: db_get_join.so,v 11.18 2002/08/18 21:17:25 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,16 +33,18 @@ 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>
<dl compact>
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</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/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7f1b8b3cf..166a32c4b 100644
--- a/db/docs/api_tcl/db_get_type.html
+++ b/db/docs/api_tcl/db_get_type.html
@@ -1,6 +1,6 @@
<!--$Id: db_get_type.so,v 11.11 2002/08/18 21:17:25 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ returning one of "btree", "hash", "queue" or "recno".</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 53c4e7295..d94cbbe2b 100644
--- a/db/docs/api_tcl/db_is_byteswapped.html
+++ b/db/docs/api_tcl/db_is_byteswapped.html
@@ -1,6 +1,6 @@
<!--$Id: db_is_byteswapped.so,v 11.15 2003/10/13 19:57:26 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,6 +34,6 @@ or not.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a4d1e9fa8..821700c25 100644
--- a/db/docs/api_tcl/db_join.html
+++ b/db/docs/api_tcl/db_join.html
@@ -1,6 +1,6 @@
<!--$Id: db_join.so,v 11.22 2002/08/18 21:17:26 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,6 +44,6 @@ been created within the same transaction.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ade263b34..a713cf275 100644
--- a/db/docs/api_tcl/db_open.html
+++ b/db/docs/api_tcl/db_open.html
@@ -1,6 +1,6 @@
-<!--$Id: db_open.so,v 11.33 2003/05/09 20:07:57 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_open.so,v 11.34 2004/12/16 19:13:04 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,9 +59,10 @@ db1). It is through this Tcl command that the script accesses the
database methods.</p>
<p>The options are as follows:</p>
<dl compact>
-<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.
+<dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, the open
+operation will be recoverable and all subsequent database modification
+operations based on this handle will be transactionally protected. If
+the call fails, no database will have been created.
<dt>-btree<dd>Open/create a database of type Btree. The Btree format
is a representation of a sorted, balanced tree structure.
<dt>-hash<dd>Open/create a database of type Hash. The Hash format is
@@ -284,10 +285,11 @@ 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>-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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+-auto_commit flag is specified,
+the operation will be implicitly transaction protected.
<dt>--<dd>Mark the end of the command arguments.
<dt>file<dd>The name of a single physical file on disk that will be used to back the
database.
@@ -308,6 +310,6 @@ file</a> for more information.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8a5d79f92..04ec31ee2 100644
--- a/db/docs/api_tcl/db_put.html
+++ b/db/docs/api_tcl/db_put.html
@@ -1,6 +1,6 @@
-<!--$Id: db_put.so,v 11.13 2002/08/18 21:17:26 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_put.so,v 11.14 2004/12/16 19:13:05 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,12 +22,10 @@
<tt>
<h3><pre>db put
-append
- [-auto_commit]
[-partial {doff dlen}]
[-txn txnid]
data
db put
- [-auto_commit]
[-nooverwrite]
[-partial {doff dlen}]
[-txn txnid]
@@ -38,9 +36,6 @@ db put
database.</p>
<p>The options are as follows:</p>
<dl compact>
-<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.
<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
@@ -60,10 +55,12 @@ duplicate records must be done using a <i>dbc</i> <b>put</b> command.</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 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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</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).
@@ -76,6 +73,6 @@ types, the key is interpreted by Tcl as a byte array.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ef7bf5f66..d513426c8 100644
--- a/db/docs/api_tcl/db_remove.html
+++ b/db/docs/api_tcl/db_remove.html
@@ -1,6 +1,6 @@
<!--$Id: db_remove.so,v 11.12 2002/09/26 17:34:02 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -56,6 +56,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 25468c882..e293672e5 100644
--- a/db/docs/api_tcl/db_rename.html
+++ b/db/docs/api_tcl/db_rename.html
@@ -1,6 +1,6 @@
<!--$Id: db_rename.so,v 11.7 2002/09/26 17:34:02 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,6 +57,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 45a885372..d2a0f5edb 100644
--- a/db/docs/api_tcl/db_stat.html
+++ b/db/docs/api_tcl/db_stat.html
@@ -1,6 +1,6 @@
<!--$Id: db_stat.so,v 11.12 2002/08/18 21:17:27 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,6 +36,6 @@ of the database.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a8a7756d9..68f6d70ef 100644
--- a/db/docs/api_tcl/db_sync.html
+++ b/db/docs/api_tcl/db_sync.html
@@ -1,6 +1,6 @@
-<!--$Id: db_sync.so,v 11.11 2002/08/18 21:17:27 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_sync.so,v 11.12 2004/12/02 18:21:08 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,13 +25,13 @@
<h3>Description(db sync)</h3>
<p>The <i>db</i> <b>sync</b> command function flushes any database cached
information to disk.</p>
-<p>See <i>db</i> <b>close</b> for a discussion of Berkeley DB and cached data. </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.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 27f3ef6f0..edd721ddb 100644
--- a/db/docs/api_tcl/db_truncate.html
+++ b/db/docs/api_tcl/db_truncate.html
@@ -1,6 +1,6 @@
-<!--$Id: db_truncate.so,v 11.5 2002/08/18 21:17:28 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_truncate.so,v 11.6 2004/12/16 19:13:05 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,20 +21,18 @@
<hr size=1 noshade>
<tt>
<h3><pre>db truncate
- [-auto_commit]
[-txn txnid]
</pre></h3>
<h3>Description(db truncate)</h3>
<p>Empties the database, discarding all records it contains.</p>
<p>The options are as follows:</p>
<dl compact>
-<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.
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+operation occurs in a transactional
+database,
+the operation will be implicitly transaction protected.
</dl>
<p>The <i>db</i> <b>truncate</b> command returns the number of records discarded
from the database on success.</p>
@@ -43,6 +41,6 @@ from the database on success.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a3eadde77..dd42aa71e 100644
--- a/db/docs/api_tcl/dbc_close.html
+++ b/db/docs/api_tcl/dbc_close.html
@@ -1,6 +1,6 @@
-<!--$Id: dbc_close.so,v 11.13 2002/08/18 21:17:28 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_close.so,v 11.14 2004/12/02 18:21:08 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,7 +23,7 @@
<h3><pre>dbc close
</pre></h3>
<h3>Description(db close)</h3>
-<p>The <i>dbc</i> <b>close</b> command discards the cursor. </p>
+<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
@@ -32,6 +32,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a0543c12d..f4c2c1fd5 100644
--- a/db/docs/api_tcl/dbc_del.html
+++ b/db/docs/api_tcl/dbc_del.html
@@ -1,6 +1,6 @@
<!--$Id: dbc_del.so,v 11.13 2002/08/18 21:17:28 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,6 +34,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2a20f01b3..172a50e6c 100644
--- a/db/docs/api_tcl/dbc_dup.html
+++ b/db/docs/api_tcl/dbc_dup.html
@@ -1,6 +1,6 @@
<!--$Id: dbc_dup.so,v 11.8 2002/08/18 21:17:28 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,6 +42,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 809345451..1542f106a 100644
--- a/db/docs/api_tcl/dbc_get.html
+++ b/db/docs/api_tcl/dbc_get.html
@@ -1,6 +1,6 @@
-<!--$Id: dbc_get.so,v 11.21 2002/08/18 21:17:28 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_get.so,v 11.22 2004/12/02 18:21:08 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -75,7 +75,7 @@ explicitly created by the application, or were created and later deleted.</p>
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. </p>
+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.</p>
@@ -110,7 +110,7 @@ position in the database, <i>dbc</i> <b>get</b> will return an empty list.</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. </p>
+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>
@@ -163,6 +163,6 @@ exist an empty list is returned.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 13534f4e4..a77e36fd4 100644
--- a/db/docs/api_tcl/dbc_put.html
+++ b/db/docs/api_tcl/dbc_put.html
@@ -1,6 +1,6 @@
-<!--$Id: dbc_put.so,v 11.17 2003/02/21 15:16:45 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_put.so,v 11.18 2004/12/02 18:21:08 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,7 +68,7 @@ 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>-before</b>. </p>
+<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>
@@ -129,6 +129,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8f8a91105..12026e042 100644
--- a/db/docs/api_tcl/env_close.html
+++ b/db/docs/api_tcl/env_close.html
@@ -1,6 +1,6 @@
<!--$Id: env_close.so,v 11.14 2002/08/18 21:17:29 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a61d7d02d..d79915022 100644
--- a/db/docs/api_tcl/env_dbremove.html
+++ b/db/docs/api_tcl/env_dbremove.html
@@ -1,6 +1,6 @@
-<!--$Id: env_dbremove.so,v 11.3 2002/08/18 21:17:29 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 11.4 2004/12/16 19:13:05 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,10 +33,11 @@
<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.
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+-auto_commit flag is specified,
+the operation will be implicitly transaction protected.
</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.</p>
@@ -44,6 +45,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 79f324739..b8d519ee3 100644
--- a/db/docs/api_tcl/env_dbrename.html
+++ b/db/docs/api_tcl/env_dbrename.html
@@ -1,6 +1,6 @@
-<!--$Id: env_dbrename.so,v 11.3 2002/08/18 21:17:29 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 11.4 2004/12/16 19:13:05 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,10 +34,11 @@
<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.
-<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>.
+<dt>-txn txnid<dd>If the operation is part of an application-specified transaction, the
+<b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>. If no transaction handle is specified, but the
+-auto_commit flag is specified,
+the operation will be implicitly transaction protected.
</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.</p>
@@ -45,6 +46,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3cc69bb4c..98ad6ac3f 100644
--- a/db/docs/api_tcl/env_open.html
+++ b/db/docs/api_tcl/env_open.html
@@ -1,6 +1,6 @@
<!--$Id: env_open.so,v 11.29 2002/12/22 21:11:07 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -170,6 +170,6 @@ systems).
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 782c90ae9..f7b3abe7e 100644
--- a/db/docs/api_tcl/env_remove.html
+++ b/db/docs/api_tcl/env_remove.html
@@ -1,6 +1,6 @@
<!--$Id: env_remove.so,v 11.17 2002/08/18 21:17:29 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,6 +68,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/txn.html b/db/docs/api_tcl/txn.html
index 63ccf311c..65e5ffc01 100644
--- a/db/docs/api_tcl/txn.html
+++ b/db/docs/api_tcl/txn.html
@@ -1,6 +1,6 @@
<!--$Id: txn.so,v 11.17 2003/10/18 19:16:24 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,6 +59,6 @@ consistency, isolation, and durability) properties.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9d4693bb4..7e91f12ed 100644
--- a/db/docs/api_tcl/txn_abort.html
+++ b/db/docs/api_tcl/txn_abort.html
@@ -1,6 +1,6 @@
<!--$Id: txn_abort.so,v 11.15 2002/08/18 21:17:30 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,6 +41,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/txn_checkpoint.html b/db/docs/api_tcl/txn_checkpoint.html
index 0c3e616af..8634fc2c4 100644
--- a/db/docs/api_tcl/txn_checkpoint.html
+++ b/db/docs/api_tcl/txn_checkpoint.html
@@ -1,6 +1,6 @@
<!--$Id: txn_checkpoint.so,v 11.1 2003/09/02 14:38:51 sue Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ of minutes has passed since the last checkpoint.
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d7a62929f..833ff9b19 100644
--- a/db/docs/api_tcl/txn_commit.html
+++ b/db/docs/api_tcl/txn_commit.html
@@ -1,6 +1,6 @@
-<!--$Id: txn_commit.so,v 11.19 2003/10/18 19:16:24 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: txn_commit.so,v 11.20 2004/12/02 18:21:08 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,7 +25,7 @@
[-sync]
</pre></h3>
<h3>Description(txn commit)</h3>
-<p>The <i>txn</i> <b>commit</b> command ends the transaction. </p>
+<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
@@ -65,6 +65,6 @@ is thrown.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/version.html b/db/docs/api_tcl/version.html
index 99e54b057..d5478226f 100644
--- a/db/docs/api_tcl/version.html
+++ b/db/docs/api_tcl/version.html
@@ -1,6 +1,6 @@
<!--$Id: version.so,v 11.12 2002/08/18 21:17:30 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.27 2004/09/07 15:37:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: m4.tcl,v 11.28 2004/12/16 19:13:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,6 +35,6 @@ patch levels of the underlying Berkeley DB release.</p>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/api_tcl.html"><img src="../images/api.gif" alt="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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/collections/tutorial/BasicProgram.html b/db/docs/collections/tutorial/BasicProgram.html
index 470128711..b1e276e8b 100644
--- a/db/docs/collections/tutorial/BasicProgram.html
+++ b/db/docs/collections/tutorial/BasicProgram.html
@@ -207,7 +207,7 @@ public class PartKey implements Serializable
}
public String toString() {
- return "[PartKey: number=" + number + ']';
+ return &quot;[PartKey: number=&quot; + number + ']';
}
}</tt></b> </pre>
<p>
@@ -254,10 +254,10 @@ public class PartData implements Serializable
public String toString()
{
- return "[PartData: name=" + name +
- " color=" + color +
- " weight=" + weight +
- " city=" + city + ']';
+ return &quot;[PartData: name=&quot; + name +
+ &quot; color=&quot; + color +
+ &quot; weight=&quot; + weight +
+ &quot; city=&quot; + city + ']';
}
}</tt></b> </pre>
<p>
@@ -271,8 +271,8 @@ public class PartData implements Serializable
public class Weight implements Serializable
{
- public final static String GRAMS = "grams";
- public final static String OUNCES = "ounces";
+ public final static String GRAMS = &quot;grams&quot;;
+ public final static String OUNCES = &quot;ounces&quot;;
private double amount;
private String units;
@@ -295,7 +295,7 @@ public class Weight implements Serializable
public String toString()
{
- return "[" + amount + ' ' + units + ']';
+ return &quot;[&quot; + amount + ' ' + units + ']';
}
}</tt></b> </pre>
<p>
@@ -321,7 +321,7 @@ public class SupplierKey implements Serializable
public String toString()
{
- return "[SupplierKey: number=" + number + ']';
+ return &quot;[SupplierKey: number=&quot; + number + ']';
}
}</tt></b> </pre>
<p>
@@ -361,9 +361,9 @@ public class SupplierData implements Serializable
public String toString()
{
- return "[SupplierData: name=" + name +
- " status=" + status +
- " city=" + city + ']';
+ return &quot;[SupplierData: name=&quot; + name +
+ &quot; status=&quot; + status +
+ &quot; city=&quot; + city + ']';
}
}</tt></b>
</pre>
@@ -397,8 +397,8 @@ public class ShipmentKey implements Serializable
public String toString()
{
- return "[ShipmentKey: supplier=" + supplierNumber +
- " part=" + partNumber + ']';
+ return &quot;[ShipmentKey: supplier=&quot; + supplierNumber +
+ &quot; part=&quot; + partNumber + ']';
}
}</tt></b> </pre>
<p>
@@ -427,7 +427,7 @@ public class ShipmentData implements Serializable
public String toString()
{
- return "[ShipmentData: quantity=" + quantity + ']';
+ return &quot;[ShipmentData: quantity=&quot; + quantity + ']';
}
}</tt></b> </pre>
</div>
diff --git a/db/docs/collections/tutorial/BerkeleyDB-Java-Collections.pdf b/db/docs/collections/tutorial/BerkeleyDB-Java-Collections.pdf
index 9435e5470..1858c36f0 100644
--- a/db/docs/collections/tutorial/BerkeleyDB-Java-Collections.pdf
+++ b/db/docs/collections/tutorial/BerkeleyDB-Java-Collections.pdf
Binary files differ
diff --git a/db/docs/collections/tutorial/Entity.html b/db/docs/collections/tutorial/Entity.html
index 7937d8c22..57ec58187 100644
--- a/db/docs/collections/tutorial/Entity.html
+++ b/db/docs/collections/tutorial/Entity.html
@@ -136,7 +136,7 @@
bindings, but the <tt class="classname">SampleDatabase</tt> 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
+ demonstrates that bindings are only a &quot;view&quot; onto the physical
stored data.
</p>
<p>
@@ -243,11 +243,11 @@
public String toString()
{
- return "Part: number=" + number +
- " name=" + name +
- " color=" + color +
- " weight=" + weight +
- " city=" + city + '.';
+ return &quot;Part: number=&quot; + number +
+ &quot; name=&quot; + name +
+ &quot; color=&quot; + color +
+ &quot; weight=&quot; + weight +
+ &quot; city=&quot; + city + '.';
}
}</tt></b> </pre>
<a id="entity_supplier"></a>
@@ -288,10 +288,10 @@
public String toString()
{
- return "Supplier: number=" + number +
- " name=" + name +
- " status=" + status +
- " city=" + city + '.';
+ return &quot;Supplier: number=&quot; + number +
+ &quot; name=&quot; + name +
+ &quot; status=&quot; + status +
+ &quot; city=&quot; + city + '.';
}
} </tt></b> </pre>
<a id="entity_shipment"></a>
@@ -325,9 +325,9 @@
public String toString()
{
- return "Shipment: part=" + partNumber +
- " supplier=" + supplierNumber +
- " quantity=" + quantity + '.';
+ return &quot;Shipment: part=&quot; + partNumber +
+ &quot; supplier=&quot; + supplierNumber +
+ &quot; quantity=&quot; + quantity + '.';
}
} </tt></b> </pre>
</div>
diff --git a/db/docs/collections/tutorial/SerializableEntity.html b/db/docs/collections/tutorial/SerializableEntity.html
index 9f63bab4e..a9221e202 100644
--- a/db/docs/collections/tutorial/SerializableEntity.html
+++ b/db/docs/collections/tutorial/SerializableEntity.html
@@ -220,11 +220,11 @@ public class Part <b class="userinput"><tt>implements Serializable</tt></b>
public String toString()
{
- return "Part: number=" + number +
- " name=" + name +
- " color=" + color +
- " weight=" + weight +
- " city=" + city + '.';
+ return &quot;Part: number=&quot; + number +
+ &quot; name=&quot; + name +
+ &quot; color=&quot; + color +
+ &quot; weight=&quot; + weight +
+ &quot; city=&quot; + city + '.';
}
}
...
@@ -270,10 +270,10 @@ public class Supplier <b class="userinput"><tt>implements Serializable</tt></b>
public String toString()
{
- return "Supplier: number=" + number +
- " name=" + name +
- " status=" + status +
- " city=" + city + '.';
+ return &quot;Supplier: number=&quot; + number +
+ &quot; name=&quot; + name +
+ &quot; status=&quot; + status +
+ &quot; city=&quot; + city + '.';
}
}
...
@@ -313,9 +313,9 @@ public class Shipment <b class="userinput"><tt>implements Serializable</tt></b>
public String toString()
{
- return "Shipment: part=" + partNumber +
- " supplier=" + supplierNumber +
- " quantity=" + quantity + '.';
+ return &quot;Shipment: part=&quot; + partNumber +
+ &quot; supplier=&quot; + supplierNumber +
+ &quot; quantity=&quot; + quantity + '.';
}
}
</pre>
diff --git a/db/docs/collections/tutorial/Summary.html b/db/docs/collections/tutorial/Summary.html
index efa436a60..529e0fef4 100644
--- a/db/docs/collections/tutorial/Summary.html
+++ b/db/docs/collections/tutorial/Summary.html
@@ -41,9 +41,9 @@
<div></div>
</div>
<p>
- In summary, the Sleepycat Java Collections API tutorial has
+ In summary, the Java Collections API tutorial has
demonstrated how to create different types of bindings, as well as
- how to use the basic facilities of the Sleepycat Java Collections API:
+ how to use the basic facilities of the Java Collections API:
the environment, databases, secondary indices, collections, and
transactions. The final approach illustrated by the last example
program, Serializable Entity, uses tuple keys and serial entity
@@ -142,7 +142,7 @@
</p>
<p>
Internal bindings are called <span class="emphasis"><em>marshalled bindings</em></span> in the
- Sleepycat Java Collections API, and in this model each data class
+ Java Collections 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
@@ -154,7 +154,7 @@
<tt class="literal">marshal</tt> and <tt class="literal">factory</tt> examples that
came with your DB distribution (you can find them in
- <tt class="filename">&lt;INSTALL_DIR&gt;examples_java/src/com/sleepycat/examples/collections/ship</tt>
+ <tt class="filename">&lt;INSTALL_DIR&gt;/examples_java/src/com/sleepycat/examples/collections/ship</tt>
where <tt class="literal">&lt;INSTALL_DIR&gt;</tt> is the location where you
unpacked your DB distribution).
</span>
diff --git a/db/docs/collections/tutorial/Tuple.html b/db/docs/collections/tutorial/Tuple.html
index 956358b8d..d5965430b 100644
--- a/db/docs/collections/tutorial/Tuple.html
+++ b/db/docs/collections/tutorial/Tuple.html
@@ -83,7 +83,7 @@ Creating Tuple-Serial Entity Bindings
</dl>
</div>
<p>
- Sleepycat Java Collections API <span class="emphasis"><em>tuples</em></span> are sequences of
+ Java Collections API <span class="emphasis"><em>tuples</em></span> are sequences of
primitive Java data types, for example, integers and strings. The
<span class="emphasis"><em>tuple format</em></span> is a binary format for tuples that can be used
to store keys and/or values.
@@ -141,7 +141,7 @@ Creating Tuple-Serial Entity Bindings
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 Sleepycat Java Collections API
+ using the Java Collections API
<a href="../../java/com/sleepycat/bind/tuple/TupleInput.html" target="_top">TupleInput</a>
and
diff --git a/db/docs/collections/tutorial/UsingCollectionsAPI.html b/db/docs/collections/tutorial/UsingCollectionsAPI.html
index a37c3de5c..34236b7bd 100644
--- a/db/docs/collections/tutorial/UsingCollectionsAPI.html
+++ b/db/docs/collections/tutorial/UsingCollectionsAPI.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
@@ -18,7 +18,7 @@
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
</th>
</tr>
<tr>
@@ -36,7 +36,7 @@
<div>
<div>
<h2 class="title" style="clear: both"><a id="UsingCollectionsAPI"></a>
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
</h2>
</div>
</div>
@@ -86,7 +86,7 @@
more stored collections, 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. The Sleepycat Java Collections API provides several
+ after access is complete. The Java Collections API provides several
ways of managing transactions.
</p>
<p>
@@ -175,7 +175,7 @@
environment.
</p>
<p>
- The Sleepycat Java Collections API supports nested transactions. If
+ The Java Collections API supports nested transactions. If
<a href="../../java/com/sleepycat/collections/TransactionRunner.html#run(com.sleepycat.collections.TransactionWorker)" target="_top">TransactionRunner.run(com.sleepycat.collections.TransactionWorker)</a>
or
@@ -197,12 +197,12 @@
is active.
</p>
<p>
- The Sleepycat Java Collections API supports transaction auto-commit.
+ The Java Collections API supports transaction auto-commit.
If no transaction is active and a write operation is requested for
a transactional database, auto-commit is used automatically.
</p>
<p>
- The Sleepycat Java Collections API also supports transaction
+ The Java Collections API also supports transaction
dirty-read via the
<a href="../../java/com/sleepycat/collections/StoredCollections.html" target="_top">StoredCollections</a>
@@ -230,9 +230,9 @@
<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 the Sleepycat Java Collections
- API treats data by value, not by reference, neither the data
- objects nor the Sleepycat Java Collections API objects contain status
+ were modified during the transaction. Since the Java Collections API
+ treats data by value, not by reference, neither the data
+ objects nor the Java Collections 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
@@ -520,7 +520,7 @@
<p>
Please see
<span class="html"><a href="../../ref/am_conf/intro.html" target="_top">Available Access Methods</a> in</span>
- the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
for more information on access method configuration.
</p>
</div>
@@ -569,8 +569,7 @@
<li>
<p>
For secondary indices with duplicates, the duplicates must be
- sorted. This restriction is imposed by the Sleepycat Java
- Collections API.
+ sorted. This restriction is imposed by the Java Collections API.
</p>
</li>
<li>
@@ -593,7 +592,7 @@
</li>
<li>
<p>
- If reocrd number keys are renumbered, then standard List
+ If record number keys are renumbered, then standard List
add/remove behavior is supported but concurrency/performance is
reduced.
</p>
diff --git a/db/docs/collections/tutorial/UsingSecondaries.html b/db/docs/collections/tutorial/UsingSecondaries.html
index c6c147c72..35fb50ef7 100644
--- a/db/docs/collections/tutorial/UsingSecondaries.html
+++ b/db/docs/collections/tutorial/UsingSecondaries.html
@@ -201,7 +201,7 @@ import com.sleepycat.db.SecondaryDatabase;</tt></b>
public class SampleDatabase
{
...
-<b class="userinput"><tt> private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+<b class="userinput"><tt> private static final String SUPPLIER_CITY_INDEX = &quot;supplier_city_index&quot;;
...
private SecondaryDatabase supplierByCityDb;
...</tt></b>
diff --git a/db/docs/collections/tutorial/UsingStoredCollections.html b/db/docs/collections/tutorial/UsingStoredCollections.html
index 415974b09..37fdc6096 100644
--- a/db/docs/collections/tutorial/UsingStoredCollections.html
+++ b/db/docs/collections/tutorial/UsingStoredCollections.html
@@ -10,7 +10,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
<link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="up" href="collectionOverview.html" title="Appendix A. &#10; API Notes and Details&#10; " />
- <link rel="previous" href="UsingCollectionsAPI.html" title="&#10; Using the Sleepycat Java Collections API&#10; " />
+ <link rel="previous" href="UsingCollectionsAPI.html" title="&#10; Using the Java Collections API&#10; " />
<link rel="next" href="SerializedObjectStorage.html" title="&#10; Serialized Object Storage&#10; " />
</head>
<body>
@@ -789,7 +789,7 @@
</tr>
<tr>
<td width="40%" align="left" valign="top">
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
 </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
diff --git a/db/docs/collections/tutorial/addingdatabaseitems.html b/db/docs/collections/tutorial/addingdatabaseitems.html
index 4e1ff66d5..53b3b8e84 100644
--- a/db/docs/collections/tutorial/addingdatabaseitems.html
+++ b/db/docs/collections/tutorial/addingdatabaseitems.html
@@ -49,8 +49,7 @@
<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put" target="_top">Map.put</a>
method is used to add objects. All standard Java methods for
- modifying a collection may be used with the Sleepycat Java Collections
- API.
+ modifying a collection may be used with the Java Collections API.
</p>
<p>
The <tt class="methodname">PopulateDatabase.doWork()</tt> method calls private methods
@@ -107,17 +106,17 @@ public class Sample
<b class="userinput"><tt> Map suppliers = views.getSupplierMap();
if (suppliers.isEmpty())
{
- System.out.println("Adding Suppliers");
- suppliers.put(new SupplierKey("S1"),
- new SupplierData("Smith", 20, "London"));
- suppliers.put(new SupplierKey("S2"),
- new SupplierData("Jones", 10, "Paris"));
- suppliers.put(new SupplierKey("S3"),
- new SupplierData("Blake", 30, "Paris"));
- suppliers.put(new SupplierKey("S4"),
- new SupplierData("Clark", 20, "London"));
- suppliers.put(new SupplierKey("S5"),
- new SupplierData("Adams", 30, "Athens"));
+ System.out.println(&quot;Adding Suppliers&quot;);
+ suppliers.put(new SupplierKey(&quot;S1&quot;),
+ new SupplierData(&quot;Smith&quot;, 20, &quot;London&quot;));
+ suppliers.put(new SupplierKey(&quot;S2&quot;),
+ new SupplierData(&quot;Jones&quot;, 10, &quot;Paris&quot;));
+ suppliers.put(new SupplierKey(&quot;S3&quot;),
+ new SupplierData(&quot;Blake&quot;, 30, &quot;Paris&quot;));
+ suppliers.put(new SupplierKey(&quot;S4&quot;),
+ new SupplierData(&quot;Clark&quot;, 20, &quot;London&quot;));
+ suppliers.put(new SupplierKey(&quot;S5&quot;),
+ new SupplierData(&quot;Adams&quot;, 30, &quot;Athens&quot;));
}</tt></b>
}
@@ -126,31 +125,31 @@ public class Sample
<b class="userinput"><tt> Map parts = views.getPartMap();
if (parts.isEmpty())
{
- System.out.println("Adding Parts");
- parts.put(new PartKey("P1"),
- new PartData("Nut", "Red",
+ System.out.println(&quot;Adding Parts&quot;);
+ parts.put(new PartKey(&quot;P1&quot;),
+ new PartData(&quot;Nut&quot;, &quot;Red&quot;,
new Weight(12.0, Weight.GRAMS),
- "London"));
- parts.put(new PartKey("P2"),
- new PartData("Bolt", "Green",
+ &quot;London&quot;));
+ parts.put(new PartKey(&quot;P2&quot;),
+ new PartData(&quot;Bolt&quot;, &quot;Green&quot;,
new Weight(17.0, Weight.GRAMS),
- "Paris"));
- parts.put(new PartKey("P3"),
- new PartData("Screw", "Blue",
+ &quot;Paris&quot;));
+ parts.put(new PartKey(&quot;P3&quot;),
+ new PartData(&quot;Screw&quot;, &quot;Blue&quot;,
new Weight(17.0, Weight.GRAMS),
- "Rome"));
- parts.put(new PartKey("P4"),
- new PartData("Screw", "Red",
+ &quot;Rome&quot;));
+ parts.put(new PartKey(&quot;P4&quot;),
+ new PartData(&quot;Screw&quot;, &quot;Red&quot;,
new Weight(14.0, Weight.GRAMS),
- "London"));
- parts.put(new PartKey("P5"),
- new PartData("Cam", "Blue",
+ &quot;London&quot;));
+ parts.put(new PartKey(&quot;P5&quot;),
+ new PartData(&quot;Cam&quot;, &quot;Blue&quot;,
new Weight(12.0, Weight.GRAMS),
- "Paris"));
- parts.put(new PartKey("P6"),
- new PartData("Cog", "Red",
+ &quot;Paris&quot;));
+ parts.put(new PartKey(&quot;P6&quot;),
+ new PartData(&quot;Cog&quot;, &quot;Red&quot;,
new Weight(19.0, Weight.GRAMS),
- "London"));
+ &quot;London&quot;));
}</tt></b>
}
@@ -159,30 +158,30 @@ public class Sample
<b class="userinput"><tt> Map shipments = views.getShipmentMap();
if (shipments.isEmpty())
{
- System.out.println("Adding Shipments");
- shipments.put(new ShipmentKey("P1", "S1"),
+ System.out.println(&quot;Adding Shipments&quot;);
+ shipments.put(new ShipmentKey(&quot;P1&quot;, &quot;S1&quot;),
new ShipmentData(300));
- shipments.put(new ShipmentKey("P2", "S1"),
+ shipments.put(new ShipmentKey(&quot;P2&quot;, &quot;S1&quot;),
new ShipmentData(200));
- shipments.put(new ShipmentKey("P3", "S1"),
+ shipments.put(new ShipmentKey(&quot;P3&quot;, &quot;S1&quot;),
new ShipmentData(400));
- shipments.put(new ShipmentKey("P4", "S1"),
+ shipments.put(new ShipmentKey(&quot;P4&quot;, &quot;S1&quot;),
new ShipmentData(200));
- shipments.put(new ShipmentKey("P5", "S1"),
+ shipments.put(new ShipmentKey(&quot;P5&quot;, &quot;S1&quot;),
new ShipmentData(100));
- shipments.put(new ShipmentKey("P6", "S1"),
+ shipments.put(new ShipmentKey(&quot;P6&quot;, &quot;S1&quot;),
new ShipmentData(100));
- shipments.put(new ShipmentKey("P1", "S2"),
+ shipments.put(new ShipmentKey(&quot;P1&quot;, &quot;S2&quot;),
new ShipmentData(300));
- shipments.put(new ShipmentKey("P2", "S2"),
+ shipments.put(new ShipmentKey(&quot;P2&quot;, &quot;S2&quot;),
new ShipmentData(400));
- shipments.put(new ShipmentKey("P2", "S3"),
+ shipments.put(new ShipmentKey(&quot;P2&quot;, &quot;S3&quot;),
new ShipmentData(200));
- shipments.put(new ShipmentKey("P2", "S4"),
+ shipments.put(new ShipmentKey(&quot;P2&quot;, &quot;S4&quot;),
new ShipmentData(200));
- shipments.put(new ShipmentKey("P4", "S4"),
+ shipments.put(new ShipmentKey(&quot;P4&quot;, &quot;S4&quot;),
new ShipmentData(300));
- shipments.put(new ShipmentKey("P5", "S4"),
+ shipments.put(new ShipmentKey(&quot;P5&quot;, &quot;S4&quot;),
new ShipmentData(400));
}</tt></b>
}
diff --git a/db/docs/collections/tutorial/collectionOverview.html b/db/docs/collections/tutorial/collectionOverview.html
index c01feb18d..02ac86e91 100644
--- a/db/docs/collections/tutorial/collectionOverview.html
+++ b/db/docs/collections/tutorial/collectionOverview.html
@@ -11,7 +11,7 @@
<link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="up" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="previous" href="Summary.html" title="Chapter 7. &#10;&#9;&#9;Summary&#10;&#9;" />
- <link rel="next" href="UsingCollectionsAPI.html" title="&#10; Using the Sleepycat Java Collections API&#10; " />
+ <link rel="next" href="UsingCollectionsAPI.html" title="&#10; Using the Java Collections API&#10; " />
</head>
<body>
<div class="navheader">
@@ -57,7 +57,7 @@
<li>
<p>
<a href="UsingCollectionsAPI.html">
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
</a>
</p>
</li>
@@ -193,10 +193,10 @@
As shown in the table above, the tuple format supports built-in ordering
(without specifying a custom comparator), while the serial format does
not. This means that when a specific key order is needed, tuples should
- be used instead of serial data. Alternatively, a custom BTree comparator should be
+ be used instead of serial data. Alternatively, a custom Btree comparator should be
specified using
<tt class="methodname">DatabaseConfig.setBtreeComparator()</tt>. Note that
- a custom BTree comparator will usually execute more slowly than the
+ a custom Btree comparator will usually execute more slowly than the
default byte-by-byte comparison. This makes using tuples an attractive
option, since they provide ordering along with optimal performance.
</p>
@@ -250,7 +250,7 @@
in other cases will create a database that is not portable
between platforms. When constructing the stored collection,
- the Sleepycat Java Collections API will throw an
+ the Java Collections API will throw an
<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" target="_top">IllegalArgumentException</a>
in such cases.
@@ -464,7 +464,7 @@
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> 
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
</td>
</tr>
</table>
diff --git a/db/docs/collections/tutorial/createbindingscollections.html b/db/docs/collections/tutorial/createbindingscollections.html
index aa68637dd..aa0c46253 100644
--- a/db/docs/collections/tutorial/createbindingscollections.html
+++ b/db/docs/collections/tutorial/createbindingscollections.html
@@ -251,7 +251,7 @@ public class SampleViews
follows.
</p>
<a id="cb_sampleviews_usage"></a>
- <pre class="programlisting"><b class="userinput"><tt> SampleDatabase sd = new SampleDatabase(new String("/home"));
+ <pre class="programlisting"><b class="userinput"><tt> SampleDatabase sd = new SampleDatabase(new String(&quot;/home&quot;));
SampleViews views = new SampleViews(sd);
Map partMap = views.getPartMap();
Set supplierEntries = views.getSupplierEntrySet();</tt></b> </pre>
diff --git a/db/docs/collections/tutorial/developing.html b/db/docs/collections/tutorial/developing.html
index 0f13dfe00..f8787ef3c 100644
--- a/db/docs/collections/tutorial/developing.html
+++ b/db/docs/collections/tutorial/developing.html
@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <title>Developing a Sleepycat Collections Application</title>
+ <title>Developing a DB Collections Application</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
<link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
@@ -15,7 +15,7 @@
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr>
- <th colspan="3" align="center">Developing a Sleepycat Collections Application</th>
+ <th colspan="3" align="center">Developing a DB Collections Application</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td>
@@ -31,14 +31,14 @@
<div class="titlepage">
<div>
<div>
- <h2 class="title" style="clear: both"><a id="developing"></a>Developing a Sleepycat Collections Application</h2>
+ <h2 class="title" style="clear: both"><a id="developing"></a>Developing a DB Collections Application</h2>
</div>
</div>
<div></div>
</div>
<p>
There are several important choices to make when developing an
- application using the Sleepycat Java Collections API.
+ application using the Java Collections API.
</p>
<div class="orderedlist">
<ol type="1">
@@ -52,7 +52,7 @@
Environments: Data Store, Concurrent Data Store, or
Transactional Data Store. For details on creating and
configuring the environment, see the
- <i class="citetitle">Berkeley DB Programmer's Reference Guide.</i>
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
</p>
</li>
<li>
@@ -74,7 +74,7 @@
depends on several factors such as whether you need ordered
keys, unique keys, record number access, and so forth. For more
information on access methods, see the
- <i class="citetitle">Berkeley DB Programmer's Reference Guide.</i>
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
</p>
</li>
<li>
@@ -173,18 +173,18 @@
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 Sleepycat Java Collections API this type of object is called an
- "entity". An entity binding is used to translate between the Java
+ the Java Collections API this type of object is called an
+ &quot;entity&quot;. 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 that the provided Sleepycat Java Collections API collection classes
+ Please be aware that the provided Java Collections API collection classes
do not conform completely to the interface contracts
defined in the <tt class="literal">java.util</tt> package. For example, all
iterators must be explicitly closed and the <tt class="methodname">size()</tt>
- method is not available. The differences between the Sleepycat Java
- Collections API collections and the standard Java collections are
+ method is not available. The differences between the Java Collections API
+ collections and the standard Java collections are
documented in
<a href="UsingStoredCollections.html#StoredVersusStandardCollections">
Stored Collections Versus Standard Java Collections
diff --git a/db/docs/collections/tutorial/entitieswithcollections.html b/db/docs/collections/tutorial/entitieswithcollections.html
index f66cc541a..592d4ea8b 100644
--- a/db/docs/collections/tutorial/entitieswithcollections.html
+++ b/db/docs/collections/tutorial/entitieswithcollections.html
@@ -81,12 +81,12 @@ public class Sample
<b class="userinput"><tt> 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"));
+ System.out.println(&quot;Adding Suppliers&quot;);
+ suppliers.add(new Supplier(&quot;S1&quot;, &quot;Smith&quot;, 20, &quot;London&quot;));
+ suppliers.add(new Supplier(&quot;S2&quot;, &quot;Jones&quot;, 10, &quot;Paris&quot;));
+ suppliers.add(new Supplier(&quot;S3&quot;, &quot;Blake&quot;, 30, &quot;Paris&quot;));
+ suppliers.add(new Supplier(&quot;S4&quot;, &quot;Clark&quot;, 20, &quot;London&quot;));
+ suppliers.add(new Supplier(&quot;S5&quot;, &quot;Adams&quot;, 30, &quot;Athens&quot;));
}</tt></b>
}
@@ -95,19 +95,19 @@ public class Sample
<b class="userinput"><tt> 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"));
+ System.out.println(&quot;Adding Parts&quot;);
+ parts.add(new Part(&quot;P1&quot;, &quot;Nut&quot;, &quot;Red&quot;,
+ new Weight(12.0, Weight.GRAMS), &quot;London&quot;));
+ parts.add(new Part(&quot;P2&quot;, &quot;Bolt&quot;, &quot;Green&quot;,
+ new Weight(17.0, Weight.GRAMS), &quot;Paris&quot;));
+ parts.add(new Part(&quot;P3&quot;, &quot;Screw&quot;, &quot;Blue&quot;,
+ new Weight(17.0, Weight.GRAMS), &quot;Rome&quot;));
+ parts.add(new Part(&quot;P4&quot;, &quot;Screw&quot;, &quot;Red&quot;,
+ new Weight(14.0, Weight.GRAMS), &quot;London&quot;));
+ parts.add(new Part(&quot;P5&quot;, &quot;Cam&quot;, &quot;Blue&quot;,
+ new Weight(12.0, Weight.GRAMS), &quot;Paris&quot;));
+ parts.add(new Part(&quot;P6&quot;, &quot;Cog&quot;, &quot;Red&quot;,
+ new Weight(19.0, Weight.GRAMS), &quot;London&quot;));
}</tt></b>
}
@@ -116,19 +116,19 @@ public class Sample
<b class="userinput"><tt> 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));
+ System.out.println(&quot;Adding Shipments&quot;);
+ shipments.add(new Shipment(&quot;P1&quot;, &quot;S1&quot;, 300));
+ shipments.add(new Shipment(&quot;P2&quot;, &quot;S1&quot;, 200));
+ shipments.add(new Shipment(&quot;P3&quot;, &quot;S1&quot;, 400));
+ shipments.add(new Shipment(&quot;P4&quot;, &quot;S1&quot;, 200));
+ shipments.add(new Shipment(&quot;P5&quot;, &quot;S1&quot;, 100));
+ shipments.add(new Shipment(&quot;P6&quot;, &quot;S1&quot;, 100));
+ shipments.add(new Shipment(&quot;P1&quot;, &quot;S2&quot;, 300));
+ shipments.add(new Shipment(&quot;P2&quot;, &quot;S2&quot;, 400));
+ shipments.add(new Shipment(&quot;P2&quot;, &quot;S3&quot;, 200));
+ shipments.add(new Shipment(&quot;P2&quot;, &quot;S4&quot;, 200));
+ shipments.add(new Shipment(&quot;P4&quot;, &quot;S4&quot;, 300));
+ shipments.add(new Shipment(&quot;P5&quot;, &quot;S4&quot;, 400));
}</tt></b>
} </pre>
<p>
@@ -154,21 +154,21 @@ public class Sample
public void doWork()
throws Exception
{
-<b class="userinput"><tt> printValues("Parts",
+<b class="userinput"><tt> printValues(&quot;Parts&quot;,
views.getPartSet().iterator());
- printValues("Suppliers",
+ printValues(&quot;Suppliers&quot;,
views.getSupplierSet().iterator());</tt></b>
- printValues("Suppliers for City Paris",
+ printValues(&quot;Suppliers for City Paris&quot;,
views.getSupplierByCityMap().duplicates(
- "Paris").iterator());
-<b class="userinput"><tt> printValues("Shipments",
+ &quot;Paris&quot;).iterator());
+<b class="userinput"><tt> printValues(&quot;Shipments&quot;,
views.getShipmentSet().iterator());</tt></b>
- printValues("Shipments for Part P1",
+ printValues(&quot;Shipments for Part P1&quot;,
views.getShipmentByPartMap().duplicates(
- new PartKey("P1")).iterator());
- printValues("Shipments for Supplier S1",
+ new PartKey(&quot;P1&quot;)).iterator());
+ printValues(&quot;Shipments for Supplier S1&quot;,
views.getShipmentBySupplierMap().duplicates(
- new SupplierKey("S1")).iterator());
+ new SupplierKey(&quot;S1&quot;)).iterator());
}
}
...
diff --git a/db/docs/collections/tutorial/handlingexceptions.html b/db/docs/collections/tutorial/handlingexceptions.html
index 47f477c7a..8222563ab 100644
--- a/db/docs/collections/tutorial/handlingexceptions.html
+++ b/db/docs/collections/tutorial/handlingexceptions.html
@@ -51,7 +51,7 @@
<a href="usingtransactions.html">
Using Transactions
</a>
- exception handling in a Sleepycat Java Collections API application in
+ exception handling in a Java Collections API application in
more detail.
</p>
<p>
@@ -81,7 +81,7 @@
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 Sleepycat Java Collections API provides two APIs
+ corrective actions. The Java Collections API provides two APIs
for transaction execution.
</p>
<div class="itemizedlist">
diff --git a/db/docs/collections/tutorial/implementingmain.html b/db/docs/collections/tutorial/implementingmain.html
index aee811e8d..02a64e271 100644
--- a/db/docs/collections/tutorial/implementingmain.html
+++ b/db/docs/collections/tutorial/implementingmain.html
@@ -87,6 +87,7 @@ public class Sample
sections. The <tt class="methodname">main</tt> method will create an instance of the
<tt class="classname">Sample</tt> class, and call its <tt class="methodname">run()</tt> and <tt class="methodname">close()</tt>
methods.
+
</p>
<p>
The following statements parse the program's command line
@@ -95,21 +96,21 @@ public class Sample
<a id="cb_main"></a>
<pre class="programlisting"> public static void main(String[] args)
{
-<b class="userinput"><tt> System.out.println("\nRunning sample: " + Sample.class);
- String homeDir = "./tmp";
+<b class="userinput"><tt> System.out.println(&quot;\nRunning sample: &quot; + Sample.class);
+ String homeDir = &quot;./tmp&quot;;
for (int i = 0; i &lt; args.length; i += 1)
{
String arg = args[i];
- if (args[i].equals("-h") &amp;&amp; i &lt; args.length - 1)
+ if (args[i].equals(&quot;-h&quot;) &amp;&amp; i &lt; args.length - 1)
{
i += 1;
homeDir = args[i];
}
else
{
- System.err.println("Usage:\n java " +
+ System.err.println(&quot;Usage:\n java &quot; +
Sample.class.getName() +
- "\n [-h &lt;home-directory&gt;]");
+ &quot;\n [-h &lt;home-directory&gt;]&quot;);
System.exit(2);
}
}</tt></b>
@@ -143,6 +144,7 @@ public class Sample
Of course, the command line arguments shown are only examples
and a real-life application may use different techniques for
configuring these options.
+
</p>
<p>
The following statements create an instance of the <tt class="classname">Sample</tt>
@@ -172,7 +174,7 @@ public class Sample
}
catch (Exception e)
{
- System.err.println("Exception during database close:");
+ System.err.println(&quot;Exception during database close:&quot;);
e.printStackTrace();
}
}
diff --git a/db/docs/collections/tutorial/index.html b/db/docs/collections/tutorial/index.html
index 7bb297e8c..a3d4c201b 100644
--- a/db/docs/collections/tutorial/index.html
+++ b/db/docs/collections/tutorial/index.html
@@ -27,7 +27,7 @@
<div class="titlepage">
<div>
<div>
- <h1 class="title"><a id="id2766498"></a>Berkeley DB Collections Tutorial</h1>
+ <h1 class="title"><a id="id650925"></a>Berkeley DB Collections Tutorial</h1>
</div>
<div>
<div class="legalnotice">
@@ -35,34 +35,38 @@
<b>Legal Notice</b>
</p>
<p>
- This documentation is distributed under the terms of the Sleepycat
- public license. You may review the terms of this license at:
- <a href="http://www.sleepycat.com/download/oslicense.html" target="_top">http://www.sleepycat.com/download/oslicense.html</a>
-
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
</p>
<p>
- Sleepycat Software, Berkeley DB, Berkeley DB XML and the Sleepycat logo
- are trademarks or service marks of Sleepycat Software, Inc. All rights to
- these marks are reserved. No third-party use is permitted without the
- express prior written consent of Sleepycat Software, Inc.
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
</p>
<p>
- <span class="trademark">Java</span>&#8482;
-
- <span>and all Java-based marks</span>
- are trademarks or registered trademarks
- of Sun Microsystems, Inc, in the United States and other
- <span>countries.</span>
-
+ <span class="trademark">Java</span>&#8482; and all Java-based marks are a trademark
+ or registered trademark of Sun Microsystems,
+ Inc, in the United States and other countries.
</p>
<p>
- To obtain a copy of this document's original source code, please write
- to <tt class="email">&lt;<a href="mailto:support@sleepycat.com">support@sleepycat.com</a>&gt;</tt>.
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
</p>
</div>
</div>
<div>
- <p class="pubdate">9/22/2004</p>
+ <p class="pubdate">9/20/2006</p>
</div>
</div>
<div></div>
@@ -85,6 +89,11 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dt>
+ <span class="sect1">
+ <a href="moreinfo.html">For More Information</a>
+ </span>
+ </dt>
</dl>
</dd>
<dt>
@@ -103,7 +112,7 @@
</dt>
<dt>
<span class="sect1">
- <a href="developing.html">Developing a Sleepycat Collections Application</a>
+ <a href="developing.html">Developing a DB Collections Application</a>
</span>
</dt>
<dt>
@@ -421,7 +430,7 @@ Creating Tuple-Serial Entity Bindings
<dt>
<span class="sect1">
<a href="UsingCollectionsAPI.html">
- Using the Sleepycat Java Collections API
+ Using the Java Collections API
</a>
</span>
</dt>
diff --git a/db/docs/collections/tutorial/intro.html b/db/docs/collections/tutorial/intro.html
index 5e2a061b7..ec0d79ca8 100644
--- a/db/docs/collections/tutorial/intro.html
+++ b/db/docs/collections/tutorial/intro.html
@@ -10,8 +10,8 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
<link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="up" href="index.html" title="Berkeley DB Collections Tutorial" />
- <link rel="previous" href="preface.html" title="Preface" />
- <link rel="next" href="developing.html" title="Developing a Sleepycat Collections Application" />
+ <link rel="previous" href="moreinfo.html" title="For More Information" />
+ <link rel="next" href="developing.html" title="Developing a DB Collections Application" />
</head>
<body>
<div class="navheader">
@@ -22,7 +22,7 @@
</th>
</tr>
<tr>
- <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="left"><a accesskey="p" href="moreinfo.html">Prev</a> </td>
<th width="60%" align="center"> </th>
<td width="20%" align="right"> <a accesskey="n" href="developing.html">Next</a></td>
</tr>
@@ -52,7 +52,7 @@
</dt>
<dt>
<span class="sect1">
- <a href="developing.html">Developing a Sleepycat Collections Application</a>
+ <a href="developing.html">Developing a DB Collections Application</a>
</span>
</dt>
<dt>
@@ -63,28 +63,28 @@
</dl>
</div>
<p>
- The Sleepycat Java Collections API is a Java framework that extends
+ The Java Collections API is a Java framework that extends
the well known
<a href="http://java.sun.com/j2se/1.3/docs/guide/collections/" target="_top">Java Collections</a>
design pattern such that collections can now be
- stored, updated and queried in a transactional manner. The Sleepycat Java
- Collections API is a layer on top of DB.
+ stored, updated and queried in a transactional manner. The
+ Java Collections API is a layer on top of DB.
</p>
<p>
- Together the Sleepycat Java Collections API and Berkeley DB provide an
+ Together the Java Collections 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 Sleepycat
- Java Collections API with confidence.
+ management for their projects can quickly adopt and deploy the
+ Java Collections API with confidence.
</p>
<p>
This framework was first known as
<a href="http://greybird-db.sourceforge.net/" target="_top">Greybird DB</a>
- written by Mark Hayes. Sleepycat Software has collaborated with Mark to
+ written by Mark Hayes. Mark collaborated with us to
permanently incorporate his excellent work into our distribution
- and support it as an ongoing part of Berkeley DB and Berkeley DB Java
- Edition. The repository of source code that remains at Sourceforge at version 0.9.0 is
+ and to support it as an ongoing part of Berkeley DB and Berkeley DB Java
+ Edition. 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 or Berkeley DB Java Edition.
@@ -107,7 +107,7 @@
- The Sleepycat Java Collections API is a layer on top of
+ The Java Collections API is a layer on top of
<span>that
thin JNI mapping of the C API to Berkeley DB.</span>
@@ -170,7 +170,7 @@
</li>
<li>
<p>
- The Sleepycat Java Collections API insulates the application
+ The Java Collections 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
@@ -180,17 +180,17 @@
</ul>
</div>
<p>
- Note that the Sleepycat Java Collections API does not support caching
+ Note that the Java Collections API does not support caching
of programming language objects nor does it keep track of their stored
- status. This is in contrast to "persistent object" approaches such
+ status. This is in contrast to &quot;persistent object&quot; approaches such
as those defined by
<a href="http://www.odmg.org/" target="_top">ODMG</a>
and JDO
(<a href="http://www.jcp.org/en/jsr/detail?id=12" target="_top">JSR 12</a>).
Such approaches have benefits but also require sophisticated object
- caching. For simplicity the Sleepycat Java Collections API treats data
+ caching. For simplicity the Java Collections API treats data
objects by value, not by reference, and does not perform object
- caching of any kind. Since the Sleepycat Java Collections API is a thin
+ caching of any kind. Since the Java Collections 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.
@@ -201,18 +201,18 @@
<hr />
<table width="100%" summary="Navigation footer">
<tr>
- <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="40%" align="left"><a accesskey="p" href="moreinfo.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="index.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="developing.html">Next</a></td>
</tr>
<tr>
- <td width="40%" align="left" valign="top">Preface </td>
+ <td width="40%" align="left" valign="top">For More Information </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
- <td width="40%" align="right" valign="top"> Developing a Sleepycat Collections Application</td>
+ <td width="40%" align="right" valign="top"> Developing a DB Collections Application</td>
</tr>
</table>
</div>
diff --git a/db/docs/collections/tutorial/moreinfo.html b/db/docs/collections/tutorial/moreinfo.html
new file mode 100644
index 000000000..9a98b5bbc
--- /dev/null
+++ b/db/docs/collections/tutorial/moreinfo.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>For More Information</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
+ <link rel="up" href="preface.html" title="Preface" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="intro.html" title="Chapter 1. &#10; Introduction&#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">For More Information</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center">Preface</th>
+ <td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="moreinfo"></a>For More Information</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/JAVA/index.html" target="_top">
+ Getting Started with Berkeley DB for Java
+ </a>
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/JAVA/index.html" target="_top">
+ Getting Started with Transaction Processing for Java
+ </a>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/JAVA/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for Java
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/java/index.html" target="_top">
+ Berkeley DB Javadoc
+ </a>
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="preface.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. 
+ Introduction
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/collections/tutorial/openclasscatalog.html b/db/docs/collections/tutorial/openclasscatalog.html
index fac34445b..b68f6abdf 100644
--- a/db/docs/collections/tutorial/openclasscatalog.html
+++ b/db/docs/collections/tutorial/openclasscatalog.html
@@ -72,7 +72,7 @@ import java.io.FileNotFoundException;
public class SampleDatabase
{
private Environment env;
-<b class="userinput"><tt> private static final String CLASS_CATALOG = "java_class_catalog";</tt></b>
+<b class="userinput"><tt> private static final String CLASS_CATALOG = &quot;java_class_catalog&quot;;</tt></b>
...
<b class="userinput"><tt> private StoredClassCatalog javaCatalog;</tt></b>
...
@@ -80,7 +80,7 @@ public class SampleDatabase
<p>
While the class catalog is itself a database, it contains
metadata for other databases and is therefore treated specially by
- the Sleepycat Java Collections API. The
+ the Java Collections API. The
<a href="../../java/com/sleepycat/bind/serial/StoredClassCatalog.html" target="_top">StoredClassCatalog</a>
class encapsulates the catalog store and implements this special
@@ -89,7 +89,7 @@ public class SampleDatabase
<p>
The following statements open the class catalog by creating a
<tt class="classname">Database</tt> and a <tt class="classname">StoredClassCatalog</tt> object. The catalog
- database is created if it doesn't already exist.
+ database is created if it does not already exist.
</p>
<a id="cb_java_sampledatabase2"></a>
<pre class="programlisting"> public SampleDatabase(String homeDirectory)
@@ -124,7 +124,7 @@ public class SampleDatabase
</p>
<p>
<tt class="methodname">setAllowCreate()</tt> is set to true to specify
- that the database will be created if it doesn't already exist. If
+ that the database will be created if it does not already exist. If
this parameter is not specified, an exception will be thrown if the
database does not already exist.
</p>
@@ -142,7 +142,7 @@ public class SampleDatabase
</p>
<p>
The second and third parameters of <tt class="methodname">openDatabase()</tt>
- specify the filename and database (sub-file) name o fthe database. The
+ specify the filename and database (sub-file) name of the database. The
database name is optional and is <tt class="literal">null</tt> in this example.
</p>
<p>
diff --git a/db/docs/collections/tutorial/opendatabases.html b/db/docs/collections/tutorial/opendatabases.html
index 3a4913dea..811b8f54f 100644
--- a/db/docs/collections/tutorial/opendatabases.html
+++ b/db/docs/collections/tutorial/opendatabases.html
@@ -60,9 +60,9 @@
<pre class="programlisting">public class SampleDatabase
{
...
-<b class="userinput"><tt> private static final String SUPPLIER_STORE = "supplier_store";
- private static final String PART_STORE = "part_store";
- private static final String SHIPMENT_STORE = "shipment_store";</tt></b>
+<b class="userinput"><tt> private static final String SUPPLIER_STORE = &quot;supplier_store&quot;;
+ private static final String PART_STORE = &quot;part_store&quot;;
+ private static final String SHIPMENT_STORE = &quot;shipment_store&quot;;</tt></b>
...
<b class="userinput"><tt> private Database supplierDb;
private Database partDb;
@@ -91,8 +91,7 @@
supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);</tt></b>
...
- }
- </pre>
+ } </pre>
<p>
The database configuration object that was used previously for
opening the catalog database is reused for opening the three
@@ -112,8 +111,7 @@
shipmentDb.close();</tt></b>
javaCatalog.close();
env.close();
- }
- </pre>
+ } </pre>
<p>
All databases, including the catalog database, must be closed
before closing the environment.
diff --git a/db/docs/collections/tutorial/opendbenvironment.html b/db/docs/collections/tutorial/opendbenvironment.html
index e0db5d3ea..28edafb2b 100644
--- a/db/docs/collections/tutorial/opendbenvironment.html
+++ b/db/docs/collections/tutorial/opendbenvironment.html
@@ -94,7 +94,7 @@ public class SampleDatabase
<span>com.sleepycat.db</span>
package. Both packages are needed to create a complete application
- based on the Sleepycat Java Collections API.
+ based on the Java Collections API.
</p>
<p>
The following statements create an
@@ -107,7 +107,7 @@ public class SampleDatabase
<pre class="programlisting">public SampleDatabase(String homeDirectory)
throws DatabaseException, FileNotFoundException
{
-<b class="userinput"><tt> System.out.println("Opening environment in: " + homeDirectory);
+<b class="userinput"><tt> System.out.println(&quot;Opening environment in: &quot; + homeDirectory);
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setTransactional(true);
diff --git a/db/docs/collections/tutorial/openingforeignkeys.html b/db/docs/collections/tutorial/openingforeignkeys.html
index 217236eac..0e274a98a 100644
--- a/db/docs/collections/tutorial/openingforeignkeys.html
+++ b/db/docs/collections/tutorial/openingforeignkeys.html
@@ -63,9 +63,9 @@ import com.sleepycat.db.SecondaryDatabase;</tt></b>
public class SampleDatabase
{
...
-<b class="userinput"><tt> private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+<b class="userinput"><tt> private static final String SHIPMENT_PART_INDEX = &quot;shipment_part_index&quot;;
private static final String SHIPMENT_SUPPLIER_INDEX =
- "shipment_supplier_index";
+ &quot;shipment_supplier_index&quot;;
...
private SecondaryDatabase shipmentByPartDb;
private SecondaryDatabase shipmentBySupplierDb;
diff --git a/db/docs/collections/tutorial/preface.html b/db/docs/collections/tutorial/preface.html
index f501252cd..4a2f8a93d 100644
--- a/db/docs/collections/tutorial/preface.html
+++ b/db/docs/collections/tutorial/preface.html
@@ -9,7 +9,7 @@
<link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="up" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="previous" href="index.html" title="Berkeley DB Collections Tutorial" />
- <link rel="next" href="intro.html" title="Chapter 1. &#10; Introduction&#10; " />
+ <link rel="next" href="moreinfo.html" title="For More Information" />
</head>
<body>
<div class="navheader">
@@ -20,7 +20,7 @@
<tr>
<td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
<th width="60%" align="center"> </th>
- <td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td>
+ <td width="20%" align="right"> <a accesskey="n" href="moreinfo.html">Next</a></td>
</tr>
</table>
<hr />
@@ -44,6 +44,11 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dt>
+ <span class="sect1">
+ <a href="moreinfo.html">For More Information</a>
+ </span>
+ </dt>
</dl>
</div>
<p>
@@ -53,7 +58,7 @@
with which you can quickly become efficient with this API. As such, this document is
intended for Java developers and senior software architects who are
looking for transactionally-protected backing of their Java collections.
- No prior experience with Sleepycat technologies is expected or required.
+ No prior experience with DB technologies is expected or required.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -69,12 +74,12 @@
</p>
<p>
Class names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
- names</tt>. For example: "The <tt class="methodname">Environment.openDatabase()</tt> method
- returns a <tt class="classname">Database</tt> class object."
+ names</tt>. For example: &quot;The <tt class="methodname">Environment.openDatabase()</tt> method
+ returns a <tt class="classname">Database</tt> class object.&quot;
</p>
<p>
- Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: "Go to your
- <span class="emphasis"><em>DB_INSTALLATION_HOME</em></span> directory."
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALLATION_HOME</em></span> directory.&quot;
</p>
<p>
Program examples are displayed in a monospaced font on a shaded background. For example:
@@ -101,7 +106,7 @@ import java.io.File;
<b class="userinput"><tt>Environment myDbEnv;
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
-myDbEnv = new Environment(new File("/export/dbEnv"), envConfig);</tt></b> </pre>
+myDbEnv = new Environment(new File(&quot;/export/dbEnv&quot;), envConfig);</tt></b> </pre>
</div>
</div>
<div class="navfooter">
@@ -112,16 +117,14 @@ myDbEnv = new Environment(new File("/export/dbEnv"), envConfig);</tt></b> </pre>
<td width="20%" align="center">
<a accesskey="u" href="index.html">Up</a>
</td>
- <td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td>
+ <td width="40%" align="right"> <a accesskey="n" href="moreinfo.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Berkeley DB Collections Tutorial </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
- <td width="40%" align="right" valign="top"> Chapter 1. 
- Introduction
- </td>
+ <td width="40%" align="right" valign="top"> For More Information</td>
</tr>
</table>
</div>
diff --git a/db/docs/collections/tutorial/retrievingbyindexkey.html b/db/docs/collections/tutorial/retrievingbyindexkey.html
index b4f731587..96731060e 100644
--- a/db/docs/collections/tutorial/retrievingbyindexkey.html
+++ b/db/docs/collections/tutorial/retrievingbyindexkey.html
@@ -97,28 +97,28 @@ public class Sample
public void doWork()
throws Exception
{
- printEntries("Parts",
+ printEntries(&quot;Parts&quot;,
views.getPartEntrySet().iterator());
- printEntries("Suppliers",
+ printEntries(&quot;Suppliers&quot;,
views.getSupplierEntrySet().iterator());
-<b class="userinput"><tt> printValues("Suppliers for City Paris",
+<b class="userinput"><tt> printValues(&quot;Suppliers for City Paris&quot;,
views.getSupplierByCityMap().duplicates(
- "Paris").iterator());</tt></b>
- printEntries("Shipments",
+ &quot;Paris&quot;).iterator());</tt></b>
+ printEntries(&quot;Shipments&quot;,
views.getShipmentEntrySet().iterator());
-<b class="userinput"><tt> printValues("Shipments for Part P1",
+<b class="userinput"><tt> printValues(&quot;Shipments for Part P1&quot;,
views.getShipmentByPartMap().duplicates(
- new PartKey("P1")).iterator());
- printValues("Shipments for Supplier S1",
+ new PartKey(&quot;P1&quot;)).iterator());
+ printValues(&quot;Shipments for Supplier S1&quot;,
views.getShipmentBySupplierMap().duplicates(
new
- SupplierKey("S1")).iterator());</tt></b>
+ SupplierKey(&quot;S1&quot;)).iterator());</tt></b>
}
}
<b class="userinput"><tt> private void printValues(String label, Iterator iterator)
{
- System.out.println("\n--- " + label + " ---");
+ System.out.println(&quot;\n--- &quot; + label + &quot; ---&quot;);
try
{
while (iterator.hasNext())
diff --git a/db/docs/collections/tutorial/retrievingdatabaseitems.html b/db/docs/collections/tutorial/retrievingdatabaseitems.html
index 4b07a0f8c..d73e93b72 100644
--- a/db/docs/collections/tutorial/retrievingdatabaseitems.html
+++ b/db/docs/collections/tutorial/retrievingdatabaseitems.html
@@ -51,8 +51,7 @@
<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" target="_top">Map.Entry</a>
objects for each store. All standard Java methods for retrieving
- objects from a collection may be used with the Sleepycat Java Collections
- API.
+ objects from a collection may be used with the Java Collections API.
</p>
<p>
The <tt class="methodname">PrintDatabase.doWork()</tt> method calls
@@ -77,11 +76,11 @@ public class Sample
public void doWork()
throws Exception
{
-<b class="userinput"><tt> printEntries("Parts",
+<b class="userinput"><tt> printEntries(&quot;Parts&quot;,
views.getPartEntrySet().iterator());
- printEntries("Suppliers",
+ printEntries(&quot;Suppliers&quot;,
views.getSupplierEntrySet().iterator());
- printEntries("Shipments",
+ printEntries(&quot;Shipments&quot;,
views.getShipmentEntrySet().iterator());</tt></b>
}
}
@@ -116,7 +115,7 @@ public class Sample
<a id="cb_printentries"></a>
<pre class="programlisting"> private void printEntries(String label, Iterator iterator)
{
-<b class="userinput"><tt> System.out.println("\n--- " + label + " ---");
+<b class="userinput"><tt> System.out.println(&quot;\n--- &quot; + label + &quot; ---&quot;);
try
{
while (iterator.hasNext())
diff --git a/db/docs/collections/tutorial/tutorialintroduction.html b/db/docs/collections/tutorial/tutorialintroduction.html
index 6709e3961..39c1c349a 100644
--- a/db/docs/collections/tutorial/tutorialintroduction.html
+++ b/db/docs/collections/tutorial/tutorialintroduction.html
@@ -8,7 +8,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
<link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
<link rel="up" href="intro.html" title="Chapter 1. &#10; Introduction&#10; " />
- <link rel="previous" href="developing.html" title="Developing a Sleepycat Collections Application" />
+ <link rel="previous" href="developing.html" title="Developing a DB Collections Application" />
<link rel="next" href="BasicProgram.html" title="Chapter 2. &#10;&#9;&#9;The Basic Program&#10;&#9;" />
</head>
<body>
@@ -37,14 +37,13 @@
<div></div>
</div>
<p>
- Most of the remainder of this document illustrates the use of the Sleepycat Java
- Collections API by presenting a tutorial that describes usage of the API.
+ Most of the remainder of this document illustrates the use of the
+ Java Collections API by presenting a tutorial that describes usage of the API.
This tutorial builds a shipment database, a familiar example from classic
database texts.
</p>
<p>
- The examples illustrate the following concepts of the Sleepycat Java
- Collections API:
+ The examples illustrate the following concepts of the Java Collections API:
</p>
<div class="itemizedlist">
<ul type="disc">
@@ -178,7 +177,7 @@
be defined in the first example program.
</p>
<p>
- In general the Sleepycat Java Collections API uses bindings to
+ In general the Java Collections API uses bindings to
describe how Java objects are stored. A binding defines the stored
data syntax and the mapping between a Java object and the stored
data. The example programs show how to create different types of
@@ -187,7 +186,9 @@
<p>
The following tables show the record values that are used in
all the example programs in the tutorial.
+ <span>
+ </span>
</p>
<div class="informaltable">
<table border="1" width="80%">
@@ -393,7 +394,7 @@
<td width="40%" align="right"> <a accesskey="n" href="BasicProgram.html">Next</a></td>
</tr>
<tr>
- <td width="40%" align="left" valign="top">Developing a Sleepycat Collections Application </td>
+ <td width="40%" align="left" valign="top">Developing a DB Collections Application </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
diff --git a/db/docs/collections/tutorial/usingtransactions.html b/db/docs/collections/tutorial/usingtransactions.html
index 311189c69..36c7a3594 100644
--- a/db/docs/collections/tutorial/usingtransactions.html
+++ b/db/docs/collections/tutorial/usingtransactions.html
@@ -46,7 +46,7 @@
DB transactional applications have standard
transactional characteristics: recoverability, atomicity and
integrity (this is sometimes also referred to generically as <span class="emphasis"><em>ACID
- properties</em></span>). The Sleepycat Java Collections API provides these
+ properties</em></span>). The Java Collections API provides these
transactional capabilities using a <span class="emphasis"><em>transaction-per-thread</em></span>
model. Once a transaction is begun, it is implicitly associated
with the current thread until it is committed or aborted. This
@@ -71,7 +71,7 @@
</ul>
</div>
<p>
- The Sleepycat Java Collections API provides two transaction APIs. The
+ The Java Collections API provides two transaction APIs. The
lower-level API is the
<a href="../../java/com/sleepycat/collections/CurrentTransaction.html" target="_top">CurrentTransaction</a>
diff --git a/db/docs/gsg/C/BerkeleyDB-Core-C-GSG.pdf b/db/docs/gsg/C/BerkeleyDB-Core-C-GSG.pdf
index 7bb4ed0f4..c6abf15f1 100644
--- a/db/docs/gsg/C/BerkeleyDB-Core-C-GSG.pdf
+++ b/db/docs/gsg/C/BerkeleyDB-Core-C-GSG.pdf
Binary files differ
diff --git a/db/docs/gsg/C/CoreCursorUsage.html b/db/docs/gsg/C/CoreCursorUsage.html
index 009f0ab58..e7263ef2e 100644
--- a/db/docs/gsg/C/CoreCursorUsage.html
+++ b/db/docs/gsg/C/CoreCursorUsage.html
@@ -46,9 +46,7 @@
can provide the item and show the vendor's contact information.
</p>
<p>
- Specifically, the
- <tt class="classname">example_database_read</tt>
-
+ Specifically, the <tt class="classname">example_database_read</tt>
application does the following:
</p>
<div class="orderedlist">
@@ -56,9 +54,7 @@
<li>
<p>
Opens the the inventory and vendor databases
- that were created by our
- <tt class="classname">example_database_load</tt>
-
+ that were created by our <tt class="classname">example_database_load</tt>
application. See
<a href="DbUsage.html#exampledbload">example_database_load</a>
@@ -113,7 +109,7 @@
<a id="c_cursor10"></a>
<pre class="programlisting">/* File: example_database_read.c */
/* gettingstarted_common.h includes db.h for us */
-#include "gettingstarted_common.h"
+#include &quot;gettingstarted_common.h&quot;
/* Forward declarations */
char * show_inventory_item(void *);
@@ -153,9 +149,9 @@ main(int argc, char *argv[])
set_db_filenames(&amp;my_stock);
/* Open all databases */
- ret = databases_setup(&amp;my_stock, "example_database_read", stderr);
+ ret = databases_setup(&amp;my_stock, &quot;example_database_read&quot;, stderr);
if (ret != 0) {
- fprintf(stderr, "Error opening databases\n");
+ fprintf(stderr, &quot;Error opening databases\n&quot;);
databases_close(&amp;my_stock);
return (ret);
}
@@ -262,12 +258,12 @@ show_inventory_item(void *vBuf)
vendor_name = buf + buf_pos;
/* Display all this information */
- printf("name: %s\n", name);
- printf("\tSKU: %s\n", sku);
- printf("\tCategory: %s\n", category);
- printf("\tPrice: %.2f\n", price);
- printf("\tQuantity: %i\n", quantity);
- printf("\tVendor:\n");
+ printf(&quot;name: %s\n&quot;, name);
+ printf(&quot;\tSKU: %s\n&quot;, sku);
+ printf(&quot;\tCategory: %s\n&quot;, category);
+ printf(&quot;\tPrice: %.2f\n&quot;, price);
+ printf(&quot;\tQuantity: %i\n&quot;, quantity);
+ printf(&quot;\tVendor:\n&quot;);
/* Return the vendor's name */
return(vendor_name);
@@ -315,24 +311,24 @@ show_vendor_record(char *vendor_name, DB *vendor_dbp)
/* Get the record */
ret = vendor_dbp-&gt;get(vendor_dbp, 0, &amp;key, &amp;data, 0);
if (ret != 0) {
- vendor_dbp-&gt;err(vendor_dbp, ret, "Error searching for vendor: '%s'",
+ vendor_dbp-&gt;err(vendor_dbp, ret, &quot;Error searching for vendor: '%s'&quot;,
vendor_name);
return(ret);
} else {
- printf("\t\t%s\n", my_vendor.name);
- printf("\t\t%s\n", my_vendor.street);
- printf("\t\t%s, %s\n", my_vendor.city, my_vendor.state);
- printf("\t\t%s\n\n", my_vendor.zipcode);
- printf("\t\t%s\n\n", my_vendor.phone_number);
- printf("\t\tContact: %s\n", my_vendor.sales_rep);
- printf("\t\t%s\n", my_vendor.sales_rep_phone);
+ printf(&quot;\t\t%s\n&quot;, my_vendor.name);
+ printf(&quot;\t\t%s\n&quot;, my_vendor.street);
+ printf(&quot;\t\t%s, %s\n&quot;, my_vendor.city, my_vendor.state);
+ printf(&quot;\t\t%s\n\n&quot;, my_vendor.zipcode);
+ printf(&quot;\t\t%s\n\n&quot;, my_vendor.phone_number);
+ printf(&quot;\t\tContact: %s\n&quot;, my_vendor.sales_rep);
+ printf(&quot;\t\t%s\n&quot;, my_vendor.sales_rep_phone);
}
return(0);
} </pre>
</div>
<p>
That completes the implementation of
- <tt class="classname">excxx_example_database_read()</tt>. In the next chapter, we
+ <tt class="classname">example_database_read()</tt>. In the next chapter, we
will extend this application to make use of a secondary database so that
we can query the inventory database for a specific inventory item.
</p>
diff --git a/db/docs/gsg/C/CoreDBAdmin.html b/db/docs/gsg/C/CoreDBAdmin.html
index bf34be035..65f102a61 100644
--- a/db/docs/gsg/C/CoreDBAdmin.html
+++ b/db/docs/gsg/C/CoreDBAdmin.html
@@ -85,7 +85,7 @@ DB *dbp;
/* Database open and subsequent operations omitted for clarity */
dbp-&gt;remove(dbp, /* Database pointer */
- "mydb.db", /* Database file to remove */
+ &quot;mydb.db&quot;, /* Database file to remove */
NULL, /* Database to remove. This is
* NULL so the entire file is
* removed. */
@@ -113,11 +113,11 @@ DB *dbp;
/* Database open and subsequent operations omitted for clarity */
dbp-&gt;rename(dbp, /* Database pointer */
- "mydb.db", /* Database file to rename */
+ &quot;mydb.db&quot;, /* Database file to rename */
NULL, /* Database to rename. This is
* NULL so the entire file is
* renamed. */
- "newdb.db", /* New database file name */
+ &quot;newdb.db&quot;, /* New database file name */
0); /* Flags. None used. */</pre>
</li>
</ul>
diff --git a/db/docs/gsg/C/CoreDbUsage.html b/db/docs/gsg/C/CoreDbUsage.html
index 754fd02d9..729090baa 100644
--- a/db/docs/gsg/C/CoreDbUsage.html
+++ b/db/docs/gsg/C/CoreDbUsage.html
@@ -101,7 +101,7 @@ void set_db_filenames(STOCK_DBS *my_stock); </pre>
</p>
<a id="c_db12"></a>
<pre class="programlisting">/* File: gettingstarted_common.c */
-#include "gettingstarted_common.h"
+#include &quot;gettingstarted_common.h&quot;
/* Initializes the STOCK_DBS struct.*/
void
@@ -124,13 +124,13 @@ set_db_filenames(STOCK_DBS *my_stock)
/* Create the Inventory DB file name */
size = strlen(my_stock-&gt;db_home_dir) + strlen(INVENTORYDB) + 1;
my_stock-&gt;inventory_db_name = malloc(size);
- snprintf(my_stock-&gt;inventory_db_name, size, "%s%s",
+ snprintf(my_stock-&gt;inventory_db_name, size, &quot;%s%s&quot;,
my_stock-&gt;db_home_dir, INVENTORYDB);
/* Create the Vendor DB file name */
size = strlen(my_stock-&gt;db_home_dir) + strlen(VENDORDB) + 1;
my_stock-&gt;vendor_db_name = malloc(size);
- snprintf(my_stock-&gt;vendor_db_name, size, "%s%s",
+ snprintf(my_stock-&gt;vendor_db_name, size, &quot;%s%s&quot;,
my_stock-&gt;db_home_dir, VENDORDB);
} </pre>
</div>
@@ -163,7 +163,7 @@ open_database(DB **dbpp, /* The DB handle that we are opening */
/* Initialize the DB handle */
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
- fprintf(error_file_pointer, "%s: %s\n", program_name,
+ fprintf(error_file_pointer, &quot;%s: %s\n&quot;, program_name,
db_strerror(ret));
return(ret);
}
@@ -187,7 +187,7 @@ open_database(DB **dbpp, /* The DB handle that we are opening */
open_flags, /* Open flags */
0); /* File mode. Using defaults */
if (ret != 0) {
- dbp-&gt;err(dbp, ret, "Database '%s' open failed.", file_name);
+ dbp-&gt;err(dbp, ret, &quot;Database '%s' open failed.&quot;, file_name);
return(ret);
}
@@ -234,7 +234,7 @@ databases_setup(STOCK_DBS *my_stock, const char *program_name,
*/
return (ret);
- printf("databases opened successfully\n");
+ printf(&quot;databases opened successfully\n&quot;);
return (0);
}</pre>
</div>
@@ -260,18 +260,18 @@ databases_close(STOCK_DBS *my_stock)
if (my_stock-&gt;inventory_dbp != NULL) {
ret = my_stock-&gt;inventory_dbp-&gt;close(my_stock-&gt;inventory_dbp, 0);
if (ret != 0)
- fprintf(stderr, "Inventory database close failed: %s\n",
+ fprintf(stderr, &quot;Inventory database close failed: %s\n&quot;,
db_strerror(ret));
}
if (my_stock-&gt;vendor_dbp != NULL) {
ret = my_stock-&gt;vendor_dbp-&gt;close(my_stock-&gt;vendor_dbp, 0);
if (ret != 0)
- fprintf(stderr, "Vendor database close failed: %s\n",
+ fprintf(stderr, &quot;Vendor database close failed: %s\n&quot;,
db_strerror(ret));
}
- printf("databases closed.\n");
+ printf(&quot;databases closed.\n&quot;);
return (0);
} </pre>
</div>
diff --git a/db/docs/gsg/C/CoreEnvUsage.html b/db/docs/gsg/C/CoreEnvUsage.html
index 20a1ae32b..07a411400 100644
--- a/db/docs/gsg/C/CoreEnvUsage.html
+++ b/db/docs/gsg/C/CoreEnvUsage.html
@@ -51,6 +51,9 @@
created if it does not already exist.
</p>
<p>
+ You will also need to initialize the in-memory cache when you open your environment.
+ </p>
+ <p>
For example, to
<span>create an environment handle and</span>
open an environment:
@@ -70,20 +73,21 @@ int ret; /* function return value */
*/
ret = db_env_create(&amp;myEnv, 0);
if (ret != 0) {
- fprintf(stderr, "Error creating env handle: %s\n", db_strerror(ret));
+ fprintf(stderr, &quot;Error creating env handle: %s\n&quot;, db_strerror(ret));
return -1;
}
/* Open the environment. */
-env_flags = DB_CREATE; /* If the environment does not exist,
- * create it. */
+env_flags = DB_CREATE | /* If the environment does not exist,
+ * create it. */
+ DB_INIT_MPOOL; /* Initialize the in-memory cache. */
ret = myEnv-&gt;open(myEnv, /* DB_ENV ptr */
- "/export1/testEnv", /* env home directory */
+ &quot;/export1/testEnv&quot;, /* env home directory */
env_flags, /* Open flags */
0); /* File mode (default) */
if (ret != 0) {
- fprintf(stderr, "Environment open failed: %s", db_strerror(ret));
+ fprintf(stderr, &quot;Environment open failed: %s&quot;, db_strerror(ret));
return -1;
} </pre>
<p>
@@ -108,7 +112,7 @@ db_flags = DB_CREATE; /* If the database does not exist,
/* open the database */
ret = dbp-&gt;open(dbp, /* DB structure pointer */
NULL, /* Transaction pointer */
- "my_db.db", /* On-disk file that holds the database. */
+ &quot;my_db.db&quot;, /* On-disk file that holds the database. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
db_flags, /* Open flags */
diff --git a/db/docs/gsg/C/DB.html b/db/docs/gsg/C/DB.html
index 4c56004b5..08b5724a0 100644
--- a/db/docs/gsg/C/DB.html
+++ b/db/docs/gsg/C/DB.html
@@ -77,8 +77,7 @@
</dl>
</div>
<p>In Berkeley DB, a database is a collection of <span class="emphasis"><em>records</em></span>. Records,
- in turn, consist of two parts: key and data. That is, records consist of
- key/data pairings.
+ in turn, consist of key/data pairings.
</p>
<p>
Conceptually, you can think of a
@@ -159,7 +158,7 @@ flags = DB_CREATE; /* If the database does not exist,
/* open the database */
ret = dbp-&gt;open(dbp, /* DB structure pointer */
NULL, /* Transaction pointer */
- "my_db.db", /* On-disk file that holds the database. */
+ &quot;my_db.db&quot;, /* On-disk file that holds the database. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
flags, /* Open flags */
diff --git a/db/docs/gsg/C/DBEntry.html b/db/docs/gsg/C/DBEntry.html
index 3adf78171..321148040 100644
--- a/db/docs/gsg/C/DBEntry.html
+++ b/db/docs/gsg/C/DBEntry.html
@@ -153,7 +153,7 @@
DBT key, data;
float money = 122.45;
-char *description = "Grocery bill.";
+char *description = &quot;Grocery bill.&quot;;
/* Zero out the DBTs before using them. */
memset(&amp;key, 0, sizeof(DBT));
@@ -174,9 +174,7 @@ data.size = strlen(description) + 1; </pre>
Note that in the following example we do not allow DB to assign the
memory for the retrieval of the money value. The reason why is that some
systems may require float values to have a specific alignment, and the
- memory as returned by
- <tt class="methodname">DB</tt>
-
+ memory as returned by DB
may not be properly aligned (the same problem may exist for structures
on some systems). We tell DB to use our memory instead of its
own by specifying the <tt class="literal">DB_DBT_USERMEM</tt> flag. Be aware that
diff --git a/db/docs/gsg/C/DBOpenFlags.html b/db/docs/gsg/C/DBOpenFlags.html
index 20d6ee251..fccbb1831 100644
--- a/db/docs/gsg/C/DBOpenFlags.html
+++ b/db/docs/gsg/C/DBOpenFlags.html
@@ -39,7 +39,7 @@
Note that this list is not exhaustive &#8212; it includes only those flags likely
to be of interest for introductory, single-threaded
database applications. For a complete list of the flags available to you, see the
- <i class="citetitle">Berkeley DB C API Reference Guide.</i>
+ <i class="citetitle">Berkeley DB C API guide.</i>
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
diff --git a/db/docs/gsg/C/DbUsage.html b/db/docs/gsg/C/DbUsage.html
index b2e81244c..a1d35b612 100644
--- a/db/docs/gsg/C/DbUsage.html
+++ b/db/docs/gsg/C/DbUsage.html
@@ -73,7 +73,7 @@
</p>
<p>
Note that for the inventory data, we will store the data by
- marshalling it into a buffer, described below.
+ marshaling it into a buffer, described below.
</p>
<a id="c_dbt10"></a>
<pre class="programlisting">/* File: gettingstarted_common.h */
@@ -113,7 +113,7 @@
</p>
<a id="c_dbt11"></a>
<pre class="programlisting">/* example_database_load.c */
-#include "gettingstarted_common.h"
+#include &quot;gettingstarted_common.h&quot;
/* Forward declarations */
@@ -145,7 +145,7 @@ main(int argc, char *argv[])
* identify the location of the flat-text data
* input files.
*/
- basename = "./";
+ basename = &quot;./&quot;;
/*
* Parse the command line arguments here and determine
@@ -164,29 +164,29 @@ main(int argc, char *argv[])
/* Find our input files */
size = strlen(basename) + strlen(INVENTORY_FILE) + 1;
inventory_file = malloc(size);
- snprintf(inventory_file, size, "%s%s", basename, INVENTORY_FILE);
+ snprintf(inventory_file, size, &quot;%s%s&quot;, basename, INVENTORY_FILE);
size = strlen(basename) + strlen(VENDORS_FILE) + 1;
vendor_file = malloc(size);
- snprintf(vendor_file, size, "%s%s", basename, VENDORS_FILE);
+ snprintf(vendor_file, size, &quot;%s%s&quot;, basename, VENDORS_FILE);
/* Open all databases */
- ret = databases_setup(&amp;my_stock, "example_database_load", stderr);
+ ret = databases_setup(&amp;my_stock, &quot;example_database_load&quot;, stderr);
if (ret != 0) {
- fprintf(stderr, "Error opening databases\n");
+ fprintf(stderr, &quot;Error opening databases\n&quot;);
databases_close(&amp;my_stock);
return (ret);
}
ret = load_vendors_database(my_stock, vendor_file);
if (!ret) {
- fprintf(stderr, "Error loading vendors database.\n");
+ fprintf(stderr, &quot;Error loading vendors database.\n&quot;);
databases_close(&amp;my_stock);
return (ret);
}
ret = load_inventory_database(my_stock, inventory_file);
if (!ret) {
- fprintf(stderr, "Error loading inventory database.\n");
+ fprintf(stderr, &quot;Error loading inventory database.\n&quot;);
databases_close(&amp;my_stock);
return (ret);
}
@@ -194,7 +194,7 @@ main(int argc, char *argv[])
/* close our environment and databases */
databases_close(&amp;my_stock);
- printf("Done loading databases.\n");
+ printf(&quot;Done loading databases.\n&quot;);
return (0);
}</pre>
<p>
@@ -233,9 +233,9 @@ load_vendors_database(STOCK_DBS my_stock, char *vendor_file)
char buf[MAXLINE];
/* Open the vendor file for read access */
- ifp = fopen(vendor_file, "r");
+ ifp = fopen(vendor_file, &quot;r&quot;);
if (ifp == NULL) {
- fprintf(stderr, "Error opening file '%s'\n", vendor_file);
+ fprintf(stderr, &quot;Error opening file '%s'\n&quot;, vendor_file);
return(-1);
}
@@ -254,7 +254,7 @@ load_vendors_database(STOCK_DBS my_stock, char *vendor_file)
* defensive code here.
*/
sscanf(buf,
- "%20[^#]#%20[^#]#%20[^#]#%3[^#]#%6[^#]#%13[^#]#%20[^#]#%20[^\n]",
+ &quot;%20[^#]#%20[^#]#%20[^#]#%3[^#]#%6[^#]#%13[^#]#%20[^#]#%20[^\n]&quot;,
my_vendor.name, my_vendor.street,
my_vendor.city, my_vendor.state,
my_vendor.zipcode, my_vendor.phone_number,
@@ -362,9 +362,9 @@ load_inventory_database(STOCK_DBS my_stock, char *inventory_file)
char vendor[MAXFIELD], sku[MAXFIELD];
/* Load the inventory database */
- ifp = fopen(inventory_file, "r");
+ ifp = fopen(inventory_file, &quot;r&quot;);
if (ifp == NULL) {
- fprintf(stderr, "Error opening file '%s'\n", inventory_file);
+ fprintf(stderr, &quot;Error opening file '%s'\n&quot;, inventory_file);
return(-1);
}
@@ -382,7 +382,7 @@ load_inventory_database(STOCK_DBS my_stock, char *inventory_file)
* program, there would be a lot more defensive code here.
*/
sscanf(buf,
- "%20[^#]#%20[^#]#%f#%i#%20[^#]#%20[^\n]",
+ &quot;%20[^#]#%20[^#]#%f#%i#%20[^#]#%20[^\n]&quot;,
name, sku, &amp;price, &amp;quantity, category, vendor);
/*
diff --git a/db/docs/gsg/C/DeleteEntryWCursor.html b/db/docs/gsg/C/DeleteEntryWCursor.html
index 9e58c5c79..c3e8a68cb 100644
--- a/db/docs/gsg/C/DeleteEntryWCursor.html
+++ b/db/docs/gsg/C/DeleteEntryWCursor.html
@@ -57,7 +57,7 @@
DB *dbp;
DBC *cursorp;
DBT key, data;
-char *key1str = "My first string";
+char *key1str = &quot;My first string&quot;;
int ret;
/* Set up our DBTs */
diff --git a/db/docs/gsg/C/Positioning.html b/db/docs/gsg/C/Positioning.html
index d97eb32f7..f0d88fb44 100644
--- a/db/docs/gsg/C/Positioning.html
+++ b/db/docs/gsg/C/Positioning.html
@@ -203,7 +203,9 @@ if (my_database != NULL)
that you provide for the database. If no
<span>comparison function</span>
- is provided, then the default lexicographical sorting is used.
+ is provided, then the default
+
+ lexicographical sorting is used.
</p>
<p>
For example, suppose you have database records that use the
@@ -240,8 +242,9 @@ Arizona</pre>
<tt class="literal">DB_GET_BOTH_RANGE</tt>
</p>
<p>
- Moves the cursor to the first record in the database whose key is
- greater than or equal to the specified key. If the database supports
+ Moves the cursor to the first record in the database whose key matches the specified
+ key and whose data is
+ greater than or equal to the specified data. If the database supports
duplicate records, then on matching the key, the cursor is moved to
the duplicate record with the smallest data that is greater than or
equal to the specified data.
@@ -276,24 +279,19 @@ Arizona/Florence </pre>
</thead>
<tbody>
<tr>
- <td>Al</td>
- <td>Fl</td>
- <td>Alabama/Florence</td>
+ <td>Alaska</td>
+ <td>Fa</td>
+ <td>Alaska/Fairbanks</td>
</tr>
<tr>
- <td>Ar</td>
+ <td>Arizona</td>
<td>Fl</td>
<td>Arizona/Florence</td>
</tr>
<tr>
- <td>Al</td>
- <td>Fa</td>
- <td>Alaska/Fairbanks</td>
- </tr>
- <tr>
- <td>Al</td>
- <td>A</td>
- <td>Alabama/Athens</td>
+ <td>Alaska</td>
+ <td>An</td>
+ <td>Alaska/Anchorage</td>
</tr>
</tbody>
</table>
@@ -320,8 +318,8 @@ DBC *cursorp;
DBT key, data;
DB *dbp;
int ret;
-char *search_data = "Fa";
-char *search_key = "Al";
+char *search_data = &quot;Fa&quot;;
+char *search_key = &quot;Alaska&quot;;
/* database open omitted for clarity */
@@ -336,7 +334,8 @@ data.size = strlen(search_data) + 1;
/*
* Position the cursor to the first record in the database whose
- * key and data begin with the correct strings.
+ * key matches the search key and whose data begins with the
+ * search data.
*/
ret = cursorp-&gt;c_get(cursorp, &amp;key, &amp;data, DB_GET_BOTH_RANGE);
if (!ret) {
@@ -521,7 +520,7 @@ DB *dbp;
DBC *cursorp;
DBT key, data;
int ret;
-char *search_key = "Al";
+char *search_key = &quot;Al&quot;;
/* database open omitted for clarity */
@@ -538,7 +537,7 @@ key.size = strlen(search_key) + 1;
*/
ret = cursorp-&gt;c_get(cursorp, &amp;key, &amp;data, DB_SET);
while (ret != DB_NOTFOUND) {
- printf("key: %s, data: %s\n", (char *)key.data, (char *)data.data);
+ printf(&quot;key: %s, data: %s\n&quot;, (char *)key.data, (char *)data.data);
ret = cursorp-&gt;c_get(cursorp, &amp;key, &amp;data, DB_NEXT_DUP);
}
diff --git a/db/docs/gsg/C/PutEntryWCursor.html b/db/docs/gsg/C/PutEntryWCursor.html
index 367b58b15..c3c12e812 100644
--- a/db/docs/gsg/C/PutEntryWCursor.html
+++ b/db/docs/gsg/C/PutEntryWCursor.html
@@ -42,10 +42,7 @@
</p>
<p>
Note that when putting records to the database using a cursor, the
- cursor is positioned at the record you inserted. Also, you can not
- transactionally protect a put that is performed using a cursor;
- if you want to transactionall protect your database writes,
- put recrods using the database handle directly.
+ cursor is positioned at the record you inserted.
</p>
<p>
You use
@@ -143,11 +140,11 @@ DB *dbp;
DBC *cursorp;
DBT data1, data2, data3;
DBT key1, key2;
-char *key1str = "My first string";
-char *data1str = "My first data";
-char *key2str = "A second string";
-char *data2str = "My second data";
-char *data3str = "My third data";
+char *key1str = &quot;My first string&quot;;
+char *data1str = &quot;My first data&quot;;
+char *key2str = &quot;A second string&quot;;
+char *data2str = &quot;My second data&quot;;
+char *data3str = &quot;My third data&quot;;
int ret;
/* Set up our DBTs */
@@ -170,14 +167,14 @@ dbp-&gt;cursor(dbp, NULL, &amp;cursorp, 0);
/*
* Assuming an empty database, this first put places
- * "My first string"/"My first data" in the first
+ * &quot;My first string&quot;/&quot;My first data&quot; in the first
* position in the database
*/
ret = cursorp-&gt;c_put(cursorp, &amp;key1,
&amp;data1, DB_KEYFIRST);
/*
- * This put places "A second string"/"My second data" in the
+ * This put places &quot;A second string&quot;/&quot;My second data&quot; in the
* the database according to its key sorts against the key
* used for the currently existing database record. Most likely
* this record would appear first in the database.
@@ -187,12 +184,12 @@ ret = cursorp-&gt;c_put(cursorp, &amp;key2,
/*
* If duplicates are not allowed, the currently existing record that
- * uses "key2" is overwritten with the data provided on this put.
- * That is, the record "A second string"/"My second data" becomes
- * "A second string"/"My third data"
+ * uses &quot;key2&quot; is overwritten with the data provided on this put.
+ * That is, the record &quot;A second string&quot;/&quot;My second data&quot; becomes
+ * &quot;A second string&quot;/&quot;My third data&quot;
*
- * If duplicates are allowed, then "My third data" is placed in the
- * duplicates list according to how it sorts against "My second data".
+ * If duplicates are allowed, then &quot;My third data&quot; is placed in the
+ * duplicates list according to how it sorts against &quot;My second data&quot;.
*/
ret = cursorp-&gt;c_put(cursorp, &amp;key2,
&amp;data3, DB_KEYFIRST); /* If duplicates are not allowed, record
diff --git a/db/docs/gsg/C/ReplacingEntryWCursor.html b/db/docs/gsg/C/ReplacingEntryWCursor.html
index a1b89224f..52a1c2984 100644
--- a/db/docs/gsg/C/ReplacingEntryWCursor.html
+++ b/db/docs/gsg/C/ReplacingEntryWCursor.html
@@ -56,10 +56,14 @@
DB *dbp;
DBC *cursorp;
DBT key, data;
-char *key1str = "My first string";
-char *replacement_data = "replace me";
+char *key1str = &quot;My first string&quot;;
+char *replacement_data = &quot;replace me&quot;;
int ret;
+/* Initialize our DBTs. */
+memset(&amp;key, 0, sizeof(DBT));
+memset(&amp;data, 0, sizeof(DBT));
+
/* Set up our DBTs */
key.data = key1str;
key.size = strlen(key1str) + 1;
@@ -69,10 +73,6 @@ key.size = strlen(key1str) + 1;
/* Get the cursor */
dbp-&gt;cursor(dbp, NULL, &amp;cursorp, 0);
-/* Initialize our DBTs. */
-memset(&amp;key, 0, sizeof(DBT));
-memset(&amp;data, 0, sizeof(DBT));
-
/* Position the cursor */
ret = cursorp-&gt;c_get(cursorp, &amp;key, &amp;data, DB_SET);
if (ret == 0) {
diff --git a/db/docs/gsg/C/accessmethods.html b/db/docs/gsg/C/accessmethods.html
index 02469bb95..dcbd74844 100644
--- a/db/docs/gsg/C/accessmethods.html
+++ b/db/docs/gsg/C/accessmethods.html
@@ -141,7 +141,7 @@
</p>
<p>
Once you have made this decision, you must choose between either
- BTree or Queue, or Hash or Recno. This decision is described next.
+ BTree or Hash, or Queue or Recno. This decision is described next.
</p>
</div>
<div class="sect2" lang="en" xml:lang="en">
diff --git a/db/docs/gsg/C/btree.html b/db/docs/gsg/C/btree.html
index eabed1e6c..27de59365 100644
--- a/db/docs/gsg/C/btree.html
+++ b/db/docs/gsg/C/btree.html
@@ -329,15 +329,15 @@
DB *dbp;
FILE *error_file_pointer;
int ret;
-char *program_name = "my_prog";
-char *file_name = "mydb.db";
+char *program_name = &quot;my_prog&quot;;
+char *file_name = &quot;mydb.db&quot;;
/* Variable assignments omitted for brevity */
/* Initialize the DB handle */
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
- fprintf(error_file_pointer, "%s: %s\n", program_name,
+ fprintf(error_file_pointer, &quot;%s: %s\n&quot;, program_name,
db_strerror(ret));
return(ret);
}
@@ -351,7 +351,7 @@ dbp-&gt;set_errpfx(dbp, program_name);
*/
ret = dbp-&gt;set_flags(dbp, DB_DUPSORT);
if (ret != 0) {
- dbp-&gt;err(dbp, ret, "Attempt to set DUPSORT flag failed.");
+ dbp-&gt;err(dbp, ret, &quot;Attempt to set DUPSORT flag failed.&quot;);
dbp-&gt;close(dbp, 0);
return(ret);
}
@@ -365,7 +365,7 @@ ret = dbp-&gt;open(dbp, /* Pointer to the database */
DB_CREATE, /* Open flags */
0); /* File mode. Using defaults */
if (ret != 0) {
- dbp-&gt;err(dbp, ret, "Database '%s' open failed.", file_name);
+ dbp-&gt;err(dbp, ret, &quot;Database '%s' open failed.&quot;, file_name);
dbp-&gt;close(dbp, 0);
return(ret);
} </pre>
@@ -414,7 +414,7 @@ if (ret != 0) {
do not sort well when viewed as byte strings. There are
several solutions to this problem, one being to provide a
custom comparison function. See
- <a href="http://www.sleepycat.com/docs/ref/am_misc/faq.html" target="_top">http://www.sleepycat.com/docs/ref/am_misc/faq.html</a>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_misc/faq.html" target="_top">http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_misc/faq.html</a>
for more information.
</p>
</li>
@@ -537,7 +537,7 @@ int ret;
/* Create a database */
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
- fprintf(stderr, "%s: %s\n", "my_program",
+ fprintf(stderr, &quot;%s: %s\n&quot;, &quot;my_program&quot;,
db_strerror(ret));
return(-1);
}
diff --git a/db/docs/gsg/C/concepts.html b/db/docs/gsg/C/concepts.html
index 8404051db..161e6a25b 100644
--- a/db/docs/gsg/C/concepts.html
+++ b/db/docs/gsg/C/concepts.html
@@ -42,7 +42,7 @@
Conceptually, DB databases contain <span class="emphasis"><em>records</em></span>.
Logically each record represents a single entry in the database.
Each such record contains two pieces of information: a key and a data.
- This manual will on occaison describe a <span class="emphasis"><em>a record's
+ This manual will on occasion describe a <span class="emphasis"><em>a record's
key</em></span> or a <span class="emphasis"><em>record's data</em></span> when it is
necessary to speak to one or the other portion of a database
record.
diff --git a/db/docs/gsg/C/coreindexusage.html b/db/docs/gsg/C/coreindexusage.html
index ae95233a2..fd59043e2 100644
--- a/db/docs/gsg/C/coreindexusage.html
+++ b/db/docs/gsg/C/coreindexusage.html
@@ -47,10 +47,7 @@
<a href="DbUsage.html">Database Usage Example</a>
we built an application that can open and load data into several databases.
- In <a href="coreindexusage.html#edlWIndexes">Secondary Databases with
- <tt class="function">example_database_load</tt>
-
- </a> we will extend
+ In <a href="coreindexusage.html#edlWIndexes">Secondary Databases with example_database_load</a> we will extend
that application to also open a secondary database for the purpose
of indexing inventory item names.
</p>
@@ -60,14 +57,10 @@
In <a href="CoreCursorUsage.html">Cursor Example</a> we
built an application to display our inventory database (and related
vendor information). In
- <a href="coreindexusage.html#edrWIndexes">Secondary Databases with
- <span>example_database_read</span>
-
- </a>
+ <a href="coreindexusage.html#edrWIndexes">Secondary Databases with example_database_read</a>
we will extend that application to
show inventory records based on the index we cause to be loaded using
- <span><tt class="function">example_database_load</tt>.</span>
-
+ <tt class="function">example_database_load</tt>.
</p>
</li>
</ul>
@@ -76,22 +69,15 @@
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="edlWIndexes"></a>Secondary Databases with
- <tt class="function">example_database_load</tt>
-
- </h3>
+ <h3 class="title"><a id="edlWIndexes"></a>Secondary Databases with example_database_load</h3>
</div>
</div>
<div></div>
</div>
<p>
- <tt class="function">example_database_load</tt>
-
- uses several utility
+ <tt class="function">example_database_load</tt> uses several utility
functions to open and close its databases. In order to cause
- <tt class="function">example_database_load</tt>
-
- to maintain an index of
+ <tt class="function">example_database_load</tt> to maintain an index of
inventory item names, all we really need to do is update the utility
functions to:
</p>
@@ -121,9 +107,7 @@
</p>
<p>
Because DB maintains secondary databases for us; once this work
- is done we need not make any other changes to
- <span><tt class="function">example_database_load</tt>.</span>
-
+ is done we need not make any other changes to <tt class="function">example_database_load</tt>.
<span>Therefore, we can limit
all our work to the code found in <tt class="filename">gettingstarted_common.h</tt>
@@ -191,7 +175,7 @@ void set_db_filenames(STOCK_DBS *my_stock);
</p>
<a id="c_index11"></a>
<pre class="programlisting">/* file: gettingstarted_common.c */
-#include "gettingstarted_common.h"
+#include &quot;gettingstarted_common.h&quot;
<b class="userinput"><tt>/*
* Used to extract an inventory item's name from an
@@ -262,19 +246,19 @@ set_db_filenames(STOCK_DBS *my_stock)
/* Create the Inventory DB file name */
size = strlen(my_stock-&gt;db_home_dir) + strlen(INVENTORYDB) + 1;
my_stock-&gt;inventory_db_name = malloc(size);
- snprintf(my_stock-&gt;inventory_db_name, size, "%s%s",
+ snprintf(my_stock-&gt;inventory_db_name, size, &quot;%s%s&quot;,
my_stock-&gt;db_home_dir, INVENTORYDB);
/* Create the Vendor DB file name */
size = strlen(my_stock-&gt;db_home_dir) + strlen(VENDORDB) + 1;
my_stock-&gt;vendor_db_name = malloc(size);
- snprintf(my_stock-&gt;vendor_db_name, size, "%s%s",
+ snprintf(my_stock-&gt;vendor_db_name, size, &quot;%s%s&quot;,
my_stock-&gt;db_home_dir, VENDORDB);
<b class="userinput"><tt>/* Create the itemname DB file name */
size = strlen(my_stock-&gt;db_home_dir) + strlen(ITEMNAMEDB) + 1;
my_stock-&gt;itemname_db_name = malloc(size);
- snprintf(my_stock-&gt;itemname_db_name, size, "%s%s",
+ snprintf(my_stock-&gt;itemname_db_name, size, &quot;%s%s&quot;,
my_stock-&gt;db_home_dir, ITEMNAMEDB);</tt></b>
} </pre>
<p>
@@ -314,7 +298,7 @@ open_database(DB **dbpp, /* The DB handle that we are opening */
/* Initialize the DB handle */
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
- fprintf(error_file_pointer, "%s: %s\n", program_name,
+ fprintf(error_file_pointer, &quot;%s: %s\n&quot;, program_name,
db_strerror(ret));
return (ret);
}
@@ -333,7 +317,7 @@ open_database(DB **dbpp, /* The DB handle that we are opening */
if (is_secondary) {
ret = dbp-&gt;set_flags(dbp, DB_DUPSORT);
if (ret != 0) {
- dbp-&gt;err(dbp, ret, "Attempt to set DUPSORT flag failed.",
+ dbp-&gt;err(dbp, ret, &quot;Attempt to set DUPSORT flag failed.&quot;,
file_name);
return (ret);
}
@@ -351,7 +335,7 @@ open_database(DB **dbpp, /* The DB handle that we are opening */
open_flags, /* Open flags */
0); /* File mode. Using defaults */
if (ret != 0) {
- dbp-&gt;err(dbp, ret, "Database '%s' open failed.", file_name);
+ dbp-&gt;err(dbp, ret, &quot;Database '%s' open failed.&quot;, file_name);
return (ret);
}
@@ -432,7 +416,7 @@ databases_setup(STOCK_DBS *my_stock, const char *program_name,
0); /* Flags */
</tt></b>
- printf("databases opened successfully\n");
+ printf(&quot;databases opened successfully\n&quot;);
return (0);
}</pre>
<p>
@@ -457,25 +441,25 @@ databases_close(STOCK_DBS *my_stock)
<b class="userinput"><tt>if (my_stock-&gt;itemname_sdbp != NULL) {
ret = my_stock-&gt;itemname_sdbp-&gt;close(my_stock-&gt;itemname_sdbp, 0);
if (ret != 0)
- fprintf(stderr, "Itemname database close failed: %s\n",
+ fprintf(stderr, &quot;Itemname database close failed: %s\n&quot;,
db_strerror(ret));
}</tt></b>
if (my_stock-&gt;inventory_dbp != NULL) {
ret = my_stock-&gt;inventory_dbp-&gt;close(my_stock-&gt;inventory_dbp, 0);
if (ret != 0)
- fprintf(stderr, "Inventory database close failed: %s\n",
+ fprintf(stderr, &quot;Inventory database close failed: %s\n&quot;,
db_strerror(ret));
}
if (my_stock-&gt;vendor_dbp != NULL) {
ret = my_stock-&gt;vendor_dbp-&gt;close(my_stock-&gt;vendor_dbp, 0);
if (ret != 0)
- fprintf(stderr, "Vendor database close failed: %s\n",
+ fprintf(stderr, &quot;Vendor database close failed: %s\n&quot;,
db_strerror(ret));
}
- printf("databases closed.\n");
+ printf(&quot;databases closed.\n&quot;);
return (0);
} </pre>
<p>
@@ -484,9 +468,7 @@ databases_close(STOCK_DBS *my_stock)
code actually changes:
</p>
<p>
- That completes our update to
- <span><tt class="function">example_database_load</tt>.</span>
-
+ That completes our update to <tt class="function">example_database_load</tt>.
Now when this program is called, it will automatically index inventory
items based on their names. We can then query for those items using the
new index. We show how to do that in the next section.
@@ -496,10 +478,7 @@ databases_close(STOCK_DBS *my_stock)
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="edrWIndexes"></a>Secondary Databases with
- <span>example_database_read</span>
-
- </h3>
+ <h3 class="title"><a id="edrWIndexes"></a>Secondary Databases with example_database_read</h3>
</div>
</div>
<div></div>
@@ -510,18 +489,15 @@ databases_close(STOCK_DBS *my_stock)
Inventory database. In this section, we will update that example to
allow us to search for and display an inventory item given a
specific name. To do this, we will make use of the secondary
- database that
- <span><tt class="function">example_database_load</tt></span>
-
- now creates.
+ database that <tt class="function">example_database_load</tt> now
+ creates.
</p>
<p>
Because we manage all our database open and close activities in
<tt class="function">databases_setup()</tt> and
<tt class="function">databases_close()</tt>,
- the update to
- example_database_read
- is relatively modest. We need only add a command line parameter on
+ the update to <tt class="function">example_database_read</tt> is
+ relatively modest. We need only add a command line parameter on
which we can specify the item name, and we will need a new function
in which we will perform the query and display the results.
</p>
@@ -532,7 +508,7 @@ databases_close(STOCK_DBS *my_stock)
<a id="c_index15"></a>
<pre class="programlisting">/* File: example_database_read.c */
/* gettingstarted_common.h includes db.h for us */
-#include "gettingstarted_common.h"
+#include &quot;gettingstarted_common.h&quot;
/* Forward declarations */
char * show_inventory_item(void *);
@@ -581,9 +557,9 @@ main(int argc, char *argv[])
set_db_filenames(&amp;my_stock);
/* Open all databases */
- ret = databases_setup(&amp;my_stock, "example_database_read", stderr);
+ ret = databases_setup(&amp;my_stock, &quot;example_database_read&quot;, stderr);
if (ret != 0) {
- fprintf(stderr, "Error opening databases\n");
+ fprintf(stderr, &quot;Error opening databases\n&quot;);
databases_close(&amp;my_stock);
return (ret);
}</pre>
@@ -685,7 +661,7 @@ show_records(STOCK_DBS *my_stock, char *itemname)
} while(itemname_cursorp-&gt;c_get(itemname_cursorp, &amp;key, &amp;data,
DB_NEXT_DUP) == 0);
} else {
- printf("No records found for '%s'\n", itemname);
+ printf(&quot;No records found for '%s'\n&quot;, itemname);
}
/* Close the cursor */
@@ -695,14 +671,11 @@ show_records(STOCK_DBS *my_stock, char *itemname)
} </pre>
<p>
This completes our update to
- <span><tt class="classname">example_database_read</tt>.</span>
-
-
- Using this update, you
+ <tt class="classname">example_inventory_read</tt>. Using this update, you
can now search for and show all inventory items that match a particular
name. For example:
</p>
- <pre class="programlisting"> example_database_read -i "Zulu Nut"</pre>
+ <pre class="programlisting"> example_inventory_read -i &quot;Zulu Nut&quot;</pre>
</div>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/C/cstructs.html b/db/docs/gsg/C/cstructs.html
index 9b02832ff..14d06a246 100644
--- a/db/docs/gsg/C/cstructs.html
+++ b/db/docs/gsg/C/cstructs.html
@@ -62,8 +62,8 @@ typedef struct my_struct {
DBT key, data;
DB *my_database;
MY_STRUCT user;
-char *fname = "David";
-char *sname = "Rider";
+char *fname = &quot;David&quot;;
+char *sname = &quot;Rider&quot;;
/* Database open omitted for clarity */
@@ -119,8 +119,8 @@ data.flags = DB_DBT_USERMEM;
my_database-&gt;get(my_database, NULL, &amp;key, &amp;data, 0);
-printf("Familiar name: %s\n", user.familiar_name);
-printf("Surname: %s\n", user.surname); </pre>
+printf(&quot;Familiar name: %s\n&quot;, user.familiar_name);
+printf(&quot;Surname: %s\n&quot;, user.surname); </pre>
<p>
Be aware that while this is the easiest way to manage structures stored
in DB databases, this approach does suffer from causing your
@@ -161,7 +161,7 @@ printf("Surname: %s\n", user.surname); </pre>
dynamically allocated memory. This is particularly
true if you want to store character strings (or any kind of an array for
that matter), and you want to avoid any overhead caused by
- predesignating the size of the array.
+ pre-designating the size of the array.
</p>
<p>
When storing structures
@@ -204,11 +204,11 @@ DBT key, data;
DB *my_database;
MY_STRUCT user;
int buffsize, bufflen;
-char fname[ ] = "Pete";
+char fname[ ] = &quot;Pete&quot;;
char sname[10];
char *databuff;
-strncpy(sname, "Oar", strlen("Oar")+1);
+strncpy(sname, &quot;Oar&quot;, strlen(&quot;Oar&quot;)+1);
/* Database open omitted for clarity */
diff --git a/db/docs/gsg/C/dbErrorReporting.html b/db/docs/gsg/C/dbErrorReporting.html
index af315e34b..dc6646baa 100644
--- a/db/docs/gsg/C/dbErrorReporting.html
+++ b/db/docs/gsg/C/dbErrorReporting.html
@@ -94,7 +94,7 @@
</p>
<p>
The error message consists of the prefix string
- (as defined by <tt class="methodname">set_errprefix()</tt>),
+ (as defined by <tt class="methodname">set_errpfx()</tt>),
an optional <tt class="literal">printf</tt>-style formatted message,
the error message, and a trailing newline.
</p>
@@ -153,28 +153,28 @@ int ret;
*/
ret = db_create(&amp;dbp, NULL, 0);
if (ret != 0) {
- fprintf(stderr, "%s: %s\n", "my_program",
+ fprintf(stderr, &quot;%s: %s\n&quot;, &quot;my_program&quot;,
db_strerror(ret));
return(ret);
}
/* Set up error handling for this database */
dbp-&gt;set_errcall(dbp, my_error_handler);
-dbp-&gt;set_errpfx(dbp, "my_example_program"); </pre>
+dbp-&gt;set_errpfx(dbp, &quot;my_example_program&quot;); </pre>
<p>
And to issue an error message:
</p>
<a id="c_db10"></a>
<pre class="programlisting">ret = dbp-&gt;open(dbp,
NULL,
- "mydb.db",
+ &quot;mydb.db&quot;,
NULL,
DB_BTREE,
DB_CREATE,
0);
if (ret != 0) {
dbp-&gt;err(dbp, ret,
- "Database open failed: %s", "mydb.db");
+ &quot;Database open failed: %s&quot;, &quot;mydb.db&quot;);
return(ret);
}</pre>
<span>
diff --git a/db/docs/gsg/C/dbconfig.html b/db/docs/gsg/C/dbconfig.html
index 2a682291d..47eefc20e 100644
--- a/db/docs/gsg/C/dbconfig.html
+++ b/db/docs/gsg/C/dbconfig.html
@@ -108,8 +108,7 @@
applications use BTree. For this reason, where configuration issues are
dependent on the type of access method in use, this chapter will focus on
BTree only. For configuration descriptions surrounding the other access
- methods, see the <i class="citetitle">Berkeley DB Programmer's Tutorial and Reference
- Guide</i>.
+ methods, see the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -276,8 +275,8 @@
method, or use the <tt class="literal">db_stat</tt> command line utility.
- The number of locks that could not be obtained due to conflicts is
- held in the lock statistic's <tt class="literal">st_nconflicts</tt> field.
+ The number of unavailable locks that your application waited for is
+ held in the lock statistic's <tt class="literal">st_lock_wait</tt> field.
</p>
</div>
@@ -341,7 +340,7 @@
filesystem's block size causes DB to write pages in block
size increments. As a result, it is possible for a partial page
to be written as the result of a transactional commit. For more
- information, see <a href="http://www.sleepycat.com/docs/ref/transapp/reclimit.html" target="_top">http://www.sleepycat.com/docs/ref/transapp/reclimit.html</a>.
+ information, see <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/reclimit.html" target="_top">http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/reclimit.html</a>.
</p>
</div>
</div>
diff --git a/db/docs/gsg/C/environments.html b/db/docs/gsg/C/environments.html
index 7223b5047..4fc6267d8 100644
--- a/db/docs/gsg/C/environments.html
+++ b/db/docs/gsg/C/environments.html
@@ -45,7 +45,7 @@
<p>
While environments are frequently not used by applications running in
embedded environments where every byte counts, they will be used by
- virutally any other DB application requiring anything other than
+ virtually any other DB application requiring anything other than
the bare minimum functionality. An <span class="emphasis"><em>environment</em></span> is
essentially an encapsulation of one or more databases. Essentially, you
open an environment and then you open databases in that environment.
@@ -64,7 +64,7 @@
</p>
<p>
It is possible in DB to contain multiple databases in a
- single physical file on disk. This is desireable for those
+ single physical file on disk. This is desirable for those
application that open more than a few handful of databases.
However, in order to have more than one database contained in
a single physical file, your application
@@ -116,15 +116,16 @@
obtain a high-degree of recoverability in the face of an
application or system crash. Once enabled, the logging subsystem
allows the application to perform two kinds of recovery
- ("normal" and "catastrophic") through the use of the information
+ (&quot;normal&quot; and &quot;catastrophic&quot;) through the use of the information
contained in the log files.
</p>
</li>
</ul>
</div>
<p>
- All of these topics are described in the <i class="citetitle">Berkeley DB
- Programmer's Reference Guide</i>.
+ For more information on these topics, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide and the
+ <i class="citetitle">Berkeley DB Getting Started with Replicated Applications</i> guide.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/C/gettingit.html b/db/docs/gsg/C/gettingit.html
index c722aefce..c84496093 100644
--- a/db/docs/gsg/C/gettingit.html
+++ b/db/docs/gsg/C/gettingit.html
@@ -35,8 +35,8 @@
<div></div>
</div>
<p>
- You can obtain DB by visiting the Sleepycat download page:
- <a href="http://www.sleepycat.com/download/index.shtml" target="_top">http://www.sleepycat.com/download/index.shtml</a>.
+ You can obtain DB by visiting the Berkeley DB download page:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/db/index.html</a>.
</p>
<p>
To install DB, untar or unzip the distribution to the directory of
@@ -49,9 +49,9 @@
</p>
<p>
That page also contains links to more documentation for DB. In
- particular, you will find links for the <i class="citetitle">Berkeley DB
- Programmer's Tutorial and Reference Guide</i> as
- well as the API reference documentation.
+ particular, you will find links for the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ as well as the API reference documentation.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/C/index.html b/db/docs/gsg/C/index.html
index 18e5b7920..c77c5f886 100644
--- a/db/docs/gsg/C/index.html
+++ b/db/docs/gsg/C/index.html
@@ -27,7 +27,7 @@
<div class="titlepage">
<div>
<div>
- <h1 class="title"><a id="id2766488"></a>Getting Started with Berkeley DB</h1>
+ <h1 class="title"><a id="id650925"></a>Getting Started with Berkeley DB</h1>
</div>
<div>
<div class="legalnotice">
@@ -35,24 +35,33 @@
<b>Legal Notice</b>
</p>
<p>
- This documentation is distributed under the terms of the Sleepycat
- public license. You may review the terms of this license at:
- <a href="http://www.sleepycat.com/download/oslicense.html" target="_top">http://www.sleepycat.com/download/oslicense.html</a>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
</p>
<p>
- Sleepycat Software, Berkeley DB, Berkeley DB XML and the Sleepycat logo
- are trademarks or service marks of Sleepycat Software, Inc. All rights to
- these marks are reserved. No third-party use is permitted without the
- express prior written consent of Sleepycat Software, Inc.
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
</p>
<p>
- To obtain a copy of this document's original source code, please write
- to <tt class="email">&lt;<a href="mailto:support@sleepycat.com">support@sleepycat.com</a>&gt;</tt>.
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
</p>
</div>
</div>
<div>
- <p class="pubdate">9/22/2004</p>
+ <p class="pubdate">9/20/2006</p>
</div>
</div>
<div></div>
@@ -75,6 +84,15 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</dd>
<dt>
@@ -360,18 +378,12 @@
<dl>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edlWIndexes">Secondary Databases with
- example_database_load
-
- </a>
+ <a href="coreindexusage.html#edlWIndexes">Secondary Databases with example_database_load</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edrWIndexes">Secondary Databases with
- example_database_read
-
- </a>
+ <a href="coreindexusage.html#edrWIndexes">Secondary Databases with example_database_read</a>
</span>
</dt>
</dl>
diff --git a/db/docs/gsg/C/indexes.html b/db/docs/gsg/C/indexes.html
index f1900d121..1c21ea2cf 100644
--- a/db/docs/gsg/C/indexes.html
+++ b/db/docs/gsg/C/indexes.html
@@ -93,18 +93,12 @@
<dl>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edlWIndexes">Secondary Databases with
- example_database_load
-
- </a>
+ <a href="coreindexusage.html#edlWIndexes">Secondary Databases with example_database_load</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edrWIndexes">Secondary Databases with
- example_database_read
-
- </a>
+ <a href="coreindexusage.html#edrWIndexes">Secondary Databases with example_database_read</a>
</span>
</dt>
</dl>
@@ -257,9 +251,9 @@
</p>
<a id="c_index1"></a>
<pre class="programlisting">#include &lt;db.h&gt;
-
+
...
-
+
DB *dbp, *sdbp; /* Primary and secondary DB handles */
u_int32_t flags; /* Primary database open flags */
int ret; /* Function return value */
@@ -290,7 +284,7 @@ flags = DB_CREATE; /* If the database does not exist,
/* open the primary database */
ret = dbp-&gt;open(dbp, /* DB structure pointer */
NULL, /* Transaction pointer */
- "my_db.db", /* On-disk file that holds the database. */
+ &quot;my_db.db&quot;, /* On-disk file that holds the database. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
flags, /* Open flags */
@@ -302,7 +296,7 @@ if (ret != 0) {
/* open the secondary database */
ret = sdbp-&gt;open(sdbp, /* DB structure pointer */
NULL, /* Transaction pointer */
- "my_secdb.db", /* On-disk file that holds the database. */
+ &quot;my_secdb.db&quot;, /* On-disk file that holds the database. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
flags, /* Open flags */
diff --git a/db/docs/gsg/C/introduction.html b/db/docs/gsg/C/introduction.html
index a5b0d073f..36e417ff1 100644
--- a/db/docs/gsg/C/introduction.html
+++ b/db/docs/gsg/C/introduction.html
@@ -96,7 +96,7 @@
</dl>
</div>
<p>
- Welcome to Sleepycat's Berkeley DB (DB). DB is a general-purpose embedded
+ Welcome to Berkeley DB (DB). DB is a general-purpose embedded
database engine that is capable of providing a wealth of data management services.
It is designed from the ground up for high-throughput applications requiring
in-process, bullet-proof management of mission-critical data. DB can
@@ -132,7 +132,7 @@
as to ensure that data is never left in an inconsistent state for any
reason (such as software bugs or hardware failures). For those
applications, a transaction subsystem can be enabled and used to
- transactionally protect database writes.
+ transactional-protect database writes.
</p>
<p>
The list of operating systems on which DB is available is too long to
@@ -140,8 +140,8 @@
operating systems, as well as on many embedded platforms.
</p>
<p>
- Finally, DB is available in a wealth of programming languages. Sleepycat
- officially supports DB in C, C++, and Java, but the library is also
+ Finally, DB is available in a wealth of programming languages.
+ DB is officially supported in C, C++, and Java, but the library is also
available in many other languages, especially scripting languages such as
Perl and Python.
</p>
diff --git a/db/docs/gsg/C/joins.html b/db/docs/gsg/C/joins.html
index 42df5b1b8..8b3464328 100644
--- a/db/docs/gsg/C/joins.html
+++ b/db/docs/gsg/C/joins.html
@@ -36,7 +36,7 @@
</div>
<p>
If you have two or more secondary databases associated with a primary
- database, then you can retrieve primary records based on the union of
+ database, then you can retrieve primary records based on the intersection of
multiple secondary entries. You do this using a
<span>join cursor.</span>
@@ -56,7 +56,7 @@
is fairly simple with a limited
number of data members, few of which would be interesting from a query
perspective. But suppose, instead, that we were storing
- information on something with many more queryable characteristics, such
+ information on something with many more characteristics that can be queried, such
as an automobile. In that case, you may be storing information such as
color, number of doors, fuel mileage, automobile type, number of
passengers, make, model, and year, to name just a few.
@@ -141,7 +141,8 @@
<li>
<p>
Create an array of cursors, and place in it each
- of the cursors that are participating in your join query.
+ of the cursors that are participating in your join query. Note that this array must be null
+ terminated.
</p>
</li>
<li>
@@ -191,13 +192,13 @@ DB *automotiveColorDB;
DB *automotiveMakeDB;
DB *automotiveTypeDB;
DBC *color_curs, *make_curs, *type_curs, *join_curs;
-DBC *carray[3];
+DBC *carray[4];
DBT key, data;
int ret;
-char *the_color = "red";
-char *the_type = "minivan";
-char *the_make = "Toyota";
+char *the_color = &quot;red&quot;;
+char *the_type = &quot;minivan&quot;;
+char *the_make = &quot;Toyota&quot;;
/* Database and secondary database opens omitted for brevity.
* Assume a primary database handle:
@@ -256,6 +257,7 @@ if ((ret = type_curs-&gt;c_get(type_curs, &amp;key, &amp;data, DB_SET)) != 0)
carray[0] = color_curs;
carray[1] = make_curs;
carray[2] = type_curs;
+carray[3] = NULL;
/* Create the join */
if ((ret = automotiveDB-&gt;join(automotiveDB, carray, &amp;join_curs, 0)) != 0)
diff --git a/db/docs/gsg/C/preface.html b/db/docs/gsg/C/preface.html
index d83f0f9a1..1b74e4636 100644
--- a/db/docs/gsg/C/preface.html
+++ b/db/docs/gsg/C/preface.html
@@ -44,20 +44,29 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</div>
<p>
Welcome to Berkeley DB (DB). This document introduces
- <span>DB, version 4.3. </span>
+ <span>DB, version 4.5. </span>
It is intended
to provide a rapid introduction to the DB API set and related concepts. The goal of this document is
to provide you with an efficient mechanism
with which you can evaluate DB against your project's technical requirements. As such, this document is
intended for
<span>C</span> developers and senior software architects who are
- looking for an in-process data management solution. No prior experience with Sleepycat technologies is
- expected or required.
+ looking for an in-process data management solution. No prior
+ experience with Berkeley DB is expected or required.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -73,12 +82,12 @@
</p>
<p>
Structure names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
- names</tt>. For example: "<tt class="methodname">DB-&gt;open()</tt> is a method
- on a <tt class="classname">DB</tt> handle."
+ names</tt>. For example: &quot;<tt class="methodname">DB-&gt;open()</tt> is a method
+ on a <tt class="classname">DB</tt> handle.&quot;
</p>
<p>
- Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: "Go to your
- <span class="emphasis"><em>DB_INSTALL</em></span> directory."
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
</p>
<p>
Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
@@ -113,6 +122,61 @@ typedef struct stock_dbs {
as this.
</p>
</div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/C/index.html" target="_top">
+ Getting Started with Transaction Processing for C
+ </a>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/C/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for C
+ </a>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/frame.html" target="_top">
+ Berkeley DB C API
+ </a>
+
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
</div>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/C/readSecondary.html b/db/docs/gsg/C/readSecondary.html
index 8933dccd7..69f4ebf73 100644
--- a/db/docs/gsg/C/readSecondary.html
+++ b/db/docs/gsg/C/readSecondary.html
@@ -68,7 +68,7 @@
DB *my_secondary_database;
DBT key; /* Used for the search key */
DBT pkey, pdata; /* Used to return the primary key and data */
-char *search_name = "John Doe";
+char *search_name = &quot;John Doe&quot;;
/* Primary and secondary database opens omitted for brevity */
diff --git a/db/docs/gsg/C/returns.html b/db/docs/gsg/C/returns.html
new file mode 100644
index 000000000..020e384dd
--- /dev/null
+++ b/db/docs/gsg/C/returns.html
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Error Returns</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction to Berkeley DB " />
+ <link rel="previous" href="environments.html" title="Environments" />
+ <link rel="next" href="gettingit.html" title="Getting and Using DB " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Error Returns</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="environments.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction to Berkeley DB </th>
+ <td width="20%" align="right"> <a accesskey="n" href="gettingit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="returns"></a>Error Returns</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is useful to spend a few moments on error returns
+ in DB.
+ </p>
+ <p>
+
+ <span>The</span>
+ 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>
+ <p>
+ If a system error occurred (for example, 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), DB returns an
+ <tt class="literal">errno</tt>
+ value. All of the possible values of <tt class="literal">errno</tt> are greater than 0.
+ </p>
+ <p>
+ If the operation did not fail due to a system error, but was not
+ successful either, DB returns a special error value. For
+ example, if you tried to retrieve data from the database and the
+ record for which you are searching does not exist, DB would return
+ <tt class="literal">DB_NOTFOUND</tt>, 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.
+ </p>
+ <p>
+ DB also offers programmatic support for displaying error return
+ values. First, the <tt class="function">db_strerror</tt> function returns
+ a pointer to the error
+ message corresponding to any DB error return, similar to the
+ ANSI C <tt class="function">strerror</tt> function, but is able to handle
+ both system error returns and DB-specific return values.
+ </p>
+ <p>
+ Second, there are two error functions,
+ <tt class="methodname">DB-&gt;err</tt> and <tt class="methodname">DB-&gt;errx</tt>.
+ These functions work like the ANSI C <tt class="function">printf</tt> 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.
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="environments.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="gettingit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Environments </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Getting and Using DB </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg/C/secondaryCursor.html b/db/docs/gsg/C/secondaryCursor.html
index 5e3ab92d9..fc4820f8e 100644
--- a/db/docs/gsg/C/secondaryCursor.html
+++ b/db/docs/gsg/C/secondaryCursor.html
@@ -103,7 +103,6 @@
Then the following searches for a person's
name in the secondary database, and deletes all secondary and primary
records that use that name.
-
</p>
<a id="c_index8"></a>
<pre class="programlisting">#include &lt;db.h&gt;
@@ -114,7 +113,7 @@
DB *sdbp; /* Secondary DB handle */
DBC *cursorp; /* Cursor */
DBT key, data; /* DBTs used for the delete */
-char *search_name = "John Doe"; /* Name to delete */
+char *search_name = &quot;John Doe&quot;; /* Name to delete */
/* Primary and secondary database opens omitted for brevity. */
diff --git a/db/docs/gsg/C/secondaryDelete.html b/db/docs/gsg/C/secondaryDelete.html
index a62f28b34..d39ebdab5 100644
--- a/db/docs/gsg/C/secondaryDelete.html
+++ b/db/docs/gsg/C/secondaryDelete.html
@@ -43,10 +43,10 @@
database and simply allow DB to manage the secondary modifications for you.
</p>
<p>
- However, as a convenience, you can delete a
+ However, as a convenience, you can delete
<span>secondary database</span>
- record directly. Doing so causes the associated primary key/data pair to be deleted.
+ records directly. Doing so causes the associated primary key/data pair to be deleted.
This in turn causes DB to delete all
<span>secondary database</span>
@@ -72,38 +72,12 @@
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
+
+ <span>
You can delete a secondary database record using the previously
- described mechanism only if:
- </p>
- <div class="itemizedlist">
- <ul type="disc">
- <li>
- <p>
- the
-
- <span>secondary key extractor function</span>
-
- returns
-
- <span><tt class="literal">0</tt></span>
- (see <a href="keyCreator.html">Implementing Key
-
- <span>Extractors</span>
- </a> for information on this
-
- <span>callback).</span>
- </p>
- </li>
- <li>
- <p>
- the primary database is opened for write access.
- </p>
- </li>
- </ul>
- </div>
- <p>
- If either of these conditions are not met, then no delete operations can be performed on the secondary
- database.
+ described mechanism
+ </span>
+ only if the primary database is opened for write access.
</p>
</div>
<p>For example:</p>
@@ -116,7 +90,7 @@
DB *dbp, *sdbp; /* Primary and secondary DB handles */
DBT key; /* DBTs used for the delete */
int ret; /* Function return value */
-char *search_name = "John Doe"; /* Name to delete */
+char *search_name = &quot;John Doe&quot;; /* Name to delete */
/* Primary */
ret = db_create(&amp;dbp, NULL, 0);
@@ -139,7 +113,7 @@ if (ret != 0) {
/* open the primary database */
ret = dbp-&gt;open(dbp, /* DB structure pointer */
NULL, /* Transaction pointer */
- "my_db.db", /* On-disk file that holds the database.
+ &quot;my_db.db&quot;, /* On-disk file that holds the database.
* Required. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
@@ -152,7 +126,7 @@ if (ret != 0) {
/* open the secondary database */
ret = sdbp-&gt;open(sdbp, /* DB structure pointer */
NULL, /* Transaction pointer */
- "my_secdb.db", /* On-disk file that holds the database.
+ &quot;my_secdb.db&quot;, /* On-disk file that holds the database.
* Required. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
diff --git a/db/docs/gsg/C/usingDbt.html b/db/docs/gsg/C/usingDbt.html
index 549b39ad6..bea353a9c 100644
--- a/db/docs/gsg/C/usingDbt.html
+++ b/db/docs/gsg/C/usingDbt.html
@@ -127,7 +127,7 @@
...
-char *description = "Grocery bill.";
+char *description = &quot;Grocery bill.&quot;;
DBT key, data;
DB *my_database;
int ret;
@@ -150,7 +150,7 @@ data.size = strlen(description) +1;
ret = my_database-&gt;put(my_database, NULL, &amp;key, &amp;data, DB_NOOVERWRITE);
if (ret == DB_KEYEXIST) {
my_database-&gt;err(my_database, ret,
- "Put failed because key %f already exists", money);
+ &quot;Put failed because key %f already exists&quot;, money);
}</pre>
</div>
<div class="sect2" lang="en" xml:lang="en">
@@ -206,7 +206,7 @@ if (ret == DB_KEYEXIST) {
DBT key, data;
DB *my_database;
float money;
-char *description;
+char *description[DESCRIPTION_SIZE + 1];
/* Database open omitted for clarity */
@@ -216,20 +216,17 @@ money = 122.45;
memset(&amp;key, 0, sizeof(DBT));
memset(&amp;data, 0, sizeof(DBT));
-/*
- * Use our own memory to retrieve the float.
- * For data alignment purposes.
- */
key.data = &amp;money;
key.ulen = sizeof(float);
-key.flags = DB_DBT_USERMEM;
+data.set_data(&amp;description);
+data.set_ulen(DESCRIPTION_SIZE + 1);
+data.set_flags(DB_DBT_USERMEM);
my_database-&gt;get(my_database, NULL, &amp;key, &amp;data, 0);
/*
- * Money is set into the memory that we supplied.
- */
-description = data.data;</pre>
+ * Description is set into the memory that we supplied.
+ */ </pre>
<p>
Note that in this example, the
<tt class="literal">data.size</tt>
@@ -296,7 +293,7 @@ my_database-&gt;del(my_database, NULL, &amp;key, 0);</pre>
<p>
When you perform a database modification, your modification is made
in the in-memory cache. This means that your data modifications
- are not necessarily written to disk, and so your data may not appear
+ are not necessarily flushed to disk, and so your data may not appear
in the database after an application restart.
</p>
<p>
@@ -308,17 +305,19 @@ my_database-&gt;del(my_database, NULL, &amp;key, 0);</pre>
experience database corruption.
</p>
<p>
- Therefore, if you care about whether your data persists across
- application runs, and to guard against the rare possibility of
+ Therefore, if you care if your data is durable across system
+ failures, and to guard against the rare possibility of
database corruption, you should use transactions to protect your
database modifications. Every time you commit a transaction, DB
ensures that the data will not be lost due to application or
- system failure.
-
- <span>
- For information on transactions, see the <i class="citetitle">Berkeley DB
- Programmer's Tutorial and Reference Guide</i>.
- </span>
+ system failure. Transaction usage is described in the
+
+
+
+
+ <span>
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </span>
</p>
<p>
If you do not want to use transactions, then the assumption is that
@@ -334,7 +333,8 @@ my_database-&gt;del(my_database, NULL, &amp;key, 0);</pre>
<span>call <tt class="methodname">DB-&gt;sync()</tt>.</span>
- Syncs cause the entire contents of your in-memory cache to be written to disk. As
+ Syncs cause any dirty entries in the in-memory cache and the
+ operating system's file cache to be written to disk. As
such, they are quite expensive and you should use them sparingly.
</p>
<p>
diff --git a/db/docs/gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdf b/db/docs/gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdf
index c01f86255..4c140dd09 100644
--- a/db/docs/gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdf
+++ b/db/docs/gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdf
Binary files differ
diff --git a/db/docs/gsg/CXX/CoreCursorUsage.html b/db/docs/gsg/CXX/CoreCursorUsage.html
index fa406ab07..4795904e1 100644
--- a/db/docs/gsg/CXX/CoreCursorUsage.html
+++ b/db/docs/gsg/CXX/CoreCursorUsage.html
@@ -46,9 +46,7 @@
can provide the item and show the vendor's contact information.
</p>
<p>
- Specifically, the
-
- <tt class="classname">excxx_example_database_read</tt>
+ Specifically, the <tt class="classname">example_database_read</tt>
application does the following:
</p>
<div class="orderedlist">
@@ -56,12 +54,10 @@
<li>
<p>
Opens the the inventory and vendor databases
- that were created by our
-
- <tt class="classname">excxx_example_database_load</tt>
+ that were created by our <tt class="classname">example_database_load</tt>
application. See
- <a href="DbCXXUsage.html#exampledbload-cxx">excxx_example_database_load</a>
+ <a href="DbCXXUsage.html#exampledbload-cxx">example_database_load</a>
for information on how that
application creates the databases and writes data to them.
</p>
@@ -104,7 +100,7 @@
<div class="example">
<a id="CoreEIR-cxx"></a>
<p class="title">
- <b>Example 4.1 excxx_example_database_read</b>
+ <b>Example 4.1 example_database_read</b>
</p>
<p>
To begin, we include the necessary header files and perform our
@@ -112,13 +108,13 @@
function.
</p>
<a id="cxx_cursor10"></a>
- <pre class="programlisting">// File: excxx_example_database_read.cpp
+ <pre class="programlisting">// File: example_database_read.cpp
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
-#include "MyDb.hpp"
-#include "gettingStartedCommon.hpp"
+#include &quot;MyDb.hpp&quot;
+#include &quot;gettingStartedCommon.hpp&quot;
// Forward declarations
int show_all_records(MyDb &amp;inventoryDB, MyDb &amp;vendorDB);
@@ -134,11 +130,11 @@ int
main (int argc, char *argv[])
{
// Initialize the path to the database files
- std::string databaseHome("./");
+ std::string databaseHome(&quot;./&quot;);
// Database names
- std::string vDbName("vendordb.db");
- std::string iDbName("inventorydb.db");
+ std::string vDbName(&quot;vendordb.db&quot;);
+ std::string iDbName(&quot;inventorydb.db&quot;);
// Parse the command line arguments
// Omitted for brevity
@@ -151,11 +147,11 @@ main (int argc, char *argv[])
show_all_records(inventoryDB, vendorDB);
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error reading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error reading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(e.get_errno());
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error reading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error reading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(-1);
}
@@ -193,7 +189,7 @@ show_all_records(MyDb &amp;inventoryDB, MyDb &amp;vendorDB)
show_vendor(vendorDB, inventoryItem.getVendor().c_str());
}
} catch(DbException &amp;e) {
- inventoryDB.getDb().err(e.get_errno(), "Error in show_all_records");
+ inventoryDB.getDb().err(e.get_errno(), &quot;Error in show_all_records&quot;);
cursorp-&gt;close();
throw e;
} catch(std::exception &amp;e) {
@@ -220,7 +216,7 @@ show_all_records(MyDb &amp;inventoryDB, MyDb &amp;vendorDB)
<a id="cxx_cursor13"></a>
<pre class="programlisting">// Shows a vendor record. Each vendor record is an instance of
// a vendor structure. See loadVendorDB() in
-// excxx_example_database_load for how this structure was originally
+// example_database_load for how this structure was originally
// put into the database.
int
show_vendor(MyDb &amp;vendorDB, const char *vendor)
@@ -245,17 +241,17 @@ show_vendor(MyDb &amp;vendorDB, const char *vendor)
// Get the record
vendorDB.getDb().get(NULL, &amp;key, &amp;data, 0);
- std::cout &lt;&lt; " " &lt;&lt; my_vendor.street &lt;&lt; "\n"
- &lt;&lt; " " &lt;&lt; my_vendor.city &lt;&lt; ", "
- &lt;&lt; my_vendor.state &lt;&lt; "\n"
- &lt;&lt; " " &lt;&lt; my_vendor.zipcode &lt;&lt; "\n"
- &lt;&lt; " " &lt;&lt; my_vendor.phone_number &lt;&lt; "\n"
- &lt;&lt; " Contact: " &lt;&lt; my_vendor.sales_rep &lt;&lt; "\n"
- &lt;&lt; " " &lt;&lt; my_vendor.sales_rep_phone
+ std::cout &lt;&lt; &quot; &quot; &lt;&lt; my_vendor.street &lt;&lt; &quot;\n&quot;
+ &lt;&lt; &quot; &quot; &lt;&lt; my_vendor.city &lt;&lt; &quot;, &quot;
+ &lt;&lt; my_vendor.state &lt;&lt; &quot;\n&quot;
+ &lt;&lt; &quot; &quot; &lt;&lt; my_vendor.zipcode &lt;&lt; &quot;\n&quot;
+ &lt;&lt; &quot; &quot; &lt;&lt; my_vendor.phone_number &lt;&lt; &quot;\n&quot;
+ &lt;&lt; &quot; Contact: &quot; &lt;&lt; my_vendor.sales_rep &lt;&lt; &quot;\n&quot;
+ &lt;&lt; &quot; &quot; &lt;&lt; my_vendor.sales_rep_phone
&lt;&lt; std::endl;
} catch(DbException &amp;e) {
- vendorDB.getDb().err(e.get_errno(), "Error in show_vendor");
+ vendorDB.getDb().err(e.get_errno(), &quot;Error in show_vendor&quot;);
throw e;
} catch(std::exception &amp;e) {
throw e;
@@ -265,7 +261,7 @@ show_vendor(MyDb &amp;vendorDB, const char *vendor)
</div>
<p>
That completes the implementation of
- <tt class="classname">excxx_example_database_read()</tt>. In the next chapter, we
+ <tt class="classname">example_database_read()</tt>. In the next chapter, we
will extend this application to make use of a secondary database so that
we can query the inventory database for a specific inventory item.
</p>
diff --git a/db/docs/gsg/CXX/CoreDBAdmin.html b/db/docs/gsg/CXX/CoreDBAdmin.html
index c7cd1f8cf..1bec126a7 100644
--- a/db/docs/gsg/CXX/CoreDBAdmin.html
+++ b/db/docs/gsg/CXX/CoreDBAdmin.html
@@ -84,7 +84,7 @@ Db db(NULL, 0);
// Database open and subsequent operations omitted for clarity
-db.remove("mydb.db", // Database file to remove
+db.remove(&quot;mydb.db&quot;, // Database file to remove
NULL, // Database to remove. This is
// NULL so the entire file is
// removed.
@@ -111,11 +111,11 @@ Db db(NULL, 0);
// Database open and subsequent operations omitted for clarity
-db.rename("mydb.db", // Database file to rename
+db.rename(&quot;mydb.db&quot;, // Database file to rename
NULL, // Database to rename. This is
// NULL so the entire file is
// renamed.
- "newdb.db", // New database file name
+ &quot;newdb.db&quot;, // New database file name
0); // Flags. None used.</pre>
</li>
</ul>
diff --git a/db/docs/gsg/CXX/CoreDbCXXUsage.html b/db/docs/gsg/CXX/CoreDbCXXUsage.html
index c21905040..a40416c0e 100644
--- a/db/docs/gsg/CXX/CoreDbCXXUsage.html
+++ b/db/docs/gsg/CXX/CoreDbCXXUsage.html
@@ -62,7 +62,7 @@
<p>
To manage our database open and close activities, we encapsulate them
in the <tt class="classname">MyDb</tt> class. There are several good reasons
- to do this, the mort important being that we can ensure our databases are
+ to do this, the most important being that we can ensure our databases are
closed by putting that activity in the <tt class="classname">MyDb</tt>
class destructor.
</p>
@@ -106,7 +106,7 @@ private:
</p>
<a id="cxx_db12"></a>
<pre class="programlisting">// File: MyDb.cpp
-#include "MyDb.hpp"
+#include &quot;MyDb.hpp&quot;
// Class constructor. Requires a path to the location
// where the database is located, and a database name
@@ -128,12 +128,12 @@ MyDb::MyDb(std::string &amp;path, std::string &amp;dbName)
// need to catch them both.
catch(DbException &amp;e)
{
- std::cerr &lt;&lt; "Error opening database: " &lt;&lt; dbFileName_ &lt;&lt; "\n";
+ std::cerr &lt;&lt; &quot;Error opening database: &quot; &lt;&lt; dbFileName_ &lt;&lt; &quot;\n&quot;;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
catch(std::exception &amp;e)
{
- std::cerr &lt;&lt; "Error opening database: " &lt;&lt; dbFileName_ &lt;&lt; "\n";
+ std::cerr &lt;&lt; &quot;Error opening database: &quot; &lt;&lt; dbFileName_ &lt;&lt; &quot;\n&quot;;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
}</pre>
@@ -152,17 +152,17 @@ MyDb::close()
try
{
db_.close(0);
- std::cout &lt;&lt; "Database " &lt;&lt; dbFileName_
- &lt;&lt; " is closed." &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot;Database &quot; &lt;&lt; dbFileName_
+ &lt;&lt; &quot; is closed.&quot; &lt;&lt; std::endl;
}
catch(DbException &amp;e)
{
- std::cerr &lt;&lt; "Error closing database: " &lt;&lt; dbFileName_ &lt;&lt; "\n";
+ std::cerr &lt;&lt; &quot;Error closing database: &quot; &lt;&lt; dbFileName_ &lt;&lt; &quot;\n&quot;;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
catch(std::exception &amp;e)
{
- std::cerr &lt;&lt; "Error closing database: " &lt;&lt; dbFileName_ &lt;&lt; "\n";
+ std::cerr &lt;&lt; &quot;Error closing database: &quot; &lt;&lt; dbFileName_ &lt;&lt; &quot;\n&quot;;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
} </pre>
diff --git a/db/docs/gsg/CXX/CoreEnvUsage.html b/db/docs/gsg/CXX/CoreEnvUsage.html
index 8d1268545..cc8196954 100644
--- a/db/docs/gsg/CXX/CoreEnvUsage.html
+++ b/db/docs/gsg/CXX/CoreEnvUsage.html
@@ -49,6 +49,9 @@
created if it does not already exist.
</p>
<p>
+ You will also need to initialize the in-memory cache when you open your environment.
+ </p>
+ <p>
For example, to
<span>create an environment handle and</span>
open an environment:
@@ -56,20 +59,22 @@
<a id="cxx_env1"></a>
<pre class="programlisting">#include &lt;db_cxx.h&gt;
...
-u_int32_t env_flags = DB_CREATE; // If the environment does not
- // exist, create it.
-std::string envHome("/export1/testEnv");
+u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_MPOOL; // Initialize the in-memory cache.
+
+std::string envHome(&quot;/export1/testEnv&quot;);
DbEnv myEnv(0);
try {
myEnv.open(envHome.c_str(), env_flags, 0);
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error opening database environment: "
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
&lt;&lt; envHome &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
exit( -1 );
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error opening database environment: "
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
&lt;&lt; envHome &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
exit( -1 );
@@ -86,8 +91,8 @@ u_int32_t env_flags = DB_CREATE; // If the environment does not
// exist, create it.
<b class="userinput"><tt>u_int32_t db_flags = DB_CREATE; // If the database does not
// exist, create it.</tt></b>
-std::string envHome("/export1/testEnv");
-<b class="userinput"><tt>std::string dbName("mydb.db");</tt></b>
+std::string envHome(&quot;/export1/testEnv&quot;);
+<b class="userinput"><tt>std::string dbName(&quot;mydb.db&quot;);</tt></b>
DbEnv myEnv(0);
<b class="userinput"><tt>Db *myDb;</tt></b>
@@ -101,16 +106,16 @@ try {
db_flags,
0);</tt></b>
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error opening database environment: "
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
&lt;&lt; envHome
- &lt;&lt; " and database "
+ &lt;&lt; &quot; and database &quot;
&lt;&lt; dbName &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
exit( -1 );
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error opening database environment: "
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
&lt;&lt; envHome
- &lt;&lt; " and database "
+ &lt;&lt; &quot; and database &quot;
&lt;&lt; dbName &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
exit( -1 );
@@ -127,16 +132,16 @@ try {
myEnv.close(0);
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error closing database environment: "
+ std::cerr &lt;&lt; &quot;Error closing database environment: &quot;
&lt;&lt; envHome
- &lt;&lt; " or database "
+ &lt;&lt; &quot; or database &quot;
&lt;&lt; dbName &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
exit( -1 );
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error closing database environment: "
+ std::cerr &lt;&lt; &quot;Error closing database environment: &quot;
&lt;&lt; envHome
- &lt;&lt; " or database "
+ &lt;&lt; &quot; or database &quot;
&lt;&lt; dbName &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
exit( -1 );
diff --git a/db/docs/gsg/CXX/DB.html b/db/docs/gsg/CXX/DB.html
index ec569c8ba..73718a1e5 100644
--- a/db/docs/gsg/CXX/DB.html
+++ b/db/docs/gsg/CXX/DB.html
@@ -77,8 +77,7 @@
</dl>
</div>
<p>In Berkeley DB, a database is a collection of <span class="emphasis"><em>records</em></span>. Records,
- in turn, consist of two parts: key and data. That is, records consist of
- key/data pairings.
+ in turn, consist of key/data pairings.
</p>
<p>
Conceptually, you can think of a
@@ -145,7 +144,7 @@ u_int32_t oFlags = DB_CREATE; // Open flags;
try {
// Open the database
db.open(NULL, // Transaction pointer
- "my_db.db", // Database file name
+ &quot;my_db.db&quot;, // Database file name
NULL, // Optional logical database name
DB_BTREE, // Database access method
oFlags, // Open flags
diff --git a/db/docs/gsg/CXX/DBEntry.html b/db/docs/gsg/CXX/DBEntry.html
index 08fee38fe..07dc492d3 100644
--- a/db/docs/gsg/CXX/DBEntry.html
+++ b/db/docs/gsg/CXX/DBEntry.html
@@ -131,7 +131,7 @@
...
float money = 122.45;
-char *description = "Grocery bill.";
+char *description = &quot;Grocery bill.&quot;;
Dbt key(&amp;money, sizeof(float));
Dbt data(description, strlen(description)+1); </pre>
@@ -139,9 +139,7 @@ Dbt data(description, strlen(description)+1); </pre>
Note that in the following example we do not allow DB to assign the
memory for the retrieval of the money value. The reason why is that some
systems may require float values to have a specific alignment, and the
- memory as returned by
-
- <tt class="methodname">Db</tt>
+ memory as returned by DB
may not be properly aligned (the same problem may exist for structures
on some systems). We tell DB to use our memory instead of its
own by specifying the <tt class="literal">DB_DBT_USERMEM</tt> flag. Be aware that
diff --git a/db/docs/gsg/CXX/DBOpenFlags.html b/db/docs/gsg/CXX/DBOpenFlags.html
index b091635a6..5cc47eefb 100644
--- a/db/docs/gsg/CXX/DBOpenFlags.html
+++ b/db/docs/gsg/CXX/DBOpenFlags.html
@@ -40,7 +40,7 @@
to be of interest for introductory, single-threaded
database applications. For a complete list of the flags available to you, see the
- <i class="citetitle">Berkeley DB C++ API Reference Guide.</i>
+ <i class="citetitle">Berkeley DB C++ API guide.</i>
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
diff --git a/db/docs/gsg/CXX/DbCXXUsage.html b/db/docs/gsg/CXX/DbCXXUsage.html
index 894a34089..34ca01e17 100644
--- a/db/docs/gsg/CXX/DbCXXUsage.html
+++ b/db/docs/gsg/CXX/DbCXXUsage.html
@@ -94,7 +94,7 @@ typedef struct vendor {
In order to manage our actual inventory data, we create a class that
encapsulates the data that we want to store for each inventory
record. Beyond simple data encapsulation, this class is also capable
- of marshalling the inventory data into a single contiguous buffer
+ of marshaling the inventory data into a single contiguous buffer
for the purposes of storing in that data in a DB database.
</p>
<p>
@@ -226,12 +226,12 @@ public:
<pre class="programlisting"> // Utility function used to show the contents of this class
void
show() {
- std::cout &lt;&lt; "\nName: " &lt;&lt; name_ &lt;&lt; std::endl;
- std::cout &lt;&lt; " SKU: " &lt;&lt; sku_ &lt;&lt; std::endl;
- std::cout &lt;&lt; " Price: " &lt;&lt; price_ &lt;&lt; std::endl;
- std::cout &lt;&lt; " Quantity: " &lt;&lt; quantity_ &lt;&lt; std::endl;
- std::cout &lt;&lt; " Category: " &lt;&lt; category_ &lt;&lt; std::endl;
- std::cout &lt;&lt; " Vendor: " &lt;&lt; vendor_ &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot;\nName: &quot; &lt;&lt; name_ &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot; SKU: &quot; &lt;&lt; sku_ &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot; Price: &quot; &lt;&lt; price_ &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot; Quantity: &quot; &lt;&lt; quantity_ &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot; Category: &quot; &lt;&lt; category_ &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot; Vendor: &quot; &lt;&lt; vendor_ &lt;&lt; std::endl;
} </pre>
<p>
Finally, we provide a private method that is used to help us pack data
@@ -261,7 +261,7 @@ public:
<div class="example">
<a id="exampledbload-cxx"></a>
<p class="title">
- <b>Example 3.3 excxx_example_database_load</b>
+ <b>Example 3.3 example_database_load</b>
</p>
<p>
Our initial sample application loads database information from
@@ -278,13 +278,13 @@ public:
We begin with the normal include directives and forward declarations:
</p>
<a id="cxx_dbt16"></a>
- <pre class="programlisting">// File: excxx_example_database_load.cpp
+ <pre class="programlisting">// File: example_database_load.cpp
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
-#include "MyDb.hpp"
-#include "gettingStartedCommon.hpp"
+#include &quot;MyDb.hpp&quot;
+#include &quot;gettingStartedCommon.hpp&quot;
// Forward declarations
void loadVendorDB(MyDb&amp;, std::string&amp;);
@@ -302,12 +302,12 @@ int
main(int argc, char *argv[])
{
// Initialize the path to the database files
- std::string basename("./");
- std::string databaseHome("./");
+ std::string basename(&quot;./&quot;);
+ std::string databaseHome(&quot;./&quot;);
// Database names
- std::string vDbName("vendordb.db");
- std::string iDbName("inventorydb.db");
+ std::string vDbName(&quot;vendordb.db&quot;);
+ std::string iDbName(&quot;inventorydb.db&quot;);
// Parse the command line arguments here and determine
// the location of the flat text files containing the
@@ -315,8 +315,8 @@ main(int argc, char *argv[])
// Identify the full name for our input files, which should
// also include some path information.
- std::string inventoryFile = basename + "inventory.txt";
- std::string vendorFile = basename + "vendors.txt";
+ std::string inventoryFile = basename + &quot;inventory.txt&quot;;
+ std::string vendorFile = basename + &quot;vendors.txt&quot;;
try
{
@@ -330,11 +330,11 @@ main(int argc, char *argv[])
// Load the inventory database
loadInventoryDB(inventoryDB, inventoryFile);
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error loading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error loading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(e.get_errno());
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error loading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error loading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(-1);
}
@@ -374,8 +374,8 @@ loadVendorDB(MyDb &amp;vendorDB, std::string &amp;vendorFile)
std::ifstream inFile(vendorFile.c_str(), std::ios::in);
if ( !inFile )
{
- std::cerr &lt;&lt; "Could not open file '" &lt;&lt; vendorFile
- &lt;&lt; "'. Giving up." &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Could not open file '&quot; &lt;&lt; vendorFile
+ &lt;&lt; &quot;'. Giving up.&quot; &lt;&lt; std::endl;
throw std::exception();
}
@@ -391,7 +391,7 @@ loadVendorDB(MyDb &amp;vendorDB, std::string &amp;vendorFile)
// In a real program, there would be a lot more
// defensive code here.
sscanf(stringBuf.c_str(),
- "%20[^#]#%20[^#]#%20[^#]#%3[^#]#%6[^#]#%13[^#]#%20[^#]#%20[^\n]",
+ &quot;%20[^#]#%20[^#]#%20[^#]#%3[^#]#%6[^#]#%13[^#]#%20[^#]#%20[^\n]&quot;,
my_vendor.name, my_vendor.street,
my_vendor.city, my_vendor.state,
my_vendor.zipcode, my_vendor.phone_number,
@@ -438,7 +438,7 @@ loadVendorDB(MyDb &amp;vendorDB, std::string &amp;vendorFile)
int
getNextPound(std::string &amp;theString, std::string &amp;substring)
{
- int pos = theString.find("#");
+ int pos = theString.find(&quot;#&quot;);
substring.assign(theString, 0, pos);
theString.assign(theString, pos + 1, theString.size());
return (pos);
@@ -456,8 +456,8 @@ loadInventoryDB(MyDb &amp;inventoryDB, std::string &amp;inventoryFile)
std::ifstream inFile(inventoryFile.c_str(), std::ios::in);
if (!inFile)
{
- std::cerr &lt;&lt; "Could not open file '" &lt;&lt; inventoryFile
- &lt;&lt; "'. Giving up." &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Could not open file '&quot; &lt;&lt; inventoryFile
+ &lt;&lt; &quot;'. Giving up.&quot; &lt;&lt; std::endl;
throw std::exception();
}
diff --git a/db/docs/gsg/CXX/DeleteEntryWCursor.html b/db/docs/gsg/CXX/DeleteEntryWCursor.html
index 3a07d1326..482f1dfa0 100644
--- a/db/docs/gsg/CXX/DeleteEntryWCursor.html
+++ b/db/docs/gsg/CXX/DeleteEntryWCursor.html
@@ -54,7 +54,7 @@
...
-char *key1str = "My first string";
+char *key1str = &quot;My first string&quot;;
Db my_database(NULL, 0);
Dbc *cursorp;
@@ -76,9 +76,9 @@ try {
}
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Cursors must be closed
diff --git a/db/docs/gsg/CXX/Positioning.html b/db/docs/gsg/CXX/Positioning.html
index fe14c6eb0..6c0001657 100644
--- a/db/docs/gsg/CXX/Positioning.html
+++ b/db/docs/gsg/CXX/Positioning.html
@@ -73,9 +73,9 @@ try {
// can never be reached.
}
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Cursors must be closed
@@ -114,9 +114,9 @@ try {
// can never be reached.
}
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Cursors must be closed
@@ -209,7 +209,9 @@ my_database.close(0);</pre>
that you provide for the database. If no
<span>comparison function</span>
- is provided, then the default lexicographical sorting is used.
+ is provided, then the default
+
+ lexicographical sorting is used.
</p>
<p>
For example, suppose you have database records that use the
@@ -246,8 +248,9 @@ Arizona</pre>
<tt class="literal">DB_GET_BOTH_RANGE</tt>
</p>
<p>
- Moves the cursor to the first record in the database whose key is
- greater than or equal to the specified key. If the database supports
+ Moves the cursor to the first record in the database whose key matches the specified
+ key and whose data is
+ greater than or equal to the specified data. If the database supports
duplicate records, then on matching the key, the cursor is moved to
the duplicate record with the smallest data that is greater than or
equal to the specified data.
@@ -282,24 +285,19 @@ Arizona/Florence </pre>
</thead>
<tbody>
<tr>
- <td>Al</td>
- <td>Fl</td>
- <td>Alabama/Florence</td>
+ <td>Alaska</td>
+ <td>Fa</td>
+ <td>Alaska/Fairbanks</td>
</tr>
<tr>
- <td>Ar</td>
+ <td>Arizona</td>
<td>Fl</td>
<td>Arizona/Florence</td>
</tr>
<tr>
- <td>Al</td>
- <td>Fa</td>
- <td>Alaska/Fairbanks</td>
- </tr>
- <tr>
- <td>Al</td>
- <td>A</td>
- <td>Alabama/Athens</td>
+ <td>Alaska</td>
+ <td>An</td>
+ <td>Alaska/Anchorage</td>
</tr>
</tbody>
</table>
@@ -332,23 +330,24 @@ try {
my_database.cursor(NULL, &amp;cursorp, 0);
// Search criteria
- char *search_key = "Al";
- char *search_data = "Fa";
+ char *search_key = &quot;Alaska&quot;;
+ char *search_data = &quot;Fa&quot;;
// Set up our DBTs
Dbt key(search_key, strlen(search_key) + 1);
Dbt data(search_data, strlen(search_data) + 1);
// Position the cursor to the first record in the database whose
- // key and data begin with the correct strings.
+ // key matches the search key and whose data begins with the search
+ // data.
int ret = cursorp-&gt;get(&amp;key, &amp;data, DB_GET_BOTH_RANGE);
if (!ret) {
// Do something with the data
}
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Close the cursor
@@ -522,7 +521,7 @@ Arizona/Florence</pre>
...
-char *search_key = "Al";
+char *search_key = &quot;Al&quot;;
Db my_database(NULL, 0);
Dbc *cursorp;
@@ -541,14 +540,14 @@ try {
// key and data begin with the correct strings.
int ret = cursorp-&gt;get(&amp;key, &amp;data, DB_SET);
while (ret != DB_NOTFOUND) {
- std::cout &lt;&lt; "key: " &lt;&lt; (char *)key.get_data()
- &lt;&lt; "data: " &lt;&lt; (char *)data.get_data()&lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot;key: &quot; &lt;&lt; (char *)key.get_data()
+ &lt;&lt; &quot;data: &quot; &lt;&lt; (char *)data.get_data()&lt;&lt; std::endl;
ret = cursorp-&gt;get(&amp;key, &amp;data, DB_NEXT_DUP);
}
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Close the cursor
diff --git a/db/docs/gsg/CXX/PutEntryWCursor.html b/db/docs/gsg/CXX/PutEntryWCursor.html
index 4a4ff126f..1374295e9 100644
--- a/db/docs/gsg/CXX/PutEntryWCursor.html
+++ b/db/docs/gsg/CXX/PutEntryWCursor.html
@@ -42,10 +42,7 @@
</p>
<p>
Note that when putting records to the database using a cursor, the
- cursor is positioned at the record you inserted. Also, you can not
- transactionally protect a put that is performed using a cursor;
- if you want to transactionall protect your database writes,
- put recrods using the database handle directly.
+ cursor is positioned at the record you inserted.
</p>
<p>
You use
@@ -139,11 +136,11 @@
...
-char *key1str = "My first string";
-char *data1str = "My first data";
-char *key2str = "A second string";
-char *data2str = "My second data";
-char *data3str = "My third data";
+char *key1str = &quot;My first string&quot;;
+char *data1str = &quot;My first data&quot;;
+char *key2str = &quot;A second string&quot;;
+char *data2str = &quot;My second data&quot;;
+char *data3str = &quot;My third data&quot;;
Db my_database(NULL, 0);
@@ -164,11 +161,11 @@ try {
my_database.cursor(NULL, &amp;cursorp, 0);
// Assuming an empty database, this first put places
- // "My first string"/"My first data" in the first
+ // &quot;My first string&quot;/&quot;My first data&quot; in the first
// position in the database
int ret = cursorp-&gt;put(&amp;key1, &amp;data1, DB_KEYFIRST);
- // This put places "A second string"/"My second data" in the
+ // This put places &quot;A second string&quot;/&quot;My second data&quot; in the
// the database according to its key sorts against the key
// used for the currently existing database record. Most likely
// this record would appear first in the database.
@@ -176,21 +173,21 @@ try {
DB_KEYFIRST); /* Added according to sort order */
// If duplicates are not allowed, the currently existing record that
- // uses "key2" is overwritten with the data provided on this put.
- // That is, the record "A second string"/"My second data" becomes
- // "A second string"/"My third data"
+ // uses &quot;key2&quot; is overwritten with the data provided on this put.
+ // That is, the record &quot;A second string&quot;/&quot;My second data&quot; becomes
+ // &quot;A second string&quot;/&quot;My third data&quot;
//
- // If duplicates are allowed, then "My third data" is placed in the
- // duplicates list according to how it sorts against "My second data".
+ // If duplicates are allowed, then &quot;My third data&quot; is placed in the
+ // duplicates list according to how it sorts against &quot;My second data&quot;.
ret = cursorp-&gt;put(&amp;key2, &amp;data3,
DB_KEYFIRST); // If duplicates are not allowed, record
// is overwritten with new data. Otherwise,
// the record is added to the beginning of
// the duplicates list.
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Cursors must be closed
diff --git a/db/docs/gsg/CXX/ReplacingEntryWCursor.html b/db/docs/gsg/CXX/ReplacingEntryWCursor.html
index 6bbd080d5..5d6bd4dd7 100644
--- a/db/docs/gsg/CXX/ReplacingEntryWCursor.html
+++ b/db/docs/gsg/CXX/ReplacingEntryWCursor.html
@@ -57,8 +57,8 @@ Db my_database(NULL, 0);
Dbc *cursorp;
int ret;
-char *key1str = "My first string";
-char *replacement_data = "replace me";
+char *key1str = &quot;My first string&quot;;
+char *replacement_data = &quot;replace me&quot;;
try {
// Database open omitted
@@ -78,9 +78,9 @@ try {
cursorp-&gt;put(&amp;key, &amp;data, DB_CURRENT);
}
} catch(DbException &amp;e) {
- my_database.err(e.get_errno(), "Error!");
+ my_database.err(e.get_errno(), &quot;Error!&quot;);
} catch(std::exception &amp;e) {
- my_database.errx("Error! %s", e.what());
+ my_database.errx(&quot;Error! %s&quot;, e.what());
}
// Cursors must be closed
diff --git a/db/docs/gsg/CXX/accessmethods.html b/db/docs/gsg/CXX/accessmethods.html
index 02469bb95..dcbd74844 100644
--- a/db/docs/gsg/CXX/accessmethods.html
+++ b/db/docs/gsg/CXX/accessmethods.html
@@ -141,7 +141,7 @@
</p>
<p>
Once you have made this decision, you must choose between either
- BTree or Queue, or Hash or Recno. This decision is described next.
+ BTree or Hash, or Queue or Recno. This decision is described next.
</p>
</div>
<div class="sect2" lang="en" xml:lang="en">
diff --git a/db/docs/gsg/CXX/btree.html b/db/docs/gsg/CXX/btree.html
index d90e38e07..6e34d7bbc 100644
--- a/db/docs/gsg/CXX/btree.html
+++ b/db/docs/gsg/CXX/btree.html
@@ -327,7 +327,7 @@
...
Db db(NULL, 0);
-const char *file_name = "myd.db";
+const char *file_name = &quot;myd.db&quot;;
try {
// Configure the database for sorted duplicates
@@ -341,9 +341,9 @@ try {
DB_CREATE, // Open flags
0); // File mode. Using defaults
} catch(DbException &amp;e) {
- db.err(e.get_errno(), "Database '%s' open failed.", file_name);
+ db.err(e.get_errno(), &quot;Database '%s' open failed.&quot;, file_name);
} catch(std::exception &amp;e) {
- db.errx("Error opening database: %s : %s\n", file_name, e.what());
+ db.errx(&quot;Error opening database: %s : %s\n&quot;, file_name, e.what());
}
...
@@ -351,9 +351,9 @@ try {
try {
db.close(0);
} catch(DbException &amp;e) {
- db.err(e.get_errno(), "Database '%s' close failed.", file_name);
+ db.err(e.get_errno(), &quot;Database '%s' close failed.&quot;, file_name);
} catch(std::exception &amp;e) {
- db.errx("Error closing database: %s : %s\n", file_name, e.what());
+ db.errx(&quot;Error closing database: %s : %s\n&quot;, file_name, e.what());
}
</pre>
@@ -402,7 +402,7 @@ try {
do not sort well when viewed as byte strings. There are
several solutions to this problem, one being to provide a
custom comparison function. See
- <a href="http://www.sleepycat.com/docs/ref/am_misc/faq.html" target="_top">http://www.sleepycat.com/docs/ref/am_misc/faq.html</a>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_misc/faq.html" target="_top">http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_misc/faq.html</a>
for more information.
</p>
</li>
diff --git a/db/docs/gsg/CXX/concepts.html b/db/docs/gsg/CXX/concepts.html
index 8404051db..161e6a25b 100644
--- a/db/docs/gsg/CXX/concepts.html
+++ b/db/docs/gsg/CXX/concepts.html
@@ -42,7 +42,7 @@
Conceptually, DB databases contain <span class="emphasis"><em>records</em></span>.
Logically each record represents a single entry in the database.
Each such record contains two pieces of information: a key and a data.
- This manual will on occaison describe a <span class="emphasis"><em>a record's
+ This manual will on occasion describe a <span class="emphasis"><em>a record's
key</em></span> or a <span class="emphasis"><em>record's data</em></span> when it is
necessary to speak to one or the other portion of a database
record.
diff --git a/db/docs/gsg/CXX/coreExceptions.html b/db/docs/gsg/CXX/coreExceptions.html
index 4b0644d87..eec772f92 100644
--- a/db/docs/gsg/CXX/coreExceptions.html
+++ b/db/docs/gsg/CXX/coreExceptions.html
@@ -90,9 +90,7 @@ catch(std::exception &amp;e)
environment handles. In this event, you must manage your DB error
conditions using the integer value returned by all DB methods. Be
aware that this manual assumes that you want to manage your error
- conditions using <tt class="classname">DbException</tt> objects. For
- information on managing error conditions using the integer return
- values, see <i class="citetitle">Getting Started with Berkeley DB for C</i>.
+ conditions using <tt class="classname">DbException</tt> objects.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/CXX/coreindexusage.html b/db/docs/gsg/CXX/coreindexusage.html
index 496bd3726..7fdffdd47 100644
--- a/db/docs/gsg/CXX/coreindexusage.html
+++ b/db/docs/gsg/CXX/coreindexusage.html
@@ -47,10 +47,7 @@
<a href="DbCXXUsage.html">Database Usage Example</a>
we built an application that can open and load data into several databases.
- In <a href="coreindexusage.html#edlWIndexes">Secondary Databases with
-
- <tt class="function">excxx_example_database_load</tt>
- </a> we will extend
+ In <a href="coreindexusage.html#edlWIndexes">Secondary Databases with example_database_load</a> we will extend
that application to also open a secondary database for the purpose
of indexing inventory item names.
</p>
@@ -60,14 +57,10 @@
In <a href="CoreCursorUsage.html">Cursor Example</a> we
built an application to display our inventory database (and related
vendor information). In
- <a href="coreindexusage.html#edrWIndexes">Secondary Databases with
-
- <span>excxx_example_database_read</span>
- </a>
+ <a href="coreindexusage.html#edrWIndexes">Secondary Databases with example_database_read</a>
we will extend that application to
show inventory records based on the index we cause to be loaded using
-
- <span><tt class="function">excxx_example_database_load</tt>.</span>
+ <tt class="function">example_database_load</tt>.
</p>
</li>
</ul>
@@ -76,16 +69,13 @@
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="edlWIndexes"></a>Secondary Databases with
-
- <tt class="function">excxx_example_database_load</tt>
- </h3>
+ <h3 class="title"><a id="edlWIndexes"></a>Secondary Databases with example_database_load</h3>
</div>
</div>
<div></div>
</div>
<p>
- In order to update <tt class="function">excxx_example_database_load</tt>
+ In order to update <tt class="function">example_database_load</tt>
to maintain an index of inventory item names, all we really need
to do is:
</p>
@@ -109,9 +99,7 @@
</p>
<p>
Because DB maintains secondary databases for us; once this work
- is done we need not make any other changes to
-
- <span><tt class="function">excxx_example_database_load</tt>.</span>
+ is done we need not make any other changes to <tt class="function">example_database_load</tt>.
</p>
@@ -146,22 +134,29 @@ class Dbt;
int
get_item_name(Db *dbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey)
{
- InventoryData id(pdata-&gt;get_data());
- const char *itemname = id.getName().c_str();
+ // Obtain the buffer location where the we placed the item's name. In
+ // this example, the item's name is located in the primary data. It is
+ // the first string in the buffer after the price (a double) and
+ // the quantity (a long).
+ size_t offset = sizeof(double) + sizeof(long);
+ char * itemname = (char *)pdata-&gt;get_data() + offset;
+
+ // unused
+ (void)pkey;
- // If these don't match, then there was a problem with
- // the buffer contained in pdata, or there's a programming
- // error in how the buffer is marshalled/unmarshalled.
+ // If the offset is beyond the end of the data, then there is a
+ // problem with the buffer contained in pdata, or there's a
+ // programming error in how the buffer is marshalled/unmarshalled.
// This should never happen!
if ((u_int32_t)id.getBufferSize() != pdata-&gt;get_size()) {
- dbp-&gt;errx("get_item_name: buffer sizes do not match!");
+ dbp-&gt;errx(&quot;get_item_name: buffer sizes do not match!&quot;);
// When we return non-zero, the index record is not
// added/updated.
return (-1);
}
// Now set the secondary key's data to be the item name
- skey-&gt;set_data((void *)itemname);
+ skey-&gt;set_data(itemname);
skey-&gt;set_size(strlen(itemname) + 1);
return (0);
@@ -218,7 +213,7 @@ private:
</p>
<a id="cxx_index12"></a>
<pre class="programlisting">// File: MyDb.cpp
-#include "MyDb.hpp"
+#include &quot;MyDb.hpp&quot;
// Class constructor. Requires a path to the location
// where the database is located, and a database name
@@ -246,18 +241,18 @@ MyDb::MyDb(std::string &amp;path, std::string &amp;dbName,
// need to catch them both.
catch(DbException &amp;e)
{
- std::cerr &lt;&lt; "Error opening database: " &lt;&lt; dbFileName_ &lt;&lt; "\n";
+ std::cerr &lt;&lt; &quot;Error opening database: &quot; &lt;&lt; dbFileName_ &lt;&lt; &quot;\n&quot;;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
catch(std::exception &amp;e)
{
- std::cerr &lt;&lt; "Error opening database: " &lt;&lt; dbFileName_ &lt;&lt; "\n";
+ std::cerr &lt;&lt; &quot;Error opening database: &quot; &lt;&lt; dbFileName_ &lt;&lt; &quot;\n&quot;;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
} </pre>
<p>
That done, we can now update
- <tt class="function">excxx_example_database_load</tt> to open our new secondary
+ <tt class="function">example_database_load</tt> to open our new secondary
database and associate it to the inventory database.
</p>
<p>
@@ -265,7 +260,7 @@ MyDb::MyDb(std::string &amp;path, std::string &amp;dbName,
here. Instead, we show just the <tt class="function">main()</tt> function,
which is where all our modifications occur. To
see the rest of the implementation for this command, see
- <a href="DbCXXUsage.html#exampledbload-cxx">excxx_example_database_load</a>.
+ <a href="DbCXXUsage.html#exampledbload-cxx">example_database_load</a>.
</p>
<a id="cxx_index13"></a>
<pre class="programlisting">// Loads the contents of vendors.txt and inventory.txt into
@@ -274,13 +269,13 @@ int
main(int argc, char *argv[])
{
// Initialize the path to the database files
- std::string basename("./");
- std::string databaseHome("./");
+ std::string basename(&quot;./&quot;);
+ std::string databaseHome(&quot;./&quot;);
// Database names
- std::string vDbName("vendordb.db");
- std::string iDbName("inventorydb.db");
- <b class="userinput"><tt>std::string itemSDbName("itemname.sdb");</tt></b>
+ std::string vDbName(&quot;vendordb.db&quot;);
+ std::string iDbName(&quot;inventorydb.db&quot;);
+ <b class="userinput"><tt>std::string itemSDbName(&quot;itemname.sdb&quot;);</tt></b>
// Parse the command line arguments here and determine
// the location of the flat text files containing the
@@ -288,8 +283,8 @@ main(int argc, char *argv[])
// Identify the full name for our input files, which should
// also include some path information.
- std::string inventoryFile = basename + "inventory.txt";
- std::string vendorFile = basename + "vendors.txt";
+ std::string inventoryFile = basename + &quot;inventory.txt&quot;;
+ std::string vendorFile = basename + &quot;vendors.txt&quot;;
try
{
@@ -310,11 +305,11 @@ main(int argc, char *argv[])
// Load the inventory database
loadInventoryDB(inventoryDB, inventoryFile);
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error loading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error loading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(e.get_errno());
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error loading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error loading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(-1);
}
@@ -334,9 +329,7 @@ main(int argc, char *argv[])
the stack, and therefore the last one opened is the first one closed.
</p>
<p>
- That completes our update to
-
- <span><tt class="function">excxx_example_database_load</tt>.</span>
+ That completes our update to <tt class="function">example_database_load</tt>.
Now when this program is called, it will automatically index inventory
items based on their names. We can then query for those items using the
new index. We show how to do that in the next section.
@@ -346,10 +339,7 @@ main(int argc, char *argv[])
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="edrWIndexes"></a>Secondary Databases with
-
- <span>excxx_example_database_read</span>
- </h3>
+ <h3 class="title"><a id="edrWIndexes"></a>Secondary Databases with example_database_read</h3>
</div>
</div>
<div></div>
@@ -360,18 +350,14 @@ main(int argc, char *argv[])
Inventory database. In this section, we will update that example to
allow us to search for and display an inventory item given a
specific name. To do this, we will make use of the secondary
- database that
-
- <span><tt class="function">excxx_example_database_load</tt></span>
- now creates.
+ database that <tt class="function">example_database_load</tt> now
+ creates.
</p>
<p>
- The update to
- excxx_example_database_read
- is relatively modest. We need to open the new secondary database
+ The update to <tt class="function">example_database_read</tt> is
+ relatively modest. We need to open the new secondary database
in exactly the same way was we do for
-
- <span><tt class="function">excxx_example_database_load</tt>.</span>
+ <tt class="function">example_database_load</tt>.
We also need to add a command line parameter on
which we can specify the item name, and we will need a new function
in which we will perform the query and display the results.
@@ -381,13 +367,13 @@ main(int argc, char *argv[])
and update our usage function slightly:
</p>
<a id="cxx_index14"></a>
- <pre class="programlisting">// File: excxx_example_database_read.cpp
+ <pre class="programlisting">// File: example_database_read.cpp
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
-#include "MyDb.hpp"
-#include "gettingStartedCommon.hpp"
+#include &quot;MyDb.hpp&quot;
+#include &quot;gettingStartedCommon.hpp&quot;
// Forward declarations
int show_all_records(MyDb &amp;inventoryDB, MyDb &amp;vendorDB);
@@ -411,13 +397,13 @@ int
main (int argc, char *argv[])
{
// Initialize the path to the database files
- std::string databaseHome("./");
+ std::string databaseHome(&quot;./&quot;);
<b class="userinput"><tt>std::string itemName;</tt></b>
// Database names
- std::string vDbName("vendordb.db");
- std::string iDbName("inventorydb.db");
- <b class="userinput"><tt>std::string itemSDbName("itemname.sdb");</tt></b>
+ std::string vDbName(&quot;vendordb.db&quot;);
+ std::string iDbName(&quot;inventorydb.db&quot;);
+ <b class="userinput"><tt>std::string itemSDbName(&quot;itemname.sdb&quot;);</tt></b>
// Parse the command line arguments
// Omitted for brevity
@@ -442,11 +428,11 @@ main (int argc, char *argv[])
show_item(itemnameSDB, vendorDB, itemName);
}</tt></b>
} catch(DbException &amp;e) {
- std::cerr &lt;&lt; "Error reading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error reading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(e.get_errno());
} catch(std::exception &amp;e) {
- std::cerr &lt;&lt; "Error reading databases. " &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;Error reading databases. &quot; &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
return(-1);
}
@@ -491,7 +477,7 @@ show_item(MyDb &amp;itemnameSDB, MyDb &amp;vendorDB, std::string &amp;itemName)
// Get the search key. This is the name on the inventory
// record that we want to examine.
- std::cout &lt;&lt; "Looking for " &lt;&lt; itemName &lt;&lt; std::endl;
+ std::cout &lt;&lt; &quot;Looking for &quot; &lt;&lt; itemName &lt;&lt; std::endl;
Dbt key((void *)itemName.c_str(), itemName.length() + 1);
Dbt data;
@@ -507,15 +493,15 @@ show_item(MyDb &amp;itemnameSDB, MyDb &amp;vendorDB, std::string &amp;itemName)
} while(cursorp-&gt;get(&amp;key, &amp;data, DB_NEXT_DUP) == 0);
} else {
- std::cerr &lt;&lt; "No records found for '" &lt;&lt; itemName
- &lt;&lt; "'" &lt;&lt; std::endl;
+ std::cerr &lt;&lt; &quot;No records found for '&quot; &lt;&lt; itemName
+ &lt;&lt; &quot;'&quot; &lt;&lt; std::endl;
}
} catch(DbException &amp;e) {
- itemnameSDB.getDb().err(e.get_errno(), "Error in show_item");
+ itemnameSDB.getDb().err(e.get_errno(), &quot;Error in show_item&quot;);
cursorp-&gt;close();
throw e;
} catch(std::exception &amp;e) {
- itemnameSDB.getDb().errx("Error in show_item: %s", e.what());
+ itemnameSDB.getDb().errx(&quot;Error in show_item: %s&quot;, e.what());
cursorp-&gt;close();
throw e;
}
@@ -527,14 +513,11 @@ show_item(MyDb &amp;itemnameSDB, MyDb &amp;vendorDB, std::string &amp;itemName)
</pre>
<p>
This completes our update to
-
- <span><tt class="classname">excxx_example_database_read</tt>.</span>
-
- Using this update, you
+ <tt class="classname">example_inventory_read</tt>. Using this update, you
can now search for and show all inventory items that match a particular
name. For example:
</p>
- <pre class="programlisting"> example_database_read -i "Zulu Nut"</pre>
+ <pre class="programlisting"> example_inventory_read -i &quot;Zulu Nut&quot;</pre>
</div>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/CXX/dbErrorReporting.html b/db/docs/gsg/CXX/dbErrorReporting.html
index f90fe6bf8..b1d0a11ef 100644
--- a/db/docs/gsg/CXX/dbErrorReporting.html
+++ b/db/docs/gsg/CXX/dbErrorReporting.html
@@ -108,7 +108,7 @@
</p>
<p>
The error message consists of the prefix string
- (as defined by <tt class="methodname">set_errprefix()</tt>),
+ (as defined by <tt class="methodname">set_errpfx()</tt>),
an optional <tt class="literal">printf</tt>-style formatted message,
the error message, and a trailing newline.
</p>
@@ -157,13 +157,13 @@ my_error_handler(const char *error_prefix, char *msg)
...
Db db(NULL, 0);
-std::string dbFileName("my_db.db");
+std::string dbFileName(&quot;my_db.db&quot;);
try
{
// Set up error handling for this database
db.set_errcall(my_error_handler);
- db.set_errpfx("my_example_program"); </pre>
+ db.set_errpfx(&quot;my_example_program&quot;); </pre>
<p>
And to issue an error message:
</p>
@@ -174,14 +174,14 @@ try
// Must catch both DbException and std::exception
catch(DbException &amp;e)
{
- db.err(e.get_errno(), "Database open failed %s",
+ db.err(e.get_errno(), &quot;Database open failed %s&quot;,
dbFileName.c_str());
throw e;
}
catch(std::exception &amp;e)
{
// No DB error number available, so use errx
- db.errx("Error opening database: %s", e.what());
+ db.errx(&quot;Error opening database: %s&quot;, e.what());
throw e;
} </pre>
<span>
diff --git a/db/docs/gsg/CXX/dbconfig.html b/db/docs/gsg/CXX/dbconfig.html
index 3fb57e91f..3de67dc92 100644
--- a/db/docs/gsg/CXX/dbconfig.html
+++ b/db/docs/gsg/CXX/dbconfig.html
@@ -108,8 +108,7 @@
applications use BTree. For this reason, where configuration issues are
dependent on the type of access method in use, this chapter will focus on
BTree only. For configuration descriptions surrounding the other access
- methods, see the <i class="citetitle">Berkeley DB Programmer's Tutorial and Reference
- Guide</i>.
+ methods, see the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -276,8 +275,8 @@
<tt class="methodname">DbEnv::lock_stat()</tt>
<tt class="methodname">Environment.getLockStats()</tt>
method, or use the <tt class="literal">db_stat</tt> command line utility.
- The number of locks that could not be obtained due to conflicts is
- held in the lock statistic's <tt class="literal">st_nconflicts</tt> field.
+ The number of unavailable locks that your application waited for is
+ held in the lock statistic's <tt class="literal">st_lock_wait</tt> field.
</p>
</div>
@@ -341,7 +340,7 @@
filesystem's block size causes DB to write pages in block
size increments. As a result, it is possible for a partial page
to be written as the result of a transactional commit. For more
- information, see <a href="http://www.sleepycat.com/docs/ref/transapp/reclimit.html" target="_top">http://www.sleepycat.com/docs/ref/transapp/reclimit.html</a>.
+ information, see <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/reclimit.html" target="_top">http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/reclimit.html</a>.
</p>
</div>
</div>
diff --git a/db/docs/gsg/CXX/environments.html b/db/docs/gsg/CXX/environments.html
index fa1493eb4..95107b29c 100644
--- a/db/docs/gsg/CXX/environments.html
+++ b/db/docs/gsg/CXX/environments.html
@@ -45,7 +45,7 @@
<p>
While environments are frequently not used by applications running in
embedded environments where every byte counts, they will be used by
- virutally any other DB application requiring anything other than
+ virtually any other DB application requiring anything other than
the bare minimum functionality. An <span class="emphasis"><em>environment</em></span> is
essentially an encapsulation of one or more databases. Essentially, you
open an environment and then you open databases in that environment.
@@ -64,7 +64,7 @@
</p>
<p>
It is possible in DB to contain multiple databases in a
- single physical file on disk. This is desireable for those
+ single physical file on disk. This is desirable for those
application that open more than a few handful of databases.
However, in order to have more than one database contained in
a single physical file, your application
@@ -116,15 +116,16 @@
obtain a high-degree of recoverability in the face of an
application or system crash. Once enabled, the logging subsystem
allows the application to perform two kinds of recovery
- ("normal" and "catastrophic") through the use of the information
+ (&quot;normal&quot; and &quot;catastrophic&quot;) through the use of the information
contained in the log files.
</p>
</li>
</ul>
</div>
<p>
- All of these topics are described in the <i class="citetitle">Berkeley DB
- Programmer's Reference Guide</i>.
+ For more information on these topics, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide and the
+ <i class="citetitle">Berkeley DB Getting Started with Replicated Applications</i> guide.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/CXX/gettingit.html b/db/docs/gsg/CXX/gettingit.html
index c722aefce..c84496093 100644
--- a/db/docs/gsg/CXX/gettingit.html
+++ b/db/docs/gsg/CXX/gettingit.html
@@ -35,8 +35,8 @@
<div></div>
</div>
<p>
- You can obtain DB by visiting the Sleepycat download page:
- <a href="http://www.sleepycat.com/download/index.shtml" target="_top">http://www.sleepycat.com/download/index.shtml</a>.
+ You can obtain DB by visiting the Berkeley DB download page:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/db/index.html</a>.
</p>
<p>
To install DB, untar or unzip the distribution to the directory of
@@ -49,9 +49,9 @@
</p>
<p>
That page also contains links to more documentation for DB. In
- particular, you will find links for the <i class="citetitle">Berkeley DB
- Programmer's Tutorial and Reference Guide</i> as
- well as the API reference documentation.
+ particular, you will find links for the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ as well as the API reference documentation.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/CXX/index.html b/db/docs/gsg/CXX/index.html
index e90f04122..68eb40022 100644
--- a/db/docs/gsg/CXX/index.html
+++ b/db/docs/gsg/CXX/index.html
@@ -27,7 +27,7 @@
<div class="titlepage">
<div>
<div>
- <h1 class="title"><a id="id2766488"></a>Getting Started with Berkeley DB</h1>
+ <h1 class="title"><a id="id650925"></a>Getting Started with Berkeley DB</h1>
</div>
<div>
<div class="legalnotice">
@@ -35,24 +35,33 @@
<b>Legal Notice</b>
</p>
<p>
- This documentation is distributed under the terms of the Sleepycat
- public license. You may review the terms of this license at:
- <a href="http://www.sleepycat.com/download/oslicense.html" target="_top">http://www.sleepycat.com/download/oslicense.html</a>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
</p>
<p>
- Sleepycat Software, Berkeley DB, Berkeley DB XML and the Sleepycat logo
- are trademarks or service marks of Sleepycat Software, Inc. All rights to
- these marks are reserved. No third-party use is permitted without the
- express prior written consent of Sleepycat Software, Inc.
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
</p>
<p>
- To obtain a copy of this document's original source code, please write
- to <tt class="email">&lt;<a href="mailto:support@sleepycat.com">support@sleepycat.com</a>&gt;</tt>.
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
</p>
</div>
</div>
<div>
- <p class="pubdate">9/22/2004</p>
+ <p class="pubdate">9/20/2006</p>
</div>
</div>
<div></div>
@@ -75,6 +84,15 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</dd>
<dt>
@@ -351,18 +369,12 @@
<dl>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edlWIndexes">Secondary Databases with
-
- excxx_example_database_load
- </a>
+ <a href="coreindexusage.html#edlWIndexes">Secondary Databases with example_database_load</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edrWIndexes">Secondary Databases with
-
- excxx_example_database_read
- </a>
+ <a href="coreindexusage.html#edrWIndexes">Secondary Databases with example_database_read</a>
</span>
</dt>
</dl>
@@ -441,8 +453,8 @@
<dt>2.1. <a href="CoreDbCXXUsage.html#MyDb-cxx">MyDb Class</a></dt>
<dt>3.1. <a href="DbCXXUsage.html#VENDORCXXStruct">VENDOR Structure</a></dt>
<dt>3.2. <a href="DbCXXUsage.html#InventoryData">InventoryData Class</a></dt>
- <dt>3.3. <a href="DbCXXUsage.html#exampledbload-cxx">excxx_example_database_load</a></dt>
- <dt>4.1. <a href="CoreCursorUsage.html#CoreEIR-cxx">excxx_example_database_read</a></dt>
+ <dt>3.3. <a href="DbCXXUsage.html#exampledbload-cxx">example_database_load</a></dt>
+ <dt>4.1. <a href="CoreCursorUsage.html#CoreEIR-cxx">example_database_read</a></dt>
</dl>
</div>
</div>
diff --git a/db/docs/gsg/CXX/indexes.html b/db/docs/gsg/CXX/indexes.html
index 947ee63f3..8e7c0a1e6 100644
--- a/db/docs/gsg/CXX/indexes.html
+++ b/db/docs/gsg/CXX/indexes.html
@@ -93,18 +93,12 @@
<dl>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edlWIndexes">Secondary Databases with
-
- excxx_example_database_load
- </a>
+ <a href="coreindexusage.html#edlWIndexes">Secondary Databases with example_database_load</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="coreindexusage.html#edrWIndexes">Secondary Databases with
-
- excxx_example_database_read
- </a>
+ <a href="coreindexusage.html#edrWIndexes">Secondary Databases with example_database_read</a>
</span>
</dt>
</dl>
@@ -259,25 +253,25 @@
<pre class="programlisting">#include &lt;db_cxx.h&gt;
...
-
+
Db my_database(NULL, 0); // Primary
Db my_index(NULL, 0); // Secondary
// Open the primary
my_database.open(NULL, // Transaction pointer
- "my_db.db", // On-disk file that holds the database.
+ &quot;my_db.db&quot;, // On-disk file that holds the database.
NULL, // Optional logical database name
DB_BTREE, // Database access method
DB_CREATE, // Open flags
0); // File mode (using defaults)
// Setup the secondary to use sorted duplicates.
-// This is often desireable for secondary databases.
+// This is often desirable for secondary databases.
my_index.set_flags(DB_DUPSORT);
// Open the secondary
my_index.open(NULL, // Transaction pointer
- "my_secondary.db", // On-disk file that holds the database.
+ &quot;my_secondary.db&quot;, // On-disk file that holds the database.
NULL, // Optional logical database name
DB_BTREE, // Database access method
DB_CREATE, // Open flags.
diff --git a/db/docs/gsg/CXX/introduction.html b/db/docs/gsg/CXX/introduction.html
index 1ea18433f..2a6941eaf 100644
--- a/db/docs/gsg/CXX/introduction.html
+++ b/db/docs/gsg/CXX/introduction.html
@@ -101,7 +101,7 @@
</dl>
</div>
<p>
- Welcome to Sleepycat's Berkeley DB (DB). DB is a general-purpose embedded
+ Welcome to Berkeley DB (DB). DB is a general-purpose embedded
database engine that is capable of providing a wealth of data management services.
It is designed from the ground up for high-throughput applications requiring
in-process, bullet-proof management of mission-critical data. DB can
@@ -137,7 +137,7 @@
as to ensure that data is never left in an inconsistent state for any
reason (such as software bugs or hardware failures). For those
applications, a transaction subsystem can be enabled and used to
- transactionally protect database writes.
+ transactional-protect database writes.
</p>
<p>
The list of operating systems on which DB is available is too long to
@@ -145,8 +145,8 @@
operating systems, as well as on many embedded platforms.
</p>
<p>
- Finally, DB is available in a wealth of programming languages. Sleepycat
- officially supports DB in C, C++, and Java, but the library is also
+ Finally, DB is available in a wealth of programming languages.
+ DB is officially supported in C, C++, and Java, but the library is also
available in many other languages, especially scripting languages such as
Perl and Python.
</p>
diff --git a/db/docs/gsg/CXX/joins.html b/db/docs/gsg/CXX/joins.html
index a8cba860c..8a96e7b40 100644
--- a/db/docs/gsg/CXX/joins.html
+++ b/db/docs/gsg/CXX/joins.html
@@ -36,7 +36,7 @@
</div>
<p>
If you have two or more secondary databases associated with a primary
- database, then you can retrieve primary records based on the union of
+ database, then you can retrieve primary records based on the intersection of
multiple secondary entries. You do this using a
<span>join cursor.</span>
@@ -56,7 +56,7 @@
is fairly simple with a limited
number of data members, few of which would be interesting from a query
perspective. But suppose, instead, that we were storing
- information on something with many more queryable characteristics, such
+ information on something with many more characteristics that can be queried, such
as an automobile. In that case, you may be storing information such as
color, number of doors, fuel mileage, automobile type, number of
passengers, make, model, and year, to name just a few.
@@ -139,7 +139,8 @@
<li>
<p>
Create an array of cursors, and place in it each
- of the cursors that are participating in your join query.
+ of the cursors that are participating in your join query. Note that this array must be null
+ terminated.
</p>
</li>
<li>
@@ -206,7 +207,7 @@ Db automotiveTypeDB(NULL, 0);
// Position the cursors
Dbc *color_curs;
automotiveColorDB.cursor(NULL, &amp;color_curs, 0);
-char *the_color = "red";
+char *the_color = &quot;red&quot;;
Dbt key(the_color, strlen(the_color) + 1);
Dbt data;
if ((ret = color_curs-&gt;get(&amp;key, &amp;data, DB_SET)) != 0) {
@@ -215,7 +216,7 @@ if ((ret = color_curs-&gt;get(&amp;key, &amp;data, DB_SET)) != 0) {
Dbc *make_curs;
automotiveMakeDB.cursor(NULL, &amp;make_curs, 0);
-char *the_make = "Toyota";
+char *the_make = &quot;Toyota&quot;;
key.set_data(the_make);
key.set_size(strlen(the_make) + 1);
if ((ret = make_curs-&gt;get(&amp;key, &amp;data, DB_SET)) != 0) {
@@ -224,7 +225,7 @@ if ((ret = make_curs-&gt;get(&amp;key, &amp;data, DB_SET)) != 0) {
Dbc *type_curs;
automotiveTypeDB.cursor(NULL, &amp;type_curs, 0);
-char *the_type = "minivan";
+char *the_type = &quot;minivan&quot;;
key.set_data(the_type);
key.set_size(strlen(the_type) + 1);
if ((ret = type_curs-&gt;get(&amp;key, &amp;data, DB_SET)) != 0) {
@@ -232,10 +233,11 @@ if ((ret = type_curs-&gt;get(&amp;key, &amp;data, DB_SET)) != 0) {
}
// Set up the cursor array
-Dbc *carray[3];
+Dbc *carray[4];
carray[0] = color_curs;
carray[1] = make_curs;
carray[2] = type_curs;
+carray[3] = NULL;
// Create the join
Dbc *join_curs;
diff --git a/db/docs/gsg/CXX/preface.html b/db/docs/gsg/CXX/preface.html
index 6f88298ab..83219a76e 100644
--- a/db/docs/gsg/CXX/preface.html
+++ b/db/docs/gsg/CXX/preface.html
@@ -44,20 +44,29 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</div>
<p>
Welcome to Berkeley DB (DB). This document introduces
- <span>DB, version 4.3. </span>
+ <span>DB, version 4.5. </span>
It is intended
to provide a rapid introduction to the DB API set and related concepts. The goal of this document is
to provide you with an efficient mechanism
with which you can evaluate DB against your project's technical requirements. As such, this document is
intended for <span>C++</span>
developers and senior software architects who are
- looking for an in-process data management solution. No prior experience with Sleepycat technologies is
- expected or required.
+ looking for an in-process data management solution. No prior
+ experience with Berkeley DB is expected or required.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -79,12 +88,12 @@
- <span>"<tt class="methodname">Db::open()</tt> is a
- <tt class="classname">Db</tt> class method."</span>
+ <span>&quot;<tt class="methodname">Db::open()</tt> is a
+ <tt class="classname">Db</tt> class method.&quot;</span>
</p>
<p>
- Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: "Go to your
- <span class="emphasis"><em>DB_INSTALL</em></span> directory."
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
</p>
<p>
Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
@@ -119,6 +128,61 @@
as this.
</p>
</div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/CXX/index.html" target="_top">
+ Getting Started with Transaction Processing for C++
+ </a>
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/CXX/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for C++
+ </a>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_cxx/frame.html" target="_top">
+ Berkeley DB C++ API
+ </a>
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
</div>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/CXX/readSecondary.html b/db/docs/gsg/CXX/readSecondary.html
index 06c55521b..8c286935c 100644
--- a/db/docs/gsg/CXX/readSecondary.html
+++ b/db/docs/gsg/CXX/readSecondary.html
@@ -67,7 +67,7 @@
// The string to search for
-char *search_name = "John Doe";
+char *search_name = &quot;John Doe&quot;;
// Instantiate our Dbt's
Dbt key(search_name, strlen(search_name) + 1);
diff --git a/db/docs/gsg/CXX/returns.html b/db/docs/gsg/CXX/returns.html
new file mode 100644
index 000000000..46433419f
--- /dev/null
+++ b/db/docs/gsg/CXX/returns.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Error Returns</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction to Berkeley DB " />
+ <link rel="previous" href="coreExceptions.html" title="Exception Handling" />
+ <link rel="next" href="gettingit.html" title="Getting and Using DB " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Error Returns</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="coreExceptions.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction to Berkeley DB </th>
+ <td width="20%" align="right"> <a accesskey="n" href="gettingit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="returns"></a>Error Returns</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ <span>In addition to exceptions, the</span>
+
+ 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>
+ <p>
+ If a system error occurred (for example, 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), DB returns an
+ <tt class="literal">errno</tt>
+ value. All of the possible values of <tt class="literal">errno</tt> are greater than 0.
+ </p>
+ <p>
+ If the operation did not fail due to a system error, but was not
+ successful either, DB returns a special error value. For
+ example, if you tried to retrieve data from the database and the
+ record for which you are searching does not exist, DB would return
+ <tt class="literal">DB_NOTFOUND</tt>, 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.
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="coreExceptions.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="gettingit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Exception Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Getting and Using DB </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg/CXX/secondaryCursor.html b/db/docs/gsg/CXX/secondaryCursor.html
index 221efcc82..cc2e40522 100644
--- a/db/docs/gsg/CXX/secondaryCursor.html
+++ b/db/docs/gsg/CXX/secondaryCursor.html
@@ -103,7 +103,6 @@
Then the following searches for a person's
name in the secondary database, and deletes all secondary and primary
records that use that name.
-
</p>
<a id="cxx_index8"></a>
<pre class="programlisting">#include &lt;db_cxx.h&gt;
@@ -120,7 +119,7 @@ my_index.cursor(NULL, &amp;cursorp, 0);
// Name to delete
-char *search_name = "John Doe";
+char *search_name = &quot;John Doe&quot;;
// Instantiate Dbts as normal
Dbt key(search_name, strlen(search_name) + 1);
diff --git a/db/docs/gsg/CXX/secondaryDelete.html b/db/docs/gsg/CXX/secondaryDelete.html
index 711896c9c..d9b54f1f7 100644
--- a/db/docs/gsg/CXX/secondaryDelete.html
+++ b/db/docs/gsg/CXX/secondaryDelete.html
@@ -43,10 +43,10 @@
database and simply allow DB to manage the secondary modifications for you.
</p>
<p>
- However, as a convenience, you can delete a
+ However, as a convenience, you can delete
<span>secondary database</span>
- record directly. Doing so causes the associated primary key/data pair to be deleted.
+ records directly. Doing so causes the associated primary key/data pair to be deleted.
This in turn causes DB to delete all
<span>secondary database</span>
@@ -72,38 +72,12 @@
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
+
+ <span>
You can delete a secondary database record using the previously
- described mechanism only if:
- </p>
- <div class="itemizedlist">
- <ul type="disc">
- <li>
- <p>
- the
-
- <span>secondary key extractor function</span>
-
- returns
-
- <span><tt class="literal">0</tt></span>
- (see <a href="keyCreator.html">Implementing Key
-
- <span>Extractors</span>
- </a> for information on this
-
- <span>callback).</span>
- </p>
- </li>
- <li>
- <p>
- the primary database is opened for write access.
- </p>
- </li>
- </ul>
- </div>
- <p>
- If either of these conditions are not met, then no delete operations can be performed on the secondary
- database.
+ described mechanism
+ </span>
+ only if the primary database is opened for write access.
</p>
</div>
<p>For example:</p>
@@ -118,7 +92,7 @@ Db my_index(NULL, 0); // Secondary
// Open the primary
my_database.open(NULL, // Transaction pointer
- "my_db.db", // On-disk file that holds the database.
+ &quot;my_db.db&quot;, // On-disk file that holds the database.
NULL, // Optional logical database name
DB_BTREE, // Database access method
DB_CREATE, // Open flags
@@ -130,7 +104,7 @@ my_index.set_flags(DB_DUPSORT);
// Open the secondary
my_index.open(NULL, // Transaction pointer
- "my_secondary.db", // On-disk file that holds the database.
+ &quot;my_secondary.db&quot;, // On-disk file that holds the database.
NULL, // Optional logical database name
DB_BTREE, // Database access method
DB_CREATE, // Open flags.
@@ -144,7 +118,7 @@ my_database.associate(NULL, // Txn id
0); // Flags
// Name to delete
-char *search_name = "John Doe";
+char *search_name = &quot;John Doe&quot;;
// Get a search key
Dbt key(search_name, strlen(search_name) + 1);
diff --git a/db/docs/gsg/CXX/usingDbt.html b/db/docs/gsg/CXX/usingDbt.html
index ace8fd22d..8ac226a1d 100644
--- a/db/docs/gsg/CXX/usingDbt.html
+++ b/db/docs/gsg/CXX/usingDbt.html
@@ -127,7 +127,7 @@
...
-char *description = "Grocery bill.";
+char *description = &quot;Grocery bill.&quot;;
float money = 122.45;
Db my_database(NULL, 0);
@@ -138,7 +138,7 @@ Dbt data(description, strlen(description) + 1);
int ret = my_database.put(NULL, &amp;key, &amp;data, DB_NOOVERWRITE);
if (ret == DB_KEYEXIST) {
- my_database.err(ret, "Put failed because key %f already exists", money);
+ my_database.err(ret, &quot;Put failed because key %f already exists&quot;, money);
}</pre>
</div>
<div class="sect2" lang="en" xml:lang="en">
@@ -192,7 +192,7 @@ if (ret == DB_KEYEXIST) {
...
float money;
-char *description;
+char *description[DESCRIPTION_SIZE + 1];
Db my_database(NULL, 0);
// Database open omitted for clarity
@@ -200,16 +200,17 @@ Db my_database(NULL, 0);
money = 122.45;
Dbt key, data;
-// Use our own memory to retrieve the float.
-// For data alignment purposes.
+
key.set_data(&amp;money);
key.set_ulen(sizeof(float));
-key.set_flags(DB_DBT_USERMEM);
+
+data.set_data(&amp;description);
+data.set_ulen(DESCRIPTION_SIZE + 1);
+data.set_flags(DB_DBT_USERMEM);
my_database.get(NULL, &amp;key, &amp;data, 0);
-// Money is set into the memory that we supplied.
-description = (char *)data.get_data();</pre>
+// Description is set into the memory that we supplied. </pre>
<p>
Note that in this example, the
<tt class="literal">data.size</tt>
@@ -269,7 +270,7 @@ my_database.del(NULL, &amp;key, 0);</pre>
<p>
When you perform a database modification, your modification is made
in the in-memory cache. This means that your data modifications
- are not necessarily written to disk, and so your data may not appear
+ are not necessarily flushed to disk, and so your data may not appear
in the database after an application restart.
</p>
<p>
@@ -281,17 +282,19 @@ my_database.del(NULL, &amp;key, 0);</pre>
experience database corruption.
</p>
<p>
- Therefore, if you care about whether your data persists across
- application runs, and to guard against the rare possibility of
+ Therefore, if you care if your data is durable across system
+ failures, and to guard against the rare possibility of
database corruption, you should use transactions to protect your
database modifications. Every time you commit a transaction, DB
ensures that the data will not be lost due to application or
- system failure.
-
- <span>
- For information on transactions, see the <i class="citetitle">Berkeley DB
- Programmer's Tutorial and Reference Guide</i>.
- </span>
+ system failure. Transaction usage is described in the
+
+
+
+
+ <span>
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </span>
</p>
<p>
If you do not want to use transactions, then the assumption is that
@@ -307,7 +310,8 @@ my_database.del(NULL, &amp;key, 0);</pre>
<span>call <tt class="methodname">Db::sync()</tt>.</span>
- Syncs cause the entire contents of your in-memory cache to be written to disk. As
+ Syncs cause any dirty entries in the in-memory cache and the
+ operating system's file cache to be written to disk. As
such, they are quite expensive and you should use them sparingly.
</p>
<p>
diff --git a/db/docs/gsg/JAVA/BerkeleyDB-Core-JAVA-GSG.pdf b/db/docs/gsg/JAVA/BerkeleyDB-Core-JAVA-GSG.pdf
index f6fabaa34..af17d1e46 100644
--- a/db/docs/gsg/JAVA/BerkeleyDB-Core-JAVA-GSG.pdf
+++ b/db/docs/gsg/JAVA/BerkeleyDB-Core-JAVA-GSG.pdf
Binary files differ
diff --git a/db/docs/gsg/JAVA/CoreEnvUsage.html b/db/docs/gsg/JAVA/CoreEnvUsage.html
index 4759e5523..abe675a6a 100644
--- a/db/docs/gsg/JAVA/CoreEnvUsage.html
+++ b/db/docs/gsg/JAVA/CoreEnvUsage.html
@@ -49,12 +49,15 @@
created if it does not already exist.
</p>
<p>
+ You will also need to initialize the in-memory cache when you open your environment.
+ </p>
+ <p>
For example, to
<span>create an environment handle and</span>
open an environment:
</p>
<a id="java_env1"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.Environment;
@@ -66,10 +69,13 @@ import java.io.FileNotFoundException;
...
Environment myEnv = null;
-File envHome = new File("/export1/testEnv");
+File envHome = new File(&quot;/export1/testEnv&quot;);
try {
EnvironmentConfig envConf = new EnvironmentConfig();
- envConf.setAllowCreate(true);
+ envConf.setAllowCreate(true); // If the environment does not
+ // exist, create it.
+ envConf.setInitializeCache(true); // Initialize the in-memory
+ // cache.
myEnv = new Environment(envHome, envConf);
} catch (DatabaseException de) {
@@ -83,7 +89,7 @@ try {
provide any sort of a path in the database's file name:
</p>
<a id="java_env2"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
<b class="userinput"><tt>import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseConfig;
@@ -99,8 +105,8 @@ import java.io.FileNotFoundException;
Environment myEnv = null;
Database myDb = null;
-File envHome = new File("/export1/testEnv");
-String dbFileName = new String("mydb.db");
+File envHome = new File(&quot;/export1/testEnv&quot;);
+String dbFileName = new String(&quot;mydb.db&quot;, &quot;UTF-8&quot;);
try {
EnvironmentConfig envConf = new EnvironmentConfig();
diff --git a/db/docs/gsg/JAVA/CoreJavaUsage.html b/db/docs/gsg/JAVA/CoreJavaUsage.html
index 84a24586b..36c50f694 100644
--- a/db/docs/gsg/JAVA/CoreJavaUsage.html
+++ b/db/docs/gsg/JAVA/CoreJavaUsage.html
@@ -49,7 +49,7 @@
Note that you can find the complete implementation of these functions
in:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
@@ -62,7 +62,7 @@
<p>
To manage our database open and close activities, we encapsulate them
in the <tt class="classname">MyDbs</tt> class. There are several good reasons
- to do this, the mort important being that we can ensure our databases are
+ to do this, the most important being that we can ensure our databases are
closed by putting that activity in the <tt class="classname">MyDbs</tt>
class destructor.
</p>
@@ -71,7 +71,7 @@
</p>
<a id="java_db12"></a>
<pre class="programlisting">// File: MyDbs.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseConfig;
@@ -89,8 +89,8 @@ import java.io.FileNotFoundException; </pre>
private Database vendorDb = null;
private Database inventoryDb = null;
- private String vendordb = "VendorDB.db";
- private String inventorydb = "InventoryDB.db";
+ private String vendordb = &quot;VendorDB.db&quot;;
+ private String inventorydb = &quot;InventoryDB.db&quot;;
// Our constructor does nothing
public MyDbs() {} </pre>
@@ -107,24 +107,24 @@ import java.io.FileNotFoundException; </pre>
DatabaseConfig myDbConfig = new DatabaseConfig();
myDbConfig.setErrorStream(System.err);
- myDbConfig.setErrorPrefix("MyDbs");
+ myDbConfig.setErrorPrefix(&quot;MyDbs&quot;);
myDbConfig.setType(DatabaseType.BTREE);
myDbConfig.setAllowCreate(true);
// Now open, or create and open, our databases
// Open the vendors and inventory databases
try {
- vendordb = databasesHome + "/" + vendordb;
+ vendordb = databasesHome + &quot;/&quot; + vendordb;
vendorDb = new Database(vendordb,
null,
myDbConfig);
- inventorydb = databasesHome + "/" + inventorydb;
+ inventorydb = databasesHome + &quot;/&quot; + inventorydb;
inventoryDb = new Database(inventorydb,
null,
myDbConfig);
} catch(FileNotFoundException fnfe) {
- System.err.println("MyDbs: " + fnfe.toString());
+ System.err.println(&quot;MyDbs: &quot; + fnfe.toString());
System.exit(-1);
}
} </pre>
@@ -152,7 +152,7 @@ import java.io.FileNotFoundException; </pre>
inventoryDb.close();
}
} catch(DatabaseException dbe) {
- System.err.println("Error closing MyDbs: " +
+ System.err.println(&quot;Error closing MyDbs: &quot; +
dbe.toString());
System.exit(-1);
}
diff --git a/db/docs/gsg/JAVA/Cursors.html b/db/docs/gsg/JAVA/Cursors.html
index 1b8079556..6359918ac 100644
--- a/db/docs/gsg/JAVA/Cursors.html
+++ b/db/docs/gsg/JAVA/Cursors.html
@@ -117,7 +117,7 @@
</p>
<p>For example:</p>
<a id="java_cursor1"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.CursorConfig;
@@ -131,7 +131,7 @@ Database myDatabase = null;
Cursor myCursor = null;
try {
- myDatabase = new Database("myDB", null, null);
+ myDatabase = new Database(&quot;myDB&quot;, null, null);
myCursor = myDatabase.openCursor(null, null);
} catch (FileNotFoundException fnfe) {
@@ -142,12 +142,13 @@ try {
<p>
To close the cursor, call the <tt class="methodname">Cursor.close()</tt>
method. Note that if you close a database that has cursors open in it,
- then it will complain and close any open cursors for you. For best results, close your cursors from within a
+ then it will throw an exception and close any open cursors for you.
+ For best results, close your cursors from within a
<tt class="literal">finally</tt> block.
</p>
<a id="java_cursor2"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.Database;
@@ -166,7 +167,7 @@ try {
myDatabase.close();
}
} catch(DatabaseException dbe) {
- System.err.println("Error in close: " + dbe.toString());
+ System.err.println(&quot;Error in close: &quot; + dbe.toString());
}
} </pre>
</div>
diff --git a/db/docs/gsg/JAVA/DB.html b/db/docs/gsg/JAVA/DB.html
index b3d8837bb..c7b87085c 100644
--- a/db/docs/gsg/JAVA/DB.html
+++ b/db/docs/gsg/JAVA/DB.html
@@ -51,7 +51,7 @@
</dt>
<dt>
<span class="sect1">
- <a href="db_config.html">Database Properties</a>
+ <a href="DBConfig.html">Database Properties</a>
</span>
</dt>
<dt>
@@ -77,8 +77,7 @@
</dl>
</div>
<p>In Berkeley DB, a database is a collection of <span class="emphasis"><em>records</em></span>. Records,
- in turn, consist of two parts: key and data. That is, records consist of
- key/data pairings.
+ in turn, consist of key/data pairings.
</p>
<p>
Conceptually, you can think of a
@@ -125,14 +124,14 @@
</p>
<p>
Note that by default, DB does not create databases if they do not already exist.
- To override this behavior, set the <a href="db_config.html" title="Database Properties">creation property</a> to true.
+ To override this behavior, set the <a href="DBConfig.html" title="Database Properties">creation property</a> to true.
</p>
<p>
The following code fragment illustrates a database open:
</p>
<a id="java_db1"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.Database;
@@ -149,7 +148,7 @@ try {
// Open the database. Create it if it does not already exist.
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
- myDatabase = new Database ("sampleDatabase.db",
+ myDatabase = new Database (&quot;sampleDatabase.db&quot;,
null,
dbConfig);
} catch (DatabaseException dbe) {
diff --git a/db/docs/gsg/JAVA/DBAdmin.html b/db/docs/gsg/JAVA/DBAdmin.html
index c0b03b9b9..e5b5aba01 100644
--- a/db/docs/gsg/JAVA/DBAdmin.html
+++ b/db/docs/gsg/JAVA/DBAdmin.html
@@ -8,7 +8,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
<link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
<link rel="up" href="DB.html" title="Chapter 2. Databases" />
- <link rel="previous" href="db_config.html" title="Database Properties" />
+ <link rel="previous" href="DBConfig.html" title="Database Properties" />
<link rel="next" href="dbErrorReporting.html" title="Error Reporting Functions" />
</head>
<body>
@@ -18,7 +18,7 @@
<th colspan="3" align="center">Administrative Methods</th>
</tr>
<tr>
- <td width="20%" align="left"><a accesskey="p" href="db_config.html">Prev</a> </td>
+ <td width="20%" align="left"><a accesskey="p" href="DBConfig.html">Prev</a> </td>
<th width="60%" align="center">Chapter 2. Databases</th>
<td width="20%" align="right"> <a accesskey="n" href="dbErrorReporting.html">Next</a></td>
</tr>
@@ -35,7 +35,8 @@
<div></div>
</div>
<p>
- The <tt class="classname">Database</tt> class provides methods that are useful
+ Both the <tt class="classname">Environment</tt> and
+ <tt class="classname">Database</tt> classes provide methods that are useful
for manipulating databases. These methods are:
</p>
<div class="itemizedlist">
@@ -50,24 +51,6 @@
</li>
<li>
<p>
- <tt class="methodname">Database.truncate()</tt>
- </p>
- <p>
- Deletes every record in the database and optionally returns the
- number of records that were deleted. Note that it is much less
- expensive to truncate a database without counting the number of
- records deleted than it is to truncate and count.
- </p>
- <a id="je_db5"></a>
- <pre class="programlisting">int numDiscarded =
- myDatabase.truncate(null,
- true); // If true, then the number of
- // records deleted are counted.
-System.out.println("Discarded " + numDiscarded +
- " records from database " + myDatabase.getDatabaseName()); </pre>
- </li>
- <li>
- <p>
<tt class="methodname">Database.rename()</tt>
</p>
<p>
@@ -84,16 +67,37 @@ System.out.println("Discarded " + numDiscarded +
...
myDatabase.close();
try {
- myDatabase.rename("mydb.db", // Database file to rename
+ myDatabase.rename(&quot;mydb.db&quot;, // Database file to rename
null, // Database to rename. Not used so
// the entire file is renamed.
- "newdb.db", // New name to use.
+ &quot;newdb.db&quot;, // New name to use.
null); // DatabaseConfig object.
// None provided.
} catch (FileNotFoundException fnfe) {
// Exception handling goes here
}</pre>
</li>
+ <li>
+ <p>
+ <tt class="methodname">Environment.truncateDatabase()</tt>
+ </p>
+ <p>
+ Deletes every record in the database and optionally returns the
+ number of records that were deleted. Note that it is much less
+ expensive to truncate a database without counting the number of
+ records deleted than it is to truncate and count.
+ </p>
+ <a id="je_db5"></a>
+ <pre class="programlisting">int numDiscarded =
+ myEnv.truncate(null, // txn handle
+ myDatabase.getDatabaseName(), // database name
+ true); // If true, then the
+ // number of records
+ // deleted are counted.
+System.out.println(&quot;Discarded &quot; + numDiscarded +
+ &quot; records from database &quot; +
+ myDatabase.getDatabaseName()); </pre>
+ </li>
</ul>
</div>
</div>
@@ -101,7 +105,7 @@ try {
<hr />
<table width="100%" summary="Navigation footer">
<tr>
- <td width="40%" align="left"><a accesskey="p" href="db_config.html">Prev</a> </td>
+ <td width="40%" align="left"><a accesskey="p" href="DBConfig.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="DB.html">Up</a>
</td>
diff --git a/db/docs/gsg/JAVA/DBEntry.html b/db/docs/gsg/JAVA/DBEntry.html
index 46237dfa9..9986b8494 100644
--- a/db/docs/gsg/JAVA/DBEntry.html
+++ b/db/docs/gsg/JAVA/DBEntry.html
@@ -87,7 +87,7 @@
</dt>
<dt>
<span class="sect2">
- <a href="bindAPI.html#object2dbt">Serializeable Complex Objects</a>
+ <a href="bindAPI.html#object2dbt">Serializable Complex Objects</a>
</span>
</dt>
<dt>
@@ -121,7 +121,10 @@
Java primitive types to complex Java objects so long as that data can be
represented as a Java <tt class="literal">byte</tt> array. Note that due to
performance considerations, you should not use Java serialization to convert
- a Java object to a <tt class="literal">byte</tt> array.
+ a Java object to a <tt class="literal">byte</tt> array. Instead, use the Bind APIs
+ to perform this conversion (see
+ <a href="bindAPI.html">Using the BIND APIs</a> for more
+ information).
</p>
<p>
This chapter describes how you can convert both Java primitives and Java
@@ -146,9 +149,12 @@
&#8212; one for the key and another for the data.
- <span>The key and data information is stored in
+ <span>The key and data information are passed to-
+ and returned from DB using
<tt class="classname">DatabaseEntry</tt> objects as <tt class="literal">byte</tt>
- arrays. Therefore, using <tt class="classname">DatabaseEntry</tt> instances
+ arrays. Using <tt class="classname">DatabaseEntry</tt>s allows DB to
+ change the underlying byte array as well as return multiple values (that
+ is, key and data). Therefore, using <tt class="classname">DatabaseEntry</tt> instances
is mostly an exercise in efficiently moving your keys and your data in
and out of <tt class="literal">byte</tt> arrays.</span>
</p>
@@ -158,18 +164,18 @@
pair of <tt class="classname">DatabaseEntry</tt> objects:
</p>
<a id="java_dbt1"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
...
-String aKey = "key";
-String aData = "data";
+String aKey = &quot;key&quot;;
+String aData = &quot;data&quot;;
try {
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
- DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry theData = new DatabaseEntry(aData.getBytes(&quot;UTF-8&quot;));
} catch (Exception e) {
// Exception handling goes here
}
@@ -193,7 +199,7 @@ try {
<tt class="classname">DatabaseEntry</tt> as follows:
</p>
<a id="java_dbt2"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
@@ -210,8 +216,8 @@ import com.sleepycat.db.DatabaseEntry;
byte[] myKey = theKey.getData();
byte[] myData = theData.getData();
-String key = new String(myKey);
-String data = new String(myData); </pre>
+String key = new String(myKey, &quot;UTF-8&quot;);
+String data = new String(myData, &quot;UTF-8&quot;); </pre>
<p>
There are a large number of mechanisms that you can use to move data in
and out of <tt class="literal">byte</tt> arrays. To help you with this
diff --git a/db/docs/gsg/JAVA/DeleteEntryWCursor.html b/db/docs/gsg/JAVA/DeleteEntryWCursor.html
index 78630680e..28348f7df 100644
--- a/db/docs/gsg/JAVA/DeleteEntryWCursor.html
+++ b/db/docs/gsg/JAVA/DeleteEntryWCursor.html
@@ -45,7 +45,7 @@
</p>
<p>For example:</p>
<a id="java_cursor8"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.Database;
@@ -63,7 +63,7 @@ try {
...
// Create DatabaseEntry objects
// searchKey is some String.
- DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes(&quot;UTF-8&quot;));
DatabaseEntry theData = new DatabaseEntry();
// Open a cursor using a database handle
@@ -76,9 +76,10 @@ try {
// Count the number of records using the given key. If there is only
// one, delete that record.
if (cursor.count() == 1) {
- System.out.println("Deleting " +
- new String(theKey.getData()) + "|" +
- new String(theData.getData()));
+ System.out.println(&quot;Deleting &quot; +
+ new String(theKey.getData(), &quot;UTF-8&quot;) +
+ &quot;|&quot; +
+ new String(theData.getData(), &quot;UTF-8&quot;));
cursor.delete();
}
} catch (Exception e) {
diff --git a/db/docs/gsg/JAVA/Positioning.html b/db/docs/gsg/JAVA/Positioning.html
index a42ac98f9..124446528 100644
--- a/db/docs/gsg/JAVA/Positioning.html
+++ b/db/docs/gsg/JAVA/Positioning.html
@@ -45,7 +45,7 @@
For example:
</p>
<a id="java_cursor3"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseEntry;
@@ -81,13 +81,13 @@ try {
// DatabaseEntry held a byte array representation of some other data
// type (such as a complex object) then this operation would look
// considerably different.
- String keyString = new String(foundKey.getData());
- String dataString = new String(foundData.getData());
- System.out.println("Key | Data : " + keyString + " | " +
- dataString + "");
+ String keyString = new String(foundKey.getData(), &quot;UTF-8&quot;);
+ String dataString = new String(foundData.getData(), &quot;UTF-8&quot;);
+ System.out.println(&quot;Key | Data : &quot; + keyString + &quot; | &quot; +
+ dataString + &quot;&quot;);
}
} catch (DatabaseException de) {
- System.err.println("Error accessing database." + de);
+ System.err.println(&quot;Error accessing database.&quot; + de);
} finally {
// Cursors must be closed.
cursor.close();
@@ -99,7 +99,7 @@ try {
the database. For example:
</p>
<a id="java_cursor4"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.Database;
@@ -128,12 +128,12 @@ try {
while (cursor.getPrev(foundKey, foundData, LockMode.DEFAULT) ==
OperationStatus.SUCCESS) {
- String theKey = new String(foundKey.getData());
- String theData = new String(foundData.getData());
- System.out.println("Key | Data : " + theKey + " | " + theData + "");
+ String theKey = new String(foundKey.getData(), &quot;UTF-8&quot;);
+ String theData = new String(foundData.getData(), &quot;UTF-8&quot;);
+ System.out.println(&quot;Key | Data : &quot; + theKey + &quot; | &quot; + theData + &quot;&quot;);
}
} catch (DatabaseException de) {
- System.err.println("Error accessing database." + de);
+ System.err.println(&quot;Error accessing database.&quot; + de);
} finally {
// Cursors must be closed.
cursor.close();
@@ -201,7 +201,9 @@ try {
that you provide for the database. If no
<span>comparator</span>
- is provided, then the default lexicographical sorting is used.
+ is provided, then the default
+
+ lexicographical sorting is used.
</p>
<p>
For example, suppose you have database records that use the
@@ -238,8 +240,9 @@ Arizona</pre>
</p>
<p>
- Moves the cursor to the first record in the database whose key is
- greater than or equal to the specified key. If the database supports
+ Moves the cursor to the first record in the database whose key matches the specified
+ key and whose data is
+ greater than or equal to the specified data. If the database supports
duplicate records, then on matching the key, the cursor is moved to
the duplicate record with the smallest data that is greater than or
equal to the specified data.
@@ -274,24 +277,19 @@ Arizona/Florence </pre>
</thead>
<tbody>
<tr>
- <td>Al</td>
- <td>Fl</td>
- <td>Alabama/Florence</td>
+ <td>Alaska</td>
+ <td>Fa</td>
+ <td>Alaska/Fairbanks</td>
</tr>
<tr>
- <td>Ar</td>
+ <td>Arizona</td>
<td>Fl</td>
<td>Arizona/Florence</td>
</tr>
<tr>
- <td>Al</td>
- <td>Fa</td>
- <td>Alaska/Fairbanks</td>
- </tr>
- <tr>
- <td>Al</td>
- <td>A</td>
- <td>Alabama/Athens</td>
+ <td>Alaska</td>
+ <td>An</td>
+ <td>Alaska/Anchorage</td>
</tr>
</tbody>
</table>
@@ -309,7 +307,7 @@ Arizona/Florence </pre>
</p>
<a id="java_cursor5"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.Database;
@@ -321,8 +319,8 @@ import com.sleepycat.db.OperationStatus;
...
// For this example, hard code the search key and data
-String searchKey = "Al";
-String searchData = "Fa";
+String searchKey = &quot;Alaska&quot;;
+String searchData = &quot;Fa&quot;;
Cursor cursor = null;
Database myDatabase = null;
@@ -335,9 +333,9 @@ try {
cursor = myDatabase.openCursor(null, null);
DatabaseEntry theKey =
- new DatabaseEntry(searchKey.getBytes("UTF-8"));
+ new DatabaseEntry(searchKey.getBytes(&quot;UTF-8&quot;));
DatabaseEntry theData =
- new DatabaseEntry(searchData.getBytes("UTF-8"));
+ new DatabaseEntry(searchData.getBytes(&quot;UTF-8&quot;));
// Open a cursor using a database handle
cursor = myDatabase.openCursor(null, null);
@@ -345,21 +343,21 @@ try {
// Perform the search
OperationStatus retVal = cursor.getSearchBothRange(theKey, theData,
LockMode.DEFAULT);
- // NOTFOUND is returned if a record cannot be found whose key begins
- // with the search key AND whose data begins with the search data.
+ // NOTFOUND is returned if a record cannot be found whose key
+ // matches the search key AND whose data begins with the search data.
if (retVal == OperationStatus.NOTFOUND) {
- System.out.println(searchKey + "/" + searchData +
- " not matched in database " +
+ System.out.println(searchKey + &quot;/&quot; + searchData +
+ &quot; not matched in database &quot; +
myDatabase.getDatabaseName());
} else {
// Upon completing a search, the key and data DatabaseEntry
// parameters for getSearchBothRange() are populated with the
// key/data values of the found record.
- String foundKey = new String(theKey.getData());
- String foundData = new String(theData.getData());
- System.out.println("Found record " + foundKey + "/" + foundData +
- "for search key/data: " + searchKey +
- "/" + searchData);
+ String foundKey = new String(theKey.getData(), &quot;UTF-8&quot;);
+ String foundData = new String(theData.getData(), &quot;UTF-8&quot;);
+ System.out.println(&quot;Found record &quot; + foundKey + &quot;/&quot; + foundData +
+ &quot;for search key/data: &quot; + searchKey +
+ &quot;/&quot; + searchData);
}
} catch (Exception e) {
@@ -525,7 +523,7 @@ Arizona/Florence</pre>
only String objects for the keys and data.</span>
</p>
<a id="java_cursor6"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.Database;
@@ -545,7 +543,7 @@ try {
// Create DatabaseEntry objects
// searchKey is some String.
- DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes(&quot;UTF-8&quot;));
DatabaseEntry theData = new DatabaseEntry();
// Open a cursor using a database handle
@@ -560,10 +558,10 @@ try {
// print the duplicates.
if (cursor.count() &gt; 1) {
while (retVal == OperationStatus.SUCCESS) {
- String keyString = new String(theKey.getData());
- String dataString = new String(theData.getData());
- System.out.println("Key | Data : " + keyString + " | " +
- dataString + "");
+ String keyString = new String(theKey.getData(), &quot;UTF-8&quot;);
+ String dataString = new String(theData.getData(), &quot;UTF-8&quot;);
+ System.out.println(&quot;Key | Data : &quot; + keyString + &quot; | &quot; +
+ dataString + &quot;&quot;);
retVal = cursor.getNextDup(theKey, theData, LockMode.DEFAULT);
}
diff --git a/db/docs/gsg/JAVA/PutEntryWCursor.html b/db/docs/gsg/JAVA/PutEntryWCursor.html
index d4cada443..cbad1a7ec 100644
--- a/db/docs/gsg/JAVA/PutEntryWCursor.html
+++ b/db/docs/gsg/JAVA/PutEntryWCursor.html
@@ -42,10 +42,7 @@
</p>
<p>
Note that when putting records to the database using a cursor, the
- cursor is positioned at the record you inserted. Also, you can not
- transactionally protect a put that is performed using a cursor;
- if you want to transactionall protect your database writes,
- put recrods using the database handle directly.
+ cursor is positioned at the record you inserted.
</p>
<div class="itemizedlist">
<ul type="disc">
@@ -140,7 +137,7 @@
</div>
<p>For example:</p>
<a id="java_cursor7"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Cursor;
import com.sleepycat.db.Database;
@@ -150,11 +147,11 @@ import com.sleepycat.db.OperationStatus;
...
// Create the data to put into the database
-String key1str = "My first string";
-String data1str = "My first data";
-String key2str = "My second string";
-String data2str = "My second data";
-String data3str = "My third data";
+String key1str = &quot;My first string&quot;;
+String data1str = &quot;My first data&quot;;
+String key2str = &quot;My second string&quot;;
+String data2str = &quot;My second data&quot;;
+String data3str = &quot;My third data&quot;;
Cursor cursor = null;
Database myDatabase = null;
@@ -163,11 +160,11 @@ try {
// Database open omitted for brevity
...
- DatabaseEntry key1 = new DatabaseEntry(key1str.getBytes("UTF-8"));
- DatabaseEntry data1 = new DatabaseEntry(data1str.getBytes("UTF-8"));
- DatabaseEntry key2 = new DatabaseEntry(key2str.getBytes("UTF-8"));
- DatabaseEntry data2 = new DatabaseEntry(data2str.getBytes("UTF-8"));
- DatabaseEntry data3 = new DatabaseEntry(data3str.getBytes("UTF-8"));
+ DatabaseEntry key1 = new DatabaseEntry(key1str.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data1 = new DatabaseEntry(data1str.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry key2 = new DatabaseEntry(key2str.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data2 = new DatabaseEntry(data2str.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data3 = new DatabaseEntry(data3str.getBytes(&quot;UTF-8&quot;));
// Open a cursor using a database handle
cursor = myDatabase.openCursor(null, null);
diff --git a/db/docs/gsg/JAVA/ReplacingEntryWCursor.html b/db/docs/gsg/JAVA/ReplacingEntryWCursor.html
index 29cff39a6..beb492675 100644
--- a/db/docs/gsg/JAVA/ReplacingEntryWCursor.html
+++ b/db/docs/gsg/JAVA/ReplacingEntryWCursor.html
@@ -61,7 +61,7 @@ try {
...
// Create DatabaseEntry objects
// searchKey is some String.
- DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes(&quot;UTF-8&quot;));
DatabaseEntry theData = new DatabaseEntry();
// Open a cursor using a database handle
@@ -72,9 +72,9 @@ try {
LockMode.DEFAULT);
// Replacement data
- String replaceStr = "My replacement string";
+ String replaceStr = &quot;My replacement string&quot;;
DatabaseEntry replacementData =
- new DatabaseEntry(replaceStr.getBytes("UTF-8"));
+ new DatabaseEntry(replaceStr.getBytes(&quot;UTF-8&quot;));
cursor.putCurrent(replacementData);
} catch (Exception e) {
// Exception handling goes here
diff --git a/db/docs/gsg/JAVA/accessmethods.html b/db/docs/gsg/JAVA/accessmethods.html
index 02469bb95..dcbd74844 100644
--- a/db/docs/gsg/JAVA/accessmethods.html
+++ b/db/docs/gsg/JAVA/accessmethods.html
@@ -141,7 +141,7 @@
</p>
<p>
Once you have made this decision, you must choose between either
- BTree or Queue, or Hash or Recno. This decision is described next.
+ BTree or Hash, or Queue or Recno. This decision is described next.
</p>
</div>
<div class="sect2" lang="en" xml:lang="en">
diff --git a/db/docs/gsg/JAVA/bindAPI.html b/db/docs/gsg/JAVA/bindAPI.html
index ac872849a..b8ce535ef 100644
--- a/db/docs/gsg/JAVA/bindAPI.html
+++ b/db/docs/gsg/JAVA/bindAPI.html
@@ -38,8 +38,12 @@
and out of Java byte arrays for storage in a database can be a nontrivial
operation. To help you with this problem, DB provides the Bind APIs.
While these APIs are described in detail in the
- <i class="citetitle">Sleepycat Java Collections Tutorial</i> (see
- <a href="http://www.sleepycat.com/docs/ref/toc.html" target="_top">http://www.sleepycat.com/docs/ref/toc.html</a>),
+
+
+ <span>
+ <i class="citetitle">Berkeley DB Collections Tutorial</i>,
+ </span>
+
this section provides a brief introduction to using the Bind APIs with:</p>
<div class="itemizedlist">
<ul type="disc">
@@ -52,14 +56,14 @@
<li>
<p>Complex objects that implement Java serialization.</p>
<p>Use this if you are storing objects that implement
- <tt class="classname">Serializable</tt> and if you do not want to sort on
- this information.</p>
+ <tt class="classname">Serializable</tt> and if you do not need to sort them.
+ </p>
</li>
<li>
<p>Non-serialized complex objects.</p>
<p>If you are storing objects that do not implement serialization,
you can create your own custom tuple bindings. Note that you should
- use custom tuple bindings even if your objects are serializeable if
+ use custom tuple bindings even if your objects are serializable if
you want to sort on that data.</p>
</li>
</ul>
@@ -132,7 +136,7 @@
<li>
<p>Create an <tt class="classname">EntryBinding</tt> object.</p>
<p>When you do this, you use <tt class="classname">TupleBinding.getPrimitiveBinding()</tt>
- to return the binding that you use for the conversion.</p>
+ to return an appropriate binding for the conversion.</p>
</li>
<li>
<p>Use the <tt class="classname">EntryBinding</tt> object to place
@@ -143,7 +147,7 @@
<p>Once the data is stored in the DatabaseEntry, you can put it to
the database in whatever manner you wish. For example:</p>
<a id="java_dbt6"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.tuple.TupleBinding;
@@ -157,8 +161,8 @@ Database myDatabase = null;
// Need a key for the put.
try {
- String aKey = "myLong";
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
+ String aKey = &quot;myLong&quot;;
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
// Now build the DatabaseEntry using a TupleBinding
Long myLong = new Long(123456789l);
@@ -174,7 +178,7 @@ try {
<p>Retrieval from the <tt class="classname">DatabaseEntry</tt> object is
performed in much the same way:</p>
<a id="java_dbt7"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.tuple.TupleBinding;
@@ -190,8 +194,8 @@ Database myDatabase = null;
try {
// Need a key for the get
- String aKey = "myLong";
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
+ String aKey = &quot;myLong&quot;;
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
// Need a DatabaseEntry to hold the associated data.
DatabaseEntry theData = new DatabaseEntry();
@@ -208,11 +212,11 @@ try {
// Use the binding to convert the byte array contained in theData
// to a Long type.
Long theLong = (Long) myBinding.entryToObject(theData);
- retKey = new String(theKey.getData());
- System.out.println("For key: '" + retKey + "' found Long: '" +
- theLong + "'.");
+ retKey = new String(theKey.getData(), &quot;UTF-8&quot;);
+ System.out.println(&quot;For key: '&quot; + retKey + &quot;' found Long: '&quot; +
+ theLong + &quot;'.&quot;);
} else {
- System.out.println("No record found for key '" + retKey + "'.");
+ System.out.println(&quot;No record found for key '&quot; + retKey + &quot;'.&quot;);
}
} catch (Exception e) {
// Exception handling goes here
@@ -222,7 +226,7 @@ try {
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="object2dbt"></a>Serializeable Complex Objects</h3>
+ <h3 class="title"><a id="object2dbt"></a>Serializable Complex Objects</h3>
</div>
</div>
<div></div>
@@ -241,7 +245,7 @@ try {
DB database, you must convert them to and from a <tt class="literal">byte</tt> array.
The first instinct for many Java programmers is to do this using Java
serialization. While this is functionally a correct solution, the result
- is poor performance because this causes the class information
+ is poor space-performance because this causes the class information
to be stored on every such database record. This information can be quite large
and it is redundant &#8212; the class information does not vary for serialized objects of the same type.
</p>
@@ -256,7 +260,7 @@ try {
object information to be saved off to a unique <tt class="classname">Database</tt>
dedicated for that purpose. This means that you do not have to duplicate
that information on each record in the <tt class="classname">Database</tt>
- that your application is using to store it's information.</p>
+ that your application is using to store its information.</p>
<p>
Note that when you use the Bind APIs to perform serialization, you still
receive all the benefits of serialization. You can still use arbitrarily
@@ -281,12 +285,13 @@ try {
<div class="itemizedlist">
<ul type="disc">
<li>
- <p>If you need to sort based on the objects your are storing.
- The sort order is meaningless for the byte arrays that you
- obtain through serialization. Consequently, you should not use serialization for keys if you
- care about their sort order. You should
- also not use serialization for record data if your
- <tt class="classname">Database</tt> supports duplicate records and you care about sort order.
+ <p>
+ If you need to sort based on the objects your are storing.
+ The sort order is meaningless for the byte arrays that you
+ obtain through serialization. Consequently, you should not use serialization for keys if you
+ care about their sort order. You should
+ also not use serialization for record data if your
+ <tt class="classname">Database</tt> supports duplicate records and you care about sort order.
</p>
</li>
<li>
@@ -317,13 +322,14 @@ try {
</div>
<div></div>
</div>
- <p>To serialize and store a serializeable complex object using the
+ <p>To store a serializable complex object using the
Bind APIs:</p>
<div class="orderedlist">
<ol type="1">
<li>
- <p>Implement the class whose instances that you want to store.
- Note that this class must implement <tt class="classname">java.io.Serializable</tt>.
+ <p>
+ Implement java.io.Serializable in the class whose instances that
+ you want to store.
</p>
</li>
<li>
@@ -353,7 +359,7 @@ try {
looks something like this:
</p>
<a id="java_dbt8"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import java.io.Serializable;
@@ -394,7 +400,7 @@ public class MyData implements Serializable {
}</pre>
<p>You can then store instances of this class as follows:</p>
<a id="java_dbt9"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
@@ -406,13 +412,13 @@ import com.sleepycat.db.DatabaseType;
...
// The key data.
-String aKey = "myData";
+String aKey = &quot;myData&quot;;
// The data data
MyData data2Store = new MyData();
data2Store.setLong(123456789l);
data2Store.setDouble(1234.9876543);
-data2Store.setDescription("A test instance of this class");
+data2Store.setDescription(&quot;A test instance of this class&quot;);
try {
// Open the database that you will use to store your data
@@ -420,13 +426,13 @@ try {
myDbConfig.setAllowCreate(true);
myDbConfig.setSortedDuplicates(true);
myDbConfig.setType(DatabaseType.BTREE);
- Database myDatabase = new Database("myDb", null, myDbConfig);
+ Database myDatabase = new Database(&quot;myDb&quot;, null, myDbConfig);
// Open the database that you use to store your class information.
// The db used to store class information does not require duplicates
// support.
myDbConfig.setSortedDuplicates(false);
- Database myClassDb = new Database("classDb", null, myDbConfig);
+ Database myClassDb = new Database(&quot;classDb&quot;, null, myDbConfig);
// Instantiate the class catalog
StoredClassCatalog classCatalog = new StoredClassCatalog(myClassDb);
@@ -436,7 +442,7 @@ try {
MyData.class);
// Create the DatabaseEntry for the key
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
// Create the DatabaseEntry for the data. Use the EntryBinding object
// that was just created to populate the DatabaseEntry
@@ -465,7 +471,7 @@ try {
<tt class="classname">DatabaseEntry</tt> using the Bind APIs in much the
same way as is described above. For example:</p>
<a id="java_dbt10"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
@@ -479,17 +485,17 @@ import com.sleepycat.db.LockMode;
...
// The key data.
-String aKey = "myData";
+String aKey = &quot;myData&quot;;
try {
// Open the database that stores your data
DatabaseConfig myDbConfig = new DatabaseConfig();
myDbConfig.setAllowCreate(false);
myDbConfig.setType(DatabaseType.BTREE);
- Database myDatabase = new Database("myDb", null, myDbConfig);
+ Database myDatabase = new Database(&quot;myDb&quot;, null, myDbConfig);
// Open the database that stores your class information.
- Database myClassDb = new Database("classDb", null, myDbConfig);
+ Database myClassDb = new Database(&quot;classDb&quot;, null, myDbConfig);
// Instantiate the class catalog
StoredClassCatalog classCatalog = new StoredClassCatalog(myClassDb);
@@ -499,7 +505,7 @@ try {
MyData.class);
// Create DatabaseEntry objects for the key and data
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
DatabaseEntry theData = new DatabaseEntry();
// Do the get as normal
@@ -536,18 +542,18 @@ try {
</p>
<p>
For information on using serialization to store complex objects, see
- <a href="bindAPI.html#object2dbt">Serializeable Complex Objects</a>.
+ <a href="bindAPI.html#object2dbt">Serializable Complex Objects</a>.
</p>
<p>To store complex objects using a custom tuple binding:</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>Implement the class whose instances that you want to store.
- Note that you do not have to implement serialization.</p>
+ Note that you do not have to implement the Serializable interface.</p>
</li>
<li>
- <p>Implement the <tt class="classname">com.sleepycat.bind.tuple.TupleBinding</tt>
- interface.</p>
+ <p>Write a tuple binding using the <tt class="classname">com.sleepycat.bind.tuple.TupleBinding</tt>
+ class.</p>
</li>
<li>
<p>Open (create) your database. Unlike serialization, you only
@@ -569,7 +575,7 @@ try {
following class:
</p>
<a id="java_dbt11"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
public class MyData2 {
private long longData;
@@ -579,7 +585,7 @@ public class MyData2 {
public MyData2() {
longData = 0;
doubleData = new Double(0.0);
- description = "";
+ description = &quot;&quot;;
}
public void setLong(long data) {
@@ -651,7 +657,7 @@ public class MyData2 {
</div>
<p>For example:</p>
<a id="java_dbt12"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.tuple.TupleInput;
@@ -706,7 +712,7 @@ public class MyTupleBinding extends TupleBinding {
</div>
<p>For example:</p>
<a id="java_dbt13"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.db.DatabaseEntry;
@@ -718,7 +724,7 @@ TupleBinding keyBinding = new MyTupleBinding();
MyData2 theKeyData = new MyData2();
theKeyData.setLong(123456789l);
theKeyData.setDouble(new Double(12345.6789));
-theKeyData.setString("My key data");
+theKeyData.setString(&quot;My key data&quot;);
DatabaseEntry myKey = new DatabaseEntry();
diff --git a/db/docs/gsg/JAVA/btree.html b/db/docs/gsg/JAVA/btree.html
index 5deb0fa36..fc2545ee2 100644
--- a/db/docs/gsg/JAVA/btree.html
+++ b/db/docs/gsg/JAVA/btree.html
@@ -305,7 +305,7 @@
to support sorted duplicate records:
</p>
<a id="java_btree_dupsort"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import java.io.FileNotFoundException;
@@ -328,12 +328,12 @@ try {
myDbConfig.setSortedDuplicates(true);
// Open the database
- myDb = new Database("mydb.db", null, myDbConfig);
+ myDb = new Database(&quot;mydb.db&quot;, null, myDbConfig);
} catch(DatabaseException dbe) {
- System.err.println("MyDbs: " + dbe.toString());
+ System.err.println(&quot;MyDbs: &quot; + dbe.toString());
System.exit(-1);
} catch(FileNotFoundException fnfe) {
- System.err.println("MyDbs: " + fnfe.toString());
+ System.err.println(&quot;MyDbs: &quot; + fnfe.toString());
System.exit(-1);
} </pre>
</div>
@@ -381,7 +381,7 @@ try {
do not sort well when viewed as byte strings. There are
several solutions to this problem, one being to provide a
custom comparison function. See
- <a href="http://www.sleepycat.com/docs/ref/am_misc/faq.html" target="_top">http://www.sleepycat.com/docs/ref/am_misc/faq.html</a>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_misc/faq.html" target="_top">http://www.oracle.com/technology/documentation/berkeley-db/db/ref/am_misc/faq.html</a>
for more information.
</p>
</li>
@@ -464,7 +464,7 @@ try {
following:
</p>
<a id="java_btree1"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import java.util.Comparator;
@@ -486,7 +486,7 @@ public class MyDataComparator implements Comparator {
To use this comparator:
</p>
<a id="java_btree2"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import java.io.FileNotFoundException;
import java.util.Comparator;
@@ -508,7 +508,7 @@ try {
// Open the database that you will use to store your data
myDbConfig.setSortedDuplicates(true);
- myDatabase = new Database("myDb", null, myDbConfig);
+ myDatabase = new Database(&quot;myDb&quot;, null, myDbConfig);
} catch (DatabaseException dbe) {
// Exception handling goes here
} catch (FileNotFoundException fnfe) {
diff --git a/db/docs/gsg/JAVA/concepts.html b/db/docs/gsg/JAVA/concepts.html
index 8404051db..161e6a25b 100644
--- a/db/docs/gsg/JAVA/concepts.html
+++ b/db/docs/gsg/JAVA/concepts.html
@@ -42,7 +42,7 @@
Conceptually, DB databases contain <span class="emphasis"><em>records</em></span>.
Logically each record represents a single entry in the database.
Each such record contains two pieces of information: a key and a data.
- This manual will on occaison describe a <span class="emphasis"><em>a record's
+ This manual will on occasion describe a <span class="emphasis"><em>a record's
key</em></span> or a <span class="emphasis"><em>record's data</em></span> when it is
necessary to speak to one or the other portion of a database
record.
diff --git a/db/docs/gsg/JAVA/coredbclose.html b/db/docs/gsg/JAVA/coredbclose.html
index 29908b785..6ded493dc 100644
--- a/db/docs/gsg/JAVA/coredbclose.html
+++ b/db/docs/gsg/JAVA/coredbclose.html
@@ -9,7 +9,7 @@
<link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
<link rel="up" href="DB.html" title="Chapter 2. Databases" />
<link rel="previous" href="DB.html" title="Chapter 2. Databases" />
- <link rel="next" href="db_config.html" title="Database Properties" />
+ <link rel="next" href="DBConfig.html" title="Database Properties" />
</head>
<body>
<div class="navheader">
@@ -20,7 +20,7 @@
<tr>
<td width="20%" align="left"><a accesskey="p" href="DB.html">Prev</a> </td>
<th width="60%" align="center">Chapter 2. Databases</th>
- <td width="20%" align="right"> <a accesskey="n" href="db_config.html">Next</a></td>
+ <td width="20%" align="right"> <a accesskey="n" href="DBConfig.html">Next</a></td>
</tr>
</table>
<hr />
@@ -88,7 +88,7 @@ try {
<td width="20%" align="center">
<a accesskey="u" href="DB.html">Up</a>
</td>
- <td width="40%" align="right"> <a accesskey="n" href="db_config.html">Next</a></td>
+ <td width="40%" align="right"> <a accesskey="n" href="DBConfig.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 2. Databases </td>
diff --git a/db/docs/gsg/JAVA/cursorJavaUsage.html b/db/docs/gsg/JAVA/cursorJavaUsage.html
index 59ea0e5ed..c75134a34 100644
--- a/db/docs/gsg/JAVA/cursorJavaUsage.html
+++ b/db/docs/gsg/JAVA/cursorJavaUsage.html
@@ -80,7 +80,7 @@
<p>The full implementation of <tt class="classname">ExampleDatabaseRead</tt>
can be found in:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
@@ -88,12 +88,12 @@
<div class="example">
<a id="EDR"></a>
<p class="title">
- <b>Example 4.1 ExampleDatabaseRead.java</b>
+ <b>Example 4.1 ExampleDatabaseRead.java</b>
</p>
<p>To begin, we import the necessary classes:</p>
<a id="java_cursor10"></a>
<pre class="programlisting">// file ExampleDatabaseRead.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
import java.io.File;
import java.io.IOException;
@@ -113,7 +113,7 @@ import com.sleepycat.db.OperationStatus;</pre>
<a id="java_cursor11"></a>
<pre class="programlisting">public class ExampleDatabaseRead {
- private static String myDbsPath = "./";
+ private static String myDbsPath = &quot;./&quot;;
// Encapsulates the database environment and databases.
private static MyDbs myDbs = new MyDbs();
@@ -129,8 +129,8 @@ import com.sleepycat.db.OperationStatus;</pre>
</p>
<a id="java_cursor12"></a>
<pre class="programlisting"> private static void usage() {
- System.out.println("ExampleDatabaseRead [-h &lt;env directory&gt;]" +
- "[-s &lt;item to locate&gt;]");
+ System.out.println(&quot;ExampleDatabaseRead [-h &lt;env directory&gt;]&quot; +
+ &quot;[-s &lt;item to locate&gt;]&quot;);
System.exit(-1);
}
@@ -139,12 +139,12 @@ import com.sleepycat.db.OperationStatus;</pre>
try {
edr.run(args);
} catch (DatabaseException dbe) {
- System.err.println("ExampleDatabaseRead: " + dbe.toString());
+ System.err.println(&quot;ExampleDatabaseRead: &quot; + dbe.toString());
dbe.printStackTrace();
} finally {
myDbs.close();
}
- System.out.println("All done.");
+ System.out.println(&quot;All done.&quot;);
}</pre>
<p>In <tt class="methodname">ExampleDatabaseRead.run()</tt>, we call <tt class="methodname">MyDbs.setup()</tt> to
open our databases. Then we create the bindings that we need for using our data objects with
@@ -187,7 +187,7 @@ import com.sleepycat.db.OperationStatus;</pre>
displayInventoryRecord(foundKey, theInventory);
}
} catch (Exception e) {
- System.err.println("Error on inventory cursor:");
+ System.err.println(&quot;Error on inventory cursor:&quot;);
System.err.println(e.toString());
e.printStackTrace();
} finally {
@@ -206,40 +206,40 @@ import com.sleepycat.db.OperationStatus;</pre>
Inventory theInventory)
throws DatabaseException {
- String theSKU = new String(theKey.getData());
- System.out.println(theSKU + ":");
- System.out.println("\t " + theInventory.getItemName());
- System.out.println("\t " + theInventory.getCategory());
- System.out.println("\t " + theInventory.getVendor());
- System.out.println("\t\tNumber in stock: " +
+ String theSKU = new String(theKey.getData(), &quot;UTF-8&quot;);
+ System.out.println(theSKU + &quot;:&quot;);
+ System.out.println(&quot;\t &quot; + theInventory.getItemName());
+ System.out.println(&quot;\t &quot; + theInventory.getCategory());
+ System.out.println(&quot;\t &quot; + theInventory.getVendor());
+ System.out.println(&quot;\t\tNumber in stock: &quot; +
theInventory.getVendorInventory());
- System.out.println("\t\tPrice per unit: " +
+ System.out.println(&quot;\t\tPrice per unit: &quot; +
theInventory.getVendorPrice());
- System.out.println("\t\tContact: ");
+ System.out.println(&quot;\t\tContact: &quot;);
DatabaseEntry searchKey = null;
try {
searchKey =
- new DatabaseEntry(theInventory.getVendor().getBytes("UTF-8"));
+ new DatabaseEntry(theInventory.getVendor().getBytes(&quot;UTF-8&quot;));
} catch (IOException willNeverOccur) {}
DatabaseEntry foundVendor = new DatabaseEntry();
if (myDbs.getVendorDB().get(null, searchKey, foundVendor,
LockMode.DEFAULT) != OperationStatus.SUCCESS) {
- System.out.println("Could not find vendor: " +
- theInventory.getVendor() + ".");
+ System.out.println(&quot;Could not find vendor: &quot; +
+ theInventory.getVendor() + &quot;.&quot;);
System.exit(-1);
} else {
Vendor theVendor =
(Vendor)vendorBinding.entryToObject(foundVendor);
- System.out.println("\t\t " + theVendor.getAddress());
- System.out.println("\t\t " + theVendor.getCity() + ", " +
- theVendor.getState() + " " + theVendor.getZipcode());
- System.out.println("\t\t Business Phone: " +
+ System.out.println(&quot;\t\t &quot; + theVendor.getAddress());
+ System.out.println(&quot;\t\t &quot; + theVendor.getCity() + &quot;, &quot; +
+ theVendor.getState() + &quot; &quot; + theVendor.getZipcode());
+ System.out.println(&quot;\t\t Business Phone: &quot; +
theVendor.getBusinessPhoneNumber());
- System.out.println("\t\t Sales Rep: " +
+ System.out.println(&quot;\t\t Sales Rep: &quot; +
theVendor.getRepName());
- System.out.println("\t\t " +
+ System.out.println(&quot;\t\t &quot; +
theVendor.getRepPhoneNumber());
}
}</pre>
@@ -248,7 +248,7 @@ import com.sleepycat.db.OperationStatus;</pre>
document, this is relatively uninteresting. You can see how this is
implemented by looking at:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
diff --git a/db/docs/gsg/JAVA/dbErrorReporting.html b/db/docs/gsg/JAVA/dbErrorReporting.html
index d36831daf..261db41fb 100644
--- a/db/docs/gsg/JAVA/dbErrorReporting.html
+++ b/db/docs/gsg/JAVA/dbErrorReporting.html
@@ -93,7 +93,7 @@
handler, first implement the handler:
</p>
<a id="java_db10"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Environment;
import com.sleepycat.db.MessageHandler;
@@ -114,7 +114,7 @@ public class MyMessageHandler implements MessageHandler {
it on the database's <tt class="classname">DatabaseConfig</tt> object:
</p>
<a id="java_db11"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseConfig;
diff --git a/db/docs/gsg/JAVA/dbconfig.html b/db/docs/gsg/JAVA/dbconfig.html
index 51454bca2..cf7d93bbe 100644
--- a/db/docs/gsg/JAVA/dbconfig.html
+++ b/db/docs/gsg/JAVA/dbconfig.html
@@ -108,8 +108,7 @@
applications use BTree. For this reason, where configuration issues are
dependent on the type of access method in use, this chapter will focus on
BTree only. For configuration descriptions surrounding the other access
- methods, see the <i class="citetitle">Berkeley DB Programmer's Tutorial and Reference
- Guide</i>.
+ methods, see the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -274,8 +273,8 @@
method, or use the <tt class="literal">db_stat</tt> command line utility.
- The number of locks that could not be obtained due to conflicts is
- held in the lock statistic's <tt class="literal">st_nconflicts</tt> field.
+ The number of unavailable locks that your application waited for is
+ held in the lock statistic's <tt class="literal">st_lock_wait</tt> field.
</p>
</div>
@@ -339,7 +338,7 @@
filesystem's block size causes DB to write pages in block
size increments. As a result, it is possible for a partial page
to be written as the result of a transactional commit. For more
- information, see <a href="http://www.sleepycat.com/docs/ref/transapp/reclimit.html" target="_top">http://www.sleepycat.com/docs/ref/transapp/reclimit.html</a>.
+ information, see <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/reclimit.html" target="_top">http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/reclimit.html</a>.
</p>
</div>
</div>
diff --git a/db/docs/gsg/JAVA/dbtJavaUsage.html b/db/docs/gsg/JAVA/dbtJavaUsage.html
index 191aa5252..69d46266d 100644
--- a/db/docs/gsg/JAVA/dbtJavaUsage.html
+++ b/db/docs/gsg/JAVA/dbtJavaUsage.html
@@ -44,7 +44,7 @@
Again, remember that you can find the complete implementation for these functions
in:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
@@ -79,7 +79,7 @@
</p>
<a id="java_dbt16"></a>
<pre class="programlisting">// File Inventory.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
public class Inventory {
@@ -135,7 +135,7 @@ public class Inventory {
</p>
<a id="java_dbt17"></a>
<pre class="programlisting">// File Vendor.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
import java.io.Serializable;
@@ -184,8 +184,7 @@ public class Vendor implements Serializable {
...
// Corresponding getter methods omitted for brevity.
- // See examples/com/sleepycat/examples/je/gettingStarted/
- // examples/Vendor.java
+ // See examples/je/gettingStarted/Vendor.java
// for a complete implementation of this class.
} </pre>
@@ -202,7 +201,7 @@ public class Vendor implements Serializable {
</p>
<a id="java_dbt18"></a>
<pre class="programlisting">// File InventoryBinding.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.tuple.TupleInput;
@@ -320,7 +319,7 @@ public class InventoryBinding extends TupleBinding {
</p>
<a id="java_dbt19"></a>
<pre class="programlisting">// File: MyDbs.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
<b class="userinput"><tt>import com.sleepycat.bind.serial.StoredClassCatalog;</tt></b>
@@ -346,9 +345,9 @@ import java.io.FileNotFoundException; </pre>
// Needed for object serialization
private StoredClassCatalog classCatalog;</tt></b>
- private String vendordb = "VendorDB.db";
- private String inventorydb = "InventoryDB.db";
- <b class="userinput"><tt>private String classcatalogdb = "ClassCatalogDB.db";</tt></b>
+ private String vendordb = &quot;VendorDB.db&quot;;
+ private String inventorydb = &quot;InventoryDB.db&quot;;
+ <b class="userinput"><tt>private String classcatalogdb = &quot;ClassCatalogDB.db&quot;;</tt></b>
// Our constructor does nothing
public MyDbs() {} </pre>
@@ -371,25 +370,25 @@ import java.io.FileNotFoundException; </pre>
// Now open, or create and open, our databases
// Open the vendors and inventory databases
try {
- vendordb = databasesHome + "/" + vendordb;
+ vendordb = databasesHome + &quot;/&quot; + vendordb;
vendorDb = new Database(vendordb,
null,
myDbConfig);
- inventorydb = databasesHome + "/" + inventorydb;
+ inventorydb = databasesHome + &quot;/&quot; + inventorydb;
inventoryDb = new Database(inventorydb,
null,
myDbConfig);
<b class="userinput"><tt>// Open the class catalog db. This is used to
// optimize class serialization.
- classcatalogdb = databasesHome + "/" + classcatalogdb;
+ classcatalogdb = databasesHome + &quot;/&quot; + classcatalogdb;
classCatalogDb = new Database(classcatalogdb,
null,
myDbConfig); </tt></b>
} catch(FileNotFoundException fnfe) {
- System.err.println("MyDbs: " + fnfe.toString());
+ System.err.println(&quot;MyDbs: &quot; + fnfe.toString());
System.exit(-1);
}
} </pre>
@@ -435,7 +434,7 @@ import java.io.FileNotFoundException; </pre>
classCatalogDb.close();
}</tt></b>
} catch(DatabaseException dbe) {
- System.err.println("Error closing MyDbs: " +
+ System.err.println(&quot;Error closing MyDbs: &quot; +
dbe.toString());
System.exit(-1);
}
@@ -460,7 +459,7 @@ import java.io.FileNotFoundException; </pre>
<p>First we need the usual series of import statements:</p>
<a id="java_dbt24"></a>
<pre class="programlisting">// File: ExampleDatabaseLoad.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
import java.io.BufferedReader;
import java.io.File;
@@ -469,6 +468,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
+import java.util.List;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
@@ -491,9 +491,9 @@ import com.sleepycat.db.DatabaseException; </pre>
<a id="java_dbt25"></a>
<pre class="programlisting">public class ExampleDatabaseLoad {
- private static String myDbsPath = "./";
- private static File inventoryFile = new File("./inventory.txt");
- private static File vendorsFile = new File("./vendors.txt");
+ private static String myDbsPath = &quot;./&quot;;
+ private static File inventoryFile = new File(&quot;./inventory.txt&quot;);
+ private static File vendorsFile = new File(&quot;./vendors.txt&quot;);
// DatabaseEntries used for loading records
private static DatabaseEntry theKey = new DatabaseEntry();
@@ -517,8 +517,8 @@ import com.sleepycat.db.DatabaseException; </pre>
handles for you.</p>
<a id="java_dbt26"></a>
<pre class="programlisting"> private static void usage() {
- System.out.println("ExampleDatabaseLoad [-h &lt;database home&gt;]");
- System.out.println(" [-s &lt;selections file&gt;] [-v &lt;vendors file&gt;]");
+ System.out.println(&quot;ExampleDatabaseLoad [-h &lt;database home&gt;]&quot;);
+ System.out.println(&quot; [-s &lt;selections file&gt;] [-v &lt;vendors file&gt;]&quot;);
System.exit(-1);
}
@@ -527,15 +527,15 @@ import com.sleepycat.db.DatabaseException; </pre>
try {
edl.run(args);
} catch (DatabaseException dbe) {
- System.err.println("ExampleDatabaseLoad: " + dbe.toString());
+ System.err.println(&quot;ExampleDatabaseLoad: &quot; + dbe.toString());
dbe.printStackTrace();
} catch (Exception e) {
- System.out.println("Exception: " + e.toString());
+ System.out.println(&quot;Exception: &quot; + e.toString());
e.printStackTrace();
} finally {
myDbs.close();
}
- System.out.println("All done.");
+ System.out.println(&quot;All done.&quot;);
} </pre>
<p>Next we write the <tt class="methodname">ExampleDatabaseLoad.run()</tt>
method. This method is responsible for initializing all objects.
@@ -551,9 +551,9 @@ import com.sleepycat.db.DatabaseException; </pre>
myDbs.setup(myDbsPath); // path to the environment home
- System.out.println("loading vendors db.");
+ System.out.println(&quot;loading vendors db.&quot;);
loadVendorsDb();
- System.out.println("loading inventory db.");
+ System.out.println(&quot;loading inventory db.&quot;);
loadInventoryDb();
} </pre>
<p>This next method loads the vendor database. This method
@@ -567,7 +567,7 @@ import com.sleepycat.db.DatabaseException; </pre>
// and loads it into a list for us to work with. The integer
// parameter represents the number of fields expected in the
// file.
- ArrayList vendors = loadFile(vendorsFile, 8);
+ List vendors = loadFile(vendorsFile, 8);
// Now load the data into the database. The vendor's name is the
// key, and the data is a Vendor class object.
@@ -592,7 +592,7 @@ import com.sleepycat.db.DatabaseException; </pre>
// ASSUMES THE VENDOR'S NAME IS UNIQUE!
String vendorName = theVendor.getVendorName();
try {
- theKey = new DatabaseEntry(vendorName.getBytes("UTF-8"));
+ theKey = new DatabaseEntry(vendorName.getBytes(&quot;UTF-8&quot;));
} catch (IOException willNeverOccur) {}
// Convert the Vendor object to a DatabaseEntry object
@@ -614,7 +614,7 @@ import com.sleepycat.db.DatabaseException; </pre>
// and loads it into a list for us to work with. The integer
// parameter represents the number of fields expected in the
// file.
- ArrayList inventoryArray = loadFile(inventoryFile, 6);
+ List inventoryArray = loadFile(inventoryFile, 6);
// Now load the data into the database. The item's sku is the
// key, and the data is an Inventory class object.
@@ -626,7 +626,7 @@ import com.sleepycat.db.DatabaseException; </pre>
String[] sArray = (String[])inventoryArray.get(i);
String sku = sArray[1];
try {
- theKey = new DatabaseEntry(sku.getBytes("UTF-8"));
+ theKey = new DatabaseEntry(sku.getBytes(&quot;UTF-8&quot;));
} catch (IOException willNeverOccur) {}
Inventory theInventory = new Inventory();
@@ -659,8 +659,8 @@ import com.sleepycat.db.DatabaseException; </pre>
// Implementation omitted for brevity.
}
- private ArrayList loadFile(File theFile, int numFields) {
- ArrayList records = new ArrayList();
+ private List loadFile(File theFile, int numFields) {
+ List records = new ArrayList();
// Implementation omitted for brevity.
return records;
}
@@ -673,7 +673,7 @@ import com.sleepycat.db.DatabaseException; </pre>
implemented by looking at <tt class="filename">ExampleDatabaseLoad.java</tt>
in:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
diff --git a/db/docs/gsg/JAVA/environments.html b/db/docs/gsg/JAVA/environments.html
index fa1493eb4..95107b29c 100644
--- a/db/docs/gsg/JAVA/environments.html
+++ b/db/docs/gsg/JAVA/environments.html
@@ -45,7 +45,7 @@
<p>
While environments are frequently not used by applications running in
embedded environments where every byte counts, they will be used by
- virutally any other DB application requiring anything other than
+ virtually any other DB application requiring anything other than
the bare minimum functionality. An <span class="emphasis"><em>environment</em></span> is
essentially an encapsulation of one or more databases. Essentially, you
open an environment and then you open databases in that environment.
@@ -64,7 +64,7 @@
</p>
<p>
It is possible in DB to contain multiple databases in a
- single physical file on disk. This is desireable for those
+ single physical file on disk. This is desirable for those
application that open more than a few handful of databases.
However, in order to have more than one database contained in
a single physical file, your application
@@ -116,15 +116,16 @@
obtain a high-degree of recoverability in the face of an
application or system crash. Once enabled, the logging subsystem
allows the application to perform two kinds of recovery
- ("normal" and "catastrophic") through the use of the information
+ (&quot;normal&quot; and &quot;catastrophic&quot;) through the use of the information
contained in the log files.
</p>
</li>
</ul>
</div>
<p>
- All of these topics are described in the <i class="citetitle">Berkeley DB
- Programmer's Reference Guide</i>.
+ For more information on these topics, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide and the
+ <i class="citetitle">Berkeley DB Getting Started with Replicated Applications</i> guide.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/JAVA/gettingit.html b/db/docs/gsg/JAVA/gettingit.html
index c722aefce..c84496093 100644
--- a/db/docs/gsg/JAVA/gettingit.html
+++ b/db/docs/gsg/JAVA/gettingit.html
@@ -35,8 +35,8 @@
<div></div>
</div>
<p>
- You can obtain DB by visiting the Sleepycat download page:
- <a href="http://www.sleepycat.com/download/index.shtml" target="_top">http://www.sleepycat.com/download/index.shtml</a>.
+ You can obtain DB by visiting the Berkeley DB download page:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/db/index.html</a>.
</p>
<p>
To install DB, untar or unzip the distribution to the directory of
@@ -49,9 +49,9 @@
</p>
<p>
That page also contains links to more documentation for DB. In
- particular, you will find links for the <i class="citetitle">Berkeley DB
- Programmer's Tutorial and Reference Guide</i> as
- well as the API reference documentation.
+ particular, you will find links for the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ as well as the API reference documentation.
</p>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/JAVA/index.html b/db/docs/gsg/JAVA/index.html
index 19c6ddde8..8e7bfdf61 100644
--- a/db/docs/gsg/JAVA/index.html
+++ b/db/docs/gsg/JAVA/index.html
@@ -27,7 +27,7 @@
<div class="titlepage">
<div>
<div>
- <h1 class="title"><a id="id2766488"></a>Getting Started with Berkeley DB</h1>
+ <h1 class="title"><a id="id650925"></a>Getting Started with Berkeley DB</h1>
</div>
<div>
<div class="legalnotice">
@@ -35,15 +35,21 @@
<b>Legal Notice</b>
</p>
<p>
- This documentation is distributed under the terms of the Sleepycat
- public license. You may review the terms of this license at:
- <a href="http://www.sleepycat.com/download/oslicense.html" target="_top">http://www.sleepycat.com/download/oslicense.html</a>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
</p>
<p>
- Sleepycat Software, Berkeley DB, Berkeley DB XML and the Sleepycat logo
- are trademarks or service marks of Sleepycat Software, Inc. All rights to
- these marks are reserved. No third-party use is permitted without the
- express prior written consent of Sleepycat Software, Inc.
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
</p>
<p>
<span class="trademark">Java</span>&#8482; and all Java-based marks are a trademark
@@ -51,13 +57,16 @@
Inc, in the United States and other countries.
</p>
<p>
- To obtain a copy of this document's original source code, please write
- to <tt class="email">&lt;<a href="mailto:support@sleepycat.com">support@sleepycat.com</a>&gt;</tt>.
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
</p>
</div>
</div>
<div>
- <p class="pubdate">9/22/2004</p>
+ <p class="pubdate">9/20/2006</p>
</div>
</div>
<div></div>
@@ -80,6 +89,15 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</dd>
<dt>
@@ -169,7 +187,7 @@
</dt>
<dt>
<span class="sect1">
- <a href="db_config.html">Database Properties</a>
+ <a href="DBConfig.html">Database Properties</a>
</span>
</dt>
<dt>
@@ -249,7 +267,7 @@
</dt>
<dt>
<span class="sect2">
- <a href="bindAPI.html#object2dbt">Serializeable Complex Objects</a>
+ <a href="bindAPI.html#object2dbt">Serializable Complex Objects</a>
</span>
</dt>
<dt>
@@ -477,7 +495,7 @@
<dt>3.3. <a href="dbtJavaUsage.html#InventoryJavaBinding">InventoryBinding.java</a></dt>
<dt>3.4. <a href="dbtJavaUsage.html#dbsStoredClass">Stored Class Catalog Management with MyDbs</a></dt>
<dt>3.5. <a href="dbtJavaUsage.html#EDL">ExampleDatabaseLoad.java</a></dt>
- <dt>4.1. <a href="cursorJavaUsage.html#EDR"> ExampleDatabaseRead.java</a></dt>
+ <dt>4.1. <a href="cursorJavaUsage.html#EDR">ExampleDatabaseRead.java</a></dt>
<dt>5.1. <a href="javaindexusage.html#ItemNameKeyCreator-Java">ItemNameKeyCreator.java</a></dt>
<dt>5.2. <a href="javaindexusage.html#mydbsSecondary">SecondaryDatabase Management with MyDbs</a></dt>
<dt>5.3. <a href="javaindexusage.html#secondaryWithEDR">SecondaryDatabase usage with ExampleDatabaseRead</a></dt>
diff --git a/db/docs/gsg/JAVA/indexes.html b/db/docs/gsg/JAVA/indexes.html
index 4c2af490c..59182ab2e 100644
--- a/db/docs/gsg/JAVA/indexes.html
+++ b/db/docs/gsg/JAVA/indexes.html
@@ -259,6 +259,13 @@
</li>
</ul>
</div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Primary databases <span class="emphasis"><em>must not</em></span> support duplicate records.
+ Secondary records point to primary records using the primary key, so that key must be unique.
+ </p>
+ </div>
<p>So to open (create) a secondary database, you:</p>
<div class="orderedlist">
<ol type="1">
@@ -283,7 +290,7 @@
</div>
<p>For example:</p>
<a id="java_index1"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.db.Database;
@@ -311,7 +318,7 @@ mySecConfig.setSortedDuplicates(true);
Database myDb = null;
SecondaryDatabase mySecDb = null;
try {
- String dbName = "myPrimaryDatabase";
+ String dbName = &quot;myPrimaryDatabase&quot;;
myDb = new Database(dbName, null, myDbConfig);
@@ -328,7 +335,7 @@ try {
mySecConfig.setKeyCreator(keyCreator);
// Perform the actual open
- String secDbName = "mySecondaryDatabase";
+ String secDbName = &quot;mySecondaryDatabase&quot;;
mySecDb = new SecondaryDatabase(secDbName, null, myDb, mySecConfig);
} catch (DatabaseException de) {
// Exception handling goes here ...
diff --git a/db/docs/gsg/JAVA/introduction.html b/db/docs/gsg/JAVA/introduction.html
index f9ec3edec..fad63309c 100644
--- a/db/docs/gsg/JAVA/introduction.html
+++ b/db/docs/gsg/JAVA/introduction.html
@@ -101,7 +101,7 @@
</dl>
</div>
<p>
- Welcome to Sleepycat's Berkeley DB (DB). DB is a general-purpose embedded
+ Welcome to Berkeley DB (DB). DB is a general-purpose embedded
database engine that is capable of providing a wealth of data management services.
It is designed from the ground up for high-throughput applications requiring
in-process, bullet-proof management of mission-critical data. DB can
@@ -137,7 +137,7 @@
as to ensure that data is never left in an inconsistent state for any
reason (such as software bugs or hardware failures). For those
applications, a transaction subsystem can be enabled and used to
- transactionally protect database writes.
+ transactional-protect database writes.
</p>
<p>
The list of operating systems on which DB is available is too long to
@@ -145,8 +145,8 @@
operating systems, as well as on many embedded platforms.
</p>
<p>
- Finally, DB is available in a wealth of programming languages. Sleepycat
- officially supports DB in C, C++, and Java, but the library is also
+ Finally, DB is available in a wealth of programming languages.
+ DB is officially supported in C, C++, and Java, but the library is also
available in many other languages, especially scripting languages such as
Perl and Python.
</p>
@@ -199,7 +199,7 @@
addition to being presented in this book, these final programs are also
available in the DB software distribution. You can find them in
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the
location where you placed your DB distribution.
diff --git a/db/docs/gsg/JAVA/javaindexusage.html b/db/docs/gsg/JAVA/javaindexusage.html
index 08c269405..ddb17114d 100644
--- a/db/docs/gsg/JAVA/javaindexusage.html
+++ b/db/docs/gsg/JAVA/javaindexusage.html
@@ -72,13 +72,13 @@
<p>In our key creator class, we make use of a custom tuple binding
called <tt class="classname">InventoryBinding</tt>. This class is described in <a href="dbtJavaUsage.html#InventoryJavaBinding">InventoryBinding.java</a>.</p>
<p>You can find <tt class="filename">InventoryBinding.java</tt> in: </p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
</p>
<a id="java_index11"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
@@ -104,18 +104,13 @@ public class ItemNameKeyCreator implements SecondaryKeyCreator {
DatabaseEntry resultEntry) // set the key data on this.
throws DatabaseException {
- if (dataEntry == null) {
- throw new DatabaseException("Missing primary record data " +
- "in key creator.");
- }
-
try {
// Convert dataEntry to an Inventory object
Inventory inventoryItem =
(Inventory) theBinding.entryToObject(dataEntry);
// Get the item name and use that as the key
String theItem = inventoryItem.getItemName();
- resultEntry.setData(theItem.getBytes("UTF-8"));
+ resultEntry.setData(theItem.getBytes(&quot;UTF-8&quot;));
} catch (IOException willNeverOccur) {}
return true;
@@ -154,7 +149,7 @@ public class ItemNameKeyCreator implements SecondaryKeyCreator {
</p>
<a id="java_index12"></a>
<pre class="programlisting">// File MyDbs.java
-package com.sleepycat.examples.db.GettingStarted;
+package db.GettingStarted;
import java.io.FileNotFoundException;
@@ -175,10 +170,10 @@ public class MyDbs {
private Database classCatalogDb = null;
<b class="userinput"><tt>private SecondaryDatabase itemNameIndexDb = null;</tt></b>
- private String vendordb = "VendorDB.db";
- private String inventorydb = "InventoryDB.db";
- private String classcatalogdb = "ClassCatalogDB.db";
- <b class="userinput"><tt>private String itemnameindexdb = "ItemNameIndexDB.db";</tt></b>
+ private String vendordb = &quot;VendorDB.db&quot;;
+ private String inventorydb = &quot;InventoryDB.db&quot;;
+ private String classcatalogdb = &quot;ClassCatalogDB.db&quot;;
+ <b class="userinput"><tt>private String itemnameindexdb = &quot;ItemNameIndexDB.db&quot;;</tt></b>
// Needed for object serialization
private StoredClassCatalog classCatalog;
@@ -202,8 +197,8 @@ public class MyDbs {
myDbConfig.setErrorStream(System.err);
<b class="userinput"><tt>mySecConfig.setErrorStream(System.err);</tt></b>
- myDbConfig.setErrorPrefix("MyDbs");
- <b class="userinput"><tt>mySecConfig.setErrorPrefix("MyDbs");</tt></b>
+ myDbConfig.setErrorPrefix(&quot;MyDbs&quot;);
+ <b class="userinput"><tt>mySecConfig.setErrorPrefix(&quot;MyDbs&quot;);</tt></b>
myDbConfig.setType(DatabaseType.BTREE);
<b class="userinput"><tt>mySecConfig.setType(DatabaseType.BTREE);</tt></b>
myDbConfig.setAllowCreate(true);
@@ -212,24 +207,24 @@ public class MyDbs {
// Now open, or create and open, our databases
// Open the vendors and inventory databases
try {
- vendordb = databasesHome + "/" + vendordb;
+ vendordb = databasesHome + &quot;/&quot; + vendordb;
vendorDb = new Database(vendordb,
null,
myDbConfig);
- inventorydb = databasesHome + "/" + inventorydb;
+ inventorydb = databasesHome + &quot;/&quot; + inventorydb;
inventoryDb = new Database(inventorydb,
null,
myDbConfig);
// Open the class catalog db. This is used to
// optimize class serialization.
- classcatalogdb = databasesHome + "/" + classcatalogdb;
+ classcatalogdb = databasesHome + &quot;/&quot; + classcatalogdb;
classCatalogDb = new Database(classcatalogdb,
null,
myDbConfig);
} catch(FileNotFoundException fnfe) {
- System.err.println("MyDbs: " + fnfe.toString());
+ System.err.println(&quot;MyDbs: &quot; + fnfe.toString());
System.exit(-1);
}
@@ -257,13 +252,13 @@ public class MyDbs {
mySecConfig.setKeyCreator(keyCreator);
// Now open it
try {
- itemnameindexdb = databasesHome + "/" + itemnameindexdb;
+ itemnameindexdb = databasesHome + &quot;/&quot; + itemnameindexdb;
itemNameIndexDb = new SecondaryDatabase(itemnameindexdb,
null,
inventoryDb,
mySecConfig);
} catch(FileNotFoundException fnfe) {
- System.err.println("MyDbs: " + fnfe.toString());
+ System.err.println(&quot;MyDbs: &quot; + fnfe.toString());
System.exit(-1);
}</tt></b>
}
@@ -300,7 +295,7 @@ public class MyDbs {
}
} catch(DatabaseException dbe) {
- System.err.println("Error closing MyDbs: " +
+ System.err.println(&quot;Error closing MyDbs: &quot; +
dbe.toString());
System.exit(-1);
}
@@ -309,7 +304,7 @@ public class MyDbs {
<p>That completes our update to <tt class="classname">MyDbs</tt>. You
can find the complete class implementation in:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
@@ -348,7 +343,7 @@ public class MyDbs {
to seek to the item name key and then display all matching records.
</p>
<p>Remember that you can find <tt class="filename">ExampleDatabaseRead.java</tt> in: </p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
@@ -362,7 +357,7 @@ public class MyDbs {
First we need to import an additional class in order to use the secondary cursor:
</p>
<a id="java_index16"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import java.io.IOException;
@@ -379,7 +374,7 @@ import com.sleepycat.db.OperationStatus;
<a id="java_index17"></a>
<pre class="programlisting"> public class ExampleDatabaseRead {
- private static String myDbsPath = "./";
+ private static String myDbsPath = &quot;./&quot;;
// Encapsulates the database environment and databases.
private static MyDbs myDbs = new MyDbs();
@@ -426,7 +421,7 @@ import com.sleepycat.db.OperationStatus;
// searchKey is the key that we want to find in the
// secondary db.
DatabaseEntry searchKey =
- new DatabaseEntry(locateItem.getBytes("UTF-8"));
+ new DatabaseEntry(locateItem.getBytes(&quot;UTF-8&quot;));
// foundKey and foundData are populated from the primary
// entry that is associated with the secondary db key.
@@ -452,7 +447,7 @@ import com.sleepycat.db.OperationStatus;
foundData, LockMode.DEFAULT);
}
} catch (Exception e) {
- System.err.println("Error on inventory secondary cursor:");
+ System.err.println(&quot;Error on inventory secondary cursor:&quot;);
System.err.println(e.toString());
e.printStackTrace();
} finally {
@@ -467,7 +462,7 @@ import com.sleepycat.db.OperationStatus;
line switch. To see how this is done, see
<tt class="filename">ExampleDatabaseRead.java</tt> in:
</p>
- <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/com/sleepycat/examples/db/GettingStarted</pre>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/db/GettingStarted</pre>
<p>
where <tt class="literal"><span class="emphasis"><em>DB_INSTALL</em></span></tt> is the location where you
placed your DB distribution.
diff --git a/db/docs/gsg/JAVA/joins.html b/db/docs/gsg/JAVA/joins.html
index a22619540..15a0654e3 100644
--- a/db/docs/gsg/JAVA/joins.html
+++ b/db/docs/gsg/JAVA/joins.html
@@ -36,7 +36,7 @@
</div>
<p>
If you have two or more secondary databases associated with a primary
- database, then you can retrieve primary records based on the union of
+ database, then you can retrieve primary records based on the intersection of
multiple secondary entries. You do this using a
<span><tt class="classname">JoinCursor</tt>.</span>
@@ -56,7 +56,7 @@
is fairly simple with a limited
number of data members, few of which would be interesting from a query
perspective. But suppose, instead, that we were storing
- information on something with many more queryable characteristics, such
+ information on something with many more characteristics that can be queried, such
as an automobile. In that case, you may be storing information such as
color, number of doors, fuel mileage, automobile type, number of
passengers, make, model, and year, to name just a few.
@@ -145,7 +145,8 @@
<li>
<p>
Create an array of <span>secondary</span> cursors, and place in it each
- of the cursors that are participating in your join query.
+ of the cursors that are participating in your join query. Note that this array must be null
+ terminated.
</p>
</li>
<li>
@@ -185,7 +186,7 @@
</p>
<a id="java_index9"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseEntry;
@@ -211,9 +212,9 @@ SecondaryDatabase automotiveTypeDB = null;
SecondaryDatabase automotiveMakeDB = null;
// Query strings:
-String theColor = "red";
-String theType = "minivan";
-String theMake = "Toyota";
+String theColor = &quot;red&quot;;
+String theType = &quot;minivan&quot;;
+String theMake = &quot;Toyota&quot;;
// Secondary cursors used for the query:
SecondaryCursor colorSecCursor = null;
@@ -232,9 +233,9 @@ DatabaseEntry foundData = new DatabaseEntry();
try {
// Database entries used for the query:
- DatabaseEntry color = new DatabaseEntry(theColor.getBytes("UTF-8"));
- DatabaseEntry type = new DatabaseEntry(theType.getBytes("UTF-8"));
- DatabaseEntry make = new DatabaseEntry(theMake.getBytes("UTF-8"));
+ DatabaseEntry color = new DatabaseEntry(theColor.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry type = new DatabaseEntry(theType.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry make = new DatabaseEntry(theMake.getBytes(&quot;UTF-8&quot;));
colorSecCursor = automotiveColorDB.openSecondaryCursor(null, null);
typeSecCursor = automotiveTypeDB.openSecondaryCursor(null, null);
@@ -257,7 +258,8 @@ try {
// positioned cursors
SecondaryCursor[] cursorArray = {colorSecCursor,
typeSecCursor,
- makeSecCursor};
+ makeSecCursor,
+ null};
// Create the join cursor
joinCursor = automotiveDB.join(cursorArray, null);
@@ -325,7 +327,7 @@ try {
scenario.
</p>
<p>
- Default value is <tt class="literal">false</tt> (automatic cursor sorting is performed).
+ The default value is <tt class="literal">false</tt> (automatic cursor sorting is performed).
</p>
<p>
For example:
diff --git a/db/docs/gsg/JAVA/keyCreator.html b/db/docs/gsg/JAVA/keyCreator.html
index 5eae91890..09f087522 100644
--- a/db/docs/gsg/JAVA/keyCreator.html
+++ b/db/docs/gsg/JAVA/keyCreator.html
@@ -72,8 +72,8 @@
</p>
<p>
One thing to remember when implementing this method is that you will
- need a way to extract the necessary information from the data
- <tt class="classname">DatabaseEntry</tt> and/or the key
+ need a way to extract the necessary information from the data's
+ <tt class="classname">DatabaseEntry</tt> and/or the key's
<tt class="classname">DatabaseEntry</tt> that are provided on calls to this
method. If you are using complex objects, then you are probably using the
Bind APIs to perform this conversion. The easiest thing to do is to
@@ -83,7 +83,7 @@
The Bind APIs are introduced in <a href="bindAPI.html">Using the BIND APIs</a>.
</p>
<p>
- Also, <tt class="methodname">SecondaryKeyCreator.createSecondaryKey()</tt> returns a
+ <tt class="methodname">SecondaryKeyCreator.createSecondaryKey()</tt> returns a
boolean. A return value of <tt class="literal">false</tt> indicates that
no secondary key exists, and therefore no record should be added to the secondary database for that primary record.
If a record already exists in the secondary database, it is deleted.
@@ -93,7 +93,7 @@
for its record data:
</p>
<a id="java_index3"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
public class PersonData {
private String userID;
@@ -133,7 +133,7 @@ public class PersonData {
Then in this case you might create a key creator as follows:
</p>
<a id="java_index4"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.db.SecondaryKeyCreator;
@@ -156,25 +156,19 @@ public class FullNameKeyCreator implements SecondaryKeyCreator {
DatabaseEntry dataEntry,
DatabaseEntry resultEntry) {
- // If the dataEntry parameter is null, then we can
- // not create the key
- if (dataEntry == null) {
- return false;
- } else { // Create the key
- try {
- PersonData pd =
- (PersonData) theBinding.entryToObject(dataEntry);
- String fullName = pd.getFamiliarName() + " " +
+ try {
+ PersonData pd =
+ (PersonData) theBinding.entryToObject(dataEntry);
+ String fullName = pd.getFamiliarName() + &quot; &quot; +
pd.getSurname();
- resultEntry.setData(fullName.getBytes("UTF-8"));
- } catch (IOException willNeverOccur) {}
- }
+ resultEntry.setData(fullName.getBytes(&quot;UTF-8&quot;));
+ } catch (IOException willNeverOccur) {}
return true;
}
} </pre>
<p>Finally, you use this key creator as follows:</p>
<a id="java_index5"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.bind.tuple.TupleBinding;
@@ -201,7 +195,7 @@ try {
mySecConfig.setType(DatabaseType.BTREE);
//Perform the actual open
- String secDbName = "mySecondaryDatabase";
+ String secDbName = &quot;mySecondaryDatabase&quot;;
mySecDb = new SecondaryDatabase(secDbName, null, myDb, mySecConfig);
} catch (DatabaseException de) {
// Exception handling goes here
diff --git a/db/docs/gsg/JAVA/preface.html b/db/docs/gsg/JAVA/preface.html
index 56de76890..afd10d9f0 100644
--- a/db/docs/gsg/JAVA/preface.html
+++ b/db/docs/gsg/JAVA/preface.html
@@ -44,20 +44,29 @@
<a href="preface.html#conventions">Conventions Used in this Book</a>
</span>
</dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</div>
<p>
Welcome to Berkeley DB (DB). This document introduces
- <span>DB, version 4.3. </span>
+ <span>DB, version 4.5. </span>
It is intended
to provide a rapid introduction to the DB API set and related concepts. The goal of this document is
to provide you with an efficient mechanism
with which you can evaluate DB against your project's technical requirements. As such, this document is
intended for <span>Java</span>
developers and senior software architects who are
- looking for an in-process data management solution. No prior experience with Sleepycat technologies is
- expected or required.
+ looking for an in-process data management solution. No prior
+ experience with Berkeley DB is expected or required.
</p>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
@@ -77,14 +86,14 @@
- <span>"The <tt class="methodname">Database()</tt>
- constructor returns a <tt class="classname">Database</tt> class object."</span>
+ <span>&quot;The <tt class="methodname">Database()</tt>
+ constructor returns a <tt class="classname">Database</tt> class object.&quot;</span>
</p>
<p>
- Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: "Go to your
- <span class="emphasis"><em>DB_INSTALL</em></span> directory."
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
</p>
<p>
Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
@@ -109,7 +118,7 @@ import com.sleepycat.db.DatabaseConfig;
// Allow the database to be created.
DatabaseConfig myDbConfig = new DatabaseConfig();
myDbConfig.setAllowCreate(true);
-<b class="userinput"><tt>Database myDb = new Database("mydb.db", null, myDbConfig);</tt></b> </pre>
+<b class="userinput"><tt>Database myDb = new Database(&quot;mydb.db&quot;, null, myDbConfig);</tt></b> </pre>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
@@ -117,6 +126,69 @@ myDbConfig.setAllowCreate(true);
as this.
</p>
</div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/JAVA/index.html" target="_top">
+ Getting Started with Transaction Processing for Java
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/JAVA/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for Java
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/java/index.html" target="_top">
+ Berkeley DB Javadoc
+ </a>
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/collections/tutorial/index.html" target="_top">
+ Berkeley DB Collections Tutorial
+ </a>
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
</div>
</div>
<div class="navfooter">
diff --git a/db/docs/gsg/JAVA/readSecondary.html b/db/docs/gsg/JAVA/readSecondary.html
index be2c6b1b1..e50d31a5f 100644
--- a/db/docs/gsg/JAVA/readSecondary.html
+++ b/db/docs/gsg/JAVA/readSecondary.html
@@ -55,7 +55,7 @@
to a person's full name:
</p>
<a id="java_index6"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.LockMode;
@@ -68,9 +68,9 @@ try {
// Omitting all database opens
...
- String searchName = "John Doe";
+ String searchName = &quot;John Doe&quot;;
DatabaseEntry searchKey =
- new DatabaseEntry(searchName.getBytes("UTF-8"));
+ new DatabaseEntry(searchName.getBytes(&quot;UTF-8&quot;));
DatabaseEntry primaryKey = new DatabaseEntry();
DatabaseEntry primaryData = new DatabaseEntry();
diff --git a/db/docs/gsg/JAVA/secondaryCursor.html b/db/docs/gsg/JAVA/secondaryCursor.html
index 390769d67..49bfa6662 100644
--- a/db/docs/gsg/JAVA/secondaryCursor.html
+++ b/db/docs/gsg/JAVA/secondaryCursor.html
@@ -96,10 +96,9 @@
Then the following searches for a person's
name in the secondary database, and deletes all secondary and primary
records that use that name.
-
</p>
<a id="java_index8"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.LockMode;
@@ -113,9 +112,9 @@ try {
// Database opens omitted for brevity
...
- String secondaryName = "John Doe";
+ String secondaryName = &quot;John Doe&quot;;
DatabaseEntry secondaryKey =
- new DatabaseEntry(secondaryName.getBytes("UTF-8"));
+ new DatabaseEntry(secondaryName.getBytes(&quot;UTF-8&quot;));
DatabaseEntry foundData = new DatabaseEntry();
diff --git a/db/docs/gsg/JAVA/secondaryDelete.html b/db/docs/gsg/JAVA/secondaryDelete.html
index e69ee6dd5..115b65e99 100644
--- a/db/docs/gsg/JAVA/secondaryDelete.html
+++ b/db/docs/gsg/JAVA/secondaryDelete.html
@@ -43,10 +43,10 @@
database and simply allow DB to manage the secondary modifications for you.
</p>
<p>
- However, as a convenience, you can delete a
+ However, as a convenience, you can delete
<tt class="classname">SecondaryDatabase</tt>
- record directly. Doing so causes the associated primary key/data pair to be deleted.
+ records directly. Doing so causes the associated primary key/data pair to be deleted.
This in turn causes DB to delete all
<tt class="classname">SecondaryDatabase</tt>
@@ -71,43 +71,17 @@
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
- <p><tt class="methodname">SecondaryDatabase.delete()</tt> causes the
- previously describe delete operations to occur only if:
- </p>
- <div class="itemizedlist">
- <ul type="disc">
- <li>
- <p>
- the
- <span><tt class="methodname">SecondaryKeyCreator.createSecondaryKey()</tt> method</span>
-
-
- returns
- <tt class="literal">true</tt>
-
- (see <a href="keyCreator.html">Implementing Key
- <span>Creators</span>
-
- </a> for information on this
- <span>interface and method).</span>
-
- </p>
- </li>
- <li>
- <p>
- the primary database is opened for write access.
- </p>
- </li>
- </ul>
- </div>
<p>
- If either of these conditions are not met, then no delete operations can be performed on the secondary
- database.
+ <span><tt class="methodname">SecondaryDatabase.delete()</tt> causes the
+ previously described delete operations to occur
+ </span>
+
+ only if the primary database is opened for write access.
</p>
</div>
<p>For example:</p>
<a id="java_index7"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
@@ -120,11 +94,11 @@ try {
// Omitting all database opens
...
- String searchName = "John Doe";
+ String searchName = &quot;John Doe&quot;;
DatabaseEntry searchKey =
- new DatabaseEntry(searchName.getBytes("UTF-8"));
+ new DatabaseEntry(searchName.getBytes(&quot;UTF-8&quot;));
- // Delete the first secondary record that uses "John Doe" as
+ // Delete the first secondary record that uses &quot;John Doe&quot; as
// a key. This causes the primary record referenced by this secondary
// record to be deleted.
OperationStatus retVal = mySecondaryDatabase.delete(null, searchKey);
diff --git a/db/docs/gsg/JAVA/secondaryProps.html b/db/docs/gsg/JAVA/secondaryProps.html
index b8f119d19..986d9f97d 100644
--- a/db/docs/gsg/JAVA/secondaryProps.html
+++ b/db/docs/gsg/JAVA/secondaryProps.html
@@ -37,7 +37,7 @@
<p>Secondary databases accept <tt class="classname">SecondaryConfig</tt>
objects. <tt class="classname">SecondaryConfig</tt> is a subclass of <tt class="classname">DatabaseConfig</tt>,
so it can manage all of the same properties as does <tt class="classname">DatabaseConfig</tt>.
- See <a href="db_config.html">Database Properties</a> for more information.</p>
+ See <a href="DBConfig.html">Database Properties</a> for more information.</p>
<p>In addition to the <tt class="classname">DatabaseConfig</tt> properties,
<tt class="classname">SecondaryConfig</tt> also allows you to manage the following properties:
</p>
@@ -47,7 +47,7 @@
<p>
<tt class="methodname">SecondaryConfig.setAllowPopulate()</tt>
</p>
- <p>If true, the secondary database can be autopopulated. This means
+ <p>If true, the secondary database can be auto-populated. This means
that on open, if the secondary database is empty then the primary
database is read in its entirety and additions/modifications to the
secondary's records occur automatically.</p>
diff --git a/db/docs/gsg/JAVA/usingDbt.html b/db/docs/gsg/JAVA/usingDbt.html
index dec0c9c32..6d6253699 100644
--- a/db/docs/gsg/JAVA/usingDbt.html
+++ b/db/docs/gsg/JAVA/usingDbt.html
@@ -147,7 +147,7 @@
example:
</p>
<a id="java_dbt3"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.Database;
@@ -157,12 +157,12 @@ import com.sleepycat.db.Database;
// Database opens omitted for clarity.
// Databases must NOT be opened read-only.
-String aKey = "myFirstKey";
-String aData = "myFirstData";
+String aKey = &quot;myFirstKey&quot;;
+String aData = &quot;myFirstData&quot;;
try {
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
- DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry theData = new DatabaseEntry(aData.getBytes(&quot;UTF-8&quot;));
myDatabase.put(null, theKey, theData);
} catch (Exception e) {
// Exception handling goes here
@@ -210,7 +210,7 @@ try {
</ul>
</div>
<p>Both the key and data for a database record are returned as
- <tt class="classname">DatabaseEntry</tt> objects. These objects are
+ byte arrays in <tt class="classname">DatabaseEntry</tt> objects. These objects are
passed as parameter values to the <tt class="methodname">Database.get()</tt> method.
</p>
<p>In order to retrieve your data once <tt class="classname">Database.get()</tt>
@@ -219,7 +219,7 @@ try {
<tt class="literal">byte</tt> array back to the
appropriate datatype. For example:</p>
<a id="java_dbt4"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.Database;
@@ -232,13 +232,13 @@ Database myDatabase = null;
// Database opens omitted for clarity.
// Database may be opened read-only.
-String aKey = "myFirstKey";
+String aKey = &quot;myFirstKey&quot;;
try {
// Create a pair of DatabaseEntry objects. theKey
// is used to perform the search. theData is used
// to store the data returned by the get() operation.
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
DatabaseEntry theData = new DatabaseEntry();
// Perform the get.
@@ -247,11 +247,11 @@ try {
// Recreate the data String.
byte[] retData = theData.getData();
- String foundData = new String(retData);
- System.out.println("For key: '" + aKey + "' found data: '" +
- foundData + "'.");
+ String foundData = new String(retData, &quot;UTF-8&quot;);
+ System.out.println(&quot;For key: '&quot; + aKey + &quot;' found data: '&quot; +
+ foundData + &quot;'.&quot;);
} else {
- System.out.println("No record found for key '" + aKey + "'.");
+ System.out.println(&quot;No record found for key '&quot; + aKey + &quot;'.&quot;);
}
} catch (Exception e) {
// Exception handling goes here
@@ -280,13 +280,13 @@ try {
</p>
<p>
You can also delete every record in the database by using
- <tt class="methodname">Database.truncate().</tt>
+ <tt class="methodname">Environment.truncateDatabase().</tt>
</p>
<p>For example:</p>
<a id="java_dbt5"></a>
- <pre class="programlisting">package com.sleepycat.examples.db.GettingStarted;
+ <pre class="programlisting">package db.GettingStarted;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.Database;
@@ -298,8 +298,8 @@ Database myDatabase = null;
// Database can NOT be opened read-only.
try {
- String aKey = "myFirstKey";
- DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
+ String aKey = &quot;myFirstKey&quot;;
+ DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes(&quot;UTF-8&quot;));
// Perform the deletion. All records that use this key are
// deleted.
@@ -320,7 +320,7 @@ try {
<p>
When you perform a database modification, your modification is made
in the in-memory cache. This means that your data modifications
- are not necessarily written to disk, and so your data may not appear
+ are not necessarily flushed to disk, and so your data may not appear
in the database after an application restart.
</p>
<p>
@@ -332,17 +332,19 @@ try {
experience database corruption.
</p>
<p>
- Therefore, if you care about whether your data persists across
- application runs, and to guard against the rare possibility of
+ Therefore, if you care if your data is durable across system
+ failures, and to guard against the rare possibility of
database corruption, you should use transactions to protect your
database modifications. Every time you commit a transaction, DB
ensures that the data will not be lost due to application or
- system failure.
-
- <span>
- For information on transactions, see the <i class="citetitle">Berkeley DB
- Programmer's Tutorial and Reference Guide</i>.
- </span>
+ system failure. Transaction usage is described in the
+
+
+
+
+ <span>
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </span>
</p>
<p>
If you do not want to use transactions, then the assumption is that
@@ -355,10 +357,11 @@ try {
If, however, you are not using transactions for some reason and you
still want some guarantee that your database modifications are
persistent, then you should periodically
+ <span>run environment syncs.</span>
-
- Syncs cause the entire contents of your in-memory cache to be written to disk. As
+ Syncs cause any dirty entries in the in-memory cache and the
+ operating system's file cache to be written to disk. As
such, they are quite expensive and you should use them sparingly.
</p>
<p>
diff --git a/db/docs/gsg_db_rep/C/Replication-C-GSG.pdf b/db/docs/gsg_db_rep/C/Replication-C-GSG.pdf
new file mode 100644
index 000000000..85cdab4d0
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/Replication-C-GSG.pdf
Binary files differ
diff --git a/db/docs/gsg_db_rep/C/addfeatures.html b/db/docs/gsg_db_rep/C/addfeatures.html
new file mode 100644
index 000000000..117a07589
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/addfeatures.html
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 5. Additional Features</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="exampledoloop.html" title="Example Processing Loop" />
+ <link rel="next" href="manageblock.html" title="Managing Blocking Operations" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 5. Additional Features</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="exampledoloop.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="manageblock.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="addfeatures"></a>Chapter 5. Additional Features</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="c2ctransfer.html#fmwrkpeerserver">Identifying Peers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="bulk.html">Bulk Transfers</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Beyond the basic functionality that we have discussed so far in
+ this book, there are several replication features that you
+ should understand. These are all optional to use, but provide
+ useful functionality under the right circumstances.
+ </p>
+ <p>
+ These additional features are:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="bulk.html">Bulk Transfers</a>
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="delayedsync"></a>Delayed Synchronization</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a replication group has a new master, all replicas must
+ synchronize with that master. This means they must ensure
+ that the contents of their local database(s) are identical
+ to that contained by the new master.
+ </p>
+ <p>
+ This synchronization process can result in quite a lot of
+ network activity. It can also put a large strain on the
+ master server, especially if is part of a large
+ replication group or if there is somehow a large difference between
+ the master's database(s) and the contents of its replicas.
+ </p>
+ <p>
+ It is therefore possible to delay synchronization for any
+ replica that discovers it has a new master. You would do
+ this so as to give the master time to synchronize other
+ replicas before proceeding with the delayed replicas.
+ </p>
+ <p>
+ To delay synchronization of a replica environment, you
+ specify
+ <span>
+ <tt class="literal">DB_REP_CONF_DELAYCLIENT</tt> to
+ <tt class="methodname">DB_ENV-&gt;rep_set_config()</tt>
+
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ <p>
+ If you use delayed synchronization, then you must manually
+ synchronize the replica at some future time. Until you do this, the replica is out of
+ sync with the master, and it will ignore all database changes forwarded to it from
+ the master.
+ </p>
+ <p>
+ You synchronize a delayed replica by calling
+ <tt class="methodname">DB_ENV-&gt;rep_sync()</tt>
+
+
+ on the replica that has been delayed.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="exampledoloop.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="manageblock.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Example Processing Loop </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Blocking Operations</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/apioverview.html b/db/docs/gsg_db_rep/C/apioverview.html
new file mode 100644
index 000000000..4b201d88c
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/apioverview.html
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>The Replication APIs</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="repadvantage.html" title="Replication Benefits" />
+ <link rel="next" href="elections.html" title="Holding Elections" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">The Replication APIs</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="apioverview"></a>The Replication APIs</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ There are two ways that you can choose to implement
+ replication in your transactional application. The first,
+ and preferred, mechanism is to use the pre-packaged
+ replication framework that comes with the
+ DB distribution. This framework should be sufficient
+ for most customers.
+ </p>
+ <p>
+ If for some reason the Replication Framework
+ does not meet your application's technical requirements,
+ you will have to use the replication APIs available
+ through the Berkeley DB library to write your own custom
+ replication framework.
+ </p>
+ <p>
+ Both of these approaches are described in slightly greater
+ detail in this section. The bulk of the chapters later in
+ this book are dedicated to these two replication
+ implementation mechanisms.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repframeworkoverview"></a>Replication Framework Overview</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB's pre-packaged replication framework exists
+ as a layer on top of the DB library. The replication framework is a
+ multi-threaded implementation that allows you to easily add
+ replication to your existing transactional application.
+ <span>
+ You access and manage the replication framework using methods that are
+ available off the
+ <tt class="classname">DB_ENV</tt>
+
+ class.
+ </span>
+
+ </p>
+ <p>
+ The replication framework:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Provides a multi-threaded communications layer
+ using pthreads (on Unix-style systems and
+ similar derivatives such as Mac OS X), or
+ Windows threads on Microsoft Windows systems.
+ </p>
+ </li>
+ <li>
+ <p>
+ Uses TCP/IP sockets. Network traffic is
+ handled via threads that handle inbound and
+ outbound messages. However, each
+ process uses a single socket
+ that is shared using <tt class="function">select()</tt>.
+ </p>
+ <p>
+ Note that for this reason, the replication framework is
+ limited to a maximum of 60 replicas (on
+ Windows) and approximately 1000 replicas (on
+ Unix and related systems), depending on how
+ your system is configured.
+ </p>
+ </li>
+ <li>
+ <p>
+ Requires a single process for the master replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ Requires that only one instance of the
+ environment handle be used.
+ </p>
+ </li>
+ <li>
+ <p>
+ Upon application startup, a master can be
+ selected either manually or via elections.
+ After startup time, however, during the course of
+ normal operations it is possible for the
+ replication group to need to locate a new master (due
+ to network or other hardware related problems,
+ for example) and in this scenario elections are
+ always used to select the new master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ If your application has technical requirements that do
+ not conform to the implementation provided by the
+ replication framework, you must write a custom
+ replication framework using the DB replication APIs
+ directly. See the next section for introductory
+ details.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repapioverview"></a>Replication API Overview</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The replication API is a series of Berkeley DB library
+ classes and methods that you can use to build your own
+ replication infrastructure. You should use the
+ replication API only if the replication framework does not meet your
+ application's technical requirements.
+ </p>
+ <p>
+ To make use of the replication API, you must write your
+ own networking code. This frees you from the technical
+ constraints imposed by the replication framework. For example, by
+ writing your own framework, you can:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Use a threading package other than
+ pthreads (Unix) or Windows threads
+ (Microsoft Windows). This might be interesting
+ to you if you are using a platform
+ whose preferred threading package
+ is something other than (for
+ example) pthreads, such as is the case for
+ Sun Microsystem's Solaris operating systems.
+ </p>
+ </li>
+ <li>
+ <p>
+ Implement your own sockets. The
+ replication framework uses TCP/IP sockets. While
+ this should be acceptable for the
+ majority of applications, sometimes
+ UDP or even raw sockets might be
+ desired.
+ </p>
+ </li>
+ <li>
+ <p>
+ Write a multi-process master
+ replica.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For information on writing a replicated application
+ using the Berkeley DB replication APIs, see the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Replication Benefits </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Holding Elections</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/bulk.html b/db/docs/gsg_db_rep/C/bulk.html
new file mode 100644
index 000000000..b339aa6c8
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/bulk.html
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Bulk Transfers</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="c2ctransfer.html" title="Client to Client Transfer" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Bulk Transfers</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="c2ctransfer.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> </td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="bulk"></a>Bulk Transfers</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, messages are sent from the master to replicas as they are generated.
+ This can degrade replication performance because the various participating
+ environments must handle a fair amount of network I/O activity.
+ </p>
+ <p>
+ You can alleviate this problem by configuring your master environment for bulk
+ transfers. Bulk transfers simply cause replication messages to accumulate in a
+ buffer until a triggering event occurs. When this event occurs, the entire
+ contents of the buffer is sent to the replica, thereby eliminating excessive
+ network I/O.
+ </p>
+ <p>
+ Note that if you are using replica to replica transfers, then you might want any
+ replica that can service replication requests to also be configured for bulk
+ transfers.
+ </p>
+ <p>
+ The events that result in a bulk transfer of replication messages to a replica
+ will differ depending on if the transmitting environment is a master or a
+ replica.
+ </p>
+ <p>
+ If the servicing environment is a master environment, then bulk a bulk transfer
+ occurs when:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Bulk transfers are configured for the master environment, and
+ </p>
+ </li>
+ <li>
+ <p>
+ the message buffer is full or
+ </p>
+ </li>
+ <li>
+ <p>
+ a permanent record (for example, a transaction commit or a
+ checkpoint record) is placed in the buffer for the replica.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ If the servicing environment is a replica environment (that is, replica to replica
+ transfers are in use), then a bulk transfer occurs when:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Bulk transfers are configured for the transmitting replica, and
+ </p>
+ </li>
+ <li>
+ <p>
+ the message buffer is full or
+ </p>
+ </li>
+ <li>
+ <p>
+ the replica servicing the request is able to completely satisfy
+ the request with the contents of the message buffer.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ To configure bulk transfers, specify
+
+ <span>
+ <tt class="literal">DB_REP_CONF_BULK</tt> to
+ <tt class="methodname">DB_ENV-&gt;rep_set_config()</tt>
+
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="c2ctransfer.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> </td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Client to Client Transfer </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/c2ctransfer.html b/db/docs/gsg_db_rep/C/c2ctransfer.html
new file mode 100644
index 000000000..8145d4000
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/c2ctransfer.html
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Client to Client Transfer</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="noautoinit.html" title="Stop Auto-Initialization" />
+ <link rel="next" href="bulk.html" title="Bulk Transfers" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Client to Client Transfer</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="noautoinit.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="bulk.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="c2ctransfer"></a>Client to Client Transfer</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is possible to use a replica instead of a master to synchronize another
+ replica. This serves to take the request load off a master that might otherwise
+ occur if multiple replicas attempted to synchronize with the master at the same
+ time.
+ </p>
+ <p>
+ For best results, use this feature combined with the delayed synchronization
+ feature (see <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>).
+ </p>
+ <p>
+ For example, suppose your replication group consists of four environments. Upon
+ application startup, all three replicas will immediately attempt to synchronize
+ with the master. But at the same time, the master itself might be busy with a heavy
+ database write load.
+ </p>
+ <p>
+ To solve this problem, delay synchronization for two of the three replicas. Allow
+ the third replica to synchronize as normal with the master. Then, start
+ synchronization for each of the delayed replicas (since this is a manual process,
+ you can do them one at a time if that best suits your application).
+ Assuming you have configured replica to replica synchronization correctly, the
+ delayed replicas will synchronize using the up-to-date replica, rather than using
+ the master.
+ </p>
+ <p>
+ When you are using the replication framework, you configure replica to replica synchronization by
+ declaring one environment to be a peer of another environment. If an
+ environment is a peer, then
+ it can be used for synchronization purposes.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpeerserver"></a>Identifying Peers</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can designate one replica to be a peer of
+ another, and then use this special
+ status for permanent message acknowledgments,
+ and for replica-to-replica synchronization.
+ You might want to do this if you have
+ machines that you know are on fast, reliable
+ network connections and so you are willing to
+ accept the overhead of waiting for
+ acknowledgments from those specific machines.
+ </p>
+ <p>
+ An environment is currently allowed to have only one
+ peer.
+ </p>
+ <p>
+ Note that peers are not required to be a
+ bi-directional. That is, just because machine A
+ declares machine B to be a peer, that does not mean
+ machine B must also declare machine A to be a peer.
+ </p>
+ <p>
+ You declare a peer for the current environment
+ when you add that environment to the list of known
+ sites. You do this by
+ <span>specifying the
+ <tt class="literal">DB_REPMGR_PEER</tt> flag to
+ <span><tt class="methodname">DB_ENV-&gt;repmgr_add_remote_site()</tt>.</span>
+
+ </span>
+
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="noautoinit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="bulk.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Stop Auto-Initialization </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Bulk Transfers</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/elections.html b/db/docs/gsg_db_rep/C/elections.html
new file mode 100644
index 000000000..8157cf14a
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/elections.html
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Holding Elections</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="apioverview.html" title="The Replication APIs" />
+ <link rel="next" href="permmessages.html" title="Permanent Message Handling" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Holding Elections</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="apioverview.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="permmessages.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="elections"></a>Holding Elections</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Finding a master environment is one of the fundamental activities that
+ every replication replica must perform. Upon startup, the
+ underlying DB replication code will attempt to
+ locate a master. If a master cannot be found, then the
+ environment should initiate an election.
+ </p>
+ <p>
+ How elections are held depends upon the API that you use to
+ implement replication. For example, if you are using the
+ replication framework elections are held transparently without any
+ input from your application's code. In this case,
+ DB will determine which environment is the master and which
+ are replicas.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="influencingelections"></a>Influencing Elections</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If you want to control the election process, you can declare
+ a specific environment to be the master. Note that for the replication framework,
+ it is only possible to do this at application startup.
+ Should the master become unavailable during run-time for any
+ reason, an election is held. The environment that receives
+ the most number of votes, wins the election and becomes the
+ master. A machine receives a vote because it has the most
+ number of log records.
+ </p>
+ <p>
+ Because ties are possible when elections are held,
+ it is possible to influence which environment will win
+ the election. How you do this depends on which API you
+ are using. In particular, if you are writing a custom replication
+ layer, then there are a great many ways to manually influence
+ elections.
+ </p>
+ <p>
+ One such mechanism is priorities. When votes are
+ cast during an election, both the number of log records
+ contained in the environment <span class="emphasis"><em>and</em></span>
+ the environment's priority are considered. So given two
+ environments with the same number of log records, votes
+ are cast for the environment with the higher priority.
+ </p>
+ <p>
+ Therefore, if you have a machine that you prefer to
+ become a master in the event of an election, assign it
+ a high priority. Assuming that the election is held at
+ a time when the preferred machine has up-to-date log
+ records, that machine will win the election.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="winningelections"></a>Winning Elections</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To win an election:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ There cannot currently be a
+ master environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ The environment must have the most
+ recent log records. Part of
+ holding the election is
+ determining which environments have
+ the most recent log records.
+ This process happens
+ automatically; your code does
+ not need to involve itself in
+ this process.
+ </p>
+ </li>
+ <li>
+ <p>
+ The environment must receive the most
+ number of votes from the
+ replication environments that are
+ participating in the election.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ If you are using the replication framework, then in the event of a
+ tie vote the environment with the highest priority wins
+ the election. If two or more environments receive the same
+ number of votes and have the same priority, then
+ the underlying replication code picks one of the
+ environments to
+ be the winner. Which winner will be picked by the
+ replication code is unpredictable from the
+ perspective of your application code.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="switchingmasters"></a>Switching Masters</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To switch masters:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Start up the environment that you want
+ to be master as normal. At this
+ time it is a replica. Make
+ sure this environment has a higher
+ priority than all the other
+ environments.
+ </p>
+ </li>
+ <li>
+ <p>
+ Allow the new environment to run for a
+ time as a replica. This allows
+ it to obtain the most recent
+ copies of the log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Shut down the current master.
+ This should force an election.
+ Because the new environment has the
+ highest priority, it will win
+ the election, provided it has
+ had enough time to obtain all
+ the log records.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally restart the old
+ master environment. Because there is
+ currently a master environment, an
+ election will not be held and
+ the old master will now run as
+ a replica environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="apioverview.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="permmessages.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">The Replication APIs </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Permanent Message Handling</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/electiontimes.html b/db/docs/gsg_db_rep/C/electiontimes.html
new file mode 100644
index 000000000..8f6a2cf9e
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/electiontimes.html
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Election Times</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="fwrkpermmessage.html" title="Permanent Message Handling" />
+ <link rel="next" href="fmwrkconnectretry.html" title="Managing Connection Retries" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Election Times</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fwrkpermmessage.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fmwrkconnectretry.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="electiontimes"></a>Managing Election Times</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Where it comes to elections, there are two timeout
+ values with which you should be concerned: election
+ timeouts and election retries.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="electiontimeout"></a>Managing Election Timeouts</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a environment calls for an election, it will wait
+ some amount of time for the other replicas in the
+ replication group to respond. The amount of time
+ that the environment will wait before declaring the
+ election completed is the <span class="emphasis"><em>election timeout</em></span>.
+ </p>
+ <p>
+ If the environment hears from all other known replicas before
+ the election timeout occurs, the election is considered
+ a success and a master is elected.
+ </p>
+ <p>
+ If only a subset of replicas respond, then the success
+ or failure of the election is determined by (1)
+ how many replicas have responded and (2) the
+ election policy that is in place at the time.
+ For example, usually it only takes a simple
+ majority of replicas to elect a master. If
+ there are enough votes for a given environment to
+ meet that standard, then the master has been
+ elected and the election is considered a
+ success.
+ </p>
+ <p>
+ However, upon application startup you can
+ require that all known replicas must participate in the
+ election. Or, it is possible that not enough
+ votes are cast to select a master even with a
+ simple majority. If either of these conditions
+ occur when the election timeout value is
+ reached, the election is considered a failure
+ and a master is not elected. At this point,
+ your replication group is operating without a
+ master, which means that, essentially,
+ your replicated application has been placed in
+ read-only mode.
+ </p>
+ <p>
+ Note, however, that the replication framework will attempt a
+ new election after a given amount of time has
+ passed. See the next section for details.
+ </p>
+ <p>
+ You set the election timeout value using
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_timeout()</tt>.</span>
+
+ To do so, specify the
+ <tt class="literal">DB_REP_ELECTION_TIMEOUT</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ timeout value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="electretrytime"></a>Managing Election Retry Times</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In the event that a election fails (see the
+ previous section), an election will not be
+ attempted again until the election retry
+ timeout value has expired.
+ </p>
+ <p>
+ You set the retry timeout value using
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_timeout()</tt>.</span>
+
+ To do so, specify the
+ <tt class="literal">DB_REP_ELECTION_RETRY</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ retry value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fwrkpermmessage.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fmwrkconnectretry.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Permanent Message Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Connection Retries</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/exampledoloop.html b/db/docs/gsg_db_rep/C/exampledoloop.html
new file mode 100644
index 000000000..859f4a837
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/exampledoloop.html
@@ -0,0 +1,643 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Example Processing Loop</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="previous" href="processingloop.html" title="Processing Loop" />
+ <link rel="next" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Example Processing Loop</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="processingloop.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Replica versus Master Processes</th>
+ <td width="20%" align="right"> <a accesskey="n" href="addfeatures.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="exampledoloop"></a>Example Processing Loop</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In this section we take the example
+ processing loop that we presented in the
+ previous section and we flesh it out to
+ provide a more complete example. We do this
+ by updating the
+ <tt class="function">doloop()</tt>
+ function that our original transaction
+ application used
+ <span>(see <a href="simpleprogramlisting.html#doloop_c">Function: doloop()</a>)</span>
+
+
+ to fully support our replicated application.
+ </p>
+ <p>
+ In the following example code, code that we
+ add to the original example is presented in
+ <b class="userinput"><tt>bold</tt></b>.
+ </p>
+ <p>
+ To begin, we include a new header file into
+ our application so that we can check for the
+ <tt class="literal">ENOENT</tt> return value later
+ in our processing loop. We also define our
+ <tt class="literal">APP_DATA</tt>
+ structure, and we define a
+ <tt class="literal">sleeptime</tt> value.
+
+ <span>
+ Finally, we
+ add a new forward declaration for our event
+ callback.
+ </span>
+
+
+ </p>
+ <pre class="programlisting">/*
+ * File: rep_mgr.c
+ */
+
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
+<b class="userinput"><tt>#include &lt;errno.h&gt;</tt></b>
+#ifndef _WIN32
+#include &lt;unistd.h&gt;
+#endif
+
+#include &lt;db.h&gt;
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#endif
+
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE &quot;quote.db&quot;
+<b class="userinput"><tt>#define SLEEPTIME 3</tt></b>
+
+const char *progname = &quot;rep_mgr&quot;;
+
+<b class="userinput"><tt>typedef struct {
+ int is_master;
+} APP_DATA;</tt></b>
+
+int create_env(const char *, DB_ENV **);
+int env_init(DB_ENV *, const char *);
+int doloop (DB_ENV *);
+int print_stocks(DBC *);
+<b class="userinput"><tt>void *event_callback(DB_ENV *, u_int32_t, void *);</tt></b> </pre>
+ <p>
+ In our <tt class="function">main()</tt> function, most of what we
+ have to add to it is some new variable declarations and
+ initializations:
+</p>
+ <pre class="programlisting">int
+main(int argc, char *argv[])
+{
+ extern char *optarg;
+ DB_ENV *dbenv;
+ const char *home;
+ char ch, *host, *portstr;
+ int ret, local_is_set, totalsites;
+ u_int32_t port;
+ <b class="userinput"><tt>/* Used to track whether this is a replica or a master */
+ APP_DATA my_app_data;
+
+ my_app_data.is_master = 0; /* Assume that we start as a replica */</tt></b>
+ dbenv = NULL;
+
+ ret = local_is_set = totalsites = 0;
+ home = NULL;</pre>
+ <p>
+ The rest of our <tt class="function">main()</tt> function
+ is unchanged, except that we make our
+ <tt class="literal">APP_DATA</tt> structure available through our
+ environment handle's <tt class="methodname">app_private</tt>
+ field:
+ </p>
+ <pre class="programlisting">
+ if ((ret = create_env(progname, &amp;dbenv)) != 0)
+ goto err;
+
+ <b class="userinput"><tt>/* Make APP_DATA available through the environment handle */
+ dbenv-&gt;app_private = &amp;my_app_data;</tt></b>
+
+ /* Default priority is 100 */
+ dbenv-&gt;rep_set_priority(dbenv, 100);
+
+ /* Collect the command line options */
+ while ((ch = getopt(argc, argv, &quot;h:m:o:p:&quot;)) != EOF)
+ switch (ch) {
+ case 'h':
+ home = optarg;
+ break;
+ /* Set the host and port used by this environment */
+ case 'm':
+ host = strtok(optarg, &quot;:&quot;);
+ if ((portstr = strtok(NULL, &quot;:&quot;)) == NULL) {
+ fprintf(stderr, &quot;Bad host specification.\n&quot;);
+ goto err;
+ }
+ port = (unsigned short)atoi(portstr);
+ if (dbenv-&gt;repmgr_set_local_site(dbenv, host, port, 0) != 0) {
+ fprintf(stderr,
+ &quot;Could not set local address %s.\n&quot;, host);
+ goto err;
+ }
+ local_is_set = 1;
+ break;
+ /* Identify another site in the replication group */
+ case 'o':
+ host = strtok(optarg, &quot;:&quot;);
+ if ((portstr = strtok(NULL, &quot;:&quot;)) == NULL) {
+ fprintf(stderr, &quot;Bad host specification.\n&quot;);
+ goto err;
+ }
+ port = (unsigned short)atoi(portstr);
+ if (dbenv-&gt;repmgr_add_remote_site(dbenv, host, port, 0) != 0) {
+ fprintf(stderr,
+ &quot;Could not add site %s.\n&quot;, host);
+ goto err;
+ }
+ break;
+ /* Set the number of sites in this replication group */
+ case 'n':
+ totalsites = atoi(optarg);
+ if ((ret = dbenv-&gt;rep_set_nsites(dbenv, totalsites)) != 0)
+ dbenv-&gt;err(dbenv, ret, &quot;set_nsites&quot;);
+ break;
+ /* Set this replica's election priority */
+ case 'p':
+ dbenv-&gt;rep_set_priority(dbenv, atoi(optarg));
+ break;
+ case '?':
+ default:
+ usage();
+ }
+
+ /* Error check command line. */
+ if (home == NULL || !local_is_set || !totalsites)
+ usage();
+
+ if ((ret = env_init(dbenv, home)) != 0)
+ goto err;
+
+ if ((ret = dbenv-&gt;repmgr_start(dbenv, 3, DB_REP_ELECTION)) != 0)
+ goto err;
+
+ /* Sleep to give ourselves time to find a master. */
+ sleep(5);
+
+ if ((ret = doloop(dbenv)) != 0) {
+ dbenv-&gt;err(dbenv, ret, &quot;Application failed&quot;);
+ goto err;
+ }
+
+err: if (dbenv != NULL)
+ (void)dbenv-&gt;close(dbenv, 0);
+
+ return (ret);
+} </pre>
+ <p>
+ Having updated our <tt class="function">main()</tt>, we must also
+ update our <tt class="function">create_env()</tt> function to
+ register our <tt class="function">event_callback</tt> callback.
+ Notice that our <tt class="function">env_init()</tt> function, which is
+ responsible for actually opening our environment handle, is
+ unchanged:
+ </p>
+ <pre class="programlisting">int
+create_env(char *progname, DB_ENV **dbenvp)
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ if ((ret = db_env_create(&amp;dbenv, 0)) != 0) {
+ fprintf(stderr, &quot;can't create env handle: %s\n&quot;,
+ db_strerror(ret));
+ return (ret);
+ }
+
+ dbenv-&gt;set_errfile(dbenv, stderr);
+ dbenv-&gt;set_errpfx(dbenv, progname);
+ <b class="userinput"><tt>(void)dbenv-&gt;set_event_notify(dbenv, event_callback);</tt></b>
+
+ *dbenvp = dbenv;
+ return (0);
+}
+
+int
+env_init(DB_ENV *dbenv, const char *home)
+{
+ u_int32_t flags;
+ int ret;
+
+ (void)dbenv-&gt;set_cachesize(dbenv, 0, CACHESIZE, 0);
+ (void)dbenv-&gt;set_flags(dbenv, DB_TXN_NOSYNC, 1);
+
+ flags = DB_CREATE |
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_MPOOL |
+ DB_INIT_TXN |
+ DB_INIT_REP |
+ DB_THREAD |
+ DB_RECOVER;
+ if ((ret = dbenv-&gt;open(dbenv, home, flags, 0)) != 0)
+ dbenv-&gt;err(dbenv, ret, &quot;can't open environment&quot;);
+ return (ret);
+}</pre>
+ <p>
+ That done, we need to implement our
+ <tt class="function">event_callback()</tt> callback. Note that what we use
+ here is no different from the callback that we described in
+ the previous section. However, for the sake of completeness we
+ provide the implementation here again.
+</p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt>/*
+ * A callback used to determine whether the local environment is a replica
+ * or a master. This is called by the replication framework
+ * when the local replication environment changes state.
+ */
+void *
+event_callback(DB_ENV *dbenv, u_int32_t which, void *info)
+{
+ APP_DATA *app = dbenv-&gt;app_private;
+
+ info = NULL; /* Currently unused. */
+
+ switch (which) {
+ case DB_EVENT_REP_MASTER:
+ app-&gt;is_master = 1;
+ break;
+
+ case DB_EVENT_REP_CLIENT:
+ app-&gt;is_master = 0;
+ break;
+
+ case DB_EVENT_REP_STARTUPDONE: /* fallthrough */
+ case DB_EVENT_REP_NEWMASTER:
+ /* Ignore. */
+ break;
+
+ default:
+ dbenv-&gt;errx(dbenv, &quot;ignoring event %d&quot;, which);
+ }
+}</tt>
+ </b>
+ </pre>
+ <p>
+ That done, we need to update our
+ <tt class="function">doloop()</tt>
+ <span>function. This is the place where we most
+ heavily modify our application.</span>
+
+
+</p>
+ <p>
+ We begin by introducing <tt class="literal">APP_DATA</tt> to the
+ function:
+</p>
+ <pre class="programlisting">/*
+ * Provides the main data processing function for our application.
+ * This function provides a command line prompt to which the user
+ * can provide a ticker string and a stock price. Once a value is
+ * entered to the application, the application writes the value to
+ * the database and then displays the entire database.
+ */
+#define BUFSIZE 1024
+int
+doloop(DB_ENV *dbenv)
+{
+ DB *dbp;
+ <b class="userinput"><tt>APP_DATA *app_data;</tt></b>
+ DBT key, data;
+ char buf[BUFSIZE], *rbuf;
+ int ret;
+ u_int32_t flags;
+
+ dbp = NULL;
+ ret = 0;
+ memset(&amp;key, 0, sizeof(key));
+ memset(&amp;data, 0, sizeof(data));
+ <b class="userinput"><tt>app_data = dbenv-&gt;app_private;</tt></b></pre>
+ <p>
+ Next we begin to modify our main loop.
+ To start, upon entering the loop we create the database handle and configure it as
+ normal. But we also have to decide what flags we will use for
+ the open. Again, it depends on whether we are a replica or a
+ master.
+ </p>
+ <pre class="programlisting"> for (;;) {
+ if (dbp == NULL) {
+ if ((ret = db_create(&amp;dbp, dbenv, 0)) != 0)
+ return (ret);
+
+ /* Set page size small so page allocation is cheap. */
+ if ((ret = dbp-&gt;set_pagesize(dbp, 512)) != 0)
+ goto err;
+
+ <b class="userinput"><tt>flags = DB_AUTO_COMMIT;
+ if (app_data-&gt;is_master)
+ flags |= DB_CREATE;</tt></b> </pre>
+ <p>
+ When we open the database, we modify our error handling to
+ account for the case where the database does not yet exist. This can
+ happen if our code is running as a replica and the replication framework has not
+ yet had a chance to create the databases for us. Recall that replicas never
+ write to their own databases directly, and so they cannot
+ create databases on their own.
+</p>
+ <p>
+ If we detect that the database does not yet exist, we simply
+ close the database handle, sleep for a short period of time
+ and then continue processing. This gives the replication framework a chance to
+ create the database so that our replica can continue
+ operations.
+</p>
+ <pre class="programlisting"> if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, flags, 0)) != 0) {
+ <b class="userinput"><tt>if (ret == ENOENT) {
+ printf(
+ &quot;No stock database yet available.\n&quot;);
+ if ((ret = dbp-&gt;close(dbp, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret,
+ &quot;DB-&gt;close&quot;);
+ goto err;
+ }
+ dbp = NULL;
+ sleep(SLEEPTIME);
+ continue;
+ }</tt></b>
+ dbenv-&gt;err(dbenv, ret, &quot;DB-&gt;open&quot;);
+ goto err;
+ }
+ } </pre>
+ <p>
+ Next we modify our prompt, so that if the local process is running
+ as a replica, we can tell from the shell that the prompt is for a
+ read-only process.
+ </p>
+ <pre class="programlisting"> printf(&quot;QUOTESERVER<b class="userinput"><tt>%s</tt></b>&gt; &quot;,
+ <b class="userinput"><tt>app_data-&gt;is_master ? &quot;&quot; : &quot; (read-only)&quot;);</tt></b>
+ fflush(stdout); </pre>
+ <p>
+ When we collect data from the prompt, there is a case that says
+ if no data is entered then show the entire stocks database.
+ This display is performed by our
+ <tt class="function">print_stocks()</tt>
+ <span>function</span>
+
+ (which has not
+ required a modification since we first introduced it in
+ <a href="simpleprogramlisting.html#printstocks_c">
+ <span>Function: print_stocks()</span>
+
+
+ </a>).
+ </p>
+ <p>
+ When we call
+ <span><tt class="function">print_stocks()</tt>, </span>
+
+ we check for a dead replication handle. Dead
+ replication handles happen whenever a replication election
+ results in a previously committed transaction becoming
+ invalid. This is an error scenario caused by a new master having a
+ slightly older version of the data than the original
+ master and so all replicas must modify their database(s) to
+ reflect that of the new master. In this situation, some
+ number of previously committed transactions may have to be
+ unrolled. From the replica's perspective, the database
+ handles should all be closed and then opened again.
+ </p>
+ <pre class="programlisting"> if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if (strtok(&amp;buf[0], &quot; \t\n&quot;) == NULL) {
+ switch ((ret = print_stocks(dbp))) {
+ case 0:
+ continue;
+ <b class="userinput"><tt>case DB_REP_HANDLE_DEAD:
+ (void)dbp-&gt;close(dbp, DB_NOSYNC);
+ dbp = NULL;
+ dbenv-&gt;errx(dbenv, &quot;Got a dead replication handle&quot;);
+ continue; </tt></b>
+ default:
+ dbp-&gt;err(dbp, ret, &quot;Error traversing data&quot;);
+ goto err;
+ }
+ }
+ rbuf = strtok(NULL, &quot; \t\n&quot;);
+ if (rbuf == NULL || rbuf[0] == '\0') {
+ if (strncmp(buf, &quot;exit&quot;, 4) == 0 ||
+ strncmp(buf, &quot;quit&quot;, 4) == 0)
+ break;
+ dbenv-&gt;errx(dbenv, &quot;Format: TICKER VALUE&quot;);
+ continue;
+ }</pre>
+ <p>
+ That done, we need to add a little error checking to our
+ command prompt to make sure the user is not attempting to
+ modify the database at a replica. Remember, replicas must never
+ modify their local databases on their own. This guards against
+ that happening due to user input at the prompt.
+ </p>
+ <pre class="programlisting"> <b class="userinput"><tt>if (!app_data-&gt;is_master) {
+ dbenv-&gt;errx(dbenv, &quot;Can't update at client&quot;);
+ continue;
+ }</tt></b>
+ key.data = buf;
+ key.size = (u_int32_t)strlen(buf);
+
+ data.data = rbuf;
+ data.size = (u_int32_t)strlen(rbuf);
+
+ if ((ret = dbp-&gt;put(dbp,
+ NULL, &amp;key, &amp;data, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, &quot;DB-&gt;put&quot;);
+ goto err;
+ }
+ }
+
+err: if (dbp != NULL)
+ (void)dbp-&gt;close(dbp, DB_NOSYNC);
+
+ return (ret);
+} </pre>
+ <p>
+ With that completed, we are all done updating our application
+ for replication.
+
+ The only remaining
+ <span>function, <tt class="function">print_stocks()</tt>,</span>
+
+
+
+ is unmodified from when we
+ originally introduced it. For details on that function, see
+ <a href="simpleprogramlisting.html#printstocks_c">
+ <span>Function: print_stocks()</span>
+
+
+ </a>.
+</p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="runningit"></a>Running It</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To run our replicated application, we need to make
+ sure each participating environment has its own unique
+ home directory. We can do this by running
+ each site on a separate networked machine, but that
+ is not strictly necessary; multiple instances of this
+ code can run on the same machine provided the
+ environment home restriction is observed.
+ </p>
+ <p>
+ To run a process, make sure the environment home
+ exists and then start the process using the
+ <tt class="literal">-h</tt> option to specify that
+ directory. You must also use the <tt class="literal">-m</tt>
+ option to identify the local host and port that this
+ process will use to listen for replication messages, and
+ the <tt class="literal">-o</tt> option to identify the other
+ processes in the replication group. Finally, use the
+ <tt class="literal">-p</tt> option to specify a priority.
+ The process that you designate to have the highest priority will become
+ the master.
+ </p>
+ <pre class="programlisting">&gt; mkdir env1
+&gt; ./rep_mgr -h env1 -n 2 -m localhost:8080 -o localhost:8081 -p 10
+No stock database yet available.
+No stock database yet available. </pre>
+ <p>
+ Now, start another process. This time, change the environment
+ home to something else, use the <tt class="literal">-m</tt> to at
+ least change the port number the process is listening on, and
+ use the <tt class="literal">-o</tt> option to identify the host and
+ port of the other replication process:
+</p>
+ <pre class="programlisting">&gt; mkdir env2
+&gt; ./rep_mgr -h env2 -n 2 -m localhost:8081 -o localhost:8080 -p 20</pre>
+ <p>
+ After a short pause, the second process should display the master
+ prompt:
+</p>
+ <pre class="programlisting">
+QUOTESERVER &gt; </pre>
+ <p>
+ And the first process should
+ display the read-only prompt:
+</p>
+ <pre class="programlisting">
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Now go to the master process and give it a couple of stocks and stock
+ prices:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; FAKECO 9.87
+QUOTESERVER&gt; NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ Then, go to the replica and hit <b class="userinput"><tt>return</tt></b> at the prompt to
+ see the new values:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 9.87
+ NOINC .23
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Doing the same at the master results in the same thing:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 9.87
+ NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ You can change a stock by simply entering the stock value and
+ new price at the master's prompt:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; FAKECO 10.01
+QUOTESERVER&gt; </pre>
+ <p>
+ Then, go to either the master or the replica to see the updated
+ database:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 10.01
+ NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ And on the replica:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 10.01
+ NOINC .23
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Finally, to quit the applications, simply type
+ <tt class="literal">quit</tt> at both prompts:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt; quit
+&gt; </pre>
+ <p>
+ And on the master as well:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; quit
+&gt; </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="processingloop.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="fwrkmasterreplica.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="addfeatures.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Processing Loop </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 5. Additional Features</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/fmwrkconnectretry.html b/db/docs/gsg_db_rep/C/fmwrkconnectretry.html
new file mode 100644
index 000000000..c86b01c37
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/fmwrkconnectretry.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Connection Retries</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="electiontimes.html" title="Managing Election Times" />
+ <link rel="next" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Connection Retries</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="electiontimes.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fwrkmasterreplica.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="fmwrkconnectretry"></a>Managing Connection Retries</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In the event that a communication failure occurs between
+ two environments in a replication group, the replication framework will wait a set
+ amount of time before attempting to re-establish the
+ connection. You can configure this wait value using
+
+ <span>
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_timeout()</tt>.</span>
+
+ To do so, specify the
+ <tt class="literal">DB_REP_CONNECTION_RETRY</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ retry value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </span>
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="electiontimes.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fwrkmasterreplica.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Election Times </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 4. Replica versus Master Processes</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/fwrkmasterreplica.html b/db/docs/gsg_db_rep/C/fwrkmasterreplica.html
new file mode 100644
index 000000000..975bdd027
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/fwrkmasterreplica.html
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 4. Replica versus Master Processes</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="fmwrkconnectretry.html" title="Managing Connection Retries" />
+ <link rel="next" href="processingloop.html" title="Processing Loop" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 4. Replica versus Master Processes</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fmwrkconnectretry.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="processingloop.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="fwrkmasterreplica"></a>Chapter 4. Replica versus Master Processes</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkmasterreplica.html#determinestate">Determining State</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="processingloop.html">Processing Loop</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="exampledoloop.html">Example Processing Loop</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="exampledoloop.html#runningit">Running It</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Every environment participating in a replicated application
+ must know whether it is a <span class="emphasis"><em>master</em></span> or
+ <span class="emphasis"><em>replica</em></span>. The reason for this is
+ because, simply, the master can modify the database while
+ replicas cannot. As a result, not only will you open
+ databases differently depended on whether the environment is
+ running as a master, but the environment will frequently
+ behave quit a bit differently depending on whether it
+ thinks it is operating as the read/write interface for
+ your database.
+ </p>
+ <p>
+ Moreover, an environment must also be capable of
+ gracefully switching between master and replica states.
+ This means that the environment must be able to detect when
+ it has switched states.
+ </p>
+ <p>
+ Not surprisingly, a large part of your application's code
+ will be tied up in knowing which state a given
+ environment is in and then in the logic of how to behave depending on
+ its state.
+ </p>
+ <p>
+ This chapter shows you how to determine your environment's
+ state, and it then shows you some sample code on how
+ an application might behave depending on whether it is a
+ master or a replica in a replicated application.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="determinestate"></a>Determining State</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to determine whether your code is
+ running as a master or a replica, you implement a
+ callback whose function it is to respond to
+ events that happen within the DB library.
+ </p>
+ <p>
+ Note that this callback is usable for events beyond
+ those required for replication purposes. In this
+ section, however, we only discuss the
+ replication-specific events.
+ </p>
+ <p>
+ The callback is required to determine
+ which event has been passed to it, and then take
+ action depending on the event. For replication,
+ the events that we care about are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_MASTER</tt>
+
+ </p>
+ <p>
+ The local environment is now a master.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_CLIENT</tt>
+
+ </p>
+ <p>
+ The local environment is now a replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_STARTUPDONE</tt>
+
+ </p>
+ <p>
+ The replica has completed startup
+ synchronization and is now
+ processing log records received
+ from the master.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_NEWMASTER</tt>
+
+ </p>
+ <p>
+ An election was held and a new
+ environment was made a master. However,
+ the current environment <span class="emphasis"><em>is
+ not</em></span> the master. This
+ event exists so that you can
+ cause your code to take some
+ unique action in the event that the
+ replication groups switches masters.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that these events are raised whenever the
+ state is established. That is, when the current
+ environment becomes a client, and that includes
+ at application startup, the event is raised.
+ Also, when an election is held and a client is elected to be a
+ master, then the event occurs.
+ </p>
+ <p>
+ The implementation of this callback is fairly
+ simple. First you pass a structure to the
+ environment handle that you can use to record the
+ environment's state, and then you implement a switch
+ statement within the callback that you use to
+ record the current state, depending on the
+ arriving event.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;db.h&gt;
+/* Forward declaration */
+void *event_callback(DB_ENV *, u_int32_t, void *);
+
+...
+
+/* The structure we use to track our environment's state */
+typedef struct {
+ int is_master;
+} APP_DATA;
+
+...
+
+/*
+ * Inside our main() function, we declare an APP_DATA variable.
+ */
+APP_DATA my_app_data;
+my_app_data.is_master = 0; /* Assume we start as a replica */
+
+...
+
+/*
+ * Now we create our environment handle and set the APP_DATA structure
+ * to it's app_private member.
+ */
+if ((ret = db_env_create(&amp;dbenv, 0)) != 0 ) {
+ fprintf(stderr, &quot;Error creating handles: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+}
+dbenv-&gt;app_private = &amp;my_app_data;
+
+/* Having done that, register the callback with the
+ * Berkeley DB library
+ */
+dbenv-&gt;set_event_notify(dbenv, event_callback); </pre>
+ <p>
+ That done, we still need to implement the callback itself. This
+ implementation can be fairly trivial.
+</p>
+ <pre class="programlisting">/*
+ * A callback used to determine whether the local environment is a replica
+ * or a master. This is called by the replication framework
+ * when the local environment changes state.
+ */
+void *
+event_callback(DB_ENV *dbenv, u_int32_t which, void *info)
+{
+ APP_DATA *app = dbenv-&gt;app_private;
+
+ info = NULL; /* Currently unused. */
+
+ switch (which) {
+ case DB_EVENT_REP_MASTER:
+ app-&gt;is_master = 1;
+ break;
+
+ case DB_EVENT_REP_CLIENT:
+ app-&gt;is_master = 0;
+ break;
+
+ case DB_EVENT_REP_STARTUPDONE: /* fallthrough */
+ case DB_EVENT_REP_NEWMASTER:
+ /* Ignore. */
+ break;
+
+ default:
+ dbenv-&gt;errx(dbenv, &quot;ignoring event %d&quot;, which);
+ }
+} </pre>
+ <p>
+ Notice how we access the
+ <tt class="literal">APP_DATA</tt> information using the environment
+ handle's <tt class="literal">app_private</tt> data member. We also ignore
+ the <tt class="literal">DB_EVENT_REP_NEWMASTER</tt> and
+ <tt class="literal">DB_EVENT_REP_STARTUPDONE</tt> cases since these are not
+ relevant for simple replicated applications.
+</p>
+ <p>
+ Of course, this only gives us the current state of the environment. We
+ still need the code that determines what to do when the environment
+ changes state and how to behave depending on the state (described
+ in the next section).
+</p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fmwrkconnectretry.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="processingloop.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Connection Retries </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Processing Loop</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/fwrkpermmessage.html b/db/docs/gsg_db_rep/C/fwrkpermmessage.html
new file mode 100644
index 000000000..ecb3b882c
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/fwrkpermmessage.html
@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Permanent Message Handling</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="repmgr_init_example_c.html" title="Adding the Replication Framework to&#10; simple_txn&#10; &#10; " />
+ <link rel="next" href="electiontimes.html" title="Managing Election Times" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Permanent Message Handling</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repmgr_init_example_c.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="electiontimes.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="fwrkpermmessage"></a>Permanent Message Handling</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described in <a href="permmessages.html">Permanent Message Handling</a>,
+ messages are marked permanent if they contain database
+ modifications that should be committed at the replica.
+ DB's replication code decides if it must flush its
+ transaction logs to disk depending on whether it receives
+ sufficient permanent message acknowledgments from the
+ participating replica. More importantly, the thread
+ performing the transaction commit blocks
+ until it either receives enough acknowledgments, or the
+ acknowledgment timeout expires.
+ </p>
+ <p>
+ The replication framework is fully capable of managing permanent messages
+ for you if your application requires it (most do).
+ Almost all of the details of this are handled by the
+ replication framework for you. However, you do have to set some policies
+ that tell the replication framework how to handle permanent messages.
+ </p>
+ <p>
+ There are two things that you have to do:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Determine how many acknowledgments
+ must be received by the master.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify the amount of time that
+ replicas have to send their
+ acknowledgments.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpermpolicy"></a>Identifying Permanent Message Policies</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ You identify permanent message policies using the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;repmgr_set_ack_policy()</tt>
+
+ method.
+ </span>
+
+
+
+ Note that you can set permanent message
+ policies at any time during the life of the
+ application.
+ </p>
+ <p>
+ The following permanent message policies are available when you use
+ the replication framework:
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_NONE</tt>
+
+ </p>
+ <p>
+ No permanent message acknowledgments are required. If
+ this policy is selected, permanent message handling is
+ essentially &quot;turned off.&quot; That is, the master will
+ never wait for replica acknowledgments. In this case,
+ transaction log data is either flushed or not strictly
+ depending on the type of commit that is being performed
+ (synchronous or asynchronous).
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ONE</tt>
+
+ </p>
+ <p>
+ At least one replica must acknowledge the permanent
+ message within the timeout period.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ONE_PEER</tt>
+
+ </p>
+ <p>
+ At least one electable peer must acknowledge the permanent
+ message within the timeout period.
+
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ALL</tt>
+
+ </p>
+ <p>
+ All environments must acknowledge the message within
+ the timeout period. This
+ policy should be selected only if your replication
+ group has a small number of replicas, and those replicas
+ are on extremely reliable networks and servers.
+ </p>
+ <p>
+ When this flag is used, the actual number of
+ environments that must respond is
+ determined by the value set for
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_nsites()</tt>.</span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ALL_PEERS</tt>
+
+ </p>
+ <p>
+ All electable peers must acknowledge the message within the
+ timeout period. This
+ policy should be selected only if your replication
+ group is small, and its various environments
+ are on extremely reliable networks and servers.
+ </p>
+ <p>
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_QUORUM</tt>
+
+ </p>
+ <p>
+ A quorum of electable peers must acknowledge the message within the timeout period.
+ A quorum is reached when acknowledgments are received from the minimum number
+ of environments needed to ensure that the record remains durable
+ if an election is held. That is, the master wants to hear from enough
+ electable replicas that they have committed the record so that if an election
+ is held, the master knows the record will exist even if a new master is selected.
+ </p>
+ <p>
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ By default, a quorum of sites must must acknowledge a permanent
+ message in order for it considered to have been successfully
+ transmitted. The actual number of environments that must respond is
+ calculated using the value set with
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_nsites()</tt>.</span>
+
+
+</p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpermtimeout"></a>Setting the Permanent Message Timeout</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The permanent message timeout represents the
+ maximum amount of time the committing thread
+ will block waiting for message
+ acknowledgments. If sufficient
+ acknowledgments arrive before this timeout has
+ expired, the thread continues operations as
+ normal. However, if this timeout expires, the
+ committing thread flushes its transaction log
+ buffer before continuing with normal
+ operations.
+ </p>
+ <p>
+ You set the timeout value using the
+ <tt class="methodname">DB_ENV-&gt;rep_set_timeout()</tt>
+
+ method. When you do this, you provide the
+ <tt class="literal">DB_REP_ACK_TIMEOUT</tt> flag to
+ the <tt class="literal">which</tt> parameter, and the
+ timeout value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting"> dbenv-&gt;rep_set_timeout(dbenv, DB_REP_ACK_TIMEOUT, 100); </pre>
+ <p>
+ This timeout value can be set at anytime during the
+ life of the application.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="perm2fmwrkexample"></a>Adding a Permanent Message Policy to
+ <span>rep_mgr</span>
+
+
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For illustration purposes, we will now update
+ <tt class="literal">rep_mgr</tt>
+
+
+ such that it requires only one acknowledgment from
+ a replica on transactional commits. Also, we will give
+ this acknowledgment a 500 microsecond timeout
+ value. This means that our application's main
+ thread will block for up to 500 microseconds waiting
+ for an acknowledgment. If it does not receive at
+ least one acknowledgment in that amount of time,
+ DB will flush the transaction logs to disk
+ before continuing on.
+ </p>
+ <p>
+ This is a very simple update. We can perform the
+ entire thing immediately before we parse our
+ command line options. This is where we configure
+ our environment handle anyway, so it is a good
+ place to put it.
+ </p>
+ <pre class="programlisting"> /*
+ * Create and configure the environment handle.
+ */
+ if ((ret = db_env_create(&amp;dbenv, 0)) != 0 ) {
+ fprintf(stderr, &quot;Error creating handles: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ dbenv-&gt;set_errfile(dbenv, stderr);
+ dbenv-&gt;set_errpfx(dbenv, progname);
+
+ (void)dbenv-&gt;set_cachesize(dbenv, 0, CACHESIZE, 0);
+
+ /* Default priority is 100 */
+ dbenv-&gt;rep_set_priority(dbenv, 100);
+ <b class="userinput"><tt>/* Permanent messages require at least one ack */
+ dbenv-&gt;repmgr_set_ack_policy(dbenv, DB_REPMGR_ACKS_ONE);
+ /* Give 500 microseconds to receive the ack */
+ dbenv-&gt;rep_set_timeout(dbenv, DB_REP_ACK_TIMEOUT, 500);</tt></b>
+
+ /* Collect the command line options */
+ while ((ch = getopt(argc, argv, &quot;h:<b class="userinput"><tt>m:o:p:</tt></b>&quot;)) != EOF)
+
+ ... </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repmgr_init_example_c.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="electiontimes.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Adding the Replication Framework to
+ simple_txn
+
+  </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Election Times</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/gettingStarted.css b/db/docs/gsg_db_rep/C/gettingStarted.css
new file mode 100644
index 000000000..c1b4c86b7
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/gettingStarted.css
@@ -0,0 +1,41 @@
+body { width: 45em;
+ margin-left: 3em;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11pt;
+ }
+
+h2.title { margin-left: -1em;
+ font-family: Verdana, serif;
+ font-size: 16pt;
+ }
+
+h3.title { font-family: Verdana, serif;
+ font-size: 14pt;
+ }
+
+pre.programlisting {
+ font-family: monospace;
+ background-color: #eae8e9;
+}
+
+div.navheader { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+
+div.navheader table tr td { font-size: 9pt; }
+
+div.navfooter { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+div.navfooter table tr td { font-size: 9pt; }
+
+span.emphasis { font-style: italic; font-size: 9pt;}
+
+div.appendix div.informaltable { font-size: 9pt; }
+div.appendix div.informaltable td { vertical-align: top; }
+div.appendix div.informaltable p { margin-top: .25em; }
+div.appendix div.informaltable p { margin-bottom: .25em; }
+
+
diff --git a/db/docs/gsg_db_rep/C/index.html b/db/docs/gsg_db_rep/C/index.html
new file mode 100644
index 000000000..4fe9dc3af
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/index.html
@@ -0,0 +1,447 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Getting Started with Replicated Berkeley DB Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="next" href="preface.html" title="Preface" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Getting Started with Replicated Berkeley DB Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="book" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h1 class="title"><a id="id650925"></a>Getting Started with Replicated Berkeley DB Applications</h1>
+ </div>
+ <div>
+ <div class="legalnotice">
+ <p class="legalnotice-title">
+ <b>Legal Notice</b>
+ </p>
+ <p>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
+ </p>
+ <p>
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
+ </p>
+ <p>
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="pubdate">9/20/2006</p>
+ </div>
+ </div>
+ <div></div>
+ <hr />
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="preface">
+ <a href="preface.html">Preface</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="introduction.html">1. Introduction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#overview">Overview</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repenvirons">Replication Environments</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repdbs">Replication Databases</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#commlayer">Communications Layer</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#masterselect">Selecting a Master</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repadvantage.html">Replication Benefits</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="apioverview.html">The Replication APIs</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repapioverview">Replication API Overview</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="elections.html">Holding Elections</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#influencingelections">Influencing Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#winningelections">Winning Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#switchingmasters">Switching Masters</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="permmessages.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmessagenot">When Not to Manage
+ Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmanage">Managing Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permimplement">Implementing Permanent
+ Message Handling</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="txnapp.html">2. Transactional Application</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnapp.html#appoverview">Application Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="simpleprogramlisting.html">Program Listing</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#main_c">Function: main()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#create_env_c">Function: create_env()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#env_init_c">Function: env_init()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#doloop_c">Function: doloop()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#printstocks_c">
+ Function: print_stocks()
+
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="repapp.html">3. The DB Replication Framework</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="repapp.html#rep_init_code">
+ Starting and Stopping Replication
+ </a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#election_flags">Managing Election Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#thread_count">Selecting the Number of Threads</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repmgr_init_example_c.html">Adding the Replication Framework to
+ simple_txn
+
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkpermmessage.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermpolicy">Identifying Permanent Message Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermtimeout">Setting the Permanent Message Timeout</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#perm2fmwrkexample">Adding a Permanent Message Policy to
+ rep_mgr
+
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="electiontimes.html">Managing Election Times</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electiontimeout">Managing Election Timeouts</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electretrytime">Managing Election Retry Times</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="fmwrkconnectretry.html">Managing Connection Retries</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="fwrkmasterreplica.html">4. Replica versus Master Processes</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkmasterreplica.html#determinestate">Determining State</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="processingloop.html">Processing Loop</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="exampledoloop.html">Example Processing Loop</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="exampledoloop.html#runningit">Running It</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="addfeatures.html">5. Additional Features</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="c2ctransfer.html#fmwrkpeerserver">Identifying Peers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="bulk.html">Bulk Transfers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right" valign="top"> Preface</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/introduction.html b/db/docs/gsg_db_rep/C/introduction.html
new file mode 100644
index 000000000..e3368a9c3
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/introduction.html
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="repadvantage.html" title="Replication Benefits" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="repadvantage.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#overview">Overview</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repenvirons">Replication Environments</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repdbs">Replication Databases</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#commlayer">Communications Layer</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#masterselect">Selecting a Master</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repadvantage.html">Replication Benefits</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="apioverview.html">The Replication APIs</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repapioverview">Replication API Overview</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="elections.html">Holding Elections</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#influencingelections">Influencing Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#winningelections">Winning Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#switchingmasters">Switching Masters</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="permmessages.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmessagenot">When Not to Manage
+ Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmanage">Managing Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permimplement">Implementing Permanent
+ Message Handling</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on
+ replication as used with Berkeley DB (DB). It begins by offering a
+ general overview to replication and the benefits it provides. It also
+ describes the APIs that you use to implement replication, and it
+ describes architecturally the things that you need to do to your
+ application code in order to use the replication APIs. Finally, it
+ discusses the differences in backup and restore strategies that you
+ might pursue when using replication, especially where it comes to log
+ file removal.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="overview"></a>Overview</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The DB replication APIs allow you to distribute your database
+ write operations (performed on a read-write master) to one or
+ more read-only <span class="emphasis"><em>replicas</em></span>.
+ For this reason, DB's replication implementation is said to be a
+ <span class="emphasis"><em>single master, multiple replica</em></span> replication strategy.
+ </p>
+ <p>
+ Note that your database write operations can occur only on the
+ master; any attempt to write to a replica results in an error
+ being
+ <span>returned to</span>
+
+ the DB API used to perform the write.
+ </p>
+ <p>
+ A single replication master and all of its replicas are referred
+ to as a <span class="emphasis"><em>replication group</em></span>. While all
+ members of the replication group can reside on the same
+ machine, usually each replication participant is placed on a
+ separate physical machine somewhere on the network.
+ </p>
+ <p>
+ Note that all replication applications must first be
+ transactional applications. The data that the master transmits
+ its replicas are log records that are generated as records are
+ updated. Upon transactional commit, the master transmits a
+ transaction record which tells the replicas to commit the
+ records they previously received from the master. In order for
+ all of this to work, your replicated application must also be a
+ transactional application. For this reason, it is
+ recommended that you write and debug your DB application as
+ a stand-alone transactional application before introducing the
+ replication layer to your code.
+ </p>
+ <p>
+ Finally, be aware that all machines participating in the
+ replication group must share identical
+ <span class="emphasis"><em>endianess</em></span>. Endianess is the byte-order
+ strategy used by the computing platform to store multibyte
+ numbers. Berkeley DB is sensitive to byte order and so your
+ replication infrastructure must be consistent in this area.
+ We expect to remove this requirement in some future
+ release of the product.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repenvirons"></a>Replication Environments</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The most important requirement for a replication
+ participant is that it must use a unique Berkeley DB database
+ environment independent of all other replication
+ participants. So while multiple replication participants
+ can reside on the same physical machine, no two such participants
+ can share the same environment home directory.
+ </p>
+ <p>
+ For this reason, technically replication occurs between
+ unique <span class="emphasis"><em>database environments</em></span>. So in the strictest sense,
+ a replication group consists of a <span class="emphasis"><em>master
+ environment</em></span> and
+ one or more <span class="emphasis"><em>replica environments</em></span>. However, the reality
+ is that for production code, each such environment will
+ usually be located on its own unique machine. Consequently,
+ this manual sometimes talks about <span class="emphasis"><em>replication sites</em></span>, meaning the
+ unique combination of environment home directory, host and port that a specific
+ replication application is using.
+ </p>
+ <p>
+ There is no DB-specified limit to the number of
+ environments which can participate in a replication group.
+ The only limitation here is one of resources &#8212;
+ network bandwidth, for example.
+ </p>
+ <p>
+ (Note, however, that the replication framework does place a limit on the
+ number of environments you can use. See
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ for details.)
+ </p>
+ <p>
+ Also, DB's replication implementation requires all
+ participating environments to be assigned IDs that are
+ locally unique to the given environment. Depending on the
+ replication APIs that you choose to use, you may or may not
+ need to manage this particular detail.
+ </p>
+ <p>
+ For detailed information on database environments, see
+ the <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i>
+ guide. For more information on environment IDs, see
+ the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repdbs"></a>Replication Databases</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB's databases are managed and used in exactly the same way
+ as if you were writing a non-replicated application, with
+ a couple of caveats. First, the databases maintained in a replicated environment
+ must reside either in the <tt class="literal">ENV_HOME</tt>
+ directory, or in the directory identified by the
+ <tt class="methodname">DB_ENV-&gt;set_data_dir()</tt>
+
+
+ method. Unlike non-replication applications, you cannot place your
+ databases in a subdirectory below these locations. You should
+ also not use full path names for your databases or
+ environments as these are likely to break as to replicated
+ to other machines.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="commlayer"></a>Communications Layer</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to transmit database writes to the replication
+ replicas, DB requires a communications layer.
+ DB is agnostic as to what this layer should
+ look like. The only requirement is that it
+ be capable of passing two opaque data objects and an
+ environment ID from the master to its replicas without
+ corruption.
+ </p>
+ <p>
+ Because replicas are usually placed on different machines on
+ the network, the communications layer is usually some kind
+ of a network-aware implementation. Beyond that, its
+ implementation details are largely up to you. It could use
+ TCP/IP sockets, for example, or it could use
+ raw sockets if they perform better for your particular
+ application.
+ </p>
+ <p>
+ Note that you may not have to write your own communications
+ layer. DB provides a replication framework that
+ includes a fully-functional TCP/IP-based communications layer.
+ See <a href="apioverview.html">The Replication APIs</a>
+ for more information.
+ </p>
+ <p>
+ See the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ for a description of how to
+ write your own custom replication communications layer.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="masterselect"></a>Selecting a Master</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Every replication group is allowed one and only one
+ master environment. Almost always, masters are selected by
+ holding an <span class="emphasis"><em>election</em></span>. All such
+ elections are performed by the underlying Berkeley DB
+ replication code so you have to do very little to
+ implement them.
+ </p>
+ <p>
+ When holding an election, replicas &quot;vote&quot; on who should
+ be the master. Among replicas participating in the
+ election, the one with the most up-to-date set of log
+ records will win the election. Note that it's possible
+ for there to be a tie. When this occurs, priorities are
+ used to select the master. See
+ <a href="elections.html">Holding Elections</a>
+ for details.
+ </p>
+ <p>
+ For more information on holding and managing elections,
+ see <a href="elections.html">Holding Elections</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repadvantage.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Replication Benefits</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/manageblock.html b/db/docs/gsg_db_rep/C/manageblock.html
new file mode 100644
index 000000000..230d1a3db
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/manageblock.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Blocking Operations</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="next" href="noautoinit.html" title="Stop Auto-Initialization" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Blocking Operations</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="addfeatures.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="noautoinit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="manageblock"></a>Managing Blocking Operations</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a replica is in the process of synchronizing with its master, all DB
+ operations are blocked until such a time as the synchronization is completed.
+ For replicas with a heavy read load, these blocked operations may represent an
+ unacceptable loss in throughput.
+ </p>
+ <p>
+ You can configure DB so that it will not block when synchronization is in
+ process. Instead, the DB operation will fail,
+
+ <span>
+ immediately returning a <tt class="literal">DB_REP_LOCKOUT</tt> error.
+ </span>
+
+
+ When this happens, it is up to your application to your application to determine
+ what action to take (that is, logging the event, making an appropriate user
+ response, retrying the operation, and so forth).
+ </p>
+ <p>
+ To turn off blocking on synchronization, specify
+ <span>
+ <tt class="literal">DB_REP_CONF_NOWAIT</tt> to
+ <tt class="methodname">DB_ENV-&gt;rep_set_config()</tt>
+
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="addfeatures.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="noautoinit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 5. Additional Features </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Stop Auto-Initialization</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/noautoinit.html b/db/docs/gsg_db_rep/C/noautoinit.html
new file mode 100644
index 000000000..85771bd35
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/noautoinit.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Stop Auto-Initialization</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="manageblock.html" title="Managing Blocking Operations" />
+ <link rel="next" href="c2ctransfer.html" title="Client to Client Transfer" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Stop Auto-Initialization</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="manageblock.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="c2ctransfer.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="noautoinit"></a>Stop Auto-Initialization</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As stated in the previous section, when a replication replica is synchronizing
+ with its master, it will block all DB operations until the synchronization
+ is completed. You can turn off this behavior (see <a href="manageblock.html">Managing Blocking Operations</a>), but for replicas that have been out of touch
+ from their master for a very long time, this may not be enough.
+ </p>
+ <p>
+ If a replica has been out of touch from its master long enough, it may find that
+ it is not possible to perform synchronization. When this happens, by default the
+ master and replica internally decided to completely re-initialize the replica.
+ This re-initialization involves discarding the replica's current database(s) and
+ transferring new ones to it from the master. Depending on the size of the master's
+ databases, this can take a long time, during which time the replica will be
+ complete non-responsive when it comes to performing database operations.
+ </p>
+ <p>
+ It is possible that there is a time of the day when it is better to perform a replica
+ re-initialization. Or, you simply might want to decide to bring the replica up to
+ speed by restoring it's databases using a hot-backup taken from the master. Either
+ way, you can decide to prevent automatic-initialization of your replica. To do this
+ specify
+ <span>
+ <tt class="literal">DB_REP_CONF_NOAUTOINIT</tt> to
+ <tt class="methodname">DB_ENV-&gt;rep_set_config()</tt>
+
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="manageblock.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="c2ctransfer.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Blocking Operations </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Client to Client Transfer</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/permmessages.html b/db/docs/gsg_db_rep/C/permmessages.html
new file mode 100644
index 000000000..c2ed56f92
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/permmessages.html
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Permanent Message Handling</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="elections.html" title="Holding Elections" />
+ <link rel="next" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Permanent Message Handling</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="elections.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnapp.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="permmessages"></a>Permanent Message Handling</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Messages received by a replica may be marked with an
+ special flag that indicates the message is permanent.
+ Custom replicated applications will receive notification of
+ this flag via the <tt class="literal">DB_REP_ISPERM</tt> return value
+ from the
+ <tt class="methodname">DB_ENV-&gt;rep_process_message()</tt>
+
+ method.
+
+ There is no hard requirement that a replication application look for, or
+ respond to, this return code. However, because robust replicated
+ applications typically do manage permanent messages, we introduce
+ the concept here.
+ </p>
+ <p>
+ A message is marked as being permanent if the message
+ affects transactional integrity. For example,
+ transaction commit messages are an example of a message
+ that is marked permanent. What the application does
+ about the permanent message is driven by the durability
+ guarantees required by the application.
+ </p>
+ <p>
+ For example, consider what the replication framework does when it
+ has permanent message handling turned on and a
+ transactional commit record is sent to the replicas.
+ First, the replicas must transactional-commit the data
+ modifications identified by the message. And then, upon
+ a successful commit, the replication framework sends the master a
+ message acknowledgment.
+ </p>
+ <p>
+ For the master (again, using the replication framework), things are a little more complicated than
+ simple message acknowledgment. Usually in a replicated
+ application, the master commits transactions
+ asynchronously; that is, the commit operation does not
+ block waiting for log data to be flushed to disk before
+ returning. So when a master is managing permanent
+ messages, it typically blocks the committing thread
+ immediately before <tt class="methodname">commit()</tt>
+ returns. The thread then waits for acknowledgments from
+ its replicas. If it receives enough acknowledgments, it
+ continues to operate as normal.
+ </p>
+ <p>
+ If the master does not
+ receive message acknowledgments &#8212; or, more likely, it does not receive
+ <span class="emphasis"><em>enough</em></span> acknowledgments &#8212; the
+ committing thread flushes its log data to disk and then
+ continues operations as normal. The master application can
+ do this because replicas that fail to handle a message, for
+ whatever reason, will eventually catch up to the master. So
+ by flushing the transaction logs to disk, the master is
+ ensuring that the data modifications have made it to
+ stable storage in one location (its own hard drive).
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permmessagenot"></a>When Not to Manage
+ Permanent Messages</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ There are two reasons why you might
+ choose to not implement permanent messages.
+ In part, these go to why you are using
+ replication in the first place.
+ </p>
+ <p>
+ One class of applications uses replication so that
+ the application can improve transaction
+ through-put. Essentially, the application chooses a
+ reduced transactional durability guarantee so as to
+ avoid the overhead forced by the disk I/O required
+ to flush transaction logs to disk. However, the
+ application can then regain that durability
+ guarantee to a certain degree by replicating the
+ commit to some number of replicas.
+ </p>
+ <p>
+ Using replication to improve an application's
+ transactional commit guarantee is called
+ <span class="emphasis"><em>replicating to the network.</em></span>
+ </p>
+ <p>
+ In extreme cases where performance is of critical
+ importance to the application, the master might
+ choose to both use asynchronous commits
+ <span class="emphasis"><em>and</em></span> decide not to wait for
+ message acknowledgments. In this case the master
+ is simply broadcasting its commit activities to its
+ replicas without waiting for any sort of a reply. An
+ application like this might also choose to use
+ something other than TCP/IP for its network
+ communications since that protocol involves a fair
+ amount of packet acknowledgment all on its own. Of
+ course, this sort of an application should also be
+ very sure about the reliability of both its network and
+ the machines that are hosting its replicas.
+ </p>
+ <p>
+ At the other end of the extreme, there is a
+ class of applications that use replication
+ purely to improve read performance. This sort
+ of application might choose to use synchronous
+ commits on the master because write
+ performance there is not of critical
+ performance. In any case, this kind of an
+ application might not care to know whether its
+ replicas have received and successfully handled
+ permanent messages because the primary storage
+ location is assumed to be on the master, not
+ the replicas.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permmanage"></a>Managing Permanent Messages</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ With the exception of a rare breed of
+ replicated applications, most masters need some
+ view as to whether commits are occurring on
+ replicas as expected. At a minimum, this is because
+ masters will not flush their log buffers unless
+ they have reason to expect that permanent
+ messages have not been committed on the
+ replicas.
+ </p>
+ <p>
+ That said, it is important to remember that
+ managing permanent messages involves a fair amount
+ of network traffic. The messages must be sent to
+ the replicas and the replicas must then acknowledge
+ the message. This represents a performance overhead
+ that can be worsened by congested networks or
+ outright outages.
+ </p>
+ <p>
+ Therefore, when managing permanent messages, you
+ must first decide on how many of your replicas must
+ send acknowledgments before your master decides
+ that all is well and it can continue normal
+ operations. When making this decision, you could
+ decide that <span class="emphasis"><em>all</em></span> replicas must
+ send acknowledgments. But unless you have only one
+ or two replicas, or you are replicating over a very
+ fast and reliable network, this policy could prove
+ very harmful to your application's performance.
+ </p>
+ <p>
+ Therefore, a common strategy is to wait for an
+ acknowledgment from a simple majority of replicas.
+ This ensures that commit activity has occurred on
+ enough machines that you can be reliably certain
+ that data writes are preserved across your network.
+ </p>
+ <p>
+ Remember that replicas that do not acknowledge a
+ permanent message are not necessarily unable to
+ perform the commit; it might be that network
+ problems have simply resulted in a delay at the
+ replica. In any case, the underlying DB
+ replication code is written such that a replica that
+ falls behind the master will eventually take action
+ to catch up.
+ </p>
+ <p>
+ Depending on your application, it may be
+ possible for you to code your permanent message
+ handling such that acknowledgment must come
+ from only one or two replicas. This is a
+ particularly attractive strategy if you are
+ closely managing which machines are eligible to
+ become masters. Assuming that you have one or
+ two machines designated to be a master in the
+ event that the current master goes down, you
+ may only want to receive acknowledgments from
+ those specific machines.
+ </p>
+ <p>
+ Finally, beyond simple message acknowledgment, you
+ also need to implement an acknowledgment timeout
+ for your application. This timeout value is simply
+ meant to ensure that your master does not hang
+ indefinitely waiting for responses that will never
+ come because a machine or router is down.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permimplement"></a>Implementing Permanent
+ Message Handling</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ How you implement permanent message handling
+ depends on which API you are using to implement
+ replication. If you are using the replication framework, then
+ permanent message handling is configured using
+ policies that you specify to the framework. In
+ this case, you can configure your application
+ to:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Ignore permanent messages (the master
+ does not wait for acknowledgments).
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from a
+ quorum. A quorum is reached when
+ acknowledgments are received from the
+ minimum number of electable
+ replicas needed to ensure that
+ the record remains durable if
+ an election is held.
+ </p>
+ <p>
+ The goal here is to be
+ absolutely sure the record is
+ durable. The master wants to
+ hear from enough electable
+ replicas that they have
+ committed the record so that if
+ an election is held, the master
+ knows the record will exist even
+ if a new master is selected.
+ </p>
+ <p>
+ This is the default policy.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require an acknowledgment from at least one replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from
+ all replicas.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require an acknowledgment from a
+ peer. (The replication framework allows you to
+ designate one environment as a peer of
+ another).
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from
+ all peers.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that the replication framework simply flushes its transaction
+ logs and moves on if a permanent message is not
+ sufficiently acknowledged.
+ </p>
+ <p>
+ For details on permanent message handling with the
+ replication framework, see <a href="fwrkpermmessage.html">Permanent Message Handling</a>.
+ </p>
+ <p>
+ If these policies are not sufficient for your
+ needs, or if you want your application to take more
+ corrective action than simply flushing log buffers
+ in the event of an unsuccessful commit, then you
+ must use write a custom replication implementation.
+ </p>
+ <p>
+ For custom replication implementation, messages are
+ sent from the master to its replica using a
+ <tt class="function">send()</tt> callback that you
+ implement. Note, however, that DB's replication
+ code automatically sets the permanent
+ flag for you where appropriate.
+ </p>
+ <p>
+ If the <tt class="function">send()</tt> callback returns with a
+ non-zero status, DB flushes the transaction log
+ buffers for you. Therefore, you must cause your
+ <tt class="function">send()</tt> callback to block waiting
+ for acknowledgments from your replicas.
+ As a part of implementing the
+ <tt class="function">send()</tt> callback, you implement
+ your permanent message handling policies. This
+ means that you identify how many replicas must
+ acknowledge the message before the callback can
+ return <tt class="literal">0</tt>. You must also
+ implement the acknowledgment timeout, if any.
+ </p>
+ <p>
+ Further, message acknowledgments are sent from the
+ replicas to the master using a communications
+ channel that you implement (the replication code
+ does not provide a channel for acknowledgments).
+ So implementing permanent messages means that when
+ you write your replication communications channel,
+ you must also write it in such a way as to also
+ handle permanent message acknowledgments.
+ </p>
+ <p>
+ For more information on implementing permanent
+ message handling using a custom replication layer,
+ see the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="elections.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnapp.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Holding Elections </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 2. Transactional Application</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/preface.html b/db/docs/gsg_db_rep/C/preface.html
new file mode 100644
index 000000000..db9d98bdc
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/preface.html
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Preface</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="next" href="introduction.html" title="Chapter 1. Introduction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Preface</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="preface" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="preface"></a>Preface</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This document describes how to write replicated Berkeley DB applications.
+ The APIs used to implement replication in your application
+ are described here. This book describes the concepts surrounding replication, the scenarios under which you
+ might choose to use it, and the architectural requirements that a replication application has over a
+ transactional application.
+ </p>
+ <p>
+ This book is aimed at the software engineer responsible for writing a
+ replicated DB application.
+ </p>
+ <p>
+ This book assumes that you have already read and understood the
+ concepts contained in the
+ <span><i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.</span>
+
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="conventions"></a>Conventions Used in this Book</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following typographical conventions are used within in this manual:
+ </p>
+ <p>
+ Structure names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
+ names</tt>. For example: &quot;<tt class="methodname">DB-&gt;open()</tt> is a method
+ on a <tt class="classname">DB</tt> handle.&quot;
+ </p>
+ <p>
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
+ </p>
+ <p>
+ Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
+ For example:
+ </p>
+ <pre class="programlisting">/* File: gettingstarted_common.h */
+typedef struct stock_dbs {
+ DB *inventory_dbp; /* Database containing inventory information */
+ DB *vendor_dbp; /* Database containing vendor information */
+
+ char *db_home_dir; /* Directory containing the database files */
+ char *inventory_db_name; /* Name of the inventory database */
+ char *vendor_db_name; /* Name of the vendor database */
+} STOCK_DBS; </pre>
+ <p>
+ In some situations, programming examples are updated from one chapter to the next. When
+ this occurs, the new code is presented in <b class="userinput"><tt>monospaced bold</tt></b> font. For example:
+ </p>
+ <pre class="programlisting">typedef struct stock_dbs {
+ DB *inventory_dbp; /* Database containing inventory information */
+ DB *vendor_dbp; /* Database containing vendor information */
+ <b class="userinput"><tt>DB *itemname_sdbp; /* Index based on the item name index */</tt></b>
+ char *db_home_dir; /* Directory containing the database files */
+ <b class="userinput"><tt>char *itemname_db_name; /* Itemname secondary database */</tt></b>
+ char *inventory_db_name; /* Name of the inventory database */
+ char *vendor_db_name; /* Name of the vendor database */
+} STOCK_DBS; </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Finally, notes of special interest are represented using a note block such
+ as this.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ transactional DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/C/index.html" target="_top">
+ Getting Started with Transaction Processing for C
+ </a>
+
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/C/index.html" target="_top">
+ Getting Started with Berkeley DB for C
+ </a>
+
+
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/frame.html" target="_top">
+ Berkeley DB C API
+ </a>
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Getting Started with Replicated Berkeley DB Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/processingloop.html b/db/docs/gsg_db_rep/C/processingloop.html
new file mode 100644
index 000000000..94c0035a9
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/processingloop.html
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Processing Loop</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="previous" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="next" href="exampledoloop.html" title="Example Processing Loop" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Processing Loop</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fwrkmasterreplica.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Replica versus Master Processes</th>
+ <td width="20%" align="right"> <a accesskey="n" href="exampledoloop.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="processingloop"></a>Processing Loop</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Typically the central part of any replication application
+ is some sort of a continuous loop that constantly
+ checks the state of the environment (whether it is a
+ replica or a master), opens and/or closes the
+ databases as is necessary, and performs other useful
+ work. A loop such as this one must of necessity
+ take special care to know whether it is operating
+ on a master or a replica environment because all of its
+ activities are dependent upon that state.
+ </p>
+ <p>
+ The flow of activities through the loop will
+ generally be as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Check whether the environment has
+ changed state. If it has, you
+ might want to reopen your
+ database handles, especially if
+ you opened your replica's
+ database handles as read-only.
+ In this case, you might need to
+ reopen them as read-write.
+ However, if you always open your
+ database handles as read-write,
+ then it is not automatically necessary to
+ reopen the databases due to a
+ state change. Instead, you
+ could check for a
+ <span>
+ <tt class="literal">DB_REP_HANDLE_DEAD</tt>
+ return code
+ </span>
+
+
+ when you use your
+ database handle(s). If you see
+ this, then you need to reopen
+ your database handle(s).
+ </p>
+ </li>
+ <li>
+ <p>
+ If the databases are closed,
+ create new database handles,
+ configure the handle as is
+ appropriate, and then open the
+ databases. Note that handle
+ configuration will be different,
+ depending on whether the handle
+ is opened as a replica or a
+ master. At a minimum, the master
+ should be opened with database
+ creation privileges, whereas the
+ replica does not need to be. You
+ must also open the master such
+ that its databases are
+ read-write. You
+ <span class="emphasis"><em>can</em></span> open
+ replicas with read-only
+ databases, so long as you are
+ prepared to closed and the reopen
+ the handle in the event the
+ client becomes a master.
+ </p>
+ <p>
+ Also, note that if the local
+ environment
+ is a replica, then it is possible
+ that databases do not currently
+ exist. In this case, the database
+ open attempts will fail. Your
+ code will have to take this
+ corner case into account
+ (described below).
+ </p>
+ </li>
+ <li>
+ <p>
+ Once the databases are opened,
+ check to see if the local
+ environment is a
+ master. If it is, do whatever it is
+ a master should do for your
+ application.
+ </p>
+ <p>
+ Remember that the code for your
+ master should include some way
+ for you to tell the master
+ to exit gracefully.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the local environment is not a
+ master, then do whatever it is
+ your replica environments should do.
+ Again, like the code for your
+ master environments, you should provide
+ a way for your replicas to exit
+ the processing loop gracefully.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ The following code fragment illustrates
+ these points (note that we fill out this
+ fragment with a working example
+ next in this chapter):
+ </p>
+ <pre class="programlisting">/* loop to manage replication activities */
+
+DB *dbp;
+int ret;
+APP_DATA *app_data;
+u_int32_t flags;
+
+dbp = NULL;
+ret = 0;
+
+/*
+ * Remember that for this to work, an APP_DATA struct would have first
+ * had to been set to the environment handle's app_private data
+ * member. (dbenv is presumable declared and opened in another part of
+ * the code.)
+ */
+app_data = dbenv-&gt;app_private;
+
+
+/*
+ * Infinite loop. We exit depending on how the master and replica code
+ * is written.
+ */
+for (;;) {
+ /* If dbp is not opened, we need to open it. */
+ if (dbp == NULL) {
+ /*
+ * Create the handle and then configure it. Before you open
+ * it, you have to decide what open flags to use:
+ */
+ flags = DB_AUTO_COMMIT;
+ if (app_data-&gt;is_master)
+ flags |= DB_CREATE
+ /*
+ * Now you can open your database handle, passing to it the
+ * flags selected above.
+ *
+ * One thing to watch out for is a case where the databases
+ * you are trying to open do not yet exist. This can happen
+ * for replicas where the databases are being opened
+ * read-only. If this happens, ENOENT is returned by the
+ * open() call.
+ */
+
+ if (( ret = dbp-&gt;open(...)) != 0) {
+ if (ret == ENOENT) {
+ /* Close the database handle, then null it out, then
+ * sleep for some amount of time in order to give
+ * replication a chance to create the databases.
+ */
+ dbp-&gt;close(dbp, 0); // Ignoring ret code.
+ // Not robust!
+ dbp = NULL;
+ sleep(SOME_SLEEPTIME);
+ continue;
+ }
+ /*
+ * Otherwise, some other error has happened and general
+ * error handling should be used.
+ */
+ goto err;
+ }
+ }
+
+ /*
+ * Now that the databases have been opened, continue with general
+ * processing, depending on whether we are a master or a replica.
+ */
+ if (app_data-&gt;is_master) {
+ /*
+ * Do master stuff here. Don't forget to include a way to
+ * gracefully exit the loop. */
+ */
+ } else {
+ /*
+ * Do replica stuff here. As is the case with the master
+ * code, be sure to include a way to gracefully exit the
+ * loop.
+ */
+ }
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fwrkmasterreplica.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="fwrkmasterreplica.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="exampledoloop.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 4. Replica versus Master Processes </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Example Processing Loop</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/repadvantage.html b/db/docs/gsg_db_rep/C/repadvantage.html
new file mode 100644
index 000000000..c7ab72c1a
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/repadvantage.html
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Replication Benefits</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="next" href="apioverview.html" title="The Replication APIs" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Replication Benefits</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="apioverview.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="repadvantage"></a>Replication Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ Replication offers your application a number of benefits that
+ can be a tremendous help. Primarily replication's benefits
+ revolve around performance, but there is also a benefit in
+ terms of data durability guarantees.
+ </p>
+ <p>
+ Briefly, the reasons why you might choose to implement
+ replication in your DB application are:
+ </p>
+ <div class="itemizedlist">
+ <div class="itemizedlist">
+ <ul type="circle">
+ <li>
+ <p>
+ Improved application reliability.
+ </p>
+ <p>
+ By spreading your data across multiple
+ machines, you can ensure that your
+ application's data continues to be
+ available even in the event of a
+ hardware failure on any given machine in
+ the replication group.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <ul type="disc">
+ <li>
+ <p>
+ Improve read performance.
+ </p>
+ <p>
+ By using replication you can spread data reads across
+ multiple machines on your network. Doing so allows you
+ to vastly improve your application's read performance.
+ This strategy might be particularly interesting for
+ applications that have readers on remote network nodes;
+ you can push your data to the network's edges thereby
+ improving application data read responsiveness.
+ </p>
+ <p>
+ Additionally, depending on how you partition your
+ data across your replicas, any given replica may
+ only need to cache part of your data, decreasing
+ cache misses and reducing I/O on the client.
+ </p>
+ </li>
+ <li>
+ <p>
+ Improve transactional commit performance
+ </p>
+ <p>
+ In order to commit a transaction and achieve a
+ transactional durability guarantee, the commit must be
+ made <span class="emphasis"><em>durable</em></span>. That is, the commit
+ must be written to disk (usually, but not always,
+ synchronously) before the application's thread of
+ control can continue operations.
+ </p>
+ <p>
+ Replication allows you to avoid this disk I/O and still
+ maintain a degree of durability by <span class="emphasis"><em>committing
+ to the network</em></span>. In other words, you relax
+ your transactional durability guarantees on the master,
+ but by virtue of replicating the data across the
+ network you gain some additional durability guarantees
+ above what is provided locally.
+ </p>
+ <p>
+ Usually this strategy is implemented using some form of
+ an asynchronous transactional commit on the master. In
+ this way your data writes will eventually be written to
+ disk, but your application will not have to wait for
+ the disk I/O to complete before continuing with its
+ next operation.
+ </p>
+ <p>
+ Note that it is possible to cause DB's replication
+ implementation to wait to hear from one or
+ more replica's as to whether they have successfully
+ saved the write before continuing. However, in this
+ case you might be trading performance for a even
+ higher durability guarantee (see below).
+ </p>
+ </li>
+ <li>
+ <p>
+ Improve data durability guarantee.
+ </p>
+ <p>
+ In a traditional transactional application, you commit your
+ transactions such that data modifications are saved to
+ disk. Beyond this, the durability of your data is
+ dependent upon the backup strategy that you choose to
+ implement for your site.
+ </p>
+ <p>
+ Replication allows you to increase this durability
+ guarantee by ensuring that data modifications are
+ written to multiple machines. This means that multiple
+ disks, disk controllers, power supplies, and CPUs are
+ used to ensure that your data modification makes it to
+ stable storage. In other words, replication allows you
+ to minimize the problem of a single point of failure
+ by using more hardware to guarantee your data writes.
+ </p>
+ <p>
+ If you are using replication for this reason, then you
+ probably will want to configure your application such
+ that it waits to hear about a successful commit from
+ one or more replicas before continuing with the next
+ operation. This will obviously impact your
+ application's write performance to some degree
+ &#8212; with the performance penalty being largely dependent
+ upon the speed and stability of the network connecting
+ your replication group.
+ </p>
+ <p>
+ For more information, see <a href="fwrkpermmessage.html">Permanent Message Handling</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="apioverview.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> The Replication APIs</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/repapp.html b/db/docs/gsg_db_rep/C/repapp.html
new file mode 100644
index 000000000..d46f167d9
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/repapp.html
@@ -0,0 +1,720 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 3. The DB Replication Framework</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="simpleprogramlisting.html" title="Program Listing" />
+ <link rel="next" href="repmgr_init_example_c.html" title="Adding the Replication Framework to&#10; simple_txn&#10; &#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 3. The DB Replication Framework</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="simpleprogramlisting.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="repmgr_init_example_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="repapp"></a>Chapter 3. The DB Replication Framework</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="repapp.html#rep_init_code">
+ Starting and Stopping Replication
+ </a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#election_flags">Managing Election Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#thread_count">Selecting the Number of Threads</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repmgr_init_example_c.html">Adding the Replication Framework to
+ simple_txn
+
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkpermmessage.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermpolicy">Identifying Permanent Message Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermtimeout">Setting the Permanent Message Timeout</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#perm2fmwrkexample">Adding a Permanent Message Policy to
+ rep_mgr
+
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="electiontimes.html">Managing Election Times</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electiontimeout">Managing Election Timeouts</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electretrytime">Managing Election Retry Times</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="fmwrkconnectretry.html">Managing Connection Retries</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ The easiest way to add replication to your transactional
+ application is to use the replication framework. The replication framework provides a comprehensive
+ communications layer that enables replication. For a brief listing
+ of the replication framework's feature set, see
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>.
+ </p>
+ <p>
+ To use the replication framework, you make use of special methods off the
+ <span><tt class="classname">DB_ENV</tt> class.</span>
+
+ That is:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Create an environment handle as normal.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your environment handle as
+ needed (e.g. set the error file and
+ error prefix values, if desired).
+ </p>
+ </li>
+ <li>
+ <p>
+ Use the replication framework replication methods to
+ configure the replication framework. Using these
+ methods causes DB to know that you
+ are using the replication framework.
+ </p>
+ <p>
+ Configuring the replication framework
+ entails setting its replication
+ priority, setting the TCP/IP address
+ that this replication environment will use for
+ incoming replication messages, identify
+ TCP/IP addresses of other replication
+ environments, setting the number of
+ replication environments in the
+ replication group, and so forth. These actions are
+ discussed throughout the remainder of
+ this chapter.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your environment handle. When you
+ do this, be sure to specify
+
+ <span><tt class="literal">DB_INIT_REP</tt> and
+ <tt class="literal">DB_THREAD</tt> to your
+ open flags. (This is in addition to the
+ flags that you normally use for a
+ single-threaded transactional
+ application). The first of these causes
+ replication to be initialized for the
+ application. The second causes your
+ environment handle to be free-threaded
+ (thread safe). Both flags are required
+ for replication framework usage.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Start replication by calling
+ <span><tt class="methodname">DB_ENV-&gt;repmgr_start()</tt>.</span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your databases as needed. Masters
+ must open their databases for read
+ and write activity. Replicas can open
+ their databases for read-only activity, but
+ doing so means they must re-open the
+ databases if the replica ever becomes a
+ master. Either way, replicas should never attempt to
+ write to the database(s) directly.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ The replication framework allows you to only use one
+ environment handle per process.
+ </p>
+ </div>
+ <p>
+ When you are ready to shut down your application:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Close your databases
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your environment. This causes
+ replication to stop as well.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Before you can use the replication framework, you may have to
+ enable it in your DB library. This is
+ <span class="emphasis"><em>not</em></span> a requirement for
+ Microsoft Windows systems, or Unix systems that
+ use pthread mutexes by default. Other systems,
+ notably BSD and BSD-derived systems (such as
+ Mac OS X), must enable the replication framework when you
+ configure the DB build.
+ </p>
+ <p>
+ You do this by <span class="emphasis"><em>not</em></span>
+ disabling replication and by configuring the
+ library with POSIX threads support. In other
+ words, replication must be turned on in the
+ build (it is by default), and POSIX thread
+ support must be enabled if it is not already by
+ default. To do this, use the
+ <tt class="literal">--enable-pthread_api</tt> switch
+ on the configure script.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">../dist/configure --enable-pthread-api</pre>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="rep_init_code"></a>
+ Starting and Stopping Replication
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described above, you introduce replication to an
+ application by starting with a transactional
+ application, performing some basic replication
+ configuration, and then starting replication using
+ <span><tt class="methodname">DB_ENV-&gt;repmgr_start()</tt>.</span>
+
+
+ </p>
+ <p>
+ You stop replication by closing your environment
+ cleanly, as is normal for an DB application.
+ </p>
+ <p>
+ For example, the following code fragment initializes, then
+ stops and starts replication. Note that other replication
+ activities are omitted for brevity.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Note that the following code fragment would be part of a larger
+ class that must implement
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>. This
+ class is used to track state changes between master and
+ replica. We put off that implementation for the moment, but the
+ point remains that the following code fragment would be
+ contained in a method or two that you would include in your
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>
+ implementation.
+ </p>
+ </div>
+ <pre class="programlisting">#include &lt;db.h&gt;
+
+/* Use a 10mb cache */
+#define CACHESIZE (10 * 1024 * 1024)
+
+...
+
+ DB_ENV *dbenv; /* Environment handle. */
+ const char *progname; /* Program name. */
+ const char *envHome; /* Environment home directory. */
+ const char *listen_host; /* A TCP/IP hostname. */
+ const char *other_host; /* A TCP/IP hostname. */
+ int ret; /* Error return code. */
+ u_int16 listen_port; /* A TCP/IP port. */
+ u_int16 other_port; /* A TCP/IP port. */
+
+ /* Initialize variables */
+ dbenv = NULL;
+ progname = &quot;example_replication&quot;;
+ envHome = &quot;ENVIRONMENT_HOME&quot;;
+ listen_host = &quot;mymachine.sleepycat.com&quot;;
+ listen_port = 5001;
+ other_host = &quot;anothermachine.sleepycat.com&quot;;
+ other_port = 4555;
+ ret = 0;
+
+ /* Create the environment handle */
+ if ((ret = db_env_create(&amp;dbenv, 0)) != 0 ) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Configure the environment handle. Here we configure asynchronous
+ * transactional commits for performance reasons.
+ */
+ dbenv-&gt;set_errfile(dbenv, stderr);
+ dbenv-&gt;set_errpfx(dbenv, progname);
+ (void)dbenv-&gt;set_cachesize(dbenv, 0, CACHESIZE, 0);
+ (void)dbenv-&gt;set_flags(dbenv, DB_TXN_NOSYNC, 1);
+
+
+ /*
+ * Configure the local address. This is the local hostname and port
+ * that this replication participant will use to receive incoming
+ * replication messages. Note that this can be performed only once for
+ * the application. It is required.
+ */
+ if ((ret = dbenv-&gt;repmgr_set_local_site(dbenv, listen_host,
+ listen_port, 0)) != 0) {
+ fprintf(stderr, &quot;Could not set local address (%d).\n&quot;, ret);
+ goto err;
+ }
+
+ /*
+ * Set this application's priority. This is used for elections.
+ *
+ * Set this number to a positive integer, or 0 if you do not want this
+ * site to be able to become a master.
+ */
+ dbenv-&gt;rep_set_priority(dbenv, 100);
+
+ /*
+ * Add a site to the list of replication environments known to this
+ * application.
+ */
+ if (dbenv-&gt;repmgr_add_remote_site(dbenv, other_host, other_port) != 0) {
+ fprintf(stderr, &quot;Could not add site %s.\n&quot;, other_host);
+ goto err;
+ }
+
+ /*
+ * Identify the number of sites in the replication group. This is
+ * necessary so that elections and permanent message handling can be
+ * performed correctly.
+ */
+ if (dbenv-&gt;repmgr_add_nsites(dbenv, 2) != 0) {
+ fprintf(stderr, &quot;Could not set the number of sites.\n&quot;;
+ goto err;
+ }
+
+ /* Open the environment handle. Note that we add DB_THREAD and
+ * DB_INIT_REP to the list of flags. These are required.
+ */
+ if ((ret = dbenv-&gt;open(dbenv, home, DB_CREATE | DB_RECOVER |
+ DB_INIT_LOCK | DB_INIT_LOG |
+ DB_INIT_MPOOL | DB_INIT_TXN |
+ DB_THREAD | DB_INIT_REP,
+ 0)) != 0) {
+ goto err;
+ }
+
+ /* Start the replication framework such that it uses 3 threads. */
+ if ((ret = dbenv-&gt;repmgr_start(dbenv, 3, DB_REP_ELECTION)) != 0)
+ goto err;
+
+ /* Sleep to give ourselves time to find a master */
+ sleep(5);
+
+ /*
+ **********************************************************
+ *** All other application code goes here, including *****
+ *** database opens *****
+ **********************************************************
+ */
+
+err: /*
+ * Make sure all your database handles are closed
+ * (omitted from this example).
+ */
+
+ /* Close the environment */
+ if (dbenv != NULL)
+ (void)dbenv-&gt;close(dbenv, 0);
+
+ /* All done */
+ return (ret); </pre>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="election_flags"></a>Managing Election Policies</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is worth taking a look at the
+
+ <span>
+ startup election flags accepted by
+ <span><tt class="methodname">DB_ENV-&gt;repgmr_start()</tt>.</span>
+
+ These flags control how your replication application will
+ behave when it first starts up.
+ </span>
+
+
+ </p>
+ <p>
+ In the previous example, we specified
+ <tt class="literal">DB_REP_ELECTION</tt>
+
+ when we started replication. This causes the
+ application to try to find a master upon startup. If it
+ cannot, it calls for an election. In the event an
+ election is held, the environment receiving the most number of
+ votes will become the master.
+ </p>
+ <p>
+ There's some important points to make here:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ This
+ <span>flag</span>
+
+ only requires that other
+ environments in the replication group
+ participate in the vote. There is no
+ requirement that
+ <span class="emphasis"><em>all</em></span> such
+ environments participate. In other
+ words, if an environment
+ starts up, it can call for an
+ election, and select a master, even
+ if all other environment have not yet
+ joined the replication group.
+ </p>
+ </li>
+ <li>
+ <p>
+ It only requires a simple majority of
+ participating environments to elect a master. The number of
+ environments used to calculate the simple
+ majority is based on the value set for
+
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_nsites()</tt>.</span>
+
+
+
+
+ This is always true of elections held using the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ As always, the environment participating in the election with the most
+ up-to-date log files is selected as
+ master. If an environment with better log files
+ has not yet joined the replication
+ group, it may not become the master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Any one of these points may be enough to cause a
+ less-than-optimum environment to be selected as master.
+ Therefore, to give you a better degree of control over
+ which environment becomes a master at application startup,
+ the replication framework offers the following start-up
+ <span>flags:</span>
+
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Flag</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_MASTER</tt>
+ </td>
+ <td>
+ <p>
+ The application starts up and declares itself to be a master
+ without calling for an election. It is an error for more
+ than one environment to start up using this flag, or for
+ an environment
+ to use this flag when a master already exists.
+ </p>
+ <p>
+ Note that no replication group should
+ <span class="emphasis"><em>ever</em></span> operate with more than
+ one master.
+ </p>
+ <p>
+ In the event that a environment attempts to become a
+ master when a master already exists, the
+ replication code will resolve the problem by
+ holding an election. Note, however, that there
+ is always a possibility of data loss in the face
+ of duplicate masters, because once a master is
+ selected, the environment that loses the election will
+ have to roll back any transactions committed
+ until it is in sync with the &quot;real&quot; master.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_CLIENT</tt>
+ </td>
+ <td>
+ <p>
+ The application starts up and declares
+ itself to be a replica without calling for
+ an election. Note that the application
+ can still become a master if a subsequent
+ application starts up, calls for an
+ election, and this application is elected
+ master.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_ELECTION</tt>
+ </td>
+ <td>
+ <p>
+ As described above, the application starts up,
+ looks for a master, and if one is not found calls
+ for an election.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_FULL_ELECTION</tt>
+ </td>
+ <td>
+ <p>
+ Identical to
+ <tt class="literal">DB_REP_ELECTION</tt>
+
+ except that the election requires all
+ known members of the replication group to
+ participate. If a given environment has not yet
+ started but it is included in the
+ replication group count (using
+ <span><tt class="methodname">DB_ENV-&gt;rep_set_nsites()</tt>)</span>
+
+
+ then a master can not be elected.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="thread_count"></a>Selecting the Number of Threads</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Under the hood, the replication framework is threaded and you can
+ control the number of threads used to process messages received from
+ other replicas. The threads that the replication framework uses are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Incoming message thread. This thread
+ receives messages from the site's
+ socket and passes those messages to
+ message processing threads (see below)
+ for handling.
+ </p>
+ </li>
+ <li>
+ <p>
+ Outgoing message thread. Outgoing
+ are performed in whatever thread
+ performed a write to the database(s).
+ That is, the thread that called, for
+ example,
+ <tt class="methodname">DB-&gt;put()</tt>
+
+
+ is the thread that writes replication messages
+ about that fact to the socket.
+ </p>
+ <p>
+ Note that if this write activity would
+ cause the thread to be blocked due to
+ some condition on the socket, the replication framework
+ will hand the outgoing message to the
+ incoming message thread, and it will
+ then write the message to the socket.
+ This prevents your database write
+ threads from blocking due to abnormal
+ network I/O conditions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Message processing threads are
+ responsible for parsing and then
+ responding to incoming replication
+ messages. Typically, a response will
+ include write activity to your
+ database(s), so these threads can be
+ busy performing disk I/O.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these threads, the only ones that you have any
+ configuration control over are the message processing
+ threads. In this case, you can determine how many
+ of these threads you want to run.
+ </p>
+ <p>
+ It is always a bit of an art to decide on a thread count,
+ but the short answer is you probably do not need more
+ than three threads here, and it is likely that one will
+ suffice. That said, the best thing to do is set your
+ thread count to a fairly low number and then increase
+ it if it appears that your application will benefit
+ from the additional threads.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="simpleprogramlisting.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repmgr_init_example_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Program Listing </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Adding the Replication Framework to
+ simple_txn
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/repmgr_init_example_c.html b/db/docs/gsg_db_rep/C/repmgr_init_example_c.html
new file mode 100644
index 000000000..c3b850cd1
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/repmgr_init_example_c.html
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Adding the Replication Framework to
+ simple_txn
+
+ </title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="next" href="fwrkpermmessage.html" title="Permanent Message Handling" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Adding the Replication Framework to
+ simple_txn
+
+ </th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repapp.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fwrkpermmessage.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="repmgr_init_example_c"></a>Adding the Replication Framework to
+ <span>simple_txn</span>
+
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ We now use the methods described above to add partial
+ support to the
+ <tt class="literal">simple_txn</tt>
+
+ example that we presented in
+ <a href="txnapp.html">Transactional Application</a>.
+ That is, in this section we will:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Enhance our command line options to
+ accept information of interest to a
+ replicated application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure our environment handle to use
+ replication and the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Minimally configure the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Start replication.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that when we are done with this section, we will be
+ only partially ready to run the application. Some critical
+ pieces will be missing; specifically, we will not yet be
+ handling the differences between a master and a
+ replica. (We do that in the next chapter).
+ </p>
+ <p>
+ Also, note that in the following code fragments, additions
+ and changes to the code are marked in <b class="userinput"><tt>bold</tt></b>.
+ </p>
+ <p>
+ To begin, we copy the
+ <tt class="literal">simple_txn</tt>
+
+ code to a new file called
+ <tt class="literal">rep_mgr.c</tt>.
+
+ <span>
+ We then make the corresponding change to the program name.
+ </span>
+
+
+ </p>
+ <pre class="programlisting">/*
+ <b class="userinput"><tt>* File: rep_mgr.c</tt></b>
+ */
+
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
+#ifndef _WIN32
+#include &lt;unistd.h&gt;
+#endif
+
+#include &lt;db.h&gt;
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#endif
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE &quot;quote.db&quot;
+
+const char *progname = <b class="userinput"><tt>&quot;rep_mgr&quot;;</tt></b>
+
+int create_env(const char *, DB_ENV **);
+int env_init(DB_ENV *, const char *);
+int doloop (DB_ENV *);
+int print_stocks(DBC *); </pre>
+ <p>
+ Next we update our usage function. The application will continue to
+ accept the <tt class="literal">-h</tt> parameter so that we can identify
+ the environment home directory used by this application. However,
+ we also add the
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">-m</tt> parameter which allows us to
+ identify the host and port used by this application to
+ listen for replication messages.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-o</tt> parameter which allows us to
+ specify other replicas.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-n</tt> parameter which allows us to
+ identify the number of sites in this replication
+ group.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-p</tt> option, which is used to identify
+ this replica's priority (recall that the priority is
+ used as a tie breaker for elections)
+ </p>
+ </li>
+ </ul>
+ </div>
+ <pre class="programlisting">/* Usage function */
+static void
+usage()
+{
+ fprintf(stderr, &quot;usage: %s &quot;, progname);
+ fprintf(stderr, &quot;[-h home] <b class="userinput"><tt>-m host:port [-o host:port]</tt></b>\n&quot;);
+ <b class="userinput"><tt>fprintf(stderr, &quot;\t\t[-p priority]\n&quot;);</tt></b>
+ fprintf(stderr, &quot;where:\n&quot;);
+ fprintf(stderr, &quot;\t-h identifies the environment home directory\n&quot;);
+ <b class="userinput"><tt>fprintf(stderr, &quot;\t-o identifies another site participating in &quot;);
+ fprintf(stderr, &quot;this replication group\n&quot;);
+ fprintf(stderr, &quot;\t-m identifies the host and port used by this &quot;);
+ fprintf(stderr, &quot;site (required).\n&quot;);
+ fprintf(stderr, &quot;\t-n identifies the number of sites in this &quot;);
+ fprintf(stderr, &quot;replication group (required).\n&quot;);
+ fprintf(stderr, &quot;\t-p identifies the election priority used by &quot;);
+ fprintf(stderr, &quot;this replica.\n&quot;);</tt></b>
+ exit(EXIT_FAILURE);
+} </pre>
+ <p>
+ Now we can begin working on our <tt class="literal">main()</tt> function.
+ We begin by adding a couple of variables that we will use to
+ collect TCP/IP host and port information.
+
+
+ <span>
+ We also declare a couple
+ of flags that we use to make sure some required information is
+ provided to this application.
+ </span>
+</p>
+ <pre class="programlisting">int
+main(int argc, char *argv[])
+{
+ extern char *optarg;
+ DB_ENV *dbenv;
+ const char *home;
+ char ch, <b class="userinput"><tt>*host, *portstr</tt></b>;
+ int ret, <b class="userinput"><tt>local_is_set, totalsites</tt></b>;
+ <b class="userinput"><tt>u_int32_t port</tt></b>;
+
+ dbenv = NULL;
+
+ ret = <b class="userinput"><tt>local_is_set = totalsites = </tt></b>0;
+ home = NULL; </pre>
+ <p>
+ At this time we can create our environment handle and configure it
+ exactly as we did for <tt class="literal">simple_txn</tt>.
+ The only thing that we will do differently here is that we will set a priority,
+ arbitrarily picked to be 100, so that we can be sure the environment has
+ a priority other than 0 (the default value). This ensures that the
+ environment can become a master via an election.
+</p>
+ <pre class="programlisting"> if ((ret = create_env(progname, &amp;dbenv)) != 0)
+ goto err;
+
+ /* Default priority is 100 */
+ <b class="userinput"><tt>dbenv-&gt;rep_set_priority(dbenv, 100);</tt></b> </pre>
+ <p>
+ Now we collect our command line arguments. As we do so, we will
+ configure host and port information as required, and we will
+ configure the application's election priority if necessary.
+</p>
+ <pre class="programlisting"> /* Collect the command line options */
+ while ((ch = getopt(argc, argv, &quot;h:<b class="userinput"><tt>m:o:p:</tt></b>&quot;)) != EOF)
+ switch (ch) {
+ case 'h':
+ home = optarg;
+ break;
+ <b class="userinput"><tt>/* Set the host and port used by this environment */
+ case 'm':
+ host = strtok(optarg, &quot;:&quot;);
+ if ((portstr = strtok(NULL, &quot;:&quot;)) == NULL) {
+ fprintf(stderr, &quot;Bad host specification.\n&quot;);
+ goto err;
+ }
+ port = (unsigned short)atoi(portstr);
+ if (dbenv-&gt;repmgr_set_local_site(dbenv, host, port, 0) != 0) {
+ fprintf(stderr,
+ &quot;Could not set local address %s.\n&quot;, host);
+ goto err;
+ }
+ local_is_set = 1;
+ break;
+ /* Identify another site in the replication group */
+ case 'o':
+ host = strtok(optarg, &quot;:&quot;);
+ if ((portstr = strtok(NULL, &quot;:&quot;)) == NULL) {
+ fprintf(stderr, &quot;Bad host specification.\n&quot;);
+ goto err;
+ }
+ port = (unsigned short)atoi(portstr);
+ if (dbenv-&gt;repmgr_add_remote_site(dbenv, host, port, 0) != 0) {
+ fprintf(stderr,
+ &quot;Could not add site %s.\n&quot;, host);
+ goto err;
+ }
+ break;
+ /* Set the number of sites in this replication group */
+ case 'n':
+ totalsites = atoi(optarg);
+ if ((ret = dbenv-&gt;rep_set_nsites(dbenv, totalsites)) != 0)
+ dbenv-&gt;err(dbenv, ret, &quot;set_nsites&quot;);
+ break;
+ /* Set this replica's election priority */
+ case 'p':
+ dbenv-&gt;rep_set_priority(dbenv, atoi(optarg));
+ break; </tt></b>
+ case '?':
+ default:
+ usage();
+ }
+
+ /* Error check command line. */
+ if (home == NULL <b class="userinput"><tt>|| !local_is_set || !totalsites</tt></b>)
+ usage(); </pre>
+ <p>
+ Having done that, we can call <tt class="function">env_init()</tt>, which we use to
+ open our environment handle. Note that this function changes
+ slightly for this update (see below).
+ </p>
+ <pre class="programlisting"> if ((ret = env_init(dbenv, home)) != 0)
+ goto err; </pre>
+ <p>
+ Finally, we start replication before we go into the
+ <tt class="function">doloop()</tt> function (where we perform all our
+ database access).
+</p>
+ <pre class="programlisting">
+ <b class="userinput"><tt>if ((ret = dbenv-&gt;repmgr_start(dbenv, 3, DB_REP_ELECTION)) != 0)
+ goto err; </tt></b>
+
+ if ((ret = doloop(dbenv)) != 0) {
+ dbenv-&gt;err(dbenv, ret, &quot;Application failed&quot;);
+ goto err;
+ }
+
+err: if (dbenv != NULL)
+ (void)dbenv-&gt;close(dbenv, 0);
+
+ return (ret);
+} </pre>
+ <p>
+ <span>Beyond that, the rest of our application remains the same for
+ now, with the exception of the <tt class="function">env_init()</tt>
+ function, which we use to actually open our environment handle.
+ The flags </span>
+
+
+
+
+
+ we use to open the environment are slightly different for a
+ replicated application than they are for a non-replicated
+ application. Namely, replication requires the
+ <span>
+ <tt class="literal">DB_INIT_REP</tt> flag.
+ </span>
+
+
+ </p>
+ <p>
+ Also, because we are using the replication framework, we must prepare
+ our environment for threaded usage. For this reason, we also
+ need the <tt class="literal">DB_THREAD</tt> flag.
+ </p>
+ <pre class="programlisting"> int
+env_init(DB_ENV *dbenv, const char *home)
+{
+ u_int32_t flags;
+ int ret;
+
+ (void)dbenv-&gt;set_cachesize(dbenv, 0, CACHESIZE, 0);
+ (void)dbenv-&gt;set_flags(dbenv, DB_TXN_NOSYNC, 1);
+
+ flags = DB_CREATE |
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_MPOOL |
+ DB_INIT_TXN |
+ <b class="userinput"><tt>DB_INIT_REP |
+ DB_THREAD |</tt></b>
+ DB_RECOVER;
+ if ((ret = dbenv-&gt;open(dbenv, home, flags, 0)) != 0)
+ dbenv-&gt;err(dbenv, ret, &quot;can't open environment&quot;);
+ return (ret);
+}</pre>
+ <p>
+ This completes our replication updates for the moment. We are not as
+ yet ready to actually run this program; there remains a few
+ critical pieces left to add to it. However, the work that we
+ performed in this section represents a solid foundation for the
+ remainder of our replication work.
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repapp.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fwrkpermmessage.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 3. The DB Replication Framework </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Permanent Message Handling</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/simpleprogramlisting.html b/db/docs/gsg_db_rep/C/simpleprogramlisting.html
new file mode 100644
index 000000000..2df5281f9
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/simpleprogramlisting.html
@@ -0,0 +1,557 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Program Listing</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ <link rel="previous" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ <link rel="next" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Program Listing</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnapp.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 2. Transactional Application</th>
+ <td width="20%" align="right"> <a accesskey="n" href="repapp.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="simpleprogramlisting"></a>Program Listing</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our example program is a fairly simple transactional
+ application. At this early stage of its development, the
+ application contains no hint that it must be network-aware
+ so the only command line argument that it takes is one that
+ allows us to specify the environment home directory.
+ (Eventually, we will specify things like host names and
+ ports from the command line).
+ </p>
+ <p>
+ Note that the application performs all writes under the
+ protection of a transaction; however, multiple database
+ operations are not performed per transaction. Consequently,
+ we simplify things a bit by using autocommit for our
+ database writes.
+ </p>
+ <p>
+ Also, this application is single-threaded. It is possible
+ to write a multi-threaded or multi-process application that
+ performs replication. That said, the concepts described in
+ this book are applicable to both single threaded and
+ multi-threaded applications so nothing
+ is gained by multi-threading this application other than
+ distracting complexity. This manual
+ does, however, identify where care must be taken when
+ performing replication with a non-single threaded
+ application.
+ </p>
+ <p>
+ Finally, remember that transaction processing is not described in
+ this manual. Rather, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide for details on
+ that topic.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="main_c"></a>Function: main()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our program begins with the usual assortment of
+ include statements.
+ </p>
+ <pre class="programlisting">/*
+ * File: simple_txn.c
+ */
+
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
+#ifndef _WIN32
+#include &lt;unistd.h&gt;
+#endif
+
+#include &lt;db.h&gt;
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#endif </pre>
+ <p>
+ We then define a few values. One is the size of our cache,
+ which we keep deliberately small for this example, and the
+ other is the name of our database. We also provide a global
+ variable that is the name of our program; this is used for
+ error reporting later on.
+ </p>
+ <pre class="programlisting">#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE &quot;quote.db&quot;
+
+const char *progname = &quot;simple_txn&quot;; </pre>
+ <p>
+ Then we perform a couple of forward declarations. The first
+ of these, <tt class="function">create_env()</tt> and
+ <tt class="function">env_init()</tt> are used to open
+ and initialize our environment.
+ </p>
+ <p>
+ Next we declare
+ <tt class="function">doloop()</tt>, which is the function that we use to
+ add data to the database and then display its contents. This is
+ essentially a big <tt class="literal">do</tt> loop, hence the
+ function's name.
+ </p>
+ <p>
+ Finally, we have <tt class="function">print_stocks</tt>, which is
+ used to display a database record once it has been retrieved from the
+ database.
+ </p>
+ <pre class="programlisting">
+int create_env(const char *, DB_ENV **);
+int env_init(DB_ENV *, const char *);
+int doloop (DB_ENV *);
+int print_stocks(DBC *); </pre>
+ <p>
+ Next we need our <tt class="function">usage()</tt> function,
+ which is fairly trivial at this point:
+ </p>
+ <pre class="programlisting">/* Usage function */
+static void
+usage()
+{
+ fprintf(stderr, &quot;usage: %s &quot;, progname);
+ fprintf(stderr, &quot;[-h home]\n&quot;);
+ exit(EXIT_FAILURE);
+} </pre>
+ <p>
+ That completed, we can jump into our application's
+ <tt class="function">main()</tt> function. If you are familiar with
+ DB transactional applications, you will not find any
+ surprises here. We begin by declaring and initializing the
+ usual set of variables:
+ </p>
+ <pre class="programlisting">int
+main(int argc, char *argv[])
+{
+ extern char *optarg;
+ DB_ENV *dbenv;
+ const char *home;
+ char ch;
+ int ret;
+
+ dbenv = NULL;
+
+ ret = 0;
+ home = NULL; </pre>
+ <p>
+ Now we create and configure our environment handle.
+ We do this with our <tt class="function">create_env()</tt> function, which we will
+ show a little later in this example.
+
+ </p>
+ <pre class="programlisting"> if ((ret = create_env(progname, &amp;dbenv)) != 0)
+ goto err; </pre>
+ <p>
+ Then we parse the command line arguments:
+ </p>
+ <pre class="programlisting"> while ((ch = getopt(argc, argv, &quot;h:&quot;)) != EOF)
+ switch (ch) {
+ case 'h':
+ home = optarg;
+ break;
+ case '?':
+ default:
+ usage();
+ }
+
+ /* Error check command line. */
+ if (home == NULL)
+ usage(); </pre>
+ <p>
+ Now we can open our environment. We do this with our
+ <tt class="function">env_init()</tt> function which we will describe
+ a little later in this chapter.
+ </p>
+ <pre class="programlisting"> if ((ret = env_init(dbenv, home)) != 0)
+ goto err; </pre>
+ <p>
+ Now that we have opened the environment, we can call our
+ <tt class="function">doloop()</tt> function. This function performs the basic
+ database interaction. Notice that we have not yet opened any databases. In
+ a traditional transactional application we would probably open the
+ databases before calling our our main data processing function.
+ However, the eventual replicated application will want to handle
+ database open and close in the main processing loop, so in a nod to what this
+ application will eventually become we do a slightly unusual thing
+ here.
+ </p>
+ <pre class="programlisting"> if ((ret = doloop(dbenv)) != 0) {
+ dbenv-&gt;err(dbenv, ret, &quot;Application failed&quot;);
+ goto err;
+ } </pre>
+ <p>
+ Finally, we provide our application shutdown code. Note, again,
+ that in a traditional transactional application all databases would
+ also be closed here. But, again, due to the way this application
+ will eventually behave, we cause the database close to occur in the
+ <tt class="function">doloop()</tt> function.
+ </p>
+ <pre class="programlisting">err: if (dbenv != NULL)
+ (void)dbenv-&gt;close(dbenv, 0);
+
+ return (ret);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="create_env_c"></a>Function: create_env()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Having written our <tt class="function">main()</tt>
+ function, we now implement the first of our utility
+ functions that we use to manage our environments.
+ This function exists only to make our code easier
+ to manage, and all it does is create an environment
+ handle for us.
+ </p>
+ <pre class="programlisting">int
+create_env(char *progname, DB_ENV **dbenvp)
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ if ((ret = db_env_create(&amp;dbenv, 0)) != 0) {
+ fprintf(stderr, &quot;can't create env handle: %s\n&quot;,
+ db_strerror(ret));
+ return (ret);
+ }
+
+ dbenv-&gt;set_errfile(dbenv, stderr);
+ dbenv-&gt;set_errpfx(dbenv, progname);
+
+ *dbenvp = dbenv;
+ return (0);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="env_init_c"></a>Function: env_init()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Having written the function that initializes an
+ environment handle, we now implement the function
+ that opens the handle. Again, there should be no
+ surprises here for anyone familiar with DB
+ applications. The open flags that we use are those
+ normally used for a transactional application.
+ </p>
+ <pre class="programlisting"> int
+env_init(DB_ENV *dbenv, const char *home)
+{
+ u_int32_t flags;
+ int ret;
+
+ (void)dbenv-&gt;set_cachesize(dbenv, 0, CACHESIZE, 0);
+ (void)dbenv-&gt;set_flags(dbenv, DB_TXN_NOSYNC, 1);
+
+ flags = DB_CREATE |
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_MPOOL |
+ DB_INIT_TXN |
+ DB_RECOVER;
+ if ((ret = dbenv-&gt;open(dbenv, home, flags, 0)) != 0)
+ dbenv-&gt;err(dbenv, ret, &quot;can't open environment&quot;);
+ return (ret);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="doloop_c"></a>Function: doloop()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Having written our <tt class="function">main()</tt>
+ function and utility functions, we now implement
+ our application's
+ primary data processing function. This
+ function provides a command prompt at which the
+ user can enter a stock ticker value and a price for
+ that value. This information is then entered to the
+ database.
+ </p>
+ <p>
+ To display the database, simply enter
+ <tt class="literal">return</tt> at the prompt.
+ </p>
+ <p>
+ To begin, we declare a database pointer,
+ several <tt class="classname">DBT</tt> variables, and
+ the usual assortment of variables used for buffers
+ and return codes. We also initialize all of this.
+ </p>
+ <pre class="programlisting">#define BUFSIZE 1024
+int
+doloop(DB_ENV *dbenv)
+{
+ DB *dbp;
+ DBT key, data;
+ char buf[BUFSIZE], *rbuf;
+ int ret;
+ u_int32_t db_flags;
+
+ dbp = NULL;
+ memset(&amp;key, 0, sizeof(key));
+ memset(&amp;data, 0, sizeof(data));
+ ret = 0; </pre>
+ <p>
+ Next, we begin the loop and we immediately open our
+ database if it has not already been opened. Notice that
+ we specify autocommit when we open the database. In
+ this case, autocommit is important because we will only
+ ever write to our database using it. There is no need
+ for explicit transaction handles and commit/abort code
+ in this application, because we are not combining
+ multiple database operations together under a single
+ transaction.
+ </p>
+ <p>
+ Autocommit is described in greater detail in the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </p>
+ <pre class="programlisting"> for (;;) {
+
+ if (dbp == NULL) {
+ if ((ret = db_create(&amp;dbp, dbenv, 0)) != 0)
+ return (ret);
+
+ /* Set page size small so page allocation is cheap. */
+ if ((ret = dbp-&gt;set_pagesize(dbp, 512)) != 0)
+ goto err;
+
+ db_flags = DB_AUTO_COMMIT | DB_CREATE;
+
+ if ((ret = dbp-&gt;open(dbp, NULL, DATABASE,
+ NULL, DB_BTREE, db_flags, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, &quot;DB-&gt;open&quot;);
+ goto err;
+ }
+ } </pre>
+ <p>
+ Now we implement our command prompt. This is a simple and not
+ very robust implementation of a command prompt.
+ If the user enters the keywords <tt class="literal">exit</tt>
+ or <tt class="literal">quit</tt>, the loop is exited and the
+ application ends. If the user enters nothing and instead simply
+ presses <tt class="literal">return</tt>, the entire contents of the
+ database is displayed. We use our
+ <tt class="function">print_stocks()</tt> function to display the
+ database. (That implementation is shown next in this chapter.)
+ </p>
+ <p>
+ Notice that very little error checking is performed on the data
+ entered at this prompt. If the user fails to enter at least one
+ space in the value string, a simple help message is printed and
+ the prompt is returned to the user. That is the only error
+ checking performed here. In a real-world application,
+ at a minimum the application would probably check to ensure
+ that the price was in fact an integer or float value.
+ However, in order to keep this example code as simple as
+ possible, we refrain from implementing a thorough user interface.
+ </p>
+ <pre class="programlisting"> printf(&quot;QUOTESERVER &gt; &quot;);
+ fflush(stdout);
+
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if (strtok(&amp;buf[0], &quot; \t\n&quot;) == NULL) {
+ switch ((ret = print_stocks(dbp))) {
+ case 0:
+ continue;
+ default:
+ dbp-&gt;err(dbp, ret, &quot;Error traversing data&quot;);
+ goto err;
+ }
+ }
+ rbuf = strtok(NULL, &quot; \t\n&quot;);
+ if (rbuf == NULL || rbuf[0] == '\0') {
+ if (strncmp(buf, &quot;exit&quot;, 4) == 0 ||
+ strncmp(buf, &quot;quit&quot;, 4) == 0)
+ break;
+ dbenv-&gt;errx(dbenv, &quot;Format: TICKER VALUE&quot;);
+ continue;
+ } </pre>
+ <p>
+ Now we assign data to the <tt class="classname">DBT</tt>s that
+ we will use to write the new information to the database.
+ </p>
+ <pre class="programlisting"> key.data = buf;
+ key.size = (u_int32_t)strlen(buf);
+
+ data.data = rbuf;
+ data.size = (u_int32_t)strlen(rbuf); </pre>
+ <p>
+ Having done that, we can write the new information to the
+ database. Remember that this application uses autocommit,
+ so no explicit transaction management is required. Also,
+ the database is not configured for duplicate records, so
+ the data portion of a record is overwritten if the provided
+ key already exists in the database. However, in this case
+ DB returns <tt class="literal">DB_KEYEXIST</tt> &#8212; which
+ we ignore.
+ </p>
+ <pre class="programlisting"> if ((ret = dbp-&gt;put(dbp, NULL, &amp;key, &amp;data, 0)) != 0)
+ {
+ dbp-&gt;err(dbp, ret, &quot;DB-&gt;put&quot;);
+ if (ret != DB_KEYEXIST)
+ goto err;
+ }
+ } </pre>
+ <p>
+ Finally, we close our database before returning from the
+ function.
+ </p>
+ <pre class="programlisting">err: if (dbp != NULL)
+ (void)dbp-&gt;close(dbp, DB_NOSYNC);
+
+ return (ret);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="printstocks_c"></a>
+ <span>Function: print_stocks()</span>
+
+
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The <tt class="function">print_stocks()</tt>
+
+ <span>function</span>
+
+ simply takes a database handle, opens a cursor, and uses
+ it to display all the information it finds in a database.
+ This is trivial cursor operation that should hold
+ no surprises for you. We simply provide it here for
+ the sake of completeness.
+ </p>
+ <p>
+ If you are unfamiliar with basic cursor operations,
+ please see the <i class="citetitle">Getting Started with Berkeley DB</i>
+ guide.
+ </p>
+ <pre class="programlisting">/*
+ * A function that takes a cursor and displays the entire
+ * contents of the database to which the cursor belongs.
+ */
+int
+print_stocks(DB *dbp)
+{
+ DBC *dbc;
+ DBT key, data;
+#define MAXKEYSIZE 10
+#define MAXDATASIZE 20
+ char keybuf[MAXKEYSIZE + 1], databuf[MAXDATASIZE + 1];
+ int ret, t_ret;
+ u_int32_t keysize, datasize;
+
+ if ((ret = dbp-&gt;cursor(dbp, NULL, &amp;dbc, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, &quot;can't open cursor&quot;);
+ return (ret);
+ }
+
+ memset(&amp;key, 0, sizeof(key));
+ memset(&amp;data, 0, sizeof(data));
+
+ printf(&quot;\tSymbol\tPrice\n&quot;);
+ printf(&quot;\t======\t=====\n&quot;);
+
+ for (ret = dbc-&gt;c_get(dbc, &amp;key, &amp;data, DB_FIRST);
+ ret == 0;
+ ret = dbc-&gt;c_get(dbc, &amp;key, &amp;data, DB_NEXT)) {
+ keysize = key.size &gt; MAXKEYSIZE ? MAXKEYSIZE : key.size;
+ memcpy(keybuf, key.data, keysize);
+ keybuf[keysize] = '\0';
+
+ datasize = data.size &gt;= MAXDATASIZE ? MAXDATASIZE : data.size;
+ memcpy(databuf, data.data, datasize);
+ databuf[datasize] = '\0';
+
+ printf(&quot;\t%s\t%s\n&quot;, keybuf, databuf);
+ }
+ printf(&quot;\n&quot;);
+ fflush(stdout);
+
+ if ((t_ret = dbc-&gt;c_close(dbc)) != 0 &amp;&amp; ret == 0)
+ ret = t_ret;
+
+ switch (ret) {
+ case 0:
+ case DB_NOTFOUND:
+ return (0);
+ default:
+ return (ret);
+ }
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnapp.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repapp.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 2. Transactional Application </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 3. The DB Replication Framework</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/C/txnapp.html b/db/docs/gsg_db_rep/C/txnapp.html
new file mode 100644
index 000000000..5f3fe1446
--- /dev/null
+++ b/db/docs/gsg_db_rep/C/txnapp.html
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 2. Transactional Application</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="permmessages.html" title="Permanent Message Handling" />
+ <link rel="next" href="simpleprogramlisting.html" title="Program Listing" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 2. Transactional Application</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="permmessages.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="simpleprogramlisting.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="txnapp"></a>Chapter 2. Transactional Application</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnapp.html#appoverview">Application Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="simpleprogramlisting.html">Program Listing</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#main_c">Function: main()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#create_env_c">Function: create_env()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#env_init_c">Function: env_init()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#doloop_c">Function: doloop()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#printstocks_c">
+ Function: print_stocks()
+
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ In this chapter, we build a simple transaction-protected DB
+ application. Throughout the remainder of this book, we will add
+ replication to this example. We do this to underscore the concepts
+ that we are presenting in this book; the first being that you
+ should start with a working transactional program and then add
+ replication to it.
+ </p>
+ <p>
+ Note that this book assumes you already know how to write a
+ transaction-protected DB application, so we will not be
+ covering those concepts in this book. To learn how to write a
+ transaction-protected application, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="appoverview"></a>Application Overview</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our application maintains a stock market quotes database.
+ This database contains records whose key is the stock
+ market symbol and whose data is the stock's price.
+ </p>
+ <p>
+ The application operates by presenting you with a command
+ line prompt. You then enter the stock symbol and its value,
+ separated by a space. The application takes this
+ information, writes it to the database.
+ </p>
+ <p>
+ To see the contents of the database, simply press
+ <tt class="literal">return</tt> at the command prompt.
+ </p>
+ <p>
+ To quit the application, type 'quit' or 'exit' at the
+ command prompt.
+ </p>
+ <p>
+ For example, the following illustrates the application's
+ usage. In it, we use entirely fictitious stock market
+ symbols and price values.
+ </p>
+ <pre class="programlisting">&gt; ./simple_txn -h env_home_dir
+QUOTESERVER&gt; stock1 88
+QUOTESERVER&gt; stock2 .08
+QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ stock1 88
+
+QUOTESERVER&gt; stock1 88.9
+QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ stock1 88.9
+ stock2 .08
+
+QUOTESERVER&gt; quit
+&gt;</pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="permmessages.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="simpleprogramlisting.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Permanent Message Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Program Listing</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/Replication-CXX-GSG.pdf b/db/docs/gsg_db_rep/CXX/Replication-CXX-GSG.pdf
new file mode 100644
index 000000000..0ee3ce3ab
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/Replication-CXX-GSG.pdf
Binary files differ
diff --git a/db/docs/gsg_db_rep/CXX/addfeatures.html b/db/docs/gsg_db_rep/CXX/addfeatures.html
new file mode 100644
index 000000000..1adee537f
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/addfeatures.html
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 5. Additional Features</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="exampledoloop.html" title="Example Processing Loop" />
+ <link rel="next" href="manageblock.html" title="Managing Blocking Operations" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 5. Additional Features</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="exampledoloop.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="manageblock.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="addfeatures"></a>Chapter 5. Additional Features</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="c2ctransfer.html#fmwrkpeerserver">Identifying Peers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="bulk.html">Bulk Transfers</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Beyond the basic functionality that we have discussed so far in
+ this book, there are several replication features that you
+ should understand. These are all optional to use, but provide
+ useful functionality under the right circumstances.
+ </p>
+ <p>
+ These additional features are:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="bulk.html">Bulk Transfers</a>
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="delayedsync"></a>Delayed Synchronization</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a replication group has a new master, all replicas must
+ synchronize with that master. This means they must ensure
+ that the contents of their local database(s) are identical
+ to that contained by the new master.
+ </p>
+ <p>
+ This synchronization process can result in quite a lot of
+ network activity. It can also put a large strain on the
+ master server, especially if is part of a large
+ replication group or if there is somehow a large difference between
+ the master's database(s) and the contents of its replicas.
+ </p>
+ <p>
+ It is therefore possible to delay synchronization for any
+ replica that discovers it has a new master. You would do
+ this so as to give the master time to synchronize other
+ replicas before proceeding with the delayed replicas.
+ </p>
+ <p>
+ To delay synchronization of a replica environment, you
+ specify
+ <span>
+ <tt class="literal">DB_REP_CONF_DELAYCLIENT</tt> to
+
+ <tt class="methodname">DbEnv::rep_set_config()</tt>
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ <p>
+ If you use delayed synchronization, then you must manually
+ synchronize the replica at some future time. Until you do this, the replica is out of
+ sync with the master, and it will ignore all database changes forwarded to it from
+ the master.
+ </p>
+ <p>
+ You synchronize a delayed replica by calling
+
+ <tt class="methodname">DbEnv::rep_sync()</tt>
+
+ on the replica that has been delayed.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="exampledoloop.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="manageblock.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Example Processing Loop </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Blocking Operations</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/apioverview.html b/db/docs/gsg_db_rep/CXX/apioverview.html
new file mode 100644
index 000000000..5b713eb23
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/apioverview.html
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>The Replication APIs</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="repadvantage.html" title="Replication Benefits" />
+ <link rel="next" href="elections.html" title="Holding Elections" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">The Replication APIs</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="apioverview"></a>The Replication APIs</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ There are two ways that you can choose to implement
+ replication in your transactional application. The first,
+ and preferred, mechanism is to use the pre-packaged
+ replication framework that comes with the
+ DB distribution. This framework should be sufficient
+ for most customers.
+ </p>
+ <p>
+ If for some reason the Replication Framework
+ does not meet your application's technical requirements,
+ you will have to use the replication APIs available
+ through the Berkeley DB library to write your own custom
+ replication framework.
+ </p>
+ <p>
+ Both of these approaches are described in slightly greater
+ detail in this section. The bulk of the chapters later in
+ this book are dedicated to these two replication
+ implementation mechanisms.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repframeworkoverview"></a>Replication Framework Overview</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB's pre-packaged replication framework exists
+ as a layer on top of the DB library. The replication framework is a
+ multi-threaded implementation that allows you to easily add
+ replication to your existing transactional application.
+ <span>
+ You access and manage the replication framework using methods that are
+ available off the
+
+ <tt class="classname">DbEnv</tt>
+ class.
+ </span>
+
+ </p>
+ <p>
+ The replication framework:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Provides a multi-threaded communications layer
+ using pthreads (on Unix-style systems and
+ similar derivatives such as Mac OS X), or
+ Windows threads on Microsoft Windows systems.
+ </p>
+ </li>
+ <li>
+ <p>
+ Uses TCP/IP sockets. Network traffic is
+ handled via threads that handle inbound and
+ outbound messages. However, each
+ process uses a single socket
+ that is shared using <tt class="function">select()</tt>.
+ </p>
+ <p>
+ Note that for this reason, the replication framework is
+ limited to a maximum of 60 replicas (on
+ Windows) and approximately 1000 replicas (on
+ Unix and related systems), depending on how
+ your system is configured.
+ </p>
+ </li>
+ <li>
+ <p>
+ Requires a single process for the master replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ Requires that only one instance of the
+ environment handle be used.
+ </p>
+ </li>
+ <li>
+ <p>
+ Upon application startup, a master can be
+ selected either manually or via elections.
+ After startup time, however, during the course of
+ normal operations it is possible for the
+ replication group to need to locate a new master (due
+ to network or other hardware related problems,
+ for example) and in this scenario elections are
+ always used to select the new master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ If your application has technical requirements that do
+ not conform to the implementation provided by the
+ replication framework, you must write a custom
+ replication framework using the DB replication APIs
+ directly. See the next section for introductory
+ details.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repapioverview"></a>Replication API Overview</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The replication API is a series of Berkeley DB library
+ classes and methods that you can use to build your own
+ replication infrastructure. You should use the
+ replication API only if the replication framework does not meet your
+ application's technical requirements.
+ </p>
+ <p>
+ To make use of the replication API, you must write your
+ own networking code. This frees you from the technical
+ constraints imposed by the replication framework. For example, by
+ writing your own framework, you can:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Use a threading package other than
+ pthreads (Unix) or Windows threads
+ (Microsoft Windows). This might be interesting
+ to you if you are using a platform
+ whose preferred threading package
+ is something other than (for
+ example) pthreads, such as is the case for
+ Sun Microsystem's Solaris operating systems.
+ </p>
+ </li>
+ <li>
+ <p>
+ Implement your own sockets. The
+ replication framework uses TCP/IP sockets. While
+ this should be acceptable for the
+ majority of applications, sometimes
+ UDP or even raw sockets might be
+ desired.
+ </p>
+ </li>
+ <li>
+ <p>
+ Write a multi-process master
+ replica.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For information on writing a replicated application
+ using the Berkeley DB replication APIs, see the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Replication Benefits </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Holding Elections</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/bulk.html b/db/docs/gsg_db_rep/CXX/bulk.html
new file mode 100644
index 000000000..25646dc08
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/bulk.html
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Bulk Transfers</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="c2ctransfer.html" title="Client to Client Transfer" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Bulk Transfers</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="c2ctransfer.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> </td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="bulk"></a>Bulk Transfers</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, messages are sent from the master to replicas as they are generated.
+ This can degrade replication performance because the various participating
+ environments must handle a fair amount of network I/O activity.
+ </p>
+ <p>
+ You can alleviate this problem by configuring your master environment for bulk
+ transfers. Bulk transfers simply cause replication messages to accumulate in a
+ buffer until a triggering event occurs. When this event occurs, the entire
+ contents of the buffer is sent to the replica, thereby eliminating excessive
+ network I/O.
+ </p>
+ <p>
+ Note that if you are using replica to replica transfers, then you might want any
+ replica that can service replication requests to also be configured for bulk
+ transfers.
+ </p>
+ <p>
+ The events that result in a bulk transfer of replication messages to a replica
+ will differ depending on if the transmitting environment is a master or a
+ replica.
+ </p>
+ <p>
+ If the servicing environment is a master environment, then bulk a bulk transfer
+ occurs when:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Bulk transfers are configured for the master environment, and
+ </p>
+ </li>
+ <li>
+ <p>
+ the message buffer is full or
+ </p>
+ </li>
+ <li>
+ <p>
+ a permanent record (for example, a transaction commit or a
+ checkpoint record) is placed in the buffer for the replica.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ If the servicing environment is a replica environment (that is, replica to replica
+ transfers are in use), then a bulk transfer occurs when:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Bulk transfers are configured for the transmitting replica, and
+ </p>
+ </li>
+ <li>
+ <p>
+ the message buffer is full or
+ </p>
+ </li>
+ <li>
+ <p>
+ the replica servicing the request is able to completely satisfy
+ the request with the contents of the message buffer.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ To configure bulk transfers, specify
+
+ <span>
+ <tt class="literal">DB_REP_CONF_BULK</tt> to
+
+ <tt class="methodname">DbEnv::rep_set_config()</tt>
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="c2ctransfer.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> </td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Client to Client Transfer </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/c2ctransfer.html b/db/docs/gsg_db_rep/CXX/c2ctransfer.html
new file mode 100644
index 000000000..13b479d0e
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/c2ctransfer.html
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Client to Client Transfer</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="noautoinit.html" title="Stop Auto-Initialization" />
+ <link rel="next" href="bulk.html" title="Bulk Transfers" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Client to Client Transfer</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="noautoinit.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="bulk.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="c2ctransfer"></a>Client to Client Transfer</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is possible to use a replica instead of a master to synchronize another
+ replica. This serves to take the request load off a master that might otherwise
+ occur if multiple replicas attempted to synchronize with the master at the same
+ time.
+ </p>
+ <p>
+ For best results, use this feature combined with the delayed synchronization
+ feature (see <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>).
+ </p>
+ <p>
+ For example, suppose your replication group consists of four environments. Upon
+ application startup, all three replicas will immediately attempt to synchronize
+ with the master. But at the same time, the master itself might be busy with a heavy
+ database write load.
+ </p>
+ <p>
+ To solve this problem, delay synchronization for two of the three replicas. Allow
+ the third replica to synchronize as normal with the master. Then, start
+ synchronization for each of the delayed replicas (since this is a manual process,
+ you can do them one at a time if that best suits your application).
+ Assuming you have configured replica to replica synchronization correctly, the
+ delayed replicas will synchronize using the up-to-date replica, rather than using
+ the master.
+ </p>
+ <p>
+ When you are using the replication framework, you configure replica to replica synchronization by
+ declaring one environment to be a peer of another environment. If an
+ environment is a peer, then
+ it can be used for synchronization purposes.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpeerserver"></a>Identifying Peers</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can designate one replica to be a peer of
+ another, and then use this special
+ status for permanent message acknowledgments,
+ and for replica-to-replica synchronization.
+ You might want to do this if you have
+ machines that you know are on fast, reliable
+ network connections and so you are willing to
+ accept the overhead of waiting for
+ acknowledgments from those specific machines.
+ </p>
+ <p>
+ An environment is currently allowed to have only one
+ peer.
+ </p>
+ <p>
+ Note that peers are not required to be a
+ bi-directional. That is, just because machine A
+ declares machine B to be a peer, that does not mean
+ machine B must also declare machine A to be a peer.
+ </p>
+ <p>
+ You declare a peer for the current environment
+ when you add that environment to the list of known
+ sites. You do this by
+ <span>specifying the
+ <tt class="literal">DB_REPMGR_PEER</tt> flag to
+
+ <span><tt class="methodname">DbEnv::repmgr_add_remote_site()</tt>.</span>
+ </span>
+
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="noautoinit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="bulk.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Stop Auto-Initialization </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Bulk Transfers</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/elections.html b/db/docs/gsg_db_rep/CXX/elections.html
new file mode 100644
index 000000000..8157cf14a
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/elections.html
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Holding Elections</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="apioverview.html" title="The Replication APIs" />
+ <link rel="next" href="permmessages.html" title="Permanent Message Handling" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Holding Elections</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="apioverview.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="permmessages.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="elections"></a>Holding Elections</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Finding a master environment is one of the fundamental activities that
+ every replication replica must perform. Upon startup, the
+ underlying DB replication code will attempt to
+ locate a master. If a master cannot be found, then the
+ environment should initiate an election.
+ </p>
+ <p>
+ How elections are held depends upon the API that you use to
+ implement replication. For example, if you are using the
+ replication framework elections are held transparently without any
+ input from your application's code. In this case,
+ DB will determine which environment is the master and which
+ are replicas.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="influencingelections"></a>Influencing Elections</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If you want to control the election process, you can declare
+ a specific environment to be the master. Note that for the replication framework,
+ it is only possible to do this at application startup.
+ Should the master become unavailable during run-time for any
+ reason, an election is held. The environment that receives
+ the most number of votes, wins the election and becomes the
+ master. A machine receives a vote because it has the most
+ number of log records.
+ </p>
+ <p>
+ Because ties are possible when elections are held,
+ it is possible to influence which environment will win
+ the election. How you do this depends on which API you
+ are using. In particular, if you are writing a custom replication
+ layer, then there are a great many ways to manually influence
+ elections.
+ </p>
+ <p>
+ One such mechanism is priorities. When votes are
+ cast during an election, both the number of log records
+ contained in the environment <span class="emphasis"><em>and</em></span>
+ the environment's priority are considered. So given two
+ environments with the same number of log records, votes
+ are cast for the environment with the higher priority.
+ </p>
+ <p>
+ Therefore, if you have a machine that you prefer to
+ become a master in the event of an election, assign it
+ a high priority. Assuming that the election is held at
+ a time when the preferred machine has up-to-date log
+ records, that machine will win the election.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="winningelections"></a>Winning Elections</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To win an election:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ There cannot currently be a
+ master environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ The environment must have the most
+ recent log records. Part of
+ holding the election is
+ determining which environments have
+ the most recent log records.
+ This process happens
+ automatically; your code does
+ not need to involve itself in
+ this process.
+ </p>
+ </li>
+ <li>
+ <p>
+ The environment must receive the most
+ number of votes from the
+ replication environments that are
+ participating in the election.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ If you are using the replication framework, then in the event of a
+ tie vote the environment with the highest priority wins
+ the election. If two or more environments receive the same
+ number of votes and have the same priority, then
+ the underlying replication code picks one of the
+ environments to
+ be the winner. Which winner will be picked by the
+ replication code is unpredictable from the
+ perspective of your application code.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="switchingmasters"></a>Switching Masters</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To switch masters:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Start up the environment that you want
+ to be master as normal. At this
+ time it is a replica. Make
+ sure this environment has a higher
+ priority than all the other
+ environments.
+ </p>
+ </li>
+ <li>
+ <p>
+ Allow the new environment to run for a
+ time as a replica. This allows
+ it to obtain the most recent
+ copies of the log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Shut down the current master.
+ This should force an election.
+ Because the new environment has the
+ highest priority, it will win
+ the election, provided it has
+ had enough time to obtain all
+ the log records.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally restart the old
+ master environment. Because there is
+ currently a master environment, an
+ election will not be held and
+ the old master will now run as
+ a replica environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="apioverview.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="permmessages.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">The Replication APIs </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Permanent Message Handling</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/electiontimes.html b/db/docs/gsg_db_rep/CXX/electiontimes.html
new file mode 100644
index 000000000..c7c0318cf
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/electiontimes.html
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Election Times</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="fwrkpermmessage.html" title="Permanent Message Handling" />
+ <link rel="next" href="fmwrkconnectretry.html" title="Managing Connection Retries" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Election Times</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fwrkpermmessage.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fmwrkconnectretry.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="electiontimes"></a>Managing Election Times</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Where it comes to elections, there are two timeout
+ values with which you should be concerned: election
+ timeouts and election retries.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="electiontimeout"></a>Managing Election Timeouts</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a environment calls for an election, it will wait
+ some amount of time for the other replicas in the
+ replication group to respond. The amount of time
+ that the environment will wait before declaring the
+ election completed is the <span class="emphasis"><em>election timeout</em></span>.
+ </p>
+ <p>
+ If the environment hears from all other known replicas before
+ the election timeout occurs, the election is considered
+ a success and a master is elected.
+ </p>
+ <p>
+ If only a subset of replicas respond, then the success
+ or failure of the election is determined by (1)
+ how many replicas have responded and (2) the
+ election policy that is in place at the time.
+ For example, usually it only takes a simple
+ majority of replicas to elect a master. If
+ there are enough votes for a given environment to
+ meet that standard, then the master has been
+ elected and the election is considered a
+ success.
+ </p>
+ <p>
+ However, upon application startup you can
+ require that all known replicas must participate in the
+ election. Or, it is possible that not enough
+ votes are cast to select a master even with a
+ simple majority. If either of these conditions
+ occur when the election timeout value is
+ reached, the election is considered a failure
+ and a master is not elected. At this point,
+ your replication group is operating without a
+ master, which means that, essentially,
+ your replicated application has been placed in
+ read-only mode.
+ </p>
+ <p>
+ Note, however, that the replication framework will attempt a
+ new election after a given amount of time has
+ passed. See the next section for details.
+ </p>
+ <p>
+ You set the election timeout value using
+
+ <span><tt class="methodname">DbEnv::rep_set_timeout()</tt>.</span>
+ To do so, specify the
+ <tt class="literal">DB_REP_ELECTION_TIMEOUT</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ timeout value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="electretrytime"></a>Managing Election Retry Times</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In the event that a election fails (see the
+ previous section), an election will not be
+ attempted again until the election retry
+ timeout value has expired.
+ </p>
+ <p>
+ You set the retry timeout value using
+
+ <span><tt class="methodname">DbEnv::rep_set_timeout()</tt>.</span>
+ To do so, specify the
+ <tt class="literal">DB_REP_ELECTION_RETRY</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ retry value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fwrkpermmessage.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fmwrkconnectretry.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Permanent Message Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Connection Retries</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/exampledoloop.html b/db/docs/gsg_db_rep/CXX/exampledoloop.html
new file mode 100644
index 000000000..77c3c0780
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/exampledoloop.html
@@ -0,0 +1,541 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Example Processing Loop</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="previous" href="processingloop.html" title="Processing Loop" />
+ <link rel="next" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Example Processing Loop</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="processingloop.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Replica versus Master Processes</th>
+ <td width="20%" align="right"> <a accesskey="n" href="addfeatures.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="exampledoloop"></a>Example Processing Loop</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In this section we take the example
+ processing loop that we presented in the
+ previous section and we flesh it out to
+ provide a more complete example. We do this
+ by updating the
+ <tt class="function">doloop()</tt>
+ function that our original transaction
+ application used
+
+ <span>(see <a href="simpleprogramlisting.html#doloop_cxx">Method: RepMgr::doloop()</a>)</span>
+
+ to fully support our replicated application.
+ </p>
+ <p>
+ In the following example code, code that we
+ add to the original example is presented in
+ <b class="userinput"><tt>bold</tt></b>.
+ </p>
+ <p>
+ To begin, we include a new header file into
+ our application so that we can check for the
+ <tt class="literal">ENOENT</tt> return value later
+ in our processing loop. We also define our
+ <tt class="literal">APP_DATA</tt>
+ structure, and we define a
+ <tt class="literal">sleeptime</tt> value.
+
+
+
+ <span>
+ Finally, we update <tt class="classname">RepMgr</tt>
+ to have a new method for our event notification
+ callback, and to add a new data member for our
+ <tt class="literal">APP_DATA</tt> data member.
+ </span>
+ </p>
+ <pre class="programlisting">#include &lt;db_cxx.h&gt;
+#include &lt;iostream&gt;
+<b class="userinput"><tt>#include &lt;errno.h&gt;</tt></b>
+
+...
+// Skipping all the RepHostInfoObj and RepConfigInfo code, which does not
+// change.
+...
+
+using std::cout;
+using std::cin;
+using std::cerr;
+using std::endl;
+using std::flush;
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE &quot;quote.db&quot;
+<b class="userinput"><tt>#define SLEEPTIME 3</tt></b>
+
+const char *progname = &quot;RepMgr&quot;;
+
+<b class="userinput"><tt>// Struct used to store information in Db app_private field.
+typedef struct {
+ int is_master;
+} APP_DATA;</tt></b>
+
+class RepMgr
+{
+public:
+ // Constructor.
+ RepMgr();
+ // Initialization method. Creates and opens our environment handle.
+ int init(RepConfigInfo* config);
+ // The doloop is where all the work is performed.
+ int doloop();
+ // terminate() provides our shutdown code.
+ int terminate();
+
+ <b class="userinput"><tt>// event notification callback
+ static void
+ event_callback(DbEnv * dbenv, u_int32_t which, void *info);</tt></b>
+
+private:
+ // disable copy constructor.
+ RepMgr(const RepMgr &amp;);
+ void operator = (const RepMgr &amp;);
+
+ // internal data members.
+ <b class="userinput"><tt>APP_DATA app_data;</tt></b>
+ RepConfigInfo *app_config;
+ DbEnv dbenv;
+
+ // private methods.
+ // print_stocks() is used to display the contents of our database.
+ static int print_stocks(Db *dbp);
+}; </pre>
+ <p>
+ That done, we can skip the
+
+ <span><tt class="methodname">main()</tt> method, because it does not change.</span>
+
+
+ Instead, we skip down to our
+ <span><tt class="classname">RepMgr</tt> constructor where we initialize our
+ <tt class="literal">APP_DATA is_master</tt> data member:</span>
+
+
+</p>
+ <pre class="programlisting">
+RepMgr::RepMgr() : app_config(0), dbenv(0)
+{
+ <b class="userinput"><tt>app_data.is_master = 0; // assume I start out as client</tt></b>
+}
+</pre>
+ <p>
+ That done, we must also
+ update <tt class="methodname">RepMgr::init()</tt> to do a couple
+ of things. First, we need to register our event callback with
+ the environment handle. We also need to make our
+ <tt class="literal">APP_DATA</tt> data member available through our
+ environment handle's <tt class="methodname">app_private</tt>
+ field. This is a fairly trivial update, and it happens at the
+ top of the method (we skip the rest of the method's listing
+ since it does not change):
+
+ </p>
+ <pre class="programlisting">int RepMgr::init(RepConfigInfo *config)
+{
+ int ret = 0;
+
+ app_config = config;
+
+ dbenv.set_errfile(stderr);
+ dbenv.set_errpfx(progname);
+ <b class="userinput"><tt>dbenv.set_app_private(&amp;app_data);
+ dbenv.set_event_notify(event_callback);</tt></b>
+
+ ... </pre>
+ <p>
+ That done, we need to implement our
+ <tt class="function">event_callback()</tt> callback. Note that what we use
+ here is no different from the callback that we described in
+ the previous section. However, for the sake of completeness we
+ provide the implementation here again.
+</p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt>/*
+ * A callback used to determine whether the local environment is a replica
+ * or a master. This is called by the replication framework
+ * when the local replication environment changes state.
+ */
+void RepMgr::event_callback(DbEnv *dbenv, u_int32_t which, void *info)
+{
+ APP_DATA *app = dbenv-&gt;get_app_private();
+
+ info = NULL; /* Currently unused. */
+
+ switch (which) {
+ case DB_EVENT_REP_MASTER:
+ app-&gt;is_master = 1;
+ break;
+
+ case DB_EVENT_REP_CLIENT:
+ app-&gt;is_master = 0;
+ break;
+
+ case DB_EVENT_REP_STARTUPDONE: /* fallthrough */
+ case DB_EVENT_REP_NEWMASTER:
+ /* Ignore. */
+ break;
+
+ default:
+ dbenv-&gt;errx(dbenv, &quot;ignoring event %d&quot;, which);
+ }
+}</tt>
+ </b>
+ </pre>
+ <p>
+ That done, we need to update our
+ <tt class="function">doloop()</tt>
+
+
+ <span>method.</span>
+</p>
+ <p>
+ We begin by updating our database handle open flags to
+ determine which flags to use, depending on whether the
+ application is running as a master.
+ </p>
+ <pre class="programlisting">#define BUFSIZE 1024
+int RepMgr::doloop()
+{
+ Db *dbp;
+ Dbt key, data;
+ char buf[BUFSIZE], *rbuf;
+ int ret;
+
+ dbp = NULL;
+ memset(&amp;key, 0, sizeof(key));
+ memset(&amp;data, 0, sizeof(data));
+ ret = 0;
+
+ for (;;) {
+ if (dbp == NULL) {
+ dbp = new Db(&amp;dbenv, 0);
+
+ // Set page size small so page allocation is cheap.
+ if ((ret = dbp-&gt;set_pagesize(512)) != 0)
+ goto err;
+
+ try {
+ dbp-&gt;open(NULL, DATABASE, NULL, DB_BTREE,
+ <b class="userinput"><tt>app_data.is_master ? DB_CREATE | DB_AUTO_COMMIT :
+ DB_AUTO_COMMIT</tt></b>, 0); </pre>
+ <p>
+ When we open the database, we modify our error handling to
+ account for the case where the database does not yet exist. This can
+ happen if our code is running as a replica and the replication framework has not
+ yet had a chance to create the databases for us. Recall that replicas never
+ write to their own databases directly, and so they cannot
+ create databases on their own.
+</p>
+ <p>
+ If we detect that the database does not yet exist, we simply
+ close the database handle, sleep for a short period of time
+ and then continue processing. This gives the replication framework a chance to
+ create the database so that our replica can continue
+ operations.
+</p>
+ <pre class="programlisting"> } catch(DbException dbe) {
+ <b class="userinput"><tt>/* It is expected that this condition will be triggered
+ * when client sites start up.
+ * It can take a while for the master site to be found
+ * and synced, and no DB will be available until then.
+ */
+ if (dbe.get_errno() == ENOENT) {
+ cout &lt;&lt; &quot;No stock db available yet - retrying.&quot; &lt;&lt; endl;
+ try {
+ dbp-&gt;close(0);
+ } catch (DbException dbe2) {
+ cout &lt;&lt; &quot;Unexpected error closing after failed&quot;
+ &lt;&lt; &quot; open, message: &quot; &lt;&lt; dbe2.what() &lt;&lt; endl;
+ dbp = NULL;
+ goto err;
+ }
+ dbp = NULL;
+ sleep(SLEEPTIME);
+ continue;
+ } else {</tt></b>
+ dbenv.err(ret, &quot;DB-&gt;open&quot;);
+ throw dbe;
+ <b class="userinput"><tt>}</tt></b>
+ }
+ } </pre>
+ <p>
+ Next we modify our prompt, so that if the local process is running
+ as a replica, we can tell from the shell that the prompt is for a
+ read-only process.
+ </p>
+ <pre class="programlisting"> <b class="userinput"><tt>cout &lt;&lt; &quot;QUOTESERVER&quot; ;
+ if (!app_data.is_master)
+ cout &lt;&lt; &quot;(read-only)&quot;;
+ cout &lt;&lt; &quot;&gt; &quot; &lt;&lt; flush; </tt></b></pre>
+ <p>
+ When we collect data from the prompt, there is a case that says
+ if no data is entered then show the entire stocks database.
+ This display is performed by our
+ <tt class="function">print_stocks()</tt>
+
+ <span>method</span>
+ (which has not
+ required a modification since we first introduced it in
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+ <span>Method: RepMgr::print_stocks()</span>
+
+ </a>).
+ </p>
+ <p>
+ When we call
+ <span><tt class="function">print_stocks()</tt>, </span>
+
+ we check for a dead replication handle. Dead
+ replication handles happen whenever a replication election
+ results in a previously committed transaction becoming
+ invalid. This is an error scenario caused by a new master having a
+ slightly older version of the data than the original
+ master and so all replicas must modify their database(s) to
+ reflect that of the new master. In this situation, some
+ number of previously committed transactions may have to be
+ unrolled. From the replica's perspective, the database
+ handles should all be closed and then opened again.
+ </p>
+ <pre class="programlisting">
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if (strtok(&amp;buf[0], &quot; \t\n&quot;) == NULL) {
+ switch ((ret = print_stocks(dbp))) {
+ case 0:
+ continue;
+ <b class="userinput"><tt>case DB_REP_HANDLE_DEAD:
+ (void)dbp-&gt;close(DB_NOSYNC);
+ cout &lt;&lt; &quot;closing db handle due to rep handle dead&quot; &lt;&lt; endl;
+ dbp = NULL;
+ continue;</tt></b>
+ default:
+ dbp-&gt;err(ret, &quot;Error traversing data&quot;);
+ goto err;
+ }
+ }
+ rbuf = strtok(NULL, &quot; \t\n&quot;);
+ if (rbuf == NULL || rbuf[0] == '\0') {
+ if (strncmp(buf, &quot;exit&quot;, 4) == 0 ||
+ strncmp(buf, &quot;quit&quot;, 4) == 0)
+ break;
+ dbenv.errx(&quot;Format: TICKER VALUE&quot;);
+ continue;
+ } </pre>
+ <p>
+ That done, we need to add a little error checking to our
+ command prompt to make sure the user is not attempting to
+ modify the database at a replica. Remember, replicas must never
+ modify their local databases on their own. This guards against
+ that happening due to user input at the prompt.
+ </p>
+ <pre class="programlisting"> <b class="userinput"><tt>if (!app_data.is_master) {
+ dbenv-&gt;errx(dbenv, &quot;Can't update at client&quot;);
+ continue;
+ }</tt></b>
+
+ key.set_data(buf);
+ key.set_size((u_int32_t)strlen(buf));
+
+ data.set_data(rbuf);
+ data.set_size((u_int32_t)strlen(rbuf));
+
+ if ((ret = dbp-&gt;put(NULL, &amp;key, &amp;data, 0)) != 0)
+ {
+ dbp-&gt;err(ret, &quot;DB-&gt;put&quot;);
+ if (ret != DB_KEYEXIST)
+ goto err;
+ }
+ }
+
+err: if (dbp != NULL)
+ (void)dbp-&gt;close(dbp, DB_NOSYNC);
+
+ return (ret);
+} </pre>
+ <p>
+ With that completed, we are all done updating our application
+ for replication.
+
+ The only remaining
+
+ <span>method, <tt class="function">print_stocks()</tt>,</span>
+
+
+ is unmodified from when we
+ originally introduced it. For details on that function, see
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+ <span>Method: RepMgr::print_stocks()</span>
+
+ </a>.
+</p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="runningit"></a>Running It</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To run our replicated application, we need to make
+ sure each participating environment has its own unique
+ home directory. We can do this by running
+ each site on a separate networked machine, but that
+ is not strictly necessary; multiple instances of this
+ code can run on the same machine provided the
+ environment home restriction is observed.
+ </p>
+ <p>
+ To run a process, make sure the environment home
+ exists and then start the process using the
+ <tt class="literal">-h</tt> option to specify that
+ directory. You must also use the <tt class="literal">-m</tt>
+ option to identify the local host and port that this
+ process will use to listen for replication messages, and
+ the <tt class="literal">-o</tt> option to identify the other
+ processes in the replication group. Finally, use the
+ <tt class="literal">-p</tt> option to specify a priority.
+ The process that you designate to have the highest priority will become
+ the master.
+ </p>
+ <pre class="programlisting">&gt; mkdir env1
+&gt; ./RepMgr -h env1 -n 2 -m localhost:8080 -o localhost:8081 -p 10
+No stock database yet available.
+No stock database yet available. </pre>
+ <p>
+ Now, start another process. This time, change the environment
+ home to something else, use the <tt class="literal">-m</tt> to at
+ least change the port number the process is listening on, and
+ use the <tt class="literal">-o</tt> option to identify the host and
+ port of the other replication process:
+</p>
+ <pre class="programlisting">&gt; mkdir env2
+&gt; ./RepMgr -h env2 -n 2 -m localhost:8081 -o localhost:8080 -p 20</pre>
+ <p>
+ After a short pause, the second process should display the master
+ prompt:
+</p>
+ <pre class="programlisting">
+QUOTESERVER &gt; </pre>
+ <p>
+ And the first process should
+ display the read-only prompt:
+</p>
+ <pre class="programlisting">
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Now go to the master process and give it a couple of stocks and stock
+ prices:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; FAKECO 9.87
+QUOTESERVER&gt; NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ Then, go to the replica and hit <b class="userinput"><tt>return</tt></b> at the prompt to
+ see the new values:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 9.87
+ NOINC .23
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Doing the same at the master results in the same thing:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 9.87
+ NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ You can change a stock by simply entering the stock value and
+ new price at the master's prompt:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; FAKECO 10.01
+QUOTESERVER&gt; </pre>
+ <p>
+ Then, go to either the master or the replica to see the updated
+ database:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 10.01
+ NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ And on the replica:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 10.01
+ NOINC .23
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Finally, to quit the applications, simply type
+ <tt class="literal">quit</tt> at both prompts:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt; quit
+&gt; </pre>
+ <p>
+ And on the master as well:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; quit
+&gt; </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="processingloop.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="fwrkmasterreplica.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="addfeatures.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Processing Loop </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 5. Additional Features</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/fmwrkconnectretry.html b/db/docs/gsg_db_rep/CXX/fmwrkconnectretry.html
new file mode 100644
index 000000000..3d3890613
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/fmwrkconnectretry.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Connection Retries</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="electiontimes.html" title="Managing Election Times" />
+ <link rel="next" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Connection Retries</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="electiontimes.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fwrkmasterreplica.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="fmwrkconnectretry"></a>Managing Connection Retries</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In the event that a communication failure occurs between
+ two environments in a replication group, the replication framework will wait a set
+ amount of time before attempting to re-establish the
+ connection. You can configure this wait value using
+
+ <span>
+
+ <span><tt class="methodname">DbEnv::rep_set_timeout()</tt>.</span>
+ To do so, specify the
+ <tt class="literal">DB_REP_CONNECTION_RETRY</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ retry value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </span>
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="electiontimes.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fwrkmasterreplica.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Election Times </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 4. Replica versus Master Processes</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/fwrkmasterreplica.html b/db/docs/gsg_db_rep/CXX/fwrkmasterreplica.html
new file mode 100644
index 000000000..dc04d0f66
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/fwrkmasterreplica.html
@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 4. Replica versus Master Processes</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="fmwrkconnectretry.html" title="Managing Connection Retries" />
+ <link rel="next" href="processingloop.html" title="Processing Loop" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 4. Replica versus Master Processes</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fmwrkconnectretry.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="processingloop.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="fwrkmasterreplica"></a>Chapter 4. Replica versus Master Processes</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkmasterreplica.html#determinestate">Determining State</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="processingloop.html">Processing Loop</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="exampledoloop.html">Example Processing Loop</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="exampledoloop.html#runningit">Running It</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Every environment participating in a replicated application
+ must know whether it is a <span class="emphasis"><em>master</em></span> or
+ <span class="emphasis"><em>replica</em></span>. The reason for this is
+ because, simply, the master can modify the database while
+ replicas cannot. As a result, not only will you open
+ databases differently depended on whether the environment is
+ running as a master, but the environment will frequently
+ behave quit a bit differently depending on whether it
+ thinks it is operating as the read/write interface for
+ your database.
+ </p>
+ <p>
+ Moreover, an environment must also be capable of
+ gracefully switching between master and replica states.
+ This means that the environment must be able to detect when
+ it has switched states.
+ </p>
+ <p>
+ Not surprisingly, a large part of your application's code
+ will be tied up in knowing which state a given
+ environment is in and then in the logic of how to behave depending on
+ its state.
+ </p>
+ <p>
+ This chapter shows you how to determine your environment's
+ state, and it then shows you some sample code on how
+ an application might behave depending on whether it is a
+ master or a replica in a replicated application.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="determinestate"></a>Determining State</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to determine whether your code is
+ running as a master or a replica, you implement a
+ callback whose function it is to respond to
+ events that happen within the DB library.
+ </p>
+ <p>
+ Note that this callback is usable for events beyond
+ those required for replication purposes. In this
+ section, however, we only discuss the
+ replication-specific events.
+ </p>
+ <p>
+ The callback is required to determine
+ which event has been passed to it, and then take
+ action depending on the event. For replication,
+ the events that we care about are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_MASTER</tt>
+
+ </p>
+ <p>
+ The local environment is now a master.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_CLIENT</tt>
+
+ </p>
+ <p>
+ The local environment is now a replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_STARTUPDONE</tt>
+
+ </p>
+ <p>
+ The replica has completed startup
+ synchronization and is now
+ processing log records received
+ from the master.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_EVENT_REP_NEWMASTER</tt>
+
+ </p>
+ <p>
+ An election was held and a new
+ environment was made a master. However,
+ the current environment <span class="emphasis"><em>is
+ not</em></span> the master. This
+ event exists so that you can
+ cause your code to take some
+ unique action in the event that the
+ replication groups switches masters.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that these events are raised whenever the
+ state is established. That is, when the current
+ environment becomes a client, and that includes
+ at application startup, the event is raised.
+ Also, when an election is held and a client is elected to be a
+ master, then the event occurs.
+ </p>
+ <p>
+ The implementation of this callback is fairly
+ simple. First you pass a structure to the
+ environment handle that you can use to record the
+ environment's state, and then you implement a switch
+ statement within the callback that you use to
+ record the current state, depending on the
+ arriving event.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;db_cxx.h&gt;
+/* Forward declaration */
+void *event_callback(DbEnv *, u_int32_t, void *);
+
+...
+
+/* The structure we use to track our environment's state */
+typedef struct {
+ int is_master;
+} APP_DATA;
+
+...
+
+/*
+ * Inside our main() function, we declare an APP_DATA variable.
+ */
+APP_DATA my_app_data;
+my_app_data.is_master = 0; /* Assume we start as a replica */
+
+...
+
+/*
+ * Now we open our environment handle and set the APP_DATA structure
+ * to it's app_private member.
+ */
+DbEnv *dbenv = new DbEnv(0);
+dbenv-&gt;set_app_private(&amp;my_app_data);
+
+/* Having done that, register the callback with the
+ * Berkeley DB library
+ */
+dbenv-&gt;set_event_notify(event_callback); </pre>
+ <p>
+ That done, we still need to implement the callback itself. This
+ implementation can be fairly trivial.
+</p>
+ <pre class="programlisting">/*
+ * A callback used to determine whether the local environment is a replica
+ * or a master. This is called by the replication framework
+ * when the local environment changes state.
+ */
+void *
+event_callback(DbEnv *dbenv, u_int32_t which, void *info)
+{
+ APP_DATA *app = dbenv-&gt;get_app_private();
+
+ info = NULL; /* Currently unused. */
+
+ switch (which) {
+ case DB_EVENT_REP_MASTER:
+ app-&gt;is_master = 1;
+ break;
+
+ case DB_EVENT_REP_CLIENT:
+ app-&gt;is_master = 0;
+ break;
+
+ case DB_EVENT_REP_STARTUPDONE: /* fallthrough */
+ case DB_EVENT_REP_NEWMASTER:
+ /* Ignore. */
+ break;
+
+ default:
+ dbenv-&gt;errx(dbenv, &quot;ignoring event %d&quot;, which);
+ }
+} </pre>
+ <p>
+ Notice how we access the
+ <tt class="literal">APP_DATA</tt> information using the environment
+ handle's <tt class="literal">app_private</tt> data member. We also ignore
+ the <tt class="literal">DB_EVENT_REP_NEWMASTER</tt> and
+ <tt class="literal">DB_EVENT_REP_STARTUPDONE</tt> cases since these are not
+ relevant for simple replicated applications.
+</p>
+ <p>
+ Of course, this only gives us the current state of the environment. We
+ still need the code that determines what to do when the environment
+ changes state and how to behave depending on the state (described
+ in the next section).
+</p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fmwrkconnectretry.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="processingloop.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Connection Retries </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Processing Loop</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/fwrkpermmessage.html b/db/docs/gsg_db_rep/CXX/fwrkpermmessage.html
new file mode 100644
index 000000000..b5fa7c4ab
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/fwrkpermmessage.html
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Permanent Message Handling</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="repmgr_init_example_c.html" title="Adding the Replication Framework to&#10; &#10; SimpleTxn&#10; " />
+ <link rel="next" href="electiontimes.html" title="Managing Election Times" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Permanent Message Handling</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repmgr_init_example_c.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="electiontimes.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="fwrkpermmessage"></a>Permanent Message Handling</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described in <a href="permmessages.html">Permanent Message Handling</a>,
+ messages are marked permanent if they contain database
+ modifications that should be committed at the replica.
+ DB's replication code decides if it must flush its
+ transaction logs to disk depending on whether it receives
+ sufficient permanent message acknowledgments from the
+ participating replica. More importantly, the thread
+ performing the transaction commit blocks
+ until it either receives enough acknowledgments, or the
+ acknowledgment timeout expires.
+ </p>
+ <p>
+ The replication framework is fully capable of managing permanent messages
+ for you if your application requires it (most do).
+ Almost all of the details of this are handled by the
+ replication framework for you. However, you do have to set some policies
+ that tell the replication framework how to handle permanent messages.
+ </p>
+ <p>
+ There are two things that you have to do:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Determine how many acknowledgments
+ must be received by the master.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify the amount of time that
+ replicas have to send their
+ acknowledgments.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpermpolicy"></a>Identifying Permanent Message Policies</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ You identify permanent message policies using the
+
+
+
+
+ Note that you can set permanent message
+ policies at any time during the life of the
+ application.
+ </p>
+ <p>
+ The following permanent message policies are available when you use
+ the replication framework:
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_NONE</tt>
+
+ </p>
+ <p>
+ No permanent message acknowledgments are required. If
+ this policy is selected, permanent message handling is
+ essentially &quot;turned off.&quot; That is, the master will
+ never wait for replica acknowledgments. In this case,
+ transaction log data is either flushed or not strictly
+ depending on the type of commit that is being performed
+ (synchronous or asynchronous).
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ONE</tt>
+
+ </p>
+ <p>
+ At least one replica must acknowledge the permanent
+ message within the timeout period.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ONE_PEER</tt>
+
+ </p>
+ <p>
+ At least one electable peer must acknowledge the permanent
+ message within the timeout period.
+
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ALL</tt>
+
+ </p>
+ <p>
+ All environments must acknowledge the message within
+ the timeout period. This
+ policy should be selected only if your replication
+ group has a small number of replicas, and those replicas
+ are on extremely reliable networks and servers.
+ </p>
+ <p>
+ When this flag is used, the actual number of
+ environments that must respond is
+ determined by the value set for
+
+ <span><tt class="methodname">DbEnv::rep_set_nsites()</tt>.</span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_ALL_PEERS</tt>
+
+ </p>
+ <p>
+ All electable peers must acknowledge the message within the
+ timeout period. This
+ policy should be selected only if your replication
+ group is small, and its various environments
+ are on extremely reliable networks and servers.
+ </p>
+ <p>
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DB_REPMGR_ACKS_QUORUM</tt>
+
+ </p>
+ <p>
+ A quorum of electable peers must acknowledge the message within the timeout period.
+ A quorum is reached when acknowledgments are received from the minimum number
+ of environments needed to ensure that the record remains durable
+ if an election is held. That is, the master wants to hear from enough
+ electable replicas that they have committed the record so that if an election
+ is held, the master knows the record will exist even if a new master is selected.
+ </p>
+ <p>
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ By default, a quorum of sites must must acknowledge a permanent
+ message in order for it considered to have been successfully
+ transmitted. The actual number of environments that must respond is
+ calculated using the value set with
+
+ <span><tt class="methodname">DbEnv::rep_set_nsites()</tt>.</span>
+
+</p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpermtimeout"></a>Setting the Permanent Message Timeout</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The permanent message timeout represents the
+ maximum amount of time the committing thread
+ will block waiting for message
+ acknowledgments. If sufficient
+ acknowledgments arrive before this timeout has
+ expired, the thread continues operations as
+ normal. However, if this timeout expires, the
+ committing thread flushes its transaction log
+ buffer before continuing with normal
+ operations.
+ </p>
+ <p>
+ You set the timeout value using the
+
+ <tt class="methodname">DbEnv::rep_set_timeout()</tt>
+ method. When you do this, you provide the
+ <tt class="literal">DB_REP_ACK_TIMEOUT</tt> flag to
+ the <tt class="literal">which</tt> parameter, and the
+ timeout value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting"> dbenv-&gt;rep_set_timeout(DB_REP_ACK_TIMEOUT, 100); </pre>
+ <p>
+ This timeout value can be set at anytime during the
+ life of the application.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="perm2fmwrkexample"></a>Adding a Permanent Message Policy to
+
+ <span>RepMgr</span>
+
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For illustration purposes, we will now update
+
+ <tt class="literal">RepMgr</tt>
+
+ such that it requires only one acknowledgment from
+ a replica on transactional commits. Also, we will give
+ this acknowledgment a 500 microsecond timeout
+ value. This means that our application's main
+ thread will block for up to 500 microseconds waiting
+ for an acknowledgment. If it does not receive at
+ least one acknowledgment in that amount of time,
+ DB will flush the transaction logs to disk
+ before continuing on.
+ </p>
+ <p>
+ This is a very simple update. We can perform the
+ entire thing in
+ <tt class="methodname">RepMgr::init()</tt>
+
+ immediately after we set the application's priority
+ and before we open our environment handle.
+ </p>
+ <pre class="programlisting">int RepMgr::init(RepConfigInfo *config)
+{
+ int ret = 0;
+
+ app_config = config;
+
+ dbenv.set_errfile(stderr);
+ dbenv.set_errpfx(progname);
+
+ if ((ret = dbenv.repmgr_set_local_site(app_config-&gt;this_host.host,
+ app_config-&gt;this_host.port, 0)) != 0) {
+ cerr &lt;&lt; &quot;Could not set listen address to host:port &quot;
+ &lt;&lt; app_config-&gt;this_host.host &lt;&lt; &quot;:&quot;
+ &lt;&lt; app_config-&gt;this_host.port
+ &lt;&lt; &quot;error: &quot; &lt;&lt; ret &lt;&lt; endl;
+ }
+
+ for ( REP_HOST_INFO *cur = app_config-&gt;other_hosts; cur != NULL;
+ cur = cur-&gt;next) {
+ if ((ret = dbenv.repmgr_add_remote_site(cur-&gt;host, cur-&gt;port,
+ 0)) != 0) {
+ cerr &lt;&lt; &quot;could not add site.&quot; &lt;&lt; endl
+ }
+ }
+
+ if (app_config-&gt;totalsites &gt; 0) {
+ try {
+ if ((ret = dbenv.rep_set_nsites(app_config-&gt;totalsites)) != 0)
+ dbenv.err(ret, &quot;set_nsites&quot;);
+ } catch (DbException dbe) {
+ cerr &lt;&lt; &quot;rep_set_nsites call failed. Continuing.&quot; &lt;&lt; endl;
+ }
+ }
+
+ dbenv.rep_set_priority(app_config-&gt;priority);
+
+ <b class="userinput"><tt>/* Permanent messages require at least one ack */
+ dbenv.repmgr_set_ack_policy(DB_REPMGR_ACKS_ONE);
+ /* Give 500 microseconds to receive the ack */
+ dbenv.rep_set_timeout(DB_REP_ACK_TIMEOUT, 500);</tt></b>
+
+ dbenv.set_cachesize(0, CACHESIZE, 0);
+ dbenv.set_flags(DB_TXN_NOSYNC, 1);
+
+ ... </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repmgr_init_example_c.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="electiontimes.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Adding the Replication Framework to
+
+ SimpleTxn
+  </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Election Times</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/gettingStarted.css b/db/docs/gsg_db_rep/CXX/gettingStarted.css
new file mode 100644
index 000000000..c1b4c86b7
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/gettingStarted.css
@@ -0,0 +1,41 @@
+body { width: 45em;
+ margin-left: 3em;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11pt;
+ }
+
+h2.title { margin-left: -1em;
+ font-family: Verdana, serif;
+ font-size: 16pt;
+ }
+
+h3.title { font-family: Verdana, serif;
+ font-size: 14pt;
+ }
+
+pre.programlisting {
+ font-family: monospace;
+ background-color: #eae8e9;
+}
+
+div.navheader { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+
+div.navheader table tr td { font-size: 9pt; }
+
+div.navfooter { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+div.navfooter table tr td { font-size: 9pt; }
+
+span.emphasis { font-style: italic; font-size: 9pt;}
+
+div.appendix div.informaltable { font-size: 9pt; }
+div.appendix div.informaltable td { vertical-align: top; }
+div.appendix div.informaltable p { margin-top: .25em; }
+div.appendix div.informaltable p { margin-bottom: .25em; }
+
+
diff --git a/db/docs/gsg_db_rep/CXX/index.html b/db/docs/gsg_db_rep/CXX/index.html
new file mode 100644
index 000000000..8d9affd41
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/index.html
@@ -0,0 +1,460 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Getting Started with Replicated Berkeley DB Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="next" href="preface.html" title="Preface" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Getting Started with Replicated Berkeley DB Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="book" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h1 class="title"><a id="id650925"></a>Getting Started with Replicated Berkeley DB Applications</h1>
+ </div>
+ <div>
+ <div class="legalnotice">
+ <p class="legalnotice-title">
+ <b>Legal Notice</b>
+ </p>
+ <p>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
+ </p>
+ <p>
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
+ </p>
+ <p>
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="pubdate">9/20/2006</p>
+ </div>
+ </div>
+ <div></div>
+ <hr />
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="preface">
+ <a href="preface.html">Preface</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="introduction.html">1. Introduction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#overview">Overview</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repenvirons">Replication Environments</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repdbs">Replication Databases</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#commlayer">Communications Layer</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#masterselect">Selecting a Master</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repadvantage.html">Replication Benefits</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="apioverview.html">The Replication APIs</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repapioverview">Replication API Overview</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="elections.html">Holding Elections</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#influencingelections">Influencing Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#winningelections">Winning Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#switchingmasters">Switching Masters</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="permmessages.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmessagenot">When Not to Manage
+ Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmanage">Managing Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permimplement">Implementing Permanent
+ Message Handling</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="txnapp.html">2. Transactional Application</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnapp.html#appoverview">Application Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="simpleprogramlisting.html">Program Listing</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repconfiginfo_cxx">
+ Class: RepConfigInfo
+
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repmgr_cxx">Class: RepMgr</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#usage_cxx">Function: usage()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#main_cxx">Function: main()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repmgr_init_cxx">Method: RepMgr::init()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#doloop_cxx">Method: RepMgr::doloop()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+ Method: RepMgr::print_stocks()
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="repapp.html">3. The DB Replication Framework</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="repapp.html#rep_init_code">
+ Starting and Stopping Replication
+ </a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#election_flags">Managing Election Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#thread_count">Selecting the Number of Threads</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repmgr_init_example_c.html">Adding the Replication Framework to
+
+ SimpleTxn
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkpermmessage.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermpolicy">Identifying Permanent Message Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermtimeout">Setting the Permanent Message Timeout</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#perm2fmwrkexample">Adding a Permanent Message Policy to
+
+ RepMgr
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="electiontimes.html">Managing Election Times</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electiontimeout">Managing Election Timeouts</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electretrytime">Managing Election Retry Times</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="fmwrkconnectretry.html">Managing Connection Retries</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="fwrkmasterreplica.html">4. Replica versus Master Processes</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkmasterreplica.html#determinestate">Determining State</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="processingloop.html">Processing Loop</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="exampledoloop.html">Example Processing Loop</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="exampledoloop.html#runningit">Running It</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="addfeatures.html">5. Additional Features</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="c2ctransfer.html#fmwrkpeerserver">Identifying Peers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="bulk.html">Bulk Transfers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right" valign="top"> Preface</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/introduction.html b/db/docs/gsg_db_rep/CXX/introduction.html
new file mode 100644
index 000000000..e23296295
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/introduction.html
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="repadvantage.html" title="Replication Benefits" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="repadvantage.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#overview">Overview</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repenvirons">Replication Environments</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repdbs">Replication Databases</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#commlayer">Communications Layer</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#masterselect">Selecting a Master</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repadvantage.html">Replication Benefits</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="apioverview.html">The Replication APIs</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repapioverview">Replication API Overview</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="elections.html">Holding Elections</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#influencingelections">Influencing Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#winningelections">Winning Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#switchingmasters">Switching Masters</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="permmessages.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmessagenot">When Not to Manage
+ Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmanage">Managing Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permimplement">Implementing Permanent
+ Message Handling</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on
+ replication as used with Berkeley DB (DB). It begins by offering a
+ general overview to replication and the benefits it provides. It also
+ describes the APIs that you use to implement replication, and it
+ describes architecturally the things that you need to do to your
+ application code in order to use the replication APIs. Finally, it
+ discusses the differences in backup and restore strategies that you
+ might pursue when using replication, especially where it comes to log
+ file removal.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="overview"></a>Overview</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The DB replication APIs allow you to distribute your database
+ write operations (performed on a read-write master) to one or
+ more read-only <span class="emphasis"><em>replicas</em></span>.
+ For this reason, DB's replication implementation is said to be a
+ <span class="emphasis"><em>single master, multiple replica</em></span> replication strategy.
+ </p>
+ <p>
+ Note that your database write operations can occur only on the
+ master; any attempt to write to a replica results in an error
+ being
+
+ <span>raised by</span>
+ the DB API used to perform the write.
+ </p>
+ <p>
+ A single replication master and all of its replicas are referred
+ to as a <span class="emphasis"><em>replication group</em></span>. While all
+ members of the replication group can reside on the same
+ machine, usually each replication participant is placed on a
+ separate physical machine somewhere on the network.
+ </p>
+ <p>
+ Note that all replication applications must first be
+ transactional applications. The data that the master transmits
+ its replicas are log records that are generated as records are
+ updated. Upon transactional commit, the master transmits a
+ transaction record which tells the replicas to commit the
+ records they previously received from the master. In order for
+ all of this to work, your replicated application must also be a
+ transactional application. For this reason, it is
+ recommended that you write and debug your DB application as
+ a stand-alone transactional application before introducing the
+ replication layer to your code.
+ </p>
+ <p>
+ Finally, be aware that all machines participating in the
+ replication group must share identical
+ <span class="emphasis"><em>endianess</em></span>. Endianess is the byte-order
+ strategy used by the computing platform to store multibyte
+ numbers. Berkeley DB is sensitive to byte order and so your
+ replication infrastructure must be consistent in this area.
+ We expect to remove this requirement in some future
+ release of the product.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repenvirons"></a>Replication Environments</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The most important requirement for a replication
+ participant is that it must use a unique Berkeley DB database
+ environment independent of all other replication
+ participants. So while multiple replication participants
+ can reside on the same physical machine, no two such participants
+ can share the same environment home directory.
+ </p>
+ <p>
+ For this reason, technically replication occurs between
+ unique <span class="emphasis"><em>database environments</em></span>. So in the strictest sense,
+ a replication group consists of a <span class="emphasis"><em>master
+ environment</em></span> and
+ one or more <span class="emphasis"><em>replica environments</em></span>. However, the reality
+ is that for production code, each such environment will
+ usually be located on its own unique machine. Consequently,
+ this manual sometimes talks about <span class="emphasis"><em>replication sites</em></span>, meaning the
+ unique combination of environment home directory, host and port that a specific
+ replication application is using.
+ </p>
+ <p>
+ There is no DB-specified limit to the number of
+ environments which can participate in a replication group.
+ The only limitation here is one of resources &#8212;
+ network bandwidth, for example.
+ </p>
+ <p>
+ (Note, however, that the replication framework does place a limit on the
+ number of environments you can use. See
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ for details.)
+ </p>
+ <p>
+ Also, DB's replication implementation requires all
+ participating environments to be assigned IDs that are
+ locally unique to the given environment. Depending on the
+ replication APIs that you choose to use, you may or may not
+ need to manage this particular detail.
+ </p>
+ <p>
+ For detailed information on database environments, see
+ the <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i>
+ guide. For more information on environment IDs, see
+ the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repdbs"></a>Replication Databases</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB's databases are managed and used in exactly the same way
+ as if you were writing a non-replicated application, with
+ a couple of caveats. First, the databases maintained in a replicated environment
+ must reside either in the <tt class="literal">ENV_HOME</tt>
+ directory, or in the directory identified by the
+
+ <tt class="methodname">DbEnv::set_data_dir()</tt>
+
+ method. Unlike non-replication applications, you cannot place your
+ databases in a subdirectory below these locations. You should
+ also not use full path names for your databases or
+ environments as these are likely to break as to replicated
+ to other machines.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="commlayer"></a>Communications Layer</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to transmit database writes to the replication
+ replicas, DB requires a communications layer.
+ DB is agnostic as to what this layer should
+ look like. The only requirement is that it
+ be capable of passing two opaque data objects and an
+ environment ID from the master to its replicas without
+ corruption.
+ </p>
+ <p>
+ Because replicas are usually placed on different machines on
+ the network, the communications layer is usually some kind
+ of a network-aware implementation. Beyond that, its
+ implementation details are largely up to you. It could use
+ TCP/IP sockets, for example, or it could use
+ raw sockets if they perform better for your particular
+ application.
+ </p>
+ <p>
+ Note that you may not have to write your own communications
+ layer. DB provides a replication framework that
+ includes a fully-functional TCP/IP-based communications layer.
+ See <a href="apioverview.html">The Replication APIs</a>
+ for more information.
+ </p>
+ <p>
+ See the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ for a description of how to
+ write your own custom replication communications layer.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="masterselect"></a>Selecting a Master</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Every replication group is allowed one and only one
+ master environment. Almost always, masters are selected by
+ holding an <span class="emphasis"><em>election</em></span>. All such
+ elections are performed by the underlying Berkeley DB
+ replication code so you have to do very little to
+ implement them.
+ </p>
+ <p>
+ When holding an election, replicas &quot;vote&quot; on who should
+ be the master. Among replicas participating in the
+ election, the one with the most up-to-date set of log
+ records will win the election. Note that it's possible
+ for there to be a tie. When this occurs, priorities are
+ used to select the master. See
+ <a href="elections.html">Holding Elections</a>
+ for details.
+ </p>
+ <p>
+ For more information on holding and managing elections,
+ see <a href="elections.html">Holding Elections</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repadvantage.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Replication Benefits</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/manageblock.html b/db/docs/gsg_db_rep/CXX/manageblock.html
new file mode 100644
index 000000000..baeb8ed90
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/manageblock.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Blocking Operations</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="next" href="noautoinit.html" title="Stop Auto-Initialization" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Blocking Operations</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="addfeatures.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="noautoinit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="manageblock"></a>Managing Blocking Operations</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a replica is in the process of synchronizing with its master, all DB
+ operations are blocked until such a time as the synchronization is completed.
+ For replicas with a heavy read load, these blocked operations may represent an
+ unacceptable loss in throughput.
+ </p>
+ <p>
+ You can configure DB so that it will not block when synchronization is in
+ process. Instead, the DB operation will fail,
+
+ <span>
+ immediately returning a <tt class="literal">DB_REP_LOCKOUT</tt> error.
+ </span>
+
+
+ When this happens, it is up to your application to your application to determine
+ what action to take (that is, logging the event, making an appropriate user
+ response, retrying the operation, and so forth).
+ </p>
+ <p>
+ To turn off blocking on synchronization, specify
+ <span>
+ <tt class="literal">DB_REP_CONF_NOWAIT</tt> to
+
+ <tt class="methodname">DbEnv::rep_set_config()</tt>
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="addfeatures.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="noautoinit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 5. Additional Features </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Stop Auto-Initialization</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/noautoinit.html b/db/docs/gsg_db_rep/CXX/noautoinit.html
new file mode 100644
index 000000000..a3aaa2145
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/noautoinit.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Stop Auto-Initialization</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="manageblock.html" title="Managing Blocking Operations" />
+ <link rel="next" href="c2ctransfer.html" title="Client to Client Transfer" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Stop Auto-Initialization</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="manageblock.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="c2ctransfer.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="noautoinit"></a>Stop Auto-Initialization</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As stated in the previous section, when a replication replica is synchronizing
+ with its master, it will block all DB operations until the synchronization
+ is completed. You can turn off this behavior (see <a href="manageblock.html">Managing Blocking Operations</a>), but for replicas that have been out of touch
+ from their master for a very long time, this may not be enough.
+ </p>
+ <p>
+ If a replica has been out of touch from its master long enough, it may find that
+ it is not possible to perform synchronization. When this happens, by default the
+ master and replica internally decided to completely re-initialize the replica.
+ This re-initialization involves discarding the replica's current database(s) and
+ transferring new ones to it from the master. Depending on the size of the master's
+ databases, this can take a long time, during which time the replica will be
+ complete non-responsive when it comes to performing database operations.
+ </p>
+ <p>
+ It is possible that there is a time of the day when it is better to perform a replica
+ re-initialization. Or, you simply might want to decide to bring the replica up to
+ speed by restoring it's databases using a hot-backup taken from the master. Either
+ way, you can decide to prevent automatic-initialization of your replica. To do this
+ specify
+ <span>
+ <tt class="literal">DB_REP_CONF_NOAUTOINIT</tt> to
+
+ <tt class="methodname">DbEnv::rep_set_config()</tt>
+ and then specify <tt class="literal">1</tt> to the <tt class="literal">onoff</tt>
+ parameter. (Specify <tt class="literal">0</tt> to turn the feature off.)
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="manageblock.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="c2ctransfer.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Blocking Operations </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Client to Client Transfer</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/permmessages.html b/db/docs/gsg_db_rep/CXX/permmessages.html
new file mode 100644
index 000000000..b404585b8
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/permmessages.html
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Permanent Message Handling</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="elections.html" title="Holding Elections" />
+ <link rel="next" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Permanent Message Handling</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="elections.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnapp.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="permmessages"></a>Permanent Message Handling</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Messages received by a replica may be marked with an
+ special flag that indicates the message is permanent.
+ Custom replicated applications will receive notification of
+ this flag via the <tt class="literal">DB_REP_ISPERM</tt> return value
+ from the
+
+ <tt class="methodname">DbEnv::rep_process_message()</tt>
+ method.
+
+ There is no hard requirement that a replication application look for, or
+ respond to, this return code. However, because robust replicated
+ applications typically do manage permanent messages, we introduce
+ the concept here.
+ </p>
+ <p>
+ A message is marked as being permanent if the message
+ affects transactional integrity. For example,
+ transaction commit messages are an example of a message
+ that is marked permanent. What the application does
+ about the permanent message is driven by the durability
+ guarantees required by the application.
+ </p>
+ <p>
+ For example, consider what the replication framework does when it
+ has permanent message handling turned on and a
+ transactional commit record is sent to the replicas.
+ First, the replicas must transactional-commit the data
+ modifications identified by the message. And then, upon
+ a successful commit, the replication framework sends the master a
+ message acknowledgment.
+ </p>
+ <p>
+ For the master (again, using the replication framework), things are a little more complicated than
+ simple message acknowledgment. Usually in a replicated
+ application, the master commits transactions
+ asynchronously; that is, the commit operation does not
+ block waiting for log data to be flushed to disk before
+ returning. So when a master is managing permanent
+ messages, it typically blocks the committing thread
+ immediately before <tt class="methodname">commit()</tt>
+ returns. The thread then waits for acknowledgments from
+ its replicas. If it receives enough acknowledgments, it
+ continues to operate as normal.
+ </p>
+ <p>
+ If the master does not
+ receive message acknowledgments &#8212; or, more likely, it does not receive
+ <span class="emphasis"><em>enough</em></span> acknowledgments &#8212; the
+ committing thread flushes its log data to disk and then
+ continues operations as normal. The master application can
+ do this because replicas that fail to handle a message, for
+ whatever reason, will eventually catch up to the master. So
+ by flushing the transaction logs to disk, the master is
+ ensuring that the data modifications have made it to
+ stable storage in one location (its own hard drive).
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permmessagenot"></a>When Not to Manage
+ Permanent Messages</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ There are two reasons why you might
+ choose to not implement permanent messages.
+ In part, these go to why you are using
+ replication in the first place.
+ </p>
+ <p>
+ One class of applications uses replication so that
+ the application can improve transaction
+ through-put. Essentially, the application chooses a
+ reduced transactional durability guarantee so as to
+ avoid the overhead forced by the disk I/O required
+ to flush transaction logs to disk. However, the
+ application can then regain that durability
+ guarantee to a certain degree by replicating the
+ commit to some number of replicas.
+ </p>
+ <p>
+ Using replication to improve an application's
+ transactional commit guarantee is called
+ <span class="emphasis"><em>replicating to the network.</em></span>
+ </p>
+ <p>
+ In extreme cases where performance is of critical
+ importance to the application, the master might
+ choose to both use asynchronous commits
+ <span class="emphasis"><em>and</em></span> decide not to wait for
+ message acknowledgments. In this case the master
+ is simply broadcasting its commit activities to its
+ replicas without waiting for any sort of a reply. An
+ application like this might also choose to use
+ something other than TCP/IP for its network
+ communications since that protocol involves a fair
+ amount of packet acknowledgment all on its own. Of
+ course, this sort of an application should also be
+ very sure about the reliability of both its network and
+ the machines that are hosting its replicas.
+ </p>
+ <p>
+ At the other end of the extreme, there is a
+ class of applications that use replication
+ purely to improve read performance. This sort
+ of application might choose to use synchronous
+ commits on the master because write
+ performance there is not of critical
+ performance. In any case, this kind of an
+ application might not care to know whether its
+ replicas have received and successfully handled
+ permanent messages because the primary storage
+ location is assumed to be on the master, not
+ the replicas.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permmanage"></a>Managing Permanent Messages</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ With the exception of a rare breed of
+ replicated applications, most masters need some
+ view as to whether commits are occurring on
+ replicas as expected. At a minimum, this is because
+ masters will not flush their log buffers unless
+ they have reason to expect that permanent
+ messages have not been committed on the
+ replicas.
+ </p>
+ <p>
+ That said, it is important to remember that
+ managing permanent messages involves a fair amount
+ of network traffic. The messages must be sent to
+ the replicas and the replicas must then acknowledge
+ the message. This represents a performance overhead
+ that can be worsened by congested networks or
+ outright outages.
+ </p>
+ <p>
+ Therefore, when managing permanent messages, you
+ must first decide on how many of your replicas must
+ send acknowledgments before your master decides
+ that all is well and it can continue normal
+ operations. When making this decision, you could
+ decide that <span class="emphasis"><em>all</em></span> replicas must
+ send acknowledgments. But unless you have only one
+ or two replicas, or you are replicating over a very
+ fast and reliable network, this policy could prove
+ very harmful to your application's performance.
+ </p>
+ <p>
+ Therefore, a common strategy is to wait for an
+ acknowledgment from a simple majority of replicas.
+ This ensures that commit activity has occurred on
+ enough machines that you can be reliably certain
+ that data writes are preserved across your network.
+ </p>
+ <p>
+ Remember that replicas that do not acknowledge a
+ permanent message are not necessarily unable to
+ perform the commit; it might be that network
+ problems have simply resulted in a delay at the
+ replica. In any case, the underlying DB
+ replication code is written such that a replica that
+ falls behind the master will eventually take action
+ to catch up.
+ </p>
+ <p>
+ Depending on your application, it may be
+ possible for you to code your permanent message
+ handling such that acknowledgment must come
+ from only one or two replicas. This is a
+ particularly attractive strategy if you are
+ closely managing which machines are eligible to
+ become masters. Assuming that you have one or
+ two machines designated to be a master in the
+ event that the current master goes down, you
+ may only want to receive acknowledgments from
+ those specific machines.
+ </p>
+ <p>
+ Finally, beyond simple message acknowledgment, you
+ also need to implement an acknowledgment timeout
+ for your application. This timeout value is simply
+ meant to ensure that your master does not hang
+ indefinitely waiting for responses that will never
+ come because a machine or router is down.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permimplement"></a>Implementing Permanent
+ Message Handling</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ How you implement permanent message handling
+ depends on which API you are using to implement
+ replication. If you are using the replication framework, then
+ permanent message handling is configured using
+ policies that you specify to the framework. In
+ this case, you can configure your application
+ to:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Ignore permanent messages (the master
+ does not wait for acknowledgments).
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from a
+ quorum. A quorum is reached when
+ acknowledgments are received from the
+ minimum number of electable
+ replicas needed to ensure that
+ the record remains durable if
+ an election is held.
+ </p>
+ <p>
+ The goal here is to be
+ absolutely sure the record is
+ durable. The master wants to
+ hear from enough electable
+ replicas that they have
+ committed the record so that if
+ an election is held, the master
+ knows the record will exist even
+ if a new master is selected.
+ </p>
+ <p>
+ This is the default policy.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require an acknowledgment from at least one replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from
+ all replicas.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require an acknowledgment from a
+ peer. (The replication framework allows you to
+ designate one environment as a peer of
+ another).
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from
+ all peers.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that the replication framework simply flushes its transaction
+ logs and moves on if a permanent message is not
+ sufficiently acknowledged.
+ </p>
+ <p>
+ For details on permanent message handling with the
+ replication framework, see <a href="fwrkpermmessage.html">Permanent Message Handling</a>.
+ </p>
+ <p>
+ If these policies are not sufficient for your
+ needs, or if you want your application to take more
+ corrective action than simply flushing log buffers
+ in the event of an unsuccessful commit, then you
+ must use write a custom replication implementation.
+ </p>
+ <p>
+ For custom replication implementation, messages are
+ sent from the master to its replica using a
+ <tt class="function">send()</tt> callback that you
+ implement. Note, however, that DB's replication
+ code automatically sets the permanent
+ flag for you where appropriate.
+ </p>
+ <p>
+ If the <tt class="function">send()</tt> callback returns with a
+ non-zero status, DB flushes the transaction log
+ buffers for you. Therefore, you must cause your
+ <tt class="function">send()</tt> callback to block waiting
+ for acknowledgments from your replicas.
+ As a part of implementing the
+ <tt class="function">send()</tt> callback, you implement
+ your permanent message handling policies. This
+ means that you identify how many replicas must
+ acknowledge the message before the callback can
+ return <tt class="literal">0</tt>. You must also
+ implement the acknowledgment timeout, if any.
+ </p>
+ <p>
+ Further, message acknowledgments are sent from the
+ replicas to the master using a communications
+ channel that you implement (the replication code
+ does not provide a channel for acknowledgments).
+ So implementing permanent messages means that when
+ you write your replication communications channel,
+ you must also write it in such a way as to also
+ handle permanent message acknowledgments.
+ </p>
+ <p>
+ For more information on implementing permanent
+ message handling using a custom replication layer,
+ see the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="elections.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnapp.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Holding Elections </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 2. Transactional Application</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/preface.html b/db/docs/gsg_db_rep/CXX/preface.html
new file mode 100644
index 000000000..e384eee45
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/preface.html
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Preface</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="next" href="introduction.html" title="Chapter 1. Introduction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Preface</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="preface" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="preface"></a>Preface</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This document describes how to write replicated Berkeley DB applications.
+ The APIs used to implement replication in your application
+ are described here. This book describes the concepts surrounding replication, the scenarios under which you
+ might choose to use it, and the architectural requirements that a replication application has over a
+ transactional application.
+ </p>
+ <p>
+ This book is aimed at the software engineer responsible for writing a
+ replicated DB application.
+ </p>
+ <p>
+ This book assumes that you have already read and understood the
+ concepts contained in the
+ <span><i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.</span>
+
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="conventions"></a>Conventions Used in this Book</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following typographical conventions are used within in this manual:
+ </p>
+ <p>
+ Class names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
+ names</tt>. For example:
+
+
+
+ <span>&quot;<tt class="methodname">DbEnv::open()</tt> is a
+ <tt class="classname">DbEnv</tt> class method.&quot;</span>
+ </p>
+ <p>
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
+ </p>
+ <p>
+ Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
+ For example:
+ </p>
+ <pre class="programlisting">typedef struct vendor {
+ char name[MAXFIELD]; // Vendor name
+ char street[MAXFIELD]; // Street name and number
+ char city[MAXFIELD]; // City
+ char state[3]; // Two-digit US state code
+ char zipcode[6]; // US zipcode
+ char phone_number[13]; // Vendor phone number
+} VENDOR; </pre>
+ <p>
+ In some situations, programming examples are updated from one chapter to the next. When
+ this occurs, the new code is presented in <b class="userinput"><tt>monospaced bold</tt></b> font. For example:
+ </p>
+ <pre class="programlisting">typedef struct vendor {
+ char name[MAXFIELD]; // Vendor name
+ char street[MAXFIELD]; // Street name and number
+ char city[MAXFIELD]; // City
+ char state[3]; // Two-digit US state code
+ char zipcode[6]; // US zipcode
+ char phone_number[13]; // Vendor phone number
+ <b class="userinput"><tt>char sales_rep[MAXFIELD]; // Name of sales representative
+ char sales_rep_phone[MAXFIELD]; // Sales rep's phone number </tt></b>
+} VENDOR; </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Finally, notes of special interest are represented using a note block such
+ as this.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ transactional DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/CXX/index.html" target="_top">
+ Getting Started with Transaction Processing for C++
+ </a>
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/CXX/index.html" target="_top">
+ Getting Started with Berkeley DB for C++
+ </a>
+
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_cxx/frame.html" target="_top">
+ Berkeley DB C++ API
+ </a>
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Getting Started with Replicated Berkeley DB Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/processingloop.html b/db/docs/gsg_db_rep/CXX/processingloop.html
new file mode 100644
index 000000000..3f18d2310
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/processingloop.html
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Processing Loop</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="previous" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="next" href="exampledoloop.html" title="Example Processing Loop" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Processing Loop</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fwrkmasterreplica.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Replica versus Master Processes</th>
+ <td width="20%" align="right"> <a accesskey="n" href="exampledoloop.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="processingloop"></a>Processing Loop</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Typically the central part of any replication application
+ is some sort of a continuous loop that constantly
+ checks the state of the environment (whether it is a
+ replica or a master), opens and/or closes the
+ databases as is necessary, and performs other useful
+ work. A loop such as this one must of necessity
+ take special care to know whether it is operating
+ on a master or a replica environment because all of its
+ activities are dependent upon that state.
+ </p>
+ <p>
+ The flow of activities through the loop will
+ generally be as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Check whether the environment has
+ changed state. If it has, you
+ might want to reopen your
+ database handles, especially if
+ you opened your replica's
+ database handles as read-only.
+ In this case, you might need to
+ reopen them as read-write.
+ However, if you always open your
+ database handles as read-write,
+ then it is not automatically necessary to
+ reopen the databases due to a
+ state change. Instead, you
+ could check for a
+ <span>
+ <tt class="literal">DB_REP_HANDLE_DEAD</tt>
+ return code
+ </span>
+
+
+ when you use your
+ database handle(s). If you see
+ this, then you need to reopen
+ your database handle(s).
+ </p>
+ </li>
+ <li>
+ <p>
+ If the databases are closed,
+ create new database handles,
+ configure the handle as is
+ appropriate, and then open the
+ databases. Note that handle
+ configuration will be different,
+ depending on whether the handle
+ is opened as a replica or a
+ master. At a minimum, the master
+ should be opened with database
+ creation privileges, whereas the
+ replica does not need to be. You
+ must also open the master such
+ that its databases are
+ read-write. You
+ <span class="emphasis"><em>can</em></span> open
+ replicas with read-only
+ databases, so long as you are
+ prepared to closed and the reopen
+ the handle in the event the
+ client becomes a master.
+ </p>
+ <p>
+ Also, note that if the local
+ environment
+ is a replica, then it is possible
+ that databases do not currently
+ exist. In this case, the database
+ open attempts will fail. Your
+ code will have to take this
+ corner case into account
+ (described below).
+ </p>
+ </li>
+ <li>
+ <p>
+ Once the databases are opened,
+ check to see if the local
+ environment is a
+ master. If it is, do whatever it is
+ a master should do for your
+ application.
+ </p>
+ <p>
+ Remember that the code for your
+ master should include some way
+ for you to tell the master
+ to exit gracefully.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the local environment is not a
+ master, then do whatever it is
+ your replica environments should do.
+ Again, like the code for your
+ master environments, you should provide
+ a way for your replicas to exit
+ the processing loop gracefully.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ The following code fragment illustrates
+ these points (note that we fill out this
+ fragment with a working example
+ next in this chapter):
+ </p>
+ <pre class="programlisting">/* loop to manage replication activities */
+
+Db *dbp;
+int ret;
+APP_DATA *app_data;
+u_int32_t flags;
+
+dbp = NULL;
+ret = 0;
+
+/*
+ * Remember that for this to work, an APP_DATA struct would have first
+ * had to been set to the environment handle's app_private data
+ * member. (dbenv is presumable declared and opened in another part of
+ * the code.)
+ */
+app_data = dbenv-&gt;get_app_private();
+
+
+/*
+ * Infinite loop. We exit depending on how the master and replica code
+ * is written.
+ */
+for (;;) {
+ /* If dbp is not opened, we need to open it. */
+ if (dbp == NULL) {
+ /*
+ * Create the handle and then configure it. Before you open
+ * it, you have to decide what open flags to use:
+ */
+ flags = DB_AUTO_COMMIT;
+ if (app_data-&gt;is_master)
+ flags |= DB_CREATE
+ /*
+ * Now you can open your database handle, passing to it the
+ * flags selected above.
+ *
+ * One thing to watch out for is a case where the databases
+ * you are trying to open do not yet exist. This can happen
+ * for replicas where the databases are being opened
+ * read-only. If this happens, ENOENT is returned by the
+ * open() call.
+ */
+ try {
+ dbp-&gt;open(NULL, DATABASE, NULL, DB_BTREE,
+ app_data-&gt;is_master ? DB_CREATE | DB_AUTO_COMMIT :
+ DB_AUTO_COMMIT, 0);
+ } catch(DbException dbe) {
+ if (dbe.get_errno() == ENOENT) {
+ cout &lt;&lt; &quot;No stock db available yet - retrying.&quot; &lt;&lt; endl;
+ try {
+ dbp-&gt;close(0);
+ } catch (DbException dbe2) {
+ cout &lt;&lt; &quot;Unexpected error closing after failed&quot; &lt;&lt;
+ &quot; open, message: &quot; &lt;&lt; dbe2.what() &lt;&lt; endl;
+ dbp = NULL;
+ goto err;
+ }
+ dbp = NULL;
+ sleep(SLEEPTIME);
+ continue;
+ } else {
+ dbenv.err(ret, &quot;DB-&gt;open&quot;);
+ throw dbe;
+ }
+ }
+ }
+
+ /*
+ * Now that the databases have been opened, continue with general
+ * processing, depending on whether we are a master or a replica.
+ */
+ if (app_data-&gt;is_master) {
+ /*
+ * Do master stuff here. Don't forget to include a way to
+ * gracefully exit the loop. */
+ */
+ } else {
+ /*
+ * Do replica stuff here. As is the case with the master
+ * code, be sure to include a way to gracefully exit the
+ * loop.
+ */
+ }
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fwrkmasterreplica.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="fwrkmasterreplica.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="exampledoloop.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 4. Replica versus Master Processes </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Example Processing Loop</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/repadvantage.html b/db/docs/gsg_db_rep/CXX/repadvantage.html
new file mode 100644
index 000000000..c7ab72c1a
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/repadvantage.html
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Replication Benefits</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="next" href="apioverview.html" title="The Replication APIs" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Replication Benefits</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="apioverview.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="repadvantage"></a>Replication Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ Replication offers your application a number of benefits that
+ can be a tremendous help. Primarily replication's benefits
+ revolve around performance, but there is also a benefit in
+ terms of data durability guarantees.
+ </p>
+ <p>
+ Briefly, the reasons why you might choose to implement
+ replication in your DB application are:
+ </p>
+ <div class="itemizedlist">
+ <div class="itemizedlist">
+ <ul type="circle">
+ <li>
+ <p>
+ Improved application reliability.
+ </p>
+ <p>
+ By spreading your data across multiple
+ machines, you can ensure that your
+ application's data continues to be
+ available even in the event of a
+ hardware failure on any given machine in
+ the replication group.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <ul type="disc">
+ <li>
+ <p>
+ Improve read performance.
+ </p>
+ <p>
+ By using replication you can spread data reads across
+ multiple machines on your network. Doing so allows you
+ to vastly improve your application's read performance.
+ This strategy might be particularly interesting for
+ applications that have readers on remote network nodes;
+ you can push your data to the network's edges thereby
+ improving application data read responsiveness.
+ </p>
+ <p>
+ Additionally, depending on how you partition your
+ data across your replicas, any given replica may
+ only need to cache part of your data, decreasing
+ cache misses and reducing I/O on the client.
+ </p>
+ </li>
+ <li>
+ <p>
+ Improve transactional commit performance
+ </p>
+ <p>
+ In order to commit a transaction and achieve a
+ transactional durability guarantee, the commit must be
+ made <span class="emphasis"><em>durable</em></span>. That is, the commit
+ must be written to disk (usually, but not always,
+ synchronously) before the application's thread of
+ control can continue operations.
+ </p>
+ <p>
+ Replication allows you to avoid this disk I/O and still
+ maintain a degree of durability by <span class="emphasis"><em>committing
+ to the network</em></span>. In other words, you relax
+ your transactional durability guarantees on the master,
+ but by virtue of replicating the data across the
+ network you gain some additional durability guarantees
+ above what is provided locally.
+ </p>
+ <p>
+ Usually this strategy is implemented using some form of
+ an asynchronous transactional commit on the master. In
+ this way your data writes will eventually be written to
+ disk, but your application will not have to wait for
+ the disk I/O to complete before continuing with its
+ next operation.
+ </p>
+ <p>
+ Note that it is possible to cause DB's replication
+ implementation to wait to hear from one or
+ more replica's as to whether they have successfully
+ saved the write before continuing. However, in this
+ case you might be trading performance for a even
+ higher durability guarantee (see below).
+ </p>
+ </li>
+ <li>
+ <p>
+ Improve data durability guarantee.
+ </p>
+ <p>
+ In a traditional transactional application, you commit your
+ transactions such that data modifications are saved to
+ disk. Beyond this, the durability of your data is
+ dependent upon the backup strategy that you choose to
+ implement for your site.
+ </p>
+ <p>
+ Replication allows you to increase this durability
+ guarantee by ensuring that data modifications are
+ written to multiple machines. This means that multiple
+ disks, disk controllers, power supplies, and CPUs are
+ used to ensure that your data modification makes it to
+ stable storage. In other words, replication allows you
+ to minimize the problem of a single point of failure
+ by using more hardware to guarantee your data writes.
+ </p>
+ <p>
+ If you are using replication for this reason, then you
+ probably will want to configure your application such
+ that it waits to hear about a successful commit from
+ one or more replicas before continuing with the next
+ operation. This will obviously impact your
+ application's write performance to some degree
+ &#8212; with the performance penalty being largely dependent
+ upon the speed and stability of the network connecting
+ your replication group.
+ </p>
+ <p>
+ For more information, see <a href="fwrkpermmessage.html">Permanent Message Handling</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="apioverview.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> The Replication APIs</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/repapp.html b/db/docs/gsg_db_rep/CXX/repapp.html
new file mode 100644
index 000000000..240383791
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/repapp.html
@@ -0,0 +1,711 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 3. The DB Replication Framework</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="simpleprogramlisting.html" title="Program Listing" />
+ <link rel="next" href="repmgr_init_example_c.html" title="Adding the Replication Framework to&#10; &#10; SimpleTxn&#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 3. The DB Replication Framework</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="simpleprogramlisting.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="repmgr_init_example_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="repapp"></a>Chapter 3. The DB Replication Framework</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="repapp.html#rep_init_code">
+ Starting and Stopping Replication
+ </a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#election_flags">Managing Election Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#thread_count">Selecting the Number of Threads</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repmgr_init_example_c.html">Adding the Replication Framework to
+
+ SimpleTxn
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkpermmessage.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermpolicy">Identifying Permanent Message Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermtimeout">Setting the Permanent Message Timeout</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#perm2fmwrkexample">Adding a Permanent Message Policy to
+
+ RepMgr
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="electiontimes.html">Managing Election Times</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electiontimeout">Managing Election Timeouts</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electretrytime">Managing Election Retry Times</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="fmwrkconnectretry.html">Managing Connection Retries</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ The easiest way to add replication to your transactional
+ application is to use the replication framework. The replication framework provides a comprehensive
+ communications layer that enables replication. For a brief listing
+ of the replication framework's feature set, see
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>.
+ </p>
+ <p>
+ To use the replication framework, you make use of special methods off the
+
+ <span><tt class="classname">DbEnv</tt> class.</span>
+ That is:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Create an environment handle as normal.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your environment handle as
+ needed (e.g. set the error file and
+ error prefix values, if desired).
+ </p>
+ </li>
+ <li>
+ <p>
+ Use the replication framework replication methods to
+ configure the replication framework. Using these
+ methods causes DB to know that you
+ are using the replication framework.
+ </p>
+ <p>
+ Configuring the replication framework
+ entails setting its replication
+ priority, setting the TCP/IP address
+ that this replication environment will use for
+ incoming replication messages, identify
+ TCP/IP addresses of other replication
+ environments, setting the number of
+ replication environments in the
+ replication group, and so forth. These actions are
+ discussed throughout the remainder of
+ this chapter.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your environment handle. When you
+ do this, be sure to specify
+
+ <span><tt class="literal">DB_INIT_REP</tt> and
+ <tt class="literal">DB_THREAD</tt> to your
+ open flags. (This is in addition to the
+ flags that you normally use for a
+ single-threaded transactional
+ application). The first of these causes
+ replication to be initialized for the
+ application. The second causes your
+ environment handle to be free-threaded
+ (thread safe). Both flags are required
+ for replication framework usage.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Start replication by calling
+
+ <span><tt class="methodname">DbEnv::repmgr_start()</tt>.</span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your databases as needed. Masters
+ must open their databases for read
+ and write activity. Replicas can open
+ their databases for read-only activity, but
+ doing so means they must re-open the
+ databases if the replica ever becomes a
+ master. Either way, replicas should never attempt to
+ write to the database(s) directly.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ The replication framework allows you to only use one
+ environment handle per process.
+ </p>
+ </div>
+ <p>
+ When you are ready to shut down your application:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Close your databases
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your environment. This causes
+ replication to stop as well.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Before you can use the replication framework, you may have to
+ enable it in your DB library. This is
+ <span class="emphasis"><em>not</em></span> a requirement for
+ Microsoft Windows systems, or Unix systems that
+ use pthread mutexes by default. Other systems,
+ notably BSD and BSD-derived systems (such as
+ Mac OS X), must enable the replication framework when you
+ configure the DB build.
+ </p>
+ <p>
+ You do this by <span class="emphasis"><em>not</em></span>
+ disabling replication and by configuring the
+ library with POSIX threads support. In other
+ words, replication must be turned on in the
+ build (it is by default), and POSIX thread
+ support must be enabled if it is not already by
+ default. To do this, use the
+ <tt class="literal">--enable-pthread_api</tt> switch
+ on the configure script.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">../dist/configure --enable-pthread-api</pre>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="rep_init_code"></a>
+ Starting and Stopping Replication
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described above, you introduce replication to an
+ application by starting with a transactional
+ application, performing some basic replication
+ configuration, and then starting replication using
+
+ <span><tt class="methodname">DbEnv::repmgr_start()</tt>.</span>
+
+ </p>
+ <p>
+ You stop replication by closing your environment
+ cleanly, as is normal for an DB application.
+ </p>
+ <p>
+ For example, the following code fragment initializes, then
+ stops and starts replication. Note that other replication
+ activities are omitted for brevity.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Note that the following code fragment would be part of a larger
+ class that must implement
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>. This
+ class is used to track state changes between master and
+ replica. We put off that implementation for the moment, but the
+ point remains that the following code fragment would be
+ contained in a method or two that you would include in your
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>
+ implementation.
+ </p>
+ </div>
+ <pre class="programlisting">#include &lt;db_cxx.h&gt;
+
+/* Use a 10mb cache */
+#define CACHESIZE (10 * 1024 * 1024)
+
+...
+
+ DbEnv *dbenv; /* Environment handle. */
+ const char *progname; /* Program name. */
+ const char *envHome; /* Environment home directory. */
+ const char *listen_host; /* A TCP/IP hostname. */
+ const char *other_host; /* A TCP/IP hostname. */
+ u_int16 listen_port; /* A TCP/IP port. */
+ u_int16 other_port; /* A TCP/IP port. */
+
+ /* Initialize variables */
+ dbenv = NULL;
+ progname = &quot;example_replication&quot;;
+ envHome = &quot;ENVIRONMENT_HOME&quot;;
+ listen_host = &quot;mymachine.sleepycat.com&quot;;
+ listen_port = 5001;
+ other_host = &quot;anothermachine.sleepycat.com&quot;;
+ other_port = 4555;
+
+ try {
+ /* Create the environment handle */
+ dbenv = new DbEnv(0);
+
+ /*
+ * Configure the environment handle. Here we configure
+ * asynchronous transactional commits for performance reasons.
+ */
+ dbenv-&gt;set_errfile(stderr);
+ dbenv-&gt;set_errpfx(progname);
+ (void)dbenv-&gt;set_cachesize(0, CACHESIZE, 0);
+ (void)dbenv-&gt;set_flags(DB_TXN_NOSYNC, 1);
+
+ /*
+ * Configure the local address. This is the local hostname and
+ * port that this replication participant will use to receive
+ * incoming replication messages. Note that this can be performed
+ * only once for the application. It is required.
+ */
+ dbenv-&gt;repmgr_set_local_site(listen_host, listen_port, 0);
+
+ /*
+ * Set this application's priority. This is used for elections.
+ *
+ * Set this number to a positive integer, or 0 if you do not want
+ * this site to be able to become a master.
+ */
+ dbenv-&gt;rep_set_priority(100);
+
+ /*
+ * Add a site to the list of replication environments known to
+ * this application.
+ */
+ dbenv-&gt;repmgr_add_remote_site(other_host, other_port);
+
+ /*
+ * Identify the number of sites in the replication group. This is
+ * necessary so that elections and permanent message handling can
+ * be performed correctly.
+ */
+ dbenv-&gt;repmgr_add_nsites(2);
+
+ /* Open the environment handle. Note that we add DB_THREAD and
+ * DB_INIT_REP to the list of flags. These are required.
+ */
+ dbenv-&gt;open(home, DB_CREATE | DB_RECOVER |
+ DB_INIT_LOCK | DB_INIT_LOG |
+ DB_INIT_MPOOL | DB_INIT_TXN |
+ DB_THREAD | DB_INIT_REP,
+ 0);
+
+ /* Start the replication framework such that it uses 3 threads. */
+ dbenv-&gt;repmgr_start(3, DB_REP_ELECTION);
+
+ /* Sleep to give ourselves time to find a master */
+ sleep(5);
+
+ /*
+ **********************************************************
+ *** All other application code goes here, including *****
+ *** database opens *****
+ **********************************************************
+ */
+
+
+ } catch (DbException &amp;de) {
+ /* Error handling goes here */
+ }
+
+ /* Close out the application here.
+ try {
+ /*
+ * Make sure all your database handles are closed
+ * (omitted from this example).
+ */
+
+ /* Close the environment */
+ if (dbenv != NULL)
+ (void)dbenv-&gt;close(dbenv, 0);
+
+ } catch (DbException &amp;de) {
+ /* Error handling goes here */
+ }
+
+ /* All done */ </pre>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="election_flags"></a>Managing Election Policies</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is worth taking a look at the
+
+ <span>
+ startup election flags accepted by
+
+ <span><tt class="methodname">DbEnv::repgmr_start()</tt>.</span>
+ These flags control how your replication application will
+ behave when it first starts up.
+ </span>
+
+
+ </p>
+ <p>
+ In the previous example, we specified
+ <tt class="literal">DB_REP_ELECTION</tt>
+
+ when we started replication. This causes the
+ application to try to find a master upon startup. If it
+ cannot, it calls for an election. In the event an
+ election is held, the environment receiving the most number of
+ votes will become the master.
+ </p>
+ <p>
+ There's some important points to make here:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ This
+ <span>flag</span>
+
+ only requires that other
+ environments in the replication group
+ participate in the vote. There is no
+ requirement that
+ <span class="emphasis"><em>all</em></span> such
+ environments participate. In other
+ words, if an environment
+ starts up, it can call for an
+ election, and select a master, even
+ if all other environment have not yet
+ joined the replication group.
+ </p>
+ </li>
+ <li>
+ <p>
+ It only requires a simple majority of
+ participating environments to elect a master. The number of
+ environments used to calculate the simple
+ majority is based on the value set for
+
+
+ <span><tt class="methodname">DbEnv::rep_set_nsites()</tt>.</span>
+
+
+
+ This is always true of elections held using the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ As always, the environment participating in the election with the most
+ up-to-date log files is selected as
+ master. If an environment with better log files
+ has not yet joined the replication
+ group, it may not become the master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Any one of these points may be enough to cause a
+ less-than-optimum environment to be selected as master.
+ Therefore, to give you a better degree of control over
+ which environment becomes a master at application startup,
+ the replication framework offers the following start-up
+ <span>flags:</span>
+
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Flag</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_MASTER</tt>
+ </td>
+ <td>
+ <p>
+ The application starts up and declares itself to be a master
+ without calling for an election. It is an error for more
+ than one environment to start up using this flag, or for
+ an environment
+ to use this flag when a master already exists.
+ </p>
+ <p>
+ Note that no replication group should
+ <span class="emphasis"><em>ever</em></span> operate with more than
+ one master.
+ </p>
+ <p>
+ In the event that a environment attempts to become a
+ master when a master already exists, the
+ replication code will resolve the problem by
+ holding an election. Note, however, that there
+ is always a possibility of data loss in the face
+ of duplicate masters, because once a master is
+ selected, the environment that loses the election will
+ have to roll back any transactions committed
+ until it is in sync with the &quot;real&quot; master.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_CLIENT</tt>
+ </td>
+ <td>
+ <p>
+ The application starts up and declares
+ itself to be a replica without calling for
+ an election. Note that the application
+ can still become a master if a subsequent
+ application starts up, calls for an
+ election, and this application is elected
+ master.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_ELECTION</tt>
+ </td>
+ <td>
+ <p>
+ As described above, the application starts up,
+ looks for a master, and if one is not found calls
+ for an election.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">DB_REP_FULL_ELECTION</tt>
+ </td>
+ <td>
+ <p>
+ Identical to
+ <tt class="literal">DB_REP_ELECTION</tt>
+
+ except that the election requires all
+ known members of the replication group to
+ participate. If a given environment has not yet
+ started but it is included in the
+ replication group count (using
+
+ <span><tt class="methodname">DbEnv::rep_set_nsites()</tt>)</span>
+
+ then a master can not be elected.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="thread_count"></a>Selecting the Number of Threads</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Under the hood, the replication framework is threaded and you can
+ control the number of threads used to process messages received from
+ other replicas. The threads that the replication framework uses are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Incoming message thread. This thread
+ receives messages from the site's
+ socket and passes those messages to
+ message processing threads (see below)
+ for handling.
+ </p>
+ </li>
+ <li>
+ <p>
+ Outgoing message thread. Outgoing
+ are performed in whatever thread
+ performed a write to the database(s).
+ That is, the thread that called, for
+ example,
+
+ <tt class="methodname">Db::put()</tt>
+
+ is the thread that writes replication messages
+ about that fact to the socket.
+ </p>
+ <p>
+ Note that if this write activity would
+ cause the thread to be blocked due to
+ some condition on the socket, the replication framework
+ will hand the outgoing message to the
+ incoming message thread, and it will
+ then write the message to the socket.
+ This prevents your database write
+ threads from blocking due to abnormal
+ network I/O conditions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Message processing threads are
+ responsible for parsing and then
+ responding to incoming replication
+ messages. Typically, a response will
+ include write activity to your
+ database(s), so these threads can be
+ busy performing disk I/O.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these threads, the only ones that you have any
+ configuration control over are the message processing
+ threads. In this case, you can determine how many
+ of these threads you want to run.
+ </p>
+ <p>
+ It is always a bit of an art to decide on a thread count,
+ but the short answer is you probably do not need more
+ than three threads here, and it is likely that one will
+ suffice. That said, the best thing to do is set your
+ thread count to a fairly low number and then increase
+ it if it appears that your application will benefit
+ from the additional threads.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="simpleprogramlisting.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repmgr_init_example_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Program Listing </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Adding the Replication Framework to
+
+ SimpleTxn
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/repmgr_init_example_c.html b/db/docs/gsg_db_rep/CXX/repmgr_init_example_c.html
new file mode 100644
index 000000000..42be987b1
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/repmgr_init_example_c.html
@@ -0,0 +1,520 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Adding the Replication Framework to
+
+ SimpleTxn
+ </title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="next" href="fwrkpermmessage.html" title="Permanent Message Handling" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Adding the Replication Framework to
+
+ SimpleTxn
+ </th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repapp.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fwrkpermmessage.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="repmgr_init_example_c"></a>Adding the Replication Framework to
+
+ <span>SimpleTxn</span>
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ We now use the methods described above to add partial
+ support to the
+
+ <tt class="literal">SimpleTxn</tt>
+ example that we presented in
+ <a href="txnapp.html">Transactional Application</a>.
+ That is, in this section we will:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Enhance our command line options to
+ accept information of interest to a
+ replicated application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure our environment handle to use
+ replication and the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Minimally configure the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Start replication.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that when we are done with this section, we will be
+ only partially ready to run the application. Some critical
+ pieces will be missing; specifically, we will not yet be
+ handling the differences between a master and a
+ replica. (We do that in the next chapter).
+ </p>
+ <p>
+ Also, note that in the following code fragments, additions
+ and changes to the code are marked in <b class="userinput"><tt>bold</tt></b>.
+ </p>
+ <p>
+ To begin, we copy the
+
+ <tt class="literal">SimpleTxn</tt>
+ code to a new file called
+ <tt class="literal">RepMgr.cpp</tt>.
+
+
+
+ <span>
+ Having done that, we must make some significant
+ changes to our
+ <tt class="classname">RepConfigInfo</tt>
+ class because now we will be using it to
+ maintain a lot more information.
+ </span>
+ </p>
+ <p>
+ First, we create a new structure,
+ <tt class="literal">RepHostInfoObj</tt>, which we use to store
+ host and port information for all &quot;other&quot; servers
+ identified to the application via the
+ <tt class="literal">-o</tt> command line option. This structure
+ is chain-able, which makes cleaning up at program shutdown
+ time easier.
+ </p>
+ <pre class="programlisting">#include &lt;db_cxx.h&gt;
+#include &lt;iostream&gt;
+
+<b class="userinput"><tt>// Chain-able struct used to store host information.
+typedef struct RepHostInfoObj{
+ char* host;
+ int port;
+ RepHostInfoObj* next; // used for chaining multiple &quot;other&quot; hosts.
+} REP_HOST_INFO; </tt></b></pre>
+ <p>
+ Next, we update our <tt class="classname">RepConfigInfo</tt> class
+ definition to manage a lot more information and a new method.
+</p>
+ <pre class="programlisting">class RepConfigInfo {
+public:
+ RepConfigInfo();
+ virtual ~RepConfigInfo();
+
+ <b class="userinput"><tt>void addOtherHost(char* host, int port);</tt></b>
+public:
+ <b class="userinput"><tt>u_int32_t start_policy;</tt></b>
+ char* home;
+ <b class="userinput"><tt>bool got_listen_address;
+ REP_HOST_INFO this_host;
+ int totalsites;
+ int priority;
+ // used to store a set of optional other hosts.
+ REP_HOST_INFO *other_hosts;</tt></b>
+}; </pre>
+ <p>
+ Then, we update our constructor to initialize our new variables.
+</p>
+ <pre class="programlisting">RepConfigInfo::RepConfigInfo()
+{
+ <b class="userinput"><tt>start_policy = DB_REP_ELECTION;</tt></b>
+ home = &quot;TESTDIR&quot;;
+ <b class="userinput"><tt>got_listen_address = false;
+ totalsites = 0;
+ priority = 100;
+ other_hosts = NULL;</tt></b>
+} </pre>
+ <p>
+ Next, we implement our new method, <tt class="methodname">RepConfigInfo::addOtherHost</tt>,
+ which is used to create <tt class="literal">RepHostInfoObj</tt> instances and add them to
+ the chain of &quot;other&quot; hosts.
+</p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt>RepConfigInfo::addOtherHost(char* host, int port)
+{
+ REP_HOST_INFO *newinfo;
+ newinfo = (REP_HOST_INFO*)malloc(sizeof(REP_HOST_INFO));
+ newinfo-&gt;host = host;
+ newinfo-&gt;port = port;
+ if (other_hosts == NULL) {
+ other_hosts = newinfo;
+ newinfo-&gt;next = NULL;
+ } else {
+ newinfo-&gt;next = other_hosts;
+ other_hosts = newinfo;
+ }
+} </tt>
+ </b>
+ </pre>
+ <p>
+ Having done that, we update our class destructor to release the <tt class="literal">RepHostInfoObj</tt>
+ chain of objects at class destruction time.
+</p>
+ <pre class="programlisting">RepConfigInfo::~RepConfigInfo()
+{
+ <b class="userinput"><tt>// release any other_hosts structs.
+ if (other_hosts != NULL) {
+ REP_HOST_INFO *CurItem = other_hosts;
+ while (CurItem-&gt;next != NULL)
+ {
+ REP_HOST_INFO *TmpItem = CurItem;
+ free(CurItem);
+ CurItem = TmpItem;
+ }
+ free(CurItem);
+ }
+ other_hosts = NULL;</tt></b>
+} </pre>
+ <p>
+ Having completed our update to the
+ <tt class="classname">RepConfigInfo</tt>
+
+ class, we can now start making
+ changes to the main portion of our program. We begin by changing
+ the program's name.
+</p>
+ <pre class="programlisting">using std::cout;
+using std::cin;
+using std::cerr;
+using std::endl;
+using std::flush;
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE &quot;quote.db&quot;
+
+<b class="userinput"><tt>const char *progname = &quot;RepMgr&quot;;</tt></b> </pre>
+ <p>
+ Next we update our usage function. The application will continue to
+ accept the <tt class="literal">-h</tt> parameter so that we can identify
+ the environment home directory used by this application. However,
+ we also add the
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">-m</tt> parameter which allows us to
+ identify the host and port used by this application to
+ listen for replication messages.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-o</tt> parameter which allows us to
+ specify other replicas.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-n</tt> parameter which allows us to
+ identify the number of sites in this replication
+ group.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-p</tt> option, which is used to identify
+ this replica's priority (recall that the priority is
+ used as a tie breaker for elections)
+ </p>
+ </li>
+ </ul>
+ </div>
+ <pre class="programlisting">class RepMgr
+{
+public:
+ // Constructor.
+ RepMgr();
+ // Initialization method. Creates and opens our environment handle.
+ int init(RepConfigInfo* config);
+ // The doloop is where all the work is performed.
+ int doloop();
+ // terminate() provides our shutdown code.
+ int terminate();
+
+private:
+ // disable copy constructor.
+ RepMgr(const RepMgr &amp;);
+ void operator = (const RepMgr &amp;);
+
+ // internal data members.
+ RepConfigInfo *app_config;
+ DbEnv dbenv;
+
+ // private methods.
+ // print_stocks() is used to display the contents of our database.
+ static int print_stocks(Db *dbp);
+};
+
+static void usage()
+{
+ cerr &lt;&lt; &quot;usage: &quot; &lt;&lt; progname &lt;&lt; endl
+ &lt;&lt; &quot;[-h home]<b class="userinput"><tt>[-o host:port][-m host:port]</tt></b>&quot;
+ <b class="userinput"><tt>&lt;&lt; &quot;[-n nsites][-p priority]&quot; &lt;&lt; endl;</tt></b>
+
+ cerr <b class="userinput"><tt>&lt;&lt; &quot;\t -m host:port (required; m stands for me)&quot; &lt;&lt; endl
+ &lt;&lt; &quot;\t -o host:port (optional; o stands for other; any &quot;
+ &lt;&lt; &quot;number of these may be specified)&quot; &lt;&lt; endl</tt></b>
+ &lt;&lt; &quot;\t -h home directory&quot; &lt;&lt; endl
+ <b class="userinput"><tt>&lt;&lt; &quot;\t -n nsites (optional; number of sites in replication &quot;
+ &lt;&lt; &quot;group; defaults to 0&quot; &lt;&lt; endl
+ &lt;&lt; &quot;\t in which case we try to dynamically compute the &quot;
+ &lt;&lt; &quot;number of sites in&quot; &lt;&lt; endl
+ &lt;&lt; &quot;\t the replication group)&quot; &lt;&lt; endl
+ &lt;&lt; &quot;\t -p priority (optional: defaults to 100)&quot; &lt;&lt; endl;</tt></b>
+
+ exit(EXIT_FAILURE);
+} </pre>
+ <p>
+ Now we can begin working on our <tt class="literal">main()</tt> function.
+ We begin by adding a couple of variables that we will use to
+ collect TCP/IP host and port information.
+
+
+
+</p>
+ <pre class="programlisting">int main(int argc, char **argv)
+{
+ RepConfigInfo config;
+ char ch<b class="userinput"><tt>, *portstr, *tmphost;
+ int tmpport;</tt></b>
+ int ret; </pre>
+ <p>
+ Now we collect our command line arguments. As we do so, we will
+ configure host and port information as required, and we will
+ configure the application's election priority if necessary.
+</p>
+ <pre class="programlisting"> // Extract the command line parameters
+ while ((ch = getopt(argc, argv, &quot;h:<b class="userinput"><tt>m:n:o:p:</tt></b>&quot;)) != EOF) {
+ switch (ch) {
+ case 'h':
+ config.home = optarg;
+ break;
+ <b class="userinput"><tt>case 'm':
+ config.this_host.host = strtok(optarg, &quot;:&quot;);
+ if ((portstr = strtok(NULL, &quot;:&quot;)) == NULL) {
+ cerr &lt;&lt; &quot;Bad host specification.&quot; &lt;&lt; endl;
+ usage();
+ }
+ config.this_host.port = (unsigned short)atoi(portstr);
+ config.got_listen_address = true;
+ break;
+ case 'n':
+ config.totalsites = atoi(optarg);
+ break;
+ case 'o':
+ tmphost = strtok(optarg, &quot;:&quot;);
+ if ((portstr = strtok(NULL, &quot;:&quot;)) == NULL) {
+ cerr &lt;&lt; &quot;Bad host specification.&quot; &lt;&lt; endl;
+ usage();
+ }
+ tmpport = (unsigned short)atoi(portstr);
+ config.addOtherHost(tmphost, tmpport);
+ break;
+ case 'p':
+ config.priority = atoi(optarg);
+ break;</tt></b>
+ case '?':
+ default:
+ usage();
+ }
+ }
+
+ // Error check command line.
+ if ((!config.got_listen_address) || config.home == NULL)
+ usage(); </pre>
+ <p>
+ Having done that, the remainder of our <tt class="function">main()</tt>
+ function is left unchanged:
+</p>
+ <pre class="programlisting"> RepMgr runner;
+ try {
+ if((ret = runner.init(&amp;config)) != 0)
+ goto err;
+ if((ret = runner.doloop()) != 0)
+ goto err;
+ } catch (DbException dbe) {
+ cerr &lt;&lt; &quot;Caught an exception during initialization or&quot;
+ &lt;&lt; &quot; processing: &quot; &lt;&lt; dbe.what() &lt;&lt; endl;
+ }
+err:
+ runner.terminate();
+ return 0;
+} </pre>
+ <p>
+ Now we need to update our
+ <tt class="methodname">RepMgr::init()</tt>
+
+ method. Our updates are at first related to configuring
+ replication. First, we need to update the method so that we can
+ identify the local site to the environment handle (that is, the site identified by the
+<tt class="literal">-m</tt> command line option):
+</p>
+ <pre class="programlisting">RepMgr::RepMgr() : app_config(0), dbenv(0)
+{
+}
+
+int RepMgr::init(RepConfigInfo *config)
+{
+ int ret = 0;
+
+ app_config = config;
+
+ dbenv.set_errfile(stderr);
+ dbenv.set_errpfx(progname);
+
+ <b class="userinput"><tt>if ((ret = dbenv.repmgr_set_local_site(app_config-&gt;this_host.host,
+ app_config-&gt;this_host.port, 0)) != 0) {
+ cerr &lt;&lt; &quot;Could not set listen address to host:port &quot;
+ &lt;&lt; app_config-&gt;this_host.host &lt;&lt; &quot;:&quot;
+ &lt;&lt; app_config-&gt;this_host.port
+ &lt;&lt; &quot;error: &quot; &lt;&lt; ret &lt;&lt; endl;
+ }</tt></b> </pre>
+ <p>
+ And we also add code to allow us to identify &quot;other&quot; sites to the environment handle (that is,
+the sites that we identify using the <tt class="literal">-o</tt> command line
+option). To do this, we iterate over each of the &quot;other&quot; sites provided to
+us using the <tt class="literal">-o</tt> command line option, and we add each one
+individually in turn:
+</p>
+ <pre class="programlisting"> <b class="userinput"><tt>for ( REP_HOST_INFO *cur = app_config-&gt;other_hosts; cur != NULL;
+ cur = cur-&gt;next) {
+ if ((ret = dbenv.repmgr_add_remote_site(cur-&gt;host, cur-&gt;port,
+ 0)) != 0) {
+ cerr &lt;&lt; &quot;could not add site.&quot; &lt;&lt; endl
+ }
+ } </tt></b> </pre>
+ <p>
+ And then we need code to allow us to identify the total number of sites
+ in this replication group, and to set the environment's priority.
+</p>
+ <pre class="programlisting"> <b class="userinput"><tt>if (app_config-&gt;totalsites &gt; 0) {
+ try {
+ if ((ret = dbenv.rep_set_nsites(app_config-&gt;totalsites)) != 0)
+ dbenv.err(ret, &quot;set_nsites&quot;);
+ } catch (DbException dbe) {
+ cerr &lt;&lt; &quot;rep_set_nsites call failed. Continuing.&quot; &lt;&lt; endl;
+ }
+ }
+ dbenv.rep_set_priority(app_config-&gt;priority); </tt></b> </pre>
+ <p>
+
+
+ <span>We can now open our environment. Note that the flags</span>
+
+
+
+ we use to open the environment are slightly different for a
+ replicated application than they are for a non-replicated
+ application. Namely, replication requires the
+ <span>
+ <tt class="literal">DB_INIT_REP</tt> flag.
+ </span>
+
+
+ </p>
+ <p>
+ Also, because we are using the replication framework, we must prepare
+ our environment for threaded usage. For this reason, we also
+ need the <tt class="literal">DB_THREAD</tt> flag.
+ </p>
+ <pre class="programlisting"> dbenv.set_cachesize(0, CACHESIZE, 0);
+ dbenv.set_flags(DB_TXN_NOSYNC, 1);
+
+ try {
+ dbenv.open(app_config-&gt;home,
+ DB_CREATE |
+ DB_RECOVER |
+ <b class="userinput"><tt>DB_THREAD |
+ DB_INIT_REP |</tt></b>
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_MPOOL |
+ DB_INIT_TXN,
+ 0);
+ } catch(DbException dbe) {
+ cerr &lt;&lt; &quot;Caught an exception during DB environment open.&quot; &lt;&lt; endl
+ &lt;&lt; &quot;Ensure that the home directory is created prior to starting&quot;
+ &lt;&lt; &quot; the application.&quot; &lt;&lt; endl;
+ ret = ENOENT;
+ goto err;
+ }</pre>
+ <p>
+ Finally, we start replication before we exit this method.
+ Immediately after exiting this method, our application will go into
+ the
+ <tt class="methodname">RepMgr::doloop()</tt>
+
+ method, which is where
+ the bulk of our application's work is performed. We update that
+ method in the next chapter.
+</p>
+ <pre class="programlisting"> if ((ret = dbenv.repmgr_start(3, app_config-&gt;start_policy)) != 0)
+ goto err;
+
+err:
+ return ret;
+} </pre>
+ <p>
+ This completes our replication updates for the moment. We are not as
+ yet ready to actually run this program; there remains a few
+ critical pieces left to add to it. However, the work that we
+ performed in this section represents a solid foundation for the
+ remainder of our replication work.
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repapp.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fwrkpermmessage.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 3. The DB Replication Framework </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Permanent Message Handling</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/simpleprogramlisting.html b/db/docs/gsg_db_rep/CXX/simpleprogramlisting.html
new file mode 100644
index 000000000..40e395005
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/simpleprogramlisting.html
@@ -0,0 +1,628 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Program Listing</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ <link rel="previous" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ <link rel="next" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Program Listing</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnapp.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 2. Transactional Application</th>
+ <td width="20%" align="right"> <a accesskey="n" href="repapp.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="simpleprogramlisting"></a>Program Listing</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our example program is a fairly simple transactional
+ application. At this early stage of its development, the
+ application contains no hint that it must be network-aware
+ so the only command line argument that it takes is one that
+ allows us to specify the environment home directory.
+ (Eventually, we will specify things like host names and
+ ports from the command line).
+ </p>
+ <p>
+ Note that the application performs all writes under the
+ protection of a transaction; however, multiple database
+ operations are not performed per transaction. Consequently,
+ we simplify things a bit by using autocommit for our
+ database writes.
+ </p>
+ <p>
+ Also, this application is single-threaded. It is possible
+ to write a multi-threaded or multi-process application that
+ performs replication. That said, the concepts described in
+ this book are applicable to both single threaded and
+ multi-threaded applications so nothing
+ is gained by multi-threading this application other than
+ distracting complexity. This manual
+ does, however, identify where care must be taken when
+ performing replication with a non-single threaded
+ application.
+ </p>
+ <p>
+ Finally, remember that transaction processing is not described in
+ this manual. Rather, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide for details on
+ that topic.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repconfiginfo_cxx"></a>
+ <span>Class: RepConfigInfo</span>
+
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before we begin, we present a
+ class that we will use to maintain useful
+ information for us. Under normal circumstances,
+ this class would not be necessary for a simple
+ transactional example such as this. However, this code will
+ grow into a replicated example that needs to
+ track a lot more information for the
+ application, and so we lay the groundwork for
+ it here.
+ </p>
+ <p>
+ The class that we create is called
+ <tt class="classname">RepConfigInfo</tt>
+
+ and its only purpose at this time is to track
+ the location of our environment home directory.
+ </p>
+ <pre class="programlisting">#include &lt;db_cxx.h&gt;
+#include &lt;iostream&gt;
+
+class RepConfigInfo {
+public:
+ RepConfigInfo();
+ virtual ~RepConfigInfo();
+
+public:
+ char* home;
+};
+
+
+RepConfigInfo::RepConfigInfo()
+{
+ home = &quot;TESTDIR&quot;;
+}
+
+RepConfigInfo::~RepConfigInfo()
+{
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repmgr_cxx"></a>Class: RepMgr</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our transactional example will
+ instantiate a class,
+ <tt class="classname">RepMgr</tt>, that performs
+ all our work for us. Before we implement our
+ <tt class="function">main()</tt> function, we show
+ the <tt class="classname">RepMgr</tt> class
+ declaration.
+ </p>
+ <p>
+ First, we provide some declarations and
+ definitions that are needed later in
+ our example:
+ </p>
+ <pre class="programlisting">using std::cout;
+using std::cin;
+using std::cerr;
+using std::endl;
+using std::flush;
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE &quot;quote.db&quot;
+
+const char *progname = &quot;SimpleTxn&quot;; </pre>
+ <p>
+ And then we define our <tt class="classname">RepMgr</tt> class:
+</p>
+ <pre class="programlisting">class RepMgr
+{
+public:
+ // Constructor.
+ RepMgr();
+ // Initialization method. Creates and opens our environment handle.
+ int init(RepConfigInfo* config);
+ // The doloop is where all the work is performed.
+ int doloop();
+ // terminate() provides our shutdown code.
+ int terminate();
+
+private:
+ // disable copy constructor.
+ RepMgr(const RepMgr &amp;);
+ void operator = (const RepMgr &amp;);
+
+ // internal data members.
+ RepConfigInfo *app_config;
+ DbEnv dbenv;
+
+ // private methods.
+ // print_stocks() is used to display the contents of our database.
+ static int print_stocks(Db *dbp);
+}; </pre>
+ <p>
+ Note that we show the implementation of the various
+ <tt class="classname">RepMgr</tt> methods later in this section.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="usage_cxx"></a>Function: usage()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our <tt class="function">usage()</tt> is at this
+ stage of development trivial because we only
+ have one command line argument to manage.
+ Still, we show it here for the sake of
+ completeness.
+ </p>
+ <pre class="programlisting">static void usage()
+{
+ cerr &lt;&lt; &quot;usage: &quot; &lt;&lt; progname &lt;&lt; endl
+ &lt;&lt; &quot;-h home&quot; &lt;&lt; endl;
+
+ exit(EXIT_FAILURE);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="main_cxx"></a>Function: main()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Now we provide our <tt class="function">main()</tt>
+ function. This is a trivial function whose only
+ job is to collect command line information,
+ then instantiate a <tt class="classname">RepMgr</tt>
+ object, run it, then terminate it.
+ </p>
+ <p>
+ We begin by declaring some useful variables. Of
+ these, note that we instantiate our
+ <tt class="classname">RepConfigInfo</tt>
+ object here. Recall that this is used to store
+ information useful to our code. This class becomes more
+ interesting later in this book.
+ </p>
+ <pre class="programlisting">int main(int argc, char **argv)
+{
+ RepConfigInfo config;
+ char ch;
+ int ret; </pre>
+ <p>
+ Then we collect our command line information. Again, this is at
+ this point fairly trivial:
+ </p>
+ <pre class="programlisting"> // Extract the command line parameters
+ while ((ch = getopt(argc, argv, &quot;h:&quot;)) != EOF) {
+ switch (ch) {
+ case 'h':
+ config.home = optarg;
+ break;
+ case '?':
+ default:
+ usage();
+ }
+ }
+
+ // Error check command line.
+ if (config.home == NULL)
+ usage(); </pre>
+ <p>
+ Now we instantiate and initialize our <tt class="classname">RepMgr</tt>
+ class, which is what is responsible for doing all our real work.
+ The <tt class="methodname">RepMgr::init()</tt> method creates and
+ opens our environment handle.
+</p>
+ <pre class="programlisting"> RepMgr runner;
+ try {
+ if((ret = runner.init(&amp;config)) != 0)
+ goto err; </pre>
+ <p>
+ Then we call the <tt class="methodname">RepMgr::doloop()</tt>
+ method, which is where the actual transactional work is
+ performed for this application.
+ </p>
+ <pre class="programlisting"> if((ret = runner.doloop()) != 0)
+ goto err; </pre>
+ <p>
+ Finally, catch exceptions and terminate the program:
+ </p>
+ <pre class="programlisting"> } catch (DbException dbe) {
+ cerr &lt;&lt; &quot;Caught an exception during initialization or&quot;
+ &lt;&lt; &quot; processing: &quot; &lt;&lt; dbe.what() &lt;&lt; endl;
+ }
+err:
+ runner.terminate();
+ return 0;
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repmgr_init_cxx"></a>Method: RepMgr::init()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The <tt class="methodname">RepMgr::init()</tt>
+ method is used to create and open our environment handle.
+ For readers familiar with writing transactional
+ DB applications, there should be no surprises
+ here. However, we will be adding to this in later
+ chapters as we roll replication into this example.
+ </p>
+ <p>
+ First, we show the class constructor
+ implementation, which is only used to initialize a
+ few variables:
+ </p>
+ <pre class="programlisting">RepMgr::RepMgr() : app_config(0), dbenv(0)
+{
+} </pre>
+ <p>
+ We now provide the <tt class="methodname">init()</tt> method
+ implementation. The only thing of interest here is that we specify
+ <tt class="literal">DB_TXN_NOSYNC</tt> to our environment. This causes
+ our transactional commits to become non-durable, which is something
+ that we are doing only because of the nature of our example.
+</p>
+ <pre class="programlisting">int RepMgr::init(RepConfigInfo *config)
+{
+ int ret = 0;
+
+ app_config = config;
+
+ dbenv.set_errfile(stderr);
+ dbenv.set_errpfx(progname);
+
+ /*
+ * We can now open our environment.
+ */
+ dbenv.set_cachesize(0, CACHESIZE, 0);
+ dbenv.set_flags(DB_TXN_NOSYNC, 1);
+
+ try {
+ dbenv.open(app_config-&gt;home,
+ DB_CREATE |
+ DB_RECOVER |
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_MPOOL |
+ DB_INIT_TXN,
+ 0);
+ } catch(DbException dbe) {
+ cerr &lt;&lt; &quot;Caught an exception during DB environment open.&quot; &lt;&lt; endl
+ &lt;&lt; &quot;Ensure that the home directory is created prior to starting&quot;
+ &lt;&lt; &quot; the application.&quot; &lt;&lt; endl;
+ ret = ENOENT;
+ goto err;
+ }
+
+err:
+ return ret;
+} </pre>
+ <p>
+ Finally, we present the <tt class="methodname">RepMgr::terminate()</tt>
+ method here. All this does is close the environment handle. Again,
+ there should be no surprises here, but we provide the
+ implementation for the sake of completeness anyway.
+</p>
+ <pre class="programlisting">int RepMgr::terminate()
+{
+ try {
+ dbenv.close(0);
+ } catch (DbException dbe) {
+ cerr &lt;&lt; &quot;error closing environment: &quot; &lt;&lt; dbe.what() &lt;&lt; endl;
+ }
+ return 0;
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="doloop_cxx"></a>Method: RepMgr::doloop()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Having written our <tt class="function">main()</tt>
+ function and support utility methods, we now implement
+ our application's
+ primary data processing method. This
+ method provides a command prompt at which the
+ user can enter a stock ticker value and a price for
+ that value. This information is then entered to the
+ database.
+ </p>
+ <p>
+ To display the database, simply enter
+ <tt class="literal">return</tt> at the prompt.
+ </p>
+ <p>
+ To begin, we declare a database pointer,
+ several <tt class="classname">Dbt</tt> variables, and
+ the usual assortment of variables used for buffers
+ and return codes. We also initialize all of this.
+ </p>
+ <pre class="programlisting">#define BUFSIZE 1024
+int RepMgr::doloop()
+{
+ Db *dbp;
+ Dbt key, data;
+ char buf[BUFSIZE], *rbuf;
+ int ret;
+
+ dbp = NULL;
+ memset(&amp;key, 0, sizeof(key));
+ memset(&amp;data, 0, sizeof(data));
+ ret = 0; </pre>
+ <p>
+ Next, we begin the loop and we immediately open our
+ database if it has not already been opened. Notice that
+ we specify autocommit when we open the database. In
+ this case, autocommit is important because we will only
+ ever write to our database using it. There is no need
+ for explicit transaction handles and commit/abort code
+ in this application, because we are not combining
+ multiple database operations together under a single
+ transaction.
+ </p>
+ <p>
+ Autocommit is described in greater detail in the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </p>
+ <pre class="programlisting"> for (;;) {
+ if (dbp == NULL) {
+ dbp = new Db(&amp;dbenv, 0);
+
+ // Set page size small so page allocation is cheap.
+ if ((ret = dbp-&gt;set_pagesize(512)) != 0)
+ goto err;
+
+ try {
+ dbp-&gt;open(NULL, DATABASE, NULL, DB_BTREE,
+ DB_CREATE | DB_AUTO_COMMIT, 0);
+ } catch(DbException dbe) {
+ dbenv.err(ret, &quot;DB-&gt;open&quot;);
+ throw dbe;
+ }
+ } </pre>
+ <p>
+ Now we implement our command prompt. This is a simple and not
+ very robust implementation of a command prompt.
+ If the user enters the keywords <tt class="literal">exit</tt>
+ or <tt class="literal">quit</tt>, the loop is exited and the
+ application ends. If the user enters nothing and instead simply
+ presses <tt class="literal">return</tt>, the entire contents of the
+ database is displayed. We use our
+ <tt class="function">print_stocks()</tt> method to display the
+ database. (That implementation is shown next in this chapter.)
+ </p>
+ <p>
+ Notice that very little error checking is performed on the data
+ entered at this prompt. If the user fails to enter at least one
+ space in the value string, a simple help message is printed and
+ the prompt is returned to the user. That is the only error
+ checking performed here. In a real-world application,
+ at a minimum the application would probably check to ensure
+ that the price was in fact an integer or float value.
+ However, in order to keep this example code as simple as
+ possible, we refrain from implementing a thorough user interface.
+ </p>
+ <pre class="programlisting"> cout &lt;&lt; &quot;QUOTESERVER&quot; ;
+ cout &lt;&lt; &quot;&gt; &quot; &lt;&lt; flush;
+
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if (strtok(&amp;buf[0], &quot; \t\n&quot;) == NULL) {
+ switch ((ret = print_stocks(dbp))) {
+ case 0:
+ continue;
+ default:
+ dbp-&gt;err(ret, &quot;Error traversing data&quot;);
+ goto err;
+ }
+ }
+ rbuf = strtok(NULL, &quot; \t\n&quot;);
+ if (rbuf == NULL || rbuf[0] == '\0') {
+ if (strncmp(buf, &quot;exit&quot;, 4) == 0 ||
+ strncmp(buf, &quot;quit&quot;, 4) == 0)
+ break;
+ dbenv.errx(&quot;Format: TICKER VALUE&quot;);
+ continue;
+ } </pre>
+ <p>
+ Now we assign data to the <tt class="classname">Dbt</tt>s that
+ we will use to write the new information to the database.
+ </p>
+ <pre class="programlisting"> key.set_data(buf);
+ key.set_size((u_int32_t)strlen(buf));
+
+ data.set_data(rbuf);
+ data.set_size((u_int32_t)strlen(rbuf)); </pre>
+ <p>
+ Having done that, we can write the new information to the
+ database. Remember that this application uses autocommit,
+ so no explicit transaction management is required. Also,
+ the database is not configured for duplicate records, so
+ the data portion of a record is overwritten if the provided
+ key already exists in the database. However, in this case
+ DB returns <tt class="literal">DB_KEYEXIST</tt> &#8212; which
+ we ignore.
+ </p>
+ <pre class="programlisting"> if ((ret = dbp-&gt;put(NULL, &amp;key, &amp;data, 0)) != 0)
+ {
+ dbp-&gt;err(ret, &quot;DB-&gt;put&quot;);
+ if (ret != DB_KEYEXIST)
+ goto err;
+ }
+ } </pre>
+ <p>
+ Finally, we close our database before returning from the
+ method.
+ </p>
+ <pre class="programlisting">err: if (dbp != NULL) {
+ (void)dbp-&gt;close(DB_NOSYNC);
+ cout &lt;&lt; &quot;database closed&quot; &lt;&lt; endl;
+ }
+
+ return (ret);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="printstocks_c"></a>
+
+ <span>Method: RepMgr::print_stocks()</span>
+
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The <tt class="function">print_stocks()</tt>
+
+
+ <span>method</span>
+ simply takes a database handle, opens a cursor, and uses
+ it to display all the information it finds in a database.
+ This is trivial cursor operation that should hold
+ no surprises for you. We simply provide it here for
+ the sake of completeness.
+ </p>
+ <p>
+ If you are unfamiliar with basic cursor operations,
+ please see the <i class="citetitle">Getting Started with Berkeley DB</i>
+ guide.
+ </p>
+ <pre class="programlisting">int RepMgr::print_stocks(Db *dbp)
+{
+ Dbc *dbc;
+ Dbt key, data;
+#define MAXKEYSIZE 10
+#define MAXDATASIZE 20
+ char keybuf[MAXKEYSIZE + 1], databuf[MAXDATASIZE + 1];
+ int ret, t_ret;
+ u_int32_t keysize, datasize;
+
+ if ((ret = dbp-&gt;cursor(NULL, &amp;dbc, 0)) != 0) {
+ dbp-&gt;err(ret, &quot;can't open cursor&quot;);
+ return (ret);
+ }
+
+ memset(&amp;key, 0, sizeof(key));
+ memset(&amp;data, 0, sizeof(data));
+
+ cout &lt;&lt; &quot;\tSymbol\tPrice&quot; &lt;&lt; endl
+ &lt;&lt; &quot;\t======\t=====&quot; &lt;&lt; endl;
+
+ for (ret = dbc-&gt;get(&amp;key, &amp;data, DB_FIRST);
+ ret == 0;
+ ret = dbc-&gt;get(&amp;key, &amp;data, DB_NEXT)) {
+ keysize = key.get_size() &gt; MAXKEYSIZE ? MAXKEYSIZE : key.get_size();
+ memcpy(keybuf, key.get_data(), keysize);
+ keybuf[keysize] = '\0';
+
+ datasize = data.get_size() &gt;=
+ MAXDATASIZE ? MAXDATASIZE : data.get_size();
+ memcpy(databuf, data.get_data(), datasize);
+ databuf[datasize] = '\0';
+
+ cout &lt;&lt; &quot;\t&quot; &lt;&lt; keybuf &lt;&lt; &quot;\t&quot; &lt;&lt; databuf &lt;&lt; endl;
+ }
+ cout &lt;&lt; endl &lt;&lt; flush;
+
+ if ((t_ret = dbc-&gt;close()) != 0 &amp;&amp; ret == 0) {
+ cout &lt;&lt; &quot;closed cursor&quot; &lt;&lt; endl;
+ ret = t_ret;
+ }
+
+ switch (ret) {
+ case 0:
+ case DB_NOTFOUND:
+ return (0);
+ default:
+ return (ret);
+ }
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnapp.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repapp.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 2. Transactional Application </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 3. The DB Replication Framework</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/CXX/txnapp.html b/db/docs/gsg_db_rep/CXX/txnapp.html
new file mode 100644
index 000000000..c8b12fa93
--- /dev/null
+++ b/db/docs/gsg_db_rep/CXX/txnapp.html
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 2. Transactional Application</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="permmessages.html" title="Permanent Message Handling" />
+ <link rel="next" href="simpleprogramlisting.html" title="Program Listing" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 2. Transactional Application</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="permmessages.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="simpleprogramlisting.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="txnapp"></a>Chapter 2. Transactional Application</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnapp.html#appoverview">Application Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="simpleprogramlisting.html">Program Listing</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repconfiginfo_cxx">
+ Class: RepConfigInfo
+
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repmgr_cxx">Class: RepMgr</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#usage_cxx">Function: usage()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#main_cxx">Function: main()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repmgr_init_cxx">Method: RepMgr::init()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#doloop_cxx">Method: RepMgr::doloop()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+ Method: RepMgr::print_stocks()
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ In this chapter, we build a simple transaction-protected DB
+ application. Throughout the remainder of this book, we will add
+ replication to this example. We do this to underscore the concepts
+ that we are presenting in this book; the first being that you
+ should start with a working transactional program and then add
+ replication to it.
+ </p>
+ <p>
+ Note that this book assumes you already know how to write a
+ transaction-protected DB application, so we will not be
+ covering those concepts in this book. To learn how to write a
+ transaction-protected application, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="appoverview"></a>Application Overview</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our application maintains a stock market quotes database.
+ This database contains records whose key is the stock
+ market symbol and whose data is the stock's price.
+ </p>
+ <p>
+ The application operates by presenting you with a command
+ line prompt. You then enter the stock symbol and its value,
+ separated by a space. The application takes this
+ information, writes it to the database.
+ </p>
+ <p>
+ To see the contents of the database, simply press
+ <tt class="literal">return</tt> at the command prompt.
+ </p>
+ <p>
+ To quit the application, type 'quit' or 'exit' at the
+ command prompt.
+ </p>
+ <p>
+ For example, the following illustrates the application's
+ usage. In it, we use entirely fictitious stock market
+ symbols and price values.
+ </p>
+ <pre class="programlisting">&gt; ./SimpleTxn -h env_home_dir
+QUOTESERVER&gt; stock1 88
+QUOTESERVER&gt; stock2 .08
+QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ stock1 88
+
+QUOTESERVER&gt; stock1 88.9
+QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ stock1 88.9
+ stock2 .08
+
+QUOTESERVER&gt; quit
+&gt;</pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="permmessages.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="simpleprogramlisting.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Permanent Message Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Program Listing</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/Replication-JAVA-GSG.pdf b/db/docs/gsg_db_rep/JAVA/Replication-JAVA-GSG.pdf
new file mode 100644
index 000000000..6c612292a
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/Replication-JAVA-GSG.pdf
Binary files differ
diff --git a/db/docs/gsg_db_rep/JAVA/addfeatures.html b/db/docs/gsg_db_rep/JAVA/addfeatures.html
new file mode 100644
index 000000000..223d1d985
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/addfeatures.html
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 5. Additional Features</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="exampledoloop.html" title="Example Processing Loop" />
+ <link rel="next" href="manageblock.html" title="Managing Blocking Operations" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 5. Additional Features</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="exampledoloop.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="manageblock.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="addfeatures"></a>Chapter 5. Additional Features</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="c2ctransfer.html#fmwrkpeerserver">Identifying Peers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="bulk.html">Bulk Transfers</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Beyond the basic functionality that we have discussed so far in
+ this book, there are several replication features that you
+ should understand. These are all optional to use, but provide
+ useful functionality under the right circumstances.
+ </p>
+ <p>
+ These additional features are:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="bulk.html">Bulk Transfers</a>
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="delayedsync"></a>Delayed Synchronization</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a replication group has a new master, all replicas must
+ synchronize with that master. This means they must ensure
+ that the contents of their local database(s) are identical
+ to that contained by the new master.
+ </p>
+ <p>
+ This synchronization process can result in quite a lot of
+ network activity. It can also put a large strain on the
+ master server, especially if is part of a large
+ replication group or if there is somehow a large difference between
+ the master's database(s) and the contents of its replicas.
+ </p>
+ <p>
+ It is therefore possible to delay synchronization for any
+ replica that discovers it has a new master. You would do
+ this so as to give the master time to synchronize other
+ replicas before proceeding with the delayed replicas.
+ </p>
+ <p>
+ To delay synchronization of a replica environment, you
+ specify
+
+ <span>
+ <tt class="literal">ReplicationConfig.DELAYCLIENT</tt> and
+ <tt class="literal">true</tt> to
+ <tt class="methodname">Environment.setReplicationConfig()</tt>.
+ To turn off delayed synchronization, specify
+ <tt class="literal">false</tt> for the
+ <tt class="literal">ReplicationConfig.DELAYCLIENT</tt> field.
+ </span>
+ </p>
+ <p>
+ If you use delayed synchronization, then you must manually
+ synchronize the replica at some future time. Until you do this, the replica is out of
+ sync with the master, and it will ignore all database changes forwarded to it from
+ the master.
+ </p>
+ <p>
+ You synchronize a delayed replica by calling
+
+
+ <tt class="methodname">Environment.syncReplication()</tt>
+ on the replica that has been delayed.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="exampledoloop.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="manageblock.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Example Processing Loop </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Blocking Operations</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/apioverview.html b/db/docs/gsg_db_rep/JAVA/apioverview.html
new file mode 100644
index 000000000..938a33c1f
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/apioverview.html
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>The Replication APIs</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="repadvantage.html" title="Replication Benefits" />
+ <link rel="next" href="elections.html" title="Holding Elections" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">The Replication APIs</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="apioverview"></a>The Replication APIs</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ There are two ways that you can choose to implement
+ replication in your transactional application. The first,
+ and preferred, mechanism is to use the pre-packaged
+ replication framework that comes with the
+ DB distribution. This framework should be sufficient
+ for most customers.
+ </p>
+ <p>
+ If for some reason the Replication Framework
+ does not meet your application's technical requirements,
+ you will have to use the replication APIs available
+ through the Berkeley DB library to write your own custom
+ replication framework.
+ </p>
+ <p>
+ Both of these approaches are described in slightly greater
+ detail in this section. The bulk of the chapters later in
+ this book are dedicated to these two replication
+ implementation mechanisms.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repframeworkoverview"></a>Replication Framework Overview</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB's pre-packaged replication framework exists
+ as a layer on top of the DB library. The replication framework is a
+ multi-threaded implementation that allows you to easily add
+ replication to your existing transactional application.
+
+ <span>
+ You access and manage the replication framework using special
+ methods and classes designated for its use.
+ Mostly these are centered around the
+ <tt class="classname">Environment</tt>
+ and
+ <tt class="classname">EnvironmentConfig</tt>
+ classes.
+ </span>
+ </p>
+ <p>
+ The replication framework:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Provides a multi-threaded communications layer
+ using pthreads (on Unix-style systems and
+ similar derivatives such as Mac OS X), or
+ Windows threads on Microsoft Windows systems.
+ </p>
+ </li>
+ <li>
+ <p>
+ Uses TCP/IP sockets. Network traffic is
+ handled via threads that handle inbound and
+ outbound messages. However, each
+ process uses a single socket
+ that is shared using <tt class="function">select()</tt>.
+ </p>
+ <p>
+ Note that for this reason, the replication framework is
+ limited to a maximum of 60 replicas (on
+ Windows) and approximately 1000 replicas (on
+ Unix and related systems), depending on how
+ your system is configured.
+ </p>
+ </li>
+ <li>
+ <p>
+ Requires a single process for the master replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ Requires that only one instance of the
+ environment handle be used.
+ </p>
+ </li>
+ <li>
+ <p>
+ Upon application startup, a master can be
+ selected either manually or via elections.
+ After startup time, however, during the course of
+ normal operations it is possible for the
+ replication group to need to locate a new master (due
+ to network or other hardware related problems,
+ for example) and in this scenario elections are
+ always used to select the new master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ If your application has technical requirements that do
+ not conform to the implementation provided by the
+ replication framework, you must write a custom
+ replication framework using the DB replication APIs
+ directly. See the next section for introductory
+ details.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repapioverview"></a>Replication API Overview</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The replication API is a series of Berkeley DB library
+ classes and methods that you can use to build your own
+ replication infrastructure. You should use the
+ replication API only if the replication framework does not meet your
+ application's technical requirements.
+ </p>
+ <p>
+ To make use of the replication API, you must write your
+ own networking code. This frees you from the technical
+ constraints imposed by the replication framework. For example, by
+ writing your own framework, you can:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Use a threading package other than
+ pthreads (Unix) or Windows threads
+ (Microsoft Windows). This might be interesting
+ to you if you are using a platform
+ whose preferred threading package
+ is something other than (for
+ example) pthreads, such as is the case for
+ Sun Microsystem's Solaris operating systems.
+ </p>
+ </li>
+ <li>
+ <p>
+ Implement your own sockets. The
+ replication framework uses TCP/IP sockets. While
+ this should be acceptable for the
+ majority of applications, sometimes
+ UDP or even raw sockets might be
+ desired.
+ </p>
+ </li>
+ <li>
+ <p>
+ Write a multi-process master
+ replica.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For information on writing a replicated application
+ using the Berkeley DB replication APIs, see the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Replication Benefits </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Holding Elections</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/bulk.html b/db/docs/gsg_db_rep/JAVA/bulk.html
new file mode 100644
index 000000000..a2515ef18
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/bulk.html
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Bulk Transfers</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="c2ctransfer.html" title="Client to Client Transfer" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Bulk Transfers</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="c2ctransfer.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> </td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="bulk"></a>Bulk Transfers</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, messages are sent from the master to replicas as they are generated.
+ This can degrade replication performance because the various participating
+ environments must handle a fair amount of network I/O activity.
+ </p>
+ <p>
+ You can alleviate this problem by configuring your master environment for bulk
+ transfers. Bulk transfers simply cause replication messages to accumulate in a
+ buffer until a triggering event occurs. When this event occurs, the entire
+ contents of the buffer is sent to the replica, thereby eliminating excessive
+ network I/O.
+ </p>
+ <p>
+ Note that if you are using replica to replica transfers, then you might want any
+ replica that can service replication requests to also be configured for bulk
+ transfers.
+ </p>
+ <p>
+ The events that result in a bulk transfer of replication messages to a replica
+ will differ depending on if the transmitting environment is a master or a
+ replica.
+ </p>
+ <p>
+ If the servicing environment is a master environment, then bulk a bulk transfer
+ occurs when:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Bulk transfers are configured for the master environment, and
+ </p>
+ </li>
+ <li>
+ <p>
+ the message buffer is full or
+ </p>
+ </li>
+ <li>
+ <p>
+ a permanent record (for example, a transaction commit or a
+ checkpoint record) is placed in the buffer for the replica.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ If the servicing environment is a replica environment (that is, replica to replica
+ transfers are in use), then a bulk transfer occurs when:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Bulk transfers are configured for the transmitting replica, and
+ </p>
+ </li>
+ <li>
+ <p>
+ the message buffer is full or
+ </p>
+ </li>
+ <li>
+ <p>
+ the replica servicing the request is able to completely satisfy
+ the request with the contents of the message buffer.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ To configure bulk transfers, specify
+
+
+ <span>
+ <tt class="literal">ReplicationConfig.BULK</tt> and
+ <tt class="literal">true</tt> to
+ <tt class="methodname">Environment.setReplicationConfig()</tt>.
+ To turn off this feature, specify
+ <tt class="literal">false</tt> for the
+ <tt class="literal">ReplicationConfig.BULK</tt> field.
+ </span>
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="c2ctransfer.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> </td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Client to Client Transfer </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/c2ctransfer.html b/db/docs/gsg_db_rep/JAVA/c2ctransfer.html
new file mode 100644
index 000000000..4491d318b
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/c2ctransfer.html
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Client to Client Transfer</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="noautoinit.html" title="Stop Auto-Initialization" />
+ <link rel="next" href="bulk.html" title="Bulk Transfers" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Client to Client Transfer</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="noautoinit.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="bulk.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="c2ctransfer"></a>Client to Client Transfer</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is possible to use a replica instead of a master to synchronize another
+ replica. This serves to take the request load off a master that might otherwise
+ occur if multiple replicas attempted to synchronize with the master at the same
+ time.
+ </p>
+ <p>
+ For best results, use this feature combined with the delayed synchronization
+ feature (see <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>).
+ </p>
+ <p>
+ For example, suppose your replication group consists of four environments. Upon
+ application startup, all three replicas will immediately attempt to synchronize
+ with the master. But at the same time, the master itself might be busy with a heavy
+ database write load.
+ </p>
+ <p>
+ To solve this problem, delay synchronization for two of the three replicas. Allow
+ the third replica to synchronize as normal with the master. Then, start
+ synchronization for each of the delayed replicas (since this is a manual process,
+ you can do them one at a time if that best suits your application).
+ Assuming you have configured replica to replica synchronization correctly, the
+ delayed replicas will synchronize using the up-to-date replica, rather than using
+ the master.
+ </p>
+ <p>
+ When you are using the replication framework, you configure replica to replica synchronization by
+ declaring one environment to be a peer of another environment. If an
+ environment is a peer, then
+ it can be used for synchronization purposes.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpeerserver"></a>Identifying Peers</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can designate one replica to be a peer of
+ another, and then use this special
+ status for permanent message acknowledgments,
+ and for replica-to-replica synchronization.
+ You might want to do this if you have
+ machines that you know are on fast, reliable
+ network connections and so you are willing to
+ accept the overhead of waiting for
+ acknowledgments from those specific machines.
+ </p>
+ <p>
+ An environment is currently allowed to have only one
+ peer.
+ </p>
+ <p>
+ Note that peers are not required to be a
+ bi-directional. That is, just because machine A
+ declares machine B to be a peer, that does not mean
+ machine B must also declare machine A to be a peer.
+ </p>
+ <p>
+ You declare a peer for the current environment
+ when you add that environment to the list of known
+ sites. You do this by
+
+ <span>
+ constructing a <tt class="classname">ReplicationHostAddress</tt>
+ object that specifies <tt class="literal">true</tt> for the
+ <tt class="literal">isPeer</tt> parameter, and
+ then providing that object to
+ <tt class="methodname">EnvironmentConfig.replicationManagerAddRemoteSite()</tt>
+ when you add the remote site to the
+ local replication site.
+ </span>
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="noautoinit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="bulk.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Stop Auto-Initialization </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Bulk Transfers</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/elections.html b/db/docs/gsg_db_rep/JAVA/elections.html
new file mode 100644
index 000000000..8157cf14a
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/elections.html
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Holding Elections</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="apioverview.html" title="The Replication APIs" />
+ <link rel="next" href="permmessages.html" title="Permanent Message Handling" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Holding Elections</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="apioverview.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="permmessages.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="elections"></a>Holding Elections</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Finding a master environment is one of the fundamental activities that
+ every replication replica must perform. Upon startup, the
+ underlying DB replication code will attempt to
+ locate a master. If a master cannot be found, then the
+ environment should initiate an election.
+ </p>
+ <p>
+ How elections are held depends upon the API that you use to
+ implement replication. For example, if you are using the
+ replication framework elections are held transparently without any
+ input from your application's code. In this case,
+ DB will determine which environment is the master and which
+ are replicas.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="influencingelections"></a>Influencing Elections</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If you want to control the election process, you can declare
+ a specific environment to be the master. Note that for the replication framework,
+ it is only possible to do this at application startup.
+ Should the master become unavailable during run-time for any
+ reason, an election is held. The environment that receives
+ the most number of votes, wins the election and becomes the
+ master. A machine receives a vote because it has the most
+ number of log records.
+ </p>
+ <p>
+ Because ties are possible when elections are held,
+ it is possible to influence which environment will win
+ the election. How you do this depends on which API you
+ are using. In particular, if you are writing a custom replication
+ layer, then there are a great many ways to manually influence
+ elections.
+ </p>
+ <p>
+ One such mechanism is priorities. When votes are
+ cast during an election, both the number of log records
+ contained in the environment <span class="emphasis"><em>and</em></span>
+ the environment's priority are considered. So given two
+ environments with the same number of log records, votes
+ are cast for the environment with the higher priority.
+ </p>
+ <p>
+ Therefore, if you have a machine that you prefer to
+ become a master in the event of an election, assign it
+ a high priority. Assuming that the election is held at
+ a time when the preferred machine has up-to-date log
+ records, that machine will win the election.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="winningelections"></a>Winning Elections</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To win an election:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ There cannot currently be a
+ master environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ The environment must have the most
+ recent log records. Part of
+ holding the election is
+ determining which environments have
+ the most recent log records.
+ This process happens
+ automatically; your code does
+ not need to involve itself in
+ this process.
+ </p>
+ </li>
+ <li>
+ <p>
+ The environment must receive the most
+ number of votes from the
+ replication environments that are
+ participating in the election.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ If you are using the replication framework, then in the event of a
+ tie vote the environment with the highest priority wins
+ the election. If two or more environments receive the same
+ number of votes and have the same priority, then
+ the underlying replication code picks one of the
+ environments to
+ be the winner. Which winner will be picked by the
+ replication code is unpredictable from the
+ perspective of your application code.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="switchingmasters"></a>Switching Masters</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To switch masters:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Start up the environment that you want
+ to be master as normal. At this
+ time it is a replica. Make
+ sure this environment has a higher
+ priority than all the other
+ environments.
+ </p>
+ </li>
+ <li>
+ <p>
+ Allow the new environment to run for a
+ time as a replica. This allows
+ it to obtain the most recent
+ copies of the log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Shut down the current master.
+ This should force an election.
+ Because the new environment has the
+ highest priority, it will win
+ the election, provided it has
+ had enough time to obtain all
+ the log records.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally restart the old
+ master environment. Because there is
+ currently a master environment, an
+ election will not be held and
+ the old master will now run as
+ a replica environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="apioverview.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="permmessages.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">The Replication APIs </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Permanent Message Handling</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/electiontimes.html b/db/docs/gsg_db_rep/JAVA/electiontimes.html
new file mode 100644
index 000000000..7a39ac11a
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/electiontimes.html
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Election Times</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="fwrkpermmessage.html" title="Permanent Message Handling" />
+ <link rel="next" href="fmwrkconnectretry.html" title="Managing Connection Retries" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Election Times</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fwrkpermmessage.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fmwrkconnectretry.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="electiontimes"></a>Managing Election Times</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Where it comes to elections, there are two timeout
+ values with which you should be concerned: election
+ timeouts and election retries.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="electiontimeout"></a>Managing Election Timeouts</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a environment calls for an election, it will wait
+ some amount of time for the other replicas in the
+ replication group to respond. The amount of time
+ that the environment will wait before declaring the
+ election completed is the <span class="emphasis"><em>election timeout</em></span>.
+ </p>
+ <p>
+ If the environment hears from all other known replicas before
+ the election timeout occurs, the election is considered
+ a success and a master is elected.
+ </p>
+ <p>
+ If only a subset of replicas respond, then the success
+ or failure of the election is determined by (1)
+ how many replicas have responded and (2) the
+ election policy that is in place at the time.
+ For example, usually it only takes a simple
+ majority of replicas to elect a master. If
+ there are enough votes for a given environment to
+ meet that standard, then the master has been
+ elected and the election is considered a
+ success.
+ </p>
+ <p>
+ However, upon application startup you can
+ require that all known replicas must participate in the
+ election. Or, it is possible that not enough
+ votes are cast to select a master even with a
+ simple majority. If either of these conditions
+ occur when the election timeout value is
+ reached, the election is considered a failure
+ and a master is not elected. At this point,
+ your replication group is operating without a
+ master, which means that, essentially,
+ your replicated application has been placed in
+ read-only mode.
+ </p>
+ <p>
+ Note, however, that the replication framework will attempt a
+ new election after a given amount of time has
+ passed. See the next section for details.
+ </p>
+ <p>
+ You set the election timeout value using
+ <tt class="methodname">Environment.setReplicationTimeout()</tt>.
+ You pass this method the
+ <tt class="methodname">ReplicationTimeoutType.ELECTION_TIMEOUT</tt>
+ constant and a timeout value in microseconds.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="electretrytime"></a>Managing Election Retry Times</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In the event that a election fails (see the
+ previous section), an election will not be
+ attempted again until the election retry
+ timeout value has expired.
+ </p>
+ <p>
+ You set the election timeout value using
+ <tt class="methodname">Environment.setReplicationTimeout()</tt>.
+ You pass this method the
+ <tt class="methodname">ReplicationTimeoutType.ELECTION_RETRY</tt>
+ constant and a retry value in microseconds.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fwrkpermmessage.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fmwrkconnectretry.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Permanent Message Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Connection Retries</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/exampledoloop.html b/db/docs/gsg_db_rep/JAVA/exampledoloop.html
new file mode 100644
index 000000000..d1da6e978
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/exampledoloop.html
@@ -0,0 +1,559 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Example Processing Loop</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="previous" href="processingloop.html" title="Processing Loop" />
+ <link rel="next" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Example Processing Loop</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="processingloop.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Replica versus Master Processes</th>
+ <td width="20%" align="right"> <a accesskey="n" href="addfeatures.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="exampledoloop"></a>Example Processing Loop</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In this section we take the example
+ processing loop that we presented in the
+ previous section and we flesh it out to
+ provide a more complete example. We do this
+ by updating the
+ <tt class="function">doloop()</tt>
+ function that our original transaction
+ application used
+
+
+ <span>(see <a href="simpleprogramlisting.html#doloop_java">Method: SimpleTxn.doloop()</a>)</span>
+ to fully support our replicated application.
+ </p>
+ <p>
+ In the following example code, code that we
+ add to the original example is presented in
+ <b class="userinput"><tt>bold</tt></b>.
+ </p>
+ <p>
+ To begin, we must implement a way to track whether
+ our application is running as a master or a client.
+ There are many ways to do this, but in this case
+ what we will do is extend
+ <tt class="classname">com.sleepycat.db.Environment</tt>
+ to carry the information. We do this by creating
+ the <tt class="classname">RepQuoteEnvironment</tt>
+ class.
+ </p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt>package db.repquote;
+
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+public class RepQuoteEnvironment extends Environment
+{
+ private boolean isMaster;
+
+ public RepQuoteEnvironment(final java.io.File host,
+ EnvironmentConfig config)
+ throws DatabaseException, java.io.FileNotFoundException
+ {
+ super(host, config);
+ isMaster = false;
+ }
+
+ boolean getIsMaster()
+ {
+ return isMaster;
+ }
+
+ public void setIsMaster(boolean isMaster)
+ {
+ this.isMaster = isMaster;
+ }
+} </tt>
+ </b>
+ </pre>
+ <p>
+ Next, we go to <tt class="filename">RepQuoteExample.java</tt> and
+ we include the
+ <tt class="classname">RepQuoteEnvironment</tt> class
+ as well as the
+ <tt class="classname">EventHandler</tt> class. We then
+ cause our <tt class="classname">RepQuoteExample</tt>
+ class to implement
+ <tt class="classname">EventHandler</tt>. We also
+ change our environment handle to be an instance
+ of <tt class="classname">RepQuoteEnvironment</tt>
+ instead of <tt class="classname">Environment</tt>.
+ </p>
+ <p>
+ Note that we also import the
+ <tt class="classname">com.sleepycat.db.ReplicationHandleDeadException</tt>
+ class. We will discuss what that exception is
+ used for a little later in this example.
+ </p>
+ <pre class="programlisting">package db.repquote;
+
+import java.io.FileNotFoundException;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.lang.Thread;
+import java.lang.InterruptedException;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.EnvironmentConfig;
+<b class="userinput"><tt>import com.sleepycat.db.EventHandler;</tt></b>
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+<b class="userinput"><tt>import com.sleepycat.db.ReplicationHandleDeadException;</tt></b>
+
+import db.repquote.RepConfig;
+<b class="userinput"><tt>import db.repquote.RepQuoteEnvironment</tt></b>
+
+public class RepQuoteExample <b class="userinput"><tt> implements EventHandler</tt></b>
+{
+ private RepConfig repConfig;
+ private <b class="userinput"><tt>RepQuoteEnvironment</tt></b> dbenv; </pre>
+ <p>
+ That done, we can skip the
+
+
+ <span><tt class="methodname">main()</tt> method and
+ our class constructor, because they do not change.</span>
+
+ Instead, we skip down to our
+
+
+ <span><tt class="methodname">init()</tt> method
+ where we take care of opening our environment and setting
+ the event handler. </span>
+</p>
+ <p>
+ To update our <tt class="methodname">init()</tt> method, we only need
+ to do a couple of things. First, we identify the current class as
+ the event handler. Then, when we open our environment, we
+ instantiate a <tt class="classname">RepQuoteEnvironment</tt>
+ class instead of an <tt class="classname">Environment</tt>
+ class.
+</p>
+ <pre class="programlisting"> public int init(RepConfig config)
+ throws DatabaseException
+ {
+ int ret = 0;
+ appConfig = config;
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setErrorStream(System.err);
+ envConfig.setErrorPrefix(RepConfig.progname);
+
+ envConfig.setReplicationManagerLocalSite(appConfig.getThisHost());
+ for (ReplicationHostAddress host = appConfig.getFirstOtherHost();
+ host != null; host = appConfig.getNextOtherHost())
+ {
+ envConfig.replicationManagerAddRemoteSite(host);
+ }
+
+ if (appConfig.totalSites &gt; 0)
+ envConfig.setReplicationNumSites(appConfig.totalSites);
+ envConfig.setReplicationPriority(appConfig.priority);
+
+ envConfig.setReplicationManagerAckPolicy(
+ ReplicationManagerAckPolicy.ALL);
+ envConfig.setCacheSize(RepConfig.CACHESIZE);
+ envConfig.setTxnNoSync(true);
+
+ <b class="userinput"><tt>envConfig.setEventHandler(this);</tt></b>
+
+ envConfig.setAllowCreate(true);
+ envConfig.setRunRecovery(true);
+ envConfig.setThreaded(true);
+ envConfig.setInitializeReplication(true);
+ envConfig.setInitializeLocking(true);
+ envConfig.setInitializeLogging(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setTransactional(true);
+ envConfig.setVerboseReplication(appConfig.verbose);
+ try {
+ dbenv = new <b class="userinput"><tt>RepQuoteEnvironment</tt></b>(appConfig.getHome(), envConfig);
+ } catch(FileNotFoundException e) {
+ System.err.println(&quot;FileNotFound exception: &quot; + e.toString());
+ System.err.println(
+ &quot;Ensure that the environment directory is pre-created.&quot;);
+ ret = 1;
+ }
+
+ // start replication manager
+ dbenv.replicationManagerStart(3, appConfig.startPolicy);
+ return ret;
+ } </pre>
+ <p>
+ That done, we need to implement our
+ <tt class="methodname">handleEvent()</tt> method.
+ This method is required because we are now implementing
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>. We use this
+ method to track whether we are operating as a master.
+</p>
+ <pre class="programlisting"> public int handleEvent(EventType event)
+ {
+ int ret = 0;
+ if (event == EventType.REP_MASTER)
+ dbenv.setIsMaster(true);
+ else if (event == EventType.REP_CLIENT)
+ dbenv.setIsMaster(false);
+ else if (event == EventType.REP_NEW_MASTER) {
+ // ignored for now.
+ } else {
+ System.err.println(&quot;Unknown event callback received.\n&quot;);
+ ret = 1;
+ }
+ return ret;
+ } </pre>
+ <p>
+ That done, we need to update our
+ <tt class="function">doloop()</tt>
+
+
+ <span>method.</span>
+</p>
+ <p>
+ We begin by updating our <tt class="classname">DatabaseConfig</tt>
+ instance to determine which options to use, depending on whether the
+ application is running as a master.
+ </p>
+ <pre class="programlisting"> public int doloop()
+ throws DatabaseException
+ {
+ Database db = null;
+
+ for (;;)
+ {
+ if (db == null) {
+ DatabaseConfig dbconf = new DatabaseConfig();
+ // Set page size small so page allocation is cheap.
+ dbconf.setPageSize(512);
+ dbconf.setType(DatabaseType.BTREE);
+ <b class="userinput"><tt>if (dbenv.getIsMaster()) {
+ dbconf.setAllowCreate(true);
+ }</tt></b>
+ dbconf.setTransactional(true); </pre>
+ <p>
+ When we open the database, we modify our error handling to
+ account for the case where the database does not yet exist. This can
+ happen if our code is running as a replica and the replication framework has not
+ yet had a chance to create the databases for us. Recall that replicas never
+ write to their own databases directly, and so they cannot
+ create databases on their own.
+</p>
+ <p>
+ If we detect that the database does not yet exist, we simply
+ close the database handle, sleep for a short period of time
+ and then continue processing. This gives the replication framework a chance to
+ create the database so that our replica can continue
+ operations.
+</p>
+ <pre class="programlisting"> try {
+ db = dbenv.openDatabase
+ (null, RepConfig.progname, null, dbconf);
+ } catch (java.io.FileNotFoundException e) {
+ <b class="userinput"><tt>System.err.println(&quot;no stock database available yet.&quot;);
+ if (db != null) {
+ db.close(true);
+ db = null;
+ }
+ try {
+ Thread.sleep(RepConfig.SLEEPTIME);
+ } catch (InterruptedException ie) {}
+ continue;</tt></b>
+ }
+ } </pre>
+ <p>
+ Next we modify our prompt, so that if the local process is running
+ as a replica, we can tell from the shell that the prompt is for a
+ read-only process.
+ </p>
+ <pre class="programlisting"> BufferedReader stdin =
+ new BufferedReader(new InputStreamReader(System.in));
+
+ // listen for input, and add it to the database.
+ System.out.print(&quot;QUOTESERVER&quot;);
+ <b class="userinput"><tt>if (!dbenv.getIsMaster())
+ System.out.print(&quot;(read-only)&quot;);
+ System.out.print(&quot;&gt; &quot;);</tt></b>
+ System.out.flush();
+ String nextline = null;
+ try {
+ nextline = stdin.readLine();
+ } catch (IOException ioe) {
+ System.err.println(&quot;Unable to get data from stdin&quot;);
+ break;
+ }
+ String[] words = nextline.split(&quot;\\s&quot;); </pre>
+ <p>
+ When we collect data from the prompt, there is a case that says
+ if no data is entered then show the entire stocks database.
+ This display is performed by our
+ <tt class="function">print_stocks()</tt>
+
+ <span>method</span>
+ (which has not
+ required a modification since we first introduced it in
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+
+ <span>Method: SimpleTxn.printStocks()</span>
+ </a>).
+ </p>
+ <p>
+ When we call
+
+ <span><tt class="function">printStocks()</tt>, </span>
+ we check for a dead replication handle. Dead
+ replication handles happen whenever a replication election
+ results in a previously committed transaction becoming
+ invalid. This is an error scenario caused by a new master having a
+ slightly older version of the data than the original
+ master and so all replicas must modify their database(s) to
+ reflect that of the new master. In this situation, some
+ number of previously committed transactions may have to be
+ unrolled. From the replica's perspective, the database
+ handles should all be closed and then opened again.
+ </p>
+ <pre class="programlisting"> // A blank line causes the DB to be dumped to stdout.
+ if (words.length == 0 ||
+ (words.length == 1 &amp;&amp; words[0].length() == 0)) {
+ try {
+ printStocks(db);
+ <b class="userinput"><tt>} catch (DeadlockException de) {
+ continue;
+ // Dead replication handles are caused by an election
+ // resulting in a previously committing read becoming
+ // invalid. Close the db handle and reopen.
+ } catch (ReplicationHandleDeadException rhde) {
+ db.close(true); // close no sync.
+ db = null;
+ continue;</tt></b>
+ } catch (DatabaseException e) {
+ System.err.println(&quot;Got db exception reading &quot; +
+ &quot;replication DB: &quot; + e.toString());
+ break;
+ }
+ continue;
+ }
+
+ if (words.length == 1 &amp;&amp;
+ (words[0].compareToIgnoreCase(&quot;quit&quot;) == 0 ||
+ words[0].compareToIgnoreCase(&quot;exit&quot;) == 0)) {
+ break;
+ } else if (words.length != 2) {
+ System.err.println(&quot;Format: TICKER VALUE&quot;);
+ continue;
+ } </pre>
+ <p>
+ That done, we need to add a little error checking to our
+ command prompt to make sure the user is not attempting to
+ modify the database at a replica. Remember, replicas must never
+ modify their local databases on their own. This guards against
+ that happening due to user input at the prompt.
+ </p>
+ <pre class="programlisting"> <b class="userinput"><tt>if (!dbenv.getIsMaster()) {
+ System.err.println(&quot;Can't update client.&quot;);
+ continue;
+ }</tt></b>
+
+ DatabaseEntry key = new DatabaseEntry(words[0].getBytes());
+ DatabaseEntry data = new DatabaseEntry(words[1].getBytes());
+
+ db.put(null, key, data);
+ }
+ if (db != null)
+ db.close(true);
+ return 0;
+ } </pre>
+ <p>
+ With that completed, we are all done updating our application
+ for replication.
+
+ The only remaining
+
+
+ <span>method, <tt class="function">printStocks()</tt>,</span>
+
+ is unmodified from when we
+ originally introduced it. For details on that function, see
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+
+ <span>Method: SimpleTxn.printStocks()</span>
+ </a>.
+</p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="runningit"></a>Running It</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To run our replicated application, we need to make
+ sure each participating environment has its own unique
+ home directory. We can do this by running
+ each site on a separate networked machine, but that
+ is not strictly necessary; multiple instances of this
+ code can run on the same machine provided the
+ environment home restriction is observed.
+ </p>
+ <p>
+ To run a process, make sure the environment home
+ exists and then start the process using the
+ <tt class="literal">-h</tt> option to specify that
+ directory. You must also use the <tt class="literal">-m</tt>
+ option to identify the local host and port that this
+ process will use to listen for replication messages, and
+ the <tt class="literal">-o</tt> option to identify the other
+ processes in the replication group. Finally, use the
+ <tt class="literal">-p</tt> option to specify a priority.
+ The process that you designate to have the highest priority will become
+ the master.
+ </p>
+ <pre class="programlisting">&gt; mkdir env1
+&gt; java db.repquote.RepQuoteExample -h env1 -n 2 -m localhost:8080 \
+-o localhost:8081 -p 10
+No stock database yet available.
+No stock database yet available. </pre>
+ <p>
+ Now, start another process. This time, change the environment
+ home to something else, use the <tt class="literal">-m</tt> to at
+ least change the port number the process is listening on, and
+ use the <tt class="literal">-o</tt> option to identify the host and
+ port of the other replication process:
+</p>
+ <pre class="programlisting">&gt; mkdir env2
+&gt; java db.repquote.RepQuoteExample -h env2 -n 2 -m localhost:8081 \
+-o localhost:8080 -p 20</pre>
+ <p>
+ After a short pause, the second process should display the master
+ prompt:
+</p>
+ <pre class="programlisting">
+QUOTESERVER &gt; </pre>
+ <p>
+ And the first process should
+ display the read-only prompt:
+</p>
+ <pre class="programlisting">
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Now go to the master process and give it a couple of stocks and stock
+ prices:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; FAKECO 9.87
+QUOTESERVER&gt; NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ Then, go to the replica and hit <b class="userinput"><tt>return</tt></b> at the prompt to
+ see the new values:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 9.87
+ NOINC .23
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Doing the same at the master results in the same thing:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 9.87
+ NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ You can change a stock by simply entering the stock value and
+ new price at the master's prompt:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; FAKECO 10.01
+QUOTESERVER&gt; </pre>
+ <p>
+ Then, go to either the master or the replica to see the updated
+ database:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 10.01
+ NOINC .23
+QUOTESERVER&gt; </pre>
+ <p>
+ And on the replica:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt;
+ Symbol Price
+ ====== =====
+ FAKECO 10.01
+ NOINC .23
+QUOTESERVER (read-only)&gt; </pre>
+ <p>
+ Finally, to quit the applications, simply type
+ <tt class="literal">quit</tt> at both prompts:
+</p>
+ <pre class="programlisting">QUOTESERVER (read-only)&gt; quit
+&gt; </pre>
+ <p>
+ And on the master as well:
+</p>
+ <pre class="programlisting">QUOTESERVER&gt; quit
+&gt; </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="processingloop.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="fwrkmasterreplica.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="addfeatures.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Processing Loop </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 5. Additional Features</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/fmwrkconnectretry.html b/db/docs/gsg_db_rep/JAVA/fmwrkconnectretry.html
new file mode 100644
index 000000000..6fe429ade
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/fmwrkconnectretry.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Connection Retries</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="electiontimes.html" title="Managing Election Times" />
+ <link rel="next" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Connection Retries</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="electiontimes.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fwrkmasterreplica.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="fmwrkconnectretry"></a>Managing Connection Retries</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In the event that a communication failure occurs between
+ two environments in a replication group, the replication framework will wait a set
+ amount of time before attempting to re-establish the
+ connection. You can configure this wait value using
+
+ <span>
+
+
+ To do so, specify the
+ <tt class="literal">DB_REP_CONNECTION_RETRY</tt>
+ flag to the <tt class="literal">which</tt> parameter and then a
+ retry value in microseconds to the
+ <tt class="literal">timeout</tt> parameter.
+ </span>
+
+ <span>
+ <tt class="methodname">Environment.setReplicationTimeout()</tt>.
+ You pass this method the
+ <tt class="methodname">ReplicationTimeoutType.CONNECTION_RETRY</tt>
+ constant and a retry value in microseconds.
+ </span>
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="electiontimes.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fwrkmasterreplica.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Election Times </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 4. Replica versus Master Processes</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/fwrkmasterreplica.html b/db/docs/gsg_db_rep/JAVA/fwrkmasterreplica.html
new file mode 100644
index 000000000..d7694c2c6
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/fwrkmasterreplica.html
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 4. Replica versus Master Processes</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="fmwrkconnectretry.html" title="Managing Connection Retries" />
+ <link rel="next" href="processingloop.html" title="Processing Loop" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 4. Replica versus Master Processes</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fmwrkconnectretry.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="processingloop.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="fwrkmasterreplica"></a>Chapter 4. Replica versus Master Processes</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkmasterreplica.html#determinestate">Determining State</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="processingloop.html">Processing Loop</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="exampledoloop.html">Example Processing Loop</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="exampledoloop.html#runningit">Running It</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Every environment participating in a replicated application
+ must know whether it is a <span class="emphasis"><em>master</em></span> or
+ <span class="emphasis"><em>replica</em></span>. The reason for this is
+ because, simply, the master can modify the database while
+ replicas cannot. As a result, not only will you open
+ databases differently depended on whether the environment is
+ running as a master, but the environment will frequently
+ behave quit a bit differently depending on whether it
+ thinks it is operating as the read/write interface for
+ your database.
+ </p>
+ <p>
+ Moreover, an environment must also be capable of
+ gracefully switching between master and replica states.
+ This means that the environment must be able to detect when
+ it has switched states.
+ </p>
+ <p>
+ Not surprisingly, a large part of your application's code
+ will be tied up in knowing which state a given
+ environment is in and then in the logic of how to behave depending on
+ its state.
+ </p>
+ <p>
+ This chapter shows you how to determine your environment's
+ state, and it then shows you some sample code on how
+ an application might behave depending on whether it is a
+ master or a replica in a replicated application.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="determinestate"></a>Determining State</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to determine whether your code is running
+ as a master or a replica, you must write your
+ application as an implementation of
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>.
+ This class gives you a single method,
+ <tt class="methodname">handleEvent()</tt>, within
+ which you can detect and respond to various events
+ that occur in your DB code.
+ </p>
+ <p>
+ Note that <tt class="methodname">EventHandler</tt>
+ responds to a number of
+ <tt class="classname">com.sleepycat.db.EventType</tt>
+ events, only some of which are related to
+ replication. For replication, the events that we
+ care about are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+ <tt class="literal">EventType.REP_MASTER</tt>
+ </p>
+ <p>
+ The local environment is now a master.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">EventType.REP_CLIENT</tt>
+ </p>
+ <p>
+ The local environment is now a replica.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">EventType.REP_STARTUPDONE</tt>
+ </p>
+ <p>
+ The replica has completed startup
+ synchronization and is now
+ processing log records received
+ from the master.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">EventType.REP_NEWMASTER</tt>
+ </p>
+ <p>
+ An election was held and a new
+ environment was made a master. However,
+ the current environment <span class="emphasis"><em>is
+ not</em></span> the master. This
+ event exists so that you can
+ cause your code to take some
+ unique action in the event that the
+ replication groups switches masters.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that these events are raised whenever the
+ state is established. That is, when the current
+ environment becomes a client, and that includes
+ at application startup, the event is raised.
+ Also, when an election is held and a client is elected to be a
+ master, then the event occurs.
+ </p>
+ <p>
+ The <tt class="classname">EventHandler</tt>
+ implementation is fairly simple. First you detect
+ the event, and then you record the state change
+ in some data member maintained in a location that
+ is convenient to you.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">
+package db.repquote;
+
+// We make our main class an EventHandler implementation
+...
+import com.sleepycat.db.EventHandler;
+...
+
+public class MyReplicationClass implements EventHandler
+{
+
+...
+
+// Somewhere we provide a data member that is used to track
+// whether we are a master server. This could be in our main
+// class, or it could be part of a supporting class.
+private boolean isMaster;
+
+...
+
+isMaster = false;
+
+...
+
+// In the code where we open our environment and start replication,
+// we must identify the class that is the event handler. In this
+// example, we are performing this from within the class that
+// implements com.sleepycat.db.EventHandler so we identify
+// &quot;this&quot; class as the event handler
+envConfig.setEventHandler(this); </pre>
+ <p>
+ That done, we still need to implement the <tt class="methodname">handleEvent</tt>
+ method. This implementation can be fairly trivial.
+</p>
+ <pre class="programlisting"> public int handleEvent(EventType event)
+ {
+ int ret = 0;
+ if (event == EventType.REP_MASTER)
+ dbenv.setIsMaster(true);
+ else if (event == EventType.REP_CLIENT)
+ dbenv.setIsMaster(false);
+ else if (event == EventType.REP_NEW_MASTER) {
+ // ignored for now.
+ } else {
+ System.err.println(&quot;Unknown event callback received.\n&quot;);
+ ret = 1;
+ }
+ return ret;
+ } </pre>
+ <p>
+ Of course, this only gives us the current state of the environment. We
+ still need the code that determines what to do when the environment
+ changes state and how to behave depending on the state (described
+ in the next section).
+</p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fmwrkconnectretry.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="processingloop.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Connection Retries </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Processing Loop</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/fwrkpermmessage.html b/db/docs/gsg_db_rep/JAVA/fwrkpermmessage.html
new file mode 100644
index 000000000..7eda5259f
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/fwrkpermmessage.html
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Permanent Message Handling</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="repmgr_init_example_c.html" title="Adding the Replication Framework to&#10; &#10; &#10; " />
+ <link rel="next" href="electiontimes.html" title="Managing Election Times" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Permanent Message Handling</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repmgr_init_example_c.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="electiontimes.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="fwrkpermmessage"></a>Permanent Message Handling</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described in <a href="permmessages.html">Permanent Message Handling</a>,
+ messages are marked permanent if they contain database
+ modifications that should be committed at the replica.
+ DB's replication code decides if it must flush its
+ transaction logs to disk depending on whether it receives
+ sufficient permanent message acknowledgments from the
+ participating replica. More importantly, the thread
+ performing the transaction commit blocks
+ until it either receives enough acknowledgments, or the
+ acknowledgment timeout expires.
+ </p>
+ <p>
+ The replication framework is fully capable of managing permanent messages
+ for you if your application requires it (most do).
+ Almost all of the details of this are handled by the
+ replication framework for you. However, you do have to set some policies
+ that tell the replication framework how to handle permanent messages.
+ </p>
+ <p>
+ There are two things that you have to do:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Determine how many acknowledgments
+ must be received by the master.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify the amount of time that
+ replicas have to send their
+ acknowledgments.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpermpolicy"></a>Identifying Permanent Message Policies</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ You identify permanent message policies using the
+
+
+ <span>
+ <tt class="classname">ReplicationManagerAckPolicy</tt>
+ class which you pass to the environment
+ using the
+ <tt class="methodname">EnvironmentConfig.setReplicationManagerAckPolicy</tt>
+ method.
+ </span>
+
+ Note that you can set permanent message
+ policies at any time during the life of the
+ application.
+ </p>
+ <p>
+ The following permanent message policies are available when you use
+ the replication framework:
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+ <tt class="literal">ReplicationManagerAckPolicy.NONE</tt>
+ </p>
+ <p>
+ No permanent message acknowledgments are required. If
+ this policy is selected, permanent message handling is
+ essentially &quot;turned off.&quot; That is, the master will
+ never wait for replica acknowledgments. In this case,
+ transaction log data is either flushed or not strictly
+ depending on the type of commit that is being performed
+ (synchronous or asynchronous).
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">ReplicationManagerAckPolicy.ONE</tt>
+ </p>
+ <p>
+ At least one replica must acknowledge the permanent
+ message within the timeout period.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">ReplicationManagerAckPolicy.ONE_PEER</tt>
+ </p>
+ <p>
+ At least one electable peer must acknowledge the permanent
+ message within the timeout period.
+
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">ReplicationManagerAckPolicy.ALL</tt>
+ </p>
+ <p>
+ All environments must acknowledge the message within
+ the timeout period. This
+ policy should be selected only if your replication
+ group has a small number of replicas, and those replicas
+ are on extremely reliable networks and servers.
+ </p>
+ <p>
+ When this flag is used, the actual number of
+ environments that must respond is
+ determined by the value set for
+
+
+ <span><tt class="methodname">EnvironmentConfig.setReplicationNumSites()</tt>.</span>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">ReplicationManagerAckPolicy.ALL_PEERS</tt>
+ </p>
+ <p>
+ All electable peers must acknowledge the message within the
+ timeout period. This
+ policy should be selected only if your replication
+ group is small, and its various environments
+ are on extremely reliable networks and servers.
+ </p>
+ <p>
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="literal">ReplicationManagerAckPolicy.QUORUM</tt>
+ </p>
+ <p>
+ A quorum of electable peers must acknowledge the message within the timeout period.
+ A quorum is reached when acknowledgments are received from the minimum number
+ of environments needed to ensure that the record remains durable
+ if an election is held. That is, the master wants to hear from enough
+ electable replicas that they have committed the record so that if an election
+ is held, the master knows the record will exist even if a new master is selected.
+ </p>
+ <p>
+ Note that an
+ <span class="emphasis"><em>electable peer</em></span> is simply another
+ environment that can be elected to be a master (that
+ is, it has a priority greater than 0). Do not confuse
+ this with the concept of a peer as used for client to
+ client transfers. See
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ for more information on client to client transfers.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ By default, a quorum of sites must must acknowledge a permanent
+ message in order for it considered to have been successfully
+ transmitted. The actual number of environments that must respond is
+ calculated using the value set with
+
+
+ <span><tt class="methodname">EnvironmentConfig.setReplicationNumSites()</tt>.</span>
+</p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="fmwrkpermtimeout"></a>Setting the Permanent Message Timeout</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The permanent message timeout represents the
+ maximum amount of time the committing thread
+ will block waiting for message
+ acknowledgments. If sufficient
+ acknowledgments arrive before this timeout has
+ expired, the thread continues operations as
+ normal. However, if this timeout expires, the
+ committing thread flushes its transaction log
+ buffer before continuing with normal
+ operations.
+ </p>
+ <p>
+ You set the timeout value using
+ <tt class="methodname">Environment.setReplicationTimeout()</tt>.
+ You pass this method the
+ <tt class="methodname">ReplicationTimeoutType.ACK_TIMEOUT</tt>
+ constant and a timeout value in microseconds.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting"> dbenv.setReplicationTimeout(ReplicationTimeoutType.ACK_TIMEOUT, 100); </pre>
+ <p>
+ This timeout value can be set at anytime during the
+ life of the application.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="perm2fmwrkexample"></a>Adding a Permanent Message Policy to
+
+
+ <span>RepQuoteExample</span>
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For illustration purposes, we will now update
+
+
+ <tt class="literal">RepQuoteExample</tt>
+ such that it requires only one acknowledgment from
+ a replica on transactional commits. Also, we will give
+ this acknowledgment a 500 microsecond timeout
+ value. This means that our application's main
+ thread will block for up to 500 microseconds waiting
+ for an acknowledgment. If it does not receive at
+ least one acknowledgment in that amount of time,
+ DB will flush the transaction logs to disk
+ before continuing on.
+ </p>
+ <p>
+ This is a very simple update. We can perform the
+ entire thing in
+
+ <tt class="methodname">RepQuoteExample.init()</tt>
+ immediately after we set the application's priority
+ and before we open our environment handle.
+ </p>
+ <pre class="programlisting"> public int init(RepConfig config)
+ throws DatabaseException
+ {
+ int ret = 0;
+ appConfig = config;
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setErrorStream(System.err);
+ envConfig.setErrorPrefix(RepConfig.progname);
+
+ envConfig.setReplicationManagerLocalSite(appConfig.getThisHost());
+ for (ReplicationHostAddress host = appConfig.getFirstOtherHost();
+ host != null; host = appConfig.getNextOtherHost())
+ {
+ envConfig.replicationManagerAddRemoteSite(host);
+ }
+
+ if (appConfig.totalSites &gt; 0)
+ envConfig.setReplicationNumSites(appConfig.totalSites);
+ envConfig.setReplicationPriority(appConfig.priority);
+
+ <b class="userinput"><tt>envConfig.setReplicationManagerAckPolicy(
+ ReplicationManagerAckPolicy.ALL);
+ envConfig.setReplicationTimeout(ReplicationTimeoutType.ACK_TIMEOUT,
+ 500); </tt></b>
+
+ envConfig.setCacheSize(RepConfig.CACHESIZE);
+ envConfig.setTxnNoSync(true);
+ ... </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repmgr_init_example_c.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="electiontimes.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Adding the Replication Framework to
+
+
+  </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Managing Election Times</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/gettingStarted.css b/db/docs/gsg_db_rep/JAVA/gettingStarted.css
new file mode 100644
index 000000000..c1b4c86b7
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/gettingStarted.css
@@ -0,0 +1,41 @@
+body { width: 45em;
+ margin-left: 3em;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11pt;
+ }
+
+h2.title { margin-left: -1em;
+ font-family: Verdana, serif;
+ font-size: 16pt;
+ }
+
+h3.title { font-family: Verdana, serif;
+ font-size: 14pt;
+ }
+
+pre.programlisting {
+ font-family: monospace;
+ background-color: #eae8e9;
+}
+
+div.navheader { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+
+div.navheader table tr td { font-size: 9pt; }
+
+div.navfooter { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+div.navfooter table tr td { font-size: 9pt; }
+
+span.emphasis { font-style: italic; font-size: 9pt;}
+
+div.appendix div.informaltable { font-size: 9pt; }
+div.appendix div.informaltable td { vertical-align: top; }
+div.appendix div.informaltable p { margin-top: .25em; }
+div.appendix div.informaltable p { margin-bottom: .25em; }
+
+
diff --git a/db/docs/gsg_db_rep/JAVA/index.html b/db/docs/gsg_db_rep/JAVA/index.html
new file mode 100644
index 000000000..07402f6b2
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/index.html
@@ -0,0 +1,460 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Getting Started with Replicated Berkeley DB Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="next" href="preface.html" title="Preface" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Getting Started with Replicated Berkeley DB Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="book" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h1 class="title"><a id="id650925"></a>Getting Started with Replicated Berkeley DB Applications</h1>
+ </div>
+ <div>
+ <div class="legalnotice">
+ <p class="legalnotice-title">
+ <b>Legal Notice</b>
+ </p>
+ <p>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
+ </p>
+ <p>
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
+ </p>
+ <p>
+ <span class="trademark">Java</span>&#8482; and all Java-based marks are a trademark
+ or registered trademark of Sun Microsystems,
+ Inc, in the United States and other countries.
+ </p>
+ <p>
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="pubdate">9/20/2006</p>
+ </div>
+ </div>
+ <div></div>
+ <hr />
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="preface">
+ <a href="preface.html">Preface</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="introduction.html">1. Introduction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#overview">Overview</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repenvirons">Replication Environments</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repdbs">Replication Databases</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#commlayer">Communications Layer</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#masterselect">Selecting a Master</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repadvantage.html">Replication Benefits</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="apioverview.html">The Replication APIs</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repapioverview">Replication API Overview</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="elections.html">Holding Elections</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#influencingelections">Influencing Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#winningelections">Winning Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#switchingmasters">Switching Masters</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="permmessages.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmessagenot">When Not to Manage
+ Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmanage">Managing Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permimplement">Implementing Permanent
+ Message Handling</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="txnapp.html">2. Transactional Application</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnapp.html#appoverview">Application Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="simpleprogramlisting.html">Program Listing</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repconfiginfo_cxx">
+
+ Class: RepConfig
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#simpletxnusage_java">Class: SimpleTxn</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#simpletxnmain_java">Method: SimpleTxn.main()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#simpletxn_init_java">Method: SimpleTxn.init()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#doloop_java">Method: SimpleTxn.doloop()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+
+ Method: SimpleTxn.printStocks()
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="repapp.html">3. The DB Replication Framework</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="repapp.html#rep_init_code">
+ Starting and Stopping Replication
+ </a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#election_flags">Managing Election Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#thread_count">Selecting the Number of Threads</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repmgr_init_example_c.html">Adding the Replication Framework to
+
+
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkpermmessage.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermpolicy">Identifying Permanent Message Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermtimeout">Setting the Permanent Message Timeout</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#perm2fmwrkexample">Adding a Permanent Message Policy to
+
+
+ RepQuoteExample
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="electiontimes.html">Managing Election Times</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electiontimeout">Managing Election Timeouts</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electretrytime">Managing Election Retry Times</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="fmwrkconnectretry.html">Managing Connection Retries</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="fwrkmasterreplica.html">4. Replica versus Master Processes</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkmasterreplica.html#determinestate">Determining State</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="processingloop.html">Processing Loop</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="exampledoloop.html">Example Processing Loop</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="exampledoloop.html#runningit">Running It</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="addfeatures.html">5. Additional Features</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="addfeatures.html#delayedsync">Delayed Synchronization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="manageblock.html">Managing Blocking Operations</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="noautoinit.html">Stop Auto-Initialization</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="c2ctransfer.html">Client to Client Transfer</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="c2ctransfer.html#fmwrkpeerserver">Identifying Peers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="bulk.html">Bulk Transfers</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right" valign="top"> Preface</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/introduction.html b/db/docs/gsg_db_rep/JAVA/introduction.html
new file mode 100644
index 000000000..dce03b363
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/introduction.html
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="repadvantage.html" title="Replication Benefits" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="repadvantage.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#overview">Overview</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repenvirons">Replication Environments</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#repdbs">Replication Databases</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#commlayer">Communications Layer</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#masterselect">Selecting a Master</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repadvantage.html">Replication Benefits</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="apioverview.html">The Replication APIs</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="apioverview.html#repapioverview">Replication API Overview</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="elections.html">Holding Elections</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#influencingelections">Influencing Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#winningelections">Winning Elections</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="elections.html#switchingmasters">Switching Masters</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="permmessages.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmessagenot">When Not to Manage
+ Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permmanage">Managing Permanent Messages</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="permmessages.html#permimplement">Implementing Permanent
+ Message Handling</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on
+ replication as used with Berkeley DB (DB). It begins by offering a
+ general overview to replication and the benefits it provides. It also
+ describes the APIs that you use to implement replication, and it
+ describes architecturally the things that you need to do to your
+ application code in order to use the replication APIs. Finally, it
+ discusses the differences in backup and restore strategies that you
+ might pursue when using replication, especially where it comes to log
+ file removal.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="overview"></a>Overview</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The DB replication APIs allow you to distribute your database
+ write operations (performed on a read-write master) to one or
+ more read-only <span class="emphasis"><em>replicas</em></span>.
+ For this reason, DB's replication implementation is said to be a
+ <span class="emphasis"><em>single master, multiple replica</em></span> replication strategy.
+ </p>
+ <p>
+ Note that your database write operations can occur only on the
+ master; any attempt to write to a replica results in an error
+ being
+
+ <span>raised by</span>
+ the DB API used to perform the write.
+ </p>
+ <p>
+ A single replication master and all of its replicas are referred
+ to as a <span class="emphasis"><em>replication group</em></span>. While all
+ members of the replication group can reside on the same
+ machine, usually each replication participant is placed on a
+ separate physical machine somewhere on the network.
+ </p>
+ <p>
+ Note that all replication applications must first be
+ transactional applications. The data that the master transmits
+ its replicas are log records that are generated as records are
+ updated. Upon transactional commit, the master transmits a
+ transaction record which tells the replicas to commit the
+ records they previously received from the master. In order for
+ all of this to work, your replicated application must also be a
+ transactional application. For this reason, it is
+ recommended that you write and debug your DB application as
+ a stand-alone transactional application before introducing the
+ replication layer to your code.
+ </p>
+ <p>
+ Finally, be aware that all machines participating in the
+ replication group must share identical
+ <span class="emphasis"><em>endianess</em></span>. Endianess is the byte-order
+ strategy used by the computing platform to store multibyte
+ numbers. Berkeley DB is sensitive to byte order and so your
+ replication infrastructure must be consistent in this area.
+ We expect to remove this requirement in some future
+ release of the product.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repenvirons"></a>Replication Environments</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The most important requirement for a replication
+ participant is that it must use a unique Berkeley DB database
+ environment independent of all other replication
+ participants. So while multiple replication participants
+ can reside on the same physical machine, no two such participants
+ can share the same environment home directory.
+ </p>
+ <p>
+ For this reason, technically replication occurs between
+ unique <span class="emphasis"><em>database environments</em></span>. So in the strictest sense,
+ a replication group consists of a <span class="emphasis"><em>master
+ environment</em></span> and
+ one or more <span class="emphasis"><em>replica environments</em></span>. However, the reality
+ is that for production code, each such environment will
+ usually be located on its own unique machine. Consequently,
+ this manual sometimes talks about <span class="emphasis"><em>replication sites</em></span>, meaning the
+ unique combination of environment home directory, host and port that a specific
+ replication application is using.
+ </p>
+ <p>
+ There is no DB-specified limit to the number of
+ environments which can participate in a replication group.
+ The only limitation here is one of resources &#8212;
+ network bandwidth, for example.
+ </p>
+ <p>
+ (Note, however, that the replication framework does place a limit on the
+ number of environments you can use. See
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>
+ for details.)
+ </p>
+ <p>
+ Also, DB's replication implementation requires all
+ participating environments to be assigned IDs that are
+ locally unique to the given environment. Depending on the
+ replication APIs that you choose to use, you may or may not
+ need to manage this particular detail.
+ </p>
+ <p>
+ For detailed information on database environments, see
+ the <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i>
+ guide. For more information on environment IDs, see
+ the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repdbs"></a>Replication Databases</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB's databases are managed and used in exactly the same way
+ as if you were writing a non-replicated application, with
+ a couple of caveats. First, the databases maintained in a replicated environment
+ must reside either in the <tt class="literal">ENV_HOME</tt>
+ directory, or in the directory identified by the
+
+
+ <tt class="methodname">EnvironmentConfig.addDataDir()</tt>
+ method. Unlike non-replication applications, you cannot place your
+ databases in a subdirectory below these locations. You should
+ also not use full path names for your databases or
+ environments as these are likely to break as to replicated
+ to other machines.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="commlayer"></a>Communications Layer</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to transmit database writes to the replication
+ replicas, DB requires a communications layer.
+ DB is agnostic as to what this layer should
+ look like. The only requirement is that it
+ be capable of passing two opaque data objects and an
+ environment ID from the master to its replicas without
+ corruption.
+ </p>
+ <p>
+ Because replicas are usually placed on different machines on
+ the network, the communications layer is usually some kind
+ of a network-aware implementation. Beyond that, its
+ implementation details are largely up to you. It could use
+ TCP/IP sockets, for example, or it could use
+ raw sockets if they perform better for your particular
+ application.
+ </p>
+ <p>
+ Note that you may not have to write your own communications
+ layer. DB provides a replication framework that
+ includes a fully-functional TCP/IP-based communications layer.
+ See <a href="apioverview.html">The Replication APIs</a>
+ for more information.
+ </p>
+ <p>
+ See the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>
+ for a description of how to
+ write your own custom replication communications layer.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="masterselect"></a>Selecting a Master</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Every replication group is allowed one and only one
+ master environment. Almost always, masters are selected by
+ holding an <span class="emphasis"><em>election</em></span>. All such
+ elections are performed by the underlying Berkeley DB
+ replication code so you have to do very little to
+ implement them.
+ </p>
+ <p>
+ When holding an election, replicas &quot;vote&quot; on who should
+ be the master. Among replicas participating in the
+ election, the one with the most up-to-date set of log
+ records will win the election. Note that it's possible
+ for there to be a tie. When this occurs, priorities are
+ used to select the master. See
+ <a href="elections.html">Holding Elections</a>
+ for details.
+ </p>
+ <p>
+ For more information on holding and managing elections,
+ see <a href="elections.html">Holding Elections</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repadvantage.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Replication Benefits</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/manageblock.html b/db/docs/gsg_db_rep/JAVA/manageblock.html
new file mode 100644
index 000000000..620562e2c
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/manageblock.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Managing Blocking Operations</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="next" href="noautoinit.html" title="Stop Auto-Initialization" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Managing Blocking Operations</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="addfeatures.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="noautoinit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="manageblock"></a>Managing Blocking Operations</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When a replica is in the process of synchronizing with its master, all DB
+ operations are blocked until such a time as the synchronization is completed.
+ For replicas with a heavy read load, these blocked operations may represent an
+ unacceptable loss in throughput.
+ </p>
+ <p>
+ You can configure DB so that it will not block when synchronization is in
+ process. Instead, the DB operation will fail,
+
+
+
+ <span>
+ immediately throwing a
+ <tt class="classname">com.sleepycat.db.ReplicationLockoutException</tt>
+ exception.
+ </span>
+ When this happens, it is up to your application to your application to determine
+ what action to take (that is, logging the event, making an appropriate user
+ response, retrying the operation, and so forth).
+ </p>
+ <p>
+ To turn off blocking on synchronization, specify
+
+ <span>
+ <tt class="literal">ReplicationConfig.NOWAIT</tt> and
+ <tt class="literal">true</tt> to
+ <tt class="methodname">Environment.setReplicationConfig()</tt>.
+ To turn off this feature, specify
+ <tt class="literal">false</tt> for the
+ <tt class="literal">ReplicationConfig.NOWAIT</tt> field.
+ </span>
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="addfeatures.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="noautoinit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 5. Additional Features </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Stop Auto-Initialization</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/noautoinit.html b/db/docs/gsg_db_rep/JAVA/noautoinit.html
new file mode 100644
index 000000000..1a6decd6e
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/noautoinit.html
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Stop Auto-Initialization</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="addfeatures.html" title="Chapter 5. Additional Features" />
+ <link rel="previous" href="manageblock.html" title="Managing Blocking Operations" />
+ <link rel="next" href="c2ctransfer.html" title="Client to Client Transfer" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Stop Auto-Initialization</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="manageblock.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Additional Features</th>
+ <td width="20%" align="right"> <a accesskey="n" href="c2ctransfer.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="noautoinit"></a>Stop Auto-Initialization</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As stated in the previous section, when a replication replica is synchronizing
+ with its master, it will block all DB operations until the synchronization
+ is completed. You can turn off this behavior (see <a href="manageblock.html">Managing Blocking Operations</a>), but for replicas that have been out of touch
+ from their master for a very long time, this may not be enough.
+ </p>
+ <p>
+ If a replica has been out of touch from its master long enough, it may find that
+ it is not possible to perform synchronization. When this happens, by default the
+ master and replica internally decided to completely re-initialize the replica.
+ This re-initialization involves discarding the replica's current database(s) and
+ transferring new ones to it from the master. Depending on the size of the master's
+ databases, this can take a long time, during which time the replica will be
+ complete non-responsive when it comes to performing database operations.
+ </p>
+ <p>
+ It is possible that there is a time of the day when it is better to perform a replica
+ re-initialization. Or, you simply might want to decide to bring the replica up to
+ speed by restoring it's databases using a hot-backup taken from the master. Either
+ way, you can decide to prevent automatic-initialization of your replica. To do this
+ specify
+
+ <span>
+ <tt class="literal">ReplicationConfig.NOAUTOINIT</tt> and
+ <tt class="literal">true</tt> to
+ <tt class="methodname">Environment.setReplicationConfig()</tt>.
+ To turn off this feature, specify
+ <tt class="literal">false</tt> for the
+ <tt class="literal">ReplicationConfig.NOAUTOINIT</tt> field.
+ </span>
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="manageblock.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="addfeatures.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="c2ctransfer.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Managing Blocking Operations </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Client to Client Transfer</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/permmessages.html b/db/docs/gsg_db_rep/JAVA/permmessages.html
new file mode 100644
index 000000000..9a8747053
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/permmessages.html
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Permanent Message Handling</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="elections.html" title="Holding Elections" />
+ <link rel="next" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Permanent Message Handling</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="elections.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnapp.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="permmessages"></a>Permanent Message Handling</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Messages received by a replica may be marked with an
+ special flag that indicates the message is permanent.
+ Custom replicated applications will receive notification of
+ this flag via the <tt class="literal">DB_REP_ISPERM</tt> return value
+ from the
+
+
+ method.
+
+ There is no hard requirement that a replication application look for, or
+ respond to, this return code. However, because robust replicated
+ applications typically do manage permanent messages, we introduce
+ the concept here.
+ </p>
+ <p>
+ A message is marked as being permanent if the message
+ affects transactional integrity. For example,
+ transaction commit messages are an example of a message
+ that is marked permanent. What the application does
+ about the permanent message is driven by the durability
+ guarantees required by the application.
+ </p>
+ <p>
+ For example, consider what the replication framework does when it
+ has permanent message handling turned on and a
+ transactional commit record is sent to the replicas.
+ First, the replicas must transactional-commit the data
+ modifications identified by the message. And then, upon
+ a successful commit, the replication framework sends the master a
+ message acknowledgment.
+ </p>
+ <p>
+ For the master (again, using the replication framework), things are a little more complicated than
+ simple message acknowledgment. Usually in a replicated
+ application, the master commits transactions
+ asynchronously; that is, the commit operation does not
+ block waiting for log data to be flushed to disk before
+ returning. So when a master is managing permanent
+ messages, it typically blocks the committing thread
+ immediately before <tt class="methodname">commit()</tt>
+ returns. The thread then waits for acknowledgments from
+ its replicas. If it receives enough acknowledgments, it
+ continues to operate as normal.
+ </p>
+ <p>
+ If the master does not
+ receive message acknowledgments &#8212; or, more likely, it does not receive
+ <span class="emphasis"><em>enough</em></span> acknowledgments &#8212; the
+ committing thread flushes its log data to disk and then
+ continues operations as normal. The master application can
+ do this because replicas that fail to handle a message, for
+ whatever reason, will eventually catch up to the master. So
+ by flushing the transaction logs to disk, the master is
+ ensuring that the data modifications have made it to
+ stable storage in one location (its own hard drive).
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permmessagenot"></a>When Not to Manage
+ Permanent Messages</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ There are two reasons why you might
+ choose to not implement permanent messages.
+ In part, these go to why you are using
+ replication in the first place.
+ </p>
+ <p>
+ One class of applications uses replication so that
+ the application can improve transaction
+ through-put. Essentially, the application chooses a
+ reduced transactional durability guarantee so as to
+ avoid the overhead forced by the disk I/O required
+ to flush transaction logs to disk. However, the
+ application can then regain that durability
+ guarantee to a certain degree by replicating the
+ commit to some number of replicas.
+ </p>
+ <p>
+ Using replication to improve an application's
+ transactional commit guarantee is called
+ <span class="emphasis"><em>replicating to the network.</em></span>
+ </p>
+ <p>
+ In extreme cases where performance is of critical
+ importance to the application, the master might
+ choose to both use asynchronous commits
+ <span class="emphasis"><em>and</em></span> decide not to wait for
+ message acknowledgments. In this case the master
+ is simply broadcasting its commit activities to its
+ replicas without waiting for any sort of a reply. An
+ application like this might also choose to use
+ something other than TCP/IP for its network
+ communications since that protocol involves a fair
+ amount of packet acknowledgment all on its own. Of
+ course, this sort of an application should also be
+ very sure about the reliability of both its network and
+ the machines that are hosting its replicas.
+ </p>
+ <p>
+ At the other end of the extreme, there is a
+ class of applications that use replication
+ purely to improve read performance. This sort
+ of application might choose to use synchronous
+ commits on the master because write
+ performance there is not of critical
+ performance. In any case, this kind of an
+ application might not care to know whether its
+ replicas have received and successfully handled
+ permanent messages because the primary storage
+ location is assumed to be on the master, not
+ the replicas.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permmanage"></a>Managing Permanent Messages</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ With the exception of a rare breed of
+ replicated applications, most masters need some
+ view as to whether commits are occurring on
+ replicas as expected. At a minimum, this is because
+ masters will not flush their log buffers unless
+ they have reason to expect that permanent
+ messages have not been committed on the
+ replicas.
+ </p>
+ <p>
+ That said, it is important to remember that
+ managing permanent messages involves a fair amount
+ of network traffic. The messages must be sent to
+ the replicas and the replicas must then acknowledge
+ the message. This represents a performance overhead
+ that can be worsened by congested networks or
+ outright outages.
+ </p>
+ <p>
+ Therefore, when managing permanent messages, you
+ must first decide on how many of your replicas must
+ send acknowledgments before your master decides
+ that all is well and it can continue normal
+ operations. When making this decision, you could
+ decide that <span class="emphasis"><em>all</em></span> replicas must
+ send acknowledgments. But unless you have only one
+ or two replicas, or you are replicating over a very
+ fast and reliable network, this policy could prove
+ very harmful to your application's performance.
+ </p>
+ <p>
+ Therefore, a common strategy is to wait for an
+ acknowledgment from a simple majority of replicas.
+ This ensures that commit activity has occurred on
+ enough machines that you can be reliably certain
+ that data writes are preserved across your network.
+ </p>
+ <p>
+ Remember that replicas that do not acknowledge a
+ permanent message are not necessarily unable to
+ perform the commit; it might be that network
+ problems have simply resulted in a delay at the
+ replica. In any case, the underlying DB
+ replication code is written such that a replica that
+ falls behind the master will eventually take action
+ to catch up.
+ </p>
+ <p>
+ Depending on your application, it may be
+ possible for you to code your permanent message
+ handling such that acknowledgment must come
+ from only one or two replicas. This is a
+ particularly attractive strategy if you are
+ closely managing which machines are eligible to
+ become masters. Assuming that you have one or
+ two machines designated to be a master in the
+ event that the current master goes down, you
+ may only want to receive acknowledgments from
+ those specific machines.
+ </p>
+ <p>
+ Finally, beyond simple message acknowledgment, you
+ also need to implement an acknowledgment timeout
+ for your application. This timeout value is simply
+ meant to ensure that your master does not hang
+ indefinitely waiting for responses that will never
+ come because a machine or router is down.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="permimplement"></a>Implementing Permanent
+ Message Handling</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ How you implement permanent message handling
+ depends on which API you are using to implement
+ replication. If you are using the replication framework, then
+ permanent message handling is configured using
+ policies that you specify to the framework. In
+ this case, you can configure your application
+ to:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Ignore permanent messages (the master
+ does not wait for acknowledgments).
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from a
+ quorum. A quorum is reached when
+ acknowledgments are received from the
+ minimum number of electable
+ replicas needed to ensure that
+ the record remains durable if
+ an election is held.
+ </p>
+ <p>
+ The goal here is to be
+ absolutely sure the record is
+ durable. The master wants to
+ hear from enough electable
+ replicas that they have
+ committed the record so that if
+ an election is held, the master
+ knows the record will exist even
+ if a new master is selected.
+ </p>
+ <p>
+ This is the default policy.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require an acknowledgment from at least one replica.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from
+ all replicas.
+ </p>
+ </li>
+ <li>
+ <p>
+ Require an acknowledgment from a
+ peer. (The replication framework allows you to
+ designate one environment as a peer of
+ another).
+ </p>
+ </li>
+ <li>
+ <p>
+ Require acknowledgments from
+ all peers.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that the replication framework simply flushes its transaction
+ logs and moves on if a permanent message is not
+ sufficiently acknowledged.
+ </p>
+ <p>
+ For details on permanent message handling with the
+ replication framework, see <a href="fwrkpermmessage.html">Permanent Message Handling</a>.
+ </p>
+ <p>
+ If these policies are not sufficient for your
+ needs, or if you want your application to take more
+ corrective action than simply flushing log buffers
+ in the event of an unsuccessful commit, then you
+ must use write a custom replication implementation.
+ </p>
+ <p>
+ For custom replication implementation, messages are
+ sent from the master to its replica using a
+ <tt class="function">send()</tt> callback that you
+ implement. Note, however, that DB's replication
+ code automatically sets the permanent
+ flag for you where appropriate.
+ </p>
+ <p>
+ If the <tt class="function">send()</tt> callback returns with a
+ non-zero status, DB flushes the transaction log
+ buffers for you. Therefore, you must cause your
+ <tt class="function">send()</tt> callback to block waiting
+ for acknowledgments from your replicas.
+ As a part of implementing the
+ <tt class="function">send()</tt> callback, you implement
+ your permanent message handling policies. This
+ means that you identify how many replicas must
+ acknowledge the message before the callback can
+ return <tt class="literal">0</tt>. You must also
+ implement the acknowledgment timeout, if any.
+ </p>
+ <p>
+ Further, message acknowledgments are sent from the
+ replicas to the master using a communications
+ channel that you implement (the replication code
+ does not provide a channel for acknowledgments).
+ So implementing permanent messages means that when
+ you write your replication communications channel,
+ you must also write it in such a way as to also
+ handle permanent message acknowledgments.
+ </p>
+ <p>
+ For more information on implementing permanent
+ message handling using a custom replication layer,
+ see the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="elections.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnapp.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Holding Elections </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 2. Transactional Application</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/preface.html b/db/docs/gsg_db_rep/JAVA/preface.html
new file mode 100644
index 000000000..909206faa
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/preface.html
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Preface</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="next" href="introduction.html" title="Chapter 1. Introduction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Preface</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="preface" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="preface"></a>Preface</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This document describes how to write replicated Berkeley DB applications.
+ The APIs used to implement replication in your application
+ are described here. This book describes the concepts surrounding replication, the scenarios under which you
+ might choose to use it, and the architectural requirements that a replication application has over a
+ transactional application.
+ </p>
+ <p>
+ This book is aimed at the software engineer responsible for writing a
+ replicated DB application.
+ </p>
+ <p>
+ This book assumes that you have already read and understood the
+ concepts contained in the
+ <span><i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.</span>
+
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="conventions"></a>Conventions Used in this Book</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following typographical conventions are used within in this manual:
+ </p>
+ <p>
+ Class names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
+ names</tt>. For example:
+
+ <span>&quot;The <tt class="methodname">Environment()</tt>
+ constructor returns an <tt class="classname">Environment</tt> class object.&quot;</span>
+
+
+ </p>
+ <p>
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
+ </p>
+ <p>
+ Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
+ For example:
+ </p>
+ <pre class="programlisting">import com.sleepycat.db.DatabaseConfig;
+
+...
+
+// Allow the database to be created.
+DatabaseConfig myDbConfig = new DatabaseConfig();
+myDbConfig.setAllowCreate(true);</pre>
+ <p>
+ In some situations, programming examples are updated from one chapter to the next. When
+ this occurs, the new code is presented in <b class="userinput"><tt>monospaced bold</tt></b> font. For example:
+ </p>
+ <pre class="programlisting"><b class="userinput"><tt>import com.sleepycat.db.Database;</tt></b>
+import com.sleepycat.db.DatabaseConfig;
+
+...
+
+// Allow the database to be created.
+DatabaseConfig myDbConfig = new DatabaseConfig();
+myDbConfig.setAllowCreate(true);
+<b class="userinput"><tt>Database myDb = new Database(&quot;mydb.db&quot;, null, myDbConfig);</tt></b> </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Finally, notes of special interest are represented using a note block such
+ as this.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ transactional DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_txn/JAVA/index.html" target="_top">
+ Getting Started with Transaction Processing for Java
+ </a>
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/JAVA/index.html" target="_top">
+ Getting Started with Berkeley DB for Java
+ </a>
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/collections/tutorial/index.html" target="_top">
+ Berkeley DB Collections Tutorial
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/java/index.html" target="_top">
+ Berkeley DB Javadoc
+ </a>
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Getting Started with Replicated Berkeley DB Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/processingloop.html b/db/docs/gsg_db_rep/JAVA/processingloop.html
new file mode 100644
index 000000000..72ee804ad
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/processingloop.html
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Processing Loop</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="previous" href="fwrkmasterreplica.html" title="Chapter 4. Replica versus Master Processes" />
+ <link rel="next" href="exampledoloop.html" title="Example Processing Loop" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Processing Loop</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="fwrkmasterreplica.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Replica versus Master Processes</th>
+ <td width="20%" align="right"> <a accesskey="n" href="exampledoloop.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="processingloop"></a>Processing Loop</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Typically the central part of any replication application
+ is some sort of a continuous loop that constantly
+ checks the state of the environment (whether it is a
+ replica or a master), opens and/or closes the
+ databases as is necessary, and performs other useful
+ work. A loop such as this one must of necessity
+ take special care to know whether it is operating
+ on a master or a replica environment because all of its
+ activities are dependent upon that state.
+ </p>
+ <p>
+ The flow of activities through the loop will
+ generally be as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Check whether the environment has
+ changed state. If it has, you
+ might want to reopen your
+ database handles, especially if
+ you opened your replica's
+ database handles as read-only.
+ In this case, you might need to
+ reopen them as read-write.
+ However, if you always open your
+ database handles as read-write,
+ then it is not automatically necessary to
+ reopen the databases due to a
+ state change. Instead, you
+ could check for a
+
+ <span>
+ <tt class="classname">ReplicationHandleDeadException</tt>
+ exception
+ </span>
+
+ when you use your
+ database handle(s). If you see
+ this, then you need to reopen
+ your database handle(s).
+ </p>
+ </li>
+ <li>
+ <p>
+ If the databases are closed,
+ create new database handles,
+ configure the handle as is
+ appropriate, and then open the
+ databases. Note that handle
+ configuration will be different,
+ depending on whether the handle
+ is opened as a replica or a
+ master. At a minimum, the master
+ should be opened with database
+ creation privileges, whereas the
+ replica does not need to be. You
+ must also open the master such
+ that its databases are
+ read-write. You
+ <span class="emphasis"><em>can</em></span> open
+ replicas with read-only
+ databases, so long as you are
+ prepared to closed and the reopen
+ the handle in the event the
+ client becomes a master.
+ </p>
+ <p>
+ Also, note that if the local
+ environment
+ is a replica, then it is possible
+ that databases do not currently
+ exist. In this case, the database
+ open attempts will fail. Your
+ code will have to take this
+ corner case into account
+ (described below).
+ </p>
+ </li>
+ <li>
+ <p>
+ Once the databases are opened,
+ check to see if the local
+ environment is a
+ master. If it is, do whatever it is
+ a master should do for your
+ application.
+ </p>
+ <p>
+ Remember that the code for your
+ master should include some way
+ for you to tell the master
+ to exit gracefully.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the local environment is not a
+ master, then do whatever it is
+ your replica environments should do.
+ Again, like the code for your
+ master environments, you should provide
+ a way for your replicas to exit
+ the processing loop gracefully.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ The following code fragment illustrates
+ these points (note that we fill out this
+ fragment with a working example
+ next in this chapter):
+ </p>
+ <pre class="programlisting">// loop to manage replication activities
+public int doloop()
+{
+ Database db = null;
+
+
+// Infinite loop. We exit depending on how the master and replica code
+// is written.
+for (;;) {
+ /* If dbp is not opened, we need to open it. */
+ if (db == null) {
+ // Create the handle and then configure it. Before you open
+ // it, you have to decide what open flags to use:
+ DatabaseConfig dbconf = new DatabaseConfig();
+ dbconf.setType(DatabaseType.BTREE);
+ if (isMaster) {
+ dbconf.setAllowCreate(true);
+ }
+
+ // Now you can open your database handle, passing to it the
+ // optins selected above.
+
+ try {
+ db = dbenv.openDatabase
+ (null, progname, null, dbconf);
+ } catch(java.io.FileNotFoundException e) {
+ // Put your error handling code here.
+ }
+ }
+
+ // Now that the databases have been opened, continue with general
+ // processing, depending on whether we are a master or a replica.
+ if (isMaster) {
+ // Do master stuff here. Don't forget to include a way to
+ // gracefully exit the loop.
+ } else {
+ // Do replica stuff here. As is the case with the master
+ // code, be sure to include a way to gracefully exit the
+ // loop.
+ }
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="fwrkmasterreplica.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="fwrkmasterreplica.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="exampledoloop.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 4. Replica versus Master Processes </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Example Processing Loop</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/repadvantage.html b/db/docs/gsg_db_rep/JAVA/repadvantage.html
new file mode 100644
index 000000000..c7ab72c1a
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/repadvantage.html
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Replication Benefits</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="next" href="apioverview.html" title="The Replication APIs" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Replication Benefits</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="apioverview.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="repadvantage"></a>Replication Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ Replication offers your application a number of benefits that
+ can be a tremendous help. Primarily replication's benefits
+ revolve around performance, but there is also a benefit in
+ terms of data durability guarantees.
+ </p>
+ <p>
+ Briefly, the reasons why you might choose to implement
+ replication in your DB application are:
+ </p>
+ <div class="itemizedlist">
+ <div class="itemizedlist">
+ <ul type="circle">
+ <li>
+ <p>
+ Improved application reliability.
+ </p>
+ <p>
+ By spreading your data across multiple
+ machines, you can ensure that your
+ application's data continues to be
+ available even in the event of a
+ hardware failure on any given machine in
+ the replication group.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <ul type="disc">
+ <li>
+ <p>
+ Improve read performance.
+ </p>
+ <p>
+ By using replication you can spread data reads across
+ multiple machines on your network. Doing so allows you
+ to vastly improve your application's read performance.
+ This strategy might be particularly interesting for
+ applications that have readers on remote network nodes;
+ you can push your data to the network's edges thereby
+ improving application data read responsiveness.
+ </p>
+ <p>
+ Additionally, depending on how you partition your
+ data across your replicas, any given replica may
+ only need to cache part of your data, decreasing
+ cache misses and reducing I/O on the client.
+ </p>
+ </li>
+ <li>
+ <p>
+ Improve transactional commit performance
+ </p>
+ <p>
+ In order to commit a transaction and achieve a
+ transactional durability guarantee, the commit must be
+ made <span class="emphasis"><em>durable</em></span>. That is, the commit
+ must be written to disk (usually, but not always,
+ synchronously) before the application's thread of
+ control can continue operations.
+ </p>
+ <p>
+ Replication allows you to avoid this disk I/O and still
+ maintain a degree of durability by <span class="emphasis"><em>committing
+ to the network</em></span>. In other words, you relax
+ your transactional durability guarantees on the master,
+ but by virtue of replicating the data across the
+ network you gain some additional durability guarantees
+ above what is provided locally.
+ </p>
+ <p>
+ Usually this strategy is implemented using some form of
+ an asynchronous transactional commit on the master. In
+ this way your data writes will eventually be written to
+ disk, but your application will not have to wait for
+ the disk I/O to complete before continuing with its
+ next operation.
+ </p>
+ <p>
+ Note that it is possible to cause DB's replication
+ implementation to wait to hear from one or
+ more replica's as to whether they have successfully
+ saved the write before continuing. However, in this
+ case you might be trading performance for a even
+ higher durability guarantee (see below).
+ </p>
+ </li>
+ <li>
+ <p>
+ Improve data durability guarantee.
+ </p>
+ <p>
+ In a traditional transactional application, you commit your
+ transactions such that data modifications are saved to
+ disk. Beyond this, the durability of your data is
+ dependent upon the backup strategy that you choose to
+ implement for your site.
+ </p>
+ <p>
+ Replication allows you to increase this durability
+ guarantee by ensuring that data modifications are
+ written to multiple machines. This means that multiple
+ disks, disk controllers, power supplies, and CPUs are
+ used to ensure that your data modification makes it to
+ stable storage. In other words, replication allows you
+ to minimize the problem of a single point of failure
+ by using more hardware to guarantee your data writes.
+ </p>
+ <p>
+ If you are using replication for this reason, then you
+ probably will want to configure your application such
+ that it waits to hear about a successful commit from
+ one or more replicas before continuing with the next
+ operation. This will obviously impact your
+ application's write performance to some degree
+ &#8212; with the performance penalty being largely dependent
+ upon the speed and stability of the network connecting
+ your replication group.
+ </p>
+ <p>
+ For more information, see <a href="fwrkpermmessage.html">Permanent Message Handling</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="apioverview.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> The Replication APIs</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/repapp.html b/db/docs/gsg_db_rep/JAVA/repapp.html
new file mode 100644
index 000000000..63d48f58a
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/repapp.html
@@ -0,0 +1,705 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 3. The DB Replication Framework</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="simpleprogramlisting.html" title="Program Listing" />
+ <link rel="next" href="repmgr_init_example_c.html" title="Adding the Replication Framework to&#10; &#10; &#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 3. The DB Replication Framework</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="simpleprogramlisting.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="repmgr_init_example_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="repapp"></a>Chapter 3. The DB Replication Framework</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="repapp.html#rep_init_code">
+ Starting and Stopping Replication
+ </a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#election_flags">Managing Election Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="repapp.html#thread_count">Selecting the Number of Threads</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="repmgr_init_example_c.html">Adding the Replication Framework to
+
+
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="fwrkpermmessage.html">Permanent Message Handling</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermpolicy">Identifying Permanent Message Policies</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#fmwrkpermtimeout">Setting the Permanent Message Timeout</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="fwrkpermmessage.html#perm2fmwrkexample">Adding a Permanent Message Policy to
+
+
+ RepQuoteExample
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="electiontimes.html">Managing Election Times</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electiontimeout">Managing Election Timeouts</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="electiontimes.html#electretrytime">Managing Election Retry Times</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="fmwrkconnectretry.html">Managing Connection Retries</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ The easiest way to add replication to your transactional
+ application is to use the replication framework. The replication framework provides a comprehensive
+ communications layer that enables replication. For a brief listing
+ of the replication framework's feature set, see
+ <a href="apioverview.html#repframeworkoverview">Replication Framework Overview</a>.
+ </p>
+ <p>
+ To use the replication framework, you make use of special methods off the
+ <tt class="classname">Environment</tt> and
+ <tt class="methodname">EnvironmentConfig</tt>
+ classes. You also use a series of related classes to perform
+ your implementation. For example, in order to detect whether
+ your code is running as a master or a replica, you must
+ implement <tt class="classname">com.sleepycat.db.EventHandler</tt>.
+ (see <a href="fwrkmasterreplica.html#determinestate">Determining State</a>).
+ That is:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Create an environment handle as normal.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your environment handle as
+ needed (e.g. set the error file and
+ error prefix values, if desired).
+ </p>
+ </li>
+ <li>
+ <p>
+ Use the replication framework replication methods to
+ configure the replication framework. Using these
+ methods causes DB to know that you
+ are using the replication framework.
+ </p>
+ <p>
+ Configuring the replication framework
+ entails setting its replication
+ priority, setting the TCP/IP address
+ that this replication environment will use for
+ incoming replication messages, identify
+ TCP/IP addresses of other replication
+ environments, setting the number of
+ replication environments in the
+ replication group, and so forth. These actions are
+ discussed throughout the remainder of
+ this chapter.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your environment handle. When you
+ do this, be sure to specify
+
+
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setInitializeReplication()</tt>
+ when you configure your environment
+ handle. This is in addition to the
+ configuration that you would normally
+ use for a transactional application.
+ This causes replication to be
+ initialized for the application.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Start replication by calling
+
+
+ <span><tt class="methodname">Environment.replicationManagerStart()</tt>.</span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your databases as needed. Masters
+ must open their databases for read
+ and write activity. Replicas can open
+ their databases for read-only activity, but
+ doing so means they must re-open the
+ databases if the replica ever becomes a
+ master. Either way, replicas should never attempt to
+ write to the database(s) directly.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ The replication framework allows you to only use one
+ environment handle per process.
+ </p>
+ </div>
+ <p>
+ When you are ready to shut down your application:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Close your databases
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your environment. This causes
+ replication to stop as well.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Before you can use the replication framework, you may have to
+ enable it in your DB library. This is
+ <span class="emphasis"><em>not</em></span> a requirement for
+ Microsoft Windows systems, or Unix systems that
+ use pthread mutexes by default. Other systems,
+ notably BSD and BSD-derived systems (such as
+ Mac OS X), must enable the replication framework when you
+ configure the DB build.
+ </p>
+ <p>
+ You do this by <span class="emphasis"><em>not</em></span>
+ disabling replication and by configuring the
+ library with POSIX threads support. In other
+ words, replication must be turned on in the
+ build (it is by default), and POSIX thread
+ support must be enabled if it is not already by
+ default. To do this, use the
+ <tt class="literal">--enable-pthread_api</tt> switch
+ on the configure script.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">../dist/configure --enable-pthread-api</pre>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="rep_init_code"></a>
+ Starting and Stopping Replication
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described above, you introduce replication to an
+ application by starting with a transactional
+ application, performing some basic replication
+ configuration, and then starting replication using
+
+
+ <span><tt class="methodname">Environment.replicationManagerStart()</tt>.</span>
+ </p>
+ <p>
+ You stop replication by closing your environment
+ cleanly, as is normal for an DB application.
+ </p>
+ <p>
+ For example, the following code fragment initializes, then
+ stops and starts replication. Note that other replication
+ activities are omitted for brevity.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Note that the following code fragment would be part of a larger
+ class that must implement
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>. This
+ class is used to track state changes between master and
+ replica. We put off that implementation for the moment, but the
+ point remains that the following code fragment would be
+ contained in a method or two that you would include in your
+ <tt class="classname">com.sleepycat.db.EventHandler</tt>
+ implementation.
+ </p>
+ </div>
+ <pre class="programlisting">
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.ReplicationHostAddress;
+import com.sleepycat.db.ReplicationManagerStartPolicy;
+
+...
+ String progname = &quot;example_replication&quot;;
+ String envHome = &quot;TESTDIR&quot;;
+ int cachesize = 10 * 1024 * 1024;
+
+ Environment dbenv;
+ ReplicationHostAddress thisHost;
+ String listenHost = &quot;mymachine.sleepycat.com&quot;;
+ int listenPort = 8080;
+
+ ReplicationHostAddress otherReplica;
+ String otherHost = &quot;anothermachine.sleepycat.com&quot;;
+ int otherPort = 8081;
+
+
+try {
+ // Configure the environment handle
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setErrorStream(System.err);
+ envConfig.setErrorPrefix(progname);
+ envConfig.setCacheSize(cachesize);
+ envConfig.setTxnNoSync(true);
+
+ // Identify the local replication site. This is the local hostname and
+ // port that this replication participant will use to receive
+ // incoming replication messages. Note that this can be
+ // performed only once for the application. It is required.
+ thisHost = new ReplicationHostAddress(listenHost, listenPort);
+ envConfig.setReplicationManagerLocalSite(thisHost);
+
+ // Set this application's priority. This is used for elections.
+ //
+ // Set this number to a positive integer, or 0 if you do not want
+ // this site to be able to become a master.
+ envConfig.setReplicationPriority(100);
+ // Add a site to the list of replication environments known to
+ // this application.
+ otherReplica = new ReplicationHostAddress(otherHost, otherPort);
+ envConfig.replicationManagerAddRemoteSite(otherReplica);
+
+ // Identify the number of sites in the replication group. This is
+ // necessary so that elections and permanent message
+ // handling can be performed correctly.
+ envConfig.setReplicationNumSites(2);
+
+ // Configure the environment's subsystems. Note that we initialize
+ // replication. This is required.
+ envConfig.setAllowCreate(true);
+ envConfig.setRunRecovery(true);
+ envConfig.setThreaded(true);
+ envConfig.setInitializeReplication(true);
+ envConfig.setInitializeLocking(true);
+ envConfig.setInitializeLogging(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setTransactional(true);
+
+ // Missing from this is where we set the event handle and the
+ // acknowledgement policy. We discuss these things later in this
+ // book.
+
+ // Open our environment handle.
+ try {
+ dbenv = new Environment(envHome, envConfig);
+ } catch(FileNotFoundException e) {
+ System.err.println(&quot;FileNotFound exception: &quot; + e.toString());
+ System.err.println(
+ &quot;Ensure that the environment directory is pre-created.&quot;);
+ }
+
+ // Start the replication framework such that it has three threads.
+ dbenv.replicationManagerStart(3,
+ ReplicationManagerStartPolicy.REP_ELECTION);
+
+ //////////////////////////////////////////////////
+ // All other application code goes here, including
+ // database opens.
+ //////////////////////////////////////////////////
+
+} catch (DatabaseException dbe) {
+ // Error handling goes here
+}
+
+// Close out your application here.
+try {
+ // Make sure all your databases are closed.
+
+ // Closing your environment stops replication.
+ dbenv.close();
+} catch (DatabaseException dbe) {
+ // Error handling here.
+}
+
+// All done. </pre>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="election_flags"></a>Managing Election Policies</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is worth taking a look at the
+
+
+
+ <span>
+ startup election options that you can set for
+ replication. You set these using the
+ <tt class="classname">ReplicationManagerStartPolicy</tt>
+ class that you pass to the
+ <tt class="methodname">Environment.replicationManagerStart()</tt>
+ method.
+
+ </span>
+ </p>
+ <p>
+ In the previous example, we specified
+
+ <tt class="literal">ReplicationManagerStartPolicy.REP_ELECTION</tt>
+ when we started replication. This causes the
+ application to try to find a master upon startup. If it
+ cannot, it calls for an election. In the event an
+ election is held, the environment receiving the most number of
+ votes will become the master.
+ </p>
+ <p>
+ There's some important points to make here:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ This
+
+ <span>option</span>
+ only requires that other
+ environments in the replication group
+ participate in the vote. There is no
+ requirement that
+ <span class="emphasis"><em>all</em></span> such
+ environments participate. In other
+ words, if an environment
+ starts up, it can call for an
+ election, and select a master, even
+ if all other environment have not yet
+ joined the replication group.
+ </p>
+ </li>
+ <li>
+ <p>
+ It only requires a simple majority of
+ participating environments to elect a master. The number of
+ environments used to calculate the simple
+ majority is based on the value set for
+
+
+
+ <span><tt class="methodname">EnvironmentConfig.setReplicationNumSites()</tt>.</span>
+
+
+ This is always true of elections held using the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ As always, the environment participating in the election with the most
+ up-to-date log files is selected as
+ master. If an environment with better log files
+ has not yet joined the replication
+ group, it may not become the master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Any one of these points may be enough to cause a
+ less-than-optimum environment to be selected as master.
+ Therefore, to give you a better degree of control over
+ which environment becomes a master at application startup,
+ the replication framework offers the following start-up
+
+ <span>options:</span>
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Option</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <tt class="literal">ReplicationManagerStartPolicy. REP_MASTER</tt>
+ </td>
+ <td>
+ <p>
+ The application starts up and declares itself to be a master
+ without calling for an election. It is an error for more
+ than one environment to start up using this flag, or for
+ an environment
+ to use this flag when a master already exists.
+ </p>
+ <p>
+ Note that no replication group should
+ <span class="emphasis"><em>ever</em></span> operate with more than
+ one master.
+ </p>
+ <p>
+ In the event that a environment attempts to become a
+ master when a master already exists, the
+ replication code will resolve the problem by
+ holding an election. Note, however, that there
+ is always a possibility of data loss in the face
+ of duplicate masters, because once a master is
+ selected, the environment that loses the election will
+ have to roll back any transactions committed
+ until it is in sync with the &quot;real&quot; master.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">ReplicationManagerStartPolicy. REP_CLIENT</tt>
+ </td>
+ <td>
+ <p>
+ The application starts up and declares
+ itself to be a replica without calling for
+ an election. Note that the application
+ can still become a master if a subsequent
+ application starts up, calls for an
+ election, and this application is elected
+ master.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">ReplicationManagerStartPolicy. REP_ELECTION</tt>
+ </td>
+ <td>
+ <p>
+ As described above, the application starts up,
+ looks for a master, and if one is not found calls
+ for an election.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <tt class="literal">ReplicationManagerStartPolicy. REP_FULL_ELECTION</tt>
+ </td>
+ <td>
+ <p>
+ Identical to
+
+ <tt class="literal">ReplicationManagerStartPolicy. REP_ELECTION</tt>
+ except that the election requires all
+ known members of the replication group to
+ participate. If a given environment has not yet
+ started but it is included in the
+ replication group count (using
+
+
+ <span><tt class="methodname">EnvironmentConfig.setReplicationNumSites()</tt>)</span>
+ then a master can not be elected.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="thread_count"></a>Selecting the Number of Threads</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Under the hood, the replication framework is threaded and you can
+ control the number of threads used to process messages received from
+ other replicas. The threads that the replication framework uses are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Incoming message thread. This thread
+ receives messages from the site's
+ socket and passes those messages to
+ message processing threads (see below)
+ for handling.
+ </p>
+ </li>
+ <li>
+ <p>
+ Outgoing message thread. Outgoing
+ are performed in whatever thread
+ performed a write to the database(s).
+ That is, the thread that called, for
+ example,
+
+
+ <tt class="methodname">Database.put()</tt>
+ is the thread that writes replication messages
+ about that fact to the socket.
+ </p>
+ <p>
+ Note that if this write activity would
+ cause the thread to be blocked due to
+ some condition on the socket, the replication framework
+ will hand the outgoing message to the
+ incoming message thread, and it will
+ then write the message to the socket.
+ This prevents your database write
+ threads from blocking due to abnormal
+ network I/O conditions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Message processing threads are
+ responsible for parsing and then
+ responding to incoming replication
+ messages. Typically, a response will
+ include write activity to your
+ database(s), so these threads can be
+ busy performing disk I/O.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these threads, the only ones that you have any
+ configuration control over are the message processing
+ threads. In this case, you can determine how many
+ of these threads you want to run.
+ </p>
+ <p>
+ It is always a bit of an art to decide on a thread count,
+ but the short answer is you probably do not need more
+ than three threads here, and it is likely that one will
+ suffice. That said, the best thing to do is set your
+ thread count to a fairly low number and then increase
+ it if it appears that your application will benefit
+ from the additional threads.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="simpleprogramlisting.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repmgr_init_example_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Program Listing </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Adding the Replication Framework to
+
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/repmgr_init_example_c.html b/db/docs/gsg_db_rep/JAVA/repmgr_init_example_c.html
new file mode 100644
index 000000000..cc5a06bc4
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/repmgr_init_example_c.html
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Adding the Replication Framework to
+
+
+ </title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="previous" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ <link rel="next" href="fwrkpermmessage.html" title="Permanent Message Handling" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Adding the Replication Framework to
+
+
+ </th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="repapp.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. The DB Replication Framework</th>
+ <td width="20%" align="right"> <a accesskey="n" href="fwrkpermmessage.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="repmgr_init_example_c"></a>Adding the Replication Framework to
+
+
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ We now use the methods described above to add partial
+ support to the
+
+
+ example that we presented in
+ <a href="txnapp.html">Transactional Application</a>.
+ That is, in this section we will:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Enhance our command line options to
+ accept information of interest to a
+ replicated application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure our environment handle to use
+ replication and the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Minimally configure the replication framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Start replication.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Note that when we are done with this section, we will be
+ only partially ready to run the application. Some critical
+ pieces will be missing; specifically, we will not yet be
+ handling the differences between a master and a
+ replica. (We do that in the next chapter).
+ </p>
+ <p>
+ Also, note that in the following code fragments, additions
+ and changes to the code are marked in <b class="userinput"><tt>bold</tt></b>.
+ </p>
+ <p>
+ To begin, we make some significant changes to our
+ <tt class="classname">RepConfig</tt> class because we will be
+ using it to maintain a lot more information that we needed
+ for our simple transactional example.
+ </p>
+ <p>
+ We begin by changing our package name and then importing a few new
+ classes. <tt class="classname">java.util.Vector</tt> is used to
+ organize a list of &quot;other host&quot; definitions (that is, the host and
+ port information for the other replication participants known to
+ this application). We also need a couple of classes used to manage
+ individual host and port information, as well as replication
+ startup policy information.
+</p>
+ <pre class="programlisting"><b class="userinput"><tt>package db.repquote;
+
+import java.util.Vector;
+
+import com.sleepycat.db.ReplicationHostAddress;
+import com.sleepycat.db.ReplicationManagerStartPolicy;</tt></b>
+
+public class RepConfig
+{ </pre>
+ <p>
+ Next we add considerably to the constants and data members used by
+ this class. All of this is used to manage information necessary for
+ replication purposes. We also at this point change the program's
+ name, since we will be doing that to the main class in our
+ application a little later in this description.
+</p>
+ <pre class="programlisting"> // Constant values used in the RepQuote application.
+ public static final String progname = <b class="userinput"><tt>&quot;RepQuoteExample&quot;;</tt></b>
+ public static final int CACHESIZE = 10 * 1024 * 1024;
+ <b class="userinput"><tt>public static final int SLEEPTIME = 5000;</tt></b>
+
+ // member variables containing configuration information
+ public String home; // String specifying the home directory for rep files.
+ <b class="userinput"><tt>public Vector otherHosts; // stores an optional set of &quot;other&quot; hosts.
+ public int priority; // priority within the replication group.
+ public ReplicationManagerStartPolicy startPolicy;
+ public ReplicationHostAddress thisHost; // The host address to listen to.
+ // Optional parameter specifying the # of sites in the replication group.
+ public int totalSites;
+
+ // member variables used internally.
+ private int currOtherHost;
+ private boolean gotListenAddress;</tt></b></pre>
+ <p>
+ Now we update our class constructor to initialize all of these new
+ variables:
+</p>
+ <pre class="programlisting"> public RepConfig()
+ {
+ <b class="userinput"><tt>startPolicy = ReplicationManagerStartPolicy.REP_ELECTION;</tt></b>
+ home = &quot;TESTDIR&quot;;
+ <b class="userinput"><tt>gotListenAddress = false;
+ totalSites = 0;
+ priority = 100;
+ currOtherHost = 0;
+ thisHost = new ReplicationHostAddress();
+ otherHosts = new Vector();</tt></b>
+ } </pre>
+ <p>
+ Finally, we finish updating this class by providing a series of new
+ getter and setter methods. These are used primarily for setting a
+ retrieving host information of interest to our replicated
+ application:
+</p>
+ <pre class="programlisting"> public java.io.File getHome()
+ {
+ return new java.io.File(home);
+ }
+
+ <b class="userinput"><tt>public void setThisHost(String host, int port)
+ {
+ gotListenAddress = true;
+ thisHost.port = port;
+ thisHost.host = host;
+ }
+
+ public ReplicationHostAddress getThisHost()
+ {
+ if (!gotListenAddress) {
+ System.err.println(&quot;Warning: no host specified.&quot;);
+ System.err.println(&quot;Returning default.&quot;);
+ }
+ return thisHost;
+ }
+
+ public boolean gotListenAddress() {
+ return gotListenAddress;
+ }
+
+ public void addOtherHost(String host, int port, boolean peer)
+ {
+ ReplicationHostAddress newInfo =
+ new ReplicationHostAddress(host, port, peer);
+ otherHosts.add(newInfo);
+ }
+
+ public ReplicationHostAddress getFirstOtherHost()
+ {
+ currOtherHost = 0;
+ if (otherHosts.size() == 0)
+ return null;
+ return (ReplicationHostAddress)otherHosts.get(currOtherHost);
+ }
+
+ public ReplicationHostAddress getNextOtherHost()
+ {
+ currOtherHost++;
+ if (currOtherHost &gt;= otherHosts.size())
+ return null;
+ return (ReplicationHostAddress)otherHosts.get(currOtherHost);
+ }
+
+ public ReplicationHostAddress getOtherHost(int i)
+ {
+ if (i &gt;= otherHosts.size())
+ return null;
+ return (ReplicationHostAddress)otherHosts.get(i);
+ }</tt></b>
+} </pre>
+ <p>
+ Having completed our update to the
+
+ <tt class="classname">RepConfig</tt>
+ class, we can now start making
+ changes to the main portion of our program. We begin by changing
+ the program's name. <span>(This, of course, means that we copy our
+<tt class="classname">SimpleTxn</tt> code to a file named <tt class="literal">RepQuoteExample.java</tt>.)</span>
+</p>
+ <pre class="programlisting">package <b class="userinput"><tt>db.repquote</tt></b>;
+
+import java.io.FileNotFoundException;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+<b class="userinput"><tt>import java.lang.Thread;
+import java.lang.InterruptedException;</tt></b>
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import db.repquote.RepConfig;
+
+public class <b class="userinput"><tt>RepQuoteExample</tt></b>
+{
+ private RepConfig repConfig;
+ private Environment dbenv; </pre>
+ <p>
+ Next we update our usage function. The application will continue to
+ accept the <tt class="literal">-h</tt> parameter so that we can identify
+ the environment home directory used by this application. However,
+ we also add the
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">-m</tt> parameter which allows us to
+ identify the host and port used by this application to
+ listen for replication messages.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-o</tt> parameter which allows us to
+ specify other replicas.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-n</tt> parameter which allows us to
+ identify the number of sites in this replication
+ group.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">-p</tt> option, which is used to identify
+ this replica's priority (recall that the priority is
+ used as a tie breaker for elections)
+ </p>
+ </li>
+ </ul>
+ </div>
+ <pre class="programlisting">
+ public <b class="userinput"><tt>RepQuoteExample()</tt></b>
+ throws DatabaseException
+ {
+ repConfig = null;
+ dbenv = null;
+ }
+
+ public static void usage()
+ {
+ System.err.println(&quot;usage: &quot; + repConfig.progname);
+ System.err.println(&quot;[-h home]<b class="userinput"><tt>[-o host:port][-m host:port]&quot; +
+ &quot;[-f host:port][-n nsites][-p priority]</tt></b>&quot;);
+
+ System.err.println(<b class="userinput"><tt>&quot;\t -m host:port (required; m stands for me)\n&quot; +
+ &quot;\t -o host:port (optional; o stands for other; any &quot; +
+ &quot;number of these may be specified)\n&quot; +</tt></b>
+ &quot;\t -h home directory\n&quot; +
+ <b class="userinput"><tt>&quot;\t -n nsites (optional; number of sites in replication &quot; +
+ &quot;group; defaults to 0\n&quot; +
+ &quot;\t in which case we try to dynamically compute the &quot; +
+ &quot;number of sites in\n&quot; +
+ &quot;\t the replication group)\n&quot; +
+ &quot;\t -p priority (optional: defaults to 100)\n&quot;);</tt></b>
+
+ System.exit(1);
+ } </pre>
+ <p>
+ Now we can begin working on our <tt class="literal">main()</tt> function.
+ We begin by adding a couple of variables that we will use to
+ collect TCP/IP host and port information.
+
+
+
+</p>
+ <pre class="programlisting"> public static void main(String[] argv)
+ throws Exception
+ {
+ RepConfig config = new RepConfig();
+ <b class="userinput"><tt>String tmpHost;
+ int tmpPort = 0;</tt></b> </pre>
+ <p>
+ Now we collect our command line arguments. As we do so, we will
+ configure host and port information as required, and we will
+ configure the application's election priority if necessary.
+</p>
+ <pre class="programlisting"> // Extract the command line parameters
+ for (int i = 0; i &lt; argv.length; i++)
+ {
+ if (argv[i].compareTo(&quot;-h&quot;) == 0) {
+ // home - a string arg.
+ i++;
+ config.home = argv[i];
+ <b class="userinput"><tt>} else if (argv[i].compareTo(&quot;-m&quot;) == 0) {
+ // &quot;me&quot; should be host:port
+ i++;
+ String[] words = argv[i].split(&quot;:&quot;);
+ if (words.length != 2) {
+ System.err.println(
+ &quot;Invalid host specification host:port needed.&quot;);
+ usage();
+ }
+ try {
+ tmpPort = Integer.parseInt(words[1]);
+ } catch (NumberFormatException nfe) {
+ System.err.println(&quot;Invalid host specification, &quot; +
+ &quot;could not parse port number.&quot;);
+ usage();
+ }
+ config.setThisHost(words[0], tmpPort);
+ } else if (argv[i].compareTo(&quot;-n&quot;) == 0) {
+ i++;
+ config.totalSites = Integer.parseInt(argv[i]);
+ } else if (argv[i].compareTo(&quot;-o&quot;) == 0) {
+ i++;
+ String[] words = argv[i].split(&quot;:&quot;);
+ if (words.length != 2) {
+ System.err.println(
+ &quot;Invalid host specification host:port needed.&quot;);
+ usage();
+ }
+ try {
+ tmpPort = Integer.parseInt(words[1]);
+ } catch (NumberFormatException nfe) {
+ System.err.println(&quot;Invalid host specification, &quot; +
+ &quot;could not parse port number.&quot;);
+ usage();
+ }
+ config.addOtherHost(words[0], tmpPort, isPeer);
+ } else if (argv[i].compareTo(&quot;-p&quot;) == 0) {
+ i++;
+ config.priority = Integer.parseInt(argv[i]);
+ }</tt></b> else {
+ System.err.println(&quot;Unrecognized option: &quot; + argv[i]);
+ usage();
+ }
+ }
+
+ // Error check command line.
+ if (<b class="userinput"><tt>(!config.gotListenAddress())</tt></b> || config.home.length() == 0)
+ usage(); </pre>
+ <p>
+ Having done that, the remainder of our <tt class="function">main()</tt>
+ function is left unchanged, with the exception of a few name changes required by the
+ new class name:
+</p>
+ <pre class="programlisting"> <b class="userinput"><tt>RepQuoteExample</tt></b> runner = null;
+ try {
+ runner = new <b class="userinput"><tt>RepQuoteExample();</tt></b>
+ runner.init(config);
+
+ runner.doloop();
+ runner.terminate();
+ } catch (DatabaseException dbe) {
+ System.err.println(&quot;Caught an exception during &quot; +
+ &quot;initialization or processing: &quot; + dbe.toString());
+ if (runner != null)
+ runner.terminate();
+ }
+ System.exit(0);
+ } // end main </pre>
+ <p>
+ Now we need to update our
+
+ <tt class="methodname">RepQuoteExample.init()</tt>
+ method. Our updates are at first related to configuring
+ replication. First, we need to update the method so that we can
+ identify the local site to the environment handle (that is, the site identified by the
+<tt class="literal">-m</tt> command line option):
+</p>
+ <pre class="programlisting"> public int init(RepConfig config)
+ throws DatabaseException
+ {
+ int ret = 0;
+ appConfig = config;
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setErrorStream(System.err);
+ envConfig.setErrorPrefix(RepConfig.progname);
+
+ <b class="userinput"><tt>envConfig.setReplicationManagerLocalSite(appConfig.getThisHost());</tt></b> </pre>
+ <p>
+ And we also add code to allow us to identify &quot;other&quot; sites to the environment handle (that is,
+the sites that we identify using the <tt class="literal">-o</tt> command line
+option). To do this, we iterate over each of the &quot;other&quot; sites provided to
+us using the <tt class="literal">-o</tt> command line option, and we add each one
+individually in turn:
+</p>
+ <pre class="programlisting"> <b class="userinput"><tt>for (ReplicationHostAddress host = appConfig.getFirstOtherHost();
+ host != null; host = appConfig.getNextOtherHost())
+ {
+ envConfig.replicationManagerAddRemoteSite(host);
+ }</tt></b> </pre>
+ <p>
+ And then we need code to allow us to identify the total number of sites
+ in this replication group, and to set the environment's priority.
+</p>
+ <pre class="programlisting"> <b class="userinput"><tt>if (appConfig.totalSites &gt; 0)
+ envConfig.setReplicationNumSites(appConfig.totalSites);
+ envConfig.setReplicationPriority(appConfig.priority); </tt></b> </pre>
+ <p>
+
+
+
+
+ <span>We can now open our environment. Note that the options</span>
+
+ we use to open the environment are slightly different for a
+ replicated application than they are for a non-replicated
+ application. Namely, replication requires the
+
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setInitializeReplication()</tt> option.
+ </span>
+ </p>
+ <p>
+ Also, because we are using the replication framework, we must prepare
+ our environment for threaded usage. For this reason, we also
+ need the <tt class="literal">DB_THREAD</tt> flag.
+ </p>
+ <pre class="programlisting"> envConfig.setCacheSize(RepConfig.CACHESIZE);
+ envConfig.setTxnNoSync(true);
+
+ envConfig.setAllowCreate(true);
+ envConfig.setRunRecovery(true);
+ <b class="userinput"><tt>envConfig.setInitializeReplication(true);</tt></b>
+ envConfig.setInitializeLocking(true);
+ envConfig.setInitializeLogging(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setTransactional(true);
+ try {
+ dbenv = new Environment(appConfig.getHome(), envConfig);
+ } catch(FileNotFoundException e) {
+ System.err.println(&quot;FileNotFound exception: &quot; + e.toString());
+ System.err.println(
+ &quot;Ensure that the environment directory is pre-created.&quot;);
+ ret = 1;
+ } </pre>
+ <p>
+ Finally, we start replication before we exit this method.
+ Immediately after exiting this method, our application will go into
+ the
+
+ <tt class="methodname">RepQuoteExample.doloop()</tt>
+ method, which is where
+ the bulk of our application's work is performed. We update that
+ method in the next chapter.
+</p>
+ <pre class="programlisting"> // start replication manager
+ dbenv.replicationManagerStart(3, appConfig.startPolicy);
+ return ret;
+ } </pre>
+ <p>
+ This completes our replication updates for the moment. We are not as
+ yet ready to actually run this program; there remains a few
+ critical pieces left to add to it. However, the work that we
+ performed in this section represents a solid foundation for the
+ remainder of our replication work.
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="repapp.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="repapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="fwrkpermmessage.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 3. The DB Replication Framework </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Permanent Message Handling</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/simpleprogramlisting.html b/db/docs/gsg_db_rep/JAVA/simpleprogramlisting.html
new file mode 100644
index 000000000..f106a191f
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/simpleprogramlisting.html
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Program Listing</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ <link rel="previous" href="txnapp.html" title="Chapter 2. Transactional Application" />
+ <link rel="next" href="repapp.html" title="Chapter 3. The DB Replication Framework" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Program Listing</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnapp.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 2. Transactional Application</th>
+ <td width="20%" align="right"> <a accesskey="n" href="repapp.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="simpleprogramlisting"></a>Program Listing</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our example program is a fairly simple transactional
+ application. At this early stage of its development, the
+ application contains no hint that it must be network-aware
+ so the only command line argument that it takes is one that
+ allows us to specify the environment home directory.
+ (Eventually, we will specify things like host names and
+ ports from the command line).
+ </p>
+ <p>
+ Note that the application performs all writes under the
+ protection of a transaction; however, multiple database
+ operations are not performed per transaction. Consequently,
+ we simplify things a bit by using autocommit for our
+ database writes.
+ </p>
+ <p>
+ Also, this application is single-threaded. It is possible
+ to write a multi-threaded or multi-process application that
+ performs replication. That said, the concepts described in
+ this book are applicable to both single threaded and
+ multi-threaded applications so nothing
+ is gained by multi-threading this application other than
+ distracting complexity. This manual
+ does, however, identify where care must be taken when
+ performing replication with a non-single threaded
+ application.
+ </p>
+ <p>
+ Finally, remember that transaction processing is not described in
+ this manual. Rather, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide for details on
+ that topic.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="repconfiginfo_cxx"></a>
+
+ <span>Class: RepConfig</span>
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before we begin, we present a
+ class that we will use to maintain useful
+ information for us. Under normal circumstances,
+ this class would not be necessary for a simple
+ transactional example such as this. However, this code will
+ grow into a replicated example that needs to
+ track a lot more information for the
+ application, and so we lay the groundwork for
+ it here.
+ </p>
+ <p>
+ The class that we create is called
+
+ <tt class="classname">RepConfig</tt>
+ and its only purpose at this time is to track
+ the location of our environment home directory.
+ </p>
+ <pre class="programlisting">package db.simpletxn;
+
+public class RepConfig
+{
+ // Constant values used in the RepQuote application.
+ public static final String progname = &quot;SimpleTxn&quot;;
+ public static final int CACHESIZE = 10 * 1024 * 1024;
+
+ // member variables containing configuration information
+ public String home; // String specifying the home directory for
+ // rep files.
+
+ public RepConfig()
+ {
+ home = &quot;TESTDIR&quot;;
+ }
+
+ public java.io.File getHome()
+ {
+ return new java.io.File(home);
+ }
+
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="simpletxnusage_java"></a>Class: SimpleTxn</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our transactional example will
+ consist of a class,
+ <tt class="classname">SimpleTxn</tt>, that performs
+ all our work for us.
+ </p>
+ <p>
+ First, we provide the package declaration and
+ then a few import statements that the class
+ needs.
+ </p>
+ <pre class="programlisting">package db.simpletxn;
+
+import java.io.FileNotFoundException;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import db.simpletxn.RepConfig;
+
+public class SimpleTxn
+{
+ private RepConfig repConfig;
+ private Environment dbenv; </pre>
+ <p>
+ Next, we provide our class constructor. This simply initializes our
+ class data members.
+</p>
+ <pre class="programlisting"> public SimpleTxn()
+ throws DatabaseException
+ {
+ repConfig = null;
+ dbenv = null;
+ } </pre>
+ <p>
+ And then we provide our <tt class="methodname">usage()</tt> method. At
+ this point, this method has very little to report:
+</p>
+ <pre class="programlisting"> public static void usage()
+ {
+ System.err.println(&quot;usage: &quot; + repConfig.progname);
+ System.err.println(&quot;[-h home]&quot;);
+
+ System.err.println(&quot;\t -h home directory\n&quot;);
+
+ System.exit(1);
+ } </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="simpletxnmain_java"></a>Method: SimpleTxn.main()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Having implemented our
+ <tt class="methodname">usage()</tt>
+ method, we can jump directly into our
+ <tt class="methodname">main()</tt>
+ method. This method begins by instantiating a
+ <tt class="classname">RepConfig</tt> object, and
+ then collecting the command line arguments so
+ that it can populate the object with the
+ appropriate data (just the environment home
+ directory, at this time):
+ </p>
+ <pre class="programlisting"> public static void main(String[] argv)
+ throws Exception
+ {
+ RepConfig config = new RepConfig();
+ // Extract the command line parameters
+ for (int i = 0; i &lt; argv.length; i++)
+ {
+ if (argv[i].compareTo(&quot;-h&quot;) == 0) {
+ // home - a string arg.
+ i++;
+ config.home = argv[i];
+ } else {
+ System.err.println(&quot;Unrecognized option: &quot; + argv[i]);
+ usage();
+ }
+ } </pre>
+ <p>
+ And then perform a little sanity checking on the command line
+ input:
+</p>
+ <pre class="programlisting"> // Error check command line.
+ if (config.home.length() == 0)
+ usage(); </pre>
+ <p>
+ Now we perform the class' work. To begin, we initialize the
+ object. The <tt class="methodname">init()</tt> method actually
+ opens our environment for us (shown in the next section).
+ </p>
+ <pre class="programlisting"> SimpleTxn runner = null;
+ try {
+ runner = new SimpleTxn();
+ runner.init(config); </pre>
+ <p>
+ And then we call our <tt class="methodname">doloop()</tt>
+ method. This method is where we perform all our database
+ activity. See <a href="simpleprogramlisting.html#doloop_java">Method: SimpleTxn.doloop()</a>
+ for it's details.
+ </p>
+ <pre class="programlisting"> runner.doloop(); </pre>
+ <p>
+ And then, finally terminate the application (which closes our
+ environment handle) and end the method.
+ </p>
+ <pre class="programlisting"> runner.terminate();
+ } catch (DatabaseException dbe) {
+ System.err.println(&quot;Caught an exception during &quot; +
+ &quot;initialization or processing: &quot; + dbe.toString());
+ if (runner != null)
+ runner.terminate();
+ }
+ System.exit(0);
+ } // end main </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="simpletxn_init_java"></a>Method: SimpleTxn.init()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The <tt class="methodname">SimpleTxn.init()</tt>
+ method is used to open our environment handle.
+ For readers familiar with writing transactional
+ DB applications, there should be no surprises
+ here. However, we will be adding to this in later
+ chapters as we roll replication into this example.
+ </p>
+ <p>
+ The only thing worth noting in this method here is that
+ we relax our transactional durability guarantee for this application.
+ We do this because the application will eventually be replicated and
+ so we don't need a high durability guarantee.
+</p>
+ <pre class="programlisting"> public int init(RepConfig config)
+ throws DatabaseException
+ {
+ int ret = 0;
+ repConfig = config;
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setErrorStream(System.err);
+ envConfig.setErrorPrefix(RepConfig.progname);
+
+ envConfig.setCacheSize(RepConfig.CACHESIZE);
+ envConfig.setTxnNoSync(true);
+
+ envConfig.setAllowCreate(true);
+ envConfig.setRunRecovery(true);
+ envConfig.setInitializeLocking(true);
+ envConfig.setInitializeLogging(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setTransactional(true);
+ try {
+ dbenv = new Environment(repConfig.getHome(), envConfig);
+ } catch(FileNotFoundException e) {
+ System.err.println(&quot;FileNotFound exception: &quot; + e.toString());
+ System.err.println(
+ &quot;Ensure that the environment directory is pre-created.&quot;);
+ ret = 1;
+ }
+
+ return ret;
+ } </pre>
+ <p>
+ Finally, we present the <tt class="methodname">SimpleTxn.terminate()</tt>
+ method here. All this does is close the environment handle. Again,
+ there should be no surprises here, but we provide the
+ implementation for the sake of completeness anyway.
+</p>
+ <pre class="programlisting"> public void terminate()
+ throws DatabaseException
+ {
+ dbenv.close();
+ } </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="doloop_java"></a>Method: SimpleTxn.doloop()</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ We now implement our application's
+ primary data processing method. This
+ method provides a command prompt at which the
+ user can enter a stock ticker value and a price for
+ that value. This information is then entered to the
+ database.
+ </p>
+ <p>
+ To display the database, simply enter
+ <tt class="literal">return</tt> at the prompt.
+ </p>
+ <p>
+ To begin, we declare a database pointer:
+ </p>
+ <pre class="programlisting"> public int doloop()
+ throws DatabaseException, , UnsupportedEncodingException
+ {
+ Database db = null; </pre>
+ <p>
+ Next, we begin the loop and we immediately open our
+ database if it has not already been opened.
+ </p>
+ <pre class="programlisting"> for (;;)
+ {
+ if (db == null) {
+ DatabaseConfig dbconf = new DatabaseConfig();
+ // Set page size small so page allocation is cheap.
+ dbconf.setPageSize(512);
+ dbconf.setType(DatabaseType.BTREE);
+ dbconf.setAllowCreate(true);
+ dbconf.setTransactional(true);
+
+ try {
+ db = dbenv.openDatabase(null, // Txn handle
+ RepConfig.progname, // db filename
+ null, // db name
+ dbconf);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(&quot;File not found exception&quot; + fnfe.toString());
+ // Get here only if the environment home directory
+ // somehow does not exist.
+ }
+ } </pre>
+ <p>
+ Now we implement our command prompt. This is a simple and not
+ very robust implementation of a command prompt.
+ If the user enters the keywords <tt class="literal">exit</tt>
+ or <tt class="literal">quit</tt>, the loop is exited and the
+ application ends. If the user enters nothing and instead simply
+ presses <tt class="literal">return</tt>, the entire contents of the
+ database is displayed. We use our
+ <tt class="methodname">printStocks()</tt> method to display the
+ database. (That implementation is shown next in this chapter.)
+ </p>
+ <p>
+ Notice that very little error checking is performed on the data
+ entered at this prompt. If the user fails to enter at least one
+ space in the value string, a simple help message is printed and
+ the prompt is returned to the user. That is the only error
+ checking performed here. In a real-world application,
+ at a minimum the application would probably check to ensure
+ that the price was in fact an integer or float value.
+ However, in order to keep this example code as simple as
+ possible, we refrain from implementing a thorough user interface.
+ </p>
+ <pre class="programlisting"> BufferedReader stdin =
+ new BufferedReader(new InputStreamReader(System.in));
+
+ // listen for input, and add it to the database.
+ System.out.print(&quot;QUOTESERVER&gt; &quot;);
+ System.out.flush();
+ String nextline = null;
+ try {
+ nextline = stdin.readLine();
+ } catch (IOException ioe) {
+ System.err.println(&quot;Unable to get data from stdin&quot;);
+ break;
+ }
+ String[] words = nextline.split(&quot;\\s&quot;);
+
+ // A blank line causes the DB to be dumped to stdout.
+ if (words.length == 0 ||
+ (words.length == 1 &amp;&amp; words[0].length() == 0)) {
+ try {
+ printStocks(db);
+ } catch (DatabaseException e) {
+ System.err.println(&quot;Got db exception reading &quot; +
+ &quot;DB: &quot; + e.toString());
+ break;
+ }
+ continue;
+ }
+
+ if (words.length == 1 &amp;&amp;
+ (words[0].compareToIgnoreCase(&quot;quit&quot;) == 0 ||
+ words[0].compareToIgnoreCase(&quot;exit&quot;) == 0)) {
+ break;
+ } else if (words.length != 2) {
+ System.err.println(&quot;Format: TICKER VALUE&quot;);
+ continue;
+ } </pre>
+ <p>
+ Now we assign data to the <tt class="classname">DatabaseEntry</tt>
+ classes that we will use to write the new information to the database.
+ </p>
+ <pre class="programlisting"> DatabaseEntry key =
+ new DatabaseEntry(words[0].getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data =
+ new DatabaseEntry(words[1].getBytes(&quot;UTF-8&quot;)); </pre>
+ <p>
+ Having done that, we can write the new information to the
+ database. Remember that because a transaction handle is not
+ explicitly used, but we did open the database such that it
+ supports transactions, then autocommit is automatically
+ used for this database write.
+ </p>
+ <p>
+ Autocommit is described in the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </p>
+ <p>
+ Also, the database is not configured for duplicate records, so
+ the data portion of a record is overwritten if the provided
+ key already exists in the database. However, in this case
+ DB returns <tt class="methodname">OperationStatus.KEYEXIST</tt> &#8212; which
+ we ignore.
+ </p>
+ <pre class="programlisting"> db.put(null, key, data); </pre>
+ <p>
+ Finally, we close our database before returning from the
+ method.
+ </p>
+ <pre class="programlisting"> }
+ if (db != null)
+ db.close(true);
+ return 0;
+ } </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="printstocks_c"></a>
+
+
+ <span>Method: SimpleTxn.printStocks()</span>
+ </h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The
+ <tt class="methodname">printStocks()</tt>
+
+ <span>method</span>
+ simply takes a database handle, opens a cursor, and uses
+ it to display all the information it finds in a database.
+ This is trivial cursor operation that should hold
+ no surprises for you. We simply provide it here for
+ the sake of completeness.
+ </p>
+ <p>
+ If you are unfamiliar with basic cursor operations,
+ please see the <i class="citetitle">Getting Started with Berkeley DB</i>
+ guide.
+ </p>
+ <pre class="programlisting"> public void terminate()
+ throws DatabaseException
+ {
+ dbenv.close();
+ }
+
+ /*
+ * void return type since error conditions are propagated
+ * via exceptions.
+ */
+ private void printStocks(Database db)
+ throws DatabaseException
+ {
+ Cursor dbc = db.openCursor(null, null);
+
+ System.out.println(&quot;\tSymbol\tPrice&quot;);
+ System.out.println(&quot;\t======\t=====&quot;);
+
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+ OperationStatus ret;
+ for (ret = dbc.getFirst(key, data, LockMode.DEFAULT);
+ ret == OperationStatus.SUCCESS;
+ ret = dbc.getNext(key, data, LockMode.DEFAULT)) {
+ String keystr = new String
+ (key.getData(), key.getOffset(), key.getSize());
+ String datastr = new String
+ (data.getData(), data.getOffset(), data.getSize());
+ System.out.println(&quot;\t&quot;+keystr+&quot;\t&quot;+datastr);
+
+ }
+ dbc.close();
+ }
+} // end class </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnapp.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnapp.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="repapp.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 2. Transactional Application </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 3. The DB Replication Framework</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_db_rep/JAVA/txnapp.html b/db/docs/gsg_db_rep/JAVA/txnapp.html
new file mode 100644
index 000000000..58e675765
--- /dev/null
+++ b/db/docs/gsg_db_rep/JAVA/txnapp.html
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 2. Transactional Application</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="up" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
+ <link rel="previous" href="permmessages.html" title="Permanent Message Handling" />
+ <link rel="next" href="simpleprogramlisting.html" title="Program Listing" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 2. Transactional Application</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="permmessages.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="simpleprogramlisting.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="txnapp"></a>Chapter 2. Transactional Application</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnapp.html#appoverview">Application Overview</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="simpleprogramlisting.html">Program Listing</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#repconfiginfo_cxx">
+
+ Class: RepConfig
+ </a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#simpletxnusage_java">Class: SimpleTxn</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#simpletxnmain_java">Method: SimpleTxn.main()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#simpletxn_init_java">Method: SimpleTxn.init()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#doloop_java">Method: SimpleTxn.doloop()</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="simpleprogramlisting.html#printstocks_c">
+
+
+ Method: SimpleTxn.printStocks()
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ In this chapter, we build a simple transaction-protected DB
+ application. Throughout the remainder of this book, we will add
+ replication to this example. We do this to underscore the concepts
+ that we are presenting in this book; the first being that you
+ should start with a working transactional program and then add
+ replication to it.
+ </p>
+ <p>
+ Note that this book assumes you already know how to write a
+ transaction-protected DB application, so we will not be
+ covering those concepts in this book. To learn how to write a
+ transaction-protected application, see the
+ <i class="citetitle">Berkeley DB Getting Started with Transaction Processing</i> guide.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="appoverview"></a>Application Overview</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Our application maintains a stock market quotes database.
+ This database contains records whose key is the stock
+ market symbol and whose data is the stock's price.
+ </p>
+ <p>
+ The application operates by presenting you with a command
+ line prompt. You then enter the stock symbol and its value,
+ separated by a space. The application takes this
+ information, writes it to the database.
+ </p>
+ <p>
+ To see the contents of the database, simply press
+ <tt class="literal">return</tt> at the command prompt.
+ </p>
+ <p>
+ To quit the application, type 'quit' or 'exit' at the
+ command prompt.
+ </p>
+ <p>
+ For example, the following illustrates the application's
+ usage. In it, we use entirely fictitious stock market
+ symbols and price values.
+ </p>
+ <pre class="programlisting">&gt; java db.simpletxn.SimpleTxn -h env_home_dir
+QUOTESERVER&gt; stock1 88
+QUOTESERVER&gt; stock2 .08
+QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ stock1 88
+
+QUOTESERVER&gt; stock1 88.9
+QUOTESERVER&gt;
+ Symbol Price
+ ====== =====
+ stock1 88.9
+ stock2 .08
+
+QUOTESERVER&gt; quit
+&gt;</pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="permmessages.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="simpleprogramlisting.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Permanent Message Handling </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Program Listing</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/BerkeleyDB-Core-C-Txn.pdf b/db/docs/gsg_txn/C/BerkeleyDB-Core-C-Txn.pdf
new file mode 100644
index 000000000..622ee100b
--- /dev/null
+++ b/db/docs/gsg_txn/C/BerkeleyDB-Core-C-Txn.pdf
Binary files differ
diff --git a/db/docs/gsg_txn/C/abortresults.html b/db/docs/gsg_txn/C/abortresults.html
new file mode 100644
index 000000000..abf4a86e9
--- /dev/null
+++ b/db/docs/gsg_txn/C/abortresults.html
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Aborting a Transaction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="next" href="autocommit.html" title="Auto Commit" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Aborting a Transaction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="autocommit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="abortresults"></a>Aborting a Transaction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When you abort a transaction, all database modifications performed
+ under the protection of the transaction are discarded, and all
+ locks currently held by the transaction are released. In this event,
+ your data is simply left in the
+ state that it was in before the transaction began performing data
+ modifications.
+ </p>
+ <p>
+ Note that aborting a transaction may result in disk
+ <span>
+ I/O if your logs are backed by the filesystem.
+ </span>
+
+ It is possible that during the course of your transaction,
+ logging data and/or database
+ <span>pages</span>
+
+ were written to backing files on disk. For this reason, DB
+ notes that the abort occurred in its log files so that at a
+ minimum the database can be brought into a consistent state at
+ recovery time.
+ </p>
+ <p>
+ Also, once you have aborted a transaction, the transaction
+ handle that you used for the transaction is no longer valid. To
+ perform database activities under the control of a new
+ transaction, you must obtain a fresh transactional handle.
+ </p>
+ <p>
+ To abort a transaction, call
+ <span><tt class="methodname">DB_TXN-&gt;abort()</tt>.</span>
+
+
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="autocommit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 3. Transaction Basics </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Auto Commit</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/architectrecovery.html b/db/docs/gsg_txn/C/architectrecovery.html
new file mode 100644
index 000000000..d461d9194
--- /dev/null
+++ b/db/docs/gsg_txn/C/architectrecovery.html
@@ -0,0 +1,446 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Designing Your Application for Recovery</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="recovery.html" title="Recovery Procedures" />
+ <link rel="next" href="hotfailover.html" title="Using Hot Failovers" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Designing Your Application for Recovery</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="recovery.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="hotfailover.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="architectrecovery"></a>Designing Your Application for Recovery</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When building your DB application, you should consider how you will run recovery. If you are building a
+ single threaded, single process application, it is fairly simple to run recovery when your application first
+ opens its environment. In this case, you need only decide if you want to run recovery every time you open
+ your application (recommended) or only some of the time, presumably triggered by a start up option
+ controlled by your application's user.
+ </p>
+ <p>
+ However, for multi-threaded and multi-process applications, you need to carefully consider how you will
+ design your application's startup code so as to run recovery only when it makes sense to do so.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithreadrecovery"></a>Recovery for Multi-Threaded Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If your application uses only one environment handle, then handling recovery for a multi-threaded
+ application is no more difficult than for a single threaded application. You simply open the environment
+ in the application's main thread, and then pass that handle to each of the threads that will be
+ performing DB operations. We illustrate this with our final example in this book (see
+ <a href="txnexample_c.html">Transaction Example</a>
+
+
+
+ for more information).
+ </p>
+ <p>
+ Alternatively, you can have each worker thread open its own environment handle. However, in this case,
+ designing for recovery is a bit more complicated.
+ </p>
+ <p>
+ Generally, when a thread performing database operations fails
+ or hangs, it is frequently best to simply
+ restart the application and run recovery upon application
+ startup as normal. However, not all applications can afford
+ to restart because a single thread has misbehaved.
+ </p>
+ <p>
+ If you are attempting to continue operations in the face of a misbehaving thread,
+ then at a minimum recovery must be run if a thread performing database operations fails or hangs.
+ </p>
+ <p>
+ Remember that recovery clears the environment of all
+ outstanding locks, including any that might be outstanding
+ from an aborted thread. If these locks are not cleared,
+ other threads performing database operations can back up
+ behind the locks obtained but never cleared by the failed
+ thread. The result will be an application that hangs
+ indefinitely.
+ </p>
+ <p>
+ To run recovery under these circumstances:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Suspend or shutdown all other threads performing
+ database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Discarding any open environment handles. Note that
+ attempting to gracefully close these handles may be
+ asking for trouble; the close can fail if the
+ environment is already in need of recovery. For
+ this reason, it is best and easiest to simply discard the handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open new handles, running recovery as you open
+ them.
+ See <a href="recovery.html#normalrecovery">Normal Recovery</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restart all your database threads.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ A traditional way to handle this activity is to spawn a watcher thread that is responsible for making
+ sure all is well with your threads, and performing the above actions if not.
+ </p>
+ <p>
+ However, in the case where each worker thread opens and maintains its own environment handle, recovery
+ is complicated for two reasons:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ For some applications and workloads, it might be
+ worthwhile to give your database threads the
+ ability to gracefully finalize any on-going
+ transactions. If this is the case, your
+ code must be capable of signaling each thread
+ to halt DB activities and close its
+ environment. If you simply run recovery against the
+ environment, your database threads will
+ detect this and fail in the midst of performing their
+ database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Your code must be capable of ensuring only one
+ thread runs recovery before allowing all other
+ threads to open their respective environment
+ handles. Recovery should be single threaded because when
+ recovery is run against an environment, it is
+ deleted and then recreated. This will cause all
+ other processes and threads to &quot;fail&quot; when they
+ attempt operations against the newly recovered
+ environment. If all threads run recovery
+ when they start up, then it is likely that some
+ threads will fail because the environment that they
+ are using has been recovered. This will cause the thread to have to re-execute its own recovery
+ path. At best, this is inefficient and at worst it could cause your application to fall into an
+ endless recovery pattern.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multiprocessrecovery"></a>Recovery in Multi-Process Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Frequently, DB applications use multiple processes to interact with the databases. For example, you may
+ have a long-running process, such as some kind of server, and then a series of administrative tools that
+ you use to inspect and administer the underlying databases. Or, in some web-based architectures, different
+ services are run as independent processes that are managed by the server.
+ </p>
+ <p>
+ In any case, recovery for a multi-process environment is complicated for two reasons:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ In the event that recovery must be run, you might
+ want to notify processes interacting with the environment
+ that recovery is about to occur and give them a
+ chance to gracefully terminate. Whether it is
+ worthwhile for you to do this is entirely dependent
+ upon the nature of your application. Some
+ long-running applications with multiple processes
+ performing meaningful work might want to do this.
+ Other applications with processes performing database
+ operations that are likely to be harmed by error conditions in other
+ processes will likely find it to be not worth the
+ effort. For this latter group, the chances of
+ performing a graceful shutdown may be low anyway.
+ </p>
+ </li>
+ <li>
+ <p>
+ Unlike single process scenarios, it can quickly become wasteful for every process interacting
+ with the databases to run recovery when it starts up. This is partly because recovery
+ <span class="emphasis"><em>does</em></span> take some amount of time to run, but mostly you want to
+ avoid a situation where your server must
+ reopen all its environment handles just because you fire up a command line database
+ administrative utility that always runs recovery.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ DB offers you two methods by which you can manage recovery for multi-process DB applications.
+ Each has different strengths and weaknesses, and they are described in the next sections.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="mp_recover_effects"></a>Effects of Multi-Process Recovery</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is worth noting that the following sections describe recovery processes than
+ can result in one process running recovery while other processes are currently actively performing
+ database operations.
+ </p>
+ <p>
+ When this happens, the current database operation will
+ abnormally fail, indicating a DB_RUNRECOVERY condition.
+ This means that your application should immediately abandon any database operations that it may have
+ on-going, discard any environment handles it has opened, and obtain and open new handles.
+ </p>
+ <p>
+ The net effect of this is that any writes performed by unresolved transactions will be lost.
+ For persistent applications (servers, for example), the services it provides will also be
+ unavailable for the amount of time that it takes to complete a recovery and for all participating
+ processes to reopen their environment handles.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="db_register"></a>Process Registration</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ One way to handle multi-process recovery is for every process to &quot;register&quot; its environment. In
+ doing so, the process gains the ability to see if any other applications are using the
+ environment and, if so, whether they have suffered an abnormal termination. If an abnormal
+ termination is detected, the process runs recovery; otherwise, it does not.
+ </p>
+ <p>
+ Note that using process registration also ensures that
+ recovery is serialized across applications. That is,
+ only one process at a time has a chance to run
+ recovery. Generally this means that the first process
+ to start up will run recovery, and all other processes
+ will silently not run recovery because it is not
+ needed.
+ </p>
+ <p>
+ To cause your application to register its environment, you specify
+ <span>
+ the <tt class="literal">DB_REGISTER</tt> flag when you open your environment.
+ Note that you must also specify <tt class="literal">DB_RECOVER</tt> or
+ <tt class="literal">DB_RECOVER_FATAL</tt> for your environment open.
+ </span>
+
+
+ If during the open, DB determines that recovery must be run, this indicates the type of
+ recovery that is run. If you do not specify either type of recovery, then no recovery is run if
+ the registration process identifies a need for it. In this case, the environment open simply
+ fails by
+ <span>returning <tt class="literal">DB_RUNRECOVERY</tt>.</span>
+
+ </p>
+ <p>
+ Be aware that there are some limitations/requirements if you want your various processes to
+ coordinate recovery using this registration process:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ There can be only one environment handle per
+ environment per process. In the case of multi-threaded
+ processes, the environment handle must be shared across threads.
+ </p>
+ </li>
+ <li>
+ <p>
+ All processes sharing the environment must use registration. If registration is
+ not uniformly used across all participating processes, then you can see inconsistent results
+ in terms of your application's ability to recognize that recovery must be run.
+ </p>
+ </li>
+ <li>
+ <p>
+ You can not use this mechanism with the <tt class="methodname">failchk()</tt>
+ mechanism
+ described in the next section.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="failchk"></a>Failure Checking</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For very large and robust multi-process applications, the most common way to ensure all the
+ processes are working as intended is to make use of a watchdog process. To assist a watchdog
+ process, DB offers a failure checking mechanism.
+ </p>
+ <p>
+ When a thread of control fails with open environment handles, the result is that there may be
+ resources left locked or corrupted. Other threads of control may encountered these unavailable resources
+ quickly or not at all, depending on data access patterns.
+ </p>
+ <p>
+ In any case, the DB failure checking mechanism allows a watchdog to detect if an environment is
+ unusable as a result of a thread of control failure. It should be called periodically
+ (for example, once a minute) from the watchdog process. If the environment is deemed unusable, then
+ the watchdog process is notified that recovery should be run. It is then up to the watchdog to
+ actually run recovery. It is also the watchdog's responsibility to decide what to do about currently
+ running processes before running recovery. The watchdog could, for example, attempt to
+ gracefully shutdown or kill all relevant processes before running recovery.
+ </p>
+ <p>
+ Note that failure checking need not be run from a separate process, although conceptually that is
+ how the mechanism is meant to be used. This same mechanism could be used in a multi-threaded
+ application that wants to have a watchdog thread.
+ </p>
+ <p>
+ To use failure checking you must:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ <span>
+ Provide an <tt class="function">is_alive()</tt> call back using the
+ <tt class="methodname">DB_ENV-&gt;set_isalive()</tt>
+
+ method.
+ </span>
+
+ DB uses this method to determine whether a specified process and thread
+ is alive when the failure checking is performed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Possibly provide a
+
+ <span>
+ <tt class="literal">thread_id</tt> callback
+ </span>
+
+
+
+ that uniquely identifies a process
+ and thread of control. This
+ <span>callback</span>
+
+ is only necessary if the standard process and thread
+ identification functions for your platform are not sufficient to for use by failure
+ checking. This is rarely necessary and is usually because the thread and/or process ids
+ used by your system cannot fit into an unsigned integer.
+ </p>
+ <p>
+ You provide this callback using the
+ <tt class="methodname">DB_ENV-&gt;set_thread_id()</tt>
+
+ method. See the API reference for this method for more information on when setting a thread
+ id callback might be necessary.
+ </p>
+ </li>
+ <li>
+ <p>
+ Call the
+ <tt class="methodname">DB_ENV-&gt;failchk()</tt>
+
+
+ method periodically. You can do this either periodically (once per minute, for example), or
+ whenever a thread of control exits for your application.
+ </p>
+ <p>
+ If this method determines that a thread of control exited holding read locks, those locks
+ are automatically released. If the thread of control exited with an unresolved transaction,
+ that transaction is aborted. If any other problems exist beyond these such that the
+ environment must be recovered, the method will
+ <span>return <tt class="literal">DB_RUNRECOVERY</tt>.</span>
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Note that this mechanism should not be mixed with the process registration method of multi-process
+ recovery described in the previous section.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="recovery.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="hotfailover.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Recovery Procedures </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Using Hot Failovers</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/autocommit.html b/db/docs/gsg_txn/C/autocommit.html
new file mode 100644
index 000000000..4ae0787f0
--- /dev/null
+++ b/db/docs/gsg_txn/C/autocommit.html
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Auto Commit</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="abortresults.html" title="Aborting a Transaction" />
+ <link rel="next" href="nestedtxn.html" title="Nested Transactions" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Auto Commit</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="autocommit"></a>Auto Commit</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ While transactions are frequently used to provide atomicity to
+ multiple database operations, it is sometimes necessary to perform
+ a single database operation under the control of a transaction.
+ Rather than force you to obtain a transaction, perform the single
+ write operation, and then either commit or abort the transaction,
+ you can automatically group this sequence of events using
+ <span class="emphasis"><em>auto commit</em></span>.
+ </p>
+ <p>
+ To use auto commit:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Open your environment and your databases so that they support
+ transactions. See <a href="enabletxn.html">Enabling Transactions</a>
+ for details.
+ </p>
+ <p>
+ Note that frequently auto commit is used for the environment
+ or database open. To use auto commit for either your
+ environment or database open, specify
+ <tt class="literal">DB_AUTO_COMMIT</tt> to the
+
+ <tt class="methodname">DB_ENV-&gt;set_flags()</tt>
+
+ or
+ <tt class="methodname">DB-&gt;open()</tt>
+
+ method. If you specify auto commit for the environment
+ open, then you do not need to also specify auto commit
+ for the database open.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not provide a transactional handle to the method that is
+ performing the database write operation.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Note that auto commit is not available for cursors. You must always
+ open your cursor using a transaction if you want the cursor's
+ operations to be transactional protected. See
+ <a href="txncursor.html">Transactional Cursors</a> for details on using
+ transactional cursors.
+ </p>
+ <p>
+ For example, the following uses auto commit to perform the database write operation:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DBT key, data;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+ const char *keystr =&quot;thekey&quot;;
+ const char *datastr = &quot;thedata&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* Create the environment if it does
+ * not already exist. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_INIT_LOCK | /* Initialize locking. */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL; /* Initialize the in-memory cache. */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ /*
+ * Open the database. Note that we are using auto commit for the open,
+ * so the database is able to support transactions.
+ */
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+ /* Prepare the DBTs */
+ memset(&amp;key, 0, sizeof(DBT));
+ memset(&amp;data, 0, sizeof(DBT));
+
+ key.data = &amp;keystr;
+ key.size = strlen(keystr) + 1;
+ data.data = &amp;datastr;
+ data.size = strlen(datastr) + 1;
+
+
+ /*
+ * Perform the database write. A txn handle is not provided, but the
+ * database support auto commit, so auto commit is used for the write.
+ */
+ ret = dbp-&gt;put(dbp, NULL, &amp;key, &amp;data, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database put failed.&quot;);
+ goto err;
+ }
+
+err:
+ /* Close the database */
+ if (dbp != NULL) {
+ ret_c = dbp-&gt;close(dbp, 0);
+ if (ret_c != 0) {
+ envp-&gt;err(envp, ret_c, &quot;Database close failed.&quot;);
+ ret = ret_c
+ }
+ }
+
+
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Aborting a Transaction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Nested Transactions</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/backuprestore.html b/db/docs/gsg_txn/C/backuprestore.html
new file mode 100644
index 000000000..f9ae32bd7
--- /dev/null
+++ b/db/docs/gsg_txn/C/backuprestore.html
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Backup Procedures</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="next" href="recovery.html" title="Recovery Procedures" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Backup Procedures</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="filemanagement.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="backuprestore"></a>Backup Procedures</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ <span class="emphasis"><em>Durability</em></span> is an important part of your
+ transactional guarantees. It means that once a transaction has been
+ successfully committed, your application will always see the results of that
+ transaction.
+ </p>
+ <p>
+ Of course, no software algorithm can guarantee durability in the face of physical data loss. Hard drives
+ can fail, and if you have not copied your data to locations other than your primary disk drives,
+ then you will lose data when those drives fail. Therefore, in order to truly obtain a durability
+ guarantee, you need to ensure that any data stored on disk is backed up to secondary or alternative storage,
+ such as secondary disk drives, or offline tapes.
+ </p>
+ <p>
+ There are three different types of backups that you can
+ perform with DB databases and log files. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Offline backups
+ </p>
+ <p>
+ This type of backup is perhaps the easiest to perform as it
+ involves simply copying database and log files to an
+ offline storage area. It also gives you a snapshot of the
+ database at a fixed, known point in time. However, you
+ cannot perform this type of a backup while you are performing
+ writes to the database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Hot backups
+ </p>
+ <p>
+ This type of backup gives you a snapshot of your database.
+ Since your application can be writing to the database at the time that the
+ snapshot is being taken, you do not necessarily know what
+ the exact state of the database is for that given snapshot.
+ </p>
+ </li>
+ <li>
+ <p>
+ Incremental backups
+ </p>
+ <p>
+ This type of backup refreshes a previously performed backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Once you have performed a backup, you can
+ perform <span class="emphasis"><em>catastrophic recovery</em></span> to restore
+ your databases from the backup. See
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ for more information.
+ </p>
+ <p>
+ Note that you can also maintain a hot failover. See
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ for more information.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="copyutilities"></a>About Unix Copy Utilities</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ If you are copying database files you must copy databases atomically,
+ in multiples 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 because 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>
+ On some platforms (most notably, some releases of Solaris), the copy utility (<tt class="literal">cp</tt>) was
+ implemented using the <tt class="function">mmap()</tt> system call rather than the
+ <tt class="function">read()</tt> system call. Because <tt class="function">mmap()</tt> did not make the same
+ guarantee of read atomicity as did <tt class="function">read()</tt>, the <tt class="literal">cp</tt> utility
+ could create corrupted copies of the databases.
+ </p>
+ <p>
+ Also, some platforms have implementations of the <tt class="literal">tar</tt> utility that performs 10KB block
+ reads by default. Even when an output block size is specified, the utility will still not read the
+ underlying databases in multiples of the specified block size. Again, the result can be a corrupted backup.
+ </p>
+ <p>
+ To fix these problems, use the <tt class="literal">dd</tt> utility instead of <tt class="literal">cp</tt> or
+ <tt class="literal">tar</tt>. When you use <tt class="literal">dd</tt>, make sure you specify a block size that is
+ equal to, or an even multiple of, your database page size. Finally, if you plan to use a system
+ utility to copy database files, you may want to use a system call trace utility (for example,
+ <tt class="literal">ktrace</tt> or <tt class="literal">truss</tt>) to make sure you are not using a I/O size that is
+ smaller than your database page size. You can also use these utilities to make sure the system utility is
+ not using a system call other than <tt class="function">read()</tt>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="standardbackup"></a>Offline Backups</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To create an offline backup:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Commit or abort all on-going transactions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Pause all database writes.
+ </p>
+ </li>
+ <li>
+ <p>
+ Force a checkpoint. See
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy all your database files to the backup location.
+ <span>
+ Note that you can simply copy all of the database
+ files, or you can determine which database files
+ have been written during the lifetime of the current
+ logs. To do this, use either the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;log_archive()</tt>
+
+ method with the <tt class="literal">DB_ARCH_DATA</tt>
+ option,
+ </span>
+
+
+ or use the <span><b class="command">db_archive</b></span>
+ command with the <tt class="literal">-s</tt> option.
+ </span>
+ </p>
+ <p>
+ However, be aware that backing up just the modified databases only works if you have all of your
+ log files. If you have been removing log files for any reason then using
+ <span>
+ <tt class="methodname">log_archive()</tt>
+ </span>
+
+
+ can result in an
+ unrecoverable backup because you might not be notified of a database file that was modified.
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy the <span class="emphasis"><em>last</em></span> log file to your backup location.
+ Your log files are named
+ <tt class="literal">log.<span class="emphasis"><em>xxxxxxxxxx</em></span></tt>,
+ where <span class="emphasis"><em>xxxxxxxxxx</em></span> is a
+ sequential number. The last log file is the file
+ with the highest number.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="hotbackup"></a>Hot Backup</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To create a hot backup, you do not have to stop database
+ operations. Transactions may be on-going and you can be writing
+ to your database at the time of the backup. However, this means
+ that you do not know exactly what the state of your database is
+ at the time of the backup.
+ </p>
+ <p>
+ You can use the <span><b class="command">db_hotbackup</b></span> command line utility to create a hot backup for you. This
+ utility will (optionally) run a checkpoint and the copy all necessary files to a target directory.
+ </p>
+ <p>
+ Alternatively, you can manually create a hot backup as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Copy all your database files to the backup location.
+ <span>
+ Note that you can simply copy all of the database
+ files, or you can determine which database files
+ have been written during the lifetime of the current
+ logs. To do this, use either the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;log_archive()</tt>
+
+ with the <tt class="literal">DB_ARCH_DATA</tt>
+ option,
+ </span>
+
+
+ or use the <span><b class="command">db_archive</b></span>
+ command with the <tt class="literal">-s</tt> option.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy all logs to your backup location.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ It is important to copy your database files <span class="emphasis"><em>and
+ then</em></span> your logs. In this way,
+ you can complete or roll back any database operations that were only partially completed
+ when you copied the databases.
+ </p>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="incrementalbackups"></a>Incremental Backups</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Once you have created a full backup (that is, either a
+ offline or hot backup), you can create incremental backups.
+ To do this, simply copy all of your currently existing log
+ files to your backup location.
+ </p>
+ <p>
+ Incremental backups do not require you to run a checkpoint
+ or to cease database write operations.
+ </p>
+ <p>
+ When you are working with incremental backups, remember
+ that the greater the number of log files contained in
+ your backup, the longer recovery will take.
+ You should run full backups
+ on some interval, and then do incremental backups on a shorter interval.
+ How frequently you need to run a full backup
+ is determined by the rate at which your databases change and
+ how sensitive your application is to lengthy recoveries
+ (should one be required).
+ </p>
+ <p>
+ You can also shorten recovery time by running recovery against the backup as you take each incremental
+ backup. Running recovery as you go means that there will be less work for DB to do if you should
+ ever need to restore your environment from the backup.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="filemanagement.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 5. Managing DB Files </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recovery Procedures</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/blocking_deadlocks.html b/db/docs/gsg_txn/C/blocking_deadlocks.html
new file mode 100644
index 000000000..cc7712aeb
--- /dev/null
+++ b/db/docs/gsg_txn/C/blocking_deadlocks.html
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Locks, Blocks, and Deadlocks</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="next" href="lockingsubsystem.html" title="The Locking Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Locks, Blocks, and Deadlocks</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnconcurrency.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="lockingsubsystem.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="blocking_deadlocks"></a>Locks, Blocks, and Deadlocks</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is important to understand how locking works in a
+ concurrent application before continuing with a description of
+ the concurrency mechanisms DB makes available to you.
+ Blocking and deadlocking have important performance implications
+ for your application. Consequently, this section provides a
+ fundamental description of these concepts, and how they affect
+ DB operations.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="locks"></a>Locks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When one thread of control wants to obtain access to an
+ object, it requests a <span class="emphasis"><em>lock</em></span> for that
+ object. This lock is what allows DB to provide your
+ application with its transactional isolation guarantees by
+ ensuring that:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ no other thread of control can read that object (in
+ the case of an exclusive lock), and
+ </p>
+ </li>
+ <li>
+ <p>
+ no other thread of control can modify that object
+ (in the case of an exclusive or non-exclusive lock).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="lockresources"></a>Lock Resources</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When locking occurs, there are conceptually three resources
+ in use:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ The locker.
+ </p>
+ <p>
+ This is the thing that holds the lock. In a
+ transactional application, the locker is a
+ transaction handle.
+ <span>
+ For non-transactional operations, the locker is a cursor or a
+ <span>DB</span>
+
+
+
+ handle.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ The lock.
+ </p>
+ <p>
+ This is the actual data structure that locks
+ the object. In DB, a locked
+ object structure in the lock manager
+ is representative of the object that
+ is locked.
+ </p>
+ </li>
+ <li>
+ <p>
+ The locked object.
+ </p>
+ <p>
+ The thing that your application
+ actually wants to lock.
+ In a DB
+ application, the locked object is usually a
+ <span>
+ database page, which in turn contains
+ multiple database entries (key and data).
+ <span>
+ However, for Queue databases,
+ individual database records are locked.
+ </span>
+
+ </span>
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ You can configure how many total lockers, locks,
+ and locked objects your
+ application is allowed to support. See
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ for details.
+ </p>
+ <p>
+ The following figure shows a transaction handle,
+ <tt class="literal">Txn A</tt>, that is holding a lock on
+ database
+ <span>page</span>
+
+ <tt class="literal">002</tt>. In this graphic, <tt class="literal">Txn
+ A</tt> is the locker, and the locked object is
+ <span>page</span>
+
+ <tt class="literal">002</tt>. Only a single lock is in use
+ in this operation.
+ </p>
+ <div class="mediaobject">
+ <img src="simplelock.jpg" />
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="locktypes"></a>Types of Locks</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB applications support both exclusive and
+ non-exclusive locks. <span class="emphasis"><em>Exclusive
+ locks</em></span> are granted when a
+ locker wants to write to an object. For this reason,
+ exclusive locks are also sometimes called
+ <span class="emphasis"><em>write locks</em></span>.
+ </p>
+ <p>
+ An exclusive lock prevents any other locker from
+ obtaining any sort of a lock on the object. This
+ provides isolation by ensuring that no other locker can
+ observe or modify an exclusively locked object until the locker is done
+ writing to that object.
+ </p>
+ <p>
+ <span class="emphasis"><em>Non-exclusive locks</em></span> are granted
+ for read-only access. For this reason, non-exclusive
+ locks are also sometimes called <span class="emphasis"><em>read
+ locks</em></span>. Since multiple lockers can
+ simultaneously hold read locks on the same
+ object, read locks are also
+ sometimes called <span class="emphasis"><em>shared locks</em></span>.
+ </p>
+ <p>
+ A non-exclusive lock prevents any other locker from
+ modifying the locked object while the locker is still
+ reading the object. This is how transactional cursors are able to
+ achieve repeatable reads; by default, the
+ cursor's transaction holds
+ a read lock on any object that the cursor has examined until
+ such a time as the transaction is committed
+ or aborted.
+ <span>
+ You can avoid these read locks by using
+ snapshot isolation. See <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ for details.
+ </span>
+ </p>
+ <p>
+ In the following figure, <tt class="literal">Txn A</tt> and
+ <tt class="literal">Txn B</tt> are both holding read locks on
+ <span>page</span>
+
+ <tt class="literal">002</tt>, while <tt class="literal">Txn C</tt>
+ is holding a write lock on
+ <span>page</span>
+
+ <tt class="literal">003</tt>:
+ </p>
+ <div class="mediaobject">
+ <img src="rwlocks1.jpg" />
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="locklifetime"></a>Lock Lifetime</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A locker holds its locks until such a time as it does
+ not need the lock any more. What this means is:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ A transaction holds any locks that it obtains
+ until the transaction is committed or aborted.
+ </p>
+ </li>
+ <li>
+ <p>
+ All non-transaction operations hold locks
+ until such a time as the operation is completed.
+ For cursor operations, the lock is held until the cursor is moved to a new position or
+ closed.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="blocks"></a>Blocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Simply put, a thread of control is blocked when it attempts
+ to obtain a lock, but that attempt is denied because some
+ other thread of control holds a conflicting lock.
+ Once blocked, the thread of control is temporarily unable
+ to make any forward progress until the requested lock is
+ obtained or the operation requesting the lock is
+ abandoned.
+ </p>
+ <p>
+ Be aware that when we talk about blocking, strictly
+ speaking the thread is not what is attempting to obtain the
+ lock. Rather, some object within the thread (such as a
+ cursor) is attempting to obtain the
+ lock. However, once a locker attempts to
+ obtain a lock, the entire thread of control must pause until the lock
+ request is in some way resolved.
+ </p>
+ <p>
+ For example, if <tt class="literal">Txn A</tt> holds a write lock (an exclusive
+ lock) on
+ <span>object</span>
+
+ 002, then if <tt class="literal">Txn B</tt> tries to obtain a read <span class="emphasis"><em>or</em></span> write lock on
+ that
+ <span>object,</span>
+
+ the thread of control in which <tt class="literal">Txn
+ B</tt> is running
+ is blocked:
+ </p>
+ <div class="mediaobject">
+ <img src="writeblock.jpg" />
+ </div>
+ <p>
+ However, if <tt class="literal">Txn A</tt> only holds a read
+ lock (a shared lock) on
+ <span>object</span>
+
+ <tt class="literal">002</tt>, then only those handles that attempt to obtain a
+ write lock on that
+ <span>object</span>
+
+ will block.
+ </p>
+ <div class="mediaobject">
+ <img src="readblock.jpg" />
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ The previous description describes DB's default
+ behavior when it cannot obtain a lock. It is
+ possible to configure DB transactions so that
+ they will not block. Instead, if a lock is
+ unavailable, the application is immediately notified of a
+ deadlock situation. See <a href="txnnowait.html">No Wait on Blocks</a>
+ for more information.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="blockperformance"></a>Blocking and Application Performance</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Multi-threaded
+ <span>
+ and multi-process
+ </span>
+ applications typically perform better than simple
+ single-threaded applications because the
+ application can perform one part of its workload
+ (updating
+ <span>a database record, </span>
+
+ for example) while it is waiting for some other
+ lengthy operation to complete (performing disk or
+ network I/O, for example). This performance
+ improvement is particularly noticeable if you use
+ hardware that offers multiple CPUs, because the threads
+ <span>
+ and processes
+ </span>
+ can run simultaneously.
+ </p>
+ <p>
+ That said, concurrent applications can see reduced
+ workload throughput if their threads of control are
+ seeing a large amount of lock contention. That is,
+ if threads are blocking on lock requests, then that
+ represents a performance penalty for your
+ application.
+ </p>
+ <p>
+ Consider once again the previous diagram of a blocked write lock request.
+ In that diagram, <tt class="literal">Txn C</tt> cannot
+ obtain its requested write lock because
+ <tt class="literal">Txn A</tt> and <tt class="literal">Txn
+ B</tt> are both already holding read locks on
+ the requested
+ <span>object.</span>
+
+ In this case, the thread in which
+ <tt class="literal">Txn C</tt> is running will pause until
+ such a time as <tt class="literal">Txn C</tt> either
+ obtains its write lock, or the operation
+ that is requesting the lock is abandoned.
+ The fact that <tt class="literal">Txn
+ C</tt>'s thread has temporarily halted all
+ forward progress represents a performance penalty
+ for your application.
+ </p>
+ <p>
+ Moreover, any read locks that are requested while
+ <tt class="literal">Txn C</tt> is waiting for its write
+ lock will also block until such a time as
+ <tt class="literal">Txn C</tt> has obtained and
+ subsequently released its write lock.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="blockavoidance"></a>Avoiding Blocks</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Reducing lock contention is an important part of
+ performance tuning your concurrent DB
+ application. Applications that have multiple
+ threads of control obtaining exclusive (write)
+ locks are prone to contention issues. Moreover, as
+ you increase the numbers of lockers and as you
+ increase the time that a lock is held, you increase
+ the chances of your application seeing lock contention.
+ </p>
+ <p>
+ As you are designing your application, try to do
+ the following in order to reduce lock contention:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Reduce the length of time your application
+ holds locks.
+ </p>
+ <p>
+ Shorter lived transactions will result in
+ shorter lock lifetimes, which will in turn
+ help to reduce lock contention.
+ </p>
+ <p>
+ In addition, by default transactional cursors hold read
+ locks until such a time as the transaction is completed.
+ For this reason, try to
+ minimize the time you keep
+ transactional cursors
+ opened, or reduce your isolation
+ levels &#8211; see below.
+ </p>
+ </li>
+ <li>
+ <p>
+ If possible, access heavily accessed (read
+ or write) items toward the end of the
+ transaction. This reduces the amount of
+ time that a heavily used
+ <span>
+ page
+ </span>
+
+ is locked by the transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reduce your application's isolation
+ guarantees.
+ </p>
+ <p>
+ By reducing your isolation guarantees, you
+ reduce the situations in which a lock can
+ block another lock. Try using uncommitted reads
+ for your read operations in order to
+ prevent a read lock being blocked by a
+ write lock.
+ </p>
+ <p>
+ In addition, for cursors you can use degree
+ 2 (read committed) isolation, which causes
+ the cursor to release its read locks as
+ soon as it is done reading the record (as
+ opposed to holding its read locks until the
+ transaction ends).
+ </p>
+ <p>
+ Be aware that reducing your
+ isolation guarantees can have
+ adverse consequences for your
+ application. Before deciding
+ to reduce your isolation, take
+ care to examine your
+ application's isolation
+ requirements.
+ For information on isolation
+ levels, see
+ <a href="isolation.html">Isolation</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Consider your data access patterns.
+ </p>
+ <p>
+ Depending on the nature of your application,
+ this may be something that you can not
+ do anything about. However, if it is
+ possible to create your threads such that
+ they operate only on non-overlapping
+ portions of your database, then you can
+ reduce lock contention because your
+ threads will rarely (if ever) block on one another's
+ locks.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ It is possible to configure DB's transactions
+ so that they never wait on blocked lock requests.
+ Instead, if they are blocked on a lock request,
+ they will notify the application of a deadlock (see
+ the next section).
+ </p>
+ <p>
+ You configure this behavior on a transaction by
+ transaction basis. See <a href="txnnowait.html">No Wait on Blocks</a> for more information.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="deadlocks"></a>Deadlocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A deadlock occurs when two or more threads of control are
+ blocked, each waiting on a resource held by the other
+ thread. When this happens, there is no
+ possibility of the threads ever making forward progress
+ unless some outside agent takes action to break the
+ deadlock.
+ </p>
+ <p>
+ For example, if
+ <tt class="literal">Txn A</tt> is
+ blocked by <tt class="literal">Txn B</tt> at the same time
+ <tt class="literal">Txn B</tt> is blocked by <tt class="literal">Txn
+ A</tt> then the threads of control containing
+ <tt class="literal">Txn A</tt> and <tt class="literal">Txn B</tt> are
+ deadlocked; neither thread can make
+ any forward progress because neither thread will ever release the lock
+ that is blocking the other thread.
+ </p>
+ <div class="mediaobject">
+ <img src="deadlock.jpg" />
+ </div>
+ <p>
+ When two threads of control deadlock, the only
+ solution is to have a mechanism external to the two threads
+ capable of recognizing the deadlock and notifying at least
+ one thread that it is in a deadlock situation.
+ Once notified, a thread of
+ control must abandon the attempted operation in order to
+ resolve the deadlock.
+
+ <span>
+ DB's locking subsystem offers a deadlock notification
+ mechanism. See
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ for more information.
+ </span>
+
+
+ </p>
+ <p>
+ Note that when one locker in a thread of control is blocked
+ waiting on a lock held by another locker in that same
+ thread of the control, the thread is said to be
+ <span class="emphasis"><em>self-deadlocked</em></span>.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="deadlockavoidance"></a>Deadlock Avoidance</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The things that you do to avoid lock contention also
+ help to reduce deadlocks (see <a href="blocking_deadlocks.html#blockavoidance">Avoiding Blocks</a>).
+
+ <span>
+ Beyond that, you can also do the following in order to
+ avoid deadlocks:
+ </span>
+
+
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure all threads access data in the same
+ order as all other threads. So long as threads
+ lock database pages
+ in the same basic order, there is no
+ possibility of a deadlock (threads can still
+ block, however).
+ </p>
+ <p>
+ Be aware that if you are using secondary databases (indices), it is not possible to obtain
+ locks in a consistent order because you cannot predict the order in which locks are obtained
+ in secondary databases. If you are writing a concurrent application and you are using
+ secondary databases, you must be prepared to handle deadlocks.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are using BTrees in which you are
+ constantly adding and then deleting data, turn
+ Btree reverse split off. See
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Declare a read/modify/write lock for those
+ situations where you are reading a record in
+ preparation of modifying and then writing the
+ record. Doing this causes DB to give your
+ read operation a write lock. This means that no
+ other thread of control can share a read lock
+ (which might cause contention), but it also
+ means that the writer thread will not have to
+ wait to obtain a write lock when it is ready to
+ write the modified data back to the database.
+ </p>
+ <p>
+ For information on declaring
+ read/modify/write locks, see
+ <a href="readmodifywrite.html">Read/Modify/Write</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnconcurrency.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="lockingsubsystem.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 4. Concurrency </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> The Locking Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/deadlock.jpg b/db/docs/gsg_txn/C/deadlock.jpg
new file mode 100644
index 000000000..0995a84d8
--- /dev/null
+++ b/db/docs/gsg_txn/C/deadlock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/C/enabletxn.html b/db/docs/gsg_txn/C/enabletxn.html
new file mode 100644
index 000000000..719fba4bc
--- /dev/null
+++ b/db/docs/gsg_txn/C/enabletxn.html
@@ -0,0 +1,928 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 2. Enabling Transactions</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="perftune-intro.html" title="Performance Tuning" />
+ <link rel="next" href="envopen.html" title="Opening a Transactional Environment and&#10; Database&#10; &#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 2. Enabling Transactions</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="perftune-intro.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="envopen.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="enabletxn"></a>Chapter 2. Enabling Transactions</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="enabletxn.html#environments">Environments</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#filenaming">File Naming</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#errorsupport">Error Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#sharedmemory">Shared Memory Regions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#security">Security Considerations</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="envopen.html">Opening a Transactional Environment and
+ Database
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ In order to use transactions with your application, you must turn them
+ on. To do this you must:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Use an
+ environment (see <a href="enabletxn.html#environments">Environments</a> for details).
+ </p>
+ </li>
+ <li>
+ <p>
+ Turn on transactions for your environment.
+
+
+
+ <span>
+ You do this by providing the <tt class="literal">DB_INIT_TXN</tt>
+ flag to the
+
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+ method.
+ </span>
+
+ <span>
+ Note that initializing the transactional subsystem implies that
+ the logging subsystem is also initialized. Also, note that
+ if you do not initialize transactions when you first create
+ your environment, then you cannot use transactions for that
+ environment after that. This is because DB
+ allocates certain structures needed for transactional
+ locking that are not available if the environment is
+ created without transactional support.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the in-memory cache by
+ <span>
+ passing the <tt class="literal">DB_INIT_MPOOL</tt>
+ flag to the
+
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+ method.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the locking subsystem. This is what provides locking for concurrent applications. It also is used
+ to perform deadlock detection. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ <p>
+ You initialize the locking subsystem by
+ <span>
+ passing the <tt class="literal">DB_INIT_LOCK</tt>
+ flag to the
+
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+ method.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the logging subsystem. While this is enabled by
+ default for transactional applications, we suggest that
+ you explicitly initialize it anyway for the purposes of code readability. The logging
+ subsystem is what provides your transactional application its durability guarantee, and it is required for
+ recoverability purposes. See <a href="filemanagement.html">Managing DB Files</a>
+ for more information.
+ </p>
+ <p>
+ You initialize the logging subsystem by
+ <span>
+ passing the <tt class="literal">DB_INIT_LOG</tt>
+ flag to the
+
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+ method.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction-enable your databases. You do this by
+
+
+ <span>
+ encapsulating the database open in a transaction.
+ </span>
+
+
+
+ <span>
+ Note that the common practice is for auto commit to be used to
+ transaction-protect the database open. To use auto-commit, you
+ must still enable transactions as described here, but you do
+ not have to explicitly use a transaction when you open your
+ database. An example of this is given in the next section.
+ </span>
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="environments"></a>Environments</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For simple DB applications, environments are optional. However, in
+ order to transaction protect your database operations, you must use an
+ environment.
+ </p>
+ <p>
+ An <span class="emphasis"><em>environment</em></span>, represents an
+ encapsulation of one or more databases and any associated log and
+ region files. They are used to support multi-threaded
+ and multi-process applications by allowing different threads of
+ control to share the in-memory cache, the locking tables, the
+ logging subsystem, and the file namespace. By sharing these things,
+ your concurrent application is more efficient than if each thread
+ of control had to manage these resources on its own.
+ </p>
+ <p>
+ By default all DB databases are backed by files on disk. In
+ addition to these files, transactional DB applications create
+ logs that are also by default stored on disk (they can optionally
+ be backed using shared memory). Finally, transactional
+ DB applications also create and use shared-memory regions that
+ are also typically backed by the filesystem. But like databases and
+ logs, the regions can be maintained strictly in-memory if your
+ application requires it. For an example of an application that
+ manages all environment files in-memory, see
+ <span><a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>.</span>
+
+
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="filenaming"></a>File Naming</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to operate, your DB application must be able to
+ locate its database files, log files, and region files. If these
+ are stored in the filesystem, then you must tell DB where
+ they are located (a number of mechanisms exist that allow you to
+ identify the location of these files &#8211; see below). Otherwise,
+ by default they are located in the current working directory.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="envhome"></a>Specifying the Environment Home Directory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The environment home directory is used to determine where
+ DB files are located. Its location
+ is identified using one of the following mechanisms, in the
+ following order of priority:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ If no information is given as to where to put the
+ environment home, then the current working
+ directory is used.
+ </p>
+ </li>
+ <li>
+ <p>
+ If a home directory is specified on the
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+
+
+ <span>method,</span>
+
+ then that location is always used for the environment
+ home.
+ </p>
+ </li>
+ <li>
+ <p>
+ If a home directory is not supplied to
+ <span><tt class="methodname">DB_ENV-&gt;open()</tt>, </span>
+
+
+ then the directory identified by the <tt class="literal">DB_HOME</tt> environment variable
+ is used <span class="emphasis"><em>if</em></span> you specify
+ <span>
+ either the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags to the
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+
+ method. Both flags allow you to identify the
+ path to the environment's home directory
+ using the <tt class="literal">DB_HOME</tt> environment variable. However,
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> is honored only if the
+ process is run with root or administrative privileges.
+ </span>
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="filelocation"></a>Specifying File Locations</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, all DB files are created relative to the environment
+ home directory. For example, suppose your environment home is in
+ <tt class="literal">/export/myAppHome</tt>. Also suppose you name your database
+ <span><tt class="literal">data/myDatabase.db</tt>.</span>
+
+ Then in this case, the database is placed in:
+ <span><tt class="literal">/export/myAppHome/data/myDatabase.db</tt>.</span>
+
+ </p>
+ <p>
+ That said, DB always defers to absolute pathnames.
+ This means that if you provide an absolute filename when you
+ name your database, then that file is <span class="emphasis"><em>not</em></span>
+ placed relative to the environment home directory. Instead, it
+ is placed in the exact location that you specified for the
+ filename.
+ </p>
+ <p>
+ On UNIX systems, an absolute pathname is a name that begins with a
+ forward slash ('/'). On Windows systems, an absolute pathname is a
+ name that begins with one of the following:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ A backslash ('\').
+ </p>
+ </li>
+ <li>
+ <p>
+ Any alphabetic letter, followed by a colon (':'), followed
+ by a backslash ('\').
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Try not to use absolute path names for your
+ environment's files. Under certain recovery scenarios, absolute path names can
+ render your environment unrecoverable. This occurs if you are attempting to recover
+ you environment on a system that does not support the absolute path name that you used.
+ </p>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="splittingdata"></a>Identifying Specific File Locations</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described in the previous sections, DB will place all its
+ files in or relative to the environment home directory.
+ You can also cause a
+ specific database file to be placed in a particular location by
+ using an absolute path name for its name. In this
+ situation, the environment's home directory is not
+ considered when naming the file.
+ </p>
+ <p>
+ It is frequently desirable to place database, log, and region files on separate
+ disk drives. By spreading I/O across multiple drives, you
+ can increase parallelism and improve throughput.
+ Additionally, by placing log files and database files on
+ separate drives, you improve your application's
+ reliability by providing your application with a greater
+ chance of surviving a disk failure.
+ </p>
+ <p>
+ You can cause DB's files to be placed in specific
+ locations using the following mechanisms:
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>File Type</th>
+ <th>To Override</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>database files</td>
+ <td>
+ <p>
+ You can cause database files to be created
+ in a directory other than the
+ environment home by using the
+ <tt class="methodname">DB_ENV-&gt;set_data_dir()</tt>
+
+
+ method.
+ The directory identified
+ here must exist. If a relative path is
+ provided, then the directory location is
+ resolved relative to the environment's home
+ directory.
+ </p>
+ <p>
+ This method modifies the directory
+ used for database files created and managed by
+ a single environment handle; it does not
+ configure the entire environment.
+ <span>This
+ method may not be called after the
+ environment has been opened.
+ </span>
+ </p>
+ <p>
+ You can also set a default data location that is used by
+ the entire environment by using the
+ <tt class="literal">set_data_dir</tt> parameter
+ in the environment's <tt class="literal">DB_CONFIG</tt> file.
+ Note that the <tt class="literal">set_data_dir</tt>
+ parameter overrides any value set by the
+ <tt class="methodname">DB_ENV-&gt;set_data_dir()</tt>
+
+
+ method.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>Log files</td>
+ <td>
+ <p>
+ You can cause log files to be created
+ in a directory other than the environment home
+ directory by using the
+ <tt class="methodname">DB_ENV-&gt;set_lg_dir()</tt>
+
+
+ method. The directory identified
+ here must exist. If a relative path is
+ provided, then the directory location is
+ resolved relative to the environment's home
+ directory.
+ </p>
+ <p>
+ This method modifies the directory
+ used for database files created and managed by
+ a single environment handle; it does not
+ configure the entire environment.
+ <span>This
+ method may not be called after the
+ environment has been opened.
+ </span>
+ </p>
+ <p>
+ You can also set a default log file location that is used by
+ the entire environment by using the
+ <tt class="literal">set_lg_dir</tt> parameter
+ in the environment's <tt class="literal">DB_CONFIG</tt> file.
+ Note that the <tt class="literal">set_lg_dir</tt>
+ parameter overrides any value set by the
+ <tt class="methodname">DB_ENV-&gt;set_lg_dir()</tt>
+
+
+ method.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>Region files</td>
+ <td>
+ If backed by the filesystem, region
+ files are always placed in the environment home
+ directory.
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p>
+ Note that the <tt class="literal">DB_CONFIG</tt> must reside in the
+ environment home directory. Parameters are specified in it one
+ parameter to a line. Each parameter is followed by a space,
+ which is followed by the parameter value. For example:
+ </p>
+ <pre class="programlisting"> set_data_dir /export1/db/env_data_files </pre>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="errorsupport"></a>Error Support</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To simplify error handling and to aid in application debugging, environments offer several useful
+ methods.
+
+ <span>Note that many of these
+ methods are identical to the error handling methods available for the
+ <span>DB</span>
+
+
+ <span>structure.</span>
+
+
+ </span>
+
+ They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="methodname">set_errcall()</tt>
+
+ </p>
+ <p>
+ Defines the function that is called when an error message is
+ issued by DB. The error prefix and message are passed to
+ this callback. It is up to the application to display this
+ information correctly.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">set_errfile()</tt>
+ </p>
+ <p>
+ Sets the C library <tt class="literal">FILE *</tt> to be used for
+ displaying error messages issued by the DB library.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">set_errpfx()</tt>
+
+ </p>
+ <p>
+ Sets the prefix used to for any error messages issued by the
+ DB library.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">err()</tt>
+ </p>
+ <p>
+ Issues an error message based upon a DB error code a message text that you supply.
+ The error message is sent to the
+ callback function as defined by <tt class="methodname">set_errcall()</tt>.
+ If that method has not been used, then the error message is sent to the
+ file defined by
+ <span><tt class="methodname">set_errfile()</tt>.</span>
+
+ If none of these methods have been used, then the error message is sent to
+ standard error.
+ </p>
+ <p>
+ The error message consists of the prefix string
+ (as defined by <tt class="methodname">set_errprefix()</tt>),
+ an optional <tt class="literal">printf</tt>-style formatted message,
+ the DB error message associated with the supplied error code,
+ and a trailing newline.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">errx()</tt>
+ </p>
+ <p>
+ Behaves identically to <tt class="methodname">err()</tt> except
+ that you do not provide the DB error code and so
+ the DB message text is not displayed.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ In addition, you can use the <tt class="function">db_strerror()</tt>
+ function to directly return the error string that corresponds to a
+ particular error number. For more information on the
+ <tt class="function">db_strerror()</tt> function, see the <tt class="literal">Error Returns</tt>
+ section of the <i class="citetitle">Getting Started with Berkeley DB</i> guide.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sharedmemory"></a>Shared Memory Regions</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The subsystems that you enable for an environment (in our case,
+ transaction, logging, locking, and the memory pool)
+ are described by one or more regions. The regions contain all of the
+ state information that needs to be shared among threads and/or
+ processes using the environment.
+ </p>
+ <p>
+ Regions may be backed by the file system, by heap memory, or by
+ system shared memory.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="filebackedregions"></a>Regions Backed by Files</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, shared memory regions are created as files in the environment's
+ home directory (<span class="emphasis"><em>not</em></span> the environment's data
+ directory). If it is available, the POSIX <tt class="literal">mmap</tt>
+ interface is used to map these files into your application's
+ address space. If <tt class="literal">mmap</tt>
+ is not available, then the UNIX <tt class="literal">shmget</tt> interfaces
+ are used instead (again, if they are available).
+ </p>
+ <p>
+ In this default case, the region files are named
+ <tt class="literal">__db.###</tt>
+ (for example, <tt class="literal">__db.001</tt>, <tt class="literal">__db.002</tt>,
+ and so on).
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="heapbackedregions"></a>Regions Backed by Heap Memory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If heap memory is used to back your shared memory regions,
+ the environment may only be
+ accessed by a single process, although that process may be
+ multi-threaded. In this case, the regions are managed only in
+ memory, and they are not written to the filesystem. You
+ indicate that heap memory is to be used for the region files by
+ specifying
+ <span>
+ <tt class="literal">DB_PRIVATE</tt> to the
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+
+ method.
+ </span>
+
+
+
+ </p>
+ <p>
+ (For an example of an entirely in-memory transactional
+ application, see
+ <span>
+ <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>.)
+ </span>
+
+
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="systembackedregions"></a>Regions Backed by System Memory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Finally, you can cause system memory to be used for your
+ regions instead of memory-mapped files. You do this by providing
+ <span>
+ <tt class="literal">DB_SYSTEM_MEM</tt> to the
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+
+ method.
+ </span>
+
+
+ </p>
+ <p>
+ When region files are backed by system memory, DB creates a
+ single file in the environment's home directory. This file
+ contains information necessary to identify the system shared
+ memory in use by the environment. By creating this file, DB
+ enables multiple processes to share the environment.
+ </p>
+ <p>
+ The system memory that is used is architecture-dependent. For
+ example, on systems supporting X/Open-style shared memory
+ interfaces, such as UNIX systems, the <tt class="literal">shmget(2)</tt>
+ and related System V IPC interfaces are used.
+
+ <span>
+
+ 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
+ environments, so that the number of segments created does not
+ grow without bounds. See the
+
+ <tt class="methodname">DB_ENV-&gt;set_shm_key()</tt>
+
+
+ method for more information.
+ </span>
+ </p>
+ <p>
+ On Windows platforms, the use of system memory for the region files
+ 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 from files, which may cause problems when an environment
+ is accessed by multiple processes running as different users. See
+ <a href="" target="_top">Windows notes</a>
+ or more information.
+ </p>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="security"></a>Security Considerations</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When using environments, there are some security considerations to
+ keep in mind:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Database environment permissions
+ </p>
+ <p>
+ The directory used for the environment
+ should have its permissions set to ensure that files in the
+ environment are not accessible to users without appropriate
+ permissions. Applications that add to the user's permissions
+ (for example, UNIX <tt class="literal">setuid</tt> or
+ <tt class="literal">setgid</tt> applications), must be
+ carefully checked to not permit illegal use of those
+ permissions such as general file access in the environment
+ directory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Environment variables
+ </p>
+ <p>
+ Setting
+
+ <span>
+ the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags
+ </span>
+
+
+ so that environment variables can be used during file naming
+ can be dangerous. Setting those flags in DB
+ applications with additional permissions (for example, UNIX
+ <tt class="literal">setuid</tt> or <tt class="literal">setgid</tt>
+ applications) could potentially allow users
+ to read and write databases to which they would not normally
+ have access.
+ </p>
+ <p>
+ For example, suppose you write a DB application
+ that runs <tt class="literal">setuid</tt>. This means that
+ when the application runs, it does so under a
+ userid different than that of the application's caller.
+ This is especially problematic if the application is
+ granting stronger privileges to a user than the user
+ might ordinarily have.
+ </p>
+ <p>
+ Now, if
+ <span>
+ the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags
+ are set for the environment,
+ </span>
+
+
+
+ then the environment that the application is
+ using is modifiable using the
+ <tt class="literal">DB_HOME</tt> environment variable. In
+ this scenario, if the uid used by the application has
+ sufficiently broad privileges, then the application's caller
+ can read and/or write databases owned by another user
+ simply by setting his
+ <tt class="literal">DB_HOME</tt> environment variable to the
+ environment used by that other user.
+ </p>
+ <p>
+ Note that this scenario need not be malicious; the
+ wrong environment could be used by the application
+ simply by inadvertently specifying the wrong path to
+ <tt class="literal">DB_HOME</tt>.
+ </p>
+ <p>
+ As always, you should use <tt class="literal">setuid</tt>
+ sparingly, if at all. But if you do use
+ <tt class="literal">setuid</tt>, then you should refrain from
+ specifying
+ <span>
+ the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags
+ </span>
+
+ for the environment open. And, of course, if you must
+ use <tt class="literal">setuid</tt>, then make sure you use
+ the weakest uid possible &#8211; preferably one that is
+ used only by the application itself.
+ </p>
+ </li>
+ <li>
+ <p>
+ File permissions
+ </p>
+ <p>
+ By default, DB always creates database and log files readable and
+ writable by the owner and the group (that is,
+ <tt class="literal">S_IRUSR</tt>,
+ <tt class="literal">S_IWUSR</tt>, <tt class="literal">S_IRGRP</tt> and
+ <tt class="literal">S_IWGRP</tt>; 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 DB.
+ </p>
+ </li>
+ <li>
+ <p>
+ Temporary backing files
+ </p>
+ <p>
+ 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
+ <tt class="literal">TMPDIR</tt> may be used to specify the
+ location of that temporary file. Although temporary backing
+ files are created readable and writable by the owner only
+ (<tt class="literal">S_IRUSR</tt> and <tt class="literal">S_IWUSR</tt>,
+ 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
+ <tt class="methodname">DB_ENV-&gt;set_tmp_dir()</tt>
+
+
+ method to specify a temporary directory with known permissions.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="perftune-intro.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="envopen.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Performance Tuning </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Opening a Transactional Environment and
+ Database
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/envopen.html b/db/docs/gsg_txn/C/envopen.html
new file mode 100644
index 000000000..46fc26bc8
--- /dev/null
+++ b/db/docs/gsg_txn/C/envopen.html
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Opening a Transactional Environment and
+ Database
+
+ </title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ <link rel="previous" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ <link rel="next" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Opening a Transactional Environment and
+ Database
+
+ </th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="enabletxn.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 2. Enabling Transactions</th>
+ <td width="20%" align="right"> <a accesskey="n" href="usingtxns.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="envopen"></a>Opening a Transactional Environment and
+ <span>Database</span>
+
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To enable transactions for your environment, you must initialize the
+ transactional subsystem. Note that doing this also initializes the
+ logging subsystem. In addition, you must initialize the memory pool
+ (in-memory cache). Frequently, but not always, you will also
+ initialize the locking subsystem. For example:
+ </p>
+ <p>
+ Notice in the following example that you create your environment
+ handle using the <tt class="function">db_env_create()</tt> function before you open
+ the environment:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t env_flags;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* Create the environment if it does
+ * not already exist. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_INIT_LOCK | /* Initialize locking. */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL; /* Initialize the in-memory cache. */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+err:
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ <p>
+ You then create and open your database(s) as you would for a non-transactional system.
+ <span>
+ The only difference is that you must pass the environment handle to
+ the
+ <span>
+ <tt class="function">db_create()</tt> function,
+ </span>
+
+ and you must open the database within a transaction.
+ Typically auto commit is used for this purpose. To do so, pass
+ <tt class="literal">DB_AUTO_COMMIT</tt> to the database open command.
+ Also, make sure you close all your databases before you close
+ your environment.
+ For example:
+ </span>
+
+
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t <b class="userinput"><tt>db_flags,</tt></b> env_flags;
+ <b class="userinput"><tt>DB *dbp;</tt></b>
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ <b class="userinput"><tt>const char *file_name = &quot;mydb.db&quot;;
+
+ dbp = NULL;</tt></b>
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* Create the environment if it does
+ * not already exist. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_INIT_LOCK | /* Initialize locking. */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL; /* Initialize the in-memory cache. */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ <b class="userinput"><tt>/* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }</tt></b>
+
+
+err:
+ <b class="userinput"><tt>/* Close the database */
+ if (dbp != NULL) {
+ ret_c = dbp-&gt;close(dbp, 0);
+ if (ret_c != 0) {
+ envp-&gt;err(envp, ret_c, &quot;Database close failed.&quot;);
+ ret = ret_c
+ }
+ }</tt></b>
+
+
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Never close a database that has active transactions. Make sure
+ all transactions are resolved (either committed or aborted)
+ before closing the database.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="enabletxn.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="enabletxn.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="usingtxns.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 2. Enabling Transactions </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 3. Transaction Basics</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/filemanagement.html b/db/docs/gsg_txn/C/filemanagement.html
new file mode 100644
index 000000000..57c5a0b66
--- /dev/null
+++ b/db/docs/gsg_txn/C/filemanagement.html
@@ -0,0 +1,403 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 5. Managing DB Files</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="reversesplit.html" title="Reverse BTree Splits" />
+ <link rel="next" href="backuprestore.html" title="Backup Procedures" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 5. Managing DB Files</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="reversesplit.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="backuprestore.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="filemanagement"></a>Chapter 5. Managing DB Files</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="backuprestore.html">Backup Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#copyutilities">About Unix Copy Utilities</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#standardbackup">Offline Backups</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#hotbackup">Hot Backup</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#incrementalbackups">Incremental Backups</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery.html">Recovery Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#normalrecovery">Normal Recovery</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="architectrecovery.html">Designing Your Application for Recovery</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multithreadrecovery">Recovery for Multi-Threaded Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multiprocessrecovery">Recovery in Multi-Process Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logfileremoval.html">Removing Log Files</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logconfig.html">Configuring the Logging Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logfilesize">Setting the Log File Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ DB is capable of storing several types of files on disk:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Data files, which contain the actual data in your database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Log files, which contain information required to recover your
+ database in the event of a system or application failure.
+ </p>
+ </li>
+ <li>
+ <p>
+ Region files, which contain information necessary for the
+ overall operation of your application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Temporary files, which are created only under certain special circumstances. These files never need to
+ be backed up or otherwise managed and so they are not a consideration for the topics described in this
+ chapter. See <a href="enabletxn.html#security">Security Considerations</a>
+ for more information on temporary files.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these, you must manage your data and log files by ensuring that they
+ are backed up. You should also pay attention to the amount of disk space
+ your log files are consuming, and periodically remove any unneeded
+ files. Finally, you can optionally tune your logging subsystem to best
+ suit your application's needs and requirements.
+ These topics are discussed in this chapter.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="checkpoints"></a>Checkpoints</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before we can discuss DB file management, we need to
+ describe checkpoints. When databases are modified (that is, a
+ transaction is committed), the modifications are recorded in
+ DB's logs, but they are <span class="emphasis"><em>not</em></span>
+ necessarily reflected in the actual database files on disk.
+ </p>
+ <p>
+ This means that as time goes on, increasingly
+ more data is contained in your log files that is not
+ contained in your data files. As a result, you must keep more
+ log files around than you might actually need. Also, any
+ recovery run from your log files will take increasingly longer
+ amounts of time, because there is more data in the log files
+ that must be reflected back into the data files during the
+ recovery process.
+ </p>
+ <p>
+ You can reduce these problems by periodically
+ running a checkpoint against your environment. The checkpoint:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Flushes dirty pages from the in-memory cache. This means that data modifications found in your
+ in-memory cache are written to the database files on disk. Note that a checkpoint also causes data
+ dirtied by an uncommitted transaction to also be written to your database files on disk. In this latter
+ case, DB's normal recovery is used to remove any such modifications that were subsequently
+ abandoned by your application using a transaction abort.
+ </p>
+ <p>
+ Normal recovery is describe in <a href="recovery.html">Recovery Procedures</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Writes a checkpoint record.
+ </p>
+ </li>
+ <li>
+ <p>
+ Flushes the log. This causes all log data that has not yet been written to disk to be written.
+ </p>
+ </li>
+ <li>
+ <p>
+ Writes a list of open databases.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ There are several ways to run a checkpoint. One way is to use
+ the <span><b class="command">db_checkpoint</b></span> command line utility. (Note, however, that this command line utility
+ cannot be used if your environment was opened using
+ <span>
+ <tt class="literal">DB_PRIVATE</tt>.)
+ </span>
+
+ </p>
+ <p>
+ You can also run a thread that periodically checkpoints your
+ environment for you by calling the
+ <tt class="methodname">DB_ENV-&gt;txn_checkpoint()</tt>
+
+
+ method.
+ </p>
+ <p>
+ Note that you can prevent a checkpoint from occurring unless more
+ than a specified amount of log data has been written since the
+ last checkpoint. You can also prevent the checkpoint from
+ running unless more than a specified amount of time has
+ occurred since the last checkpoint. These conditions are
+ particularly interesting if you have multiple threads
+ <span>or processes</span>
+ running checkpoints.
+ </p>
+ <p>
+ For configuration information, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/txn_checkpoint.html" target="_top">
+ DB_ENV-&gt;txn_checkpoint() API reference page.
+ </a>
+
+
+ </p>
+ <p>
+ Note that running checkpoints can be quite expensive. DB must
+ flush every dirty page to the backing database files. On the
+ other hand, if you do not run checkpoints often enough, your
+ recovery time can be unnecessarily long and you may be using more
+ disk space than you really need. Also, you cannot remove log files
+ until a checkpoint is run. Therefore, deciding how frequently
+ to run a checkpoint is one of the most
+ common tuning activity for DB applications.
+ </p>
+ <p>
+ For example, to run a checkpoint from a separate thread of control:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;pthread.h&gt;
+#include &lt;stdlib.h&gt;
+#include &quot;db.h&quot;
+
+void *checkpoint_thread(void *);
+
+int
+main(void)
+{
+ int ret;
+ u_int32_t env_flags;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ pthread_t ptid;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ /* Open the environment. */
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+
+ /* Start a checkpoint thread. */
+ if ((ret = pthread_create(
+ &amp;ptid, NULL, checkpoint_thread, (void *)envp)) != 0) {
+ fprintf(stderr,
+ &quot;txnapp: failed spawning checkpoint thread: %s\n&quot;,
+ strerror(ret));
+ goto err;
+ }
+
+ /*
+ * All other threads and application shutdown code
+ * omitted for brevity.
+ */
+
+ ...
+}
+
+
+void *
+checkpoint_thread(void *arg) {
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = arg;
+
+ /* Checkpoint once a minute. */
+ for (;; sleep(60))
+ if ((ret = dbenv-&gt;txn_checkpoint(dbenv, 0, 0, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, &quot;checkpoint thread&quot;);
+ exit (1);
+ }
+
+ /* NOTREACHED */
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="reversesplit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="backuprestore.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Reverse BTree Splits </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Backup Procedures</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/gettingStarted.css b/db/docs/gsg_txn/C/gettingStarted.css
new file mode 100644
index 000000000..c1b4c86b7
--- /dev/null
+++ b/db/docs/gsg_txn/C/gettingStarted.css
@@ -0,0 +1,41 @@
+body { width: 45em;
+ margin-left: 3em;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11pt;
+ }
+
+h2.title { margin-left: -1em;
+ font-family: Verdana, serif;
+ font-size: 16pt;
+ }
+
+h3.title { font-family: Verdana, serif;
+ font-size: 14pt;
+ }
+
+pre.programlisting {
+ font-family: monospace;
+ background-color: #eae8e9;
+}
+
+div.navheader { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+
+div.navheader table tr td { font-size: 9pt; }
+
+div.navfooter { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+div.navfooter table tr td { font-size: 9pt; }
+
+span.emphasis { font-style: italic; font-size: 9pt;}
+
+div.appendix div.informaltable { font-size: 9pt; }
+div.appendix div.informaltable td { vertical-align: top; }
+div.appendix div.informaltable p { margin-top: .25em; }
+div.appendix div.informaltable p { margin-bottom: .25em; }
+
+
diff --git a/db/docs/gsg_txn/C/hotfailover.html b/db/docs/gsg_txn/C/hotfailover.html
new file mode 100644
index 000000000..fa3dcc152
--- /dev/null
+++ b/db/docs/gsg_txn/C/hotfailover.html
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Using Hot Failovers</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="architectrecovery.html" title="Designing Your Application for Recovery" />
+ <link rel="next" href="logfileremoval.html" title="Removing Log Files" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Using Hot Failovers</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="architectrecovery.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="logfileremoval.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="hotfailover"></a>Using Hot Failovers</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can maintain a backup that can be used for failover purposes.
+ Hot failovers differ from the backup and restore
+ procedures described previously in this chapter in that data
+ used for traditional backups is typically copied to offline storage.
+ Recovery time for a traditional backup is determined by:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ How quickly you can retrieve that storage media.
+ Typically storage media for critical backups is moved
+ to a safe facility in a remote location, so this step can
+ take a relatively long time.
+ </p>
+ </li>
+ <li>
+ <p>
+ How fast you can read the backup from the storage media
+ to a local disk drive. If you have very large backups,
+ or if your storage media is very slow, this can be a
+ lengthy process.
+ </p>
+ </li>
+ <li>
+ <p>
+ How long it takes you to run catastrophic recovery
+ against the newly restored backup. As described earlier
+ in this chapter, this process can be lengthy because
+ every log file must be examined during the recovery
+ process.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ When you use a hot failover, the backup is maintained
+ at a location that is reasonably fast to access. Usually, this
+ is a second disk drive local to the machine.
+ In this situation, recovery time is very quick
+ because you only have to reopen your
+ environment and database, using the failover environment
+ for the environment open.
+ </p>
+ <p>
+ Hot failovers obviously do not protect you from truly
+ catastrophic disasters (such as a fire in your machine room)
+ because the backup is still local to the machine. However,
+ you can guard against more mundane problems (such as a broken
+ disk drive) by keeping the backup on a
+ second drive that is managed by an alternate disk controller.
+ </p>
+ <p>
+ To maintain a hot failover:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Copy all the active database files to the failover
+ directory. Use the <span><b class="command">db_archive</b></span>
+ command line utility with the
+ <tt class="literal">-s</tt> option to identify all the active
+ database files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify all the inactive log files in your production
+ environment and <span class="emphasis"><em>move</em></span> these to the failover
+ directory. Use the <span><b class="command">db_archive</b></span>
+ command with no command line options to obtain a list
+ of these log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify the active log files in your production
+ environment, and <span class="emphasis"><em>copy</em></span> these to the
+ failover directory. Use the
+ <span><b class="command">db_archive</b></span> command with the
+ <tt class="literal">-l</tt> option to obtain a list of these
+ log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run catastrophic recovery against the failover
+ directory. Use the <span><b class="command">db_recover</b></span>
+ command with the <tt class="literal">-c</tt> option to do
+ this.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally copy the backup to an archival location.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Once you have performed this procedure, you can maintain an
+ active hot backup by repeating steps 2 - 5 as often
+ as is required by your application.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If you perform step 1, steps 2-5 must follow in order to
+ ensure consistency of your hot backup.
+ </p>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Rather than use the previous procedure, you can use the <span><b class="command">db_hotbackup</b></span> command line utility
+ to do the same thing. This utility will (optionally) run a checkpoint and then copy all necessary files to a target
+ directory for you.
+ </p>
+ </div>
+ <p>
+ To actually perform a failover, simply:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Shut down all processes which are running against the original environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you have an archival copy of the backup environment, you can optionally try copying the remaining
+ log files from the original environment and running catastrophic recovery against that backup
+ environment. Do this <span class="emphasis"><em>only</em></span> if you have a an archival copy of the backup
+ environment.
+ </p>
+ <p>
+ This step can allow you to recover data created or modified in the original environment, but which
+ did not have a chance to be reflected in the hot backup environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reopen your environment and databases as normal, but use
+ the backup environment instead of the production
+ environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="architectrecovery.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="logfileremoval.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Designing Your Application for Recovery </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Removing Log Files</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/index.html b/db/docs/gsg_txn/C/index.html
new file mode 100644
index 000000000..e43890ce3
--- /dev/null
+++ b/db/docs/gsg_txn/C/index.html
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Getting Started with Berkeley DB Transaction Processing</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="next" href="preface.html" title="Preface" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Getting Started with Berkeley DB Transaction Processing</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="book" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h1 class="title"><a id="id650934"></a>Getting Started with Berkeley DB Transaction Processing</h1>
+ </div>
+ <div>
+ <div class="legalnotice">
+ <p class="legalnotice-title">
+ <b>Legal Notice</b>
+ </p>
+ <p>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
+ </p>
+ <p>
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
+ </p>
+ <p>
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="pubdate">9/20/2006</p>
+ </div>
+ </div>
+ <div></div>
+ <hr />
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="preface">
+ <a href="preface.html">Preface</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="introduction.html">1. Introduction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="enabletxn.html">2. Enabling Transactions</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="enabletxn.html#environments">Environments</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#filenaming">File Naming</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#errorsupport">Error Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#sharedmemory">Shared Memory Regions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#security">Security Considerations</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="envopen.html">Opening a Transactional Environment and
+ Database
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="usingtxns.html">3. Transaction Basics</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="usingtxns.html#commitresults">Committing a Transaction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="abortresults.html">Aborting a Transaction</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="autocommit.html">Auto Commit</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="nestedtxn.html">Nested Transactions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txncursor.html">Transactional Cursors</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnindices.html">Secondary Indices with Transaction Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="maxtxns.html">Configuring the Transaction Subsystem</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="txnconcurrency.html">4. Concurrency</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#locks">Locks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#blocks">Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="lockingsubsystem.html">The Locking Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="isolation.html">Isolation</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#degreesofisolation">Supported Degrees of Isolation</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="txn_ccursor.html">Transactional Cursors and Concurrent Applications</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txn_ccursor.html#cursordirtyreads">Using Cursors with Uncommitted Data</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="readmodifywrite.html">Read/Modify/Write</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnnowait.html">No Wait on Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="filemanagement.html">5. Managing DB Files</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="backuprestore.html">Backup Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#copyutilities">About Unix Copy Utilities</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#standardbackup">Offline Backups</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#hotbackup">Hot Backup</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#incrementalbackups">Incremental Backups</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery.html">Recovery Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#normalrecovery">Normal Recovery</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="architectrecovery.html">Designing Your Application for Recovery</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multithreadrecovery">Recovery for Multi-Threaded Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multiprocessrecovery">Recovery in Multi-Process Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logfileremoval.html">Removing Log Files</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logconfig.html">Configuring the Logging Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logfilesize">Setting the Log File Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="wrapup.html">6. Summary and Examples</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="wrapup.html#anatomy">Anatomy of a Transactional Application</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnexample_c.html">Transaction Example</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right" valign="top"> Preface</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/inmem_txnexample_c.html b/db/docs/gsg_txn/C/inmem_txnexample_c.html
new file mode 100644
index 000000000..591032c09
--- /dev/null
+++ b/db/docs/gsg_txn/C/inmem_txnexample_c.html
@@ -0,0 +1,618 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>In-Memory Transaction Example</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="previous" href="txnexample_c.html" title="Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">In-Memory Transaction Example</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnexample_c.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 6. Summary and Examples</th>
+ <td width="20%" align="right"> </td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="inmem_txnexample_c"></a>In-Memory Transaction Example</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is sometimes used for applications that simply need to cache
+ data retrieved from some other location (such as a remote database
+ server). DB is also often used in embedded systems.
+ </p>
+ <p>
+ In both cases, applications may want to use transactions for
+ atomicity, consistency, and isolation guarantees, but they may also want
+ to forgo the durability guarantee entirely. In doing so, they can keep
+ their DB environment and databases entirely in-memory so
+ as to avoid the performance impact of unneeded disk I/O.
+ </p>
+ <p>
+ To do this:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Refrain from specifying a home directory when you open your
+ environment. The exception to this is if you are using the
+ <tt class="literal">DB_CONFIG</tt> configuration file &#8212; in
+ that case you must identify the environment's home
+ directory so that the configuration file can be found.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your environment to back your regions from
+ system memory instead of the filesystem.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your logging subsystem such that log files are kept
+ entirely in-memory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Increase the size of your in-memory log buffer so that it
+ is large enough to hold the largest set of concurrent write operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Increase the size of your in-memory cache so that it can
+ hold your entire data set. You do not want your cache to
+ page to disk.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not specify a file name when you open your database(s).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ As an example, this section takes the transaction example provided
+ in <a href="txnexample_c.html">Transaction Example</a>
+ and it updates that example so that the environment, database, log
+ files, and regions are all kept entirely in-memory.
+ </p>
+ <p>
+ For illustration purposes, we also modify this example so that
+ uncommitted reads are no longer used to enable the
+ <tt class="function">count_records()</tt>
+
+ function. Instead, we simply provide a transaction handle to
+ <tt class="function">count_records()</tt>
+
+ so as to avoid the self-deadlock. Be aware that using a transaction handle here rather than
+ uncommitted reads will work just as well as if we had continued to use uncommitted reads. However,
+ the usage of the transaction handle here will
+ probably cause more deadlocks than using read-uncommitted does, because more locking is being performed in
+ this case.
+ </p>
+ <p>
+ To begin, we simplify the beginning of our example a bit. Because
+ we no longer need an environment home directory, we can remove all
+ the code that we used to determine path delimiters
+ and include the <tt class="function">getopt</tt> function. We can also
+ remove our <tt class="function">usage()</tt> function because we no
+ longer require any command line arguments.
+ </p>
+ <pre class="programlisting">/* File: txn_guide_inmemory.c */
+
+/* We assume an ANSI-compatible compiler */
+#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
+#include &lt;pthread.h&gt;
+#include &lt;db.h&gt;
+
+/* Run 5 writers threads at a time. */
+#define NUMWRITERS 5
+
+/*
+ * Printing of pthread_t is implementation-specific, so we
+ * create our own thread IDs for reporting purposes.
+ */
+int global_thread_num;
+pthread_mutex_t thread_num_lock;
+
+/* Forward declarations */
+int count_records(DB *, DB_TXN *);
+int open_db(DB **, const char *, const char *, DB_ENV *, u_int32_t);
+int writer_thread(void *); </pre>
+ <p>
+ Next, in our <tt class="function">main()</tt>, we also eliminate some
+ variables that this example no longer needs. In particular, we are able to remove
+ the
+ <tt class="literal">db_home_dir</tt>
+
+ and
+ <tt class="literal">file_name</tt>
+
+ variables. We also remove all our <tt class="function">getopt</tt> code.
+</p>
+ <pre class="programlisting">int
+main(void)
+{
+ /* Initialize our handles */
+ DB *dbp = NULL;
+ DB_ENV *envp = NULL;
+
+ pthread_t writer_threads[NUMWRITERS];
+ int i, ret, ret_t;
+ u_int32_t env_flags;
+
+ /* Application name */
+ const char *prog_name = &quot;txn_guide_inmemory&quot;; </pre>
+ <p>
+ Next we create our environment as always. However, we add
+ <tt class="literal">DB_PRIVATE</tt> to our environment open flags. This
+ flag causes our environment to back regions using our
+ application's heap memory rather than by using the filesystem.
+ This is the first important step to keeping our DB data
+ entirely in-memory.
+ </p>
+ <p>
+ We also remove the <tt class="literal">DB_RECOVER</tt> flag from the environment open flags. Because our databases,
+ logs, and regions are maintained in-memory, there will never be anything to recover.
+ </p>
+ <p>
+ Note that we show the additional code here in
+ <b class="userinput"><tt>bold.</tt></b>
+ </p>
+ <pre class="programlisting"> /* Create the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ env_flags =
+ DB_CREATE | /* Create the environment if it does not exist */
+ DB_INIT_LOCK | /* Initialize the locking subsystem */
+ DB_INIT_LOG | /* Initialize the logging subsystem */
+ DB_INIT_TXN | /* Initialize the transactional subsystem. This
+ * also turns on logging. */
+ DB_INIT_MPOOL | /* Initialize the memory pool (in-memory cache) */
+ <b class="userinput"><tt>DB_PRIVATE | /* Region files are not backed by the filesystem.
+ * Instead, they are backed by heap memory. */</tt></b>
+ DB_THREAD; /* Cause the environment to be free-threaded */ </pre>
+ <p>
+ Now we configure our environment to keep the log files in memory,
+ increase the log buffer size to 10 MB, and increase our in-memory
+ cache to 10 MB. These values should be more than enough for our
+ application's workload.
+ </p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt> /* Specify in-memory logging */
+ ret = envp-&gt;set_flags(envp, DB_LOG_INMEMORY, 1);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting log subsystem to in-memory: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Specify the size of the in-memory log buffer.
+ */
+ ret = envp-&gt;set_lg_bsize(envp, 10 * 1024 * 1024);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error increasing the log buffer size: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Specify the size of the in-memory cache.
+ */
+ ret = envp-&gt;set_cachesize(envp, 0,
+ 10 * 1024 * 1024, 1);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error increasing the cache size: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }</tt>
+ </b>
+ </pre>
+ <p>
+ Next, we open the environment and setup our lock detection. This is
+ identical to how the example previously worked, except that we do not
+ provide a location for the environment's home directory.
+ </p>
+ <pre class="programlisting"> /*
+ * Indicate that we want db to perform lock detection internally.
+ * Also indicate that the transaction with the fewest number of
+ * write locks will receive the deadlock notification in
+ * the event of a deadlock.
+ */
+ ret = envp-&gt;set_lk_detect(envp, DB_LOCK_MINWRITE);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting lock detect: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Now actually open the environment */
+ ret = envp-&gt;open(envp, <b class="userinput"><tt>NULL</tt></b>, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ } </pre>
+ <p>
+ When we call
+ <span><tt class="function">open_db()</tt>,</span>
+
+ which is what we use
+ to open our database, we no not provide a database filename for the
+ third parameter. When the filename is <tt class="literal">NULL</tt>, the database is not
+ backed by the filesystem.
+ </p>
+ <pre class="programlisting"> /*
+ * If we had utility threads (for running checkpoints or
+ * deadlock detection, for example) we would spawn those
+ * here. However, for a simple example such as this,
+ * that is not required.
+ */
+
+ /* Open the database */
+ ret = open_db(&amp;dbp, prog_name, <b class="userinput"><tt>NULL</tt></b>,
+ envp, DB_DUPSORT);
+ if (ret != 0)
+ goto err; </pre>
+ <p>
+ After that, our <tt class="function">main()</tt> function is unchanged,
+ except that when we
+ <span>close the database,</span>
+
+ we change the error message string so as to not reference the database filename.
+ </p>
+ <pre class="programlisting"> /* Initialize a pthread mutex. Used to help provide thread ids. */
+ (void)pthread_mutex_init(&amp;thread_num_lock, NULL);
+
+ /* Start the writer threads. */
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_create(
+ &amp;writer_threads[i], NULL, (void *)writer_thread, (void *)dbp);
+
+ /* Join the writers */
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_join(writer_threads[i], NULL);
+
+err:
+ /* Close our database handle, if it was opened. */
+ if (dbp != NULL) {
+ ret_t = dbp-&gt;close(dbp, 0);
+ if (ret_t != 0) {
+ <b class="userinput"><tt>fprintf(stderr, &quot;%s database close failed.\n&quot;,
+ db_strerror(ret_t));</tt></b>
+ ret = ret_t;
+ }
+ }
+
+ /* Close our environment, if it was opened. */
+ if (envp != NULL) {
+ ret_t = envp-&gt;close(envp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Final status message and return. */
+ printf(&quot;I'm all done.\n&quot;);
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ <p>
+ That completes <tt class="function">main()</tt>. The bulk of our
+ <tt class="function">writer_thread()</tt> function implementation is
+ unchanged from the initial transaction example, except that we no
+ longer check for <tt class="literal">DB_KEYEXISTS</tt> in our
+ <tt class="methodname">DB-&gt;put()</tt> return code. Because we are
+ configuring for a completely in-memory database, there is no
+ possibility that we can run this code against an existing database.
+ Therefore, there is no way that <tt class="literal">DB_KEYEXISTS</tt>
+ will be returned by <tt class="methodname">DB-&gt;put()</tt>.
+ </p>
+ <pre class="programlisting">/*
+ * A function that performs a series of writes to a
+ * Berkeley DB database. The information written
+ * to the database is largely nonsensical, but the
+ * mechanism of transactional commit/abort and
+ * deadlock detection is illustrated here.
+ */
+int
+writer_thread(void *args)
+{
+ DBT key, value;
+ DB_TXN *txn;
+ int i, j, payload, ret, thread_num;
+ int retry_count, max_retries = 20; /* Max retry on a deadlock */
+ char *key_strings[] = {&quot;key 1&quot;, &quot;key 2&quot;, &quot;key 3&quot;, &quot;key 4&quot;,
+ &quot;key 5&quot;, &quot;key 6&quot;, &quot;key 7&quot;, &quot;key 8&quot;,
+ &quot;key 9&quot;, &quot;key 10&quot;};
+
+ DB *dbp = (DB *)args;
+ DB_ENV *envp = dbp-&gt;get_env(dbp);
+
+ /* Get the thread number */
+ (void)pthread_mutex_lock(&amp;thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)pthread_mutex_unlock(&amp;thread_num_lock);
+
+ /* Initialize the random number generator */
+ srand((u_int)pthread_self());
+
+ /* Write 50 times and then quit */
+ for (i = 0; i &lt; 50; i++) {
+ retry_count = 0; /* Used for deadlock retries */
+
+retry:
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn_begin failed&quot;);
+ return (EXIT_FAILURE);
+ }
+ for (j = 0; j &lt; 10; j++) {
+ /* Set up our key and values DBTs */
+ memset(&amp;key, 0, sizeof(DBT));
+ key.data = key_strings[j];
+ key.size = (strlen(key_strings[j]) + 1) * sizeof(char);
+
+ memset(&amp;value, 0, sizeof(DBT));
+ payload = rand() + i;
+ value.data = &amp;payload;
+ value.size = sizeof(int);
+
+ /* Perform the database put. */
+ switch (ret = dbp-&gt;put(dbp, txn, &amp;key, &amp;value, 0)) {
+ case 0:
+ break;
+
+ /*
+ * Here's where we perform deadlock detection. If
+ * DB_LOCK_DEADLOCK is returned by the put operation,
+ * then this thread has been chosen to break a deadlock.
+ * It must abort its operation, and optionally retry the
+ * put.
+ */
+ case DB_LOCK_DEADLOCK:
+ /*
+ * First that we MUST do is abort the
+ * transaction.
+ */
+ (void)txn-&gt;abort(txn);
+ /*
+ * Now we decide if we want to retry the operation.
+ * If we have retried less than max_retries,
+ * increment the retry count and goto retry.
+ */
+ if (retry_count &lt; max_retries) {
+ printf(&quot;Writer %i: Got DB_LOCK_DEADLOCK.\n&quot;,
+ thread_num);
+ printf(&quot;Writer %i: Retrying write operation.\n&quot;,
+ thread_num);
+ retry_count++;
+ goto retry;
+ }
+ /*
+ * Otherwise, just give up.
+ */
+ printf(&quot;Writer %i: &quot;, thread_num);
+ printf(&quot;Got DB_LOCK_DEADLOCK and out of retries.\n&quot;);
+ printf(&quot;Writer %i: Giving up.\n&quot;, thread_num);
+ return (EXIT_FAILURE);
+ /*
+ * If a generic error occurs, we simply abort the
+ * transaction and exit the thread completely.
+ */
+ default:
+ envp-&gt;err(envp, ret, &quot;db put failed&quot;);
+ ret = txn-&gt;abort(txn);
+ if (ret != 0)
+ envp-&gt;err(envp, ret, &quot;txn abort failed&quot;);
+ return (EXIT_FAILURE);
+ } /** End case statement **/
+
+ } /** End for loop **/ </pre>
+ <p>
+ The only other change to <tt class="function">writer_thread()</tt>
+ is that we pass <tt class="function">count_records()</tt> a
+ transaction handle, rather than configuring our entire
+ application for uncommitted reads. Both mechanisms work well-enough
+ for preventing a self-deadlock. However, the individual count
+ in this example will tend to be lower than the counts seen in
+ the previous transaction example, because
+ <tt class="function">count_records()</tt> can no longer see records
+ created but not yet committed by other threads.
+ </p>
+ <pre class="programlisting"> /*
+ * print the number of records found in the database.
+ * See count_records() for usage information.
+ */
+ printf(&quot;Thread %i. Record count: %i\n&quot;, thread_num,
+ count_records(dbp, <b class="userinput"><tt>txn</tt></b>));
+
+ /*
+ * If all goes well, we can commit the transaction and
+ * loop to the next transaction.
+ */
+ ret = txn-&gt;commit(txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn commit failed&quot;);
+ return (EXIT_FAILURE);
+ }
+ }
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ Next we update
+ <span><tt class="function">count_records()</tt>.</span>
+
+ The only difference
+ here is that we no longer specify <tt class="literal">DB_READ_UNCOMMITTED</tt> when
+ we open our cursor. Note that even this minor change is not required.
+ If we do not configure our database to support uncommitted reads,
+ <tt class="literal">DB_READ_UNCOMMITTED</tt> on the cursor open will be silently
+ ignored. However, we remove the flag anyway from the cursor open so as to
+ avoid confusion.
+</p>
+ <pre class="programlisting">int
+count_records(DB *dbp, DB_TXN *txn)
+{
+ DBT key, value;
+ DBC *cursorp;
+ int count, ret;
+
+ cursorp = NULL;
+ count = 0;
+
+ /* Get the cursor */
+ ret = dbp-&gt;cursor(dbp, txn, &amp;cursorp, <b class="userinput"><tt>0</tt></b>);
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret, &quot;count_records: cursor open failed.&quot;);
+ goto cursor_err;
+ }
+
+ /* Get the key DBT used for the database read */
+ memset(&amp;key, 0, sizeof(DBT));
+ memset(&amp;value, 0, sizeof(DBT));
+ do {
+ ret = cursorp-&gt;c_get(cursorp, &amp;key, &amp;value, DB_NEXT);
+ switch (ret) {
+ case 0:
+ count++;
+ break;
+ case DB_NOTFOUND:
+ break;
+ default:
+ dbp-&gt;err(envp, ret,
+ &quot;Count records unspecified error&quot;);
+ goto cursor_err;
+ }
+ } while (ret == 0);
+
+cursor_err:
+ if (cursorp != NULL) {
+ ret = cursorp-&gt;c_close(cursorp);
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret,
+ &quot;count_records: cursor close failed.&quot;);
+ }
+ }
+
+ return (count);
+}</pre>
+ <p>
+ Finally, we update
+ <span><tt class="function">open_db()</tt>.</span>
+
+ This involves
+ removing <tt class="literal">DB_READ_UNCOMMITTED</tt> from the
+ open flags.
+
+ <span>We are also careful to change our database open error
+ message to no longer use the <tt class="literal">file_name</tt>
+ variable because that value will always be <tt class="literal">NULL</tt> for this example.</span>
+ </p>
+ <pre class="programlisting">/* Open a Berkeley DB database */
+int
+open_db(DB **dbpp, const char *progname, const char *file_name,
+ DB_ENV *envp, u_int32_t extra_flags)
+{
+ int ret;
+ u_int32_t open_flags;
+ DB *dbp;
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;%s: %s\n&quot;, progname,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /* Point to the memory malloc'd by db_create() */
+ *dbpp = dbp;
+
+ if (extra_flags != 0) {
+ ret = dbp-&gt;set_flags(dbp, extra_flags);
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret,
+ &quot;open_db: Attempt to set extra flags failed.&quot;);
+ return (EXIT_FAILURE);
+ }
+ }
+
+ /* Now open the database */
+ <b class="userinput"><tt>open_flags = DB_CREATE | /* Allow database creation */
+ DB_THREAD |
+ DB_AUTO_COMMIT; /* Allow auto commit */</tt></b>
+
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ open_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ <b class="userinput"><tt>dbp-&gt;err(dbp, ret, &quot;Database open failed&quot;);
+ return (EXIT_FAILURE);</tt></b>
+ }
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ This completes our in-memory transactional example. If you would like to
+ experiment with this code, you can find the example in the following
+ location in your DB distribution:
+</p>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_c/txn_guide</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnexample_c.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="wrapup.html">Up</a>
+ </td>
+ <td width="40%" align="right"> </td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transaction Example </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/introduction.html b/db/docs/gsg_txn/C/introduction.html
new file mode 100644
index 000000000..0cd478d9a
--- /dev/null
+++ b/db/docs/gsg_txn/C/introduction.html
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="recovery-intro.html" title="Recoverability" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on transactions as
+ used with Berkeley DB (DB). It begins by offering a general overview to
+ transactions, the guarantees they provide, and the general application
+ infrastructure required to obtain full transactional protection for your
+ data.
+ </p>
+ <p>
+ This book also provides detailed examples on how to write a
+ transactional application. Both single threaded and multi-threaded <span>(as well as multi-process
+ applications)</span> are discussed. A detailed description of various
+ backup and recovery strategies is included in this manual, as is a
+ discussion on performance considerations for your transactional application.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Getting Started with Berkeley DB</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnintro"></a>Transaction Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactions offer your application's data protection from
+ application or system failures. That is, DB transactions offer
+ your application full ACID support:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="bold"><b>A</b></span>tomicity
+ </p>
+ <p>
+ Multiple database operations are treated as a single unit of
+ work. Once committed, all write operations performed under
+ the protection of the transaction are saved to your databases.
+ Further, in the event that you abort a transaction, all write
+ operations performed during the transaction are discarded.
+ In this event, your database is left in the state it was in
+ before the transaction began, regardless of the number or
+ type of write operations you may have performed during the
+ course of the transaction.
+ </p>
+ <p>
+ Note that DB transactions can span one or more
+ database handles.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>C</b></span>onsistency
+ </p>
+ <p>
+ Your databases will never see a partially completed
+ transaction. This is true even if your application fails while there are
+ in-progress transactions. If the application or system fails,
+ then either all of the database changes appear when the
+ application next runs, or none of them appear.
+ </p>
+ <p>
+ In other words, whatever consistency requirements your application has will never be violated by DB.
+ If, for example, your application requires every record to include an employee ID, and your
+ code faithfully adds that ID to its database records, then DB will never
+ violate that consistency requirement. The ID will remain in the database records until such a time as your
+ application chooses to delete it.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>I</b></span>solation
+ </p>
+ <p>
+ While a transaction is in progress, your databases will appear
+ to the transaction as if there are no other operations
+ occurring outside of the transaction. That is, operations
+ wrapped inside a transaction will always have a clean and
+ consistent view of your databases. They never have to see
+ updates currently in progress under the protection of another transaction.
+ Note, however, that isolation guarantees can be
+
+ relaxed from the default setting. See
+ <a href="isolation.html">Isolation</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>D</b></span>urability
+ </p>
+ <p>
+ Once committed to your databases, your modifications will
+ persist even in the event of an application or system failure.
+ Note that like isolation, your durability guarantee can be
+ relaxed. See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sysfailure"></a>A Note on System Failure</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From time to time this manual mentions that transactions protect your data against 'system or application
+ failure.' This is
+ true up to a certain extent. However, not all failures are created equal and no data protection
+ mechanism can protect you against every conceivable way a computing system can find to die.
+ </p>
+ <p>
+ Generally, when this book talks about protection against failures, it means that
+ transactions offer protection against
+ the likeliest culprits for system and application crashes. So long as your data modifications have been
+ committed to disk, those modifications should persist even if your application or OS subsequently fails.
+ And, even if the application or OS fails in the middle of a transaction commit (or abort), the data on disk
+ should be either in a consistent state, or there should be enough data available to bring
+ your databases into a consistent state (via a recovery procedure, for example). You may, however,
+ lose whatever data you were committing at the
+ time of the failure, but your databases will be otherwise unaffected.
+ </p>
+ <p>
+ Of course, if your <span class="emphasis"><em>disk</em></span> fails, then the transactional benefits described in this book
+ are only as good as the backups you have taken.
+ <span>
+ By spreading your data and log files across separate disks,
+ you can minimize the risk of data loss due to a disk failure, but even in this case it is possible to
+ conjure a scenario where even this protection is insufficient (a fire in the machine room, for example) and
+ you must go to your backups for protection.
+ </span>
+ </p>
+ <p>
+ Finally, by following the programming examples shown in this book, you can write your code so as to protect
+ your data in the event that your code crashes. However, no programming API can protect you against logic
+ failures in your own code; transactions cannot protect you from simply writing the wrong thing to your
+ databases.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="apireq"></a>Application Requirements</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to use transactions, your application has certain
+ requirements beyond what is required of non-transactional protected
+ applications. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Environments.
+ </p>
+ <p>
+ Environments are optional for non-transactional
+ applications, but they are required for transactional
+ applications.
+ </p>
+ <p>
+ Environment usage is described in detail in
+ <a href="usingtxns.html">Transaction Basics</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction subsystem.
+ </p>
+ <p>
+ In order to use transactions, you must explicitly
+ enable the transactional subsystem for your
+ application, and this must be done at the time that
+ your environment is first created.
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ <p>
+ The logging subsystem is required for recovery purposes, but
+ its usage also means your application may require a
+ little more administrative effort than it does when logging
+ is not in use. See <a href="filemanagement.html">Managing DB Files</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>DB_TXN</span>
+
+
+
+ handles.
+ </p>
+ <p>
+ In order to obtain the atomicity guarantee offered by
+ the transactional subsystem (that is, combine multiple
+ operations in a single unit of work), your application must use
+ transaction handles. These handles are obtained from your
+ <span>DB_ENV</span>
+
+
+
+ objects. They should normally be short-lived, and their usage is
+ reasonably simple. To complete a transaction and save
+ the work it performed, you
+ call its <tt class="methodname">commit()</tt> method. To
+ complete a transaction and discard its work, you call its
+ <tt class="methodname">abort()</tt> method.
+ </p>
+ <p>
+ In addition, it is possible to use auto commit if you want
+ to transactional protect a single write operation. Auto
+ commit allows a transaction to be used without
+ obtaining an explicit transaction handle. See
+ <a href="autocommit.html">Auto Commit</a>
+ for information on how to use auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>Database</span>
+
+ open requirements.
+ </p>
+ <p>
+
+ <span>In addition to using
+ environments and initializing the
+ correct subsystems, your</span>
+
+ application must transaction protect the database
+
+ opens<span>,
+ and any secondary index associations,</span>
+
+ if subsequent operations on the databases are to be transaction
+ protected. The database open and secondary index
+ association are commonly transaction protected using
+ auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ Deadlock detection.
+ </p>
+ <p>
+ Typically transactional applications use multiple
+ threads of control when accessing the database. Any
+ time multiple threads are used on a single resource,
+ the potential for lock contention arises. In turn, lock
+ contention can lead to deadlocks. See
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information.
+ </p>
+ <p>
+ Therefore, transactional applications must frequently
+ include code for detecting and responding to deadlocks.
+ Note that this requirement is not
+ <span class="emphasis"><em>specific</em></span> to transactions
+ &#8211; you can certainly write concurrent
+ non-transactional DB applications. Further, not
+ every transactional application uses concurrency and
+ so not every transactional application must
+ manage deadlocks. Still, deadlock management is so
+ frequently a characteristic of transactional
+ applications that we discuss it in this
+ book. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithread-intro"></a>Multi-threaded
+ <span>and Multi-process</span>
+ Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is designed to support multi-threaded <span>and
+ multi-process</span> applications, but their usage means
+ you must pay careful attention to issues of concurrency.
+ Transactions help your application's concurrency by providing various levels of
+ isolation for your threads of control. In addition, DB
+ provides mechanisms that allow you to detect and respond to
+ deadlocks (but strictly speaking, this is not limited to just
+ transactional applications).
+ </p>
+ <p>
+ <span class="emphasis"><em>Isolation</em></span> means that database modifications made by
+ one transaction will not normally be seen by readers from another
+ transaction until the first commits its changes. Different threads
+ use different transaction handles, so
+ this mechanism is normally used to provide isolation between
+ database operations performed by different threads.
+ </p>
+ <p>
+ Note that DB supports different isolation levels. For example,
+ you can configure your application to see uncommitted reads, which means
+ that one transaction can see data that has been modified but not yet
+ committed by another transaction. Doing this might mean your
+ transaction reads data &quot;dirtied&quot; by another transaction,
+ but which subsequently might change before that
+ other transaction commits its changes.
+ On the other hand, lowering your isolation
+ requirements means that your application can experience
+ improved throughput due to reduced lock contention.
+ </p>
+ <p>
+ For more information on concurrency, on managing isolation
+ levels, and on deadlock detection, see <a href="txnconcurrency.html">Concurrency</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recoverability</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/isolation.html b/db/docs/gsg_txn/C/isolation.html
new file mode 100644
index 000000000..610e02b02
--- /dev/null
+++ b/db/docs/gsg_txn/C/isolation.html
@@ -0,0 +1,961 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Isolation</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="lockingsubsystem.html" title="The Locking Subsystem" />
+ <link rel="next" href="txn_ccursor.html" title="Transactional Cursors and Concurrent Applications" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Isolation</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="lockingsubsystem.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txn_ccursor.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="isolation"></a>Isolation</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Isolation guarantees are an important aspect of transactional
+ protection. Transactions
+ ensure the data your transaction is working with will not be changed by some other transaction.
+ Moreover, the modifications made by a transaction will never be viewable outside of that transaction until
+ the changes have been committed.
+ </p>
+ <p>
+ That said, there are different degrees of isolation, and you can choose to relax your isolation
+ guarantees to one degree or another depending on your application's requirements. The primary reason why
+ you might want to do this is because of performance; the more isolation you ask your transactions to
+ provide, the more locking that your application must do. With more locking comes a greater chance of
+ blocking, which in turn causes your threads to pause while waiting for a lock. Therefore, by relaxing
+ your isolation guarantees, you can <span class="emphasis"><em>potentially</em></span> improve your application's throughput.
+ Whether you actually see any improvement depends, of course, on
+ the nature of your application's data and transactions.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="degreesofisolation"></a>Supported Degrees of Isolation</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB supports the following levels of isolation:
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Degree</th>
+ <th>ANSI Term</th>
+ <th>Definition</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>1</td>
+ <td>READ UNCOMMITTED</td>
+ <td>
+ Uncommitted reads means that one transaction will never
+ overwrite another transaction's dirty data. Dirty data is
+ data that a transaction has modified but not yet committed
+ to the underlying data store. However, uncommitted reads allows a
+ transaction to see data dirtied by another
+ transaction. In addition, a transaction may read data
+ dirtied by another transaction, but which subsequently
+ is aborted by that other transaction. In this latter
+ case, the reading transaction may be reading data that
+ never really existed in the database.
+ </td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>READ COMMITTED</td>
+ <td>
+ <p>
+ Committed read isolation means that degree 1 is observed, except that dirty data is never read.
+ </p>
+ <p>
+ In addition, this isolation level guarantees that data will never change so long as
+ it is addressed by the cursor, but the data may change before the reading cursor is closed.
+ In the case of a transaction, data at the current
+ cursor position will not change, but once the cursor
+ moves, the previous referenced data can change. This
+ means that readers release read locks before the cursor
+ is closed, and therefore, before the transaction
+ completes. Note that this level of isolation causes the
+ cursor to operate in exactly the same way as it does in
+ the absence of a transaction.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>SERIALIZABLE</td>
+ <td>
+ <p>
+ Committed read is observed, plus the data read by a transaction, T,
+ will never be dirtied by another transaction before T completes.
+ This means that both read and write locks are not
+ released until the transaction completes.
+ </p>
+ <p>
+ <span>
+ In addition,
+ </span>
+
+
+
+ no transactions will see phantoms. Phantoms are records
+ returned as a result of a search, but which were not seen by
+ the same transaction when the identical
+ search criteria was previously used.
+ </p>
+ <p>
+ This is DB's default isolation guarantee.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p>
+
+ By default, DB transactions and transactional cursors offer
+ <span>
+ serializable isolation.
+ </span>
+
+
+ You can optionally reduce your isolation level by configuring DB to use
+ uncommitted read isolation. See
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ for more information.
+
+ You can also configure DB to use committed read isolation. See
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ for more information.
+
+ </p>
+ <p>
+ Finally, in addition to DB's normal degrees of isolation, you
+ can also use <span class="emphasis"><em>snapshot isolation</em></span>. This allows
+ you to avoid the read locks that serializable isolation requires. See
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ for details.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="dirtyreads"></a>Reading Uncommitted Data</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure your application to read data that has been modified but not yet
+ committed by another transaction; that is, dirty data. When you do this, you
+ may see a performance benefit by allowing your
+ application to not have to block waiting for write locks. On the other hand, the data that your
+ application is reading may change before the transaction has completed.
+ </p>
+ <p>
+ When used with transactions, uncommitted reads means that one transaction can see data
+ modified but not yet committed by another transaction. When
+ used with transactional cursors, uncommitted reads means
+ that any database reader can see data modified by the
+ cursor before the cursor's transaction has committed.
+ </p>
+ <p>
+ Because of this, uncommitted reads allow a transaction to read data
+ that may subsequently be aborted by another transaction. In
+ this case, the reading transaction will have read data that
+ never really existed in the database.
+ </p>
+ <p>
+ To configure your application to read uncommitted data:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Open your database such that it will allow uncommitted reads. You do this by
+ <span>
+ specifying <tt class="literal">DB_READ_UNCOMMITTED</tt> when you open your database.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>
+ Specify <tt class="literal">DB_READ_UNCOMMITTED</tt>
+ when you create the transaction,
+ <span>
+ open the cursor, or read a record from the database.
+ </span>
+
+ </span>
+
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For example, the following opens the database such that it supports uncommitted reads, and then creates a
+ transaction that causes all reads performed within it to use uncommitted reads. Remember that simply opening
+ the database to support uncommitted reads is not enough; you must also declare your read operations to be
+ performed using uncommitted reads.
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+ const char *keystr =&quot;thekey&quot;;
+ const char *datastr = &quot;thedata&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ db_flags = DB_CREATE | /* Create the db if it does not
+ * exist */
+ DB_AUTO_COMMIT | /* Enable auto commit */
+ DB_READ_UNCOMMITTED; /* Enable uncommitted reads */
+
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+ /* Get the txn handle */
+ txn = NULL;
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, DB_READ_UNCOMMITTED);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction begin failed.&quot;);
+ goto err;
+ }
+
+ /*
+ * From here, you perform your database reads and writes as normal,
+ * committing and aborting the transactions as is necessary, and
+ * testing for deadlock exceptions as normal (omitted for brevity).
+ */
+
+ ... </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="readcommitted"></a>Committed Reads</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure your transaction so that the data being
+ read by a transactional cursor is consistent so long as it
+ is being addressed by the cursor. However, once the cursor is done reading the
+
+ <span>
+ record (that is, reading records from the page that it currently has locked),
+ </span>
+ the cursor releases its lock on that
+
+ <span>
+ record or page.
+ </span>
+ This means that the data the cursor has read and released
+ may change before the cursor's transaction has completed.
+ </p>
+ <p>
+ For example,
+ suppose you have two transactions, <tt class="literal">Ta</tt> and <tt class="literal">Tb</tt>. Suppose further that
+ <tt class="literal">Ta</tt> has a cursor that reads <tt class="literal">record R</tt>, but does not modify it. Normally,
+ <tt class="literal">Tb</tt> would then be unable to write <tt class="literal">record R</tt> because
+ <tt class="literal">Ta</tt> would be holding a read lock on it. But when you configure your transaction for
+ committed reads, <tt class="literal">Tb</tt> <span class="emphasis"><em>can</em></span> modify <tt class="literal">record
+ R</tt> before <tt class="literal">Ta</tt> completes, so long as the reading cursor is no longer
+ addressing the
+
+ <span>
+ record or page.
+ </span>
+ </p>
+ <p>
+ When you configure your application for this level of isolation, you may see better performance
+ throughput because there are fewer read locks being held by your transactions.
+ Read committed isolation is most useful when you have a cursor that is reading and/or writing records in
+ a single direction, and that does not ever have to go back to re-read those same records. In this case,
+ you can allow DB to release read locks as it goes, rather than hold them for the life of the
+ transaction.
+ </p>
+ <p>
+ To configure your application to use committed reads, do one of the following:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Create your transaction such that it allows committed reads. You do this by
+ <span>
+ specifying <tt class="literal">DB_READ_COMMITTED</tt> when you open the transaction.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>
+ Specify <tt class="literal">DB_READ_COMMITTED</tt>
+ when you open the cursor.
+ </span>
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example, the following creates a transaction that allows committed reads:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ /*
+ * Notice that we do not have to specify any flags to the database to
+ * allow committed reads (this is as opposed to uncommitted reads
+ * where we DO have to specify a flag on the database open.
+ */
+ db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+ /* Get the txn handle */
+ txn = NULL;
+ /*
+ * Open the transaction and enable committed reads. All cursors open
+ * with this transaction handle will use read committed isolation.
+ */
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, DB_READ_COMMITTED);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction begin failed.&quot;);
+ goto err;
+ }
+
+ /*
+ * From here, you perform your database reads and writes as normal,
+ * committing and aborting the transactions as is necessary, and
+ * testing for deadlock exceptions as normal (omitted for brevity).
+ *
+ * Using transactional cursors with concurrent applications is
+ * described in more detail in the following section.
+ */
+
+ ... </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="snapshot_isolation"></a>Using Snapshot Isolation</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default DB uses serializable isolation. An
+ important side effect of this isolation level is that
+ read operations obtain read locks on database pages,
+ and then hold those locks until the read operation is
+ completed. When you are using transactional cursors, this
+ means that read locks are held until the transaction commits or
+ aborts. In that case, over time a transactional cursor
+ can gradually block all other transactions from writing
+ to the database.
+ </p>
+ <p>
+ You can avoid this by using snapshot isolation.
+ Snapshot isolation uses <span class="emphasis"><em>multiversion
+ concurrency control</em></span> to guarantee
+ repeatable reads. What this means is that every time a
+ writer would take a read lock on a page, instead a copy of
+ the page is made and the writer operations on that page
+ copy. This frees other writers from blocking due to a
+ read lock held on the page.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_cost"></a>Snapshot Isolation Cost</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Snapshot isolation does not come without a cost.
+ Because pages are being duplicated before being
+ operated upon, the cache will fill up faster. This
+ means that you might need a larger cache in order to
+ hold the entire working set in memory.
+ </p>
+ <p>
+ If the cache becomes full of page copies before old
+ copies can be discarded, additional I/O will occur as
+ pages are written to temporary &quot;freezer&quot; files on disk.
+ This can substantially reduce throughput, and should be
+ avoided if possible by configuring a large cache and
+ keeping snapshot isolation transactions short.
+ </p>
+ <p>
+ You can estimate how large your cache should be by
+ taking a checkpoint, followed by a call to the
+ <tt class="methodname">DB_ENV-&gt;log_archive()</tt>
+
+
+ method. The amount of cache required is approximately
+ double the size of the remaining log files (that is,
+ the log files that cannot be archived).
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_maxtxn"></a>Snapshot Isolation Transactional Requirements</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In addition to an increased cache size, you may also
+ need to increase the maximum number of transactions
+ that your application supports. (See
+ <a href="maxtxns.html"><p>
+ Most of the configuration activities that you need to perform
+ for your transactional DB application will involve the
+ locking and logging subsystems. See
+ <a href="txnconcurrency.html"></a>Concurrency
+ and
+ <a href="filemanagement.html"></a>Managing DB Files
+ for details.
+ </p><p>
+ However, there are a couple of things that you can do to
+ configure your transaction subsystem directly. These things
+ are:
+ </p><div class="itemizedlist"><ul type="disc"><li><p>
+ Configure the maximum number of simultaneous
+ transactions needed by your application.
+ In general, you should not need to do this unless you
+ use deeply nested transactions or you have many threads all
+ of which have active transactions. In addition, you may
+ need to a higher maximum number of transactions if you
+ are using snapshot isolation. See
+ <a href="isolation.html#sisolation_maxtxn"></a>Snapshot Isolation Transactional Requirements
+ for details.
+ </p><p>
+ By default, your application can support 20 active
+ transactions.
+ </p><p>
+ You can set the maximum number of simultaneous
+ transactions supported by your application using
+ <span>
+ the
+ <tt class="methodname">DB_ENV-&gt;set_tx_max()</tt>
+
+ method. Note that this method must be called
+ before the environment has been opened.
+ </span>
+
+ </p><p>
+ If your application has exceeded this maximum value,
+ then any attempt to begin a new transaction will fail.
+ </p><p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_tx_max</tt> parameter. Remember that
+ the <tt class="literal">DB_CONFIG</tt> must reside in your
+ environment home directory.
+ </p></li><li><span>
+ <p>
+ <span>
+ Configure the timeout value for your transactions.
+ </span>
+
+
+ This value represents the longest period of time a
+ transaction can be active. Note, however, that
+ transaction timeouts are checked only when DB
+ examines its lock tables for blocked locks
+ (see <a href="blocking_deadlocks.html"></a>Locks, Blocks, and Deadlocks
+ for more information). Therefore, a transaction's timeout can
+ have expired, but the application will not be notified until DB
+ has a reason to examine its lock tables.
+ </p>
+ <p>
+ Be aware that some transactions may be
+ inappropriately timed out before the transaction has a
+ chance to complete. You should therefore use this
+ mechanism only if you know your application
+ might have unacceptably long transactions and
+ you want to make sure your application will
+ not stall during their execution.
+ (This might happen if, for example, your
+ transaction blocks or requests too much
+ data.)
+ </p>
+ <p>
+ Note that by default transaction timeouts are set to 0 seconds, which means that they never time
+ out.
+ </p>
+ <p>
+ To set the maximum timeout value for your transactions,
+ use the
+ <span><tt class="methodname">DB_ENV-&gt;set_timeout()</tt></span>
+
+
+ method. This method configures the entire
+ environment; not just the handle used to set the
+ configuration. Further, this value may
+ be set at any time during the application's
+ lifetime.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_txn_timeout</tt> parameter.
+ </p>
+
+</span></li></ul></div><p>
+ For example:
+ </p><pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ /*
+ * Configure a maximum transaction timeout of 1 second.
+ */
+ ret = envp-&gt;set_timeout(envp, DB_SET_TXN_TIMEOUT, 1000000);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting txn timeout: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Configure 40 maximum transactions.
+ */
+ ret = envp-&gt;set_tx_max(envp, 40);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting max txns: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * From here, you open your databases, proceed with your
+ * database operations, and respond to deadlocks as
+ * is normal (omitted for brevity).
+ */
+ ... </pre></a>
+ for details on how to set this.)
+ In the worst case scenario, you might need to configure your application for one
+ more transaction for every page in the cache. This is
+ because transactions are retained until the last page
+ they created is evicted from the cache.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_whenuse"></a>When to Use Snapshot Isolation</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Snapshot isolation is best used when all or most
+ of the following conditions are true:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ You can have a large cache relative to your working data set size.
+ </p>
+ </li>
+ <li>
+ <p>
+ You require repeatable reads.
+ </p>
+ </li>
+ <li>
+ <p>
+ You will be using transactions that routinely work on
+ the entire database, or more commonly,
+ there is data in your database that will be very
+ frequently written by more than one transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Read/write contention is
+ limiting your application's
+ throughput, or the application
+ is all or mostly read-only and
+ contention for the lock manager
+ mutex is limiting throughput.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_howuse"></a>How to use Snapshot Isolation</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You use snapshot isolation by:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Opening the database with
+ multiversion support. You can
+ configure this either when you
+ open your environment or when
+ you open your database.
+ <span>
+ Use the
+ <tt class="literal">DB_MULTIVERSION</tt>
+ flag to configure this support.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your cursor or
+ transaction to use snapshot
+ isolation.
+ </p>
+ <p>
+ To do this,
+
+ <span>
+ pass the
+ <tt class="literal">DB_TXN_SNAPSHOT</tt> flag
+ when you open the cursor or
+ create the transaction. If
+ configured for the transaction,
+ then this flag is not required
+ when the cursor is opened.
+ </span>
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ The simplest way to take advantage of snapshot
+ isolation is for queries: keep update
+ transactions using full read/write locking and
+ use snapshot isolation on read-only transactions or
+ cursors. This should minimize blocking of
+ snapshot isolation transactions and will avoid
+ deadlock errors.
+ </p>
+ <p>
+ If the application has update transactions which
+ read many items and only update a small set (for
+ example, scanning until a desired record is
+ found, then modifying it), throughput may be
+ improved by running some updates at snapshot
+ isolation as well. But doing this means that
+ you must manage deadlock errors.
+ See
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ for details.
+ </p>
+ <p>
+ The following code fragment turns
+ on snapshot isolation for a transaction:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* Create the environment if it does
+ * not already exist. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_INIT_LOCK | /* Initialize locking. */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL| /* Initialize the in-memory cache. */
+ <b class="userinput"><tt>DB_MULTIVERSION; /* Support snapshot isolation */</tt></b>
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ /*
+ * Nothing needs to be supplied here to support snapshot isolation.
+ * The environment does, so its databases will too.
+ */
+ db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+
+ ....
+
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, <b class="userinput"><tt>DB_TXN_SNAPSHOT</tt></b>);
+
+ /* remainder of the program omitted for brevity */
+
+ </pre>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="lockingsubsystem.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txn_ccursor.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">The Locking Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transactional Cursors and Concurrent Applications</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/lockingsubsystem.html b/db/docs/gsg_txn/C/lockingsubsystem.html
new file mode 100644
index 000000000..8311ce3b0
--- /dev/null
+++ b/db/docs/gsg_txn/C/lockingsubsystem.html
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>The Locking Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="blocking_deadlocks.html" title="Locks, Blocks, and Deadlocks" />
+ <link rel="next" href="isolation.html" title="Isolation" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">The Locking Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="blocking_deadlocks.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="isolation.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="lockingsubsystem"></a>The Locking Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to allow concurrent operations, DB provides the locking
+ subsystem. This subsystem provides inter- and intra- process
+ concurrency mechanisms. It is extensively used by DB concurrent
+ applications, but it can also be generally used for non-DB
+ resources.
+ </p>
+ <p>
+ This section describes the locking subsystem as it is used to
+ protect DB resources. In particular, issues on configuration are
+ examined here. For information on using the locking subsystem to
+ manage non-DB resources, see the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="configuringlock"></a>Configuring the Locking Subsystem</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You initialize the locking subsystem by specifying
+ <span>
+ <tt class="literal">DB_INIT_LOCK</tt> to the
+ <tt class="methodname">DB_ENV-&gt;open()</tt>
+
+ method.
+ </span>
+
+ </p>
+ <p>
+ Before opening your environment, you can configure various
+ maximum values for your locking subsystem. Note that these
+ limits can only be configured before the environment is
+ opened. Also, these methods configure the entire environment,
+ not just a specific environment handle.
+ </p>
+ <p>
+ Finally, each bullet below identifies the
+ <tt class="filename">DB_CONFIG</tt> file parameter that can be used
+ to specify the specific locking limit. If used, these
+ <tt class="filename">DB_CONFIG</tt> file parameters override any
+ value that you might specify using the environment handle.
+ </p>
+ <p>
+ The limits that you can configure are as follows:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ The maximum number of lockers
+ supported by the environment. This value is used by
+ the environment when it is opened to estimate the amount
+ of space that it should allocate for various internal
+ data structures. By default, 1,000 lockers are
+ supported.
+ </p>
+ <p>
+ To configure this value, use the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;set_lk_max_lockers()</tt>
+
+ method.
+ </span>
+
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_lockers</tt> parameter.
+ </p>
+ </li>
+ <li>
+ <p>
+ The maximum number of locks supported by the environment.
+ By default, 1,000 locks are supported.
+ </p>
+ <p>
+ To configure this value, use the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;set_lk_max_locks()</tt>
+
+ method.
+ </span>
+
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_locks</tt> parameter.
+ </p>
+ </li>
+ <li>
+ <p>
+ The maximum number of locked objects supported by the environment.
+ By default, 1,000 objects can be locked.
+ </p>
+ <p>
+ To configure this value, use the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;set_lk_max_objects()</tt>
+
+ method.
+ </span>
+
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_objects</tt> parameter.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For a definition of lockers, locks, and locked objects, see
+ <a href="blocking_deadlocks.html#lockresources">Lock Resources</a>.
+ </p>
+ <p>
+ For example, to configure the maximum number of locks that your
+ environment can use:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t env_flags;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ /* Configure max locks */
+ ret = envp-&gt;set_lk_max_locks(envp, 5000);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error configuring locks: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Open the environment. */
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+err:
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="configdeadlkdetect"></a>Configuring Deadlock Detection</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order for DB to know that a deadlock has occurred,
+ some mechanism must be used to perform deadlock
+ detection. There are three ways that deadlock detection can
+ occur:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Allow DB to internally detect deadlocks as they
+ occur.
+ </p>
+ <p>
+ To do this, you use
+ <span><tt class="methodname">DB_ENV-&gt;set_lk_detect()</tt>.</span>
+
+
+ This method causes DB to walk its internal lock table
+ looking for a deadlock whenever a lock request
+ is blocked. This method also identifies how DB decides which lock
+ requests are rejected when deadlocks are detected. For example,
+ DB can decide to reject the lock request for the transaction
+ that has the most number of locks, the least number of locks,
+ holds the oldest lock, holds the most number of write locks, and
+ so forth (see the API reference documentation for a complete
+ list of the lock detection policies).
+ </p>
+ <p>
+ You can call this method at any time during your application's
+ lifetime, but typically it is used before you open your environment.
+ </p>
+ <p>
+ Note that how you want DB to decide which thread of control should break a deadlock is
+ extremely dependent on the nature of your application. It is not unusual for some performance
+ testing to be required in order to make this determination. That said, a transaction that is
+ holding the maximum number of locks is usually indicative of the transaction that has performed
+ the most amount of work. Frequently you will not want a transaction that has performed a lot of
+ work to abandon its efforts and start all over again. It is not therefore uncommon for
+ application developers to initially select the transaction with the <span class="emphasis"><em>minimum</em></span>
+ number of write locks to break the deadlock.
+ </p>
+ <p>
+ Using this mechanism for deadlock detection means
+ that your application will never have to wait on a
+ lock before discovering that a deadlock has
+ occurred. However, walking the lock table every
+ time a lock request is blocked can be expensive
+ from a performance perspective.
+ </p>
+ </li>
+ <li>
+ <p>
+ Use a dedicated thread or external process to perform
+ deadlock detection. Note that this thread must be
+ performing no other database operations beyond deadlock
+ detection.
+ </p>
+ <p>
+ To externally perform lock detection, you can use
+ either the
+ <tt class="methodname">DB_ENV-&gt;lock_detect()</tt>
+
+
+ method, or use the
+ <span><b class="command">db_deadlock</b></span> command line
+ utility. This method (or command) causes DB to walk the
+ lock table looking for deadlocks.
+ </p>
+ <p>
+ Note that like
+ <span><tt class="methodname">DB_ENV-&gt;set_lk_detect()</tt>,</span>
+
+
+ you also use this method (or command line utility)
+ to identify which lock requests are rejected in the
+ event that a deadlock is detected.
+ </p>
+ <p>
+ Applications that perform deadlock detection in
+ this way typically run deadlock detection between every few
+ seconds and a minute. This means that your
+ application may have to wait to be notified of a
+ deadlock, but you also save the overhead of walking
+ the lock table every time a lock request is blocked.
+ </p>
+ </li>
+ <li>
+ <p>
+ Lock timeouts.
+ </p>
+ <p>
+ You can configure your locking subsystem such that
+ it times out any lock that is not released within a
+ specified amount of time. To do this, use the
+ <span><tt class="methodname">DB_ENV-&gt;set_timeout()</tt></span>
+
+
+ method.
+ Note that lock timeouts are only checked when a
+ lock request is blocked or when deadlock
+ detection is otherwise performed. Therefore, a lock can have timed out and still be held for
+ some length of time until DB has a reason to examine its locking tables.
+ </p>
+ <p>
+ Be aware that extremely long-lived transactions, or
+ operations that hold locks for a long time, may be
+ inappropriately timed out before the transaction or
+ operation has a chance to complete. You should
+ therefore use this mechanism only if you know your
+ application will hold locks for very short periods
+ of time.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For example, to configure your application such that DB
+ checks the lock table for deadlocks every time a lock
+ request is blocked:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ /*
+ * Configure db to perform deadlock detection internally, and to
+ * choose the transaction that has performed the least amount of writing
+ * to break the deadlock in the event that one is detected.
+ */
+ ret = envp-&gt;set_lk_detect(envp, DB_LOCK_MINWRITE);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting lk detect: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * From here, you open your databases, proceed with your
+ * database operations, and respond to deadlocks as
+ * is normal (omitted for brevity).
+ */
+
+ ... </pre>
+ <p>
+ Finally, the following command line call causes
+ deadlock detection to be run against the
+ environment contained in <tt class="literal">/export/dbenv</tt>. The
+ transaction with the youngest lock is chosen to break the
+ deadlock:
+ </p>
+ <pre class="programlisting">&gt; /usr/local/db_install/bin/db_deadlock -h /export/dbenv -a y</pre>
+ <p>
+ For more information, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/utility/db_deadlock.html" target="_top">
+ <tt class="literal">db_deadlock</tt> reference documentation.
+ </a>
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="deadlockresolve"></a>Resolving Deadlocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When DB determines that a deadlock has occurred, it will
+ select a thread of control to resolve the deadlock and then
+ <span>
+ return <tt class="literal">DB_LOCK_DEADLOCK</tt> to that
+ thread.
+ </span>
+
+
+
+ If a deadlock is detected, the thread must:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Cease all read and write operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Close all open cursors.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort the transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally retry the operation. If your application
+ retries deadlocked operations, the new attempt must
+ be made using a new transaction.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If a thread has deadlocked, it may not make any
+ additional database calls using the handle that has
+ deadlocked.
+ </p>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">retry:
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn_begin failed&quot;);
+ return (EXIT_FAILURE);
+ }
+ ...
+ /* key and data are Dbts. Their usage is omitted for brevity. */
+ ...
+ switch (ret = dbp-&gt;put(dbp, txn, &amp;key, &amp;data, 0)) {
+ case 0:
+ break;
+ /* Deadlock handling goes here */
+ case DB_LOCK_DEADLOCK:
+ /* Abort the transaction */
+ (void)txn-&gt;abort(txn);
+
+ /*
+ * retry_count is a counter used to identify how many times
+ * we've retried this operation. To avoid the potential for
+ * endless looping, we won't retry more than
+ * MAX_DEADLOCK_RETRIES times.
+ */
+ if (retry_count &lt; MAX_DEADLOCK_RETRIES) {
+ printf(&quot;Got DB_LOCK_DEADLOCK.\n&quot;);
+ printf(&quot;Retrying write operation.\n&quot;);
+ retry_count++;
+ goto retry;
+ }
+ printf(&quot;Got DB_LOCK_DEADLOCK and out of retries.&quot;);
+ printf(&quot;Giving up.\n&quot;);
+ return (EXIT_FAILURE);
+ default:
+ /* If some random database error occurs, we just give up */
+ envp-&gt;err(envp, ret, &quot;db put failed&quot;);
+ ret = txn-&gt;abort(txn);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn abort failed&quot;);
+ return (EXIT_FAILURE);
+ }
+ }
+ /* If all goes well, commit the transaction */
+ ret = txn-&gt;commit(txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn commit failed&quot;);
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS); </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="blocking_deadlocks.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="isolation.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Locks, Blocks, and Deadlocks </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Isolation</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/logconfig.html b/db/docs/gsg_txn/C/logconfig.html
new file mode 100644
index 000000000..3a5485ca8
--- /dev/null
+++ b/db/docs/gsg_txn/C/logconfig.html
@@ -0,0 +1,444 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Configuring the Logging Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="logfileremoval.html" title="Removing Log Files" />
+ <link rel="next" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Configuring the Logging Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="logfileremoval.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="wrapup.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="logconfig"></a>Configuring the Logging Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure the following aspects of the logging
+ subsystem:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Size of the log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Size of the logging subsystem's region.
+ See <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Maintain logs entirely in-memory.
+ See <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Size of the log buffer in memory.
+ See <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ On-disk location of your log files. See
+ <a href="enabletxn.html#splittingdata">Identifying Specific File Locations</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logfilesize"></a>Setting the Log File Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Whenever a pre-defined amount of data is written to a
+ log file (10 MB by default), DB stops using the
+ current log file and starts writing to a new file.
+ You can change the maximum amount of data contained in each
+ log file by using the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;set_lg_max()</tt>
+
+ method.
+ </span>
+
+ Note that this method can be used at any time
+ during an application's lifetime.
+ </p>
+ <p>
+ Setting the log file size to something larger than its
+ default value is largely a matter of
+ convenience and a reflection of the application's
+ preference in backup media and frequency. However, if
+ you set the log file size too low relative to your
+ application's traffic patterns, you can cause
+ yourself trouble.
+ </p>
+ <p>
+ From a performance perspective, setting the log file
+ size to a low value can cause your active transactions to
+ pause their writing activities more frequently than would
+ occur with larger log file sizes. Whenever a
+ transaction completes the log buffer is flushed to
+ disk. Normally other transactions can continue to
+ write to the log buffer while this flush is in
+ progress. However, when one log file is being closed
+ and another created, all transactions must cease
+ writing to the log buffer until the switch over is
+ completed.
+ </p>
+ <p>
+ Beyond performance concerns, using smaller log files
+ can cause you to use more physical files on disk.
+ As a result, your application could run out
+ of log sequence numbers, depending on how busy your
+ application is.
+ </p>
+ <p>
+ Every log file is identified with a 10 digit number.
+ Moreover, the maximum number of log files that your application
+ is allowed to create in its lifetime is 2,000,000,000.
+ </p>
+ <p>
+ For example, if your application performs 6,000 transactions per
+ second for 24 hours a day, and you are logging 500 bytes of
+ data per transaction into 10 MB log files, then you
+ will run out of log files in around 221 years:
+ </p>
+ <pre class="programlisting"> (10 * 2^20 * 2000000000) / (6000 * 500 * 365 * 60 *60 * 24) = 221 </pre>
+ <p>
+ However, if you were writing 2000 bytes of data per
+ transaction, and using 1 MB log files, then the same
+ formula shows you running out of log files in 5 years time.
+ </p>
+ <p>
+ All of these time frames are quite long, to be sure,
+ but if you do run out of log files after, say, 5 years
+ of continuous operations, then you must reset your log
+ sequence numbers. To do so:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Backup your databases as if to prepare for
+ catastrophic failure. See
+ <a href="backuprestore.html">Backup Procedures</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reset the log file's sequence number using the
+ <span><b class="command">db_load</b></span> utility's
+ <tt class="literal">-r</tt> option.
+ </p>
+ </li>
+ <li>
+ <p>
+ Remove all of the log files from your
+ environment. Note that this is the only
+ situation in which all of the log files are
+ removed from an environment; in all other
+ cases, at least a single log file is retained.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restart your application.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logregionsize"></a>Configuring the Logging Region Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The logging subsystem's default region size is 60 KB. The
+ logging region is used to store filenames, and so you may
+ need to increase its size if a large number of files (that
+ is, if you have a very large number of databases) will
+ be opened and registered with DB's log manager.
+ </p>
+ <p>
+ You can set the size of your logging region by using the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;set_lg_regionmax()</tt>
+
+ </span>
+
+ method. Note that this method can only be called before the
+ first environment handle for your application is opened.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="inmemorylogging"></a>Configuring In-Memory Logging</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is possible to configure your logging subsystem such
+ that logs are maintained entirely in memory. When
+ you do this, you give up your transactional durability
+ guarantee. Without log files, you have no way to run
+ recovery so any system or software failures that you might
+ experience can corrupt your databases.
+ </p>
+ <p>
+ However, by giving up your durability guarantees, you can
+ greatly improve your application's throughput by avoiding
+ the disk I/O necessary to write logging information to
+ disk. In this case, you still retain your transactional
+ atomicity, consistency, and isolation guarantees.
+ </p>
+ <p>
+ To configure your logging subsystem to maintain your logs
+ entirely in-memory:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure your log buffer is capable of holding all
+ log information that can accumulate during the longest
+ running transaction. See <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a> for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not run normal recovery when you open your environment. In this configuration, there are no
+ log files available against which you can run recovery. As a result, if you specify recovery
+ when you open your environment, it is ignored.
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify
+ <span>
+ <tt class="literal">DB_LOG_INMEMORY</tt> to the
+ <tt class="methodname">DB_ENV-&gt;set_flags()</tt>
+
+ </span>
+
+ method. Note that you must specify this before
+ your application opens its first environment
+ handle.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+
+ envp = NULL;
+
+ /* Create the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /*
+ * Indicate that logging is to be performed only in memory.
+ * Doing this means that we give up our transactional durability
+ * guarantee.
+ */
+ envp-&gt;set_flags(envp, DB_LOG_INMEMORY, 1);
+
+ /*
+ * Configure the size of our log memory buffer. This must be
+ * large enough to hold all the logging information likely
+ * to be created for our longest running transaction. The
+ * default size for the logging buffer is 1 MB when logging
+ * is performed in-memory. For this example, we arbitrarily
+ * set the logging buffer to 5 MB.
+ */
+ ret = envp-&gt;set_lg_bsize(envp, 5 * 1024 * 1024);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting log buffer size: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Set the normal flags for a transactional subsystem. Note that
+ * we DO NOT specify DB_RECOVER. Also, remember that the logging
+ * subsystem is automatically enabled when we initialize the
+ * transactional subsystem, so we do not explicitly enable
+ * logging here.
+ */
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ /* Open the environment as normal */
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+
+ /*
+ * From here, you create transactions and perform database operations
+ * exactly as you would if you were logging to disk. This part is
+ * omitted for brevity.
+ */
+
+ ...
+
+err:
+ /* Close the databases (omitted) */
+
+ ...
+
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logbuffer"></a>Setting the In-Memory Log Buffer Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When your application is configured for on-disk logging
+ (the default behavior for transactional applications), log
+ information is stored in-memory until the storage space
+ fills up, or a transaction commit forces the log
+ information to be flushed to disk.
+ </p>
+ <p>
+ It is possible to increase the amount of memory available
+ to your file log buffer. Doing so improves throughput for
+ long-running transactions, or for transactions that produce
+ a large amount of data.
+ </p>
+ <p>
+ When you have your logging subsystem configured to maintain
+ your log entirely in memory (see
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>), it is very important
+ to configure your log buffer size because the log buffer
+ must be capable of holding all log information that can
+ accumulate during the longest running transaction.
+ You must make sure that the in-memory log buffer size is
+ large enough that no transaction will ever span the entire
+ buffer. You must also avoid a state where the in-memory
+ buffer is full and no space can be freed because a
+ transaction that started the first log &quot;file&quot; is still
+ active.
+ </p>
+ <p>
+ When your logging subsystem is configured for on-disk
+ logging, the default log buffer space is 32 KB. When
+ in-memory logging is configured, the default log buffer
+ space is 1 MB.
+ </p>
+ <p>
+ You can increase your log buffer space using the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;set_lg_bsize()</tt>
+
+ </span>
+
+ method. Note that this method can only be called before the
+ first environment handle for your application is opened.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="logfileremoval.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="wrapup.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Removing Log Files </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 6. Summary and Examples</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/logfileremoval.html b/db/docs/gsg_txn/C/logfileremoval.html
new file mode 100644
index 000000000..0ed044eb3
--- /dev/null
+++ b/db/docs/gsg_txn/C/logfileremoval.html
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Removing Log Files</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="hotfailover.html" title="Using Hot Failovers" />
+ <link rel="next" href="logconfig.html" title="Configuring the Logging Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Removing Log Files</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="hotfailover.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="logconfig.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="logfileremoval"></a>Removing Log Files</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default DB does not delete log files for you. For this reason,
+ DB's log files will eventually grow to consume an
+ unnecessarily large amount of disk space. To guard against
+ this, you should periodically take administrative action to
+ remove log files that are no longer in use by your application.
+ </p>
+ <p>
+ You can remove a log file if all of the following are true:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ the log file is not involved in an active transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ a checkpoint has been performed
+ <span class="emphasis"><em>after</em></span> the log file was
+ created.
+ </p>
+ </li>
+ <li>
+ <p>
+ the log file is not the only log file in the
+ environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ the log file that you want to remove has already been
+ included in an offline or hot backup.
+ Failure to observe this last condition can cause your
+ backups to be unusable.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ DB provides several mechanisms to remove log files that
+ meet all but the last criteria (DB has no way to know which
+ log files have already been included in a backup). The
+ following mechanisms make it easy to remove unneeded log files,
+ but can result in an unusable backup if the log files are not first
+ saved to your archive location. All of the following
+ mechanisms automatically delete unneeded log files for you:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option.
+ </p>
+ </li>
+ <li>
+ <p>
+ From within your application, call the
+ <span>
+ <tt class="methodname">DB_ENV-&gt;log_archive()</tt>
+
+ method with the <tt class="literal">DB_ARCH_REMOVE</tt> flag.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>
+ Call
+ <tt class="methodname">DB_ENV-&gt;set_flags()</tt>
+
+ method with the <tt class="literal">DB_LOG_AUTOREMOVE</tt> flag.
+ Note that this flag can be set at any point in
+ the lifetime of your application. Setting this
+ parameter affects all environment handles
+ opened against the environment; not just the
+ handle used to set the flag.
+ </span>
+
+ </p>
+ <p>
+ Note that unlike the other log removal mechanisms
+ identified here, this method actually causes log files
+ to be removed on an on-going basis as they become
+ unnecessary. This is extremely desirable behavior if
+ what you want is to use the absolute minimum amount of
+ disk space possible for your application. This
+ mechanism <span class="emphasis"><em>will</em></span> leave you with
+ the log files that are required to run normal recovery.
+ However, it is highly likely that this mechanism will
+ prevent you from running catastrophic recovery.
+ </p>
+ <p>
+ Do NOT use this mechanism if you want to be able to
+ perform catastrophic recovery, or if you want to be
+ able to maintain a hot backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ In order to safely remove log files and still be able to
+ perform catastrophic recovery, use the
+ <span><b class="command">db_archive</b></span> command line utility as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Run either a normal or hot backup as described in
+ <a href="backuprestore.html">Backup Procedures</a>. Make
+ sure that all of this data is safely stored to your
+ backup media before continuing.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you have not already done so, perform a checkpoint.
+ See <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are maintaining a hot backup, perform the hot
+ backup procedure as described in
+ <a href="hotfailover.html">Using Hot Failovers</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option against
+ your production environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option against
+ your failover environment, if you are maintaining one.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="hotfailover.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="logconfig.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Using Hot Failovers </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Configuring the Logging Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/maxtxns.html b/db/docs/gsg_txn/C/maxtxns.html
new file mode 100644
index 000000000..311587dbf
--- /dev/null
+++ b/db/docs/gsg_txn/C/maxtxns.html
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Configuring the Transaction Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
+ <link rel="next" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Configuring the Transaction Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnconcurrency.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="maxtxns"></a>Configuring the Transaction Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Most of the configuration activities that you need to perform
+ for your transactional DB application will involve the
+ locking and logging subsystems. See
+ <a href="txnconcurrency.html">Concurrency</a>
+ and
+ <a href="filemanagement.html">Managing DB Files</a>
+ for details.
+ </p>
+ <p>
+ However, there are a couple of things that you can do to
+ configure your transaction subsystem directly. These things
+ are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Configure the maximum number of simultaneous
+ transactions needed by your application.
+ In general, you should not need to do this unless you
+ use deeply nested transactions or you have many threads all
+ of which have active transactions. In addition, you may
+ need to a higher maximum number of transactions if you
+ are using snapshot isolation. See
+ <a href="isolation.html#sisolation_maxtxn">Snapshot Isolation Transactional Requirements</a>
+ for details.
+ </p>
+ <p>
+ By default, your application can support 20 active
+ transactions.
+ </p>
+ <p>
+ You can set the maximum number of simultaneous
+ transactions supported by your application using
+ <span>
+ the
+ <tt class="methodname">DB_ENV-&gt;set_tx_max()</tt>
+
+ method. Note that this method must be called
+ before the environment has been opened.
+ </span>
+
+ </p>
+ <p>
+ If your application has exceeded this maximum value,
+ then any attempt to begin a new transaction will fail.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_tx_max</tt> parameter. Remember that
+ the <tt class="literal">DB_CONFIG</tt> must reside in your
+ environment home directory.
+ </p>
+ </li>
+ <li>
+ <span>
+ <p>
+ <span>
+ Configure the timeout value for your transactions.
+ </span>
+
+
+ This value represents the longest period of time a
+ transaction can be active. Note, however, that
+ transaction timeouts are checked only when DB
+ examines its lock tables for blocked locks
+ (see <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information). Therefore, a transaction's timeout can
+ have expired, but the application will not be notified until DB
+ has a reason to examine its lock tables.
+ </p>
+ <p>
+ Be aware that some transactions may be
+ inappropriately timed out before the transaction has a
+ chance to complete. You should therefore use this
+ mechanism only if you know your application
+ might have unacceptably long transactions and
+ you want to make sure your application will
+ not stall during their execution.
+ (This might happen if, for example, your
+ transaction blocks or requests too much
+ data.)
+ </p>
+ <p>
+ Note that by default transaction timeouts are set to 0 seconds, which means that they never time
+ out.
+ </p>
+ <p>
+ To set the maximum timeout value for your transactions,
+ use the
+ <span><tt class="methodname">DB_ENV-&gt;set_timeout()</tt></span>
+
+
+ method. This method configures the entire
+ environment; not just the handle used to set the
+ configuration. Further, this value may
+ be set at any time during the application's
+ lifetime.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_txn_timeout</tt> parameter.
+ </p>
+
+</span>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN; /* Initialize transactions */
+
+ /*
+ * Configure a maximum transaction timeout of 1 second.
+ */
+ ret = envp-&gt;set_timeout(envp, DB_SET_TXN_TIMEOUT, 1000000);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting txn timeout: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Configure 40 maximum transactions.
+ */
+ ret = envp-&gt;set_tx_max(envp, 40);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting max txns: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * From here, you open your databases, proceed with your
+ * database operations, and respond to deadlocks as
+ * is normal (omitted for brevity).
+ */
+ ... </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnconcurrency.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Secondary Indices with Transaction Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 4. Concurrency</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/nestedtxn.html b/db/docs/gsg_txn/C/nestedtxn.html
new file mode 100644
index 000000000..c202d794d
--- /dev/null
+++ b/db/docs/gsg_txn/C/nestedtxn.html
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Nested Transactions</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="autocommit.html" title="Auto Commit" />
+ <link rel="next" href="txncursor.html" title="Transactional Cursors" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Nested Transactions</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="autocommit.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="nestedtxn"></a>Nested Transactions</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A <span class="emphasis"><em>nested transaction</em></span> is used to provide a
+ transactional guarantee for a subset of operations performed within
+ the scope of a larger transaction. Doing this allows you to commit
+ and abort the subset of operations independently of the larger
+ transaction.
+ </p>
+ <p>
+ The rules to the usage of a nested transaction are as follows:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ While the nested (child) transaction is active, the parent
+ transaction may not perform any operations other than to commit
+ or abort, or to create more child transactions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Committing a nested transaction has no effect on the state
+ of the parent transaction. The parent transaction is still
+ uncommitted. However, the parent transaction can now
+ see any modifications made by the child transaction.
+ Those modifications, of course, are still hidden to all
+ other transactions until the parent also commits.
+ </p>
+ </li>
+ <li>
+ <p>
+ Likewise, aborting the nested transaction has no effect on
+ the state of the parent transaction. The only result of the
+ abort is that neither the parent nor any
+ other transactions will see any of the
+ database modifications performed under the protection of the
+ nested transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the parent transaction commits or aborts while it has
+ active children, the child transactions are resolved in the
+ same way as the parent. That is, if the parent aborts, then
+ the child transactions abort as well. If the parent commits,
+ then whatever modifications have been performed by the child
+ transactions are also committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ The locks held by a nested transaction are not released when
+ that transaction commits. Rather, they are now held by the
+ parent transaction until such a time as that parent commits.
+ </p>
+ </li>
+ <li>
+ <p>
+ Any database modifications performed by the nested transaction
+ are not visible outside of the larger encompassing
+ transaction until such a time as that parent transaction is
+ committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ The depth of the nesting that you can achieve with nested
+ transaction is limited only by memory.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ To create a nested transaction, simply pass the parent transaction's
+ handle when you created the nested transaction's handle. For
+ example:
+ </p>
+ <pre class="programlisting"> /* parent transaction */
+ DB_TXN *parent_txn, *child_txn;
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;parent_txn, 0);
+ /* child transaction */
+ ret = envp-&gt;txn_begin(envp, parent_txn, &amp;child_txn, 0); </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="autocommit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Auto Commit </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transactional Cursors</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/perftune-intro.html b/db/docs/gsg_txn/C/perftune-intro.html
new file mode 100644
index 000000000..e9dff26fc
--- /dev/null
+++ b/db/docs/gsg_txn/C/perftune-intro.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Performance Tuning</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="recovery-intro.html" title="Recoverability" />
+ <link rel="next" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Performance Tuning</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="recovery-intro.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="enabletxn.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="perftune-intro"></a>Performance Tuning</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From a performance perspective, the use of transactions is not free.
+ Depending on how you configure them, transaction commits
+ usually require your application to perform disk I/O that a non-transactional
+ application does not perform. Also, for multi-threaded
+ <span>and
+ multi-process</span> applications, the use of transactions can
+ result in increased lock contention due to extra locking
+ requirements driven by transactional isolation guarantees.
+ </p>
+ <p>
+ There is therefore a performance tuning component to transactional applications
+ that is not applicable for non-transactional applications (although
+ some tuning considerations do exist whether or not your application uses
+ transactions). Where appropriate, these tuning considerations are
+ introduced in the following chapters.
+
+ <span>
+ However, for a more complete description of them, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/tune.html" target="_top">
+ Transaction tuning
+ </a>
+ and
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/throughput.html" target="_top">
+ Transaction throughput
+ </a>
+ sections of the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="recovery-intro.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="enabletxn.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Recoverability </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 2. Enabling Transactions</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/preface.html b/db/docs/gsg_txn/C/preface.html
new file mode 100644
index 000000000..e0a70ee9f
--- /dev/null
+++ b/db/docs/gsg_txn/C/preface.html
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Preface</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="next" href="introduction.html" title="Chapter 1. Introduction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Preface</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="preface" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="preface"></a>Preface</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This document describes how to use transactions with your Berkeley DB
+ applications. It is intended to describe how to
+ transaction protect your application's data. The APIs used to perform this task
+ are described here, as are the environment infrastructure and administrative tasks
+ required by a transactional application. This book also
+ describes multi-threaded <span>and
+ multi-process</span> DB applications and the requirements they
+ have for deadlock detection.
+ </p>
+ <p>
+ This book is aimed at the software engineer responsible for writing a
+ transactional DB application.
+ </p>
+ <p>
+ This book assumes that you have already read and understood the
+ concepts contained in the
+ <span><i class="citetitle">Getting Started with Berkeley DB</i>
+ guide.</span>
+
+
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="conventions"></a>Conventions Used in this Book</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following typographical conventions are used within in this manual:
+ </p>
+ <p>
+ Structure names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
+ names</tt>. For example: &quot;<tt class="methodname">DB-&gt;open()</tt> is a method
+ on a <tt class="classname">DB</tt> handle.&quot;
+ </p>
+ <p>
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
+ </p>
+ <p>
+ Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
+ For example:
+ </p>
+ <pre class="programlisting">/* File: gettingstarted_common.h */
+typedef struct stock_dbs {
+ DB *inventory_dbp; /* Database containing inventory information */
+ DB *vendor_dbp; /* Database containing vendor information */
+
+ char *db_home_dir; /* Directory containing the database files */
+ char *inventory_db_name; /* Name of the inventory database */
+ char *vendor_db_name; /* Name of the vendor database */
+} STOCK_DBS; </pre>
+ <p>
+ In some situations, programming examples are updated from one chapter to the next. When
+ this occurs, the new code is presented in <b class="userinput"><tt>monospaced bold</tt></b> font. For example:
+ </p>
+ <pre class="programlisting">typedef struct stock_dbs {
+ DB *inventory_dbp; /* Database containing inventory information */
+ DB *vendor_dbp; /* Database containing vendor information */
+ <b class="userinput"><tt>DB *itemname_sdbp; /* Index based on the item name index */</tt></b>
+ char *db_home_dir; /* Directory containing the database files */
+ <b class="userinput"><tt>char *itemname_db_name; /* Itemname secondary database */</tt></b>
+ char *inventory_db_name; /* Name of the inventory database */
+ char *vendor_db_name; /* Name of the vendor database */
+} STOCK_DBS; </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Finally, notes of special interest are represented using a note block such
+ as this.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ transactional DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/C/index.html" target="_top">
+ Getting Started with Berkeley DB for C
+ </a>
+
+
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/C/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for C
+ </a>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/frame.html" target="_top">
+ Berkeley DB C API
+ </a>
+
+
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Getting Started with Berkeley DB Transaction Processing </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/readblock.jpg b/db/docs/gsg_txn/C/readblock.jpg
new file mode 100644
index 000000000..16a511feb
--- /dev/null
+++ b/db/docs/gsg_txn/C/readblock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/C/readmodifywrite.html b/db/docs/gsg_txn/C/readmodifywrite.html
new file mode 100644
index 000000000..4d6241614
--- /dev/null
+++ b/db/docs/gsg_txn/C/readmodifywrite.html
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Read/Modify/Write</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txn_ccursor.html" title="Transactional Cursors and Concurrent Applications" />
+ <link rel="next" href="txnnowait.html" title="No Wait on Blocks" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Read/Modify/Write</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txn_ccursor.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnnowait.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="readmodifywrite"></a>Read/Modify/Write</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If you are retrieving
+ <span>a record from the database</span>
+
+ for the purpose of modifying or deleting it, you should declare
+ a read-modify-write cycle at the time that you read the
+ <span>record.</span>
+
+ Doing so causes DB to obtain write locks (instead of a read
+ locks) at the time of the read. This helps to prevent deadlocks by
+ preventing another transaction from acquiring a read lock on the same
+ record while the read-modify-write cycle is in progress.
+ </p>
+ <p>
+ Note that declaring a read-modify-write cycle may actually increase the amount of blocking that your
+ application sees, because readers immediately obtain write locks and write locks cannot be shared. For this
+ reason, you should use read-modify-write cycles only if you are seeing a large amount of deadlocking
+ occurring in your application.
+ </p>
+ <p>
+ In order to declare a read/modify/write cycle when you perform a
+ read operation,
+
+ <span>
+ pass the <tt class="literal">DB_RMW</tt> flag
+ <span>
+ to the database or cursor get method.
+ </span>
+
+
+ </span>
+
+
+
+
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">retry:
+ /* Get the transaction */
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn_begin failed&quot;);
+ return (EXIT_FAILURE);
+ }
+ ...
+ /* key and data are Dbts. Their usage is omitted for brevity. */
+ ...
+ /* Get the data. Declare the read/modify/write cycle here */
+ ret = dbp-&gt;get(dbp, txn, &amp;key, &amp;data, DB_RMW);
+
+ ...
+ /* Modify the key and data as is required (not shown here) */
+ ...
+
+ /* Put the data. Note that you do not have to provide any additional
+ * flags here due to the read/modify/write cycle. Simply put the
+ * data and perform your deadlock detection as normal.
+ */
+ ret = dbp-&gt;put(dbp, txn, &amp;key, &amp;data, 0);
+ switch (ret) {
+ /* Deadlock detection omitted for brevity */
+ .... </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txn_ccursor.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnnowait.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transactional Cursors and Concurrent Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> No Wait on Blocks</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/recovery-intro.html b/db/docs/gsg_txn/C/recovery-intro.html
new file mode 100644
index 000000000..ee490b9ba
--- /dev/null
+++ b/db/docs/gsg_txn/C/recovery-intro.html
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Recoverability</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="next" href="perftune-intro.html" title="Performance Tuning" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Recoverability</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="perftune-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="recovery-intro"></a>Recoverability</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ An important part of DB's transactional guarantees is durability.
+ <span class="emphasis"><em>Durability</em></span> means that once a
+ transaction has been committed, the database modifications performed
+ under its protection will not be lost due to system failure.
+ </p>
+ <p>
+ In order to provide the transactional durability guarantee,
+ DB uses a write-ahead logging system. Every operation performed on
+ your databases is described in a log before it is performed on
+ your databases. This is done in order to ensure that an operation can be
+ recovered in the event of an untimely application
+ or system failure.
+ </p>
+ <p>
+ <span>
+ Beyond logging, another important aspect of durability is
+ recoverability. That is, backup and restore. </span>
+
+ DB supports a normal recovery that runs against a subset of
+ your log files. This is a routine procedure used whenever your
+ environment is first opened upon application startup, and it is intended to
+ ensure that your database is in a consistent state. DB also
+ supports archival backup and recovery in the case of
+ catastrophic failure, such as the loss of a physical disk
+ drive.
+ </p>
+ <p>
+ This book describes several different backup procedures
+ you can use to protect your on-disk data. These procedures
+ range from simple offline backup strategies to hot failovers. Hot failovers
+ provide not only a backup mechanism, but
+ also a way to recover from a fatal hardware failure.
+ </p>
+ <p>
+ This book also describes the recovery procedures you should use
+ for each of the backup strategies that you might employ.
+ </p>
+ <p>
+ For a detailed description of backup and restore procedures, see
+ <span>
+ <a href="filemanagement.html">Managing DB Files</a>.
+ </span>
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="perftune-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Performance Tuning</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/recovery.html b/db/docs/gsg_txn/C/recovery.html
new file mode 100644
index 000000000..fdf872d9e
--- /dev/null
+++ b/db/docs/gsg_txn/C/recovery.html
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Recovery Procedures</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="backuprestore.html" title="Backup Procedures" />
+ <link rel="next" href="architectrecovery.html" title="Designing Your Application for Recovery" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Recovery Procedures</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="backuprestore.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="architectrecovery.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="recovery"></a>Recovery Procedures</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB supports two types of recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Normal recovery, which is run when your environment is
+ opened upon application startup, examines only those
+ log records needed to bring the databases to a consistent
+ state since the last checkpoint. Normal recovery
+ starts with any logs used by any transactions active at
+ the time of the last checkpoint, and examines all logs
+ from then to the current logs.
+ </p>
+ </li>
+ <li>
+ <p>
+ Catastrophic recovery, which is performed in the same
+ way that normal recovery is except that it examines
+ all available log files. You use catastrophic recovery
+ to restore your databases from a previously created backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these two, normal recovery should be considered a routine
+ matter; in fact you should run normal
+ recovery whenever you start up your application.
+ </p>
+ <p>
+ Catastrophic recovery is run whenever you have lost or
+ corrupted your database files and you want to restore from a
+ backup. You also run catastrophic recovery when
+ you create a hot backup
+ (see <a href="hotfailover.html">Using Hot Failovers</a> for more information).
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="normalrecovery"></a>Normal Recovery</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Normal recovery examines the contents of your environment's
+ log files, and uses this information to ensure that your
+ database files are consistent relative to the
+ information contained in the log files.
+ </p>
+ <p>
+ Normal recovery also recreates your environment's region files.
+ This has the desired effect of clearing any unreleased locks
+ that your application may have held at the time of an
+ unclean application shutdown.
+ </p>
+ <p>
+ Normal recovery is run only against those log files created
+ since the time of your last checkpoint. For this reason,
+ your recovery time is dependent on how much data has been
+ written since the last checkpoint, and therefore on how
+ much log file information there is to examine. If you run
+ checkpoints infrequently, then normal recovery can
+ take a relatively long time.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ You should run normal recovery every
+ time you perform application startup.
+ </p>
+ </div>
+ <p>
+ To run normal recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure all your environment handles are closed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Normal recovery <span class="emphasis"><em>must
+ be</em></span> single-threaded.
+ </p>
+ </li>
+ <li>
+ <p>
+ Provide the <tt class="literal">DB_RECOVER</tt> flag when
+ you open your environment.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ You can also run recovery by pausing or shutting down your
+ application and using the <span><b class="command">db_recover</b></span>
+ command line utility.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret;
+ u_int32_t env_flags;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /* Open the environment, specifying that recovery is to be run. */
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_RECOVER; /* Run normal recovery */
+
+ /* Open the environment. */
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ ...
+ /*
+ * All other operations are identical from here. Notice, however,
+ * that we have not created any other threads of control before
+ * recovery is complete. You want to run recovery for
+ * the first thread in your application that opens an environment,
+ * but not for any subsequent threads.
+ */ </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="catastrophicrecovery"></a>Catastrophic Recovery</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Use catastrophic recovery when you are
+ recovering your databases from a previously created backup.
+ Note that to restore your databases from a previous backup, you
+ should copy the backup to a new environment directory, and
+ then run catastrophic recovery. Failure to do so can lead to
+ the internal database structures being out of sync with your log files.
+ </p>
+ <p>
+ Catastrophic recovery must be run single-threaded.
+ </p>
+ <p>
+ To run catastrophic recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Shutdown all database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restore the backup to an empty directory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Provide the <tt class="literal">DB_RECOVER_FATAL</tt> flag when
+ you open your environment. This environment open
+ must be single-threaded.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ You can also run recovery by pausing or shutting down your
+ application and using the <span><b class="command">db_recover</b></span>
+ command line utility with the the <tt class="literal">-c</tt> option.
+ </p>
+ <p>
+ Note that catastrophic recovery examines every available
+ log file &#8212; not just those log files created since the
+ last checkpoint as is the case for normal recovery. For this reason,
+ catastrophic recovery is likely to take longer than does
+ normal recovery.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret;
+ u_int32_t env_flags;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /* Open the environment, specifying that recovery is to be run. */
+ env_flags = DB_CREATE | /* If the environment does not
+ * exist, create it. */
+ DB_INIT_LOCK | /* Initialize locking */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL | /* Initialize the cache */
+ DB_THREAD | /* Free-thread the env handle. */
+ DB_INIT_TXN | /* Initialize transactions */
+ <b class="userinput"><tt>DB_RECOVER_FATAL; /* Run catastrophic recovery */</tt></b>
+
+ /* Open the environment. */
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ ...
+ /*
+ * All other operations are identical from here. Notice, however,
+ * that we have not created any other threads of control before
+ * recovery is complete. You want to run recovery for
+ * the first thread in your application that opens an environment,
+ * but not for any subsequent threads.
+ */ </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="backuprestore.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="architectrecovery.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Backup Procedures </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Designing Your Application for Recovery</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/reversesplit.html b/db/docs/gsg_txn/C/reversesplit.html
new file mode 100644
index 000000000..b35db1a81
--- /dev/null
+++ b/db/docs/gsg_txn/C/reversesplit.html
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Reverse BTree Splits</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txnnowait.html" title="No Wait on Blocks" />
+ <link rel="next" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Reverse BTree Splits</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnnowait.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="filemanagement.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="reversesplit"></a>Reverse BTree Splits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If your application is using the Btree access method, and your
+ application is repeatedly deleting then adding records to your
+ database, then you might be able to reduce lock contention by
+ turning off reverse Btree splits.
+ </p>
+ <p>
+ As pages are emptied in a database, DB attempts to
+ delete empty pages in order to keep
+ the database as small as possible and minimize search time.
+ Moreover, when a page in the database fills
+ up, DB, of course, adds additional pages
+ to make room for more data.
+ </p>
+ <p>
+ Adding and deleting pages in the database requires that the
+ writing thread lock the parent page. Consequently, as the
+ number of pages in your database diminishes, your application
+ will see increasingly more lock contention; the maximum level
+ of concurrency in a database of two pages is far smaller than
+ that in a database of 100 pages, because there are fewer pages
+ that can be locked.
+ </p>
+ <p>
+ Therefore, if you prevent the database from being reduced to a
+ minimum number of pages, you can improve your application's
+ concurrency throughput. Note, however, that you should do so
+ only if your application tends to delete and then add the same
+ data. If this is not the case, then preventing reverse Btree
+ splits can harm your database search time.
+ </p>
+ <p>
+ To turn off reverse Btree splits,
+ <span>
+ provide the
+ <tt class="literal">DB_REVSPLITOFF</tt> flag to the
+ <tt class="methodname">DB-&gt;set_flags()</tt>
+
+ method.
+ </span>
+
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE |
+ DB_INIT_LOCK |
+ DB_INIT_LOG |
+ DB_INIT_TXN |
+ DB_THREAD |
+ DB_INIT_MPOOL;
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ /* Set btree reverse split to off */
+ ret = db-&gt;set_flags(&amp;db, DB_REVSPLITOFF);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Turning off Btree reverse split failed&quot;);
+ goto err;
+ }
+
+ db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+
+err:
+ /* Close the database */
+ if (dbp != NULL) {
+ ret_c = dbp-&gt;close(dbp, 0);
+ if (ret_c != 0) {
+ envp-&gt;err(envp, ret_c, &quot;Database close failed.&quot;);
+ ret = ret_c
+ }
+ }
+
+
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnnowait.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="filemanagement.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">No Wait on Blocks </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 5. Managing DB Files</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/rwlocks1.jpg b/db/docs/gsg_txn/C/rwlocks1.jpg
new file mode 100644
index 000000000..0fc88fd31
--- /dev/null
+++ b/db/docs/gsg_txn/C/rwlocks1.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/C/simplelock.jpg b/db/docs/gsg_txn/C/simplelock.jpg
new file mode 100644
index 000000000..8dca4ad82
--- /dev/null
+++ b/db/docs/gsg_txn/C/simplelock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/C/txn_ccursor.html b/db/docs/gsg_txn/C/txn_ccursor.html
new file mode 100644
index 000000000..a7e040d9c
--- /dev/null
+++ b/db/docs/gsg_txn/C/txn_ccursor.html
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transactional Cursors and Concurrent Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="isolation.html" title="Isolation" />
+ <link rel="next" href="readmodifywrite.html" title="Read/Modify/Write" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transactional Cursors and Concurrent Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="isolation.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="readmodifywrite.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txn_ccursor"></a>Transactional Cursors and Concurrent Applications</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When you use transactional cursors with a concurrent application, remember that
+ in the event of a deadlock you must make sure that you close your cursor before you abort and retry your
+ transaction.
+ </p>
+ <p>
+ Also, remember that when you are using the default isolation level,
+ every time your cursor reads a record it locks
+ that record until the encompassing transaction is resolved. This
+ means that walking your database with a transactional cursor
+ increases the chance of lock contention.
+ </p>
+ <p>
+ For this reason, if you must routinely walk your database with a
+ transactional cursor, consider using a reduced isolation level
+ such as read committed.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="cursordirtyreads"></a>Using Cursors with Uncommitted Data</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ As described in <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ above, it is possible to relax your transaction's isolation
+ level such that it can read data modified but not yet committed
+ by another transaction. You can configure this when you create
+ your transaction handle, and when you do so then all cursors opened
+ inside that transaction will automatically use uncommitted reads.
+ </p>
+ <p>
+ You can also do this when you create a cursor handle from within
+ a serializable transaction. When you do this, only those
+ cursors configured for uncommitted reads uses uncommitted reads.
+ </p>
+ <p>
+ Either way, you must first configure your database handle to support
+ uncommitted reads before you can configure your transactions or
+ your cursors to use them.
+ </p>
+ <p>
+ The following example shows how to configure an individual cursor handle
+ to read uncommitted data from within a serializable (full isolation) transaction.
+ For an example of
+ configuring a transaction to perform uncommitted reads in
+ general, see <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>.
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ DB *dbp;
+ DBC *cursorp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ int ret, c_ret;
+ char *replacementString = &quot;new string&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+ txn = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* Create the environment if it does
+ * not already exist. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_INIT_LOCK | /* Initialize locking. */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL; /* Initialize the in-memory cache. */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ db_flags = DB_CREATE | /* Create the db if it does not
+ * exist */
+ DB_AUTO_COMMIT | /* Enable auto commit */
+ DB_READ_UNCOMMITTED; /* Enable uncommitted reads */
+
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+ /* Get the txn handle */
+ /* Note that this is a degree 3 transaction */
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction begin failed.&quot;);
+ goto err;
+ }
+
+ /* Get the cursor, supply the txn handle at that time */
+ /* Cause the cursor to perform uncommitted reads */
+ ret = dbp-&gt;cursor(dbp, txn, &amp;cursorp, DB_READ_UNCOMMITTED);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Cursor open failed.&quot;);
+ txn-&gt;abort(txn);
+ goto err;
+ }
+
+ /*
+ * From here, you perform your cursor reads and writes as normal,
+ * committing and aborting the transactions as is necessary, and
+ * testing for deadlock exceptions as normal (omitted for brevity).
+ */
+
+ ... </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="isolation.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="readmodifywrite.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Isolation </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Read/Modify/Write</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/txnconcurrency.html b/db/docs/gsg_txn/C/txnconcurrency.html
new file mode 100644
index 000000000..ed0de1bff
--- /dev/null
+++ b/db/docs/gsg_txn/C/txnconcurrency.html
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 4. Concurrency</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
+ <link rel="next" href="blocking_deadlocks.html" title="Locks, Blocks, and Deadlocks" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 4. Concurrency</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="maxtxns.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="blocking_deadlocks.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="txnconcurrency"></a>Chapter 4. Concurrency</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#locks">Locks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#blocks">Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="lockingsubsystem.html">The Locking Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="isolation.html">Isolation</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#degreesofisolation">Supported Degrees of Isolation</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="txn_ccursor.html">Transactional Cursors and Concurrent Applications</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txn_ccursor.html#cursordirtyreads">Using Cursors with Uncommitted Data</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="readmodifywrite.html">Read/Modify/Write</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnnowait.html">No Wait on Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+
+ DB offers a great deal of support for multi-threaded
+ <span>
+ and multi-process
+ </span>
+ applications even when transactions are not in use. Many of DB's
+ handles are
+ thread-safe<span>, or
+ can be made thread-safe by providing the appropriate flag at handle creation time,</span>
+ and DB provides a
+ flexible locking subsystem for managing databases in a concurrent
+ application. Further, DB provides a robust mechanism for
+ detecting and responding to deadlocks. All of these concepts are
+ explored in this chapter.
+ </p>
+ <p>
+ Before continuing, it is useful to define a few terms that will appear
+ throughout this chapter:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="emphasis"><em>Thread of control</em></span>
+ </p>
+ <p>
+ Refers to a thread that is performing work in your application.
+ Typically, in this book that thread will be performing DB
+ operations.
+ </p>
+ <p>
+ Note that this term can also be taken to mean a separate process
+ that is performing work &#8212; DB supports multi-process
+ operations on your databases.
+ </p>
+ <p>
+ Also, DB is agnostic with regard to the type or style of
+ threads in use in your application. So if you are using
+ multiple threads
+ (as opposed to multiple processes) to perform concurrent
+ database access, you are free to use whatever thread package is
+ best for your platform and application. That said, this manual
+ will use pthreads for its threading examples because those have
+ the best chance of being supported across a large range of
+ platforms.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Locking</em></span>
+ </p>
+ <p>
+ When a thread of control obtains
+ access to a shared resource, it is said to be
+ <span class="emphasis"><em>locking</em></span> that resource. Note that
+ DB supports both exclusive and non-exclusive locks. See
+ <a href="blocking_deadlocks.html#locks">Locks</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Free-threaded</em></span>
+ </p>
+ <p>
+ Data structures and objects are free-threaded if they can be
+ shared across threads of control without any explicit locking on
+ the part of the application. Some books, libraries, and
+ programming languages may use the term
+ <span class="emphasis"><em>thread-safe</em></span> for data structures or objects
+ that have this characteristic. The two terms mean the
+ same thing.
+ </p>
+ <p>
+ For a description of free-threaded DB objects, see
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Blocked</em></span>
+ </p>
+ <p>
+ When a thread cannot obtain a lock because some other
+ thread already holds a lock on that object, the lock
+ attempt is said to be <span class="emphasis"><em>blocked</em></span>. See
+ <a href="blocking_deadlocks.html#blocks">Blocks</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Deadlock</em></span>
+ </p>
+ <p>
+ Occurs when two or more threads of control attempt to access conflicting resource in such a way as none
+ of the threads can any longer may further progress.
+ </p>
+ <p>
+ For example, if Thread A is blocked waiting for a resource held by Thread
+ B, while at the same time Thread B is blocked waiting for a
+ resource held by Thread A, then neither thread can make any
+ forward progress. In this situation, Thread A and Thread B
+ are said to be <span class="emphasis"><em>deadlocked.</em></span>
+ </p>
+ <p>
+ For more information, see <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="concurrenthandles"></a>Which DB Handles are Free-Threaded</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following describes to what extent and under what conditions
+ individual handles are free-threaded.
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="classname">DB_ENV</tt>
+
+
+ </p>
+ <p>
+ Free-threaded so long as
+ <span>
+ the <tt class="literal">DB_THREAD</tt> flag is provided to
+ the environment <tt class="methodname">open()</tt>
+ method.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="classname">DB</tt>
+
+
+ </p>
+ <p>
+ Free-threaded so long as
+ <span>
+ the <tt class="literal">DB_THREAD</tt> flag is provided to
+ the database <tt class="methodname">open()</tt>
+ method, or if the database is opened using a
+ free-threaded environment handle.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="classname">DBC</tt>
+
+
+ </p>
+ <p>
+ Cursors are not free-threaded. However, they
+ can be used by multiple threads of control so
+ long as the application serializes access to the handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="classname">DB_TXN</tt>
+
+
+
+ </p>
+ <p>
+ Access must be serialized by the application across threads of control.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="maxtxns.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="blocking_deadlocks.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Configuring the Transaction Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Locks, Blocks, and Deadlocks</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/txncursor.html b/db/docs/gsg_txn/C/txncursor.html
new file mode 100644
index 000000000..593048353
--- /dev/null
+++ b/db/docs/gsg_txn/C/txncursor.html
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transactional Cursors</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="nestedtxn.html" title="Nested Transactions" />
+ <link rel="next" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transactional Cursors</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txncursor"></a>Transactional Cursors</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can transaction-protect your cursor operations by
+ specifying a transaction handle at the time that you create
+ your cursor. Beyond that, you do not ever
+ provide a transaction handle directly to a cursor method.
+ </p>
+ <p>
+ Note that if you transaction-protect a cursor, then you must
+ make sure that the cursor is closed before you either commit or
+ abort the transaction. For example:
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ DBT key, data;
+ DBC *cursorp;
+ DB_TXN *txn = NULL;
+ int ret, c_ret;
+ char *replacementString = &quot;new string&quot;;
+
+ ...
+ /* environment and db handle creation omitted */
+ ...
+
+ /* Get the txn handle */
+ txn = NULL;
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction begin failed.&quot;);
+ goto err;
+ }
+
+ /* Get the cursor, supply the txn handle at that time */
+ ret = dbp-&gt;cursor(dbp, txn, &amp;cursorp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Cursor open failed.&quot;);
+ txn-&gt;abort(txn);
+ goto err;
+ }
+
+ /*
+ * Now use the cursor. Note that we do not supply any txn handles to these
+ * methods.
+ */
+ /* Prepare the DBTs */
+ memset(&amp;key, 0, sizeof(DBT));
+ memset(&amp;data, 0, sizeof(DBT));
+ while (cursor-&gt;c_get(&amp;key, &amp;data, DB_NEXT) == 0) {
+ data-&gt;data = (void *)replacementString;
+ data-&gt;size = (strlen(replacementString) + 1) * sizeof(char);
+ c_ret = cursor-&gt;c_put(cursor, &amp;key, &amp;data, DB_CURRENT);
+ if (c_ret != 0) {
+ /* abort the transaction and goto error */
+ envp-&gt;err(envp, ret, &quot;Cursor put failed.&quot;);
+ cursorp-&gt;c_close(cursorp);
+ cursorp = NULL;
+ txn-&gt;abort(txn);
+ goto err;
+ }
+ }
+
+ /*
+ * Commit the transaction. Note that the transaction handle
+ * can no longer be used.
+ */
+ ret = cursorp-&gt;c_close(cursorp);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Cursor close failed.&quot;);
+ txn-&gt;abort(txn);
+ goto err;
+ }
+ ret = txn-&gt;commit(txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction commit failed.&quot;);
+ goto err;
+ }
+
+err:
+ /* Close the cursor (if the handle is not NULL)
+ * and perform whatever other cleanup is required */
+
+ /* Close the database */
+
+ /* Close the environment */
+
+ ...
+
+ if (c_ret != 0)
+ ret = c_ret;
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Nested Transactions </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Secondary Indices with Transaction Applications</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/txnexample_c.html b/db/docs/gsg_txn/C/txnexample_c.html
new file mode 100644
index 000000000..4f414bd19
--- /dev/null
+++ b/db/docs/gsg_txn/C/txnexample_c.html
@@ -0,0 +1,757 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transaction Example</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="previous" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="next" href="inmem_txnexample_c.html" title="In-Memory Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transaction Example</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="wrapup.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 6. Summary and Examples</th>
+ <td width="20%" align="right"> <a accesskey="n" href="inmem_txnexample_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnexample_c"></a>Transaction Example</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following code provides a fully functional example of a
+ multi-threaded transactional DB application. For improved
+ portability across platforms, this examples uses pthreads to
+ provide threading support.
+ </p>
+ <p>
+ The example opens an environment and database and then creates 5
+ threads, each of which writes 500 records to the database. The keys
+ used for these writes are pre-determined strings, while the data is
+ a random value. This means that the actual data is arbitrary and
+ therefore uninteresting; we picked it only because it requires
+ minimum code to implement and therefore will stay out of the way of
+ the main points of this example.
+ </p>
+ <p>
+ Each thread writes 10 records under a single transaction
+ before committing and writing another 10 (this is repeated 50
+ times). At the end of each transaction, but before committing, each
+ thread calls a function that uses a cursor to read every record in
+ the database. We do this in order to make some points about
+ database reads in a transactional environment.
+ </p>
+ <p>
+ Of course, each writer thread performs deadlock detection as
+ described in this manual. In addition, normal recovery is performed
+ when the environment is opened.
+ </p>
+ <p>
+ We start with our normal <tt class="literal">include</tt> directives:
+ </p>
+ <pre class="programlisting">/* File: txn_guide.c */
+
+/* We assume an ANSI-compatible compiler */
+#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
+#include &lt;pthread.h&gt;
+#include &lt;db.h&gt;
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
+#include &lt;unistd.h&gt;
+#endif </pre>
+ <p>
+ We also need a directive that we use to identify how many threads we
+ want our program to create:
+</p>
+ <pre class="programlisting">/* Run 5 writers threads at a time. */
+#define NUMWRITERS 5 </pre>
+ <p>
+ Next we declare a couple of global
+ variables (used by our threads), and we provide our forward
+ declarations for the functions used by this example.
+</p>
+ <pre class="programlisting">/*
+ * Printing of pthread_t is implementation-specific, so we
+ * create our own thread IDs for reporting purposes.
+ */
+int global_thread_num;
+pthread_mutex_t thread_num_lock;
+
+/* Forward declarations */
+int count_records(DB *, DB_TXN *);
+int open_db(DB **, const char *, const char *, DB_ENV *, u_int32_t);
+int usage(void);
+void *writer_thread(void *); </pre>
+ <p>
+ We now implement our usage function, which identifies our only command line
+ parameter:
+</p>
+ <pre class="programlisting">/* Usage function */
+int
+usage()
+{
+ fprintf(stderr, &quot; [-h &lt;database_home_directory&gt;]\n&quot;);
+ return (EXIT_FAILURE);
+} </pre>
+ <p>
+ With that, we have finished up our program's housekeeping, and we can
+ now move on to the main part of our program. As usual, we begin with
+ <tt class="function">main()</tt>. First we declare all our variables, and
+ then we initialize our DB handles.
+</p>
+ <pre class="programlisting">int
+main(int argc, char *argv[])
+{
+ /* Initialize our handles */
+ DB *dbp = NULL;
+ DB_ENV *envp = NULL;
+
+ pthread_t writer_threads[NUMWRITERS];
+ int ch, i, ret, ret_t;
+ u_int32_t env_flags;
+ char *db_home_dir;
+ /* Application name */
+ const char *prog_name = &quot;txn_guide&quot;;
+ /* Database file name */
+ const char *file_name = &quot;mydb.db&quot;; </pre>
+ <p>
+ Now we need to parse our command line. In this case, all we want is to
+ know where our environment directory is. If the <tt class="literal">-h</tt>
+ option is not provided when this example is run, the current working
+ directory is used instead.
+</p>
+ <pre class="programlisting"> /* Parse the command line arguments */
+#ifdef _WIN32
+ db_home_dir = &quot;.\\&quot;;
+#else
+ db_home_dir = &quot;./&quot;;
+#endif
+ while ((ch = getopt(argc, argv, &quot;h:&quot;)) != EOF)
+ switch (ch) {
+ case 'h':
+ db_home_dir = optarg;
+ break;
+ case '?':
+ default:
+ return (usage());
+ } </pre>
+ <p>
+ Next we create our database handle, and we define our environment open flags.
+ There are a few things to notice here:
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ We specify <tt class="literal">DB_RECOVER</tt>, which means that normal
+ recovery is run every time we start the application. This is
+ highly desirable and recommended for most
+ applications.
+ </p>
+ </li>
+ <li>
+ <p>
+ We also specify <tt class="literal">DB_THREAD</tt>, which means our
+ environment handle will be free-threaded. This is very
+ important because we will be sharing the environment handle
+ across threads.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <pre class="programlisting"> /* Create the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ env_flags =
+ DB_CREATE | /* Create the environment if it does not exist */
+ DB_RECOVER | /* Run normal recovery. */
+ DB_INIT_LOCK | /* Initialize the locking subsystem */
+ DB_INIT_LOG | /* Initialize the logging subsystem */
+ DB_INIT_TXN | /* Initialize the transactional subsystem. This
+ * also turns on logging. */
+ DB_INIT_MPOOL | /* Initialize the memory pool (in-memory cache) */
+ DB_THREAD; /* Cause the environment to be free-threaded */ </pre>
+ <p>
+ Now we configure how we want deadlock detection performed. In our case, we will cause DB to perform deadlock
+ detection by walking its internal lock tables looking for a block every time a lock is requested. Further, in the
+ event of a deadlock, the thread that holds the youngest lock will receive the deadlock notification.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ You will notice that every database operation checks the
+ operation's status return code, and if an error
+ (non-zero) status is returned, we log the error and then go to
+ a <tt class="literal">err</tt> label in our program. Unlike
+ object-oriented programs such as C++ or Java, we do not have
+ <tt class="literal">try</tt> blocks in C. Therefore, this is the best
+ way for us to implement cascading error handling for this
+ example.
+ </p>
+ </div>
+ <pre class="programlisting"> /*
+ * Indicate that we want db to perform lock detection internally.
+ * Also indicate that the transaction with the fewest number of
+ * write locks will receive the deadlock notification in
+ * the event of a deadlock.
+ */
+ ret = envp-&gt;set_lk_detect(envp, DB_LOCK_MINWRITE);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error setting lock detect: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ } </pre>
+ <p>
+ Now we open our environment.
+</p>
+ <pre class="programlisting"> /*
+ * If we had utility threads (for running checkpoints or
+ * deadlock detection, for example) we would spawn those
+ * here. However, for a simple example such as this,
+ * that is not required.
+ */
+
+ /* Now actually open the environment */
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ } </pre>
+ <p>
+ Now we call the function that will open our database for us. This is
+ not very interesting, except that you will notice that we are
+ specifying <tt class="literal">DB_DUPSORT</tt>. This is required purely by
+ the data that we are writing to the database, and it is only necessary
+ if you run the application more than once without first deleting the environment.
+</p>
+ <p>
+ Also, we do not provide any error logging here because the
+ <tt class="function">open_db()</tt> function does that for us.
+ (The implementation of <tt class="function">open_db()</tt> is described
+ later in this section.)
+</p>
+ <pre class="programlisting"> /* Open the database */
+ ret = open_db(&amp;dbp, prog_name, file_name, envp, DB_DUPSORT);
+ if (ret != 0)
+ goto err; </pre>
+ <p>
+ Now we create our threads. In this example we are using pthreads
+ for our threading package. A description of threading (beyond how
+ it impacts DB usage) is beyond the scope of this manual.
+ However, the things that we are doing here should be familiar to
+ anyone who has prior experience with any threading package. We are
+ simply initializing a mutex, creating our threads, and then joining
+ our threads, which causes our program to wait until the joined
+ threads have completed before continuing operations in the main
+ thread.
+ </p>
+ <pre class="programlisting"> /* Initialize a pthread mutex. Used to help provide thread ids. */
+ (void)pthread_mutex_init(&amp;thread_num_lock, NULL);
+
+ /* Start the writer threads. */
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_create(&amp;writer_threads[i], NULL,
+ writer_thread, (void *)dbp);
+
+ /* Join the writers */
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_join(writer_threads[i], NULL); </pre>
+ <p>
+ Finally, to wrap up <tt class="function">main()</tt>, we close out our
+ database and environment handle, as is normal for any DB
+ application. Notice that this is where our <tt class="literal">err</tt>
+ label is placed in our application. If any database operation prior
+ to this point in the program returns an error status, the program
+ simply jumps to this point and closes our handles if necessary
+ before exiting the application completely.
+ </p>
+ <pre class="programlisting">err:
+ /* Close our database handle, if it was opened. */
+ if (dbp != NULL) {
+ ret_t = dbp-&gt;close(dbp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, &quot;%s database close failed: %s\n&quot;,
+ file_name, db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Close our environment, if it was opened. */
+ if (envp != NULL) {
+ ret_t = envp-&gt;close(envp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Final status message and return. */
+ printf(&quot;I'm all done.\n&quot;);
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ <p>
+ Now that we have completed <tt class="function">main()</tt>, we need to
+ implement the function that our writer threads will actually run. This
+ is where the bulk of our transactional code resides.
+</p>
+ <p>
+ We start as usual with variable declarations and initialization.
+</p>
+ <pre class="programlisting">/*
+ * A function that performs a series of writes to a
+ * Berkeley DB database. The information written
+ * to the database is largely nonsensical, but the
+ * mechanisms of transactional commit/abort and
+ * deadlock detection are illustrated here.
+ */
+void *
+writer_thread(void *args)
+{
+ DBT key, value;
+ DB_TXN *txn;
+ int i, j, payload, ret, thread_num;
+ int retry_count, max_retries = 20; /* Max retry on a deadlock */
+ char *key_strings[] = {&quot;key 1&quot;, &quot;key 2&quot;, &quot;key 3&quot;, &quot;key 4&quot;,
+ &quot;key 5&quot;, &quot;key 6&quot;, &quot;key 7&quot;, &quot;key 8&quot;,
+ &quot;key 9&quot;, &quot;key 10&quot;};
+
+ DB *dbp = (DB *)args;
+ DB_ENV *envp = dbp-&gt;get_env(dbp); </pre>
+ <p>
+ Now we want a thread number for reporting purposes. It is possible to
+ use the <tt class="literal">pthread_t</tt> value directly for this purpose,
+ but how that is done unfortunately differs depending
+ on the pthread implementation you are using. So instead we use a
+ mutex-protected global variable to obtain a simple integer for
+ our reporting purposes.
+</p>
+ <p>
+ Note that we are also use this thread id for initializing a random number generator, which we do here.
+ We use this random number generator for data generation.
+</p>
+ <pre class="programlisting"> /* Get the thread number */
+ (void)pthread_mutex_lock(&amp;thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)pthread_mutex_unlock(&amp;thread_num_lock);
+
+ /* Initialize the random number generator */
+ srand((u_int)pthread_self()); </pre>
+ <p>
+ Now we begin the loop that we use to write data to the database.
+ <span>
+ Notice that at the beginning of the top loop, we begin a new
+ transaction.
+ </span>
+
+
+ We will actually use 50 transactions per writer
+ thread, although we will only ever have one active transaction per
+ thread at a time. Within each transaction, we will perform 10
+ database writes.
+ </p>
+ <p>
+ By combining multiple writes together under a single transaction,
+ we increase the likelihood that a deadlock will occur. Normally,
+ you want to reduce the potential for a deadlock and in this case
+ the way to do that is to perform a single write per transaction.
+ To avoid deadlocks, we could be using auto commit to
+ write to our database for this workload.
+ </p>
+ <p>
+ However, we want to show deadlock handling and by performing
+ multiple writes per transaction we can actually observe deadlocks
+ occurring. We also want to underscore the idea that you can
+ combing multiple database operations together in a single atomic
+ unit of work in order to improve the efficiency of your writes.
+ </p>
+ <p>
+ Finally, on an issue of style, you will notice the
+ <tt class="literal">retry</tt> label that we place immediately before our
+ transaction begin code. We use this to loop in the event that a
+ deadlock is detected and the write operation has to be performed. A
+ great many people dislike looping with <tt class="literal">goto</tt>
+ statements, and we certainly could have written this code to avoid
+ it. However, we find that using the
+ <tt class="literal">goto</tt> in this case greatly helps to clarify the
+ code, so we ignore the bias against <tt class="literal">goto</tt>
+ programming in order to clearly support looping in the event of
+ what is really an error condition.
+ </p>
+ <pre class="programlisting"> /* Write 50 times and then quit */
+ for (i = 0; i &lt; 50; i++) {
+ retry_count = 0; /* Used for deadlock retries */
+
+retry:
+ /* Begin our transaction. */
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn_begin failed&quot;);
+ return ((void *)EXIT_FAILURE);
+ } </pre>
+ <p>
+ Now we begin the inner loop that we use to actually
+ perform the write. Notice that we use a <tt class="literal">case</tt>
+ statement to examine the return code from the database put.
+ This case statement is what we use to determine whether we need
+ to abort (or abort/retry in the case of a deadlock) our current
+ transaction.
+ </p>
+ <pre class="programlisting"> for (j = 0; j &lt; 10; j++) {
+ /* Set up our key and values DBTs */
+ memset(&amp;key, 0, sizeof(DBT));
+ key.data = key_strings[j];
+ key.size = (strlen(key_strings[j]) + 1) * sizeof(char);
+
+ memset(&amp;value, 0, sizeof(DBT));
+ payload = rand() + i;
+ value.data = &amp;payload;
+ value.size = sizeof(int);
+
+ /* Perform the database put. */
+ switch (ret = dbp-&gt;put(dbp, txn, &amp;key, &amp;value, 0)) {
+ case 0:
+ break;
+ /*
+ * Our database is configured for sorted duplicates,
+ * so there is a potential for a KEYEXIST error return.
+ * If we get one, simply ignore it and continue on.
+ *
+ * Note that you will see KEYEXIST errors only after you
+ * have run this program at least once.
+ */
+ case DB_KEYEXIST:
+ printf(&quot;Got keyexists.\n&quot;);
+ break;
+ /*
+ * Here's where we perform deadlock detection. If
+ * DB_LOCK_DEADLOCK is returned by the put operation,
+ * then this thread has been chosen to break a deadlock.
+ * It must abort its operation, and optionally retry the
+ * put.
+ */
+ case DB_LOCK_DEADLOCK:
+ /*
+ * First thing we MUST do is abort the
+ * transaction.
+ */
+ (void)txn-&gt;abort(txn);
+ /*
+ * Now we decide if we want to retry the operation.
+ * If we have retried less than max_retries,
+ * increment the retry count and goto retry.
+ */
+ if (retry_count &lt; max_retries) {
+ printf(&quot;Writer %i: Got DB_LOCK_DEADLOCK.\n&quot;,
+ thread_num);
+ printf(&quot;Writer %i: Retrying write operation.\n&quot;,
+ thread_num);
+ retry_count++;
+ goto retry;
+ }
+ /*
+ * Otherwise, just give up.
+ */
+ printf(&quot;Writer %i: &quot;, thread_num);
+ printf(&quot;Got DB_LOCK_DEADLOCK and out of retries.\n&quot;);
+ printf(&quot;Writer %i: Giving up.\n&quot;, thread_num);
+ return ((void *)EXIT_FAILURE);
+ /*
+ * If a generic error occurs, we simply abort the
+ * transaction and exit the thread completely.
+ */
+ default:
+ envp-&gt;err(envp, ret, &quot;db put failed&quot;);
+ ret = txn-&gt;abort(txn);
+ if (ret != 0)
+ envp-&gt;err(envp, ret, &quot;txn abort failed&quot;);
+ return ((void *)EXIT_FAILURE);
+ } /** End case statement **/
+
+ } /** End for loop **/ </pre>
+ <p>
+ Having completed the inner database write loop, we could simply
+ commit the transaction and continue on to the next block of 10
+ writes. However, we want to first illustrate a few points about
+ transactional processing so instead we call our
+ <tt class="function">count_records()</tt>
+
+
+ function before calling the transaction
+ commit.
+ <tt class="function">count_records()</tt>
+
+ uses a cursor to read every
+ record in the database and return a count of the number of records
+ that it found.
+ </p>
+ <pre class="programlisting"> /*
+ * print the number of records found in the database.
+ * See count_records() for usage information.
+ */
+ printf(&quot;Thread %i. Record count: %i\n&quot;, thread_num,
+ count_records(dbp, NULL));
+
+ /*
+ * If all goes well, we can commit the transaction and
+ * loop to the next transaction.
+ */
+ ret = txn-&gt;commit(txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn commit failed&quot;);
+ return ((void *)EXIT_FAILURE);
+ }
+ }
+ return ((void *)EXIT_SUCCESS);
+} </pre>
+ <p>
+
+ If you look at the
+ <tt class="function">count_records()</tt>
+
+ function prototype at the beginning of this example, you will see that the
+ function's second parameter takes a transaction handle. However,
+ our usage of the function here does not pass a transaction handle
+ through to the function.
+ </p>
+ <p>
+
+ Because
+ <tt class="function">count_records()</tt>
+
+ reads every record in the database, if used incorrectly the thread
+ will self-deadlock. The writer thread has just written 500 records
+ to the database, but because the transaction used for that write
+ has not yet been committed, each of those 500 records are still
+ locked by the thread's transaction. If we then simply run a
+ non-transactional cursor over the database from within the same
+ thread that has locked those 500 records, the cursor will
+ block when it tries to read one of those transactional
+ protected records. The thread immediately stops operation at that
+ point while the cursor waits for the read lock it has
+ requested. Because that read lock will never be released (the thread
+ can never make any forward progress), this represents a
+ self-deadlock for the the thread.
+ </p>
+ <p>
+ There are three ways to prevent this self-deadlock:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ We can move the call to
+ <tt class="function">count_records()</tt>
+
+ to a point after the thread's transaction has committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ We can allow
+ <tt class="function">count_records()</tt>
+
+ to operate under the same transaction as all of the writes
+ were performed (this is what the transaction parameter for
+ the function is for).
+ </p>
+ </li>
+ <li>
+ <p>
+ We can reduce our isolation guarantee for the application
+ by allowing uncommitted reads.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For this example, we choose to use option 3 (uncommitted reads) to avoid
+ the deadlock. This means that we have to open our database such
+ that it supports uncommitted reads, and we have to open our cursor handle
+ so that it knows to perform uncommitted reads.
+ </p>
+ <p>
+ Note that in <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>,
+ we simply perform the cursor operation using the same transaction
+ as is used for the thread's writes.
+ </p>
+ <p>
+ The following is the
+ <tt class="function">count_records()</tt>
+
+ implementation. There is not anything particularly interesting
+ about this function other than specifying uncommitted reads when
+ we open the cursor handle, but we include the function here anyway
+ for the sake of completeness.
+ </p>
+ <pre class="programlisting">/*
+ * This simply counts the number of records contained in the
+ * database and returns the result.
+ *
+ * Note that this function exists only for illustrative purposes.
+ * A more straight-forward way to count the number of records in
+ * a database is to use DB-&gt;stat() or DB-&gt;stat_print().
+ */
+
+int
+count_records(DB *dbp, DB_TXN *txn)
+{
+ DBT key, value;
+ DBC *cursorp;
+ int count, ret;
+
+ cursorp = NULL;
+ count = 0;
+
+ /* Get the cursor */
+ ret = dbp-&gt;cursor(dbp, txn, &amp;cursorp, DB_READ_UNCOMMITTED);
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret, &quot;count_records: cursor open failed.&quot;);
+ goto cursor_err;
+ }
+
+ /* Get the key DBT used for the database read */
+ memset(&amp;key, 0, sizeof(DBT));
+ memset(&amp;value, 0, sizeof(DBT));
+ do {
+ ret = cursorp-&gt;c_get(cursorp, &amp;key, &amp;value, DB_NEXT);
+ switch (ret) {
+ case 0:
+ count++;
+ break;
+ case DB_NOTFOUND:
+ break;
+ default:
+ dbp-&gt;err(envp, ret, &quot;Count records unspecified error&quot;);
+ goto cursor_err;
+ }
+ } while (ret == 0);
+
+cursor_err:
+ if (cursorp != NULL) {
+ ret = cursorp-&gt;c_close(cursorp);
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret,
+ &quot;count_records: cursor close failed.&quot;);
+ }
+ }
+
+ return (count);
+} </pre>
+ <p>
+ Finally, we provide the implementation of our
+ <tt class="function">open_db()</tt>
+
+ function. This function should hold
+ no surprises for you. Note, however, that we do specify uncommitted reads
+ when we open the database. If we did not do this, then our
+ <tt class="function">count_records()</tt>
+
+ function would cause our
+ thread to self-deadlock because the cursor could not be opened to
+ support uncommitted reads (that flag on the cursor open would, in fact,
+ be silently ignored by DB).
+ </p>
+ <pre class="programlisting">/* Open a Berkeley DB database */
+int
+open_db(DB **dbpp, const char *progname, const char *file_name,
+ DB_ENV *envp, u_int32_t extra_flags)
+{
+ int ret;
+ u_int32_t open_flags;
+ DB *dbp;
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;%s: %s\n&quot;, progname,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /* Point to the memory malloc'd by db_create() */
+ *dbpp = dbp;
+
+ if (extra_flags != 0) {
+ ret = dbp-&gt;set_flags(dbp, extra_flags);
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret,
+ &quot;open_db: Attempt to set extra flags failed.&quot;);
+ return (EXIT_FAILURE);
+ }
+ }
+
+ /* Now open the database */
+ open_flags = DB_CREATE | /* Allow database creation */
+ DB_READ_UNCOMMITTED | /* Allow uncommitted reads */
+ DB_AUTO_COMMIT; /* Allow auto commit */
+
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ open_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ dbp-&gt;err(dbp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ return (EXIT_FAILURE);
+ }
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ This completes our transactional example. If you would like to
+ experiment with this code, you can find the example in the following
+ location in your DB distribution:
+</p>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_c/txn_guide</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="wrapup.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="wrapup.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="inmem_txnexample_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 6. Summary and Examples </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> In-Memory Transaction Example</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/txnindices.html b/db/docs/gsg_txn/C/txnindices.html
new file mode 100644
index 000000000..97d5746f2
--- /dev/null
+++ b/db/docs/gsg_txn/C/txnindices.html
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Secondary Indices with Transaction Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="txncursor.html" title="Transactional Cursors" />
+ <link rel="next" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Secondary Indices with Transaction Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="maxtxns.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnindices"></a>Secondary Indices with Transaction Applications</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can use transactions with your secondary indices so long as you
+ <span>
+ open the secondary index so that it supports transactions (that is,
+ you wrap the database open in a transaction, or use auto commit,
+ in the same way as when you open a primary transactional database).
+ </span>
+
+
+ <span>
+ In addition, you must make sure that when you associate the
+ secondary index with the primary database, the association is
+ performed using a transaction. The easiest thing to do here is
+ to simply specify <tt class="literal">DB_AUTO_COMMIT</tt> when you
+ perform the association.
+ </span>
+ </p>
+ <p>
+ All other aspects of using secondary indices with transactions are
+ identical to using secondary indices without transactions. In
+ addition, transaction-protecting
+ <span>
+ cursors opened against secondary indices is performed in
+ exactly the same way as when you use transactional cursors
+ against a primary database.
+ </span>
+
+ See <a href="txncursor.html">Transactional Cursors</a> for details.
+ </p>
+ <p>
+ Note that when you use transactions to protect your database writes, your secondary indices are protected from
+ corruption because updates to the primary and the secondaries are performed in a single atomic transaction.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;db.h&gt;
+
+...
+
+DB_ENV *envp; /* Environment pointer */
+DB *dbp, *sdbp; /* Primary and secondary DB handles */
+u_int32_t flags; /* Primary database open flags */
+int ret; /* Function return value */
+
+/* Environment and primary database opens omitted */
+
+/* Secondary */
+ret = db_create(&amp;sdbp, envp, 0);
+if (ret != 0) {
+ /* Error handling goes here */
+}
+/* open the secondary database */
+ret = sdbp-&gt;open(sdbp, /* DB structure pointer */
+ NULL, /* Transaction pointer */
+ &quot;my_secdb.db&quot;, /* On-disk file that holds the database. */
+ NULL, /* Optional logical database name */
+ DB_BTREE, /* Database access method */
+ DB_AUTO_COMMIT, /* Open flags */
+ 0); /* File mode (using defaults) */
+if (ret != 0) {
+ /* Error handling goes here */
+}
+
+/* Now associate the secondary to the primary */
+dbp-&gt;associate(dbp, /* Primary database */
+ NULL, /* TXN id */
+ sdbp, /* Secondary database */
+ get_sales_rep, /* Callback used for key creation. This
+ * is described in the Getting Started
+ * guide. */
+ DB_AUTO_COMMIT);/* Flags */</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="maxtxns.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transactional Cursors </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Configuring the Transaction Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/txnnowait.html b/db/docs/gsg_txn/C/txnnowait.html
new file mode 100644
index 000000000..3f88f5794
--- /dev/null
+++ b/db/docs/gsg_txn/C/txnnowait.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>No Wait on Blocks</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="readmodifywrite.html" title="Read/Modify/Write" />
+ <link rel="next" href="reversesplit.html" title="Reverse BTree Splits" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">No Wait on Blocks</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="readmodifywrite.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="reversesplit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnnowait"></a>No Wait on Blocks</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Normally when a DB transaction is blocked on a lock request, it
+ must wait until the requested lock becomes available before its
+ thread-of-control can proceed. However, it is possible to configure a
+ transaction handle such that it will report a deadlock rather
+ than wait for the block to clear.
+ </p>
+ <p>
+ You do this on a transaction by transaction basis by specifying
+
+ <span>
+ <tt class="literal">DB_TXN_NOWAIT</tt>
+ to the
+ <tt class="methodname">DB_ENV-&gt;txn_begin()</tt>
+
+
+ method.
+ </span>
+
+
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting"> /* Get the transaction */
+ DB_TXN *txn = NULL;
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, DB_TXN_NOWAIT);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;txn_begin failed&quot;);
+ return (EXIT_FAILURE);
+ }
+ ....
+ /* Deadlock detection and exception handling omitted for brevity. */</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="readmodifywrite.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="reversesplit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Read/Modify/Write </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Reverse BTree Splits</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/usingtxns.html b/db/docs/gsg_txn/C/usingtxns.html
new file mode 100644
index 000000000..828b21263
--- /dev/null
+++ b/db/docs/gsg_txn/C/usingtxns.html
@@ -0,0 +1,590 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 3. Transaction Basics</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="envopen.html" title="Opening a Transactional Environment and&#10; Database&#10; &#10; " />
+ <link rel="next" href="abortresults.html" title="Aborting a Transaction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 3. Transaction Basics</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="envopen.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="usingtxns"></a>Chapter 3. Transaction Basics</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="usingtxns.html#commitresults">Committing a Transaction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="abortresults.html">Aborting a Transaction</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="autocommit.html">Auto Commit</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="nestedtxn.html">Nested Transactions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txncursor.html">Transactional Cursors</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnindices.html">Secondary Indices with Transaction Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="maxtxns.html">Configuring the Transaction Subsystem</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Once you have enabled transactions for your environment and your databases,
+ you can use them to protect your database operations. You do this by
+ acquiring a transaction handle and then using that handle for any
+ database operation that you want to participate in that transaction.
+ </p>
+ <p>
+ You obtain a transaction handle using the
+ <span><tt class="methodname">DB_ENV-&gt;txn_begin()</tt> method.</span>
+
+
+
+
+ </p>
+ <p>
+ Once you have completed all of the operations that you want to include
+ in the transaction, you must commit the transaction using the
+ <span><tt class="methodname">DB_TXN-&gt;commit()</tt> method.</span>
+
+
+
+
+
+ </p>
+ <p>
+ If, for any reason, you want to abandon the transaction, you abort
+ it using
+ <span><tt class="methodname">DB_TXN-&gt;abort()</tt>.</span>
+
+
+
+
+
+
+ </p>
+ <p>
+ Any transaction handle that has been committed or aborted can no longer
+ be used by your application.
+ </p>
+ <p>
+ Finally, you must make sure that all transaction handles are either
+ committed or aborted before closing your databases and environment.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If you only want to transaction protect a single database write operation, you can use auto commit to
+ perform the transaction administration. When you use auto commit, you do not need an explicit transaction
+ handle. See <a href="autocommit.html">Auto Commit</a> for more information.
+ </p>
+ </div>
+ <p>
+ For example, the following example opens a transactional-enabled environment and
+ database, obtains a transaction handle, and then performs a write
+ operation under its protection. In the event of any failure in the
+ write operation, the transaction is aborted and the database is left in a
+ state as if no operations had ever been attempted in the first place.
+ </p>
+ <pre class="programlisting">#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+#include &quot;db.h&quot;
+
+int
+main(void)
+{
+ int ret, ret_c;
+ u_int32_t db_flags, env_flags;
+ DB *dbp;
+ DB_ENV *envp;
+ DBT key, data;
+ DB_TXN *txn;
+ const char *db_home_dir = &quot;/tmp/myEnvironment&quot;;
+ const char *file_name = &quot;mydb.db&quot;;
+ const char *keystr =&quot;thekey&quot;;
+ const char *datastr = &quot;thedata&quot;;
+
+ dbp = NULL;
+ envp = NULL;
+
+ /* Open the environment */
+ ret = db_env_create(&amp;envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error creating environment handle: %s\n&quot;,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ env_flags = DB_CREATE | /* Create the environment if it does
+ * not already exist. */
+ DB_INIT_TXN | /* Initialize transactions */
+ DB_INIT_LOCK | /* Initialize locking. */
+ DB_INIT_LOG | /* Initialize logging */
+ DB_INIT_MPOOL; /* Initialize the in-memory cache. */
+
+ ret = envp-&gt;open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, &quot;Error opening environment: %s\n&quot;,
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Initialize the DB handle */
+ ret = db_create(&amp;dbp, envp, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database creation failed&quot;);
+ goto err;
+ }
+
+ db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ /*
+ * Open the database. Note that we are using auto commit for the open,
+ * so the database is able to support transactions.
+ */
+ ret = dbp-&gt;open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ db_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database '%s' open failed&quot;,
+ file_name);
+ goto err;
+ }
+
+ /* Prepare the DBTs */
+ memset(&amp;key, 0, sizeof(DBT));
+ memset(&amp;data, 0, sizeof(DBT));
+
+ key.data = &amp;keystr;
+ key.size = strlen(keystr) + 1;
+ data.data = &amp;datastr;
+ data.size = strlen(datastr) + 1;
+
+ /* Get the txn handle */
+ txn = NULL;
+ ret = envp-&gt;txn_begin(envp, NULL, &amp;txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction begin failed.&quot;);
+ goto err;
+ }
+
+ /*
+ * Perform the database write. If this fails, abort the transaction.
+ */
+ ret = dbp-&gt;put(dbp, txn, &amp;key, &amp;data, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Database put failed.&quot;);
+ txn-&gt;abort(txn);
+ goto err;
+ }
+
+ /*
+ * Commit the transaction. Note that the transaction handle
+ * can no longer be used.
+ */
+ ret = txn-&gt;commit(txn, 0);
+ if (ret != 0) {
+ envp-&gt;err(envp, ret, &quot;Transaction commit failed.&quot;);
+ goto err;
+ }
+
+err:
+ /* Close the database */
+ if (dbp != NULL) {
+ ret_c = dbp-&gt;close(dbp, 0);
+ if (ret_c != 0) {
+ envp-&gt;err(envp, ret_c, &quot;Database close failed.&quot;);
+ ret = ret_c
+ }
+ }
+
+
+ /* Close the environment */
+ if (envp != NULL) {
+ ret_c = envp-&gt;close(envp, 0);
+ if (ret_c != 0) {
+ fprintf(stderr, &quot;environment close failed: %s\n&quot;,
+ db_strerror(ret_c));
+ ret = ret_c;
+ }
+ }
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+} </pre>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="commitresults"></a>Committing a Transaction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to fully understand what is happening when you commit
+ a transaction, you must first understand a little about what
+ DB is doing with
+
+ <span>
+ the logging subsystem.
+ </span>
+
+
+
+ Logging causes all database write operations to be identified in
+
+ <span>logs, and by default these
+ logs are backed by files on disk. These logs are used to restore your databases
+ </span>
+
+
+
+ in the event of a system or application failure, so by performing
+ logging, DB ensures the integrity of your data.
+ </p>
+ <p>
+ Moreover, DB performs <span class="emphasis"><em>write-ahead</em></span>
+ logging. This means that information is written to the logs
+ <span class="emphasis"><em>before</em></span> the actual database is changed.
+ This means that all write activity performed under the
+ protection of the transaction is noted in the log before
+ the transaction is committed. Be aware, however, that database
+ maintains logs in-memory. If you are backing your logs on
+ disk, the log information will eventually be written to the log
+ files, but while the transaction is on-going the log data may be
+ held only in memory.
+ </p>
+ <p>
+ When you commit a transaction, the following occurs:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ A commit record is written to the log. This
+ indicates that the modifications made by the
+ transaction are now permanent. By default, this write is performed synchronously to disk so the
+ commit record arrives in the log files before any other actions are taken.
+ </p>
+ </li>
+ <li>
+ <p>
+ Any log information held in memory is (by default)
+ synchronously written to disk. Note that this requirement can be
+ relaxed, depending on the type of commit you perform.
+ See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a> for
+ more information.
+ <span>Also, if you are
+ maintaining your logs entirely in-memory, then this
+ step will of course not be taken. To configure your
+ logging system for in-memory usage, see
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ All locks held by the transaction are released. This means
+ that read operations performed by other transactions or
+ threads of control can now see the modifications without
+ resorting to uncommitted reads (see <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a> for more information).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ To commit a transaction, you simply call
+ <span><tt class="methodname">DB_TXN-&gt;commit()</tt>.</span>
+
+
+
+
+ </p>
+ <p>
+ Notice that committing a transaction does not necessarily cause data
+ modified in your memory cache to be written to the files
+ backing your databases on disk. Dirtied database pages are written
+ for a number of reasons, but a transactional
+ commit is not one of them. The following are the things that can cause a dirtied
+ database page to be written to the backing database file:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Checkpoints.
+ </p>
+ <p>
+ Checkpoints cause all dirtied pages currently existing
+ in the cache to be written to disk, and a checkpoint
+ record is then written to the logs. You can run checkpoints
+ explicitly. For more information on checkpoints,
+ see <a href="filemanagement.html#checkpoints">Checkpoints</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Cache is full.
+ </p>
+ <p>
+ If the in-memory cache fills up, then dirtied pages
+ might be written to disk in order to free up space for other
+ pages that your application needs to use. Note that if
+ dirtied pages are written to the database files, then
+ any log records that describe how those pages were
+ dirtied are written to disk before the database
+ pages are written.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Be aware that because your transaction commit caused database
+ modifications recorded in your logs to be forced to disk, your modifications
+ are by default &quot;persistent&quot; in that they can be recovered in the event of
+ an application or system failure. However, recovery time is
+ gated by how much data has been modified since the last
+ checkpoint, so for applications that perform a lot of writes,
+ you may want to run a checkpoint with some frequency.
+ </p>
+ <p>
+ Note that once you have committed a transaction, the transaction
+ handle that you used for the transaction is no longer valid. To
+ perform database activities under the control of a new
+ transaction, you must obtain a fresh transaction handle.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="nodurabletxn"></a>Non-Durable Transactions</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As previously noted, by default transaction commits are
+ durable because they cause the modifications performed
+ under the transaction to be synchronously recorded in
+ your on-disk log files. However, it is possible to use
+ non-durable transactions.
+ </p>
+ <p>
+ You may want non-durable transactions for performance
+ reasons. For example, you might be using transactions
+ simply for the isolation guarantee.
+
+ <span>
+ In this case, you might
+ not want a durability guarantee and so you may want to
+ prevent the disk I/O that normally accompanies a
+ transaction commit.
+ </span>
+
+ </p>
+ <p>
+ There are several ways to remove the durability guarantee
+ for your transactions:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Specify
+ <span>
+ <tt class="literal">DB_TXN_NOSYNC</tt> using the
+ <tt class="methodname">DB_ENV-&gt;set_flags()</tt>
+
+ method.
+ </span>
+
+ This causes DB to not synchronously force any
+ <span>
+ log
+ </span>
+ data to disk upon transaction commit.
+
+ <span>
+ That is, the modifications are held entirely
+ in the in-memory cache and the logging
+ information is not forced to the filesystem for
+ long-term storage.
+ </span>
+
+ Note, however, that the
+ <span>
+ logging
+ </span>
+ data will eventually make it to the filesystem (assuming no
+ application or OS crashes) as a part of DB's
+ management of its logging buffers and/or cache.
+ </p>
+ <p>
+ This form of a commit provides a weak durability
+ guarantee because data loss can occur due to
+ an application
+ or OS crash.
+ </p>
+ <p>
+ This behavior is specified on a per-environment
+ handle basis. In order for your application to exhibit consistent
+ behavior, you need to specify this
+ <span>flag</span>
+
+ for all of the environment handles used in your application.
+ </p>
+ <p>
+ You can achieve this behavior on a transaction by transaction basis by
+ <span>
+ specifying <tt class="literal">DB_TXN_NOSYNC</tt> to the
+ <tt class="methodname">DB_TXN-&gt;commit()</tt>
+
+
+ method.
+ </span>
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify
+ <span>
+ <tt class="literal">DB_TXN_WRITE_NOSYNC</tt> using the
+ <tt class="methodname">DB_ENV-&gt;set_flags()</tt>
+
+ method.
+ </span>
+
+
+
+ This causes
+ <span>
+ logging
+ </span>
+ data to be synchronously
+ written to the OS's file system buffers upon
+ transaction commit. The data will eventually be
+ written to disk, but this occurs when the
+ operating system chooses to schedule the
+ activity; the transaction commit can complete
+ successfully before this disk I/O is performed
+ by the OS.
+ </p>
+ <p>
+ This form of commit protects you against application
+ crashes, but not against OS
+ crashes. This method offers less room for the possibility of data loss than does
+ <span><tt class="literal">DB_TXN_NOSYNC</tt>.</span>
+
+ </p>
+ <p>
+ This behavior is specified on a per-environment
+ handle basis. In order for your application to exhibit consistent
+ behavior, you need to specify this
+ <span>flag</span>
+
+ for all of the environment handles used in your application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Maintain your logs entirely in-memory. In this
+ case, your logs are never written to disk. The
+ result is that you lose all durability guarantees.
+ See
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="envopen.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Opening a Transactional Environment and
+ Database
+
+  </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Aborting a Transaction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/wrapup.html b/db/docs/gsg_txn/C/wrapup.html
new file mode 100644
index 000000000..32370c29f
--- /dev/null
+++ b/db/docs/gsg_txn/C/wrapup.html
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 6. Summary and Examples</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="logconfig.html" title="Configuring the Logging Subsystem" />
+ <link rel="next" href="txnexample_c.html" title="Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 6. Summary and Examples</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="logconfig.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnexample_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="wrapup"></a>Chapter 6. Summary and Examples</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="wrapup.html#anatomy">Anatomy of a Transactional Application</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnexample_c.html">Transaction Example</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Throughout this manual we have presented the concepts and
+ mechanisms that you need to provide transactional protection for
+ your application. In this chapter, we summarize these
+ mechanisms, and we provide a complete example of a multi-threaded
+ transactional DB application.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="anatomy"></a>Anatomy of a Transactional Application</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactional applications are characterized by performing the
+ following activities:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Create your environment handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your environment, specifying that the following
+ subsystems be used:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Transactional Subsystem (this also initializes the
+ logging subsystem).
+ </p>
+ </li>
+ <li>
+ <p>
+ Memory pool (the in-memory cache).
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ </li>
+ <li>
+ <p>
+ Locking subsystem (if your application is multi-process or multi-threaded).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ It is also highly recommended that you run normal recovery
+ upon first environment open. Normal recovery examines only those logs required
+ to ensure your database files are consistent relative to the information found in your
+ log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally spawn off any utility threads that you might need. Utility
+ threads can be used to run checkpoints periodically, or to
+ periodically run a deadlock detector if you do not want to
+ use DB's built-in deadlock detector.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open whatever database handles that you need.
+ </p>
+ </li>
+ <li>
+ <p>
+ Spawn off worker threads. How many of these you need and
+ how they split their DB workload is entirely up to your
+ application's requirements. However, any worker threads
+ that perform write operations against your databases will do
+ the following:
+ </p>
+ <div class="orderedlist">
+ <ol type="a">
+ <li>
+ <p>
+ Begin a transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Perform one or more read and write
+ operations against your databases.
+ </p>
+ </li>
+ <li>
+ <p>
+ Commit the transaction if all goes well.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort and retry the operation if a deadlock is
+ detected.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort the transaction for most other errors.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </li>
+ <li>
+ <p>
+ On application shutdown:
+ </p>
+ <div class="orderedlist">
+ <ol type="a">
+ <li>
+ <p>
+ Make sure there are no opened cursors.
+ </p>
+ </li>
+ <li>
+ <p>
+ Make sure there are no active transactions. Either
+ abort or commit all transactions before shutting
+ down.
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your databases
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Robust applications should monitor their database worker threads to
+ make sure they have not died unexpectedly. If a thread does
+ terminate abnormally, you must shutdown all your worker threads
+ and then run normal recovery (you will have to reopen your
+ environment to do this). This is the only way to clear any
+ resources (such as a lock or a mutex) that the abnormally
+ exiting worker thread might have been holding at the time that
+ it died.
+ </p>
+ <p>
+ Failure to perform this recovery can cause your
+ still-functioning worker threads to eventually block forever
+ while waiting for a lock that will never be released.
+ </p>
+ </div>
+ <p>
+ In addition to these activities, which are all entirely handled by
+ code within your application, there are some administrative
+ activities that you should perform:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Periodically checkpoint your application. Checkpoints will
+ reduce the time to run recovery in the event that one is
+ required. See <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Periodically back up your database and log files. This is
+ required in order to fully obtain the durability guarantee
+ made by DB's transaction ACID support. See
+ <a href="backuprestore.html">Backup Procedures</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ You may want to maintain a hot failover if 24x7 processing
+ with rapid restart in the face of a disk hit is important
+ to you. See <a href="hotfailover.html">Using Hot Failovers</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="logconfig.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnexample_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Configuring the Logging Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transaction Example</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/C/writeblock.jpg b/db/docs/gsg_txn/C/writeblock.jpg
new file mode 100644
index 000000000..4b382b82f
--- /dev/null
+++ b/db/docs/gsg_txn/C/writeblock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/CXX/BerkeleyDB-Core-Cxx-Txn.pdf b/db/docs/gsg_txn/CXX/BerkeleyDB-Core-Cxx-Txn.pdf
new file mode 100644
index 000000000..27b08a31c
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/BerkeleyDB-Core-Cxx-Txn.pdf
Binary files differ
diff --git a/db/docs/gsg_txn/CXX/abortresults.html b/db/docs/gsg_txn/CXX/abortresults.html
new file mode 100644
index 000000000..6f28eb125
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/abortresults.html
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Aborting a Transaction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="next" href="autocommit.html" title="Auto Commit" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Aborting a Transaction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="autocommit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="abortresults"></a>Aborting a Transaction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When you abort a transaction, all database modifications performed
+ under the protection of the transaction are discarded, and all
+ locks currently held by the transaction are released. In this event,
+ your data is simply left in the
+ state that it was in before the transaction began performing data
+ modifications.
+ </p>
+ <p>
+ Note that aborting a transaction may result in disk
+ <span>
+ I/O if your logs are backed by the filesystem.
+ </span>
+
+ It is possible that during the course of your transaction,
+ logging data and/or database
+ <span>pages</span>
+
+ were written to backing files on disk. For this reason, DB
+ notes that the abort occurred in its log files so that at a
+ minimum the database can be brought into a consistent state at
+ recovery time.
+ </p>
+ <p>
+ Also, once you have aborted a transaction, the transaction
+ handle that you used for the transaction is no longer valid. To
+ perform database activities under the control of a new
+ transaction, you must obtain a fresh transactional handle.
+ </p>
+ <p>
+ To abort a transaction, call
+
+ <span><tt class="methodname">DbTxn::abort()</tt>.</span>
+
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="autocommit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 3. Transaction Basics </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Auto Commit</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/architectrecovery.html b/db/docs/gsg_txn/CXX/architectrecovery.html
new file mode 100644
index 000000000..8d785bc30
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/architectrecovery.html
@@ -0,0 +1,446 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Designing Your Application for Recovery</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="recovery.html" title="Recovery Procedures" />
+ <link rel="next" href="hotfailover.html" title="Using Hot Failovers" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Designing Your Application for Recovery</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="recovery.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="hotfailover.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="architectrecovery"></a>Designing Your Application for Recovery</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When building your DB application, you should consider how you will run recovery. If you are building a
+ single threaded, single process application, it is fairly simple to run recovery when your application first
+ opens its environment. In this case, you need only decide if you want to run recovery every time you open
+ your application (recommended) or only some of the time, presumably triggered by a start up option
+ controlled by your application's user.
+ </p>
+ <p>
+ However, for multi-threaded and multi-process applications, you need to carefully consider how you will
+ design your application's startup code so as to run recovery only when it makes sense to do so.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithreadrecovery"></a>Recovery for Multi-Threaded Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If your application uses only one environment handle, then handling recovery for a multi-threaded
+ application is no more difficult than for a single threaded application. You simply open the environment
+ in the application's main thread, and then pass that handle to each of the threads that will be
+ performing DB operations. We illustrate this with our final example in this book (see
+ <a href="txnexample_c.html">Transaction Example</a>
+
+
+
+ for more information).
+ </p>
+ <p>
+ Alternatively, you can have each worker thread open its own environment handle. However, in this case,
+ designing for recovery is a bit more complicated.
+ </p>
+ <p>
+ Generally, when a thread performing database operations fails
+ or hangs, it is frequently best to simply
+ restart the application and run recovery upon application
+ startup as normal. However, not all applications can afford
+ to restart because a single thread has misbehaved.
+ </p>
+ <p>
+ If you are attempting to continue operations in the face of a misbehaving thread,
+ then at a minimum recovery must be run if a thread performing database operations fails or hangs.
+ </p>
+ <p>
+ Remember that recovery clears the environment of all
+ outstanding locks, including any that might be outstanding
+ from an aborted thread. If these locks are not cleared,
+ other threads performing database operations can back up
+ behind the locks obtained but never cleared by the failed
+ thread. The result will be an application that hangs
+ indefinitely.
+ </p>
+ <p>
+ To run recovery under these circumstances:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Suspend or shutdown all other threads performing
+ database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Discarding any open environment handles. Note that
+ attempting to gracefully close these handles may be
+ asking for trouble; the close can fail if the
+ environment is already in need of recovery. For
+ this reason, it is best and easiest to simply discard the handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open new handles, running recovery as you open
+ them.
+ See <a href="recovery.html#normalrecovery">Normal Recovery</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restart all your database threads.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ A traditional way to handle this activity is to spawn a watcher thread that is responsible for making
+ sure all is well with your threads, and performing the above actions if not.
+ </p>
+ <p>
+ However, in the case where each worker thread opens and maintains its own environment handle, recovery
+ is complicated for two reasons:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ For some applications and workloads, it might be
+ worthwhile to give your database threads the
+ ability to gracefully finalize any on-going
+ transactions. If this is the case, your
+ code must be capable of signaling each thread
+ to halt DB activities and close its
+ environment. If you simply run recovery against the
+ environment, your database threads will
+ detect this and fail in the midst of performing their
+ database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Your code must be capable of ensuring only one
+ thread runs recovery before allowing all other
+ threads to open their respective environment
+ handles. Recovery should be single threaded because when
+ recovery is run against an environment, it is
+ deleted and then recreated. This will cause all
+ other processes and threads to &quot;fail&quot; when they
+ attempt operations against the newly recovered
+ environment. If all threads run recovery
+ when they start up, then it is likely that some
+ threads will fail because the environment that they
+ are using has been recovered. This will cause the thread to have to re-execute its own recovery
+ path. At best, this is inefficient and at worst it could cause your application to fall into an
+ endless recovery pattern.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multiprocessrecovery"></a>Recovery in Multi-Process Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Frequently, DB applications use multiple processes to interact with the databases. For example, you may
+ have a long-running process, such as some kind of server, and then a series of administrative tools that
+ you use to inspect and administer the underlying databases. Or, in some web-based architectures, different
+ services are run as independent processes that are managed by the server.
+ </p>
+ <p>
+ In any case, recovery for a multi-process environment is complicated for two reasons:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ In the event that recovery must be run, you might
+ want to notify processes interacting with the environment
+ that recovery is about to occur and give them a
+ chance to gracefully terminate. Whether it is
+ worthwhile for you to do this is entirely dependent
+ upon the nature of your application. Some
+ long-running applications with multiple processes
+ performing meaningful work might want to do this.
+ Other applications with processes performing database
+ operations that are likely to be harmed by error conditions in other
+ processes will likely find it to be not worth the
+ effort. For this latter group, the chances of
+ performing a graceful shutdown may be low anyway.
+ </p>
+ </li>
+ <li>
+ <p>
+ Unlike single process scenarios, it can quickly become wasteful for every process interacting
+ with the databases to run recovery when it starts up. This is partly because recovery
+ <span class="emphasis"><em>does</em></span> take some amount of time to run, but mostly you want to
+ avoid a situation where your server must
+ reopen all its environment handles just because you fire up a command line database
+ administrative utility that always runs recovery.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ DB offers you two methods by which you can manage recovery for multi-process DB applications.
+ Each has different strengths and weaknesses, and they are described in the next sections.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="mp_recover_effects"></a>Effects of Multi-Process Recovery</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is worth noting that the following sections describe recovery processes than
+ can result in one process running recovery while other processes are currently actively performing
+ database operations.
+ </p>
+ <p>
+ When this happens, the current database operation will
+ abnormally fail, indicating a DB_RUNRECOVERY condition.
+ This means that your application should immediately abandon any database operations that it may have
+ on-going, discard any environment handles it has opened, and obtain and open new handles.
+ </p>
+ <p>
+ The net effect of this is that any writes performed by unresolved transactions will be lost.
+ For persistent applications (servers, for example), the services it provides will also be
+ unavailable for the amount of time that it takes to complete a recovery and for all participating
+ processes to reopen their environment handles.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="db_register"></a>Process Registration</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ One way to handle multi-process recovery is for every process to &quot;register&quot; its environment. In
+ doing so, the process gains the ability to see if any other applications are using the
+ environment and, if so, whether they have suffered an abnormal termination. If an abnormal
+ termination is detected, the process runs recovery; otherwise, it does not.
+ </p>
+ <p>
+ Note that using process registration also ensures that
+ recovery is serialized across applications. That is,
+ only one process at a time has a chance to run
+ recovery. Generally this means that the first process
+ to start up will run recovery, and all other processes
+ will silently not run recovery because it is not
+ needed.
+ </p>
+ <p>
+ To cause your application to register its environment, you specify
+ <span>
+ the <tt class="literal">DB_REGISTER</tt> flag when you open your environment.
+ Note that you must also specify <tt class="literal">DB_RECOVER</tt> or
+ <tt class="literal">DB_RECOVER_FATAL</tt> for your environment open.
+ </span>
+
+
+ If during the open, DB determines that recovery must be run, this indicates the type of
+ recovery that is run. If you do not specify either type of recovery, then no recovery is run if
+ the registration process identifies a need for it. In this case, the environment open simply
+ fails by
+ <span>returning <tt class="literal">DB_RUNRECOVERY</tt>.</span>
+
+ </p>
+ <p>
+ Be aware that there are some limitations/requirements if you want your various processes to
+ coordinate recovery using this registration process:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ There can be only one environment handle per
+ environment per process. In the case of multi-threaded
+ processes, the environment handle must be shared across threads.
+ </p>
+ </li>
+ <li>
+ <p>
+ All processes sharing the environment must use registration. If registration is
+ not uniformly used across all participating processes, then you can see inconsistent results
+ in terms of your application's ability to recognize that recovery must be run.
+ </p>
+ </li>
+ <li>
+ <p>
+ You can not use this mechanism with the <tt class="methodname">failchk()</tt>
+ mechanism
+ described in the next section.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="failchk"></a>Failure Checking</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For very large and robust multi-process applications, the most common way to ensure all the
+ processes are working as intended is to make use of a watchdog process. To assist a watchdog
+ process, DB offers a failure checking mechanism.
+ </p>
+ <p>
+ When a thread of control fails with open environment handles, the result is that there may be
+ resources left locked or corrupted. Other threads of control may encountered these unavailable resources
+ quickly or not at all, depending on data access patterns.
+ </p>
+ <p>
+ In any case, the DB failure checking mechanism allows a watchdog to detect if an environment is
+ unusable as a result of a thread of control failure. It should be called periodically
+ (for example, once a minute) from the watchdog process. If the environment is deemed unusable, then
+ the watchdog process is notified that recovery should be run. It is then up to the watchdog to
+ actually run recovery. It is also the watchdog's responsibility to decide what to do about currently
+ running processes before running recovery. The watchdog could, for example, attempt to
+ gracefully shutdown or kill all relevant processes before running recovery.
+ </p>
+ <p>
+ Note that failure checking need not be run from a separate process, although conceptually that is
+ how the mechanism is meant to be used. This same mechanism could be used in a multi-threaded
+ application that wants to have a watchdog thread.
+ </p>
+ <p>
+ To use failure checking you must:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ <span>
+ Provide an <tt class="function">is_alive()</tt> call back using the
+
+ <tt class="methodname">Dbenv::set_isalive()</tt>
+ method.
+ </span>
+
+ DB uses this method to determine whether a specified process and thread
+ is alive when the failure checking is performed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Possibly provide a
+
+ <span>
+ <tt class="literal">thread_id</tt> callback
+ </span>
+
+
+
+ that uniquely identifies a process
+ and thread of control. This
+ <span>callback</span>
+
+ is only necessary if the standard process and thread
+ identification functions for your platform are not sufficient to for use by failure
+ checking. This is rarely necessary and is usually because the thread and/or process ids
+ used by your system cannot fit into an unsigned integer.
+ </p>
+ <p>
+ You provide this callback using the
+
+ <tt class="methodname">DbEnv::set_thread_id()</tt>
+ method. See the API reference for this method for more information on when setting a thread
+ id callback might be necessary.
+ </p>
+ </li>
+ <li>
+ <p>
+ Call the
+
+ <tt class="methodname">DbEnv::failchk()</tt>
+
+ method periodically. You can do this either periodically (once per minute, for example), or
+ whenever a thread of control exits for your application.
+ </p>
+ <p>
+ If this method determines that a thread of control exited holding read locks, those locks
+ are automatically released. If the thread of control exited with an unresolved transaction,
+ that transaction is aborted. If any other problems exist beyond these such that the
+ environment must be recovered, the method will
+ <span>return <tt class="literal">DB_RUNRECOVERY</tt>.</span>
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Note that this mechanism should not be mixed with the process registration method of multi-process
+ recovery described in the previous section.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="recovery.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="hotfailover.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Recovery Procedures </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Using Hot Failovers</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/autocommit.html b/db/docs/gsg_txn/CXX/autocommit.html
new file mode 100644
index 000000000..7150c437a
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/autocommit.html
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Auto Commit</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="abortresults.html" title="Aborting a Transaction" />
+ <link rel="next" href="nestedtxn.html" title="Nested Transactions" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Auto Commit</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="autocommit"></a>Auto Commit</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ While transactions are frequently used to provide atomicity to
+ multiple database operations, it is sometimes necessary to perform
+ a single database operation under the control of a transaction.
+ Rather than force you to obtain a transaction, perform the single
+ write operation, and then either commit or abort the transaction,
+ you can automatically group this sequence of events using
+ <span class="emphasis"><em>auto commit</em></span>.
+ </p>
+ <p>
+ To use auto commit:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Open your environment and your databases so that they support
+ transactions. See <a href="enabletxn.html">Enabling Transactions</a>
+ for details.
+ </p>
+ <p>
+ Note that frequently auto commit is used for the environment
+ or database open. To use auto commit for either your
+ environment or database open, specify
+ <tt class="literal">DB_AUTO_COMMIT</tt> to the
+
+
+ <tt class="methodname">DbEnv::set_flags()</tt>
+ or
+
+ <tt class="methodname">Db::open()</tt>
+ method. If you specify auto commit for the environment
+ open, then you do not need to also specify auto commit
+ for the database open.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not provide a transactional handle to the method that is
+ performing the database write operation.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Note that auto commit is not available for cursors. You must always
+ open your cursor using a transaction if you want the cursor's
+ operations to be transactional protected. See
+ <a href="txncursor.html">Transactional Cursors</a> for details on using
+ transactional cursors.
+ </p>
+ <p>
+ For example, the following uses auto commit to perform the database write operation:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN; // Initialize transactions
+
+ u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+ const char *keystr =&quot;thekey&quot;;
+ const char *datastr = &quot;thedata&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+
+ // Open the database. Note that we are using auto commit for
+ // the open, so the database is able to support transactions.
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name */
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ Dbt key, data;
+ key.set_data(keystr);
+ key.set_size((strlen(keystr) + 1) * sizeof(char));
+ key.set_data(datastr);
+ key.set_size((strlen(datastr) + 1) * sizeof(char));
+
+ // Perform the write. Because the database was opened to support
+ // auto commit, this write is performed using auto commit.
+ db-&gt;put(NULL, &amp;key, &amp;data, 0);
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ try {
+ if (dbp != NULL)
+ dbp-&gt;close(0);
+ myEnv.close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Aborting a Transaction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Nested Transactions</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/backuprestore.html b/db/docs/gsg_txn/CXX/backuprestore.html
new file mode 100644
index 000000000..711e8b181
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/backuprestore.html
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Backup Procedures</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="next" href="recovery.html" title="Recovery Procedures" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Backup Procedures</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="filemanagement.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="backuprestore"></a>Backup Procedures</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ <span class="emphasis"><em>Durability</em></span> is an important part of your
+ transactional guarantees. It means that once a transaction has been
+ successfully committed, your application will always see the results of that
+ transaction.
+ </p>
+ <p>
+ Of course, no software algorithm can guarantee durability in the face of physical data loss. Hard drives
+ can fail, and if you have not copied your data to locations other than your primary disk drives,
+ then you will lose data when those drives fail. Therefore, in order to truly obtain a durability
+ guarantee, you need to ensure that any data stored on disk is backed up to secondary or alternative storage,
+ such as secondary disk drives, or offline tapes.
+ </p>
+ <p>
+ There are three different types of backups that you can
+ perform with DB databases and log files. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Offline backups
+ </p>
+ <p>
+ This type of backup is perhaps the easiest to perform as it
+ involves simply copying database and log files to an
+ offline storage area. It also gives you a snapshot of the
+ database at a fixed, known point in time. However, you
+ cannot perform this type of a backup while you are performing
+ writes to the database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Hot backups
+ </p>
+ <p>
+ This type of backup gives you a snapshot of your database.
+ Since your application can be writing to the database at the time that the
+ snapshot is being taken, you do not necessarily know what
+ the exact state of the database is for that given snapshot.
+ </p>
+ </li>
+ <li>
+ <p>
+ Incremental backups
+ </p>
+ <p>
+ This type of backup refreshes a previously performed backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Once you have performed a backup, you can
+ perform <span class="emphasis"><em>catastrophic recovery</em></span> to restore
+ your databases from the backup. See
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ for more information.
+ </p>
+ <p>
+ Note that you can also maintain a hot failover. See
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ for more information.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="copyutilities"></a>About Unix Copy Utilities</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ If you are copying database files you must copy databases atomically,
+ in multiples 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 because 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>
+ On some platforms (most notably, some releases of Solaris), the copy utility (<tt class="literal">cp</tt>) was
+ implemented using the <tt class="function">mmap()</tt> system call rather than the
+ <tt class="function">read()</tt> system call. Because <tt class="function">mmap()</tt> did not make the same
+ guarantee of read atomicity as did <tt class="function">read()</tt>, the <tt class="literal">cp</tt> utility
+ could create corrupted copies of the databases.
+ </p>
+ <p>
+ Also, some platforms have implementations of the <tt class="literal">tar</tt> utility that performs 10KB block
+ reads by default. Even when an output block size is specified, the utility will still not read the
+ underlying databases in multiples of the specified block size. Again, the result can be a corrupted backup.
+ </p>
+ <p>
+ To fix these problems, use the <tt class="literal">dd</tt> utility instead of <tt class="literal">cp</tt> or
+ <tt class="literal">tar</tt>. When you use <tt class="literal">dd</tt>, make sure you specify a block size that is
+ equal to, or an even multiple of, your database page size. Finally, if you plan to use a system
+ utility to copy database files, you may want to use a system call trace utility (for example,
+ <tt class="literal">ktrace</tt> or <tt class="literal">truss</tt>) to make sure you are not using a I/O size that is
+ smaller than your database page size. You can also use these utilities to make sure the system utility is
+ not using a system call other than <tt class="function">read()</tt>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="standardbackup"></a>Offline Backups</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To create an offline backup:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Commit or abort all on-going transactions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Pause all database writes.
+ </p>
+ </li>
+ <li>
+ <p>
+ Force a checkpoint. See
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy all your database files to the backup location.
+ <span>
+ Note that you can simply copy all of the database
+ files, or you can determine which database files
+ have been written during the lifetime of the current
+ logs. To do this, use either the
+ <span>
+
+ <tt class="methodname">DbEnv::log_archive()</tt>
+ method with the <tt class="literal">DB_ARCH_DATA</tt>
+ option,
+ </span>
+
+
+ or use the <span><b class="command">db_archive</b></span>
+ command with the <tt class="literal">-s</tt> option.
+ </span>
+ </p>
+ <p>
+ However, be aware that backing up just the modified databases only works if you have all of your
+ log files. If you have been removing log files for any reason then using
+ <span>
+ <tt class="methodname">log_archive()</tt>
+ </span>
+
+
+ can result in an
+ unrecoverable backup because you might not be notified of a database file that was modified.
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy the <span class="emphasis"><em>last</em></span> log file to your backup location.
+ Your log files are named
+ <tt class="literal">log.<span class="emphasis"><em>xxxxxxxxxx</em></span></tt>,
+ where <span class="emphasis"><em>xxxxxxxxxx</em></span> is a
+ sequential number. The last log file is the file
+ with the highest number.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="hotbackup"></a>Hot Backup</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To create a hot backup, you do not have to stop database
+ operations. Transactions may be on-going and you can be writing
+ to your database at the time of the backup. However, this means
+ that you do not know exactly what the state of your database is
+ at the time of the backup.
+ </p>
+ <p>
+ You can use the <span><b class="command">db_hotbackup</b></span> command line utility to create a hot backup for you. This
+ utility will (optionally) run a checkpoint and the copy all necessary files to a target directory.
+ </p>
+ <p>
+ Alternatively, you can manually create a hot backup as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Copy all your database files to the backup location.
+ <span>
+ Note that you can simply copy all of the database
+ files, or you can determine which database files
+ have been written during the lifetime of the current
+ logs. To do this, use either the
+ <span>
+
+ <tt class="methodname">DbEnv::log_archive()</tt>
+ with the <tt class="literal">DB_ARCH_DATA</tt>
+ option,
+ </span>
+
+
+ or use the <span><b class="command">db_archive</b></span>
+ command with the <tt class="literal">-s</tt> option.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy all logs to your backup location.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ It is important to copy your database files <span class="emphasis"><em>and
+ then</em></span> your logs. In this way,
+ you can complete or roll back any database operations that were only partially completed
+ when you copied the databases.
+ </p>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="incrementalbackups"></a>Incremental Backups</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Once you have created a full backup (that is, either a
+ offline or hot backup), you can create incremental backups.
+ To do this, simply copy all of your currently existing log
+ files to your backup location.
+ </p>
+ <p>
+ Incremental backups do not require you to run a checkpoint
+ or to cease database write operations.
+ </p>
+ <p>
+ When you are working with incremental backups, remember
+ that the greater the number of log files contained in
+ your backup, the longer recovery will take.
+ You should run full backups
+ on some interval, and then do incremental backups on a shorter interval.
+ How frequently you need to run a full backup
+ is determined by the rate at which your databases change and
+ how sensitive your application is to lengthy recoveries
+ (should one be required).
+ </p>
+ <p>
+ You can also shorten recovery time by running recovery against the backup as you take each incremental
+ backup. Running recovery as you go means that there will be less work for DB to do if you should
+ ever need to restore your environment from the backup.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="filemanagement.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 5. Managing DB Files </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recovery Procedures</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/blocking_deadlocks.html b/db/docs/gsg_txn/CXX/blocking_deadlocks.html
new file mode 100644
index 000000000..69c14830f
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/blocking_deadlocks.html
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Locks, Blocks, and Deadlocks</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="next" href="lockingsubsystem.html" title="The Locking Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Locks, Blocks, and Deadlocks</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnconcurrency.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="lockingsubsystem.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="blocking_deadlocks"></a>Locks, Blocks, and Deadlocks</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is important to understand how locking works in a
+ concurrent application before continuing with a description of
+ the concurrency mechanisms DB makes available to you.
+ Blocking and deadlocking have important performance implications
+ for your application. Consequently, this section provides a
+ fundamental description of these concepts, and how they affect
+ DB operations.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="locks"></a>Locks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When one thread of control wants to obtain access to an
+ object, it requests a <span class="emphasis"><em>lock</em></span> for that
+ object. This lock is what allows DB to provide your
+ application with its transactional isolation guarantees by
+ ensuring that:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ no other thread of control can read that object (in
+ the case of an exclusive lock), and
+ </p>
+ </li>
+ <li>
+ <p>
+ no other thread of control can modify that object
+ (in the case of an exclusive or non-exclusive lock).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="lockresources"></a>Lock Resources</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When locking occurs, there are conceptually three resources
+ in use:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ The locker.
+ </p>
+ <p>
+ This is the thing that holds the lock. In a
+ transactional application, the locker is a
+ transaction handle.
+ <span>
+ For non-transactional operations, the locker is a cursor or a
+
+ <span>Db</span>
+
+
+ handle.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ The lock.
+ </p>
+ <p>
+ This is the actual data structure that locks
+ the object. In DB, a locked
+ object structure in the lock manager
+ is representative of the object that
+ is locked.
+ </p>
+ </li>
+ <li>
+ <p>
+ The locked object.
+ </p>
+ <p>
+ The thing that your application
+ actually wants to lock.
+ In a DB
+ application, the locked object is usually a
+ <span>
+ database page, which in turn contains
+ multiple database entries (key and data).
+ <span>
+ However, for Queue databases,
+ individual database records are locked.
+ </span>
+
+ </span>
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ You can configure how many total lockers, locks,
+ and locked objects your
+ application is allowed to support. See
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ for details.
+ </p>
+ <p>
+ The following figure shows a transaction handle,
+ <tt class="literal">Txn A</tt>, that is holding a lock on
+ database
+ <span>page</span>
+
+ <tt class="literal">002</tt>. In this graphic, <tt class="literal">Txn
+ A</tt> is the locker, and the locked object is
+ <span>page</span>
+
+ <tt class="literal">002</tt>. Only a single lock is in use
+ in this operation.
+ </p>
+ <div class="mediaobject">
+ <img src="simplelock.jpg" />
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="locktypes"></a>Types of Locks</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB applications support both exclusive and
+ non-exclusive locks. <span class="emphasis"><em>Exclusive
+ locks</em></span> are granted when a
+ locker wants to write to an object. For this reason,
+ exclusive locks are also sometimes called
+ <span class="emphasis"><em>write locks</em></span>.
+ </p>
+ <p>
+ An exclusive lock prevents any other locker from
+ obtaining any sort of a lock on the object. This
+ provides isolation by ensuring that no other locker can
+ observe or modify an exclusively locked object until the locker is done
+ writing to that object.
+ </p>
+ <p>
+ <span class="emphasis"><em>Non-exclusive locks</em></span> are granted
+ for read-only access. For this reason, non-exclusive
+ locks are also sometimes called <span class="emphasis"><em>read
+ locks</em></span>. Since multiple lockers can
+ simultaneously hold read locks on the same
+ object, read locks are also
+ sometimes called <span class="emphasis"><em>shared locks</em></span>.
+ </p>
+ <p>
+ A non-exclusive lock prevents any other locker from
+ modifying the locked object while the locker is still
+ reading the object. This is how transactional cursors are able to
+ achieve repeatable reads; by default, the
+ cursor's transaction holds
+ a read lock on any object that the cursor has examined until
+ such a time as the transaction is committed
+ or aborted.
+ <span>
+ You can avoid these read locks by using
+ snapshot isolation. See <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ for details.
+ </span>
+ </p>
+ <p>
+ In the following figure, <tt class="literal">Txn A</tt> and
+ <tt class="literal">Txn B</tt> are both holding read locks on
+ <span>page</span>
+
+ <tt class="literal">002</tt>, while <tt class="literal">Txn C</tt>
+ is holding a write lock on
+ <span>page</span>
+
+ <tt class="literal">003</tt>:
+ </p>
+ <div class="mediaobject">
+ <img src="rwlocks1.jpg" />
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="locklifetime"></a>Lock Lifetime</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A locker holds its locks until such a time as it does
+ not need the lock any more. What this means is:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ A transaction holds any locks that it obtains
+ until the transaction is committed or aborted.
+ </p>
+ </li>
+ <li>
+ <p>
+ All non-transaction operations hold locks
+ until such a time as the operation is completed.
+ For cursor operations, the lock is held until the cursor is moved to a new position or
+ closed.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="blocks"></a>Blocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Simply put, a thread of control is blocked when it attempts
+ to obtain a lock, but that attempt is denied because some
+ other thread of control holds a conflicting lock.
+ Once blocked, the thread of control is temporarily unable
+ to make any forward progress until the requested lock is
+ obtained or the operation requesting the lock is
+ abandoned.
+ </p>
+ <p>
+ Be aware that when we talk about blocking, strictly
+ speaking the thread is not what is attempting to obtain the
+ lock. Rather, some object within the thread (such as a
+ cursor) is attempting to obtain the
+ lock. However, once a locker attempts to
+ obtain a lock, the entire thread of control must pause until the lock
+ request is in some way resolved.
+ </p>
+ <p>
+ For example, if <tt class="literal">Txn A</tt> holds a write lock (an exclusive
+ lock) on
+ <span>object</span>
+
+ 002, then if <tt class="literal">Txn B</tt> tries to obtain a read <span class="emphasis"><em>or</em></span> write lock on
+ that
+ <span>object,</span>
+
+ the thread of control in which <tt class="literal">Txn
+ B</tt> is running
+ is blocked:
+ </p>
+ <div class="mediaobject">
+ <img src="writeblock.jpg" />
+ </div>
+ <p>
+ However, if <tt class="literal">Txn A</tt> only holds a read
+ lock (a shared lock) on
+ <span>object</span>
+
+ <tt class="literal">002</tt>, then only those handles that attempt to obtain a
+ write lock on that
+ <span>object</span>
+
+ will block.
+ </p>
+ <div class="mediaobject">
+ <img src="readblock.jpg" />
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ The previous description describes DB's default
+ behavior when it cannot obtain a lock. It is
+ possible to configure DB transactions so that
+ they will not block. Instead, if a lock is
+ unavailable, the application is immediately notified of a
+ deadlock situation. See <a href="txnnowait.html">No Wait on Blocks</a>
+ for more information.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="blockperformance"></a>Blocking and Application Performance</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Multi-threaded
+ <span>
+ and multi-process
+ </span>
+ applications typically perform better than simple
+ single-threaded applications because the
+ application can perform one part of its workload
+ (updating
+ <span>a database record, </span>
+
+ for example) while it is waiting for some other
+ lengthy operation to complete (performing disk or
+ network I/O, for example). This performance
+ improvement is particularly noticeable if you use
+ hardware that offers multiple CPUs, because the threads
+ <span>
+ and processes
+ </span>
+ can run simultaneously.
+ </p>
+ <p>
+ That said, concurrent applications can see reduced
+ workload throughput if their threads of control are
+ seeing a large amount of lock contention. That is,
+ if threads are blocking on lock requests, then that
+ represents a performance penalty for your
+ application.
+ </p>
+ <p>
+ Consider once again the previous diagram of a blocked write lock request.
+ In that diagram, <tt class="literal">Txn C</tt> cannot
+ obtain its requested write lock because
+ <tt class="literal">Txn A</tt> and <tt class="literal">Txn
+ B</tt> are both already holding read locks on
+ the requested
+ <span>object.</span>
+
+ In this case, the thread in which
+ <tt class="literal">Txn C</tt> is running will pause until
+ such a time as <tt class="literal">Txn C</tt> either
+ obtains its write lock, or the operation
+ that is requesting the lock is abandoned.
+ The fact that <tt class="literal">Txn
+ C</tt>'s thread has temporarily halted all
+ forward progress represents a performance penalty
+ for your application.
+ </p>
+ <p>
+ Moreover, any read locks that are requested while
+ <tt class="literal">Txn C</tt> is waiting for its write
+ lock will also block until such a time as
+ <tt class="literal">Txn C</tt> has obtained and
+ subsequently released its write lock.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="blockavoidance"></a>Avoiding Blocks</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Reducing lock contention is an important part of
+ performance tuning your concurrent DB
+ application. Applications that have multiple
+ threads of control obtaining exclusive (write)
+ locks are prone to contention issues. Moreover, as
+ you increase the numbers of lockers and as you
+ increase the time that a lock is held, you increase
+ the chances of your application seeing lock contention.
+ </p>
+ <p>
+ As you are designing your application, try to do
+ the following in order to reduce lock contention:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Reduce the length of time your application
+ holds locks.
+ </p>
+ <p>
+ Shorter lived transactions will result in
+ shorter lock lifetimes, which will in turn
+ help to reduce lock contention.
+ </p>
+ <p>
+ In addition, by default transactional cursors hold read
+ locks until such a time as the transaction is completed.
+ For this reason, try to
+ minimize the time you keep
+ transactional cursors
+ opened, or reduce your isolation
+ levels &#8211; see below.
+ </p>
+ </li>
+ <li>
+ <p>
+ If possible, access heavily accessed (read
+ or write) items toward the end of the
+ transaction. This reduces the amount of
+ time that a heavily used
+ <span>
+ page
+ </span>
+
+ is locked by the transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reduce your application's isolation
+ guarantees.
+ </p>
+ <p>
+ By reducing your isolation guarantees, you
+ reduce the situations in which a lock can
+ block another lock. Try using uncommitted reads
+ for your read operations in order to
+ prevent a read lock being blocked by a
+ write lock.
+ </p>
+ <p>
+ In addition, for cursors you can use degree
+ 2 (read committed) isolation, which causes
+ the cursor to release its read locks as
+ soon as it is done reading the record (as
+ opposed to holding its read locks until the
+ transaction ends).
+ </p>
+ <p>
+ Be aware that reducing your
+ isolation guarantees can have
+ adverse consequences for your
+ application. Before deciding
+ to reduce your isolation, take
+ care to examine your
+ application's isolation
+ requirements.
+ For information on isolation
+ levels, see
+ <a href="isolation.html">Isolation</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Consider your data access patterns.
+ </p>
+ <p>
+ Depending on the nature of your application,
+ this may be something that you can not
+ do anything about. However, if it is
+ possible to create your threads such that
+ they operate only on non-overlapping
+ portions of your database, then you can
+ reduce lock contention because your
+ threads will rarely (if ever) block on one another's
+ locks.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ It is possible to configure DB's transactions
+ so that they never wait on blocked lock requests.
+ Instead, if they are blocked on a lock request,
+ they will notify the application of a deadlock (see
+ the next section).
+ </p>
+ <p>
+ You configure this behavior on a transaction by
+ transaction basis. See <a href="txnnowait.html">No Wait on Blocks</a> for more information.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="deadlocks"></a>Deadlocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A deadlock occurs when two or more threads of control are
+ blocked, each waiting on a resource held by the other
+ thread. When this happens, there is no
+ possibility of the threads ever making forward progress
+ unless some outside agent takes action to break the
+ deadlock.
+ </p>
+ <p>
+ For example, if
+ <tt class="literal">Txn A</tt> is
+ blocked by <tt class="literal">Txn B</tt> at the same time
+ <tt class="literal">Txn B</tt> is blocked by <tt class="literal">Txn
+ A</tt> then the threads of control containing
+ <tt class="literal">Txn A</tt> and <tt class="literal">Txn B</tt> are
+ deadlocked; neither thread can make
+ any forward progress because neither thread will ever release the lock
+ that is blocking the other thread.
+ </p>
+ <div class="mediaobject">
+ <img src="deadlock.jpg" />
+ </div>
+ <p>
+ When two threads of control deadlock, the only
+ solution is to have a mechanism external to the two threads
+ capable of recognizing the deadlock and notifying at least
+ one thread that it is in a deadlock situation.
+ Once notified, a thread of
+ control must abandon the attempted operation in order to
+ resolve the deadlock.
+
+ <span>
+ DB's locking subsystem offers a deadlock notification
+ mechanism. See
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ for more information.
+ </span>
+
+
+ </p>
+ <p>
+ Note that when one locker in a thread of control is blocked
+ waiting on a lock held by another locker in that same
+ thread of the control, the thread is said to be
+ <span class="emphasis"><em>self-deadlocked</em></span>.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="deadlockavoidance"></a>Deadlock Avoidance</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The things that you do to avoid lock contention also
+ help to reduce deadlocks (see <a href="blocking_deadlocks.html#blockavoidance">Avoiding Blocks</a>).
+
+ <span>
+ Beyond that, you can also do the following in order to
+ avoid deadlocks:
+ </span>
+
+
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure all threads access data in the same
+ order as all other threads. So long as threads
+ lock database pages
+ in the same basic order, there is no
+ possibility of a deadlock (threads can still
+ block, however).
+ </p>
+ <p>
+ Be aware that if you are using secondary databases (indices), it is not possible to obtain
+ locks in a consistent order because you cannot predict the order in which locks are obtained
+ in secondary databases. If you are writing a concurrent application and you are using
+ secondary databases, you must be prepared to handle deadlocks.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are using BTrees in which you are
+ constantly adding and then deleting data, turn
+ Btree reverse split off. See
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Declare a read/modify/write lock for those
+ situations where you are reading a record in
+ preparation of modifying and then writing the
+ record. Doing this causes DB to give your
+ read operation a write lock. This means that no
+ other thread of control can share a read lock
+ (which might cause contention), but it also
+ means that the writer thread will not have to
+ wait to obtain a write lock when it is ready to
+ write the modified data back to the database.
+ </p>
+ <p>
+ For information on declaring
+ read/modify/write locks, see
+ <a href="readmodifywrite.html">Read/Modify/Write</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnconcurrency.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="lockingsubsystem.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 4. Concurrency </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> The Locking Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/deadlock.jpg b/db/docs/gsg_txn/CXX/deadlock.jpg
new file mode 100644
index 000000000..0995a84d8
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/deadlock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/CXX/enabletxn.html b/db/docs/gsg_txn/CXX/enabletxn.html
new file mode 100644
index 000000000..19ab65b21
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/enabletxn.html
@@ -0,0 +1,942 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 2. Enabling Transactions</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="perftune-intro.html" title="Performance Tuning" />
+ <link rel="next" href="envopen.html" title="Opening a Transactional Environment and&#10; Database&#10; &#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 2. Enabling Transactions</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="perftune-intro.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="envopen.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="enabletxn"></a>Chapter 2. Enabling Transactions</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="enabletxn.html#environments">Environments</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#filenaming">File Naming</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#errorsupport">Error Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#sharedmemory">Shared Memory Regions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#security">Security Considerations</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="envopen.html">Opening a Transactional Environment and
+ Database
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ In order to use transactions with your application, you must turn them
+ on. To do this you must:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Use an
+ environment (see <a href="enabletxn.html#environments">Environments</a> for details).
+ </p>
+ </li>
+ <li>
+ <p>
+ Turn on transactions for your environment.
+
+
+
+ <span>
+ You do this by providing the <tt class="literal">DB_INIT_TXN</tt>
+ flag to the
+ <tt class="methodname">DbEnv::open()</tt>
+
+ method.
+ </span>
+
+ <span>
+ Note that initializing the transactional subsystem implies that
+ the logging subsystem is also initialized. Also, note that
+ if you do not initialize transactions when you first create
+ your environment, then you cannot use transactions for that
+ environment after that. This is because DB
+ allocates certain structures needed for transactional
+ locking that are not available if the environment is
+ created without transactional support.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the in-memory cache by
+ <span>
+ passing the <tt class="literal">DB_INIT_MPOOL</tt>
+ flag to the
+ <tt class="methodname">DbEnv::open()</tt>
+
+ method.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the locking subsystem. This is what provides locking for concurrent applications. It also is used
+ to perform deadlock detection. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ <p>
+ You initialize the locking subsystem by
+ <span>
+ passing the <tt class="literal">DB_INIT_LOCK</tt>
+ flag to the
+ <tt class="methodname">DbEnv::open()</tt>
+
+ method.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the logging subsystem. While this is enabled by
+ default for transactional applications, we suggest that
+ you explicitly initialize it anyway for the purposes of code readability. The logging
+ subsystem is what provides your transactional application its durability guarantee, and it is required for
+ recoverability purposes. See <a href="filemanagement.html">Managing DB Files</a>
+ for more information.
+ </p>
+ <p>
+ You initialize the logging subsystem by
+ <span>
+ passing the <tt class="literal">DB_INIT_LOG</tt>
+ flag to the
+ <tt class="methodname">DbEnv::open()</tt>
+
+ method.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction-enable your databases. You do this by
+
+
+ <span>
+ encapsulating the database open in a transaction.
+ </span>
+
+
+
+ <span>
+ Note that the common practice is for auto commit to be used to
+ transaction-protect the database open. To use auto-commit, you
+ must still enable transactions as described here, but you do
+ not have to explicitly use a transaction when you open your
+ database. An example of this is given in the next section.
+ </span>
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="environments"></a>Environments</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For simple DB applications, environments are optional. However, in
+ order to transaction protect your database operations, you must use an
+ environment.
+ </p>
+ <p>
+ An <span class="emphasis"><em>environment</em></span>, represents an
+ encapsulation of one or more databases and any associated log and
+ region files. They are used to support multi-threaded
+ and multi-process applications by allowing different threads of
+ control to share the in-memory cache, the locking tables, the
+ logging subsystem, and the file namespace. By sharing these things,
+ your concurrent application is more efficient than if each thread
+ of control had to manage these resources on its own.
+ </p>
+ <p>
+ By default all DB databases are backed by files on disk. In
+ addition to these files, transactional DB applications create
+ logs that are also by default stored on disk (they can optionally
+ be backed using shared memory). Finally, transactional
+ DB applications also create and use shared-memory regions that
+ are also typically backed by the filesystem. But like databases and
+ logs, the regions can be maintained strictly in-memory if your
+ application requires it. For an example of an application that
+ manages all environment files in-memory, see
+ <span><a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>.</span>
+
+
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="filenaming"></a>File Naming</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to operate, your DB application must be able to
+ locate its database files, log files, and region files. If these
+ are stored in the filesystem, then you must tell DB where
+ they are located (a number of mechanisms exist that allow you to
+ identify the location of these files &#8211; see below). Otherwise,
+ by default they are located in the current working directory.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="envhome"></a>Specifying the Environment Home Directory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The environment home directory is used to determine where
+ DB files are located. Its location
+ is identified using one of the following mechanisms, in the
+ following order of priority:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ If no information is given as to where to put the
+ environment home, then the current working
+ directory is used.
+ </p>
+ </li>
+ <li>
+ <p>
+ If a home directory is specified on the
+
+ <tt class="methodname">DbEnv::open()</tt>
+
+ <span>method,</span>
+
+ then that location is always used for the environment
+ home.
+ </p>
+ </li>
+ <li>
+ <p>
+ If a home directory is not supplied to
+
+ <span><tt class="methodname">DbEnv::open()</tt>, </span>
+
+ then the directory identified by the <tt class="literal">DB_HOME</tt> environment variable
+ is used <span class="emphasis"><em>if</em></span> you specify
+ <span>
+ either the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags to the
+
+ <tt class="methodname">DbEnv::open()</tt>
+ method. Both flags allow you to identify the
+ path to the environment's home directory
+ using the <tt class="literal">DB_HOME</tt> environment variable. However,
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> is honored only if the
+ process is run with root or administrative privileges.
+ </span>
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="filelocation"></a>Specifying File Locations</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, all DB files are created relative to the environment
+ home directory. For example, suppose your environment home is in
+ <tt class="literal">/export/myAppHome</tt>. Also suppose you name your database
+ <span><tt class="literal">data/myDatabase.db</tt>.</span>
+
+ Then in this case, the database is placed in:
+ <span><tt class="literal">/export/myAppHome/data/myDatabase.db</tt>.</span>
+
+ </p>
+ <p>
+ That said, DB always defers to absolute pathnames.
+ This means that if you provide an absolute filename when you
+ name your database, then that file is <span class="emphasis"><em>not</em></span>
+ placed relative to the environment home directory. Instead, it
+ is placed in the exact location that you specified for the
+ filename.
+ </p>
+ <p>
+ On UNIX systems, an absolute pathname is a name that begins with a
+ forward slash ('/'). On Windows systems, an absolute pathname is a
+ name that begins with one of the following:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ A backslash ('\').
+ </p>
+ </li>
+ <li>
+ <p>
+ Any alphabetic letter, followed by a colon (':'), followed
+ by a backslash ('\').
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Try not to use absolute path names for your
+ environment's files. Under certain recovery scenarios, absolute path names can
+ render your environment unrecoverable. This occurs if you are attempting to recover
+ you environment on a system that does not support the absolute path name that you used.
+ </p>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="splittingdata"></a>Identifying Specific File Locations</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described in the previous sections, DB will place all its
+ files in or relative to the environment home directory.
+ You can also cause a
+ specific database file to be placed in a particular location by
+ using an absolute path name for its name. In this
+ situation, the environment's home directory is not
+ considered when naming the file.
+ </p>
+ <p>
+ It is frequently desirable to place database, log, and region files on separate
+ disk drives. By spreading I/O across multiple drives, you
+ can increase parallelism and improve throughput.
+ Additionally, by placing log files and database files on
+ separate drives, you improve your application's
+ reliability by providing your application with a greater
+ chance of surviving a disk failure.
+ </p>
+ <p>
+ You can cause DB's files to be placed in specific
+ locations using the following mechanisms:
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>File Type</th>
+ <th>To Override</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>database files</td>
+ <td>
+ <p>
+ You can cause database files to be created
+ in a directory other than the
+ environment home by using the
+
+ <tt class="methodname">DbEnv::set_data_dir()</tt>
+
+ method.
+ The directory identified
+ here must exist. If a relative path is
+ provided, then the directory location is
+ resolved relative to the environment's home
+ directory.
+ </p>
+ <p>
+ This method modifies the directory
+ used for database files created and managed by
+ a single environment handle; it does not
+ configure the entire environment.
+ <span>This
+ method may not be called after the
+ environment has been opened.
+ </span>
+ </p>
+ <p>
+ You can also set a default data location that is used by
+ the entire environment by using the
+ <tt class="literal">set_data_dir</tt> parameter
+ in the environment's <tt class="literal">DB_CONFIG</tt> file.
+ Note that the <tt class="literal">set_data_dir</tt>
+ parameter overrides any value set by the
+
+ <tt class="methodname">DbEnv::set_data_dir()</tt>
+
+ method.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>Log files</td>
+ <td>
+ <p>
+ You can cause log files to be created
+ in a directory other than the environment home
+ directory by using the
+
+ <tt class="methodname">DbEnv::set_lg_dir()</tt>
+
+ method. The directory identified
+ here must exist. If a relative path is
+ provided, then the directory location is
+ resolved relative to the environment's home
+ directory.
+ </p>
+ <p>
+ This method modifies the directory
+ used for database files created and managed by
+ a single environment handle; it does not
+ configure the entire environment.
+ <span>This
+ method may not be called after the
+ environment has been opened.
+ </span>
+ </p>
+ <p>
+ You can also set a default log file location that is used by
+ the entire environment by using the
+ <tt class="literal">set_lg_dir</tt> parameter
+ in the environment's <tt class="literal">DB_CONFIG</tt> file.
+ Note that the <tt class="literal">set_lg_dir</tt>
+ parameter overrides any value set by the
+
+ <tt class="methodname">DbEnv::set_lg_dir()</tt>
+
+ method.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>Region files</td>
+ <td>
+ If backed by the filesystem, region
+ files are always placed in the environment home
+ directory.
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p>
+ Note that the <tt class="literal">DB_CONFIG</tt> must reside in the
+ environment home directory. Parameters are specified in it one
+ parameter to a line. Each parameter is followed by a space,
+ which is followed by the parameter value. For example:
+ </p>
+ <pre class="programlisting"> set_data_dir /export1/db/env_data_files </pre>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="errorsupport"></a>Error Support</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To simplify error handling and to aid in application debugging, environments offer several useful
+ methods.
+
+ <span>Note that many of these
+ methods are identical to the error handling methods available for the
+
+ <span>Db</span>
+
+
+ <span>class.</span>
+
+ </span>
+
+ They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="methodname">set_error_stream()</tt>
+
+ </p>
+ <p>
+ Sets the
+ <span>C++ <tt class="classname">ostream</tt></span>
+
+ to be used for displaying error messages issued by the DB library.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">set_errcall()</tt>
+
+ </p>
+ <p>
+ Defines the function that is called when an error message is
+ issued by DB. The error prefix and message are passed to
+ this callback. It is up to the application to display this
+ information correctly.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">set_errfile()</tt>
+ </p>
+ <p>
+ Sets the C library <tt class="literal">FILE *</tt> to be used for
+ displaying error messages issued by the DB library.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">set_errpfx()</tt>
+
+ </p>
+ <p>
+ Sets the prefix used to for any error messages issued by the
+ DB library.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">err()</tt>
+ </p>
+ <p>
+ Issues an error message based upon a DB error code a message text that you supply.
+ The error message is sent to the
+ callback function as defined by <tt class="methodname">set_errcall()</tt>.
+ If that method has not been used, then the error message is sent to the
+ file defined by
+
+ <span>
+ <tt class="methodname">set_errfile()</tt> or <tt class="methodname">set_error_stream()</tt>.
+ </span>
+ If none of these methods have been used, then the error message is sent to
+ standard error.
+ </p>
+ <p>
+ The error message consists of the prefix string
+ (as defined by <tt class="methodname">set_errprefix()</tt>),
+ an optional <tt class="literal">printf</tt>-style formatted message,
+ the DB error message associated with the supplied error code,
+ and a trailing newline.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="methodname">errx()</tt>
+ </p>
+ <p>
+ Behaves identically to <tt class="methodname">err()</tt> except
+ that you do not provide the DB error code and so
+ the DB message text is not displayed.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ In addition, you can use the <tt class="function">db_strerror()</tt>
+ function to directly return the error string that corresponds to a
+ particular error number. For more information on the
+ <tt class="function">db_strerror()</tt> function, see the <tt class="literal">Error Returns</tt>
+ section of the <i class="citetitle">Getting Started with Berkeley DB</i> guide.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sharedmemory"></a>Shared Memory Regions</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The subsystems that you enable for an environment (in our case,
+ transaction, logging, locking, and the memory pool)
+ are described by one or more regions. The regions contain all of the
+ state information that needs to be shared among threads and/or
+ processes using the environment.
+ </p>
+ <p>
+ Regions may be backed by the file system, by heap memory, or by
+ system shared memory.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="filebackedregions"></a>Regions Backed by Files</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, shared memory regions are created as files in the environment's
+ home directory (<span class="emphasis"><em>not</em></span> the environment's data
+ directory). If it is available, the POSIX <tt class="literal">mmap</tt>
+ interface is used to map these files into your application's
+ address space. If <tt class="literal">mmap</tt>
+ is not available, then the UNIX <tt class="literal">shmget</tt> interfaces
+ are used instead (again, if they are available).
+ </p>
+ <p>
+ In this default case, the region files are named
+ <tt class="literal">__db.###</tt>
+ (for example, <tt class="literal">__db.001</tt>, <tt class="literal">__db.002</tt>,
+ and so on).
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="heapbackedregions"></a>Regions Backed by Heap Memory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If heap memory is used to back your shared memory regions,
+ the environment may only be
+ accessed by a single process, although that process may be
+ multi-threaded. In this case, the regions are managed only in
+ memory, and they are not written to the filesystem. You
+ indicate that heap memory is to be used for the region files by
+ specifying
+ <span>
+ <tt class="literal">DB_PRIVATE</tt> to the
+
+ <tt class="methodname">DbEnv::open()</tt>
+ method.
+ </span>
+
+
+
+ </p>
+ <p>
+ (For an example of an entirely in-memory transactional
+ application, see
+ <span>
+ <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>.)
+ </span>
+
+
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="systembackedregions"></a>Regions Backed by System Memory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Finally, you can cause system memory to be used for your
+ regions instead of memory-mapped files. You do this by providing
+ <span>
+ <tt class="literal">DB_SYSTEM_MEM</tt> to the
+
+ <tt class="methodname">DbEnv::open()</tt>
+ method.
+ </span>
+
+
+ </p>
+ <p>
+ When region files are backed by system memory, DB creates a
+ single file in the environment's home directory. This file
+ contains information necessary to identify the system shared
+ memory in use by the environment. By creating this file, DB
+ enables multiple processes to share the environment.
+ </p>
+ <p>
+ The system memory that is used is architecture-dependent. For
+ example, on systems supporting X/Open-style shared memory
+ interfaces, such as UNIX systems, the <tt class="literal">shmget(2)</tt>
+ and related System V IPC interfaces are used.
+
+ <span>
+
+ 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
+ environments, so that the number of segments created does not
+ grow without bounds. See the
+
+
+ <tt class="methodname">DbEnv::set_shm_key()</tt>
+
+ method for more information.
+ </span>
+ </p>
+ <p>
+ On Windows platforms, the use of system memory for the region files
+ 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 from files, which may cause problems when an environment
+ is accessed by multiple processes running as different users. See
+ <a href="" target="_top">Windows notes</a>
+ or more information.
+ </p>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="security"></a>Security Considerations</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When using environments, there are some security considerations to
+ keep in mind:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Database environment permissions
+ </p>
+ <p>
+ The directory used for the environment
+ should have its permissions set to ensure that files in the
+ environment are not accessible to users without appropriate
+ permissions. Applications that add to the user's permissions
+ (for example, UNIX <tt class="literal">setuid</tt> or
+ <tt class="literal">setgid</tt> applications), must be
+ carefully checked to not permit illegal use of those
+ permissions such as general file access in the environment
+ directory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Environment variables
+ </p>
+ <p>
+ Setting
+
+ <span>
+ the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags
+ </span>
+
+
+ so that environment variables can be used during file naming
+ can be dangerous. Setting those flags in DB
+ applications with additional permissions (for example, UNIX
+ <tt class="literal">setuid</tt> or <tt class="literal">setgid</tt>
+ applications) could potentially allow users
+ to read and write databases to which they would not normally
+ have access.
+ </p>
+ <p>
+ For example, suppose you write a DB application
+ that runs <tt class="literal">setuid</tt>. This means that
+ when the application runs, it does so under a
+ userid different than that of the application's caller.
+ This is especially problematic if the application is
+ granting stronger privileges to a user than the user
+ might ordinarily have.
+ </p>
+ <p>
+ Now, if
+ <span>
+ the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags
+ are set for the environment,
+ </span>
+
+
+
+ then the environment that the application is
+ using is modifiable using the
+ <tt class="literal">DB_HOME</tt> environment variable. In
+ this scenario, if the uid used by the application has
+ sufficiently broad privileges, then the application's caller
+ can read and/or write databases owned by another user
+ simply by setting his
+ <tt class="literal">DB_HOME</tt> environment variable to the
+ environment used by that other user.
+ </p>
+ <p>
+ Note that this scenario need not be malicious; the
+ wrong environment could be used by the application
+ simply by inadvertently specifying the wrong path to
+ <tt class="literal">DB_HOME</tt>.
+ </p>
+ <p>
+ As always, you should use <tt class="literal">setuid</tt>
+ sparingly, if at all. But if you do use
+ <tt class="literal">setuid</tt>, then you should refrain from
+ specifying
+ <span>
+ the <tt class="literal">DB_USE_ENVIRON</tt> or
+ <tt class="literal">DB_USE_ENVIRON_ROOT</tt> flags
+ </span>
+
+ for the environment open. And, of course, if you must
+ use <tt class="literal">setuid</tt>, then make sure you use
+ the weakest uid possible &#8211; preferably one that is
+ used only by the application itself.
+ </p>
+ </li>
+ <li>
+ <p>
+ File permissions
+ </p>
+ <p>
+ By default, DB always creates database and log files readable and
+ writable by the owner and the group (that is,
+ <tt class="literal">S_IRUSR</tt>,
+ <tt class="literal">S_IWUSR</tt>, <tt class="literal">S_IRGRP</tt> and
+ <tt class="literal">S_IWGRP</tt>; 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 DB.
+ </p>
+ </li>
+ <li>
+ <p>
+ Temporary backing files
+ </p>
+ <p>
+ 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
+ <tt class="literal">TMPDIR</tt> may be used to specify the
+ location of that temporary file. Although temporary backing
+ files are created readable and writable by the owner only
+ (<tt class="literal">S_IRUSR</tt> and <tt class="literal">S_IWUSR</tt>,
+ 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
+
+ <tt class="methodname">DbEnv::set_tmp_dir()</tt>
+
+ method to specify a temporary directory with known permissions.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="perftune-intro.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="envopen.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Performance Tuning </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Opening a Transactional Environment and
+ Database
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/envopen.html b/db/docs/gsg_txn/CXX/envopen.html
new file mode 100644
index 000000000..69028ca87
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/envopen.html
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Opening a Transactional Environment and
+ Database
+
+ </title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ <link rel="previous" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ <link rel="next" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Opening a Transactional Environment and
+ Database
+
+ </th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="enabletxn.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 2. Enabling Transactions</th>
+ <td width="20%" align="right"> <a accesskey="n" href="usingtxns.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="envopen"></a>Opening a Transactional Environment and
+ <span>Database</span>
+
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To enable transactions for your environment, you must initialize the
+ transactional subsystem. Note that doing this also initializes the
+ logging subsystem. In addition, you must initialize the memory pool
+ (in-memory cache). Frequently, but not always, you will also
+ initialize the locking subsystem. For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ try {
+ myEnv.close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database environment: &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ You then create and open your database(s) as you would for a non-transactional system.
+ <span>
+ The only difference is that you must pass the environment handle to
+ the
+
+ <span>
+ <tt class="methodname">DbEnv::open()</tt> method,
+ </span>
+ and you must open the database within a transaction.
+ Typically auto commit is used for this purpose. To do so, pass
+ <tt class="literal">DB_AUTO_COMMIT</tt> to the database open command.
+ Also, make sure you close all your databases before you close
+ your environment.
+ For example:
+ </span>
+
+
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN; // Initialize transactions
+
+ <b class="userinput"><tt>u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;</tt></b>
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ <b class="userinput"><tt>dbp = new Db(&amp;myEnv, 0);
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults </tt></b>
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ try {
+ <b class="userinput"><tt>dbp-&gt;close(0);</tt></b>
+ myEnv.close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Never close a database that has active transactions. Make sure
+ all transactions are resolved (either committed or aborted)
+ before closing the database.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="enabletxn.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="enabletxn.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="usingtxns.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 2. Enabling Transactions </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 3. Transaction Basics</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/filemanagement.html b/db/docs/gsg_txn/CXX/filemanagement.html
new file mode 100644
index 000000000..f22698eaf
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/filemanagement.html
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 5. Managing DB Files</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="reversesplit.html" title="Reverse BTree Splits" />
+ <link rel="next" href="backuprestore.html" title="Backup Procedures" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 5. Managing DB Files</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="reversesplit.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="backuprestore.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="filemanagement"></a>Chapter 5. Managing DB Files</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="backuprestore.html">Backup Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#copyutilities">About Unix Copy Utilities</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#standardbackup">Offline Backups</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#hotbackup">Hot Backup</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#incrementalbackups">Incremental Backups</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery.html">Recovery Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#normalrecovery">Normal Recovery</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="architectrecovery.html">Designing Your Application for Recovery</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multithreadrecovery">Recovery for Multi-Threaded Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multiprocessrecovery">Recovery in Multi-Process Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logfileremoval.html">Removing Log Files</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logconfig.html">Configuring the Logging Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logfilesize">Setting the Log File Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ DB is capable of storing several types of files on disk:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Data files, which contain the actual data in your database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Log files, which contain information required to recover your
+ database in the event of a system or application failure.
+ </p>
+ </li>
+ <li>
+ <p>
+ Region files, which contain information necessary for the
+ overall operation of your application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Temporary files, which are created only under certain special circumstances. These files never need to
+ be backed up or otherwise managed and so they are not a consideration for the topics described in this
+ chapter. See <a href="enabletxn.html#security">Security Considerations</a>
+ for more information on temporary files.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these, you must manage your data and log files by ensuring that they
+ are backed up. You should also pay attention to the amount of disk space
+ your log files are consuming, and periodically remove any unneeded
+ files. Finally, you can optionally tune your logging subsystem to best
+ suit your application's needs and requirements.
+ These topics are discussed in this chapter.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="checkpoints"></a>Checkpoints</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before we can discuss DB file management, we need to
+ describe checkpoints. When databases are modified (that is, a
+ transaction is committed), the modifications are recorded in
+ DB's logs, but they are <span class="emphasis"><em>not</em></span>
+ necessarily reflected in the actual database files on disk.
+ </p>
+ <p>
+ This means that as time goes on, increasingly
+ more data is contained in your log files that is not
+ contained in your data files. As a result, you must keep more
+ log files around than you might actually need. Also, any
+ recovery run from your log files will take increasingly longer
+ amounts of time, because there is more data in the log files
+ that must be reflected back into the data files during the
+ recovery process.
+ </p>
+ <p>
+ You can reduce these problems by periodically
+ running a checkpoint against your environment. The checkpoint:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Flushes dirty pages from the in-memory cache. This means that data modifications found in your
+ in-memory cache are written to the database files on disk. Note that a checkpoint also causes data
+ dirtied by an uncommitted transaction to also be written to your database files on disk. In this latter
+ case, DB's normal recovery is used to remove any such modifications that were subsequently
+ abandoned by your application using a transaction abort.
+ </p>
+ <p>
+ Normal recovery is describe in <a href="recovery.html">Recovery Procedures</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Writes a checkpoint record.
+ </p>
+ </li>
+ <li>
+ <p>
+ Flushes the log. This causes all log data that has not yet been written to disk to be written.
+ </p>
+ </li>
+ <li>
+ <p>
+ Writes a list of open databases.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ There are several ways to run a checkpoint. One way is to use
+ the <span><b class="command">db_checkpoint</b></span> command line utility. (Note, however, that this command line utility
+ cannot be used if your environment was opened using
+ <span>
+ <tt class="literal">DB_PRIVATE</tt>.)
+ </span>
+
+ </p>
+ <p>
+ You can also run a thread that periodically checkpoints your
+ environment for you by calling the
+
+ <tt class="methodname">DbEnv::txn_checkpoint()</tt>
+
+ method.
+ </p>
+ <p>
+ Note that you can prevent a checkpoint from occurring unless more
+ than a specified amount of log data has been written since the
+ last checkpoint. You can also prevent the checkpoint from
+ running unless more than a specified amount of time has
+ occurred since the last checkpoint. These conditions are
+ particularly interesting if you have multiple threads
+ <span>or processes</span>
+ running checkpoints.
+ </p>
+ <p>
+ For configuration information, see the
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_cxx/txn_checkpoint.html" target="_top">
+ DbEnv::txn_checkpoint() API reference page.
+ </a>
+
+ </p>
+ <p>
+ Note that running checkpoints can be quite expensive. DB must
+ flush every dirty page to the backing database files. On the
+ other hand, if you do not run checkpoints often enough, your
+ recovery time can be unnecessarily long and you may be using more
+ disk space than you really need. Also, you cannot remove log files
+ until a checkpoint is run. Therefore, deciding how frequently
+ to run a checkpoint is one of the most
+ common tuning activity for DB applications.
+ </p>
+ <p>
+ For example, to run a checkpoint from a separate thread of control:
+ </p>
+ <pre class="programlisting">#include &lt;pthread.h&gt;
+#include &quot;db_cxx.h&quot;
+
+...
+
+void *checkpoint_thread(void *);
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ // Start a checkpoint thread.
+ pthread_t ptid;
+ int ret;
+ if ((ret = pthread_create(
+ &amp;ptid, NULL, checkpoint_thread, (void *)&amp;myEnv)) != 0) {
+ fprintf(stderr,
+ &quot;txnapp: failed spawning checkpoint thread: %s\n&quot;,
+ strerror(errno));
+ myEnv.close(0);
+ exit (1);
+ }
+
+ // All other threads and application shutdown code
+ // omitted for brevity.
+
+ ...
+}
+
+void *
+checkpoint_thread(void *arg) {
+ DbEnv *dbenv = arg;
+
+ // Checkpoint once a minute.
+ for (;; sleep(60)) {
+ try {
+ dbenv-&gt;txn_checkpoint(0, 0, 0));
+ } catch(DbException &amp;e) {
+ dbenv-&gt;err(e.get_errno(), &quot;checkpoint thread&quot;);
+ exit (e.get_errno());
+ }
+ }
+
+ // NOTREACHED
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="reversesplit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="backuprestore.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Reverse BTree Splits </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Backup Procedures</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/gettingStarted.css b/db/docs/gsg_txn/CXX/gettingStarted.css
new file mode 100644
index 000000000..c1b4c86b7
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/gettingStarted.css
@@ -0,0 +1,41 @@
+body { width: 45em;
+ margin-left: 3em;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11pt;
+ }
+
+h2.title { margin-left: -1em;
+ font-family: Verdana, serif;
+ font-size: 16pt;
+ }
+
+h3.title { font-family: Verdana, serif;
+ font-size: 14pt;
+ }
+
+pre.programlisting {
+ font-family: monospace;
+ background-color: #eae8e9;
+}
+
+div.navheader { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+
+div.navheader table tr td { font-size: 9pt; }
+
+div.navfooter { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+div.navfooter table tr td { font-size: 9pt; }
+
+span.emphasis { font-style: italic; font-size: 9pt;}
+
+div.appendix div.informaltable { font-size: 9pt; }
+div.appendix div.informaltable td { vertical-align: top; }
+div.appendix div.informaltable p { margin-top: .25em; }
+div.appendix div.informaltable p { margin-bottom: .25em; }
+
+
diff --git a/db/docs/gsg_txn/CXX/hotfailover.html b/db/docs/gsg_txn/CXX/hotfailover.html
new file mode 100644
index 000000000..fa3dcc152
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/hotfailover.html
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Using Hot Failovers</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="architectrecovery.html" title="Designing Your Application for Recovery" />
+ <link rel="next" href="logfileremoval.html" title="Removing Log Files" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Using Hot Failovers</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="architectrecovery.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="logfileremoval.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="hotfailover"></a>Using Hot Failovers</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can maintain a backup that can be used for failover purposes.
+ Hot failovers differ from the backup and restore
+ procedures described previously in this chapter in that data
+ used for traditional backups is typically copied to offline storage.
+ Recovery time for a traditional backup is determined by:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ How quickly you can retrieve that storage media.
+ Typically storage media for critical backups is moved
+ to a safe facility in a remote location, so this step can
+ take a relatively long time.
+ </p>
+ </li>
+ <li>
+ <p>
+ How fast you can read the backup from the storage media
+ to a local disk drive. If you have very large backups,
+ or if your storage media is very slow, this can be a
+ lengthy process.
+ </p>
+ </li>
+ <li>
+ <p>
+ How long it takes you to run catastrophic recovery
+ against the newly restored backup. As described earlier
+ in this chapter, this process can be lengthy because
+ every log file must be examined during the recovery
+ process.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ When you use a hot failover, the backup is maintained
+ at a location that is reasonably fast to access. Usually, this
+ is a second disk drive local to the machine.
+ In this situation, recovery time is very quick
+ because you only have to reopen your
+ environment and database, using the failover environment
+ for the environment open.
+ </p>
+ <p>
+ Hot failovers obviously do not protect you from truly
+ catastrophic disasters (such as a fire in your machine room)
+ because the backup is still local to the machine. However,
+ you can guard against more mundane problems (such as a broken
+ disk drive) by keeping the backup on a
+ second drive that is managed by an alternate disk controller.
+ </p>
+ <p>
+ To maintain a hot failover:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Copy all the active database files to the failover
+ directory. Use the <span><b class="command">db_archive</b></span>
+ command line utility with the
+ <tt class="literal">-s</tt> option to identify all the active
+ database files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify all the inactive log files in your production
+ environment and <span class="emphasis"><em>move</em></span> these to the failover
+ directory. Use the <span><b class="command">db_archive</b></span>
+ command with no command line options to obtain a list
+ of these log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify the active log files in your production
+ environment, and <span class="emphasis"><em>copy</em></span> these to the
+ failover directory. Use the
+ <span><b class="command">db_archive</b></span> command with the
+ <tt class="literal">-l</tt> option to obtain a list of these
+ log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run catastrophic recovery against the failover
+ directory. Use the <span><b class="command">db_recover</b></span>
+ command with the <tt class="literal">-c</tt> option to do
+ this.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally copy the backup to an archival location.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Once you have performed this procedure, you can maintain an
+ active hot backup by repeating steps 2 - 5 as often
+ as is required by your application.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If you perform step 1, steps 2-5 must follow in order to
+ ensure consistency of your hot backup.
+ </p>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Rather than use the previous procedure, you can use the <span><b class="command">db_hotbackup</b></span> command line utility
+ to do the same thing. This utility will (optionally) run a checkpoint and then copy all necessary files to a target
+ directory for you.
+ </p>
+ </div>
+ <p>
+ To actually perform a failover, simply:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Shut down all processes which are running against the original environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you have an archival copy of the backup environment, you can optionally try copying the remaining
+ log files from the original environment and running catastrophic recovery against that backup
+ environment. Do this <span class="emphasis"><em>only</em></span> if you have a an archival copy of the backup
+ environment.
+ </p>
+ <p>
+ This step can allow you to recover data created or modified in the original environment, but which
+ did not have a chance to be reflected in the hot backup environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reopen your environment and databases as normal, but use
+ the backup environment instead of the production
+ environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="architectrecovery.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="logfileremoval.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Designing Your Application for Recovery </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Removing Log Files</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/index.html b/db/docs/gsg_txn/CXX/index.html
new file mode 100644
index 000000000..e43890ce3
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/index.html
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Getting Started with Berkeley DB Transaction Processing</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="next" href="preface.html" title="Preface" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Getting Started with Berkeley DB Transaction Processing</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="book" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h1 class="title"><a id="id650934"></a>Getting Started with Berkeley DB Transaction Processing</h1>
+ </div>
+ <div>
+ <div class="legalnotice">
+ <p class="legalnotice-title">
+ <b>Legal Notice</b>
+ </p>
+ <p>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
+ </p>
+ <p>
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
+ </p>
+ <p>
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="pubdate">9/20/2006</p>
+ </div>
+ </div>
+ <div></div>
+ <hr />
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="preface">
+ <a href="preface.html">Preface</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="introduction.html">1. Introduction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="enabletxn.html">2. Enabling Transactions</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="enabletxn.html#environments">Environments</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#filenaming">File Naming</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#errorsupport">Error Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#sharedmemory">Shared Memory Regions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#security">Security Considerations</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="envopen.html">Opening a Transactional Environment and
+ Database
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="usingtxns.html">3. Transaction Basics</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="usingtxns.html#commitresults">Committing a Transaction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="abortresults.html">Aborting a Transaction</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="autocommit.html">Auto Commit</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="nestedtxn.html">Nested Transactions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txncursor.html">Transactional Cursors</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnindices.html">Secondary Indices with Transaction Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="maxtxns.html">Configuring the Transaction Subsystem</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="txnconcurrency.html">4. Concurrency</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#locks">Locks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#blocks">Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="lockingsubsystem.html">The Locking Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="isolation.html">Isolation</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#degreesofisolation">Supported Degrees of Isolation</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="txn_ccursor.html">Transactional Cursors and Concurrent Applications</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txn_ccursor.html#cursordirtyreads">Using Cursors with Uncommitted Data</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="readmodifywrite.html">Read/Modify/Write</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnnowait.html">No Wait on Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="filemanagement.html">5. Managing DB Files</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="backuprestore.html">Backup Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#copyutilities">About Unix Copy Utilities</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#standardbackup">Offline Backups</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#hotbackup">Hot Backup</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#incrementalbackups">Incremental Backups</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery.html">Recovery Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#normalrecovery">Normal Recovery</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="architectrecovery.html">Designing Your Application for Recovery</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multithreadrecovery">Recovery for Multi-Threaded Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multiprocessrecovery">Recovery in Multi-Process Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logfileremoval.html">Removing Log Files</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logconfig.html">Configuring the Logging Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logfilesize">Setting the Log File Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="wrapup.html">6. Summary and Examples</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="wrapup.html#anatomy">Anatomy of a Transactional Application</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnexample_c.html">Transaction Example</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right" valign="top"> Preface</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/inmem_txnexample_c.html b/db/docs/gsg_txn/CXX/inmem_txnexample_c.html
new file mode 100644
index 000000000..5e5dd5f0a
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/inmem_txnexample_c.html
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>In-Memory Transaction Example</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="previous" href="txnexample_c.html" title="Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">In-Memory Transaction Example</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnexample_c.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 6. Summary and Examples</th>
+ <td width="20%" align="right"> </td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="inmem_txnexample_c"></a>In-Memory Transaction Example</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is sometimes used for applications that simply need to cache
+ data retrieved from some other location (such as a remote database
+ server). DB is also often used in embedded systems.
+ </p>
+ <p>
+ In both cases, applications may want to use transactions for
+ atomicity, consistency, and isolation guarantees, but they may also want
+ to forgo the durability guarantee entirely. In doing so, they can keep
+ their DB environment and databases entirely in-memory so
+ as to avoid the performance impact of unneeded disk I/O.
+ </p>
+ <p>
+ To do this:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Refrain from specifying a home directory when you open your
+ environment. The exception to this is if you are using the
+ <tt class="literal">DB_CONFIG</tt> configuration file &#8212; in
+ that case you must identify the environment's home
+ directory so that the configuration file can be found.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your environment to back your regions from
+ system memory instead of the filesystem.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your logging subsystem such that log files are kept
+ entirely in-memory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Increase the size of your in-memory log buffer so that it
+ is large enough to hold the largest set of concurrent write operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Increase the size of your in-memory cache so that it can
+ hold your entire data set. You do not want your cache to
+ page to disk.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not specify a file name when you open your database(s).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ As an example, this section takes the transaction example provided
+ in <a href="txnexample_c.html">Transaction Example</a>
+ and it updates that example so that the environment, database, log
+ files, and regions are all kept entirely in-memory.
+ </p>
+ <p>
+ For illustration purposes, we also modify this example so that
+ uncommitted reads are no longer used to enable the
+
+ <tt class="function">countRecords()</tt>
+ function. Instead, we simply provide a transaction handle to
+
+ <tt class="function">countRecords()</tt>
+ so as to avoid the self-deadlock. Be aware that using a transaction handle here rather than
+ uncommitted reads will work just as well as if we had continued to use uncommitted reads. However,
+ the usage of the transaction handle here will
+ probably cause more deadlocks than using read-uncommitted does, because more locking is being performed in
+ this case.
+ </p>
+ <p>
+ To begin, we simplify the beginning of our example a bit. Because
+ we no longer need an environment home directory, we can remove all
+ the code that we used to determine path delimiters
+ and include the <tt class="function">getopt</tt> function. We can also
+ remove our <tt class="function">usage()</tt> function because we no
+ longer require any command line arguments.
+ </p>
+ <pre class="programlisting">// File TxnGuideInMemory.cpp
+
+// We assume an ANSI-compatible compiler
+#include &lt;db_cxx.h&gt;
+#include &lt;pthread.h&gt;
+#include &lt;iostream&gt;
+
+// Run 5 writers threads at a time.
+#define NUMWRITERS 5
+
+// Printing of pthread_t is implementation-specific, so we
+// create our own thread IDs for reporting purposes.
+int global_thread_num;
+pthread_mutex_t thread_num_lock;
+
+// Forward declarations
+int countRecords(Db *, DbTxn *);
+int openDb(Db **, const char *, const char *, DbEnv *, u_int32_t);
+int usage(void);
+void *writerThread(void *); </pre>
+ <p>
+ Next, in our <tt class="function">main()</tt>, we also eliminate some
+ variables that this example no longer needs. In particular, we are able to remove
+ the
+
+ <tt class="literal">dbHomeDir</tt>
+ and
+
+ <tt class="literal">fileName</tt>
+ variables. We also remove all our <tt class="function">getopt</tt> code.
+</p>
+ <pre class="programlisting">int
+main(void)
+{
+ // Initialize our handles
+ Db *dbp = NULL;
+ DbEnv *envp = NULL;
+
+ pthread_t writerThreads[NUMWRITERS];
+ int i;
+ u_int32_t envFlags;
+
+ // Application name
+ const char *progName = &quot;TxnGuideInMemory&quot;; </pre>
+ <p>
+ Next we create our environment as always. However, we add
+ <tt class="literal">DB_PRIVATE</tt> to our environment open flags. This
+ flag causes our environment to back regions using our
+ application's heap memory rather than by using the filesystem.
+ This is the first important step to keeping our DB data
+ entirely in-memory.
+ </p>
+ <p>
+ We also remove the <tt class="literal">DB_RECOVER</tt> flag from the environment open flags. Because our databases,
+ logs, and regions are maintained in-memory, there will never be anything to recover.
+ </p>
+ <p>
+ Note that we show the additional code here in
+ <b class="userinput"><tt>bold.</tt></b>
+ </p>
+ <pre class="programlisting"> // Env open flags
+ envFlags =
+ DB_CREATE | // Create the environment if it does not exist
+ DB_INIT_LOCK | // Initialize the locking subsystem
+ DB_INIT_LOG | // Initialize the logging subsystem
+ DB_INIT_TXN | // Initialize the transactional subsystem. This
+ // also turns on logging.
+ DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache)
+ <b class="userinput"><tt>DB_PRIVATE | // Region files are not backed by the filesystem.
+ // Instead, they are backed by heap memory.</tt></b>
+ DB_THREAD; // Cause the environment to be free-threaded
+
+ try {
+ // Create the environment
+ envp = new DbEnv(0); </pre>
+ <p>
+ Now we configure our environment to keep the log files in memory,
+ increase the log buffer size to 10 MB, and increase our in-memory
+ cache to 10 MB. These values should be more than enough for our
+ application's workload.
+ </p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt> // Specify in-memory logging
+ envp-&gt;set_flags(DB_LOG_INMEMORY, 1);
+
+ // Specify the size of the in-memory log buffer.
+ envp-&gt;set_lg_bsize(10 * 1024 * 1024);
+
+ // Specify the size of the in-memory cache
+ envp-&gt;set_cachesize(0, 10 * 1024 * 1024, 1); </tt>
+ </b>
+ </pre>
+ <p>
+ Next, we open the environment and setup our lock detection. This is
+ identical to how the example previously worked, except that we do not
+ provide a location for the environment's home directory.
+ </p>
+ <pre class="programlisting"> // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction with
+ // the fewest number of write locks will receive the
+ // deadlock notification in the event of a deadlock.
+ envp-&gt;set_lk_detect(DB_LOCK_MINWRITE);
+
+ // Open the environment
+ envp-&gt;open(<b class="userinput"><tt>NULL</tt></b>, envFlags, 0); </pre>
+ <p>
+ When we call
+
+ <span><tt class="function">openDb()</tt>,</span>
+ which is what we use
+ to open our database, we no not provide a database filename for the
+ third parameter. When the filename is <tt class="literal">NULL</tt>, the database is not
+ backed by the filesystem.
+ </p>
+ <pre class="programlisting"> // If we had utility threads (for running checkpoints or
+ // deadlock detection, for example) we would spawn those
+ // here. However, for a simple example such as this,
+ // that is not required.
+
+ // Open the database
+ openDb(&amp;dbp, progName, <b class="userinput"><tt>NULL</tt></b>,
+ envp, DB_DUPSORT);
+ </pre>
+ <p>
+ After that, our <tt class="function">main()</tt> function is unchanged,
+ except that when we
+
+ <span>check for exceptions on the database open,</span>
+ we change the error message string so as to not reference the database filename.
+ </p>
+ <pre class="programlisting"> // Initialize a pthread mutex. Used to help provide thread ids.
+ (void)pthread_mutex_init(&amp;thread_num_lock, NULL);
+
+ // Start the writer threads.
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_create(
+ &amp;writerThreads[i], NULL,
+ writerThread,
+ (void *)dbp);
+
+ // Join the writers
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_join(writerThreads[i], NULL);
+
+ } catch(DbException &amp;e) {
+ <b class="userinput"><tt>std::cerr &lt;&lt; &quot;Error opening database environment: &quot;</tt></b>
+ &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ try {
+ // Close our database handle if it was opened.
+ if (dbp != NULL)
+ dbp-&gt;close(0);
+
+ // Close our environment if it was opened.
+ if (envp != NULL)
+ envp-&gt;close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database and environment.&quot;
+ &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ // Final status message and return.
+
+ std::cout &lt;&lt; &quot;I'm all done.&quot; &lt;&lt; std::endl;
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ That completes <tt class="function">main()</tt>. The bulk of our
+ <tt class="function">writerThread()</tt> function implementation is
+ unchanged from the initial transaction example, except that we now pass
+ <tt class="function">countRecords</tt> a transaction handle, rather than configuring our
+ application to perform uncommitted reads. Both mechanisms work well-enough
+ for preventing a self-deadlock. However, the individual count
+ in this example will tend to be lower than the counts seen in
+ the previous transaction example, because
+ <tt class="function">countRecords()</tt> can no longer see records
+ created but not yet committed by other threads.
+ </p>
+ <pre class="programlisting">// A function that performs a series of writes to a
+// Berkeley DB database. The information written
+// to the database is largely nonsensical, but the
+// mechanism of transactional commit/abort and
+// deadlock detection is illustrated here.
+void *
+writerThread(void *args)
+{
+ Db *dbp = (Db *)args;
+ DbEnv *envp = dbp-&gt;get_env(dbp);
+
+ int j, thread_num;
+ int max_retries = 20; // Max retry on a deadlock
+ char *key_strings[] = {&quot;key 1&quot;, &quot;key 2&quot;, &quot;key 3&quot;, &quot;key 4&quot;,
+ &quot;key 5&quot;, &quot;key 6&quot;, &quot;key 7&quot;, &quot;key 8&quot;,
+ &quot;key 9&quot;, &quot;key 10&quot;};
+
+ // Get the thread number
+ (void)pthread_mutex_lock(&amp;thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)pthread_mutex_unlock(&amp;thread_num_lock);
+
+ // Initialize the random number generator
+ srand((u_int)pthread_self());
+
+ // Perform 50 transactions
+ for (int i=0; i&lt;50; i++) {
+ DbTxn *txn;
+ bool retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) {
+ // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Begin our transaction. We group multiple writes in
+ // this thread under a single transaction so as to
+ // (1) show that you can atomically perform multiple
+ // writes at a time, and (2) to increase the chances
+ // of a deadlock occurring so that we can observe our
+ // deadlock detection at work.
+
+ // Normally we would want to avoid the potential for
+ // deadlocks, so for this workload the correct thing
+ // would be to perform our puts with auto commit. But
+ // that would excessively simplify our example, so we
+ // do the &quot;wrong&quot; thing here instead.
+ txn = NULL;
+ envp-&gt;txn_begin(NULL, &amp;txn, 0);
+ // Perform the database write for this transaction.
+ for (j = 0; j &lt; 10; j++) {
+ Dbt key, value;
+ key.set_data(key_strings[j]);
+ key.set_size((strlen(key_strings[j]) + 1) *
+ sizeof(char));
+
+ int payload = rand() + i;
+ value.set_data(&amp;payload);
+ value.set_size(sizeof(int));
+
+ // Perform the database put
+ dbp-&gt;put(txn, &amp;key, &amp;value, 0);
+ }
+
+ // countRecords runs a cursor over the entire database.
+ // We do this to illustrate issues of deadlocking
+ std::cout &lt;&lt; thread_num &lt;&lt; &quot; : Found &quot;
+ &lt;&lt; countRecords(dbp, <b class="userinput"><tt>txn</tt></b>)
+ &lt;&lt; &quot; records in the database.&quot; &lt;&lt; std::endl;
+
+ std::cout &lt;&lt; thread_num &lt;&lt; &quot; : committing txn : &quot; &lt;&lt; i
+ &lt;&lt; std::endl;
+
+ // commit
+ try {
+ txn-&gt;commit(0);
+ retry = false;
+ txn = NULL;
+ } catch (DbException &amp;e) {
+ std::cout &lt;&lt; &quot;Error on txn commit: &quot;
+ &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+ } catch (DbDeadlockException &amp;de) {
+ // First thing we MUST do is abort the transaction.
+ if (txn != NULL)
+ (void)txn-&gt;abort();
+
+ // Now we decide if we want to retry the operation.
+ // If we have retried less than max_retries,
+ // increment the retry count and goto retry.
+ if (retry_count &lt; max_retries) {
+ std::cout &lt;&lt; &quot;############### Writer &quot; &lt;&lt; thread_num
+ &lt;&lt; &quot;: Got DB_LOCK_DEADLOCK.\n&quot;
+ &lt;&lt; &quot;Retrying write operation.&quot;
+ &lt;&lt; std::endl;
+ retry_count++;
+ retry = true;
+ } else {
+ // Otherwise, just give up.
+ std::cerr &lt;&lt; &quot;Writer &quot; &lt;&lt; thread_num
+ &lt;&lt; &quot;: Got DeadLockException and out of &quot;
+ &lt;&lt; &quot;retries. Giving up.&quot; &lt;&lt; std::endl;
+ retry = false;
+ }
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;db put failed&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ if (txn != NULL)
+ txn-&gt;abort();
+ retry = false;
+ } catch (std::exception &amp;ee) {
+ std::cerr &lt;&lt; &quot;Unknown exception: &quot; &lt;&lt; ee.what() &lt;&lt; std::endl;
+ return (0);
+ }
+ }
+ }
+ return (0);
+} </pre>
+ <p>
+ Next we update
+
+ <span><tt class="function">countRecords()</tt>.</span>
+ The only difference
+ here is that we no longer specify <tt class="literal">DB_READ_UNCOMMITTED</tt> when
+ we open our cursor. Note that even this minor change is not required.
+ If we do not configure our database to support uncommitted reads,
+ <tt class="literal">DB_READ_UNCOMMITTED</tt> on the cursor open will be silently
+ ignored. However, we remove the flag anyway from the cursor open so as to
+ avoid confusion.
+</p>
+ <pre class="programlisting">int
+countRecords(Db *dbp, DbTxn *txn)
+{
+
+ Dbc *cursorp = NULL;
+ int count = 0;
+
+ try {
+ // Get the cursor
+ dbp-&gt;cursor(txn, &amp;cursorp, <b class="userinput"><tt>0</tt></b>);
+
+ Dbt key, value;
+ while (cursorp-&gt;get(&amp;key, &amp;value, DB_NEXT) == 0) {
+ count++;
+ }
+ } catch (DbDeadlockException &amp;de) {
+ std::cerr &lt;&lt; &quot;countRecords: got deadlock&quot; &lt;&lt; std::endl;
+ cursorp-&gt;close();
+ throw de;
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;countRecords error:&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ if (cursorp != NULL) {
+ try {
+ cursorp-&gt;close();
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;countRecords: cursor close failed:&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+ }
+
+ return (count);
+} </pre>
+ <p>
+ Finally, we update
+
+ <span><tt class="function">openDb()</tt>.</span>
+ This involves
+ removing <tt class="literal">DB_READ_UNCOMMITTED</tt> from the
+ open flags.
+
+
+ </p>
+ <pre class="programlisting">// Open a Berkeley DB database
+int
+openDb(Db **dbpp, const char *progname, const char *fileName,
+ DbEnv *envp, u_int32_t extraFlags)
+{
+ int ret;
+ u_int32_t openFlags;
+
+ try {
+ Db *dbp = new Db(envp, 0);
+
+ // Point to the new'd Db
+ *dbpp = dbp;
+
+ if (extraFlags != 0)
+ ret = dbp-&gt;set_flags(extraFlags);
+
+ // Now open the database
+ <b class="userinput"><tt>openFlags = DB_CREATE | // Allow database creation
+ DB_THREAD |
+ DB_AUTO_COMMIT; // Allow auto commit</tt></b>
+
+ dbp-&gt;open(NULL, // Txn pointer
+ fileName, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ openFlags, // Open flags
+ 0); // File mode. Using defaults
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; progname &lt;&lt; &quot;: openDb: db open failed:&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ This completes our in-memory transactional example. If you would like to
+ experiment with this code, you can find the example in the following
+ location in your DB distribution:
+</p>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_cxx/txn_guide</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnexample_c.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="wrapup.html">Up</a>
+ </td>
+ <td width="40%" align="right"> </td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transaction Example </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/introduction.html b/db/docs/gsg_txn/CXX/introduction.html
new file mode 100644
index 000000000..9d03afe4e
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/introduction.html
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="recovery-intro.html" title="Recoverability" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on transactions as
+ used with Berkeley DB (DB). It begins by offering a general overview to
+ transactions, the guarantees they provide, and the general application
+ infrastructure required to obtain full transactional protection for your
+ data.
+ </p>
+ <p>
+ This book also provides detailed examples on how to write a
+ transactional application. Both single threaded and multi-threaded <span>(as well as multi-process
+ applications)</span> are discussed. A detailed description of various
+ backup and recovery strategies is included in this manual, as is a
+ discussion on performance considerations for your transactional application.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Getting Started with Berkeley DB</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnintro"></a>Transaction Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactions offer your application's data protection from
+ application or system failures. That is, DB transactions offer
+ your application full ACID support:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="bold"><b>A</b></span>tomicity
+ </p>
+ <p>
+ Multiple database operations are treated as a single unit of
+ work. Once committed, all write operations performed under
+ the protection of the transaction are saved to your databases.
+ Further, in the event that you abort a transaction, all write
+ operations performed during the transaction are discarded.
+ In this event, your database is left in the state it was in
+ before the transaction began, regardless of the number or
+ type of write operations you may have performed during the
+ course of the transaction.
+ </p>
+ <p>
+ Note that DB transactions can span one or more
+ database handles.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>C</b></span>onsistency
+ </p>
+ <p>
+ Your databases will never see a partially completed
+ transaction. This is true even if your application fails while there are
+ in-progress transactions. If the application or system fails,
+ then either all of the database changes appear when the
+ application next runs, or none of them appear.
+ </p>
+ <p>
+ In other words, whatever consistency requirements your application has will never be violated by DB.
+ If, for example, your application requires every record to include an employee ID, and your
+ code faithfully adds that ID to its database records, then DB will never
+ violate that consistency requirement. The ID will remain in the database records until such a time as your
+ application chooses to delete it.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>I</b></span>solation
+ </p>
+ <p>
+ While a transaction is in progress, your databases will appear
+ to the transaction as if there are no other operations
+ occurring outside of the transaction. That is, operations
+ wrapped inside a transaction will always have a clean and
+ consistent view of your databases. They never have to see
+ updates currently in progress under the protection of another transaction.
+ Note, however, that isolation guarantees can be
+
+ relaxed from the default setting. See
+ <a href="isolation.html">Isolation</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>D</b></span>urability
+ </p>
+ <p>
+ Once committed to your databases, your modifications will
+ persist even in the event of an application or system failure.
+ Note that like isolation, your durability guarantee can be
+ relaxed. See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sysfailure"></a>A Note on System Failure</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From time to time this manual mentions that transactions protect your data against 'system or application
+ failure.' This is
+ true up to a certain extent. However, not all failures are created equal and no data protection
+ mechanism can protect you against every conceivable way a computing system can find to die.
+ </p>
+ <p>
+ Generally, when this book talks about protection against failures, it means that
+ transactions offer protection against
+ the likeliest culprits for system and application crashes. So long as your data modifications have been
+ committed to disk, those modifications should persist even if your application or OS subsequently fails.
+ And, even if the application or OS fails in the middle of a transaction commit (or abort), the data on disk
+ should be either in a consistent state, or there should be enough data available to bring
+ your databases into a consistent state (via a recovery procedure, for example). You may, however,
+ lose whatever data you were committing at the
+ time of the failure, but your databases will be otherwise unaffected.
+ </p>
+ <p>
+ Of course, if your <span class="emphasis"><em>disk</em></span> fails, then the transactional benefits described in this book
+ are only as good as the backups you have taken.
+ <span>
+ By spreading your data and log files across separate disks,
+ you can minimize the risk of data loss due to a disk failure, but even in this case it is possible to
+ conjure a scenario where even this protection is insufficient (a fire in the machine room, for example) and
+ you must go to your backups for protection.
+ </span>
+ </p>
+ <p>
+ Finally, by following the programming examples shown in this book, you can write your code so as to protect
+ your data in the event that your code crashes. However, no programming API can protect you against logic
+ failures in your own code; transactions cannot protect you from simply writing the wrong thing to your
+ databases.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="apireq"></a>Application Requirements</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to use transactions, your application has certain
+ requirements beyond what is required of non-transactional protected
+ applications. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Environments.
+ </p>
+ <p>
+ Environments are optional for non-transactional
+ applications, but they are required for transactional
+ applications.
+ </p>
+ <p>
+ Environment usage is described in detail in
+ <a href="usingtxns.html">Transaction Basics</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction subsystem.
+ </p>
+ <p>
+ In order to use transactions, you must explicitly
+ enable the transactional subsystem for your
+ application, and this must be done at the time that
+ your environment is first created.
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ <p>
+ The logging subsystem is required for recovery purposes, but
+ its usage also means your application may require a
+ little more administrative effort than it does when logging
+ is not in use. See <a href="filemanagement.html">Managing DB Files</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <span>DbTxn</span>
+
+
+ handles.
+ </p>
+ <p>
+ In order to obtain the atomicity guarantee offered by
+ the transactional subsystem (that is, combine multiple
+ operations in a single unit of work), your application must use
+ transaction handles. These handles are obtained from your
+
+ <span>DbEnv</span>
+
+
+ objects. They should normally be short-lived, and their usage is
+ reasonably simple. To complete a transaction and save
+ the work it performed, you
+ call its <tt class="methodname">commit()</tt> method. To
+ complete a transaction and discard its work, you call its
+ <tt class="methodname">abort()</tt> method.
+ </p>
+ <p>
+ In addition, it is possible to use auto commit if you want
+ to transactional protect a single write operation. Auto
+ commit allows a transaction to be used without
+ obtaining an explicit transaction handle. See
+ <a href="autocommit.html">Auto Commit</a>
+ for information on how to use auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>Database</span>
+
+ open requirements.
+ </p>
+ <p>
+
+ <span>In addition to using
+ environments and initializing the
+ correct subsystems, your</span>
+
+ application must transaction protect the database
+
+ opens<span>,
+ and any secondary index associations,</span>
+
+ if subsequent operations on the databases are to be transaction
+ protected. The database open and secondary index
+ association are commonly transaction protected using
+ auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ Deadlock detection.
+ </p>
+ <p>
+ Typically transactional applications use multiple
+ threads of control when accessing the database. Any
+ time multiple threads are used on a single resource,
+ the potential for lock contention arises. In turn, lock
+ contention can lead to deadlocks. See
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information.
+ </p>
+ <p>
+ Therefore, transactional applications must frequently
+ include code for detecting and responding to deadlocks.
+ Note that this requirement is not
+ <span class="emphasis"><em>specific</em></span> to transactions
+ &#8211; you can certainly write concurrent
+ non-transactional DB applications. Further, not
+ every transactional application uses concurrency and
+ so not every transactional application must
+ manage deadlocks. Still, deadlock management is so
+ frequently a characteristic of transactional
+ applications that we discuss it in this
+ book. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithread-intro"></a>Multi-threaded
+ <span>and Multi-process</span>
+ Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is designed to support multi-threaded <span>and
+ multi-process</span> applications, but their usage means
+ you must pay careful attention to issues of concurrency.
+ Transactions help your application's concurrency by providing various levels of
+ isolation for your threads of control. In addition, DB
+ provides mechanisms that allow you to detect and respond to
+ deadlocks (but strictly speaking, this is not limited to just
+ transactional applications).
+ </p>
+ <p>
+ <span class="emphasis"><em>Isolation</em></span> means that database modifications made by
+ one transaction will not normally be seen by readers from another
+ transaction until the first commits its changes. Different threads
+ use different transaction handles, so
+ this mechanism is normally used to provide isolation between
+ database operations performed by different threads.
+ </p>
+ <p>
+ Note that DB supports different isolation levels. For example,
+ you can configure your application to see uncommitted reads, which means
+ that one transaction can see data that has been modified but not yet
+ committed by another transaction. Doing this might mean your
+ transaction reads data &quot;dirtied&quot; by another transaction,
+ but which subsequently might change before that
+ other transaction commits its changes.
+ On the other hand, lowering your isolation
+ requirements means that your application can experience
+ improved throughput due to reduced lock contention.
+ </p>
+ <p>
+ For more information on concurrency, on managing isolation
+ levels, and on deadlock detection, see <a href="txnconcurrency.html">Concurrency</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recoverability</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/isolation.html b/db/docs/gsg_txn/CXX/isolation.html
new file mode 100644
index 000000000..f8bc69fab
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/isolation.html
@@ -0,0 +1,821 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Isolation</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="lockingsubsystem.html" title="The Locking Subsystem" />
+ <link rel="next" href="txn_ccursor.html" title="Transactional Cursors and Concurrent Applications" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Isolation</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="lockingsubsystem.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txn_ccursor.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="isolation"></a>Isolation</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Isolation guarantees are an important aspect of transactional
+ protection. Transactions
+ ensure the data your transaction is working with will not be changed by some other transaction.
+ Moreover, the modifications made by a transaction will never be viewable outside of that transaction until
+ the changes have been committed.
+ </p>
+ <p>
+ That said, there are different degrees of isolation, and you can choose to relax your isolation
+ guarantees to one degree or another depending on your application's requirements. The primary reason why
+ you might want to do this is because of performance; the more isolation you ask your transactions to
+ provide, the more locking that your application must do. With more locking comes a greater chance of
+ blocking, which in turn causes your threads to pause while waiting for a lock. Therefore, by relaxing
+ your isolation guarantees, you can <span class="emphasis"><em>potentially</em></span> improve your application's throughput.
+ Whether you actually see any improvement depends, of course, on
+ the nature of your application's data and transactions.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="degreesofisolation"></a>Supported Degrees of Isolation</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB supports the following levels of isolation:
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Degree</th>
+ <th>ANSI Term</th>
+ <th>Definition</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>1</td>
+ <td>READ UNCOMMITTED</td>
+ <td>
+ Uncommitted reads means that one transaction will never
+ overwrite another transaction's dirty data. Dirty data is
+ data that a transaction has modified but not yet committed
+ to the underlying data store. However, uncommitted reads allows a
+ transaction to see data dirtied by another
+ transaction. In addition, a transaction may read data
+ dirtied by another transaction, but which subsequently
+ is aborted by that other transaction. In this latter
+ case, the reading transaction may be reading data that
+ never really existed in the database.
+ </td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>READ COMMITTED</td>
+ <td>
+ <p>
+ Committed read isolation means that degree 1 is observed, except that dirty data is never read.
+ </p>
+ <p>
+ In addition, this isolation level guarantees that data will never change so long as
+ it is addressed by the cursor, but the data may change before the reading cursor is closed.
+ In the case of a transaction, data at the current
+ cursor position will not change, but once the cursor
+ moves, the previous referenced data can change. This
+ means that readers release read locks before the cursor
+ is closed, and therefore, before the transaction
+ completes. Note that this level of isolation causes the
+ cursor to operate in exactly the same way as it does in
+ the absence of a transaction.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>SERIALIZABLE</td>
+ <td>
+ <p>
+ Committed read is observed, plus the data read by a transaction, T,
+ will never be dirtied by another transaction before T completes.
+ This means that both read and write locks are not
+ released until the transaction completes.
+ </p>
+ <p>
+ <span>
+ In addition,
+ </span>
+
+
+
+ no transactions will see phantoms. Phantoms are records
+ returned as a result of a search, but which were not seen by
+ the same transaction when the identical
+ search criteria was previously used.
+ </p>
+ <p>
+ This is DB's default isolation guarantee.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p>
+
+ By default, DB transactions and transactional cursors offer
+ <span>
+ serializable isolation.
+ </span>
+
+
+ You can optionally reduce your isolation level by configuring DB to use
+ uncommitted read isolation. See
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ for more information.
+
+ You can also configure DB to use committed read isolation. See
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ for more information.
+
+ </p>
+ <p>
+ Finally, in addition to DB's normal degrees of isolation, you
+ can also use <span class="emphasis"><em>snapshot isolation</em></span>. This allows
+ you to avoid the read locks that serializable isolation requires. See
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ for details.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="dirtyreads"></a>Reading Uncommitted Data</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure your application to read data that has been modified but not yet
+ committed by another transaction; that is, dirty data. When you do this, you
+ may see a performance benefit by allowing your
+ application to not have to block waiting for write locks. On the other hand, the data that your
+ application is reading may change before the transaction has completed.
+ </p>
+ <p>
+ When used with transactions, uncommitted reads means that one transaction can see data
+ modified but not yet committed by another transaction. When
+ used with transactional cursors, uncommitted reads means
+ that any database reader can see data modified by the
+ cursor before the cursor's transaction has committed.
+ </p>
+ <p>
+ Because of this, uncommitted reads allow a transaction to read data
+ that may subsequently be aborted by another transaction. In
+ this case, the reading transaction will have read data that
+ never really existed in the database.
+ </p>
+ <p>
+ To configure your application to read uncommitted data:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Open your database such that it will allow uncommitted reads. You do this by
+ <span>
+ specifying <tt class="literal">DB_READ_UNCOMMITTED</tt> when you open your database.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>
+ Specify <tt class="literal">DB_READ_UNCOMMITTED</tt>
+ when you create the transaction,
+ <span>
+ open the cursor, or read a record from the database.
+ </span>
+
+ </span>
+
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For example, the following opens the database such that it supports uncommitted reads, and then creates a
+ transaction that causes all reads performed within it to use uncommitted reads. Remember that simply opening
+ the database to support uncommitted reads is not enough; you must also declare your read operations to be
+ performed using uncommitted reads.
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ u_int32_t db_flags = DB_CREATE | // Create the db if it does
+ // not exist
+ DB_AUTO_COMMIT | // Enable auto commit
+ DB_READ_UNCOMMITTED; // Enable uncommitted reads
+
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+ const char *keystr =&quot;thekey&quot;;
+ const char *datastr = &quot;thedata&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ DbTxn *txn = NULL;
+ myEnv.txn_begin(NULL, &amp;txn, DB_READ_UNCOMMITTED);
+
+ // From here, you perform your database reads and writes as normal,
+ // committing and aborting the transactions as is necessary, and
+ // testing for deadlock exceptions as normal (omitted for brevity).
+
+ ...</pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="readcommitted"></a>Committed Reads</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure your transaction so that the data being
+ read by a transactional cursor is consistent so long as it
+ is being addressed by the cursor. However, once the cursor is done reading the
+
+ <span>
+ record (that is, reading records from the page that it currently has locked),
+ </span>
+ the cursor releases its lock on that
+
+ <span>
+ record or page.
+ </span>
+ This means that the data the cursor has read and released
+ may change before the cursor's transaction has completed.
+ </p>
+ <p>
+ For example,
+ suppose you have two transactions, <tt class="literal">Ta</tt> and <tt class="literal">Tb</tt>. Suppose further that
+ <tt class="literal">Ta</tt> has a cursor that reads <tt class="literal">record R</tt>, but does not modify it. Normally,
+ <tt class="literal">Tb</tt> would then be unable to write <tt class="literal">record R</tt> because
+ <tt class="literal">Ta</tt> would be holding a read lock on it. But when you configure your transaction for
+ committed reads, <tt class="literal">Tb</tt> <span class="emphasis"><em>can</em></span> modify <tt class="literal">record
+ R</tt> before <tt class="literal">Ta</tt> completes, so long as the reading cursor is no longer
+ addressing the
+
+ <span>
+ record or page.
+ </span>
+ </p>
+ <p>
+ When you configure your application for this level of isolation, you may see better performance
+ throughput because there are fewer read locks being held by your transactions.
+ Read committed isolation is most useful when you have a cursor that is reading and/or writing records in
+ a single direction, and that does not ever have to go back to re-read those same records. In this case,
+ you can allow DB to release read locks as it goes, rather than hold them for the life of the
+ transaction.
+ </p>
+ <p>
+ To configure your application to use committed reads, do one of the following:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Create your transaction such that it allows committed reads. You do this by
+ <span>
+ specifying <tt class="literal">DB_READ_COMMITTED</tt> when you open the transaction.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>
+ Specify <tt class="literal">DB_READ_COMMITTED</tt>
+ when you open the cursor.
+ </span>
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example, the following creates a transaction that allows committed reads:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ // Notice that we do not have to specify any flags to the database to
+ // allow committed reads (this is as opposed to uncommitted reads
+ // where we DO have to specify a flag on the database open.
+ u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ DbTxn *txn = NULL;
+
+ // Open the transaction and enable committed reads. All cursors
+ // open with this transaction handle will use read committed
+ // isolation.
+ myEnv.txn_begin(NULL, &amp;txn, DB_READ_COMMITTED);
+
+ // From here, you perform your database reads and writes as normal,
+ // committing and aborting the transactions as is necessary,
+ // testing for deadlock exceptions as normal (omitted for brevity).
+
+ // Using transactional cursors with concurrent applications is
+ // described in more detail in the following section.
+
+ ...</pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="snapshot_isolation"></a>Using Snapshot Isolation</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default DB uses serializable isolation. An
+ important side effect of this isolation level is that
+ read operations obtain read locks on database pages,
+ and then hold those locks until the read operation is
+ completed. When you are using transactional cursors, this
+ means that read locks are held until the transaction commits or
+ aborts. In that case, over time a transactional cursor
+ can gradually block all other transactions from writing
+ to the database.
+ </p>
+ <p>
+ You can avoid this by using snapshot isolation.
+ Snapshot isolation uses <span class="emphasis"><em>multiversion
+ concurrency control</em></span> to guarantee
+ repeatable reads. What this means is that every time a
+ writer would take a read lock on a page, instead a copy of
+ the page is made and the writer operations on that page
+ copy. This frees other writers from blocking due to a
+ read lock held on the page.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_cost"></a>Snapshot Isolation Cost</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Snapshot isolation does not come without a cost.
+ Because pages are being duplicated before being
+ operated upon, the cache will fill up faster. This
+ means that you might need a larger cache in order to
+ hold the entire working set in memory.
+ </p>
+ <p>
+ If the cache becomes full of page copies before old
+ copies can be discarded, additional I/O will occur as
+ pages are written to temporary &quot;freezer&quot; files on disk.
+ This can substantially reduce throughput, and should be
+ avoided if possible by configuring a large cache and
+ keeping snapshot isolation transactions short.
+ </p>
+ <p>
+ You can estimate how large your cache should be by
+ taking a checkpoint, followed by a call to the
+
+ <tt class="methodname">DbEnv::log_archive()</tt>
+
+ method. The amount of cache required is approximately
+ double the size of the remaining log files (that is,
+ the log files that cannot be archived).
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_maxtxn"></a>Snapshot Isolation Transactional Requirements</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In addition to an increased cache size, you may also
+ need to increase the maximum number of transactions
+ that your application supports. (See
+ <a href="maxtxns.html"><p>
+ Most of the configuration activities that you need to perform
+ for your transactional DB application will involve the
+ locking and logging subsystems. See
+ <a href="txnconcurrency.html"></a>Concurrency
+ and
+ <a href="filemanagement.html"></a>Managing DB Files
+ for details.
+ </p><p>
+ However, there are a couple of things that you can do to
+ configure your transaction subsystem directly. These things
+ are:
+ </p><div class="itemizedlist"><ul type="disc"><li><p>
+ Configure the maximum number of simultaneous
+ transactions needed by your application.
+ In general, you should not need to do this unless you
+ use deeply nested transactions or you have many threads all
+ of which have active transactions. In addition, you may
+ need to a higher maximum number of transactions if you
+ are using snapshot isolation. See
+ <a href="isolation.html#sisolation_maxtxn"></a>Snapshot Isolation Transactional Requirements
+ for details.
+ </p><p>
+ By default, your application can support 20 active
+ transactions.
+ </p><p>
+ You can set the maximum number of simultaneous
+ transactions supported by your application using
+ <span>
+ the
+
+ <tt class="methodname">DbEnv::set_tx_max()</tt>
+ method. Note that this method must be called
+ before the environment has been opened.
+ </span>
+
+ </p><p>
+ If your application has exceeded this maximum value,
+ then any attempt to begin a new transaction will fail.
+ </p><p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_tx_max</tt> parameter. Remember that
+ the <tt class="literal">DB_CONFIG</tt> must reside in your
+ environment home directory.
+ </p></li><li><span>
+ <p>
+ <span>
+ Configure the timeout value for your transactions.
+ </span>
+
+
+ This value represents the longest period of time a
+ transaction can be active. Note, however, that
+ transaction timeouts are checked only when DB
+ examines its lock tables for blocked locks
+ (see <a href="blocking_deadlocks.html"></a>Locks, Blocks, and Deadlocks
+ for more information). Therefore, a transaction's timeout can
+ have expired, but the application will not be notified until DB
+ has a reason to examine its lock tables.
+ </p>
+ <p>
+ Be aware that some transactions may be
+ inappropriately timed out before the transaction has a
+ chance to complete. You should therefore use this
+ mechanism only if you know your application
+ might have unacceptably long transactions and
+ you want to make sure your application will
+ not stall during their execution.
+ (This might happen if, for example, your
+ transaction blocks or requests too much
+ data.)
+ </p>
+ <p>
+ Note that by default transaction timeouts are set to 0 seconds, which means that they never time
+ out.
+ </p>
+ <p>
+ To set the maximum timeout value for your transactions,
+ use the
+
+ <span><tt class="methodname">DbEnv::set_timeout()</tt></span>
+
+ method. This method configures the entire
+ environment; not just the handle used to set the
+ configuration. Further, this value may
+ be set at any time during the application's
+ lifetime.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_txn_timeout</tt> parameter.
+ </p>
+
+</span></li></ul></div><p>
+ For example:
+ </p><pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ // Configure a maximum transaction timeout of 1 second.
+ myEnv.set_timeout(1000000, DB_SET_TXN_TIMEOUT);
+ // Configure 40 maximum transactions.
+ myEnv.set_tx_max(40);
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ // From here, you open your databases, proceed with your
+ // database operations, and respond to deadlocks as
+ // is normal (omitted for brevity).
+
+
+ ...</pre></a>
+ for details on how to set this.)
+ In the worst case scenario, you might need to configure your application for one
+ more transaction for every page in the cache. This is
+ because transactions are retained until the last page
+ they created is evicted from the cache.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_whenuse"></a>When to Use Snapshot Isolation</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Snapshot isolation is best used when all or most
+ of the following conditions are true:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ You can have a large cache relative to your working data set size.
+ </p>
+ </li>
+ <li>
+ <p>
+ You require repeatable reads.
+ </p>
+ </li>
+ <li>
+ <p>
+ You will be using transactions that routinely work on
+ the entire database, or more commonly,
+ there is data in your database that will be very
+ frequently written by more than one transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Read/write contention is
+ limiting your application's
+ throughput, or the application
+ is all or mostly read-only and
+ contention for the lock manager
+ mutex is limiting throughput.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_howuse"></a>How to use Snapshot Isolation</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You use snapshot isolation by:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Opening the database with
+ multiversion support. You can
+ configure this either when you
+ open your environment or when
+ you open your database.
+ <span>
+ Use the
+ <tt class="literal">DB_MULTIVERSION</tt>
+ flag to configure this support.
+ </span>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your cursor or
+ transaction to use snapshot
+ isolation.
+ </p>
+ <p>
+ To do this,
+
+ <span>
+ pass the
+ <tt class="literal">DB_TXN_SNAPSHOT</tt> flag
+ when you open the cursor or
+ create the transaction. If
+ configured for the transaction,
+ then this flag is not required
+ when the cursor is opened.
+ </span>
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ The simplest way to take advantage of snapshot
+ isolation is for queries: keep update
+ transactions using full read/write locking and
+ use snapshot isolation on read-only transactions or
+ cursors. This should minimize blocking of
+ snapshot isolation transactions and will avoid
+ deadlock errors.
+ </p>
+ <p>
+ If the application has update transactions which
+ read many items and only update a small set (for
+ example, scanning until a desired record is
+ found, then modifying it), throughput may be
+ improved by running some updates at snapshot
+ isolation as well. But doing this means that
+ you must manage deadlock errors.
+ See
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ for details.
+ </p>
+ <p>
+ The following code fragment turns
+ on snapshot isolation for a transaction:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN | // Initialize transactions
+ <b class="userinput"><tt>DB_MULTIVERSION; // Support snapshot isolation.</tt></b>
+
+ // Note that no special flags are required here for snapshot isolation.
+ // This is because it is already enabled at the environment level.
+ u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ ....
+
+ envp-&gt;txn_begin(NULL, txn, <b class="userinput"><tt>DB_TXN_SNAPSHOT</tt></b>);
+
+ // Remainder of program omitted for brevity.
+
+ </pre>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="lockingsubsystem.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txn_ccursor.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">The Locking Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transactional Cursors and Concurrent Applications</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/lockingsubsystem.html b/db/docs/gsg_txn/CXX/lockingsubsystem.html
new file mode 100644
index 000000000..81631cb28
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/lockingsubsystem.html
@@ -0,0 +1,502 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>The Locking Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="blocking_deadlocks.html" title="Locks, Blocks, and Deadlocks" />
+ <link rel="next" href="isolation.html" title="Isolation" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">The Locking Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="blocking_deadlocks.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="isolation.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="lockingsubsystem"></a>The Locking Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to allow concurrent operations, DB provides the locking
+ subsystem. This subsystem provides inter- and intra- process
+ concurrency mechanisms. It is extensively used by DB concurrent
+ applications, but it can also be generally used for non-DB
+ resources.
+ </p>
+ <p>
+ This section describes the locking subsystem as it is used to
+ protect DB resources. In particular, issues on configuration are
+ examined here. For information on using the locking subsystem to
+ manage non-DB resources, see the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="configuringlock"></a>Configuring the Locking Subsystem</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You initialize the locking subsystem by specifying
+ <span>
+ <tt class="literal">DB_INIT_LOCK</tt> to the
+
+ <tt class="methodname">DbEnv::open()</tt>
+ method.
+ </span>
+
+ </p>
+ <p>
+ Before opening your environment, you can configure various
+ maximum values for your locking subsystem. Note that these
+ limits can only be configured before the environment is
+ opened. Also, these methods configure the entire environment,
+ not just a specific environment handle.
+ </p>
+ <p>
+ Finally, each bullet below identifies the
+ <tt class="filename">DB_CONFIG</tt> file parameter that can be used
+ to specify the specific locking limit. If used, these
+ <tt class="filename">DB_CONFIG</tt> file parameters override any
+ value that you might specify using the environment handle.
+ </p>
+ <p>
+ The limits that you can configure are as follows:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ The maximum number of lockers
+ supported by the environment. This value is used by
+ the environment when it is opened to estimate the amount
+ of space that it should allocate for various internal
+ data structures. By default, 1,000 lockers are
+ supported.
+ </p>
+ <p>
+ To configure this value, use the
+ <span>
+
+ <tt class="methodname">DbEnv::set_lk_max_lockers()</tt>
+ method.
+ </span>
+
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_lockers</tt> parameter.
+ </p>
+ </li>
+ <li>
+ <p>
+ The maximum number of locks supported by the environment.
+ By default, 1,000 locks are supported.
+ </p>
+ <p>
+ To configure this value, use the
+ <span>
+
+ <tt class="methodname">DbEnv::set_lk_max_locks()</tt>
+ method.
+ </span>
+
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_locks</tt> parameter.
+ </p>
+ </li>
+ <li>
+ <p>
+ The maximum number of locked objects supported by the environment.
+ By default, 1,000 objects can be locked.
+ </p>
+ <p>
+ To configure this value, use the
+ <span>
+
+ <tt class="methodname">DbEnv::set_lk_max_objects()</tt>
+ method.
+ </span>
+
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_objects</tt> parameter.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For a definition of lockers, locks, and locked objects, see
+ <a href="blocking_deadlocks.html#lockresources">Lock Resources</a>.
+ </p>
+ <p>
+ For example, to configure the maximum number of locks that your
+ environment can use:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle.
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ // Configure max locks
+ myEnv.set_lk_max_locks(envp, 5000);
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ try {
+ myEnv.close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database environment: &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="configdeadlkdetect"></a>Configuring Deadlock Detection</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order for DB to know that a deadlock has occurred,
+ some mechanism must be used to perform deadlock
+ detection. There are three ways that deadlock detection can
+ occur:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Allow DB to internally detect deadlocks as they
+ occur.
+ </p>
+ <p>
+ To do this, you use
+
+ <span><tt class="methodname">DbEnv::set_lk_detect()</tt>.</span>
+
+ This method causes DB to walk its internal lock table
+ looking for a deadlock whenever a lock request
+ is blocked. This method also identifies how DB decides which lock
+ requests are rejected when deadlocks are detected. For example,
+ DB can decide to reject the lock request for the transaction
+ that has the most number of locks, the least number of locks,
+ holds the oldest lock, holds the most number of write locks, and
+ so forth (see the API reference documentation for a complete
+ list of the lock detection policies).
+ </p>
+ <p>
+ You can call this method at any time during your application's
+ lifetime, but typically it is used before you open your environment.
+ </p>
+ <p>
+ Note that how you want DB to decide which thread of control should break a deadlock is
+ extremely dependent on the nature of your application. It is not unusual for some performance
+ testing to be required in order to make this determination. That said, a transaction that is
+ holding the maximum number of locks is usually indicative of the transaction that has performed
+ the most amount of work. Frequently you will not want a transaction that has performed a lot of
+ work to abandon its efforts and start all over again. It is not therefore uncommon for
+ application developers to initially select the transaction with the <span class="emphasis"><em>minimum</em></span>
+ number of write locks to break the deadlock.
+ </p>
+ <p>
+ Using this mechanism for deadlock detection means
+ that your application will never have to wait on a
+ lock before discovering that a deadlock has
+ occurred. However, walking the lock table every
+ time a lock request is blocked can be expensive
+ from a performance perspective.
+ </p>
+ </li>
+ <li>
+ <p>
+ Use a dedicated thread or external process to perform
+ deadlock detection. Note that this thread must be
+ performing no other database operations beyond deadlock
+ detection.
+ </p>
+ <p>
+ To externally perform lock detection, you can use
+ either the
+
+ <tt class="methodname">DbEnv::lock_detect()</tt>
+
+ method, or use the
+ <span><b class="command">db_deadlock</b></span> command line
+ utility. This method (or command) causes DB to walk the
+ lock table looking for deadlocks.
+ </p>
+ <p>
+ Note that like
+
+ <span><tt class="methodname">DbEnv::set_lk_detect()</tt>,</span>
+
+ you also use this method (or command line utility)
+ to identify which lock requests are rejected in the
+ event that a deadlock is detected.
+ </p>
+ <p>
+ Applications that perform deadlock detection in
+ this way typically run deadlock detection between every few
+ seconds and a minute. This means that your
+ application may have to wait to be notified of a
+ deadlock, but you also save the overhead of walking
+ the lock table every time a lock request is blocked.
+ </p>
+ </li>
+ <li>
+ <p>
+ Lock timeouts.
+ </p>
+ <p>
+ You can configure your locking subsystem such that
+ it times out any lock that is not released within a
+ specified amount of time. To do this, use the
+
+ <span><tt class="methodname">DbEnv::set_timeout()</tt></span>
+
+ method.
+ Note that lock timeouts are only checked when a
+ lock request is blocked or when deadlock
+ detection is otherwise performed. Therefore, a lock can have timed out and still be held for
+ some length of time until DB has a reason to examine its locking tables.
+ </p>
+ <p>
+ Be aware that extremely long-lived transactions, or
+ operations that hold locks for a long time, may be
+ inappropriately timed out before the transaction or
+ operation has a chance to complete. You should
+ therefore use this mechanism only if you know your
+ application will hold locks for very short periods
+ of time.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For example, to configure your application such that DB
+ checks the lock table for deadlocks every time a lock
+ request is blocked:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ // Configure db to perform deadlock detection internally, and to
+ // choose the transaction that has performed the least amount
+ // of writing to break the deadlock in the event that one
+ // is detected.
+ myEnv.set_lk_detect(DB_LOCK_MINWRITE);
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ // From here, you open your databases, proceed with your
+ // database operations, and respond to deadlocks as
+ // is normal (omitted for brevity).
+
+
+ ...</pre>
+ <p>
+ Finally, the following command line call causes
+ deadlock detection to be run against the
+ environment contained in <tt class="literal">/export/dbenv</tt>. The
+ transaction with the youngest lock is chosen to break the
+ deadlock:
+ </p>
+ <pre class="programlisting">&gt; /usr/local/db_install/bin/db_deadlock -h /export/dbenv -a y</pre>
+ <p>
+ For more information, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/utility/db_deadlock.html" target="_top">
+ <tt class="literal">db_deadlock</tt> reference documentation.
+ </a>
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="deadlockresolve"></a>Resolving Deadlocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When DB determines that a deadlock has occurred, it will
+ select a thread of control to resolve the deadlock and then
+
+ <span>
+ throws <tt class="literal">DbDeadlockException</tt> in that
+ thread.
+ </span>
+
+
+ If a deadlock is detected, the thread must:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Cease all read and write operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Close all open cursors.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort the transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally retry the operation. If your application
+ retries deadlocked operations, the new attempt must
+ be made using a new transaction.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If a thread has deadlocked, it may not make any
+ additional database calls using the handle that has
+ deadlocked.
+ </p>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">// retry_count is a counter used to identify how many times
+// we've retried this operation. To avoid the potential for
+// endless looping, we won't retry more than MAX_DEADLOCK_RETRIES
+// times.
+
+// txn is a transaction handle.
+// key and data are DBT handles. Their usage is not shown here.
+while (retry_count &lt; MAX_DEADLOCK_RETRIES) {
+ try {
+ envp-&gt;txn_begin(NULL, txn, 0);
+ dbp-&gt;put(txn, &amp;key, &amp;data, 0);
+ txn-&gt;commit(0);
+ return (EXIT_SUCCESS);
+ } catch (DbDeadlockException &amp;de) {
+ try {
+ // Abort the transaction and increment the
+ // retry counter
+ txn-&gt;abort();
+ retry_count++;
+ // If we've retried too many times, log it and exit
+ if (retry_count &gt;= MAX_DEADLOCK_RETRIES) {
+ envp-&gt;errx(&quot;Exceeded retry limit. Giving up.&quot;);
+ return (EXIT_FAILURE);
+ }
+ } catch (DbException &amp;ae) {
+ envp-&gt;err(ae.get_errno(), &quot;txn abort failed.&quot;);
+ return (EXIT_FAILURE);
+ }
+ } catch (DbException &amp;e) {
+ try {
+ // For a generic error, log it and abort.
+ envp-&gt;err(e.get_errno(), &quot;Error putting data.&quot;);
+ txn-&gt;abort();
+ } catch (DbException &amp;ae) {
+ envp-&gt;err(ae.get_errno(), &quot;txn abort failed.&quot;);
+ return (EXIT_FAILURE);
+ }
+ }
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="blocking_deadlocks.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="isolation.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Locks, Blocks, and Deadlocks </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Isolation</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/logconfig.html b/db/docs/gsg_txn/CXX/logconfig.html
new file mode 100644
index 000000000..ec3268ae7
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/logconfig.html
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Configuring the Logging Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="logfileremoval.html" title="Removing Log Files" />
+ <link rel="next" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Configuring the Logging Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="logfileremoval.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="wrapup.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="logconfig"></a>Configuring the Logging Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure the following aspects of the logging
+ subsystem:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Size of the log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Size of the logging subsystem's region.
+ See <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Maintain logs entirely in-memory.
+ See <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Size of the log buffer in memory.
+ See <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ On-disk location of your log files. See
+ <a href="enabletxn.html#splittingdata">Identifying Specific File Locations</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logfilesize"></a>Setting the Log File Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Whenever a pre-defined amount of data is written to a
+ log file (10 MB by default), DB stops using the
+ current log file and starts writing to a new file.
+ You can change the maximum amount of data contained in each
+ log file by using the
+ <span>
+
+ <tt class="methodname">DbEnv::set_lg_max()</tt>
+ method.
+ </span>
+
+ Note that this method can be used at any time
+ during an application's lifetime.
+ </p>
+ <p>
+ Setting the log file size to something larger than its
+ default value is largely a matter of
+ convenience and a reflection of the application's
+ preference in backup media and frequency. However, if
+ you set the log file size too low relative to your
+ application's traffic patterns, you can cause
+ yourself trouble.
+ </p>
+ <p>
+ From a performance perspective, setting the log file
+ size to a low value can cause your active transactions to
+ pause their writing activities more frequently than would
+ occur with larger log file sizes. Whenever a
+ transaction completes the log buffer is flushed to
+ disk. Normally other transactions can continue to
+ write to the log buffer while this flush is in
+ progress. However, when one log file is being closed
+ and another created, all transactions must cease
+ writing to the log buffer until the switch over is
+ completed.
+ </p>
+ <p>
+ Beyond performance concerns, using smaller log files
+ can cause you to use more physical files on disk.
+ As a result, your application could run out
+ of log sequence numbers, depending on how busy your
+ application is.
+ </p>
+ <p>
+ Every log file is identified with a 10 digit number.
+ Moreover, the maximum number of log files that your application
+ is allowed to create in its lifetime is 2,000,000,000.
+ </p>
+ <p>
+ For example, if your application performs 6,000 transactions per
+ second for 24 hours a day, and you are logging 500 bytes of
+ data per transaction into 10 MB log files, then you
+ will run out of log files in around 221 years:
+ </p>
+ <pre class="programlisting"> (10 * 2^20 * 2000000000) / (6000 * 500 * 365 * 60 *60 * 24) = 221 </pre>
+ <p>
+ However, if you were writing 2000 bytes of data per
+ transaction, and using 1 MB log files, then the same
+ formula shows you running out of log files in 5 years time.
+ </p>
+ <p>
+ All of these time frames are quite long, to be sure,
+ but if you do run out of log files after, say, 5 years
+ of continuous operations, then you must reset your log
+ sequence numbers. To do so:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Backup your databases as if to prepare for
+ catastrophic failure. See
+ <a href="backuprestore.html">Backup Procedures</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reset the log file's sequence number using the
+ <span><b class="command">db_load</b></span> utility's
+ <tt class="literal">-r</tt> option.
+ </p>
+ </li>
+ <li>
+ <p>
+ Remove all of the log files from your
+ environment. Note that this is the only
+ situation in which all of the log files are
+ removed from an environment; in all other
+ cases, at least a single log file is retained.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restart your application.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logregionsize"></a>Configuring the Logging Region Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The logging subsystem's default region size is 60 KB. The
+ logging region is used to store filenames, and so you may
+ need to increase its size if a large number of files (that
+ is, if you have a very large number of databases) will
+ be opened and registered with DB's log manager.
+ </p>
+ <p>
+ You can set the size of your logging region by using the
+ <span>
+
+ <tt class="methodname">DbEnv::set_lg_region()</tt>
+ </span>
+
+ method. Note that this method can only be called before the
+ first environment handle for your application is opened.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="inmemorylogging"></a>Configuring In-Memory Logging</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is possible to configure your logging subsystem such
+ that logs are maintained entirely in memory. When
+ you do this, you give up your transactional durability
+ guarantee. Without log files, you have no way to run
+ recovery so any system or software failures that you might
+ experience can corrupt your databases.
+ </p>
+ <p>
+ However, by giving up your durability guarantees, you can
+ greatly improve your application's throughput by avoiding
+ the disk I/O necessary to write logging information to
+ disk. In this case, you still retain your transactional
+ atomicity, consistency, and isolation guarantees.
+ </p>
+ <p>
+ To configure your logging subsystem to maintain your logs
+ entirely in-memory:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure your log buffer is capable of holding all
+ log information that can accumulate during the longest
+ running transaction. See <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a> for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not run normal recovery when you open your environment. In this configuration, there are no
+ log files available against which you can run recovery. As a result, if you specify recovery
+ when you open your environment, it is ignored.
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify
+ <span>
+ <tt class="literal">DB_LOG_INMEMORY</tt> to the
+
+ <tt class="methodname">DbEnv::set_flags()</tt>
+ </span>
+
+ method. Note that you must specify this before
+ your application opens its first environment
+ handle.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ // Set the normal flags for a transactional subsystem. Note that
+ // we DO NOT specify DB_RECOVER.
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ // Indicate that logging is to be performed only in memory.
+ // Doing this means that we give up our transactional durability
+ // guarantee.
+ myEnv.set_flags(DB_LOG_INMEMORY, 1);
+
+ // Configure the size of our log memory buffer. This must be
+ // large enough to hold all the logging information likely
+ // to be created for our longest running transaction. The
+ // default size for the logging buffer is 1 MB when logging
+ // is performed in-memory. For this example, we arbitrarily
+ // set the logging buffer to 5 MB.
+ myEnv.set_lg_bsize(5 * 1024 * 1024);
+
+ // Open the environment as normal.
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ // From here, you open databases, create transactions and
+ // perform database operations exactly as you would if you
+ // were logging to disk. This part is omitted for brevity. </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logbuffer"></a>Setting the In-Memory Log Buffer Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When your application is configured for on-disk logging
+ (the default behavior for transactional applications), log
+ information is stored in-memory until the storage space
+ fills up, or a transaction commit forces the log
+ information to be flushed to disk.
+ </p>
+ <p>
+ It is possible to increase the amount of memory available
+ to your file log buffer. Doing so improves throughput for
+ long-running transactions, or for transactions that produce
+ a large amount of data.
+ </p>
+ <p>
+ When you have your logging subsystem configured to maintain
+ your log entirely in memory (see
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>), it is very important
+ to configure your log buffer size because the log buffer
+ must be capable of holding all log information that can
+ accumulate during the longest running transaction.
+ You must make sure that the in-memory log buffer size is
+ large enough that no transaction will ever span the entire
+ buffer. You must also avoid a state where the in-memory
+ buffer is full and no space can be freed because a
+ transaction that started the first log &quot;file&quot; is still
+ active.
+ </p>
+ <p>
+ When your logging subsystem is configured for on-disk
+ logging, the default log buffer space is 32 KB. When
+ in-memory logging is configured, the default log buffer
+ space is 1 MB.
+ </p>
+ <p>
+ You can increase your log buffer space using the
+ <span>
+
+ <tt class="methodname">DbEnv::set_lg_bsize()</tt>
+ </span>
+
+ method. Note that this method can only be called before the
+ first environment handle for your application is opened.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="logfileremoval.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="wrapup.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Removing Log Files </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 6. Summary and Examples</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/logfileremoval.html b/db/docs/gsg_txn/CXX/logfileremoval.html
new file mode 100644
index 000000000..dae151e87
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/logfileremoval.html
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Removing Log Files</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="hotfailover.html" title="Using Hot Failovers" />
+ <link rel="next" href="logconfig.html" title="Configuring the Logging Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Removing Log Files</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="hotfailover.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="logconfig.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="logfileremoval"></a>Removing Log Files</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default DB does not delete log files for you. For this reason,
+ DB's log files will eventually grow to consume an
+ unnecessarily large amount of disk space. To guard against
+ this, you should periodically take administrative action to
+ remove log files that are no longer in use by your application.
+ </p>
+ <p>
+ You can remove a log file if all of the following are true:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ the log file is not involved in an active transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ a checkpoint has been performed
+ <span class="emphasis"><em>after</em></span> the log file was
+ created.
+ </p>
+ </li>
+ <li>
+ <p>
+ the log file is not the only log file in the
+ environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ the log file that you want to remove has already been
+ included in an offline or hot backup.
+ Failure to observe this last condition can cause your
+ backups to be unusable.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ DB provides several mechanisms to remove log files that
+ meet all but the last criteria (DB has no way to know which
+ log files have already been included in a backup). The
+ following mechanisms make it easy to remove unneeded log files,
+ but can result in an unusable backup if the log files are not first
+ saved to your archive location. All of the following
+ mechanisms automatically delete unneeded log files for you:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option.
+ </p>
+ </li>
+ <li>
+ <p>
+ From within your application, call the
+ <span>
+
+ <tt class="methodname">DbEnv::log_archive()</tt>
+ method with the <tt class="literal">DB_ARCH_REMOVE</tt> flag.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>
+ Call
+
+ <tt class="methodname">DbEnv::set_flags()</tt>
+ method with the <tt class="literal">DB_LOG_AUTOREMOVE</tt> flag.
+ Note that this flag can be set at any point in
+ the lifetime of your application. Setting this
+ parameter affects all environment handles
+ opened against the environment; not just the
+ handle used to set the flag.
+ </span>
+
+ </p>
+ <p>
+ Note that unlike the other log removal mechanisms
+ identified here, this method actually causes log files
+ to be removed on an on-going basis as they become
+ unnecessary. This is extremely desirable behavior if
+ what you want is to use the absolute minimum amount of
+ disk space possible for your application. This
+ mechanism <span class="emphasis"><em>will</em></span> leave you with
+ the log files that are required to run normal recovery.
+ However, it is highly likely that this mechanism will
+ prevent you from running catastrophic recovery.
+ </p>
+ <p>
+ Do NOT use this mechanism if you want to be able to
+ perform catastrophic recovery, or if you want to be
+ able to maintain a hot backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ In order to safely remove log files and still be able to
+ perform catastrophic recovery, use the
+ <span><b class="command">db_archive</b></span> command line utility as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Run either a normal or hot backup as described in
+ <a href="backuprestore.html">Backup Procedures</a>. Make
+ sure that all of this data is safely stored to your
+ backup media before continuing.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you have not already done so, perform a checkpoint.
+ See <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are maintaining a hot backup, perform the hot
+ backup procedure as described in
+ <a href="hotfailover.html">Using Hot Failovers</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option against
+ your production environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option against
+ your failover environment, if you are maintaining one.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="hotfailover.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="logconfig.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Using Hot Failovers </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Configuring the Logging Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/maxtxns.html b/db/docs/gsg_txn/CXX/maxtxns.html
new file mode 100644
index 000000000..1a815c290
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/maxtxns.html
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Configuring the Transaction Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
+ <link rel="next" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Configuring the Transaction Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnconcurrency.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="maxtxns"></a>Configuring the Transaction Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Most of the configuration activities that you need to perform
+ for your transactional DB application will involve the
+ locking and logging subsystems. See
+ <a href="txnconcurrency.html">Concurrency</a>
+ and
+ <a href="filemanagement.html">Managing DB Files</a>
+ for details.
+ </p>
+ <p>
+ However, there are a couple of things that you can do to
+ configure your transaction subsystem directly. These things
+ are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Configure the maximum number of simultaneous
+ transactions needed by your application.
+ In general, you should not need to do this unless you
+ use deeply nested transactions or you have many threads all
+ of which have active transactions. In addition, you may
+ need to a higher maximum number of transactions if you
+ are using snapshot isolation. See
+ <a href="isolation.html#sisolation_maxtxn">Snapshot Isolation Transactional Requirements</a>
+ for details.
+ </p>
+ <p>
+ By default, your application can support 20 active
+ transactions.
+ </p>
+ <p>
+ You can set the maximum number of simultaneous
+ transactions supported by your application using
+ <span>
+ the
+
+ <tt class="methodname">DbEnv::set_tx_max()</tt>
+ method. Note that this method must be called
+ before the environment has been opened.
+ </span>
+
+ </p>
+ <p>
+ If your application has exceeded this maximum value,
+ then any attempt to begin a new transaction will fail.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_tx_max</tt> parameter. Remember that
+ the <tt class="literal">DB_CONFIG</tt> must reside in your
+ environment home directory.
+ </p>
+ </li>
+ <li>
+ <span>
+ <p>
+ <span>
+ Configure the timeout value for your transactions.
+ </span>
+
+
+ This value represents the longest period of time a
+ transaction can be active. Note, however, that
+ transaction timeouts are checked only when DB
+ examines its lock tables for blocked locks
+ (see <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information). Therefore, a transaction's timeout can
+ have expired, but the application will not be notified until DB
+ has a reason to examine its lock tables.
+ </p>
+ <p>
+ Be aware that some transactions may be
+ inappropriately timed out before the transaction has a
+ chance to complete. You should therefore use this
+ mechanism only if you know your application
+ might have unacceptably long transactions and
+ you want to make sure your application will
+ not stall during their execution.
+ (This might happen if, for example, your
+ transaction blocks or requests too much
+ data.)
+ </p>
+ <p>
+ Note that by default transaction timeouts are set to 0 seconds, which means that they never time
+ out.
+ </p>
+ <p>
+ To set the maximum timeout value for your transactions,
+ use the
+
+ <span><tt class="methodname">DbEnv::set_timeout()</tt></span>
+
+ method. This method configures the entire
+ environment; not just the handle used to set the
+ configuration. Further, this value may
+ be set at any time during the application's
+ lifetime.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_txn_timeout</tt> parameter.
+ </p>
+
+</span>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ // Configure a maximum transaction timeout of 1 second.
+ myEnv.set_timeout(1000000, DB_SET_TXN_TIMEOUT);
+ // Configure 40 maximum transactions.
+ myEnv.set_tx_max(40);
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ // From here, you open your databases, proceed with your
+ // database operations, and respond to deadlocks as
+ // is normal (omitted for brevity).
+
+
+ ...</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnconcurrency.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Secondary Indices with Transaction Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 4. Concurrency</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/nestedtxn.html b/db/docs/gsg_txn/CXX/nestedtxn.html
new file mode 100644
index 000000000..f15aafb9c
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/nestedtxn.html
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Nested Transactions</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="autocommit.html" title="Auto Commit" />
+ <link rel="next" href="txncursor.html" title="Transactional Cursors" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Nested Transactions</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="autocommit.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="nestedtxn"></a>Nested Transactions</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A <span class="emphasis"><em>nested transaction</em></span> is used to provide a
+ transactional guarantee for a subset of operations performed within
+ the scope of a larger transaction. Doing this allows you to commit
+ and abort the subset of operations independently of the larger
+ transaction.
+ </p>
+ <p>
+ The rules to the usage of a nested transaction are as follows:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ While the nested (child) transaction is active, the parent
+ transaction may not perform any operations other than to commit
+ or abort, or to create more child transactions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Committing a nested transaction has no effect on the state
+ of the parent transaction. The parent transaction is still
+ uncommitted. However, the parent transaction can now
+ see any modifications made by the child transaction.
+ Those modifications, of course, are still hidden to all
+ other transactions until the parent also commits.
+ </p>
+ </li>
+ <li>
+ <p>
+ Likewise, aborting the nested transaction has no effect on
+ the state of the parent transaction. The only result of the
+ abort is that neither the parent nor any
+ other transactions will see any of the
+ database modifications performed under the protection of the
+ nested transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the parent transaction commits or aborts while it has
+ active children, the child transactions are resolved in the
+ same way as the parent. That is, if the parent aborts, then
+ the child transactions abort as well. If the parent commits,
+ then whatever modifications have been performed by the child
+ transactions are also committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ The locks held by a nested transaction are not released when
+ that transaction commits. Rather, they are now held by the
+ parent transaction until such a time as that parent commits.
+ </p>
+ </li>
+ <li>
+ <p>
+ Any database modifications performed by the nested transaction
+ are not visible outside of the larger encompassing
+ transaction until such a time as that parent transaction is
+ committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ The depth of the nesting that you can achieve with nested
+ transaction is limited only by memory.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ To create a nested transaction, simply pass the parent transaction's
+ handle when you created the nested transaction's handle. For
+ example:
+ </p>
+ <pre class="programlisting"> // parent transaction
+ DbTxn *parentTxn, *childTxn;
+ ret = myEnv.txn_begin(NULL, &amp;parentTxn, 0);
+ // child transaction
+ ret = myEnv.txn_begin(parent_txn, &amp;childTxn, 0); </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="autocommit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Auto Commit </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transactional Cursors</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/perftune-intro.html b/db/docs/gsg_txn/CXX/perftune-intro.html
new file mode 100644
index 000000000..e9dff26fc
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/perftune-intro.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Performance Tuning</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="recovery-intro.html" title="Recoverability" />
+ <link rel="next" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Performance Tuning</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="recovery-intro.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="enabletxn.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="perftune-intro"></a>Performance Tuning</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From a performance perspective, the use of transactions is not free.
+ Depending on how you configure them, transaction commits
+ usually require your application to perform disk I/O that a non-transactional
+ application does not perform. Also, for multi-threaded
+ <span>and
+ multi-process</span> applications, the use of transactions can
+ result in increased lock contention due to extra locking
+ requirements driven by transactional isolation guarantees.
+ </p>
+ <p>
+ There is therefore a performance tuning component to transactional applications
+ that is not applicable for non-transactional applications (although
+ some tuning considerations do exist whether or not your application uses
+ transactions). Where appropriate, these tuning considerations are
+ introduced in the following chapters.
+
+ <span>
+ However, for a more complete description of them, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/tune.html" target="_top">
+ Transaction tuning
+ </a>
+ and
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/throughput.html" target="_top">
+ Transaction throughput
+ </a>
+ sections of the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="recovery-intro.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="enabletxn.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Recoverability </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 2. Enabling Transactions</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/preface.html b/db/docs/gsg_txn/CXX/preface.html
new file mode 100644
index 000000000..37929aed5
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/preface.html
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Preface</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="next" href="introduction.html" title="Chapter 1. Introduction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Preface</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="preface" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="preface"></a>Preface</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This document describes how to use transactions with your Berkeley DB
+ applications. It is intended to describe how to
+ transaction protect your application's data. The APIs used to perform this task
+ are described here, as are the environment infrastructure and administrative tasks
+ required by a transactional application. This book also
+ describes multi-threaded <span>and
+ multi-process</span> DB applications and the requirements they
+ have for deadlock detection.
+ </p>
+ <p>
+ This book is aimed at the software engineer responsible for writing a
+ transactional DB application.
+ </p>
+ <p>
+ This book assumes that you have already read and understood the
+ concepts contained in the
+ <span><i class="citetitle">Getting Started with Berkeley DB</i>
+ guide.</span>
+
+
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="conventions"></a>Conventions Used in this Book</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following typographical conventions are used within in this manual:
+ </p>
+ <p>
+ Class names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
+ names</tt>. For example:
+
+
+
+
+
+ <span>&quot;<tt class="methodname">DbEnv::open()</tt> is a
+ <tt class="classname">DbEnv</tt> class method.&quot;</span>
+ </p>
+ <p>
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
+ </p>
+ <p>
+ Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
+ For example:
+ </p>
+ <pre class="programlisting">typedef struct vendor {
+ char name[MAXFIELD]; // Vendor name
+ char street[MAXFIELD]; // Street name and number
+ char city[MAXFIELD]; // City
+ char state[3]; // Two-digit US state code
+ char zipcode[6]; // US zipcode
+ char phone_number[13]; // Vendor phone number
+} VENDOR; </pre>
+ <p>
+ In some situations, programming examples are updated from one chapter to the next. When
+ this occurs, the new code is presented in <b class="userinput"><tt>monospaced bold</tt></b> font. For example:
+ </p>
+ <pre class="programlisting">typedef struct vendor {
+ char name[MAXFIELD]; // Vendor name
+ char street[MAXFIELD]; // Street name and number
+ char city[MAXFIELD]; // City
+ char state[3]; // Two-digit US state code
+ char zipcode[6]; // US zipcode
+ char phone_number[13]; // Vendor phone number
+ <b class="userinput"><tt>char sales_rep[MAXFIELD]; // Name of sales representative
+ char sales_rep_phone[MAXFIELD]; // Sales rep's phone number </tt></b>
+} VENDOR; </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Finally, notes of special interest are represented using a note block such
+ as this.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ transactional DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/CXX/index.html" target="_top">
+ Getting Started with Berkeley DB for C++
+ </a>
+
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/CXX/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for C++
+ </a>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/api_cxx/frame.html" target="_top">
+ Berkeley DB C++ API
+ </a>
+
+
+
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Getting Started with Berkeley DB Transaction Processing </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/readblock.jpg b/db/docs/gsg_txn/CXX/readblock.jpg
new file mode 100644
index 000000000..16a511feb
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/readblock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/CXX/readmodifywrite.html b/db/docs/gsg_txn/CXX/readmodifywrite.html
new file mode 100644
index 000000000..62375dc3a
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/readmodifywrite.html
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Read/Modify/Write</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txn_ccursor.html" title="Transactional Cursors and Concurrent Applications" />
+ <link rel="next" href="txnnowait.html" title="No Wait on Blocks" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Read/Modify/Write</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txn_ccursor.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnnowait.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="readmodifywrite"></a>Read/Modify/Write</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If you are retrieving
+ <span>a record from the database</span>
+
+ for the purpose of modifying or deleting it, you should declare
+ a read-modify-write cycle at the time that you read the
+ <span>record.</span>
+
+ Doing so causes DB to obtain write locks (instead of a read
+ locks) at the time of the read. This helps to prevent deadlocks by
+ preventing another transaction from acquiring a read lock on the same
+ record while the read-modify-write cycle is in progress.
+ </p>
+ <p>
+ Note that declaring a read-modify-write cycle may actually increase the amount of blocking that your
+ application sees, because readers immediately obtain write locks and write locks cannot be shared. For this
+ reason, you should use read-modify-write cycles only if you are seeing a large amount of deadlocking
+ occurring in your application.
+ </p>
+ <p>
+ In order to declare a read/modify/write cycle when you perform a
+ read operation,
+
+ <span>
+ pass the <tt class="literal">DB_RMW</tt> flag
+ <span>
+ to the database or cursor get method.
+ </span>
+
+
+ </span>
+
+
+
+
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">// Begin the deadlock retry loop as is normal.
+while (retry_count &lt; MAX_DEADLOCK_RETRIES) {
+ try {
+ envp-&gt;txn_begin(NULL, txn, 0);
+
+ ...
+ // key and data are DBTs. Their usage is omitted for brevity.
+ ...
+
+ // Read the data. Declare the read/modify/write cycle here
+ dbp-&gt;get(txn, &amp;key, &amp;data, DB_RMW);
+
+ ...
+ // Modify the data as is required. (not shown here)
+ ...
+
+ // Put the data. Note that you do not have to provide any
+ // additional flags here due to the read/modify/write
+ // cycle. Simply put the data and perform your deadlock
+ // detection as normal.
+ dbp-&gt;put(txn, &amp;key, &amp;data, 0);
+ txn-&gt;commit(0);
+ return (EXIT_SUCCESS);
+ } catch (DbDeadlockException &amp;de) {
+ // Deadlock detection and exception handling omitted
+ // for brevity
+ ...</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txn_ccursor.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnnowait.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transactional Cursors and Concurrent Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> No Wait on Blocks</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/recovery-intro.html b/db/docs/gsg_txn/CXX/recovery-intro.html
new file mode 100644
index 000000000..ee490b9ba
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/recovery-intro.html
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Recoverability</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="next" href="perftune-intro.html" title="Performance Tuning" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Recoverability</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="perftune-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="recovery-intro"></a>Recoverability</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ An important part of DB's transactional guarantees is durability.
+ <span class="emphasis"><em>Durability</em></span> means that once a
+ transaction has been committed, the database modifications performed
+ under its protection will not be lost due to system failure.
+ </p>
+ <p>
+ In order to provide the transactional durability guarantee,
+ DB uses a write-ahead logging system. Every operation performed on
+ your databases is described in a log before it is performed on
+ your databases. This is done in order to ensure that an operation can be
+ recovered in the event of an untimely application
+ or system failure.
+ </p>
+ <p>
+ <span>
+ Beyond logging, another important aspect of durability is
+ recoverability. That is, backup and restore. </span>
+
+ DB supports a normal recovery that runs against a subset of
+ your log files. This is a routine procedure used whenever your
+ environment is first opened upon application startup, and it is intended to
+ ensure that your database is in a consistent state. DB also
+ supports archival backup and recovery in the case of
+ catastrophic failure, such as the loss of a physical disk
+ drive.
+ </p>
+ <p>
+ This book describes several different backup procedures
+ you can use to protect your on-disk data. These procedures
+ range from simple offline backup strategies to hot failovers. Hot failovers
+ provide not only a backup mechanism, but
+ also a way to recover from a fatal hardware failure.
+ </p>
+ <p>
+ This book also describes the recovery procedures you should use
+ for each of the backup strategies that you might employ.
+ </p>
+ <p>
+ For a detailed description of backup and restore procedures, see
+ <span>
+ <a href="filemanagement.html">Managing DB Files</a>.
+ </span>
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="perftune-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Performance Tuning</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/recovery.html b/db/docs/gsg_txn/CXX/recovery.html
new file mode 100644
index 000000000..546326ad7
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/recovery.html
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Recovery Procedures</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="backuprestore.html" title="Backup Procedures" />
+ <link rel="next" href="architectrecovery.html" title="Designing Your Application for Recovery" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Recovery Procedures</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="backuprestore.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="architectrecovery.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="recovery"></a>Recovery Procedures</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB supports two types of recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Normal recovery, which is run when your environment is
+ opened upon application startup, examines only those
+ log records needed to bring the databases to a consistent
+ state since the last checkpoint. Normal recovery
+ starts with any logs used by any transactions active at
+ the time of the last checkpoint, and examines all logs
+ from then to the current logs.
+ </p>
+ </li>
+ <li>
+ <p>
+ Catastrophic recovery, which is performed in the same
+ way that normal recovery is except that it examines
+ all available log files. You use catastrophic recovery
+ to restore your databases from a previously created backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these two, normal recovery should be considered a routine
+ matter; in fact you should run normal
+ recovery whenever you start up your application.
+ </p>
+ <p>
+ Catastrophic recovery is run whenever you have lost or
+ corrupted your database files and you want to restore from a
+ backup. You also run catastrophic recovery when
+ you create a hot backup
+ (see <a href="hotfailover.html">Using Hot Failovers</a> for more information).
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="normalrecovery"></a>Normal Recovery</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Normal recovery examines the contents of your environment's
+ log files, and uses this information to ensure that your
+ database files are consistent relative to the
+ information contained in the log files.
+ </p>
+ <p>
+ Normal recovery also recreates your environment's region files.
+ This has the desired effect of clearing any unreleased locks
+ that your application may have held at the time of an
+ unclean application shutdown.
+ </p>
+ <p>
+ Normal recovery is run only against those log files created
+ since the time of your last checkpoint. For this reason,
+ your recovery time is dependent on how much data has been
+ written since the last checkpoint, and therefore on how
+ much log file information there is to examine. If you run
+ checkpoints infrequently, then normal recovery can
+ take a relatively long time.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ You should run normal recovery every
+ time you perform application startup.
+ </p>
+ </div>
+ <p>
+ To run normal recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure all your environment handles are closed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Normal recovery <span class="emphasis"><em>must
+ be</em></span> single-threaded.
+ </p>
+ </li>
+ <li>
+ <p>
+ Provide the <tt class="literal">DB_RECOVER</tt> flag when
+ you open your environment.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ You can also run recovery by pausing or shutting down your
+ application and using the <span><b class="command">db_recover</b></span>
+ command line utility.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+void *checkpoint_thread(void *);
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN | // Initialize transactions
+ DB_THREAD | // Free-thread the env handle
+ DB_RECOVER; // Run normal recovery
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ ...
+
+ // All other operations are identical from here. Notice, however,
+ // that we have not created any other threads of control before
+ // recovery is complete. You want to run recovery for
+ // the first thread in your application that opens an environment,
+ // but not for any subsequent threads. </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="catastrophicrecovery"></a>Catastrophic Recovery</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Use catastrophic recovery when you are
+ recovering your databases from a previously created backup.
+ Note that to restore your databases from a previous backup, you
+ should copy the backup to a new environment directory, and
+ then run catastrophic recovery. Failure to do so can lead to
+ the internal database structures being out of sync with your log files.
+ </p>
+ <p>
+ Catastrophic recovery must be run single-threaded.
+ </p>
+ <p>
+ To run catastrophic recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Shutdown all database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restore the backup to an empty directory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Provide the <tt class="literal">DB_RECOVER_FATAL</tt> flag when
+ you open your environment. This environment open
+ must be single-threaded.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ You can also run recovery by pausing or shutting down your
+ application and using the <span><b class="command">db_recover</b></span>
+ command line utility with the the <tt class="literal">-c</tt> option.
+ </p>
+ <p>
+ Note that catastrophic recovery examines every available
+ log file &#8212; not just those log files created since the
+ last checkpoint as is the case for normal recovery. For this reason,
+ catastrophic recovery is likely to take longer than does
+ normal recovery.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+void *checkpoint_thread(void *);
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN | // Initialize transactions
+ DB_THREAD | // Free-thread the env handle
+ <b class="userinput"><tt>DB_RECOVER_FATAL; // Run catastrophic recovery</tt></b>
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+
+ ...
+
+ // All other operations are identical from here. Notice, however,
+ // that we have not created any other threads of control before
+ // recovery is complete. You want to run recovery for
+ // the first thread in your application that opens an environment,
+ // but not for any subsequent threads. </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="backuprestore.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="architectrecovery.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Backup Procedures </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Designing Your Application for Recovery</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/reversesplit.html b/db/docs/gsg_txn/CXX/reversesplit.html
new file mode 100644
index 000000000..9c06afcec
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/reversesplit.html
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Reverse BTree Splits</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txnnowait.html" title="No Wait on Blocks" />
+ <link rel="next" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Reverse BTree Splits</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnnowait.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="filemanagement.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="reversesplit"></a>Reverse BTree Splits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If your application is using the Btree access method, and your
+ application is repeatedly deleting then adding records to your
+ database, then you might be able to reduce lock contention by
+ turning off reverse Btree splits.
+ </p>
+ <p>
+ As pages are emptied in a database, DB attempts to
+ delete empty pages in order to keep
+ the database as small as possible and minimize search time.
+ Moreover, when a page in the database fills
+ up, DB, of course, adds additional pages
+ to make room for more data.
+ </p>
+ <p>
+ Adding and deleting pages in the database requires that the
+ writing thread lock the parent page. Consequently, as the
+ number of pages in your database diminishes, your application
+ will see increasingly more lock contention; the maximum level
+ of concurrency in a database of two pages is far smaller than
+ that in a database of 100 pages, because there are fewer pages
+ that can be locked.
+ </p>
+ <p>
+ Therefore, if you prevent the database from being reduced to a
+ minimum number of pages, you can improve your application's
+ concurrency throughput. Note, however, that you should do so
+ only if your application tends to delete and then add the same
+ data. If this is not the case, then preventing reverse Btree
+ splits can harm your database search time.
+ </p>
+ <p>
+ To turn off reverse Btree splits,
+ <span>
+ provide the
+ <tt class="literal">DB_REVSPLITOFF</tt> flag to the
+
+ <tt class="methodname">Db::set_flags()</tt>
+ method.
+ </span>
+
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize locking
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_THREAD | // Free-thread the env handle
+ DB_INIT_TXN; // Initialize transactions
+
+ u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+
+ // Turn off BTree reverse split.
+ dbp=&gt;set_flags(DB_REVSPLITOFF);
+
+ dbp-&gt;open(dbp, // Pointer to the database
+ NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot; &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ try {
+ dbp-&gt;close(dbp, 0);
+ myEnv.close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot; &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnnowait.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="filemanagement.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">No Wait on Blocks </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 5. Managing DB Files</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/rwlocks1.jpg b/db/docs/gsg_txn/CXX/rwlocks1.jpg
new file mode 100644
index 000000000..0fc88fd31
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/rwlocks1.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/CXX/simplelock.jpg b/db/docs/gsg_txn/CXX/simplelock.jpg
new file mode 100644
index 000000000..8dca4ad82
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/simplelock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/CXX/txn_ccursor.html b/db/docs/gsg_txn/CXX/txn_ccursor.html
new file mode 100644
index 000000000..be89a3dc8
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/txn_ccursor.html
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transactional Cursors and Concurrent Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="isolation.html" title="Isolation" />
+ <link rel="next" href="readmodifywrite.html" title="Read/Modify/Write" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transactional Cursors and Concurrent Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="isolation.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="readmodifywrite.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txn_ccursor"></a>Transactional Cursors and Concurrent Applications</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When you use transactional cursors with a concurrent application, remember that
+ in the event of a deadlock you must make sure that you close your cursor before you abort and retry your
+ transaction.
+ </p>
+ <p>
+ Also, remember that when you are using the default isolation level,
+ every time your cursor reads a record it locks
+ that record until the encompassing transaction is resolved. This
+ means that walking your database with a transactional cursor
+ increases the chance of lock contention.
+ </p>
+ <p>
+ For this reason, if you must routinely walk your database with a
+ transactional cursor, consider using a reduced isolation level
+ such as read committed.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="cursordirtyreads"></a>Using Cursors with Uncommitted Data</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ As described in <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ above, it is possible to relax your transaction's isolation
+ level such that it can read data modified but not yet committed
+ by another transaction. You can configure this when you create
+ your transaction handle, and when you do so then all cursors opened
+ inside that transaction will automatically use uncommitted reads.
+ </p>
+ <p>
+ You can also do this when you create a cursor handle from within
+ a serializable transaction. When you do this, only those
+ cursors configured for uncommitted reads uses uncommitted reads.
+ </p>
+ <p>
+ Either way, you must first configure your database handle to support
+ uncommitted reads before you can configure your transactions or
+ your cursors to use them.
+ </p>
+ <p>
+ The following example shows how to configure an individual cursor handle
+ to read uncommitted data from within a serializable (full isolation) transaction.
+ For an example of
+ configuring a transaction to perform uncommitted reads in
+ general, see <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>.
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN; // Initialize transactions
+
+ u_int32_t db_flags = DB_CREATE | // Create the db if it does
+ // not exist
+ DB_AUTO_COMMIT | // Enable auto commit
+ DB_READ_UNCOMMITTED; // Enable uncommitted reads
+
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ Dbc *cursorp = NULL;
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ DbTxn *txn = NULL;
+ myEnv.txn_begin(NULL, &amp;txn, 0);
+ try {
+ // Get our cursor. Note that we pass the transaction
+ // handle here. Note also that we pass the
+ // DB_READ_UNCOMMITTED flag here so as to cause the
+ // cursor to perform uncommitted reads.
+ db.cursor(txn, &amp;cursorp, DB_READ_UNCOMMITTED);
+
+ // From here, you perform your cursor reads and writes
+ // as normal, committing and aborting the transactions as
+ // is necessary, and testing for deadlock exceptions as
+ // normal (omitted for brevity).
+
+ ... </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="isolation.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="readmodifywrite.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Isolation </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Read/Modify/Write</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/txnconcurrency.html b/db/docs/gsg_txn/CXX/txnconcurrency.html
new file mode 100644
index 000000000..570a0d0ee
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/txnconcurrency.html
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 4. Concurrency</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
+ <link rel="next" href="blocking_deadlocks.html" title="Locks, Blocks, and Deadlocks" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 4. Concurrency</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="maxtxns.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="blocking_deadlocks.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="txnconcurrency"></a>Chapter 4. Concurrency</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#locks">Locks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#blocks">Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="lockingsubsystem.html">The Locking Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="isolation.html">Isolation</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#degreesofisolation">Supported Degrees of Isolation</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="txn_ccursor.html">Transactional Cursors and Concurrent Applications</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txn_ccursor.html#cursordirtyreads">Using Cursors with Uncommitted Data</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="readmodifywrite.html">Read/Modify/Write</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnnowait.html">No Wait on Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+
+ DB offers a great deal of support for multi-threaded
+ <span>
+ and multi-process
+ </span>
+ applications even when transactions are not in use. Many of DB's
+ handles are
+ thread-safe<span>, or
+ can be made thread-safe by providing the appropriate flag at handle creation time,</span>
+ and DB provides a
+ flexible locking subsystem for managing databases in a concurrent
+ application. Further, DB provides a robust mechanism for
+ detecting and responding to deadlocks. All of these concepts are
+ explored in this chapter.
+ </p>
+ <p>
+ Before continuing, it is useful to define a few terms that will appear
+ throughout this chapter:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="emphasis"><em>Thread of control</em></span>
+ </p>
+ <p>
+ Refers to a thread that is performing work in your application.
+ Typically, in this book that thread will be performing DB
+ operations.
+ </p>
+ <p>
+ Note that this term can also be taken to mean a separate process
+ that is performing work &#8212; DB supports multi-process
+ operations on your databases.
+ </p>
+ <p>
+ Also, DB is agnostic with regard to the type or style of
+ threads in use in your application. So if you are using
+ multiple threads
+ (as opposed to multiple processes) to perform concurrent
+ database access, you are free to use whatever thread package is
+ best for your platform and application. That said, this manual
+ will use pthreads for its threading examples because those have
+ the best chance of being supported across a large range of
+ platforms.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Locking</em></span>
+ </p>
+ <p>
+ When a thread of control obtains
+ access to a shared resource, it is said to be
+ <span class="emphasis"><em>locking</em></span> that resource. Note that
+ DB supports both exclusive and non-exclusive locks. See
+ <a href="blocking_deadlocks.html#locks">Locks</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Free-threaded</em></span>
+ </p>
+ <p>
+ Data structures and objects are free-threaded if they can be
+ shared across threads of control without any explicit locking on
+ the part of the application. Some books, libraries, and
+ programming languages may use the term
+ <span class="emphasis"><em>thread-safe</em></span> for data structures or objects
+ that have this characteristic. The two terms mean the
+ same thing.
+ </p>
+ <p>
+ For a description of free-threaded DB objects, see
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Blocked</em></span>
+ </p>
+ <p>
+ When a thread cannot obtain a lock because some other
+ thread already holds a lock on that object, the lock
+ attempt is said to be <span class="emphasis"><em>blocked</em></span>. See
+ <a href="blocking_deadlocks.html#blocks">Blocks</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Deadlock</em></span>
+ </p>
+ <p>
+ Occurs when two or more threads of control attempt to access conflicting resource in such a way as none
+ of the threads can any longer may further progress.
+ </p>
+ <p>
+ For example, if Thread A is blocked waiting for a resource held by Thread
+ B, while at the same time Thread B is blocked waiting for a
+ resource held by Thread A, then neither thread can make any
+ forward progress. In this situation, Thread A and Thread B
+ are said to be <span class="emphasis"><em>deadlocked.</em></span>
+ </p>
+ <p>
+ For more information, see <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="concurrenthandles"></a>Which DB Handles are Free-Threaded</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following describes to what extent and under what conditions
+ individual handles are free-threaded.
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+ <tt class="classname">DbEnv</tt>
+
+ </p>
+ <p>
+ Free-threaded so long as
+ <span>
+ the <tt class="literal">DB_THREAD</tt> flag is provided to
+ the environment <tt class="methodname">open()</tt>
+ method.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="classname">Db</tt>
+
+ </p>
+ <p>
+ Free-threaded so long as
+ <span>
+ the <tt class="literal">DB_THREAD</tt> flag is provided to
+ the database <tt class="methodname">open()</tt>
+ method, or if the database is opened using a
+ free-threaded environment handle.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="classname">Dbc</tt>
+
+ </p>
+ <p>
+ Cursors are not free-threaded. However, they
+ can be used by multiple threads of control so
+ long as the application serializes access to the handle.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="classname">DbTxn</tt>
+
+
+ </p>
+ <p>
+ Access must be serialized by the application across threads of control.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="maxtxns.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="blocking_deadlocks.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Configuring the Transaction Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Locks, Blocks, and Deadlocks</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/txncursor.html b/db/docs/gsg_txn/CXX/txncursor.html
new file mode 100644
index 000000000..83bc93bda
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/txncursor.html
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transactional Cursors</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="nestedtxn.html" title="Nested Transactions" />
+ <link rel="next" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transactional Cursors</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txncursor"></a>Transactional Cursors</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can transaction-protect your cursor operations by
+ specifying a transaction handle at the time that you create
+ your cursor. Beyond that, you do not ever
+ provide a transaction handle directly to a cursor method.
+ </p>
+ <p>
+ Note that if you transaction-protect a cursor, then you must
+ make sure that the cursor is closed before you either commit or
+ abort the transaction. For example:
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ // Environment and database opens omitted
+ ...
+
+ DbTxn *txn = NULL;
+ Dbc *cursorp = NULL;
+
+ try {
+
+ Dbt key, data;
+ key.set_data(keystr);
+ key.set_size((strlen(keystr) + 1) * sizeof(char));
+ key.set_data(datastr);
+ key.set_size((strlen(datastr) + 1) * sizeof(char));
+
+ DbTxn *txn = NULL;
+ myEnv.txn_begin(NULL, &amp;txn, 0);
+ try {
+ // Get our cursor. Note that we pass the transaction handle here.
+ db.cursor(txn, &amp;cursorp, 0);
+
+ // Perform our operations. Note that we do not pass a transaction
+ // handle here.
+ char *replacementString = &quot;new string&quot;;
+ while (cursor-&gt;get(&amp;key, &amp;data, DB_NEXT) == 0) {
+ data.set_data(void *)replacementString);
+ data.set_size((strlen(replacementString) + 1) * sizeof(char));
+ cursor-&gt;put(&amp;key, &amp;data, DB_CURRENT);
+ }
+
+ // We're done. Commit the transaction.
+ cursor-&gt;close();
+ txn-&gt;commit(0);
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error in transaction: &quot;
+ &lt;&lt; e.what() &lt;&lt; std::endl;
+ cursor-&gt;close();
+ txn-&gt;abort();
+ }
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+
+ return (EXIT_SUCCESS);
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Nested Transactions </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Secondary Indices with Transaction Applications</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/txnexample_c.html b/db/docs/gsg_txn/CXX/txnexample_c.html
new file mode 100644
index 000000000..1e1c9419c
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/txnexample_c.html
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transaction Example</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="previous" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="next" href="inmem_txnexample_c.html" title="In-Memory Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transaction Example</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="wrapup.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 6. Summary and Examples</th>
+ <td width="20%" align="right"> <a accesskey="n" href="inmem_txnexample_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnexample_c"></a>Transaction Example</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following code provides a fully functional example of a
+ multi-threaded transactional DB application. For improved
+ portability across platforms, this examples uses pthreads to
+ provide threading support.
+ </p>
+ <p>
+ The example opens an environment and database and then creates 5
+ threads, each of which writes 500 records to the database. The keys
+ used for these writes are pre-determined strings, while the data is
+ a random value. This means that the actual data is arbitrary and
+ therefore uninteresting; we picked it only because it requires
+ minimum code to implement and therefore will stay out of the way of
+ the main points of this example.
+ </p>
+ <p>
+ Each thread writes 10 records under a single transaction
+ before committing and writing another 10 (this is repeated 50
+ times). At the end of each transaction, but before committing, each
+ thread calls a function that uses a cursor to read every record in
+ the database. We do this in order to make some points about
+ database reads in a transactional environment.
+ </p>
+ <p>
+ Of course, each writer thread performs deadlock detection as
+ described in this manual. In addition, normal recovery is performed
+ when the environment is opened.
+ </p>
+ <p>
+ We start with our normal <tt class="literal">include</tt> directives:
+ </p>
+ <pre class="programlisting">// File TxnGuide.cpp
+
+// We assume an ANSI-compatible compiler
+#include &lt;db_cxx.h&gt;
+#include &lt;pthread.h&gt;
+#include &lt;iostream&gt;
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
+#include &lt;unistd.h&gt;
+#endif </pre>
+ <p>
+ We also need a directive that we use to identify how many threads we
+ want our program to create:
+</p>
+ <pre class="programlisting">// Run 5 writers threads at a time.
+#define NUMWRITERS 5 </pre>
+ <p>
+ Next we declare a couple of global
+ variables (used by our threads), and we provide our forward
+ declarations for the functions used by this example.
+</p>
+ <pre class="programlisting">// Printing of pthread_t is implementation-specific, so we
+// create our own thread IDs for reporting purposes.
+int global_thread_num;
+pthread_mutex_t thread_num_lock;
+
+// Forward declarations
+int countRecords(Db *, DbTxn *);
+int openDb(Db **, const char *, const char *, DbEnv *, u_int32_t);
+int usage(void);
+void *writerThread(void *); </pre>
+ <p>
+ We now implement our usage function, which identifies our only command line
+ parameter:
+</p>
+ <pre class="programlisting">// Usage function
+int
+usage()
+{
+ std::cerr &lt;&lt; &quot; [-h &lt;database_home_directory&gt;]&quot; &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+} </pre>
+ <p>
+ With that, we have finished up our program's housekeeping, and we can
+ now move on to the main part of our program. As usual, we begin with
+ <tt class="function">main()</tt>. First we declare all our variables, and
+ then we initialize our DB handles.
+</p>
+ <pre class="programlisting">int
+main(int argc, char *argv[])
+{
+ // Initialize our handles
+ Db *dbp = NULL;
+ DbEnv *envp = NULL;
+
+ pthread_t writerThreads[NUMWRITERS];
+ int ch, i;
+ u_int32_t envFlags;
+ char *dbHomeDir;
+
+ // Application name
+ const char *progName = &quot;TxnGuide&quot;;
+
+ // Database file name
+ const char *fileName = &quot;mydb.db&quot;; </pre>
+ <p>
+ Now we need to parse our command line. In this case, all we want is to
+ know where our environment directory is. If the <tt class="literal">-h</tt>
+ option is not provided when this example is run, the current working
+ directory is used instead.
+</p>
+ <pre class="programlisting"> // Parse the command line arguments
+#ifdef _WIN32
+ dbHomeDir = &quot;.\\&quot;;
+#else
+ dbHomeDir = &quot;./&quot;;
+#endif
+ while ((ch = getopt(argc, argv, &quot;h:&quot;)) != EOF)
+ switch (ch) {
+ case 'h':
+ dbHomeDir = optarg;
+ break;
+ case '?':
+ default:
+ return (usage());
+ } </pre>
+ <p>
+ Next we create our database handle, and we define our environment open flags.
+ There are a few things to notice here:
+</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ We specify <tt class="literal">DB_RECOVER</tt>, which means that normal
+ recovery is run every time we start the application. This is
+ highly desirable and recommended for most
+ applications.
+ </p>
+ </li>
+ <li>
+ <p>
+ We also specify <tt class="literal">DB_THREAD</tt>, which means our
+ environment handle will be free-threaded. This is very
+ important because we will be sharing the environment handle
+ across threads.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <pre class="programlisting"> // Env open flags
+ envFlags =
+ DB_CREATE | // Create the environment if it does not exist
+ DB_RECOVER | // Run normal recovery.
+ DB_INIT_LOCK | // Initialize the locking subsystem
+ DB_INIT_LOG | // Initialize the logging subsystem
+ DB_INIT_TXN | // Initialize the transactional subsystem. This
+ // also turns on logging.
+ DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache)
+ DB_THREAD; // Cause the environment to be free-threaded
+
+ try {
+ // Create and open the environment
+ envp = new DbEnv(0); </pre>
+ <p>
+ Now we configure how we want deadlock detection performed. In our case, we will cause DB to perform deadlock
+ detection by walking its internal lock tables looking for a block every time a lock is requested. Further, in the
+ event of a deadlock, the thread that holds the youngest lock will receive the deadlock notification.
+ </p>
+ <pre class="programlisting"> // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction with
+ // the fewest number of write locks will receive the
+ // deadlock notification in the event of a deadlock.
+ envp-&gt;set_lk_detect(DB_LOCK_MINWRITE); </pre>
+ <p>
+ Now we open our environment.
+</p>
+ <pre class="programlisting"> // If we had utility threads (for running checkpoints or
+ // deadlock detection, for example) we would spawn those
+ // here. However, for a simple example such as this,
+ // that is not required.
+
+ envp-&gt;open(dbHomeDir, envFlags, 0); </pre>
+ <p>
+ Now we call the function that will open our database for us. This is
+ not very interesting, except that you will notice that we are
+ specifying <tt class="literal">DB_DUPSORT</tt>. This is required purely by
+ the data that we are writing to the database, and it is only necessary
+ if you run the application more than once without first deleting the environment.
+</p>
+ <p>
+The implementation of <tt class="function">open_db()</tt> is described
+ later in this section.
+</p>
+ <pre class="programlisting"> // Open the database
+ openDb(&amp;dbp, progName, fileName, envp, DB_DUPSORT); </pre>
+ <p>
+ Now we create our threads. In this example we are using pthreads
+ for our threading package. A description of threading (beyond how
+ it impacts DB usage) is beyond the scope of this manual.
+ However, the things that we are doing here should be familiar to
+ anyone who has prior experience with any threading package. We are
+ simply initializing a mutex, creating our threads, and then joining
+ our threads, which causes our program to wait until the joined
+ threads have completed before continuing operations in the main
+ thread.
+ </p>
+ <pre class="programlisting"> // Initialize a pthread mutex. Used to help provide thread ids.
+ (void)pthread_mutex_init(&amp;thread_num_lock, NULL);
+
+ // Start the writer threads.
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_create(&amp;writerThreads[i], NULL,
+ writerThread, (void *)dbp);
+
+ // Join the writers
+ for (i = 0; i &lt; NUMWRITERS; i++)
+ (void)pthread_join(writerThreads[i], NULL);
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database environment: &quot;
+ &lt;&lt; dbHomeDir &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ } </pre>
+ <p>
+ Finally, to wrap up <tt class="function">main()</tt>, we close out our
+ database and environment handle, as is normal for any DB
+ application. Notice that this is where our <tt class="literal">err</tt>
+ label is placed in our application. If any database operation prior
+ to this point in the program returns an error status, the program
+ simply jumps to this point and closes our handles if necessary
+ before exiting the application completely.
+ </p>
+ <pre class="programlisting"> try {
+ // Close our database handle if it was opened.
+ if (dbp != NULL)
+ dbp-&gt;close(0);
+
+ // Close our environment if it was opened.
+ if (envp != NULL)
+ envp-&gt;close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database and environment.&quot;
+ &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ // Final status message and return.
+
+ std::cout &lt;&lt; &quot;I'm all done.&quot; &lt;&lt; std::endl;
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ Now that we have completed <tt class="function">main()</tt>, we need to
+ implement the function that our writer threads will actually run. This
+ is where the bulk of our transactional code resides.
+</p>
+ <p>
+ We start as usual with variable declarations and initialization.
+</p>
+ <pre class="programlisting">// A function that performs a series of writes to a
+// Berkeley DB database. The information written
+// to the database is largely nonsensical, but the
+// mechanisms of transactional commit/abort and
+// deadlock detection are illustrated here.
+void *
+writerThread(void *args)
+{
+ int j, thread_num;
+ int max_retries = 20; // Max retry on a deadlock
+ char *key_strings[] = {&quot;key 1&quot;, &quot;key 2&quot;, &quot;key 3&quot;, &quot;key 4&quot;,
+ &quot;key 5&quot;, &quot;key 6&quot;, &quot;key 7&quot;, &quot;key 8&quot;,
+ &quot;key 9&quot;, &quot;key 10&quot;};
+
+ Db *dbp = (Db *)args;
+ DbEnv *envp = dbp-&gt;get_env(); </pre>
+ <p>
+ Now we want a thread number for reporting purposes. It is possible to
+ use the <tt class="literal">pthread_t</tt> value directly for this purpose,
+ but how that is done unfortunately differs depending
+ on the pthread implementation you are using. So instead we use a
+ mutex-protected global variable to obtain a simple integer for
+ our reporting purposes.
+</p>
+ <p>
+ Note that we are also use this thread id for initializing a random number generator, which we do here.
+ We use this random number generator for data generation.
+</p>
+ <pre class="programlisting"> // Get the thread number
+ (void)pthread_mutex_lock(&amp;thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)pthread_mutex_unlock(&amp;thread_num_lock);
+
+ // Initialize the random number generator
+ srand((u_int)pthread_self()); </pre>
+ <p>
+ Now we begin the loop that we use to write data to the database.
+
+ <span>
+ Notice that in this top loop, we begin a new transaction.
+ </span>
+
+ We will actually use 50 transactions per writer
+ thread, although we will only ever have one active transaction per
+ thread at a time. Within each transaction, we will perform 10
+ database writes.
+ </p>
+ <p>
+ By combining multiple writes together under a single transaction,
+ we increase the likelihood that a deadlock will occur. Normally,
+ you want to reduce the potential for a deadlock and in this case
+ the way to do that is to perform a single write per transaction.
+ To avoid deadlocks, we could be using auto commit to
+ write to our database for this workload.
+ </p>
+ <p>
+ However, we want to show deadlock handling and by performing
+ multiple writes per transaction we can actually observe deadlocks
+ occurring. We also want to underscore the idea that you can
+ combing multiple database operations together in a single atomic
+ unit of work in order to improve the efficiency of your writes.
+ </p>
+ <pre class="programlisting"> // Perform 50 transactions
+ for (int i=0; i&lt;50; i++) {
+ DbTxn *txn;
+ bool retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) {
+ // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Begin our transaction. We group multiple writes in
+ // this thread under a single transaction so as to
+ // (1) show that you can atomically perform multiple
+ // writes at a time, and (2) to increase the chances
+ // of a deadlock occurring so that we can observe our
+ // deadlock detection at work.
+
+ // Normally we would want to avoid the potential for
+ // deadlocks, so for this workload the correct thing
+ // would be to perform our puts with auto commit. But
+ // that would excessively simplify our example, so we
+ // do the &quot;wrong&quot; thing here instead.
+ txn = NULL;
+ envp-&gt;txn_begin(NULL, &amp;txn, 0); </pre>
+ <p>
+ Now we begin the inner loop that we use to actually
+ perform the write.
+ </p>
+ <pre class="programlisting"> // Perform the database write for this transaction.
+ for (j = 0; j &lt; 10; j++) {
+ Dbt key, value;
+ key.set_data(key_strings[j]);
+ key.set_size((strlen(key_strings[j]) + 1) *
+ sizeof(char));
+
+ int payload = rand() + i;
+ value.set_data(&amp;payload);
+ value.set_size(sizeof(int));
+
+ // Perform the database put
+ dbp-&gt;put(txn, &amp;key, &amp;value, 0);
+ } </pre>
+ <p>
+ Having completed the inner database write loop, we could simply
+ commit the transaction and continue on to the next block of 10
+ writes. However, we want to first illustrate a few points about
+ transactional processing so instead we call our
+
+ <tt class="function">countRecords()</tt>
+
+ function before calling the transaction
+ commit.
+
+ <tt class="function">countRecords()</tt>
+ uses a cursor to read every
+ record in the database and return a count of the number of records
+ that it found.
+ </p>
+ <pre class="programlisting"> // countRecords runs a cursor over the entire database.
+ // We do this to illustrate issues of deadlocking
+ std::cout &lt;&lt; thread_num &lt;&lt; &quot; : Found &quot;
+ &lt;&lt; countRecords(dbp, NULL)
+ &lt;&lt; &quot; records in the database.&quot; &lt;&lt; std::endl;
+
+ std::cout &lt;&lt; thread_num &lt;&lt; &quot; : committing txn : &quot; &lt;&lt; i
+ &lt;&lt; std::endl;
+
+ // commit
+ try {
+ txn-&gt;commit(0);
+ retry = false;
+ txn = NULL;
+ } catch (DbException &amp;e) {
+ std::cout &lt;&lt; &quot;Error on txn commit: &quot;
+ &lt;&lt; e.what() &lt;&lt; std::endl;
+ } </pre>
+ <p>
+ Finally, we finish our try block. Notice how we examine the
+ exceptions to determine whether we need to
+ abort (or abort/retry in the case of a deadlock) our current
+ transaction.
+ </p>
+ <pre class="programlisting"> } catch (DbDeadlockException &amp;de) {
+ // First thing we MUST do is abort the transaction.
+ if (txn != NULL)
+ (void)txn-&gt;abort();
+
+ // Now we decide if we want to retry the operation.
+ // If we have retried less than max_retries,
+ // increment the retry count and goto retry.
+ if (retry_count &lt; max_retries) {
+ std::cout &lt;&lt; &quot;############### Writer &quot; &lt;&lt; thread_num
+ &lt;&lt; &quot;: Got DB_LOCK_DEADLOCK.\n&quot;
+ &lt;&lt; &quot;Retrying write operation.&quot;
+ &lt;&lt; std::endl;
+ retry_count++;
+ retry = true;
+ } else {
+ // Otherwise, just give up.
+ std::cerr &lt;&lt; &quot;Writer &quot; &lt;&lt; thread_num
+ &lt;&lt; &quot;: Got DeadLockException and out of &quot;
+ &lt;&lt; &quot;retries. Giving up.&quot; &lt;&lt; std::endl;
+ retry = false;
+ }
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;db put failed&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ if (txn != NULL)
+ txn-&gt;abort();
+ retry = false;
+ } catch (std::exception &amp;ee) {
+ std::cerr &lt;&lt; &quot;Unknown exception: &quot; &lt;&lt; ee.what() &lt;&lt; std::endl;
+ return (0);
+ }
+ }
+ }
+ return (0);
+} </pre>
+ <p>
+ <span>
+ We want to back up for a moment and take a look at the call to <tt class="function">countRecords()</tt>.
+ </span>
+ If you look at the
+
+ <tt class="function">countRecords()</tt>
+ function prototype at the beginning of this example, you will see that the
+ function's second parameter takes a transaction handle. However,
+ our usage of the function here does not pass a transaction handle
+ through to the function.
+ </p>
+ <p>
+
+ Because
+
+ <tt class="function">countRecords()</tt>
+ reads every record in the database, if used incorrectly the thread
+ will self-deadlock. The writer thread has just written 500 records
+ to the database, but because the transaction used for that write
+ has not yet been committed, each of those 500 records are still
+ locked by the thread's transaction. If we then simply run a
+ non-transactional cursor over the database from within the same
+ thread that has locked those 500 records, the cursor will
+ block when it tries to read one of those transactional
+ protected records. The thread immediately stops operation at that
+ point while the cursor waits for the read lock it has
+ requested. Because that read lock will never be released (the thread
+ can never make any forward progress), this represents a
+ self-deadlock for the the thread.
+ </p>
+ <p>
+ There are three ways to prevent this self-deadlock:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ We can move the call to
+
+ <tt class="function">countRecords()</tt>
+ to a point after the thread's transaction has committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ We can allow
+
+ <tt class="function">countRecords()</tt>
+ to operate under the same transaction as all of the writes
+ were performed (this is what the transaction parameter for
+ the function is for).
+ </p>
+ </li>
+ <li>
+ <p>
+ We can reduce our isolation guarantee for the application
+ by allowing uncommitted reads.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For this example, we choose to use option 3 (uncommitted reads) to avoid
+ the deadlock. This means that we have to open our database such
+ that it supports uncommitted reads, and we have to open our cursor handle
+ so that it knows to perform uncommitted reads.
+ </p>
+ <p>
+ Note that in <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>,
+ we simply perform the cursor operation using the same transaction
+ as is used for the thread's writes.
+ </p>
+ <p>
+ The following is the
+
+ <tt class="function">countRecords()</tt>
+ implementation. There is not anything particularly interesting
+ about this function other than specifying uncommitted reads when
+ we open the cursor handle, but we include the function here anyway
+ for the sake of completeness.
+ </p>
+ <pre class="programlisting">// This simply counts the number of records contained in the
+// database and returns the result.
+//
+// Note that this method exists only for illustrative purposes.
+// A more straight-forward way to count the number of records in
+// a database is to use the Database.getStats() method.
+int
+countRecords(Db *dbp, DbTxn *txn)
+{
+
+ Dbc *cursorp = NULL;
+ int count = 0;
+
+ try {
+ // Get the cursor
+ dbp-&gt;cursor(txn, &amp;cursorp, DB_READ_UNCOMMITTED);
+
+ Dbt key, value;
+ while (cursorp-&gt;get(&amp;key, &amp;value, DB_NEXT) == 0) {
+ count++;
+ }
+ } catch (DbDeadlockException &amp;de) {
+ std::cerr &lt;&lt; &quot;countRecords: got deadlock&quot; &lt;&lt; std::endl;
+ cursorp-&gt;close();
+ throw de;
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;countRecords error:&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ if (cursorp != NULL) {
+ try {
+ cursorp-&gt;close();
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;countRecords: cursor close failed:&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+ }
+
+ return (count);
+} </pre>
+ <p>
+ Finally, we provide the implementation of our
+
+ <tt class="function">openDb()</tt>
+ function. This function should hold
+ no surprises for you. Note, however, that we do specify uncommitted reads
+ when we open the database. If we did not do this, then our
+
+ <tt class="function">countRecords()</tt>
+ function would cause our
+ thread to self-deadlock because the cursor could not be opened to
+ support uncommitted reads (that flag on the cursor open would, in fact,
+ be silently ignored by DB).
+ </p>
+ <pre class="programlisting">// Open a Berkeley DB database
+int
+openDb(Db **dbpp, const char *progname, const char *fileName,
+ DbEnv *envp, u_int32_t extraFlags)
+{
+ int ret;
+ u_int32_t openFlags;
+
+ try {
+ Db *dbp = new Db(envp, 0);
+
+ // Point to the new'd Db
+ *dbpp = dbp;
+
+ if (extraFlags != 0)
+ ret = dbp-&gt;set_flags(extraFlags);
+
+ // Now open the database
+ openFlags = DB_CREATE | // Allow database creation
+ DB_READ_UNCOMMITTED | // Allow uncommitted reads
+ DB_AUTO_COMMIT; // Allow auto commit
+
+ dbp-&gt;open(NULL, // Txn pointer
+ fileName, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ openFlags, // Open flags
+ 0); // File mode. Using defaults
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; progname &lt;&lt; &quot;open_db: db open failed:&quot; &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ <p>
+ This completes our transactional example. If you would like to
+ experiment with this code, you can find the example in the following
+ location in your DB distribution:
+</p>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_cxx/txn_guide</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="wrapup.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="wrapup.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="inmem_txnexample_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 6. Summary and Examples </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> In-Memory Transaction Example</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/txnindices.html b/db/docs/gsg_txn/CXX/txnindices.html
new file mode 100644
index 000000000..e4e8502f7
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/txnindices.html
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Secondary Indices with Transaction Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="txncursor.html" title="Transactional Cursors" />
+ <link rel="next" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Secondary Indices with Transaction Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="maxtxns.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnindices"></a>Secondary Indices with Transaction Applications</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can use transactions with your secondary indices so long as you
+ <span>
+ open the secondary index so that it supports transactions (that is,
+ you wrap the database open in a transaction, or use auto commit,
+ in the same way as when you open a primary transactional database).
+ </span>
+
+
+ <span>
+ In addition, you must make sure that when you associate the
+ secondary index with the primary database, the association is
+ performed using a transaction. The easiest thing to do here is
+ to simply specify <tt class="literal">DB_AUTO_COMMIT</tt> when you
+ perform the association.
+ </span>
+ </p>
+ <p>
+ All other aspects of using secondary indices with transactions are
+ identical to using secondary indices without transactions. In
+ addition, transaction-protecting
+ <span>
+ cursors opened against secondary indices is performed in
+ exactly the same way as when you use transactional cursors
+ against a primary database.
+ </span>
+
+ See <a href="txncursor.html">Transactional Cursors</a> for details.
+ </p>
+ <p>
+ Note that when you use transactions to protect your database writes, your secondary indices are protected from
+ corruption because updates to the primary and the secondaries are performed in a single atomic transaction.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">#include &lt;db_cxx.h&gt;
+
+...
+
+// Environment and primary database open omitted
+...
+
+Db my_index(&amp;envp, 0); // Secondary
+
+// Open the secondary
+my_index.open(NULL, // Transaction pointer
+ &quot;my_secondary.db&quot;, // On-disk file that holds the database.
+ NULL, // Optional logical database name
+ DB_BTREE, // Database access method
+ DB_AUTO_COMMIT, // Open flags.
+ 0); // File mode (using defaults)
+
+// Now associate the primary and the secondary
+my_database.associate(NULL, // Txn id
+ &amp;my_index, // Associated secondary database
+ get_sales_rep, // Callback used for key extraction.
+ // This is described in the Getting
+ // Started guide.
+ DB_AUTO_COMMIT); // Flags </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="maxtxns.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transactional Cursors </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Configuring the Transaction Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/txnnowait.html b/db/docs/gsg_txn/CXX/txnnowait.html
new file mode 100644
index 000000000..c47f486fd
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/txnnowait.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>No Wait on Blocks</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="readmodifywrite.html" title="Read/Modify/Write" />
+ <link rel="next" href="reversesplit.html" title="Reverse BTree Splits" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">No Wait on Blocks</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="readmodifywrite.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="reversesplit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnnowait"></a>No Wait on Blocks</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Normally when a DB transaction is blocked on a lock request, it
+ must wait until the requested lock becomes available before its
+ thread-of-control can proceed. However, it is possible to configure a
+ transaction handle such that it will report a deadlock rather
+ than wait for the block to clear.
+ </p>
+ <p>
+ You do this on a transaction by transaction basis by specifying
+
+ <span>
+ <tt class="literal">DB_TXN_NOWAIT</tt>
+ to the
+
+ <tt class="methodname">DbEnv::txn_begin()</tt>
+
+ method.
+ </span>
+
+
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting"> DbTxn *txn = NULL;
+ try {
+ envp-&gt;txn_begin(NULL, &amp;txn, DB_TXN_NOWAIT);
+
+ ...
+ } catch (DbException &amp;de) {
+ // Deadlock detection and exception handling omitted
+ // for brevity
+ ...</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="readmodifywrite.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="reversesplit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Read/Modify/Write </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Reverse BTree Splits</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/usingtxns.html b/db/docs/gsg_txn/CXX/usingtxns.html
new file mode 100644
index 000000000..906664f44
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/usingtxns.html
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 3. Transaction Basics</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="envopen.html" title="Opening a Transactional Environment and&#10; Database&#10; &#10; " />
+ <link rel="next" href="abortresults.html" title="Aborting a Transaction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 3. Transaction Basics</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="envopen.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="usingtxns"></a>Chapter 3. Transaction Basics</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="usingtxns.html#commitresults">Committing a Transaction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="abortresults.html">Aborting a Transaction</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="autocommit.html">Auto Commit</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="nestedtxn.html">Nested Transactions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txncursor.html">Transactional Cursors</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnindices.html">Secondary Indices with Transaction Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="maxtxns.html">Configuring the Transaction Subsystem</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Once you have enabled transactions for your environment and your databases,
+ you can use them to protect your database operations. You do this by
+ acquiring a transaction handle and then using that handle for any
+ database operation that you want to participate in that transaction.
+ </p>
+ <p>
+ You obtain a transaction handle using the
+
+ <span><tt class="methodname">DbEnv::txn_begin()</tt> method.</span>
+
+
+
+ </p>
+ <p>
+ Once you have completed all of the operations that you want to include
+ in the transaction, you must commit the transaction using the
+
+ <span><tt class="methodname">DbTxn::commit()</tt> method.</span>
+
+
+
+
+ </p>
+ <p>
+ If, for any reason, you want to abandon the transaction, you abort
+ it using
+
+ <span><tt class="methodname">DbTxn::abort()</tt>.</span>
+
+
+
+
+
+ </p>
+ <p>
+ Any transaction handle that has been committed or aborted can no longer
+ be used by your application.
+ </p>
+ <p>
+ Finally, you must make sure that all transaction handles are either
+ committed or aborted before closing your databases and environment.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If you only want to transaction protect a single database write operation, you can use auto commit to
+ perform the transaction administration. When you use auto commit, you do not need an explicit transaction
+ handle. See <a href="autocommit.html">Auto Commit</a> for more information.
+ </p>
+ </div>
+ <p>
+ For example, the following example opens a transactional-enabled environment and
+ database, obtains a transaction handle, and then performs a write
+ operation under its protection. In the event of any failure in the
+ write operation, the transaction is aborted and the database is left in a
+ state as if no operations had ever been attempted in the first place.
+ </p>
+ <pre class="programlisting">#include &quot;db_cxx.h&quot;
+
+...
+
+int main(void)
+{
+ u_int32_t env_flags = DB_CREATE | // If the environment does not
+ // exist, create it.
+ DB_INIT_LOCK | // Initialize locking
+ DB_INIT_LOG | // Initialize logging
+ DB_INIT_MPOOL | // Initialize the cache
+ DB_INIT_TXN; // Initialize transactions
+
+ u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
+ Db *dbp = NULL;
+ const char *file_name = &quot;mydb.db&quot;;
+ const char *keystr =&quot;thekey&quot;;
+ const char *datastr = &quot;thedata&quot;;
+
+ std::string envHome(&quot;/export1/testEnv&quot;);
+ DbEnv myEnv(0);
+
+ try {
+
+ myEnv.open(envHome.c_str(), env_flags, 0);
+ dbp = new Db(&amp;myEnv, 0);
+
+ // Open the database. Note that we are using auto commit for
+ // the open, so the database is able to support transactions.
+ dbp-&gt;open(NULL, // Txn pointer
+ file_name, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ db_flags, // Open flags
+ 0); // File mode. Using defaults
+
+ Dbt key, data;
+ key.set_data(keystr);
+ key.set_size((strlen(keystr) + 1) * sizeof(char));
+ key.set_data(datastr);
+ key.set_size((strlen(datastr) + 1) * sizeof(char));
+
+ DbTxn *txn = NULL;
+ myEnv.txn_begin(NULL, &amp;txn, 0);
+ try {
+ db-&gt;put(txn, &amp;key, &amp;data, 0);
+ txn-&gt;commit(0);
+ } catch (DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error in transaction: &quot;
+ &lt;&lt; e.what() &lt;&lt; std::endl;
+ txn-&gt;abort();
+ }
+
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error opening database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ }
+
+ try {
+ if (dbp != NULL)
+ dbp-&gt;close(0);
+ myEnv.close(0);
+ } catch(DbException &amp;e) {
+ std::cerr &lt;&lt; &quot;Error closing database and environment: &quot;
+ &lt;&lt; file_name &lt;&lt; &quot;, &quot;
+ &lt;&lt; envHome &lt;&lt; std::endl;
+ std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+} </pre>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="commitresults"></a>Committing a Transaction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to fully understand what is happening when you commit
+ a transaction, you must first understand a little about what
+ DB is doing with
+
+ <span>
+ the logging subsystem.
+ </span>
+
+
+
+ Logging causes all database write operations to be identified in
+
+ <span>logs, and by default these
+ logs are backed by files on disk. These logs are used to restore your databases
+ </span>
+
+
+
+ in the event of a system or application failure, so by performing
+ logging, DB ensures the integrity of your data.
+ </p>
+ <p>
+ Moreover, DB performs <span class="emphasis"><em>write-ahead</em></span>
+ logging. This means that information is written to the logs
+ <span class="emphasis"><em>before</em></span> the actual database is changed.
+ This means that all write activity performed under the
+ protection of the transaction is noted in the log before
+ the transaction is committed. Be aware, however, that database
+ maintains logs in-memory. If you are backing your logs on
+ disk, the log information will eventually be written to the log
+ files, but while the transaction is on-going the log data may be
+ held only in memory.
+ </p>
+ <p>
+ When you commit a transaction, the following occurs:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ A commit record is written to the log. This
+ indicates that the modifications made by the
+ transaction are now permanent. By default, this write is performed synchronously to disk so the
+ commit record arrives in the log files before any other actions are taken.
+ </p>
+ </li>
+ <li>
+ <p>
+ Any log information held in memory is (by default)
+ synchronously written to disk. Note that this requirement can be
+ relaxed, depending on the type of commit you perform.
+ See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a> for
+ more information.
+ <span>Also, if you are
+ maintaining your logs entirely in-memory, then this
+ step will of course not be taken. To configure your
+ logging system for in-memory usage, see
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ All locks held by the transaction are released. This means
+ that read operations performed by other transactions or
+ threads of control can now see the modifications without
+ resorting to uncommitted reads (see <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a> for more information).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ To commit a transaction, you simply call
+
+ <span><tt class="methodname">DbTxn::commit()</tt>.</span>
+
+
+
+ </p>
+ <p>
+ Notice that committing a transaction does not necessarily cause data
+ modified in your memory cache to be written to the files
+ backing your databases on disk. Dirtied database pages are written
+ for a number of reasons, but a transactional
+ commit is not one of them. The following are the things that can cause a dirtied
+ database page to be written to the backing database file:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Checkpoints.
+ </p>
+ <p>
+ Checkpoints cause all dirtied pages currently existing
+ in the cache to be written to disk, and a checkpoint
+ record is then written to the logs. You can run checkpoints
+ explicitly. For more information on checkpoints,
+ see <a href="filemanagement.html#checkpoints">Checkpoints</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Cache is full.
+ </p>
+ <p>
+ If the in-memory cache fills up, then dirtied pages
+ might be written to disk in order to free up space for other
+ pages that your application needs to use. Note that if
+ dirtied pages are written to the database files, then
+ any log records that describe how those pages were
+ dirtied are written to disk before the database
+ pages are written.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Be aware that because your transaction commit caused database
+ modifications recorded in your logs to be forced to disk, your modifications
+ are by default &quot;persistent&quot; in that they can be recovered in the event of
+ an application or system failure. However, recovery time is
+ gated by how much data has been modified since the last
+ checkpoint, so for applications that perform a lot of writes,
+ you may want to run a checkpoint with some frequency.
+ </p>
+ <p>
+ Note that once you have committed a transaction, the transaction
+ handle that you used for the transaction is no longer valid. To
+ perform database activities under the control of a new
+ transaction, you must obtain a fresh transaction handle.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="nodurabletxn"></a>Non-Durable Transactions</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As previously noted, by default transaction commits are
+ durable because they cause the modifications performed
+ under the transaction to be synchronously recorded in
+ your on-disk log files. However, it is possible to use
+ non-durable transactions.
+ </p>
+ <p>
+ You may want non-durable transactions for performance
+ reasons. For example, you might be using transactions
+ simply for the isolation guarantee.
+
+ <span>
+ In this case, you might
+ not want a durability guarantee and so you may want to
+ prevent the disk I/O that normally accompanies a
+ transaction commit.
+ </span>
+
+ </p>
+ <p>
+ There are several ways to remove the durability guarantee
+ for your transactions:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Specify
+ <span>
+ <tt class="literal">DB_TXN_NOSYNC</tt> using the
+
+ <tt class="methodname">DbEnv::set_flags()</tt>
+ method.
+ </span>
+
+ This causes DB to not synchronously force any
+ <span>
+ log
+ </span>
+ data to disk upon transaction commit.
+
+ <span>
+ That is, the modifications are held entirely
+ in the in-memory cache and the logging
+ information is not forced to the filesystem for
+ long-term storage.
+ </span>
+
+ Note, however, that the
+ <span>
+ logging
+ </span>
+ data will eventually make it to the filesystem (assuming no
+ application or OS crashes) as a part of DB's
+ management of its logging buffers and/or cache.
+ </p>
+ <p>
+ This form of a commit provides a weak durability
+ guarantee because data loss can occur due to
+ an application
+ or OS crash.
+ </p>
+ <p>
+ This behavior is specified on a per-environment
+ handle basis. In order for your application to exhibit consistent
+ behavior, you need to specify this
+ <span>flag</span>
+
+ for all of the environment handles used in your application.
+ </p>
+ <p>
+ You can achieve this behavior on a transaction by transaction basis by
+ <span>
+ specifying <tt class="literal">DB_TXN_NOSYNC</tt> to the
+
+ <tt class="methodname">DbTxn::commit()</tt>
+
+ method.
+ </span>
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify
+ <span>
+ <tt class="literal">DB_TXN_WRITE_NOSYNC</tt> using the
+
+ <tt class="methodname">DbEnv::set_flags()</tt>
+ method.
+ </span>
+
+
+
+ This causes
+ <span>
+ logging
+ </span>
+ data to be synchronously
+ written to the OS's file system buffers upon
+ transaction commit. The data will eventually be
+ written to disk, but this occurs when the
+ operating system chooses to schedule the
+ activity; the transaction commit can complete
+ successfully before this disk I/O is performed
+ by the OS.
+ </p>
+ <p>
+ This form of commit protects you against application
+ crashes, but not against OS
+ crashes. This method offers less room for the possibility of data loss than does
+ <span><tt class="literal">DB_TXN_NOSYNC</tt>.</span>
+
+ </p>
+ <p>
+ This behavior is specified on a per-environment
+ handle basis. In order for your application to exhibit consistent
+ behavior, you need to specify this
+ <span>flag</span>
+
+ for all of the environment handles used in your application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Maintain your logs entirely in-memory. In this
+ case, your logs are never written to disk. The
+ result is that you lose all durability guarantees.
+ See
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="envopen.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Opening a Transactional Environment and
+ Database
+
+  </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Aborting a Transaction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/wrapup.html b/db/docs/gsg_txn/CXX/wrapup.html
new file mode 100644
index 000000000..32370c29f
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/wrapup.html
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 6. Summary and Examples</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="logconfig.html" title="Configuring the Logging Subsystem" />
+ <link rel="next" href="txnexample_c.html" title="Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 6. Summary and Examples</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="logconfig.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnexample_c.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="wrapup"></a>Chapter 6. Summary and Examples</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="wrapup.html#anatomy">Anatomy of a Transactional Application</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnexample_c.html">Transaction Example</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="inmem_txnexample_c.html">In-Memory Transaction Example</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Throughout this manual we have presented the concepts and
+ mechanisms that you need to provide transactional protection for
+ your application. In this chapter, we summarize these
+ mechanisms, and we provide a complete example of a multi-threaded
+ transactional DB application.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="anatomy"></a>Anatomy of a Transactional Application</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactional applications are characterized by performing the
+ following activities:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Create your environment handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your environment, specifying that the following
+ subsystems be used:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Transactional Subsystem (this also initializes the
+ logging subsystem).
+ </p>
+ </li>
+ <li>
+ <p>
+ Memory pool (the in-memory cache).
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ </li>
+ <li>
+ <p>
+ Locking subsystem (if your application is multi-process or multi-threaded).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ It is also highly recommended that you run normal recovery
+ upon first environment open. Normal recovery examines only those logs required
+ to ensure your database files are consistent relative to the information found in your
+ log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally spawn off any utility threads that you might need. Utility
+ threads can be used to run checkpoints periodically, or to
+ periodically run a deadlock detector if you do not want to
+ use DB's built-in deadlock detector.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open whatever database handles that you need.
+ </p>
+ </li>
+ <li>
+ <p>
+ Spawn off worker threads. How many of these you need and
+ how they split their DB workload is entirely up to your
+ application's requirements. However, any worker threads
+ that perform write operations against your databases will do
+ the following:
+ </p>
+ <div class="orderedlist">
+ <ol type="a">
+ <li>
+ <p>
+ Begin a transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Perform one or more read and write
+ operations against your databases.
+ </p>
+ </li>
+ <li>
+ <p>
+ Commit the transaction if all goes well.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort and retry the operation if a deadlock is
+ detected.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort the transaction for most other errors.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </li>
+ <li>
+ <p>
+ On application shutdown:
+ </p>
+ <div class="orderedlist">
+ <ol type="a">
+ <li>
+ <p>
+ Make sure there are no opened cursors.
+ </p>
+ </li>
+ <li>
+ <p>
+ Make sure there are no active transactions. Either
+ abort or commit all transactions before shutting
+ down.
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your databases
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Robust applications should monitor their database worker threads to
+ make sure they have not died unexpectedly. If a thread does
+ terminate abnormally, you must shutdown all your worker threads
+ and then run normal recovery (you will have to reopen your
+ environment to do this). This is the only way to clear any
+ resources (such as a lock or a mutex) that the abnormally
+ exiting worker thread might have been holding at the time that
+ it died.
+ </p>
+ <p>
+ Failure to perform this recovery can cause your
+ still-functioning worker threads to eventually block forever
+ while waiting for a lock that will never be released.
+ </p>
+ </div>
+ <p>
+ In addition to these activities, which are all entirely handled by
+ code within your application, there are some administrative
+ activities that you should perform:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Periodically checkpoint your application. Checkpoints will
+ reduce the time to run recovery in the event that one is
+ required. See <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Periodically back up your database and log files. This is
+ required in order to fully obtain the durability guarantee
+ made by DB's transaction ACID support. See
+ <a href="backuprestore.html">Backup Procedures</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ You may want to maintain a hot failover if 24x7 processing
+ with rapid restart in the face of a disk hit is important
+ to you. See <a href="hotfailover.html">Using Hot Failovers</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="logconfig.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnexample_c.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Configuring the Logging Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transaction Example</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/CXX/writeblock.jpg b/db/docs/gsg_txn/CXX/writeblock.jpg
new file mode 100644
index 000000000..4b382b82f
--- /dev/null
+++ b/db/docs/gsg_txn/CXX/writeblock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/JAVA/BerkeleyDB-Core-JAVA-Txn.pdf b/db/docs/gsg_txn/JAVA/BerkeleyDB-Core-JAVA-Txn.pdf
new file mode 100644
index 000000000..b6ade1d95
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/BerkeleyDB-Core-JAVA-Txn.pdf
Binary files differ
diff --git a/db/docs/gsg_txn/JAVA/abortresults.html b/db/docs/gsg_txn/JAVA/abortresults.html
new file mode 100644
index 000000000..6a1b87c22
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/abortresults.html
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Aborting a Transaction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="next" href="autocommit.html" title="Auto Commit" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Aborting a Transaction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="autocommit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="abortresults"></a>Aborting a Transaction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When you abort a transaction, all database modifications performed
+ under the protection of the transaction are discarded, and all
+ locks currently held by the transaction are released. In this event,
+ your data is simply left in the
+ state that it was in before the transaction began performing data
+ modifications.
+ </p>
+ <p>
+ Note that aborting a transaction may result in disk
+ <span>
+ I/O if your logs are backed by the filesystem.
+ </span>
+
+ It is possible that during the course of your transaction,
+ logging data and/or database
+ <span>pages</span>
+
+ were written to backing files on disk. For this reason, DB
+ notes that the abort occurred in its log files so that at a
+ minimum the database can be brought into a consistent state at
+ recovery time.
+ </p>
+ <p>
+ Also, once you have aborted a transaction, the transaction
+ handle that you used for the transaction is no longer valid. To
+ perform database activities under the control of a new
+ transaction, you must obtain a fresh transactional handle.
+ </p>
+ <p>
+ To abort a transaction, call
+
+
+ <span><tt class="methodname">Transaction.abort()</tt>.</span>
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="autocommit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 3. Transaction Basics </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Auto Commit</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/architectrecovery.html b/db/docs/gsg_txn/JAVA/architectrecovery.html
new file mode 100644
index 000000000..d5bc9a712
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/architectrecovery.html
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Designing Your Application for Recovery</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="recovery.html" title="Recovery Procedures" />
+ <link rel="next" href="hotfailover.html" title="Using Hot Failovers" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Designing Your Application for Recovery</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="recovery.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="hotfailover.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="architectrecovery"></a>Designing Your Application for Recovery</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When building your DB application, you should consider how you will run recovery. If you are building a
+ single threaded, single process application, it is fairly simple to run recovery when your application first
+ opens its environment. In this case, you need only decide if you want to run recovery every time you open
+ your application (recommended) or only some of the time, presumably triggered by a start up option
+ controlled by your application's user.
+ </p>
+ <p>
+ However, for multi-threaded and multi-process applications, you need to carefully consider how you will
+ design your application's startup code so as to run recovery only when it makes sense to do so.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithreadrecovery"></a>Recovery for Multi-Threaded Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If your application uses only one environment handle, then handling recovery for a multi-threaded
+ application is no more difficult than for a single threaded application. You simply open the environment
+ in the application's main thread, and then pass that handle to each of the threads that will be
+ performing DB operations. We illustrate this with our final example in this book (see
+
+ <a href="txnexample_java.html">Transaction Example</a>
+
+
+ for more information).
+ </p>
+ <p>
+ Alternatively, you can have each worker thread open its own environment handle. However, in this case,
+ designing for recovery is a bit more complicated.
+ </p>
+ <p>
+ Generally, when a thread performing database operations fails
+ or hangs, it is frequently best to simply
+ restart the application and run recovery upon application
+ startup as normal. However, not all applications can afford
+ to restart because a single thread has misbehaved.
+ </p>
+ <p>
+ If you are attempting to continue operations in the face of a misbehaving thread,
+ then at a minimum recovery must be run if a thread performing database operations fails or hangs.
+ </p>
+ <p>
+ Remember that recovery clears the environment of all
+ outstanding locks, including any that might be outstanding
+ from an aborted thread. If these locks are not cleared,
+ other threads performing database operations can back up
+ behind the locks obtained but never cleared by the failed
+ thread. The result will be an application that hangs
+ indefinitely.
+ </p>
+ <p>
+ To run recovery under these circumstances:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Suspend or shutdown all other threads performing
+ database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Discarding any open environment handles. Note that
+ attempting to gracefully close these handles may be
+ asking for trouble; the close can fail if the
+ environment is already in need of recovery. For
+ this reason, it is best and easiest to simply discard the handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open new handles, running recovery as you open
+ them.
+ See <a href="recovery.html#normalrecovery">Normal Recovery</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restart all your database threads.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ A traditional way to handle this activity is to spawn a watcher thread that is responsible for making
+ sure all is well with your threads, and performing the above actions if not.
+ </p>
+ <p>
+ However, in the case where each worker thread opens and maintains its own environment handle, recovery
+ is complicated for two reasons:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ For some applications and workloads, it might be
+ worthwhile to give your database threads the
+ ability to gracefully finalize any on-going
+ transactions. If this is the case, your
+ code must be capable of signaling each thread
+ to halt DB activities and close its
+ environment. If you simply run recovery against the
+ environment, your database threads will
+ detect this and fail in the midst of performing their
+ database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Your code must be capable of ensuring only one
+ thread runs recovery before allowing all other
+ threads to open their respective environment
+ handles. Recovery should be single threaded because when
+ recovery is run against an environment, it is
+ deleted and then recreated. This will cause all
+ other processes and threads to &quot;fail&quot; when they
+ attempt operations against the newly recovered
+ environment. If all threads run recovery
+ when they start up, then it is likely that some
+ threads will fail because the environment that they
+ are using has been recovered. This will cause the thread to have to re-execute its own recovery
+ path. At best, this is inefficient and at worst it could cause your application to fall into an
+ endless recovery pattern.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multiprocessrecovery"></a>Recovery in Multi-Process Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Frequently, DB applications use multiple processes to interact with the databases. For example, you may
+ have a long-running process, such as some kind of server, and then a series of administrative tools that
+ you use to inspect and administer the underlying databases. Or, in some web-based architectures, different
+ services are run as independent processes that are managed by the server.
+ </p>
+ <p>
+ In any case, recovery for a multi-process environment is complicated for two reasons:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ In the event that recovery must be run, you might
+ want to notify processes interacting with the environment
+ that recovery is about to occur and give them a
+ chance to gracefully terminate. Whether it is
+ worthwhile for you to do this is entirely dependent
+ upon the nature of your application. Some
+ long-running applications with multiple processes
+ performing meaningful work might want to do this.
+ Other applications with processes performing database
+ operations that are likely to be harmed by error conditions in other
+ processes will likely find it to be not worth the
+ effort. For this latter group, the chances of
+ performing a graceful shutdown may be low anyway.
+ </p>
+ </li>
+ <li>
+ <p>
+ Unlike single process scenarios, it can quickly become wasteful for every process interacting
+ with the databases to run recovery when it starts up. This is partly because recovery
+ <span class="emphasis"><em>does</em></span> take some amount of time to run, but mostly you want to
+ avoid a situation where your server must
+ reopen all its environment handles just because you fire up a command line database
+ administrative utility that always runs recovery.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ The following sections describe a mechanism that you can use to determine if and when you should run
+ recovery in a multi-process application.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="mp_recover_effects"></a>Effects of Multi-Process Recovery</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before continuing, it is worth noting that the following sections describe recovery processes than
+ can result in one process running recovery while other processes are currently actively performing
+ database operations.
+ </p>
+ <p>
+ When this happens, the current database operation will
+ abnormally fail, indicating a DB_RUNRECOVERY condition.
+ This means that your application should immediately abandon any database operations that it may have
+ on-going, discard any environment handles it has opened, and obtain and open new handles.
+ </p>
+ <p>
+ The net effect of this is that any writes performed by unresolved transactions will be lost.
+ For persistent applications (servers, for example), the services it provides will also be
+ unavailable for the amount of time that it takes to complete a recovery and for all participating
+ processes to reopen their environment handles.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="db_register"></a>Process Registration</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ One way to handle multi-process recovery is for every process to &quot;register&quot; its environment. In
+ doing so, the process gains the ability to see if any other applications are using the
+ environment and, if so, whether they have suffered an abnormal termination. If an abnormal
+ termination is detected, the process runs recovery; otherwise, it does not.
+ </p>
+ <p>
+ Note that using process registration also ensures that
+ recovery is serialized across applications. That is,
+ only one process at a time has a chance to run
+ recovery. Generally this means that the first process
+ to start up will run recovery, and all other processes
+ will silently not run recovery because it is not
+ needed.
+ </p>
+ <p>
+ To cause your application to register its environment, you specify
+
+
+ <span>
+ <tt class="literal">true</tt> to the <tt class="methodname">EnvironmentConfig.setRegister()</tt>
+ method when you open your environment. Note that you must also specify
+ <tt class="literal">true</tt> to either <tt class="methodname">EnvironmentConfig.setRunRecovery()</tt>
+ or <tt class="methodname">EnvironmentConfig.setRunFatalRecovery()</tt>.
+ </span>
+ If during the open, DB determines that recovery must be run, this indicates the type of
+ recovery that is run. If you do not specify either type of recovery, then no recovery is run if
+ the registration process identifies a need for it. In this case, the environment open simply
+ fails by
+
+ <span>throwing <tt class="classname">RunRecoveryException</tt>.</span>
+ </p>
+ <p>
+ Be aware that there are some limitations/requirements if you want your various processes to
+ coordinate recovery using this registration process:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ There can be only one environment handle per
+ environment per process. In the case of multi-threaded
+ processes, the environment handle must be shared across threads.
+ </p>
+ </li>
+ <li>
+ <p>
+ All processes sharing the environment must use registration. If registration is
+ not uniformly used across all participating processes, then you can see inconsistent results
+ in terms of your application's ability to recognize that recovery must be run.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="recovery.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="hotfailover.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Recovery Procedures </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Using Hot Failovers</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/autocommit.html b/db/docs/gsg_txn/JAVA/autocommit.html
new file mode 100644
index 000000000..22d75ac0f
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/autocommit.html
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Auto Commit</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="abortresults.html" title="Aborting a Transaction" />
+ <link rel="next" href="nestedtxn.html" title="Nested Transactions" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Auto Commit</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="autocommit"></a>Auto Commit</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ While transactions are frequently used to provide atomicity to
+ multiple database operations, it is sometimes necessary to perform
+ a single database operation under the control of a transaction.
+ Rather than force you to obtain a transaction, perform the single
+ write operation, and then either commit or abort the transaction,
+ you can automatically group this sequence of events using
+ <span class="emphasis"><em>auto commit</em></span>.
+ </p>
+ <p>
+ To use auto commit:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Open your environment and your databases so that they support
+ transactions. See <a href="enabletxn.html">Enabling Transactions</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not provide a transactional handle to the method that is
+ performing the database write operation.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Note that auto commit is not available for cursors. You must always
+ open your cursor using a transaction if you want the cursor's
+ operations to be transactional protected. See
+ <a href="txncursor.html">Transactional Cursors</a> for details on using
+ transactional cursors.
+ </p>
+ <p>
+ For example, the following uses auto commit to perform the database write operation:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);
+ String keyString = &quot;thekey&quot;;
+ String dataString = &quot;thedata&quot;;
+ DatabaseEntry key =
+ new DatabaseEntry(keyString.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data =
+ new DatabaseEntry(dataString.getBytes(&quot;UTF-8&quot;));
+
+ // Perform the write. Because the database was opened to
+ // support transactions, this write is performed using auto commit.
+ myDatabase.put(null, key, data);
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Aborting a Transaction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Nested Transactions</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/backuprestore.html b/db/docs/gsg_txn/JAVA/backuprestore.html
new file mode 100644
index 000000000..efc75c030
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/backuprestore.html
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Backup Procedures</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="next" href="recovery.html" title="Recovery Procedures" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Backup Procedures</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="filemanagement.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="backuprestore"></a>Backup Procedures</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ <span class="emphasis"><em>Durability</em></span> is an important part of your
+ transactional guarantees. It means that once a transaction has been
+ successfully committed, your application will always see the results of that
+ transaction.
+ </p>
+ <p>
+ Of course, no software algorithm can guarantee durability in the face of physical data loss. Hard drives
+ can fail, and if you have not copied your data to locations other than your primary disk drives,
+ then you will lose data when those drives fail. Therefore, in order to truly obtain a durability
+ guarantee, you need to ensure that any data stored on disk is backed up to secondary or alternative storage,
+ such as secondary disk drives, or offline tapes.
+ </p>
+ <p>
+ There are three different types of backups that you can
+ perform with DB databases and log files. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Offline backups
+ </p>
+ <p>
+ This type of backup is perhaps the easiest to perform as it
+ involves simply copying database and log files to an
+ offline storage area. It also gives you a snapshot of the
+ database at a fixed, known point in time. However, you
+ cannot perform this type of a backup while you are performing
+ writes to the database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Hot backups
+ </p>
+ <p>
+ This type of backup gives you a snapshot of your database.
+ Since your application can be writing to the database at the time that the
+ snapshot is being taken, you do not necessarily know what
+ the exact state of the database is for that given snapshot.
+ </p>
+ </li>
+ <li>
+ <p>
+ Incremental backups
+ </p>
+ <p>
+ This type of backup refreshes a previously performed backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Once you have performed a backup, you can
+ perform <span class="emphasis"><em>catastrophic recovery</em></span> to restore
+ your databases from the backup. See
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ for more information.
+ </p>
+ <p>
+ Note that you can also maintain a hot failover. See
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ for more information.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="copyutilities"></a>About Unix Copy Utilities</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ If you are copying database files you must copy databases atomically,
+ in multiples 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 because 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>
+ On some platforms (most notably, some releases of Solaris), the copy utility (<tt class="literal">cp</tt>) was
+ implemented using the <tt class="function">mmap()</tt> system call rather than the
+ <tt class="function">read()</tt> system call. Because <tt class="function">mmap()</tt> did not make the same
+ guarantee of read atomicity as did <tt class="function">read()</tt>, the <tt class="literal">cp</tt> utility
+ could create corrupted copies of the databases.
+ </p>
+ <p>
+ Also, some platforms have implementations of the <tt class="literal">tar</tt> utility that performs 10KB block
+ reads by default. Even when an output block size is specified, the utility will still not read the
+ underlying databases in multiples of the specified block size. Again, the result can be a corrupted backup.
+ </p>
+ <p>
+ To fix these problems, use the <tt class="literal">dd</tt> utility instead of <tt class="literal">cp</tt> or
+ <tt class="literal">tar</tt>. When you use <tt class="literal">dd</tt>, make sure you specify a block size that is
+ equal to, or an even multiple of, your database page size. Finally, if you plan to use a system
+ utility to copy database files, you may want to use a system call trace utility (for example,
+ <tt class="literal">ktrace</tt> or <tt class="literal">truss</tt>) to make sure you are not using a I/O size that is
+ smaller than your database page size. You can also use these utilities to make sure the system utility is
+ not using a system call other than <tt class="function">read()</tt>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="standardbackup"></a>Offline Backups</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To create an offline backup:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Commit or abort all on-going transactions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Pause all database writes.
+ </p>
+ </li>
+ <li>
+ <p>
+ Force a checkpoint. See
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy all your database files to the backup location.
+ <span>
+ Note that you can simply copy all of the database
+ files, or you can determine which database files
+ have been written during the lifetime of the current
+ logs. To do this, use either the
+
+ <span>
+ <tt class="methodname">Environment.getArchiveDatabases()</tt>,
+ method
+ </span>
+
+ or use the <span><b class="command">db_archive</b></span>
+ command with the <tt class="literal">-s</tt> option.
+ </span>
+ </p>
+ <p>
+ However, be aware that backing up just the modified databases only works if you have all of your
+ log files. If you have been removing log files for any reason then using
+
+ <span>
+ <tt class="methodname">getArchiveDatabases()</tt>,
+ </span>
+
+ can result in an
+ unrecoverable backup because you might not be notified of a database file that was modified.
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy the <span class="emphasis"><em>last</em></span> log file to your backup location.
+ Your log files are named
+ <tt class="literal">log.<span class="emphasis"><em>xxxxxxxxxx</em></span></tt>,
+ where <span class="emphasis"><em>xxxxxxxxxx</em></span> is a
+ sequential number. The last log file is the file
+ with the highest number.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="hotbackup"></a>Hot Backup</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To create a hot backup, you do not have to stop database
+ operations. Transactions may be on-going and you can be writing
+ to your database at the time of the backup. However, this means
+ that you do not know exactly what the state of your database is
+ at the time of the backup.
+ </p>
+ <p>
+ You can use the <span><b class="command">db_hotbackup</b></span> command line utility to create a hot backup for you. This
+ utility will (optionally) run a checkpoint and the copy all necessary files to a target directory.
+ </p>
+ <p>
+ Alternatively, you can manually create a hot backup as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Copy all your database files to the backup location.
+ <span>
+ Note that you can simply copy all of the database
+ files, or you can determine which database files
+ have been written during the lifetime of the current
+ logs. To do this, use either the
+
+ <span>
+ <tt class="methodname">Environment.getArchiveDatabases()</tt>,
+ </span>
+
+ or use the <span><b class="command">db_archive</b></span>
+ command with the <tt class="literal">-s</tt> option.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Copy all logs to your backup location.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ It is important to copy your database files <span class="emphasis"><em>and
+ then</em></span> your logs. In this way,
+ you can complete or roll back any database operations that were only partially completed
+ when you copied the databases.
+ </p>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="incrementalbackups"></a>Incremental Backups</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Once you have created a full backup (that is, either a
+ offline or hot backup), you can create incremental backups.
+ To do this, simply copy all of your currently existing log
+ files to your backup location.
+ </p>
+ <p>
+ Incremental backups do not require you to run a checkpoint
+ or to cease database write operations.
+ </p>
+ <p>
+ When you are working with incremental backups, remember
+ that the greater the number of log files contained in
+ your backup, the longer recovery will take.
+ You should run full backups
+ on some interval, and then do incremental backups on a shorter interval.
+ How frequently you need to run a full backup
+ is determined by the rate at which your databases change and
+ how sensitive your application is to lengthy recoveries
+ (should one be required).
+ </p>
+ <p>
+ You can also shorten recovery time by running recovery against the backup as you take each incremental
+ backup. Running recovery as you go means that there will be less work for DB to do if you should
+ ever need to restore your environment from the backup.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="filemanagement.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 5. Managing DB Files </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recovery Procedures</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/blocking_deadlocks.html b/db/docs/gsg_txn/JAVA/blocking_deadlocks.html
new file mode 100644
index 000000000..4677860bd
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/blocking_deadlocks.html
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Locks, Blocks, and Deadlocks</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="next" href="lockingsubsystem.html" title="The Locking Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Locks, Blocks, and Deadlocks</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnconcurrency.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="lockingsubsystem.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="blocking_deadlocks"></a>Locks, Blocks, and Deadlocks</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is important to understand how locking works in a
+ concurrent application before continuing with a description of
+ the concurrency mechanisms DB makes available to you.
+ Blocking and deadlocking have important performance implications
+ for your application. Consequently, this section provides a
+ fundamental description of these concepts, and how they affect
+ DB operations.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="locks"></a>Locks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When one thread of control wants to obtain access to an
+ object, it requests a <span class="emphasis"><em>lock</em></span> for that
+ object. This lock is what allows DB to provide your
+ application with its transactional isolation guarantees by
+ ensuring that:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ no other thread of control can read that object (in
+ the case of an exclusive lock), and
+ </p>
+ </li>
+ <li>
+ <p>
+ no other thread of control can modify that object
+ (in the case of an exclusive or non-exclusive lock).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="lockresources"></a>Lock Resources</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When locking occurs, there are conceptually three resources
+ in use:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ The locker.
+ </p>
+ <p>
+ This is the thing that holds the lock. In a
+ transactional application, the locker is a
+ transaction handle.
+ <span>
+ For non-transactional operations, the locker is a cursor or a
+
+
+ <span>Database</span>
+
+ handle.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ The lock.
+ </p>
+ <p>
+ This is the actual data structure that locks
+ the object. In DB, a locked
+ object structure in the lock manager
+ is representative of the object that
+ is locked.
+ </p>
+ </li>
+ <li>
+ <p>
+ The locked object.
+ </p>
+ <p>
+ The thing that your application
+ actually wants to lock.
+ In a DB
+ application, the locked object is usually a
+ <span>
+ database page, which in turn contains
+ multiple database entries (key and data).
+ <span>
+ However, for Queue databases,
+ individual database records are locked.
+ </span>
+
+ </span>
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ You can configure how many total lockers, locks,
+ and locked objects your
+ application is allowed to support. See
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ for details.
+ </p>
+ <p>
+ The following figure shows a transaction handle,
+ <tt class="literal">Txn A</tt>, that is holding a lock on
+ database
+ <span>page</span>
+
+ <tt class="literal">002</tt>. In this graphic, <tt class="literal">Txn
+ A</tt> is the locker, and the locked object is
+ <span>page</span>
+
+ <tt class="literal">002</tt>. Only a single lock is in use
+ in this operation.
+ </p>
+ <div class="mediaobject">
+ <img src="simplelock.jpg" />
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="locktypes"></a>Types of Locks</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB applications support both exclusive and
+ non-exclusive locks. <span class="emphasis"><em>Exclusive
+ locks</em></span> are granted when a
+ locker wants to write to an object. For this reason,
+ exclusive locks are also sometimes called
+ <span class="emphasis"><em>write locks</em></span>.
+ </p>
+ <p>
+ An exclusive lock prevents any other locker from
+ obtaining any sort of a lock on the object. This
+ provides isolation by ensuring that no other locker can
+ observe or modify an exclusively locked object until the locker is done
+ writing to that object.
+ </p>
+ <p>
+ <span class="emphasis"><em>Non-exclusive locks</em></span> are granted
+ for read-only access. For this reason, non-exclusive
+ locks are also sometimes called <span class="emphasis"><em>read
+ locks</em></span>. Since multiple lockers can
+ simultaneously hold read locks on the same
+ object, read locks are also
+ sometimes called <span class="emphasis"><em>shared locks</em></span>.
+ </p>
+ <p>
+ A non-exclusive lock prevents any other locker from
+ modifying the locked object while the locker is still
+ reading the object. This is how transactional cursors are able to
+ achieve repeatable reads; by default, the
+ cursor's transaction holds
+ a read lock on any object that the cursor has examined until
+ such a time as the transaction is committed
+ or aborted.
+ <span>
+ You can avoid these read locks by using
+ snapshot isolation. See <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ for details.
+ </span>
+ </p>
+ <p>
+ In the following figure, <tt class="literal">Txn A</tt> and
+ <tt class="literal">Txn B</tt> are both holding read locks on
+ <span>page</span>
+
+ <tt class="literal">002</tt>, while <tt class="literal">Txn C</tt>
+ is holding a write lock on
+ <span>page</span>
+
+ <tt class="literal">003</tt>:
+ </p>
+ <div class="mediaobject">
+ <img src="rwlocks1.jpg" />
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="locklifetime"></a>Lock Lifetime</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A locker holds its locks until such a time as it does
+ not need the lock any more. What this means is:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ A transaction holds any locks that it obtains
+ until the transaction is committed or aborted.
+ </p>
+ </li>
+ <li>
+ <p>
+ All non-transaction operations hold locks
+ until such a time as the operation is completed.
+ For cursor operations, the lock is held until the cursor is moved to a new position or
+ closed.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="blocks"></a>Blocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Simply put, a thread of control is blocked when it attempts
+ to obtain a lock, but that attempt is denied because some
+ other thread of control holds a conflicting lock.
+ Once blocked, the thread of control is temporarily unable
+ to make any forward progress until the requested lock is
+ obtained or the operation requesting the lock is
+ abandoned.
+ </p>
+ <p>
+ Be aware that when we talk about blocking, strictly
+ speaking the thread is not what is attempting to obtain the
+ lock. Rather, some object within the thread (such as a
+ cursor) is attempting to obtain the
+ lock. However, once a locker attempts to
+ obtain a lock, the entire thread of control must pause until the lock
+ request is in some way resolved.
+ </p>
+ <p>
+ For example, if <tt class="literal">Txn A</tt> holds a write lock (an exclusive
+ lock) on
+ <span>object</span>
+
+ 002, then if <tt class="literal">Txn B</tt> tries to obtain a read <span class="emphasis"><em>or</em></span> write lock on
+ that
+ <span>object,</span>
+
+ the thread of control in which <tt class="literal">Txn
+ B</tt> is running
+ is blocked:
+ </p>
+ <div class="mediaobject">
+ <img src="writeblock.jpg" />
+ </div>
+ <p>
+ However, if <tt class="literal">Txn A</tt> only holds a read
+ lock (a shared lock) on
+ <span>object</span>
+
+ <tt class="literal">002</tt>, then only those handles that attempt to obtain a
+ write lock on that
+ <span>object</span>
+
+ will block.
+ </p>
+ <div class="mediaobject">
+ <img src="readblock.jpg" />
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ The previous description describes DB's default
+ behavior when it cannot obtain a lock. It is
+ possible to configure DB transactions so that
+ they will not block. Instead, if a lock is
+ unavailable, the application is immediately notified of a
+ deadlock situation. See <a href="txnnowait.html">No Wait on Blocks</a>
+ for more information.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="blockperformance"></a>Blocking and Application Performance</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Multi-threaded
+ <span>
+ and multi-process
+ </span>
+ applications typically perform better than simple
+ single-threaded applications because the
+ application can perform one part of its workload
+ (updating
+ <span>a database record, </span>
+
+ for example) while it is waiting for some other
+ lengthy operation to complete (performing disk or
+ network I/O, for example). This performance
+ improvement is particularly noticeable if you use
+ hardware that offers multiple CPUs, because the threads
+ <span>
+ and processes
+ </span>
+ can run simultaneously.
+ </p>
+ <p>
+ That said, concurrent applications can see reduced
+ workload throughput if their threads of control are
+ seeing a large amount of lock contention. That is,
+ if threads are blocking on lock requests, then that
+ represents a performance penalty for your
+ application.
+ </p>
+ <p>
+ Consider once again the previous diagram of a blocked write lock request.
+ In that diagram, <tt class="literal">Txn C</tt> cannot
+ obtain its requested write lock because
+ <tt class="literal">Txn A</tt> and <tt class="literal">Txn
+ B</tt> are both already holding read locks on
+ the requested
+ <span>object.</span>
+
+ In this case, the thread in which
+ <tt class="literal">Txn C</tt> is running will pause until
+ such a time as <tt class="literal">Txn C</tt> either
+ obtains its write lock, or the operation
+ that is requesting the lock is abandoned.
+ The fact that <tt class="literal">Txn
+ C</tt>'s thread has temporarily halted all
+ forward progress represents a performance penalty
+ for your application.
+ </p>
+ <p>
+ Moreover, any read locks that are requested while
+ <tt class="literal">Txn C</tt> is waiting for its write
+ lock will also block until such a time as
+ <tt class="literal">Txn C</tt> has obtained and
+ subsequently released its write lock.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="blockavoidance"></a>Avoiding Blocks</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Reducing lock contention is an important part of
+ performance tuning your concurrent DB
+ application. Applications that have multiple
+ threads of control obtaining exclusive (write)
+ locks are prone to contention issues. Moreover, as
+ you increase the numbers of lockers and as you
+ increase the time that a lock is held, you increase
+ the chances of your application seeing lock contention.
+ </p>
+ <p>
+ As you are designing your application, try to do
+ the following in order to reduce lock contention:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Reduce the length of time your application
+ holds locks.
+ </p>
+ <p>
+ Shorter lived transactions will result in
+ shorter lock lifetimes, which will in turn
+ help to reduce lock contention.
+ </p>
+ <p>
+ In addition, by default transactional cursors hold read
+ locks until such a time as the transaction is completed.
+ For this reason, try to
+ minimize the time you keep
+ transactional cursors
+ opened, or reduce your isolation
+ levels &#8211; see below.
+ </p>
+ </li>
+ <li>
+ <p>
+ If possible, access heavily accessed (read
+ or write) items toward the end of the
+ transaction. This reduces the amount of
+ time that a heavily used
+ <span>
+ page
+ </span>
+
+ is locked by the transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reduce your application's isolation
+ guarantees.
+ </p>
+ <p>
+ By reducing your isolation guarantees, you
+ reduce the situations in which a lock can
+ block another lock. Try using uncommitted reads
+ for your read operations in order to
+ prevent a read lock being blocked by a
+ write lock.
+ </p>
+ <p>
+ In addition, for cursors you can use degree
+ 2 (read committed) isolation, which causes
+ the cursor to release its read locks as
+ soon as it is done reading the record (as
+ opposed to holding its read locks until the
+ transaction ends).
+ </p>
+ <p>
+ Be aware that reducing your
+ isolation guarantees can have
+ adverse consequences for your
+ application. Before deciding
+ to reduce your isolation, take
+ care to examine your
+ application's isolation
+ requirements.
+ For information on isolation
+ levels, see
+ <a href="isolation.html">Isolation</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Consider your data access patterns.
+ </p>
+ <p>
+ Depending on the nature of your application,
+ this may be something that you can not
+ do anything about. However, if it is
+ possible to create your threads such that
+ they operate only on non-overlapping
+ portions of your database, then you can
+ reduce lock contention because your
+ threads will rarely (if ever) block on one another's
+ locks.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ It is possible to configure DB's transactions
+ so that they never wait on blocked lock requests.
+ Instead, if they are blocked on a lock request,
+ they will notify the application of a deadlock (see
+ the next section).
+ </p>
+ <p>
+ You configure this behavior on a transaction by
+ transaction basis. See <a href="txnnowait.html">No Wait on Blocks</a> for more information.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="deadlocks"></a>Deadlocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A deadlock occurs when two or more threads of control are
+ blocked, each waiting on a resource held by the other
+ thread. When this happens, there is no
+ possibility of the threads ever making forward progress
+ unless some outside agent takes action to break the
+ deadlock.
+ </p>
+ <p>
+ For example, if
+ <tt class="literal">Txn A</tt> is
+ blocked by <tt class="literal">Txn B</tt> at the same time
+ <tt class="literal">Txn B</tt> is blocked by <tt class="literal">Txn
+ A</tt> then the threads of control containing
+ <tt class="literal">Txn A</tt> and <tt class="literal">Txn B</tt> are
+ deadlocked; neither thread can make
+ any forward progress because neither thread will ever release the lock
+ that is blocking the other thread.
+ </p>
+ <div class="mediaobject">
+ <img src="deadlock.jpg" />
+ </div>
+ <p>
+ When two threads of control deadlock, the only
+ solution is to have a mechanism external to the two threads
+ capable of recognizing the deadlock and notifying at least
+ one thread that it is in a deadlock situation.
+ Once notified, a thread of
+ control must abandon the attempted operation in order to
+ resolve the deadlock.
+
+ <span>
+ DB's locking subsystem offers a deadlock notification
+ mechanism. See
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ for more information.
+ </span>
+
+
+ </p>
+ <p>
+ Note that when one locker in a thread of control is blocked
+ waiting on a lock held by another locker in that same
+ thread of the control, the thread is said to be
+ <span class="emphasis"><em>self-deadlocked</em></span>.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="deadlockavoidance"></a>Deadlock Avoidance</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The things that you do to avoid lock contention also
+ help to reduce deadlocks (see <a href="blocking_deadlocks.html#blockavoidance">Avoiding Blocks</a>).
+
+ <span>
+ Beyond that, you can also do the following in order to
+ avoid deadlocks:
+ </span>
+
+
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure all threads access data in the same
+ order as all other threads. So long as threads
+ lock database pages
+ in the same basic order, there is no
+ possibility of a deadlock (threads can still
+ block, however).
+ </p>
+ <p>
+ Be aware that if you are using secondary databases (indices), it is not possible to obtain
+ locks in a consistent order because you cannot predict the order in which locks are obtained
+ in secondary databases. If you are writing a concurrent application and you are using
+ secondary databases, you must be prepared to handle deadlocks.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are using BTrees in which you are
+ constantly adding and then deleting data, turn
+ Btree reverse split off. See
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Declare a read/modify/write lock for those
+ situations where you are reading a record in
+ preparation of modifying and then writing the
+ record. Doing this causes DB to give your
+ read operation a write lock. This means that no
+ other thread of control can share a read lock
+ (which might cause contention), but it also
+ means that the writer thread will not have to
+ wait to obtain a write lock when it is ready to
+ write the modified data back to the database.
+ </p>
+ <p>
+ For information on declaring
+ read/modify/write locks, see
+ <a href="readmodifywrite.html">Read/Modify/Write</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnconcurrency.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="lockingsubsystem.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 4. Concurrency </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> The Locking Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/deadlock.jpg b/db/docs/gsg_txn/JAVA/deadlock.jpg
new file mode 100644
index 000000000..0995a84d8
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/deadlock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/JAVA/enabletxn.html b/db/docs/gsg_txn/JAVA/enabletxn.html
new file mode 100644
index 000000000..77ed3f571
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/enabletxn.html
@@ -0,0 +1,875 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 2. Enabling Transactions</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="perftune-intro.html" title="Performance Tuning" />
+ <link rel="next" href="envopen.html" title="Opening a Transactional Environment and&#10; Database&#10; &#10; " />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 2. Enabling Transactions</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="perftune-intro.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="envopen.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="enabletxn"></a>Chapter 2. Enabling Transactions</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="enabletxn.html#environments">Environments</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#filenaming">File Naming</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#errorsupport">Error Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#sharedmemory">Shared Memory Regions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#security">Security Considerations</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="envopen.html">Opening a Transactional Environment and
+ Database
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ In order to use transactions with your application, you must turn them
+ on. To do this you must:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Use an
+ environment (see <a href="enabletxn.html#environments">Environments</a> for details).
+ </p>
+ </li>
+ <li>
+ <p>
+ Turn on transactions for your environment.
+
+ <span>
+ You do this by using the
+ <tt class="methodname">EnvironmentConfig.setTransactional()</tt>
+ method.
+ </span>
+
+
+
+ <span>
+ Note that initializing the transactional subsystem implies that
+ the logging subsystem is also initialized. Also, note that
+ if you do not initialize transactions when you first create
+ your environment, then you cannot use transactions for that
+ environment after that. This is because DB
+ allocates certain structures needed for transactional
+ locking that are not available if the environment is
+ created without transactional support.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the in-memory cache by
+
+
+ <span>
+ passing <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setInitializeCache()</tt>
+ method.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Initialize the locking subsystem. This is what provides locking for concurrent applications. It also is used
+ to perform deadlock detection. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ <p>
+ You initialize the locking subsystem by
+
+
+ <span>
+ passing <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setInitializeLocking()</tt>
+ method.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction-enable your databases. You do this by
+ <span>
+ using the
+ <tt class="methodname">DatabaseConfig.setTransactional()</tt>
+ method, and then opening the database from within a transaction.
+ </span>
+
+
+
+
+
+ <span>
+ Note that the common practice is for auto commit to be used to
+ transaction-protect the database open. To use auto-commit, you
+ must still enable transactions as described here, but you do
+ not have to explicitly use a transaction when you open your
+ database. An example of this is given in the next section.
+ </span>
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="environments"></a>Environments</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ For simple DB applications, environments are optional. However, in
+ order to transaction protect your database operations, you must use an
+ environment.
+ </p>
+ <p>
+ An <span class="emphasis"><em>environment</em></span>, represents an
+ encapsulation of one or more databases and any associated log and
+ region files. They are used to support multi-threaded
+ and multi-process applications by allowing different threads of
+ control to share the in-memory cache, the locking tables, the
+ logging subsystem, and the file namespace. By sharing these things,
+ your concurrent application is more efficient than if each thread
+ of control had to manage these resources on its own.
+ </p>
+ <p>
+ By default all DB databases are backed by files on disk. In
+ addition to these files, transactional DB applications create
+ logs that are also by default stored on disk (they can optionally
+ be backed using shared memory). Finally, transactional
+ DB applications also create and use shared-memory regions that
+ are also typically backed by the filesystem. But like databases and
+ logs, the regions can be maintained strictly in-memory if your
+ application requires it. For an example of an application that
+ manages all environment files in-memory, see
+
+ <span><a href="inmem_txnexample_java.html">In-Memory Transaction Example</a>.</span>
+
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="filenaming"></a>File Naming</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to operate, your DB application must be able to
+ locate its database files, log files, and region files. If these
+ are stored in the filesystem, then you must tell DB where
+ they are located (a number of mechanisms exist that allow you to
+ identify the location of these files &#8211; see below). Otherwise,
+ by default they are located in the current working directory.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="envhome"></a>Specifying the Environment Home Directory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The environment home directory is used to determine where
+ DB files are located. Its location
+ is identified using one of the following mechanisms, in the
+ following order of priority:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ If no information is given as to where to put the
+ environment home, then the current working
+ directory is used.
+ </p>
+ </li>
+ <li>
+ <p>
+ If a home directory is specified on the
+
+
+ <tt class="methodname">Environment()</tt>
+
+ <span>constructor,</span>
+ then that location is always used for the environment
+ home.
+ </p>
+ </li>
+ <li>
+ <p>
+ If a home directory is not supplied to
+
+
+ <span><tt class="methodname">Environment()</tt>, </span>
+ then the directory identified by the <tt class="literal">DB_HOME</tt> environment variable
+ is used <span class="emphasis"><em>if</em></span> you specify
+
+
+ <span>
+ <tt class="literal">true</tt> to either the
+ <tt class="methodname">EnvironmentConfig.setUseEnvironment()</tt>
+ or
+ <tt class="methodname">EnvironmentConfig.setUseEnvironmentRoot()</tt>
+ method. Both methods allow you to identify the
+ path to the environment's home directory
+ using <tt class="literal">DB_HOME</tt>. However,
+ <tt class="methodname">EnvironmentConfig.setUseEnvironmentRoot()</tt>
+ is honored only if the process is run with root or administrative privileges.
+ </span>
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="filelocation"></a>Specifying File Locations</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, all DB files are created relative to the environment
+ home directory. For example, suppose your environment home is in
+ <tt class="literal">/export/myAppHome</tt>. Also suppose you name your database
+ <span><tt class="literal">data/myDatabase.db</tt>.</span>
+
+ Then in this case, the database is placed in:
+ <span><tt class="literal">/export/myAppHome/data/myDatabase.db</tt>.</span>
+
+ </p>
+ <p>
+ That said, DB always defers to absolute pathnames.
+ This means that if you provide an absolute filename when you
+ name your database, then that file is <span class="emphasis"><em>not</em></span>
+ placed relative to the environment home directory. Instead, it
+ is placed in the exact location that you specified for the
+ filename.
+ </p>
+ <p>
+ On UNIX systems, an absolute pathname is a name that begins with a
+ forward slash ('/'). On Windows systems, an absolute pathname is a
+ name that begins with one of the following:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ A backslash ('\').
+ </p>
+ </li>
+ <li>
+ <p>
+ Any alphabetic letter, followed by a colon (':'), followed
+ by a backslash ('\').
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Try not to use absolute path names for your
+ environment's files. Under certain recovery scenarios, absolute path names can
+ render your environment unrecoverable. This occurs if you are attempting to recover
+ you environment on a system that does not support the absolute path name that you used.
+ </p>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="splittingdata"></a>Identifying Specific File Locations</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As described in the previous sections, DB will place all its
+ files in or relative to the environment home directory.
+ You can also cause a
+ specific database file to be placed in a particular location by
+ using an absolute path name for its name. In this
+ situation, the environment's home directory is not
+ considered when naming the file.
+ </p>
+ <p>
+ It is frequently desirable to place database, log, and region files on separate
+ disk drives. By spreading I/O across multiple drives, you
+ can increase parallelism and improve throughput.
+ Additionally, by placing log files and database files on
+ separate drives, you improve your application's
+ reliability by providing your application with a greater
+ chance of surviving a disk failure.
+ </p>
+ <p>
+ You can cause DB's files to be placed in specific
+ locations using the following mechanisms:
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>File Type</th>
+ <th>To Override</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>database files</td>
+ <td>
+ <p>
+ You can cause database files to be created
+ in a directory other than the
+ environment home by using the
+
+
+ <tt class="methodname">EnvironmentConfig.addDataDir()</tt>
+ method.
+ The directory identified
+ here must exist. If a relative path is
+ provided, then the directory location is
+ resolved relative to the environment's home
+ directory.
+ </p>
+ <p>
+ This method modifies the directory
+ used for database files created and managed by
+ a single environment handle; it does not
+ configure the entire environment.
+
+ </p>
+ <p>
+ You can also set a default data location that is used by
+ the entire environment by using the
+ <tt class="literal">set_data_dir</tt> parameter
+ in the environment's <tt class="literal">DB_CONFIG</tt> file.
+ Note that the <tt class="literal">set_data_dir</tt>
+ parameter overrides any value set by the
+
+
+ <tt class="methodname">EnvironmentConfig.addDataDir()</tt>
+ method.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>Log files</td>
+ <td>
+ <p>
+ You can cause log files to be created
+ in a directory other than the environment home
+ directory by using the
+
+
+ <tt class="methodname">EnvironmentConfig.LogDirectory()</tt>
+ method. The directory identified
+ here must exist. If a relative path is
+ provided, then the directory location is
+ resolved relative to the environment's home
+ directory.
+ </p>
+ <p>
+ This method modifies the directory
+ used for database files created and managed by
+ a single environment handle; it does not
+ configure the entire environment.
+
+ </p>
+ <p>
+ You can also set a default log file location that is used by
+ the entire environment by using the
+ <tt class="literal">set_lg_dir</tt> parameter
+ in the environment's <tt class="literal">DB_CONFIG</tt> file.
+ Note that the <tt class="literal">set_lg_dir</tt>
+ parameter overrides any value set by the
+
+
+ <tt class="methodname">EnvironmentConfig.LogDirectory()</tt>
+ method.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>Region files</td>
+ <td>
+ If backed by the filesystem, region
+ files are always placed in the environment home
+ directory.
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p>
+ Note that the <tt class="literal">DB_CONFIG</tt> must reside in the
+ environment home directory. Parameters are specified in it one
+ parameter to a line. Each parameter is followed by a space,
+ which is followed by the parameter value. For example:
+ </p>
+ <pre class="programlisting"> set_data_dir /export1/db/env_data_files </pre>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="errorsupport"></a>Error Support</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To simplify error handling and to aid in application debugging, environments offer several useful
+ methods.
+
+ <span>Note that many of these
+ methods are identical to the error handling methods available for the
+
+
+ <span>DatabaseConfig</span>
+
+ <span>class.</span>
+
+ </span>
+
+ They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+ <tt class="methodname">EnvironmentConfig.setErrorStream()</tt>
+ </p>
+ <p>
+ Sets the
+
+ <span>Java <tt class="classname">OutputStream</tt></span>
+ to be used for displaying error messages issued by the DB library.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="methodname">EnvironmentConfig.setErrorHandler()</tt>
+ </p>
+ <p>
+ Defines the message handler that is called when an error message is
+ issued by DB. The error prefix and message are passed to
+ this callback. It is up to the application to display this
+ information correctly.
+ </p>
+ <p>
+ Note that the message handler must be an implementation of the
+ <tt class="classname">com.sleepycat.db.ErrorHandler</tt>
+ interface.
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <tt class="methodname">EnvironmentConfig.setErrorPrefix()</tt>
+ </p>
+ <p>
+ Sets the prefix used to for any error messages issued by the
+ DB library.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sharedmemory"></a>Shared Memory Regions</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The subsystems that you enable for an environment (in our case,
+ transaction, logging, locking, and the memory pool)
+ are described by one or more regions. The regions contain all of the
+ state information that needs to be shared among threads and/or
+ processes using the environment.
+ </p>
+ <p>
+ Regions may be backed by the file system, by heap memory, or by
+ system shared memory.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ When DB dynamically obtains memory, it uses memory outside of the JVM. Normally the amount of memory
+ that DB obtains is trivial, a few bytes here and there, so you might not notice it. However, if
+ heap or system memory is used to back your region files, then this can represent a significant amount of
+ memory being used by DB above and beyond the memory required by the JCM process. As a result, the
+ JVM process may appear to be using more memory than you told the process it could use.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="filebackedregions"></a>Regions Backed by Files</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default, shared memory regions are created as files in the environment's
+ home directory (<span class="emphasis"><em>not</em></span> the environment's data
+ directory). If it is available, the POSIX <tt class="literal">mmap</tt>
+ interface is used to map these files into your application's
+ address space. If <tt class="literal">mmap</tt>
+ is not available, then the UNIX <tt class="literal">shmget</tt> interfaces
+ are used instead (again, if they are available).
+ </p>
+ <p>
+ In this default case, the region files are named
+ <tt class="literal">__db.###</tt>
+ (for example, <tt class="literal">__db.001</tt>, <tt class="literal">__db.002</tt>,
+ and so on).
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="heapbackedregions"></a>Regions Backed by Heap Memory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If heap memory is used to back your shared memory regions,
+ the environment may only be
+ accessed by a single process, although that process may be
+ multi-threaded. In this case, the regions are managed only in
+ memory, and they are not written to the filesystem. You
+ indicate that heap memory is to be used for the region files by
+ specifying
+
+
+ <span>
+ <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setPrivate()</tt>
+ method.
+ </span>
+
+ </p>
+ <p>
+ (For an example of an entirely in-memory transactional
+ application, see
+
+ <span>
+ <a href="inmem_txnexample_java.html">In-Memory Transaction Example</a>.)
+ </span>
+
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="systembackedregions"></a>Regions Backed by System Memory</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Finally, you can cause system memory to be used for your
+ regions instead of memory-mapped files. You do this by providing
+
+
+ <span>
+ <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setSystemMemory()</tt>
+ method.
+ </span>
+ </p>
+ <p>
+ When region files are backed by system memory, DB creates a
+ single file in the environment's home directory. This file
+ contains information necessary to identify the system shared
+ memory in use by the environment. By creating this file, DB
+ enables multiple processes to share the environment.
+ </p>
+ <p>
+ The system memory that is used is architecture-dependent. For
+ example, on systems supporting X/Open-style shared memory
+ interfaces, such as UNIX systems, the <tt class="literal">shmget(2)</tt>
+ and related System V IPC interfaces are used.
+
+ <span>
+
+ 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
+ environments, so that the number of segments created does not
+ grow without bounds. See the
+
+
+
+ <tt class="methodname">EnvironmentConfig.setSegmentId()</tt>
+ method for more information.
+ </span>
+ </p>
+ <p>
+ On Windows platforms, the use of system memory for the region files
+ 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 from files, which may cause problems when an environment
+ is accessed by multiple processes running as different users. See
+ <a href="" target="_top">Windows notes</a>
+ or more information.
+ </p>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="security"></a>Security Considerations</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When using environments, there are some security considerations to
+ keep in mind:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Database environment permissions
+ </p>
+ <p>
+ The directory used for the environment
+ should have its permissions set to ensure that files in the
+ environment are not accessible to users without appropriate
+ permissions. Applications that add to the user's permissions
+ (for example, UNIX <tt class="literal">setuid</tt> or
+ <tt class="literal">setgid</tt> applications), must be
+ carefully checked to not permit illegal use of those
+ permissions such as general file access in the environment
+ directory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Environment variables
+ </p>
+ <p>
+ Setting
+
+
+ <span>
+ <tt class="literal">true</tt> for <tt class="methodname">EnvironmentConfig.setUseEnvironment()</tt>
+ or
+ <tt class="methodname">EnvironmentConfig.setUseEnvironmentRoot()</tt>
+ </span>
+
+ so that environment variables can be used during file naming
+ can be dangerous. Setting those flags in DB
+ applications with additional permissions (for example, UNIX
+ <tt class="literal">setuid</tt> or <tt class="literal">setgid</tt>
+ applications) could potentially allow users
+ to read and write databases to which they would not normally
+ have access.
+ </p>
+ <p>
+ For example, suppose you write a DB application
+ that runs <tt class="literal">setuid</tt>. This means that
+ when the application runs, it does so under a
+ userid different than that of the application's caller.
+ This is especially problematic if the application is
+ granting stronger privileges to a user than the user
+ might ordinarily have.
+ </p>
+ <p>
+ Now, if
+
+ <span>
+ <tt class="literal">true</tt> is specified
+ for <tt class="methodname">EnvironmentConfig.setUseEnvironment()</tt>
+ or
+ <tt class="methodname">EnvironmentConfig.setUseEnvironmentRoot()</tt>,
+ </span>
+
+
+ then the environment that the application is
+ using is modifiable using the
+ <tt class="literal">DB_HOME</tt> environment variable. In
+ this scenario, if the uid used by the application has
+ sufficiently broad privileges, then the application's caller
+ can read and/or write databases owned by another user
+ simply by setting his
+ <tt class="literal">DB_HOME</tt> environment variable to the
+ environment used by that other user.
+ </p>
+ <p>
+ Note that this scenario need not be malicious; the
+ wrong environment could be used by the application
+ simply by inadvertently specifying the wrong path to
+ <tt class="literal">DB_HOME</tt>.
+ </p>
+ <p>
+ As always, you should use <tt class="literal">setuid</tt>
+ sparingly, if at all. But if you do use
+ <tt class="literal">setuid</tt>, then you should refrain from
+ specifying
+
+ <span>
+ <tt class="literal">true</tt> for <tt class="methodname">EnvironmentConfig.setUseEnvironment()</tt>
+ or
+ <tt class="methodname">EnvironmentConfig.setUseEnvironmentRoot()</tt>
+ </span>
+ for the environment open. And, of course, if you must
+ use <tt class="literal">setuid</tt>, then make sure you use
+ the weakest uid possible &#8211; preferably one that is
+ used only by the application itself.
+ </p>
+ </li>
+ <li>
+ <p>
+ File permissions
+ </p>
+ <p>
+ By default, DB always creates database and log files readable and
+ writable by the owner and the group (that is,
+ <tt class="literal">S_IRUSR</tt>,
+ <tt class="literal">S_IWUSR</tt>, <tt class="literal">S_IRGRP</tt> and
+ <tt class="literal">S_IWGRP</tt>; 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 DB.
+ </p>
+ </li>
+ <li>
+ <p>
+ Temporary backing files
+ </p>
+ <p>
+ 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
+ <tt class="literal">TMPDIR</tt> may be used to specify the
+ location of that temporary file. Although temporary backing
+ files are created readable and writable by the owner only
+ (<tt class="literal">S_IRUSR</tt> and <tt class="literal">S_IWUSR</tt>,
+ 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
+
+
+ <tt class="methodname">EnvironmentConfig.setTemporaryDirectory()</tt>
+ method to specify a temporary directory with known permissions.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="perftune-intro.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="envopen.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Performance Tuning </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Opening a Transactional Environment and
+ Database
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/envopen.html b/db/docs/gsg_txn/JAVA/envopen.html
new file mode 100644
index 000000000..1e207c1f7
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/envopen.html
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Opening a Transactional Environment and
+ Database
+
+ </title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ <link rel="previous" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ <link rel="next" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Opening a Transactional Environment and
+ Database
+
+ </th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="enabletxn.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 2. Enabling Transactions</th>
+ <td width="20%" align="right"> <a accesskey="n" href="usingtxns.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="envopen"></a>Opening a Transactional Environment and
+ <span>Database</span>
+
+ </h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ To enable transactions for your environment, you must initialize the
+ transactional subsystem. Note that doing this also initializes the
+ logging subsystem. In addition, you must initialize the memory pool
+ (in-memory cache). Frequently, but not always, you will also
+ initialize the locking subsystem. For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+...
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ <p>
+ You then can use the <tt class="classname">Environment</tt> handle to open
+ your database(s) using <tt class="methodname">Environment.openDatabase()</tt>.
+ Note that when you do this, you must set
+ <tt class="methodname">DatabaseConfig.setTransactional()</tt>
+ to <tt class="literal">true</tt>. Note that in effect this causes the
+ database open to be transactional protected because it results in
+ auto commit being used for the open (if a transaction is not explicitly
+ used to protect the open).
+ For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+<b class="userinput"><tt>import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.DatabaseConfig;</tt></b>
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+...
+
+<b class="userinput"><tt>Database myDatabase = null;</tt></b>
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ <b class="userinput"><tt>// Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);</tt></b>
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Never close a database that has active transactions. Make sure
+ all transactions are resolved (either committed or aborted)
+ before closing the database.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="enabletxn.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="enabletxn.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="usingtxns.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 2. Enabling Transactions </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 3. Transaction Basics</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/filemanagement.html b/db/docs/gsg_txn/JAVA/filemanagement.html
new file mode 100644
index 000000000..ab748bffa
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/filemanagement.html
@@ -0,0 +1,484 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 5. Managing DB Files</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="reversesplit.html" title="Reverse BTree Splits" />
+ <link rel="next" href="backuprestore.html" title="Backup Procedures" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 5. Managing DB Files</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="reversesplit.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="backuprestore.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="filemanagement"></a>Chapter 5. Managing DB Files</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="backuprestore.html">Backup Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#copyutilities">About Unix Copy Utilities</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#standardbackup">Offline Backups</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#hotbackup">Hot Backup</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#incrementalbackups">Incremental Backups</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery.html">Recovery Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#normalrecovery">Normal Recovery</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="architectrecovery.html">Designing Your Application for Recovery</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multithreadrecovery">Recovery for Multi-Threaded Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multiprocessrecovery">Recovery in Multi-Process Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logfileremoval.html">Removing Log Files</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logconfig.html">Configuring the Logging Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logfilesize">Setting the Log File Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ DB is capable of storing several types of files on disk:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Data files, which contain the actual data in your database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Log files, which contain information required to recover your
+ database in the event of a system or application failure.
+ </p>
+ </li>
+ <li>
+ <p>
+ Region files, which contain information necessary for the
+ overall operation of your application.
+ </p>
+ </li>
+ <li>
+ <p>
+ Temporary files, which are created only under certain special circumstances. These files never need to
+ be backed up or otherwise managed and so they are not a consideration for the topics described in this
+ chapter. See <a href="enabletxn.html#security">Security Considerations</a>
+ for more information on temporary files.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these, you must manage your data and log files by ensuring that they
+ are backed up. You should also pay attention to the amount of disk space
+ your log files are consuming, and periodically remove any unneeded
+ files. Finally, you can optionally tune your logging subsystem to best
+ suit your application's needs and requirements.
+ These topics are discussed in this chapter.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="checkpoints"></a>Checkpoints</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before we can discuss DB file management, we need to
+ describe checkpoints. When databases are modified (that is, a
+ transaction is committed), the modifications are recorded in
+ DB's logs, but they are <span class="emphasis"><em>not</em></span>
+ necessarily reflected in the actual database files on disk.
+ </p>
+ <p>
+ This means that as time goes on, increasingly
+ more data is contained in your log files that is not
+ contained in your data files. As a result, you must keep more
+ log files around than you might actually need. Also, any
+ recovery run from your log files will take increasingly longer
+ amounts of time, because there is more data in the log files
+ that must be reflected back into the data files during the
+ recovery process.
+ </p>
+ <p>
+ You can reduce these problems by periodically
+ running a checkpoint against your environment. The checkpoint:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Flushes dirty pages from the in-memory cache. This means that data modifications found in your
+ in-memory cache are written to the database files on disk. Note that a checkpoint also causes data
+ dirtied by an uncommitted transaction to also be written to your database files on disk. In this latter
+ case, DB's normal recovery is used to remove any such modifications that were subsequently
+ abandoned by your application using a transaction abort.
+ </p>
+ <p>
+ Normal recovery is describe in <a href="recovery.html">Recovery Procedures</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Writes a checkpoint record.
+ </p>
+ </li>
+ <li>
+ <p>
+ Flushes the log. This causes all log data that has not yet been written to disk to be written.
+ </p>
+ </li>
+ <li>
+ <p>
+ Writes a list of open databases.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ There are several ways to run a checkpoint. One way is to use
+ the <span><b class="command">db_checkpoint</b></span> command line utility. (Note, however, that this command line utility
+ cannot be used if your environment was opened using
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setPrivate()</tt>.)
+ </span>
+ </p>
+ <p>
+ You can also run a thread that periodically checkpoints your
+ environment for you by calling the
+
+
+ <tt class="methodname">Environment.checkpoint()</tt>
+ method.
+ </p>
+ <p>
+ Note that you can prevent a checkpoint from occurring unless more
+ than a specified amount of log data has been written since the
+ last checkpoint. You can also prevent the checkpoint from
+ running unless more than a specified amount of time has
+ occurred since the last checkpoint. These conditions are
+ particularly interesting if you have multiple threads
+ <span>or processes</span>
+ running checkpoints.
+ </p>
+ <p>
+ For configuration information, see the
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/java/com/sleepycat/db/CheckpointConfig.html" target="_top">
+ CheckpointConfig Javadoc page.
+ </a>
+ </p>
+ <p>
+ Note that running checkpoints can be quite expensive. DB must
+ flush every dirty page to the backing database files. On the
+ other hand, if you do not run checkpoints often enough, your
+ recovery time can be unnecessarily long and you may be using more
+ disk space than you really need. Also, you cannot remove log files
+ until a checkpoint is run. Therefore, deciding how frequently
+ to run a checkpoint is one of the most
+ common tuning activity for DB applications.
+ </p>
+ <p>
+ For example, the following class performs a checkpoint every 60 seconds, so long as 500 kb of logging data has been
+ written since the last checkpoint:
+</p>
+ <pre class="programlisting"><span>package db.txn;</span>
+
+import com.sleepycat.db.CheckpointConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+
+public class CheckPointer extends Thread
+{
+ private CheckpointConfig cpc = new CheckpointConfig();
+ private Environment myEnv = null;
+ private static boolean canRun = true;
+
+
+ // Constructor.
+ CheckPointer(Environment env) {
+ myEnv = env;
+ // Run a checkpoint only if 500 kbytes of log data has been
+ // written.
+ cpc.setKBytes(500);
+ }
+
+ // Thread method that performs a checkpoint every
+ // 60 seconds
+ public void run () {
+ while (canRun) {
+ try {
+ myEnv.checkpoint(cpc);
+ sleep(60000);
+ } catch (DatabaseException de) {
+ System.err.println(&quot;Checkpoint error: &quot; +
+ de.toString());
+ } catch (InterruptedException e) {
+ // Should never get here
+ System.err.println(&quot;got interrupted exception&quot;);
+ }
+ }
+ }
+
+ public static void stopRunning() {
+ canRun = false;
+ }
+} </pre>
+ <p>
+ And you use this class as follows. Note that we add the call to shutdown the checkpoint thread in our application's
+ shutdown code:
+</p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+
+public class TryCheckPoint {
+
+ private static String myEnvPath = &quot;./&quot;;
+
+ private static Environment myEnv = null;
+
+
+ private static void usage() {
+ System.out.println(&quot;TxnGuide [-h &lt;env directory&gt;]&quot;);
+ System.exit(-1);
+ }
+
+ public static void main(String args[]) {
+ try {
+ // Parse the arguments list
+ parseArgs(args);
+ // Open the environment and databases
+ openEnv();
+
+ // Start the checkpoint thread
+ CheckPointer cp = new CheckPointer(myEnv);
+ cp.start();
+
+ //////////////////////////////////
+ // Do database work here as normal
+ //////////////////////////////////
+
+ // Once all database work is completed, stop the checkpoint
+ // thread.
+ CheckPointer.stopRunning();
+
+ // Join the checkpoint thread in case it needs some time to
+ // cleanly shutdown.
+ cp.join();
+
+ } catch (Exception e) {
+ System.err.println(&quot;TryCheckPoint: &quot; + e.toString());
+ e.printStackTrace();
+ } finally {
+ closeEnv();
+ }
+ System.out.println(&quot;All done.&quot;);
+ }
+
+ // Open an environment and databases
+ private static void openEnv() throws DatabaseException {
+ System.out.println(&quot;opening env&quot;);
+
+ // Set up the environment.
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setAllowCreate(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+ // EnvironmentConfig.setThreaded(true) is the default behavior
+ // in Java, so we do not have to do anything to cause the
+ // environment handle to be free-threaded.
+
+ try {
+ // Open the environment
+ myEnv = new Environment(new File(myEnvPath), // Env home
+ myEnvConfig);
+
+ // Skipping the database opens and closes for brevity
+
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(&quot;openEnv: &quot; + fnfe.toString());
+ System.exit(-1);
+ }
+ }
+
+ // Close the environment and databases
+ private static void closeEnv() {
+ System.out.println(&quot;Closing env&quot;);
+ if (myEnv != null ) {
+ try {
+ myEnv.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: &quot; + e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private TryCheckPoint() {}
+
+ private static void parseArgs(String args[]) {
+ for(int i = 0; i &lt; args.length; ++i) {
+ if (args[i].startsWith(&quot;-&quot;)) {
+ switch(args[i].charAt(1)) {
+ case 'h':
+ myEnvPath = new String(args[++i]);
+ break;
+ default:
+ usage();
+ }
+ }
+ }
+ }
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="reversesplit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="backuprestore.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Reverse BTree Splits </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Backup Procedures</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/gettingStarted.css b/db/docs/gsg_txn/JAVA/gettingStarted.css
new file mode 100644
index 000000000..c1b4c86b7
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/gettingStarted.css
@@ -0,0 +1,41 @@
+body { width: 45em;
+ margin-left: 3em;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11pt;
+ }
+
+h2.title { margin-left: -1em;
+ font-family: Verdana, serif;
+ font-size: 16pt;
+ }
+
+h3.title { font-family: Verdana, serif;
+ font-size: 14pt;
+ }
+
+pre.programlisting {
+ font-family: monospace;
+ background-color: #eae8e9;
+}
+
+div.navheader { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+
+div.navheader table tr td { font-size: 9pt; }
+
+div.navfooter { font-size: 9pt;
+ width: 60em;
+ margin-left: -2em;
+ }
+div.navfooter table tr td { font-size: 9pt; }
+
+span.emphasis { font-style: italic; font-size: 9pt;}
+
+div.appendix div.informaltable { font-size: 9pt; }
+div.appendix div.informaltable td { vertical-align: top; }
+div.appendix div.informaltable p { margin-top: .25em; }
+div.appendix div.informaltable p { margin-bottom: .25em; }
+
+
diff --git a/db/docs/gsg_txn/JAVA/hotfailover.html b/db/docs/gsg_txn/JAVA/hotfailover.html
new file mode 100644
index 000000000..fa3dcc152
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/hotfailover.html
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Using Hot Failovers</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="architectrecovery.html" title="Designing Your Application for Recovery" />
+ <link rel="next" href="logfileremoval.html" title="Removing Log Files" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Using Hot Failovers</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="architectrecovery.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="logfileremoval.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="hotfailover"></a>Using Hot Failovers</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can maintain a backup that can be used for failover purposes.
+ Hot failovers differ from the backup and restore
+ procedures described previously in this chapter in that data
+ used for traditional backups is typically copied to offline storage.
+ Recovery time for a traditional backup is determined by:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ How quickly you can retrieve that storage media.
+ Typically storage media for critical backups is moved
+ to a safe facility in a remote location, so this step can
+ take a relatively long time.
+ </p>
+ </li>
+ <li>
+ <p>
+ How fast you can read the backup from the storage media
+ to a local disk drive. If you have very large backups,
+ or if your storage media is very slow, this can be a
+ lengthy process.
+ </p>
+ </li>
+ <li>
+ <p>
+ How long it takes you to run catastrophic recovery
+ against the newly restored backup. As described earlier
+ in this chapter, this process can be lengthy because
+ every log file must be examined during the recovery
+ process.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ When you use a hot failover, the backup is maintained
+ at a location that is reasonably fast to access. Usually, this
+ is a second disk drive local to the machine.
+ In this situation, recovery time is very quick
+ because you only have to reopen your
+ environment and database, using the failover environment
+ for the environment open.
+ </p>
+ <p>
+ Hot failovers obviously do not protect you from truly
+ catastrophic disasters (such as a fire in your machine room)
+ because the backup is still local to the machine. However,
+ you can guard against more mundane problems (such as a broken
+ disk drive) by keeping the backup on a
+ second drive that is managed by an alternate disk controller.
+ </p>
+ <p>
+ To maintain a hot failover:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Copy all the active database files to the failover
+ directory. Use the <span><b class="command">db_archive</b></span>
+ command line utility with the
+ <tt class="literal">-s</tt> option to identify all the active
+ database files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify all the inactive log files in your production
+ environment and <span class="emphasis"><em>move</em></span> these to the failover
+ directory. Use the <span><b class="command">db_archive</b></span>
+ command with no command line options to obtain a list
+ of these log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Identify the active log files in your production
+ environment, and <span class="emphasis"><em>copy</em></span> these to the
+ failover directory. Use the
+ <span><b class="command">db_archive</b></span> command with the
+ <tt class="literal">-l</tt> option to obtain a list of these
+ log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run catastrophic recovery against the failover
+ directory. Use the <span><b class="command">db_recover</b></span>
+ command with the <tt class="literal">-c</tt> option to do
+ this.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally copy the backup to an archival location.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ Once you have performed this procedure, you can maintain an
+ active hot backup by repeating steps 2 - 5 as often
+ as is required by your application.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If you perform step 1, steps 2-5 must follow in order to
+ ensure consistency of your hot backup.
+ </p>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Rather than use the previous procedure, you can use the <span><b class="command">db_hotbackup</b></span> command line utility
+ to do the same thing. This utility will (optionally) run a checkpoint and then copy all necessary files to a target
+ directory for you.
+ </p>
+ </div>
+ <p>
+ To actually perform a failover, simply:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Shut down all processes which are running against the original environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you have an archival copy of the backup environment, you can optionally try copying the remaining
+ log files from the original environment and running catastrophic recovery against that backup
+ environment. Do this <span class="emphasis"><em>only</em></span> if you have a an archival copy of the backup
+ environment.
+ </p>
+ <p>
+ This step can allow you to recover data created or modified in the original environment, but which
+ did not have a chance to be reflected in the hot backup environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reopen your environment and databases as normal, but use
+ the backup environment instead of the production
+ environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="architectrecovery.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="logfileremoval.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Designing Your Application for Recovery </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Removing Log Files</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/index.html b/db/docs/gsg_txn/JAVA/index.html
new file mode 100644
index 000000000..e5d1857d4
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/index.html
@@ -0,0 +1,549 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Getting Started with Berkeley DB Transaction Processing</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="next" href="preface.html" title="Preface" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Getting Started with Berkeley DB Transaction Processing</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="book" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h1 class="title"><a id="id650934"></a>Getting Started with Berkeley DB Transaction Processing</h1>
+ </div>
+ <div>
+ <div class="legalnotice">
+ <p class="legalnotice-title">
+ <b>Legal Notice</b>
+ </p>
+ <p>
+ This documentation is distributed under an open source license.
+ You may review the terms of this license at:
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicensing.html</a>
+
+
+ </p>
+ <p>
+ Oracle, Berkeley DB,
+
+
+ and
+ Sleepycat are trademarks or registered trademarks of
+ Oracle Corporation. All rights to these marks are reserved.
+ No third-party use is permitted without the
+ express prior written consent of Oracle Corporation.
+ </p>
+ <p>
+ <span class="trademark">Java</span>&#8482; and all Java-based marks are a trademark
+ or registered trademark of Sun Microsystems,
+ Inc, in the United States and other countries.
+ </p>
+ <p>
+ To obtain a copy of this document's original source code, please
+ submit a request to the Oracle Technology Network forum at:
+ <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
+
+
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="pubdate">9/20/2006</p>
+ </div>
+ </div>
+ <div></div>
+ <hr />
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="preface">
+ <a href="preface.html">Preface</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="introduction.html">1. Introduction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="enabletxn.html">2. Enabling Transactions</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="enabletxn.html#environments">Environments</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#filenaming">File Naming</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#errorsupport">Error Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#sharedmemory">Shared Memory Regions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="enabletxn.html#security">Security Considerations</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="envopen.html">Opening a Transactional Environment and
+ Database
+
+ </a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="usingtxns.html">3. Transaction Basics</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="usingtxns.html#commitresults">Committing a Transaction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="abortresults.html">Aborting a Transaction</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="autocommit.html">Auto Commit</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="nestedtxn.html">Nested Transactions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txncursor.html">Transactional Cursors</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnindices.html">Secondary Indices with Transaction Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="maxtxns.html">Configuring the Transaction Subsystem</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="txnconcurrency.html">4. Concurrency</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#locks">Locks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#blocks">Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="lockingsubsystem.html">The Locking Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="isolation.html">Isolation</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#degreesofisolation">Supported Degrees of Isolation</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="txn_ccursor.html">Transactional Cursors and Concurrent Applications</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txn_ccursor.html#cursordirtyreads">Using Cursors with Uncommitted Data</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="readmodifywrite.html">Read/Modify/Write</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnnowait.html">No Wait on Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="filemanagement.html">5. Managing DB Files</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="backuprestore.html">Backup Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#copyutilities">About Unix Copy Utilities</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#standardbackup">Offline Backups</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#hotbackup">Hot Backup</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="backuprestore.html#incrementalbackups">Incremental Backups</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery.html">Recovery Procedures</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#normalrecovery">Normal Recovery</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="recovery.html#catastrophicrecovery">Catastrophic Recovery</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="architectrecovery.html">Designing Your Application for Recovery</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multithreadrecovery">Recovery for Multi-Threaded Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="architectrecovery.html#multiprocessrecovery">Recovery in Multi-Process Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="hotfailover.html">Using Hot Failovers</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logfileremoval.html">Removing Log Files</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="logconfig.html">Configuring the Logging Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logfilesize">Setting the Log File Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ <dt>
+ <span class="chapter">
+ <a href="wrapup.html">6. Summary and Examples</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="wrapup.html#anatomy">Anatomy of a Transactional Application</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnexample_java.html">Transaction Example</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txnexample_java.html#txnguideexample">TxnGuide.java</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="txnexample_java.html#payloaddata">PayloadData.java</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="txnexample_java.html#dbwriter">DBWriter.java</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="inmem_txnexample_java.html">In-Memory Transaction Example</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top"> </td>
+ <td width="20%" align="center"> </td>
+ <td width="40%" align="right" valign="top"> Preface</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/inmem_txnexample_java.html b/db/docs/gsg_txn/JAVA/inmem_txnexample_java.html
new file mode 100644
index 000000000..3cc8bb0d9
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/inmem_txnexample_java.html
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>In-Memory Transaction Example</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="previous" href="txnexample_java.html" title="Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">In-Memory Transaction Example</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnexample_java.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 6. Summary and Examples</th>
+ <td width="20%" align="right"> </td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="inmem_txnexample_java"></a>In-Memory Transaction Example</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is sometimes used for applications that simply need to cache
+ data retrieved from some other location (such as a remote database
+ server). DB is also often used in embedded systems.
+ </p>
+ <p>
+ In both cases, applications may still want to use transactions for
+ atomicity, consistency, and isolation guarantees, but they may want
+ to forgo the durability guarantee entirely. That is, they may want
+ their DB environment and databases kept entirely in-memory so
+ as to avoid the performance impact of unneeded disk I/O.
+ </p>
+ <p>
+ To do this:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Refrain from specifying a home directory when you open your
+ environment. The exception to this is if you are using the
+ <tt class="literal">DB_CONFIG</tt> configuration file &#8212; in
+ that case you must identify the environment's home
+ directory so that the configuration file can be found.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your environment to back your regions from
+ system memory instead of the filesystem.
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your logging subsystem such that log files are kept
+ entirely in-memory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Increase the size of your in-memory log buffer so that it
+ is large enough to hold the largest set of concurrent write operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Increase the size of your in-memory cache so that it can
+ hold your entire data set. You do not want your cache to
+ page to disk.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not specify a file name when you open your database(s).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ As an example, this section takes the transaction example provided
+ in <a href="txnexample_java.html">Transaction Example</a>
+ and it updates that example so that the environment, database, log
+ files, and regions are all kept entirely in-memory.
+ </p>
+ <p>
+ For illustration purposes, we also modify this example so that
+ uncommitted reads are no longer used to enable the <tt class="methodname">countRecords()</tt>
+ method. Instead, we simply provide a transaction handle to
+ <tt class="methodname">countRecords()</tt> so as to avoid the
+ self-deadlock.
+ </p>
+ <p>
+ The majority of the modifications to the original example are performed in the <tt class="classname">TxnGuide</tt>
+ example class (see <a href="txnexample_java.html#txnguideexample">TxnGuide.java</a>).
+ This is because the majority of the work that we need to do is performed when the environment and
+ databases are opened.
+ </p>
+ <p>
+ To begin, we simplify the beginning of the class a bit. We eliminate some variables that the example no longer
+ needs &#8212; specifically variables having to do with the location of the environment and the names of the
+ database files.
+ We can also remove our <tt class="function">usage()</tt> method because we no
+ longer require any command line arguments.
+ </p>
+ <pre class="programlisting">// File TxnGuideInMemory.java
+
+package db.txn;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.LockDetectMode;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+<b class="userinput"><tt>public class TxnGuideInMemory {</tt></b>
+
+ // DB handles
+ private static Database myDb = null;
+ private static Database myClassDb = null;
+ private static Environment myEnv = null;
+
+ private static final int NUMTHREADS = 5; </pre>
+ <p>
+ Next, in our <tt class="function">main()</tt> method, we
+ remove the call to <tt class="methodname">parseArgs()</tt> because that only existed in the previous example for
+ collecting the environment home location. Everything else is essentially the same.
+</p>
+ <pre class="programlisting"> public static void main(String args[]) {
+ try {
+
+ // Open the environment and databases
+ openEnv();
+
+ // Get our class catalog (used to serialize objects)
+ StoredClassCatalog classCatalog =
+ new StoredClassCatalog(myClassDb);
+
+ // Start the threads
+ DBWriter[] threadArray;
+ threadArray = new DBWriter[NUMTHREADS];
+ for (int i = 0; i &lt; NUMTHREADS; i++) {
+ threadArray[i] = new DBWriter(myEnv, myDb, classCatalog);
+ threadArray[i].start();
+ }
+
+ for (int i = 0; i &lt; NUMTHREADS; i++) {
+ threadArray[i].join();
+ }
+ } catch (Exception e) {
+ System.err.println(&quot;<b class="userinput"><tt>TxnGuideInMemory</tt></b>: &quot; + e.toString());
+ e.printStackTrace();
+ } finally {
+ closeEnv();
+ }
+ System.out.println(&quot;All done.&quot;);
+ } </pre>
+ <p>
+ Next we open our environment as always. However, in doing so we:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Set <tt class="methodname">EnvironmentConfig.setPrivate()</tt>
+ to <tt class="literal">true</tt>.
+ This causes our environment to back regions using our
+ application's heap memory rather than by using the filesystem.
+ This is the first important step to keeping our DB data
+ entirely in-memory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Remove <tt class="methodname">runRecovery()</tt>
+ from the environment configuration. Because all our data will be held entirely in memory, recovery is a
+ non-issue. Note that if we had left the call to <tt class="methodname">runRecovery()</tt>
+ in, it would be silently ignored.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <pre class="programlisting"> private static void openEnv() throws DatabaseException {
+ System.out.println(&quot;opening env&quot;);
+
+ // Set up the environment.
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+
+ <b class="userinput"><tt>// Region files are not backed by the filesystem, they are
+ // backed by heap memory.
+ myEnvConfig.setPrivate(true);</tt></b>
+
+ myEnvConfig.setAllowCreate(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+ // EnvironmentConfig.setThreaded(true) is the default behavior
+ // in Java, so we do not have to do anything to cause the
+ // environment handle to be free-threaded.
+
+ // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction that has
+ // performed the least amount of write activity to
+ // receive the deadlock notification, if any.
+ myEnvConfig.setLockDetectMode(LockDetectMode.MINWRITE); </pre>
+ <p>
+ Now we configure our environment to keep the log files in memory,
+ increase the log buffer size to 10 MB, and increase our in-memory
+ cache to 10 MB. These values should be more than enough for our
+ application's workload.
+ </p>
+ <pre class="programlisting">
+ <b class="userinput">
+ <tt> // Specify in-memory logging
+ myEnvConfig.setLogInMemory(true);
+ // Specify the size of the in-memory log buffer
+ // Must be large enough to handle the log data created by
+ // the largest transaction.
+ myEnvConfig.setLogBufferSize(10 * 1024 * 1024);
+ // Specify the size of the in-memory cache
+ // Set it large enough so that it won't page.
+ myEnvConfig.setCacheSize(10 * 1024 * 1024); </tt>
+ </b>
+ </pre>
+ <p>
+ Our database configuration is identical to the original example, except that we do not specify
+ <tt class="methodname">setReadUncomitted()</tt> here. We will be causing our <tt class="methodname">countRecords()</tt>
+ method to join the transaction rather than perform uncommitted reads, so we do not need our database to support them.
+</p>
+ <pre class="programlisting"> // Set up the database
+ DatabaseConfig myDbConfig = new DatabaseConfig();
+ myDbConfig.setType(DatabaseType.BTREE);
+ myDbConfig.setAllowCreate(true);
+ myDbConfig.setTransactional(true);
+ myDbConfig.setSortedDuplicates(true);
+ // no DatabaseConfig.setThreaded() method available.
+ // db handles in java are free-threaded so long as the
+ // env is also free-threaded. </pre>
+ <p>
+ Next, we open the environment. This is
+ identical to how the example previously worked, except that we do not
+ provide a location for the environment's home directory.
+ </p>
+ <pre class="programlisting"> try {
+ // Open the environment
+ myEnv = new Environment(<b class="userinput"><tt>null</tt></b>, // Env home
+ myEnvConfig); </pre>
+ <p>
+ When we open our databases, we also specify <tt class="literal">null</tt> for the file names. The causes the database
+ to not be backed by the filesystem; that is, the databases are held entirely in memory.
+ </p>
+ <pre class="programlisting"> // Open the database. Do not provide a txn handle. This open
+ // is auto committed because DatabaseConfig.setTransactional()
+ // is true.
+ myDb = myEnv.openDatabase(null, // txn handle
+ <b class="userinput"><tt>null</tt></b>, // Database file name
+ null, // Database name
+ myDbConfig);
+
+ // Used by the bind API for serializing objects
+ // Class database must not support duplicates
+ myDbConfig.setSortedDuplicates(false);
+ myClassDb = myEnv.openDatabase(null, // txn handle
+ <b class="userinput"><tt>null</tt></b>, // Database file name
+ null, // Database name,
+ myDbConfig);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(&quot;openEnv: &quot; + fnfe.toString());
+ System.exit(-1);
+ }
+ } </pre>
+ <p>
+ After that, our class is unchanged, except for some very minor modifications.
+ Most notably, we remove the <tt class="methodname">parseArgs()</tt>
+ method from the application, because we no longer need it.
+ </p>
+ <pre class="programlisting"> private static void closeEnv() {
+ System.out.println(&quot;Closing env&quot;);
+ if (myDb != null ) {
+ try {
+ myDb.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: myDb: &quot; +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myClassDb != null ) {
+ try {
+ myClassDb.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: myClassDb: &quot; +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myEnv != null ) {
+ try {
+ myEnv.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: &quot; + e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ <b class="userinput"><tt>private TxnGuideInMemory() {}</tt></b>
+} </pre>
+ <p>
+ That completes our modifications to this class.
+ We now turn our attention to our <tt class="classname">DBWriter</tt>
+ class (see <a href="txnexample_java.html#dbwriter">DBWriter.java</a>).
+ It is unchanged, except for one small modification. In the
+ <tt class="methodname">run()</tt> method, we call <tt class="methodname">countRecords()</tt>
+ with a transaction handle, rather than configuring our entire
+ application for uncommitted reads. Both mechanisms work well-enough
+ for preventing a self-deadlock. However, the individual count
+ in this example will tend to be lower than the counts seen in
+ the previous transaction example, because
+ <tt class="function">countRecords()</tt> can no longer see records
+ created but not yet committed by other threads.
+ Additionally, the usage of the transaction handle here will
+ probably cause more deadlocks than using read-uncommitted does, because more locking is being performed in
+ this case.
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.tuple.StringBinding;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.CursorConfig;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DeadlockException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.db.Transaction;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Random;
+
+public class DBWriter extends Thread
+{
+ private Database myDb = null;
+ private Environment myEnv = null;
+ private EntryBinding dataBinding = null;
+ private Random generator = new Random();
+
+ private static final int MAX_RETRY = 20;
+
+ private static String[] keys = {&quot;key 1&quot;, &quot;key 2&quot;, &quot;key 3&quot;,
+ &quot;key 4&quot;, &quot;key 5&quot;, &quot;key 6&quot;,
+ &quot;key 7&quot;, &quot;key 8&quot;, &quot;key 9&quot;,
+ &quot;key 10&quot;};
+
+
+ // Constructor. Get our DB handles from here
+ DBWriter(Environment env, Database db, StoredClassCatalog scc)
+ throws DatabaseException {
+ myDb = db;
+ myEnv = env;
+ dataBinding = new SerialBinding(scc, PayloadData.class);
+ }
+
+
+ // Thread method that writes a series of records
+ // to the database using transaction protection.
+ // Deadlock handling is demonstrated here.
+ public void run () {
+ Transaction txn = null;
+
+ // Perform 50 transactions
+ for (int i=0; i&lt;50; i++) {
+
+ boolean retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) {
+ // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Get a transaction
+ txn = myEnv.beginTransaction(null, null);
+ // Write 10 records to the db
+ // for each transaction
+ for (int j = 0; j &lt; 10; j++) {
+ // Get the key
+ DatabaseEntry key = new DatabaseEntry();
+ StringBinding.stringToEntry(keys[j], key);
+
+ // Get the data
+ PayloadData pd = new PayloadData(i+j, getName(),
+ generator.nextDouble());
+ DatabaseEntry data = new DatabaseEntry();
+ dataBinding.objectToEntry(pd, data);
+
+ // Do the put
+ myDb.put(txn, key, data);
+ }
+
+ // commit
+ System.out.println(getName() +
+ &quot; : committing txn : &quot; + i);
+
+ System.out.println(getName() + &quot; : Found &quot; +
+ countRecords(<b class="userinput"><tt>txn</tt></b>) + &quot; records in the database.&quot;);
+ try {
+ txn.commit();
+ txn = null;
+ } catch (DatabaseException e) {
+ System.err.println(&quot;Error on txn commit: &quot; +
+ e.toString());
+ }
+ retry = false;
+
+ } catch (DeadlockException de) {
+ System.out.println(&quot;################# &quot; + getName() +
+ &quot; : caught deadlock&quot;);
+ // retry if necessary
+ if (retry_count &lt; MAX_RETRY) {
+ System.err.println(getName() +
+ &quot; : Retrying operation.&quot;);
+ retry = true;
+ retry_count++;
+ } else {
+ System.err.println(getName() +
+ &quot; : out of retries. Giving up.&quot;);
+ retry = false;
+ }
+ } catch (DatabaseException e) {
+ // abort and don't retry
+ retry = false;
+ System.err.println(getName() +
+ &quot; : caught exception: &quot; + e.toString());
+ System.err.println(getName() +
+ &quot; : errno: &quot; + e.getErrno());
+ e.printStackTrace();
+ } finally {
+ if (txn != null) {
+ try {
+ txn.abort();
+ } catch (Exception e) {
+ System.err.println(
+ &quot;Error aborting transaction: &quot; +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+ } </pre>
+ <p>
+ Next we update <tt class="methodname">countRecords()</tt>. The only difference
+ here is that we no longer specify <tt class="methodname">CursorConfig.setReadUncomitted()</tt> when
+ we open our cursor. Note that even this minor change is not required.
+ If we do not configure our database to support uncommitted reads,
+ <tt class="methodname">CursorConfig.setReadUncomitted()</tt> is silently
+ ignored. However, we remove the property anyway from the cursor open so as to
+ avoid confusion.
+</p>
+ <pre class="programlisting"> // This simply counts the number of records contained in the
+ // database and returns the result. You can use this method
+ // in three ways:
+ //
+ // First call it with an active txn handle.
+ // Secondly, configure the cursor for uncommitted reads
+ // Third, call count_records AFTER the writer has committed
+ // its transaction.
+ //
+ // If you do none of these things, the writer thread will
+ // self-deadlock.
+ //
+ // Note that this method exists only for illustrative purposes.
+ // A more straight-forward way to count the number of records in
+ // a database is to use the Database.getStats() method.
+ private int countRecords(Transaction txn) throws DatabaseException {
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+ int count = 0;
+ Cursor cursor = null;
+
+ try {
+ // Get the cursor
+ CursorConfig cc = new CursorConfig();
+ cc.setReadUncomitted(true);
+ cursor = myDb.openCursor(txn, cc);
+ while (cursor.getNext(key, data, LockMode.DEFAULT) ==
+ OperationStatus.SUCCESS) {
+
+ count++;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return count;
+
+ }
+} </pre>
+ <p>
+ This completes our in-memory transactional example. If you would like to
+ experiment with this code, you can find the example in the following
+ location in your DB distribution:
+</p>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/db/txn</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnexample_java.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="wrapup.html">Up</a>
+ </td>
+ <td width="40%" align="right"> </td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transaction Example </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> </td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/introduction.html b/db/docs/gsg_txn/JAVA/introduction.html
new file mode 100644
index 000000000..d2315cd21
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/introduction.html
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="recovery-intro.html" title="Recoverability" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on transactions as
+ used with Berkeley DB (DB). It begins by offering a general overview to
+ transactions, the guarantees they provide, and the general application
+ infrastructure required to obtain full transactional protection for your
+ data.
+ </p>
+ <p>
+ This book also provides detailed examples on how to write a
+ transactional application. Both single threaded and multi-threaded <span>(as well as multi-process
+ applications)</span> are discussed. A detailed description of various
+ backup and recovery strategies is included in this manual, as is a
+ discussion on performance considerations for your transactional application.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Getting Started with Berkeley DB</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnintro"></a>Transaction Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactions offer your application's data protection from
+ application or system failures. That is, DB transactions offer
+ your application full ACID support:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="bold"><b>A</b></span>tomicity
+ </p>
+ <p>
+ Multiple database operations are treated as a single unit of
+ work. Once committed, all write operations performed under
+ the protection of the transaction are saved to your databases.
+ Further, in the event that you abort a transaction, all write
+ operations performed during the transaction are discarded.
+ In this event, your database is left in the state it was in
+ before the transaction began, regardless of the number or
+ type of write operations you may have performed during the
+ course of the transaction.
+ </p>
+ <p>
+ Note that DB transactions can span one or more
+ database handles.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>C</b></span>onsistency
+ </p>
+ <p>
+ Your databases will never see a partially completed
+ transaction. This is true even if your application fails while there are
+ in-progress transactions. If the application or system fails,
+ then either all of the database changes appear when the
+ application next runs, or none of them appear.
+ </p>
+ <p>
+ In other words, whatever consistency requirements your application has will never be violated by DB.
+ If, for example, your application requires every record to include an employee ID, and your
+ code faithfully adds that ID to its database records, then DB will never
+ violate that consistency requirement. The ID will remain in the database records until such a time as your
+ application chooses to delete it.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>I</b></span>solation
+ </p>
+ <p>
+ While a transaction is in progress, your databases will appear
+ to the transaction as if there are no other operations
+ occurring outside of the transaction. That is, operations
+ wrapped inside a transaction will always have a clean and
+ consistent view of your databases. They never have to see
+ updates currently in progress under the protection of another transaction.
+ Note, however, that isolation guarantees can be
+
+ relaxed from the default setting. See
+ <a href="isolation.html">Isolation</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>D</b></span>urability
+ </p>
+ <p>
+ Once committed to your databases, your modifications will
+ persist even in the event of an application or system failure.
+ Note that like isolation, your durability guarantee can be
+ relaxed. See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sysfailure"></a>A Note on System Failure</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From time to time this manual mentions that transactions protect your data against 'system or application
+ failure.' This is
+ true up to a certain extent. However, not all failures are created equal and no data protection
+ mechanism can protect you against every conceivable way a computing system can find to die.
+ </p>
+ <p>
+ Generally, when this book talks about protection against failures, it means that
+ transactions offer protection against
+ the likeliest culprits for system and application crashes. So long as your data modifications have been
+ committed to disk, those modifications should persist even if your application or OS subsequently fails.
+ And, even if the application or OS fails in the middle of a transaction commit (or abort), the data on disk
+ should be either in a consistent state, or there should be enough data available to bring
+ your databases into a consistent state (via a recovery procedure, for example). You may, however,
+ lose whatever data you were committing at the
+ time of the failure, but your databases will be otherwise unaffected.
+ </p>
+ <p>
+ Of course, if your <span class="emphasis"><em>disk</em></span> fails, then the transactional benefits described in this book
+ are only as good as the backups you have taken.
+ <span>
+ By spreading your data and log files across separate disks,
+ you can minimize the risk of data loss due to a disk failure, but even in this case it is possible to
+ conjure a scenario where even this protection is insufficient (a fire in the machine room, for example) and
+ you must go to your backups for protection.
+ </span>
+ </p>
+ <p>
+ Finally, by following the programming examples shown in this book, you can write your code so as to protect
+ your data in the event that your code crashes. However, no programming API can protect you against logic
+ failures in your own code; transactions cannot protect you from simply writing the wrong thing to your
+ databases.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="apireq"></a>Application Requirements</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to use transactions, your application has certain
+ requirements beyond what is required of non-transactional protected
+ applications. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Environments.
+ </p>
+ <p>
+ Environments are optional for non-transactional
+ applications, but they are required for transactional
+ applications.
+ </p>
+ <p>
+ Environment usage is described in detail in
+ <a href="usingtxns.html">Transaction Basics</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction subsystem.
+ </p>
+ <p>
+ In order to use transactions, you must explicitly
+ enable the transactional subsystem for your
+ application, and this must be done at the time that
+ your environment is first created.
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ <p>
+ The logging subsystem is required for recovery purposes, but
+ its usage also means your application may require a
+ little more administrative effort than it does when logging
+ is not in use. See <a href="filemanagement.html">Managing DB Files</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <span>Transaction</span>
+
+ handles.
+ </p>
+ <p>
+ In order to obtain the atomicity guarantee offered by
+ the transactional subsystem (that is, combine multiple
+ operations in a single unit of work), your application must use
+ transaction handles. These handles are obtained from your
+
+
+
+ <span>Environment</span>
+ objects. They should normally be short-lived, and their usage is
+ reasonably simple. To complete a transaction and save
+ the work it performed, you
+ call its <tt class="methodname">commit()</tt> method. To
+ complete a transaction and discard its work, you call its
+ <tt class="methodname">abort()</tt> method.
+ </p>
+ <p>
+ In addition, it is possible to use auto commit if you want
+ to transactional protect a single write operation. Auto
+ commit allows a transaction to be used without
+ obtaining an explicit transaction handle. See
+ <a href="autocommit.html">Auto Commit</a>
+ for information on how to use auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>Database</span>
+
+ open requirements.
+ </p>
+ <p>
+
+ <span>In addition to using
+ environments and initializing the
+ correct subsystems, your</span>
+
+ application must transaction protect the database
+
+ opens<span>,
+ and any secondary index associations,</span>
+
+ if subsequent operations on the databases are to be transaction
+ protected. The database open and secondary index
+ association are commonly transaction protected using
+ auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ Deadlock detection.
+ </p>
+ <p>
+ Typically transactional applications use multiple
+ threads of control when accessing the database. Any
+ time multiple threads are used on a single resource,
+ the potential for lock contention arises. In turn, lock
+ contention can lead to deadlocks. See
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information.
+ </p>
+ <p>
+ Therefore, transactional applications must frequently
+ include code for detecting and responding to deadlocks.
+ Note that this requirement is not
+ <span class="emphasis"><em>specific</em></span> to transactions
+ &#8211; you can certainly write concurrent
+ non-transactional DB applications. Further, not
+ every transactional application uses concurrency and
+ so not every transactional application must
+ manage deadlocks. Still, deadlock management is so
+ frequently a characteristic of transactional
+ applications that we discuss it in this
+ book. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithread-intro"></a>Multi-threaded
+ <span>and Multi-process</span>
+ Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is designed to support multi-threaded <span>and
+ multi-process</span> applications, but their usage means
+ you must pay careful attention to issues of concurrency.
+ Transactions help your application's concurrency by providing various levels of
+ isolation for your threads of control. In addition, DB
+ provides mechanisms that allow you to detect and respond to
+ deadlocks (but strictly speaking, this is not limited to just
+ transactional applications).
+ </p>
+ <p>
+ <span class="emphasis"><em>Isolation</em></span> means that database modifications made by
+ one transaction will not normally be seen by readers from another
+ transaction until the first commits its changes. Different threads
+ use different transaction handles, so
+ this mechanism is normally used to provide isolation between
+ database operations performed by different threads.
+ </p>
+ <p>
+ Note that DB supports different isolation levels. For example,
+ you can configure your application to see uncommitted reads, which means
+ that one transaction can see data that has been modified but not yet
+ committed by another transaction. Doing this might mean your
+ transaction reads data &quot;dirtied&quot; by another transaction,
+ but which subsequently might change before that
+ other transaction commits its changes.
+ On the other hand, lowering your isolation
+ requirements means that your application can experience
+ improved throughput due to reduced lock contention.
+ </p>
+ <p>
+ For more information on concurrency, on managing isolation
+ levels, and on deadlock detection, see <a href="txnconcurrency.html">Concurrency</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recoverability</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/isolation.html b/db/docs/gsg_txn/JAVA/isolation.html
new file mode 100644
index 000000000..3e4a7bc2a
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/isolation.html
@@ -0,0 +1,917 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Isolation</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="lockingsubsystem.html" title="The Locking Subsystem" />
+ <link rel="next" href="txn_ccursor.html" title="Transactional Cursors and Concurrent Applications" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Isolation</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="lockingsubsystem.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txn_ccursor.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="isolation"></a>Isolation</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Isolation guarantees are an important aspect of transactional
+ protection. Transactions
+ ensure the data your transaction is working with will not be changed by some other transaction.
+ Moreover, the modifications made by a transaction will never be viewable outside of that transaction until
+ the changes have been committed.
+ </p>
+ <p>
+ That said, there are different degrees of isolation, and you can choose to relax your isolation
+ guarantees to one degree or another depending on your application's requirements. The primary reason why
+ you might want to do this is because of performance; the more isolation you ask your transactions to
+ provide, the more locking that your application must do. With more locking comes a greater chance of
+ blocking, which in turn causes your threads to pause while waiting for a lock. Therefore, by relaxing
+ your isolation guarantees, you can <span class="emphasis"><em>potentially</em></span> improve your application's throughput.
+ Whether you actually see any improvement depends, of course, on
+ the nature of your application's data and transactions.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="degreesofisolation"></a>Supported Degrees of Isolation</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB supports the following levels of isolation:
+ </p>
+ <div class="informaltable">
+ <table border="1" width="80%">
+ <colgroup>
+ <col />
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Degree</th>
+ <th>ANSI Term</th>
+ <th>Definition</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>1</td>
+ <td>READ UNCOMMITTED</td>
+ <td>
+ Uncommitted reads means that one transaction will never
+ overwrite another transaction's dirty data. Dirty data is
+ data that a transaction has modified but not yet committed
+ to the underlying data store. However, uncommitted reads allows a
+ transaction to see data dirtied by another
+ transaction. In addition, a transaction may read data
+ dirtied by another transaction, but which subsequently
+ is aborted by that other transaction. In this latter
+ case, the reading transaction may be reading data that
+ never really existed in the database.
+ </td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>READ COMMITTED</td>
+ <td>
+ <p>
+ Committed read isolation means that degree 1 is observed, except that dirty data is never read.
+ </p>
+ <p>
+ In addition, this isolation level guarantees that data will never change so long as
+ it is addressed by the cursor, but the data may change before the reading cursor is closed.
+ In the case of a transaction, data at the current
+ cursor position will not change, but once the cursor
+ moves, the previous referenced data can change. This
+ means that readers release read locks before the cursor
+ is closed, and therefore, before the transaction
+ completes. Note that this level of isolation causes the
+ cursor to operate in exactly the same way as it does in
+ the absence of a transaction.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>SERIALIZABLE</td>
+ <td>
+ <p>
+ Committed read is observed, plus the data read by a transaction, T,
+ will never be dirtied by another transaction before T completes.
+ This means that both read and write locks are not
+ released until the transaction completes.
+ </p>
+ <p>
+ <span>
+ In addition,
+ </span>
+
+
+
+ no transactions will see phantoms. Phantoms are records
+ returned as a result of a search, but which were not seen by
+ the same transaction when the identical
+ search criteria was previously used.
+ </p>
+ <p>
+ This is DB's default isolation guarantee.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p>
+
+ By default, DB transactions and transactional cursors offer
+ <span>
+ serializable isolation.
+ </span>
+
+
+ You can optionally reduce your isolation level by configuring DB to use
+ uncommitted read isolation. See
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ for more information.
+
+ You can also configure DB to use committed read isolation. See
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ for more information.
+
+ </p>
+ <p>
+ Finally, in addition to DB's normal degrees of isolation, you
+ can also use <span class="emphasis"><em>snapshot isolation</em></span>. This allows
+ you to avoid the read locks that serializable isolation requires. See
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ for details.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="dirtyreads"></a>Reading Uncommitted Data</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure your application to read data that has been modified but not yet
+ committed by another transaction; that is, dirty data. When you do this, you
+ may see a performance benefit by allowing your
+ application to not have to block waiting for write locks. On the other hand, the data that your
+ application is reading may change before the transaction has completed.
+ </p>
+ <p>
+ When used with transactions, uncommitted reads means that one transaction can see data
+ modified but not yet committed by another transaction. When
+ used with transactional cursors, uncommitted reads means
+ that any database reader can see data modified by the
+ cursor before the cursor's transaction has committed.
+ </p>
+ <p>
+ Because of this, uncommitted reads allow a transaction to read data
+ that may subsequently be aborted by another transaction. In
+ this case, the reading transaction will have read data that
+ never really existed in the database.
+ </p>
+ <p>
+ To configure your application to read uncommitted data:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Open your database such that it will allow uncommitted reads. You do this by
+
+ <span>
+ specifying <tt class="literal">true</tt> to
+ <span>
+ <tt class="methodname">DatabaseConfig.setReadUncommitted()</tt>.
+ </span>
+
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <span>
+ Specify that you want to use uncommitted reads when you
+ <span>
+ create a transaction or open the cursor.
+ </span>
+
+ To do this, you use the <tt class="methodname">setReadUncommitted()</tt>
+ <span>
+ method on the relevant configuration object
+ (<tt class="classname">TransactionConfig</tt> or
+ <tt class="classname">CursorConfig</tt>).
+ </span>
+
+ </span>
+
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For example, the following opens the database such that it supports uncommitted reads, and then creates a
+ transaction that causes all reads performed within it to use uncommitted reads. Remember that simply opening
+ the database to support uncommitted reads is not enough; you must also declare your read operations to be
+ performed using uncommitted reads.
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.Transaction;
+import com.sleepycat.db.TransactionConfig;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ dbConfig.setReadUncommitted(true); // Enable uncommitted reads.
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);
+ TransactionConfig txnConfig = new TransactionConfig();
+ txnConfig.setReadUncommitted(true); // Use uncommitted reads
+ // for this transaction.
+ Transaction txn = myEnv.beginTransaction(null, txnConfig);
+
+ // From here, you perform your database reads and writes as normal,
+ // committing and aborting the transactions as is necessary, and
+ // testing for deadlock exceptions as normal (omitted for brevity).
+
+ ...</pre>
+ <p>
+ You can also configure uncommitted read isolation on a read-by-read basis
+ by specifying <tt class="literal">LockMode.READ_UNCOMMITTED</tt>:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.Transaction;
+
+...
+
+Database myDb = null;
+Environment myEnv = null;
+Transaction txn = null;
+
+try {
+
+ // Environment and database open omitted
+
+ ...
+
+ txn = myEnv.beginTransaction(null, null);
+
+ DatabaseEntry theKey =
+ new DatabaseEntry((new String(&quot;theKey&quot;)).getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry theData = new DatabaseEntry();
+
+ myDb.get(txn, theKey, theData, LockMode.READ_UNCOMMITTED);
+} catch (Exception e) {
+ // Exception handling goes here
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="readcommitted"></a>Committed Reads</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure your transaction so that the data being
+ read by a transactional cursor is consistent so long as it
+ is being addressed by the cursor. However, once the cursor is done reading the
+
+ <span>
+ record (that is, reading records from the page that it currently has locked),
+ </span>
+ the cursor releases its lock on that
+
+ <span>
+ record or page.
+ </span>
+ This means that the data the cursor has read and released
+ may change before the cursor's transaction has completed.
+ </p>
+ <p>
+ For example,
+ suppose you have two transactions, <tt class="literal">Ta</tt> and <tt class="literal">Tb</tt>. Suppose further that
+ <tt class="literal">Ta</tt> has a cursor that reads <tt class="literal">record R</tt>, but does not modify it. Normally,
+ <tt class="literal">Tb</tt> would then be unable to write <tt class="literal">record R</tt> because
+ <tt class="literal">Ta</tt> would be holding a read lock on it. But when you configure your transaction for
+ committed reads, <tt class="literal">Tb</tt> <span class="emphasis"><em>can</em></span> modify <tt class="literal">record
+ R</tt> before <tt class="literal">Ta</tt> completes, so long as the reading cursor is no longer
+ addressing the
+
+ <span>
+ record or page.
+ </span>
+ </p>
+ <p>
+ When you configure your application for this level of isolation, you may see better performance
+ throughput because there are fewer read locks being held by your transactions.
+ Read committed isolation is most useful when you have a cursor that is reading and/or writing records in
+ a single direction, and that does not ever have to go back to re-read those same records. In this case,
+ you can allow DB to release read locks as it goes, rather than hold them for the life of the
+ transaction.
+ </p>
+ <p>
+ To configure your application to use committed reads, do one of the following:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Create your transaction such that it allows committed reads. You do this by
+
+ <span>
+ specifying <tt class="literal">true</tt> to
+ <tt class="methodname">TransactionConfig.setReadCommitted()</tt>.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <span>
+ Specify <tt class="literal">true</tt> to
+ <tt class="methodname">CursorConfig.setReadCommitted()</tt>.
+ </span>
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example, the following creates a transaction that allows committed reads:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.Transaction;
+import com.sleepycat.db.TransactionConfig;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ // Notice that we do not have to specify any properties to the
+ // database to allow committed reads (this is as opposed to
+ // uncommitted reads where we DO have to specify a property on
+ // the database open.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);
+ String keyString = &quot;thekey&quot;;
+ String dataString = &quot;thedata&quot;;
+ DatabaseEntry key =
+ new DatabaseEntry(keyString.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data =
+ new DatabaseEntry(dataString.getBytes(&quot;UTF-8&quot;));
+
+ TransactionConfig txnConfig = new TransactionConfig();
+
+ // Open the transaction and enable committed reads. All cursors open
+ // with this transaction handle will use read committed isolation.
+ txnConfig.setReadCommitted(true);
+ Transaction txn = myEnv.beginTransaction(null, txnConfig);
+
+ // From here, you perform your database reads and writes as normal,
+ // committing and aborting the transactions as is necessary, and
+ // testing for deadlock exceptions as normal (omitted for brevity).
+
+ // Using transactional cursors with concurrent applications is
+ // described in more detail in the following section.
+
+ ...</pre>
+ <p>
+ You can also configure read committed isolation on a read-by-read basis
+ by specifying <tt class="literal">LockMode.READ_COMMITTED</tt>:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.Transaction;
+
+...
+
+Database myDb = null;
+Environment myEnv = null;
+Transaction txn = null;
+
+try {
+
+ // Environment and database open omitted
+
+ ...
+
+ txn = myEnv.beginTransaction(null, null);
+
+ DatabaseEntry theKey =
+ new DatabaseEntry((new String(&quot;theKey&quot;)).getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry theData = new DatabaseEntry();
+
+ myDb.get(txn, theKey, theData, LockMode.READ_COMMITTED);
+} catch (Exception e) {
+ // Exception handling goes here
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="snapshot_isolation"></a>Using Snapshot Isolation</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default DB uses serializable isolation. An
+ important side effect of this isolation level is that
+ read operations obtain read locks on database pages,
+ and then hold those locks until the read operation is
+ completed. When you are using transactional cursors, this
+ means that read locks are held until the transaction commits or
+ aborts. In that case, over time a transactional cursor
+ can gradually block all other transactions from writing
+ to the database.
+ </p>
+ <p>
+ You can avoid this by using snapshot isolation.
+ Snapshot isolation uses <span class="emphasis"><em>multiversion
+ concurrency control</em></span> to guarantee
+ repeatable reads. What this means is that every time a
+ writer would take a read lock on a page, instead a copy of
+ the page is made and the writer operations on that page
+ copy. This frees other writers from blocking due to a
+ read lock held on the page.
+ </p>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_cost"></a>Snapshot Isolation Cost</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Snapshot isolation does not come without a cost.
+ Because pages are being duplicated before being
+ operated upon, the cache will fill up faster. This
+ means that you might need a larger cache in order to
+ hold the entire working set in memory.
+ </p>
+ <p>
+ If the cache becomes full of page copies before old
+ copies can be discarded, additional I/O will occur as
+ pages are written to temporary &quot;freezer&quot; files on disk.
+ This can substantially reduce throughput, and should be
+ avoided if possible by configuring a large cache and
+ keeping snapshot isolation transactions short.
+ </p>
+ <p>
+ You can estimate how large your cache should be by
+ taking a checkpoint, followed by a call to the
+
+
+ <tt class="methodname">Environment.getArchiveLogFiles()</tt>
+ method. The amount of cache required is approximately
+ double the size of the remaining log files (that is,
+ the log files that cannot be archived).
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_maxtxn"></a>Snapshot Isolation Transactional Requirements</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In addition to an increased cache size, you may also
+ need to increase the maximum number of transactions
+ that your application supports. (See
+ <a href="maxtxns.html"><p>
+ Most of the configuration activities that you need to perform
+ for your transactional DB application will involve the
+ locking and logging subsystems. See
+ <a href="txnconcurrency.html"></a>Concurrency
+ and
+ <a href="filemanagement.html"></a>Managing DB Files
+ for details.
+ </p><p>
+ However, there are a couple of things that you can do to
+ configure your transaction subsystem directly. These things
+ are:
+ </p><div class="itemizedlist"><ul type="disc"><li><p>
+ Configure the maximum number of simultaneous
+ transactions needed by your application.
+ In general, you should not need to do this unless you
+ use deeply nested transactions or you have many threads all
+ of which have active transactions. In addition, you may
+ need to a higher maximum number of transactions if you
+ are using snapshot isolation. See
+ <a href="isolation.html#sisolation_maxtxn"></a>Snapshot Isolation Transactional Requirements
+ for details.
+ </p><p>
+ By default, your application can support 20 active
+ transactions.
+ </p><p>
+ You can set the maximum number of simultaneous
+ transactions supported by your application using
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setTxnMaxActive()</tt>.
+ </span>
+ </p><p>
+ If your application has exceeded this maximum value,
+ then any attempt to begin a new transaction will fail.
+ </p><p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_tx_max</tt> parameter. Remember that
+ the <tt class="literal">DB_CONFIG</tt> must reside in your
+ environment home directory.
+ </p></li><li><span>
+ <p>
+ <span>
+ Configure the timeout value for your transactions.
+ </span>
+
+
+ This value represents the longest period of time a
+ transaction can be active. Note, however, that
+ transaction timeouts are checked only when DB
+ examines its lock tables for blocked locks
+ (see <a href="blocking_deadlocks.html"></a>Locks, Blocks, and Deadlocks
+ for more information). Therefore, a transaction's timeout can
+ have expired, but the application will not be notified until DB
+ has a reason to examine its lock tables.
+ </p>
+ <p>
+ Be aware that some transactions may be
+ inappropriately timed out before the transaction has a
+ chance to complete. You should therefore use this
+ mechanism only if you know your application
+ might have unacceptably long transactions and
+ you want to make sure your application will
+ not stall during their execution.
+ (This might happen if, for example, your
+ transaction blocks or requests too much
+ data.)
+ </p>
+ <p>
+ Note that by default transaction timeouts are set to 0 seconds, which means that they never time
+ out.
+ </p>
+ <p>
+ To set the maximum timeout value for your transactions,
+ use the
+
+
+ <span><tt class="methodname">EnvironmentConfig.setTxnTimeout()</tt></span>
+ method. This method configures the entire
+ environment; not just the handle used to set the
+ configuration. Further, this value may
+ be set at any time during the application's
+ lifetime. <span>(Use
+ <tt class="methodname">Environment.setConfig()</tt> to
+ set this value after the environment has been
+ opened.)</span>
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_txn_timeout</tt> parameter.
+ </p>
+
+</span></li></ul></div><p>
+ For example:
+ </p><pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.LockDetectMode;
+
+import java.io.File;
+
+...
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+
+ // Configure a maximum transaction timeout of 1 second.
+ myEnvConfig.setTxnTimeout(1000000);
+ // Configure 40 maximum transactions.
+ myEnv.setTxnMaxActive(40);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // From here, you open your databases, proceed with your
+ // database operations, and respond to deadlocks as
+ // is normal (omitted for brevity).
+
+ ...</pre></a>
+ for details on how to set this.)
+ In the worst case scenario, you might need to configure your application for one
+ more transaction for every page in the cache. This is
+ because transactions are retained until the last page
+ they created is evicted from the cache.
+ </p>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_whenuse"></a>When to Use Snapshot Isolation</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Snapshot isolation is best used when all or most
+ of the following conditions are true:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ You can have a large cache relative to your working data set size.
+ </p>
+ </li>
+ <li>
+ <p>
+ You require repeatable reads.
+ </p>
+ </li>
+ <li>
+ <p>
+ You will be using transactions that routinely work on
+ the entire database, or more commonly,
+ there is data in your database that will be very
+ frequently written by more than one transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Read/write contention is
+ limiting your application's
+ throughput, or the application
+ is all or mostly read-only and
+ contention for the lock manager
+ mutex is limiting throughput.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect3" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="sisolation_howuse"></a>How to use Snapshot Isolation</h4>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You use snapshot isolation by:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Opening the database with
+ multiversion support. You can
+ configure this either when you
+ open your environment or when
+ you open your database.
+ <span>
+ Use the
+ <tt class="literal">DB_MULTIVERSION</tt>
+ flag to configure this support.
+ </span>
+
+ <span>
+ Use either the
+ <tt class="methodname">EnvironmentConfig.setMultiversion()</tt>
+ or the
+ <tt class="methodname">DatabaseConfig.setMultiversion()</tt>
+ option to configure
+ this support.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Configure your cursor or
+ transaction to use snapshot
+ isolation.
+ </p>
+ <p>
+ To do this,
+
+
+
+ <span>
+ specify the
+ <tt class="methodname">TransactionConfig.setSnapshot()</tt>
+ option when you configure
+ your transaction.
+ </span>
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ The simplest way to take advantage of snapshot
+ isolation is for queries: keep update
+ transactions using full read/write locking and
+ use snapshot isolation on read-only transactions or
+ cursors. This should minimize blocking of
+ snapshot isolation transactions and will avoid
+ deadlock errors.
+ </p>
+ <p>
+ If the application has update transactions which
+ read many items and only update a small set (for
+ example, scanning until a desired record is
+ found, then modifying it), throughput may be
+ improved by running some updates at snapshot
+ isolation as well. But doing this means that
+ you must manage deadlock errors.
+ See
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ for details.
+ </p>
+ <p>
+ The following code fragment turns
+ on snapshot isolation for a transaction:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+ <b class="userinput"><tt>myEnvConfig.setMultiversion(true);</tt></b>
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);
+
+
+...
+
+ <b class="userinput"><tt>TransactionConfig txnConfig = new TransactionConfig();
+ tnxConfig.setSnapshot(true);</tt></b>
+ txn = myEnv.beginTransaction(null, <b class="userinput"><tt>txnConfig</tt></b>);
+
+...
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="lockingsubsystem.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txn_ccursor.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">The Locking Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transactional Cursors and Concurrent Applications</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/lockingsubsystem.html b/db/docs/gsg_txn/JAVA/lockingsubsystem.html
new file mode 100644
index 000000000..0d86ff00e
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/lockingsubsystem.html
@@ -0,0 +1,479 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>The Locking Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="blocking_deadlocks.html" title="Locks, Blocks, and Deadlocks" />
+ <link rel="next" href="isolation.html" title="Isolation" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">The Locking Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="blocking_deadlocks.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="isolation.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="lockingsubsystem"></a>The Locking Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to allow concurrent operations, DB provides the locking
+ subsystem. This subsystem provides inter- and intra- process
+ concurrency mechanisms. It is extensively used by DB concurrent
+ applications, but it can also be generally used for non-DB
+ resources.
+ </p>
+ <p>
+ This section describes the locking subsystem as it is used to
+ protect DB resources. In particular, issues on configuration are
+ examined here. For information on using the locking subsystem to
+ manage non-DB resources, see the
+ <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="configuringlock"></a>Configuring the Locking Subsystem</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You initialize the locking subsystem by specifying
+
+ <span>
+ <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setInitializeLocking()</tt>
+ method.
+ </span>
+ </p>
+ <p>
+ Before opening your environment, you can configure various
+ maximum values for your locking subsystem. Note that these
+ limits can only be configured before the environment is
+ opened. Also, these methods configure the entire environment,
+ not just a specific environment handle.
+ </p>
+ <p>
+ Finally, each bullet below identifies the
+ <tt class="filename">DB_CONFIG</tt> file parameter that can be used
+ to specify the specific locking limit. If used, these
+ <tt class="filename">DB_CONFIG</tt> file parameters override any
+ value that you might specify using the environment handle.
+ </p>
+ <p>
+ The limits that you can configure are as follows:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ The maximum number of lockers
+ supported by the environment. This value is used by
+ the environment when it is opened to estimate the amount
+ of space that it should allocate for various internal
+ data structures. By default, 1,000 lockers are
+ supported.
+ </p>
+ <p>
+ To configure this value, use the
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setMaxLockers()</tt>
+ method.
+ </span>
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_lockers</tt> parameter.
+ </p>
+ </li>
+ <li>
+ <p>
+ The maximum number of locks supported by the environment.
+ By default, 1,000 locks are supported.
+ </p>
+ <p>
+ To configure this value, use the
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setMaxLocks()</tt>
+ method.
+ </span>
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_locks</tt> parameter.
+ </p>
+ </li>
+ <li>
+ <p>
+ The maximum number of locked objects supported by the environment.
+ By default, 1,000 objects can be locked.
+ </p>
+ <p>
+ To configure this value, use the
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setMaxLockObjects()</tt>
+ method.
+ </span>
+ </p>
+ <p>
+ As an alternative to this method, you can configure this
+ value using the <tt class="filename">DB_CONFIG</tt> file's
+ <tt class="literal">set_lk_max_objects</tt> parameter.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For a definition of lockers, locks, and locked objects, see
+ <a href="blocking_deadlocks.html#lockresources">Lock Resources</a>.
+ </p>
+ <p>
+ For example, to configure the maximum number of locks that your
+ environment can use:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+...
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setMaxLocks(5000);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="configdeadlkdetect"></a>Configuring Deadlock Detection</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order for DB to know that a deadlock has occurred,
+ some mechanism must be used to perform deadlock
+ detection. There are three ways that deadlock detection can
+ occur:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Allow DB to internally detect deadlocks as they
+ occur.
+ </p>
+ <p>
+ To do this, you use
+
+
+ <span><tt class="methodname">EnvironmentConfig.setLockDetectMode()</tt>.</span>
+ This method causes DB to walk its internal lock table
+ looking for a deadlock whenever a lock request
+ is blocked. This method also identifies how DB decides which lock
+ requests are rejected when deadlocks are detected. For example,
+ DB can decide to reject the lock request for the transaction
+ that has the most number of locks, the least number of locks,
+ holds the oldest lock, holds the most number of write locks, and
+ so forth (see the API reference documentation for a complete
+ list of the lock detection policies).
+ </p>
+ <p>
+ You can call this method at any time during your application's
+ lifetime, but typically it is used before you open your environment.
+ </p>
+ <p>
+ Note that how you want DB to decide which thread of control should break a deadlock is
+ extremely dependent on the nature of your application. It is not unusual for some performance
+ testing to be required in order to make this determination. That said, a transaction that is
+ holding the maximum number of locks is usually indicative of the transaction that has performed
+ the most amount of work. Frequently you will not want a transaction that has performed a lot of
+ work to abandon its efforts and start all over again. It is not therefore uncommon for
+ application developers to initially select the transaction with the <span class="emphasis"><em>minimum</em></span>
+ number of write locks to break the deadlock.
+ </p>
+ <p>
+ Using this mechanism for deadlock detection means
+ that your application will never have to wait on a
+ lock before discovering that a deadlock has
+ occurred. However, walking the lock table every
+ time a lock request is blocked can be expensive
+ from a performance perspective.
+ </p>
+ </li>
+ <li>
+ <p>
+ Use a dedicated thread or external process to perform
+ deadlock detection. Note that this thread must be
+ performing no other database operations beyond deadlock
+ detection.
+ </p>
+ <p>
+ To externally perform lock detection, you can use
+ either the
+
+
+ <tt class="methodname">Environment.detectDeadlocks()</tt>
+ method, or use the
+ <span><b class="command">db_deadlock</b></span> command line
+ utility. This method (or command) causes DB to walk the
+ lock table looking for deadlocks.
+ </p>
+ <p>
+ Note that like
+
+
+ <span><tt class="methodname">EnvironmentConfig.setLockDetectMode()</tt>,</span>
+ you also use this method (or command line utility)
+ to identify which lock requests are rejected in the
+ event that a deadlock is detected.
+ </p>
+ <p>
+ Applications that perform deadlock detection in
+ this way typically run deadlock detection between every few
+ seconds and a minute. This means that your
+ application may have to wait to be notified of a
+ deadlock, but you also save the overhead of walking
+ the lock table every time a lock request is blocked.
+ </p>
+ </li>
+ <li>
+ <p>
+ Lock timeouts.
+ </p>
+ <p>
+ You can configure your locking subsystem such that
+ it times out any lock that is not released within a
+ specified amount of time. To do this, use the
+
+
+ <span><tt class="methodname">EnvironmentConfig.setLockTimeout()</tt></span>
+ method.
+ Note that lock timeouts are only checked when a
+ lock request is blocked or when deadlock
+ detection is otherwise performed. Therefore, a lock can have timed out and still be held for
+ some length of time until DB has a reason to examine its locking tables.
+ </p>
+ <p>
+ Be aware that extremely long-lived transactions, or
+ operations that hold locks for a long time, may be
+ inappropriately timed out before the transaction or
+ operation has a chance to complete. You should
+ therefore use this mechanism only if you know your
+ application will hold locks for very short periods
+ of time.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For example, to configure your application such that DB
+ checks the lock table for deadlocks every time a lock
+ request is blocked:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.LockDetectMode;
+
+import java.io.File;
+
+...
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+
+ // Configure db to perform deadlock detection internally, and to
+ // choose the transaction that has performed the least amount
+ // of writing to break the deadlock in the event that one
+ // is detected.
+ envConfig.setLockDetectMode(LockDetectMode.MINWRITE);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // From here, you open your databases, proceed with your
+ // database operations, and respond to deadlocks as
+ // is normal (omitted for brevity).
+
+ ...</pre>
+ <p>
+ Finally, the following command line call causes
+ deadlock detection to be run against the
+ environment contained in <tt class="literal">/export/dbenv</tt>. The
+ transaction with the youngest lock is chosen to break the
+ deadlock:
+ </p>
+ <pre class="programlisting">&gt; /usr/local/db_install/bin/db_deadlock -h /export/dbenv -a y</pre>
+ <p>
+ For more information, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/utility/db_deadlock.html" target="_top">
+ <tt class="literal">db_deadlock</tt> reference documentation.
+ </a>
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="deadlockresolve"></a>Resolving Deadlocks</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When DB determines that a deadlock has occurred, it will
+ select a thread of control to resolve the deadlock and then
+
+
+ <span>
+ throws <tt class="literal">DeadlockException</tt> in that
+ thread.
+ </span>
+
+ If a deadlock is detected, the thread must:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Cease all read and write operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Close all open cursors.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort the transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally retry the operation. If your application
+ retries deadlocked operations, the new attempt must
+ be made using a new transaction.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If a thread has deadlocked, it may not make any
+ additional database calls using the handle that has
+ deadlocked.
+ </p>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">// retry_count is a counter used to identify how many times
+// we've retried this operation. To avoid the potential for
+// endless looping, we won't retry more than MAX_DEADLOCK_RETRIES
+// times.
+
+// txn is a transaction handle.
+// key and data are DatabaseEntry handles. Their usage is not shown here.
+while (retry_count &lt; MAX_DEADLOCK_RETRIES) {
+ try {
+ txn = myEnv.beginTransaction(null, null);
+ myDatabase.put(txn, key, data);
+ txn.commit();
+ return 0;
+ } catch (DeadlockException de) {
+ try {
+ // Abort the transaction and increment the
+ // retry counter
+ txn.abort();
+ retry_count++;
+ if (retry_count &gt;= MAX_DEADLOCK_RETRIES) {
+ System.err.println(&quot;Exceeded retry limit. Giving up.&quot;);
+ return -1;
+ }
+ } catch (DatabaseException ae) {
+ System.err.println(&quot;txn abort failed: &quot; + ae.toString());
+ return -1;
+ }
+ } catch (DatabaseException e) {
+ try {
+ // Abort the transaction.
+ txn.abort();
+ } catch (DatabaseException ae) {
+ System.err.println(&quot;txn abort failed: &quot; + ae.toString());
+ return -1;
+ }
+ }
+} </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="blocking_deadlocks.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="isolation.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Locks, Blocks, and Deadlocks </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Isolation</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/logconfig.html b/db/docs/gsg_txn/JAVA/logconfig.html
new file mode 100644
index 000000000..85a711782
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/logconfig.html
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Configuring the Logging Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="logfileremoval.html" title="Removing Log Files" />
+ <link rel="next" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Configuring the Logging Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="logfileremoval.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="wrapup.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="logconfig"></a>Configuring the Logging Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can configure the following aspects of the logging
+ subsystem:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Size of the log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Size of the logging subsystem's region.
+ See <a href="logconfig.html#logregionsize">Configuring the Logging Region Size</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Maintain logs entirely in-memory.
+ See <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Size of the log buffer in memory.
+ See <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ On-disk location of your log files. See
+ <a href="enabletxn.html#splittingdata">Identifying Specific File Locations</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logfilesize"></a>Setting the Log File Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Whenever a pre-defined amount of data is written to a
+ log file (10 MB by default), DB stops using the
+ current log file and starts writing to a new file.
+ You can change the maximum amount of data contained in each
+ log file by using the
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setMaxLogFileSize()</tt>
+ method.
+ </span>
+ Note that this method can be used at any time
+ during an application's lifetime.
+ </p>
+ <p>
+ Setting the log file size to something larger than its
+ default value is largely a matter of
+ convenience and a reflection of the application's
+ preference in backup media and frequency. However, if
+ you set the log file size too low relative to your
+ application's traffic patterns, you can cause
+ yourself trouble.
+ </p>
+ <p>
+ From a performance perspective, setting the log file
+ size to a low value can cause your active transactions to
+ pause their writing activities more frequently than would
+ occur with larger log file sizes. Whenever a
+ transaction completes the log buffer is flushed to
+ disk. Normally other transactions can continue to
+ write to the log buffer while this flush is in
+ progress. However, when one log file is being closed
+ and another created, all transactions must cease
+ writing to the log buffer until the switch over is
+ completed.
+ </p>
+ <p>
+ Beyond performance concerns, using smaller log files
+ can cause you to use more physical files on disk.
+ As a result, your application could run out
+ of log sequence numbers, depending on how busy your
+ application is.
+ </p>
+ <p>
+ Every log file is identified with a 10 digit number.
+ Moreover, the maximum number of log files that your application
+ is allowed to create in its lifetime is 2,000,000,000.
+ </p>
+ <p>
+ For example, if your application performs 6,000 transactions per
+ second for 24 hours a day, and you are logging 500 bytes of
+ data per transaction into 10 MB log files, then you
+ will run out of log files in around 221 years:
+ </p>
+ <pre class="programlisting"> (10 * 2^20 * 2000000000) / (6000 * 500 * 365 * 60 *60 * 24) = 221 </pre>
+ <p>
+ However, if you were writing 2000 bytes of data per
+ transaction, and using 1 MB log files, then the same
+ formula shows you running out of log files in 5 years time.
+ </p>
+ <p>
+ All of these time frames are quite long, to be sure,
+ but if you do run out of log files after, say, 5 years
+ of continuous operations, then you must reset your log
+ sequence numbers. To do so:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Backup your databases as if to prepare for
+ catastrophic failure. See
+ <a href="backuprestore.html">Backup Procedures</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ Reset the log file's sequence number using the
+ <span><b class="command">db_load</b></span> utility's
+ <tt class="literal">-r</tt> option.
+ </p>
+ </li>
+ <li>
+ <p>
+ Remove all of the log files from your
+ environment. Note that this is the only
+ situation in which all of the log files are
+ removed from an environment; in all other
+ cases, at least a single log file is retained.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restart your application.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logregionsize"></a>Configuring the Logging Region Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The logging subsystem's default region size is 60 KB. The
+ logging region is used to store filenames, and so you may
+ need to increase its size if a large number of files (that
+ is, if you have a very large number of databases) will
+ be opened and registered with DB's log manager.
+ </p>
+ <p>
+ You can set the size of your logging region by using the
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setLogRegionSize()</tt>
+ </span>
+ method. Note that this method can only be called before the
+ first environment handle for your application is opened.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="inmemorylogging"></a>Configuring In-Memory Logging</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ It is possible to configure your logging subsystem such
+ that logs are maintained entirely in memory. When
+ you do this, you give up your transactional durability
+ guarantee. Without log files, you have no way to run
+ recovery so any system or software failures that you might
+ experience can corrupt your databases.
+ </p>
+ <p>
+ However, by giving up your durability guarantees, you can
+ greatly improve your application's throughput by avoiding
+ the disk I/O necessary to write logging information to
+ disk. In this case, you still retain your transactional
+ atomicity, consistency, and isolation guarantees.
+ </p>
+ <p>
+ To configure your logging subsystem to maintain your logs
+ entirely in-memory:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure your log buffer is capable of holding all
+ log information that can accumulate during the longest
+ running transaction. See <a href="logconfig.html#logbuffer">Setting the In-Memory Log Buffer Size</a> for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Do not run normal recovery when you open your environment. In this configuration, there are no
+ log files available against which you can run recovery. As a result, if you specify recovery
+ when you open your environment, it is ignored.
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify
+
+ <span>
+ <tt class="literal">true</tt>
+ to the
+ <tt class="methodname">EnvironmentConfig.setLogInMemory()</tt>
+ </span>
+ method. Note that you must specify this before
+ your application opens its first environment
+ handle.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ // Specify in-memory logging
+ myEnvConfig.setLogInMemory(true);
+
+ // Specify the in-memory log buffer size.
+ myEnvConfig.setLogBufferSize(10 * 1024 * 1024);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // From here, you open databases, create transactions and
+ // perform database operations exactly as you would if you
+ // were logging to disk. This part is omitted for brevity. </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="logbuffer"></a>Setting the In-Memory Log Buffer Size</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When your application is configured for on-disk logging
+ (the default behavior for transactional applications), log
+ information is stored in-memory until the storage space
+ fills up, or a transaction commit forces the log
+ information to be flushed to disk.
+ </p>
+ <p>
+ It is possible to increase the amount of memory available
+ to your file log buffer. Doing so improves throughput for
+ long-running transactions, or for transactions that produce
+ a large amount of data.
+ </p>
+ <p>
+ When you have your logging subsystem configured to maintain
+ your log entirely in memory (see
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>), it is very important
+ to configure your log buffer size because the log buffer
+ must be capable of holding all log information that can
+ accumulate during the longest running transaction.
+ You must make sure that the in-memory log buffer size is
+ large enough that no transaction will ever span the entire
+ buffer. You must also avoid a state where the in-memory
+ buffer is full and no space can be freed because a
+ transaction that started the first log &quot;file&quot; is still
+ active.
+ </p>
+ <p>
+ When your logging subsystem is configured for on-disk
+ logging, the default log buffer space is 32 KB. When
+ in-memory logging is configured, the default log buffer
+ space is 1 MB.
+ </p>
+ <p>
+ You can increase your log buffer space using the
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setLogBufferSize()</tt>
+ </span>
+ method. Note that this method can only be called before the
+ first environment handle for your application is opened.
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="logfileremoval.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="wrapup.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Removing Log Files </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 6. Summary and Examples</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/logfileremoval.html b/db/docs/gsg_txn/JAVA/logfileremoval.html
new file mode 100644
index 000000000..231b164f4
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/logfileremoval.html
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Removing Log Files</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="hotfailover.html" title="Using Hot Failovers" />
+ <link rel="next" href="logconfig.html" title="Configuring the Logging Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Removing Log Files</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="hotfailover.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="logconfig.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="logfileremoval"></a>Removing Log Files</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ By default DB does not delete log files for you. For this reason,
+ DB's log files will eventually grow to consume an
+ unnecessarily large amount of disk space. To guard against
+ this, you should periodically take administrative action to
+ remove log files that are no longer in use by your application.
+ </p>
+ <p>
+ You can remove a log file if all of the following are true:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ the log file is not involved in an active transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ a checkpoint has been performed
+ <span class="emphasis"><em>after</em></span> the log file was
+ created.
+ </p>
+ </li>
+ <li>
+ <p>
+ the log file is not the only log file in the
+ environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ the log file that you want to remove has already been
+ included in an offline or hot backup.
+ Failure to observe this last condition can cause your
+ backups to be unusable.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ DB provides several mechanisms to remove log files that
+ meet all but the last criteria (DB has no way to know which
+ log files have already been included in a backup). The
+ following mechanisms make it easy to remove unneeded log files,
+ but can result in an unusable backup if the log files are not first
+ saved to your archive location. All of the following
+ mechanisms automatically delete unneeded log files for you:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option.
+ </p>
+ </li>
+ <li>
+ <p>
+ From within your application, call the
+
+ <span>
+ <tt class="methodname">Environment.removeOldLogFiles()</tt>
+ method.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <span>
+ Specify <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setLogAutoRemove()</tt>
+ method. Note that setting this property affects
+ all environment handles opened against the
+ environment; not just the handle used to set
+ the property.
+ </span>
+ </p>
+ <p>
+ Note that unlike the other log removal mechanisms
+ identified here, this method actually causes log files
+ to be removed on an on-going basis as they become
+ unnecessary. This is extremely desirable behavior if
+ what you want is to use the absolute minimum amount of
+ disk space possible for your application. This
+ mechanism <span class="emphasis"><em>will</em></span> leave you with
+ the log files that are required to run normal recovery.
+ However, it is highly likely that this mechanism will
+ prevent you from running catastrophic recovery.
+ </p>
+ <p>
+ Do NOT use this mechanism if you want to be able to
+ perform catastrophic recovery, or if you want to be
+ able to maintain a hot backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ In order to safely remove log files and still be able to
+ perform catastrophic recovery, use the
+ <span><b class="command">db_archive</b></span> command line utility as follows:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Run either a normal or hot backup as described in
+ <a href="backuprestore.html">Backup Procedures</a>. Make
+ sure that all of this data is safely stored to your
+ backup media before continuing.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you have not already done so, perform a checkpoint.
+ See <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are maintaining a hot backup, perform the hot
+ backup procedure as described in
+ <a href="hotfailover.html">Using Hot Failovers</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option against
+ your production environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ Run the <span><b class="command">db_archive</b></span> command line
+ utility with the <tt class="literal">-d</tt> option against
+ your failover environment, if you are maintaining one.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="hotfailover.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="logconfig.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Using Hot Failovers </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Configuring the Logging Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/maxtxns.html b/db/docs/gsg_txn/JAVA/maxtxns.html
new file mode 100644
index 000000000..30994a5d5
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/maxtxns.html
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Configuring the Transaction Subsystem</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
+ <link rel="next" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Configuring the Transaction Subsystem</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnconcurrency.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="maxtxns"></a>Configuring the Transaction Subsystem</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Most of the configuration activities that you need to perform
+ for your transactional DB application will involve the
+ locking and logging subsystems. See
+ <a href="txnconcurrency.html">Concurrency</a>
+ and
+ <a href="filemanagement.html">Managing DB Files</a>
+ for details.
+ </p>
+ <p>
+ However, there are a couple of things that you can do to
+ configure your transaction subsystem directly. These things
+ are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Configure the maximum number of simultaneous
+ transactions needed by your application.
+ In general, you should not need to do this unless you
+ use deeply nested transactions or you have many threads all
+ of which have active transactions. In addition, you may
+ need to a higher maximum number of transactions if you
+ are using snapshot isolation. See
+ <a href="isolation.html#sisolation_maxtxn">Snapshot Isolation Transactional Requirements</a>
+ for details.
+ </p>
+ <p>
+ By default, your application can support 20 active
+ transactions.
+ </p>
+ <p>
+ You can set the maximum number of simultaneous
+ transactions supported by your application using
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setTxnMaxActive()</tt>.
+ </span>
+ </p>
+ <p>
+ If your application has exceeded this maximum value,
+ then any attempt to begin a new transaction will fail.
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_tx_max</tt> parameter. Remember that
+ the <tt class="literal">DB_CONFIG</tt> must reside in your
+ environment home directory.
+ </p>
+ </li>
+ <li>
+ <span>
+ <p>
+ <span>
+ Configure the timeout value for your transactions.
+ </span>
+
+
+ This value represents the longest period of time a
+ transaction can be active. Note, however, that
+ transaction timeouts are checked only when DB
+ examines its lock tables for blocked locks
+ (see <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information). Therefore, a transaction's timeout can
+ have expired, but the application will not be notified until DB
+ has a reason to examine its lock tables.
+ </p>
+ <p>
+ Be aware that some transactions may be
+ inappropriately timed out before the transaction has a
+ chance to complete. You should therefore use this
+ mechanism only if you know your application
+ might have unacceptably long transactions and
+ you want to make sure your application will
+ not stall during their execution.
+ (This might happen if, for example, your
+ transaction blocks or requests too much
+ data.)
+ </p>
+ <p>
+ Note that by default transaction timeouts are set to 0 seconds, which means that they never time
+ out.
+ </p>
+ <p>
+ To set the maximum timeout value for your transactions,
+ use the
+
+
+ <span><tt class="methodname">EnvironmentConfig.setTxnTimeout()</tt></span>
+ method. This method configures the entire
+ environment; not just the handle used to set the
+ configuration. Further, this value may
+ be set at any time during the application's
+ lifetime. <span>(Use
+ <tt class="methodname">Environment.setConfig()</tt> to
+ set this value after the environment has been
+ opened.)</span>
+ </p>
+ <p>
+ This value can also be set using the
+ <tt class="literal">DB_CONFIG</tt> file's
+ <tt class="literal">set_txn_timeout</tt> parameter.
+ </p>
+
+</span>
+ </li>
+ </ul>
+ </div>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.LockDetectMode;
+
+import java.io.File;
+
+...
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+
+ // Configure a maximum transaction timeout of 1 second.
+ myEnvConfig.setTxnTimeout(1000000);
+ // Configure 40 maximum transactions.
+ myEnv.setTxnMaxActive(40);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // From here, you open your databases, proceed with your
+ // database operations, and respond to deadlocks as
+ // is normal (omitted for brevity).
+
+ ...</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnconcurrency.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Secondary Indices with Transaction Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 4. Concurrency</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/nestedtxn.html b/db/docs/gsg_txn/JAVA/nestedtxn.html
new file mode 100644
index 000000000..2ff64399a
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/nestedtxn.html
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Nested Transactions</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="autocommit.html" title="Auto Commit" />
+ <link rel="next" href="txncursor.html" title="Transactional Cursors" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Nested Transactions</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="autocommit.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="nestedtxn"></a>Nested Transactions</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ A <span class="emphasis"><em>nested transaction</em></span> is used to provide a
+ transactional guarantee for a subset of operations performed within
+ the scope of a larger transaction. Doing this allows you to commit
+ and abort the subset of operations independently of the larger
+ transaction.
+ </p>
+ <p>
+ The rules to the usage of a nested transaction are as follows:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ While the nested (child) transaction is active, the parent
+ transaction may not perform any operations other than to commit
+ or abort, or to create more child transactions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Committing a nested transaction has no effect on the state
+ of the parent transaction. The parent transaction is still
+ uncommitted. However, the parent transaction can now
+ see any modifications made by the child transaction.
+ Those modifications, of course, are still hidden to all
+ other transactions until the parent also commits.
+ </p>
+ </li>
+ <li>
+ <p>
+ Likewise, aborting the nested transaction has no effect on
+ the state of the parent transaction. The only result of the
+ abort is that neither the parent nor any
+ other transactions will see any of the
+ database modifications performed under the protection of the
+ nested transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the parent transaction commits or aborts while it has
+ active children, the child transactions are resolved in the
+ same way as the parent. That is, if the parent aborts, then
+ the child transactions abort as well. If the parent commits,
+ then whatever modifications have been performed by the child
+ transactions are also committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ The locks held by a nested transaction are not released when
+ that transaction commits. Rather, they are now held by the
+ parent transaction until such a time as that parent commits.
+ </p>
+ </li>
+ <li>
+ <p>
+ Any database modifications performed by the nested transaction
+ are not visible outside of the larger encompassing
+ transaction until such a time as that parent transaction is
+ committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ The depth of the nesting that you can achieve with nested
+ transaction is limited only by memory.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ To create a nested transaction, simply pass the parent transaction's
+ handle when you created the nested transaction's handle. For
+ example:
+ </p>
+ <pre class="programlisting"> // parent transaction
+ Transaction parentTxn = myEnv.beginTransaction(null, null);
+ // child transaction
+ Transaction childTxn = myEnv.beginTransaction(parentTxn, null); </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="autocommit.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Auto Commit </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transactional Cursors</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/perftune-intro.html b/db/docs/gsg_txn/JAVA/perftune-intro.html
new file mode 100644
index 000000000..e9dff26fc
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/perftune-intro.html
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Performance Tuning</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="recovery-intro.html" title="Recoverability" />
+ <link rel="next" href="enabletxn.html" title="Chapter 2. Enabling Transactions" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Performance Tuning</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="recovery-intro.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="enabletxn.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="perftune-intro"></a>Performance Tuning</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From a performance perspective, the use of transactions is not free.
+ Depending on how you configure them, transaction commits
+ usually require your application to perform disk I/O that a non-transactional
+ application does not perform. Also, for multi-threaded
+ <span>and
+ multi-process</span> applications, the use of transactions can
+ result in increased lock contention due to extra locking
+ requirements driven by transactional isolation guarantees.
+ </p>
+ <p>
+ There is therefore a performance tuning component to transactional applications
+ that is not applicable for non-transactional applications (although
+ some tuning considerations do exist whether or not your application uses
+ transactions). Where appropriate, these tuning considerations are
+ introduced in the following chapters.
+
+ <span>
+ However, for a more complete description of them, see the
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/tune.html" target="_top">
+ Transaction tuning
+ </a>
+ and
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/transapp/throughput.html" target="_top">
+ Transaction throughput
+ </a>
+ sections of the <i class="citetitle">Berkeley DB Programmer's Reference Guide</i>.
+ </span>
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="recovery-intro.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="enabletxn.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Recoverability </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 2. Enabling Transactions</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/preface.html b/db/docs/gsg_txn/JAVA/preface.html
new file mode 100644
index 000000000..6f0601ca8
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/preface.html
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Preface</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="next" href="introduction.html" title="Chapter 1. Introduction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Preface</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="preface" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="preface"></a>Preface</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="preface.html#conventions">Conventions Used in this Book</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="preface.html#moreinfo">For More Information</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ This document describes how to use transactions with your Berkeley DB
+ applications. It is intended to describe how to
+ transaction protect your application's data. The APIs used to perform this task
+ are described here, as are the environment infrastructure and administrative tasks
+ required by a transactional application. This book also
+ describes multi-threaded <span>and
+ multi-process</span> DB applications and the requirements they
+ have for deadlock detection.
+ </p>
+ <p>
+ This book is aimed at the software engineer responsible for writing a
+ transactional DB application.
+ </p>
+ <p>
+ This book assumes that you have already read and understood the
+ concepts contained in the
+ <span><i class="citetitle">Getting Started with Berkeley DB</i>
+ guide.</span>
+
+
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="conventions"></a>Conventions Used in this Book</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following typographical conventions are used within in this manual:
+ </p>
+ <p>
+ Class names are represented in <tt class="classname">monospaced font</tt>, as are <tt class="methodname">method
+ names</tt>. For example:
+
+
+
+ <span>&quot;The <tt class="methodname">Environment()</tt>
+ constructor returns an <tt class="classname">Environment</tt> class object.&quot;</span>
+
+
+ </p>
+ <p>
+ Variable or non-literal text is presented in <span class="emphasis"><em>italics</em></span>. For example: &quot;Go to your
+ <span class="emphasis"><em>DB_INSTALL</em></span> directory.&quot;
+ </p>
+ <p>
+ Program examples are displayed in a <tt class="classname">monospaced font</tt> on a shaded background.
+ For example:
+ </p>
+ <pre class="programlisting">import com.sleepycat.db.DatabaseConfig;
+
+...
+
+// Allow the database to be created.
+DatabaseConfig myDbConfig = new DatabaseConfig();
+myDbConfig.setAllowCreate(true);</pre>
+ <p>
+ In some situations, programming examples are updated from one chapter to the next. When
+ this occurs, the new code is presented in <b class="userinput"><tt>monospaced bold</tt></b> font. For example:
+ </p>
+ <pre class="programlisting"><b class="userinput"><tt>import com.sleepycat.db.Database;</tt></b>
+import com.sleepycat.db.DatabaseConfig;
+
+...
+
+// Allow the database to be created.
+DatabaseConfig myDbConfig = new DatabaseConfig();
+myDbConfig.setAllowCreate(true);
+<b class="userinput"><tt>Database myDb = new Database(&quot;mydb.db&quot;, null, myDbConfig);</tt></b> </pre>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Finally, notes of special interest are represented using a note block such
+ as this.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="moreinfo"></a>For More Information</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Beyond this manual, you may also find the following sources of information useful when building a
+ transactional DB application:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg/JAVA/index.html" target="_top">
+ Getting Started with Berkeley DB for Java
+ </a>
+
+
+
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/gsg_db_rep/JAVA/index.html" target="_top">
+ Berkeley DB Getting Started with Replicated Applications for Java
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/ref/toc.html" target="_top">
+ Berkeley DB Programmer's Reference Guide
+ </a>
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/java/index.html" target="_top">
+ Berkeley DB Javadoc
+ </a>
+
+
+ </p>
+ </li>
+ <li>
+ <p>
+
+ <a href="http://www.oracle.com/technology/documentation/berkeley-db/db/collections/tutorial/index.html" target="_top">
+ Berkeley DB Collections Tutorial
+ </a>
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Getting Started with Berkeley DB Transaction Processing </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 1. Introduction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/readblock.jpg b/db/docs/gsg_txn/JAVA/readblock.jpg
new file mode 100644
index 000000000..16a511feb
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/readblock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/JAVA/readmodifywrite.html b/db/docs/gsg_txn/JAVA/readmodifywrite.html
new file mode 100644
index 000000000..eea954d10
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/readmodifywrite.html
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Read/Modify/Write</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txn_ccursor.html" title="Transactional Cursors and Concurrent Applications" />
+ <link rel="next" href="txnnowait.html" title="No Wait on Blocks" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Read/Modify/Write</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txn_ccursor.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnnowait.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="readmodifywrite"></a>Read/Modify/Write</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If you are retrieving
+ <span>a record from the database</span>
+
+ for the purpose of modifying or deleting it, you should declare
+ a read-modify-write cycle at the time that you read the
+ <span>record.</span>
+
+ Doing so causes DB to obtain write locks (instead of a read
+ locks) at the time of the read. This helps to prevent deadlocks by
+ preventing another transaction from acquiring a read lock on the same
+ record while the read-modify-write cycle is in progress.
+ </p>
+ <p>
+ Note that declaring a read-modify-write cycle may actually increase the amount of blocking that your
+ application sees, because readers immediately obtain write locks and write locks cannot be shared. For this
+ reason, you should use read-modify-write cycles only if you are seeing a large amount of deadlocking
+ occurring in your application.
+ </p>
+ <p>
+ In order to declare a read/modify/write cycle when you perform a
+ read operation,
+
+
+
+
+
+ <span>
+ specify
+ <tt class="classname">com.sleepycat.db.LockMode.RMW</tt>
+
+ to the database or cursor get method.
+ </span>
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">// Begin the deadlock retry loop as is normal.
+while (retry_count &lt; MAX_DEADLOCK_RETRIES) {
+ try {
+ txn = myEnv.beginTransaction(null, null);
+
+ ...
+ // key and data are DatabaseEntry objects.
+ // Their usage is omitted for brevity.
+ ...
+
+ // Read the data. Declare the read/modify/write cycle here
+ myDatabase.get(txn, key, data, LockMode.RMW);
+
+
+ // Put the data. Note that you do not have to provide any
+ // additional flags here due to the read/modify/write
+ // cycle. Simply put the data and perform your deadlock
+ // detection as normal.
+ myDatabase.put(txn, key, data);
+ txn.commit();
+ return 0;
+ } catch (DeadlockException de) {
+ // Deadlock detection and exception handling omitted
+ // for brevity
+ ... </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txn_ccursor.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnnowait.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transactional Cursors and Concurrent Applications </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> No Wait on Blocks</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/recovery-intro.html b/db/docs/gsg_txn/JAVA/recovery-intro.html
new file mode 100644
index 000000000..ee490b9ba
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/recovery-intro.html
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Recoverability</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="previous" href="introduction.html" title="Chapter 1. Introduction" />
+ <link rel="next" href="perftune-intro.html" title="Performance Tuning" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Recoverability</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 1. Introduction</th>
+ <td width="20%" align="right"> <a accesskey="n" href="perftune-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="recovery-intro"></a>Recoverability</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ An important part of DB's transactional guarantees is durability.
+ <span class="emphasis"><em>Durability</em></span> means that once a
+ transaction has been committed, the database modifications performed
+ under its protection will not be lost due to system failure.
+ </p>
+ <p>
+ In order to provide the transactional durability guarantee,
+ DB uses a write-ahead logging system. Every operation performed on
+ your databases is described in a log before it is performed on
+ your databases. This is done in order to ensure that an operation can be
+ recovered in the event of an untimely application
+ or system failure.
+ </p>
+ <p>
+ <span>
+ Beyond logging, another important aspect of durability is
+ recoverability. That is, backup and restore. </span>
+
+ DB supports a normal recovery that runs against a subset of
+ your log files. This is a routine procedure used whenever your
+ environment is first opened upon application startup, and it is intended to
+ ensure that your database is in a consistent state. DB also
+ supports archival backup and recovery in the case of
+ catastrophic failure, such as the loss of a physical disk
+ drive.
+ </p>
+ <p>
+ This book describes several different backup procedures
+ you can use to protect your on-disk data. These procedures
+ range from simple offline backup strategies to hot failovers. Hot failovers
+ provide not only a backup mechanism, but
+ also a way to recover from a fatal hardware failure.
+ </p>
+ <p>
+ This book also describes the recovery procedures you should use
+ for each of the backup strategies that you might employ.
+ </p>
+ <p>
+ For a detailed description of backup and restore procedures, see
+ <span>
+ <a href="filemanagement.html">Managing DB Files</a>.
+ </span>
+
+
+ </p>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="introduction.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="perftune-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 1. Introduction </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Performance Tuning</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/recovery.html b/db/docs/gsg_txn/JAVA/recovery.html
new file mode 100644
index 000000000..62ce76220
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/recovery.html
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Recovery Procedures</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ <link rel="previous" href="backuprestore.html" title="Backup Procedures" />
+ <link rel="next" href="architectrecovery.html" title="Designing Your Application for Recovery" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Recovery Procedures</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="backuprestore.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 5. Managing DB Files</th>
+ <td width="20%" align="right"> <a accesskey="n" href="architectrecovery.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="recovery"></a>Recovery Procedures</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB supports two types of recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Normal recovery, which is run when your environment is
+ opened upon application startup, examines only those
+ log records needed to bring the databases to a consistent
+ state since the last checkpoint. Normal recovery
+ starts with any logs used by any transactions active at
+ the time of the last checkpoint, and examines all logs
+ from then to the current logs.
+ </p>
+ </li>
+ <li>
+ <p>
+ Catastrophic recovery, which is performed in the same
+ way that normal recovery is except that it examines
+ all available log files. You use catastrophic recovery
+ to restore your databases from a previously created backup.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Of these two, normal recovery should be considered a routine
+ matter; in fact you should run normal
+ recovery whenever you start up your application.
+ </p>
+ <p>
+ Catastrophic recovery is run whenever you have lost or
+ corrupted your database files and you want to restore from a
+ backup. You also run catastrophic recovery when
+ you create a hot backup
+ (see <a href="hotfailover.html">Using Hot Failovers</a> for more information).
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="normalrecovery"></a>Normal Recovery</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Normal recovery examines the contents of your environment's
+ log files, and uses this information to ensure that your
+ database files are consistent relative to the
+ information contained in the log files.
+ </p>
+ <p>
+ Normal recovery also recreates your environment's region files.
+ This has the desired effect of clearing any unreleased locks
+ that your application may have held at the time of an
+ unclean application shutdown.
+ </p>
+ <p>
+ Normal recovery is run only against those log files created
+ since the time of your last checkpoint. For this reason,
+ your recovery time is dependent on how much data has been
+ written since the last checkpoint, and therefore on how
+ much log file information there is to examine. If you run
+ checkpoints infrequently, then normal recovery can
+ take a relatively long time.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ You should run normal recovery every
+ time you perform application startup.
+ </p>
+ </div>
+ <p>
+ To run normal recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Make sure all your environment handles are closed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Normal recovery <span class="emphasis"><em>must
+ be</em></span> single-threaded.
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify <tt class="literal">true</tt> to
+ <tt class="methodname">EnvironmentConfig.setRunRecovery()</tt>
+ when you open your environment.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ You can also run recovery by pausing or shutting down your
+ application and using the <span><b class="command">db_recover</b></span>
+ command line utility.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+
+...
+
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ // Run normal recovery
+ myEnvConfig.setRunRecovery(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // All other operations are identical from here. Notice, however,
+ // that we have not created any other threads of control before
+ // recovery is complete. You want to run recovery for
+ // the first thread in your application that opens an environment,
+ // but not for any subsequent threads.
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="catastrophicrecovery"></a>Catastrophic Recovery</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Use catastrophic recovery when you are
+ recovering your databases from a previously created backup.
+ Note that to restore your databases from a previous backup, you
+ should copy the backup to a new environment directory, and
+ then run catastrophic recovery. Failure to do so can lead to
+ the internal database structures being out of sync with your log files.
+ </p>
+ <p>
+ Catastrophic recovery must be run single-threaded.
+ </p>
+ <p>
+ To run catastrophic recovery:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Shutdown all database operations.
+ </p>
+ </li>
+ <li>
+ <p>
+ Restore the backup to an empty directory.
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify <tt class="literal">true</tt> to
+ <tt class="methodname">EnvironmentConfig.setRunRecoveryFatal()</tt>
+ when you open your environment. This environment
+ open must be single-threaded.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ You can also run recovery by pausing or shutting down your
+ application and using the <span><b class="command">db_recover</b></span>
+ command line utility with the the <tt class="literal">-c</tt> option.
+ </p>
+ <p>
+ Note that catastrophic recovery examines every available
+ log file &#8212; not just those log files created since the
+ last checkpoint as is the case for normal recovery. For this reason,
+ catastrophic recovery is likely to take longer than does
+ normal recovery.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+
+...
+
+
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ // Run catastrophic recovery
+ <b class="userinput"><tt>myEnvConfig.setRunFatalRecovery(true);</tt></b>
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="backuprestore.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="filemanagement.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="architectrecovery.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Backup Procedures </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Designing Your Application for Recovery</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/reversesplit.html b/db/docs/gsg_txn/JAVA/reversesplit.html
new file mode 100644
index 000000000..bade30c43
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/reversesplit.html
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Reverse BTree Splits</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="txnnowait.html" title="No Wait on Blocks" />
+ <link rel="next" href="filemanagement.html" title="Chapter 5. Managing DB Files" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Reverse BTree Splits</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txnnowait.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="filemanagement.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="reversesplit"></a>Reverse BTree Splits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ If your application is using the Btree access method, and your
+ application is repeatedly deleting then adding records to your
+ database, then you might be able to reduce lock contention by
+ turning off reverse Btree splits.
+ </p>
+ <p>
+ As pages are emptied in a database, DB attempts to
+ delete empty pages in order to keep
+ the database as small as possible and minimize search time.
+ Moreover, when a page in the database fills
+ up, DB, of course, adds additional pages
+ to make room for more data.
+ </p>
+ <p>
+ Adding and deleting pages in the database requires that the
+ writing thread lock the parent page. Consequently, as the
+ number of pages in your database diminishes, your application
+ will see increasingly more lock contention; the maximum level
+ of concurrency in a database of two pages is far smaller than
+ that in a database of 100 pages, because there are fewer pages
+ that can be locked.
+ </p>
+ <p>
+ Therefore, if you prevent the database from being reduced to a
+ minimum number of pages, you can improve your application's
+ concurrency throughput. Note, however, that you should do so
+ only if your application tends to delete and then add the same
+ data. If this is not the case, then preventing reverse Btree
+ splits can harm your database search time.
+ </p>
+ <p>
+ To turn off reverse Btree splits,
+
+ <span>
+ set
+ <tt class="methodname">DatabaseConfig.setReverseSplitOff()</tt>.
+ to <tt class="literal">true</tt>.
+ </span>
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Set BTree reverse split to off
+ dbConfig.setReverseSplitOff(true);
+
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ &quot;null&quot;, // db name
+ dbConfig);
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here
+}</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txnnowait.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="filemanagement.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">No Wait on Blocks </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Chapter 5. Managing DB Files</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/rwlocks1.jpg b/db/docs/gsg_txn/JAVA/rwlocks1.jpg
new file mode 100644
index 000000000..0fc88fd31
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/rwlocks1.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/JAVA/simplelock.jpg b/db/docs/gsg_txn/JAVA/simplelock.jpg
new file mode 100644
index 000000000..8dca4ad82
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/simplelock.jpg
Binary files differ
diff --git a/db/docs/gsg_txn/JAVA/txn_ccursor.html b/db/docs/gsg_txn/JAVA/txn_ccursor.html
new file mode 100644
index 000000000..69caaca20
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/txn_ccursor.html
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transactional Cursors and Concurrent Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="isolation.html" title="Isolation" />
+ <link rel="next" href="readmodifywrite.html" title="Read/Modify/Write" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transactional Cursors and Concurrent Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="isolation.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="readmodifywrite.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txn_ccursor"></a>Transactional Cursors and Concurrent Applications</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ When you use transactional cursors with a concurrent application, remember that
+ in the event of a deadlock you must make sure that you close your cursor before you abort and retry your
+ transaction.
+ </p>
+ <p>
+ Also, remember that when you are using the default isolation level,
+ every time your cursor reads a record it locks
+ that record until the encompassing transaction is resolved. This
+ means that walking your database with a transactional cursor
+ increases the chance of lock contention.
+ </p>
+ <p>
+ For this reason, if you must routinely walk your database with a
+ transactional cursor, consider using a reduced isolation level
+ such as read committed.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="cursordirtyreads"></a>Using Cursors with Uncommitted Data</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+
+ As described in <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ above, it is possible to relax your transaction's isolation
+ level such that it can read data modified but not yet committed
+ by another transaction. You can configure this when you create
+ your transaction handle, and when you do so then all cursors opened
+ inside that transaction will automatically use uncommitted reads.
+ </p>
+ <p>
+ You can also do this when you create a cursor handle from within
+ a serializable transaction. When you do this, only those
+ cursors configured for uncommitted reads uses uncommitted reads.
+ </p>
+ <p>
+ Either way, you must first configure your database handle to support
+ uncommitted reads before you can configure your transactions or
+ your cursors to use them.
+ </p>
+ <p>
+ The following example shows how to configure an individual cursor handle
+ to read uncommitted data from within a serializable (full isolation) transaction.
+ For an example of
+ configuring a transaction to perform uncommitted reads in
+ general, see <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>.
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.CursorConfig;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setTransactional(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ dbConfig.setReadUncommitted(true); // Enable uncommitted reads.
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);
+
+ // Open the transaction. Note that this is a degree 3
+ // transaction.
+ Transaction txn = myEnv.beginTransaction(null, null);
+ Cursor cursor = null;
+ try {
+ // Use the transaction handle here
+ // Get our cursor. Note that we pass the transaction
+ // handle here. Note also that we cause the cursor
+ // to perform uncommitted reads.
+ CursorConfig cconfig = new CursorConfig();
+ cconfig.setReadUncommitted(true);
+ cursor = db.openCursor(txn, cconfig);
+
+ // From here, you perform your cursor reads and writes
+ // as normal, committing and aborting the transactions as
+ // is necessary, and testing for deadlock exceptions as
+ // normal (omitted for brevity).
+
+ ... </pre>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="isolation.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="readmodifywrite.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Isolation </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Read/Modify/Write</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/txnconcurrency.html b/db/docs/gsg_txn/JAVA/txnconcurrency.html
new file mode 100644
index 000000000..f9a2e52b5
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/txnconcurrency.html
@@ -0,0 +1,369 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 4. Concurrency</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
+ <link rel="next" href="blocking_deadlocks.html" title="Locks, Blocks, and Deadlocks" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 4. Concurrency</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="maxtxns.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="blocking_deadlocks.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="txnconcurrency"></a>Chapter 4. Concurrency</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#locks">Locks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#blocks">Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="lockingsubsystem.html">The Locking Subsystem</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configuringlock">Configuring the Locking Subsystem</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#configdeadlkdetect">Configuring Deadlock Detection</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="lockingsubsystem.html#deadlockresolve">Resolving Deadlocks</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="isolation.html">Isolation</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#degreesofisolation">Supported Degrees of Isolation</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#readcommitted">Committed Reads</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="isolation.html#snapshot_isolation">Using Snapshot Isolation</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="txn_ccursor.html">Transactional Cursors and Concurrent Applications</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txn_ccursor.html#cursordirtyreads">Using Cursors with Uncommitted Data</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="readmodifywrite.html">Read/Modify/Write</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnnowait.html">No Wait on Blocks</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="reversesplit.html">Reverse BTree Splits</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+
+ DB offers a great deal of support for multi-threaded
+ <span>
+ and multi-process
+ </span>
+ applications even when transactions are not in use. Many of DB's
+ handles are
+ thread-safe<span>, or
+ can be made thread-safe by providing the appropriate flag at handle creation time,</span>
+ and DB provides a
+ flexible locking subsystem for managing databases in a concurrent
+ application. Further, DB provides a robust mechanism for
+ detecting and responding to deadlocks. All of these concepts are
+ explored in this chapter.
+ </p>
+ <p>
+ Before continuing, it is useful to define a few terms that will appear
+ throughout this chapter:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="emphasis"><em>Thread of control</em></span>
+ </p>
+ <p>
+ Refers to a thread that is performing work in your application.
+ Typically, in this book that thread will be performing DB
+ operations.
+ </p>
+ <p>
+ Note that this term can also be taken to mean a separate process
+ that is performing work &#8212; DB supports multi-process
+ operations on your databases.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Locking</em></span>
+ </p>
+ <p>
+ When a thread of control obtains
+ access to a shared resource, it is said to be
+ <span class="emphasis"><em>locking</em></span> that resource. Note that
+ DB supports both exclusive and non-exclusive locks. See
+ <a href="blocking_deadlocks.html#locks">Locks</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Free-threaded</em></span>
+ </p>
+ <p>
+ Data structures and objects are free-threaded if they can be
+ shared across threads of control without any explicit locking on
+ the part of the application. Some books, libraries, and
+ programming languages may use the term
+ <span class="emphasis"><em>thread-safe</em></span> for data structures or objects
+ that have this characteristic. The two terms mean the
+ same thing.
+ </p>
+ <p>
+ For a description of free-threaded DB objects, see
+ <a href="txnconcurrency.html#concurrenthandles">Which DB Handles are Free-Threaded</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Blocked</em></span>
+ </p>
+ <p>
+ When a thread cannot obtain a lock because some other
+ thread already holds a lock on that object, the lock
+ attempt is said to be <span class="emphasis"><em>blocked</em></span>. See
+ <a href="blocking_deadlocks.html#blocks">Blocks</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="emphasis"><em>Deadlock</em></span>
+ </p>
+ <p>
+ Occurs when two or more threads of control attempt to access conflicting resource in such a way as none
+ of the threads can any longer may further progress.
+ </p>
+ <p>
+ For example, if Thread A is blocked waiting for a resource held by Thread
+ B, while at the same time Thread B is blocked waiting for a
+ resource held by Thread A, then neither thread can make any
+ forward progress. In this situation, Thread A and Thread B
+ are said to be <span class="emphasis"><em>deadlocked.</em></span>
+ </p>
+ <p>
+ For more information, see <a href="blocking_deadlocks.html#deadlocks">Deadlocks</a>.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="concurrenthandles"></a>Which DB Handles are Free-Threaded</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following describes to what extent and under what conditions
+ individual handles are free-threaded.
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+
+
+ <tt class="classname">Environment</tt>
+ </p>
+ <p>
+ Free-threaded so long as
+
+ <span>
+ <tt class="methodname">EnvironmentConfig.setThreaded()</tt>
+ is set to <tt class="literal">true</tt>.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <tt class="classname">Database</tt>
+ </p>
+ <p>
+ Free-threaded so long as
+
+ <span>
+ the database is opened in a free-threaded environment.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="classname">SecondaryDatabase</tt>
+ </p>
+ <p>
+ Same conditions apply as for <tt class="classname">Database</tt>
+ handles.
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <tt class="classname">Cursor</tt>
+ </p>
+ <p>
+ Cursors are not free-threaded. However, they
+ can be used by multiple threads of control so
+ long as the application serializes access to the handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="classname">SecondaryCursor</tt>
+ </p>
+ <p>
+ Same conditions apply as for <tt class="classname">Cursor</tt>
+ handles.
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <tt class="classname">Transaction</tt>
+
+ </p>
+ <p>
+ Access must be serialized by the application across threads of control.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ All classes found in the bind APIs (<tt class="literal">com.sleepycat.bind.*</tt>) are free-threaded.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="maxtxns.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="blocking_deadlocks.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Configuring the Transaction Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Locks, Blocks, and Deadlocks</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/txncursor.html b/db/docs/gsg_txn/JAVA/txncursor.html
new file mode 100644
index 000000000..ca8bf7d11
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/txncursor.html
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transactional Cursors</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="nestedtxn.html" title="Nested Transactions" />
+ <link rel="next" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transactional Cursors</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txncursor"></a>Transactional Cursors</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can transaction-protect your cursor operations by
+ specifying a transaction handle at the time that you create
+ your cursor. Beyond that, you do not ever
+ provide a transaction handle directly to a cursor method.
+ </p>
+ <p>
+ Note that if you transaction-protect a cursor, then you must
+ make sure that the cursor is closed before you either commit or
+ abort the transaction. For example:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.db.Transaction;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+
+ // Database and environment opens omitted
+
+ String replacementData = &quot;new data&quot;;
+
+ Transaction txn = myEnv.beginTransaction(null, null);
+ Cursor cursor = null;
+ try {
+ // Use the transaction handle here
+ cursor = db.openCursor(txn, null);
+ DatabaseEntry key, data;
+
+ DatabaseEntry key, data;
+ while(cursor.getNext(key, data, LockMode.DEFAULT) ==
+ OperationStatus.SUCCESS) {
+
+ data.setData(replacementData.getBytes(&quot;UTF-8&quot;));
+ // No transaction handle is used on the cursor read or write
+ // methods.
+ cursor.putCurrent(data);
+ }
+
+ cursor.close();
+ cursor = null;
+ txn.commit();
+ txn = null;
+ } catch (Exception e) {
+ if (cursor != null) {
+ cursor.close();
+ }
+ if (txn != null) {
+ txn.abort();
+ txn = null;
+ }
+ }
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Nested Transactions </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Secondary Indices with Transaction Applications</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/txnexample_java.html b/db/docs/gsg_txn/JAVA/txnexample_java.html
new file mode 100644
index 000000000..74ff5e153
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/txnexample_java.html
@@ -0,0 +1,801 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Transaction Example</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="previous" href="wrapup.html" title="Chapter 6. Summary and Examples" />
+ <link rel="next" href="inmem_txnexample_java.html" title="In-Memory Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Transaction Example</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="wrapup.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 6. Summary and Examples</th>
+ <td width="20%" align="right"> <a accesskey="n" href="inmem_txnexample_java.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnexample_java"></a>Transaction Example</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The following Java code provides a fully functional example of a
+ multi-threaded transactional DB application.
+ The example opens an environment and database, and then creates 5
+ threads, each of which writes 500 records to the database. The keys
+ used for these writes are pre-determined strings, while the data is
+ a class that contains randomly generated data. This means that the actual
+ data is arbitrary and therefore uninteresting; we picked it only
+ because it requires minimum code to implement and therefore will
+ stay out of the way of the main points of this example.
+ </p>
+ <p>
+ Each thread writes 10 records under a single transaction
+ before committing and writing another 10 (this is repeated 50
+ times). At the end of each transaction, but before committing, each
+ thread calls a function that uses a cursor to read every record in
+ the database. We do this in order to make some points about
+ database reads in a transactional environment.
+ </p>
+ <p>
+ Of course, each writer thread performs deadlock detection as
+ described in this manual. In addition, normal recovery is performed
+ when the environment is opened.
+ </p>
+ <p>
+ To implement this example, we need three classes:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <tt class="literal">TxnGuide.java</tt>
+ </p>
+ <p>
+ This is the main class for the application. It performs
+ environment and database management, spawns threads, and
+ creates the data that is placed in the database. See <a href="txnexample_java.html#txnguideexample">TxnGuide.java</a> for implementation details.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">DBWriter.java</tt>
+ </p>
+ <p>
+ This class extends <tt class="literal">java.lang.Thread</tt>, and
+ as such it is our thread implementation. It is responsible
+ for actually reading and writing to the database. It also
+ performs all of our transaction management. See <a href="txnexample_java.html#dbwriter">DBWriter.java</a> for
+ implementation details.
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="literal">PayloadData.java</tt>
+ </p>
+ <p>
+ This is a data class used to encapsulate several data
+ fields. It is fairly uninteresting, except that the usage
+ of a class means that we have to use the bind APIs to
+ serialize it for storage in the database. See <a href="txnexample_java.html#payloaddata">PayloadData.java</a> for
+ implementation details.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="txnguideexample"></a>TxnGuide.java</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ The main class in our example application is used to open and
+ close our environment and database. It also spawns all the
+ threads that we need. We start with the normal series
+ of Java package and import statements, followed by our class
+ declaration:
+ </p>
+ <pre class="programlisting">// File TxnGuide.java
+
+package db.txn;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.LockDetectMode;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+public class TxnGuide { </pre>
+ <p>
+ Next we declare our class' private data members. Mostly these are used
+ for constants such as the name of the database that we are opening and
+ the number of threads that we are spawning. However, we also declare
+ our environment and database handles here.
+</p>
+ <pre class="programlisting"> private static String myEnvPath = &quot;./&quot;;
+ private static String dbName = &quot;mydb.db&quot;;
+ private static String cdbName = &quot;myclassdb.db&quot;;
+
+ // DB handles
+ private static Database myDb = null;
+ private static Database myClassDb = null;
+ private static Environment myEnv = null;
+
+ private static final int NUMTHREADS = 5; </pre>
+ <p>
+ Next, we implement our <tt class="function">usage()</tt> method. This
+ application optionally accepts a single command line argument which is
+ used to identify the environment home directory.
+</p>
+ <pre class="programlisting"> private static void usage() {
+ System.out.println(&quot;TxnGuide [-h &lt;env directory&gt;]&quot;);
+ System.exit(-1);
+ } </pre>
+ <p>
+ Now we implement our <tt class="function">main()</tt> method. This method
+ simply calls the methods to parse the command line arguments and open
+ the environment and database. It also creates the stored class catalog
+ that we use for serializing the data that we want to store in our
+ database. Finally, it creates and then joins the database writer
+ threads.
+</p>
+ <pre class="programlisting"> public static void main(String args[]) {
+ try {
+ // Parse the arguments list
+ parseArgs(args);
+ // Open the environment and databases
+ openEnv();
+ // Get our class catalog (used to serialize objects)
+ StoredClassCatalog classCatalog =
+ new StoredClassCatalog(myClassDb);
+
+ // Start the threads
+ DBWriter[] threadArray;
+ threadArray = new DBWriter[NUMTHREADS];
+ for (int i = 0; i &lt; NUMTHREADS; i++) {
+ threadArray[i] = new DBWriter(myEnv, myDb, classCatalog);
+ threadArray[i].start();
+ }
+
+ // Join the threads. That is, wait for each thread to
+ // complete before exiting the application.
+ for (int i = 0; i &lt; NUMTHREADS; i++) {
+ threadArray[i].join();
+ }
+ } catch (Exception e) {
+ System.err.println(&quot;TxnGuide: &quot; + e.toString());
+ e.printStackTrace();
+ } finally {
+ closeEnv();
+ }
+ System.out.println(&quot;All done.&quot;);
+ } </pre>
+ <p>
+ Next we implement <tt class="function">openEnv()</tt>. This method is used
+ to open the environment and then a database in that environment. Along
+ the way, we make sure that every handle is free-threaded, and that the
+ transactional subsystem is correctly initialized. Because this is a
+ concurrent application, we also declare how we want deadlock detection
+ to be performed. In this case, we use DB's internal block detector
+ to determine whether a deadlock has occurred when a thread attempts to
+ acquire a lock. We also indicate that we want the deadlocked thread
+ with the <span class="emphasis"><em>youngest</em></span> lock to receive deadlock
+ notification.
+</p>
+ <p>
+ Notice that we also cause normal recovery to be run when we open the
+ environment. This is the standard and recommended thing to do whenever
+ you start up a transactional application.
+</p>
+ <p>
+ For the database open, notice that we open the database such that it
+ supports duplicate records. This is required purely by the data that
+ we are writing to the database, and it is only necessary if you run the
+ application more than once without first deleting the environment.
+</p>
+ <p>
+ Finally, notice that we open the database such that it supports
+ uncommitted reads. We do this so that some cursor activity later in
+ this example can read uncommitted data. If we did not do this, then
+ our <tt class="methodname">countRecords()</tt> method described later in
+ this example would cause our thread to self-deadlock. This is because
+ the cursor could not be opened to support uncommitted reads (that flag
+ on the cursor open would, in fact, be silently ignored).
+</p>
+ <pre class="programlisting"> private static void openEnv() throws DatabaseException {
+ System.out.println(&quot;opening env&quot;);
+
+ // Set up the environment.
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setAllowCreate(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setRunRecovery(true);
+ myEnvConfig.setTransactional(true);
+ // EnvironmentConfig.setThreaded(true) is the default behavior
+ // in Java, so we do not have to do anything to cause the
+ // environment handle to be free-threaded.
+
+ // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction that has
+ // performed the least amount of write activity to
+ // receive the deadlock notification, if any.
+ myEnvConfig.setLockDetectMode(LockDetectMode.MINWRITE);
+
+ // Set up the database
+ DatabaseConfig myDbConfig = new DatabaseConfig();
+ myDbConfig.setType(DatabaseType.BTREE);
+ myDbConfig.setAllowCreate(true);
+ myDbConfig.setTransactional(true);
+ myDbConfig.setSortedDuplicates(true);
+ myDbConfig.setReadUncomitted(true);
+ // no DatabaseConfig.setThreaded() method available.
+ // db handles in java are free-threaded so long as the
+ // env is also free-threaded.
+
+ try {
+ // Open the environment
+ myEnv = new Environment(new File(myEnvPath), // Env home
+ myEnvConfig);
+
+ // Open the database. Do not provide a txn handle. This open
+ // is auto committed because DatabaseConfig.setTransactional()
+ // is true.
+ myDb = myEnv.openDatabase(null, // txn handle
+ dbName, // Database file name
+ null, // Database name
+ myDbConfig);
+
+ // Used by the bind API for serializing objects
+ // Class database must not support duplicates
+ myDbConfig.setSortedDuplicates(false);
+ myClassDb = myEnv.openDatabase(null, // txn handle
+ cdbName, // Database file name
+ null, // Database name,
+ myDbConfig);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(&quot;openEnv: &quot; + fnfe.toString());
+ System.exit(-1);
+ }
+ } </pre>
+ <p>
+ Finally, we implement the methods used to close our environment and
+ databases, parse the command line arguments, and provide our class
+ constructor. This is fairly standard code and it is mostly
+ uninteresting from the perspective of this manual. We include it here
+ purely for the purpose of completeness.
+</p>
+ <pre class="programlisting"> private static void closeEnv() {
+ System.out.println(&quot;Closing env and databases&quot;);
+ if (myDb != null ) {
+ try {
+ myDb.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: myDb: &quot; +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myClassDb != null ) {
+ try {
+ myClassDb.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: myClassDb: &quot; +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myEnv != null ) {
+ try {
+ myEnv.close();
+ } catch (DatabaseException e) {
+ System.err.println(&quot;closeEnv: &quot; + e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private TxnGuide() {}
+
+ private static void parseArgs(String args[]) {
+ for(int i = 0; i &lt; args.length; ++i) {
+ if (args[i].startsWith(&quot;-&quot;)) {
+ switch(args[i].charAt(1)) {
+ case 'h':
+ myEnvPath = new String(args[++i]);
+ break;
+ default:
+ usage();
+ }
+ }
+ }
+ }
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="payloaddata"></a>PayloadData.java</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Before we show the implementation of the database writer thread, we
+ need to show the class that we will be placing into the database. This
+ class is fairly minimal. It simply allows you to store and retrieve an
+ <tt class="literal">int</tt>, a <tt class="literal">String</tt>, and a
+ <tt class="literal">double</tt>. We will be using the DB bind API from
+ within the writer thread to serialize instances of this class and place
+ them into our database.
+</p>
+ <pre class="programlisting">package db.txn;
+
+import java.io.Serializable;
+
+public class PayloadData implements Serializable {
+ private int oID;
+ private String threadName;
+ private double doubleData;
+
+ PayloadData(int id, String name, double data) {
+ oID = id;
+ threadName = name;
+ doubleData = data;
+ }
+
+ public double getDoubleData() { return doubleData; }
+ public int getID() { return oID; }
+ public String getThreadName() { return threadName; }
+} </pre>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="dbwriter"></a>DBWriter.java</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ <tt class="literal">DBWriter.java</tt> provides the implementation
+ for our database writer thread. It is responsible for:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ All transaction management.
+ </p>
+ </li>
+ <li>
+ <p>
+ Responding to deadlock exceptions.
+ </p>
+ </li>
+ <li>
+ <p>
+ Providing data to be stored into the database.
+ </p>
+ </li>
+ <li>
+ <p>
+ Serializing and then writing the data to the database.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ In order to show off some of the ACID properties provided
+ by DB's transactional support,
+ <tt class="literal">DBWriter.java</tt> does some things in a less
+ efficient way than you would probably decide to use in a
+ true production application. First, it groups 10 database
+ writes together in a single transaction when you could just
+ as easily perform one write for each transaction. If you
+ did this, you could use auto commit for the individual
+ database writes, which means your code would be slightly
+ simpler and you would run a <span class="emphasis"><em>much</em></span>
+ smaller chance of encountering blocked and deadlocked
+ operations. However, by doing things this way, we are able
+ to show transactional atomicity, as well as deadlock
+ handling.
+ </p>
+ <p>
+ At the end of each transaction,
+ <tt class="literal">DBWriter.java</tt> runs a cursor over the
+ entire database by way of counting the number of records
+ currently existing in the database. There are better ways
+ to discover this information, but in this case we want to
+ make some points regarding cursors, transactional
+ applications, and deadlocking (we get into this in more
+ detail later in this section).
+ </p>
+ <p>
+ To begin, we provide the usual package and import statements, and we declare our class:
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.tuple.StringBinding;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.CursorConfig;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DeadlockException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.db.Transaction;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Random;
+
+public class DBWriter extends Thread
+{ </pre>
+ <p>
+ Next we declare our private data members. Notice that we get handles
+ for the environment and the database. We also obtain a handle for an
+ <tt class="classname">EntryBinding</tt>. We will use this to serialize
+ <tt class="classname">PayloadData</tt> class instances (see <a href="txnexample_java.html#payloaddata">PayloadData.java</a>) for storage in
+ the database. The random number generator that we instantiate is used
+ to generate unique data for storage in the database. The
+ <tt class="literal">MAX_RETRY</tt> variable is used to define how many times
+ we will retry a transaction in the face of a deadlock. And, finally,
+ <tt class="literal">keys</tt> is a <tt class="classname">String</tt> array that
+ holds the keys used for our database entries.
+</p>
+ <pre class="programlisting"> private Database myDb = null;
+ private Environment myEnv = null;
+ private EntryBinding dataBinding = null;
+ private Random generator = new Random();
+
+
+ private static final int MAX_RETRY = 20;
+
+ private static String[] keys = {&quot;key 1&quot;, &quot;key 2&quot;, &quot;key 3&quot;,
+ &quot;key 4&quot;, &quot;key 5&quot;, &quot;key 6&quot;,
+ &quot;key 7&quot;, &quot;key 8&quot;, &quot;key 9&quot;,
+ &quot;key 10&quot;}; </pre>
+ <p>
+ Next we implement our class constructor. The most interesting thing
+ we do here is instantiate a serial binding for serializing
+ <tt class="classname">PayloadData</tt> instances.
+ </p>
+ <pre class="programlisting"> // Constructor. Get our DB handles from here
+ DBWriter(Environment env, Database db, StoredClassCatalog scc)
+ throws DatabaseException {
+ myDb = db;
+ myEnv = env;
+ dataBinding = new SerialBinding(scc, PayloadData.class);
+ } </pre>
+ <p>
+ Now we implement our thread's <tt class="methodname">run()</tt> method.
+ This is the method that is run when <tt class="classname">DBWriter</tt>
+ threads are started in the main program (see <a href="txnexample_java.html#txnguideexample">TxnGuide.java</a>).
+</p>
+ <pre class="programlisting"> // Thread method that writes a series of records
+ // to the database using transaction protection.
+ // Deadlock handling is demonstrated here.
+ public void run () { </pre>
+ <p>
+ The first thing we do is get a <tt class="literal">null</tt> transaction
+ handle before going into our main loop. We also begin the top transaction loop here that causes our application to
+ perform 50 transactions.
+</p>
+ <pre class="programlisting"> Transaction txn = null;
+
+ // Perform 50 transactions
+ for (int i=0; i&lt;50; i++) { </pre>
+ <p>
+ Next we declare a <tt class="literal">retry</tt> variable. This is used to
+ determine whether a deadlock should result in our retrying the
+ operation. We also declare a <tt class="literal">retry_count</tt> variable
+ that is used to make sure we do not retry a transaction forever in the
+ unlikely event that the thread is unable to ever get a necessary lock.
+ (The only thing that might cause this is if some other thread dies
+ while holding an important lock. This is the only code that we have to
+ guard against that because the simplicity of this application makes it
+ highly unlikely that it will ever occur.)
+</p>
+ <pre class="programlisting"> boolean retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) { </pre>
+ <p>
+ Now we go into the <tt class="literal">try</tt> block that we use for
+ deadlock detection. We also begin our transaction here.
+</p>
+ <pre class="programlisting"> // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Get a transaction
+ txn = myEnv.beginTransaction(null, null); </pre>
+ <p>
+ Now we write 10 records under the transaction that we have just begun.
+ By combining multiple writes together under a single transaction,
+ we increase the likelihood that a deadlock will occur. Normally,
+ you want to reduce the potential for a deadlock and in this case
+ the way to do that is to perform a single write per transaction. In
+ other words, we <span class="emphasis"><em>should</em></span> be using auto commit to
+ write to our database for this workload.
+ </p>
+ <p>
+ However, we want to show deadlock handling and by performing
+ multiple writes per transaction we can actually observe deadlocks
+ occurring. We also want to underscore the idea that you can
+ combing multiple database operations together in a single atomic
+ unit of work. So for our example, we do the (slightly) wrong thing.
+ </p>
+ <p>
+ Further, notice that we store our key into a
+ <tt class="classname">DatabaseEntry</tt> using
+ <tt class="classname">com.sleepycat.bind.tuple.StringBinding</tt> to
+ perform the serialization. Also, when we instantiate the
+ <tt class="classname">PayloadData</tt> object, we call
+ <tt class="methodname">getName()</tt> which gives us the string
+ representation of this thread's name, as well as
+ <tt class="methodname">Random.nextDouble()</tt> which gives us a random
+ double value. This latter value is used so as to avoid duplicate
+ records in the database.
+</p>
+ <pre class="programlisting">
+ // Write 10 records to the db
+ // for each transaction
+ for (int j = 0; j &lt; 10; j++) {
+ // Get the key
+ DatabaseEntry key = new DatabaseEntry();
+ StringBinding.stringToEntry(keys[j], key);
+
+ // Get the data
+ PayloadData pd = new PayloadData(i+j, getName(),
+ generator.nextDouble());
+ DatabaseEntry data = new DatabaseEntry();
+ dataBinding.objectToEntry(pd, data);
+
+ // Do the put
+ myDb.put(txn, key, data);
+ } </pre>
+ <p>
+ Having completed the inner database write loop, we could simply
+ commit the transaction and continue on to the next block of 10
+ writes. However, we want to first illustrate a few points about
+ transactional processing so instead we call our
+ <tt class="function">countRecords()</tt> method before calling the transaction
+ commit. <tt class="function">countRecords()</tt> uses a cursor to read every
+ record in the database and return a count of the number of records
+ that it found.
+ </p>
+ <p>
+ Because
+ <tt class="function">countRecords()</tt>
+ reads every record in the database, if used incorrectly the thread
+ will self-deadlock. The writer thread has just written 500 records
+ to the database, but because the transaction used for that write
+ has not yet been committed, each of those 500 records are still
+ locked by the thread's transaction. If we then simply run a
+ non-transactional cursor over the database from within the same
+ thread that has locked those 500 records, the cursor will
+ block when it tries to read one of those transactional
+ protected records. The thread immediately stops operation at that
+ point while the cursor waits for the read lock it has
+ requested. Because that read lock will never be released (the thread
+ can never make any forward progress), this represents a
+ self-deadlock for the thread.
+ </p>
+ <p>
+ There are three ways to prevent this self-deadlock:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ We can move the call to
+ <tt class="function">countRecords()</tt> to a point after the
+ thread's transaction has committed.
+ </p>
+ </li>
+ <li>
+ <p>
+ We can allow <tt class="function">countRecords()</tt> to
+ operate under the same transaction as all of the writes
+ were performed.
+ </p>
+ </li>
+ <li>
+ <p>
+ We can reduce our isolation guarantee for the application
+ by allowing uncommitted reads.
+ </p>
+ </li>
+ </ol>
+ </div>
+ <p>
+ For this example, we choose to use option 3 (uncommitted reads) to avoid
+ the deadlock. This means that we have to open our database such
+ that it supports uncommitted reads, and we have to open our cursor handle
+ so that it knows to perform uncommitted reads.
+ </p>
+ <p>
+ Note that in <a href="inmem_txnexample_java.html">In-Memory Transaction Example</a>,
+ we simply perform the cursor operation using the same transaction
+ as is used for the thread's writes.
+ </p>
+ <pre class="programlisting"> // commit
+ System.out.println(getName() + &quot; : committing txn : &quot;
+ + i);
+
+ // Using uncommitted reads to avoid the deadlock, so null
+ // is passed for the transaction here.
+ System.out.println(getName() + &quot; : Found &quot; +
+ countRecords(null) + &quot; records in the database.&quot;); </pre>
+ <p>
+ Having performed this somewhat inelegant counting of the records in the
+ database, we can now commit the transaction.
+</p>
+ <pre class="programlisting"> try {
+ txn.commit();
+ txn = null;
+ } catch (DatabaseException e) {
+ System.err.println(&quot;Error on txn commit: &quot; +
+ e.toString());
+ }
+ retry = false; </pre>
+ <p>
+ If all goes well with the commit, we are done and we can move on to the
+ next batch of 10 records to add to the database. However, in the event
+ of an error, we must handle our exceptions correctly. The first of
+ these is a deadlock exception. In the event of a deadlock, we want to
+ abort and retry the transaction, provided that we have not already
+ exceeded our retry limit for this transaction.
+</p>
+ <pre class="programlisting"> } catch (DeadlockException de) {
+ System.out.println(&quot;################# &quot; + getName() +
+ &quot; : caught deadlock&quot;);
+ // retry if necessary
+ if (retry_count &lt; MAX_RETRY) {
+ System.err.println(getName() +
+ &quot; : Retrying operation.&quot;);
+ retry = true;
+ retry_count++;
+ } else {
+ System.err.println(getName() +
+ &quot; : out of retries. Giving up.&quot;);
+ retry = false;
+ } </pre>
+ <p>
+ In the event of a standard, non-specific database exception, we simply
+ log the exception and then give up (the transaction is not retried).
+</p>
+ <pre class="programlisting"> } catch (DatabaseException e) {
+ // abort and don't retry
+ retry = false;
+ System.err.println(getName() +
+ &quot; : caught exception: &quot; + e.toString());
+ System.err.println(getName() +
+ &quot; : errno: &quot; + e.getErrno());
+ e.printStackTrace(); </pre>
+ <p>
+ And, finally, we always abort the transaction if the transaction handle
+ is not null. Note that immediately after committing our transaction, we
+ set the transaction handle to null to guard against aborting a
+ transaction that has already been committed.
+</p>
+ <pre class="programlisting"> } finally {
+ if (txn != null) {
+ try {
+ txn.abort();
+ } catch (Exception e) {
+ System.err.println(&quot;Error aborting txn: &quot; +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+ } </pre>
+ <p>
+ The final piece of our <tt class="classname">DBWriter</tt> class is the
+ <tt class="methodname">countRecords()</tt> implementation. Notice how in
+ this example we open the cursor such that it performs uncommitted
+ reads:
+</p>
+ <pre class="programlisting"> // A method that counts every record in the database.
+
+ // Note that this method exists only for illustrative purposes.
+ // A more straight-forward way to count the number of records in
+ // a database is to use the Database.getStats() method.
+ private int countRecords(Transaction txn) throws DatabaseException {
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+ int count = 0;
+ Cursor cursor = null;
+
+ try {
+ // Get the cursor
+ CursorConfig cc = new CursorConfig();
+ cc.setReadUncomitted(true);
+ cursor = myDb.openCursor(txn, cc);
+ while (cursor.getNext(key, data, LockMode.DEFAULT) ==
+ OperationStatus.SUCCESS) {
+
+ count++;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return count;
+
+ }
+} </pre>
+ </div>
+ <p>
+ This completes our transactional example. If you would like to
+ experiment with this code, you can find the example in the following
+ location in your DB distribution:
+</p>
+ <pre class="programlisting"><span class="emphasis"><em>DB_INSTALL</em></span>/examples_java/src/db/txn</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="wrapup.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="wrapup.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="inmem_txnexample_java.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Chapter 6. Summary and Examples </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> In-Memory Transaction Example</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/txnindices.html b/db/docs/gsg_txn/JAVA/txnindices.html
new file mode 100644
index 000000000..ace15812a
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/txnindices.html
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Secondary Indices with Transaction Applications</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
+ <link rel="previous" href="txncursor.html" title="Transactional Cursors" />
+ <link rel="next" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Secondary Indices with Transaction Applications</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 3. Transaction Basics</th>
+ <td width="20%" align="right"> <a accesskey="n" href="maxtxns.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnindices"></a>Secondary Indices with Transaction Applications</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ You can use transactions with your secondary indices so long as you
+
+ <span>
+ open the secondary index so that it is transactional.
+ </span>
+
+
+ </p>
+ <p>
+ All other aspects of using secondary indices with transactions are
+ identical to using secondary indices without transactions. In
+ addition, transaction-protecting
+
+ <span>
+ secondary cursors is performed just as you protect normal
+ cursors &#8212; you simply have to make sure the cursor is
+ opened using a transaction handle, and that the cursor is
+ closed before the handle is either either committed or
+ aborted.
+ </span>
+ See <a href="txncursor.html">Transactional Cursors</a> for details.
+ </p>
+ <p>
+ Note that when you use transactions to protect your database writes, your secondary indices are protected from
+ corruption because updates to the primary and the secondaries are performed in a single atomic transaction.
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting">package db.GettingStarted;
+
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryDatabase;
+import com.sleepycat.db.SecondaryConfig;
+
+import java.io.FileNotFoundException;
+
+...
+
+// Environment and primary database opens omitted.
+
+SecondaryConfig mySecConfig = new SecondaryConfig();
+mySecConfig.setAllowCreate(true);
+mySecConfig.setType(DatabaseType.BTREE);
+mySecConfig.setTransactional(true);
+
+SecondaryDatabase mySecDb = null;
+try {
+ // A fake tuple binding that is not actually implemented anywhere.
+ // The tuple binding is dependent on the data in use.
+ // See the Getting Started Guide for details
+ TupleBinding myTupleBinding = new MyTupleBinding();
+
+ // Open the secondary. FullNameKeyCreator is not actually implemented
+ // anywhere. See the Getting Started Guide for details.
+ FullNameKeyCreator keyCreator = new FullNameKeyCreator(myTupleBinding);
+
+ // Set the key creator on the secondary config object.
+ mySecConfig.setKeyCreator(keyCreator);
+
+ // Perform the actual open. Because this database is configured to be
+ // transactional, the open is automatically wrapped in a transaction.
+ // - myEnv is the environment handle.
+ // - myDb is the primary database handle.
+ String secDbName = &quot;mySecondaryDatabase&quot;;
+ mySecDb = myEnv.openSecondary(null, secDbName, null, myDb, mySecConfig);
+} catch (DatabaseException de) {
+ // Exception handling goes here ...
+} catch (FileNotFoundException fnfe) {
+ // Exception handling goes here ...
+}</pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="usingtxns.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="maxtxns.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Transactional Cursors </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Configuring the Transaction Subsystem</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/txnnowait.html b/db/docs/gsg_txn/JAVA/txnnowait.html
new file mode 100644
index 000000000..4636f75b1
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/txnnowait.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>No Wait on Blocks</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
+ <link rel="previous" href="readmodifywrite.html" title="Read/Modify/Write" />
+ <link rel="next" href="reversesplit.html" title="Reverse BTree Splits" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">No Wait on Blocks</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="readmodifywrite.html">Prev</a> </td>
+ <th width="60%" align="center">Chapter 4. Concurrency</th>
+ <td width="20%" align="right"> <a accesskey="n" href="reversesplit.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnnowait"></a>No Wait on Blocks</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Normally when a DB transaction is blocked on a lock request, it
+ must wait until the requested lock becomes available before its
+ thread-of-control can proceed. However, it is possible to configure a
+ transaction handle such that it will report a deadlock rather
+ than wait for the block to clear.
+ </p>
+ <p>
+ You do this on a transaction by transaction basis by specifying
+
+
+
+ <span>
+ <tt class="literal">true</tt>
+ to the
+ <tt class="methodname">TransactionConfig.setNoWait()</tt>
+ method.
+ </span>
+ </p>
+ <p>
+ For example:
+ </p>
+ <pre class="programlisting"> Transaction txn = null;
+ try {
+ TransactionConfig tc = new TransactionConfig();
+ tc.setNoWait(true);
+ txn = myEnv.beginTransaction(null, tc);
+
+ ...
+ } catch (DatabaseException de) {
+ // Deadlock detection and exception handling omitted
+ // for brevity
+ ... </pre>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="readmodifywrite.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="txnconcurrency.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="reversesplit.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Read/Modify/Write </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Reverse BTree Splits</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/usingtxns.html b/db/docs/gsg_txn/JAVA/usingtxns.html
new file mode 100644
index 000000000..38fe7a16b
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/usingtxns.html
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 3. Transaction Basics</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="envopen.html" title="Opening a Transactional Environment and&#10; Database&#10; &#10; " />
+ <link rel="next" href="abortresults.html" title="Aborting a Transaction" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 3. Transaction Basics</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="envopen.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="usingtxns"></a>Chapter 3. Transaction Basics</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="usingtxns.html#commitresults">Committing a Transaction</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="abortresults.html">Aborting a Transaction</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="autocommit.html">Auto Commit</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="nestedtxn.html">Nested Transactions</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txncursor.html">Transactional Cursors</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnindices.html">Secondary Indices with Transaction Applications</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="maxtxns.html">Configuring the Transaction Subsystem</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Once you have enabled transactions for your environment and your databases,
+ you can use them to protect your database operations. You do this by
+ acquiring a transaction handle and then using that handle for any
+ database operation that you want to participate in that transaction.
+ </p>
+ <p>
+ You obtain a transaction handle using the
+
+
+ <span><tt class="methodname">Environment.beginTransaction()</tt> method.</span>
+
+
+ </p>
+ <p>
+ Once you have completed all of the operations that you want to include
+ in the transaction, you must commit the transaction using the
+
+
+ <span><tt class="methodname">Transaction.commit()</tt> method.</span>
+
+
+
+ </p>
+ <p>
+ If, for any reason, you want to abandon the transaction, you abort
+ it using
+
+
+ <span><tt class="methodname">Transaction.abort()</tt>.</span>
+
+
+
+
+ </p>
+ <p>
+ Any transaction handle that has been committed or aborted can no longer
+ be used by your application.
+ </p>
+ <p>
+ Finally, you must make sure that all transaction handles are either
+ committed or aborted before closing your databases and environment.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ If you only want to transaction protect a single database write operation, you can use auto commit to
+ perform the transaction administration. When you use auto commit, you do not need an explicit transaction
+ handle. See <a href="autocommit.html">Auto Commit</a> for more information.
+ </p>
+ </div>
+ <p>
+ For example, the following example opens a transactional-enabled environment and
+ database, obtains a transaction handle, and then performs a write
+ operation under its protection. In the event of any failure in the
+ write operation, the transaction is aborted and the database is left in a
+ state as if no operations had ever been attempted in the first place.
+ </p>
+ <pre class="programlisting">package db.txn;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.Transaction;
+
+import java.io.File;
+
+...
+
+Database myDatabase = null;
+Environment myEnv = null;
+try {
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setTransactional(true);
+
+ myEnv = new Environment(new File(&quot;/my/env/home&quot;),
+ myEnvConfig);
+
+ // Open the database.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ myDatabase = myEnv.openDatabase(null, // txn handle
+ &quot;sampleDatabase&quot;, // db file name
+ null, // db name
+ dbConfig);
+ String keyString = &quot;thekey&quot;;
+ String dataString = &quot;thedata&quot;;
+ DatabaseEntry key =
+ new DatabaseEntry(keyString.getBytes(&quot;UTF-8&quot;));
+ DatabaseEntry data =
+ new DatabaseEntry(dataString.getBytes(&quot;UTF-8&quot;));
+
+ Transaction txn = myEnv.beginTransaction(null, null);
+
+ try {
+ myDatabase.put(txn, key, data);
+ txn.commit();
+ } catch (Exception e) {
+ if (txn != null) {
+ txn.abort();
+ txn = null;
+ }
+ }
+
+} catch (DatabaseException de) {
+ // Exception handling goes here
+} </pre>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="commitresults"></a>Committing a Transaction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to fully understand what is happening when you commit
+ a transaction, you must first understand a little about what
+ DB is doing with
+
+ <span>
+ the logging subsystem.
+ </span>
+
+
+
+ Logging causes all database write operations to be identified in
+
+ <span>logs, and by default these
+ logs are backed by files on disk. These logs are used to restore your databases
+ </span>
+
+
+
+ in the event of a system or application failure, so by performing
+ logging, DB ensures the integrity of your data.
+ </p>
+ <p>
+ Moreover, DB performs <span class="emphasis"><em>write-ahead</em></span>
+ logging. This means that information is written to the logs
+ <span class="emphasis"><em>before</em></span> the actual database is changed.
+ This means that all write activity performed under the
+ protection of the transaction is noted in the log before
+ the transaction is committed. Be aware, however, that database
+ maintains logs in-memory. If you are backing your logs on
+ disk, the log information will eventually be written to the log
+ files, but while the transaction is on-going the log data may be
+ held only in memory.
+ </p>
+ <p>
+ When you commit a transaction, the following occurs:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ A commit record is written to the log. This
+ indicates that the modifications made by the
+ transaction are now permanent. By default, this write is performed synchronously to disk so the
+ commit record arrives in the log files before any other actions are taken.
+ </p>
+ </li>
+ <li>
+ <p>
+ Any log information held in memory is (by default)
+ synchronously written to disk. Note that this requirement can be
+ relaxed, depending on the type of commit you perform.
+ See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a> for
+ more information.
+ <span>Also, if you are
+ maintaining your logs entirely in-memory, then this
+ step will of course not be taken. To configure your
+ logging system for in-memory usage, see
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ All locks held by the transaction are released. This means
+ that read operations performed by other transactions or
+ threads of control can now see the modifications without
+ resorting to uncommitted reads (see <a href="isolation.html#dirtyreads">Reading Uncommitted Data</a> for more information).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ To commit a transaction, you simply call
+
+
+ <span><tt class="methodname">Transaction.commit()</tt>.</span>
+
+
+ </p>
+ <p>
+ Notice that committing a transaction does not necessarily cause data
+ modified in your memory cache to be written to the files
+ backing your databases on disk. Dirtied database pages are written
+ for a number of reasons, but a transactional
+ commit is not one of them. The following are the things that can cause a dirtied
+ database page to be written to the backing database file:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Checkpoints.
+ </p>
+ <p>
+ Checkpoints cause all dirtied pages currently existing
+ in the cache to be written to disk, and a checkpoint
+ record is then written to the logs. You can run checkpoints
+ explicitly. For more information on checkpoints,
+ see <a href="filemanagement.html#checkpoints">Checkpoints</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Cache is full.
+ </p>
+ <p>
+ If the in-memory cache fills up, then dirtied pages
+ might be written to disk in order to free up space for other
+ pages that your application needs to use. Note that if
+ dirtied pages are written to the database files, then
+ any log records that describe how those pages were
+ dirtied are written to disk before the database
+ pages are written.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Be aware that because your transaction commit caused database
+ modifications recorded in your logs to be forced to disk, your modifications
+ are by default &quot;persistent&quot; in that they can be recovered in the event of
+ an application or system failure. However, recovery time is
+ gated by how much data has been modified since the last
+ checkpoint, so for applications that perform a lot of writes,
+ you may want to run a checkpoint with some frequency.
+ </p>
+ <p>
+ Note that once you have committed a transaction, the transaction
+ handle that you used for the transaction is no longer valid. To
+ perform database activities under the control of a new
+ transaction, you must obtain a fresh transaction handle.
+ </p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="nodurabletxn"></a>Non-Durable Transactions</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ As previously noted, by default transaction commits are
+ durable because they cause the modifications performed
+ under the transaction to be synchronously recorded in
+ your on-disk log files. However, it is possible to use
+ non-durable transactions.
+ </p>
+ <p>
+ You may want non-durable transactions for performance
+ reasons. For example, you might be using transactions
+ simply for the isolation guarantee.
+
+ <span>
+ In this case, you might
+ not want a durability guarantee and so you may want to
+ prevent the disk I/O that normally accompanies a
+ transaction commit.
+ </span>
+
+ </p>
+ <p>
+ There are several ways to remove the durability guarantee
+ for your transactions:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Specify
+
+ <span>
+ <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setTxnNoSync()</tt>
+
+ method.
+ </span>
+ This causes DB to not synchronously force any
+ <span>
+ log
+ </span>
+ data to disk upon transaction commit.
+
+ <span>
+ That is, the modifications are held entirely
+ in the in-memory cache and the logging
+ information is not forced to the filesystem for
+ long-term storage.
+ </span>
+
+ Note, however, that the
+ <span>
+ logging
+ </span>
+ data will eventually make it to the filesystem (assuming no
+ application or OS crashes) as a part of DB's
+ management of its logging buffers and/or cache.
+ </p>
+ <p>
+ This form of a commit provides a weak durability
+ guarantee because data loss can occur due to
+ an application<span>, JVM,</span>
+ or OS crash.
+ </p>
+ <p>
+ This behavior is specified on a per-environment
+ handle basis. In order for your application to exhibit consistent
+ behavior, you need to specify this
+
+ <span>method</span>
+ for all of the environment handles used in your application.
+ </p>
+ <p>
+ You can achieve this behavior on a transaction by transaction basis by
+
+
+ <span>
+ using <tt class="methodname">Transaction.commitNoSync()</tt>
+
+ to commit your transaction, or by specifying <tt class="literal">true</tt> to the
+ <tt class="methodname">TransactionConfig.setNoSync()</tt> method when starting the
+ transaction.
+ </span>
+
+ </p>
+ </li>
+ <li>
+ <p>
+ Specify
+
+
+ <span>
+ <tt class="literal">true</tt> to the
+ <tt class="methodname">EnvironmentConfig.setTxnWriteNoSync()</tt>
+ method.
+ </span>
+
+ This causes
+ <span>
+ logging
+ </span>
+ data to be synchronously
+ written to the OS's file system buffers upon
+ transaction commit. The data will eventually be
+ written to disk, but this occurs when the
+ operating system chooses to schedule the
+ activity; the transaction commit can complete
+ successfully before this disk I/O is performed
+ by the OS.
+ </p>
+ <p>
+ This form of commit protects you against application
+ <span>and JVM</span> crashes, but not against OS
+ crashes. This method offers less room for the possibility of data loss than does
+
+ <span><tt class="methodname">EnvironmentConfig.setTxnNoSync()</tt>.</span>
+ </p>
+ <p>
+ This behavior is specified on a per-environment
+ handle basis. In order for your application to exhibit consistent
+ behavior, you need to specify this
+
+ <span>method</span>
+ for all of the environment handles used in your application.
+ </p>
+ <p>
+ You can achieve this behavior on a transaction by transaction basis by
+ <span>
+ using <tt class="methodname">Transaction.commitWriteNoSync()</tt>
+ to commit your transaction, or by specifying <tt class="literal">true</tt> to
+ <tt class="methodname">TransactionConfig.setWriteNoSync()</tt> method when starting the
+ transaction.
+ </span>
+ </p>
+ </li>
+ <li>
+ <p>
+ Maintain your logs entirely in-memory. In this
+ case, your logs are never written to disk. The
+ result is that you lose all durability guarantees.
+ See
+ <a href="logconfig.html#inmemorylogging">Configuring In-Memory Logging</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="envopen.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Opening a Transactional Environment and
+ Database
+
+  </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Aborting a Transaction</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/wrapup.html b/db/docs/gsg_txn/JAVA/wrapup.html
new file mode 100644
index 000000000..698bbbd88
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/wrapup.html
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 6. Summary and Examples</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="logconfig.html" title="Configuring the Logging Subsystem" />
+ <link rel="next" href="txnexample_java.html" title="Transaction Example" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 6. Summary and Examples</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="logconfig.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="txnexample_java.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="wrapup"></a>Chapter 6. Summary and Examples</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="wrapup.html#anatomy">Anatomy of a Transactional Application</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="txnexample_java.html">Transaction Example</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="txnexample_java.html#txnguideexample">TxnGuide.java</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="txnexample_java.html#payloaddata">PayloadData.java</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="txnexample_java.html#dbwriter">DBWriter.java</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="inmem_txnexample_java.html">In-Memory Transaction Example</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ Throughout this manual we have presented the concepts and
+ mechanisms that you need to provide transactional protection for
+ your application. In this chapter, we summarize these
+ mechanisms, and we provide a complete example of a multi-threaded
+ transactional DB application.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="anatomy"></a>Anatomy of a Transactional Application</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactional applications are characterized by performing the
+ following activities:
+ </p>
+ <div class="orderedlist">
+ <ol type="1">
+ <li>
+ <p>
+ Create your environment handle.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open your environment, specifying that the following
+ subsystems be used:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Transactional Subsystem (this also initializes the
+ logging subsystem).
+ </p>
+ </li>
+ <li>
+ <p>
+ Memory pool (the in-memory cache).
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ </li>
+ <li>
+ <p>
+ Locking subsystem (if your application is multi-process or multi-threaded).
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ It is also highly recommended that you run normal recovery
+ upon first environment open. Normal recovery examines only those logs required
+ to ensure your database files are consistent relative to the information found in your
+ log files.
+ </p>
+ </li>
+ <li>
+ <p>
+ Optionally spawn off any utility threads that you might need. Utility
+ threads can be used to run checkpoints periodically, or to
+ periodically run a deadlock detector if you do not want to
+ use DB's built-in deadlock detector.
+ </p>
+ </li>
+ <li>
+ <p>
+ Open whatever database handles that you need.
+ </p>
+ </li>
+ <li>
+ <p>
+ Spawn off worker threads. How many of these you need and
+ how they split their DB workload is entirely up to your
+ application's requirements. However, any worker threads
+ that perform write operations against your databases will do
+ the following:
+ </p>
+ <div class="orderedlist">
+ <ol type="a">
+ <li>
+ <p>
+ Begin a transaction.
+ </p>
+ </li>
+ <li>
+ <p>
+ Perform one or more read and write
+ operations against your databases.
+ </p>
+ </li>
+ <li>
+ <p>
+ Commit the transaction if all goes well.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort and retry the operation if a deadlock is
+ detected.
+ </p>
+ </li>
+ <li>
+ <p>
+ Abort the transaction for most other errors.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </li>
+ <li>
+ <p>
+ On application shutdown:
+ </p>
+ <div class="orderedlist">
+ <ol type="a">
+ <li>
+ <p>
+ Make sure there are no opened cursors.
+ </p>
+ </li>
+ <li>
+ <p>
+ Make sure there are no active transactions. Either
+ abort or commit all transactions before shutting
+ down.
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your databases
+ </p>
+ </li>
+ <li>
+ <p>
+ Close your environment.
+ </p>
+ </li>
+ </ol>
+ </div>
+ </li>
+ </ol>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <h3 class="title">Note</h3>
+ <p>
+ Robust applications should monitor their database worker threads to
+ make sure they have not died unexpectedly. If a thread does
+ terminate abnormally, you must shutdown all your worker threads
+ and then run normal recovery (you will have to reopen your
+ environment to do this). This is the only way to clear any
+ resources (such as a lock or a mutex) that the abnormally
+ exiting worker thread might have been holding at the time that
+ it died.
+ </p>
+ <p>
+ Failure to perform this recovery can cause your
+ still-functioning worker threads to eventually block forever
+ while waiting for a lock that will never be released.
+ </p>
+ </div>
+ <p>
+ In addition to these activities, which are all entirely handled by
+ code within your application, there are some administrative
+ activities that you should perform:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Periodically checkpoint your application. Checkpoints will
+ reduce the time to run recovery in the event that one is
+ required. See <a href="filemanagement.html#checkpoints">Checkpoints</a>
+ for details.
+ </p>
+ </li>
+ <li>
+ <p>
+ Periodically back up your database and log files. This is
+ required in order to fully obtain the durability guarantee
+ made by DB's transaction ACID support. See
+ <a href="backuprestore.html">Backup Procedures</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ You may want to maintain a hot failover if 24x7 processing
+ with rapid restart in the face of a disk hit is important
+ to you. See <a href="hotfailover.html">Using Hot Failovers</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="logconfig.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="txnexample_java.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Configuring the Logging Subsystem </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Transaction Example</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
diff --git a/db/docs/gsg_txn/JAVA/writeblock.jpg b/db/docs/gsg_txn/JAVA/writeblock.jpg
new file mode 100644
index 000000000..4b382b82f
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/writeblock.jpg
Binary files differ
diff --git a/db/docs/images/Oracle_BerkeleyDB_clr.bmp b/db/docs/images/Oracle_BerkeleyDB_clr.bmp
new file mode 100644
index 000000000..1b79293d0
--- /dev/null
+++ b/db/docs/images/Oracle_BerkeleyDB_clr.bmp
Binary files differ
diff --git a/db/docs/index.html b/db/docs/index.html
index 4d3ac02ea..ddde46b03 100644
--- a/db/docs/index.html
+++ b/db/docs/index.html
@@ -1,61 +1,62 @@
-<!--$Id: index_db.html,v 1.63 2004/11/04 21:11:10 bostic Exp $-->
+<!--$Id: index_db.html,v 1.81 2006/09/20 20:07:21 bostic Exp $-->
<html>
<head>
-<title>Berkeley DB (Version: 4.3.27)</title>
+<title>Berkeley DB (Version: 4.5.20)</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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.">
+<img src="images/Oracle_BerkeleyDB_clr.bmp" alt="Oracle Corporation">
</p>
-<center>
-<h1><b>Berkeley DB</b></h1>
-</center>
-
<p>
<table align=center cellpadding=4 border=2>
<tr>
- <th align=center width="50%">API Documentation</th>
+ <th align=center width="50%">Berkeley DB Documentation</th>
<th align=center width="50%">Building Berkeley DB</th>
</tr><tr valign=top>
<td>
<a href="api_c/frame.html">C API</a><br>
- C Getting Started Guide: <a href="gsg/C/BerkeleyDB-Core-C-GSG.pdf">PDF</a>, <a href="gsg/C/index.html">HTML</a>
+ C Getting Started Guide: <a href="gsg/C/BerkeleyDB-Core-C-GSG.pdf">PDF</a>, <a href="gsg/C/index.html">HTML</a><br>
+ C Transaction Processing Guide: <a href="gsg_txn/C/BerkeleyDB-Core-C-Txn.pdf">PDF</a>, <a href="gsg_txn/C/index.html">HTML</a><br>
+ C Replication Guide: <a href="gsg_db_rep/C/Replication-C-GSG.pdf">PDF</a>, <a href="gsg_db_rep/C/index.html">HTML</a>
<p>
<a href="api_cxx/frame.html">C++ API</a><br>
- C++ Getting Started Guide: <a href="gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdf">PDF</a>, <a href="gsg/CXX/index.html">HTML</a>
+ C++ Getting Started Guide: <a href="gsg/CXX/BerkeleyDB-Core-Cxx-GSG.pdf">PDF</a>, <a href="gsg/CXX/index.html">HTML</a><br>
+ C++ Transaction Processing Guide: <a href="gsg_txn/CXX/BerkeleyDB-Core-Cxx-Txn.pdf">PDF</a>, <a href="gsg_txn/CXX/index.html">HTML</a><br>
+ C++ Replication Guide: <a href="gsg_db_rep/CXX/Replication-CXX-GSG.pdf">PDF</a>, <a href="gsg_db_rep/CXX/index.html">HTML</a>
<p>
<a href="java/index.html">Javadoc</a><br>
Java Getting Started Guide: <a href="gsg/JAVA/BerkeleyDB-Core-JAVA-GSG.pdf">PDF</a>, <a href="gsg/JAVA/index.html">HTML</a><br>
- Java Collections Tutorial: <a href="collections/tutorial/BerkeleyDB-Java-Collections.pdf">PDF</a>, <a href="collections/tutorial/index.html">HTML</a>
+ Java Transaction Processing Guide: <a href="gsg_txn/JAVA/BerkeleyDB-Core-JAVA-Txn.pdf">PDF</a>, <a href="gsg_txn/JAVA/index.html">HTML</a><br>
+ Java Replication Guide: <a href="gsg_db_rep/JAVA/Replication-JAVA-GSG.pdf">PDF</a>, <a href="gsg_db_rep/JAVA/index.html">HTML</a><br>
+ Java Collections Tutorial: <a href="collections/tutorial/BerkeleyDB-Java-Collections.pdf">PDF</a>, <a href="collections/tutorial/index.html">HTML</a>
<p>
<a href="api_tcl/api_tcl.html">Tcl API</a><br>
- </td><td>
- <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/upgrade.4.3/toc.html">Upgrading Applications to the 4.3 release</a><br>
- </td>
-
-</tr><tr valign=top>
- <th align=center>Additional Documentation</th>
- <th align=center>Sleepycat Software</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>
+ <a href="ref/toc.html">Berkeley DB Programmer's Reference Guide</a><br>
</td><td>
- <a href="http://www.sleepycat.com/webforms/contactus.shtml">Contacting Sleepycat Software</a><br>
- <a href="http://www.sleepycat.com">Sleepycat Software Home Page</a><br>
- <a href="http://www.sleepycat.com/download/db/index.shtml">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>
+ <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 Windows</a>
+ <p>
+ <a href="ref/upgrade.4.5/toc.html">Upgrading Applications to the 4.5 release</a>
+ <p>
+ <a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Berkeley DB Change Logs and Release Patches</a>
+ <p><br><p>
+ <a href="ref/debug/common.html">Troubleshooting common Berkeley DB problems</a>
+ <p>
+ Oracle Technology Network support forums:<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://forums.oracle.com/forums/forum.jspa?forumID=271">Berkeley DB</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://forums.oracle.com/forums/forum.jspa?forumID=272">Berkeley DB High Availability (Replication)</a><br>
+ <p><br><p>
+ <a href="license/license_db.html">Berkeley DB License</a>
</td>
</tr>
@@ -63,8 +64,8 @@
<p>
<center><b>
-Version 4.3.27, December 22, 2004<br>
-Copyright 1997-2004 Sleepycat Software, Inc. All Rights Reserved
+Version 4.5.20, September 20, 2006<br>
+Copyright 1997-2006 Oracle Corporation. All Rights Reserved
</b></center>
<p>
diff --git a/db/docs/java/allclasses-frame.html b/db/docs/java/allclasses-frame.html
index f475ed53f..5cdf2b548 100644
--- a/db/docs/java/allclasses-frame.html
+++ b/db/docs/java/allclasses-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:50 EDT 2006 -->
<TITLE>
-All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
+All Classes (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -44,6 +44,10 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial" target="classFrame"><I>ClassCatalog</I></A>
<BR>
+<A HREF="com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db" target="classFrame">CompactConfig</A>
+<BR>
+<A HREF="com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db" target="classFrame">CompactStats</A>
+<BR>
<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections" target="classFrame">CurrentTransaction</A>
<BR>
<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db" target="classFrame">Cursor</A>
@@ -76,6 +80,10 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db" target="classFrame"><I>ErrorHandler</I></A>
<BR>
+<A HREF="com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db" target="classFrame"><I>EventHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/EventType.html" title="class in com.sleepycat.db" target="classFrame">EventType</A>
+<BR>
<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util" target="classFrame">ExceptionUnwrapper</A>
<BR>
<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util" target="classFrame"><I>ExceptionWrapper</I></A>
@@ -88,14 +96,14 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">FloatBinding</A>
<BR>
-<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db" target="classFrame">HashStats</A>
-<BR>
<A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db" target="classFrame"><I>Hasher</I></A>
<BR>
-<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util" target="classFrame">IOExceptionWrapper</A>
+<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db" target="classFrame">HashStats</A>
<BR>
<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">IntegerBinding</A>
<BR>
+<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util" target="classFrame">IOExceptionWrapper</A>
+<BR>
<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db" target="classFrame">JoinConfig</A>
<BR>
<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db" target="classFrame">JoinCursor</A>
@@ -144,10 +152,20 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleKeyDataEntry</A>
<BR>
+<A HREF="com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleKeyNIODataEntry</A>
+<BR>
+<A HREF="com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleNIODataEntry</A>
+<BR>
<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleRecnoDataEntry</A>
<BR>
+<A HREF="com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleRecnoNIODataEntry</A>
+<BR>
+<A HREF="com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db" target="classFrame">MutexStats</A>
+<BR>
<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db" target="classFrame">OperationStatus</A>
<BR>
+<A HREF="com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util" target="classFrame">PackedInteger</A>
+<BR>
<A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db" target="classFrame"><I>PanicHandler</I></A>
<BR>
<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db" target="classFrame">PreparedTransaction</A>
@@ -162,12 +180,32 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db" target="classFrame">RecoveryOperation</A>
<BR>
+<A HREF="com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db" target="classFrame">ReplicationConfig</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationDuplicateMasterException</A>
+<BR>
<A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationHandleDeadException</A>
<BR>
+<A HREF="com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationHoldElectionException</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db" target="classFrame">ReplicationHostAddress</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationJoinFailureException</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationLockoutException</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db" target="classFrame">ReplicationManagerAckPolicy</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db" target="classFrame">ReplicationManagerStartPolicy</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationSiteUnavailableException</A>
+<BR>
<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db" target="classFrame">ReplicationStats</A>
<BR>
<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db" target="classFrame">ReplicationStatus</A>
<BR>
+<A HREF="com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db" target="classFrame">ReplicationTimeoutType</A>
+<BR>
<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db" target="classFrame"><I>ReplicationTransport</I></A>
<BR>
<A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db" target="classFrame">RunRecoveryException</A>
@@ -188,6 +226,8 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db" target="classFrame">SequenceStats</A>
<BR>
+<A HREF="com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial" target="classFrame">SerialBase</A>
+<BR>
<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial" target="classFrame">SerialBinding</A>
<BR>
<A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial" target="classFrame">SerialInput</A>
@@ -200,6 +240,10 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">ShortBinding</A>
<BR>
+<A HREF="com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">SortedDoubleBinding</A>
+<BR>
+<A HREF="com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">SortedFloatBinding</A>
+<BR>
<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db" target="classFrame">StatsConfig</A>
<BR>
<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial" target="classFrame">StoredClassCatalog</A>
@@ -240,8 +284,12 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db" target="classFrame">TransactionStats</A>
<BR>
+<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db" target="classFrame">TransactionStats.Active</A>
+<BR>
<A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections" target="classFrame"><I>TransactionWorker</I></A>
<BR>
+<A HREF="com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleBase</A>
+<BR>
<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleBinding</A>
<BR>
<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleInput</A>
@@ -270,10 +318,14 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleTupleMarshalledKeyCreator</A>
<BR>
+<A HREF="com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db" target="classFrame">UpdateConflictException</A>
+<BR>
<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util" target="classFrame">UtfOps</A>
<BR>
<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db" target="classFrame">VerifyConfig</A>
<BR>
+<A HREF="com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db" target="classFrame">VersionMismatchException</A>
+<BR>
</FONT></TD>
</TR>
</TABLE>
diff --git a/db/docs/java/allclasses-noframe.html b/db/docs/java/allclasses-noframe.html
index e02b9950a..525722e29 100644
--- a/db/docs/java/allclasses-noframe.html
+++ b/db/docs/java/allclasses-noframe.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:50 EDT 2006 -->
<TITLE>
-All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
+All Classes (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -44,6 +44,10 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><I>ClassCatalog</I></A>
<BR>
+<A HREF="com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<BR>
+<A HREF="com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<BR>
<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
<BR>
<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
@@ -76,6 +80,10 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><I>ErrorHandler</I></A>
<BR>
+<A HREF="com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><I>EventHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
+<BR>
<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>
<BR>
<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><I>ExceptionWrapper</I></A>
@@ -88,14 +96,14 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
<BR>
-<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
-<BR>
<A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><I>Hasher</I></A>
<BR>
-<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
+<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<BR>
<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
<BR>
+<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
+<BR>
<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
<BR>
<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
@@ -144,10 +152,20 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
<BR>
+<A HREF="com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A>
+<BR>
+<A HREF="com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A>
+<BR>
<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
<BR>
+<A HREF="com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A>
+<BR>
+<A HREF="com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<BR>
<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
<BR>
+<A HREF="com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<BR>
<A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><I>PanicHandler</I></A>
<BR>
<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>
@@ -162,12 +180,32 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
<BR>
+<A HREF="com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db">ReplicationDuplicateMasterException</A>
+<BR>
<A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">ReplicationHandleDeadException</A>
<BR>
+<A HREF="com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db">ReplicationHoldElectionException</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db">ReplicationJoinFailureException</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db">ReplicationLockoutException</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>
+<BR>
+<A HREF="com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db">ReplicationSiteUnavailableException</A>
+<BR>
<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<BR>
<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
<BR>
+<A HREF="com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>
+<BR>
<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><I>ReplicationTransport</I></A>
<BR>
<A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">RunRecoveryException</A>
@@ -188,6 +226,8 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<BR>
+<A HREF="com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A>
+<BR>
<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
<BR>
<A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>
@@ -200,6 +240,10 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
<BR>
+<A HREF="com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
+<BR>
+<A HREF="com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
+<BR>
<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
<BR>
<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
@@ -240,8 +284,12 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<BR>
+<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<BR>
<A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><I>TransactionWorker</I></A>
<BR>
+<A HREF="com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<BR>
<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
<BR>
<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
@@ -270,10 +318,14 @@ All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
<BR>
<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
<BR>
+<A HREF="com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db">UpdateConflictException</A>
+<BR>
<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<BR>
<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
<BR>
+<A HREF="com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db">VersionMismatchException</A>
+<BR>
</FONT></TD>
</TR>
</TABLE>
diff --git a/db/docs/java/com/sleepycat/bind/ByteArrayBinding.html b/db/docs/java/com/sleepycat/bind/ByteArrayBinding.html
index e4cdd7507..7b9c7d5d6 100644
--- a/db/docs/java/com/sleepycat/bind/ByteArrayBinding.html
+++ b/db/docs/java/com/sleepycat/bind/ByteArrayBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+ByteArrayBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.ByteArrayBinding class">
@@ -14,9 +14,11 @@ ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ByteArrayBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/ByteArrayBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteArrayBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.bind</FONT>
Class ByteArrayBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.ByteArrayBinding</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.ByteArrayBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+<DT><PRE>public class <B>ByteArrayBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+</PRE>
<P>
A pass-through <code>EntryBinding</code> that uses the entry's byte array as
@@ -105,19 +109,14 @@ A pass-through <code>EntryBinding</code> that uses the entry's byte array as
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html#ByteArrayBinding()">ByteArrayBinding</A></B>()</CODE>
@@ -132,8 +131,8 @@ A pass-through <code>EntryBinding</code> that uses the entry's byte array as
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -156,25 +155,22 @@ A pass-through <code>EntryBinding</code> that uses the entry's byte array as
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -192,8 +188,8 @@ public <B>ByteArrayBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -202,7 +198,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts a entry buffer into an Object.
<P>
<DD><DL>
@@ -221,7 +217,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts an Object into a entry buffer.
<P>
<DD><DL>
@@ -240,7 +236,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -256,16 +252,16 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/ByteArrayBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteArrayBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -278,6 +274,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -291,6 +288,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/EntityBinding.html b/db/docs/java/com/sleepycat/bind/EntityBinding.html
index 6468840c6..af2ead9d0 100644
--- a/db/docs/java/com/sleepycat/bind/EntityBinding.html
+++ b/db/docs/java/com/sleepycat/bind/EntityBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+EntityBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.EntityBinding interface">
@@ -14,9 +14,11 @@ EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="EntityBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/EntityBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntityBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -86,11 +89,12 @@ com.sleepycat.bind</FONT>
<BR>
Interface EntityBinding</H2>
<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>, <A HREF="../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></DD>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>, <A HREF="../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>, <A HREF="../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public interface <B>EntityBinding</B></DL>
+<DT><PRE>public interface <B>EntityBinding</B></DL>
+</PRE>
<P>
A binding between a key-value entry pair and an entity object.
@@ -100,22 +104,14 @@ A binding between a key-value entry pair and an entity object.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -148,27 +144,21 @@ A binding between a key-value entry pair and an entity object.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
entryToObject</H3>
<PRE>
-public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
<DD>Converts key and data entry buffers into an entity Object.
<P>
@@ -182,8 +172,8 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A NAME="objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></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" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</PRE>
+void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</PRE>
<DL>
<DD>Extracts the key entry from an entity Object.
<P>
@@ -196,8 +186,8 @@ public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
<A NAME="objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></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" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
+void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
<DD>Extracts the data entry from an entity Object.
<P>
@@ -214,7 +204,7 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -230,16 +220,16 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/EntityBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntityBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -252,6 +242,7 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -265,6 +256,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/EntryBinding.html b/db/docs/java/com/sleepycat/bind/EntryBinding.html
index da891185a..b015ebd98 100644
--- a/db/docs/java/com/sleepycat/bind/EntryBinding.html
+++ b/db/docs/java/com/sleepycat/bind/EntryBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-EntryBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+EntryBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.EntryBinding interface">
@@ -14,9 +14,11 @@ EntryBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="EntryBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="EntryBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/EntryBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntryBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -86,11 +89,12 @@ com.sleepycat.bind</FONT>
<BR>
Interface EntryBinding</H2>
<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>, <A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>, <A HREF="../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A></DD>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>, <A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>, <A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>, <A HREF="../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public interface <B>EntryBinding</B></DL>
+<DT><PRE>public interface <B>EntryBinding</B></DL>
+</PRE>
<P>
A binding between a key or data entry and a key or data object.
@@ -100,22 +104,14 @@ A binding between a key or data entry and a key or data object.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -138,26 +134,20 @@ A binding between a key or data entry and a key or data object.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="entryToObject(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
entryToObject</H3>
<PRE>
-public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
<DD>Converts a entry buffer into an Object.
<P>
@@ -171,8 +161,8 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
objectToEntry</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
<DD>Converts an Object into a entry buffer.
<P>
@@ -189,7 +179,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -205,16 +195,16 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/EntryBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntryBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -227,6 +217,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -240,6 +231,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/RecordNumberBinding.html b/db/docs/java/com/sleepycat/bind/RecordNumberBinding.html
index 7af9a6ef0..94a37d104 100644
--- a/db/docs/java/com/sleepycat/bind/RecordNumberBinding.html
+++ b/db/docs/java/com/sleepycat/bind/RecordNumberBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+RecordNumberBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.RecordNumberBinding class">
@@ -14,9 +14,11 @@ RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="RecordNumberBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/RecordNumberBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.bind</FONT>
Class RecordNumberBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.RecordNumberBinding</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.RecordNumberBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+<DT><PRE>public class <B>RecordNumberBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+</PRE>
<P>
An <code>EntryBinding</code> that treats a record number key entry as a
@@ -108,19 +112,14 @@ An <code>EntryBinding</code> that treats a record number key entry as a
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html#RecordNumberBinding()">RecordNumberBinding</A></B>()</CODE>
@@ -135,8 +134,8 @@ An <code>EntryBinding</code> that treats a record number key entry as a
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -178,25 +177,22 @@ An <code>EntryBinding</code> that treats a record number key entry as a
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -214,8 +210,8 @@ public <B>RecordNumberBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -224,7 +220,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts a entry buffer into an Object.
<P>
<DD><DL>
@@ -243,7 +239,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts an Object into a entry buffer.
<P>
<DD><DL>
@@ -298,7 +294,7 @@ public static void <B>recordNumberToEntry</B>(long&nbsp;recordNumber,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -314,16 +310,16 @@ public static void <B>recordNumberToEntry</B>(long&nbsp;recordNumber,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><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;
+ <A HREF="../../../index.html?com/sleepycat/bind/RecordNumberBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -336,6 +332,7 @@ public static void <B>recordNumberToEntry</B>(long&nbsp;recordNumber,
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -349,6 +346,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/class-use/ByteArrayBinding.html b/db/docs/java/com/sleepycat/bind/class-use/ByteArrayBinding.html
index 68c00f65a..f6c538346 100644
--- a/db/docs/java/com/sleepycat/bind/class-use/ByteArrayBinding.html
+++ b/db/docs/java/com/sleepycat/bind/class-use/ByteArrayBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.ByteArrayBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.ByteArrayBinding (Sleepycat Software, Inc. - Be
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.ByteArrayBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useByteArrayBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteArrayBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.ByteArrayBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.ByteArrayBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.ByteArrayBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useByteArrayBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteArrayBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.ByteArrayBinding
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.ByteArrayBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/class-use/EntityBinding.html b/db/docs/java/com/sleepycat/bind/class-use/EntityBinding.html
index 151789468..faf162767 100644
--- a/db/docs/java/com/sleepycat/bind/class-use/EntityBinding.html
+++ b/db/docs/java/com/sleepycat/bind/class-use/EntityBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.bind.EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.bind.EntityBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.bind.EntityBinding (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.bind.EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.bind.EntityBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useEntityBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntityBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -100,8 +103,8 @@ Packages that use <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" ti
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -109,7 +112,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -144,8 +147,8 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -153,7 +156,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that implement <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that implement <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -180,8 +183,8 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -189,41 +192,23 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -244,20 +229,38 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -270,7 +273,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -286,7 +289,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -295,7 +298,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useEntityBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntityBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -308,6 +311,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -315,6 +319,6 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="inter
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/class-use/EntryBinding.html b/db/docs/java/com/sleepycat/bind/class-use/EntryBinding.html
index c1896615d..e744daadb 100644
--- a/db/docs/java/com/sleepycat/bind/class-use/EntryBinding.html
+++ b/db/docs/java/com/sleepycat/bind/class-use/EntryBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.bind.EntryBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.bind.EntryBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.bind.EntryBinding (Sleepycat Software, Inc. - Be
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.bind.EntryBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.bind.EntryBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useEntryBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntryBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind"><B>com.sleepycat.bind</B></A></TD>
@@ -104,8 +107,8 @@ Packages that use <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" tit
<A NAME="com.sleepycat.bind"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -113,7 +116,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> that implement <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> that implement <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,8 +142,8 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -165,8 +168,8 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -174,7 +177,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that implement <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that implement <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -251,6 +254,24 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<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/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.</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/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.</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/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A></B></CODE>
<BR>
@@ -289,8 +310,8 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -298,59 +319,67 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<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/Map.html" title="class or interface in java.util">Map</A></CODE></FONT></TD>
+<TD><CODE><B>StoredMap.</B><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)">duplicatesMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;secondaryKey,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;primaryKeyBinding)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new map from primary key to value for the subset of records
+ having a given secondary key (duplicates).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ 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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -371,46 +400,56 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ 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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -423,7 +462,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -439,7 +478,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -448,7 +487,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useEntryBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EntryBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -461,6 +500,7 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -468,6 +508,6 @@ Uses of <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interf
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/class-use/RecordNumberBinding.html b/db/docs/java/com/sleepycat/bind/class-use/RecordNumberBinding.html
index 200be6ae0..f7ab1494c 100644
--- a/db/docs/java/com/sleepycat/bind/class-use/RecordNumberBinding.html
+++ b/db/docs/java/com/sleepycat/bind/class-use/RecordNumberBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.RecordNumberBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.RecordNumberBinding (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.RecordNumberBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useRecordNumberBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.RecordNumberBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.RecordNumberBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.RecordNumberBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind//class-useRecordNumberBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.RecordNumberBinding
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.RecordNumberBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/package-frame.html b/db/docs/java/com/sleepycat/bind/package-frame.html
index 6b1e937c0..b0b69199d 100644
--- a/db/docs/java/com/sleepycat/bind/package-frame.html
+++ b/db/docs/java/com/sleepycat/bind/package-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind package">
diff --git a/db/docs/java/com/sleepycat/bind/package-summary.html b/db/docs/java/com/sleepycat/bind/package-summary.html
index 160ba4bb0..1b45c2fb3 100644
--- a/db/docs/java/com/sleepycat/bind/package-summary.html
+++ b/db/docs/java/com/sleepycat/bind/package-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind package">
@@ -14,9 +14,11 @@ com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.bind (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;PREV PACKAGE&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/bind/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -85,8 +88,8 @@ Bindings between database entries and Java objects.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></B></TD>
@@ -103,8 +106,8 @@ Bindings between database entries and Java objects.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A></B></TD>
@@ -129,6 +132,8 @@ Bindings between database entries and Java objects.
<P>
<P>
+<DL>
+</DL>
<HR>
@@ -137,7 +142,7 @@ Bindings between database entries and Java objects.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -153,7 +158,7 @@ Bindings between database entries and Java objects.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -162,7 +167,7 @@ Bindings between database entries and Java objects.
&nbsp;PREV PACKAGE&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/bind/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -175,6 +180,7 @@ Bindings between database entries and Java objects.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -182,6 +188,6 @@ Bindings between database entries and Java objects.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/package-tree.html b/db/docs/java/com/sleepycat/bind/package-tree.html
index 558bc24ed..f0d5cb73b 100644
--- a/db/docs/java/com/sleepycat/bind/package-tree.html
+++ b/db/docs/java/com/sleepycat/bind/package-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ com.sleepycat.bind Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.bind Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.bind Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/bind/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,16 +87,16 @@ Hierarchy For Package com.sleepycat.bind
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" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>ByteArrayBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>RecordNumberBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>ByteArrayBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>RecordNumberBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
</UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>EntityBinding</B></A><LI TYPE="circle">interface com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><B>EntryBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>EntityBinding</B></A><LI TYPE="circle">com.sleepycat.bind.<A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><B>EntryBinding</B></A></UL>
<HR>
@@ -102,7 +105,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -118,7 +121,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -127,7 +130,7 @@ Interface Hierarchy
&nbsp;PREV&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/bind/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -140,6 +143,7 @@ Interface Hierarchy
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -147,6 +151,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/package-use.html b/db/docs/java/com/sleepycat/bind/package-use.html
index 3d65d317b..71d3b3561 100644
--- a/db/docs/java/com/sleepycat/bind/package-use.html
+++ b/db/docs/java/com/sleepycat/bind/package-use.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Package com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Package com.sleepycat.bind (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Package com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Package com.sleepycat.bind (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Package com.sleepycat.bind (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/bind/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind"><B>com.sleepycat.bind</B></A></TD>
@@ -104,8 +107,8 @@ Packages that use <A HREF="../../../com/sleepycat/bind/package-summary.html">com
<A NAME="com.sleepycat.bind"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/bind/class-use/EntryBinding.html#com.sleepycat.bind"><B>EntryBinding</B></A></B>
@@ -119,8 +122,8 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/bind/class-use/EntityBinding.html#com.sleepycat.bind.serial"><B>EntityBinding</B></A></B>
@@ -140,8 +143,8 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/bind/class-use/EntityBinding.html#com.sleepycat.bind.tuple"><B>EntityBinding</B></A></B>
@@ -161,8 +164,8 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> used by <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/bind/class-use/EntityBinding.html#com.sleepycat.collections"><B>EntityBinding</B></A></B>
@@ -187,7 +190,7 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -203,7 +206,7 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -212,7 +215,7 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/bind/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -225,6 +228,7 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -232,6 +236,6 @@ Classes in <A HREF="../../../com/sleepycat/bind/package-summary.html">com.sleepy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/ClassCatalog.html b/db/docs/java/com/sleepycat/bind/serial/ClassCatalog.html
index ffa1c87c4..dea30aef4 100644
--- a/db/docs/java/com/sleepycat/bind/serial/ClassCatalog.html
+++ b/db/docs/java/com/sleepycat/bind/serial/ClassCatalog.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+ClassCatalog (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.ClassCatalog interface">
@@ -14,9 +14,11 @@ ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ClassCatalog (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/ClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -90,7 +93,8 @@ Interface ClassCatalog</H2>
</DL>
<HR>
<DL>
-<DT>public interface <B>ClassCatalog</B></DL>
+<DT><PRE>public interface <B>ClassCatalog</B></DL>
+</PRE>
<P>
A catalog of class description information for use during object
@@ -113,22 +117,14 @@ A catalog of class description information for use during object
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -159,26 +155,20 @@ A catalog of class description information for use during object
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="close()"><!-- --></A><H3>
close</H3>
<PRE>
-public void <B>close</B>()
+void <B>close</B>()
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>Close a catalog database and release any cached resources.
@@ -194,7 +184,7 @@ public void <B>close</B>()
<A NAME="getClassID(java.io.ObjectStreamClass)"><!-- --></A><H3>
getClassID</H3>
<PRE>
-public byte[] <B>getClassID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classDesc)
+byte[] <B>getClassID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classDesc)
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
<DL>
@@ -220,7 +210,7 @@ public byte[] <B>getClassID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<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" title="class or interface in java.io">ObjectStreamClass</A> <B>getClassFormat</B>(byte[]&nbsp;classID)
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A> <B>getClassFormat</B>(byte[]&nbsp;classID)
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
<DL>
@@ -246,7 +236,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -262,16 +252,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/ClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -284,6 +274,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -297,6 +288,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/SerialBase.html b/db/docs/java/com/sleepycat/bind/serial/SerialBase.html
new file mode 100644
index 000000000..dacd18c1a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/serial/SerialBase.html
@@ -0,0 +1,330 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+SerialBase (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.SerialBase class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="SerialBase (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/SerialBase.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bind.serial</FONT>
+<BR>
+Class SerialBase</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.SerialBase</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>SerialBase</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A base class for serial bindings creators that provides control over the
+ allocation of the output buffer.
+
+ <p>Serial bindings append data to a <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><CODE>FastOutputStream</CODE></A> instance. This
+ object has a byte array buffer that is resized when it is full. The
+ reallocation of this buffer can be a performance factor for some
+ applications using large objects. To manage this issue, the <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)"><CODE>setSerialBufferSize(int)</CODE></A> method may be used to control the initial size of the
+ buffer, and the <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)"><CODE>getSerialOutput(java.lang.Object)</CODE></A> method may be overridden by
+ subclasses to take over creation of the FastOutputStream object.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#SerialBase()">SerialBase</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializes the initial output buffer size to zero.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialBufferSize()">getSerialBufferSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the initial byte size of the output buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)">getSerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty SerialOutput instance that will be used by the serial
+ binding or key creator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)">setSerialBufferSize</A></B>(int&nbsp;byteSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial byte size of the output buffer that is allocated by the
+ default implementation of <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)"><CODE>getSerialOutput(java.lang.Object)</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="SerialBase()"><!-- --></A><H3>
+SerialBase</H3>
+<PRE>
+public <B>SerialBase</B>()</PRE>
+<DL>
+<DD>Initializes the initial output buffer size to zero.
+
+ <p>Unless <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)"><CODE>setSerialBufferSize(int)</CODE></A> is called, the default <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><CODE>FastOutputStream.DEFAULT_INIT_SIZE</CODE></A> size will be used.</p>
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="setSerialBufferSize(int)"><!-- --></A><H3>
+setSerialBufferSize</H3>
+<PRE>
+public void <B>setSerialBufferSize</B>(int&nbsp;byteSize)</PRE>
+<DL>
+<DD>Sets the initial byte size of the output buffer that is allocated by the
+ default implementation of <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)"><CODE>getSerialOutput(java.lang.Object)</CODE></A>.
+
+ <p>If this property is zero (the default), the default <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><CODE>FastOutputStream.DEFAULT_INIT_SIZE</CODE></A> size is used.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>byteSize</CODE> - the initial byte size of the output buffer, or zero to
+ use the default size.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSerialBufferSize()"><!-- --></A><H3>
+getSerialBufferSize</H3>
+<PRE>
+public int <B>getSerialBufferSize</B>()</PRE>
+<DL>
+<DD>Returns the initial byte size of the output buffer.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the initial byte size of the output buffer.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)"><CODE>setSerialBufferSize(int)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSerialOutput(java.lang.Object)"><!-- --></A><H3>
+getSerialOutput</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A> <B>getSerialOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Returns an empty SerialOutput instance that will be used by the serial
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new SerialOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)"><CODE>setSerialBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a FastOutputStream instance.
+ For example, an instance per thread could be created and returned by
+ this method. If a FastOutputStream instance is reused, be sure to call
+ its <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each use.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the serial output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty FastOutputStream instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)"><CODE>setSerialBufferSize(int)</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/SerialBase.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/SerialBinding.html b/db/docs/java/com/sleepycat/bind/serial/SerialBinding.html
index 42749f7f1..b1823e55f 100644
--- a/db/docs/java/com/sleepycat/bind/serial/SerialBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/SerialBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+SerialBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.SerialBinding class">
@@ -14,9 +14,11 @@ SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SerialBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,16 @@ com.sleepycat.bind.serial</FONT>
Class SerialBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.SerialBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">com.sleepycat.bind.serial.SerialBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.SerialBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+<DT><PRE>public class <B>SerialBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+</PRE>
<P>
A concrete <code>EntryBinding</code> that treats a key or data entry as
@@ -104,25 +109,32 @@ A concrete <code>EntryBinding</code> that treats a key or data entry as
deserialized objects are returned by the binding, and their
<code>Class</code> must implement the <code>Serializable</code>
interface.</p>
+
+ <p>For key bindings, a tuple binding is usually a better choice than a
+ serial binding. A tuple binding gives a reasonable sort order, and works
+ with comparators in all cases -- see below.</p>
+
+ <p><em>WARNING:</em> SerialBinding should not be used with Berkeley DB Java
+ Edition for key bindings, when a custom comparator is used. In JE,
+ comparators are instantiated and called internally at times when databases
+ are not accessible. Because serial bindings depend on the class catalog
+ database, a serial binding cannot be used during these times. An attempt
+ to use a serial binding with a custom comparator will result in a
+ NullPointerException during environment open or close.</p>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">SerialBinding</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -138,8 +150,8 @@ A concrete <code>EntryBinding</code> that treats a key or data entry as
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -159,6 +171,15 @@ A concrete <code>EntryBinding</code> that treats a key or data entry as
</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/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#getClassLoader()">getClassLoader</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the class loader to be used during deserialization, or null if
+ a default class loader should be used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
@@ -167,28 +188,34 @@ A concrete <code>EntryBinding</code> that treats a key or data entry as
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serialize an object into an entry buffer.</TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.serial.SerialBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialBufferSize()">getSerialBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)">getSerialOutput</A>, <A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)">setSerialBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -200,18 +227,20 @@ public <B>SerialBinding</B>(<A HREF="../../../../com/sleepycat/bind/serial/Class
<DL>
<DD>Creates a serial binding.
<P>
+<DL>
<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/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>baseClass</CODE> - is the base class for serialized objects stored using
this binding -- all objects using this binding must be an instance of
this class.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -232,6 +261,36 @@ public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html
</DL>
<HR>
+<A NAME="getClassLoader()"><!-- --></A><H3>
+getClassLoader</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A> <B>getClassLoader</B>()</PRE>
+<DL>
+<DD>Returns the class loader to be used during deserialization, or null if
+ a default class loader should be used. The default implementation of
+ this method returns null.
+
+ <p>This method may be overriden to return a dynamically determined class
+ loader. For example,
+ <code>Thread.currentThread().getContextClassLoader()</code> could be
+ called to use the context class loader for the curren thread. Or
+ <code>getBaseClass().getClassLoader()</code> could be called to use the
+ class loader for the base class, assuming that a base class has been
+ specified.</p>
+
+ <p>If this method returns null, a default class loader will be used as
+ determined by the <code>java.io.ObjectInputStream.resolveClass</code>
+ method.</p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="entryToObject(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
entryToObject</H3>
<PRE>
@@ -262,6 +321,10 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
header is not included in the output data to save space, and therefore
to deserialize the data the complementary <A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><CODE>entryToObject(com.sleepycat.db.DatabaseEntry)</CODE></A> method
must be used. <A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><CODE>SerialOutput</CODE></A> is used to serialize the object.
+
+ <p>Note that this method sets the DatabaseEntry offset property to a
+ non-zero value and the size property to a value less than the length of
+ the byte array.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></DL>
@@ -282,7 +345,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -298,16 +361,16 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -320,6 +383,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -333,6 +397,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/SerialInput.html b/db/docs/java/com/sleepycat/bind/serial/SerialInput.html
index 6bcf802a6..71d19b976 100644
--- a/db/docs/java/com/sleepycat/bind/serial/SerialInput.html
+++ b/db/docs/java/com/sleepycat/bind/serial/SerialInput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+SerialInput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.SerialInput class">
@@ -14,9 +14,11 @@ SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SerialInput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;<A HREF="#nested_classes_inherited_from_class_java.io.ObjectInputStream">NESTED</A>&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>
+ SUMMARY:&nbsp;<A HREF="#nested_classes_inherited_from_class_java.io.ObjectInputStream">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;METHOD</FONT></TD>
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,16 +90,17 @@ com.sleepycat.bind.serial</FONT>
Class SerialInput</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">java.io.InputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">java.io.ObjectInputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.SerialInput</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">java.io.InputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">java.io.ObjectInputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.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" title="class or interface in java.io">DataInput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataInput.html" title="class or interface in java.io">DataInput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">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" title="class or interface in java.io">ObjectInputStream</A></DL>
+<DT><PRE>public class <B>SerialInput</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></DL>
+</PRE>
<P>
A specialized <code>ObjectInputStream</code> that gets class description
@@ -119,14 +123,14 @@ A specialized <code>ObjectInputStream</code> that gets class description
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="nested_classes_inherited_from_class_java.io.ObjectInputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Nested classes inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></B></TD>
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.GetField.html" title="class or interface in java.io">ObjectInputStream.GetField</A></CODE></TD>
@@ -138,17 +142,17 @@ A specialized <code>ObjectInputStream</code> that gets class description
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_java.io.ObjectStreamConstants"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">ObjectStreamConstants</A></B></TD>
+<TH ALIGN="left"><B>Fields inherited from interface java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#baseWireHandle" title="class or interface in java.io">baseWireHandle</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_1" title="class or interface in java.io">PROTOCOL_VERSION_1</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_2" title="class or interface in java.io">PROTOCOL_VERSION_2</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_BLOCK_DATA" title="class or interface in java.io">SC_BLOCK_DATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_EXTERNALIZABLE" title="class or interface in java.io">SC_EXTERNALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_SERIALIZABLE" title="class or interface in java.io">SC_SERIALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_WRITE_METHOD" title="class or interface in java.io">SC_WRITE_METHOD</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_MAGIC" title="class or interface in java.io">STREAM_MAGIC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_VERSION" title="class or interface in java.io">STREAM_VERSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBCLASS_IMPLEMENTATION_PERMISSION" title="class or interface in java.io">SUBCLASS_IMPLEMENTATION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBSTITUTION_PERMISSION" title="class or interface in java.io">SUBSTITUTION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ARRAY" title="class or interface in java.io">TC_ARRAY</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BASE" title="class or interface in java.io">TC_BASE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATA" title="class or interface in java.io">TC_BLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATALONG" title="class or interface in java.io">TC_BLOCKDATALONG</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASS" title="class or interface in java.io">TC_CLASS</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASSDESC" title="class or interface in java.io">TC_CLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENDBLOCKDATA" title="class or interface in java.io">TC_ENDBLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_EXCEPTION" title="class or interface in java.io">TC_EXCEPTION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_LONGSTRING" title="class or interface in java.io">TC_LONGSTRING</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_MAX" title="class or interface in java.io">TC_MAX</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_NULL" title="class or interface in java.io">TC_NULL</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_OBJECT" title="class or interface in java.io">TC_OBJECT</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_PROXYCLASSDESC" title="class or interface in java.io">TC_PROXYCLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_REFERENCE" title="class or interface in java.io">TC_REFERENCE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_RESET" title="class or interface in java.io">TC_RESET</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_STRING" title="class or interface in java.io">TC_STRING</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#baseWireHandle" title="class or interface in java.io">baseWireHandle</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_1" title="class or interface in java.io">PROTOCOL_VERSION_1</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_2" title="class or interface in java.io">PROTOCOL_VERSION_2</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_BLOCK_DATA" title="class or interface in java.io">SC_BLOCK_DATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_ENUM" title="class or interface in java.io">SC_ENUM</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_EXTERNALIZABLE" title="class or interface in java.io">SC_EXTERNALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_SERIALIZABLE" title="class or interface in java.io">SC_SERIALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_WRITE_METHOD" title="class or interface in java.io">SC_WRITE_METHOD</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_MAGIC" title="class or interface in java.io">STREAM_MAGIC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_VERSION" title="class or interface in java.io">STREAM_VERSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBCLASS_IMPLEMENTATION_PERMISSION" title="class or interface in java.io">SUBCLASS_IMPLEMENTATION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBSTITUTION_PERMISSION" title="class or interface in java.io">SUBSTITUTION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ARRAY" title="class or interface in java.io">TC_ARRAY</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BASE" title="class or interface in java.io">TC_BASE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATA" title="class or interface in java.io">TC_BLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATALONG" title="class or interface in java.io">TC_BLOCKDATALONG</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASS" title="class or interface in java.io">TC_CLASS</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASSDESC" title="class or interface in java.io">TC_CLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENDBLOCKDATA" title="class or interface in java.io">TC_ENDBLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENUM" title="class or interface in java.io">TC_ENUM</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_EXCEPTION" title="class or interface in java.io">TC_EXCEPTION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_LONGSTRING" title="class or interface in java.io">TC_LONGSTRING</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_MAX" title="class or interface in java.io">TC_MAX</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_NULL" title="class or interface in java.io">TC_NULL</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_OBJECT" title="class or interface in java.io">TC_OBJECT</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_PROXYCLASSDESC" title="class or interface in java.io">TC_PROXYCLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_REFERENCE" title="class or interface in java.io">TC_REFERENCE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_RESET" title="class or interface in java.io">TC_RESET</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_STRING" title="class or interface in java.io">TC_STRING</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -157,8 +161,8 @@ A specialized <code>ObjectInputStream</code> that gets class description
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A>&nbsp;in,
@@ -167,23 +171,54 @@ A specialized <code>ObjectInputStream</code> that gets class description
<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/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog, java.lang.ClassLoader)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A>&nbsp;in,
+ <A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A>&nbsp;classLoader)</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>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html#readClassDescriptor()">readClassDescriptor</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>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html#resolveClass(java.io.ObjectStreamClass)">resolveClass</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;desc)</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.ObjectInputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">ObjectInputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#available()" title="class or interface in java.io">available</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#defaultReadObject()" title="class or interface in java.io">defaultReadObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#read()" title="class or interface in java.io">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#read(byte[], int, int)" title="class or interface in java.io">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readBoolean()" title="class or interface in java.io">readBoolean</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readByte()" title="class or interface in java.io">readByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readChar()" title="class or interface in java.io">readChar</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readDouble()" title="class or interface in java.io">readDouble</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFields()" title="class or interface in java.io">readFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFloat()" title="class or interface in java.io">readFloat</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFully(byte[])" title="class or interface in java.io">readFully</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFully(byte[], int, int)" title="class or interface in java.io">readFully</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readInt()" title="class or interface in java.io">readInt</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readLine()" title="class or interface in java.io">readLine</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readLong()" title="class or interface in java.io">readLong</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readObject()" title="class or interface in java.io">readObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readShort()" title="class or interface in java.io">readShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnshared()" title="class or interface in java.io">readUnshared</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnsignedByte()" title="class or interface in java.io">readUnsignedByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnsignedShort()" title="class or interface in java.io">readUnsignedShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUTF()" title="class or interface in java.io">readUTF</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#registerValidation(java.io.ObjectInputValidation, int)" title="class or interface in java.io">registerValidation</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#skipBytes(int)" title="class or interface in java.io">skipBytes</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#available()" title="class or interface in java.io">available</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#defaultReadObject()" title="class or interface in java.io">defaultReadObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#enableResolveObject(boolean)" title="class or interface in java.io">enableResolveObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#read()" title="class or interface in java.io">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#read(byte[], int, int)" title="class or interface in java.io">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readBoolean()" title="class or interface in java.io">readBoolean</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readByte()" title="class or interface in java.io">readByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readChar()" title="class or interface in java.io">readChar</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readDouble()" title="class or interface in java.io">readDouble</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFields()" title="class or interface in java.io">readFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFloat()" title="class or interface in java.io">readFloat</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFully(byte[])" title="class or interface in java.io">readFully</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFully(byte[], int, int)" title="class or interface in java.io">readFully</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readInt()" title="class or interface in java.io">readInt</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readLine()" title="class or interface in java.io">readLine</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readLong()" title="class or interface in java.io">readLong</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readObject()" title="class or interface in java.io">readObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readObjectOverride()" title="class or interface in java.io">readObjectOverride</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readShort()" title="class or interface in java.io">readShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readStreamHeader()" title="class or interface in java.io">readStreamHeader</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnshared()" title="class or interface in java.io">readUnshared</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnsignedByte()" title="class or interface in java.io">readUnsignedByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnsignedShort()" title="class or interface in java.io">readUnsignedShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUTF()" title="class or interface in java.io">readUTF</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#registerValidation(java.io.ObjectInputValidation, int)" title="class or interface in java.io">registerValidation</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#resolveObject(java.lang.Object)" title="class or interface in java.io">resolveObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#resolveProxyClass(java.lang.String[])" title="class or interface in java.io">resolveProxyClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#skipBytes(int)" title="class or interface in java.io">skipBytes</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.io.InputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">InputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></B></TH>
</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)" title="class or interface in java.io">mark</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#markSupported()" title="class or interface in java.io">markSupported</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#read(byte[])" title="class or interface in java.io">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#reset()" title="class or interface in java.io">reset</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#skip(long)" title="class or interface in java.io">skip</A></CODE></TD>
@@ -192,16 +227,16 @@ A specialized <code>ObjectInputStream</code> that gets class description
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.io.ObjectInput"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">ObjectInput</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A></B></TH>
</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[])" title="class or interface in java.io">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html#skip(long)" title="class or interface in java.io">skip</A></CODE></TD>
@@ -210,16 +245,13 @@ A specialized <code>ObjectInputStream</code> that gets class description
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -232,12 +264,80 @@ public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
<DL>
<DD>Creates a serial input stream.
<P>
+<DL>
+<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.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
+</DL>
+<HR>
+
+<A NAME="SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog, java.lang.ClassLoader)"><!-- --></A><H3>
+SerialInput</H3>
+<PRE>
+public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A>&nbsp;in,
+ <A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A>&nbsp;classLoader)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Creates a serial input stream.
+<P>
+<DL>
<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>
+ for the serialized objects.<DD><CODE>classLoader</CODE> - is the class loader to use, or null if a default
+ class loader should be used.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="readClassDescriptor()"><!-- --></A><H3>
+readClassDescriptor</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A> <B>readClassDescriptor</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readClassDescriptor()" title="class or interface in java.io">readClassDescriptor</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="resolveClass(java.io.ObjectStreamClass)"><!-- --></A><H3>
+resolveClass</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A> <B>resolveClass</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;desc)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#resolveClass(java.io.ObjectStreamClass)" title="class or interface in java.io">resolveClass</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -247,7 +347,7 @@ public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -263,7 +363,7 @@ public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -272,7 +372,7 @@ public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -285,19 +385,20 @@ public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;<A HREF="#nested_classes_inherited_from_class_java.io.ObjectInputStream">NESTED</A>&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>
+ SUMMARY:&nbsp;<A HREF="#nested_classes_inherited_from_class_java.io.ObjectInputStream">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;METHOD</FONT></TD>
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/SerialOutput.html b/db/docs/java/com/sleepycat/bind/serial/SerialOutput.html
index 464a15887..a2674d6a2 100644
--- a/db/docs/java/com/sleepycat/bind/serial/SerialOutput.html
+++ b/db/docs/java/com/sleepycat/bind/serial/SerialOutput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+SerialOutput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.SerialOutput class">
@@ -14,9 +14,11 @@ SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SerialOutput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,16 +90,17 @@ com.sleepycat.bind.serial</FONT>
Class SerialOutput</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">java.io.OutputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">java.io.ObjectOutputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.SerialOutput</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">java.io.OutputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">java.io.ObjectOutputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.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" title="class or interface in java.io">DataOutput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html" title="class or interface in java.io">ObjectOutput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataOutput.html" title="class or interface in java.io">DataOutput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html" title="class or interface in java.io">ObjectOutput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">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" title="class or interface in java.io">ObjectOutputStream</A></DL>
+<DT><PRE>public class <B>SerialOutput</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A></DL>
+</PRE>
<P>
A specialized <code>ObjectOutputStream</code> that stores class description
@@ -123,14 +127,14 @@ A specialized <code>ObjectOutputStream</code> that stores class description
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="nested_classes_inherited_from_class_java.io.ObjectOutputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Nested classes inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A></B></TD>
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.PutField.html" title="class or interface in java.io">ObjectOutputStream.PutField</A></CODE></TD>
@@ -142,17 +146,17 @@ A specialized <code>ObjectOutputStream</code> that stores class description
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_java.io.ObjectStreamConstants"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">ObjectStreamConstants</A></B></TD>
+<TH ALIGN="left"><B>Fields inherited from interface java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#baseWireHandle" title="class or interface in java.io">baseWireHandle</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_1" title="class or interface in java.io">PROTOCOL_VERSION_1</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_2" title="class or interface in java.io">PROTOCOL_VERSION_2</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_BLOCK_DATA" title="class or interface in java.io">SC_BLOCK_DATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_EXTERNALIZABLE" title="class or interface in java.io">SC_EXTERNALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_SERIALIZABLE" title="class or interface in java.io">SC_SERIALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_WRITE_METHOD" title="class or interface in java.io">SC_WRITE_METHOD</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_MAGIC" title="class or interface in java.io">STREAM_MAGIC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_VERSION" title="class or interface in java.io">STREAM_VERSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBCLASS_IMPLEMENTATION_PERMISSION" title="class or interface in java.io">SUBCLASS_IMPLEMENTATION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBSTITUTION_PERMISSION" title="class or interface in java.io">SUBSTITUTION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ARRAY" title="class or interface in java.io">TC_ARRAY</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BASE" title="class or interface in java.io">TC_BASE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATA" title="class or interface in java.io">TC_BLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATALONG" title="class or interface in java.io">TC_BLOCKDATALONG</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASS" title="class or interface in java.io">TC_CLASS</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASSDESC" title="class or interface in java.io">TC_CLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENDBLOCKDATA" title="class or interface in java.io">TC_ENDBLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_EXCEPTION" title="class or interface in java.io">TC_EXCEPTION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_LONGSTRING" title="class or interface in java.io">TC_LONGSTRING</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_MAX" title="class or interface in java.io">TC_MAX</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_NULL" title="class or interface in java.io">TC_NULL</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_OBJECT" title="class or interface in java.io">TC_OBJECT</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_PROXYCLASSDESC" title="class or interface in java.io">TC_PROXYCLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_REFERENCE" title="class or interface in java.io">TC_REFERENCE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_RESET" title="class or interface in java.io">TC_RESET</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_STRING" title="class or interface in java.io">TC_STRING</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#baseWireHandle" title="class or interface in java.io">baseWireHandle</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_1" title="class or interface in java.io">PROTOCOL_VERSION_1</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_2" title="class or interface in java.io">PROTOCOL_VERSION_2</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_BLOCK_DATA" title="class or interface in java.io">SC_BLOCK_DATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_ENUM" title="class or interface in java.io">SC_ENUM</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_EXTERNALIZABLE" title="class or interface in java.io">SC_EXTERNALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_SERIALIZABLE" title="class or interface in java.io">SC_SERIALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_WRITE_METHOD" title="class or interface in java.io">SC_WRITE_METHOD</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_MAGIC" title="class or interface in java.io">STREAM_MAGIC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_VERSION" title="class or interface in java.io">STREAM_VERSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBCLASS_IMPLEMENTATION_PERMISSION" title="class or interface in java.io">SUBCLASS_IMPLEMENTATION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBSTITUTION_PERMISSION" title="class or interface in java.io">SUBSTITUTION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ARRAY" title="class or interface in java.io">TC_ARRAY</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BASE" title="class or interface in java.io">TC_BASE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATA" title="class or interface in java.io">TC_BLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATALONG" title="class or interface in java.io">TC_BLOCKDATALONG</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASS" title="class or interface in java.io">TC_CLASS</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASSDESC" title="class or interface in java.io">TC_CLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENDBLOCKDATA" title="class or interface in java.io">TC_ENDBLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENUM" title="class or interface in java.io">TC_ENUM</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_EXCEPTION" title="class or interface in java.io">TC_EXCEPTION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_LONGSTRING" title="class or interface in java.io">TC_LONGSTRING</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_MAX" title="class or interface in java.io">TC_MAX</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_NULL" title="class or interface in java.io">TC_NULL</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_OBJECT" title="class or interface in java.io">TC_OBJECT</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_PROXYCLASSDESC" title="class or interface in java.io">TC_PROXYCLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_REFERENCE" title="class or interface in java.io">TC_REFERENCE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_RESET" title="class or interface in java.io">TC_RESET</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_STRING" title="class or interface in java.io">TC_STRING</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -161,8 +165,8 @@ A specialized <code>ObjectOutputStream</code> that stores class description
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bind.serial.ClassCatalog)">SerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A>&nbsp;out,
@@ -178,8 +182,8 @@ A specialized <code>ObjectOutputStream</code> that stores class description
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -190,38 +194,43 @@ A specialized <code>ObjectOutputStream</code> that stores class description
&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>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html#writeClassDescriptor(java.io.ObjectStreamClass)">writeClassDescriptor</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classdesc)</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.ObjectOutputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">ObjectOutputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#defaultWriteObject()" title="class or interface in java.io">defaultWriteObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#flush()" title="class or interface in java.io">flush</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#putFields()" title="class or interface in java.io">putFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#reset()" title="class or interface in java.io">reset</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#useProtocolVersion(int)" title="class or interface in java.io">useProtocolVersion</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(byte[])" title="class or interface in java.io">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(byte[], int, int)" title="class or interface in java.io">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(int)" title="class or interface in java.io">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeBoolean(boolean)" title="class or interface in java.io">writeBoolean</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeByte(int)" title="class or interface in java.io">writeByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeBytes(java.lang.String)" title="class or interface in java.io">writeBytes</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeChar(int)" title="class or interface in java.io">writeChar</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeChars(java.lang.String)" title="class or interface in java.io">writeChars</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeDouble(double)" title="class or interface in java.io">writeDouble</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeFields()" title="class or interface in java.io">writeFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeFloat(float)" title="class or interface in java.io">writeFloat</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeInt(int)" title="class or interface in java.io">writeInt</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeLong(long)" title="class or interface in java.io">writeLong</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)" title="class or interface in java.io">writeObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeShort(int)" title="class or interface in java.io">writeShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeUnshared(java.lang.Object)" title="class or interface in java.io">writeUnshared</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeUTF(java.lang.String)" title="class or interface in java.io">writeUTF</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#annotateClass(java.lang.Class)" title="class or interface in java.io">annotateClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#annotateProxyClass(java.lang.Class)" title="class or interface in java.io">annotateProxyClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#defaultWriteObject()" title="class or interface in java.io">defaultWriteObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#drain()" title="class or interface in java.io">drain</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#enableReplaceObject(boolean)" title="class or interface in java.io">enableReplaceObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#flush()" title="class or interface in java.io">flush</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#putFields()" title="class or interface in java.io">putFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#replaceObject(java.lang.Object)" title="class or interface in java.io">replaceObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#reset()" title="class or interface in java.io">reset</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#useProtocolVersion(int)" title="class or interface in java.io">useProtocolVersion</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(byte[])" title="class or interface in java.io">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(byte[], int, int)" title="class or interface in java.io">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(int)" title="class or interface in java.io">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeBoolean(boolean)" title="class or interface in java.io">writeBoolean</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeByte(int)" title="class or interface in java.io">writeByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeBytes(java.lang.String)" title="class or interface in java.io">writeBytes</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeChar(int)" title="class or interface in java.io">writeChar</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeChars(java.lang.String)" title="class or interface in java.io">writeChars</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeDouble(double)" title="class or interface in java.io">writeDouble</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeFields()" title="class or interface in java.io">writeFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeFloat(float)" title="class or interface in java.io">writeFloat</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeInt(int)" title="class or interface in java.io">writeInt</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeLong(long)" title="class or interface in java.io">writeLong</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)" title="class or interface in java.io">writeObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeObjectOverride(java.lang.Object)" title="class or interface in java.io">writeObjectOverride</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeShort(int)" title="class or interface in java.io">writeShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeStreamHeader()" title="class or interface in java.io">writeStreamHeader</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeUnshared(java.lang.Object)" title="class or interface in java.io">writeUnshared</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeUTF(java.lang.String)" title="class or interface in java.io">writeUTF</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -234,20 +243,41 @@ public <B>SerialOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/i
<DL>
<DD>Creates a serial output stream.
<P>
+<DL>
<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>
+ the serialized objects will be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
+<A NAME="writeClassDescriptor(java.io.ObjectStreamClass)"><!-- --></A><H3>
+writeClassDescriptor</H3>
+<PRE>
+protected void <B>writeClassDescriptor</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classdesc)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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/ObjectOutputStream.html#writeClassDescriptor(java.io.ObjectStreamClass)" title="class or interface in java.io">writeClassDescriptor</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getStreamHeader()"><!-- --></A><H3>
getStreamHeader</H3>
<PRE>
@@ -274,7 +304,7 @@ public static byte[] <B>getStreamHeader</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -290,7 +320,7 @@ public static byte[] <B>getStreamHeader</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -299,7 +329,7 @@ public static byte[] <B>getStreamHeader</B>()</PRE>
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -312,6 +342,7 @@ public static byte[] <B>getStreamHeader</B>()</PRE>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -325,6 +356,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/SerialSerialBinding.html b/db/docs/java/com/sleepycat/bind/serial/SerialSerialBinding.html
index 45971adf0..c8fb98c0b 100644
--- a/db/docs/java/com/sleepycat/bind/serial/SerialSerialBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/SerialSerialBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+SerialSerialBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.SerialSerialBinding class">
@@ -14,9 +14,11 @@ SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SerialSerialBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.bind.serial</FONT>
Class SerialSerialBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.SerialSerialBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.SerialSerialBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DL>
+<DT><PRE>public abstract class <B>SerialSerialBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DL>
+</PRE>
<P>
An abstract <code>EntityBinding</code> that treats an entity's key entry and
@@ -115,19 +119,14 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry and
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class)">SerialSerialBinding</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -151,8 +150,8 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry and
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -210,25 +209,22 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry and
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -241,8 +237,10 @@ public <B>SerialSerialBinding</B>(<A HREF="../../../../com/sleepycat/bind/serial
<DL>
<DD>Creates a serial-serial entity binding.
<P>
+<DL>
<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/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>keyClass</CODE> - is the key base class.<DD><CODE>dataClass</CODE> - is the data base class.</DL>
+</DL>
<HR>
<A NAME="SerialSerialBinding(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)"><!-- --></A><H3>
@@ -253,15 +251,17 @@ public <B>SerialSerialBinding</B>(<A HREF="../../../../com/sleepycat/bind/serial
<DL>
<DD>Creates a serial-serial entity binding.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>keyBinding</CODE> - is the key binding.<DD><CODE>dataBinding</CODE> - is the data binding.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -271,7 +271,7 @@ entryToObject</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Converts key and data entry buffers into an entity Object.
<P>
<DD><DL>
@@ -290,7 +290,7 @@ objectToKey</H3>
public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Extracts the key entry from an entity Object.
<P>
<DD><DL>
@@ -308,7 +308,7 @@ objectToData</H3>
public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Extracts the data entry from an entity Object.
<P>
<DD><DL>
@@ -379,7 +379,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -395,7 +395,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -404,7 +404,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -417,6 +417,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -430,6 +431,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/SerialSerialKeyCreator.html b/db/docs/java/com/sleepycat/bind/serial/SerialSerialKeyCreator.html
index d10ea267a..21796851f 100644
--- a/db/docs/java/com/sleepycat/bind/serial/SerialSerialKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/serial/SerialSerialKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SerialSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+SerialSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.SerialSerialKeyCreator class">
@@ -14,9 +14,11 @@ SerialSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SerialSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SerialSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_top"></A>
@@ -87,14 +90,15 @@ com.sleepycat.bind.serial</FONT>
Class SerialSerialKeyCreator</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.SerialSerialKeyCreator</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.SerialSerialKeyCreator</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DD>
</DL>
<HR>
<DL>
-<DT>public abstract class <B>SerialSerialKeyCreator</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DL>
+<DT><PRE>public abstract class <B>SerialSerialKeyCreator</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DL>
+</PRE>
<P>
A abstract key creator that uses a serial key and a serial data entry.
@@ -111,19 +115,47 @@ A abstract key creator that uses a serial key and a serial data entry.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#dataBinding">dataBinding</A></B></CODE>
-<!-- =========== FIELD SUMMARY =========== -->
+<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>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#indexKeyBinding">indexKeyBinding</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>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#primaryKeyBinding">primaryKeyBinding</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class, java.lang.Class)">SerialSerialKeyCreator</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -149,8 +181,8 @@ A abstract key creator that uses a serial key and a serial data entry.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,10 +225,10 @@ A abstract key creator that uses a serial key and a serial data entry.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -204,14 +236,50 @@ A abstract key creator that uses a serial key and a serial data entry.
<!-- ============ FIELD DETAIL =========== -->
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="primaryKeyBinding"><!-- --></A><H3>
+primaryKeyBinding</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> <B>primaryKeyBinding</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="dataBinding"><!-- --></A><H3>
+dataBinding</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> <B>dataBinding</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="indexKeyBinding"><!-- --></A><H3>
+indexKeyBinding</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> <B>indexKeyBinding</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -225,8 +293,10 @@ public <B>SerialSerialKeyCreator</B>(<A HREF="../../../../com/sleepycat/bind/ser
<DL>
<DD>Creates a serial-serial key creator.
<P>
+<DL>
<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/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>primaryKeyClass</CODE> - is the primary key base class.<DD><CODE>dataClass</CODE> - is the data base class.<DD><CODE>indexKeyClass</CODE> - is the index key base class.</DL>
+</DL>
<HR>
<A NAME="SerialSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)"><!-- --></A><H3>
@@ -238,15 +308,17 @@ public <B>SerialSerialKeyCreator</B>(<A HREF="../../../../com/sleepycat/bind/ser
<DL>
<DD>Creates a serial-serial entity binding.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>primaryKeyBinding</CODE> - is the primary key binding.<DD><CODE>dataBinding</CODE> - is the data binding.<DD><CODE>indexKeyBinding</CODE> - is the index key binding.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -259,15 +331,24 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../../com/sleepycat/db/S
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">SecondaryKeyCreator</A></CODE></B></DD>
<DD>Creates a secondary key entry, given a primary key and data entry.
<p>
+ A secondary key may be derived from the primary key, primary data, or a
+ combination of the primary key and data. For secondary keys that are
+ optional, the key creator method may return false and the key/data pair
+ will not be indexed. To ensure the integrity of a secondary database the
+ key creator method must always return the same result for a given set of
+ input parameters.
+ <p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>db</CODE> - the database to which the secondary key will be added.
+ This parameter is passed for informational purposes but is not commonly
+ used.
<p><DD><CODE>primaryKeyEntry</CODE> - the primary key entry. This parameter must not be modified
by this method.
<p><DD><CODE>dataEntry</CODE> - the primary data entry. This parameter must not be modified
@@ -355,7 +436,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -371,7 +452,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -380,7 +461,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/SerialSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -393,19 +474,20 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="../../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/StoredClassCatalog.html b/db/docs/java/com/sleepycat/bind/serial/StoredClassCatalog.html
index bb3e83c9a..12d13921d 100644
--- a/db/docs/java/com/sleepycat/bind/serial/StoredClassCatalog.html
+++ b/db/docs/java/com/sleepycat/bind/serial/StoredClassCatalog.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredClassCatalog (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.StoredClassCatalog class">
@@ -14,9 +14,11 @@ StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredClassCatalog (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/StoredClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.bind.serial</FONT>
Class StoredClassCatalog</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.StoredClassCatalog</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.StoredClassCatalog</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></DL>
+<DT><PRE>public class <B>StoredClassCatalog</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></DL>
+</PRE>
<P>
A <code>ClassCatalog</code> that is stored in a <code>Database</code>.
@@ -107,19 +111,14 @@ A <code>ClassCatalog</code> that is stored in a <code>Database</code>.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.Database)">StoredClassCatalog</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database)</CODE>
@@ -134,8 +133,8 @@ A <code>ClassCatalog</code> that is stored in a <code>Database</code>.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,25 +165,22 @@ A <code>ClassCatalog</code> that is stored in a <code>Database</code>.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -198,20 +194,22 @@ public <B>StoredClassCatalog</B>(<A HREF="../../../../com/sleepycat/db/Database.
<DD>Creates a catalog based on a given database. To save resources, only a
single catalog object should be used for each unique catalog database.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - an open database to use as the class catalog. It must
be a BTREE database and must not allow duplicates.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if an error occurs accessing the database.
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the database is not a BTREE database
or if it configured to allow duplicates.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -221,7 +219,7 @@ close</H3>
public void <B>close</B>()
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#close()">ClassCatalog</A></CODE></B></DD>
<DD>Close a catalog database and release any cached resources.
<P>
<DD><DL>
@@ -242,7 +240,7 @@ public byte[] <B>getClassID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#getClassID(java.io.ObjectStreamClass)">ClassCatalog</A></CODE></B></DD>
<DD>Return the class ID for the current version of the given class
description.
This is used for storing in serialization streams in place of a full
@@ -272,7 +270,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#getClassFormat(byte[])">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.
@@ -298,7 +296,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -314,7 +312,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -323,7 +321,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/StoredClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -336,6 +334,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -349,6 +348,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/TupleSerialBinding.html b/db/docs/java/com/sleepycat/bind/serial/TupleSerialBinding.html
index 19fa3f7cc..ab97b166a 100644
--- a/db/docs/java/com/sleepycat/bind/serial/TupleSerialBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/TupleSerialBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleSerialBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.TupleSerialBinding class">
@@ -14,9 +14,11 @@ TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleSerialBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_top"></A>
@@ -87,7 +90,8 @@ com.sleepycat.bind.serial</FONT>
Class TupleSerialBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.TupleSerialBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.TupleSerialBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DD>
@@ -97,7 +101,8 @@ Class TupleSerialBinding</H2>
</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DL>
+<DT><PRE>public abstract class <B>TupleSerialBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DL>
+</PRE>
<P>
An abstract <code>EntityBinding</code> that treats an entity's key entry as
@@ -117,19 +122,31 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry as
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#dataBinding">dataBinding</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialBinding</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -151,8 +168,8 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry as
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -209,13 +226,22 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry as
&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.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -223,14 +249,30 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry as
<!-- ============ FIELD DETAIL =========== -->
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="dataBinding"><!-- --></A><H3>
+dataBinding</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> <B>dataBinding</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -242,8 +284,10 @@ public <B>TupleSerialBinding</B>(<A HREF="../../../../com/sleepycat/bind/serial/
<DL>
<DD>Creates a tuple-serial entity binding.
<P>
+<DL>
<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/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>baseClass</CODE> - is the base class.</DL>
+</DL>
<HR>
<A NAME="TupleSerialBinding(com.sleepycat.bind.serial.SerialBinding)"><!-- --></A><H3>
@@ -253,15 +297,17 @@ public <B>TupleSerialBinding</B>(<A HREF="../../../../com/sleepycat/bind/serial/
<DL>
<DD>Creates a tuple-serial entity binding.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>dataBinding</CODE> - is the data binding.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -271,7 +317,7 @@ entryToObject</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Converts key and data entry buffers into an entity Object.
<P>
<DD><DL>
@@ -290,7 +336,7 @@ objectToKey</H3>
public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Extracts the key entry from an entity Object.
<P>
<DD><DL>
@@ -308,7 +354,7 @@ objectToData</H3>
public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Extracts the data entry from an entity Object.
<P>
<DD><DL>
@@ -381,7 +427,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -397,7 +443,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -406,7 +452,7 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -419,19 +465,20 @@ public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.
<A HREF="../../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/TupleSerialKeyCreator.html b/db/docs/java/com/sleepycat/bind/serial/TupleSerialKeyCreator.html
index 462bb2dd8..d2ddb9493 100644
--- a/db/docs/java/com/sleepycat/bind/serial/TupleSerialKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/serial/TupleSerialKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.TupleSerialKeyCreator class">
@@ -14,9 +14,11 @@ TupleSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_top"></A>
@@ -87,7 +90,8 @@ com.sleepycat.bind.serial</FONT>
Class TupleSerialKeyCreator</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.TupleSerialKeyCreator</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.TupleSerialKeyCreator</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DD>
@@ -97,7 +101,8 @@ Class TupleSerialKeyCreator</H2>
</DL>
<HR>
<DL>
-<DT>public abstract class <B>TupleSerialKeyCreator</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DL>
+<DT><PRE>public abstract class <B>TupleSerialKeyCreator</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A><DT>implements <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DL>
+</PRE>
<P>
A abstract key creator that uses a tuple key and a serial data entry. This
@@ -115,19 +120,31 @@ A abstract key creator that uses a tuple key and a serial data entry. This
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#dataBinding">dataBinding</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialKeyCreator</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -149,8 +166,8 @@ A abstract key creator that uses a tuple key and a serial data entry. This
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -192,13 +209,22 @@ A abstract key creator that uses a tuple key and a serial data entry. This
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -206,14 +232,30 @@ A abstract key creator that uses a tuple key and a serial data entry. This
<!-- ============ FIELD DETAIL =========== -->
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="dataBinding"><!-- --></A><H3>
+dataBinding</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> <B>dataBinding</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -225,8 +267,10 @@ public <B>TupleSerialKeyCreator</B>(<A HREF="../../../../com/sleepycat/bind/seri
<DL>
<DD>Creates a tuple-serial key creator.
<P>
+<DL>
<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/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>dataClass</CODE> - is the data base class.</DL>
+</DL>
<HR>
<A NAME="TupleSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding)"><!-- --></A><H3>
@@ -236,15 +280,17 @@ public <B>TupleSerialKeyCreator</B>(<A HREF="../../../../com/sleepycat/bind/seri
<DL>
<DD>Creates a tuple-serial key creator.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>dataBinding</CODE> - is the data binding.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -257,15 +303,24 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../../com/sleepycat/db/S
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">SecondaryKeyCreator</A></CODE></B></DD>
<DD>Creates a secondary key entry, given a primary key and data entry.
<p>
+ A secondary key may be derived from the primary key, primary data, or a
+ combination of the primary key and data. For secondary keys that are
+ optional, the key creator method may return false and the key/data pair
+ will not be indexed. To ensure the integrity of a secondary database the
+ key creator method must always return the same result for a given set of
+ input parameters.
+ <p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>db</CODE> - the database to which the secondary key will be added.
+ This parameter is passed for informational purposes but is not commonly
+ used.
<p><DD><CODE>primaryKeyEntry</CODE> - the primary key entry. This parameter must not be modified
by this method.
<p><DD><CODE>dataEntry</CODE> - the primary data entry. This parameter must not be modified
@@ -359,7 +414,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -375,7 +430,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -384,7 +439,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -397,19 +452,20 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="../../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html b/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html
index dc00ac13f..3f6a4a643 100644
--- a/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleSerialMarshalledBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.TupleSerialMarshalledBinding class">
@@ -14,9 +14,11 @@ TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleSerialMarshalledBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.bind.serial.TupleSerialBinding">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>
@@ -87,15 +90,17 @@ com.sleepycat.bind.serial</FONT>
Class TupleSerialMarshalledBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">com.sleepycat.bind.serial.TupleSerialBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.TupleSerialMarshalledBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">com.sleepycat.bind.serial.TupleSerialBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.TupleSerialMarshalledBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TupleSerialMarshalledBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></DL>
+<DT><PRE>public class <B>TupleSerialMarshalledBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleSerialBinding</code> that delegates to the
@@ -117,19 +122,32 @@ A concrete <code>TupleSerialBinding</code> that delegates to the
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.bind.serial.TupleSerialBinding"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#dataBinding">dataBinding</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -151,8 +169,8 @@ A concrete <code>TupleSerialBinding</code> that delegates to the
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -185,34 +203,40 @@ A concrete <code>TupleSerialBinding</code> that delegates to the
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.serial.TupleSerialBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A>, <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></CODE></TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -224,10 +248,12 @@ public <B>TupleSerialMarshalledBinding</B>(<A HREF="../../../../com/sleepycat/bi
<DL>
<DD>Creates a tuple-serial marshalled binding object.
<P>
+<DL>
<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/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>baseClass</CODE> - is the base class for serialized objects stored using
this binding -- all objects using this binding must be an instance of
this class.</DL>
+</DL>
<HR>
<A NAME="TupleSerialMarshalledBinding(com.sleepycat.bind.serial.SerialBinding)"><!-- --></A><H3>
@@ -237,16 +263,18 @@ public <B>TupleSerialMarshalledBinding</B>(<A HREF="../../../../com/sleepycat/bi
<DL>
<DD>Creates a tuple-serial marshalled binding object.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>dataBinding</CODE> - is the binding used for serializing and deserializing
the entity object.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -256,7 +284,7 @@ entryToObject</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;tupleInput,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;javaInput)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)">TupleSerialBinding</A></CODE></B></DD>
<DD>Constructs an entity object from <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key entry and
deserialized data entry objects.
<P>
@@ -276,7 +304,7 @@ objectToKey</H3>
public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleSerialBinding</A></CODE></B></DD>
<DD>Extracts a key tuple from an entity object.
<P>
<DD><DL>
@@ -294,7 +322,7 @@ objectToData</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object)">TupleSerialBinding</A></CODE></B></DD>
<DD>Extracts a data object from an entity object.
<P>
<DD><DL>
@@ -314,7 +342,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -330,7 +358,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -339,7 +367,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -352,11 +380,12 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="../../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.bind.serial.TupleSerialBinding">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>
@@ -365,6 +394,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html b/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html
index fb0010587..3c1723b56 100644
--- a/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleSerialMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleSerialMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator class">
@@ -14,9 +14,11 @@ TupleSerialMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleSerialMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleSerialMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.bind.serial.TupleSerialKeyCreator">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>
@@ -87,15 +90,17 @@ com.sleepycat.bind.serial</FONT>
Class TupleSerialMarshalledKeyCreator</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">com.sleepycat.bind.serial.TupleSerialKeyCreator</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">com.sleepycat.bind.serial.TupleSerialKeyCreator</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TupleSerialMarshalledKeyCreator</B><DT>extends <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></DL>
+<DT><PRE>public class <B>TupleSerialMarshalledKeyCreator</B><DT>extends <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></DL>
+</PRE>
<P>
A concrete key creator that works in conjunction with a <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><CODE>TupleSerialMarshalledBinding</CODE></A>. This key creator works by calling the
@@ -107,19 +112,32 @@ A concrete key creator that works in conjunction with a <A HREF="../../../../com
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.bind.serial.TupleSerialKeyCreator"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#dataBinding">dataBinding</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#TupleSerialMarshalledKeyCreator(com.sleepycat.bind.serial.TupleSerialMarshalledBinding, java.lang.String)">TupleSerialMarshalledKeyCreator</A></B>(<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>&nbsp;binding,
@@ -135,8 +153,8 @@ A concrete key creator that works in conjunction with a <A HREF="../../../../com
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,34 +179,40 @@ A concrete key creator that works in conjunction with a <A HREF="../../../../com
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.serial.TupleSerialKeyCreator"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A>, <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></CODE></TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -200,16 +224,18 @@ public <B>TupleSerialMarshalledKeyCreator</B>(<A HREF="../../../../com/sleepycat
<DL>
<DD>Creates a tuple-serial marshalled key creator.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>binding</CODE> - is the binding used for the tuple-serial entity.<DD><CODE>keyName</CODE> - is the key name passed to the <A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)"><CODE>MarshalledTupleKeyEntity.marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)</CODE></A> method to identify the
index key.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -220,7 +246,7 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../../com/sleepycat/bind
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;dataInput,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;indexKeyOutput)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleSerialKeyCreator</A></CODE></B></DD>
<DD>Creates the index key entry from primary key tuple entry and
deserialized data entry.
<P>
@@ -245,7 +271,7 @@ nullifyForeignKey</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>nullifyForeignKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;dataInput)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(java.lang.Object)">TupleSerialKeyCreator</A></CODE></B></DD>
<DD>Clears the index key in the deserialized data entry.
<p>On entry the data parameter contains the index key to be cleared. It
@@ -274,7 +300,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -290,7 +316,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -299,7 +325,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -312,11 +338,12 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
<A HREF="../../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.bind.serial.TupleSerialKeyCreator">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>
@@ -325,6 +352,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/ClassCatalog.html b/db/docs/java/com/sleepycat/bind/serial/class-use/ClassCatalog.html
index ba98776e6..d835ac3bb 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/ClassCatalog.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/ClassCatalog.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.bind.serial.ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.bind.serial.ClassCatalog (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.bind.serial.ClassCatalog (Sleepycat Software, In
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.bind.serial.ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.bind.serial.ClassCatalog (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -96,8 +99,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -105,7 +108,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -121,37 +124,36 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;baseClass)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">SerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;baseClass)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial binding.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;dataClass)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A>&nbsp;in,
+ <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key creator.</TD>
+&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/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;baseClass)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog, java.lang.ClassLoader)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A>&nbsp;in,
+ <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A>&nbsp;classLoader)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial entity binding.</TD>
+&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/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class, java.lang.Class)">SerialSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;primaryKeyClass,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;dataClass,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;indexKeyClass)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bind.serial.ClassCatalog)">SerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A>&nbsp;out,
+ <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial key creator.</TD>
+&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/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class)">SerialSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
@@ -162,25 +164,34 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
&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/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bind.serial.ClassCatalog)">SerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A>&nbsp;out,
- <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class, java.lang.Class)">SerialSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;primaryKeyClass,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;dataClass,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;indexKeyClass)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial output stream.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A>&nbsp;in,
- <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;baseClass)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial input stream.</TD>
+&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/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">SerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;baseClass)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;dataClass)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial binding.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key creator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;baseClass)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
</TR>
</TABLE>
&nbsp;
@@ -188,8 +199,8 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A> in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A> in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -197,7 +208,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -213,7 +224,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../com/sleepycat/collections/TupleSerialFactory.html#TupleSerialFactory(com.sleepycat.bind.serial.ClassCatalog)">TupleSerialFactory</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;catalog)</CODE>
@@ -232,7 +243,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -248,7 +259,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -257,7 +268,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -270,6 +281,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -277,6 +289,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/ClassCatalog.html" tit
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBase.html b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBase.html
new file mode 100644
index 000000000..f5dcf2eff
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBase.html
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.bind.serial.SerialBase (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialBase (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bind.serial.SerialBase</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
+<TD>Bindings that use Java serialization.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bind.serial"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</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/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>EntryBinding</code> that treats a key or data entry as
+ a serialized object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBinding.html b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBinding.html
index a272ec8b3..ea592116c 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.SerialBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.SerialBinding (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/SerialBindin
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,25 +104,62 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> declared as <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.SerialBinding)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#dataBinding">dataBinding</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding)">TupleSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#dataBinding">dataBinding</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key creator.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.SerialBinding)">TupleSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#dataBinding">dataBinding</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial entity binding.</TD>
+&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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#indexKeyBinding">indexKeyBinding</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#primaryKeyBinding">primaryKeyBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)">SerialSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</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/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)">SerialSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;primaryKeyBinding,
@@ -130,11 +170,22 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
&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/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)">SerialSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.SerialBinding)">TupleSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+&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/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding)">TupleSerialKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key creator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.SerialBinding)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>&nbsp;dataBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
</TR>
</TABLE>
&nbsp;
@@ -147,7 +198,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -163,7 +214,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -172,7 +223,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -185,6 +236,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -192,6 +244,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/SerialBinding.html" ti
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialInput.html b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialInput.html
index 0a8cece94..0807424fe 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialInput.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialInput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.SerialInput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.SerialInput (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialInput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.serial.SerialInput
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.serial.SerialInput
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.serial.SerialInput
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.serial.SerialInput
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.serial.SerialInput
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialOutput.html b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialOutput.html
index 211d02bf3..3ef060871 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialOutput.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialOutput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.SerialOutput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.SerialOutput (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialOutput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.serial.SerialOutput
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.serial.SerialOutput
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.serial.SerialOutput
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.serial.SerialOutput
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.serial.SerialOutput
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialBinding.html b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialBinding.html
index 2f281b435..521c3b89d 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.SerialSerialBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.SerialSerialBinding (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialSerialBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.serial.SerialSerialBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialKeyCreator.html b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialKeyCreator.html
index 1ad65f107..a3a4f5007 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/SerialSerialKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.SerialSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.SerialSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.SerialSerialKeyCreator (Sleepycat Softwa
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.SerialSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialKeyCreator
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialKeyCreator
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialKeyCreator
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useSerialSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SerialSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.serial.SerialSerialKeyCreator
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.serial.SerialSerialKeyCreator
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/StoredClassCatalog.html b/db/docs/java/com/sleepycat/bind/serial/class-use/StoredClassCatalog.html
index 03c31e577..28086446d 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/StoredClassCatalog.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/StoredClassCatalog.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.StoredClassCatalog (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.StoredClassCatalog (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.StoredClassCatalog (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useStoredClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.serial.StoredClassCatalog
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.serial.StoredClassCatalog
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.serial.StoredClassCatalog
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useStoredClassCatalog.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredClassCatalog.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.serial.StoredClassCatalog
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.serial.StoredClassCatalog
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialBinding.html b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialBinding.html
index e10e2ff24..89d24a844 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.TupleSerialBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.TupleSerialBinding (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialB
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.htm
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.htm
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.htm
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.htm
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.htm
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.htm
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialKeyCreator.html b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialKeyCreator.html
index 2fb0ff74d..f6e047b36 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.TupleSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.TupleSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.TupleSerialKeyCreator (Sleepycat Softwar
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialK
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -122,7 +125,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -138,7 +141,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -147,7 +150,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -160,6 +163,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -167,6 +171,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledBinding.html b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledBinding.html
index cc14534a3..9c681df00 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledBinding.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledBinding (Sleepycat
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialM
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledB
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#TupleSerialMarshalledKeyCreator(com.sleepycat.bind.serial.TupleSerialMarshalledBinding, java.lang.String)">TupleSerialMarshalledKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>&nbsp;binding,
@@ -121,7 +124,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledB
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -137,7 +140,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledB
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -146,7 +149,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledB
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -159,6 +162,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledB
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -166,6 +170,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledB
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledKeyCreator.html b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledKeyCreator.html
index 1856f0285..015756813 100644
--- a/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/serial/class-use/TupleSerialMarshalledKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator (Sleepyc
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialM
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A> in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A> in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledK
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -124,7 +127,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledK
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -140,7 +143,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledK
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -149,7 +152,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledK
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/serial//class-useTupleSerialMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -162,6 +165,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledK
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -169,6 +173,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledK
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/package-frame.html b/db/docs/java/com/sleepycat/bind/serial/package-frame.html
index 91afdefc0..9b1be1eab 100644
--- a/db/docs/java/com/sleepycat/bind/serial/package-frame.html
+++ b/db/docs/java/com/sleepycat/bind/serial/package-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind.serial (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial package">
@@ -34,6 +34,8 @@ Interfaces</FONT>&nbsp;
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
+<A HREF="SerialBase.html" title="class in com.sleepycat.bind.serial" target="classFrame">SerialBase</A>
+<BR>
<A HREF="SerialBinding.html" title="class in com.sleepycat.bind.serial" target="classFrame">SerialBinding</A>
<BR>
<A HREF="SerialInput.html" title="class in com.sleepycat.bind.serial" target="classFrame">SerialInput</A>
diff --git a/db/docs/java/com/sleepycat/bind/serial/package-summary.html b/db/docs/java/com/sleepycat/bind/serial/package-summary.html
index d7142ba20..55da403bd 100644
--- a/db/docs/java/com/sleepycat/bind/serial/package-summary.html
+++ b/db/docs/java/com/sleepycat/bind/serial/package-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind.serial (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.serial package">
@@ -14,9 +14,11 @@ com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.bind.serial (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -85,8 +88,8 @@ Bindings that use Java serialization.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A></B></TD>
@@ -100,8 +103,13 @@ Bindings that use Java serialization.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A></B></TD>
+<TD>A base class for serial bindings creators that provides control over the
+ allocation of the output buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A></B></TD>
@@ -162,6 +170,8 @@ Bindings that use Java serialization.
<P>
<P>
+<DL>
+</DL>
<HR>
@@ -170,7 +180,7 @@ Bindings that use Java serialization.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -186,7 +196,7 @@ Bindings that use Java serialization.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -195,7 +205,7 @@ Bindings that use Java serialization.
&nbsp;<A HREF="../../../../com/sleepycat/bind/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -208,6 +218,7 @@ Bindings that use Java serialization.
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -215,6 +226,6 @@ Bindings that use Java serialization.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/package-tree.html b/db/docs/java/com/sleepycat/bind/serial/package-tree.html
index 8a0748fbe..ebcc9ec45 100644
--- a/db/docs/java/com/sleepycat/bind/serial/package-tree.html
+++ b/db/docs/java/com/sleepycat/bind/serial/package-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind.serial Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind.serial Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ com.sleepycat.bind.serial Class Hierarchy (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.bind.serial Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.bind.serial Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,34 +87,40 @@ Hierarchy For Package com.sleepycat.bind.serial
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" title="class or interface in java.lang"><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" title="class or interface in java.io"><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" title="class or interface in java.io"><B>ObjectInputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io"><B>InputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>)
+<UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io"><B>ObjectInputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>SerialInput</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><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" title="class or interface in java.io"><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" title="class or interface in java.io"><B>ObjectOutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html" title="class or interface in java.io">ObjectOutput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io"><B>OutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>SerialOutput</B></A></UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io"><B>ObjectOutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html" title="class or interface in java.io">ObjectOutput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
+<UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>SerialOutput</B></A></UL>
+</UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><B>SerialBase</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>StoredClassCatalog</B></A> (implements com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>StoredClassCatalog</B></A> (implements com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>)
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><B>TupleBase</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledBinding</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledKeyCreator</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledKeyCreator</B></A></UL>
+</UL>
</UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>ClassCatalog</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>ClassCatalog</B></A></UL>
<HR>
@@ -120,7 +129,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -136,7 +145,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -145,7 +154,7 @@ Interface Hierarchy
&nbsp;<A HREF="../../../../com/sleepycat/bind/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -158,6 +167,7 @@ Interface Hierarchy
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -165,6 +175,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/serial/package-use.html b/db/docs/java/com/sleepycat/bind/serial/package-use.html
index 7d19b11f1..9267e42ef 100644
--- a/db/docs/java/com/sleepycat/bind/serial/package-use.html
+++ b/db/docs/java/com/sleepycat/bind/serial/package-use.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Package com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Package com.sleepycat.bind.serial (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Package com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Package com.sleepycat.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Package com.sleepycat.bind.serial (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -96,8 +99,8 @@ Packages that use <A HREF="../../../../com/sleepycat/bind/serial/package-summary
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> used by <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> used by <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../../com/sleepycat/bind/serial/class-use/ClassCatalog.html#com.sleepycat.bind.serial"><B>ClassCatalog</B></A></B>
@@ -107,6 +110,13 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
serialization.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bind/serial/class-use/SerialBase.html#com.sleepycat.bind.serial"><B>SerialBase</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A base class for serial bindings creators that provides control over the
+ allocation of the output buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../../com/sleepycat/bind/serial/class-use/SerialBinding.html#com.sleepycat.bind.serial"><B>SerialBinding</B></A></B>
<BR>
@@ -139,8 +149,8 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> used by <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> used by <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../../com/sleepycat/bind/serial/class-use/ClassCatalog.html#com.sleepycat.collections"><B>ClassCatalog</B></A></B>
@@ -166,7 +176,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -182,7 +192,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -191,7 +201,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind/serial/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -204,6 +214,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -211,6 +222,6 @@ Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/BooleanBinding.html b/db/docs/java/com/sleepycat/bind/tuple/BooleanBinding.html
index 66edf78dc..5336318a5 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/BooleanBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/BooleanBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-BooleanBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+BooleanBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.BooleanBinding class">
@@ -14,9 +14,11 @@ BooleanBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="BooleanBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="BooleanBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/BooleanBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BooleanBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class BooleanBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.BooleanBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.BooleanBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>BooleanBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>BooleanBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
@@ -116,19 +121,14 @@ A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#BooleanBinding()">BooleanBinding</A></B>()</CODE>
@@ -143,8 +143,8 @@ A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -173,12 +173,12 @@ A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +193,40 @@ A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +242,8 @@ public <B>BooleanBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +252,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +271,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +284,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +348,7 @@ public static void <B>booleanToEntry</B>(boolean&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +364,7 @@ public static void <B>booleanToEntry</B>(boolean&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +373,7 @@ public static void <B>booleanToEntry</B>(boolean&nbsp;val,
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/BooleanBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BooleanBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +386,7 @@ public static void <B>booleanToEntry</B>(boolean&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +400,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/ByteBinding.html b/db/docs/java/com/sleepycat/bind/tuple/ByteBinding.html
index 17fec807c..cfc6406ea 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/ByteBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/ByteBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-ByteBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+ByteBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.ByteBinding class">
@@ -14,9 +14,11 @@ ByteBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ByteBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ByteBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/ByteBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class ByteBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.ByteBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.ByteBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>ByteBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>ByteBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
@@ -116,19 +121,14 @@ A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#ByteBinding()">ByteBinding</A></B>()</CODE>
@@ -143,8 +143,8 @@ A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -173,12 +173,12 @@ A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +193,40 @@ A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +242,8 @@ public <B>ByteBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +252,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +271,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +284,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +348,7 @@ public static void <B>byteToEntry</B>(byte&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +364,7 @@ public static void <B>byteToEntry</B>(byte&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +373,7 @@ public static void <B>byteToEntry</B>(byte&nbsp;val,
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/ByteBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +386,7 @@ public static void <B>byteToEntry</B>(byte&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +400,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/CharacterBinding.html b/db/docs/java/com/sleepycat/bind/tuple/CharacterBinding.html
index 3cbf240cd..25e15f66d 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/CharacterBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/CharacterBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-CharacterBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+CharacterBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.CharacterBinding class">
@@ -14,9 +14,11 @@ CharacterBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CharacterBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CharacterBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/CharacterBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CharacterBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class CharacterBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.CharacterBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.CharacterBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>CharacterBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>CharacterBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
@@ -116,19 +121,14 @@ A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#CharacterBinding()">CharacterBinding</A></B>()</CODE>
@@ -143,8 +143,8 @@ A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -173,12 +173,12 @@ A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +193,40 @@ A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +242,8 @@ public <B>CharacterBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +252,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +271,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +284,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +348,7 @@ public static void <B>charToEntry</B>(char&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +364,7 @@ public static void <B>charToEntry</B>(char&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +373,7 @@ public static void <B>charToEntry</B>(char&nbsp;val,
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/CharacterBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CharacterBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +386,7 @@ public static void <B>charToEntry</B>(char&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +400,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/DoubleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/DoubleBinding.html
index ae21b2e62..ab451b8a2 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/DoubleBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/DoubleBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-DoubleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+DoubleBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.DoubleBinding class">
@@ -14,9 +14,11 @@ DoubleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DoubleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DoubleBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/DoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,20 +90,27 @@ com.sleepycat.bind.tuple</FONT>
Class DoubleBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.DoubleBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.DoubleBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>DoubleBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>DoubleBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
wrapper or a <code>double</code> primitive.
+ <p><em>Note:</em> This class produces byte array values that by default
+ (without a custom comparator) do <em>not</em> sort correctly for negative
+ values. Only non-negative values are sorted correctly by default. To sort
+ all values correctly by default, use <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedDoubleBinding</CODE></A>.</p>
+
<p>There are two ways to use this class:</p>
<ol>
<li>When using the <A HREF="../../../../com/sleepycat/db/package-summary.html"><CODE>com.sleepycat.db</CODE></A> package directly, the static
@@ -116,19 +126,14 @@ A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#DoubleBinding()">DoubleBinding</A></B>()</CODE>
@@ -143,8 +148,8 @@ A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -173,12 +178,12 @@ A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +198,40 @@ A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +247,8 @@ public <B>DoubleBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +257,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +276,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +289,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +353,7 @@ public static void <B>doubleToEntry</B>(double&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +369,7 @@ public static void <B>doubleToEntry</B>(double&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +378,7 @@ public static void <B>doubleToEntry</B>(double&nbsp;val,
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/DoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +391,7 @@ public static void <B>doubleToEntry</B>(double&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +405,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/FloatBinding.html b/db/docs/java/com/sleepycat/bind/tuple/FloatBinding.html
index e89ed4224..62ff7f2ce 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/FloatBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/FloatBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-FloatBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+FloatBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.FloatBinding class">
@@ -14,9 +14,11 @@ FloatBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="FloatBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="FloatBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/FloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,20 +90,27 @@ com.sleepycat.bind.tuple</FONT>
Class FloatBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.FloatBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.FloatBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>FloatBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>FloatBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
wrapper or a <code>float</code> primitive.
+ <p><em>Note:</em> This class produces byte array values that by default
+ (without a custom comparator) do <em>not</em> sort correctly for negative
+ values. Only non-negative values are sorted correctly by default. To sort
+ all values correctly by default, use <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedFloatBinding</CODE></A>.</p>
+
<p>There are two ways to use this class:</p>
<ol>
<li>When using the <A HREF="../../../../com/sleepycat/db/package-summary.html"><CODE>com.sleepycat.db</CODE></A> package directly, the static
@@ -116,19 +126,14 @@ A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html#FloatBinding()">FloatBinding</A></B>()</CODE>
@@ -143,8 +148,8 @@ A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -173,12 +178,12 @@ A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +198,40 @@ A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +247,8 @@ public <B>FloatBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +257,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +276,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +289,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +353,7 @@ public static void <B>floatToEntry</B>(float&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +369,7 @@ public static void <B>floatToEntry</B>(float&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +378,7 @@ public static void <B>floatToEntry</B>(float&nbsp;val,
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/FloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +391,7 @@ public static void <B>floatToEntry</B>(float&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +405,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/IntegerBinding.html b/db/docs/java/com/sleepycat/bind/tuple/IntegerBinding.html
index ddaab6545..1eb6116ed 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/IntegerBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/IntegerBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-IntegerBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+IntegerBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.IntegerBinding class">
@@ -14,9 +14,11 @@ IntegerBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="IntegerBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="IntegerBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/IntegerBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IntegerBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class IntegerBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.IntegerBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.IntegerBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>IntegerBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>IntegerBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
@@ -116,19 +121,14 @@ A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#IntegerBinding()">IntegerBinding</A></B>()</CODE>
@@ -143,8 +143,8 @@ A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -164,21 +164,21 @@ A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
</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/bind/tuple/IntegerBinding.html#intToEntry(int, com.sleepycat.db.DatabaseEntry)">intToEntry</A></B>(int&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>int</code> value into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#intToEntry(int, com.sleepycat.db.DatabaseEntry)">intToEntry</A></B>(int&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>int</code> value into an entry buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +193,40 @@ A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +242,8 @@ public <B>IntegerBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +252,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +271,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +284,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +348,7 @@ public static void <B>intToEntry</B>(int&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +364,7 @@ public static void <B>intToEntry</B>(int&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +373,7 @@ public static void <B>intToEntry</B>(int&nbsp;val,
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/IntegerBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IntegerBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +386,7 @@ public static void <B>intToEntry</B>(int&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +400,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/LongBinding.html b/db/docs/java/com/sleepycat/bind/tuple/LongBinding.html
index 602298629..5b8c5b58b 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/LongBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/LongBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-LongBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+LongBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.LongBinding class">
@@ -14,9 +14,11 @@ LongBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LongBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LongBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/LongBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LongBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class LongBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.LongBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.LongBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>LongBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>LongBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
@@ -116,19 +121,14 @@ A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#LongBinding()">LongBinding</A></B>()</CODE>
@@ -143,8 +143,8 @@ A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -164,21 +164,21 @@ A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
</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/bind/tuple/LongBinding.html#longToEntry(long, com.sleepycat.db.DatabaseEntry)">longToEntry</A></B>(long&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>long</code> value into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#longToEntry(long, com.sleepycat.db.DatabaseEntry)">longToEntry</A></B>(long&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>long</code> value into an entry buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +193,40 @@ A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +242,8 @@ public <B>LongBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +252,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +271,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +284,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +348,7 @@ public static void <B>longToEntry</B>(long&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,16 +364,16 @@ public static void <B>longToEntry</B>(long&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/LongBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LongBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +386,7 @@ public static void <B>longToEntry</B>(long&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +400,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleEntry.html b/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleEntry.html
index b91c79a65..25f165c1c 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleEntry.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-MarshalledTupleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+MarshalledTupleEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.MarshalledTupleEntry interface">
@@ -14,9 +14,11 @@ MarshalledTupleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MarshalledTupleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MarshalledTupleEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/MarshalledTupleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.bind.tuple</FONT>
Interface MarshalledTupleEntry</H2>
<HR>
<DL>
-<DT>public interface <B>MarshalledTupleEntry</B></DL>
+<DT><PRE>public interface <B>MarshalledTupleEntry</B></DL>
+</PRE>
<P>
A marshalling interface implemented by key, data or entity classes that
@@ -110,22 +114,14 @@ A marshalling interface implemented by key, data or entity classes that
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -147,26 +143,20 @@ A marshalling interface implemented by key, data or entity classes that
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="marshalEntry(com.sleepycat.bind.tuple.TupleOutput)"><!-- --></A><H3>
marshalEntry</H3>
<PRE>
-public void <B>marshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</PRE>
+void <B>marshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</PRE>
<DL>
<DD>Construct the key or data tuple entry from the key or data object.
<P>
@@ -179,7 +169,7 @@ public void <B>marshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/Tu
<A NAME="unmarshalEntry(com.sleepycat.bind.tuple.TupleInput)"><!-- --></A><H3>
unmarshalEntry</H3>
<PRE>
-public void <B>unmarshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</PRE>
+void <B>unmarshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</PRE>
<DL>
<DD>Construct the key or data object from the key or data tuple entry.
<P>
@@ -196,7 +186,7 @@ public void <B>unmarshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -212,16 +202,16 @@ public void <B>unmarshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/MarshalledTupleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -234,6 +224,7 @@ public void <B>unmarshalEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -247,6 +238,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html b/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html
index f65d4362b..946224bfa 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)
+MarshalledTupleKeyEntity (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.MarshalledTupleKeyEntity interface">
@@ -14,9 +14,11 @@ MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MarshalledTupleKeyEntity (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleKeyEntity.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.bind.tuple</FONT>
Interface MarshalledTupleKeyEntity</H2>
<HR>
<DL>
-<DT>public interface <B>MarshalledTupleKeyEntity</B></DL>
+<DT><PRE>public interface <B>MarshalledTupleKeyEntity</B></DL>
+</PRE>
<P>
A marshalling interface implemented by entity classes that represent keys as
@@ -109,22 +113,14 @@ A marshalling interface implemented by entity classes that represent keys as
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -164,26 +160,20 @@ A marshalling interface implemented by entity classes that represent keys as
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="marshalPrimaryKey(com.sleepycat.bind.tuple.TupleOutput)"><!-- --></A><H3>
marshalPrimaryKey</H3>
<PRE>
-public void <B>marshalPrimaryKey</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</PRE>
+void <B>marshalPrimaryKey</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</PRE>
<DL>
<DD>Extracts the entity's primary key and writes it to the key output.
<P>
@@ -196,7 +186,7 @@ public void <B>marshalPrimaryKey</B>(<A HREF="../../../../com/sleepycat/bind/tup
<A NAME="unmarshalPrimaryKey(com.sleepycat.bind.tuple.TupleInput)"><!-- --></A><H3>
unmarshalPrimaryKey</H3>
<PRE>
-public void <B>unmarshalPrimaryKey</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput)</PRE>
+void <B>unmarshalPrimaryKey</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput)</PRE>
<DL>
<DD>Completes construction of the entity by setting its primary key from the
stored primary key.
@@ -210,8 +200,8 @@ public void <B>unmarshalPrimaryKey</B>(<A HREF="../../../../com/sleepycat/bind/t
<A NAME="marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)"><!-- --></A><H3>
marshalSecondaryKey</H3>
<PRE>
-public boolean <B>marshalSecondaryKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;keyName,
- <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</PRE>
+boolean <B>marshalSecondaryKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;keyName,
+ <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</PRE>
<DL>
<DD>Extracts the entity's secondary key and writes it to the key output.
<P>
@@ -226,7 +216,7 @@ public boolean <B>marshalSecondaryKey</B>(<A HREF="http://java.sun.com/j2se/1.3/
<A NAME="nullifyForeignKey(java.lang.String)"><!-- --></A><H3>
nullifyForeignKey</H3>
<PRE>
-public boolean <B>nullifyForeignKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;keyName)</PRE>
+boolean <B>nullifyForeignKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;keyName)</PRE>
<DL>
<DD>Clears the entity's secondary key fields for the given key name.
@@ -249,7 +239,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="http://java.sun.com/j2se/1.3/do
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -265,16 +255,16 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="http://java.sun.com/j2se/1.3/do
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleKeyEntity.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -287,6 +277,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="http://java.sun.com/j2se/1.3/do
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -300,6 +291,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/ShortBinding.html b/db/docs/java/com/sleepycat/bind/tuple/ShortBinding.html
index 71d3b0374..6aeffa125 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/ShortBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/ShortBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-ShortBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+ShortBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.ShortBinding class">
@@ -14,9 +14,11 @@ ShortBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ShortBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ShortBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/ShortBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ShortBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class ShortBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.ShortBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.ShortBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>ShortBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>ShortBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
@@ -116,19 +121,14 @@ A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#ShortBinding()">ShortBinding</A></B>()</CODE>
@@ -143,8 +143,8 @@ A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -164,12 +164,12 @@ A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,34 +193,40 @@ A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +242,8 @@ public <B>ShortBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,7 +252,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -265,7 +271,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -278,20 +284,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -331,7 +348,7 @@ public static void <B>shortToEntry</B>(short&nbsp;val,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,16 +364,16 @@ public static void <B>shortToEntry</B>(short&nbsp;val,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/ShortBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ShortBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +386,7 @@ public static void <B>shortToEntry</B>(short&nbsp;val,
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +400,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/SortedDoubleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/SortedDoubleBinding.html
new file mode 100644
index 000000000..5762f1d97
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/tuple/SortedDoubleBinding.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
+<TITLE>
+SortedDoubleBinding (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.SortedDoubleBinding class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="SortedDoubleBinding (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/SortedDoubleBinding.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/SortedDoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedDoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bind.tuple</FONT>
+<BR>
+Class SortedDoubleBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.SortedDoubleBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>SortedDoubleBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
+
+<P>
+A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.
+
+ <p>This class produces byte array values that by default (without a custom
+ comparator) sort correctly, including sorting of negative values.
+ Therefore, this class should normally be used instead of <A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>DoubleBinding</CODE></A> which does not by default support sorting of negative values.
+ Please note that:</p>
+ <ul>
+ <li>The byte array (stored) formats used by <A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>DoubleBinding</CODE></A> and
+ <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedDoubleBinding</CODE></A> are different and incompatible. They are not
+ interchangable once data has been stored.</li>
+ <li>An instance of <A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>DoubleBinding</CODE></A>, not <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedDoubleBinding</CODE></A>,
+ is returned by <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>TupleBinding.getPrimitiveBinding(java.lang.Class)</CODE></A> method. Therefore,
+ to use <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedDoubleBinding</CODE></A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>TupleBinding.getPrimitiveBinding(java.lang.Class)</CODE></A>
+ should not be called.</li>
+ </ul>
+
+ <p>There are two ways to use this class:</p>
+ <ol>
+ <li>When using the <A HREF="../../../../com/sleepycat/db/package-summary.html"><CODE>com.sleepycat.db</CODE></A> package directly, the static
+ methods in this class can be used to convert between primitive values and
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A> objects.</li>
+ <li>When using the <A HREF="../../../../com/sleepycat/collections/package-summary.html"><CODE>com.sleepycat.collections</CODE></A> package, an instance of
+ this class can be used with any stored collection.</li>
+ </ol>
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#SortedDoubleBinding()">SortedDoubleBinding</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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/bind/tuple/SortedDoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)">doubleToEntry</A></B>(double&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>double</code> value into an entry buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)">entryToDouble</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>double</code> 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a key or data object to a tuple entry.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="SortedDoubleBinding()"><!-- --></A><H3>
+SortedDoubleBinding</H3>
+<PRE>
+public <B>SortedDoubleBinding</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="entryToObject(com.sleepycat.bind.tuple.TupleInput)"><!-- --></A><H3>
+entryToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
+<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the tuple key or data entry.
+<DT><B>Returns:</B><DD>the key or data object constructed from the entry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToEntry</H3>
+<PRE>
+public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
+<DD>Converts a key or data object to a tuple entry.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the key or data object.<DD><CODE>output</CODE> - is the tuple entry to which the key or data should be
+ written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entryToDouble(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+entryToDouble</H3>
+<PRE>
+public static double <B>entryToDouble</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Converts an entry buffer into a simple <code>double</code> value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>entry</CODE> - is the source entry buffer.
+<DT><B>Returns:</B><DD>the resulting value.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="doubleToEntry(double, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+doubleToEntry</H3>
+<PRE>
+public static void <B>doubleToEntry</B>(double&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Converts a simple <code>double</code> value into an entry buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the source value.<DD><CODE>entry</CODE> - is the destination entry buffer.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/SortedDoubleBinding.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/SortedDoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedDoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/SortedFloatBinding.html b/db/docs/java/com/sleepycat/bind/tuple/SortedFloatBinding.html
new file mode 100644
index 000000000..e613b6683
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/tuple/SortedFloatBinding.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
+<TITLE>
+SortedFloatBinding (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.SortedFloatBinding class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="SortedFloatBinding (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/SortedFloatBinding.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/SortedFloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedFloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bind.tuple</FONT>
+<BR>
+Class SortedFloatBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.SortedFloatBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>SortedFloatBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
+
+<P>
+A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.
+
+ <p>This class produces byte array values that by default (without a custom
+ comparator) sort correctly, including sorting of negative values.
+ Therefore, this class should normally be used instead of <A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>FloatBinding</CODE></A> which does not by default support sorting of negative values.
+ Please note that:</p>
+ <ul>
+ <li>The byte array (stored) formats used by <A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>FloatBinding</CODE></A> and
+ <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedFloatBinding</CODE></A> are different and incompatible. They are not
+ interchangable once data has been stored.</li>
+ <li>An instance of <A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>FloatBinding</CODE></A>, not <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedFloatBinding</CODE></A>, is
+ returned by <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>TupleBinding.getPrimitiveBinding(java.lang.Class)</CODE></A> method. Therefore, to
+ use <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedFloatBinding</CODE></A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>TupleBinding.getPrimitiveBinding(java.lang.Class)</CODE></A>
+ should not be called.</li>
+ </ul>
+
+ <p>There are two ways to use this class:</p>
+ <ol>
+ <li>When using the <A HREF="../../../../com/sleepycat/db/package-summary.html"><CODE>com.sleepycat.db</CODE></A> package directly, the static
+ methods in this class can be used to convert between primitive values and
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A> objects.</li>
+ <li>When using the <A HREF="../../../../com/sleepycat/collections/package-summary.html"><CODE>com.sleepycat.collections</CODE></A> package, an instance of
+ this class can be used with any stored collection.</li>
+ </ol>
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#SortedFloatBinding()">SortedFloatBinding</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;float</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)">entryToFloat</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>float</code> 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.</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/bind/tuple/SortedFloatBinding.html#floatToEntry(float, com.sleepycat.db.DatabaseEntry)">floatToEntry</A></B>(float&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>float</code> value into an entry buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a key or data object to a tuple entry.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="SortedFloatBinding()"><!-- --></A><H3>
+SortedFloatBinding</H3>
+<PRE>
+public <B>SortedFloatBinding</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="entryToObject(com.sleepycat.bind.tuple.TupleInput)"><!-- --></A><H3>
+entryToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
+<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the tuple key or data entry.
+<DT><B>Returns:</B><DD>the key or data object constructed from the entry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToEntry</H3>
+<PRE>
+public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
+<DD>Converts a key or data object to a tuple entry.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the key or data object.<DD><CODE>output</CODE> - is the tuple entry to which the key or data should be
+ written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entryToFloat(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+entryToFloat</H3>
+<PRE>
+public static float <B>entryToFloat</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Converts an entry buffer into a simple <code>float</code> value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>entry</CODE> - is the source entry buffer.
+<DT><B>Returns:</B><DD>the resulting value.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="floatToEntry(float, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+floatToEntry</H3>
+<PRE>
+public static void <B>floatToEntry</B>(float&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Converts a simple <code>float</code> value into an entry buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the source value.<DD><CODE>entry</CODE> - is the destination entry buffer.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/SortedFloatBinding.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/SortedFloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedFloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/StringBinding.html b/db/docs/java/com/sleepycat/bind/tuple/StringBinding.html
index ad10d7477..1dec12125 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/StringBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/StringBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StringBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+StringBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.StringBinding class">
@@ -14,9 +14,11 @@ StringBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StringBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StringBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/StringBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StringBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class StringBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.StringBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.StringBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StringBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>StringBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> for a simple <code>String</code> value.
@@ -115,19 +120,14 @@ A concrete <code>TupleBinding</code> for a simple <code>String</code> value.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#StringBinding()">StringBinding</A></B>()</CODE>
@@ -142,8 +142,8 @@ A concrete <code>TupleBinding</code> for a simple <code>String</code> value.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -163,12 +163,12 @@ A concrete <code>TupleBinding</code> for a simple <code>String</code> value.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -192,34 +192,40 @@ A concrete <code>TupleBinding</code> for a simple <code>String</code> value.
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -235,8 +241,8 @@ public <B>StringBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -245,7 +251,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -264,7 +270,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -277,20 +283,31 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-objectToEntry</H3>
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
<PRE>
-public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
-<DD>Converts an Object into a entry buffer.
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">TupleBase</A></CODE></B></DD>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></CODE></DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>TupleBase.setTupleBufferSize(int)</CODE></A></DL>
</DD>
</DL>
<HR>
@@ -330,7 +347,7 @@ public static void <B>stringToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/do
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -346,16 +363,16 @@ public static void <B>stringToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/do
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/StringBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StringBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -368,6 +385,7 @@ public static void <B>stringToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/do
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -381,6 +399,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleBase.html b/db/docs/java/com/sleepycat/bind/tuple/TupleBase.html
new file mode 100644
index 000000000..f98cf0f3c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleBase.html
@@ -0,0 +1,457 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
+<TITLE>
+TupleBase (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleBase class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="TupleBase (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/TupleBase.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bind.tuple</FONT>
+<BR>
+Class TupleBase</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleBase</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>, <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>, <A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>TupleBase</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A base class for tuple bindings and tuple key creators that provides control
+ over the allocation of the output buffer.
+
+ <p>Tuple bindings and key creators append data to a <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleOutput</CODE></A>
+ instance, which is also a <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><CODE>FastOutputStream</CODE></A>
+ instance. This object has a byte array buffer that is resized when it is
+ full. The reallocation of this buffer can be a performance factor for
+ some applications using large objects. To manage this issue, the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>setTupleBufferSize(int)</CODE></A> method may be used to control the initial size of the
+ buffer, and the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</CODE></A> method may be overridden by
+ subclasses to take over creation of the TupleOutput object.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#TupleBase()">TupleBase</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializes the initial output buffer size to zero.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</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;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the initial byte size of the output buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</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/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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>static&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</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="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A></B>(byte[]&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</CODE></A></I></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/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></B>(int&nbsp;byteSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the initial byte size of the output buffer that is allocated by the
+ default implementation of <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="TupleBase()"><!-- --></A><H3>
+TupleBase</H3>
+<PRE>
+public <B>TupleBase</B>()</PRE>
+<DL>
+<DD>Initializes the initial output buffer size to zero.
+
+ <p>Unless <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>setTupleBufferSize(int)</CODE></A> is called, the default <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><CODE>FastOutputStream.DEFAULT_INIT_SIZE</CODE></A> size will be
+ used.</p>
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="setTupleBufferSize(int)"><!-- --></A><H3>
+setTupleBufferSize</H3>
+<PRE>
+public void <B>setTupleBufferSize</B>(int&nbsp;byteSize)</PRE>
+<DL>
+<DD>Sets the initial byte size of the output buffer that is allocated by the
+ default implementation of <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</CODE></A>.
+
+ <p>If this property is zero (the default), the default <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><CODE>FastOutputStream.DEFAULT_INIT_SIZE</CODE></A> size is used.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>byteSize</CODE> - the initial byte size of the output buffer, or zero to
+ use the default size.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTupleBufferSize()"><!-- --></A><H3>
+getTupleBufferSize</H3>
+<PRE>
+public int <B>getTupleBufferSize</B>()</PRE>
+<DL>
+<DD>Returns the initial byte size of the output buffer.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the initial byte size of the output buffer.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>setTupleBufferSize(int)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTupleOutput(java.lang.Object)"><!-- --></A><H3>
+getTupleOutput</H3>
+<PRE>
+protected <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>getTupleOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
+<DL>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+
+ <p>The default implementation of this method creates a new TupleOutput
+ with an initial buffer size that can be changed using the <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>setTupleBufferSize(int)</CODE></A> method.</p>
+
+ <p>This method may be overridden to return a TupleOutput instance. For
+ example, an instance per thread could be created and returned by this
+ method. If a TupleOutput instance is reused, be sure to call its
+ <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()"><CODE>FastOutputStream.reset()</CODE></A> method before each
+ use.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the object to be written to the tuple output, and may
+ be used by subclasses to determine the size of the output buffer.
+<DT><B>Returns:</B><DD>an empty TupleOutput instance.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><CODE>setTupleBufferSize(int)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+outputToEntry</H3>
+<PRE>
+public static void <B>outputToEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Utility method to set the data in a entry buffer to the data in a tuple
+ output object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>output</CODE> - is the source tuple output object.<DD><CODE>entry</CODE> - is the destination entry buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+inputToEntry</H3>
+<PRE>
+public static void <B>inputToEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Utility method to set the data in a entry buffer to the data in a tuple
+ input object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the source tuple input object.<DD><CODE>entry</CODE> - is the destination entry buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entryToInput(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+entryToInput</H3>
+<PRE>
+public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A> <B>entryToInput</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
+<DL>
+<DD>Utility method to create a new tuple input object for reading the data
+ from a given buffer. If an existing input is reused, it is reset before
+ returning it.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>entry</CODE> - is the source entry buffer.
+<DT><B>Returns:</B><DD>the new tuple input object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newOutput()"><!-- --></A><H3>
+newOutput</H3>
+<PRE>
+public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>newOutput</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</CODE></A></I>
+<P>
+<DD>Utility method for use by bindings to create a tuple output object.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new tuple output object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newOutput(byte[])"><!-- --></A><H3>
+newOutput</H3>
+<PRE>
+public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>newOutput</B>(byte[]&nbsp;buffer)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>getTupleOutput(java.lang.Object)</CODE></A></I>
+<P>
+<DD>Utility method for use by bindings to create a tuple output object
+ with a specific starting size.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new tuple output object.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/TupleBase.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/TupleBinding.html
index 9c40cf4b2..918247275 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleBinding class">
@@ -14,9 +14,11 @@ TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,17 +90,19 @@ com.sleepycat.bind.tuple</FONT>
Class TupleBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A></DD>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+<DT><PRE>public abstract class <B>TupleBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+</PRE>
<P>
An abstract <code>EntryBinding</code> that treats a key or data entry as a
@@ -113,26 +118,27 @@ An abstract <code>EntryBinding</code> that treats a key or data entry as a
<p>For key or data entries which are Java primitive classes (String,
Integer, etc) <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>getPrimitiveBinding(java.lang.Class)</CODE></A> may be used to return a builtin
- tuple binding. A custom tuple binding for these types is not needed.</p>
+ tuple binding. A custom tuple binding for these types is not needed.
+ <em>Note:</em> <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>getPrimitiveBinding(java.lang.Class)</CODE></A> returns bindings that do not
+ sort negative floating point numbers correctly by default. See <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedFloatBinding</CODE></A> and <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedDoubleBinding</CODE></A> for details.</p>
+
+ <p>When a tuple binding is used as a key binding, it produces key values
+ with a reasonable default sort order. For more information on the default
+ sort order, see <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleOutput</CODE></A>.</p>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#TupleBinding()">TupleBinding</A></B>()</CODE>
@@ -147,17 +153,8 @@ An abstract <code>EntryBinding</code> that treats a key or data entry as a
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</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>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -185,33 +182,6 @@ An abstract <code>EntryBinding</code> that treats a key or data entry as a
</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/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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>static&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.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>static&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A></B>(byte[]&nbsp;buffer)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to create a tuple output object
- with a specific starting size.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
@@ -228,39 +198,35 @@ An abstract <code>EntryBinding</code> that treats a key or data entry as a
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a key or data object to a tuple entry.</TD>
</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</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/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry buffer to the data in a tuple
- output object.</TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -278,8 +244,8 @@ public <B>TupleBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -288,7 +254,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts a entry buffer into an Object.
<P>
<DD><DL>
@@ -307,7 +273,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts an Object into a entry buffer.
<P>
<DD><DL>
@@ -319,96 +285,6 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</DL>
<HR>
-<A NAME="newOutput()"><!-- --></A><H3>
-newOutput</H3>
-<PRE>
-public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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="newOutput(byte[])"><!-- --></A><H3>
-newOutput</H3>
-<PRE>
-public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>newOutput</B>(byte[]&nbsp;buffer)</PRE>
-<DL>
-<DD>Utility method for use by bindings to create a tuple output object
- with a specific starting size.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new tuple output object.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-outputToEntry</H3>
-<PRE>
-public static void <B>outputToEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
-<DL>
-<DD>Utility method to set the data in a entry 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>entry</CODE> - is the destination entry buffer.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-inputToEntry</H3>
-<PRE>
-public static void <B>inputToEntry</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
-<DL>
-<DD>Utility method to set the data in a entry buffer to the data in a tuple
- input object.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the source tuple input object.<DD><CODE>entry</CODE> - is the destination entry buffer.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entryToInput(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
-entryToInput</H3>
-<PRE>
-public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A> <B>entryToInput</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
-<DL>
-<DD>Utility method to create a new tuple input object for reading the data
- from a given buffer. 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>entry</CODE> - is the source entry buffer.
-<DT><B>Returns:</B><DD>the new tuple input object.</DL>
-</DD>
-</DL>
-<HR>
-
<A NAME="entryToObject(com.sleepycat.bind.tuple.TupleInput)"><!-- --></A><H3>
entryToObject</H3>
<PRE>
@@ -462,6 +338,11 @@ public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" t
<li><code>Float</code></li>
<li><code>Double</code></li>
</ul>
+
+ <p><em>Note:</em> <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><CODE>getPrimitiveBinding(java.lang.Class)</CODE></A> returns bindings that do
+ not sort negative floating point numbers correctly by default. See
+ <A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedFloatBinding</CODE></A> and <A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>SortedDoubleBinding</CODE></A> for
+ details.</p>
<P>
<DD><DL>
</DL>
@@ -481,7 +362,7 @@ public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" t
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -497,16 +378,16 @@ public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" t
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -519,6 +400,7 @@ public static <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" t
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -532,6 +414,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleInput.html b/db/docs/java/com/sleepycat/bind/tuple/TupleInput.html
index 5aa5931e7..76b33c755 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleInput.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleInput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleInput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleInput class">
@@ -14,9 +14,11 @@ TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleInput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.util.FastInputStream">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>
@@ -87,13 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class TupleInput</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">java.io.InputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">com.sleepycat.util.FastInputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleInput</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">java.io.InputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">com.sleepycat.util.FastInputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleInput</B>
</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A></DD>
+</DL>
<HR>
<DL>
-<DT>public class <B>TupleInput</B><DT>extends <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></DL>
+<DT><PRE>public class <B>TupleInput</B><DT>extends <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></DL>
+</PRE>
<P>
An <code>InputStream</code> with <code>DataInput</code>-like methods for
@@ -128,30 +135,60 @@ An <code>InputStream</code> with <code>DataInput</code>-like methods for
character ordering.</li>
</ul>
- <p>Floats and doubles are stored in standard Java integer-bit representation
- (IEEE 754). Non-negative numbers are correctly ordered by numeric value.
- However, negative numbers are not correctly ordered; therefore, if you use
- negative floating point numbers in a key, you'll need to implement and
- configure a custom comparator to get correct numeric ordering.</p>
+ <p>Floats and doubles are stored using two different representations: sorted
+ representation and integer-bit (IEEE 754) representation. If you use
+ negative floating point numbers in a key, you should use sorted
+ representation; alternatively you may use integer-bit representation but you
+ will need to implement and configure a custom comparator to get correct
+ numeric ordering for negative numbers.</p>
+
+ <p>To use sorted representation use this set of methods:</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)"><CODE>TupleOutput.writeSortedFloat(float)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedFloat()"><CODE>readSortedFloat()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)"><CODE>TupleOutput.writeSortedDouble(double)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedDouble()"><CODE>readSortedDouble()</CODE></A></li>
+ </ul>
+
+ <p>To use integer-bit representation use this set of methods:</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeFloat(float)"><CODE>TupleOutput.writeFloat(float)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readFloat()"><CODE>readFloat()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeDouble(double)"><CODE>TupleOutput.writeDouble(double)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readDouble()"><CODE>readDouble()</CODE></A></li>
+ </ul>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.util.FastInputStream"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/util/FastInputStream.html#buf">buf</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#len">len</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#mark">mark</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#off">off</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#TupleInput(byte[])">TupleInput</A></B>(byte[]&nbsp;buffer)</CODE>
@@ -182,8 +219,25 @@ An <code>InputStream</code> with <code>DataInput</code>-like methods for
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#getPackedIntByteLength()">getPackedIntByteLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of a packed integer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#getStringByteLength()">getStringByteLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of a null-terminated UTF string in the data
+ buffer, including the terminator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -280,6 +334,14 @@ An <code>InputStream</code> with <code>DataInput</code>-like methods for
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readPackedInt()">readPackedInt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a packed integer.</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/bind/tuple/TupleInput.html#readShort()">readShort</A></B>()</CODE>
@@ -288,6 +350,24 @@ An <code>InputStream</code> with <code>DataInput</code>-like methods for
</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/bind/tuple/TupleInput.html#readSortedDouble()">readSortedDouble</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed double (eight byte) value from the buffer, with support
+ for correct default sorting of all values.</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/bind/tuple/TupleInput.html#readSortedFloat()">readSortedFloat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed float (four byte) value from the buffer, with support
+ for correct default sorting of all values.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readString()">readString</A></B>()</CODE>
@@ -341,16 +421,16 @@ An <code>InputStream</code> with <code>DataInput</code>-like methods for
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.util.FastInputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/util/FastInputStream.html#available()">available</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#getBufferBytes()">getBufferBytes</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#getBufferLength()">getBufferLength</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#getBufferOffset()">getBufferOffset</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#mark(int)">mark</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#markSupported()">markSupported</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#read()">read</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#read(byte[])">read</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#read(byte[], int, int)">read</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#readFast()">readFast</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#readFast(byte[])">readFast</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#readFast(byte[], int, int)">readFast</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#reset()">reset</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#skip(long)">skip</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/util/FastInputStream.html#available()">available</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#getBufferBytes()">getBufferBytes</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#getBufferLength()">getBufferLength</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#getBufferOffset()">getBufferOffset</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#mark(int)">mark</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#markSupported()">markSupported</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#read()">read</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#read(byte[])">read</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#read(byte[], int, int)">read</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#readFast()">readFast</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#readFast(byte[])">readFast</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#readFast(byte[], int, int)">readFast</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#reset()">reset</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#skip(long)">skip</A>, <A HREF="../../../../com/sleepycat/util/FastInputStream.html#skipFast(int)">skipFast</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.io.InputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">InputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#close()" title="class or interface in java.io">close</A></CODE></TD>
@@ -359,25 +439,22 @@ An <code>InputStream</code> with <code>DataInput</code>-like methods for
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -391,8 +468,10 @@ public <B>TupleInput</B>(byte[]&nbsp;buffer)</PRE>
copied) and therefore the byte array should not be modified while this
object is in use.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - is the byte array to be read and should contain data in
tuple format.</DL>
+</DL>
<HR>
<A NAME="TupleInput(byte[], int, int)"><!-- --></A><H3>
@@ -407,8 +486,10 @@ public <B>TupleInput</B>(byte[]&nbsp;buffer,
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>
+<DL>
<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>
+</DL>
<HR>
<A NAME="TupleInput(com.sleepycat.bind.tuple.TupleOutput)"><!-- --></A><H3>
@@ -421,15 +502,17 @@ public <B>TupleInput</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutp
this object (it will not be copied) and therefore the tuple output
object should not be modified while this object is in use.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>output</CODE> - is the tuple output object containing the data to be read.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -580,6 +663,11 @@ public final float <B>readFloat</B>()
Reads values that were written using <A HREF="../../../../com/sleepycat/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><em>Note:</em> This method operations on byte array values that by
+ default (without a custom comparator) do <em>not</em> sort correctly for
+ negative values. Only non-negative values are sorted correctly by
+ default. To sort all values correctly by default, use <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedFloat()"><CODE>readSortedFloat()</CODE></A>.</p>
<P>
<DD><DL>
@@ -601,6 +689,69 @@ public final double <B>readDouble</B>()
Reads values that were written using <A HREF="../../../../com/sleepycat/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><em>Note:</em> This method operations on byte array values that by
+ default (without a custom comparator) do <em>not</em> sort correctly for
+ negative values. Only non-negative values are sorted correctly by
+ default. To sort all values correctly by default, use <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedDouble()"><CODE>readSortedDouble()</CODE></A>.</p>
+<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/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if not enough bytes are available in
+ the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readSortedFloat()"><!-- --></A><H3>
+readSortedFloat</H3>
+<PRE>
+public final float <B>readSortedFloat</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></PRE>
+<DL>
+<DD>Reads a signed float (four byte) value from the buffer, with support
+ for correct default sorting of all values.
+ Reads values that were written using <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)"><CODE>TupleOutput.writeSortedFloat(float)</CODE></A>.
+
+ <p><code>Float.intBitsToFloat</code> and the following bit
+ manipulations are used to convert the stored representation to a signed
+ float value.</p>
+ <pre>
+ int val = ... // get stored bits
+ val ^= (val &lt; 0) ? 0x80000000 : 0xffffffff;
+ return Float.intBitsToFloat(val);
+ </pre>
+<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/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if not enough bytes are available in
+ the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readSortedDouble()"><!-- --></A><H3>
+readSortedDouble</H3>
+<PRE>
+public final double <B>readSortedDouble</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></PRE>
+<DL>
+<DD>Reads a signed double (eight byte) value from the buffer, with support
+ for correct default sorting of all values.
+ Reads values that were written using <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)"><CODE>TupleOutput.writeSortedDouble(double)</CODE></A>.
+
+ <p><code>Float.longBitsToDouble</code> and the following bit
+ manipulations are used to convert the stored representation to a signed
+ double value.</p>
+ <pre>
+ int val = ... // get stored bits
+ val ^= (val &lt; 0) ? 0x8000000000000000L : 0xffffffffffffffffL;
+ return Double.longBitsToDouble(val);
+ </pre>
<P>
<DD><DL>
@@ -724,7 +875,6 @@ public final void <B>readBytes</B>(char[]&nbsp;chars)
<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/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if not enough bytes are available in
the buffer.</DL>
@@ -745,7 +895,6 @@ public final void <B>readChars</B>(char[]&nbsp;chars)
<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/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if not enough bytes are available in
the buffer.</DL>
@@ -789,13 +938,60 @@ public final void <B>readString</B>(char[]&nbsp;chars)
<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/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if no null terminating byte is found
in the buffer.
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - malformed UTF data is encountered.</DL>
</DD>
</DL>
+<HR>
+
+<A NAME="getStringByteLength()"><!-- --></A><H3>
+getStringByteLength</H3>
+<PRE>
+public final int <B>getStringByteLength</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></PRE>
+<DL>
+<DD>Returns the byte length of a null-terminated UTF string in the data
+ buffer, including the terminator. Used with string values that were
+ written using <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeString(java.lang.String)"><CODE>TupleOutput.writeString(String)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if no null terminating byte is found
+ in the buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - malformed UTF data is encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readPackedInt()"><!-- --></A><H3>
+readPackedInt</H3>
+<PRE>
+public int <B>readPackedInt</B>()</PRE>
+<DL>
+<DD>Reads a packed integer. Note that packed integers are not appropriate
+ for sorted values (keys) unless a custom comparator is used.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><CODE>PackedInteger</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPackedIntByteLength()"><!-- --></A><H3>
+getPackedIntByteLength</H3>
+<PRE>
+public int <B>getPackedIntByteLength</B>()</PRE>
+<DL>
+<DD>Returns the byte length of a packed integer.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><CODE>PackedInteger</CODE></A></DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -805,7 +1001,7 @@ public final void <B>readString</B>(char[]&nbsp;chars)
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -821,7 +1017,7 @@ public final void <B>readString</B>(char[]&nbsp;chars)
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -830,7 +1026,7 @@ public final void <B>readString</B>(char[]&nbsp;chars)
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -843,11 +1039,12 @@ public final void <B>readString</B>(char[]&nbsp;chars)
<A HREF="../../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.util.FastInputStream">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>
@@ -856,6 +1053,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleInputBinding.html b/db/docs/java/com/sleepycat/bind/tuple/TupleInputBinding.html
index 981afbdea..ad58a375f 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleInputBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleInputBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleInputBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleInputBinding class">
@@ -14,9 +14,11 @@ TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleInputBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleInputBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInputBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.bind.tuple</FONT>
Class TupleInputBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleInputBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleInputBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+<DT><PRE>public class <B>TupleInputBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DL>
+</PRE>
<P>
A concrete <code>EntryBinding</code> that uses the <code>TupleInput</code>
@@ -109,19 +113,14 @@ A concrete <code>EntryBinding</code> that uses the <code>TupleInput</code>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html#TupleInputBinding()">TupleInputBinding</A></B>()</CODE>
@@ -136,8 +135,8 @@ A concrete <code>EntryBinding</code> that uses the <code>TupleInput</code>
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,25 +159,22 @@ A concrete <code>EntryBinding</code> that uses the <code>TupleInput</code>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -196,8 +192,8 @@ public <B>TupleInputBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -206,7 +202,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts a entry buffer into an Object.
<P>
<DD><DL>
@@ -225,7 +221,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntryBinding</A></CODE></B></DD>
<DD>Converts an Object into a entry buffer.
<P>
<DD><DL>
@@ -244,7 +240,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -260,7 +256,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -269,7 +265,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleInputBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInputBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -282,6 +278,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -295,6 +292,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bind/tuple/TupleMarshalledBinding.html
index a5fb95549..ef6c37d2f 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleMarshalledBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleMarshalledBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleMarshalledBinding class">
@@ -14,9 +14,11 @@ TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class TupleMarshalledBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleMarshalledBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleMarshalledBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TupleMarshalledBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+<DT><PRE>public class <B>TupleMarshalledBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleBinding</code> that delegates to the
@@ -109,19 +114,14 @@ A concrete <code>TupleBinding</code> that delegates to the
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html#TupleMarshalledBinding(java.lang.Class)">TupleMarshalledBinding</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;cls)</CODE>
@@ -136,8 +136,8 @@ A concrete <code>TupleBinding</code> that delegates to the
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,34 +160,40 @@ A concrete <code>TupleBinding</code> that delegates to the
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)">getPrimitiveBinding</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -202,15 +208,17 @@ public <B>TupleMarshalledBinding</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html#forName(java.lang.String)" title="class or interface in java.lang"><CODE>Class.forName(java.lang.String)</CODE></A>, and therefore must be a public class and have a
public no-arguments constructor. It must also implement the <A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><CODE>MarshalledTupleEntry</CODE></A> interface.</p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>cls</CODE> - is the class of the key or data objects.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -219,7 +227,7 @@ entryToObject</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">TupleBinding</A></CODE></B></DD>
<DD>Constructs a key or data object from a <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
<P>
<DD><DL>
@@ -238,7 +246,7 @@ objectToEntry</H3>
public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleBinding</A></CODE></B></DD>
<DD>Converts a key or data object to a tuple entry.
<P>
<DD><DL>
@@ -258,7 +266,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -274,7 +282,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -283,7 +291,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -296,6 +304,7 @@ public void <B>objectToEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -309,6 +318,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleOutput.html b/db/docs/java/com/sleepycat/bind/tuple/TupleOutput.html
index 7395c0c1c..478cf7aa2 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleOutput.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleOutput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleOutput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleOutput class">
@@ -14,9 +14,11 @@ TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleOutput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,13 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class TupleOutput</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">java.io.OutputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">com.sleepycat.util.FastOutputStream</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleOutput</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">java.io.OutputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">com.sleepycat.util.FastOutputStream</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleOutput</B>
</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A></DD>
+</DL>
<HR>
<DL>
-<DT>public class <B>TupleOutput</B><DT>extends <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></DL>
+<DT><PRE>public class <B>TupleOutput</B><DT>extends <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></DL>
+</PRE>
<P>
An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
@@ -128,33 +135,47 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
character ordering.</li>
</ul>
- <p>Floats and doubles are stored in standard Java integer-bit representation
- (IEEE 754). Non-negative numbers are correctly ordered by numeric value.
- However, negative numbers are not correctly ordered; therefore, if you use
- negative floating point numbers in a key, you'll need to implement and
- configure a custom comparator to get correct numeric ordering.</p>
+ <p>Floats and doubles are stored using two different representations: sorted
+ representation and integer-bit (IEEE 754) representation. If you use
+ negative floating point numbers in a key, you should use sorted
+ representation; alternatively you may use integer-bit representation but you
+ will need to implement and configure a custom comparator to get correct
+ numeric ordering for negative numbers.</p>
+
+ <p>To use sorted representation use this set of methods:</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)"><CODE>writeSortedFloat(float)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedFloat()"><CODE>TupleInput.readSortedFloat()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)"><CODE>writeSortedDouble(double)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedDouble()"><CODE>TupleInput.readSortedDouble()</CODE></A></li>
+ </ul>
+
+ <p>To use integer-bit representation use this set of methods:</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeFloat(float)"><CODE>writeFloat(float)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readFloat()"><CODE>TupleInput.readFloat()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeDouble(double)"><CODE>writeDouble(double)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readDouble()"><CODE>TupleInput.readDouble()</CODE></A></li>
+ </ul>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.util.FastOutputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Fields inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></B></TD>
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../com/sleepycat/util/FastOutputStream.html#DEFAULT_BUMP_SIZE">DEFAULT_BUMP_SIZE</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE">DEFAULT_INIT_SIZE</A></CODE></TD>
@@ -166,8 +187,8 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#TupleOutput()">TupleOutput</A></B>()</CODE>
@@ -189,8 +210,8 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -287,6 +308,14 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writePackedInt(int)">writePackedInt</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a packed integer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeShort(int)">writeShort</A></B>(int&nbsp;val)</CODE>
@@ -296,6 +325,24 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)">writeSortedDouble</A></B>(double&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a signed double (eight byte) value to the buffer, with support
+ for correct default sorting of all values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)">writeSortedFloat</A></B>(float&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a signed float (four byte) value to the buffer, with support for
+ correct default sorting of all values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeString(char[])">writeString</A></B>(char[]&nbsp;chars)</CODE>
<BR>
@@ -339,16 +386,16 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.util.FastOutputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/sleepycat/util/FastOutputStream.html#addSize(int)">addSize</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#getBufferBytes()">getBufferBytes</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#getBufferLength()">getBufferLength</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#getBufferOffset()">getBufferOffset</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#makeSpace(int)">makeSpace</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()">reset</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#size()">size</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toByteArray()">toByteArray</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toByteArray(byte[], int)">toByteArray</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toString()">toString</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toString(java.lang.String)">toString</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#write(byte[])">write</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#write(byte[], int, int)">write</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#write(int)">write</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeFast(byte[])">writeFast</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeFast(byte[], int, int)">writeFast</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeFast(int)">writeFast</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeTo(java.io.OutputStream)">writeTo</A></CODE></TD>
+<TD><CODE><A HREF="../../../../com/sleepycat/util/FastOutputStream.html#addSize(int)">addSize</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#getBufferBytes()">getBufferBytes</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#getBufferLength()">getBufferLength</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#getBufferOffset()">getBufferOffset</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#makeSpace(int)">makeSpace</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#reset()">reset</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#size()">size</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toByteArray()">toByteArray</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toString()">toString</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#toString(java.lang.String)">toString</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#write(byte[])">write</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#write(byte[], int, int)">write</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#write(int)">write</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeFast(byte[])">writeFast</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeFast(byte[], int, int)">writeFast</A>, <A HREF="../../../../com/sleepycat/util/FastOutputStream.html#writeFast(int)">writeFast</A>, <A HREF="../../../../com/sleepycat/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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">OutputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#flush()" title="class or interface in java.io">flush</A></CODE></TD>
@@ -357,25 +404,22 @@ An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -400,15 +444,17 @@ public <B>TupleOutput</B>(byte[]&nbsp;buffer)</PRE>
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>
+<DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - is the byte array to use as the buffer.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -568,6 +614,11 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
Writes values that can be read using <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readFloat()"><CODE>TupleInput.readFloat()</CODE></A>.
<code>Float.floatToIntBits</code> is used to convert the signed float
value.
+
+ <p><em>Note:</em> This method produces byte array values that by default
+ (without a custom comparator) do <em>not</em> sort correctly for
+ negative values. Only non-negative values are sorted correctly by
+ default. To sort all values correctly by default, use <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)"><CODE>writeSortedFloat(float)</CODE></A>.</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
@@ -585,6 +636,59 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
Writes values that can be read using <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readDouble()"><CODE>TupleInput.readDouble()</CODE></A>.
<code>Double.doubleToLongBits</code> is used to convert the signed
double value.
+
+ <p><em>Note:</em> This method produces byte array values that by default
+ (without a custom comparator) do <em>not</em> sort correctly for
+ negative values. Only non-negative values are sorted correctly by
+ default. To sort all values correctly by default, use <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)"><CODE>writeSortedDouble(double)</CODE></A>.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Returns:</B><DD>this tuple output object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeSortedFloat(float)"><!-- --></A><H3>
+writeSortedFloat</H3>
+<PRE>
+public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>writeSortedFloat</B>(float&nbsp;val)</PRE>
+<DL>
+<DD>Writes a signed float (four byte) value to the buffer, with support for
+ correct default sorting of all values.
+ Writes values that can be read using <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedFloat()"><CODE>TupleInput.readSortedFloat()</CODE></A>.
+
+ <p><code>Float.floatToIntBits</code> and the following bit manipulations
+ are used to convert the signed float value to a representation that is
+ sorted correctly by default.</p>
+ <pre>
+ int intVal = Float.floatToIntBits(val);
+ intVal ^= (intVal &lt; 0) ? 0xffffffff : 0x80000000;
+ </pre>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Returns:</B><DD>this tuple output object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeSortedDouble(double)"><!-- --></A><H3>
+writeSortedDouble</H3>
+<PRE>
+public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> <B>writeSortedDouble</B>(double&nbsp;val)</PRE>
+<DL>
+<DD>Writes a signed double (eight byte) value to the buffer, with support
+ for correct default sorting of all values.
+ Writes values that can be read using <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html#readSortedDouble()"><CODE>TupleInput.readSortedDouble()</CODE></A>.
+
+ <p><code>Float.doubleToLongBits</code> and the following bit
+ manipulations are used to convert the signed double value to a
+ representation that is sorted correctly by default.</p>
+ <pre>
+ long longVal = Double.doubleToLongBits(val);
+ longVal ^= (longVal &lt; 0) ? 0xffffffffffffffffL : 0x8000000000000000L;
+ </pre>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
@@ -694,6 +798,20 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
<DT><B>Returns:</B><DD>this tuple output object.</DL>
</DD>
</DL>
+<HR>
+
+<A NAME="writePackedInt(int)"><!-- --></A><H3>
+writePackedInt</H3>
+<PRE>
+public void <B>writePackedInt</B>(int&nbsp;val)</PRE>
+<DL>
+<DD>Writes a packed integer. Note that packed integers are not appropriate
+ for sorted values (keys) unless a custom comparator is used.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><CODE>PackedInteger</CODE></A></DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -703,7 +821,7 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -719,7 +837,7 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -728,7 +846,7 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -741,6 +859,7 @@ public final <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" tit
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -754,6 +873,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleBinding.html
index c2d7e2824..31e4bd3c3 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleTupleBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleTupleBinding class">
@@ -14,9 +14,11 @@ TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleTupleBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.bind.tuple</FONT>
Class TupleTupleBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleTupleBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleTupleBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DD>
@@ -97,7 +101,8 @@ Class TupleTupleBinding</H2>
</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DL>
+<DT><PRE>public abstract class <B>TupleTupleBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A><DT>implements <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DL>
+</PRE>
<P>
An abstract <code>EntityBinding</code> that treats an entity's key entry and
@@ -117,19 +122,14 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry and
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#TupleTupleBinding()">TupleTupleBinding</A></B>()</CODE>
@@ -144,8 +144,8 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry and
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -203,28 +203,34 @@ An abstract <code>EntityBinding</code> that treats an entity's key entry and
&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.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -242,8 +248,8 @@ public <B>TupleTupleBinding</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -253,7 +259,7 @@ entryToObject</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Converts key and data entry buffers into an entity Object.
<P>
<DD><DL>
@@ -272,7 +278,7 @@ objectToKey</H3>
public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Extracts the key entry from an entity Object.
<P>
<DD><DL>
@@ -290,7 +296,7 @@ objectToData</H3>
public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">EntityBinding</A></CODE></B></DD>
<DD>Extracts the data entry from an entity Object.
<P>
<DD><DL>
@@ -364,7 +370,7 @@ public abstract void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/d
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -380,7 +386,7 @@ public abstract void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/d
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -389,7 +395,7 @@ public abstract void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/d
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -402,6 +408,7 @@ public abstract void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/d
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -415,6 +422,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleKeyCreator.html b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleKeyCreator.html
index 4f9fe9298..b11f00269 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleTupleKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleTupleKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleTupleKeyCreator class">
@@ -14,9 +14,11 @@ TupleTupleKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleTupleKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleTupleKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.bind.tuple</FONT>
Class TupleTupleKeyCreator</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleTupleKeyCreator</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleTupleKeyCreator</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DD>
@@ -97,30 +101,31 @@ Class TupleTupleKeyCreator</H2>
</DL>
<HR>
<DL>
-<DT>public abstract class <B>TupleTupleKeyCreator</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DL>
+<DT><PRE>public abstract class <B>TupleTupleKeyCreator</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A><DT>implements <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DL>
+</PRE>
<P>
An abstract key creator that uses a tuple key and a tuple data entry. This
class takes care of converting the key and data entry to/from <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> and <A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleOutput</CODE></A> objects.
+ The following abstract method must be implemented by a concrete subclass
+ to create the index key using these objects
+ <ul>
+ <li> <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><CODE>createSecondaryKey(TupleInput,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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#TupleTupleKeyCreator()">TupleTupleKeyCreator</A></B>()</CODE>
@@ -135,8 +140,8 @@ An abstract key creator that uses a tuple key and a tuple data entry. This
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -178,28 +183,34 @@ An abstract key creator that uses a tuple key and a tuple data entry. This
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple data entry.</TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -217,8 +228,8 @@ public <B>TupleTupleKeyCreator</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -231,15 +242,24 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../../com/sleepycat/db/S
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)
throws <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">SecondaryKeyCreator</A></CODE></B></DD>
<DD>Creates a secondary key entry, given a primary key and data entry.
<p>
+ A secondary key may be derived from the primary key, primary data, or a
+ combination of the primary key and data. For secondary keys that are
+ optional, the key creator method may return false and the key/data pair
+ will not be indexed. To ensure the integrity of a secondary database the
+ key creator method must always return the same result for a given set of
+ input parameters.
+ <p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>db</CODE> - the database to which the secondary key will be added.
+ This parameter is passed for informational purposes but is not commonly
+ used.
<p><DD><CODE>primaryKeyEntry</CODE> - the primary key entry. This parameter must not be modified
by this method.
<p><DD><CODE>dataEntry</CODE> - the primary data entry. This parameter must not be modified
@@ -327,7 +347,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -343,7 +363,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -352,7 +372,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -365,6 +385,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -378,6 +399,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html
index 075cbf247..2b7b72e20 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleTupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleTupleMarshalledBinding class">
@@ -14,9 +14,11 @@ TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleTupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class TupleTupleMarshalledBinding</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleTupleBinding</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleTupleMarshalledBinding</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleTupleBinding</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleTupleMarshalledBinding</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TupleTupleMarshalledBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></DL>
+<DT><PRE>public class <B>TupleTupleMarshalledBinding</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></DL>
+</PRE>
<P>
A concrete <code>TupleTupleBinding</code> that delegates to the
@@ -113,19 +118,14 @@ A concrete <code>TupleTupleBinding</code> that delegates to the
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(java.lang.Class)">TupleTupleMarshalledBinding</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;cls)</CODE>
@@ -140,8 +140,8 @@ A concrete <code>TupleTupleBinding</code> that delegates to the
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -175,34 +175,40 @@ A concrete <code>TupleTupleBinding</code> that delegates to the
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleTupleBinding"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></CODE></TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -218,15 +224,17 @@ public <B>TupleTupleMarshalledBinding</B>(<A HREF="http://java.sun.com/j2se/1.3/
public no-arguments constructor. It must also implement the <A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><CODE>MarshalledTupleEntry</CODE></A> and <A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><CODE>MarshalledTupleKeyEntity</CODE></A>
interfaces.</p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>cls</CODE> - is the class of the entity objects.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,7 +244,7 @@ entryToObject</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>entryToObject</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)">TupleTupleBinding</A></CODE></B></DD>
<DD>Constructs an entity object from <A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key and data
entries.
<P>
@@ -256,7 +264,7 @@ objectToKey</H3>
public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleTupleBinding</A></CODE></B></DD>
<DD>Extracts a key tuple from an entity object.
<P>
<DD><DL>
@@ -275,7 +283,7 @@ objectToData</H3>
public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">TupleTupleBinding</A></CODE></B></DD>
<DD>Extracts a key tuple from an entity object.
<P>
<DD><DL>
@@ -295,7 +303,7 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -311,7 +319,7 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -320,7 +328,7 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -333,6 +341,7 @@ public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -346,6 +355,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html
index d75244619..6d4089d6b 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TupleTupleMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleTupleMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator class">
@@ -14,9 +14,11 @@ TupleTupleMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleTupleMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleTupleMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,17 @@ com.sleepycat.bind.tuple</FONT>
Class TupleTupleMarshalledKeyCreator</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleTupleKeyCreator</A>
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator</B>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleBase</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">com.sleepycat.bind.tuple.TupleTupleKeyCreator</A>
+ <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TupleTupleMarshalledKeyCreator</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></DL>
+<DT><PRE>public class <B>TupleTupleMarshalledKeyCreator</B><DT>extends <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></DL>
+</PRE>
<P>
A concrete key creator that works in conjunction with a <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleTupleMarshalledBinding</CODE></A>. This key creator works by calling the
@@ -112,19 +117,14 @@ A concrete key creator that works in conjunction with a <A HREF="../../../../com
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#TupleTupleMarshalledKeyCreator(com.sleepycat.bind.tuple.TupleTupleMarshalledBinding, java.lang.String)">TupleTupleMarshalledKeyCreator</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>&nbsp;binding,
@@ -140,8 +140,8 @@ A concrete key creator that works in conjunction with a <A HREF="../../../../com
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,34 +166,40 @@ A concrete key creator that works in conjunction with a <A HREF="../../../../com
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleTupleKeyCreator"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></CODE></TD>
</TR>
</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bind.tuple.TupleBase"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()">getTupleBufferSize</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A>, <A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)">setTupleBufferSize</A></CODE></TD>
+</TR>
+</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -205,16 +211,18 @@ public <B>TupleTupleMarshalledKeyCreator</B>(<A HREF="../../../../com/sleepycat/
<DL>
<DD>Creates a tuple-tuple marshalled key creator.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>binding</CODE> - is the binding used for the tuple-tuple entity.<DD><CODE>keyName</CODE> - is the key name passed to the <A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)"><CODE>MarshalledTupleKeyEntity.marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)</CODE></A> method to identify the
index key.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -225,7 +233,7 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../../com/sleepycat/bind
<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;indexKeyOutput)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">TupleTupleKeyCreator</A></CODE></B></DD>
<DD>Creates the index key from primary key tuple and data tuple.
<P>
<DD><DL>
@@ -246,7 +254,7 @@ nullifyForeignKey</H3>
public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">TupleTupleKeyCreator</A></CODE></B></DD>
<DD>Clears the index key in the tuple data entry. The dataInput should be
read and then written to the dataOutput, clearing the index key in the
process.
@@ -273,7 +281,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -289,7 +297,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -298,7 +306,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -311,6 +319,7 @@ public boolean <B>nullifyForeignKey</B>(<A HREF="../../../../com/sleepycat/bind/
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -324,6 +333,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/BooleanBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/BooleanBinding.html
index 63f4fb11a..b335800fb 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/BooleanBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/BooleanBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.BooleanBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.BooleanBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.BooleanBinding (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.BooleanBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.BooleanBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useBooleanBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BooleanBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.BooleanBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.BooleanBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.BooleanBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useBooleanBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BooleanBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.BooleanBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.BooleanBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/ByteBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/ByteBinding.html
index 647a26e62..110b96f34 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/ByteBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/ByteBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.ByteBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.ByteBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.ByteBinding (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.ByteBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.ByteBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useByteBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.ByteBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.ByteBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.ByteBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useByteBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ByteBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.ByteBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.ByteBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/CharacterBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/CharacterBinding.html
index abb3d6d1d..bb7b9ef00 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/CharacterBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/CharacterBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.CharacterBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.CharacterBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.CharacterBinding (Sleepycat Software, Inc
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.CharacterBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.CharacterBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useCharacterBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CharacterBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.CharacterBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.CharacterBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.CharacterBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useCharacterBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CharacterBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.CharacterBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.CharacterBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/DoubleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/DoubleBinding.html
index 50063467e..fe31deebe 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/DoubleBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/DoubleBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.DoubleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.DoubleBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.DoubleBinding (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.DoubleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.DoubleBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useDoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.DoubleBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.DoubleBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.DoubleBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useDoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.DoubleBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.DoubleBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/FloatBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/FloatBinding.html
index ea9e3e192..ca50d8cf8 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/FloatBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/FloatBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.FloatBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.FloatBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.FloatBinding (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.FloatBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.FloatBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useFloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.FloatBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.FloatBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.FloatBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useFloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.FloatBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.FloatBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/IntegerBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/IntegerBinding.html
index bdf3a03e8..242cebbb0 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/IntegerBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/IntegerBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.IntegerBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.IntegerBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.IntegerBinding (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.IntegerBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.IntegerBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useIntegerBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IntegerBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.IntegerBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.IntegerBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.IntegerBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useIntegerBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IntegerBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.IntegerBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.IntegerBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/LongBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/LongBinding.html
index 1fb7a8d12..2ca21695e 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/LongBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/LongBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.LongBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.LongBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.LongBinding (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.LongBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.LongBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useLongBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LongBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.LongBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.LongBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.LongBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useLongBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LongBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.LongBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.LongBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleEntry.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleEntry.html
index 6eb794510..bc557953d 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleEntry.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleEntry (Sleepycat Softw
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useMarshalledTupleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleEntry
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleEntry
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleEntry
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useMarshalledTupleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleEntry
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleEntry
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleKeyEntity.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleKeyEntity.html
index 1cc89ab97..daaaa3f0d 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleKeyEntity.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/MarshalledTupleKeyEntity.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleKeyEntity (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleKeyEntity (Sleepycat S
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.bind.tuple.MarshalledTupleKeyEntity (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useMarshalledTupleKeyEntity.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleKeyEntity.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleKeyEntity
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleKeyEntity
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleKeyEntity
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useMarshalledTupleKeyEntity.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MarshalledTupleKeyEntity.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleKeyEntity
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.MarshalledTupleKeyEntity
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/ShortBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/ShortBinding.html
index b36714f8d..57e703078 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/ShortBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/ShortBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.ShortBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.ShortBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.ShortBinding (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.ShortBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.ShortBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useShortBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ShortBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.ShortBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.ShortBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.ShortBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useShortBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ShortBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.ShortBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.ShortBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/SortedDoubleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/SortedDoubleBinding.html
new file mode 100644
index 000000000..c6bb8e5a0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/SortedDoubleBinding.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.bind.tuple.SortedDoubleBinding (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.SortedDoubleBinding (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useSortedDoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedDoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bind.tuple.SortedDoubleBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bind.tuple.SortedDoubleBinding
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useSortedDoubleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedDoubleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/SortedFloatBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/SortedFloatBinding.html
new file mode 100644
index 000000000..df61d6f61
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/SortedFloatBinding.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.bind.tuple.SortedFloatBinding (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.SortedFloatBinding (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useSortedFloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedFloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bind.tuple.SortedFloatBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bind.tuple.SortedFloatBinding
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useSortedFloatBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SortedFloatBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/StringBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/StringBinding.html
index 16328d551..772121dde 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/StringBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/StringBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.StringBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.StringBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.StringBinding (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.StringBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.StringBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useStringBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StringBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.StringBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.StringBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.StringBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useStringBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StringBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.StringBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.StringBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBase.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBase.html
new file mode 100644
index 000000000..2e87d290b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBase.html
@@ -0,0 +1,374 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.bind.tuple.TupleBase (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleBase (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bind.tuple.TupleBase</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
+<TD>Bindings that use Java serialization.&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
+<TD>Bindings that use sequences of primitive fields, or tuples.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bind.serial"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</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/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract <code>EntityBinding</code> that treats an entity's key entry as
+ a tuple and its data entry as a serialized object.</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/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract key creator that uses a tuple key and a serial data entry.</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/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleSerialBinding</code> that delegates to the
+ <code>MarshalledTupleKeyEntity</code> interface of the entity class.</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/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key creator that works in conjunction with a <A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><CODE>TupleSerialMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
+</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/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
+ wrapper or a <code>boolean</code> primitive.</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/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
+ wrapper or a <code>byte</code> primitive.</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/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
+ wrapper or a <code>char</code> primitive.</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/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.</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/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.</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/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
+ wrapper or an <code>int</code> primitive.</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/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
+ wrapper or a <code>long</code> primitive.</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/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
+ wrapper or a <code>short</code> primitive.</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/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.</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/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.</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/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a simple <code>String</code> 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/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract <code>EntryBinding</code> that treats a key or data entry as a
+ tuple; it includes predefined bindings for Java primitive types.</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/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> that delegates to the
+ <code>MarshalledTupleEntry</code> interface of the data or key object.</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/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract <code>EntityBinding</code> that treats an entity's key entry and
+ data entry as tuples.</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/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract key creator that uses a tuple key and a tuple data entry.</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/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleTupleBinding</code> that delegates to the
+ <code>MarshalledTupleEntry</code> and
+ <code>MarshalledTupleKeyEntity</code> interfaces of the entity class.</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/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key creator that works in conjunction with a <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleTupleMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleBase.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBinding.html
index 7c1ec0318..160addd28 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleBinding (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -178,6 +181,24 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
<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/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.</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/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.</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/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A></B></CODE>
<BR>
@@ -198,7 +219,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -219,7 +240,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -235,7 +256,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -244,7 +265,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -257,6 +278,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -264,6 +286,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html" titl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInput.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInput.html
index 9c83c31d5..6fbd0bbe9 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInput.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleInput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleInput (Sleepycat Software, Inc. - Be
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleInput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -96,8 +99,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.ht
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -105,7 +108,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,15 +122,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleSerialMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;tupleInput,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">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;boolean</CODE></FONT></TD>
<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">createSecondaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;primaryKeyInput,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;dataInput,
@@ -139,6 +133,15 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;tupleInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">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;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;dataInput)</CODE>
@@ -153,8 +156,8 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -162,12 +165,12 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A></B>(<A HREF="../../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A></B>(<A HREF="../../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</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
@@ -179,7 +182,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,81 +196,74 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
</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>TupleTupleMarshalledKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">nullifyForeignKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</CODE>
+<CODE>abstract &nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">createSecondaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates the index key from primary key tuple and data tuple.</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</CODE>
+<TD><CODE><B>TupleMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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>abstract &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">createSecondaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;primaryKeyInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates the index key from primary key tuple and data tuple.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or data object from a <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.</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>TupleTupleKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">nullifyForeignKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>StringBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/StringBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple data entry.</TD>
+&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;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>SortedFloatBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key and data
- entries.</TD>
+&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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<TD><CODE><B>SortedDoubleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
- <A HREF="../../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ShortBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry buffer to the data in a tuple
- input object.</TD>
+&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;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>LongBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/LongBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or data object from a <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.</TD>
+&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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>StringBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/StringBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<TD><CODE><B>IntegerBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/IntegerBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -275,32 +271,31 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ShortBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<TD><CODE><B>FloatBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/FloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bind.tuple.TupleInput)">unmarshalPrimaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/DoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</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>
+&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>MarshalledTupleEntry.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html#unmarshalEntry(com.sleepycat.bind.tuple.TupleInput)">unmarshalEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/CharacterBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or data object from the key or data tuple entry.</TD>
+&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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>LongBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/LongBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<TD><CODE><B>ByteBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ByteBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -308,7 +303,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>IntegerBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/IntegerBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<TD><CODE><B>BooleanBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/BooleanBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -316,42 +311,66 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>FloatBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/FloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/DoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key and data
+ entries.</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/CharacterBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>ByteBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ByteBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">nullifyForeignKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>BooleanBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/BooleanBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)">entryToObject</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">nullifyForeignKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple data entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleEntry.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html#unmarshalEntry(com.sleepycat.bind.tuple.TupleInput)">unmarshalEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or data object from the key or data tuple entry.</TD>
+</TR>
+<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/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bind.tuple.TupleInput)">unmarshalPrimaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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;
@@ -364,7 +383,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -380,7 +399,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -389,7 +408,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleInput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -402,6 +421,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -409,6 +429,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title=
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInputBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInputBinding.html
index 8dd8ad6b1..17b18687a 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInputBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleInputBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleInputBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleInputBinding (Sleepycat Software, In
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleInputBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleInputBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInputBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.TupleInputBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.TupleInputBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.TupleInputBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleInputBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleInputBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.TupleInputBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.TupleInputBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleMarshalledBinding.html
index a137b45e9..f5c2fc340 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleMarshalledBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleMarshalledBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleMarshalledBinding (Sleepycat Softwar
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.TupleMarshalledBinding
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.TupleMarshalledBinding
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.TupleMarshalledBinding
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.TupleMarshalledBinding
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.TupleMarshalledBinding
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleOutput.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleOutput.html
index a312d5b19..423b7b34f 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleOutput.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleOutput.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleOutput (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleOutput (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleOutput (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -96,8 +99,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.h
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -105,7 +108,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,15 +122,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
</TR>
<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/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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;boolean</CODE></FONT></TD>
<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">createSecondaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;primaryKeyInput,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;dataInput,
@@ -139,6 +133,15 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
</TR>
<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/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</CODE>
@@ -152,8 +155,8 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -161,42 +164,120 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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" title="class or interface in java.lang">String</A>&nbsp;val)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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" title="class or interface in java.lang">String</A>&nbsp;val)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>StringBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/StringBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>
+&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/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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" title="class or interface in java.lang">String</A>&nbsp;val)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>SortedFloatBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>
+&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/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeChar(int)">writeChar</A></B>(int&nbsp;val)</CODE>
+<CODE>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>SortedDoubleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a char (two byte) unsigned value to the buffer.</TD>
+&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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ShortBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>LongBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/LongBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>IntegerBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/IntegerBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>FloatBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/FloatBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/DoubleBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/CharacterBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>ByteBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ByteBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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>protected &nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>BooleanBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/BooleanBinding.html#getTupleOutput(java.lang.Object)">getTupleOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput()">newOutput</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</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="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">newOutput</A></B>(byte[]&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</CODE></A></I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -218,34 +299,46 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeShort(int)">writeShort</A></B>(int&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 an signed short (two byte) value to the buffer.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeInt(int)">writeInt</A></B>(int&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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" title="class or interface in java.lang">String</A>&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>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeLong(long)">writeLong</A></B>(long&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 an signed long (eight byte) value to the buffer.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeFloat(float)">writeFloat</A></B>(float&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 an signed float (four byte) value to the buffer.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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" title="class or interface in java.lang">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">
@@ -258,70 +351,94 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeBytes(char[])">writeBytes</A></B>(char[]&nbsp;chars)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 the specified bytes to the buffer, converting each character to
- an unsigned byte value.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeChars(char[])">writeChars</A></B>(char[]&nbsp;chars)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 the specified characters to the buffer, converting each character
- to a two byte unsigned value.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeString(char[])">writeString</A></B>(char[]&nbsp;chars)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 the specified characters to the buffer, converting each character
- to UTF format.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedByte(int)">writeUnsignedByte</A></B>(int&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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 unsigned byte (one byte) value to the buffer.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedShort(int)">writeUnsignedShort</A></B>(int&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)">writeSortedDouble</A></B>(double&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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a signed double (eight byte) value to the buffer, with support
+ for correct default sorting of all values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedInt(long)">writeUnsignedInt</A></B>(long&nbsp;val)</CODE>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)">writeSortedFloat</A></B>(float&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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a signed float (four byte) value to the buffer, with support for
+ correct default sorting of all values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput()">newOutput</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeString(char[])">writeString</A></B>(char[]&nbsp;chars)</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>
+&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>static&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])">newOutput</A></B>(byte[]&nbsp;buffer)</CODE>
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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" title="class or interface in java.lang">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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedInt(long)">writeUnsignedInt</A></B>(long&nbsp;val)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to create a tuple output object
- with a specific starting size.</TD>
+&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;<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleOutput.</B><B><A HREF="../../../../../com/sleepycat/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;
@@ -329,7 +446,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -343,40 +460,47 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
</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>TupleTupleMarshalledKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">nullifyForeignKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</CODE>
+<CODE>abstract &nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">createSecondaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates the index key from primary key tuple and data tuple.</TD>
</TR>
<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/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
+<TD><CODE><B>MarshalledTupleEntry.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html#marshalEntry(com.sleepycat.bind.tuple.TupleOutput)">marshalEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or data tuple entry from the key or 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>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
+<TD><CODE><B>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bind.tuple.TupleOutput)">marshalPrimaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&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>abstract &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">createSecondaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;primaryKeyInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)">marshalSecondaryKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;keyName,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates the index key from primary key tuple and data tuple.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the entity's secondary 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;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyCreator.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)">nullifyForeignKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;dataInput,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</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">
@@ -389,12 +513,12 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
</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/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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>
+&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">
@@ -416,16 +540,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
</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>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
- <A HREF="../../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
@@ -445,7 +559,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+<TD><CODE><B>SortedFloatBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
<BR>
@@ -454,27 +568,20 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<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/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bind.tuple.TupleOutput)">marshalPrimaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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;boolean</CODE></FONT></TD>
-<TD><CODE><B>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)">marshalSecondaryKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;keyName,
- <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;keyOutput)</CODE>
+<TD><CODE><B>SortedDoubleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the entity's secondary key and writes it to the key output.</TD>
+&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>MarshalledTupleEntry.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html#marshalEntry(com.sleepycat.bind.tuple.TupleOutput)">marshalEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;dataOutput)</CODE>
+<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or data tuple entry from the key or data object.</TD>
+&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">
@@ -539,13 +646,41 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<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/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry buffer to the data in a tuple
+ output object.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bind.tuple.TupleOutput)">TupleInput</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output)</CODE>
@@ -565,7 +700,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -581,7 +716,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -590,7 +725,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleOutput.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleOutput.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -603,6 +738,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -610,6 +746,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleOutput.html" title
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleBinding.html
index e2a9bbbeb..6dd543d9c 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleTupleBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleTupleBinding (Sleepycat Software, In
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBin
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html"
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -124,7 +127,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -140,7 +143,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -149,7 +152,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html"
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -162,6 +165,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html"
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -169,6 +173,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html"
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleKeyCreator.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleKeyCreator.html
index b62fbf4a7..bcfaeb5b9 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleTupleKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleTupleKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleTupleKeyCreator (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKey
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.ht
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -122,7 +125,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.ht
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -138,7 +141,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.ht
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -147,7 +150,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.ht
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -160,6 +163,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.ht
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -167,6 +171,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.ht
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledBinding.html
index 09539c3bf..bee655cc5 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledBinding.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledBinding.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledBinding (Sleepycat So
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledBinding (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMar
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A> in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBin
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#TupleTupleMarshalledKeyCreator(com.sleepycat.bind.tuple.TupleTupleMarshalledBinding, java.lang.String)">TupleTupleMarshalledKeyCreator</A></B>(<A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>&nbsp;binding,
@@ -121,7 +124,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBin
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -137,7 +140,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBin
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -146,7 +149,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBin
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleMarshalledBinding.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledBinding.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -159,6 +162,7 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBin
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -166,6 +170,6 @@ Uses of <A HREF="../../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBin
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledKeyCreator.html b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledKeyCreator.html
index a46af81c4..52dcc26c9 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledKeyCreator.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/class-use/TupleTupleMarshalledKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator (Sleepycat
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../../index.html?com/sleepycat/bind/tuple//class-useTupleTupleMarshalledKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleTupleMarshalledKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.bind.tuple.TupleTupleMarshalledKeyCreator
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/package-frame.html b/db/docs/java/com/sleepycat/bind/tuple/package-frame.html
index f0a65f5c9..816754c39 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/package-frame.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/package-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind.tuple (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple package">
@@ -52,8 +52,14 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="ShortBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">ShortBinding</A>
<BR>
+<A HREF="SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">SortedDoubleBinding</A>
+<BR>
+<A HREF="SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">SortedFloatBinding</A>
+<BR>
<A HREF="StringBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">StringBinding</A>
<BR>
+<A HREF="TupleBase.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleBase</A>
+<BR>
<A HREF="TupleBinding.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleBinding</A>
<BR>
<A HREF="TupleInput.html" title="class in com.sleepycat.bind.tuple" target="classFrame">TupleInput</A>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/package-summary.html b/db/docs/java/com/sleepycat/bind/tuple/package-summary.html
index 27387a079..b8ba8cf02 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/package-summary.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/package-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind.tuple (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.bind.tuple package">
@@ -14,9 +14,11 @@ com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.bind.tuple (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/collections/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -85,8 +88,8 @@ Bindings that use sequences of primitive fields, or tuples.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleEntry</A></B></TD>
@@ -105,8 +108,8 @@ Bindings that use sequences of primitive fields, or tuples.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A></B></TD>
@@ -149,10 +152,25 @@ Bindings that use sequences of primitive fields, or tuples.
wrapper or a <code>short</code> primitive.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A></B></TD>
+<TD>A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A></B></TD>
+<TD>A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A></B></TD>
<TD>A concrete <code>TupleBinding</code> for a simple <code>String</code> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A></B></TD>
+<TD>A base class for tuple bindings and tuple key creators that provides control
+ over the allocation of the output buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A></B></TD>
<TD>An abstract <code>EntryBinding</code> that treats a key or data entry as a
tuple; it includes predefined bindings for Java primitive types.</TD>
@@ -209,6 +227,8 @@ Bindings that use sequences of primitive fields, or tuples.
<P>
<P>
+<DL>
+</DL>
<HR>
@@ -217,7 +237,7 @@ Bindings that use sequences of primitive fields, or tuples.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -233,7 +253,7 @@ Bindings that use sequences of primitive fields, or tuples.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -242,7 +262,7 @@ Bindings that use sequences of primitive fields, or tuples.
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/collections/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -255,6 +275,7 @@ Bindings that use sequences of primitive fields, or tuples.
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -262,6 +283,6 @@ Bindings that use sequences of primitive fields, or tuples.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/package-tree.html b/db/docs/java/com/sleepycat/bind/tuple/package-tree.html
index 24f027271..edcfe2fc2 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/package-tree.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/package-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.bind.tuple Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.bind.tuple Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ com.sleepycat.bind.tuple Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.bind.tuple Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.bind.tuple Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/collections/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,32 +87,36 @@ Hierarchy For Package com.sleepycat.bind.tuple
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" title="class or interface in java.lang"><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" title="class or interface in java.io"><B>InputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><B>TupleInput</B></A></UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io"><B>InputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>)
+<UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><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" title="class or interface in java.io"><B>OutputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>TupleOutput</B></A></UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io"><B>OutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A>)
+<UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>TupleOutput</B></A></UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><B>TupleBase</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>BooleanBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>ByteBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>CharacterBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>DoubleBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>FloatBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>IntegerBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>LongBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>ShortBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>StringBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleMarshalledBinding</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleInputBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>BooleanBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>ByteBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>CharacterBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>DoubleBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>FloatBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>IntegerBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>LongBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>ShortBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>SortedDoubleBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>SortedFloatBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>StringBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledBinding</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledKeyCreator</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledKeyCreator</B></A></UL>
+</UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleInputBinding</B></A> (implements com.sleepycat.bind.<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
</UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleEntry</B></A><LI TYPE="circle">interface com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleKeyEntity</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleEntry</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="../../../../com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleKeyEntity</B></A></UL>
<HR>
@@ -118,7 +125,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -134,7 +141,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -143,7 +150,7 @@ Interface Hierarchy
&nbsp;<A HREF="../../../../com/sleepycat/bind/serial/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/sleepycat/collections/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;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -156,6 +163,7 @@ Interface Hierarchy
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -163,6 +171,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/bind/tuple/package-use.html b/db/docs/java/com/sleepycat/bind/tuple/package-use.html
index 06ec01b11..e12369201 100644
--- a/db/docs/java/com/sleepycat/bind/tuple/package-use.html
+++ b/db/docs/java/com/sleepycat/bind/tuple/package-use.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Package com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Package com.sleepycat.bind.tuple (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Package com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Package com.sleepycat.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Package com.sleepycat.bind.tuple (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -96,8 +99,15 @@ Packages that use <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> used by <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> used by <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bind/tuple/class-use/TupleBase.html#com.sleepycat.bind.serial"><B>TupleBase</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A base class for tuple bindings and tuple key creators that provides control
+ over the allocation of the output buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../../com/sleepycat/bind/tuple/class-use/TupleInput.html#com.sleepycat.bind.serial"><B>TupleInput</B></A></B>
@@ -119,8 +129,15 @@ Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">c
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> used by <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> used by <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bind/tuple/class-use/TupleBase.html#com.sleepycat.bind.tuple"><B>TupleBase</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A base class for tuple bindings and tuple key creators that provides control
+ over the allocation of the output buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../../com/sleepycat/bind/tuple/class-use/TupleBinding.html#com.sleepycat.bind.tuple"><B>TupleBinding</B></A></B>
@@ -175,7 +192,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -191,7 +208,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -200,7 +217,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">c
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/bind/tuple/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -213,6 +230,7 @@ Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">c
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -220,6 +238,6 @@ Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">c
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/CurrentTransaction.html b/db/docs/java/com/sleepycat/collections/CurrentTransaction.html
index fc4fc3ecb..be2d8571f 100644
--- a/db/docs/java/com/sleepycat/collections/CurrentTransaction.html
+++ b/db/docs/java/com/sleepycat/collections/CurrentTransaction.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+CurrentTransaction (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.CurrentTransaction class">
@@ -14,9 +14,11 @@ CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CurrentTransaction (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/CurrentTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CurrentTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.collections</FONT>
Class CurrentTransaction</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.CurrentTransaction</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>CurrentTransaction</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Provides access to the current transaction for the current thread within the
@@ -105,22 +109,14 @@ Provides access to the current transaction for the current thread within the
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -181,28 +177,22 @@ Provides access to the current transaction for the current thread within the
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -331,7 +321,7 @@ public final <A HREF="../../../com/sleepycat/db/Transaction.html" title="class i
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -347,7 +337,7 @@ public final <A HREF="../../../com/sleepycat/db/Transaction.html" title="class i
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -356,7 +346,7 @@ public final <A HREF="../../../com/sleepycat/db/Transaction.html" title="class i
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/CurrentTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CurrentTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -369,6 +359,7 @@ public final <A HREF="../../../com/sleepycat/db/Transaction.html" title="class i
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -382,6 +373,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/MapEntryParameter.html b/db/docs/java/com/sleepycat/collections/MapEntryParameter.html
index dbfbb7281..b5878d1c4 100644
--- a/db/docs/java/com/sleepycat/collections/MapEntryParameter.html
+++ b/db/docs/java/com/sleepycat/collections/MapEntryParameter.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-MapEntryParameter (Sleepycat Software, Inc. - Berkeley DB Java API)
+MapEntryParameter (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.MapEntryParameter class">
@@ -14,9 +14,11 @@ MapEntryParameter (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MapEntryParameter (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MapEntryParameter (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/MapEntryParameter.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MapEntryParameter.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.collections</FONT>
Class MapEntryParameter</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.MapEntryParameter</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.MapEntryParameter</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" title="class or interface in java.util">Map.Entry</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>MapEntryParameter</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A></DL>
+<DT><PRE>public class <B>MapEntryParameter</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A></DL>
+</PRE>
<P>
A simple <code>Map.Entry</code> implementation that can be used as in
@@ -115,19 +119,14 @@ A simple <code>Map.Entry</code> implementation that can be used as in
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/MapEntryParameter.html#MapEntryParameter(java.lang.Object, java.lang.Object)">MapEntryParameter</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;key,
@@ -143,8 +142,8 @@ A simple <code>Map.Entry</code> implementation that can be used as in
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -199,25 +198,22 @@ A simple <code>Map.Entry</code> implementation that can be used as in
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -229,15 +225,17 @@ public <B>MapEntryParameter</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<DL>
<DD>Creates a map entry with a given key and value.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the key to use.<DD><CODE>value</CODE> - is the value to use.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -249,7 +247,7 @@ public int <B>hashCode</B>()</PRE>
<DD>Computes a hash code as specified by <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#hashCode()" title="class or interface in java.util"><CODE>Map.Entry.hashCode()</CODE></A>.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">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()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -266,7 +264,7 @@ public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
<DD>Compares this entry to a given entry as specified by <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#equals(java.lang.Object)" title="class or interface in java.util"><CODE>Map.Entry.equals(java.lang.Object)</CODE></A>.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">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)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -336,7 +334,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<DD>Converts the entry to a string representation for debugging.
<P>
<DD><DL>
-</DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -352,7 +350,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -368,16 +366,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/MapEntryParameter.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MapEntryParameter.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -390,6 +388,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -403,6 +402,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/PrimaryKeyAssigner.html b/db/docs/java/com/sleepycat/collections/PrimaryKeyAssigner.html
index 6aa9ea1ae..39644ee0e 100644
--- a/db/docs/java/com/sleepycat/collections/PrimaryKeyAssigner.html
+++ b/db/docs/java/com/sleepycat/collections/PrimaryKeyAssigner.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)
+PrimaryKeyAssigner (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.PrimaryKeyAssigner interface">
@@ -14,9 +14,11 @@ PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="PrimaryKeyAssigner (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/PrimaryKeyAssigner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PrimaryKeyAssigner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.collections</FONT>
Interface PrimaryKeyAssigner</H2>
<HR>
<DL>
-<DT>public interface <B>PrimaryKeyAssigner</B></DL>
+<DT><PRE>public interface <B>PrimaryKeyAssigner</B></DL>
+</PRE>
<P>
An interface implemented to assign new primary key values.
@@ -100,22 +104,14 @@ An interface implemented to assign new primary key values.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -129,26 +125,20 @@ An interface implemented to assign new primary key values.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="assignKey(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
assignKey</H3>
<PRE>
-public void <B>assignKey</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;keyData)
+void <B>assignKey</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;keyData)
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>Assigns a new primary key value into the given data buffer.
@@ -168,7 +158,7 @@ public void <B>assignKey</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.ht
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -184,16 +174,16 @@ public void <B>assignKey</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.ht
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/PrimaryKeyAssigner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PrimaryKeyAssigner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -206,6 +196,7 @@ public void <B>assignKey</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.ht
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -219,6 +210,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredCollection.html b/db/docs/java/com/sleepycat/collections/StoredCollection.html
index e30e1ecf4..57957d8bd 100644
--- a/db/docs/java/com/sleepycat/collections/StoredCollection.html
+++ b/db/docs/java/com/sleepycat/collections/StoredCollection.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredCollection (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredCollection class">
@@ -14,9 +14,11 @@ StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredCollection (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&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>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,41 +90,35 @@ com.sleepycat.collections</FONT>
Class StoredCollection</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredCollection</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>, <A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>, <A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>, <A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A></DD>
</DL>
<HR>
<DL>
-<DT>public abstract class <B>StoredCollection</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></DL>
+<DT><PRE>public abstract class <B>StoredCollection</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></DL>
+</PRE>
<P>
A abstract base class for all stored collections. This class, and its
base class <A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><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" title="class or interface in java.util"><CODE>Collection</CODE></A> interface. Other methods, such as <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.add(java.lang.Object)</CODE></A>
+ in the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interface. Other methods, such as <A HREF="../../../com/sleepycat/collections/StoredCollection.html#add(java.lang.Object, java.lang.Object)"><CODE>add(java.lang.Object, java.lang.Object)</CODE></A>
and <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A>, are provided by concrete classes that extend this
class.
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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/collections/StoredCollection.html#iterator(boolean)"><CODE>iterator(boolean)</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()"><CODE>getIteratorBlockSize()</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)"><CODE>setIteratorBlockSize(int)</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>storedIterator()</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><CODE>storedIterator(boolean)</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)"><CODE>join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()"><CODE>toList()</CODE></A></li>
</ul>
@@ -131,22 +128,31 @@ A abstract base class for all stored collections. This class, and its
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</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/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></B></CODE>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The default number of records read at one time by iterators.</TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -177,6 +183,15 @@ A abstract base class for all stored collections. This class, and its
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of records read at one time by iterators returned by
+ the <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>iterator()</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/collections/StoredCollection.html#hashCode()">hashCode</A></B>()</CODE>
<BR>
@@ -196,8 +211,9 @@ A abstract base class for all stored collections. This class, and its
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Please use <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>storedIterator()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><CODE>storedIterator(boolean)</CODE></A> instead. Because the iterator returned must
+ be closed, the method name <code>iterator</code> is confusing since standard
+ Java iterators do not need to be closed.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -230,6 +246,40 @@ A abstract base class for all stored collections. This class, and its
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A></B>(int&nbsp;blockSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the number of records read at one time by iterators returned by
+ the <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>iterator()</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/collections/StoredCollection.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of records in the collection or map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</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/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</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="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A></B>()</CODE>
@@ -265,28 +315,28 @@ A abstract base class for all stored collections. This class, and its
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Collection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></B></TH>
</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)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util">size</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -294,20 +344,72 @@ A abstract base class for all stored collections. This class, and its
<!-- ============ FIELD DETAIL =========== -->
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
+<A NAME="DEFAULT_ITERATOR_BLOCK_SIZE"><!-- --></A><H3>
+DEFAULT_ITERATOR_BLOCK_SIZE</H3>
+<PRE>
+public static final int <B>DEFAULT_ITERATOR_BLOCK_SIZE</B></PRE>
+<DL>
+<DD>The default number of records read at one time by iterators.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)"><CODE>setIteratorBlockSize(int)</CODE></A>,
+<A HREF="../../../constant-values.html#com.sleepycat.collections.StoredCollection.DEFAULT_ITERATOR_BLOCK_SIZE">Constant Field Values</A></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
+<A NAME="getIteratorBlockSize()"><!-- --></A><H3>
+getIteratorBlockSize</H3>
+<PRE>
+public int <B>getIteratorBlockSize</B>()</PRE>
+<DL>
+<DD>Returns the number of records read at one time by iterators returned by
+ the <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>iterator()</CODE></A> method. By default this value is <A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE"><CODE>DEFAULT_ITERATOR_BLOCK_SIZE</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setIteratorBlockSize(int)"><!-- --></A><H3>
+setIteratorBlockSize</H3>
+<PRE>
+public void <B>setIteratorBlockSize</B>(int&nbsp;blockSize)</PRE>
+<DL>
+<DD>Changes the number of records read at one time by iterators returned by
+ the <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>iterator()</CODE></A> method. By default this value is <A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE"><CODE>DEFAULT_ITERATOR_BLOCK_SIZE</CODE></A>.
+<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/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the blockSize is less than two.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="iterator()"><!-- --></A><H3>
iterator</H3>
<PRE>
@@ -316,28 +418,65 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" t
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#iterator()" title="class or interface in java.util"><CODE>Collection.iterator()</CODE></A> interface.
+
+ <p>The iterator returned by this method does not keep a database cursor
+ open and therefore it does not need to be closed. It reads blocks of
+ records as needed, opening and closing a cursor to read each block of
+ records. The number of records per block is 10 by default and can be
+ changed with <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)"><CODE>setIteratorBlockSize(int)</CODE></A>.</p>
+
+ <p>Because this iterator does not keep a cursor open, if it is used
+ without transactions, the iterator does not have <em>cursor
+ stability</em> characteristics. In other words, the record at the
+ current iterator position can be changed or deleted by another thread.
+ To prevent this from happening, call this method within a transaction or
+ use the <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>storedIterator()</CODE></A> method instead.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE></DL>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>a <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A> for this collection.
-<DT><B>Throws:</B>
-<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
- thrown.<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+<DT><B>Returns:</B><DD>a standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util"><CODE>Iterator</CODE></A> for this collection.<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
</DD>
</DL>
<HR>
-<A NAME="iterator(boolean)"><!-- --></A><H3>
-iterator</H3>
+<A NAME="storedIterator()"><!-- --></A><H3>
+storedIterator</H3>
<PRE>
-public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A> <B>iterator</B>(boolean&nbsp;writeAllowed)</PRE>
+public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A> <B>storedIterator</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 does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interface.
+
+ <p><strong>Warning:</strong> The iterator returned must be explicitly
+ closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A> to release the underlying
+ database cursor resources.</p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A> for this collection.<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="storedIterator(boolean)"><!-- --></A><H3>
+storedIterator</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A> <B>storedIterator</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" title="class or interface in java.util"><CODE>Collection</CODE></A> interface.
+
+ <p><strong>Warning:</strong> The iterator returned must be explicitly
+ closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A> to release the underlying
+ database cursor resources.</p>
<P>
<DD><DL>
</DL>
@@ -356,6 +495,24 @@ public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="c
</DL>
<HR>
+<A NAME="iterator(boolean)"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A> <B>iterator</B>(boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Please use <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>storedIterator()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><CODE>storedIterator(boolean)</CODE></A> instead. Because the iterator returned must
+ be closed, the method name <code>iterator</code> is confusing since standard
+ Java iterators do not need to be closed.</I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="toArray()"><!-- --></A><H3>
toArray</H3>
<PRE>
@@ -500,7 +657,7 @@ public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#equals(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.equals(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">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)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -517,7 +674,7 @@ hashCode</H3>
public int <B>hashCode</B>()</PRE>
<DL>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
</DL>
@@ -553,11 +710,10 @@ toString</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">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.
+ WARNING: The returned string may be very large.
<P>
<DD><DL>
-</DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -569,6 +725,32 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</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/collections/StoredContainer.html#size()">StoredContainer</A></CODE></B></DD>
+<DD>Returns the number of records in the collection or map.
+ This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util"><CODE>Collection.size()</CODE></A> and <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util"><CODE>Map.size()</CODE></A> interfaces.
+
+ <p>Note that if other threads are adding or removing records while this
+ method is executing, the size returned may be incorrect. This method
+ does not lock the database.</p>
+
+ <p>Also note that, for a large database, this method may be expensive.
+ All non-duplicate records in the database are enumerated by this method,
+ bringing them into memory if they are not already cached.</p>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)"><!-- --></A><H3>
join</H3>
<PRE>
@@ -580,6 +762,10 @@ public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="c
index key values specified.
This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interface.
+ <p><strong>Warning:</strong> The iterator returned must be explicitly
+ closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A> to release the underlying
+ database cursor resources.</p>
+
<p>The returned iterator supports only the two methods: hasNext() and
next(). All other methods will throw UnsupportedOperationException.</p>
<P>
@@ -609,7 +795,7 @@ public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -625,16 +811,16 @@ public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -647,19 +833,20 @@ public <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="c
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&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>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredCollections.html b/db/docs/java/com/sleepycat/collections/StoredCollections.html
index c95c78b0b..940102209 100644
--- a/db/docs/java/com/sleepycat/collections/StoredCollections.html
+++ b/db/docs/java/com/sleepycat/collections/StoredCollections.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredCollections (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredCollections class">
@@ -14,9 +14,11 @@ StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredCollections (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredCollections.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollections.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,57 +90,104 @@ com.sleepycat.collections</FONT>
Class StoredCollections</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredCollections</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>StoredCollections</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<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 derived 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/collections/StoredContainer.html#isTransactional()"><CODE>StoredContainer.isTransactional()</CODE></A> returns false),
- dirty-read has no effect. If <A HREF="../../../com/sleepycat/collections/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/collections/StoredContainer.html#isDirtyRead()"><CODE>StoredContainer.isDirtyRead()</CODE></A> will
- return true. Dirty-read is disabled by default for a container.</p>
+Static methods operating on collections and maps.
+
+ <p>This class consists exclusively of static methods that operate on or
+ return stored collections and maps, jointly called containers. It contains
+ methods for changing certain properties of a container. Because container
+ properties are immutable, these methods always return a new container
+ instance. This allows stored container instances to be used safely by
+ multiple threads. Creating the new container instance is not expensive and
+ creates only two new objects.</p>
+
+ <p>When a container is created with a particular property, all containers
+ and iterators derived from that container will inherit the property. For
+ example, if a read-uncommitted Map is created then calls to its subMap(),
+ values(), entrySet(), and keySet() methods will create read-uncommitted
+ containers also.</p>
+
+ <p>Method names beginning with "configured" create a new container with a
+ specified <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><CODE>CursorConfig</CODE></A> from a given stored container. This allows
+ configuring a container for read-committed isolation, read-uncommitted
+ isolation, or any other property supported by <code>CursorConfig</code>.
+ All operations performed with the resulting container will be performed with
+ the specified cursor configuration.</p>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- ========== METHOD SUMMARY =========== -->
-<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.util">Collection</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)">configuredCollection</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;storedCollection,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">List</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)">configuredList</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&nbsp;storedList,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">Map</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)">configuredMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&nbsp;storedMap,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">Set</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)">configuredSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>&nbsp;storedSet,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
-<!-- ========== METHOD SUMMARY =========== -->
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)">configuredSortedMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>&nbsp;storedSortedMap,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)">configuredSortedSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>&nbsp;storedSortedSet,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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">
@@ -145,7 +195,9 @@ This class consists exclusively of static methods that operate on or return
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#dirtyReadCollection(java.util.Collection)">dirtyReadCollection</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)"><CODE>configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read collection, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -153,7 +205,9 @@ This class consists exclusively of static methods that operate on or return
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#dirtyReadList(java.util.List)">dirtyReadList</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)"><CODE>configuredList(java.util.List, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read list, pass <code>CursorConfig.READ_UNCOMMITTED</code></I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,7 +215,9 @@ This class consists exclusively of static methods that operate on or return
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#dirtyReadMap(java.util.Map)">dirtyReadMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)"><CODE>configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read map, pass <code>CursorConfig.READ_UNCOMMITTED</code></I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -169,7 +225,9 @@ This class consists exclusively of static methods that operate on or return
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#dirtyReadSet(java.util.Set)">dirtyReadSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)"><CODE>configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read set, pass <code>CursorConfig.READ_UNCOMMITTED</code></I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -177,7 +235,9 @@ This class consists exclusively of static methods that operate on or return
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#dirtyReadSortedMap(java.util.SortedMap)">dirtyReadSortedMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)"><CODE>configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read map, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -185,55 +245,54 @@ This class consists exclusively of static methods that operate on or return
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#dirtyReadSortedSet(java.util.SortedSet)">dirtyReadSortedSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)"><CODE>configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read set, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></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/util/Iterator.html" title="class or interface in java.util">Iterator</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#iterator(java.util.Iterator)">iterator</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util">Iterator</A>&nbsp;storedIterator)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html#iterator(java.util.Iterator)">iterator</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util">Iterator</A>&nbsp;iter)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clones a stored iterator preserving its current position.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clones an iterator preserving its current position.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
-<A NAME="dirtyReadCollection(java.util.Collection)"><!-- --></A><H3>
-dirtyReadCollection</H3>
+<A NAME="configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+configuredCollection</H3>
<PRE>
-public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A> <B>dirtyReadCollection</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;storedCollection)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A> <B>configuredCollection</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;storedCollection,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</PRE>
<DL>
-<DD>Creates a dirty-read collection from a given stored collection.
+<DD>Creates a configured 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>Parameters:</B><DD><CODE>storedCollection</CODE> - the base collection.<DD><CODE>config</CODE> - is the cursor configuration to be used for all operations
+ performed via the new collection instance; null may be specified to use
+ the default configuration.
+<DT><B>Returns:</B><DD>the configured collection.
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given container is not a
StoredContainer.</DL>
@@ -241,16 +300,22 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collectio
</DL>
<HR>
-<A NAME="dirtyReadList(java.util.List)"><!-- --></A><H3>
-dirtyReadList</H3>
+<A NAME="configuredList(java.util.List, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+configuredList</H3>
<PRE>
-public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A> <B>dirtyReadList</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&nbsp;storedList)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A> <B>configuredList</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&nbsp;storedList,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</PRE>
<DL>
-<DD>Creates a dirty-read list from a given stored list.
+<DD>Creates a configured list from a given stored list.
+
+ <p>Note that this method may not be called in the JE product, since the
+ StoredList class is not supported.</p>
<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>Parameters:</B><DD><CODE>storedList</CODE> - the base list.<DD><CODE>config</CODE> - is the cursor configuration to be used for all operations
+ performed via the new list instance; null may be specified to use the
+ default configuration.
+<DT><B>Returns:</B><DD>the configured list.
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given container is not a
StoredContainer.</DL>
@@ -258,16 +323,19 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html
</DL>
<HR>
-<A NAME="dirtyReadMap(java.util.Map)"><!-- --></A><H3>
-dirtyReadMap</H3>
+<A NAME="configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+configuredMap</H3>
<PRE>
-public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A> <B>dirtyReadMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&nbsp;storedMap)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A> <B>configuredMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&nbsp;storedMap,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</PRE>
<DL>
-<DD>Creates a dirty-read map from a given stored map.
+<DD>Creates a configured 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>Parameters:</B><DD><CODE>storedMap</CODE> - the base map.<DD><CODE>config</CODE> - is the cursor configuration to be used for all operations
+ performed via the new map instance; null may be specified to use the
+ default configuration.
+<DT><B>Returns:</B><DD>the configured map.
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given container is not a
StoredContainer.</DL>
@@ -275,16 +343,19 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"
</DL>
<HR>
-<A NAME="dirtyReadSet(java.util.Set)"><!-- --></A><H3>
-dirtyReadSet</H3>
+<A NAME="configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+configuredSet</H3>
<PRE>
-public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A> <B>dirtyReadSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>&nbsp;storedSet)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A> <B>configuredSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>&nbsp;storedSet,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</PRE>
<DL>
-<DD>Creates a dirty-read set from a given stored set.
+<DD>Creates a configured 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>Parameters:</B><DD><CODE>storedSet</CODE> - the base set.<DD><CODE>config</CODE> - is the cursor configuration to be used for all operations
+ performed via the new set instance; null may be specified to use the
+ default configuration.
+<DT><B>Returns:</B><DD>the configured set.
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given container is not a
StoredContainer.</DL>
@@ -292,16 +363,19 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html"
</DL>
<HR>
-<A NAME="dirtyReadSortedMap(java.util.SortedMap)"><!-- --></A><H3>
-dirtyReadSortedMap</H3>
+<A NAME="configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+configuredSortedMap</H3>
<PRE>
-public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A> <B>dirtyReadSortedMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>&nbsp;storedSortedMap)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A> <B>configuredSortedMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>&nbsp;storedSortedMap,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</PRE>
<DL>
-<DD>Creates a dirty-read sorted map from a given stored sorted map.
+<DD>Creates a configured 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>Parameters:</B><DD><CODE>storedSortedMap</CODE> - the base map.<DD><CODE>config</CODE> - is the cursor configuration to be used for all operations
+ performed via the new map instance; null may be specified to use the
+ default configuration.
+<DT><B>Returns:</B><DD>the configured map.
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given container is not a
StoredContainer.</DL>
@@ -309,16 +383,19 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap
</DL>
<HR>
-<A NAME="dirtyReadSortedSet(java.util.SortedSet)"><!-- --></A><H3>
-dirtyReadSortedSet</H3>
+<A NAME="configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+configuredSortedSet</H3>
<PRE>
-public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A> <B>dirtyReadSortedSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>&nbsp;storedSortedSet)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A> <B>configuredSortedSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>&nbsp;storedSortedSet,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</PRE>
<DL>
-<DD>Creates a dirty-read sorted set from a given stored sorted set.
+<DD>Creates a configured 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>Parameters:</B><DD><CODE>storedSortedSet</CODE> - the base set.<DD><CODE>config</CODE> - is the cursor configuration to be used for all operations
+ performed via the new set instance; null may be specified to use the
+ default configuration.
+<DT><B>Returns:</B><DD>the configured set.
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given container is not a
StoredContainer.</DL>
@@ -326,20 +403,110 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet
</DL>
<HR>
+<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" title="class or interface in java.util">Collection</A> <B>dirtyReadCollection</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;storedCollection)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)"><CODE>configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read collection, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<P>
+<DD><DL>
+</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" title="class or interface in java.util">List</A> <B>dirtyReadList</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&nbsp;storedList)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)"><CODE>configuredList(java.util.List, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read list, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<P>
+<DD><DL>
+</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" title="class or interface in java.util">Map</A> <B>dirtyReadMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&nbsp;storedMap)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)"><CODE>configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read map, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<P>
+<DD><DL>
+</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" title="class or interface in java.util">Set</A> <B>dirtyReadSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>&nbsp;storedSet)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)"><CODE>configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read set, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<P>
+<DD><DL>
+</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" title="class or interface in java.util">SortedMap</A> <B>dirtyReadSortedMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>&nbsp;storedSortedMap)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)"><CODE>configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read map, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<P>
+<DD><DL>
+</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" title="class or interface in java.util">SortedSet</A> <B>dirtyReadSortedSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>&nbsp;storedSortedSet)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)"><CODE>configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read set, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<P>
+<DD><DL>
+</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" title="class or interface in java.util">Iterator</A> <B>iterator</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util">Iterator</A>&nbsp;storedIterator)</PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util">Iterator</A> <B>iterator</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util">Iterator</A>&nbsp;iter)</PRE>
<DL>
-<DD>Clones a stored iterator preserving its current position.
+<DD>Clones an 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/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A> having the same position as the
- given iterator.
+<DT><B>Parameters:</B><DD><CODE>iter</CODE> - an iterator to clone.
+<DT><B>Returns:</B><DD>a new <code>Iterator</code> 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" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given iterator is not a
- StoredIterator.</DL>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html" title="class or interface in java.lang">ClassCastException</A></CODE> - if the given iterator was not obtained via a
+ <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><CODE>StoredCollection</CODE></A> method.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
@@ -351,7 +518,7 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -367,7 +534,7 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -376,7 +543,7 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredCollections.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollections.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -389,6 +556,7 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -402,6 +570,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredContainer.html b/db/docs/java/com/sleepycat/collections/StoredContainer.html
index d8cdf6293..15aa39bbe 100644
--- a/db/docs/java/com/sleepycat/collections/StoredContainer.html
+++ b/db/docs/java/com/sleepycat/collections/StoredContainer.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredContainer (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredContainer class">
@@ -14,9 +14,11 @@ StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredContainer (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredContainer.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredContainer.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,7 @@ com.sleepycat.collections</FONT>
Class StoredContainer</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredContainer</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A></DD>
@@ -97,23 +100,14 @@ Class StoredContainer</H2>
</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public abstract class <B>StoredContainer</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<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" title="class or interface in java.util"><CODE>Collection</CODE></A> and the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util"><CODE>Map</CODE></A> interfaces, namely
<A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()"><CODE>clear()</CODE></A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()"><CODE>isEmpty()</CODE></A> and <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>size()</CODE></A>.
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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>
@@ -124,8 +118,7 @@ A abstract base class for all stored collections and maps. This class
<li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()"><CODE>areDuplicatesAllowed()</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()"><CODE>areDuplicatesOrdered()</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()"><CODE>areKeysRenumbered()</CODE></A></li>
- <li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()"><CODE>isDirtyReadAllowed()</CODE></A></li>
- <li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()"><CODE>isDirtyRead()</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()"><CODE>getCursorConfig()</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()"><CODE>isTransactional()</CODE></A></li>
</ul>
<P>
@@ -134,22 +127,14 @@ A abstract base class for all stored collections and maps. This class
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -186,11 +171,22 @@ A abstract base class for all stored collections and maps. This class
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the cursor configuration that is used for all operations
+ performed via 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/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether dirty-read is enabled for this container.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()"><CODE>getCursorConfig()</CODE></A>.
+ <code>CursorConfig.isReadUncommitted</code> may be called to determine
+ whether dirty-read is enabled.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -198,7 +194,9 @@ A abstract base class for all stored collections and maps. This class
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method is deprecated with no replacement in this class.
+ In the DB product, <code>DatabaseConfig.getReadUncommitted</code> may be
+ called.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -245,38 +243,32 @@ A abstract base class for all stored collections and maps. This class
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
+<CODE>abstract &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Always throws UnsupportedOperationException.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of records in the collection or map.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -300,16 +292,43 @@ public final boolean <B>isWriteAllowed</B>()</PRE>
</DL>
<HR>
+<A NAME="getCursorConfig()"><!-- --></A><H3>
+getCursorConfig</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> <B>getCursorConfig</B>()</PRE>
+<DL>
+<DD>Returns the cursor configuration that is used for all operations
+ performed via this container.
+ For example, if <code>CursorConfig.getReadUncommitted</code> returns
+ true, data will be read that is modified but not committed.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util"><CODE>Map</CODE></A> or
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the cursor configuration, or null if no configuration has been
+ specified.</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.
- For the JE product, dirty-read is always allowed; for the DB product,
- dirty-read is allowed if it was configured for the underlying database
- for this container.
- Even when dirty-read is allowed it must specifically be enabled by
+<DD><B>Deprecated.</B>&nbsp;<I>This method is deprecated with no replacement in this class.
+ In the DB product, <code>DatabaseConfig.getReadUncommitted</code> may be
+ called.</I>
+<P>
+<DD>Returns whether read-uncommitted is allowed for this container.
+ For the JE product, read-uncommitted is always allowed; for the DB
+ product, read-uncommitted is allowed if it was configured for the
+ underlying database for this container.
+ Even when read-uncommitted is allowed it must specifically be enabled by
calling one of the <A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><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" title="class or interface in java.util"><CODE>Map</CODE></A> or
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
@@ -319,7 +338,7 @@ public final boolean <B>isDirtyReadAllowed</B>()</PRE>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>whether dirty-read is allowed.</DL>
+<DT><B>Returns:</B><DD>whether read-uncommitted is allowed.</DL>
</DD>
</DL>
<HR>
@@ -329,21 +348,15 @@ isDirtyRead</H3>
<PRE>
public final boolean <B>isDirtyRead</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/collections/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" title="class or interface in java.util"><CODE>Map</CODE></A> or
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()"><CODE>getCursorConfig()</CODE></A>.
+ <code>CursorConfig.isReadUncommitted</code> may be called to determine
+ whether dirty-read is enabled.</I>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-
-<DT><B>Returns:</B><DD>whether dirty-read is enabled.</DL>
+</DL>
</DD>
</DL>
<HR>
@@ -380,6 +393,8 @@ public final boolean <B>areDuplicatesAllowed</B>()</PRE>
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" title="class or interface in java.util"><CODE>Map</CODE></A> or
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
+
+ <p>Note that the JE product only supports BTREE databases.</p>
<P>
<DD><DL>
</DL>
@@ -400,6 +415,9 @@ public final boolean <B>areDuplicatesOrdered</B>()</PRE>
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" title="class or interface in java.util"><CODE>Map</CODE></A> or
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
+
+ <p>Note that the JE product only supports BTREE databases, and
+ duplicates are always sorted.</p>
<P>
<DD><DL>
</DL>
@@ -420,6 +438,9 @@ public final boolean <B>areKeysRenumbered</B>()</PRE>
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" title="class or interface in java.util"><CODE>Map</CODE></A> or
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
+
+ <p>Note that the JE product does not support RECNO databases, and
+ therefore keys are never renumbered.</p>
<P>
<DD><DL>
</DL>
@@ -440,6 +461,9 @@ public final boolean <B>isOrdered</B>()</PRE>
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" title="class or interface in java.util"><CODE>Map</CODE></A> or
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util"><CODE>Collection</CODE></A> interfaces.
+
+ <p>Note that the JE product only support BTREE databases, and
+ therefore keys are always ordered.</p>
<P>
<DD><DL>
</DL>
@@ -474,21 +498,26 @@ public final boolean <B>isSecondary</B>()</PRE>
<A NAME="size()"><!-- --></A><H3>
size</H3>
<PRE>
-public int <B>size</B>()</PRE>
+public abstract 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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util"><CODE>Collection.size()</CODE></A> and
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util"><CODE>Map.size()</CODE></A> interfaces.
+<DD>Returns the number of records in the collection or map.
+ This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util"><CODE>Collection.size()</CODE></A> and <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util"><CODE>Map.size()</CODE></A> interfaces.
+
+ <p>Note that if other threads are adding or removing records while this
+ method is executing, the size returned may be incorrect. This method
+ does not lock the database.</p>
+
+ <p>Also note that, for a large database, this method may be expensive.
+ All non-duplicate records in the database are enumerated by this method,
+ bringing them into memory if they are not already cached.</p>
<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" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - unconditionally.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -543,7 +572,7 @@ public void <B>clear</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -559,7 +588,7 @@ public void <B>clear</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -568,7 +597,7 @@ public void <B>clear</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredContainer.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredContainer.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -581,6 +610,7 @@ public void <B>clear</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -594,6 +624,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredEntrySet.html b/db/docs/java/com/sleepycat/collections/StoredEntrySet.html
index 5b01ecdac..e9514d42f 100644
--- a/db/docs/java/com/sleepycat/collections/StoredEntrySet.html
+++ b/db/docs/java/com/sleepycat/collections/StoredEntrySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredEntrySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredEntrySet class">
@@ -14,9 +14,11 @@ StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredEntrySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">FIELD</A>&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>
@@ -87,19 +90,20 @@ com.sleepycat.collections</FONT>
Class StoredEntrySet</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredEntrySet</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredEntrySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DL>
+<DT><PRE>public class <B>StoredEntrySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DL>
+</PRE>
<P>
The Set returned by Map.entrySet(). This class may not be instantiated
@@ -108,38 +112,38 @@ The Set returned by Map.entrySet(). This class may not be instantiated
<p>The <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#setValue(java.lang.Object)" title="class or interface in java.util"><CODE>Map.Entry.setValue(java.lang.Object)</CODE></A> method of the Map.Entry objects
that are returned by this class and its iterators behaves just as the <A HREF="../../../com/sleepycat/collections/StoredIterator.html#set(java.lang.Object)"><CODE>StoredIterator.set(java.lang.Object)</CODE></A> method does.</p>
-
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -179,34 +183,34 @@ The Set returned by Map.entrySet(). This class may not be instantiated
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Set</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></B></TH>
</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)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
@@ -215,19 +219,13 @@ The Set returned by Map.entrySet(). This class may not be instantiated
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -241,7 +239,7 @@ public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/la
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util"><CODE>Set.add(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">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" title="class or interface in java.util"><CODE>Map.Entry</CODE></A> instance.
@@ -250,7 +248,7 @@ public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/la
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html" title="class or interface in java.lang">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" title="class or interface in java.lang">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" title="class or interface in java.util"><CODE>Map.Entry</CODE></A> instance.
-<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -265,7 +263,7 @@ public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Set.remove(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">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" title="class or interface in java.util"><CODE>Map.Entry</CODE></A> instance to be removed.
@@ -274,7 +272,7 @@ public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
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" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - if the collection is read-only.
-<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -288,7 +286,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Set.contains(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">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" title="class or interface in java.util"><CODE>Map.Entry</CODE></A> instance to be checked.
@@ -296,7 +294,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
the mapEntry is not a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util"><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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -306,10 +304,9 @@ toString</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">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.
+ WARNING: The returned string may be very large.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></DL>
@@ -328,7 +325,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -344,7 +341,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -353,7 +350,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -366,11 +363,12 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">FIELD</A>&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>
@@ -379,6 +377,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredIterator.html b/db/docs/java/com/sleepycat/collections/StoredIterator.html
index 9ab3478b4..a037e00b9 100644
--- a/db/docs/java/com/sleepycat/collections/StoredIterator.html
+++ b/db/docs/java/com/sleepycat/collections/StoredIterator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredIterator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredIterator class">
@@ -14,9 +14,11 @@ StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredIterator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.collections</FONT>
Class StoredIterator</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredIterator</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util">Iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</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" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>StoredIterator</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
The Iterator returned by all stored collections.
@@ -119,6 +123,7 @@ The Iterator returned by all stored collections.
<ul>
<li><A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>close()</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>close(Iterator)</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredIterator.html#count()"><CODE>count()</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredIterator.html#getCollection()"><CODE>getCollection()</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredIterator.html#setReadModifyWrite(boolean)"><CODE>setReadModifyWrite(boolean)</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredIterator.html#isReadModifyWrite()"><CODE>isReadModifyWrite()</CODE></A></li>
@@ -129,22 +134,14 @@ The Iterator returned by all stored collections.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -182,6 +179,14 @@ The Iterator returned by all stored collections.
</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" title="class or interface in java.util">ListIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredIterator.html#dup()">dup</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Duplicate 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/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredIterator.html#getCollection()">getCollection</A></B>()</CODE>
@@ -209,6 +214,14 @@ The Iterator returned by all stored collections.
<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/collections/StoredIterator.html#isCurrentData(java.lang.Object)">isCurrentData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;currentData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the given data is the current iterator data.</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/collections/StoredIterator.html#isReadModifyWrite()">isReadModifyWrite</A></B>()</CODE>
<BR>
@@ -217,6 +230,14 @@ The Iterator returned by all stored collections.
</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/collections/StoredIterator.html#moveToIndex(int)">moveToIndex</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializes a list iterator at the given 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/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredIterator.html#next()">next</A></B>()</CODE>
@@ -280,28 +301,22 @@ The Iterator returned by all stored collections.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -319,7 +334,7 @@ public static void <B>close</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/j
<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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -373,13 +388,13 @@ public boolean <B>hasNext</B>()</PRE>
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html#hasNext()" title="class or interface in java.util"><CODE>Iterator.hasNext()</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#hasNext()" title="class or interface in java.util">hasNext</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>whether <A HREF="../../../com/sleepycat/collections/StoredIterator.html#next()"><CODE>next()</CODE></A> will succeed.
<DT><B>Throws:</B>
-<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -394,13 +409,13 @@ public boolean <B>hasPrevious</B>()</PRE>
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#hasPrevious()" title="class or interface in java.util"><CODE>ListIterator.hasPrevious()</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#hasPrevious()" title="class or interface in java.util">hasPrevious</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>whether <A HREF="../../../com/sleepycat/collections/StoredIterator.html#previous()"><CODE>previous()</CODE></A> will succeed.
<DT><B>Throws:</B>
-<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
</DD>
</DL>
<HR>
@@ -414,13 +429,13 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html#next()" title="class or interface in java.util"><CODE>Iterator.next()</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#next()" title="class or interface in java.util">next</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -435,13 +450,13 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#previous()" title="class or interface in java.util"><CODE>ListIterator.previous()</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#previous()" title="class or interface in java.util">previous</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -461,7 +476,7 @@ public int <B>nextIndex</B>()</PRE>
size is not available.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#nextIndex()" title="class or interface in java.util">nextIndex</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</DL>
</DD>
<DD><DL>
@@ -469,7 +484,7 @@ public int <B>nextIndex</B>()</PRE>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -486,7 +501,7 @@ public int <B>previousIndex</B>()</PRE>
interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#previousIndex()" title="class or interface in java.util">previousIndex</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</DL>
</DD>
<DD><DL>
@@ -494,7 +509,7 @@ public int <B>previousIndex</B>()</PRE>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -510,7 +525,7 @@ public void <B>set</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#set(java.lang.Object)" title="class or interface in java.util"><CODE>ListIterator.set(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#set(java.lang.Object)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the new value.
@@ -521,7 +536,7 @@ public void <B>set</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -537,16 +552,20 @@ public void <B>remove</B>()</PRE>
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#remove()" title="class or interface in java.util"><CODE>ListIterator.remove()</CODE></A> 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>Note that for the JE product, RECNO-RENUMBER databases are not
+ supported, and therefore list indices are never renumbered by this
+ method.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></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" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -565,9 +584,13 @@ public void <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/
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>Note that for the JE product, RECNO-RENUMBER databases are not
+ supported, and therefore this method may only be used to add
+ duplicates.</p>
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A></CODE></DL>
+</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the new value.
@@ -580,7 +603,7 @@ public void <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/
list with RECNO-RENUMBER access.
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -594,6 +617,7 @@ public int <B>count</B>()</PRE>
<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.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html" title="class or interface in java.util"><CODE>Iterator</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util"><CODE>ListIterator</CODE></A> interfaces.
<P>
<DD><DL>
</DL>
@@ -627,7 +651,7 @@ public void <B>close</B>()</PRE>
<DD><DL>
<DT><B>Throws:</B>
-<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
+<DD><CODE><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
</DD>
</DL>
@@ -649,6 +673,56 @@ public final <A HREF="../../../com/sleepycat/collections/StoredCollection.html"
<DT><B>Returns:</B><DD>the collection associated with this iterator.</DL>
</DD>
</DL>
+<HR>
+
+<A NAME="dup()"><!-- --></A><H3>
+dup</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A> <B>dup</B>()</PRE>
+<DL>
+<DD>Duplicate a cursor. Called by StoredCollections.iterator.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isCurrentData(java.lang.Object)"><!-- --></A><H3>
+isCurrentData</H3>
+<PRE>
+public final boolean <B>isCurrentData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;currentData)</PRE>
+<DL>
+<DD>Returns whether the given data is the current iterator data. Called by
+ StoredMapEntry.setValue.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="moveToIndex(int)"><!-- --></A><H3>
+moveToIndex</H3>
+<PRE>
+public final boolean <B>moveToIndex</B>(int&nbsp;index)</PRE>
+<DL>
+<DD>Initializes a list iterator at the given index. Called by
+ StoredList.iterator(int).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -658,7 +732,7 @@ public final <A HREF="../../../com/sleepycat/collections/StoredCollection.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -674,7 +748,7 @@ public final <A HREF="../../../com/sleepycat/collections/StoredCollection.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -683,7 +757,7 @@ public final <A HREF="../../../com/sleepycat/collections/StoredCollection.html"
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -696,6 +770,7 @@ public final <A HREF="../../../com/sleepycat/collections/StoredCollection.html"
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -709,6 +784,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredKeySet.html b/db/docs/java/com/sleepycat/collections/StoredKeySet.html
index 338bd3248..9f86cd31a 100644
--- a/db/docs/java/com/sleepycat/collections/StoredKeySet.html
+++ b/db/docs/java/com/sleepycat/collections/StoredKeySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredKeySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredKeySet class">
@@ -14,9 +14,11 @@ StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredKeySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -87,19 +90,20 @@ com.sleepycat.collections</FONT>
Class StoredKeySet</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredKeySet</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredKeySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DL>
+<DT><PRE>public class <B>StoredKeySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DL>
+</PRE>
<P>
The Set returned by Map.keySet() and which can also be constructed directly
@@ -108,35 +112,38 @@ The Set returned by Map.keySet() and which can also be constructed directly
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><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -153,8 +160,8 @@ The Set returned by Map.keySet() and which can also be constructed directly
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -186,34 +193,34 @@ The Set returned by Map.keySet() and which can also be constructed directly
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Set</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></B></TH>
</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)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
@@ -222,16 +229,13 @@ The Set returned by Map.keySet() and which can also be constructed directly
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -244,6 +248,7 @@ public <B>StoredKeySet</B>(<A HREF="../../../com/sleepycat/db/Database.html" tit
<DL>
<DD>Creates a key set view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -252,14 +257,15 @@ public <B>StoredKeySet</B>(<A HREF="../../../com/sleepycat/db/Database.html" tit
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -275,7 +281,7 @@ public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/la
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util"><CODE>Set.add(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
</DD>
<DD><DL>
@@ -300,7 +306,7 @@ public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Set.remove(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
</DD>
<DD><DL>
@@ -321,7 +327,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Set.contains(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
</DD>
<DD><DL>
@@ -339,7 +345,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -355,7 +361,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -364,7 +370,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -377,11 +383,12 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -390,6 +397,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredList.html b/db/docs/java/com/sleepycat/collections/StoredList.html
index a69b37dc1..86d1109f2 100644
--- a/db/docs/java/com/sleepycat/collections/StoredList.html
+++ b/db/docs/java/com/sleepycat/collections/StoredList.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredList (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredList class">
@@ -14,9 +14,11 @@ StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredList (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredList.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -87,16 +90,17 @@ com.sleepycat.collections</FONT>
Class StoredList</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredList</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredList</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></DL>
+<DT><PRE>public class <B>StoredList</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></DL>
+</PRE>
<P>
A List view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
@@ -110,16 +114,6 @@ A List view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class
read-only collections where record numbers are not required to be
sequential.</p>
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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>
@@ -132,19 +126,32 @@ A List view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -185,8 +192,8 @@ A List view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -335,34 +342,34 @@ A List view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.List"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">List</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></B></TH>
</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)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
@@ -371,16 +378,13 @@ A List view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -393,6 +397,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
<DL>
<DD>Creates a list view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -401,6 +406,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<HR>
<A NAME="StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><!-- --></A><H3>
@@ -412,6 +418,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
<DL>
<DD>Creates a list entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -420,6 +427,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<HR>
<A NAME="StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><!-- --></A><H3>
@@ -431,6 +439,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
<DL>
<DD>Creates a list view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>. Writing is allowed for the created list.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database underlying the new collection.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
buffers and value objects.<DD><CODE>keyAssigner</CODE> - is used by the <A HREF="../../../com/sleepycat/collections/StoredList.html#add(int, java.lang.Object)"><CODE>add(int, java.lang.Object)</CODE></A> and <A HREF="../../../com/sleepycat/collections/StoredList.html#append(java.lang.Object)"><CODE>append(java.lang.Object)</CODE></A>
methods to assign primary keys.
@@ -439,6 +448,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<HR>
<A NAME="StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><!-- --></A><H3>
@@ -450,6 +460,7 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
<DL>
<DD>Creates a list entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>. Writing is allowed for the created list.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
key/value buffers and entity value objects.<DD><CODE>keyAssigner</CODE> - is used by the <A HREF="../../../com/sleepycat/collections/StoredList.html#add(int, java.lang.Object)"><CODE>add(int, java.lang.Object)</CODE></A> and <A HREF="../../../com/sleepycat/collections/StoredList.html#append(java.lang.Object)"><CODE>append(java.lang.Object)</CODE></A>
methods to assign primary keys.
@@ -458,14 +469,15 @@ public <B>StoredList</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -504,7 +516,7 @@ public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/la
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add(java.lang.Object)" title="class or interface in java.util"><CODE>List.add(Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
</DD>
<DD><DL>
@@ -581,7 +593,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#contains(java.lang.Object)" title="class or interface in java.util"><CODE>List.contains(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
</DD>
<DD><DL>
@@ -663,13 +675,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.htm
sequence).
The iterator will be read-only if the collection is read-only.
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#listIterator()" title="class or interface in java.util"><CODE>List.listIterator()</CODE></A> interface.
+
+ <p>For information on cursor stability and iterator block size, see
+ <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>StoredCollection.iterator()</CODE></A>.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#listIterator()" title="class or interface in java.util">listIterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>a <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A> for this collection.
+<DT><B>Returns:</B><DD>a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util"><CODE>ListIterator</CODE></A> for this collection.
<DT><B>Throws:</B>
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
@@ -686,13 +701,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.htm
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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#listIterator(int)" title="class or interface in java.util"><CODE>List.listIterator(int)</CODE></A> interface.
+
+ <p>For information on cursor stability and iterator block size, see
+ <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>StoredCollection.iterator()</CODE></A>.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#listIterator(int)" title="class or interface in java.util">listIterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>a <A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A> for this collection.
+<DT><B>Returns:</B><DD>a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util"><CODE>ListIterator</CODE></A> for this collection.
<DT><B>Throws:</B>
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
@@ -733,7 +751,7 @@ public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#remove(java.lang.Object)" title="class or interface in java.util"><CODE>List.remove(Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE></DL>
</DD>
<DD><DL>
@@ -807,7 +825,7 @@ public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#equals(java.lang.Object)" title="class or interface in java.util"><CODE>List.equals(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></DL>
</DD>
<DD><DL>
@@ -824,7 +842,7 @@ hashCode</H3>
public int <B>hashCode</B>()</PRE>
<DL>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></CODE></DL>
</DD>
<DD><DL>
</DL>
@@ -839,7 +857,7 @@ public int <B>hashCode</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -855,7 +873,7 @@ public int <B>hashCode</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -864,7 +882,7 @@ public int <B>hashCode</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredList.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -877,11 +895,12 @@ public int <B>hashCode</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -890,6 +909,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredMap.html b/db/docs/java/com/sleepycat/collections/StoredMap.html
index 9125c2f76..4e3b103a3 100644
--- a/db/docs/java/com/sleepycat/collections/StoredMap.html
+++ b/db/docs/java/com/sleepycat/collections/StoredMap.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredMap (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredMap class">
@@ -14,9 +14,11 @@ StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredMap (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,8 +90,8 @@ com.sleepycat.collections</FONT>
Class StoredMap</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredMap</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></DD>
@@ -98,27 +101,19 @@ Class StoredMap</H2>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredMap</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></DL>
+<DT><PRE>public class <B>StoredMap</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></DL>
+</PRE>
<P>
A Map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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/collections/StoredMap.html#duplicates(java.lang.Object)"><CODE>duplicates(Object)</CODE></A></li>
- <li><A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><CODE>append(Object)</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredMap.html#duplicates(java.lang.Object)"><CODE>duplicates(java.lang.Object)</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredMap.html#duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)"><CODE>duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)</CODE></A></li>
+ <li><A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><CODE>append(java.lang.Object)</CODE></A></li>
</ul>
<P>
@@ -131,30 +126,28 @@ A Map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class i
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Nested classes inherited from class java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></B></TD>
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -199,8 +192,8 @@ A Map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class i
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -237,6 +230,16 @@ A Map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class i
</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/Map.html" title="class or interface in java.util">Map</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredMap.html#duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)">duplicatesMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;secondaryKey,
+ <A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;primaryKeyBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new map from primary key to value for the subset of records
+ having a given secondary key (duplicates).</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" title="class or interface in java.util">Set</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredMap.html#entrySet()">entrySet</A></B>()</CODE>
@@ -305,6 +308,14 @@ A Map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class i
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredMap.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of records in the collection or 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/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredMap.html#toString()">toString</A></B>()</CODE>
@@ -323,43 +334,40 @@ A Map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class i
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Map</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util">size</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -373,6 +381,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DL>
<DD>Creates a map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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
@@ -381,6 +390,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<HR>
<A NAME="StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><!-- --></A><H3>
@@ -393,6 +403,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DL>
<DD>Creates a map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>. Writing is allowed for the created map.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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>keyAssigner</CODE> - is used by the <A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><CODE>append(java.lang.Object)</CODE></A> method to assign
@@ -401,6 +412,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<HR>
<A NAME="StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)"><!-- --></A><H3>
@@ -413,6 +425,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DL>
<DD>Creates a map entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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
@@ -421,6 +434,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<HR>
<A NAME="StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><!-- --></A><H3>
@@ -433,6 +447,7 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DL>
<DD>Creates a map entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>. Writing is allowed for the created map.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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>keyAssigner</CODE> - is used by the <A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><CODE>append(java.lang.Object)</CODE></A> method to assign
@@ -441,14 +456,15 @@ public <B>StoredMap</B>(<A HREF="../../../com/sleepycat/db/Database.html" title=
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -519,6 +535,10 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" tit
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" title="class or interface in java.util"><CODE>Map</CODE></A>
interface.
+
+ <p>Note that for the JE product, QUEUE and RECNO databases are not
+ supported, and therefore a PrimaryKeyAssigner must be associated with
+ the map in order to call this method.</p>
<P>
<DD><DL>
</DL>
@@ -627,6 +647,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title=
<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" title="class or interface in java.util"><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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#keySet()" title="class or interface in java.util"><CODE>Map.keySet()</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE></DL>
@@ -650,6 +673,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title=
<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" title="class or interface in java.util"><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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet()" title="class or interface in java.util"><CODE>Map.entrySet()</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE></DL>
@@ -673,8 +699,11 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"
<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" title="class or interface in java.util"><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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet()" title="class or interface in java.util"><CODE>Map.entrySet()</CODE></A>
+ map is read-only. This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A>
interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE></DL>
@@ -718,6 +747,35 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"
</DL>
<HR>
+<A NAME="duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)"><!-- --></A><H3>
+duplicatesMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A> <B>duplicatesMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;secondaryKey,
+ <A HREF="../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;primaryKeyBinding)</PRE>
+<DL>
+<DD>Returns a new map from primary key to value for the subset of records
+ having a given secondary key (duplicates). This method does not exist
+ in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util"><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>secondaryKey</CODE> - is the secondary key for which duplicates values
+ will be represented by the returned map.<DD><CODE>primaryKeyBinding</CODE> - is the binding used for keys in the returned
+ map.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
equals</H3>
<PRE>
@@ -729,7 +787,7 @@ public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#equals(java.lang.Object)" title="class or interface in java.util"><CODE>Map.equals(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">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)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -745,7 +803,33 @@ hashCode</H3>
public int <B>hashCode</B>()</PRE>
<DL>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</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/collections/StoredContainer.html#size()">StoredContainer</A></CODE></B></DD>
+<DD>Returns the number of records in the collection or map.
+ This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util"><CODE>Collection.size()</CODE></A> and <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util"><CODE>Map.size()</CODE></A> interfaces.
+
+ <p>Note that if other threads are adding or removing records while this
+ method is executing, the size returned may be incorrect. This method
+ does not lock the database.</p>
+
+ <p>Also note that, for a large database, this method may be expensive.
+ All non-duplicate records in the database are enumerated by this method,
+ bringing them into memory if they are not already cached.</p>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
@@ -763,7 +847,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
returned string may be very large.
<P>
<DD><DL>
-</DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
</DD>
<DD><DL>
@@ -781,7 +865,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -797,7 +881,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -806,7 +890,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -819,6 +903,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -832,6 +917,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredSortedEntrySet.html b/db/docs/java/com/sleepycat/collections/StoredSortedEntrySet.html
index f42de8d79..5a317dd4b 100644
--- a/db/docs/java/com/sleepycat/collections/StoredSortedEntrySet.html
+++ b/db/docs/java/com/sleepycat/collections/StoredSortedEntrySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredSortedEntrySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredSortedEntrySet class">
@@ -14,9 +14,11 @@ StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredSortedEntrySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">FIELD</A>&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>
@@ -87,17 +90,18 @@ com.sleepycat.collections</FONT>
Class StoredSortedEntrySet</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredEntrySet</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredSortedEntrySet</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredEntrySet</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredSortedEntrySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DL>
+<DT><PRE>public class <B>StoredSortedEntrySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DL>
+</PRE>
<P>
The SortedSet returned by Map.entrySet(). This class may not be
@@ -107,16 +111,6 @@ The SortedSet returned by Map.entrySet(). This class may not be
<p>The <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#setValue(java.lang.Object)" title="class or interface in java.util"><CODE>Map.Entry.setValue(java.lang.Object)</CODE></A> method of the Map.Entry objects
that are returned by this class and its iterators behaves just as the <A HREF="../../../com/sleepycat/collections/StoredIterator.html#set(java.lang.Object)"><CODE>StoredIterator.set(java.lang.Object)</CODE></A> method does.</p>
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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>
@@ -131,22 +125,32 @@ The SortedSet returned by Map.entrySet(). This class may not be
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -237,7 +241,7 @@ The SortedSet returned by Map.entrySet(). This class may not be
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredEntrySet"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredEntrySet.html#add(java.lang.Object)">add</A>, <A HREF="../../../com/sleepycat/collections/StoredEntrySet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../com/sleepycat/collections/StoredEntrySet.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../com/sleepycat/collections/StoredEntrySet.html#toString()">toString</A></CODE></TD>
@@ -246,34 +250,34 @@ The SortedSet returned by Map.entrySet(). This class may not be
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Set</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></B></TH>
</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)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
@@ -282,19 +286,13 @@ The SortedSet returned by Map.entrySet(). This class may not be
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -367,6 +365,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<DD>Returns a view of the portion of this sorted set whose elements are
strictly less than toMapEntry.
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#headSet(java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.headSet(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#headSet(java.lang.Object)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -389,6 +390,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -410,6 +414,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#tailSet(java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.tailSet(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#tailSet(java.lang.Object)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -432,6 +439,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -454,6 +464,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#subSet(java.lang.Object, java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.subSet(java.lang.Object, java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#subSet(java.lang.Object, java.lang.Object)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -479,6 +492,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -499,7 +515,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -515,7 +531,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -524,7 +540,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -537,11 +553,12 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">FIELD</A>&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>
@@ -550,6 +567,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredSortedKeySet.html b/db/docs/java/com/sleepycat/collections/StoredSortedKeySet.html
index f0bcd60e6..458a10a65 100644
--- a/db/docs/java/com/sleepycat/collections/StoredSortedKeySet.html
+++ b/db/docs/java/com/sleepycat/collections/StoredSortedKeySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredSortedKeySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredSortedKeySet class">
@@ -14,9 +14,11 @@ StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredSortedKeySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -87,17 +90,18 @@ com.sleepycat.collections</FONT>
Class StoredSortedKeySet</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredKeySet</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredSortedKeySet</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredKeySet</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredSortedKeySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DL>
+<DT><PRE>public class <B>StoredSortedKeySet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DL>
+</PRE>
<P>
The SortedSet returned by Map.keySet() and which can also be constructed
@@ -107,16 +111,6 @@ The SortedSet returned by Map.keySet() and which can also be constructed
particularly useful for enumerating the unique keys of a store or index that
allows duplicates.
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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>
@@ -131,19 +125,32 @@ The SortedSet returned by Map.keySet() and which can also be constructed
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -160,8 +167,8 @@ The SortedSet returned by Map.keySet() and which can also be constructed
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -252,7 +259,7 @@ The SortedSet returned by Map.keySet() and which can also be constructed
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredKeySet"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredKeySet.html#add(java.lang.Object)">add</A>, <A HREF="../../../com/sleepycat/collections/StoredKeySet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../com/sleepycat/collections/StoredKeySet.html#remove(java.lang.Object)">remove</A></CODE></TD>
@@ -261,34 +268,34 @@ The SortedSet returned by Map.keySet() and which can also be constructed
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Set</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></B></TH>
</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)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
@@ -297,16 +304,13 @@ The SortedSet returned by Map.keySet() and which can also be constructed
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -319,6 +323,7 @@ public <B>StoredSortedKeySet</B>(<A HREF="../../../com/sleepycat/db/Database.htm
<DL>
<DD>Creates a sorted key set view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -326,14 +331,15 @@ public <B>StoredSortedKeySet</B>(<A HREF="../../../com/sleepycat/db/Database.htm
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -406,6 +412,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<DD>Returns a view of the portion of this sorted set whose elements are
strictly less than toKey.
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#headSet(java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.headSet(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#headSet(java.lang.Object)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -428,6 +437,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -449,6 +461,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#tailSet(java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.tailSet(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#tailSet(java.lang.Object)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -471,6 +486,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -493,6 +511,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#subSet(java.lang.Object, java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.subSet(java.lang.Object, java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#subSet(java.lang.Object, java.lang.Object)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -518,6 +539,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -538,7 +562,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -554,7 +578,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -563,7 +587,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -576,11 +600,12 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -589,6 +614,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredSortedMap.html b/db/docs/java/com/sleepycat/collections/StoredSortedMap.html
index 8ed19ba3c..afb8dfce1 100644
--- a/db/docs/java/com/sleepycat/collections/StoredSortedMap.html
+++ b/db/docs/java/com/sleepycat/collections/StoredSortedMap.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredSortedMap (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredSortedMap class">
@@ -14,9 +14,11 @@ StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredSortedMap (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,35 +90,25 @@ com.sleepycat.collections</FONT>
Class StoredSortedMap</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredMap</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredSortedMap</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredMap</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredSortedMap</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A></DL>
+<DT><PRE>public class <B>StoredSortedMap</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A></DL>
+</PRE>
<P>
A SortedMap view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
- <p><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()"><CODE>StoredContainer.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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/collections/StoredMap.html#duplicates(java.lang.Object)"><CODE>StoredMap.duplicates(Object)</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredSortedMap.html#headMap(java.lang.Object, boolean)"><CODE>headMap(Object, boolean)</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredSortedMap.html#tailMap(java.lang.Object, boolean)"><CODE>tailMap(Object, boolean)</CODE></A></li>
<li><A HREF="../../../com/sleepycat/collections/StoredSortedMap.html#subMap(java.lang.Object, boolean, java.lang.Object, boolean)"><CODE>subMap(Object, boolean, Object, boolean)</CODE></A></li>
@@ -131,30 +124,28 @@ A SortedMap view of a <A HREF="../../../com/sleepycat/db/Database.html" title="c
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Nested classes inherited from class java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></B></TD>
+<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -199,8 +190,8 @@ A SortedMap view of a <A HREF="../../../com/sleepycat/db/Database.html" title="c
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -291,34 +282,34 @@ A SortedMap view of a <A HREF="../../../com/sleepycat/db/Database.html" title="c
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredMap"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)">append</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#duplicates(java.lang.Object)">duplicates</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#entrySet()">entrySet</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#keySet()">keySet</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#put(java.lang.Object, java.lang.Object)">put</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#toString()">toString</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#values()">values</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)">append</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#duplicates(java.lang.Object)">duplicates</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)">duplicatesMap</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#entrySet()">entrySet</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#keySet()">keySet</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#put(java.lang.Object, java.lang.Object)">put</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#toString()">toString</A>, <A HREF="../../../com/sleepycat/collections/StoredMap.html#values()">values</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Map</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put(java.lang.Object, java.lang.Object)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values()" title="class or interface in java.util">values</A></CODE></TD>
@@ -327,16 +318,13 @@ A SortedMap view of a <A HREF="../../../com/sleepycat/db/Database.html" title="c
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -350,6 +338,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DL>
<DD>Creates a sorted map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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
@@ -358,6 +347,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<HR>
<A NAME="StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><!-- --></A><H3>
@@ -370,6 +360,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DL>
<DD>Creates a sorted map view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>. Writing is allowed for the created map.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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>keyAssigner</CODE> - is used by the <A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><CODE>StoredMap.append(java.lang.Object)</CODE></A> method to assign
@@ -378,6 +369,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<HR>
<A NAME="StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)"><!-- --></A><H3>
@@ -390,6 +382,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DL>
<DD>Creates a sorted map entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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
@@ -398,6 +391,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<HR>
<A NAME="StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><!-- --></A><H3>
@@ -410,6 +404,7 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DL>
<DD>Creates a sorted map entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>. Writing is allowed for the created map.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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>keyAssigner</CODE> - is used by the <A HREF="../../../com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><CODE>StoredMap.append(java.lang.Object)</CODE></A> method to assign
@@ -418,14 +413,15 @@ public <B>StoredSortedMap</B>(<A HREF="../../../com/sleepycat/db/Database.html"
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -498,6 +494,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<DD>Returns a view of the portion of this sorted set whose keys are
strictly less than toKey.
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#headMap(java.lang.Object)" title="class or interface in java.util"><CODE>SortedMap.headMap(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredStoredMap and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#headMap(java.lang.Object)" title="class or interface in java.util">headMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A></CODE></DL>
@@ -520,6 +519,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<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" title="class or interface in java.util"><CODE>SortedMap</CODE></A> interface.
+
+ <p>Note that the return value is a StoredStoredMap and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -541,6 +543,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#tailMap(java.lang.Object)" title="class or interface in java.util"><CODE>SortedMap.tailMap(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredStoredMap and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#tailMap(java.lang.Object)" title="class or interface in java.util">tailMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A></CODE></DL>
@@ -563,6 +568,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<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" title="class or interface in java.util"><CODE>SortedMap</CODE></A> interface.
+
+ <p>Note that the return value is a StoredStoredMap and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -585,6 +593,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#subMap(java.lang.Object, java.lang.Object)" title="class or interface in java.util"><CODE>SortedMap.subMap(java.lang.Object, java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredStoredMap and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#subMap(java.lang.Object, java.lang.Object)" title="class or interface in java.util">subMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A></CODE></DL>
@@ -610,6 +621,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
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" title="class or interface in java.util"><CODE>SortedMap</CODE></A> interface.
+
+ <p>Note that the return value is a StoredStoredMap and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -630,7 +644,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -646,7 +660,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -655,7 +669,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -668,6 +682,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -681,6 +696,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredSortedValueSet.html b/db/docs/java/com/sleepycat/collections/StoredSortedValueSet.html
index c9c09efb6..74a1abb9e 100644
--- a/db/docs/java/com/sleepycat/collections/StoredSortedValueSet.html
+++ b/db/docs/java/com/sleepycat/collections/StoredSortedValueSet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredSortedValueSet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredSortedValueSet class">
@@ -14,9 +14,11 @@ StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredSortedValueSet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -87,17 +90,18 @@ com.sleepycat.collections</FONT>
Class StoredSortedValueSet</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredValueSet</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredSortedValueSet</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredValueSet</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredSortedValueSet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DL>
+<DT><PRE>public class <B>StoredSortedValueSet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></DL>
+</PRE>
<P>
The SortedSet returned by Map.values() and which can also be constructed
@@ -105,16 +109,6 @@ The SortedSet returned by Map.values() and which can also be constructed
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><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#size()"><CODE>StoredValueSet.size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
-
<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
@@ -130,19 +124,32 @@ The SortedSet returned by Map.values() and which can also be constructed
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -159,8 +166,8 @@ The SortedSet returned by Map.values() and which can also be constructed
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -251,43 +258,43 @@ The SortedSet returned by Map.values() and which can also be constructed
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredValueSet"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredValueSet.html#add(java.lang.Object)">add</A>, <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#size()">size</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredValueSet.html#add(java.lang.Object)">add</A>, <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#remove(java.lang.Object)">remove</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Set</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></B></TH>
</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)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
@@ -296,16 +303,13 @@ The SortedSet returned by Map.values() and which can also be constructed
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -318,6 +322,7 @@ public <B>StoredSortedValueSet</B>(<A HREF="../../../com/sleepycat/db/Database.h
<DL>
<DD>Creates a sorted value set entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -325,14 +330,15 @@ public <B>StoredSortedValueSet</B>(<A HREF="../../../com/sleepycat/db/Database.h
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">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/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -405,6 +411,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<DD>Returns a view of the portion of this sorted set whose elements are
strictly less than toValue.
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#headSet(java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.headSet(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#headSet(java.lang.Object)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -427,6 +436,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -448,6 +460,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#tailSet(java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.tailSet(java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#tailSet(java.lang.Object)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -470,6 +485,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -492,6 +510,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#subSet(java.lang.Object, java.lang.Object)" title="class or interface in java.util"><CODE>SortedSet.subSet(java.lang.Object, java.lang.Object)</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#subSet(java.lang.Object, java.lang.Object)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A></CODE></DL>
@@ -517,6 +538,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
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" title="class or interface in java.util"><CODE>SortedSet</CODE></A> interface.
+
+ <p>Note that the return value is a StoredCollection and must be treated
+ as such; for example, its iterators must be explicitly closed.</p>
<P>
<DD><DL>
</DL>
@@ -537,7 +561,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -553,7 +577,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -562,7 +586,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredSortedValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -575,11 +599,12 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -588,6 +613,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/StoredValueSet.html b/db/docs/java/com/sleepycat/collections/StoredValueSet.html
index 3f57daff1..6f7ee85f1 100644
--- a/db/docs/java/com/sleepycat/collections/StoredValueSet.html
+++ b/db/docs/java/com/sleepycat/collections/StoredValueSet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+StoredValueSet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.StoredValueSet class">
@@ -14,9 +14,11 @@ StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StoredValueSet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,11 +68,12 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -87,54 +90,58 @@ com.sleepycat.collections</FONT>
Class StoredValueSet</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.StoredValueSet</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredContainer</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">com.sleepycat.collections.StoredCollection</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DD>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Iterable.html" title="class or interface in java.lang">Iterable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>StoredValueSet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DL>
+<DT><PRE>public class <B>StoredValueSet</B><DT>extends <A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></DL>
+</PRE>
<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><em>Note that this class does not conform to the standard Java
- collections interface in the following ways:</em></p>
- <ul>
- <li>The <A HREF="../../../com/sleepycat/collections/StoredValueSet.html#size()"><CODE>size()</CODE></A> method always throws
- <code>UnsupportedOperationException</code> because, for performance reasons,
- databases do not maintain their total record count.</li>
- <li>All iterators must be explicitly closed using <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> or <A HREF="../../../com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><CODE>StoredIterator.close(java.util.Iterator)</CODE></A>
- to release the underlying database cursor resources.</li>
- </ul>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.collections.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Fields inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -159,8 +166,8 @@ The Set returned by Map.values() and Map.duplicates(), and which can also be
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -188,64 +195,53 @@ The Set returned by Map.values() and Map.duplicates(), and which can also be
&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/collections/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.collections.StoredCollection"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()">getIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)">setIteratorBlockSize</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#size()">size</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toList()">toList</A>, <A HREF="../../../com/sleepycat/collections/StoredCollection.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.collections.StoredContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#clear()">clear</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyRead()">isDirtyRead</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isSecondary()">isSecondary</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../com/sleepycat/collections/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.util">Set</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></B></TH>
</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)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])" title="class or interface in java.util">toArray</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -258,6 +254,7 @@ public <B>StoredValueSet</B>(<A HREF="../../../com/sleepycat/db/Database.html" t
<DL>
<DD>Creates a value set view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -266,6 +263,7 @@ public <B>StoredValueSet</B>(<A HREF="../../../com/sleepycat/db/Database.html" t
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<HR>
<A NAME="StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><!-- --></A><H3>
@@ -277,6 +275,7 @@ public <B>StoredValueSet</B>(<A HREF="../../../com/sleepycat/db/Database.html" t
<DL>
<DD>Creates a value set entity view of a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>database</CODE> - is the Database 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.
@@ -285,14 +284,15 @@ public <B>StoredValueSet</B>(<A HREF="../../../com/sleepycat/db/Database.html" t
defined or a parameter is invalid.
<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><CODE>DatabaseException</CODE></A> is
thrown.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -306,7 +306,7 @@ public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/la
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util"><CODE>Set.add(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>entity</CODE> - is the entity to be added.
@@ -331,7 +331,7 @@ public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/ja
interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the value to check.
@@ -353,7 +353,7 @@ public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
This method conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Set.remove(java.lang.Object)</CODE></A> interface.
<P>
<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE></DL>
</DD>
<DD><DL>
@@ -363,27 +363,6 @@ public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java
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/collections/StoredContainer.html" title="class in com.sleepycat.collections">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 <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()" title="class or interface in java.util"><CODE>Collection.size()</CODE></A> and
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()" title="class or interface in java.util"><CODE>Map.size()</CODE></A> interfaces.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html#size()">size</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>always throws an exception.</DL>
-</DD>
-</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -393,7 +372,7 @@ public int <B>size</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -409,7 +388,7 @@ public int <B>size</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -418,7 +397,7 @@ public int <B>size</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/StoredValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -431,11 +410,12 @@ public int <B>size</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.collections.StoredCollection">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>
@@ -444,6 +424,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/TransactionRunner.html b/db/docs/java/com/sleepycat/collections/TransactionRunner.html
index f19299f04..0617f9d4c 100644
--- a/db/docs/java/com/sleepycat/collections/TransactionRunner.html
+++ b/db/docs/java/com/sleepycat/collections/TransactionRunner.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:47 EDT 2006 -->
<TITLE>
-TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)
+TransactionRunner (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.TransactionRunner class">
@@ -14,9 +14,11 @@ TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TransactionRunner (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/TransactionRunner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionRunner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,31 +90,78 @@ com.sleepycat.collections</FONT>
Class TransactionRunner</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.TransactionRunner</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.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" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>TransactionRunner</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Starts a transaction, calls <A HREF="../../../com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A>, and handles
- transaction retry and exceptions.
+ transaction retry and exceptions. To perform a transaction, the user
+ implements the <A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><CODE>TransactionWorker</CODE></A> interface and passes an instance of
+ that class to the <A HREF="../../../com/sleepycat/collections/TransactionRunner.html#run(com.sleepycat.collections.TransactionWorker)"><CODE>run(com.sleepycat.collections.TransactionWorker)</CODE></A> method.
+
+ <p>A single TransactionRunner instance may be used by any number of threads
+ for any number of transactions.</p>
+
+ <p>The behavior of the run() method depends on whether the environment is
+ transactional, whether nested transactions are enabled, and whether a
+ transaction is already active.</p>
+
+ <ul>
+ <li>When the run() method is called in a transactional environment and no
+ transaction is active for the current thread, a new transaction is started
+ before calling doWork(). If DeadlockException is thrown by doWork(), the
+ transaction will be aborted and the process will be repeated up to the
+ maximum number of retries. 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 the run() method. If no exception is
+ thrown by doWork(), the transaction will be committed. The run() method
+ will not attempt to commit or abort a transaction if it has already been
+ committed or aborted by doWork().</li>
+
+ <li>When the run() method is called and a transaction is active for the
+ current thread, and nested transactions are enabled, a nested transaction is
+ started before calling doWork(). The transaction that is active when
+ calling the run() method will become the parent of the nested transaction.
+ The nested transaction will be committed or aborted by the run() method
+ following the same rules described above. Note that nested transactions may
+ not be enabled for the JE product, since JE does not support nested
+ transactions.</li>
+
+ <li>When the run() method is called in a non-transactional environment, the
+ doWork() method is called without starting a transaction. The run() method
+ will return without committing or aborting a transaction, and any exceptions
+ thrown by the doWork() method will be thrown by the run() method.</li>
+
+ <li>When the run() method is called and a transaction is active for the
+ current thread and nested transactions are not enabled (the default) the
+ same rules as above apply. All the operations performed by the doWork()
+ method will be part of the currently active transaction.</li>
+ </ul>
+
+ <p>In a transactional environment, the rules described above support nested
+ calls to the run() method and guarantee that the outermost call will cause
+ the transaction to be committed or aborted. This is true whether or not
+ nested transactions are supported or enabled. Note that nested transactions
+ are provided as an optimization for improving concurrency but do not change
+ the meaning of the outermost transaction. Nested transactions are not
+ currently supported by the JE product.</p>
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,8 +178,8 @@ Starts a transaction, calls <A HREF="../../../com/sleepycat/collections/Transact
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment)">TransactionRunner</A></B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;env)</CODE>
@@ -153,8 +203,8 @@ Starts a transaction, calls <A HREF="../../../com/sleepycat/collections/Transact
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -191,7 +241,7 @@ Starts a transaction, calls <A HREF="../../../com/sleepycat/collections/Transact
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
- environments, begins and ends a transaction.</TD>
+ environments, may begin and end a transaction.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -225,10 +275,10 @@ Starts a transaction, calls <A HREF="../../../com/sleepycat/collections/Transact
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -239,8 +289,8 @@ Starts a transaction, calls <A HREF="../../../com/sleepycat/collections/Transact
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -260,8 +310,8 @@ public static final int <B>DEFAULT_MAX_RETRIES</B></PRE>
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -274,7 +324,9 @@ public <B>TransactionRunner</B>(<A HREF="../../../com/sleepycat/db/Environment.h
The default maximum number of retries (<A HREF="../../../com/sleepycat/collections/TransactionRunner.html#DEFAULT_MAX_RETRIES"><CODE>DEFAULT_MAX_RETRIES</CODE></A>) and
a null (default) <A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><CODE>TransactionConfig</CODE></A> will be used.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>env</CODE> - is the environment for running transactions.</DL>
+</DL>
<HR>
<A NAME="TransactionRunner(com.sleepycat.db.Environment, int, com.sleepycat.db.TransactionConfig)"><!-- --></A><H3>
@@ -287,19 +339,21 @@ public <B>TransactionRunner</B>(<A HREF="../../../com/sleepycat/db/Environment.h
<DD>Creates a transaction runner for a given Berkeley DB environment and
with a given number of maximum retries.
<P>
+<DL>
<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.<DD><CODE>config</CODE> - the transaction configuration used for calling
<A HREF="../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>, or null to use the default
configuration. The configuration object is not cloned, and
any modifications to it will impact subsequent transactions.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -341,6 +395,9 @@ public boolean <B>getAllowNestedTransactions</B>()</PRE>
<code>run()</code> is called when a transaction is already active for
the current thread.
By default this property is false.
+
+ <p>Note that this method always returns false in the JE product, since
+ nested transactions are not supported by JE.</p>
<P>
<DD><DL>
</DL>
@@ -357,6 +414,9 @@ public void <B>setAllowNestedTransactions</B>(boolean&nbsp;allowNestedTxn)</PRE>
<code>run()</code> is called when a transaction is already active for
the current thread.
Calling this method does not impact transactions already running.
+
+ <p>Note that true may not be passed to this method in the JE product,
+ since nested transactions are not supported by JE.</p>
<P>
<DD><DL>
</DL>
@@ -409,20 +469,10 @@ public void <B>run</B>(<A HREF="../../../com/sleepycat/collections/TransactionWo
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">Exception</A></PRE>
<DL>
<DD>Calls the <A HREF="../../../com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
- environments, begins and ends a transaction. If the environment given
+ environments, may begin and end 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 DeadlockException 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>
+ method will still be called. See the class description for more
+ information.
<P>
<DD><DL>
@@ -445,7 +495,7 @@ public void <B>run</B>(<A HREF="../../../com/sleepycat/collections/TransactionWo
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -461,16 +511,16 @@ public void <B>run</B>(<A HREF="../../../com/sleepycat/collections/TransactionWo
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/TransactionRunner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionRunner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -483,6 +533,7 @@ public void <B>run</B>(<A HREF="../../../com/sleepycat/collections/TransactionWo
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -496,6 +547,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/TransactionWorker.html b/db/docs/java/com/sleepycat/collections/TransactionWorker.html
index 06f5567da..0e7a38f7f 100644
--- a/db/docs/java/com/sleepycat/collections/TransactionWorker.html
+++ b/db/docs/java/com/sleepycat/collections/TransactionWorker.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:50 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)
+TransactionWorker (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.TransactionWorker interface">
@@ -14,9 +14,11 @@ TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TransactionWorker (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/TransactionWorker.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionWorker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.collections</FONT>
Interface TransactionWorker</H2>
<HR>
<DL>
-<DT>public interface <B>TransactionWorker</B></DL>
+<DT><PRE>public interface <B>TransactionWorker</B></DL>
+</PRE>
<P>
The interface implemented to perform the work within a transaction.
@@ -99,22 +103,14 @@ The interface implemented to perform the work within a transaction.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,26 +124,20 @@ The interface implemented to perform the work within a transaction.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="doWork()"><!-- --></A><H3>
doWork</H3>
<PRE>
-public void <B>doWork</B>()
+void <B>doWork</B>()
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">Exception</A></PRE>
<DL>
<DD>Perform the work for a single transaction.
@@ -167,7 +157,7 @@ public void <B>doWork</B>()
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -183,16 +173,16 @@ public void <B>doWork</B>()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/TransactionWorker.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionWorker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -205,6 +195,7 @@ public void <B>doWork</B>()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -218,6 +209,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/TupleSerialFactory.html b/db/docs/java/com/sleepycat/collections/TupleSerialFactory.html
index 2dd843409..abfed20b3 100644
--- a/db/docs/java/com/sleepycat/collections/TupleSerialFactory.html
+++ b/db/docs/java/com/sleepycat/collections/TupleSerialFactory.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-TupleSerialFactory (Sleepycat Software, Inc. - Berkeley DB Java API)
+TupleSerialFactory (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections.TupleSerialFactory class">
@@ -14,9 +14,11 @@ TupleSerialFactory (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TupleSerialFactory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TupleSerialFactory (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/TupleSerialFactory.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialFactory.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.collections</FONT>
Class TupleSerialFactory</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.collections.TupleSerialFactory</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.collections.TupleSerialFactory</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>TupleSerialFactory</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>TupleSerialFactory</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Creates stored collections having tuple keys and serialized entity values.
@@ -105,19 +109,14 @@ Creates stored collections having tuple keys and serialized entity values.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html#TupleSerialFactory(com.sleepycat.bind.serial.ClassCatalog)">TupleSerialFactory</A></B>(<A HREF="../../../com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>&nbsp;catalog)</CODE>
@@ -132,8 +131,8 @@ Creates stored collections having tuple keys and serialized entity values.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -179,25 +178,22 @@ Creates stored collections having tuple keys and serialized entity values.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -215,8 +211,8 @@ public <B>TupleSerialFactory</B>(<A HREF="../../../com/sleepycat/bind/serial/Cla
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -298,7 +294,7 @@ public <A HREF="../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreat
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -314,16 +310,16 @@ public <A HREF="../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreat
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><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;
+ <A HREF="../../../index.html?com/sleepycat/collections/TupleSerialFactory.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialFactory.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -336,6 +332,7 @@ public <A HREF="../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreat
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -349,6 +346,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/CurrentTransaction.html b/db/docs/java/com/sleepycat/collections/class-use/CurrentTransaction.html
index 023f0091a..4129dc8f0 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/CurrentTransaction.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/CurrentTransaction.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.CurrentTransaction (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.CurrentTransaction (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.CurrentTransaction (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useCurrentTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CurrentTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/CurrentTransact
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html"
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html"
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useCurrentTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CurrentTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html"
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html"
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/MapEntryParameter.html b/db/docs/java/com/sleepycat/collections/class-use/MapEntryParameter.html
index 6fd550a03..00d153906 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/MapEntryParameter.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/MapEntryParameter.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.MapEntryParameter (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.MapEntryParameter (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.MapEntryParameter (Sleepycat Software, I
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.MapEntryParameter (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.MapEntryParameter (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useMapEntryParameter.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MapEntryParameter.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.MapEntryParameter
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.MapEntryParameter
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.MapEntryParameter
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useMapEntryParameter.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MapEntryParameter.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.MapEntryParameter
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.MapEntryParameter
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/PrimaryKeyAssigner.html b/db/docs/java/com/sleepycat/collections/class-use/PrimaryKeyAssigner.html
index 9468650e0..f179b833e 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/PrimaryKeyAssigner.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/PrimaryKeyAssigner.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.collections.PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.collections.PrimaryKeyAssigner (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.collections.PrimaryKeyAssigner (Sleepycat Softwa
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.collections.PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.collections.PrimaryKeyAssigner (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-usePrimaryKeyAssigner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PrimaryKeyAssigner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssig
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,59 +104,59 @@ Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html"
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
<A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
<A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
<A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -166,7 +169,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -182,7 +185,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -191,7 +194,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html"
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-usePrimaryKeyAssigner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PrimaryKeyAssigner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -204,6 +207,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html"
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -211,6 +215,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html"
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredCollection.html b/db/docs/java/com/sleepycat/collections/class-use/StoredCollection.html
index b3fb67e0f..b5e815947 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredCollection.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredCollection.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredCollection (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredCollection (Sleepycat Software, In
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredCollection (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredCollectio
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -169,7 +172,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -190,7 +193,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -206,7 +209,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -215,7 +218,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredCollection.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollection.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -228,6 +231,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -235,6 +239,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredCollection.html" ti
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredCollections.html b/db/docs/java/com/sleepycat/collections/class-use/StoredCollections.html
index d7c8bf783..e814386e1 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredCollections.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredCollections.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredCollections (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredCollections (Sleepycat Software, I
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredCollections (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredCollections.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollections.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.StoredCollections
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.StoredCollections
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.StoredCollections
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredCollections.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredCollections.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.StoredCollections
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.StoredCollections
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredContainer.html b/db/docs/java/com/sleepycat/collections/class-use/StoredContainer.html
index c9a0babca..0df5ec2ab 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredContainer.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredContainer.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredContainer (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredContainer (Sleepycat Software, Inc
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredContainer (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredContainer.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredContainer.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredContainer
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,7 +196,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -217,7 +220,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -233,7 +236,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -242,7 +245,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredContainer.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredContainer.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -255,6 +258,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -262,6 +266,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredContainer.html" tit
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredEntrySet.html b/db/docs/java/com/sleepycat/collections/class-use/StoredEntrySet.html
index 050196dad..c8e231ac7 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredEntrySet.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredEntrySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredEntrySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredEntrySet (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredEntrySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" titl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -122,7 +125,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -138,7 +141,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -147,7 +150,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" titl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -160,6 +163,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" titl
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -167,6 +171,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredEntrySet.html" titl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredIterator.html b/db/docs/java/com/sleepycat/collections/class-use/StoredIterator.html
index 9d2daa29a..4928eb738 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredIterator.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredIterator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredIterator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredIterator (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredIterator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredIterator.
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -109,8 +112,9 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../com/sleepycat/collections/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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Please use <A HREF="../../../../com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>StoredCollection.storedIterator()</CODE></A> or <A HREF="../../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><CODE>StoredCollection.storedIterator(boolean)</CODE></A> instead. Because the iterator returned must
+ be closed, the method name <code>iterator</code> is confusing since standard
+ Java iterators do not need to be closed.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,6 +127,23 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
&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/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollection.html#storedIterator()">storedIterator</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/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)">storedIterator</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>
</TABLE>
&nbsp;
<P>
@@ -134,7 +155,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -150,7 +171,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -159,7 +180,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredIterator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredIterator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -172,6 +193,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -179,6 +201,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredIterator.html" titl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredKeySet.html b/db/docs/java/com/sleepycat/collections/class-use/StoredKeySet.html
index 77d39d6bc..778b2f8dc 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredKeySet.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredKeySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredKeySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredKeySet (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredKeySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredKeySet.ht
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title=
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title=
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title=
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title=
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title=
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredKeySet.html" title=
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredList.html b/db/docs/java/com/sleepycat/collections/class-use/StoredList.html
index f701711cf..1370fbd7f 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredList.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredList.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredList (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredList (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredList (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredList.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.StoredList
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.StoredList
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.StoredList
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredList.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredList.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.StoredList
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.StoredList
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredMap.html b/db/docs/java/com/sleepycat/collections/class-use/StoredMap.html
index 88363ac13..975055b82 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredMap.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredMap.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredMap (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredMap (Sleepycat Software, Inc. - Be
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredMap (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredMap.html"
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -117,7 +120,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -141,7 +144,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -157,7 +160,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -166,7 +169,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -179,6 +182,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -186,6 +190,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredMap.html" title="cl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedEntrySet.html b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedEntrySet.html
index 4884413c1..3670ff23f 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedEntrySet.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedEntrySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredSortedEntrySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredSortedEntrySet (Sleepycat Software
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedEntrySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.StoredSortedEntrySet
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.StoredSortedEntrySet
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.StoredSortedEntrySet
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedEntrySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedEntrySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.StoredSortedEntrySet
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.StoredSortedEntrySet
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedKeySet.html b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedKeySet.html
index 0bba1ac0f..1c61eea11 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedKeySet.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedKeySet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredSortedKeySet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredSortedKeySet (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedKeySet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.StoredSortedKeySet
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.StoredSortedKeySet
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.StoredSortedKeySet
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedKeySet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedKeySet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.StoredSortedKeySet
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.StoredSortedKeySet
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedMap.html b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedMap.html
index c701cfe0b..01189e5eb 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedMap.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedMap.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredSortedMap (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredSortedMap (Sleepycat Software, Inc
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedMap (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredSortedMap
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" tit
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,7 +128,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -141,7 +144,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" tit
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedMap.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedMap.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -163,6 +166,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" tit
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -170,6 +174,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html" tit
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedValueSet.html b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedValueSet.html
index 73170ccdd..cb7eee335 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredSortedValueSet.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredSortedValueSet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredSortedValueSet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredSortedValueSet (Sleepycat Software
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredSortedValueSet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.StoredSortedValueSet
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.StoredSortedValueSet
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.StoredSortedValueSet
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredSortedValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredSortedValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.StoredSortedValueSet
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.StoredSortedValueSet
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/StoredValueSet.html b/db/docs/java/com/sleepycat/collections/class-use/StoredValueSet.html
index 563964488..5f0cbeb45 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/StoredValueSet.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/StoredValueSet.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.StoredValueSet (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.StoredValueSet (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.StoredValueSet (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/StoredValueSet.
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" titl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" titl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useStoredValueSet.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StoredValueSet.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" titl
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/StoredValueSet.html" titl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/TransactionRunner.html b/db/docs/java/com/sleepycat/collections/class-use/TransactionRunner.html
index 7526afee5..7aa64f61c 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/TransactionRunner.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/TransactionRunner.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.TransactionRunner (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.TransactionRunner (Sleepycat Software, I
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.TransactionRunner (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useTransactionRunner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionRunner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.TransactionRunner
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.TransactionRunner
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.TransactionRunner
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useTransactionRunner.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionRunner.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.TransactionRunner
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.TransactionRunner
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/TransactionWorker.html b/db/docs/java/com/sleepycat/collections/class-use/TransactionWorker.html
index 678ef0ffd..70b71c27a 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/TransactionWorker.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/TransactionWorker.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.collections.TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.collections.TransactionWorker (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.collections.TransactionWorker (Sleepycat Softwar
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.collections.TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.collections.TransactionWorker (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useTransactionWorker.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionWorker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/collections/TransactionWork
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -110,7 +113,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>doWork()</CODE></A> method and, for transactional
- environments, begins and ends a transaction.</TD>
+ environments, may begin and end a transaction.</TD>
</TR>
</TABLE>
&nbsp;
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useTransactionWorker.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionWorker.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" t
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/class-use/TupleSerialFactory.html b/db/docs/java/com/sleepycat/collections/class-use/TupleSerialFactory.html
index 361ba866f..c77ff6fba 100644
--- a/db/docs/java/com/sleepycat/collections/class-use/TupleSerialFactory.html
+++ b/db/docs/java/com/sleepycat/collections/class-use/TupleSerialFactory.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.collections.TupleSerialFactory (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.collections.TupleSerialFactory (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.collections.TupleSerialFactory (Sleepycat Software,
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.collections.TupleSerialFactory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.collections.TupleSerialFactory (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useTupleSerialFactory.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialFactory.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.collections.TupleSerialFactory
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.collections.TupleSerialFactory
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.collections.TupleSerialFactory
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/collections//class-useTupleSerialFactory.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TupleSerialFactory.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.collections.TupleSerialFactory
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.collections.TupleSerialFactory
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/package-frame.html b/db/docs/java/com/sleepycat/collections/package-frame.html
index 20afc7f38..b8081439a 100644
--- a/db/docs/java/com/sleepycat/collections/package-frame.html
+++ b/db/docs/java/com/sleepycat/collections/package-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.collections (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections package">
diff --git a/db/docs/java/com/sleepycat/collections/package-summary.html b/db/docs/java/com/sleepycat/collections/package-summary.html
index ad820a00b..7bfb9266f 100644
--- a/db/docs/java/com/sleepycat/collections/package-summary.html
+++ b/db/docs/java/com/sleepycat/collections/package-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.collections (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.collections package">
@@ -14,9 +14,11 @@ com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.collections (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/bind/tuple/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;
+ <A HREF="../../../index.html?com/sleepycat/collections/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -85,8 +88,8 @@ Data access based on the standard Java collections API.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A></B></TD>
@@ -103,8 +106,8 @@ Data access based on the standard Java collections API.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A></B></TD>
@@ -122,8 +125,7 @@ Data access based on the standard Java collections API.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A></B></TD>
-<TD>This class consists exclusively of static methods that operate on or return
- stored collections.</TD>
+<TD>Static methods operating on collections and maps.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A></B></TD>
@@ -193,10 +195,13 @@ Package com.sleepycat.collections Description
<P>
Data access based on the standard Java collections API.
<p>
-Examples can be found in je/examples/com/sleepycat/examples/collections. Build and run directions are in the installation notes.
+Examples can be found in je/examples/collections. Build and run directions are
+in the installation notes.
<P>
<P>
+<DL>
+</DL>
<HR>
@@ -205,7 +210,7 @@ Examples can be found in je/examples/com/sleepycat/examples/collections. Build a
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -221,7 +226,7 @@ Examples can be found in je/examples/com/sleepycat/examples/collections. Build a
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -230,7 +235,7 @@ Examples can be found in je/examples/com/sleepycat/examples/collections. Build a
&nbsp;<A HREF="../../../com/sleepycat/bind/tuple/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;
+ <A HREF="../../../index.html?com/sleepycat/collections/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -243,6 +248,7 @@ Examples can be found in je/examples/com/sleepycat/examples/collections. Build a
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -250,6 +256,6 @@ Examples can be found in je/examples/com/sleepycat/examples/collections. Build a
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/package-tree.html b/db/docs/java/com/sleepycat/collections/package-tree.html
index 96fb70b1f..ce11b7b11 100644
--- a/db/docs/java/com/sleepycat/collections/package-tree.html
+++ b/db/docs/java/com/sleepycat/collections/package-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.collections Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.collections Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ com.sleepycat.collections Class Hierarchy (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.collections Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.collections Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/bind/tuple/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;
+ <A HREF="../../../index.html?com/sleepycat/collections/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,39 +87,39 @@ Hierarchy For Package com.sleepycat.collections
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" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>CurrentTransaction</B></A><LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>MapEntryParameter</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A>)
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>StoredCollections</B></A><LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>StoredContainer</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>CurrentTransaction</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>MapEntryParameter</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>StoredCollections</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>StoredContainer</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>StoredCollection</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>StoredCollection</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>StoredEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>StoredEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>StoredSortedEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>StoredSortedEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>StoredKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>StoredKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>StoredSortedKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>StoredSortedKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>StoredList</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>)
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>StoredValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>StoredList</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>StoredValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>StoredSortedValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>StoredSortedValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>StoredMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>StoredMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>StoredSortedMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>StoredSortedMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>)
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>StoredIterator</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A>)
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>TransactionRunner</B></A><LI TYPE="circle">class com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>TupleSerialFactory</B></A></UL>
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>StoredIterator</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>TransactionRunner</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>TupleSerialFactory</B></A></UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PrimaryKeyAssigner</B></A><LI TYPE="circle">interface com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>TransactionWorker</B></A></UL>
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PrimaryKeyAssigner</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>TransactionWorker</B></A></UL>
<HR>
@@ -125,7 +128,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -141,7 +144,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -150,7 +153,7 @@ Interface Hierarchy
&nbsp;<A HREF="../../../com/sleepycat/bind/tuple/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;
+ <A HREF="../../../index.html?com/sleepycat/collections/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -163,6 +166,7 @@ Interface Hierarchy
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -170,6 +174,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/collections/package-use.html b/db/docs/java/com/sleepycat/collections/package-use.html
index 9e3fb7a42..b5dc55e7e 100644
--- a/db/docs/java/com/sleepycat/collections/package-use.html
+++ b/db/docs/java/com/sleepycat/collections/package-use.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Package com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Package com.sleepycat.collections (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Package com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Package com.sleepycat.collections (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Package com.sleepycat.collections (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/collections/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../com/sleepycat/collections/package-summary.ht
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> used by <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> used by <A HREF="../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/collections/class-use/CurrentTransaction.html#com.sleepycat.collections"><B>CurrentTransaction</B></A></B>
@@ -175,7 +178,7 @@ Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -191,7 +194,7 @@ Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -200,7 +203,7 @@ Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/collections/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -213,6 +216,7 @@ Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -220,6 +224,6 @@ Classes in <A HREF="../../../com/sleepycat/collections/package-summary.html">com
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/BtreePrefixCalculator.html b/db/docs/java/com/sleepycat/db/BtreePrefixCalculator.html
index 5c41a9050..db14edf5f 100644
--- a/db/docs/java/com/sleepycat/db/BtreePrefixCalculator.html
+++ b/db/docs/java/com/sleepycat/db/BtreePrefixCalculator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:44 EDT 2006 -->
<TITLE>
-BtreePrefixCalculator (Sleepycat Software, Inc. - Berkeley DB Java API)
+BtreePrefixCalculator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.BtreePrefixCalculator interface">
@@ -14,9 +14,11 @@ BtreePrefixCalculator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="BtreePrefixCalculator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="BtreePrefixCalculator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/BtreePrefixCalculator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreePrefixCalculator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface BtreePrefixCalculator</H2>
<HR>
<DL>
-<DT>public interface <B>BtreePrefixCalculator</B></DL>
+<DT><PRE>public interface <B>BtreePrefixCalculator</B></DL>
+</PRE>
<P>
An interface specifying how Btree prefixes should be calculated.
@@ -97,22 +101,14 @@ An interface specifying how Btree prefixes should be calculated.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,28 +124,22 @@ An interface specifying how Btree prefixes should be calculated.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="prefix(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
prefix</H3>
<PRE>
-public int <B>prefix</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt1,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt2)</PRE>
+int <B>prefix</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt2)</PRE>
<DL>
<DD>The application-specific Btree prefix callback.
<p>
@@ -167,7 +157,7 @@ public int <B>prefix</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -183,16 +173,16 @@ public int <B>prefix</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/BtreePrefixCalculator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreePrefixCalculator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -205,6 +195,7 @@ public int <B>prefix</B>(<A HREF="../../../com/sleepycat/db/Database.html" title
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -218,6 +209,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/BtreeStats.html b/db/docs/java/com/sleepycat/db/BtreeStats.html
index 71bfe831d..13b1e5755 100644
--- a/db/docs/java/com/sleepycat/db/BtreeStats.html
+++ b/db/docs/java/com/sleepycat/db/BtreeStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:44 EDT 2006 -->
<TITLE>
-BtreeStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+BtreeStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.BtreeStats class">
@@ -14,9 +14,11 @@ BtreeStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="BtreeStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="BtreeStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/BtreeStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreeStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,12 +90,13 @@ com.sleepycat.db</FONT>
Class BtreeStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseStats</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.BtreeStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseStats</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.BtreeStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>BtreeStats</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></DL>
+<DT><PRE>public class <B>BtreeStats</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></DL>
+</PRE>
<P>
The BtreeStats object is used to return Btree
@@ -103,22 +107,14 @@ or Recno database statistics.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -203,14 +199,6 @@ or Recno database statistics.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/db/BtreeStats.html#getMaxKey()">getMaxKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum 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/BtreeStats.html#getMetaFlags()">getMetaFlags</A></B>()</CODE>
<BR>
@@ -301,31 +289,42 @@ or Recno database statistics.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>For convenience, the BtreeStats class has a toString method
+ that lists all the data fields.
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getMagic()"><!-- --></A><H3>
getMagic</H3>
<PRE>
@@ -435,19 +434,6 @@ public int <B>getPageSize</B>()</PRE>
</DL>
<HR>
-<A NAME="getMaxKey()"><!-- --></A><H3>
-getMaxKey</H3>
-<PRE>
-public int <B>getMaxKey</B>()</PRE>
-<DL>
-<DD>The maximum keys per page.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
<A NAME="getMinKey()"><!-- --></A><H3>
getMinKey</H3>
<PRE>
@@ -661,20 +647,6 @@ was not configured by the <A HREF="../../../com/sleepycat/db/StatsConfig.html#se
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>For convenience, the BtreeStats class has a toString method
- that lists all the data fields.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -684,7 +656,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -700,16 +672,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/BtreeStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreeStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -722,6 +694,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -735,6 +708,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CacheFile.html b/db/docs/java/com/sleepycat/db/CacheFile.html
index 7a64412e6..82351dd52 100644
--- a/db/docs/java/com/sleepycat/db/CacheFile.html
+++ b/db/docs/java/com/sleepycat/db/CacheFile.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-CacheFile (Sleepycat Software, Inc. - Berkeley DB Java API)
+CacheFile (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.CacheFile class">
@@ -14,9 +14,11 @@ CacheFile (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CacheFile (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CacheFile (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheFile.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFile.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class CacheFile</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.CacheFile</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CacheFile</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>CacheFile</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>CacheFile</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
This class allows applications to modify settings for
@@ -102,22 +106,14 @@ a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepyca
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -134,7 +130,7 @@ a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepyca
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheFile.html#getNoFile()">getNoFile</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the opening of backing temporary files for in-memory
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the opening of backing temporary files for in-memory
databases has been disallowed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -151,7 +147,7 @@ a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepyca
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheFile.html#getUnlink()">getUnlink</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the file will be removed when the last reference to it is
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the file will be removed when the last reference to it is
closed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -193,28 +189,22 @@ cache priority for pages from the specified file.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -322,7 +312,7 @@ getNoFile</H3>
public boolean <B>getNoFile</B>()
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
-<DD>Return if the opening of backing temporary files for in-memory
+<DD>Return true if the opening of backing temporary files for in-memory
databases has been disallowed.
<p>
This method may be called at any time during the life of the application.
@@ -330,7 +320,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the opening of backing temporary files for in-memory
+<DT><B>Returns:</B><DD>True if the opening of backing temporary files for in-memory
databases has been disallowed.
<p>
<p>
@@ -372,7 +362,7 @@ getUnlink</H3>
public boolean <B>getUnlink</B>()
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
-<DD>Return if the file will be removed when the last reference to it is
+<DD>Return true if the file will be removed when the last reference to it is
closed.
<p>
This method may be called at any time during the life of the application.
@@ -380,7 +370,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the file will be removed when the last reference to it is
+<DT><B>Returns:</B><DD>True if the file will be removed when the last reference to it is
closed.
<p>
<p>
@@ -419,7 +409,7 @@ remove the file when the last reference to it is closed.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -435,7 +425,7 @@ remove the file when the last reference to it is closed.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -444,7 +434,7 @@ remove the file when the last reference to it is closed.
&nbsp;<A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheFile.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFile.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -457,6 +447,7 @@ remove the file when the last reference to it is closed.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -470,6 +461,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CacheFilePriority.html b/db/docs/java/com/sleepycat/db/CacheFilePriority.html
index 906426ce8..fa6548062 100644
--- a/db/docs/java/com/sleepycat/db/CacheFilePriority.html
+++ b/db/docs/java/com/sleepycat/db/CacheFilePriority.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-CacheFilePriority (Sleepycat Software, Inc. - Berkeley DB Java API)
+CacheFilePriority (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.CacheFilePriority class">
@@ -14,9 +14,11 @@ CacheFilePriority (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CacheFilePriority (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CacheFilePriority (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheFilePriority.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFilePriority.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class CacheFilePriority</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.CacheFilePriority</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CacheFilePriority</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>CacheFilePriority</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>CacheFilePriority</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Priorities that can be assigned to files in the cache.
@@ -101,16 +105,13 @@ Priorities that can be assigned to files in the cache.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -154,18 +155,30 @@ Priorities that can be assigned to files in the cache.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheFilePriority.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -176,8 +189,8 @@ Priorities that can be assigned to files in the cache.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -240,11 +253,30 @@ public static final <A HREF="../../../com/sleepycat/db/CacheFilePriority.html" t
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -254,7 +286,7 @@ public static final <A HREF="../../../com/sleepycat/db/CacheFilePriority.html" t
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -270,7 +302,7 @@ public static final <A HREF="../../../com/sleepycat/db/CacheFilePriority.html" t
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -279,7 +311,7 @@ public static final <A HREF="../../../com/sleepycat/db/CacheFilePriority.html" t
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheFilePriority.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFilePriority.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -292,19 +324,20 @@ public static final <A HREF="../../../com/sleepycat/db/CacheFilePriority.html" t
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CacheFileStats.html b/db/docs/java/com/sleepycat/db/CacheFileStats.html
index d0fe4f75f..3e4834620 100644
--- a/db/docs/java/com/sleepycat/db/CacheFileStats.html
+++ b/db/docs/java/com/sleepycat/db/CacheFileStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-CacheFileStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+CacheFileStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.CacheFileStats class">
@@ -14,9 +14,11 @@ CacheFileStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CacheFileStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CacheFileStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheFileStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFileStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class CacheFileStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.CacheFileStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CacheFileStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>CacheFileStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>CacheFileStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Statistics for a file in the cache.
@@ -101,22 +105,14 @@ Statistics for a file in the cache.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -195,28 +191,22 @@ Statistics for a file in the cache.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -333,6 +323,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
that lists all the data fields.
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -345,7 +338,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -361,7 +354,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -370,7 +363,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheFileStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFileStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -383,6 +376,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -396,6 +390,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CacheStats.html b/db/docs/java/com/sleepycat/db/CacheStats.html
index 4eaf89682..9a984c55b 100644
--- a/db/docs/java/com/sleepycat/db/CacheStats.html
+++ b/db/docs/java/com/sleepycat/db/CacheStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-CacheStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+CacheStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.CacheStats class">
@@ -14,9 +14,11 @@ CacheStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CacheStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CacheStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class CacheStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.CacheStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CacheStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>CacheStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>CacheStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Cache statistics for a database environment.
@@ -101,22 +105,14 @@ Cache statistics for a database environment.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -252,6 +248,14 @@ Cache statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheStats.html#getIoWait()">getIoWait</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of operations blocked waiting for I/O to complete.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheStats.html#getMap()">getMap</A></B>()</CODE>
<BR>
@@ -296,6 +300,30 @@ Cache statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheStats.html#getMultiversionFreed()">getMultiversionFreed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of frozen buffers freed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheStats.html#getMultiversionFrozen()">getMultiversionFrozen</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of buffers frozen.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheStats.html#getMultiversionThawed()">getMultiversionThawed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of buffers thawed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CacheStats.html#getNumCache()">getNumCache</A></B>()</CODE>
<BR>
@@ -412,28 +440,22 @@ Cache statistics for a database environment.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -823,6 +845,45 @@ public int <B>getRegionWait</B>()</PRE>
</DL>
<HR>
+<A NAME="getMultiversionFrozen()"><!-- --></A><H3>
+getMultiversionFrozen</H3>
+<PRE>
+public int <B>getMultiversionFrozen</B>()</PRE>
+<DL>
+<DD>Number of buffers frozen.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMultiversionThawed()"><!-- --></A><H3>
+getMultiversionThawed</H3>
+<PRE>
+public int <B>getMultiversionThawed</B>()</PRE>
+<DL>
+<DD>Number of buffers thawed.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMultiversionFreed()"><!-- --></A><H3>
+getMultiversionFreed</H3>
+<PRE>
+public int <B>getMultiversionFreed</B>()</PRE>
+<DL>
+<DD>Number of frozen buffers freed.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getAlloc()"><!-- --></A><H3>
getAlloc</H3>
<PRE>
@@ -888,6 +949,19 @@ public int <B>getAllocMaxPages</B>()</PRE>
</DL>
<HR>
+<A NAME="getIoWait()"><!-- --></A><H3>
+getIoWait</H3>
+<PRE>
+public int <B>getIoWait</B>()</PRE>
+<DL>
+<DD>Number of operations blocked waiting for I/O to complete.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="toString()"><!-- --></A><H3>
toString</H3>
<PRE>
@@ -897,6 +971,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
lists all the data fields.
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -909,7 +986,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -925,7 +1002,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -934,7 +1011,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
&nbsp;<A HREF="../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CacheStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -947,6 +1024,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -960,6 +1038,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CheckpointConfig.html b/db/docs/java/com/sleepycat/db/CheckpointConfig.html
index 46cd493d9..6aec7b8a3 100644
--- a/db/docs/java/com/sleepycat/db/CheckpointConfig.html
+++ b/db/docs/java/com/sleepycat/db/CheckpointConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-CheckpointConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+CheckpointConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.CheckpointConfig class">
@@ -14,9 +14,11 @@ CheckpointConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CheckpointConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CheckpointConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CheckpointConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CheckpointConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class CheckpointConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.CheckpointConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CheckpointConfig</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>CheckpointConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>CheckpointConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Specifies the attributes of an application invoked checkpoint operation.
@@ -101,16 +105,13 @@ Specifies the attributes of an application invoked checkpoint operation.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,8 +129,8 @@ Specifies the attributes of an application invoked checkpoint operation.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CheckpointConfig.html#CheckpointConfig()">CheckpointConfig</A></B>()</CODE>
@@ -145,8 +146,8 @@ Specifies the attributes of an application invoked checkpoint operation.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -191,7 +192,7 @@ Specifies the attributes of an application invoked checkpoint operation.
<TR BGCOLOR="white" CLASS="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/CheckpointConfig.html#setMinutes(int)">setMinutes</A></B>(int&nbsp;minutes)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CheckpointConfig.html#setMinutes(int)">setMinutes</A></B>(int&nbsp;min)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the checkpoint time threshold, in minutes.</TD>
@@ -200,10 +201,10 @@ Specifies the attributes of an application invoked checkpoint operation.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -214,8 +215,8 @@ Specifies the attributes of an application invoked checkpoint operation.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -236,8 +237,8 @@ public static final <A HREF="../../../com/sleepycat/db/CheckpointConfig.html" ti
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -256,8 +257,8 @@ public <B>CheckpointConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -272,8 +273,8 @@ public void <B>setKBytes</B>(int&nbsp;kbytes)</PRE>
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>kbytes</CODE> - A checkpoint will be performed if more than kbytes of log data have
- been written since the last checkpoint.</DL>
+<DT><B>Parameters:</B><DD><CODE>kbytes</CODE> - If the kbytes parameter is non-zero, a checkpoint will be performed if more
+ than kbytes of log data have been written since the last checkpoint.</DL>
</DD>
</DL>
<HR>
@@ -298,7 +299,7 @@ This method may be called at any time during the life of the application.
<A NAME="setMinutes(int)"><!-- --></A><H3>
setMinutes</H3>
<PRE>
-public void <B>setMinutes</B>(int&nbsp;minutes)</PRE>
+public void <B>setMinutes</B>(int&nbsp;min)</PRE>
<DL>
<DD>Configure the checkpoint time threshold, in minutes.
<p>
@@ -306,8 +307,8 @@ public void <B>setMinutes</B>(int&nbsp;minutes)</PRE>
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>minutes</CODE> - A checkpoint is performed if more than min minutes have passed since
- the last checkpoint.</DL>
+<DT><B>Parameters:</B><DD><CODE>min</CODE> - If the min parameter is non-zero, a checkpoint is performed if more than
+ min minutes have passed since the last checkpoint.</DL>
</DD>
</DL>
<HR>
@@ -366,7 +367,7 @@ public boolean <B>getForce</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -382,16 +383,16 @@ public boolean <B>getForce</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CheckpointConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CheckpointConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -404,6 +405,7 @@ public boolean <B>getForce</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -417,6 +419,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CompactConfig.html b/db/docs/java/com/sleepycat/db/CompactConfig.html
new file mode 100644
index 000000000..4da949244
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/CompactConfig.html
@@ -0,0 +1,548 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
+<TITLE>
+CompactConfig (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.CompactConfig class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="CompactConfig (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/CompactConfig.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/CompactConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class CompactConfig</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CompactConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>CompactConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
+
+<P>
+Configuration for <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operations.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactConfig.html#DEFAULT">DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to methods that create a
+ cursor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactConfig.html#CompactConfig()">CompactConfig</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a default configuration object for compact operations.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactConfig.html#getFillPercent()">getFillPercent</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the the desired fill percentage.</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/CompactConfig.html#getFreeListOnly()">getFreeListOnly</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the whether to skip page compaction.</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/CompactConfig.html#getFreeSpace()">getFreeSpace</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the whether to return pages to the filesystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactConfig.html#getMaxPages()">getMaxPages</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For internal use only.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactConfig.html#getTimeout()">getTimeout</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the the lock timeout set for implicit transactions, in microseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/CompactConfig.html#setFillPercent(int)">setFillPercent</A></B>(int&nbsp;fillpercent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the desired fill percentage.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/CompactConfig.html#setFreeListOnly(boolean)">setFreeListOnly</A></B>(boolean&nbsp;freeListOnly)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure whether to skip page compaction, only returning pages
+ to the filesystem that are already free and at the end of the file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/CompactConfig.html#setFreeSpace(boolean)">setFreeSpace</A></B>(boolean&nbsp;freeSpace)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return pages to the filesystem if possible.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/CompactConfig.html#setMaxPages(int)">setMaxPages</A></B>(int&nbsp;maxPages)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For internal use only.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/CompactConfig.html#setTimeout(int)">setTimeout</A></B>(int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock timeout for implicit transactions.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="DEFAULT"><!-- --></A><H3>
+DEFAULT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A> <B>DEFAULT</B></PRE>
+<DL>
+<DD>Default configuration used if null is passed to methods that create a
+ cursor.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="CompactConfig()"><!-- --></A><H3>
+CompactConfig</H3>
+<PRE>
+public <B>CompactConfig</B>()</PRE>
+<DL>
+<DD>Construct a default configuration object for compact operations.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="setFillPercent(int)"><!-- --></A><H3>
+setFillPercent</H3>
+<PRE>
+public void <B>setFillPercent</B>(int&nbsp;fillpercent)</PRE>
+<DL>
+<DD>Set the desired fill percentage.
+ If non-zero, the goal for filling pages, specified as a percentage
+ between 1 and 100. Any page in a Btree or Recno databases not at or
+ above this percentage full will be considered for compaction. The
+ default behavior is to consider every page for compaction, regardless
+ of its page fill percentage.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fillpercent</CODE> - The desired fill percentage.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFillPercent()"><!-- --></A><H3>
+getFillPercent</H3>
+<PRE>
+public int <B>getFillPercent</B>()</PRE>
+<DL>
+<DD>Return the the desired fill percentage.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The the desired fill percentage.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFreeListOnly(boolean)"><!-- --></A><H3>
+setFreeListOnly</H3>
+<PRE>
+public void <B>setFreeListOnly</B>(boolean&nbsp;freeListOnly)</PRE>
+<DL>
+<DD>Configure whether to skip page compaction, only returning pages
+ to the filesystem that are already free and at the end of the file.
+ This flag must be set if the database is a Hash access method database.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>freeListOnly</CODE> - Whether to skip page compaction</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFreeListOnly()"><!-- --></A><H3>
+getFreeListOnly</H3>
+<PRE>
+public boolean <B>getFreeListOnly</B>()</PRE>
+<DL>
+<DD>Return true if the whether to skip page compaction.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the whether to skip page compaction.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFreeSpace(boolean)"><!-- --></A><H3>
+setFreeSpace</H3>
+<PRE>
+public void <B>setFreeSpace</B>(boolean&nbsp;freeSpace)</PRE>
+<DL>
+<DD>Return pages to the filesystem if possible. If this flag is not
+ specified, pages emptied as a result of compaction will be placed on the
+ free list for re-use, but not returned to the filesystem.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>freeSpace</CODE> - Whether to return pages to the filesystem</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFreeSpace()"><!-- --></A><H3>
+getFreeSpace</H3>
+<PRE>
+public boolean <B>getFreeSpace</B>()</PRE>
+<DL>
+<DD>Return true if the whether to return pages to the filesystem.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the whether to return pages to the filesystem.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMaxPages(int)"><!-- --></A><H3>
+setMaxPages</H3>
+<PRE>
+public void <B>setMaxPages</B>(int&nbsp;maxPages)</PRE>
+<DL>
+<DD>For internal use only.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMaxPages()"><!-- --></A><H3>
+getMaxPages</H3>
+<PRE>
+public int <B>getMaxPages</B>()</PRE>
+<DL>
+<DD>For internal use only.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTimeout(int)"><!-- --></A><H3>
+setTimeout</H3>
+<PRE>
+public void <B>setTimeout</B>(int&nbsp;timeout)</PRE>
+<DL>
+<DD>Set the lock timeout for implicit transactions.
+ If non-zero, and no transaction parameter was specified to
+ <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A>, the lock timeout set for implicit
+ transactions, in microseconds.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>timeout</CODE> - the lock timeout set for implicit transactions, in microseconds.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTimeout()"><!-- --></A><H3>
+getTimeout</H3>
+<PRE>
+public int <B>getTimeout</B>()</PRE>
+<DL>
+<DD>Return the the lock timeout set for implicit transactions, in microseconds.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The the lock timeout set for implicit transactions, in microseconds.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/CompactConfig.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/CompactConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CompactStats.html b/db/docs/java/com/sleepycat/db/CompactStats.html
new file mode 100644
index 000000000..09605984a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/CompactStats.html
@@ -0,0 +1,370 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
+<TITLE>
+CompactStats (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.CompactStats class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="CompactStats (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/CompactStats.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/CompactStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class CompactStats</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CompactStats</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>CompactStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Statistics returned by a <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operation.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactStats.html#getDeadlock()">getDeadlock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the if no transaction parameter was specified to
+ <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A>, the number of deadlocks
+ which occurred..</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactStats.html#getLevels()">getLevels</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the the number of levels removed from the
+ Btree or Recno database during the compaction phase.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactStats.html#getPagesExamine()">getPagesExamine</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the the number of database pages reviewed
+ during the compaction phase.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactStats.html#getPagesFree()">getPagesFree</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the the number of database pages free during
+ the compaction phase.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactStats.html#getPagesTruncated()">getPagesTruncated</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the the number of database pages returned
+ to the filesystem.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CompactStats.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For convenience, the CompactStats class has a toString method that lists
+ all the data fields.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getPagesFree()"><!-- --></A><H3>
+getPagesFree</H3>
+<PRE>
+public int <B>getPagesFree</B>()</PRE>
+<DL>
+<DD>Return the the number of database pages free during
+ the compaction phase.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The the number of database pages free during
+ the compaction phase.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPagesExamine()"><!-- --></A><H3>
+getPagesExamine</H3>
+<PRE>
+public int <B>getPagesExamine</B>()</PRE>
+<DL>
+<DD>Return the the number of database pages reviewed
+ during the compaction phase.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The the number of database pages reviewed
+ during the compaction phase.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLevels()"><!-- --></A><H3>
+getLevels</H3>
+<PRE>
+public int <B>getLevels</B>()</PRE>
+<DL>
+<DD>Return the the number of levels removed from the
+ Btree or Recno database during the compaction phase.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The the number of levels removed from the
+ Btree or Recno database during the compaction phase.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDeadlock()"><!-- --></A><H3>
+getDeadlock</H3>
+<PRE>
+public int <B>getDeadlock</B>()</PRE>
+<DL>
+<DD>Return the if no transaction parameter was specified to
+ <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A>, the number of deadlocks
+ which occurred..
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The if no transaction parameter was specified to
+ <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A>, the number of deadlocks
+ which occurred..</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPagesTruncated()"><!-- --></A><H3>
+getPagesTruncated</H3>
+<PRE>
+public int <B>getPagesTruncated</B>()</PRE>
+<DL>
+<DD>Return the the number of database pages returned
+ to the filesystem.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The the number of database pages returned
+ to the filesystem.</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>For convenience, the CompactStats class has a toString method that lists
+ all the data fields.
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/CompactStats.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/CompactStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Cursor.html b/db/docs/java/com/sleepycat/db/Cursor.html
index e55ce7e70..d266e9d46 100644
--- a/db/docs/java/com/sleepycat/db/Cursor.html
+++ b/db/docs/java/com/sleepycat/db/Cursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-Cursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+Cursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Cursor class">
@@ -14,9 +14,11 @@ Cursor (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Cursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Cursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Cursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Cursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class Cursor</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.Cursor</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.Cursor</B>
</PRE>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>Cursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>Cursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
A database cursor. Cursors are used for operating on collections of
@@ -135,22 +139,14 @@ will be ignored during a sequential scan.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -439,28 +435,22 @@ return the associated key/data pair.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -733,7 +723,8 @@ the newly inserted item. If the putCurrent method fails for any reason, the
state of the cursor will be unchanged.
<p>
Overwrite the data of the key/data pair to which the cursor refers with
-the specified data item. This method will fail and throw an exception
+the specified data item. This method will return
+<A HREF="../../../com/sleepycat/db/OperationStatus.html#NOTFOUND"><CODE>OperationStatus.NOTFOUND</CODE></A>
if the cursor currently refers to an already-deleted key/data pair.
<p>
<P>
@@ -1555,7 +1546,7 @@ deadlock.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1571,16 +1562,16 @@ deadlock.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Cursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Cursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1593,6 +1584,7 @@ deadlock.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -1606,6 +1598,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/CursorConfig.html b/db/docs/java/com/sleepycat/db/CursorConfig.html
index ea1ce73db..05b98e007 100644
--- a/db/docs/java/com/sleepycat/db/CursorConfig.html
+++ b/db/docs/java/com/sleepycat/db/CursorConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-CursorConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+CursorConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.CursorConfig class">
@@ -14,9 +14,11 @@ CursorConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="CursorConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="CursorConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CursorConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CursorConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class CursorConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.CursorConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.CursorConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>CursorConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>CursorConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
Specify the attributes of database cursor. An instance created with the
@@ -105,16 +109,13 @@ default constructor is initialized with the system's default settings.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -131,7 +132,8 @@ default constructor is initialized with the system's default settings.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#DEGREE_2">DEGREE_2</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure a cursor for degree 2 isolation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#READ_COMMITTED"><CODE>READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,6 +141,23 @@ default constructor is initialized with the system's default settings.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#DIRTY_READ">DIRTY_READ</A></B></CODE>
<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED"><CODE>READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#READ_COMMITTED">READ_COMMITTED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure a cursor for read committed isolation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED">READ_UNCOMMITTED</A></B></CODE>
+
+<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure read operations performed by the
cursor to return modified but not yet committed data.</TD>
</TR>
@@ -158,8 +177,8 @@ default constructor is initialized with the system's default settings.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#CursorConfig()">CursorConfig</A></B>()</CODE>
@@ -175,8 +194,8 @@ default constructor is initialized with the system's default settings.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -184,7 +203,8 @@ default constructor is initialized with the system's default settings.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#getDegree2()">getDegree2</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the cursor is configured for degree 2 isolation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#getReadCommitted()"><CODE>getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -192,6 +212,23 @@ default constructor is initialized with the system's default settings.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#getDirtyRead()">getDirtyRead</A></B>()</CODE>
<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#getReadUncommitted()"><CODE>getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</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/CursorConfig.html#getReadCommitted()">getReadCommitted</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the cursor is configured for read committed isolation.</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/CursorConfig.html#getReadUncommitted()">getReadUncommitted</A></B>()</CODE>
+
+<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if read operations performed by the cursor are configured to
return modified but not yet committed data.</TD>
</TR>
@@ -210,7 +247,8 @@ default constructor is initialized with the system's default settings.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#setDegree2(boolean)">setDegree2</A></B>(boolean&nbsp;degree2)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the cursor for degree 2 isolation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><CODE>setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -218,6 +256,23 @@ default constructor is initialized with the system's default settings.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/CursorConfig.html#setDirtyRead(boolean)">setDirtyRead</A></B>(boolean&nbsp;dirtyRead)</CODE>
<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#setReadUncommitted(boolean)"><CODE>setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</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/CursorConfig.html#setReadCommitted(boolean)">setReadCommitted</A></B>(boolean&nbsp;readCommitted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the cursor for read committed isolation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/CursorConfig.html#setReadUncommitted(boolean)">setReadUncommitted</A></B>(boolean&nbsp;readUncommitted)</CODE>
+
+<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure read operations performed by the cursor to return modified
but not yet committed data.</TD>
</TR>
@@ -234,10 +289,10 @@ default constructor is initialized with the system's default settings.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -248,8 +303,8 @@ default constructor is initialized with the system's default settings.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -266,13 +321,44 @@ public static final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title=
</DL>
<HR>
+<A NAME="READ_UNCOMMITTED"><!-- --></A><H3>
+READ_UNCOMMITTED</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> <B>READ_UNCOMMITTED</B></PRE>
+<DL>
+<DD>A convenience instance to configure read operations performed by the
+ cursor to return modified but not yet committed data.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
<A NAME="DIRTY_READ"><!-- --></A><H3>
DIRTY_READ</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> <B>DIRTY_READ</B></PRE>
<DL>
-<DD>A convenience instance to configure read operations performed by the
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED"><CODE>READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I><DD>A convenience instance to configure read operations performed by the
cursor to return modified but not yet committed data.
+ <p>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="READ_COMMITTED"><!-- --></A><H3>
+READ_COMMITTED</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> <B>READ_COMMITTED</B></PRE>
+<DL>
+<DD>A convenience instance to configure a cursor for read committed isolation.
+ <p>
+ This ensures the stability of the current data item read by the
+ cursor but permits data read by this cursor to be modified or
+ deleted prior to the commit of the transaction.
<P>
<DL>
</DL>
@@ -284,11 +370,13 @@ DEGREE_2</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> <B>DEGREE_2</B></PRE>
<DL>
-<DD>A convenience instance to configure a cursor for degree 2 isolation.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#READ_COMMITTED"><CODE>READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I><DD>A convenience instance to configure a cursor for read committed isolation.
<p>
- This ensures the stability of the current data item read by this
+ This ensures the stability of the current data item read by the
cursor but permits data read by this cursor to be modified or
- deleted prior to the commit of the transaction for this cursor.
+ deleted prior to the commit of the transaction.
+ <p>
<P>
<DL>
</DL>
@@ -315,8 +403,8 @@ public static final <A HREF="../../../com/sleepycat/db/CursorConfig.html" title=
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -335,16 +423,58 @@ public <B>CursorConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
+<A NAME="setReadUncommitted(boolean)"><!-- --></A><H3>
+setReadUncommitted</H3>
+<PRE>
+public void <B>setReadUncommitted</B>(boolean&nbsp;readUncommitted)</PRE>
+<DL>
+<DD>Configure read operations performed by the cursor to return modified
+ but not yet committed data.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>readUncommitted</CODE> - If true, configure read operations performed by the cursor to return
+ modified but not yet committed data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReadUncommitted()"><!-- --></A><H3>
+getReadUncommitted</H3>
+<PRE>
+public boolean <B>getReadUncommitted</B>()</PRE>
+<DL>
+<DD>Return if read operations performed by the cursor are configured to
+ return modified but not yet committed data.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>If read operations performed by the cursor are configured to return
+ modified but not yet committed data.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setDirtyRead(boolean)"><!-- --></A><H3>
setDirtyRead</H3>
<PRE>
public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#setReadUncommitted(boolean)"><CODE>setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
<DD>Configure read operations performed by the cursor to return modified
but not yet committed data.
<p>
@@ -354,7 +484,8 @@ public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dirtyRead</CODE> - If true, configure read operations performed by the cursor to return
- modified but not yet committed data.</DL>
+ modified but not yet committed data.
+ <p></DL>
</DD>
</DL>
<HR>
@@ -364,6 +495,9 @@ getDirtyRead</H3>
<PRE>
public boolean <B>getDirtyRead</B>()</PRE>
<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#getReadUncommitted()"><CODE>getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
<DD>Return if read operations performed by the cursor are configured to
return modified but not yet committed data.
<p>
@@ -374,7 +508,47 @@ public boolean <B>getDirtyRead</B>()</PRE>
<DD><DL>
<DT><B>Returns:</B><DD>If read operations performed by the cursor are configured to return
- modified but not yet committed data.</DL>
+ modified but not yet committed data.
+ <p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReadCommitted(boolean)"><!-- --></A><H3>
+setReadCommitted</H3>
+<PRE>
+public void <B>setReadCommitted</B>(boolean&nbsp;readCommitted)</PRE>
+<DL>
+<DD>Configure the cursor for read committed isolation.
+ <p>
+ This ensures the stability of the current data item read by the
+ cursor but permits data read by this cursor to be modified or
+ deleted prior to the commit of the transaction.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>readCommitted</CODE> - If true, configure the cursor for read committed isolation.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReadCommitted()"><!-- --></A><H3>
+getReadCommitted</H3>
+<PRE>
+public boolean <B>getReadCommitted</B>()</PRE>
+<DL>
+<DD>Return if the cursor is configured for read committed isolation.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>If the cursor is configured for read committed isolation.</DL>
</DD>
</DL>
<HR>
@@ -384,18 +558,22 @@ setDegree2</H3>
<PRE>
public void <B>setDegree2</B>(boolean&nbsp;degree2)</PRE>
<DL>
-<DD>Configure the cursor for degree 2 isolation.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><CODE>setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Configure the cursor for read committed isolation.
<p>
- This ensures the stability of the current data item read by this
+ This ensures the stability of the current data item read by the
cursor but permits data read by this cursor to be modified or
- deleted prior to the commit of the transaction for this cursor.
+ deleted prior to the commit of the transaction.
<p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>degree2</CODE> - If true, configure the cursor for degree 2 isolation.</DL>
+<DT><B>Parameters:</B><DD><CODE>degree2</CODE> - If true, configure the cursor for read committed isolation.
+ <p></DL>
</DD>
</DL>
<HR>
@@ -405,7 +583,10 @@ getDegree2</H3>
<PRE>
public boolean <B>getDegree2</B>()</PRE>
<DL>
-<DD>Return if the cursor is configured for degree 2 isolation.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/CursorConfig.html#getReadCommitted()"><CODE>getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Return if the cursor is configured for read committed isolation.
<p>
<P>
<DD><DL>
@@ -413,7 +594,8 @@ public boolean <B>getDegree2</B>()</PRE>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the cursor is configured for degree 2 isolation.</DL>
+<DT><B>Returns:</B><DD>If the cursor is configured for read committed isolation.
+ <p></DL>
</DD>
</DL>
<HR>
@@ -464,7 +646,7 @@ public boolean <B>getWriteCursor</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -480,7 +662,7 @@ public boolean <B>getWriteCursor</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -489,7 +671,7 @@ public boolean <B>getWriteCursor</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/CursorConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CursorConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -502,6 +684,7 @@ public boolean <B>getWriteCursor</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -515,6 +698,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Database.html b/db/docs/java/com/sleepycat/db/Database.html
index bf51dbfea..4957a2c60 100644
--- a/db/docs/java/com/sleepycat/db/Database.html
+++ b/db/docs/java/com/sleepycat/db/Database.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-Database (Sleepycat Software, Inc. - Berkeley DB Java API)
+Database (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Database class">
@@ -14,9 +14,11 @@ Database (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Database (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Database (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Database.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Database.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class Database</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.Database</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.Database</B>
</PRE>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>Database</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>Database</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
A database handle.
@@ -123,19 +127,14 @@ To create a transactional database that supports duplicates:
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Database.html#Database(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">Database</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
@@ -152,8 +151,8 @@ To create a transactional database that supports duplicates:
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -186,6 +185,19 @@ handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A></B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
@@ -198,6 +210,14 @@ the head of the queue, and delete the record.</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/Database.html#count()">count</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count the key/data pairs in the database without adding to 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
@@ -432,11 +452,12 @@ Rename a 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/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
- <A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;config)</CODE>
+ <A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;verifyConfig,
+ <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;dbConfig)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if all of the databases in a file are uncorrupted.</TD>
@@ -445,25 +466,22 @@ Rename a database.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -504,6 +522,7 @@ doing so is safe. The environment variable <code>TMPDIR</code> may
be used as a directory in which to create temporary backing files.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>fileName</CODE> - The name of an underlying file that will be used to back the database.
On Windows platforms, this argument will be interpreted as a UTF-8
string, which is equivalent to ASCII for Latin characters.
@@ -513,18 +532,44 @@ to be specified, it is an error to attempt to open a second database in
a physical file that was not initially created using a databaseName
parameter. Further, the databaseName parameter is not supported by the
Queue format.
-<p><DD><CODE>config</CODE> - The database open attributes. If null, default attributes are used.</DL>
+<p><DD><CODE>config</CODE> - The database open attributes. If null, default attributes are used.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html" title="class or interface in java.io">FileNotFoundException</A></CODE></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
+<A NAME="count()"><!-- --></A><H3>
+count</H3>
+<PRE>
+public long <B>count</B>()
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Count the key/data pairs in the database without adding to the cache.
+ <p>
+ Return a count of the key/data pairs in the database is returned
+ without adding to the cache. The count may not be accurate in the face
+ of concurrent operations in the database.
+ <p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The count of key/data pairs in the database.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
delete</H3>
<PRE>
@@ -966,6 +1011,37 @@ updated copy.
</DL>
<HR>
+<A NAME="compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><!-- --></A><H3>
+compact</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A> <B>compact</B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>txn</CODE> - For a transactional database, an explicit transaction may be specified, or null
+may be specified to use auto-commit. For a non-transactional database, null
+must be specified.<DD><CODE>start</CODE> - If not <code>null</code>, the <code>start</code> parameter is the starting point for
+ compaction in a Btree or Recno database. Compaction will start at the
+ smallest key greater than or equal to the specified key. If <code>null</code>,
+ compaction will start at the beginning of the database.<DD><CODE>stop</CODE> - If not <code>null</code>, the <code>stop</code> parameter is the stopping point for
+ compaction in a Btree or Recno database. Compaction will stop at the
+ page with the smallest key greater than the specified key. If <code>null</code>,
+ compaction will stop at the end of the database.<DD><CODE>end</CODE> - If not <code>null</code>, the <code>end</code> parameter will be filled in with the key
+ marking the end of the compaction operation in a Btree or Recno
+ database.<DD><CODE>config</CODE> - The compaction operation attributes. If null, default attributes are used.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
openCursor</H3>
<PRE>
@@ -1040,7 +1116,7 @@ public void <B>removeSequence</B>(<A HREF="../../../com/sleepycat/db/Transaction
may be specified to use auto-commit. For a non-transactional database, null
must be specified.
<p><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A> of the sequence.
- <p><DD><CODE>sequenceConfig</CODE> - The sequence attributes. If null, default attributes are used.
+ <p><DD><CODE>sequenceConfig</CODE> - The sequence attributes. If null, default attributes are used.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
</DD>
@@ -1376,7 +1452,7 @@ environment variable DB_HOME may be used as the path of the database
environment home.
<p>
This method is affected by any database directory specified with
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
+<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
string in the database environment's DB_CONFIG file.
<p>
The <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handle may not be accessed
@@ -1428,7 +1504,7 @@ environment variable DB_HOME may be used as the path of the database
environment home.
<p>
This method is affected by any database directory specified with
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
+<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
string in the database environment's DB_CONFIG file.
<p>
The <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handle may not be accessed
@@ -1547,15 +1623,16 @@ public static void <B>upgrade</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api
</DL>
<HR>
-<A NAME="verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><!-- --></A><H3>
+<A NAME="verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><!-- --></A><H3>
verify</H3>
<PRE>
-public boolean <B>verify</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
- <A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;config)
- throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html" title="class or interface in java.io">FileNotFoundException</A></PRE>
+public static boolean <B>verify</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
+ <A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;verifyConfig,
+ <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;dbConfig)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html" title="class or interface in java.io">FileNotFoundException</A></PRE>
<DL>
<DD>Return if all of the databases in a file are uncorrupted.
<p>
@@ -1576,7 +1653,7 @@ environment variable DB_HOME may be used as the path of the database
environment home.
<p>
This method is affected by any database directory specified with
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
+<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
string in the database environment's DB_CONFIG file.
<p>
The <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handle may not be accessed
@@ -1593,7 +1670,8 @@ or failure.
<p><DD><CODE>dumpStream</CODE> - An optional file stream to which the databases' key/data pairs are
written. This parameter should be set to null except when the
operation has been been configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setSalvage(boolean)"><CODE>VerifyConfig.setSalvage</CODE></A>.
- <p><DD><CODE>config</CODE> - The VerifyConfig attributes. If null, default attributes are used.
+ <p><DD><CODE>verifyConfig</CODE> - The verify operation attributes. If null, default attributes are used.
+ <p><DD><CODE>dbConfig</CODE> - The database attributes. If null, default attributes are used.
<p>
<DT><B>Returns:</B><DD>True, if all of the databases in the file are uncorrupted. If this
method returns false, and the operation was configured by
@@ -1615,7 +1693,7 @@ or failure.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1631,7 +1709,7 @@ or failure.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -1640,7 +1718,7 @@ or failure.
&nbsp;<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Database.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Database.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1653,6 +1731,7 @@ or failure.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -1666,6 +1745,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DatabaseConfig.html b/db/docs/java/com/sleepycat/db/DatabaseConfig.html
index a29957d18..0a42abc5d 100644
--- a/db/docs/java/com/sleepycat/db/DatabaseConfig.html
+++ b/db/docs/java/com/sleepycat/db/DatabaseConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-DatabaseConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+DatabaseConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.DatabaseConfig class">
@@ -14,9 +14,11 @@ DatabaseConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DatabaseConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DatabaseConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,7 @@ com.sleepycat.db</FONT>
Class DatabaseConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.DatabaseConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.DatabaseConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
@@ -97,7 +100,8 @@ Class DatabaseConfig</H2>
</DL>
<HR>
<DL>
-<DT>public class <B>DatabaseConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>DatabaseConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
Specify the attributes of a database.
@@ -107,16 +111,13 @@ Specify the attributes of a database.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -124,7 +125,8 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#DEFAULT">DEFAULT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An instance created using the default constructor is initialized
+ with the system's default settings.</TD>
</TR>
</TABLE>
&nbsp;
@@ -133,8 +135,8 @@ Specify the attributes of a database.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#DatabaseConfig()">DatabaseConfig</A></B>()</CODE>
@@ -150,8 +152,8 @@ Specify the attributes of a database.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -159,7 +161,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getAllowCreate()">getAllowCreate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to create the database if it does not already exist.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -193,7 +195,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeRecordNumbers()">getBtreeRecordNumbers</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the Btree is configured to support retrieval by record number.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the Btree is configured to support retrieval by record number.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -237,7 +239,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getChecksum()">getChecksum</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to do checksum
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to do checksum
verification of pages read into the cache from the backing
filestore.</TD>
</TR>
@@ -247,7 +249,8 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getDirtyRead()">getDirtyRead</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database is configured to support dirty reads.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReadUncommitted()"><CODE>getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -263,7 +266,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getEncrypted()">getEncrypted</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database has been configured to perform encryption.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database has been configured to perform encryption.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -295,7 +298,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getExclusiveCreate()">getExclusiveCreate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to fail if the database already exists.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -357,10 +360,18 @@ Specify the attributes of a database.
<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/DatabaseConfig.html#getMultiversion()">getMultiversion</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database is configured for multiversion concurrency control.</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/DatabaseConfig.html#getNoMMap()">getNoMMap</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the library is configured to not map this database into
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the library is configured to not map this database into
memory.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -394,7 +405,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getQueueInOrder()">getQueueInOrder</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
key/data pairs in order, always returning the key/data item from the
head of the queue.</TD>
</TR>
@@ -404,7 +415,15 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReadOnly()">getReadOnly</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database is configured in read-only mode.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database is configured in read-only mode.</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/DatabaseConfig.html#getReadUncommitted()">getReadUncommitted</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database is configured to support read uncommitted.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -456,7 +475,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRenumbering()">getRenumbering</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the logical record numbers are mutable, and change as
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the logical record numbers are mutable, and change as
records are added to and deleted from the database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -465,7 +484,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReverseSplitOff()">getReverseSplitOff</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the Btree has been configured to not do reverse splits.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the Btree has been configured to not do reverse splits.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -473,7 +492,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getSnapshot()">getSnapshot</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the any specified backing source file will be read in its
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the any specified backing source file will be read in its
entirety when the database is opened.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -482,7 +501,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getSortedDuplicates()">getSortedDuplicates</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database is configured to support sorted duplicate data
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database is configured to support sorted duplicate data
items.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -491,7 +510,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTransactional()">getTransactional</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database open is enclosed within a transaction.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database open is enclosed within a transaction.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -499,7 +518,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTransactionNotDurable()">getTransactionNotDurable</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to not write log
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to not write log
records for this database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -508,7 +527,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTruncate()">getTruncate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database has been configured to be physically truncated
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database has been configured to be physically truncated
by truncating the underlying file, discarding all previous databases
it might have held.</TD>
</TR>
@@ -526,7 +545,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getUnsortedDuplicates()">getUnsortedDuplicates</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database is configured to support duplicate data items.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database is configured to support duplicate data items.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -534,7 +553,7 @@ Specify the attributes of a database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getXACreate()">getXACreate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database has been configured to be accessed via applications
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database has been configured to be accessed via applications
running under an X/Open conformant Transaction Manager.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -621,7 +640,8 @@ cache.</TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setDirtyRead(boolean)">setDirtyRead</A></B>(boolean&nbsp;dirtyRead)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database to support dirty reads.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReadUncommitted(boolean)"><CODE>setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -735,6 +755,14 @@ cache.</TD>
<TR BGCOLOR="white" CLASS="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/DatabaseConfig.html#setMultiversion(boolean)">setMultiversion</A></B>(boolean&nbsp;multiversion)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configured the database with support for multiversion concurrency control.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/DatabaseConfig.html#setNoMMap(boolean)">setNoMMap</A></B>(boolean&nbsp;noMMap)</CODE>
<BR>
@@ -786,6 +814,14 @@ cache.</TD>
<TR BGCOLOR="white" CLASS="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/DatabaseConfig.html#setReadUncommitted(boolean)">setReadUncommitted</A></B>(boolean&nbsp;readUncommitted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database to support read uncommitted.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/DatabaseConfig.html#setRecordDelimiter(int)">setRecordDelimiter</A></B>(int&nbsp;recordDelimiter)</CODE>
<BR>
@@ -917,10 +953,10 @@ cache.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -931,8 +967,8 @@ cache.</TD>
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -941,6 +977,9 @@ DEFAULT</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A> <B>DEFAULT</B></PRE>
<DL>
+<DD>An instance created using the default constructor is initialized
+ with the system's default settings.
+<P>
<DL>
</DL>
</DL>
@@ -950,8 +989,8 @@ public static final <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" titl
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -970,8 +1009,8 @@ public <B>DatabaseConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -999,7 +1038,7 @@ getAllowCreate</H3>
<PRE>
public boolean <B>getAllowCreate</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to create the database if it does not already exist.
<p>
This method may be called at any time during the life of the application.
@@ -1010,7 +1049,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to create the database if it does not already exist.</DL>
</DD>
</DL>
@@ -1043,7 +1082,7 @@ getExclusiveCreate</H3>
<PRE>
public boolean <B>getExclusiveCreate</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to fail if the database already exists.
<p>
This method may be called at any time during the life of the application.
@@ -1054,7 +1093,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to fail if the database already exists.</DL>
</DD>
</DL>
@@ -1065,7 +1104,7 @@ getSortedDuplicates</H3>
<PRE>
public boolean <B>getSortedDuplicates</B>()</PRE>
<DL>
-<DD>Return if the database is configured to support sorted duplicate data
+<DD>Return true if the database is configured to support sorted duplicate data
items.
<p>
This method may be called at any time during the life of the application.
@@ -1076,7 +1115,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database is configured to support sorted duplicate data
+<DT><B>Returns:</B><DD>True if the database is configured to support sorted duplicate data
items.</DL>
</DD>
</DL>
@@ -1107,7 +1146,7 @@ getReadOnly</H3>
<PRE>
public boolean <B>getReadOnly</B>()</PRE>
<DL>
-<DD>Return if the database is configured in read-only mode.
+<DD>Return true if the database is configured in read-only mode.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -1117,7 +1156,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database is configured in read-only mode.</DL>
+<DT><B>Returns:</B><DD>True if the database is configured in read-only mode.</DL>
</DD>
</DL>
<HR>
@@ -1148,6 +1187,8 @@ control accessing the database.
<p>
If the database already exists when the database is opened, any database
configuration specified by this method
+must be the same as the existing database or an error
+will be returned.
<p>
<P>
<DD><DL>
@@ -1190,7 +1231,7 @@ getTransactional</H3>
<PRE>
public boolean <B>getTransactional</B>()</PRE>
<DL>
-<DD>Return if the database open is enclosed within a transaction.
+<DD>Return true if the database open is enclosed within a transaction.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -1200,7 +1241,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database open is enclosed within a transaction.</DL>
+<DT><B>Returns:</B><DD>True if the database open is enclosed within a transaction.</DL>
</DD>
</DL>
<HR>
@@ -1214,12 +1255,11 @@ public void <B>setBtreeComparator</B>(<A HREF="http://java.sun.com/j2se/1.3/docs
btree keys. To customize the comparison, supply a different
Comparator.
<p>
- The <code>compare</code> method is passed <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A>
- objects representing keys that are stored in the database. If you know
- how your data is organized in the byte array, then you can write a
- comparison routine that directly examines the contents of the
- arrays. Otherwise, you have to reconstruct your original objects,
- and then perform the comparison.
+ The <code>compare</code> method is passed the byte arrays representing
+ keys that are stored in the database. If you know how your data is
+ organized in the byte array, then you can write a comparison routine that
+ directly examines the contents of the arrays. Otherwise, you have to
+ reconstruct your original objects, and then perform the comparison.
<P>
<DD><DL>
</DL>
@@ -1399,7 +1439,7 @@ public void <B>setBtreePrefixCalculator</B>(<A HREF="../../../com/sleepycat/db/B
<DD>Set the Btree prefix callback. The prefix callback 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
+ <a href="../../../../ref/am_conf/bt_prefix.html" target="_top">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
@@ -1580,6 +1620,7 @@ public void <B>setChecksum</B>(boolean&nbsp;checksum)</PRE>
<p>
If the database already exists when the database is opened, any database
configuration specified by this method
+will be ignored.
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.
@@ -1602,7 +1643,7 @@ getChecksum</H3>
<PRE>
public boolean <B>getChecksum</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to do checksum
+<DD>Return true if the database environment is configured to do checksum
verification of pages read into the cache from the backing
filestore.
<p>
@@ -1614,24 +1655,70 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to do checksum
+<DT><B>Returns:</B><DD>True if the database environment is configured to do checksum
verification of pages read into the cache from the backing
filestore.</DL>
</DD>
</DL>
<HR>
+<A NAME="setReadUncommitted(boolean)"><!-- --></A><H3>
+setReadUncommitted</H3>
+<PRE>
+public void <B>setReadUncommitted</B>(boolean&nbsp;readUncommitted)</PRE>
+<DL>
+<DD>Configure the database to support read uncommitted.
+ <p>
+ 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/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handles used to perform read uncommitted or database
+ updates, otherwise requests for read uncommitted may not be honored and
+ the read may block.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>readUncommitted</CODE> - If true, configure the database to support read uncommitted.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReadUncommitted()"><!-- --></A><H3>
+getReadUncommitted</H3>
+<PRE>
+public boolean <B>getReadUncommitted</B>()</PRE>
+<DL>
+<DD>Return true if the database is configured to support read uncommitted.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the database is configured to support read uncommitted.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setDirtyRead(boolean)"><!-- --></A><H3>
setDirtyRead</H3>
<PRE>
public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
<DL>
-<DD>Configure the database to support dirty reads.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReadUncommitted(boolean)"><CODE>setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Configure the database to support read uncommitted.
<p>
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/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handles used to perform dirty reads or database
- updates, otherwise requests for dirty reads may not be honored and
+ <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handles used to perform read uncommitted or database
+ updates, otherwise requests for read uncommitted may not be honored and
the read may block.
<p>
<P>
@@ -1639,7 +1726,8 @@ public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>dirtyRead</CODE> - If true, configure the database to support dirty reads.</DL>
+<DT><B>Parameters:</B><DD><CODE>dirtyRead</CODE> - If true, configure the database to support read uncommitted.
+ <p></DL>
</DD>
</DL>
<HR>
@@ -1649,7 +1737,10 @@ getDirtyRead</H3>
<PRE>
public boolean <B>getDirtyRead</B>()</PRE>
<DL>
-<DD>Return if the database is configured to support dirty reads.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReadUncommitted()"><CODE>getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Return true if the database is configured to support read uncommitted.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -1659,7 +1750,8 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database is configured to support dirty reads.</DL>
+<DT><B>Returns:</B><DD>True if the database is configured to support read uncommitted.
+ <p></DL>
</DD>
</DL>
<HR>
@@ -1678,6 +1770,12 @@ public void <B>setDuplicateComparator</B>(<A HREF="http://java.sun.com/j2se/1.3/
If no comparison function is specified, the data items are compared
lexically, with shorter data items collating before longer data items.
<p>
+ The <code>compare</code> method is passed the byte arrays representing
+ data items in the database. If you know how your data is organized in
+ the byte array, then you can write a comparison routine that directly
+ examines the contents of the arrays. Otherwise, you have to
+ reconstruct your original objects, and then perform the comparison.
+ <p>
<P>
<DD><DL>
</DL>
@@ -1737,7 +1835,7 @@ getEncrypted</H3>
<PRE>
public boolean <B>getEncrypted</B>()</PRE>
<DL>
-<DD>Return if the database has been configured to perform encryption.
+<DD>Return true if the database has been configured to perform encryption.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -1747,7 +1845,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database has been configured to perform encryption.</DL>
+<DT><B>Returns:</B><DD>True if the database has been configured to perform encryption.</DL>
</DD>
</DL>
<HR>
@@ -1869,7 +1967,7 @@ application may be insufficient to completely describe the cause of the
error, especially during initial application debugging.
<p>
The <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setErrorStream(java.io.OutputStream)"><CODE>EnvironmentConfig.setErrorStream</CODE></A> and
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setErrorStream(java.io.OutputStream)"><CODE>EnvironmentConfig.setErrorStream</CODE></A> methods are used to enhance
+<A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorStream(java.io.OutputStream)"><CODE>DatabaseConfig.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
@@ -2297,6 +2395,48 @@ This method may be called at any time during the life of the application.
</DL>
<HR>
+<A NAME="setMultiversion(boolean)"><!-- --></A><H3>
+setMultiversion</H3>
+<PRE>
+public void <B>setMultiversion</B>(boolean&nbsp;multiversion)</PRE>
+<DL>
+<DD>Configured the database with support for multiversion concurrency control.
+ This will cause updates to the database to follow a copy-on-write
+ protocol, which is required to support Snapshot Isolation. See
+ <A HREF="../../../com/sleepycat/db/TransactionConfig.html#setSnapshot(boolean)"><CODE>TransactionConfig.setSnapshot(boolean)</CODE></A>) for more information.
+ Multiversion access requires that the database be opened
+ in a transaction and is not supported for queue databases.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multiversion</CODE> - If true, configure the database with support for multiversion concurrency control.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMultiversion()"><!-- --></A><H3>
+getMultiversion</H3>
+<PRE>
+public boolean <B>getMultiversion</B>()</PRE>
+<DL>
+<DD>Return true if the database is configured for multiversion concurrency control.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the database is configured for multiversion concurrency control.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setNoMMap(boolean)"><!-- --></A><H3>
setNoMMap</H3>
<PRE>
@@ -2319,7 +2459,7 @@ getNoMMap</H3>
<PRE>
public boolean <B>getNoMMap</B>()</PRE>
<DL>
-<DD>Return if the library is configured to not map this database into
+<DD>Return true if the library is configured to not map this database into
memory.
<p>
This method may be called at any time during the life of the application.
@@ -2330,7 +2470,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the library is configured to not map this database into
+<DT><B>Returns:</B><DD>True if the library is configured to not map this database into
memory.</DL>
</DD>
</DL>
@@ -2535,7 +2675,7 @@ getQueueInOrder</H3>
<PRE>
public boolean <B>getQueueInOrder</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
key/data pairs in order, always returning the key/data item from the
head of the queue.
<p>
@@ -2547,7 +2687,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
key/data pairs in order, always returning the key/data item from the
head of the queue.</DL>
</DD>
@@ -2740,6 +2880,8 @@ control accessing the database.
<p>
If the database already exists when the database is opened, any database
configuration specified by this method
+must be the same as the existing database or an error
+will be returned.
<p>
<P>
<DD><DL>
@@ -2758,7 +2900,7 @@ getBtreeRecordNumbers</H3>
<PRE>
public boolean <B>getBtreeRecordNumbers</B>()</PRE>
<DL>
-<DD>Return if the Btree is configured to support retrieval by record number.
+<DD>Return true if the Btree is configured to support retrieval by record number.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -2768,7 +2910,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the Btree is configured to support retrieval by record number.</DL>
+<DT><B>Returns:</B><DD>True if the Btree is configured to support retrieval by record number.</DL>
</DD>
</DL>
<HR>
@@ -2797,11 +2939,7 @@ the information specified to this method will be ignored.
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>recordPad</CODE> - The padding character for short, fixed-length records for the Queue
- and Recno access methods.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ and Recno access methods.</DL>
</DD>
</DL>
<HR>
@@ -2914,11 +3052,7 @@ historically used to create the database or corruption can occur.
<A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordDelimiter(int)"><CODE>DatabaseConfig.setRecordDelimiter</CODE></A> method. For example,
standard UNIX byte stream files can be interpreted as a sequence of
variable length records separated by newline characters (that is, ASCII
- 0x0a).
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ 0x0a).</DL>
</DD>
</DL>
<HR>
@@ -2986,6 +3120,8 @@ control accessing the database.
<p>
If the database already exists when the database is opened, any database
configuration specified by this method
+must be the same as the existing database or an error
+will be returned.
<p>
<P>
<DD><DL>
@@ -3005,7 +3141,7 @@ getRenumbering</H3>
<PRE>
public boolean <B>getRenumbering</B>()</PRE>
<DL>
-<DD>Return if the logical record numbers are mutable, and change as
+<DD>Return true if the logical record numbers are mutable, and change as
records are added to and deleted from the database.
<p>
This method may be called at any time during the life of the application.
@@ -3016,7 +3152,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the logical record numbers are mutable, and change as
+<DT><B>Returns:</B><DD>True if the logical record numbers are mutable, and change as
records are added to and deleted from the database.</DL>
</DD>
</DL>
@@ -3060,7 +3196,7 @@ getReverseSplitOff</H3>
<PRE>
public boolean <B>getReverseSplitOff</B>()</PRE>
<DL>
-<DD>Return if the Btree has been configured to not do reverse splits.
+<DD>Return true if the Btree has been configured to not do reverse splits.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -3070,7 +3206,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the Btree has been configured to not do reverse splits.</DL>
+<DT><B>Returns:</B><DD>True if the Btree has been configured to not do reverse splits.</DL>
</DD>
</DL>
<HR>
@@ -3100,6 +3236,8 @@ control accessing the database.
<p>
If the database already exists when the database is opened, any database
configuration specified by this method
+must be the same as the existing database or an error
+will be returned.
<p>
<P>
<DD><DL>
@@ -3118,7 +3256,7 @@ getUnsortedDuplicates</H3>
<PRE>
public boolean <B>getUnsortedDuplicates</B>()</PRE>
<DL>
-<DD>Return if the database is configured to support duplicate data items.
+<DD>Return true if the database is configured to support duplicate data items.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -3128,7 +3266,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database is configured to support duplicate data items.</DL>
+<DT><B>Returns:</B><DD>True if the database is configured to support duplicate data items.</DL>
</DD>
</DL>
<HR>
@@ -3165,7 +3303,7 @@ getSnapshot</H3>
<PRE>
public boolean <B>getSnapshot</B>()</PRE>
<DL>
-<DD>Return if the any specified backing source file will be read in its
+<DD>Return true if the any specified backing source file will be read in its
entirety when the database is opened.
<p>
This method may be called at any time during the life of the application.
@@ -3176,7 +3314,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the any specified backing source file will be read in its
+<DT><B>Returns:</B><DD>True if the any specified backing source file will be read in its
entirety when the database is opened.</DL>
</DD>
</DL>
@@ -3225,7 +3363,7 @@ getTransactionNotDurable</H3>
<PRE>
public boolean <B>getTransactionNotDurable</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to not write log
+<DD>Return true if the database environment is configured to not write log
records for this database.
<p>
This method may be called at any time during the life of the application.
@@ -3236,7 +3374,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to not write log
+<DT><B>Returns:</B><DD>True if the database environment is configured to not write log
records for this database.</DL>
</DD>
</DL>
@@ -3276,7 +3414,7 @@ getTruncate</H3>
<PRE>
public boolean <B>getTruncate</B>()</PRE>
<DL>
-<DD>Return if the database has been configured to be physically truncated
+<DD>Return true if the database has been configured to be physically truncated
by truncating the underlying file, discarding all previous databases
it might have held.
<p>
@@ -3288,7 +3426,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database has been configured to be physically truncated
+<DT><B>Returns:</B><DD>True if the database has been configured to be physically truncated
by truncating the underlying file, discarding all previous databases
it might have held.</DL>
</DD>
@@ -3365,7 +3503,7 @@ getXACreate</H3>
<PRE>
public boolean <B>getXACreate</B>()</PRE>
<DL>
-<DD>Return if the database has been configured to be accessed via applications
+<DD>Return true if the database has been configured to be accessed via applications
running under an X/Open conformant Transaction Manager.
<p>
This method may be called at any time during the life of the application.
@@ -3376,7 +3514,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database has been configured to be accessed via applications
+<DT><B>Returns:</B><DD>True if the database has been configured to be accessed via applications
running under an X/Open conformant Transaction Manager.</DL>
</DD>
</DL>
@@ -3389,7 +3527,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -3405,7 +3543,7 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -3414,7 +3552,7 @@ This method may be called at any time during the life of the application.
&nbsp;<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -3427,6 +3565,7 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -3440,6 +3579,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DatabaseEntry.html b/db/docs/java/com/sleepycat/db/DatabaseEntry.html
index fe51ed5c7..f47357999 100644
--- a/db/docs/java/com/sleepycat/db/DatabaseEntry.html
+++ b/db/docs/java/com/sleepycat/db/DatabaseEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-DatabaseEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+DatabaseEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.DatabaseEntry class">
@@ -14,9 +14,11 @@ DatabaseEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DatabaseEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DatabaseEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class DatabaseEntry</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.DatabaseEntry</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.DatabaseEntry</B>
</PRE>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>DatabaseEntry</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>DatabaseEntry</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Encodes database key and data items as a byte array.
@@ -122,20 +126,26 @@ DatabaseEntry objects are used for both input data (when writing to a
database or specifying a search parameter) and output data (when reading
from a database). For certain methods, one parameter may be an input
parameter and another may be an output parameter. For example, the
-<A HREF="../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><CODE>Database.get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)</CODE></A> method has an input key parameter and an output data
-parameter. The documentation for each method describes whether its
+<A HREF="../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><CODE>Database.get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)</CODE></A> method has an input key parameter and an output
+data parameter. The documentation for each method describes whether its
parameters are input or output parameters.
<p>
For DatabaseEntry input parameters, the caller is responsible for
-initializing the data array of the DatabaseEntry. For DatabaseEntry output
-parameters, the method called will initialize the data array.
+initializing the data array of the DatabaseEntry. For DatabaseEntry
+output parameters, the method called will initialize the data array.
<p>
-Also note that for DatabaseEntry output parameters, the method called will
-always allocate a new byte array. The byte array specified by the caller
-will not be used. Therefore, after calling a method that returns output
-parameters, the caller can safely keep a reference to the byte array return
-by <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()"><CODE>getData()</CODE></A> without danger that the array will be overwritten in a
-subsequent call.
+For DatabaseEntry output parameters, by default the method called will
+reuse the byte array in the DatabaseEntry, if the data returned fits in
+the byte array. This behavior can be configured with <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)"><CODE>setReuseBuffer(boolean)</CODE></A> or <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setUserBuffer(int, boolean)"><CODE>setUserBuffer(int, boolean)</CODE></A>. If an entry is configured to
+reuse the byte array (the default behavior), the length of the underlying
+byte array should not be used to determine the amount of data returned each
+time the entry is used as an output parameter, rather the <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()"><CODE>getSize()</CODE></A>
+call should be used. If an entry is configured to not reuse the byte array,
+a new array is allocated each time the entry is used as an output parameter,
+ so
+the application can safely keep a reference to the byte array returned
+by <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()"><CODE>getData()</CODE></A> without danger that the array will be overwritten in
+a subsequent call.
<p>
<h3>Offset and Size Properties</h3>
<p>
@@ -145,7 +155,8 @@ partial use of a byte array, the Offset and Size may be set to non-default
values.
<p>
For DatabaseEntry output parameters, the Size will always be set to the
-length of the byte array and the Offset will always be set to zero.
+length of the returned data and
+the Offset will always be set to zero.
<p>
However, for DatabaseEntry input parameters the Offset and Size are set to
non-default values by the built-in tuple and serial bindings. For example,
@@ -179,19 +190,14 @@ are not set, unless the application itself sets them explicitly.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#DatabaseEntry()">DatabaseEntry</A></B>()</CODE>
@@ -213,6 +219,12 @@ are not set, unless the application itself sets them explicitly.
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a DatabaseEntry with a given byte array, offset and size.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#DatabaseEntry(java.nio.ByteBuffer)">DatabaseEntry</A></B>(java.nio.ByteBuffer&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a DatabaseEntry with a given native I/O buffer.</TD>
+</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
@@ -220,8 +232,16 @@ are not set, unless the application itself sets them explicitly.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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/DatabaseEntry.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;o)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the data of two entries for byte-by-byte equality.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -233,6 +253,14 @@ are not set, unless the application itself sets them explicitly.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;java.nio.ByteBuffer</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the java.nio.ByteBuffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A></B>()</CODE>
@@ -280,7 +308,7 @@ are not set, unless the application itself sets them explicitly.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the whether the entry is configured to reuse the buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the whether the entry is configured to reuse the buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -296,7 +324,7 @@ are not set, unless the application itself sets them explicitly.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the whether the buffer in this entry is owned by the
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the whether the buffer in this entry is owned by the
application.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -309,6 +337,14 @@ are not set, unless the application itself sets them explicitly.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code based on the data 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/DatabaseEntry.html#setData(byte[])">setData</A></B>(byte[]&nbsp;data)</CODE>
@@ -328,6 +364,24 @@ are not set, unless the application itself sets them explicitly.
<TR BGCOLOR="white" CLASS="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/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A></B>(java.nio.ByteBuffer&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the java.nio.ByteBuffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A></B>(java.nio.ByteBuffer&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the java.nio.ByteBuffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/DatabaseEntry.html#setOffset(int)">setOffset</A></B>(int&nbsp;offset)</CODE>
<BR>
@@ -407,25 +461,22 @@ are not set, unless the application itself sets them explicitly.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -450,7 +501,9 @@ public <B>DatabaseEntry</B>(byte[]&nbsp;data)</PRE>
null is passed.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the DatabaseEntry.</DL>
+</DL>
<HR>
<A NAME="DatabaseEntry(byte[], int, int)"><!-- --></A><H3>
@@ -463,15 +516,30 @@ public <B>DatabaseEntry</B>(byte[]&nbsp;data,
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the DatabaseEntry.<DD><CODE>offset</CODE> - Offset in the first byte in the byte array to be included.<DD><CODE>size</CODE> - Number of bytes in the byte array to be included.</DL>
+</DL>
+<HR>
+
+<A NAME="DatabaseEntry(java.nio.ByteBuffer)"><!-- --></A><H3>
+DatabaseEntry</H3>
+<PRE>
+public <B>DatabaseEntry</B>(java.nio.ByteBuffer&nbsp;data)</PRE>
+<DL>
+<DD>Construct a DatabaseEntry with a given native I/O buffer.
+ <p>
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - NIO byte buffer wrapped by the DatabaseEntry.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -763,6 +831,56 @@ public void <B>setSize</B>(int&nbsp;size)</PRE>
</DL>
<HR>
+<A NAME="getDataNIO()"><!-- --></A><H3>
+getDataNIO</H3>
+<PRE>
+public java.nio.ByteBuffer <B>getDataNIO</B>()</PRE>
+<DL>
+<DD>Return the java.nio.ByteBuffer.
+ <p>
+ Used to access the underlying data when the DatabaseEntry is
+ configured to utilize a java.nio.ByteBuffer.
+ <p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The underlying java.nio.ByteBuffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDataNIO(java.nio.ByteBuffer)"><!-- --></A><H3>
+setDataNIO</H3>
+<PRE>
+public void <B>setDataNIO</B>(java.nio.ByteBuffer&nbsp;data)</PRE>
+<DL>
+<DD>Sets the java.nio.ByteBuffer. The offset is set to zero; the size
+ is set to the length of the ByteBuffer, or to zero if null is passed.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - java.nio.ByteBuffer wrapped by the DatabaseEntry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDataNIO(java.nio.ByteBuffer, int, int)"><!-- --></A><H3>
+setDataNIO</H3>
+<PRE>
+public void <B>setDataNIO</B>(java.nio.ByteBuffer&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;size)</PRE>
+<DL>
+<DD>Sets the java.nio.ByteBuffer. The offset is set to zero; the size
+ is set to the length of the ByteBuffer, or to zero if null is passed.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - java.nio.ByteBuffer wrapped by the DatabaseEntry.<DD><CODE>offset</CODE> - int offset into the ByteBuffer where the DatabaseEntry data begins.<DD><CODE>size</CODE> - int size of the ByteBuffer available.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getRecordNumber()"><!-- --></A><H3>
getRecordNumber</H3>
<PRE>
@@ -816,14 +934,14 @@ getReuseBuffer</H3>
<PRE>
public boolean <B>getReuseBuffer</B>()</PRE>
<DL>
-<DD>Return if the whether the entry is configured to reuse the buffer.
+<DD>Return true if the whether the entry is configured to reuse the buffer.
<p>
This method may be called at any time during the life of the application.
<p>
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the whether the entry is configured to reuse the buffer.</DL>
+<DT><B>Returns:</B><DD>True if the whether the entry is configured to reuse the buffer.</DL>
</DD>
</DL>
<HR>
@@ -862,7 +980,7 @@ getUserBuffer</H3>
<PRE>
public boolean <B>getUserBuffer</B>()</PRE>
<DL>
-<DD>Return if the whether the buffer in this entry is owned by the
+<DD>Return true if the whether the buffer in this entry is owned by the
application.
<p>
This method may be called at any time during the life of the application.
@@ -870,7 +988,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the whether the buffer in this entry is owned by the
+<DT><B>Returns:</B><DD>True if the whether the buffer in this entry is owned by the
application.</DL>
</DD>
</DL>
@@ -891,6 +1009,50 @@ This method may be called at any time during the life of the application.
<DT><B>Returns:</B><DD>The length of the application's buffer.</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" title="class or interface in java.lang">Object</A>&nbsp;o)</PRE>
+<DL>
+<DD>Compares the data of two entries for byte-by-byte equality.
+
+ <p>In either entry, if the offset is non-zero or the size is not equal
+ to the data array length, then only the data bounded by these values is
+ compared. The data array length and offset need not be the same in both
+ entries for them to be considered equal.</p>
+
+ <p>If the data array is null in one entry, then to be considered equal
+ both entries must have a null data array.</p>
+
+ <p>If the partial property is set in either entry, then to be considered
+ equal both entries must have the same partial properties: partial,
+ partialOffset and partialLength.
+<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)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">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>Returns a hash code based on the data value.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -900,7 +1062,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -916,16 +1078,16 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -938,6 +1100,7 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -951,6 +1114,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DatabaseException.html b/db/docs/java/com/sleepycat/db/DatabaseException.html
index ccd4ea1dc..ca57ef49d 100644
--- a/db/docs/java/com/sleepycat/db/DatabaseException.html
+++ b/db/docs/java/com/sleepycat/db/DatabaseException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-DatabaseException (Sleepycat Software, Inc. - Berkeley DB Java API)
+DatabaseException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.DatabaseException class">
@@ -14,9 +14,11 @@ DatabaseException (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DatabaseException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DatabaseException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,19 +90,20 @@ com.sleepycat.db</FONT>
Class DatabaseException</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.DatabaseException</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.DatabaseException</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" title="class or interface in java.io">Serializable</A></DD>
</DL>
<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A>, <A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">MemoryException</A>, <A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">ReplicationHandleDeadException</A>, <A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">RunRecoveryException</A></DD>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A>, <A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">MemoryException</A>, <A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db">ReplicationDuplicateMasterException</A>, <A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">ReplicationHandleDeadException</A>, <A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db">ReplicationHoldElectionException</A>, <A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db">ReplicationJoinFailureException</A>, <A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db">ReplicationLockoutException</A>, <A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db">ReplicationSiteUnavailableException</A>, <A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">RunRecoveryException</A>, <A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db">UpdateConflictException</A>, <A HREF="../../../com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db">VersionMismatchException</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>DatabaseException</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">Exception</A></DL>
+<DT><PRE>public class <B>DatabaseException</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">Exception</A></DL>
+</PRE>
<P>
The root of all database exceptions.
@@ -117,22 +121,46 @@ requested key does not appear in the database.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<!-- =========== FIELD SUMMARY =========== -->
-
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String)">DatabaseException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s)</CODE>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an exception with the specified message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String, int)">DatabaseException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s,
+ int&nbsp;errno)</CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an exception with the specified message and error number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String, int, com.sleepycat.db.Environment)">DatabaseException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s,
+ int&nbsp;errno,
+ <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;dbenv)</CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an exception with the specified message and error number
+ associated with a database environment handle.</TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -148,43 +176,88 @@ requested key does not appear in the database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the system or C API error number that caused the exception.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the error number associated with this exception.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+<A NAME="DatabaseException(java.lang.String)"><!-- --></A><H3>
+DatabaseException</H3>
+<PRE>
+public <B>DatabaseException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s)</PRE>
+<DL>
+<DD>Construct an exception with the specified message.
+<P>
+</DL>
+<HR>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<A NAME="DatabaseException(java.lang.String, int)"><!-- --></A><H3>
+DatabaseException</H3>
+<PRE>
+public <B>DatabaseException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s,
+ int&nbsp;errno)</PRE>
+<DL>
+<DD>Construct an exception with the specified message and error number.
+<P>
+</DL>
+<HR>
+<A NAME="DatabaseException(java.lang.String, int, com.sleepycat.db.Environment)"><!-- --></A><H3>
+DatabaseException</H3>
+<PRE>
+public <B>DatabaseException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s,
+ int&nbsp;errno,
+ <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;dbenv)</PRE>
+<DL>
+<DD>Construct an exception with the specified message and error number
+ associated with a database environment handle.
+<P>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -210,14 +283,29 @@ getErrno</H3>
<PRE>
public int <B>getErrno</B>()</PRE>
<DL>
-<DD>Return the system or C API error number that caused the exception.
-<p>
-This method may be called at any time during the life of the application.
-<p>
+<DD>Get the error number associated with this exception.
+ <p>
+ Note that error numbers can be returned from system calls
+ and are system-specific.
<P>
<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
-<DT><B>Returns:</B><DD>The system or C API error number that caused the exception.</DL>
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
@@ -229,7 +317,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -245,16 +333,16 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -267,19 +355,20 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DatabaseStats.html b/db/docs/java/com/sleepycat/db/DatabaseStats.html
index b0e74b566..81df857e8 100644
--- a/db/docs/java/com/sleepycat/db/DatabaseStats.html
+++ b/db/docs/java/com/sleepycat/db/DatabaseStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-DatabaseStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+DatabaseStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.DatabaseStats class">
@@ -14,9 +14,11 @@ DatabaseStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DatabaseStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DatabaseStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class DatabaseStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.DatabaseStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.DatabaseStats</B>
</PRE>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>, <A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>, <A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A></DD>
</DL>
<HR>
<DL>
-<DT>public abstract class <B>DatabaseStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public abstract class <B>DatabaseStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Statistics for a single database.
@@ -104,37 +108,27 @@ Statistics for a single database.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -144,7 +138,7 @@ Statistics for a single database.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -160,16 +154,16 @@ Statistics for a single database.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -182,6 +176,7 @@ Statistics for a single database.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -195,6 +190,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DatabaseType.html b/db/docs/java/com/sleepycat/db/DatabaseType.html
index 065bee28e..5b58e7980 100644
--- a/db/docs/java/com/sleepycat/db/DatabaseType.html
+++ b/db/docs/java/com/sleepycat/db/DatabaseType.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-DatabaseType (Sleepycat Software, Inc. - Berkeley DB Java API)
+DatabaseType (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.DatabaseType class">
@@ -14,9 +14,11 @@ DatabaseType (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DatabaseType (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DatabaseType (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseType.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class DatabaseType</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.DatabaseType</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.DatabaseType</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>DatabaseType</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>DatabaseType</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Database types.
@@ -101,16 +105,13 @@ Database types.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -154,18 +155,30 @@ Database types.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DatabaseType.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -176,8 +189,8 @@ Database types.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -246,11 +259,30 @@ public static final <A HREF="../../../com/sleepycat/db/DatabaseType.html" title=
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -260,7 +292,7 @@ public static final <A HREF="../../../com/sleepycat/db/DatabaseType.html" title=
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -276,16 +308,16 @@ public static final <A HREF="../../../com/sleepycat/db/DatabaseType.html" title=
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DatabaseType.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -298,19 +330,20 @@ public static final <A HREF="../../../com/sleepycat/db/DatabaseType.html" title=
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DeadlockException.html b/db/docs/java/com/sleepycat/db/DeadlockException.html
index 26203b5cf..abe2cad54 100644
--- a/db/docs/java/com/sleepycat/db/DeadlockException.html
+++ b/db/docs/java/com/sleepycat/db/DeadlockException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-DeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)
+DeadlockException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.DeadlockException class">
@@ -14,9 +14,11 @@ DeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="DeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="DeadlockException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DeadlockException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DeadlockException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,10 +90,10 @@ com.sleepycat.db</FONT>
Class DeadlockException</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.DeadlockException</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.DeadlockException</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" title="class or interface in java.io">Serializable</A></DD>
@@ -100,7 +103,8 @@ Class DeadlockException</H2>
</DL>
<HR>
<DL>
-<DT>public class <B>DeadlockException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+<DT><PRE>public class <B>DeadlockException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
<P>
DeadlockException is thrown to a thread of control when multiple threads
@@ -116,55 +120,45 @@ configured to not wait for locks.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -174,7 +168,7 @@ configured to not wait for locks.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -190,16 +184,16 @@ configured to not wait for locks.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/DeadlockException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DeadlockException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -212,6 +206,7 @@ configured to not wait for locks.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -225,6 +220,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Environment.html b/db/docs/java/com/sleepycat/db/Environment.html
index 420d8e877..1ce92370a 100644
--- a/db/docs/java/com/sleepycat/db/Environment.html
+++ b/db/docs/java/com/sleepycat/db/Environment.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-Environment (Sleepycat Software, Inc. - Berkeley DB Java API)
+Environment (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Environment class">
@@ -14,9 +14,11 @@ Environment (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Environment (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Environment (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Environment.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Environment.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class Environment</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.Environment</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.Environment</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>Environment</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>Environment</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
A database environment. Environments include support for some or
@@ -143,19 +147,47 @@ whether or not it throws an exception.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#CHECKPOINTER_NAME">CHECKPOINTER_NAME</A></B></CODE>
-<!-- =========== FIELD SUMMARY =========== -->
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The name of the Checkpointer daemon thread.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#CLEANER_NAME">CLEANER_NAME</A></B></CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The name of the cleaner daemon thread.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#INCOMP_NAME">INCOMP_NAME</A></B></CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The name of the IN Compressor daemon thread.</TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#Environment(java.io.File, com.sleepycat.db.EnvironmentConfig)">Environment</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;envHome,
@@ -171,8 +203,8 @@ whether or not it throws an exception.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -219,10 +251,8 @@ whether or not it throws an exception.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int, int, int)">electReplicationMaster</A></B>(int&nbsp;nsites,
- int&nbsp;nvotes,
- int&nbsp;priority,
- int&nbsp;timeout)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int)">electReplicationMaster</A></B>(int&nbsp;nsites,
+ int&nbsp;nvotes)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hold an election for the master of a replication group.</TD>
@@ -230,6 +260,15 @@ whether or not it throws an exception.
<TR BGCOLOR="white" CLASS="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/Environment.html#flushReplication()">flushReplication</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internal method: re-push the last log record to all clients, in case they've
+ lost messages and don't know 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/Environment.html#freeLockerID(int)">freeLockerID</A></B>(int&nbsp;id)</CODE>
<BR>
@@ -323,6 +362,22 @@ whether or not it throws an exception.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)">getMutexStats</A></B>(<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's mutex statistics.</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/Environment.html#getReplicationConfig(com.sleepycat.db.ReplicationConfig)">getReplicationConfig</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the configuration of the replication subsystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)">getReplicationStats</A></B>(<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
@@ -331,6 +386,14 @@ whether or not it throws an exception.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#getReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType)">getReplicationTimeout</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the network timeout applied to the specified timeout type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)">getTransactionStats</A></B>(<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
@@ -389,6 +452,15 @@ whether or not it throws an exception.
</TR>
<TR BGCOLOR="white" CLASS="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/Environment.html#logPrint(com.sleepycat.db.Transaction, java.lang.String)">logPrint</A></B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;message)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append an informational message to the Berkeley DB database environment log 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/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)">logPut</A></B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
boolean&nbsp;flush)</CODE>
@@ -507,6 +579,35 @@ Rename a database.</TD>
<TR BGCOLOR="white" CLASS="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/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)">replicationManagerStart</A></B>(int&nbsp;numthreads,
+ <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>&nbsp;policy)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Starts the replication manager.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/Environment.html#resetFileID(java.lang.String, boolean)">resetFileID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;filename,
+ boolean&nbsp;encrypted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allows database files to be copied, and then the copy used in the same
+ database environment as the original.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/Environment.html#resetLogSequenceNumber(java.lang.String, boolean)">resetLogSequenceNumber</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;filename,
+ boolean&nbsp;encrypted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allows database files to be moved from one transactional database
+ environment to another.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/Environment.html#setConfig(com.sleepycat.db.EnvironmentConfig)">setConfig</A></B>(<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>&nbsp;config)</CODE>
<BR>
@@ -515,6 +616,24 @@ Rename a database.</TD>
<TR BGCOLOR="white" CLASS="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/Environment.html#setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)">setReplicationConfig</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the replication subsystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/Environment.html#setReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType, int)">setReplicationTimeout</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type,
+ int&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the network timeout applied to the specified timeout type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)">startReplication</A></B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;cdata,
boolean&nbsp;master)</CODE>
@@ -524,6 +643,14 @@ Rename 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/Environment.html#syncReplication()">syncReplication</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Forces synchronization to begin for this client.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/Environment.html#trickleCacheWrite(int)">trickleCacheWrite</A></B>(int&nbsp;percent)</CODE>
@@ -535,10 +662,10 @@ Rename a database.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -546,14 +673,62 @@ Rename a database.</TD>
<!-- ============ FIELD DETAIL =========== -->
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="CLEANER_NAME"><!-- --></A><H3>
+CLEANER_NAME</H3>
+<PRE>
+public static final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>CLEANER_NAME</B></PRE>
+<DL>
+<DD>The name of the cleaner daemon thread. This constant is passed to
+ an ExceptionEvent's threadName argument when an exception is
+ thrown in the cleaner daemon thread.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Environment.CLEANER_NAME">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="INCOMP_NAME"><!-- --></A><H3>
+INCOMP_NAME</H3>
+<PRE>
+public static final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>INCOMP_NAME</B></PRE>
+<DL>
+<DD>The name of the IN Compressor daemon thread. This constant is passed to
+ an ExceptionEvent's threadName argument when an exception is
+ thrown in the IN Compressor daemon thread.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Environment.INCOMP_NAME">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CHECKPOINTER_NAME"><!-- --></A><H3>
+CHECKPOINTER_NAME</H3>
+<PRE>
+public static final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>CHECKPOINTER_NAME</B></PRE>
+<DL>
+<DD>The name of the Checkpointer daemon thread. This constant is passed to
+ an ExceptionEvent's threadName argument when an exception is
+ thrown in the Checkpointer daemon thread.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Environment.CHECKPOINTER_NAME">Constant Field Values</A></DL>
+</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -568,6 +743,7 @@ public <B>Environment</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
<DD>Create a database environment handle.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>envHome</CODE> - The database environment's home directory.
The environment variable <code>DB_HOME</code> may be used as
the path of the database home.
@@ -583,14 +759,15 @@ public <B>Environment</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io
<p>
<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html" title="class or interface in java.io">FileNotFoundException</A></CODE></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -1038,7 +1215,7 @@ environment variable DB_HOME may be used as the path of the database
environment home.
<p>
This method is affected by any database directory specified with
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
+<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
string in the database environment's DB_CONFIG file.
<p>
The <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handle may not be accessed
@@ -1095,7 +1272,7 @@ environment variable DB_HOME may be used as the path of the database
environment home.
<p>
This method is affected by any database directory specified with
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
+<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)"><CODE>EnvironmentConfig.addDataDir</CODE></A>, or by setting the "set_data_dir"
string in the database environment's DB_CONFIG file.
<p>
The <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> handle may not be accessed
@@ -1357,13 +1534,132 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</DL>
<HR>
-<A NAME="electReplicationMaster(int, int, int, int)"><!-- --></A><H3>
+<A NAME="setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)"><!-- --></A><H3>
+setReplicationConfig</H3>
+<PRE>
+public void <B>setReplicationConfig</B>(<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Configure the replication subsystem.
+ <p>
+ The database environment's replication subsystem may also be set using the environment's
+DB_CONFIG file. The syntax of the entry in that file is a single line
+with the string "rep_set_config", one or more whitespace characters, and the method configuration parameter as a string; for example,
+ "rep_set_config REP_CONF_NOWAIT".
+Because the DB_CONFIG file is read when the database environment is
+opened, it will silently overrule configuration done before that time.
+ <p>
+ This method configures a database environment, including all threads
+of control accessing the database environment, not only the operations
+performed using a specified <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>config</CODE> - A replication feature to be configured.<DD><CODE>onoff</CODE> - If true, the feature is enabled, otherwise it is disabled.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationConfig(com.sleepycat.db.ReplicationConfig)"><!-- --></A><H3>
+getReplicationConfig</H3>
+<PRE>
+public boolean <B>getReplicationConfig</B>(<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Get the configuration of the replication subsystem.
+ This method may be called at any time during the life of the application.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Whether the specified feature is enabled or disabled.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType)"><!-- --></A><H3>
+getReplicationTimeout</H3>
+<PRE>
+public int <B>getReplicationTimeout</B>(<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Get the network timeout applied to the specified timeout type.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - The type of timeout to retrieve.
+ <p>
+<DT><B>Returns:</B><DD>The network timeout applied to the specified timout type.
+ <p>
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType, int)"><!-- --></A><H3>
+setReplicationTimeout</H3>
+<PRE>
+public void <B>setReplicationTimeout</B>(<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type,
+ int&nbsp;value)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Set the network timeout applied to the specified timeout type.
+ This method may be called at any time during the life of the application.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - The type of timeout to retrieve.
+ <p><DD><CODE>value</CODE> - The time in milliseconds of the desired timeout.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)"><!-- --></A><H3>
+replicationManagerStart</H3>
+<PRE>
+public void <B>replicationManagerStart</B>(int&nbsp;numthreads,
+ <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>&nbsp;policy)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Starts the replication manager.
+ <p>
+ The replication manager is implemented inside the Berkeley DB library,
+ it is designed to manage a replication group. This includes network
+ transport, all replication message processing and acknowledgment, and
+ group elections.
+ <p>
+ For more information on building replication manager applications,
+ please see the "Replication Manager Getting Started Guide" included in
+ the Berkeley DB documentation.
+ <p>
+ This method may not be called before the database environment is opened.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>numthreads</CODE> - Specify the number of threads of control created and dedicated to
+ processing replication messages. In addition to these message processing
+ threads, the replication manager creates and manages a few of its own
+ threads of control.
+ <p><DD><CODE>policy</CODE> - The policy defines the startup characteristics of a replication group.
+ See <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><CODE>ReplicationManagerStartPolicy</CODE></A> for more information.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="electReplicationMaster(int, int)"><!-- --></A><H3>
electReplicationMaster</H3>
<PRE>
public int <B>electReplicationMaster</B>(int&nbsp;nsites,
- int&nbsp;nvotes,
- int&nbsp;priority,
- int&nbsp;timeout)
+ int&nbsp;nvotes)
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>Hold an election for the master of a replication group.
@@ -1395,10 +1691,6 @@ public int <B>electReplicationMaster</B>(int&nbsp;nsites,
nsites value as the requirement. A warning is given if half or
fewer votes are required to win an election as that can potentially
lead to multiple masters in the face of a network partition.
- <p><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.
- <p><DD><CODE>timeout</CODE> - A timeout period for an election. If the election has not completed
- after timeout microseconds, the election will fail.
<p>
<DT><B>Returns:</B><DD>The newly elected master's ID.
<p>
@@ -1475,6 +1767,55 @@ public void <B>startReplication</B>(<A HREF="../../../com/sleepycat/db/DatabaseE
</DL>
<HR>
+<A NAME="syncReplication()"><!-- --></A><H3>
+syncReplication</H3>
+<PRE>
+public void <B>syncReplication</B>()
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Forces synchronization to begin for this client. This method is the other
+ half of setting <A HREF="../../../com/sleepycat/db/ReplicationConfig.html#DELAYCLIENT"><CODE>ReplicationConfig.DELAYCLIENT</CODE></A> with
+ <A HREF="../../../com/sleepycat/db/Environment.html#setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)"><CODE>setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)</CODE></A>.
+ <p>
+ When a client application receives a return value from <A HREF="../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)</CODE></A> where <A HREF="../../../com/sleepycat/db/ReplicationStatus.html#isNewMaster()"><CODE>ReplicationStatus.isNewMaster()</CODE></A>
+ returns <code>true</code> and the application has configured delayed
+ synchronization, the application must choose when to perform
+ synchronization by using this method. Otherwise the client will remain
+ unsynchronized and will ignore all new incoming log messages.
+ <p>
+ This method may not be called before the database environment is opened.
+ <p>
+ <p>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="flushReplication()"><!-- --></A><H3>
+flushReplication</H3>
+<PRE>
+public void <B>flushReplication</B>()
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Internal method: re-push the last log record to all clients, in case they've
+ lost messages and don't know it.
+ <p>
+ This method may not be called before the database environment is opened.
+ <p>
+ <p>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getCacheStats(com.sleepycat.db.StatsConfig)"><!-- --></A><H3>
getCacheStats</H3>
<PRE>
@@ -1533,6 +1874,27 @@ public <A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sle
</DL>
<HR>
+<A NAME="getMutexStats(com.sleepycat.db.StatsConfig)"><!-- --></A><H3>
+getMutexStats</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A> <B>getMutexStats</B>(<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Return the database environment's mutex statistics.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>config</CODE> - The statistics attributes. If null, default attributes are used.
+ <p>
+<DT><B>Returns:</B><DD>The database environment's mutex statistics.
+ <p>
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getReplicationStats(com.sleepycat.db.StatsConfig)"><!-- --></A><H3>
getReplicationStats</H3>
<PRE>
@@ -1601,8 +1963,37 @@ public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class i
to the one being "put" are on disk before this method returns.
<p>
<DT><B>Returns:</B><DD>The LogSequenceNumber of the put record.
+ <p>
+ <p>
<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logPrint(com.sleepycat.db.Transaction, java.lang.String)"><!-- --></A><H3>
+logPrint</H3>
+<PRE>
+public void <B>logPrint</B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;message)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Append an informational message to the Berkeley DB database environment log files.
+ <p>
+ This method allows applications to include information in
+ the database environment log files, for later review using the
+ <a href="../../../../utility/db_printlog.html" target="_top">db_printlog</a>
+ utility. This method is intended for debugging and performance tuning.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>txn</CODE> - If the logged message refers to an application-specified transaction,
+ the <code>txn</code> parameter is a transaction handle, otherwise
+ <code>null</code>.
+ <p>
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
</DD>
</DL>
<HR>
@@ -1735,6 +2126,75 @@ public <A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class
</DL>
<HR>
+<A NAME="resetFileID(java.lang.String, boolean)"><!-- --></A><H3>
+resetFileID</H3>
+<PRE>
+public void <B>resetFileID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;filename,
+ boolean&nbsp;encrypted)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Allows database files to be copied, and then the copy used in the same
+ database environment as the original.
+ <p>
+ All databases contain an ID string used to identify the database in the
+ database environment cache. If a physical database file is copied, and
+ used in the same environment as another file with the same ID strings,
+ corruption can occur. This method creates new ID strings for all of
+ the databases in the physical file.
+ <p>
+ This method modifies the physical file, in-place.
+ Applications should not reset IDs in files that are currently in use.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>filename</CODE> - The name of the physical file in which the LSNs are to be cleared.<DD><CODE>encrypted</CODE> - Whether the file contains encrypted databases.
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="resetLogSequenceNumber(java.lang.String, boolean)"><!-- --></A><H3>
+resetLogSequenceNumber</H3>
+<PRE>
+public void <B>resetLogSequenceNumber</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;filename,
+ boolean&nbsp;encrypted)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Allows database files to be moved from one transactional database
+ environment to another.
+ <p>
+ Database pages in transactional database environments contain references
+ to the environment's log files (that is, log sequence numbers, or LSNs).
+ Copying or moving a database file from one database environment to
+ another, and then modifying it, can result in data corruption if the
+ LSNs are not first cleared.
+ <p>
+ Note that LSNs should be reset before moving or copying the database
+ file into a new database environment, rather than moving or copying the
+ database file and then resetting the LSNs. Berkeley DB has consistency checks
+ that may be triggered if an application calls this method
+ on a database in a new environment when the database LSNs still reflect
+ the old environment.
+ <p>
+ This method modifies the physical file, in-place.
+ Applications should not reset LSNs in files that are currently in use.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>filename</CODE> - The name of the physical file in which the LSNs are to be cleared.<DD><CODE>encrypted</CODE> - Whether the file contains encrypted databases.
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="panic(boolean)"><!-- --></A><H3>
panic</H3>
<PRE>
@@ -1835,7 +2295,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1851,16 +2311,16 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Environment.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Environment.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1873,19 +2333,20 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/EnvironmentConfig.html b/db/docs/java/com/sleepycat/db/EnvironmentConfig.html
index 42db248f0..0faeb587c 100644
--- a/db/docs/java/com/sleepycat/db/EnvironmentConfig.html
+++ b/db/docs/java/com/sleepycat/db/EnvironmentConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:45 EDT 2006 -->
<TITLE>
-EnvironmentConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+EnvironmentConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.EnvironmentConfig class">
@@ -14,9 +14,11 @@ EnvironmentConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="EnvironmentConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="EnvironmentConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/EnvironmentConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EnvironmentConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class EnvironmentConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.EnvironmentConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.EnvironmentConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>EnvironmentConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>EnvironmentConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
Specifies the attributes of an environment.
@@ -115,7 +119,6 @@ do the following:
// customize an environment configuration
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setTxnTimeout(10000); // will throw if timeout value is invalid
- <p>
// Open the environment.
Environment myEnvironment = new Environment(home, envConfig);
</pre></blockquote>
@@ -165,16 +168,13 @@ be changed using
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -191,8 +191,8 @@ be changed using
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#EnvironmentConfig()">EnvironmentConfig</A></B>()</CODE>
@@ -207,13 +207,13 @@ be changed using
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#addDataDir(java.lang.String)">addDataDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;dataDir)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)">addDataDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;dataDir)</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
@@ -221,11 +221,19 @@ be changed using
</TR>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#addDataDir(java.lang.String)">addDataDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;dataDir)</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/db/EnvironmentConfig.html#getAllowCreate()">getAllowCreate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to create any
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to create any
underlying files, as necessary.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -251,13 +259,13 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getCDBLockAllDatabases()">getCDBLockAllDatabases</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the Concurrent Data Store applications are configured to
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the Concurrent Data Store applications are configured to
perform locking on an environment-wide basis rather than on a
per-database basis.</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" title="class or interface in java.lang">String</A>[]</CODE></FONT></TD>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>[]</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getDataDirs()">getDataDirs</A></B>()</CODE>
<BR>
@@ -269,7 +277,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getDirectDatabaseIO()">getDirectDatabaseIO</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment has been configured to not buffer
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment has been configured to not buffer
database files.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -278,16 +286,25 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getDirectLogIO()">getDirectLogIO</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment has been configured to not buffer
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment has been configured to not buffer
log files.</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/EnvironmentConfig.html#getDsyncDatabases()">getDsyncDatabases</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment has been configured to flush database
+ writes to the backing disk before returning from the write system call.</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/EnvironmentConfig.html#getDsyncLog()">getDsyncLog</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment has been configured to flush log
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment has been configured to flush log
writes to the backing disk before returning from the write system
call.</TD>
</TR>
@@ -326,6 +343,14 @@ be changed using
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getEventHandler()">getEventHandler</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the object's methods to be called when a triggered event occurs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getFeedbackHandler()">getFeedbackHandler</A></B>()</CODE>
@@ -338,7 +363,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getInitializeCache()">getInitializeCache</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured with a shared
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured with a shared
memory buffer pool.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -347,7 +372,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getInitializeCDB()">getInitializeCDB</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured for the Concurrent
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured for the Concurrent
Data Store product.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -356,7 +381,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getInitializeLocking()">getInitializeLocking</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured for locking.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured for locking.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -364,7 +389,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getInitializeLogging()">getInitializeLogging</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured for logging.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured for logging.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -372,7 +397,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getInitializeRegions()">getInitializeRegions</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment has been configured to page-fault
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment has been configured to page-fault
shared regions into memory when initially creating or joining a
database environment.</TD>
</TR>
@@ -382,7 +407,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getInitializeReplication()">getInitializeReplication</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured for replication.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured for replication.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -406,7 +431,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getLockDetectMode()">getLockDetectMode</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the deadlock detector is configured to run whenever a lock
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the deadlock detector is configured to run whenever a lock
conflict occurs.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -415,7 +440,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getLockDown()">getLockDown</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to lock shared
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to lock shared
environment files and memory-mapped databases into memory.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -433,7 +458,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getLogAutoRemove()">getLogAutoRemove</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to to automatically remove log
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to to automatically remove log
files that are no longer needed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -454,11 +479,19 @@ be changed using
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getLogFileMode()">getLogFileMode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the absolute file mode for created log files.</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/EnvironmentConfig.html#getLogInMemory()">getLogInMemory</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to maintain transaction logs
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to maintain transaction logs
in memory rather than on disk.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -511,6 +544,38 @@ be changed using
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getMaxMutexes()">getMaxMutexes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the total number of mutexes 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/EnvironmentConfig.html#getMaxOpenFiles()">getMaxOpenFiles</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the maximum number of file descriptors that will be opened concurrently..</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getMaxWrite()">getMaxWrite</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the maximum number of sequential write operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getMaxWriteSleep()">getMaxWriteSleep</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the microseconds to pause before scheduling further write operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getMessageHandler()">getMessageHandler</A></B>()</CODE>
@@ -546,10 +611,43 @@ be changed using
<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/EnvironmentConfig.html#getMultiversion()">getMultiversion</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the handle is configured to open all databases for multiversion
+ concurrency 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/EnvironmentConfig.html#getMutexAlignment()">getMutexAlignment</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the mutex alignment, 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/EnvironmentConfig.html#getMutexIncrement()">getMutexIncrement</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the number of additional mutexes to allocate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getMutexTestAndSetSpins()">getMutexTestAndSetSpins</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return 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;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getNoLocking()">getNoLocking</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to grant all requested mutual
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to grant all requested mutual
exclusion mutexes and database locks without regard for their actual
availability.</TD>
</TR>
@@ -559,7 +657,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getNoMMap()">getNoMMap</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to copy read-only database files
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to copy read-only database files
into the local cache instead of potentially mapping them into process
memory.</TD>
</TR>
@@ -569,7 +667,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getNoPanic()">getNoPanic</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to ignore any panic state in
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to ignore any panic state in
the database environment.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -578,7 +676,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getOverwrite()">getOverwrite</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to overwrite files stored in
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to overwrite files stored in
encrypted formats before deleting them.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -595,16 +693,16 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getPrivate()">getPrivate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to only be accessed
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to only be accessed
by a single process.</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/EnvironmentConfig.html#getReadOnly()">getReadOnly</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getRegister()">getRegister</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the whether the environment handle is opened read-only.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the check for process failure when the environment is opened.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -617,6 +715,54 @@ be changed using
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getReplicationManagerAckPolicy()">getReplicationManagerAckPolicy</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the network Ack policy used by the replication manager.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getReplicationManagerLocalSite()">getReplicationManagerLocalSite</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the address of the local (this) site in 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/EnvironmentConfig.html#getReplicationNumSites()">getReplicationNumSites</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the total number of sites 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/EnvironmentConfig.html#getReplicationPriority()">getReplicationPriority</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the current environments 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/EnvironmentConfig.html#getReplicationRequestMax()">getReplicationRequestMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the maximum amount of data sent in response to any request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getReplicationRequestMin()">getReplicationRequestMin</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the minimum amount of data sent in response to any request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getReplicationTransport()">getReplicationTransport</A></B>()</CODE>
@@ -656,13 +802,13 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getSystemMemory()">getSystemMemory</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to allocate memory
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to allocate memory
from system shared memory instead of from memory backed by the
filesystem.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getTemporaryDirectory()">getTemporaryDirectory</A></B>()</CODE>
<BR>
@@ -684,7 +830,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getThreaded()">getThreaded</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the handle is configured to be <em>free-threaded</em>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the handle is configured to be <em>free-threaded</em>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -692,7 +838,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getTransactional()">getTransactional</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured for transactions.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured for transactions.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -700,8 +846,8 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getTxnMaxActive()">getTxnMaxActive</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the minimum number of simultaneously active transactions
- supported by the database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the minimum number of simultaneously active transactions supported
+ by the database environment.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -709,7 +855,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getTxnNoSync()">getTxnNoSync</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to not write or synchronously
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to not write or synchronously
flush the log on transaction commit.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -718,7 +864,16 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getTxnNotDurable()">getTxnNotDurable</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to not write log records.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to not write log records.</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/EnvironmentConfig.html#getTxnSnapshot()">getTxnSnapshot</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the handle is configured to run all transactions at snapshot
+ isolation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -744,7 +899,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getTxnWriteNoSync()">getTxnWriteNoSync</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to write, but not synchronously
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to write, but not synchronously
flush, the log on transaction commit.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -753,7 +908,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getUseEnvironment()">getUseEnvironment</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to accept information
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to accept information
from the process environment when naming files.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -762,7 +917,7 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getUseEnvironmentRoot()">getUseEnvironmentRoot</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to accept information
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the database environment is configured to accept information
from the process environment when naming files if the process has
appropriate permissions.</TD>
</TR>
@@ -787,6 +942,16 @@ be changed using
<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/EnvironmentConfig.html#getVerboseRegister()">getVerboseRegister</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the database environment is configured to display
+ additional information concerning support for the
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>setRegister(boolean)</CODE></A> 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><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getVerboseReplication()">getVerboseReplication</A></B>()</CODE>
<BR>
@@ -808,12 +973,21 @@ be changed using
<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#getYieldCPU()">getYieldCPU</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the system has been configured to yield the processor
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the system has been configured to yield the processor
immediately after each page or mutex acquisition.</TD>
</TR>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#replicationManagerAddRemoteSite(com.sleepycat.db.ReplicationHostAddress)">replicationManagerAddRemoteSite</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>&nbsp;addr)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a new replication site to the replication manager's list of known
+ sites.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setAllowCreate(boolean)">setAllowCreate</A></B>(boolean&nbsp;allowCreate)</CODE>
<BR>
@@ -866,6 +1040,16 @@ cache.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setDsyncDatabases(boolean)">setDsyncDatabases</A></B>(boolean&nbsp;dsyncDatabases)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database environment to flush database writes to the backing
+ disk before returning from the write system call, rather than flushing
+ database writes explicitly in a separate system call, as 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/EnvironmentConfig.html#setDsyncLog(boolean)">setDsyncLog</A></B>(boolean&nbsp;dsyncLog)</CODE>
<BR>
@@ -908,6 +1092,14 @@ cache.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setEventHandler(com.sleepycat.db.EventHandler)">setEventHandler</A></B>(<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A>&nbsp;handler)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an object whose methods are to be called when a triggered event occurs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>&nbsp;feedbackHandler)</CODE>
<BR>
@@ -1034,6 +1226,14 @@ locks.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setLogFileMode(int)">setLogFileMode</A></B>(int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the absolute file mode for created log 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/EnvironmentConfig.html#setLogInMemory(boolean)">setLogInMemory</A></B>(boolean&nbsp;inmemory)</CODE>
<BR>
@@ -1094,6 +1294,33 @@ locks.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setMaxMutexes(int)">setMaxMutexes</A></B>(int&nbsp;maxMutexes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the total number of mutexes to allocate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setMaxOpenFiles(int)">setMaxOpenFiles</A></B>(int&nbsp;maxOpenFiles)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Limit the number of file descriptors the library will open concurrently
+ when flushing dirty pages from 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/EnvironmentConfig.html#setMaxWrite(int, int)">setMaxWrite</A></B>(int&nbsp;maxWrite,
+ int&nbsp;maxWriteSleep)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Limit the number of sequential write operations scheduled by the
+ library when flushing dirty pages from 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/EnvironmentConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)">setMessageHandler</A></B>(<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A>&nbsp;messageHandler)</CODE>
<BR>
@@ -1128,6 +1355,40 @@ locks.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setMultiversion(boolean)">setMultiversion</A></B>(boolean&nbsp;multiversion)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database environment to open all databases that are not
+ using the queue access method for multiversion concurrency control.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setMutexAlignment(int)">setMutexAlignment</A></B>(int&nbsp;mutexAlignment)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the mutex alignment, 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/EnvironmentConfig.html#setMutexIncrement(int)">setMutexIncrement</A></B>(int&nbsp;mutexIncrement)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Increase the number of mutexes to allocate.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setMutexTestAndSetSpins(int)">setMutexTestAndSetSpins</A></B>(int&nbsp;mutexTestAndSetSpins)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify the number of times that test-and-set mutexes should spin
+ 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/EnvironmentConfig.html#setNoLocking(boolean)">setNoLocking</A></B>(boolean&nbsp;noLocking)</CODE>
<BR>
@@ -1181,10 +1442,11 @@ locks.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReadOnly(boolean)">setReadOnly</A></B>(boolean&nbsp;readOnly)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)">setRegister</A></B>(boolean&nbsp;register)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the environment handle to be opened read-only.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Check if a process has failed while using the database environment, that
+ is, if a process has exited with an open <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1198,6 +1460,54 @@ locks.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReplicationManagerAckPolicy(com.sleepycat.db.ReplicationManagerAckPolicy)">setReplicationManagerAckPolicy</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>&nbsp;policy)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the network Ack policy used by the replication manager.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReplicationManagerLocalSite(com.sleepycat.db.ReplicationHostAddress)">setReplicationManagerLocalSite</A></B>(<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>&nbsp;addr)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the address of the local (this) site in a replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReplicationNumSites(int)">setReplicationNumSites</A></B>(int&nbsp;nsites)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the total number of sites in the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReplicationPriority(int)">setReplicationPriority</A></B>(int&nbsp;priority)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the current environments 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/EnvironmentConfig.html#setReplicationRequestMax(int)">setReplicationRequestMax</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum amount of data sent in response to any request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReplicationRequestMin(int)">setReplicationRequestMin</A></B>(int&nbsp;min)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the minimum amount of data sent in response to any request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setReplicationTransport(int, com.sleepycat.db.ReplicationTransport)">setReplicationTransport</A></B>(int&nbsp;envid,
<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>&nbsp;replicationTransport)</CODE>
@@ -1256,7 +1566,7 @@ normal use.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setTemporaryDirectory(java.lang.String)">setTemporaryDirectory</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;temporaryDirectory)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setTemporaryDirectory(java.io.File)">setTemporaryDirectory</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;temporaryDirectory)</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 temporary
@@ -1265,6 +1575,14 @@ normal use.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setTemporaryDirectory(java.lang.String)">setTemporaryDirectory</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;dataDir)</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/EnvironmentConfig.html#setTestAndSetSpins(int)">setTestAndSetSpins</A></B>(int&nbsp;testAndSetSpins)</CODE>
<BR>
@@ -1317,6 +1635,15 @@ normal use.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setTxnSnapshot(boolean)">setTxnSnapshot</A></B>(boolean&nbsp;txnSnapshot)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database environment to run transactions at snapshot
+ isolation by default.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setTxnTimeout(long)">setTxnTimeout</A></B>(long&nbsp;txnTimeout)</CODE>
<BR>
@@ -1381,6 +1708,15 @@ transactions.</TD>
<TR BGCOLOR="white" CLASS="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/EnvironmentConfig.html#setVerboseRegister(boolean)">setVerboseRegister</A></B>(boolean&nbsp;verboseRegister)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Display additional information concerning support for the
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>setRegister(boolean)</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/EnvironmentConfig.html#setVerboseReplication(boolean)">setVerboseReplication</A></B>(boolean&nbsp;verboseReplication)</CODE>
<BR>
@@ -1407,10 +1743,10 @@ transactions.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -1421,8 +1757,8 @@ transactions.</TD>
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -1440,8 +1776,8 @@ public static final <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" t
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -1459,8 +1795,8 @@ public <B>EnvironmentConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -1489,7 +1825,7 @@ getTransactional</H3>
<PRE>
public boolean <B>getTransactional</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured for transactions.
+<DD>Return true if the database environment is configured for transactions.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -1499,7 +1835,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured for transactions.</DL>
+<DT><B>Returns:</B><DD>True if the database environment is configured for transactions.</DL>
</DD>
</DL>
<HR>
@@ -1528,7 +1864,7 @@ getAllowCreate</H3>
<PRE>
public boolean <B>getAllowCreate</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to create any
+<DD>Return true if the database environment is configured to create any
underlying files, as necessary.
<p>
This method may be called at any time during the life of the application.
@@ -1539,7 +1875,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to create any
+<DT><B>Returns:</B><DD>True if the database environment is configured to create any
underlying files, as necessary.</DL>
</DD>
</DL>
@@ -1726,7 +2062,7 @@ getCDBLockAllDatabases</H3>
<PRE>
public boolean <B>getCDBLockAllDatabases</B>()</PRE>
<DL>
-<DD>Return if the Concurrent Data Store applications are configured to
+<DD>Return true if the Concurrent Data Store applications are configured to
perform locking on an environment-wide basis rather than on a
per-database basis.
<p>
@@ -1738,17 +2074,17 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the Concurrent Data Store applications are configured to
+<DT><B>Returns:</B><DD>True if the Concurrent Data Store applications are configured to
perform locking on an environment-wide basis rather than on a
per-database basis.</DL>
</DD>
</DL>
<HR>
-<A NAME="addDataDir(java.lang.String)"><!-- --></A><H3>
+<A NAME="addDataDir(java.io.File)"><!-- --></A><H3>
addDataDir</H3>
<PRE>
-public void <B>addDataDir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;dataDir)</PRE>
+public void <B>addDataDir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;dataDir)</PRE>
<DL>
<DD>Set the path of a directory to be used as the location of the access
method database files.
@@ -1784,11 +2120,21 @@ existing environment or corruption can occur.
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dataDir</CODE> - A directory to be used as a location for database files.
On Windows platforms, this argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+string, which is equivalent to ASCII for Latin characters.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addDataDir(java.lang.String)"><!-- --></A><H3>
+addDataDir</H3>
+<PRE>
+public void <B>addDataDir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;dataDir)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
</DD>
</DL>
<HR>
@@ -1796,7 +2142,7 @@ string, which is equivalent to ASCII for Latin characters.
<A NAME="getDataDirs()"><!-- --></A><H3>
getDataDirs</H3>
<PRE>
-public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>[] <B>getDataDirs</B>()</PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>[] <B>getDataDirs</B>()</PRE>
<DL>
<DD>Return the array of data directories.
<p>
@@ -1846,7 +2192,7 @@ getDirectDatabaseIO</H3>
<PRE>
public boolean <B>getDirectDatabaseIO</B>()</PRE>
<DL>
-<DD>Return if the database environment has been configured to not buffer
+<DD>Return true if the database environment has been configured to not buffer
database files.
<p>
This method may be called at any time during the life of the application.
@@ -1857,7 +2203,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment has been configured to not buffer
+<DT><B>Returns:</B><DD>True if the database environment has been configured to not buffer
database files.</DL>
</DD>
</DL>
@@ -1896,7 +2242,7 @@ getDirectLogIO</H3>
<PRE>
public boolean <B>getDirectLogIO</B>()</PRE>
<DL>
-<DD>Return if the database environment has been configured to not buffer
+<DD>Return true if the database environment has been configured to not buffer
log files.
<p>
This method may be called at any time during the life of the application.
@@ -1907,12 +2253,74 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment has been configured to not buffer
+<DT><B>Returns:</B><DD>True if the database environment has been configured to not buffer
log files.</DL>
</DD>
</DL>
<HR>
+<A NAME="setDsyncDatabases(boolean)"><!-- --></A><H3>
+setDsyncDatabases</H3>
+<PRE>
+public void <B>setDsyncDatabases</B>(boolean&nbsp;dsyncDatabases)</PRE>
+<DL>
+<DD>Configure the database environment to flush database writes to the backing
+ disk before returning from the write system call, rather than flushing
+ database writes explicitly in a separate system call, as necessary.
+ <p>
+ This is only available on some systems (for example, systems supporting the
+ m4_posix1_name standard O_DSYNC flag, or systems supporting the Win32
+ FILE_FLAG_WRITE_THROUGH flag). This flag may result in inaccurate file
+ modification times and other file-level information for Berkeley DB database
+ files. This flag will almost certainly result in a performance decrease on
+ most systems. This flag is only applicable to certain filesysystem (for
+ example, the Veritas VxFS filesystem), where the filesystem's support for
+ trickling writes back to stable storage behaves badly (or more likely, has
+ been misconfigured).
+ <p>
+ This method only affects the specified <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle (and
+any other library handles opened within the scope of that handle).
+For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A>
+handles opened in the database environment must either call this method
+or the configuration should be specified in the database environment's
+DB_CONFIG configuration file.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dsyncDatabases</CODE> - If true, configure the database environment to flush database writes to the
+ backing disk before returning from the write system call, rather than
+ flushing log writes explicitly in a separate system call.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDsyncDatabases()"><!-- --></A><H3>
+getDsyncDatabases</H3>
+<PRE>
+public boolean <B>getDsyncDatabases</B>()</PRE>
+<DL>
+<DD>Return true if the database environment has been configured to flush database
+ writes to the backing disk before returning from the write system call.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the database environment has been configured to flush database
+ writes to the backing disk before returning from the write system call.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setDsyncLog(boolean)"><!-- --></A><H3>
setDsyncLog</H3>
<PRE>
@@ -1956,7 +2364,7 @@ getDsyncLog</H3>
<PRE>
public boolean <B>getDsyncLog</B>()</PRE>
<DL>
-<DD>Return if the database environment has been configured to flush log
+<DD>Return true if the database environment has been configured to flush log
writes to the backing disk before returning from the write system
call.
<p>
@@ -1968,7 +2376,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment has been configured to flush log
+<DT><B>Returns:</B><DD>True if the database environment has been configured to flush log
writes to the backing disk before returning from the write system
call.</DL>
</DD>
@@ -2126,7 +2534,7 @@ application may be insufficient to completely describe the cause of the
error, especially during initial application debugging.
<p>
The <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setErrorStream(java.io.OutputStream)"><CODE>EnvironmentConfig.setErrorStream</CODE></A> and
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setErrorStream(java.io.OutputStream)"><CODE>EnvironmentConfig.setErrorStream</CODE></A> methods are used to enhance
+<A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorStream(java.io.OutputStream)"><CODE>DatabaseConfig.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
@@ -2178,6 +2586,44 @@ This method may be called at any time during the life of the application.
</DL>
<HR>
+<A NAME="getEventHandler()"><!-- --></A><H3>
+getEventHandler</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A> <B>getEventHandler</B>()</PRE>
+<DL>
+<DD>Return the object's methods to be called when a triggered event occurs.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The object's methods to be called when a triggered event occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setEventHandler(com.sleepycat.db.EventHandler)"><!-- --></A><H3>
+setEventHandler</H3>
+<PRE>
+public void <B>setEventHandler</B>(<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A>&nbsp;handler)</PRE>
+<DL>
+<DD>Set an object whose methods are to be called when a triggered event occurs.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>handler</CODE> - An object whose methods are called when event callbacks are initiated from
+ within Berkeley DB.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setFeedbackHandler(com.sleepycat.db.FeedbackHandler)"><!-- --></A><H3>
setFeedbackHandler</H3>
<PRE>
@@ -2255,7 +2701,7 @@ getInitializeCache</H3>
<PRE>
public boolean <B>getInitializeCache</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured with a shared
+<DD>Return true if the database environment is configured with a shared
memory buffer pool.
<p>
This method may be called at any time during the life of the application.
@@ -2266,7 +2712,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured with a shared
+<DT><B>Returns:</B><DD>True if the database environment is configured with a shared
memory buffer pool.</DL>
</DD>
</DL>
@@ -2300,7 +2746,7 @@ getInitializeCDB</H3>
<PRE>
public boolean <B>getInitializeCDB</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured for the Concurrent
+<DD>Return true if the database environment is configured for the Concurrent
Data Store product.
<p>
This method may be called at any time during the life of the application.
@@ -2311,7 +2757,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured for the Concurrent
+<DT><B>Returns:</B><DD>True if the database environment is configured for the Concurrent
Data Store product.</DL>
</DD>
</DL>
@@ -2345,7 +2791,7 @@ getInitializeLocking</H3>
<PRE>
public boolean <B>getInitializeLocking</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured for locking.
+<DD>Return true if the database environment is configured for locking.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -2355,7 +2801,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured for locking.</DL>
+<DT><B>Returns:</B><DD>True if the database environment is configured for locking.</DL>
</DD>
</DL>
<HR>
@@ -2388,7 +2834,7 @@ getInitializeLogging</H3>
<PRE>
public boolean <B>getInitializeLogging</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured for logging.
+<DD>Return true if the database environment is configured for logging.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -2398,7 +2844,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured for logging.</DL>
+<DT><B>Returns:</B><DD>True if the database environment is configured for logging.</DL>
</DD>
</DL>
<HR>
@@ -2448,7 +2894,7 @@ getInitializeRegions</H3>
<PRE>
public boolean <B>getInitializeRegions</B>()</PRE>
<DL>
-<DD>Return if the database environment has been configured to page-fault
+<DD>Return true if the database environment has been configured to page-fault
shared regions into memory when initially creating or joining a
database environment.
<p>
@@ -2460,7 +2906,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment has been configured to page-fault
+<DT><B>Returns:</B><DD>True if the database environment has been configured to page-fault
shared regions into memory when initially creating or joining a
database environment.</DL>
</DD>
@@ -2491,7 +2937,7 @@ getInitializeReplication</H3>
<PRE>
public boolean <B>getInitializeReplication</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured for replication.
+<DD>Return true if the database environment is configured for replication.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -2501,7 +2947,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured for replication.</DL>
+<DT><B>Returns:</B><DD>True if the database environment is configured for replication.</DL>
</DD>
</DL>
<HR>
@@ -2576,11 +3022,7 @@ information specified to this method will be ignored.
lockConflicts[requested_mode][held_mode]
</pre></blockquote>
<p>
- The <em>not-granted</em> mode must be represented by 0.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ The <em>not-granted</em> mode must be represented by 0.</DL>
</DD>
</DL>
<HR>
@@ -2635,11 +3077,7 @@ environment.
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>lockDetectMode</CODE> - The lock request(s) to 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>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ with a transaction normally requires the transaction be aborted.</DL>
</DD>
</DL>
<HR>
@@ -2649,7 +3087,7 @@ getLockDetectMode</H3>
<PRE>
public <A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A> <B>getLockDetectMode</B>()</PRE>
<DL>
-<DD>Return if the deadlock detector is configured to run whenever a lock
+<DD>Return true if the deadlock detector is configured to run whenever a lock
conflict occurs.
<p>
This method may be called at any time during the life of the application.
@@ -2660,7 +3098,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the deadlock detector is configured to run whenever a lock
+<DT><B>Returns:</B><DD>True if the deadlock detector is configured to run whenever a lock
conflict occurs.</DL>
</DD>
</DL>
@@ -2690,7 +3128,7 @@ getLockDown</H3>
<PRE>
public boolean <B>getLockDown</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to lock shared
+<DD>Return true if the database environment is configured to lock shared
environment files and memory-mapped databases into memory.
<p>
This method may be called at any time during the life of the application.
@@ -2701,7 +3139,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to lock shared
+<DT><B>Returns:</B><DD>True if the database environment is configured to lock shared
environment files and memory-mapped databases into memory.</DL>
</DD>
</DL>
@@ -2806,7 +3244,7 @@ getLogAutoRemove</H3>
<PRE>
public boolean <B>getLogAutoRemove</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to to automatically remove log
+<DD>Return true if the system has been configured to to automatically remove log
files that are no longer needed.
<p>
This method may be called at any time during the life of the application.
@@ -2817,7 +3255,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to to automatically remove log
+<DT><B>Returns:</B><DD>True if the system has been configured to to automatically remove log
files that are no longer needed.</DL>
</DD>
</DL>
@@ -2868,7 +3306,7 @@ getLogInMemory</H3>
<PRE>
public boolean <B>getLogInMemory</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to maintain transaction logs
+<DD>Return true if the database environment is configured to maintain transaction logs
in memory rather than on disk.
<p>
This method may be called at any time during the life of the application.
@@ -2879,7 +3317,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to maintain transaction logs
+<DT><B>Returns:</B><DD>True if the database environment is configured to maintain transaction logs
in memory rather than on disk.</DL>
</DD>
</DL>
@@ -2906,11 +3344,7 @@ existing environment or corruption can occur.
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>logRecordHandler</CODE> - The handler for application-specific log records.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<DT><B>Parameters:</B><DD><CODE>logRecordHandler</CODE> - The handler for application-specific log records.</DL>
</DD>
</DL>
<HR>
@@ -2967,11 +3401,7 @@ information specified to this method will be ignored.
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>maxLocks</CODE> - The maximum number of locks supported by the database environment.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<DT><B>Parameters:</B><DD><CODE>maxLocks</CODE> - The maximum number of locks supported by the database environment.</DL>
</DD>
</DL>
<HR>
@@ -3029,11 +3459,7 @@ information specified to this method will be ignored.
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>maxLockers</CODE> - The maximum number simultaneous locking entities supported by the
- database environment.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ database environment.</DL>
</DD>
</DL>
<HR>
@@ -3091,11 +3517,7 @@ information specified to this method will be ignored.
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>maxLockObjects</CODE> - The maximum number of locked objects supported by the database
- environment.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ environment.</DL>
</DD>
</DL>
<HR>
@@ -3152,11 +3574,7 @@ performed using a specified <A HREF="../../../com/sleepycat/db/Environment.html"
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>maxLogFileSize</CODE> - The maximum size of a single file in the log, in bytes.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<DT><B>Parameters:</B><DD><CODE>maxLogFileSize</CODE> - The maximum size of a single file in the log, in bytes.</DL>
</DD>
</DL>
<HR>
@@ -3216,11 +3634,7 @@ information specified to this method will be ignored.
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>logBufferSize</CODE> - The size of the in-memory log buffer, in bytes.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<DT><B>Parameters:</B><DD><CODE>logBufferSize</CODE> - The size of the in-memory log buffer, in bytes.</DL>
</DD>
</DL>
<HR>
@@ -3282,11 +3696,7 @@ existing environment or corruption can occur.
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>logDirectory</CODE> - The directory used to store the logging files.
On Windows platforms, this argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+string, which is equivalent to ASCII for Latin characters.</DL>
</DD>
</DL>
<HR>
@@ -3311,6 +3721,52 @@ This method may be called at any time during the life of the application.
</DL>
<HR>
+<A NAME="getLogFileMode()"><!-- --></A><H3>
+getLogFileMode</H3>
+<PRE>
+public int <B>getLogFileMode</B>()</PRE>
+<DL>
+<DD>Return the absolute file mode for created log files.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The absolute file mode for created log files.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLogFileMode(int)"><!-- --></A><H3>
+setLogFileMode</H3>
+<PRE>
+public void <B>setLogFileMode</B>(int&nbsp;mode)</PRE>
+<DL>
+<DD>Set the absolute file mode for created log files. This method is
+ <b>only</b> useful for the rare Berkeley DB application that does not
+ control its umask value.
+ <p>
+ Normally, if Berkeley DB applications set their umask appropriately, all
+ processes in the application suite will have read permission on the log
+ files created by any process in the application suite. However, if the
+ Berkeley DB application is a library, a process using the library might set
+ its umask to a value preventing other processes in the application suite
+ from reading the log files it creates. In this rare case, this method
+ can be used to set the mode of created log files to an absolute value.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mode</CODE> - The absolute mode of the created log file.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setLogRegionSize(int)"><!-- --></A><H3>
setLogRegionSize</H3>
<PRE>
@@ -3344,11 +3800,7 @@ information specified to this method will be ignored.
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>logRegionSize</CODE> - The size of the logging area in the database environment, in bytes.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<DT><B>Parameters:</B><DD><CODE>logRegionSize</CODE> - The size of the logging area in the database environment, in bytes.</DL>
</DD>
</DL>
<HR>
@@ -3373,6 +3825,106 @@ This method may be called at any time during the life of the application.
</DL>
<HR>
+<A NAME="setMaxOpenFiles(int)"><!-- --></A><H3>
+setMaxOpenFiles</H3>
+<PRE>
+public void <B>setMaxOpenFiles</B>(int&nbsp;maxOpenFiles)</PRE>
+<DL>
+<DD>Limit the number of file descriptors the library will open concurrently
+ when flushing dirty pages from the cache.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>maxOpenFiles</CODE> - The maximum number of file descriptors that may be concurrently opened
+ by the library when flushing dirty pages from the cache.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMaxOpenFiles()"><!-- --></A><H3>
+getMaxOpenFiles</H3>
+<PRE>
+public int <B>getMaxOpenFiles</B>()</PRE>
+<DL>
+<DD>Return the maximum number of file descriptors that will be opened concurrently..
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The maximum number of file descriptors that will be opened concurrently..</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMaxWrite(int, int)"><!-- --></A><H3>
+setMaxWrite</H3>
+<PRE>
+public void <B>setMaxWrite</B>(int&nbsp;maxWrite,
+ int&nbsp;maxWriteSleep)</PRE>
+<DL>
+<DD>Limit the number of sequential write operations scheduled by the
+ library when flushing dirty pages from the cache.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>maxWrite</CODE> - The maximum number of sequential write operations scheduled by the
+ library when flushing dirty pages from the cache.<DD><CODE>maxWriteSleep</CODE> - The number of microseconds the thread of control should pause before
+ scheduling further write operations.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMaxWrite()"><!-- --></A><H3>
+getMaxWrite</H3>
+<PRE>
+public int <B>getMaxWrite</B>()</PRE>
+<DL>
+<DD>Return the maximum number of sequential write operations.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The maximum number of sequential write operations.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMaxWriteSleep()"><!-- --></A><H3>
+getMaxWriteSleep</H3>
+<PRE>
+public int <B>getMaxWriteSleep</B>()</PRE>
+<DL>
+<DD>Return the microseconds to pause before scheduling further write operations.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The microseconds to pause before scheduling further write operations.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setMessageHandler(com.sleepycat.db.MessageHandler)"><!-- --></A><H3>
setMessageHandler</H3>
<PRE>
@@ -3514,11 +4066,7 @@ public void <B>setMMapSize</B>(long&nbsp;mmapSize)</PRE>
This method configures only operations performed using a single a
<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle, not an entire database environment.
<p>
- This method may be called at any time during the life of the application.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ This method may be called at any time during the life of the application.</DL>
</DD>
</DL>
<HR>
@@ -3538,11 +4086,7 @@ public long <B>getMMapSize</B>()</PRE>
<DD><DL>
<DT><B>Returns:</B><DD>The maximum file size, in bytes, for a file to be mapped into the
- process address space.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ process address space.</DL>
</DD>
</DL>
<HR>
@@ -3603,6 +4147,276 @@ This method may be called at any time during the life of the application.
</DL>
<HR>
+<A NAME="setMultiversion(boolean)"><!-- --></A><H3>
+setMultiversion</H3>
+<PRE>
+public void <B>setMultiversion</B>(boolean&nbsp;multiversion)</PRE>
+<DL>
+<DD>Configure the database environment to open all databases that are not
+ using the queue access method for multiversion concurrency control.
+ See <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMultiversion(boolean)"><CODE>DatabaseConfig.setMultiversion(boolean)</CODE></A> for more information.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>multiversion</CODE> - If true, all databases that are not using the queue access method will be
+ opened for multiversion concurrency control.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMultiversion()"><!-- --></A><H3>
+getMultiversion</H3>
+<PRE>
+public boolean <B>getMultiversion</B>()</PRE>
+<DL>
+<DD>Return true if the handle is configured to open all databases for multiversion
+ concurrency control.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the handle is configured to open all databases for multiversion
+ concurrency control.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMaxMutexes(int)"><!-- --></A><H3>
+setMaxMutexes</H3>
+<PRE>
+public void <B>setMaxMutexes</B>(int&nbsp;maxMutexes)</PRE>
+<DL>
+<DD>Set the total number of mutexes to allocate.
+ <p>
+ Berkeley DB allocates a default number of mutexes based on the initial
+ configuration of the database environment. That default calculation may
+ be too small if the application has an unusual need for mutexes (for
+ example, if the application opens an unexpectedly large number of
+ databases) or too large (if the application is trying to minimize its
+ memory footprint). This method is used to specify an
+ absolute number of mutexes to allocate.
+ <p>
+ Calling this method discards any value previously
+ set using the <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setMutexIncrement(int)"><CODE>setMutexIncrement(int)</CODE></A> method.
+ <p>
+ The database environment's total number of mutexes 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 "mutex_set_max", one or more whitespace characters,
+ and the total number of mutexes. 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>
+ This method configures a database environment, including all threads
+of control accessing the database environment, not only the operations
+performed using a specified <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.
+ <p>
+ This method may not be called after the
+environment has been opened.
+If joining an existing database environment, any
+information specified to this method will be ignored.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>maxMutexes</CODE> - The absolute number of mutexes to allocate.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMaxMutexes()"><!-- --></A><H3>
+getMaxMutexes</H3>
+<PRE>
+public int <B>getMaxMutexes</B>()</PRE>
+<DL>
+<DD>Return the total number of mutexes allocated.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The total number of mutexes allocated.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMutexAlignment(int)"><!-- --></A><H3>
+setMutexAlignment</H3>
+<PRE>
+public void <B>setMutexAlignment</B>(int&nbsp;mutexAlignment)</PRE>
+<DL>
+<DD>Set the mutex alignment, in bytes.
+ <p>
+ It is sometimes advantageous to align mutexes on specific byte
+ boundaries in order to minimize cache line collisions. This method
+ specifies an alignment for mutexes allocated by Berkeley DB.
+ <p>
+ The database environment's mutex alignment may also be set using the environment's
+DB_CONFIG file. The syntax of the entry in that file is a single line
+with the string "mutex_set_align", one or more whitespace characters, and the mutex alignment in bytes.
+Because the DB_CONFIG file is read when the database environment is
+opened, it will silently overrule configuration done before that time.
+ <p>
+ This method configures a database environment, including all threads
+of control accessing the database environment, not only the operations
+performed using a specified <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.
+ <p>
+ This method may not be called after the
+environment has been opened.
+If joining an existing database environment, any
+information specified to this method will be ignored.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mutexAlignment</CODE> - mutex alignment, in bytes. The mutex alignment must be a power-of-two.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexAlignment()"><!-- --></A><H3>
+getMutexAlignment</H3>
+<PRE>
+public int <B>getMutexAlignment</B>()</PRE>
+<DL>
+<DD>Return the mutex alignment, in bytes.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The mutex alignment, in bytes.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMutexIncrement(int)"><!-- --></A><H3>
+setMutexIncrement</H3>
+<PRE>
+public void <B>setMutexIncrement</B>(int&nbsp;mutexIncrement)</PRE>
+<DL>
+<DD>Increase the number of mutexes to allocate.
+ <p>
+ Berkeley DB allocates a default number of mutexes based on the initial
+ configuration of the database environment. That default calculation may
+ be too small if the application has an unusual need for mutexes (for
+ example, if the application opens an unexpectedly large number of
+ databases) or too large (if the application is trying to minimize its
+ memory footprint). This method configure the number of additional
+ mutexes to allocate.
+ <p>
+ Calling this method discards any value previously
+ set using the <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setMaxMutexes(int)"><CODE>setMaxMutexes(int)</CODE></A> method.
+ <p>
+ This method configures a database environment, including all threads
+of control accessing the database environment, not only the operations
+performed using a specified <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.
+ <p>
+ This method may not be called after the
+environment has been opened.
+If joining an existing database environment, any
+information specified to this method will be ignored.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mutexIncrement</CODE> - The number of additional mutexes to allocate.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexIncrement()"><!-- --></A><H3>
+getMutexIncrement</H3>
+<PRE>
+public int <B>getMutexIncrement</B>()</PRE>
+<DL>
+<DD>Return the number of additional mutexes to allocate.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The number of additional mutexes to allocate.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMutexTestAndSetSpins(int)"><!-- --></A><H3>
+setMutexTestAndSetSpins</H3>
+<PRE>
+public void <B>setMutexTestAndSetSpins</B>(int&nbsp;mutexTestAndSetSpins)</PRE>
+<DL>
+<DD>Specify the number of times that test-and-set mutexes should spin
+ without blocking. The value defaults to 1 on uniprocessor systems and
+ to 50 times the number of processors on multiprocessor systems.
+ <p>
+ The database environment's test-and-set spin count may also be set using the environment's
+DB_CONFIG 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 DB_CONFIG file is read when the database environment is
+opened, it will silently overrule configuration done before that time.
+ <p>
+ This method configures only operations performed using a single a
+<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle, not an entire database environment.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mutexTestAndSetSpins</CODE> - The number of spins test-and-set mutexes should execute before blocking.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexTestAndSetSpins()"><!-- --></A><H3>
+getMutexTestAndSetSpins</H3>
+<PRE>
+public int <B>getMutexTestAndSetSpins</B>()</PRE>
+<DL>
+<DD>Return the test-and-set spin count.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The test-and-set spin count.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setNoLocking(boolean)"><!-- --></A><H3>
setNoLocking</H3>
<PRE>
@@ -3635,7 +4449,7 @@ getNoLocking</H3>
<PRE>
public boolean <B>getNoLocking</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to grant all requested mutual
+<DD>Return true if the system has been configured to grant all requested mutual
exclusion mutexes and database locks without regard for their actual
availability.
<p>
@@ -3647,7 +4461,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to grant all requested mutual
+<DT><B>Returns:</B><DD>True if the system has been configured to grant all requested mutual
exclusion mutexes and database locks without regard for their actual
availability.</DL>
</DD>
@@ -3687,7 +4501,7 @@ getNoMMap</H3>
<PRE>
public boolean <B>getNoMMap</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to copy read-only database files
+<DD>Return true if the system has been configured to copy read-only database files
into the local cache instead of potentially mapping them into process
memory.
<p>
@@ -3699,7 +4513,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to copy read-only database files
+<DT><B>Returns:</B><DD>True if the system has been configured to copy read-only database files
into the local cache instead of potentially mapping them into process
memory.</DL>
</DD>
@@ -3740,7 +4554,7 @@ getNoPanic</H3>
<PRE>
public boolean <B>getNoPanic</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to ignore any panic state in
+<DD>Return true if the system has been configured to ignore any panic state in
the database environment.
<p>
This method may be called at any time during the life of the application.
@@ -3751,7 +4565,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to ignore any panic state in
+<DT><B>Returns:</B><DD>True if the system has been configured to ignore any panic state in
the database environment.</DL>
</DD>
</DL>
@@ -3792,7 +4606,7 @@ getOverwrite</H3>
<PRE>
public boolean <B>getOverwrite</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to overwrite files stored in
+<DD>Return true if the system has been configured to overwrite files stored in
encrypted formats before deleting them.
<p>
This method may be called at any time during the life of the application.
@@ -3803,7 +4617,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to overwrite files stored in
+<DT><B>Returns:</B><DD>True if the system has been configured to overwrite files stored in
encrypted formats before deleting them.</DL>
</DD>
</DL>
@@ -3894,7 +4708,7 @@ getPrivate</H3>
<PRE>
public boolean <B>getPrivate</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to only be accessed
+<DD>Return true if the database environment is configured to only be accessed
by a single process.
<p>
This method may be called at any time during the life of the application.
@@ -3905,34 +4719,45 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to only be accessed
+<DT><B>Returns:</B><DD>True if the database environment is configured to only be accessed
by a single process.</DL>
</DD>
</DL>
<HR>
-<A NAME="setReadOnly(boolean)"><!-- --></A><H3>
-setReadOnly</H3>
+<A NAME="setRegister(boolean)"><!-- --></A><H3>
+setRegister</H3>
<PRE>
-public void <B>setReadOnly</B>(boolean&nbsp;readOnly)</PRE>
+public void <B>setRegister</B>(boolean&nbsp;register)</PRE>
<DL>
-<DD>Configure the environment handle to be opened read-only.
+<DD>Check if a process has failed while using the database environment, that
+ is, if a process has exited with an open <A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle. (For
+ this check to be accurate, all processes using the environment must
+ specify this flag when opening the environment.) If recovery
+ needs to be run for any reason and either <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRunRecovery(boolean)"><CODE>setRunRecovery(boolean)</CODE></A> or
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRunFatalRecovery(boolean)"><CODE>setRunFatalRecovery(boolean)</CODE></A> are also specified, recovery will be performed
+ and the open will proceed normally. If recovery needs to be run and no
+ recovery flag is specified, a <A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><CODE>RunRecoveryException</CODE></A> will be thrown.
+ If recovery does not need to be run, the recovery flags will be ignored. See
+ <a href="../../../../ref/transapp/app.html" target="_top">Architecting
+ Transactional Data Store applications</a>) for more information.
+ <p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>readOnly</CODE> - whether the environment should be opened read-only</DL>
+<DT><B>Parameters:</B><DD><CODE>register</CODE> - If true, check for process failure when the environment is opened.</DL>
</DD>
</DL>
<HR>
-<A NAME="getReadOnly()"><!-- --></A><H3>
-getReadOnly</H3>
+<A NAME="getRegister()"><!-- --></A><H3>
+getRegister</H3>
<PRE>
-public boolean <B>getReadOnly</B>()</PRE>
+public boolean <B>getRegister</B>()</PRE>
<DL>
-<DD>Return if the whether the environment handle is opened read-only.
+<DD>Return true if the check for process failure when the environment is opened.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -3942,7 +4767,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the whether the environment handle is opened read-only.</DL>
+<DT><B>Returns:</B><DD>True if the check for process failure when the environment is opened.</DL>
</DD>
</DL>
<HR>
@@ -3967,11 +4792,7 @@ performed using a specified <A HREF="../../../com/sleepycat/db/Environment.html"
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>replicationLimit</CODE> - The maximum number of bytes that will be sent in a single call to
- <A HREF="../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ <A HREF="../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.</DL>
</DD>
</DL>
<HR>
@@ -3992,11 +4813,240 @@ public long <B>getReplicationLimit</B>()</PRE>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>The transmit limit in bytes for a single call to <A HREF="../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.
+<DT><B>Returns:</B><DD>The transmit limit in bytes for a single call to <A HREF="../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationManagerAckPolicy()"><!-- --></A><H3>
+getReplicationManagerAckPolicy</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>getReplicationManagerAckPolicy</B>()</PRE>
+<DL>
+<DD>Get the network Ack policy used by the replication manager.
<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The network Ack policy used by the replication manager.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationManagerAckPolicy(com.sleepycat.db.ReplicationManagerAckPolicy)"><!-- --></A><H3>
+setReplicationManagerAckPolicy</H3>
+<PRE>
+public void <B>setReplicationManagerAckPolicy</B>(<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>&nbsp;policy)</PRE>
+<DL>
+<DD>Set the network Ack policy used by the replication manager.
<p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>policy</CODE> - The network Ack policy used by the replication manager.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replicationManagerAddRemoteSite(com.sleepycat.db.ReplicationHostAddress)"><!-- --></A><H3>
+replicationManagerAddRemoteSite</H3>
+<PRE>
+public void <B>replicationManagerAddRemoteSite</B>(<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>&nbsp;addr)</PRE>
+<DL>
+<DD>Adds a new replication site to the replication manager's list of known
+ sites. It is not necessary for all sites in a replication group to know
+ about all other sites in the group.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>addr</CODE> - The address of the other site.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationManagerLocalSite()"><!-- --></A><H3>
+getReplicationManagerLocalSite</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A> <B>getReplicationManagerLocalSite</B>()</PRE>
+<DL>
+<DD>Get the address of the local (this) site in a replication group.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The address of the local site.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationManagerLocalSite(com.sleepycat.db.ReplicationHostAddress)"><!-- --></A><H3>
+setReplicationManagerLocalSite</H3>
+<PRE>
+public void <B>setReplicationManagerLocalSite</B>(<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>&nbsp;addr)</PRE>
+<DL>
+<DD>Set the address of the local (this) site in a replication group.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>addr</CODE> - The address of the local site.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationNumSites()"><!-- --></A><H3>
+getReplicationNumSites</H3>
+<PRE>
+public int <B>getReplicationNumSites</B>()</PRE>
+<DL>
+<DD>Get the total number of sites in the replication group.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The total number of sites in the replication group.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationNumSites(int)"><!-- --></A><H3>
+setReplicationNumSites</H3>
+<PRE>
+public void <B>setReplicationNumSites</B>(int&nbsp;nsites)</PRE>
+<DL>
+<DD>Set the total number of sites in the replication group.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>nsites</CODE> - The total number of sites in the replication group.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationPriority()"><!-- --></A><H3>
+getReplicationPriority</H3>
+<PRE>
+public int <B>getReplicationPriority</B>()</PRE>
+<DL>
+<DD>Get the current environments priority. Priority is used to determine
+ which replicated site will be selected as master when an election occurs.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The database environment priority.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationPriority(int)"><!-- --></A><H3>
+setReplicationPriority</H3>
+<PRE>
+public void <B>setReplicationPriority</B>(int&nbsp;priority)</PRE>
+<DL>
+<DD>Set the current environments priority. Priority is used to determine
+ which replicated site will be selected as master when an election occurs.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>priority</CODE> - The database environment priority.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationRequestMax(int)"><!-- --></A><H3>
+setReplicationRequestMax</H3>
+<PRE>
+public void <B>setReplicationRequestMax</B>(int&nbsp;max)</PRE>
+<DL>
+<DD>Set the maximum amount of data sent in response to any request.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>max</CODE> - The maximum amount of data sent in response to any request.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationRequestMax()"><!-- --></A><H3>
+getReplicationRequestMax</H3>
+<PRE>
+public int <B>getReplicationRequestMax</B>()</PRE>
+<DL>
+<DD>Get the maximum amount of data sent in response to any request.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The maximum amount of data sent in response to any request.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationRequestMin()"><!-- --></A><H3>
+getReplicationRequestMin</H3>
+<PRE>
+public int <B>getReplicationRequestMin</B>()</PRE>
+<DL>
+<DD>Get the minimum amount of data sent in response to any request.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The minimum amount of data sent in response to any request.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationRequestMin(int)"><!-- --></A><H3>
+setReplicationRequestMin</H3>
+<PRE>
+public void <B>setReplicationRequestMin</B>(int&nbsp;min)</PRE>
+<DL>
+<DD>Set the minimum amount of data sent in response to any request.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>min</CODE> - The minimum amount of data sent in response to any request.</DL>
</DD>
</DL>
<HR>
@@ -4156,7 +5206,7 @@ before running recovery.
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>runRecovery</CODE> - If true, configure to run catastrophic recovery on this environment
+<DT><B>Parameters:</B><DD><CODE>runRecovery</CODE> - If true, configure to run normal recovery on this environment
before opening it for normal use.</DL>
</DD>
</DL>
@@ -4208,7 +5258,7 @@ getSystemMemory</H3>
<PRE>
public boolean <B>getSystemMemory</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to allocate memory
+<DD>Return true if the database environment is configured to allocate memory
from system shared memory instead of from memory backed by the
filesystem.
<p>
@@ -4220,7 +5270,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to allocate memory
+<DT><B>Returns:</B><DD>True if the database environment is configured to allocate memory
from system shared memory instead of from memory backed by the
filesystem.</DL>
</DD>
@@ -4321,11 +5371,7 @@ existing environment or corruption can occur.
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>segmentId</CODE> - The base segment ID for the database environment.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<DT><B>Parameters:</B><DD><CODE>segmentId</CODE> - The base segment ID for the database environment.</DL>
</DD>
</DL>
<HR>
@@ -4350,10 +5396,10 @@ This method may be called at any time during the life of the application.
</DL>
<HR>
-<A NAME="setTemporaryDirectory(java.lang.String)"><!-- --></A><H3>
+<A NAME="setTemporaryDirectory(java.io.File)"><!-- --></A><H3>
setTemporaryDirectory</H3>
<PRE>
-public void <B>setTemporaryDirectory</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;temporaryDirectory)</PRE>
+public void <B>setTemporaryDirectory</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;temporaryDirectory)</PRE>
<DL>
<DD>Set the path of a directory to be used as the location of temporary
files.
@@ -4408,11 +5454,21 @@ existing environment or corruption can occur.
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>temporaryDirectory</CODE> - The directory to be used to store temporary files.
On Windows platforms, this argument will be interpreted as a UTF-8
-string, which is equivalent to ASCII for Latin characters.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+string, which is equivalent to ASCII for Latin characters.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTemporaryDirectory(java.lang.String)"><!-- --></A><H3>
+setTemporaryDirectory</H3>
+<PRE>
+public void <B>setTemporaryDirectory</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;dataDir)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
</DD>
</DL>
<HR>
@@ -4420,7 +5476,7 @@ string, which is equivalent to ASCII for Latin characters.
<A NAME="getTemporaryDirectory()"><!-- --></A><H3>
getTemporaryDirectory</H3>
<PRE>
-public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getTemporaryDirectory</B>()</PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A> <B>getTemporaryDirectory</B>()</PRE>
<DL>
<DD>Return the path of a directory to be used as the location of
temporary files.
@@ -4513,7 +5569,7 @@ getThreaded</H3>
<PRE>
public boolean <B>getThreaded</B>()</PRE>
<DL>
-<DD>Return if the handle is configured to be <em>free-threaded</em>.
+<DD>Return true if the handle is configured to be <em>free-threaded</em>.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -4523,7 +5579,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the handle is configured to be <em>free-threaded</em>.</DL>
+<DT><B>Returns:</B><DD>True if the handle is configured to be <em>free-threaded</em>.</DL>
</DD>
</DL>
<HR>
@@ -4570,7 +5626,7 @@ getTxnNoSync</H3>
<PRE>
public boolean <B>getTxnNoSync</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to not write or synchronously
+<DD>Return true if the system has been configured to not write or synchronously
flush the log on transaction commit.
<p>
This method may be called at any time during the life of the application.
@@ -4581,7 +5637,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to not write or synchronously
+<DT><B>Returns:</B><DD>True if the system has been configured to not write or synchronously
flush the log on transaction commit.</DL>
</DD>
</DL>
@@ -4628,7 +5684,7 @@ getTxnNotDurable</H3>
<PRE>
public boolean <B>getTxnNotDurable</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to not write log records.
+<DD>Return true if the system has been configured to not write log records.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -4638,7 +5694,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to not write log records.</DL>
+<DT><B>Returns:</B><DD>True if the system has been configured to not write log records.</DL>
</DD>
</DL>
<HR>
@@ -4682,11 +5738,7 @@ information specified to this method will be ignored.
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>txnMaxActive</CODE> - The minimum number of simultaneously active transactions supported
- by the database environment.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ by the database environment.</DL>
</DD>
</DL>
<HR>
@@ -4696,9 +5748,11 @@ getTxnMaxActive</H3>
<PRE>
public int <B>getTxnMaxActive</B>()</PRE>
<DL>
-<DD>Return the minimum number of simultaneously active transactions
- supported by the database environment.
- <p>
+<DD>Return the minimum number of simultaneously active transactions supported
+ by the database environment.
+<p>
+This method may be called at any time during the life of the application.
+<p>
<P>
<DD><DL>
</DL>
@@ -4706,11 +5760,50 @@ public int <B>getTxnMaxActive</B>()</PRE>
<DD><DL>
<DT><B>Returns:</B><DD>The minimum number of simultaneously active transactions supported
- by the database environment.
+ by the database environment.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTxnSnapshot(boolean)"><!-- --></A><H3>
+setTxnSnapshot</H3>
+<PRE>
+public void <B>setTxnSnapshot</B>(boolean&nbsp;txnSnapshot)</PRE>
+<DL>
+<DD>Configure the database environment to run transactions at snapshot
+ isolation by default. See <A HREF="../../../com/sleepycat/db/TransactionConfig.html#setSnapshot(boolean)"><CODE>TransactionConfig.setSnapshot(boolean)</CODE></A> for more
+ information.
<p>
+ This method may be called at any time during the life of the application.
<p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>txnSnapshot</CODE> - If true, configure the system to default to snapshot isolation.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTxnSnapshot()"><!-- --></A><H3>
+getTxnSnapshot</H3>
+<PRE>
+public boolean <B>getTxnSnapshot</B>()</PRE>
+<DL>
+<DD>Return true if the handle is configured to run all transactions at snapshot
+ isolation.
+<p>
+This method may be called at any time during the life of the application.
+<p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>True if the handle is configured to run all transactions at snapshot
+ isolation.</DL>
</DD>
</DL>
<HR>
@@ -4804,11 +5897,7 @@ environment has been opened.
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>txnTimestamp</CODE> - The recovery timestamp.
- Only the seconds (not the milliseconds) of the timestamp are used.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ Only the seconds (not the milliseconds) of the timestamp are used.</DL>
</DD>
</DL>
<HR>
@@ -4828,11 +5917,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html" title
<DD><DL>
<DT><B>Returns:</B><DD>The time to which recovery will be done, or 0 if recovery will be
- done to the most current possible date.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+ done to the most current possible date.</DL>
</DD>
</DL>
<HR>
@@ -4878,7 +5963,7 @@ getTxnWriteNoSync</H3>
<PRE>
public boolean <B>getTxnWriteNoSync</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to write, but not synchronously
+<DD>Return true if the system has been configured to write, but not synchronously
flush, the log on transaction commit.
<p>
This method may be called at any time during the life of the application.
@@ -4889,7 +5974,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to write, but not synchronously
+<DT><B>Returns:</B><DD>True if the system has been configured to write, but not synchronously
flush, the log on transaction commit.</DL>
</DD>
</DL>
@@ -4924,7 +6009,7 @@ getUseEnvironment</H3>
<PRE>
public boolean <B>getUseEnvironment</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to accept information
+<DD>Return true if the database environment is configured to accept information
from the process environment when naming files.
<p>
This method may be called at any time during the life of the application.
@@ -4935,7 +6020,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to accept information
+<DT><B>Returns:</B><DD>True if the database environment is configured to accept information
from the process environment when naming files.</DL>
</DD>
</DL>
@@ -4972,7 +6057,7 @@ getUseEnvironmentRoot</H3>
<PRE>
public boolean <B>getUseEnvironmentRoot</B>()</PRE>
<DL>
-<DD>Return if the database environment is configured to accept information
+<DD>Return true if the database environment is configured to accept information
from the process environment when naming files if the process has
appropriate permissions.
<p>
@@ -4984,7 +6069,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the database environment is configured to accept information
+<DT><B>Returns:</B><DD>True if the database environment is configured to accept information
from the process environment when naming files if the process has
appropriate permissions.</DL>
</DD>
@@ -5074,6 +6159,51 @@ public boolean <B>getVerboseRecovery</B>()</PRE>
</DL>
<HR>
+<A NAME="setVerboseRegister(boolean)"><!-- --></A><H3>
+setVerboseRegister</H3>
+<PRE>
+public void <B>setVerboseRegister</B>(boolean&nbsp;verboseRegister)</PRE>
+<DL>
+<DD>Display additional information concerning support for the
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>setRegister(boolean)</CODE></A> method.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>verboseRegister</CODE> - If true, display additional information concerning support for the
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>setRegister(boolean)</CODE></A> method</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVerboseRegister()"><!-- --></A><H3>
+getVerboseRegister</H3>
+<PRE>
+public boolean <B>getVerboseRegister</B>()</PRE>
+<DL>
+<DD>Return if the database environment is configured to display
+ additional information concerning support for the
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>setRegister(boolean)</CODE></A> method.
+ <p>
+ This method may be called at any time during the life of the application.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>If the database environment is configured to display additional
+ information concerning support for the
+ <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>setRegister(boolean)</CODE></A> method.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setVerboseReplication(boolean)"><!-- --></A><H3>
setVerboseReplication</H3>
<PRE>
@@ -5198,7 +6328,7 @@ getYieldCPU</H3>
<PRE>
public boolean <B>getYieldCPU</B>()</PRE>
<DL>
-<DD>Return if the system has been configured to yield the processor
+<DD>Return true if the system has been configured to yield the processor
immediately after each page or mutex acquisition.
<p>
This method may be called at any time during the life of the application.
@@ -5209,7 +6339,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the system has been configured to yield the processor
+<DT><B>Returns:</B><DD>True if the system has been configured to yield the processor
immediately after each page or mutex acquisition.</DL>
</DD>
</DL>
@@ -5222,7 +6352,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -5238,16 +6368,16 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/EnvironmentConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EnvironmentConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -5260,6 +6390,7 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -5273,6 +6404,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ErrorHandler.html b/db/docs/java/com/sleepycat/db/ErrorHandler.html
index 676e2fd29..350c12e33 100644
--- a/db/docs/java/com/sleepycat/db/ErrorHandler.html
+++ b/db/docs/java/com/sleepycat/db/ErrorHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+ErrorHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.ErrorHandler interface">
@@ -14,9 +14,11 @@ ErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ErrorHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ErrorHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ErrorHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface ErrorHandler</H2>
<HR>
<DL>
-<DT>public interface <B>ErrorHandler</B></DL>
+<DT><PRE>public interface <B>ErrorHandler</B></DL>
+</PRE>
<P>
An interface specifying a callback function to be called when an error
@@ -98,22 +102,14 @@ occurs in the Berkeley DB library.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -130,28 +126,22 @@ occurs in the Berkeley DB library.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="error(com.sleepycat.db.Environment, java.lang.String, java.lang.String)"><!-- --></A><H3>
error</H3>
<PRE>
-public void <B>error</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;errpfx,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;msg)</PRE>
+void <B>error</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;errpfx,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;msg)</PRE>
<DL>
<DD>A callback function to be called when an error occurs in the
Berkeley DB library.
@@ -186,7 +176,7 @@ public void <B>error</B>(<A HREF="../../../com/sleepycat/db/Environment.html" ti
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -202,16 +192,16 @@ public void <B>error</B>(<A HREF="../../../com/sleepycat/db/Environment.html" ti
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ErrorHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ErrorHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -224,6 +214,7 @@ public void <B>error</B>(<A HREF="../../../com/sleepycat/db/Environment.html" ti
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -237,6 +228,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/EventHandler.html b/db/docs/java/com/sleepycat/db/EventHandler.html
new file mode 100644
index 000000000..6079b0901
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/EventHandler.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+EventHandler (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.EventHandler interface">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="EventHandler (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/EventHandler.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/EventHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface EventHandler</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>EventHandler</B></DL>
+</PRE>
+
+<P>
+An interface specifying a callback function to be called when an event
+is sent from the Berkeley DB library.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventHandler.html#handleEvent(com.sleepycat.db.EventType)">handleEvent</A></B>(<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>&nbsp;event)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to be called when an event is sent from the
+ Berkeley DB library.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="handleEvent(com.sleepycat.db.EventType)"><!-- --></A><H3>
+handleEvent</H3>
+<PRE>
+int <B>handleEvent</B>(<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>&nbsp;event)</PRE>
+<DL>
+<DD>A callback function to be called when an event is sent from the
+ Berkeley DB library.
+ <p>
+ The <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setEventHandler(com.sleepycat.db.EventHandler)"><CODE>EnvironmentConfig.setEventHandler</CODE></A> is used to provide
+ a mechanism for reporting event messages from the Berkeley DB library
+ to the application.
+ <p>
+ Berkeley DB is not re-entrant. Callback functions should not attempt
+ to make library calls (for example, to release locks or close open
+ handles). Re-entering Berkeley DB is not guaranteed to work correctly,
+ and the results are undefined.
+ <p>
+ See the <A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><CODE>EventType</CODE></A> class for information on the specific
+ types of events that might be received by the handleEvent callback.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>event</CODE> - The event object, containing information about the type of event
+ that is being reported.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/EventHandler.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/EventHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/EventType.html b/db/docs/java/com/sleepycat/db/EventType.html
new file mode 100644
index 000000000..fe2405d27
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/EventType.html
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+EventType (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.EventType class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="EventType (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/EventType.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/EventType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class EventType</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.EventType</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>EventType</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Event types.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventType.html#PANIC">PANIC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a Database panic.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventType.html#REP_CLIENT">REP_CLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a replication client message, meaning that the current site
+ is now a client in the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventType.html#REP_MASTER">REP_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a replication master message, meaning that the current site
+ is now the master in the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventType.html#REP_NEW_MASTER">REP_NEW_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a replication new master message.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventType.html#fromInt(int)">fromInt</A></B>(int&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internal: this is public only so it can be called from an internal
+ package.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/EventType.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="PANIC"><!-- --></A><H3>
+PANIC</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A> <B>PANIC</B></PRE>
+<DL>
+<DD>The event is a Database panic.
+ <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). In such cases, the Berkeley DB
+ methods will return DB_RUNRECOVERY. It is often easier to simply exit
+ the application when such errors occur rather than gracefully return up
+ the stack.
+ <p>
+ When event is set to DB_EVENT_PANIC, the database environment has failed.
+ All threads of control in the database environment should exit the
+ environment, and recovery should be run.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REP_CLIENT"><!-- --></A><H3>
+REP_CLIENT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A> <B>REP_CLIENT</B></PRE>
+<DL>
+<DD>The event is a replication client message, meaning that the current site
+ is now a client in the replication group.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REP_MASTER"><!-- --></A><H3>
+REP_MASTER</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A> <B>REP_MASTER</B></PRE>
+<DL>
+<DD>The event is a replication master message, meaning that the current site
+ is now the master in the replication group.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REP_NEW_MASTER"><!-- --></A><H3>
+REP_NEW_MASTER</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A> <B>REP_NEW_MASTER</B></PRE>
+<DL>
+<DD>The event is a replication new master message.
+ <p>
+ The replication group of which this site is a member has just established
+ a new master; the local site is not the new master.
+ <p>
+ The DB_EVENT_REP_NEWMASTER event is provided only to applications using
+ the replication manager support.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="fromInt(int)"><!-- --></A><H3>
+fromInt</H3>
+<PRE>
+public static <A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A> <B>fromInt</B>(int&nbsp;type)</PRE>
+<DL>
+<DD>Internal: this is public only so it can be called from an internal
+ package.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - the internal flag value to be wrapped in an EventType object</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/EventType.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/EventType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/FeedbackHandler.html b/db/docs/java/com/sleepycat/db/FeedbackHandler.html
index 8b17f103d..f9fdd85c8 100644
--- a/db/docs/java/com/sleepycat/db/FeedbackHandler.html
+++ b/db/docs/java/com/sleepycat/db/FeedbackHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-FeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+FeedbackHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.FeedbackHandler interface">
@@ -14,9 +14,11 @@ FeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="FeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="FeedbackHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/FeedbackHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FeedbackHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface FeedbackHandler</H2>
<HR>
<DL>
-<DT>public interface <B>FeedbackHandler</B></DL>
+<DT><PRE>public interface <B>FeedbackHandler</B></DL>
+</PRE>
<P>
An interface specifying a function to be called to provide feedback.
@@ -97,22 +101,14 @@ An interface specifying a function to be called to provide feedback.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -145,27 +141,21 @@ An interface specifying a function to be called to provide feedback.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="recoveryFeedback(com.sleepycat.db.Environment, int)"><!-- --></A><H3>
recoveryFeedback</H3>
<PRE>
-public void <B>recoveryFeedback</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- int&nbsp;percent)</PRE>
+void <B>recoveryFeedback</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ int&nbsp;percent)</PRE>
<DL>
<DD>A function called with progress information when the database environment is being recovered.
<p>
@@ -184,8 +174,8 @@ between 0 and 100.</DL>
<A NAME="upgradeFeedback(com.sleepycat.db.Database, int)"><!-- --></A><H3>
upgradeFeedback</H3>
<PRE>
-public void <B>upgradeFeedback</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- int&nbsp;percent)</PRE>
+void <B>upgradeFeedback</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ int&nbsp;percent)</PRE>
<DL>
<DD>A function called with progress information when the database is being upgraded.
<p>
@@ -204,8 +194,8 @@ between 0 and 100.</DL>
<A NAME="verifyFeedback(com.sleepycat.db.Database, int)"><!-- --></A><H3>
verifyFeedback</H3>
<PRE>
-public void <B>verifyFeedback</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- int&nbsp;percent)</PRE>
+void <B>verifyFeedback</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ int&nbsp;percent)</PRE>
<DL>
<DD>A function called with progress information when the database is being verified.
<p>
@@ -228,7 +218,7 @@ between 0 and 100.</DL>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -244,16 +234,16 @@ between 0 and 100.</DL>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/FeedbackHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FeedbackHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -266,6 +256,7 @@ between 0 and 100.</DL>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -279,6 +270,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/HashStats.html b/db/docs/java/com/sleepycat/db/HashStats.html
index c9026cac1..9ff4e33a8 100644
--- a/db/docs/java/com/sleepycat/db/HashStats.html
+++ b/db/docs/java/com/sleepycat/db/HashStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-HashStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+HashStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.HashStats class">
@@ -14,9 +14,11 @@ HashStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="HashStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="HashStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/HashStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="HashStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,12 +90,13 @@ com.sleepycat.db</FONT>
Class HashStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseStats</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.HashStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseStats</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.HashStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>HashStats</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></DL>
+<DT><PRE>public class <B>HashStats</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></DL>
+</PRE>
<P>
The HashStats object is used to return Hash database statistics.
@@ -102,22 +106,14 @@ The HashStats object is used to return Hash database statistics.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -260,28 +256,22 @@ The HashStats object is used to return Hash database statistics.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -536,6 +526,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
that lists all the data fields.
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -548,7 +541,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -564,16 +557,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/HashStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="HashStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -586,6 +579,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -599,6 +593,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Hasher.html b/db/docs/java/com/sleepycat/db/Hasher.html
index a131e5c70..611ceda75 100644
--- a/db/docs/java/com/sleepycat/db/Hasher.html
+++ b/db/docs/java/com/sleepycat/db/Hasher.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-Hasher (Sleepycat Software, Inc. - Berkeley DB Java API)
+Hasher (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Hasher interface">
@@ -14,9 +14,11 @@ Hasher (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Hasher (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Hasher (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Hasher.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Hasher.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface Hasher</H2>
<HR>
<DL>
-<DT>public interface <B>Hasher</B></DL>
+<DT><PRE>public interface <B>Hasher</B></DL>
+</PRE>
<P>
An application-specified, database hash function.
@@ -97,22 +101,14 @@ An application-specified, database hash function.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,28 +124,22 @@ An application-specified, database hash function.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="hash(com.sleepycat.db.Database, byte[], int)"><!-- --></A><H3>
hash</H3>
<PRE>
-public int <B>hash</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
- byte[]&nbsp;data,
- int&nbsp;len)</PRE>
+int <B>hash</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
+ byte[]&nbsp;data,
+ int&nbsp;len)</PRE>
<DL>
<DD>An application-specified, database-specific hash function.
<p>
@@ -172,7 +162,7 @@ public int <B>hash</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -188,16 +178,16 @@ public int <B>hash</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Hasher.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Hasher.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -210,6 +200,7 @@ public int <B>hash</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -223,6 +214,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/JoinConfig.html b/db/docs/java/com/sleepycat/db/JoinConfig.html
index c709cd3cb..57afe75f7 100644
--- a/db/docs/java/com/sleepycat/db/JoinConfig.html
+++ b/db/docs/java/com/sleepycat/db/JoinConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-JoinConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+JoinConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.JoinConfig class">
@@ -14,9 +14,11 @@ JoinConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="JoinConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="JoinConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/JoinConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class JoinConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.JoinConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.JoinConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>JoinConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>JoinConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
The configuration properties of a <code>JoinCursor</code>.
@@ -119,16 +123,13 @@ To set custom attributes:
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -145,8 +146,8 @@ To set custom attributes:
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/JoinConfig.html#JoinConfig()">JoinConfig</A></B>()</CODE>
@@ -161,8 +162,8 @@ To set custom attributes:
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -184,10 +185,10 @@ To set custom attributes:
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -198,8 +199,8 @@ To set custom attributes:
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -219,8 +220,8 @@ public static final <A HREF="../../../com/sleepycat/db/JoinConfig.html" title="c
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -238,8 +239,8 @@ public <B>JoinConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -304,7 +305,7 @@ public boolean <B>getNoSort</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -320,7 +321,7 @@ public boolean <B>getNoSort</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -329,7 +330,7 @@ public boolean <B>getNoSort</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/JoinConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -342,6 +343,7 @@ public boolean <B>getNoSort</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -355,6 +357,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/JoinCursor.html b/db/docs/java/com/sleepycat/db/JoinCursor.html
index cb420402e..42c4549d7 100644
--- a/db/docs/java/com/sleepycat/db/JoinCursor.html
+++ b/db/docs/java/com/sleepycat/db/JoinCursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-JoinCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+JoinCursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.JoinCursor class">
@@ -14,9 +14,11 @@ JoinCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="JoinCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="JoinCursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/JoinCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class JoinCursor</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.JoinCursor</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.JoinCursor</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>JoinCursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>JoinCursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
A specialized join cursor for use in performing equality or natural joins on
@@ -157,22 +161,14 @@ To open a join cursor using two secondary cursors:
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -221,28 +217,22 @@ To open a join cursor using two secondary cursors:
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -382,7 +372,7 @@ deadlock.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -398,7 +388,7 @@ deadlock.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -407,7 +397,7 @@ deadlock.
&nbsp;<A HREF="../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/JoinCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -420,6 +410,7 @@ deadlock.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -433,6 +424,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/KeyRange.html b/db/docs/java/com/sleepycat/db/KeyRange.html
index 3bd9d2e7d..9653a9946 100644
--- a/db/docs/java/com/sleepycat/db/KeyRange.html
+++ b/db/docs/java/com/sleepycat/db/KeyRange.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-KeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)
+KeyRange (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.KeyRange class">
@@ -14,9 +14,11 @@ KeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="KeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="KeyRange (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/KeyRange.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="KeyRange.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class KeyRange</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.KeyRange</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.KeyRange</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>KeyRange</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>KeyRange</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
An object that returns status from the <A HREF="../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><CODE>Database.getKeyRange</CODE></A> method.
@@ -101,16 +105,13 @@ An object that returns status from the <A HREF="../../../com/sleepycat/db/Databa
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -145,8 +146,8 @@ An object that returns status from the <A HREF="../../../com/sleepycat/db/Databa
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/KeyRange.html#KeyRange()">KeyRange</A></B>()</CODE>
@@ -158,13 +159,20 @@ An object that returns status from the <A HREF="../../../com/sleepycat/db/Databa
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -175,8 +183,8 @@ An object that returns status from the <A HREF="../../../com/sleepycat/db/Databa
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -228,8 +236,8 @@ public double <B>less</B></PRE>
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -239,9 +247,6 @@ KeyRange</H3>
public <B>KeyRange</B>()</PRE>
<DL>
</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -251,7 +256,7 @@ public <B>KeyRange</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -267,7 +272,7 @@ public <B>KeyRange</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -276,7 +281,7 @@ public <B>KeyRange</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/KeyRange.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="KeyRange.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -289,6 +294,7 @@ public <B>KeyRange</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -302,6 +308,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Lock.html b/db/docs/java/com/sleepycat/db/Lock.html
index 06daf776b..e5fddd617 100644
--- a/db/docs/java/com/sleepycat/db/Lock.html
+++ b/db/docs/java/com/sleepycat/db/Lock.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-Lock (Sleepycat Software, Inc. - Berkeley DB Java API)
+Lock (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Lock class">
@@ -14,9 +14,11 @@ Lock (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Lock (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Lock (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Lock.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Lock.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class Lock</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.Lock</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.Lock</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>Lock</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>Lock</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The locking interfaces for the database environment are methods of the
@@ -103,37 +107,27 @@ a single lock, and has no methods of its own.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -143,7 +137,7 @@ a single lock, and has no methods of its own.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -159,7 +153,7 @@ a single lock, and has no methods of its own.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -168,7 +162,7 @@ a single lock, and has no methods of its own.
&nbsp;<A HREF="../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Lock.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Lock.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -181,6 +175,7 @@ a single lock, and has no methods of its own.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -194,6 +189,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockDetectMode.html b/db/docs/java/com/sleepycat/db/LockDetectMode.html
index f6b973375..67acc339a 100644
--- a/db/docs/java/com/sleepycat/db/LockDetectMode.html
+++ b/db/docs/java/com/sleepycat/db/LockDetectMode.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockDetectMode (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockDetectMode (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockDetectMode class">
@@ -14,9 +14,11 @@ LockDetectMode (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockDetectMode (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockDetectMode (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockDetectMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockDetectMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LockDetectMode</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockDetectMode</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockDetectMode</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>LockDetectMode</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>LockDetectMode</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Deadlock detection modes.
@@ -101,16 +105,13 @@ Deadlock detection modes.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -195,18 +196,30 @@ Deadlock detection modes.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockDetectMode.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -217,8 +230,8 @@ Deadlock detection modes.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -344,11 +357,30 @@ public static final <A HREF="../../../com/sleepycat/db/LockDetectMode.html" titl
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -358,7 +390,7 @@ public static final <A HREF="../../../com/sleepycat/db/LockDetectMode.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -374,7 +406,7 @@ public static final <A HREF="../../../com/sleepycat/db/LockDetectMode.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -383,7 +415,7 @@ public static final <A HREF="../../../com/sleepycat/db/LockDetectMode.html" titl
&nbsp;<A HREF="../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockDetectMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockDetectMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -396,19 +428,20 @@ public static final <A HREF="../../../com/sleepycat/db/LockDetectMode.html" titl
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockMode.html b/db/docs/java/com/sleepycat/db/LockMode.html
index c92f28794..7e897c7c2 100644
--- a/db/docs/java/com/sleepycat/db/LockMode.html
+++ b/db/docs/java/com/sleepycat/db/LockMode.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockMode (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockMode (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockMode class">
@@ -14,9 +14,11 @@ LockMode (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockMode (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockMode (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LockMode</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockMode</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockMode</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>LockMode</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>LockMode</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Locking modes for database operations. Locking modes are required
@@ -102,16 +106,13 @@ parameters for operations that retrieve data or modify the database.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,8 +129,8 @@ parameters for operations that retrieve data or modify the database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockMode.html#DEGREE_2">DEGREE_2</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Degree 2 isolation provides for cursor stability but not repeatable
- reads.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/LockMode.html#READ_COMMITTED"><CODE>READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -137,6 +138,24 @@ parameters for operations that retrieve data or modify the database.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockMode.html#DIRTY_READ">DIRTY_READ</A></B></CODE>
<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/LockMode.html#READ_UNCOMMITTED"><CODE>READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockMode.html#READ_COMMITTED">READ_COMMITTED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read committed isolation provides for cursor stability but not repeatable
+ reads.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockMode.html#READ_UNCOMMITTED">READ_UNCOMMITTED</A></B></CODE>
+
+<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read modified but not yet committed data.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -149,18 +168,30 @@ parameters for operations that retrieve data or modify the database.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockMode.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -171,8 +202,8 @@ parameters for operations that retrieve data or modify the database.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -189,28 +220,61 @@ public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="cla
</DL>
<HR>
+<A NAME="RMW"><!-- --></A><H3>
+RMW</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> <B>RMW</B></PRE>
+<DL>
+<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.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="READ_UNCOMMITTED"><!-- --></A><H3>
+READ_UNCOMMITTED</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> <B>READ_UNCOMMITTED</B></PRE>
+<DL>
+<DD>Read modified but not yet committed data.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
<A NAME="DIRTY_READ"><!-- --></A><H3>
DIRTY_READ</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> <B>DIRTY_READ</B></PRE>
<DL>
-<DD>Read modified but not yet committed data.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/LockMode.html#READ_UNCOMMITTED"><CODE>READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I><DD>Read modified but not yet committed data.
+ <p>
<P>
<DL>
</DL>
</DL>
<HR>
-<A NAME="RMW"><!-- --></A><H3>
-RMW</H3>
+<A NAME="READ_COMMITTED"><!-- --></A><H3>
+READ_COMMITTED</H3>
<PRE>
-public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> <B>RMW</B></PRE>
+public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> <B>READ_COMMITTED</B></PRE>
<DL>
-<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.
+<DD>Read committed isolation provides for cursor stability but not repeatable
+ reads. Data items which have been previously read by this transaction may
+ be deleted or modified by other transactions before the cursor is closed or
+ the transaction completes.
+ <p>
+ Note that this LockMode may only be passed to <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> get
+ methods, not to <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> methods. To configure a cursor for
+ Read committed isolation, use <A HREF="../../../com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><CODE>CursorConfig.setReadCommitted(boolean)</CODE></A>.
<P>
<DL>
</DL>
@@ -222,20 +286,45 @@ DEGREE_2</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> <B>DEGREE_2</B></PRE>
<DL>
-<DD>Degree 2 isolation provides for cursor stability but not repeatable
- reads. Data items which have been previously read by this cursor or
- transaction may be deleted or modified by other transactions
- before the cursor is closed or the transaction completes.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/LockMode.html#READ_COMMITTED"><CODE>READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I><DD>Read committed isolation provides for cursor stability but not repeatable
+ reads. Data items which have been previously read by this transaction may
+ be deleted or modified by other transactions before the cursor is closed or
+ the transaction completes.
+ <p>
+ Note that this LockMode may only be passed to <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> get
+ methods, not to <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> methods. To configure a cursor for
+ Read committed isolation, use <A HREF="../../../com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><CODE>CursorConfig.setReadCommitted(boolean)</CODE></A>.
+ <p>
<P>
<DL>
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -245,7 +334,7 @@ public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -261,16 +350,16 @@ public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -283,19 +372,20 @@ public static final <A HREF="../../../com/sleepycat/db/LockMode.html" title="cla
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockNotGrantedException.html b/db/docs/java/com/sleepycat/db/LockNotGrantedException.html
index d7f55c6f6..71f66cda8 100644
--- a/db/docs/java/com/sleepycat/db/LockNotGrantedException.html
+++ b/db/docs/java/com/sleepycat/db/LockNotGrantedException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockNotGrantedException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockNotGrantedException class">
@@ -14,9 +14,11 @@ LockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockNotGrantedException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockNotGrantedException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockNotGrantedException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,18 +90,19 @@ com.sleepycat.db</FONT>
Class LockNotGrantedException</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">com.sleepycat.db.DeadlockException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockNotGrantedException</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">com.sleepycat.db.DeadlockException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockNotGrantedException</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" title="class or interface in java.io">Serializable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>LockNotGrantedException</B><DT>extends <A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A></DL>
+<DT><PRE>public class <B>LockNotGrantedException</B><DT>extends <A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A></DL>
+</PRE>
<P>
A LockNotGrantedException is thrown when a lock requested using the
@@ -120,22 +124,14 @@ timeouts have been configured and a database operation has timed out.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -188,46 +184,40 @@ timeouts have been configured and a database operation has timed out.
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -310,7 +300,7 @@ public int <B>getOp</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -326,16 +316,16 @@ public int <B>getOp</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockNotGrantedException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockNotGrantedException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -348,6 +338,7 @@ public int <B>getOp</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -361,6 +352,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockOperation.html b/db/docs/java/com/sleepycat/db/LockOperation.html
index 75997f87f..73b8152e9 100644
--- a/db/docs/java/com/sleepycat/db/LockOperation.html
+++ b/db/docs/java/com/sleepycat/db/LockOperation.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockOperation (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockOperation (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockOperation class">
@@ -14,9 +14,11 @@ LockOperation (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockOperation (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockOperation (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LockOperation</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockOperation</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockOperation</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>LockOperation</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>LockOperation</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Operations that can be performed on locks.
@@ -101,16 +105,13 @@ Operations that can be performed on locks.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -165,18 +166,30 @@ Operations that can be performed on locks.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockOperation.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -187,8 +200,8 @@ Operations that can be performed on locks.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -284,11 +297,30 @@ public static final <A HREF="../../../com/sleepycat/db/LockOperation.html" title
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -298,7 +330,7 @@ public static final <A HREF="../../../com/sleepycat/db/LockOperation.html" title
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -314,16 +346,16 @@ public static final <A HREF="../../../com/sleepycat/db/LockOperation.html" title
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -336,19 +368,20 @@ public static final <A HREF="../../../com/sleepycat/db/LockOperation.html" title
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockRequest.html b/db/docs/java/com/sleepycat/db/LockRequest.html
index 48d3462bf..0956139f0 100644
--- a/db/docs/java/com/sleepycat/db/LockRequest.html
+++ b/db/docs/java/com/sleepycat/db/LockRequest.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockRequest (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockRequest class">
@@ -14,9 +14,11 @@ LockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockRequest (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockRequest.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequest.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LockRequest</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockRequest</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockRequest</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>LockRequest</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>LockRequest</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The LockRequest object is used to encapsulate a single lock request.
@@ -101,19 +105,14 @@ The LockRequest object is used to encapsulate a single lock request.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)">LockRequest</A></B>(<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>&nbsp;op,
@@ -143,8 +142,8 @@ The LockRequest object is used to encapsulate a single lock request.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -230,25 +229,22 @@ The LockRequest object is used to encapsulate a single lock request.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -264,10 +260,12 @@ public <B>LockRequest</B>(<A HREF="../../../com/sleepycat/db/LockOperation.html"
for the specified object.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>lock</CODE> - The lock type for the object.
<p><DD><CODE>mode</CODE> - The permissions mode for the object.
<p><DD><CODE>obj</CODE> - The object being locked.
<p><DD><CODE>op</CODE> - The operation being performed.</DL>
+</DL>
<HR>
<A NAME="LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock, int)"><!-- --></A><H3>
@@ -283,19 +281,21 @@ public <B>LockRequest</B>(<A HREF="../../../com/sleepycat/db/LockOperation.html"
timeout for the specified object.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>lock</CODE> - The lock type for the object.
<p><DD><CODE>mode</CODE> - The permissions mode for the object.
<p><DD><CODE>obj</CODE> - The object being locked.
<p><DD><CODE>op</CODE> - The operation being performed.
<p><DD><CODE>timeout</CODE> - The timeout value for the lock.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -441,7 +441,7 @@ public int <B>getTimeout</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -457,7 +457,7 @@ public int <B>getTimeout</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -466,7 +466,7 @@ public int <B>getTimeout</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockRequest.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequest.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -479,6 +479,7 @@ public int <B>getTimeout</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -492,6 +493,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockRequestMode.html b/db/docs/java/com/sleepycat/db/LockRequestMode.html
index 6527cc76f..d3c115ae3 100644
--- a/db/docs/java/com/sleepycat/db/LockRequestMode.html
+++ b/db/docs/java/com/sleepycat/db/LockRequestMode.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockRequestMode (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockRequestMode (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockRequestMode class">
@@ -14,9 +14,11 @@ LockRequestMode (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockRequestMode (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockRequestMode (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockRequestMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequestMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;METHOD</FONT></TD>
+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>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LockRequestMode</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockRequestMode</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockRequestMode</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>LockRequestMode</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>LockRequestMode</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
When using the default lock conflict matrix, the LockRequestMode class
@@ -102,16 +106,13 @@ defines the set of possible lock modes.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,8 +161,8 @@ defines the set of possible lock modes.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockRequestMode.html#LockRequestMode(java.lang.String, int)">LockRequestMode</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;operationName,
@@ -174,13 +175,28 @@ defines the set of possible lock modes.
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockRequestMode.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -191,8 +207,8 @@ defines the set of possible lock modes.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -260,8 +276,8 @@ public static final <A HREF="../../../com/sleepycat/db/LockRequestMode.html" tit
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -274,11 +290,35 @@ public <B>LockRequestMode</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/jav
<DD>Construct a custom lock request mode.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>operationName</CODE> - Name used to display the mode
<p><DD><CODE>flag</CODE> - Flag value used as an index into the lock conflict matrix</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -288,7 +328,7 @@ public <B>LockRequestMode</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/jav
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -304,7 +344,7 @@ public <B>LockRequestMode</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/jav
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -313,7 +353,7 @@ public <B>LockRequestMode</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/jav
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockRequestMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequestMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -326,19 +366,20 @@ public <B>LockRequestMode</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/jav
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;METHOD</FONT></TD>
+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>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LockStats.html b/db/docs/java/com/sleepycat/db/LockStats.html
index bc083e86a..db9de9eaa 100644
--- a/db/docs/java/com/sleepycat/db/LockStats.html
+++ b/db/docs/java/com/sleepycat/db/LockStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LockStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+LockStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LockStats class">
@@ -14,9 +14,11 @@ LockStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LockStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LockStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LockStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LockStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LockStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>LockStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>LockStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Lock statistics for a database environment.
@@ -101,22 +105,14 @@ Lock statistics for a database environment.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -137,6 +133,15 @@ Lock statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getLockNowait()">getLockNowait</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of lock requests not immediately available due to conflicts,
+ for which the thread of control did not wait.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getLockTimeout()">getLockTimeout</A></B>()</CODE>
<BR>
@@ -145,6 +150,15 @@ Lock statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getLockWait()">getLockWait</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of lock requests not immediately available due to conflicts,
+ for which the thread of control waited.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getMaxLockers()">getMaxLockers</A></B>()</CODE>
<BR>
@@ -201,18 +215,18 @@ Lock statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getNumConflicts()">getNumConflicts</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getNumDeadlocks()">getNumDeadlocks</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>
+&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/LockStats.html#getNumDeadlocks()">getNumDeadlocks</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getNumDowngrade()">getNumDowngrade</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of deadlocks.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of locks downgraded.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -249,15 +263,6 @@ Lock statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getNumNowaits()">getNumNowaits</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of lock requests failing because DB_LOCK_NOWAIT 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/LockStats.html#getNumReleases()">getNumReleases</A></B>()</CODE>
<BR>
@@ -282,6 +287,14 @@ Lock statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getNumUpgrade()">getNumUpgrade</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of locks upgraded.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LockStats.html#getRegionNowait()">getRegionNowait</A></B>()</CODE>
<BR>
@@ -326,31 +339,42 @@ Lock statistics for a database environment.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>For convenience, the LockStats class has a toString method
+ that lists all the data fields.
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getId()"><!-- --></A><H3>
getId</H3>
<PRE>
@@ -505,12 +529,13 @@ public int <B>getMaxNobjects</B>()</PRE>
</DL>
<HR>
-<A NAME="getNumConflicts()"><!-- --></A><H3>
-getNumConflicts</H3>
+<A NAME="getLockWait()"><!-- --></A><H3>
+getLockWait</H3>
<PRE>
-public int <B>getNumConflicts</B>()</PRE>
+public int <B>getLockWait</B>()</PRE>
<DL>
-<DD>The total number of locks not immediately available due to conflicts.
+<DD>The number of lock requests not immediately available due to conflicts,
+ for which the thread of control waited.
<P>
<DD><DL>
</DL>
@@ -544,13 +569,13 @@ public int <B>getNumReleases</B>()</PRE>
</DL>
<HR>
-<A NAME="getNumNowaits()"><!-- --></A><H3>
-getNumNowaits</H3>
+<A NAME="getLockNowait()"><!-- --></A><H3>
+getLockNowait</H3>
<PRE>
-public int <B>getNumNowaits</B>()</PRE>
+public int <B>getLockNowait</B>()</PRE>
<DL>
-<DD>The total number of lock requests failing because DB_LOCK_NOWAIT was
- set.
+<DD>The number of lock requests not immediately available due to conflicts,
+ for which the thread of control did not wait.
<P>
<DD><DL>
</DL>
@@ -571,6 +596,19 @@ public int <B>getNumDeadlocks</B>()</PRE>
</DL>
<HR>
+<A NAME="getNumDowngrade()"><!-- --></A><H3>
+getNumDowngrade</H3>
+<PRE>
+public int <B>getNumDowngrade</B>()</PRE>
+<DL>
+<DD>The total number of locks downgraded.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getLockTimeout()"><!-- --></A><H3>
getLockTimeout</H3>
<PRE>
@@ -624,6 +662,19 @@ public int <B>getNumTxnTimeouts</B>()</PRE>
</DL>
<HR>
+<A NAME="getNumUpgrade()"><!-- --></A><H3>
+getNumUpgrade</H3>
+<PRE>
+public int <B>getNumUpgrade</B>()</PRE>
+<DL>
+<DD>The total number of locks upgraded.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getRegionWait()"><!-- --></A><H3>
getRegionWait</H3>
<PRE>
@@ -663,20 +714,6 @@ public int <B>getRegSize</B>()</PRE>
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>For convenience, the LockStats class has a toString method
- that lists all the data fields.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -686,7 +723,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -702,7 +739,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -711,7 +748,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
&nbsp;<A HREF="../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LockStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -724,6 +761,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -737,6 +775,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LogCursor.html b/db/docs/java/com/sleepycat/db/LogCursor.html
index cee9b5180..8b774b6e9 100644
--- a/db/docs/java/com/sleepycat/db/LogCursor.html
+++ b/db/docs/java/com/sleepycat/db/LogCursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LogCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+LogCursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LogCursor class">
@@ -14,9 +14,11 @@ LogCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LogCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LogCursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LogCursor</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LogCursor</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LogCursor</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>LogCursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>LogCursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The LogCursor object is the handle for a cursor into the log files,
@@ -106,22 +110,14 @@ that method's success or failure.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -190,28 +186,22 @@ that method's success or failure.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -407,7 +397,7 @@ public <A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -423,16 +413,16 @@ public <A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -445,6 +435,7 @@ public <A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -458,6 +449,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LogRecordHandler.html b/db/docs/java/com/sleepycat/db/LogRecordHandler.html
index 929c87a4c..f36225242 100644
--- a/db/docs/java/com/sleepycat/db/LogRecordHandler.html
+++ b/db/docs/java/com/sleepycat/db/LogRecordHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LogRecordHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+LogRecordHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LogRecordHandler interface">
@@ -14,9 +14,11 @@ LogRecordHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LogRecordHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LogRecordHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogRecordHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogRecordHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface LogRecordHandler</H2>
<HR>
<DL>
-<DT>public interface <B>LogRecordHandler</B></DL>
+<DT><PRE>public interface <B>LogRecordHandler</B></DL>
+</PRE>
<P>
A function to process application-specific log records.
@@ -97,22 +101,14 @@ A function to process application-specific log records.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -129,29 +125,23 @@ A function to process application-specific log records.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><!-- --></A><H3>
handleLogRecord</H3>
<PRE>
-public int <B>handleLogRecord</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
- <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</PRE>
+int <B>handleLogRecord</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
+ <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</PRE>
<DL>
<DD><DL>
</DL>
@@ -166,7 +156,7 @@ public int <B>handleLogRecord</B>(<A HREF="../../../com/sleepycat/db/Environment
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -182,16 +172,16 @@ public int <B>handleLogRecord</B>(<A HREF="../../../com/sleepycat/db/Environment
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogRecordHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogRecordHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -204,6 +194,7 @@ public int <B>handleLogRecord</B>(<A HREF="../../../com/sleepycat/db/Environment
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -217,6 +208,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LogSequenceNumber.html b/db/docs/java/com/sleepycat/db/LogSequenceNumber.html
index eb2894681..e74438f42 100644
--- a/db/docs/java/com/sleepycat/db/LogSequenceNumber.html
+++ b/db/docs/java/com/sleepycat/db/LogSequenceNumber.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LogSequenceNumber (Sleepycat Software, Inc. - Berkeley DB Java API)
+LogSequenceNumber (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LogSequenceNumber class">
@@ -14,9 +14,11 @@ LogSequenceNumber (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LogSequenceNumber (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LogSequenceNumber (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogSequenceNumber.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogSequenceNumber.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LogSequenceNumber</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LogSequenceNumber</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LogSequenceNumber</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>LogSequenceNumber</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>LogSequenceNumber</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The LogSequenceNumber object is a <em>log sequence number</em> which
@@ -104,19 +108,14 @@ and the other specifies the offset in the log file.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/LogSequenceNumber.html#LogSequenceNumber()">LogSequenceNumber</A></B>()</CODE>
@@ -138,8 +137,8 @@ and the other specifies the offset in the log file.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -170,25 +169,22 @@ and the other specifies the offset in the log file.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -201,8 +197,10 @@ public <B>LogSequenceNumber</B>(int&nbsp;file,
<DD>Construct a LogSequenceNumber with the specified file and offset.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>file</CODE> - The log file number.
<p><DD><CODE>offset</CODE> - The log file offset.</DL>
+</DL>
<HR>
<A NAME="LogSequenceNumber()"><!-- --></A><H3>
@@ -219,8 +217,8 @@ public <B>LogSequenceNumber</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -284,7 +282,7 @@ public static int <B>compare</B>(<A HREF="../../../com/sleepycat/db/LogSequenceN
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -300,16 +298,16 @@ public static int <B>compare</B>(<A HREF="../../../com/sleepycat/db/LogSequenceN
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogSequenceNumber.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogSequenceNumber.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -322,6 +320,7 @@ public static int <B>compare</B>(<A HREF="../../../com/sleepycat/db/LogSequenceN
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -335,6 +334,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/LogStats.html b/db/docs/java/com/sleepycat/db/LogStats.html
index 22a02e8cc..28aabcd53 100644
--- a/db/docs/java/com/sleepycat/db/LogStats.html
+++ b/db/docs/java/com/sleepycat/db/LogStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-LogStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+LogStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.LogStats class">
@@ -14,9 +14,11 @@ LogStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="LogStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="LogStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class LogStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.LogStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.LogStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>LogStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>LogStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Log statistics for a database environment.
@@ -101,22 +105,14 @@ Log statistics for a database environment.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -202,6 +198,22 @@ Log statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/LogStats.html#getRCount()">getRCount</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times the log has been read from 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/LogStats.html#getRecord()">getRecord</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of records 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/LogStats.html#getRegionNowait()">getRegionNowait</A></B>()</CODE>
<BR>
@@ -304,28 +316,22 @@ Log statistics for a database environment.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -394,6 +400,32 @@ public int <B>getLgSize</B>()</PRE>
</DL>
<HR>
+<A NAME="getRecord()"><!-- --></A><H3>
+getRecord</H3>
+<PRE>
+public int <B>getRecord</B>()</PRE>
+<DL>
+<DD>The number of records written to this log.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRCount()"><!-- --></A><H3>
+getRCount</H3>
+<PRE>
+public int <B>getRCount</B>()</PRE>
+<DL>
+<DD>The number of times the log has been read from disk.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getWBytes()"><!-- --></A><H3>
getWBytes</H3>
<PRE>
@@ -616,6 +648,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
all the data fields.
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -628,7 +663,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -644,16 +679,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/LogStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -666,6 +701,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -679,6 +715,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MemoryException.html b/db/docs/java/com/sleepycat/db/MemoryException.html
index 7f58949b8..35ba444f4 100644
--- a/db/docs/java/com/sleepycat/db/MemoryException.html
+++ b/db/docs/java/com/sleepycat/db/MemoryException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-MemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+MemoryException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.MemoryException class">
@@ -14,9 +14,11 @@ MemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MemoryException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MemoryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MemoryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,17 +90,18 @@ com.sleepycat.db</FONT>
Class MemoryException</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.MemoryException</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MemoryException</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" title="class or interface in java.io">Serializable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>MemoryException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+<DT><PRE>public class <B>MemoryException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
<P>
This exception is thrown when a <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A>
@@ -118,22 +122,14 @@ rather than this one.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -144,11 +140,19 @@ rather than this one.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A> object with insufficient memory
to complete the operation to complete the 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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MemoryException.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A></CODE></TD>
@@ -157,37 +161,31 @@ rather than this one.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -203,6 +201,22 @@ public <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in co
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -212,7 +226,7 @@ public <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in co
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -228,16 +242,16 @@ public <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in co
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MemoryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MemoryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -250,6 +264,7 @@ public <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in co
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -263,6 +278,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MessageHandler.html b/db/docs/java/com/sleepycat/db/MessageHandler.html
index 0b44c8bc7..bc9b10301 100644
--- a/db/docs/java/com/sleepycat/db/MessageHandler.html
+++ b/db/docs/java/com/sleepycat/db/MessageHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-MessageHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+MessageHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.MessageHandler interface">
@@ -14,9 +14,11 @@ MessageHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MessageHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MessageHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MessageHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MessageHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface MessageHandler</H2>
<HR>
<DL>
-<DT>public interface <B>MessageHandler</B></DL>
+<DT><PRE>public interface <B>MessageHandler</B></DL>
+</PRE>
<P>
An interface specifying a callback function to be called to display
@@ -98,22 +102,14 @@ informational messages.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,27 +124,21 @@ informational messages.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="message(com.sleepycat.db.Environment, java.lang.String)"><!-- --></A><H3>
message</H3>
<PRE>
-public void <B>message</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;message)</PRE>
+void <B>message</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;message)</PRE>
<DL>
<DD>A callback function to be called to display informational messages.
<p>
@@ -176,7 +166,7 @@ public void <B>message</B>(<A HREF="../../../com/sleepycat/db/Environment.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -192,16 +182,16 @@ public void <B>message</B>(<A HREF="../../../com/sleepycat/db/Environment.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MessageHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MessageHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -214,6 +204,7 @@ public void <B>message</B>(<A HREF="../../../com/sleepycat/db/Environment.html"
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -227,6 +218,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleDataEntry.html b/db/docs/java/com/sleepycat/db/MultipleDataEntry.html
index a04a24871..7a88bfc26 100644
--- a/db/docs/java/com/sleepycat/db/MultipleDataEntry.html
+++ b/db/docs/java/com/sleepycat/db/MultipleDataEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-MultipleDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+MultipleDataEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleDataEntry class">
@@ -14,9 +14,11 @@ MultipleDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MultipleDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MultipleDataEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,13 +90,14 @@ com.sleepycat.db</FONT>
Class MultipleDataEntry</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.MultipleDataEntry</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleDataEntry</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>MultipleDataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+<DT><PRE>public class <B>MultipleDataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+</PRE>
<P>
A DatabaseEntry that holds multiple data items returned by a single
@@ -104,19 +108,14 @@ A DatabaseEntry that holds multiple data items returned by a single
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry()">MultipleDataEntry</A></B>()</CODE>
@@ -145,8 +144,8 @@ A DatabaseEntry that holds multiple data items returned by a single
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,7 +159,7 @@ A DatabaseEntry that holds multiple data items returned by a single
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.MultipleEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)">setUserBuffer</A></CODE></TD>
@@ -169,34 +168,31 @@ A DatabaseEntry that holds multiple data items returned by a single
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -222,7 +218,9 @@ public <B>MultipleDataEntry</B>(byte[]&nbsp;data)</PRE>
<A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)"><CODE>MultipleEntry.setUserBuffer</CODE></A> method.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the entry.</DL>
+</DL>
<HR>
<A NAME="MultipleDataEntry(byte[], int, int)"><!-- --></A><H3>
@@ -235,15 +233,17 @@ public <B>MultipleDataEntry</B>(byte[]&nbsp;data,
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the DatabaseEntry.<DD><CODE>offset</CODE> - Offset in the first byte in the byte array to be included.<DD><CODE>size</CODE> - Number of bytes in the byte array to be included.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -278,7 +278,7 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -294,16 +294,16 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -316,6 +316,7 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -329,6 +330,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleEntry.html b/db/docs/java/com/sleepycat/db/MultipleEntry.html
index b15e98f38..3fea46eb2 100644
--- a/db/docs/java/com/sleepycat/db/MultipleEntry.html
+++ b/db/docs/java/com/sleepycat/db/MultipleEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-MultipleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+MultipleEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleEntry class">
@@ -14,9 +14,11 @@ MultipleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MultipleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MultipleEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,16 @@ com.sleepycat.db</FONT>
Class MultipleEntry</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.MultipleEntry</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleEntry</B>
</PRE>
<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A></DD>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>, <A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A></DD>
</DL>
<HR>
<DL>
-<DT>public abstract class <B>MultipleEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></DL>
+<DT><PRE>public abstract class <B>MultipleEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></DL>
+</PRE>
<P>
An abstract class representing a DatabaseEntry that holds multiple results
@@ -113,22 +117,14 @@ subclasses depending on whether you need:
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -143,37 +139,31 @@ subclasses depending on whether you need:
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -183,7 +173,7 @@ setUserBuffer</H3>
public void <B>setUserBuffer</B>(int&nbsp;length,
boolean&nbsp;usermem)</PRE>
<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></CODE></B></DD>
+<DD><B>Description copied from class: <CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setUserBuffer(int, boolean)">DatabaseEntry</A></CODE></B></DD>
<DD>Configures the entry with an application-owned buffer.
<p>
The <code>data</code> field of the entry must refer to a buffer that is
@@ -217,7 +207,7 @@ public void <B>setUserBuffer</B>(int&nbsp;length,
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -233,7 +223,7 @@ public void <B>setUserBuffer</B>(int&nbsp;length,
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -242,7 +232,7 @@ public void <B>setUserBuffer</B>(int&nbsp;length,
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -255,6 +245,7 @@ public void <B>setUserBuffer</B>(int&nbsp;length,
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -268,6 +259,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleKeyDataEntry.html b/db/docs/java/com/sleepycat/db/MultipleKeyDataEntry.html
index 0c0ec2518..a350e7896 100644
--- a/db/docs/java/com/sleepycat/db/MultipleKeyDataEntry.html
+++ b/db/docs/java/com/sleepycat/db/MultipleKeyDataEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-MultipleKeyDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+MultipleKeyDataEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleKeyDataEntry class">
@@ -14,9 +14,11 @@ MultipleKeyDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MultipleKeyDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MultipleKeyDataEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleKeyDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleKeyDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,13 +90,14 @@ com.sleepycat.db</FONT>
Class MultipleKeyDataEntry</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.MultipleKeyDataEntry</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleKeyDataEntry</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>MultipleKeyDataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+<DT><PRE>public class <B>MultipleKeyDataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+</PRE>
<P>
A DatabaseEntry that holds multiple key/data pairs returned by a single
@@ -104,19 +108,14 @@ A DatabaseEntry that holds multiple key/data pairs returned by a single
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry()">MultipleKeyDataEntry</A></B>()</CODE>
@@ -145,8 +144,8 @@ A DatabaseEntry that holds multiple key/data pairs returned by a single
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,7 +160,7 @@ A DatabaseEntry that holds multiple key/data pairs returned by a single
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.MultipleEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)">setUserBuffer</A></CODE></TD>
@@ -170,34 +169,31 @@ A DatabaseEntry that holds multiple key/data pairs returned by a single
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -223,7 +219,9 @@ public <B>MultipleKeyDataEntry</B>(byte[]&nbsp;data)</PRE>
<A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)"><CODE>MultipleEntry.setUserBuffer</CODE></A> method.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the entry.</DL>
+</DL>
<HR>
<A NAME="MultipleKeyDataEntry(byte[], int, int)"><!-- --></A><H3>
@@ -236,15 +234,17 @@ public <B>MultipleKeyDataEntry</B>(byte[]&nbsp;data,
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the DatabaseEntry.<DD><CODE>offset</CODE> - Offset in the first byte in the byte array to be included.<DD><CODE>size</CODE> - Number of bytes in the byte array to be included.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -278,7 +278,7 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -294,16 +294,16 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleKeyDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleKeyDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -316,6 +316,7 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -329,6 +330,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleKeyNIODataEntry.html b/db/docs/java/com/sleepycat/db/MultipleKeyNIODataEntry.html
new file mode 100644
index 000000000..9780e02d2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/MultipleKeyNIODataEntry.html
@@ -0,0 +1,310 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+MultipleKeyNIODataEntry (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleKeyNIODataEntry class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="MultipleKeyNIODataEntry (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MultipleKeyNIODataEntry.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleKeyNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleKeyNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class MultipleKeyNIODataEntry</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleKeyNIODataEntry</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>MultipleKeyNIODataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+</PRE>
+
+<P>
+A DatabaseEntry that holds multiple key/data pairs returned by a single
+<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html#MultipleKeyNIODataEntry()">MultipleKeyNIODataEntry</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an entry with no data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html#MultipleKeyNIODataEntry(java.nio.ByteBuffer)">MultipleKeyNIODataEntry</A></B>(java.nio.ByteBuffer&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an entry with a given java.nio.ByteBuffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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/MultipleKeyNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next key/data pair in the returned set.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.MultipleEntry"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)">setUserBuffer</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="MultipleKeyNIODataEntry()"><!-- --></A><H3>
+MultipleKeyNIODataEntry</H3>
+<PRE>
+public <B>MultipleKeyNIODataEntry</B>()</PRE>
+<DL>
+<DD>Construct an entry with no data. The object must be configured
+ before use with the <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)"><CODE>DatabaseEntry.setDataNIO</CODE></A> method.
+<P>
+</DL>
+<HR>
+
+<A NAME="MultipleKeyNIODataEntry(java.nio.ByteBuffer)"><!-- --></A><H3>
+MultipleKeyNIODataEntry</H3>
+<PRE>
+public <B>MultipleKeyNIODataEntry</B>(java.nio.ByteBuffer&nbsp;data)</PRE>
+<DL>
+<DD>Construct an entry with a given java.nio.ByteBuffer. The offset is
+ set to zero; the size is set to the length of the buffer.
+ <p>
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - ByteBuffer wrapped by the entry.</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+next</H3>
+<PRE>
+public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
+<DL>
+<DD>Get the next key/data pair in the returned set. This method may only
+ be called after a successful call to a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or
+ <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get method with this object as the data parameter.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - an entry that is set to refer to the next key element in the returned
+ set.
+ <p><DD><CODE>data</CODE> - an entry that is set to refer to the next data element in the returned
+ set.
+ <p>
+<DT><B>Returns:</B><DD>indicates whether a value was found. A return of <code>false</code>
+ indicates that the end of the set was reached.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MultipleKeyNIODataEntry.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleKeyNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleKeyNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleNIODataEntry.html b/db/docs/java/com/sleepycat/db/MultipleNIODataEntry.html
new file mode 100644
index 000000000..6e287527f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/MultipleNIODataEntry.html
@@ -0,0 +1,310 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+MultipleNIODataEntry (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleNIODataEntry class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="MultipleNIODataEntry (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MultipleNIODataEntry.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class MultipleNIODataEntry</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleNIODataEntry</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>MultipleNIODataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+</PRE>
+
+<P>
+A DatabaseEntry that holds multiple data items returned by a single
+<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html#MultipleNIODataEntry()">MultipleNIODataEntry</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an entry with no data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html#MultipleNIODataEntry(java.nio.ByteBuffer)">MultipleNIODataEntry</A></B>(java.nio.ByteBuffer&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an entry with a given java.nio.ByteBuffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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/MultipleNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next data element in the returned set.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.MultipleEntry"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)">setUserBuffer</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="MultipleNIODataEntry()"><!-- --></A><H3>
+MultipleNIODataEntry</H3>
+<PRE>
+public <B>MultipleNIODataEntry</B>()</PRE>
+<DL>
+<DD>Construct an entry with no data. The object must be configured
+ before use with the <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)"><CODE>DatabaseEntry.setDataNIO</CODE></A> method.
+<P>
+</DL>
+<HR>
+
+<A NAME="MultipleNIODataEntry(java.nio.ByteBuffer)"><!-- --></A><H3>
+MultipleNIODataEntry</H3>
+<PRE>
+public <B>MultipleNIODataEntry</B>(java.nio.ByteBuffer&nbsp;data)</PRE>
+<DL>
+<DD>Construct an entry with a given java.nio.ByteBuffer. The offset is
+ set to zero; the size is set to the length of the java.nio.ByteBuffer.
+ <p>
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - java.nio.ByteBuffer wrapped by the entry.</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="next(com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+next</H3>
+<PRE>
+public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
+<DL>
+<DD>Get the next data element in the returned set. This method may only
+ be called after a successful call to a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or
+ <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get method with this object as the data parameter.
+ <p>
+ When used with the Queue and Recno access methods,
+ <code>data.getData()<code> will return <code>null</code> for deleted
+ records.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - an entry that is set to refer to the next data element in the returned
+ set.
+ <p>
+<DT><B>Returns:</B><DD>indicates whether a value was found. A return of <code>false</code>
+ indicates that the end of the set was reached.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MultipleNIODataEntry.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleRecnoDataEntry.html b/db/docs/java/com/sleepycat/db/MultipleRecnoDataEntry.html
index c0625d733..925eae48a 100644
--- a/db/docs/java/com/sleepycat/db/MultipleRecnoDataEntry.html
+++ b/db/docs/java/com/sleepycat/db/MultipleRecnoDataEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-MultipleRecnoDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+MultipleRecnoDataEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleRecnoDataEntry class">
@@ -14,9 +14,11 @@ MultipleRecnoDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="MultipleRecnoDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="MultipleRecnoDataEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleRecnoDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleRecnoDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,13 +90,14 @@ com.sleepycat.db</FONT>
Class MultipleRecnoDataEntry</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.MultipleRecnoDataEntry</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleRecnoDataEntry</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>MultipleRecnoDataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+<DT><PRE>public class <B>MultipleRecnoDataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+</PRE>
<P>
A DatabaseEntry that holds multiple record number/data pairs returned by a
@@ -104,19 +108,14 @@ single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sle
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry()">MultipleRecnoDataEntry</A></B>()</CODE>
@@ -145,8 +144,8 @@ single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sle
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,7 +160,7 @@ single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sle
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.MultipleEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)">setUserBuffer</A></CODE></TD>
@@ -170,34 +169,31 @@ single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sle
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -223,7 +219,9 @@ public <B>MultipleRecnoDataEntry</B>(byte[]&nbsp;data)</PRE>
<A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)"><CODE>MultipleEntry.setUserBuffer</CODE></A> method.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the entry.</DL>
+</DL>
<HR>
<A NAME="MultipleRecnoDataEntry(byte[], int, int)"><!-- --></A><H3>
@@ -236,15 +234,17 @@ public <B>MultipleRecnoDataEntry</B>(byte[]&nbsp;data,
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>data</CODE> - Byte array wrapped by the DatabaseEntry.<DD><CODE>offset</CODE> - Offset in the first byte in the byte array to be included.<DD><CODE>size</CODE> - Number of bytes in the byte array to be included.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -282,7 +282,7 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -298,16 +298,16 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleRecnoDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleRecnoDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -320,6 +320,7 @@ public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -333,6 +334,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MultipleRecnoNIODataEntry.html b/db/docs/java/com/sleepycat/db/MultipleRecnoNIODataEntry.html
new file mode 100644
index 000000000..b8e7a164f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/MultipleRecnoNIODataEntry.html
@@ -0,0 +1,314 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+MultipleRecnoNIODataEntry (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.MultipleRecnoNIODataEntry class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="MultipleRecnoNIODataEntry (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MultipleRecnoNIODataEntry.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleRecnoNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleRecnoNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class MultipleRecnoNIODataEntry</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">com.sleepycat.db.MultipleEntry</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MultipleRecnoNIODataEntry</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>MultipleRecnoNIODataEntry</B><DT>extends <A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></DL>
+</PRE>
+
+<P>
+A DatabaseEntry that holds multiple record number/data pairs returned by a
+single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html#MultipleRecnoNIODataEntry()">MultipleRecnoNIODataEntry</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an entry with no data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html#MultipleRecnoNIODataEntry(java.nio.ByteBuffer)">MultipleRecnoNIODataEntry</A></B>(java.nio.ByteBuffer&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an entry with a given java.nio.ByteBuffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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/MultipleRecnoNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;recno,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next record number/data pair in the returned set.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.MultipleEntry"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)">setUserBuffer</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseEntry"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getDataNIO()">getDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartial()">getPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()">getReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBuffer()">getUserBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#hashCode()">hashCode</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)">setData</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)">setDataNIO</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)">setPartial</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)">setReuseBuffer</A>, <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setSize(int)">setSize</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="MultipleRecnoNIODataEntry()"><!-- --></A><H3>
+MultipleRecnoNIODataEntry</H3>
+<PRE>
+public <B>MultipleRecnoNIODataEntry</B>()</PRE>
+<DL>
+<DD>Construct an entry with no data. The object must be configured
+ before use with the <A HREF="../../../com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)"><CODE>DatabaseEntry.setDataNIO</CODE></A> method.
+<P>
+</DL>
+<HR>
+
+<A NAME="MultipleRecnoNIODataEntry(java.nio.ByteBuffer)"><!-- --></A><H3>
+MultipleRecnoNIODataEntry</H3>
+<PRE>
+public <B>MultipleRecnoNIODataEntry</B>(java.nio.ByteBuffer&nbsp;data)</PRE>
+<DL>
+<DD>Construct an entry with a given java.nio.ByteBuffer. The offset is
+ set to zero; the size is set to the length of the java.nio.ByteBuffer.
+ <p>
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - java.nio.ByteBuffer wrapped by the entry.</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
+next</H3>
+<PRE>
+public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;recno,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</PRE>
+<DL>
+<DD>Get the next record number/data pair in the returned set. This method
+ may only be called after a successful call to a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or
+ <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get method with this object as the data parameter.
+ <p>
+ When used with the Queue and Recno access methods,
+ <code>data.getData()<code> will return <code>null</code> for deleted
+ records.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>recno</CODE> - an entry that is set to refer to the next record number in the returned
+ set.
+ <p><DD><CODE>data</CODE> - an entry that is set to refer to the next data element in the returned
+ set.
+ <p>
+<DT><B>Returns:</B><DD>indicates whether a value was found. A return of <code>false</code>
+ indicates that the end of the set was reached.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MultipleRecnoNIODataEntry.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MultipleRecnoNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleRecnoNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/MutexStats.html b/db/docs/java/com/sleepycat/db/MutexStats.html
new file mode 100644
index 000000000..381838419
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/MutexStats.html
@@ -0,0 +1,421 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+MutexStats (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.MutexStats class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="MutexStats (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MutexStats.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MutexStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutexStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class MutexStats</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.MutexStats</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>MutexStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Statistics about mutexes in a Berkeley DB database environment, returned
+by <A HREF="../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)"><CODE>Environment.getMutexStats(com.sleepycat.db.StatsConfig)</CODE></A>
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MutexStats.html#getMutexAlign()">getMutexAlign</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The mutex alignment, 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/MutexStats.html#getMutexCount()">getMutexCount</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of mutexes 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/MutexStats.html#getMutexFree()">getMutexFree</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of mutexes currently available.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MutexStats.html#getMutexInuse()">getMutexInuse</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of mutexes 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/MutexStats.html#getMutexInuseMax()">getMutexInuseMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of mutexes ever 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/MutexStats.html#getMutexTasSpins()">getMutexTasSpins</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times test-and-set mutexes will spin without blocking.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MutexStats.html#getRegionNowait()">getRegionNowait</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 mutex region mutex 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/MutexStats.html#getRegionWait()">getRegionWait</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 mutex region mutex.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MutexStats.html#getRegSize()">getRegSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The size of the mutex region, 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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/MutexStats.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For convenience, the MutexStats class has a toString method that lists
+ all the data fields.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getMutexAlign()"><!-- --></A><H3>
+getMutexAlign</H3>
+<PRE>
+public int <B>getMutexAlign</B>()</PRE>
+<DL>
+<DD>The mutex alignment, in bytes.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexTasSpins()"><!-- --></A><H3>
+getMutexTasSpins</H3>
+<PRE>
+public int <B>getMutexTasSpins</B>()</PRE>
+<DL>
+<DD>The number of times test-and-set mutexes will spin without blocking.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexCount()"><!-- --></A><H3>
+getMutexCount</H3>
+<PRE>
+public int <B>getMutexCount</B>()</PRE>
+<DL>
+<DD>The total number of mutexes configured.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexFree()"><!-- --></A><H3>
+getMutexFree</H3>
+<PRE>
+public int <B>getMutexFree</B>()</PRE>
+<DL>
+<DD>The number of mutexes currently available.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexInuse()"><!-- --></A><H3>
+getMutexInuse</H3>
+<PRE>
+public int <B>getMutexInuse</B>()</PRE>
+<DL>
+<DD>The number of mutexes currently in use.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMutexInuseMax()"><!-- --></A><H3>
+getMutexInuseMax</H3>
+<PRE>
+public int <B>getMutexInuseMax</B>()</PRE>
+<DL>
+<DD>The maximum number of mutexes ever in use.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRegionWait()"><!-- --></A><H3>
+getRegionWait</H3>
+<PRE>
+public int <B>getRegionWait</B>()</PRE>
+<DL>
+<DD>The number of times that a thread of control was forced to wait before
+ obtaining the mutex region mutex.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRegionNowait()"><!-- --></A><H3>
+getRegionNowait</H3>
+<PRE>
+public int <B>getRegionNowait</B>()</PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain
+ the mutex region mutex without waiting.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRegSize()"><!-- --></A><H3>
+getRegSize</H3>
+<PRE>
+public int <B>getRegSize</B>()</PRE>
+<DL>
+<DD>The size of the mutex region, in bytes.
+<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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>For convenience, the MutexStats class has a toString method that lists
+ all the data fields.
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/MutexStats.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/MutexStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutexStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/OperationStatus.html b/db/docs/java/com/sleepycat/db/OperationStatus.html
index ca870bdf4..c9ccaf5e9 100644
--- a/db/docs/java/com/sleepycat/db/OperationStatus.html
+++ b/db/docs/java/com/sleepycat/db/OperationStatus.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-OperationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)
+OperationStatus (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.OperationStatus class">
@@ -14,9 +14,11 @@ OperationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="OperationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="OperationStatus (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/OperationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="OperationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class OperationStatus</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.OperationStatus</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.OperationStatus</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>OperationStatus</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>OperationStatus</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Status values from database operations.
@@ -101,16 +105,13 @@ Status values from database operations.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -148,18 +149,30 @@ Status values from database operations.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/OperationStatus.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -170,8 +183,8 @@ Status values from database operations.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -224,11 +237,30 @@ public static final <A HREF="../../../com/sleepycat/db/OperationStatus.html" tit
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -238,7 +270,7 @@ public static final <A HREF="../../../com/sleepycat/db/OperationStatus.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -254,16 +286,16 @@ public static final <A HREF="../../../com/sleepycat/db/OperationStatus.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/OperationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="OperationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -276,19 +308,20 @@ public static final <A HREF="../../../com/sleepycat/db/OperationStatus.html" tit
<A HREF="../../../allclasses-noframe.html"><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>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&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;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/PanicHandler.html b/db/docs/java/com/sleepycat/db/PanicHandler.html
index d98a40f4d..52a52465f 100644
--- a/db/docs/java/com/sleepycat/db/PanicHandler.html
+++ b/db/docs/java/com/sleepycat/db/PanicHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-PanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+PanicHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.PanicHandler interface">
@@ -14,9 +14,11 @@ PanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="PanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="PanicHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/PanicHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PanicHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface PanicHandler</H2>
<HR>
<DL>
-<DT>public interface <B>PanicHandler</B></DL>
+<DT><PRE>public interface <B>PanicHandler</B></DL>
+</PRE>
<P>
An interface specifying a function to be called if the database
@@ -98,22 +102,14 @@ environment panics.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -128,27 +124,21 @@ environment panics.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="panic(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseException)"><!-- --></A><H3>
panic</H3>
<PRE>
-public void <B>panic</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>&nbsp;e)</PRE>
+void <B>panic</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>&nbsp;e)</PRE>
<DL>
<DD>A function to be called if the database environment panics.
<p>
@@ -179,7 +169,7 @@ public void <B>panic</B>(<A HREF="../../../com/sleepycat/db/Environment.html" ti
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -195,16 +185,16 @@ public void <B>panic</B>(<A HREF="../../../com/sleepycat/db/Environment.html" ti
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/PanicHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PanicHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -217,6 +207,7 @@ public void <B>panic</B>(<A HREF="../../../com/sleepycat/db/Environment.html" ti
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -230,6 +221,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/PreparedTransaction.html b/db/docs/java/com/sleepycat/db/PreparedTransaction.html
index f3206b112..901bd2bef 100644
--- a/db/docs/java/com/sleepycat/db/PreparedTransaction.html
+++ b/db/docs/java/com/sleepycat/db/PreparedTransaction.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-PreparedTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+PreparedTransaction (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.PreparedTransaction class">
@@ -14,9 +14,11 @@ PreparedTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="PreparedTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="PreparedTransaction (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/PreparedTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PreparedTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class PreparedTransaction</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.PreparedTransaction</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.PreparedTransaction</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>PreparedTransaction</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>PreparedTransaction</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The PreparedTransaction object is used to encapsulate a single prepared,
@@ -102,22 +106,14 @@ but not yet resolved, transaction.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,28 +135,22 @@ but not yet resolved, transaction.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -205,7 +195,7 @@ public <A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -221,16 +211,16 @@ public <A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/PreparedTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PreparedTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -243,6 +233,7 @@ public <A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -256,6 +247,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/QueueStats.html b/db/docs/java/com/sleepycat/db/QueueStats.html
index 7ca8060b3..4a82848d4 100644
--- a/db/docs/java/com/sleepycat/db/QueueStats.html
+++ b/db/docs/java/com/sleepycat/db/QueueStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-QueueStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+QueueStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.QueueStats class">
@@ -14,9 +14,11 @@ QueueStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="QueueStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="QueueStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/QueueStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="QueueStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,12 +90,13 @@ com.sleepycat.db</FONT>
Class QueueStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseStats</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.QueueStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseStats</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.QueueStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>QueueStats</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></DL>
+<DT><PRE>public class <B>QueueStats</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></DL>
+</PRE>
<P>
The QueueStats object is used to return Queue database statistics.
@@ -102,22 +106,14 @@ The QueueStats object is used to return Queue database statistics.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -236,28 +232,22 @@ The QueueStats object is used to return Queue database statistics.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -455,6 +445,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
that lists all the data fields.
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -467,7 +460,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -483,16 +476,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/QueueStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="QueueStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -505,6 +498,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -518,6 +512,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/RecordNumberAppender.html b/db/docs/java/com/sleepycat/db/RecordNumberAppender.html
index b1525f551..82b0380e8 100644
--- a/db/docs/java/com/sleepycat/db/RecordNumberAppender.html
+++ b/db/docs/java/com/sleepycat/db/RecordNumberAppender.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-RecordNumberAppender (Sleepycat Software, Inc. - Berkeley DB Java API)
+RecordNumberAppender (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.RecordNumberAppender interface">
@@ -14,9 +14,11 @@ RecordNumberAppender (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="RecordNumberAppender (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="RecordNumberAppender (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/RecordNumberAppender.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberAppender.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface RecordNumberAppender</H2>
<HR>
<DL>
-<DT>public interface <B>RecordNumberAppender</B></DL>
+<DT><PRE>public interface <B>RecordNumberAppender</B></DL>
+</PRE>
<P>
An interface specifying a callback function that modifies stored data
@@ -98,22 +102,14 @@ based on a generated key.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -130,28 +126,22 @@ based on a generated key.
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)"><!-- --></A><H3>
appendRecordNumber</H3>
<PRE>
-public void <B>appendRecordNumber</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- int&nbsp;recno)
+void <B>appendRecordNumber</B>(<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ int&nbsp;recno)
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>A callback function to modify the stored database based on the
@@ -186,7 +176,7 @@ public void <B>appendRecordNumber</B>(<A HREF="../../../com/sleepycat/db/Databas
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -202,16 +192,16 @@ public void <B>appendRecordNumber</B>(<A HREF="../../../com/sleepycat/db/Databas
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/RecordNumberAppender.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberAppender.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -224,6 +214,7 @@ public void <B>appendRecordNumber</B>(<A HREF="../../../com/sleepycat/db/Databas
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -237,6 +228,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/RecoveryOperation.html b/db/docs/java/com/sleepycat/db/RecoveryOperation.html
index a01a367a7..37707c2ef 100644
--- a/db/docs/java/com/sleepycat/db/RecoveryOperation.html
+++ b/db/docs/java/com/sleepycat/db/RecoveryOperation.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-RecoveryOperation (Sleepycat Software, Inc. - Berkeley DB Java API)
+RecoveryOperation (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.RecoveryOperation class">
@@ -14,9 +14,11 @@ RecoveryOperation (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="RecoveryOperation (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="RecoveryOperation (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/RecoveryOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecoveryOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class RecoveryOperation</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.RecoveryOperation</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.RecoveryOperation</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>RecoveryOperation</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>RecoveryOperation</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The recovery operation being performed when <A HREF="../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><CODE>LogRecordHandler.handleLogRecord</CODE></A> is called.
@@ -101,16 +105,13 @@ The recovery operation being performed when <A HREF="../../../com/sleepycat/db/L
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,16 +161,13 @@ The recovery operation being performed when <A HREF="../../../com/sleepycat/db/L
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -180,14 +178,22 @@ The recovery operation being performed when <A HREF="../../../com/sleepycat/db/L
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internal: this is public only so it can be called from an internal
package.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/RecoveryOperation.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -198,8 +204,8 @@ The recovery operation being performed when <A HREF="../../../com/sleepycat/db/L
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -280,19 +286,32 @@ public static final <A HREF="../../../com/sleepycat/db/RecoveryOperation.html" t
</DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="fromFlag(int)"><!-- --></A><H3>
fromFlag</H3>
<PRE>
@@ -314,7 +333,7 @@ public static <A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -330,16 +349,16 @@ public static <A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/RecoveryOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecoveryOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -352,6 +371,7 @@ public static <A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -365,6 +385,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationConfig.html b/db/docs/java/com/sleepycat/db/ReplicationConfig.html
new file mode 100644
index 000000000..db1694871
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationConfig.html
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationConfig (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationConfig class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationConfig (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationConfig.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationConfig</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ReplicationConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
+
+<P>
+Settings that configure Berkeley DB replication.
+Used in the <A HREF="../../../com/sleepycat/db/Environment.html#setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)"><CODE>Environment.setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)</CODE></A> method.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationConfig.html#BULK">BULK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The replication master should send groups of records to the clients in a
+ single network transfer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationConfig.html#DELAYCLIENT">DELAYCLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The client should delay synchronizing to a newly declared master
+ (defaults to off).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT">NOAUTOINIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The replication master should not automatically re-initialize outdated
+ clients.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationConfig.html#NOWAIT">NOWAIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Berkeley DB method calls that would normally block while clients are in
+ recovery should return errors immediately.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationConfig.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="BULK"><!-- --></A><H3>
+BULK</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A> <B>BULK</B></PRE>
+<DL>
+<DD>The replication master should send groups of records to the clients in a
+ single network transfer.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DELAYCLIENT"><!-- --></A><H3>
+DELAYCLIENT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A> <B>DELAYCLIENT</B></PRE>
+<DL>
+<DD>The client should delay synchronizing to a newly declared master
+ (defaults to off). Clients configured in this way will remain
+ unsynchronized until the application calls the
+ <A HREF="../../../com/sleepycat/db/Environment.html#syncReplication()"><CODE>Environment.syncReplication()</CODE></A> method.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="NOAUTOINIT"><!-- --></A><H3>
+NOAUTOINIT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A> <B>NOAUTOINIT</B></PRE>
+<DL>
+<DD>The replication master should not automatically re-initialize outdated
+ clients.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="NOWAIT"><!-- --></A><H3>
+NOWAIT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A> <B>NOWAIT</B></PRE>
+<DL>
+<DD>Berkeley DB method calls that would normally block while clients are in
+ recovery should return errors immediately.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationConfig.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationDuplicateMasterException.html b/db/docs/java/com/sleepycat/db/ReplicationDuplicateMasterException.html
new file mode 100644
index 000000000..4347f835c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationDuplicateMasterException.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationDuplicateMasterException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationDuplicateMasterException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationDuplicateMasterException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationDuplicateMasterException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationDuplicateMasterException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationDuplicateMasterException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationDuplicateMasterException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationDuplicateMasterException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ReplicationDuplicateMasterException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+The replication group has more than one master. The application should
+reconfigure itself as a client by calling the
+<A HREF="../../../com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Environment.startReplication</CODE></A> method, and then call for an election by
+calling <A HREF="../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int)"><CODE>Environment.electReplicationMaster</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.ReplicationDuplicateMasterException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationDuplicateMasterException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationDuplicateMasterException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationDuplicateMasterException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationHandleDeadException.html b/db/docs/java/com/sleepycat/db/ReplicationHandleDeadException.html
index e8eeaf595..38736bd9c 100644
--- a/db/docs/java/com/sleepycat/db/ReplicationHandleDeadException.html
+++ b/db/docs/java/com/sleepycat/db/ReplicationHandleDeadException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ReplicationHandleDeadException (Sleepycat Software, Inc. - Berkeley DB Java API)
+ReplicationHandleDeadException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationHandleDeadException class">
@@ -14,9 +14,11 @@ ReplicationHandleDeadException (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ReplicationHandleDeadException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ReplicationHandleDeadException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationHandleDeadException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationHandleDeadException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,17 +90,18 @@ com.sleepycat.db</FONT>
Class ReplicationHandleDeadException</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.ReplicationHandleDeadException</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationHandleDeadException</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" title="class or interface in java.io">Serializable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>ReplicationHandleDeadException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+<DT><PRE>public class <B>ReplicationHandleDeadException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
<P>
Thrown when a database handle has been invalidated because a replication
@@ -116,55 +120,45 @@ resources.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -174,7 +168,7 @@ resources.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -190,16 +184,16 @@ resources.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationHandleDeadException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationHandleDeadException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -212,6 +206,7 @@ resources.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -225,6 +220,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationHoldElectionException.html b/db/docs/java/com/sleepycat/db/ReplicationHoldElectionException.html
new file mode 100644
index 000000000..f228c686c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationHoldElectionException.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationHoldElectionException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationHoldElectionException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationHoldElectionException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationHoldElectionException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationHoldElectionException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHoldElectionException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationHoldElectionException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationHoldElectionException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ReplicationHoldElectionException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+An election is needed. The application should call for an election by calling
+<A HREF="../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int)"><CODE>Environment.electReplicationMaster</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.ReplicationHoldElectionException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationHoldElectionException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationHoldElectionException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHoldElectionException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationHostAddress.html b/db/docs/java/com/sleepycat/db/ReplicationHostAddress.html
new file mode 100644
index 000000000..43d24cf9e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationHostAddress.html
@@ -0,0 +1,368 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationHostAddress (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationHostAddress class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationHostAddress (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationHostAddress.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationHostAddress.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHostAddress.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationHostAddress</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationHostAddress</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>ReplicationHostAddress</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A simple wrapper class to hold information needed to define
+a host in a replication group.
+<p>
+The ReplicationHostAddress can be used to refer to the current
+site, or to a remote site in the replication group.
+<p>
+Used in the <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#replicationManagerAddRemoteSite(com.sleepycat.db.ReplicationHostAddress)"><CODE>EnvironmentConfig.replicationManagerAddRemoteSite</CODE></A>
+and the <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setReplicationManagerLocalSite(com.sleepycat.db.ReplicationHostAddress)"><CODE>EnvironmentConfig.setReplicationManagerLocalSite</CODE></A>
+methods.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html#host">host</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The name component of the site address.</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/ReplicationHostAddress.html#isPeer">isPeer</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This field is used to define if the HostAddress refers to a peer of the
+ current site, or not.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html#port">port</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The network port component of the site address.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html#ReplicationHostAddress()">ReplicationHostAddress</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a ReplicationHostAddress with default settings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html#ReplicationHostAddress(java.lang.String, int)">ReplicationHostAddress</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;host,
+ int&nbsp;port)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a ReplicationHostAddress.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html#ReplicationHostAddress(java.lang.String, int, boolean)">ReplicationHostAddress</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;host,
+ int&nbsp;port,
+ boolean&nbsp;isPeer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a ReplicationHostAddress.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="port"><!-- --></A><H3>
+port</H3>
+<PRE>
+public int <B>port</B></PRE>
+<DL>
+<DD>The network port component of the site address.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="host"><!-- --></A><H3>
+host</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>host</B></PRE>
+<DL>
+<DD>The name component of the site address. Can be a fully qualified
+ name, or a dotted format address in String format.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="isPeer"><!-- --></A><H3>
+isPeer</H3>
+<PRE>
+public boolean <B>isPeer</B></PRE>
+<DL>
+<DD>This field is used to define if the HostAddress refers to a peer of the
+ current site, or not.
+ The default is false.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ReplicationHostAddress()"><!-- --></A><H3>
+ReplicationHostAddress</H3>
+<PRE>
+public <B>ReplicationHostAddress</B>()</PRE>
+<DL>
+<DD>Create a ReplicationHostAddress with default settings.
+ <p>
+ This is likely not what you want. The current default is
+ host: localhost and port 0.
+ <p>
+ Only use this constructor if you plan to configure the object
+ fields manually after construction.
+<P>
+</DL>
+<HR>
+
+<A NAME="ReplicationHostAddress(java.lang.String, int)"><!-- --></A><H3>
+ReplicationHostAddress</H3>
+<PRE>
+public <B>ReplicationHostAddress</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;host,
+ int&nbsp;port)</PRE>
+<DL>
+<DD>Create a ReplicationHostAddress.
+ <p>
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>host</CODE> - A string representation of the hostname this address refers to.<DD><CODE>port</CODE> - The port number the address will refer to.</DL>
+</DL>
+<HR>
+
+<A NAME="ReplicationHostAddress(java.lang.String, int, boolean)"><!-- --></A><H3>
+ReplicationHostAddress</H3>
+<PRE>
+public <B>ReplicationHostAddress</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;host,
+ int&nbsp;port,
+ boolean&nbsp;isPeer)</PRE>
+<DL>
+<DD>Create a ReplicationHostAddress.
+ <p>
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>host</CODE> - A string representation of the hostname this address refers to.<DD><CODE>port</CODE> - The port number the address will refer to.<DD><CODE>isPeer</CODE> - Explicitly specify that this address refers to a replication site
+ that is a peer of the current site.</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationHostAddress.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationHostAddress.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHostAddress.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationJoinFailureException.html b/db/docs/java/com/sleepycat/db/ReplicationJoinFailureException.html
new file mode 100644
index 000000000..888815762
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationJoinFailureException.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationJoinFailureException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationJoinFailureException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationJoinFailureException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationJoinFailureException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationJoinFailureException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationJoinFailureException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationJoinFailureException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationJoinFailureException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ReplicationJoinFailureException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+Thrown if a new master has been chosen but the client is unable to synchronize
+with the new master (possibly because the client has been configured
+with the <A HREF="../../../com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT"><CODE>ReplicationConfig.NOAUTOINIT</CODE></A> setting to turn-off automatic
+internal initialization).
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.ReplicationJoinFailureException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationJoinFailureException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationJoinFailureException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationJoinFailureException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationLockoutException.html b/db/docs/java/com/sleepycat/db/ReplicationLockoutException.html
new file mode 100644
index 000000000..a37cf2c40
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationLockoutException.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationLockoutException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationLockoutException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationLockoutException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationLockoutException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationLockoutException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationLockoutException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationLockoutException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationLockoutException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ReplicationLockoutException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+Thrown when an operation was blocked by client/master synchronization.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.ReplicationLockoutException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationLockoutException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationLockoutException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationLockoutException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationManagerAckPolicy.html b/db/docs/java/com/sleepycat/db/ReplicationManagerAckPolicy.html
new file mode 100644
index 000000000..66403b8e6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationManagerAckPolicy.html
@@ -0,0 +1,392 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationManagerAckPolicy (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationManagerAckPolicy class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationManagerAckPolicy (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationManagerAckPolicy.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationManagerAckPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerAckPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationManagerAckPolicy</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationManagerAckPolicy</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ReplicationManagerAckPolicy</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A class that provides definitions for the types of network ack policy
+to use when transmitting messages between replication sites using the
+Replication Manager.
+<p>
+Set using the <A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setReplicationManagerAckPolicy(com.sleepycat.db.ReplicationManagerAckPolicy)"><CODE>EnvironmentConfig.setReplicationManagerAckPolicy</CODE></A> API.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ALL">ALL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until all replication clients have acknowledged
+ each permanent replication message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ALL_PEERS">ALL_PEERS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until all electable peers have acknowledged
+ each permanent replication message (where "electable peer" means a
+ client capable of being subsequently elected master of the
+ replication group).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#NONE">NONE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should not wait for any client replication message
+ acknowledgments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ONE">ONE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until at least one client site has acknowledged
+ each permanent replication message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ONE_PEER">ONE_PEER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until at least one electable peer has acknowledged
+ each permanent replication message (where "electable peer" means a client
+ capable of being subsequently elected master of the replication group).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#QUORUM">QUORUM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until it has received acknowledgements from the
+ minimum number of electable peers sufficient to ensure that the effect
+ of the permanent record remains durable if an election is held (where
+ "electable peer" means a client capable of being subsequently elected
+ master of the replication group).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ALL"><!-- --></A><H3>
+ALL</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>ALL</B></PRE>
+<DL>
+<DD>The master should wait until all replication clients have acknowledged
+ each permanent replication message.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="ALL_PEERS"><!-- --></A><H3>
+ALL_PEERS</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>ALL_PEERS</B></PRE>
+<DL>
+<DD>The master should wait until all electable peers have acknowledged
+ each permanent replication message (where "electable peer" means a
+ client capable of being subsequently elected master of the
+ replication group).
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="NONE"><!-- --></A><H3>
+NONE</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>NONE</B></PRE>
+<DL>
+<DD>The master should not wait for any client replication message
+ acknowledgments.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="ONE"><!-- --></A><H3>
+ONE</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>ONE</B></PRE>
+<DL>
+<DD>The master should wait until at least one client site has acknowledged
+ each permanent replication message.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="ONE_PEER"><!-- --></A><H3>
+ONE_PEER</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>ONE_PEER</B></PRE>
+<DL>
+<DD>The master should wait until at least one electable peer has acknowledged
+ each permanent replication message (where "electable peer" means a client
+ capable of being subsequently elected master of the replication group).
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="QUORUM"><!-- --></A><H3>
+QUORUM</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> <B>QUORUM</B></PRE>
+<DL>
+<DD>The master should wait until it has received acknowledgements from the
+ minimum number of electable peers sufficient to ensure that the effect
+ of the permanent record remains durable if an election is held (where
+ "electable peer" means a client capable of being subsequently elected
+ master of the replication group). This is the default acknowledgement
+ policy.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationManagerAckPolicy.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationManagerAckPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerAckPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationManagerStartPolicy.html b/db/docs/java/com/sleepycat/db/ReplicationManagerStartPolicy.html
new file mode 100644
index 000000000..2c16146a8
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationManagerStartPolicy.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationManagerStartPolicy (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationManagerStartPolicy class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationManagerStartPolicy (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationManagerStartPolicy.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationManagerStartPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerStartPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationManagerStartPolicy</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationManagerStartPolicy</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ReplicationManagerStartPolicy</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+This class provides definitions of the various start policies that
+can be specified when starting a replication client using the
+<A HREF="../../../com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)"><CODE>Environment.replicationManagerStart</CODE></A> call.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_CLIENT">REP_CLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a client site, and do not call for an election.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_ELECTION">REP_ELECTION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a client, and call for an election if no master is found.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_FULL_ELECTION">REP_FULL_ELECTION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a client, and call for an election if no master is found.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_MASTER">REP_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a master site, and do not call for an election.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="REP_CLIENT"><!-- --></A><H3>
+REP_CLIENT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A> <B>REP_CLIENT</B></PRE>
+<DL>
+<DD>Start as a client site, and do not call for an election.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REP_ELECTION"><!-- --></A><H3>
+REP_ELECTION</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A> <B>REP_ELECTION</B></PRE>
+<DL>
+<DD>Start as a client, and call for an election if no master is found.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REP_FULL_ELECTION"><!-- --></A><H3>
+REP_FULL_ELECTION</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A> <B>REP_FULL_ELECTION</B></PRE>
+<DL>
+<DD>Start as a client, and call for an election if no master is found.
+ <p>
+ The DB_REP_FULL_ELECTION flag configures a single special election on
+ startup, where a master will only be confirmed if all members of the
+ replication group vote. Subsequent elections will revert to only
+ requiring a simple majority to elect a new master.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REP_MASTER"><!-- --></A><H3>
+REP_MASTER</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A> <B>REP_MASTER</B></PRE>
+<DL>
+<DD>Start as a master site, and do not call for an election. Note there must
+ never be more than a single master in any replication group, and only one
+ site should ever be started with the DB_REP_MASTER flag specified.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationManagerStartPolicy.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationManagerStartPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerStartPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationSiteUnavailableException.html b/db/docs/java/com/sleepycat/db/ReplicationSiteUnavailableException.html
new file mode 100644
index 000000000..37b3f8b88
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationSiteUnavailableException.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationSiteUnavailableException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationSiteUnavailableException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationSiteUnavailableException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationSiteUnavailableException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationSiteUnavailableException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationSiteUnavailableException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationSiteUnavailableException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationSiteUnavailableException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>ReplicationSiteUnavailableException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+Thrown if replication group was unable to elect a master, or was unable to
+complete the election in the specified timeout period.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.ReplicationSiteUnavailableException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationSiteUnavailableException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationSiteUnavailableException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationSiteUnavailableException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationStats.html b/db/docs/java/com/sleepycat/db/ReplicationStats.html
index 91a656524..96c58ed0f 100644
--- a/db/docs/java/com/sleepycat/db/ReplicationStats.html
+++ b/db/docs/java/com/sleepycat/db/ReplicationStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ReplicationStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+ReplicationStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationStats class">
@@ -14,9 +14,11 @@ ReplicationStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ReplicationStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ReplicationStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class ReplicationStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.ReplicationStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>ReplicationStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>ReplicationStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Replication statistics for a database environment.
@@ -101,22 +105,77 @@ Replication statistics for a database environment.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- ========== METHOD SUMMARY =========== -->
-<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html#getBulkFills()">getBulkFills</A></B>()</CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times the bulk buffer filled up, forcing the buffer content
+ to be 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/ReplicationStats.html#getBulkOverflows()">getBulkOverflows</A></B>()</CODE>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times a record was bigger than the entire bulk buffer,
+ and therefore had to be sent as a singleton.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html#getBulkRecords()">getBulkRecords</A></B>()</CODE>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of records added to a bulk 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/db/ReplicationStats.html#getBulkTransfers()">getBulkTransfers</A></B>()</CODE>
-<!-- ========== METHOD SUMMARY =========== -->
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bulk buffers transferred (via a call to the
+ application's <A HREF="../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)"><CODE>ReplicationTransport.send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)</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/ReplicationStats.html#getClientRerequests()">getClientRerequests</A></B>()</CODE>
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times this client site received a "re-request" message,
+ indicating that a request it previously sent to another client could
+ not be serviced by that client.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html#getClientSvcMiss()">getClientSvcMiss</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of "request" type messages received by this client that
+ could not be processed, forcing the originating requestor to try
+ sending the request to the master (or another client).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html#getClientSvcReq()">getClientSvcReq</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of "request" type messages received by this client.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,6 +252,15 @@ Replication statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html#getElectionSec()">getElectionSec</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of seconds the last election took (the total election
+ time is this plus <A HREF="../../../com/sleepycat/db/ReplicationStats.html#getElectionUsec()"><CODE>getElectionUsec()</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/db/ReplicationStats.html#getElectionStatus()">getElectionStatus</A></B>()</CODE>
<BR>
@@ -217,6 +285,15 @@ Replication statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html#getElectionUsec()">getElectionUsec</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of microseconds the last election took (the total election
+ time is this plus <A HREF="../../../com/sleepycat/db/ReplicationStats.html#getElectionSec()"><CODE>getElectionSec()</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/db/ReplicationStats.html#getElectionVotes()">getElectionVotes</A></B>()</CODE>
<BR>
@@ -479,28 +556,22 @@ Replication statistics for a database environment.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -614,6 +685,108 @@ public int <B>getEnvPriority</B>()</PRE>
</DL>
<HR>
+<A NAME="getBulkFills()"><!-- --></A><H3>
+getBulkFills</H3>
+<PRE>
+public int <B>getBulkFills</B>()</PRE>
+<DL>
+<DD>The number of times the bulk buffer filled up, forcing the buffer content
+ to be sent.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBulkOverflows()"><!-- --></A><H3>
+getBulkOverflows</H3>
+<PRE>
+public int <B>getBulkOverflows</B>()</PRE>
+<DL>
+<DD>The number of times a record was bigger than the entire bulk buffer,
+ and therefore had to be sent as a singleton.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBulkRecords()"><!-- --></A><H3>
+getBulkRecords</H3>
+<PRE>
+public int <B>getBulkRecords</B>()</PRE>
+<DL>
+<DD>The number of records added to a bulk buffer.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBulkTransfers()"><!-- --></A><H3>
+getBulkTransfers</H3>
+<PRE>
+public int <B>getBulkTransfers</B>()</PRE>
+<DL>
+<DD>The number of bulk buffers transferred (via a call to the
+ application's <A HREF="../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)"><CODE>ReplicationTransport.send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)</CODE></A> method).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClientRerequests()"><!-- --></A><H3>
+getClientRerequests</H3>
+<PRE>
+public int <B>getClientRerequests</B>()</PRE>
+<DL>
+<DD>The number of times this client site received a "re-request" message,
+ indicating that a request it previously sent to another client could
+ not be serviced by that client. (Compare to <A HREF="../../../com/sleepycat/db/ReplicationStats.html#getClientSvcMiss()"><CODE>getClientSvcMiss()</CODE></A>.)
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClientSvcReq()"><!-- --></A><H3>
+getClientSvcReq</H3>
+<PRE>
+public int <B>getClientSvcReq</B>()</PRE>
+<DL>
+<DD>The number of "request" type messages received by this client.
+ ("Request" messages are usually sent from a client to the master, but
+ a message marked with <code>anywhere = true</code> in the
+ invocation of the application's <A HREF="../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)"><CODE>ReplicationTransport.send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)</CODE></A>
+ method may be sent to another client instead.)
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClientSvcMiss()"><!-- --></A><H3>
+getClientSvcMiss</H3>
+<PRE>
+public int <B>getClientSvcMiss</B>()</PRE>
+<DL>
+<DD>The number of "request" type messages received by this client that
+ could not be processed, forcing the originating requestor to try
+ sending the request to the master (or another client).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getGen()"><!-- --></A><H3>
getGen</H3>
<PRE>
@@ -1072,6 +1245,34 @@ public int <B>getElectionVotes</B>()</PRE>
</DL>
<HR>
+<A NAME="getElectionSec()"><!-- --></A><H3>
+getElectionSec</H3>
+<PRE>
+public int <B>getElectionSec</B>()</PRE>
+<DL>
+<DD>The number of seconds the last election took (the total election
+ time is this plus <A HREF="../../../com/sleepycat/db/ReplicationStats.html#getElectionUsec()"><CODE>getElectionUsec()</CODE></A>).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getElectionUsec()"><!-- --></A><H3>
+getElectionUsec</H3>
+<PRE>
+public int <B>getElectionUsec</B>()</PRE>
+<DL>
+<DD>The number of microseconds the last election took (the total election
+ time is this plus <A HREF="../../../com/sleepycat/db/ReplicationStats.html#getElectionSec()"><CODE>getElectionSec()</CODE></A>).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="toString()"><!-- --></A><H3>
toString</H3>
<PRE>
@@ -1081,6 +1282,9 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
that lists all the data fields.
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -1093,7 +1297,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1109,16 +1313,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1131,6 +1335,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -1144,6 +1349,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationStatus.html b/db/docs/java/com/sleepycat/db/ReplicationStatus.html
index 77f8275ce..f76a18fcd 100644
--- a/db/docs/java/com/sleepycat/db/ReplicationStatus.html
+++ b/db/docs/java/com/sleepycat/db/ReplicationStatus.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ReplicationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)
+ReplicationStatus (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationStatus class">
@@ -14,9 +14,11 @@ ReplicationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ReplicationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ReplicationStatus (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class ReplicationStatus</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.ReplicationStatus</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationStatus</B>
</PRE>
<HR>
<DL>
-<DT>public final class <B>ReplicationStatus</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public final class <B>ReplicationStatus</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The return status from processing a replication message.
@@ -101,22 +105,14 @@ The return status from processing a replication message.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -135,8 +131,7 @@ The return status from processing a replication message.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStatus.html#getEnvID()">getEnvID</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whenever a new master is elected, the environment ID of the new master
- is available from the getEnvID method.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the environment ID associated with the operation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -152,18 +147,10 @@ The return status from processing a replication message.
<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/ReplicationStatus.html#isDupMaster()">isDupMaster</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The replication group has more than one master.</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/ReplicationStatus.html#isHoldElection()">isHoldElection</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStatus.html#isIgnore()">isIgnore</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An election is needed.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This message cannot be processed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -202,45 +189,39 @@ The return status from processing a replication message.
<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/ReplicationStatus.html#isStartupDone()">isStartupDone</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStatus.html#isSuccess()">isSuccess</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The client completed startup synchronization.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The operation succeeded.</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/ReplicationStatus.html#isSuccess()">isSuccess</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationStatus.html#toString()">toString</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The operation succeeded.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -257,29 +238,15 @@ public boolean <B>isSuccess</B>()</PRE>
</DL>
<HR>
-<A NAME="isDupMaster()"><!-- --></A><H3>
-isDupMaster</H3>
+<A NAME="isIgnore()"><!-- --></A><H3>
+isIgnore</H3>
<PRE>
-public boolean <B>isDupMaster</B>()</PRE>
+public boolean <B>isIgnore</B>()</PRE>
<DL>
-<DD>The replication group has more than one master. The application
- should reconfigure itself as a client by calling the
- <A HREF="../../../com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Environment.startReplication</CODE></A> method, and then call for an
- election by calling <A HREF="../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int, int, int)"><CODE>Environment.electReplicationMaster</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isHoldElection()"><!-- --></A><H3>
-isHoldElection</H3>
-<PRE>
-public boolean <B>isHoldElection</B>()</PRE>
-<DL>
-<DD>An election is needed. The application should call for an election
- by calling <A HREF="../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int, int, int)"><CODE>Environment.electReplicationMaster</CODE></A>.
+<DD>This message cannot be processed.
+ This is an indication that this message is irrelevant to the current
+ replication state (for example, an old message from a previous
+ generation arrives and is processed late).
<P>
<DD><DL>
</DL>
@@ -352,21 +319,6 @@ public boolean <B>isNotPermanent</B>()</PRE>
</DL>
<HR>
-<A NAME="isStartupDone()"><!-- --></A><H3>
-isStartupDone</H3>
-<PRE>
-public boolean <B>isStartupDone</B>()</PRE>
-<DL>
-<DD>The client completed startup synchronization. The client application
- knows this client is now processing live log records received from the
- master.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
<A NAME="getCData()"><!-- --></A><H3>
getCData</H3>
<PRE>
@@ -390,10 +342,11 @@ getEnvID</H3>
<PRE>
public int <B>getEnvID</B>()</PRE>
<DL>
-<DD>Whenever a new master is elected, the environment ID of the new master
- is available from the getEnvID method. If the recipient of this error
- return has been made master, it is the application's responsibility to
- begin acting as the master environment.
+<DD>Return the environment ID associated with the operation. In most cases,
+ this is the same as the environment ID passed to <A HREF="../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>. However, if a new master is elected, this
+ method returns the environment ID of the new master. It is the
+ application's responsibility to ensure that the matching node begins acting
+ as the master environment.
<P>
<DD><DL>
</DL>
@@ -417,6 +370,22 @@ public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class i
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -426,7 +395,7 @@ public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class i
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -442,16 +411,16 @@ public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class i
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -464,6 +433,7 @@ public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class i
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -477,6 +447,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationTimeoutType.html b/db/docs/java/com/sleepycat/db/ReplicationTimeoutType.html
new file mode 100644
index 000000000..20248309a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/ReplicationTimeoutType.html
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+ReplicationTimeoutType (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationTimeoutType class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="ReplicationTimeoutType (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationTimeoutType.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationTimeoutType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationTimeoutType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class ReplicationTimeoutType</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.ReplicationTimeoutType</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ReplicationTimeoutType</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+The ReplicationTimeoutType defines the types of timeouts that can be
+configured for the Berkeley Db replication functionality.
+<p>
+The class is used in the <A HREF="../../../com/sleepycat/db/Environment.html#setReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType, int)"><CODE>Environment.setReplicationTimeout</CODE></A>
+method.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html#ACK_TIMEOUT">ACK_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the amount of time the replication manager's transport function
+ waits to collect enough acknowledgments from replication group clients,
+ before giving up and returning a failure indication.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html#CONNECTION_RETRY">CONNECTION_RETRY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the amount of time the replication manager will wait before
+ trying to re-establish a connection to another site after a
+ communication failure.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html#ELECTION_RETRY">ELECTION_RETRY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the amount of time the replication manager will wait before
+ retrying a failed election.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html#ELECTION_TIMEOUT">ELECTION_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The timeout period for an election.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ACK_TIMEOUT"><!-- --></A><H3>
+ACK_TIMEOUT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A> <B>ACK_TIMEOUT</B></PRE>
+<DL>
+<DD>Configure the amount of time the replication manager's transport function
+ waits to collect enough acknowledgments from replication group clients,
+ before giving up and returning a failure indication.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="CONNECTION_RETRY"><!-- --></A><H3>
+CONNECTION_RETRY</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A> <B>CONNECTION_RETRY</B></PRE>
+<DL>
+<DD>Configure the amount of time the replication manager will wait before
+ trying to re-establish a connection to another site after a
+ communication failure.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="ELECTION_RETRY"><!-- --></A><H3>
+ELECTION_RETRY</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A> <B>ELECTION_RETRY</B></PRE>
+<DL>
+<DD>Configure the amount of time the replication manager will wait before
+ retrying a failed election.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="ELECTION_TIMEOUT"><!-- --></A><H3>
+ELECTION_TIMEOUT</H3>
+<PRE>
+public static final <A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A> <B>ELECTION_TIMEOUT</B></PRE>
+<DL>
+<DD>The timeout period for an election.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/ReplicationTimeoutType.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationTimeoutType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationTimeoutType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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="#method_summary">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;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/ReplicationTransport.html b/db/docs/java/com/sleepycat/db/ReplicationTransport.html
index 162586395..766dd878e 100644
--- a/db/docs/java/com/sleepycat/db/ReplicationTransport.html
+++ b/db/docs/java/com/sleepycat/db/ReplicationTransport.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-ReplicationTransport (Sleepycat Software, Inc. - Berkeley DB Java API)
+ReplicationTransport (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.ReplicationTransport interface">
@@ -14,9 +14,11 @@ ReplicationTransport (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ReplicationTransport (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ReplicationTransport (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationTransport.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationTransport.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,7 +90,8 @@ com.sleepycat.db</FONT>
Interface ReplicationTransport</H2>
<HR>
<DL>
-<DT>public interface <B>ReplicationTransport</B></DL>
+<DT><PRE>public interface <B>ReplicationTransport</B></DL>
+</PRE>
<P>
An interface specifying a replication transmit function, which sends
@@ -98,16 +102,13 @@ information to other members of the replication group.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -129,27 +130,26 @@ information to other members of the replication group.
</TR>
</TABLE>
&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)">send</A></B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)">send</A></B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
int&nbsp;envid,
boolean&nbsp;noBuffer,
- boolean&nbsp;permanent)</CODE>
+ boolean&nbsp;permanent,
+ boolean&nbsp;anywhere,
+ boolean&nbsp;isRetry)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
@@ -164,15 +164,15 @@ information to other members of the replication group.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="EID_BROADCAST"><!-- --></A><H3>
EID_BROADCAST</H3>
<PRE>
-public static final int <B>EID_BROADCAST</B></PRE>
+static final int <B>EID_BROADCAST</B></PRE>
<DL>
<DD>A message that should be broadcast to every environment in the
replication group. The application may use a true broadcast protocol or
@@ -188,7 +188,7 @@ public static final int <B>EID_BROADCAST</B></PRE>
<A NAME="EID_INVALID"><!-- --></A><H3>
EID_INVALID</H3>
<PRE>
-public static final int <B>EID_INVALID</B></PRE>
+static final int <B>EID_INVALID</B></PRE>
<DL>
<DD>An invalid environment ID, and may be used to initialize environment ID
variables that are subsequently checked for validity.
@@ -197,29 +197,28 @@ public static final int <B>EID_INVALID</B></PRE>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.ReplicationTransport.EID_INVALID">Constant Field Values</A></DL>
</DL>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
-<A NAME="send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)"><!-- --></A><H3>
+<A NAME="send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)"><!-- --></A><H3>
send</H3>
<PRE>
-public int <B>send</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- int&nbsp;envid,
- boolean&nbsp;noBuffer,
- boolean&nbsp;permanent)
+int <B>send</B>(<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ int&nbsp;envid,
+ boolean&nbsp;noBuffer,
+ boolean&nbsp;permanent,
+ boolean&nbsp;anywhere,
+ boolean&nbsp;isRetry)
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>The callback used when Berkeley DB needs to transmit a replication
@@ -254,7 +253,8 @@ public int <B>send</B>(<A HREF="../../../com/sleepycat/db/Environment.html" titl
application should take appropriate action to enforce the reliability
guarantees it has chosen, such as waiting for acknowledgement from one
or more clients.
- <p>
+ <p><DD><CODE>anywhere</CODE> - XXX
+ <p><DD><CODE>isRetry</CODE> - XXX
<p>
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
@@ -269,7 +269,7 @@ public int <B>send</B>(<A HREF="../../../com/sleepycat/db/Environment.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -285,16 +285,16 @@ public int <B>send</B>(<A HREF="../../../com/sleepycat/db/Environment.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/ReplicationTransport.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationTransport.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -307,6 +307,7 @@ public int <B>send</B>(<A HREF="../../../com/sleepycat/db/Environment.html" titl
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -320,6 +321,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/RunRecoveryException.html b/db/docs/java/com/sleepycat/db/RunRecoveryException.html
index e190d3653..55cb50caf 100644
--- a/db/docs/java/com/sleepycat/db/RunRecoveryException.html
+++ b/db/docs/java/com/sleepycat/db/RunRecoveryException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-RunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+RunRecoveryException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.RunRecoveryException class">
@@ -14,9 +14,11 @@ RunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="RunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="RunRecoveryException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/RunRecoveryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RunRecoveryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,17 +90,18 @@ com.sleepycat.db</FONT>
Class RunRecoveryException</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.RunRecoveryException</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.RunRecoveryException</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" title="class or interface in java.io">Serializable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>RunRecoveryException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+<DT><PRE>public class <B>RunRecoveryException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
<P>
Thrown when the database environment needs to be recovered.
@@ -114,55 +118,45 @@ the same way. When this occurs, recovery should be performed.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
-<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -172,7 +166,7 @@ the same way. When this occurs, recovery should be performed.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -188,16 +182,16 @@ the same way. When this occurs, recovery should be performed.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/RunRecoveryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RunRecoveryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -210,6 +204,7 @@ the same way. When this occurs, recovery should be performed.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -223,6 +218,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/SecondaryConfig.html b/db/docs/java/com/sleepycat/db/SecondaryConfig.html
index 82fd9249f..9dc299f40 100644
--- a/db/docs/java/com/sleepycat/db/SecondaryConfig.html
+++ b/db/docs/java/com/sleepycat/db/SecondaryConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SecondaryConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+SecondaryConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.SecondaryConfig class">
@@ -14,9 +14,11 @@ SecondaryConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SecondaryConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SecondaryConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,16 @@ com.sleepycat.db</FONT>
Class SecondaryConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseConfig</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.SecondaryConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseConfig</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.SecondaryConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>SecondaryConfig</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></DL>
+<DT><PRE>public class <B>SecondaryConfig</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
The configuration properties of a <code>SecondaryDatabase</code> extend
@@ -110,7 +114,8 @@ To set custom attributes:
<pre>
SecondaryConfig config = new SecondaryConfig();
config.setAllowCreate(true);
- config.setAllowPopulate(true);
+ config.setSortedDuplicates(true);
+ config.setKeyCreator(new MyKeyCreator());
</pre>
<p>
<hr>
@@ -146,16 +151,13 @@ happening in the first place.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -172,8 +174,8 @@ happening in the first place.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryConfig.html#SecondaryConfig()">SecondaryConfig</A></B>()</CODE>
@@ -188,8 +190,8 @@ happening in the first place.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -201,11 +203,20 @@ happening in the first place.
</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/SecondaryConfig.html#getImmutableSecondaryKey()">getImmutableSecondaryKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the secondary key is immutable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryConfig.html#getKeyCreator()">getKeyCreator</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the user-supplied object used for creating secondary keys.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the user-supplied object used for creating single-valued secondary
+ keys.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -218,28 +229,37 @@ happening in the first place.
<TR BGCOLOR="white" CLASS="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/SecondaryConfig.html#setImmutableSecondaryKey(boolean)">setImmutableSecondaryKey</A></B>(boolean&nbsp;immutableSecondaryKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies whether the secondary key is immutable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/SecondaryConfig.html#setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)">setKeyCreator</A></B>(<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>&nbsp;keyCreator)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user-supplied object used for creating secondary keys.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user-supplied object used for creating single-valued
+ secondary keys.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseConfig"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getAllowCreate()">getAllowCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeComparator()">getBtreeComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeMinKey()">getBtreeMinKey</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreePrefixCalculator()">getBtreePrefixCalculator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeRecordNumbers()">getBtreeRecordNumbers</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getByteOrder()">getByteOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getByteSwapped()">getByteSwapped</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getCacheCount()">getCacheCount</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getCacheSize()">getCacheSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getChecksum()">getChecksum</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getDirtyRead()">getDirtyRead</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getDuplicateComparator()">getDuplicateComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getEncrypted()">getEncrypted</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getErrorHandler()">getErrorHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getErrorPrefix()">getErrorPrefix</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getErrorStream()">getErrorStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getExclusiveCreate()">getExclusiveCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getFeedbackHandler()">getFeedbackHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getHasher()">getHasher</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getHashFillFactor()">getHashFillFactor</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getHashNumElements()">getHashNumElements</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMessageHandler()">getMessageHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMessageStream()">getMessageStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMode()">getMode</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getNoMMap()">getNoMMap</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getPageSize()">getPageSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getPanicHandler()">getPanicHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getQueueExtentSize()">getQueueExtentSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getQueueInOrder()">getQueueInOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReadOnly()">getReadOnly</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordDelimiter()">getRecordDelimiter</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordLength()">getRecordLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordNumberAppender()">getRecordNumberAppender</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordPad()">getRecordPad</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordSource()">getRecordSource</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRenumbering()">getRenumbering</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReverseSplitOff()">getReverseSplitOff</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getSnapshot()">getSnapshot</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getSortedDuplicates()">getSortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTransactional()">getTransactional</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTransactionNotDurable()">getTransactionNotDurable</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTruncate()">getTruncate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getType()">getType</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getUnsortedDuplicates()">getUnsortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getXACreate()">getXACreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setAllowCreate(boolean)">setAllowCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreeComparator(java.util.Comparator)">setBtreeComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreeMinKey(int)">setBtreeMinKey</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreePrefixCalculator(com.sleepycat.db.BtreePrefixCalculator)">setBtreePrefixCalculator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreeRecordNumbers(boolean)">setBtreeRecordNumbers</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setByteOrder(int)">setByteOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setCacheCount(int)">setCacheCount</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setCacheSize(long)">setCacheSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setChecksum(boolean)">setChecksum</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setDirtyRead(boolean)">setDirtyRead</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setDuplicateComparator(java.util.Comparator)">setDuplicateComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setEncrypted(java.lang.String)">setEncrypted</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorHandler(com.sleepycat.db.ErrorHandler)">setErrorHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorPrefix(java.lang.String)">setErrorPrefix</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorStream(java.io.OutputStream)">setErrorStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setExclusiveCreate(boolean)">setExclusiveCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)">setFeedbackHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setHasher(com.sleepycat.db.Hasher)">setHasher</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setHashFillFactor(int)">setHashFillFactor</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setHashNumElements(int)">setHashNumElements</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)">setMessageHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMessageStream(java.io.OutputStream)">setMessageStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMode(int)">setMode</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setNoMMap(boolean)">setNoMMap</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setPageSize(int)">setPageSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setPanicHandler(com.sleepycat.db.PanicHandler)">setPanicHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setQueueExtentSize(int)">setQueueExtentSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setQueueInOrder(boolean)">setQueueInOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReadOnly(boolean)">setReadOnly</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordDelimiter(int)">setRecordDelimiter</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordLength(int)">setRecordLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordNumberAppender(com.sleepycat.db.RecordNumberAppender)">setRecordNumberAppender</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordPad(int)">setRecordPad</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordSource(java.io.File)">setRecordSource</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRenumbering(boolean)">setRenumbering</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReverseSplitOff(boolean)">setReverseSplitOff</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setSnapshot(boolean)">setSnapshot</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setSortedDuplicates(boolean)">setSortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setTransactional(boolean)">setTransactional</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setTransactionNotDurable(boolean)">setTransactionNotDurable</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setTruncate(boolean)">setTruncate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setType(com.sleepycat.db.DatabaseType)">setType</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setUnsortedDuplicates(boolean)">setUnsortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setXACreate(boolean)">setXACreate</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getAllowCreate()">getAllowCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeComparator()">getBtreeComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeMinKey()">getBtreeMinKey</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreePrefixCalculator()">getBtreePrefixCalculator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getBtreeRecordNumbers()">getBtreeRecordNumbers</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getByteOrder()">getByteOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getByteSwapped()">getByteSwapped</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getCacheCount()">getCacheCount</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getCacheSize()">getCacheSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getChecksum()">getChecksum</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getDirtyRead()">getDirtyRead</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getDuplicateComparator()">getDuplicateComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getEncrypted()">getEncrypted</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getErrorHandler()">getErrorHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getErrorPrefix()">getErrorPrefix</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getErrorStream()">getErrorStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getExclusiveCreate()">getExclusiveCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getFeedbackHandler()">getFeedbackHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getHasher()">getHasher</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getHashFillFactor()">getHashFillFactor</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getHashNumElements()">getHashNumElements</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMessageHandler()">getMessageHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMessageStream()">getMessageStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMode()">getMode</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getMultiversion()">getMultiversion</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getNoMMap()">getNoMMap</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getPageSize()">getPageSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getPanicHandler()">getPanicHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getQueueExtentSize()">getQueueExtentSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getQueueInOrder()">getQueueInOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReadOnly()">getReadOnly</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReadUncommitted()">getReadUncommitted</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordDelimiter()">getRecordDelimiter</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordLength()">getRecordLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordNumberAppender()">getRecordNumberAppender</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordPad()">getRecordPad</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRecordSource()">getRecordSource</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getRenumbering()">getRenumbering</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getReverseSplitOff()">getReverseSplitOff</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getSnapshot()">getSnapshot</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getSortedDuplicates()">getSortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTransactional()">getTransactional</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTransactionNotDurable()">getTransactionNotDurable</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getTruncate()">getTruncate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getType()">getType</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getUnsortedDuplicates()">getUnsortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#getXACreate()">getXACreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setAllowCreate(boolean)">setAllowCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreeComparator(java.util.Comparator)">setBtreeComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreeMinKey(int)">setBtreeMinKey</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreePrefixCalculator(com.sleepycat.db.BtreePrefixCalculator)">setBtreePrefixCalculator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setBtreeRecordNumbers(boolean)">setBtreeRecordNumbers</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setByteOrder(int)">setByteOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setCacheCount(int)">setCacheCount</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setCacheSize(long)">setCacheSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setChecksum(boolean)">setChecksum</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setDirtyRead(boolean)">setDirtyRead</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setDuplicateComparator(java.util.Comparator)">setDuplicateComparator</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setEncrypted(java.lang.String)">setEncrypted</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorHandler(com.sleepycat.db.ErrorHandler)">setErrorHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorPrefix(java.lang.String)">setErrorPrefix</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setErrorStream(java.io.OutputStream)">setErrorStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setExclusiveCreate(boolean)">setExclusiveCreate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)">setFeedbackHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setHasher(com.sleepycat.db.Hasher)">setHasher</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setHashFillFactor(int)">setHashFillFactor</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setHashNumElements(int)">setHashNumElements</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)">setMessageHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMessageStream(java.io.OutputStream)">setMessageStream</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMode(int)">setMode</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMultiversion(boolean)">setMultiversion</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setNoMMap(boolean)">setNoMMap</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setPageSize(int)">setPageSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setPanicHandler(com.sleepycat.db.PanicHandler)">setPanicHandler</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setQueueExtentSize(int)">setQueueExtentSize</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setQueueInOrder(boolean)">setQueueInOrder</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReadOnly(boolean)">setReadOnly</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReadUncommitted(boolean)">setReadUncommitted</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordDelimiter(int)">setRecordDelimiter</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordLength(int)">setRecordLength</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordNumberAppender(com.sleepycat.db.RecordNumberAppender)">setRecordNumberAppender</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordPad(int)">setRecordPad</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRecordSource(java.io.File)">setRecordSource</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setRenumbering(boolean)">setRenumbering</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setReverseSplitOff(boolean)">setReverseSplitOff</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setSnapshot(boolean)">setSnapshot</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setSortedDuplicates(boolean)">setSortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setTransactional(boolean)">setTransactional</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setTransactionNotDurable(boolean)">setTransactionNotDurable</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setTruncate(boolean)">setTruncate</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setType(com.sleepycat.db.DatabaseType)">setType</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setUnsortedDuplicates(boolean)">setUnsortedDuplicates</A>, <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setXACreate(boolean)">setXACreate</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -250,8 +270,8 @@ happening in the first place.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -269,8 +289,8 @@ public static final <A HREF="../../../com/sleepycat/db/SecondaryConfig.html" tit
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -288,8 +308,8 @@ public <B>SecondaryConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -298,15 +318,23 @@ setKeyCreator</H3>
<PRE>
public void <B>setKeyCreator</B>(<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>&nbsp;keyCreator)</PRE>
<DL>
-<DD>Specifies the user-supplied object used for creating secondary keys.
+<DD>Specifies the user-supplied object used for creating single-valued
+ secondary keys.
+ <p>
+ Unless the primary database is read-only, a key creator is required
+ when opening a secondary database. Either a KeyCreator or MultiKeyCreator
+ must be specified, but both may not be specified.
<p>
Unless the primary database is read-only, a key creator is required
when opening a secondary database.
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>keyCreator</CODE> - the user-supplied object used for creating secondary
- keys.</DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyCreator</CODE> - the user-supplied object used for creating single-valued
+ secondary keys.</DL>
</DD>
</DL>
<HR>
@@ -316,12 +344,17 @@ getKeyCreator</H3>
<PRE>
public <A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> <B>getKeyCreator</B>()</PRE>
<DL>
-<DD>Returns the user-supplied object used for creating secondary keys.
+<DD>Returns the user-supplied object used for creating single-valued secondary
+ keys.
<p>
<P>
<DD><DL>
+</DL>
+</DD>
+<DD><DL>
-<DT><B>Returns:</B><DD>the user-supplied object used for creating secondary keys.
+<DT><B>Returns:</B><DD>the user-supplied object used for creating single-valued secondary
+ keys.
<p><DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/db/SecondaryConfig.html#setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)"><CODE>setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)</CODE></A></DL>
</DD>
</DL>
@@ -344,6 +377,9 @@ public void <B>setAllowPopulate</B>(boolean&nbsp;allowPopulate)</PRE>
<p>
<P>
<DD><DL>
+</DL>
+</DD>
+<DD><DL>
<DT><B>Parameters:</B><DD><CODE>allowPopulate</CODE> - whether automatic population of the secondary is
allowed.</DL>
</DD>
@@ -361,11 +397,66 @@ public boolean <B>getAllowPopulate</B>()</PRE>
<p>
<P>
<DD><DL>
+</DL>
+</DD>
+<DD><DL>
<DT><B>Returns:</B><DD>whether automatic population of the secondary is allowed.
<p><DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/db/SecondaryConfig.html#setAllowPopulate(boolean)"><CODE>setAllowPopulate(boolean)</CODE></A></DL>
</DD>
</DL>
+<HR>
+
+<A NAME="setImmutableSecondaryKey(boolean)"><!-- --></A><H3>
+setImmutableSecondaryKey</H3>
+<PRE>
+public void <B>setImmutableSecondaryKey</B>(boolean&nbsp;immutableSecondaryKey)</PRE>
+<DL>
+<DD>Specifies whether the secondary key is immutable.
+ <p>
+ Specifying that a secondary key is immutable can be used to optimize
+ updates when the secondary key in a primary record will never be changed
+ after that primary record is inserted. For immutable secondary keys, a
+ best effort is made to avoid calling
+ <code>SecondaryKeyCreator.createSecondaryKey</code> when a primary record
+ is updated. This optimization may reduce the overhead of an update
+ operation significantly if the <code>createSecondaryKey</code> operation is
+ expensive.
+ <p>
+ Be sure to set this property to true only if the secondary key in the
+ primary record is never changed. If this rule is violated, the secondary
+ index will become corrupted, that is, it will become out of sync with the
+ primary.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>immutableSecondaryKey</CODE> - whether the secondary key is immutable.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getImmutableSecondaryKey()"><!-- --></A><H3>
+getImmutableSecondaryKey</H3>
+<PRE>
+public boolean <B>getImmutableSecondaryKey</B>()</PRE>
+<DL>
+<DD>Returns whether the secondary key is immutable. If
+ <A HREF="../../../com/sleepycat/db/SecondaryConfig.html#setImmutableSecondaryKey(boolean)"><CODE>setImmutableSecondaryKey(boolean)</CODE></A> has not been called, this method returns
+ false.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the secondary key is immutable.
+ <p><DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/db/SecondaryConfig.html#setImmutableSecondaryKey(boolean)"><CODE>setImmutableSecondaryKey(boolean)</CODE></A></DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -375,7 +466,7 @@ public boolean <B>getAllowPopulate</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -391,16 +482,16 @@ public boolean <B>getAllowPopulate</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -413,6 +504,7 @@ public boolean <B>getAllowPopulate</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -426,6 +518,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/SecondaryCursor.html b/db/docs/java/com/sleepycat/db/SecondaryCursor.html
index 1329392a2..acf05d8ba 100644
--- a/db/docs/java/com/sleepycat/db/SecondaryCursor.html
+++ b/db/docs/java/com/sleepycat/db/SecondaryCursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SecondaryCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+SecondaryCursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.SecondaryCursor class">
@@ -14,9 +14,11 @@ SecondaryCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SecondaryCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SecondaryCursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,12 +90,13 @@ com.sleepycat.db</FONT>
Class SecondaryCursor</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">com.sleepycat.db.Cursor</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.SecondaryCursor</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">com.sleepycat.db.Cursor</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.SecondaryCursor</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>SecondaryCursor</B><DT>extends <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></DL>
+<DT><PRE>public class <B>SecondaryCursor</B><DT>extends <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></DL>
+</PRE>
<P>
A database cursor for a secondary database. Cursors are not thread safe
@@ -100,7 +104,7 @@ and the application is responsible for coordinating any multithreaded
access to a single cursor object.
<p>
Secondary cursors are returned by
-<A HREF="../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>SecondaryDatabase.openCursor</CODE></A> and
+<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>SecondaryDatabase.openCursor</CODE></A> and
<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>SecondaryDatabase.openSecondaryCursor</CODE></A>. The distinguishing characteristics
of a secondary cursor are:
<ul>
@@ -132,22 +136,14 @@ To customize the attributes of a cursor, use a CursorConfig object.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -355,7 +351,7 @@ return the associated key/data pair.</TD>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.Cursor"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../com/sleepycat/db/Cursor.html#close()">close</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#count()">count</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#delete()">delete</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getConfig()">getConfig</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getDatabase()">getDatabase</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)">putCurrent</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A>, <A HREF="../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></CODE></TD>
@@ -364,28 +360,22 @@ return the associated key/data pair.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -1120,7 +1110,7 @@ deadlock.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1136,7 +1126,7 @@ deadlock.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -1145,7 +1135,7 @@ deadlock.
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1158,6 +1148,7 @@ deadlock.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -1171,6 +1162,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/SecondaryDatabase.html b/db/docs/java/com/sleepycat/db/SecondaryDatabase.html
index ff4e7c24b..724258df2 100644
--- a/db/docs/java/com/sleepycat/db/SecondaryDatabase.html
+++ b/db/docs/java/com/sleepycat/db/SecondaryDatabase.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SecondaryDatabase (Sleepycat Software, Inc. - Berkeley DB Java API)
+SecondaryDatabase (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.SecondaryDatabase class">
@@ -14,9 +14,11 @@ SecondaryDatabase (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SecondaryDatabase (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SecondaryDatabase (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryDatabase.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryDatabase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,12 +90,13 @@ com.sleepycat.db</FONT>
Class SecondaryDatabase</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">com.sleepycat.db.Database</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.SecondaryDatabase</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">com.sleepycat.db.Database</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.SecondaryDatabase</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>SecondaryDatabase</B><DT>extends <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></DL>
+<DT><PRE>public class <B>SecondaryDatabase</B><DT>extends <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></DL>
+</PRE>
<P>
A secondary database handle.
@@ -110,65 +114,52 @@ the primary record and as well as all its associated secondary records.</li>
associated primary database.</li>
<li>Additional <code>get()</code> method signatures are provided to return
the primary key in an additional <code>pKey</code> parameter.</li>
-<li>Calls to <A HREF="../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>openCursor</CODE></A> will return a <A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><CODE>SecondaryCursor</CODE></A>, which itself has <code>get()</code> methods that return
+<li>Calls to <A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>openCursor</CODE></A> will return a <A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><CODE>SecondaryCursor</CODE></A>, which itself has <code>get()</code> methods that return
the data of the primary database and additional <code>get()</code> method
signatures for returning the primary key.</li>
<li>The <A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>openSecondaryCursor</CODE></A> method is provided
to return a <A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><CODE>SecondaryCursor</CODE></A> that doesn't require casting.</li>
</ul>
<p>
+Before opening or creating a secondary database you must implement the <A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><CODE>SecondaryKeyCreator</CODE></A>
+interface.
<p>
-Before opening or creating a secondary database you must implement the
-SecondaryKeyCreator interface. For example:
-<pre>
- class MyKeyCreator implements SecondaryKeyCreator {
- public boolean createSecondaryKey(SecondaryDatabase secondary,
- DatabaseEntry key,
- DatabaseEntry data,
- DatabaseEntry result)
- throws DatabaseException {
- //
- // DO HERE: Extract the secondary key from the primary key and data,
- // and set the secondary key into the result parameter.
- //
- return true;
- }
- }
-</pre>
-<p>
-<p>
-To create a secondary database that supports duplicates:
+For example, to create a secondary database that supports duplicates:
<pre>
Database primaryDb; // The primary database must already be open.
+ SecondaryKeyCreator keyCreator; // Your key creator implementation.
SecondaryConfig secConfig = new SecondaryConfig();
secConfig.setAllowCreate(true);
secConfig.setSortedDuplicates(true);
- secConfig.setKeyCreator(new MyKeyCreator());
- SecondaryDatabase newDb = env.openSecondaryDatabase(txn, "foo",
- primaryDb, secConfig)
+ secConfig.setKeyCreator(keyCreator);
+ SecondaryDatabase newDb = env.openSecondaryDatabase(transaction,
+ "myDatabaseName",
+ primaryDb,
+ secConfig)
</pre>
<p>
If a primary database is to be associated with one or more secondary
databases, it may not be configured for duplicates.
+<p>
+Note that the associations between primary and secondary databases are not
+stored persistently. Whenever a primary database is opened for write access by
+the application, the appropriate associated secondary databases should also be
+opened by the application. This is necessary to ensure data integrity when
+changes are made to the primary database.
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">SecondaryDatabase</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
@@ -186,8 +177,8 @@ databases, it may not be configured for duplicates.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -203,6 +194,14 @@ databases, it may not be configured for duplicates.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#getConfig()">getConfig</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this Database object's configuration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#getPrimaryDatabase()">getPrimaryDatabase</A></B>()</CODE>
@@ -244,6 +243,15 @@ is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the 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/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
@@ -255,34 +263,31 @@ is, both the primary and secondary key items must match.</TD>
&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.Database"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A>, <A HREF="../../../com/sleepycat/db/Database.html#close()">close</A>, <A HREF="../../../com/sleepycat/db/Database.html#close(boolean)">close</A>, <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A>, <A HREF="../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A>, <A HREF="../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A>, <A HREF="../../../com/sleepycat/db/Database.html#getCacheFile()">getCacheFile</A>, <A HREF="../../../com/sleepycat/db/Database.html#getConfig()">getConfig</A>, <A HREF="../../../com/sleepycat/db/Database.html#getDatabaseFile()">getDatabaseFile</A>, <A HREF="../../../com/sleepycat/db/Database.html#getDatabaseName()">getDatabaseName</A>, <A HREF="../../../com/sleepycat/db/Database.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A>, <A HREF="../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A>, <A HREF="../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A>, <A HREF="../../../com/sleepycat/db/Database.html#getStats(com.sleepycat.db.Transaction, com.sleepycat.db.StatsConfig)">getStats</A>, <A HREF="../../../com/sleepycat/db/Database.html#join(com.sleepycat.db.Cursor[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A>, <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A>, <A HREF="../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A>, <A HREF="../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A>, <A HREF="../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A>, <A HREF="../../../com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">remove</A>, <A HREF="../../../com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">removeSequence</A>, <A HREF="../../../com/sleepycat/db/Database.html#rename(java.lang.String, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">rename</A>, <A HREF="../../../com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)">setConfig</A>, <A HREF="../../../com/sleepycat/db/Database.html#sync()">sync</A>, <A HREF="../../../com/sleepycat/db/Database.html#truncate(com.sleepycat.db.Transaction, boolean)">truncate</A>, <A HREF="../../../com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)">upgrade</A>, <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)">verify</A></CODE></TD>
+<TD><CODE><A HREF="../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A>, <A HREF="../../../com/sleepycat/db/Database.html#close()">close</A>, <A HREF="../../../com/sleepycat/db/Database.html#close(boolean)">close</A>, <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A>, <A HREF="../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A>, <A HREF="../../../com/sleepycat/db/Database.html#count()">count</A>, <A HREF="../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A>, <A HREF="../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A>, <A HREF="../../../com/sleepycat/db/Database.html#getCacheFile()">getCacheFile</A>, <A HREF="../../../com/sleepycat/db/Database.html#getDatabaseFile()">getDatabaseFile</A>, <A HREF="../../../com/sleepycat/db/Database.html#getDatabaseName()">getDatabaseName</A>, <A HREF="../../../com/sleepycat/db/Database.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A>, <A HREF="../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A>, <A HREF="../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A>, <A HREF="../../../com/sleepycat/db/Database.html#getStats(com.sleepycat.db.Transaction, com.sleepycat.db.StatsConfig)">getStats</A>, <A HREF="../../../com/sleepycat/db/Database.html#join(com.sleepycat.db.Cursor[], com.sleepycat.db.JoinConfig)">join</A>, <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A>, <A HREF="../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A>, <A HREF="../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A>, <A HREF="../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A>, <A HREF="../../../com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">remove</A>, <A HREF="../../../com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">removeSequence</A>, <A HREF="../../../com/sleepycat/db/Database.html#rename(java.lang.String, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">rename</A>, <A HREF="../../../com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)">setConfig</A>, <A HREF="../../../com/sleepycat/db/Database.html#sync()">sync</A>, <A HREF="../../../com/sleepycat/db/Database.html#truncate(com.sleepycat.db.Transaction, boolean)">truncate</A>, <A HREF="../../../com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)">upgrade</A>, <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)">verify</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -324,6 +329,7 @@ doing so is safe. The environment variable <code>TMPDIR</code> may
be used as a directory in which to create temporary backing files.
<p>
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>fileName</CODE> - The name of an underlying file that will be used to back the database.
On Windows platforms, this argument will be interpreted as a UTF-8
string, which is equivalent to ASCII for Latin characters.
@@ -334,15 +340,19 @@ a physical file that was not initially created using a databaseName
parameter. Further, the databaseName parameter is not supported by the
Queue format.
<p><DD><CODE>primaryDatabase</CODE> - a database handle for the primary database that is to be indexed.
-<p><DD><CODE>config</CODE> - The secondary database open attributes. If null, default attributes are used.</DL>
+<p><DD><CODE>config</CODE> - The secondary database open attributes. If null, default attributes are used.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html" title="class or interface in java.io">FileNotFoundException</A></CODE></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -454,26 +464,6 @@ deadlock.
</DL>
<HR>
-<A NAME="getPrimaryDatabase()"><!-- --></A><H3>
-getPrimaryDatabase</H3>
-<PRE>
-public <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> <B>getPrimaryDatabase</B>()
- throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
-<DL>
-<DD>Returns the primary database associated with this secondary database.
- <p>
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the primary database associated with this secondary database.
- <p>
- <p>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
-</DD>
-</DL>
-<HR>
-
<A NAME="openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
openSecondaryCursor</H3>
<PRE>
@@ -482,7 +472,7 @@ public <A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.
- Calling this method is the equivalent of calling <A HREF="../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>Database.openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)</CODE></A> and
+ Calling this method is the equivalent of calling <A HREF="../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><CODE>openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)</CODE></A> and
casting the result to <A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><CODE>SecondaryCursor</CODE></A>.
<p>
<P>
@@ -506,6 +496,21 @@ specifies the transaction context in which the cursor will be used.
</DL>
<HR>
+<A NAME="getPrimaryDatabase()"><!-- --></A><H3>
+getPrimaryDatabase</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> <B>getPrimaryDatabase</B>()</PRE>
+<DL>
+<DD>Returns the primary database associated with this secondary database.
+ <p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the primary database associated with this secondary database.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><!-- --></A><H3>
getSearchRecordNumber</H3>
<PRE>
@@ -552,6 +557,65 @@ deadlock.
<p></DL>
</DD>
</DL>
+<HR>
+
+<A NAME="getConfig()"><!-- --></A><H3>
+getConfig</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A> <B>getConfig</B>()
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Return this Database object's configuration.
+ <p>
+ This may differ from the configuration used to open this object if
+ the database existed previously.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/db/Database.html#getConfig()">getConfig</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>This Database object's configuration.
+ <p>
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><!-- --></A><H3>
+openCursor</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A> <B>openCursor</B>(<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Return a cursor into the database.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>txn</CODE> - To use a cursor for writing to a transactional database, an explicit
+transaction must be specified. For read-only access to a transactional
+database, the transaction may be null. For a non-transactional database, the
+transaction must be null.
+<p>
+To transaction-protect cursor operations, cursors must be opened and
+closed within the context of a transaction, and the txn parameter
+specifies the transaction context in which the cursor will be used.
+ <p><DD><CODE>cursorConfig</CODE> - The cursor attributes. If null, default attributes are used.
+ <p>
+<DT><B>Returns:</B><DD>A database cursor.
+ <p>
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -561,7 +625,7 @@ deadlock.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -577,16 +641,16 @@ deadlock.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryDatabase.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryDatabase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -599,6 +663,7 @@ deadlock.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -612,6 +677,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/SecondaryKeyCreator.html b/db/docs/java/com/sleepycat/db/SecondaryKeyCreator.html
index 2d4377744..f3ad0a592 100644
--- a/db/docs/java/com/sleepycat/db/SecondaryKeyCreator.html
+++ b/db/docs/java/com/sleepycat/db/SecondaryKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:48 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SecondaryKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+SecondaryKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.SecondaryKeyCreator interface">
@@ -14,9 +14,11 @@ SecondaryKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SecondaryKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SecondaryKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -86,22 +89,16 @@ com.sleepycat.db</FONT>
<BR>
Interface SecondaryKeyCreator</H2>
<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>, <A HREF="../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A></DD>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>, <A HREF="../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>, <A HREF="../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>, <A HREF="../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A></DD>
</DL>
<HR>
<DL>
-<DT>public interface <B>SecondaryKeyCreator</B></DL>
+<DT><PRE>public interface <B>SecondaryKeyCreator</B></DL>
+</PRE>
<P>
-An interface specifying how secondary keys for a
-<code>SecondaryDatabase</code> are created.
-<p>
-A secondary key may be derived from the primary key, primary data, or a
-combination of the primary key and data. For secondary keys that are
-optional, the key creator method may return false and the key/data pair will
-not be indexed. To ensure the integrity of a secondary database the key
-creator method must always return the same result for a given set of input
-parameters.
+The interface implemented for extracting single-valued secondary keys from
+primary records.
<p>
The key creator object is specified by calling
<A HREF="../../../com/sleepycat/db/SecondaryConfig.html#setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)"><CODE>SecondaryConfig.setKeyCreator</CODE></A>.
@@ -115,10 +112,10 @@ For example:
DatabaseEntry key,
DatabaseEntry data,
DatabaseEntry result)
- throws DatabaseException {
+ throws DatabaseException {
//
- // DO HERE: Extract the secondary key from the primary key and data,
- // and set the secondary key into the result parameter.
+ // DO HERE: Extract the secondary key from the primary key and
+ // data, and set the secondary key into the result parameter.
//
return true;
}
@@ -126,6 +123,7 @@ For example:
...
SecondaryConfig secConfig = new SecondaryConfig();
secConfig.setKeyCreator(new MyKeyCreator());
+ // Now pass secConfig to Environment.openSecondaryDatabase
</pre>
<P>
@@ -133,22 +131,14 @@ For example:
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -165,36 +155,39 @@ For example:
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><!-- --></A><H3>
createSecondaryKey</H3>
<PRE>
-public boolean <B>createSecondaryKey</B>(<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;secondary,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;result)
+boolean <B>createSecondaryKey</B>(<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;secondary,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;result)
throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
<DL>
<DD>Creates a secondary key entry, given a primary key and data entry.
<p>
+ A secondary key may be derived from the primary key, primary data, or a
+ combination of the primary key and data. For secondary keys that are
+ optional, the key creator method may return false and the key/data pair
+ will not be indexed. To ensure the integrity of a secondary database the
+ key creator method must always return the same result for a given set of
+ input parameters.
+ <p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>secondary</CODE> - the database to which the secondary key will be added.
+ This parameter is passed for informational purposes but is not commonly
+ used.
<p><DD><CODE>key</CODE> - the primary key entry. This parameter must not be modified
by this method.
<p><DD><CODE>data</CODE> - the primary data entry. This parameter must not be modified
@@ -218,7 +211,7 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../com/sleepycat/db/Seco
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -234,16 +227,16 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../com/sleepycat/db/Seco
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SecondaryKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -256,6 +249,7 @@ public boolean <B>createSecondaryKey</B>(<A HREF="../../../com/sleepycat/db/Seco
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -269,6 +263,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Sequence.html b/db/docs/java/com/sleepycat/db/Sequence.html
index 11a48c508..098b65d9f 100644
--- a/db/docs/java/com/sleepycat/db/Sequence.html
+++ b/db/docs/java/com/sleepycat/db/Sequence.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-Sequence (Sleepycat Software, Inc. - Berkeley DB Java API)
+Sequence (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Sequence class">
@@ -14,9 +14,11 @@ Sequence (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Sequence (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Sequence (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Sequence.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Sequence.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class Sequence</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.Sequence</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.Sequence</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>Sequence</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>Sequence</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
A Sequence handle is used to manipulate a sequence record in a database.
@@ -102,22 +106,14 @@ Sequence handles are opened using the <A HREF="../../../com/sleepycat/db/Databas
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -165,28 +161,22 @@ Sequence handles are opened using the <A HREF="../../../com/sleepycat/db/Databas
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -316,7 +306,7 @@ public <A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in co
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -332,16 +322,16 @@ public <A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in co
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Sequence.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Sequence.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -354,6 +344,7 @@ public <A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in co
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -367,6 +358,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/SequenceConfig.html b/db/docs/java/com/sleepycat/db/SequenceConfig.html
index f6f4c58a0..af5078e3c 100644
--- a/db/docs/java/com/sleepycat/db/SequenceConfig.html
+++ b/db/docs/java/com/sleepycat/db/SequenceConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SequenceConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+SequenceConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.SequenceConfig class">
@@ -14,9 +14,11 @@ SequenceConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SequenceConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SequenceConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SequenceConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class SequenceConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.SequenceConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.SequenceConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>SequenceConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>SequenceConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
Specify the attributes of a sequence.
@@ -104,16 +108,13 @@ Specify the attributes of a sequence.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -121,7 +122,8 @@ Specify the attributes of a sequence.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#DEFAULT">DEFAULT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to methods that create a
+ cursor.</TD>
</TR>
</TABLE>
&nbsp;
@@ -130,8 +132,8 @@ Specify the attributes of a sequence.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#SequenceConfig()">SequenceConfig</A></B>()</CODE>
@@ -147,8 +149,8 @@ Specify the attributes of a sequence.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -156,7 +158,7 @@ Specify the attributes of a sequence.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#getAllowCreate()">getAllowCreate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
to create the sequence if it does not already exist.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -165,7 +167,7 @@ Specify the attributes of a sequence.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#getAutoCommitNoSync()">getAutoCommitNoSync</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the auto-commit operations on the sequence are configure to not
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the auto-commit operations on the sequence are configure to not
flush the transaction log..</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -182,7 +184,7 @@ Specify the attributes of a sequence.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#getDecrement()">getDecrement</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the sequence is configured to decrement.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the sequence is configured to decrement.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -190,7 +192,7 @@ Specify the attributes of a sequence.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#getExclusiveCreate()">getExclusiveCreate</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
fail if the database already exists.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -223,7 +225,7 @@ Specify the attributes of a sequence.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceConfig.html#getWrap()">getWrap</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the sequence will wrap around when it is incremented
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the sequence will wrap around when it is incremented
(decremented) past the specified maximum (minimum) value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -301,10 +303,10 @@ Set the initial value for a sequence.</TD>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -315,8 +317,8 @@ Set the initial value for a sequence.</TD>
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -325,6 +327,9 @@ DEFAULT</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A> <B>DEFAULT</B></PRE>
<DL>
+<DD>Default configuration used if null is passed to methods that create a
+ cursor.
+<P>
<DL>
</DL>
</DL>
@@ -334,8 +339,8 @@ public static final <A HREF="../../../com/sleepycat/db/SequenceConfig.html" titl
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -354,8 +359,8 @@ public <B>SequenceConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -386,7 +391,7 @@ getAllowCreate</H3>
<PRE>
public boolean <B>getAllowCreate</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
to create the sequence if it does not already exist.
<p>
This method may be called at any time during the life of the application.
@@ -397,7 +402,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
to create the sequence if it does not already exist.</DL>
</DD>
</DL>
@@ -430,7 +435,7 @@ getAutoCommitNoSync</H3>
<PRE>
public boolean <B>getAutoCommitNoSync</B>()</PRE>
<DL>
-<DD>Return if the auto-commit operations on the sequence are configure to not
+<DD>Return true if the auto-commit operations on the sequence are configure to not
flush the transaction log..
<p>
This method may be called at any time during the life of the application.
@@ -441,7 +446,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the auto-commit operations on the sequence are configure to not
+<DT><B>Returns:</B><DD>True if the auto-commit operations on the sequence are configure to not
flush the transaction log..</DL>
</DD>
</DL>
@@ -512,7 +517,7 @@ getDecrement</H3>
<PRE>
public boolean <B>getDecrement</B>()</PRE>
<DL>
-<DD>Return if the sequence is configured to decrement.
+<DD>Return true if the sequence is configured to decrement.
<p>
This method may be called at any time during the life of the application.
<p>
@@ -522,7 +527,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the sequence is configured to decrement.</DL>
+<DT><B>Returns:</B><DD>True if the sequence is configured to decrement.</DL>
</DD>
</DL>
<HR>
@@ -554,7 +559,7 @@ getExclusiveCreate</H3>
<PRE>
public boolean <B>getExclusiveCreate</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
fail if the database already exists.
<p>
This method may be called at any time during the life of the application.
@@ -565,7 +570,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
fail if the database already exists.</DL>
</DD>
</DL>
@@ -699,7 +704,7 @@ getWrap</H3>
<PRE>
public boolean <B>getWrap</B>()</PRE>
<DL>
-<DD>Return if the sequence will wrap around when it is incremented
+<DD>Return true if the sequence will wrap around when it is incremented
(decremented) past the specified maximum (minimum) value.
<p>
This method may be called at any time during the life of the application.
@@ -710,7 +715,7 @@ This method may be called at any time during the life of the application.
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the sequence will wrap around when it is incremented
+<DT><B>Returns:</B><DD>True if the sequence will wrap around when it is incremented
(decremented) past the specified maximum (minimum) value.</DL>
</DD>
</DL>
@@ -723,7 +728,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -739,7 +744,7 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -748,7 +753,7 @@ This method may be called at any time during the life of the application.
&nbsp;<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SequenceConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -761,6 +766,7 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -774,6 +780,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/SequenceStats.html b/db/docs/java/com/sleepycat/db/SequenceStats.html
index 84283f250..029eed9c4 100644
--- a/db/docs/java/com/sleepycat/db/SequenceStats.html
+++ b/db/docs/java/com/sleepycat/db/SequenceStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-SequenceStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+SequenceStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.SequenceStats class">
@@ -14,9 +14,11 @@ SequenceStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="SequenceStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="SequenceStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SequenceStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,36 +90,29 @@ com.sleepycat.db</FONT>
Class SequenceStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.SequenceStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.SequenceStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>SequenceStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>SequenceStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
-A SequenceStats object is used to return sequenece statistics.
+A SequenceStats object is used to return sequence statistics.
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -192,63 +188,37 @@ A SequenceStats object is used to return sequenece statistics.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times a thread of control was forced to wait on the
handle mutex.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/SequenceStats.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
-<A NAME="getWait()"><!-- --></A><H3>
-getWait</H3>
-<PRE>
-public int <B>getWait</B>()</PRE>
-<DL>
-<DD>The number of times a thread of control was forced to wait on the
- handle mutex.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getNowait()"><!-- --></A><H3>
-getNowait</H3>
-<PRE>
-public int <B>getNowait</B>()</PRE>
-<DL>
-<DD>The number of times that a thread of control was able to obtain handle
- mutex without waiting.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
<A NAME="getCurrent()"><!-- --></A><H3>
getCurrent</H3>
<PRE>
@@ -327,6 +297,34 @@ public int <B>getCacheSize</B>()</PRE>
</DL>
<HR>
+<A NAME="getWait()"><!-- --></A><H3>
+getWait</H3>
+<PRE>
+public int <B>getWait</B>()</PRE>
+<DL>
+<DD>The number of times a thread of control was forced to wait on the
+ handle mutex.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getNowait()"><!-- --></A><H3>
+getNowait</H3>
+<PRE>
+public int <B>getNowait</B>()</PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain handle
+ mutex without waiting.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getFlags()"><!-- --></A><H3>
getFlags</H3>
<PRE>
@@ -338,6 +336,22 @@ public int <B>getFlags</B>()</PRE>
</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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
+<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -347,7 +361,7 @@ public int <B>getFlags</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -363,7 +377,7 @@ public int <B>getFlags</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -372,7 +386,7 @@ public int <B>getFlags</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/SequenceStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -385,6 +399,7 @@ public int <B>getFlags</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -398,6 +413,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/StatsConfig.html b/db/docs/java/com/sleepycat/db/StatsConfig.html
index 083a05388..9681c7787 100644
--- a/db/docs/java/com/sleepycat/db/StatsConfig.html
+++ b/db/docs/java/com/sleepycat/db/StatsConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-StatsConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+StatsConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.StatsConfig class">
@@ -14,9 +14,11 @@ StatsConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="StatsConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="StatsConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/StatsConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StatsConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class StatsConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.StatsConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.StatsConfig</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>StatsConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>StatsConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Specifies the attributes of a statistics retrieval operation.
@@ -101,16 +105,13 @@ Specifies the attributes of a statistics retrieval operation.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -127,8 +128,8 @@ Specifies the attributes of a statistics retrieval operation.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/StatsConfig.html#StatsConfig()">StatsConfig</A></B>()</CODE>
@@ -144,8 +145,8 @@ Specifies the attributes of a statistics retrieval operation.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -187,10 +188,10 @@ Specifies the attributes of a statistics retrieval operation.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -201,8 +202,8 @@ Specifies the attributes of a statistics retrieval operation.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -220,8 +221,8 @@ public static final <A HREF="../../../com/sleepycat/db/StatsConfig.html" title="
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -240,8 +241,8 @@ public <B>StatsConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -336,7 +337,7 @@ public boolean <B>getClear</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -352,7 +353,7 @@ public boolean <B>getClear</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -361,7 +362,7 @@ public boolean <B>getClear</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/StatsConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StatsConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -374,6 +375,7 @@ public boolean <B>getClear</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -387,6 +389,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Transaction.html b/db/docs/java/com/sleepycat/db/Transaction.html
index 6bc89efa4..8611d3378 100644
--- a/db/docs/java/com/sleepycat/db/Transaction.html
+++ b/db/docs/java/com/sleepycat/db/Transaction.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-Transaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+Transaction (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.Transaction class">
@@ -14,9 +14,11 @@ Transaction (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Transaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Transaction (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Transaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Transaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class Transaction</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.Transaction</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.Transaction</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>Transaction</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>Transaction</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The Transaction object is the handle for a transaction. Methods off the
@@ -126,22 +130,14 @@ To customize the attributes of a transaction:
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -178,14 +174,6 @@ To customize the attributes of a transaction:
<TR BGCOLOR="white" CLASS="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/Transaction.html#commitWriteNoSync()">commitWriteNoSync</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction, writing but not flushing 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><A HREF="../../../com/sleepycat/db/Transaction.html#discard()">discard</A></B>()</CODE>
<BR>
@@ -203,6 +191,14 @@ To customize the attributes of a transaction:
</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Transaction.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the user visible name for 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/Transaction.html#prepare(byte[])">prepare</A></B>(byte[]&nbsp;gid)</CODE>
@@ -220,6 +216,14 @@ To customize the attributes of a transaction:
<TR BGCOLOR="white" CLASS="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/Transaction.html#setName(java.lang.String)">setName</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the user visible name for 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/Transaction.html#setTxnTimeout(long)">setTxnTimeout</A></B>(long&nbsp;timeOut)</CODE>
<BR>
@@ -229,28 +233,22 @@ To customize the attributes of a transaction:
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -448,54 +446,6 @@ of the transaction will have been aborted when the call returns.
</DL>
<HR>
-<A NAME="commitWriteNoSync()"><!-- --></A><H3>
-commitWriteNoSync</H3>
-<PRE>
-public void <B>commitWriteNoSync</B>()
- throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
-<DL>
-<DD>End the transaction, writing but not flushing 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 this transaction may be undone during
-recovery in the event that the operating system crashes. This option
-provides more durability than an asynchronous commit and has less
-performance cost than a synchronous commit.
-<p>
-This behavior may be set for a database environment using the
-<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html#setTxnWriteNoSync(boolean)"><CODE>EnvironmentConfig.setTxnWriteNoSync</CODE></A> method or for a single
-transaction using the <A HREF="../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction</CODE></A> method.
-Any value specified to this method overrides both of those settings.
-<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>
-All cursors opened within the transaction must be closed before the
-transaction is committed.
-<p>
-After this method returns the <A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><CODE>Transaction</CODE></A> handle may not be
-accessed again, regardless of the method's success or failure. If the
-method encounters an error, the transaction and all child transactions
-of the transaction will have been aborted when the call returns.
-<p>
-<p>
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE> - if a failure occurs.</DL>
-</DD>
-</DL>
-<HR>
-
<A NAME="setTxnTimeout(long)"><!-- --></A><H3>
setTxnTimeout</H3>
<PRE>
@@ -560,6 +510,43 @@ public void <B>setLockTimeout</B>(long&nbsp;timeOut)
</DL>
<HR>
+<A NAME="setName(java.lang.String)"><!-- --></A><H3>
+setName</H3>
+<PRE>
+public void <B>setName</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Set the user visible name for the transaction.
+ <p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>name</CODE> - The user visible name for the transaction.
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getName</B>()
+ throws <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></PRE>
+<DL>
+<DD>Get the user visible name for the transaction.
+ <p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The user visible name for the transaction.
+ <p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="discard()"><!-- --></A><H3>
discard</H3>
<PRE>
@@ -633,7 +620,7 @@ public void <B>prepare</B>(byte[]&nbsp;gid)
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -649,7 +636,7 @@ public void <B>prepare</B>(byte[]&nbsp;gid)
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -658,7 +645,7 @@ public void <B>prepare</B>(byte[]&nbsp;gid)
&nbsp;<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/Transaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Transaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -671,6 +658,7 @@ public void <B>prepare</B>(byte[]&nbsp;gid)
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -684,6 +672,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/TransactionConfig.html b/db/docs/java/com/sleepycat/db/TransactionConfig.html
index bffc2054a..14ed9da81 100644
--- a/db/docs/java/com/sleepycat/db/TransactionConfig.html
+++ b/db/docs/java/com/sleepycat/db/TransactionConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-TransactionConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+TransactionConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.TransactionConfig class">
@@ -14,9 +14,11 @@ TransactionConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TransactionConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TransactionConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/TransactionConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class TransactionConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.TransactionConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.TransactionConfig</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" title="class or interface in java.lang">Cloneable</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TransactionConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+<DT><PRE>public class <B>TransactionConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A></DL>
+</PRE>
<P>
Specifies the attributes of a database environment transaction.
@@ -104,16 +108,13 @@ Specifies the attributes of a database environment transaction.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -121,7 +122,8 @@ Specifies the attributes of a database environment transaction.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#DEFAULT">DEFAULT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to methods that create a
+ transaction.</TD>
</TR>
</TABLE>
&nbsp;
@@ -130,8 +132,8 @@ Specifies the attributes of a database environment transaction.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#TransactionConfig()">TransactionConfig</A></B>()</CODE>
@@ -147,8 +149,8 @@ Specifies the attributes of a database environment transaction.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -156,7 +158,8 @@ Specifies the attributes of a database environment transaction.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#getDegree2()">getDegree2</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the transaction has been configured to have degree 2 isolation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#getReadCommitted()"><CODE>getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -164,7 +167,8 @@ Specifies the attributes of a database environment transaction.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#getDirtyRead()">getDirtyRead</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the transaction is configured to perform dirty reads.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#getReadUncommitted()"><CODE>getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -187,19 +191,35 @@ Specifies the attributes of a database environment transaction.
<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/TransactionConfig.html#getSync()">getSync</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#getReadCommitted()">getReadCommitted</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the transaction is configured to not write or synchronously
- flush the log it when commits.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the transaction is configured for read committed isolation.</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/TransactionConfig.html#getWriteNoSync()">getWriteNoSync</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#getReadUncommitted()">getReadUncommitted</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the transaction is configured to write but not synchronously
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if read operations performed by the transaction are configured to
+ return modified but not yet committed data.</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/TransactionConfig.html#getSnapshot()">getSnapshot</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the transaction is configured for Snapshot Isolation.</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/TransactionConfig.html#getSync()">getSync</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the transaction is configured to write and synchronously
flush the log it when commits.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -208,7 +228,8 @@ Specifies the attributes of a database environment transaction.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#setDegree2(boolean)">setDegree2</A></B>(boolean&nbsp;degree2)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure this transaction to have degree 2 isolation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#setReadCommitted(boolean)"><CODE>setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -216,7 +237,8 @@ Specifies the attributes of a database environment transaction.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#setDirtyRead(boolean)">setDirtyRead</A></B>(boolean&nbsp;dirtyRead)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the transaction to perform dirty reads.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#setReadUncommitted(boolean)"><CODE>setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -239,29 +261,45 @@ Specifies the attributes of a database environment transaction.
<TR BGCOLOR="white" CLASS="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/TransactionConfig.html#setSync(boolean)">setSync</A></B>(boolean&nbsp;txnSync)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#setReadCommitted(boolean)">setReadCommitted</A></B>(boolean&nbsp;readCommitted)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the transaction to write or synchronously flush the log
- it when commits.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the transaction for read committed isolation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="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/TransactionConfig.html#setWriteNoSync(boolean)">setWriteNoSync</A></B>(boolean&nbsp;txnWriteNoSync)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionConfig.html#setReadUncommitted(boolean)">setReadUncommitted</A></B>(boolean&nbsp;readUncommitted)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the transaction to write but not synchronously flush the log
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure read operations performed by the transaction to return modified
+ but not yet committed 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/db/TransactionConfig.html#setSnapshot(boolean)">setSnapshot</A></B>(boolean&nbsp;snapshot)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This transaction will execute with snapshot isolation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="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/TransactionConfig.html#setSync(boolean)">setSync</A></B>(boolean&nbsp;txnSync)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the transaction to write and synchronously flush the log
it when commits.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -272,8 +310,8 @@ Specifies the attributes of a database environment transaction.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -282,6 +320,9 @@ DEFAULT</H3>
<PRE>
public static final <A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A> <B>DEFAULT</B></PRE>
<DL>
+<DD>Default configuration used if null is passed to methods that create a
+ transaction.
+<P>
<DL>
</DL>
</DL>
@@ -291,8 +332,8 @@ public static final <A HREF="../../../com/sleepycat/db/TransactionConfig.html" t
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -311,28 +352,157 @@ public <B>TransactionConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
+<A NAME="setReadUncommitted(boolean)"><!-- --></A><H3>
+setReadUncommitted</H3>
+<PRE>
+public void <B>setReadUncommitted</B>(boolean&nbsp;readUncommitted)</PRE>
+<DL>
+<DD>Configure read operations performed by the transaction to return modified
+ but not yet committed data.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>readUncommitted</CODE> - If true, configure read operations performed by the transaction to return
+ modified but not yet committed data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReadUncommitted()"><!-- --></A><H3>
+getReadUncommitted</H3>
+<PRE>
+public boolean <B>getReadUncommitted</B>()</PRE>
+<DL>
+<DD>Return if read operations performed by the transaction are configured to
+ return modified but not yet committed data.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>If read operations performed by the transaction are configured to return
+ modified but not yet committed data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDirtyRead(boolean)"><!-- --></A><H3>
+setDirtyRead</H3>
+<PRE>
+public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#setReadUncommitted(boolean)"><CODE>setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Configure read operations performed by the transaction to return modified
+ but not yet committed data.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dirtyRead</CODE> - If true, configure read operations performed by the transaction to return
+ modified but not yet committed data.
+ <p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDirtyRead()"><!-- --></A><H3>
+getDirtyRead</H3>
+<PRE>
+public boolean <B>getDirtyRead</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#getReadUncommitted()"><CODE>getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Return if read operations performed by the transaction are configured to
+ return modified but not yet committed data.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>If read operations performed by the transaction are configured to return
+ modified but not yet committed data.
+ <p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReadCommitted(boolean)"><!-- --></A><H3>
+setReadCommitted</H3>
+<PRE>
+public void <B>setReadCommitted</B>(boolean&nbsp;readCommitted)</PRE>
+<DL>
+<DD>Configure the transaction for read committed isolation.
+ <p>
+ This ensures the stability of the current data item read by the
+ cursor but permits data read by this transaction to be modified or
+ deleted prior to the commit of the transaction.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>readCommitted</CODE> - If true, configure the transaction for read committed isolation.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReadCommitted()"><!-- --></A><H3>
+getReadCommitted</H3>
+<PRE>
+public boolean <B>getReadCommitted</B>()</PRE>
+<DL>
+<DD>Return if the transaction is configured for read committed isolation.
+ <p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>If the transaction is configured for read committed isolation.</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="setDegree2(boolean)"><!-- --></A><H3>
setDegree2</H3>
<PRE>
public void <B>setDegree2</B>(boolean&nbsp;degree2)</PRE>
<DL>
-<DD>Configure this transaction to have degree 2 isolation. This provides
- for cursor stability but not repeatable reads. Data items which have
- been previously read by this transaction may be deleted or modified by
- other transactions before this transaction completes.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#setReadCommitted(boolean)"><CODE>setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Configure the transaction for read committed isolation.
+ <p>
+ This ensures the stability of the current data item read by the
+ cursor but permits data read by this transaction to be modified or
+ deleted prior to the commit of the transaction.
<p>
- The default is false for this class and the database environment.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-</DL>
+<DT><B>Parameters:</B><DD><CODE>degree2</CODE> - If true, configure the transaction for read committed isolation.
+ <p></DL>
</DD>
</DL>
<HR>
@@ -342,7 +512,10 @@ getDegree2</H3>
<PRE>
public boolean <B>getDegree2</B>()</PRE>
<DL>
-<DD>Return if the transaction has been configured to have degree 2 isolation.
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../com/sleepycat/db/TransactionConfig.html#getReadCommitted()"><CODE>getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<P>
+<DD>Return if the transaction is configured for read committed isolation.
<p>
<P>
<DD><DL>
@@ -350,97 +523,90 @@ public boolean <B>getDegree2</B>()</PRE>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the transaction has been configured to have degree 2 isolation.</DL>
+<DT><B>Returns:</B><DD>If the transaction is configured for read committed isolation.
+ <p></DL>
</DD>
</DL>
<HR>
-<A NAME="setSync(boolean)"><!-- --></A><H3>
-setSync</H3>
+<A NAME="setSnapshot(boolean)"><!-- --></A><H3>
+setSnapshot</H3>
<PRE>
-public void <B>setSync</B>(boolean&nbsp;txnSync)</PRE>
+public void <B>setSnapshot</B>(boolean&nbsp;snapshot)</PRE>
<DL>
-<DD>Configure the transaction to write or synchronously flush the log
- it when commits.
- <p>
- This behavior may be set for a database environment using the
- Environment.setMutableConfig method. Any value specified to this
- method overrides that setting.
- <p>
- The default is false for this class and true for the database
- environment.
- <p>
- If true is passed to both setSync and setNoSync, setSync will take
- precedence.
+<DD>This transaction will execute with snapshot isolation. For databases
+ configured with <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMultiversion(boolean)"><CODE>DatabaseConfig.setMultiversion(boolean)</CODE></A>, data values
+ will be read as they are when the transaction begins, without taking
+ read locks.
<p>
+ Updates operations performed in the transaction will cause an
+ <A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><CODE>UpdateConflictException</CODE></A> to be thrown if data is modified
+ between reading and writing it.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>txnSync</CODE> - If true, transactions exhibit all the ACID (atomicity, consistency,
- isolation, and durability) properties.</DL>
+</DL>
</DD>
</DL>
<HR>
-<A NAME="getSync()"><!-- --></A><H3>
-getSync</H3>
+<A NAME="getSnapshot()"><!-- --></A><H3>
+getSnapshot</H3>
<PRE>
-public boolean <B>getSync</B>()</PRE>
+public boolean <B>getSnapshot</B>()</PRE>
<DL>
-<DD>Return if the transaction is configured to not write or synchronously
- flush the log it when commits.
- <p>
+<DD>Return true if the transaction is configured for Snapshot Isolation.
+<p>
+This method may be called at any time during the life of the application.
+<p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the transaction is configured to not write or synchronously flush
- the log it when commits.</DL>
+<DT><B>Returns:</B><DD>True if the transaction is configured for Snapshot Isolation.</DL>
</DD>
</DL>
<HR>
-<A NAME="setWriteNoSync(boolean)"><!-- --></A><H3>
-setWriteNoSync</H3>
+<A NAME="setSync(boolean)"><!-- --></A><H3>
+setSync</H3>
<PRE>
-public void <B>setWriteNoSync</B>(boolean&nbsp;txnWriteNoSync)</PRE>
+public void <B>setSync</B>(boolean&nbsp;txnSync)</PRE>
<DL>
-<DD>Configure the transaction to write but not synchronously flush the log
+<DD>Configure the transaction to write and synchronously flush the log
it when commits.
<p>
This behavior may be set for a database environment using the
- Environment.setMutableConfig method. Any value specified to this method
- overrides that setting.
+ Environment.setMutableConfig method. Any value specified to this
+ method overrides that setting.
<p>
- The default is false for this class and the database environment.
+ The default is false for this class and true for the database
+ environment.
+ <p>
+ If true is passed to both setSync and setNoSync, setSync will take
+ precedence.
<p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>txnWriteNoSync</CODE> - If true, transactions exhibit the ACI (atomicity, consistency, and
- isolation) properties, but not D (durability); that is, database
- integrity will be maintained, but if the operating 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 operating system
- flushes dirty buffers to disk, and how often the log is
- checkpointed.</DL>
+<DT><B>Parameters:</B><DD><CODE>txnSync</CODE> - If true, transactions exhibit all the ACID (atomicity, consistency,
+ isolation, and durability) properties.</DL>
</DD>
</DL>
<HR>
-<A NAME="getWriteNoSync()"><!-- --></A><H3>
-getWriteNoSync</H3>
+<A NAME="getSync()"><!-- --></A><H3>
+getSync</H3>
<PRE>
-public boolean <B>getWriteNoSync</B>()</PRE>
+public boolean <B>getSync</B>()</PRE>
<DL>
-<DD>Return if the transaction is configured to write but not synchronously
+<DD>Return if the transaction is configured to write and synchronously
flush the log it when commits.
<p>
<P>
@@ -449,7 +615,7 @@ public boolean <B>getWriteNoSync</B>()</PRE>
</DD>
<DD><DL>
-<DT><B>Returns:</B><DD>If the transaction is configured to not write or synchronously flush
+<DT><B>Returns:</B><DD>If the transaction is configured to write and synchronously flush
the log it when commits.</DL>
</DD>
</DL>
@@ -545,44 +711,6 @@ public boolean <B>getNoWait</B>()</PRE>
cannot be immediately granted.</DL>
</DD>
</DL>
-<HR>
-
-<A NAME="setDirtyRead(boolean)"><!-- --></A><H3>
-setDirtyRead</H3>
-<PRE>
-public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
-<DL>
-<DD>Configure the transaction to perform dirty reads.
- <p>
- The default is false for this class and the database environment.
- <p>
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>dirtyRead</CODE> - If true, all read operations performed by the transaction may read
- modified but not yet committed data.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getDirtyRead()"><!-- --></A><H3>
-getDirtyRead</H3>
-<PRE>
-public boolean <B>getDirtyRead</B>()</PRE>
-<DL>
-<DD>Return if the transaction is configured to perform dirty reads.
- <p>
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>If the transaction is configured to perform dirty reads.</DL>
-</DD>
-</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
@@ -592,7 +720,7 @@ public boolean <B>getDirtyRead</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -608,7 +736,7 @@ public boolean <B>getDirtyRead</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -617,7 +745,7 @@ public boolean <B>getDirtyRead</B>()</PRE>
&nbsp;<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/TransactionConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -630,6 +758,7 @@ public boolean <B>getDirtyRead</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -643,6 +772,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/TransactionStats.Active.html b/db/docs/java/com/sleepycat/db/TransactionStats.Active.html
index d2be2c930..9d1e70d8a 100644
--- a/db/docs/java/com/sleepycat/db/TransactionStats.Active.html
+++ b/db/docs/java/com/sleepycat/db/TransactionStats.Active.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-TransactionStats.Active (Sleepycat Software, Inc. - Berkeley DB Java API)
+TransactionStats.Active (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.TransactionStats.Active class">
@@ -14,9 +14,11 @@ TransactionStats.Active (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TransactionStats.Active (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TransactionStats.Active (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/TransactionStats.Active.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.Active.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,14 +90,15 @@ com.sleepycat.db</FONT>
Class TransactionStats.Active</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.TransactionStats.Active</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.TransactionStats.Active</B>
</PRE>
<DL>
<DT><B>Enclosing class:</B><DD><A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></DD>
</DL>
<HR>
<DL>
-<DT>public class <B>TransactionStats.Active</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public static class <B>TransactionStats.Active</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
The Active class represents an active transaction.
@@ -104,22 +108,14 @@ The Active class represents an active transaction.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -132,6 +128,22 @@ The Active class represents an active transaction.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#getMultiversionRef()">getMultiversionRef</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of buffer copies created by this transaction that remain in cache.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The transaction name, including the thread name if available.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#getParentId()">getParentId</A></B>()</CODE>
<BR>
@@ -140,6 +152,22 @@ The Active class represents an active transaction.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#getPid()">getPid</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The process ID of the process that owns 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/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#getReadLsn()">getReadLsn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log sequence number of reads for snapshot transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#getTxnId()">getTxnId</A></B>()</CODE>
<BR>
@@ -152,7 +180,7 @@ The Active class represents an active transaction.
<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>
+ transaction, otherwise 0.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,37 +189,52 @@ The Active class represents an active transaction.
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the transaction is an XA transaction, the XA global
- transaction ID.</TD>
+ transaction 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/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getName</B>()</PRE>
+<DL>
+<DD>The transaction name, including the thread name if available.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getTxnId()"><!-- --></A><H3>
getTxnId</H3>
<PRE>
@@ -218,6 +261,19 @@ public int <B>getParentId</B>()</PRE>
</DL>
<HR>
+<A NAME="getPid()"><!-- --></A><H3>
+getPid</H3>
+<PRE>
+public int <B>getPid</B>()</PRE>
+<DL>
+<DD>The process ID of the process that owns the transaction.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getLsn()"><!-- --></A><H3>
getLsn</H3>
<PRE>
@@ -231,13 +287,39 @@ public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class i
</DL>
<HR>
+<A NAME="getReadLsn()"><!-- --></A><H3>
+getReadLsn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A> <B>getReadLsn</B>()</PRE>
+<DL>
+<DD>The log sequence number of reads for snapshot transactions.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMultiversionRef()"><!-- --></A><H3>
+getMultiversionRef</H3>
+<PRE>
+public int <B>getMultiversionRef</B>()</PRE>
+<DL>
+<DD>The number of buffer copies created by this transaction that remain in cache.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getXaStatus()"><!-- --></A><H3>
getXaStatus</H3>
<PRE>
public int <B>getXaStatus</B>()</PRE>
<DL>
<DD>If the transaction is an XA transaction, the status of the
- transaction, otherwise 0.
+ transaction, otherwise 0.
<P>
<DD><DL>
</DL>
@@ -251,9 +333,25 @@ getXId</H3>
public byte[] <B>getXId</B>()</PRE>
<DL>
<DD>If the transaction is an XA transaction, the XA global
- transaction ID.
+ transaction ID.
+<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" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -266,7 +364,7 @@ public byte[] <B>getXId</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -282,16 +380,16 @@ public byte[] <B>getXId</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/TransactionStats.Active.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.Active.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -304,6 +402,7 @@ public byte[] <B>getXId</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -317,6 +416,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/TransactionStats.html b/db/docs/java/com/sleepycat/db/TransactionStats.html
index c50137120..b79f94b44 100644
--- a/db/docs/java/com/sleepycat/db/TransactionStats.html
+++ b/db/docs/java/com/sleepycat/db/TransactionStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-TransactionStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+TransactionStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.TransactionStats class">
@@ -14,9 +14,11 @@ TransactionStats (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="TransactionStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="TransactionStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/TransactionStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class TransactionStats</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.TransactionStats</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.TransactionStats</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>TransactionStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>TransactionStats</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Transaction statistics for a database environment.
@@ -106,12 +110,12 @@ Transaction statistics for a database environment.
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
+<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A></B></CODE>
<BR>
@@ -119,19 +123,13 @@ Transaction statistics for a database environment.
</TR>
</TABLE>
&nbsp;
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,6 +158,14 @@ Transaction statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.html#getMaxNsnapshot()">getMaxNsnapshot</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of transactions on the snapshot list 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/TransactionStats.html#getMaxTxns()">getMaxTxns</A></B>()</CODE>
<BR>
@@ -208,6 +214,14 @@ Transaction statistics for a database environment.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.html#getNumSnapshot()">getNumSnapshot</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions on the snapshot 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/TransactionStats.html#getRegionNowait()">getRegionNowait</A></B>()</CODE>
<BR>
@@ -255,35 +269,28 @@ Transaction statistics for a database environment.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/TransactionStats.html#toString()">toString</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For convenience, the TransactionStats class has a toString method
- that lists all the data fields.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -393,6 +400,22 @@ public int <B>getNactive</B>()</PRE>
</DL>
<HR>
+<A NAME="getNumSnapshot()"><!-- --></A><H3>
+getNumSnapshot</H3>
+<PRE>
+public int <B>getNumSnapshot</B>()</PRE>
+<DL>
+<DD>The number of transactions on the snapshot list. These are transactions
+ which modified a database opened with <A HREF="../../../com/sleepycat/db/DatabaseConfig.html#setMultiversion(boolean)"><CODE>DatabaseConfig.setMultiversion(boolean)</CODE></A>,
+ and which have committed or aborted, but the copies of pages they
+ created are still in the cache.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getNumRestores()"><!-- --></A><H3>
getNumRestores</H3>
<PRE>
@@ -419,6 +442,19 @@ public int <B>getMaxNactive</B>()</PRE>
</DL>
<HR>
+<A NAME="getMaxNsnapshot()"><!-- --></A><H3>
+getMaxNsnapshot</H3>
+<PRE>
+public int <B>getMaxNsnapshot</B>()</PRE>
+<DL>
+<DD>The maximum number of transactions on the snapshot list at any one time.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="getRegionWait()"><!-- --></A><H3>
getRegionWait</H3>
<PRE>
@@ -478,10 +514,12 @@ toString</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
<DL>
-<DD>For convenience, the TransactionStats class has a toString method
- that lists all the data fields.
+<DD>
<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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -494,7 +532,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -510,7 +548,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -519,7 +557,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/TransactionStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -532,6 +570,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" tit
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -545,6 +584,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/UpdateConflictException.html b/db/docs/java/com/sleepycat/db/UpdateConflictException.html
new file mode 100644
index 000000000..b74b62060
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/UpdateConflictException.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+UpdateConflictException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.UpdateConflictException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="UpdateConflictException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/UpdateConflictException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/UpdateConflictException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UpdateConflictException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class UpdateConflictException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.UpdateConflictException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>UpdateConflictException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+Thrown when a snapshot transaction attempts to update data
+which was modified after the snapshot transaction read it.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.UpdateConflictException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/UpdateConflictException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/UpdateConflictException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UpdateConflictException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/VerifyConfig.html b/db/docs/java/com/sleepycat/db/VerifyConfig.html
index 74d842c6e..b49b9b49f 100644
--- a/db/docs/java/com/sleepycat/db/VerifyConfig.html
+++ b/db/docs/java/com/sleepycat/db/VerifyConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:49 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
<TITLE>
-VerifyConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+VerifyConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db.VerifyConfig class">
@@ -14,9 +14,11 @@ VerifyConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="VerifyConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="VerifyConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/VerifyConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="VerifyConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.db</FONT>
Class VerifyConfig</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.db.VerifyConfig</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.VerifyConfig</B>
</PRE>
<HR>
<DL>
-<DT>public class <B>VerifyConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>VerifyConfig</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
Specifies the attributes of a verification operation.
@@ -101,16 +105,13 @@ Specifies the attributes of a verification operation.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,7 +120,7 @@ Specifies the attributes of a verification operation.
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to
- <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A>.</TD>
+ <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -128,8 +129,8 @@ Specifies the attributes of a verification operation.
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#VerifyConfig()">VerifyConfig</A></B>()</CODE>
@@ -145,8 +146,8 @@ Specifies the attributes of a verification operation.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -154,7 +155,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#getAggressive()">getAggressive</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to output
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to output
<b>all</b> the key/data pairs in the file that can be found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -163,7 +164,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#getNoOrderCheck()">getNoOrderCheck</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
database checks for btree and duplicate sort order and for hashing.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -172,7 +173,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#getOrderCheckOnly()">getOrderCheckOnly</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to do database
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to do database
checks for btree and duplicate sort order and for hashing, skipped
by verification operations configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.</TD>
</TR>
@@ -182,7 +183,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#getPrintable()">getPrintable</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
characters to where possible.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -191,7 +192,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#getSalvage()">getSalvage</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to write the
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to write the
key/data pairs from all databases in the file to the file stream
named by the outfile parameter..</TD>
</TR>
@@ -201,7 +202,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#setAggressive(boolean)">setAggressive</A></B>(boolean&nbsp;aggressive)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b> the
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b> the
key/data pairs in the file that can be found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -210,7 +211,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)">setNoOrderCheck</A></B>(boolean&nbsp;noOrderCheck)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to skip the database checks for
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to skip the database checks for
btree and duplicate sort order and for hashing.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -219,7 +220,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#setOrderCheckOnly(boolean)">setOrderCheckOnly</A></B>(boolean&nbsp;orderCheckOnly)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to do database checks for btree
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to do database checks for btree
and duplicate sort order and for hashing, skipped by verification
operations configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.</TD>
</TR>
@@ -229,7 +230,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#setPrintable(boolean)">setPrintable</A></B>(boolean&nbsp;printable)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to use printing characters to
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to use printing characters to
where possible.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -238,7 +239,7 @@ Specifies the attributes of a verification operation.
<TD><CODE><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html#setSalvage(boolean)">setSalvage</A></B>(boolean&nbsp;salvage)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to write the key/data pairs from
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to write the key/data pairs from
all databases in the file to the file stream named by the outfile
parameter.</TD>
</TR>
@@ -246,10 +247,10 @@ Specifies the attributes of a verification operation.
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -260,8 +261,8 @@ Specifies the attributes of a verification operation.
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -271,7 +272,7 @@ DEFAULT</H3>
public static final <A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A> <B>DEFAULT</B></PRE>
<DL>
<DD>Default configuration used if null is passed to
- <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A>.
+ <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A>.
<P>
<DL>
</DL>
@@ -282,8 +283,8 @@ public static final <A HREF="../../../com/sleepycat/db/VerifyConfig.html" title=
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -302,8 +303,8 @@ public <B>VerifyConfig</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -312,25 +313,25 @@ setNoOrderCheck</H3>
<PRE>
public void <B>setNoOrderCheck</B>(boolean&nbsp;noOrderCheck)</PRE>
<DL>
-<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to skip the database checks for
+<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to skip the database checks for
btree and duplicate sort order and for hashing.
<p>
- <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> normally verifies that btree keys and
+ <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> 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 <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A>
+ or hash function can be specified before <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A>
is called. To verify files with multiple databases having differing
sorting orders or hashing functions, first perform verification of
- the file as a whole using <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> configured with
+ the file as a whole using <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> configured with
<A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>, and then individually verify
the sort order and hashing function for each database in the file
using 4_link(Database, verify) configured with <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setOrderCheckOnly(boolean)"><CODE>VerifyConfig.setOrderCheckOnly</CODE></A>.
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>noOrderCheck</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to skip the database
+<DT><B>Parameters:</B><DD><CODE>noOrderCheck</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to skip the database
checks for btree and duplicate sort order and for hashing.</DL>
</DD>
</DL>
@@ -341,7 +342,7 @@ getNoOrderCheck</H3>
<PRE>
public boolean <B>getNoOrderCheck</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
database checks for btree and duplicate sort order and for hashing.
<p>
This method may be called at any time during the life of the application.
@@ -349,7 +350,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
database checks for btree and duplicate sort order and for hashing.</DL>
</DD>
</DL>
@@ -360,12 +361,12 @@ setOrderCheckOnly</H3>
<PRE>
public void <B>setOrderCheckOnly</B>(boolean&nbsp;orderCheckOnly)</PRE>
<DL>
-<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to do database checks for btree
+<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to do database checks for btree
and duplicate sort order and for hashing, skipped by verification
operations configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.
<p>
When this flag is specified, a database name must be specified to
- <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A>, indicating the database in the physical
+ <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A>, indicating the database in the physical
file which is to be checked.
<p>
This configuration is only safe to use on databases that have
@@ -373,7 +374,7 @@ public void <B>setOrderCheckOnly</B>(boolean&nbsp;orderCheckOnly)</PRE>
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>orderCheckOnly</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to do database checks
+<DT><B>Parameters:</B><DD><CODE>orderCheckOnly</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to do database checks
for btree and duplicate sort order and for hashing, skipped by
verification operations configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.</DL>
</DD>
@@ -385,7 +386,7 @@ getOrderCheckOnly</H3>
<PRE>
public boolean <B>getOrderCheckOnly</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to do database
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to do database
checks for btree and duplicate sort order and for hashing, skipped
by verification operations configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.
<p>
@@ -394,7 +395,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to do database
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to do database
checks for btree and duplicate sort order and for hashing, skipped
by verification operations configured by <A HREF="../../../com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.</DL>
</DD>
@@ -406,7 +407,7 @@ setPrintable</H3>
<PRE>
public void <B>setPrintable</B>(boolean&nbsp;printable)</PRE>
<DL>
-<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to use printing characters to
+<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to use printing characters to
where possible.
<p>
This method is only meaningful when combined with
@@ -422,7 +423,7 @@ public void <B>setPrintable</B>(boolean&nbsp;printable)</PRE>
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>printable</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to use printing
+<DT><B>Parameters:</B><DD><CODE>printable</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to use printing
characters to where possible.</DL>
</DD>
</DL>
@@ -433,7 +434,7 @@ getPrintable</H3>
<PRE>
public boolean <B>getPrintable</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
characters to where possible.
<p>
This method may be called at any time during the life of the application.
@@ -441,7 +442,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
characters to where possible.</DL>
</DD>
</DL>
@@ -452,7 +453,7 @@ setSalvage</H3>
<PRE>
public void <B>setSalvage</B>(boolean&nbsp;salvage)</PRE>
<DL>
-<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to write the key/data pairs from
+<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to write the key/data pairs from
all databases in the file to the file stream named by the outfile
parameter.
<p>
@@ -460,13 +461,13 @@ public void <B>setSalvage</B>(boolean&nbsp;salvage)</PRE>
utility, and can be used as input for the db_load utility.
<p>
Because the key/data pairs are output in page order as opposed to the
- sort order used by db_dump, using <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to dump
+ sort order used by db_dump, using <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to dump
key/data pairs normally produces less than optimal loads for Btree
databases.
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>salvage</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to write the key/data
+<DT><B>Parameters:</B><DD><CODE>salvage</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to write the key/data
pairs from all databases in the file to the file stream named by the
outfile parameter.</DL>
</DD>
@@ -478,7 +479,7 @@ getSalvage</H3>
<PRE>
public boolean <B>getSalvage</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to write the
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to write the
key/data pairs from all databases in the file to the file stream
named by the outfile parameter..
<p>
@@ -487,7 +488,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to write the
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to write the
key/data pairs from all databases in the file to the file stream
named by the outfile parameter..</DL>
</DD>
@@ -499,12 +500,12 @@ setAggressive</H3>
<PRE>
public void <B>setAggressive</B>(boolean&nbsp;aggressive)</PRE>
<DL>
-<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b> the
+<DD>Configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b> the
key/data pairs in the file that can be found.
<p>
- By default, <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> does not assume corruption.
+ By default, <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> 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 <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured with this method, corruption is assumed, and
+ is not then written to the output file. When <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured with this method, 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
@@ -513,7 +514,7 @@ public void <B>setAggressive</B>(boolean&nbsp;aggressive)</PRE>
<p>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>aggressive</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b>
+<DT><B>Parameters:</B><DD><CODE>aggressive</CODE> - If true, configure <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b>
the key/data pairs in the file that can be found.</DL>
</DD>
</DL>
@@ -524,7 +525,7 @@ getAggressive</H3>
<PRE>
public boolean <B>getAggressive</B>()</PRE>
<DL>
-<DD>Return if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to output
+<DD>Return true if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to output
<b>all</b> the key/data pairs in the file that can be found.
<p>
This method may be called at any time during the life of the application.
@@ -532,7 +533,7 @@ This method may be called at any time during the life of the application.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>If the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to output
+<DT><B>Returns:</B><DD>True if the <A HREF="../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to output
<b>all</b> the key/data pairs in the file that can be found.</DL>
</DD>
</DL>
@@ -545,7 +546,7 @@ This method may be called at any time during the life of the application.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -561,16 +562,16 @@ This method may be called at any time during the life of the application.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db"><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;
+ <A HREF="../../../index.html?com/sleepycat/db/VerifyConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="VerifyConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -583,6 +584,7 @@ This method may be called at any time during the life of the application.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -596,6 +598,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/VersionMismatchException.html b/db/docs/java/com/sleepycat/db/VersionMismatchException.html
new file mode 100644
index 000000000..6bdcc17b6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/VersionMismatchException.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:46 EDT 2006 -->
+<TITLE>
+VersionMismatchException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.db.VersionMismatchException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="VersionMismatchException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/VersionMismatchException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/VersionMismatchException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VersionMismatchException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class VersionMismatchException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.db.VersionMismatchException</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" title="class or interface in java.io">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>VersionMismatchException</B><DT>extends <A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></DL>
+</PRE>
+
+<P>
+Thrown if the version of the Berkeley DB library doesn't match the version that created
+the database environment.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.sleepycat.db.VersionMismatchException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DatabaseException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DatabaseException.html#getEnvironment()">getEnvironment</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DatabaseException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/VersionMismatchException.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/db/VersionMismatchException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VersionMismatchException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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.DatabaseException">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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/BtreePrefixCalculator.html b/db/docs/java/com/sleepycat/db/class-use/BtreePrefixCalculator.html
index 2636ee4eb..fb9a87151 100644
--- a/db/docs/java/com/sleepycat/db/class-use/BtreePrefixCalculator.html
+++ b/db/docs/java/com/sleepycat/db/class-use/BtreePrefixCalculator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.BtreePrefixCalculator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.BtreePrefixCalculator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.BtreePrefixCalculator (Sleepycat Software, In
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.BtreePrefixCalculator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.BtreePrefixCalculator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useBtreePrefixCalculator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreePrefixCalculator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.ht
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></FONT></TD>
+<TH ALIGN="left" 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/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -164,7 +167,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useBtreePrefixCalculator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreePrefixCalculator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -177,6 +180,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -184,6 +188,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html" title=
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/BtreeStats.html b/db/docs/java/com/sleepycat/db/class-use/BtreeStats.html
index df188df53..e86d844b9 100644
--- a/db/docs/java/com/sleepycat/db/class-use/BtreeStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/BtreeStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.BtreeStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.BtreeStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.BtreeStats (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.BtreeStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.BtreeStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useBtreeStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreeStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.BtreeStats
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.BtreeStats
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.BtreeStats
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useBtreeStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="BtreeStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.BtreeStats
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.BtreeStats
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CacheFile.html b/db/docs/java/com/sleepycat/db/class-use/CacheFile.html
index 4bdc21179..cc0e79003 100644
--- a/db/docs/java/com/sleepycat/db/class-use/CacheFile.html
+++ b/db/docs/java/com/sleepycat/db/class-use/CacheFile.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.CacheFile (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.CacheFile (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.CacheFile (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.CacheFile (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.CacheFile (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheFile.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFile.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="c
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in co
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in co
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in co
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in co
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheFile.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFile.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in co
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in co
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CacheFilePriority.html b/db/docs/java/com/sleepycat/db/class-use/CacheFilePriority.html
index 9919582f6..cd8f516a9 100644
--- a/db/docs/java/com/sleepycat/db/class-use/CacheFilePriority.html
+++ b/db/docs/java/com/sleepycat/db/class-use/CacheFilePriority.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.CacheFilePriority (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.CacheFilePriority (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.CacheFilePriority (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.CacheFilePriority (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.CacheFilePriority (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheFilePriority.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFilePriority.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html"
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,7 +169,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TD>
+<TH ALIGN="left" 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/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -188,7 +191,7 @@ cache priority for pages from the specified file.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -204,7 +207,7 @@ cache priority for pages from the specified file.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -213,7 +216,7 @@ cache priority for pages from the specified file.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheFilePriority.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFilePriority.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -226,6 +229,7 @@ cache priority for pages from the specified file.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -233,6 +237,6 @@ cache priority for pages from the specified file.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CacheFileStats.html b/db/docs/java/com/sleepycat/db/class-use/CacheFileStats.html
index 6197b2011..6bb8f3482 100644
--- a/db/docs/java/com/sleepycat/db/class-use/CacheFileStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/CacheFileStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.CacheFileStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.CacheFileStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.CacheFileStats (Sleepycat Software, Inc. - Berkel
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.CacheFileStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.CacheFileStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheFileStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFileStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" tit
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -124,7 +127,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -140,7 +143,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -149,7 +152,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheFileStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheFileStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -162,6 +165,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -169,6 +173,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CacheStats.html b/db/docs/java/com/sleepycat/db/class-use/CacheStats.html
index 765ae38d9..bc9827719 100644
--- a/db/docs/java/com/sleepycat/db/class-use/CacheStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/CacheStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.CacheStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.CacheStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.CacheStats (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.CacheStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.CacheStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in c
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCacheStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CacheStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in c
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in c
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CheckpointConfig.html b/db/docs/java/com/sleepycat/db/class-use/CheckpointConfig.html
index 3a867eec4..7214db3c7 100644
--- a/db/docs/java/com/sleepycat/db/class-use/CheckpointConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/CheckpointConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.CheckpointConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.CheckpointConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.CheckpointConfig (Sleepycat Software, Inc. - Berk
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.CheckpointConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.CheckpointConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCheckpointConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CheckpointConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" t
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,7 +122,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A></FONT></TD>
+<TH ALIGN="left" 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/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -140,7 +143,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -156,7 +159,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -165,7 +168,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCheckpointConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CheckpointConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -178,6 +181,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -185,6 +189,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="clas
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CompactConfig.html b/db/docs/java/com/sleepycat/db/class-use/CompactConfig.html
new file mode 100644
index 000000000..80570e826
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/CompactConfig.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.CompactConfig (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.CompactConfig (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/CompactConfig.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCompactConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.CompactConfig</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A></CODE></FONT></TD>
+<TD><CODE><B>CompactConfig.</B><B><A HREF="../../../../com/sleepycat/db/CompactConfig.html#DEFAULT">DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to methods that create a
+ cursor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/CompactConfig.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCompactConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CompactStats.html b/db/docs/java/com/sleepycat/db/class-use/CompactStats.html
new file mode 100644
index 000000000..355c53b80
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/CompactStats.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.CompactStats (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.CompactStats (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/CompactStats.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCompactStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.CompactStats</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/CompactStats.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCompactStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CompactStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Cursor.html b/db/docs/java/com/sleepycat/db/class-use/Cursor.html
index 264b403a9..20d0cb163 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Cursor.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Cursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.Cursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.Cursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.Cursor (Sleepycat Software, Inc. - Berkeley DB Ja
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.Cursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.Cursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Cursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Cursor.html" title="clas
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -132,7 +135,16 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#dup(boolean)">dup</A></B>(boolean&nbsp;samePosition)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new cursor with 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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
@@ -141,11 +153,11 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#dup(boolean)">dup</A></B>(boolean&nbsp;samePosition)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new cursor with the same transaction and locker ID as the
- original cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the database.</TD>
</TR>
</TABLE>
&nbsp;
@@ -153,7 +165,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></FONT></TD>
+<TH ALIGN="left" 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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -176,7 +188,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -192,7 +204,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -201,7 +213,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Cursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -214,6 +226,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -221,6 +234,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.s
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/CursorConfig.html b/db/docs/java/com/sleepycat/db/class-use/CursorConfig.html
index 0c23a38a1..9d410f7d4 100644
--- a/db/docs/java/com/sleepycat/db/class-use/CursorConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/CursorConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.CursorConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.CursorConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.CursorConfig (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.CursorConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.CursorConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCursorConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CursorConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,105 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
+<TD>Data access based on the standard Java collections API.&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.collections"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
+<TD><CODE><B>StoredContainer.</B><B><A HREF="../../../../com/sleepycat/collections/StoredContainer.html#getCursorConfig()">getCursorConfig</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the cursor configuration that is used for all operations
+ performed via this container.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TH>
+</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" title="class or interface in java.util">Collection</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollections.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)">configuredCollection</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;storedCollection,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">List</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollections.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)">configuredList</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&nbsp;storedList,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">Map</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollections.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)">configuredMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&nbsp;storedMap,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">Set</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollections.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)">configuredSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>&nbsp;storedSet,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollections.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)">configuredSortedMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>&nbsp;storedSortedMap,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured 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" title="class or interface in java.util">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollections.</B><B><A HREF="../../../../com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)">configuredSortedSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>&nbsp;storedSortedSet,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a configured sorted set from a given stored sorted set.</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +188,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +197,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -116,19 +211,37 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
+<TD><CODE><B>CursorConfig.</B><B><A HREF="../../../../com/sleepycat/db/CursorConfig.html#DEGREE_2">DEGREE_2</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../../com/sleepycat/db/CursorConfig.html#READ_COMMITTED"><CODE>READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
<TD><CODE><B>CursorConfig.</B><B><A HREF="../../../../com/sleepycat/db/CursorConfig.html#DIRTY_READ">DIRTY_READ</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure read operations performed by the
- cursor to return modified but not yet committed data.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../../com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED"><CODE>READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
-<TD><CODE><B>CursorConfig.</B><B><A HREF="../../../../com/sleepycat/db/CursorConfig.html#DEGREE_2">DEGREE_2</A></B></CODE>
+<TD><CODE><B>CursorConfig.</B><B><A HREF="../../../../com/sleepycat/db/CursorConfig.html#READ_COMMITTED">READ_COMMITTED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure a cursor for read committed isolation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></CODE></FONT></TD>
+<TD><CODE><B>CursorConfig.</B><B><A HREF="../../../../com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED">READ_UNCOMMITTED</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure a cursor for degree 2 isolation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A convenience instance to configure read operations performed by the
+ cursor to return modified but not yet committed data.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -145,7 +258,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,16 +274,16 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TD>
+<TH ALIGN="left" 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/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -181,6 +294,15 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the 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/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
@@ -192,7 +314,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -208,7 +330,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -217,7 +339,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useCursorConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="CursorConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -230,6 +352,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -237,6 +360,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Database.html b/db/docs/java/com/sleepycat/db/class-use/Database.html
index 8a88ae203..63c7de588 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Database.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Database.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.Database (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.Database (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.Database (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.Database (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.Database (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabase.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Database.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -93,7 +96,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Database.html" title="cl
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -101,8 +104,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Database.html" title="cl
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -110,7 +113,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.Database)">StoredClassCatalog</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database)</CODE>
@@ -124,8 +127,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -133,7 +136,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -163,75 +166,65 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ 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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
@@ -252,62 +245,72 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ 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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ 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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
- <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="../../../../com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>&nbsp;keyBinding,
- boolean&nbsp;writeAllowed)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>&nbsp;valueEntityBinding,
+ 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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ <A HREF="../../../../com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</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/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -315,8 +318,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -324,7 +327,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -340,7 +343,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -353,37 +356,37 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getPrimaryDatabase()">getPrimaryDatabase</A></B>()</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getDatabase()">getDatabase</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the primary database associated with this secondary database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the primary database handle associated with this 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/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getDatabase()">getDatabase</A></B>()</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getDatabase()">getDatabase</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the primary database handle associated with this cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the Database handle associated with this 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/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">openDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getPrimaryDatabase()">getPrimaryDatabase</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the primary database associated with this secondary 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/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getDatabase()">getDatabase</A></B>()</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">openDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the Database handle associated with this Cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
</TR>
</TABLE>
&nbsp;
@@ -391,7 +394,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" 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/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -416,24 +419,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>FeedbackHandler.</B><B><A HREF="../../../../com/sleepycat/db/FeedbackHandler.html#upgradeFeedback(com.sleepycat.db.Database, int)">upgradeFeedback</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- int&nbsp;percent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A function called with progress information when the database is being upgraded.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>FeedbackHandler.</B><B><A HREF="../../../../com/sleepycat/db/FeedbackHandler.html#verifyFeedback(com.sleepycat.db.Database, int)">verifyFeedback</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
- int&nbsp;percent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A function called with progress information when the database is being verified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></CODE></FONT></TD>
<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">openSecondaryDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
@@ -454,13 +439,31 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The application-specific Btree prefix callback.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>FeedbackHandler.</B><B><A HREF="../../../../com/sleepycat/db/FeedbackHandler.html#upgradeFeedback(com.sleepycat.db.Database, int)">upgradeFeedback</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A function called with progress information when the database is being upgraded.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>FeedbackHandler.</B><B><A HREF="../../../../com/sleepycat/db/FeedbackHandler.html#verifyFeedback(com.sleepycat.db.Database, int)">verifyFeedback</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A function called with progress information when the database is being verified.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TD>
+<TH ALIGN="left" 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/Database.html" title="class in com.sleepycat.db">Database</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">SecondaryDatabase</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
@@ -482,7 +485,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -498,7 +501,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -507,7 +510,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabase.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Database.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -520,6 +523,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -527,6 +531,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DatabaseConfig.html b/db/docs/java/com/sleepycat/db/class-use/DatabaseConfig.html
index c1b5fcb66..47a62256d 100644
--- a/db/docs/java/com/sleepycat/db/class-use/DatabaseConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/DatabaseConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.DatabaseConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.DatabaseConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.DatabaseConfig (Sleepycat Software, Inc. - Berkel
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.DatabaseConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.DatabaseConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" tit
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,7 +122,7 @@ those of a primary <code>Database</code>.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -127,7 +130,8 @@ those of a primary <code>Database</code>.</TD>
<TD><CODE><B>DatabaseConfig.</B><B><A HREF="../../../../com/sleepycat/db/DatabaseConfig.html#DEFAULT">DEFAULT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An instance created using the default constructor is initialized
+ with the system's default settings.</TD>
</TR>
</TABLE>
&nbsp;
@@ -135,7 +139,15 @@ those of a primary <code>Database</code>.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getConfig()">getConfig</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this Database object's configuration.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -151,7 +163,7 @@ those of a primary <code>Database</code>.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TD>
+<TH ALIGN="left" 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/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,14 +178,6 @@ those of a primary <code>Database</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)">setConfig</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the settings in an existing database handle.</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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
@@ -197,6 +201,14 @@ Rename 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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)">setConfig</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the settings in an existing database handle.</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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)">upgrade</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
@@ -204,13 +216,25 @@ Rename a database.</TD>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Upgrade all of the databases included in the specified file.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
+ <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;verifyConfig,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;dbConfig)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if all of the databases in a file are uncorrupted.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TD>
+<TH ALIGN="left" 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/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/Database.html#Database(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">Database</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
@@ -231,7 +255,7 @@ Rename a database.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -247,7 +271,7 @@ Rename a database.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -256,7 +280,7 @@ Rename a database.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -269,6 +293,7 @@ Rename a database.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -276,6 +301,6 @@ Rename a database.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DatabaseEntry.html b/db/docs/java/com/sleepycat/db/class-use/DatabaseEntry.html
index b33e11e4b..3edb74b2d 100644
--- a/db/docs/java/com/sleepycat/db/class-use/DatabaseEntry.html
+++ b/db/docs/java/com/sleepycat/db/class-use/DatabaseEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.DatabaseEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.DatabaseEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.DatabaseEntry (Sleepycat Software, Inc. - Berkele
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.DatabaseEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.DatabaseEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind"><B>com.sleepycat.bind</B></A></TD>
@@ -101,7 +104,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" titl
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -109,8 +112,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" titl
<A NAME="com.sleepycat.bind"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -130,92 +133,92 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
</TR>
<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/bind/RecordNumberBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>EntryBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a entry buffer into an Object.</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>RecordNumberBinding.</B><B><A HREF="../../../../com/sleepycat/bind/RecordNumberBinding.html#entryToRecordNumber(com.sleepycat.db.DatabaseEntry)">entryToRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>ByteArrayBinding.</B><B><A HREF="../../../../com/sleepycat/bind/ByteArrayBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a entry buffer to an
- record number integer.</TD>
+&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;void</CODE></FONT></TD>
-<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../com/sleepycat/bind/RecordNumberBinding.html#recordNumberToEntry(long, com.sleepycat.db.DatabaseEntry)">recordNumberToEntry</A></B>(long&nbsp;recordNumber,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</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 entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and data entry 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>EntryBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../com/sleepycat/bind/RecordNumberBinding.html#entryToRecordNumber(com.sleepycat.db.DatabaseEntry)">entryToRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a entry buffer into an Object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a entry 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>EntryBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the data entry 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../com/sleepycat/bind/RecordNumberBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and data entry buffers into an entity Object.</TD>
+&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>EntityBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<TD><CODE><B>EntryBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key entry from an entity Object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a entry 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>EntityBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>ByteArrayBinding.</B><B><A HREF="../../../../com/sleepycat/bind/ByteArrayBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the data entry from an entity Object.</TD>
+&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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>ByteArrayBinding.</B><B><A HREF="../../../../com/sleepycat/bind/ByteArrayBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key entry 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>ByteArrayBinding.</B><B><A HREF="../../../../com/sleepycat/bind/ByteArrayBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../com/sleepycat/bind/RecordNumberBinding.html#recordNumberToEntry(long, com.sleepycat.db.DatabaseEntry)">recordNumberToEntry</A></B>(long&nbsp;recordNumber,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a record number integer
+ to a entry buffer.</TD>
</TR>
</TABLE>
&nbsp;
@@ -223,8 +226,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -232,7 +235,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -248,8 +251,10 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -257,26 +262,25 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deserialize an object from an entry 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>TupleSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</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>TupleSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -284,10 +288,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
+<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -303,9 +305,9 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -313,8 +315,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<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/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -322,28 +324,29 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<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/bind/serial/SerialSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serialize an object into an entry 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>SerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deserialize an object from an entry buffer.</TD>
+&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/bind/serial/SerialBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serialize an object into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -351,8 +354,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -360,178 +363,136 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></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>TupleTupleKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</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>TupleTupleKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</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>TupleTupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</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/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>BooleanBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#booleanToEntry(boolean, com.sleepycat.db.DatabaseEntry)">booleanToEntry</A></B>(boolean&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>boolean</code> value into an entry 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleInputBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>ByteBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#byteToEntry(byte, com.sleepycat.db.DatabaseEntry)">byteToEntry</A></B>(byte&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>byte</code> value into an entry 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>TupleInputBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#charToEntry(char, com.sleepycat.db.DatabaseEntry)">charToEntry</A></B>(char&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>char</code> value into an entry 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" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</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/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SortedDoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)">doubleToEntry</A></B>(double&nbsp;val,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>double</code> value into an entry buffer.</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>TupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
+<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)">doubleToEntry</A></B>(double&nbsp;val,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry buffer to the data in a tuple
- output object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>double</code> value into an entry buffer.</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>TupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>BooleanBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#entryToBoolean(com.sleepycat.db.DatabaseEntry)">entryToBoolean</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry buffer to the data in a tuple
- input object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>boolean</code> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></CODE></FONT></TD>
-<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;byte</CODE></FONT></TD>
+<TD><CODE><B>ByteBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#entryToByte(com.sleepycat.db.DatabaseEntry)">entryToByte</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>byte</code> 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>StringBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;char</CODE></FONT></TD>
+<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#entryToChar(com.sleepycat.db.DatabaseEntry)">entryToChar</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>char</code> value.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B>StringBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#entryToString(com.sleepycat.db.DatabaseEntry)">entryToString</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B>SortedDoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedDoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)">entryToDouble</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>String</code> value.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>double</code> value.</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>StringBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#stringToEntry(java.lang.String, com.sleepycat.db.DatabaseEntry)">stringToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)">entryToDouble</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>String</code> value into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>double</code> 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>ShortBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;float</CODE></FONT></TD>
+<TD><CODE><B>SortedFloatBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)">entryToFloat</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>float</code> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#entryToShort(com.sleepycat.db.DatabaseEntry)">entryToShort</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;float</CODE></FONT></TD>
+<TD><CODE><B>FloatBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)">entryToFloat</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>short</code> value.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>float</code> value.</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>ShortBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#shortToEntry(short, com.sleepycat.db.DatabaseEntry)">shortToEntry</A></B>(short&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)">entryToInput</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>short</code> value into an entry buffer.</TD>
+&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>LongBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>IntegerBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#entryToInt(com.sleepycat.db.DatabaseEntry)">entryToInt</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>int</code> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -543,55 +504,53 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
</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>LongBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#longToEntry(long, com.sleepycat.db.DatabaseEntry)">longToEntry</A></B>(long&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleInputBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>long</code> value into an entry buffer.</TD>
+&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>IntegerBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</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>IntegerBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#entryToInt(com.sleepycat.db.DatabaseEntry)">entryToInt</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">entryToObject</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>int</code> value.</TD>
+&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;void</CODE></FONT></TD>
-<TD><CODE><B>IntegerBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#intToEntry(int, com.sleepycat.db.DatabaseEntry)">intToEntry</A></B>(int&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;short</CODE></FONT></TD>
+<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#entryToShort(com.sleepycat.db.DatabaseEntry)">entryToShort</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>int</code> value into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>short</code> 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>FloatBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B>StringBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#entryToString(com.sleepycat.db.DatabaseEntry)">entryToString</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>String</code> value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;float</CODE></FONT></TD>
-<TD><CODE><B>FloatBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/FloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)">entryToFloat</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SortedFloatBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/SortedFloatBinding.html#floatToEntry(float, com.sleepycat.db.DatabaseEntry)">floatToEntry</A></B>(float&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>float</code> value.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>float</code> value into an entry buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -604,60 +563,63 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)">inputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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>static&nbsp;double</CODE></FONT></TD>
-<TD><CODE><B>DoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)">entryToDouble</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>IntegerBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/IntegerBinding.html#intToEntry(int, com.sleepycat.db.DatabaseEntry)">intToEntry</A></B>(int&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>double</code> value.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>int</code> value into an entry buffer.</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>DoubleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/DoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)">doubleToEntry</A></B>(double&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<TD><CODE><B>LongBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/LongBinding.html#longToEntry(long, com.sleepycat.db.DatabaseEntry)">longToEntry</A></B>(long&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>double</code> value into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>long</code> value into an entry 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>CharacterBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</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;char</CODE></FONT></TD>
-<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#entryToChar(com.sleepycat.db.DatabaseEntry)">entryToChar</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>char</code> value.</TD>
+&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;void</CODE></FONT></TD>
-<TD><CODE><B>CharacterBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/CharacterBinding.html#charToEntry(char, com.sleepycat.db.DatabaseEntry)">charToEntry</A></B>(char&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleInputBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleInputBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>char</code> value into an entry buffer.</TD>
+&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>ByteBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
@@ -665,46 +627,40 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
</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>ByteBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#entryToByte(com.sleepycat.db.DatabaseEntry)">entryToByte</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>byte</code> value.</TD>
+&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;void</CODE></FONT></TD>
-<TD><CODE><B>ByteBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ByteBinding.html#byteToEntry(byte, com.sleepycat.db.DatabaseEntry)">byteToEntry</A></B>(byte&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>byte</code> value into an entry 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>BooleanBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)">objectToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
+<TD><CODE><B>TupleBase.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)">outputToEntry</A></B>(<A HREF="../../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>&nbsp;output,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a entry 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>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>BooleanBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#entryToBoolean(com.sleepycat.db.DatabaseEntry)">entryToBoolean</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>ShortBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/ShortBinding.html#shortToEntry(short, com.sleepycat.db.DatabaseEntry)">shortToEntry</A></B>(short&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an entry buffer into a simple <code>boolean</code> value.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>short</code> value into an entry buffer.</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>BooleanBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/BooleanBinding.html#booleanToEntry(boolean, com.sleepycat.db.DatabaseEntry)">booleanToEntry</A></B>(boolean&nbsp;val,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
+<TD><CODE><B>StringBinding.</B><B><A HREF="../../../../com/sleepycat/bind/tuple/StringBinding.html#stringToEntry(java.lang.String, com.sleepycat.db.DatabaseEntry)">stringToEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;val,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;entry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>boolean</code> value into an entry buffer.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a simple <code>String</code> value into an entry buffer.</TD>
</TR>
</TABLE>
&nbsp;
@@ -712,8 +668,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -721,7 +677,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -737,8 +693,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -746,7 +702,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -778,27 +734,46 @@ returned by a single <A HREF="../../../../com/sleepycat/db/Cursor.html" title="c
<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/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple key/data pairs returned by a single
+<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</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/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple data items returned by a single
+<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</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/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple record number/data pairs returned by a
single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</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/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple record number/data pairs returned by a
+single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></CODE></FONT></TD>
-<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getKey()">getKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the DatabaseEntry used to open this sequence.</TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -823,6 +798,14 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></CODE></FONT></TD>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getKey()">getKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the DatabaseEntry used to open this sequence.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></CODE></FONT></TD>
<TD><CODE><B>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#getObj()">getObj</A></B>()</CODE>
<BR>
@@ -844,7 +827,54 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TD>
+<TH ALIGN="left" 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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Append the key/data pair to the end of 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>RecordNumberAppender.</B><B><A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html#appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)">appendRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to modify the stored database based on the
+ generated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ boolean&nbsp;wait)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
+the head of the queue, and delete the record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -860,6 +890,15 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
@@ -872,33 +911,29 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
-is, both the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
@@ -908,6 +943,16 @@ is, both the primary and secondary key items must match.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the LogSequenceNumber and log record to which the log cursor
+ currently 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
@@ -920,716 +965,695 @@ that pair.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the first LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an estimate of the proportion of keys in the database 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the last LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)">getLock</A></B>(int&nbsp;locker,
+ boolean&nbsp;noWait,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>&nbsp;mode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire a lock 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="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
-the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
-key of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- int&nbsp;envid,
- boolean&nbsp;noBuffer,
- boolean&nbsp;permanent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
- message.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>RecordNumberAppender.</B><B><A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html#appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)">appendRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- int&nbsp;recno)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to modify the stored database based on the
- generated key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</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>MultipleRecnoDataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleRecnoDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;recno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next record number/data pair in the returned set.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</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>MultipleKeyDataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleKeyDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next key/data pair in the returned set.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</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>MultipleDataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleDataEntry.html#next(com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next data element in the returned set.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>LogRecordHandler.</B><B><A HREF="../../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)">handleLogRecord</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the LogSequenceNumber and log record to which the log cursor
- currently refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the first LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the last LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#setObj(com.sleepycat.db.DatabaseEntry)">setObj</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;obj)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
+the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)">getLock</A></B>(int&nbsp;locker,
- boolean&nbsp;noWait,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>&nbsp;mode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire a lock from the lock table.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
+data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)">processReplicationMessage</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- int&nbsp;envid)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process an incoming replication message sent by a member of the
- replication group to the local database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
+is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)">startReplication</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;cdata,
- boolean&nbsp;master)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database environment as a client or master in a group
- of replicated database environments.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
+the key and data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- boolean&nbsp;flush)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append a record to the log.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
+key of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove key/data pairs from the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
+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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
-the key and data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Append the key/data pair to the end of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if the key does not already
-appear in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if it does not already appear
-in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a sequence in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of 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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">removeSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the sequence from the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- boolean&nbsp;wait)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>LogRecordHandler.</B><B><A HREF="../../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)">handleLogRecord</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
-the head of the queue, and delete the record.</TD>
+&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/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ boolean&nbsp;flush)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an estimate of the proportion of keys in the database less
- than, equal to, and greater than the specified key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append a record 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MultipleNIODataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next data element in the returned set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MultipleDataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleDataEntry.html#next(com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next data element in the returned set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MultipleRecnoNIODataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;recno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next record number/data pair in the returned set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MultipleRecnoDataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleRecnoDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;recno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next record number/data pair in the returned set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)">putCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MultipleKeyNIODataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleKeyNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next key/data pair in the returned set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>MultipleKeyDataEntry.</B><B><A HREF="../../../../com/sleepycat/db/MultipleKeyDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">next</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the next key/data pair in the returned set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a sequence in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>BtreePrefixCalculator.</B><B><A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html#prefix(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">prefix</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt2)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The application-specific Btree prefix callback.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)">processReplicationMessage</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ int&nbsp;envid)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)">putCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the database if it does not already appear
+in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the database if the key does not already
+appear in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">removeSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
-data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the sequence from the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ int&nbsp;envid,
+ boolean&nbsp;noBuffer,
+ boolean&nbsp;permanent,
+ boolean&nbsp;anywhere,
+ boolean&nbsp;isRetry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
-database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
+ message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#setObj(com.sleepycat.db.DatabaseEntry)">setObj</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;obj)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock 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>BtreePrefixCalculator.</B><B><A HREF="../../../../com/sleepycat/db/BtreePrefixCalculator.html#prefix(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">prefix</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt1,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dbt2)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)">startReplication</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;cdata,
+ boolean&nbsp;master)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The application-specific Btree prefix callback.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database environment as a client or master in a group
+ of replicated database environments.</TD>
</TR>
</TABLE>
&nbsp;
@@ -1637,7 +1661,7 @@ return the associated key/data pair.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TD>
+<TH ALIGN="left" 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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)">LockRequest</A></B>(<A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>&nbsp;op,
@@ -1671,7 +1695,7 @@ return the associated key/data pair.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1687,7 +1711,7 @@ return the associated key/data pair.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -1696,7 +1720,7 @@ return the associated key/data pair.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1709,6 +1733,7 @@ return the associated key/data pair.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -1716,6 +1741,6 @@ return the associated key/data pair.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DatabaseException.html b/db/docs/java/com/sleepycat/db/class-use/DatabaseException.html
index d179957c0..563e45035 100644
--- a/db/docs/java/com/sleepycat/db/class-use/DatabaseException.html
+++ b/db/docs/java/com/sleepycat/db/class-use/DatabaseException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.DatabaseException (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.DatabaseException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.DatabaseException (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.DatabaseException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.DatabaseException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -97,7 +100,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseException.html"
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -105,8 +108,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseException.html"
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -114,40 +117,42 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</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>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>StoredClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#close()">close</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>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>ClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&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;void</CODE></FONT></TD>
-<TD><CODE><B>StoredClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#close()">close</A></B>()</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</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>StoredClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#getClassID(java.io.ObjectStreamClass)">getClassID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classFormat)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -162,48 +167,46 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
</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>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A></CODE></FONT></TD>
+<TD><CODE><B>ClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#getClassFormat(byte[])">getClassFormat</A></B>(byte[]&nbsp;classID)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&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;boolean</CODE></FONT></TD>
-<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B>StoredClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#getClassID(java.io.ObjectStreamClass)">getClassID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classFormat)</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>ClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#close()">close</A></B>()</CODE>
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B>ClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#getClassID(java.io.ObjectStreamClass)">getClassID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classDesc)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close a catalog database and release any cached resources.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the class ID for the current version of the given class
+ description.</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>ClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#getClassID(java.io.ObjectStreamClass)">getClassID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A>&nbsp;classDesc)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the class ID for the current version of the given class
- description.</TD>
+&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/io/ObjectStreamClass.html" title="class or interface in java.io">ObjectStreamClass</A></CODE></FONT></TD>
-<TD><CODE><B>ClassCatalog.</B><B><A HREF="../../../../com/sleepycat/bind/serial/ClassCatalog.html#getClassFormat(byte[])">getClassFormat</A></B>(byte[]&nbsp;classID)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ObjectStreamClass for the given class ID.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -211,7 +214,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/bind/serial/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.Database)">StoredClassCatalog</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;database)</CODE>
@@ -225,8 +228,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -234,7 +237,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -262,8 +265,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -271,16 +274,17 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<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/collections/TransactionRunner.html#run(com.sleepycat.collections.TransactionWorker)">run</A></B>(<A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A>&nbsp;worker)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#abortTransaction()">abortTransaction</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
- environments, begins and ends a transaction.</TD>
+&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">
@@ -311,13 +315,12 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#abortTransaction()">abortTransaction</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TransactionRunner.</B><B><A HREF="../../../../com/sleepycat/collections/TransactionRunner.html#run(com.sleepycat.collections.TransactionWorker)">run</A></B>(<A HREF="../../../../com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A>&nbsp;worker)</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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../../com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
+ environments, may begin and end a transaction.</TD>
</TR>
</TABLE>
&nbsp;
@@ -325,8 +328,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -334,7 +337,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -372,6 +375,14 @@ enough to hold a value being returned.</TD>
<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/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db">ReplicationDuplicateMasterException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The replication group has more than one master.</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/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">ReplicationHandleDeadException</A></B></CODE>
<BR>
@@ -381,18 +392,72 @@ election unrolled a committed transaction.</TD>
<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/ReplicationHoldElectionException.html" title="class in com.sleepycat.db">ReplicationHoldElectionException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An election is 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/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db">ReplicationJoinFailureException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thrown if a new master has been chosen but the client is unable to synchronize
+with the new master (possibly because the client has been configured
+with the <A HREF="../../../../com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT"><CODE>ReplicationConfig.NOAUTOINIT</CODE></A> setting to turn-off automatic
+internal initialization).</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/ReplicationLockoutException.html" title="class in com.sleepycat.db">ReplicationLockoutException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thrown when an operation was blocked by client/master synchronization.</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/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db">ReplicationSiteUnavailableException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thrown if replication group was unable to elect a master, or was unable to
+complete the election in the specified timeout period.</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/RunRecoveryException.html" title="class in com.sleepycat.db">RunRecoveryException</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thrown when the database environment needs to be recovered.</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/UpdateConflictException.html" title="class in com.sleepycat.db">UpdateConflictException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thrown when a snapshot transaction attempts to update data
+which was modified after the snapshot transaction read it.</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/VersionMismatchException.html" title="class in com.sleepycat.db">VersionMismatchException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thrown if the version of the Berkeley DB library doesn't match the version that created
+the database environment.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" 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/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -409,514 +474,480 @@ election unrolled a committed transaction.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#getId()">getId</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#abort()">abort</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the transaction's unique ID.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cause 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>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#abort()">abort</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cause an abnormal termination of the transaction.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Append the key/data pair to the end of 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>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commit()">commit</A></B>()</CODE>
+<TD><CODE><B>RecordNumberAppender.</B><B><A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html#appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)">appendRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ int&nbsp;recno)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to modify the stored database based on the
+ generated 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>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commitSync()">commitSync</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;parent,
+ <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;txnConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction, committing synchronously.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new transaction 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>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commitNoSync()">commitNoSync</A></B>()</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#checkpoint(com.sleepycat.db.CheckpointConfig)">checkpoint</A></B>(<A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>&nbsp;checkpointConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction, not committing synchronously.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Synchronously checkpoint 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>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commitWriteNoSync()">commitWriteNoSync</A></B>()</CODE>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction, writing but not flushing the log.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close a sequence.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#setTxnTimeout(long)">setTxnTimeout</A></B>(long&nbsp;timeOut)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the timeout value for the transaction lifetime.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close the log cursor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#setLockTimeout(long)">setLockTimeout</A></B>(long&nbsp;timeOut)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the lock request timeout value for the transaction.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the cursors that have been opened by this join cursor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#discard()">discard</A></B>()</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free up all the per-process resources associated with the specified
- <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><CODE>Transaction</CODE></A> handle, neither committing nor aborting the
- transaction.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close the database 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>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#prepare(byte[])">prepare</A></B>(byte[]&nbsp;gid)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiate the beginning of a two-phase commit.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush any cached database information to disk and discard the database
+handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#close()">close</A></B>()</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#close()">close</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close a sequence.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Discard the cursor.</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>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#get(com.sleepycat.db.Transaction, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- int&nbsp;delta)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#close(boolean)">close</A></B>(boolean&nbsp;noSync)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next available element in the sequence and changes the sequence
- value by <code>delta</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush any cached database information to disk and discard the database
+handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getDatabase()">getDatabase</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commit()">commit</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the Database handle associated with this sequence.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End 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/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></CODE></FONT></TD>
-<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getKey()">getKey</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commitNoSync()">commitNoSync</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the DatabaseEntry used to open this sequence.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction, not committing synchronously.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></CODE></FONT></TD>
-<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getStats(com.sleepycat.db.StatsConfig)">getStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#commitSync()">commitSync</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return statistical information about the sequence.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End the transaction, committing synchronously.</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>SecondaryKeyCreator.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;secondary,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;result)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a secondary key entry, given a primary key and data entry.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSecondaryConfig()">getSecondaryConfig</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ boolean&nbsp;wait)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a copy of the secondary configuration of this database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
+the head of the queue, and delete the record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#count()">count</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count the key/data pairs in the database without adding to 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#count()">count</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
-is, both the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return 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;<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getPrimaryDatabase()">getPrimaryDatabase</A></B>()</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#createLockerID()">createLockerID</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the primary database associated with this secondary database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocate a locker ID.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>SecondaryKeyCreator.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;result)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a secondary key entry, given a primary key and data entry.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#delete()">delete</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete 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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#dup(boolean)">dup</A></B>(boolean&nbsp;samePosition)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>SecondaryCursor</code> for the same transaction as
- the original cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove 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;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#dupSecondary(boolean)">dupSecondary</A></B>(boolean&nbsp;samePosition)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#detectDeadlocks(com.sleepycat.db.LockDetectMode)">detectDeadlocks</A></B>(<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>&nbsp;mode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new copy of the cursor as a <code>SecondaryCursor</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#discard()">discard</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free up all the per-process resources associated with the specified
+ <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><CODE>Transaction</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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#dup(boolean)">dup</A></B>(boolean&nbsp;samePosition)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>SecondaryCursor</code> for the same transaction 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#dup(boolean)">dup</A></B>(boolean&nbsp;samePosition)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new cursor with 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#dupSecondary(boolean)">dupSecondary</A></B>(boolean&nbsp;samePosition)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new copy of the cursor as a <code>SecondaryCursor</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int)">electReplicationMaster</A></B>(int&nbsp;nsites,
+ int&nbsp;nvotes)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hold 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#flushReplication()">flushReplication</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internal method: re-push the last log record to all clients, in case they've
+ lost messages and don't know it.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#freeLockerID(int)">freeLockerID</A></B>(int&nbsp;id)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free a locker ID.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#get(com.sleepycat.db.Transaction, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ int&nbsp;delta)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next available element in the sequence and changes the sequence
+ value by <code>delta</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>[]</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getArchiveDatabases()">getArchiveDatabases</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the names of the database files that need to be archived in
+ order to recover the database from catastrophic failure.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>[]</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getArchiveLogFiles(boolean)">getArchiveLogFiles</A></B>(boolean&nbsp;includeInUse)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
-the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the names of all of the log files that are no longer in use.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getCacheFile()">getCacheFile</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
-key of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>[]</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheFileStats(com.sleepycat.db.StatsConfig)">getCacheFileStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's per-file memory pool (that is, the
+ buffer cache) 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheStats(com.sleepycat.db.StatsConfig)">getCacheStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&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>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- int&nbsp;envid,
- boolean&nbsp;noBuffer,
- boolean&nbsp;permanent)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getConfig()">getConfig</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
- message.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this Database object's configuration.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>RecordNumberAppender.</B><B><A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html#appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)">appendRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- int&nbsp;recno)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getConfig()">getConfig</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to modify the stored database based on the
- generated key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this object's configuration.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#close()">close</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getConfig()">getConfig</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close the log cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this Database object's configuration.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the LogSequenceNumber and log record to which the log cursor
- currently refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the first LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the LogSequenceNumber and log record to which the log cursor
+ currently 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getDatabase()">getDatabase</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the last LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the Database handle associated with this sequence.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getDatabaseFile()">getDatabaseFile</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database's underlying file 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getDatabaseName()">getDatabaseName</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database 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>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#close()">close</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getEnvironment()">getEnvironment</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the cursors that have been opened by this join cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle for the database environment
+ underlying the <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
+that pair.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the first LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -928,340 +959,393 @@ return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getConfig()">getConfig</A></B>()</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#getId()">getId</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this object's configuration.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the transaction's unique ID.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;parent,
- <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;txnConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A></CODE></FONT></TD>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getKey()">getKey</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new transaction in the database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the DatabaseEntry used to open this sequence.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#checkpoint(com.sleepycat.db.CheckpointConfig)">checkpoint</A></B>(<A HREF="../../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>&nbsp;checkpointConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Synchronously checkpoint the database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an estimate of the proportion of keys in the database 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;<A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLockStats(com.sleepycat.db.StatsConfig)">getLockStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's locking statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)">getTransactionStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's transactional statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#close()">close</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close the database environment, freeing any allocated resources and
- closing any underlying subsystems.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the last LogSequenceNumber and log record.</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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#remove(java.io.File, boolean, com.sleepycat.db.EnvironmentConfig)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;home,
- boolean&nbsp;force,
- <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)">getLock</A></B>(int&nbsp;locker,
+ boolean&nbsp;noWait,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>&nbsp;mode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destroy a database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire a lock 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#setConfig(com.sleepycat.db.EnvironmentConfig)">setConfig</A></B>(<A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLockStats(com.sleepycat.db.StatsConfig)">getLockStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the settings in an existing environment handle.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's locking 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/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">openDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogFileName(com.sleepycat.db.LogSequenceNumber)">getLogFileName</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the name of the log file that contains the log record
+ specified by a LogSequenceNumber object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">openSecondaryDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;primaryDatabase,
- <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogStats(com.sleepycat.db.StatsConfig)">getLogStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's logging 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#removeDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String)">removeDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName)</CODE>
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getMaximumSize()">getMaximumSize</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Remove a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the maximum size for the file backing the database, or 0 if
+ no maximum file size has been configured.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#renameDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, java.lang.String)">renameDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;oldDatabaseName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;newDatabaseName)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)">getMutexStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Rename a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's mutex 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#trickleCacheWrite(int)">trickleCacheWrite</A></B>(int&nbsp;percent)</CODE>
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#getName()">getName</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensure that a specified percent of the pages in the shared memory
- pool are clean, by writing dirty pages to their backing files.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the user visible name for 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#detectDeadlocks(com.sleepycat.db.LockDetectMode)">detectDeadlocks</A></B>(<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>&nbsp;mode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run one iteration of the deadlock detector.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)">getLock</A></B>(int&nbsp;locker,
- boolean&nbsp;noWait,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;object,
- <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>&nbsp;mode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire a lock from the lock table.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#putLock(com.sleepycat.db.Lock)">putLock</A></B>(<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>&nbsp;lock)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Release a lock.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#createLockerID()">createLockerID</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allocate a locker ID.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#freeLockerID(int)">freeLockerID</A></B>(int&nbsp;id)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free a locker ID.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])">lockVector</A></B>(int&nbsp;locker,
- boolean&nbsp;noWait,
- <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>[]&nbsp;list)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Atomically obtain and release one or more locks from the lock table.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openLogCursor()">openLogCursor</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a log cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogFileName(com.sleepycat.db.LogSequenceNumber)">getLogFileName</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the name of the log file that contains the log record
- specified by a LogSequenceNumber object.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#electReplicationMaster(int, int, int, int)">electReplicationMaster</A></B>(int&nbsp;nsites,
- int&nbsp;nvotes,
- int&nbsp;priority,
- int&nbsp;timeout)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hold an election for the master of a replication group.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)">processReplicationMessage</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- int&nbsp;envid)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getNoFile()">getNoFile</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process an incoming replication message sent by a member of the
- replication group to the local database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the opening of backing temporary files for in-memory
+ databases has been disallowed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)">startReplication</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;cdata,
- boolean&nbsp;master)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the database environment as a client or master in a group
- of replicated database environments.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheStats(com.sleepycat.db.StatsConfig)">getCacheStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>[]</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheFileStats(com.sleepycat.db.StatsConfig)">getCacheFileStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's per-file memory pool (that is, the
- buffer cache) statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogStats(com.sleepycat.db.StatsConfig)">getLogStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's logging statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)">getReplicationStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's replication statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logFlush(com.sleepycat.db.LogSequenceNumber)">logFlush</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush log records to stable storage.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- boolean&nbsp;flush)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append a record to the log.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</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/File.html" title="class or interface in java.io">File</A>[]</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getArchiveLogFiles(boolean)">getArchiveLogFiles</A></B>(boolean&nbsp;includeInUse)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></CODE></FONT></TD>
+<TD><CODE><B>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getPriority()">getPriority</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the names of all of the log files that are no longer in use.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return 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;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>[]</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getArchiveDatabases()">getArchiveDatabases</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the names of the database files that need to be archived in
- order to recover the database from catastrophic failure.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#removeOldLogFiles()">removeOldLogFiles</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove log files that are no longer needed.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>[]</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#recover(int, boolean)">recover</A></B>(int&nbsp;count,
- boolean&nbsp;continued)</CODE>
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationConfig(com.sleepycat.db.ReplicationConfig)">getReplicationConfig</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a list of prepared but not yet resolved transactions.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the configuration of the replication subsystem.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#panic(boolean)">panic</A></B>(boolean&nbsp;onoff)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)">getReplicationStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the panic state for the database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's replication 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType)">getReplicationTimeout</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the network timeout applied to the specified timeout type.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove key/data pairs from the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
+the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
+data items must match.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
+is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1278,120 +1362,133 @@ the key and data items must match.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
+key of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Append the key/data pair to the end of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
+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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if the key does not already
-appear in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if it does not already appear
-in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given 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/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getDatabaseName()">getDatabaseName</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database name.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getConfig()">getConfig</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return this Database object's configuration.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getEnvironment()">getEnvironment</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle for the database environment
- underlying the <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#close()">close</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush any cached database information to disk and discard the database
-handle.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#close(boolean)">close</A></B>(boolean&nbsp;noSync)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush any cached database information to disk and discard the database
-handle.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/Sequence.html" title="class in com.sleepycat.db">Sequence</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSecondaryConfig()">getSecondaryConfig</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a sequence in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a copy of the secondary configuration of 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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">removeSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></CODE></FONT></TD>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getStats(com.sleepycat.db.StatsConfig)">getStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the sequence from the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return statistical information about the sequence.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1404,12 +1501,20 @@ handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#truncate(com.sleepycat.db.Transaction, boolean)">truncate</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- boolean&nbsp;returnCount)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)">getTransactionStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Empty the database, discarding all records it contains.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's transactional statistics.</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>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getUnlink()">getUnlink</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the file will be removed when the last reference to it is
+ closed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1423,160 +1528,160 @@ handle.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getDatabaseFile()">getDatabaseFile</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])">lockVector</A></B>(int&nbsp;locker,
+ boolean&nbsp;noWait,
+ <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>[]&nbsp;list)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database's underlying file name.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Atomically obtain and release 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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)">setConfig</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logFlush(com.sleepycat.db.LogSequenceNumber)">logFlush</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the settings in an existing database handle.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush log records to stable storage.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getCacheFile()">getCacheFile</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logPrint(com.sleepycat.db.Transaction, java.lang.String)">logPrint</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;message)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the handle for the cache file underlying the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append an informational message to the Berkeley DB database environment log 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- boolean&nbsp;wait)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ boolean&nbsp;flush)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
-the head of the queue, and delete the record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append a record 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/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an estimate of the proportion of keys in the database less
- than, equal to, and greater than the specified key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the database.</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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">openDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Remove a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#rename(java.lang.String, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">rename</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;oldDatabaseName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;newDatabaseName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openLogCursor()">openLogCursor</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Rename a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a log cursor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#sync()">sync</A></B>()</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush any cached information to disk.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)">upgrade</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">openSecondaryDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;primaryDatabase,
+ <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Upgrade all of the databases included in the specified file.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a 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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
- <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if all of the databases in a file are uncorrupted.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a sequence 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>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#close()">close</A></B>()</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#panic(boolean)">panic</A></B>(boolean&nbsp;onoff)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Discard the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the panic state for 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>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#count()">count</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#prepare(byte[])">prepare</A></B>(byte[]&nbsp;gid)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a count of the number of data items for the key to which the
- cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiate 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;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#dup(boolean)">dup</A></B>(boolean&nbsp;samePosition)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)">processReplicationMessage</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ int&nbsp;envid)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new cursor with the same transaction and locker ID as the
- original cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#delete()">delete</A></B>()</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
@@ -1584,8 +1689,8 @@ Rename a database.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
@@ -1601,8 +1706,8 @@ Rename a database.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
@@ -1610,26 +1715,25 @@ Rename a database.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#putLock(com.sleepycat.db.Lock)">putLock</A></B>(<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>&nbsp;lock)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Release a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
@@ -1637,190 +1741,197 @@ Rename a database.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the database if it does not already appear
+in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the database if the key does not already
+appear in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>[]</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#recover(int, boolean)">recover</A></B>(int&nbsp;count,
+ boolean&nbsp;continued)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#remove(java.io.File, boolean, com.sleepycat.db.EnvironmentConfig)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;home,
+ boolean&nbsp;force,
+ <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destroy a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Remove a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#removeDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String)">removeDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Remove a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#removeOldLogFiles()">removeOldLogFiles</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove log files that are no longer needed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">removeSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the sequence from the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#rename(java.lang.String, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">rename</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;oldDatabaseName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;newDatabaseName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Rename a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#renameDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, java.lang.String)">renameDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;oldDatabaseName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;newDatabaseName)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Rename a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)">replicationManagerStart</A></B>(int&nbsp;numthreads,
+ <A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>&nbsp;policy)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
-data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Starts the replication manager.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#resetFileID(java.lang.String, boolean)">resetFileID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;filename,
+ boolean&nbsp;encrypted)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
-database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allows database files to be copied, and then the copy used in the same
+ database environment as the original.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#resetLogSequenceNumber(java.lang.String, boolean)">resetLogSequenceNumber</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;filename,
+ boolean&nbsp;encrypted)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allows database files to be moved from one transactional database
+ environment to another.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ int&nbsp;envid,
+ boolean&nbsp;noBuffer,
+ boolean&nbsp;permanent,
+ boolean&nbsp;anywhere,
+ boolean&nbsp;isRetry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
+ message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A></CODE></FONT></TD>
-<TD><CODE><B>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getPriority()">getPriority</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)">setConfig</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the cache priority for pages from the specified file.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the settings in an existing database handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#setPriority(com.sleepycat.db.CacheFilePriority)">setPriority</A></B>(<A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>&nbsp;priority)</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#setConfig(com.sleepycat.db.EnvironmentConfig)">setConfig</A></B>(<A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the
-cache priority for pages from the specified file.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the settings in an existing environment handle.</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>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getMaximumSize()">getMaximumSize</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#setLockTimeout(long)">setLockTimeout</A></B>(long&nbsp;timeOut)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the maximum size for the file backing the database, or 0 if
- no maximum file size has been configured.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the lock request timeout value for the transaction.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1833,12 +1944,11 @@ maximum size for the file backing 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>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getNoFile()">getNoFile</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#setName(java.lang.String)">setName</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the opening of backing temporary files for in-memory
- databases has been disallowed.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the user visible name for the transaction.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1851,12 +1961,38 @@ maximum size for the file backing 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>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#getUnlink()">getUnlink</A></B>()</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>CacheFile.</B><B><A HREF="../../../../com/sleepycat/db/CacheFile.html#setPriority(com.sleepycat.db.CacheFilePriority)">setPriority</A></B>(<A HREF="../../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>&nbsp;priority)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the file will be removed when the last reference to it is
- closed.</TD>
+&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;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)">setReplicationConfig</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the replication subsystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#setReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType, int)">setReplicationTimeout</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type,
+ int&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the network timeout applied to the specified timeout type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Transaction.</B><B><A HREF="../../../../com/sleepycat/db/Transaction.html#setTxnTimeout(long)">setTxnTimeout</A></B>(long&nbsp;timeOut)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the timeout value for the transaction lifetime.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -1866,19 +2002,83 @@ maximum size for the file backing the database.</TD>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the file when the last reference to it is closed.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)">startReplication</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;cdata,
+ boolean&nbsp;master)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure 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;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#sync()">sync</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush any cached information 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#syncReplication()">syncReplication</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Forces synchronization to begin for this client.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#trickleCacheWrite(int)">trickleCacheWrite</A></B>(int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensure 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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#truncate(com.sleepycat.db.Transaction, boolean)">truncate</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ boolean&nbsp;returnCount)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Empty 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>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)">upgrade</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Upgrade all of the databases included in the specified file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
+ <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;verifyConfig,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;dbConfig)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if all of the databases in a file are uncorrupted.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that throw <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">SecondaryDatabase</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;primaryDatabase,
- <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>&nbsp;config)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/Database.html#Database(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">Database</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
@@ -1891,9 +2091,10 @@ maximum size for the file backing the database.</TD>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a database environment handle.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/sleepycat/db/Database.html#Database(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">Database</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">SecondaryDatabase</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;primaryDatabase,
+ <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>&nbsp;config)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
@@ -1909,7 +2110,7 @@ maximum size for the file backing the database.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -1925,7 +2126,7 @@ maximum size for the file backing the database.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -1934,7 +2135,7 @@ maximum size for the file backing the database.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -1947,6 +2148,7 @@ maximum size for the file backing the database.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -1954,6 +2156,6 @@ maximum size for the file backing the database.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DatabaseStats.html b/db/docs/java/com/sleepycat/db/class-use/DatabaseStats.html
index 133b488c4..545fca2fa 100644
--- a/db/docs/java/com/sleepycat/db/class-use/DatabaseStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/DatabaseStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.DatabaseStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.DatabaseStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.DatabaseStats (Sleepycat Software, Inc. - Berkele
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.DatabaseStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.DatabaseStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" titl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -135,7 +138,7 @@ or Recno database statistics.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -157,7 +160,7 @@ or Recno database statistics.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -173,7 +176,7 @@ or Recno database statistics.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -182,7 +185,7 @@ or Recno database statistics.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -195,6 +198,7 @@ or Recno database statistics.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -202,6 +206,6 @@ or Recno database statistics.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DatabaseType.html b/db/docs/java/com/sleepycat/db/class-use/DatabaseType.html
index 7cf5b4d59..4b6851de6 100644
--- a/db/docs/java/com/sleepycat/db/class-use/DatabaseType.html
+++ b/db/docs/java/com/sleepycat/db/class-use/DatabaseType.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.DatabaseType (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.DatabaseType (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.DatabaseType (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.DatabaseType (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.DatabaseType (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseType.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,7 +169,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TD>
+<TH ALIGN="left" 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/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -187,7 +190,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -203,7 +206,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -212,7 +215,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDatabaseType.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DatabaseType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -225,6 +228,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -232,6 +236,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/DatabaseType.html" title="class in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DeadlockException.html b/db/docs/java/com/sleepycat/db/class-use/DeadlockException.html
index b586ee80d..f2c2c00e2 100644
--- a/db/docs/java/com/sleepycat/db/class-use/DeadlockException.html
+++ b/db/docs/java/com/sleepycat/db/class-use/DeadlockException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.DeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.DeadlockException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.DeadlockException (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.DeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.DeadlockException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDeadlockException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DeadlockException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/DeadlockException.html"
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,7 +129,7 @@ be granted before the wait-time expired.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -142,7 +145,7 @@ be granted before the wait-time expired.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -151,7 +154,7 @@ be granted before the wait-time expired.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useDeadlockException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="DeadlockException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -164,6 +167,7 @@ be granted before the wait-time expired.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -171,6 +175,6 @@ be granted before the wait-time expired.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Environment.html b/db/docs/java/com/sleepycat/db/class-use/Environment.html
index 9dfb368ab..b14007d28 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Environment.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Environment.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.Environment (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.Environment (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.Environment (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.Environment (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.Environment (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEnvironment.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Environment.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -89,7 +92,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Environment.html" title=
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -97,8 +100,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Environment.html" title=
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -106,7 +109,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -122,7 +125,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment)">TransactionRunner</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;env)</CODE>
@@ -162,8 +165,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -171,7 +174,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -196,31 +199,29 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TD>
+<TH ALIGN="left" 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/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- int&nbsp;envid,
- boolean&nbsp;noBuffer,
- boolean&nbsp;permanent)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>ErrorHandler.</B><B><A HREF="../../../../com/sleepycat/db/ErrorHandler.html#error(com.sleepycat.db.Environment, java.lang.String, java.lang.String)">error</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;errpfx,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;msg)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
- message.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to be called when an error occurs in 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>PanicHandler.</B><B><A HREF="../../../../com/sleepycat/db/PanicHandler.html#panic(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseException)">panic</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>&nbsp;e)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>LogRecordHandler.</B><B><A HREF="../../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)">handleLogRecord</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A function to be called if the database environment panics.</TD>
+&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">
@@ -233,14 +234,12 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>LogRecordHandler.</B><B><A HREF="../../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)">handleLogRecord</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>PanicHandler.</B><B><A HREF="../../../../com/sleepycat/db/PanicHandler.html#panic(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseException)">panic</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>&nbsp;e)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A function to be called if the database environment panics.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -253,14 +252,37 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>ErrorHandler.</B><B><A HREF="../../../../com/sleepycat/db/ErrorHandler.html#error(com.sleepycat.db.Environment, java.lang.String, java.lang.String)">error</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;errpfx,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;msg)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ int&nbsp;envid,
+ boolean&nbsp;noBuffer,
+ boolean&nbsp;permanent,
+ boolean&nbsp;anywhere,
+ boolean&nbsp;isRetry)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to be called when an error occurs in the
- Berkeley DB library.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
+ message.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/Environment.html" title="class in com.sleepycat.db">Environment</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String, int, com.sleepycat.db.Environment)">DatabaseException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;s,
+ int&nbsp;errno,
+ <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;dbenv)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an exception with the specified message and error number
+ associated with a database environment handle.</TD>
</TR>
</TABLE>
&nbsp;
@@ -273,7 +295,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -289,7 +311,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -298,7 +320,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEnvironment.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Environment.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -311,6 +333,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -318,6 +341,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Environment.html" title="class in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/EnvironmentConfig.html b/db/docs/java/com/sleepycat/db/class-use/EnvironmentConfig.html
index eb455323d..9ff6d12c0 100644
--- a/db/docs/java/com/sleepycat/db/class-use/EnvironmentConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/EnvironmentConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.EnvironmentConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.EnvironmentConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.EnvironmentConfig (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.EnvironmentConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.EnvironmentConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEnvironmentConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EnvironmentConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html"
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -134,7 +137,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TD>
+<TH ALIGN="left" 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/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -160,7 +163,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TD>
+<TH ALIGN="left" 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/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/Environment.html#Environment(java.io.File, com.sleepycat.db.EnvironmentConfig)">Environment</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/File.html" title="class or interface in java.io">File</A>&nbsp;envHome,
@@ -180,7 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -196,7 +199,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -205,7 +208,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEnvironmentConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="EnvironmentConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -218,6 +221,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -225,6 +229,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ErrorHandler.html b/db/docs/java/com/sleepycat/db/class-use/ErrorHandler.html
index 5a82cdd85..24af30b35 100644
--- a/db/docs/java/com/sleepycat/db/class-use/ErrorHandler.html
+++ b/db/docs/java/com/sleepycat/db/class-use/ErrorHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.ErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.ErrorHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.ErrorHandler (Sleepycat Software, Inc. - Berk
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.ErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.ErrorHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useErrorHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ErrorHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,7 +129,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A></FONT></TD>
+<TH ALIGN="left" 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/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -171,7 +174,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -180,7 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useErrorHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ErrorHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -193,6 +196,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -200,6 +204,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/ErrorHandler.html" title="interfac
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/EventHandler.html b/db/docs/java/com/sleepycat/db/class-use/EventHandler.html
new file mode 100644
index 000000000..88bd2b489
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/EventHandler.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.EventHandler (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Interface com.sleepycat.db.EventHandler (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/EventHandler.html" title="interface in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEventHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.EventHandler</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A></CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#getEventHandler()">getEventHandler</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the object's methods to be called when a triggered event occurs.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#setEventHandler(com.sleepycat.db.EventHandler)">setEventHandler</A></B>(<A HREF="../../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A>&nbsp;handler)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an object whose methods are to be called when a triggered event occurs.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/EventHandler.html" title="interface in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEventHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/EventType.html b/db/docs/java/com/sleepycat/db/class-use/EventType.html
new file mode 100644
index 000000000..7f76c3c81
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/EventType.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.EventType (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.EventType (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/EventType.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEventType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.EventType</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B>EventType.</B><B><A HREF="../../../../com/sleepycat/db/EventType.html#PANIC">PANIC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a Database panic.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B>EventType.</B><B><A HREF="../../../../com/sleepycat/db/EventType.html#REP_CLIENT">REP_CLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a replication client message, meaning that the current site
+ is now a client in the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B>EventType.</B><B><A HREF="../../../../com/sleepycat/db/EventType.html#REP_MASTER">REP_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a replication master message, meaning that the current site
+ is now the master in the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B>EventType.</B><B><A HREF="../../../../com/sleepycat/db/EventType.html#REP_NEW_MASTER">REP_NEW_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The event is a replication new master message.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></CODE></FONT></TD>
+<TD><CODE><B>EventType.</B><B><A HREF="../../../../com/sleepycat/db/EventType.html#fromInt(int)">fromInt</A></B>(int&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internal: this is public only so it can be called from an internal
+ package.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/EventType.html" title="class in com.sleepycat.db">EventType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>EventHandler.</B><B><A HREF="../../../../com/sleepycat/db/EventHandler.html#handleEvent(com.sleepycat.db.EventType)">handleEvent</A></B>(<A HREF="../../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>&nbsp;event)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback function to be called when an event is sent from the
+ Berkeley DB library.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/EventType.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useEventType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EventType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/FeedbackHandler.html b/db/docs/java/com/sleepycat/db/class-use/FeedbackHandler.html
index 7ecbecf95..cd4062f2a 100644
--- a/db/docs/java/com/sleepycat/db/class-use/FeedbackHandler.html
+++ b/db/docs/java/com/sleepycat/db/class-use/FeedbackHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.FeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.FeedbackHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.FeedbackHandler (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.FeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.FeedbackHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useFeedbackHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FeedbackHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" ti
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,7 +129,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></FONT></TD>
+<TH ALIGN="left" 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/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -171,7 +174,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -180,7 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useFeedbackHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FeedbackHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -193,6 +196,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -200,6 +204,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/FeedbackHandler.html" title="inter
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/HashStats.html b/db/docs/java/com/sleepycat/db/class-use/HashStats.html
index 100afc476..7b89700a5 100644
--- a/db/docs/java/com/sleepycat/db/class-use/HashStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/HashStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.HashStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.HashStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.HashStats (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.HashStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.HashStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useHashStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="HashStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.HashStats
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.HashStats
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.HashStats
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useHashStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="HashStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.HashStats
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.HashStats
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Hasher.html b/db/docs/java/com/sleepycat/db/class-use/Hasher.html
index ea8f59a8a..c5f664a98 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Hasher.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Hasher.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.Hasher (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.Hasher (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.Hasher (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.Hasher (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.Hasher (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useHasher.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Hasher.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Hasher.html" title="inte
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Hasher.html" title="interface in com.sleepycat.db">Hasher</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Hasher.html" title="interface in com.sleepycat.db">Hasher</A></FONT></TD>
+<TH ALIGN="left" 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/Hasher.html" title="interface in com.sleepycat.db">Hasher</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -164,7 +167,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useHasher.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Hasher.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -177,6 +180,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -184,6 +188,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Hasher.html" title="interface in c
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/JoinConfig.html b/db/docs/java/com/sleepycat/db/class-use/JoinConfig.html
index 959173d8a..a1834b7df 100644
--- a/db/docs/java/com/sleepycat/db/class-use/JoinConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/JoinConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.JoinConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.JoinConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.JoinConfig (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.JoinConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.JoinConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useJoinConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -89,7 +92,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -97,8 +100,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -106,7 +109,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,8 +128,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -134,7 +137,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,7 +169,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TD>
+<TH ALIGN="left" 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/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -189,7 +192,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -205,7 +208,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -214,7 +217,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useJoinConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -227,6 +230,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -234,6 +238,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinConfig.html" title="class in c
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/JoinCursor.html b/db/docs/java/com/sleepycat/db/class-use/JoinCursor.html
index beda4a18d..0e8452b61 100644
--- a/db/docs/java/com/sleepycat/db/class-use/JoinCursor.html
+++ b/db/docs/java/com/sleepycat/db/class-use/JoinCursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.JoinCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.JoinCursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.JoinCursor (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.JoinCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.JoinCursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useJoinCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,7 +128,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -141,7 +144,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in c
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useJoinCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="JoinCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -163,6 +166,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in c
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -170,6 +174,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/JoinCursor.html" title="class in c
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/KeyRange.html b/db/docs/java/com/sleepycat/db/class-use/KeyRange.html
index eeb3ace5e..cb0ac9f11 100644
--- a/db/docs/java/com/sleepycat/db/class-use/KeyRange.html
+++ b/db/docs/java/com/sleepycat/db/class-use/KeyRange.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.KeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.KeyRange (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.KeyRange (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.KeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.KeyRange (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useKeyRange.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="KeyRange.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="cl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,7 +128,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -141,7 +144,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useKeyRange.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="KeyRange.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -163,6 +166,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -170,6 +174,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Lock.html b/db/docs/java/com/sleepycat/db/class-use/Lock.html
index 1b7c7cdb0..cccd0c8dd 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Lock.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Lock.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.Lock (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.Lock (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.Lock (Sleepycat Software, Inc. - Berkeley DB Java
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.Lock (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.Lock (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLock.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Lock.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Lock.html" title="class
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -138,23 +141,23 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TD>
+<TH ALIGN="left" 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/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#setLock(com.sleepycat.db.Lock)">setLock</A></B>(<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>&nbsp;lock)</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#putLock(com.sleepycat.db.Lock)">putLock</A></B>(<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>&nbsp;lock)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock reference.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Release a lock.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#putLock(com.sleepycat.db.Lock)">putLock</A></B>(<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>&nbsp;lock)</CODE>
+<TD><CODE><B>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#setLock(com.sleepycat.db.Lock)">setLock</A></B>(<A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>&nbsp;lock)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Release a lock.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock reference.</TD>
</TR>
</TABLE>
&nbsp;
@@ -162,7 +165,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TD>
+<TH ALIGN="left" 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/Lock.html" title="class in com.sleepycat.db">Lock</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)">LockRequest</A></B>(<A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>&nbsp;op,
@@ -196,7 +199,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -212,7 +215,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -221,7 +224,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLock.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Lock.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -234,6 +237,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -241,6 +245,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Lock.html" title="class in com.sle
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockDetectMode.html b/db/docs/java/com/sleepycat/db/class-use/LockDetectMode.html
index 9ca0e4b68..e7f2f663b 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockDetectMode.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockDetectMode.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockDetectMode (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockDetectMode (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockDetectMode (Sleepycat Software, Inc. - Berkel
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockDetectMode (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockDetectMode (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockDetectMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockDetectMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" tit
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,15 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</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/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockDetectMode.</B><B><A HREF="../../../../com/sleepycat/db/LockDetectMode.html#NONE">NONE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Turn off deadlock detection.</TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -164,6 +159,14 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></CODE></FONT></TD>
+<TD><CODE><B>LockDetectMode.</B><B><A HREF="../../../../com/sleepycat/db/LockDetectMode.html#NONE">NONE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Turn off deadlock detection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></CODE></FONT></TD>
<TD><CODE><B>LockDetectMode.</B><B><A HREF="../../../../com/sleepycat/db/LockDetectMode.html#OLDEST">OLDEST</A></B></CODE>
<BR>
@@ -191,7 +194,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -199,7 +202,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#getLockDetectMode()">getLockDetectMode</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if the deadlock detector is configured to run whenever a lock
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the deadlock detector is configured to run whenever a lock
conflict occurs.</TD>
</TR>
</TABLE>
@@ -208,24 +211,24 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TD>
+<TH ALIGN="left" 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/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#setLockDetectMode(com.sleepycat.db.LockDetectMode)">setLockDetectMode</A></B>(<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>&nbsp;lockDetectMode)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#detectDeadlocks(com.sleepycat.db.LockDetectMode)">detectDeadlocks</A></B>(<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>&nbsp;mode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure if the deadlock detector is to be run whenever a lock
- conflict occurs.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run 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;int</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#detectDeadlocks(com.sleepycat.db.LockDetectMode)">detectDeadlocks</A></B>(<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>&nbsp;mode)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#setLockDetectMode(com.sleepycat.db.LockDetectMode)">setLockDetectMode</A></B>(<A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>&nbsp;lockDetectMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run one iteration of the deadlock detector.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure if the deadlock detector is to be run whenever a lock
+ conflict occurs.</TD>
</TR>
</TABLE>
&nbsp;
@@ -238,7 +241,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -254,7 +257,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -263,7 +266,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockDetectMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockDetectMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -276,6 +279,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -283,6 +287,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockDetectMode.html" title="class
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockMode.html b/db/docs/java/com/sleepycat/db/class-use/LockMode.html
index 7a20b9f0c..363d11a1c 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockMode.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockMode.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockMode (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockMode (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockMode (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockMode (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockMode (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LockMode.html" title="cl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockMode.html" title="class in com.sleepycat.db">LockMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -116,35 +119,53 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#DIRTY_READ">DIRTY_READ</A></B></CODE>
+<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#DEGREE_2">DEGREE_2</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read modified but not yet committed data.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../../com/sleepycat/db/LockMode.html#READ_COMMITTED"><CODE>READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#RMW">RMW</A></B></CODE>
+<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#DIRTY_READ">DIRTY_READ</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire write locks instead of read locks when doing the retrieval.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="../../../../com/sleepycat/db/LockMode.html#READ_UNCOMMITTED"><CODE>READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#DEGREE_2">DEGREE_2</A></B></CODE>
+<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#READ_COMMITTED">READ_COMMITTED</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Degree 2 isolation provides for cursor stability but not repeatable
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read committed isolation provides for cursor stability but not repeatable
reads.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
+<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#READ_UNCOMMITTED">READ_UNCOMMITTED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read modified but not yet committed data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A></CODE></FONT></TD>
+<TD><CODE><B>LockMode.</B><B><A HREF="../../../../com/sleepycat/db/LockMode.html#RMW">RMW</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire write locks instead of read locks when doing the retrieval.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockMode.html" title="class in com.sleepycat.db">LockMode</A></FONT></TD>
+<TH ALIGN="left" 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/LockMode.html" title="class in com.sleepycat.db">LockMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,33 +182,29 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
-is, both the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
@@ -209,307 +226,295 @@ that pair.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
-the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
-key of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
-the key and data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
+the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
+data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
+is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
+the key and data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
+key of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
+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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -525,6 +530,18 @@ associated with the given key.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
@@ -536,44 +553,48 @@ the data item associated with the matching key.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
-data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
-database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
</TR>
</TABLE>
&nbsp;
@@ -586,7 +607,7 @@ return the associated key/data pair.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -602,7 +623,7 @@ return the associated key/data pair.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -611,7 +632,7 @@ return the associated key/data pair.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -624,6 +645,7 @@ return the associated key/data pair.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -631,6 +653,6 @@ return the associated key/data pair.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockNotGrantedException.html b/db/docs/java/com/sleepycat/db/class-use/LockNotGrantedException.html
index b777ebe35..53cdf0823 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockNotGrantedException.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockNotGrantedException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockNotGrantedException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockNotGrantedException (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockNotGrantedException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockNotGrantedException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockNotGrantedException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.LockNotGrantedException
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.LockNotGrantedException
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.LockNotGrantedException
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockNotGrantedException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockNotGrantedException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.LockNotGrantedException
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.LockNotGrantedException
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockOperation.html b/db/docs/java/com/sleepycat/db/class-use/LockOperation.html
index 7b6b5a9e6..0502623f5 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockOperation.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockOperation.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockOperation (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockOperation (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockOperation (Sleepycat Software, Inc. - Berkele
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockOperation (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockOperation (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LockOperation.html" titl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -161,7 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -177,7 +180,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TD>
+<TH ALIGN="left" 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/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -193,7 +196,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TD>
+<TH ALIGN="left" 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/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)">LockRequest</A></B>(<A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>&nbsp;op,
@@ -227,7 +230,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -243,7 +246,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -252,7 +255,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -265,6 +268,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -272,6 +276,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class i
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockRequest.html b/db/docs/java/com/sleepycat/db/class-use/LockRequest.html
index 41af6dc79..ef2d54c7f 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockRequest.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockRequest.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockRequest (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockRequest (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockRequest (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockRequest.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequest.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LockRequest.html" title=
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A></FONT></TD>
+<TH ALIGN="left" 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/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,7 +128,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -141,7 +144,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockRequest.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequest.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -163,6 +166,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -170,6 +174,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequest.html" title="class in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockRequestMode.html b/db/docs/java/com/sleepycat/db/class-use/LockRequestMode.html
index 28d8574e0..8aca20a9e 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockRequestMode.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockRequestMode.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockRequestMode (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockRequestMode (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockRequestMode (Sleepycat Software, Inc. - Berke
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockRequestMode (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockRequestMode (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockRequestMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequestMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" ti
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,23 +105,23 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#READ">READ</A></B></CODE>
+<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#IREAD">IREAD</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read (shared).</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intention to read (shared).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#WRITE">WRITE</A></B></CODE>
+<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#IWR">IWR</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write (exclusive).</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intention to read and write (shared).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -131,18 +134,18 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#IREAD">IREAD</A></B></CODE>
+<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#READ">READ</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intention to read (shared).</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read (shared).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></CODE></FONT></TD>
-<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#IWR">IWR</A></B></CODE>
+<TD><CODE><B>LockRequestMode.</B><B><A HREF="../../../../com/sleepycat/db/LockRequestMode.html#WRITE">WRITE</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intention to read and write (shared).</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write (exclusive).</TD>
</TR>
</TABLE>
&nbsp;
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,15 +169,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</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>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#setMode(com.sleepycat.db.LockRequestMode)">setMode</A></B>(<A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>&nbsp;mode)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock mode.</TD>
+<TH ALIGN="left" 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/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -187,13 +182,21 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acquire a lock 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>LockRequest.</B><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#setMode(com.sleepycat.db.LockRequestMode)">setMode</A></B>(<A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the lock mode.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TD>
+<TH ALIGN="left" 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/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)">LockRequest</A></B>(<A HREF="../../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>&nbsp;op,
@@ -227,7 +230,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -243,7 +246,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -252,7 +255,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockRequestMode.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockRequestMode.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -265,6 +268,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -272,6 +276,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockRequestMode.html" title="class
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LockStats.html b/db/docs/java/com/sleepycat/db/class-use/LockStats.html
index 2700485b4..852ec981b 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LockStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LockStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LockStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LockStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LockStats (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LockStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LockStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LockStats.html" title="c
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in co
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LockStats.html" title="class in com.sleepycat.db">LockStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in co
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in co
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in co
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLockStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LockStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in co
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in co
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LogCursor.html b/db/docs/java/com/sleepycat/db/class-use/LogCursor.html
index 9de62e842..80229bfe5 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LogCursor.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LogCursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LogCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LogCursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LogCursor (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LogCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LogCursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="c
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in co
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in co
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in co
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in co
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in co
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogCursor.html" title="class in co
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LogRecordHandler.html b/db/docs/java/com/sleepycat/db/class-use/LogRecordHandler.html
index ab9566908..4786974be 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LogRecordHandler.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LogRecordHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.LogRecordHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.LogRecordHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.LogRecordHandler (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.LogRecordHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.LogRecordHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogRecordHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogRecordHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" t
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A></FONT></TD>
+<TH ALIGN="left" 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/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -164,7 +167,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogRecordHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogRecordHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -177,6 +180,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -184,6 +188,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogRecordHandler.html" title="inte
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LogSequenceNumber.html b/db/docs/java/com/sleepycat/db/class-use/LogSequenceNumber.html
index c4d4d43b9..accd59f5b 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LogSequenceNumber.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LogSequenceNumber.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LogSequenceNumber (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LogSequenceNumber (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LogSequenceNumber (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LogSequenceNumber (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LogSequenceNumber (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogSequenceNumber.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogSequenceNumber.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html"
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,15 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationStats.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationStats.html#getElectionLsn()">getElectionLsn</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">
@@ -143,19 +154,19 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
-<TD><CODE><B>ReplicationStats.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationStats.html#getWaitingLsn()">getWaitingLsn</A></B>()</CODE>
+<TD><CODE><B>TransactionStats.Active.</B><B><A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html#getReadLsn()">getReadLsn</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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log sequence number of reads for snapshot 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/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></CODE></FONT></TD>
-<TD><CODE><B>ReplicationStats.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationStats.html#getElectionLsn()">getElectionLsn</A></B>()</CODE>
+<TD><CODE><B>ReplicationStats.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationStats.html#getWaitingLsn()">getWaitingLsn</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum LSN of election winner.</TD>
+&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">
@@ -172,22 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</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>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- int&nbsp;envid,
- boolean&nbsp;noBuffer,
- boolean&nbsp;permanent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
- message.</TD>
+<TH ALIGN="left" 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/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -200,17 +196,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>LogRecordHandler.</B><B><A HREF="../../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)">handleLogRecord</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
- <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
@@ -222,15 +207,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next LogSequenceNumber and log record.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
@@ -248,30 +224,41 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogFileName(com.sleepycat.db.LogSequenceNumber)">getLogFileName</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the name of the log file that contains the log record
+ specified by a LogSequenceNumber object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogFileName(com.sleepycat.db.LogSequenceNumber)">getLogFileName</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn)</CODE>
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>LogRecordHandler.</B><B><A HREF="../../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)">handleLogRecord</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;logRecord,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>&nbsp;operation)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the name of the log file that contains the log record
- specified by a LogSequenceNumber object.</TD>
+&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">
@@ -281,6 +268,32 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush log records to stable storage.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>ReplicationTransport.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)">send</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;environment,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ int&nbsp;envid,
+ boolean&nbsp;noBuffer,
+ boolean&nbsp;permanent,
+ boolean&nbsp;anywhere,
+ boolean&nbsp;isRetry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback used when Berkeley DB needs to transmit a replication
+ message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
@@ -292,7 +305,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -308,7 +321,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -317,7 +330,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogSequenceNumber.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogSequenceNumber.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -330,6 +343,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -337,6 +351,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/LogStats.html b/db/docs/java/com/sleepycat/db/class-use/LogStats.html
index fd63210f6..5d50432dd 100644
--- a/db/docs/java/com/sleepycat/db/class-use/LogStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/LogStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.LogStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.LogStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.LogStats (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.LogStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.LogStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/LogStats.html" title="cl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/LogStats.html" title="class in com.sleepycat.db">LogStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useLogStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="LogStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MemoryException.html b/db/docs/java/com/sleepycat/db/class-use/MemoryException.html
index 518c36d10..c7619aa14 100644
--- a/db/docs/java/com/sleepycat/db/class-use/MemoryException.html
+++ b/db/docs/java/com/sleepycat/db/class-use/MemoryException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.MemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.MemoryException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.MemoryException (Sleepycat Software, Inc. - Berke
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.MemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.MemoryException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMemoryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MemoryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.MemoryException
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.MemoryException
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.MemoryException
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMemoryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MemoryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.MemoryException
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.MemoryException
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MessageHandler.html b/db/docs/java/com/sleepycat/db/class-use/MessageHandler.html
index dc1240746..ef7d894f0 100644
--- a/db/docs/java/com/sleepycat/db/class-use/MessageHandler.html
+++ b/db/docs/java/com/sleepycat/db/class-use/MessageHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.MessageHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.MessageHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.MessageHandler (Sleepycat Software, Inc. - Be
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.MessageHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.MessageHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMessageHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MessageHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/MessageHandler.html" tit
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,7 +129,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></FONT></TD>
+<TH ALIGN="left" 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/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -171,7 +174,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -180,7 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMessageHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MessageHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -193,6 +196,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -200,6 +204,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/MessageHandler.html" title="interf
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleDataEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleDataEntry.html
index a5b71b591..b534606a9 100644
--- a/db/docs/java/com/sleepycat/db/class-use/MultipleDataEntry.html
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleDataEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.MultipleDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.MultipleDataEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.MultipleDataEntry (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.MultipleDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleDataEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.MultipleDataEntry
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.MultipleDataEntry
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.MultipleDataEntry
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.MultipleDataEntry
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.MultipleDataEntry
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleEntry.html
index 3c816aaad..c41d7d8e9 100644
--- a/db/docs/java/com/sleepycat/db/class-use/MultipleEntry.html
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.MultipleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.MultipleEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.MultipleEntry (Sleepycat Software, Inc. - Berkele
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.MultipleEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" titl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,12 +128,39 @@ Uses of <A HREF="../../../../com/sleepycat/db/MultipleEntry.html" title="class i
<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/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple key/data pairs returned by a single
+<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</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/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple data items returned by a single
+<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</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/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple record number/data pairs returned by a
single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</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/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A DatabaseEntry that holds multiple record number/data pairs returned by a
+single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
@@ -142,7 +172,7 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -158,7 +188,7 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -167,7 +197,7 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -180,6 +210,7 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -187,6 +218,6 @@ single <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleKeyDataEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleKeyDataEntry.html
index 2e99b5d5a..21f540aad 100644
--- a/db/docs/java/com/sleepycat/db/class-use/MultipleKeyDataEntry.html
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleKeyDataEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.MultipleKeyDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.MultipleKeyDataEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.MultipleKeyDataEntry (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.MultipleKeyDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleKeyDataEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleKeyDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleKeyDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.MultipleKeyDataEntry
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.MultipleKeyDataEntry
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.MultipleKeyDataEntry
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleKeyDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleKeyDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.MultipleKeyDataEntry
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.MultipleKeyDataEntry
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleKeyNIODataEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleKeyNIODataEntry.html
new file mode 100644
index 000000000..9a28b075e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleKeyNIODataEntry.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.MultipleKeyNIODataEntry (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleKeyNIODataEntry (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleKeyNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleKeyNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.MultipleKeyNIODataEntry</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.MultipleKeyNIODataEntry
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleKeyNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleKeyNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleNIODataEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleNIODataEntry.html
new file mode 100644
index 000000000..81097b754
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleNIODataEntry.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.MultipleNIODataEntry (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleNIODataEntry (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.MultipleNIODataEntry</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.MultipleNIODataEntry
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoDataEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoDataEntry.html
index cfd5bb117..ed2439480 100644
--- a/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoDataEntry.html
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoDataEntry.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:45 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.MultipleRecnoDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.MultipleRecnoDataEntry (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.MultipleRecnoDataEntry (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.MultipleRecnoDataEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleRecnoDataEntry (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleRecnoDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleRecnoDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.MultipleRecnoDataEntry
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.MultipleRecnoDataEntry
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.MultipleRecnoDataEntry
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleRecnoDataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="MultipleRecnoDataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.MultipleRecnoDataEntry
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.MultipleRecnoDataEntry
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoNIODataEntry.html b/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoNIODataEntry.html
new file mode 100644
index 000000000..a6f25596c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/MultipleRecnoNIODataEntry.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.MultipleRecnoNIODataEntry (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.MultipleRecnoNIODataEntry (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleRecnoNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleRecnoNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.MultipleRecnoNIODataEntry</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.MultipleRecnoNIODataEntry
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMultipleRecnoNIODataEntry.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MultipleRecnoNIODataEntry.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/MutexStats.html b/db/docs/java/com/sleepycat/db/class-use/MutexStats.html
new file mode 100644
index 000000000..3995e5d78
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/MutexStats.html
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.MutexStats (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.MutexStats (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MutexStats.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMutexStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutexStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.MutexStats</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)">getMutexStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's mutex statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/MutexStats.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useMutexStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MutexStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/OperationStatus.html b/db/docs/java/com/sleepycat/db/class-use/OperationStatus.html
index a46e8d0cb..2d6d6f44f 100644
--- a/db/docs/java/com/sleepycat/db/class-use/OperationStatus.html
+++ b/db/docs/java/com/sleepycat/db/class-use/OperationStatus.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.OperationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.OperationStatus (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.OperationStatus (Sleepycat Software, Inc. - Berke
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.OperationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.OperationStatus (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useOperationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="OperationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/OperationStatus.html" ti
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,15 +105,16 @@ Uses of <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>OperationStatus.</B><B><A HREF="../../../../com/sleepycat/db/OperationStatus.html#SUCCESS">SUCCESS</A></B></CODE>
+<TD><CODE><B>OperationStatus.</B><B><A HREF="../../../../com/sleepycat/db/OperationStatus.html#KEYEMPTY">KEYEMPTY</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The operation was successful.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The cursor operation was unsuccessful because the current record
+ was deleted.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -124,19 +128,18 @@ Uses of <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>OperationStatus.</B><B><A HREF="../../../../com/sleepycat/db/OperationStatus.html#KEYEMPTY">KEYEMPTY</A></B></CODE>
+<TD><CODE><B>OperationStatus.</B><B><A HREF="../../../../com/sleepycat/db/OperationStatus.html#NOTFOUND">NOTFOUND</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The cursor operation was unsuccessful because the current record
- was deleted.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The requested key/data pair was not found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>OperationStatus.</B><B><A HREF="../../../../com/sleepycat/db/OperationStatus.html#NOTFOUND">NOTFOUND</A></B></CODE>
+<TD><CODE><B>OperationStatus.</B><B><A HREF="../../../../com/sleepycat/db/OperationStatus.html#SUCCESS">SUCCESS</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The requested key/data pair was not found.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The operation was successful.</TD>
</TR>
</TABLE>
&nbsp;
@@ -144,231 +147,205 @@ Uses of <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Append the key/data pair to the end of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ boolean&nbsp;wait)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
-is, both the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
+the head of the queue, and delete the record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#delete()">delete</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the LogSequenceNumber and log record to which the log cursor
+ currently 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the first LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
-the primary and secondary key items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the last LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
-key of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the LogSequenceNumber and log record to which the log cursor
- currently refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join operation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -382,399 +359,425 @@ return the associated key/data pair.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the first LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the last LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, move the cursor to the next key/data pair
+of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>JoinCursor.</B><B><A HREF="../../../../com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
<A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next primary key and data resulting from the join operation.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove key/data pairs from the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the previous LogSequenceNumber and log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
-the key and data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
+for the current key/data pair, move the cursor to the previous key/data
+pair of the database and return that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Append the key/data pair to the end of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
+that pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryRecno,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if the key does not already
-appear in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if it does not already appear
-in the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- boolean&nbsp;wait)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
-the head of the queue, and delete the record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary and primary key, where both
+the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
+data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#delete()">delete</A></B>()</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the specified secondary and primary key, that
+is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
+the key and data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified secondary key and closest matching primary
+key of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
+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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)">putCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
+associated with the given key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
+the data item associated with the matching key.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;secondaryRecno,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key/data pair to which the cursor refers.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
+return the associated key/data pair.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the first key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the last key/data pair of the database, and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNext</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the next key/data pair of the database is a duplicate data record for
-the current key/data pair, move the cursor to the next key/data pair
-of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getNextNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putAfter</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the next non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrev</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putBefore</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous key/data pair and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)">putCurrent</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the previous key/data pair of the database is a duplicate data record
-for the current key/data pair, move the cursor to the previous key/data
-pair of the database and return that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getPrevNoDup</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyFirst</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the previous non-duplicate key/data pair and return
-that pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKey</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putKeyLast</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the given key of the database, and return the datum
-associated with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the closest matching key of the database, and return
-the data item associated with the matching key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key/data pair, where both the key and
-data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the database if it does not already appear
+in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBothRange</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specified key and closest matching data item of the
-database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Store a key/data pair into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoOverwrite</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number associated with the cursor.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Store the key/data pair into the database if the key does not already
+appear in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Cursor.</B><B><A HREF="../../../../com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<TD><CODE><B>LogCursor.</B><B><A HREF="../../../../com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)">set</A></B>(<A HREF="../../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a specific log record.</TD>
</TR>
</TABLE>
&nbsp;
@@ -787,7 +790,7 @@ return the associated key/data pair.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -803,7 +806,7 @@ return the associated key/data pair.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -812,7 +815,7 @@ return the associated key/data pair.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useOperationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="OperationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -825,6 +828,7 @@ return the associated key/data pair.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -832,6 +836,6 @@ return the associated key/data pair.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/PanicHandler.html b/db/docs/java/com/sleepycat/db/class-use/PanicHandler.html
index e273934d1..59cef3f61 100644
--- a/db/docs/java/com/sleepycat/db/class-use/PanicHandler.html
+++ b/db/docs/java/com/sleepycat/db/class-use/PanicHandler.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.PanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.PanicHandler (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.PanicHandler (Sleepycat Software, Inc. - Berk
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.PanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.PanicHandler (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-usePanicHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PanicHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,7 +129,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A></FONT></TD>
+<TH ALIGN="left" 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/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -171,7 +174,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -180,7 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-usePanicHandler.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PanicHandler.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -193,6 +196,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -200,6 +204,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/PanicHandler.html" title="interfac
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/PreparedTransaction.html b/db/docs/java/com/sleepycat/db/class-use/PreparedTransaction.html
index 0d137f5f3..479173cb8 100644
--- a/db/docs/java/com/sleepycat/db/class-use/PreparedTransaction.html
+++ b/db/docs/java/com/sleepycat/db/class-use/PreparedTransaction.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.PreparedTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.PreparedTransaction (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.PreparedTransaction (Sleepycat Software, Inc. - B
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.PreparedTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.PreparedTransaction (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-usePreparedTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PreparedTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="c
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -124,7 +127,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="c
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -140,7 +143,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="c
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -149,7 +152,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="c
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-usePreparedTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="PreparedTransaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -162,6 +165,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="c
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -169,6 +173,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/PreparedTransaction.html" title="c
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/QueueStats.html b/db/docs/java/com/sleepycat/db/class-use/QueueStats.html
index ee94fb6e4..3afba16c8 100644
--- a/db/docs/java/com/sleepycat/db/class-use/QueueStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/QueueStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.QueueStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.QueueStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.QueueStats (Sleepycat Software, Inc. - Berkeley D
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.QueueStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.QueueStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useQueueStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="QueueStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.QueueStats
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.QueueStats
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.QueueStats
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useQueueStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="QueueStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.QueueStats
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.QueueStats
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/RecordNumberAppender.html b/db/docs/java/com/sleepycat/db/class-use/RecordNumberAppender.html
index 22b084a6e..6d5577bef 100644
--- a/db/docs/java/com/sleepycat/db/class-use/RecordNumberAppender.html
+++ b/db/docs/java/com/sleepycat/db/class-use/RecordNumberAppender.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.RecordNumberAppender (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.RecordNumberAppender (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.RecordNumberAppender (Sleepycat Software, Inc
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.RecordNumberAppender (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.RecordNumberAppender (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useRecordNumberAppender.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberAppender.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.htm
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,7 +122,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A></FONT></TD>
+<TH ALIGN="left" 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/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -142,7 +145,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -158,7 +161,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -167,7 +170,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useRecordNumberAppender.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecordNumberAppender.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -180,6 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -187,6 +191,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecordNumberAppender.html" title="
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/RecoveryOperation.html b/db/docs/java/com/sleepycat/db/class-use/RecoveryOperation.html
index e73ca3e10..274c0c47b 100644
--- a/db/docs/java/com/sleepycat/db/class-use/RecoveryOperation.html
+++ b/db/docs/java/com/sleepycat/db/class-use/RecoveryOperation.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.RecoveryOperation (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.RecoveryOperation (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.RecoveryOperation (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.RecoveryOperation (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.RecoveryOperation (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useRecoveryOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecoveryOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html"
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,44 +105,44 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></CODE></FONT></TD>
-<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#BACKWARD_ROLL">BACKWARD_ROLL</A></B></CODE>
+<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#ABORT">ABORT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being read backward to determine which transactions have
- been committed and to abort those operations that were not; undo the
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being read backward during a transaction abort; undo the
operation described by the log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></CODE></FONT></TD>
-<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#FORWARD_ROLL">FORWARD_ROLL</A></B></CODE>
+<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#APPLY">APPLY</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being played forward; redo the operation described by the log
- record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being applied on a replica site; redo the operation
+ described by the log record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></CODE></FONT></TD>
-<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#ABORT">ABORT</A></B></CODE>
+<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#BACKWARD_ROLL">BACKWARD_ROLL</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being read backward during a transaction abort; undo the
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></CODE></FONT></TD>
-<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#APPLY">APPLY</A></B></CODE>
+<TD><CODE><B>RecoveryOperation.</B><B><A HREF="../../../../com/sleepycat/db/RecoveryOperation.html#FORWARD_ROLL">FORWARD_ROLL</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being applied on a replica site; redo the operation
- described by the log record.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log is being played forward; redo the operation described by the log
+ record.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -156,7 +159,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -173,7 +176,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TD>
+<TH ALIGN="left" 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/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -197,7 +200,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -213,7 +216,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -222,7 +225,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useRecoveryOperation.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RecoveryOperation.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -235,6 +238,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -242,6 +246,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/RecoveryOperation.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationConfig.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationConfig.html
new file mode 100644
index 000000000..3a410a529
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationConfig.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationConfig (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationConfig (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationConfig.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationConfig</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationConfig.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationConfig.html#BULK">BULK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The replication master should send groups of records to the clients in a
+ single network transfer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationConfig.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationConfig.html#DELAYCLIENT">DELAYCLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The client should delay synchronizing to a newly declared master
+ (defaults to off).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationConfig.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT">NOAUTOINIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The replication master should not automatically re-initialize outdated
+ clients.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationConfig.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationConfig.html#NOWAIT">NOWAIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Berkeley DB method calls that would normally block while clients are in
+ recovery should return errors immediately.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></FONT></TH>
+</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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationConfig(com.sleepycat.db.ReplicationConfig)">getReplicationConfig</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the configuration of the replication subsystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)">setReplicationConfig</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>&nbsp;config,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the replication subsystem.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationConfig.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationDuplicateMasterException.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationDuplicateMasterException.html
new file mode 100644
index 000000000..4a7623ac7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationDuplicateMasterException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationDuplicateMasterException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationDuplicateMasterException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationDuplicateMasterException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationDuplicateMasterException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationDuplicateMasterException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.ReplicationDuplicateMasterException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationDuplicateMasterException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationDuplicateMasterException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationHandleDeadException.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationHandleDeadException.html
index 946bf2ee7..47322f02c 100644
--- a/db/docs/java/com/sleepycat/db/class-use/ReplicationHandleDeadException.html
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationHandleDeadException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.ReplicationHandleDeadException (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.ReplicationHandleDeadException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.ReplicationHandleDeadException (Sleepycat Softwar
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.ReplicationHandleDeadException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationHandleDeadException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationHandleDeadException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationHandleDeadException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.ReplicationHandleDeadException
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.ReplicationHandleDeadException
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.ReplicationHandleDeadException
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationHandleDeadException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationHandleDeadException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.ReplicationHandleDeadException
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.ReplicationHandleDeadException
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationHoldElectionException.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationHoldElectionException.html
new file mode 100644
index 000000000..3c95e9db0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationHoldElectionException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationHoldElectionException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationHoldElectionException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationHoldElectionException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHoldElectionException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationHoldElectionException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.ReplicationHoldElectionException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationHoldElectionException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHoldElectionException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationHostAddress.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationHostAddress.html
new file mode 100644
index 000000000..53f639f3e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationHostAddress.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationHostAddress (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationHostAddress (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationHostAddress.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationHostAddress.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHostAddress.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationHostAddress</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A></CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#getReplicationManagerLocalSite()">getReplicationManagerLocalSite</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the address of the local (this) site in a replication group.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#replicationManagerAddRemoteSite(com.sleepycat.db.ReplicationHostAddress)">replicationManagerAddRemoteSite</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>&nbsp;addr)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a new replication site to the replication manager's list of known
+ sites.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#setReplicationManagerLocalSite(com.sleepycat.db.ReplicationHostAddress)">setReplicationManagerLocalSite</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>&nbsp;addr)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the address of the local (this) site in a replication group.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationHostAddress.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationHostAddress.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationHostAddress.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationJoinFailureException.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationJoinFailureException.html
new file mode 100644
index 000000000..67640a747
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationJoinFailureException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationJoinFailureException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationJoinFailureException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationJoinFailureException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationJoinFailureException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationJoinFailureException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.ReplicationJoinFailureException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationJoinFailureException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationJoinFailureException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationLockoutException.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationLockoutException.html
new file mode 100644
index 000000000..a69c56640
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationLockoutException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationLockoutException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationLockoutException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationLockoutException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationLockoutException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationLockoutException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationLockoutException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.ReplicationLockoutException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationLockoutException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationLockoutException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationLockoutException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationManagerAckPolicy.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationManagerAckPolicy.html
new file mode 100644
index 000000000..74c464a51
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationManagerAckPolicy.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationManagerAckPolicy (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationManagerAckPolicy (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationManagerAckPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerAckPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationManagerAckPolicy</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerAckPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ALL">ALL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until all replication clients have acknowledged
+ each permanent replication message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerAckPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ALL_PEERS">ALL_PEERS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until all electable peers have acknowledged
+ each permanent replication message (where "electable peer" means a
+ client capable of being subsequently elected master of the
+ replication group).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerAckPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#NONE">NONE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should not wait for any client replication message
+ acknowledgments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerAckPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ONE">ONE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until at least one client site has acknowledged
+ each permanent replication message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerAckPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#ONE_PEER">ONE_PEER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until at least one electable peer has acknowledged
+ each permanent replication message (where "electable peer" means a client
+ capable of being subsequently elected master of the replication group).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerAckPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html#QUORUM">QUORUM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The master should wait until it has received acknowledgements from the
+ minimum number of electable peers sufficient to ensure that the effect
+ of the permanent record remains durable if an election is held (where
+ "electable peer" means a client capable of being subsequently elected
+ master of the replication group).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#getReplicationManagerAckPolicy()">getReplicationManagerAckPolicy</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the network Ack policy used by the replication manager.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EnvironmentConfig.</B><B><A HREF="../../../../com/sleepycat/db/EnvironmentConfig.html#setReplicationManagerAckPolicy(com.sleepycat.db.ReplicationManagerAckPolicy)">setReplicationManagerAckPolicy</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>&nbsp;policy)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the network Ack policy used by the replication manager.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationManagerAckPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerAckPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationManagerStartPolicy.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationManagerStartPolicy.html
new file mode 100644
index 000000000..a3883cb94
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationManagerStartPolicy.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationManagerStartPolicy (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationManagerStartPolicy (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationManagerStartPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerStartPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationManagerStartPolicy</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerStartPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_CLIENT">REP_CLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a client site, and do not call for an election.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerStartPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_ELECTION">REP_ELECTION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a client, and call for an election if no master is found.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerStartPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_FULL_ELECTION">REP_FULL_ELECTION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a client, and call for an election if no master is found.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationManagerStartPolicy.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_MASTER">REP_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start as a master site, and do not call for an election.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)">replicationManagerStart</A></B>(int&nbsp;numthreads,
+ <A HREF="../../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>&nbsp;policy)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Starts the replication manager.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationManagerStartPolicy.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationManagerStartPolicy.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationSiteUnavailableException.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationSiteUnavailableException.html
new file mode 100644
index 000000000..548872f35
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationSiteUnavailableException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationSiteUnavailableException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationSiteUnavailableException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationSiteUnavailableException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationSiteUnavailableException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationSiteUnavailableException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.ReplicationSiteUnavailableException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationSiteUnavailableException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationSiteUnavailableException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationStats.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationStats.html
index c17a70a6e..b927ea8dd 100644
--- a/db/docs/java/com/sleepycat/db/class-use/ReplicationStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.ReplicationStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.ReplicationStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.ReplicationStats (Sleepycat Software, Inc. - Berk
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.ReplicationStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" t
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="clas
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="clas
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="clas
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="clas
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="clas
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="clas
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationStatus.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationStatus.html
index d0e3b2616..3293fd23d 100644
--- a/db/docs/java/com/sleepycat/db/class-use/ReplicationStatus.html
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationStatus.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.ReplicationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.ReplicationStatus (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.ReplicationStatus (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.ReplicationStatus (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationStatus (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html"
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,7 +129,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -142,7 +145,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -151,7 +154,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationStatus.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationStatus.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -164,6 +167,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -171,6 +175,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationStatus.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationTimeoutType.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationTimeoutType.html
new file mode 100644
index 000000000..900f22375
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationTimeoutType.html
@@ -0,0 +1,231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.ReplicationTimeoutType (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.ReplicationTimeoutType (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationTimeoutType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationTimeoutType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.ReplicationTimeoutType</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Berkeley DB Java API<br>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationTimeoutType.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html#ACK_TIMEOUT">ACK_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the amount of time the replication manager's transport function
+ waits to collect enough acknowledgments from replication group clients,
+ before giving up and returning a failure indication.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationTimeoutType.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html#CONNECTION_RETRY">CONNECTION_RETRY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the amount of time the replication manager will wait before
+ trying to re-establish a connection to another site after a
+ communication failure.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationTimeoutType.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html#ELECTION_RETRY">ELECTION_RETRY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the amount of time the replication manager will wait before
+ retrying a failed election.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></CODE></FONT></TD>
+<TD><CODE><B>ReplicationTimeoutType.</B><B><A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html#ELECTION_TIMEOUT">ELECTION_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The timeout period for an election.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" 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/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType)">getReplicationTimeout</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the network timeout applied to the specified timeout type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#setReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType, int)">setReplicationTimeout</A></B>(<A HREF="../../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>&nbsp;type,
+ int&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the network timeout applied to the specified timeout type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationTimeoutType.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ReplicationTimeoutType.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/ReplicationTransport.html b/db/docs/java/com/sleepycat/db/class-use/ReplicationTransport.html
index ec3c0b5a6..406f3be0d 100644
--- a/db/docs/java/com/sleepycat/db/class-use/ReplicationTransport.html
+++ b/db/docs/java/com/sleepycat/db/class-use/ReplicationTransport.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.ReplicationTransport (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.ReplicationTransport (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.ReplicationTransport (Sleepycat Software, Inc
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.ReplicationTransport (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.ReplicationTransport (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationTransport.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationTransport.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/ReplicationTransport.htm
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -119,7 +122,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></FONT></TD>
+<TH ALIGN="left" 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/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -142,7 +145,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -158,7 +161,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -167,7 +170,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useReplicationTransport.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ReplicationTransport.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -180,6 +183,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -187,6 +191,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/ReplicationTransport.html" title="
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/RunRecoveryException.html b/db/docs/java/com/sleepycat/db/class-use/RunRecoveryException.html
index 8bf8c72de..ab0dd886e 100644
--- a/db/docs/java/com/sleepycat/db/class-use/RunRecoveryException.html
+++ b/db/docs/java/com/sleepycat/db/class-use/RunRecoveryException.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.RunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.RunRecoveryException (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.RunRecoveryException (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.RunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.RunRecoveryException (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useRunRecoveryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RunRecoveryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.db.RunRecoveryException
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.db.RunRecoveryException
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.db.RunRecoveryException
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useRunRecoveryException.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RunRecoveryException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.db.RunRecoveryException
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.db.RunRecoveryException
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/SecondaryConfig.html b/db/docs/java/com/sleepycat/db/class-use/SecondaryConfig.html
index ff57be995..79d981f64 100644
--- a/db/docs/java/com/sleepycat/db/class-use/SecondaryConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/SecondaryConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.SecondaryConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.SecondaryConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.SecondaryConfig (Sleepycat Software, Inc. - Berke
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.SecondaryConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.SecondaryConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" ti
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,7 +121,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -134,7 +137,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TD>
+<TH ALIGN="left" 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/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -154,7 +157,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TD>
+<TH ALIGN="left" 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/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">SecondaryDatabase</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
@@ -176,7 +179,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -192,7 +195,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -201,7 +204,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -214,6 +217,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -221,6 +225,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/SecondaryCursor.html b/db/docs/java/com/sleepycat/db/class-use/SecondaryCursor.html
index 129dfa916..650e77da1 100644
--- a/db/docs/java/com/sleepycat/db/class-use/SecondaryCursor.html
+++ b/db/docs/java/com/sleepycat/db/class-use/SecondaryCursor.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.SecondaryCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.SecondaryCursor (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.SecondaryCursor (Sleepycat Software, Inc. - Berke
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.SecondaryCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.SecondaryCursor (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" ti
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,24 +105,24 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#dupSecondary(boolean)">dupSecondary</A></B>(boolean&nbsp;samePosition)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new copy of the cursor as a <code>SecondaryCursor</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryCursor.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryCursor.html#dupSecondary(boolean)">dupSecondary</A></B>(boolean&nbsp;samePosition)</CODE>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new copy of the cursor as a <code>SecondaryCursor</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -132,7 +135,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -157,7 +160,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryCursor.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryCursor.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -170,6 +173,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -177,6 +181,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/SecondaryDatabase.html b/db/docs/java/com/sleepycat/db/class-use/SecondaryDatabase.html
index 42af99cd0..1b2a6ad3f 100644
--- a/db/docs/java/com/sleepycat/db/class-use/SecondaryDatabase.html
+++ b/db/docs/java/com/sleepycat/db/class-use/SecondaryDatabase.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.SecondaryDatabase (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.SecondaryDatabase (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.SecondaryDatabase (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.SecondaryDatabase (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.SecondaryDatabase (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryDatabase.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryDatabase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -93,7 +96,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html"
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -101,8 +104,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html"
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -110,7 +113,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> with parameters of type <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -126,8 +129,10 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
+<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -135,10 +140,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>SerialSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">createSecondaryKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;primaryKeyEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;indexKeyEntry)</CODE>
+<TD><CODE><B>TupleSerialKeyCreator.</B><B><A HREF="../../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)">nullifyForeignKey</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;dataEntry)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -158,8 +161,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -167,7 +170,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> with parameters of type <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -195,8 +198,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -204,7 +207,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -232,7 +235,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TD>
+<TH ALIGN="left" 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/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -256,7 +259,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -272,7 +275,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -281,7 +284,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryDatabase.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryDatabase.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -294,6 +297,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -301,6 +305,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/SecondaryKeyCreator.html b/db/docs/java/com/sleepycat/db/class-use/SecondaryKeyCreator.html
index 6f438138c..a7ab65854 100644
--- a/db/docs/java/com/sleepycat/db/class-use/SecondaryKeyCreator.html
+++ b/db/docs/java/com/sleepycat/db/class-use/SecondaryKeyCreator.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.db.SecondaryKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.db.SecondaryKeyCreator (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.db.SecondaryKeyCreator (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.db.SecondaryKeyCreator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.db.SecondaryKeyCreator (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
@@ -93,7 +96,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -101,8 +104,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -110,7 +113,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that implement <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -142,8 +145,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -151,7 +154,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that implement <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A> that implement <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -175,8 +178,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -184,7 +187,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -192,7 +195,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<TD><CODE><B>SecondaryConfig.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryConfig.html#getKeyCreator()">getKeyCreator</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the user-supplied object used for creating secondary keys.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the user-supplied object used for creating single-valued secondary
+ keys.</TD>
</TR>
</TABLE>
&nbsp;
@@ -200,7 +204,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TD>
+<TH ALIGN="left" 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/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -208,7 +212,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<TD><CODE><B>SecondaryConfig.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryConfig.html#setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)">setKeyCreator</A></B>(<A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>&nbsp;keyCreator)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user-supplied object used for creating secondary keys.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the user-supplied object used for creating single-valued
+ secondary keys.</TD>
</TR>
</TABLE>
&nbsp;
@@ -221,7 +226,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -237,7 +242,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -246,7 +251,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSecondaryKeyCreator.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SecondaryKeyCreator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -259,6 +264,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -266,6 +272,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/SecondaryKeyCreator.html" title="i
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Sequence.html b/db/docs/java/com/sleepycat/db/class-use/Sequence.html
index e49b9628c..c9142f5e2 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Sequence.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Sequence.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.Sequence (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.Sequence (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.Sequence (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.Sequence (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.Sequence (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSequence.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Sequence.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Sequence.html" title="cl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Sequence.html" title="class in com.sleepycat.db">Sequence</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -125,7 +128,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -141,7 +144,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -150,7 +153,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSequence.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Sequence.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -163,6 +166,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -170,6 +174,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/Sequence.html" title="class in com
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/SequenceConfig.html b/db/docs/java/com/sleepycat/db/class-use/SequenceConfig.html
index e36323e6b..501d202e4 100644
--- a/db/docs/java/com/sleepycat/db/class-use/SequenceConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/SequenceConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.SequenceConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.SequenceConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.SequenceConfig (Sleepycat Software, Inc. - Berkel
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.SequenceConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.SequenceConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSequenceConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" tit
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -110,7 +113,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
<TD><CODE><B>SequenceConfig.</B><B><A HREF="../../../../com/sleepycat/db/SequenceConfig.html#DEFAULT">DEFAULT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to methods that create a
+ cursor.</TD>
</TR>
</TABLE>
&nbsp;
@@ -118,7 +122,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A></FONT></TD>
+<TH ALIGN="left" 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/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -151,7 +155,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -167,7 +171,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -176,7 +180,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSequenceConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -189,6 +193,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -196,6 +201,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/SequenceStats.html b/db/docs/java/com/sleepycat/db/class-use/SequenceStats.html
index e4f4ec878..9df4a7706 100644
--- a/db/docs/java/com/sleepycat/db/class-use/SequenceStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/SequenceStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.SequenceStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.SequenceStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.SequenceStats (Sleepycat Software, Inc. - Berkele
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.SequenceStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.SequenceStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSequenceStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/SequenceStats.html" titl
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class i
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class i
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class i
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class i
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useSequenceStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="SequenceStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class i
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class i
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/StatsConfig.html b/db/docs/java/com/sleepycat/db/class-use/StatsConfig.html
index 2681c9b12..dfade837c 100644
--- a/db/docs/java/com/sleepycat/db/class-use/StatsConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/StatsConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.StatsConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.StatsConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.StatsConfig (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.StatsConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.StatsConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useStatsConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StatsConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title=
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -118,64 +121,64 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></FONT></TD>
+<TH ALIGN="left" 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/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></CODE></FONT></TD>
-<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getStats(com.sleepycat.db.StatsConfig)">getStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>[]</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheFileStats(com.sleepycat.db.StatsConfig)">getCacheFileStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return statistical information about the sequence.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's per-file memory pool (that is, the
+ buffer cache) 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/LockStats.html" title="class in com.sleepycat.db">LockStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLockStats(com.sleepycat.db.StatsConfig)">getLockStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheStats(com.sleepycat.db.StatsConfig)">getCacheStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's locking statistics.</TD>
+&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/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)">getTransactionStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLockStats(com.sleepycat.db.StatsConfig)">getLockStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's transactional statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's locking 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/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheStats(com.sleepycat.db.StatsConfig)">getCacheStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogStats(com.sleepycat.db.StatsConfig)">getLogStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's logging 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/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>[]</CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getCacheFileStats(com.sleepycat.db.StatsConfig)">getCacheFileStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)">getMutexStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's per-file memory pool (that is, the
- buffer cache) statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's mutex 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/LogStats.html" title="class in com.sleepycat.db">LogStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getLogStats(com.sleepycat.db.StatsConfig)">getLogStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)">getReplicationStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's logging statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's replication 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/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)">getReplicationStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></CODE></FONT></TD>
+<TD><CODE><B>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#getStats(com.sleepycat.db.StatsConfig)">getStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's replication statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return statistical information about the sequence.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -186,6 +189,14 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return database 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/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)">getTransactionStats</A></B>(<A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the database environment's transactional statistics.</TD>
+</TR>
</TABLE>
&nbsp;
<P>
@@ -197,7 +208,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -213,7 +224,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -222,7 +233,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useStatsConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="StatsConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -235,6 +246,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -242,6 +254,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Transaction.html b/db/docs/java/com/sleepycat/db/class-use/Transaction.html
index ade34e911..bcae82b98 100644
--- a/db/docs/java/com/sleepycat/db/class-use/Transaction.html
+++ b/db/docs/java/com/sleepycat/db/class-use/Transaction.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.Transaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.Transaction (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.Transaction (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.Transaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.Transaction (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Transaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -89,7 +92,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Transaction.html" title=
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -97,8 +100,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/Transaction.html" title=
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -106,16 +109,17 @@ Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#getTransaction()">getTransaction</A></B>()</CODE>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#abortTransaction()">abortTransaction</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>
+&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">
@@ -139,12 +143,11 @@ Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#abortTransaction()">abortTransaction</A></B>()</CODE>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#getTransaction()">getTransaction</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>
+&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>
</TABLE>
&nbsp;
@@ -152,8 +155,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -161,24 +164,24 @@ Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>PreparedTransaction.</B><B><A HREF="../../../../com/sleepycat/db/PreparedTransaction.html#getTransaction()">getTransaction</A></B>()</CODE>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;parent,
+ <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;txnConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the transaction handle for the transaction.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new transaction in 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/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;parent,
- <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;txnConfig)</CODE>
+<TD><CODE><B>PreparedTransaction.</B><B><A HREF="../../../../com/sleepycat/db/PreparedTransaction.html#getTransaction()">getTransaction</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new transaction in the database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the transaction handle for the transaction.</TD>
</TR>
</TABLE>
&nbsp;
@@ -186,17 +189,61 @@ Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TD>
+<TH ALIGN="left" 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/Transaction.html" title="class in com.sleepycat.db">Transaction</A></FONT></TH>
</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>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#get(com.sleepycat.db.Transaction, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- int&nbsp;delta)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next available element in the sequence and changes the sequence
- value by <code>delta</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Append the key/data pair to the end of the 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/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;parent,
+ <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;txnConfig)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new transaction in 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/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)">compact</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;start,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;stop,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;end,
+ <A HREF="../../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ boolean&nbsp;wait)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
+the head of the queue, and delete the record.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove key/data pairs from the database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -213,6 +260,37 @@ Uses of <A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</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>Sequence.</B><B><A HREF="../../../../com/sleepycat/db/Sequence.html#get(com.sleepycat.db.Transaction, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ int&nbsp;delta)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the next available element in the sequence and changes the sequence
+ value by <code>delta</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an estimate of the proportion of keys in the database 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
<A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;pKey,
@@ -225,12 +303,15 @@ is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
-<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
+the key and data items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -246,90 +327,92 @@ is, both the primary and secondary key items must match.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;parent,
- <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;txnConfig)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a new transaction in the database environment.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the 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/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">openDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getStats(com.sleepycat.db.Transaction, com.sleepycat.db.StatsConfig)">getStats</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;statsConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return database 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/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></CODE></FONT></TD>
-<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">openSecondaryDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
- <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;primaryDatabase,
- <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#logPrint(com.sleepycat.db.Transaction, java.lang.String)">logPrint</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;message)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append an informational message to the Berkeley DB database environment log 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#removeDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String)">removeDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Remove a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor 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>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#renameDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, java.lang.String)">renameDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;oldDatabaseName,
- <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;newDatabaseName)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Rename a database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)">openDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove key/data pairs from the database.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A></CODE></FONT></TD>
+<TD><CODE><B>SecondaryDatabase.</B><B><A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openSecondaryCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchBoth</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A></CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)">openSecondaryDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
+ <A HREF="../../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>&nbsp;primaryDatabase,
+ <A HREF="../../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair with the given key and data value, that is, both
-the key and data items must match.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a 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/Sequence.html" title="class in com.sleepycat.db">Sequence</A></CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a sequence in the database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -345,13 +428,14 @@ Store the key/data pair into the database.</TD>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">append</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Append the key/data pair to the end of the database.</TD>
+Store the key/data pair into the database if it does not already appear
+in the database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -367,34 +451,14 @@ appear in the 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/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)">putNoDupData</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#removeDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String)">removeDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Store the key/data pair into the database if it does not already appear
-in the 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/Cursor.html" title="class in com.sleepycat.db">Cursor</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)">openCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>&nbsp;cursorConfig)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a cursor into the 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/Sequence.html" title="class in com.sleepycat.db">Sequence</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)">openSequence</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>&nbsp;sequenceConfig)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a sequence in the database.</TD>
+Remove a database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -408,12 +472,15 @@ in the 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/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getStats(com.sleepycat.db.Transaction, com.sleepycat.db.StatsConfig)">getStats</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>&nbsp;statsConfig)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Environment.</B><B><A HREF="../../../../com/sleepycat/db/Environment.html#renameDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, java.lang.String)">renameDatabase</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;oldDatabaseName,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;newDatabaseName)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return database statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Rename a database.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -424,39 +491,6 @@ in the database.</TD>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Empty 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)">consume</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- boolean&nbsp;wait)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the record number and data from the available record closest to
-the head of the queue, and delete the record.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)">getKeyRange</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an estimate of the proportion of keys in the database 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;<A HREF="../../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></CODE></FONT></TD>
-<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)">getSearchRecordNumber</A></B>(<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>&nbsp;txn,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;key,
- <A HREF="../../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>&nbsp;data,
- <A HREF="../../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>&nbsp;lockMode)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves the key/data pair associated with the specific numbered record of the database.</TD>
-</TR>
</TABLE>
&nbsp;
<P>
@@ -468,7 +502,7 @@ the head of the queue, and delete the record.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -484,7 +518,7 @@ the head of the queue, and delete the record.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -493,7 +527,7 @@ the head of the queue, and delete the record.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransaction.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="Transaction.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -506,6 +540,7 @@ the head of the queue, and delete the record.</TD>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -513,6 +548,6 @@ the head of the queue, and delete the record.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/TransactionConfig.html b/db/docs/java/com/sleepycat/db/class-use/TransactionConfig.html
index 8a6c33780..385a27fb3 100644
--- a/db/docs/java/com/sleepycat/db/class-use/TransactionConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/TransactionConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.TransactionConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.TransactionConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.TransactionConfig (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.TransactionConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.TransactionConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransactionConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.collections"><B>com.sleepycat.collections</B></A></TD>
@@ -89,7 +92,7 @@ Packages that use <A HREF="../../../../com/sleepycat/db/TransactionConfig.html"
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -97,8 +100,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/TransactionConfig.html"
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A> in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -106,7 +109,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> that return <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,25 +126,25 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TH>
</TR>
<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/collections/TransactionRunner.html#setTransactionConfig(com.sleepycat.db.TransactionConfig)">setTransactionConfig</A></B>(<A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#beginTransaction(com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;config)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the transaction configuration used for calling
- <A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>.</TD>
+&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/Transaction.html" title="class in com.sleepycat.db">Transaction</A></CODE></FONT></TD>
-<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/collections/CurrentTransaction.html#beginTransaction(com.sleepycat.db.TransactionConfig)">beginTransaction</A></B>(<A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;config)</CODE>
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TransactionRunner.</B><B><A HREF="../../../../com/sleepycat/collections/TransactionRunner.html#setTransactionConfig(com.sleepycat.db.TransactionConfig)">setTransactionConfig</A></B>(<A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>&nbsp;config)</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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the transaction configuration used for calling
+ <A HREF="../../../../com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -149,7 +152,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A> with parameters of type <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment, int, com.sleepycat.db.TransactionConfig)">TransactionRunner</A></B>(<A HREF="../../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>&nbsp;env,
@@ -166,8 +169,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -175,7 +178,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -183,7 +186,8 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<TD><CODE><B>TransactionConfig.</B><B><A HREF="../../../../com/sleepycat/db/TransactionConfig.html#DEFAULT">DEFAULT</A></B></CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to methods that create a
+ transaction.</TD>
</TR>
</TABLE>
&nbsp;
@@ -191,7 +195,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TD>
+<TH ALIGN="left" 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/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -213,7 +217,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -229,7 +233,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -238,7 +242,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransactionConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -251,6 +255,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -258,6 +263,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionConfig.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/TransactionStats.Active.html b/db/docs/java/com/sleepycat/db/class-use/TransactionStats.Active.html
index f6a69067c..921179506 100644
--- a/db/docs/java/com/sleepycat/db/class-use/TransactionStats.Active.html
+++ b/db/docs/java/com/sleepycat/db/class-use/TransactionStats.Active.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.TransactionStats.Active (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.TransactionStats.Active (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.TransactionStats.Active (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.TransactionStats.Active (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.TransactionStats.Active (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransactionStats.Active.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.Active.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" titl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" titl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" titl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" titl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransactionStats.Active.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.Active.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" titl
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.Active.html" titl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/TransactionStats.html b/db/docs/java/com/sleepycat/db/class-use/TransactionStats.html
index 613b80d75..2af2213ed 100644
--- a/db/docs/java/com/sleepycat/db/class-use/TransactionStats.html
+++ b/db/docs/java/com/sleepycat/db/class-use/TransactionStats.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.TransactionStats (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.TransactionStats (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.TransactionStats (Sleepycat Software, Inc. - Berk
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.TransactionStats (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.TransactionStats (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransactionStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/TransactionStats.html" t
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="clas
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="clas
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="clas
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="clas
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useTransactionStats.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="TransactionStats.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="clas
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/TransactionStats.html" title="clas
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/UpdateConflictException.html b/db/docs/java/com/sleepycat/db/class-use/UpdateConflictException.html
new file mode 100644
index 000000000..425fb84d4
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/UpdateConflictException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.UpdateConflictException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.UpdateConflictException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/UpdateConflictException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useUpdateConflictException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UpdateConflictException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.UpdateConflictException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.UpdateConflictException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/UpdateConflictException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useUpdateConflictException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UpdateConflictException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/VerifyConfig.html b/db/docs/java/com/sleepycat/db/class-use/VerifyConfig.html
index 7a220cfb0..0f2ebaad9 100644
--- a/db/docs/java/com/sleepycat/db/class-use/VerifyConfig.html
+++ b/db/docs/java/com/sleepycat/db/class-use/VerifyConfig.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.db.VerifyConfig (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.db.VerifyConfig (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.db.VerifyConfig (Sleepycat Software, Inc. - Berkeley
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.db.VerifyConfig (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.db.VerifyConfig (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useVerifyConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="VerifyConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,13 +82,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -93,8 +96,8 @@ Packages that use <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -102,7 +105,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -111,7 +114,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default configuration used if null is passed to
- <A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A>.</TD>
+ <A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A>.</TD>
</TR>
</TABLE>
&nbsp;
@@ -119,15 +122,16 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></FONT></TD>
+<TH ALIGN="left" 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/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></FONT></TH>
</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>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Database.</B><B><A HREF="../../../../com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;fileName,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;databaseName,
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html" title="class or interface in java.io">PrintStream</A>&nbsp;dumpStream,
- <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;config)</CODE>
+ <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>&nbsp;verifyConfig,
+ <A HREF="../../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>&nbsp;dbConfig)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return if all of the databases in a file are uncorrupted.</TD>
@@ -143,7 +147,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -159,7 +163,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -168,7 +172,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useVerifyConfig.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="VerifyConfig.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -181,6 +185,7 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -188,6 +193,6 @@ Uses of <A HREF="../../../../com/sleepycat/db/VerifyConfig.html" title="class in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/VersionMismatchException.html b/db/docs/java/com/sleepycat/db/class-use/VersionMismatchException.html
new file mode 100644
index 000000000..cc6c02079
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/VersionMismatchException.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.db.VersionMismatchException (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.db.VersionMismatchException (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/VersionMismatchException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useVersionMismatchException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VersionMismatchException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.VersionMismatchException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.VersionMismatchException
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/VersionMismatchException.html" title="class in com.sleepycat.db"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/db//class-useVersionMismatchException.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="VersionMismatchException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - 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
index c0221f8c6..2059a0d87 100644
--- a/db/docs/java/com/sleepycat/db/package-frame.html
+++ b/db/docs/java/com/sleepycat/db/package-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.db (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db package">
@@ -27,6 +27,8 @@ Interfaces</FONT>&nbsp;
<BR>
<A HREF="ErrorHandler.html" title="interface in com.sleepycat.db" target="classFrame"><I>ErrorHandler</I></A>
<BR>
+<A HREF="EventHandler.html" title="interface in com.sleepycat.db" target="classFrame"><I>EventHandler</I></A>
+<BR>
<A HREF="FeedbackHandler.html" title="interface in com.sleepycat.db" target="classFrame"><I>FeedbackHandler</I></A>
<BR>
<A HREF="Hasher.html" title="interface in com.sleepycat.db" target="classFrame"><I>Hasher</I></A>
@@ -64,6 +66,10 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="CheckpointConfig.html" title="class in com.sleepycat.db" target="classFrame">CheckpointConfig</A>
<BR>
+<A HREF="CompactConfig.html" title="class in com.sleepycat.db" target="classFrame">CompactConfig</A>
+<BR>
+<A HREF="CompactStats.html" title="class in com.sleepycat.db" target="classFrame">CompactStats</A>
+<BR>
<A HREF="Cursor.html" title="class in com.sleepycat.db" target="classFrame">Cursor</A>
<BR>
<A HREF="CursorConfig.html" title="class in com.sleepycat.db" target="classFrame">CursorConfig</A>
@@ -82,6 +88,8 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="EnvironmentConfig.html" title="class in com.sleepycat.db" target="classFrame">EnvironmentConfig</A>
<BR>
+<A HREF="EventType.html" title="class in com.sleepycat.db" target="classFrame">EventType</A>
+<BR>
<A HREF="HashStats.html" title="class in com.sleepycat.db" target="classFrame">HashStats</A>
<BR>
<A HREF="JoinConfig.html" title="class in com.sleepycat.db" target="classFrame">JoinConfig</A>
@@ -116,8 +124,16 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="MultipleKeyDataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleKeyDataEntry</A>
<BR>
+<A HREF="MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleKeyNIODataEntry</A>
+<BR>
+<A HREF="MultipleNIODataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleNIODataEntry</A>
+<BR>
<A HREF="MultipleRecnoDataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleRecnoDataEntry</A>
<BR>
+<A HREF="MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db" target="classFrame">MultipleRecnoNIODataEntry</A>
+<BR>
+<A HREF="MutexStats.html" title="class in com.sleepycat.db" target="classFrame">MutexStats</A>
+<BR>
<A HREF="OperationStatus.html" title="class in com.sleepycat.db" target="classFrame">OperationStatus</A>
<BR>
<A HREF="PreparedTransaction.html" title="class in com.sleepycat.db" target="classFrame">PreparedTransaction</A>
@@ -126,10 +142,20 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="RecoveryOperation.html" title="class in com.sleepycat.db" target="classFrame">RecoveryOperation</A>
<BR>
+<A HREF="ReplicationConfig.html" title="class in com.sleepycat.db" target="classFrame">ReplicationConfig</A>
+<BR>
+<A HREF="ReplicationHostAddress.html" title="class in com.sleepycat.db" target="classFrame">ReplicationHostAddress</A>
+<BR>
+<A HREF="ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db" target="classFrame">ReplicationManagerAckPolicy</A>
+<BR>
+<A HREF="ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db" target="classFrame">ReplicationManagerStartPolicy</A>
+<BR>
<A HREF="ReplicationStats.html" title="class in com.sleepycat.db" target="classFrame">ReplicationStats</A>
<BR>
<A HREF="ReplicationStatus.html" title="class in com.sleepycat.db" target="classFrame">ReplicationStatus</A>
<BR>
+<A HREF="ReplicationTimeoutType.html" title="class in com.sleepycat.db" target="classFrame">ReplicationTimeoutType</A>
+<BR>
<A HREF="SecondaryConfig.html" title="class in com.sleepycat.db" target="classFrame">SecondaryConfig</A>
<BR>
<A HREF="SecondaryCursor.html" title="class in com.sleepycat.db" target="classFrame">SecondaryCursor</A>
@@ -150,6 +176,8 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="TransactionStats.html" title="class in com.sleepycat.db" target="classFrame">TransactionStats</A>
<BR>
+<A HREF="TransactionStats.Active.html" title="class in com.sleepycat.db" target="classFrame">TransactionStats.Active</A>
+<BR>
<A HREF="VerifyConfig.html" title="class in com.sleepycat.db" target="classFrame">VerifyConfig</A></FONT></TD>
</TR>
</TABLE>
@@ -169,9 +197,23 @@ Exceptions</FONT>&nbsp;
<BR>
<A HREF="MemoryException.html" title="class in com.sleepycat.db" target="classFrame">MemoryException</A>
<BR>
+<A HREF="ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationDuplicateMasterException</A>
+<BR>
<A HREF="ReplicationHandleDeadException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationHandleDeadException</A>
<BR>
-<A HREF="RunRecoveryException.html" title="class in com.sleepycat.db" target="classFrame">RunRecoveryException</A></FONT></TD>
+<A HREF="ReplicationHoldElectionException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationHoldElectionException</A>
+<BR>
+<A HREF="ReplicationJoinFailureException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationJoinFailureException</A>
+<BR>
+<A HREF="ReplicationLockoutException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationLockoutException</A>
+<BR>
+<A HREF="ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db" target="classFrame">ReplicationSiteUnavailableException</A>
+<BR>
+<A HREF="RunRecoveryException.html" title="class in com.sleepycat.db" target="classFrame">RunRecoveryException</A>
+<BR>
+<A HREF="UpdateConflictException.html" title="class in com.sleepycat.db" target="classFrame">UpdateConflictException</A>
+<BR>
+<A HREF="VersionMismatchException.html" title="class in com.sleepycat.db" target="classFrame">VersionMismatchException</A></FONT></TD>
</TR>
</TABLE>
diff --git a/db/docs/java/com/sleepycat/db/package-summary.html b/db/docs/java/com/sleepycat/db/package-summary.html
index 5d9770c65..9d74eca31 100644
--- a/db/docs/java/com/sleepycat/db/package-summary.html
+++ b/db/docs/java/com/sleepycat/db/package-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.db (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.db package">
@@ -14,9 +14,11 @@ com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.db (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/db/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -77,7 +80,7 @@ function windowTitle()
Package com.sleepycat.db
</H2>
Berkeley DB Java API<br>
-<a href="../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.
+<a href="../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.
<P>
<B>See:</B>
<BR>
@@ -86,8 +89,8 @@ Berkeley DB Java API<br>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A></B></TD>
@@ -99,6 +102,11 @@ Berkeley DB Java API<br>
occurs in the Berkeley DB library.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A></B></TD>
+<TD>An interface specifying a callback function to be called when an event
+is sent from the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A></B></TD>
<TD>An interface specifying a function to be called to provide feedback.</TD>
</TR>
@@ -132,8 +140,8 @@ information to other members of the replication group.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A></B></TD>
-<TD>An interface specifying how secondary keys for a
-<code>SecondaryDatabase</code> are created.</TD>
+<TD>The interface implemented for extracting single-valued secondary keys from
+primary records.</TD>
</TR>
</TABLE>
&nbsp;
@@ -142,8 +150,8 @@ information to other members of the replication group.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A></B></TD>
@@ -172,6 +180,14 @@ a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepyca
<TD>Specifies the attributes of an application invoked checkpoint operation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A></B></TD>
+<TD>Configuration for <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A></B></TD>
+<TD>Statistics returned by a <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A></B></TD>
<TD>A database cursor.</TD>
</TR>
@@ -208,6 +224,10 @@ a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepyca
<TD>Specifies the attributes of an environment.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A></B></TD>
+<TD>Event types.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A></B></TD>
<TD>The HashStats object is used to return Hash database statistics.</TD>
</TR>
@@ -284,11 +304,31 @@ returned by a single <A HREF="../../../com/sleepycat/db/Cursor.html" title="clas
<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A></B></TD>
+<TD>A DatabaseEntry that holds multiple key/data pairs returned by a single
+<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A></B></TD>
+<TD>A DatabaseEntry that holds multiple data items returned by a single
+<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A></B></TD>
<TD>A DatabaseEntry that holds multiple record number/data pairs returned by a
single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A></B></TD>
+<TD>A DatabaseEntry that holds multiple record number/data pairs returned by a
+single <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A></B></TD>
+<TD>Statistics about mutexes in a Berkeley DB database environment, returned
+by <A HREF="../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)"><CODE>Environment.getMutexStats(com.sleepycat.db.StatsConfig)</CODE></A></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A></B></TD>
<TD>Status values from database operations.</TD>
</TR>
@@ -306,6 +346,27 @@ but not yet resolved, transaction.</TD>
<TD>The recovery operation being performed when <A HREF="../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><CODE>LogRecordHandler.handleLogRecord</CODE></A> is called.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A></B></TD>
+<TD>Settings that configure Berkeley DB replication.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A></B></TD>
+<TD>A simple wrapper class to hold information needed to define
+a host in a replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A></B></TD>
+<TD>A class that provides definitions for the types of network ack policy
+to use when transmitting messages between replication sites using the
+Replication Manager.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A></B></TD>
+<TD>This class provides definitions of the various start policies that
+can be specified when starting a replication client using the
+<A HREF="../../../com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)"><CODE>Environment.replicationManagerStart</CODE></A> call.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A></B></TD>
<TD>Replication statistics for a database environment.</TD>
</TR>
@@ -314,6 +375,11 @@ but not yet resolved, transaction.</TD>
<TD>The return status from processing a replication message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A></B></TD>
+<TD>The ReplicationTimeoutType defines the types of timeouts that can be
+configured for the Berkeley Db replication functionality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A></B></TD>
<TD>The configuration properties of a <code>SecondaryDatabase</code> extend
those of a primary <code>Database</code>.</TD>
@@ -336,7 +402,7 @@ those of a primary <code>Database</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A></B></TD>
-<TD>A SequenceStats object is used to return sequenece statistics.</TD>
+<TD>A SequenceStats object is used to return sequence statistics.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A></B></TD>
@@ -355,6 +421,10 @@ those of a primary <code>Database</code>.</TD>
<TD>Transaction statistics for a database environment.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A></B></TD>
+<TD>The Active class represents an active transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A></B></TD>
<TD>Specifies the attributes of a verification operation.</TD>
</TR>
@@ -365,8 +435,8 @@ those of a primary <code>Database</code>.</TD>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Exception Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A></B></TD>
@@ -394,14 +464,48 @@ passed to a <A HREF="../../../com/sleepycat/db/Database.html" title="class in co
enough to hold a value being returned.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db">ReplicationDuplicateMasterException</A></B></TD>
+<TD>The replication group has more than one master.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">ReplicationHandleDeadException</A></B></TD>
<TD>Thrown when a database handle has been invalidated because a replication
election unrolled a committed transaction.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db">ReplicationHoldElectionException</A></B></TD>
+<TD>An election is needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db">ReplicationJoinFailureException</A></B></TD>
+<TD>Thrown if a new master has been chosen but the client is unable to synchronize
+with the new master (possibly because the client has been configured
+with the <A HREF="../../../com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT"><CODE>ReplicationConfig.NOAUTOINIT</CODE></A> setting to turn-off automatic
+internal initialization).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db">ReplicationLockoutException</A></B></TD>
+<TD>Thrown when an operation was blocked by client/master synchronization.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db">ReplicationSiteUnavailableException</A></B></TD>
+<TD>Thrown if replication group was unable to elect a master, or was unable to
+complete the election in the specified timeout period.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">RunRecoveryException</A></B></TD>
<TD>Thrown when the database environment needs to be recovered.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db">UpdateConflictException</A></B></TD>
+<TD>Thrown when a snapshot transaction attempts to update data
+which was modified after the snapshot transaction read it.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db">VersionMismatchException</A></B></TD>
+<TD>Thrown if the version of the Berkeley DB library doesn't match the version that created
+the database environment.</TD>
+</TR>
</TABLE>
&nbsp;
@@ -412,7 +516,7 @@ Package com.sleepycat.db Description
<P>
Berkeley DB Java API<br>
-<a href="../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.
+<a href="../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.
<p>
This package is a wrapper around the Berkeley DB library. It uses JNI
to provide access to Berkeley DB, which is implemented in C. That means
@@ -426,6 +530,8 @@ target="_top">Berkeley DB Supporting Utilities</a>.
<P>
<P>
+<DL>
+</DL>
<HR>
@@ -434,7 +540,7 @@ target="_top">Berkeley DB Supporting Utilities</a>.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -450,7 +556,7 @@ target="_top">Berkeley DB Supporting Utilities</a>.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -459,7 +565,7 @@ target="_top">Berkeley DB Supporting Utilities</a>.
&nbsp;<A HREF="../../../com/sleepycat/collections/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/db/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -472,6 +578,7 @@ target="_top">Berkeley DB Supporting Utilities</a>.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -479,6 +586,6 @@ target="_top">Berkeley DB Supporting Utilities</a>.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - 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
index cf42c821d..957db0eaf 100644
--- a/db/docs/java/com/sleepycat/db/package-tree.html
+++ b/db/docs/java/com/sleepycat/db/package-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.db Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.db Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ com.sleepycat.db Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java AP
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.db Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.db Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/collections/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/db/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,41 +87,44 @@ Hierarchy For Package com.sleepycat.db
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" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>CacheFile</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>CacheFilePriority</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>CacheFileStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>CacheStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>CheckpointConfig</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>Cursor</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>SecondaryCursor</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>CursorConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>Database</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>SecondaryDatabase</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>DatabaseConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>CacheFile</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>CacheFilePriority</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>CacheFileStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>CacheStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>CheckpointConfig</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><B>CompactConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>CompactStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>Cursor</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>SecondaryCursor</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>CursorConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>Database</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>SecondaryDatabase</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>DatabaseConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>SecondaryConfig</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>DatabaseEntry</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>MultipleEntry</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>MultipleDataEntry</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyDataEntry</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoDataEntry</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>SecondaryConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>DatabaseStats</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>BtreeStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>HashStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>QueueStats</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>DatabaseType</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>Environment</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>EnvironmentConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>JoinConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>JoinCursor</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>KeyRange</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>Lock</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>LockDetectMode</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>LockMode</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>LockOperation</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>LockRequest</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>LockRequestMode</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>LockStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>LogCursor</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>LogSequenceNumber</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>LogStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>OperationStatus</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PreparedTransaction</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>RecoveryOperation</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>ReplicationStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>ReplicationStatus</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>Sequence</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>SequenceConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>SequenceStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>StatsConfig</B></A><LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>DatabaseEntry</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>MultipleEntry</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>MultipleDataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyDataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyNIODataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleNIODataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoDataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoNIODataEntry</B></A></UL>
+</UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>DatabaseStats</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>BtreeStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>HashStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>QueueStats</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>DatabaseType</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>Environment</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>EnvironmentConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>EventType</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>JoinConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>JoinCursor</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>KeyRange</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>Lock</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>LockDetectMode</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>LockMode</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>LockOperation</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>LockRequest</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>LockRequestMode</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>LockStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>LogCursor</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>LogSequenceNumber</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>LogStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>MutexStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>OperationStatus</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PreparedTransaction</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>RecoveryOperation</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><B>ReplicationConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>ReplicationHostAddress</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>ReplicationManagerAckPolicy</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>ReplicationManagerStartPolicy</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>ReplicationStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>ReplicationStatus</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><B>ReplicationTimeoutType</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>Sequence</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>SequenceConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>SequenceStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>StatsConfig</B></A><LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>)
<UL>
-<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang"><B>Exception</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>DatabaseException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>DeadlockException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>LockNotGrantedException</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>MemoryException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>ReplicationHandleDeadException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>RunRecoveryException</B></A></UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang"><B>Exception</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>DatabaseException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>DeadlockException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>LockNotGrantedException</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>MemoryException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>ReplicationDuplicateMasterException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>ReplicationHandleDeadException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><B>ReplicationHoldElectionException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>ReplicationJoinFailureException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>ReplicationLockoutException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>ReplicationSiteUnavailableException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>RunRecoveryException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><B>UpdateConflictException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db"><B>VersionMismatchException</B></A></UL>
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>Transaction</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>TransactionConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><B>TransactionStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>TransactionStats.Active</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>VerifyConfig</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>Transaction</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>TransactionConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><B>TransactionStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>TransactionStats.Active</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>VerifyConfig</B></A></UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>BtreePrefixCalculator</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>ErrorHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>FeedbackHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>Hasher</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>LogRecordHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>MessageHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PanicHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>RecordNumberAppender</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>ReplicationTransport</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>SecondaryKeyCreator</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>BtreePrefixCalculator</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>ErrorHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><B>EventHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>FeedbackHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>Hasher</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>LogRecordHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>MessageHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PanicHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>RecordNumberAppender</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>ReplicationTransport</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="../../../com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>SecondaryKeyCreator</B></A></UL>
<HR>
@@ -127,7 +133,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -143,7 +149,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -152,7 +158,7 @@ Interface Hierarchy
&nbsp;<A HREF="../../../com/sleepycat/collections/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/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;
+ <A HREF="../../../index.html?com/sleepycat/db/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -165,6 +171,7 @@ Interface Hierarchy
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -172,6 +179,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - 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
index c686fac51..2c00afa84 100644
--- a/db/docs/java/com/sleepycat/db/package-use.html
+++ b/db/docs/java/com/sleepycat/db/package-use.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Package com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Package com.sleepycat.db (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Package com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java AP
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Package com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Package com.sleepycat.db (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/db/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind"><B>com.sleepycat.bind</B></A></TD>
@@ -101,7 +104,7 @@ Packages that use <A HREF="../../../com/sleepycat/db/package-summary.html">com.s
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
<TD>Berkeley DB Java API<br>
-<a href="../../../%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="../../../%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.&nbsp;</TD>
+<a href="../../../../ref/toc.html" target="_top">[reference guide]</a> <a href="../../../../ref/java/program.html" target="_top">[Java programming notes]</a>.&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
@@ -109,8 +112,8 @@ Packages that use <A HREF="../../../com/sleepycat/db/package-summary.html">com.s
<A NAME="com.sleepycat.bind"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/bind/package-summary.html">com.sleepycat.bind</A></FONT></TD>
+<TH ALIGN="left" 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/bind/package-summary.html">com.sleepycat.bind</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/DatabaseEntry.html#com.sleepycat.bind"><B>DatabaseEntry</B></A></B>
@@ -124,8 +127,8 @@ Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepyca
<A NAME="com.sleepycat.bind.serial"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TD>
+<TH ALIGN="left" 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/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/Database.html#com.sleepycat.bind.serial"><B>Database</B></A></B>
@@ -155,8 +158,8 @@ Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepyca
<TD><B><A HREF="../../../com/sleepycat/db/class-use/SecondaryKeyCreator.html#com.sleepycat.bind.serial"><B>SecondaryKeyCreator</B></A></B>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying how secondary keys for a
-<code>SecondaryDatabase</code> are created.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented for extracting single-valued secondary keys from
+primary records.</TD>
</TR>
</TABLE>
&nbsp;
@@ -164,8 +167,8 @@ Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepyca
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" 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/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/DatabaseEntry.html#com.sleepycat.bind.tuple"><B>DatabaseEntry</B></A></B>
@@ -189,8 +192,8 @@ Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepyca
<TD><B><A HREF="../../../com/sleepycat/db/class-use/SecondaryKeyCreator.html#com.sleepycat.bind.tuple"><B>SecondaryKeyCreator</B></A></B>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying how secondary keys for a
-<code>SecondaryDatabase</code> are created.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented for extracting single-valued secondary keys from
+primary records.</TD>
</TR>
</TABLE>
&nbsp;
@@ -198,8 +201,14 @@ Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepyca
<A NAME="com.sleepycat.collections"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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/collections/package-summary.html">com.sleepycat.collections</A></FONT></TD>
+<TH ALIGN="left" 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/collections/package-summary.html">com.sleepycat.collections</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/CursorConfig.html#com.sleepycat.collections"><B>CursorConfig</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify the attributes of database cursor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/Database.html#com.sleepycat.collections"><B>Database</B></A></B>
@@ -249,8 +258,8 @@ Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepyca
<A NAME="com.sleepycat.db"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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></FONT></TD>
+<TH ALIGN="left" 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></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/BtreePrefixCalculator.html#com.sleepycat.db"><B>BtreePrefixCalculator</B></A></B>
@@ -290,6 +299,18 @@ a <A HREF="../../../com/sleepycat/db/Database.html" title="class in com.sleepyca
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the attributes of an application invoked checkpoint operation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/CompactConfig.html#com.sleepycat.db"><B>CompactConfig</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration for <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/CompactStats.html#com.sleepycat.db"><B>CompactStats</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statistics returned by a <A HREF="../../../com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/Cursor.html#com.sleepycat.db"><B>Cursor</B></A></B>
<BR>
@@ -367,6 +388,19 @@ configured to not wait for locks.</TD>
occurs in the Berkeley DB library.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/EventHandler.html#com.sleepycat.db"><B>EventHandler</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a callback function to be called when an event
+is sent from the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/EventType.html#com.sleepycat.db"><B>EventType</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event types.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/FeedbackHandler.html#com.sleepycat.db"><B>FeedbackHandler</B></A></B>
<BR>
@@ -482,6 +516,13 @@ informational messages.</TD>
returned by a single <A HREF="../../../com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get method.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/MutexStats.html#com.sleepycat.db"><B>MutexStats</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statistics about mutexes in a Berkeley DB database environment, returned
+by <A HREF="../../../com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)"><CODE>Environment.getMutexStats(com.sleepycat.db.StatsConfig)</CODE></A></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/OperationStatus.html#com.sleepycat.db"><B>OperationStatus</B></A></B>
<BR>
@@ -515,6 +556,35 @@ based on a generated key.</TD>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The recovery operation being performed when <A HREF="../../../com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><CODE>LogRecordHandler.handleLogRecord</CODE></A> is called.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationConfig.html#com.sleepycat.db"><B>ReplicationConfig</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings that configure Berkeley DB replication.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationHostAddress.html#com.sleepycat.db"><B>ReplicationHostAddress</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A simple wrapper class to hold information needed to define
+a host in a replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationManagerAckPolicy.html#com.sleepycat.db"><B>ReplicationManagerAckPolicy</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that provides definitions for the types of network ack policy
+to use when transmitting messages between replication sites using the
+Replication Manager.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationManagerStartPolicy.html#com.sleepycat.db"><B>ReplicationManagerStartPolicy</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class provides definitions of the various start policies that
+can be specified when starting a replication client using the
+<A HREF="../../../com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)"><CODE>Environment.replicationManagerStart</CODE></A> call.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationStats.html#com.sleepycat.db"><B>ReplicationStats</B></A></B>
<BR>
@@ -527,6 +597,13 @@ based on a generated key.</TD>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The return status from processing a replication message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationTimeoutType.html#com.sleepycat.db"><B>ReplicationTimeoutType</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The ReplicationTimeoutType defines the types of timeouts that can be
+configured for the Berkeley Db replication functionality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/ReplicationTransport.html#com.sleepycat.db"><B>ReplicationTransport</B></A></B>
<BR>
@@ -556,8 +633,8 @@ those of a primary <code>Database</code>.</TD>
<TD><B><A HREF="../../../com/sleepycat/db/class-use/SecondaryKeyCreator.html#com.sleepycat.db"><B>SecondaryKeyCreator</B></A></B>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying how secondary keys for a
-<code>SecondaryDatabase</code> are created.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented for extracting single-valued secondary keys from
+primary records.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/Sequence.html#com.sleepycat.db"><B>Sequence</B></A></B>
@@ -575,7 +652,7 @@ those of a primary <code>Database</code>.</TD>
<TD><B><A HREF="../../../com/sleepycat/db/class-use/SequenceStats.html#com.sleepycat.db"><B>SequenceStats</B></A></B>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A SequenceStats object is used to return sequenece statistics.</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A SequenceStats object is used to return sequence statistics.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/db/class-use/StatsConfig.html#com.sleepycat.db"><B>StatsConfig</B></A></B>
@@ -624,7 +701,7 @@ those of a primary <code>Database</code>.</TD>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -640,7 +717,7 @@ those of a primary <code>Database</code>.</TD>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -649,7 +726,7 @@ those of a primary <code>Database</code>.</TD>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/db/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -662,6 +739,7 @@ those of a primary <code>Database</code>.</TD>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -669,6 +747,6 @@ those of a primary <code>Database</code>.</TD>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/ExceptionUnwrapper.html b/db/docs/java/com/sleepycat/util/ExceptionUnwrapper.html
index 850883ca1..7e0da0000 100644
--- a/db/docs/java/com/sleepycat/util/ExceptionUnwrapper.html
+++ b/db/docs/java/com/sleepycat/util/ExceptionUnwrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+ExceptionUnwrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.ExceptionUnwrapper class">
@@ -14,9 +14,11 @@ ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ExceptionUnwrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/ExceptionUnwrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionUnwrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,35 +90,31 @@ com.sleepycat.util</FONT>
Class ExceptionUnwrapper</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.util.ExceptionUnwrapper</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.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" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>ExceptionUnwrapper</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
-Unwraps nested exceptions by calling the <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getDetail()"><CODE>ExceptionWrapper.getDetail()</CODE></A> method for exceptions that implement the
+Unwraps nested exceptions by calling the <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>ExceptionWrapper.getCause()</CODE></A> method for exceptions that implement the
<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><CODE>ExceptionWrapper</CODE></A> interface. Does not currently support the Java 1.4
- <code>Throwable.getDetail()</code> method.
+ <code>Throwable.getCause()</code> method.
<P>
<P>
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html#ExceptionUnwrapper()">ExceptionUnwrapper</A></B>()</CODE>
@@ -130,8 +129,8 @@ Unwraps nested exceptions by calling the <A HREF="../../../com/sleepycat/util/Ex
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -154,25 +153,22 @@ Unwraps nested exceptions by calling the <A HREF="../../../com/sleepycat/util/Ex
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -188,8 +184,8 @@ public <B>ExceptionUnwrapper</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -233,7 +229,7 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -249,16 +245,16 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/ExceptionUnwrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionUnwrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -271,6 +267,7 @@ public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -284,6 +281,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/ExceptionWrapper.html b/db/docs/java/com/sleepycat/util/ExceptionWrapper.html
index 0c65860d1..1e795463f 100644
--- a/db/docs/java/com/sleepycat/util/ExceptionWrapper.html
+++ b/db/docs/java/com/sleepycat/util/ExceptionWrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+ExceptionWrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.ExceptionWrapper interface">
@@ -14,9 +14,11 @@ ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="ExceptionWrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/ExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -90,7 +93,8 @@ Interface ExceptionWrapper</H2>
</DL>
<HR>
<DL>
-<DT>public interface <B>ExceptionWrapper</B></DL>
+<DT><PRE>public interface <B>ExceptionWrapper</B></DL>
+</PRE>
<P>
Interface implemented by exceptions that can contain nested exceptions.
@@ -100,56 +104,52 @@ Interface implemented by exceptions that can contain nested exceptions.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</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" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()">getCause</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>
+<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" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>getCause()</CODE></A>.</I></TD>
+</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</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" title="class or interface in java.lang">Throwable</A> <B>getDetail</B>()</PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A> <B>getDetail</B>()</PRE>
<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>getCause()</CODE></A>.</I>
+<P>
<DD>Returns the nested exception or null if none is present.
<P>
<DD><DL>
@@ -157,6 +157,25 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<DT><B>Returns:</B><DD>the nested exception or null if none is present.</DL>
</DD>
</DL>
+<HR>
+
+<A NAME="getCause()"><!-- --></A><H3>
+getCause</H3>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A> <B>getCause</B>()</PRE>
+<DL>
+<DD>Returns the nested exception or null if none is present.
+
+ <p>This method is intentionally defined to be the same signature as the
+ <code>java.lang.Throwable.getCause</code> method in Java 1.4 and
+ greater. By defining this method to return a nested exception, the Java
+ 1.4 runtime will print the nested stack trace.</p>
+<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>
@@ -166,7 +185,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -182,16 +201,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/ExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -204,6 +223,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -217,6 +237,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHO
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/FastInputStream.html b/db/docs/java/com/sleepycat/util/FastInputStream.html
index fe1623004..9cdbf3993 100644
--- a/db/docs/java/com/sleepycat/util/FastInputStream.html
+++ b/db/docs/java/com/sleepycat/util/FastInputStream.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+FastInputStream (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.FastInputStream class">
@@ -14,9 +14,11 @@ FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="FastInputStream (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/FastInputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastInputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,13 +68,14 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_top"></A>
@@ -87,15 +90,19 @@ com.sleepycat.util</FONT>
Class FastInputStream</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">java.io.InputStream</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.util.FastInputStream</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">java.io.InputStream</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.util.FastInputStream</B>
</PRE>
<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A></DD>
+</DL>
+<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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" title="class or interface in java.io">InputStream</A></DL>
+<DT><PRE>public class <B>FastInputStream</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></DL>
+</PRE>
<P>
A replacement for ByteArrayInputStream that does not synchronize every
@@ -112,19 +119,55 @@ A replacement for ByteArrayInputStream that does not synchronize every
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- =========== FIELD SUMMARY =========== -->
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#buf">buf</A></B></CODE>
-<!-- =========== FIELD SUMMARY =========== -->
+<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>protected &nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#len">len</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>protected &nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#mark">mark</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>protected &nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#off">off</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#FastInputStream(byte[])">FastInputStream</A></B>(byte[]&nbsp;buffer)</CODE>
@@ -147,8 +190,8 @@ A replacement for ByteArrayInputStream that does not synchronize every
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -185,7 +228,7 @@ A replacement for ByteArrayInputStream that does not synchronize every
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#mark(int)">mark</A></B>(int&nbsp;pos)</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastInputStream.html#mark(int)">mark</A></B>(int&nbsp;readLimit)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
@@ -269,11 +312,21 @@ A replacement for ByteArrayInputStream that does not synchronize every
<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/util/FastInputStream.html#skipFast(int)">skipFast</A></B>(int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to <code>skip()<code> but takes an int parameter instead of a
+ long, and does not check whether the count given is larger than the
+ number of remaining bytes.</TD>
+</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.io.InputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">InputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#close()" title="class or interface in java.io">close</A></CODE></TD>
@@ -282,10 +335,10 @@ A replacement for ByteArrayInputStream that does not synchronize every
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -293,14 +346,60 @@ A replacement for ByteArrayInputStream that does not synchronize every
<!-- ============ FIELD DETAIL =========== -->
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="len"><!-- --></A><H3>
+len</H3>
+<PRE>
+protected int <B>len</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="off"><!-- --></A><H3>
+off</H3>
+<PRE>
+protected int <B>off</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="mark"><!-- --></A><H3>
+mark</H3>
+<PRE>
+protected int <B>mark</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="buf"><!-- --></A><H3>
+buf</H3>
+<PRE>
+protected byte[] <B>buf</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -311,7 +410,9 @@ public <B>FastInputStream</B>(byte[]&nbsp;buffer)</PRE>
<DL>
<DD>Creates an input stream.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the data to read.</DL>
+</DL>
<HR>
<A NAME="FastInputStream(byte[], int, int)"><!-- --></A><H3>
@@ -323,15 +424,17 @@ public <B>FastInputStream</B>(byte[]&nbsp;buffer,
<DL>
<DD>Creates an input stream.
<P>
+<DL>
<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>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -341,6 +444,9 @@ available</H3>
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()" title="class or interface in java.io">available</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -352,6 +458,9 @@ markSupported</H3>
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()" title="class or interface in java.io">markSupported</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -360,9 +469,12 @@ public boolean <B>markSupported</B>()</PRE>
<A NAME="mark(int)"><!-- --></A><H3>
mark</H3>
<PRE>
-public void <B>mark</B>(int&nbsp;pos)</PRE>
+public void <B>mark</B>(int&nbsp;readLimit)</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)" title="class or interface in java.io">mark</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -374,6 +486,9 @@ reset</H3>
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()" title="class or interface in java.io">reset</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -385,6 +500,9 @@ skip</H3>
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)" title="class or interface in java.io">skip</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -397,6 +515,9 @@ public int <B>read</B>()
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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()" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
@@ -411,6 +532,9 @@ public int <B>read</B>(byte[]&nbsp;toBuf)
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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[])" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
@@ -427,6 +551,9 @@ public int <B>read</B>(byte[]&nbsp;toBuf,
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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)" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
@@ -434,6 +561,21 @@ public int <B>read</B>(byte[]&nbsp;toBuf,
</DL>
<HR>
+<A NAME="skipFast(int)"><!-- --></A><H3>
+skipFast</H3>
+<PRE>
+public final void <B>skipFast</B>(int&nbsp;count)</PRE>
+<DL>
+<DD>Equivalent to <code>skip()<code> but takes an int parameter instead of a
+ long, and does not check whether the count given is larger than the
+ number of remaining bytes.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/util/FastInputStream.html#skip(long)"><CODE>skip(long)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="readFast()"><!-- --></A><H3>
readFast</H3>
<PRE>
@@ -527,7 +669,7 @@ public final int <B>getBufferLength</B>()</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -543,16 +685,16 @@ public final int <B>getBufferLength</B>()</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/FastInputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastInputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -565,19 +707,20 @@ public final int <B>getBufferLength</B>()</PRE>
<A HREF="../../../allclasses-noframe.html"><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>
+ 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;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+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>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/FastOutputStream.html b/db/docs/java/com/sleepycat/util/FastOutputStream.html
index 8b87e8ecc..466be0ba1 100644
--- a/db/docs/java/com/sleepycat/util/FastOutputStream.html
+++ b/db/docs/java/com/sleepycat/util/FastOutputStream.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+FastOutputStream (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.FastOutputStream class">
@@ -14,9 +14,11 @@ FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="FastOutputStream (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/FastOutputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastOutputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,15 +90,19 @@ com.sleepycat.util</FONT>
Class FastOutputStream</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">java.io.OutputStream</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.util.FastOutputStream</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">java.io.OutputStream</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.util.FastOutputStream</B>
</PRE>
<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A></DD>
+</DL>
+<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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" title="class or interface in java.io">OutputStream</A></DL>
+<DT><PRE>public class <B>FastOutputStream</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A></DL>
+</PRE>
<P>
A replacement for ByteArrayOutputStream that does not synchronize every
@@ -112,16 +119,13 @@ A replacement for ByteArrayOutputStream that does not synchronize every
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -129,7 +133,7 @@ A replacement for ByteArrayOutputStream that does not synchronize every
<TD><CODE><B><A HREF="../../../com/sleepycat/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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The default amount that the buffer is increased when it is full.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -137,7 +141,8 @@ A replacement for ByteArrayOutputStream that does not synchronize every
<TD><CODE><B><A HREF="../../../com/sleepycat/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>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The default initial size of the buffer if no initialSize parameter is
+ specified.</TD>
</TR>
</TABLE>
&nbsp;
@@ -146,8 +151,8 @@ A replacement for ByteArrayOutputStream that does not synchronize every
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastOutputStream.html#FastOutputStream()">FastOutputStream</A></B>()</CODE>
@@ -191,8 +196,8 @@ A replacement for ByteArrayOutputStream that does not synchronize every
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -262,15 +267,6 @@ A replacement for ByteArrayOutputStream that does not synchronize every
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/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" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../com/sleepycat/util/FastOutputStream.html#toString()">toString</A></B>()</CODE>
@@ -352,7 +348,7 @@ A replacement for ByteArrayOutputStream that does not synchronize every
&nbsp;<A NAME="methods_inherited_from_class_java.io.OutputStream"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.io">OutputStream</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#flush()" title="class or interface in java.io">flush</A></CODE></TD>
@@ -361,10 +357,10 @@ A replacement for ByteArrayOutputStream that does not synchronize every
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
@@ -375,8 +371,8 @@ A replacement for ByteArrayOutputStream that does not synchronize every
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -385,6 +381,9 @@ DEFAULT_INIT_SIZE</H3>
<PRE>
public static final int <B>DEFAULT_INIT_SIZE</B></PRE>
<DL>
+<DD>The default initial size of the buffer if no initialSize parameter is
+ specified. This constant is 100 bytes.
+<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.util.FastOutputStream.DEFAULT_INIT_SIZE">Constant Field Values</A></DL>
</DL>
@@ -395,6 +394,9 @@ DEFAULT_BUMP_SIZE</H3>
<PRE>
public static final int <B>DEFAULT_BUMP_SIZE</B></PRE>
<DL>
+<DD>The default amount that the buffer is increased when it is full. This
+ constant is zero, which means to double the current buffer size.
+<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.util.FastOutputStream.DEFAULT_BUMP_SIZE">Constant Field Values</A></DL>
</DL>
@@ -404,8 +406,8 @@ public static final int <B>DEFAULT_BUMP_SIZE</B></PRE>
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -427,7 +429,9 @@ public <B>FastOutputStream</B>(int&nbsp;initialSize)</PRE>
<DD>Creates an output stream with a default bump size and a given initial
size.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>initialSize</CODE> - the initial size of the buffer.</DL>
+</DL>
<HR>
<A NAME="FastOutputStream(int, int)"><!-- --></A><H3>
@@ -438,7 +442,9 @@ public <B>FastOutputStream</B>(int&nbsp;initialSize,
<DL>
<DD>Creates an output stream with a given bump size and initial size.
<P>
+<DL>
<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>
+</DL>
<HR>
<A NAME="FastOutputStream(byte[])"><!-- --></A><H3>
@@ -449,7 +455,9 @@ public <B>FastOutputStream</B>(byte[]&nbsp;buffer)</PRE>
<DD>Creates an output stream with a given initial buffer and a default
bump size.
<P>
+<DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the initial buffer; will be owned by this object.</DL>
+</DL>
<HR>
<A NAME="FastOutputStream(byte[], int)"><!-- --></A><H3>
@@ -461,15 +469,19 @@ public <B>FastOutputStream</B>(byte[]&nbsp;buffer,
<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>
+<DL>
+<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. If zero (the
+ default), the current buffer size will be doubled when the buffer is
+ full.</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -502,6 +514,9 @@ public void <B>write</B>(int&nbsp;b)
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
@@ -516,6 +531,9 @@ public void <B>write</B>(byte[]&nbsp;fromBuf)
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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[])" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
@@ -532,6 +550,9 @@ public void <B>write</B>(byte[]&nbsp;fromBuf,
throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">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)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io">OutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE></DL>
@@ -559,6 +580,9 @@ toString</H3>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">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()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
</DL>
</DD>
</DL>
@@ -633,20 +657,6 @@ public final void <B>writeFast</B>(byte[]&nbsp;fromBuf,
</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>
@@ -724,7 +734,7 @@ public void <B>addSize</B>(int&nbsp;sizeAdded)</PRE>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -740,16 +750,16 @@ public void <B>addSize</B>(int&nbsp;sizeAdded)</PRE>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/FastOutputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastOutputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -762,6 +772,7 @@ public void <B>addSize</B>(int&nbsp;sizeAdded)</PRE>
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -775,6 +786,6 @@ DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/IOExceptionWrapper.html b/db/docs/java/com/sleepycat/util/IOExceptionWrapper.html
index c573ba613..dd09e3117 100644
--- a/db/docs/java/com/sleepycat/util/IOExceptionWrapper.html
+++ b/db/docs/java/com/sleepycat/util/IOExceptionWrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+IOExceptionWrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.IOExceptionWrapper class">
@@ -14,9 +14,11 @@ IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="IOExceptionWrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/IOExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IOExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,17 +90,18 @@ com.sleepycat.util</FONT>
Class IOExceptionWrapper</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">java.io.IOException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.util.IOExceptionWrapper</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">java.io.IOException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.util.IOExceptionWrapper</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">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" title="class or interface in java.io">IOException</A><DT>implements <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></DL>
+<DT><PRE>public class <B>IOExceptionWrapper</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A><DT>implements <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></DL>
+</PRE>
<P>
An IOException that can contain nested exceptions.
@@ -109,19 +113,14 @@ An IOException that can contain nested exceptions.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/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" title="class or interface in java.lang">Throwable</A>&nbsp;e)</CODE>
@@ -136,49 +135,54 @@ An IOException that can contain nested exceptions.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</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" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html#getCause()">getCause</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>
+<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" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html#getCause()"><CODE>getCause()</CODE></A>.</I></TD>
+</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -194,8 +198,8 @@ public <B>IOExceptionWrapper</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -204,7 +208,9 @@ getDetail</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A> <B>getDetail</B>()</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></CODE></B></DD>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html#getCause()"><CODE>getCause()</CODE></A>.</I>
+<P>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getDetail()">ExceptionWrapper</A></CODE></B></DD>
<DD>Returns the nested exception or null if none is present.
<P>
<DD><DL>
@@ -215,6 +221,29 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<DT><B>Returns:</B><DD>the nested exception or null if none is present.</DL>
</DD>
</DL>
+<HR>
+
+<A NAME="getCause()"><!-- --></A><H3>
+getCause</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A> <B>getCause</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()">ExceptionWrapper</A></CODE></B></DD>
+<DD>Returns the nested exception or null if none is present.
+
+ <p>This method is intentionally defined to be the same signature as the
+ <code>java.lang.Throwable.getCause</code> method in Java 1.4 and
+ greater. By defining this method to return a nested exception, the Java
+ 1.4 runtime will print the nested stack trace.</p>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()">getCause</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</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>
@@ -224,7 +253,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -240,16 +269,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/IOExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IOExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -262,6 +291,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -275,6 +305,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/PackedInteger.html b/db/docs/java/com/sleepycat/util/PackedInteger.html
new file mode 100644
index 000000000..06b681d80
--- /dev/null
+++ b/db/docs/java/com/sleepycat/util/PackedInteger.html
@@ -0,0 +1,390 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
+<TITLE>
+PackedInteger (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sleepycat.util.PackedInteger class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="PackedInteger (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/PackedInteger.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/util/PackedInteger.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PackedInteger.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.util</FONT>
+<BR>
+Class PackedInteger</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.util.PackedInteger</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>PackedInteger</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+Static methods for reading and writing packed integers.
+
+ <p>Note that packed integers are not sorted naturally for a byte-by-byte
+ comparison because they have a preceding length and are little endian;
+ therefore, they are typically not used for keys.</p>
+
+ <p>Values in the inclusive range [-119,119] are stored in a single byte.
+ For values outside that range, the first byte stores the sign and the number
+ of additional bytes. The additional bytes store (abs(value) - 119) as an
+ unsigned little endian integer.</p>
+
+ <p>To read and write packed integer values, call <A HREF="../../../com/sleepycat/util/PackedInteger.html#readInt(byte[], int)"><CODE>readInt(byte[], int)</CODE></A> and <A HREF="../../../com/sleepycat/util/PackedInteger.html#writeInt(byte[], int, int)"><CODE>writeInt(byte[], int, int)</CODE></A>. To get the length of a packed integer without reading it, call
+ <A HREF="../../../com/sleepycat/util/PackedInteger.html#getReadIntLength(byte[], int)"><CODE>getReadIntLength(byte[], int)</CODE></A>. To get the length of an unpacked integer without
+ writing it, call <A HREF="../../../com/sleepycat/util/PackedInteger.html#getWriteIntLength(int)"><CODE>getWriteIntLength(int)</CODE></A>.</p>
+
+ <p>Note that the packed integer format is designed to accomodate long
+ integers using up to 9 bytes of storage. Currently only int values are
+ implemented, but the same format may be used in future for long values.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</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/util/PackedInteger.html#MAX_LENGTH">MAX_LENGTH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of bytes needed to store an int value (5).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/PackedInteger.html#PackedInteger()">PackedInteger</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" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</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/util/PackedInteger.html#getReadIntLength(byte[], int)">getReadIntLength</A></B>(byte[]&nbsp;buf,
+ int&nbsp;off)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of bytes that would be read by <A HREF="../../../com/sleepycat/util/PackedInteger.html#readInt(byte[], int)"><CODE>readInt(byte[], int)</CODE></A>.</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/util/PackedInteger.html#getWriteIntLength(int)">getWriteIntLength</A></B>(int&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of bytes that would be written by <A HREF="../../../com/sleepycat/util/PackedInteger.html#writeInt(byte[], int, int)"><CODE>writeInt(byte[], int, int)</CODE></A>.</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/util/PackedInteger.html#readInt(byte[], int)">readInt</A></B>(byte[]&nbsp;buf,
+ int&nbsp;off)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a packed integer at the given buffer offset and returns it.</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/util/PackedInteger.html#writeInt(byte[], int, int)">writeInt</A></B>(byte[]&nbsp;buf,
+ int&nbsp;offset,
+ int&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a packed integer starting at the given buffer offset and returns
+ the next offset to be written.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="MAX_LENGTH"><!-- --></A><H3>
+MAX_LENGTH</H3>
+<PRE>
+public static final int <B>MAX_LENGTH</B></PRE>
+<DL>
+<DD>The maximum number of bytes needed to store an int value (5). The fifth
+ byte is only needed for values greater than (Integer.MAX_VALUE - 119) or
+ less than (Integer.MIN_VALUE + 119).
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.util.PackedInteger.MAX_LENGTH">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="PackedInteger()"><!-- --></A><H3>
+PackedInteger</H3>
+<PRE>
+public <B>PackedInteger</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="readInt(byte[], int)"><!-- --></A><H3>
+readInt</H3>
+<PRE>
+public static int <B>readInt</B>(byte[]&nbsp;buf,
+ int&nbsp;off)</PRE>
+<DL>
+<DD>Reads a packed integer at the given buffer offset and returns it.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>buf</CODE> - the buffer to read from.<DD><CODE>off</CODE> - the offset in the buffer at which to start reading.
+<DT><B>Returns:</B><DD>the integer that was read.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReadIntLength(byte[], int)"><!-- --></A><H3>
+getReadIntLength</H3>
+<PRE>
+public static int <B>getReadIntLength</B>(byte[]&nbsp;buf,
+ int&nbsp;off)</PRE>
+<DL>
+<DD>Returns the number of bytes that would be read by <A HREF="../../../com/sleepycat/util/PackedInteger.html#readInt(byte[], int)"><CODE>readInt(byte[], int)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>buf</CODE> - the buffer to read from.<DD><CODE>off</CODE> - the offset in the buffer at which to start reading.
+<DT><B>Returns:</B><DD>the number of bytes that would be read.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeInt(byte[], int, int)"><!-- --></A><H3>
+writeInt</H3>
+<PRE>
+public static int <B>writeInt</B>(byte[]&nbsp;buf,
+ int&nbsp;offset,
+ int&nbsp;value)</PRE>
+<DL>
+<DD>Writes a packed integer starting at the given buffer offset and returns
+ the next offset to be written.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>buf</CODE> - the buffer to write to.<DD><CODE>offset</CODE> - the offset in the buffer at which to start writing.<DD><CODE>value</CODE> - the integer to be written.
+<DT><B>Returns:</B><DD>the offset past the bytes written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getWriteIntLength(int)"><!-- --></A><H3>
+getWriteIntLength</H3>
+<PRE>
+public static int <B>getWriteIntLength</B>(int&nbsp;value)</PRE>
+<DL>
+<DD>Returns the number of bytes that would be written by <A HREF="../../../com/sleepycat/util/PackedInteger.html#writeInt(byte[], int, int)"><CODE>writeInt(byte[], int, int)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the integer to be written.
+<DT><B>Returns:</B><DD>the number of bytes that would be used to write the given
+ integer.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&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/PackedInteger.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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/sleepycat/util/PackedInteger.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PackedInteger.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><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>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/util/RuntimeExceptionWrapper.html b/db/docs/java/com/sleepycat/util/RuntimeExceptionWrapper.html
index c4173ef3d..c415d9288 100644
--- a/db/docs/java/com/sleepycat/util/RuntimeExceptionWrapper.html
+++ b/db/docs/java/com/sleepycat/util/RuntimeExceptionWrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+RuntimeExceptionWrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.RuntimeExceptionWrapper class">
@@ -14,9 +14,11 @@ RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="RuntimeExceptionWrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/RuntimeExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RuntimeExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,17 +90,18 @@ com.sleepycat.util</FONT>
Class RuntimeExceptionWrapper</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang">java.lang.RuntimeException</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.util.RuntimeExceptionWrapper</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">java.lang.Throwable</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">java.lang.Exception</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang">java.lang.RuntimeException</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.util.RuntimeExceptionWrapper</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">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" title="class or interface in java.lang">RuntimeException</A><DT>implements <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></DL>
+<DT><PRE>public class <B>RuntimeExceptionWrapper</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang">RuntimeException</A><DT>implements <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></DL>
+</PRE>
<P>
A RuntimeException that can contain nested exceptions.
@@ -109,19 +113,14 @@ A RuntimeException that can contain nested exceptions.
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/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" title="class or interface in java.lang">Throwable</A>&nbsp;e)</CODE>
@@ -136,49 +135,54 @@ A RuntimeException that can contain nested exceptions.
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</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" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html#getCause()">getCause</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>
+<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" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html#getCause()"><CODE>getCause()</CODE></A>.</I></TD>
+</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Throwable</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -194,8 +198,8 @@ public <B>RuntimeExceptionWrapper</B>(<A HREF="http://java.sun.com/j2se/1.3/docs
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -204,7 +208,9 @@ getDetail</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A> <B>getDetail</B>()</PRE>
<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></CODE></B></DD>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html#getCause()"><CODE>getCause()</CODE></A>.</I>
+<P>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getDetail()">ExceptionWrapper</A></CODE></B></DD>
<DD>Returns the nested exception or null if none is present.
<P>
<DD><DL>
@@ -215,6 +221,29 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<DT><B>Returns:</B><DD>the nested exception or null if none is present.</DL>
</DD>
</DL>
+<HR>
+
+<A NAME="getCause()"><!-- --></A><H3>
+getCause</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A> <B>getCause</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()">ExceptionWrapper</A></CODE></B></DD>
+<DD>Returns the nested exception or null if none is present.
+
+ <p>This method is intentionally defined to be the same signature as the
+ <code>java.lang.Throwable.getCause</code> method in Java 1.4 and
+ greater. By defining this method to return a nested exception, the Java
+ 1.4 runtime will print the nested stack trace.</p>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()">getCause</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()" title="class or interface in java.lang">getCause</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</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>
@@ -224,7 +253,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -240,16 +269,16 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
+&nbsp;<A HREF="../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/RuntimeExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RuntimeExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -262,6 +291,7 @@ public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -275,6 +305,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/UtfOps.html b/db/docs/java/com/sleepycat/util/UtfOps.html
index 4bd13d9d0..95ebbe8f5 100644
--- a/db/docs/java/com/sleepycat/util/UtfOps.html
+++ b/db/docs/java/com/sleepycat/util/UtfOps.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)
+UtfOps (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util.UtfOps class">
@@ -14,9 +14,11 @@ UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="UtfOps (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,16 +46,16 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/UtfOps.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="UtfOps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -87,11 +90,12 @@ com.sleepycat.util</FONT>
Class UtfOps</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
- <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>com.sleepycat.util.UtfOps</B>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.sleepycat.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" title="class or interface in java.lang">Object</A></DL>
+<DT><PRE>public class <B>UtfOps</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
<P>
UTF operations with more flexibility than is provided by DataInput and
@@ -102,19 +106,14 @@ UTF operations with more flexibility than is provided by DataInput and
<HR>
<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../com/sleepycat/util/UtfOps.html#UtfOps()">UtfOps</A></B>()</CODE>
@@ -129,8 +128,8 @@ UTF operations with more flexibility than is provided by DataInput and
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -227,25 +226,22 @@ UTF operations with more flexibility than is provided by DataInput and
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<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" title="class or interface in java.lang">Object</A></B></TD>
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</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)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
-<!-- ============ FIELD DETAIL =========== -->
-
-
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -261,8 +257,8 @@ public <B>UtfOps</B>()</PRE>
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
@@ -450,7 +446,7 @@ public static byte[] <B>stringToBytes</B>(<A HREF="http://java.sun.com/j2se/1.3/
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -466,16 +462,16 @@ public static byte[] <B>stringToBytes</B>(<A HREF="http://java.sun.com/j2se/1.3/
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><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;
+ <A HREF="../../../index.html?com/sleepycat/util/UtfOps.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="UtfOps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -488,6 +484,7 @@ public static byte[] <B>stringToBytes</B>(<A HREF="http://java.sun.com/j2se/1.3/
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
<TR>
@@ -501,6 +498,6 @@ DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&n
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/ExceptionUnwrapper.html b/db/docs/java/com/sleepycat/util/class-use/ExceptionUnwrapper.html
index db25fe235..b1236d9f9 100644
--- a/db/docs/java/com/sleepycat/util/class-use/ExceptionUnwrapper.html
+++ b/db/docs/java/com/sleepycat/util/class-use/ExceptionUnwrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.util.ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.util.ExceptionUnwrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.util.ExceptionUnwrapper (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.util.ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.util.ExceptionUnwrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useExceptionUnwrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionUnwrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.util.ExceptionUnwrapper
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.util.ExceptionUnwrapper
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.util.ExceptionUnwrapper
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useExceptionUnwrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionUnwrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.util.ExceptionUnwrapper
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.util.ExceptionUnwrapper
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/ExceptionWrapper.html b/db/docs/java/com/sleepycat/util/class-use/ExceptionWrapper.html
index de63c0dba..beff6ad1d 100644
--- a/db/docs/java/com/sleepycat/util/class-use/ExceptionWrapper.html
+++ b/db/docs/java/com/sleepycat/util/class-use/ExceptionWrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Interface com.sleepycat.util.ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Interface com.sleepycat.util.ExceptionWrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Interface com.sleepycat.util.ExceptionWrapper (Sleepycat Software, Inc.
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Interface com.sleepycat.util.ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Interface com.sleepycat.util.ExceptionWrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.util"><B>com.sleepycat.util</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html"
<A NAME="com.sleepycat.util"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A> in <A HREF="../../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A> in <A HREF="../../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="in
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Classes in <A HREF="../../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> that implement <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> that implement <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -130,7 +133,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="in
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -146,7 +149,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="in
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -155,7 +158,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="in
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -168,6 +171,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="in
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -175,6 +179,6 @@ Uses of <A HREF="../../../../com/sleepycat/util/ExceptionWrapper.html" title="in
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/FastInputStream.html b/db/docs/java/com/sleepycat/util/class-use/FastInputStream.html
index 5ceb5f92f..0931e04f0 100644
--- a/db/docs/java/com/sleepycat/util/class-use/FastInputStream.html
+++ b/db/docs/java/com/sleepycat/util/class-use/FastInputStream.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.util.FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.util.FastInputStream (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.util.FastInputStream (Sleepycat Software, Inc. - Ber
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.util.FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.util.FastInputStream (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useFastInputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastInputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,8 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -92,8 +95,8 @@ Packages that use <A HREF="../../../../com/sleepycat/util/FastInputStream.html"
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +104,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="cla
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +126,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="cla
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +142,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="cla
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +151,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="cla
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useFastInputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastInputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +164,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="cla
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +172,6 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastInputStream.html" title="cla
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/FastOutputStream.html b/db/docs/java/com/sleepycat/util/class-use/FastOutputStream.html
index 090527822..166b8b065 100644
--- a/db/docs/java/com/sleepycat/util/class-use/FastOutputStream.html
+++ b/db/docs/java/com/sleepycat/util/class-use/FastOutputStream.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.util.FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.util.FastOutputStream (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.util.FastOutputStream (Sleepycat Software, Inc. - Be
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.util.FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.util.FastOutputStream (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useFastOutputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastOutputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,12 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
+<TD>Bindings that use Java serialization.&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -89,11 +96,37 @@ Packages that use <A HREF="../../../../com/sleepycat/util/FastOutputStream.html"
</TABLE>
&nbsp;
<P>
+<A NAME="com.sleepycat.bind.serial"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A> in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A> that return <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></CODE></FONT></TD>
+<TD><CODE><B>SerialBase.</B><B><A HREF="../../../../com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)">getSerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty SerialOutput instance that will be used by the serial
+ binding or key creator.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
</TABLE>
&nbsp;
@@ -101,7 +134,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="cl
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A> in <A HREF="../../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -123,7 +156,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="cl
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -139,7 +172,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="cl
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -148,7 +181,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="cl
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useFastOutputStream.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="FastOutputStream.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -161,6 +194,7 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="cl
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -168,6 +202,6 @@ Uses of <A HREF="../../../../com/sleepycat/util/FastOutputStream.html" title="cl
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/IOExceptionWrapper.html b/db/docs/java/com/sleepycat/util/class-use/IOExceptionWrapper.html
index 9d544bf1e..39e6e5a7c 100644
--- a/db/docs/java/com/sleepycat/util/class-use/IOExceptionWrapper.html
+++ b/db/docs/java/com/sleepycat/util/class-use/IOExceptionWrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.util.IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.util.IOExceptionWrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.util.IOExceptionWrapper (Sleepycat Software, Inc. -
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.util.IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.util.IOExceptionWrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useIOExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IOExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.util.IOExceptionWrapper
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.util.IOExceptionWrapper
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.util.IOExceptionWrapper
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useIOExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="IOExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.util.IOExceptionWrapper
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.util.IOExceptionWrapper
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/PackedInteger.html b/db/docs/java/com/sleepycat/util/class-use/PackedInteger.html
new file mode 100644
index 000000000..7e69216b6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/util/class-use/PackedInteger.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
+<TITLE>
+Uses of Class com.sleepycat.util.PackedInteger (Oracle Corporation - Berkeley DB Java API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Uses of Class com.sleepycat.util.PackedInteger (Oracle Corporation - Berkeley DB Java API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/util/PackedInteger.html" title="class in com.sleepycat.util"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/util//class-usePackedInteger.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PackedInteger.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.util.PackedInteger</B></H2>
+</CENTER>
+No usage of com.sleepycat.util.PackedInteger
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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/util/PackedInteger.html" title="class in com.sleepycat.util"><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.5.20</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html?com/sleepycat/util//class-usePackedInteger.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PackedInteger.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/RuntimeExceptionWrapper.html b/db/docs/java/com/sleepycat/util/class-use/RuntimeExceptionWrapper.html
index 4d69fec1b..bbbf5e2f1 100644
--- a/db/docs/java/com/sleepycat/util/class-use/RuntimeExceptionWrapper.html
+++ b/db/docs/java/com/sleepycat/util/class-use/RuntimeExceptionWrapper.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.util.RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.util.RuntimeExceptionWrapper (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.util.RuntimeExceptionWrapper (Sleepycat Software, In
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.util.RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.util.RuntimeExceptionWrapper (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useRuntimeExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RuntimeExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.util.RuntimeExceptionWrapper
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.util.RuntimeExceptionWrapper
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.util.RuntimeExceptionWrapper
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useRuntimeExceptionWrapper.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RuntimeExceptionWrapper.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.util.RuntimeExceptionWrapper
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.util.RuntimeExceptionWrapper
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/class-use/UtfOps.html b/db/docs/java/com/sleepycat/util/class-use/UtfOps.html
index 13acb81da..f27f0eb87 100644
--- a/db/docs/java/com/sleepycat/util/class-use/UtfOps.html
+++ b/db/docs/java/com/sleepycat/util/class-use/UtfOps.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Class com.sleepycat.util.UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Class com.sleepycat.util.UtfOps (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Class com.sleepycat.util.UtfOps (Sleepycat Software, Inc. - Berkeley DB
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Class com.sleepycat.util.UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Class com.sleepycat.util.UtfOps (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useUtfOps.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="UtfOps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -86,7 +89,7 @@ No usage of com.sleepycat.util.UtfOps
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -102,7 +105,7 @@ No usage of com.sleepycat.util.UtfOps
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -111,7 +114,7 @@ No usage of com.sleepycat.util.UtfOps
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../../index.html?com/sleepycat/util//class-useUtfOps.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="UtfOps.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -124,6 +127,7 @@ No usage of com.sleepycat.util.UtfOps
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -131,6 +135,6 @@ No usage of com.sleepycat.util.UtfOps
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/package-frame.html b/db/docs/java/com/sleepycat/util/package-frame.html
index b822784dc..30760b4f0 100644
--- a/db/docs/java/com/sleepycat/util/package-frame.html
+++ b/db/docs/java/com/sleepycat/util/package-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.util (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util package">
@@ -40,6 +40,8 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="FastOutputStream.html" title="class in com.sleepycat.util" target="classFrame">FastOutputStream</A>
<BR>
+<A HREF="PackedInteger.html" title="class in com.sleepycat.util" target="classFrame">PackedInteger</A>
+<BR>
<A HREF="UtfOps.html" title="class in com.sleepycat.util" target="classFrame">UtfOps</A></FONT></TD>
</TR>
</TABLE>
diff --git a/db/docs/java/com/sleepycat/util/package-summary.html b/db/docs/java/com/sleepycat/util/package-summary.html
index 03cac748a..0a89c3a35 100644
--- a/db/docs/java/com/sleepycat/util/package-summary.html
+++ b/db/docs/java/com/sleepycat/util/package-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.util (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="com.sleepycat.util package">
@@ -14,9 +14,11 @@ com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.util (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/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;
+ <A HREF="../../../index.html?com/sleepycat/util/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -85,8 +88,8 @@ General utilities used throughout Berkeley DB.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A></B></TD>
@@ -99,12 +102,12 @@ General utilities used throughout Berkeley DB.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A></B></TD>
-<TD>Unwraps nested exceptions by calling the <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getDetail()"><CODE>ExceptionWrapper.getDetail()</CODE></A> method for exceptions that implement the
+<TD>Unwraps nested exceptions by calling the <A HREF="../../../com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>ExceptionWrapper.getCause()</CODE></A> method for exceptions that implement the
<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><CODE>ExceptionWrapper</CODE></A> interface.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -118,6 +121,10 @@ General utilities used throughout Berkeley DB.
byte read.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A></B></TD>
+<TD>Static methods for reading and writing packed integers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A></B></TD>
<TD>UTF operations with more flexibility than is provided by DataInput and
DataOutput.</TD>
@@ -129,8 +136,8 @@ General utilities used throughout Berkeley DB.
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Exception Summary</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A></B></TD>
@@ -153,6 +160,8 @@ General utilities used throughout Berkeley DB.
<P>
<P>
+<DL>
+</DL>
<HR>
@@ -161,7 +170,7 @@ General utilities used throughout Berkeley DB.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -177,7 +186,7 @@ General utilities used throughout Berkeley DB.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -186,7 +195,7 @@ General utilities used throughout Berkeley DB.
&nbsp;<A HREF="../../../com/sleepycat/db/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;
+ <A HREF="../../../index.html?com/sleepycat/util/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -199,6 +208,7 @@ General utilities used throughout Berkeley DB.
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -206,6 +216,6 @@ General utilities used throughout Berkeley DB.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/package-tree.html b/db/docs/java/com/sleepycat/util/package-tree.html
index 95c392eda..9fdf5a063 100644
--- a/db/docs/java/com/sleepycat/util/package-tree.html
+++ b/db/docs/java/com/sleepycat/util/package-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-com.sleepycat.util Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+com.sleepycat.util Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ com.sleepycat.util Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="com.sleepycat.util Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="com.sleepycat.util Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;<A HREF="../../../com/sleepycat/db/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;
+ <A HREF="../../../index.html?com/sleepycat/util/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,29 +87,31 @@ Hierarchy For Package com.sleepycat.util
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" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><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" title="class or interface in java.io"><B>InputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><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" title="class or interface in java.io"><B>OutputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><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" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>ExceptionUnwrapper</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io"><B>InputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>)
<UL>
-<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang"><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" title="class or interface in java.io"><B>IOException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>IOExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A></UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io"><B>OutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A>)
+<UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A></UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><B>PackedInteger</B></A><LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>)
+<UL>
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang"><B>Exception</B></A><UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io"><B>IOException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>IOExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
</UL>
-<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>RuntimeExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>RuntimeExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
</UL>
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>UtfOps</B></A></UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>UtfOps</B></A></UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>ExceptionWrapper</B></A></UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="../../../com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>ExceptionWrapper</B></A></UL>
<HR>
@@ -115,7 +120,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -131,7 +136,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -140,7 +145,7 @@ Interface Hierarchy
&nbsp;<A HREF="../../../com/sleepycat/db/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;
+ <A HREF="../../../index.html?com/sleepycat/util/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -153,6 +158,7 @@ Interface Hierarchy
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -160,6 +166,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/com/sleepycat/util/package-use.html b/db/docs/java/com/sleepycat/util/package-use.html
index 5ec0418e5..95c662da8 100644
--- a/db/docs/java/com/sleepycat/util/package-use.html
+++ b/db/docs/java/com/sleepycat/util/package-use.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Uses of Package com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java API)
+Uses of Package com.sleepycat.util (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Uses of Package com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Uses of Package com.sleepycat.util (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Uses of Package com.sleepycat.util (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/util/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -79,8 +82,12 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Packages that use <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Packages that use <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bind.serial"><B>com.sleepycat.bind.serial</B></A></TD>
+<TD>Bindings that use Java serialization.&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="#com.sleepycat.bind.tuple"><B>com.sleepycat.bind.tuple</B></A></TD>
@@ -93,11 +100,27 @@ Packages that use <A HREF="../../../com/sleepycat/util/package-summary.html">com
</TABLE>
&nbsp;
<P>
+<A NAME="com.sleepycat.bind.serial"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> used by <A HREF="../../../com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/util/class-use/FastOutputStream.html#com.sleepycat.bind.serial"><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>
+</TABLE>
+&nbsp;
+<P>
<A NAME="com.sleepycat.bind.tuple"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> used by <A HREF="../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> used by <A HREF="../../../com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/util/class-use/FastInputStream.html#com.sleepycat.bind.tuple"><B>FastInputStream</B></A></B>
@@ -119,8 +142,8 @@ Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepy
<A NAME="com.sleepycat.util"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> used by <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A> used by <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepycat.util</A></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><B><A HREF="../../../com/sleepycat/util/class-use/ExceptionWrapper.html#com.sleepycat.util"><B>ExceptionWrapper</B></A></B>
@@ -139,7 +162,7 @@ Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -155,7 +178,7 @@ Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -164,7 +187,7 @@ Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepy
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="../../../index.html?com/sleepycat/util/package-use.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -177,6 +200,7 @@ Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepy
<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -184,6 +208,6 @@ Classes in <A HREF="../../../com/sleepycat/util/package-summary.html">com.sleepy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/constant-values.html b/db/docs/java/constant-values.html
index d3edb96f0..f73fe3359 100644
--- a/db/docs/java/constant-values.html
+++ b/db/docs/java/constant-values.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:44 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Constant Field Values (Sleepycat Software, Inc. - Berkeley DB Java API)
+Constant Field Values (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Constant Field Values (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Constant Field Values (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Constant Field Values (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -84,16 +87,34 @@ Constant Field Values</H1>
<A NAME="com.sleepycat"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD ALIGN="left"><FONT SIZE="+2">
-<B>com.sleepycat.*</B></FONT></TD>
+<TH ALIGN="left"><FONT SIZE="+2">
+com.sleepycat.*</FONT></TH>
</TR>
</TABLE>
<P>
-<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=3><B>com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A></B></TD>
+<TH ALIGN="left" COLSPAN="3">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.collections.StoredCollection.DEFAULT_ITERATOR_BLOCK_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/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE">DEFAULT_ITERATOR_BLOCK_SIZE</A></CODE></TD>
+<TD ALIGN="right"><CODE>10</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="3">com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="com.sleepycat.collections.TransactionRunner.DEFAULT_MAX_RETRIES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
@@ -109,9 +130,39 @@ Constant Field Values</H1>
<P>
-<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=3><B>com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></B></TD>
+<TH ALIGN="left" COLSPAN="3">com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Environment.CHECKPOINTER_NAME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Environment.html#CHECKPOINTER_NAME">CHECKPOINTER_NAME</A></CODE></TD>
+<TD ALIGN="right"><CODE>"Checkpointer"</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Environment.CLEANER_NAME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Environment.html#CLEANER_NAME">CLEANER_NAME</A></CODE></TD>
+<TD ALIGN="right"><CODE>"Cleaner"</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Environment.INCOMP_NAME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Environment.html#INCOMP_NAME">INCOMP_NAME</A></CODE></TD>
+<TD ALIGN="right"><CODE>"INCompressor"</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="3">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="com.sleepycat.db.ReplicationTransport.EID_BROADCAST"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
@@ -133,15 +184,15 @@ Constant Field Values</H1>
<P>
-<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=3><B>com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></B></TD>
+<TH ALIGN="left" COLSPAN="3">com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="com.sleepycat.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/util/FastOutputStream.html#DEFAULT_BUMP_SIZE">DEFAULT_BUMP_SIZE</A></CODE></TD>
-<TD ALIGN="right"><CODE>100</CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="com.sleepycat.util.FastOutputStream.DEFAULT_INIT_SIZE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
@@ -156,6 +207,24 @@ Constant Field Values</H1>
<P>
<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="3">com.sleepycat.util.<A HREF="com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.util.PackedInteger.MAX_LENGTH"><!-- --></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/util/PackedInteger.html#MAX_LENGTH">MAX_LENGTH</A></CODE></TD>
+<TD ALIGN="right"><CODE>5</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
<HR>
@@ -164,7 +233,7 @@ Constant Field Values</H1>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -180,7 +249,7 @@ Constant Field Values</H1>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -189,7 +258,7 @@ Constant Field Values</H1>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -202,6 +271,7 @@ Constant Field Values</H1>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -209,6 +279,6 @@ Constant Field Values</H1>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="/../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/deprecated-list.html b/db/docs/java/deprecated-list.html
index 649728050..f98310f0b 100644
--- a/db/docs/java/deprecated-list.html
+++ b/db/docs/java/deprecated-list.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:50 EDT 2006 -->
<TITLE>
-Deprecated List (Sleepycat Software, Inc. - Berkeley DB Java API)
+Deprecated List (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Deprecated List (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Deprecated List (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Deprecated List (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -76,6 +79,202 @@ function windowTitle()
<H2>
<B>Deprecated API</B></H2>
</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+<LI><A HREF="#field">Deprecated Fields</A>
+<LI><A HREF="#method">Deprecated Methods</A>
+</UL>
+
+<A NAME="field"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Deprecated Fields</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/LockMode.html#DEGREE_2">com.sleepycat.db.LockMode.DEGREE_2</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/LockMode.html#READ_COMMITTED"><CODE>LockMode.READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/CursorConfig.html#DEGREE_2">com.sleepycat.db.CursorConfig.DEGREE_2</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/CursorConfig.html#READ_COMMITTED"><CODE>CursorConfig.READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/LockMode.html#DIRTY_READ">com.sleepycat.db.LockMode.DIRTY_READ</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/LockMode.html#READ_UNCOMMITTED"><CODE>LockMode.READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/CursorConfig.html#DIRTY_READ">com.sleepycat.db.CursorConfig.DIRTY_READ</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED"><CODE>CursorConfig.READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="method"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Deprecated Methods</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadCollection(java.util.Collection)">com.sleepycat.collections.StoredCollections.dirtyReadCollection(Collection)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read collection, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadList(java.util.List)">com.sleepycat.collections.StoredCollections.dirtyReadList(List)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredList(java.util.List, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read list, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadMap(java.util.Map)">com.sleepycat.collections.StoredCollections.dirtyReadMap(Map)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read map, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadSet(java.util.Set)">com.sleepycat.collections.StoredCollections.dirtyReadSet(Set)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read set, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadSortedMap(java.util.SortedMap)">com.sleepycat.collections.StoredCollections.dirtyReadSortedMap(SortedMap)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read map, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadSortedSet(java.util.SortedSet)">com.sleepycat.collections.StoredCollections.dirtyReadSortedSet(SortedSet)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read set, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/TransactionConfig.html#getDegree2()">com.sleepycat.db.TransactionConfig.getDegree2()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/TransactionConfig.html#getReadCommitted()"><CODE>TransactionConfig.getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/CursorConfig.html#getDegree2()">com.sleepycat.db.CursorConfig.getDegree2()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/CursorConfig.html#getReadCommitted()"><CODE>CursorConfig.getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html#getDetail()">com.sleepycat.util.RuntimeExceptionWrapper.getDetail()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>replaced by <A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html#getCause()"><CODE>RuntimeExceptionWrapper.getCause()</CODE></A>.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/util/IOExceptionWrapper.html#getDetail()">com.sleepycat.util.IOExceptionWrapper.getDetail()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>replaced by <A HREF="com/sleepycat/util/IOExceptionWrapper.html#getCause()"><CODE>IOExceptionWrapper.getCause()</CODE></A>.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/util/ExceptionWrapper.html#getDetail()">com.sleepycat.util.ExceptionWrapper.getDetail()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>replaced by <A HREF="com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>ExceptionWrapper.getCause()</CODE></A>.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/TransactionConfig.html#getDirtyRead()">com.sleepycat.db.TransactionConfig.getDirtyRead()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/TransactionConfig.html#getReadUncommitted()"><CODE>TransactionConfig.getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DatabaseConfig.html#getDirtyRead()">com.sleepycat.db.DatabaseConfig.getDirtyRead()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/DatabaseConfig.html#getReadUncommitted()"><CODE>DatabaseConfig.getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/CursorConfig.html#getDirtyRead()">com.sleepycat.db.CursorConfig.getDirtyRead()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/CursorConfig.html#getReadUncommitted()"><CODE>CursorConfig.getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredContainer.html#isDirtyRead()">com.sleepycat.collections.StoredContainer.isDirtyRead()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method has been replaced by <A HREF="com/sleepycat/collections/StoredContainer.html#getCursorConfig()"><CODE>StoredContainer.getCursorConfig()</CODE></A>.
+ <code>CursorConfig.isReadUncommitted</code> may be called to determine
+ whether dirty-read is enabled.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()">com.sleepycat.collections.StoredContainer.isDirtyReadAllowed()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method is deprecated with no replacement in this class.
+ In the DB product, <code>DatabaseConfig.getReadUncommitted</code> may be
+ called.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/collections/StoredCollection.html#iterator(boolean)">com.sleepycat.collections.StoredCollection.iterator(boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Please use <A HREF="com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>StoredCollection.storedIterator()</CODE></A> or <A HREF="com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><CODE>StoredCollection.storedIterator(boolean)</CODE></A> instead. Because the iterator returned must
+ be closed, the method name <code>iterator</code> is confusing since standard
+ Java iterators do not need to be closed.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/bind/tuple/TupleBase.html#newOutput()">com.sleepycat.bind.tuple.TupleBase.newOutput()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>replaced by <A HREF="com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])">com.sleepycat.bind.tuple.TupleBase.newOutput(byte[])</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>replaced by <A HREF="com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/TransactionConfig.html#setDegree2(boolean)">com.sleepycat.db.TransactionConfig.setDegree2(boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/TransactionConfig.html#setReadCommitted(boolean)"><CODE>TransactionConfig.setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/CursorConfig.html#setDegree2(boolean)">com.sleepycat.db.CursorConfig.setDegree2(boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><CODE>CursorConfig.setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/TransactionConfig.html#setDirtyRead(boolean)">com.sleepycat.db.TransactionConfig.setDirtyRead(boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/TransactionConfig.html#setReadUncommitted(boolean)"><CODE>TransactionConfig.setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DatabaseConfig.html#setDirtyRead(boolean)">com.sleepycat.db.DatabaseConfig.setDirtyRead(boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/DatabaseConfig.html#setReadUncommitted(boolean)"><CODE>DatabaseConfig.setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/CursorConfig.html#setDirtyRead(boolean)">com.sleepycat.db.CursorConfig.setDirtyRead(boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This has been replaced by <A HREF="com/sleepycat/db/CursorConfig.html#setReadUncommitted(boolean)"><CODE>CursorConfig.setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
<HR>
@@ -84,7 +283,7 @@ function windowTitle()
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -100,7 +299,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -109,7 +308,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -122,6 +321,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -129,6 +329,6 @@ function windowTitle()
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="/../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/help-doc.html b/db/docs/java/help-doc.html
index 92d747656..85b894d11 100644
--- a/db/docs/java/help-doc.html
+++ b/db/docs/java/help-doc.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:50 EDT 2006 -->
<TITLE>
-API Help (Sleepycat Software, Inc. - Berkeley DB Java API)
+API Help (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ API Help (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="API Help (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="API Help (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -88,7 +91,7 @@ Package</H3>
<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>
+<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
</BLOCKQUOTE>
<H3>
Class/Interface</H3>
@@ -102,6 +105,24 @@ Each class, interface, nested class and nested interface has its own separate pa
<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>
+</BLOCKQUOTE>
+<H3>
+Annotation Type</H3>
+<BLOCKQUOTE>
+
+<P>
+Each annotation type has its own separate page with the following sections:<UL>
+<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
+</BLOCKQUOTE>
+</BLOCKQUOTE>
+<H3>
+Enum</H3>
+<BLOCKQUOTE>
+
+<P>
+Each enum has its own separate page with the following sections:<UL>
+<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
+</BLOCKQUOTE>
<H3>
Use</H3>
<BLOCKQUOTE>
@@ -130,6 +151,10 @@ These links show and hide the HTML frames. All pages are available with or with
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>
+<H3>
+Constant Field Values</H3>
+The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
+<P>
<FONT SIZE="-1">
<EM>
This help file applies to API documentation generated using the standard doclet.</EM>
@@ -143,7 +168,7 @@ This help file applies to API documentation generated using the standard doclet.
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -159,7 +184,7 @@ This help file applies to API documentation generated using the standard doclet.
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -168,7 +193,7 @@ This help file applies to API documentation generated using the standard doclet.
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -181,6 +206,7 @@ This help file applies to API documentation generated using the standard doclet.
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -188,6 +214,6 @@ This help file applies to API documentation generated using the standard doclet.
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="/../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/index-all.html b/db/docs/java/index-all.html
index 0508f22ef..3fa3dd2cd 100644
--- a/db/docs/java/index-all.html
+++ b/db/docs/java/index-all.html
@@ -2,20 +2,22 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Index (Sleepycat Software, Inc. - Berkeley DB Java API)
+Index (Oracle Corporation - Berkeley DB Java API)
</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="./style.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Index (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Index (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,23 +29,23 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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="./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>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,19 +54,20 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+ <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -75,677 +78,833 @@ function windowTitle()
<A NAME="_A_"><!-- --></A><H2>
<B>A</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html#ABORT"><B>ABORT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#ABORT"><B>ABORT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
<DD>The log is being read backward during a transaction abort; undo the
operation described by the log record.
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html#APPLY"><B>APPLY</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
-<DD>The log is being applied on a replica site; redo the operation
- described by the log record.
-<DT><A HREF="com/sleepycat/db/Transaction.html#abort()"><B>abort()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#abort()"><B>abort()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>Cause an abnormal termination of the transaction.
-<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html#abortTransaction()"><B>abortTransaction()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html#abortTransaction()"><B>abortTransaction()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">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/collections/StoredEntrySet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationTimeoutType.html#ACK_TIMEOUT"><B>ACK_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>
+<DD>Configure the amount of time the replication manager's transport function
+ waits to collect enough acknowledgments from replication group clients,
+ before giving up and returning a failure indication.
+<DT><A HREF="./com/sleepycat/collections/StoredEntrySet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
<DD>Adds the specified element to this set if it is not already present
(optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#add(java.lang.Object)"><B>add(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">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/collections/StoredKeySet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredKeySet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
<DD>Adds the specified key to this set if it is not already present
(optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#add(int, java.lang.Object)"><B>add(int, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#add(int, java.lang.Object)"><B>add(int, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Inserts the specified element at the specified position in this list
(optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#add(java.lang.Object)"><B>add(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Appends the specified element to the end of this list (optional
operation).
-<DT><A HREF="com/sleepycat/collections/StoredValueSet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredValueSet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
<DD>Adds the specified entity to this set if it is not already present
(optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)"><B>addAll(Collection)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#addAll(java.util.Collection)"><B>addAll(Collection)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Adds all of the elements in the specified collection to this collection
(optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">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/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><B>addDataDir(String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.io.File)"><B>addDataDir(File)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</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/util/FastOutputStream.html#addSize(int)"><B>addSize(int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#addDataDir(java.lang.String)"><B>addDataDir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#addSize(int)"><B>addSize(int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Skip the given number of bytes in the buffer.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#append(java.lang.Object)"><B>append(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#ALL"><B>ALL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>The master should wait until all replication clients have acknowledged
+ each permanent replication message.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#ALL_PEERS"><B>ALL_PEERS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>The master should wait until all electable peers have acknowledged
+ each permanent replication message (where "electable peer" means a
+ client capable of being subsequently elected master of the
+ replication group).
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#append(java.lang.Object)"><B>append(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Appends a given value returning the newly assigned index.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><B>append(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#append(java.lang.Object)"><B>append(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Appends a given value returning the newly assigned key.
-<DT><A HREF="com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>append(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>append(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>
Append the key/data pair to the end of the database.
-<DT><A HREF="com/sleepycat/db/RecordNumberAppender.html#appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)"><B>appendRecordNumber(Database, DatabaseEntry, int)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A>
+<DT><A HREF="./com/sleepycat/db/RecordNumberAppender.html#appendRecordNumber(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, int)"><B>appendRecordNumber(Database, DatabaseEntry, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A>
<DD>A callback function to modify the stored database based on the
generated key.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()"><B>areDuplicatesAllowed()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#APPLY"><B>APPLY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DD>The log is being applied on a replica site; redo the operation
+ described by the log record.
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#areDuplicatesAllowed()"><B>areDuplicatesAllowed()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns whether duplicate keys are allowed in this container.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()"><B>areDuplicatesOrdered()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#areDuplicatesOrdered()"><B>areDuplicatesOrdered()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns whether duplicate keys are allowed and sorted by element value.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()"><B>areKeysRenumbered()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#areKeysRenumbered()"><B>areKeysRenumbered()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns whether keys are renumbered when insertions and deletions occur.
-<DT><A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html#assignKey(com.sleepycat.db.DatabaseEntry)"><B>assignKey(DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.collections.<A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>
+<DT><A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html#assignKey(com.sleepycat.db.DatabaseEntry)"><B>assignKey(DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.collections.<A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>
<DD>Assigns a new primary key value into the given data buffer.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#available()"><B>available()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#available()"><B>available()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_B_"><!-- --></A><H2>
<B>B</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html#BACKWARD_ROLL"><B>BACKWARD_ROLL</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#BACKWARD_ROLL"><B>BACKWARD_ROLL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</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.
-<DT><A HREF="com/sleepycat/db/DatabaseType.html#BTREE"><B>BTREE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
-<DD>The database is a Btree.
-<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>BooleanBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
- wrapper or a <code>boolean</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html#BooleanBinding()"><B>BooleanBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>BtreePrefixCalculator</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A>.<DD>An interface specifying how Btree prefixes should be calculated.<DT><A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>BtreeStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>.<DD>The BtreeStats object is used to return Btree
-or Recno database statistics.<DT><A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>ByteArrayBinding</B></A> - class com.sleepycat.bind.<A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>.<DD>A pass-through <code>EntryBinding</code> that uses the entry's byte array as
- the key or data object.<DT><A HREF="com/sleepycat/bind/ByteArrayBinding.html#ByteArrayBinding()"><B>ByteArrayBinding()</B></A> -
-Constructor for class com.sleepycat.bind.<A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>
-<DD>Creates a byte array binding.
-<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>ByteBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
- wrapper or a <code>byte</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html#ByteBinding()"><B>ByteBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html#beginTransaction(com.sleepycat.db.TransactionConfig)"><B>beginTransaction(TransactionConfig)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html#beginTransaction(com.sleepycat.db.TransactionConfig)"><B>beginTransaction(TransactionConfig)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
<DD>Begins a new transaction for this environment and associates it with
the current thread.
-<DT><A HREF="com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><B>beginTransaction(Transaction, TransactionConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><B>beginTransaction(Transaction, TransactionConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Create a new transaction in the database environment.
-<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html#booleanToEntry(boolean, com.sleepycat.db.DatabaseEntry)"><B>booleanToEntry(boolean, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>BooleanBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Boolean</code> primitive
+ wrapper or a <code>boolean</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html#BooleanBinding()"><B>BooleanBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html#booleanToEntry(boolean, com.sleepycat.db.DatabaseEntry)"><B>booleanToEntry(boolean, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
<DD>Converts a simple <code>boolean</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html#byteToEntry(byte, com.sleepycat.db.DatabaseEntry)"><B>byteToEntry(byte, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
-<DD>Converts a simple <code>byte</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/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.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseType.html#BTREE"><B>BTREE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
+<DD>The database is a Btree.
+<DT><A HREF="./com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>BtreePrefixCalculator</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying how Btree prefixes should be calculated.<DT><A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>BtreeStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The BtreeStats object is used to return Btree
+or Recno database statistics.<DT><A HREF="./com/sleepycat/util/FastInputStream.html#buf"><B>buf</B></A> -
+Variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/ReplicationConfig.html#BULK"><B>BULK</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>
+<DD>The replication master should send groups of records to the clients in a
+ single network transfer.
+<DT><A HREF="./com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>ByteArrayBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A><DD>A pass-through <code>EntryBinding</code> that uses the entry's byte array as
+ the key or data object.<DT><A HREF="./com/sleepycat/bind/ByteArrayBinding.html#ByteArrayBinding()"><B>ByteArrayBinding()</B></A> -
+Constructor for class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>
+<DD>Creates a byte array binding.
+<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>ByteBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Byte</code> primitive
+ wrapper or a <code>byte</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html#ByteBinding()"><B>ByteBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/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.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Converts byte arrays into character arrays.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#bytesToString(byte[], int, int)"><B>bytesToString(byte[], int, int)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#bytesToString(byte[], int, int)"><B>bytesToString(byte[], int, int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Converts byte arrays into strings.
+<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html#byteToEntry(byte, com.sleepycat.db.DatabaseEntry)"><B>byteToEntry(byte, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
+<DD>Converts a simple <code>byte</code> value into an entry buffer.
</DL>
<HR>
<A NAME="_C_"><!-- --></A><H2>
<B>C</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>CacheFile</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>.<DD>This class allows applications to modify settings for
-a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> using the <A HREF="com/sleepycat/db/Database.html#getCacheFile()"><CODE>Database.getCacheFile</CODE></A>.<DT><A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>CacheFilePriority</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>.<DD>Priorities that can be assigned to files in the cache.<DT><A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>CacheFileStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>.<DD>Statistics for a file in the cache.<DT><A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>CacheStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>.<DD>Cache statistics for a database environment.<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>CharacterBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
- wrapper or a <code>char</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html#CharacterBinding()"><B>CharacterBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DT><A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>CacheFile</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>This class allows applications to modify settings for
+a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> using the <A HREF="./com/sleepycat/db/Database.html#getCacheFile()"><CODE>Database.getCacheFile</CODE></A>.<DT><A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>CacheFilePriority</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Priorities that can be assigned to files in the cache.<DT><A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>CacheFileStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Statistics for a file in the cache.<DT><A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>CacheStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Cache statistics for a database environment.<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>CharacterBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Character</code> primitive
+ wrapper or a <code>char</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html#CharacterBinding()"><B>CharacterBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>CheckpointConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>.<DD>Specifies the attributes of an application invoked checkpoint operation.<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#CheckpointConfig()"><B>CheckpointConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
-<DD>An instance created using the default constructor is initialized
- with the system's default settings.
-<DT><A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>ClassCatalog</B></A> - interface com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>.<DD>A catalog of class description information for use during object
- serialization.<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>CurrentTransaction</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">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/Cursor.html" title="class in com.sleepycat.db"><B>Cursor</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>.<DD>A database cursor.<DT><A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>CursorConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>.<DD>Specify the attributes of database cursor.<DT><A HREF="com/sleepycat/db/CursorConfig.html#CursorConfig()"><B>CursorConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>An instance created using the default constructor is initialized with
- the system's default settings.
-<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html#charToEntry(char, com.sleepycat.db.DatabaseEntry)"><B>charToEntry(char, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
-<DD>Converts a simple <code>char</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#charsToBytes(char[], int, byte[], int, int)"><B>charsToBytes(char[], int, byte[], int, int)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#charsToBytes(char[], int, byte[], int, int)"><B>charsToBytes(char[], int, byte[], int, int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Converts character arrays into byte arrays.
-<DT><A HREF="com/sleepycat/db/Environment.html#checkpoint(com.sleepycat.db.CheckpointConfig)"><B>checkpoint(CheckpointConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html#charToEntry(char, com.sleepycat.db.DatabaseEntry)"><B>charToEntry(char, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DD>Converts a simple <code>char</code> value into an entry buffer.
+<DT><A HREF="./com/sleepycat/db/Environment.html#checkpoint(com.sleepycat.db.CheckpointConfig)"><B>checkpoint(CheckpointConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Synchronously checkpoint the database environment.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#clear()"><B>clear()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>CheckpointConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specifies the attributes of an application invoked checkpoint operation.<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#CheckpointConfig()"><B>CheckpointConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DD>An instance created using the default constructor is initialized
+ with the system's default settings.
+<DT><A HREF="./com/sleepycat/db/Environment.html#CHECKPOINTER_NAME"><B>CHECKPOINTER_NAME</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>The name of the Checkpointer daemon thread.
+<DT><A HREF="./com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>ClassCatalog</B></A> - Interface in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A catalog of class description information for use during object
+ serialization.<DT><A HREF="./com/sleepycat/db/Environment.html#CLEANER_NAME"><B>CLEANER_NAME</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>The name of the cleaner daemon thread.
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#clear()"><B>clear()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Removes all mappings or elements from this map or collection (optional
operation).
-<DT><A HREF="com/sleepycat/bind/serial/ClassCatalog.html#close()"><B>close()</B></A> -
-Method in interface com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>
+<DT><A HREF="./com/sleepycat/bind/serial/ClassCatalog.html#close()"><B>close()</B></A> -
+Method in interface com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>
<DD>Close a catalog database and release any cached resources.
-<DT><A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><B>close(Iterator)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
-<DD>Closes the given iterator using <A HREF="com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> if it is a <A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#close(java.util.Iterator)"><B>close(Iterator)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DD>Closes the given iterator using <A HREF="./com/sleepycat/collections/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> if it is a <A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><CODE>StoredIterator</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Closes this iterator.
-<DT><A HREF="com/sleepycat/db/Cursor.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Discard the cursor.
-<DT><A HREF="com/sleepycat/db/Database.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Flush any cached database information to disk and discard the database
handle.
-<DT><A HREF="com/sleepycat/db/Database.html#close(boolean)"><B>close(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#close(boolean)"><B>close(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Flush any cached database information to disk and discard the database
handle.
-<DT><A HREF="com/sleepycat/db/Environment.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Close the database environment, freeing any allocated resources and
closing any underlying subsystems.
-<DT><A HREF="com/sleepycat/db/JoinCursor.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
+<DT><A HREF="./com/sleepycat/db/JoinCursor.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
<DD>Closes the cursors that have been opened by this join cursor.
-<DT><A HREF="com/sleepycat/db/LogCursor.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Close the log cursor.
-<DT><A HREF="com/sleepycat/db/Sequence.html#close()"><B>close()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
+<DT><A HREF="./com/sleepycat/db/Sequence.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
<DD>Close a sequence.
-<DT><A HREF="com/sleepycat/bind/package-summary.html"><B>com.sleepycat.bind</B></A> - package com.sleepycat.bind<DD>Bindings between database entries and Java objects.<DT><A HREF="com/sleepycat/bind/serial/package-summary.html"><B>com.sleepycat.bind.serial</B></A> - package com.sleepycat.bind.serial<DD>Bindings that use Java serialization.<DT><A HREF="com/sleepycat/bind/tuple/package-summary.html"><B>com.sleepycat.bind.tuple</B></A> - package com.sleepycat.bind.tuple<DD>Bindings that use sequences of primitive fields, or tuples.<DT><A HREF="com/sleepycat/collections/package-summary.html"><B>com.sleepycat.collections</B></A> - package com.sleepycat.collections<DD>Data access based on the standard Java collections API.<DT><A HREF="com/sleepycat/db/package-summary.html"><B>com.sleepycat.db</B></A> - package com.sleepycat.db<DD>Berkeley DB Java API<br>
-<a href="/%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="/%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.<DT><A HREF="com/sleepycat/util/package-summary.html"><B>com.sleepycat.util</B></A> - package com.sleepycat.util<DD>General utilities used throughout Berkeley DB.<DT><A HREF="com/sleepycat/db/Transaction.html#commit()"><B>commit()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/bind/package-summary.html"><B>com.sleepycat.bind</B></A> - package com.sleepycat.bind<DD>Bindings between database entries and Java objects.<DT><A HREF="./com/sleepycat/bind/serial/package-summary.html"><B>com.sleepycat.bind.serial</B></A> - package com.sleepycat.bind.serial<DD>Bindings that use Java serialization.<DT><A HREF="./com/sleepycat/bind/tuple/package-summary.html"><B>com.sleepycat.bind.tuple</B></A> - package com.sleepycat.bind.tuple<DD>Bindings that use sequences of primitive fields, or tuples.<DT><A HREF="./com/sleepycat/collections/package-summary.html"><B>com.sleepycat.collections</B></A> - package com.sleepycat.collections<DD>Data access based on the standard Java collections API.<DT><A HREF="./com/sleepycat/db/package-summary.html"><B>com.sleepycat.db</B></A> - package com.sleepycat.db<DD>Berkeley DB Java API<br>
+<a href="./../ref/toc.html" target="_top">[reference guide]</a> <a href="./../ref/java/program.html" target="_top">[Java programming notes]</a>.<DT><A HREF="./com/sleepycat/util/package-summary.html"><B>com.sleepycat.util</B></A> - package com.sleepycat.util<DD>General utilities used throughout Berkeley DB.<DT><A HREF="./com/sleepycat/db/Transaction.html#commit()"><B>commit()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>End the transaction.
-<DT><A HREF="com/sleepycat/db/Transaction.html#commitNoSync()"><B>commitNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#commitNoSync()"><B>commitNoSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>End the transaction, not committing synchronously.
-<DT><A HREF="com/sleepycat/db/Transaction.html#commitSync()"><B>commitSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#commitSync()"><B>commitSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>End the transaction, committing synchronously.
-<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html#commitTransaction()"><B>commitTransaction()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html#commitTransaction()"><B>commitTransaction()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">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/db/Transaction.html#commitWriteNoSync()"><B>commitWriteNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
-<DD>End the transaction, writing but not flushing the log.
-<DT><A HREF="com/sleepycat/collections/StoredSortedEntrySet.html#comparator()"><B>comparator()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><B>compact(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, CompactConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DD>Compact a Btree or Recno database or returns unused Btree,
+ Hash or Recno database pages to the underlying filesystem.
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><B>CompactConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Configuration for <A HREF="./com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operations.<DT><A HREF="./com/sleepycat/db/CompactConfig.html#CompactConfig()"><B>CompactConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Construct a default configuration object for compact operations.
+<DT><A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>CompactStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Statistics returned by a <A HREF="./com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A> operation.<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
<DD>Returns null since comparators are not supported.
-<DT><A HREF="com/sleepycat/collections/StoredSortedKeySet.html#comparator()"><B>comparator()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
<DD>Returns null since comparators are not supported.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#comparator()"><B>comparator()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
<DD>Returns null since comparators are not supported.
-<DT><A HREF="com/sleepycat/collections/StoredSortedValueSet.html#comparator()"><B>comparator()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
<DD>Returns null since comparators are not supported.
-<DT><A HREF="com/sleepycat/db/LogSequenceNumber.html#compare(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.LogSequenceNumber)"><B>compare(LogSequenceNumber, LogSequenceNumber)</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
+<DT><A HREF="./com/sleepycat/db/LogSequenceNumber.html#compare(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.LogSequenceNumber)"><B>compare(LogSequenceNumber, LogSequenceNumber)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
<DD>Compare two LogSequenceNumber objects.
-<DT><A HREF="com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><B>consume(Transaction, DatabaseEntry, DatabaseEntry, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)"><B>configuredCollection(Collection, CursorConfig)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Creates a configured collection from a given stored collection.
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)"><B>configuredList(List, CursorConfig)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Creates a configured list from a given stored list.
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)"><B>configuredMap(Map, CursorConfig)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Creates a configured map from a given stored map.
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)"><B>configuredSet(Set, CursorConfig)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Creates a configured set from a given stored set.
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)"><B>configuredSortedMap(SortedMap, CursorConfig)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Creates a configured sorted map from a given stored sorted map.
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)"><B>configuredSortedSet(SortedSet, CursorConfig)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Creates a configured sorted set from a given stored sorted set.
+<DT><A HREF="./com/sleepycat/db/ReplicationTimeoutType.html#CONNECTION_RETRY"><B>CONNECTION_RETRY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>
+<DD>Configure the amount of time the replication manager will wait before
+ trying to re-establish a connection to another site after a
+ communication failure.
+<DT><A HREF="./com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><B>consume(Transaction, DatabaseEntry, DatabaseEntry, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return the record number and data from the available record closest to
the head of the queue, and delete the record.
-<DT><A HREF="com/sleepycat/collections/StoredEntrySet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredEntrySet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
<DD>Returns true if this set contains the specified element.
-<DT><A HREF="com/sleepycat/collections/StoredKeySet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredKeySet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
<DD>Returns true if this set contains the specified key.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Returns true if this list contains the specified element.
-<DT><A HREF="com/sleepycat/collections/StoredValueSet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredValueSet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
<DD>Returns true if this set contains the specified element.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Returns true if this collection contains all of the elements in the
specified collection.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns true if this map contains the specified key.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns true if this map contains the specified value.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#count()"><B>count()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#count()"><B>count()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">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/Cursor.html#count()"><B>count()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#count()"><B>count()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Return a count of the number of data items for the key to which the
cursor refers.
-<DT><A HREF="com/sleepycat/db/Environment.html#createLockerID()"><B>createLockerID()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#count()"><B>count()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DD>Count the key/data pairs in the database without adding to the cache.
+<DT><A HREF="./com/sleepycat/db/Environment.html#createLockerID()"><B>createLockerID()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Allocate a locker ID.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(java.lang.Object, java.lang.Object)"><B>createSecondaryKey(Object, Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#createSecondaryKey(java.lang.Object, java.lang.Object)"><B>createSecondaryKey(Object, Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>Creates the index key object from primary key and entry objects.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
<DD>Creates the index key entry from primary key tuple entry and
deserialized data entry.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, TupleInput, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
<DD>Creates the index key from primary key tuple and data tuple.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, TupleInput, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#createSecondaryKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>createSecondaryKey(TupleInput, TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryKeyCreator.html#createSecondaryKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>createSecondaryKey(SecondaryDatabase, DatabaseEntry, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>
<DD>Creates a secondary key entry, given a primary key and data entry.
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>CurrentTransaction</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</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/Cursor.html" title="class in com.sleepycat.db"><B>Cursor</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A database cursor.<DT><A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>CursorConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specify the attributes of database cursor.<DT><A HREF="./com/sleepycat/db/CursorConfig.html#CursorConfig()"><B>CursorConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>An instance created using the default constructor is initialized with
+ the system's default settings.
</DL>
<HR>
<A NAME="_D_"><!-- --></A><H2>
<B>D</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/CacheFilePriority.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
+<DT><A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>Database</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A database handle.<DT><A HREF="./com/sleepycat/db/Database.html#Database(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>Database(String, String, DatabaseConfig)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DD>Open a database.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>DatabaseConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specify the attributes of a database.<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#DatabaseConfig()"><B>DatabaseConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>An instance created using the default constructor is initialized with
+ the system's default settings.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>DatabaseEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Encodes database key and data items as a byte array.<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#DatabaseEntry()"><B>DatabaseEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Construct a DatabaseEntry with null data.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#DatabaseEntry(byte[])"><B>DatabaseEntry(byte[])</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Construct a DatabaseEntry with a given byte array.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#DatabaseEntry(byte[], int, int)"><B>DatabaseEntry(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#DatabaseEntry(java.nio.ByteBuffer)"><B>DatabaseEntry(ByteBuffer)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Construct a DatabaseEntry with a given native I/O buffer.
+<DT><A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>DatabaseException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The root of all database exceptions.<DT><A HREF="./com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String)"><B>DatabaseException(String)</B></A> -
+Constructor for exception com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
+<DD>Construct an exception with the specified message.
+<DT><A HREF="./com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String, int)"><B>DatabaseException(String, int)</B></A> -
+Constructor for exception com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
+<DD>Construct an exception with the specified message and error number.
+<DT><A HREF="./com/sleepycat/db/DatabaseException.html#DatabaseException(java.lang.String, int, com.sleepycat.db.Environment)"><B>DatabaseException(String, int, Environment)</B></A> -
+Constructor for exception com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
+<DD>Construct an exception with the specified message and error number
+ associated with a database environment handle.
+<DT><A HREF="./com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>DatabaseStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Statistics for a single database.<DT><A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>DatabaseType</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Database types.<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#dataBinding"><B>dataBinding</B></A> -
+Variable in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#dataBinding"><B>dataBinding</B></A> -
+Variable in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#dataBinding"><B>dataBinding</B></A> -
+Variable in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>DeadlockException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>DeadlockException is thrown to a thread of control 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.<DT><A HREF="./com/sleepycat/db/CacheFilePriority.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
<DD>The default priority.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Default configuration used if null is passed to
- <A HREF="com/sleepycat/db/Environment.html#checkpoint(com.sleepycat.db.CheckpointConfig)"><CODE>Environment.checkpoint</CODE></A>.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+ <A HREF="./com/sleepycat/db/Environment.html#checkpoint(com.sleepycat.db.CheckpointConfig)"><CODE>Environment.checkpoint</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
<DD>Default configuration used if null is passed to methods that create a
cursor.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>Default configuration used if null is passed to methods that create a
+ cursor.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>An instance created using the default constructor is initialized
+ with the system's default settings.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/JoinConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
-<DD>Default configuration used if null is passed to <A HREF="com/sleepycat/db/Database.html#join(com.sleepycat.db.Cursor[], com.sleepycat.db.JoinConfig)"><CODE>Database.join</CODE></A>
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/db/JoinConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
+<DD>Default configuration used if null is passed to <A HREF="./com/sleepycat/db/Database.html#join(com.sleepycat.db.Cursor[], com.sleepycat.db.JoinConfig)"><CODE>Database.join</CODE></A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Use whatever lock policy was specified when the database environment
was created.
-<DT><A HREF="com/sleepycat/db/LockMode.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DT><A HREF="./com/sleepycat/db/LockMode.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
<DD>Acquire read locks for read operations and write locks for write
operations.
-<DT><A HREF="com/sleepycat/db/SecondaryConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/StatsConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Default configuration used if null is passed to methods that create a
+ cursor.
+<DT><A HREF="./com/sleepycat/db/StatsConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#DEFAULT"><B>DEFAULT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Default configuration used if null is passed to methods that create a
+ transaction.
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#DEFAULT"><B>DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
<DD>Default configuration used if null is passed to
- <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A>.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#DEFAULT_BUMP_SIZE"><B>DEFAULT_BUMP_SIZE</B></A> -
-Static variable in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><B>DEFAULT_INIT_SIZE</B></A> -
-Static variable in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#DEFAULT_MAX_RETRIES"><B>DEFAULT_MAX_RETRIES</B></A> -
-Static variable in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+ <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A>.
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#DEFAULT_BUMP_SIZE"><B>DEFAULT_BUMP_SIZE</B></A> -
+Static variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DD>The default amount that the buffer is increased when it is full.
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><B>DEFAULT_INIT_SIZE</B></A> -
+Static variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DD>The default initial size of the buffer if no initialSize parameter is
+ specified.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#DEFAULT_ITERATOR_BLOCK_SIZE"><B>DEFAULT_ITERATOR_BLOCK_SIZE</B></A> -
+Static variable in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD>The default number of records read at one time by iterators.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#DEFAULT_MAX_RETRIES"><B>DEFAULT_MAX_RETRIES</B></A> -
+Static variable in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>The default maximum number of retries.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#DEGREE_2"><B>DEGREE_2</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>A convenience instance to configure a cursor for degree 2 isolation.
-<DT><A HREF="com/sleepycat/db/LockMode.html#DEGREE_2"><B>DEGREE_2</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
-<DD>Degree 2 isolation provides for cursor stability but not repeatable
- reads.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#DIRTY_READ"><B>DIRTY_READ</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>A convenience instance to configure read operations performed by the
- cursor to return modified but not yet committed data.
-<DT><A HREF="com/sleepycat/db/LockMode.html#DIRTY_READ"><B>DIRTY_READ</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
-<DD>Read modified but not yet committed data.
-<DT><A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>Database</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>.<DD>A database handle.<DT><A HREF="com/sleepycat/db/Database.html#Database(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>Database(String, String, DatabaseConfig)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
-<DD>Open a database.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>DatabaseConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>.<DD>Specify the attributes of a database.<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#DatabaseConfig()"><B>DatabaseConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>An instance created using the default constructor is initialized with
- the system's default settings.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>DatabaseEntry</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>.<DD>Encodes database key and data items as a byte array.<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#DatabaseEntry()"><B>DatabaseEntry()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
-<DD>Construct a DatabaseEntry with null data.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#DatabaseEntry(byte[])"><B>DatabaseEntry(byte[])</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
-<DD>Construct a DatabaseEntry with a given byte array.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#DatabaseEntry(byte[], int, int)"><B>DatabaseEntry(byte[], int, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
-<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
-<DT><A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>DatabaseException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>.<DD>The root of all database exceptions.<DT><A HREF="com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>DatabaseStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db">DatabaseStats</A>.<DD>Statistics for a single database.<DT><A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>DatabaseType</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>.<DD>Database types.<DT><A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>DeadlockException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A>.<DD>DeadlockException is thrown to a thread of control 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.<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>DoubleBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
- wrapper or a <code>double</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html#DoubleBinding()"><B>DoubleBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/Cursor.html#delete()"><B>delete()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#DEGREE_2"><B>DEGREE_2</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/CursorConfig.html#READ_COMMITTED"><CODE>CursorConfig.READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/LockMode.html#DEGREE_2"><B>DEGREE_2</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/LockMode.html#READ_COMMITTED"><CODE>LockMode.READ_COMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/ReplicationConfig.html#DELAYCLIENT"><B>DELAYCLIENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>
+<DD>The client should delay synchronizing to a newly declared master
+ (defaults to off).
+<DT><A HREF="./com/sleepycat/db/Cursor.html#delete()"><B>delete()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Delete the key/data pair to which the cursor refers.
-<DT><A HREF="com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><B>delete(Transaction, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#delete(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><B>delete(Transaction, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Remove key/data pairs from the database.
-<DT><A HREF="com/sleepycat/db/Environment.html#detectDeadlocks(com.sleepycat.db.LockDetectMode)"><B>detectDeadlocks(LockDetectMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#detectDeadlocks(com.sleepycat.db.LockDetectMode)"><B>detectDeadlocks(LockDetectMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Run one iteration of the deadlock detector.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadCollection(java.util.Collection)"><B>dirtyReadCollection(Collection)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Creates a dirty-read collection from a given stored collection.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadList(java.util.List)"><B>dirtyReadList(List)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Creates a dirty-read list from a given stored list.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadMap(java.util.Map)"><B>dirtyReadMap(Map)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Creates a dirty-read map from a given stored map.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadSet(java.util.Set)"><B>dirtyReadSet(Set)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Creates a dirty-read set from a given stored set.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadSortedMap(java.util.SortedMap)"><B>dirtyReadSortedMap(SortedMap)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Creates a dirty-read sorted map from a given stored sorted map.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#dirtyReadSortedSet(java.util.SortedSet)"><B>dirtyReadSortedSet(SortedSet)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Creates a dirty-read sorted set from a given stored sorted set.
-<DT><A HREF="com/sleepycat/db/Transaction.html#discard()"><B>discard()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#DIRTY_READ"><B>DIRTY_READ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED"><CODE>CursorConfig.READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/LockMode.html#DIRTY_READ"><B>DIRTY_READ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/LockMode.html#READ_UNCOMMITTED"><CODE>LockMode.READ_UNCOMMITTED</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#dirtyReadCollection(java.util.Collection)"><B>dirtyReadCollection(Collection)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredCollections.html#configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredCollection(java.util.Collection, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read collection, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#dirtyReadList(java.util.List)"><B>dirtyReadList(List)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredCollections.html#configuredList(java.util.List, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredList(java.util.List, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read list, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#dirtyReadMap(java.util.Map)"><B>dirtyReadMap(Map)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredCollections.html#configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredMap(java.util.Map, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read map, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#dirtyReadSet(java.util.Set)"><B>dirtyReadSet(Set)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredCollections.html#configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredSet(java.util.Set, com.sleepycat.db.CursorConfig)</CODE></A> in
+ order to conform to ANSI database isolation terminology. To obtain a
+ dirty-read set, pass <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#dirtyReadSortedMap(java.util.SortedMap)"><B>dirtyReadSortedMap(SortedMap)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredCollections.html#configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredSortedMap(java.util.SortedMap, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read map, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#dirtyReadSortedSet(java.util.SortedSet)"><B>dirtyReadSortedSet(SortedSet)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredCollections.html#configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)"><CODE>StoredCollections.configuredSortedSet(java.util.SortedSet, com.sleepycat.db.CursorConfig)</CODE></A> in order to conform to ANSI database isolation
+ terminology. To obtain a dirty-read set, pass
+ <code>CursorConfig.READ_UNCOMMITTED</code></I>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#discard()"><B>discard()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>Free up all the per-process resources associated with the specified
- <A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><CODE>Transaction</CODE></A> handle, neither committing nor aborting the
+ <A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><CODE>Transaction</CODE></A> handle, neither committing nor aborting the
transaction.
-<DT><A HREF="com/sleepycat/collections/TransactionWorker.html#doWork()"><B>doWork()</B></A> -
-Method in interface com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A>
-<DD>Perform the work for a single transaction.
-<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)"><B>doubleToEntry(double, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>DoubleBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html#DoubleBinding()"><B>DoubleBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)"><B>doubleToEntry(double, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DD>Converts a simple <code>double</code> value into an entry buffer.
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html#doubleToEntry(double, com.sleepycat.db.DatabaseEntry)"><B>doubleToEntry(double, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
<DD>Converts a simple <code>double</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/db/Cursor.html#dup(boolean)"><B>dup(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/collections/TransactionWorker.html#doWork()"><B>doWork()</B></A> -
+Method in interface com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A>
+<DD>Perform the work for a single transaction.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#dup()"><B>dup()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/Cursor.html#dup(boolean)"><B>dup(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Return a new cursor with the same transaction and locker ID as the
original cursor.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#dup(boolean)"><B>dup(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#dup(boolean)"><B>dup(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Returns a new <code>SecondaryCursor</code> for the same transaction as
the original cursor.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#dupSecondary(boolean)"><B>dupSecondary(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
-<DD>Returns a new copy of the cursor as a <code>SecondaryCursor</code>.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#duplicates(java.lang.Object)"><B>duplicates(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#duplicates(java.lang.Object)"><B>duplicates(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns a new collection containing the values mapped to the given key
in this map.
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#duplicatesMap(java.lang.Object, com.sleepycat.bind.EntryBinding)"><B>duplicatesMap(Object, EntryBinding)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DD>Returns a new map from primary key to value for the subset of records
+ having a given secondary key (duplicates).
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#dupSecondary(boolean)"><B>dupSecondary(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DD>Returns a new copy of the cursor as a <code>SecondaryCursor</code>.
</DL>
<HR>
<A NAME="_E_"><!-- --></A><H2>
<B>E</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/ReplicationTransport.html#EID_BROADCAST"><B>EID_BROADCAST</B></A> -
-Static variable in interface com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationTransport.html#EID_BROADCAST"><B>EID_BROADCAST</B></A> -
+Static variable in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>
<DD>A message that should be broadcast to every environment in the
replication group.
-<DT><A HREF="com/sleepycat/db/ReplicationTransport.html#EID_INVALID"><B>EID_INVALID</B></A> -
-Static variable in interface com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationTransport.html#EID_INVALID"><B>EID_INVALID</B></A> -
+Static variable in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>
<DD>An invalid environment ID, and may be used to initialize environment ID
variables that are subsequently checked for validity.
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#EXPIRE"><B>EXPIRE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
-<DD>Reject lock requests which have timed out.
-<DT><A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>EntityBinding</B></A> - interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>.<DD>A binding between a key-value entry pair and an entity object.<DT><A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><B>EntryBinding</B></A> - interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>.<DD>A binding between a key or data entry and a key or data object.<DT><A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>Environment</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>.<DD>A database environment.<DT><A HREF="com/sleepycat/db/Environment.html#Environment(java.io.File, com.sleepycat.db.EnvironmentConfig)"><B>Environment(File, EnvironmentConfig)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
-<DD>Create a database environment handle.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>EnvironmentConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>.<DD>Specifies the attributes of an environment.<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#EnvironmentConfig()"><B>EnvironmentConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Create an EnvironmentConfig initialized with the system default settings.
-<DT><A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>ErrorHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A>.<DD>An interface specifying a callback function to be called when an error
-occurs in the Berkeley DB library.<DT><A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>ExceptionUnwrapper</B></A> - class com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>.<DD>Unwraps nested exceptions by calling the <A HREF="com/sleepycat/util/ExceptionWrapper.html#getDetail()"><CODE>ExceptionWrapper.getDetail()</CODE></A> method for exceptions that implement the
- <A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><CODE>ExceptionWrapper</CODE></A> interface.<DT><A HREF="com/sleepycat/util/ExceptionUnwrapper.html#ExceptionUnwrapper()"><B>ExceptionUnwrapper()</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>ExceptionWrapper</B></A> - interface com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>.<DD>Interface implemented by exceptions that can contain nested exceptions.<DT><A HREF="com/sleepycat/db/Environment.html#electReplicationMaster(int, int, int, int)"><B>electReplicationMaster(int, int, int, int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationTimeoutType.html#ELECTION_RETRY"><B>ELECTION_RETRY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>
+<DD>Configure the amount of time the replication manager will wait before
+ retrying a failed election.
+<DT><A HREF="./com/sleepycat/db/ReplicationTimeoutType.html#ELECTION_TIMEOUT"><B>ELECTION_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>
+<DD>The timeout period for an election.
+<DT><A HREF="./com/sleepycat/db/Environment.html#electReplicationMaster(int, int)"><B>electReplicationMaster(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Hold an election for the master of a replication group.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#entrySet()"><B>entrySet()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>EntityBinding</B></A> - Interface in <A HREF="./com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A><DD>A binding between a key-value entry pair and an entity object.<DT><A HREF="./com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><B>EntryBinding</B></A> - Interface in <A HREF="./com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A><DD>A binding between a key or data entry and a key or data object.<DT><A HREF="./com/sleepycat/collections/StoredMap.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns a set view of the mappings contained in this map.
-<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html#entryToBoolean(com.sleepycat.db.DatabaseEntry)"><B>entryToBoolean(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html#entryToBoolean(com.sleepycat.db.DatabaseEntry)"><B>entryToBoolean(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
<DD>Converts an entry buffer into a simple <code>boolean</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html#entryToByte(com.sleepycat.db.DatabaseEntry)"><B>entryToByte(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html#entryToByte(com.sleepycat.db.DatabaseEntry)"><B>entryToByte(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
<DD>Converts an entry buffer into a simple <code>byte</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html#entryToChar(com.sleepycat.db.DatabaseEntry)"><B>entryToChar(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html#entryToChar(com.sleepycat.db.DatabaseEntry)"><B>entryToChar(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
<DD>Converts an entry buffer into a simple <code>char</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)"><B>entryToDouble(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)"><B>entryToDouble(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
<DD>Converts an entry buffer into a simple <code>double</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)"><B>entryToFloat(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html#entryToDouble(com.sleepycat.db.DatabaseEntry)"><B>entryToDouble(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
+<DD>Converts an entry buffer into a simple <code>double</code> value.
+<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)"><B>entryToFloat(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DD>Converts an entry buffer into a simple <code>float</code> value.
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html#entryToFloat(com.sleepycat.db.DatabaseEntry)"><B>entryToFloat(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
<DD>Converts an entry buffer into a simple <code>float</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#entryToInput(com.sleepycat.db.DatabaseEntry)"><B>entryToInput(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#entryToInput(com.sleepycat.db.DatabaseEntry)"><B>entryToInput(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
<DD>Utility method to create a new tuple input object for reading the data
from a given buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html#entryToInt(com.sleepycat.db.DatabaseEntry)"><B>entryToInt(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html#entryToInt(com.sleepycat.db.DatabaseEntry)"><B>entryToInt(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
<DD>Converts an entry buffer into a simple <code>int</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html#entryToLong(com.sleepycat.db.DatabaseEntry)"><B>entryToLong(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html#entryToLong(com.sleepycat.db.DatabaseEntry)"><B>entryToLong(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
<DD>Converts an entry buffer into a simple <code>long</code> value.
-<DT><A HREF="com/sleepycat/bind/ByteArrayBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.<A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>
+<DT><A HREF="./com/sleepycat/bind/ByteArrayBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>
+<DT><A HREF="./com/sleepycat/bind/EntityBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.bind.<A HREF="./com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>
<DD>Converts key and data entry buffers into an entity Object.
-<DT><A HREF="com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>
+<DT><A HREF="./com/sleepycat/bind/EntryBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.bind.<A HREF="./com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>
<DD>Converts a entry buffer into an Object.
-<DT><A HREF="com/sleepycat/bind/RecordNumberBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
+<DT><A HREF="./com/sleepycat/bind/RecordNumberBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
<DD>Deserialize an object from an entry buffer.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#entryToObject(java.lang.Object, java.lang.Object)"><B>entryToObject(Object, Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#entryToObject(java.lang.Object, java.lang.Object)"><B>entryToObject(Object, Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>Constructs an entity object from deserialized key and data objects.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)"><B>entryToObject(TupleInput, Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
-<DD>Constructs an entity object from <A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key entry and
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)"><B>entryToObject(TupleInput, Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DD>Constructs an entity object from <A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key entry and
deserialized data entry objects.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)"><B>entryToObject(TupleInput, Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, java.lang.Object)"><B>entryToObject(TupleInput, Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
-<DD>Constructs a key or data object from a <A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DD>Constructs a key or data object from a <A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> entry.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput, TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
-<DD>Constructs an entity object from <A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key and data
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>entryToObject(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput, TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DD>Constructs an entity object from <A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleInput</CODE></A> key and data
entries.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput, TupleInput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#entryToObject(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleInput)"><B>entryToObject(TupleInput, TupleInput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/RecordNumberBinding.html#entryToRecordNumber(com.sleepycat.db.DatabaseEntry)"><B>entryToRecordNumber(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
+<DT><A HREF="./com/sleepycat/bind/RecordNumberBinding.html#entryToRecordNumber(com.sleepycat.db.DatabaseEntry)"><B>entryToRecordNumber(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
<DD>Utility method for use by bindings to translate a entry buffer to an
record number integer.
-<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html#entryToShort(com.sleepycat.db.DatabaseEntry)"><B>entryToShort(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html#entryToShort(com.sleepycat.db.DatabaseEntry)"><B>entryToShort(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
<DD>Converts an entry buffer into a simple <code>short</code> value.
-<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html#entryToString(com.sleepycat.db.DatabaseEntry)"><B>entryToString(DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html#entryToString(com.sleepycat.db.DatabaseEntry)"><B>entryToString(DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
<DD>Converts an entry buffer into a simple <code>String</code> value.
-<DT><A HREF="com/sleepycat/db/KeyRange.html#equal"><B>equal</B></A> -
-Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>Environment</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A database environment.<DT><A HREF="./com/sleepycat/db/Environment.html#Environment(java.io.File, com.sleepycat.db.EnvironmentConfig)"><B>Environment(File, EnvironmentConfig)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Create a database environment handle.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>EnvironmentConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specifies the attributes of an environment.<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#EnvironmentConfig()"><B>EnvironmentConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Create an EnvironmentConfig initialized with the system default settings.
+<DT><A HREF="./com/sleepycat/db/KeyRange.html#equal"><B>equal</B></A> -
+Variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
<DD>Zero if there is no matching key, and non-zero otherwise.
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
<DD>Compares this entry to a given entry as specified by <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#equals(java.lang.Object)" title="class or interface in java.util"><CODE>Map.Entry.equals(java.lang.Object)</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Compares the specified object with this collection for equality.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Compares the specified object with this list for equality.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Compares the specified object with this map for equality.
-<DT><A HREF="com/sleepycat/db/ErrorHandler.html#error(com.sleepycat.db.Environment, java.lang.String, java.lang.String)"><B>error(Environment, String, String)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Compares the data of two entries for byte-by-byte equality.
+<DT><A HREF="./com/sleepycat/db/ErrorHandler.html#error(com.sleepycat.db.Environment, java.lang.String, java.lang.String)"><B>error(Environment, String, String)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db">ErrorHandler</A>
<DD>A callback function to be called when an error occurs in the
Berkeley DB library.
+<DT><A HREF="./com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>ErrorHandler</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a callback function to be called when an error
+occurs in the Berkeley DB library.<DT><A HREF="./com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><B>EventHandler</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a callback function to be called when an event
+is sent from the Berkeley DB library.<DT><A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>EventType</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Event types.<DT><A HREF="./com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>ExceptionUnwrapper</B></A> - Class in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>Unwraps nested exceptions by calling the <A HREF="./com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>ExceptionWrapper.getCause()</CODE></A> method for exceptions that implement the
+ <A HREF="./com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><CODE>ExceptionWrapper</CODE></A> interface.<DT><A HREF="./com/sleepycat/util/ExceptionUnwrapper.html#ExceptionUnwrapper()"><B>ExceptionUnwrapper()</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>ExceptionWrapper</B></A> - Interface in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>Interface implemented by exceptions that can contain nested exceptions.<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#EXPIRE"><B>EXPIRE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DD>Reject lock requests which have timed out.
</DL>
<HR>
<A NAME="_F_"><!-- --></A><H2>
<B>F</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html#FORWARD_ROLL"><B>FORWARD_ROLL</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
-<DD>The log is being played forward; redo the operation described by the log
- record.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A> - class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>.<DD>A replacement for ByteArrayInputStream that does not synchronize every
- byte read.<DT><A HREF="com/sleepycat/util/FastInputStream.html#FastInputStream(byte[])"><B>FastInputStream(byte[])</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A> - Class in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>A replacement for ByteArrayInputStream that does not synchronize every
+ byte read.<DT><A HREF="./com/sleepycat/util/FastInputStream.html#FastInputStream(byte[])"><B>FastInputStream(byte[])</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Creates an input stream.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#FastInputStream(byte[], int, int)"><B>FastInputStream(byte[], int, int)</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#FastInputStream(byte[], int, int)"><B>FastInputStream(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Creates an input stream.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A> - class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>.<DD>A replacement for ByteArrayOutputStream that does not synchronize every
- byte read.<DT><A HREF="com/sleepycat/util/FastOutputStream.html#FastOutputStream()"><B>FastOutputStream()</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A> - Class in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>A replacement for ByteArrayOutputStream that does not synchronize every
+ byte read.<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#FastOutputStream()"><B>FastOutputStream()</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Creates an output stream with default sizes.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#FastOutputStream(int)"><B>FastOutputStream(int)</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#FastOutputStream(int)"><B>FastOutputStream(int)</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Creates an output stream with a default bump size and a given initial
size.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#FastOutputStream(int, int)"><B>FastOutputStream(int, int)</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#FastOutputStream(int, int)"><B>FastOutputStream(int, int)</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Creates an output stream with a given bump size and initial size.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#FastOutputStream(byte[])"><B>FastOutputStream(byte[])</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#FastOutputStream(byte[])"><B>FastOutputStream(byte[])</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Creates an output stream with a given initial buffer and a default
bump size.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#FastOutputStream(byte[], int)"><B>FastOutputStream(byte[], int)</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#FastOutputStream(byte[], int)"><B>FastOutputStream(byte[], int)</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Creates an output stream with a given initial buffer and a given
bump size.
-<DT><A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>FeedbackHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>.<DD>An interface specifying a function to be called to provide feedback.<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>FloatBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
- wrapper or a <code>float</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html#FloatBinding()"><B>FloatBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredSortedEntrySet.html#first()"><B>first()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>FeedbackHandler</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a function to be called to provide feedback.<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#first()"><B>first()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
<DD>Returns the first (lowest) element currently in this sorted set.
-<DT><A HREF="com/sleepycat/collections/StoredSortedKeySet.html#first()"><B>first()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#first()"><B>first()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
<DD>Returns the first (lowest) element currently in this sorted set.
-<DT><A HREF="com/sleepycat/collections/StoredSortedValueSet.html#first()"><B>first()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#first()"><B>first()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
<DD>Returns the first (lowest) element currently in this sorted set.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#firstKey()"><B>firstKey()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#firstKey()"><B>firstKey()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
<DD>Returns the first (lowest) key currently in this sorted map.
-<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html#floatToEntry(float, com.sleepycat.db.DatabaseEntry)"><B>floatToEntry(float, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>FloatBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html#FloatBinding()"><B>FloatBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html#floatToEntry(float, com.sleepycat.db.DatabaseEntry)"><B>floatToEntry(float, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
<DD>Converts a simple <code>float</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/db/Environment.html#freeLockerID(int)"><B>freeLockerID(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html#floatToEntry(float, com.sleepycat.db.DatabaseEntry)"><B>floatToEntry(float, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
+<DD>Converts a simple <code>float</code> value into an entry buffer.
+<DT><A HREF="./com/sleepycat/db/Environment.html#flushReplication()"><B>flushReplication()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Internal method: re-push the last log record to all clients, in case they've
+ lost messages and don't know it.
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#FORWARD_ROLL"><B>FORWARD_ROLL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DD>The log is being played forward; redo the operation described by the log
+ record.
+<DT><A HREF="./com/sleepycat/db/Environment.html#freeLockerID(int)"><B>freeLockerID(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Free a locker ID.
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html#fromFlag(int)"><B>fromFlag(int)</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#fromFlag(int)"><B>fromFlag(int)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DD>Internal: this is public only so it can be called from an internal
+ package.
+<DT><A HREF="./com/sleepycat/db/EventType.html#fromInt(int)"><B>fromInt(int)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
<DD>Internal: this is public only so it can be called from an internal
package.
</DL>
@@ -753,1701 +912,2029 @@ Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperat
<A NAME="_G_"><!-- --></A><H2>
<B>G</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockOperation.html#GET"><B>GET</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
-<DD>Get the lock defined by the values of the mode and obj fields, for
- the specified locker.
-<DT><A HREF="com/sleepycat/db/LockOperation.html#GET_TIMEOUT"><B>GET_TIMEOUT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
-<DD>Identical to LockOperation GET except that the value in the timeout
- field overrides any previously specified timeout value for this
- lock.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#get(int)"><B>get(int)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#get(int)"><B>get(int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Returns the element at the specified position in this list.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns the value to which this map maps the specified key.
-<DT><A HREF="com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>get(Transaction, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>get(Transaction, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Retrieves the key/data pair with the given key.
-<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>get(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#GET"><B>GET</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>Get the lock defined by the values of the mode and obj fields, for
+ the specified locker.
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#get(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>get(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Retrieves the key/data pair with the given key.
-<DT><A HREF="com/sleepycat/db/Sequence.html#get(com.sleepycat.db.Transaction, int)"><B>get(Transaction, int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
+<DT><A HREF="./com/sleepycat/db/Sequence.html#get(com.sleepycat.db.Transaction, int)"><B>get(Transaction, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
<DD>Return the next available element in the sequence and changes the sequence
value by <code>delta</code>.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#getAggressive()"><B>getAggressive()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to output
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#GET_TIMEOUT"><B>GET_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>Identical to LockOperation GET except that the value in the timeout
+ field overrides any previously specified timeout value for this
+ lock.
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#getAggressive()"><B>getAggressive()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to output
<b>all</b> the key/data pairs in the file that can be found.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getAlloc()"><B>getAlloc()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getAlloc()"><B>getAlloc()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Number of page allocations.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getAllocBuckets()"><B>getAllocBuckets()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getAllocBuckets()"><B>getAllocBuckets()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Number of hash buckets checked during allocation.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getAllocMaxBuckets()"><B>getAllocMaxBuckets()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getAllocMaxBuckets()"><B>getAllocMaxBuckets()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Maximum number of hash buckets checked during an allocation.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getAllocMaxPages()"><B>getAllocMaxPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getAllocMaxPages()"><B>getAllocMaxPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Maximum number of pages checked during an allocation.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getAllocPages()"><B>getAllocPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getAllocPages()"><B>getAllocPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Number of pages checked during allocation.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getAllowCreate()"><B>getAllowCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getAllowCreate()"><B>getAllowCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to create the database if it does not already exist.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getAllowCreate()"><B>getAllowCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to create any
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getAllowCreate()"><B>getAllowCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to create any
underlying files, as necessary.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getAllowCreate()"><B>getAllowCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getAllowCreate()"><B>getAllowCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured
to create the sequence if it does not already exist.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#getAllowNestedTransactions()"><B>getAllowNestedTransactions()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#getAllowNestedTransactions()"><B>getAllowNestedTransactions()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>Returns whether nested transactions will be created if
<code>run()</code> is called when a transaction is already active for
the current thread.
-<DT><A HREF="com/sleepycat/db/SecondaryConfig.html#getAllowPopulate()"><B>getAllowPopulate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#getAllowPopulate()"><B>getAllowPopulate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
<DD>Returns whether automatic population of the secondary is allowed.
-<DT><A HREF="com/sleepycat/db/Environment.html#getArchiveDatabases()"><B>getArchiveDatabases()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getArchiveDatabases()"><B>getArchiveDatabases()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the names of the database files that need to be archived in
order to recover the database from catastrophic failure.
-<DT><A HREF="com/sleepycat/db/Environment.html#getArchiveLogFiles(boolean)"><B>getArchiveLogFiles(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getArchiveLogFiles(boolean)"><B>getArchiveLogFiles(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the names of all of the log files that are no longer in use.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getAutoCommitNoSync()"><B>getAutoCommitNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Return if the auto-commit operations on the sequence are configure to not
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getAutoCommitNoSync()"><B>getAutoCommitNoSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Return true if the auto-commit operations on the sequence are configure to not
flush the transaction log..
-<DT><A HREF="com/sleepycat/db/HashStats.html#getBFree()"><B>getBFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
-<DD>The number of bytes free on bucket pages.
-<DT><A HREF="com/sleepycat/bind/serial/SerialBinding.html#getBaseClass()"><B>getBaseClass()</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBinding.html#getBaseClass()"><B>getBaseClass()</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
<DD>Returns the base class for this binding.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getBigBFree()"><B>getBigBFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getBFree()"><B>getBFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DD>The number of bytes free on bucket pages.
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getBigBFree()"><B>getBigBFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of bytes free on big item pages.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getBigPages()"><B>getBigPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getBigPages()"><B>getBigPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of big key/data pages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getBtreeComparator()"><B>getBtreeComparator()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getBtreeComparator()"><B>getBtreeComparator()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the Comparator used to compare keys in a Btree.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getBtreeMinKey()"><B>getBtreeMinKey()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getBtreeMinKey()"><B>getBtreeMinKey()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the minimum number of key/data pairs intended to be stored
on any single Btree leaf page.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getBtreePrefixCalculator()"><B>getBtreePrefixCalculator()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getBtreePrefixCalculator()"><B>getBtreePrefixCalculator()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the Btree prefix callback.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getBtreeRecordNumbers()"><B>getBtreeRecordNumbers()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the Btree is configured to support retrieval by record number.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getBuckets()"><B>getBuckets()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getBtreeRecordNumbers()"><B>getBtreeRecordNumbers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the Btree is configured to support retrieval by record number.
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getBuckets()"><B>getBuckets()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The the number of hash buckets.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#getBufferBytes()"><B>getBufferBytes()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#getBufferBytes()"><B>getBufferBytes()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Returns the underlying data being read.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#getBufferBytes()"><B>getBufferBytes()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#getBufferBytes()"><B>getBufferBytes()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Returns the buffer owned by this object.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#getBufferLength()"><B>getBufferLength()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#getBufferLength()"><B>getBufferLength()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Returns the end of the buffer being read.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#getBufferLength()"><B>getBufferLength()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#getBufferLength()"><B>getBufferLength()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Returns the length used in the internal buffer, i.e., the offset at
which data will be written next.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#getBufferOffset()"><B>getBufferOffset()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#getBufferOffset()"><B>getBufferOffset()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Returns the offset at which data is being read from the buffer.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#getBufferOffset()"><B>getBufferOffset()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#getBufferOffset()"><B>getBufferOffset()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Returns the offset of the internal buffer.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#getByteLength(char[])"><B>getByteLength(char[])</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getBulkFills()"><B>getBulkFills()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of times the bulk buffer filled up, forcing the buffer content
+ to be sent.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getBulkOverflows()"><B>getBulkOverflows()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of times a record was bigger than the entire bulk buffer,
+ and therefore had to be sent as a singleton.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getBulkRecords()"><B>getBulkRecords()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of records added to a bulk buffer.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getBulkTransfers()"><B>getBulkTransfers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of bulk buffers transferred (via a call to the
+ application's <A HREF="./com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)"><CODE>ReplicationTransport.send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)</CODE></A> method).
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#getByteLength(char[])"><B>getByteLength(char[])</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">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/util/UtfOps.html#getByteLength(char[], int, int)"><B>getByteLength(char[], int, int)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#getByteLength(char[], int, int)"><B>getByteLength(char[], int, int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">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/DatabaseConfig.html#getByteOrder()"><B>getByteOrder()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getByteOrder()"><B>getByteOrder()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return 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/db/DatabaseConfig.html#getByteSwapped()"><B>getByteSwapped()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getBytes()"><B>getBytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Bytes of cache (total cache size is st_gbytes + st_bytes).
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getByteSwapped()"><B>getByteSwapped()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return if the underlying database files were created on an architecture
of the same byte order as the current one.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getBytes()"><B>getBytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
-<DD>Bytes of cache (total cache size is st_gbytes + st_bytes).
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getCDBLockAllDatabases()"><B>getCDBLockAllDatabases()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the Concurrent Data Store applications are configured to
- perform locking on an environment-wide basis rather than on a
- per-database basis.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#getCData()"><B>getCData()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
-<DD>Whenever the system receives contact information from a new
- environment, a copy of the opaque data specified in the cdata
- parameter to the <A HREF="com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Environment.startReplication</CODE></A> is available
- from the getCDAta method.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getCacheCount()"><B>getCacheCount()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getCacheCount()"><B>getCacheCount()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the number of shared memory buffer pools, that is, the number
of caches.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getCacheCount()"><B>getCacheCount()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getCacheCount()"><B>getCacheCount()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the number of shared memory buffer pools, that is, the number
of caches.
-<DT><A HREF="com/sleepycat/db/Database.html#getCacheFile()"><B>getCacheFile()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getCacheFile()"><B>getCacheFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return the handle for the cache file underlying the database.
-<DT><A HREF="com/sleepycat/db/Environment.html#getCacheFileStats(com.sleepycat.db.StatsConfig)"><B>getCacheFileStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getCacheFileStats(com.sleepycat.db.StatsConfig)"><B>getCacheFileStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the database environment's per-file memory pool (that is, the
buffer cache) statistics.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getCacheHit()"><B>getCacheHit()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getCacheHit()"><B>getCacheHit()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Requested pages found in the cache.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getCacheHit()"><B>getCacheHit()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getCacheHit()"><B>getCacheHit()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Requested pages found in the cache.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getCacheMiss()"><B>getCacheMiss()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getCacheMiss()"><B>getCacheMiss()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Requested pages not found in the cache.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getCacheMiss()"><B>getCacheMiss()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getCacheMiss()"><B>getCacheMiss()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Requested pages not found in the cache.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getCacheSize()"><B>getCacheSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getCacheSize()"><B>getCacheSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the size of the shared memory buffer pool, that is, the cache.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getCacheSize()"><B>getCacheSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getCacheSize()"><B>getCacheSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the size of the shared memory buffer pool, that is, the cache.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getCacheSize()"><B>getCacheSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getCacheSize()"><B>getCacheSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Return the number of elements cached by a sequence handle..
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getCacheSize()"><B>getCacheSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getCacheSize()"><B>getCacheSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The number of values that will be cached in this handle.
-<DT><A HREF="com/sleepycat/db/Environment.html#getCacheStats(com.sleepycat.db.StatsConfig)"><B>getCacheStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getCacheStats(com.sleepycat.db.StatsConfig)"><B>getCacheStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/TupleSerialFactory.html#getCatalog()"><B>getCatalog()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
+<DT><A HREF="./com/sleepycat/collections/TupleSerialFactory.html#getCatalog()"><B>getCatalog()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
<DD>Returns the class catalog associated with this factory.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#getCharLength(byte[])"><B>getCharLength(byte[])</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/util/ExceptionWrapper.html#getCause()"><B>getCause()</B></A> -
+Method in interface com.sleepycat.util.<A HREF="./com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>
+<DD>Returns the nested exception or null if none is present.
+<DT><A HREF="./com/sleepycat/util/IOExceptionWrapper.html#getCause()"><B>getCause()</B></A> -
+Method in exception com.sleepycat.util.<A HREF="./com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html#getCause()"><B>getCause()</B></A> -
+Method in exception com.sleepycat.util.<A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#getCData()"><B>getCData()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DD>Whenever the system receives contact information from a new
+ environment, a copy of the opaque data specified in the cdata
+ parameter to the <A HREF="./com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Environment.startReplication</CODE></A> is available
+ from the getCDAta method.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getCDBLockAllDatabases()"><B>getCDBLockAllDatabases()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the Concurrent Data Store applications are configured to
+ perform locking on an environment-wide basis rather than on a
+ per-database basis.
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#getCharLength(byte[])"><B>getCharLength(byte[])</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Returns the number of characters represented by the given UTF string.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#getCharLength(byte[], int, int)"><B>getCharLength(byte[], int, int)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#getCharLength(byte[], int, int)"><B>getCharLength(byte[], int, int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Returns the number of characters represented by the given UTF string.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getChecksum()"><B>getChecksum()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database environment is configured to do checksum
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getChecksum()"><B>getChecksum()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database environment is configured to do checksum
verification of pages read into the cache from the backing
filestore.
-<DT><A HREF="com/sleepycat/bind/serial/ClassCatalog.html#getClassFormat(byte[])"><B>getClassFormat(byte[])</B></A> -
-Method in interface com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>
+<DT><A HREF="./com/sleepycat/bind/serial/ClassCatalog.html#getClassFormat(byte[])"><B>getClassFormat(byte[])</B></A> -
+Method in interface com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>
<DD>Return the ObjectStreamClass for the given class ID.
-<DT><A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html#getClassFormat(byte[])"><B>getClassFormat(byte[])</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
+<DT><A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html#getClassFormat(byte[])"><B>getClassFormat(byte[])</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/ClassCatalog.html#getClassID(java.io.ObjectStreamClass)"><B>getClassID(ObjectStreamClass)</B></A> -
-Method in interface com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>
+<DT><A HREF="./com/sleepycat/bind/serial/ClassCatalog.html#getClassID(java.io.ObjectStreamClass)"><B>getClassID(ObjectStreamClass)</B></A> -
+Method in interface com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>
<DD>Return the class ID for the current version of the given class
description.
-<DT><A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html#getClassID(java.io.ObjectStreamClass)"><B>getClassID(ObjectStreamClass)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
+<DT><A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html#getClassID(java.io.ObjectStreamClass)"><B>getClassID(ObjectStreamClass)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/StatsConfig.html#getClear()"><B>getClear()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBinding.html#getClassLoader()"><B>getClassLoader()</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
+<DD>Returns the class loader to be used during deserialization, or null if
+ a default class loader should be used.
+<DT><A HREF="./com/sleepycat/db/StatsConfig.html#getClear()"><B>getClear()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
<DD>Return if the statistics operation is configured to reset
statistics after they are returned.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#getCollection()"><B>getCollection()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getClientRerequests()"><B>getClientRerequests()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of times this client site received a "re-request" message,
+ indicating that a request it previously sent to another client could
+ not be serviced by that client.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getClientSvcMiss()"><B>getClientSvcMiss()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of "request" type messages received by this client that
+ could not be processed, forcing the originating requestor to try
+ sending the request to the master (or another client).
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getClientSvcReq()"><B>getClientSvcReq()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of "request" type messages received by this client.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#getCollection()"><B>getCollection()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Returns the collection associated with this iterator.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getConfig()"><B>getConfig()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getConfig()"><B>getConfig()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Return this cursor's configuration.
-<DT><A HREF="com/sleepycat/db/Database.html#getConfig()"><B>getConfig()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getConfig()"><B>getConfig()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return this Database object's configuration.
-<DT><A HREF="com/sleepycat/db/Environment.html#getConfig()"><B>getConfig()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getConfig()"><B>getConfig()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return this object's configuration.
-<DT><A HREF="com/sleepycat/db/JoinCursor.html#getConfig()"><B>getConfig()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
+<DT><A HREF="./com/sleepycat/db/JoinCursor.html#getConfig()"><B>getConfig()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
<DD>Returns this object's configuration.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getCurFile()"><B>getCurFile()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#getConfig()"><B>getConfig()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DD>Return this Database object's configuration.
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getCurFile()"><B>getCurFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The current log file number.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getCurMaxId()"><B>getCurMaxId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getCurMaxId()"><B>getCurMaxId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/LogStats.html#getCurOffset()"><B>getCurOffset()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getCurOffset()"><B>getCurOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The byte offset in the current log file.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getCurRecno()"><B>getCurRecno()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getCurRecno()"><B>getCurRecno()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The next available record number.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getCurrent(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getCurrent(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Returns the key/data pair to which the cursor refers.
-<DT><A HREF="com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getCurrent(LogSequenceNumber, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#getCurrent(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getCurrent(LogSequenceNumber, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Return the LogSequenceNumber and log record to which the log cursor
currently refers.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getCurrent(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getCurrent(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getCurrent(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Returns the key/data pair to which the cursor refers.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getCurrent()"><B>getCurrent()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getCurrent()"><B>getCurrent()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The current value of the sequence in the database.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getData()"><B>getData()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#getCursorConfig()"><B>getCursorConfig()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DD>Returns the cursor configuration that is used for all operations
+ performed via this container.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getData()"><B>getData()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the byte array.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getDataDirs()"><B>getDataDirs()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return the array of data directories.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getDatabase()"><B>getDatabase()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getDatabase()"><B>getDatabase()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Return the Database handle associated with this Cursor.
-<DT><A HREF="com/sleepycat/db/JoinCursor.html#getDatabase()"><B>getDatabase()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
+<DT><A HREF="./com/sleepycat/db/JoinCursor.html#getDatabase()"><B>getDatabase()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
<DD>Returns the primary database handle associated with this cursor.
-<DT><A HREF="com/sleepycat/db/Sequence.html#getDatabase()"><B>getDatabase()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
+<DT><A HREF="./com/sleepycat/db/Sequence.html#getDatabase()"><B>getDatabase()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
<DD>Return the Database handle associated with this sequence.
-<DT><A HREF="com/sleepycat/db/MemoryException.html#getDatabaseEntry()"><B>getDatabaseEntry()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">MemoryException</A>
-<DD>Returns the <A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A> object with insufficient memory
+<DT><A HREF="./com/sleepycat/db/MemoryException.html#getDatabaseEntry()"><B>getDatabaseEntry()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">MemoryException</A>
+<DD>Returns the <A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A> object with insufficient memory
to complete the operation to complete the operation.
-<DT><A HREF="com/sleepycat/db/Database.html#getDatabaseFile()"><B>getDatabaseFile()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getDatabaseFile()"><B>getDatabaseFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return the database's underlying file name.
-<DT><A HREF="com/sleepycat/db/Database.html#getDatabaseName()"><B>getDatabaseName()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getDatabaseName()"><B>getDatabaseName()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return the database name.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getDecrement()"><B>getDecrement()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Return if the sequence is configured to decrement.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#getDegree2()"><B>getDegree2()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>Return if the cursor is configured for degree 2 isolation.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#getDegree2()"><B>getDegree2()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Return if the transaction has been configured to have degree 2 isolation.
-<DT><A HREF="com/sleepycat/util/ExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
-Method in interface com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>
-<DD>Returns the nested exception or null if none is present.
-<DT><A HREF="com/sleepycat/util/IOExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getDirectDatabaseIO()"><B>getDirectDatabaseIO()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment has been configured to not buffer
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getDataDirs()"><B>getDataDirs()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the array of data directories.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getDataNIO()"><B>getDataNIO()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Return the java.nio.ByteBuffer.
+<DT><A HREF="./com/sleepycat/db/CompactStats.html#getDeadlock()"><B>getDeadlock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<DD>Return the if no transaction parameter was specified to
+ <A HREF="./com/sleepycat/db/Database.html#compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)"><CODE>Database.compact(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.CompactConfig)</CODE></A>, the number of deadlocks
+ which occurred..
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getDecrement()"><B>getDecrement()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Return true if the sequence is configured to decrement.
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#getDegree2()"><B>getDegree2()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/CursorConfig.html#getReadCommitted()"><CODE>CursorConfig.getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getDegree2()"><B>getDegree2()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/TransactionConfig.html#getReadCommitted()"><CODE>TransactionConfig.getReadCommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/util/ExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
+Method in interface com.sleepycat.util.<A HREF="./com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="./com/sleepycat/util/ExceptionWrapper.html#getCause()"><CODE>ExceptionWrapper.getCause()</CODE></A>.</I>
+<DT><A HREF="./com/sleepycat/util/IOExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
+Method in exception com.sleepycat.util.<A HREF="./com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="./com/sleepycat/util/IOExceptionWrapper.html#getCause()"><CODE>IOExceptionWrapper.getCause()</CODE></A>.</I>
+<DT><A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
+Method in exception com.sleepycat.util.<A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html#getCause()"><CODE>RuntimeExceptionWrapper.getCause()</CODE></A>.</I>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getDirectDatabaseIO()"><B>getDirectDatabaseIO()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment has been configured to not buffer
database files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getDirectLogIO()"><B>getDirectLogIO()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment has been configured to not buffer
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getDirectLogIO()"><B>getDirectLogIO()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment has been configured to not buffer
log files.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>Return if read operations performed by the cursor are configured to
- return modified but not yet committed data.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database is configured to support dirty reads.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Return if the transaction is configured to perform dirty reads.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getDiskFile()"><B>getDiskFile()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/CursorConfig.html#getReadUncommitted()"><CODE>CursorConfig.getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/DatabaseConfig.html#getReadUncommitted()"><CODE>DatabaseConfig.getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/TransactionConfig.html#getReadUncommitted()"><CODE>TransactionConfig.getReadUncommitted()</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getDiskFile()"><B>getDiskFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The log file number of the last record known to be on disk.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getDiskOffset()"><B>getDiskOffset()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getDiskOffset()"><B>getDiskOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The byte offset of the last record known to be on disk.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getDsyncLog()"><B>getDsyncLog()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment has been configured to flush log
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getDsyncDatabases()"><B>getDsyncDatabases()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment has been configured to flush database
+ writes to the backing disk before returning from the write system call.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getDsyncLog()"><B>getDsyncLog()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment has been configured to flush log
writes to the backing disk before returning from the write system
call.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getDup()"><B>getDup()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getDup()"><B>getDup()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of duplicate pages.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getDupFree()"><B>getDupFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getDupFree()"><B>getDupFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of bytes free on duplicate pages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getDupPages()"><B>getDupPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
-<DD>The number of database duplicate pages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getDupPagesFree()"><B>getDupPagesFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
-<DD>The number of bytes free in database duplicate pages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getDuplicateComparator()"><B>getDuplicateComparator()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getDuplicateComparator()"><B>getDuplicateComparator()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the duplicate data item comparison callback.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getDupmasters()"><B>getDupmasters()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getDupmasters()"><B>getDupmasters()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of duplicate master conditions detected.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getEgen()"><B>getEgen()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getDupPages()"><B>getDupPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DD>The number of database duplicate pages.
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getDupPagesFree()"><B>getDupPagesFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DD>The number of bytes free in database duplicate pages.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getEgen()"><B>getEgen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The current election generation number.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionCurWinner()"><B>getElectionCurWinner()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionCurWinner()"><B>getElectionCurWinner()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The election winner.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionGen()"><B>getElectionGen()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionGen()"><B>getElectionGen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The election generation number.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionLsn()"><B>getElectionLsn()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionLsn()"><B>getElectionLsn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The maximum LSN of election winner.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionNumSites()"><B>getElectionNumSites()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionNumSites()"><B>getElectionNumSites()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number sites expected to participate in elections.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionNumVotes()"><B>getElectionNumVotes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionNumVotes()"><B>getElectionNumVotes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of votes required to complete the election.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionPriority()"><B>getElectionPriority()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionPriority()"><B>getElectionPriority()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The election priority.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionStatus()"><B>getElectionStatus()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElections()"><B>getElections()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of elections held.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionSec()"><B>getElectionSec()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of seconds the last election took (the total election
+ time is this plus <A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionUsec()"><CODE>ReplicationStats.getElectionUsec()</CODE></A>).
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionStatus()"><B>getElectionStatus()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The current election phase (0 if no election is in progress).
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionTiebreaker()"><B>getElectionTiebreaker()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionsWon()"><B>getElectionsWon()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of elections won.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionTiebreaker()"><B>getElectionTiebreaker()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The election tiebreaker value.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionVotes()"><B>getElectionVotes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionUsec()"><B>getElectionUsec()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of microseconds the last election took (the total election
+ time is this plus <A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionSec()"><CODE>ReplicationStats.getElectionSec()</CODE></A>).
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getElectionVotes()"><B>getElectionVotes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The votes received this election round.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElections()"><B>getElections()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
-<DD>The number of elections held.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getElectionsWon()"><B>getElectionsWon()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
-<DD>The number of elections won.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getEmptyPages()"><B>getEmptyPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getEmptyPages()"><B>getEmptyPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of empty database pages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getEncrypted()"><B>getEncrypted()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database has been configured to perform encryption.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getEncrypted()"><B>getEncrypted()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getEncrypted()"><B>getEncrypted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database has been configured to perform encryption.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getEncrypted()"><B>getEncrypted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the database environment has been configured to perform
encryption.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#getEnvID()"><B>getEnvID()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
-<DD>Whenever a new master is elected, the environment ID of the new master
- is available from the getEnvID method.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getEnvId()"><B>getEnvId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getEnvId()"><B>getEnvId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The current environment ID.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getEnvPriority()"><B>getEnvPriority()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
-<DD>The current environment priority.
-<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html#getEnvironment()"><B>getEnvironment()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#getEnvID()"><B>getEnvID()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DD>Return the environment ID associated with the operation.
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html#getEnvironment()"><B>getEnvironment()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
<DD>Returns the underlying Berkeley DB environment.
-<DT><A HREF="com/sleepycat/db/Database.html#getEnvironment()"><B>getEnvironment()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
-<DD>Return the <A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle for the database environment
- underlying the <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/db/DatabaseException.html#getEnvironment()"><B>getEnvironment()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getEnvironment()"><B>getEnvironment()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DD>Return the <A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle for the database environment
+ underlying the <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/DatabaseException.html#getEnvironment()"><B>getEnvironment()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
<DD>Return the environment in which the exception occurred.
-<DT><A HREF="com/sleepycat/db/DatabaseException.html#getErrno()"><B>getErrno()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
-<DD>Return the system or C API error number that caused the exception.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getErrorHandler()"><B>getErrorHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getEnvPriority()"><B>getEnvPriority()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The current environment priority.
+<DT><A HREF="./com/sleepycat/db/DatabaseException.html#getErrno()"><B>getErrno()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
+<DD>Get the error number associated with this exception.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getErrorHandler()"><B>getErrorHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the function to be called if an error occurs.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getErrorHandler()"><B>getErrorHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getErrorHandler()"><B>getErrorHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the function to be called if an error occurs.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getErrorPrefix()"><B>getErrorPrefix()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getErrorPrefix()"><B>getErrorPrefix()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the prefix string that appears before error messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getErrorPrefix()"><B>getErrorPrefix()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getErrorPrefix()"><B>getErrorPrefix()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the prefix string that appears before error messages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getErrorStream()"><B>getErrorStream()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getErrorStream()"><B>getErrorStream()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the an OutputStream for displaying error messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getErrorStream()"><B>getErrorStream()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getErrorStream()"><B>getErrorStream()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the an OutputStream for displaying error messages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getExclusiveCreate()"><B>getExclusiveCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getEventHandler()"><B>getEventHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the object's methods to be called when a triggered event occurs.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getExclusiveCreate()"><B>getExclusiveCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method is configured
to fail if the database already exists.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getExclusiveCreate()"><B>getExclusiveCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getExclusiveCreate()"><B>getExclusiveCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method is configured to
fail if the database already exists.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getExtentSize()"><B>getExtentSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getExtentSize()"><B>getExtentSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The underlying database extent size, in pages.
-<DT><A HREF="com/sleepycat/db/StatsConfig.html#getFast()"><B>getFast()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
+<DT><A HREF="./com/sleepycat/db/StatsConfig.html#getFast()"><B>getFast()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
<DD>Return if the statistics operation is configured to return only the
values which do not require expensive actions.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getFeedbackHandler()"><B>getFeedbackHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getFeedbackHandler()"><B>getFeedbackHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the object's methods to be called to provide feedback.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getFeedbackHandler()"><B>getFeedbackHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getFeedbackHandler()"><B>getFeedbackHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the object's methods to be called to provide feedback.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getFfactor()"><B>getFfactor()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getFfactor()"><B>getFfactor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The desired fill factor specified at database-creation time.
-<DT><A HREF="com/sleepycat/db/LogSequenceNumber.html#getFile()"><B>getFile()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
+<DT><A HREF="./com/sleepycat/db/LogSequenceNumber.html#getFile()"><B>getFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
<DD>Return the file number component of the LogSequenceNumber.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getFileName()"><B>getFileName()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getFileName()"><B>getFileName()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>The name of the file.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getFirst(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#getFillPercent()"><B>getFillPercent()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Return the the desired fill percentage.
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getFirst(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the first key/data pair of the database, and return
that pair.
-<DT><A HREF="com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getFirst(LogSequenceNumber, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#getFirst(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getFirst(LogSequenceNumber, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Return the first LogSequenceNumber and log record.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getFirst(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getFirst(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the first key/data pair of the database, and return
that pair.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getFirstRecno()"><B>getFirstRecno()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getFirstRecno()"><B>getFirstRecno()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The first undeleted record in the database.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getFlags()"><B>getFlags()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getFlags()"><B>getFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The flags value for the sequence.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#getForce()"><B>getForce()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#getForce()"><B>getForce()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Return the configuration of the checkpoint force option.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getFree()"><B>getFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getFree()"><B>getFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of pages on the free list.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getFree()"><B>getFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getFree()"><B>getFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of pages on the free list.
-<DT><A HREF="com/sleepycat/db/PreparedTransaction.html#getGID()"><B>getGID()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>
-<DD>Return the global transaction ID for the transaction.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getGbytes()"><B>getGbytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#getFreeListOnly()"><B>getFreeListOnly()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Return true if the whether to skip page compaction.
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#getFreeSpace()"><B>getFreeSpace()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Return true if the whether to return pages to the filesystem.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getGbytes()"><B>getGbytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Gigabytes of cache (total cache size is st_gbytes + st_bytes).
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getGen()"><B>getGen()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getGen()"><B>getGen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The current generation number.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getHashBuckets()"><B>getHashBuckets()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/PreparedTransaction.html#getGID()"><B>getGID()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>
+<DD>Return the global transaction ID for the transaction.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashBuckets()"><B>getHashBuckets()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Number of hash buckets in buffer hash table.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getHashExamined()"><B>getHashExamined()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getHasher()"><B>getHasher()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return the database-specific hash function.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashExamined()"><B>getHashExamined()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Total number of hash elements traversed during hash table lookups.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getHashFillFactor()"><B>getHashFillFactor()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getHashFillFactor()"><B>getHashFillFactor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the hash table density.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getHashLongest()"><B>getHashLongest()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashLongest()"><B>getHashLongest()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>The longest chain ever encountered in buffer hash table lookups.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getHashMaxWait()"><B>getHashMaxWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashMaxWait()"><B>getHashMaxWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</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/CacheStats.html#getHashNowait()"><B>getHashNowait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashNowait()"><B>getHashNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</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/DatabaseConfig.html#getHashNumElements()"><B>getHashNumElements()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getHashNumElements()"><B>getHashNumElements()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the estimate of the final size of the hash table.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getHashSearches()"><B>getHashSearches()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashSearches()"><B>getHashSearches()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Total number of buffer hash table lookups.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getHashWait()"><B>getHashWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getHashWait()"><B>getHashWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</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/DatabaseConfig.html#getHasher()"><B>getHasher()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return the database-specific hash function.
-<DT><A HREF="com/sleepycat/db/Environment.html#getHome()"><B>getHome()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getHome()"><B>getHome()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the database environment's home directory.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getId()"><B>getId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getId()"><B>getId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The last allocated locker ID.
-<DT><A HREF="com/sleepycat/db/Transaction.html#getId()"><B>getId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#getId()"><B>getId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>Return the transaction's unique ID.
-<DT><A HREF="com/sleepycat/db/LockNotGrantedException.html#getIndex()"><B>getIndex()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
-<DD>Returns -1 when <A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was called, and
- returns the index of the failed LockRequest when <A HREF="com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getInitialValue()"><B>getInitialValue()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Return the initial value for a sequence..
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getInitializeCDB()"><B>getInitializeCDB()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured for the Concurrent
- Data Store product.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getInitializeCache()"><B>getInitializeCache()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured with a shared
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#getImmutableSecondaryKey()"><B>getImmutableSecondaryKey()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DD>Returns whether the secondary key is immutable.
+<DT><A HREF="./com/sleepycat/db/LockNotGrantedException.html#getIndex()"><B>getIndex()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
+<DD>Returns -1 when <A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was called, and
+ returns the index of the failed LockRequest when <A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getInitializeCache()"><B>getInitializeCache()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured with a shared
memory buffer pool.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getInitializeLocking()"><B>getInitializeLocking()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured for locking.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getInitializeLogging()"><B>getInitializeLogging()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured for logging.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getInitializeRegions()"><B>getInitializeRegions()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment has been configured to page-fault
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getInitializeCDB()"><B>getInitializeCDB()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured for the Concurrent
+ Data Store product.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getInitializeLocking()"><B>getInitializeLocking()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured for locking.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getInitializeLogging()"><B>getInitializeLogging()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured for logging.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getInitializeRegions()"><B>getInitializeRegions()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment has been configured to page-fault
shared regions into memory when initially creating or joining a
database environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getInitializeReplication()"><B>getInitializeReplication()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured for replication.
-<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html#getInstance(com.sleepycat.db.Environment)"><B>getInstance(Environment)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getInitializeReplication()"><B>getInitializeReplication()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured for replication.
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getInitialValue()"><B>getInitialValue()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Return the initial value for a sequence..
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html#getInstance(com.sleepycat.db.Environment)"><B>getInstance(Environment)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
<DD>Gets the CurrentTransaction accessor for a specified Berkeley DB
environment.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getIntPages()"><B>getIntPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getIntPages()"><B>getIntPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of database internal pages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getIntPagesFree()"><B>getIntPagesFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getIntPagesFree()"><B>getIntPagesFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of bytes free in database internal pages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getJoinEnvironment()"><B>getJoinEnvironment()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getIoWait()"><B>getIoWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Number of operations blocked waiting for I/O to complete.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#getIteratorBlockSize()"><B>getIteratorBlockSize()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD>Returns the number of records read at one time by iterators returned by
+ the <A HREF="./com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>StoredCollection.iterator()</CODE></A> method.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getJoinEnvironment()"><B>getJoinEnvironment()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the handle is configured to join an existing environment.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#getKBytes()"><B>getKBytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#getKBytes()"><B>getKBytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Return the checkpoint log data threshold, in kilobytes.
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#getKey()"><B>getKey()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#getKey()"><B>getKey()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
<DD>Returns the key of this entry.
-<DT><A HREF="com/sleepycat/db/Sequence.html#getKey()"><B>getKey()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
+<DT><A HREF="./com/sleepycat/db/Sequence.html#getKey()"><B>getKey()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
<DD>Return the DatabaseEntry used to open this sequence.
-<DT><A HREF="com/sleepycat/collections/TupleSerialFactory.html#getKeyCreator(java.lang.Class, java.lang.String)"><B>getKeyCreator(Class, String)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
+<DT><A HREF="./com/sleepycat/collections/TupleSerialFactory.html#getKeyCreator(java.lang.Class, java.lang.String)"><B>getKeyCreator(Class, String)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
<DD>Creates a <code>SecondaryKeyCreator</code> object for use in configuring
a <code>SecondaryDatabase</code>.
-<DT><A HREF="com/sleepycat/db/SecondaryConfig.html#getKeyCreator()"><B>getKeyCreator()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
-<DD>Returns the user-supplied object used for creating secondary keys.
-<DT><A HREF="com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><B>getKeyRange(Transaction, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#getKeyCreator()"><B>getKeyCreator()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DD>Returns the user-supplied object used for creating single-valued secondary
+ keys.
+<DT><A HREF="./com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><B>getKeyRange(Transaction, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return an estimate of the proportion of keys in the database less
than, equal to, and greater than the specified key.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#getLSN()"><B>getLSN()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
-<DD>Whenever processing a messages results in the processing of messages
- that are permanent, or a message carrying a DB_REP_PERMANENT flag
- was processed successfully, but was not written to disk, the LSN of
- the record is available from the getLSN method.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getLast(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getLast(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the last key/data pair of the database, and return
that pair.
-<DT><A HREF="com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getLast(LogSequenceNumber, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#getLast(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getLast(LogSequenceNumber, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Return the last LogSequenceNumber and log record.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getLast(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getLast(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the last key/data pair of the database, and return
that pair.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getLastCkp()"><B>getLastCkp()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getLastCkp()"><B>getLastCkp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The LSN of the last checkpoint.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getLastTxnId()"><B>getLastTxnId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getLastTxnId()"><B>getLastTxnId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The last transaction ID allocated.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getLastValue()"><B>getLastValue()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getLastValue()"><B>getLastValue()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The last cached value of the sequence.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getLeafPages()"><B>getLeafPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getLeafPages()"><B>getLeafPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of database leaf pages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getLeafPagesFree()"><B>getLeafPagesFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getLeafPagesFree()"><B>getLeafPagesFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of bytes free in database leaf pages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getLevels()"><B>getLevels()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getLevels()"><B>getLevels()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of levels in the database.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getLgBSize()"><B>getLgBSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/CompactStats.html#getLevels()"><B>getLevels()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<DD>Return the the number of levels removed from the
+ Btree or Recno database during the compaction phase.
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getLgBSize()"><B>getLgBSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The in-memory log record cache size.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getLgSize()"><B>getLgSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getLgSize()"><B>getLgSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The current log file size.
-<DT><A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><B>getLock(int, boolean, DatabaseEntry, LockRequestMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><B>getLock(int, boolean, DatabaseEntry, LockRequestMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Acquire a lock from the lock table.
-<DT><A HREF="com/sleepycat/db/LockNotGrantedException.html#getLock()"><B>getLock()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
-<DD>Returns null when <A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was called, and
- returns the lock in the failed LockRequest when <A HREF="com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#getLock()"><B>getLock()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/LockNotGrantedException.html#getLock()"><B>getLock()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
+<DD>Returns null when <A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was called, and
+ returns the lock in the failed LockRequest when <A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#getLock()"><B>getLock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Return the lock reference.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLockConflicts()"><B>getLockConflicts()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLockConflicts()"><B>getLockConflicts()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the locking conflicts matrix.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLockDetectMode()"><B>getLockDetectMode()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the deadlock detector is configured to run whenever a lock
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLockDetectMode()"><B>getLockDetectMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the deadlock detector is configured to run whenever a lock
conflict occurs.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLockDown()"><B>getLockDown()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to lock shared
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLockDown()"><B>getLockDown()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to lock shared
environment files and memory-mapped databases into memory.
-<DT><A HREF="com/sleepycat/db/Environment.html#getLockStats(com.sleepycat.db.StatsConfig)"><B>getLockStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getLockNowait()"><B>getLockNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The number of lock requests not immediately available due to conflicts,
+ for which the thread of control did not wait.
+<DT><A HREF="./com/sleepycat/db/Environment.html#getLockStats(com.sleepycat.db.StatsConfig)"><B>getLockStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the database environment's locking statistics.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLockTimeout()"><B>getLockTimeout()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLockTimeout()"><B>getLockTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the database environment lock timeout value, in microseconds;
a timeout of 0 means no timeout is set.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getLockTimeout()"><B>getLockTimeout()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getLockTimeout()"><B>getLockTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>Lock timeout value.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLogAutoRemove()"><B>getLogAutoRemove()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to to automatically remove log
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getLockWait()"><B>getLockWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The number of lock requests not immediately available due to conflicts,
+ for which the thread of control waited.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogAutoRemove()"><B>getLogAutoRemove()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to to automatically remove log
files that are no longer needed.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLogBufferSize()"><B>getLogBufferSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogBufferSize()"><B>getLogBufferSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the size of the in-memory log buffer, in bytes.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLogDirectory()"><B>getLogDirectory()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogDirectory()"><B>getLogDirectory()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the path of a directory to be used as the location of logging files.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getLogDuplicated()"><B>getLogDuplicated()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getLogDuplicated()"><B>getLogDuplicated()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of duplicate log records received.
-<DT><A HREF="com/sleepycat/db/Environment.html#getLogFileName(com.sleepycat.db.LogSequenceNumber)"><B>getLogFileName(LogSequenceNumber)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogFileMode()"><B>getLogFileMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the absolute file mode for created log files.
+<DT><A HREF="./com/sleepycat/db/Environment.html#getLogFileName(com.sleepycat.db.LogSequenceNumber)"><B>getLogFileName(LogSequenceNumber)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the name of the log file that contains the log record
specified by a LogSequenceNumber object.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLogInMemory()"><B>getLogInMemory()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to maintain transaction logs
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogInMemory()"><B>getLogInMemory()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to maintain transaction logs
in memory rather than on disk.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getLogQueued()"><B>getLogQueued()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getLogQueued()"><B>getLogQueued()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of log records currently queued.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getLogQueuedMax()"><B>getLogQueuedMax()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getLogQueuedMax()"><B>getLogQueuedMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The maximum number of log records ever queued at once.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getLogQueuedTotal()"><B>getLogQueuedTotal()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getLogQueuedTotal()"><B>getLogQueuedTotal()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The total number of log records queued.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLogRecordHandler()"><B>getLogRecordHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogRecordHandler()"><B>getLogRecordHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the handler for application-specific log records.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getLogRecords()"><B>getLogRecords()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getLogRecords()"><B>getLogRecords()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of log records received and appended to the log.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getLogRegionSize()"><B>getLogRegionSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getLogRegionSize()"><B>getLogRegionSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the size of the underlying logging subsystem region.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getLogRequested()"><B>getLogRequested()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getLogRequested()"><B>getLogRequested()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of log records missed and requested.
-<DT><A HREF="com/sleepycat/db/Environment.html#getLogStats(com.sleepycat.db.StatsConfig)"><B>getLogStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getLogStats(com.sleepycat.db.StatsConfig)"><B>getLogStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the database environment's logging statistics.
-<DT><A HREF="com/sleepycat/db/TransactionStats.Active.html#getLsn()"><B>getLsn()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#getLSN()"><B>getLSN()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DD>Whenever processing a messages results in the processing of messages
+ that are permanent, or a message carrying a DB_REP_PERMANENT flag
+ was processed successfully, but was not written to disk, the LSN of
+ the record is available from the getLSN method.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getLsn()"><B>getLsn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
<DD>The log sequence number of the transaction's first log record.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMMapSize()"><B>getMMapSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return the maximum file size, in bytes, for a file to be mapped into
- the process address space.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getMagic()"><B>getMagic()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getMagic()"><B>getMagic()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The magic number that identifies the file as a Btree database.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getMagic()"><B>getMagic()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getMagic()"><B>getMagic()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The magic number that identifies the file as a Hash file.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getMagic()"><B>getMagic()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getMagic()"><B>getMagic()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The magic number that identifies a file as a log file.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getMagic()"><B>getMagic()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getMagic()"><B>getMagic()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The magic number that identifies the file as a Queue file.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getMap()"><B>getMap()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getMap()"><B>getMap()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Requested pages mapped into the process' address space.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getMap()"><B>getMap()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMap()"><B>getMap()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</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/ReplicationStats.html#getMaster()"><B>getMaster()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMaster()"><B>getMaster()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The current master environment ID.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getMasterChanges()"><B>getMasterChanges()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMasterChanges()"><B>getMasterChanges()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of times the master has changed.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getMax()"><B>getMax()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getMax()"><B>getMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The maximum permitted value of the sequence.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getMaxCommitperflush()"><B>getMaxCommitperflush()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getMaxCommitperflush()"><B>getMaxCommitperflush()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The maximum number of commits contained in a single log flush.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getMaxKey()"><B>getMaxKey()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
-<DD>The maximum keys per page.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMaxLockObjects()"><B>getMaxLockObjects()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return the maximum number of locked objects.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMaxLockers()"><B>getMaxLockers()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#getMaximumSize()"><B>getMaximumSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DD>Return the maximum size for the file backing the database, or 0 if
+ no maximum file size has been configured.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxLockers()"><B>getMaxLockers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the maximum number of lockers.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getMaxLockers()"><B>getMaxLockers()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getMaxLockers()"><B>getMaxLockers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The maximum number of lockers possible.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMaxLocks()"><B>getMaxLocks()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxLockObjects()"><B>getMaxLockObjects()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the maximum number of locked objects.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxLocks()"><B>getMaxLocks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the maximum number of locks.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getMaxLocks()"><B>getMaxLocks()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getMaxLocks()"><B>getMaxLocks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The maximum number of locks possible.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMaxLogFileSize()"><B>getMaxLogFileSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxLogFileSize()"><B>getMaxLogFileSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the maximum size of a single file in the log, in bytes.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getMaxNactive()"><B>getMaxNactive()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxMutexes()"><B>getMaxMutexes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the total number of mutexes allocated.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getMaxNactive()"><B>getMaxNactive()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The maximum number of active transactions at any one time.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getMaxNlockers()"><B>getMaxNlockers()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getMaxNlockers()"><B>getMaxNlockers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The maximum number of lockers at any one time.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getMaxNlocks()"><B>getMaxNlocks()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getMaxNlocks()"><B>getMaxNlocks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The maximum number of locks at any one time.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getMaxNobjects()"><B>getMaxNobjects()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getMaxNobjects()"><B>getMaxNobjects()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The maximum number of lock objects at any one time.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getMaxObjects()"><B>getMaxObjects()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getMaxNsnapshot()"><B>getMaxNsnapshot()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DD>The maximum number of transactions on the snapshot list at any one time.
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getMaxObjects()"><B>getMaxObjects()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The maximum number of lock objects possible.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getMaxOpenfd()"><B>getMaxOpenfd()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMaxOpenfd()"><B>getMaxOpenfd()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Maximum number of open file descriptors.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#getMaxRetries()"><B>getMaxRetries()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxOpenFiles()"><B>getMaxOpenFiles()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the maximum number of file descriptors that will be opened concurrently..
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#getMaxPages()"><B>getMaxPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>For internal use only.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#getMaxRetries()"><B>getMaxRetries()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>Returns the maximum number of retries that will be performed when
deadlocks are detected.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getMaxTxns()"><B>getMaxTxns()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getMaxTxns()"><B>getMaxTxns()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The maximum number of active transactions configured.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getMaxWrite()"><B>getMaxWrite()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMaxWrite()"><B>getMaxWrite()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>The maximum number of sequential write operations scheduled by the library
when flushing dirty pages from the cache.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getMaxWriteSleep()"><B>getMaxWriteSleep()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxWrite()"><B>getMaxWrite()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the maximum number of sequential write operations.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMaxWriteSleep()"><B>getMaxWriteSleep()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>The number of microseconds the thread of control should pause before
scheduling further write operations.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#getMaximumSize()"><B>getMaximumSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
-<DD>Return the maximum size for the file backing the database, or 0 if
- no maximum file size has been configured.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getMessageHandler()"><B>getMessageHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMaxWriteSleep()"><B>getMaxWriteSleep()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the microseconds to pause before scheduling further write operations.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getMessageHandler()"><B>getMessageHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the function to be called with an informational message.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMessageHandler()"><B>getMessageHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMessageHandler()"><B>getMessageHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the function to be called with an informational message.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getMessageStream()"><B>getMessageStream()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getMessageStream()"><B>getMessageStream()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the an OutputStream for displaying informational messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMessageStream()"><B>getMessageStream()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMessageStream()"><B>getMessageStream()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the an OutputStream for displaying informational messages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getMetaFlags()"><B>getMetaFlags()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getMetaFlags()"><B>getMetaFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The metadata flags.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getMetaFlags()"><B>getMetaFlags()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getMetaFlags()"><B>getMetaFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The metadata flags.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getMetaFlags()"><B>getMetaFlags()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getMetaFlags()"><B>getMetaFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The metadata flags.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getMin()"><B>getMin()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getMin()"><B>getMin()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The minimum permitted value of the sequence.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getMinCommitperflush()"><B>getMinCommitperflush()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getMinCommitperflush()"><B>getMinCommitperflush()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The minimum number of commits contained in a single log flush that
contained a commit.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getMinKey()"><B>getMinKey()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getMinKey()"><B>getMinKey()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The minimum keys per page.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#getMinutes()"><B>getMinutes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#getMinutes()"><B>getMinutes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Return the checkpoint time threshold, in minutes.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getMmapSize()"><B>getMmapSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMmapSize()"><B>getMmapSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Maximum file size for mmap.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getMode()"><B>getMode()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMMapSize()"><B>getMMapSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the maximum file size, in bytes, for a file to be mapped into
+ the process address space.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getMode()"><B>getMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the mode used to create files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getMode()"><B>getMode()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMode()"><B>getMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the mode to use when creating underlying files and shared
memory segments.
-<DT><A HREF="com/sleepycat/db/LockNotGrantedException.html#getMode()"><B>getMode()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
-<DD>Returns the mode parameter when <A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was
+<DT><A HREF="./com/sleepycat/db/LockNotGrantedException.html#getMode()"><B>getMode()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
+<DD>Returns the mode parameter when <A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was
called, and returns the mode for the failed LockRequest when
- <A HREF="com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#getMode()"><B>getMode()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+ <A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#getMode()"><B>getMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Return the lock mode.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getMode()"><B>getMode()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getMode()"><B>getMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The mode of any created log files.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getMsgsBadgen()"><B>getMsgsBadgen()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMsgsBadgen()"><B>getMsgsBadgen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of messages received with a bad generation number.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getMsgsProcessed()"><B>getMsgsProcessed()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMsgsProcessed()"><B>getMsgsProcessed()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of messages received and processed.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getMsgsRecover()"><B>getMsgsRecover()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMsgsRecover()"><B>getMsgsRecover()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of messages ignored due to pending recovery.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getMsgsSendFailures()"><B>getMsgsSendFailures()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMsgsSendFailures()"><B>getMsgsSendFailures()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of failed message sends.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getMsgsSent()"><B>getMsgsSent()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getMsgsSent()"><B>getMsgsSent()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of messages sent.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getNaborts()"><B>getNaborts()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getMultiversion()"><B>getMultiversion()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database is configured for multiversion concurrency control.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMultiversion()"><B>getMultiversion()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the handle is configured to open all databases for multiversion
+ concurrency control.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMultiversionFreed()"><B>getMultiversionFreed()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Number of frozen buffers freed.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMultiversionFrozen()"><B>getMultiversionFrozen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Number of buffers frozen.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getMultiversionRef()"><B>getMultiversionRef()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DD>The number of buffer copies created by this transaction that remain in cache.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getMultiversionThawed()"><B>getMultiversionThawed()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Number of buffers thawed.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getMutexAlign()"><B>getMutexAlign()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The mutex alignment, in bytes.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMutexAlignment()"><B>getMutexAlignment()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the mutex alignment, in bytes.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getMutexCount()"><B>getMutexCount()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The total number of mutexes configured.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getMutexFree()"><B>getMutexFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The number of mutexes currently available.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMutexIncrement()"><B>getMutexIncrement()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the number of additional mutexes to allocate.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getMutexInuse()"><B>getMutexInuse()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The number of mutexes currently in use.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getMutexInuseMax()"><B>getMutexInuseMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The maximum number of mutexes ever in use.
+<DT><A HREF="./com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)"><B>getMutexStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Return the database environment's mutex statistics.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getMutexTasSpins()"><B>getMutexTasSpins()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The number of times test-and-set mutexes will spin without blocking.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getMutexTestAndSetSpins()"><B>getMutexTestAndSetSpins()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the test-and-set spin count.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getNaborts()"><B>getNaborts()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The number of transactions that have aborted.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getNactive()"><B>getNactive()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getNactive()"><B>getNactive()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The number of transactions that are currently active.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getNewsites()"><B>getNewsites()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#getName()"><B>getName()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DD>Get the user visible name for the transaction.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getName()"><B>getName()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DD>The transaction name, including the thread name if available.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getNewsites()"><B>getNewsites()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of new site messages received.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the next key/data pair and return that pair.
-<DT><A HREF="com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
+<DT><A HREF="./com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
<DD>Returns the next primary key resulting from the join operation.
-<DT><A HREF="com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
+<DT><A HREF="./com/sleepycat/db/JoinCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>
<DD>Returns the next primary key and data resulting from the join operation.
-<DT><A HREF="com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getNext(LogSequenceNumber, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#getNext(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getNext(LogSequenceNumber, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Return the next LogSequenceNumber and log record.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getNext(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNext(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the next key/data pair and return that pair.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>If the next key/data pair of the database is a duplicate data record for
the current key/data pair, move the cursor to the next key/data pair
of the database and return that pair.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getNextDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>If the next key/data pair of the database is a duplicate data record for
the current key/data pair, move the cursor to the next key/data pair
of the database and return that pair.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getNextLsn()"><B>getNextLsn()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getNextLsn()"><B>getNextLsn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>In replication environments configured as masters, the next LSN
expected.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextNoDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextNoDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the next non-duplicate key/data pair and return
that pair.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextNoDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getNextNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getNextNoDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the next non-duplicate key/data pair and return
that pair.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getNextPages()"><B>getNextPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getNextPages()"><B>getNextPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The next page number we expect to receive.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#getNoFile()"><B>getNoFile()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
-<DD>Return if the opening of backing temporary files for in-memory
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNobjects()"><B>getNobjects()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The number of current lock objects.
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#getNoFile()"><B>getNoFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DD>Return true if the opening of backing temporary files for in-memory
databases has been disallowed.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getNoLocking()"><B>getNoLocking()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to grant all requested mutual
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getNoLocking()"><B>getNoLocking()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to grant all requested mutual
exclusion mutexes and database locks without regard for their actual
availability.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getNoMMap()"><B>getNoMMap()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the library is configured to not map this database into
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getNoMMap()"><B>getNoMMap()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the library is configured to not map this database into
memory.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getNoMMap()"><B>getNoMMap()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to copy read-only database files
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getNoMMap()"><B>getNoMMap()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to copy read-only database files
into the local cache instead of potentially mapping them into process
memory.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#getNoOrderCheck()"><B>getNoOrderCheck()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#getNoOrderCheck()"><B>getNoOrderCheck()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to skip the
database checks for btree and duplicate sort order and for hashing.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getNoPanic()"><B>getNoPanic()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to ignore any panic state in
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getNoPanic()"><B>getNoPanic()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to ignore any panic state in
the database environment.
-<DT><A HREF="com/sleepycat/db/JoinConfig.html#getNoSort()"><B>getNoSort()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
+<DT><A HREF="./com/sleepycat/db/JoinConfig.html#getNoSort()"><B>getNoSort()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
<DD>Returns whether automatic sorting of the input cursors is disabled.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#getNoSync()"><B>getNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getNoSync()"><B>getNoSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
<DD>Return if the transaction is configured to not write or synchronously
flush the log it when commits.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#getNoWait()"><B>getNoWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Return if the transaction is configured to not wait if a lock
- request cannot be immediately granted.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNobjects()"><B>getNobjects()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
-<DD>The number of current lock objects.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getNowait()"><B>getNowait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getNowait()"><B>getNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The number of times that a thread of control was able to obtain handle
mutex without waiting.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getNumBegins()"><B>getNumBegins()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getNoWait()"><B>getNoWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Return if the transaction is configured to not wait if a lock
+ request cannot be immediately granted.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getNumBegins()"><B>getNumBegins()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The number of transactions that have begun.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getNumCache()"><B>getNumCache()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getNumCache()"><B>getNumCache()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Number of caches.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getNumCommits()"><B>getNumCommits()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getNumCommits()"><B>getNumCommits()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The number of transactions that have committed.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumConflicts()"><B>getNumConflicts()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
-<DD>The total number of locks not immediately available due to conflicts.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getNumData()"><B>getNumData()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getNumData()"><B>getNumData()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of key/data pairs or records in the database.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getNumData()"><B>getNumData()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getNumData()"><B>getNumData()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of key/data pairs in the database.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getNumData()"><B>getNumData()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getNumData()"><B>getNumData()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The number of records in the database.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumDeadlocks()"><B>getNumDeadlocks()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumDeadlocks()"><B>getNumDeadlocks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The number of deadlocks.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getNumKeys()"><B>getNumKeys()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumDowngrade()"><B>getNumDowngrade()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The total number of locks downgraded.
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getNumKeys()"><B>getNumKeys()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of keys or records in the database.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getNumKeys()"><B>getNumKeys()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getNumKeys()"><B>getNumKeys()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of unique keys in the database.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getNumKeys()"><B>getNumKeys()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getNumKeys()"><B>getNumKeys()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The number of records in the database.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumLockTimeouts()"><B>getNumLockTimeouts()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
-<DD>The number of lock requests that have timed out.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumLockers()"><B>getNumLockers()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumLockers()"><B>getNumLockers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The number of current lockers.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumLocks()"><B>getNumLocks()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumLocks()"><B>getNumLocks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The number of current locks.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumModes()"><B>getNumModes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumLockTimeouts()"><B>getNumLockTimeouts()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The number of lock requests that have timed out.
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumModes()"><B>getNumModes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The number of lock modes.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumNowaits()"><B>getNumNowaits()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
-<DD>The total number of lock requests failing because DB_LOCK_NOWAIT was
- set.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumReleases()"><B>getNumReleases()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumReleases()"><B>getNumReleases()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The total number of locks released.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumRequests()"><B>getNumRequests()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumRequests()"><B>getNumRequests()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The total number of locks requested.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getNumRestores()"><B>getNumRestores()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getNumRestores()"><B>getNumRestores()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
<DD>The number of transactions that have been restored.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getNumSites()"><B>getNumSites()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getNumSites()"><B>getNumSites()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of sites believed to be in the replication group.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getNumThrottles()"><B>getNumThrottles()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getNumSnapshot()"><B>getNumSnapshot()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DD>The number of transactions on the snapshot list.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getNumThrottles()"><B>getNumThrottles()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>Transmission limited.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getNumTxnTimeouts()"><B>getNumTxnTimeouts()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumTxnTimeouts()"><B>getNumTxnTimeouts()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>The number of transactions that have timed out.
-<DT><A HREF="com/sleepycat/db/LockNotGrantedException.html#getObj()"><B>getObj()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
-<DD>Returns the object parameter when <A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getNumUpgrade()"><B>getNumUpgrade()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The total number of locks upgraded.
+<DT><A HREF="./com/sleepycat/db/LockNotGrantedException.html#getObj()"><B>getObj()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
+<DD>Returns the object parameter when <A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was
called, and returns the object for the failed LockRequest when
- <A HREF="com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#getObj()"><B>getObj()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+ <A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#getObj()"><B>getObj()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Return the lock object.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getOffset()"><B>getOffset()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getOffset()"><B>getOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the byte offset into the data array.
-<DT><A HREF="com/sleepycat/db/LogSequenceNumber.html#getOffset()"><B>getOffset()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
+<DT><A HREF="./com/sleepycat/db/LogSequenceNumber.html#getOffset()"><B>getOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
<DD>Return the file offset component of the LogSequenceNumber.
-<DT><A HREF="com/sleepycat/db/LockNotGrantedException.html#getOp()"><B>getOp()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
-<DD>Returns 0 when <A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was called, and returns
- the op parameter for the failed LockRequest when <A HREF="com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#getOp()"><B>getOp()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/LockNotGrantedException.html#getOp()"><B>getOp()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>
+<DD>Returns 0 when <A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> was called, and returns
+ the op parameter for the failed LockRequest when <A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A> was called.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#getOp()"><B>getOp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Return the lock operation.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#getOrderCheckOnly()"><B>getOrderCheckOnly()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to do database
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#getOrderCheckOnly()"><B>getOrderCheckOnly()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to do database
checks for btree and duplicate sort order and for hashing, skipped
- by verification operations configured by <A HREF="com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getOutdated()"><B>getOutdated()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+ by verification operations configured by <A HREF="./com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getOutdated()"><B>getOutdated()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of outdated conditions detected.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getOverPages()"><B>getOverPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getOverflows()"><B>getOverflows()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DD>The number of overflow pages.
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getOverPages()"><B>getOverPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of database overflow pages.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getOverPagesFree()"><B>getOverPagesFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getOverPagesFree()"><B>getOverPagesFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The number of bytes free in database overflow pages.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getOverflows()"><B>getOverflows()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
-<DD>The number of overflow pages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getOverwrite()"><B>getOverwrite()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to overwrite files stored in
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getOverwrite()"><B>getOverwrite()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to overwrite files stored in
encrypted formats before deleting them.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getOvflFree()"><B>getOvflFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getOvflFree()"><B>getOvflFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The number of bytes free on overflow pages.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPageClean()"><B>getPageClean()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#getPackedIntByteLength()"><B>getPackedIntByteLength()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Returns the byte length of a packed integer.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPageClean()"><B>getPageClean()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Clean pages currently in the cache.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getPageCreate()"><B>getPageCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getPageCreate()"><B>getPageCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Pages created in the cache.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPageCreate()"><B>getPageCreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPageCreate()"><B>getPageCreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Pages created in the cache.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPageDirty()"><B>getPageDirty()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPageDirty()"><B>getPageDirty()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Dirty pages currently in the cache.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getPageIn()"><B>getPageIn()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getPageIn()"><B>getPageIn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Pages read into the cache.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPageIn()"><B>getPageIn()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPageIn()"><B>getPageIn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Pages read into the cache.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getPageOut()"><B>getPageOut()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getPageOut()"><B>getPageOut()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Pages written from the cache to the backing file.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPageOut()"><B>getPageOut()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPageOut()"><B>getPageOut()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Pages written from the cache to the backing file.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getPageSize()"><B>getPageSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPages()"><B>getPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Pages in the cache.
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getPages()"><B>getPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DD>The number of pages in the database.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getPagesDuplicated()"><B>getPagesDuplicated()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of duplicate pages received.
+<DT><A HREF="./com/sleepycat/db/CompactStats.html#getPagesExamine()"><B>getPagesExamine()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<DD>Return the the number of database pages reviewed
+ during the compaction phase.
+<DT><A HREF="./com/sleepycat/db/CompactStats.html#getPagesFree()"><B>getPagesFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<DD>Return the the number of database pages free during
+ the compaction phase.
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getPagesFree()"><B>getPagesFree()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DD>The number of bytes free in database pages.
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getPageSize()"><B>getPageSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The underlying database page size, in bytes.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#getPageSize()"><B>getPageSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#getPageSize()"><B>getPageSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>Page size in bytes.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getPageSize()"><B>getPageSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getPageSize()"><B>getPageSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the size of the pages used to hold items in the database, in bytes.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getPageSize()"><B>getPageSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getPageSize()"><B>getPageSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The underlying Hash database page (and bucket) size, in bytes.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getPageSize()"><B>getPageSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getPageSize()"><B>getPageSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The underlying database page size, in bytes.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPageTrickle()"><B>getPageTrickle()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
-<DD>Dirty pages written using <A HREF="com/sleepycat/db/Environment.html#trickleCacheWrite(int)"><CODE>Environment.trickleCacheWrite</CODE></A>.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getPages()"><B>getPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
-<DD>Pages in the cache.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getPages()"><B>getPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
-<DD>The number of pages in the database.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getPagesDuplicated()"><B>getPagesDuplicated()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
-<DD>The number of duplicate pages received.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getPagesFree()"><B>getPagesFree()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
-<DD>The number of bytes free in database pages.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getPagesRecords()"><B>getPagesRecords()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getPagesRecords()"><B>getPagesRecords()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of pages received and stored.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getPagesRequested()"><B>getPagesRequested()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getPagesRequested()"><B>getPagesRequested()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The number of pages missed and requested from the master.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getPanicHandler()"><B>getPanicHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/CompactStats.html#getPagesTruncated()"><B>getPagesTruncated()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<DD>Return the the number of database pages returned
+ to the filesystem.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getPageTrickle()"><B>getPageTrickle()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Dirty pages written using <A HREF="./com/sleepycat/db/Environment.html#trickleCacheWrite(int)"><CODE>Environment.trickleCacheWrite</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getPanicHandler()"><B>getPanicHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the function to be called if the database environment panics.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getPanicHandler()"><B>getPanicHandler()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getPanicHandler()"><B>getPanicHandler()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the function to be called if the database environment panics.
-<DT><A HREF="com/sleepycat/db/TransactionStats.Active.html#getParentId()"><B>getParentId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getParentId()"><B>getParentId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
<DD>The transaction ID of the parent transaction (or 0, if no parent).
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getPartial()"><B>getPartial()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getPartial()"><B>getPartial()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return whether this DatabaseEntry is configured to read or write partial
records.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getPartialLength()"><B>getPartialLength()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getPartialLength()"><B>getPartialLength()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the byte length of the partial record being read or written by
the application, in bytes.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getPartialOffset()"><B>getPartialOffset()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getPartialOffset()"><B>getPartialOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the offset of the partial record being read or written by the
application, in bytes.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrev(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getPid()"><B>getPid()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DD>The process ID of the process that owns the transaction.
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrev(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the previous key/data pair and return that pair.
-<DT><A HREF="com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getPrev(LogSequenceNumber, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#getPrev(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>getPrev(LogSequenceNumber, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Return the previous LogSequenceNumber and log record.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrev(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getPrev(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrev(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the previous key/data pair and return that pair.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>If the previous key/data pair of the database is a duplicate data record
for the current key/data pair, move the cursor to the previous key/data
pair of the database and return that pair.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getPrevDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>If the previous key/data pair of the database is a duplicate data record
for the current key/data pair, move the cursor to the previous key/data
pair of the database and return that pair.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevNoDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevNoDup(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the previous non-duplicate key/data pair and return
that pair.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevNoDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getPrevNoDup(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getPrevNoDup(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the previous non-duplicate key/data pair and return
that pair.
-<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#getPrimaryDatabase()"><B>getPrimaryDatabase()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#getPrimaryDatabase()"><B>getPrimaryDatabase()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Returns the primary database associated with this secondary database.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><B>getPrimitiveBinding(Class)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class)"><B>getPrimitiveBinding(Class)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
<DD>Creates a tuple binding for a primitive Java class.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#getPrintable()"><B>getPrintable()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#getPrintable()"><B>getPrintable()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to use printing
characters to where possible.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#getPriority()"><B>getPriority()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#getPriority()"><B>getPriority()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
<DD>Return the cache priority for pages from the specified file.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getPrivate()"><B>getPrivate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to only be accessed
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getPrivate()"><B>getPrivate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to only be accessed
by a single process.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getQueueExtentSize()"><B>getQueueExtentSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getQueueExtentSize()"><B>getQueueExtentSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return 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/DatabaseConfig.html#getQueueInOrder()"><B>getQueueInOrder()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getQueueInOrder()"><B>getQueueInOrder()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> method is configured to return
key/data pairs in order, always returning the key/data item from the
head of the queue.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getRangeMax()"><B>getRangeMax()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getRangeMax()"><B>getRangeMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Return the maximum value for the sequence.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getRangeMin()"><B>getRangeMin()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getRangeMin()"><B>getRangeMin()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Return the minimum value for the sequence.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getReLen()"><B>getReLen()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
-<DD>The length of fixed-length records.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getReLen()"><B>getReLen()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
-<DD>The length of the records.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getRePad()"><B>getRePad()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
-<DD>The padding byte value for fixed-length records.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getRePad()"><B>getRePad()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
-<DD>The padding byte value for the records.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getReadOnly()"><B>getReadOnly()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database is configured in read-only mode.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getReadOnly()"><B>getReadOnly()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the whether the environment handle is opened read-only.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getRecordDelimiter()"><B>getRecordDelimiter()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getRCount()"><B>getRCount()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of times the log has been read from disk.
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#getReadCommitted()"><B>getReadCommitted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>Return if the cursor is configured for read committed isolation.
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getReadCommitted()"><B>getReadCommitted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Return if the transaction is configured for read committed isolation.
+<DT><A HREF="./com/sleepycat/util/PackedInteger.html#getReadIntLength(byte[], int)"><B>getReadIntLength(byte[], int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<DD>Returns the number of bytes that would be read by <A HREF="./com/sleepycat/util/PackedInteger.html#readInt(byte[], int)"><CODE>PackedInteger.readInt(byte[], int)</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getReadLsn()"><B>getReadLsn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DD>The log sequence number of reads for snapshot transactions.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getReadOnly()"><B>getReadOnly()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database is configured in read-only mode.
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#getReadUncommitted()"><B>getReadUncommitted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>Return if read operations performed by the cursor are configured to
+ return modified but not yet committed data.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getReadUncommitted()"><B>getReadUncommitted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database is configured to support read uncommitted.
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getReadUncommitted()"><B>getReadUncommitted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Return if read operations performed by the transaction are configured to
+ return modified but not yet committed data.
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getRecord()"><B>getRecord()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of records written to this log.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getRecordDelimiter()"><B>getRecordDelimiter()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return 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/DatabaseConfig.html#getRecordLength()"><B>getRecordLength()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getRecordLength()"><B>getRecordLength()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the database record length, in bytes.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getRecordNumber(DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getRecordNumber(DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Return the record number associated with the cursor.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getRecordNumber()"><B>getRecordNumber()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getRecordNumber()"><B>getRecordNumber()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the record number encoded in this entry's buffer.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getRecordNumber(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getRecordNumber(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Return the record number associated with the cursor.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getRecordNumberAppender()"><B>getRecordNumberAppender()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getRecordNumberAppender()"><B>getRecordNumberAppender()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the function to call after the record number has been
selected but before the data has been stored into the database.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getRecordPad()"><B>getRecordPad()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getRecordPad()"><B>getRecordPad()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the padding character for short, fixed-length records for the
Queue and Recno access methods.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getRecordSource()"><B>getRecordSource()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getRecordSource()"><B>getRecordSource()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the name of an underlying flat text database file that is
read to initialize a transient record number index.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getRegSize()"><B>getRegSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
-<DD>Individual cache size.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getRegSize()"><B>getRegSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
-<DD>The size of the lock region.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getRegSize()"><B>getRegSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
-<DD>The size of the region.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getRegSize()"><B>getRegSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
-<DD>The size of the region.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</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/LockStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</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/LogStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</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/TransactionStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The number of times that a thread of control was able to obtain
+ the mutex region mutex without waiting.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getRegionNowait()"><B>getRegionNowait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</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/CacheStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</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/LockStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</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/LogStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</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/TransactionStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The number of times that a thread of control was forced to wait before
+ obtaining the mutex region mutex.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getRegionWait()"><B>getRegionWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</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/DatabaseConfig.html#getRenumbering()"><B>getRenumbering()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the logical record numbers are mutable, and change as
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getRegister()"><B>getRegister()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the check for process failure when the environment is opened.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getRegSize()"><B>getRegSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DD>Individual cache size.
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getRegSize()"><B>getRegSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DD>The size of the lock region.
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getRegSize()"><B>getRegSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The size of the region.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#getRegSize()"><B>getRegSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>The size of the mutex region, in bytes.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getRegSize()"><B>getRegSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DD>The size of the region.
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getReLen()"><B>getReLen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DD>The length of fixed-length records.
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getReLen()"><B>getReLen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DD>The length of the records.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getRenumbering()"><B>getRenumbering()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the logical record numbers are mutable, and change as
records are added to and deleted from the database.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getReplicationLimit()"><B>getReplicationLimit()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getRePad()"><B>getRePad()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DD>The padding byte value for fixed-length records.
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getRePad()"><B>getRePad()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DD>The padding byte value for the records.
+<DT><A HREF="./com/sleepycat/db/Environment.html#getReplicationConfig(com.sleepycat.db.ReplicationConfig)"><B>getReplicationConfig(ReplicationConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Get the configuration of the replication subsystem.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationLimit()"><B>getReplicationLimit()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the transmit limit in bytes for a single call to
- <A HREF="com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.
-<DT><A HREF="com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)"><B>getReplicationStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+ <A HREF="./com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationManagerAckPolicy()"><B>getReplicationManagerAckPolicy()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Get the network Ack policy used by the replication manager.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationManagerLocalSite()"><B>getReplicationManagerLocalSite()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Get the address of the local (this) site in a replication group.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationNumSites()"><B>getReplicationNumSites()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Get the total number of sites in the replication group.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationPriority()"><B>getReplicationPriority()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Get the current environments priority.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationRequestMax()"><B>getReplicationRequestMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Get the maximum amount of data sent in response to any request.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationRequestMin()"><B>getReplicationRequestMin()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Get the minimum amount of data sent in response to any request.
+<DT><A HREF="./com/sleepycat/db/Environment.html#getReplicationStats(com.sleepycat.db.StatsConfig)"><B>getReplicationStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the database environment's replication statistics.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getReplicationTransport()"><B>getReplicationTransport()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType)"><B>getReplicationTimeout(ReplicationTimeoutType)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Get the network timeout applied to the specified timeout type.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getReplicationTransport()"><B>getReplicationTransport()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the replication callback function used to transmit data using
the replication application's communication infrastructure.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()"><B>getReuseBuffer()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
-<DD>Return if the whether the entry is configured to reuse the buffer.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getReverseSplitOff()"><B>getReverseSplitOff()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the Btree has been configured to not do reverse splits.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getRoEvict()"><B>getRoEvict()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getReuseBuffer()"><B>getReuseBuffer()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Return true if the whether the entry is configured to reuse the buffer.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getReverseSplitOff()"><B>getReverseSplitOff()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the Btree has been configured to not do reverse splits.
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getRoEvict()"><B>getRoEvict()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Clean pages forced from the cache.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getRunFatalRecovery()"><B>getRunFatalRecovery()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getRunFatalRecovery()"><B>getRunFatalRecovery()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the handle is configured to run catastrophic recovery on
the database environment before opening it for use.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getRunRecovery()"><B>getRunRecovery()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getRunRecovery()"><B>getRunRecovery()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the handle is configured to run normal recovery on the
database environment before opening it for use.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#getRwEvict()"><B>getRwEvict()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#getRwEvict()"><B>getRwEvict()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>Dirty pages forced from the cache.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getSCount()"><B>getSCount()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
-<DD>The number of times the log has been flushed to disk.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#getSalvage()"><B>getSalvage()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Return if the <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> is configured to write the
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#getSalvage()"><B>getSalvage()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Return true if the <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> is configured to write the
key/data pairs from all databases in the file to the file stream
named by the outfile parameter..
-<DT><A HREF="com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getSCount()"><B>getSCount()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of times the log has been flushed to disk.
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the specified key/data pair, where both the key and
data items must match.
-<DT><A HREF="com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(Transaction, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(Transaction, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Retrieves the key/data pair with the given key and data value, that is, both
the key and data items must match.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getSearchBoth(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the specified secondary and primary key, where both
the primary and secondary key items must match.
-<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#getSearchBoth(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBoth(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Retrieves the key/data pair with the specified secondary and primary key, that
is, both the primary and secondary key items must match.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBothRange(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBothRange(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the specified key and closest matching data item of the
database.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBothRange(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getSearchBothRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchBothRange(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the specified secondary key and closest matching primary
key of the database.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKey(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKey(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the given key of the database, and return the datum
associated with the given key.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKey(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getSearchKey(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKey(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the given key of the database, and return the datum
associated with the given key.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKeyRange(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKeyRange(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the closest matching key of the database, and return
the data item associated with the matching key.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKeyRange(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getSearchKeyRange(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchKeyRange(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the closest matching key of the database, and return
the data item associated with the matching key.
-<DT><A HREF="com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Move the cursor to the specific numbered record of the database, and
return the associated key/data pair.
-<DT><A HREF="com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(Transaction, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(Transaction, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Retrieves the key/data pair associated with the specific numbered record of the database.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getSearchRecordNumber(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Move the cursor to the specific numbered record of the database, and
return the associated key/data pair.
-<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#getSearchRecordNumber(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockMode)"><B>getSearchRecordNumber(Transaction, DatabaseEntry, DatabaseEntry, DatabaseEntry, LockMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Retrieves the key/data pair associated with the specific numbered record of the database.
-<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#getSecondaryConfig()"><B>getSecondaryConfig()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#getSecondaryConfig()"><B>getSecondaryConfig()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Returns a copy of the secondary configuration of this database.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html#getSecondaryDatabase()"><B>getSecondaryDatabase()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html#getSecondaryDatabase()"><B>getSecondaryDatabase()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>
<DD>Return the SecondaryDatabase handle associated with this Cursor.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getSegmentId()"><B>getSegmentId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getSegmentId()"><B>getSegmentId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the base segment ID.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getSize()"><B>getSize()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBase.html#getSerialBufferSize()"><B>getSerialBufferSize()</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A>
+<DD>Returns the initial byte size of the output buffer.
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)"><B>getSerialOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A>
+<DD>Returns an empty SerialOutput instance that will be used by the serial
+ binding or key creator.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getSize()"><B>getSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the byte size of the data array.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getSnapshot()"><B>getSnapshot()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the any specified backing source file will be read in its
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getSnapshot()"><B>getSnapshot()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the any specified backing source file will be read in its
entirety when the database is opened.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getSortedDuplicates()"><B>getSortedDuplicates()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database is configured to support sorted duplicate data
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getSnapshot()"><B>getSnapshot()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Return true if the transaction is configured for Snapshot Isolation.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getSortedDuplicates()"><B>getSortedDuplicates()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database is configured to support sorted duplicate data
items.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getStartupComplete()"><B>getStartupComplete()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getStartupComplete()"><B>getStartupComplete()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The client site has completed its startup procedures and is now
handling live records from the master.
-<DT><A HREF="com/sleepycat/db/Database.html#getStats(com.sleepycat.db.Transaction, com.sleepycat.db.StatsConfig)"><B>getStats(Transaction, StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#getStats(com.sleepycat.db.Transaction, com.sleepycat.db.StatsConfig)"><B>getStats(Transaction, StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return database statistics.
-<DT><A HREF="com/sleepycat/db/Sequence.html#getStats(com.sleepycat.db.StatsConfig)"><B>getStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
+<DT><A HREF="./com/sleepycat/db/Sequence.html#getStats(com.sleepycat.db.StatsConfig)"><B>getStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>
<DD>Return statistical information about the sequence.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getStatus()"><B>getStatus()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getStatus()"><B>getStatus()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The current replication mode.
-<DT><A HREF="com/sleepycat/bind/serial/SerialOutput.html#getStreamHeader()"><B>getStreamHeader()</B></A> -
-Static method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial">SerialOutput</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialOutput.html#getStreamHeader()"><B>getStreamHeader()</B></A> -
+Static method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial">SerialOutput</A>
<DD>Returns the fixed stream header used for all serialized streams in
PROTOCOL_VERSION_2 format.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#getSync()"><B>getSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Return if the transaction is configured to not write or synchronously
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#getStringByteLength()"><B>getStringByteLength()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Returns the byte length of a null-terminated UTF string in the data
+ buffer, including the terminator.
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#getSync()"><B>getSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Return if the transaction is configured to write and synchronously
flush the log it when commits.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getSystemMemory()"><B>getSystemMemory()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to allocate memory
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getSystemMemory()"><B>getSystemMemory()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to allocate memory
from system shared memory instead of from memory backed by the
filesystem.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTemporaryDirectory()"><B>getTemporaryDirectory()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTemporaryDirectory()"><B>getTemporaryDirectory()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the path of a directory to be used as the location of
temporary files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTestAndSetSpins()"><B>getTestAndSetSpins()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTestAndSetSpins()"><B>getTestAndSetSpins()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the number of times test-and-set mutexes should spin before
blocking.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getThreaded()"><B>getThreaded()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the handle is configured to be <em>free-threaded</em>.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getTimeCkp()"><B>getTimeCkp()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getThreaded()"><B>getThreaded()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the handle is configured to be <em>free-threaded</em>.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getTimeCkp()"><B>getTimeCkp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</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) time interface).
-<DT><A HREF="com/sleepycat/db/LockRequest.html#getTimeout()"><B>getTimeout()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#getTimeout()"><B>getTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Return the the lock timeout set for implicit transactions, in microseconds.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#getTimeout()"><B>getTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Return the lock timeout value.
-<DT><A HREF="com/sleepycat/collections/CurrentTransaction.html#getTransaction()"><B>getTransaction()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">CurrentTransaction</A>
+<DT><A HREF="./com/sleepycat/collections/CurrentTransaction.html#getTransaction()"><B>getTransaction()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections">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/PreparedTransaction.html#getTransaction()"><B>getTransaction()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>
+<DT><A HREF="./com/sleepycat/db/PreparedTransaction.html#getTransaction()"><B>getTransaction()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>
<DD>Return the transaction handle for the transaction.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#getTransactionConfig()"><B>getTransactionConfig()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getTransactional()"><B>getTransactional()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database open is enclosed within a transaction.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTransactional()"><B>getTransactional()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured for transactions.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#getTransactionConfig()"><B>getTransactionConfig()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>Returns the transaction configuration used for calling
- <A HREF="com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getTransactionNotDurable()"><B>getTransactionNotDurable()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database environment is configured to not write log
+ <A HREF="./com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getTransactionNotDurable()"><B>getTransactionNotDurable()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database environment is configured to not write log
records for this database.
-<DT><A HREF="com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)"><B>getTransactionStats(StatsConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getTransactionStats(com.sleepycat.db.StatsConfig)"><B>getTransactionStats(StatsConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the database environment's transactional statistics.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getTransactional()"><B>getTransactional()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database open is enclosed within a transaction.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTransactional()"><B>getTransactional()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured for transactions.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getTruncate()"><B>getTruncate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database has been configured to be physically truncated
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getTruncate()"><B>getTruncate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database has been configured to be physically truncated
by truncating the underlying file, discarding all previous databases
it might have held.
-<DT><A HREF="com/sleepycat/db/TransactionStats.Active.html#getTxnId()"><B>getTxnId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#getTupleBufferSize()"><B>getTupleBufferSize()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<DD>Returns the initial byte size of the output buffer.
+<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><B>getTupleOutput(Object)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<DD>Returns an empty TupleOutput instance that will be used by the tuple
+ binding or key creator.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#getTxnarray()"><B>getTxnarray()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DD>The array of active transactions.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getTxnId()"><B>getTxnId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
<DD>The transaction ID of the transaction.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTxnMaxActive()"><B>getTxnMaxActive()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return the minimum number of simultaneously active transactions
- supported by the database environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTxnNoSync()"><B>getTxnNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to not write or synchronously
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnMaxActive()"><B>getTxnMaxActive()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return the minimum number of simultaneously active transactions supported
+ by the database environment.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnNoSync()"><B>getTxnNoSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to not write or synchronously
flush the log on transaction commit.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTxnNotDurable()"><B>getTxnNotDurable()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to not write log records.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTxnTimeout()"><B>getTxnTimeout()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnNotDurable()"><B>getTxnNotDurable()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to not write log records.
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getTxnsApplied()"><B>getTxnsApplied()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DD>The number of transactions applied.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnSnapshot()"><B>getTxnSnapshot()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the handle is configured to run all transactions at snapshot
+ isolation.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnTimeout()"><B>getTxnTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the database environment transaction timeout value, in
microseconds; a timeout of 0 means no timeout is set.
-<DT><A HREF="com/sleepycat/db/LockStats.html#getTxnTimeout()"><B>getTxnTimeout()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#getTxnTimeout()"><B>getTxnTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>Transaction timeout value.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTxnTimestamp()"><B>getTxnTimestamp()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnTimestamp()"><B>getTxnTimestamp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return the time to which recovery will be done, or 0 if recovery will
be done to the most current possible date.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getTxnWriteNoSync()"><B>getTxnWriteNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to write, but not synchronously
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getTxnWriteNoSync()"><B>getTxnWriteNoSync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to write, but not synchronously
flush, the log on transaction commit.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#getTxnarray()"><B>getTxnarray()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
-<DD>The array of active transactions.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getTxnsApplied()"><B>getTxnsApplied()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
-<DD>The number of transactions applied.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getType()"><B>getType()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getType()"><B>getType()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Return the type of the database.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#getUnlink()"><B>getUnlink()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
-<DD>Return if the file will be removed when the last reference to it is
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#getUnlink()"><B>getUnlink()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DD>Return true if the file will be removed when the last reference to it is
closed.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getUnsortedDuplicates()"><B>getUnsortedDuplicates()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database is configured to support duplicate data items.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getUseEnvironment()"><B>getUseEnvironment()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to accept information
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getUnsortedDuplicates()"><B>getUnsortedDuplicates()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database is configured to support duplicate data items.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getUseEnvironment()"><B>getUseEnvironment()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to accept information
from the process environment when naming files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getUseEnvironmentRoot()"><B>getUseEnvironmentRoot()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the database environment is configured to accept information
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getUseEnvironmentRoot()"><B>getUseEnvironmentRoot()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the database environment is configured to accept information
from the process environment when naming files if the process has
appropriate permissions.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getUserBuffer()"><B>getUserBuffer()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
-<DD>Return if the whether the buffer in this entry is owned by the
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getUserBuffer()"><B>getUserBuffer()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Return true if the whether the buffer in this entry is owned by the
application.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()"><B>getUserBufferLength()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#getUserBufferLength()"><B>getUserBufferLength()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Return the length of the application's buffer.
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#getValue()"><B>getValue()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#getValue()"><B>getValue()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
<DD>Returns the value of this entry.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getValue()"><B>getValue()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getValue()"><B>getValue()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The current cached value of the sequence.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getVerboseDeadlock()"><B>getVerboseDeadlock()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getVerboseDeadlock()"><B>getVerboseDeadlock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return if the database environment is configured to display
additional information when doing deadlock detection.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getVerboseRecovery()"><B>getVerboseRecovery()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getVerboseRecovery()"><B>getVerboseRecovery()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return if the database environment is configured to display
additional information when performing recovery.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getVerboseReplication()"><B>getVerboseReplication()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getVerboseRegister()"><B>getVerboseRegister()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return if the database environment is configured to display
+ additional information concerning support for the
+ <A HREF="./com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>EnvironmentConfig.setRegister(boolean)</CODE></A> method.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getVerboseReplication()"><B>getVerboseReplication()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return if the database environment is configured to display
additional information when processing replication messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getVerboseWaitsFor()"><B>getVerboseWaitsFor()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getVerboseWaitsFor()"><B>getVerboseWaitsFor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Return if the database environment is configured to display the
waits-for table when doing deadlock detection.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#getVersion()"><B>getVersion()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#getVersion()"><B>getVersion()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>The version of the Btree database.
-<DT><A HREF="com/sleepycat/db/HashStats.html#getVersion()"><B>getVersion()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#getVersion()"><B>getVersion()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>The version of the Hash database.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getVersion()"><B>getVersion()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getVersion()"><B>getVersion()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The version of the log file type.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#getVersion()"><B>getVersion()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#getVersion()"><B>getVersion()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>The version of the Queue database.
-<DT><A HREF="com/sleepycat/db/Environment.html#getVersionMajor()"><B>getVersionMajor()</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getVersionMajor()"><B>getVersionMajor()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the release major number.
-<DT><A HREF="com/sleepycat/db/Environment.html#getVersionMinor()"><B>getVersionMinor()</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getVersionMinor()"><B>getVersionMinor()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the release minor number.
-<DT><A HREF="com/sleepycat/db/Environment.html#getVersionPatch()"><B>getVersionPatch()</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getVersionPatch()"><B>getVersionPatch()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the release patch number.
-<DT><A HREF="com/sleepycat/db/Environment.html#getVersionString()"><B>getVersionString()</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#getVersionString()"><B>getVersionString()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return the release version information, suitable for display.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getWBytes()"><B>getWBytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
-<DD>The number of bytes over and above st_w_mbytes written to this log.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getWCount()"><B>getWCount()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
-<DD>The number of times the log has been written to disk.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getWCountFill()"><B>getWCountFill()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</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/LogStats.html#getWMbytes()"><B>getWMbytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
-<DD>The number of megabytes written to this log.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html#getWait()"><B>getWait()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#getWait()"><B>getWait()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
<DD>The number of times a thread of control was forced to wait on the
handle mutex.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#getWaitingLsn()"><B>getWaitingLsn()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getWaitingLsn()"><B>getWaitingLsn()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</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/ReplicationStats.html#getWaitingPages()"><B>getWaitingPages()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#getWaitingPages()"><B>getWaitingPages()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>The page number of the first page we have after missing pages being
waited for, or 0 if no pages are currently missing.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getWcBytes()"><B>getWcBytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
-<DD>The number of bytes over and above <A HREF="com/sleepycat/db/LogStats.html#getWcMbytes()"><CODE>LogStats.getWcMbytes</CODE></A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getWBytes()"><B>getWBytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of bytes over and above st_w_mbytes written to this log.
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getWcBytes()"><B>getWcBytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of bytes over and above <A HREF="./com/sleepycat/db/LogStats.html#getWcMbytes()"><CODE>LogStats.getWcMbytes</CODE></A>
written to this log since the last checkpoint.
-<DT><A HREF="com/sleepycat/db/LogStats.html#getWcMbytes()"><B>getWcMbytes()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getWcMbytes()"><B>getWcMbytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>The number of megabytes written to this log since the last checkpoint.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#getWrap()"><B>getWrap()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Return if the sequence will wrap around when it is incremented
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getWCount()"><B>getWCount()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of times the log has been written to disk.
+<DT><A HREF="./com/sleepycat/db/LogStats.html#getWCountFill()"><B>getWCountFill()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</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/LogStats.html#getWMbytes()"><B>getWMbytes()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DD>The number of megabytes written to this log.
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#getWrap()"><B>getWrap()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Return true if the sequence will wrap around when it is incremented
(decremented) past the specified maximum (minimum) value.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#getWriteCursor()"><B>getWriteCursor()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#getWriteCursor()"><B>getWriteCursor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
<DD>Return if the Concurrent Data Store environment cursor will be used to
update the database.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#getWriteNoSync()"><B>getWriteNoSync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Return if the transaction is configured to write but not synchronously
- flush the log it when commits.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#getXACreate()"><B>getXACreate()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Return if the database has been configured to be accessed via applications
+<DT><A HREF="./com/sleepycat/util/PackedInteger.html#getWriteIntLength(int)"><B>getWriteIntLength(int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<DD>Returns the number of bytes that would be written by <A HREF="./com/sleepycat/util/PackedInteger.html#writeInt(byte[], int, int)"><CODE>PackedInteger.writeInt(byte[], int, int)</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#getXACreate()"><B>getXACreate()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Return true if the database has been configured to be accessed via applications
running under an X/Open conformant Transaction Manager.
-<DT><A HREF="com/sleepycat/db/TransactionStats.Active.html#getXId()"><B>getXId()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
-<DD>If the transaction is an XA transaction, the XA global
- transaction ID.
-<DT><A HREF="com/sleepycat/db/TransactionStats.Active.html#getXaStatus()"><B>getXaStatus()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getXaStatus()"><B>getXaStatus()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
<DD>If the transaction is an XA transaction, the status of the
- transaction, otherwise 0.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#getYieldCPU()"><B>getYieldCPU()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Return if the system has been configured to yield the processor
+ transaction, otherwise 0.
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#getXId()"><B>getXId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DD>If the transaction is an XA transaction, the XA global
+ transaction ID.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#getYieldCPU()"><B>getYieldCPU()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Return true if the system has been configured to yield the processor
immediately after each page or mutex acquisition.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#getZeroTerminatedByteLength(byte[], int)"><B>getZeroTerminatedByteLength(byte[], int)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#getZeroTerminatedByteLength(byte[], int)"><B>getZeroTerminatedByteLength(byte[], int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Returns the byte length of a null terminated UTF string, not including
the terminator.
-<DT><A HREF="com/sleepycat/db/KeyRange.html#greater"><B>greater</B></A> -
-Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
+<DT><A HREF="./com/sleepycat/db/KeyRange.html#greater"><B>greater</B></A> -
+Variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
<DD>A value between 0 and 1, the proportion of keys greater than the
specified key.
</DL>
@@ -2455,584 +2942,657 @@ Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" titl
<A NAME="_H_"><!-- --></A><H2>
<B>H</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/DatabaseType.html#HASH"><B>HASH</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
-<DD>The database is a Hash.
-<DT><A HREF="com/sleepycat/db/CacheFilePriority.html#HIGH"><B>HIGH</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
-<DD>The second highest priority.
-<DT><A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>HashStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>.<DD>The HashStats object is used to return Hash database statistics.<DT><A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>Hasher</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A>.<DD>An application-specified, database hash function.<DT><A HREF="com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><B>handleLogRecord(Environment, DatabaseEntry, LogSequenceNumber, RecoveryOperation)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A>
+<DT><A HREF="./com/sleepycat/db/EventHandler.html#handleEvent(com.sleepycat.db.EventType)"><B>handleEvent(EventType)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db">EventHandler</A>
+<DD>A callback function to be called when an event is sent from the
+ Berkeley DB library.
+<DT><A HREF="./com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><B>handleLogRecord(Environment, DatabaseEntry, LogSequenceNumber, RecoveryOperation)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#hasNext()"><B>hasNext()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
-<DD>Returns true if this iterator has more elements when traversing in the
- forward direction.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#hasPrevious()"><B>hasPrevious()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
-<DD>Returns true if this iterator has more elements when traversing in the
- reverse direction.
-<DT><A HREF="com/sleepycat/db/Hasher.html#hash(com.sleepycat.db.Database, byte[], int)"><B>hash(Database, byte[], int)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseType.html#HASH"><B>HASH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
+<DD>The database is a Hash.
+<DT><A HREF="./com/sleepycat/db/Hasher.html#hash(com.sleepycat.db.Database, byte[], int)"><B>hash(Database, byte[], int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db">Hasher</A>
<DD>An application-specified, database-specific hash function.
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#hashCode()"><B>hashCode()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
<DD>Computes a hash code as specified by <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#hashCode()" title="class or interface in java.util"><CODE>Map.Entry.hashCode()</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#hashCode()"><B>hashCode()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredList.html#hashCode()"><B>hashCode()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#hashCode()"><B>hashCode()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#headMap(java.lang.Object)"><B>headMap(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Returns a hash code based on the data value.
+<DT><A HREF="./com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>Hasher</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An application-specified, database hash function.<DT><A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>HashStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The HashStats object is used to return Hash database statistics.<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#hasNext()"><B>hasNext()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DD>Returns true if this iterator has more elements when traversing in the
+ forward direction.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#hasPrevious()"><B>hasPrevious()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DD>Returns true if this iterator has more elements when traversing in the
+ reverse direction.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#headMap(java.lang.Object)"><B>headMap(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">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/collections/StoredSortedMap.html#headMap(java.lang.Object, boolean)"><B>headMap(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#headMap(java.lang.Object, boolean)"><B>headMap(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">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/collections/StoredSortedEntrySet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedEntrySet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
<DD>Returns a view of the portion of this sorted set whose elements are
strictly less than toMapEntry, optionally including toMapEntry.
-<DT><A HREF="com/sleepycat/collections/StoredSortedKeySet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedKeySet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/db/CacheFilePriority.html#HIGH"><B>HIGH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
+<DD>The second highest priority.
+<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html#host"><B>host</B></A> -
+Variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<DD>The name component of the site address.
</DL>
<HR>
<A NAME="_I_"><!-- --></A><H2>
<B>I</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>IOExceptionWrapper</B></A> - exception com.sleepycat.util.<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>.<DD>An IOException that can contain nested exceptions.<DT><A HREF="com/sleepycat/util/IOExceptionWrapper.html#IOExceptionWrapper(java.lang.Throwable)"><B>IOExceptionWrapper(Throwable)</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#INCOMP_NAME"><B>INCOMP_NAME</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>The name of the IN Compressor daemon thread.
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#indexKeyBinding"><B>indexKeyBinding</B></A> -
+Variable in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/LockRequestMode.html#IREAD"><B>IREAD</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
-<DD>Intention to read (shared).
-<DT><A HREF="com/sleepycat/db/LockRequestMode.html#IWR"><B>IWR</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
-<DD>Intention to read and write (shared).
-<DT><A HREF="com/sleepycat/db/LockRequestMode.html#IWRITE"><B>IWRITE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
-<DD>Intention to write (shared).
-<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>IntegerBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
- wrapper or an <code>int</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html#IntegerBinding()"><B>IntegerBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">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/bind/tuple/TupleBinding.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)"><B>inputToEntry(TupleInput, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#inputToEntry(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.db.DatabaseEntry)"><B>inputToEntry(TupleInput, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
<DD>Utility method to set the data in a entry buffer to the data in a tuple
input object.
-<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html#intToEntry(int, com.sleepycat.db.DatabaseEntry)"><B>intToEntry(int, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>IntegerBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Integer</code> primitive
+ wrapper or an <code>int</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html#IntegerBinding()"><B>IntegerBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html#intToEntry(int, com.sleepycat.db.DatabaseEntry)"><B>intToEntry(int, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
<DD>Converts a simple <code>int</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isDirtyRead()"><B>isDirtyRead()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
-<DD>Returns whether dirty-read is enabled for this container.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()"><B>isDirtyReadAllowed()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
-<DD>Returns whether dirty-read is allowed for this container.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isDupMaster()"><B>isDupMaster()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
-<DD>The replication group has more than one master.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isEmpty()"><B>isEmpty()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>IOExceptionWrapper</B></A> - Exception in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>An IOException that can contain nested exceptions.<DT><A HREF="./com/sleepycat/util/IOExceptionWrapper.html#IOExceptionWrapper(java.lang.Throwable)"><B>IOExceptionWrapper(Throwable)</B></A> -
+Constructor for exception com.sleepycat.util.<A HREF="./com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">IOExceptionWrapper</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#IREAD"><B>IREAD</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DD>Intention to read (shared).
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#isCurrentData(java.lang.Object)"><B>isCurrentData(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isDirtyRead()"><B>isDirtyRead()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method has been replaced by <A HREF="./com/sleepycat/collections/StoredContainer.html#getCursorConfig()"><CODE>StoredContainer.getCursorConfig()</CODE></A>.
+ <code>CursorConfig.isReadUncommitted</code> may be called to determine
+ whether dirty-read is enabled.</I>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isDirtyReadAllowed()"><B>isDirtyReadAllowed()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This method is deprecated with no replacement in this class.
+ In the DB product, <code>DatabaseConfig.getReadUncommitted</code> may be
+ called.</I>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns true if this map or collection contains no mappings or elements.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isHoldElection()"><B>isHoldElection()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
-<DD>An election is needed.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isNewMaster()"><B>isNewMaster()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#isIgnore()"><B>isIgnore()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DD>This message cannot be processed.
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#isNewMaster()"><B>isNewMaster()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
<DD>A new master has been elected.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isNewSite()"><B>isNewSite()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#isNewSite()"><B>isNewSite()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
<DD>The system received contact information from a new environment.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isNotPermanent()"><B>isNotPermanent()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#isNotPermanent()"><B>isNotPermanent()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
<DD>A message carrying a DB_REP_PERMANENT flag was processed successfully,
but was not written to disk.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isOrdered()"><B>isOrdered()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isOrdered()"><B>isOrdered()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns whether keys are ordered in this container.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isPermanent()"><B>isPermanent()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html#isPeer"><B>isPeer</B></A> -
+Variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<DD>This field is used to define if the HostAddress refers to a peer of the
+ current site, or not.
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#isPermanent()"><B>isPermanent()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
<DD>Processing this message resulted in the processing of records that
are permanent.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#isReadModifyWrite()"><B>isReadModifyWrite()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#isReadModifyWrite()"><B>isReadModifyWrite()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Returns whether write-locks will be obtained when reading with this
cursor.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isSecondary()"><B>isSecondary()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isSecondary()"><B>isSecondary()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns whether this container is a view on a secondary database rather
than directly on a primary database.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isStartupDone()"><B>isStartupDone()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
-<DD>The client completed startup synchronization.
-<DT><A HREF="com/sleepycat/db/ReplicationStatus.html#isSuccess()"><B>isSuccess()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#isSuccess()"><B>isSuccess()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
<DD>The operation succeeded.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isTransactional()"><B>isTransactional()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isTransactional()"><B>isTransactional()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
<DD>Returns whether the databases underlying this container are
transactional.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><B>isWriteAllowed()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#isWriteAllowed()"><B>isWriteAllowed()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">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/collections/StoredCollection.html#iterator()"><B>iterator()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#iterator()"><B>iterator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Returns an iterator over the elements in this collection.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#iterator(boolean)"><B>iterator(boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
-<DD>Returns a read or read-write iterator over the elements in this
- collection.
-<DT><A HREF="com/sleepycat/collections/StoredCollections.html#iterator(java.util.Iterator)"><B>iterator(Iterator)</B></A> -
-Static method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
-<DD>Clones a stored iterator preserving its current position.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#iterator(boolean)"><B>iterator(boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Please use <A HREF="./com/sleepycat/collections/StoredCollection.html#storedIterator()"><CODE>StoredCollection.storedIterator()</CODE></A> or <A HREF="./com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><CODE>StoredCollection.storedIterator(boolean)</CODE></A> instead. Because the iterator returned must
+ be closed, the method name <code>iterator</code> is confusing since standard
+ Java iterators do not need to be closed.</I>
+<DT><A HREF="./com/sleepycat/collections/StoredCollections.html#iterator(java.util.Iterator)"><B>iterator(Iterator)</B></A> -
+Static method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>
+<DD>Clones an iterator preserving its current position.
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#IWR"><B>IWR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DD>Intention to read and write (shared).
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#IWRITE"><B>IWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DD>Intention to write (shared).
</DL>
<HR>
<A NAME="_J_"><!-- --></A><H2>
<B>J</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>JoinConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>.<DD>The configuration properties of a <code>JoinCursor</code>.<DT><A HREF="com/sleepycat/db/JoinConfig.html#JoinConfig()"><B>JoinConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
-<DD>Creates an instance with the system's default settings.
-<DT><A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>JoinCursor</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db">JoinCursor</A>.<DD>A specialized join cursor for use in performing equality or natural joins on
-secondary indices.<DT><A HREF="com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)"><B>join(StoredContainer[], Object[], JoinConfig)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#join(com.sleepycat.collections.StoredContainer[], java.lang.Object[], com.sleepycat.db.JoinConfig)"><B>join(StoredContainer[], Object[], JoinConfig)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Returns an iterator representing an equality join of the indices and
index key values specified.
-<DT><A HREF="com/sleepycat/db/Database.html#join(com.sleepycat.db.Cursor[], com.sleepycat.db.JoinConfig)"><B>join(Cursor[], JoinConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#join(com.sleepycat.db.Cursor[], com.sleepycat.db.JoinConfig)"><B>join(Cursor[], JoinConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Creates a specialized join cursor for use in performing equality or
natural joins on secondary indices.
-</DL>
+<DT><A HREF="./com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>JoinConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The configuration properties of a <code>JoinCursor</code>.<DT><A HREF="./com/sleepycat/db/JoinConfig.html#JoinConfig()"><B>JoinConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
+<DD>Creates an instance with the system's default settings.
+<DT><A HREF="./com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>JoinCursor</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A specialized join cursor for use in performing equality or natural joins on
+secondary indices.</DL>
<HR>
<A NAME="_K_"><!-- --></A><H2>
<B>K</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/OperationStatus.html#KEYEMPTY"><B>KEYEMPTY</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
+<DT><A HREF="./com/sleepycat/db/OperationStatus.html#KEYEMPTY"><B>KEYEMPTY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
<DD>The cursor operation was unsuccessful because the current record
was deleted.
-<DT><A HREF="com/sleepycat/db/OperationStatus.html#KEYEXIST"><B>KEYEXIST</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
+<DT><A HREF="./com/sleepycat/db/OperationStatus.html#KEYEXIST"><B>KEYEXIST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
<DD>The operation to insert data was configured to not allow overwrite
and the key already exists in the database.
-<DT><A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>KeyRange</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>.<DD>An object that returns status from the <A HREF="com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><CODE>Database.getKeyRange</CODE></A> method.<DT><A HREF="com/sleepycat/db/KeyRange.html#KeyRange()"><B>KeyRange()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
+<DT><A HREF="./com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>KeyRange</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An object that returns status from the <A HREF="./com/sleepycat/db/Database.html#getKeyRange(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry)"><CODE>Database.getKeyRange</CODE></A> method.<DT><A HREF="./com/sleepycat/db/KeyRange.html#KeyRange()"><B>KeyRange()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#keySet()"><B>keySet()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns a set view of the keys contained in this map.
</DL>
<HR>
<A NAME="_L_"><!-- --></A><H2>
<B>L</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/CacheFilePriority.html#LOW"><B>LOW</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
-<DD>The second lowest priority.
-<DT><A HREF="com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>Lock</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Lock.html" title="class in com.sleepycat.db">Lock</A>.<DD>The locking interfaces for the database environment are methods of the
-<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.<DT><A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>LockDetectMode</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>.<DD>Deadlock detection modes.<DT><A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>LockMode</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>.<DD>Locking modes for database operations.<DT><A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>LockNotGrantedException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">LockNotGrantedException</A>.<DD>A LockNotGrantedException is thrown when a lock requested using the
-<A HREF="com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> or <A HREF="com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A>
-methods, where the noWait flag or lock timers were configured, could not
-be granted before the wait-time expired.<DT><A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>LockOperation</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>.<DD>Operations that can be performed on locks.<DT><A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>LockRequest</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>.<DD>The LockRequest object is used to encapsulate a single lock request.<DT><A HREF="com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)"><B>LockRequest(LockOperation, LockRequestMode, DatabaseEntry, Lock)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
-<DD>Construct a LockRequest with the specified operation, mode and lock,
- for the specified object.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock, int)"><B>LockRequest(LockOperation, LockRequestMode, DatabaseEntry, Lock, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
-<DD>Construct a LockRequest with the specified operation, mode, lock and
- timeout for the specified object.
-<DT><A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>LockRequestMode</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>.<DD>When using the default lock conflict matrix, the LockRequestMode class
-defines the set of possible lock modes.<DT><A HREF="com/sleepycat/db/LockRequestMode.html#LockRequestMode(java.lang.String, int)"><B>LockRequestMode(String, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
-<DD>Construct a custom lock request mode.
-<DT><A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>LockStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>.<DD>Lock statistics for a database environment.<DT><A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>LogCursor</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>.<DD>The LogCursor 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/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>LogRecordHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db">LogRecordHandler</A>.<DD>A function to process application-specific log records.<DT><A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>LogSequenceNumber</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>.<DD>The LogSequenceNumber object is a <em>log sequence number</em> which
-specifies a unique location in a log file.<DT><A HREF="com/sleepycat/db/LogSequenceNumber.html#LogSequenceNumber(int, int)"><B>LogSequenceNumber(int, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
-<DD>Construct a LogSequenceNumber with the specified file and offset.
-<DT><A HREF="com/sleepycat/db/LogSequenceNumber.html#LogSequenceNumber()"><B>LogSequenceNumber()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
-<DD>Construct an uninitialized LogSequenceNumber.
-<DT><A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>LogStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>.<DD>Log statistics for a database environment.<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>LongBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
- wrapper or a <code>long</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html#LongBinding()"><B>LongBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredSortedEntrySet.html#last()"><B>last()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#last()"><B>last()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
<DD>Returns the last (highest) element currently in this sorted set.
-<DT><A HREF="com/sleepycat/collections/StoredSortedKeySet.html#last()"><B>last()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#last()"><B>last()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
<DD>Returns the last (highest) element currently in this sorted set.
-<DT><A HREF="com/sleepycat/collections/StoredSortedValueSet.html#last()"><B>last()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#last()"><B>last()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
<DD>Returns the last (highest) element currently in this sorted set.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">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/collections/StoredSortedMap.html#lastKey()"><B>lastKey()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#lastKey()"><B>lastKey()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
<DD>Returns the last (highest) element currently in this sorted map.
-<DT><A HREF="com/sleepycat/db/KeyRange.html#less"><B>less</B></A> -
-Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#len"><B>len</B></A> -
+Variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/KeyRange.html#less"><B>less</B></A> -
+Variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db">KeyRange</A>
<DD>A value between 0 and 1, the proportion of keys less than the specified
key.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#listIterator()"><B>listIterator()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#listIterator()"><B>listIterator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Returns a list iterator of the elements in this list (in proper
sequence).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#listIterator(int)"><B>listIterator(int)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#listIterator(int)"><B>listIterator(int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">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/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><B>lockVector(int, boolean, LockRequest[])</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>Lock</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The locking interfaces for the database environment are methods of the
+<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.<DT><A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>LockDetectMode</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Deadlock detection modes.<DT><A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>LockMode</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Locking modes for database operations.<DT><A HREF="./com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>LockNotGrantedException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A LockNotGrantedException is thrown when a lock requested using the
+<A HREF="./com/sleepycat/db/Environment.html#getLock(int, boolean, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LockRequestMode)"><CODE>Environment.getLock</CODE></A> or <A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><CODE>Environment.lockVector</CODE></A>
+methods, where the noWait flag or lock timers were configured, could not
+be granted before the wait-time expired.<DT><A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>LockOperation</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Operations that can be performed on locks.<DT><A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>LockRequest</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The LockRequest object is used to encapsulate a single lock request.<DT><A HREF="./com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock)"><B>LockRequest(LockOperation, LockRequestMode, DatabaseEntry, Lock)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DD>Construct a LockRequest with the specified operation, mode and lock,
+ for the specified object.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#LockRequest(com.sleepycat.db.LockOperation, com.sleepycat.db.LockRequestMode, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.Lock, int)"><B>LockRequest(LockOperation, LockRequestMode, DatabaseEntry, Lock, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DD>Construct a LockRequest with the specified operation, mode, lock and
+ timeout for the specified object.
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>LockRequestMode</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>When using the default lock conflict matrix, the LockRequestMode class
+defines the set of possible lock modes.<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#LockRequestMode(java.lang.String, int)"><B>LockRequestMode(String, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DD>Construct a custom lock request mode.
+<DT><A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>LockStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Lock statistics for a database environment.<DT><A HREF="./com/sleepycat/db/Environment.html#lockVector(int, boolean, com.sleepycat.db.LockRequest[])"><B>lockVector(int, boolean, LockRequest[])</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Atomically obtain and release one or more locks from the lock table.
-<DT><A HREF="com/sleepycat/db/Environment.html#logFlush(com.sleepycat.db.LogSequenceNumber)"><B>logFlush(LogSequenceNumber)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>LogCursor</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The LogCursor 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/Environment.html#logFlush(com.sleepycat.db.LogSequenceNumber)"><B>logFlush(LogSequenceNumber)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Flush log records to stable storage.
-<DT><A HREF="com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)"><B>logPut(DatabaseEntry, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#logPrint(com.sleepycat.db.Transaction, java.lang.String)"><B>logPrint(Transaction, String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Append an informational message to the Berkeley DB database environment log files.
+<DT><A HREF="./com/sleepycat/db/Environment.html#logPut(com.sleepycat.db.DatabaseEntry, boolean)"><B>logPut(DatabaseEntry, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Append a record to the log.
-<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html#longToEntry(long, com.sleepycat.db.DatabaseEntry)"><B>longToEntry(long, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DT><A HREF="./com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>LogRecordHandler</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A function to process application-specific log records.<DT><A HREF="./com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>LogSequenceNumber</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The LogSequenceNumber object is a <em>log sequence number</em> which
+specifies a unique location in a log file.<DT><A HREF="./com/sleepycat/db/LogSequenceNumber.html#LogSequenceNumber(int, int)"><B>LogSequenceNumber(int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
+<DD>Construct a LogSequenceNumber with the specified file and offset.
+<DT><A HREF="./com/sleepycat/db/LogSequenceNumber.html#LogSequenceNumber()"><B>LogSequenceNumber()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db">LogSequenceNumber</A>
+<DD>Construct an uninitialized LogSequenceNumber.
+<DT><A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>LogStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Log statistics for a database environment.<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>LongBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Long</code> primitive
+ wrapper or a <code>long</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html#LongBinding()"><B>LongBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html#longToEntry(long, com.sleepycat.db.DatabaseEntry)"><B>longToEntry(long, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
<DD>Converts a simple <code>long</code> value into an entry buffer.
+<DT><A HREF="./com/sleepycat/db/CacheFilePriority.html#LOW"><B>LOW</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
+<DD>The second lowest priority.
</DL>
<HR>
<A NAME="_M_"><!-- --></A><H2>
<B>M</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#MAXLOCKS"><B>MAXLOCKS</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#makeSpace(int)"><B>makeSpace(int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DD>Ensure that at least the given number of bytes are available in the
+ internal buffer.
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>MapEntryParameter</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>A simple <code>Map.Entry</code> implementation that can be used as in
+ input parameter.<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#MapEntryParameter(java.lang.Object, java.lang.Object)"><B>MapEntryParameter(Object, Object)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DD>Creates a map entry with a given key and value.
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#mark"><B>mark</B></A> -
+Variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#mark(int)"><B>mark(int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#markSupported()"><B>markSupported()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleEntry.html#marshalEntry(com.sleepycat.bind.tuple.TupleOutput)"><B>marshalEntry(TupleOutput)</B></A> -
+Method in interface com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleEntry</A>
+<DD>Construct the key or data tuple entry from the key or data object.
+<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleEntry</B></A> - Interface in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A marshalling interface implemented by key, data or entity classes that
+ are represented as tuples.<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleKeyEntity</B></A> - Interface in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A marshalling interface implemented by entity classes that represent keys as
+ tuples.<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bind.tuple.TupleOutput)"><B>marshalPrimaryKey(TupleOutput)</B></A> -
+Method in interface com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
+<DD>Extracts the entity's primary key and writes it to the key output.
+<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)"><B>marshalSecondaryKey(String, TupleOutput)</B></A> -
+Method in interface com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
+<DD>Extracts the entity's secondary key and writes it to the key output.
+<DT><A HREF="./com/sleepycat/util/PackedInteger.html#MAX_LENGTH"><B>MAX_LENGTH</B></A> -
+Static variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<DD>The maximum number of bytes needed to store an int value (5).
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#MAXLOCKS"><B>MAXLOCKS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Reject the lock request for the locker ID with the most locks.
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#MAXWRITE"><B>MAXWRITE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#MAXWRITE"><B>MAXWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Reject the lock request for the locker ID with the most write locks.
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#MINLOCKS"><B>MINLOCKS</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>MemoryException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>This exception is thrown when a <A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A>
+passed to a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> method is not large
+enough to hold a value being returned.<DT><A HREF="./com/sleepycat/db/MessageHandler.html#message(com.sleepycat.db.Environment, java.lang.String)"><B>message(Environment, String)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A>
+<DD>A callback function to be called to display informational messages.
+<DT><A HREF="./com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>MessageHandler</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a callback function to be called to display
+informational messages.<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#MINLOCKS"><B>MINLOCKS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Reject the lock request for the locker ID with the fewest locks.
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#MINWRITE"><B>MINWRITE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#MINWRITE"><B>MINWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Reject the lock request for the locker ID with the fewest write locks.
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>MapEntryParameter</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>.<DD>A simple <code>Map.Entry</code> implementation that can be used as in
- input parameter.<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#MapEntryParameter(java.lang.Object, java.lang.Object)"><B>MapEntryParameter(Object, Object)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
-<DD>Creates a map entry with a given key and value.
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleEntry</B></A> - interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleEntry</A>.<DD>A marshalling interface implemented by key, data or entity classes that
- are represented as tuples.<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleKeyEntity</B></A> - interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>.<DD>A marshalling interface implemented by entity classes that represent keys as
- tuples.<DT><A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>MemoryException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">MemoryException</A>.<DD>This exception is thrown when a <A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><CODE>DatabaseEntry</CODE></A>
-passed to a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> method is not large
-enough to hold a value being returned.<DT><A HREF="com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>MessageHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A>.<DD>An interface specifying a callback function to be called to display
-informational messages.<DT><A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>MultipleDataEntry</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>.<DD>A DatabaseEntry that holds multiple data items returned by a single
-<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry()"><B>MultipleDataEntry()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#moveToIndex(int)"><B>moveToIndex(int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>MultipleDataEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A DatabaseEntry that holds multiple data items returned by a single
+<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="./com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry()"><B>MultipleDataEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
<DD>Construct an entry with no data.
-<DT><A HREF="com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry(byte[])"><B>MultipleDataEntry(byte[])</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry(byte[])"><B>MultipleDataEntry(byte[])</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
<DD>Construct an entry with a given byte array.
-<DT><A HREF="com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry(byte[], int, int)"><B>MultipleDataEntry(byte[], int, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleDataEntry.html#MultipleDataEntry(byte[], int, int)"><B>MultipleDataEntry(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
-<DT><A HREF="com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>MultipleEntry</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A>.<DD>An abstract class representing a DatabaseEntry that holds multiple results
-returned by a single <A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get method.<DT><A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyDataEntry</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>.<DD>A DatabaseEntry that holds multiple key/data pairs returned by a single
-<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry()"><B>MultipleKeyDataEntry()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>MultipleEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An abstract class representing a DatabaseEntry that holds multiple results
+returned by a single <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get method.<DT><A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyDataEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A DatabaseEntry that holds multiple key/data pairs returned by a single
+<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry()"><B>MultipleKeyDataEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
<DD>Construct an entry with no data.
-<DT><A HREF="com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry(byte[])"><B>MultipleKeyDataEntry(byte[])</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry(byte[])"><B>MultipleKeyDataEntry(byte[])</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
<DD>Construct an entry with a given byte array.
-<DT><A HREF="com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry(byte[], int, int)"><B>MultipleKeyDataEntry(byte[], int, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html#MultipleKeyDataEntry(byte[], int, int)"><B>MultipleKeyDataEntry(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
-<DT><A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoDataEntry</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>.<DD>A DatabaseEntry that holds multiple record number/data pairs returned by a
-single <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry()"><B>MultipleRecnoDataEntry()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyNIODataEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A DatabaseEntry that holds multiple key/data pairs returned by a single
+<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html#MultipleKeyNIODataEntry()"><B>MultipleKeyNIODataEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A>
<DD>Construct an entry with no data.
-<DT><A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry(byte[])"><B>MultipleRecnoDataEntry(byte[])</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html#MultipleKeyNIODataEntry(java.nio.ByteBuffer)"><B>MultipleKeyNIODataEntry(ByteBuffer)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A>
+<DD>Construct an entry with a given java.nio.ByteBuffer.
+<DT><A HREF="./com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleNIODataEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A DatabaseEntry that holds multiple data items returned by a single
+<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="./com/sleepycat/db/MultipleNIODataEntry.html#MultipleNIODataEntry()"><B>MultipleNIODataEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A>
+<DD>Construct an entry with no data.
+<DT><A HREF="./com/sleepycat/db/MultipleNIODataEntry.html#MultipleNIODataEntry(java.nio.ByteBuffer)"><B>MultipleNIODataEntry(ByteBuffer)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A>
+<DD>Construct an entry with a given java.nio.ByteBuffer.
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoDataEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A DatabaseEntry that holds multiple record number/data pairs returned by a
+single <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry()"><B>MultipleRecnoDataEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
+<DD>Construct an entry with no data.
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry(byte[])"><B>MultipleRecnoDataEntry(byte[])</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
<DD>Construct an entry with a given byte array.
-<DT><A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry(byte[], int, int)"><B>MultipleRecnoDataEntry(byte[], int, int)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html#MultipleRecnoDataEntry(byte[], int, int)"><B>MultipleRecnoDataEntry(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
<DD>Constructs a DatabaseEntry with a given byte array, offset and size.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#makeSpace(int)"><B>makeSpace(int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
-<DD>Ensure that at least the given number of bytes are available in the
- internal buffer.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#mark(int)"><B>mark(int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#markSupported()"><B>markSupported()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html#marshalEntry(com.sleepycat.bind.tuple.TupleOutput)"><B>marshalEntry(TupleOutput)</B></A> -
-Method in interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleEntry</A>
-<DD>Construct the key or data tuple entry from the key or data object.
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bind.tuple.TupleOutput)"><B>marshalPrimaryKey(TupleOutput)</B></A> -
-Method in interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
-<DD>Extracts the entity's primary key and writes it to the key output.
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#marshalSecondaryKey(java.lang.String, com.sleepycat.bind.tuple.TupleOutput)"><B>marshalSecondaryKey(String, TupleOutput)</B></A> -
-Method in interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
-<DD>Extracts the entity's secondary key and writes it to the key output.
-<DT><A HREF="com/sleepycat/db/MessageHandler.html#message(com.sleepycat.db.Environment, java.lang.String)"><B>message(Environment, String)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db">MessageHandler</A>
-<DD>A callback function to be called to display informational messages.
-</DL>
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoNIODataEntry</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A DatabaseEntry that holds multiple record number/data pairs returned by a
+single <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> or <A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><CODE>Cursor</CODE></A> get call.<DT><A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html#MultipleRecnoNIODataEntry()"><B>MultipleRecnoNIODataEntry()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A>
+<DD>Construct an entry with no data.
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html#MultipleRecnoNIODataEntry(java.nio.ByteBuffer)"><B>MultipleRecnoNIODataEntry(ByteBuffer)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A>
+<DD>Construct an entry with a given java.nio.ByteBuffer.
+<DT><A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>MutexStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Statistics about mutexes in a Berkeley DB database environment, returned
+by <A HREF="./com/sleepycat/db/Environment.html#getMutexStats(com.sleepycat.db.StatsConfig)"><CODE>Environment.getMutexStats(com.sleepycat.db.StatsConfig)</CODE></A></DL>
<HR>
<A NAME="_N_"><!-- --></A><H2>
<B>N</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#NONE"><B>NONE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
-<DD>Turn off deadlock detection.
-<DT><A HREF="com/sleepycat/db/OperationStatus.html#NOTFOUND"><B>NOTFOUND</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
-<DD>The requested key/data pair was not found.
-<DT><A HREF="com/sleepycat/collections/TupleSerialFactory.html#newMap(com.sleepycat.db.Database, java.lang.Class, java.lang.Class, boolean)"><B>newMap(Database, Class, Class, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
+<DT><A HREF="./com/sleepycat/collections/TupleSerialFactory.html#newMap(com.sleepycat.db.Database, java.lang.Class, java.lang.Class, boolean)"><B>newMap(Database, Class, Class, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
<DD>Creates a map from a previously opened Database object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#newOutput()"><B>newOutput()</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
-<DD>Utility method for use by bindings to create a tuple output object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#newOutput(byte[])"><B>newOutput(byte[])</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
-<DD>Utility method for use by bindings to create a tuple output object
- with a specific starting size.
-<DT><A HREF="com/sleepycat/collections/TupleSerialFactory.html#newSortedMap(com.sleepycat.db.Database, java.lang.Class, java.lang.Class, boolean)"><B>newSortedMap(Database, Class, Class, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#newOutput()"><B>newOutput()</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="./com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</CODE></A></I>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#newOutput(byte[])"><B>newOutput(byte[])</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<DD><B>Deprecated.</B>&nbsp;<I>replaced by <A HREF="./com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</CODE></A></I>
+<DT><A HREF="./com/sleepycat/collections/TupleSerialFactory.html#newSortedMap(com.sleepycat.db.Database, java.lang.Class, java.lang.Class, boolean)"><B>newSortedMap(Database, Class, Class, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
<DD>Creates a sorted map from a previously opened Database object.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#next()"><B>next()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#next()"><B>next()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Returns the next element in the iteration.
-<DT><A HREF="com/sleepycat/db/MultipleDataEntry.html#next(com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleDataEntry.html#next(com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db">MultipleDataEntry</A>
<DD>Get the next data element in the returned set.
-<DT><A HREF="com/sleepycat/db/MultipleKeyDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db">MultipleKeyDataEntry</A>
<DD>Get the next key/data pair in the returned set.
-<DT><A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db">MultipleKeyNIODataEntry</A>
+<DD>Get the next key/data pair in the returned set.
+<DT><A HREF="./com/sleepycat/db/MultipleNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db">MultipleNIODataEntry</A>
+<DD>Get the next data element in the returned set.
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db">MultipleRecnoDataEntry</A>
<DD>Get the next record number/data pair in the returned set.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#nextIndex()"><B>nextIndex()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html#next(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>next(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db">MultipleRecnoNIODataEntry</A>
+<DD>Get the next record number/data pair in the returned set.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#nextIndex()"><B>nextIndex()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Returns the index of the element that would be returned by a subsequent
call to next.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)"><B>nullifyForeignKey(SecondaryDatabase, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT"><B>NOAUTOINIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>
+<DD>The replication master should not automatically re-initialize outdated
+ clients.
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#NONE"><B>NONE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DD>Turn off deadlock detection.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#NONE"><B>NONE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>The master should not wait for any client replication message
+ acknowledgments.
+<DT><A HREF="./com/sleepycat/db/OperationStatus.html#NOTFOUND"><B>NOTFOUND</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
+<DD>The requested key/data pair was not found.
+<DT><A HREF="./com/sleepycat/db/ReplicationConfig.html#NOWAIT"><B>NOWAIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>
+<DD>Berkeley DB method calls that would normally block while clients are in
+ recovery should return errors immediately.
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)"><B>nullifyForeignKey(SecondaryDatabase, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html#nullifyForeignKey(java.lang.Object)"><B>nullifyForeignKey(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#nullifyForeignKey(java.lang.Object)"><B>nullifyForeignKey(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>Clears the index key in a data object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)"><B>nullifyForeignKey(SecondaryDatabase, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)"><B>nullifyForeignKey(SecondaryDatabase, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(java.lang.Object)"><B>nullifyForeignKey(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#nullifyForeignKey(java.lang.Object)"><B>nullifyForeignKey(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
<DD>Clears the index key in the deserialized data entry.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#nullifyForeignKey(java.lang.Object)"><B>nullifyForeignKey(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#nullifyForeignKey(java.lang.Object)"><B>nullifyForeignKey(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#nullifyForeignKey(java.lang.String)"><B>nullifyForeignKey(String)</B></A> -
-Method in interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#nullifyForeignKey(java.lang.String)"><B>nullifyForeignKey(String)</B></A> -
+Method in interface com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
<DD>Clears the entity's secondary key fields for the given key name.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)"><B>nullifyForeignKey(SecondaryDatabase, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.db.SecondaryDatabase, com.sleepycat.db.DatabaseEntry)"><B>nullifyForeignKey(SecondaryDatabase, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>nullifyForeignKey(TupleInput, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>nullifyForeignKey(TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
<DD>Clears the index key in the tuple data entry.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>nullifyForeignKey(TupleInput, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#nullifyForeignKey(com.sleepycat.bind.tuple.TupleInput, com.sleepycat.bind.tuple.TupleOutput)"><B>nullifyForeignKey(TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_O_"><!-- --></A><H2>
<B>O</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#OLDEST"><B>OLDEST</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
-<DD>Reject the lock request for the locker ID with the oldest lock.
-<DT><A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>OperationStatus</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>.<DD>Status values from database operations.<DT><A HREF="com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>
+<DT><A HREF="./com/sleepycat/bind/EntityBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.bind.<A HREF="./com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>
<DD>Extracts the data entry from an entity Object.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>Extracts a data object from an entity object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
<DD>Extracts a data object from an entity object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToData(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToData(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToData(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
<DD>Extracts a key tuple from an entity object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToData(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToData(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/ByteArrayBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.<A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>
+<DT><A HREF="./com/sleepycat/bind/ByteArrayBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind">ByteArrayBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>
+<DT><A HREF="./com/sleepycat/bind/EntryBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.bind.<A HREF="./com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>
<DD>Converts an Object into a entry buffer.
-<DT><A HREF="com/sleepycat/bind/RecordNumberBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
+<DT><A HREF="./com/sleepycat/bind/RecordNumberBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
<DD>Serialize an object into an entry buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/BooleanBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/ByteBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple">BooleanBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/CharacterBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ByteBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple">ByteBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple">CharacterBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/DoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple">DoubleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/FloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/FloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple">FloatBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/LongBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/IntegerBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple">IntegerBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/LongBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple">LongBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
<DD>Converts a key or data object to a tuple entry.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html#objectToEntry(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToEntry(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html#objectToEntry(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToEntry(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>
+<DT><A HREF="./com/sleepycat/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.bind.<A HREF="./com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>
<DD>Extracts the key entry from an entity Object.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object)"><B>objectToKey(Object)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object)"><B>objectToKey(Object)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>Extracts a key object from an entity object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
<DD>Extracts a key tuple from an entity object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.db.DatabaseEntry)"><B>objectToKey(Object, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
<DD>Extracts a key tuple from an entity object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#off"><B>off</B></A> -
+Variable in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><B>openCursor(Transaction, CursorConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#OLDEST"><B>OLDEST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DD>Reject the lock request for the locker ID with the oldest lock.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#ONE"><B>ONE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>The master should wait until at least one client site has acknowledged
+ each permanent replication message.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#ONE_PEER"><B>ONE_PEER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>The master should wait until at least one electable peer has acknowledged
+ each permanent replication message (where "electable peer" means a client
+ capable of being subsequently elected master of the replication group).
+<DT><A HREF="./com/sleepycat/db/Database.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><B>openCursor(Transaction, CursorConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DD>Return a cursor into the database.
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#openCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><B>openCursor(Transaction, CursorConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Return a cursor into the database.
-<DT><A HREF="com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>openDatabase(Transaction, String, String, DatabaseConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>openDatabase(Transaction, String, String, DatabaseConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Open a database.
-<DT><A HREF="com/sleepycat/db/Environment.html#openLogCursor()"><B>openLogCursor()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#openLogCursor()"><B>openLogCursor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return a log cursor.
-<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><B>openSecondaryCursor(Transaction, CursorConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#openSecondaryCursor(com.sleepycat.db.Transaction, com.sleepycat.db.CursorConfig)"><B>openSecondaryCursor(Transaction, CursorConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Obtain a cursor on a database, returning a <code>SecondaryCursor</code>.
-<DT><A HREF="com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)"><B>openSecondaryDatabase(Transaction, String, String, Database, SecondaryConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#openSecondaryDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)"><B>openSecondaryDatabase(Transaction, String, String, Database, SecondaryConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Open a database.
-<DT><A HREF="com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><B>openSequence(Transaction, DatabaseEntry, SequenceConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><B>openSequence(Transaction, DatabaseEntry, SequenceConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Open a sequence in the database.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)"><B>outputToEntry(TupleOutput, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DT><A HREF="./com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>OperationStatus</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Status values from database operations.<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#outputToEntry(com.sleepycat.bind.tuple.TupleOutput, com.sleepycat.db.DatabaseEntry)"><B>outputToEntry(TupleOutput, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
<DD>Utility method to set the data in a entry buffer to the data in a tuple
output object.
</DL>
@@ -3040,90 +3600,102 @@ Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tupl
<A NAME="_P_"><!-- --></A><H2>
<B>P</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html#PRINT"><B>PRINT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
-<DD>The log is being printed for debugging purposes; print the contents of
- this log record in the desired format.
-<DT><A HREF="com/sleepycat/db/LockOperation.html#PUT"><B>PUT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
-<DD>The lock to which the lock field refers is released.
-<DT><A HREF="com/sleepycat/db/LockOperation.html#PUT_ALL"><B>PUT_ALL</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
-<DD>All locks held by the specified locker are released.
-<DT><A HREF="com/sleepycat/db/LockOperation.html#PUT_OBJ"><B>PUT_OBJ</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
-<DD>All locks held on obj are released.
-<DT><A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PanicHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A>.<DD>An interface specifying a function to be called if the database
-environment panics.<DT><A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PreparedTransaction</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db">PreparedTransaction</A>.<DD>The PreparedTransaction object is used to encapsulate a single prepared,
-but not yet resolved, transaction.<DT><A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PrimaryKeyAssigner</B></A> - interface com.sleepycat.collections.<A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections">PrimaryKeyAssigner</A>.<DD>An interface implemented to assign new primary key values.<DT><A HREF="com/sleepycat/db/Environment.html#panic(boolean)"><B>panic(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><B>PackedInteger</B></A> - Class in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>Static methods for reading and writing packed integers.<DT><A HREF="./com/sleepycat/util/PackedInteger.html#PackedInteger()"><B>PackedInteger()</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/Environment.html#panic(boolean)"><B>panic(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Set the panic state for the database environment.
-<DT><A HREF="com/sleepycat/db/PanicHandler.html#panic(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseException)"><B>panic(Environment, DatabaseException)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A>
+<DT><A HREF="./com/sleepycat/db/EventType.html#PANIC"><B>PANIC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
+<DD>The event is a Database panic.
+<DT><A HREF="./com/sleepycat/db/PanicHandler.html#panic(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseException)"><B>panic(Environment, DatabaseException)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db">PanicHandler</A>
<DD>A function to be called if the database environment panics.
-<DT><A HREF="com/sleepycat/db/BtreePrefixCalculator.html#prefix(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>prefix(Database, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A>
+<DT><A HREF="./com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PanicHandler</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a function to be called if the database
+environment panics.<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html#port"><B>port</B></A> -
+Variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<DD>The network port component of the site address.
+<DT><A HREF="./com/sleepycat/db/BtreePrefixCalculator.html#prefix(com.sleepycat.db.Database, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>prefix(Database, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db">BtreePrefixCalculator</A>
<DD>The application-specific Btree prefix callback.
-<DT><A HREF="com/sleepycat/db/Transaction.html#prepare(byte[])"><B>prepare(byte[])</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#prepare(byte[])"><B>prepare(byte[])</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>Initiate the beginning of a two-phase commit.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#previous()"><B>previous()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PreparedTransaction</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The PreparedTransaction object is used to encapsulate a single prepared,
+but not yet resolved, transaction.<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#previous()"><B>previous()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Returns the next element in the iteration.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#previousIndex()"><B>previousIndex()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#previousIndex()"><B>previousIndex()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Returns the index of the element that would be returned by a subsequent
call to previous.
-<DT><A HREF="com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><B>processReplicationMessage(DatabaseEntry, DatabaseEntry, int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PrimaryKeyAssigner</B></A> - Interface in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>An interface implemented to assign new primary key values.<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#primaryKeyBinding"><B>primaryKeyBinding</B></A> -
+Variable in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#PRINT"><B>PRINT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DD>The log is being printed for debugging purposes; print the contents of
+ this log record in the desired format.
+<DT><A HREF="./com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><B>processReplicationMessage(DatabaseEntry, DatabaseEntry, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Process an incoming replication message sent by a member of the
replication group to the local database environment.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#put(java.lang.Object, java.lang.Object)"><B>put(Object, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#put(java.lang.Object, java.lang.Object)"><B>put(Object, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Associates the specified value with the specified key in this map
(optional operation).
-<DT><A HREF="com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>put(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#put(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>put(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>put(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#put(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>put(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>
Store the key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putAfter(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#PUT"><B>PUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>The lock to which the lock field refers is released.
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#PUT_ALL"><B>PUT_ALL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>All locks held by the specified locker are released.
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#PUT_OBJ"><B>PUT_OBJ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>All locks held on obj are released.
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putAfter(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putAfter(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#putAll(java.util.Map)"><B>putAll(Map)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#putAll(java.util.Map)"><B>putAll(Map)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Copies all of the mappings from the specified map to this map (optional
operation).
-<DT><A HREF="com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putBefore(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putBefore(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putBefore(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)"><B>putCurrent(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putCurrent(com.sleepycat.db.DatabaseEntry)"><B>putCurrent(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putKeyFirst(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putKeyFirst(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putKeyFirst(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putKeyLast(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putKeyLast(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putKeyLast(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Environment.html#putLock(com.sleepycat.db.Lock)"><B>putLock(Lock)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#putLock(com.sleepycat.db.Lock)"><B>putLock(Lock)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Release a lock.
-<DT><A HREF="com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoDupData(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putNoDupData(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoDupData(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoDupData(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#putNoDupData(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoDupData(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>
Store the key/data pair into the database if it does not already appear
in the database.
-<DT><A HREF="com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoOverwrite(DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
+<DT><A HREF="./com/sleepycat/db/Cursor.html#putNoOverwrite(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoOverwrite(DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db">Cursor</A>
<DD>Store a key/data pair into the database.
-<DT><A HREF="com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoOverwrite(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#putNoOverwrite(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><B>putNoOverwrite(Transaction, DatabaseEntry, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>
Store the key/data pair into the database if the key does not already
appear in the database.
@@ -3132,1375 +3704,1723 @@ appear in the database.
<A NAME="_Q_"><!-- --></A><H2>
<B>Q</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/DatabaseType.html#QUEUE"><B>QUEUE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseType.html#QUEUE"><B>QUEUE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
<DD>The database is a Queue.
-<DT><A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>QueueStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>.<DD>The QueueStats object is used to return Queue database statistics.</DL>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>QueueStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The QueueStats object is used to return Queue database statistics.<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#QUORUM"><B>QUORUM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>The master should wait until it has received acknowledgements from the
+ minimum number of electable peers sufficient to ensure that the effect
+ of the permanent record remains durable if an election is held (where
+ "electable peer" means a client capable of being subsequently elected
+ master of the replication group).
+</DL>
<HR>
<A NAME="_R_"><!-- --></A><H2>
<B>R</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#RANDOM"><B>RANDOM</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#RANDOM"><B>RANDOM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Reject the lock request for a random locker ID.
-<DT><A HREF="com/sleepycat/db/LockRequestMode.html#READ"><B>READ</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#READ"><B>READ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
<DD>Read (shared).
-<DT><A HREF="com/sleepycat/db/DatabaseType.html#RECNO"><B>RECNO</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
-<DD>The database is a Recno.
-<DT><A HREF="com/sleepycat/db/LockMode.html#RMW"><B>RMW</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
-<DD>Acquire write locks instead of read locks when doing the retrieval.
-<DT><A HREF="com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>RecordNumberAppender</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db">RecordNumberAppender</A>.<DD>An interface specifying a callback function that modifies stored data
-based on a generated key.<DT><A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>RecordNumberBinding</B></A> - class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>.<DD>An <code>EntryBinding</code> that treats a record number key entry as a
- <code>Long</code> key object.<DT><A HREF="com/sleepycat/bind/RecordNumberBinding.html#RecordNumberBinding()"><B>RecordNumberBinding()</B></A> -
-Constructor for class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
-<DD>Creates a byte array binding.
-<DT><A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>RecoveryOperation</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>.<DD>The recovery operation being performed when <A HREF="com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><CODE>LogRecordHandler.handleLogRecord</CODE></A> is called.<DT><A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>ReplicationHandleDeadException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">ReplicationHandleDeadException</A>.<DD>Thrown when a database handle has been invalidated because a replication
-election unrolled a committed transaction.<DT><A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>ReplicationStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>.<DD>Replication statistics for a database environment.<DT><A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>ReplicationStatus</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>.<DD>The return status from processing a replication message.<DT><A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>ReplicationTransport</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</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/RunRecoveryException.html" title="class in com.sleepycat.db"><B>RunRecoveryException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">RunRecoveryException</A>.<DD>Thrown when the database environment needs to be recovered.<DT><A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>RuntimeExceptionWrapper</B></A> - exception com.sleepycat.util.<A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A>.<DD>A RuntimeException that can contain nested exceptions.<DT><A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html#RuntimeExceptionWrapper(java.lang.Throwable)"><B>RuntimeExceptionWrapper(Throwable)</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#read()"><B>read()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#read()"><B>read()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#read(byte[])"><B>read(byte[])</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#read(byte[])"><B>read(byte[])</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#read(byte[], int, int)"><B>read(byte[], int, int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#read(byte[], int, int)"><B>read(byte[], int, int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readBoolean()"><B>readBoolean()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#READ_COMMITTED"><B>READ_COMMITTED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>A convenience instance to configure a cursor for read committed isolation.
+<DT><A HREF="./com/sleepycat/db/LockMode.html#READ_COMMITTED"><B>READ_COMMITTED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DD>Read committed isolation provides for cursor stability but not repeatable
+ reads.
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#READ_UNCOMMITTED"><B>READ_UNCOMMITTED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>A convenience instance to configure read operations performed by the
+ cursor to return modified but not yet committed data.
+<DT><A HREF="./com/sleepycat/db/LockMode.html#READ_UNCOMMITTED"><B>READ_UNCOMMITTED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DD>Read modified but not yet committed data.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readBoolean()"><B>readBoolean()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readByte()"><B>readByte()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readByte()"><B>readByte()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a signed byte (one byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readBytes(int)"><B>readBytes(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readBytes(int)"><B>readBytes(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readBytes(char[])"><B>readBytes(char[])</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readBytes(char[])"><B>readBytes(char[])</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readChar()"><B>readChar()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readChar()"><B>readChar()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a char (two byte) unsigned value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readChars(int)"><B>readChars(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readChars(int)"><B>readChars(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readChars(char[])"><B>readChars(char[])</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readChars(char[])"><B>readChars(char[])</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readDouble()"><B>readDouble()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialInput.html#readClassDescriptor()"><B>readClassDescriptor()</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readDouble()"><B>readDouble()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a signed double (eight byte) value from the buffer.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#readFast()"><B>readFast()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#readFast()"><B>readFast()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Equivalent to <code>read()<code> but does not throw
<code>IOException</code>.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#readFast(byte[])"><B>readFast(byte[])</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#readFast(byte[])"><B>readFast(byte[])</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Equivalent to <code>read(byte[])<code> but does not throw
<code>IOException</code>.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#readFast(byte[], int, int)"><B>readFast(byte[], int, int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#readFast(byte[], int, int)"><B>readFast(byte[], int, int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>Equivalent to <code>read(byte[],int,int)<code> but does not throw
<code>IOException</code>.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readFloat()"><B>readFloat()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readFloat()"><B>readFloat()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a signed float (four byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readInt()"><B>readInt()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readInt()"><B>readInt()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a signed int (four byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readLong()"><B>readLong()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/util/PackedInteger.html#readInt(byte[], int)"><B>readInt(byte[], int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<DD>Reads a packed integer at the given buffer offset and returns it.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readLong()"><B>readLong()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a signed long (eight byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readShort()"><B>readShort()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readPackedInt()"><B>readPackedInt()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Reads a packed integer.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readShort()"><B>readShort()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads a signed short (two byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readString()"><B>readString()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readSortedDouble()"><B>readSortedDouble()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Reads a signed double (eight byte) value from the buffer, with support
+ for correct default sorting of all values.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readSortedFloat()"><B>readSortedFloat()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Reads a signed float (four byte) value from the buffer, with support
+ for correct default sorting of all values.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readString()"><B>readString()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readString(int)"><B>readString(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readString(int)"><B>readString(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readString(char[])"><B>readString(char[])</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readString(char[])"><B>readString(char[])</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#readUnsignedByte()"><B>readUnsignedByte()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readUnsignedByte()"><B>readUnsignedByte()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads an unsigned byte (one byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readUnsignedInt()"><B>readUnsignedInt()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readUnsignedInt()"><B>readUnsignedInt()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads an unsigned int (four byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#readUnsignedShort()"><B>readUnsignedShort()</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#readUnsignedShort()"><B>readUnsignedShort()</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
<DD>Reads an unsigned short (two byte) value from the buffer.
-<DT><A HREF="com/sleepycat/bind/RecordNumberBinding.html#recordNumberToEntry(long, com.sleepycat.db.DatabaseEntry)"><B>recordNumberToEntry(long, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseType.html#RECNO"><B>RECNO</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
+<DD>The database is a Recno.
+<DT><A HREF="./com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>RecordNumberAppender</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a callback function that modifies stored data
+based on a generated key.<DT><A HREF="./com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>RecordNumberBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A><DD>An <code>EntryBinding</code> that treats a record number key entry as a
+ <code>Long</code> key object.<DT><A HREF="./com/sleepycat/bind/RecordNumberBinding.html#RecordNumberBinding()"><B>RecordNumberBinding()</B></A> -
+Constructor for class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
+<DD>Creates a byte array binding.
+<DT><A HREF="./com/sleepycat/bind/RecordNumberBinding.html#recordNumberToEntry(long, com.sleepycat.db.DatabaseEntry)"><B>recordNumberToEntry(long, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.<A HREF="./com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind">RecordNumberBinding</A>
<DD>Utility method for use by bindings to translate a record number integer
to a entry buffer.
-<DT><A HREF="com/sleepycat/db/Environment.html#recover(int, boolean)"><B>recover(int, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#recover(int, boolean)"><B>recover(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Return a list of prepared but not yet resolved transactions.
-<DT><A HREF="com/sleepycat/db/FeedbackHandler.html#recoveryFeedback(com.sleepycat.db.Environment, int)"><B>recoveryFeedback(Environment, int)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>
+<DT><A HREF="./com/sleepycat/db/FeedbackHandler.html#recoveryFeedback(com.sleepycat.db.Environment, int)"><B>recoveryFeedback(Environment, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>
<DD>A function called with progress information when the database environment is being recovered.
-<DT><A HREF="com/sleepycat/collections/StoredEntrySet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>RecoveryOperation</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The recovery operation being performed when <A HREF="./com/sleepycat/db/LogRecordHandler.html#handleLogRecord(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.RecoveryOperation)"><CODE>LogRecordHandler.handleLogRecord</CODE></A> is called.<DT><A HREF="./com/sleepycat/collections/StoredEntrySet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
<DD>Removes the specified element from this set if it is present (optional
operation).
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#remove()"><B>remove()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#remove()"><B>remove()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Removes the last element that was returned by next or previous (optional
operation).
-<DT><A HREF="com/sleepycat/collections/StoredKeySet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredKeySet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
<DD>Removes the specified key from this set if it is present (optional
operation).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#remove(int)"><B>remove(int)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#remove(int)"><B>remove(int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Removes the element at the specified position in this list (optional
operation).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Removes the first occurrence in this list of the specified element
(optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Removes the mapping for this key from this map if present (optional
operation).
-<DT><A HREF="com/sleepycat/collections/StoredValueSet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredValueSet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
<DD>Removes the specified value from this set if it is present (optional
operation).
-<DT><A HREF="com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>remove(String, String, DatabaseConfig)</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#remove(java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>remove(String, String, DatabaseConfig)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>
Remove a database.
-<DT><A HREF="com/sleepycat/db/Environment.html#remove(java.io.File, boolean, com.sleepycat.db.EnvironmentConfig)"><B>remove(File, boolean, EnvironmentConfig)</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#remove(java.io.File, boolean, com.sleepycat.db.EnvironmentConfig)"><B>remove(File, boolean, EnvironmentConfig)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Destroy a database environment.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">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/Environment.html#removeDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String)"><B>removeDatabase(Transaction, String, String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#removeDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String)"><B>removeDatabase(Transaction, String, String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>
Remove a database.
-<DT><A HREF="com/sleepycat/db/Environment.html#removeOldLogFiles()"><B>removeOldLogFiles()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#removeOldLogFiles()"><B>removeOldLogFiles()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Remove log files that are no longer needed.
-<DT><A HREF="com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><B>removeSequence(Transaction, DatabaseEntry, SequenceConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#removeSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><B>removeSequence(Transaction, DatabaseEntry, SequenceConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Remove the sequence from the database.
-<DT><A HREF="com/sleepycat/db/Database.html#rename(java.lang.String, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>rename(String, String, String, DatabaseConfig)</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#rename(java.lang.String, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>rename(String, String, String, DatabaseConfig)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>
Rename a database.
-<DT><A HREF="com/sleepycat/db/Environment.html#renameDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, java.lang.String)"><B>renameDatabase(Transaction, String, String, String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#renameDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, java.lang.String)"><B>renameDatabase(Transaction, String, String, String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>
Rename a database.
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#reset()"><B>reset()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/db/EventType.html#REP_CLIENT"><B>REP_CLIENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
+<DD>The event is a replication client message, meaning that the current site
+ is now a client in the replication group.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_CLIENT"><B>REP_CLIENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>
+<DD>Start as a client site, and do not call for an election.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_ELECTION"><B>REP_ELECTION</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>
+<DD>Start as a client, and call for an election if no master is found.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_FULL_ELECTION"><B>REP_FULL_ELECTION</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>
+<DD>Start as a client, and call for an election if no master is found.
+<DT><A HREF="./com/sleepycat/db/EventType.html#REP_MASTER"><B>REP_MASTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
+<DD>The event is a replication master message, meaning that the current site
+ is now the master in the replication group.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html#REP_MASTER"><B>REP_MASTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>
+<DD>Start as a master site, and do not call for an election.
+<DT><A HREF="./com/sleepycat/db/EventType.html#REP_NEW_MASTER"><B>REP_NEW_MASTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
+<DD>The event is a replication new master message.
+<DT><A HREF="./com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><B>ReplicationConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Settings that configure Berkeley DB replication.<DT><A HREF="./com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>ReplicationDuplicateMasterException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The replication group has more than one master.<DT><A HREF="./com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>ReplicationHandleDeadException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown when a database handle has been invalidated because a replication
+election unrolled a committed transaction.<DT><A HREF="./com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><B>ReplicationHoldElectionException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An election is needed.<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>ReplicationHostAddress</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A simple wrapper class to hold information needed to define
+a host in a replication group.<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html#ReplicationHostAddress()"><B>ReplicationHostAddress()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<DD>Create a ReplicationHostAddress with default settings.
+<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html#ReplicationHostAddress(java.lang.String, int)"><B>ReplicationHostAddress(String, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<DD>Create a ReplicationHostAddress.
+<DT><A HREF="./com/sleepycat/db/ReplicationHostAddress.html#ReplicationHostAddress(java.lang.String, int, boolean)"><B>ReplicationHostAddress(String, int, boolean)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db">ReplicationHostAddress</A>
+<DD>Create a ReplicationHostAddress.
+<DT><A HREF="./com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>ReplicationJoinFailureException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown if a new master has been chosen but the client is unable to synchronize
+with the new master (possibly because the client has been configured
+with the <A HREF="./com/sleepycat/db/ReplicationConfig.html#NOAUTOINIT"><CODE>ReplicationConfig.NOAUTOINIT</CODE></A> setting to turn-off automatic
+internal initialization).<DT><A HREF="./com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>ReplicationLockoutException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown when an operation was blocked by client/master synchronization.<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>ReplicationManagerAckPolicy</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A class that provides definitions for the types of network ack policy
+to use when transmitting messages between replication sites using the
+Replication Manager.<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#replicationManagerAddRemoteSite(com.sleepycat.db.ReplicationHostAddress)"><B>replicationManagerAddRemoteSite(ReplicationHostAddress)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Adds a new replication site to the replication manager's list of known
+ sites.
+<DT><A HREF="./com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)"><B>replicationManagerStart(int, ReplicationManagerStartPolicy)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Starts the replication manager.
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>ReplicationManagerStartPolicy</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>This class provides definitions of the various start policies that
+can be specified when starting a replication client using the
+<A HREF="./com/sleepycat/db/Environment.html#replicationManagerStart(int, com.sleepycat.db.ReplicationManagerStartPolicy)"><CODE>Environment.replicationManagerStart</CODE></A> call.<DT><A HREF="./com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>ReplicationSiteUnavailableException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown if replication group was unable to elect a master, or was unable to
+complete the election in the specified timeout period.<DT><A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>ReplicationStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Replication statistics for a database environment.<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>ReplicationStatus</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The return status from processing a replication message.<DT><A HREF="./com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><B>ReplicationTimeoutType</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The ReplicationTimeoutType defines the types of timeouts that can be
+configured for the Berkeley Db replication functionality.<DT><A HREF="./com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>ReplicationTransport</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>An interface specifying a replication transmit function, which sends
+information to other members of the replication group.<DT><A HREF="./com/sleepycat/util/FastInputStream.html#reset()"><B>reset()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#reset()"><B>reset()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#reset()"><B>reset()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#resetFileID(java.lang.String, boolean)"><B>resetFileID(String, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Allows database files to be copied, and then the copy used in the same
+ database environment as the original.
+<DT><A HREF="./com/sleepycat/db/Environment.html#resetLogSequenceNumber(java.lang.String, boolean)"><B>resetLogSequenceNumber(String, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Allows database files to be moved from one transactional database
+ environment to another.
+<DT><A HREF="./com/sleepycat/bind/serial/SerialInput.html#resolveClass(java.io.ObjectStreamClass)"><B>resolveClass(ObjectStreamClass)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Retains only the elements in this collection that are contained in the
specified collection (optional operation).
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#run(com.sleepycat.collections.TransactionWorker)"><B>run(TransactionWorker)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
-<DD>Calls the <A HREF="com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
- environments, begins and ends a transaction.
+<DT><A HREF="./com/sleepycat/db/LockMode.html#RMW"><B>RMW</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DD>Acquire write locks instead of read locks when doing the retrieval.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#run(com.sleepycat.collections.TransactionWorker)"><B>run(TransactionWorker)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DD>Calls the <A HREF="./com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
+ environments, may begin and end a transaction.
+<DT><A HREF="./com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>RunRecoveryException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown when the database environment needs to be recovered.<DT><A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>RuntimeExceptionWrapper</B></A> - Exception in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>A RuntimeException that can contain nested exceptions.<DT><A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html#RuntimeExceptionWrapper(java.lang.Throwable)"><B>RuntimeExceptionWrapper(Throwable)</B></A> -
+Constructor for exception com.sleepycat.util.<A HREF="./com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">RuntimeExceptionWrapper</A>
+<DD>&nbsp;
</DL>
<HR>
<A NAME="_S_"><!-- --></A><H2>
<B>S</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/OperationStatus.html#SUCCESS"><B>SUCCESS</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
-<DD>The operation was successful.
-<DT><A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>SecondaryConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>.<DD>The configuration properties of a <code>SecondaryDatabase</code> extend
-those of a primary <code>Database</code>.<DT><A HREF="com/sleepycat/db/SecondaryConfig.html#SecondaryConfig()"><B>SecondaryConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>SecondaryConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The configuration properties of a <code>SecondaryDatabase</code> extend
+those of a primary <code>Database</code>.<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#SecondaryConfig()"><B>SecondaryConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
<DD>Creates an instance with the system's default settings.
-<DT><A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>SecondaryCursor</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db">SecondaryCursor</A>.<DD>A database cursor for a secondary database.<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>SecondaryDatabase</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>.<DD>A secondary database handle.<DT><A HREF="com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)"><B>SecondaryDatabase(String, String, Database, SecondaryConfig)</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>SecondaryCursor</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A database cursor for a secondary database.<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>SecondaryDatabase</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A secondary database handle.<DT><A HREF="./com/sleepycat/db/SecondaryDatabase.html#SecondaryDatabase(java.lang.String, java.lang.String, com.sleepycat.db.Database, com.sleepycat.db.SecondaryConfig)"><B>SecondaryDatabase(String, String, Database, SecondaryConfig)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db">SecondaryDatabase</A>
<DD>Open a database.
-<DT><A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>SecondaryKeyCreator</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>.<DD>An interface specifying how secondary keys for a
-<code>SecondaryDatabase</code> are created.<DT><A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>Sequence</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db">Sequence</A>.<DD>A Sequence handle is used to manipulate a sequence record in a database.<DT><A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>SequenceConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>.<DD>Specify the attributes of a sequence.<DT><A HREF="com/sleepycat/db/SequenceConfig.html#SequenceConfig()"><B>SequenceConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>SecondaryKeyCreator</B></A> - Interface in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The interface implemented for extracting single-valued secondary keys from
+primary records.<DT><A HREF="./com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean, boolean, boolean)"><B>send(Environment, DatabaseEntry, DatabaseEntry, LogSequenceNumber, int, boolean, boolean, boolean, boolean)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>
+<DD>The callback used when Berkeley DB needs to transmit a replication
+ message.
+<DT><A HREF="./com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>Sequence</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A Sequence handle is used to manipulate a sequence record in a database.<DT><A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>SequenceConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specify the attributes of a sequence.<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#SequenceConfig()"><B>SequenceConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>An instance created using the default constructor is initialized with
the system's default settings.
-<DT><A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>SequenceStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>.<DD>A SequenceStats object is used to return sequenece statistics.<DT><A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialBinding</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>.<DD>A concrete <code>EntryBinding</code> that treats a key or data entry as
- a serialized object.<DT><A HREF="com/sleepycat/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>SerialBinding(ClassCatalog, Class)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>SequenceStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>A SequenceStats object is used to return sequence statistics.<DT><A HREF="./com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><B>SerialBase</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A base class for serial bindings creators that provides control over the
+ allocation of the output buffer.<DT><A HREF="./com/sleepycat/bind/serial/SerialBase.html#SerialBase()"><B>SerialBase()</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A>
+<DD>Initializes the initial output buffer size to zero.
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A concrete <code>EntryBinding</code> that treats a key or data entry as
+ a serialized object.<DT><A HREF="./com/sleepycat/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>SerialBinding(ClassCatalog, Class)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial">SerialBinding</A>
<DD>Creates a serial binding.
-<DT><A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>SerialInput</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>.<DD>A specialized <code>ObjectInputStream</code> that gets class description
- information from a <code>ClassCatalog</code>.<DT><A HREF="com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog)"><B>SerialInput(InputStream, ClassCatalog)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>SerialInput</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A specialized <code>ObjectInputStream</code> that gets class description
+ information from a <code>ClassCatalog</code>.<DT><A HREF="./com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog)"><B>SerialInput(InputStream, ClassCatalog)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>
<DD>Creates a serial input stream.
-<DT><A HREF="com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>SerialOutput</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial">SerialOutput</A>.<DD>A specialized <code>ObjectOutputStream</code> that stores class description
- information in a <code>ClassCatalog</code>.<DT><A HREF="com/sleepycat/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bind.serial.ClassCatalog)"><B>SerialOutput(OutputStream, ClassCatalog)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial">SerialOutput</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bind.serial.ClassCatalog, java.lang.ClassLoader)"><B>SerialInput(InputStream, ClassCatalog, ClassLoader)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial">SerialInput</A>
+<DD>Creates a serial input stream.
+<DT><A HREF="./com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>SerialOutput</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A specialized <code>ObjectOutputStream</code> that stores class description
+ information in a <code>ClassCatalog</code>.<DT><A HREF="./com/sleepycat/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bind.serial.ClassCatalog)"><B>SerialOutput(OutputStream, ClassCatalog)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial">SerialOutput</A>
<DD>Creates a serial output stream.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialBinding</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>.<DD>An abstract <code>EntityBinding</code> that treats an entity's key entry and
- data entry as serialized objects.<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class)"><B>SerialSerialBinding(ClassCatalog, Class, Class)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>An abstract <code>EntityBinding</code> that treats an entity's key entry and
+ data entry as serialized objects.<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class)"><B>SerialSerialBinding(ClassCatalog, Class, Class)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>Creates a serial-serial entity binding.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)"><B>SerialSerialBinding(SerialBinding, SerialBinding)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)"><B>SerialSerialBinding(SerialBinding, SerialBinding)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial">SerialSerialBinding</A>
<DD>Creates a serial-serial entity binding.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialKeyCreator</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>.<DD>A abstract key creator that uses a serial key and a serial data entry.<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class, java.lang.Class)"><B>SerialSerialKeyCreator(ClassCatalog, Class, Class, Class)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialKeyCreator</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A abstract key creator that uses a serial key and a serial data entry.<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class, java.lang.Class, java.lang.Class)"><B>SerialSerialKeyCreator(ClassCatalog, Class, Class, Class)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>Creates a serial-serial key creator.
-<DT><A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)"><B>SerialSerialKeyCreator(SerialBinding, SerialBinding, SerialBinding)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html#SerialSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding, com.sleepycat.bind.serial.SerialBinding)"><B>SerialSerialKeyCreator(SerialBinding, SerialBinding, SerialBinding)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</A>
<DD>Creates a serial-serial entity binding.
-<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>ShortBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>.<DD>A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
- wrapper or a <code>short</code> primitive.<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html#ShortBinding()"><B>ShortBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>StatsConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>.<DD>Specifies the attributes of a statistics retrieval operation.<DT><A HREF="com/sleepycat/db/StatsConfig.html#StatsConfig()"><B>StatsConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
-<DD>An instance created using the default constructor is initialized
- with the system's default settings.
-<DT><A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>StoredClassCatalog</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>.<DD>A <code>ClassCatalog</code> that is stored in a <code>Database</code>.<DT><A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.Database)"><B>StoredClassCatalog(Database)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
-<DD>Creates a catalog based on a given database.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>StoredCollection</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>.<DD>A abstract base class for all stored collections.<DT><A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>StoredCollections</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections">StoredCollections</A>.<DD>This class consists exclusively of static methods that operate on or return
- stored collections.<DT><A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>StoredContainer</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>.<DD>A abstract base class for all stored collections and maps.<DT><A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>StoredEntrySet</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>.<DD>The Set returned by Map.entrySet().<DT><A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>StoredIterator</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>.<DD>The Iterator returned by all stored collections.<DT><A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>StoredKeySet</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredKeySet(Database, EntryBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
-<DD>Creates a key set view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>StoredList</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>.<DD>A List view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.<DT><A HREF="com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredList(Database, EntryBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
-<DD>Creates a list view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredList(Database, EntityBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
-<DD>Creates a list entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredList(Database, EntryBinding, PrimaryKeyAssigner)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
-<DD>Creates a list view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredList(Database, EntityBinding, PrimaryKeyAssigner)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
-<DD>Creates a list entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>StoredMap</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>.<DD>A Map view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.<DT><A HREF="com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredMap(Database, EntryBinding, EntryBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
-<DD>Creates a map view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredMap(Database, EntryBinding, EntryBinding, PrimaryKeyAssigner)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
-<DD>Creates a map view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredMap(Database, EntryBinding, EntityBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
-<DD>Creates a map entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredMap(Database, EntryBinding, EntityBinding, PrimaryKeyAssigner)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
-<DD>Creates a map entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>StoredSortedEntrySet</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>.<DD>The SortedSet returned by Map.entrySet().<DT><A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>StoredSortedKeySet</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredSortedKeySet(Database, EntryBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
-<DD>Creates a sorted key set view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>StoredSortedMap</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>.<DD>A SortedMap view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredSortedMap(Database, EntryBinding, EntryBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
-<DD>Creates a sorted map view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredSortedMap(Database, EntryBinding, EntryBinding, PrimaryKeyAssigner)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
-<DD>Creates a sorted map view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredSortedMap(Database, EntryBinding, EntityBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
-<DD>Creates a sorted map entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredSortedMap(Database, EntryBinding, EntityBinding, PrimaryKeyAssigner)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
-<DD>Creates a sorted map entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>StoredSortedValueSet</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredSortedValueSet(Database, EntityBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
-<DD>Creates a sorted value set entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>StoredValueSet</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">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/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredValueSet(Database, EntryBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
-<DD>Creates a value set view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredValueSet(Database, EntityBinding, boolean)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
-<DD>Creates a value set entity view of a <A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
-<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>StringBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>.<DD>A concrete <code>TupleBinding</code> for a simple <code>String</code> value.<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html#StringBinding()"><B>StringBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/ReplicationTransport.html#send(com.sleepycat.db.Environment, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.LogSequenceNumber, int, boolean, boolean)"><B>send(Environment, DatabaseEntry, DatabaseEntry, LogSequenceNumber, int, boolean, boolean)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db">ReplicationTransport</A>
-<DD>The callback used when Berkeley DB needs to transmit a replication
- message.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#set(java.lang.Object)"><B>set(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#set(java.lang.Object)"><B>set(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Replaces the last element returned by next or previous with the
specified element (optional operation).
-<DT><A HREF="com/sleepycat/collections/StoredList.html#set(int, java.lang.Object)"><B>set(int, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#set(int, java.lang.Object)"><B>set(int, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
<DD>Replaces the element at the specified position in this list with the
specified element (optional operation).
-<DT><A HREF="com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>set(LogSequenceNumber, DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
+<DT><A HREF="./com/sleepycat/db/LogCursor.html#set(com.sleepycat.db.LogSequenceNumber, com.sleepycat.db.DatabaseEntry)"><B>set(LogSequenceNumber, DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db">LogCursor</A>
<DD>Return a specific log record.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#setAggressive(boolean)"><B>setAggressive(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b> the
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#setAggressive(boolean)"><B>setAggressive(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to output <b>all</b> the
key/data pairs in the file that can be found.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setAllowCreate(boolean)"><B>setAllowCreate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Configure the <A HREF="com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method to create
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setAllowCreate(boolean)"><B>setAllowCreate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Configure the <A HREF="./com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method to create
the database if it does not already exist.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setAllowCreate(boolean)"><B>setAllowCreate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setAllowCreate(boolean)"><B>setAllowCreate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to create any underlying files,
as necessary.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setAllowCreate(boolean)"><B>setAllowCreate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Configure the <A HREF="com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method to
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setAllowCreate(boolean)"><B>setAllowCreate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Configure the <A HREF="./com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method to
create the sequence if it does not already exist.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#setAllowNestedTransactions(boolean)"><B>setAllowNestedTransactions(boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#setAllowNestedTransactions(boolean)"><B>setAllowNestedTransactions(boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>Changes whether nested transactions will be created if
<code>run()</code> is called when a transaction is already active for
the current thread.
-<DT><A HREF="com/sleepycat/db/SecondaryConfig.html#setAllowPopulate(boolean)"><B>setAllowPopulate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#setAllowPopulate(boolean)"><B>setAllowPopulate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
<DD>Specifies whether automatic population of the secondary is allowed.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setAutoCommitNoSync(boolean)"><B>setAutoCommitNoSync(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setAutoCommitNoSync(boolean)"><B>setAutoCommitNoSync(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Configure auto-commit operations on the sequence to not flush
the transaction log.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setBtreeComparator(java.util.Comparator)"><B>setBtreeComparator(Comparator)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setBtreeComparator(java.util.Comparator)"><B>setBtreeComparator(Comparator)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>By default, a byte by byte lexicographic comparison is used for
btree keys.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setBtreeMinKey(int)"><B>setBtreeMinKey(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setBtreeMinKey(int)"><B>setBtreeMinKey(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</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/DatabaseConfig.html#setBtreePrefixCalculator(com.sleepycat.db.BtreePrefixCalculator)"><B>setBtreePrefixCalculator(BtreePrefixCalculator)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setBtreePrefixCalculator(com.sleepycat.db.BtreePrefixCalculator)"><B>setBtreePrefixCalculator(BtreePrefixCalculator)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the Btree prefix callback.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setBtreeRecordNumbers(boolean)"><B>setBtreeRecordNumbers(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setBtreeRecordNumbers(boolean)"><B>setBtreeRecordNumbers(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the Btree to support retrieval by record number.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setByteOrder(int)"><B>setByteOrder(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setByteOrder(int)"><B>setByteOrder(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the byte order for integers in the stored database metadata.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setCDBLockAllDatabases(boolean)"><B>setCDBLockAllDatabases(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Configure Concurrent Data Store applications to perform locking on
- an environment-wide basis rather than on a per-database basis.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setCacheCount(int)"><B>setCacheCount(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setCacheCount(int)"><B>setCacheCount(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the number of shared memory buffer pools, that is, the number of
caches.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setCacheCount(int)"><B>setCacheCount(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setCacheCount(int)"><B>setCacheCount(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the number of shared memory buffer pools, that is, the number of
caches.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setCacheSize(long)"><B>setCacheSize(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setCacheSize(long)"><B>setCacheSize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the size of the shared memory buffer pool, that is, the size of the
cache.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setCacheSize(long)"><B>setCacheSize(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setCacheSize(long)"><B>setCacheSize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the size of the shared memory buffer pool, that is, the size of the
cache.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setCacheSize(int)"><B>setCacheSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setCacheSize(int)"><B>setCacheSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Set the
Configure the number of elements cached by a sequence handle.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setChecksum(boolean)"><B>setChecksum(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setCDBLockAllDatabases(boolean)"><B>setCDBLockAllDatabases(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Configure Concurrent Data Store applications to perform locking on
+ an environment-wide basis rather than on a per-database basis.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setChecksum(boolean)"><B>setChecksum(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database environment to do checksum verification of
pages read into the cache from the backing filestore.
-<DT><A HREF="com/sleepycat/db/StatsConfig.html#setClear(boolean)"><B>setClear(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
+<DT><A HREF="./com/sleepycat/db/StatsConfig.html#setClear(boolean)"><B>setClear(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
<DD>Configure the statistics operation to reset statistics after they
are returned.
-<DT><A HREF="com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)"><B>setConfig(DatabaseConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#setConfig(com.sleepycat.db.DatabaseConfig)"><B>setConfig(DatabaseConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Change the settings in an existing database handle.
-<DT><A HREF="com/sleepycat/db/Environment.html#setConfig(com.sleepycat.db.EnvironmentConfig)"><B>setConfig(EnvironmentConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#setConfig(com.sleepycat.db.EnvironmentConfig)"><B>setConfig(EnvironmentConfig)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Change the settings in an existing environment handle.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setData(byte[])"><B>setData(byte[])</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setData(byte[])"><B>setData(byte[])</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Sets the byte array.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)"><B>setData(byte[], int, int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setData(byte[], int, int)"><B>setData(byte[], int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Sets the byte array, offset and size.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setDecrement(boolean)"><B>setDecrement(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer)"><B>setDataNIO(ByteBuffer)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Sets the java.nio.ByteBuffer.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setDataNIO(java.nio.ByteBuffer, int, int)"><B>setDataNIO(ByteBuffer, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DD>Sets the java.nio.ByteBuffer.
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setDecrement(boolean)"><B>setDecrement(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Specify that the sequence should be decremented.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#setDegree2(boolean)"><B>setDegree2(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>Configure the cursor for degree 2 isolation.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#setDegree2(boolean)"><B>setDegree2(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Configure this transaction to have degree 2 isolation.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setDirectDatabaseIO(boolean)"><B>setDirectDatabaseIO(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#setDegree2(boolean)"><B>setDegree2(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><CODE>CursorConfig.setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setDegree2(boolean)"><B>setDegree2(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/TransactionConfig.html#setReadCommitted(boolean)"><CODE>TransactionConfig.setReadCommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setDirectDatabaseIO(boolean)"><B>setDirectDatabaseIO(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to not buffer database files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setDirectLogIO(boolean)"><B>setDirectLogIO(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setDirectLogIO(boolean)"><B>setDirectLogIO(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to not buffer log files.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>Configure read operations performed by the cursor to return modified
- but not yet committed data.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Configure the database to support dirty reads.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Configure the transaction to perform dirty reads.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setDsyncLog(boolean)"><B>setDsyncLog(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/CursorConfig.html#setReadUncommitted(boolean)"><CODE>CursorConfig.setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/DatabaseConfig.html#setReadUncommitted(boolean)"><CODE>DatabaseConfig.setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD><B>Deprecated.</B>&nbsp;<I>This has been replaced by <A HREF="./com/sleepycat/db/TransactionConfig.html#setReadUncommitted(boolean)"><CODE>TransactionConfig.setReadUncommitted(boolean)</CODE></A> to conform to ANSI
+ database isolation terminology.</I>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setDsyncDatabases(boolean)"><B>setDsyncDatabases(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Configure the database environment to flush database writes to the backing
+ disk before returning from the write system call, rather than flushing
+ database writes explicitly in a separate system call, as necessary.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setDsyncLog(boolean)"><B>setDsyncLog(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to flush log writes to the
backing disk before returning from the write system call, rather
than flushing log writes explicitly in a separate system call.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setDuplicateComparator(java.util.Comparator)"><B>setDuplicateComparator(Comparator)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setDuplicateComparator(java.util.Comparator)"><B>setDuplicateComparator(Comparator)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the duplicate data item comparison callback.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setEncrypted(java.lang.String)"><B>setEncrypted(String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setEncrypted(java.lang.String)"><B>setEncrypted(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the password used to perform encryption and decryption.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setEncrypted(java.lang.String)"><B>setEncrypted(String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setEncrypted(java.lang.String)"><B>setEncrypted(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the password used to perform encryption and decryption.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setErrorHandler(com.sleepycat.db.ErrorHandler)"><B>setErrorHandler(ErrorHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setErrorHandler(com.sleepycat.db.ErrorHandler)"><B>setErrorHandler(ErrorHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the function to be called if an error occurs.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setErrorHandler(com.sleepycat.db.ErrorHandler)"><B>setErrorHandler(ErrorHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setErrorHandler(com.sleepycat.db.ErrorHandler)"><B>setErrorHandler(ErrorHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the function to be called if an error occurs.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setErrorPrefix(java.lang.String)"><B>setErrorPrefix(String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setErrorPrefix(java.lang.String)"><B>setErrorPrefix(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the prefix string that appears before error messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setErrorPrefix(java.lang.String)"><B>setErrorPrefix(String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setErrorPrefix(java.lang.String)"><B>setErrorPrefix(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the prefix string that appears before error messages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setErrorStream(java.io.OutputStream)"><B>setErrorStream(OutputStream)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setErrorStream(java.io.OutputStream)"><B>setErrorStream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set an OutputStream for displaying error messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setErrorStream(java.io.OutputStream)"><B>setErrorStream(OutputStream)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setErrorStream(java.io.OutputStream)"><B>setErrorStream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set an OutputStream for displaying error messages.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setExclusiveCreate(boolean)"><B>setExclusiveCreate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Configure the <A HREF="com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method to fail if
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setEventHandler(com.sleepycat.db.EventHandler)"><B>setEventHandler(EventHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set an object whose methods are to be called when a triggered event occurs.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setExclusiveCreate(boolean)"><B>setExclusiveCreate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Configure the <A HREF="./com/sleepycat/db/Environment.html#openDatabase(com.sleepycat.db.Transaction, java.lang.String, java.lang.String, com.sleepycat.db.DatabaseConfig)"><CODE>Environment.openDatabase</CODE></A> method to fail if
the database already exists.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setExclusiveCreate(boolean)"><B>setExclusiveCreate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Configure the <A HREF="com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method to
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setExclusiveCreate(boolean)"><B>setExclusiveCreate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Configure the <A HREF="./com/sleepycat/db/Database.html#openSequence(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.SequenceConfig)"><CODE>Database.openSequence</CODE></A> method to
fail if the database already exists.
-<DT><A HREF="com/sleepycat/db/StatsConfig.html#setFast(boolean)"><B>setFast(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
+<DT><A HREF="./com/sleepycat/db/StatsConfig.html#setFast(boolean)"><B>setFast(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
<DD>Configure the statistics operation to return only the values which
do not incur some performance penalty.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)"><B>setFeedbackHandler(FeedbackHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)"><B>setFeedbackHandler(FeedbackHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set an object whose methods are called to provide feedback.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)"><B>setFeedbackHandler(FeedbackHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setFeedbackHandler(com.sleepycat.db.FeedbackHandler)"><B>setFeedbackHandler(FeedbackHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set an object whose methods are called to provide feedback.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#setForce(boolean)"><B>setForce(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#setFillPercent(int)"><B>setFillPercent(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Set the desired fill percentage.
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#setForce(boolean)"><B>setForce(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Configure the checkpoint force option.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setHashFillFactor(int)"><B>setHashFillFactor(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#setFreeListOnly(boolean)"><B>setFreeListOnly(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Configure whether to skip page compaction, only returning pages
+ to the filesystem that are already free and at the end of the file.
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#setFreeSpace(boolean)"><B>setFreeSpace(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Return pages to the filesystem if possible.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setHasher(com.sleepycat.db.Hasher)"><B>setHasher(Hasher)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Set a database-specific hash function.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setHashFillFactor(int)"><B>setHashFillFactor(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the desired density within the hash table.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setHashNumElements(int)"><B>setHashNumElements(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setHashNumElements(int)"><B>setHashNumElements(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set an estimate of the final size of the hash table.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setHasher(com.sleepycat.db.Hasher)"><B>setHasher(Hasher)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Set a database-specific hash function.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setInitialValue(long)"><B>setInitialValue(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
-<DD>Set the
-Set the initial value for a sequence.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setInitializeCDB(boolean)"><B>setInitializeCDB(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#setImmutableSecondaryKey(boolean)"><B>setImmutableSecondaryKey(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DD>Specifies whether the secondary key is immutable.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setInitializeCache(boolean)"><B>setInitializeCache(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Configure a shared memory buffer pool in the database environment.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setInitializeCDB(boolean)"><B>setInitializeCDB(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment for the Concurrent Data Store
product.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setInitializeCache(boolean)"><B>setInitializeCache(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Configure a shared memory buffer pool in the database environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setInitializeLocking(boolean)"><B>setInitializeLocking(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setInitializeLocking(boolean)"><B>setInitializeLocking(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment for locking.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setInitializeLogging(boolean)"><B>setInitializeLogging(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setInitializeLogging(boolean)"><B>setInitializeLogging(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment for logging.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setInitializeRegions(boolean)"><B>setInitializeRegions(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setInitializeRegions(boolean)"><B>setInitializeRegions(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to page-fault shared regions into
memory when initially creating or joining a database environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setInitializeReplication(boolean)"><B>setInitializeReplication(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setInitializeReplication(boolean)"><B>setInitializeReplication(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment for replication.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setJoinEnvironment(boolean)"><B>setJoinEnvironment(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setInitialValue(long)"><B>setInitialValue(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DD>Set the
+Set the initial value for a sequence.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#setIteratorBlockSize(int)"><B>setIteratorBlockSize(int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD>Changes the number of records read at one time by iterators returned by
+ the <A HREF="./com/sleepycat/collections/StoredCollection.html#iterator()"><CODE>StoredCollection.iterator()</CODE></A> method.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setJoinEnvironment(boolean)"><B>setJoinEnvironment(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the handle to join an existing environment.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#setKBytes(int)"><B>setKBytes(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#setKBytes(int)"><B>setKBytes(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Configure the checkpoint log data threshold, in kilobytes.
-<DT><A HREF="com/sleepycat/db/SecondaryConfig.html#setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)"><B>setKeyCreator(SecondaryKeyCreator)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
-<DD>Specifies the user-supplied object used for creating secondary keys.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#setLock(com.sleepycat.db.Lock)"><B>setLock(Lock)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/SecondaryConfig.html#setKeyCreator(com.sleepycat.db.SecondaryKeyCreator)"><B>setKeyCreator(SecondaryKeyCreator)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db">SecondaryConfig</A>
+<DD>Specifies the user-supplied object used for creating single-valued
+ secondary keys.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#setLock(com.sleepycat.db.Lock)"><B>setLock(Lock)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Set the lock reference.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLockConflicts(byte[][])"><B>setLockConflicts(byte[][])</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLockConflicts(byte[][])"><B>setLockConflicts(byte[][])</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the locking conflicts matrix.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLockDetectMode(com.sleepycat.db.LockDetectMode)"><B>setLockDetectMode(LockDetectMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLockDetectMode(com.sleepycat.db.LockDetectMode)"><B>setLockDetectMode(LockDetectMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure if the deadlock detector is to be run whenever a lock
conflict occurs.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLockDown(boolean)"><B>setLockDown(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLockDown(boolean)"><B>setLockDown(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to lock shared environment files
and memory-mapped databases into memory.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLockTimeout(long)"><B>setLockTimeout(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLockTimeout(long)"><B>setLockTimeout(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the timeout value for the database environment
locks.
-<DT><A HREF="com/sleepycat/db/Transaction.html#setLockTimeout(long)"><B>setLockTimeout(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#setLockTimeout(long)"><B>setLockTimeout(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>Configure the lock request timeout value for the transaction.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLogAutoRemove(boolean)"><B>setLogAutoRemove(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogAutoRemove(boolean)"><B>setLogAutoRemove(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to automatically remove log files that are no
longer needed.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLogBufferSize(int)"><B>setLogBufferSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogBufferSize(int)"><B>setLogBufferSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the size of the in-memory log buffer, in bytes.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLogDirectory(java.io.File)"><B>setLogDirectory(File)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogDirectory(java.io.File)"><B>setLogDirectory(File)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the path of a directory to be used as the location of logging files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLogInMemory(boolean)"><B>setLogInMemory(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogFileMode(int)"><B>setLogFileMode(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the absolute file mode for created log files.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogInMemory(boolean)"><B>setLogInMemory(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>If set, maintain transaction logs in memory rather than on disk.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLogRecordHandler(com.sleepycat.db.LogRecordHandler)"><B>setLogRecordHandler(LogRecordHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogRecordHandler(com.sleepycat.db.LogRecordHandler)"><B>setLogRecordHandler(LogRecordHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set a function to process application-specific log records.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setLogRegionSize(int)"><B>setLogRegionSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setLogRegionSize(int)"><B>setLogRegionSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the size of the underlying logging area of the database
environment, in bytes.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMMapSize(long)"><B>setMMapSize(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Set the maximum file size, in bytes, for a file to be mapped into
- the process address space.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMaxLockObjects(int)"><B>setMaxLockObjects(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Set the maximum number of locked objects supported by the database
- environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMaxLockers(int)"><B>setMaxLockers(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#setMaximumSize(long)"><B>setMaximumSize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DD>Set the
+maximum size for the file backing the database.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxLockers(int)"><B>setMaxLockers(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the maximum number of locking entities supported by the database
environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMaxLocks(int)"><B>setMaxLocks(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxLockObjects(int)"><B>setMaxLockObjects(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the maximum number of locked objects supported by the database
+ environment.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxLocks(int)"><B>setMaxLocks(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the maximum number of locks supported by the database
environment.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMaxLogFileSize(int)"><B>setMaxLogFileSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxLogFileSize(int)"><B>setMaxLogFileSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the maximum size of a single file in the log, in bytes.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#setMaxRetries(int)"><B>setMaxRetries(int)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxMutexes(int)"><B>setMaxMutexes(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the total number of mutexes to allocate.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxOpenFiles(int)"><B>setMaxOpenFiles(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Limit the number of file descriptors the library will open concurrently
+ when flushing dirty pages from the cache.
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#setMaxPages(int)"><B>setMaxPages(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>For internal use only.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#setMaxRetries(int)"><B>setMaxRetries(int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>Changes the maximum number of retries that will be performed when
deadlocks are detected.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#setMaximumSize(long)"><B>setMaximumSize(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
-<DD>Set the
-maximum size for the file backing the database.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)"><B>setMessageHandler(MessageHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMaxWrite(int, int)"><B>setMaxWrite(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Limit the number of sequential write operations scheduled by the
+ library when flushing dirty pages from the cache.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)"><B>setMessageHandler(MessageHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set a function to be called with an informational message.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)"><B>setMessageHandler(MessageHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMessageHandler(com.sleepycat.db.MessageHandler)"><B>setMessageHandler(MessageHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set a function to be called with an informational message.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setMessageStream(java.io.OutputStream)"><B>setMessageStream(OutputStream)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setMessageStream(java.io.OutputStream)"><B>setMessageStream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set an OutputStream for displaying informational messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMessageStream(java.io.OutputStream)"><B>setMessageStream(OutputStream)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMessageStream(java.io.OutputStream)"><B>setMessageStream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set an OutputStream for displaying informational messages.
-<DT><A HREF="com/sleepycat/db/CheckpointConfig.html#setMinutes(int)"><B>setMinutes(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
+<DT><A HREF="./com/sleepycat/db/CheckpointConfig.html#setMinutes(int)"><B>setMinutes(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db">CheckpointConfig</A>
<DD>Configure the checkpoint time threshold, in minutes.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setMode(int)"><B>setMode(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMMapSize(long)"><B>setMMapSize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the maximum file size, in bytes, for a file to be mapped into
+ the process address space.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setMode(int)"><B>setMode(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, files
created by the database open are created with mode <code>mode</code>
(as described in the <code>chmod</code>(2) manual page) and modified
by the process' umask value at the time of creation (see the
<code>umask</code>(2) manual page).
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setMode(int)"><B>setMode(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMode(int)"><B>setMode(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to use a specific mode when
creating underlying files and shared memory segments.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#setMode(com.sleepycat.db.LockRequestMode)"><B>setMode(LockRequestMode)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#setMode(com.sleepycat.db.LockRequestMode)"><B>setMode(LockRequestMode)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Set the lock mode.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#setNoFile(boolean)"><B>setNoFile(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setMultiversion(boolean)"><B>setMultiversion(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Configured the database with support for multiversion concurrency control.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMultiversion(boolean)"><B>setMultiversion(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Configure the database environment to open all databases that are not
+ using the queue access method for multiversion concurrency control.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMutexAlignment(int)"><B>setMutexAlignment(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the mutex alignment, in bytes.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMutexIncrement(int)"><B>setMutexIncrement(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Increase the number of mutexes to allocate.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setMutexTestAndSetSpins(int)"><B>setMutexTestAndSetSpins(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Specify the number of times that test-and-set mutexes should spin
+ without blocking.
+<DT><A HREF="./com/sleepycat/db/Transaction.html#setName(java.lang.String)"><B>setName(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DD>Set the user visible name for the transaction.
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#setNoFile(boolean)"><B>setNoFile(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
<DD>Disallow opening backing temporary files for in-memory
databases, even if they expand to fill the entire cache.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setNoLocking(boolean)"><B>setNoLocking(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setNoLocking(boolean)"><B>setNoLocking(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to grant all requested mutual exclusion mutexes
and database locks without regard for their actual availability.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setNoMMap(boolean)"><B>setNoMMap(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setNoMMap(boolean)"><B>setNoMMap(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the library to not map this database into memory.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setNoMMap(boolean)"><B>setNoMMap(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setNoMMap(boolean)"><B>setNoMMap(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to copy read-only database files into the local
cache instead of potentially mapping them into process memory.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><B>setNoOrderCheck(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to skip the database checks for
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><B>setNoOrderCheck(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to skip the database checks for
btree and duplicate sort order and for hashing.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setNoPanic(boolean)"><B>setNoPanic(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setNoPanic(boolean)"><B>setNoPanic(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to ignore any panic state in the database
environment.
-<DT><A HREF="com/sleepycat/db/JoinConfig.html#setNoSort(boolean)"><B>setNoSort(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
+<DT><A HREF="./com/sleepycat/db/JoinConfig.html#setNoSort(boolean)"><B>setNoSort(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db">JoinConfig</A>
<DD>Specifies whether automatic sorting of the input cursors is disabled.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#setNoSync(boolean)"><B>setNoSync(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setNoSync(boolean)"><B>setNoSync(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
<DD>Configure the transaction to not write or synchronously flush the log
it when commits.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#setNoWait(boolean)"><B>setNoWait(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setNoWait(boolean)"><B>setNoWait(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
<DD>Configure the transaction to not wait if a lock request cannot be
immediately granted.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#setObj(com.sleepycat.db.DatabaseEntry)"><B>setObj(DatabaseEntry)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#setObj(com.sleepycat.db.DatabaseEntry)"><B>setObj(DatabaseEntry)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Set the lock object.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setOffset(int)"><B>setOffset(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setOffset(int)"><B>setOffset(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Set the byte offset into the data array.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#setOp(com.sleepycat.db.LockOperation)"><B>setOp(LockOperation)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#setOp(com.sleepycat.db.LockOperation)"><B>setOp(LockOperation)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Set the operation.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#setOrderCheckOnly(boolean)"><B>setOrderCheckOnly(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to do database checks for btree
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#setOrderCheckOnly(boolean)"><B>setOrderCheckOnly(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to do database checks for btree
and duplicate sort order and for hashing, skipped by verification
- operations configured by <A HREF="com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setOverwrite(boolean)"><B>setOverwrite(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+ operations configured by <A HREF="./com/sleepycat/db/VerifyConfig.html#setNoOrderCheck(boolean)"><CODE>VerifyConfig.setNoOrderCheck</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setOverwrite(boolean)"><B>setOverwrite(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to overwrite files stored in encrypted formats
before deleting them.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setPageSize(int)"><B>setPageSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setPageSize(int)"><B>setPageSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the size of the pages used to hold items in the database, in bytes.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setPanicHandler(com.sleepycat.db.PanicHandler)"><B>setPanicHandler(PanicHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setPanicHandler(com.sleepycat.db.PanicHandler)"><B>setPanicHandler(PanicHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the function to be called if the database environment panics.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setPanicHandler(com.sleepycat.db.PanicHandler)"><B>setPanicHandler(PanicHandler)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setPanicHandler(com.sleepycat.db.PanicHandler)"><B>setPanicHandler(PanicHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the function to be called if the database environment panics.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)"><B>setPartial(int, int, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setPartial(int, int, boolean)"><B>setPartial(int, int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Configures this DatabaseEntry to read or write partial records.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)"><B>setPartial(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setPartial(boolean)"><B>setPartial(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Configure this DatabaseEntry to read or write partial records.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)"><B>setPartialLength(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setPartialLength(int)"><B>setPartialLength(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</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/DatabaseEntry.html#setPartialOffset(int)"><B>setPartialOffset(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setPartialOffset(int)"><B>setPartialOffset(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Set the offset of the partial record being read or written by the
application, in bytes.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#setPrintable(boolean)"><B>setPrintable(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to use printing characters to
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#setPrintable(boolean)"><B>setPrintable(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to use printing characters to
where possible.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#setPriority(com.sleepycat.db.CacheFilePriority)"><B>setPriority(CacheFilePriority)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#setPriority(com.sleepycat.db.CacheFilePriority)"><B>setPriority(CacheFilePriority)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
<DD>Set the
cache priority for pages from the specified file.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setPrivate(boolean)"><B>setPrivate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setPrivate(boolean)"><B>setPrivate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to only be accessed by a single
process (although that process may be multithreaded).
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setQueueExtentSize(int)"><B>setQueueExtentSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setQueueExtentSize(int)"><B>setQueueExtentSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</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/DatabaseConfig.html#setQueueInOrder(boolean)"><B>setQueueInOrder(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> to return key/data pairs in
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setQueueInOrder(boolean)"><B>setQueueInOrder(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#consume(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, boolean)"><CODE>Database.consume</CODE></A> to return key/data pairs in
order, always returning the key/data item from the head of the
queue.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setRPCServer(java.lang.String, long, long)"><B>setRPCServer(String, long, long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Establish a connection to a RPC server for this database environment.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setRange(long, long)"><B>setRange(long, long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setRange(long, long)"><B>setRange(long, long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Configure a sequence range.
-<DT><A HREF="com/sleepycat/collections/StoredIterator.html#setReadModifyWrite(boolean)"><B>setReadModifyWrite(boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#setReadCommitted(boolean)"><B>setReadCommitted(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>Configure the cursor for read committed isolation.
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setReadCommitted(boolean)"><B>setReadCommitted(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Configure the transaction for read committed isolation.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html#setReadModifyWrite(boolean)"><B>setReadModifyWrite(boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections">StoredIterator</A>
<DD>Changes whether write-locks will be obtained when reading with this
cursor.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setReadOnly(boolean)"><B>setReadOnly(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setReadOnly(boolean)"><B>setReadOnly(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database in read-only mode.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setReadOnly(boolean)"><B>setReadOnly(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Configure the environment handle to be opened read-only.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setRecordDelimiter(int)"><B>setRecordDelimiter(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#setReadUncommitted(boolean)"><B>setReadUncommitted(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>Configure read operations performed by the cursor to return modified
+ but not yet committed data.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setReadUncommitted(boolean)"><B>setReadUncommitted(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Configure the database to support read uncommitted.
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setReadUncommitted(boolean)"><B>setReadUncommitted(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Configure read operations performed by the transaction to return modified
+ but not yet committed data.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setRecordDelimiter(int)"><B>setRecordDelimiter(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</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/DatabaseConfig.html#setRecordLength(int)"><B>setRecordLength(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setRecordLength(int)"><B>setRecordLength(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Specify the database record length, in bytes.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)"><B>setRecordNumber(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setRecordNumber(int)"><B>setRecordNumber(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Initialize the entry from a logical record number.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setRecordNumberAppender(com.sleepycat.db.RecordNumberAppender)"><B>setRecordNumberAppender(RecordNumberAppender)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><CODE>Database.append</CODE></A> to call the function after the
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setRecordNumberAppender(com.sleepycat.db.RecordNumberAppender)"><B>setRecordNumberAppender(RecordNumberAppender)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#append(com.sleepycat.db.Transaction, com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry)"><CODE>Database.append</CODE></A> to call the function after the
record number has been selected but before the data has been stored
into the database.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setRecordPad(int)"><B>setRecordPad(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setRecordPad(int)"><B>setRecordPad(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the padding character for short, fixed-length records for the Queue
and Recno access methods.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setRecordSource(java.io.File)"><B>setRecordSource(File)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setRecordSource(java.io.File)"><B>setRecordSource(File)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Set the underlying source file for the Recno access method.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setRenumbering(boolean)"><B>setRenumbering(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><B>setRegister(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Check if a process has failed while using the database environment, that
+ is, if a process has exited with an open <A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><CODE>Environment</CODE></A> handle.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setRenumbering(boolean)"><B>setRenumbering(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the logical record numbers to be mutable, and change as
records are added to and deleted from the database.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setReplicationLimit(long)"><B>setReplicationLimit(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/Environment.html#setReplicationConfig(com.sleepycat.db.ReplicationConfig, boolean)"><B>setReplicationConfig(ReplicationConfig, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Configure the replication subsystem.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationLimit(long)"><B>setReplicationLimit(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Impose 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/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setReplicationTransport(int, com.sleepycat.db.ReplicationTransport)"><B>setReplicationTransport(int, ReplicationTransport)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+ transmitted from a site in a single call to <A HREF="./com/sleepycat/db/Environment.html#processReplicationMessage(com.sleepycat.db.DatabaseEntry, com.sleepycat.db.DatabaseEntry, int)"><CODE>Environment.processReplicationMessage</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationManagerAckPolicy(com.sleepycat.db.ReplicationManagerAckPolicy)"><B>setReplicationManagerAckPolicy(ReplicationManagerAckPolicy)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the network Ack policy used by the replication manager.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationManagerLocalSite(com.sleepycat.db.ReplicationHostAddress)"><B>setReplicationManagerLocalSite(ReplicationHostAddress)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the address of the local (this) site in a replication group.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationNumSites(int)"><B>setReplicationNumSites(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the total number of sites in the replication group.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationPriority(int)"><B>setReplicationPriority(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the current environments priority.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationRequestMax(int)"><B>setReplicationRequestMax(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the maximum amount of data sent in response to any request.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationRequestMin(int)"><B>setReplicationRequestMin(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Set the minimum amount of data sent in response to any request.
+<DT><A HREF="./com/sleepycat/db/Environment.html#setReplicationTimeout(com.sleepycat.db.ReplicationTimeoutType, int)"><B>setReplicationTimeout(ReplicationTimeoutType, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Set the network timeout applied to the specified timeout type.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setReplicationTransport(int, com.sleepycat.db.ReplicationTransport)"><B>setReplicationTransport(int, ReplicationTransport)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Initialize the communication infrastructure for a database environment
participating in a replicated application.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)"><B>setReuseBuffer(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setReuseBuffer(boolean)"><B>setReuseBuffer(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Configures the entry to try to reuse the buffer before allocating a new
one.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setReverseSplitOff(boolean)"><B>setReverseSplitOff(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setReverseSplitOff(boolean)"><B>setReverseSplitOff(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the Btree to not do reverse splits.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setRunFatalRecovery(boolean)"><B>setRunFatalRecovery(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setRPCServer(java.lang.String, long, long)"><B>setRPCServer(String, long, long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Establish a connection to a RPC server for this database environment.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setRunFatalRecovery(boolean)"><B>setRunFatalRecovery(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure to run catastrophic recovery on this environment before opening it for
normal use.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setRunRecovery(boolean)"><B>setRunRecovery(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setRunRecovery(boolean)"><B>setRunRecovery(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure to run normal recovery on this environment before opening it for
normal use.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html#setSalvage(boolean)"><B>setSalvage(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>Configure <A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><CODE>Database.verify</CODE></A> to write the key/data pairs from
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#setSalvage(boolean)"><B>setSalvage(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>Configure <A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><CODE>Database.verify</CODE></A> to write the key/data pairs from
all databases in the file to the file stream named by the outfile
parameter.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setSegmentId(long)"><B>setSegmentId(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setSegmentId(long)"><B>setSegmentId(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Specify a base segment ID for database environment shared memory
regions created in system memory on VxWorks or systems supporting
X/Open-style shared memory interfaces; for example, UNIX systems
supporting <code>shmget</code> and related System V IPC interfaces.
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setSize(int)"><B>setSize(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialBase.html#setSerialBufferSize(int)"><B>setSerialBufferSize(int)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial">SerialBase</A>
+<DD>Sets the initial byte size of the output buffer that is allocated by the
+ default implementation of <A HREF="./com/sleepycat/bind/serial/SerialBase.html#getSerialOutput(java.lang.Object)"><CODE>SerialBase.getSerialOutput(java.lang.Object)</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setSize(int)"><B>setSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Set the byte size of the data array.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setSnapshot(boolean)"><B>setSnapshot(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setSnapshot(boolean)"><B>setSnapshot(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Specify that any specified backing source file be read in its entirety
when the database is opened.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setSortedDuplicates(boolean)"><B>setSortedDuplicates(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setSnapshot(boolean)"><B>setSnapshot(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>This transaction will execute with snapshot isolation.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setSortedDuplicates(boolean)"><B>setSortedDuplicates(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database to support sorted, duplicate data items.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#setSync(boolean)"><B>setSync(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Configure the transaction to write or synchronously flush the log
+<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#setSync(boolean)"><B>setSync(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>Configure the transaction to write and synchronously flush the log
it when commits.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setSystemMemory(boolean)"><B>setSystemMemory(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setSystemMemory(boolean)"><B>setSystemMemory(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to allocate memory from system
shared memory instead of from memory backed by the filesystem.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTemporaryDirectory(java.lang.String)"><B>setTemporaryDirectory(String)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTemporaryDirectory(java.io.File)"><B>setTemporaryDirectory(File)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the path of a directory to be used as the location of temporary
files.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTestAndSetSpins(int)"><B>setTestAndSetSpins(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTemporaryDirectory(java.lang.String)"><B>setTemporaryDirectory(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTestAndSetSpins(int)"><B>setTestAndSetSpins(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the number of times test-and-set mutexes should spin before
blocking.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setThreaded(boolean)"><B>setThreaded(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setThreaded(boolean)"><B>setThreaded(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the handle to be <em>free-threaded</em>; that is, usable
by multiple threads within a single address space.
-<DT><A HREF="com/sleepycat/db/LockRequest.html#setTimeout(int)"><B>setTimeout(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
+<DT><A HREF="./com/sleepycat/db/CompactConfig.html#setTimeout(int)"><B>setTimeout(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db">CompactConfig</A>
+<DD>Set the lock timeout for implicit transactions.
+<DT><A HREF="./com/sleepycat/db/LockRequest.html#setTimeout(int)"><B>setTimeout(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db">LockRequest</A>
<DD>Set the lock timeout value.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#setTransactionConfig(com.sleepycat.db.TransactionConfig)"><B>setTransactionConfig(TransactionConfig)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setTransactional(boolean)"><B>setTransactional(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DD>Enclose the database open within a transaction.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTransactional(boolean)"><B>setTransactional(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Configure the database environment for transactions.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#setTransactionConfig(com.sleepycat.db.TransactionConfig)"><B>setTransactionConfig(TransactionConfig)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
<DD>Changes the transaction configuration used for calling
- <A HREF="com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setTransactionNotDurable(boolean)"><B>setTransactionNotDurable(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+ <A HREF="./com/sleepycat/db/Environment.html#beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)"><CODE>Environment.beginTransaction(com.sleepycat.db.Transaction, com.sleepycat.db.TransactionConfig)</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setTransactionNotDurable(boolean)"><B>setTransactionNotDurable(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database environment to not write log records for this
database.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setTransactional(boolean)"><B>setTransactional(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
-<DD>Enclose the database open within a transaction.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTransactional(boolean)"><B>setTransactional(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
-<DD>Configure the database environment for transactions.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setTruncate(boolean)"><B>setTruncate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setTruncate(boolean)"><B>setTruncate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database to be physically truncated by truncating the
underlying file, discarding all previous databases it might have
held.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTxnMaxActive(int)"><B>setTxnMaxActive(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#setTupleBufferSize(int)"><B>setTupleBufferSize(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<DD>Sets the initial byte size of the output buffer that is allocated by the
+ default implementation of <A HREF="./com/sleepycat/bind/tuple/TupleBase.html#getTupleOutput(java.lang.Object)"><CODE>TupleBase.getTupleOutput(java.lang.Object)</CODE></A>.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnMaxActive(int)"><B>setTxnMaxActive(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to support at least txnMaxActive
active transactions.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTxnNoSync(boolean)"><B>setTxnNoSync(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnNoSync(boolean)"><B>setTxnNoSync(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to not write or synchronously flush the log
on transaction commit.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTxnNotDurable(boolean)"><B>setTxnNotDurable(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnNotDurable(boolean)"><B>setTxnNotDurable(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to not write log records.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTxnTimeout(long)"><B>setTxnTimeout(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnSnapshot(boolean)"><B>setTxnSnapshot(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Configure the database environment to run transactions at snapshot
+ isolation by default.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnTimeout(long)"><B>setTxnTimeout(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Set the timeout value for the database environment
transactions.
-<DT><A HREF="com/sleepycat/db/Transaction.html#setTxnTimeout(long)"><B>setTxnTimeout(long)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html#setTxnTimeout(long)"><B>setTxnTimeout(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>
<DD>Configure the timeout value for the transaction lifetime.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTxnTimestamp(java.util.Date)"><B>setTxnTimestamp(Date)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnTimestamp(java.util.Date)"><B>setTxnTimestamp(Date)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Recover to the specified time rather than to the most current
possible date.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setTxnWriteNoSync(boolean)"><B>setTxnWriteNoSync(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setTxnWriteNoSync(boolean)"><B>setTxnWriteNoSync(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to write, but not synchronously flush, the log on
transaction commit.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setType(com.sleepycat.db.DatabaseType)"><B>setType(DatabaseType)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setType(com.sleepycat.db.DatabaseType)"><B>setType(DatabaseType)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the type of the database.
-<DT><A HREF="com/sleepycat/db/CacheFile.html#setUnlink(boolean)"><B>setUnlink(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
+<DT><A HREF="./com/sleepycat/db/CacheFile.html#setUnlink(boolean)"><B>setUnlink(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db">CacheFile</A>
<DD>Remove the file when the last reference to it is closed.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setUnsortedDuplicates(boolean)"><B>setUnsortedDuplicates(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setUnsortedDuplicates(boolean)"><B>setUnsortedDuplicates(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database to support unsorted duplicate data items.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setUseEnvironment(boolean)"><B>setUseEnvironment(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setUseEnvironment(boolean)"><B>setUseEnvironment(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to accept information from the
process environment when naming files, regardless of the status of
the process.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setUseEnvironmentRoot(boolean)"><B>setUseEnvironmentRoot(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setUseEnvironmentRoot(boolean)"><B>setUseEnvironmentRoot(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the database environment to accept information from the
process environment when naming files, if the process has
appropriate permissions (for example, users with a user-ID of 0 on
UNIX systems).
-<DT><A HREF="com/sleepycat/db/DatabaseEntry.html#setUserBuffer(int, boolean)"><B>setUserBuffer(int, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseEntry.html#setUserBuffer(int, boolean)"><B>setUserBuffer(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db">DatabaseEntry</A>
<DD>Configures the entry with an application-owned buffer.
-<DT><A HREF="com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)"><B>setUserBuffer(int, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A>
+<DT><A HREF="./com/sleepycat/db/MultipleEntry.html#setUserBuffer(int, boolean)"><B>setUserBuffer(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db">MultipleEntry</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#setValue(java.lang.Object)"><B>setValue(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#setValue(java.lang.Object)"><B>setValue(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
<DD>Always throws <code>UnsupportedOperationException</code> since this
object is not attached to a map.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setVerboseDeadlock(boolean)"><B>setVerboseDeadlock(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setVerboseDeadlock(boolean)"><B>setVerboseDeadlock(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Display additional information when doing deadlock detection.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setVerboseRecovery(boolean)"><B>setVerboseRecovery(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setVerboseRecovery(boolean)"><B>setVerboseRecovery(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Display additional information when performing recovery.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setVerboseReplication(boolean)"><B>setVerboseReplication(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setVerboseRegister(boolean)"><B>setVerboseRegister(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DD>Display additional information concerning support for the
+ <A HREF="./com/sleepycat/db/EnvironmentConfig.html#setRegister(boolean)"><CODE>EnvironmentConfig.setRegister(boolean)</CODE></A> method.
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setVerboseReplication(boolean)"><B>setVerboseReplication(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Display additional information when processing replication messages.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setVerboseWaitsFor(boolean)"><B>setVerboseWaitsFor(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setVerboseWaitsFor(boolean)"><B>setVerboseWaitsFor(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Display the waits-for table when doing deadlock detection.
-<DT><A HREF="com/sleepycat/db/SequenceConfig.html#setWrap(boolean)"><B>setWrap(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
+<DT><A HREF="./com/sleepycat/db/SequenceConfig.html#setWrap(boolean)"><B>setWrap(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db">SequenceConfig</A>
<DD>Specify that the sequence should wrap around when it is
incremented (decremented) past the specified maximum (minimum) value.
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#setWriteCursor(boolean)"><B>setWriteCursor(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#setWriteCursor(boolean)"><B>setWriteCursor(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
<DD>Specify the Concurrent Data Store environment cursor will be used to
update the database.
-<DT><A HREF="com/sleepycat/db/TransactionConfig.html#setWriteNoSync(boolean)"><B>setWriteNoSync(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>Configure the transaction to write but not synchronously flush the log
- it when commits.
-<DT><A HREF="com/sleepycat/db/DatabaseConfig.html#setXACreate(boolean)"><B>setXACreate(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseConfig.html#setXACreate(boolean)"><B>setXACreate(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db">DatabaseConfig</A>
<DD>Configure the database to be accessed via applications running under
an X/Open conformant Transaction Manager.
-<DT><A HREF="com/sleepycat/db/EnvironmentConfig.html#setYieldCPU(boolean)"><B>setYieldCPU(boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
+<DT><A HREF="./com/sleepycat/db/EnvironmentConfig.html#setYieldCPU(boolean)"><B>setYieldCPU(boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db">EnvironmentConfig</A>
<DD>Configure the system to yield the processor immediately after each
page or mutex acquisition.
-<DT><A HREF="com/sleepycat/bind/tuple/ShortBinding.html#shortToEntry(short, com.sleepycat.db.DatabaseEntry)"><B>shortToEntry(short, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>ShortBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Short</code> primitive
+ wrapper or a <code>short</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html#ShortBinding()"><B>ShortBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/bind/tuple/ShortBinding.html#shortToEntry(short, com.sleepycat.db.DatabaseEntry)"><B>shortToEntry(short, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple">ShortBinding</A>
<DD>Converts a simple <code>short</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/collections/StoredContainer.html#size()"><B>size()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
-<DD>Always throws UnsupportedOperationException.
-<DT><A HREF="com/sleepycat/collections/StoredValueSet.html#size()"><B>size()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/collections/StoredContainer.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections">StoredContainer</A>
+<DD>Returns the number of records in the collection or map.
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#size()"><B>size()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#skip(long)"><B>skip(long)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastInputStream.html#skip(long)"><B>skip(long)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastInputStream.html#skipFast(int)"><B>skipFast(int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util">FastInputStream</A>
+<DD>Equivalent to <code>skip()<code> but takes an int parameter instead of a
+ long, and does not check whether the count given is larger than the
+ number of remaining bytes.
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>SortedDoubleBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ wrapper or a <code>double</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html#SortedDoubleBinding()"><B>SortedDoubleBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple">SortedDoubleBinding</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)"><B>startReplication(DatabaseEntry, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>SortedFloatBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ wrapper or a <code>float</code> primitive.<DT><A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html#SortedFloatBinding()"><B>SortedFloatBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple">SortedFloatBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/Environment.html#startReplication(com.sleepycat.db.DatabaseEntry, boolean)"><B>startReplication(DatabaseEntry, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Configure the database environment as a client or master in a group
of replicated database environments.
-<DT><A HREF="com/sleepycat/util/UtfOps.html#stringToBytes(java.lang.String)"><B>stringToBytes(String)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DT><A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>StatsConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specifies the attributes of a statistics retrieval operation.<DT><A HREF="./com/sleepycat/db/StatsConfig.html#StatsConfig()"><B>StatsConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db">StatsConfig</A>
+<DD>An instance created using the default constructor is initialized
+ with the system's default settings.
+<DT><A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>StoredClassCatalog</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A <code>ClassCatalog</code> that is stored in a <code>Database</code>.<DT><A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.Database)"><B>StoredClassCatalog(Database)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial">StoredClassCatalog</A>
+<DD>Creates a catalog based on a given database.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>StoredCollection</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>A abstract base class for all stored collections.<DT><A HREF="./com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>StoredCollections</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>Static methods operating on collections and maps.<DT><A HREF="./com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>StoredContainer</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>A abstract base class for all stored collections and maps.<DT><A HREF="./com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>StoredEntrySet</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>The Set returned by Map.entrySet().<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#storedIterator()"><B>storedIterator()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD>Returns an iterator over the elements in this collection.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#storedIterator(boolean)"><B>storedIterator(boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DD>Returns a read or read-write iterator over the elements in this
+ collection.
+<DT><A HREF="./com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>StoredIterator</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>The Iterator returned by all stored collections.<DT><A HREF="./com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>StoredKeySet</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</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/collections/StoredKeySet.html#StoredKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredKeySet(Database, EntryBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections">StoredKeySet</A>
+<DD>Creates a key set view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>StoredList</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>A List view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.<DT><A HREF="./com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredList(Database, EntryBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DD>Creates a list view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredList(Database, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DD>Creates a list entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredList(Database, EntryBinding, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DD>Creates a list view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#StoredList(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredList(Database, EntityBinding, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DD>Creates a list entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>StoredMap</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>A Map view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.<DT><A HREF="./com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredMap(Database, EntryBinding, EntryBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DD>Creates a map view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredMap(Database, EntryBinding, EntryBinding, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DD>Creates a map view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredMap(Database, EntryBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DD>Creates a map entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#StoredMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredMap(Database, EntryBinding, EntityBinding, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DD>Creates a map entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>StoredSortedEntrySet</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>The SortedSet returned by Map.entrySet().<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>StoredSortedKeySet</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</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/collections/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredSortedKeySet(Database, EntryBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DD>Creates a sorted key set view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>StoredSortedMap</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>A SortedMap view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredSortedMap(Database, EntryBinding, EntryBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DD>Creates a sorted map view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntryBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredSortedMap(Database, EntryBinding, EntryBinding, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DD>Creates a sorted map view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredSortedMap(Database, EntryBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DD>Creates a sorted map entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#StoredSortedMap(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, com.sleepycat.bind.EntityBinding, com.sleepycat.collections.PrimaryKeyAssigner)"><B>StoredSortedMap(Database, EntryBinding, EntityBinding, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DD>Creates a sorted map entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A> with a <A HREF="./com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><CODE>PrimaryKeyAssigner</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>StoredSortedValueSet</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</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/collections/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredSortedValueSet(Database, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DD>Creates a sorted value set entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>StoredValueSet</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</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/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntryBinding, boolean)"><B>StoredValueSet(Database, EntryBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
+<DD>Creates a value set view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/collections/StoredValueSet.html#StoredValueSet(com.sleepycat.db.Database, com.sleepycat.bind.EntityBinding, boolean)"><B>StoredValueSet(Database, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections">StoredValueSet</A>
+<DD>Creates a value set entity view of a <A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><CODE>Database</CODE></A>.
+<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>StringBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> for a simple <code>String</code> value.<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html#StringBinding()"><B>StringBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/util/UtfOps.html#stringToBytes(java.lang.String)"><B>stringToBytes(String)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
<DD>Converts strings to byte arrays.
-<DT><A HREF="com/sleepycat/bind/tuple/StringBinding.html#stringToEntry(java.lang.String, com.sleepycat.db.DatabaseEntry)"><B>stringToEntry(String, DatabaseEntry)</B></A> -
-Static method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/StringBinding.html#stringToEntry(java.lang.String, com.sleepycat.db.DatabaseEntry)"><B>stringToEntry(String, DatabaseEntry)</B></A> -
+Static method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple">StringBinding</A>
<DD>Converts a simple <code>String</code> value into an entry buffer.
-<DT><A HREF="com/sleepycat/collections/StoredList.html#subList(int, int)"><B>subList(int, int)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">StoredList</A>
+<DT><A HREF="./com/sleepycat/collections/StoredList.html#subList(int, int)"><B>subList(int, int)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections">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/collections/StoredSortedMap.html#subMap(java.lang.Object, java.lang.Object)"><B>subMap(Object, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#subMap(java.lang.Object, java.lang.Object)"><B>subMap(Object, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">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/collections/StoredSortedMap.html#subMap(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subMap(Object, boolean, Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#subMap(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subMap(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">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/collections/StoredSortedEntrySet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedEntrySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedKeySet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedKeySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/db/Database.html#sync()"><B>sync()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/OperationStatus.html#SUCCESS"><B>SUCCESS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
+<DD>The operation was successful.
+<DT><A HREF="./com/sleepycat/db/Database.html#sync()"><B>sync()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Flush any cached information to disk.
+<DT><A HREF="./com/sleepycat/db/Environment.html#syncReplication()"><B>syncReplication()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DD>Forces synchronization to begin for this client.
</DL>
<HR>
<A NAME="_T_"><!-- --></A><H2>
<B>T</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockOperation.html#TIMEOUT"><B>TIMEOUT</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
-<DD>Cause the specified locker to timeout immediately.
-<DT><A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>Transaction</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db">Transaction</A>.<DD>The Transaction object is the handle for a transaction.<DT><A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>TransactionConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>.<DD>Specifies the attributes of a database environment transaction.<DT><A HREF="com/sleepycat/db/TransactionConfig.html#TransactionConfig()"><B>TransactionConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
-<DD>An instance created using the default constructor is initialized
- with the system's default settings.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>TransactionRunner</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>.<DD>Starts a transaction, calls <A HREF="com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A>, and handles
- transaction retry and exceptions.<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment)"><B>TransactionRunner(Environment)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
-<DD>Creates a transaction runner for a given Berkeley DB environment.
-<DT><A HREF="com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment, int, com.sleepycat.db.TransactionConfig)"><B>TransactionRunner(Environment, int, TransactionConfig)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">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/db/TransactionStats.html" title="class in com.sleepycat.db"><B>TransactionStats</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>.<DD>Transaction statistics for a database environment.<DT><A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>TransactionStats.Active</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>.<DD>The Active class represents an active transaction.<DT><A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>TransactionWorker</B></A> - interface com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections">TransactionWorker</A>.<DD>The interface implemented to perform the work within a transaction.<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>.<DD>An abstract <code>EntryBinding</code> that treats a key or data entry as a
- tuple; it includes predefined bindings for Java primitive types.<DT><A HREF="com/sleepycat/bind/tuple/TupleBinding.html#TupleBinding()"><B>TupleBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
-<DD>Creates a tuple binding.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><B>TupleInput</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>.<DD>An <code>InputStream</code> with <code>DataInput</code>-like methods for
- reading tuple fields.<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#TupleInput(byte[])"><B>TupleInput(byte[])</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
-<DD>Creates a tuple input object for reading a byte array of tuple data.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInput.html#TupleInput(byte[], int, int)"><B>TupleInput(byte[], int, int)</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bind.tuple.TupleOutput)"><B>TupleInput(TupleOutput)</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
-<DD>Creates a tuple input object from the data contained in a tuple output
- object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleInputBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>.<DD>A concrete <code>EntryBinding</code> that uses the <code>TupleInput</code>
- object as the key or data object.<DT><A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html#TupleInputBinding()"><B>TupleInputBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>
-<DD>Creates a tuple input binding.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleMarshalledBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>.<DD>A concrete <code>TupleBinding</code> that delegates to the
- <code>MarshalledTupleEntry</code> interface of the data or key object.<DT><A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html#TupleMarshalledBinding(java.lang.Class)"><B>TupleMarshalledBinding(Class)</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>
-<DD>Creates a tuple marshalled binding object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>TupleOutput</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>.<DD>An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
- writing tuple fields.<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#TupleOutput()"><B>TupleOutput()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
-<DD>Creates a tuple output object for writing a byte array of tuple data.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#TupleOutput(byte[])"><B>TupleOutput(byte[])</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialBinding</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>.<DD>An abstract <code>EntityBinding</code> that treats an entity's key entry as
- a tuple and its data entry as a serialized object.<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>TupleSerialBinding(ClassCatalog, Class)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
-<DD>Creates a tuple-serial entity binding.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.SerialBinding)"><B>TupleSerialBinding(SerialBinding)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
-<DD>Creates a tuple-serial entity binding.
-<DT><A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>TupleSerialFactory</B></A> - class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>.<DD>Creates stored collections having tuple keys and serialized entity values.<DT><A HREF="com/sleepycat/collections/TupleSerialFactory.html#TupleSerialFactory(com.sleepycat.bind.serial.ClassCatalog)"><B>TupleSerialFactory(ClassCatalog)</B></A> -
-Constructor for class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
-<DD>Creates a tuple-serial factory for given environment and class catalog.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialKeyCreator</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>.<DD>A abstract key creator that uses a tuple key and a serial data entry.<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>TupleSerialKeyCreator(ClassCatalog, Class)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
-<DD>Creates a tuple-serial key creator.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding)"><B>TupleSerialKeyCreator(SerialBinding)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
-<DD>Creates a tuple-serial key creator.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledBinding</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>.<DD>A concrete <code>TupleSerialBinding</code> that delegates to the
- <code>MarshalledTupleKeyEntity</code> interface of the entity class.<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>TupleSerialMarshalledBinding(ClassCatalog, Class)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
-<DD>Creates a tuple-serial marshalled binding object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.SerialBinding)"><B>TupleSerialMarshalledBinding(SerialBinding)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
-<DD>Creates a tuple-serial marshalled binding object.
-<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledKeyCreator</B></A> - class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>.<DD>A concrete key creator that works in conjunction with a <A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><CODE>TupleSerialMarshalledBinding</CODE></A>.<DT><A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#TupleSerialMarshalledKeyCreator(com.sleepycat.bind.serial.TupleSerialMarshalledBinding, java.lang.String)"><B>TupleSerialMarshalledKeyCreator(TupleSerialMarshalledBinding, String)</B></A> -
-Constructor for class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>
-<DD>Creates a tuple-serial marshalled key creator.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>.<DD>An abstract <code>EntityBinding</code> that treats an entity's key entry and
- data entry as tuples.<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html#TupleTupleBinding()"><B>TupleTupleBinding()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
-<DD>Creates a tuple-tuple entity binding.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleKeyCreator</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>.<DD>An abstract key creator that uses a tuple key and a tuple data entry.<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#TupleTupleKeyCreator()"><B>TupleTupleKeyCreator()</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
-<DD>Creates a tuple-tuple key creator.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledBinding</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>.<DD>A concrete <code>TupleTupleBinding</code> that delegates to the
- <code>MarshalledTupleEntry</code> and
- <code>MarshalledTupleKeyEntity</code> interfaces of the entity class.<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(java.lang.Class)"><B>TupleTupleMarshalledBinding(Class)</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
-<DD>Creates a tuple-tuple marshalled binding object.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledKeyCreator</B></A> - class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>.<DD>A concrete key creator that works in conjunction with a <A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleTupleMarshalledBinding</CODE></A>.<DT><A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#TupleTupleMarshalledKeyCreator(com.sleepycat.bind.tuple.TupleTupleMarshalledBinding, java.lang.String)"><B>TupleTupleMarshalledKeyCreator(TupleTupleMarshalledBinding, String)</B></A> -
-Constructor for class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
-<DD>Creates a tuple-tuple marshalled key creator.
-<DT><A HREF="com/sleepycat/collections/StoredSortedMap.html#tailMap(java.lang.Object)"><B>tailMap(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#tailMap(java.lang.Object)"><B>tailMap(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">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/collections/StoredSortedMap.html#tailMap(java.lang.Object, boolean)"><B>tailMap(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">StoredSortedMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedMap.html#tailMap(java.lang.Object, boolean)"><B>tailMap(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections">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/collections/StoredSortedEntrySet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedEntrySet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">StoredSortedEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedKeySet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedKeySet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">StoredSortedKeySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedKeySet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/collections/StoredSortedValueSet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">StoredSortedValueSet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredSortedValueSet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections">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/collections/StoredCollection.html#toArray()"><B>toArray()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#TIMEOUT"><B>TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>Cause the specified locker to timeout immediately.
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#toArray()"><B>toArray()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Returns an array of all the elements in this collection.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])"><B>toArray(Object[])</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#toArray(java.lang.Object[])"><B>toArray(Object[])</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">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/util/FastOutputStream.html#toByteArray()"><B>toByteArray()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#toByteArray(byte[], int)"><B>toByteArray(byte[], int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
-<DD>Copy the buffered data to the given array.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#toList()"><B>toList()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#toByteArray()"><B>toByteArray()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#toList()"><B>toList()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Returns a copy of this collection as an ArrayList.
-<DT><A HREF="com/sleepycat/collections/MapEntryParameter.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
+<DT><A HREF="./com/sleepycat/collections/MapEntryParameter.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections">MapEntryParameter</A>
<DD>Converts the entry to a string representation for debugging.
-<DT><A HREF="com/sleepycat/collections/StoredCollection.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
+<DT><A HREF="./com/sleepycat/collections/StoredCollection.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections">StoredCollection</A>
<DD>Converts the collection to a string representation for debugging.
-<DT><A HREF="com/sleepycat/collections/StoredEntrySet.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
+<DT><A HREF="./com/sleepycat/collections/StoredEntrySet.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections">StoredEntrySet</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Converts the map to a string representation for debugging.
-<DT><A HREF="com/sleepycat/db/BtreeStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
+<DT><A HREF="./com/sleepycat/db/BtreeStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db">BtreeStats</A>
<DD>For convenience, the BtreeStats class has a toString method
that lists all the data fields.
-<DT><A HREF="com/sleepycat/db/CacheFileStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheFilePriority.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/CacheFileStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db">CacheFileStats</A>
<DD>For convenience, the CacheFileStats class has a toString method
that lists all the data fields.
-<DT><A HREF="com/sleepycat/db/CacheStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
+<DT><A HREF="./com/sleepycat/db/CacheStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db">CacheStats</A>
<DD>For convenience, the CacheStats class has a toString method that
lists all the data fields.
-<DT><A HREF="com/sleepycat/db/HashStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
+<DT><A HREF="./com/sleepycat/db/CompactStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db">CompactStats</A>
+<DD>For convenience, the CompactStats class has a toString method that lists
+ all the data fields.
+<DT><A HREF="./com/sleepycat/db/DatabaseException.html#toString()"><B>toString()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/DatabaseType.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/EventType.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/EventType.html" title="class in com.sleepycat.db">EventType</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/HashStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db">HashStats</A>
<DD>For convenience, the HashStats class has a toString method
that lists all the data fields.
-<DT><A HREF="com/sleepycat/db/LockStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/LockMode.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db">LockMode</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/LockOperation.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db">LockOperation</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/LockStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db">LockStats</A>
<DD>For convenience, the LockStats class has a toString method
that lists all the data fields.
-<DT><A HREF="com/sleepycat/db/LogStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
+<DT><A HREF="./com/sleepycat/db/LogStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db">LogStats</A>
<DD>For convenience, the LogStats class has a toString method that lists
all the data fields.
-<DT><A HREF="com/sleepycat/db/QueueStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
+<DT><A HREF="./com/sleepycat/db/MemoryException.html#toString()"><B>toString()</B></A> -
+Method in exception com.sleepycat.db.<A HREF="./com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">MemoryException</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/MutexStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db">MutexStats</A>
+<DD>For convenience, the MutexStats class has a toString method that lists
+ all the data fields.
+<DT><A HREF="./com/sleepycat/db/OperationStatus.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db">OperationStatus</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/QueueStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db">QueueStats</A>
<DD>For convenience, the QueueStats class has a toString method
that lists all the data fields.
-<DT><A HREF="com/sleepycat/db/ReplicationStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
+<DT><A HREF="./com/sleepycat/db/RecoveryOperation.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db">RecoveryOperation</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/ReplicationConfig.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db">ReplicationConfig</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db">ReplicationManagerAckPolicy</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db">ReplicationManagerStartPolicy</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/ReplicationStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db">ReplicationStats</A>
<DD>For convenience, the ReplicationStats class has a toString method
that lists all the data fields.
-<DT><A HREF="com/sleepycat/db/TransactionStats.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
-<DD>For convenience, the TransactionStats class has a toString method
- that lists all the data fields.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#toString()"><B>toString()</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/db/ReplicationStatus.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db">ReplicationStatus</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/ReplicationTimeoutType.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db">ReplicationTimeoutType</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/SequenceStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db">SequenceStats</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db">TransactionStats.Active</A>
+<DD>
+<DT><A HREF="./com/sleepycat/db/TransactionStats.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db">TransactionStats</A>
+<DD>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#toString(java.lang.String)"><B>toString(String)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#toString(java.lang.String)"><B>toString(String)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/db/Environment.html#trickleCacheWrite(int)"><B>trickleCacheWrite(int)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
+<DT><A HREF="./com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>Transaction</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The Transaction object is the handle for a transaction.<DT><A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>TransactionConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specifies the attributes of a database environment transaction.<DT><A HREF="./com/sleepycat/db/TransactionConfig.html#TransactionConfig()"><B>TransactionConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db">TransactionConfig</A>
+<DD>An instance created using the default constructor is initialized
+ with the system's default settings.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>TransactionRunner</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>Starts a transaction, calls <A HREF="./com/sleepycat/collections/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A>, and handles
+ transaction retry and exceptions.<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment)"><B>TransactionRunner(Environment)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">TransactionRunner</A>
+<DD>Creates a transaction runner for a given Berkeley DB environment.
+<DT><A HREF="./com/sleepycat/collections/TransactionRunner.html#TransactionRunner(com.sleepycat.db.Environment, int, com.sleepycat.db.TransactionConfig)"><B>TransactionRunner(Environment, int, TransactionConfig)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections">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/db/TransactionStats.html" title="class in com.sleepycat.db"><B>TransactionStats</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Transaction statistics for a database environment.<DT><A HREF="./com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>TransactionStats.Active</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>The Active class represents an active transaction.<DT><A HREF="./com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>TransactionWorker</B></A> - Interface in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>The interface implemented to perform the work within a transaction.<DT><A HREF="./com/sleepycat/db/Environment.html#trickleCacheWrite(int)"><B>trickleCacheWrite(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Environment.html" title="class in com.sleepycat.db">Environment</A>
<DD>Ensure 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/Database.html#truncate(com.sleepycat.db.Transaction, boolean)"><B>truncate(Transaction, boolean)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#truncate(com.sleepycat.db.Transaction, boolean)"><B>truncate(Transaction, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Empty the database, discarding all records it contains.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><B>TupleBase</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A base class for tuple bindings and tuple key creators that provides control
+ over the allocation of the output buffer.<DT><A HREF="./com/sleepycat/bind/tuple/TupleBase.html#TupleBase()"><B>TupleBase()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple">TupleBase</A>
+<DD>Initializes the initial output buffer size to zero.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>An abstract <code>EntryBinding</code> that treats a key or data entry as a
+ tuple; it includes predefined bindings for Java primitive types.<DT><A HREF="./com/sleepycat/bind/tuple/TupleBinding.html#TupleBinding()"><B>TupleBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleBinding</A>
+<DD>Creates a tuple binding.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><B>TupleInput</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>An <code>InputStream</code> with <code>DataInput</code>-like methods for
+ reading tuple fields.<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#TupleInput(byte[])"><B>TupleInput(byte[])</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Creates a tuple input object for reading a byte array of tuple data.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInput.html#TupleInput(byte[], int, int)"><B>TupleInput(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bind.tuple.TupleOutput)"><B>TupleInput(TupleOutput)</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple">TupleInput</A>
+<DD>Creates a tuple input object from the data contained in a tuple output
+ object.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleInputBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>EntryBinding</code> that uses the <code>TupleInput</code>
+ object as the key or data object.<DT><A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html#TupleInputBinding()"><B>TupleInputBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple">TupleInputBinding</A>
+<DD>Creates a tuple input binding.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleMarshalledBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleBinding</code> that delegates to the
+ <code>MarshalledTupleEntry</code> interface of the data or key object.<DT><A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html#TupleMarshalledBinding(java.lang.Class)"><B>TupleMarshalledBinding(Class)</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleMarshalledBinding</A>
+<DD>Creates a tuple marshalled binding object.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>TupleOutput</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>An <code>OutputStream</code> with <code>DataOutput</code>-like methods for
+ writing tuple fields.<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#TupleOutput()"><B>TupleOutput()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DD>Creates a tuple output object for writing a byte array of tuple data.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#TupleOutput(byte[])"><B>TupleOutput(byte[])</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>An abstract <code>EntityBinding</code> that treats an entity's key entry as
+ a tuple and its data entry as a serialized object.<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>TupleSerialBinding(ClassCatalog, Class)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DD>Creates a tuple-serial entity binding.
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bind.serial.SerialBinding)"><B>TupleSerialBinding(SerialBinding)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialBinding</A>
+<DD>Creates a tuple-serial entity binding.
+<DT><A HREF="./com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>TupleSerialFactory</B></A> - Class in <A HREF="./com/sleepycat/collections/package-summary.html">com.sleepycat.collections</A><DD>Creates stored collections having tuple keys and serialized entity values.<DT><A HREF="./com/sleepycat/collections/TupleSerialFactory.html#TupleSerialFactory(com.sleepycat.bind.serial.ClassCatalog)"><B>TupleSerialFactory(ClassCatalog)</B></A> -
+Constructor for class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections">TupleSerialFactory</A>
+<DD>Creates a tuple-serial factory for given environment and class catalog.
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialKeyCreator</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A abstract key creator that uses a tuple key and a serial data entry.<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>TupleSerialKeyCreator(ClassCatalog, Class)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DD>Creates a tuple-serial key creator.
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html#TupleSerialKeyCreator(com.sleepycat.bind.serial.SerialBinding)"><B>TupleSerialKeyCreator(SerialBinding)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</A>
+<DD>Creates a tuple-serial key creator.
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A concrete <code>TupleSerialBinding</code> that delegates to the
+ <code>MarshalledTupleKeyEntity</code> interface of the entity class.<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.ClassCatalog, java.lang.Class)"><B>TupleSerialMarshalledBinding(ClassCatalog, Class)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
+<DD>Creates a tuple-serial marshalled binding object.
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bind.serial.SerialBinding)"><B>TupleSerialMarshalledBinding(SerialBinding)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledBinding</A>
+<DD>Creates a tuple-serial marshalled binding object.
+<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledKeyCreator</B></A> - Class in <A HREF="./com/sleepycat/bind/serial/package-summary.html">com.sleepycat.bind.serial</A><DD>A concrete key creator that works in conjunction with a <A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><CODE>TupleSerialMarshalledBinding</CODE></A>.<DT><A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html#TupleSerialMarshalledKeyCreator(com.sleepycat.bind.serial.TupleSerialMarshalledBinding, java.lang.String)"><B>TupleSerialMarshalledKeyCreator(TupleSerialMarshalledBinding, String)</B></A> -
+Constructor for class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</A>
+<DD>Creates a tuple-serial marshalled key creator.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>An abstract <code>EntityBinding</code> that treats an entity's key entry and
+ data entry as tuples.<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html#TupleTupleBinding()"><B>TupleTupleBinding()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleBinding</A>
+<DD>Creates a tuple-tuple entity binding.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleKeyCreator</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>An abstract key creator that uses a tuple key and a tuple data entry.<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html#TupleTupleKeyCreator()"><B>TupleTupleKeyCreator()</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</A>
+<DD>Creates a tuple-tuple key creator.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledBinding</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete <code>TupleTupleBinding</code> that delegates to the
+ <code>MarshalledTupleEntry</code> and
+ <code>MarshalledTupleKeyEntity</code> interfaces of the entity class.<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(java.lang.Class)"><B>TupleTupleMarshalledBinding(Class)</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledBinding</A>
+<DD>Creates a tuple-tuple marshalled binding object.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledKeyCreator</B></A> - Class in <A HREF="./com/sleepycat/bind/tuple/package-summary.html">com.sleepycat.bind.tuple</A><DD>A concrete key creator that works in conjunction with a <A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><CODE>TupleTupleMarshalledBinding</CODE></A>.<DT><A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html#TupleTupleMarshalledKeyCreator(com.sleepycat.bind.tuple.TupleTupleMarshalledBinding, java.lang.String)"><B>TupleTupleMarshalledKeyCreator(TupleTupleMarshalledBinding, String)</B></A> -
+Constructor for class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</A>
+<DD>Creates a tuple-tuple marshalled key creator.
</DL>
<HR>
<A NAME="_U_"><!-- --></A><H2>
<B>U</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/DatabaseType.html#UNKNOWN"><B>UNKNOWN</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
+<DT><A HREF="./com/sleepycat/db/DatabaseType.html#UNKNOWN"><B>UNKNOWN</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db">DatabaseType</A>
<DD>The database type is unknown.
-<DT><A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>UtfOps</B></A> - class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>.<DD>UTF operations with more flexibility than is provided by DataInput and
- DataOutput.<DT><A HREF="com/sleepycat/util/UtfOps.html#UtfOps()"><B>UtfOps()</B></A> -
-Constructor for class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
-<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html#unmarshalEntry(com.sleepycat.bind.tuple.TupleInput)"><B>unmarshalEntry(TupleInput)</B></A> -
-Method in interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleEntry</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleEntry.html#unmarshalEntry(com.sleepycat.bind.tuple.TupleInput)"><B>unmarshalEntry(TupleInput)</B></A> -
+Method in interface com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleEntry</A>
<DD>Construct the key or data object from the key or data tuple entry.
-<DT><A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bind.tuple.TupleInput)"><B>unmarshalPrimaryKey(TupleInput)</B></A> -
-Method in interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bind.tuple.TupleInput)"><B>unmarshalPrimaryKey(TupleInput)</B></A> -
+Method in interface com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple">MarshalledTupleKeyEntity</A>
<DD>Completes construction of the entity by setting its primary key from the
stored primary key.
-<DT><A HREF="com/sleepycat/util/ExceptionUnwrapper.html#unwrap(java.lang.Exception)"><B>unwrap(Exception)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>
+<DT><A HREF="./com/sleepycat/util/ExceptionUnwrapper.html#unwrap(java.lang.Exception)"><B>unwrap(Exception)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">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/util/ExceptionUnwrapper.html#unwrapAny(java.lang.Throwable)"><B>unwrapAny(Throwable)</B></A> -
-Static method in class com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>
+<DT><A HREF="./com/sleepycat/util/ExceptionUnwrapper.html#unwrapAny(java.lang.Throwable)"><B>unwrapAny(Throwable)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util">ExceptionUnwrapper</A>
<DD>Unwraps an Exception and returns the underlying Throwable.
-<DT><A HREF="com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>upgrade(String, DatabaseConfig)</B></A> -
-Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><B>UpdateConflictException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown when a snapshot transaction attempts to update data
+which was modified after the snapshot transaction read it.<DT><A HREF="./com/sleepycat/db/Database.html#upgrade(java.lang.String, com.sleepycat.db.DatabaseConfig)"><B>upgrade(String, DatabaseConfig)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Upgrade all of the databases included in the specified file.
-<DT><A HREF="com/sleepycat/db/FeedbackHandler.html#upgradeFeedback(com.sleepycat.db.Database, int)"><B>upgradeFeedback(Database, int)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>
+<DT><A HREF="./com/sleepycat/db/FeedbackHandler.html#upgradeFeedback(com.sleepycat.db.Database, int)"><B>upgradeFeedback(Database, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>
<DD>A function called with progress information when the database is being upgraded.
+<DT><A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>UtfOps</B></A> - Class in <A HREF="./com/sleepycat/util/package-summary.html">com.sleepycat.util</A><DD>UTF operations with more flexibility than is provided by DataInput and
+ DataOutput.<DT><A HREF="./com/sleepycat/util/UtfOps.html#UtfOps()"><B>UtfOps()</B></A> -
+Constructor for class com.sleepycat.util.<A HREF="./com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util">UtfOps</A>
+<DD>&nbsp;
</DL>
<HR>
<A NAME="_V_"><!-- --></A><H2>
<B>V</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/CacheFilePriority.html#VERY_HIGH"><B>VERY_HIGH</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
-<DD>The highest priority: pages are the least likely to be discarded.
-<DT><A HREF="com/sleepycat/db/CacheFilePriority.html#VERY_LOW"><B>VERY_LOW</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
-<DD>The lowest priority: pages are the most likely to be discarded.
-<DT><A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>VerifyConfig</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>.<DD>Specifies the attributes of a verification operation.<DT><A HREF="com/sleepycat/db/VerifyConfig.html#VerifyConfig()"><B>VerifyConfig()</B></A> -
-Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
-<DD>An instance created using the default constructor is initialized
- with the system's default settings.
-<DT><A HREF="com/sleepycat/collections/StoredMap.html#values()"><B>values()</B></A> -
-Method in class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
+<DT><A HREF="./com/sleepycat/collections/StoredMap.html#values()"><B>values()</B></A> -
+Method in class com.sleepycat.collections.<A HREF="./com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections">StoredMap</A>
<DD>Returns a collection view of the values contained in this map.
-<DT><A HREF="com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig)"><B>verify(String, String, PrintStream, VerifyConfig)</B></A> -
-Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
+<DT><A HREF="./com/sleepycat/db/Database.html#verify(java.lang.String, java.lang.String, java.io.PrintStream, com.sleepycat.db.VerifyConfig, com.sleepycat.db.DatabaseConfig)"><B>verify(String, String, PrintStream, VerifyConfig, DatabaseConfig)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="./com/sleepycat/db/Database.html" title="class in com.sleepycat.db">Database</A>
<DD>Return if all of the databases in a file are uncorrupted.
-<DT><A HREF="com/sleepycat/db/FeedbackHandler.html#verifyFeedback(com.sleepycat.db.Database, int)"><B>verifyFeedback(Database, int)</B></A> -
-Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>
+<DT><A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>VerifyConfig</B></A> - Class in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Specifies the attributes of a verification operation.<DT><A HREF="./com/sleepycat/db/VerifyConfig.html#VerifyConfig()"><B>VerifyConfig()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="./com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db">VerifyConfig</A>
+<DD>An instance created using the default constructor is initialized
+ with the system's default settings.
+<DT><A HREF="./com/sleepycat/db/FeedbackHandler.html#verifyFeedback(com.sleepycat.db.Database, int)"><B>verifyFeedback(Database, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="./com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db">FeedbackHandler</A>
<DD>A function called with progress information when the database is being verified.
+<DT><A HREF="./com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db"><B>VersionMismatchException</B></A> - Exception in <A HREF="./com/sleepycat/db/package-summary.html">com.sleepycat.db</A><DD>Thrown if the version of the Berkeley DB library doesn't match the version that created
+the database environment.<DT><A HREF="./com/sleepycat/db/CacheFilePriority.html#VERY_HIGH"><B>VERY_HIGH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
+<DD>The highest priority: pages are the least likely to be discarded.
+<DT><A HREF="./com/sleepycat/db/CacheFilePriority.html#VERY_LOW"><B>VERY_LOW</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db">CacheFilePriority</A>
+<DD>The lowest priority: pages are the most likely to be discarded.
</DL>
<HR>
<A NAME="_W_"><!-- --></A><H2>
<B>W</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockRequestMode.html#WRITE"><B>WRITE</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
+<DT><A HREF="./com/sleepycat/db/LockRequestMode.html#WRITE"><B>WRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db">LockRequestMode</A>
<DD>Write (exclusive).
-<DT><A HREF="com/sleepycat/db/CursorConfig.html#WRITECURSOR"><B>WRITECURSOR</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
-<DD>A convenience instance to specify the Concurrent Data Store environment
- cursor will be used to update the database.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#write(int)"><B>write(int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#write(int)"><B>write(int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#write(byte[])"><B>write(byte[])</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#write(byte[])"><B>write(byte[])</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeBoolean(boolean)"><B>writeBoolean(boolean)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeBoolean(boolean)"><B>writeBoolean(boolean)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleOutput.html#writeByte(int)"><B>writeByte(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeByte(int)"><B>writeByte(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an signed byte (one byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeBytes(java.lang.String)"><B>writeBytes(String)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeBytes(java.lang.String)"><B>writeBytes(String)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes the specified bytes to the buffer, converting each character to
an unsigned byte value.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeBytes(char[])"><B>writeBytes(char[])</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeBytes(char[])"><B>writeBytes(char[])</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes the specified bytes to the buffer, converting each character to
an unsigned byte value.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeChar(int)"><B>writeChar(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeChar(int)"><B>writeChar(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes a char (two byte) unsigned value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeChars(java.lang.String)"><B>writeChars(String)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeChars(java.lang.String)"><B>writeChars(String)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes the specified characters to the buffer, converting each character
to a two byte unsigned value.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeChars(char[])"><B>writeChars(char[])</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeChars(char[])"><B>writeChars(char[])</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes the specified characters to the buffer, converting each character
to a two byte unsigned value.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeDouble(double)"><B>writeDouble(double)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/serial/SerialOutput.html#writeClassDescriptor(java.io.ObjectStreamClass)"><B>writeClassDescriptor(ObjectStreamClass)</B></A> -
+Method in class com.sleepycat.bind.serial.<A HREF="./com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial">SerialOutput</A>
+<DD>&nbsp;
+<DT><A HREF="./com/sleepycat/db/CursorConfig.html#WRITECURSOR"><B>WRITECURSOR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db">CursorConfig</A>
+<DD>A convenience instance to specify the Concurrent Data Store environment
+ cursor will be used to update the database.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeDouble(double)"><B>writeDouble(double)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an signed double (eight byte) value to the buffer.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#writeFast(int)"><B>writeFast(int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#writeFast(int)"><B>writeFast(int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Equivalent to <code>write(int)<code> but does not throw
<code>IOException</code>.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#writeFast(byte[])"><B>writeFast(byte[])</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#writeFast(byte[])"><B>writeFast(byte[])</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Equivalent to <code>write(byte[])<code> but does not throw
<code>IOException</code>.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#writeFast(byte[], int, int)"><B>writeFast(byte[], int, int)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#writeFast(byte[], int, int)"><B>writeFast(byte[], int, int)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>Equivalent to <code>write(byte[],int,int)<code> but does not throw
<code>IOException</code>.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeFloat(float)"><B>writeFloat(float)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeFloat(float)"><B>writeFloat(float)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an signed float (four byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeInt(int)"><B>writeInt(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeInt(int)"><B>writeInt(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an signed int (four byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeLong(long)"><B>writeLong(long)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/util/PackedInteger.html#writeInt(byte[], int, int)"><B>writeInt(byte[], int, int)</B></A> -
+Static method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util">PackedInteger</A>
+<DD>Writes a packed integer starting at the given buffer offset and returns
+ the next offset to be written.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeLong(long)"><B>writeLong(long)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an signed long (eight byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeShort(int)"><B>writeShort(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writePackedInt(int)"><B>writePackedInt(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DD>Writes a packed integer.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeShort(int)"><B>writeShort(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an signed short (two byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeString(java.lang.String)"><B>writeString(String)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeSortedDouble(double)"><B>writeSortedDouble(double)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DD>Writes a signed double (eight byte) value to the buffer, with support
+ for correct default sorting of all values.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeSortedFloat(float)"><B>writeSortedFloat(float)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DD>Writes a signed float (four byte) value to the buffer, with support for
+ correct default sorting of all values.
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeString(java.lang.String)"><B>writeString(String)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">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/bind/tuple/TupleOutput.html#writeString(char[])"><B>writeString(char[])</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeString(char[])"><B>writeString(char[])</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes the specified characters to the buffer, converting each character
to UTF format.
-<DT><A HREF="com/sleepycat/util/FastOutputStream.html#writeTo(java.io.OutputStream)"><B>writeTo(OutputStream)</B></A> -
-Method in class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
+<DT><A HREF="./com/sleepycat/util/FastOutputStream.html#writeTo(java.io.OutputStream)"><B>writeTo(OutputStream)</B></A> -
+Method in class com.sleepycat.util.<A HREF="./com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util">FastOutputStream</A>
<DD>&nbsp;
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedByte(int)"><B>writeUnsignedByte(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedByte(int)"><B>writeUnsignedByte(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an unsigned byte (one byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedInt(long)"><B>writeUnsignedInt(long)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedInt(long)"><B>writeUnsignedInt(long)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an unsigned int (four byte) value to the buffer.
-<DT><A HREF="com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedShort(int)"><B>writeUnsignedShort(int)</B></A> -
-Method in class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
+<DT><A HREF="./com/sleepycat/bind/tuple/TupleOutput.html#writeUnsignedShort(int)"><B>writeUnsignedShort(int)</B></A> -
+Method in class com.sleepycat.bind.tuple.<A HREF="./com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple">TupleOutput</A>
<DD>Writes an unsigned short (two byte) value to the buffer.
</DL>
<HR>
<A NAME="_Y_"><!-- --></A><H2>
<B>Y</B></H2>
<DL>
-<DT><A HREF="com/sleepycat/db/LockDetectMode.html#YOUNGEST"><B>YOUNGEST</B></A> -
-Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
+<DT><A HREF="./com/sleepycat/db/LockDetectMode.html#YOUNGEST"><B>YOUNGEST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="./com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db">LockDetectMode</A>
<DD>Reject the lock request for the locker ID with the youngest lock.
</DL>
<HR>
@@ -4511,23 +5431,23 @@ Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMo
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD 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="./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>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -4536,19 +5456,20 @@ Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMo
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+ document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+ <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -4556,6 +5477,6 @@ Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMo
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="/../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/index.html b/db/docs/java/index.html
index 7a2bbd41b..3447479ac 100644
--- a/db/docs/java/index.html
+++ b/db/docs/java/index.html
@@ -2,17 +2,28 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc on Mon Nov 08 21:00:47 EST 2004-->
+<!-- Generated by javadoc on Wed Sep 20 16:19:50 EDT 2006-->
<TITLE>
-Sleepycat Software, Inc. - Berkeley DB Java API
+Oracle Corporation - Berkeley DB Java API
</TITLE>
+<SCRIPT type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
-<FRAMESET cols="20%,80%">
-<FRAMESET rows="30%,70%">
+<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
+<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
</FRAMESET>
-<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions">
+<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
<NOFRAMES>
<H2>
Frame Alert</H2>
diff --git a/db/docs/java/overview-frame.html b/db/docs/java/overview-frame.html
index fa8a6306b..b6acbbfa5 100644
--- a/db/docs/java/overview-frame.html
+++ b/db/docs/java/overview-frame.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Overview (Sleepycat Software, Inc. - Berkeley DB Java API)
+Overview (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="Overview">
@@ -18,8 +18,8 @@ Overview (Sleepycat Software, Inc. - Berkeley DB Java API)
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
-<B><b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></B></FONT></TD>
+<TH ALIGN="left" NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
+<B><b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></B></FONT></TH>
</TR>
</TABLE>
diff --git a/db/docs/java/overview-summary.html b/db/docs/java/overview-summary.html
index 780ae33a5..422fba442 100644
--- a/db/docs/java/overview-summary.html
+++ b/db/docs/java/overview-summary.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:47 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:50 EDT 2006 -->
<TITLE>
-Overview (Sleepycat Software, Inc. - Berkeley DB Java API)
+Overview (Oracle Corporation - Berkeley DB Java API)
</TITLE>
<META NAME="keywords" CONTENT="Overview">
@@ -14,9 +14,11 @@ Overview (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Overview (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Overview (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -28,7 +30,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -44,7 +46,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -53,7 +55,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -66,6 +68,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -76,13 +79,13 @@ function windowTitle()
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>BerkeleyDB Core Package</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Berkeley DB Core Package</B></FONT></TH>
</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>Berkeley DB Java API<br>
-<a href="./%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="./%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.</TD>
+<a href="./../ref/toc.html" target="_top">[reference guide]</a> <a href="./../ref/java/program.html" target="_top">[Java programming notes]</a>.</TD>
</TR>
</TABLE>
@@ -90,8 +93,8 @@ function windowTitle()
&nbsp;
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>BerkeleyDB Collections Packages</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Berkeley DB Bind and Collections Packages</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="com/sleepycat/bind/package-summary.html">com.sleepycat.bind</A></B></TD>
@@ -124,7 +127,7 @@ function windowTitle()
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -140,7 +143,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -149,7 +152,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -162,6 +165,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -169,6 +173,6 @@ function windowTitle()
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="./../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/overview-tree.html b/db/docs/java/overview-tree.html
index 27862478c..07d7f120e 100644
--- a/db/docs/java/overview-tree.html
+++ b/db/docs/java/overview-tree.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:46 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:49 EDT 2006 -->
<TITLE>
-Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+Class Hierarchy (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Class Hierarchy (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -83,108 +86,117 @@ Hierarchy For All Packages</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" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.bind.<A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>ByteArrayBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>CacheFile</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>CacheFilePriority</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>CacheFileStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>CacheStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>CheckpointConfig</B></A><LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>CurrentTransaction</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>Cursor</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>SecondaryCursor</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>CursorConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>Database</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>SecondaryDatabase</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>DatabaseConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html" title="class or interface in java.lang"><B>Object</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.<A HREF="com/sleepycat/bind/ByteArrayBinding.html" title="class in com.sleepycat.bind"><B>ByteArrayBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFile.html" title="class in com.sleepycat.db"><B>CacheFile</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFilePriority.html" title="class in com.sleepycat.db"><B>CacheFilePriority</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CacheFileStats.html" title="class in com.sleepycat.db"><B>CacheFileStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CacheStats.html" title="class in com.sleepycat.db"><B>CacheStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CheckpointConfig.html" title="class in com.sleepycat.db"><B>CheckpointConfig</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CompactConfig.html" title="class in com.sleepycat.db"><B>CompactConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CompactStats.html" title="class in com.sleepycat.db"><B>CompactStats</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/CurrentTransaction.html" title="class in com.sleepycat.collections"><B>CurrentTransaction</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Cursor.html" title="class in com.sleepycat.db"><B>Cursor</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryCursor.html" title="class in com.sleepycat.db"><B>SecondaryCursor</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/CursorConfig.html" title="class in com.sleepycat.db"><B>CursorConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Database.html" title="class in com.sleepycat.db"><B>Database</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryDatabase.html" title="class in com.sleepycat.db"><B>SecondaryDatabase</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseConfig.html" title="class in com.sleepycat.db"><B>DatabaseConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>SecondaryConfig</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>DatabaseEntry</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>MultipleEntry</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>MultipleDataEntry</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyDataEntry</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoDataEntry</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryConfig.html" title="class in com.sleepycat.db"><B>SecondaryConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>DatabaseStats</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>BtreeStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>HashStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>QueueStats</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>DatabaseType</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>Environment</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>EnvironmentConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><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" title="class or interface in java.io"><B>InputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><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" title="class or interface in java.io"><B>ObjectInputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseEntry.html" title="class in com.sleepycat.db"><B>DatabaseEntry</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleEntry.html" title="class in com.sleepycat.db"><B>MultipleEntry</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleDataEntry.html" title="class in com.sleepycat.db"><B>MultipleDataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyDataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyDataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleKeyNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleKeyNIODataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleNIODataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoDataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoDataEntry</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MultipleRecnoNIODataEntry.html" title="class in com.sleepycat.db"><B>MultipleRecnoNIODataEntry</B></A></UL>
+</UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseStats.html" title="class in com.sleepycat.db"><B>DatabaseStats</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/BtreeStats.html" title="class in com.sleepycat.db"><B>BtreeStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/HashStats.html" title="class in com.sleepycat.db"><B>HashStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/QueueStats.html" title="class in com.sleepycat.db"><B>QueueStats</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseType.html" title="class in com.sleepycat.db"><B>DatabaseType</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Environment.html" title="class in com.sleepycat.db"><B>Environment</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/EnvironmentConfig.html" title="class in com.sleepycat.db"><B>EnvironmentConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/EventType.html" title="class in com.sleepycat.db"><B>EventType</B></A><LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionUnwrapper.html" title="class in com.sleepycat.util"><B>ExceptionUnwrapper</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html" title="class or interface in java.io"><B>InputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>)
+<UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/FastInputStream.html" title="class in com.sleepycat.util"><B>FastInputStream</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInput.html" title="class in com.sleepycat.bind.tuple"><B>TupleInput</B></A></UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io"><B>ObjectInputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html" title="class or interface in java.io">ObjectInput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>SerialInput</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialInput.html" title="class in com.sleepycat.bind.serial"><B>SerialInput</B></A></UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>JoinConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>JoinCursor</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>KeyRange</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>Lock</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>LockDetectMode</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>LockMode</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>LockOperation</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>LockRequest</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>LockRequestMode</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>LockStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>LogCursor</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>LogSequenceNumber</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>LogStats</B></A><LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>MapEntryParameter</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>OperationStatus</B></A><LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io"><B>OutputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><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" title="class or interface in java.io"><B>ObjectOutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html" title="class or interface in java.io">ObjectOutput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/JoinConfig.html" title="class in com.sleepycat.db"><B>JoinConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/JoinCursor.html" title="class in com.sleepycat.db"><B>JoinCursor</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/KeyRange.html" title="class in com.sleepycat.db"><B>KeyRange</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Lock.html" title="class in com.sleepycat.db"><B>Lock</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockDetectMode.html" title="class in com.sleepycat.db"><B>LockDetectMode</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockMode.html" title="class in com.sleepycat.db"><B>LockMode</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockOperation.html" title="class in com.sleepycat.db"><B>LockOperation</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequest.html" title="class in com.sleepycat.db"><B>LockRequest</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockRequestMode.html" title="class in com.sleepycat.db"><B>LockRequestMode</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockStats.html" title="class in com.sleepycat.db"><B>LockStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LogCursor.html" title="class in com.sleepycat.db"><B>LogCursor</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LogSequenceNumber.html" title="class in com.sleepycat.db"><B>LogSequenceNumber</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LogStats.html" title="class in com.sleepycat.db"><B>LogStats</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/MapEntryParameter.html" title="class in com.sleepycat.collections"><B>MapEntryParameter</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html" title="class or interface in java.util">Map.Entry</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MutexStats.html" title="class in com.sleepycat.db"><B>MutexStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/OperationStatus.html" title="class in com.sleepycat.db"><B>OperationStatus</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html" title="class or interface in java.io"><B>OutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Closeable.html" title="class or interface in java.io">Closeable</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Flushable.html" title="class or interface in java.io">Flushable</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>SerialOutput</B></A></UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/FastOutputStream.html" title="class in com.sleepycat.util"><B>FastOutputStream</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleOutput.html" title="class in com.sleepycat.bind.tuple"><B>TupleOutput</B></A></UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io"><B>ObjectOutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html" title="class or interface in java.io">ObjectOutput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html" title="class or interface in java.io">ObjectStreamConstants</A>)
+<UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialOutput.html" title="class in com.sleepycat.bind.serial"><B>SerialOutput</B></A></UL>
+</UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/PackedInteger.html" title="class in com.sleepycat.util"><B>PackedInteger</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PreparedTransaction</B></A><LI TYPE="circle">com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>RecordNumberBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>RecoveryOperation</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationConfig.html" title="class in com.sleepycat.db"><B>ReplicationConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationHostAddress.html" title="class in com.sleepycat.db"><B>ReplicationHostAddress</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationManagerAckPolicy.html" title="class in com.sleepycat.db"><B>ReplicationManagerAckPolicy</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationManagerStartPolicy.html" title="class in com.sleepycat.db"><B>ReplicationManagerStartPolicy</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>ReplicationStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>ReplicationStatus</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTimeoutType.html" title="class in com.sleepycat.db"><B>ReplicationTimeoutType</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>Sequence</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>SequenceConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>SequenceStats</B></A><LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBase.html" title="class in com.sleepycat.bind.serial"><B>SerialBase</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/PreparedTransaction.html" title="class in com.sleepycat.db"><B>PreparedTransaction</B></A><LI TYPE="circle">class com.sleepycat.bind.<A HREF="com/sleepycat/bind/RecordNumberBinding.html" title="class in com.sleepycat.bind"><B>RecordNumberBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/RecoveryOperation.html" title="class in com.sleepycat.db"><B>RecoveryOperation</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStats.html" title="class in com.sleepycat.db"><B>ReplicationStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationStatus.html" title="class in com.sleepycat.db"><B>ReplicationStatus</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Sequence.html" title="class in com.sleepycat.db"><B>Sequence</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceConfig.html" title="class in com.sleepycat.db"><B>SequenceConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/SequenceStats.html" title="class in com.sleepycat.db"><B>SequenceStats</B></A><LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>StatsConfig</B></A><LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>StoredClassCatalog</B></A> (implements com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>)
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>StoredCollections</B></A><LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>StoredContainer</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>SerialSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/StatsConfig.html" title="class in com.sleepycat.db"><B>StatsConfig</B></A><LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/StoredClassCatalog.html" title="class in com.sleepycat.bind.serial"><B>StoredClassCatalog</B></A> (implements com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial">ClassCatalog</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollections.html" title="class in com.sleepycat.collections"><B>StoredCollections</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredContainer.html" title="class in com.sleepycat.collections"><B>StoredContainer</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>StoredCollection</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredCollection.html" title="class in com.sleepycat.collections"><B>StoredCollection</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>StoredEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredEntrySet.html" title="class in com.sleepycat.collections"><B>StoredEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>StoredSortedEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedEntrySet.html" title="class in com.sleepycat.collections"><B>StoredSortedEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>StoredKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredKeySet.html" title="class in com.sleepycat.collections"><B>StoredKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>StoredSortedKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedKeySet.html" title="class in com.sleepycat.collections"><B>StoredSortedKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>StoredList</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>)
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>StoredValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredList.html" title="class in com.sleepycat.collections"><B>StoredList</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html" title="class or interface in java.util">List</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredValueSet.html" title="class in com.sleepycat.collections"><B>StoredValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html" title="class or interface in java.util">Set</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>StoredSortedValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedValueSet.html" title="class in com.sleepycat.collections"><B>StoredSortedValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html" title="class or interface in java.util">SortedSet</A>)
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>StoredMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredMap.html" title="class in com.sleepycat.collections"><B>StoredMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>StoredSortedMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredSortedMap.html" title="class in com.sleepycat.collections"><B>StoredSortedMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html" title="class or interface in java.util">SortedMap</A>)
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>StoredIterator</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>, java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html" title="class or interface in java.util">ListIterator</A>)
-<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/StoredIterator.html" title="class in com.sleepycat.collections"><B>StoredIterator</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>)
<UL>
-<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang"><B>Exception</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>DatabaseException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>DeadlockException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>LockNotGrantedException</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>MemoryException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>ReplicationHandleDeadException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>RunRecoveryException</B></A></UL>
-<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io"><B>IOException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>IOExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang"><B>Exception</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db"><B>DatabaseException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db"><B>DeadlockException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db"><B>LockNotGrantedException</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db"><B>MemoryException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db"><B>ReplicationDuplicateMasterException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db"><B>ReplicationHandleDeadException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db"><B>ReplicationHoldElectionException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db"><B>ReplicationJoinFailureException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db"><B>ReplicationLockoutException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db"><B>ReplicationSiteUnavailableException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db"><B>RunRecoveryException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db"><B>UpdateConflictException</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db"><B>VersionMismatchException</B></A></UL>
+<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io"><B>IOException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util"><B>IOExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
</UL>
-<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>RuntimeExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
+<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util"><B>RuntimeExceptionWrapper</B></A> (implements com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util">ExceptionWrapper</A>)
</UL>
</UL>
</UL>
-<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>Transaction</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>TransactionConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>TransactionRunner</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><B>TransactionStats</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>TransactionStats.Active</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Transaction.html" title="class in com.sleepycat.db"><B>Transaction</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionConfig.html" title="class in com.sleepycat.db"><B>TransactionConfig</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionRunner.html" title="class in com.sleepycat.collections"><B>TransactionRunner</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.html" title="class in com.sleepycat.db"><B>TransactionStats</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/TransactionStats.Active.html" title="class in com.sleepycat.db"><B>TransactionStats.Active</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBase.html" title="class in com.sleepycat.bind.tuple"><B>TupleBase</B></A><UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>BooleanBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>ByteBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>CharacterBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>DoubleBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>FloatBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>IntegerBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>LongBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>ShortBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>StringBinding</B></A><LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleMarshalledBinding</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleInputBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/BooleanBinding.html" title="class in com.sleepycat.bind.tuple"><B>BooleanBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ByteBinding.html" title="class in com.sleepycat.bind.tuple"><B>ByteBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/CharacterBinding.html" title="class in com.sleepycat.bind.tuple"><B>CharacterBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/DoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>DoubleBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/FloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>FloatBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/IntegerBinding.html" title="class in com.sleepycat.bind.tuple"><B>IntegerBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/LongBinding.html" title="class in com.sleepycat.bind.tuple"><B>LongBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/ShortBinding.html" title="class in com.sleepycat.bind.tuple"><B>ShortBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/SortedDoubleBinding.html" title="class in com.sleepycat.bind.tuple"><B>SortedDoubleBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/SortedFloatBinding.html" title="class in com.sleepycat.bind.tuple"><B>SortedFloatBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/StringBinding.html" title="class in com.sleepycat.bind.tuple"><B>StringBinding</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledBinding</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>TupleSerialFactory</B></A><LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledBinding.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledKeyCreator</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
+<LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial"><B>TupleSerialMarshalledKeyCreator</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind">EntityBinding</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledBinding</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleKeyCreator</B></A> (implements com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db">SecondaryKeyCreator</A>)
<UL>
-<LI TYPE="circle">class com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledKeyCreator</B></A></UL>
-<LI TYPE="circle">class com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>UtfOps</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>VerifyConfig</B></A></UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple"><B>TupleTupleMarshalledKeyCreator</B></A></UL>
+</UL>
+<LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/TupleInputBinding.html" title="class in com.sleepycat.bind.tuple"><B>TupleInputBinding</B></A> (implements com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind">EntryBinding</A>)
+<LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/TupleSerialFactory.html" title="class in com.sleepycat.collections"><B>TupleSerialFactory</B></A><LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/UtfOps.html" title="class in com.sleepycat.util"><B>UtfOps</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/VerifyConfig.html" title="class in com.sleepycat.db"><B>VerifyConfig</B></A></UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
-<LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>BtreePrefixCalculator</B></A><LI TYPE="circle">interface com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>ClassCatalog</B></A><LI TYPE="circle">interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>EntityBinding</B></A><LI TYPE="circle">interface com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><B>EntryBinding</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>ErrorHandler</B></A><LI TYPE="circle">interface com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>ExceptionWrapper</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>FeedbackHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>Hasher</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>LogRecordHandler</B></A><LI TYPE="circle">interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleEntry</B></A><LI TYPE="circle">interface com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleKeyEntity</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>MessageHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PanicHandler</B></A><LI TYPE="circle">interface com.sleepycat.collections.<A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PrimaryKeyAssigner</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>RecordNumberAppender</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>ReplicationTransport</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>SecondaryKeyCreator</B></A><LI TYPE="circle">interface com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>TransactionWorker</B></A></UL>
+<LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/BtreePrefixCalculator.html" title="interface in com.sleepycat.db"><B>BtreePrefixCalculator</B></A><LI TYPE="circle">com.sleepycat.bind.serial.<A HREF="com/sleepycat/bind/serial/ClassCatalog.html" title="interface in com.sleepycat.bind.serial"><B>ClassCatalog</B></A><LI TYPE="circle">com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntityBinding.html" title="interface in com.sleepycat.bind"><B>EntityBinding</B></A><LI TYPE="circle">com.sleepycat.bind.<A HREF="com/sleepycat/bind/EntryBinding.html" title="interface in com.sleepycat.bind"><B>EntryBinding</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ErrorHandler.html" title="interface in com.sleepycat.db"><B>ErrorHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/EventHandler.html" title="interface in com.sleepycat.db"><B>EventHandler</B></A><LI TYPE="circle">com.sleepycat.util.<A HREF="com/sleepycat/util/ExceptionWrapper.html" title="interface in com.sleepycat.util"><B>ExceptionWrapper</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/FeedbackHandler.html" title="interface in com.sleepycat.db"><B>FeedbackHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/Hasher.html" title="interface in com.sleepycat.db"><B>Hasher</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/LogRecordHandler.html" title="interface in com.sleepycat.db"><B>LogRecordHandler</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleEntry.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleEntry</B></A><LI TYPE="circle">com.sleepycat.bind.tuple.<A HREF="com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.html" title="interface in com.sleepycat.bind.tuple"><B>MarshalledTupleKeyEntity</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/MessageHandler.html" title="interface in com.sleepycat.db"><B>MessageHandler</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/PanicHandler.html" title="interface in com.sleepycat.db"><B>PanicHandler</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/PrimaryKeyAssigner.html" title="interface in com.sleepycat.collections"><B>PrimaryKeyAssigner</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/RecordNumberAppender.html" title="interface in com.sleepycat.db"><B>RecordNumberAppender</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/ReplicationTransport.html" title="interface in com.sleepycat.db"><B>ReplicationTransport</B></A><LI TYPE="circle">com.sleepycat.db.<A HREF="com/sleepycat/db/SecondaryKeyCreator.html" title="interface in com.sleepycat.db"><B>SecondaryKeyCreator</B></A><LI TYPE="circle">com.sleepycat.collections.<A HREF="com/sleepycat/collections/TransactionWorker.html" title="interface in com.sleepycat.collections"><B>TransactionWorker</B></A></UL>
<HR>
@@ -193,7 +205,7 @@ Interface Hierarchy
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -209,7 +221,7 @@ Interface Hierarchy
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -218,7 +230,7 @@ Interface Hierarchy
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -231,6 +243,7 @@ Interface Hierarchy
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -238,6 +251,6 @@ Interface Hierarchy
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="/../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/serialized-form.html b/db/docs/java/serialized-form.html
index 0170c2a0b..242950ae6 100644
--- a/db/docs/java/serialized-form.html
+++ b/db/docs/java/serialized-form.html
@@ -2,9 +2,9 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.4.2_05) on Mon Nov 08 21:00:51 EST 2004 -->
+<!-- Generated by javadoc (build 1.5.0_06) on Wed Sep 20 16:19:48 EDT 2006 -->
<TITLE>
-Serialized Form (Sleepycat Software, Inc. - Berkeley DB Java API)
+Serialized Form (Oracle Corporation - Berkeley DB Java API)
</TITLE>
@@ -13,9 +13,11 @@ Serialized Form (Sleepycat Software, Inc. - Berkeley DB Java API)
<SCRIPT type="text/javascript">
function windowTitle()
{
- parent.document.title="Serialized Form (Sleepycat Software, Inc. - Berkeley DB Java API)";
+ parent.document.title="Serialized Form (Oracle Corporation - Berkeley DB Java API)";
}
</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
</HEAD>
@@ -27,7 +29,7 @@ function windowTitle()
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -43,7 +45,7 @@ function windowTitle()
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -52,7 +54,7 @@ function windowTitle()
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -65,6 +67,7 @@ function windowTitle()
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -80,8 +83,8 @@ Serialized Form</H1>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>com.sleepycat.db</B></FONT></TD>
+<TH ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.sleepycat.db</B></FONT></TH>
</TR>
</TABLE>
@@ -89,8 +92,8 @@ Serialized Form</H1>
<A NAME="com.sleepycat.db.DatabaseException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A> extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">Exception</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">com.sleepycat.db.DatabaseException</A> extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html" title="class or interface in java.lang">Exception</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -100,8 +103,8 @@ Serialized Form</H1>
<A NAME="com.sleepycat.db.DeadlockException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">com.sleepycat.db.DeadlockException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">com.sleepycat.db.DeadlockException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -111,8 +114,8 @@ Serialized Form</H1>
<A NAME="com.sleepycat.db.LockNotGrantedException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">com.sleepycat.db.LockNotGrantedException</A> extends <A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/LockNotGrantedException.html" title="class in com.sleepycat.db">com.sleepycat.db.LockNotGrantedException</A> extends <A HREF="com/sleepycat/db/DeadlockException.html" title="class in com.sleepycat.db">DeadlockException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -122,8 +125,19 @@ Serialized Form</H1>
<A NAME="com.sleepycat.db.MemoryException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">com.sleepycat.db.MemoryException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/MemoryException.html" title="class in com.sleepycat.db">com.sleepycat.db.MemoryException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.ReplicationDuplicateMasterException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/ReplicationDuplicateMasterException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationDuplicateMasterException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -133,8 +147,52 @@ Serialized Form</H1>
<A NAME="com.sleepycat.db.ReplicationHandleDeadException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationHandleDeadException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/ReplicationHandleDeadException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationHandleDeadException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.ReplicationHoldElectionException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/ReplicationHoldElectionException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationHoldElectionException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.ReplicationJoinFailureException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/ReplicationJoinFailureException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationJoinFailureException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.ReplicationLockoutException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/ReplicationLockoutException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationLockoutException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.ReplicationSiteUnavailableException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/ReplicationSiteUnavailableException.html" title="class in com.sleepycat.db">com.sleepycat.db.ReplicationSiteUnavailableException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -144,20 +202,40 @@ Serialized Form</H1>
<A NAME="com.sleepycat.db.RunRecoveryException"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">com.sleepycat.db.RunRecoveryException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/RunRecoveryException.html" title="class in com.sleepycat.db">com.sleepycat.db.RunRecoveryException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
<P>
<P>
+<A NAME="com.sleepycat.db.UpdateConflictException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/UpdateConflictException.html" title="class in com.sleepycat.db">com.sleepycat.db.UpdateConflictException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.VersionMismatchException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/VersionMismatchException.html" title="class in com.sleepycat.db">com.sleepycat.db.VersionMismatchException</A> extends <A HREF="com/sleepycat/db/DatabaseException.html" title="class in com.sleepycat.db">DatabaseException</A> implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
<HR SIZE="4" NOSHADE>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>com.sleepycat.util</B></FONT></TD>
+<TH ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.sleepycat.util</B></FONT></TH>
</TR>
</TABLE>
@@ -165,8 +243,8 @@ Serialized Form</H1>
<A NAME="com.sleepycat.util.IOExceptionWrapper"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">com.sleepycat.util.IOExceptionWrapper</A> extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/util/IOExceptionWrapper.html" title="class in com.sleepycat.util">com.sleepycat.util.IOExceptionWrapper</A> extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -174,8 +252,8 @@ Serialized Form</H1>
<A NAME="serializedForm"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TH>
</TR>
</TABLE>
@@ -192,8 +270,8 @@ e</H3>
<A NAME="com.sleepycat.util.RuntimeExceptionWrapper"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Class <A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">com.sleepycat.util.RuntimeExceptionWrapper</A> extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang">RuntimeException</A> implements Serializable</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/util/RuntimeExceptionWrapper.html" title="class in com.sleepycat.util">com.sleepycat.util.RuntimeExceptionWrapper</A> extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html" title="class or interface in java.lang">RuntimeException</A> implements Serializable</B></FONT></TH>
</TR>
</TABLE>
@@ -201,8 +279,8 @@ e</H3>
<A NAME="serializedForm"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TD>
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TH>
</TR>
</TABLE>
@@ -224,7 +302,7 @@ e</H3>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
-<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
@@ -240,7 +318,7 @@ e</H3>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-<b>Berkeley DB</b><br><font size="-1"> version 4.3.27</font></EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.5.20</font></EM>
</TD>
</TR>
@@ -249,7 +327,7 @@ e</H3>
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html" target="_top"><B>FRAMES</B></A> &nbsp;
+ <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
@@ -262,6 +340,7 @@ e</H3>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
+
</FONT></TD>
</TR>
</TABLE>
@@ -269,6 +348,6 @@ e</H3>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
-<font size=1><a href="/../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<font size=1>Copyright(c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</BODY>
</HTML>
diff --git a/db/docs/java/style.css b/db/docs/java/style.css
index 5847df9c4..5fb838da8 100644
--- a/db/docs/java/style.css
+++ b/db/docs/java/style.css
@@ -27,3 +27,9 @@ body { background-color: #FFFFFF }
.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+pre.code
+{
+ border: solid thin;
+ padding: 2px;
+ background-color: #ffffcc;
+}
diff --git a/db/docs/license/license_db.html b/db/docs/license/license_db.html
new file mode 100644
index 000000000..1c13a48b7
--- /dev/null
+++ b/db/docs/license/license_db.html
@@ -0,0 +1,113 @@
+<!--$Id: license_db.so,v 10.17 2006/09/19 18:18:24 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Berkeley DB Product License</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<p align=center>
+<img src="../images/Oracle_BerkeleyDB_clr.bmp" alt="Oracle Corporation"></p>
+<h3 align=center>Berkeley DB 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 contact
+<a href="mailto:berkeleydb-info_us@oracle.com">Oracle Corporation</a>.</p>
+<pre>/*
+ * Copyright (c) 1990-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * 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. Redistributions in any form must be accompanied by information on
+ * how to obtain complete source code for the DB software and any
+ * accompanying software that uses the DB software. The source code
+ * must either be included in the distribution or be available for no
+ * more than the cost of distribution plus a nominal fee, and must be
+ * freely redistributable under reasonable conditions. For an
+ * executable file, complete source code means the source code for all
+ * modules it contains. It does not include source code for modules or
+ * files that typically accompany the major components of the operating
+ * system on which the executable file runs.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ORACLE CORPORATION ``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, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE CORPORATION
+ * 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.
+ */
+/*
+ * Copyright (c) 1990, 1993, 1994, 1995
+ * The Regents of the University of California. All rights reserved.
+ *
+ * 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.
+ */
+/*
+ * Copyright (c) 1995, 1996
+ * The President and Fellows of Harvard University. All rights reserved.
+ *
+ * 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 HARVARD AND ITS 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 HARVARD OR ITS 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.
+ */</pre>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/license/license_xml.html b/db/docs/license/license_xml.html
new file mode 100644
index 000000000..273c52477
--- /dev/null
+++ b/db/docs/license/license_xml.html
@@ -0,0 +1,184 @@
+<!--$Id: license_xml.so,v 10.9 2006/09/19 18:18:24 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Berkeley DB XML Product License</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<p align=center>
+<img src="../images/Oracle_BerkeleyDB_clr.bmp" alt="Oracle Corporation"></p>
+<h3 align=center>Berkeley DB XML Product License</h3>
+<p>The following is the license that applies to this copy of the Berkeley DB XML
+software. For a license to use the Berkeley DB XML software under conditions
+other than those described here, or to purchase support for this software,
+please contact
+<a href="mailto:berkeleydb-info_us@oracle.com">Oracle Corporation</a>.</p>
+<pre>/*
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * 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. Redistributions in any form must be accompanied by information on
+ * how to obtain complete source code for the DB software and any
+ * accompanying software that uses the DB software. The source code
+ * must either be included in the distribution or be available for no
+ * more than the cost of distribution plus a nominal fee, and must be
+ * freely redistributable under reasonable conditions. For an
+ * executable file, complete source code means the source code for all
+ * modules it contains. It does not include source code for modules or
+ * files that typically accompany the major components of the operating
+ * system on which the executable file runs.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ORACLE CORPORATION ``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, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE CORPORATION
+ * 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.
+ */
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * 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. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" must
+ * not be used to endorse or promote products derived from this
+ * software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * nor may "Apache" appear in their name, without prior written
+ * permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
+ * ITS 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ * Portions of this software are based upon public domain software
+ * originally written at the National Center for Supercomputing Applications,
+ * University of Illinois, Urbana-Champaign.
+ */</pre>
+<p>The following is the license that applies to this copy of the Berkeley DB XML
+XQuery software. For a license to use the Berkeley DB XML XQuery software
+under conditions other than those described here, or to purchase support
+for this software, please contact
+<a href="mailto:berkeleydb-info_us@oracle.com">Oracle Corporation</a>.</p>
+<pre>/*
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * 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. Redistributions in any form must be accompanied by information on
+ * how to obtain complete source code for the DB software and any
+ * accompanying software that uses the DB software. The source code
+ * must either be included in the distribution or be available for no
+ * more than the cost of distribution plus a nominal fee, and must be
+ * freely redistributable under reasonable conditions. For an
+ * executable file, complete source code means the source code for all
+ * modules it contains. It does not include source code for modules or
+ * files that typically accompany the major components of the operating
+ * system on which the executable file runs.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ORACLE CORPORATION ``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, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE CORPORATION
+ * 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.
+ */
+/*
+ * Copyright (c) 2005
+ * Progress Software Corporation. All rights reserved.
+ *
+ * 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. The end-user documentation included with the redistribution, if any,
+ * must include the following acknowledgment: "This product includes
+ * software developed by Progress Software Corporation." Alternately,
+ * this acknowledgment may appear in the software itself, if and wherever
+ * such third-party acknowledgments normally appear.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 PROGRESS SOFTWARE CORPORATION 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.
+ */</pre>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/am/close.html b/db/docs/ref/am/close.html
index 9367fcd17..beacd030d 100644
--- a/db/docs/ref/am/close.html
+++ b/db/docs/ref/am/close.html
@@ -1,5 +1,5 @@
<!--$Id: close.so,v 10.18 2003/10/18 19:15:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ atomically replace the original database with the updated copy.
</ul>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/count.html b/db/docs/ref/am/count.html
index 8628dc3ee..76db7f9bd 100644
--- a/db/docs/ref/am/count.html
+++ b/db/docs/ref/am/count.html
@@ -1,5 +1,5 @@
<!--$Id: count.so,v 1.4 2001/05/05 01:49:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ the database supports duplicate data items, in which case it may be any
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curclose.html b/db/docs/ref/am/curclose.html
index 8f7d7efc9..ee8374c99 100644
--- a/db/docs/ref/am/curclose.html
+++ b/db/docs/ref/am/curclose.html
@@ -1,5 +1,5 @@
<!--$Id: curclose.so,v 10.15 2003/10/18 19:15:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curdel.html b/db/docs/ref/am/curdel.html
index 98d27a6e2..bc38536ec 100644
--- a/db/docs/ref/am/curdel.html
+++ b/db/docs/ref/am/curdel.html
@@ -1,5 +1,5 @@
<!--$Id: curdel.so,v 10.15 2003/10/18 19:15:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,6 +22,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curdup.html b/db/docs/ref/am/curdup.html
index 3110876b3..2ac42356c 100644
--- a/db/docs/ref/am/curdup.html
+++ b/db/docs/ref/am/curdup.html
@@ -1,5 +1,5 @@
<!--$Id: curdup.so,v 11.6 2001/03/01 15:57:49 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ self-deadlocks. For further details, refer to
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curget.html b/db/docs/ref/am/curget.html
index 4b784523e..5b7a57494 100644
--- a/db/docs/ref/am/curget.html
+++ b/db/docs/ref/am/curget.html
@@ -1,5 +1,5 @@
<!--$Id: curget.so,v 10.20 2003/10/18 19:15:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -89,6 +89,7 @@ display(database)
"%s: db_create: %s\n", progname, db_strerror(ret));
return (1);
}
+ close_db = 1;
<p>
/* Turn on additional error output. */
dbp-&gt;set_errfile(dbp, stderr);
@@ -106,6 +107,7 @@ display(database)
dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
goto err;
}
+ close_dbc = 1;
<p>
/* Initialize the key/data return pair. */
memset(&key, 0, sizeof(key));
@@ -130,6 +132,6 @@ err: if (close_dbc && (ret = dbcp-&gt;c_close(dbcp)) != 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curput.html b/db/docs/ref/am/curput.html
index ea02c7ac0..8daa44fdb 100644
--- a/db/docs/ref/am/curput.html
+++ b/db/docs/ref/am/curput.html
@@ -1,5 +1,5 @@
<!--$Id: curput.so,v 10.18 2003/10/18 19:15:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -85,6 +85,6 @@ err: if ((ret = dbcp-&gt;c_close(dbcp)) != 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/cursor.html b/db/docs/ref/am/cursor.html
index 38713f7a0..5e55984c3 100644
--- a/db/docs/ref/am/cursor.html
+++ b/db/docs/ref/am/cursor.html
@@ -1,5 +1,5 @@
<!--$Id: cursor.so,v 10.21 2003/10/18 19:15:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,10 +32,10 @@ cursor operation.</p>
(<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.3 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.4 2005/02/09 13:11:05 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
-<!--Db::cursor--><tr><td><a href="../../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
+<!--Db::cursor--><tr><td><a href="../../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor</td></tr>
<!--DbCursor::close--><tr><td><a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a></td><td>Close a cursor</td></tr>
<!--DbCursor::count--><tr><td><a href="../../api_c/dbc_count.html">DBcursor-&gt;c_count</a></td><td>Return count of duplicates</td></tr>
<!--DbCursor::del--><tr><td><a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a></td><td>Delete by cursor</td></tr>
@@ -45,6 +45,6 @@ using <a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a>.</p>
</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/delete.html b/db/docs/ref/am/delete.html
index e29cffdff..882ec5644 100644
--- a/db/docs/ref/am/delete.html
+++ b/db/docs/ref/am/delete.html
@@ -1,5 +1,5 @@
<!--$Id: delete.so,v 10.16 2003/10/18 19:15:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ it from the database.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/get.html b/db/docs/ref/am/get.html
index 030ce2c59..c8f2784ec 100644
--- a/db/docs/ref/am/get.html
+++ b/db/docs/ref/am/get.html
@@ -1,5 +1,5 @@
<!--$Id: get.so,v 10.18 2003/10/18 19:15:52 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,6 +35,6 @@ record.
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/join.html b/db/docs/ref/am/join.html
index 7805ac7b2..77070d892 100644
--- a/db/docs/ref/am/join.html
+++ b/db/docs/ref/am/join.html
@@ -1,5 +1,5 @@
<!--$Id: join.so,v 10.31 2004/01/21 20:39:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -186,6 +186,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/open.html b/db/docs/ref/am/open.html
index f49ee98ed..cbe51ecaa 100644
--- a/db/docs/ref/am/open.html
+++ b/db/docs/ref/am/open.html
@@ -1,5 +1,5 @@
<!--$Id: open.so,v 10.18 2003/10/18 19:15:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,6 +42,6 @@ within physical files.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/opensub.html b/db/docs/ref/am/opensub.html
index 3be91dd0a..4ea13bfd1 100644
--- a/db/docs/ref/am/opensub.html
+++ b/db/docs/ref/am/opensub.html
@@ -1,5 +1,5 @@
<!--$Id: opensub.so,v 10.17 2004/08/25 17:34:14 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -76,6 +76,6 @@ consistent with the existing databases in the file or an error will be
returned.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/ops.html b/db/docs/ref/am/ops.html
index 4e55bee4e..37d433d8c 100644
--- a/db/docs/ref/am/ops.html
+++ b/db/docs/ref/am/ops.html
@@ -1,5 +1,5 @@
<!--$Id: ops.so,v 10.22 2002/08/30 20:01:36 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,20 +29,19 @@ version upgrade (<a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a>), veri
(<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.7 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.11 2006/08/25 16:40:00 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Operations</th><th>Description</th></tr>
<!--Db::--><tr><td><a href="../../api_c/db_class.html">db_create</a></td><td>Create a database handle</td></tr>
<!--Db::associate--><tr><td><a href="../../api_c/db_associate.html">DB-&gt;associate</a></td><td>Associate a secondary index</td></tr>
<!--Db::close--><tr><td><a href="../../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
-<!--Db::cursor--><tr><td><a href="../../api_c/db_close.html">DB-&gt;close</a></td><td>Create a cursor</td></tr>
+<!--Db::compact--><tr><td><a href="../../api_c/db_compact.html">DB-&gt;compact</a></td><td>Compact a database</td></tr>
+<!--Db::cursor--><tr><td><a href="../../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor</td></tr>
<!--Db::del--><tr><td><a href="../../api_c/db_del.html">DB-&gt;del</a></td><td>Delete items from a database</td></tr>
<!--Db::err--><tr><td><a href="../../api_c/db_err.html">DB-&gt;err</a>, <a href="../../api_c/db_err.html">DB-&gt;errx</a></td><td>Error message</td></tr>
<!--Db::fd--><tr><td><a href="../../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
<!--Db::get--><tr><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>
<!--Db::get_byteswapped--><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>
-<!--Db::get_env--><tr><td><a href="../../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return database environment handle</td></tr>
-<!--Db::get_mpf--><tr><td><a href="../../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return underlying <a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle</td></tr>
<!--Db::get_type--><tr><td><a href="../../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
<!--Db::join--><tr><td><a href="../../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
<!--Db::key_range--><tr><td><a href="../../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
@@ -68,7 +67,6 @@ handles are eventually closed using <a href="../../api_c/db_close.html">DB-&gt;c
<!--Db::set_flags--><tr><td><a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a></td><td>General database configuration</td></tr>
<!--Db::set_lorder--><tr><td><a href="../../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td><td>Set the database byte order</td></tr>
<!--Db::set_pagesize--><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>
-<!--Db::set_paniccall--><tr><td><a href="../../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
<tr><th>Btree/Recno Configuration</th><th><br></th></tr>
<!--Db::set_append_recno--><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>
<!--Db::set_bt_compare--><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>
@@ -87,6 +85,6 @@ handles are eventually closed using <a href="../../api_c/db_close.html">DB-&gt;c
</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/put.html b/db/docs/ref/am/put.html
index f56346b66..555bc424f 100644
--- a/db/docs/ref/am/put.html
+++ b/db/docs/ref/am/put.html
@@ -1,5 +1,5 @@
<!--$Id: put.so,v 10.15 2003/10/18 19:15:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,6 +32,6 @@ set. If the database supports sorted duplicates, the new data value is
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/second.html b/db/docs/ref/am/second.html
index 169a974e8..0c4025ec8 100644
--- a/db/docs/ref/am/second.html
+++ b/db/docs/ref/am/second.html
@@ -1,5 +1,5 @@
<!--$Id: second.so,v 10.12 2004/09/15 19:40:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -79,8 +79,8 @@ second()
* key/data pair
*/
int
-getname(dbp, pkey, pdata, skey)
- DB *dbp;
+getname(secondary, pkey, pdata, skey)
+ DB *secondary;
const DBT *pkey, *pdata;
DBT *skey;
{
@@ -214,6 +214,6 @@ a new database handle and the <a href="../../api_c/db_remove.html">DB-&gt;remove
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/second.javas b/db/docs/ref/am/second.javas
index bb96a7bc5..b28cbf308 100644
--- a/db/docs/ref/am/second.javas
+++ b/db/docs/ref/am/second.javas
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2002
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: second.javas,v 10.1 2004/09/15 19:40:07 bostic Exp $
+ * $Id: second.javas,v 10.5 2006/08/24 16:32:26 bostic Exp $
*/
-package com.sleepycat.examples;
+package db;
import com.sleepycat.db.*;
import java.io.File;
diff --git a/db/docs/ref/am/stat.html b/db/docs/ref/am/stat.html
index a1864b61d..da74075f8 100644
--- a/db/docs/ref/am/stat.html
+++ b/db/docs/ref/am/stat.html
@@ -1,5 +1,5 @@
<!--$Id: stat.so,v 10.21 2003/10/18 19:15:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ entire database.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/sync.html b/db/docs/ref/am/sync.html
index 22441f8b6..e016adc1f 100644
--- a/db/docs/ref/am/sync.html
+++ b/db/docs/ref/am/sync.html
@@ -1,5 +1,5 @@
<!--$Id: sync.so,v 10.18 2003/10/18 19:15:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,6 +34,6 @@ atomically replace the original database with the updated copy.
</ul>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/truncate.html b/db/docs/ref/am/truncate.html
index cd51aa52d..cfa86ae0e 100644
--- a/db/docs/ref/am/truncate.html
+++ b/db/docs/ref/am/truncate.html
@@ -1,5 +1,5 @@
<!--$Id: truncate.so,v 10.5 2003/10/18 19:15:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,6 @@
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/upgrade.html b/db/docs/ref/am/upgrade.html
index f6b0ce882..45fd3c309 100644
--- a/db/docs/ref/am/upgrade.html
+++ b/db/docs/ref/am/upgrade.html
@@ -1,5 +1,5 @@
<!--$Id: upgrade.so,v 10.17 2001/03/10 19:05:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,6 @@ appropriate copies of their application or application sources if they
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/verify.html b/db/docs/ref/am/verify.html
index d4958ce6a..4a4f253fb 100644
--- a/db/docs/ref/am/verify.html
+++ b/db/docs/ref/am/verify.html
@@ -1,5 +1,5 @@
<!--$Id: verify.so,v 10.10 2003/10/18 19:15:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,6 @@ preferable to any kind of data loss.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8173dd75f..25412a949 100644
--- a/db/docs/ref/am_conf/bt_compare.html
+++ b/db/docs/ref/am_conf/bt_compare.html
@@ -1,5 +1,5 @@
<!--$Id: bt_compare.so,v 10.25 2004/03/05 21:39:33 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -87,6 +87,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2ca2eed2f..80ddcf499 100644
--- a/db/docs/ref/am_conf/bt_minkey.html
+++ b/db/docs/ref/am_conf/bt_minkey.html
@@ -1,5 +1,5 @@
<!--$Id: bt_minkey.so,v 10.14 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ value incorrectly can result in overusing overflow pages and decreasing
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b22d9c2a0..9d78507a1 100644
--- a/db/docs/ref/am_conf/bt_prefix.html
+++ b/db/docs/ref/am_conf/bt_prefix.html
@@ -1,5 +1,5 @@
<!--$Id: bt_prefix.so,v 10.22 2004/02/21 15:50:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -65,6 +65,6 @@ compare_prefix(dbp, a, b)
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6003b102f..8e1541265 100644
--- a/db/docs/ref/am_conf/bt_recnum.html
+++ b/db/docs/ref/am_conf/bt_recnum.html
@@ -1,5 +1,5 @@
<!--$Id: bt_recnum.so,v 10.23 2002/06/24 14:50:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -101,6 +101,6 @@ err: /* Close the cursor. */
}</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f0ee13f84..c1f0fa01d 100644
--- a/db/docs/ref/am_conf/byteorder.html
+++ b/db/docs/ref/am_conf/byteorder.html
@@ -1,5 +1,5 @@
<!--$Id: byteorder.so,v 10.17 2001/02/15 22:21:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,6 +33,6 @@ exactly as they were written when retrieved on a big-endian format
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6b0e5ea4a..142f7af08 100644
--- a/db/docs/ref/am_conf/cachesize.html
+++ b/db/docs/ref/am_conf/cachesize.html
@@ -1,5 +1,5 @@
<!--$Id: cachesize.so,v 10.20 2003/02/19 17:41:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -81,6 +81,6 @@ means that the cache is working well, yielding a 97% cache hit rate. The
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c343a7bc5..847f395e1 100644
--- a/db/docs/ref/am_conf/dup.html
+++ b/db/docs/ref/am_conf/dup.html
@@ -1,5 +1,5 @@
<!--$Id: dup.so,v 10.28 2003/10/18 19:15:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -70,6 +70,6 @@ presence of duplicates (sorted or not), see the <a href="../../api_c/db_get.html
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 de7603608..1aac57fb0 100644
--- a/db/docs/ref/am_conf/extentsize.html
+++ b/db/docs/ref/am_conf/extentsize.html
@@ -1,5 +1,5 @@
<!--$Id: extentsize.so,v 1.3 2001/05/02 15:53:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ many files, all those files will need to be open at the same time,
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 6ca6b339c..569f8b08a 100644
--- a/db/docs/ref/am_conf/h_ffactor.html
+++ b/db/docs/ref/am_conf/h_ffactor.html
@@ -1,5 +1,5 @@
<!--$Id: h_ffactor.so,v 10.12 2001/04/18 13:44:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ the <a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a> method.
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5c4751f03..138011100 100644
--- a/db/docs/ref/am_conf/h_hash.html
+++ b/db/docs/ref/am_conf/h_hash.html
@@ -1,5 +1,5 @@
<!--$Id: h_hash.so,v 10.12 2000/07/04 18:28:27 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,6 +35,6 @@ take a reference to a <a href="../../api_c/db_class.html">DB</a> object, a point
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 94d6176db..f8d935fbc 100644
--- a/db/docs/ref/am_conf/h_nelem.html
+++ b/db/docs/ref/am_conf/h_nelem.html
@@ -1,5 +1,5 @@
<!--$Id: h_nelem.so,v 10.12 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ of elements to be a useful value to Berkeley DB, the <a href="../../api_c/db_set
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2f8139cf7..6ffd8f9fe 100644
--- a/db/docs/ref/am_conf/intro.html
+++ b/db/docs/ref/am_conf/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.25 2004/09/17 19:51:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,6 +41,6 @@ logical record numbers as keys, optionally backed by a flat text (byte
stream) file.</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="../am_conf/select.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a273c6d63..4f33a3e48 100644
--- a/db/docs/ref/am_conf/logrec.html
+++ b/db/docs/ref/am_conf/logrec.html
@@ -1,5 +1,5 @@
<!--$Id: logrec.so,v 10.31 2004/08/05 14:16:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -119,6 +119,6 @@ recno_build(dbp)
}</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c8dad08f8..92bfbf7bb 100644
--- a/db/docs/ref/am_conf/malloc.html
+++ b/db/docs/ref/am_conf/malloc.html
@@ -1,5 +1,5 @@
<!--$Id: malloc.so,v 10.20 2001/04/03 16:27:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ uses to free it, or vice versa. To avoid this problem, the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2772543c8..f85fccd07 100644
--- a/db/docs/ref/am_conf/pagesize.html
+++ b/db/docs/ref/am_conf/pagesize.html
@@ -1,5 +1,5 @@
<!--$Id: pagesize.so,v 10.22 2002/02/11 14:55:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -73,6 +73,6 @@ from which your database can recover See
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5e64cbcec..6b4c0ce7e 100644
--- a/db/docs/ref/am_conf/re_source.html
+++ b/db/docs/ref/am_conf/re_source.html
@@ -1,5 +1,5 @@
<!--$Id: re_source.so,v 10.16 2003/10/18 19:15:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ are either generated on the fly by software tools, or modified using 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0d14433bf..cd7c69131 100644
--- a/db/docs/ref/am_conf/recno.html
+++ b/db/docs/ref/am_conf/recno.html
@@ -1,5 +1,5 @@
<!--$Id: recno.so,v 11.11 2003/10/18 19:15:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -65,6 +65,6 @@ files, see <a href="../../ref/am_conf/re_source.html">Flat-text backing
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a990d540a..c1ace5098 100644
--- a/db/docs/ref/am_conf/renumber.html
+++ b/db/docs/ref/am_conf/renumber.html
@@ -1,5 +1,5 @@
<!--$Id: renumber.so,v 10.26 2003/10/18 19:15:55 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -76,6 +76,6 @@ record by its record number will also result in the <a href="../../ref/program/e
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f72200675..fdd87bbfc 100644
--- a/db/docs/ref/am_conf/select.html
+++ b/db/docs/ref/am_conf/select.html
@@ -1,5 +1,5 @@
<!--$Id: select.so,v 10.25 2001/03/31 17:06:27 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -113,6 +113,6 @@ 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.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 80f59224c..3bc16168e 100644
--- a/db/docs/ref/am_misc/align.html
+++ b/db/docs/ref/am_misc/align.html
@@ -1,5 +1,5 @@
<!--$Id: align.so,v 1.4 2001/05/28 00:30:40 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ any necessary alignment. The <a href="../../api_c/dbt_class.html#DB_DBT_MALLOC"
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f0cc71a22..a01c0445f 100644
--- a/db/docs/ref/am_misc/dbsizes.html
+++ b/db/docs/ref/am_misc/dbsizes.html
@@ -1,5 +1,5 @@
-<!--$Id: dbsizes.so,v 10.26 2004/03/29 15:53:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbsizes.so,v 10.27 2005/02/24 20:51:50 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,9 +28,9 @@ 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.</p>
<p>The largest key or data item that Berkeley DB can support is 2<sup>32</sup>,
-or more likely by available memory. Specifically, while key and data
-byte strings may be of essentially unlimited length, any one of them
-must fit into available memory so that it can be returned to the
+or more likely limited by available memory. Specifically, while key and
+data byte strings may be of essentially unlimited length, any one of
+them must fit into available memory so that it can be returned to the
application. As some of the Berkeley DB interfaces return both key and data
items to the application, those interfaces will require that any
key/data pair fit simultaneously into memory. Further, as the access
@@ -42,6 +42,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b66906c72..20753f74a 100644
--- a/db/docs/ref/am_misc/diskspace.html
+++ b/db/docs/ref/am_misc/diskspace.html
@@ -1,5 +1,5 @@
<!--$Id: diskspace.so,v 10.17 2002/08/09 13:43:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -144,6 +144,6 @@ only at specific points in the file, and this too can lead to sparse hash
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 575e33d77..0b7738705 100644
--- a/db/docs/ref/am_misc/error.html
+++ b/db/docs/ref/am_misc/error.html
@@ -1,5 +1,5 @@
<!--$Id: error.so,v 10.22 2003/10/18 19:15:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ an EACCESS system error, the error messages shown would appear as follows:</p>
my_app: contact your system administrator: session ID was 14</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 08d988ff1..62a409cc6 100644
--- a/db/docs/ref/am_misc/faq.html
+++ b/db/docs/ref/am_misc/faq.html
@@ -1,5 +1,5 @@
-<!--$Id: faq.so,v 10.23 2004/09/17 19:51:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.26 2005/10/20 16:10:15 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,17 +33,6 @@ order</a> for more information.</p>
in a single physical file.</b>
<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
-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>
@@ -64,7 +53,7 @@ a little-endian system are:</p>
<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
+256 0 0 1 0
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
@@ -73,7 +62,7 @@ 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>
+<a name="3"><!--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 a few things
you can do to address this issue:</p>
@@ -85,9 +74,10 @@ 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.</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.</p>
+may be able to alter the amount of physical memory devoted to the
+system's file buffer cache. Altering this type of resource
+configuration may require appropriate privileges, or even operating
+system reboots and/or rebuilds, on some systems.</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
@@ -126,6 +116,6 @@ data members or methods.</p>
</ol>
<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="../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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bbd94ba70..b8720c8e9 100644
--- a/db/docs/ref/am_misc/get_bulk.html
+++ b/db/docs/ref/am_misc/get_bulk.html
@@ -1,5 +1,5 @@
<!--$Id: get_bulk.so,v 10.7 2004/09/03 19:47:57 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -131,6 +131,6 @@ rec_display(dbp)
}</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 80b604495..ed9afb5eb 100644
--- a/db/docs/ref/am_misc/partial.html
+++ b/db/docs/ref/am_misc/partial.html
@@ -1,5 +1,5 @@
<!--$Id: partial.so,v 10.25 2003/10/18 19:15:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -129,6 +129,6 @@ ABCDEFGHIJ0123456789 -&gt; ABCDEFGHIJ0123456789\0\0\0\0\0abcdefghij
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 58902350c..42f1c4c16 100644
--- a/db/docs/ref/am_misc/perm.html
+++ b/db/docs/ref/am_misc/perm.html
@@ -1,5 +1,5 @@
<!--$Id: perm.so,v 1.4 2002/06/20 12:53:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,6 +32,6 @@ pointer stored into the <a href="../../api_c/dbt_class.html">DBT</a> refers is o
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b4bb1e9d7..26167faf2 100644
--- a/db/docs/ref/am_misc/stability.html
+++ b/db/docs/ref/am_misc/stability.html
@@ -1,5 +1,5 @@
-<!--$Id: stability.so,v 10.29 2004/01/12 05:33:23 ubell Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: stability.so,v 10.30 2005/02/10 20:02:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,10 +40,9 @@ appear in the first call but would be seen by the second call. For
readers not enclosed in transactions, all access method calls provide
degree 2 isolation, that is, reads are not repeatable. A transaction
may be declared to run with degree 2 isolation by specifying the
-<a href="../../api_c/db_cursor.html#DB_DEGREE_2">DB_DEGREE_2</a> flag. 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.</p>
+<a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a> flag. Finally, Berkeley DB provides degree 1 isolation
+when the <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag is specified; that is, reads
+may see data modified in transactions which 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
@@ -52,6 +51,6 @@ the scan inserts a new pair into the database, it is possible that
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ff5423abe..7b2379e11 100644
--- a/db/docs/ref/am_misc/struct.html
+++ b/db/docs/ref/am_misc/struct.html
@@ -1,5 +1,5 @@
<!--$Id: struct.so,v 10.8 2002/12/22 20:42:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -83,6 +83,6 @@ memcpy(&info.buf[0], string, strlen(string) + 1);</pre></blockquote>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fa2c31607..d26c35259 100644
--- a/db/docs/ref/am_misc/tune.html
+++ b/db/docs/ref/am_misc/tune.html
@@ -1,5 +1,5 @@
-<!--$Id: tune.so,v 10.9 2004/08/13 03:38:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: tune.so,v 10.10 2006/08/25 23:25:17 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -102,12 +102,12 @@ sleep wastes CPU and decreases the overall throughput of the system.</p>
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>
+of control might hold when de-scheduling 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
@@ -117,6 +117,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/auto.html b/db/docs/ref/apprec/auto.html
index a321f2aea..9e662b4f1 100644
--- a/db/docs/ref/apprec/auto.html
+++ b/db/docs/ref/apprec/auto.html
@@ -1,5 +1,5 @@
-<!--$Id: auto.so,v 10.3 2002/03/15 16:19:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: auto.so,v 10.4 2006/09/13 16:21:43 sue Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,7 @@ cd ../../dist
awk -f gen_rec.awk \
-v source_file=$E/ex_apprec_auto.c \
-v header_file=$E/ex_apprec_auto.h \
+ -v print_file=$E/ex_apprec_autop.c \
-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
@@ -154,6 +155,6 @@ initialization part of the standalone <a href="../../utility/db_printlog.html">d
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/config.html b/db/docs/ref/apprec/config.html
index 7497419e2..0d67bafc4 100644
--- a/db/docs/ref/apprec/config.html
+++ b/db/docs/ref/apprec/config.html
@@ -1,5 +1,5 @@
<!--$Id: config.so,v 10.4 2002/06/05 21:09:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -123,6 +123,6 @@ to stable storage before calling the <a href="../../api_c/txn_checkpoint.html">D
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/def.html b/db/docs/ref/apprec/def.html
index 57960cc0d..63b1d44bf 100644
--- a/db/docs/ref/apprec/def.html
+++ b/db/docs/ref/apprec/def.html
@@ -1,5 +1,5 @@
-<!--$Id: def.so,v 10.3 2002/03/06 20:49:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: def.so,v 10.5 2006/09/15 20:28:48 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,9 +44,12 @@ 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>
+<blockquote><pre>BEGIN <i>RECORD_NAME</i> <i>DB_VERSION_NUMBER</i> <i>RECORD_NUMBER</i></pre></blockquote>
<p>and ends with the line:</p>
<blockquote><pre>END</pre></blockquote>
+<p>The <i>DB_VERSION_NUMBER</i> variable should be replaced with the
+current major and minor version of Berkeley DB, with all punctuation removed.
+For example, Berkeley DB version 4.2 should be 42, version 4.5 should be 45.</p>
<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.</p>
@@ -91,6 +94,6 @@ file btree/btree.src contains the definitions for the log records
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/intro.html b/db/docs/ref/apprec/intro.html
index 7c3a5dd5d..aa67aecd2 100644
--- a/db/docs/ref/apprec/intro.html
+++ b/db/docs/ref/apprec/intro.html
@@ -1,5 +1,5 @@
-<!--$Id: intro.so,v 10.50 2004/04/16 19:02:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.52 2005/12/13 16:31:39 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,7 +34,8 @@ application to ensure that appropriate locks are acquired. Before a
write is performed, the application should acquire a write lock on the
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
+manager, via the automatically-generated log-writing function described
+as follows. This record should contain enough information to redo the
operation in case of failure after commit and to undo the operation in
case of abort.</p>
<p>When designing applications that will use the log subsystem, it is
@@ -75,6 +76,6 @@ usable on any system, not just POSIX systems.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/apis.html b/db/docs/ref/arch/apis.html
index fa776f838..11892fd80 100644
--- a/db/docs/ref/arch/apis.html
+++ b/db/docs/ref/arch/apis.html
@@ -1,5 +1,5 @@
<!--$Id: apis.so,v 10.29 2003/10/18 19:15:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -72,6 +72,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/bigpic.html b/db/docs/ref/arch/bigpic.html
index 9d527a2f5..506ca2eea 100644
--- a/db/docs/ref/arch/bigpic.html
+++ b/db/docs/ref/arch/bigpic.html
@@ -1,5 +1,5 @@
<!--$Id: bigpic.so,v 8.32 2003/11/27 18:25:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -120,6 +120,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/progmodel.html b/db/docs/ref/arch/progmodel.html
index f62904779..851c8b43d 100644
--- a/db/docs/ref/arch/progmodel.html
+++ b/db/docs/ref/arch/progmodel.html
@@ -1,5 +1,5 @@
<!--$Id: progmodel.so,v 10.27 2001/03/01 15:57:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/script.html b/db/docs/ref/arch/script.html
index 797bd82ce..963ef928a 100644
--- a/db/docs/ref/arch/script.html
+++ b/db/docs/ref/arch/script.html
@@ -1,5 +1,5 @@
-<!--$Id: script.so,v 10.14 2004/10/05 16:44:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: script.so,v 10.15 2005/04/18 17:09:45 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,7 +23,7 @@ to Berkeley DB version 2 and later is called BerkeleyDB. See
information.</p>
<h3>PHP</h3>
<p>A PHP wrapper is distributed with the Berkeley DB release. See
-<a href="../../ref/ext/php.html">Using Berkeley DB with Perl</a> for more
+<a href="../../ref/ext/php.html">Using Berkeley DB with PHP</a> for more
information.</p>
<h3>Tcl</h3>
<p>A Tcl wrapper is distributed with the Berkeley DB release. See
@@ -31,6 +31,6 @@ information.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/utilities.html b/db/docs/ref/arch/utilities.html
index 885268a66..63cc06884 100644
--- a/db/docs/ref/arch/utilities.html
+++ b/db/docs/ref/arch/utilities.html
@@ -1,5 +1,5 @@
<!--$Id: utilities.so,v 10.25 2001/03/05 19:15:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -59,6 +59,6 @@ the necessity for multiple processes to negotiate database and database
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f6ea88e93..6664d5a7b 100644
--- a/db/docs/ref/build_unix/aix.html
+++ b/db/docs/ref/build_unix/aix.html
@@ -1,5 +1,5 @@
-<!--$Id: aix.so,v 11.25 2003/04/25 15:12:18 dda Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: aix.so,v 11.27 2005/04/06 01:45:22 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -78,6 +78,6 @@ include the problematical system include files.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 886a19a54..f744f2b69 100644
--- a/db/docs/ref/build_unix/conf.html
+++ b/db/docs/ref/build_unix/conf.html
@@ -1,5 +1,5 @@
-<!--$Id: conf.so,v 10.59 2004/01/28 17:48:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: conf.so,v 10.63 2006/04/07 21:08:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -108,11 +108,21 @@ 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>
+that applications and Berkeley DB be linked with the -lpthread library.</p>
+<dt><a name="--enable-pthread_api">--enable-pthread_api</a><dd>To configure Berkeley DB for a POSIX pthreads application (with the exception
+that POSIX pthread mutexes may not be selected as the underlying mutex
+implementation for the build), enter --enable-pthread_api as an argument
+to configure. The build will include the Berkeley DB replication manager
+interfaces and will use the POSIX standard pthread_self and
+pthread_yield functions to identify threads of control and yield the
+processor. The --enable-pthread_api argument requires POSIX pthread
+support already be installed on your system.
+<p>Specifying the --enable-pthread_api configuration argument may require
+that applications and Berkeley DB be linked with the -lpthread library.</p>
<a name="11"><!--meow--></a>
<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 argument requires that RPC
-libraries already be installed on your system.
+support already be installed on your system.
<a name="12"><!--meow--></a>
<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
@@ -146,7 +156,7 @@ 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>
+that applications and Berkeley DB be linked with the -lthread library.</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
@@ -161,16 +171,6 @@ 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>.
-<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.
-<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.
<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
@@ -187,6 +187,6 @@ multiple versions of Berkeley DB</a> for more information.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/flags.html b/db/docs/ref/build_unix/flags.html
index 9afec5f3f..b44026d91 100644
--- a/db/docs/ref/build_unix/flags.html
+++ b/db/docs/ref/build_unix/flags.html
@@ -1,5 +1,5 @@
<!--$Id: flags.so,v 10.12 2003/11/08 19:17:42 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,6 +57,6 @@ prompt: ../dist/configure</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8e697e27d..e3ef10d4f 100644
--- a/db/docs/ref/build_unix/freebsd.html
+++ b/db/docs/ref/build_unix/freebsd.html
@@ -1,5 +1,5 @@
<!--$Id: freebsd.so,v 11.18 2003/04/01 17:21:45 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ files should be placed on NFS-mounted filesystems on these systems.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7f14b8718..aa6a78cda 100644
--- a/db/docs/ref/build_unix/hpux.html
+++ b/db/docs/ref/build_unix/hpux.html
@@ -1,5 +1,5 @@
<!--$Id: hpux.so,v 11.17 2004/08/13 03:38:59 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -91,6 +91,6 @@ include the problematical system include files.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d092b88ae..013bed708 100644
--- a/db/docs/ref/build_unix/install.html
+++ b/db/docs/ref/build_unix/install.html
@@ -1,5 +1,5 @@
<!--$Id: install.so,v 10.17 2003/11/08 19:17:42 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ the install itself:</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0b76cd7b2..86a2f3153 100644
--- a/db/docs/ref/build_unix/intro.html
+++ b/db/docs/ref/build_unix/intro.html
@@ -1,5 +1,5 @@
-<!--$Id: intro.so,v 10.30 2004/02/16 21:05:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.31 2006/08/24 16:32:26 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,16 +49,8 @@ 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 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2ed8d2840..7282bf0a8 100644
--- a/db/docs/ref/build_unix/irix.html
+++ b/db/docs/ref/build_unix/irix.html
@@ -1,5 +1,5 @@
<!--$Id: irix.so,v 11.6 2003/03/24 13:46:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ must compile with the _SGI_MP_SOURCE flag:</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 02f97d1a2..11bf7e4cc 100644
--- a/db/docs/ref/build_unix/linux.html
+++ b/db/docs/ref/build_unix/linux.html
@@ -1,5 +1,5 @@
<!--$Id: linux.so,v 11.19 2004/10/18 20:10:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,6 @@ scheduler for transaction processing workloads.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bc5d68b53..75214049f 100644
--- a/db/docs/ref/build_unix/macosx.html
+++ b/db/docs/ref/build_unix/macosx.html
@@ -1,5 +1,5 @@
-<!--$Id: macosx.so,v 11.12 2004/10/18 20:10:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: macosx.so,v 11.14 2005/10/21 20:16:41 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,9 +25,42 @@ to 10.3 (or your current version of OS X), and reconfigure and rebuild
Berkeley DB from scratch. See the OS X ld(1) and dyld(1) man pages for information
about how OS X handles symbol namespaces, as well as undefined and
multiply-defined symbols.</p>
+<p><li><b>When trying to use system-backed shared memory on OS X I see
+failures about "too many open files".</b>
+<p>The default number of shared memory segments on OS X is too low. To fix
+this problem, edit the file /etc/rc, changing the kern.sysv.shmmax and
+kern.sysv.shmseg values as follows:</p>
+<blockquote><pre>*** /etc/rc.orig Fri Dec 19 09:34:09 2003
+--- /etc/rc Fri Dec 19 09:33:53 2003
+***************
+*** 84,93 ****
+ # System tuning
+ sysctl -w kern.maxvnodes=$(echo $(sysctl -n hw.physmem) '33554432 /
+512 * 1024 +p'|dc)
+! sysctl -w kern.sysv.shmmax=4194304
+ sysctl -w kern.sysv.shmmin=1
+ sysctl -w kern.sysv.shmmni=32
+! sysctl -w kern.sysv.shmseg=8
+ sysctl -w kern.sysv.shmall=1024
+ if [ -f /etc/sysctl-macosxserver.conf ]; then
+ awk '{ if (!-1 && -1) print $1 }' &lt;
+/etc/sysctl-macosxserver.conf | while read
+--- 84,93 ----
+ # System tuning
+ sysctl -w kern.maxvnodes=$(echo $(sysctl -n hw.physmem) '33554432 /
+512 * 1024 +p'|dc)
+! sysctl -w kern.sysv.shmmax=134217728
+ sysctl -w kern.sysv.shmmin=1
+ sysctl -w kern.sysv.shmmni=32
+! sysctl -w kern.sysv.shmseg=32
+ sysctl -w kern.sysv.shmall=1024
+ if [ -f /etc/sysctl-macosxserver.conf ]; then
+ awk '{ if (!-1 && -1) print $1 }' &lt;
+/etc/sysctl-macosxserver.conf | while read</pre></blockquote>
+<p>and then reboot the system.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ec2267c74..fa630f535 100644
--- a/db/docs/ref/build_unix/notes.html
+++ b/db/docs/ref/build_unix/notes.html
@@ -1,5 +1,5 @@
-<!--$Id: notes.so,v 10.52 2004/09/27 15:16:36 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: notes.so,v 10.54 2005/06/16 17:04:04 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,6 +17,13 @@
<p>
<h3 align=center>Architecture independent FAQ</h3>
<ol>
+<p><li><b>I have gcc installed, but configure fails to find it.</b>
+<p>Berkeley DB defaults to using the native C compiler if none is specified.
+That is usually "cc", but some platforms require a different compiler
+to build multithreaded code. To configure Berkeley DB to build with gcc, run
+configure as follows:</p>
+<blockquote><pre>env CC=gcc ../dist/configure ...</pre></blockquote>
+<hr size=1 noshade>
<p><li><b>When compiling with gcc, I get unreferenced symbols; for example
the following:
<blockquote><pre>symbol __muldi3: referenced symbol not found
@@ -149,6 +156,6 @@ DB185LIB=-ldb185</pre></blockquote>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ea1b38028..0be0469d7 100644
--- a/db/docs/ref/build_unix/osf1.html
+++ b/db/docs/ref/build_unix/osf1.html
@@ -1,5 +1,5 @@
<!--$Id: osf1.so,v 11.11 2004/10/18 20:10:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ must compile with the _REENTRANT flag:</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 132cb40c4..52376d1d3 100644
--- a/db/docs/ref/build_unix/qnx.html
+++ b/db/docs/ref/build_unix/qnx.html
@@ -1,5 +1,5 @@
-<!--$Id: qnx.so,v 11.10 2003/03/24 13:46:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: qnx.so,v 11.11 2005/12/20 15:24:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,19 @@
<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.</p>
+<p><li><b>Building Berkeley DB shared libraries fails.</b>
+<p>The <b>/bin/sh</b> utility distributed with some QNX releases drops
+core when running the GNU libtool script (which is used to build Berkeley DB
+shared libraries). There are two workarounds for this problem: First,
+only build static libraries. You can disable building shared libraries
+by specifying the <a name="--disable-shared">--disable-shared</a> configuration flag when
+configuring Berkeley DB.</p>
+<p>Second, build Berkeley DB using an alternate shell. QNX distributions include
+an accessories disk with additional tools. One of the included tools
+is the GNU bash shell, which is able to run the libtool script. To
+build Berkeley DB using an alternate shell, move <b>/bin/sh</b> aside, link
+or copy the alternate shell into that location, configure, build and
+install Berkeley DB, and then replace the original shell utility.</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
@@ -72,6 +85,6 @@ should be used with caution on QNX.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1df28f11e..74667aa7f 100644
--- a/db/docs/ref/build_unix/sco.html
+++ b/db/docs/ref/build_unix/sco.html
@@ -1,5 +1,5 @@
<!--$Id: sco.so,v 11.9 2003/03/24 13:46:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,6 +25,6 @@ libraries.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 fa03b7932..e93ea235c 100644
--- a/db/docs/ref/build_unix/shlib.html
+++ b/db/docs/ref/build_unix/shlib.html
@@ -1,5 +1,5 @@
-<!--$Id: shlib.so,v 10.16 2003/11/08 19:17:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: shlib.so,v 10.18 2004/12/13 06:34:52 gmf Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -99,6 +99,6 @@ 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.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/small.html b/db/docs/ref/build_unix/small.html
index 2c1fc4e26..8b198dc81 100644
--- a/db/docs/ref/build_unix/small.html
+++ b/db/docs/ref/build_unix/small.html
@@ -1,5 +1,5 @@
-<!--$Id: small.so,v 10.5 2004/01/28 17:48:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: small.so,v 10.9 2006/08/24 16:32:26 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -48,14 +48,16 @@ library dramatically and are only useful when debugging applications:</p>
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>The size of the Berkeley DB library varies a lot depending on the compiler,
+machine architecture, and configuration options. As an estimate,
+production Berkeley DB libraries built with current GNU gcc compilers have
+footprints in the range of 400KB to 790KB on 32-bit x86 architectures,
+and in the range of 490KB to 920KB on 64-bit x86 architectures.</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>
+building small memory footprint libraries on other systems, please
+contact Berkeley DB 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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 46c0b8418..1ac5787e8 100644
--- a/db/docs/ref/build_unix/solaris.html
+++ b/db/docs/ref/build_unix/solaris.html
@@ -1,5 +1,5 @@
<!--$Id: solaris.so,v 11.25 2003/03/24 13:46:23 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -111,6 +111,6 @@ include the problematical system include files.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d112baeea..2b94c7579 100644
--- a/db/docs/ref/build_unix/sunos.html
+++ b/db/docs/ref/build_unix/sunos.html
@@ -1,5 +1,5 @@
<!--$Id: sunos.so,v 11.6 2003/03/24 13:46:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ versions of SunOS.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 daebf8c6c..1e1ca11e5 100644
--- a/db/docs/ref/build_unix/test.html
+++ b/db/docs/ref/build_unix/test.html
@@ -1,5 +1,5 @@
<!--$Id: test.so,v 10.32 2003/11/08 19:17:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ command:</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 84b2dc795..74416bb53 100644
--- a/db/docs/ref/build_unix/ultrix.html
+++ b/db/docs/ref/build_unix/ultrix.html
@@ -1,5 +1,5 @@
<!--$Id: ultrix.so,v 11.6 2003/03/24 13:46:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ they exist, because they are known to not work correctly.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a7bfe0fca..af310f878 100644
--- a/db/docs/ref/build_vxworks/faq.html
+++ b/db/docs/ref/build_vxworks/faq.html
@@ -1,5 +1,5 @@
<!--$Id: faq.so,v 1.30 2004/08/17 13:45:35 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -135,6 +135,6 @@ may leak their underlying system resources. Therefore, the
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bec44b47a..14605a59c 100644
--- a/db/docs/ref/build_vxworks/intro.html
+++ b/db/docs/ref/build_vxworks/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.24 2004/10/08 17:16:54 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -98,6 +98,6 @@ 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/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2d80a4152..079738ca1 100644
--- a/db/docs/ref/build_vxworks/introae.html
+++ b/db/docs/ref/build_vxworks/introae.html
@@ -1,5 +1,5 @@
<!--$Id: introae.so,v 1.8 2002/10/01 19:38:33 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -129,6 +129,6 @@ 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_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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e2c06a973..fd925b7a0 100644
--- a/db/docs/ref/build_vxworks/notes.html
+++ b/db/docs/ref/build_vxworks/notes.html
@@ -1,5 +1,5 @@
<!--$Id: notes.so,v 1.20 2004/10/08 17:16:54 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -64,6 +64,6 @@ footprint, you should move <b>db_config.h</b> aside and copy
the appropriate small workspace file via Tornado and build as usual.</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/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0bebd855c..76a7ff866 100644
--- a/db/docs/ref/build_win/faq.html
+++ b/db/docs/ref/build_win/faq.html
@@ -1,5 +1,5 @@
-<!--$Id: faq.so,v 10.30 2003/07/23 21:35:38 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.36 2006/04/24 14:21:33 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,14 +29,14 @@ click on db_load -&gt; Properties and change "Configuration Type" from
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/libdb43d.lib library (this .lib file
-is actually a stub for libdb43d.DLL). To check this
+build_windows\Debug\libdb45d.lib library (this .lib file
+is actually a stub for libdb45d.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/libdb43sd.lib; then, you will want
+build_windows\Debug\libdb45sd.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
@@ -52,29 +52,15 @@ 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 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 390a7fd0c..8a85c2038 100644
--- a/db/docs/ref/build_win/intro.html
+++ b/db/docs/ref/build_win/intro.html
@@ -1,10 +1,10 @@
-<!--"@(#)intro.so 10.26 (Sleepycat) 11/18/99"-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.79 2006/01/27 20:01:45 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Building for Win32</title>
+<title>Berkeley DB Reference Guide: Building for Windows</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -12,156 +12,191 @@
<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/unicode.html"><img src="../../images/next.gif" alt="Next"></a>
+<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>
-<h3 align=center>Building for Win32</h3>
-<p>The <b>build_win32</b> directory in the Berkeley DB distribution contains
+<h3 align=center>Building for Windows</h3>
+<p>This page contains general instructions on building Berkeley DB for
+specific windows platforms using specific compilers. The
+<a href="../../ref/build_win/faq.html">Windows FAQ</a> also
+contains helpful information.</p>
+<p>The <b>build_windows</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++ 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/XP, Windows/2000, Windows/NT, Windows/98 and Windows/95.</p>
-<p>The <b>build_win64</b> directory contains project files for Microsoft
-Visual C++ to target Windows on 64-bit CPUs:</p>
-<h3>Building Berkeley DB with Visual C++ .NET for Win32</h3>
+<p>These project files can be used to build Berkeley DB for the following platforms:
+Windows NT/2K/XP/2003, Windows 98/ME and 64-bit Windows XP/2003.</p>
+<h3>Building Berkeley DB for Windows NT/2K/XP/2003</h3>
+<h4>Visual C++ .NET 2005</h4>
+<ol>
+<p><li>Choose <i>File -&gt; Open -&gt; Project/Solution...</i>.
+In the <b>build_windows</b>, select <b>Berkeley_DB</b> and click
+Open.
+<p><li>You will be prompted to convert the project files to current Visual C++
+format. Select "Yes to All".
+<p><li>Choose the project configuration from the drop-down menu on the tool
+bar (usually Debug or Release for Win32).
+<p><li>To build, right-click on the build_all target and select Build.
+</ol>
+<h4>Visual C++ .NET or Visual C++ .NET 2003</h4>
+<p>This is very similar to the building with Visual Studio 2005, but some
+menu options have been rearranged:</p>
<ol>
<p><li>Choose <i>File -&gt; Open Solution</i>. Look in the
-<b>build_win32</b> directory for compatible workspace files, select
+<b>build_windows</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>You will be prompted to convert the project files to current Visual C++
+format. Select "Yes to All".
<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>).
+tool bar (Debug or Release).
+<p><li>To build, right-click on build_all and select Build.
</ol>
-<h3>Building Berkeley DB with Visual C++ 6.0 for Win32</h3>
+<h4>Visual C++ 6.0</h4>
<ol>
<p><li>Choose <i>File -&gt; Open Workspace</i>. Look in the
-<b>build_win32</b> directory for Workspaces, select
+<b>build_windows</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>).
+to the build_all project (Debug or Release). Then click OK.
+<p><li>To build, press F7.
</ol>
-<p>When building your application, you should normally use compile
-options "Debug Multithreaded DLL" and link against
-<b>build_win32/Debug/libdb43d.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/libdb43sd.lib</b>.
-You can also build using a release version of the libraries and tools,
+<h4>Build results</h4>
+<p>The results of your build will be placed in a subdirectory of
+<b>build_windows</b> named after the configuration you chose (for
+examples, <b>build_windows\Release</b> or
+<b>build_windows\Debug</b>).</p>
+<p>When building your application during development, you should normally
+use compile options "Debug Multithreaded DLL" and link against
+<b>build_windows\Debug\libdb45d.lib</b>. You can
+also build using a release version of the Berkeley DB libraries and tools,
which will be placed in
-<b>build_win32/Release/libdb43.lib</b>. The
-static version will be in
-<b>build_win32/Release_static/libdb43s.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 Version and Microsoft Visual C++
-.NET, Standard Version.</p>
+<b>build_windows\Release\libdb45.lib</b>. When
+linking against the release build, you should compile your code with
+the "Release Multithreaded DLL" compile option. You will also need to
+add the <b>build_windows</b> directory to the list of include
+directories of your application's project, or copy the Berkeley DB include
+files to another location.</p>
+<h3>Building Berkeley DB for Windows 98/ME</h3>
+<p>By default on Windows, Berkeley DB supports internationalized filenames by
+treating all directory paths and filenames passed to Berkeley DB methods as
+UTF-8 encoded strings. All paths are internally converted to wide
+character strings and passed to the wide character variants of Windows
+system calls.</p>
+<p>This allows applications to create and open databases with names that
+cannot be represented with ASCII names while maintaining compatibility
+with applications that work purely with ASCII paths.</p>
+<p>Windows 98 and ME do not support Unicode paths directly. To build for
+those versions of Windows, either follow the above instructions,
+choosing the "Debug ASCII" or "Release ASCII" build targets, or follow
+the instructions at
+<a href="http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx">Microsoft's web site</a>.</p>
+<p>The ASCII builds will also work on Windows NT/2K/XP and 2003, but will
+not translate paths to wide character strings.</p>
<h3>Building Berkeley DB for 64-bit Windows</h3>
-<p>You can follow the same steps on either the Itanium itself or to
-cross-compile on an x86 box.</p>
+<p>The following procedure can be used on either to build natively on a
+64-bit system or to cross-compile from a 32-bit system.</p>
+<h4>x64 build with Visual Studio 2005</h4>
+<ol>
+<p><li>Choose <i>File -&gt; Open -&gt; Project/Solution...</i>.
+In the <b>build_windows</b>, select <b>Berkeley_DB</b> and click
+Open.
+<p><li>You will be prompted to convert the project files to current Visual C++
+format. Select "Yes to All".
+<p><li>Choose the project configuration from the drop-down menu on the tool
+bar ("Debug AMD64", "Release AMD64"). Change the CPU type from
+Win32 to x64.
+<p><li>Right-click on the build_all target and select Build.
+</ol>
+<h4>64-bit build with Visual Studio .NET 2003 or earlier</h4>
<p>You will need latest Platform SDK from Microsoft, available from
<a href="http://www.microsoft.com/msdownload/platformsdk/sdkupdate/">Microsoft's web site</a>. You only need the "Core SDK" from there.</p>
<p>Once that is installed, you should have an entry in your Start Menu
called <i>Microsoft Platform SDK (date) -&gt; Open Build
-Environment Window -&gt; Windows Server 2003 64-bit Build Environment
--&gt; Set Win Svr 2003 Build Env (Debug)</i>. Selecting that will open
-a command window with the environment set up for Itanium development.</p>
-<p>Then, in the <b>build_win64</b> directory in the Berkeley DB distribution,
-run:
-<blockquote><pre>msdev /useenv BerkeleyDB.dsw /make "build_all - Debug"</pre></blockquote>
-You should now have Itanium binaries in the "Debug" directory.</p>
+Environment Window -&gt; Windows Server 2003 64-bit Build
+Environment -&gt; Set Win Svr 2003 x64 Build Env (Debug)</i>.
+Selecting that will open a command window with the environment set up
+for 64-bit Windows development targeting AMD64-compatible CPUs.</p>
+<p>Depending on how your computer is configured, you may need to run the
+<b>vcvars32.bat</b> or script to set up the environment to build
+from the command line with Visual Studio.</p>
+<p>Then, in the <b>build_windows</b> directory in the Berkeley DB
+distribution, run this for Visual Studio .NET:
+<blockquote><pre>devenv Berkeley_DB.dsw</pre></blockquote>
+Choose "Yes To All" in the dialog box that appears, then close Visual
+Studio, then run:
+<blockquote><pre>devenv Berkeley_DB.sln /build "Debug AMD64" /project "build_all" /useenv</pre></blockquote>
+For Visual Studio 6, just run this instead:
+<blockquote><pre>msdev Berkeley_DB.dsw /make "build_all - Debug AMD64" /useenv</pre></blockquote>
+You should now have AMD64 binaries in the "Debug_AMD64" directory.</p>
<p>To build a release, open the "Retail" window instead of the "Debug"
-window, and run:
-<blockquote><pre>msdev /useenv BerkeleyDB.dsw /make "build_all - Release"</pre></blockquote>
-There may be some warnings during build, but we don't believe any of
-them are real bugs.</p>
+window, and change Debug to Release in the above commands. To build
+for Itanium, change AMD64 and x64 to IA64.</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>
+<p>C++ support is built automatically on Windows.</p>
<h3>Building the Java API</h3>
<p>Java support is not built automatically. The following instructions
assume that you have installed the Sun Java Development Kit in
-<b>d:/java</b>. Of course, if you installed elsewhere or have
+<b>d:\java</b>. Of course, if you installed elsewhere or have
different Java software, you will need to adjust the pathnames
accordingly.</p>
-<h4>Building Java with Visual C++ .NET</h4>
+<h4>Building Java with Visual C++ .NET or above</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
+directories for" pull-down, select "Include files". Add the full
+pathnames for the <b>d:\java\include</b> and
+<b>d:\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
+directories for" pull-down, select "Executable files". Add the full
+pathname for the <b>d:\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.
+files in the <b>build_windows\Release</b> or
+<b>build_windows\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,
+-&gt; Directories</i>. Under the "Show directories for" pull-down,
select "Include files". Add the full pathnames for the
-<b>java/include</b> and <b>java/include/win32</b> directories.
+<b>d:\java\include</b> and <b>d:\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
+pull-down, select "Executable files". Add the full pathname for the
+<b>d:\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_java43.dll</i>. This builds the Java support
+libdb_java45.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>
+<b>build_windows\Release</b> or <b>build_windows\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>
+variable <b>PATH</b> to include the <b>build_windows\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>
+<blockquote><pre>java 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
@@ -171,7 +206,7 @@ DLL.</p>
<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>
+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 found that the binary
release of Tcl can be used with the Release configuration of Berkeley DB,
@@ -180,17 +215,17 @@ 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>
+<h4>Building Tcl with Visual C++ .NET or above</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
+directories for" pull-down, select "Include files". Add the full
+pathname for <b>d:\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
+directories for" pull-down, select "Library files". Add the full
+pathname for the <b>d:\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).
@@ -198,8 +233,8 @@ library is named in your distribution).
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_tcl43.dll</b>.
+<b>build_windows\Debug\libdb_tcl45d.dll</b> or
+<b>build_windows\Release\libdb_tcl45.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
@@ -212,24 +247,24 @@ 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,
+-&gt; Directories</i>. Under the "Show directories for" pull-down,
select "Include files". Add the full pathname for
-<b>tcl/include</b>, then click OK. This is the directory that
+<b>d:\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
+pull-down, select "Library files". Add the full pathname for the
+<b>d:\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_tcl43.dll</i>. This builds the Tcl support
+libdb_tcl45.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_tcl43.dll</b>.
+<b>build_windows\Debug\libdb_tcl45d.dll</b> or
+<b>build_windows\Release\libdb_tcl45.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
@@ -242,8 +277,8 @@ 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
+<b>build_windows\Release</b> subdirectory, or
+<b>build_windows\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
@@ -253,8 +288,8 @@ 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/unicode.html"><img src="../../images/next.gif" alt="Next"></a>
+<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5d4a4b363..c85912fa1 100644
--- a/db/docs/ref/build_win/notes.html
+++ b/db/docs/ref/build_win/notes.html
@@ -1,5 +1,5 @@
-<!--$Id: notes.so,v 10.27 2004/01/28 00:03:04 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: notes.so,v 10.32 2006/09/15 18:54:47 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,45 +17,31 @@
<p>
<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
-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.</p>
-<p>Practically speaking, however, these efforts would be largely meaningless
-on a FAT file system, which only has a "readable" and "writable" flag,
-applying to all users.</p>
-<p><li>On Windows, Berkeley DB supports internationalized filenames by treating all
-directory paths and filenames passed to Berkeley DB methods as UTF-8 strings.
-All paths are internally converted to wide character strings and passed
-to the wide character variants of Windows system calls.
-<p>This allows applications to create and open databases with names that
-cannot be represented with ASCII names while maintaining compatibility
-with applications that work purely with ASCII paths.</p>
-<p>Applications that operate on wide character strings can use the Windows
-function WideCharToMultiByte with the code page CP_UTF8 to convert paths
-to the form expected by Berkeley DB. Internally, Berkeley DB calls MultiByteToWideChar
-on paths before calling Windows functions.</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.
-<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><li>Berkeley DB does not support the Windows/95 platform.
+<p><li>Berkeley DB does not support replication on the Windows/98 or Windows/ME
+platforms.
+<p><li>On Windows/98 and Windows/ME, 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 not specifying 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.
+<p><li>On Windows/98 and Windows/ME, removing or renaming a file using the
+<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/db_remove.html">DB-&gt;remove</a> or
+<a href="../../api_c/db_rename.html">DB-&gt;rename</a> methods may fail if another thread of control has the file
+open for any reason, including checkpointing or flushing pages from the
+underlying shared database environment cache. There is no workaround
+for this problem other than re-attempting the operation after the other
+thread of control has closed its Berkeley DB handles.
+<p><li>On Windows, 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>
+environments, applications should remove the existing environment and
+then create a new database environment.</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
@@ -65,9 +51,25 @@ 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.
+<p><li>Applications that operate on wide character strings can use the
+Windows function WideCharToMultiByte with the code page CP_UTF8 to
+convert paths to the form expected by Berkeley DB. Internally, Berkeley DB calls
+MultiByteToWideChar on paths before calling Windows functions.
+<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
+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.</p>
+<p>Practically speaking, however, these efforts would be largely meaningless
+on a FAT file system, which only has a "readable" and "writable" flag,
+applying to all users.</p>
</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_win/small.html b/db/docs/ref/build_win/small.html
index 8c5e1352b..f5de75f7d 100644
--- a/db/docs/ref/build_win/small.html
+++ b/db/docs/ref/build_win/small.html
@@ -1,5 +1,5 @@
-<!--$Id: small.so,v 10.2 2004/10/05 18:00:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: small.so,v 10.5 2006/08/24 16:32:27 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,7 +11,7 @@
<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/unicode.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 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</h3>
@@ -20,7 +20,7 @@ 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
+<p>In general on Windows 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
@@ -32,14 +32,16 @@ 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>The project supports two configurations - <i>Release</i> and
+<i>Debug</i>. During a build (F7), static libraries are created in
+<b>Release</b> or <b>Debug</b>, respectively. The library name is
+<b>libdb_small45sd.lib</b> for the debug build, or
+<b>libdb_small45s.lib</b> for the release build.</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/unicode.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>
+building small memory footprint libraries on other systems, please
+contact Berkeley DB 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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8120bf580..85ba894e2 100644
--- a/db/docs/ref/build_win/test.html
+++ b/db/docs/ref/build_win/test.html
@@ -1,5 +1,5 @@
-<!--$Id: test.so,v 10.43 2003/11/27 18:25:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: test.so,v 10.45 2005/12/01 03:18:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -16,7 +16,7 @@
</td></tr></table>
<p>
<h3 align=center>Running the test suite under Windows</h3>
-<p>To build the test suite on Win32 platforms, you will need to configure
+<p>To build the test suite on Windows 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>
@@ -48,20 +48,20 @@ 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>
+installed in <b>d:\tcl</b>, this line should be the following:</p>
+<blockquote><pre>set tclsh_path d:\tcl\bin\tclsh84g.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>
+<blockquote><pre>set tclsh_path "c:\Program Files\tcl\bin\tclsh84g.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>
+<blockquote><pre>SET PATH=%PATH%;c:\db\build_windows\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
+<p><li>cd build_windows
+<p><li>run <b>d:\tcl\bin\tclsh84g.exe</b>, or the equivalent name of
the Tcl shell for your system.
<p>You should get a "%" prompt.</p>
<p><li>% source ../test/test.tcl
@@ -72,6 +72,6 @@ the Tcl shell for your system.
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/cam/app.html b/db/docs/ref/cam/app.html
index 3720a5e4a..c74b3643a 100644
--- a/db/docs/ref/cam/app.html
+++ b/db/docs/ref/cam/app.html
@@ -1,5 +1,5 @@
-<!--$Id: app.so,v 10.4 2004/10/13 19:38:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: app.so,v 10.9 2005/12/01 03:18:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,121 +11,209 @@
<body bgcolor=white>
<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 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/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../cam/fail.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>
<h3 align=center>Architecting Data Store and Concurrent Data Store applications</h3>
-<p>When building Data Store and Concurrent Data Store applications, there
-are two special issues to consider whenever any thread of control exits
-for any reason with a Berkeley DB database or database environment open.</p>
-<p>First, unexpected application or system failure may result in lost data,
-corruption or inconsistencies in Berkeley DB databases. When a thread of
-control exits while holding Berkeley DB resources, all databases (modified
-since the database was last flushed to disk), should be either:</p>
-<p><ul type=disc>
-<li>removed and re-created,
-<li>removed and restored from the last known good backup,
-<li>verified using the <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method or <a href="../../utility/db_verify.html">db_verify</a> utility. If
-the database does not verify cleanly, the contents may be salvaged using
-the <b>-R</b> and <b>-r</b> options of the <a href="../../utility/db_dump.html">db_dump</a>
-utility.
-</ul>
-<p>Applications where this is unacceptable should consider the Berkeley DB Transactional Data Store
-product, which offers standard transactional guarantees such as
-recoverability after failure.</p>
-<p>Second, unexpected application or system failure requires that any
-persistent database environment (that is, any database environment not
-created using the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag), be removed to recover the
-Berkeley DB resources and release any locks or mutexes that may have been held
-to avoid starvation as the remaining threads of control block behind the
-failed thread's locks or mutexes.</p>
-<p>The Berkeley DB library cannot determine when to remove and re-create a
-database environment; the application must make that decision.
-Furthermore, database environment removal must be single-threaded; that
-is, one thread of control or process must remove and re-create the
-database environment before any other thread of control or process
-attempts to join the Berkeley DB environment.</p>
-<p>There are two approaches to handling this problem:</p>
-<dl compact>
-<dt>The hard way:<dd>Applications can track their own state carefully enough that they know
-when the database environment needs to be removed and re-created.
-Specifically, the rule to use is that any persistent database
-environment must be removed 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).
-<dt>The easy way:<dd>It is almost invariably simpler to remove and re-create the database
-environment each time a thread of control accessing a database
-environment fails for any reason. This requires the application detect
-application or system failure, of course, and remove and re-create the
-database environment on application, when appropriate.
-</dl>
-<p>There are two common ways to build Data Store and Concurrent Data Store
-applications. The most common way is as a single, usually
-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,
-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 <a href="../../api_c/env_class.html">DB_ENV</a> and <a href="../../api_c/db_class.html">DB</a> handles. In this model,
+<p>When building Data Store and Concurrent Data Store applications, the
+architecture decisions involve application startup (cleaning up any
+existing databases, the removal of any existing database environment
+and creation of a new environment), and handling system or application
+failure. "Cleaning up" databases involves removal and re-creation
+of the database, restoration from an archival copy and/or verification
+and optional salvage, as described in <a href="fail.html">Handling failure
+in Data Store and Concurrent Data Store applications</a>.</p>
+<p>Data Store or Concurrent Data Store applications without database
+environments are single process, by definition. These applications
+should start up, re-create, restore, or verify and optionally salvage
+their databases and run until eventual exit or application or system
+failure. After system or application failure, that process can simply
+repeat this procedure. This document will not discuss the case of these
+applications further.</p>
+<p>Otherwise, the first question of Data Store and Concurrent Data Store
+architecture is the cleaning up existing databases and the removal of
+existing database environments, and the subsequent creation of a new
+environment. For obvious reasons, the application must serialize the
+re-creation, restoration, or verification and optional salvage of its
+databases. Further, environment removal and creation must be
+single-threaded, that is, one thread of control (where a thread of
+control is either a true thread or a process) must remove and re-create
+the environment before any other thread of control can use the new
+environment. It may simplify matters that Berkeley DB serializes creation of
+the environment, so multiple threads of control attempting to create a
+environment will serialize behind a single creating thread.</p>
+<p>Removing a database environment will first mark the environment as
+"failed", causing any threads of control still running in the
+environment to fail and return to the application. This feature allows
+applications to remove environments without concern for threads of
+control that might still be running in the removed environment.</p>
+<p>One consideration in removing a database environment which may be in use
+by another thread, is the type of mutex being used by the Berkeley DB library.
+In the case of database environment failure when using test-and-set
+mutexes, threads of control waiting on a mutex when the environment is
+marked "failed" will quickly notice the failure and will return an error
+from the Berkeley DB API. In the case of environment failure when using
+blocking mutexes, where the underlying system mutex implementation does
+not unblock mutex waiters after the thread of control holding the mutex
+dies, threads waiting on a mutex when an environment is recovered might
+hang forever. Applications blocked on events (for example, an
+application blocked on a network socket or a GUI event) may also fail
+to notice environment recovery within a reasonable amount of time.
+Systems with such mutex implementations are rare, but do exist;
+applications on such systems should use an application architecture
+where the thread recovering the database environment can explicitly
+terminate any process using the failed environment, or configure Berkeley DB
+for test-and-set mutexes, or incorporate some form of long-running timer
+or watchdog process to wake or kill blocked processes should they block
+for too long.</p>
+<p>Regardless, it makes little sense for multiple threads of control to
+simultaneously attempt to remove and re-create a environment, since the
+last one to run will remove all environments created by the threads of
+control that ran before it. However, for some few applications, it may
+make sense for applications to have a single thread of control that
+checks the existing databases and removes the environment, after which
+the application launches a number of processes, any of which are able
+to create the environment.</p>
+<p>With respect to cleaning up existing databases, the database environment
+must be removed before the databases are cleaned up. Removing the
+environment causes any Berkeley DB library calls made by threads of control
+running in the failed environment to return failure to the application.
+Removing the database environment first ensures the threads of control
+in the old environment do not race with the threads of control cleaning
+up the databases, possibly overwriting them after the cleanup has
+finished. Where the application architecture and system permit, many
+applications kill all threads of control running in the failed database
+environment before removing the failed database environment, on general
+principles as well as to minimize overall system resource usage. It
+does not matter if the new environment is created before or after the
+databases are cleaned up.</p>
+<p>After having dealt with database and database environment recovery after
+failure, the next issue to manage is application failure. As described
+in <a href="fail.html">Handling failure in Data Store and Concurrent Data
+Store applications</a>, when a thread of control in a Data Store or
+Concurrent Data Store application fails, it may exit holding data
+structure mutexes or logical database locks. These mutexes and locks
+must be released to avoid the remaining threads of control hanging
+behind the failed thread of control's mutexes or locks.</p>
+<p>There are three common ways to architect Berkeley DB Data Store and Concurrent
+Data Store applications. The one chosen is usually based on whether or
+not the application is comprised of a single process or group of
+processes descended from a single process (for example, a server started
+when the system first boots), or if the application is comprised of
+unrelated processes (for example, processes started by web connections
+or users logging into the system).</p>
+<ol>
+<p><li>The first way to architect Data Store and Concurrent Data Store
+applications is as a single process (the process may or may not be
+multithreaded.)
+<p>When this process starts, it removes any existing database environment
+and creates a new environment. It then cleans up the databases and
+opens those databases in the environment. The application can
+subsequently create new threads of control as it chooses. Those threads
+of control can either share already open Berkeley DB <a href="../../api_c/env_class.html">DB_ENV</a> and
+<a href="../../api_c/db_class.html">DB</a> handles, or create their own. In this architecture,
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, and closed after all threads but one have exited. The last
-thread of 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 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 database environment removal must be single-threaded.
-The first thread of control to access the environment must remove any
-previously existing environment and re-create the environment, and no
-other thread should attempt to access the environment until the removal
-is complete. (Note this ordering requirement does not apply to
-environment creation without removal. 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.)</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
-cleanly discarding those resources, removing the database environment
-is usually necessary. Before removing the database environment, 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, the database environment can be removed and
-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 removes and re-creates the Berkeley DB environment, verifies, rebuilds
-or removes the databases, and 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, removes the database environment, verifies,
-rebuilds or removes the databases, 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 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 removes and re-creates the Berkeley DB environment,
-verifies, rebuilds or removes the databases, 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 new 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,
-removes and re-creates the database environment, verifies, rebuilds or
-removes the databases, 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 because there is no recourse
-if it fails.</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/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+thread of control to exit closes the databases and the database
+environment.</p>
+<p>This architecture is simplest to implement because thread serialization
+is easy and failure detection does not require monitoring multiple
+processes.</p>
+<p>If the application's thread model allows the process to continue after
+thread failure, the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method can be used to determine if
+the database environment is usable after the failure. If the
+application does not call <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>, or
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the application
+must behave as if there has been a system failure, removing the
+environment and creating a new environment, and cleaning up any
+databases it wants to continue to use. Once these actions have been
+taken, other threads of control can continue (as long as all existing
+Berkeley DB handles are first discarded), or restarted.</p>
+<p><li>The second way to architect Data Store and Concurrent Data Store
+applications is as a group of related processes (the processes may or
+may not be multithreaded).
+<p>This architecture requires the order in which threads of control are
+created be controlled to serialize database environment removal and
+creation, and database cleanup.</p>
+<p>In addition, this architecture requires that threads of control be
+monitored. If any thread of control exits with open Berkeley DB handles, the
+application may call the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method to determine if the
+database environment is usable after the exit. If the application does
+not call <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>, or <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns
+<a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the application must behave as if there has been
+a system failure, removing the environment and creating a new
+environment, and cleaning up any databases it wants to continue to use.
+Once these actions have been taken, other threads of control can
+continue (as long as all existing Berkeley DB handles are first discarded),
+or restarted.</p>
+<p>The easiest way to structure groups of related processes is to first
+create a single "watcher" process (often a script) that starts when the
+system first boots, removes and creates the database environment, cleans
+up the databases and then creates the processes or threads that will
+actually perform work. The initial thread has no further
+responsibilities other than to wait on the threads of control it has
+started, to ensure none of them unexpectedly exit. If a thread of
+control exits, the watcher process optionally calls the
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method. If the application does not call
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> or if <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns
+<a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the environment can no longer be used, the
+watcher kills all of the threads of control using the failed
+environment, cleans up, and starts new threads of control to perform
+work.</p>
+<p><li>The third way to architect Data Store and Concurrent Data Store
+applications is as a group of unrelated processes (the processes may or
+may not be multithreaded). This is the most difficult architecture to
+implement because of the level of difficulty in some systems of finding
+and monitoring unrelated processes.
+<p>One solution is to log a thread of control ID when a new Berkeley DB handle
+is opened. For example, an initial "watcher" process could open/create
+the database environment, clean up the databases and then create a
+sentinel file. Any "worker" process wanting to use the environment
+would check for the sentinel file. If the sentinel file does not exist,
+the worker would fail or wait for the sentinel file to be created. Once
+the sentinel file exists, the worker would register its process ID with
+the watcher (via shared memory, IPC or some other registry mechanism),
+and then the worker would open its <a href="../../api_c/env_class.html">DB_ENV</a> handles and proceed.
+When the worker finishes using the environment, it would unregister its
+process ID with the watcher. The watcher periodically checks to ensure
+that no worker has failed while using the environment. If a worker
+fails while using the environment, the watcher removes the sentinel
+file, kills all of the workers currently using the environment, cleans
+up the environment and databases, and finally creates a new sentinel
+file.</p>
+<p>The weakness of this approach is that, on some systems, it is difficult
+to determine if an unrelated process is still running. For example,
+POSIX systems generally disallow sending signals to unrelated processes.
+The trick to monitoring unrelated processes is to find a system resource
+held by the process that will be modified if the process dies. On POSIX
+systems, flock- or fcntl-style locking will work, as will LockFile on
+Windows systems. Other systems may have to use other process-related
+information such as file reference counts or modification times. In the
+worst case, threads of control can be required to periodically
+re-register with the watcher process: if the watcher has not heard from
+a thread of control in a specified period of time, the watcher will take
+action, cleaning up the environment.</p>
+<p>If it is not practical to monitor the processes sharing a database
+environment, it may be possible to monitor the environment to detect if
+a thread of control has failed holding open Berkeley DB handles. This would
+be done by having a "watcher" process periodically call the
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method. If <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns
+<a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the watcher would then take action, cleaning up
+the environment.</p>
+<p>The weakness of this approach is that all threads of control using the
+environment must specify an "ID" function and an "is-alive" function
+using the <a href="../../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a> method. (In other words, the Berkeley DB
+library must be able to assign a unique ID to each thread of control,
+and additionally determine if the thread of control is still running.
+It can be difficult to portably provide that information in applications
+using a variety of different programming languages and running on a
+variety of different platforms.)</p> </ol>
+<p>Obviously, when implementing a process to monitor other threads of
+control, it is important the watcher process' code be as simple and
+well-tested as possible, because the application may hang if it fails.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../cam/fail.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/cam/fail.html b/db/docs/ref/cam/fail.html
new file mode 100644
index 000000000..8e8f9f261
--- /dev/null
+++ b/db/docs/ref/cam/fail.html
@@ -0,0 +1,84 @@
+<!--$Id: fail.so,v 10.2 2005/10/19 21:10:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Handling failure in Data Store and Concurrent Data Store applications</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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 Concurrent 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="../cam/app.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Handling failure in Data Store and Concurrent Data Store applications</h3>
+<p>When building Data Store and Concurrent Data Store applications, there
+are design issues to consider whenever a thread of control with open
+Berkeley DB handles fails for any reason (where a thread of control may be
+either a true thread or a process).</p>
+<p>The simplest case is handling system failure for any Data Store or
+Concurrent Data Store application. In the case of system failure, it
+doesn't matter if the application has opened a database environment or
+is just using standalone databases: if the system fails, after the
+application has modified a database and has not subsequently flushed the
+database to stable storage (by calling either the <a href="../../api_c/db_close.html">DB-&gt;close</a>,
+<a href="../../api_c/db_sync.html">DB-&gt;sync</a> or <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> methods), the database may be left in a
+corrupted state. In this case, before accessing the database again, the
+database should either be:</p>
+<p><ul type=disc>
+<li>removed and re-created,
+<li>removed and restored from the last known good backup, or
+<li>verified using the <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method or <a href="../../utility/db_verify.html">db_verify</a> utility. If
+the database does not verify cleanly, the contents may be salvaged using
+the <b>-R</b> and <b>-r</b> options of the <a href="../../utility/db_dump.html">db_dump</a>
+utility.
+</ul>
+<p>Applications where the potential for data loss is unacceptable should
+consider the Berkeley DB Transactional Data Store product, which offers standard transactional
+durability guarantees, including recoverability after failure.</p>
+<p>Additionally, system failure requires that any persistent database
+environment (that is, any database environment not created using the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag), be removed. Database environments may be
+removed using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method. If the persistent database
+environment was backed by the filesystem (that is, the environment was
+not created using the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag), the database
+environment may also be safely removed by deleting the environment's
+files with standard system utilities.</p>
+<p>The second case is application failure for a Data Store application,
+with or without a database environment, or application failure for a
+Concurrent Data Store application without a database environment: as in
+the case of system failure, if any thread of control fails, after the
+application has modified a database and has not subsequently flushed the
+database to stable storage, the database may be left in a corrupted
+state. In this case, the database should be handled as described
+previously in the system failure case.</p>
+<p>The third case is application failure for a Concurrent Data Store
+application with a database environment. There are resources maintained
+in database environments that may be left locked if a thread of control
+exits without first closing all open Berkeley DB handles. Concurrent Data
+Store applications with database environments have an additional option
+for handling the unexpected exit of a thread of control, the
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method.</p>
+<p>The <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method will return <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> if the
+database environment is unusable as a result of the thread of control
+failure. (If a data structure mutex or a database write lock is left
+held by thread of control failure, the application should not continue
+to use the database environment, as subsequent use of the environment
+is likely to result in threads of control convoying behind the held
+locks.) The <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> call will release any database read
+locks that have been left held by the exit of a thread of control. In
+this case, the application can continue to use the database
+environment.</p>
+<p>A Concurrent Data Store application recovering from a thread of control
+failure should call <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>, and, if it returns success,
+the application can continue. If <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns
+<a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the application should proceed as described for
+the case of system failure.</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="../cam/app.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/cam/intro.html b/db/docs/ref/cam/intro.html
index fab7ce578..cc24932cd 100644
--- a/db/docs/ref/cam/intro.html
+++ b/db/docs/ref/cam/intro.html
@@ -1,5 +1,5 @@
-<!--$Id: intro.so,v 10.29 2004/10/13 13:40:59 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.32 2006/08/24 17:47:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -12,7 +12,7 @@
<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 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="../cam/app.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="../cam/fail.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<h3 align=center>Berkeley DB Concurrent Data Store applications</h3>
@@ -71,38 +71,51 @@ a write, either using the write cursor or directly using the
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>By default, Berkeley DB Concurrent Data Store does locking on a per-database basis. For this
+reason, using cursors to access 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
+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.</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>
+or having to run a deadlock detector. Berkeley DB has no direct knowledge of
+which cursors belong to which threads, so some care must be taken to
+ensure that applications do not inadvertently block themselves, causing
+the application to hang and be unable to proceed.</p>
+<p>As a consequence of the Berkeley DB Concurrent Data Store locking model, the following sequences
+of operations will cause a thread to block itself indefinitely:</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 write cursor while a write cursor is already being
+<p><li>Attempting to open a write cursor while another 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 --
+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,
-using cursors to access 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 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>
-<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="../cam/app.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>If the application needs to open multiple cursors in a single thread to
+perform an operation, it can indicate to Berkeley DB that the cursor locks
+should not block each other by creating a Berkeley DB Concurrent Data Store <b>group</b>, using
+<a href="../../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a>. This creates a locker ID that is shared by all
+cursors opened in the group.</p>
+<p>Berkeley DB Concurrent Data Store groups use a <a href="../../api_c/txn_class.html">DB_TXN</a> handle to indicate the shared locker
+ID to Berkeley DB calls, and call <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a> to end the group. This
+is a convenient way to pass the locked ID to the calls where it is
+needed, but should not be confused with the real transactional semantics
+provided by Berkeley DB Transactional Data Store. In particular, Berkeley DB Concurrent Data Store groups do not provide any
+abort or recovery facilities, and have no impact on durability of
+operations.</p>
+<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="../cam/fail.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/common.html b/db/docs/ref/debug/common.html
index 8e6634671..9e2928e05 100644
--- a/db/docs/ref/debug/common.html
+++ b/db/docs/ref/debug/common.html
@@ -1,5 +1,5 @@
-<!--$Id: common.so,v 10.27 2004/04/16 17:27:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: common.so,v 10.28 2005/06/16 17:45:07 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -108,8 +108,8 @@ handling</a> section of the Reference Guide for more information.</p>
<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
+<p>The application may have removed all of its log files without resetting
+the database log sequence numbers (LSNs). 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>
@@ -119,8 +119,8 @@ 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>
+be moved to another environment without first resetting the database log
+sequence numbers.</p>
<hr size=1 noshade>
<p><li><b>A transactional application is seeing an inordinately high number of
deadlocks.</b>
@@ -143,6 +143,6 @@ unrecoverable, and the databases must be dumped and reloaded.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/compile.html b/db/docs/ref/debug/compile.html
index 64cb5fb03..d784970c6 100644
--- a/db/docs/ref/debug/compile.html
+++ b/db/docs/ref/debug/compile.html
@@ -1,5 +1,5 @@
<!--$Id: compile.so,v 10.12 2001/03/13 20:39:46 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ amount.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/intro.html b/db/docs/ref/debug/intro.html
index b22c3f968..8e3bfbf78 100644
--- a/db/docs/ref/debug/intro.html
+++ b/db/docs/ref/debug/intro.html
@@ -1,5 +1,5 @@
-<!--$Id: intro.so,v 10.20 2004/06/10 16:39:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.23 2006/09/20 20:07:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,31 +29,30 @@ 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:</p>
<dl compact>
-<dt>Review the Berkeley DB error output<dd>If an error output mechanism has been configured in the Berkeley DB
+<dt>Review the Berkeley DB error output:<dd><p>If an error output mechanism has been configured in the Berkeley DB
environment, additional run-time error messages are made available to
the applications. If you are not using an environment, it is well worth
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.
-<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
+error messages.</p>
+<dt>Review <a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a>:<dd><p>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.
-<dt>Add run-time diagnostics<dd>You can configure and build Berkeley DB to perform run-time diagnostics. (By
+understand the problem.</p>
+<dt>Add run-time diagnostics:<dd><p>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.
-<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>.
-<dt>Run the test suite<dd>If you see repeated failures or failures of simple test cases, run the
+information.</p>
+<dt>Apply all available patches:<dd><p>Before reporting a problem in Berkeley DB, please upgrade to the latest Berkeley DB
+release, if possible, or at least make sure you have applied any updates
+available for your release from the
+<a href="http://www.oracle.com/technology/software/products/berkeley-db/db/index.html">Berkeley DB web site</a>.</p>
+<dt>Run the test suite:<dd><p>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.
+using was built and configured correctly.</p>
</dl>
<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/compile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/printlog.html b/db/docs/ref/debug/printlog.html
index 42069df77..5b7417ef8 100644
--- a/db/docs/ref/debug/printlog.html
+++ b/db/docs/ref/debug/printlog.html
@@ -1,5 +1,5 @@
-<!--$Id: printlog.so,v 10.46 2004/08/17 19:07:19 ubell Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: printlog.so,v 10.48 2005/10/22 13:02:06 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,12 +57,17 @@ system was configured with <a href="../../ref/build_unix/conf.html#--enable-diag
<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_merge</td><td>Used to merge two Btree database pages during compaction.</td></tr>
+<tr><td>bam_pgno</td><td>Used to replace a page number in a Btree record.</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_relink</td><td>Fix leaf page prev/next chain when a page is removed.</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_inmem_create</td><td>Record the creation of an in-memory named database.</td></tr>
+<tr><td>crdel_inmem_remove</td><td>Record the removal of an in-memory named database.</td></tr>
+<tr><td>crdel_inmem_rename</td><td>Record the rename of an in-memory named database.</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 (<i>overflow pages</i> contain items too large to place on the main page)</td></tr>
@@ -76,6 +81,7 @@ system was configured with <a href="../../ref/build_unix/conf.html#--enable-diag
<tr><td>db_pg_init</td><td>Indicates we reinitialized a page during a truncate.</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_pg_sort</td><td>Sort the free page list and free pages at the end of the file.</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>fop_create</td><td>Create a file in the file system.</td></tr>
<tr><td>fop_file_remove</td><td>Remove a name in the file system.</td></tr>
@@ -160,6 +166,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/runtime.html b/db/docs/ref/debug/runtime.html
index 3140c2095..f8b454210 100644
--- a/db/docs/ref/debug/runtime.html
+++ b/db/docs/ref/debug/runtime.html
@@ -1,5 +1,5 @@
<!--$Id: runtime.so,v 10.20 2003/10/18 19:15:59 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -43,6 +43,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/distrib/layout.html b/db/docs/ref/distrib/layout.html
index f9e17ed46..97ed1248a 100644
--- a/db/docs/ref/distrib/layout.html
+++ b/db/docs/ref/distrib/layout.html
@@ -1,5 +1,5 @@
-<!--$Id: layout.so,v 10.39 2004/10/05 16:44:33 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: layout.so,v 10.45 2006/07/12 18:54:37 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,12 +18,12 @@
<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>LICENSE</td><td>Berkeley DB License</td></tr>
<tr><td>btree</td><td>Btree access method source code</td></tr>
+<tr><td>build_brew</td><td>BREW build directory</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 32-bit build directory.</td></tr>
-<tr><td>build_win64</td><td>Windows 64-bit build directory.</td></tr>
+<tr><td>build_windows</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>crypto</td><td>Cryptographic support</td></tr>
@@ -35,6 +35,7 @@
<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_hotbackup</td><td>The db_hotbackup 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>
@@ -63,12 +64,14 @@
<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_brew</td><td>BREW 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>os_windows</td><td>Windows operating-system specific functionality</td></tr>
<tr><td>perl</td><td>DB_File and BerkeleyDB Perl modules</td></tr>
<tr><td>php_db4</td><td>PHP module support</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>repmgr</td><td>Replication Manager Framework 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>sequence</td><td>Sequence source code</td></tr>
@@ -79,6 +82,6 @@
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/distrib/port.html b/db/docs/ref/distrib/port.html
index 077135cea..048f615ad 100644
--- a/db/docs/ref/distrib/port.html
+++ b/db/docs/ref/distrib/port.html
@@ -1,5 +1,5 @@
-<!--$Id: port.so,v 10.3 2002/08/30 19:57:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: port.so,v 10.5 2006/08/24 16:32:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -65,8 +65,8 @@ Berkeley DB supports, and that code lives in the <b>os</b> directory of the
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.</p>
+distribution directory os_vxworks, and Windows versions can be found in
+os_windows.</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
@@ -96,15 +96,14 @@ file created by that configuration, and modify it by hand to reflect
the needs of the new architecture. Unless you're already familiar with
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.</p>
+Instead, send us context diffs of your changes and any new source files
+you created, and we'll integrate the changes into our 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.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/dumpload/format.html b/db/docs/ref/dumpload/format.html
index ae5a1469a..c6b010cbc 100644
--- a/db/docs/ref/dumpload/format.html
+++ b/db/docs/ref/dumpload/format.html
@@ -1,5 +1,5 @@
<!--$Id: format.so,v 10.16 2001/03/13 20:39:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -65,6 +65,6 @@ DATA=END.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/dumpload/text.html b/db/docs/ref/dumpload/text.html
index f7da9df92..19572d13b 100644
--- a/db/docs/ref/dumpload/text.html
+++ b/db/docs/ref/dumpload/text.html
@@ -1,5 +1,5 @@
<!--$Id: text.so,v 10.15 2001/03/13 20:39:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ name as the key item and the entire password entry as the data item:</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/dumpload/utility.html b/db/docs/ref/dumpload/utility.html
index d977d4b64..c8f317aaa 100644
--- a/db/docs/ref/dumpload/utility.html
+++ b/db/docs/ref/dumpload/utility.html
@@ -1,5 +1,5 @@
<!--$Id: utility.so,v 10.18 2004/10/05 16:44:33 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,6 +41,6 @@ modify the sources for the <a href="../../utility/db_load.html">db_load</a> util
using the correct hash, prefix, and comparison functions.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../ext/php.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/create.html b/db/docs/ref/env/create.html
index ed61fcea8..2dc41558b 100644
--- a/db/docs/ref/env/create.html
+++ b/db/docs/ref/env/create.html
@@ -1,5 +1,5 @@
-<!--$Id: create.so,v 10.29 2002/06/24 14:50:40 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: create.so,v 10.30 2005/09/23 16:22:42 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,15 +36,14 @@ options fall into four broad categories:</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
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>.
-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; 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.
+<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>. 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; 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.
<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.
@@ -125,6 +124,6 @@ err: (void)dbenv-&gt;close(dbenv, 0);
}</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 22888b964..7c9067e4d 100644
--- a/db/docs/ref/env/db_config.html
+++ b/db/docs/ref/env/db_config.html
@@ -1,5 +1,5 @@
-<!--$Id: db_config.so,v 10.2 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_config.so,v 10.3 2004/11/18 01:57:39 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -16,15 +16,10 @@
</td></tr></table>
<p>
<h3 align=center>DB_CONFIG configuration file</h3>
-<p>Most of the configuration information that can be specified to
+<p>Almost all 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
-application specifying a non-NULL <b>db_home</b> argument to
-<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, or by the application setting 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 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>.</p>
+If a file named DB_CONFIG exists in the database home directory,
+it will be read for lines 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
@@ -46,6 +41,6 @@ compiled-in application cache size to a size more appropriate for 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/encrypt.html b/db/docs/ref/env/encrypt.html
index 8378dbab4..b09a817f3 100644
--- a/db/docs/ref/env/encrypt.html
+++ b/db/docs/ref/env/encrypt.html
@@ -1,5 +1,5 @@
-<!--$Id: encrypt.so,v 11.11 2003/09/15 18:32:55 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: encrypt.so,v 11.12 2006/08/24 16:32:28 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -74,7 +74,7 @@ order.</p>
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>
-<p>Sleepycat Software gratefully acknowledges:</p>
+<p>We gratefully acknowledge:</p>
<p><ul type=disc>
<li>Vincent Rijmen, Antoon Bosselaers and Paulo Barreto for writing the
Rijndael/AES code used in Berkeley DB.
@@ -87,6 +87,6 @@ Mersenne Twister code into Berkeley DB.
</ul>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/error.html b/db/docs/ref/env/error.html
index f4644babf..98001df5f 100644
--- a/db/docs/ref/env/error.html
+++ b/db/docs/ref/env/error.html
@@ -1,5 +1,5 @@
<!--$Id: error.so,v 10.20 2003/10/18 19:16:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ a permission error, the error messages shown would look like this:</p>
my_app: contact your system administrator: session ID was 2</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/faq.html b/db/docs/ref/env/faq.html
index 82572812f..4a7daa9b8 100644
--- a/db/docs/ref/env/faq.html
+++ b/db/docs/ref/env/faq.html
@@ -1,5 +1,5 @@
-<!--$Id: faq.so,v 10.5 2002/02/04 17:52:37 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.6 2006/05/01 15:32:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,21 +19,12 @@
<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
-database environment so that recovery can be run?</b>
-<p>It's the responsibility of the processes (and/or threads of control)
-using a Berkeley DB environment to ensure recovery is never performed if there
-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.</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.</p>
+transactional recovery at the same time, or that all processes have
+exited the database environment so that recovery can be run?</b>
+<p>See <a href="../../ref/transapp/fail.html">Handling failure in
+Transactional Data Store applications</a> and
+<a href="../../ref/transapp/app.html">Architecting Transactional Data Store
+applications</a> for a full discussion of this topic.</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
@@ -55,6 +46,6 @@ data members or methods.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/intro.html b/db/docs/ref/env/intro.html
index 960617cec..d00c06b82 100644
--- a/db/docs/ref/env/intro.html
+++ b/db/docs/ref/env/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.32 2003/04/15 16:48:42 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,16 +44,20 @@ 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.7 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 10.17 2006/08/25 16:40:00 bostic Exp $-->
<table border=1 align=center>
<tr><th>Database Environment Operations</th><th>Description</th></tr>
<!--DbEnv::--><tr><td><a href="../../api_c/env_class.html">db_env_create</a></td><td>Create an environment handle</td></tr>
+<!--Db::get_env--><tr><td><a href="../../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return <a href="../../api_c/db_class.html">DB</a>'s underlying <a href="../../api_c/env_class.html">DB_ENV</a> handle</td></tr>
<!--DbEnv::close--><tr><td><a href="../../api_c/env_close.html">DB_ENV-&gt;close</a></td><td>Close an environment</td></tr>
<!--DbEnv::dbremove--><tr><td><a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a></td><td>Remove a database</td></tr>
<!--DbEnv::dbrename--><tr><td><a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a></td><td>Rename a database</td></tr>
<!--DbEnv::err--><tr><td><a href="../../api_c/env_err.html">DB_ENV-&gt;err</a>, <a href="../../api_c/env_err.html">DB_ENV-&gt;errx</a></td><td>Error message</td></tr>
+<!--DbEnv::failchk--><tr><td><a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a></td><td>Check for thread failure</td></tr>
+<!--DbEnv::fileid_reset--><tr><td><a href="../../api_c/env_fileid_reset.html">DB_ENV-&gt;fileid_reset</a></td><td>Reset database file IDs</td></tr>
<!--DbEnv::get_home--><tr><td><a href="../../api_c/env_open.html">DB_ENV-&gt;get_home</a></td><td>Return environment's home directory</td></tr>
-<!--DbEnv::get_open_flags--><tr><td><a href="../../api_c/env_open.html">DB_ENV-&gt;get_open_flags</a></td><td>Return the flags with which the environment was opened</td></tr>
+<!--DbEnv::get_open_flags--><tr><td><a href="../../api_c/env_open.html">DB_ENV-&gt;get_open_flags</a></td><td>Return flags with which the environment was opened</td></tr>
+<!--DbEnv::lsn_reset--><tr><td><a href="../../api_c/env_lsn_reset.html">DB_ENV-&gt;lsn_reset</a></td><td>Reset database file LSNs</td></tr>
<!--DbEnv::open--><tr><td><a href="../../api_c/env_open.html">DB_ENV-&gt;open</a></td><td>Open an environment</td></tr>
<!--DbEnv::remove--><tr><td><a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a></td><td>Remove an environment</td></tr>
<!--DbEnv::stat_print--><tr><td><a href="../../api_c/env_stat.html">DB_ENV-&gt;stat_print</a></td><td>Environment statistics</td></tr>
@@ -69,18 +73,21 @@ if consistency is to be maintained between them.</p>
<!--DbEnv::set_errfile--><tr><td><a href="../../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>, <a href="../../api_c/env_set_msgfile.html">DB_ENV-&gt;set_msgfile</a></td><td>Set error and informational message FILE</td></tr>
<!--DbEnv::set_error_stream-->
<!--DbEnv::set_errpfx--><tr><td><a href="../../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<!--DbEnv::set_event_notify--><tr><td><a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a></td><td>Set event notification callback</td></tr>
<!--DbEnv::set_feedback--><tr><td><a href="../../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
<!--DbEnv::set_flags--><tr><td><a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a></td><td>Environment configuration</td></tr>
-<!--DbEnv::set_paniccall--><tr><td><a href="../../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
+<!--DbEnv::set_isalive--><tr><td><a href="../../api_c/env_set_isalive.html">DB_ENV-&gt;set_isalive</a></td><td>Set thread is-alive callback</td></tr>
<!--DbEnv::set_rpc_server--><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>
<!--DbEnv::set_shm_key--><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>
-<!--DbEnv::set_tas_spins--><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>
+<!--DbEnv::set_thread_id--><tr><td><a href="../../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a></td><td>Set thread of control ID function</td></tr>
+<!--DbEnv::set_thread_count--><tr><td><a href="../../api_c/env_set_thread_count.html">DB_ENV-&gt;set_thread_count</a></td><td>Set approximate thread count</td></tr>
+<!--DbEnv::set_thread_id_string--><tr><td><a href="../../api_c/env_set_thread_id_string.html">DB_ENV-&gt;set_thread_id_string</a></td><td>Set thread of control ID format function</td></tr>
<!--DbEnv::set_timeout--><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>
<!--DbEnv::set_tmp_dir--><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>
<!--DbEnv::set_verbose--><tr><td><a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a></td><td>Set verbose messages</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/naming.html b/db/docs/ref/env/naming.html
index 02d3931b3..2b2aa9dbc 100644
--- a/db/docs/ref/env/naming.html
+++ b/db/docs/ref/env/naming.html
@@ -1,5 +1,5 @@
<!--$Id: naming.so,v 10.50 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -122,6 +122,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/open.html b/db/docs/ref/env/open.html
index e6860b593..2aed587a9 100644
--- a/db/docs/ref/env/open.html
+++ b/db/docs/ref/env/open.html
@@ -1,5 +1,5 @@
<!--$Id: open.so,v 10.19 2003/10/18 19:16:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -85,6 +85,6 @@ err: if (dbp2 != NULL)
}</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/region.html b/db/docs/ref/env/region.html
index 1ba9ee91b..554fba4a5 100644
--- a/db/docs/ref/env/region.html
+++ b/db/docs/ref/env/region.html
@@ -1,5 +1,5 @@
-<!--$Id: region.so,v 10.30 2003/08/18 21:21:31 ubell Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: region.so,v 10.33 2005/06/11 12:32:49 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -15,17 +15,22 @@
</td></tr></table>
<p>
<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">DB_ENV-&gt;open</a> function:</p>
+<p>Each of the Berkeley DB subsystems within an environment is described by one
+or more regions, or chunks of memory. 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
+types of memory, depending on the flags specified to the
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method:</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>,
+<p><li>If 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,
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.
+by <b>malloc</b>(3).
+<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 Berkeley DB utilities (for example, <a href="../../utility/db_archive.html">db_archive</a>,
+<a href="../../utility/db_checkpoint.html">db_checkpoint</a> or <a href="../../utility/db_stat.html">db_stat</a>) are expected to access the
+environment, the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag should not be specified.</p>
<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
@@ -47,7 +52,7 @@ 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
+the default access permissions for shared objects are different from
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
@@ -70,6 +75,6 @@ shared memory that is being used by the environment.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/remote.html b/db/docs/ref/env/remote.html
index 8a5d5e942..1573e319b 100644
--- a/db/docs/ref/env/remote.html
+++ b/db/docs/ref/env/remote.html
@@ -1,10 +1,10 @@
-<!--$Id: remote.so,v 11.10 2003/05/15 15:05:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: remote.so,v 11.12 2005/06/24 05:04:09 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Remote filesystem</title>
+<title>Berkeley DB Reference Guide: Remote filesystems</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -15,40 +15,51 @@
<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>
-<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 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>
-<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 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>
+<h3 align=center>Remote filesystems</h3>
+<p>When Berkeley DB database environment shared memory regions are backed by the
+filesystem, it is a common application error to create database
+environments backed by remote filesystems such as the Network File
+System (NFS), Windows network shares (SMB/CIFS) or the Andrew File
+System (AFS). Remote filesystems rarely support mapping files into
+process memory, and even more rarely support correct semantics for
+mutexes if the mapping succeeds. For this reason, we recommend database
+environment directories be created in a local filesystem.</p>
+<p>For remote filesystems that do allow remote files to be mapped into
+process memory, database environment directories accessed via remote
+filesystems cannot be used simultaneously from multiple clients (that
+is, from multiple computers). No commercial remote filesystem of which
+we're aware supports coherent, distributed shared memory for
+remote-mounted files. As a result, different machines will see
+different versions of these shared region files, and the 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 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>
+filesystems, as long as the remote filesystem fully supports standard
+POSIX filesystem semantics (although the application may incur a
+performance penalty for doing so). Further, read-only databases on
+remote filesystems can be accessed from multiple systems simultaneously.
+However, it is difficult (or impossible) for modifiable databases on
+remote filesystems to be accessed from multiple systems simultaneously.
+The reason is the Berkeley DB library caches modified database pages, and when
+those modified pages are written to the backing file is not entirely
+under application control. If two systems were to write database pages
+to the remote filesystem at the same time, database corruption could
+result. If a system were to write a database page back to the remote
+filesystem at the same time as another system read a page, a core dump
+in the reader could result.</p>
<dl compact>
-<dt>FreeBSD note:<dd>Some FreeBSD releases are known to return ENOLCK from fsync and close
+<dt>FreeBSD note:<dd>Some historic FreeBSD releases will 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.
-<dt>Linux note:<dd>Some Linux releases are known to not support complete semantics for the
+To support Berkeley DB on these releases, 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. Note that current FreeBSD
+releases do not suffer from this problem.
+<dt>Linux note:<dd>Some historic Linux releases do 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.
+placed on NFS-mounted filesystems on these systems. Note that current
+Linux releases do not suffer from this problem.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/security.html b/db/docs/ref/env/security.html
index c01a8fa88..3e3c7e682 100644
--- a/db/docs/ref/env/security.html
+++ b/db/docs/ref/env/security.html
@@ -1,5 +1,5 @@
<!--$Id: security.so,v 10.17 2002/02/04 17:52:38 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ known permissions.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/ext/mod.html b/db/docs/ref/ext/mod.html
index 64270744c..faa05afa5 100644
--- a/db/docs/ref/ext/mod.html
+++ b/db/docs/ref/ext/mod.html
@@ -1,5 +1,5 @@
-<!--$Id: mod.so,v 10.4 2004/10/21 16:51:25 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: mod.so,v 10.5 2006/08/24 16:32:29 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -55,7 +55,7 @@ following:</p>
<p>To create a mod_db4 managed <a href="../../api_c/db_class.html">DB</a> handle, use the following:</p>
<blockquote><pre>int mod_db4_db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags);</pre></blockquote>
<p>which takes identical arguments to <a href="../../api_c/db_class.html">db_create</a>.</p>
-<p>Otherwise the API is completely consistent with the standard Sleepycat
+<p>Otherwise the API is completely consistent with the standard Berkeley DB
API.</p>
<p>The mod_db4 module requires the Berkeley DB library be compiled with C++ extensions
and the libmm library. Information and source code for the libmm library can
@@ -71,6 +71,6 @@ be found at
documented in $APACHE_INCLUDEDIR/mod_db4_export.h.</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="../ext/perl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/ext/perl.html b/db/docs/ref/ext/perl.html
index 2dec231bc..1b07011ad 100644
--- a/db/docs/ref/ext/perl.html
+++ b/db/docs/ref/ext/perl.html
@@ -1,5 +1,5 @@
-<!--$Id: perl.so,v 10.27 2004/10/05 16:44:35 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: perl.so,v 10.28 2006/08/24 16:32:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,11 +33,11 @@ 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.</p>
-<p>The Perl interface is not maintained by Sleepycat Software. Questions
+<p>The Perl interface is not maintained by Oracle Corporation. Questions
about the DB_File and BerkeleyDB modules are best asked on the Usenet
newsgroup comp.lang.perl.modules.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../ext/mod.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../ext/php.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/ext/php.html b/db/docs/ref/ext/php.html
index d957a16a8..aff485133 100644
--- a/db/docs/ref/ext/php.html
+++ b/db/docs/ref/ext/php.html
@@ -1,5 +1,5 @@
<!--$Id: php.so,v 10.3 2004/10/18 17:08:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -97,6 +97,6 @@ mod_db4 framework, perform the following steps:</p>
<blockquote><pre>extension=db4.so</pre></blockquote>
<table width="100%"><tr><td><br></td><td align=right><a href="../ext/perl.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/install/file.html b/db/docs/ref/install/file.html
index 3f89ff555..ff82884b9 100644
--- a/db/docs/ref/install/file.html
+++ b/db/docs/ref/install/file.html
@@ -1,5 +1,5 @@
<!--$Id: file.so,v 10.19 2001/04/10 20:44:04 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,6 +33,6 @@ Berkeley DB distribution. This <a href="magic.txt">magic.txt</a> information
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/install/magic.s5.be.txt b/db/docs/ref/install/magic.s5.be.txt
index 1b8fcc108..36a905f52 100644
--- a/db/docs/ref/install/magic.s5.be.txt
+++ b/db/docs/ref/install/magic.s5.be.txt
@@ -1,5 +1,5 @@
# Berkeley DB
-# $Id: magic.s5.be.txt,v 10.4 2000/07/07 21:02:22 krinsky Exp $
+# $Id: magic.s5.be.txt,v 10.5 2004/12/30 17:05:05 bostic Exp $
#
# System V /etc/magic files: big-endian version.
#
@@ -85,3 +85,39 @@
>16 long 0x08000000 version 8,
>16 long 0x09000000 version 9,
>12 long 0x53220400 little-endian)
+
+12 long 0x00040988 Berkeley DB (Log,
+>16 long 0x00000001 version 1,
+>16 long 0x00000002 version 2,
+>16 long 0x00000003 version 3,
+>16 long 0x00000004 version 4,
+>16 long 0x00000005 version 5,
+>16 long 0x00000006 version 6,
+>16 long 0x00000007 version 7,
+>16 long 0x00000008 version 8,
+>16 long 0x00000009 version 9,
+>16 long 0x0000000a version 10,
+>16 long 0x0000000b version 11,
+>16 long 0x0000000c version 12,
+>16 long 0x0000000d version 13,
+>16 long 0x0000000e version 14,
+>16 long 0x0000000f version 15,
+>12 long 0x00040988 native byte-order)
+
+12 long 0x88090400 Berkeley DB (Log,
+>16 long 0x01000000 version 1,
+>16 long 0x02000000 version 2,
+>16 long 0x03000000 version 3,
+>16 long 0x04000000 version 4,
+>16 long 0x05000000 version 5,
+>16 long 0x06000000 version 6,
+>16 long 0x07000000 version 7,
+>16 long 0x08000000 version 8,
+>16 long 0x09000000 version 9,
+>16 long 0x0a000000 version 10,
+>16 long 0x0b000000 version 11,
+>16 long 0x0c000000 version 12,
+>16 long 0x0d000000 version 13,
+>16 long 0x0e000000 version 14,
+>16 long 0x0f000000 version 15,
+>12 long 0x88090400 little-endian)
diff --git a/db/docs/ref/install/magic.s5.le.txt b/db/docs/ref/install/magic.s5.le.txt
index c8871fedf..e859d979b 100644
--- a/db/docs/ref/install/magic.s5.le.txt
+++ b/db/docs/ref/install/magic.s5.le.txt
@@ -1,5 +1,5 @@
# Berkeley DB
-# $Id: magic.s5.le.txt,v 10.4 2000/07/07 21:02:22 krinsky Exp $
+# $Id: magic.s5.le.txt,v 10.5 2004/12/30 17:05:05 bostic Exp $
#
# System V /etc/magic files: little-endian version.
#
@@ -85,3 +85,39 @@
>16 long 0x08000000 version 8,
>16 long 0x09000000 version 9,
>12 long 0x53220400 big-endian)
+
+12 long 0x00040988 Berkeley DB (Log,
+>16 long 0x00000001 version 1,
+>16 long 0x00000002 version 2,
+>16 long 0x00000003 version 3,
+>16 long 0x00000004 version 4,
+>16 long 0x00000005 version 5,
+>16 long 0x00000006 version 6,
+>16 long 0x00000007 version 7,
+>16 long 0x00000008 version 8,
+>16 long 0x00000009 version 9,
+>16 long 0x0000000a version 10,
+>16 long 0x0000000b version 11,
+>16 long 0x0000000c version 12,
+>16 long 0x0000000d version 13,
+>16 long 0x0000000e version 14,
+>16 long 0x0000000f version 15,
+>12 long 0x00040988 native byte-order)
+
+12 long 0x88090400 Berkeley DB (Log,
+>16 long 0x01000000 version 1,
+>16 long 0x02000000 version 2,
+>16 long 0x03000000 version 3,
+>16 long 0x04000000 version 4,
+>16 long 0x05000000 version 5,
+>16 long 0x06000000 version 6,
+>16 long 0x07000000 version 7,
+>16 long 0x08000000 version 8,
+>16 long 0x09000000 version 9,
+>16 long 0x0a000000 version 10,
+>16 long 0x0b000000 version 11,
+>16 long 0x0c000000 version 12,
+>16 long 0x0d000000 version 13,
+>16 long 0x0e000000 version 14,
+>16 long 0x0f000000 version 15,
+>12 long 0x88090400 big-endian)
diff --git a/db/docs/ref/install/magic.txt b/db/docs/ref/install/magic.txt
index c28329f40..3edc4682b 100644
--- a/db/docs/ref/install/magic.txt
+++ b/db/docs/ref/install/magic.txt
@@ -1,5 +1,5 @@
# Berkeley DB
-# $Id: magic.txt,v 10.10 2000/07/07 21:02:22 krinsky Exp $
+# $Id: magic.txt,v 10.11 2004/12/30 17:05:05 bostic Exp $
#
# Ian Darwin's file /etc/magic files: big/little-endian version.
#
@@ -54,3 +54,10 @@
>16 belong >0 (Queue, version %d, big-endian)
12 lelong 0x00042253 Berkeley DB
>16 lelong >0 (Queue, version %d, little-endian)
+
+12 long 0x00040988 Berkeley DB
+>16 long >0 (Log, version %d, native byte-order)
+12 belong 0x00040988 Berkeley DB
+>16 belong >0 (Log, version %d, big-endian)
+12 lelong 0x00040988 Berkeley DB
+>16 lelong >0 (Log, version %d, little-endian)
diff --git a/db/docs/ref/install/multiple.html b/db/docs/ref/install/multiple.html
index 6e3794010..8889ef81b 100644
--- a/db/docs/ref/install/multiple.html
+++ b/db/docs/ref/install/multiple.html
@@ -1,5 +1,5 @@
<!--$Id: multiple.so,v 10.4 2004/06/10 16:39:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,6 +50,6 @@ you do not unexpectedly collide with other application code or a library
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="../debug/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/data.html b/db/docs/ref/intro/data.html
index 10993985e..e09ef9d37 100644
--- a/db/docs/ref/intro/data.html
+++ b/db/docs/ref/intro/data.html
@@ -1,5 +1,5 @@
-<!--$Id: data.so,v 10.1 2000/09/22 18:23:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: data.so,v 10.2 2006/08/25 23:24:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -16,11 +16,11 @@
<p>
<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
+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
+shift from large, general-purpose desktop and server computers toward
+smaller, special-purpose devices with built-in processing and
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
@@ -50,6 +50,6 @@ commercially-available database systems. The problem is selecting the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/dbis.html b/db/docs/ref/intro/dbis.html
index 5c3255dbb..57fd0ba4d 100644
--- a/db/docs/ref/intro/dbis.html
+++ b/db/docs/ref/intro/dbis.html
@@ -1,5 +1,5 @@
-<!--$Id: dbis.so,v 10.9 2002/07/05 17:49:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbis.so,v 10.11 2006/09/19 16:21:42 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,19 +19,18 @@
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?</p>
-<p>Berkeley DB is an open source embedded database library that provides
+<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.</p>
-<p>By "open source," we mean that Berkeley DB is distributed under a license that
+services to applications. Berkeley DB provides a simple function-call API for
+data access and management.</p>
+<p>By "Open Source," we mean 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
-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.</p>
-<p>Berkeley DB is embedded because it links directly into the application. It
+Source Definition</a>. This license guarantees Berkeley DB is freely available
+for use and redistribution in other Open Source applications. Oracle
+Corporation sells commercial licenses allowing the redistribution of
+Berkeley DB in proprietary applications. In all cases the complete source
+code for Berkeley DB is freely available for 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
processes on the same machine, is required for database operations.
@@ -42,14 +41,13 @@ 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.</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.
-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.</p>
+<p>The Berkeley DB 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. 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.</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.
@@ -155,6 +153,6 @@ increasingly important feature in a world using CGI scripts to deliver
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/dbisnot.html b/db/docs/ref/intro/dbisnot.html
index cf727a3dd..b9a6ccb6e 100644
--- a/db/docs/ref/intro/dbisnot.html
+++ b/db/docs/ref/intro/dbisnot.html
@@ -1,5 +1,5 @@
<!--$Id: dbisnot.so,v 10.8 2002/08/23 20:36:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -136,6 +136,6 @@ 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.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/distrib.html b/db/docs/ref/intro/distrib.html
index 413136ef0..cc9eb45de 100644
--- a/db/docs/ref/intro/distrib.html
+++ b/db/docs/ref/intro/distrib.html
@@ -1,5 +1,5 @@
-<!--$Id: distrib.so,v 10.17 2001/03/23 21:15:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: distrib.so,v 10.18 2006/08/24 16:32:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,13 +17,12 @@
<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>
-<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.</p>
+utilities, as well as complete documentation in HTML format. The
+distribution includes prebuilt binaries and libraries for a small
+number of platforms. The distribution does not include hard-copy
+documentation.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/need.html b/db/docs/ref/intro/need.html
index ba9398fec..b0a9cf64e 100644
--- a/db/docs/ref/intro/need.html
+++ b/db/docs/ref/intro/need.html
@@ -1,5 +1,5 @@
<!--$Id: need.so,v 10.2 2000/12/08 23:59:06 mao Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -56,6 +56,6 @@ that set of features, then Berkeley DB is almost certainly the best choice
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/products.html b/db/docs/ref/intro/products.html
index 604a185db..337cb875f 100644
--- a/db/docs/ref/intro/products.html
+++ b/db/docs/ref/intro/products.html
@@ -1,10 +1,10 @@
-<!--$Id: products.so,v 10.17 2004/09/17 19:51:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: products.so,v 10.19 2006/08/24 16:32:30 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Sleepycat Software's Berkeley DB products</title>
+<title>Berkeley DB Reference Guide: The Berkeley DB products</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -15,13 +15,13 @@
<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="../am_conf/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h3 align=center>Sleepycat Software's Berkeley DB products</h3>
-<p>Sleepycat Software licenses four different products that use the Berkeley DB
+<h3 align=center>The Berkeley DB products</h3>
+<p>Oracle Corporation 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>
<p>All four products are included in the single Open Source distribution
-of Berkeley DB from Sleepycat Software, and building that distribution
+of Berkeley DB from Oracle Corporation, 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
@@ -29,18 +29,18 @@ 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.</p>
+from Oracle Corporation.</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 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. 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>
+supports multiple concurrent threads of control (including multiple
+processes and multiple threads of control within a process) reading
+information managed by Berkeley DB. When updates are required, only a single
+thread of control may be using the database. 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. The Berkeley DB Data Store is
+intended for use in read-only applications or applications which can
+guarantee no more than one thread of control will ever update the
+database at a 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
@@ -65,6 +65,6 @@ 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="../am_conf/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/terrain.html b/db/docs/ref/intro/terrain.html
index b4e1f7e8d..b28366fae 100644
--- a/db/docs/ref/intro/terrain.html
+++ b/db/docs/ref/intro/terrain.html
@@ -1,5 +1,5 @@
<!--$Id: terrain.so,v 10.4 2001/05/05 01:49:26 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -244,6 +244,6 @@ application creates new opportunity for installation mistakes and
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/what.html b/db/docs/ref/intro/what.html
index 112a03fa4..2952aa86c 100644
--- a/db/docs/ref/intro/what.html
+++ b/db/docs/ref/intro/what.html
@@ -1,5 +1,5 @@
<!--$Id: what.so,v 10.23 2001/03/01 15:58:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/where.html b/db/docs/ref/intro/where.html
index ee8662aff..def788fd4 100644
--- a/db/docs/ref/intro/where.html
+++ b/db/docs/ref/intro/where.html
@@ -1,5 +1,5 @@
<!--$Id: where.so,v 10.32 2003/05/26 16:04:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ Windows/NT, Windows/2000 and Windows/XP, via the Microsoft Visual C++
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/compat.html b/db/docs/ref/java/compat.html
index 1fc11409f..69fb9ca11 100644
--- a/db/docs/ref/java/compat.html
+++ b/db/docs/ref/java/compat.html
@@ -1,5 +1,5 @@
<!--$Id: compat.so,v 10.14 2003/02/10 14:32:10 gburd Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/conf.html b/db/docs/ref/java/conf.html
index 1c0c0824a..b3ffb485a 100644
--- a/db/docs/ref/java/conf.html
+++ b/db/docs/ref/java/conf.html
@@ -1,5 +1,5 @@
-<!--$Id: conf.so,v 10.28 2004/09/17 19:51:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: conf.so,v 10.30 2005/12/01 03:18:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,7 +19,7 @@
<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 Win32</a>
+Berkeley DB</a> and <a href="../../ref/build_win/intro.html">Building for Windows</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
@@ -72,7 +72,7 @@ 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>
+<blockquote><pre><b>db-VERSION\build_windows\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
@@ -89,17 +89,17 @@ probably do not have the library search path configured correctly:</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><b>db-VERSION/examples_java/src/com/sleepycat/examples/db</b></pre></blockquote>
+<blockquote><pre><b>db-VERSION/examples_java/src/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>
+<blockquote><pre>% java 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="../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="../java/compat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/faq.html b/db/docs/ref/java/faq.html
index 3443acbd3..a5dd581e9 100644
--- a/db/docs/ref/java/faq.html
+++ b/db/docs/ref/java/faq.html
@@ -1,5 +1,5 @@
-<!--$Id: faq.so,v 1.12 2004/09/17 20:16:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 1.15 2006/08/08 15:35:36 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,14 +18,8 @@
<h3 align=center>Java FAQ</h3>
<ol>
<p><li><b>On what platforms is the Berkeley DB Java API supported?</b>
-<p>All platforms supported by Berkeley DB that have a J2SE 1.3.1 compliant JVM.</p>
-<p><li><b>Will the Berkeley DB 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>All platforms supported by Berkeley DB that have a JVM compatible with J2SE
+1.3.1 or above.</p>
<p><li><b>How does the Berkeley DB Java API relate to the J2EE standard?</b>
<p>The Berkeley DB Java API does not currently implement any part of the J2EE
standard. That said, it does implement the implicit standard for Java
@@ -56,12 +50,9 @@ 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>Set Java's library path so that the debug version of Berkeley DB's Java
+library appears, but the release version does not. Berkeley DB tries to load
+the release library first, and if that fails tries the debug library.</p>
<p><li><b>Why is ClassNotFoundException thrown when adding a record to
the database, when a SerialBinding is used?</b>
<p>This problem occurs if you copy the db.jar file into the Java extensions
@@ -73,7 +64,7 @@ If you have more than one installation of Java, be sure to remove it
from all of them. This is necessary even if db.jar is specified in the
classpath.</p>
<p>An example of the exception is:</p>
-<blockquote><pre>com.sleepycat.examples.bdb.shipment.basic.SupplierKey
+<blockquote><pre>collections.ship.basic.SupplierKey
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
@@ -84,9 +75,21 @@ at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sleepycat.bind.serial.StoredClassCatalog.getClassInfo(StoredClassCatalog.java:211)
...</pre></blockquote>
+<p><li><b>I'm upgrading my Java application to Berkeley DB 4.3. Can I use the
+com.sleepycat.db.internal package rather than porting my code to the new
+API?</b>
+<p>While it is possible to use the low-level API from applications, there
+are some caveats that should be considered when upgrading. The first is
+that the internal API depends on some classes in the public API such as
+DatabaseEntry.</p>
+<p>In addition, the internal API is closer to the C API and doesn't have
+some of the default settings that were part of the earlier Java API.
+For example, applications will need to set the DB_THREAD flag explicitly
+if handles are to be used from multiple threads, or subtle errors may
+occur.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/program.html b/db/docs/ref/java/program.html
index 68b6d27b5..f2c60f3c4 100644
--- a/db/docs/ref/java/program.html
+++ b/db/docs/ref/java/program.html
@@ -1,5 +1,5 @@
<!--$Id: program.so,v 10.35 2004/09/10 13:04:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -70,6 +70,6 @@ Java Bug Database).
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7251b55b5..24069516d 100644
--- a/db/docs/ref/lock/am_conv.html
+++ b/db/docs/ref/lock/am_conv.html
@@ -1,5 +1,5 @@
<!--$Id: am_conv.so,v 10.24 2003/04/02 16:15:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -119,6 +119,6 @@ span threads of control, so the library knows that two cursors in the same
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 731685a03..6fd281b69 100644
--- a/db/docs/ref/lock/cam_conv.html
+++ b/db/docs/ref/lock/cam_conv.html
@@ -1,5 +1,5 @@
<!--$Id: cam_conv.so,v 10.14 2003/10/18 19:16:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ already locked with a READ lock.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/config.html b/db/docs/ref/lock/config.html
index 222ae3cf6..adbc37a5d 100644
--- a/db/docs/ref/lock/config.html
+++ b/db/docs/ref/lock/config.html
@@ -1,5 +1,5 @@
<!--$Id: config.so,v 10.21 2003/10/18 19:16:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,6 +39,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/dead.html b/db/docs/ref/lock/dead.html
index 2ba094ca7..a053931de 100644
--- a/db/docs/ref/lock/dead.html
+++ b/db/docs/ref/lock/dead.html
@@ -1,5 +1,5 @@
-<!--$Id: dead.so,v 10.20 2003/10/18 19:16:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dead.so,v 10.21 2005/12/02 17:27:50 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -71,7 +71,7 @@ using the <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect<
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
+resolve deadlocks more quickly (because 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
@@ -79,6 +79,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/deaddbg.html b/db/docs/ref/lock/deaddbg.html
index 31b5e3459..2f2e82db2 100644
--- a/db/docs/ref/lock/deaddbg.html
+++ b/db/docs/ref/lock/deaddbg.html
@@ -1,5 +1,5 @@
-<!--$Id: deaddbg.so,v 10.4 2003/03/06 21:22:36 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: deaddbg.so,v 10.5 2005/12/02 17:27:50 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -77,7 +77,7 @@ detector. It's not a true deadlock because, if work could continue to
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
+cannot proceed because it is the same thread as is blocked waiting on the
lock.</p>
<p>Here's an example of three transactions reaching true deadlock. First,
three different threads of control opened the database, acquiring three
@@ -123,7 +123,7 @@ Locker Mode Count Status ----------- Object ----------
80000008 WRITE 1 WAIT a.db page 2
80000007 WRITE 1 HELD a.db page 3
80000006 WRITE 1 WAIT a.db page 3</pre></blockquote>
-<p>Now, each of the threads of control are blocked, waiting on a different
+<p>Now, each of the threads of control is blocked, waiting on a different
thread of control.
The thread using locker 80000007 is blocked by
the thread using locker 80000008, due to the lock on page 4.
@@ -136,6 +136,6 @@ progress, one of them will have to be killed in order to resolve the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/intro.html b/db/docs/ref/lock/intro.html
index 9fb0df5f2..ece8be812 100644
--- a/db/docs/ref/lock/intro.html
+++ b/db/docs/ref/lock/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.26 2003/10/18 19:16:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -83,7 +83,7 @@ the lock subsystem. It is the programmatic interface used by the
<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">DB_ENV-&gt;remove</a> method.</p>
-<!--$Id: m4.methods,v 1.5 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2006/08/08 05:15:56 mjc Exp $-->
<table border=1 align=center>
<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbDeadlockException-->
@@ -94,6 +94,7 @@ the lock subsystem. It is the programmatic interface used by the
<!--DbEnv::lock_put--><tr><td><a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a></td><td>Release a lock</td></tr>
<!--DbEnv::lock_stat--><tr><td><a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
<!--DbEnv::lock_vec--><tr><td><a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a></td><td>Acquire/release locks</td></tr>
+<!--DbEnv::cdsgroup_begin--><tr><td><a href="../../api_c/env_cdsgroup_begin.html">DB_ENV-&gt;cdsgroup_begin</a></td><td>Get a locker ID in Berkeley DB Concurrent Data Store</td></tr>
<!--DbLockNotGrantedException-->
<!--DbLock-->
<tr><th>Locking Subsystem Configuration</th><th><br></th></tr>
@@ -106,6 +107,6 @@ the lock subsystem. It is the programmatic interface used by the
</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/max.html b/db/docs/ref/lock/max.html
index 1584d7ccd..83c95d2b7 100644
--- a/db/docs/ref/lock/max.html
+++ b/db/docs/ref/lock/max.html
@@ -1,5 +1,5 @@
-<!--$Id: max.so,v 10.10 2004/10/18 19:35:11 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: max.so,v 10.11 2006/01/05 16:51:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,13 +28,14 @@ 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, requests for locks in an
+appropriate values requires an understanding of your application and 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 because increasing the number of locks does not require large
-amounts of additional resources.</p>
+amounts of additional resources. The default values are 1000 of
+each type of object.</p>
<p>When configuring a Berkeley DB Concurrent Data Store application, the number of lock objects needed
is two per open database (one for the database lock, and one for the
cursor lock when the <a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a> option is not specified). The
@@ -98,6 +99,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/nondb.html b/db/docs/ref/lock/nondb.html
index 1146ae76c..461ad1476 100644
--- a/db/docs/ref/lock/nondb.html
+++ b/db/docs/ref/lock/nondb.html
@@ -1,5 +1,5 @@
<!--$Id: nondb.so,v 10.15 2001/05/22 19:39:31 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/notxn.html b/db/docs/ref/lock/notxn.html
index 099f48ea9..36ec06c35 100644
--- a/db/docs/ref/lock/notxn.html
+++ b/db/docs/ref/lock/notxn.html
@@ -1,5 +1,5 @@
<!--$Id: notxn.so,v 10.15 2001/05/22 19:39:31 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,6 +42,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/page.html b/db/docs/ref/lock/page.html
index 7ea77af76..b43754850 100644
--- a/db/docs/ref/lock/page.html
+++ b/db/docs/ref/lock/page.html
@@ -1,5 +1,5 @@
<!--$Id: page.so,v 10.19 2002/06/01 23:42:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -67,6 +67,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/stdmode.html b/db/docs/ref/lock/stdmode.html
index f40b12e26..7cc949bba 100644
--- a/db/docs/ref/lock/stdmode.html
+++ b/db/docs/ref/lock/stdmode.html
@@ -1,5 +1,5 @@
<!--$Id: stdmode.so,v 10.26 2001/05/22 19:39:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -54,6 +54,6 @@ new request for either a read or write lock would be denied.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/timeout.html b/db/docs/ref/lock/timeout.html
index e6760aaeb..5f41163cf 100644
--- a/db/docs/ref/lock/timeout.html
+++ b/db/docs/ref/lock/timeout.html
@@ -1,5 +1,5 @@
-<!--$Id: timeout.so,v 1.8 2004/02/02 19:53:57 ubell Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: timeout.so,v 1.9 2005/12/02 17:27:49 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,7 +19,7 @@
<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_NOTGRANTED">DB_LOCK_NOTGRANTED</a> from a lock call when it is
-detected that the locks timeouts has expired, that is, the lock request
+detected that the lock's timeout 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_NOTGRANTED">DB_LOCK_NOTGRANTED</a>
from a lock call when it has been detected that the transaction has been
@@ -37,7 +37,7 @@ 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.
A separate deadlock detection thread (or process) should always
-be used if the application depends on timeouts otherwise if
+be used if the application depends on timeouts; otherwise, if
there are no new blocked lock requests a pending timeout will
never trigger.</p>
<p>If the database environment deadlock detector has been configured with
@@ -65,6 +65,6 @@ and the specific lock described will be timed out if it blocks longer
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/twopl.html b/db/docs/ref/lock/twopl.html
index 8f81627b9..00fe51646 100644
--- a/db/docs/ref/lock/twopl.html
+++ b/db/docs/ref/lock/twopl.html
@@ -1,5 +1,5 @@
<!--$Id: twopl.so,v 10.11 2001/05/22 19:39:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,6 @@ transaction most likely to deadlock.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/log/config.html b/db/docs/ref/log/config.html
index 5a6fd736d..f21bb308c 100644
--- a/db/docs/ref/log/config.html
+++ b/db/docs/ref/log/config.html
@@ -1,5 +1,5 @@
-<!--$Id: config.so,v 10.19 2003/10/18 19:16:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 10.20 2006/08/30 10:08:16 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,10 +20,10 @@
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>
+logging subsystem's default size is approximately 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
@@ -39,9 +39,9 @@ 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>
+is approximately 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/log/intro.html b/db/docs/ref/log/intro.html
index 98c6131c3..51a463f9b 100644
--- a/db/docs/ref/log/intro.html
+++ b/db/docs/ref/log/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.24 2003/10/18 19:16:03 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,7 +45,7 @@ display statistics about the log.
<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>
-<!--$Id: m4.methods,v 1.4 2004/11/03 15:52:01 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2005/09/30 19:00:24 bostic Exp $-->
<table border=1 align=center>
<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbLsn--><tr><td><a href="../../api_c/lsn_class.html">DB_LSN</a></td><td>Log Sequence Numbers</td></tr>
@@ -53,6 +53,7 @@ removed using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> me
<!--DbEnv::log_archive--><tr><td><a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
<!--DbEnv::log_file--><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>
<!--DbEnv::log_flush--><tr><td><a href="../../api_c/log_flush.html">DB_ENV-&gt;log_flush</a></td><td>Flush log records</td></tr>
+<!--DbEnv::log_printf--><tr><td><a href="../../api_c/log_printf.html">DB_ENV-&gt;log_printf</a></td><td>Append informational message to the log</td></tr>
<!--DbEnv::log_put--><tr><td><a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a></td><td>Write a log record</td></tr>
<!--DbEnv::log_stat--><tr><td><a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a></td><td>Return log subsystem statistics</td></tr>
<tr><th>Logging Subsystem Cursors</th><th><br></th></tr>
@@ -63,11 +64,12 @@ removed using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> me
<tr><th>Logging Subsystem Configuration</th><th><br></th></tr>
<!--DbEnv::set_lg_bsize--><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>
<!--DbEnv::set_lg_dir--><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>
+<!--DbEnv::set_lg_filemode--><tr><td><a href="../../api_c/env_set_lg_mode.html">DB_ENV-&gt;set_lg_filemode</a></td><td>Set log file mode</td></tr>
<!--DbEnv::set_lg_max--><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>
<!--DbEnv::set_lg_regionmax--><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>
</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/log/limits.html b/db/docs/ref/log/limits.html
index 2f0d2d1a3..4d6972226 100644
--- a/db/docs/ref/log/limits.html
+++ b/db/docs/ref/log/limits.html
@@ -1,5 +1,5 @@
<!--$Id: limits.so,v 10.26 2004/08/13 03:48:05 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,6 +44,6 @@ in all other cases, at least a single log file is retained.)
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/mp/config.html b/db/docs/ref/mp/config.html
index cfe11f2ea..08688ee04 100644
--- a/db/docs/ref/mp/config.html
+++ b/db/docs/ref/mp/config.html
@@ -1,5 +1,5 @@
<!--$Id: config.so,v 10.20 2003/10/18 19:16:04 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -48,6 +48,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/mp/intro.html b/db/docs/ref/mp/intro.html
index c9823fde2..73cff73d1 100644
--- a/db/docs/ref/mp/intro.html
+++ b/db/docs/ref/mp/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.23 2002/08/30 20:02:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,19 +68,19 @@ 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>
-<!--$Id: m4.methods,v 1.7 2004/11/03 15:52:02 bostic Exp $-->
+<!--$Id: m4.methods,v 1.9 2006/08/25 16:40:01 bostic Exp $-->
<table border=1 align=center>
<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
-<!--Db::mpf--><tr><td><a href="../../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<!--Db::mpf--><tr><td><a href="../../api_c/db_get_mpf.html">DB-&gt;get_mpf</a></td><td>Return <a href="../../api_c/db_class.html">DB</a>'s underlying <a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle</td></tr>
<!--DbEnv::memp_stat--><tr><td><a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td><td>Return memory pool statistics</td></tr>
<!--DbEnv::memp_sync--><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>
<!--DbEnv::memp_trickle--><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>
<!--DbMemoryException-->
<tr><th>Memory Pool Configuration</th><th><br></th></tr>
<!--DbEnv::memp_register--><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>
-<!--DbEnv::memp_set_max_openfd--><tr><td><a href="../../api_c/memp_openfd.html">DB_ENV-&gt;memp_set_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
-<!--DbEnv::memp_set_max_write--><tr><td><a href="../../api_c/memp_maxwrite.html">DB_ENV-&gt;memp_set_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_cachesize--><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>
+<!--DbEnv::set_mp_max_openfd--><tr><td><a href="../../api_c/memp_openfd.html">DB_ENV-&gt;set_mp_max_openfd</a></td><td>Set the maximum number of open file descriptors</td></tr>
+<!--DbEnv::set_mp_max_write--><tr><td><a href="../../api_c/memp_maxwrite.html">DB_ENV-&gt;set_mp_max_write</a></td><td>Set the maximum number of sequential disk writes</td></tr>
<!--DbEnv::set_mp_mmapsize--><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><th>Memory Pool Files</th><th><br></th></tr>
<!--DbEnv::memp_fcreate--><tr><td><a href="../../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
@@ -103,6 +103,6 @@ a specified log sequence number (<a href="../../api_c/lsn_class.html">DB_LSN</a>
</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/pindex.src b/db/docs/ref/pindex.src
index 7295d2951..38b0fb736 100644
--- a/db/docs/ref/pindex.src
+++ b/db/docs/ref/pindex.src
@@ -3,6 +3,7 @@ __APIREL__/utility/db_archive.html__OCT__2 utility to @archive log files
__APIREL__/utility/db_checkpoint.html__OCT__2 utility to take @checkpoints
__APIREL__/utility/db_deadlock.html__OCT__2 utility to detect @deadlocks
__APIREL__/utility/db_dump.html__OCT__2 utility to @dump databases as text files
+__APIREL__/utility/db_hotbackup.html__OCT__2 utility to hot @backup database environments
__APIREL__/utility/db_load.html__OCT__2 utility to @load text files into databases
__APIREL__/utility/db_printlog.html__OCT__2 utility to display @log files as text
__APIREL__/utility/db_recover.html__OCT__2 utility to @recover database environments
diff --git a/db/docs/ref/program/appsignals.html b/db/docs/ref/program/appsignals.html
index 378af10c0..19cbff612 100644
--- a/db/docs/ref/program/appsignals.html
+++ b/db/docs/ref/program/appsignals.html
@@ -1,5 +1,5 @@
<!--$Id: appsignals.so,v 10.28 2002/02/23 20:05:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,6 +34,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/cache.html b/db/docs/ref/program/cache.html
index fa7d7685f..ec53dbeb5 100644
--- a/db/docs/ref/program/cache.html
+++ b/db/docs/ref/program/cache.html
@@ -1,5 +1,5 @@
<!--$Id: cache.so,v 10.3 2002/09/26 01:38:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ Many times, this means that write-caching on the disk drive must
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/compatible.html b/db/docs/ref/program/compatible.html
index 9537853ce..13a8c695f 100644
--- a/db/docs/ref/program/compatible.html
+++ b/db/docs/ref/program/compatible.html
@@ -1,5 +1,5 @@
<!--$Id: compatible.so,v 10.34 2002/02/23 20:05:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ information. No utilities are provided to convert UNIX <a href="../../api_c/dbm
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/copy.html b/db/docs/ref/program/copy.html
index 4aee3846c..d423387e0 100644
--- a/db/docs/ref/program/copy.html
+++ b/db/docs/ref/program/copy.html
@@ -1,10 +1,10 @@
-<!--$Id: copy.so,v 10.13 2004/03/24 20:12:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: copy.so,v 10.17 2005/06/16 17:07:07 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Copying databases</title>
+<title>Berkeley DB Reference Guide: Copying or moving databases</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -14,51 +14,72 @@
<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>
-<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.
+<h3 align=center>Copying or moving databases</h3>
+<a name="2"><!--meow--></a>
+<a name="3"><!--meow--></a>
+<p>There are two issues with copying or moving databases: database page log
+sequence numbers (LSNs), and database file identification strings.</p>
+<p>Because database pages contain references to the database environment
+log records (LSNs), databases cannot be copied or moved from one
+transactional database environment to another without first clearing the
+LSNs. Note that this is not a concern for non-transactional database
+environments and applications, and can be ignored if the database is not
+being used transactionally. Specifically, databases created and written
+non-transactionally (for example, as part of a bulk load procedure), can
+be copied or moved into a transactional database environment without
+resetting the LSNs. The database's LSNs may be reset in one of three
+ways: the application can call the <a href="../../api_c/env_lsn_reset.html">DB_ENV-&gt;lsn_reset</a> method to reset the
+LSNs in place, or a system administrator can reset the LSNs in place
+using the <b>-r</b> option to the <a href="../../utility/db_load.html">db_load</a> utility, or by
+dumping and reloading the database (using the <a href="../../utility/db_dump.html">db_dump</a> and
+<a href="../../utility/db_load.html">db_load</a> utilities).</p>
+<p>Because system file identification information (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 unique 20-byte file identification bytestring.
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 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 because
-the shared memory buffer pool does not discard cached database pages
-when the database is closed by calling the <a href="../../api_c/db_close.html">DB-&gt;close</a> method, cached
-pages are only discarded when the database is removed by calling the
-<a href="../../api_c/db_remove.html">DB-&gt;remove</a> method.</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> 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>
+it is this bytestring that is used to ensure the same underlying pages
+are updated in the database environment cache, no matter which Berkeley DB
+handle is used for the operation.</p>
+<p>The database file identification string is not a concern when moving
+databases, and databases may be moved or renamed without resetting the
+identification string. However, when copying a database, you must
+ensure there are never two databases with the same file identification
+bytestring in the same cache at the same time. Copying databases is
+further complicated because Berkeley DB caches do not discard cached database
+pages when database handles are closed. Cached pages are only discarded
+when the database is removed by calling the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> or
+<a href="../../api_c/db_remove.html">DB-&gt;remove</a> methods.</p>
+<p>Before physically copying a database file, first ensure that all
+modified pages have been written from the 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> methods.</p>
+<p>Before using a copy of a database file in a database environment, you
+must ensure that all pages from any other database with the same
+bytestring have been removed from the memory pool cache. If the
+environment in which you will open the copy of the database has pages
+from files with identical bytestrings to the copied database, 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">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>Remove the environment, either using system utilities or by calling the
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method. Obviously, this will not allow you to access
+both the original database and the 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, reset the bytestring in the
-copied database to a new bytestring. This allows you to access both the
-original and copy of the database at the same time. You can reset the
-bytestring with the <b>-r</b> flag to the <a href="../../utility/db_load.html">db_load</a> utility.
+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 dumped and reloaded, you can copy
+the database by other means, and then reset the bytestring in the copied
+database to a new bytestring. There are two ways to reset the
+bytestring in the copy: the application can call the
+<a href="../../api_c/env_fileid_reset.html">DB_ENV-&gt;fileid_reset</a> method, or a system administrator can use the
+<b>-r</b> option to the <a href="../../utility/db_load.html">db_load</a> utility. This allows you to
+access both the original and copy of the database at the same time.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/environ.html b/db/docs/ref/program/environ.html
index 73e7f3685..a51cb266a 100644
--- a/db/docs/ref/program/environ.html
+++ b/db/docs/ref/program/environ.html
@@ -1,5 +1,5 @@
<!--$Id: environ.so,v 10.21 2001/04/16 17:11:40 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,6 +29,6 @@ checked as locations in which to create temporary files. See
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/errorret.html b/db/docs/ref/program/errorret.html
index 5189d2e5e..643eee09a 100644
--- a/db/docs/ref/program/errorret.html
+++ b/db/docs/ref/program/errorret.html
@@ -1,5 +1,5 @@
-<!--$Id: errorret.so,v 10.47 2004/10/14 13:32:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: errorret.so,v 10.49 2006/08/25 18:22:01 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -74,8 +74,10 @@ DB_LOCK_DEADLOCK. Whenever a Berkeley DB function returns
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 a
-DB_LOCK_DEADLOCK return from any Berkeley DB access method call.</p>
+with applications that can deadlock is to anticipate a
+DB_LOCK_DEADLOCK return from any <a href="../../api_c/db_class.html">DB</a> or <a href="../../api_c/dbc_class.html">DBC</a>
+handle method call, or any <a href="../../api_c/env_class.html">DB_ENV</a> handle method call that
+references a database, including the database's backing physical file.</p>
<h3><a name="DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></h3>
<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
@@ -97,18 +99,15 @@ 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 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">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
-by simply exiting the application when the callback function is called
-in applications that have no cleanup processing of their own.</p>
+<p>Applications can handle such fatal errors in one of two ways: first, by
+checking for DB_RUNRECOVERY as part of their normal Berkeley DB error
+return checking, similarly to DB_LOCK_DEADLOCK or any other
+error. Alternatively, applications can specify a fatal-error callback
+function using the <a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a> method. Applications with
+no cleanup processing of their own should simply exit from the callback
+function.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/faq.html b/db/docs/ref/program/faq.html
index e58491447..566091467 100644
--- a/db/docs/ref/program/faq.html
+++ b/db/docs/ref/program/faq.html
@@ -1,5 +1,5 @@
<!--$Id: faq.so,v 10.3 2002/12/10 23:41:42 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ contains the wrapper object.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/mt.html b/db/docs/ref/program/mt.html
index 80321efc4..3dc6666a5 100644
--- a/db/docs/ref/program/mt.html
+++ b/db/docs/ref/program/mt.html
@@ -1,5 +1,5 @@
-<!--$Id: mt.so,v 10.47 2003/05/09 20:14:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: mt.so,v 10.48 2005/07/20 16:34:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -64,7 +64,7 @@ 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.</p>
<p>It is possible to specify the number of attempts that will be made to
-acquire the mutex before waiting. See <a href="../../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a> for
+acquire the mutex before waiting. See <a href="../../api_c/mutex_set_tas_spins.html">DB_ENV-&gt;mutex_set_tas_spins</a> for
more information.</p>
</ol>
<p>When creating multiple databases in a single physical file, multithreaded
@@ -73,6 +73,6 @@ programs may have additional requirements. For more information, see
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/namespace.html b/db/docs/ref/program/namespace.html
index b3b3db7ed..15ca32b88 100644
--- a/db/docs/ref/program/namespace.html
+++ b/db/docs/ref/program/namespace.html
@@ -1,5 +1,5 @@
<!--$Id: namespace.so,v 10.22 2004/03/08 15:09:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ are the digits 0 through 9. Applications should never remove any files
named with the prefix "__db" or "log", other than "__db.###" files.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/ram.html b/db/docs/ref/program/ram.html
index d050577b3..787de5075 100644
--- a/db/docs/ref/program/ram.html
+++ b/db/docs/ref/program/ram.html
@@ -1,62 +1,117 @@
-<!--$Id: ram.so,v 10.6 2004/09/28 13:31:25 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: ram.so,v 10.10 2006/09/19 15:42:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Memory-only configurations</title>
+<title>Berkeley DB Reference Guide: Memory-only or Flash configurations</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,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>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>Memory-only configurations</h3>
-<p>Berkeley DB supports a variety of memory-only configurations, intended for
-systems where filesystem space is limited in availability or entirely
-replaced by some combination of RAM and Flash. There are three database
-environment files that are potentially written to disk: database
-environment shared region files, database files and log files. Each of
-these file types can be individually configured to be created in memory
-rather than on disk.</p>
-<p>First, database environment shared region files. Applications can
-create RAM-only database environments in two different types of memory:
-in application 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
+<h3 align=center>Memory-only or Flash configurations</h3>
+<p>Berkeley DB supports a variety of memory-based configurations for systems
+where filesystem space is either limited in availability or entirely
+replaced by some combination of memory and Flash. In addition, Berkeley DB
+can be configured to minimize writes to the filesystem when the
+filesystem is backed by Flash memory.</p>
+<p>There are three parts of the Berkeley DB database environment normally written
+to the filesystem: the database environment region files, the database
+files and the database environment log files. Each of these items can
+be configured to live in memory rather than in the filesystem:</p>
+<dl compact>
+<dt>The database environment region files:<dd>Each of the Berkeley DB subsystems in a database environment is described by
+one or more regions, or chunks of memory. The regions contain all of the
+per-process and per-thread shared information (including mutexes), that
+comprise a Berkeley DB environment. By default, these regions are backed by
+the filesystem. In situations where filesystem backed regions aren't
+optimal, applications can create memory-only database environments in
+two different types of memory: either in the application's heap memory
+or in system shared memory.
+<p>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. Note that database
+environments created in heap memory are only accessible to the threads
+of a single process, however.</p>
+<p>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>Second, database files. Applications can create RAM-only databases by
-not specifying a physical filename when opening the database using the
-<a href="../../api_c/db_open.html">DB-&gt;open</a> method. Normally, if the database environment cache fills
-up Berkeley DB will create temporary backing files for RAM-only databases.
-Use the <a href="../../api_c/memp_set_flags.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a> flag to the <a href="../../api_c/memp_set_flags.html">DB_MPOOLFILE-&gt;set_flags</a> method to
-configure the cache to never create backing files for a database. Use
-the <a href="../../api_c/memp_set_maxsize.html">DB_MPOOLFILE-&gt;set_maxsize</a> method to limit the size of a database so it
-cannot dirty the entire cache.</p>
-<p>Third, log files. If a database environment is intended to be
-transactionally recoverable after application or system failure (that
-is, if it will exhibit the transactional attribute of "durability"), the
-databases and the database environment log files must either be written
-to the local disk and recovered, or they must be replicated to other
-systems. When durability is not desired, or is accomplished through
-replication, local database environments can be configured for
-transactional behavior without durability, resulting in log files never
-being written to disk. To configure a database environment this way,
-specify the <a href="../../api_c/env_set_flags.html#DB_LOG_INMEMORY">DB_LOG_INMEMORY</a> flag to the
-<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. To configure an individual database in a
-database environment to be transactional but not durable, specify the
-<a href="../../api_c/db_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a> flag to the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method.</p>
+processes, but note that database environments created in system shared
+memory do create a small (roughly 8 byte) file in the filesystem, read
+by the processes to identify which system shared memory segments to
+use.</p>
+<p>For more information, see <a href="../../ref/env/region.html">Shared
+memory regions</a>.</p>
+<dt>The database files:<dd>By default, databases are periodically flushed from the Berkeley DB memory
+cache to backing physical files in the filesystem. To keep databases
+from being written to backing physical files, pass the
+<a href="../../api_c/memp_set_flags.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a> flag to the <a href="../../api_c/memp_set_flags.html">DB_MPOOLFILE-&gt;set_flags</a> method. This flag
+implies the application's databases must fit entirely in the Berkeley DB
+cache, of course. To avoid a database file growing to consume the
+entire cache, applications can limit the size of individual databases
+in the cache by calling the <a href="../../api_c/memp_set_maxsize.html">DB_MPOOLFILE-&gt;set_maxsize</a> method.
+<dt>The database environment log files:<dd>If a database environment is not intended to be transactionally
+recoverable after application or system failure (that is, if it will not
+exhibit the transactional attribute of "durability"), applications
+should not configure the database environment for logging or
+transactions, in which case no log files will be created. If the
+database environment is intended to be durable, log files must either
+be written to stable storage and recovered after application or system
+failure, or they must be replicated to other systems.
+<p>In applications running on systems without any form of stable storage,
+durability must be accomplished through replication. In this case,
+database environments should be configured to maintain database logs in
+memory, rather than in the filesystem, by specifying the
+<a href="../../api_c/env_set_flags.html#DB_LOG_INMEMORY">DB_LOG_INMEMORY</a> flag to the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method.</p>
+</dl>
+<p>In systems where the filesystem is backed by Flash memory, the number
+of times the Flash memory is written may be a concern. Each of the
+three parts of the Berkeley DB database environment normally written to the
+filesystem can be configured to minimize the number of times the
+filesystem is written:</p>
+<dl compact>
+<dt>The database environment region files:<dd>On a Flash-based filesystem, the database environment should be placed
+in heap or system memory, as described previously.
+<dt>The database files:<dd>The Berkeley DB library maintains a cache of database pages. The database
+pages are only written to backing physical files when the application
+checkpoints the database environment with the <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> method,
+when database handles are closed with the <a href="../../api_c/db_close.html">DB-&gt;close</a> method, or when
+the application explicitly flushes the cache with the <a href="../../api_c/db_sync.html">DB-&gt;sync</a>
+or <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> methods.
+<p>To avoid unnecessary writes of Flash memory due to checkpoints,
+applications should decrease the frequency of their checkpoints. This
+is especially important in applications which repeatedly modify a
+specific database page, as repeatedly writing a database page to the
+backing physical file will repeatedly update the same blocks of the
+filesystem.</p>
+<p>To avoid unnecessary writes of the filesystem due to closing a database
+handle, applications should 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.</p>
+<p>To avoid unnecessary writes of the filesystem due to flushing the cache,
+applications should not explicitly flush the cache under normal
+conditions -- flushing the cache is rarely if ever needed in a
+normally-running application.</p>
+<dt>The database environment log files:<dd>The Berkeley DB log files do not repeatedly overwrite the same blocks of the
+filesystem as the Berkeley DB log files are not implemented as a circular
+buffer and log files are not re-used. For this reason, the Berkeley DB log
+files should not cause any difficulties for Flash memory configurations.
+<p>However, as Berkeley DB does not write log records in filesystem block sized
+pieces, it is probable that sequential transaction commits (each of
+which flush the log file to the backing filesystem), will write a block
+of Flash memory twice, as the last log record from the first commit will
+write the same block of Flash memory as the first log record from the
+second commit. Applications not requiring absolute durability should
+specify 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
+to the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method to avoid this overwrite of a block of
+Flash memory.</p>
+</dl>
<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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/runtime.html b/db/docs/ref/program/runtime.html
index e28fbd5ed..4e28009f8 100644
--- a/db/docs/ref/program/runtime.html
+++ b/db/docs/ref/program/runtime.html
@@ -1,5 +1,5 @@
-<!--$Id: runtime.so,v 10.35 2004/03/06 14:49:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: runtime.so,v 10.36 2006/06/08 13:04:29 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -15,11 +15,11 @@
</td></tr></table>
<p>
<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>
+<p>It is possible for applications to configure Berkeley DB at run-time to
+redirect Berkeley DB library and system calls to alternate interfaces. 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>
@@ -42,8 +42,8 @@ interfaces. The following interfaces support this functionality:</p>
<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 available only from the Berkeley DB C language API, and
-are not available from all of the operating systems Berkeley DB supports.</p>
+<p>These interfaces are available only on POSIX platforms and from the
+Berkeley DB C language API.</p>
<p>A not-uncommon problem for applications is the new API in Solaris 2.6
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
@@ -54,6 +54,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/scope.html b/db/docs/ref/program/scope.html
index 5262f3758..c38adf0ac 100644
--- a/db/docs/ref/program/scope.html
+++ b/db/docs/ref/program/scope.html
@@ -1,5 +1,5 @@
<!--$Id: scope.so,v 10.11 2003/10/24 22:27:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -74,6 +74,6 @@ method's return.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/refs/bdb_usenix.html b/db/docs/ref/refs/bdb_usenix.html
index 58e82b573..6ff321119 100644
--- a/db/docs/ref/refs/bdb_usenix.html
+++ b/db/docs/ref/refs/bdb_usenix.html
@@ -1070,7 +1070,7 @@ version 1.4,
<p>
Raymond, E.S.,
&quot;The Cathedral and the Bazaar,&quot;
-<a href="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/cathedral-bazaar.html">
+<a href="http://www.tuxedo.org/~esr/writings/cathedral-bazaar/">
www.tuxedo.org/~esr/writings/cathedral-bazaar/cathedral-bazaar.html</a>,
January 1998.
</td>
diff --git a/db/docs/ref/refs/refs.html b/db/docs/ref/refs/refs.html
index a3251af9d..5b9d764d1 100644
--- a/db/docs/ref/refs/refs.html
+++ b/db/docs/ref/refs/refs.html
@@ -1,5 +1,5 @@
-<!--$Id: refs.so,v 10.26 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: refs.so,v 10.28 2006/08/25 12:55:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,14 +20,14 @@ 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
+of the papers. Oracle Corporation makes them available here as a courtesy
with the permission of the copyright holders.</p>
<dl compact>
<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
paper describes recent commercial releases of Berkeley DB, its most important
-features, the history of the software, and Sleepycat's Open Source
+features, the history of the software, and Sleepycat Software's Open Source
licensing policies.
<dt><i>Challenges in Embedded Database System Administration</i>
(<a href="embedded.html">HTML</a>)<dd>Margo Seltzer and Michael Olson, First Workshop on Embedded Systems,
@@ -72,6 +72,6 @@ from <a href="http://research.microsoft.com/pubs/ccontrol/">http://research.micr
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/refs/witold.html b/db/docs/ref/refs/witold.html
index 3dd53a61f..00a90a45d 100644
--- a/db/docs/ref/refs/witold.html
+++ b/db/docs/ref/refs/witold.html
@@ -1,5 +1,5 @@
<!--$Id: witold.so,v 10.5 2001/06/09 14:34:45 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,6 @@
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/app.html b/db/docs/ref/rep/app.html
index 6ef5b69bc..82734ae42 100644
--- a/db/docs/ref/rep/app.html
+++ b/db/docs/ref/rep/app.html
@@ -1,5 +1,5 @@
-<!--$Id: app.so,v 1.24 2004/11/01 15:35:48 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: app.so,v 1.29 2006/08/25 12:55:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,95 +11,75 @@
<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="../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 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/mgr_meth.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<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>:</p>
-<dl compact>
-<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.
-<dt><a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a><dd>The <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method configures (or reconfigures) an existing database
-environment to be a replication master or client.
-<dt><a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a><dd>The <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method is used to process incoming messages from other
-environments in the replication group. For clients, it is responsible
-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. 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>.
-<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 and the
-application wants the remaining sites to select a new master.
-<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>
-<p>For implementation reasons, all replicated databases must reside in the
-data directories set from <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> or in the default
-environment home directory. If your databases reside in the default
-environment home directory, they must be in the home directory itself,
-not subdirectories below the environment home. Care must be taken in
-applications using relative pathnames and changing working directories
-after opening the environment. In such applications the replication
-initialization code may not be able to locate the databases, and
-applications that change their working directories may need to use
-absolute pathnames.</p>
+Then, add a thin replication layer: application initialization must be
+changed and the application's communication infrastructure must be
+added.</p>
+<p>The application initialization changes are relatively simple.
+Replication Manager provides a communication infrastructure, but
+in order to use the Base replication API you must provide your own.</p>
+<p>For implementation reasons, all replicated databases must reside in
+the data directories set from <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> (or in the
+default environment home directory, if not using
+<a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a>), rather than in a subdirectory below the
+specified directory. Care must be taken in applications using
+relative pathnames and changing working directories after opening the
+environment. In such applications the replication initialization code
+may not be able to locate the databases, and applications that change
+their working directories may need to use absolute pathnames.</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.
-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>
+transactional application.</p>
+<p>Replication Manager applications configure the built-in communications
+infrastructure by calling the <a href="../../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a> method
+once and the <a href="../../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a> method zero or more
+times. Once the environment has been opened, the application starts
+the replication system by calling the <a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a> method.</p>
+<p>If using the Base replication API, the application calls the
+<a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> method to configure the entry point to its own
+communications infrastructure, and then it calls 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 starting the replication system, an application has two choices:
+it may choose the group master site explicitly, or alternatively it
+may configure all group members as clients and then call for an
+election, letting the clients select the master from among
+themselves. Either is correct, and the choice is entirely up to the
+application.</p>
+<p>For an application that uses the Base replication API, 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>
+<p>Replication Manager applications have these same two choices. But
+they configure their start-up behavior simply by setting the flags
+parameter to the <a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a> method.</p>
<p>Consider the case of multiple processes or multiple environment handles
that modify databases in the replicated environment. All modifications
must be done on the master environment. The first process to join or
-create the master environment must call both the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method
-and the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method. Subsequent replication processes must at
-least call the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method. Those processes may call the
-<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method (as long as they use the same master or client
-argument). If multiple processes are modifying the master environment
-there must be a unified communication infrastructure such that messages
-arriving at clients have a single master ID. Additionally the
-application must be structured so that all incoming messages are able
-to be processed by a single <a href="../../api_c/env_class.html">DB_ENV</a> handle.</p>
+create the master environment must call both the
+<a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> method and the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method. Subsequent
+replication processes must at least call the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> method.
+Those processes may call the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method (as long as they use the
+same master or client argument). If multiple processes are modifying
+the master environment there must be a unified communication
+infrastructure such that messages arriving at clients have a single
+master ID. Additionally the application must be structured so that all
+incoming messages are able to be processed by a single <a href="../../api_c/env_class.html">DB_ENV</a>
+handle.</p>
<p>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 configured for
-replication in any way. Processes running in a client environment are
-read-only by definition, and so do not need to be configured for
+call <a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_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 configured
+for replication in any way. Processes running in a client environment
+are read-only by definition, and so do not need to be configured for
replication either (although, in the case of clients that may become
masters, it is usually simplest to configure for replication on process
startup rather than trying to reconfigure when the client becomes a
@@ -112,9 +92,11 @@ 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>
+the environment in the usual manner, by calling the <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method.
+For Replication Manager applications, this also terminates all network
+connections and background processing threads.</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/mgr_meth.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/base_meth.html b/db/docs/ref/rep/base_meth.html
new file mode 100644
index 000000000..1e43c6d67
--- /dev/null
+++ b/db/docs/ref/rep/base_meth.html
@@ -0,0 +1,61 @@
+<!--$Id: base_meth.so,v 1.2 2006/08/24 17:58:53 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Base replication API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../rep/mgr_meth.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>
+<h3 align=center>Base replication API</h3>
+<p>Applications which use the Base replication API use the following
+Berkeley DB methods.</p>
+<dl compact>
+<dt><a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a><dd>The <a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> method configures the replication system's
+communications infrastructure.
+<dt><a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a><dd>The <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method configures (or reconfigures) an existing database
+environment to be a replication master or client.
+<dt><a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a><dd>The <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method is used to process incoming messages from other
+environments in the replication group. For clients, it is responsible
+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. 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>.
+<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 and the
+application wants the remaining sites to select a new master.
+<dt><a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a><dd>The <a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> method configures the local site's priority for
+the purpose of elections.
+<dt><a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a><dd>Note that of all the various timeouts this method can set, only
+<a href="../../api_c/rep_timeout.html#DB_REP_ELECTION_TIMEOUT">DB_REP_ELECTION_TIMEOUT</a> is relevant for applications which use
+the Base replication API. The others are used only by Replication
+Manager.
+<dt><a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a><dd>The <a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_set_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;rep_set_limit</a> to limit the amount of data the master will send
+before relinquishing control and accepting other messages.
+</dl>
+<p>In addition to the methods previously described, applications which use
+the Base replication API may also call the following methods, as needed:
+<a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a>, <a href="../../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a>, <a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a>,
+<a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/mgr_meth.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>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/rep/bulk.html b/db/docs/ref/rep/bulk.html
new file mode 100644
index 000000000..9fe243d0f
--- /dev/null
+++ b/db/docs/ref/rep/bulk.html
@@ -0,0 +1,43 @@
+<!--$Id: bulk.so,v 1.4 2006/07/14 23:04:42 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Bulk transfer</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../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/trans.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Bulk transfer</h3>
+<p>Sites in a replication group may be configured to use bulk transfer by
+calling the <a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a> method with the <a href="../../api_c/rep_config.html#DB_REP_CONF_BULK">DB_REP_CONF_BULK</a>
+flag. When configured for bulk transfer, sites will accumulate records
+in a buffer and transfer them to another site in a single network
+transfer. Configuring bulk transfer makes sense for master sites, of
+course. Additionally, applications using client-to-client
+synchronization may find it helpful to configure bulk transfer for
+client sites as well.</p>
+<p>When a master is generating new log records, or any information request
+is made of a master, and bulk transfer has been configured, records will
+accumulate in a bulk buffer. The bulk buffer will be sent to the client
+if either the buffer is full or if a permanent record (for example, a
+transaction commit or checkpoint record) is queued for the client.</p>
+<p>When a client is responding to another client's request for information,
+and bulk transfer has been configured, records will accumulate in a bulk
+buffer. The bulk buffer will be sent to the client when the buffer is
+full or when the client's request has been satisfied; no particular type
+of record will cause the buffer to be sent.</p>
+<p>The size of the bulk buffer itself is internally determined and cannot
+be configured. However, the overall size of a transfer may be limited
+using the <a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a> method.</p>
+<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/trans.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/rep/comm.html b/db/docs/ref/rep/comm.html
index 78034556f..4ce5833c1 100644
--- a/db/docs/ref/rep/comm.html
+++ b/db/docs/ref/rep/comm.html
@@ -1,5 +1,5 @@
-<!--$Id: comm.so,v 1.13 2004/06/28 14:48:07 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: comm.so,v 1.18 2006/07/14 23:04:42 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,11 +11,14 @@
<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="../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 align=right><a href="../rep/base_meth.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>
<h3 align=center>Building the communications infrastructure</h3>
-<p>The replication support in an application is typically written with one
+<p>Replication Manager provides a built-in communications
+infrastructure.</p>
+<p>For applications that use the Base replication API, which must provide
+their own communications infrastructure, it 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
@@ -23,10 +26,10 @@ 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 function
-specified to the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method.</p>
+specified to the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_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>
+<a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> method, regardless of whether they are running in
+client or server environments. This method specifies the <b>send</b>
function, a callback function used by Berkeley DB for sending messages to
other database environments in the replication group. The <b>send</b>
function takes an environment ID and two opaque data objects. It is the
@@ -40,15 +43,16 @@ each of the control and rec <a href="../../api_c/dbt_class.html">DBT</a>s passed
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. 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>
+broadcast media or when directed by setting the
+<a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_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:</p>
<dl compact>
@@ -61,6 +65,11 @@ calling the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method
<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.
+<dt><a href="../../api_c/rep_message.html#DB_REP_IGNORE">DB_REP_IGNORE</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_IGNORE">DB_REP_IGNORE</a>, it means that
+this message cannot be processed.
+This is normally an indication that this message
+is irrelevant to the current replication state, such as a message
+from an old generation that arrived late.
<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
@@ -71,7 +80,7 @@ contains the maximum LSN of the permanent records written.
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,
the application may need to reconfigure itself (for example, to redirect
-update queries to the new master rather then the old one). If the new
+update queries to the new master rather than the old one). If the new
master is the local environment, then the application must call the
<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method, and reconfigure the supporting Berkeley DB library as a
replication master.
@@ -87,14 +96,9 @@ 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.
-<dt><a href="../../api_c/rep_message.html#DB_REP_STARTUPDONE">DB_REP_STARTUPDONE</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_STARTUPDONE">DB_REP_STARTUPDONE</a>, it means that
-the client has completed its startup synchronization activities and is
-now processing live log messages from the master. Live log messages
-are messages that the master is sending due to operations, as opposed
-to resending log messages due to a request for log records from the client.
</dl>
-<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>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/base_meth.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/elect.html b/db/docs/ref/rep/elect.html
index 5be6fc3cf..645a34081 100644
--- a/db/docs/ref/rep/elect.html
+++ b/db/docs/ref/rep/elect.html
@@ -1,5 +1,5 @@
-<!--$Id: elect.so,v 1.20 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: elect.so,v 1.23 2006/07/14 23:04:42 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,21 +11,22 @@
<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="../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/trans.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/mastersync.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<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 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>
+<p>When using the Base replication API, it is the responsibility of the
+application to initiate elections if desired. 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 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>
<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
@@ -35,9 +36,9 @@ group members that must participate in an election for a winner to be
declared. We recommend at least ((N/2) + 1) members. If fewer than the
simple majority are specified, a warning will be given.</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.
+parameterized in terms of 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
@@ -107,8 +108,11 @@ and reconfigure itself as a client using the <a href="../../api_c/rep_start.html
<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="../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/trans.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>Replication Manager automatically conducts elections when necessary,
+based on configuration information supplied to the
+<a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> method and the <a href="../../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a> method.</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/mastersync.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/ex.html b/db/docs/ref/rep/ex.html
index caedded06..61d75a5b3 100644
--- a/db/docs/ref/rep/ex.html
+++ b/db/docs/ref/rep/ex.html
@@ -1,10 +1,10 @@
-<!--$Id: ex.so,v 1.5 2003/02/06 03:19:11 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: ex.so,v 1.7 2006/07/21 16:31:12 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Ex_repquote: a replication example</title>
+<title>Berkeley DB Reference Guide: Ex_rep: a replication example</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -14,22 +14,29 @@
<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>
-<h3 align=center>Ex_repquote: a replication example</h3>
-<p>Ex_repquote, found in the <b>examples_c/ex_repquote</b> subdirectory
+<h3 align=center>Ex_rep: a replication example</h3>
+<p>Ex_rep, found in the <b>examples_c/ex_rep</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.</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>
-<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>
+master accepts a stock symbol and an numerical value as input, and
+stores this information into a replicated database; either master or
+clients can display the contents of the database, given an empty input
+line.</p>
+<p>There are two versions of the application: ex_rep_mgr uses Replication
+Manager, while ex_rep_base uses the Base replication API. This is
+intended to demonstrate that, while the basic function of the
+application is the same in either case, the replication support
+infrastructure differs markedly.</p>
+<p>The communication infrastructure demonstrated with ex_rep_base has the
+same dependencies on system networking and threading support as does
+the Replication Manager (see the <a href="../../ref/rep/intro.html">Introduction</a>). The Makefile created by the standard UNIX
+configuration will build the ex_rep examples on most platforms. Enter
+"make ex_rep_mgr" and/or "make ex_rep_base" to attempt to build
+them.</p>
+<p>The synopsis for both programs is as follows:</p>
+<pre>ex_rep_xxx [<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>where "ex_rep_xxx" is either "ex_rep_mgr" or "ex_rep_base".</p>
+<p>The options, to either version of the program, are as follows:</p>
<dl compact>
<dt><b>-M</b><dd>Configure this process as a master.
<dt><b>-C</b><dd>Configure this process as a client.
@@ -45,13 +52,13 @@ group.
<dt><b>-p</b><dd>Set the election priority. See <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> for more
information.
</dl>
-<p>A typical ex_repquote session begins with a command such as the
+<p>A typical ex_rep 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:6000</pre></blockquote>
+<blockquote><pre>ex_rep_mgr -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>
+<blockquote><pre>ex_rep_mgr -C -p 50 -n 4 -h DIR2 -m localhost:6001 -o localhost:6000
+ex_rep_mgr -C -p 10 -n 4 -h DIR3 -m localhost:6002 -o localhost:6000
+ex_rep_mgr -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
@@ -60,6 +67,6 @@ having particular clients take over as master in the case that the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 11556a22f..6f9e51ea5 100644
--- a/db/docs/ref/rep/ex_comm.html
+++ b/db/docs/ref/rep/ex_comm.html
@@ -1,10 +1,10 @@
-<!--$Id: ex_comm.so,v 1.6 2002/06/24 14:50:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: ex_comm.so,v 1.9 2006/08/24 17:59:56 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--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>
+<title>Berkeley DB Reference Guide: Ex_rep_base: 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,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -14,32 +14,28 @@
<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>
-<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
-to get and receive messages, and the application architecture that
-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.</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
-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);
-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);
-int machtab_rem(machtab_t *machtab, int eid, int lock);
-</pre></blockquote>
-<p>These interfaces are particular to this application and communication
-infrastructure, but provide an indication of the sort of functionality
+<h3 align=center>Ex_rep_base: a TCP/IP based communication infrastructure</h3>
+<p>
+Applications which use the Base replication API must implement a
+communication infrastructure. The communication infrastructure
+consists of three parts: a way to map environment IDs to particular
+sites, the functions to get and receive messages, and the application
+architecture that 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 for ex_rep_base is implemented in the file
+<b>ex_rep/base/rep_net.c</b>, and each part of that infrastructure
+is described as follows.</p>
+<p>Ex_rep_base maintains a table of environment ID to TCP/IP port
+mappings. A pointer to this table is stored in a structure pointed to
+by 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 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_rep/base/rep_net.c</b>. Each member_t contains the host and
+port identification, the environment ID, and a file descriptor.</p>
+<p>This design is particular to this application and communication
+infrastructure, but provides an indication of the sort of functionality
that is needed to maintain the application-specific state for a
TCP/IP-based infrastructure. The goal of the table and its interfaces
is threefold: First, it must guarantee that given an environment ID,
@@ -55,6 +51,9 @@ 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.</p>
+<p>This is implemented in the quote_send, quote_send_broadcast and
+quote_send_one functions, which can be found in
+<b>ex_rep/base/rep_net.c</b>.</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
@@ -62,95 +61,17 @@ 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.</p>
-<p>In ex_repquote's case, the send function (slightly simplified) is as
-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;
-{
- int fd, n, ret;
- machtab_t *machtab;
- member_t *m;
-<p>
- machtab = (machtab_t *)dbenv-&gt;app_private;
-<p>
- /*
- * If this is a broadcast, call a separate function to
- * iterate through the table of environment (a/k/a
- * machine) IDs and call quote_send_one on each.
- * (This function is not reproduced here, but can be
- * seen in ex_rq_net.c.)
- */
- if (eid == DB_EID_BROADCAST) {
- n = quote_send_broadcast(machtab, rec, control, flags);
- if (n &lt; 0)
- return (DB_REP_UNAVAIL);
- return (0);
- }
-<p>
- /* Find the fild descriptor, fd, associated with this EID. */
- fd = 0;
- if ((ret = pthread_mutex_lock(&machtab-&gt;mtmutex)) != 0)
- return (0);
- for (m = LIST_FIRST(&machtab-&gt;machlist); m != NULL;
- m = LIST_NEXT(m, links)) {
- if (m-&gt;eid == eid) {
- fd = m-&gt;fd;
- break;
- }
- }
- if (pthread_mutex_unlock(&machtab-&gt;mtmutex) != 0)
- return (-1);
-<p>
- if (fd == 0)
- return (DB_REP_UNAVAIL);
-<p>
- /* We have a file descriptor; write the data over it. */
- ret = quote_send_one(rec, control, fd, flags);
-<p>
- return (ret);
-}
-<p>
-int
-quote_send_broadcast(machtab, rec, control, flags)
- machtab_t *machtab;
- const DBT *rec, *control;
- u_int32_t flags;
-{
- int ret, sent;
- member_t *m, *next;
- if ((ret = pthread_mutex_lock(&machtab-&gt;mtmutex)) != 0)
- return (0);
- sent = 0;
- for (m = LIST_FIRST(&machtab-&gt;machlist); m != NULL; m = next) {
- next = LIST_NEXT(m, links);
- if ((ret = quote_send_one(rec, control, m-&gt;fd, flags)) != 0) {
- (void)machtab_rem(machtab, m-&gt;eid, 0);
- } else
- sent++;
- }
- if (pthread_mutex_unlock(&machtab-&gt;mtmutex) != 0)
- return (-1);
- return (sent);
-}</blockquote></pre>
-<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>.</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
-a callback function (the application is responsible for collecting
-messages and calling <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> on them as is convenient). In
-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>.</p>
+<p>The quote_send function is passed as the callback to
+<a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_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 a callback function (the application is responsible
+for collecting messages and calling <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> on them as is
+convenient). In 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>.</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
@@ -159,20 +80,9 @@ 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,
-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.
-<p>
-int listen_socket_init(char *progname, int port): Initialize a socket for
-listening on a particular part.
-<p>
-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>
+in <b>ex_rep/base/rep_net.c</b>).</p>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 112a4ea4d..15a2af88b 100644
--- a/db/docs/ref/rep/ex_rq.html
+++ b/db/docs/ref/rep/ex_rq.html
@@ -1,10 +1,10 @@
-<!--$Id: ex_rq.so,v 1.4 2002/06/24 14:50:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: ex_rq.so,v 1.7 2006/08/24 18:01:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Ex_repquote: putting it all together</title>
+<title>Berkeley DB Reference Guide: Ex_rep_base: putting it all together</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -14,38 +14,21 @@
<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>
-<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.</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.</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);
-}
-dbenv-&gt;set_errfile(dbenv, stderr);
-dbenv-&gt;set_errpfx(dbenv, prefix);
-(void)dbenv-&gt;set_cachesize(dbenv, 0, CACHESIZE, 0);
-<p>
-dbenv-&gt;app_private = machtab;
-(void)dbenv-&gt;set_rep_transport(dbenv, SELF_EID, quote_send);
-<p>
-flags = DB_CREATE | DB_THREAD |
- DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN;
-<p>
-ret = dbenv-&gt;open(dbenv, home, flags, 0);</blockquote></pre>
-<p>ex_repquote opens a listening socket for incoming connections and opens
+<h3 align=center>Ex_rep_base: putting it all together</h3>
+<p>Beyond simply initializing a replicated environment, an application
+that uses the Base replication API must set up its communication
+infrastructure, and then make sure that incoming messages are received
+and processed.</p>
+<p>To initialize replication, ex_rep_base creates a Berkeley DB environment and
+calls <a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> to establish a send function. (See
+the main function in <b>ex_rep/base/rep_base.c</b>, including its
+calls to the create_env and env_init functions in
+<b>ex_rep/common/rep_common.c</b>.)</p>
+<p>ex_rep_base opens a listening socket for incoming connections and opens
an outgoing connection to every machine that it knows about (that is,
all the sites listed in the <b>-o</b> command line argument).
Applications can structure the details of this in different ways, but
-ex_repquote creates a user-level thread to listen on its socket, plus
+ex_rep_base 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
@@ -53,26 +36,10 @@ 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>:</p>
-<pre><blockquote>if (whoami == MASTER) {
- if ((ret = dbenv-&gt;rep_start(dbenv, NULL, DB_REP_MASTER)) != 0) {
- /* Complain and exit on error. */
- }
- /* Go run the master application code. */
-} else {
- memset(&local, 0, sizeof(local));
- local.data = myaddr;
- local.size = strlen(myaddr) + 1;
- if ((ret =
- dbenv-&gt;rep_start(dbenv, &local, DB_REP_CLIENT)) != 0) {
- /* Complain and exit on error. */
- }
- /* Sleep to give ourselves a minute to find a master. */
- sleep(5);
- /* Go run the client application code. */
-}</blockquote></pre>
+<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>. (Again, see the main function in
+<b>ex_rep/base/rep_base.c</b>.)</p>
<p>Note the use of the optional second argument to <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> in
-the client initialization code. The argument "myaddr" is a piece of
+the client initialization code. The argument "local" is a piece of
data, opaque to Berkeley DB, that will be broadcast to each member of a
replication group; it allows new clients to join a replication group,
without knowing the location of all its members; the new client will
@@ -82,155 +49,14 @@ See <a href="../../ref/rep/newsite.html">Connecting to a new site</a> for more
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
-connection; other applications may want to queue messages somehow and
-process them asynchronously, or select() on a number of sockets and
-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>):</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. */
-pthread_t elect_thr; /* Election thread spawned. */
-repsite_t self; /* My host and port identification. */
-int eid; /* Environment from whom I am receiving messages. */
-int fd; /* FD on which I am receiving messages. */
-int master_eid; /* Global indicating the current master eid. */
-int n; /* Number of sites; obtained from machtab_parm. */
-int newm; /* New master EID. */
-int open; /* Boolean indicating if connection already exists. */
-int pri; /* My priority. */
-int r, ret; /* Return values. */
-int timeout; /* My election timeout value. */
-int tmpid; /* Used to call dbenv-&gt;rep_process_message. */
-char *c; /* Temp used in parsing host:port names. */
-char *myaddr; /* My host/port address. */
-char *progname; /* Program name for error messages. */
-void *status; /* Pthread return status. */
-for (ret = 0; ret == 0;) {
- if ((ret = get_next_message(fd, &rec, &control)) != 0) {
- /*
- * There was some sort of network error; close this
- * connection and remove it from the table of
- * environment IDs.
- */
- close(fd);
- if ((ret = machtab_rem(tab, eid, 1)) != 0)
- break;
-<p>
- /*
- * If I'm the master, I just lost a client and this
- * thread is done.
- */
- if (master_eid == SELF_EID)
- break;
-<p>
- /*
- * If I was talking with the master and the master
- * went away, I need to call an election; else I'm
- * done.
- */
- if (master_eid != eid)
- break;
-<p>
- master_eid = DB_EID_INVALID;
- /*
- * In ex_repquote, the environment ID table stores
- * election parameters.
- */
- machtab_parm(tab, &n, &pri, &timeout);
- if ((ret = dbenv-&gt;rep_elect(dbenv,
- n, 0, pri, timeout, &newm, 0)) != 0)
- continue;
-<p>
- /*
- * If I won the election, become the master.
- * Otherwise, just exit.
- */
- if (newm == SELF_EID && (ret =
- dbenv-&gt;rep_start(dbenv, NULL, DB_REP_MASTER)) == 0)
- ret = domaster(dbenv, progname);
- break;
- }
-<p>
- /* If we get here, we have a message to process. */
-<p>
- tmpid = eid;
- switch(r = dbenv-&gt;rep_process_message(dbenv,
- &control, &rec, &tmpid, NULL)) {
- case DB_REP_NEWSITE:
- /*
- * Check if we got sent connect information and if we
- * did, if this is me or if we already have a
- * connection to this new site. If we don't,
- * establish a new one.
- */
-<p>
- /* No connect info. */
- if (rec.size == 0)
- break;
-<p>
- /* It's me, do nothing. */
- if (strncmp(myaddr, rec.data, rec.size) == 0)
- break;
-<p>
- self.host = (char *)rec.data;
- self.host = strtok(self.host, ":");
- if ((c = strtok(NULL, ":")) == NULL) {
- dbenv-&gt;errx(dbenv, "Bad host specification");
- goto err;
- }
- self.port = atoi(c);
-<p>
- /*
- * We try to connect to the new site. If we can't,
- * we treat it as an error since we know that the site
- * should be up if we got a message from it (even
- * indirectly).
- */
- if ((ret = connect_site(dbenv,
- tab, progname, &self, &open, &eid)) != 0)
- goto err;
- break;
- case DB_REP_HOLDELECTION:
- if (master_eid == SELF_EID)
- break;
- /* Make sure that previous election has finished. */
- if (ea != NULL) {
- (void)pthread_join(elect_thr, &status);
- ea = NULL;
- }
- if ((ea = calloc(sizeof(elect_args), 1)) == NULL) {
- ret = errno;
- goto err;
- }
- ea-&gt;dbenv = dbenv;
- ea-&gt;machtab = tab;
- ret = pthread_create(&elect_thr,
- NULL, elect_thread, (void *)ea);
- break;
- case DB_REP_NEWMASTER:
- /* Check if it's us. */
- master_eid = tmpid;
- if (tmpid == SELF_EID) {
- if ((ret = dbenv-&gt;rep_start(dbenv,
- NULL, DB_REP_MASTER)) != 0)
- goto err;
- ret = domaster(dbenv, progname);
- }
- break;
- case 0:
- break;
- default:
- dbenv-&gt;err(dbenv, r, "DBENV-&gt;rep_process_message");
- break;
- }
-}</blockquote></pre>
+ex_rep_base runs one of these loops in a parallel thread for each
+socket connection (see the hm_loop function in
+<b>ex_rep/base/rep_msg.c</b>). Other applications may want to queue
+messages somehow and process them asynchronously, or select() on a
+number of sockets and either look up the correct environment ID for each
+or encapsulate the ID in the communications protocol.</p>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/faq.html b/db/docs/ref/rep/faq.html
index 1797171ea..8dbbd1996 100644
--- a/db/docs/ref/rep/faq.html
+++ b/db/docs/ref/rep/faq.html
@@ -1,5 +1,5 @@
-<!--$Id: faq.so,v 1.9 2003/12/19 18:16:06 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 1.12 2006/09/07 19:26:44 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,11 +19,13 @@
<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
-this functionality, but in general this protocol is left entirely to
-the application. Note, there is no reason not to use the communications
+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.</p>
+database update messages to the master, since Berkeley DB does not require
+those channels to be used exclusively for replication messages.
+Replication Manager does not currently offer this service to the
+application.</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
@@ -48,7 +50,7 @@ for more information).</p>
<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
a socket connected to each remote site. On a fast, local area net, the
-simplest method is likely to be construct broadcast messages. Each
+simplest method is likely to be to construct broadcast messages. Each
Berkeley DB message would be encapsulated inside an application specific
message, with header information specifying the intended recipient(s)
for the message. This will likely require a global numbering scheme,
@@ -99,6 +101,6 @@ no longer have to maintain their own specific network connections.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/id.html b/db/docs/ref/rep/id.html
index f00325b27..66caca346 100644
--- a/db/docs/ref/rep/id.html
+++ b/db/docs/ref/rep/id.html
@@ -1,5 +1,5 @@
-<!--$Id: id.so,v 1.7 2003/10/18 19:16:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: id.so,v 1.8 2006/07/14 23:04:42 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,8 +38,10 @@ broadcast to all members of a replication group.
may be used to initialize environment ID variables that are subsequently
checked for validity.
</dl>
+<p>Replication Manager assigns and manages environment IDs on behalf of
+the application.</p>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/init.html b/db/docs/ref/rep/init.html
new file mode 100644
index 000000000..f7b3d95bd
--- /dev/null
+++ b/db/docs/ref/rep/init.html
@@ -0,0 +1,58 @@
+<!--$Id: init.so,v 1.6 2005/10/19 19:11:20 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--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,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="../rep/mastersync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/bulk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Initializing a new site</h3>
+<p>By default, adding a new site to a replication group only requires the
+client to join. Berkeley DB will automatically perform internal
+initialization from the master to the client, bringing the client into
+sync with the master.</p>
+<p>However, depending on the network and infrastructure, it can be
+advantageous in a few instances to use a "hot backup" to initialize a
+client into a replication group. Clients not wanting to automatically
+perform internal initialization should call the <a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a> method
+with the <a href="../../api_c/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a> flag. This configuration flag
+causes Berkeley DB to return <a href="../../api_c/rep_message.html#DB_REP_JOIN_FAILURE">DB_REP_JOIN_FAILURE</a> to the application's
+<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method instead of performing internal initialization.</p>
+<p>To use a hot backup to initialize a client into a replication group,
+perform the following steps:</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
+backup.
+<p><li>Copy the archival backup into a clean environment directory on the
+client.
+<p><li>Run catastrophic recovery on the client's new environment, as described
+in <a href="../../ref/transapp/recovery.html">Recovery procedures</a>.
+<p><li>Reconfigure and reopen the environment as a client member of the
+replication group.
+</ol>
+<p>If copying the backup to the client takes a long time relative to the
+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.</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.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/mastersync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/bulk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/rep/intro.html b/db/docs/ref/rep/intro.html
index e3e779ee2..72856c6c3 100644
--- a/db/docs/ref/rep/intro.html
+++ b/db/docs/ref/rep/intro.html
@@ -1,5 +1,5 @@
-<!--$Id: intro.so,v 1.8 2003/04/16 20:28:05 margo Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.10 2006/08/24 17:56:26 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,27 +27,38 @@ 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. 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.</p>
+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.</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.</p>
-<p>While Berkeley DB includes the database infrastructure necessary to construct
-highly available database environments, applications must still provide
-some critical components:</p>
+clients to be out of date for an application-controlled amount of
+time.</p>
+<p>There are two ways to build replicated applications. The simpler way
+is to use the Berkeley DB Replication Manager. The Replication Manager
+provides a standard communications infrastructure, and it creates and
+manages the background threads needed for processing replication
+messages. (Note that in Replication Manager applications, all updates
+to databases at the master environment must be done through a single
+DB_ENV environment handle, though they may occur in multiple threads.
+This of course means that only a single process may update data.)</p>
+<p>The Replication Manager implementation is based on TCP/IP sockets, and
+uses POSIX 1003.1 style networking and thread support. (On Windows
+systems, it uses standard Windows thread support.) As a result, it is
+not as portable as the rest of the Berkeley DB library itself.</p>
+<p>The alternative is to use the lower-level "Base" replication API. This
+approach affords more flexibility, but requires the application to
+provide 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
-message-passing over the backplane).
+<p><li>A communication infrastructure. Applications may use whatever wire
+protocol is appropriate for their application (for example, RPC, TCP/IP,
+UDP, VI or message-passing over the backplane).
<p><li>The application is responsible for naming. Berkeley DB refers to the members
of a replication group using an application-provided ID, and
applications must map that ID to a particular database environment or
@@ -59,25 +70,43 @@ 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>
+<p>(Note that Replication Manager does not provide wire security for
+replication messages.)</p>
+<p>The following pages present various programming considerations, many of
+which are directly relevant only for applications which use the Base
+replication API. However, even when using Replication Manager it is
+important to understand the concepts.</p>
<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.3 2004/11/02 20:04:10 bostic Exp $-->
+<!--$Id: m4.methods,v 1.8 2006/09/07 16:17:58 bostic Exp $-->
<table border=1 align=center>
-<tr><th>Replication and Related Methods</th><th>Description</th></tr>
+<tr><th>Replication Manager Methods</th><th>Description</th></tr>
+<!--DbEnv::repmgr_add_remote_site--><tr><td><a href="../../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a></td><td>Specify the replication manager's remote sites</td></tr>
+<!--DbEnv::repmgr_set_ack_policy--><tr><td><a href="../../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a></td><td>Specify the replication manager's client acknowledgement policy</td></tr>
+<!--DbEnv::repmgr_set_local_site--><tr><td><a href="../../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a></td><td>Specify the replication manager's local site</td></tr>
+<!--DbEnv::repmgr_site_list--><tr><td><a href="../../api_c/repmgr_site_list.html">DB_ENV-&gt;repmgr_site_list</a></td><td>List the sites and their status</td></tr>
+<!--DbEnv::repmgr_start--><tr><td><a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a></td><td>Start the replication manager</td></tr>
+<tr><th>Base Replication API</th><th><br></th></tr>
<!--DbEnv::rep_elect--><tr><td><a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
<!--DbEnv::rep_process_message--><tr><td><a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a></td><td>Process a replication message</td></tr>
+<!--DbEnv::rep_start--><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><th>Additional Replication Methods</th><th><br></th></tr>
<!--DbEnv::rep_stat--><tr><td><a href="../../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
+<!--DbEnv::rep_sync--><tr><td><a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a></td><td>Replication synchronization</td></tr>
<tr><th>Replication Configuration</th><th><br></th></tr>
-<!--DbEnv::rep_start--><tr><td><a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
-<!--DbEnv::set_rep_limit--><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>
-<!--DbEnv::set_rep_transport--><tr><td><a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
+<!--DbEnv::rep_set_config--><tr><td><a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a></td><td>Configure the replication subsystem</td></tr>
+<!--DbEnv::rep_set_limit--><tr><td><a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<!--DbEnv::rep_set_nsites--><tr><td><a href="../../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a></td><td>Configure replication group site count</td></tr>
+<!--DbEnv::rep_set_priority--><tr><td><a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a></td><td>Configure replication site priority</td></tr>
+<!--DbEnv::rep_set_timeout--><tr><td><a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a></td><td>Configure replication timeouts</td></tr>
+<!--DbEnv::rep_set_transport--><tr><td><a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a></td><td>Configure replication transport callback</td></tr>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/mastersync.html b/db/docs/ref/rep/mastersync.html
new file mode 100644
index 000000000..91a3e438f
--- /dev/null
+++ b/db/docs/ref/rep/mastersync.html
@@ -0,0 +1,118 @@
+<!--$Id: mastersync.so,v 1.11 2006/08/24 17:59:56 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Synchronizing with a master</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../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/init.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Synchronizing with a master</h3>
+<p>When a client detects a new replication group master, the client must
+synchronize with the new master before the client can process new
+database changes. Synchronizing is a heavyweight operation which can
+place a burden on both the client and the master. There are several
+controls an application can use to reduce the synchronization burden.</p>
+<h3>Delaying client synchronization</h3>
+<p>When a replication group has a new master, either as specified by the
+application or as a result of winning an election, all clients in the
+replication group must synchronize with the new master. This can
+strain the resources of the new master since a large number of clients
+may be attempting to communicate with and transfer records from the
+master. Client applications wanting to delay client synchronization
+should call the <a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a> method with the
+<a href="../../api_c/rep_config.html#DB_REP_CONF_DELAYCLIENT">DB_REP_CONF_DELAYCLIENT</a> flag. The application will be
+notified of the establishment of the new master as usual, but the
+client will not proceed to synchronize with the new master.</p>
+<p>Replication Manager notifies applications of a new master via the
+<a href="../../api_c/env_event_notify.html#DB_EVENT_REP_NEWMASTER">DB_EVENT_REP_NEWMASTER</a> event. Applications using the Base
+replication API learn of a new master 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_NEWMASTER">DB_REP_NEWMASTER</a>.</p>
+<p>Client applications choosing to delay synchronization in this manner are
+responsible for synchronizing the client environment at some future time
+using the <a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a> method.</p>
+<h3>Client-to-client synchronization</h3>
+<p>Instead of synchronizing with the new master, it is sometimes possible
+for a client to synchronize with another client. Berkeley DB initiates
+synchronization at the client by sending a request message via the
+transport call-back function of the communication infrastructure. The
+message is destined for the master site, but is also marked with a
+<a href="../../api_c/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a> flag. The application may choose to send such
+a request to another client, or to ignore the flag, sending it to its
+indicated destination.</p>
+<p>Furthermore, when the other client receives such a request it may be
+unable to satisfy it. In this case it will reply to the requesting
+client, telling it that it is unable to provide the requested
+information. The requesting client will then re-issue the request.
+Additionally, if the original request never reaches the other client,
+the requesting client will again re-issue the request. In either of
+these cases the message will be marked with the <a href="../../api_c/rep_transport.html#DB_REP_REREQUEST">DB_REP_REREQUEST</a>
+flag. The application may continue trying find another client to
+service the request, or it may give up and simply send it to the master
+(that is, the environment ID explicitly specified to the transport
+function).</p>
+<p>Applications written to the Base replication API have complete freedom
+in choosing where to send these <a href="../../api_c/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a> requests, and
+in deciding how to handle <a href="../../api_c/rep_transport.html#DB_REP_REREQUEST">DB_REP_REREQUEST</a>.</p>
+<p>Replication Manager allows an application to designate one remote site
+(called its "peer") to receive client-to-client requests, via the
+flags parameter to the <a href="../../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a> method. Replication
+Manager will always first try to send requests marked with the
+<a href="../../api_c/rep_transport.html#DB_REP_ANYWHERE">DB_REP_ANYWHERE</a> flag to its peer, if available. However, it
+will always send a <a href="../../api_c/rep_transport.html#DB_REP_REREQUEST">DB_REP_REREQUEST</a> to the master site.</p>
+<p>The delayed synchronization and client-to-client synchronization
+features allow applications to do load balancing within replication
+groups. For example, consider a replication group with 5 sites, A, B,
+C, D and E. Site E just crashed, and site A was elected master. Sites
+C and D have been configured for delayed synchronization. When site B
+is notified that site A is a new master, it immediately synchronizes.
+When B finishes synchronizing with the master, the application calls the
+<a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a> method on sites C and D to cause them to synchronize as well.
+Sites C and D (and E, when it has finished rebooting) can send their
+requests to site B, and B then bears the brunt of the work and
+network traffic for synchronization, making master site A available to
+handle the normal application load and any write requests paused by
+the election.</p>
+<h3>Blocked client operations</h3>
+<p>Clients in the process of synchronizing with the master block access to
+Berkeley DB operations. By default, most Berkeley DB methods will block until
+client synchronization is complete, and then the method call proceeds.</p>
+<p>Client applications which cannot wait and would prefer an immediate
+error return instead of blocking, should call the
+<a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a> method with the <a href="../../api_c/rep_config.html#DB_REP_CONF_NOWAIT">DB_REP_CONF_NOWAIT</a> flag. This
+configuration causes <a href="../../api_c/db_class.html">DB</a> method calls to immediately return a
+<a href="../../api_c/db_put.html#DB_REP_LOCKOUT">DB_REP_LOCKOUT</a> error instead of blocking, if the client is
+currently synchronizing with the master.</p>
+<h3>Clients too far out-of-date to synchronize</h3>
+<p>Clients attempting to synchronize with the master may discover that
+synchronization is not possible because the client and master have been
+out of contact for too long. By default, the master and client
+automatically detect this state and perform an internal initialization
+of the client. Because internal initialization requires transfer of
+entire databases to the client, it can take a relatively long period of
+time and may require database handles to be reopened in the client
+applications.</p>
+<p>Client applications which cannot wait and would prefer to postpone
+internal initialization until a more convenient time, or would prefer
+to do a hot backup instead of performing internal initialization, should
+call the <a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a> method with the <a href="../../api_c/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a>
+flag. This configuration flag causes Berkeley DB to return
+<a href="../../api_c/rep_message.html#DB_REP_JOIN_FAILURE">DB_REP_JOIN_FAILURE</a> to the application instead of performing
+internal initialization.</p>
+<p>Client applications choosing to delay synchronization in this manner are
+responsible for synchronizing the client with the master at some future
+time. This can be accomplished by turning off the
+<a href="../../api_c/rep_config.html#DB_REP_CONF_NOAUTOINIT">DB_REP_CONF_NOAUTOINIT</a> flag and calling the <a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a> method,
+or by performing a hot backup.</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/init.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/rep/mgr_meth.html b/db/docs/ref/rep/mgr_meth.html
new file mode 100644
index 000000000..c8a284dee
--- /dev/null
+++ b/db/docs/ref/rep/mgr_meth.html
@@ -0,0 +1,72 @@
+<!--$Id: mgr_meth.so,v 1.8 2006/09/08 18:33:38 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Replication Manager methods</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../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/base_meth.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Replication Manager methods</h3>
+<p>Applications which use the Replication Manager support generally call
+the following Berkeley DB methods. The general pattern is to call various
+methods to configure Replication Manager, and then start it by calling
+<a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a>. Once this initialization is complete, the
+application rarely needs to call any of these methods. (A prime
+example of an exception to this rule would be the <a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a> method,
+if the application is doing <a href="../../ref/rep/mastersync.html">delayed synchronization</a>.)</p>
+<dl compact>
+<dt><a href="../../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a><dd>The <a href="../../api_c/repmgr_local_site.html">DB_ENV-&gt;repmgr_set_local_site</a> method configures the TCP/IP address of
+the local site, by specifying the port number on which it is to listen
+for incoming connection requests. This method must be called exactly
+once before calling <a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a>.
+<dt><a href="../../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a><dd>The <a href="../../api_c/repmgr_remote_site.html">DB_ENV-&gt;repmgr_add_remote_site</a> method adds a remote site to the list of
+sites initially known by the local site. The remote site is specified
+in terms of a TCP/IP network address: host name and port number. This
+method may be called as many times as necessary to configure all known
+remote sites. Note that it is usually not necessary for each site in
+the replication group initially to know about all other sites in the
+group. Sites can discover each other dynamically, as described in
+<a href="../../ref/rep/newsite.html">Connecting to a new site</a>.
+<dt><a href="../../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a><dd>The <a href="../../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a> method configures the acknowledgement
+policy to be used in the replication group, in other words, the
+behavior of the master with respect to acknowledgements for
+"permanent" messages, which implements the application's requirements
+for <a href="../../ref/rep/trans.html">transactional guarantees</a>. The
+current implementation requires all sites in the replication group
+configure the same acknowledgement policy.
+<dt><a href="../../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a><dd>The <a href="../../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a> method tells Replication Manager the total number
+of sites in the replication group. This is usually necessary for
+proper operation of elections, and for counting message
+acknowledgements (depending on the acknowledgement policy).
+<dt><a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a><dd>The <a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> method configures the local site's priority for
+the purpose of elections.
+<dt><a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a><dd>This method optionally configures various timeout values. Otherwise
+default timeout values as specified in <a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a> are
+used.
+<dt><a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a><dd>Once configured and started, Replication Manager does virtually all of
+its work in the background, usually without the need for any direct
+communication with the application. However, occasionally events
+occur which the application may be interested in knowing about. The
+application can request notification of these events by calling the
+<a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a> method.
+<dt><a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a><dd>The <a href="../../api_c/repmgr_start.html">DB_ENV-&gt;repmgr_start</a> method starts the replication system. It opens the
+listening TCP/IP socket and creates all the background processing
+threads that will be needed.
+</dl>
+<p>In addition to the methods previously described, Replication Manager
+applications may also call the following methods, as needed:
+<a href="../../api_c/rep_config.html">DB_ENV-&gt;rep_set_config</a>, <a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a>, <a href="../../api_c/rep_sync.html">DB_ENV-&gt;rep_sync</a>,
+<a href="../../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a>.</p>
+<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/base_meth.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/rep/newsite.html b/db/docs/ref/rep/newsite.html
index d1477eb36..6d53e8a5f 100644
--- a/db/docs/ref/rep/newsite.html
+++ b/db/docs/ref/rep/newsite.html
@@ -1,5 +1,5 @@
-<!--$Id: newsite.so,v 1.5 2004/10/04 18:17:27 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: newsite.so,v 1.7 2006/08/24 17:58:53 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,7 +20,8 @@ is for the client member to join. Berkeley DB will perform an
internal initialization from the master to the client automatically
and will run recovery on the client to bring it up to date
with the master.</p>
-<p>Connecting to a new site in the replication group happens whenever the
+<p>For applications that use the Base replication API, 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
messages from the site passed to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> should include that
@@ -42,8 +43,10 @@ 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>.</p>
+<p>Replication Manager automatically distributes contact information using
+the mechanisms previously described.</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/elect.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/partition.html b/db/docs/ref/rep/partition.html
index 0b2232630..2236f9520 100644
--- a/db/docs/ref/rep/partition.html
+++ b/db/docs/ref/rep/partition.html
@@ -1,5 +1,5 @@
-<!--$Id: partition.so,v 1.1 2001/10/25 20:05:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: partition.so,v 1.6 2006/08/25 12:56:00 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -56,17 +56,25 @@ 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.</p>
+and hold an election. Replication Manager does not currently
+implement such a feature, so this technique is only available to
+applications which use the Base replication API.</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>
+the case of a network partition. By specifying an <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
database environments in the replication group, applications can keep
-systems from declaring themselves the master unless they can talk to at
+systems from declaring themselves the master unless they can talk to
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.</p>
+<p>Replication Manager uses the value of <b>nsites</b> (configured by
+the <a href="../../api_c/rep_nsites.html">DB_ENV-&gt;rep_set_nsites</a> method) for elections as well as in calculating how
+many acknowledgements to wait for when sending a
+<a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> message. So this technique may be useful here
+as well, unless the application uses the <a href="../../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_ALL">DB_REPMGR_ACKS_ALL</a> or
+<a href="../../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_ALL_PEERS">DB_REPMGR_ACKS_ALL_PEERS</a> acknowledgement policies.</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
@@ -76,8 +84,14 @@ the master. A reasonable alternative would be to specify a
<b>nsites</b> argument of 2 to one of the systems and a <b>nsites</b>
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.</p>
+would allow one of the systems to continue accepting write
+queries after the partition.</p>
+<p>In a 2-site group, Replication Manager reacts to the loss of
+communication with the master by assuming the master has crashed: the
+surviving client simply declares itself to be master. Thus it avoids
+the problem of the survivor never being able to get enough votes to
+prevail. But it does leave the group vulnerable to the risk of
+multiple masters, if both sites are running but cannot communicate.</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
@@ -85,6 +99,6 @@ pick a single master, and only hold elections when human intervention
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/pri.html b/db/docs/ref/rep/pri.html
index 3ddd77cc4..b7110db5c 100644
--- a/db/docs/ref/rep/pri.html
+++ b/db/docs/ref/rep/pri.html
@@ -1,5 +1,5 @@
-<!--$Id: pri.so,v 1.6 2003/04/04 18:27:19 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: pri.so,v 1.7 2006/07/14 23:04:42 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,8 +18,10 @@
<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>
+determining which environment will be selected as a new master in case
+the existing master fails. Both Replication Manager applications and
+applications which use the Base replication API should specify
+environment priorities.</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
@@ -34,6 +36,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/trans.html b/db/docs/ref/rep/trans.html
index c78ddb416..ad0a6bef3 100644
--- a/db/docs/ref/rep/trans.html
+++ b/db/docs/ref/rep/trans.html
@@ -1,5 +1,5 @@
-<!--$Id: trans.so,v 1.15 2003/12/19 18:16:06 sue Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: trans.so,v 1.18 2006/08/24 17:58:53 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,7 +11,7 @@
<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="../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/partition.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/bulk.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>
<h3 align=center>Transactional guarantees</h3>
@@ -127,6 +127,22 @@ master environment, specification of <a href="../../api_c/env_set_flags.html#DB_
client environment, the priorities of different sites participating in
an election, and the behavior of the application's <b>send</b>
function.</p>
+<p>Applications using Replication Manager are free to use
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> at the master and/or clients as they see fit. The
+behavior of the <b>send</b> function that Replication Manager provides
+on the application's behalf is determined by an "acknowledgement
+policy", which is configured by the <a href="../../api_c/repmgr_ack_policy.html">DB_ENV-&gt;repmgr_set_ack_policy</a> method.
+Clients always send acknowledgements for <a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a>
+messages (unless the acknowledgement policy in effect indicates that the
+master doesn't care about them). For a <a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a>
+message, the master blocks the sending thread until either it receives
+the proper number of acknowledgements, or the <a href="../../api_c/rep_timeout.html#DB_REP_ACK_TIMEOUT">DB_REP_ACK_TIMEOUT</a>
+expires. In the case of timeout, Replication Manager returns an error
+code from the <b>send</b> function, causing Berkeley DB to flush the
+transaction log before returning to the application, as previously
+described. The default acknowledgement policy is
+<a href="../../api_c/repmgr_ack_policy.html#DB_REPMGR_ACKS_QUORUM">DB_REPMGR_ACKS_QUORUM</a>, which ensures that the effect of a
+permanent record remains durable following an election.</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
@@ -233,8 +249,8 @@ 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/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/partition.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/bulk.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/client.html b/db/docs/ref/rpc/client.html
index b2bbe3c3c..7e0e3cffe 100644
--- a/db/docs/ref/rpc/client.html
+++ b/db/docs/ref/rpc/client.html
@@ -1,5 +1,5 @@
<!--$Id: client.so,v 1.12 2003/10/18 19:16:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -79,6 +79,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/faq.html b/db/docs/ref/rpc/faq.html
index bfc8796ce..e20b7c4d6 100644
--- a/db/docs/ref/rpc/faq.html
+++ b/db/docs/ref/rpc/faq.html
@@ -1,5 +1,5 @@
<!--$Id: faq.so,v 1.3 2004/10/05 16:44:35 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ client timeout value.</p>
</ol>
<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="../tcl/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/intro.html b/db/docs/ref/rpc/intro.html
index cb0fdcfd3..10d798c83 100644
--- a/db/docs/ref/rpc/intro.html
+++ b/db/docs/ref/rpc/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.17 2004/08/18 19:57:37 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -74,6 +74,6 @@ database resides.
</ol>
<table width="100%"><tr><td><br></td><td align=right><a href="../sequence/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/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/server.html b/db/docs/ref/rpc/server.html
index 86dc5d9f7..f4da0c572 100644
--- a/db/docs/ref/rpc/server.html
+++ b/db/docs/ref/rpc/server.html
@@ -1,5 +1,5 @@
<!--$Id: server.so,v 1.8 2002/06/17 18:38:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,6 +50,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/sequence/intro.html b/db/docs/ref/sequence/intro.html
index 3f7a6beef..d3d1ba5a6 100644
--- a/db/docs/ref/sequence/intro.html
+++ b/db/docs/ref/sequence/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.4 2004/10/18 19:46:31 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,7 +39,7 @@ specified to the <a href="../../api_c/seq_get.html">DB_SEQUENCE-&gt;get</a> meth
sequence value must be part of a transaction, and rolled back if the
transaction aborts, then no caching should be specified and the
transaction handle must be passed to the <a href="../../api_c/seq_get.html">DB_SEQUENCE-&gt;get</a> method.</p>
-<!--$Id: m4.methods,v 1.6 2004/11/02 20:04:10 bostic Exp $-->
+<!--$Id: m4.methods,v 1.7 2004/11/29 15:34:22 bostic Exp $-->
<table border=1 align=center>
<tr><th>Sequences and Related Methods</th><th>Description</th></tr>
<!--DbSequence::--><tr><td><a href="../../api_c/seq_class.html">db_sequence_create</a></td><td>Create a sequence handle</td></tr>
@@ -47,7 +47,7 @@ transaction handle must be passed to the <a href="../../api_c/seq_get.html">DB_S
<!--DbSequence::get--><tr><td><a href="../../api_c/seq_get.html">DB_SEQUENCE-&gt;get</a></td><td>Get the next sequence element(s)</td></tr>
<!--DbSequence::get_dbp--><tr><td><a href="../../api_c/seq_open.html">DB_SEQUENCE-&gt;get_dbp</a></td><td>Return a handle for the underlying sequence database</td></tr>
<!--DbSequence::get_key--><tr><td><a href="../../api_c/seq_open.html">DB_SEQUENCE-&gt;get_key</a></td><td>Return the key for a sequence</td></tr>
-<!--DbSequence::init_value--><tr><td><a href="../../api_c/seq_init_value.html">DB_SEQUENCE-&gt;init_value</a></td><td>Set the initial value of a sequence</td></tr>
+<!--DbSequence::initial_value--><tr><td><a href="../../api_c/seq_initial_value.html">DB_SEQUENCE-&gt;initial_value</a></td><td>Set the initial value of a sequence</td></tr>
<!--DbSequence::open--><tr><td><a href="../../api_c/seq_open.html">DB_SEQUENCE-&gt;open</a></td><td>Open a sequence</td></tr>
<!--DbSequence::remove--><tr><td><a href="../../api_c/seq_remove.html">DB_SEQUENCE-&gt;remove</a></td><td>Remove a sequence</td></tr>
<!--DbSequence::stat--><tr><td><a href="../../api_c/seq_stat.html">DB_SEQUENCE-&gt;stat</a></td><td>Return sequence statistics</td></tr>
@@ -58,6 +58,6 @@ transaction handle must be passed to the <a href="../../api_c/seq_get.html">DB_S
</table>
<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/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/error.html b/db/docs/ref/tcl/error.html
index 82f14ea65..bb1b9fc96 100644
--- a/db/docs/ref/tcl/error.html
+++ b/db/docs/ref/tcl/error.html
@@ -1,5 +1,5 @@
<!--$Id: error.so,v 11.17 2001/06/19 19:45:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -66,6 +66,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/faq.html b/db/docs/ref/tcl/faq.html
index 39974ddde..244f452ca 100644
--- a/db/docs/ref/tcl/faq.html
+++ b/db/docs/ref/tcl/faq.html
@@ -1,5 +1,5 @@
<!--$Id: faq.so,v 11.10 2004/10/05 16:44:35 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ file built by Tcl does not.</p>
</ol>
<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="../ext/mod.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/intro.html b/db/docs/ref/tcl/intro.html
index e88c08daf..6ce5795cb 100644
--- a/db/docs/ref/tcl/intro.html
+++ b/db/docs/ref/tcl/intro.html
@@ -1,5 +1,5 @@
-<!--$Id: intro.so,v 11.23 2004/10/05 16:44:35 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 11.25 2006/06/06 17:21:17 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,12 +18,13 @@
<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>
+download a copy of Tcl from the <a href="http://www.tcl.tk">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
+<a href="../../ref/build_win/intro.html">Building for Windows</a> for more
information.</p>
<h3>Installing as a Tcl Package</h3>
<p>Once enabled, the Berkeley DB shared library for Tcl is automatically installed
@@ -37,21 +38,21 @@ several steps that must be performed:</p>
</ol>
<p>For example:</p>
<blockquote><pre># tclsh8.4
-% lappend auto_path /usr/local/BerkeleyDB.4.3/lib
-% pkg_mkIndex /usr/local/BerkeleyDB.4.3/lib libdb_tcl-4.3.so</pre></blockquote>
+% lappend auto_path /usr/local/BerkeleyDB.4.5/lib
+% pkg_mkIndex /usr/local/BerkeleyDB.4.5/lib libdb_tcl-4.5.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 <b>load</b> command. For example:</p>
-<blockquote><pre>load /usr/local/BerkeleyDB.4.3/lib/libdb_tcl-4.3.so</pre></blockquote>
+<blockquote><pre>load /usr/local/BerkeleyDB.4.5/lib/libdb_tcl-4.5.so</pre></blockquote>
<p>Note that your Berkeley DB version numbers may differ from the example, and so
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 <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.4.3/lib"
+<blockquote><pre>lappend auto_path "/usr/local/BerkeleyDB.4.5/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 the Berkeley DB functionality is accessed via this
@@ -62,6 +63,6 @@ display the library version, as follows:</p>
<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="../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/using.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/program.html b/db/docs/ref/tcl/program.html
index 8b794af00..8c3903335 100644
--- a/db/docs/ref/tcl/program.html
+++ b/db/docs/ref/tcl/program.html
@@ -1,5 +1,5 @@
-<!--$Id: program.so,v 11.12 2001/03/13 20:39:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: program.so,v 11.15 2006/07/24 17:46:17 sue Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,10 @@
<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.</p>
+<p>The Tcl API currently does not support multithreading although
+it could be made to do so. The Tcl shell itself is
+not multithreaded and the Berkeley DB extensions use global data unprotected
+from multiple threads.</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
@@ -26,6 +30,6 @@ supported via the Tcl API. For example, there is no equivalent to the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/using.html b/db/docs/ref/tcl/using.html
index dc4210e3c..4ff23608f 100644
--- a/db/docs/ref/tcl/using.html
+++ b/db/docs/ref/tcl/using.html
@@ -1,5 +1,5 @@
<!--$Id: using.so,v 11.9 2004/11/03 16:38:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -50,6 +50,6 @@ list the correct operations for a command or the correct options.</p>
<a href="../../api_tcl/api_tcl.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/test/faq.html b/db/docs/ref/test/faq.html
index 0e8ae43dc..b8eee9572 100644
--- a/db/docs/ref/test/faq.html
+++ b/db/docs/ref/test/faq.html
@@ -1,5 +1,5 @@
<!--$Id: faq.so,v 10.5 2003/03/19 20:20:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ run is making forward progress and new lines are being written to the
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/test/run.html b/db/docs/ref/test/run.html
index 43b99fd16..0632a16b9 100644
--- a/db/docs/ref/test/run.html
+++ b/db/docs/ref/test/run.html
@@ -1,5 +1,5 @@
-<!--$Id: run.so,v 10.45 2003/12/10 16:24:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: run.so,v 10.47 2005/12/08 13:41:55 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -12,7 +12,7 @@
<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 align=right><a href="../upgrade.4.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="../test/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.5/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>
<h3 align=center>Running the test suite</h3>
@@ -54,8 +54,8 @@ 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.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="../test/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/toc.html b/db/docs/ref/toc.html
index bdd4a945a..2ed354545 100644
--- a/db/docs/ref/toc.html
+++ b/db/docs/ref/toc.html
@@ -1,14 +1,14 @@
-<!--$Id: toc.html,v 10.271 2004/10/18 20:10:41 bostic Exp $-->
+<!--$Id: toc.html,v 10.286 2006/09/20 16:04:05 bostic Exp $-->
<html>
<head>
-<title>Berkeley DB Reference Guide (Version: 4.3.27)</title>
+<title>Berkeley DB Reference Guide (Version: 4.5.20)</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
</head>
<body bgcolor=white>
<center>
-<h2><b>Berkeley DB Reference Guide, Version 4.3.27</b></h2>
+<h2><b>Berkeley DB Reference Guide, Version 4.5.20</b></h2>
</center>
<ol>
@@ -22,7 +22,7 @@
<li><a href="intro/what.html">What other services does Berkeley DB provide?</a>
<li><a href="intro/distrib.html">What does the Berkeley DB distribution include?</a>
<li><a href="intro/where.html">Where does Berkeley DB run?</a>
- <li><a href="intro/products.html">Sleepycat Software's Berkeley DB products</a>
+ <li><a href="intro/products.html">The Berkeley DB products</a>
</ol>
<font size="+1"><li><a name="am_conf">Access Method Configuration</a></font>
<ol>
@@ -131,6 +131,7 @@
<font size="+1"><li><a name="cam">Berkeley DB Concurrent Data Store Applications</a></font>
<ol>
<li><a href="cam/intro.html">Berkeley DB Concurrent Data Store applications</a>
+ <li><a href="cam/fail.html">Handling failure in Data Store and Concurrent Data Store applications</a>
<li><a href="cam/app.html">Architecting Data Store and Concurrent Data Store applications</a>
</ol>
<font size="+1"><li><a name="transapp">Berkeley DB Transactional Data Store Applications</a></font>
@@ -138,6 +139,7 @@
<li><a href="transapp/intro.html">Berkeley DB Transactional Data Store applications</a>
<li><a href="transapp/why.html">Why transactions?</a>
<li><a href="transapp/term.html">Terminology</a>
+ <li><a href="transapp/fail.html">Handling failure in Transactional Data Store applications</a>
<li><a href="transapp/app.html">Architecting Transactional Data Store applications</a>
<li><a href="transapp/env_open.html">Opening the environment</a>
<li><a href="transapp/data_open.html">Opening the databases</a>
@@ -160,21 +162,26 @@
<li><a href="transapp/throughput.html">Transaction throughput</a>
<li><a href="transapp/faq.html">Transaction FAQ</a>
</ol>
-<font size="+1"><li><a name="transapp">Berkeley DB Replication</a></font>
+<font size="+1"><li><a name="rep">Berkeley DB Replication</a></font>
<ol>
<li><a href="rep/intro.html">Introduction</a>
<li><a href="rep/id.html">Replication environment IDs</a>
<li><a href="rep/pri.html">Replication environment priorities</a>
<li><a href="rep/app.html">Building replicated applications</a>
+ <li><a href="rep/mgr_meth.html">Replication Manager methods</a>
+ <li><a href="rep/base_meth.html">Base replication API</a>
<li><a href="rep/comm.html">Building the communications infrastructure</a>
<li><a href="rep/newsite.html">Connecting to a new site</a>
<li><a href="rep/elect.html">Elections</a>
+ <li><a href="rep/mastersync.html">Synchronizing with a master</a>
+ <li><a href="rep/init.html">Initializing a new site</a>
+ <li><a href="rep/bulk.html">Bulk transfer</a>
<li><a href="rep/trans.html">Transactional guarantees</a>
<li><a href="rep/partition.html">Network partitions</a>
<li><a href="rep/faq.html">Replication FAQ</a>
- <li><a href="rep/ex.html">Ex_repquote: a replication example</a>
- <li><a href="rep/ex_comm.html">Ex_repquote: a TCP/IP based communication infrastructure</a>
- <li><a href="rep/ex_rq.html">Ex_repquote: putting it all together</a>
+ <li><a href="rep/ex.html">Ex_rep: a replication example</a>
+ <li><a href="rep/ex_comm.html">Ex_rep_base: a TCP/IP based communication infrastructure</a>
+ <li><a href="rep/ex_rq.html">Ex_rep_base: putting it all together</a>
</ol>
<font size="+1"><li><a name="xa">Distributed Transactions</a></font>
<ol>
@@ -199,9 +206,9 @@
<li><a href="program/mt.html">Multithreaded applications</a>
<li><a href="program/scope.html">Berkeley DB handles</a>
<li><a href="program/namespace.html">Name spaces</a>
- <li><a href="program/ram.html">Memory-only configurations</a>
+ <li><a href="program/ram.html">Memory-only or Flash configurations</a>
<li><a href="program/cache.html">Disk drive caches</a>
- <li><a href="program/copy.html">Copying databases</a>
+ <li><a href="program/copy.html">Copying or moving databases</a>
<li><a href="program/compatible.html">Compatibility with historic UNIX interfaces</a>
<li><a href="program/runtime.html">Run-time configuration</a>
<li><a href="program/faq.html">Programmer notes FAQ</a>
@@ -250,7 +257,7 @@
<li><a href="rpc/server.html">Server program</a>
<li><a href="rpc/faq.html">RPC FAQ</a>
</ol>
-<font size="+1"><li><a name="tcl">Tcl API</a></font>
+<font size="+1"><li><a name="tcl">Berkeley DB Extensions: Tcl</a></font>
<ol>
<li><a href="tcl/intro.html">Loading Berkeley DB with Tcl</a>
<li><a href="tcl/using.html">Using Berkeley DB with Tcl</a>
@@ -307,10 +314,9 @@
<a href="build_unix/sunos.html">SunOS</a>,
<a href="build_unix/ultrix.html">Ultrix</a>
</ol>
-<font size="+1"><li><a name="build_win">Building Berkeley DB for Win32 systems</a></font>
+<font size="+1"><li><a name="build_win">Building Berkeley DB for Windows systems</a></font>
<ol>
- <li><a href="build_win/intro.html">Building for Win32</a>
- <li><a href="build_win/unicode.html">Unicode support</a>
+ <li><a href="build_win/intro.html">Building for Windows</a>
<li><a href="build_win/small.html">Building a small memory footprint library</a>
<li><a href="build_win/test.html">Running the test suite under Windows</a>
<li><a href="build_win/notes.html">Windows notes</a>
@@ -318,7 +324,7 @@
</ol>
<font size="+1"><li><a name="build_vxworks">Building Berkeley DB for VxWorks systems</a></font>
<ol>
- <li><a href="build_vxworks/intro.html">Building for VxWorks 5.4</a>
+ <li><a href="build_vxworks/intro.html">Building for VxWorks 5.4 and 5.5</a>
<li><a href="build_vxworks/notes.html">VxWorks notes</a>
<li><a href="build_vxworks/faq.html">VxWorks FAQ</a>
</ol>
@@ -345,6 +351,10 @@
Upgrading Berkeley DB 4.1.X applications to Berkeley DB 4.2</a>
<li><a href="upgrade.4.3/toc.html">
Upgrading Berkeley DB 4.2.X applications to Berkeley DB 4.3</a>
+ <li><a href="upgrade.4.4/toc.html">
+ Upgrading Berkeley DB 4.3.X applications to Berkeley DB 4.4</a>
+ <li><a href="upgrade.4.5/toc.html">
+ Upgrading Berkeley DB 4.4.X applications to Berkeley DB 4.5</a>
</ol>
<font size="+1"><li><a name="test">Test Suite</a></font>
<ol>
diff --git a/db/docs/ref/transapp/admin.html b/db/docs/ref/transapp/admin.html
index e64723e5c..7ba2b80ee 100644
--- a/db/docs/ref/transapp/admin.html
+++ b/db/docs/ref/transapp/admin.html
@@ -1,5 +1,5 @@
<!--$Id: admin.so,v 10.17 2001/03/02 21:01:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -43,6 +43,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/app.html b/db/docs/ref/transapp/app.html
index 6062139e7..a1a875e64 100644
--- a/db/docs/ref/transapp/app.html
+++ b/db/docs/ref/transapp/app.html
@@ -1,5 +1,5 @@
-<!--$Id: app.so,v 10.11 2004/10/13 19:38:47 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: app.so,v 10.28 2006/02/28 16:30:53 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,119 +11,206 @@
<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="../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 align=right><a href="../transapp/fail.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>
<h3 align=center>Architecting Transactional Data Store applications</h3>
-<p>When building transactionally protected applications, there are some
-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 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.
-<li>Clean up any partially completed operations that may have left a
-database in an inconsistent or corrupted state.
-</ul>
-<p>The Berkeley DB library cannot determine whether recovery is required; the
-application must make that decision. Furthermore, recovery must be
-single-threaded; that is, one thread of control or process must perform
-recovery before any other thread of control or process attempts to join
-the Berkeley DB environment.</p>
-<p>There are two approaches to handling this problem:</p>
-<dl compact>
-<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
-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
-on the type of environment created. If the environment is public and
-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>
-<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 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
-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
-<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,
-and closed after all threads but one have exited. The last thread of
-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 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
-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.)</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
-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 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 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.</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 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 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>
+<p>When building Transactional Data Store applications, the architecture
+decisions involve application startup (running recovery) and handling
+system or application failure. For details on performing recovery,
+see the <a href="recovery.html">Recovery procedures</a>.</p>
+<p>Recovery in a database environment is a single-threaded procedure, that
+is, one thread of control or process must complete database environment
+recovery before any other thread of control or process operates in the
+Berkeley DB environment. It may simplify matters that Berkeley DB serializes
+recovery and creation of a new database environment.</p>
+<p>Performing recovery first marks any existing database environment as
+"failed" and then removes it, causing threads of control running in the
+database environment to fail and return to the application. This
+feature allows applications to recover environments without concern for
+threads of control that might still be running in the removed
+environment. The subsequent re-creation of the database environment is
+serialized, so multiple threads of control attempting to create a
+database environment will serialize behind a single creating thread.</p>
+<p>One consideration in removing (as part of recovering) a database
+environment which may be in use by another thread, is the type of mutex
+being used by the Berkeley DB library. In the case of database environment
+failure when using test-and-set mutexes, threads of control waiting on
+a mutex when the environment is marked "failed" will quickly notice the
+failure and will return an error from the Berkeley DB API. In the case of
+environment failure when using blocking mutexes, where the underlying
+system mutex implementation does not unblock mutex waiters after the
+thread of control holding the mutex dies, threads waiting on a mutex
+when an environment is recovered might hang forever. Applications
+blocked on events (for example, an application blocked on a network
+socket, or a GUI event) may also fail to notice environment recovery
+within a reasonable amount of time. Systems with such mutex
+implementations are rare, but do exist; applications on such systems
+should use an application architecture where the thread recovering the
+database environment can explicitly terminate any process using the
+failed environment, or configure Berkeley DB for test-and-set mutexes, or
+incorporate some form of long-running timer or watchdog process to wake
+or kill blocked processes should they block for too long.</p>
+<p>Regardless, it makes little sense for multiple threads of control to
+simultaneously attempt recovery of a database environment, since the
+last one to run will remove all database environments created by the
+threads of control that ran before it. However, for some applications,
+it may make sense for applications to have a single thread of control
+that performs recovery and then removes the database environment, after
+which the application launches a number of processes, any of which will
+create the database environment and continue forward.</p>
+<p>There are three common ways to architect Berkeley DB Transactional Data Store
+applications. The one chosen is usually based on whether or not the
+application is comprised of a single process or group of processes
+descended from a single process (for example, a server started when the
+system first boots), or if the application is comprised of unrelated
+processes (for example, processes started by web connections or users
+logged into the system).</p>
+<ol>
+<p><li>The first way to architect Transactional Data Store applications is as
+a single process (the process may or may not be multithreaded.)
+<p>When this process starts, it runs recovery on the database environment
+and then opens its databases. The application can subsequently create
+new threads of control as it chooses. Those threads of control can
+either share already open Berkeley DB <a href="../../api_c/env_class.html">DB_ENV</a> and <a href="../../api_c/db_class.html">DB</a> handles,
+or create their own. In this architecture, 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, and closed after
+all threads but one have exited. The last thread of control to exit
+closes the databases and the database environment.</p>
+<p>This architecture is simplest to implement because thread serialization
+is easy and failure detection does not require monitoring multiple
+processes.</p>
+<p>If the application's thread model allows processes to continue after
+thread failure, the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method can be used to determine if
+the database environment is usable after thread failure. If the
+application does not call <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>, or
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the application
+must behave as if there has been a system failure, performing recovery
+and re-creating the database environment. Once these actions have been
+taken, other threads of control can continue (as long as all existing
+Berkeley DB handles are first discarded), or restarted.</p>
+<p><li>The second way to architect Transactional Data Store applications is as
+a group of related processes (the processes may or may not be
+multithreaded).
+<p>This architecture requires the order in which threads of control are
+created be controlled to serialize database environment recovery.</p>
+<p>In addition, this architecture requires that threads of control be
+monitored. If any thread of control exits with open Berkeley DB handles, the
+application may call the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method to detect lost mutexes
+and locks and determine if the application can continue. If the
+application does not call <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>, or
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns that the database environment can no
+longer be used, the application must behave as if there has been a
+system failure, performing recovery and creating a new database
+environment. Once these actions have been taken, other threads of
+control can be continued (as long as all existing Berkeley DB handles are
+first discarded), or restarted.</p>
+<p>The easiest way to structure groups of related processes is to first
+create a single "watcher" process (often a script) that starts when the
+system first boots, runs recovery on the database environment and then
+creates the processes or threads that will actually perform work. The
+initial thread has no further responsibilities other than to wait on the
+threads of control it has started, to ensure none of them unexpectedly
+exit. If a thread of control exits, the watcher process optionally
+calls the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method. If the application does not call
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> or if <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns that the
+environment can no longer be used, the watcher kills all of the threads
+of control using the failed environment, runs recovery, and starts new
+threads of control to perform work.</p>
+<p><li>The third way to architect Transactional Data Store applications is as
+a group of unrelated processes (the processes may or may not be
+multithreaded). This is the most difficult architecture to implement
+because of the level of difficulty in some systems of finding and
+monitoring unrelated processes.
+<p>One solution is to log a thread of control ID when a new Berkeley DB handle
+is opened. For example, an initial "watcher" process could run recovery
+on the database environment and then create a sentinel file. Any
+"worker" process wanting to use the environment would check for the
+sentinel file. If the sentinel file does not exist, the worker would
+fail or wait for the sentinel file to be created. Once the sentinel
+file exists, the worker would register its process ID with the watcher
+(via shared memory, IPC or some other registry mechanism), and then the
+worker would open its <a href="../../api_c/env_class.html">DB_ENV</a> handles and proceed. When the
+worker finishes using the environment, it would unregister its process
+ID with the watcher. The watcher periodically checks to ensure that no
+worker has failed while using the environment. If a worker fails while
+using the environment, the watcher removes the sentinel file, kills all
+of the workers currently using the environment, runs recovery on the
+environment, and finally creates a new sentinel file.</p>
+<p>The weakness of this approach is that, on some systems, it is difficult
+to determine if an unrelated process is still running. For example,
+POSIX systems generally disallow sending signals to unrelated processes.
+The trick to monitoring unrelated processes is to find a system resource
+held by the process that will be modified if the process dies. On POSIX
+systems, flock- or fcntl-style locking will work, as will LockFile on
+Windows systems. Other systems may have to use other process-related
+information such as file reference counts or modification times. In the
+worst case, threads of control can be required to periodically
+re-register with the watcher process: if the watcher has not heard from
+a thread of control in a specified period of time, the watcher will take
+action, recovering the environment.</p>
+<p>The Berkeley DB library includes one built-in implementation of this approach,
+the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method's <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a> flag:</p>
+<p>If the <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a> flag is set, each process opening the
+database environment first checks to see if recovery needs to be
+performed. If recovery needs to be performed for any reason (including
+the initial creation of the database environment), and
+<a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> is also specified, recovery will be performed and
+then the open will proceed normally. If recovery needs to be performed
+and <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> is not specified, <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> will be
+returned. If recovery does not need to be performed, <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a>
+will be ignored.</p>
+<p>There are two additional requirements for the <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a>
+architecture to work: First, all applications using the database
+environment must specify the <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a> flag when opening the
+environment. However, there is no additional requirement the
+application choose a single process to recover the environment, as the
+first process to open the database environment will know to perform
+recovery. Second, there can only be a single <a href="../../api_c/env_class.html">DB_ENV</a> handle per
+database environment in each process. As the <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a>
+locking is per-process, not per-thread, multiple <a href="../../api_c/env_class.html">DB_ENV</a> handles
+in a single environment could race with each other, potentially causing
+data corruption.</p>
+<p>A second solution for groups of unrelated processes is also based on a
+"watcher process". This solution is intended for systems where it is
+not practical to monitor the processes sharing a database environment,
+but it is possible to monitor the environment to detect if a thread of
+control has failed holding open Berkeley DB handles. This would be done by
+having a "watcher" process periodically call the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method.
+If <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns that the environment can no longer be
+used, the watcher would then take action, recovering the environment.</p>
+<p>The weakness of this approach is that all threads of control using the
+environment must specify an "ID" function and an "is-alive" function
+using the <a href="../../api_c/env_set_thread_id.html">DB_ENV-&gt;set_thread_id</a> method. (In other words, the Berkeley DB
+library must be able to assign a unique ID to each thread of control,
+and additionally determine if the thread of control is still running.
+It can be difficult to portably provide that information in applications
+using a variety of different programming languages and running on a
+variety of different platforms.)</p>
+<p>The two described approaches are different, and should not be combined.
+Applications might use either the <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a> approach or the
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> approach, but not both together in the same
+application. For example, a POSIX application written as a library
+underneath a wide variety of interfaces and differing APIs might choose
+the <a href="../../api_c/env_open.html#DB_REGISTER">DB_REGISTER</a> approach for a few reasons: first, it does not
+require making periodic calls to the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method; second,
+when implementing in a variety of languages, is may be more difficult
+to specify unique IDs for each thread of control; third, it may be more
+difficult determine if a thread of control is still running, as any
+particular thread of control is likely to lack sufficient permissions
+to signal other processes. Alternatively, an application with a
+dedicated watcher process, running with appropriate permissions, might
+choose the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> approach as supporting higher overall
+throughput and reliability, as that approach allows the application to
+abort unresolved transactions and continue forward without having to
+recover the database environment.</p>
+</ol>
+<p>Obviously, when implementing a process to monitor other threads of
+control, it is important the watcher process' code be as simple and
+well-tested as possible, because the application may hang if it fails.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/fail.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/archival.html b/db/docs/ref/transapp/archival.html
index 12bb0490d..b505c5e62 100644
--- a/db/docs/ref/transapp/archival.html
+++ b/db/docs/ref/transapp/archival.html
@@ -1,5 +1,5 @@
-<!--$Id: archival.so,v 10.54 2004/04/14 16:18:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: archival.so,v 10.56 2005/02/10 20:02:41 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -101,6 +101,8 @@ backup.</p>
<p>After completing one of these two sets of steps, the database
environment can be recovered from catastrophic failure (see
<a href="recovery.html">Recovery procedures</a> for more information).</p>
+<p>For an example of a hot backup implementation in the Berkeley DB distribution,
+see the source code for the <a href="../../utility/db_hotbackup.html">db_hotbackup</a> utility.</p>
<p>To update either a hot or cold backup so that recovery from catastrophic
failure is possible to a new point in time, repeat step #2 under the
hot backup instructions and archive <b>all</b> of the log files in the
@@ -155,6 +157,6 @@ log_archlist(DB_ENV *dbenv)
}</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/atomicity.html b/db/docs/ref/transapp/atomicity.html
index 979424bdf..5bedba078 100644
--- a/db/docs/ref/transapp/atomicity.html
+++ b/db/docs/ref/transapp/atomicity.html
@@ -1,5 +1,5 @@
<!--$Id: atomicity.so,v 10.3 2002/05/17 15:48:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ items in different orders greatly increases the likelihood of operations
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/checkpoint.html b/db/docs/ref/transapp/checkpoint.html
index 458b55398..0aecb0d4f 100644
--- a/db/docs/ref/transapp/checkpoint.html
+++ b/db/docs/ref/transapp/checkpoint.html
@@ -1,5 +1,5 @@
<!--$Id: checkpoint.so,v 10.22 2003/12/09 18:57:46 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -88,7 +88,7 @@ main(int argc, char *argv)
<p>
add_cat(dbenv, db_cats,
"Amy Adams",
- "Sleepycat Software",
+ "Oracle Corporation",
"abyssinian",
"bengal",
"chartreaux",
@@ -120,6 +120,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/cursor.html b/db/docs/ref/transapp/cursor.html
index 48c0606fa..4118429f1 100644
--- a/db/docs/ref/transapp/cursor.html
+++ b/db/docs/ref/transapp/cursor.html
@@ -1,5 +1,5 @@
<!--$Id: cursor.so,v 1.12 2004/03/05 21:47:36 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -66,7 +66,7 @@ main(int argc, char *argv)
<p>
<b> add_cat(dbenv, db_cats,
"Amy Adams",
- "Sleepycat Software",
+ "Oracle Corporation",
"abyssinian",
"bengal",
"chartreaux",
@@ -164,6 +164,6 @@ retry: /* Begin the transaction. */
}</b></pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cdd1a201f..ddafb4b1e 100644
--- a/db/docs/ref/transapp/data_open.html
+++ b/db/docs/ref/transapp/data_open.html
@@ -1,5 +1,5 @@
<!--$Id: data_open.so,v 1.13 2004/04/28 13:15:29 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -138,6 +138,6 @@ the database, 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/deadlock.html b/db/docs/ref/transapp/deadlock.html
index 3fb213c81..453667ba5 100644
--- a/db/docs/ref/transapp/deadlock.html
+++ b/db/docs/ref/transapp/deadlock.html
@@ -1,5 +1,5 @@
<!--$Id: deadlock.so,v 10.20 2002/06/24 14:51:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -105,6 +105,6 @@ deadlocked transactions will be forced to abort when the deadlock is
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8e502e9a0..a3fe3298e 100644
--- a/db/docs/ref/transapp/env_open.html
+++ b/db/docs/ref/transapp/env_open.html
@@ -1,5 +1,5 @@
<!--$Id: env_open.so,v 1.4 2002/06/24 14:51:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -171,6 +171,6 @@ Txn Region: 5.
0 Locks granted after waiting.</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/fail.html b/db/docs/ref/transapp/fail.html
new file mode 100644
index 000000000..cd359331b
--- /dev/null
+++ b/db/docs/ref/transapp/fail.html
@@ -0,0 +1,72 @@
+<!--$Id: fail.so,v 10.2 2005/10/19 21:10:31 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Handling failure in Transactional Data Store applications</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../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/app.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Handling failure in Transactional Data Store applications</h3>
+<p>When building Transactional Data Store applications, there are design
+issues to consider whenever a thread of control with open Berkeley DB handles
+fails for any reason (where a thread of control may be either a true
+thread or a process).</p>
+<p>The first case is handling system failure: if the system fails, the
+database environment and the databases may be left in a corrupted state.
+In this case, recovery must be performed on the database environment
+before any further action is taken, in order to:</p>
+<p><ul type=disc>
+<li>recover the database environment resources,
+<li>release any locks or mutexes that may have been held to avoid starvation
+as the remaining threads of control convoy behind the held locks, and
+<li>resolve any partially completed operations that may have left a database
+in an inconsistent or corrupted state.
+</ul>
+<p>For details on performing recovery, see the <a href="recovery.html">Recovery
+procedures</a>.</p>
+<p>The second case is handling the failure of a thread of control. There
+are resources maintained in database environments that may be left
+locked or corrupted if a thread of control exits unexpectedly. These
+resources include data structure mutexes, logical database locks and
+unresolved transactions (that is, transactions which were never aborted
+or committed). While Transactional Data Store applications can treat
+the failure of a thread of control in the same way as they do a system
+failure, they have an alternative choice, the <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method.</p>
+<p>The <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method will return <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> if the
+database environment is unusable as a result of the thread of control
+failure. (If a data structure mutex or a database write lock is left
+held by thread of control failure, the application should not continue
+to use the database environment, as subsequent use of the environment
+is likely to result in threads of control convoying behind the held
+locks.) The <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> call will release any database read
+locks that have been left held by the exit of a thread of control, and
+abort any unresolved transactions. In this case, the application can
+continue to use the database environment.</p>
+<p>A Transactional Data Store application recovering from a thread of
+control failure should call <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a>, and, if it returns
+success, the application can continue. If <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> returns
+<a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, the application should proceed as described for
+the case of system failure.</p>
+<p>It greatly simplifies matters that recovery may be performed regardless
+of whether recovery needs to be performed; that is, it is not an error
+to recover a database environment for which recovery is not strictly
+necessary. For this reason, applications should not try to determine
+if the database environment was active when the application or system
+failed. Instead, applications should run recovery any time the
+<a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method returns <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, or, if the
+application is not calling <a href="../../api_c/env_failchk.html">DB_ENV-&gt;failchk</a> method, any time any thread
+of control accessing the database environment fails, as well as any time
+the system reboots.</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/app.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/transapp/faq.html b/db/docs/ref/transapp/faq.html
index 7aafc851d..7a5aa3417 100644
--- a/db/docs/ref/transapp/faq.html
+++ b/db/docs/ref/transapp/faq.html
@@ -1,5 +1,5 @@
-<!--$Id: faq.so,v 10.8 2004/03/16 18:33:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.11 2006/05/09 19:46:59 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -67,14 +67,33 @@ 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.</p>
+<p><li><b>My application has <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> errors. Is the
+normal, and what should I do?</b>
+<p>It is quite rare for a transactional application to be deadlock free.
+All applications should be prepared to handle deadlock returns, because
+even if the application is deadlock free when deployed, future changes
+to the application or the Berkeley DB implementation might introduce
+deadlocks.</p>
+<p>Practices which reduce the chance of deadlock include:
+<p><ul type=disc>
+<li>Not using cursors which move backwards through the database (<a href="../../api_c/dbc_get.html#DB_PREV">DB_PREV</a>),
+as backward scanning cursors can deadlock with page splits;
+<li>Configuring <a href="../../api_c/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a> to turn off reverse splits in
+applications which repeatedly delete and re-insert the same keys, to
+minimize the number of page splits as keys are re-inserted;
+<li>Not configuring <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> as that flag requires write
+transactions upgrade their locks when aborted, which can lead to deadlock.
+Generally, <a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a> or non-transactional read operations
+are less prone to deadlock than <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a>.
+</ul></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
-cannot be simply moved into different database environments. To move
-a database into a different environment, dump and reload the database
+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 using the <b>-l</b> argument to the
-<a href="../../utility/db_load.html">db_load</a> utility.</p>
+database may be prepared in place using the <a href="../../api_c/env_lsn_reset.html">DB_ENV-&gt;lsn_reset</a> method or
+the <b>-r</b> argument to the <a href="../../utility/db_load.html">db_load</a> utility.</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
@@ -83,15 +102,15 @@ shut down your database environment as gracefully as possible, first
flushing the database environment cache to disk, if that's possible.
Then, dump and reload your databases. If the database is too large to
dump and reload, the database may be reset in place using the
-<b>-l</b> argument to the <a href="../../utility/db_load.html">db_load</a>
-utility. However, if you reset the database in place, you should verify
-your databases before using them again. (It is possible for the
-databases to be corrupted by running after all of the log files have
-been removed, and the longer the application runs, the worse it can
-get.)</p>
+<a href="../../api_c/env_lsn_reset.html">DB_ENV-&gt;lsn_reset</a> method or the <b>-r</b> argument to the
+<a href="../../utility/db_load.html">db_load</a> utility. However, if you
+reset the database in place, you should verify your databases before
+using them again. (It is possible for the databases to be corrupted by
+running after all of the log files have been removed, 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="../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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/filesys.html b/db/docs/ref/transapp/filesys.html
index 785949974..c7ea82a2c 100644
--- a/db/docs/ref/transapp/filesys.html
+++ b/db/docs/ref/transapp/filesys.html
@@ -1,5 +1,5 @@
<!--$Id: filesys.so,v 10.35 2002/02/05 18:34:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ recovery be performed from the filesystem operations forward.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/hotfail.html b/db/docs/ref/transapp/hotfail.html
index fba3f4da8..63068b3b7 100644
--- a/db/docs/ref/transapp/hotfail.html
+++ b/db/docs/ref/transapp/hotfail.html
@@ -1,5 +1,5 @@
-<!--$Id: hotfail.so,v 10.3 2003/11/23 02:06:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: hotfail.so,v 10.5 2005/02/10 20:02:41 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -76,8 +76,10 @@ catastrophically recover the copied environment.
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.</p>
+<p>For an example of a hot backup implementation in the Berkeley DB distribution,
+see the source code for the <a href="../../utility/db_hotbackup.html">db_hotbackup</a> utility.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/inc.html b/db/docs/ref/transapp/inc.html
index ca1b0e623..9db9e45da 100644
--- a/db/docs/ref/transapp/inc.html
+++ b/db/docs/ref/transapp/inc.html
@@ -1,5 +1,5 @@
-<!--$Id: inc.so,v 1.16 2003/11/20 02:19:33 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: inc.so,v 1.17 2006/08/31 15:26:59 ubell Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,7 +38,7 @@ 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
+transaction finishes, guaranteeing that all writers
will block, waiting for the first thread's transaction to complete (or
to be aborted).</p>
<p>Here is an example function that does transaction-protected increments
@@ -165,6 +165,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/intro.html b/db/docs/ref/transapp/intro.html
index 0d73ab408..0b3579aac 100644
--- a/db/docs/ref/transapp/intro.html
+++ b/db/docs/ref/transapp/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.39 2004/10/13 13:40:59 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,6 @@ 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/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/why.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/logfile.html b/db/docs/ref/transapp/logfile.html
index e6817d1d2..4bdc68906 100644
--- a/db/docs/ref/transapp/logfile.html
+++ b/db/docs/ref/transapp/logfile.html
@@ -1,5 +1,5 @@
<!--$Id: logfile.so,v 11.9 2002/11/13 21:49:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,6 +53,6 @@ opportunity to copy the log files to backup media.
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/nested.html b/db/docs/ref/transapp/nested.html
index 5e9010fb5..e60f495f4 100644
--- a/db/docs/ref/transapp/nested.html
+++ b/db/docs/ref/transapp/nested.html
@@ -1,5 +1,5 @@
<!--$Id: nested.so,v 10.23 2003/01/24 18:01:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -60,6 +60,6 @@ transactions that are not yet resolved when the parent prepares are also
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/put.html b/db/docs/ref/transapp/put.html
index 91dc84973..c9aa41001 100644
--- a/db/docs/ref/transapp/put.html
+++ b/db/docs/ref/transapp/put.html
@@ -1,5 +1,5 @@
-<!--$Id: put.so,v 1.16 2003/11/05 19:05:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: put.so,v 1.20 2006/04/24 17:26:33 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -127,12 +127,14 @@ 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>
+thread of control. For example, consider the case in which an
+application uses a cursor scan to locate a record and then the
+application accesses another other item in the database, based on the
+key returned by the cursor, without first closing the cursor. If these
+operations are done using 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 database 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
@@ -174,30 +176,29 @@ Applications must immediately call <a href="../../api_c/txn_abort.html">DB_TXN-&
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;)
+<p>The above code can be simplified in the case of a transaction comprised
+entirely of a single database put or delete operation, as operations
+occurring in transactional databases are implicitly transaction
+protected. For example, in a transactional database, 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, 0)) == DB_LOCK_DEADLOCK;)
;
return (ret == 0 ? 0 : 1);</b></pre></blockquote>
+<p>and the underlying transaction would be automatically handled by Berkeley DB.</p>
<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
+situation. Alternatively, using the <a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/read.html b/db/docs/ref/transapp/read.html
index 146d3c14a..af5f72075 100644
--- a/db/docs/ref/transapp/read.html
+++ b/db/docs/ref/transapp/read.html
@@ -1,5 +1,5 @@
-<!--$Id: read.so,v 1.8 2004/01/12 05:33:23 ubell Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: read.so,v 1.14 2006/09/13 14:30:56 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,52 +17,107 @@
<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. This is also know as <i>degree 3 isolation</i>.</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>
+<i>Serializable</i> provides the most isolation, and means 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). By default,
+Berkeley DB enforces serializability whenever database reads are wrapped in
+transactions. This is also known as <i>degree 3 isolation</i>.</p>
+<p>Most applications do not need to enclose all reads in transactions, and
+when possible, transactionally protected reads at serializable isolation
+should be avoided as they can cause performance problems. For example,
+a serializable 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>
+<p><i>Snapshot isolation</i> also guarantees repeatable reads, but
+avoids read locks by using multiversion concurrency control (MVCC).
+This makes update operations more expensive, because they have to
+allocate space for new versions of pages in cache and make copies, but
+avoiding read locks can significantly increase throughput for many
+applications. Snapshot isolation is discussed in detail below.</p>
<a name="3"><!--meow--></a>
<a name="4"><!--meow--></a>
<a name="5"><!--meow--></a>
<a name="6"><!--meow--></a>
-<p>A transaction may only require <i>cursor stability</i>, that is
-only be guaranteed that cursors see committed data that does
-not change so long as it is addressed by the cursor, but may
-change before the reading transaction completes. This is
-also called <i>degree 2 isolation</i>. Berkeley DB provides
-this level of isolation when a transaction is started with
-the <a href="../../api_c/db_cursor.html#DB_DEGREE_2">DB_DEGREE_2</a> flag. This flag may also be specified
-when opening a cursor within a fully isolated transaction.</p>
+<p>A transaction may only require <i>cursor stability</i>, that is only
+be guaranteed that cursors see committed data that does not change so
+long as it is addressed by the cursor, but may change before the reading
+transaction completes. This is also called <i>degree 2
+isolation</i>. Berkeley DB provides this level of isolation when a transaction
+is started with the <a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a> flag. This flag may also
+be specified when opening a cursor within a fully isolated
+transaction.</p>
<a name="7"><!--meow--></a>
<a name="8"><!--meow--></a>
+<a name="9"><!--meow--></a>
+<a name="10"><!--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>
+committed by another transaction. This is also called <i>degree
+1 isolation</i>. This is done by first specifying the
+<a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag when opening the underlying database,
+and then specifying the <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</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_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</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>
+<a name="11"><!--meow--></a>
+<a name="12"><!--meow--></a>
+<a name="13"><!--meow--></a>
+<h3>Snapshot Isolation</h3>
+<p>To make use of snapshot isolation, databases must first be configured
+for multiversion access by calling <a href="../../api_c/db_open.html">DB-&gt;open</a> with the
+<a href="../../api_c/db_open.html#DB_MULTIVERSION">DB_MULTIVERSION</a> flag. Then transactions or cursors must be
+configured with the <a href="../../api_c/txn_begin.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a> flag.</p>
+<p>When configuring an environment for snapshot isolation, it is important
+to realize that having multiple versions of pages in cache means that
+the working set will take up more of the cache. As a result, snapshot
+isolation is best suited for use with larger cache sizes.</p>
+<p>If the cache becomes full of page copies before the old copies can be
+discarded, additional I/O will occur as pages are written to temporary
+"freezer" files. This can substantially reduce throughput, and should
+be avoided if possible by configuring a large cache and keeping snapshot
+isolation transactions short. The amount of cache required to avoid
+freezing buffers can be estimated by taking a checkpoint followed by a
+call to <a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a>. The amount of cache required is
+approximately double the size of logs that remains.</p>
+<p>The environment should also be configured for sufficient transactions
+using <a href="../../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a>. The maximum number of transactions
+needs to include all transactions executed concurrently by the
+application plus all cursors configured for snapshot isolation.
+Further, the transactions are retained until the last page they created
+is evicted from cache, so in the extreme case, an additional transaction
+may be needed for each page in the cache.</p>
+<p>So when <i>should</i> applications use snapshot isolation?
+<p><ul type=disc>
+<li>There is a large cache relative to size of updates performed by
+concurrent transactions; and
+<li>Read/write contention is limiting the throughput of the application;
+or
+<li>The application is all or mostly read-only, and contention for the lock
+manager mutex is limiting throughput.
+</ul></p>
+<p>The simplest way to take advantage of snapshot isolation is for queries:
+keep update transactions using full read/write locking and set
+<a href="../../api_c/txn_begin.html#DB_TXN_SNAPSHOT">DB_TXN_SNAPSHOT</a> on read-only transactions or cursors. This
+should minimize blocking of snapshot isolation transactions and will
+avoid introducing new <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> errors.</p>
+<p>If the application has update transactions which read many items and
+only update a small set (for example, scanning until a desired record is
+found, then modifying it), throughput may be improved by running some
+updates at snapshot isolation as well.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/reclimit.html b/db/docs/ref/transapp/reclimit.html
index 5ebb63259..82e22da96 100644
--- a/db/docs/ref/transapp/reclimit.html
+++ b/db/docs/ref/transapp/reclimit.html
@@ -1,5 +1,5 @@
-<!--$Id: reclimit.so,v 11.30 2003/11/20 15:14:04 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: reclimit.so,v 11.32 2005/06/16 17:13:55 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,7 +42,7 @@ underlying stable storage hardware.
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
-data to disk (normally <b>fsync</b>(2)), must guarantee that all the
+data to disk (normally fsync or fdatasync), 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.</p>
@@ -145,6 +145,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/recovery.html b/db/docs/ref/transapp/recovery.html
index 74b304b2f..aa4f09cf2 100644
--- a/db/docs/ref/transapp/recovery.html
+++ b/db/docs/ref/transapp/recovery.html
@@ -1,5 +1,5 @@
-<!--$Id: recovery.so,v 10.34 2004/04/17 13:03:46 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: recovery.so,v 10.35 2005/06/16 17:52:20 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,9 +44,9 @@ may be restarted.</p>
<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. However, the normal recovery case
+filesystem, normal recovery is 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. However, the normal recovery case
<b>never</b> includes recovery using hot backups of the database
environment. For example, you cannot perform a hot backup of databases
and log files, restore the backup and then run normal recovery -- you
@@ -92,6 +92,6 @@ pathnames.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/term.html b/db/docs/ref/transapp/term.html
index b1243ed5f..e325d04de 100644
--- a/db/docs/ref/transapp/term.html
+++ b/db/docs/ref/transapp/term.html
@@ -1,5 +1,5 @@
-<!--$Id: term.so,v 10.18 2001/03/13 19:45:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: term.so,v 10.19 2005/09/23 16:26:40 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,7 +11,7 @@
<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="../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 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/fail.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<h3 align=center>Terminology</h3>
@@ -58,8 +58,8 @@ 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 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>
+<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/fail.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/throughput.html b/db/docs/ref/transapp/throughput.html
index 67d8fb7fc..d864c8cc4 100644
--- a/db/docs/ref/transapp/throughput.html
+++ b/db/docs/ref/transapp/throughput.html
@@ -1,5 +1,5 @@
<!--$Id: throughput.so,v 10.31 2002/04/02 17:07:05 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -120,6 +120,6 @@ program</a> for IEEE/ANSI Std 1003.1 (POSIX) standard systems is included in the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/transapp.cs b/db/docs/ref/transapp/transapp.cs
index e4f37d77b..79b9f4f3a 100644
--- a/db/docs/ref/transapp/transapp.cs
+++ b/db/docs/ref/transapp/transapp.cs
@@ -81,7 +81,7 @@ main(int argc, char *argv[])
add_cat(dbenv, db_cats,
"Amy Adams",
- "Sleepycat Software",
+ "Oracle Corporation",
"394 E. Riding Dr., Carlisle, MA 01741, USA",
"abyssinian",
"bengal",
diff --git a/db/docs/ref/transapp/tune.html b/db/docs/ref/transapp/tune.html
index 594f79a46..3d3942535 100644
--- a/db/docs/ref/transapp/tune.html
+++ b/db/docs/ref/transapp/tune.html
@@ -1,5 +1,5 @@
-<!--$Id: tune.so,v 11.21 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: tune.so,v 11.24 2006/08/08 05:24:09 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,43 +30,44 @@ when using the Btree access method than when using either the Hash or
Recno access methods.
<dt>record numbers<dd>Using record numbers outside of the Queue access method will often slow
down concurrent applications as they limit the degree of concurrency
-available in the database.
-Using the Recno access method, or the Btree access
-method with retrieval by record number configured can slow applications
-down.
+available in the database. Using the Recno access method, or the Btree
+access method with retrieval by record number configured can slow
+applications down.
<dt>Btree database size<dd>When using the Btree access method, applications supporting concurrent
access may see excessive numbers of deadlocks in small databases. There
are two different approaches to resolving this problem. First, as the
Btree access method uses page-level locking, decreasing the database
page size can result in fewer lock conflicts. Second, in the case of
databases that are cyclically growing and shrinking, turning off reverse
-splits can leave the database with enough pages that there will be fewer
-lock conflicts.
-<dt>transactionally protected read operations<dd>Most applications do not need repeatable reads. Performing all read
-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.
+splits (with <a href="../../api_c/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a>) can leave the database with enough
+pages that there will be fewer lock conflicts.
+<dt>read locks<dd>Performing all read operations outside of transactions or at
+<a href="../../ref/transapp/read.html">snapshot isolation</a> 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.
<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.
-<dt><a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a>, <a href="../../api_c/db_cursor.html#DB_DEGREE_2">DB_DEGREE_2</a><dd>Consider decreasing the level of isolation of transaction using the
-<a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> or <a href="../../api_c/db_cursor.html#DB_DEGREE_2">DB_DEGREE_2</a> flags for transactions or cursors
-or the <a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag on individual read operations.
-Degree 2 isolation will release read
-locks on cursors as soon as the data page is nolonger referenced.
-This will tend to block write operations for shorter periods for
-applications that do not need to have repeatable reads for
-cursor operations.
-The dirty read flag allows read operations to
+<dt><a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a>, <a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a><dd>Consider decreasing the level of isolation of transaction using the
+<a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> or <a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a> flags for
+transactions or cursors or the <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag on
+individual read operations. The <a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a> flag will
+release read locks on cursors as soon as the data page is nolonger
+referenced. This is also called <i>degree 2 isolation</i>. This
+will tend to block write operations for shorter periods for applications
+that do not need to have repeatable reads for cursor operations.
+<p>The <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a> flag will allow read operations to
potentially return data which has been modified but not yet committed,
and can significantly increase application throughput in applications
that do not require data be guaranteed to be permanent in the database.
-<dt><a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a><dd>Consider using the <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag to immediate acquire write locks
-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.
+This is also called <i>degree 1 isolation</i>, or <i>dirty
+reads</i>.</p>
+<dt><a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a><dd>If there are many deadlocks, consider using the <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag to
+immediate acquire write locks 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.
<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
@@ -101,14 +102,13 @@ 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
+selected, it may be 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>
+<a href="../../api_c/mutex_set_tas_spins.html">DB_ENV-&gt;mutex_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>
+<a href="../../api_c/mutex_set_align.html">DB_ENV-&gt;mutex_set_align</a> method.</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
@@ -137,6 +137,6 @@ the overall throughput of the application.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/why.html b/db/docs/ref/transapp/why.html
index a7c29da80..5f629763a 100644
--- a/db/docs/ref/transapp/why.html
+++ b/db/docs/ref/transapp/why.html
@@ -1,5 +1,5 @@
<!--$Id: why.so,v 1.7 2003/11/04 14:53:27 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,6 +35,6 @@ other transactions either completed before or after its transaction.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/writetest.cs b/db/docs/ref/transapp/writetest.cs
index 0d00cbe44..8971a4e7c 100644
--- a/db/docs/ref/transapp/writetest.cs
+++ b/db/docs/ref/transapp/writetest.cs
@@ -1,7 +1,7 @@
/*
* writetest --
*
- * $Id: writetest.cs,v 10.7 2003/02/27 19:08:37 bostic Exp $
+ * $Id: writetest.cs,v 10.8 2005/09/13 18:15:36 bostic Exp $
*/
#include <sys/types.h>
#include <sys/time.h>
@@ -13,7 +13,7 @@
#include <string.h>
#include <unistd.h>
-void usage __P((void));
+void usage(void);
int
main(argc, argv)
diff --git a/db/docs/ref/txn/config.html b/db/docs/ref/txn/config.html
index c7d5a918e..f99821181 100644
--- a/db/docs/ref/txn/config.html
+++ b/db/docs/ref/txn/config.html
@@ -1,5 +1,5 @@
<!--$Id: config.so,v 10.19 2002/07/22 05:11:58 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -36,6 +36,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/txn/intro.html b/db/docs/ref/txn/intro.html
index 92fe85fcc..d6ec9b906 100644
--- a/db/docs/ref/txn/intro.html
+++ b/db/docs/ref/txn/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.25 2003/10/18 19:16:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -73,7 +73,7 @@ transaction subsystem. It is the programmatic interface used by the
<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">DB_ENV-&gt;remove</a> method.</p>
-<!--$Id: m4.methods,v 1.5 2004/11/03 15:52:02 bostic Exp $-->
+<!--$Id: m4.methods,v 1.6 2005/03/16 21:26:51 bostic Exp $-->
<table border=1 align=center>
<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
<!--DbEnv::txn_checkpoint--><tr><td><a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
@@ -91,10 +91,11 @@ transaction subsystem. It is the programmatic interface used by the
<!--DbTxn::discard--><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>
<!--DbTxn::id--><tr><td><a href="../../api_c/txn_id.html">DB_TXN-&gt;id</a></td><td>Return a transaction's ID</td></tr>
<!--DbTxn::prepare--><tr><td><a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<!--DbTxn::set_name--><tr><td><a href="../../api_c/txn_set_name.html">DB_TXN-&gt;set_name</a></td><td>Associate a string with a transaction</td></tr>
<!--DbTxn::set_timeout--><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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/txn/limits.html b/db/docs/ref/txn/limits.html
index e48e63963..97c4cbc56 100644
--- a/db/docs/ref/txn/limits.html
+++ b/db/docs/ref/txn/limits.html
@@ -1,5 +1,5 @@
<!--$Id: limits.so,v 10.38 2004/08/18 19:57:37 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ 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="../sequence/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 706a8bd15..80cf51e30 100644
--- a/db/docs/ref/upgrade.2.0/convert.html
+++ b/db/docs/ref/upgrade.2.0/convert.html
@@ -1,5 +1,5 @@
<!--$Id: convert.so,v 11.6 2000/03/18 21:43:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -70,6 +70,6 @@ additional functionality supplied by Berkeley DB version 2, as it is likely to
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e0a09e0c3..2655765bf 100644
--- a/db/docs/ref/upgrade.2.0/disk.html
+++ b/db/docs/ref/upgrade.2.0/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 11.6 2000/12/05 20:36:25 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ environments did not exist prior to the 2.0 release, there is no
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 836c11318..dad1cb3df 100644
--- a/db/docs/ref/upgrade.2.0/intro.html
+++ b/db/docs/ref/upgrade.2.0/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 11.9 2004/09/28 14:13:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ version 2 library. The underlying databases must be converted, however,
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b634edfdd..d247810ed 100644
--- a/db/docs/ref/upgrade.2.0/system.html
+++ b/db/docs/ref/upgrade.2.0/system.html
@@ -1,5 +1,5 @@
<!--$Id: system.so,v 11.5 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -80,6 +80,6 @@ since you have removed that from the library as well.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bc79d5f82..7fdf55ee8 100644
--- a/db/docs/ref/upgrade.2.0/toc.html
+++ b/db/docs/ref/upgrade.2.0/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 11.5 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7a0b0f6e6..b8876de92 100644
--- a/db/docs/ref/upgrade.3.0/close.html
+++ b/db/docs/ref/upgrade.3.0/close.html
@@ -1,5 +1,5 @@
<!--$Id: close.so,v 11.10 2002/03/06 15:51:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ database. Alternatively, the caller can ignore any error return of
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 adf0cec5f..465a13a2a 100644
--- a/db/docs/ref/upgrade.3.0/cxx.html
+++ b/db/docs/ref/upgrade.3.0/cxx.html
@@ -1,5 +1,5 @@
<!--$Id: cxx.so,v 11.5 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ and Java APIs much closer in terms of functionality and usage. Please
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5dbdc27d0..bc25c2ca8 100644
--- a/db/docs/ref/upgrade.3.0/db.html
+++ b/db/docs/ref/upgrade.3.0/db.html
@@ -1,5 +1,5 @@
-<!--$Id: db.so,v 11.9 2000/12/01 17:57:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db.so,v 11.10 2006/04/24 17:26:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,11 +39,11 @@ applications and the methods that should now be used to get or set them.</p>
<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>
<tr><td>db_errpfx</td><td><a href="../../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a></td></tr>
-<tr><td>db_paniccall</td><td><a href="../../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td></tr>
+<tr><td>db_paniccall</td><td>DB-&gt;set_paniccall</td></tr>
<tr><td>type</td><td><a href="../../api_c/db_get_type.html">DB-&gt;get_type</a></td></tr>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c7693a11d..d3e955e73 100644
--- a/db/docs/ref/upgrade.3.0/db_cxx.html
+++ b/db/docs/ref/upgrade.3.0/db_cxx.html
@@ -1,5 +1,5 @@
<!--$Id: db_cxx.so,v 11.9 2000/03/22 22:02:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -43,6 +43,6 @@ table.open("lookup.db", null, Db.DB_BTREE, Db.DB_CREATE, 0644);</pre></blockquot
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 031b0cf55..71cc6512d 100644
--- a/db/docs/ref/upgrade.3.0/dbenv.html
+++ b/db/docs/ref/upgrade.3.0/dbenv.html
@@ -1,5 +1,5 @@
-<!--$Id: dbenv.so,v 11.12 2002/02/23 20:05:27 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: dbenv.so,v 11.13 2006/04/24 17:26:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -39,7 +39,7 @@ applications and the methods that should now be used to set them.</p>
<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">DB_ENV-&gt;set_paniccall</a></td></tr>
+<tr><td>db_paniccall</td><td>DB_ENV-&gt;set_paniccall</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">DB_ENV-&gt;set_verbose</a> method takes arguments that specify exactly
@@ -64,6 +64,6 @@ no longer be used by any application.</td></tr>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b89b768d7..946d9e529 100644
--- a/db/docs/ref/upgrade.3.0/dbenv_cxx.html
+++ b/db/docs/ref/upgrade.3.0/dbenv_cxx.html
@@ -1,5 +1,5 @@
<!--$Id: dbenv_cxx.so,v 11.10 2000/12/01 17:59:32 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,6 +68,6 @@ DbTxnMgr, DbMpool, DbLog, DbTxnMgr. If you used any of these managers,
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 734670ae8..0bc9c7bdb 100644
--- a/db/docs/ref/upgrade.3.0/dbinfo.html
+++ b/db/docs/ref/upgrade.3.0/dbinfo.html
@@ -1,5 +1,5 @@
<!--$Id: dbinfo.so,v 11.10 2001/04/03 19:39:02 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,6 +68,6 @@ record pad character. They should simply be discarded from the application.</p>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ac2659a51..2a4611b66 100644
--- a/db/docs/ref/upgrade.3.0/disk.html
+++ b/db/docs/ref/upgrade.3.0/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 11.15 2000/12/21 18:37:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ error.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f083de109..5a3b88cb8 100644
--- a/db/docs/ref/upgrade.3.0/eacces.html
+++ b/db/docs/ref/upgrade.3.0/eacces.html
@@ -1,5 +1,5 @@
<!--$Id: eacces.so,v 11.8 2001/07/26 18:35:50 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 27856f6fb..af0598b70 100644
--- a/db/docs/ref/upgrade.3.0/eagain.html
+++ b/db/docs/ref/upgrade.3.0/eagain.html
@@ -1,5 +1,5 @@
<!--$Id: eagain.so,v 11.6 2001/07/10 13:16:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ string EAGAIN in that file, there is a comment that describes how to make
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e41781213..3d475e828 100644
--- a/db/docs/ref/upgrade.3.0/envopen.html
+++ b/db/docs/ref/upgrade.3.0/envopen.html
@@ -1,5 +1,5 @@
<!--$Id: envopen.so,v 11.14 2003/10/18 19:16:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -151,6 +151,6 @@ XXX_unlink is now a flag value that is set by bitwise inclusively <b>OR</b>'ing
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2b94bf5e7..5a92061a2 100644
--- a/db/docs/ref/upgrade.3.0/func.html
+++ b/db/docs/ref/upgrade.3.0/func.html
@@ -1,5 +1,5 @@
<!--$Id: func.so,v 11.9 2001/03/01 15:58:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -65,6 +65,6 @@ they declare, and then compile. You will see a warning message from
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 3e0c44c14..0299cc45f 100644
--- a/db/docs/ref/upgrade.3.0/intro.html
+++ b/db/docs/ref/upgrade.3.0/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 11.7 2004/09/28 14:13:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f910d6389..5cc328d86 100644
--- a/db/docs/ref/upgrade.3.0/java.html
+++ b/db/docs/ref/upgrade.3.0/java.html
@@ -1,5 +1,5 @@
<!--$Id: java.so,v 11.10 2004/08/15 03:22:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ and Java APIs much closer in terms of functionality and usage. Please
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 083db66bd..b182ffb1c 100644
--- a/db/docs/ref/upgrade.3.0/join.html
+++ b/db/docs/ref/upgrade.3.0/join.html
@@ -1,5 +1,5 @@
<!--$Id: join.so,v 11.10 2003/10/18 19:16:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ interfaces.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 164e20d40..38ced57b5 100644
--- a/db/docs/ref/upgrade.3.0/jump_set.html
+++ b/db/docs/ref/upgrade.3.0/jump_set.html
@@ -1,5 +1,5 @@
<!--$Id: jump_set.so,v 11.6 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,6 +44,6 @@ applications and the methods that should now be used instead.</p>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1cf2d93f1..2b3be48b1 100644
--- a/db/docs/ref/upgrade.3.0/lock_detect.html
+++ b/db/docs/ref/upgrade.3.0/lock_detect.html
@@ -1,5 +1,5 @@
<!--$Id: lock_detect.so,v 11.10 2003/10/18 19:16:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 89bf4985b..abee8b084 100644
--- a/db/docs/ref/upgrade.3.0/lock_notheld.html
+++ b/db/docs/ref/upgrade.3.0/lock_notheld.html
@@ -1,5 +1,5 @@
<!--$Id: lock_notheld.so,v 11.8 2001/07/26 18:35:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8cd1cc6a2..b6e7d4692 100644
--- a/db/docs/ref/upgrade.3.0/lock_put.html
+++ b/db/docs/ref/upgrade.3.0/lock_put.html
@@ -1,5 +1,5 @@
<!--$Id: lock_put.so,v 11.10 2003/10/18 19:16:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5657a4b5a..a751d1c0e 100644
--- a/db/docs/ref/upgrade.3.0/lock_stat.html
+++ b/db/docs/ref/upgrade.3.0/lock_stat.html
@@ -1,5 +1,5 @@
<!--$Id: lock_stat.so,v 11.5 2003/10/18 19:16:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 41183cd07..aafe9a011 100644
--- a/db/docs/ref/upgrade.3.0/log_register.html
+++ b/db/docs/ref/upgrade.3.0/log_register.html
@@ -1,5 +1,5 @@
<!--$Id: log_register.so,v 11.10 2003/10/18 19:16:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c7e896c71..3f6b7159c 100644
--- a/db/docs/ref/upgrade.3.0/log_stat.html
+++ b/db/docs/ref/upgrade.3.0/log_stat.html
@@ -1,5 +1,5 @@
<!--$Id: log_stat.so,v 11.5 2003/10/18 19:16:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,6 @@
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2d91dd7db..2d512b46e 100644
--- a/db/docs/ref/upgrade.3.0/memp_stat.html
+++ b/db/docs/ref/upgrade.3.0/memp_stat.html
@@ -1,5 +1,5 @@
<!--$Id: memp_stat.so,v 11.5 2003/10/18 19:16:13 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,6 +22,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 09db0be91..4f90f1166 100644
--- a/db/docs/ref/upgrade.3.0/open.html
+++ b/db/docs/ref/upgrade.3.0/open.html
@@ -1,5 +1,5 @@
<!--$Id: open.so,v 11.11 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ on the <a href="../../api_c/db_class.html">DB</a> handle. That change is discus
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5a6ad7619..2b2de46e6 100644
--- a/db/docs/ref/upgrade.3.0/rmw.html
+++ b/db/docs/ref/upgrade.3.0/rmw.html
@@ -1,5 +1,5 @@
<!--$Id: rmw.so,v 11.10 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ each of these, any that are arguments to the <a href="../../api_c/db_cursor.html
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b5d397818..8b4eb3763 100644
--- a/db/docs/ref/upgrade.3.0/stat.html
+++ b/db/docs/ref/upgrade.3.0/stat.html
@@ -1,5 +1,5 @@
<!--$Id: stat.so,v 11.4 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d87696bbf..3b614c1f2 100644
--- a/db/docs/ref/upgrade.3.0/toc.html
+++ b/db/docs/ref/upgrade.3.0/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 11.5 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a81356bae..a2a35138a 100644
--- a/db/docs/ref/upgrade.3.0/txn_begin.html
+++ b/db/docs/ref/upgrade.3.0/txn_begin.html
@@ -1,5 +1,5 @@
<!--$Id: txn_begin.so,v 11.9 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4d93fd980..ecc4f1704 100644
--- a/db/docs/ref/upgrade.3.0/txn_commit.html
+++ b/db/docs/ref/upgrade.3.0/txn_commit.html
@@ -1,5 +1,5 @@
<!--$Id: txn_commit.so,v 11.10 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e4d335034..1826fa1b5 100644
--- a/db/docs/ref/upgrade.3.0/txn_stat.html
+++ b/db/docs/ref/upgrade.3.0/txn_stat.html
@@ -1,5 +1,5 @@
<!--$Id: txn_stat.so,v 11.5 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,6 @@
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f9390f6cb..ebdf6a41b 100644
--- a/db/docs/ref/upgrade.3.0/value_set.html
+++ b/db/docs/ref/upgrade.3.0/value_set.html
@@ -1,5 +1,5 @@
<!--$Id: value_set.so,v 11.10 2003/10/18 19:16:14 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,6 @@ information.</td></tr>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2d4c26d3e..18c313aa8 100644
--- a/db/docs/ref/upgrade.3.0/xa.html
+++ b/db/docs/ref/upgrade.3.0/xa.html
@@ -1,5 +1,5 @@
<!--$Id: xa.so,v 11.7 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -29,6 +29,6 @@ calls to the Db::xa_open method should be replaced with the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 963b39bba..555e6b4bf 100644
--- a/db/docs/ref/upgrade.3.1/btstat.html
+++ b/db/docs/ref/upgrade.3.1/btstat.html
@@ -1,5 +1,5 @@
<!--$Id: btstat.so,v 1.12 2003/10/18 19:16:15 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -46,6 +46,6 @@ of the <b>qs_nrecs</b> field, and the field should be changed to be
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8ff93aa15..43a4df1e4 100644
--- a/db/docs/ref/upgrade.3.1/config.html
+++ b/db/docs/ref/upgrade.3.1/config.html
@@ -1,5 +1,5 @@
<!--$Id: config.so,v 1.4 2001/05/15 14:44:16 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,6 +31,6 @@ argument, the strings values in that argument are replaced with calls to
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9af245022..50ee3457d 100644
--- a/db/docs/ref/upgrade.3.1/disk.html
+++ b/db/docs/ref/upgrade.3.1/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 1.9 2000/12/21 18:37:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ databases are upgraded, the <a href="../../api_c/db_open.html">DB-&gt;open</a> m
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 984a94c60..04ee11c61 100644
--- a/db/docs/ref/upgrade.3.1/dup.html
+++ b/db/docs/ref/upgrade.3.1/dup.html
@@ -1,5 +1,5 @@
<!--$Id: dup.so,v 1.1 2000/05/31 18:53:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ release. See <a href="../../ref/am_conf/dup.html">Duplicate data items</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 d3a253e60..ff0d07ba3 100644
--- a/db/docs/ref/upgrade.3.1/env.html
+++ b/db/docs/ref/upgrade.3.1/env.html
@@ -1,5 +1,5 @@
<!--$Id: env.so,v 1.6 2001/08/07 01:42:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -49,6 +49,6 @@ instead.</p>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1139fff4c..beb853878 100644
--- a/db/docs/ref/upgrade.3.1/intro.html
+++ b/db/docs/ref/upgrade.3.1/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.5 2004/09/28 14:13:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5b33cf1c1..e66cc4a3e 100644
--- a/db/docs/ref/upgrade.3.1/log_register.html
+++ b/db/docs/ref/upgrade.3.1/log_register.html
@@ -1,5 +1,5 @@
<!--$Id: log_register.so,v 1.4 2001/07/26 19:53:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ be a reference to the <a href="../../api_c/db_class.html">DB</a> structure being
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1d054b8cb..cc6311195 100644
--- a/db/docs/ref/upgrade.3.1/logalloc.html
+++ b/db/docs/ref/upgrade.3.1/logalloc.html
@@ -1,5 +1,5 @@
-<!--$Id: logalloc.so,v 1.1 2000/06/02 23:32:48 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: logalloc.so,v 1.2 2006/08/24 16:32:32 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,9 +20,9 @@
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.</p>
+us 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f5a68508b..39e4bb79e 100644
--- a/db/docs/ref/upgrade.3.1/memp_register.html
+++ b/db/docs/ref/upgrade.3.1/memp_register.html
@@ -1,5 +1,5 @@
<!--$Id: memp_register.so,v 1.5 2003/10/18 19:16:15 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ applications, and may be entirely ignored by the <b>pgin</b> and
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9b8dacb34..e8521fb77 100644
--- a/db/docs/ref/upgrade.3.1/put.html
+++ b/db/docs/ref/upgrade.3.1/put.html
@@ -1,5 +1,5 @@
<!--$Id: put.so,v 1.11 2003/10/18 19:16:15 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -60,6 +60,6 @@ recno = *(db_recno_t *)key-&gt;data;
printf("new record number is %lu\n", (u_long)recno);</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 141b8dc44..003813f22 100644
--- a/db/docs/ref/upgrade.3.1/set_feedback.html
+++ b/db/docs/ref/upgrade.3.1/set_feedback.html
@@ -1,5 +1,5 @@
<!--$Id: set_feedback.so,v 1.4 2001/05/15 14:44:17 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ or throw an exception as appropriate when an error occurs.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b94346942..4ce4871b9 100644
--- a/db/docs/ref/upgrade.3.1/set_paniccall.html
+++ b/db/docs/ref/upgrade.3.1/set_paniccall.html
@@ -1,5 +1,5 @@
-<!--$Id: set_paniccall.so,v 1.5 2001/05/15 14:44:17 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: set_paniccall.so,v 1.6 2006/04/24 17:26:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -15,14 +15,14 @@
</td></tr></table>
<p>
<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.</p>
+<p>Starting with the 3.1 release of Berkeley DB, the DB_ENV-&gt;set_paniccall
+and DB-&gt;set_paniccall 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.</p>
<p>If your application calls these functions, you may want to check for 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5186581b8..07b1004c2 100644
--- a/db/docs/ref/upgrade.3.1/set_tx_recover.html
+++ b/db/docs/ref/upgrade.3.1/set_tx_recover.html
@@ -1,5 +1,5 @@
<!--$Id: set_tx_recover.so,v 1.12 2002/02/23 20:05:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,6 +32,6 @@ function as follows:</p>
</table>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b8b20a196..ba094d9fc 100644
--- a/db/docs/ref/upgrade.3.1/sysmem.html
+++ b/db/docs/ref/upgrade.3.1/sysmem.html
@@ -1,5 +1,5 @@
<!--$Id: sysmem.so,v 1.4 2003/10/18 19:16:16 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ specification of a base system memory segment ID, using the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c9259b5dd..26121b024 100644
--- a/db/docs/ref/upgrade.3.1/tcl.html
+++ b/db/docs/ref/upgrade.3.1/tcl.html
@@ -1,5 +1,5 @@
<!--$Id: tcl.so,v 1.6 2001/03/01 15:58:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5961b0098..a9265315b 100644
--- a/db/docs/ref/upgrade.3.1/tmp.html
+++ b/db/docs/ref/upgrade.3.1/tmp.html
@@ -1,5 +1,5 @@
<!--$Id: tmp.so,v 1.7 2000/05/22 20:26:35 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ protection modes for the system registry directory are different from
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 5884eb20e..ca2d3134e 100644
--- a/db/docs/ref/upgrade.3.1/toc.html
+++ b/db/docs/ref/upgrade.3.1/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.6 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -37,6 +37,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7d0ac906b..5565f83e3 100644
--- a/db/docs/ref/upgrade.3.1/txn_check.html
+++ b/db/docs/ref/upgrade.3.1/txn_check.html
@@ -1,5 +1,5 @@
<!--$Id: txn_check.so,v 1.8 2003/10/18 19:16:16 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0d0d879ba..020a94fa1 100644
--- a/db/docs/ref/upgrade.3.2/callback.html
+++ b/db/docs/ref/upgrade.3.2/callback.html
@@ -1,5 +1,5 @@
<!--$Id: callback.so,v 1.5 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,6 +35,6 @@ Applications using this field will have to convert to using one of the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 aefe04a62..d4771af79 100644
--- a/db/docs/ref/upgrade.3.2/db_dump.html
+++ b/db/docs/ref/upgrade.3.2/db_dump.html
@@ -1,5 +1,5 @@
<!--$Id: db_dump.so,v 1.3 2000/11/28 21:27:49 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,6 +25,6 @@ scripts post-processing the <a href="../../utility/db_dump.html">db_dump</a> out
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 828188fa3..72fccaf6a 100644
--- a/db/docs/ref/upgrade.3.2/disk.html
+++ b/db/docs/ref/upgrade.3.2/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 1.5 2001/03/28 13:55:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ the <a href="../../api_c/db_open.html">DB-&gt;open</a> method will return a <a h
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7abd7f1cc..f4c11ccf0 100644
--- a/db/docs/ref/upgrade.3.2/handle.html
+++ b/db/docs/ref/upgrade.3.2/handle.html
@@ -1,5 +1,5 @@
<!--$Id: handle.so,v 1.6 2004/08/15 03:22:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 23268ccab..6ea46f888 100644
--- a/db/docs/ref/upgrade.3.2/incomplete.html
+++ b/db/docs/ref/upgrade.3.2/incomplete.html
@@ -1,5 +1,5 @@
<!--$Id: incomplete.so,v 1.9 2004/08/15 03:22:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,6 +34,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2ccfab292..a05d59b5e 100644
--- a/db/docs/ref/upgrade.3.2/intro.html
+++ b/db/docs/ref/upgrade.3.2/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.4 2004/09/28 14:13:07 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2f45164f7..ebc318c86 100644
--- a/db/docs/ref/upgrade.3.2/mutexlock.html
+++ b/db/docs/ref/upgrade.3.2/mutexlock.html
@@ -1,5 +1,5 @@
<!--$Id: mutexlock.so,v 1.4 2003/10/18 19:16:16 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 655116c55..dd05b38f3 100644
--- a/db/docs/ref/upgrade.3.2/notfound.html
+++ b/db/docs/ref/upgrade.3.2/notfound.html
@@ -1,5 +1,5 @@
<!--$Id: notfound.so,v 1.4 2004/08/15 03:22:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ exist. Applications should 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ef20da4df..25b57ae45 100644
--- a/db/docs/ref/upgrade.3.2/renumber.html
+++ b/db/docs/ref/upgrade.3.2/renumber.html
@@ -1,5 +1,5 @@
<!--$Id: renumber.so,v 1.4 2001/05/05 01:49:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -35,6 +35,6 @@ evaluated to ensure that the new semantics do not cause application
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9561d9cec..0c3146285 100644
--- a/db/docs/ref/upgrade.3.2/set_flags.html
+++ b/db/docs/ref/upgrade.3.2/set_flags.html
@@ -1,5 +1,5 @@
<!--$Id: set_flags.so,v 1.3 2003/10/18 19:16:16 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,6 +31,6 @@ appropriate place for them. Applications specifying either 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 0396e24fe..5735b300f 100644
--- a/db/docs/ref/upgrade.3.2/toc.html
+++ b/db/docs/ref/upgrade.3.2/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.12 2004/09/28 15:04:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,6 +31,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 137835919..18ff8b4c2 100644
--- a/db/docs/ref/upgrade.3.2/tx_recover.html
+++ b/db/docs/ref/upgrade.3.2/tx_recover.html
@@ -1,5 +1,5 @@
<!--$Id: tx_recover.so,v 1.14 2002/02/23 20:05:28 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ application's callback function may be removed.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 00664eda2..5a39536d7 100644
--- a/db/docs/ref/upgrade.3.3/alloc.html
+++ b/db/docs/ref/upgrade.3.3/alloc.html
@@ -1,5 +1,5 @@
<!--$Id: alloc.so,v 1.12 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 221ffad0a..3872fada0 100644
--- a/db/docs/ref/upgrade.3.3/bigfile.html
+++ b/db/docs/ref/upgrade.3.3/bigfile.html
@@ -1,5 +1,5 @@
<!--$Id: bigfile.so,v 1.2 2001/06/07 19:03:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ version 2.50. For that reason, Berkeley DB configuration no longer supports
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8ea579af6..7e2671246 100644
--- a/db/docs/ref/upgrade.3.3/conflict.html
+++ b/db/docs/ref/upgrade.3.3/conflict.html
@@ -1,5 +1,5 @@
<!--$Id: conflict.so,v 1.6 2003/10/18 19:16:18 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@ Applications specifying the DB_LOCK_CONFLICT flag should simply replace
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c0e4cf7b5..8834a9dab 100644
--- a/db/docs/ref/upgrade.3.3/disk.html
+++ b/db/docs/ref/upgrade.3.3/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 1.3 2001/07/18 02:28:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b6b01568f..f73f1ead5 100644
--- a/db/docs/ref/upgrade.3.3/getswap.html
+++ b/db/docs/ref/upgrade.3.3/getswap.html
@@ -1,5 +1,5 @@
<!--$Id: getswap.so,v 1.1 2001/06/07 19:00:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ argument is used 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/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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2c54a26b7..23b71ed5b 100644
--- a/db/docs/ref/upgrade.3.3/gettype.html
+++ b/db/docs/ref/upgrade.3.3/gettype.html
@@ -1,5 +1,5 @@
<!--$Id: gettype.so,v 1.1 2001/06/07 19:00:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ type <b>DBTYPE *</b> to the method. The additional argument is used
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7d2b8cbe5..eac736b68 100644
--- a/db/docs/ref/upgrade.3.3/intro.html
+++ b/db/docs/ref/upgrade.3.3/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.4 2004/09/28 14:13:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 83a857290..9dc4064c0 100644
--- a/db/docs/ref/upgrade.3.3/memp_fget.html
+++ b/db/docs/ref/upgrade.3.3/memp_fget.html
@@ -1,5 +1,5 @@
<!--$Id: memp_fget.so,v 1.5 2003/10/18 19:16:18 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,6 +32,6 @@ transaction when a recoverable system error occurs in order to recover
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ab8f09840..8ac80b024 100644
--- a/db/docs/ref/upgrade.3.3/rpc.html
+++ b/db/docs/ref/upgrade.3.3/rpc.html
@@ -1,5 +1,5 @@
<!--$Id: rpc.so,v 1.5 2004/08/13 03:39:00 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 96373f2a7..f63ed973a 100644
--- a/db/docs/ref/upgrade.3.3/shared.html
+++ b/db/docs/ref/upgrade.3.3/shared.html
@@ -1,5 +1,5 @@
<!--$Id: shared.so,v 1.2 2001/07/10 13:16:34 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ both static and shared libraries by default, the useful options are
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9883f6b01..e350ae0f9 100644
--- a/db/docs/ref/upgrade.3.3/toc.html
+++ b/db/docs/ref/upgrade.3.3/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.13 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,6 +31,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2e57f79bf..cc6db543b 100644
--- a/db/docs/ref/upgrade.3.3/txn_prepare.html
+++ b/db/docs/ref/upgrade.3.3/txn_prepare.html
@@ -1,5 +1,5 @@
<!--$Id: txn_prepare.so,v 1.9 2003/10/18 19:16:18 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,6 +22,6 @@ commit using Berkeley DB as a local resource manager), see
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ee9f086f3..280a5f5d1 100644
--- a/db/docs/ref/upgrade.4.0/asr.html
+++ b/db/docs/ref/upgrade.4.0/asr.html
@@ -1,5 +1,5 @@
-<!--$Id: asr.so,v 1.2 2001/11/14 02:27:11 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: asr.so,v 1.3 2006/08/24 16:32:32 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,10 +31,9 @@ both <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_
(<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.)</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.</p>
+recommend you contact us and ask us to review those 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1554058b0..4f3ddbfd9 100644
--- a/db/docs/ref/upgrade.4.0/cxx.html
+++ b/db/docs/ref/upgrade.4.0/cxx.html
@@ -1,5 +1,5 @@
-<!--$Id: cxx.so,v 1.2 2001/11/16 16:49:43 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: cxx.so,v 1.3 2005/12/01 03:18:53 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,9 +24,9 @@ the following methods have changed:</p>
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>
+on some platforms (notably Windows systems), 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;
#include &lt;db_cxx.h&gt;
<p>
@@ -44,6 +44,6 @@ void foo(Db db) {
}</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e36e7505b..f08617c06 100644
--- a/db/docs/ref/upgrade.4.0/deadlock.html
+++ b/db/docs/ref/upgrade.4.0/deadlock.html
@@ -1,5 +1,5 @@
<!--$Id: deadlock.so,v 1.1 2001/09/07 16:55:56 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ option by using the <b>-t</b> option with an argument of
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 38e707a14..83e78f3c3 100644
--- a/db/docs/ref/upgrade.4.0/disk.html
+++ b/db/docs/ref/upgrade.4.0/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 1.11 2001/12/10 15:14:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ formats changed in the Berkeley DB 4.0 release.</p>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 f1da7255b..d8248808c 100644
--- a/db/docs/ref/upgrade.4.0/env.html
+++ b/db/docs/ref/upgrade.4.0/env.html
@@ -1,5 +1,5 @@
-<!--$Id: env.so,v 1.6 2003/10/18 19:16:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: env.so,v 1.8 2005/08/03 21:24:02 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,13 +26,13 @@ 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 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
+replaced with the DB_ENV-&gt;set_tas_spins method. This is an
+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 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
+historic routine are equivalent to calling DB_ENV-&gt;set_tas_spins
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
@@ -75,6 +75,6 @@ their calls, replacing the historic call with a call to
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 87f5fc2e9..812ff00d7 100644
--- a/db/docs/ref/upgrade.4.0/intro.html
+++ b/db/docs/ref/upgrade.4.0/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.6 2004/09/28 14:13:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8dbbbcdc8..4d851c577 100644
--- a/db/docs/ref/upgrade.4.0/java.html
+++ b/db/docs/ref/upgrade.4.0/java.html
@@ -1,5 +1,5 @@
-<!--$Id: java.so,v 1.6 2001/11/14 02:27:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: java.so,v 1.7 2005/12/01 03:18:53 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,14 +20,14 @@ 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.3/lib/db.jar:/usr/local/BerkeleyDB.4.3/lib/dbexamples.jar"</pre></blockquote>
+<blockquote><pre>export CLASSPATH="/usr/local/BerkeleyDB.4.5/lib/db.jar:/usr/local/BerkeleyDB.4.5/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>
+<blockquote><pre>set CLASSPATH="D:\db\build_windows\Release\db.jar;D:\db\build_windows\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>.</p>
+<a href="../../ref/build_win/intro.html">Building for Windows</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 bdf5f0f3d..b52b713ae 100644
--- a/db/docs/ref/upgrade.4.0/lock.html
+++ b/db/docs/ref/upgrade.4.0/lock.html
@@ -1,5 +1,5 @@
<!--$Id: lock.so,v 1.6 2001/09/27 02:25:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -41,6 +41,6 @@ to use the enclosing <a href="../../api_c/env_class.html">DB_ENV</a> handle's me
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 a6e43b7e9..6b38264fe 100644
--- a/db/docs/ref/upgrade.4.0/lock_id_free.html
+++ b/db/docs/ref/upgrade.4.0/lock_id_free.html
@@ -1,5 +1,5 @@
<!--$Id: lock_id_free.so,v 1.1 2001/09/25 21:05:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ locker IDs may want to update their applications to free the locker ID
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 4cdb20124..62ab9fe33 100644
--- a/db/docs/ref/upgrade.4.0/log.html
+++ b/db/docs/ref/upgrade.4.0/log.html
@@ -1,5 +1,5 @@
<!--$Id: log.so,v 1.5 2003/10/18 19:16:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -51,6 +51,6 @@ 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>.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c242ac950..8f2f7889e 100644
--- a/db/docs/ref/upgrade.4.0/mp.html
+++ b/db/docs/ref/upgrade.4.0/mp.html
@@ -1,5 +1,5 @@
<!--$Id: mp.so,v 1.3 2003/10/18 19:16:19 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ interfaces are identical; the one exception is the <a href="../../api_c/memp_fcl
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 52507a106..fced7193d 100644
--- a/db/docs/ref/upgrade.4.0/rpc.html
+++ b/db/docs/ref/upgrade.4.0/rpc.html
@@ -1,5 +1,5 @@
<!--$Id: rpc.so,v 1.7 2004/08/13 03:39:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,6 +22,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2829534c6..3c9efc725 100644
--- a/db/docs/ref/upgrade.4.0/set_lk_max.html
+++ b/db/docs/ref/upgrade.4.0/set_lk_max.html
@@ -1,5 +1,5 @@
<!--$Id: set_lk_max.so,v 1.4 2003/10/18 19:16:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,6 +22,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 31a3ababa..e15703b12 100644
--- a/db/docs/ref/upgrade.4.0/toc.html
+++ b/db/docs/ref/upgrade.4.0/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.17 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -34,6 +34,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 93675318b..de978adcf 100644
--- a/db/docs/ref/upgrade.4.0/txn.html
+++ b/db/docs/ref/upgrade.4.0/txn.html
@@ -1,5 +1,5 @@
<!--$Id: txn.so,v 1.6 2003/10/18 19:16:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,6 +42,6 @@ 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>.</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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b538e8bff..573b2b861 100644
--- a/db/docs/ref/upgrade.4.1/app_dispatch.html
+++ b/db/docs/ref/upgrade.4.1/app_dispatch.html
@@ -1,5 +1,5 @@
<!--$Id: app_dispatch.so,v 1.6 2002/08/26 23:05:28 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -27,6 +27,6 @@ removed interfaces should be updated to call
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 1bdf7d6e3..a551dc80f 100644
--- a/db/docs/ref/upgrade.4.1/checkpoint.html
+++ b/db/docs/ref/upgrade.4.1/checkpoint.html
@@ -1,5 +1,5 @@
-<!--$Id: checkpoint.so,v 1.4 2002/08/12 21:12:06 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: checkpoint.so,v 1.5 2006/08/24 16:32:33 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,14 +17,13 @@
<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> 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>
+flag. If your application used this flag, please contact us 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.</p>
+used this flag, please contact us for help in 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 aea5efa76..22230c6b3 100644
--- a/db/docs/ref/upgrade.4.1/cxx.html
+++ b/db/docs/ref/upgrade.4.1/cxx.html
@@ -1,5 +1,5 @@
<!--$Id: cxx.so,v 1.3 2002/08/27 02:28:31 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -43,6 +43,6 @@ errors while closing can be handled by the application.</p>
}</pre></blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 272b85253..887d22518 100644
--- a/db/docs/ref/upgrade.4.1/disk.html
+++ b/db/docs/ref/upgrade.4.1/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 1.7 2002/11/26 04:53:59 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ usable with earlier Berkeley DB releases.</p>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 8cfb71eaf..70409ec9b 100644
--- a/db/docs/ref/upgrade.4.1/excl.html
+++ b/db/docs/ref/upgrade.4.1/excl.html
@@ -1,5 +1,5 @@
<!--$Id: excl.so,v 1.1 2002/01/16 20:12:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ the <a href="../../api_c/db_open.html#DB_EXCL">DB_EXCL</a> flag to check for the
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ea0ca1202..d5caa3356 100644
--- a/db/docs/ref/upgrade.4.1/fop.html
+++ b/db/docs/ref/upgrade.4.1/fop.html
@@ -1,5 +1,5 @@
<!--$Id: fop.so,v 1.8 2004/08/13 03:39:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -123,6 +123,6 @@ 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="../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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 9d0e6de24..cfad75a5b 100644
--- a/db/docs/ref/upgrade.4.1/hash_nelem.html
+++ b/db/docs/ref/upgrade.4.1/hash_nelem.html
@@ -1,5 +1,5 @@
<!--$Id: hash_nelem.so,v 1.2 2002/08/26 23:05:29 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@ databases has been removed from the 4.1 release, this information is no
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 2f0da9386..e6bcd4aed 100644
--- a/db/docs/ref/upgrade.4.1/incomplete.html
+++ b/db/docs/ref/upgrade.4.1/incomplete.html
@@ -1,5 +1,5 @@
<!--$Id: incomplete.so,v 1.8 2004/08/15 03:22:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,6 +25,6 @@ all uses of DB_INCOMPLETE.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 7d7d9c23f..0012d63b8 100644
--- a/db/docs/ref/upgrade.4.1/intro.html
+++ b/db/docs/ref/upgrade.4.1/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.3 2004/09/28 14:13:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 58a61ea19..7ac6dd7e9 100644
--- a/db/docs/ref/upgrade.4.1/java.html
+++ b/db/docs/ref/upgrade.4.1/java.html
@@ -1,5 +1,5 @@
<!--$Id: java.so,v 1.5 2004/08/15 03:22:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,6 +23,6 @@ versions of the Berkeley DB Java API could throw this exception from the
constructor but it was not 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 cd8d885e2..41fe798e2 100644
--- a/db/docs/ref/upgrade.4.1/log_register.html
+++ b/db/docs/ref/upgrade.4.1/log_register.html
@@ -1,5 +1,5 @@
-<!--$Id: log_register.so,v 1.3 2002/01/16 20:12:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: log_register.so,v 1.4 2006/08/24 16:32:33 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -18,10 +18,9 @@
<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.</p>
+these interfaces, please contact us for help in 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 e65d859bd..088db943a 100644
--- a/db/docs/ref/upgrade.4.1/log_stat.html
+++ b/db/docs/ref/upgrade.4.1/log_stat.html
@@ -1,5 +1,5 @@
<!--$Id: log_stat.so,v 1.1 2002/01/11 16:33:12 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ application using the "st_flushcommits" statistic should remove it, or
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 17b48e384..9984b7293 100644
--- a/db/docs/ref/upgrade.4.1/memp_sync.html
+++ b/db/docs/ref/upgrade.4.1/memp_sync.html
@@ -1,5 +1,5 @@
-<!--$Id: memp_sync.so,v 1.5 2003/10/18 19:16:20 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: memp_sync.so,v 1.6 2006/08/24 16:32:33 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,9 +23,9 @@ 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.</p>
+contact us 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b50b25f21..f5d8593bb 100644
--- a/db/docs/ref/upgrade.4.1/toc.html
+++ b/db/docs/ref/upgrade.4.1/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.17 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,6 +33,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index db6d455e5..9e1dcad57 100644
--- a/db/docs/ref/upgrade.4.2/cksum.html
+++ b/db/docs/ref/upgrade.4.2/cksum.html
@@ -1,5 +1,5 @@
<!--$Id: cksum.so,v 1.4 2004/09/28 14:13:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -24,6 +24,6 @@ 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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 274e7ed81..a202546c5 100644
--- a/db/docs/ref/upgrade.4.2/client.html
+++ b/db/docs/ref/upgrade.4.2/client.html
@@ -1,5 +1,5 @@
<!--$Id: client.so,v 1.2 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -22,6 +22,6 @@ flag should change that use to <a href="../../api_c/env_class.html#DB_RPCCLIENT"
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index c3f10415d..c5a9849df 100644
--- a/db/docs/ref/upgrade.4.2/del.html
+++ b/db/docs/ref/upgrade.4.2/del.html
@@ -1,5 +1,5 @@
<!--$Id: del.so,v 1.11 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -26,6 +26,6 @@ and handling the <a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMP
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 7eb6f868c..6ea6aad14 100644
--- a/db/docs/ref/upgrade.4.2/disk.html
+++ b/db/docs/ref/upgrade.4.2/disk.html
@@ -1,5 +1,5 @@
<!--$Id: disk.so,v 1.5 2003/12/10 16:24:35 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ formats changed in the Berkeley DB 4.2 release.</p>
<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="../upgrade.4.3/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 1653dc8fb..94f4456e9 100644
--- a/db/docs/ref/upgrade.4.2/intro.html
+++ b/db/docs/ref/upgrade.4.2/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.3 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 623545630..116b269b7 100644
--- a/db/docs/ref/upgrade.4.2/java.html
+++ b/db/docs/ref/upgrade.4.2/java.html
@@ -1,5 +1,5 @@
-<!--$Id: java.so,v 1.20 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: java.so,v 1.21 2006/08/24 16:32:33 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -47,8 +47,8 @@ To determine what version virtual machine you are running, enter:</p>
<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>
+in the Java build process (however, that workaround has not been tested
+by us).</p>
<p>A few inconsistent methods have been cleaned up (for example, Db.close
now returns void; previously, it returned an int which was always zero).
The synchronized attributed has been toggled on some methods -- this is
@@ -71,16 +71,16 @@ 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>
+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 Software 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
@@ -91,6 +91,6 @@ 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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index de2beaa61..0af456434 100644
--- a/db/docs/ref/upgrade.4.2/lockng.html
+++ b/db/docs/ref/upgrade.4.2/lockng.html
@@ -1,5 +1,5 @@
<!--$Id: lockng.so,v 1.6 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -45,6 +45,6 @@ can configure database operation methods to return
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 28433441b..c31278d64 100644
--- a/db/docs/ref/upgrade.4.2/nosync.html
+++ b/db/docs/ref/upgrade.4.2/nosync.html
@@ -1,5 +1,5 @@
<!--$Id: nosync.so,v 1.7 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -31,6 +31,6 @@ will increase their performance. Regardless of the setting of the
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index a68c4e9b1..15aa718ac 100644
--- a/db/docs/ref/upgrade.4.2/priority.html
+++ b/db/docs/ref/upgrade.4.2/priority.html
@@ -1,5 +1,5 @@
<!--$Id: priority.so,v 1.2 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,6 +25,6 @@ arguments and behaves identically to the old call, except that a
<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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 62b262ec0..152327c69 100644
--- a/db/docs/ref/upgrade.4.2/queue.html
+++ b/db/docs/ref/upgrade.4.2/queue.html
@@ -1,5 +1,5 @@
<!--$Id: queue.so,v 1.4 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -30,6 +30,6 @@ 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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 5f5b4eb1d..10a80ab22 100644
--- a/db/docs/ref/upgrade.4.2/repinit.html
+++ b/db/docs/ref/upgrade.4.2/repinit.html
@@ -1,5 +1,5 @@
<!--$Id: repinit.so,v 1.11 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -40,6 +40,6 @@ number (LSN) associated with those return values. The new argument is
<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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index e3ebbd93d..6ccdf77cd 100644
--- a/db/docs/ref/upgrade.4.2/tcl.html
+++ b/db/docs/ref/upgrade.4.2/tcl.html
@@ -1,5 +1,5 @@
<!--$Id: tcl.so,v 1.2 2003/05/09 20:01:41 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,6 @@
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index 225ce61f1..0bdfb23c0 100644
--- a/db/docs/ref/upgrade.4.2/toc.html
+++ b/db/docs/ref/upgrade.4.2/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.14 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -33,6 +33,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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
index ae6412231..a8cd580d2 100644
--- a/db/docs/ref/upgrade.4.2/verify.html
+++ b/db/docs/ref/upgrade.4.2/verify.html
@@ -1,5 +1,5 @@
<!--$Id: verify.so,v 1.5 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ updated to make no further use of any kind of the <a href="../../api_c/db_class.
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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/cput.html b/db/docs/ref/upgrade.4.3/cput.html
index dcc412235..3f30dbde1 100644
--- a/db/docs/ref/upgrade.4.3/cput.html
+++ b/db/docs/ref/upgrade.4.3/cput.html
@@ -1,5 +1,5 @@
<!--$Id: cput.so,v 1.3 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ using this sequence of operations should be changed to do the put without first
deleting the item.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/err.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.3/stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/disk.html b/db/docs/ref/upgrade.4.3/disk.html
index 7935b1808..2bfddf991 100644
--- a/db/docs/ref/upgrade.4.3/disk.html
+++ b/db/docs/ref/upgrade.4.3/disk.html
@@ -1,5 +1,5 @@
-<!--$Id: disk.so,v 1.5 2004/09/20 14:29:49 mjc Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: disk.so,v 1.6 2004/12/16 19:13:03 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,7 +11,7 @@
<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.3/rtc.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 align=right><a href="../upgrade.4.3/rtc.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.4/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<h3 align=center>Release 4.3: upgrade requirements</h3>
@@ -19,8 +19,8 @@
formats changed in the Berkeley DB 4.3 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.3/rtc.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>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/rtc.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.4/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/enomem.html b/db/docs/ref/upgrade.4.3/enomem.html
index a7cc776d0..3f85417a4 100644
--- a/db/docs/ref/upgrade.4.3/enomem.html
+++ b/db/docs/ref/upgrade.4.3/enomem.html
@@ -1,5 +1,5 @@
<!--$Id: enomem.so,v 1.2 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -38,6 +38,6 @@ when a <b>Dbt</b> is too small to hold a return value, and an
exhaustion.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/fileopen.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.3/repl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/err.html b/db/docs/ref/upgrade.4.3/err.html
index 6fc668d1b..cb0f5fd88 100644
--- a/db/docs/ref/upgrade.4.3/err.html
+++ b/db/docs/ref/upgrade.4.3/err.html
@@ -1,5 +1,5 @@
<!--$Id: err.so,v 1.3 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ environment context for the callback function, and incidentally makes
it clear the message parameter cannot be changed by the callback.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/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.3/cput.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/fileopen.html b/db/docs/ref/upgrade.4.3/fileopen.html
index a4d1b0b45..7c40dc6a0 100644
--- a/db/docs/ref/upgrade.4.3/fileopen.html
+++ b/db/docs/ref/upgrade.4.3/fileopen.html
@@ -1,5 +1,5 @@
<!--$Id: fileopen.so,v 1.6 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -19,6 +19,6 @@
check for the DB_FILEOPEN error should be removed.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/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.3/enomem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/intro.html b/db/docs/ref/upgrade.4.3/intro.html
index 2980c70df..7deeab655 100644
--- a/db/docs/ref/upgrade.4.3/intro.html
+++ b/db/docs/ref/upgrade.4.3/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 1.6 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -21,6 +21,6 @@ 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.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.4.3/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/java.html b/db/docs/ref/upgrade.4.3/java.html
index 9a6b51501..0918bc035 100644
--- a/db/docs/ref/upgrade.4.3/java.html
+++ b/db/docs/ref/upgrade.4.3/java.html
@@ -1,5 +1,5 @@
-<!--$Id: java.so,v 1.2 2004/09/28 19:17:13 mark Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: java.so,v 1.3 2006/09/18 14:45:52 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -11,7 +11,7 @@
<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/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.3/err.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.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.4.3/err.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
<h3 align=center>Release 4.3: Java</h3>
@@ -56,8 +56,8 @@ DataStore, DataIndex, and ForeignKeyIndex classes have been removed. Instead
of wrapping a Database in a DataStore or DataIndex, the Database object is now
passed directly to the constructor of a StoredMap, StoredList, etc.
</ol>
-<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.3/err.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.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.4.3/err.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/log.html b/db/docs/ref/upgrade.4.3/log.html
index 84312efa9..10e5d9379 100644
--- a/db/docs/ref/upgrade.4.3/log.html
+++ b/db/docs/ref/upgrade.4.3/log.html
@@ -1,5 +1,5 @@
<!--$Id: log.so,v 1.2 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ instead.</p>
or equal to the log file size; this restriction is no longer required.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/verb.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.3/fileopen.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/repl.html b/db/docs/ref/upgrade.4.3/repl.html
index 706c001f6..14e6c8af1 100644
--- a/db/docs/ref/upgrade.4.3/repl.html
+++ b/db/docs/ref/upgrade.4.3/repl.html
@@ -1,5 +1,5 @@
-<!--$Id: repl.so,v 1.9 2004/09/28 14:13:09 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: repl.so,v 1.10 2005/10/19 19:11:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,7 +17,7 @@
<h3 align=center>Release 4.3: Replication</h3>
<p>The 4.3 release removes support for logs-only replication clients. Use
of the DB_REP_LOGSONLY flag to the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> should be replaced
-with the <a href="../../api_c/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a> flag.</p>
+with the <a href="../../api_c/repmgr_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a> flag.</p>
<p>The 4.3 release adds two new arguments to the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method,
<b>nvotes</b> and <b>flags</b>. The <b>nvotes</b> argument sets the
required number of replication group members that must participate in
@@ -30,11 +30,9 @@ environment hot backup to initialize a replication client. All that is
needed now is for the client to join the replication group. Berkeley DB will
perform an internal backup from the master to the client automatically
and will run recovery on the client to bring it up to date with the
-master. For this reason, the DB_REP_OUTDATED error return from the
-<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method is no longer needed, and applications should remove
-any checking done for that error return.</p>
+master.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/enomem.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.3/rtc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/rtc.html b/db/docs/ref/upgrade.4.3/rtc.html
index 1acf1aa17..85de6fcf4 100644
--- a/db/docs/ref/upgrade.4.3/rtc.html
+++ b/db/docs/ref/upgrade.4.3/rtc.html
@@ -1,5 +1,5 @@
<!--$Id: rtc.so,v 1.2 2004/09/28 14:13:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -20,6 +20,6 @@
offset in one parameter rather than a page size and a page number.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/repl.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.3/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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/stat.html b/db/docs/ref/upgrade.4.3/stat.html
index 315456a79..adf0a1f2c 100644
--- a/db/docs/ref/upgrade.4.3/stat.html
+++ b/db/docs/ref/upgrade.4.3/stat.html
@@ -1,10 +1,10 @@
-<!--$Id: stat.so,v 1.3 2004/09/28 14:13:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: stat.so,v 1.4 2006/09/20 16:04:05 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 4.3: DB_ENV-&gt;stat</title>
+<title>Berkeley DB Reference Guide: Release 4.3: DB-&gt;stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
@@ -14,13 +14,13 @@
<td align=right><a href="../upgrade.4.3/cput.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.3/verb.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h3 align=center>Release 4.3: DB_ENV-&gt;stat</h3>
+<h3 align=center>Release 4.3: DB-&gt;stat</h3>
<p>The 4.3 release adds transactional support to the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method.</p>
<p>Application writers can simply add a NULL <b>txnid</b> argument to the
<a href="../../api_c/db_stat.html">DB-&gt;stat</a> method calls in their application to leave the application's
behavior unchanged.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/cput.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.3/verb.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/toc.html b/db/docs/ref/upgrade.4.3/toc.html
index 70e638a72..d195d78f0 100644
--- a/db/docs/ref/upgrade.4.3/toc.html
+++ b/db/docs/ref/upgrade.4.3/toc.html
@@ -1,5 +1,5 @@
<!--$Id: toc.so,v 1.13 2004/09/28 15:04:22 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -32,6 +32,6 @@
</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-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.3/verb.html b/db/docs/ref/upgrade.4.3/verb.html
index 57f555233..25ed060c2 100644
--- a/db/docs/ref/upgrade.4.3/verb.html
+++ b/db/docs/ref/upgrade.4.3/verb.html
@@ -1,5 +1,5 @@
<!--$Id: verb.so,v 1.8 2004/09/28 14:13:10 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -28,6 +28,6 @@ well as errors. Application writers using <a href="../../api_c/env_set_verbose.
should confirm that output is handled appropriately.</p>
<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.3/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.3/log.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.4/autocommit.html b/db/docs/ref/upgrade.4.4/autocommit.html
new file mode 100644
index 000000000..d4af8fbc1
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/autocommit.html
@@ -0,0 +1,41 @@
+<!--$Id: autocommit.so,v 1.3 2005/02/10 20:02:42 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: DB_AUTO_COMMIT</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/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.4/isolation.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: DB_AUTO_COMMIT</h3>
+<p>In previous Berkeley DB releases, the <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag was used in
+the C and C++ Berkeley DB APIs to wrap operations within a transaction without
+explicitly creating a transaction and passing the <a href="../../api_c/txn_class.html">DB_TXN</a> handle
+as part of the operation method call. In the 4.4 release, the
+<a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag no longer needs to be explicitly specified.</p>
+<p>In the 4.4 release, specifying the <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag to the
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method causes all database modifications in that
+environment to be transactional; specifying <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> to
+the <a href="../../api_c/db_open.html">DB-&gt;open</a> method causes all modifications to that database to be
+transactional; specifying <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> to the
+<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 causes those
+specific operations to be transactional.</p>
+<p>No related application changes are required for this release, as the
+<a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag is ignored where it is no longer needed.
+However, application writers are encouraged to remove uses of the
+<a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag in places where it is no longer needed.</p>
+<p>Similar changes have been made to the Berkeley DB Tcl API. These changes are
+not optional, and Tcl applications will need to remove the -auto_commit
+flag from methods where it is no longer needed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.4/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.4/isolation.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/clear.html b/db/docs/ref/upgrade.4.4/clear.html
new file mode 100644
index 000000000..ff044f43a
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/clear.html
@@ -0,0 +1,32 @@
+<!--$Id: clear.so,v 1.2 2005/12/13 16:47:06 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: 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,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.4/mutex.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.4/lockstat.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: DB_MPOOLFILE-&gt;set_clear_len</h3>
+<p>The meaning of a 0 "clear length" argument to the
+<a href="../../api_c/memp_set_clear_len.html">DB_MPOOLFILE-&gt;set_clear_len</a> method changed in the Berkeley DB 4.4 release. In
+previous releases, specifying a length of 0 was equivalent to the
+default, and the entire created page was cleared. Unfortunately, this
+left no way to specify that no part of the page needed to be cleared.
+In the 4.4 release, specifying a "clear length" argument of 0 means that
+no part of the page need be cleared.</p>
+<p>Applications specifying a 0 "clear length" argument to the
+<a href="../../api_c/memp_set_clear_len.html">DB_MPOOLFILE-&gt;set_clear_len</a> method should simply remove the call, as the
+default behavior is to clear the entire created page.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.4/mutex.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.4/lockstat.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/disk.html b/db/docs/ref/upgrade.4.4/disk.html
new file mode 100644
index 000000000..75733a6a6
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/disk.html
@@ -0,0 +1,26 @@
+<!--$Id: disk.so,v 1.3 2005/12/08 13:41:56 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: upgrade requirements</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/lockstat.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.5/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: upgrade requirements</h3>
+<p>The log file format changed in the Berkeley DB 4.4 release. No database
+formats changed in the Berkeley DB 4.4 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.4/lockstat.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.5/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/intro.html b/db/docs/ref/upgrade.4.4/intro.html
new file mode 100644
index 000000000..d5b866656
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/intro.html
@@ -0,0 +1,26 @@
+<!--$Id: intro.so,v 1.1 2004/12/16 19:13:03 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: introduction</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.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.4/autocommit.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: introduction</h3>
+<p>The following pages describe how to upgrade applications coded against
+the Berkeley DB 4.3 release interfaces to the Berkeley DB 4.4 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.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.4/autocommit.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/isolation.html b/db/docs/ref/upgrade.4.4/isolation.html
new file mode 100644
index 000000000..c3fc9708d
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/isolation.html
@@ -0,0 +1,28 @@
+<!--$Id: isolation.so,v 1.4 2005/10/20 16:14:24 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: DB_DEGREE_2, DB_DIRTY_READ</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/autocommit.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.4/joinenv.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: DB_DEGREE_2, DB_DIRTY_READ</h3>
+<p>The names of two isolation-level flags changed in the Berkeley DB 4.4 release.
+The DB_DEGREE_2 flag was renamed to <a href="../../api_c/db_cursor.html#DB_READ_COMMITTED">DB_READ_COMMITTED</a>, and the
+DB_DIRTY_READ flag was renamed to <a href="../../api_c/db_open.html#DB_READ_UNCOMMITTED">DB_READ_UNCOMMITTED</a>, to match
+ANSI standard names for isolation levels. The historic flag names
+continue to work in this release, but may be removed from future
+releases.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.4/autocommit.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.4/joinenv.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/joinenv.html b/db/docs/ref/upgrade.4.4/joinenv.html
new file mode 100644
index 000000000..8e3776a34
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/joinenv.html
@@ -0,0 +1,60 @@
+<!--$Id: joinenv.so,v 1.1 2005/09/09 12:40:34 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: DB_JOINENV</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/isolation.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.4/mutex.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: DB_JOINENV</h3>
+<p>The semantics of joining existing Berkeley DB database environments has changed
+in the 4.4 release. Previously:</p>
+<ol>
+<p><li>Applications joining existing environments, but not configuring some of
+the subsystems configured in the environment when it was created, would
+not be configured for those subsystems.
+<p><li>Applications joining existing environments, but configuring additional
+subsystems in addition to the subsystems configured in the environment
+when it was created, would cause additional subsystems to be configured
+in the database environment.
+</ol>
+<p>In the 4.4 release, the semantics have been simplified to make it easier
+to write robust applications. In the 4.4 release:</p>
+<ol>
+<p><li>Applications joining existing environments, but not configuring some of
+the subsystems configured in the environment when it was created, will
+now automatically be configured for all of the subsystems configured in
+the environment.
+<p><li>Applications joining existing environments, but configuring additional
+subsystems in addition to the subsystems configured in the environment
+when it was created, will fail, as no additional subsystems can be
+configured for a database environment after it is created.
+</ol>
+<p>In other words, the choice of subsystems initialized for a Berkeley DB
+database environment is specified by the thread of control initially
+creating the environment. Any subsequent thread of control joining the
+environment will automatically be configured to use the same subsystems
+as were created in the environment (unless the thread of control
+requests a subsystem not available in the environment, which will fail).
+Applications joining an environment, able to adapt to whatever
+subsystems have been configured in the environment, should open the
+environment without specifying any subsystem flags. Applications
+joining an environment, requiring specific subsystems from their
+environments, should open the environment specifying those specific
+subsystem flags.</p>
+<p>The DB_JOINENV flag has been changed to have no effect in the Berkeley DB 4.4
+release. Applications should require no changes, although uses of the
+DB_JOINENV flag may be removed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.4/isolation.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.4/mutex.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/lockstat.html b/db/docs/ref/upgrade.4.4/lockstat.html
new file mode 100644
index 000000000..a69ae8538
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/lockstat.html
@@ -0,0 +1,28 @@
+<!--$Id: lockstat.so,v 1.4 2005/11/08 02:45:19 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: lock statistics</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/clear.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.4/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: lock statistics</h3>
+<p>The names of two fields in the lock statistics changed in the Berkeley DB 4.4
+release. The <b>st_nconflicts</b> field was renamed to be
+<b>st_lock_wait</b>, and the <b>st_nnowaits</b> field was renamed to
+be <b>st_lock_nowait</b>. The meaning of the fields is unchanged
+(although the documentation has been updated to make it clear what these
+fields really represent).</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.4/clear.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.4/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/mutex.html b/db/docs/ref/upgrade.4.4/mutex.html
new file mode 100644
index 000000000..6213eebc5
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/mutex.html
@@ -0,0 +1,32 @@
+<!--$Id: mutex.so,v 1.3 2005/11/08 02:45:20 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.4: mutexes</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/joinenv.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.4/clear.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.4: mutexes</h3>
+<p>The DB_ENV&gt;set_tas_spins and DB_ENV&gt;get_tas_spins methods have
+been renamed to <a href="../../api_c/mutex_set_tas_spins.html">DB_ENV-&gt;mutex_set_tas_spins</a> and
+<a href="../../api_c/mutex_set_tas_spins.html">DB_ENV-&gt;mutex_get_tas_spins</a> to match the new mutex support in the Berkeley DB
+4.4 release. Applications calling the old methods should be updated to
+use the new method names.</p>
+<p>For backward compatibility, the string "set_tas_spins" is still supported
+in DB_CONFIG files.</p>
+<p>The --with-mutexalign=ALIGNMENT compile-time configuration option has
+been removed from Berkeley DB configuration. Mutex alignment should now be
+configured at run-time, using the <a href="../../api_c/mutex_set_align.html">DB_ENV-&gt;mutex_set_align</a> method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.4/joinenv.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.4/clear.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.4/toc.html b/db/docs/ref/upgrade.4.4/toc.html
new file mode 100644
index 000000000..f1fc2a3c8
--- /dev/null
+++ b/db/docs/ref/upgrade.4.4/toc.html
@@ -0,0 +1,33 @@
+<!--$Id: toc.so,v 1.6 2005/11/08 02:45:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 4.3.X applications to Berkeley DB 4.4</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 4.3.X applications to Berkeley DB 4.4</h3>
+<ol>
+<li><a href="intro.html">Release 4.4: introduction</a>
+<li><a href="autocommit.html">Release 4.4: DB_AUTO_COMMIT</a>
+<li><a href="isolation.html">Release 4.4: DB_DEGREE_2, DB_DIRTY_READ</a>
+<li><a href="joinenv.html">Release 4.4: DB_JOINENV</a>
+<li><a href="mutex.html">Release 4.4: mutexes</a>
+<li><a href="clear.html">Release 4.4: DB_MPOOLFILE-&gt;set_clear_len</a>
+<li><a href="lockstat.html">Release 4.4: lock statistics</a>
+<li><a href="disk.html">Release 4.4: 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>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/alive.html b/db/docs/ref/upgrade.4.5/alive.html
new file mode 100644
index 000000000..fb4b6112f
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/alive.html
@@ -0,0 +1,30 @@
+<!--$Id: alive.so,v 1.2 2006/03/15 19:39:19 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: DB-&gt;set_isalive</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/deprecate.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.5/elect.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: DB-&gt;set_isalive</h3>
+<p>In previous releases, the function specified to the
+<a href="../../api_c/env_set_isalive.html">DB_ENV-&gt;set_isalive</a> method did not take a flags parameter. In the Berkeley DB
+4.5 release, an additional flags argument has been added:
+<a href="../../api_c/env_set_isalive.html#DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a>.</p>
+<p>Applications configuring an is-alive function should add a flags
+argument to the function, and change the function to ignore any thread
+ID and return the status of just the process, when the
+<a href="../../api_c/env_set_isalive.html#DB_MUTEX_PROCESS_ONLY">DB_MUTEX_PROCESS_ONLY</a> flag is specified.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/deprecate.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.5/elect.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/applog.html b/db/docs/ref/upgrade.4.5/applog.html
new file mode 100644
index 000000000..6e5e08708
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/applog.html
@@ -0,0 +1,33 @@
+<!--$Id: applog.so,v 1.1 2006/09/13 16:43:03 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: Application-specific logging</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/source.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.5/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: Application-specific logging</h3>
+<p>In previous releases of Berkeley DB, "BEGIN" lines in the XXX.src files used
+to build application-specific logging support only required a log record
+number. In the 4.5 release, those lines require a Berkeley DB library version
+as well. For example, the entry:</p>
+<blockquote><pre>BEGIN mdkir 10000</pre></blockquote>
+<p>must now be:</p>
+<blockquote><pre>BEGIN mdkir 44 10000</pre></blockquote>
+<p>that is, the version of the Berkeley DB release where the log record was
+introduced must be included. The version is the major and minor numbers
+for the Berkeley DB library, with all punctuation removed. For example, Berkeley DB
+version 4.2 should be 42, version 4.5 should be 45.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/source.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.5/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/collect.html b/db/docs/ref/upgrade.4.5/collect.html
new file mode 100644
index 000000000..80604ac13
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/collect.html
@@ -0,0 +1,31 @@
+<!--$Id: collect.so,v 1.1 2006/06/05 17:32:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: Collections API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/pagesize.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.5/config.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: Collections API</h3>
+<p>The changes to the Collections API are compatible with prior releases,
+with one exception: the Iterator object returned by the
+StoredCollection.iterator() method can no longer be explicitly cast to
+StoredIterator because a different implementation class is now used for
+iterators. If you depend on the StoredIterator class, you must now call
+StoredCollection.storedIterator() instead. Note the
+StoredIterator.close(Iterator) static method is compatible with the new
+iterator implementation, so no changes are necessary if you are using
+that method to close iterators.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/pagesize.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.5/config.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/config.html b/db/docs/ref/upgrade.4.5/config.html
new file mode 100644
index 000000000..a7765887f
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/config.html
@@ -0,0 +1,31 @@
+<!--$Id: config.so,v 1.5 2006/09/15 19:34:26 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: --enable-pthread_self</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/collect.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.5/source.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: --enable-pthread_self</h3>
+<p>In previous releases, the --enable-pthread_self configuration option was
+used to force Berkeley DB to use the POSIX pthread pthread_self function to
+identify threads of control (even when Berkeley DB was configured for
+test-and-set mutexes). In the 4.5 release, the --enable-pthread_self
+option has been replaced with the
+<a href="../../ref/build_unix/conf.html#--enable-pthread_api">--with-enable-pthread_api</a> option. This option has the same effect as
+the previous option, but configures the Berkeley DB build for a POSIX pthread
+application in other ways (for example, configuring Berkeley DB to use the
+pthread_self function).</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/collect.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.5/source.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/deprecate.html b/db/docs/ref/upgrade.4.5/deprecate.html
new file mode 100644
index 000000000..b98fff9c9
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/deprecate.html
@@ -0,0 +1,34 @@
+<!--$Id: deprecate.so,v 1.3 2006/01/27 16:13:51 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: deprecated interfaces</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/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.5/alive.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: deprecated interfaces</h3>
+<p>Some previously deprecated interfaces were removed from the Berkeley DB 4.5
+release:</p>
+<p><ul type=disc>
+<li>The DB_ENV-&gt;set_lk_max method was removed. This method has been
+deprecated and undocumented since the Berkeley DB 4.0 release.
+<li>The DB-&gt;stat method flags DB_CACHED_COUNT and DB_RECORDCOUNT were
+removed. These flags have been deprecated and undocumented since the
+Berkeley DB 4.1 release.
+<li>The <b>-w</b> option to the <a href="../../utility/db_deadlock.html">db_deadlock</a> utility was removed.
+This option has been deprecated and undocumented since the Berkeley DB 4.0
+release.
+</ul>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/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.5/alive.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/disk.html b/db/docs/ref/upgrade.4.5/disk.html
new file mode 100644
index 000000000..e946592c5
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/disk.html
@@ -0,0 +1,26 @@
+<!--$Id: disk.so,v 1.7 2006/09/13 16:43:03 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: upgrade requirements</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/applog.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.5: upgrade requirements</h3>
+<p>The log file format changed in the Berkeley DB 4.5 release. No database
+formats changed in the Berkeley DB 4.5 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.5/applog.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>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/elect.html b/db/docs/ref/upgrade.4.5/elect.html
new file mode 100644
index 000000000..1f7819c95
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/elect.html
@@ -0,0 +1,39 @@
+<!--$Id: elect.so,v 1.1 2006/03/15 19:39:19 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: 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,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.5/alive.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.5/rep_set.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: DB_ENV-&gt;rep_elect</h3>
+<p>Two of the historic arguments for the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method have been moved
+from the interface to separate methods in order to make them available
+within the new replication manager framework.</p>
+<p>The <b>priority</b> parameter should now be explicitly set using the
+<a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> method. To upgrade existing replication applications
+to the Berkeley DB 4.5 <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> interface, it may be simplest to
+insert a call to <a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> immediately before the
+existing call to <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>. Alternatively, it may make more
+sense to add a single call to <a href="../../api_c/rep_priority.html">DB_ENV-&gt;rep_set_priority</a> during database
+environment configuration.</p>
+<p>The <b>timeout</b> parameter should now be explicitly set using the
+<a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a> method. To upgrade existing replication applications
+to the Berkeley DB 4.5 <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> interface, it may be simplest to
+insert a call to <a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a> immediately before the existing
+call to <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>. Alternatively, it may make more sense to add
+a single call to <a href="../../api_c/rep_timeout.html">DB_ENV-&gt;rep_set_timeout</a> during database environment
+configuration.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/alive.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.5/rep_set.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/intro.html b/db/docs/ref/upgrade.4.5/intro.html
new file mode 100644
index 000000000..f6d9e490b
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/intro.html
@@ -0,0 +1,26 @@
+<!--$Id: intro.so,v 1.1 2005/12/08 13:41:56 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: introduction</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.4/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.5/deprecate.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: introduction</h3>
+<p>The following pages describe how to upgrade applications coded against
+the Berkeley DB 4.4 release interfaces to the Berkeley DB 4.5 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.4/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.5/deprecate.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/memp.html b/db/docs/ref/upgrade.4.5/memp.html
new file mode 100644
index 000000000..b5043d671
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/memp.html
@@ -0,0 +1,29 @@
+<!--$Id: memp.so,v 1.2 2006/09/11 23:31:27 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: Memory Pool API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/rep_event.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.5/paniccall.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: Memory Pool API</h3>
+<p>The <a href="../../api_c/memp_fget.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a> flag is now specified to the
+<a href="../../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a> method instead of <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>.
+In addition, a new transaction handle parameter has been added to
+<a href="../../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a> for use with multiversion concurrency control.</p>
+<p>The DB_MPOOL_CLEAN flag is no longer supported.</p>
+<p>Applications which use the memory pool API directly should update to
+the new API in order to use 4.5.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/rep_event.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.5/paniccall.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/pagesize.html b/db/docs/ref/upgrade.4.5/pagesize.html
new file mode 100644
index 000000000..8a57ac4e4
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/pagesize.html
@@ -0,0 +1,27 @@
+<!--$Id: pagesize.so,v 1.6 2006/06/05 17:32:22 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: DB-&gt;set_pagesize</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/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.4.5/collect.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: DB-&gt;set_pagesize</h3>
+<p>In previous releases, when creating a new database in a physical file
+which already contained databases, it was an error to specify a page
+size different from the existing databases in the file. In the Berkeley DB
+4.5 release, any page size specified is ignored if the file in which the
+database is being created already exists.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/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.4.5/collect.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/paniccall.html b/db/docs/ref/upgrade.4.5/paniccall.html
new file mode 100644
index 000000000..3720c18e9
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/paniccall.html
@@ -0,0 +1,34 @@
+<!--$Id: paniccall.so,v 1.4 2006/09/15 19:35:29 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: 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,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.5/memp.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.5/pagesize.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: DB_ENV-&gt;set_paniccall</h3>
+<p>In previous Berkeley DB releases, the DB_ENV-&gt;set_paniccall and
+DB-&gt;set_paniccall methods were used to register a callback
+function, called if the database environment failed. In the 4.5
+release, this functionality has been replaced by a general-purpose event
+notification callback function, set with the
+<a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a> method. Applications should be updated to
+replace DB_ENV-&gt;set_paniccall and DB-&gt;set_paniccall calls with
+a call to <a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a>. This also requires the
+callback function itself change, as the callback signatures are
+different.</p>
+<p>The DB_ENV-&gt;set_paniccall and DB-&gt;set_paniccall calls are
+expected to be removed in a future release of Berkeley DB.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/memp.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.5/pagesize.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/rep_event.html b/db/docs/ref/upgrade.4.5/rep_event.html
new file mode 100644
index 000000000..d6d8f960c
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/rep_event.html
@@ -0,0 +1,29 @@
+<!--$Id: rep_event.so,v 1.3 2006/08/08 05:24:10 mjc Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: Replication events</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/rep_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.4.5/memp.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: Replication events</h3>
+<p>One of the informational returns from the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method found
+in previous releases of Berkeley DB has been changed to an event. The
+DB_REP_STARTUPDONE return from <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> is now the
+<a href="../../api_c/env_event_notify.html#DB_EVENT_REP_STARTUPDONE">DB_EVENT_REP_STARTUPDONE</a> value to the
+<a href="../../api_c/env_event_notify.html">DB_ENV-&gt;set_event_notify</a> callback.</p>
+<p>Applications should update their handling of this event as
+necessary.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/rep_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.4.5/memp.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/rep_set.html b/db/docs/ref/upgrade.4.5/rep_set.html
new file mode 100644
index 000000000..57357fd97
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/rep_set.html
@@ -0,0 +1,30 @@
+<!--$Id: rep_set.so,v 1.6 2006/06/09 15:28:21 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: Replication method naming</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/elect.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.5/rep_event.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: Replication method naming</h3>
+<p>The method names DB_ENV-&gt;set_rep_limit, DB_ENV-&gt;get_rep_limit
+and DB_ENV-&gt;set_rep_transport have been changed to
+<a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_set_limit</a>, <a href="../../api_c/rep_limit.html">DB_ENV-&gt;rep_get_limit</a> and
+<a href="../../api_c/rep_transport.html">DB_ENV-&gt;rep_set_transport</a> in order to be consistent with the other
+replication method names. That is, the characters "set_rep" and
+"get_rep" have been changed to "rep_set" and "rep_get".</p>
+<p>Applications should modify the method names, no other change is
+required.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/elect.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.5/rep_event.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/source.html b/db/docs/ref/upgrade.4.5/source.html
new file mode 100644
index 000000000..06ad65f81
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/source.html
@@ -0,0 +1,37 @@
+<!--$Id: source.so,v 1.3 2006/09/13 16:43:03 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.5: Recno backing source files</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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.5/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.4.5/applog.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.5: Recno backing source files</h3>
+<p>In previous releases of Berkeley DB, Recno access method backing source text
+files were opened using the ANSI C fopen function with the "r" and "w"
+modes. This caused Windows systems to translate carriage-return and
+linefeed characters on input and output and could lead to database
+corruption.</p>
+<p>In the current release, Berkeley DB opens the backing source text files using
+the "rb" and "wb" modes, consequently carriage-return and linefeed
+characters will not be translated on Windows systems.</p>
+<p>Applications using the backing source text file feature on systems where
+the "r/w" and "rb/wb" modes differ should evaluate their application as part
+of upgrading to the 4.5 release. There is the possibility that
+characters have been translated or stripped and the backing source file
+has been corrupted. (Applications on other systems, for example,
+POSIX-like systems, should not require any changes related to this
+issue.)</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.5/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.4.5/applog.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.5/toc.html b/db/docs/ref/upgrade.4.5/toc.html
new file mode 100644
index 000000000..16b75c507
--- /dev/null
+++ b/db/docs/ref/upgrade.4.5/toc.html
@@ -0,0 +1,39 @@
+<!--$Id: toc.so,v 1.11 2006/09/13 16:43:03 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 4.4.X applications to Berkeley DB 4.5</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 4.4.X applications to Berkeley DB 4.5</h3>
+<ol>
+<li><a href="intro.html">Release 4.5: introduction</a>
+<li><a href="deprecate.html">Release 4.5: deprecated interfaces</a>
+<li><a href="alive.html">Release 4.5: DB_ENV-&gt;set_isalive</a>
+<li><a href="elect.html">Release 4.5: DB_ENV-&gt;rep_elect</a>
+<li><a href="rep_set.html">Release 4.5: Replication method naming</a>
+<li><a href="rep_event.html">Release 4.5: Replication events</a>
+<li><a href="memp.html">Release 4.5: Memory Pool API</a>
+<li><a href="paniccall.html">Release 4.5: DB_ENV-&gt;set_paniccall</a>
+<li><a href="pagesize.html">Release 4.5: DB-&gt;set_pagesize</a>
+<li><a href="collect.html">Release 4.5: Collections API</a>
+<li><a href="config.html">Release 4.5: --enable-pthread_self</a>
+<li><a href="source.html">Release 4.5: Recno backing text source files</a>
+<li><a href="applog.html">Release 4.5: Application-specific logging</a>
+<li><a href="disk.html">Release 4.5: 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>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade/process.html b/db/docs/ref/upgrade/process.html
index 86fb50357..bc0837c67 100644
--- a/db/docs/ref/upgrade/process.html
+++ b/db/docs/ref/upgrade/process.html
@@ -1,5 +1,5 @@
-<!--$Id: process.so,v 1.11 2003/11/26 14:31:29 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: process.so,v 1.14 2006/06/27 22:49:29 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -92,14 +92,20 @@ 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.
-<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.
-<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>Still using the old version of Berkeley DB, 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.
+<li>If you used the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method to run recovery, make sure that the
+Berkeley DB environment is removed 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.
<li>Recompile and install the new version of the application.
+<li>Force a checkpoint using the <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> method or the
+<a href="../../utility/db_checkpoint.html">db_checkpoint</a> utility. If you use the <a href="../../utility/db_checkpoint.html">db_checkpoint</a>
+utility, make sure to use the new version of the utility; that is, the
+version that came with the release of Berkeley DB to which you are upgrading.
<li>Restart the application.
</ol>
<p>Otherwise, if the application has a Berkeley DB transactional environment and
@@ -107,10 +113,12 @@ 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.
-<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.
-<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>Still using the old version of Berkeley DB, 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.
+<li>If you used the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method to run recovery, make sure that the
+Berkeley DB environment is removed 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.
@@ -127,6 +135,10 @@ 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>Force a checkpoint using the <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> method or the
+<a href="../../utility/db_checkpoint.html">db_checkpoint</a> utility. If you use the <a href="../../utility/db_checkpoint.html">db_checkpoint</a>
+utility, make sure to use the new version of the utility; that is, the
+version that came with the release of Berkeley DB to which you are upgrading.
<li>Restart the application.
</ol>
<p>Finally, upgrading a Berkeley DB replication group requires a few additional
@@ -146,6 +158,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade/version.html b/db/docs/ref/upgrade/version.html
index 7288a05de..f91a11e23 100644
--- a/db/docs/ref/upgrade/version.html
+++ b/db/docs/ref/upgrade/version.html
@@ -1,5 +1,5 @@
<!--$Id: version.so,v 10.24 2003/11/27 18:26:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -42,6 +42,6 @@ information, the <a href="../../api_c/env_version.html">db_version</a> function
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/build.html b/db/docs/ref/xa/build.html
index ebdece38d..8438d3c5c 100644
--- a/db/docs/ref/xa/build.html
+++ b/db/docs/ref/xa/build.html
@@ -1,5 +1,5 @@
<!--$Id: build.so,v 10.11 2003/10/18 19:16:21 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -177,6 +177,6 @@ transactions.
</dl>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/faq.html b/db/docs/ref/xa/faq.html
index 7def07238..49c0ee94b 100644
--- a/db/docs/ref/xa/faq.html
+++ b/db/docs/ref/xa/faq.html
@@ -1,5 +1,5 @@
<!--$Id: faq.so,v 10.21 2004/08/13 03:39:01 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -61,6 +61,6 @@ should occur independently of XA operation.</p>
</ol>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/intro.html b/db/docs/ref/xa/intro.html
index c1938b0d5..7b54850a1 100644
--- a/db/docs/ref/xa/intro.html
+++ b/db/docs/ref/xa/intro.html
@@ -1,5 +1,5 @@
<!--$Id: intro.so,v 10.6 2001/11/17 16:59:33 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -48,6 +48,6 @@ 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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 ec850fb8c..99baa7bdc 100644
--- a/db/docs/ref/xa/xa_config.html
+++ b/db/docs/ref/xa/xa_config.html
@@ -1,5 +1,5 @@
<!--$Id: xa_config.so,v 10.23 2003/06/27 17:38:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -75,6 +75,6 @@ resource manager.</p>
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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 b8375b0ea..41b9033f9 100644
--- a/db/docs/ref/xa/xa_intro.html
+++ b/db/docs/ref/xa/xa_intro.html
@@ -1,5 +1,5 @@
<!--$Id: xa_intro.so,v 10.22 2001/03/30 20:34:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -57,6 +57,6 @@ X/Open Document Number: XO/CAE/91/300.</blockquote>
by Andrade, Carges, Dwyer and Felts (Addison Wesley Longman).</blockquote>
<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="../../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - 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 c348c5de5..6df98117e 100644
--- a/db/docs/utility/berkeley_db_svc.html
+++ b/db/docs/utility/berkeley_db_svc.html
@@ -1,5 +1,5 @@
<!--$Id: berkeley_db_svc.so,v 10.16 2004/07/16 20:51:11 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -58,6 +58,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_archive.html b/db/docs/utility/db_archive.html
index 524a6f648..7c2920761 100644
--- a/db/docs/utility/db_archive.html
+++ b/db/docs/utility/db_archive.html
@@ -1,5 +1,5 @@
-<!--$Id: db_archive.so,v 10.28 2002/11/13 21:49:24 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_archive.so,v 10.29 2006/06/12 14:03:57 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -53,8 +53,7 @@ ignore them. When <a href="../utility/db_recover.html">db_recover</a> is run, a
log refers 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 library version number to the standard output, and exit.
-<dt><b>-v</b><dd>Run in verbose mode, listing the checkpoints in the log files as they
-are reviewed.
+<dt><b>-v</b><dd>Run in verbose mode.
</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
@@ -90,6 +89,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_checkpoint.html b/db/docs/utility/db_checkpoint.html
index 3db865829..92f87273b 100644
--- a/db/docs/utility/db_checkpoint.html
+++ b/db/docs/utility/db_checkpoint.html
@@ -1,5 +1,5 @@
-<!--$Id: db_checkpoint.so,v 10.26 2002/08/24 18:24:51 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_checkpoint.so,v 10.27 2005/12/05 20:48:10 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -25,8 +25,13 @@ database log, and periodically calls <a href="../api_c/txn_checkpoint.html">DB_E
it.</p>
<p>The options are as follows:</p>
<dl compact>
-<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.
+<dt><b>-1</b><dd>Force a single checkpoint of the log (regardless of whether or not there
+has been activity since the last checkpoint), and then exit.
+<p>
+When the <b>-1</b> flag is specified, the db_checkpoint
+utility will checkpoint the log even if unable to find an existing
+database environment. This functionality is useful when upgrading
+database environments from one version of Berkeley DB to another.</p>
<dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
<dt><b>-k</b><dd>Checkpoint the database at least as often as every <b>kbytes</b> of log
@@ -71,6 +76,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_deadlock.html b/db/docs/utility/db_deadlock.html
index 676148f2a..ab8b9d2d0 100644
--- a/db/docs/utility/db_deadlock.html
+++ b/db/docs/utility/db_deadlock.html
@@ -1,5 +1,5 @@
<!--$Id: db_deadlock.so,v 10.31 2004/03/17 15:18:18 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -82,6 +82,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_dump.html b/db/docs/utility/db_dump.html
index 665cde85d..c36ecf2f2 100644
--- a/db/docs/utility/db_dump.html
+++ b/db/docs/utility/db_dump.html
@@ -1,5 +1,5 @@
<!--$Id: db_dump.so,v 10.33 2003/09/25 15:28:17 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -116,6 +116,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_hotbackup.html b/db/docs/utility/db_hotbackup.html
new file mode 100644
index 000000000..0107b6101
--- /dev/null
+++ b/db/docs/utility/db_hotbackup.html
@@ -0,0 +1,129 @@
+<!--$Id: db_hotbackup.so,v 1.6 2006/03/08 17:34:24 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: db_hotbackup</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,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>db_hotbackup</h3>
+</td>
+</tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>db_hotbackup [<b>-cDuVv</b>] [<b>-d data_dir ...</b>] [<b>-h home</b>] [<b>-l log_dir</b>] [<b>-P password</b>] <b>-b</b> backup_dir</pre></h3>
+<h3>Description</h3>
+<a name="2"><!--meow--></a>
+<p>The db_hotbackup utility creates "hot backup" or "hot failover"
+snapshots of Berkeley DB database environments.</p>
+<p>The db_hotbackup utility performs the following steps:</p>
+<ol>
+<p><li>If the <b>-c</b> option is specified, checkpoint the source home
+database environment, and remove any unnecessary log files.
+<p><li>If the target directory for the backup does not exist, it is created
+with mode read-write-execute for the owner.
+<p>If the target directory for the backup does exist and the <b>-u</b>
+option was specified, all log files in the target directory are removed;
+if the <b>-u</b> option was not specified, all files in the target
+directory are removed.</p>
+<p><li>If the <b>-u</b> option was not specified, copy application-specific
+files found in the database environment home directory, or any directory
+specified using the <b>-d</b> option, into the target directory for
+the backup.
+<p><li>Copy all log files found in the directory specified by the <b>-l</b>
+option (or in the database environment home directory, if no <b>-l</b>
+option was specified), into the target directory for the backup.
+<p><li>Perform catastrophic recovery in the target directory for the backup.
+<p><li>Remove any unnecessary log files from the target directory for the
+backup.
+</ol>
+<p>The db_hotbackup utility does not resolve pending transactions that
+are in the prepared state. Applications that use <a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a>
+should specify <a href="../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a> when opening the environment,
+and run <a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> to resolve any pending transactions, when
+failing over to the backup.</p>
+<p>The options are as follows:</p>
+<dl compact>
+<dt><b>-b</b><dd>Specify the target directory for the backup.
+<dt><b>-c</b><dd>Before performing the backup, checkpoint the source database environment
+and remove any log files that are no longer required in that environment.
+<b>To avoid making catastrophic failure impossible, log file removal
+must be integrated with log file archival.</b>
+<dt><b>-D</b><dd>Use the data directories listed in the <a href="../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> configuration
+file in the source directory. This option has three effects:
+<ol>
+<p><li>First, if they do not already exist, the specified data directories will
+be created relative to the target directory (with mode read-write-execute
+owner).
+<p><li>Second, all files in the source data directories will be copied to the
+target data directories. If the <a href="../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> file specifies one
+or more absolute pathnames, files in those source directories will be
+copied to the top-level target directory.
+<p><li>Third, the <a href="../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> configuration file will be copied from the
+source directory to the target directory, and subsequently used for
+configuration if recovery is run in the target directory.
+</ol>
+<p>Care should be taken with the <b>-D</b> option and data directories
+which are named relative to the source directory but are not
+subdirectories (that is, the name includes the element "..")
+Specifically, the constructed target directory names must be meaningful
+and distinct from the source directory names, otherwise running recovery
+in the target directory might corrupt the source data files.</p>
+<p><b>It is an error to use absolute pathnames for data directories
+or the log directory in this mode, as the <a href="../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a>
+configuration file copied into the target directory would then point at
+the source directories and running recovery would corrupt the source
+data files.</b></p>
+<dt><b>-d</b><dd>Specify one or more source directories that contain database files; if
+no source directories are specified, the source directory will be
+searched for database files.
+<b>As all database files are copied into a single backup directory, files
+named the same, stored in different source directories, would overwrite
+each other when copied into the backup directory.</b>
+<p>Please note the database environment recovery log references database
+files as they are named by the application program. <b>If the
+application uses absolute or relative pathnames to name database files,
+(rather than filenames and the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method or the
+<a href="../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> configuration file to specify filenames), running
+recovery in the target directory may not properly find the copies of
+the files or might even find the source files, potentially resulting in
+corruption.</b></p>
+<dt><b>-h</b><dd>Specify the source directory for the backup, that is, the database
+environment home directory.
+<dt><b>-l</b><dd>Specify a source directory that contains log files; if none is specified,
+the database environment home directory will be searched for log files.
+<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.
+<dt><b>-u</b><dd>Update a pre-existing hot backup snapshot by copying in new log files.
+If the <b>-u</b> option is specified, no databases will be copied
+into the target directory.
+<dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
+<dt><b>-v</b><dd>Run in verbose mode, listing operations as they are done.
+</dl>
+<p>The db_hotbackup utility uses a Berkeley DB environment (as described for the
+<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_hotbackup should always be given the chance to
+detach from the environment and exit gracefully. To cause db_hotbackup
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The db_hotbackup utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
+<dl compact>
+<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">DB_ENV-&gt;open</a>.
+</dl>
+</tt>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/utility/db_load.html b/db/docs/utility/db_load.html
index 3860a870a..a0691f14d 100644
--- a/db/docs/utility/db_load.html
+++ b/db/docs/utility/db_load.html
@@ -1,5 +1,5 @@
<!--$Id: db_load.so,v 10.42 2004/03/24 20:12:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -157,6 +157,6 @@ to use extents.
<dt>subdatabase (string)<dd>The subdatabase to load.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_printlog.html b/db/docs/utility/db_printlog.html
index ab4fcdb82..015b79791 100644
--- a/db/docs/utility/db_printlog.html
+++ b/db/docs/utility/db_printlog.html
@@ -1,5 +1,5 @@
<!--$Id: db_printlog.so,v 10.15 2003/12/10 20:25:45 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -62,6 +62,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_recover.html b/db/docs/utility/db_recover.html
index 962391d09..f744a3195 100644
--- a/db/docs/utility/db_recover.html
+++ b/db/docs/utility/db_recover.html
@@ -1,5 +1,5 @@
-<!--$Id: db_recover.so,v 10.27 2002/08/24 18:24:53 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_recover.so,v 10.28 2005/11/01 20:22:28 alanb Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -44,8 +44,8 @@ letters represents the following:
<dl compact>
<dt>CC<dd>The first two digits of the year (the century).
<dt>YY<dd>The second two digits of the year. If "YY" is specified, but "CC" is not,
-a value for "YY" between 69 and 99 results in a "YY" value of 19. Otherwise,
-a "YY" value of 20 is used.
+a value for "YY" between 69 and 99 results in a "CC" value of 19. Otherwise,
+a "CC" value of 20 is used.
<dt>MM<dd>The month of the year, from 1 to 12.
<dt>DD<dd>The day of the month, from 1 to 31.
<dt>hh<dd>The hour of the day, from 0 to 23.
@@ -87,6 +87,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_stat.html b/db/docs/utility/db_stat.html
index 9953cb613..7fe540824 100644
--- a/db/docs/utility/db_stat.html
+++ b/db/docs/utility/db_stat.html
@@ -1,5 +1,5 @@
-<!--$Id: db_stat.so,v 10.45 2004/07/14 15:41:04 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 10.46 2006/08/04 11:56:09 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -23,9 +23,7 @@ db_stat [<b>-cEelmNrtVZ</b>] [<b>-C Aclop</b>] [<b>-h home</b>] [<b>-L A</b>] [<
<p>The db_stat utility displays statistics for Berkeley DB environments.</p>
<p>The options are as follows:</p>
<dl compact>
-<dt><b>-C</b><dd>Display internal information about the locking subsystem. (The output
-from this option is often both voluminous and meaningless, and is
-intended only for debugging.)
+<dt><b>-C</b><dd>Display detailed information about the locking subsystem.
<dl compact>
<dt>A<dd>Display all information.
<dt>c<dd>Display lock conflict matrix.
@@ -39,10 +37,7 @@ intended only for debugging.)
<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.</p>
-<dt><b>-E</b><dd>Display internal information about the database environment, including
-all configured subsystems of the database environment. (The
-output from this option is often both voluminous and meaningless, and
-is intended only for debugging.)
+<dt><b>-E</b><dd>Display detailed information about the database environment.
<dt><b>-e</b><dd>Display information about the database environment, including
all configured subsystems of the database environment.
<dt><b>-f</b><dd>Display only those database statistics that can be
@@ -50,9 +45,7 @@ acquired without traversing the database.
<dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
<dt><b>-l</b><dd>Display logging subsystem statistics, as described in <a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a>.
-<dt><b>-M</b><dd>Display internal information about the cache. (The output from this
-option is often both voluminous and meaningless, and is intended only
-for debugging.)
+<dt><b>-M</b><dd>Display detailed information about the cache.
<dl compact>
<dt>A<dd>Display all information.
<dt>h<dd>Display buffers within hash chains.
@@ -67,9 +60,7 @@ 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.
-<dt><b>-R</b><dd>Display internal information about the replication subsystem. (The
-output from this option is often both voluminous and meaningless, and
-is intended only for debugging.)
+<dt><b>-R</b><dd>Display detailed information about the replication subsystem.
<dl compact>
<dt>A<dd>Display all information.
</dl>
@@ -104,6 +95,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_upgrade.html b/db/docs/utility/db_upgrade.html
index e151fc7e8..569603351 100644
--- a/db/docs/utility/db_upgrade.html
+++ b/db/docs/utility/db_upgrade.html
@@ -1,5 +1,5 @@
-<!--$Id: db_upgrade.so,v 1.8 2002/08/24 18:24:54 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: db_upgrade.so,v 1.9 2004/12/01 13:55:41 bostic Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -16,7 +16,7 @@
</tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_upgrade [<b>-NsV</b>] [<b>-h home</b>] [<b>-P password</b>] file ...</pre></h3>
+<h3><pre>db_upgrade [<b>-NsVv</b>] [<b>-h home</b>] [<b>-P password</b>] file ...</pre></h3>
<h3>Description</h3>
<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<p>The db_upgrade utility upgrades the Berkeley DB version of one or more
@@ -56,6 +56,7 @@ 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 library version number to the standard output, and exit.
+<dt><b>-v</b><dd>Run in verbose mode, displaying a message for each successful upgrade.
</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
@@ -79,6 +80,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_verify.html b/db/docs/utility/db_verify.html
index e2e05d290..2947f7a3e 100644
--- a/db/docs/utility/db_verify.html
+++ b/db/docs/utility/db_verify.html
@@ -1,5 +1,5 @@
<!--$Id: db_verify.so,v 10.10 2003/10/24 22:27:57 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -68,6 +68,6 @@ DB_HOME is set, it is used as the path of the database home, as described
in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
</tt>
-<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/index.html b/db/docs/utility/index.html
index d1126a992..c36e977a2 100644
--- a/db/docs/utility/index.html
+++ b/db/docs/utility/index.html
@@ -1,5 +1,5 @@
-<!--$Id: index.so,v 10.13 2003/11/27 18:26:08 bostic Exp $-->
-<!--Copyright 1997-2004 by Sleepycat Software, Inc.-->
+<!--$Id: index.so,v 10.18 2005/03/24 18:15:35 gmf Exp $-->
+<!--Copyright 1997-2006 by Oracle Corporation-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
@@ -17,6 +17,7 @@
<tr><td><a href="../utility/db_checkpoint.html">db_checkpoint</a></td><td>Transaction checkpoint utility</td></tr>
<tr><td><a href="../utility/db_deadlock.html">db_deadlock</a></td><td>Deadlock detection utility</td></tr>
<tr><td><a href="../utility/db_dump.html">db_dump</a></td><td>Database dump utility</td></tr>
+<tr><td><a href="../utility/db_hotbackup.html">db_hotbackup</a></td><td>Hot backup utility</td></tr>
<tr><td><a href="../utility/db_load.html">db_load</a></td><td>Database load utility</td></tr>
<tr><td><a href="../utility/db_printlog.html">db_printlog</a></td><td>Transaction log display utility</td></tr>
<tr><td><a href="../utility/db_recover.html">db_recover</a></td><td>Recovery utility</td></tr>
@@ -24,6 +25,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="../sleepycat/legal.html">Copyright (c) 1996-2004</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+<p><font size=1>Copyright (c) 1996-2006 Oracle Corporation - All rights reserved.</font>
</body>
</html>
diff --git a/db/env/db_salloc.c b/db/env/db_salloc.c
index f2b1ed386..edd4fcb8e 100644
--- a/db/env/db_salloc.c
+++ b/db/env/db_salloc.c
@@ -1,21 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_salloc.c,v 11.28 2004/09/17 22:00:27 mjc Exp $
+ * $Id: db_salloc.c,v 12.10 2006/08/24 14:45:38 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -58,7 +51,7 @@ __db_shalloc_init(infop, size)
SH_LIST_INIT(hp);
elp = (struct __data *)(hp + 1);
- elp->len = size - sizeof(struct __head) - sizeof(elp->len);
+ elp->len = (size - sizeof(struct __head)) - sizeof(elp->len);
SH_LIST_INSERT_HEAD(hp, elp, links, __data);
}
@@ -155,9 +148,15 @@ __db_shalloc(infop, len, align, retp)
p = infop->addr;
/* Walk the list, looking for a slot. */
- for (elp = SH_LIST_FIRST((struct __head *)p, __data);
- elp != NULL;
- elp = SH_LIST_NEXT(elp, links, __data)) {
+ SH_LIST_FOREACH(elp, (struct __head *)p, links, __data) {
+ /*
+ * Skip chunks that are too small to work. This avoids address
+ * wrap-around in the subsequent calculations (if len were too
+ * large).
+ */
+ if (elp->len < len)
+ continue;
+
/*
* Calculate the value of the returned pointer if we were to
* use this chunk.
@@ -167,7 +166,6 @@ __db_shalloc(infop, len, align, retp)
*/
rp = (u_int8_t *)elp + sizeof(size_t) + elp->len;
rp = (u_int8_t *)rp - len;
- rp = (u_int8_t *)((uintptr_t)rp & ~(align - 1));
rp = ALIGNP_DEC(rp, align);
/*
@@ -252,7 +250,7 @@ __db_shalloc_free(infop, ptr)
/* In a private region, we call free. */
if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
- DB_ASSERT(infop->allocated >= free_size);
+ DB_ASSERT(dbenv, infop->allocated >= free_size);
infop->allocated -= free_size;
__os_free(dbenv, newp);
@@ -266,16 +264,7 @@ __db_shalloc_free(infop, ptr)
*
* Check it to make sure it hasn't been stomped.
*/
- if (*((u_int8_t *)ptr + free_size - 1) != GUARD_BYTE) {
- /*
- * 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 shared memory free.\n");
- abort();
- /* NOTREACHED */
- }
+ DB_ASSERT(dbenv, *((u_int8_t *)ptr + free_size - 1) == GUARD_BYTE);
/* Trash the returned memory (including guard byte). */
memset(ptr, CLEAR_BYTE, free_size);
diff --git a/db/env/db_shash.c b/db/env/db_shash.c
index ac3b31622..15dccf139 100644
--- a/db/env/db_shash.c
+++ b/db/env/db_shash.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_shash.c,v 11.9 2004/03/20 16:18:51 bostic Exp $
+ * $Id: db_shash.c,v 12.4 2006/08/24 14:45:38 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
/*
diff --git a/db/env/env_config.c b/db/env/env_config.c
new file mode 100644
index 000000000..1a098e277
--- /dev/null
+++ b/db/env/env_config.c
@@ -0,0 +1,370 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: env_config.c,v 12.67 2006/09/19 14:14:07 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
+
+#undef CONFIG_SLOTS
+#define CONFIG_SLOTS 10
+
+static int __config_parse __P((DB_ENV *, char *, int));
+static int __config_split __P((char *, char *[CONFIG_SLOTS]));
+
+/*
+ * __env_read_db_config --
+ * Read the DB_CONFIG file.
+ *
+ * PUBLIC: int __env_read_db_config __P((DB_ENV *));
+ */
+int
+__env_read_db_config(dbenv)
+ DB_ENV *dbenv;
+{
+ FILE *fp;
+ int lc, ret;
+ char *p, buf[256];
+
+ /* Parse the config file. */
+ p = NULL;
+ if ((ret =
+ __db_appname(dbenv, DB_APP_NONE, "DB_CONFIG", 0, NULL, &p)) != 0)
+ return (ret);
+ if (p == NULL)
+ fp = NULL;
+ else {
+ fp = fopen(p, "r");
+ __os_free(dbenv, p);
+ }
+
+ if (fp == NULL)
+ return (0);
+
+ for (lc = 1; fgets(buf, sizeof(buf), fp) != NULL; ++lc) {
+ if ((p = strchr(buf, '\n')) != NULL)
+ *p = '\0';
+ else if (strlen(buf) + 1 == sizeof(buf)) {
+ __db_errx(dbenv, "DB_CONFIG: line too long");
+ ret = EINVAL;
+ break;
+ }
+ for (p = buf; *p != '\0' || isspace((int)*p); ++p)
+ ;
+ if (buf[0] == '\0' || buf[0] == '#')
+ continue;
+
+ if ((ret = __config_parse(dbenv, buf, lc)) != 0)
+ break;
+ }
+ (void)fclose(fp);
+
+ return (ret);
+}
+
+#undef CONFIG_GET_INT
+#define CONFIG_GET_INT(s, vp) do { \
+ int __ret; \
+ if ((__ret = \
+ __db_getlong(dbenv, NULL, s, 0, INT_MAX, vp)) != 0) \
+ return (__ret); \
+} while (0)
+#undef CONFIG_GET_LONG
+#define CONFIG_GET_LONG(s, vp) do { \
+ int __ret; \
+ if ((__ret = \
+ __db_getlong(dbenv, NULL, s, 0, LONG_MAX, vp)) != 0) \
+ return (__ret); \
+} while (0)
+#undef CONFIG_INT
+#define CONFIG_INT(s, f) do { \
+ if (strcasecmp(s, argv[0]) == 0) { \
+ long __v; \
+ if (nf != 2) \
+ goto format; \
+ CONFIG_GET_INT(argv[1], &__v); \
+ return (f(dbenv, (int)__v)); \
+ } \
+} while (0)
+#undef CONFIG_GET_UINT32
+#define CONFIG_GET_UINT32(s, vp) do { \
+ if (__db_getulong(dbenv, NULL, s, 0, UINT32_MAX, vp) != 0) \
+ return (EINVAL); \
+} while (0)
+#undef CONFIG_UINT32
+#define CONFIG_UINT32(s, f) do { \
+ if (strcasecmp(s, argv[0]) == 0) { \
+ u_long __v; \
+ if (nf != 2) \
+ goto format; \
+ CONFIG_GET_UINT32(argv[1], &__v); \
+ return (f(dbenv, (u_int32_t)__v)); \
+ } \
+} while (0)
+
+/*
+ * __config_parse --
+ * Parse a single NAME VALUE pair.
+ */
+static int
+__config_parse(dbenv, s, lc)
+ DB_ENV *dbenv;
+ char *s;
+ int lc;
+{
+ u_long uv1, uv2;
+ u_int32_t flags;
+ long lv1, lv2;
+ int nf;
+ char *argv[CONFIG_SLOTS];
+ /* Split the line by white-space. */
+ if ((nf = __config_split(s, argv)) < 2) {
+format: __db_errx(dbenv,
+ "line %d: %s: incorrect name-value pair", lc, argv[0]);
+ return (EINVAL);
+ }
+
+ CONFIG_UINT32("mutex_set_align", __mutex_set_align);
+ CONFIG_UINT32("mutex_set_increment", __mutex_set_increment);
+ CONFIG_UINT32("mutex_set_max", __mutex_set_max);
+ CONFIG_UINT32("mutex_set_tas_spins", __mutex_set_tas_spins);
+
+ if (strcasecmp(argv[0], "rep_set_config") == 0) {
+ if (nf != 2)
+ goto format;
+ if (strcasecmp(argv[1], "rep_bulk") == 0)
+ return (__rep_set_config(dbenv,
+ DB_REP_CONF_BULK, 1));
+ if (strcasecmp(argv[1], "rep_delayclient") == 0)
+ return (__rep_set_config(dbenv,
+ DB_REP_CONF_DELAYCLIENT, 1));
+ if (strcasecmp(argv[1], "rep_noautoinit") == 0)
+ return (__rep_set_config(dbenv,
+ DB_REP_CONF_NOAUTOINIT, 1));
+ if (strcasecmp(argv[1], "rep_nowait") == 0)
+ return (__rep_set_config(dbenv, DB_REP_CONF_NOWAIT, 1));
+ goto format;
+ }
+
+ if (strcasecmp(argv[0], "set_cachesize") == 0) {
+ if (nf != 4)
+ goto format;
+ CONFIG_GET_UINT32(argv[1], &uv1);
+ CONFIG_GET_UINT32(argv[2], &uv2);
+ CONFIG_GET_INT(argv[3], &lv1);
+ return (__memp_set_cachesize(
+ dbenv, (u_int32_t)uv1, (u_int32_t)uv2, (int)lv1));
+ }
+
+ if (strcasecmp(argv[0], "set_data_dir") == 0 ||
+ strcasecmp(argv[0], "db_data_dir") == 0) { /* Compatibility. */
+ if (nf != 2)
+ goto format;
+ return (__env_set_data_dir(dbenv, argv[1]));
+ }
+ /* Undocumented. */
+ if (strcasecmp(argv[0], "set_intermediate_dir") == 0) {
+ if (nf != 2)
+ goto format;
+ CONFIG_GET_INT(argv[1], &lv1);
+ return (__env_set_intermediate_dir(dbenv, (int)lv1, 0));
+ }
+
+ if (strcasecmp(argv[0], "set_flags") == 0) {
+ if (nf != 2)
+ goto format;
+ if (strcasecmp(argv[1], "db_auto_commit") == 0)
+ return (__env_set_flags(dbenv, DB_AUTO_COMMIT, 1));
+ if (strcasecmp(argv[1], "db_cdb_alldb") == 0)
+ return (__env_set_flags(dbenv, DB_CDB_ALLDB, 1));
+ if (strcasecmp(argv[1], "db_direct_db") == 0)
+ return (__env_set_flags(dbenv, DB_DIRECT_DB, 1));
+ if (strcasecmp(argv[1], "db_direct_log") == 0)
+ return (__env_set_flags(dbenv, DB_DIRECT_LOG, 1));
+ if (strcasecmp(argv[1], "db_dsync_db") == 0)
+ return (__env_set_flags(dbenv, DB_DSYNC_DB, 1));
+ if (strcasecmp(argv[1], "db_dsync_log") == 0)
+ return (__env_set_flags(dbenv, DB_DSYNC_LOG, 1));
+ if (strcasecmp(argv[1], "db_log_autoremove") == 0)
+ return (__env_set_flags(dbenv, DB_LOG_AUTOREMOVE, 1));
+ if (strcasecmp(argv[1], "db_log_inmemory") == 0)
+ return (__env_set_flags(dbenv, DB_LOG_INMEMORY, 1));
+ if (strcasecmp(argv[1], "db_multiversion") == 0)
+ return (__env_set_flags(dbenv, DB_MULTIVERSION, 1));
+ if (strcasecmp(argv[1], "db_nolocking") == 0)
+ return (__env_set_flags(dbenv, DB_NOLOCKING, 1));
+ if (strcasecmp(argv[1], "db_nommap") == 0)
+ return (__env_set_flags(dbenv, DB_NOMMAP, 1));
+ if (strcasecmp(argv[1], "db_nopanic") == 0)
+ return (__env_set_flags(dbenv, DB_NOPANIC, 1));
+ if (strcasecmp(argv[1], "db_overwrite") == 0)
+ return (__env_set_flags(dbenv, DB_OVERWRITE, 1));
+ if (strcasecmp(argv[1], "db_region_init") == 0)
+ return (__env_set_flags(dbenv, DB_REGION_INIT, 1));
+ if (strcasecmp(argv[1], "db_txn_nosync") == 0)
+ return (__env_set_flags(dbenv, DB_TXN_NOSYNC, 1));
+ if (strcasecmp(argv[1], "db_txn_snapshot") == 0)
+ return (__env_set_flags(dbenv, DB_TXN_SNAPSHOT, 1));
+ if (strcasecmp(argv[1], "db_txn_write_nosync") == 0)
+ return (
+ __env_set_flags(dbenv, DB_TXN_WRITE_NOSYNC, 1));
+ if (strcasecmp(argv[1], "db_yieldcpu") == 0)
+ return (__env_set_flags(dbenv, DB_YIELDCPU, 1));
+ goto format;
+ }
+
+ CONFIG_UINT32("set_lg_bsize", __log_set_lg_bsize);
+ CONFIG_INT("set_lg_filemode", __log_set_lg_filemode);
+ CONFIG_UINT32("set_lg_max", __log_set_lg_max);
+ CONFIG_UINT32("set_lg_regionmax", __log_set_lg_regionmax);
+
+ if (strcasecmp(argv[0], "set_lg_dir") == 0 ||
+ strcasecmp(argv[0], "db_log_dir") == 0) { /* Compatibility. */
+ if (nf != 2)
+ goto format;
+ return (__log_set_lg_dir(dbenv, argv[1]));
+ }
+
+ if (strcasecmp(argv[0], "set_lk_detect") == 0) {
+ if (nf != 2)
+ goto format;
+ if (strcasecmp(argv[1], "db_lock_default") == 0)
+ flags = DB_LOCK_DEFAULT;
+ else if (strcasecmp(argv[1], "db_lock_expire") == 0)
+ flags = DB_LOCK_EXPIRE;
+ else if (strcasecmp(argv[1], "db_lock_maxlocks") == 0)
+ flags = DB_LOCK_MAXLOCKS;
+ else if (strcasecmp(argv[1], "db_lock_maxwrite") == 0)
+ flags = DB_LOCK_MAXWRITE;
+ else if (strcasecmp(argv[1], "db_lock_minlocks") == 0)
+ flags = DB_LOCK_MINLOCKS;
+ else if (strcasecmp(argv[1], "db_lock_minwrite") == 0)
+ flags = DB_LOCK_MINWRITE;
+ else if (strcasecmp(argv[1], "db_lock_oldest") == 0)
+ flags = DB_LOCK_OLDEST;
+ else if (strcasecmp(argv[1], "db_lock_random") == 0)
+ flags = DB_LOCK_RANDOM;
+ else if (strcasecmp(argv[1], "db_lock_youngest") == 0)
+ flags = DB_LOCK_YOUNGEST;
+ else
+ goto format;
+ return (__lock_set_lk_detect(dbenv, flags));
+ }
+
+ CONFIG_UINT32("set_lk_max_locks", __lock_set_lk_max_locks);
+ CONFIG_UINT32("set_lk_max_lockers", __lock_set_lk_max_lockers);
+ CONFIG_UINT32("set_lk_max_objects", __lock_set_lk_max_objects);
+
+ if (strcasecmp(argv[0], "set_lock_timeout") == 0) {
+ if (nf != 2)
+ goto format;
+ CONFIG_GET_UINT32(argv[1], &uv1);
+ return (__lock_set_env_timeout(
+ dbenv, (u_int32_t)uv1, DB_SET_LOCK_TIMEOUT));
+ }
+
+ CONFIG_INT("set_mp_max_openfd", __memp_set_mp_max_openfd);
+
+ if (strcasecmp(argv[0], "set_mp_max_write") == 0) {
+ if (nf != 3)
+ goto format;
+ CONFIG_GET_INT(argv[1], &lv1);
+ CONFIG_GET_INT(argv[2], &lv2);
+ return (__memp_set_mp_max_write(dbenv, (int)lv1, (int)lv2));
+ }
+
+ CONFIG_UINT32("set_mp_mmapsize", __memp_set_mp_mmapsize);
+
+ if (strcasecmp(argv[0], "set_region_init") == 0) {
+ if (nf != 2)
+ goto format;
+ CONFIG_GET_INT(argv[1], &lv1);
+ if (lv1 != 0 && lv1 != 1)
+ goto format;
+ return (__env_set_flags(
+ dbenv, DB_REGION_INIT, lv1 == 0 ? 0 : 1));
+ }
+
+ if (strcasecmp(argv[0], "set_shm_key") == 0) {
+ if (nf != 2)
+ goto format;
+ CONFIG_GET_LONG(argv[1], &lv1);
+ return (__env_set_shm_key(dbenv, lv1));
+ }
+
+ /*
+ * The set_tas_spins method has been replaced by mutex_set_tas_spins.
+ * The set_tas_spins argv[0] remains for DB_CONFIG compatibility.
+ */
+ CONFIG_UINT32("set_tas_spins", __mutex_set_tas_spins);
+
+ if (strcasecmp(argv[0], "set_tmp_dir") == 0 ||
+ strcasecmp(argv[0], "db_tmp_dir") == 0) { /* Compatibility.*/
+ if (nf != 2)
+ goto format;
+ return (__env_set_tmp_dir(dbenv, argv[1]));
+ }
+
+ CONFIG_UINT32("set_tx_max", __txn_set_tx_max);
+
+ if (strcasecmp(argv[0], "set_txn_timeout") == 0) {
+ if (nf != 2)
+ goto format;
+ CONFIG_GET_UINT32(argv[1], &uv1);
+ return (__lock_set_env_timeout(
+ dbenv, (u_int32_t)uv1, DB_SET_TXN_TIMEOUT));
+ }
+
+ if (strcasecmp(argv[0], "set_verbose") == 0) {
+ if (nf != 2)
+ goto format;
+ if (strcasecmp(argv[1], "db_verb_deadlock") == 0)
+ flags = DB_VERB_DEADLOCK;
+ else if (strcasecmp(argv[1], "db_verb_recovery") == 0)
+ flags = DB_VERB_RECOVERY;
+ else if (strcasecmp(argv[1], "db_verb_register") == 0)
+ flags = DB_VERB_REGISTER;
+ else if (strcasecmp(argv[1], "db_verb_replication") == 0)
+ flags = DB_VERB_REPLICATION;
+ else if (strcasecmp(argv[1], "db_verb_waitsfor") == 0)
+ flags = DB_VERB_WAITSFOR;
+ else
+ goto format;
+ return (__env_set_verbose(dbenv, flags, 1));
+ }
+
+ __db_errx(dbenv, "unrecognized name-value pair: %s", s);
+ return (EINVAL);
+}
+
+/*
+ * __config_split --
+ * Split lines into white-space separated fields, returning the count of
+ * fields.
+ */
+static int
+__config_split(input, argv)
+ char *input, *argv[CONFIG_SLOTS];
+{
+ int count;
+ char **ap;
+
+ for (count = 0, ap = argv; (*ap = strsep(&input, " \t\n")) != NULL;)
+ if (**ap != '\0') {
+ ++count;
+ if (++ap == &argv[CONFIG_SLOTS - 1]) {
+ *ap = NULL;
+ break;
+ }
+ }
+ return (count);
+}
diff --git a/db/env/env_failchk.c b/db/env/env_failchk.c
new file mode 100644
index 000000000..96348d44c
--- /dev/null
+++ b/db/env/env_failchk.c
@@ -0,0 +1,335 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: env_failchk.c,v 12.28 2006/08/24 14:45:39 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/mutex_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/hash.h" /* Needed for call to __ham_func5. */
+#include "dbinc/lock.h"
+#include "dbinc/txn.h"
+
+static int __env_in_api __P((DB_ENV *));
+
+/*
+ * __env_failchk_pp --
+ * DB_ENV->failchk pre/post processing.
+ *
+ * PUBLIC: int __env_failchk_pp __P((DB_ENV *, u_int32_t));
+ */
+int
+__env_failchk_pp(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ DB_THREAD_INFO *ip;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->failchk");
+
+ /*
+ * DB_ENV->failchk requires self and is-alive functions. We
+ * have a default self function, but no is-alive function.
+ */
+ if (!ALIVE_ON(dbenv)) {
+ __db_errx(dbenv,
+ "DB_ENV->failchk requires DB_ENV->is_alive be configured");
+ return (EINVAL);
+ }
+
+ if (flags != 0)
+ return (__db_ferr(dbenv, "DB_ENV->failchk", 0));
+
+ ENV_ENTER(dbenv, ip);
+
+ /*
+ * We check for dead threads in the API first as this would be likely
+ * to hang other things we try later, like locks and transactions.
+ */
+ if ((ret = __env_in_api(dbenv)) != 0)
+ goto err;
+
+ if (LOCKING_ON(dbenv) && (ret = __lock_failchk(dbenv)) != 0)
+ goto err;
+
+ if (TXN_ON(dbenv) && (ret = __txn_failchk(dbenv)) != 0)
+ goto err;
+
+ ret = __mut_failchk(dbenv);
+
+err: ENV_LEAVE(dbenv, ip);
+ return (ret);
+}
+
+/*
+ * __env_thread_init --
+ * Initialize the thread control block table.
+ *
+ * PUBLIC: int __env_thread_init __P((DB_ENV *, int));
+ */
+int
+__env_thread_init(dbenv, created)
+ DB_ENV *dbenv;
+ int created;
+{
+ DB_HASHTAB *htab;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ REGINFO *infop;
+ THREAD_INFO *thread;
+ int ret;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ infop = &mtxmgr->reginfo;
+
+ if (mtxregion->thread_off == INVALID_ROFF) {
+ if (dbenv->thr_nbucket == 0) {
+ dbenv->thr_hashtab = NULL;
+ if (ALIVE_ON(dbenv)) {
+ __db_errx(dbenv,
+ "is_alive method specified but no thread region allocated");
+ return (EINVAL);
+ }
+ return (0);
+ }
+
+ if (!created) {
+ __db_errx(dbenv,
+ "thread table must be allocated at environment create time");
+ return (EINVAL);
+ }
+
+ if ((ret = __db_shalloc(infop,
+ sizeof(THREAD_INFO), 0, &thread)) != 0) {
+ __db_errx(dbenv,
+ "cannot allocate a thread status block");
+ return (ret);
+ }
+ memset(thread, 0, sizeof(*thread));
+ mtxregion->thread_off = R_OFFSET(infop, thread);
+ thread->thr_nbucket = __db_tablesize(dbenv->thr_nbucket);
+ if ((ret = __db_shalloc(infop,
+ thread->thr_nbucket * sizeof(DB_HASHTAB), 0, &htab)) != 0)
+ return (ret);
+ thread->thr_hashoff = R_OFFSET(infop, htab);
+ __db_hashinit(htab, thread->thr_nbucket);
+ thread->thr_max = dbenv->thr_max;
+ } else {
+ thread = R_ADDR(infop, mtxregion->thread_off);
+ htab = R_ADDR(infop, thread->thr_hashoff);
+ }
+
+ dbenv->thr_hashtab = htab;
+ dbenv->thr_nbucket = thread->thr_nbucket;
+ dbenv->thr_max = thread->thr_max;
+ return (0);
+}
+
+/*
+ * __env_in_api --
+ * Look for threads which died in the api and complain.
+ */
+static int
+__env_in_api(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_HASHTAB *htab;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ DB_THREAD_INFO *ip;
+ REGINFO *infop;
+ THREAD_INFO *thread;
+ u_int32_t i;
+
+ if ((htab = dbenv->thr_hashtab) == NULL)
+ return (EINVAL);
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ infop = &mtxmgr->reginfo;
+ thread = R_ADDR(infop, mtxregion->thread_off);
+
+ for (i = 0; i < dbenv->thr_nbucket; i++)
+ SH_TAILQ_FOREACH(ip, &htab[i], dbth_links, __db_thread_info) {
+ if (ip->dbth_state == THREAD_SLOT_NOT_IN_USE ||
+ (ip->dbth_state == THREAD_OUT &&
+ thread->thr_count < thread->thr_max))
+ continue;
+ if (dbenv->is_alive(
+ dbenv, ip->dbth_pid, ip->dbth_tid, 0))
+ continue;
+ if (ip->dbth_state == THREAD_OUT) {
+ ip->dbth_state = THREAD_SLOT_NOT_IN_USE;
+ continue;
+ }
+ return (__db_failed(dbenv,
+ "Thread died in Berkeley DB library",
+ ip->dbth_pid, ip->dbth_tid));
+ }
+
+ return (0);
+}
+
+struct __db_threadid {
+ pid_t pid;
+ db_threadid_t tid;
+};
+
+/*
+ * PUBLIC: int __env_set_state __P((DB_ENV *,
+ * PUBLIC: DB_THREAD_INFO **, DB_THREAD_STATE));
+ */
+int
+__env_set_state(dbenv, ipp, state)
+ DB_ENV *dbenv;
+ DB_THREAD_INFO **ipp;
+ DB_THREAD_STATE state;
+{
+ DB_HASHTAB *htab;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ DB_THREAD_INFO *ip;
+ struct __db_threadid id;
+ REGINFO *infop;
+ THREAD_INFO *thread;
+ int ret;
+ u_int32_t indx;
+
+ htab = (DB_HASHTAB *)dbenv->thr_hashtab;
+
+ dbenv->thread_id(dbenv, &id.pid, &id.tid);
+
+ /*
+ * Hashing of thread ids. This is simple but could be replaced with
+ * something more expensive if needed.
+ */
+#ifdef HAVE_SIMPLE_THREAD_TYPE
+ /*
+ * A thread ID may be a pointer, so explicitly cast to a pointer of
+ * the appropriate size before doing the bitwise XOR.
+ */
+ indx = (u_int32_t)((uintptr_t)id.pid ^ (uintptr_t)id.tid);
+#else
+ indx = __ham_func5(NULL, &id.tid, sizeof(id.tid));
+#endif
+ indx %= dbenv->thr_nbucket;
+ SH_TAILQ_FOREACH(ip, &htab[indx], dbth_links, __db_thread_info) {
+#ifdef HAVE_SIMPLE_THREAD_TYPE
+ if (id.pid == ip->dbth_pid && id.tid == ip->dbth_tid)
+ break;
+#else
+ if (memcmp(&id.pid, &ip->dbth_pid, sizeof(id.pid)) != 0)
+ continue;
+ if (memcmp(&id.tid, &ip->dbth_tid, sizeof(id.tid)) != 0)
+ continue;
+ break;
+#endif
+ }
+
+#ifdef DIAGNOSTIC
+ if (state == THREAD_DIAGNOSTIC) {
+ *ipp = ip;
+ return (0);
+ }
+#endif
+
+ ret = 0;
+ if (ip == NULL) {
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ infop = &mtxmgr->reginfo;
+ thread = R_ADDR(infop, mtxregion->thread_off);
+ MUTEX_SYSTEM_LOCK(dbenv);
+
+ /*
+ * If we are passed the specified max, try to reclaim one from
+ * our queue. If failcheck has marked the slot not in use, we
+ * can take it, otherwise we must call is_alive before freeing
+ * it.
+ */
+ if (thread->thr_count >= thread->thr_max) {
+ SH_TAILQ_FOREACH(
+ ip, &htab[indx], dbth_links, __db_thread_info)
+ if (ip->dbth_state == THREAD_SLOT_NOT_IN_USE ||
+ (ip->dbth_state == THREAD_OUT &&
+ ALIVE_ON(dbenv) && !dbenv->is_alive(dbenv,
+ ip->dbth_pid, ip->dbth_tid, 0)))
+ break;
+
+ if (ip != NULL)
+ goto init;
+ }
+
+ thread->thr_count++;
+ if ((ret = __db_shalloc(infop,
+ sizeof(DB_THREAD_INFO), 0, &ip)) == 0) {
+ memset(ip, 0, sizeof(*ip));
+ /*
+ * This assumes we can link atomically since we do
+ * no locking here. We never use the backpointer
+ * so we only need to be able to write an offset
+ * atomically.
+ */
+ SH_TAILQ_INSERT_HEAD(
+ &htab[indx], ip, dbth_links, __db_thread_info);
+init: ip->dbth_pid = id.pid;
+ ip->dbth_tid = id.tid;
+ ip->dbth_state = state;
+ }
+ MUTEX_SYSTEM_UNLOCK(dbenv);
+ } else
+ ip->dbth_state = state;
+ *ipp = ip;
+
+ return (ret);
+}
+
+/*
+ * __env_thread_id_string --
+ * Convert a thread id to a string.
+ *
+ * PUBLIC: char *__env_thread_id_string
+ * PUBLIC: __P((DB_ENV *, pid_t, db_threadid_t, char *));
+ */
+char *
+__env_thread_id_string(dbenv, pid, tid, buf)
+ DB_ENV *dbenv;
+ pid_t pid;
+ db_threadid_t tid;
+ char *buf;
+{
+#ifdef HAVE_SIMPLE_THREAD_TYPE
+#ifdef UINT64_FMT
+ char fmt[20];
+
+ snprintf(fmt, sizeof(fmt), "%s/%s", UINT64_FMT, UINT64_FMT);
+ snprintf(buf,
+ DB_THREADID_STRLEN, fmt, (u_int64_t)pid, (u_int64_t)(uintptr_t)tid);
+#else
+ snprintf(buf, DB_THREADID_STRLEN, "%lu/%lu", (u_long)pid, (u_long)tid);
+#endif
+#else
+#ifdef UINT64_FMT
+ char fmt[20];
+
+ snprintf(fmt, sizeof(fmt), "%s/TID", UINT64_FMT);
+ snprintf(buf, DB_THREADID_STRLEN, fmt, (u_int64_t)pid);
+#else
+ snprintf(buf, DB_THREADID_STRLEN, "%lu/TID", (u_long)pid);
+#endif
+#endif
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(*(u_int8_t *)&tid, 0);
+
+ return (buf);
+}
diff --git a/db/env/env_file.c b/db/env/env_file.c
index 53f93cc53..09ff5c6fd 100644
--- a/db/env/env_file.c
+++ b/db/env/env_file.c
@@ -1,98 +1,66 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: env_file.c,v 1.11 2004/03/24 20:51:38 bostic Exp $
+ * $Id: env_file.c,v 12.12 2006/08/24 14:45:39 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-static int __db_overwrite_pass __P((DB_ENV *,
- const char *, DB_FH *, u_int32_t, u_int32_t, int));
-
/*
- * __db_fileinit --
- * Initialize a regular file, optionally zero-filling it as well.
+ * __db_file_extend --
+ * Initialize a regular file by writing the last page of the file.
*
- * PUBLIC: int __db_fileinit __P((DB_ENV *, DB_FH *, size_t, int));
+ * PUBLIC: int __db_file_extend __P((DB_ENV *, DB_FH *, size_t));
*/
int
-__db_fileinit(dbenv, fhp, size, zerofill)
+__db_file_extend(dbenv, fhp, size)
DB_ENV *dbenv;
DB_FH *fhp;
size_t size;
- int zerofill;
{
db_pgno_t pages;
- size_t i;
size_t nw;
u_int32_t relative;
int ret;
- char buf[OS_VMPAGESIZE];
-
- /* Write nuls to the new bytes. */
- memset(buf, 0, sizeof(buf));
+ char *buf;
/*
- * Extend the region by writing the last page. If the region is >4Gb,
+ * Extend the file by writing the last page. If the region is >4Gb,
* increment may be larger than the maximum possible seek "relative"
* argument, as it's an unsigned 32-bit value. Break the offset into
- * pages of 1MB each so that we don't overflow (2^20 + 2^32 is bigger
+ * pages of 1MB each so we don't overflow -- (2^20 + 2^32 is bigger
* than any memory I expect to see for awhile).
*/
- if ((ret = __os_seek(dbenv, fhp, 0, 0, 0, 0, DB_OS_SEEK_END)) != 0)
- return (ret);
- pages = (db_pgno_t)((size - OS_VMPAGESIZE) / MEGABYTE);
- relative = (u_int32_t)((size - OS_VMPAGESIZE) % MEGABYTE);
- if ((ret = __os_seek(dbenv,
- fhp, MEGABYTE, pages, relative, 0, DB_OS_SEEK_CUR)) != 0)
- return (ret);
- if ((ret = __os_write(dbenv, fhp, buf, sizeof(buf), &nw)) != 0)
+#undef FILE_EXTEND_IO_SIZE
+#define FILE_EXTEND_IO_SIZE (8 * 1024)
+ if ((ret = __os_calloc(dbenv, FILE_EXTEND_IO_SIZE, 1, &buf)) != 0)
return (ret);
- /*
- * We may want to guarantee that there is enough disk space for the
- * file, so we also write a byte to each page. We write the byte
- * because reading it is insufficient on systems smart enough not to
- * instantiate disk pages to satisfy a read (e.g., Solaris).
- */
- if (zerofill) {
- pages = (db_pgno_t)(size / MEGABYTE);
- relative = (u_int32_t)(size % MEGABYTE);
- if ((ret = __os_seek(dbenv, fhp,
- MEGABYTE, pages, relative, 1, DB_OS_SEEK_END)) != 0)
- return (ret);
+ pages = (db_pgno_t)((size - FILE_EXTEND_IO_SIZE) / MEGABYTE);
+ relative = (u_int32_t)((size - FILE_EXTEND_IO_SIZE) % MEGABYTE);
+ if ((ret = __os_seek(dbenv, fhp, pages, MEGABYTE, relative)) != 0)
+ goto err;
+ if ((ret = __os_write(dbenv, fhp, buf, FILE_EXTEND_IO_SIZE, &nw)) != 0)
+ goto err;
+
+err: __os_free(dbenv, buf);
- /* Write a byte to each page. */
- for (i = 0; i < size; i += OS_VMPAGESIZE) {
- if ((ret = __os_write(dbenv, fhp, buf, 1, &nw)) != 0)
- return (ret);
- if ((ret = __os_seek(dbenv, fhp,
- 0, 0, OS_VMPAGESIZE - 1, 0, DB_OS_SEEK_CUR)) != 0)
- return (ret);
- }
- }
return (0);
}
/*
- * __db_overwrite --
- * Overwrite a file.
+ * __db_file_multi_write --
+ * Overwrite a file with multiple passes to corrupt the data.
*
- * PUBLIC: int __db_overwrite __P((DB_ENV *, const char *));
+ * PUBLIC: int __db_file_multi_write __P((DB_ENV *, const char *));
*/
int
-__db_overwrite(dbenv, path)
+__db_file_multi_write(dbenv, path)
DB_ENV *dbenv;
const char *path;
{
@@ -108,17 +76,17 @@ __db_overwrite(dbenv, path)
* byte patterns. Implies a fixed-block filesystem, journaling
* or logging filesystems will require operating system support.
*/
- if ((ret = __db_overwrite_pass(
- dbenv, path, fhp, mbytes, bytes, 255)) != 0)
+ if ((ret =
+ __db_file_write(dbenv, fhp, mbytes, bytes, 255)) != 0)
goto err;
- if ((ret = __db_overwrite_pass(
- dbenv, path, fhp, mbytes, bytes, 0)) != 0)
+ if ((ret =
+ __db_file_write(dbenv, fhp, mbytes, bytes, 0)) != 0)
goto err;
- if ((ret = __db_overwrite_pass(
- dbenv, path, fhp, mbytes, bytes, 255)) != 0)
+ if ((ret =
+ __db_file_write(dbenv, fhp, mbytes, bytes, 255)) != 0)
goto err;
} else
- __db_err(dbenv, "%s: %s", path, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", path);
err: if (fhp != NULL)
(void)__os_closehandle(dbenv, fhp);
@@ -126,39 +94,44 @@ err: if (fhp != NULL)
}
/*
- * __db_overwrite_pass --
+ * __db_file_write --
* A single pass over the file, writing the specified byte pattern.
+ *
+ * PUBLIC: int __db_file_write __P((DB_ENV *,
+ * PUBLIC: DB_FH *, u_int32_t, u_int32_t, int));
*/
-static int
-__db_overwrite_pass(dbenv, path, fhp, mbytes, bytes, pattern)
+int
+__db_file_write(dbenv, fhp, mbytes, bytes, pattern)
DB_ENV *dbenv;
- const char *path;
DB_FH *fhp;
int pattern;
u_int32_t mbytes, bytes;
{
size_t len, nw;
int i, ret;
- char buf[8 * 1024];
+ char *buf;
- if ((ret = __os_seek(dbenv, fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
- goto err;
-
- memset(buf, pattern, sizeof(buf));
+#undef FILE_WRITE_IO_SIZE
+#define FILE_WRITE_IO_SIZE (64 * 1024)
+ if ((ret = __os_malloc(dbenv, FILE_WRITE_IO_SIZE, &buf)) != 0)
+ return (ret);
+ memset(buf, pattern, FILE_WRITE_IO_SIZE);
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
+ goto err;
for (; mbytes > 0; --mbytes)
- for (i = MEGABYTE / sizeof(buf); i > 0; --i)
- if ((ret =
- __os_write(dbenv, fhp, buf, sizeof(buf), &nw)) != 0)
+ for (i = MEGABYTE / FILE_WRITE_IO_SIZE; i > 0; --i)
+ if ((ret = __os_write(
+ dbenv, fhp, buf, FILE_WRITE_IO_SIZE, &nw)) != 0)
goto err;
for (; bytes > 0; bytes -= (u_int32_t)len) {
- len = bytes < sizeof(buf) ? bytes : sizeof(buf);
+ len = bytes < FILE_WRITE_IO_SIZE ? bytes : FILE_WRITE_IO_SIZE;
if ((ret = __os_write(dbenv, fhp, buf, len, &nw)) != 0)
goto err;
}
- if ((ret = __os_fsync(dbenv, fhp)) != 0)
-err: __db_err(dbenv, "%s: %s", path, db_strerror(ret));
+ ret = __os_fsync(dbenv, fhp);
+err: __os_free(dbenv, buf);
return (ret);
}
diff --git a/db/env/env_method.c b/db/env/env_method.c
index 4f865061b..a2c2acbec 100644
--- a/db/env/env_method.c
+++ b/db/env/env_method.c
@@ -1,28 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: env_method.c,v 11.136 2004/10/11 18:47:50 bostic Exp $
+ * $Id: env_method.c,v 12.47 2006/09/11 15:40:20 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
/*
* This is the file that initializes the global array. Do it this way because
* people keep changing one without changing the other. Having declaration and
@@ -33,7 +19,6 @@
#include "db_int.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"
@@ -42,26 +27,42 @@
#include "dbinc/txn.h"
#ifdef HAVE_RPC
+#ifndef NO_SYSTEM_INCLUDES
+#include <rpc/rpc.h>
+#endif
+#include "db_server.h"
#include "dbinc_auto/rpc_client_ext.h"
#endif
-static void __dbenv_err __P((const DB_ENV *, int, const char *, ...));
-static void __dbenv_errx __P((const DB_ENV *, const char *, ...));
-static int __dbenv_get_data_dirs __P((DB_ENV *, const char ***));
-static int __dbenv_get_flags __P((DB_ENV *, u_int32_t *));
-static int __dbenv_get_home __P((DB_ENV *, const char **));
-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 *));
-static int __dbenv_init __P((DB_ENV *));
-static void __dbenv_map_flags __P((DB_ENV *, u_int32_t *, u_int32_t *));
-static int __dbenv_set_app_dispatch
+static void __env_err __P((const DB_ENV *, int, const char *, ...));
+static void __env_errx __P((const DB_ENV *, const char *, ...));
+static int __env_get_data_dirs __P((DB_ENV *, const char ***));
+static int __env_get_flags __P((DB_ENV *, u_int32_t *));
+static int __env_get_home __P((DB_ENV *, const char **));
+static int __env_get_shm_key __P((DB_ENV *, long *));
+static int __env_get_tmp_dir __P((DB_ENV *, const char **));
+static int __env_get_verbose __P((DB_ENV *, u_int32_t, int *));
+static int __env_init __P((DB_ENV *));
+static void __env_map_flags __P((DB_ENV *, u_int32_t *, u_int32_t *));
+static int __env_set_app_dispatch
__P((DB_ENV *, int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
-static int __dbenv_set_feedback __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
-static int __dbenv_set_rpc_server_noclnt
+static int __env_set_event_notify
+ __P((DB_ENV *, void (*)(DB_ENV *, u_int32_t, void *)));
+static int __env_set_feedback __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+static int __env_set_isalive __P((DB_ENV *,
+ int (*)(DB_ENV *, pid_t, db_threadid_t, u_int32_t)));
+static int __env_set_thread_id __P((DB_ENV *, void (*)(DB_ENV *,
+ pid_t *, db_threadid_t *)));
+static int __env_set_thread_id_string __P((DB_ENV *,
+ char * (*)(DB_ENV *, pid_t, db_threadid_t, char *)));
+static int __env_set_thread_count __P((DB_ENV *, u_int32_t));
+static int __env_set_rpc_server
__P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+#ifndef HAVE_REPLICATION_THREADS
+static int __db_norepmgr __P((DB_ENV *));
+#endif
+
/*
* db_env_create --
* DB_ENV constructor.
@@ -95,21 +96,68 @@ db_env_create(dbenvpp, flags)
if (LF_ISSET(DB_RPCCLIENT))
F_SET(dbenv, DB_ENV_RPCCLIENT);
#endif
- if ((ret = __dbenv_init(dbenv)) != 0) {
- __os_free(NULL, dbenv);
- return (ret);
+ if ((ret = __env_init(dbenv)) != 0 ||
+ (ret = __lock_dbenv_create(dbenv)) != 0 ||
+ (ret = __log_dbenv_create(dbenv)) != 0 ||
+ (ret = __memp_dbenv_create(dbenv)) != 0 ||
+#ifdef HAVE_REPLICATION
+ (ret = __rep_dbenv_create(dbenv)) != 0 ||
+#endif
+ (ret = __txn_dbenv_create(dbenv)))
+ goto err;
+
+#ifdef HAVE_RPC
+ /*
+ * RPC specific: must be last, as we replace methods set by the
+ * access methods.
+ */
+ if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
+ __dbcl_dbenv_init(dbenv);
+ /*
+ * !!!
+ * We wrap the DB_ENV->open and close methods for RPC, and
+ * the rpc.src file can't handle that.
+ */
+ dbenv->open = __dbcl_env_open_wrap;
+ dbenv->close = __dbcl_env_close_wrap;
}
+#endif
*dbenvpp = dbenv;
return (0);
+
+err: __db_env_destroy(dbenv);
+ return (ret);
}
/*
- * __dbenv_init --
+ * __db_env_destroy --
+ * DB_ENV destructor.
+ *
+ * PUBLIC: void __db_env_destroy __P((DB_ENV *));
+ */
+void
+__db_env_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ __lock_dbenv_destroy(dbenv);
+ __log_dbenv_destroy(dbenv);
+ __memp_dbenv_destroy(dbenv);
+#ifdef HAVE_REPLICATION
+ __rep_dbenv_destroy(dbenv);
+#endif
+ __txn_dbenv_destroy(dbenv);
+
+ memset(dbenv, CLEAR_BYTE, sizeof(DB_ENV));
+ __os_free(NULL, dbenv);
+}
+
+/*
+ * __env_init --
* Initialize a DB_ENV structure.
*/
static int
-__dbenv_init(dbenv)
+__env_init(dbenv)
DB_ENV *dbenv;
{
/*
@@ -118,146 +166,219 @@ __dbenv_init(dbenv)
* 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
+ * Initialize the method handles.
*/
- 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;
- dbenv->set_msgcall = __dbenv_set_msgcall;
- dbenv->get_msgfile = __dbenv_get_msgfile;
- dbenv->set_msgfile = __dbenv_set_msgfile;
-
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
- 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->stat_print = NULL;
-
- dbenv->fileid_reset = NULL;
- dbenv->is_bigendian = NULL;
- dbenv->lsn_reset = NULL;
- dbenv->prdbt = NULL;
-
- 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_paniccall = __dbcl_env_paniccall;
- 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_pp;
- dbenv->dbremove = __dbenv_dbremove_pp;
- dbenv->dbrename = __dbenv_dbrename_pp;
- dbenv->open = __dbenv_open;
- dbenv->remove = __dbenv_remove;
- dbenv->stat_print = __dbenv_stat_print_pp;
-
- dbenv->fileid_reset = __db_fileid_reset;
- dbenv->is_bigendian = __db_isbigendian;
- dbenv->lsn_reset = __db_lsn_reset;
- dbenv->prdbt = __db_prdbt;
-
- 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_intermediate_dir = __dbenv_set_intermediate_dir;
- dbenv->set_paniccall = __dbenv_set_paniccall;
- 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;
+ /* DB_ENV PUBLIC HANDLE LIST BEGIN */
+ dbenv->cdsgroup_begin = __cdsgroup_begin;
+ dbenv->close = __env_close_pp;
+ dbenv->dbremove = __env_dbremove_pp;
+ dbenv->dbrename = __env_dbrename_pp;
+ dbenv->err = __env_err;
+ dbenv->errx = __env_errx;
+ dbenv->failchk = __env_failchk_pp;
+ dbenv->fileid_reset = __env_fileid_reset_pp;
+ dbenv->get_cachesize = __memp_get_cachesize;
+ dbenv->get_data_dirs = __env_get_data_dirs;
+ dbenv->get_encrypt_flags = __env_get_encrypt_flags;
+ dbenv->get_errfile = __env_get_errfile;
+ dbenv->get_errpfx = __env_get_errpfx;
+ dbenv->get_flags = __env_get_flags;
+ dbenv->get_home = __env_get_home;
+ dbenv->get_lg_bsize = __log_get_lg_bsize;
+ dbenv->get_lg_dir = __log_get_lg_dir;
+ dbenv->get_lg_filemode = __log_get_lg_filemode;
+ dbenv->get_lg_max = __log_get_lg_max;
+ dbenv->get_lg_regionmax = __log_get_lg_regionmax;
+ dbenv->get_lk_conflicts = __lock_get_lk_conflicts;
+ dbenv->get_lk_detect = __lock_get_lk_detect;
+ dbenv->get_lk_max_lockers = __lock_get_lk_max_lockers;
+ dbenv->get_lk_max_locks = __lock_get_lk_max_locks;
+ dbenv->get_lk_max_objects = __lock_get_lk_max_objects;
+ dbenv->get_mp_max_openfd = __memp_get_mp_max_openfd;
+ dbenv->get_mp_max_write = __memp_get_mp_max_write;
+ dbenv->get_mp_mmapsize = __memp_get_mp_mmapsize;
+ dbenv->get_msgfile = __env_get_msgfile;
+ dbenv->get_open_flags = __env_get_open_flags;
+ dbenv->get_shm_key = __env_get_shm_key;
+ dbenv->get_timeout = __lock_get_env_timeout;
+ dbenv->get_tmp_dir = __env_get_tmp_dir;
+ dbenv->get_tx_max = __txn_get_tx_max;
+ dbenv->get_tx_timestamp = __txn_get_tx_timestamp;
+ dbenv->get_verbose = __env_get_verbose;
+ dbenv->is_bigendian = __db_isbigendian;
+ dbenv->lock_detect = __lock_detect_pp;
+ 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_stat_print = __lock_stat_print_pp;
+ dbenv->lock_vec = __lock_vec_pp;
+ 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_printf = __log_printf_capi;
+ dbenv->log_put = __log_put_pp;
+ dbenv->log_stat = __log_stat_pp;
+ dbenv->log_stat_print = __log_stat_print_pp;
+ dbenv->lsn_reset = __env_lsn_reset_pp;
+ dbenv->memp_fcreate = __memp_fcreate_pp;
+ dbenv->memp_register = __memp_register_pp;
+ dbenv->memp_stat = __memp_stat_pp;
+ dbenv->memp_stat_print = __memp_stat_print_pp;
+ dbenv->memp_sync = __memp_sync_pp;
+ dbenv->memp_trickle = __memp_trickle_pp;
+ dbenv->mutex_alloc = __mutex_alloc_pp;
+ dbenv->mutex_free = __mutex_free_pp;
+ dbenv->mutex_get_align = __mutex_get_align;
+ dbenv->mutex_get_increment = __mutex_get_increment;
+ dbenv->mutex_get_max = __mutex_get_max;
+ dbenv->mutex_get_tas_spins = __mutex_get_tas_spins;
+ dbenv->mutex_lock = __mutex_lock_pp;
+ dbenv->mutex_set_align = __mutex_set_align;
+ dbenv->mutex_set_increment = __mutex_set_increment;
+ dbenv->mutex_set_max = __mutex_set_max;
+ dbenv->mutex_set_tas_spins = __mutex_set_tas_spins;
+ dbenv->mutex_stat = __mutex_stat;
+ dbenv->mutex_stat_print = __mutex_stat_print;
+ dbenv->mutex_unlock = __mutex_unlock_pp;
+ dbenv->open = __env_open_pp;
+ dbenv->remove = __env_remove;
+ dbenv->rep_elect = __rep_elect;
+ dbenv->rep_flush = __rep_flush;
+ dbenv->rep_get_config = __rep_get_config;
+ dbenv->rep_get_limit = __rep_get_limit;
+ dbenv->rep_get_nsites = __rep_get_nsites;
+ dbenv->rep_get_priority = __rep_get_priority;
+ dbenv->rep_get_timeout = __rep_get_timeout;
+ dbenv->rep_process_message = __rep_process_message;
+ dbenv->rep_set_config = __rep_set_config;
+ dbenv->rep_set_limit = __rep_set_limit;
+ dbenv->rep_set_nsites = __rep_set_nsites;
+ dbenv->rep_set_priority = __rep_set_priority;
+ dbenv->rep_set_timeout = __rep_set_timeout;
+ dbenv->rep_set_transport = __rep_set_transport;
+ dbenv->rep_start = __rep_start;
+ dbenv->rep_stat = __rep_stat_pp;
+ dbenv->rep_stat_print = __rep_stat_print_pp;
+ dbenv->rep_sync = __rep_sync;
+#ifdef HAVE_REPLICATION_THREADS
+ dbenv->repmgr_add_remote_site = __repmgr_add_remote_site;
+ dbenv->repmgr_get_ack_policy = __repmgr_get_ack_policy;
+ dbenv->repmgr_set_ack_policy = __repmgr_set_ack_policy;
+ dbenv->repmgr_set_local_site = __repmgr_set_local_site;
+ dbenv->repmgr_site_list = __repmgr_site_list;
+ dbenv->repmgr_start = __repmgr_start;
+#else /* !HAVE_REPLICATION_THREADS */
+ dbenv->repmgr_add_remote_site = (int (*)(DB_ENV *,
+ const char *, u_int, int *, u_int32_t))__db_norepmgr;
+ dbenv->repmgr_get_ack_policy = (int (*)(DB_ENV *, int *))__db_norepmgr;
+ dbenv->repmgr_set_ack_policy = (int (*)(DB_ENV *, int))__db_norepmgr;
+ dbenv->repmgr_set_local_site =
+ (int (*)(DB_ENV *, const char *, u_int, u_int32_t))__db_norepmgr;
+ dbenv->repmgr_site_list =
+ (int (*)(DB_ENV *, u_int *, DB_REPMGR_SITE **))__db_norepmgr;
+ dbenv->repmgr_start = (int (*)(DB_ENV *, int, u_int32_t))__db_norepmgr;
+#endif /* HAVE_REPLICATION_THREADS */
+ dbenv->set_alloc = __env_set_alloc;
+ dbenv->set_app_dispatch = __env_set_app_dispatch;
+ dbenv->set_cachesize = __memp_set_cachesize;
+ dbenv->set_data_dir = __env_set_data_dir;
+ dbenv->set_encrypt = __env_set_encrypt;
+ dbenv->set_errcall = __env_set_errcall;
+ dbenv->set_errfile = __env_set_errfile;
+ dbenv->set_errpfx = __env_set_errpfx;
+ dbenv->set_event_notify = __env_set_event_notify;
+ dbenv->set_feedback = __env_set_feedback;
+ dbenv->set_flags = __env_set_flags;
+ dbenv->set_intermediate_dir = __env_set_intermediate_dir;
+ dbenv->set_isalive = __env_set_isalive;
+ dbenv->set_lg_bsize = __log_set_lg_bsize;
+ dbenv->set_lg_dir = __log_set_lg_dir;
+ dbenv->set_lg_filemode = __log_set_lg_filemode;
+ dbenv->set_lg_max = __log_set_lg_max;
+ dbenv->set_lg_regionmax = __log_set_lg_regionmax;
+ dbenv->set_lk_conflicts = __lock_set_lk_conflicts;
+ dbenv->set_lk_detect = __lock_set_lk_detect;
+ dbenv->set_lk_max_lockers = __lock_set_lk_max_lockers;
+ dbenv->set_lk_max_locks = __lock_set_lk_max_locks;
+ dbenv->set_lk_max_objects = __lock_set_lk_max_objects;
+ dbenv->set_mp_max_openfd = __memp_set_mp_max_openfd;
+ dbenv->set_mp_max_write = __memp_set_mp_max_write;
+ dbenv->set_mp_mmapsize = __memp_set_mp_mmapsize;
+ dbenv->set_msgcall = __env_set_msgcall;
+ dbenv->set_msgfile = __env_set_msgfile;
+ dbenv->set_paniccall = __env_set_paniccall;
+ dbenv->set_rep_request = __rep_set_request;
+ dbenv->set_rpc_server = __env_set_rpc_server;
+ dbenv->set_shm_key = __env_set_shm_key;
+ dbenv->set_thread_count = __env_set_thread_count;
+ dbenv->set_thread_id = __env_set_thread_id;
+ dbenv->set_thread_id_string = __env_set_thread_id_string;
+ dbenv->set_timeout = __lock_set_env_timeout;
+ dbenv->set_tmp_dir = __env_set_tmp_dir;
+ dbenv->set_tx_max = __txn_set_tx_max;
+ dbenv->set_tx_timestamp = __txn_set_tx_timestamp;
+ dbenv->set_verbose = __env_set_verbose;
+ dbenv->stat_print = __env_stat_print_pp;
+ dbenv->txn_begin = __txn_begin_pp;
+ dbenv->txn_checkpoint = __txn_checkpoint_pp;
+ dbenv->txn_recover = __txn_recover_pp;
+ dbenv->txn_stat = __txn_stat_pp;
+ dbenv->txn_stat_print = __txn_stat_print_pp;
+ /* DB_ENV PUBLIC HANDLE LIST END */
+
+ /* DB_ENV PRIVATE HANDLE LIST BEGIN */
+ dbenv->prdbt = __db_prdbt;
+ /* DB_ENV PRIVATE HANDLE LIST END */
+
+ __os_id(NULL, &dbenv->pid_cache, NULL);
+ dbenv->thread_id = __os_id;
+ dbenv->thread_id_string = __env_thread_id_string;
dbenv->db_ref = 0;
-
- __os_spin(dbenv);
-
- __log_dbenv_create(dbenv); /* Subsystem specific. */
- __lock_dbenv_create(dbenv);
- __memp_dbenv_create(dbenv);
- __rep_dbenv_create(dbenv);
- __txn_dbenv_create(dbenv);
+ dbenv->shm_key = INVALID_REGION_SEGID;
return (0);
}
/*
- * __dbenv_err --
+ * __env_err --
* Error message, including the standard error string.
*/
static void
#ifdef STDC_HEADERS
-__dbenv_err(const DB_ENV *dbenv, int error, const char *fmt, ...)
+__env_err(const DB_ENV *dbenv, int error, const char *fmt, ...)
#else
-__dbenv_err(dbenv, error, fmt, va_alist)
+__env_err(dbenv, error, fmt, va_alist)
const DB_ENV *dbenv;
int error;
const char *fmt;
va_dcl
#endif
{
- DB_REAL_ERR(dbenv, error, 1, 1, fmt);
+ DB_REAL_ERR(dbenv, error, DB_ERROR_SET, 1, fmt);
}
/*
- * __dbenv_errx --
+ * __env_errx --
* Error message.
*/
static void
#ifdef STDC_HEADERS
-__dbenv_errx(const DB_ENV *dbenv, const char *fmt, ...)
+__env_errx(const DB_ENV *dbenv, const char *fmt, ...)
#else
-__dbenv_errx(dbenv, fmt, va_alist)
+__env_errx(dbenv, fmt, va_alist)
const DB_ENV *dbenv;
const char *fmt;
va_dcl
#endif
{
- DB_REAL_ERR(dbenv, 0, 0, 1, fmt);
+ DB_REAL_ERR(dbenv, 0, DB_ERROR_NOT_SET, 1, fmt);
}
static int
-__dbenv_get_home(dbenv, homep)
+__env_get_home(dbenv, homep)
DB_ENV *dbenv;
const char **homep;
{
@@ -267,14 +388,14 @@ __dbenv_get_home(dbenv, homep)
}
/*
- * __dbenv_set_alloc --
+ * __env_set_alloc --
* {DB_ENV,DB}->set_alloc.
*
- * PUBLIC: int __dbenv_set_alloc __P((DB_ENV *, void *(*)(size_t),
+ * PUBLIC: int __env_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)
+__env_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));
@@ -289,11 +410,11 @@ __dbenv_set_alloc(dbenv, mal_func, real_func, free_func)
}
/*
- * __dbenv_set_app_dispatch --
+ * __env_set_app_dispatch --
* Set the transaction abort recover function.
*/
static int
-__dbenv_set_app_dispatch(dbenv, app_dispatch)
+__env_set_app_dispatch(dbenv, app_dispatch)
DB_ENV *dbenv;
int (*app_dispatch) __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
{
@@ -304,13 +425,13 @@ __dbenv_set_app_dispatch(dbenv, app_dispatch)
}
/*
- * __dbenv_get_encrypt_flags --
+ * __env_get_encrypt_flags --
* {DB_ENV,DB}->get_encrypt_flags.
*
- * PUBLIC: int __dbenv_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
+ * PUBLIC: int __env_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
*/
int
-__dbenv_get_encrypt_flags(dbenv, flagsp)
+__env_get_encrypt_flags(dbenv, flagsp)
DB_ENV *dbenv;
u_int32_t *flagsp;
{
@@ -325,20 +446,20 @@ __dbenv_get_encrypt_flags(dbenv, flagsp)
return (0);
#else
COMPQUIET(flagsp, 0);
- __db_err(dbenv,
+ __db_errx(dbenv,
"library build did not include support for cryptography");
return (DB_OPNOTSUP);
#endif
}
/*
- * __dbenv_set_encrypt --
+ * __env_set_encrypt --
* DB_ENV->set_encrypt.
*
- * PUBLIC: int __dbenv_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
+ * PUBLIC: int __env_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
*/
int
-__dbenv_set_encrypt(dbenv, passwd, flags)
+__env_set_encrypt(dbenv, passwd, flags)
DB_ENV *dbenv;
const char *passwd;
u_int32_t flags;
@@ -354,7 +475,7 @@ __dbenv_set_encrypt(dbenv, passwd, 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");
+ __db_errx(dbenv, "Empty password specified to set_encrypt");
return (EINVAL);
}
if (!CRYPTO_ON(dbenv)) {
@@ -406,14 +527,14 @@ err:
COMPQUIET(passwd, NULL);
COMPQUIET(flags, 0);
- __db_err(dbenv,
+ __db_errx(dbenv,
"library build did not include support for cryptography");
return (DB_OPNOTSUP);
#endif
}
static void
-__dbenv_map_flags(dbenv, inflagsp, outflagsp)
+__env_map_flags(dbenv, inflagsp, outflagsp)
DB_ENV *dbenv;
u_int32_t *inflagsp, *outflagsp;
{
@@ -435,6 +556,10 @@ __dbenv_map_flags(dbenv, inflagsp, outflagsp)
FLD_SET(*outflagsp, DB_ENV_DIRECT_LOG);
FLD_CLR(*inflagsp, DB_DIRECT_LOG);
}
+ if (FLD_ISSET(*inflagsp, DB_DSYNC_DB)) {
+ FLD_SET(*outflagsp, DB_ENV_DSYNC_DB);
+ FLD_CLR(*inflagsp, DB_DSYNC_DB);
+ }
if (FLD_ISSET(*inflagsp, DB_DSYNC_LOG)) {
FLD_SET(*outflagsp, DB_ENV_DSYNC_LOG);
FLD_CLR(*inflagsp, DB_DSYNC_LOG);
@@ -447,6 +572,10 @@ __dbenv_map_flags(dbenv, inflagsp, outflagsp)
FLD_SET(*outflagsp, DB_ENV_LOG_INMEMORY);
FLD_CLR(*inflagsp, DB_LOG_INMEMORY);
}
+ if (FLD_ISSET(*inflagsp, DB_MULTIVERSION)) {
+ FLD_SET(*outflagsp, DB_ENV_MULTIVERSION);
+ FLD_CLR(*inflagsp, DB_MULTIVERSION);
+ }
if (FLD_ISSET(*inflagsp, DB_NOLOCKING)) {
FLD_SET(*outflagsp, DB_ENV_NOLOCKING);
FLD_CLR(*inflagsp, DB_NOLOCKING);
@@ -475,6 +604,10 @@ __dbenv_map_flags(dbenv, inflagsp, outflagsp)
FLD_SET(*outflagsp, DB_ENV_TXN_NOSYNC);
FLD_CLR(*inflagsp, DB_TXN_NOSYNC);
}
+ if (FLD_ISSET(*inflagsp, DB_TXN_SNAPSHOT)) {
+ FLD_SET(*outflagsp, DB_ENV_TXN_SNAPSHOT);
+ FLD_CLR(*inflagsp, DB_TXN_SNAPSHOT);
+ }
if (FLD_ISSET(*inflagsp, DB_TXN_WRITE_NOSYNC)) {
FLD_SET(*outflagsp, DB_ENV_TXN_WRITE_NOSYNC);
FLD_CLR(*inflagsp, DB_TXN_WRITE_NOSYNC);
@@ -486,7 +619,7 @@ __dbenv_map_flags(dbenv, inflagsp, outflagsp)
}
static int
-__dbenv_get_flags(dbenv, flagsp)
+__env_get_flags(dbenv, flagsp)
DB_ENV *dbenv;
u_int32_t *flagsp;
{
@@ -495,9 +628,11 @@ __dbenv_get_flags(dbenv, flagsp)
DB_CDB_ALLDB,
DB_DIRECT_DB,
DB_DIRECT_LOG,
+ DB_DSYNC_DB,
DB_DSYNC_LOG,
DB_LOG_AUTOREMOVE,
DB_LOG_INMEMORY,
+ DB_MULTIVERSION,
DB_NOLOCKING,
DB_NOMMAP,
DB_NOPANIC,
@@ -505,6 +640,7 @@ __dbenv_get_flags(dbenv, flagsp)
DB_REGION_INIT,
DB_TIME_NOTGRANTED,
DB_TXN_NOSYNC,
+ DB_TXN_SNAPSHOT,
DB_TXN_WRITE_NOSYNC,
DB_YIELDCPU,
0
@@ -515,15 +651,15 @@ __dbenv_get_flags(dbenv, flagsp)
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);
+ __env_map_flags(dbenv, &f, &mapped_flag);
+ DB_ASSERT(dbenv, f == 0);
if (F_ISSET(dbenv, mapped_flag) == mapped_flag)
LF_SET(env_flags[i]);
}
/* Some flags are persisted in the regions. */
if (dbenv->reginfo != NULL &&
- ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->envpanic != 0) {
+ ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->panic != 0) {
LF_SET(DB_PANIC_ENVIRONMENT);
}
__log_get_flags(dbenv, &flags);
@@ -533,13 +669,13 @@ __dbenv_get_flags(dbenv, flagsp)
}
/*
- * __dbenv_set_flags --
+ * __env_set_flags --
* DB_ENV->set_flags.
*
- * PUBLIC: int __dbenv_set_flags __P((DB_ENV *, u_int32_t, int));
+ * PUBLIC: int __env_set_flags __P((DB_ENV *, u_int32_t, int));
*/
int
-__dbenv_set_flags(dbenv, flags, on)
+__env_set_flags(dbenv, flags, on)
DB_ENV *dbenv;
u_int32_t flags;
int on;
@@ -549,10 +685,12 @@ __dbenv_set_flags(dbenv, flags, on)
#define OK_FLAGS \
(DB_AUTO_COMMIT | DB_CDB_ALLDB | DB_DIRECT_DB | DB_DIRECT_LOG | \
- DB_DSYNC_LOG | DB_LOG_AUTOREMOVE | DB_LOG_INMEMORY | \
- DB_NOLOCKING | DB_NOMMAP | DB_NOPANIC | DB_OVERWRITE | \
- DB_PANIC_ENVIRONMENT | DB_REGION_INIT | DB_TIME_NOTGRANTED | \
- DB_TXN_NOSYNC | DB_TXN_WRITE_NOSYNC | DB_YIELDCPU)
+ DB_DSYNC_DB | DB_DSYNC_LOG | DB_LOG_AUTOREMOVE | \
+ DB_LOG_INMEMORY | DB_MULTIVERSION | DB_NOLOCKING | \
+ DB_NOMMAP | DB_NOPANIC | DB_OVERWRITE | \
+ DB_PANIC_ENVIRONMENT | DB_REGION_INIT | \
+ DB_TIME_NOTGRANTED | DB_TXN_NOSYNC | DB_TXN_SNAPSHOT | \
+ DB_TXN_WRITE_NOSYNC | DB_YIELDCPU)
if (LF_ISSET(~OK_FLAGS))
return (__db_ferr(dbenv, "DB_ENV->set_flags", 0));
@@ -567,8 +705,8 @@ __dbenv_set_flags(dbenv, flags, on)
flags, DB_TXN_NOSYNC, DB_TXN_WRITE_NOSYNC)) != 0)
return (ret);
if (LF_ISSET(DB_DIRECT_DB |
- DB_DIRECT_LOG) && __os_have_direct() == 0) {
- __db_err(dbenv,
+ DB_DIRECT_LOG) && __os_support_direct_io() == 0) {
+ __db_errx(dbenv,
"DB_ENV->set_flags: direct I/O either not configured or not supported");
return (EINVAL);
}
@@ -580,11 +718,18 @@ __dbenv_set_flags(dbenv, flags, on)
if (LF_ISSET(DB_PANIC_ENVIRONMENT)) {
ENV_ILLEGAL_BEFORE_OPEN(dbenv,
"DB_ENV->set_flags: DB_PANIC_ENVIRONMENT");
- PANIC_SET(dbenv, on);
+ if (on) {
+ __db_errx(dbenv, "Environment panic set");
+ (void)__db_panic(dbenv, DB_RUNRECOVERY);
+ } else
+ __db_panic_set(dbenv, 0);
}
if (LF_ISSET(DB_REGION_INIT))
ENV_ILLEGAL_AFTER_OPEN(dbenv,
"DB_ENV->set_flags: DB_REGION_INIT");
+ if (LF_ISSET(DB_LOG_INMEMORY))
+ ENV_ILLEGAL_AFTER_OPEN(dbenv,
+ "DB_ENV->set_flags: DB_LOG_INMEMORY");
/*
* DB_LOG_INMEMORY, DB_TXN_NOSYNC and DB_TXN_WRITE_NOSYNC are
@@ -601,7 +746,7 @@ __dbenv_set_flags(dbenv, flags, on)
__log_set_flags(dbenv, flags, on);
mapped_flags = 0;
- __dbenv_map_flags(dbenv, &flags, &mapped_flags);
+ __env_map_flags(dbenv, &flags, &mapped_flags);
if (on)
F_SET(dbenv, mapped_flags);
else
@@ -611,7 +756,7 @@ __dbenv_set_flags(dbenv, flags, on)
}
static int
-__dbenv_get_data_dirs(dbenv, dirpp)
+__env_get_data_dirs(dbenv, dirpp)
DB_ENV *dbenv;
const char ***dirpp;
{
@@ -620,13 +765,13 @@ __dbenv_get_data_dirs(dbenv, dirpp)
}
/*
- * __dbenv_set_data_dir --
+ * __env_set_data_dir --
* DB_ENV->set_data_dir.
*
- * PUBLIC: int __dbenv_set_data_dir __P((DB_ENV *, const char *));
+ * PUBLIC: int __env_set_data_dir __P((DB_ENV *, const char *));
*/
int
-__dbenv_set_data_dir(dbenv, dir)
+__env_set_data_dir(dbenv, dir)
DB_ENV *dbenv;
const char *dir;
{
@@ -658,17 +803,17 @@ __dbenv_set_data_dir(dbenv, dir)
}
/*
- * __dbenv_set_intermediate_dir --
+ * __env_set_intermediate_dir --
* DB_ENV->set_intermediate_dir.
*
* !!!
* Undocumented routine allowing applications to configure Berkeley DB to
* create intermediate directories.
*
- * PUBLIC: int __dbenv_set_intermediate_dir __P((DB_ENV *, int, u_int32_t));
+ * PUBLIC: int __env_set_intermediate_dir __P((DB_ENV *, int, u_int32_t));
*/
int
-__dbenv_set_intermediate_dir(dbenv, mode, flags)
+__env_set_intermediate_dir(dbenv, mode, flags)
DB_ENV *dbenv;
int mode;
u_int32_t flags;
@@ -676,7 +821,7 @@ __dbenv_set_intermediate_dir(dbenv, mode, flags)
if (flags != 0)
return (__db_ferr(dbenv, "DB_ENV->set_intermediate_dir", 0));
if (mode == 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->set_intermediate_dir: mode may not be set to 0");
return (EINVAL);
}
@@ -686,14 +831,14 @@ __dbenv_set_intermediate_dir(dbenv, mode, flags)
}
/*
- * __dbenv_set_errcall --
+ * __env_set_errcall --
* {DB_ENV,DB}->set_errcall.
*
- * PUBLIC: void __dbenv_set_errcall __P((DB_ENV *,
+ * PUBLIC: void __env_set_errcall __P((DB_ENV *,
* PUBLIC: void (*)(const DB_ENV *, const char *, const char *)));
*/
void
-__dbenv_set_errcall(dbenv, errcall)
+__env_set_errcall(dbenv, errcall)
DB_ENV *dbenv;
void (*errcall) __P((const DB_ENV *, const char *, const char *));
{
@@ -701,13 +846,13 @@ __dbenv_set_errcall(dbenv, errcall)
}
/*
- * __dbenv_get_errfile --
+ * __env_get_errfile --
* {DB_ENV,DB}->get_errfile.
*
- * PUBLIC: void __dbenv_get_errfile __P((DB_ENV *, FILE **));
+ * PUBLIC: void __env_get_errfile __P((DB_ENV *, FILE **));
*/
void
-__dbenv_get_errfile(dbenv, errfilep)
+__env_get_errfile(dbenv, errfilep)
DB_ENV *dbenv;
FILE **errfilep;
{
@@ -715,13 +860,13 @@ __dbenv_get_errfile(dbenv, errfilep)
}
/*
- * __dbenv_set_errfile --
+ * __env_set_errfile --
* {DB_ENV,DB}->set_errfile.
*
- * PUBLIC: void __dbenv_set_errfile __P((DB_ENV *, FILE *));
+ * PUBLIC: void __env_set_errfile __P((DB_ENV *, FILE *));
*/
void
-__dbenv_set_errfile(dbenv, errfile)
+__env_set_errfile(dbenv, errfile)
DB_ENV *dbenv;
FILE *errfile;
{
@@ -729,13 +874,13 @@ __dbenv_set_errfile(dbenv, errfile)
}
/*
- * __dbenv_get_errpfx --
+ * __env_get_errpfx --
* {DB_ENV,DB}->get_errpfx.
*
- * PUBLIC: void __dbenv_get_errpfx __P((DB_ENV *, const char **));
+ * PUBLIC: void __env_get_errpfx __P((DB_ENV *, const char **));
*/
void
-__dbenv_get_errpfx(dbenv, errpfxp)
+__env_get_errpfx(dbenv, errpfxp)
DB_ENV *dbenv;
const char **errpfxp;
{
@@ -743,13 +888,13 @@ __dbenv_get_errpfx(dbenv, errpfxp)
}
/*
- * __dbenv_set_errpfx --
+ * __env_set_errpfx --
* {DB_ENV,DB}->set_errpfx.
*
- * PUBLIC: void __dbenv_set_errpfx __P((DB_ENV *, const char *));
+ * PUBLIC: void __env_set_errpfx __P((DB_ENV *, const char *));
*/
void
-__dbenv_set_errpfx(dbenv, errpfx)
+__env_set_errpfx(dbenv, errpfx)
DB_ENV *dbenv;
const char *errpfx;
{
@@ -757,7 +902,7 @@ __dbenv_set_errpfx(dbenv, errpfx)
}
static int
-__dbenv_set_feedback(dbenv, feedback)
+__env_set_feedback(dbenv, feedback)
DB_ENV *dbenv;
void (*feedback) __P((DB_ENV *, int, int));
{
@@ -766,14 +911,79 @@ __dbenv_set_feedback(dbenv, feedback)
}
/*
- * __dbenv_set_msgcall --
+ * __env_set_thread_id --
+ * DB_ENV->set_thread_id
+ */
+static int
+__env_set_thread_id(dbenv, id)
+ DB_ENV *dbenv;
+ void (*id) __P((DB_ENV *, pid_t *, db_threadid_t *));
+{
+ dbenv->thread_id = id;
+ return (0);
+}
+
+/*
+ * __env_set_threadid_string --
+ * DB_ENV->set_threadid_string
+ */
+static int
+__env_set_thread_id_string(dbenv, thread_id_string)
+ DB_ENV *dbenv;
+ char *(*thread_id_string) __P((DB_ENV *, pid_t, db_threadid_t, char *));
+{
+ dbenv->thread_id_string = thread_id_string;
+ return (0);
+}
+
+/*
+ * __env_set_isalive --
+ * DB_ENV->set_isalive
+ */
+static int
+__env_set_isalive(dbenv, is_alive)
+ DB_ENV *dbenv;
+ int (*is_alive) __P((DB_ENV *, pid_t, db_threadid_t, u_int32_t));
+{
+ if (F_ISSET(dbenv, DB_ENV_OPEN_CALLED) && dbenv->thr_nbucket == 0) {
+ __db_errx(dbenv,
+ "is_alive method specified but no thread region allocated");
+ return (EINVAL);
+ }
+ dbenv->is_alive = is_alive;
+ return (0);
+}
+
+/*
+ * __env_set_thread_count --
+ * DB_ENV->set_thread_count
+ */
+static int
+__env_set_thread_count(dbenv, count)
+ DB_ENV *dbenv;
+ u_int32_t count;
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_thread_count");
+ dbenv->thr_max = count;
+
+ /*
+ * Set the number of buckets to be 1/8th the number of
+ * proposed threads control blocks. This is rather
+ * arbitrary.
+ */
+ dbenv->thr_nbucket = count / 8;
+ return (0);
+}
+
+/*
+ * __env_set_msgcall --
* {DB_ENV,DB}->set_msgcall.
*
- * PUBLIC: void __dbenv_set_msgcall
+ * PUBLIC: void __env_set_msgcall
* PUBLIC: __P((DB_ENV *, void (*)(const DB_ENV *, const char *)));
*/
void
-__dbenv_set_msgcall(dbenv, msgcall)
+__env_set_msgcall(dbenv, msgcall)
DB_ENV *dbenv;
void (*msgcall) __P((const DB_ENV *, const char *));
{
@@ -781,13 +991,13 @@ __dbenv_set_msgcall(dbenv, msgcall)
}
/*
- * __dbenv_get_msgfile --
+ * __env_get_msgfile --
* {DB_ENV,DB}->get_msgfile.
*
- * PUBLIC: void __dbenv_get_msgfile __P((DB_ENV *, FILE **));
+ * PUBLIC: void __env_get_msgfile __P((DB_ENV *, FILE **));
*/
void
-__dbenv_get_msgfile(dbenv, msgfilep)
+__env_get_msgfile(dbenv, msgfilep)
DB_ENV *dbenv;
FILE **msgfilep;
{
@@ -795,13 +1005,13 @@ __dbenv_get_msgfile(dbenv, msgfilep)
}
/*
- * __dbenv_set_msgfile --
+ * __env_set_msgfile --
* {DB_ENV,DB}->set_msgfile.
*
- * PUBLIC: void __dbenv_set_msgfile __P((DB_ENV *, FILE *));
+ * PUBLIC: void __env_set_msgfile __P((DB_ENV *, FILE *));
*/
void
-__dbenv_set_msgfile(dbenv, msgfile)
+__env_set_msgfile(dbenv, msgfile)
DB_ENV *dbenv;
FILE *msgfile;
{
@@ -809,13 +1019,13 @@ __dbenv_set_msgfile(dbenv, msgfile)
}
/*
- * __dbenv_set_paniccall --
+ * __env_set_paniccall --
* {DB_ENV,DB}->set_paniccall.
*
- * PUBLIC: int __dbenv_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
+ * PUBLIC: int __env_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
*/
int
-__dbenv_set_paniccall(dbenv, paniccall)
+__env_set_paniccall(dbenv, paniccall)
DB_ENV *dbenv;
void (*paniccall) __P((DB_ENV *, int));
{
@@ -823,58 +1033,47 @@ __dbenv_set_paniccall(dbenv, paniccall)
return (0);
}
-static int
-__dbenv_get_shm_key(dbenv, shm_keyp)
- DB_ENV *dbenv;
- long *shm_keyp; /* !!!: really a key_t *. */
-{
- *shm_keyp = dbenv->shm_key;
- return (0);
-}
-
/*
- * __dbenv_set_shm_key --
- * DB_ENV->set_shm_key.
- *
- * PUBLIC: int __dbenv_set_shm_key __P((DB_ENV *, long));
+ * __env_set_event_notify --
+ * DB_ENV->set_event_notify.
*/
-int
-__dbenv_set_shm_key(dbenv, shm_key)
+static int
+__env_set_event_notify(dbenv, event_func)
DB_ENV *dbenv;
- long shm_key; /* !!!: really a key_t. */
+ void (*event_func) __P((DB_ENV *, u_int32_t, void *));
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_shm_key");
-
- dbenv->shm_key = shm_key;
+ dbenv->db_event_func = event_func;
return (0);
}
static int
-__dbenv_get_tas_spins(dbenv, tas_spinsp)
+__env_get_shm_key(dbenv, shm_keyp)
DB_ENV *dbenv;
- u_int32_t *tas_spinsp;
+ long *shm_keyp; /* !!!: really a key_t *. */
{
- *tas_spinsp = dbenv->tas_spins;
+ *shm_keyp = dbenv->shm_key;
return (0);
}
/*
- * __dbenv_set_tas_spins --
- * DB_ENV->set_tas_spins.
+ * __env_set_shm_key --
+ * DB_ENV->set_shm_key.
*
- * PUBLIC: int __dbenv_set_tas_spins __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __env_set_shm_key __P((DB_ENV *, long));
*/
int
-__dbenv_set_tas_spins(dbenv, tas_spins)
+__env_set_shm_key(dbenv, shm_key)
DB_ENV *dbenv;
- u_int32_t tas_spins;
+ long shm_key; /* !!!: really a key_t. */
{
- dbenv->tas_spins = tas_spins;
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_shm_key");
+
+ dbenv->shm_key = shm_key;
return (0);
}
static int
-__dbenv_get_tmp_dir(dbenv, dirp)
+__env_get_tmp_dir(dbenv, dirp)
DB_ENV *dbenv;
const char **dirp;
{
@@ -883,13 +1082,13 @@ __dbenv_get_tmp_dir(dbenv, dirp)
}
/*
- * __dbenv_set_tmp_dir --
+ * __env_set_tmp_dir --
* DB_ENV->set_tmp_dir.
*
- * PUBLIC: int __dbenv_set_tmp_dir __P((DB_ENV *, const char *));
+ * PUBLIC: int __env_set_tmp_dir __P((DB_ENV *, const char *));
*/
int
-__dbenv_set_tmp_dir(dbenv, dir)
+__env_set_tmp_dir(dbenv, dir)
DB_ENV *dbenv;
const char *dir;
{
@@ -899,7 +1098,7 @@ __dbenv_set_tmp_dir(dbenv, dir)
}
static int
-__dbenv_get_verbose(dbenv, which, onoffp)
+__env_get_verbose(dbenv, which, onoffp)
DB_ENV *dbenv;
u_int32_t which;
int *onoffp;
@@ -907,6 +1106,7 @@ __dbenv_get_verbose(dbenv, which, onoffp)
switch (which) {
case DB_VERB_DEADLOCK:
case DB_VERB_RECOVERY:
+ case DB_VERB_REGISTER:
case DB_VERB_REPLICATION:
case DB_VERB_WAITSFOR:
*onoffp = FLD_ISSET(dbenv->verbose, which) ? 1 : 0;
@@ -918,13 +1118,13 @@ __dbenv_get_verbose(dbenv, which, onoffp)
}
/*
- * __dbenv_set_verbose --
+ * __env_set_verbose --
* DB_ENV->set_verbose.
*
- * PUBLIC: int __dbenv_set_verbose __P((DB_ENV *, u_int32_t, int));
+ * PUBLIC: int __env_set_verbose __P((DB_ENV *, u_int32_t, int));
*/
int
-__dbenv_set_verbose(dbenv, which, on)
+__env_set_verbose(dbenv, which, on)
DB_ENV *dbenv;
u_int32_t which;
int on;
@@ -932,6 +1132,7 @@ __dbenv_set_verbose(dbenv, which, on)
switch (which) {
case DB_VERB_DEADLOCK:
case DB_VERB_RECOVERY:
+ case DB_VERB_REGISTER:
case DB_VERB_REPLICATION:
case DB_VERB_WAITSFOR:
if (on)
@@ -956,7 +1157,7 @@ __db_mi_env(dbenv, name)
DB_ENV *dbenv;
const char *name;
{
- __db_err(dbenv, "%s: method not permitted when environment specified",
+ __db_errx(dbenv, "%s: method not permitted when environment specified",
name);
return (EINVAL);
}
@@ -973,7 +1174,7 @@ __db_mi_open(dbenv, name, after)
const char *name;
int after;
{
- __db_err(dbenv, "%s: method not permitted %s handle's open method",
+ __db_errx(dbenv, "%s: method not permitted %s handle's open method",
name, after ? "after" : "before");
return (EINVAL);
}
@@ -1012,14 +1213,14 @@ __db_env_config(dbenv, i, flags)
sub = "<unspecified>";
break;
}
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s interface requires an environment configured for the %s subsystem",
i, sub);
return (EINVAL);
}
static int
-__dbenv_set_rpc_server_noclnt(dbenv, cl, host, tsec, ssec, flags)
+__env_set_rpc_server(dbenv, cl, host, tsec, ssec, flags)
DB_ENV *dbenv;
void *cl;
const char *host;
@@ -1032,7 +1233,21 @@ __dbenv_set_rpc_server_noclnt(dbenv, cl, host, tsec, ssec, flags)
COMPQUIET(ssec, 0);
COMPQUIET(flags, 0);
- __db_err(dbenv,
- "set_rpc_server method not permitted in non-RPC environment");
+ __db_errx(dbenv, "Berkeley DB was not configured for RPC support");
return (DB_OPNOTSUP);
}
+
+#ifndef HAVE_REPLICATION_THREADS
+/*
+ * __db_norepmgr --
+ * Error when a Berkeley DB build doesn't include the replication manager.
+ */
+static int
+__db_norepmgr(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_errx(dbenv,
+ "Berkeley DB library build did not include replication manager support");
+ return (DB_OPNOTSUP);
+}
+#endif
diff --git a/db/env/env_open.c b/db/env/env_open.c
index 0fbce72d0..61e284e5e 100644
--- a/db/env/env_open.c
+++ b/db/env/env_open.c
@@ -1,41 +1,25 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: env_open.c,v 11.177 2004/07/17 18:55:08 ubell Exp $
+ * $Id: env_open.c,v 12.71 2006/08/24 14:45:39 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.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 __db_parse __P((DB_ENV *, char *));
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));
+static int __env_refresh __P((DB_ENV *, u_int32_t, int));
/*
* db_version --
@@ -57,117 +41,195 @@ db_version(majverp, minverp, patchp)
}
/*
- * __dbenv_open --
- * DB_ENV->open.
+ * __env_open_pp --
+ * DB_ENV->open pre/post processing.
*
- * PUBLIC: int __dbenv_open __P((DB_ENV *, const char *, u_int32_t, int));
+ * PUBLIC: int __env_open_pp __P((DB_ENV *, const char *, u_int32_t, int));
*/
int
-__dbenv_open(dbenv, db_home, flags, mode)
+__env_open_pp(dbenv, db_home, flags, mode)
DB_ENV *dbenv;
const char *db_home;
u_int32_t flags;
int mode;
{
- DB_MPOOL *dbmp;
- u_int32_t init_flags, orig_flags;
- int rep_check, ret;
-
- orig_flags = dbenv->flags;
- rep_check = 0;
+ int ret;
#undef OKFLAGS
#define OKFLAGS \
(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)
+ DB_INIT_MPOOL | DB_INIT_REP | DB_INIT_TXN | DB_LOCKDOWN | \
+ DB_PRIVATE | DB_RECOVER | DB_RECOVER_FATAL | DB_REGISTER | \
+ 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_PRIVATE | DB_SYSTEM_MEM | DB_THREAD | \
DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT)
- /*
- * Flags saved in the init_flags field of the environment, representing
- * 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_REP 0x0020 /* DB_INIT_REP */
-#define DB_INITENV_TXN 0x0040 /* DB_INIT_TXN */
-
if ((ret = __db_fchk(dbenv, "DB_ENV->open", flags, OKFLAGS)) != 0)
return (ret);
- if (LF_ISSET(DB_INIT_CDB) &&
- (ret = __db_fchk(dbenv, "DB_ENV->open", flags, OKFLAGS_CDB)) != 0)
+ if ((ret = __db_fcchk(
+ dbenv, "DB_ENV->open", flags, DB_INIT_CDB, ~OKFLAGS_CDB)) != 0)
return (ret);
- if ((ret = __db_fcchk(dbenv,
- "DB_ENV->open", flags, DB_PRIVATE, DB_SYSTEM_MEM)) != 0)
- return (ret);
- 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_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 requires transaction support");
- return (EINVAL);
+ if (LF_ISSET(DB_REGISTER)) {
+ if (!__os_support_db_register()) {
+ __db_errx(dbenv,
+ "Berkeley DB library does not support DB_REGISTER on this system");
+ return (EINVAL);
+ }
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->open", flags,
+ DB_PRIVATE, DB_REGISTER | DB_SYSTEM_MEM)) != 0)
+ return (ret);
+ if (!LF_ISSET(DB_INIT_TXN)) {
+ __db_errx(
+ dbenv, "registration requires transaction support");
+ return (EINVAL);
+ }
}
- if (LF_ISSET(DB_INIT_REP) && !LF_ISSET(DB_INIT_LOCK)) {
- __db_err(dbenv, "Replication requires locking support");
- return (EINVAL);
+ if (LF_ISSET(DB_INIT_REP)) {
+ if (!__os_support_replication()) {
+ __db_errx(dbenv,
+ "Berkeley DB library does not support replication on this system");
+ return (EINVAL);
+ }
+ if (!LF_ISSET(DB_INIT_LOCK)) {
+ __db_errx(dbenv,
+ "replication requires locking support");
+ return (EINVAL);
+ }
+ if (!LF_ISSET(DB_INIT_TXN)) {
+ __db_errx(
+ dbenv, "replication requires transaction support");
+ return (EINVAL);
+ }
}
- if (LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL) && !LF_ISSET(DB_INIT_TXN)) {
- __db_err(dbenv, "Recovery requires transaction support");
- return (EINVAL);
+ if (LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL)) {
+ 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_REGISTER, DB_RECOVER_FATAL)) != 0)
+ return (ret);
+ if (!LF_ISSET(DB_CREATE)) {
+ __db_errx(dbenv, "recovery requires the create flag");
+ return (EINVAL);
+ }
+ if (!LF_ISSET(DB_INIT_TXN)) {
+ __db_errx(
+ dbenv, "recovery requires transaction support");
+ return (EINVAL);
+ }
}
+#ifdef HAVE_MUTEX_THREAD_ONLY
/*
* 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 private environments");
+ __db_errx(dbenv,
+ "Berkeley DB library configured to support only private environments");
return (EINVAL);
}
#endif
+#ifdef HAVE_MUTEX_FCNTL
/*
- * If we're doing recovery, destroy the environment so that we create
- * all the regions from scratch. I'd like to reuse already created
- * regions, but that's hard. We would have to create the environment
- * region from scratch, at least, as we have no way of knowing if its
- * linked lists are corrupted.
+ * !!!
+ * We need a file descriptor for fcntl(2) locking. We use the file
+ * handle from the REGENV file for this purpose.
*
- * I suppose we could set flags while modifying those links, but that
- * is going to be difficult to get right. The major concern I have
- * is if the application stomps the environment with a rogue pointer.
- * We have no way of detecting that, and we could be forced into a
- * situation where we start up and then crash, repeatedly.
+ * Since we may be using shared memory regions, e.g., shmget(2), and
+ * not a mapped-in regular file, the backing file may be only a few
+ * bytes in length. So, this depends on the ability to call fcntl to
+ * lock file offsets much larger than the actual physical file. I
+ * think that's safe -- besides, very few systems actually need this
+ * kind of support, SunOS is the only one still in wide use of which
+ * I'm aware.
*
- * Note that we do not check any flags like DB_PRIVATE before calling
- * remove. We don't care if the current environment was private or
- * not, we just want to nail any files that are left-over for whatever
- * reason, from whatever session.
+ * The error case is if an application lacks spinlocks and wants to be
+ * threaded. That doesn't work because fcntl will lock the underlying
+ * process, including all its threads.
*/
- 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);
+ if (F_ISSET(dbenv, DB_ENV_THREAD)) {
+ __db_errx(dbenv,
+ "architecture lacks fast mutexes: applications cannot be threaded");
+ return (EINVAL);
+ }
+#endif
- /* Initialize the DB_ENV structure. */
- if ((ret = __dbenv_config(dbenv, db_home, flags)) != 0)
- goto err;
+ return (__env_open(dbenv, db_home, flags, mode));
+}
+
+/*
+ * __env_open --
+ * DB_ENV->open.
+ *
+ * PUBLIC: int __env_open __P((DB_ENV *, const char *, u_int32_t, int));
+ */
+int
+__env_open(dbenv, db_home, flags, mode)
+ DB_ENV *dbenv;
+ const char *db_home;
+ u_int32_t flags;
+ int mode;
+{
+ DB_THREAD_INFO *ip;
+ REGINFO *infop;
+ u_int32_t init_flags, orig_flags;
+ int register_recovery, rep_check, ret, t_ret;
+
+ ip = NULL;
+ register_recovery = rep_check = 0;
+
+ /* Initial configuration. */
+ if ((ret = __env_config(dbenv, db_home, flags, mode)) != 0)
+ return (ret);
+
+ /*
+ * Save the DB_ENV handle's configuration flags as set by user-called
+ * configuration methods and the environment directory's DB_CONFIG
+ * file. If we use this DB_ENV structure to recover the existing
+ * environment or to remove an environment we created after failure,
+ * we'll restore the DB_ENV flags to these values.
+ */
+ orig_flags = dbenv->flags;
+
+ /*
+ * If we're going to register with the environment, that's the first
+ * thing we do.
+ */
+ if (LF_ISSET(DB_REGISTER)) {
+ if ((ret = __envreg_register(dbenv, &register_recovery)) != 0)
+ goto err;
+ if (register_recovery) {
+ if (!LF_ISSET(DB_RECOVER)) {
+ __db_errx(dbenv,
+ "The DB_RECOVER flag was not specified, and recovery is needed");
+ ret = DB_RUNRECOVERY;
+ goto err;
+ }
+ } else
+ LF_CLR(DB_RECOVER);
+ }
+
+ /*
+ * If we're doing recovery, destroy the environment so that we create
+ * all the regions from scratch. The major concern I have is if the
+ * application stomps the environment with a rogue pointer. We have
+ * no way of detecting that, and we could be forced into a situation
+ * where we start up and then crash, repeatedly.
+ *
+ * We do not check any flags like DB_PRIVATE before calling remove.
+ * We don't care if the current environment was private or not, we
+ * want to remove files left over for any reason, from any session.
+ */
+ if (LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL))
+ if ((ret = __db_e_remove(dbenv, DB_FORCE)) != 0 ||
+ (ret = __env_refresh(dbenv, orig_flags, 0)) != 0)
+ goto err;
/* Convert the DB_ENV->open flags to internal flags. */
if (LF_ISSET(DB_CREATE))
@@ -183,17 +245,29 @@ __dbenv_open(dbenv, db_home, flags, mode)
if (LF_ISSET(DB_THREAD))
F_SET(dbenv, DB_ENV_THREAD);
- /* Default permissions are read-write for both owner and group. */
- dbenv->db_mode = mode == 0 ? __db_omode("rwrw--") : mode;
+ /*
+ * Flags saved in the init_flags field of the environment, representing
+ * 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_REP 0x0020 /* DB_INIT_REP */
+#define DB_INITENV_TXN 0x0040 /* DB_INIT_TXN */
/*
- * 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.
+ * Create/join the environment. We pass in the flags of interest to
+ * a thread subsequently joining an environment we create. If we're
+ * not the ones to create the environment, our flags will be updated
+ * to match the existing environment.
*/
init_flags = 0;
if (LF_ISSET(DB_INIT_CDB))
FLD_SET(init_flags, DB_INITENV_CDB);
+ if (F_ISSET(dbenv, DB_ENV_CDB_ALLDB))
+ FLD_SET(init_flags, DB_INITENV_CDB_ALLDB);
if (LF_ISSET(DB_INIT_LOCK))
FLD_SET(init_flags, DB_INITENV_LOCK);
if (LF_ISSET(DB_INIT_LOG))
@@ -204,8 +278,6 @@ __dbenv_open(dbenv, db_home, flags, mode)
FLD_SET(init_flags, DB_INITENV_REP);
if (LF_ISSET(DB_INIT_TXN))
FLD_SET(init_flags, DB_INITENV_TXN);
- if (F_ISSET(dbenv, DB_ENV_CDB_ALLDB))
- FLD_SET(init_flags, DB_INITENV_CDB_ALLDB);
if ((ret = __db_e_attach(dbenv, &init_flags)) != 0)
goto err;
@@ -213,45 +285,29 @@ __dbenv_open(dbenv, db_home, flags, mode)
* __db_e_attach will return the saved init_flags field, which contains
* the DB_INIT_* flags used when the environment was created.
*
- * Check if existing environment flags conflict with our flags.
+ * We may be joining an environment -- reset our flags to match the
+ * ones in the environment.
*/
- if (LF_ISSET(DB_INIT_CDB) && FLD_ISSET(init_flags, DB_INITENV_TXN)) {
- __db_err(dbenv,
- "Concurrent Data Store incompatible with environment");
- ret = EINVAL;
- goto err;
- }
- if (LF_ISSET(DB_INIT_TXN) && FLD_ISSET(init_flags, DB_INITENV_CDB)) {
- __db_err(dbenv,
- "Transactional Data Store incompatible with environment");
- ret = EINVAL;
+ if (FLD_ISSET(init_flags, DB_INITENV_CDB))
+ LF_SET(DB_INIT_CDB);
+ if (FLD_ISSET(init_flags, DB_INITENV_LOCK))
+ LF_SET(DB_INIT_LOCK);
+ if (FLD_ISSET(init_flags, DB_INITENV_LOG))
+ LF_SET(DB_INIT_LOG);
+ if (FLD_ISSET(init_flags, DB_INITENV_MPOOL))
+ LF_SET(DB_INIT_MPOOL);
+ if (FLD_ISSET(init_flags, DB_INITENV_REP))
+ LF_SET(DB_INIT_REP);
+ if (FLD_ISSET(init_flags, DB_INITENV_TXN))
+ LF_SET(DB_INIT_TXN);
+ if (FLD_ISSET(init_flags, DB_INITENV_CDB_ALLDB) &&
+ (ret = __env_set_flags(dbenv, DB_CDB_ALLDB, 1)) != 0)
goto err;
- }
-
- /* If we're joining the environment, find out what we're joining. */
- if (LF_ISSET(DB_JOINENV)) {
- LF_CLR(DB_JOINENV);
- if (FLD_ISSET(init_flags, DB_INITENV_CDB))
- LF_SET(DB_INIT_CDB);
- if (FLD_ISSET(init_flags, DB_INITENV_LOCK))
- LF_SET(DB_INIT_LOCK);
- if (FLD_ISSET(init_flags, DB_INITENV_LOG))
- LF_SET(DB_INIT_LOG);
- if (FLD_ISSET(init_flags, DB_INITENV_MPOOL))
- LF_SET(DB_INIT_MPOOL);
- if (FLD_ISSET(init_flags, DB_INITENV_REP))
- LF_SET(DB_INIT_REP);
- if (FLD_ISSET(init_flags, DB_INITENV_TXN))
- LF_SET(DB_INIT_TXN);
- if (FLD_ISSET(init_flags, DB_INITENV_CDB_ALLDB) &&
- (ret = __dbenv_set_flags(dbenv, DB_CDB_ALLDB, 1)) != 0)
- goto err;
- }
/*
- * Save the flags passed to create the DB_ENV->open, that is, we've
- * now replaced flags like DB_JOINENV with the flags responsible for
- * the underlying set of subsystems.
+ * Save the flags matching the database environment: we'll replace
+ * the argument flags with the flags corresponding to the existing,
+ * underlying set of subsystems.
*/
dbenv->open_flags = flags;
@@ -262,17 +318,36 @@ __dbenv_open(dbenv, db_home, flags, mode)
}
/*
+ * The DB_ENV structure has now been initialized. Turn off further
+ * use of the DB_ENV structure and most initialization methods, we're
+ * about to act on the values we currently have.
+ */
+ F_SET(dbenv, DB_ENV_OPEN_CALLED);
+
+ /*
* Initialize the subsystems.
*
- * Initialize the replication area first, so that we can lock out this
+ * Initialize the mutex regions first. There's no ordering requirement,
+ * but it's simpler to get this in place so we don't have to keep track
+ * of mutexes for later allocation, once the mutex region is created we
+ * can go ahead and do the allocation for real.
+ */
+ if ((ret = __mutex_open(dbenv)) != 0)
+ goto err;
+
+ /* __mutex_open creates the thread info region, enter it now. */
+ ENV_ENTER(dbenv, ip);
+
+ /*
+ * Initialize the replication area next, so that we can lock out this
* call if we're currently running recovery for replication.
*/
if (LF_ISSET(DB_INIT_REP) && (ret = __rep_open(dbenv)) != 0)
goto err;
rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
+ if (rep_check && (ret = __env_rep_enter(dbenv, 0)) != 0)
+ goto err;
if (LF_ISSET(DB_INIT_MPOOL))
if ((ret = __memp_open(dbenv)) != 0)
@@ -310,29 +385,7 @@ __dbenv_open(dbenv, db_home, flags, mode)
* If the application is running with transactions, initialize
* the function tables.
*/
- if ((ret = __bam_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __crdel_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __db_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __dbreg_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __fop_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __ham_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __qam_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
- goto err;
- if ((ret = __txn_init_recover(dbenv, &dbenv->recover_dtab,
- &dbenv->recover_dtab_size)) != 0)
+ if ((ret = __env_init_rec(dbenv, DB_LOGVERSION)) != 0)
goto err;
}
@@ -343,7 +396,7 @@ __dbenv_open(dbenv, db_home, flags, mode)
* 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.
+ * both.
*
* !!!
* This must come after the __memp_open call above because if we are
@@ -351,23 +404,19 @@ __dbenv_open(dbenv, db_home, flags, mode)
* region for environments and db handles. So, the mpool region must
* already be initialized.
*/
- LIST_INIT(&dbenv->dblist);
+ TAILQ_INIT(&dbenv->dblist);
if (LF_ISSET(DB_INIT_MPOOL)) {
- dbmp = dbenv->mp_handle;
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- 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 ((ret = __mutex_alloc(dbenv, MTX_ENV_DBLIST,
+ DB_MUTEX_PROCESS_ONLY, &dbenv->mtx_dblist)) != 0)
+ goto err;
+ if ((ret = __mutex_alloc(dbenv, MTX_TWISTER,
+ DB_MUTEX_PROCESS_ONLY, &dbenv->mtx_mt)) != 0)
+ goto err;
+
/* Register DB's pgin/pgout functions. */
if ((ret = __memp_register(
dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0)
- return (ret);
+ goto err;
}
/* Perform recovery for any previous run. */
@@ -386,47 +435,68 @@ __dbenv_open(dbenv, db_home, flags, mode)
* transaction ID and logs the reset if that's appropriate, so we
* don't need to do anything here in the recover case.
*/
+ infop = dbenv->reginfo;
if (TXN_ON(dbenv) &&
!F_ISSET(dbenv, DB_ENV_LOG_INMEMORY) &&
- F_ISSET((REGINFO *)dbenv->reginfo, REGION_CREATE) &&
+ F_ISSET(infop, REGION_CREATE) &&
!LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL) &&
(ret = __txn_reset(dbenv)) != 0)
goto err;
+ /* The database environment is ready for business. */
+ if ((ret = __db_e_golive(dbenv)) != 0)
+ goto err;
+
if (rep_check)
- __env_db_rep_exit(dbenv);
+ ret = __env_db_rep_exit(dbenv);
- return (0);
+err: ENV_LEAVE(dbenv, ip);
-err: /*
- * If we fail after creating the regions, remove them.
- *
- * !!!
- * No need to call __env_db_rep_exit, that work is done by the calls to
- * __dbenv_refresh.
- */
- if (dbenv->reginfo != NULL &&
- F_ISSET((REGINFO *)dbenv->reginfo, REGION_CREATE)) {
- ret = __db_panic(dbenv, ret);
+ if (ret != 0) {
+ /*
+ * If we fail after creating the regions, panic and remove them.
+ *
+ * !!!
+ * No need to call __env_db_rep_exit, that work is done by the
+ * calls to __env_refresh.
+ */
+ infop = dbenv->reginfo;
+ if (infop != NULL && F_ISSET(infop, REGION_CREATE)) {
+ ret = __db_panic(dbenv, ret);
+
+ /* Refresh the DB_ENV so can use it to call remove. */
+ (void)__env_refresh(dbenv, orig_flags, rep_check);
+ (void)__db_e_remove(dbenv, DB_FORCE);
+ (void)__env_refresh(dbenv, orig_flags, 0);
+ } else
+ (void)__env_refresh(dbenv, orig_flags, rep_check);
+ }
- /* 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);
+ if (register_recovery) {
+ /*
+ * If recovery succeeded, release our exclusive lock, other
+ * processes can now proceed.
+ *
+ * If recovery failed, unregister now and let another process
+ * clean up.
+ */
+ if (ret == 0 && (t_ret = __envreg_xunlock(dbenv)) != 0)
+ ret = t_ret;
+ if (ret != 0)
+ (void)__envreg_unregister(dbenv, 1);
+ }
return (ret);
}
/*
- * __dbenv_remove --
+ * __env_remove --
* DB_ENV->remove.
*
- * PUBLIC: int __dbenv_remove __P((DB_ENV *, const char *, u_int32_t));
+ * PUBLIC: int __env_remove __P((DB_ENV *, const char *, u_int32_t));
*/
int
-__dbenv_remove(dbenv, db_home, flags)
+__env_remove(dbenv, db_home, flags)
DB_ENV *dbenv;
const char *db_home;
u_int32_t flags;
@@ -443,87 +513,62 @@ __dbenv_remove(dbenv, db_home, flags)
ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->remove");
- ret = __dbenv_remove_int(dbenv, db_home, flags);
+ if ((ret = __env_config(dbenv, db_home, flags, 0)) != 0)
+ return (ret);
+
+ ret = __db_e_remove(dbenv, flags);
- if ((t_ret = __dbenv_close(dbenv, 0)) != 0 && ret == 0)
+ if ((t_ret = __env_close(dbenv, 0)) != 0 && ret == 0)
ret = t_ret;
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 --
- * Minor initialization of the DB_ENV structure, read the DB_CONFIG file.
+ * __env_config --
+ * Argument-based initialization.
+ *
+ * PUBLIC: int __env_config __P((DB_ENV *, const char *, u_int32_t, int));
*/
-static int
-__dbenv_config(dbenv, db_home, flags)
+int
+__env_config(dbenv, db_home, flags, mode)
DB_ENV *dbenv;
const char *db_home;
u_int32_t flags;
+ int mode;
{
- FILE *fp;
int ret;
- char *p, buf[256];
+ char *home, home_buf[DB_MAXPATHLEN];
/*
- * Set the database home. Do this before calling __db_appname,
- * it uses the home directory.
+ * Set the database home.
+ *
+ * Use db_home by default, this allows utilities to reasonably
+ * override the environment either explicitly or by using a -h
+ * option. Otherwise, use the environment if it's permitted
+ * and initialized.
*/
- if ((ret = __db_home(dbenv, db_home, flags)) != 0)
- return (ret);
-
- /* Parse the config file. */
- p = NULL;
- if ((ret =
- __db_appname(dbenv, DB_APP_NONE, "DB_CONFIG", 0, NULL, &p)) != 0)
- return (ret);
- if (p == NULL)
- fp = NULL;
- else {
- fp = fopen(p, "r");
- __os_free(dbenv, p);
+ home = (char *)db_home;
+ if (home == NULL && (LF_ISSET(DB_USE_ENVIRON) ||
+ (LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot()))) {
+ home = home_buf;
+ if ((ret = __os_getenv(
+ dbenv, "DB_HOME", &home, sizeof(home_buf))) != 0)
+ return (ret);
+ /*
+ * home set to NULL if __os_getenv failed to find DB_HOME.
+ */
}
+ if (home != NULL &&
+ (ret = __os_strdup(dbenv, home, &dbenv->db_home)) != 0)
+ return (ret);
- 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;
+ /* Default permissions are read-write for both owner and group. */
+ dbenv->db_mode = mode == 0 ? __db_omode("rw-rw----") : mode;
- if ((ret = __db_parse(dbenv, buf)) != 0) {
- (void)fclose(fp);
- return (ret);
- }
- }
- (void)fclose(fp);
- }
+ /* Read the DB_CONFIG file. */
+ if ((ret = __env_read_db_config(dbenv)) != 0)
+ return (ret);
/*
* If no temporary directory path was specified in the config file,
@@ -532,29 +577,28 @@ __dbenv_config(dbenv, db_home, flags)
if (dbenv->db_tmp_dir == NULL && (ret = __os_tmpdir(dbenv, flags)) != 0)
return (ret);
- /* Flag that the DB_ENV structure has been initialized. */
- F_SET(dbenv, DB_ENV_OPEN_CALLED);
-
return (0);
}
/*
- * __dbenv_close_pp --
+ * __env_close_pp --
* DB_ENV->close pre/post processor.
*
- * PUBLIC: int __dbenv_close_pp __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __env_close_pp __P((DB_ENV *, u_int32_t));
*/
int
-__dbenv_close_pp(dbenv, flags)
+__env_close_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
+ DB_THREAD_INFO *ip;
int rep_check, ret, t_ret;
ret = 0;
PANIC_CHECK(dbenv);
+ ENV_ENTER(dbenv, ip);
/*
* Validate arguments, but as a DB_ENV handle destructor, we can't
* fail.
@@ -564,23 +608,36 @@ __dbenv_close_pp(dbenv, flags)
ret = t_ret;
rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
+ if (rep_check) {
+#ifdef HAVE_REPLICATION_THREADS
+ /*
+ * Shut down Replication Manager threads first of all. This
+ * must be done before __env_rep_enter to avoid a deadlock that
+ * could occur if repmgr's background threads try to do a rep
+ * operation that needs __rep_lockout.
+ */
+ if ((t_ret = __repmgr_close(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+#endif
+ if ((t_ret = __env_rep_enter(dbenv, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ }
- if ((t_ret = __dbenv_close(dbenv, rep_check)) != 0 && ret == 0)
+ if ((t_ret = __env_close(dbenv, rep_check)) != 0 && ret == 0)
ret = t_ret;
+ /* Don't ENV_LEAVE as we have already detached from the region. */
return (ret);
}
/*
- * __dbenv_close --
+ * __env_close --
* DB_ENV->close.
*
- * PUBLIC: int __dbenv_close __P((DB_ENV *, int));
+ * PUBLIC: int __env_close __P((DB_ENV *, int));
*/
int
-__dbenv_close(dbenv, rep_check)
+__env_close(dbenv, rep_check)
DB_ENV *dbenv;
int rep_check;
{
@@ -597,22 +654,16 @@ __dbenv_close(dbenv, rep_check)
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)
+#ifdef HAVE_REPLICATION
+ if ((t_ret = __rep_close(dbenv)) != 0 && ret == 0)
ret = t_ret;
+#endif
/*
* 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 close. */
- if ((t_ret = __lock_dbenv_close(dbenv)) != 0 && ret == 0)
- ret = t_ret;
-
- if ((t_ret = __rep_dbenv_close(dbenv)) != 0 && ret == 0)
+ if ((t_ret = __env_refresh(dbenv, 0, rep_check)) != 0 && ret == 0)
ret = t_ret;
#ifdef HAVE_CRYPTO
@@ -623,54 +674,66 @@ __dbenv_close(dbenv, rep_check)
if ((t_ret = __crypto_dbenv_close(dbenv)) != 0 && ret == 0)
ret = t_ret;
#endif
+ /* If we're registered, clean up. */
+ if (dbenv->registry != NULL) {
+ (void)__envreg_unregister(dbenv, 0);
+ dbenv->registry = NULL;
+ }
/* Release any string-based configuration parameters we've copied. */
if (dbenv->db_log_dir != NULL)
__os_free(dbenv, dbenv->db_log_dir);
+ dbenv->db_log_dir = NULL;
if (dbenv->db_tmp_dir != NULL)
__os_free(dbenv, 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_free(dbenv, *p);
__os_free(dbenv, dbenv->db_data_dir);
+ dbenv->db_data_dir = NULL;
+ dbenv->data_next = 0;
+ }
+ if (dbenv->db_home != NULL) {
+ __os_free(dbenv, dbenv->db_home);
+ dbenv->db_home = NULL;
}
/* Discard the structure. */
- memset(dbenv, CLEAR_BYTE, sizeof(DB_ENV));
- __os_free(NULL, dbenv);
+ __db_env_destroy(dbenv);
return (ret);
}
/*
- * __dbenv_refresh --
- * 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.)
+ * __env_refresh --
+ * Refresh the DB_ENV structure.
*/
static int
-__dbenv_refresh(dbenv, orig_flags, rep_check)
+__env_refresh(dbenv, orig_flags, rep_check)
DB_ENV *dbenv;
u_int32_t orig_flags;
int rep_check;
{
DB *ldbp;
- DB_MPOOL *dbmp;
+ DB_THREAD_INFO *ip;
int ret, t_ret;
- dbmp = dbenv->mp_handle;
ret = 0;
/*
+ * Release resources allocated by DB_ENV->open, and return it to the
+ * state it was in just before __env_open was called. (This means
+ * state set by pre-open configuration functions must be preserved.)
+ *
* Refresh 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
+ * Note that these functions, like all of __env_refresh, only undo
+ * the effects of __env_open. Functions that undo work done by
* db_env_create or by a configuration function should go in
- * __dbenv_close.
+ * __env_close.
*/
if (TXN_ON(dbenv) &&
(t_ret = __txn_dbenv_refresh(dbenv)) != 0 && ret == 0)
@@ -686,11 +749,10 @@ __dbenv_refresh(dbenv, orig_flags, rep_check)
*/
if (LOCKING_ON(dbenv)) {
if (!F_ISSET(dbenv, DB_ENV_THREAD) &&
- dbenv->env_lid != DB_LOCK_INVALIDID &&
- (t_ret = __lock_id_free(dbenv, dbenv->env_lid)) != 0 &&
- ret == 0)
+ dbenv->env_lref != NULL && (t_ret = __lock_id_free(dbenv,
+ ((DB_LOCKER *)dbenv->env_lref)->id)) != 0 && ret == 0)
ret = t_ret;
- dbenv->env_lid = DB_LOCK_INVALIDID;
+ dbenv->env_lref = NULL;
if ((t_ret = __lock_dbenv_refresh(dbenv)) != 0 && ret == 0)
ret = t_ret;
@@ -708,20 +770,23 @@ __dbenv_refresh(dbenv, orig_flags, rep_check)
* log file handles. Ick.
*/
if (dbenv->db_ref != 0) {
- __db_err(dbenv, "Database handles remain at environment close");
- for (ldbp = LIST_FIRST(&dbenv->dblist);
- ldbp != NULL; ldbp = LIST_NEXT(ldbp, dblistlinks))
- __db_err(dbenv, "Open database handle: %s%s%s",
- ldbp->fname, ldbp->dname == NULL ? "" : "/",
+ __db_errx(dbenv,
+ "Database handles still open at environment close");
+ TAILQ_FOREACH(ldbp, &dbenv->dblist, dblistlinks)
+ __db_errx(dbenv, "Open database handle: %s%s%s",
+ ldbp->fname == NULL ? "unnamed" : ldbp->fname,
+ ldbp->dname == NULL ? "" : "/",
ldbp->dname == NULL ? "" : ldbp->dname);
if (ret == 0)
ret = EINVAL;
}
- LIST_INIT(&dbenv->dblist);
- if (dbenv->dblist_mutexp != NULL)
- __db_mutex_free(dbenv, dbmp->reginfo, dbenv->dblist_mutexp);
- if (dbenv->mt_mutexp != NULL)
- __db_mutex_free(dbenv, dbmp->reginfo, dbenv->mt_mutexp);
+ TAILQ_INIT(&dbenv->dblist);
+
+ if ((t_ret = __mutex_free(dbenv, &dbenv->mtx_dblist)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __mutex_free(dbenv, &dbenv->mtx_mt)) != 0 && ret == 0)
+ ret = t_ret;
+
if (dbenv->mt != NULL) {
__os_free(dbenv, dbenv->mt);
dbenv->mt = NULL;
@@ -751,15 +816,28 @@ __dbenv_refresh(dbenv, orig_flags, rep_check)
* as soon as we drop the handle count, there's little opportunity
* to do harm.
*/
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ if (rep_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
/*
* Detach from the region.
*
* Must come after we call __env_db_rep_exit above.
*/
- __rep_dbenv_refresh(dbenv);
+ if (REP_ON(dbenv))
+ __rep_dbenv_refresh(dbenv);
+
+ /*
+ * Mark the thread as out of the env before we get rid of the handles
+ * needed to do so.
+ */
+ if (dbenv->thr_hashtab != NULL &&
+ (t_ret = __env_set_state(dbenv, &ip, THREAD_OUT)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (MUTEX_ON(dbenv) &&
+ (t_ret = __mutex_dbenv_refresh(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
if (dbenv->reginfo != NULL) {
if ((t_ret = __db_e_detach(dbenv, 0)) != 0 && ret == 0)
@@ -771,15 +849,11 @@ __dbenv_refresh(dbenv, orig_flags, rep_check)
*/
}
- /* Undo changes and allocations done by __dbenv_open. */
- if (dbenv->db_home != NULL) {
- __os_free(dbenv, dbenv->db_home);
- dbenv->db_home = NULL;
+ if (dbenv->mutex_iq != NULL) {
+ __os_free(dbenv, dbenv->mutex_iq);
+ dbenv->mutex_iq = NULL;
}
- dbenv->open_flags = 0;
- dbenv->db_mode = 0;
-
if (dbenv->recover_dtab != NULL) {
__os_free(dbenv, dbenv->recover_dtab);
dbenv->recover_dtab = NULL;
@@ -813,13 +887,13 @@ __dbenv_refresh(dbenv, orig_flags, rep_check)
}
/*
- * __dbenv_get_open_flags
+ * __env_get_open_flags
* Retrieve the flags passed to DB_ENV->open.
*
- * PUBLIC: int __dbenv_get_open_flags __P((DB_ENV *, u_int32_t *));
+ * PUBLIC: int __env_get_open_flags __P((DB_ENV *, u_int32_t *));
*/
int
-__dbenv_get_open_flags(dbenv, flagsp)
+__env_get_open_flags(dbenv, flagsp)
DB_ENV *dbenv;
u_int32_t *flagsp;
{
@@ -847,13 +921,15 @@ __db_appname(dbenv, appname, file, tmp_oflags, fhpp, namep)
DB_FH **fhpp;
char **namep;
{
+ enum { TRY_NOTSET, TRY_DATA_DIR, TRY_ENV_HOME, TRY_CREATE } try_state;
size_t len, str_len;
int data_entry, ret, slash, tmp_create;
const char *a, *b;
char *p, *str;
+ try_state = TRY_NOTSET;
a = b = NULL;
- data_entry = -1;
+ data_entry = 0;
tmp_create = 0;
/*
@@ -890,11 +966,30 @@ retry: /*
case DB_APP_NONE:
break;
case DB_APP_DATA:
- 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];
+ if (dbenv == NULL || dbenv->db_data_dir == NULL) {
+ try_state = TRY_CREATE;
+ break;
+ }
+
+ /*
+ * First, step through the data_dir entries, if any, looking
+ * for the file.
+ */
+ if ((b = dbenv->db_data_dir[data_entry]) != NULL) {
+ ++data_entry;
+ try_state = TRY_DATA_DIR;
+ break;
}
+
+ /* Second, look in the environment home directory. */
+ if (try_state != TRY_ENV_HOME) {
+ try_state = TRY_ENV_HOME;
+ break;
+ }
+
+ /* Third, try creation in the first data_dir entry. */
+ try_state = TRY_CREATE;
+ b = dbenv->db_data_dir[0];
break;
case DB_APP_LOG:
if (dbenv != NULL)
@@ -933,7 +1028,8 @@ retry: /*
* 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 (__os_exists(str, NULL) != 0 && data_entry != -1) {
+ if (appname == DB_APP_DATA &&
+ __os_exists(dbenv, str, NULL) != 0 && try_state != TRY_CREATE) {
__os_free(dbenv, str);
b = NULL;
goto retry;
@@ -954,332 +1050,6 @@ retry: /*
}
/*
- * __db_home --
- * Find the database home.
- *
- * PUBLIC: int __db_home __P((DB_ENV *, const char *, u_int32_t));
- */
-int
-__db_home(dbenv, db_home, flags)
- DB_ENV *dbenv;
- const char *db_home;
- u_int32_t flags;
-{
- const char *p;
-
- /*
- * Use db_home by default, this allows utilities to reasonably
- * override the environment either explicitly or by using a -h
- * option. Otherwise, use the environment if it's permitted
- * and initialized.
- */
- if ((p = db_home) == NULL &&
- (LF_ISSET(DB_USE_ENVIRON) ||
- (LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot())) &&
- (p = getenv("DB_HOME")) != NULL && p[0] == '\0') {
- __db_err(dbenv, "illegal DB_HOME environment variable");
- return (EINVAL);
- }
-
- 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.
- */
-static int
-__db_parse(dbenv, s)
- DB_ENV *dbenv;
- char *s;
-{
- u_long __max, __v, v1, v2, v3;
- u_int32_t flags;
- char *name, *p, *value, v4;
-
- /*
- * !!!
- * 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 + 5];
-
- /*
- * Name/value pairs are parsed as two white-space separated strings.
- * Leading and trailing white-space is trimmed from the value, but
- * it may contain embedded white-space. Note: we use the isspace(3)
- * macro because it's more portable, but that means that you can use
- * characters like form-feed to separate the strings.
- */
- name = s;
- for (p = name; *p != '\0' && !isspace((int)*p); ++p)
- ;
- if (*p == '\0' || p == name)
- goto illegal;
- *p = '\0';
- for (++p; isspace((int)*p); ++p)
- ;
- if (*p == '\0')
- goto illegal;
- value = p;
- for (++p; *p != '\0'; ++p)
- ;
- for (--p; isspace((int)*p); --p)
- ;
- ++p;
- if (p == value) {
-illegal: __db_err(dbenv, "mis-formatted name-value pair: %s", s);
- return (EINVAL);
- }
- *p = '\0';
-
- if (!strcasecmp(name, "set_cachesize")) {
- if (sscanf(value, "%lu %lu %lu %c", &v1, &v2, &v3, &v4) != 3)
- goto badarg;
- __DB_OVFL(v1, UINT32_MAX);
- __DB_OVFL(v2, UINT32_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));
-
- if (!strcasecmp(name, "set_intermediate_dir")) {/* Undocumented. */
- if (sscanf(value, "%lu %c", &v1, &v4) != 1)
- goto badarg;
-#ifdef INT_MAX
- __DB_OVFL(v1, INT_MAX);
-#endif
- return (__dbenv_set_intermediate_dir(dbenv, (int)v1, 0));
- }
-
- 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));
- 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_dsync_log"))
- return (__dbenv_set_flags(dbenv, DB_DSYNC_LOG, 1));
- if (!strcasecmp(value, "db_log_autoremove"))
- return (__dbenv_set_flags(dbenv, DB_LOG_AUTOREMOVE, 1));
- if (!strcasecmp(value, "db_log_inmemory"))
- return (__dbenv_set_flags(dbenv, DB_LOG_INMEMORY, 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));
- 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));
- 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;
- __DB_OVFL(v1, UINT32_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;
- __DB_OVFL(v1, UINT32_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_MAX);
- return (__log_set_lg_regionmax(dbenv, (u_int32_t)v1));
- }
-
- if (!strcasecmp(name, "set_lg_dir") ||
- !strcasecmp(name, "db_log_dir")) /* Compatibility. */
- 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_maxwrite"))
- flags = DB_LOCK_MAXWRITE;
- 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"))
- flags = DB_LOCK_RANDOM;
- else if (!strcasecmp(value, "db_lock_youngest"))
- flags = DB_LOCK_YOUNGEST;
- else
- goto badarg;
- return (__lock_set_lk_detect(dbenv, flags));
- }
-
- if (!strcasecmp(name, "set_lk_max")) {
- if (sscanf(value, "%lu %c", &v1, &v4) != 1)
- goto badarg;
- __DB_OVFL(v1, UINT32_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;
- __DB_OVFL(v1, UINT32_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;
- __DB_OVFL(v1, UINT32_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;
- __DB_OVFL(v1, UINT32_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_MAX);
- return (__lock_set_env_timeout(
- dbenv, (u_int32_t)v1, DB_SET_LOCK_TIMEOUT));
- }
-
- if (!strcasecmp(name, "set_mp_max_openfd")) {
- if (sscanf(value, "%lu %c", &v1, &v4) != 1)
- goto badarg;
- __DB_OVFL(v1, INT_MAX);
- return (__memp_set_mp_max_openfd(dbenv, (int)v1));
- }
-
- if (!strcasecmp(name, "set_mp_max_write")) {
- if (sscanf(value, "%lu %lu %c", &v1, &v2, &v4) != 2)
- goto badarg;
- __DB_OVFL(v1, INT_MAX);
- __DB_OVFL(v2, INT_MAX);
- return (__memp_set_mp_max_write(dbenv, (int)v1, (int)v2));
- }
-
- if (!strcasecmp(name, "set_mp_mmapsize")) {
- if (sscanf(value, "%lu %c", &v1, &v4) != 1)
- goto badarg;
- __DB_OVFL(v1, UINT32_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 (__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));
- }
-
- if (!strcasecmp(name, "set_tas_spins")) {
- if (sscanf(value, "%lu %c", &v1, &v4) != 1)
- goto badarg;
- __DB_OVFL(v1, UINT32_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));
-
- if (!strcasecmp(name, "set_tx_max")) {
- if (sscanf(value, "%lu %c", &v1, &v4) != 1)
- goto badarg;
- __DB_OVFL(v1, UINT32_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_MAX);
- return (__lock_set_env_timeout(
- dbenv, (u_int32_t)v1, DB_SET_TXN_TIMEOUT));
- }
-
- if (!strcasecmp(name, "set_verbose")) {
- if (sscanf(value, "%40s %c", arg, &v4) != 1)
- goto badarg;
-
- else if (!strcasecmp(value, "db_verb_deadlock"))
- 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));
- }
-
- __db_err(dbenv, "unrecognized name-value pair: %s", s);
- return (EINVAL);
-
-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);
-}
-
-/*
* __db_tmp_open --
* Create a temporary file.
*/
@@ -1290,7 +1060,7 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhpp)
char *path;
DB_FH **fhpp;
{
- u_int32_t id;
+ pid_t pid;
int filenum, i, isdir, ret;
char *firstx, *trv;
@@ -1298,12 +1068,12 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhpp)
* Check the target directory; if you have six X's and it doesn't
* exist, this runs for a *very* long time.
*/
- if ((ret = __os_exists(path, &isdir)) != 0) {
- __db_err(dbenv, "%s: %s", path, db_strerror(ret));
+ if ((ret = __os_exists(dbenv, path, &isdir)) != 0) {
+ __db_err(dbenv, ret, "%s", path);
return (ret);
}
if (!isdir) {
- __db_err(dbenv, "%s: %s", path, db_strerror(EINVAL));
+ __db_err(dbenv, EINVAL, "%s", path);
return (EINVAL);
}
@@ -1312,15 +1082,16 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhpp)
(void)strcat(path, DB_TRAIL);
/* Replace the X's with the process ID (in decimal). */
- for (trv = path + strlen(path), __os_id(&id); *--trv == 'X'; id /= 10)
- *trv = '0' + (id % 10);
+ __os_id(dbenv, &pid, NULL);
+ for (trv = path + strlen(path); *--trv == 'X'; pid /= 10)
+ *trv = '0' + (u_char)(pid % 10);
firstx = trv + 1;
/* Loop, trying to open a file. */
for (filenum = 1;; filenum++) {
if ((ret = __os_open(dbenv, path,
tmp_oflags | DB_OSO_CREATE | DB_OSO_EXCL | DB_OSO_TEMP,
- __db_omode("rw----"), fhpp)) == 0)
+ __db_omode(OWNER_RW), fhpp)) == 0)
return (0);
/*
@@ -1331,14 +1102,13 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhpp)
* of other possible errors, we've lost.
*/
if (ret != EEXIST) {
- __db_err(dbenv,
- "tmp_open: %s: %s", path, db_strerror(ret));
+ __db_err(dbenv, ret, "temporary open: %s", path);
return (ret);
}
/*
* Generate temporary file names in a backwards-compatible way.
- * If id == 12345, the result is:
+ * If pid == 12345, the result is:
* <path>/DB12345 (tried above, the first time through).
* <path>/DBa2345 ... <path>/DBz2345
* <path>/DBaa345 ... <path>/DBaz345
diff --git a/db/env/env_recover.c b/db/env/env_recover.c
index 1c018171f..46d927dc1 100644
--- a/db/env/env_recover.c
+++ b/db/env/env_recover.c
@@ -1,47 +1,35 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: env_recover.c,v 11.126 2004/09/22 03:43:52 bostic Exp $
+ * $Id: env_recover.c,v 12.34 2006/09/09 14:28:22 bostic Exp $
*/
#include "db_config.h"
-#ifndef lint
-static const char copyright[] =
- "Copyright (c) 1996-2004\nSleepycat Software Inc. All rights reserved.\n";
-#endif
-
-#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 <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
+#include "dbinc/fop.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
#include "dbinc/log.h"
-#include "dbinc/txn.h"
#include "dbinc/mp.h"
-#include "dbinc/db_am.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+#ifndef lint
+static const char copyright[] =
+ "Copyright (c) 1996-2006\nOracle Corporation. All rights reserved.\n";
+#endif
-static int __db_log_corrupt __P((DB_ENV *, 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));
+static int __db_log_corrupt __P((DB_ENV *, DB_LSN *));
+static int __env_init_rec_42 __P((DB_ENV *));
+static int __env_init_rec_43 __P((DB_ENV *));
+static int __env_init_rec_45 __P((DB_ENV *));
+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 --
@@ -62,6 +50,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
DBT data;
DB_LOGC *logc;
DB_LSN ckp_lsn, first_lsn, last_lsn, lowlsn, lsn, stop_lsn, tlsn;
+ DB_TXNHEAD *txninfo;
DB_TXNREGION *region;
REGENV *renv;
REGINFO *infop;
@@ -71,39 +60,37 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
u_int32_t hi_txn, log_size, txnid;
int32_t low;
int have_rec, progress, ret, t_ret;
- int (**dtab) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- char *p, *pass, t1[60], t2[60];
- void *txninfo;
+ char *p, *pass;
+ char t1[CTIME_BUFLEN], t2[CTIME_BUFLEN], time_buf[CTIME_BUFLEN];
- COMPQUIET(nfiles, (double)0);
+ COMPQUIET(nfiles, (double)0.001);
logc = NULL;
ckp_args = NULL;
- dtab = NULL;
hi_txn = TXN_MAXIMUM;
txninfo = NULL;
pass = "initial";
+ ZERO_LSN(lsn);
/*
* 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;
+ log_size = ((LOG *)dbenv->lg_handle->reginfo.primary)->log_size;
/*
* If we need to, update the env handle timestamp.
*/
- if (update) {
+ if (update && REP_ON(dbenv)) {
infop = dbenv->reginfo;
renv = infop->primary;
(void)time(&renv->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(dbenv->lg_handle, DBLOG_RECOVER);
+ region = dbenv->tx_handle->reginfo.primary;
F_SET(region, TXN_IN_RECOVERY);
/* Allocate a cursor for the log. */
@@ -123,15 +110,20 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
if ((ret = __log_earliest(dbenv, logc, &low, &lowlsn)) != 0)
goto err;
if ((int32_t)dbenv->tx_timestamp < low) {
- (void)snprintf(t1, sizeof(t1),
- "%s", ctime(&dbenv->tx_timestamp));
+ t1[sizeof(t1) - 1] = '\0';
+ (void)strncpy(t1, __db_ctime(
+ &dbenv->tx_timestamp, time_buf), sizeof(t1) - 1);
if ((p = strchr(t1, '\n')) != NULL)
*p = '\0';
+
+ t2[sizeof(t2) - 1] = '\0';
tlow = (time_t)low;
- (void)snprintf(t2, sizeof(t2), "%s", ctime(&tlow));
+ (void)strncpy(t2, __db_ctime(
+ &tlow, time_buf), sizeof(t2) - 1);
if ((p = strchr(t2, '\n')) != NULL)
*p = '\0';
- __db_err(dbenv,
+
+ __db_errx(dbenv,
"Invalid recovery timestamp %s; earliest time is %s",
t1, t2);
ret = EINVAL;
@@ -216,7 +208,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
if (ret == DB_NOTFOUND)
ret = 0;
else
- __db_err(dbenv, "Last log record not found");
+ __db_errx(dbenv, "Last log record not found");
goto err;
}
@@ -261,7 +253,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
if (ret == DB_NOTFOUND)
ret = 0;
else
- __db_err(dbenv, "First log record not found");
+ __db_errx(dbenv, "First log record not found");
goto err;
}
first_lsn = ckp_lsn;
@@ -273,7 +265,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
/* We have a recent checkpoint. This is LSN (1). */
if ((ret = __txn_ckp_read(dbenv,
data.data, &ckp_args)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Invalid checkpoint record at [%ld][%ld]",
(u_long)ckp_lsn.file,
(u_long)ckp_lsn.offset);
@@ -303,8 +295,8 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
* the logs and before the timestamp.
*/
if ((dbenv->tx_timestamp != 0 || max_lsn != NULL) &&
- log_compare(&lowlsn, &first_lsn) < 0) {
- DB_ASSERT(have_rec == 0);
+ LOG_COMPARE(&lowlsn, &first_lsn) < 0) {
+ DB_ASSERT(dbenv, have_rec == 0);
first_lsn = lowlsn;
}
}
@@ -312,7 +304,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
/* 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",
+ __db_errx(dbenv, "Checkpoint LSN record [%ld][%ld] not found",
(u_long)first_lsn.file, (u_long)first_lsn.offset);
goto err;
}
@@ -326,8 +318,8 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
(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 = (double)0.001;
+ if (nfiles < 0.001)
+ nfiles = 0.001;
}
/* Find a low txnid. */
@@ -346,7 +338,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
* above), so there is nothing to do.
*/
if (ret == DB_NOTFOUND) {
- if (log_compare(&lsn, &last_lsn) != 0)
+ if (LOG_COMPARE(&lsn, &last_lsn) != 0)
ret = __db_log_corrupt(dbenv, &lsn);
else
ret = 0;
@@ -387,7 +379,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
pass = "backward";
for (ret = __log_c_get(logc, &lsn, &data, DB_LAST);
- ret == 0 && log_compare(&lsn, &first_lsn) >= 0;
+ 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(&first_lsn,
@@ -406,7 +398,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
}
}
if (ret == DB_NOTFOUND) {
- if (log_compare(&lsn, &first_lsn) > 0)
+ if (LOG_COMPARE(&lsn, &first_lsn) > 0)
ret = __db_log_corrupt(dbenv, &lsn);
else
ret = 0;
@@ -451,7 +443,7 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
* 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)
+ if (LOG_COMPARE(&lsn, &stop_lsn) >= 0)
break;
}
@@ -501,15 +493,25 @@ __db_apprec(dbenv, max_lsn, trunclsn, update, flags)
#endif
}
+done:
/* 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) {
+ /*
+ * If there was no space for the checkpoint we can
+ * still bring the environment up. No updates will
+ * be able to commit either, but the environment can
+ * be used read only.
+ */
+ if (max_lsn == NULL && ret == ENOSPC)
+ ret = 0;
+ else
+ goto err;
+ }
/* Close all the db files that are open. */
if ((ret = __dbreg_close_files(dbenv)) != 0)
goto err;
-done:
if (max_lsn != NULL) {
if (!IS_ZERO_LSN(((DB_TXNHEAD *)txninfo)->ckplsn))
region->last_ckp = ((DB_TXNHEAD *)txninfo)->ckplsn;
@@ -520,6 +522,7 @@ done:
/* 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;
if ((ret = __log_vtruncate(dbenv,
max_lsn, &((DB_TXNHEAD *)txninfo)->ckplsn, trunclsn)) != 0)
goto err;
@@ -537,7 +540,7 @@ done:
if (ret == DB_NOTFOUND)
ret = 0;
else
- __db_err(dbenv, "First log record not found");
+ __db_errx(dbenv, "First log record not found");
goto err;
}
if ((ret = __txn_getckp(dbenv, &first_lsn)) == 0 &&
@@ -545,7 +548,7 @@ done:
/* We have a recent checkpoint. This is LSN (1). */
if ((ret = __txn_ckp_read(dbenv,
data.data, &ckp_args)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Invalid checkpoint record at [%ld][%ld]",
(u_long)first_lsn.file,
(u_long)first_lsn.offset);
@@ -557,19 +560,31 @@ done:
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)
+ txninfo, &data, &first_lsn, max_lsn, nfiles, 1)) != 0)
goto err;
- } else if (region->stat.st_nrestores == 0)
+ } 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;
+ } else {
+ /*
+ * If we have restored prepared txns then they are in process
+ * as far as replication is concerned.
+ */
+ if (REP_ON(dbenv))
+ dbenv->rep_handle->region->op_cnt =
+ region->stat.st_nrestores;
+ if ((ret = __txn_recycle_id(dbenv)) != 0)
+ goto err;
+ }
if (FLD_ISSET(dbenv->verbose, DB_VERB_RECOVERY)) {
(void)time(&now);
- __db_msg(dbenv, "Recovery complete at %.24s", ctime(&now));
+ __db_msg(dbenv,
+ "Recovery complete at %.24s", __db_ctime(&now, time_buf));
__db_msg(dbenv, "%s %lx %s [%lu][%lu]",
"Maximum transaction ID",
(u_long)(txninfo == NULL ?
@@ -580,7 +595,7 @@ done:
}
if (0) {
-msgerr: __db_err(dbenv,
+msgerr: __db_errx(dbenv,
"Recovery function for LSN %lu %lu failed on %s pass",
(u_long)lsn.file, (u_long)lsn.offset, pass);
}
@@ -591,12 +606,9 @@ err: if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
if (txninfo != NULL)
__db_txnlist_end(dbenv, txninfo);
- if (dtab != NULL)
- __os_free(dbenv, dtab);
-
dbenv->tx_timestamp = 0;
- F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_CLR(dbenv->lg_handle, DBLOG_RECOVER);
F_CLR(region, TXN_IN_RECOVERY);
return (ret);
@@ -627,8 +639,9 @@ __lsn_diff(low, high, current, max, is_forward)
if (current->file == low->file)
nf = (double)(current->offset - low->offset) / max;
else if (current->offset < low->offset)
- nf = (double)(current->file - low->file - 1) +
- (double)(max - low->offset + current->offset) / max;
+ nf = (double)((current->file - low->file) - 1) +
+ (double)((max - low->offset) + current->offset) /
+ max;
else
nf = (double)(current->file - low->file) +
(double)(current->offset - low->offset) / max;
@@ -636,9 +649,9 @@ __lsn_diff(low, high, current, max, is_forward)
if (current->file == high->file)
nf = (double)(high->offset - current->offset) / max;
else if (current->offset > high->offset)
- nf = (double)(high->file - current->file - 1) +
+ nf = (double)((high->file - current->file) - 1) +
(double)
- (max - current->offset + high->offset) / max;
+ ((max - current->offset) + high->offset) / max;
else
nf = (double)(high->file - current->file) +
(double)(high->offset - current->offset) / max;
@@ -692,7 +705,7 @@ __log_backup(dbenv, logc, max_lsn, start_lsn, cmp)
* or equal max_lsn.
*/
cmp_lsn = ckp_args->ckp_lsn;
- lcmp = (log_compare(&cmp_lsn, max_lsn) <= 0);
+ lcmp = (LOG_COMPARE(&cmp_lsn, max_lsn) <= 0);
} else {
/*
* When we're walking back through the checkpoints
@@ -700,7 +713,7 @@ __log_backup(dbenv, logc, max_lsn, start_lsn, cmp)
* than the max_lsn (also a ckp LSN).
*/
cmp_lsn = lsn;
- lcmp = (log_compare(&cmp_lsn, max_lsn) < 0);
+ lcmp = (LOG_COMPARE(&cmp_lsn, max_lsn) < 0);
}
if (lcmp) {
*start_lsn = cmp_lsn;
@@ -717,6 +730,7 @@ __log_backup(dbenv, logc, max_lsn, start_lsn, cmp)
break;
}
__os_free(dbenv, ckp_args);
+ ckp_args = NULL;
}
if (ckp_args != NULL)
@@ -753,18 +767,18 @@ __log_earliest(dbenv, logc, lowtime, lowlsn)
int cmp, ret;
memset(&data, 0, sizeof(data));
+
/*
* Read forward through the log looking for the first checkpoint
* record whose ckp_lsn is greater than first_lsn.
*/
-
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)
continue;
if ((ret = __txn_ckp_read(dbenv, data.data, &ckpargs)) == 0) {
- cmp = log_compare(&ckpargs->ckp_lsn, &first_lsn);
+ cmp = LOG_COMPARE(&ckpargs->ckp_lsn, &first_lsn);
*lowlsn = ckpargs->ckp_lsn;
*lowtime = ckpargs->timestamp;
@@ -813,13 +827,12 @@ __env_openfiles(dbenv, logc, txninfo,
* 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;
+ log_size = ((LOG *)dbenv->lg_handle->reginfo.primary)->log_size;
lsn = *open_lsn;
for (;;) {
if (in_recovery && dbenv->db_feedback != NULL) {
- DB_ASSERT(last_lsn != NULL);
+ DB_ASSERT(dbenv, last_lsn != NULL);
progress = (int)(33 * (__lsn_diff(open_lsn,
last_lsn, &lsn, log_size, 1) / nfiles));
dbenv->db_feedback(dbenv, DB_RECOVER, progress);
@@ -830,7 +843,7 @@ __env_openfiles(dbenv, logc, txninfo,
in_recovery ? DB_TXN_OPENFILES : DB_TXN_POPENFILES,
txninfo);
if (ret != 0 && ret != DB_TXN_CKP) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Recovery function for LSN %lu %lu failed",
(u_long)lsn.file, (u_long)lsn.offset);
break;
@@ -838,7 +851,7 @@ __env_openfiles(dbenv, logc, txninfo,
if ((ret = __log_c_get(logc, &lsn, data, DB_NEXT)) != 0) {
if (ret == DB_NOTFOUND) {
if (last_lsn != NULL &&
- log_compare(&lsn, last_lsn) != 0)
+ LOG_COMPARE(&lsn, last_lsn) != 0)
ret = __db_log_corrupt(dbenv, &lsn);
else
ret = 0;
@@ -855,7 +868,150 @@ __db_log_corrupt(dbenv, lsnp)
DB_ENV *dbenv;
DB_LSN *lsnp;
{
- __db_err(dbenv, "Log file corrupt at LSN: [%lu][%lu]",
+ __db_errx(dbenv, "Log file corrupt at LSN: [%lu][%lu]",
(u_long)lsnp->file, (u_long)lsnp->offset);
return (EINVAL);
}
+
+/*
+ * __env_init_rec --
+ *
+ * PUBLIC: int __env_init_rec __P((DB_ENV *, u_int32_t));
+ */
+int
+__env_init_rec(dbenv, version)
+ DB_ENV *dbenv;
+ u_int32_t version;
+{
+ int ret;
+
+ /*
+ * We need to prime the recovery table with the current recovery
+ * functions. Then we overwrite only specific entries based on
+ * each previous version we support.
+ */
+ if ((ret = __env_init_rec_45(dbenv)) != 0)
+ return (ret);
+ ret = 0;
+ switch (version) {
+ /*
+ * There are no log record/recovery differences between
+ * 4.4 and 4.5. The log version changed due to checksum.
+ */
+ case DB_LOGVERSION_45:
+ case DB_LOGVERSION_44:
+ break;
+ case DB_LOGVERSION_43:
+ ret = __env_init_rec_43(dbenv);
+ break;
+ case DB_LOGVERSION_42:
+ ret = __env_init_rec_42(dbenv);
+ break;
+ default:
+ __db_errx(dbenv, "Unknown version %lu", (u_long)version);
+ ret = EINVAL;
+ break;
+ }
+ return (ret);
+}
+
+static int
+__env_init_rec_42(dbenv)
+ DB_ENV *dbenv;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __db_relink_42_recover,
+ DB___db_relink_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __db_pg_alloc_42_recover,
+ DB___db_pg_alloc_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __db_pg_free_42_recover,
+ DB___db_pg_free_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __db_pg_freedata_42_recover,
+ DB___db_pg_freedata_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __ham_metagroup_42_recover,
+ DB___ham_metagroup_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __ham_groupalloc_42_recover,
+ DB___ham_groupalloc_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __txn_ckp_42_recover,
+ DB___txn_ckp_42)) != 0)
+ goto err;
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __txn_regop_42_recover,
+ DB___txn_regop_42)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
+static int
+__env_init_rec_43(dbenv)
+ DB_ENV *dbenv;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __bam_relink_43_recover,
+ DB___bam_relink_43)) != 0)
+ goto err;
+ /*
+ * We want to use the 4.2-based txn_regop record.
+ */
+ if ((ret = __db_add_recovery(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size, __txn_regop_42_recover,
+ DB___txn_regop_42)) != 0)
+ goto err;
+err:
+ return (ret);
+}
+
+/*
+ * __env_init_rec_45 --
+ *
+ */
+static int
+__env_init_rec_45(dbenv)
+ DB_ENV *dbenv;
+{
+ int ret;
+
+ if ((ret = __bam_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __crdel_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __db_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __dbreg_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __fop_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __ham_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __qam_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+ if ((ret = __txn_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
+ goto err;
+err:
+ return (ret);
+}
diff --git a/db/env/env_region.c b/db/env/env_region.c
index 17d2e65d3..76d7958d8 100644
--- a/db/env/env_region.c
+++ b/db/env/env_region.c
@@ -1,33 +1,22 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: env_region.c,v 11.103 2004/10/15 16:59:41 bostic Exp $
+ * $Id: env_region.c,v 12.19 2006/08/24 14:45:40 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/crypto.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 void __db_des_destroy __P((DB_ENV *, REGION *));
static int __db_des_get __P((DB_ENV *, REGINFO *, REGINFO *, REGION **));
static int __db_e_remfile __P((DB_ENV *));
static int __db_faultmem __P((DB_ENV *, void *, size_t, int));
-static void __db_region_destroy __P((DB_ENV *, REGINFO *));
/*
* __db_e_attach
@@ -46,37 +35,11 @@ __db_e_attach(dbenv, init_flagsp)
REGION *rp, tregion;
size_t size;
size_t nrw;
- u_int32_t mbytes, bytes;
+ u_int32_t bytes, i, mbytes, nregions;
u_int retry_cnt;
- int ret, segid;
+ int majver, minver, patchver, ret, segid;
char buf[sizeof(DB_REGION_FMT) + 20];
-#if !defined(HAVE_MUTEX_THREADS)
- /*
- * !!!
- * If we don't have spinlocks, we need a file descriptor for fcntl(2)
- * locking. We use the file handle from the REGENV file for this
- * purpose.
- *
- * Since we may be using shared memory regions, e.g., shmget(2), and
- * not a mapped-in regular file, the backing file may be only a few
- * bytes in length. So, this depends on the ability to call fcntl to
- * lock file offsets much larger than the actual physical file. I
- * think that's safe -- besides, very few systems actually need this
- * kind of support, SunOS is the only one still in wide use of which
- * I'm aware.
- *
- * The error case is if an application lacks spinlocks and wants to be
- * threaded. That doesn't work because fcntl may lock the underlying
- * process, including all its threads.
- */
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- __db_err(dbenv,
- "architecture lacks fast mutexes: applications cannot be threaded");
- return (EINVAL);
- }
-#endif
-
/* Initialization */
retry_cnt = 0;
@@ -95,8 +58,8 @@ loop: renv = NULL;
/*
* We have to single-thread the creation of the REGENV region. Once
- * it exists, we can do locking using locks in the region, but until
- * then we have to be the only player in the game.
+ * it exists, we can serialize using region mutexes, but until then
+ * we have to be the only player in the game.
*
* If this is a private environment, we are only called once and there
* are no possible race conditions.
@@ -131,8 +94,7 @@ loop: renv = NULL;
dbenv->db_mode, &dbenv->lockfhp)) == 0)
goto creation;
if (ret != EEXIST) {
- __db_err(dbenv,
- "%s: %s", infop->name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", infop->name);
goto err;
}
}
@@ -179,7 +141,7 @@ loop: renv = NULL;
*/
if ((ret = __os_ioinfo(dbenv, infop->name,
dbenv->lockfhp, &mbytes, &bytes, NULL)) != 0) {
- __db_err(dbenv, "%s: %s", infop->name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", infop->name);
goto err;
}
@@ -193,7 +155,8 @@ loop: renv = NULL;
/*
* If the size is less than the size of a REGENV_REF structure, the
* region (or, possibly, the REGENV_REF structure) has not yet been
- * completely written. Wait awhile and try again.
+ * completely written. Shouldn't be possible, but there's no reason
+ * not to wait awhile and try again.
*
* Otherwise, if the size is the size of a REGENV_REF structure,
* read it into memory and use it as a reference to the real region.
@@ -206,9 +169,9 @@ loop: renv = NULL;
sizeof(ref), &nrw)) != 0 || nrw < (size_t)sizeof(ref)) {
if (ret == 0)
ret = EIO;
- __db_err(dbenv,
- "%s: unable to read system-memory information from: %s",
- infop->name, db_strerror(ret));
+ __db_err(dbenv, ret,
+ "%s: unable to read system-memory information",
+ infop->name);
goto err;
}
size = ref.size;
@@ -217,20 +180,19 @@ loop: renv = NULL;
F_SET(dbenv, DB_ENV_SYSTEM_MEM);
} else if (F_ISSET(dbenv, DB_ENV_SYSTEM_MEM)) {
ret = EINVAL;
- __db_err(dbenv,
- "%s: existing environment not created in system memory: %s",
- infop->name, db_strerror(ret));
+ __db_err(dbenv, ret,
+ "%s: existing environment not created in system memory",
+ infop->name);
goto err;
} else
segid = INVALID_REGION_SEGID;
+#ifndef HAVE_MUTEX_FCNTL
/*
- * If not doing thread locking, we need to save the file handle for
- * fcntl(2) locking. Otherwise, discard the handle, we no longer
- * need it, and the less contact between the buffer cache and the VM,
- * the better.
+ * If we're not doing fcntl locking, we can close the file handle. We
+ * no longer need it and the less contact between the buffer cache and
+ * the VM, the better.
*/
-#ifdef HAVE_MUTEX_THREADS
(void)__os_closehandle(dbenv, dbenv->lockfhp);
dbenv->lockfhp = NULL;
#endif
@@ -253,13 +215,24 @@ loop: renv = NULL;
infop->addr = (u_int8_t *)infop->addr + sizeof(REGENV);
renv = infop->primary;
- /* Make sure the region matches our build. */
+ /*
+ * Make sure the region matches our build. Special case a region
+ * that's all nul bytes, just treat it like any other corruption.
+ *
+ * !!!
+ * We don't display the major/minor version from the environment,
+ * because it may be in a different place in the two regions.
+ */
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);
- ret = DB_VERSION_MISMATCH;
+ if (renv->majver != 0 || renv->minver != 0) {
+ __db_errx(dbenv,
+ "Program version %d.%d doesn't match environment version %d.%d",
+ DB_VERSION_MAJOR, DB_VERSION_MINOR,
+ renv->majver, renv->minver);
+ ret = DB_VERSION_MISMATCH;
+ } else
+ ret = EINVAL;
goto err;
}
@@ -277,33 +250,19 @@ 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.
*/
- if (renv->envpanic && !F_ISSET(dbenv, DB_ENV_NOPANIC)) {
+ if (renv->panic && !F_ISSET(dbenv, DB_ENV_NOPANIC)) {
ret = __db_panic_msg(dbenv);
goto err;
}
if (renv->magic != DB_REGION_MAGIC)
goto retry;
- /* Lock the environment. */
- 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->envpanic && !F_ISSET(dbenv, DB_ENV_NOPANIC)) {
- ret = __db_panic_msg(dbenv);
- goto err_unlock;
- }
-
/*
* Get a reference to the underlying REGION information for this
* environment.
*/
- if ((ret = __db_des_get(dbenv, infop, infop, &rp)) != 0 || rp == NULL) {
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ if ((ret = __db_des_get(dbenv, infop, infop, &rp)) != 0 || rp == NULL)
goto find_err;
- }
infop->rp = rp;
/*
@@ -312,28 +271,33 @@ loop: renv = NULL;
* growing as part of its creation. We can detect this by checking the
* size we originally found against the region's current size. (The
* region's current size has to be final, the creator finished growing
- * it before releasing the environment for us to lock.)
+ * it before setting the magic number in the region.)
*/
- if (rp->size != size) {
-err_unlock: MUTEX_UNLOCK(dbenv, &renv->mutex);
+ if (rp->size != size)
goto retry;
- }
/* Increment the reference count. */
+ MUTEX_LOCK(dbenv, renv->mtx_regenv);
++renv->refcnt;
+ MUTEX_UNLOCK(dbenv, renv->mtx_regenv);
/*
- * Add configuration flags from our caller; return the total set of
- * configuration flags for later DB_JOINENV calls.
+ * Check our callers configuration flags, it's an error to configure
+ * incompatible or additional subsystems in an existing environment.
+ * Return the total set of flags to the caller so they initialize the
+ * correct set of subsystems.
*/
if (init_flagsp != NULL) {
- renv->init_flags |= *init_flagsp;
+ FLD_CLR(*init_flagsp, renv->init_flags);
+ if (*init_flagsp != 0) {
+ __db_errx(dbenv,
+ "configured environment flags incompatible with existing environment");
+ ret = EINVAL;
+ goto err;
+ }
*init_flagsp = renv->init_flags;
}
- /* Discard our lock. */
- 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.
@@ -349,15 +313,17 @@ creation:
F_SET(infop, REGION_CREATE);
/*
- * Allocate room for 100 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.
+ * Allocate room for REGION structures plus overhead.
*
- * Encryption passwds are stored in the env region. Add that in too.
+ * XXX
+ * Overhead is so high because encryption passwds are stored in the
+ * base environment region, as are replication vote arrays. This is
+ * a bug, not a feature, replication needs its own region.
*/
memset(&tregion, 0, sizeof(tregion));
- tregion.size = (roff_t)(100 * sizeof(REGION) +
- dbenv->passwd_len + 4096);
+ nregions = dbenv->mp_ncache + 10;
+ tregion.size =
+ (roff_t)(nregions * sizeof(REGION) + dbenv->passwd_len + 16 * 1024);
tregion.segid = INVALID_REGION_SEGID;
if ((ret = __os_r_attach(dbenv, infop, &tregion)) != 0)
goto err;
@@ -391,17 +357,25 @@ creation:
__db_shalloc_init(infop, tregion.size - sizeof(REGENV));
/*
- * Initialize the rest of the REGENV structure, except for the magic
- * number which validates the file/environment.
+ * Initialize the rest of the REGENV structure. (Don't set the magic
+ * number to the correct value, that would validate the environment).
*/
renv = infop->primary;
- renv->envpanic = 0;
+ renv->magic = 0;
+ renv->panic = 0;
+
+ (void)db_version(&majver, &minver, &patchver);
+ renv->majver = (u_int32_t)majver;
+ renv->minver = (u_int32_t)minver;
+ renv->patchver = (u_int32_t)patchver;
+
+ (void)time(&renv->timestamp);
__os_unique_id(dbenv, &renv->envid);
- (void)db_version(&renv->majver, &renv->minver, &renv->patch);
- SH_LIST_INIT(&renv->regionq);
+
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_ENV_REGION, 0, &renv->mtx_regenv)) != 0)
+ goto err;
renv->refcnt = 1;
- renv->cipher_off = INVALID_ROFF;
- renv->rep_off = INVALID_ROFF;
/*
* Initialize init_flags to store the flags that any other environment
@@ -410,27 +384,27 @@ creation:
renv->init_flags = (init_flagsp == NULL) ? 0 : *init_flagsp;
/*
- * Lock the environment.
- *
- * Check the lock call return. This is the first lock we initialize
- * and acquire, and we have to know if it fails. (It CAN fail, e.g.,
- * SunOS, when using fcntl(2) for locking and using an in-memory
- * filesystem as the database home. But you knew that, I'm sure -- it
- * probably wasn't even worth mentioning.)
+ * Set up the region array. We use an array rather than a linked list
+ * as we have to traverse this list after failure in some cases, and
+ * we don't want to infinitely loop should the application fail while
+ * we're manipulating the list.
*/
- 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));
+ renv->region_cnt = nregions;
+ if ((ret =
+ __db_shalloc(infop, nregions * sizeof(REGION), 0, &rp)) != 0) {
+ __db_err(
+ dbenv, ret, "unable to create new master region array");
goto err;
}
+ renv->region_off = R_OFFSET(infop, rp);
+ for (i = 0; i < nregions; ++i, ++rp)
+ rp->id = INVALID_REGION_ID;
- if (!F_ISSET(&renv->mutex, MUTEX_IGNORE) &&
- (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;
- }
+ renv->cipher_off = INVALID_ROFF;
+
+ renv->rep_off = INVALID_ROFF;
+ renv->flags = 0;
+ renv->op_timestamp = renv->rep_timestamp = 0;
/*
* Get the underlying REGION structure for this environment. Note,
@@ -439,8 +413,7 @@ creation:
* the REGION structure.
*/
if ((ret = __db_des_get(dbenv, infop, infop, &rp)) != 0) {
-find_err: __db_err(dbenv,
- "%s: unable to find environment", infop->name);
+find_err: __db_errx(dbenv, "%s: unable to find environment", infop->name);
if (ret == 0)
ret = EINVAL;
goto err;
@@ -467,32 +440,25 @@ find_err: __db_err(dbenv,
ref.segid = tregion.segid;
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));
+ __db_err(dbenv, ret,
+ "%s: unable to write out public environment ID",
+ infop->name);
goto err;
}
}
+#ifndef HAVE_MUTEX_FCNTL
/*
- * If not doing thread locking, we need to save the file handle for
- * fcntl(2) locking. Otherwise, discard the handle, we no longer
- * need it, and the less contact between the buffer cache and the VM,
- * the better.
+ * If we're not doing fcntl locking, we can close the file handle. We
+ * no longer need it and the less contact between the buffer cache and
+ * the VM, the better.
*/
-#if defined(HAVE_MUTEX_THREADS)
if (dbenv->lockfhp != NULL) {
(void)__os_closehandle(dbenv, dbenv->lockfhp);
dbenv->lockfhp = NULL;
}
#endif
- /* Validate the file. */
- renv->magic = DB_REGION_MAGIC;
-
- /* Discard our lock. */
- MUTEX_UNLOCK(dbenv, &renv->mutex);
-
/* Everything looks good, we're done. */
dbenv->reginfo = infop;
return (0);
@@ -529,7 +495,7 @@ retry: /* Close any open file handle. */
/* If we had a temporary error, wait awhile and try again. */
if (ret == 0) {
if (++retry_cnt > 3) {
- __db_err(dbenv, "unable to join the environment");
+ __db_errx(dbenv, "unable to join the environment");
ret = EAGAIN;
} else {
__os_sleep(dbenv, retry_cnt * 3, 0);
@@ -541,6 +507,35 @@ retry: /* Close any open file handle. */
}
/*
+ * __db_e_golive --
+ * Turn on the created environment.
+ *
+ * PUBLIC: int __db_e_golive __P((DB_ENV *));
+ */
+int
+__db_e_golive(dbenv)
+ DB_ENV *dbenv;
+{
+ REGENV *renv;
+ REGINFO *infop;
+
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+
+ /* If we didn't create the region, there's no need for further work. */
+ if (!F_ISSET(infop, REGION_CREATE))
+ return (0);
+
+ /*
+ * Validate the file. All other threads of control are waiting
+ * on this value to be written -- "Let slip the hounds of war!"
+ */
+ renv->magic = DB_REGION_MAGIC;
+
+ return (0);
+}
+
+/*
* __db_e_detach --
* Detach from the environment.
*
@@ -553,81 +548,97 @@ __db_e_detach(dbenv, destroy)
{
REGENV *renv;
REGINFO *infop;
+ REGION rp;
+ int ret, t_ret;
infop = dbenv->reginfo;
renv = infop->primary;
+ ret = 0;
if (F_ISSET(dbenv, DB_ENV_PRIVATE))
destroy = 1;
- /* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex);
-
/* Decrement the reference count. */
- if (renv->refcnt == 0) {
- __db_err(dbenv,
- "region %lu (environment): reference count went negative",
- (u_long)infop->rp->id);
- } else
+ MUTEX_LOCK(dbenv, renv->mtx_regenv);
+ if (renv->refcnt == 0)
+ __db_errx(dbenv, "environment reference count went negative");
+ else
--renv->refcnt;
-
- /* Release the lock. */
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ MUTEX_UNLOCK(dbenv, renv->mtx_regenv);
/* Close the locking file handle. */
if (dbenv->lockfhp != NULL) {
- (void)__os_closehandle(dbenv, dbenv->lockfhp);
+ if ((t_ret =
+ __os_closehandle(dbenv, dbenv->lockfhp)) != 0 && ret == 0)
+ ret = t_ret;
dbenv->lockfhp = NULL;
}
/*
- * If we are destroying the environment, destroy any system resources
- * the crypto and replication systems may have acquired and put in the
- * main region.
+ * Release the region, and kill our reference.
*/
if (destroy) {
#ifdef HAVE_CRYPTO
- (void)__crypto_region_destroy(dbenv);
+ /*
+ * Destroy any system resources the crypto subsystem may have
+ * acquired.
+ */
+ if ((t_ret = __crypto_region_destroy(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
#endif
- (void)__rep_region_destroy(dbenv);
+ /*
+ * Destroy any system resources the replication subsystem may
+ * have acquired.
+ */
+ if ((t_ret = __rep_region_destroy(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /*
+ * Free the REGION array.
+ *
+ * The actual underlying region structure is allocated from the
+ * primary shared region, and we're about to free it. Save a
+ * copy on our stack for the REGINFO to reference when it calls
+ * down into the OS layer to release the shared memory segment.
+ */
+ rp = *infop->rp;
+ infop->rp = &rp;
+
+ if (renv->region_off != INVALID_ROFF)
+ __db_shalloc_free(
+ infop, R_ADDR(infop, renv->region_off));
+
+ /* Discard any mutex resources we may have acquired. */
+ if ((t_ret =
+ __mutex_free(dbenv, &renv->mtx_regenv)) != 0 && ret == 0)
+ ret = t_ret;
}
/*
- * Release the region, and kill our reference.
+ * Set the DB_ENV->reginfo field to NULL. First, DB_ENV->remove calls
+ * __env_remove to do the region remove, and __envremove attached and
+ * then detaches from the region. We don't 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.
*
- * If we are destroying the environment, destroy any system resources
- * backing the mutex.
+ * Second, DB code uses DB_ENV->reginfo to decide if it's OK to read
+ * the underlying region. We're about to destroy what it references,
+ * so it needs to be cleared.
*/
- if (destroy) {
- (void)__db_mutex_destroy(&renv->mutex);
- (void)__db_mutex_destroy(&infop->rp->mutex);
-
- /*
- * Only free the REGION structure itself if it was separately
- * allocated from the heap.
- */
- if (F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, infop->rp);
- }
+ dbenv->reginfo = NULL;
/* Reset the addr value that we "corrected" above. */
infop->addr = infop->primary;
- (void)__os_r_detach(dbenv, infop, destroy);
+ if ((t_ret = __os_r_detach(dbenv, infop, destroy)) != 0 && ret == 0)
+ ret = t_ret;
if (infop->name != NULL)
__os_free(dbenv, infop->name);
- /*
- * 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 DB_ENV->remove with a non-NULL DB_ENV->reginfo
- * field because it will attempt to detach again as part of its cleanup.
- */
- __os_free(dbenv, dbenv->reginfo);
- dbenv->reginfo = NULL;
+ /* Discard the DB_ENV->reginfo field's memory. */
+ __os_free(dbenv, infop);
- return (0);
+ return (ret);
}
/*
@@ -644,33 +655,39 @@ __db_e_remove(dbenv, flags)
REGENV *renv;
REGINFO *infop, reginfo;
REGION *rp;
- u_int32_t db_env_reset;
- int force, ret;
+ u_int32_t db_env_reset, i;
+ int ret;
+
+ db_env_reset = F_ISSET(dbenv, DB_ENV_NOLOCKING | DB_ENV_NOPANIC);
- 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
* crash), and removing everything that needs removing. What we
* do is:
- * 1. Connect to the environment (so it better be OK).
+ * 1. Connect to the environment.
* 2. If the environment is in use (reference count is non-zero),
* return EBUSY.
- * 3. Overwrite the magic number so that any threads of control
- * attempting to connect will backoff and retry.
- * 4. Walk the list of regions. Connect to each region and then
+ * 3. Panic it and overwrite the magic number so any threads of
+ * control attempting to connect (or racing with us) backoff
+ * and retry or just die.
+ * 4. Walk the array of regions. Connect to each region and then
* disconnect with the destroy flag set. This shouldn't cause
* any problems, even if the region is corrupted, because we
- * should never be looking inside the region.
+ * never look inside the region (with the single exception of
+ * mutex regions on systems where we have to return resources
+ * to the underlying system).
* 5. Walk the list of files in the directory, unlinking any
* files that match a region name. Unlink the environment
* file last.
*
* If the force flag is set, we do not acquire any locks during this
* process.
+ *
+ * We're going to panic the environment, so we'll want to ignore that
+ * flag.
*/
- db_env_reset = F_ISSET(dbenv, DB_ENV_NOLOCKING | DB_ENV_NOPANIC);
- if (force)
+ if (LF_ISSET(DB_FORCE))
F_SET(dbenv, DB_ENV_NOLOCKING);
F_SET(dbenv, DB_ENV_NOPANIC);
@@ -682,7 +699,7 @@ __db_e_remove(dbenv, flags)
* probably isn't important.
*/
ret = 0;
- if (force)
+ if (LF_ISSET(DB_FORCE))
goto remfiles;
goto done;
}
@@ -691,14 +708,14 @@ __db_e_remove(dbenv, flags)
renv = infop->primary;
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex);
+ MUTEX_LOCK(dbenv, renv->mtx_regenv);
/*
* 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) {
+ if (renv->refcnt == 1 || renv->panic == 1 || LF_ISSET(DB_FORCE)) {
/*
* Set the panic flag and overwrite the magic number.
*
@@ -706,42 +723,50 @@ __db_e_remove(dbenv, flags)
* From this point on, there's no going back, we pretty
* much ignore errors, and just whack on whatever we can.
*/
- renv->envpanic = 1;
renv->magic = 0;
+ renv->panic = 1;
/*
- * Unlock the environment. We should no longer need the lock
- * because we've poisoned the pool, but we can't continue to
- * hold it either, because other routines may want it.
+ * Unlock the environment -- nobody should need this lock
+ * because we've poisoned the pool.
*/
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ MUTEX_UNLOCK(dbenv, renv->mtx_regenv);
- /*
- * Attach to each sub-region and destroy it.
- *
- * !!!
- * The REGION_CREATE_OK flag is set for Windows/95 -- regions
- * are zero'd out when the last reference to the region goes
- * away, in which case the underlying OS region code requires
- * callers be prepared to create the region in order to join it.
- */
- memset(&reginfo, 0, sizeof(reginfo));
- 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)
+ /* Attach to each sub-region and destroy it. */
+ for (rp = R_ADDR(infop, renv->region_off),
+ i = 0; i < renv->region_cnt; ++i, ++rp) {
+ if (rp->id == INVALID_REGION_ID ||
+ rp->type == REGION_TYPE_ENV)
continue;
+ /*
+ * !!!
+ * The REGION_CREATE_OK flag is set for Windows/95 --
+ * regions are zero'd out when the last reference to
+ * the region goes away, in which case the underlying
+ * OS region code requires callers be prepared to
+ * create the region in order to join it.
+ */
+ memset(&reginfo, 0, sizeof(reginfo));
+ reginfo.id = rp->id;
+ reginfo.flags = REGION_CREATE_OK;
/*
* 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 (__db_r_attach(dbenv, &reginfo, 0) == 0) {
- R_UNLOCK(dbenv, &reginfo);
- (void)__db_r_detach(dbenv, &reginfo, 1);
- }
+ if (__db_r_attach(dbenv, &reginfo, 0) != 0)
+ continue;
+
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ /*
+ * If destroying the mutex region, return any system
+ * resources to the system.
+ */
+ if (reginfo.type == REGION_TYPE_MUTEX)
+ __mutex_resource_return(dbenv, &reginfo);
+#endif
+ (void)__db_r_detach(dbenv, &reginfo, 1);
}
/* Destroy the environment's region. */
@@ -751,7 +776,7 @@ __db_e_remove(dbenv, flags)
remfiles: (void)__db_e_remfile(dbenv);
} else {
/* Unlock the environment. */
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ MUTEX_UNLOCK(dbenv, renv->mtx_regenv);
/* Discard the environment. */
(void)__db_e_detach(dbenv, 0);
@@ -797,7 +822,7 @@ __db_e_remfile(dbenv)
/* Get the list of file names. */
if ((ret = __os_dirlist(dbenv, dir, &names, &fcnt)) != 0)
- __db_err(dbenv, "%s: %s", dir, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", dir);
/* Restore the path, and free it. */
*p = saved_char;
@@ -819,8 +844,12 @@ __db_e_remfile(dbenv)
if (strncmp(names[cnt], "__dbq.", 6) == 0)
continue;
+ /* Skip registry files. */
+ if (strncmp(names[cnt], "__db.register", 13) == 0)
+ continue;
+
/* Skip replication files. */
- if (strncmp(names[cnt], "__db.rep.", 9) == 0)
+ if (strncmp(names[cnt], "__db.rep", 8) == 0)
continue;
/*
@@ -846,7 +875,7 @@ __db_e_remfile(dbenv)
*/
if (F_ISSET(dbenv, DB_ENV_OVERWRITE) &&
strlen(names[cnt]) == DB_REGION_NAME_LENGTH)
- (void)__db_overwrite(dbenv, path);
+ (void)__db_file_multi_write(dbenv, path);
(void)__os_unlink(dbenv, path);
__os_free(dbenv, path);
}
@@ -856,7 +885,7 @@ __db_e_remfile(dbenv)
if (__db_appname(dbenv,
DB_APP_NONE, names[lastrm], 0, NULL, &path) == 0) {
if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
- (void)__db_overwrite(dbenv, path);
+ (void)__db_file_multi_write(dbenv, path);
(void)__os_unlink(dbenv, path);
__os_free(dbenv, path);
}
@@ -877,31 +906,26 @@ __db_r_attach(dbenv, infop, size)
REGINFO *infop;
size_t size;
{
- REGENV *renv;
REGION *rp;
int ret;
char buf[sizeof(DB_REGION_FMT) + 20];
- renv = ((REGINFO *)dbenv->reginfo)->primary;
-
- /* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex);
-
/*
* 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);
+ if ((ret = __db_des_get(dbenv, dbenv->reginfo, infop, &rp)) != 0)
return (ret);
- }
infop->dbenv = dbenv;
infop->rp = rp;
infop->type = rp->type;
infop->id = rp->id;
- /* If we're creating the region, set the desired size. */
+ /*
+ * __db_des_get may have created the region and reset the create
+ * flag. If we're creating the region, set the desired size.
+ */
if (F_ISSET(infop, REGION_CREATE))
rp->size = (roff_t)size;
@@ -932,15 +956,6 @@ __db_r_attach(dbenv, infop, size)
if (F_ISSET(infop, REGION_CREATE))
__db_shalloc_init(infop, 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);
- MUTEX_UNLOCK(dbenv, &renv->mutex);
- }
-
return (0);
err: /* Discard the underlying region. */
@@ -952,13 +967,10 @@ err: /* Discard the underlying region. */
/* Discard the REGION structure if we created it. */
if (F_ISSET(infop, REGION_CREATE)) {
- (void)__db_des_destroy(dbenv, rp, 1);
+ __db_des_destroy(dbenv, rp);
F_CLR(infop, REGION_CREATE);
}
- /* Release the environment lock. */
- MUTEX_UNLOCK(dbenv, &renv->mutex);
-
return (ret);
}
@@ -974,48 +986,28 @@ __db_r_detach(dbenv, infop, destroy)
REGINFO *infop;
int destroy;
{
- REGENV *renv;
REGION *rp;
- int ret, t_ret;
+ int ret;
- 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);
-
- /* Acquire the lock for the REGION. */
- MUTEX_LOCK(dbenv, &rp->mutex);
-
/*
- * We need to call destroy on per-subsystem info before we free the
- * memory associated with the region.
+ * When discarding the regions as we shut down a database environment,
+ * discard any allocated shared memory segments. This is the last time
+ * we use them, and db_region_destroy is the last region-specific call
+ * we make.
*/
- if (destroy)
- __db_region_destroy(dbenv, infop);
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE) && infop->primary != NULL)
+ __db_shalloc_free(infop, infop->primary);
/* Detach from the underlying OS region. */
ret = __os_r_detach(dbenv, infop, destroy);
- /* Release the REGION lock. */
- MUTEX_UNLOCK(dbenv, &rp->mutex);
-
- /*
- * 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, F_ISSET(dbenv, DB_ENV_PRIVATE))) != 0) && ret == 0)
- ret = t_ret;
-
- /* Release the environment lock. */
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ /* If we destroyed the region, discard the REGION structure. */
+ if (destroy)
+ __db_des_destroy(dbenv, rp);
/* Destroy the structure. */
if (infop->name != NULL)
@@ -1036,14 +1028,9 @@ __db_des_get(dbenv, env_infop, infop, rpp)
REGION **rpp;
{
REGENV *renv;
- REGION *rp, *first_type;
- u_int32_t maxid;
- int ret;
+ REGION *rp, *empty_slot, *first_type;
+ u_int32_t i, maxid;
- /*
- * !!!
- * Called with the environment already locked.
- */
*rpp = NULL;
renv = env_infop->primary;
@@ -1054,14 +1041,20 @@ __db_des_get(dbenv, env_infop, infop, rpp)
* return the "primary" region, that is, the first region that was
* created of this type.
*
- * Track the maximum region ID so we can allocate a new region,
- * note that we have to start at 1 because the primary environment
- * uses ID == 1.
+ * Track the first empty slot and maximum region ID for new region
+ * allocation.
+ *
+ * MaxID starts at REGION_ID_ENV, the ID of the primary environment.
*/
maxid = REGION_ID_ENV;
- for (first_type = NULL,
- rp = SH_LIST_FIRST(&renv->regionq, __db_region);
- rp != NULL; rp = SH_LIST_NEXT(rp, q, __db_region)) {
+ empty_slot = first_type = NULL;
+ for (rp = R_ADDR(env_infop, renv->region_off),
+ i = 0; i < renv->region_cnt; ++i, ++rp) {
+ if (rp->id == INVALID_REGION_ID) {
+ if (empty_slot == NULL)
+ empty_slot = rp;
+ continue;
+ }
if (infop->id != INVALID_REGION_ID) {
if (infop->id == rp->id)
break;
@@ -1075,51 +1068,48 @@ __db_des_get(dbenv, env_infop, infop, rpp)
if (rp->id > maxid)
maxid = rp->id;
}
- if (rp == NULL)
+
+ /* If we found a matching ID (or a matching type), return it. */
+ if (i >= renv->region_cnt)
rp = first_type;
+ if (rp != NULL) {
+ *rpp = rp;
+ return (0);
+ }
/*
- * If we didn't find a region and we can't create the region, fail.
- * The caller generates any error message.
+ * If we didn't find a region and we don't have permission to create
+ * the region, fail. The caller generates any error message.
*/
- if (rp == NULL && !F_ISSET(infop, REGION_CREATE_OK))
+ if (!F_ISSET(infop, REGION_CREATE_OK))
return (ENOENT);
/*
- * If we didn't find a region, create and initialize a REGION structure
- * for the caller. If id was set, use that value, otherwise we use the
- * next available ID.
+ * If we didn't find a region and don't have room to create the region
+ * fail with an error message, there's a sizing problem.
*/
- if (rp == NULL) {
- if ((ret = __db_shalloc(env_infop,
- sizeof(REGION), MUTEX_ALIGN, &rp)) != 0) {
- __db_err(dbenv,
- "unable to create new master region entry: %s",
- db_strerror(ret));
- return (ret);
- }
+ if (empty_slot == NULL) {
+ __db_errx(dbenv, "no room remaining for additional REGIONs");
+ return (ENOENT);
+ }
- /* Initialize the region. */
- memset(rp, 0, sizeof(*rp));
- if ((ret = __db_mutex_setup(dbenv, env_infop, &rp->mutex,
- MUTEX_NO_RECORD | MUTEX_NO_RLOCK)) != 0) {
- __db_shalloc_free(env_infop, rp);
- return (ret);
- }
- rp->segid = INVALID_REGION_SEGID;
+ /*
+ * Initialize a REGION structure for the caller. If id was set, use
+ * that value, otherwise we use the next available ID.
+ */
+ memset(empty_slot, 0, sizeof(REGION));
+ empty_slot->segid = INVALID_REGION_SEGID;
- /*
- * Set the type and ID; if no region ID was specified,
- * allocate one.
- */
- rp->type = infop->type;
- rp->id = infop->id == INVALID_REGION_ID ? maxid + 1 : infop->id;
+ /*
+ * Set the type and ID; if no region ID was specified,
+ * allocate one.
+ */
+ empty_slot->type = infop->type;
+ empty_slot->id = infop->id == INVALID_REGION_ID ? maxid + 1 : infop->id;
- SH_LIST_INSERT_HEAD(&renv->regionq, rp, q, __db_region);
- F_SET(infop, REGION_CREATE);
- }
+ F_SET(infop, REGION_CREATE);
- *rpp = rp;
+ *rpp = empty_slot;
return (0);
}
@@ -1127,41 +1117,14 @@ __db_des_get(dbenv, env_infop, infop, rpp)
* __db_des_destroy --
* Destroy a reference to a REGION.
*/
-static int
-__db_des_destroy(dbenv, rp, shmem_safe)
+static void
+__db_des_destroy(dbenv, rp)
DB_ENV *dbenv;
REGION *rp;
- int shmem_safe;
{
- REGINFO *infop;
-
- /*
- * !!!
- * Called with the environment already locked.
- */
- infop = dbenv->reginfo;
-
- /*
- * 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.
- */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- (void)__db_mutex_destroy(&rp->mutex);
-#else
- if (shmem_safe)
- (void)__db_mutex_destroy(&rp->mutex);
-#endif
- if (shmem_safe) {
- SH_LIST_REMOVE(rp, q, __db_region);
- __db_shalloc_free(infop, rp);
- }
+ COMPQUIET(dbenv, NULL);
- return (0);
+ rp->id = INVALID_REGION_ID;
}
/*
@@ -1193,51 +1156,21 @@ __db_faultmem(dbenv, addr, size, created)
* system can't cheat. If we're just joining the region, we can
* only read the value and try to confuse the compiler sufficiently
* that it doesn't figure out that we're never really using it.
+ *
+ * Touch every page (assuming pages are 512B, the smallest VM page
+ * size used in any general purpose processor).
*/
ret = 0;
if (F_ISSET(dbenv, DB_ENV_REGION_INIT)) {
if (created)
- for (p = addr, t = (u_int8_t *)addr + size;
- p < t; p += OS_VMPAGESIZE)
+ for (p = addr,
+ t = (u_int8_t *)addr + size; p < t; p += 512)
p[0] = 0xdb;
else
- for (p = addr, t = (u_int8_t *)addr + size;
- p < t; p += OS_VMPAGESIZE)
+ for (p = addr,
+ t = (u_int8_t *)addr + size; p < t; p += 512)
ret |= p[0];
}
return (ret);
}
-
-/*
- * __db_region_destroy --
- * Destroy per-subsystem region information.
- * Called with the region already locked.
- */
-static void
-__db_region_destroy(dbenv, infop)
- DB_ENV *dbenv;
- REGINFO *infop;
-{
- switch (infop->type) {
- case REGION_TYPE_LOCK:
- __lock_region_destroy(dbenv, infop);
- break;
- case REGION_TYPE_LOG:
- __log_region_destroy(dbenv, infop);
- break;
- case REGION_TYPE_MPOOL:
- __memp_region_destroy(dbenv, infop);
- break;
- case REGION_TYPE_TXN:
- __txn_region_destroy(dbenv, infop);
- break;
- case REGION_TYPE_ENV:
- case REGION_TYPE_MUTEX:
- break;
- case INVALID_REGION_TYPE:
- default:
- DB_ASSERT(0);
- break;
- }
-}
diff --git a/db/env/env_register.c b/db/env/env_register.c
new file mode 100644
index 000000000..1936da9f2
--- /dev/null
+++ b/db/env/env_register.c
@@ -0,0 +1,422 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: env_register.c,v 1.30 2006/09/09 14:28:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+#define REGISTER_FILE "__db.register"
+
+#define PID_EMPTY "X 0\n" /* Unused PID entry */
+#define PID_FMT "%24lu\n" /* PID entry format */
+ /* Unused PID test */
+#define PID_ISEMPTY(p) (memcmp(p, PID_EMPTY, PID_LEN) == 0)
+#define PID_LEN (25) /* PID entry length */
+
+#define REGISTRY_LOCK(dbenv, pos, nowait) \
+ __os_fdlock(dbenv, (dbenv)->registry, (off_t)(pos), 1, nowait)
+#define REGISTRY_UNLOCK(dbenv, pos) \
+ __os_fdlock(dbenv, (dbenv)->registry, (off_t)(pos), 0, 0)
+#define REGISTRY_EXCL_LOCK(dbenv, nowait) \
+ REGISTRY_LOCK(dbenv, 1, nowait)
+#define REGISTRY_EXCL_UNLOCK(dbenv) \
+ REGISTRY_UNLOCK(dbenv, 1)
+
+static int __envreg_add __P((DB_ENV *, int *));
+
+/*
+ * Support for portable, multi-process database environment locking, based on
+ * the Subversion SR (#11511).
+ *
+ * The registry feature is configured by specifying the DB_REGISTER flag to the
+ * DbEnv.open method. If DB_REGISTER is specified, DB opens the registry file
+ * in the database environment home directory. The registry file is formatted
+ * as follows:
+ *
+ * 12345 # process ID slot 1
+ * X # empty slot
+ * 12346 # process ID slot 2
+ * X # empty slot
+ * 12347 # process ID slot 3
+ * 12348 # process ID slot 4
+ * X 12349 # empty slot
+ * X # empty slot
+ *
+ * All lines are fixed-length. All lines are process ID slots. Empty slots
+ * are marked with leading non-digit characters.
+ *
+ * To modify the file, you get an exclusive lock on the first byte of the file.
+ *
+ * While holding any DbEnv handle, each process has an exclusive lock on the
+ * first byte of a process ID slot. There is a restriction on having more
+ * than one DbEnv handle open at a time, because Berkeley DB uses per-process
+ * locking to implement this feature, that is, a process may never have more
+ * than a single slot locked.
+ *
+ * This work requires that if a process dies or the system crashes, locks held
+ * by the dying processes will be dropped. (We can't use system shared
+ * memory-backed or filesystem-backed locks because they're persistent when a
+ * process dies.) On POSIX systems, we use fcntl(2) locks; on Win32 we have
+ * LockFileEx/UnlockFile, except for Win/9X and Win/ME which have to loop on
+ * Lockfile/UnlockFile.
+ *
+ * We could implement the same solution with flock locking instead of fcntl,
+ * but flock would require a separate file for each process of control (and
+ * probably each DbEnv handle) in the database environment, which is fairly
+ * ugly.
+ *
+ * Whenever a process opens a new DbEnv handle, it walks the registry file and
+ * verifies it CANNOT acquire the lock for any non-empty slot. If a lock for
+ * a non-empty slot is available, we know a process died holding an open handle,
+ * and recovery needs to be run.
+ *
+ * It's possible to get corruption in the registry file. If a write system
+ * call fails after partially completing, there can be corrupted entries in
+ * the registry file, or a partial entry at the end of the file. This is OK.
+ * A corrupted entry will be flagged as a non-empty line during the registry
+ * file walk. Since the line was corrupted by process failure, no process will
+ * hold a lock on the slot, which will lead to recovery being run.
+ *
+ * There can still be processes running in the environment when we recover it,
+ * and, in fact, there can still be processes running in the old environment
+ * after we're up and running in a new one. This is safe because performing
+ * recovery panics (and removes) the existing environment, so the window of
+ * vulnerability is small. Further, we check the panic flag in the DB API
+ * methods, when waking from spinning on a mutex, and whenever we're about to
+ * write to disk). The only window of corruption is if the write check of the
+ * panic were to complete, the region subsequently be recovered, and then the
+ * write continues. That's very, very unlikely to happen. This vulnerability
+ * already exists in Berkeley DB, too, the registry code doesn't make it any
+ * worse than it already is.
+ */
+/*
+ * __envreg_register --
+ * Register a DB_ENV handle.
+ *
+ * PUBLIC: int __envreg_register __P((DB_ENV *, int *));
+ */
+int
+__envreg_register(dbenv, need_recoveryp)
+ DB_ENV *dbenv;
+ int *need_recoveryp;
+{
+ pid_t pid;
+ u_int32_t bytes, mbytes;
+ int ret;
+ char *pp;
+
+ *need_recoveryp = 0;
+ dbenv->thread_id(dbenv, &pid, NULL);
+ pp = NULL;
+
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv, "%lu: register environment", (u_long)pid);
+
+ /* Build the path name and open the registry file. */
+ if ((ret =
+ __db_appname(dbenv, DB_APP_NONE, REGISTER_FILE, 0, NULL, &pp)) != 0)
+ goto err;
+ if ((ret = __os_open(dbenv, pp,
+ DB_OSO_CREATE, __db_omode("rw-rw----"), &dbenv->registry)) != 0)
+ goto err;
+
+ /*
+ * Wait for an exclusive lock on the file.
+ *
+ * !!!
+ * We're locking bytes that don't yet exist, but that's OK as far as
+ * I know.
+ */
+ if ((ret = REGISTRY_EXCL_LOCK(dbenv, 0)) != 0)
+ goto err;
+
+ /*
+ * If the file size is 0, initialize the file.
+ *
+ * Run recovery if we create the file, that means we can clean up the
+ * system by removing the registry file and restarting the application.
+ */
+ if ((ret = __os_ioinfo(
+ dbenv, pp, dbenv->registry, &mbytes, &bytes, NULL)) != 0)
+ goto err;
+ if (mbytes == 0 && bytes == 0) {
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv, "%lu: creating %s", (u_long)pid, pp);
+ *need_recoveryp = 1;
+ }
+
+ /* Register this process. */
+ if ((ret = __envreg_add(dbenv, need_recoveryp)) != 0)
+ goto err;
+
+ /*
+ * Release our exclusive lock if we don't need to run recovery. If
+ * we need to run recovery, DB_ENV->open will call back into register
+ * code once recovery has completed.
+ */
+ if (*need_recoveryp == 0 && (ret = REGISTRY_EXCL_UNLOCK(dbenv)) != 0)
+ goto err;
+
+ if (0) {
+err: *need_recoveryp = 0;
+
+ /*
+ * !!!
+ * Closing the file handle must release all of our locks.
+ */
+ if (dbenv->registry != NULL)
+ (void)__os_closehandle(dbenv, dbenv->registry);
+ dbenv->registry = NULL;
+ }
+
+ if (pp != NULL)
+ __os_free(dbenv, pp);
+
+ return (ret);
+}
+
+/*
+ * __envreg_add --
+ * Add the process' pid to the register.
+ */
+static int
+__envreg_add(dbenv, need_recoveryp)
+ DB_ENV *dbenv;
+ int *need_recoveryp;
+{
+ pid_t pid;
+ off_t end, pos;
+ size_t nr, nw;
+ u_int lcnt;
+ u_int32_t bytes, mbytes;
+ int need_recovery, ret;
+ char *p, buf[PID_LEN + 10], pid_buf[PID_LEN + 10];
+
+ need_recovery = 0;
+ COMPQUIET(p, NULL);
+
+ /* Get a copy of our process ID. */
+ dbenv->thread_id(dbenv, &pid, NULL);
+ snprintf(pid_buf, sizeof(pid_buf), PID_FMT, (u_long)pid);
+
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv, "===== %lu: before add", (u_long)pid);
+
+ /*
+ * Read the file. Skip empty slots, and check that a lock is held
+ * for any allocated slots. An allocated slot which we can lock
+ * indicates a process died holding a handle and recovery needs to
+ * be run.
+ */
+ for (lcnt = 0;; ++lcnt) {
+ if ((ret = __os_read(
+ dbenv, dbenv->registry, buf, PID_LEN, &nr)) != 0)
+ return (ret);
+ if (nr == 0)
+ break;
+
+ /*
+ * A partial record at the end of the file is possible if a
+ * previously un-registered process was interrupted while
+ * registering.
+ */
+ if (nr != PID_LEN) {
+ need_recovery = 1;
+ break;
+ }
+
+ if (PID_ISEMPTY(buf)) {
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv, "%02u: EMPTY", lcnt);
+ continue;
+ }
+
+ /*
+ * !!!
+ * DB_REGISTER is implemented using per-process locking, only
+ * a single DB_ENV handle may be open per process. Enforce
+ * that restriction.
+ */
+ if (memcmp(buf, pid_buf, PID_LEN) == 0) {
+ __db_errx(dbenv,
+ "DB_REGISTER limits processes to one open DB_ENV handle per environment");
+ return (EINVAL);
+ }
+
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER)) {
+ for (p = buf; *p == ' ';)
+ ++p;
+ buf[nr - 1] = '\0';
+ }
+
+ pos = (off_t)lcnt * PID_LEN;
+ if (REGISTRY_LOCK(dbenv, pos, 1) == 0) {
+ if ((ret = REGISTRY_UNLOCK(dbenv, pos)) != 0)
+ return (ret);
+
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv, "%02u: %s: FAILED", lcnt, p);
+
+ need_recovery = 1;
+ break;
+ } else
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv, "%02u: %s: LOCKED", lcnt, p);
+ }
+
+ /*
+ * If we have to perform recovery...
+ *
+ * Mark all slots empty. Registry ignores empty slots we can't lock,
+ * so it doesn't matter if any of the processes are in the middle of
+ * exiting Berkeley DB -- they'll discard their lock when they exit.
+ */
+ if (need_recovery) {
+ /* Figure out how big the file is. */
+ if ((ret = __os_ioinfo(
+ dbenv, NULL, dbenv->registry, &mbytes, &bytes, NULL)) != 0)
+ return (ret);
+ end = (off_t)mbytes * MEGABYTE + bytes;
+
+ /*
+ * Seek to the beginning of the file and overwrite slots to
+ * the end of the file.
+ *
+ * It's possible for there to be a partial entry at the end of
+ * the file if a process died when trying to register. If so,
+ * correct for it and overwrite it as well.
+ */
+ if ((ret = __os_seek(dbenv, dbenv->registry, 0, 0, 0)) != 0)
+ return (ret);
+ for (lcnt = (u_int)end / PID_LEN +
+ ((u_int)end % PID_LEN == 0 ? 0 : 1); lcnt > 0; --lcnt)
+ if ((ret = __os_write(dbenv,
+ dbenv->registry, PID_EMPTY, PID_LEN, &nw)) != 0)
+ return (ret);
+ }
+
+ /*
+ * Seek to the first process slot and add ourselves to the first empty
+ * slot we can lock.
+ */
+ if ((ret = __os_seek(dbenv, dbenv->registry, 0, 0, 0)) != 0)
+ return (ret);
+ for (lcnt = 0;; ++lcnt) {
+ if ((ret = __os_read(
+ dbenv, dbenv->registry, buf, PID_LEN, &nr)) != 0)
+ return (ret);
+ if (nr == PID_LEN && !PID_ISEMPTY(buf))
+ continue;
+ pos = (off_t)lcnt * PID_LEN;
+ if (REGISTRY_LOCK(dbenv, pos, 1) == 0) {
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv,
+ "%lu: locking slot %02u at offset %lu",
+ (u_long)pid, lcnt, (u_long)pos);
+
+ if ((ret = __os_seek(dbenv,
+ dbenv->registry, 0, 0, (u_int32_t)pos)) != 0 ||
+ (ret = __os_write(dbenv,
+ dbenv->registry, pid_buf, PID_LEN, &nw)) != 0)
+ return (ret);
+ dbenv->registry_off = (u_int32_t)pos;
+ break;
+ }
+ }
+
+ if (need_recovery)
+ *need_recoveryp = 1;
+
+ return (ret);
+}
+
+/*
+ * __envreg_unregister --
+ * Unregister a DB_ENV handle.
+ *
+ * PUBLIC: int __envreg_unregister __P((DB_ENV *, int));
+ */
+int
+__envreg_unregister(dbenv, recovery_failed)
+ DB_ENV *dbenv;
+ int recovery_failed;
+{
+ size_t nw;
+ int ret, t_ret;
+
+ ret = 0;
+
+ /*
+ * If recovery failed, we want to drop our locks and return, but still
+ * make sure any subsequent process doesn't decide everything is just
+ * fine and try to get into the database environment. In the case of
+ * an error, discard our locks, but leave our slot filled-in.
+ */
+ if (recovery_failed)
+ goto err;
+
+ /*
+ * Why isn't an exclusive lock necessary to discard a DB_ENV handle?
+ *
+ * We mark our process ID slot empty before we discard the process slot
+ * lock, and threads of control reviewing the register file ignore any
+ * slots which they can't lock.
+ */
+ if ((ret = __os_seek(dbenv,
+ dbenv->registry, 0, 0, dbenv->registry_off)) != 0 ||
+ (ret = __os_write(
+ dbenv, dbenv->registry, PID_EMPTY, PID_LEN, &nw)) != 0)
+ goto err;
+
+ /*
+ * !!!
+ * This code assumes that closing the file descriptor discards all
+ * held locks.
+ *
+ * !!!
+ * There is an ordering problem here -- in the case of a process that
+ * failed in recovery, we're unlocking both the exclusive lock and our
+ * slot lock. If the OS unlocked the exclusive lock and then allowed
+ * another thread of control to acquire the exclusive lock before also
+ * also releasing our slot lock, we could race. That can't happen, I
+ * don't think.
+ */
+err: if ((t_ret =
+ __os_closehandle(dbenv, dbenv->registry)) != 0 && ret == 0)
+ ret = t_ret;
+
+ dbenv->registry = NULL;
+ return (ret);
+}
+
+/*
+ * __envreg_xunlock --
+ * Discard the exclusive lock held by the DB_ENV handle.
+ *
+ * PUBLIC: int __envreg_xunlock __P((DB_ENV *));
+ */
+int
+__envreg_xunlock(dbenv)
+ DB_ENV *dbenv;
+{
+ pid_t pid;
+ int ret;
+
+ dbenv->thread_id(dbenv, &pid, NULL);
+
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
+ __db_msg(dbenv,
+ "%lu: recovery completed, unlocking", (u_long)pid);
+
+ if ((ret = REGISTRY_EXCL_UNLOCK(dbenv)) == 0)
+ return (ret);
+
+ __db_err(dbenv, ret, "%s: exclusive file unlock", REGISTER_FILE);
+ return (__db_panic(dbenv, ret));
+}
diff --git a/db/env/env_stat.c b/db/env/env_stat.c
index c9ab7a112..241a1c5cd 100644
--- a/db/env/env_stat.c
+++ b/db/env/env_stat.c
@@ -1,21 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: env_stat.c,v 1.21 2004/10/29 17:37:23 bostic Exp $
+ * $Id: env_stat.c,v 12.36 2006/09/08 19:25:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#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"
@@ -23,23 +18,27 @@
#include "dbinc/txn.h"
#ifdef HAVE_STATISTICS
-static int __dbenv_print_all __P((DB_ENV *, u_int32_t));
-static int __dbenv_print_stats __P((DB_ENV *, u_int32_t));
-static int __dbenv_stat_print __P((DB_ENV *, u_int32_t));
-static const char *__reg_type __P((reg_type_t));
+static int __env_print_all __P((DB_ENV *, u_int32_t));
+static int __env_print_stats __P((DB_ENV *, u_int32_t));
+static int __env_print_threads __P((DB_ENV *));
+static int __env_stat_print __P((DB_ENV *, u_int32_t));
+static char *__env_thread_state_print __P((DB_THREAD_STATE));
+static const char *
+ __reg_type __P((reg_type_t));
/*
- * __dbenv_stat_print_pp --
+ * __env_stat_print_pp --
* DB_ENV->stat_print pre/post processor.
*
- * PUBLIC: int __dbenv_stat_print_pp __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __env_stat_print_pp __P((DB_ENV *, u_int32_t));
*/
int
-__dbenv_stat_print_pp(dbenv, flags)
+__env_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->stat_print");
@@ -48,32 +47,36 @@ __dbenv_stat_print_pp(dbenv, flags)
flags, DB_STAT_ALL | DB_STAT_CLEAR | DB_STAT_SUBSYSTEM)) != 0)
return (ret);
- rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
- ret = __dbenv_stat_print(dbenv, flags);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__env_stat_print(dbenv, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
/*
- * __dbenv_stat_print --
+ * __env_stat_print --
* DB_ENV->stat_print method.
*/
static int
-__dbenv_stat_print(dbenv, flags)
+__env_stat_print(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- DB *dbp;
+ time_t now;
int ret;
+ char time_buf[CTIME_BUFLEN];
+
+ (void)time(&now);
+ __db_msg(dbenv, "%.24s\tLocal time", __db_ctime(&now, time_buf));
- if ((ret = __dbenv_print_stats(dbenv, flags)) != 0)
+ if ((ret = __env_print_stats(dbenv, flags)) != 0)
return (ret);
if (LF_ISSET(DB_STAT_ALL) &&
- (ret = __dbenv_print_all(dbenv, flags)) != 0)
+ (ret = __env_print_all(dbenv, flags)) != 0)
+ return (ret);
+
+ if ((ret = __env_print_threads(dbenv)) != 0)
return (ret);
if (!LF_ISSET(DB_STAT_SUBSYSTEM))
@@ -86,6 +89,10 @@ __dbenv_stat_print(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
if ((ret = __log_stat_print(dbenv, flags)) != 0)
return (ret);
+
+ __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+ if ((ret = __dbreg_stat_print(dbenv, flags)) != 0)
+ return (ret);
}
if (LOCKING_ON(dbenv)) {
@@ -112,33 +119,28 @@ __dbenv_stat_print(dbenv, flags)
return (ret);
}
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (dbp = LIST_FIRST(&dbenv->dblist);
- dbp != NULL; dbp = LIST_NEXT(dbp, dblistlinks)) {
+ if (MUTEX_ON(dbenv)) {
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
- __db_msg(dbenv, "%s%s%s\tDatabase name",
- dbp->fname, dbp->dname == NULL ? "" : "/",
- dbp->dname == NULL ? "" : dbp->dname);
- if ((ret = __db_stat_print(dbp, flags)) != 0)
- break;
+ if ((ret = __mutex_stat_print(dbenv, flags)) != 0)
+ return (ret);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- return (ret);
+ return (0);
}
/*
- * __dbenv_print_stats --
+ * __env_print_stats --
* Display the default environment statistics.
*
*/
static int
-__dbenv_print_stats(dbenv, flags)
+__env_print_stats(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
REGENV *renv;
REGINFO *infop;
+ char time_buf[CTIME_BUFLEN];
infop = dbenv->reginfo;
renv = infop->primary;
@@ -147,24 +149,27 @@ __dbenv_print_stats(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "Default database environment information:");
}
- __db_msg(dbenv, "%d.%d.%d\tEnvironment version",
- renv->majver, renv->minver, renv->patch);
STAT_HEX("Magic number", renv->magic);
- STAT_LONG("Panic value", renv->envpanic);
+ STAT_LONG("Panic value", renv->panic);
+ __db_msg(dbenv, "%d.%d.%d\tEnvironment version",
+ renv->majver, renv->minver, renv->patchver);
+ __db_msg(dbenv,
+ "%.24s\tCreation time", __db_ctime(&renv->timestamp, time_buf));
+ STAT_HEX("Environment ID", renv->envid);
+ __mutex_print_debug_single(dbenv,
+ "Primary region allocation and reference count mutex",
+ renv->mtx_regenv, flags);
STAT_LONG("References", renv->refcnt);
- __db_print_mutex(dbenv, NULL, &renv->mutex,
- "The number of region locks that required waiting", flags);
-
return (0);
}
/*
- * __dbenv_print_all --
+ * __env_print_all --
* Display the debugging environment statistics.
*/
static int
-__dbenv_print_all(dbenv, flags)
+__env_print_all(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
@@ -176,6 +181,7 @@ __dbenv_print_all(dbenv, flags)
{ DB_ENV_DBLOCAL, "DB_ENV_DBLOCAL" },
{ DB_ENV_DIRECT_DB, "DB_ENV_DIRECT_DB" },
{ DB_ENV_DIRECT_LOG, "DB_ENV_DIRECT_LOG" },
+ { DB_ENV_DSYNC_DB, "DB_ENV_DSYNC_DB" },
{ DB_ENV_DSYNC_LOG, "DB_ENV_DSYNC_LOG" },
{ DB_ENV_FATAL, "DB_ENV_FATAL" },
{ DB_ENV_LOCKDOWN, "DB_ENV_LOCKDOWN" },
@@ -200,15 +206,13 @@ __dbenv_print_all(dbenv, flags)
};
static const FN ofn[] = {
{ DB_CREATE, "DB_CREATE" },
- { DB_CXX_NO_EXCEPTIONS, "DB_CXX_NO_EXCEPTIONS" },
{ DB_FORCE, "DB_FORCE" },
{ DB_INIT_CDB, "DB_INIT_CDB" },
- { DB_INIT_LOCK, "DB_INIT_LOCK" },
+ { DB_INIT_LOCK, "DB_INIT_LOCK" },
{ DB_INIT_LOG, "DB_INIT_LOG" },
{ DB_INIT_MPOOL, "DB_INIT_MPOOL" },
{ DB_INIT_REP, "DB_INIT_REP" },
{ DB_INIT_TXN, "DB_INIT_TXN" },
- { DB_JOINENV, "DB_JOINENV" },
{ DB_LOCKDOWN, "DB_LOCKDOWN" },
{ DB_NOMMAP, "DB_NOMMAP" },
{ DB_PRIVATE, "DB_PRIVATE" },
@@ -226,51 +230,50 @@ __dbenv_print_all(dbenv, flags)
static const FN vfn[] = {
{ DB_VERB_DEADLOCK, "DB_VERB_DEADLOCK" },
{ DB_VERB_RECOVERY, "DB_VERB_RECOVERY" },
+ { DB_VERB_REGISTER, "DB_VERB_REGISTER" },
{ DB_VERB_REPLICATION, "DB_VERB_REPLICATION" },
{ DB_VERB_WAITSFOR, "DB_VERB_WAITSFOR" },
{ 0, NULL }
};
+ static const FN regenvfn[] = {
+ { DB_REGENV_REPLOCKED, "DB_REGENV_REPLOCKED" },
+ { 0, NULL }
+ };
DB_MSGBUF mb;
REGENV *renv;
REGINFO *infop;
- REGION *rp, regs[1024];
- size_t n;
- char **p;
+ REGION *rp;
+ u_int32_t i;
+ char **p, time_buf[CTIME_BUFLEN];
infop = dbenv->reginfo;
renv = infop->primary;
DB_MSGBUF_INIT(&mb);
- /*
- * Lock the database environment while we get copies of the region
- * information.
- */
- MUTEX_LOCK(dbenv, &infop->rp->mutex);
-
- for (n = 0, rp = SH_LIST_FIRST(&renv->regionq, __db_region);
- n < sizeof(regs) / sizeof(regs[0]) && rp != NULL;
- ++n, rp = SH_LIST_NEXT(rp, q, __db_region)) {
- regs[n] = *rp;
- if (LF_ISSET(DB_STAT_CLEAR))
- MUTEX_CLEAR(&rp->mutex);
- }
- if (n > 0)
- --n;
- MUTEX_UNLOCK(dbenv, &infop->rp->mutex);
+ __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+ __db_prflags(dbenv,
+ NULL, renv->init_flags, ofn, NULL, "\tInitialization flags");
+ STAT_ULONG("Region slots", renv->region_cnt);
+ __db_prflags(dbenv,
+ NULL, renv->flags, regenvfn, NULL, "\tReplication flags");
+ __db_msg(dbenv, "%.24s\tOperation timestamp",
+ renv->op_timestamp == 0 ?
+ "!Set" : __db_ctime(&renv->op_timestamp, time_buf));
+ __db_msg(dbenv, "%.24s\tReplication timestamp",
+ renv->rep_timestamp == 0 ?
+ "!Set" : __db_ctime(&renv->rep_timestamp, time_buf));
- if (LF_ISSET(DB_STAT_ALL)) {
- __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
- __db_msg(dbenv, "Per region database environment information:");
- }
- while (n > 0) {
- rp = &regs[--n];
+ __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+ __db_msg(dbenv, "Per region database environment information:");
+ for (rp = R_ADDR(infop, renv->region_off),
+ i = 0; i < renv->region_cnt; ++i, ++rp) {
+ if (rp->id == INVALID_REGION_ID)
+ continue;
__db_msg(dbenv, "%s Region:", __reg_type(rp->type));
STAT_LONG("Region ID", rp->id);
STAT_LONG("Segment ID", rp->segid);
__db_dlbytes(dbenv,
"Size", (u_long)0, (u_long)0, (u_long)rp->size);
- __db_print_mutex(dbenv, NULL, &rp->mutex,
- "The number of region locks that required waiting", flags);
}
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
@@ -278,6 +281,7 @@ __dbenv_print_all(dbenv, flags)
STAT_ISSET("Errfile", dbenv->db_errfile);
STAT_STRING("Errpfx", dbenv->db_errpfx);
STAT_ISSET("Errcall", dbenv->db_errcall);
+ STAT_ISSET("Event", dbenv->db_event_func);
STAT_ISSET("Feedback", dbenv->db_feedback);
STAT_ISSET("Panic", dbenv->db_paniccall);
STAT_ISSET("Malloc", dbenv->db_malloc);
@@ -300,36 +304,80 @@ __dbenv_print_all(dbenv, flags)
STAT_FMT("Mode", "%#o", int, dbenv->db_mode);
__db_prflags(dbenv, NULL, dbenv->open_flags, ofn, NULL, "\tOpen flags");
STAT_ISSET("Lockfhp", dbenv->lockfhp);
- STAT_ISSET("Rec tab", dbenv->recover_dtab);
- STAT_ULONG("Rec tab slots", dbenv->recover_dtab_size);
+ STAT_ISSET("Recovery table", dbenv->recover_dtab);
+ STAT_ULONG("Number of recovery table slots", dbenv->recover_dtab_size);
STAT_ISSET("RPC client", dbenv->cl_handle);
STAT_LONG("RPC client ID", dbenv->cl_id);
- STAT_LONG("DB ref count", dbenv->db_ref);
- STAT_LONG("Shared mem key", dbenv->shm_key);
- STAT_ULONG("test-and-set spin configuration", dbenv->tas_spins);
- __db_print_mutex(
- dbenv, NULL, dbenv->dblist_mutexp, "DB handle mutex", flags);
+ STAT_LONG("DB reference count", dbenv->db_ref);
+ STAT_LONG("Shared memory key", dbenv->shm_key);
+ __mutex_print_debug_single(
+ dbenv, "DB handle mutex", dbenv->mtx_dblist, flags);
STAT_ISSET("api1 internal", dbenv->api1_internal);
STAT_ISSET("api2 internal", dbenv->api2_internal);
STAT_ISSET("password", dbenv->passwd);
STAT_ISSET("crypto handle", dbenv->crypto_handle);
- __db_print_mutex(dbenv, NULL, dbenv->mt_mutexp, "MT mutex", flags);
+ __mutex_print_debug_single(dbenv, "MT mutex", dbenv->mtx_mt, flags);
__db_prflags(dbenv, NULL, dbenv->flags, fn, NULL, "\tFlags");
return (0);
}
+static char *
+__env_thread_state_print(state)
+ DB_THREAD_STATE state;
+{
+ switch (state) {
+ case THREAD_ACTIVE:
+ return ("active");
+ case THREAD_BLOCKED:
+ return ("blocked");
+ case THREAD_OUT:
+ return ("out");
+ default:
+ return ("unknown");
+ }
+}
+
+/*
+ * __env_print_threads --
+ * Display the current active threads
+ *
+ */
+static int
+__env_print_threads(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_HASHTAB *htab;
+ DB_THREAD_INFO *ip;
+ u_int32_t i;
+ char buf[DB_THREADID_STRLEN];
+
+ htab = (DB_HASHTAB *)dbenv->thr_hashtab;
+ __db_msg(dbenv, "Thread status blocks:");
+ for (i = 0; i < dbenv->thr_nbucket; i++)
+ SH_TAILQ_FOREACH(ip, &htab[i], dbth_links, __db_thread_info) {
+ if (ip->dbth_state == THREAD_SLOT_NOT_IN_USE)
+ continue;
+ __db_msg(dbenv, "\tprocess/thread %s: %s",
+ dbenv->thread_id_string(
+ dbenv, ip->dbth_pid, ip->dbth_tid, buf),
+ __env_thread_state_print(ip->dbth_state));
+ }
+ return (0);
+}
+
/*
* __db_print_fh --
* Print out a file handle.
*
- * PUBLIC: void __db_print_fh __P((DB_ENV *, DB_FH *, u_int32_t));
+ * PUBLIC: void __db_print_fh __P((DB_ENV *, const char *, DB_FH *, u_int32_t));
*/
void
-__db_print_fh(dbenv, fh, flags)
+__db_print_fh(dbenv, tag, fh, flags)
DB_ENV *dbenv;
+ const char *tag;
DB_FH *fh;
u_int32_t flags;
{
@@ -340,7 +388,13 @@ __db_print_fh(dbenv, fh, flags)
{ 0, NULL }
};
- __db_print_mutex(dbenv, NULL, fh->mutexp, "file-handle.mutex", flags);
+ if (fh == NULL) {
+ STAT_ISSET(tag, fh);
+ return;
+ }
+
+ __mutex_print_debug_single(
+ dbenv, "file-handle.mutex", fh->mtx_fh, flags);
STAT_LONG("file-handle.reference count", fh->ref);
STAT_LONG("file-handle.file descriptor", fh->fd);
@@ -368,6 +422,11 @@ __db_print_fileid(dbenv, id, suffix)
DB_MSGBUF mb;
int i;
+ if (id == NULL) {
+ STAT_ISSET("ID", id);
+ return;
+ }
+
DB_MSGBUF_INIT(&mb);
for (i = 0; i < DB_FILE_ID_LEN; ++i, ++id) {
__db_msgadd(dbenv, &mb, "%x", (u_int)*id);
@@ -380,95 +439,6 @@ __db_print_fileid(dbenv, id, suffix)
}
/*
- * __db_print_mutex --
- * Print out mutex statistics.
- *
- * PUBLIC: void __db_print_mutex
- * PUBLIC: __P((DB_ENV *, DB_MSGBUF *, DB_MUTEX *, const char *, u_int32_t));
- */
-void
-__db_print_mutex(dbenv, mbp, mutex, suffix, flags)
- DB_ENV *dbenv;
- DB_MSGBUF *mbp;
- DB_MUTEX *mutex;
- const char *suffix;
- u_int32_t flags;
-{
- DB_MSGBUF mb;
- u_long value;
- int standalone;
-
- /* If we don't have a mutex, point that out and return. */
- if (mutex == NULL) {
- STAT_ISSET(suffix, mutex);
- return;
- }
-
- if (mbp == NULL) {
- DB_MSGBUF_INIT(&mb);
- mbp = &mb;
- standalone = 1;
- } else
- standalone = 0;
-
- /*
- * !!!
- * We may not hold the mutex lock -- that's OK, we're only reading
- * the statistics.
- */
- if ((value = mutex->mutex_set_wait) < 10000000)
- __db_msgadd(dbenv, mbp, "%lu", value);
- else
- __db_msgadd(dbenv, mbp, "%luM", value / 1000000);
-
- /*
- * If standalone, append the mutex percent and the locker information
- * after the suffix line. Otherwise, append it after the counter.
- *
- * The setting of "suffix" tracks "standalone" -- if standalone, expect
- * a suffix and prefix it with a <tab>, otherwise, it's optional. This
- * isn't a design, it's just the semantics we happen to need right now.
- */
- if (standalone) {
- if (suffix == NULL) /* Defense. */
- suffix = "";
-
- __db_msgadd(dbenv, &mb, "\t%s (%d%%", suffix,
- DB_PCT(mutex->mutex_set_wait,
- mutex->mutex_set_wait + mutex->mutex_set_nowait));
-#ifdef DIAGNOSTIC
-#ifdef HAVE_MUTEX_THREADS
- if (mutex->locked != 0)
- __db_msgadd(dbenv, &mb, "/%lu", (u_long)mutex->locked);
-#else
- if (mutex->pid != 0)
- __db_msgadd(dbenv, &mb, "/%lu", (u_long)mutex->pid);
-#endif
-#endif
- __db_msgadd(dbenv, &mb, ")");
-
- DB_MSGBUF_FLUSH(dbenv, mbp);
- } else {
- __db_msgadd(dbenv, mbp, "/%d%%", DB_PCT(mutex->mutex_set_wait,
- mutex->mutex_set_wait + mutex->mutex_set_nowait));
-#ifdef DIAGNOSTIC
-#ifdef HAVE_MUTEX_THREADS
- if (mutex->locked != 0)
- __db_msgadd(dbenv, &mb, "/%lu", (u_long)mutex->locked);
-#else
- if (mutex->pid != 0)
- __db_msgadd(dbenv, &mb, "/%lu", (u_long)mutex->pid);
-#endif
-#endif
- if (suffix != NULL)
- __db_msgadd(dbenv, mbp, "%s", suffix);
- }
-
- if (LF_ISSET(DB_STAT_CLEAR))
- MUTEX_CLEAR(mutex);
-}
-
-/*
* __db_dl --
* Display a big value.
*
@@ -510,12 +480,13 @@ __db_dl_pct(dbenv, msg, value, pct, tag)
/*
* Two formats: if less than 10 million, display as the number, if
- * greater than 10 million display as ###M.
+ * greater than 10 million, round it off and display as ###M.
*/
if (value < 10000000)
__db_msgadd(dbenv, &mb, "%lu\t%s", value, msg);
else
- __db_msgadd(dbenv, &mb, "%luM\t%s", value / 1000000, msg);
+ __db_msgadd(dbenv,
+ &mb, "%luM\t%s", (value + 500000) / 1000000, msg);
if (tag == NULL)
__db_msgadd(dbenv, &mb, " (%d%%)", pct);
else
@@ -602,11 +573,11 @@ __db_print_reginfo(dbenv, infop, s)
STAT_STRING("Region type", __reg_type(infop->type));
STAT_ULONG("Region ID", infop->id);
STAT_STRING("Region name", infop->name);
- STAT_HEX("Original region address", infop->addr_orig);
- STAT_HEX("Region address", infop->addr);
- STAT_HEX("Region primary address", infop->primary);
+ STAT_POINTER("Original region address", infop->addr_orig);
+ STAT_POINTER("Region address", infop->addr);
+ STAT_POINTER("Region primary address", infop->primary);
STAT_ULONG("Region maximum allocation", infop->max_alloc);
- STAT_ULONG("Region allocated", infop->max_alloc);
+ STAT_ULONG("Region allocated", infop->allocated);
__db_prflags(dbenv, NULL, infop->flags, fn, NULL, "\tRegion flags");
}
@@ -650,12 +621,12 @@ int
__db_stat_not_built(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "Library build did not include statistics support");
+ __db_errx(dbenv, "Library build did not include statistics support");
return (DB_OPNOTSUP);
}
int
-__dbenv_stat_print_pp(dbenv, flags)
+__env_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
diff --git a/db/examples_c/README b/db/examples_c/README
index 722102de3..4b498be97 100644
--- a/db/examples_c/README
+++ b/db/examples_c/README
@@ -1,4 +1,4 @@
-# $Id: README,v 11.6 2004/09/23 17:49:25 mjc Exp $
+# $Id: README,v 12.1 2006/07/07 23:36:14 alanb Exp $
getting_started/
Examples from the Getting Started Guide
@@ -19,9 +19,9 @@ ex_lock.c Locking.
ex_mpool.c Shared memory buffer pools.
-ex_repquote/ Replication. This creates a toy stock quote server
+ex_rep/ Replication. This creates a toy stock quote server
with DB's single-master, multiple-client replication,
- with communication over TCP.
+ with communication over TCP. See ex_rep/README.
ex_sequence.c Sequences.
diff --git a/db/examples_c/bench_001.c b/db/examples_c/bench_001.c
index 27bdd5d4d..3d342ea58 100644
--- a/db/examples_c/bench_001.c
+++ b/db/examples_c/bench_001.c
@@ -1,8 +1,10 @@
/*-
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * See the file LICENSE for redistribution information.
*
- * $Id: bench_001.c,v 1.17 2004/09/22 03:44:28 bostic Exp $
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: bench_001.c,v 12.5 2006/08/24 14:45:41 bostic Exp $
*/
/*
@@ -29,19 +31,25 @@
* -o bench_001 -O2 bench_001.c /usr/local/BerkeleyDB/lib/libdb.so
*/
#include <sys/types.h>
-
#include <sys/time.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>
#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 compare_int(DB *, const DBT *, const DBT *);
+DB_ENV *db_init(char *, char *, u_int, int);
+int fill(DB_ENV *, DB *, int, u_int, int, int);
+int get(DB *, int, u_int, int, int, int, int *);
int main(int, char *[]);
void usage(void);
@@ -54,10 +62,12 @@ const char
DB_ENV *
db_init(home, prefix, cachesize, txn)
char *home, *prefix;
- int cachesize, txn;
+ u_int cachesize;
+ int txn;
{
DB_ENV *dbenv;
- int flags, ret;
+ u_int32_t flags;
+ int ret;
if ((ret = db_env_create(&dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_env_create");
@@ -86,15 +96,22 @@ db_init(home, prefix, cachesize, txn)
int
get(dbp, txn, datalen, num, dups, iter, countp)
DB *dbp;
- int txn, datalen, num, dups, iter, *countp;
+ u_int datalen;
+ int txn, num, dups, iter, *countp;
{
DBC *dbcp;
DBT key, data;
+ DB_ENV *dbenv;
DB_TXN *txnp;
- u_int32_t len, klen;
- int count, flags, i, j, ret;
+ u_int32_t flags, len, klen;
+ int count, i, j, ret;
void *pointer, *dp, *kp;
+ dbenv = dbp->dbenv;
+
+ klen = 0; /* Lint. */
+ klen = klen;
+
memset(&key, 0, sizeof(key));
key.data = &j;
key.size = sizeof(j);
@@ -102,6 +119,7 @@ get(dbp, txn, datalen, num, dups, iter, countp)
data.flags = DB_DBT_USERMEM;
data.data = malloc(datalen*1024*1024);
data.ulen = data.size = datalen*1024*1024;
+
count = 0;
flags = DB_SET;
if (!dups)
@@ -111,17 +129,15 @@ get(dbp, txn, datalen, num, dups, iter, countp)
for (i = 0; i < iter; i++) {
txnp = NULL;
if (txn)
- dbp->dbenv->txn_begin(dbp->dbenv, NULL, &txnp, 0);
- dbp->cursor(dbp, txnp, &dbcp, 0);
+ if ((ret =
+ dbenv->txn_begin(dbenv, NULL, &txnp, 0)) != 0)
+ goto err;
+ if ((ret = dbp->cursor(dbp, txnp, &dbcp, 0)) != 0)
+ goto err;
j = random() % num;
- switch (ret = dbcp->c_get(dbcp, &key, &data, flags)) {
- case 0:
- break;
- default:
- dbp->err(dbcp->dbp, ret, "DBC->c_get");
- return (ret);
- }
+ if ((ret = dbcp->c_get(dbcp, &key, &data, flags)) != 0)
+ goto err;
DB_MULTIPLE_INIT(pointer, &data);
if (dups)
while (pointer != NULL) {
@@ -136,13 +152,18 @@ get(dbp, txn, datalen, num, dups, iter, countp)
if (kp != NULL)
count++;
}
- dbcp->c_close(dbcp);
+ if ((ret = dbcp->c_close(dbcp)) != 0)
+ goto err;
if (txn)
- txnp->commit(txnp, 0);
+ if ((ret = txnp->commit(txnp, 0)) != 0)
+ goto err;
}
*countp = count;
return (0);
+
+err: dbp->err(dbp, ret, "get");
+ return (ret);
}
/*
@@ -156,7 +177,8 @@ int
fill(dbenv, dbp, txn, datalen, num, dups)
DB_ENV *dbenv;
DB *dbp;
- int txn, datalen, num, dups;
+ u_int datalen;
+ int txn, num, dups;
{
DBT key, data;
DB_TXN *txnp;
@@ -165,6 +187,7 @@ fill(dbenv, dbp, txn, datalen, num, dups)
char str[1];
} *data_val;
int count, i, ret;
+
/*
* Insert records into the database, where the key is the user
* input and the data is the user input in reverse order.
@@ -176,7 +199,7 @@ fill(dbenv, dbp, txn, datalen, num, dups)
memset(&data, 0, sizeof(DBT));
key.data = &i;
key.size = sizeof(i);
- data.data = data_val = (struct data *) malloc(datalen);
+ data.data = data_val = malloc(datalen);
memcpy(data_val->str, "0123456789012345678901234567890123456789",
datalen - sizeof(data_val->id));
data.size = datalen;
@@ -196,8 +219,7 @@ fill(dbenv, dbp, txn, datalen, num, dups)
}
data_val->id = 0;
do {
- switch (ret =
- dbp->put(dbp, txnp, &key, &data, 0)) {
+ switch (ret = dbp->put(dbp, txnp, &key, &data, 0)) {
case 0:
count++;
break;
@@ -230,7 +252,8 @@ main(argc, argv)
DB_TXN *txnp;
struct timeval start_time, end_time;
double secs;
- int cache, ch, count, datalen, dups, env, init, iter, num, pagesize;
+ u_int cache, datalen, pagesize;
+ int ch, count, dups, env, init, iter, num;
int ret, rflag, txn;
txnp = NULL;
@@ -245,7 +268,7 @@ main(argc, argv)
while ((ch = getopt(argc, argv, "c:d:EIi:l:n:p:RT")) != EOF)
switch (ch) {
case 'c':
- cache = atoi(optarg);
+ cache = (u_int)atoi(optarg);
break;
case 'd':
dups = atoi(optarg);
@@ -260,13 +283,13 @@ main(argc, argv)
iter = atoi(optarg);
break;
case 'l':
- datalen = atoi(optarg);
+ datalen = (u_int)atoi(optarg);
break;
case 'n':
num = atoi(optarg);
break;
case 'p':
- pagesize = atoi(optarg);
+ pagesize = (u_int)atoi(optarg);
break;
case 'R':
rflag = 1;
@@ -284,7 +307,7 @@ main(argc, argv)
/* Remove the previous database. */
if (!rflag) {
if (env)
- system("rm -rf BENCH_001; mkdir BENCH_001");
+ (void)system("rm -rf BENCH_001; mkdir BENCH_001");
else
(void)unlink(DATABASE);
}
@@ -303,55 +326,59 @@ main(argc, argv)
}
dbp->set_errfile(dbp, stderr);
dbp->set_errpfx(dbp, progname);
+ if ((ret = dbp->set_bt_compare(dbp, compare_int)) != 0) {
+ dbp->err(dbp, ret, "set_bt_compare");
+ goto err;
+ }
if ((ret = dbp->set_pagesize(dbp, pagesize)) != 0) {
dbp->err(dbp, ret, "set_pagesize");
- goto err1;
+ goto err;
}
if (dups && (ret = dbp->set_flags(dbp, DB_DUP)) != 0) {
dbp->err(dbp, ret, "set_flags");
- goto err1;
+ goto err;
}
if (env == 0 && (ret = dbp->set_cachesize(dbp, 0, cache, 0)) != 0) {
dbp->err(dbp, ret, "set_cachesize");
- goto err1;
+ goto err;
}
if ((ret = dbp->set_flags(dbp, DB_DUP)) != 0) {
dbp->err(dbp, ret, "set_flags");
- goto err1;
+ goto err;
}
if (txn != 0)
if ((ret = dbenv->txn_begin(dbenv, NULL, &txnp, 0)) != 0)
- goto err1;
+ goto err;
if ((ret = dbp->open(
dbp, txnp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s: open", DATABASE);
if (txnp != NULL)
(void)txnp->abort(txnp);
- goto err1;
+ goto err;
}
if (txnp != NULL)
ret = txnp->commit(txnp, 0);
txnp = NULL;
if (ret != 0)
- goto err1;
+ goto err;
if (rflag) {
/* If no environment, fill the cache. */
if (!env && (ret =
get(dbp, txn, datalen, num, dups, iter, &count)) != 0)
- goto err1;
+ goto err;
/* Time the get loop. */
- gettimeofday(&start_time, NULL);
+ (void)gettimeofday(&start_time, NULL);
if ((ret =
get(dbp, txn, datalen, num, dups, iter, &count)) != 0)
- goto err1;
- gettimeofday(&end_time, NULL);
+ goto err;
+ (void)gettimeofday(&end_time, NULL);
secs =
(((double)end_time.tv_sec * 1000000 + end_time.tv_usec) -
((double)start_time.tv_sec * 1000000 + start_time.tv_usec))
@@ -361,7 +388,7 @@ main(argc, argv)
printf("%.0f records/second\n", (double)count / secs);
} else if ((ret = fill(dbenv, dbp, txn, datalen, num, dups)) != 0)
- goto err1;
+ goto err;
/* Close everything down. */
if ((ret = dbp->close(dbp, rflag ? DB_NOSYNC : 0)) != 0) {
@@ -371,10 +398,30 @@ main(argc, argv)
}
return (ret);
-err1: (void)dbp->close(dbp, 0);
+err: (void)dbp->close(dbp, 0);
return (1);
}
+int
+compare_int(dbp, a, b)
+ DB *dbp;
+ const DBT *a, *b;
+{
+ int ai, bi;
+
+ dbp = dbp; /* Lint. */
+
+ /*
+ * Returns:
+ * < 0 if a < b
+ * = 0 if a = b
+ * > 0 if a > b
+ */
+ memcpy(&ai, a->data, sizeof(int));
+ memcpy(&bi, b->data, sizeof(int));
+ return (ai - bi);
+}
+
void
usage()
{
diff --git a/db/examples_c/csv/DbRecord.c b/db/examples_c/csv/DbRecord.c
new file mode 100644
index 000000000..9b3662b5c
--- /dev/null
+++ b/db/examples_c/csv/DbRecord.c
@@ -0,0 +1,471 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: DbRecord.c,v 1.12 2006/08/24 14:45:42 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+static int DbRecord_field(DbRecord *, u_int, void *, datatype);
+static int DbRecord_search_field(DbField *, char *, OPERATOR);
+static int DbRecord_search_recno(char *, OPERATOR);
+
+/*
+ * DbRecord_print --
+ * Display a DbRecord structure.
+ */
+void
+DbRecord_print(DbRecord *recordp, FILE *fp)
+{
+ DbField *f;
+ void *faddr;
+
+ if (fp == NULL)
+ fp = stdout;
+
+ fprintf(fp, "Record: %lu:\n", (u_long)recordp->recno);
+ for (f = fieldlist; f->name != NULL; ++f) {
+ faddr = (u_int8_t *)recordp + f->offset;
+ fprintf(fp, "\t%s: ", f->name);
+ switch (f->type) {
+ case NOTSET:
+ /* NOTREACHED */
+ abort();
+ break;
+ case DOUBLE:
+ fprintf(fp, "%f\n", *(double *)faddr);
+ break;
+ case STRING:
+ fprintf(fp, "%s\n", *(char **)faddr);
+ break;
+ case ULONG:
+ fprintf(fp, "%lu\n", *(u_long *)faddr);
+ break;
+ }
+ }
+}
+
+/*
+ * DbRecord_read --
+ * Read a specific record from the database.
+ */
+int
+DbRecord_read(u_long recno_ulong, DbRecord *recordp)
+{
+ DBT key, data;
+ u_int32_t recno;
+ int ret;
+
+ /*
+ * XXX
+ * This code assumes a record number (typed as u_int32_t) is the same
+ * size as an unsigned long, and there's no reason to believe that.
+ */
+ recno = recno_ulong;
+
+ /*
+ * Retrieve the requested record from the primary database. Have
+ * Berkeley DB allocate memory for us, keeps the DB handle thread
+ * safe.
+ *
+ * We have the Berkeley DB library allocate memory for the record,
+ * which we own and must eventually free. The reason is so we can
+ * have the string fields in the structure point into the actual
+ * record, rather than allocating structure local memory to hold them
+ * and copying them out of the record.
+ */
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ key.data = &recno;
+ key.size = sizeof(recno);
+ data.flags = DB_DBT_MALLOC;
+ if ((ret = db->get(db, NULL, &key, &data, 0)) != 0)
+ return (ret);
+
+ if ((ret = DbRecord_init(&key, &data, recordp)) != 0)
+ return (ret);
+
+ return (0);
+}
+
+/*
+ * DbRecord_discard --
+ * Discard a DbRecord structure.
+ */
+int
+DbRecord_discard(DbRecord *recordp)
+{
+ /* Free the allocated memory. */
+ free(recordp->raw);
+ recordp->raw = NULL;
+
+ return (0);
+}
+
+/*
+ * DbRecord_init --
+ * Fill in a DbRecord from the database key/data pair.
+ */
+int
+DbRecord_init(const DBT *key, const DBT *data, DbRecord *recordp)
+{
+ DbField *f;
+ u_int32_t skip;
+ void *faddr;
+
+ /* Initialize the structure (get the pre-set index values). */
+ *recordp = DbRecord_base;
+
+ /* Fill in the ID and version. */
+ memcpy(&recordp->recno, key->data, sizeof(u_int32_t));
+ memcpy(&recordp->version,
+ (u_int32_t *)data->data + 1, sizeof(u_int32_t));
+
+ /* Set up the record references. */
+ recordp->raw = data->data;
+ recordp->offset = (u_int32_t *)data->data + 1;
+ skip = (recordp->field_count + 2) * sizeof(u_int32_t);
+ recordp->record = (u_int8_t *)data->data + skip;
+ recordp->record_len = data->size - skip;
+
+ for (f = fieldlist; f->name != NULL; ++f) {
+ faddr = (u_int8_t *)recordp + f->offset;
+ if (DbRecord_field(
+ recordp, f->fieldno, faddr, f->type) != 0)
+ return (1);
+ }
+ return (0);
+}
+
+/*
+ * DbRecord_field --
+ * Fill in an individual field of the DbRecord.
+ */
+static int
+DbRecord_field(
+ DbRecord *recordp, u_int field, void *addr, datatype type)
+{
+ size_t len;
+ char number_buf[20];
+
+ /*
+ * The offset table is 0-based, the field numbers are 1-based.
+ * Correct.
+ */
+ --field;
+
+ switch (type) {
+ case NOTSET:
+ /* NOTREACHED */
+ abort();
+ break;
+ case STRING:
+ *((u_char **)addr) = recordp->record + recordp->offset[field];
+ recordp->record[recordp->offset[field] +
+ OFFSET_LEN(recordp->offset, field)] = '\0';
+ break;
+ case DOUBLE:
+ case ULONG:
+ /* This shouldn't be possible -- 2^32 is only 10 digits. */
+ len = OFFSET_LEN(recordp->offset, field);
+ if (len > sizeof(number_buf) - 1) {
+ dbenv->errx(dbenv,
+ "record %lu field %lu: numeric field is %lu bytes and too large to copy",
+ recordp->recno, field, (u_long)len);
+ return (1);
+ }
+ memcpy(number_buf,
+ recordp->record + recordp->offset[field], len);
+ number_buf[len] = '\0';
+
+ if (type == DOUBLE) {
+ if (len == 0)
+ *(double *)addr = 0;
+ else if (strtod_err(number_buf, (double *)addr) != 0)
+ goto fmt_err;
+ } else
+ if (len == 0)
+ *(u_long *)addr = 0;
+ else if (strtoul_err(number_buf, (u_long *)addr) != 0) {
+fmt_err: dbenv->errx(dbenv,
+ "record %lu: numeric field %u error: %s",
+ recordp->recno, field, number_buf);
+ return (1);
+ }
+ break;
+ }
+ return (0);
+}
+
+/*
+ * DbRecord_search_field_name --
+ * Search, looking for a record by field name.
+ */
+int
+DbRecord_search_field_name(char *field, char *value, OPERATOR op)
+{
+ DbField *f;
+
+ for (f = fieldlist; f->name != NULL; ++f)
+ if (strcasecmp(field, f->name) == 0)
+ return (DbRecord_search_field(f, value, op));
+
+ /* Record numbers aren't handled as fields. */
+ if (strcasecmp(field, "id") == 0)
+ return (DbRecord_search_recno(value, op));
+
+ dbenv->errx(dbenv, "unknown field name: %s", field);
+ return (1);
+}
+
+/*
+ * DbRecord_search_field_number --
+ * Search, looking for a record by field number.
+ */
+int
+DbRecord_search_field_number(u_int32_t fieldno, char *value, OPERATOR op)
+{
+ DbField *f;
+
+ for (f = fieldlist; f->name != NULL; ++f)
+ if (fieldno == f->fieldno)
+ return (DbRecord_search_field(f, value, op));
+
+ dbenv->errx(dbenv, "field number %lu not configured", (u_long)fieldno);
+ return (1);
+}
+
+/*
+ * DbRecord_search_recno --
+ * Search, looking for a record by record number.
+ */
+static int
+DbRecord_search_recno(char *value, OPERATOR op)
+{
+ DBC *dbc;
+ DbRecord record;
+ DBT key, data;
+ u_int32_t recno;
+ u_long recno_ulong;
+ int ret;
+
+ /*
+ * XXX
+ * This code assumes a record number (typed as u_int32_t) is the same
+ * size as an unsigned long, and there's no reason to believe that.
+ */
+ if (strtoul_err(value, &recno_ulong) != 0)
+ return (1);
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ key.data = &recno;
+ key.size = sizeof(recno);
+
+ if ((ret = db->cursor(db, NULL, &dbc, 0)) != 0)
+ return (ret);
+
+ /*
+ * Retrieve the first record that interests us. The range depends on
+ * the operator:
+ *
+ * ~ error
+ * != beginning to end
+ * < beginning to first match
+ * <= beginning to last match
+ * = first match to last match
+ * > record after last match to end
+ * >= first match to end
+ */
+ if (op == LT || op == LTEQ || op == NEQ || op == WC || op == NWC)
+ recno = 1;
+ else if (op == WC || op == NWC) {
+ dbenv->errx(dbenv,
+ "wildcard operator only supported for string fields");
+ return (1);
+ } else {
+ recno = recno_ulong;
+ if (op == GT)
+ ++recno;
+ }
+ if ((ret = dbc->c_get(dbc, &key, &data, DB_SET)) != 0)
+ goto err;
+
+ for (;;) {
+ if ((ret = DbRecord_init(&key, &data, &record)) != 0)
+ break;
+ if (field_cmp_ulong(&record.recno, &recno_ulong, op))
+ DbRecord_print(&record, NULL);
+ else
+ if (op == LT || op == LTEQ || op == EQ)
+ break;
+ if ((ret = dbc->c_get(dbc, &key, &data, DB_NEXT)) != 0)
+ break;
+ }
+
+err: return (ret == DB_NOTFOUND ? 0 : ret);
+}
+
+/*
+ * DbRecord_search_field --
+ * Search, looking for a record by field.
+ */
+static int
+DbRecord_search_field(DbField *f, char *value, OPERATOR op)
+{
+#ifdef HAVE_WILDCARD_SUPPORT
+ regex_t preq;
+#endif
+ DBC *dbc;
+ DbRecord record;
+ DBT key, data, pkey;
+ double value_double;
+ u_long value_ulong;
+ u_int32_t cursor_flags;
+ int ret, t_ret;
+ int (*cmp)(void *, void *, OPERATOR);
+ void *faddr, *valuep;
+
+ dbc = NULL;
+ memset(&key, 0, sizeof(key));
+ memset(&pkey, 0, sizeof(pkey));
+ memset(&data, 0, sizeof(data));
+
+ /*
+ * Initialize the comparison function, crack the value. Wild cards
+ * are always strings, otherwise we follow the field type.
+ */
+ if (op == WC || op == NWC) {
+#ifdef HAVE_WILDCARD_SUPPORT
+ if (f->type != STRING) {
+ dbenv->errx(dbenv,
+ "wildcard operator only supported for string fields");
+ return (1);
+ }
+ if (regcomp(&preq, value, 0) != 0) {
+ dbenv->errx(dbenv, "regcomp of pattern failed");
+ return (1);
+ }
+ valuep = &preq;
+ cmp = field_cmp_re;
+#else
+ dbenv->errx(dbenv,
+ "wildcard operators not supported in this build");
+ return (1);
+#endif
+ } else
+ switch (f->type) {
+ case DOUBLE:
+ if (strtod_err(value, &value_double) != 0)
+ return (1);
+ cmp = field_cmp_double;
+ valuep = &value_double;
+ key.size = sizeof(double);
+ break;
+ case STRING:
+ valuep = value;
+ cmp = field_cmp_string;
+ key.size = strlen(value);
+ break;
+ case ULONG:
+ if (strtoul_err(value, &value_ulong) != 0)
+ return (1);
+ cmp = field_cmp_ulong;
+ valuep = &value_ulong;
+ key.size = sizeof(u_long);
+ break;
+ default:
+ case NOTSET:
+ abort();
+ /* NOTREACHED */
+ }
+
+ /*
+ * Retrieve the first record that interests us. The range depends on
+ * the operator:
+ *
+ * ~ beginning to end
+ * != beginning to end
+ * < beginning to first match
+ * <= beginning to last match
+ * = first match to last match
+ * > record after last match to end
+ * >= first match to end
+ *
+ * If we have a secondary, set a cursor in the secondary, else set the
+ * cursor to the beginning of the primary.
+ *
+ * XXX
+ * If the wildcard string has a leading non-magic character we should
+ * be able to do a range search instead of a full-database search.
+ *
+ * Step through records to the first non-match or to the end of the
+ * database, depending on the operation. If the comparison function
+ * returns success for a key/data pair, print the pair.
+ */
+ if (f->secondary == NULL || op == NEQ || op == WC || op == NWC) {
+ if ((ret = db->cursor(db, NULL, &dbc, 0)) != 0)
+ goto err;
+ while ((ret = dbc->c_get(dbc, &key, &data, DB_NEXT)) == 0) {
+ if ((ret = DbRecord_init(&key, &data, &record)) != 0)
+ break;
+ faddr = (u_int8_t *)&record + f->offset;
+ if (cmp(faddr, valuep, op))
+ DbRecord_print(&record, NULL);
+ else
+ if (op == EQ || op == LT || op == LTEQ)
+ break;
+ }
+ } else {
+ if ((ret =
+ f->secondary->cursor(f->secondary, NULL, &dbc, 0)) != 0)
+ goto err;
+ key.data = valuep;
+ cursor_flags = op == LT || op == LTEQ ? DB_FIRST : DB_SET_RANGE;
+ if ((ret =
+ dbc->c_pget(dbc, &key, &pkey, &data, cursor_flags)) != 0)
+ goto done;
+ if (op == GT) {
+ while ((ret = dbc->c_pget(
+ dbc, &key, &pkey, &data, DB_NEXT)) == 0) {
+ if ((ret =
+ DbRecord_init(&pkey, &data, &record)) != 0)
+ break;
+ faddr = (u_int8_t *)&record + f->offset;
+ if (cmp(faddr, valuep, op) != 0)
+ break;
+ }
+ if (ret != 0)
+ goto done;
+ }
+ do {
+ if ((ret = DbRecord_init(&pkey, &data, &record)) != 0)
+ break;
+ faddr = (u_int8_t *)&record + f->offset;
+ if (cmp(faddr, valuep, op))
+ DbRecord_print(&record, NULL);
+ else
+ if (op == EQ || op == LT || op == LTEQ)
+ break;
+ } while ((ret =
+ dbc->c_pget(dbc, &key, &pkey, &data, DB_NEXT)) == 0);
+ }
+
+done: if (ret == DB_NOTFOUND)
+ ret = 0;
+
+err: if (dbc != NULL && (t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+#ifdef HAVE_WILDCARD_SUPPORT
+ if (op == WC || op == NWC)
+ regfree(&preq);
+#endif
+
+ return (ret);
+}
diff --git a/db/examples_c/csv/README b/db/examples_c/csv/README
new file mode 100644
index 000000000..c96718e62
--- /dev/null
+++ b/db/examples_c/csv/README
@@ -0,0 +1,409 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: README,v 1.18 2006/08/24 14:45:42 bostic Exp $
+ */
+
+The "comma-separated value" (csv) directory is a suite of three programs:
+
+ csv_code: write "helper" code on which to build applications,
+ csv_load: import csv files into a Berkeley DB database,
+ csv_query: query databases created by csv_load.
+
+The goal is to allow programmers to easily build applications for using
+csv databases.
+
+You can build the three programs, and run a sample application in this
+directory.
+
+First, there's the sample.csv file:
+
+ Adams,Bob,01/02/03,green,apple,37
+ Carter,Denise Ann,04/05/06,blue,banana,38
+ Eidel,Frank,07/08/09,red,cherry,38
+ Grabel,Harriet,10/11/12,purple,date,40
+ Indals,Jason,01/03/05,pink,orange,32
+ Kilt,Laura,07/09/11,yellow,grape,38
+ Moreno,Nancy,02/04/06,black,strawberry,38
+ Octon,Patrick,08/10/12,magenta,kiwi,15
+
+The fields are:
+ Last name,
+ First name,
+ Birthdate,
+ Favorite color,
+ Favorite fruit,
+ Age
+
+Second, there's a "description" of that csv file in sample.desc:
+
+ version 1 {
+ LastName string
+ FirstName string
+ BirthDate
+ Color string index
+ Fruit string index
+ Age ulong index
+ }
+
+The DESCRIPTION file maps one-to-one to the fields in the csv file, and
+provides a data type for any field the application wants to use. (If
+the application doesn't care about a field, don't specify a data type
+and the csv code will ignore it.) The string "index" specifies there
+should be a secondary index based on the field.
+
+The "field" names in the DESCRIPTION file don't have to be the same as
+the ones in the csv file (and, as they may not have embedded spaces,
+probably won't be).
+
+To build in the sample directory, on POSIX-like systems, type "make".
+This first builds the program csv_code, which it then run, with the file
+DESCRIPTION as an input. Running csv_code creates two additional files:
+csv_local.c and csv_local.h. Those two files are then used as part of
+the build process for two more programs: csv_load and csv_query.
+
+You can load now load the csv file into a Berkeley DB database with the
+following command:
+
+ % ./csv_load -h TESTDIR < sample.csv
+
+The csv_load command will create a directory and four databases:
+
+ primary primary database
+ Age secondary index on Age field
+ Color secondary index on Color field
+ Fruit secondary index on Fruit field
+
+You can then query the database:
+
+ % ./csv_query -h TESTDIR
+ Query: id=2
+ Record: 2:
+ LastName: Carter
+ FirstName: Denise
+ Color: blue
+ Fruit: banana
+ Age: 38
+ Query: color==green
+ Record: 1:
+ LastName: Adams
+ FirstName: Bob
+ Color: green
+ Fruit: apple
+ Age: 37
+
+and so on.
+
+The csv_code process also creates source code modules that support
+building your own applications based on this database. First, there
+is the local csv_local.h include file:
+
+ /*
+ * DO NOT EDIT: automatically built by csv_code.
+ *
+ * Record structure.
+ */
+ typedef struct __DbRecord {
+ u_int32_t recno; /* Record number */
+
+ /*
+ * Management fields
+ */
+ void *raw; /* Memory returned by DB */
+ char *record; /* Raw record */
+ size_t record_len; /* Raw record length */
+
+ u_int32_t field_count; /* Field count */
+ u_int32_t version; /* Record version */
+
+ u_int32_t *offset; /* Offset table */
+
+ /*
+ * Indexed fields
+ */
+ #define CSV_INDX_LASTNAME 1
+ char *LastName;
+
+ #define CSV_INDX_FIRSTNAME 2
+ char *FirstName;
+
+ #define CSV_INDX_COLOR 4
+ char *Color;
+
+ #define CSV_INDX_FRUIT 5
+ char *Fruit;
+
+ #define CSV_INDX_AGE 6
+ u_long Age;
+ } DbRecord;
+
+This defines the DbRecord structure that is the primary object for this
+csv file. As you can see, the intersting fields in the csv file have
+mappings in this structure.
+
+Also, there are routines in the Dbrecord.c file your application can use
+to handle DbRecord structures. When you retrieve a record from the
+database the DbRecord structure will be filled in based on that record.
+
+Here are the helper routines:
+
+ int
+ DbRecord_print(DbRecord *recordp, FILE *fp)
+ Display the contents of a DbRecord structure to the specified
+ output stream.
+
+ int
+ DbRecord_init(const DBT *key, DBT *data, DbRecord *recordp)
+ Fill in a DbRecord from a returned database key/data pair.
+
+ int
+ DbRecord_read(u_long key, DbRecord *recordp)
+ Read the specified record (DbRecord_init will be called
+ to fill in the DbRecord).
+
+ int
+ DbRecord_discard(DbRecord *recordp)
+ Discard the DbRecord structure (must be called after the
+ DbRecord_read function), when the application no longer
+ needs the returned DbRecord.
+
+ int
+ DbRecord_search_field_name(char *field, char *value, OPERATOR op)
+ Display the DbRecords where the field (named by field) has
+ the specified relationship to the value. For example:
+
+ DbRecord_search_field_name("Age", "35", GT)
+
+ would search for records with a "Age" field greater than
+ 35.
+
+ int
+ DbRecord_search_field_number(
+ u_int32_t fieldno, char *value, OPERATOR op)
+ Display the DbRecords where the field (named by field)
+ has the specified relationship to the value. The field
+ number used as an argument comes from the csv_local.h
+ file, for example, CSV_INDX_AGE is the field index for
+ the "Age" field in this csv file. For example:
+
+ DbRecord_search_field_number(CSV_INDX_AGE, 35, GT)
+
+ would search for records with a "Age" field greater than
+ 35.
+
+ Currently, the csv code only supports three types of data:
+ strings, unsigned longs and doubles. Others can easily be
+ added.
+
+The usage of the csv_code program is as follows:
+
+ usage: csv_code [-v] [-c source-file] [-f input] [-h header-file]
+ -c output C source code file
+ -h output C header file
+ -f input file
+ -v verbose (defaults to off)
+
+ -c A file to which to write the C language code. By default,
+ the file "csv_local.c" is used.
+
+ -f A file to read for a description of the fields in the
+ csv file. By default, csv_code reads from stdin.
+
+ -h A file to which to write the C language header structures.
+ By default, the file "csv_local.h" is used.
+
+ -v The -v verbose flag outputs potentially useful debugging
+ information.
+
+There are two applications built on top of the code produced by
+csv_code, csv_load and csv_query.
+
+The usage of the csv_load program is as follows:
+
+ usage: csv_load [-v] [-F format] [-f csv-file] [-h home] [-V version]
+ -F format (currently supports "excel")
+ -f input file
+ -h database environment home directory
+ -v verbose (defaults to off)
+
+ -F See "Input format" below.
+
+ -f If an input file is specified using the -f flag, the file
+ is read and the records in the file are stored into the
+ database. By default, csv_load reads from stdin.
+
+ -h If a database environment home directory is specified
+ using the -h flag, that directory is used as the
+ Berkeley DB directory. The default for -h is the
+ current working directory or the value of the DB_HOME
+ environment variable.
+
+ -V Specify a version number for the input (the default is 1).
+
+ -v The -v verbose flag outputs potentially useful debugging
+ information. It can be specified twice for additional
+ information.
+
+The usage of csv_query program is as follows:
+
+ usage: csv_query [-v] [-c cmd] [-h home]
+
+ -c A command to run, otherwise csv_query will enter
+ interactive mode and prompt for user input.
+
+ -h If a database environment home directory is specified
+ using the -h flag, that directory is used as the
+ Berkeley DB directory. The default for -h is the
+ current working directory or the value of the DB_HOME
+ environment variable.
+
+ -v The -v verbose flag outputs potentially useful debugging
+ information. It can be specified twice for additional
+ information.
+
+The query program currently supports the following commands:
+
+ ? Display help screen
+ exit Exit program
+ fields Display list of field names
+ help Display help screen
+ quit Exit program
+ version Display database format version
+ field[op]value Display fields by value (=, !=, <, <=, >, >=, ~, !~)
+
+The "field[op]value" command allows you to specify a field and a
+relationship to a value. For example, you could run the query:
+
+ csv_query -c "price < 5"
+
+to list all of the records with a "price" field less than "5".
+
+Field names and all string comparisons are case-insensitive.
+
+The operators ~ and !~ do match/no-match based on the IEEE Std 1003.2
+(POSIX.2) Basic Regular Expression standard.
+
+As a special case, every database has the field "Id", which matches the
+record number of the primary key.
+
+Input format:
+ The input to the csv_load utility is a text file, containing
+ lines of comma-separated fields.
+
+ Blank lines are ignored. All non-blank lines must be comma-separated
+ lists of fields.
+
+ By default:
+ <nul> (\000) bytes and unprintable characters are stripped,
+ input lines are <nl> (\012) separated,
+ commas cannot be escaped.
+
+ If "-F excel" is specified:
+ <nul> (\000) bytes and unprintable characters are stripped,
+ input lines are <cr> (\015) separated,
+ <nl> bytes (\012) characters are stripped from the input,
+ commas surrounded by double-quote character (") are not
+ treated as field separators.
+
+Storage format:
+ Records in the primary database are stored with a 32-bit unsigned
+ record number as the key.
+
+ Key/Data pair 0 is of the format:
+ [version] 32-bit unsigned int
+ [field count] 32-bit unsigned int
+ [raw record] byte array
+
+ For example:
+ [1]
+ [5]
+ [field1,field2,field3,field4,field5]
+
+ All other Key/Data pairs are of the format:
+ [version] 32-bit unsigned int
+ [offset to field 1] 32-bit unsigned int
+ [offset to field 2] 32-bit unsigned int
+ [offset to field 3] 32-bit unsigned int
+ ... 32-bit unsigned int
+ [offset to field N] 32-bit unsigned int
+ [offset past field N] 32-bit unsigned int
+ [raw record] byte array
+
+ For example:
+ [1]
+ [0]
+ [2]
+ [5]
+ [9]
+ [14]
+ [19]
+ [a,ab,abc,abcd,abcde]
+ 012345678901234567890 << byte offsets
+ 0 1 2
+
+ So, field 3 of the data can be directly accessed by using
+ the "offset to field 3", and the length of the field is
+ the "((offset to field 4) - (offset to field 3)) - 1".
+
+Limits:
+ The csv program stores the primary key in a 32-bit unsigned
+ value, limiting the number of records in the database. New
+ records are inserted after the last existing record, that is,
+ new records are not inserted into gaps left by any deleted
+ records. This will limit the total number of records stored in
+ any database.
+
+Versioning:
+ Versioning is when a database supports multiple versions of the
+ records. This is likely to be necessary when dealing with large
+ applications and databases, as record fields change over time.
+
+ The csv application suite does not currently support versions,
+ although all of the necessary hooks are there.
+
+ The way versioning will work is as follows:
+
+ The XXX.desc file needs to support multiple version layouts.
+
+ The generated C language structure defined should be a superset
+ of all of the interesting fields from all of the version
+ layouts, regardless of which versions of the csv records those
+ fields exist in.
+
+ When the csv layer is asked for a record, the record's version
+ will provide a lookup into a separate database of field lists.
+ That is, there will be another database which has key/data pairs
+ where the key is a version number, and the data is the field
+ list. At that point, it's relatively easy to map the fields
+ to the structure as is currently done, except that some of the
+ fields may not be filled in.
+
+ To determine if a field is filled in, in the structure, the
+ application has to have an out-of-band value to put in that
+ field during DbRecord initialization. If that's a problem, the
+ alternative would be to add an additional field for each listed
+ field -- if the additional field is set to 1, the listed field
+ has been filled in, otherwise it hasn't. The csv code will
+ support the notion of required fields, so in most cases the
+ application won't need to check before simply using the field,
+ it's only if a field isn't required and may be filled in that
+ the check will be necessary.
+
+TODO:
+ Csv databases are not portable between machines of different
+ byte orders. To make them portable, all of the 32-bit unsigned
+ int fields currently written into the database should be
+ converted to a standard byte order. This would include the
+ version number and field count in the column-map record, and the
+ version and field offsets in the other records.
+
+ Add Extended RE string matches.
+
+ Add APIs to replace the reading of a schema file, allow users to
+ fill in a DbRecord structure and do a put on it. (Hard problem:
+ how to flag fields that aren't filled in.)
+
+ Add a second sample file, and write the actual versioning code.
diff --git a/db/examples_c/csv/code.c b/db/examples_c/csv/code.c
new file mode 100644
index 000000000..85569f2b4
--- /dev/null
+++ b/db/examples_c/csv/code.c
@@ -0,0 +1,406 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: code.c,v 1.12 2006/08/24 14:45:42 bostic Exp $
+ */
+
+#include "csv.h"
+
+typedef struct {
+ char *name; /* Field name */
+ char *upper; /* Field name in upper-case */
+ datatype type; /* Data type */
+ int indx; /* Index */
+} FIELD;
+
+int code_source(void);
+int code_header(void);
+int desc_dump(void);
+int desc_load(void);
+char *type_to_string(datatype);
+int usage(void);
+
+/*
+ * Globals
+ */
+FILE *cfp; /* C source file */
+FILE *hfp; /* C source file */
+char *progname; /* Program name */
+int verbose; /* Verbose flag */
+
+u_int field_cnt; /* Count of fields */
+FIELD *fields; /* Field list */
+
+int
+main(int argc, char *argv[])
+{
+ int ch;
+ char *cfile, *hfile;
+
+ /* Initialize globals. */
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+
+ /* Initialize arguments. */
+ cfile = "csv_local.c"; /* Default header/source files */
+ hfile = "csv_local.h";
+
+ /* Process arguments. */
+ while ((ch = getopt(argc, argv, "c:f:h:v")) != EOF)
+ switch (ch) {
+ case 'c':
+ cfile = optarg;
+ break;
+ case 'f':
+ if (freopen(optarg, "r", stdin) == NULL) {
+ fprintf(stderr,
+ "%s: %s\n", optarg, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ break;
+ case 'h':
+ hfile = optarg;
+ break;
+ case 'v':
+ ++verbose;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (*argv != NULL)
+ return (usage());
+
+ /* Load records from the input file. */
+ if (desc_load())
+ return (EXIT_FAILURE);
+
+ /* Dump records for debugging. */
+ if (verbose && desc_dump())
+ return (EXIT_FAILURE);
+
+ /* Open output files. */
+ if ((cfp = fopen(cfile, "w")) == NULL) {
+ fprintf(stderr,
+ "%s: %s: %s\n", progname, cfile, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ if ((hfp = fopen(hfile, "w")) == NULL) {
+ fprintf(stderr,
+ "%s: %s: %s\n", progname, hfile, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+
+ /* Build the source and header files. */
+ if (code_header())
+ return (EXIT_FAILURE);
+ if (code_source())
+ return (EXIT_FAILURE);
+
+ return (EXIT_SUCCESS);
+}
+
+/*
+ * desc_load --
+ * Load a description file.
+ */
+int
+desc_load()
+{
+ u_int field_alloc;
+ int version;
+ char *p, *t, save_ch, buf[256];
+
+ field_alloc = version = 0;
+ while (fgets(buf, sizeof(buf), stdin) != NULL) {
+ if ((p = strchr(buf, '\n')) == NULL) {
+ fprintf(stderr, "%s: input line too long\n", progname);
+ return (1);
+ }
+ *p = '\0';
+
+ /* Skip leading whitespace. */
+ for (p = buf; isspace(*p); ++p)
+ ;
+
+ /* Skip empty lines or lines beginning with '#'. */
+ if (*p == '\0' || *p == '#')
+ continue;
+
+ /* Get a version. */
+ if (!version) {
+ if (strncasecmp(
+ p, "version", sizeof("version") - 1) == 0) {
+ version = 1;
+ continue;
+ }
+ fprintf(stderr,
+ "%s: expected \"version\" line\n", progname);
+ return (1);
+ }
+
+ /*
+ * Skip block close -- not currently useful, but when this
+ * code supports versioned descriptions, it will matter.
+ */
+ if (*p == '}') {
+ version = 0;
+ continue;
+ }
+
+ /* Allocate a new field structure as necessary. */
+ if (field_cnt == field_alloc &&
+ (fields = realloc(fields, field_alloc += 100)) == NULL) {
+ fprintf(stderr, "%s: %s\n", progname, strerror(errno));
+ return (1);
+ }
+
+ /* Find the end of the field name. */
+ for (t = p; *t != '\0' && !isspace(*t); ++t)
+ ;
+ save_ch = *t;
+ *t = '\0';
+ if ((fields[field_cnt].name = strdup(p)) == NULL ||
+ (fields[field_cnt].upper = strdup(p)) == NULL) {
+ fprintf(stderr, "%s: %s\n", progname, strerror(errno));
+ return (1);
+ }
+ *t = save_ch;
+ p = t;
+
+ fields[field_cnt].indx = 0;
+ fields[field_cnt].type = NOTSET;
+ for (;;) {
+ /* Skip to the next field, if any. */
+ for (; *p != '\0' && isspace(*p); ++p)
+ ;
+ if (*p == '\0')
+ break;
+
+ /* Find the end of the field. */
+ for (t = p; *t != '\0' && !isspace(*t); ++t)
+ ;
+ save_ch = *t;
+ *t = '\0';
+ if (strcasecmp(p, "double") == 0)
+ fields[field_cnt].type = DOUBLE;
+ else if (strcasecmp(p, "index") == 0)
+ fields[field_cnt].indx = 1;
+ else if (strcasecmp(p, "string") == 0)
+ fields[field_cnt].type = STRING;
+ else if (strcasecmp(p, "ulong") == 0)
+ fields[field_cnt].type = ULONG;
+ else {
+ fprintf(stderr,
+ "%s: unknown keyword: %s\n", progname, p);
+ return (1);
+ }
+ *t = save_ch;
+ p = t;
+ }
+
+ /* Create a copy of the field name that's upper-case. */
+ for (p = fields[field_cnt].upper; *p != '\0'; ++p)
+ if (islower(*p))
+ *p = (char)toupper(*p);
+ ++field_cnt;
+ }
+ if (ferror(stdin)) {
+ fprintf(stderr, "%s: stdin: %s\n", progname, strerror(errno));
+ return (1);
+ }
+ return (0);
+}
+
+/*
+ * desc_dump --
+ * Dump a set of FIELD structures.
+ */
+int
+desc_dump()
+{
+ FIELD *f;
+ u_int i;
+
+ for (f = fields, i = 0; i < field_cnt; ++i, ++f) {
+ fprintf(stderr, "field {%s}: (", f->name);
+ switch (f->type) {
+ case NOTSET:
+ fprintf(stderr, "ignored");
+ break;
+ case DOUBLE:
+ fprintf(stderr, "double");
+ break;
+ case STRING:
+ fprintf(stderr, "string");
+ break;
+ case ULONG:
+ fprintf(stderr, "ulong");
+ break;
+ }
+ if (f->indx)
+ fprintf(stderr, ", indexed");
+ fprintf(stderr, ")\n");
+ }
+ return (0);
+}
+
+/*
+ * code_header --
+ * Print out the C #include file.
+ */
+int
+code_header()
+{
+ FIELD *f;
+ u_int i;
+
+ fprintf(hfp, "/*\n");
+ fprintf(hfp, " * DO NOT EDIT: automatically built by %s.\n", progname);
+ fprintf(hfp, " *\n");
+ fprintf(hfp, " * Record structure.\n");
+ fprintf(hfp, " */\n");
+ fprintf(hfp, "typedef struct __DbRecord {\n");
+ fprintf(hfp, "\tu_int32_t\t recno;\t\t/* Record number */\n");
+ fprintf(hfp, "\n");
+ fprintf(hfp, "\t/*\n");
+ fprintf(hfp, "\t * Management fields\n");
+ fprintf(hfp, "\t */\n");
+ fprintf(hfp, "\tvoid\t\t*raw;\t\t/* Memory returned by DB */\n");
+ fprintf(hfp, "\tu_char\t\t*record;\t/* Raw record */\n");
+ fprintf(hfp, "\tsize_t\t\t record_len;\t/* Raw record length */\n\n");
+ fprintf(hfp, "\tu_int32_t\t field_count;\t/* Field count */\n");
+ fprintf(hfp, "\tu_int32_t\t version;\t/* Record version */\n\n");
+ fprintf(hfp, "\tu_int32_t\t*offset;\t/* Offset table */\n");
+ fprintf(hfp, "\n");
+
+ fprintf(hfp, "\t/*\n");
+ fprintf(hfp, "\t * Indexed fields\n");
+ fprintf(hfp, "\t */\n");
+ for (f = fields, i = 0; i < field_cnt; ++i, ++f) {
+ if (f->type == NOTSET)
+ continue;
+ if (i != 0)
+ fprintf(hfp, "\n");
+ fprintf(hfp, "#define CSV_INDX_%s\t%d\n", f->upper, i + 1);
+ switch (f->type) {
+ case NOTSET:
+ /* NOTREACHED */
+ abort();
+ break;
+ case DOUBLE:
+ fprintf(hfp, "\tdouble\t\t %s;\n", f->name);
+ break;
+ case STRING:
+ fprintf(hfp, "\tchar\t\t*%s;\n", f->name);
+ break;
+ case ULONG:
+ fprintf(hfp, "\tu_long\t\t %s;\n", f->name);
+ break;
+ }
+ }
+ fprintf(hfp, "} DbRecord;\n");
+
+ return (0);
+}
+
+/*
+ * code_source --
+ * Print out the C structure initialization.
+ */
+int
+code_source()
+{
+ FIELD *f;
+ u_int i;
+
+ fprintf(cfp, "/*\n");
+ fprintf(cfp,
+ " * DO NOT EDIT: automatically built by %s.\n", progname);
+ fprintf(cfp, " *\n");
+ fprintf(cfp, " * Initialized record structure.\n");
+ fprintf(cfp, " */\n");
+ fprintf(cfp, "\n");
+ fprintf(cfp, "#include \"csv.h\"\n");
+ fprintf(cfp, "#include \"csv_local.h\"\n");
+ fprintf(cfp, "\n");
+ fprintf(cfp, "DbRecord DbRecord_base = {\n");
+ fprintf(cfp, "\t0,\t\t/* Record number */\n");
+ fprintf(cfp, "\tNULL,\t\t/* Memory returned by DB */\n");
+ fprintf(cfp, "\tNULL,\t\t/* Raw record */\n");
+ fprintf(cfp, "\t0,\t\t/* Raw record length */\n");
+ fprintf(cfp, "\t%d,\t\t/* Field count */\n", field_cnt);
+ fprintf(cfp, "\t0,\t\t/* Record version */\n");
+ fprintf(cfp, "\tNULL,\t\t/* Offset table */\n");
+ fprintf(cfp, "\n");
+ for (f = fields, i = 0; i < field_cnt; ++i, ++f) {
+ if (f->type == NOTSET)
+ continue;
+ switch (f->type) {
+ case NOTSET:
+ abort();
+ /* NOTREACHED */
+ break;
+ case DOUBLE:
+ case ULONG:
+ fprintf(cfp, "\t0,\t\t/* %s */\n", f->name);
+ break;
+ case STRING:
+ fprintf(cfp, "\tNULL,\t\t/* %s */\n", f->name);
+ break;
+ }
+ }
+ fprintf(cfp, "};\n");
+
+ fprintf(cfp, "\n");
+ fprintf(cfp, "DbField fieldlist[] = {\n");
+ for (f = fields, i = 0; i < field_cnt; ++i, ++f) {
+ if (f->type == NOTSET)
+ continue;
+ fprintf(cfp, "\t{ \"%s\",", f->name);
+ fprintf(cfp, " CSV_INDX_%s,", f->upper);
+ fprintf(cfp, "\n\t %s,", type_to_string(f->type));
+ fprintf(cfp, " %d,", f->indx ? 1 : 0);
+ fprintf(cfp, " NULL,");
+ fprintf(cfp, " FIELD_OFFSET(%s)},\n", f->name);
+ }
+ fprintf(cfp, "\t{NULL, 0, STRING, 0, NULL, 0}\n};\n");
+
+ return (0);
+}
+
+char *
+type_to_string(type)
+ datatype type;
+{
+ switch (type) {
+ case NOTSET:
+ return ("NOTSET");
+ case DOUBLE:
+ return ("DOUBLE");
+ case STRING:
+ return ("STRING");
+ case ULONG:
+ return ("ULONG");
+ }
+
+ abort();
+ /* NOTREACHED */
+}
+
+int
+usage()
+{
+ (void)fprintf(stderr,
+ "usage: %s [-v] [-c source-file] [-f input] [-h header-file]\n",
+ progname);
+ exit(1);
+}
diff --git a/db/examples_c/csv/csv.h b/db/examples_c/csv/csv.h
new file mode 100644
index 000000000..c6cfd93f4
--- /dev/null
+++ b/db/examples_c/csv/csv.h
@@ -0,0 +1,102 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: csv.h,v 1.15 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN 1
+
+#include <direct.h>
+#include <db.h>
+
+extern int getopt(int, char * const *, const char *);
+extern char *optarg;
+extern int optind;
+#else
+#define HAVE_WILDCARD_SUPPORT 1
+
+#include <regex.h>
+#include <unistd.h>
+#endif
+
+#include "db.h"
+
+/*
+ * MAP_VERSION
+ * This code has hooks for versioning, but does not directly support it.
+ * See the README file for details.
+ */
+#define MAP_VERSION 1
+
+/*
+ * Supported formats.
+ *
+ * FORMAT_NL: <nl> separated
+ * FORMAT_EXCEL: Excel dumped flat text.
+ */
+typedef enum { FORMAT_EXCEL, FORMAT_NL } input_fmt;
+
+/*
+ * OFFSET_LEN
+ * The length of any item can be calculated from the two offset fields.
+ * OFFSET_OOB
+ * An offset that's illegal, used to detect unavailable fields.
+ */
+#define OFFSET_LEN(offset, indx) \
+ (((offset)[(indx) + 1] - (offset)[(indx)]) - 1)
+
+#define OFFSET_OOB 0
+
+/*
+ * Field comparison operators.
+ */
+typedef enum { EQ=1, NEQ, GT, GTEQ, LT, LTEQ, WC, NWC } OPERATOR;
+
+/*
+ * Supported data types.
+ */
+typedef enum { NOTSET=1, DOUBLE, STRING, ULONG } datatype;
+
+/*
+ * C structure that describes the csv fields.
+ */
+typedef struct {
+ char *name; /* Field name */
+ u_int32_t fieldno; /* Field index */
+ datatype type; /* Data type */
+
+ int indx; /* Indexed */
+ DB *secondary; /* Secondary index handle */
+
+#define FIELD_OFFSET(field) ((size_t)(&(((DbRecord *)0)->field)))
+ size_t offset; /* DbRecord field offset */
+} DbField;
+
+/*
+ * Globals
+ */
+extern DB *db; /* Primary database */
+extern DbField fieldlist[]; /* Field list */
+extern DB_ENV *dbenv; /* Database environment */
+extern char *progname; /* Program name */
+extern int verbose; /* Program verbosity */
+#ifdef _WIN32
+#undef strcasecmp
+#define strcasecmp _stricmp
+#undef strncasecmp
+#define strncasecmp _strnicmp
+#define mkdir(d, perm) _mkdir(d)
+#endif
diff --git a/db/examples_c/csv/csv_extern.h b/db/examples_c/csv/csv_extern.h
new file mode 100644
index 000000000..534bae2b5
--- /dev/null
+++ b/db/examples_c/csv/csv_extern.h
@@ -0,0 +1,38 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: csv_extern.h,v 1.7 2006/08/24 14:45:43 bostic Exp $
+ */
+
+extern DbRecord DbRecord_base; /* Initialized structure. */
+
+/*
+ * Prototypes
+ */
+extern int DbRecord_discard(DbRecord *);
+extern int DbRecord_init(const DBT *, const DBT *, DbRecord *);
+extern void DbRecord_print(DbRecord *, FILE *);
+extern int DbRecord_read(u_long, DbRecord *);
+extern int DbRecord_search_field_name(char *, char *, OPERATOR);
+extern int DbRecord_search_field_number(u_int, char *, OPERATOR);
+extern int compare_double(DB *, const DBT *, const DBT *);
+extern int compare_string(DB *, const DBT *, const DBT *);
+extern int compare_ulong(DB *, const DBT *, const DBT *);
+extern int csv_env_close(void);
+extern int csv_env_open(const char *, int);
+extern int csv_secondary_close(void);
+extern int csv_secondary_open(void);
+extern int entry_print(void *, size_t, u_int32_t);
+extern int field_cmp_double(void *, void *, OPERATOR);
+extern int field_cmp_re(void *, void *, OPERATOR);
+extern int field_cmp_string(void *, void *, OPERATOR);
+extern int field_cmp_ulong(void *, void *, OPERATOR);
+extern int input_load(input_fmt, u_long);
+extern int query(char *, int *);
+extern int query_interactive(void);
+extern int secondary_callback(DB *, const DBT *, const DBT *, DBT *);
+extern int strtod_err(char *, double *);
+extern int strtoul_err(char *, u_long *);
diff --git a/db/examples_c/csv/db.c b/db/examples_c/csv/db.c
new file mode 100644
index 000000000..0e7d2cd58
--- /dev/null
+++ b/db/examples_c/csv/db.c
@@ -0,0 +1,245 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: db.c,v 1.14 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+static int compare_uint32(DB *, const DBT *, const DBT *);
+
+/*
+ * csv_env_init --
+ * Initialize the database environment.
+ */
+int
+csv_env_open(const char *home, int is_rdonly)
+{
+ int ret;
+
+ dbenv = NULL;
+ db = NULL;
+
+ /* Create a database environment handle. */
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(stderr,
+ "%s: db_env_create: %s\n", progname, db_strerror(ret));
+ return (1);
+ }
+
+ /*
+ * Configure Berkeley DB error reporting to stderr, with our program
+ * name as the prefix.
+ */
+ dbenv->set_errfile(dbenv, stderr);
+ dbenv->set_errpfx(dbenv, progname);
+
+ /*
+ * The default Berkeley DB cache size is fairly small; configure a
+ * 1MB cache for now. This value will require tuning in the future.
+ */
+ if ((ret = dbenv->set_cachesize(dbenv, 0, 1048576, 1)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->set_cachesize");
+ return (1);
+ }
+
+ /*
+ * We may be working with an existing environment -- try and join it.
+ * If that fails, create a new database environment; for now, we only
+ * need a cache, no logging, locking, or transactions.
+ */
+ if ((ret = dbenv->open(dbenv, home,
+ DB_JOINENV | 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, "DB_ENV->open");
+ return (1);
+ }
+
+ /* Create the primary database handle. */
+ if ((ret = db_create(&db, dbenv, 0)) != 0) {
+ dbenv->err(dbenv, ret, "db_create");
+ return (1);
+ }
+
+ /*
+ * Records may be relatively large -- use a large page size.
+ */
+ if ((ret = db->set_pagesize(db, 32 * 1024)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_pagesize");
+ return (1);
+ }
+
+ /*
+ * The primary database uses an integer as its key; on little-endian
+ * machines, integers sort badly using the default Berkeley DB sort
+ * function (which is lexicographic). Specify a comparison function
+ * for the database.
+ */
+ if ((ret = db->set_bt_compare(db, compare_uint32)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_bt_compare");
+ return (1);
+ }
+
+ /* Open the primary database. */
+ if ((ret = db->open(db, NULL,
+ "primary", NULL, DB_BTREE, is_rdonly ? 0 : DB_CREATE, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->open: primary");
+ return (1);
+ }
+
+ /* Open the secondaries. */
+ if ((ret = csv_secondary_open()) != 0)
+ return (1);
+
+ return (0);
+}
+
+/*
+ * csv_env_close --
+ * Discard the database environment.
+ */
+int
+csv_env_close()
+{
+ int ret, t_ret;
+
+ ret = 0;
+
+ /* Close the secondaries. */
+ ret = csv_secondary_close();
+
+ /* Close the primary handle. */
+ if (db != NULL && (t_ret = db->close(db, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->close");
+ if (ret == 0)
+ ret = t_ret;
+ }
+ if ((t_ret = dbenv->close(dbenv, 0)) != 0) {
+ fprintf(stderr,
+ "%s: DB_ENV->close: %s\n", progname, db_strerror(ret));
+ if (ret == 0)
+ ret = t_ret;
+ }
+
+ return (ret);
+}
+
+/*
+ * csv_secondary_open --
+ * Open any secondary indices.
+ */
+int
+csv_secondary_open()
+{
+ DB *sdb;
+ DbField *f;
+ int ret, (*fcmp)(DB *, const DBT *, const DBT *);
+
+ /*
+ * Create secondary database handles.
+ */
+ for (f = fieldlist; f->name != NULL; ++f) {
+ if (f->indx == 0)
+ continue;
+
+ if ((ret = db_create(&sdb, dbenv, 0)) != 0) {
+ dbenv->err(dbenv, ret, "db_create");
+ return (1);
+ }
+ sdb->app_private = f;
+
+ /* Keys are small, use a relatively small page size. */
+ if ((ret = sdb->set_pagesize(sdb, 8 * 1024)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_pagesize");
+ return (1);
+ }
+
+ /*
+ * Sort the database based on the underlying type. Skip
+ * strings, Berkeley DB defaults to lexicographic sort.
+ */
+ switch (f->type) {
+ case DOUBLE:
+ fcmp = compare_double;
+ break;
+ case ULONG:
+ fcmp = compare_ulong;
+ break;
+ case NOTSET:
+ case STRING:
+ default:
+ fcmp = NULL;
+ break;
+ }
+ if (fcmp != NULL &&
+ (ret = sdb->set_bt_compare(sdb, fcmp)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_bt_compare");
+ return (1);
+ }
+
+ /* Always configure secondaries for sorted duplicates. */
+ if ((ret = sdb->set_flags(sdb, DB_DUPSORT)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_flags");
+ return (1);
+ }
+ if ((ret = sdb->set_dup_compare(sdb, compare_ulong)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_dup_compare");
+ return (1);
+ }
+
+ if ((ret = sdb->open(
+ sdb, NULL, f->name, NULL, DB_BTREE, DB_CREATE, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->open: %s", f->name);
+ return (1);
+ }
+ if ((ret = sdb->associate(
+ db, NULL, sdb, secondary_callback, DB_CREATE)) != 0) {
+ dbenv->err(dbenv, ret, "DB->set_associate");
+ return (1);
+ }
+ f->secondary = sdb;
+ }
+
+ return (0);
+}
+
+/*
+ * csv_secondary_close --
+ * Close any secondary indices.
+ */
+int
+csv_secondary_close()
+{
+ DbField *f;
+ int ret, t_ret;
+
+ ret = 0;
+ for (f = fieldlist; f->name != NULL; ++f)
+ if (f->secondary != NULL && (t_ret =
+ f->secondary->close(f->secondary, 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * compare_uint32 --
+ * Compare two keys.
+ */
+static int
+compare_uint32(DB *db_arg, const DBT *a_arg, const DBT *b_arg)
+{
+ u_int32_t a, b;
+
+ db_arg = db_arg; /* Quiet compiler. */
+
+ memcpy(&a, a_arg->data, sizeof(u_int32_t));
+ memcpy(&b, b_arg->data, sizeof(u_int32_t));
+ return (a > b ? 1 : ((a < b) ? -1 : 0));
+}
diff --git a/db/examples_c/csv/load.c b/db/examples_c/csv/load.c
new file mode 100644
index 000000000..c581e69ee
--- /dev/null
+++ b/db/examples_c/csv/load.c
@@ -0,0 +1,347 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: load.c,v 1.9 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+typedef enum { GL_OK, GL_EOF, GL_FAIL } getline_status;
+
+static int input_field_count(const char *, size_t, u_int32_t *);
+static getline_status
+ input_getline(char **, size_t *, size_t *);
+static int input_put_alloc(u_int32_t **, size_t *, size_t, u_int32_t);
+static int input_set_offset(u_int32_t *, char *, size_t, u_int32_t);
+
+static input_fmt ifmt; /* Input format. */
+static u_long record_count = 0; /* Input record count for errors. */
+static u_long version; /* Version we're loading. */
+
+/*
+ * input_load --
+ * Read the input file and load new records into the database.
+ */
+int
+input_load(input_fmt ifmt_arg, u_long version_arg)
+{
+ getline_status gtl_status;
+ DBT key, data;
+ DBC *cursor;
+ u_int32_t field_count, primary_key, *put_line;
+ size_t input_len, len, put_len;
+ int is_first, ret;
+ char *input_line;
+
+ field_count = 0; /* Shut the compiler up. */
+
+ /* ifmt and version are global to this file. */
+ ifmt = ifmt_arg;
+ version = version_arg;
+
+ /*
+ * The primary key for the database is a unique number. Find out the
+ * last unique number allocated in this database by opening a cursor
+ * and fetching the last record.
+ */
+ if ((ret = db->cursor(db, NULL, &cursor, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->cursor");
+ return (1);
+ }
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ if ((ret = cursor->c_get(cursor, &key, &data, DB_LAST)) != 0)
+ if (ret == DB_NOTFOUND)
+ primary_key = 0;
+ else {
+ dbenv->err(dbenv, ret, "DB->cursor: DB_LAST");
+ return (1);
+ }
+ else
+ memcpy(&primary_key, key.data, sizeof(primary_key));
+ if ((ret = cursor->c_close(cursor)) != 0) {
+ dbenv->err(dbenv, ret, "DBC->close");
+ return (1);
+ }
+ if (verbose)
+ dbenv->errx(dbenv,
+ "maximum existing record in the database is %lu",
+ (u_long)primary_key);
+
+ key.data = &primary_key;
+ key.size = sizeof(primary_key);
+ input_line = NULL;
+ put_line = NULL;
+ input_len = put_len = 0;
+
+ /*
+ * See the README file for a description of the file input format.
+ */
+ for (is_first = 1; (gtl_status =
+ input_getline(&input_line, &input_len, &len)) == GL_OK;) {
+ ++record_count;
+ if (verbose > 1)
+ dbenv->errx(dbenv, "reading %lu", (u_long)record_count);
+
+ /* The first non-blank line of the input is a column map. */
+ if (is_first) {
+ is_first = 0;
+
+ /* Count the fields we're expecting in the input. */
+ if (input_field_count(
+ input_line, len, &field_count) != 0)
+ return (1);
+
+ }
+
+ /* Allocate room for the table of offsets. */
+ if (input_put_alloc(
+ &put_line, &put_len, len, field_count) != 0)
+ return (1);
+
+ /*
+ * Build the offset table and create the record we're
+ * going to store.
+ */
+ if (input_set_offset(put_line,
+ input_line, len, field_count) != 0)
+ return (1);
+
+ ++primary_key;
+
+ memcpy(put_line + (field_count + 2), input_line, len);
+ data.data = put_line;
+ data.size = (field_count + 2) * sizeof(u_int32_t) + len;
+
+ if (verbose > 1)
+ (void)entry_print(
+ data.data, data.size, field_count);
+
+ /* Load the key/data pair into the database. */
+ if ((ret = db->put(db, NULL, &key, &data, 0)) != 0) {
+ dbenv->err(dbenv, ret,
+ "DB->put: %lu", (u_long)primary_key);
+ return (1);
+ }
+ }
+
+ if (gtl_status != GL_EOF)
+ return (1);
+
+ if (verbose)
+ dbenv->errx(dbenv,
+ "%lu records read from the input file into the database",
+ record_count);
+
+ /*
+ * This program isn't transactional, limit the window for corruption.
+ */
+ if ((ret = db->sync(db, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->sync");
+ return (1);
+ }
+
+ return (0);
+}
+
+/*
+ * input_getline --
+ * Read in a line of input into a buffer.
+ */
+static getline_status
+input_getline(char **input_linep, size_t *input_lenp, size_t *lenp)
+{
+ size_t input_len, len;
+ int ch;
+ char *input_line, *p, *endp;
+
+ input_line = *input_linep;
+ input_len = *input_lenp;
+
+ p = input_line;
+ endp = input_line + input_len;
+
+ for (len = 0; (ch = getchar()) != EOF;) {
+ if (ch == '\0') /* Strip <nul> (\000) bytes. */
+ continue;
+ switch (ifmt) {
+ case FORMAT_NL:
+ if (ch == '\n')
+ goto end;
+ break;
+ case FORMAT_EXCEL:
+ /* Strip <nl> (\012) bytes. */
+ if (ch == '\n')
+ continue;
+ /*
+ * <cr> (\015) bytes terminate lines.
+ * Skip blank lines.
+ */
+ if (ch == '\015') {
+ if (len == 0)
+ continue;
+ goto end;
+ }
+ }
+ if (input_line == endp) {
+ input_len += 256;
+ input_len *= 2;
+ if ((input_line =
+ realloc(input_line, input_len)) == NULL) {
+ dbenv->err(dbenv, errno,
+ "unable to allocate %lu bytes for record",
+ (u_long)input_len);
+ return (GL_FAIL);
+ }
+ p = input_line;
+ endp = p + input_len;
+ }
+
+ if (isprint(ch)) { /* Strip unprintables. */
+ *p++ = (char)ch;
+ ++len;
+ }
+ }
+
+end: if (len == 0)
+ return (GL_EOF);
+
+ *lenp = len;
+ *input_linep = input_line;
+ *input_lenp = input_len;
+
+ return (GL_OK);
+}
+
+/*
+ * input_field_count --
+ * Count the fields in the line.
+ */
+static int
+input_field_count(const char *line, size_t len, u_int32_t *field_countp)
+{
+ u_int32_t field_count;
+ int quoted;
+
+ field_count = 1;
+
+ /*
+ * There are N-1 separators for N fields, that is, "a,b,c" is three
+ * fields, with two comma separators.
+ */
+ switch (ifmt) {
+ case FORMAT_EXCEL:
+ quoted = 0;
+ for (field_count = 1; len > 0; ++line, --len)
+ if (*line == '"')
+ quoted = !quoted;
+ else if (*line == ',' && !quoted)
+ ++field_count;
+ break;
+ case FORMAT_NL:
+ for (field_count = 1; len > 0; ++line, --len)
+ if (*line == ',')
+ ++field_count;
+ break;
+ }
+ *field_countp = field_count;
+
+ if (verbose)
+ dbenv->errx(dbenv,
+ "input file made up of %lu fields", (u_int)field_count);
+
+ return (0);
+}
+
+/*
+ * input_put_alloc --
+ * Allocate room for the offset table plus the input.
+ */
+static int
+input_put_alloc(u_int32_t **put_linep,
+ size_t *put_lenp, size_t len, u_int32_t field_count)
+{
+ size_t total;
+
+ total = (field_count + 2) * sizeof(u_int32_t) + len;
+ if (total > *put_lenp &&
+ (*put_linep = realloc(*put_linep, *put_lenp += total)) == NULL) {
+ dbenv->err(dbenv, errno,
+ "unable to allocate %lu bytes for record",
+ (u_long)*put_lenp);
+ return (1);
+ }
+ return (0);
+}
+
+/*
+ * input_set_offset --
+ * Build an offset table and record combination.
+ */
+static int
+input_set_offset(u_int32_t *put_line,
+ char *input_line, size_t len, u_int32_t field_count)
+{
+ u_int32_t *op;
+ int quoted;
+ char *p, *endp;
+
+ op = put_line;
+
+ /* The first field is the version number. */
+ *op++ = version;
+
+ /*
+ * Walk the input line, looking for comma separators. It's an error
+ * to have too many or too few fields.
+ */
+ *op++ = 0;
+ quoted = 0;
+ for (p = input_line, endp = input_line + len;; ++p) {
+ if (ifmt == FORMAT_EXCEL && p < endp) {
+ if (*p == '"')
+ quoted = !quoted;
+ if (quoted)
+ continue;
+ }
+ if (*p == ',' || p == endp) {
+ if (field_count == 0) {
+ dbenv->errx(dbenv,
+ "record %lu: too many fields in the record",
+ record_count);
+ return (1);
+ }
+ --field_count;
+
+ *op++ = (u_int32_t)(p - input_line) + 1;
+
+ if (verbose > 1)
+ dbenv->errx(dbenv,
+ "offset %lu: {%.*s}", op[-1],
+ OFFSET_LEN(op, -2), input_line + op[-2]);
+
+ /*
+ * Don't insert a new field if the input lines ends
+ * in a comma.
+ */
+ if (p == endp || p + 1 == endp)
+ break;
+ }
+ }
+ *op++ = (u_int32_t)(p - input_line);
+
+ if (field_count != 0) {
+ dbenv->errx(dbenv,
+ "record %lu: not enough fields in the record",
+ record_count);
+ return (1);
+ }
+ memcpy(op, input_line, len);
+
+ return (0);
+}
diff --git a/db/examples_c/csv/load_main.c b/db/examples_c/csv/load_main.c
new file mode 100644
index 000000000..9f83e3388
--- /dev/null
+++ b/db/examples_c/csv/load_main.c
@@ -0,0 +1,118 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: load_main.c,v 1.10 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+static int usage(void);
+
+/*
+ * Globals
+ */
+DB_ENV *dbenv; /* Database environment */
+DB *db; /* Primary database */
+DB **secondary; /* Secondaries */
+int verbose; /* Program verbosity */
+char *progname; /* Program name */
+
+int
+main(int argc, char *argv[])
+{
+ input_fmt ifmt;
+ u_long version;
+ int ch, ret, t_ret;
+ char *home;
+
+ /* Initialize globals. */
+ dbenv = NULL;
+ db = NULL;
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+ verbose = 0;
+
+ /* Initialize arguments. */
+ home = NULL;
+ ifmt = FORMAT_NL;
+ version = 1;
+
+ /* Process arguments. */
+ while ((ch = getopt(argc, argv, "F:f:h:V:v")) != EOF)
+ switch (ch) {
+ case 'f':
+ if (freopen(optarg, "r", stdin) == NULL) {
+ fprintf(stderr,
+ "%s: %s\n", optarg, db_strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ break;
+ case 'F':
+ if (strcasecmp(optarg, "excel") == 0) {
+ ifmt = FORMAT_EXCEL;
+ break;
+ }
+ return (usage());
+ case 'h':
+ home = optarg;
+ break;
+ case 'V':
+ if (strtoul_err(optarg, &version))
+ return (EXIT_FAILURE);
+ break;
+ case 'v':
+ ++verbose;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (*argv != NULL)
+ return (usage());
+
+ /*
+ * The home directory may not exist -- try and create it. We don't
+ * bother to distinguish between failure to create it and it already
+ * existing, as the database environment open will fail if we aren't
+ * successful.
+ */
+ if (home == NULL)
+ home = getenv("DB_HOME");
+ if (home != NULL)
+ (void)mkdir(home, S_IRWXU);
+
+ /* Create or join the database environment. */
+ if (csv_env_open(home, 0) != 0)
+ return (EXIT_FAILURE);
+
+ /* Load records into the database. */
+ ret = input_load(ifmt, version);
+
+ /* Close the database environment. */
+ if ((t_ret = csv_env_close()) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+/*
+ * usage --
+ * Program usage message.
+ */
+static int
+usage(void)
+{
+ (void)fprintf(stderr,
+ "usage: %s [-v] [-F excel] [-f csv-file] [-h home]\n", progname);
+ return (EXIT_FAILURE);
+}
diff --git a/db/examples_c/csv/query.c b/db/examples_c/csv/query.c
new file mode 100644
index 000000000..bd11da9dd
--- /dev/null
+++ b/db/examples_c/csv/query.c
@@ -0,0 +1,242 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: query.c,v 1.14 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+static int query_by_field(char *);
+static int query_fieldlist(char *);
+static int query_help(char *);
+static int query_usage(void);
+
+typedef struct _cmdtab {
+ char *cmd; /* Command name */
+ int (*f)(char *); /* Underlying function. */
+ char *help; /* Help message. */
+} CMDTAB;
+
+static CMDTAB cmdtab[] = {
+ { "?",
+ query_help,
+ "?\t\tDisplay help screen" },
+ { "exit",
+ NULL,
+ "exit\t\tExit program" },
+ { "fields",
+ query_fieldlist,
+ "fields\t\tDisplay list of field names" },
+ { "help",
+ query_help,
+ "help\t\tDisplay help screen" },
+ { "quit",
+ NULL,
+ "quit\t\tExit program" },
+ { NULL,
+ query_by_field,
+ "field[op]value\tDisplay fields by value (=, !=, <, <=, >, >=, ~, !~)" },
+ { NULL, NULL, NULL }
+};
+
+/*
+ * query_interactive --
+ * Allow the user to interactively query the database.
+ */
+int
+query_interactive()
+{
+ int done;
+ char *p, input[256];
+
+ for (;;) {
+ printf("Query: ");
+ (void)fflush(stdout);
+ if (fgets(input, sizeof(input), stdin) == NULL) {
+ printf("\n");
+ if (ferror(stdin)) {
+ dbenv->err(dbenv, errno,
+ "error occurred reading from stdin");
+ return (1);
+ }
+ break;
+ }
+ if ((p = strchr(input, '\n')) == NULL) {
+ dbenv->errx(dbenv, "input buffer too small");
+ return (1);
+ }
+ *p = '\0';
+ if (query(input, &done) != 0)
+ return (1);
+ if (done != 0)
+ break;
+ }
+ return (0);
+}
+
+/*
+ * query --
+ * Process a query.
+ */
+int
+query(char *cmd, int *donep)
+{
+ CMDTAB *p;
+
+ if (donep != NULL)
+ *donep = 0;
+
+ for (p = cmdtab; p->cmd != NULL; ++p)
+ if (p->cmd != NULL &&
+ strncasecmp(cmd, p->cmd, strlen(p->cmd)) == 0)
+ break;
+
+ if (p->cmd == NULL)
+ return (query_by_field(cmd));
+
+ if (p->f == NULL) {
+ if (donep != NULL)
+ *donep = 1;
+ return (0);
+ }
+
+ return (p->f(cmd));
+}
+
+/*
+ * query_by_field --
+ * Query the primary database by field.
+ */
+static int
+query_by_field(char *input)
+{
+ OPERATOR operator;
+ size_t len;
+ char *field, *op, *value;
+
+ /*
+ * We expect to see "field [op] value" -- figure it out.
+ *
+ * Skip leading whitespace.
+ */
+ while (isspace(*input))
+ ++input;
+
+ /*
+ * Find an operator, and it better not start the string.
+ */
+ if ((len = strcspn(field = input, "<>!=~")) == 0)
+ return (query_usage());
+ op = field + len;
+
+ /* Figure out the operator, and find the start of the value. */
+ switch (op[0]) {
+ case '~':
+ operator = WC;
+ value = op + 1;
+ break;
+ case '!':
+ if (op[1] == '=') {
+ operator = NEQ;
+ value = op + 2;
+ break;
+ }
+ if (op[1] == '~') {
+ operator = NWC;
+ value = op + 2;
+ break;
+ }
+ return (query_usage());
+ case '<':
+ if (op[1] == '=') {
+ operator = LTEQ;
+ value = op + 2;
+ } else {
+ operator = LT;
+ value = op + 1;
+ }
+ break;
+ case '=':
+ operator = EQ;
+ if (op[1] == '=')
+ value = op + 2;
+ else
+ value = op + 1;
+ break;
+ case '>':
+ if (op[1] == '=') {
+ operator = GTEQ;
+ value = op + 2;
+ } else {
+ operator = GT;
+ value = op + 1;
+ }
+ break;
+ default:
+ return (query_usage());
+ }
+
+ /* Terminate the field name, and there better be a field name. */
+ while (--op > input && isspace(*op))
+ ;
+ if (op == input)
+ return (query_usage());
+ op[1] = '\0';
+
+ /* Make sure there is a value field. */
+ while (isspace(*value))
+ ++value;
+ if (*value == '\0')
+ return (query_usage());
+
+ return (DbRecord_search_field_name(field, value, operator));
+}
+
+/*
+ * query_fieldlist --
+ * Display list of field names.
+ */
+static int
+query_fieldlist(char *input)
+{
+ DbField *f;
+
+ input = input; /* Quiet compiler. */
+
+ for (f = fieldlist; f->name != NULL; ++f)
+ printf("field %3d: %s\n", f->fieldno, f->name);
+ return (0);
+}
+
+/*
+ * query_help --
+ * Query command list.
+ */
+static int
+query_help(char *input)
+{
+ CMDTAB *p;
+
+ input = input; /* Quiet compiler. */
+
+ printf("Query commands:\n");
+ for (p = cmdtab; p->help != NULL; ++p)
+ printf("\t%s\n", p->help);
+ return (0);
+}
+
+/*
+ * query_usage --
+ * Query usage message.
+ */
+static int
+query_usage(void)
+{
+ fprintf(stderr, "%s: query syntax error\n", progname);
+ return (query_help(NULL));
+}
diff --git a/db/examples_c/csv/query_main.c b/db/examples_c/csv/query_main.c
new file mode 100644
index 000000000..69c0109f1
--- /dev/null
+++ b/db/examples_c/csv/query_main.c
@@ -0,0 +1,100 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: query_main.c,v 1.10 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+static int usage(void);
+
+/*
+ * Globals
+ */
+DB_ENV *dbenv; /* Database environment */
+DB *db; /* Primary database */
+int verbose; /* Program verbosity */
+char *progname; /* Program name */
+
+int
+main(int argc, char *argv[])
+{
+ int ch, done, ret, t_ret;
+ char **clist, **clp, *home;
+
+ /* Initialize globals. */
+ dbenv = NULL;
+ db = NULL;
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+ progname = argv[0];
+ else
+ ++progname;
+ verbose = 0;
+
+ /* Initialize arguments. */
+ home = NULL;
+ ret = 0;
+
+ /* Allocate enough room for command-list arguments. */
+ if ((clp = clist =
+ (char **)calloc((size_t)argc + 1, sizeof(char *))) == NULL) {
+ fprintf(stderr, "%s: %s\n", progname, strerror(ENOMEM));
+ return (EXIT_FAILURE);
+ }
+
+ /* Process arguments. */
+ while ((ch = getopt(argc, argv, "c:h:v")) != EOF)
+ switch (ch) {
+ case 'c':
+ *clp++ = optarg;
+ break;
+ case 'h':
+ home = optarg;
+ break;
+ case 'v':
+ ++verbose;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (*argv != NULL)
+ return (usage());
+
+ /* Create or join the database environment. */
+ if (csv_env_open(home, 1) != 0)
+ return (EXIT_FAILURE);
+
+ /* Handle the queries. */
+ if (clp == clist)
+ ret = query_interactive();
+ else
+ for (clp = clist, done = 0; *clp != NULL && !done; ++clp)
+ if ((ret = query(*clp, &done)) != 0)
+ break;
+
+ /* Close the database environment. */
+ if ((t_ret = csv_env_close()) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+/*
+ * usage --
+ * Program usage message.
+ */
+static int
+usage(void)
+{
+ (void)fprintf(stderr, "usage: %s [-v] [-c cmd] [-h home]\n", progname);
+ return (EXIT_FAILURE);
+}
diff --git a/db/examples_c/csv/sample.csv b/db/examples_c/csv/sample.csv
new file mode 100644
index 000000000..b3f09706f
--- /dev/null
+++ b/db/examples_c/csv/sample.csv
@@ -0,0 +1,8 @@
+Adams,Bob,01/02/03,green,apple,37
+Carter,Denise Ann,04/05/06,blue,banana,38
+Eidel,Frank,07/08/09,red,cherry,38
+Grabel,Harriet,10/11/12,purple,date,40
+Indals,Jason,01/03/05,pink,orange,32
+Kilt,Laura,07/09/11,yellow,grape,38
+Moreno,Nancy,02/04/06,black,strawberry,38
+Octon,Patrick,08/10/12,magenta,kiwi,15
diff --git a/db/examples_c/csv/sample.desc b/db/examples_c/csv/sample.desc
new file mode 100644
index 000000000..d0b2032ea
--- /dev/null
+++ b/db/examples_c/csv/sample.desc
@@ -0,0 +1,10 @@
+# $Id: sample.desc,v 1.3 2005/04/03 20:03:17 bostic Exp $
+
+version 1 {
+ LastName string
+ FirstName string
+ BirthDate
+ Color string index
+ Fruit string index
+ Age ulong index
+}
diff --git a/db/examples_c/csv/util.c b/db/examples_c/csv/util.c
new file mode 100644
index 000000000..60382e251
--- /dev/null
+++ b/db/examples_c/csv/util.c
@@ -0,0 +1,310 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: util.c,v 1.19 2006/08/24 14:45:43 bostic Exp $
+ */
+
+#include "csv.h"
+#include "csv_local.h"
+#include "csv_extern.h"
+
+/*
+ * entry_print --
+ * Display the primary database's data item.
+ */
+int
+entry_print(void *data, size_t len, u_int32_t field_count)
+{
+ u_int32_t a, *offset;
+ u_int i;
+ char *raw;
+
+ memcpy(&a, data, sizeof(u_int32_t));
+ printf("\tversion: %lu\n", (u_long)a);
+
+ offset = (u_int32_t *)data + 1;
+ if (field_count == 0) {
+ memcpy(&a, offset++, sizeof(u_int32_t));
+ printf("\tcolumn map: %lu fields: {%.*s}\n", (u_long)a,
+ (int)(len - 2 * sizeof(u_int32_t)),
+ (u_int8_t *)data + 2 * sizeof(u_int32_t));
+ } else {
+ raw = (char *)(offset + (field_count + 1));
+ for (i = 0; i < field_count; ++i) {
+ memcpy(&a, &offset[i], sizeof(u_int32_t));
+ len = OFFSET_LEN(offset, i);
+ printf("\toffset %4lu: len %4lu: {%.*s}\n",
+ (u_long)offset[i],
+ (u_long)len, (int)len, raw + a);
+ }
+ }
+
+ return (0);
+}
+
+/*
+ * strtod_err --
+ * strtod(3) with error checking.
+ */
+int
+strtod_err(char *input, double *valp)
+{
+ double val;
+ char *end;
+
+ /*
+ * strtoul requires setting errno to detect errors.
+ */
+ errno = 0;
+ val = strtod(input, &end);
+ if (errno == ERANGE) {
+ dbenv->err(dbenv, ERANGE, "%s", input);
+ return (1);
+ }
+ if (input[0] == '\0' ||
+ (end[0] != '\0' && end[0] != '\n' && !isspace(end[0]))) {
+ dbenv->errx(dbenv,
+ "%s: invalid floating point argument", input);
+ return (1);
+ }
+
+ *valp = val;
+ return (0);
+}
+
+/*
+ * strtoul_err --
+ * strtoul(3) with error checking.
+ */
+int
+strtoul_err(char *input, u_long *valp)
+{
+ u_long val;
+ char *end;
+
+ /*
+ * strtoul requires setting errno to detect errors.
+ */
+ errno = 0;
+ val = strtoul(input, &end, 10);
+ if (errno == ERANGE) {
+ dbenv->err(dbenv, ERANGE, "%s", input);
+ return (1);
+ }
+ if (input[0] == '\0' ||
+ (end[0] != '\0' && end[0] != '\n' && !isspace(end[0]))) {
+ dbenv->errx(dbenv, "%s: invalid unsigned long argument", input);
+ return (1);
+ }
+
+ *valp = val;
+ return (0);
+}
+
+int
+secondary_callback(DB *db_arg, const DBT *key, const DBT *data, DBT *result)
+{
+ DbField *f;
+ DbRecord record;
+ void *faddr, *addr;
+
+ /* Populate the field. */
+ if (DbRecord_init(key, data, &record) != 0)
+ return (-1);
+
+ f = db_arg->app_private;
+ faddr = (u_int8_t *)&record + f->offset;
+
+ /*
+ * If necessary, copy the field into separate memory.
+ * Set up the result DBT.
+ */
+ switch (f->type) {
+ case STRING:
+ result->data = *(char **)faddr;
+ result->size = strlen(*(char **)faddr) + 1;
+ break;
+ case DOUBLE:
+ if ((addr = malloc(sizeof(double))) == NULL)
+ return (-1);
+ result->data = addr;
+ result->size = sizeof(double);
+ result->flags = DB_DBT_APPMALLOC;
+ memcpy(addr, faddr, sizeof(double));
+ break;
+ case ULONG:
+ if ((addr = malloc(sizeof(u_long))) == NULL)
+ return (-1);
+ result->data = addr;
+ result->size = sizeof(u_long);
+ result->flags = DB_DBT_APPMALLOC;
+ memcpy(addr, faddr, sizeof(u_long));
+ break;
+ default:
+ case NOTSET:
+ abort();
+ /* NOTREACHED */
+ }
+
+ return (0);
+}
+
+/*
+ * compare_double --
+ * Compare two keys.
+ */
+int
+compare_double(DB *db_arg, const DBT *a_arg, const DBT *b_arg)
+{
+ double a, b;
+
+ db_arg = db_arg; /* Quiet compiler. */
+
+ memcpy(&a, a_arg->data, sizeof(double));
+ memcpy(&b, b_arg->data, sizeof(double));
+ return (a > b ? 1 : ((a < b) ? -1 : 0));
+}
+
+/*
+ * compare_ulong --
+ * Compare two keys.
+ */
+int
+compare_ulong(DB *db_arg, const DBT *a_arg, const DBT *b_arg)
+{
+ u_long a, b;
+
+ db_arg = db_arg; /* Quiet compiler. */
+
+ memcpy(&a, a_arg->data, sizeof(u_long));
+ memcpy(&b, b_arg->data, sizeof(u_long));
+ return (a > b ? 1 : ((a < b) ? -1 : 0));
+}
+
+/*
+ * field_cmp_double --
+ * Compare two double.
+ */
+int
+field_cmp_double(void *a, void *b, OPERATOR op)
+{
+ switch (op) {
+ case GT:
+ return (*(double *)a > *(double *)b);
+ case GTEQ:
+ return (*(double *)a >= *(double *)b);
+ case LT:
+ return (*(double *)a < *(double *)b);
+ case LTEQ:
+ return (*(double *)a <= *(double *)b);
+ case NEQ:
+ return (*(double *)a != *(double *)b);
+ case EQ:
+ return (*(double *)a == *(double *)b);
+ case WC:
+ case NWC:
+ break;
+ }
+
+ abort();
+ /* NOTREACHED */
+}
+
+/*
+ * field_cmp_re --
+ * Compare against regular expression.
+ */
+int
+field_cmp_re(void *a, void *b, OPERATOR op)
+{
+ op = op; /* Quiet compiler. */
+
+ switch (op) {
+#ifdef HAVE_WILDCARD_SUPPORT
+ case WC:
+ return (regexec(b, *(char **)a, 0, NULL, 0) == 0);
+ case NWC:
+ return (regexec(b, *(char **)a, 0, NULL, 0) != 0);
+#else
+ case WC:
+ case NWC:
+ a = a;
+ b = b; /* Quiet compiler. */
+ /* FALLTHROUGH */
+#endif
+ case GT:
+ case GTEQ:
+ case LT:
+ case LTEQ:
+ case NEQ:
+ case EQ:
+ break;
+ }
+
+ abort();
+ /* NOTREACHED */
+}
+
+/*
+ * field_cmp_string --
+ * Compare two strings.
+ */
+int
+field_cmp_string(void *a, void *b, OPERATOR op)
+{
+ int v;
+
+ v = strcasecmp(*(char **)a, b);
+ switch (op) {
+ case GT:
+ return (v > 0 ? 1 : 0);
+ case GTEQ:
+ return (v >= 0 ? 1 : 0);
+ case LT:
+ return (v < 0 ? 1 : 0);
+ case LTEQ:
+ return (v <= 0 ? 1 : 0);
+ case NEQ:
+ return (v ? 1 : 0);
+ case EQ:
+ return (v ? 0 : 1);
+ case WC:
+ case NWC:
+ break;
+ }
+
+ abort();
+ /* NOTREACHED */
+}
+
+/*
+ * field_cmp_ulong --
+ * Compare two ulongs.
+ */
+int
+field_cmp_ulong(void *a, void *b, OPERATOR op)
+{
+ switch (op) {
+ case GT:
+ return (*(u_long *)a > *(u_long *)b);
+ case GTEQ:
+ return (*(u_long *)a >= *(u_long *)b);
+ case LT:
+ return (*(u_long *)a < *(u_long *)b);
+ case LTEQ:
+ return (*(u_long *)a <= *(u_long *)b);
+ case NEQ:
+ return (*(u_long *)a != *(u_long *)b);
+ case EQ:
+ return (*(u_long *)a == *(u_long *)b);
+ case WC:
+ case NWC:
+ break;
+ }
+
+ abort();
+ /* NOTREACHED */
+}
diff --git a/db/examples_c/ex_access.c b/db/examples_c/ex_access.c
index 7a8863713..f19302862 100644
--- a/db/examples_c/ex_access.c
+++ b/db/examples_c/ex_access.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_access.c,v 11.25 2004/09/17 22:00:28 mjc Exp $
+ * $Id: ex_access.c,v 12.3 2006/08/24 14:45:41 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_c/ex_apprec/ex_apprec.c b/db/examples_c/ex_apprec/ex_apprec.c
index 7eead81c8..0d58baa6a 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_apprec.c,v 1.5 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_apprec.c,v 12.3 2006/08/24 14:45:43 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_c/ex_apprec/ex_apprec.h b/db/examples_c/ex_apprec/ex_apprec.h
index b77308fa5..26be8cafa 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_apprec.h,v 1.5 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_apprec.h,v 12.3 2006/08/24 14:45:43 bostic Exp $
*/
#ifndef _EX_APPREC_H_
diff --git a/db/examples_c/ex_apprec/ex_apprec.src b/db/examples_c/ex_apprec/ex_apprec.src
index 8027a8674..89535ae7a 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_apprec.src,v 1.5 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_apprec.src,v 12.4 2006/09/13 16:22:27 sue Exp $
*/
PREFIX ex_apprec
@@ -36,6 +36,6 @@ INCLUDE #include "ex_apprec.h"
*
* dirname: relative or absolute pathname of the directory to be created
*/
-BEGIN mkdir 10000
+BEGIN mkdir 42 10000
DBT dirname DBT s
END
diff --git a/db/examples_c/ex_apprec/ex_apprec_auto.c b/db/examples_c/ex_apprec/ex_apprec_auto.c
index e4ad1e2b9..8a48b016c 100644
--- a/db/examples_c/ex_apprec/ex_apprec_auto.c
+++ b/db/examples_c/ex_apprec/ex_apprec_auto.c
@@ -15,10 +15,10 @@
* PUBLIC: u_int32_t, const DBT *));
*/
int
-ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
+ex_apprec_mkdir_log(dbenv, txnp, ret_lsnp, flags,
dirname)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *dirname;
@@ -36,7 +36,7 @@ ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
@@ -46,10 +46,9 @@ ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -84,15 +83,15 @@ ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
}
if ((ret = dbenv->log_put(dbenv, rlsnp, (DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)ex_apprec_mkdir_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
free(logrec.data);
@@ -117,13 +116,14 @@ ex_apprec_mkdir_read(dbenv, recbuf, argpp)
if ((argp = malloc(sizeof(ex_apprec_mkdir_args) + sizeof(DB_TXN))) == NULL)
return (ENOMEM);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
diff --git a/db/examples_c/ex_apprec/ex_apprec_auto.h b/db/examples_c/ex_apprec/ex_apprec_auto.h
index 358b1a9f0..a4b4c6317 100644
--- a/db/examples_c/ex_apprec/ex_apprec_auto.h
+++ b/db/examples_c/ex_apprec/ex_apprec_auto.h
@@ -5,7 +5,7 @@
#define DB_ex_apprec_mkdir 10000
typedef struct _ex_apprec_mkdir_args {
u_int32_t type;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN prev_lsn;
DBT dirname;
} ex_apprec_mkdir_args;
diff --git a/db/examples_c/ex_apprec/ex_apprec_autop.c b/db/examples_c/ex_apprec/ex_apprec_autop.c
index 2e67ee226..39d3af1cd 100644
--- a/db/examples_c/ex_apprec/ex_apprec_autop.c
+++ b/db/examples_c/ex_apprec/ex_apprec_autop.c
@@ -27,20 +27,18 @@ ex_apprec_mkdir_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = ex_apprec_mkdir_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]ex_apprec_mkdir%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]ex_apprec_mkdir%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tdirname: ");
for (i = 0; i < argp->dirname.size; i++) {
ch = ((u_int8_t *)argp->dirname.data)[i];
diff --git a/db/examples_c/ex_apprec/ex_apprec_rec.c b/db/examples_c/ex_apprec/ex_apprec_rec.c
index faaa29424..95c1681e8 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_apprec_rec.c,v 1.4 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_apprec_rec.c,v 12.3 2006/08/24 14:45:43 bostic Exp $
*/
/*
diff --git a/db/examples_c/ex_apprec/ex_apprec_template b/db/examples_c/ex_apprec/ex_apprec_template
index e67ccb6d8..04b84f6bf 100644
--- a/db/examples_c/ex_apprec/ex_apprec_template
+++ b/db/examples_c/ex_apprec/ex_apprec_template
@@ -1,11 +1,5 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/ex_apprec.h"
diff --git a/db/examples_c/ex_btrec.c b/db/examples_c/ex_btrec.c
index 432f6ce50..61646798c 100644
--- a/db/examples_c/ex_btrec.c
+++ b/db/examples_c/ex_btrec.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_btrec.c,v 11.22 2004/09/17 22:00:28 mjc Exp $
+ * $Id: ex_btrec.c,v 12.3 2006/08/24 14:45:41 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_c/ex_dbclient.c b/db/examples_c/ex_dbclient.c
index 171532d8d..4dc12391f 100644
--- a/db/examples_c/ex_dbclient.c
+++ b/db/examples_c/ex_dbclient.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_dbclient.c,v 1.32 2004/09/23 19:00:23 bostic Exp $
+ * $Id: ex_dbclient.c,v 12.3 2006/08/24 14:45:41 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_c/ex_env.c b/db/examples_c/ex_env.c
index 8ca1768f4..5f80e6ff0 100644
--- a/db/examples_c/ex_env.c
+++ b/db/examples_c/ex_env.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_env.c,v 11.29 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_env.c,v 12.3 2006/08/24 14:45:41 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_c/ex_lock.c b/db/examples_c/ex_lock.c
index 165834d3a..78d4ff99a 100644
--- a/db/examples_c/ex_lock.c
+++ b/db/examples_c/ex_lock.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_lock.c,v 11.21 2004/09/17 22:00:28 mjc Exp $
+ * $Id: ex_lock.c,v 12.3 2006/08/24 14:45:42 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_c/ex_mpool.c b/db/examples_c/ex_mpool.c
index f0be9ab96..326802389 100644
--- a/db/examples_c/ex_mpool.c
+++ b/db/examples_c/ex_mpool.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_mpool.c,v 11.30 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_mpool.c,v 12.4 2006/08/24 14:45:42 bostic Exp $
*/
#include <sys/types.h>
@@ -216,7 +216,7 @@ run(hits, cachesize, pagesize, npages, progname)
srand((u_int)time(NULL));
for (cnt = 0; cnt < hits; ++cnt) {
pageno = rand() % npages;
- if ((ret = mfp->get(mfp, &pageno, 0, &p)) != 0) {
+ if ((ret = mfp->get(mfp, &pageno, NULL, 0, &p)) != 0) {
dbenv->err(dbenv, ret,
"unable to retrieve page %lu", (u_long)pageno);
goto err;
diff --git a/db/examples_c/ex_rep/README b/db/examples_c/ex_rep/README
new file mode 100644
index 000000000..2f66537b6
--- /dev/null
+++ b/db/examples_c/ex_rep/README
@@ -0,0 +1,19 @@
+# $Id: README,v 1.1 2006/07/07 23:36:13 alanb Exp $
+
+This is the parent directory for the replication example programs.
+
+The example is a toy stock quote server. There are two versions of
+the program: one version uses Berkeley DB's Replication Manager
+support, and the other uses the base replication API.
+
+common/ Contains code to implement the basic functions of the
+ application, to demonstrate that these are largely
+ independent of which replication API is used.
+
+mgr/ Contains the small amount of code necessary to
+ configure the application to use Replication Manager.
+
+base/ Contains the sample communications infrastructure, and
+ other replication support code, to demonstrate some of
+ the kinds of things that are necessary when using the
+ base replication API.
diff --git a/db/examples_c/ex_rep/base/rep_base.c b/db/examples_c/ex_rep/base/rep_base.c
new file mode 100644
index 000000000..18aec58df
--- /dev/null
+++ b/db/examples_c/ex_rep/base/rep_base.c
@@ -0,0 +1,252 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_base.c,v 12.15 2006/09/08 20:32:06 bostic Exp $
+ */
+
+#include <sys/types.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+
+#include "rep_base.h"
+#include "../common/rep_common.h"
+
+/*
+ * Process globals (we could put these in the machtab I suppose).
+ */
+int master_eid;
+char *myaddr;
+unsigned short myport;
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ extern char *optarg;
+ DB_ENV *dbenv;
+ DBT local;
+ enum { MASTER, CLIENT, UNKNOWN } whoami;
+ all_args aa;
+ connect_args ca;
+ machtab_t *machtab;
+ thread_t all_thr, conn_thr;
+ void *astatus, *cstatus;
+#ifdef _WIN32
+ WSADATA wsaData;
+#else
+ struct sigaction sigact;
+#endif
+ repsite_t site, *sitep, self, *selfp;
+ int maxsites, nsites, ret, priority, totalsites;
+ char *c, ch;
+ const char *home, *progname;
+ APP_DATA my_app_data;
+
+ master_eid = DB_EID_INVALID;
+
+ my_app_data.is_master = 0; /* assume I start out as client */
+ dbenv = NULL;
+ whoami = UNKNOWN;
+ machtab = NULL;
+ selfp = sitep = NULL;
+ maxsites = nsites = ret = totalsites = 0;
+ priority = 100;
+ home = "TESTDIR";
+ progname = "ex_rep_adv";
+
+ if ((ret = create_env(progname, &dbenv)) != 0)
+ goto err;
+ dbenv->app_private = &my_app_data;
+
+ while ((ch = getopt(argc, argv, "Ch:Mm:n:o:p:v")) != EOF)
+ switch (ch) {
+ case 'M':
+ whoami = MASTER;
+ master_eid = SELF_EID;
+ break;
+ case 'C':
+ whoami = CLIENT;
+ break;
+ case 'h':
+ home = optarg;
+ break;
+ case 'm':
+ if ((myaddr = strdup(optarg)) == NULL) {
+ fprintf(stderr,
+ "System error %s\n", strerror(errno));
+ goto err;
+ }
+ self.host = optarg;
+ self.host = strtok(self.host, ":");
+ if ((c = strtok(NULL, ":")) == NULL) {
+ fprintf(stderr, "Bad host specification.\n");
+ goto err;
+ }
+ myport = self.port = (unsigned short)atoi(c);
+ selfp = &self;
+ break;
+ case 'n':
+ totalsites = atoi(optarg);
+ break;
+ case 'o':
+ site.host = optarg;
+ site.host = strtok(site.host, ":");
+ if ((c = strtok(NULL, ":")) == NULL) {
+ fprintf(stderr, "Bad host specification.\n");
+ goto err;
+ }
+ site.port = atoi(c);
+ if (sitep == NULL || nsites >= maxsites) {
+ maxsites = maxsites == 0 ? 10 : 2 * maxsites;
+ if ((sitep = realloc(sitep,
+ maxsites * sizeof(repsite_t))) == NULL) {
+ fprintf(stderr, "System error %s\n",
+ strerror(errno));
+ goto err;
+ }
+ }
+ sitep[nsites++] = site;
+ break;
+ case 'p':
+ priority = atoi(optarg);
+ break;
+ case 'v':
+ if ((ret = dbenv->set_verbose(dbenv,
+ DB_VERB_REPLICATION, 1)) != 0)
+ goto err;
+ break;
+ case '?':
+ default:
+ usage(progname);
+ }
+
+ /* Error check command line. */
+ if (whoami == UNKNOWN) {
+ fprintf(stderr, "Must specify -M or -C.\n");
+ goto err;
+ }
+
+ if (selfp == NULL)
+ usage(progname);
+
+ if (home == NULL)
+ usage(progname);
+
+ dbenv->rep_set_priority(dbenv, priority);
+
+
+#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.
+ */
+ memset(&sigact, 0, sizeof(sigact));
+ sigact.sa_handler = SIG_IGN;
+ if ((ret = sigaction(SIGPIPE, &sigact, NULL)) != 0) {
+ fprintf(stderr,
+ "Unable to turn off SIGPIPE: %s\n", strerror(ret));
+ goto err;
+ }
+#endif
+
+ /*
+ * We are hardcoding priorities here that all clients have the
+ * same priority except for a designated master who gets a higher
+ * priority.
+ */
+ if ((ret =
+ machtab_init(&machtab, totalsites)) != 0)
+ goto err;
+ my_app_data.comm_infrastructure = machtab;
+
+ if ((ret = env_init(dbenv, home)) != 0)
+ goto err;
+
+ /*
+ * Now sets up comm infrastructure. There are two phases. First,
+ * we open our port for listening for incoming connections. Then
+ * we attempt to connect to every host we know about.
+ */
+
+ (void)dbenv->rep_set_transport(dbenv, SELF_EID, quote_send);
+
+ ca.dbenv = dbenv;
+ ca.home = home;
+ ca.progname = progname;
+ ca.machtab = machtab;
+ ca.port = selfp->port;
+ if ((ret = thread_create(&conn_thr, NULL, connect_thread, &ca)) != 0) {
+ dbenv->errx(dbenv, "can't create connect thread");
+ goto err;
+ }
+
+ aa.dbenv = dbenv;
+ aa.progname = progname;
+ aa.home = home;
+ aa.machtab = machtab;
+ aa.sites = sitep;
+ aa.nsites = nsites;
+ if ((ret = thread_create(&all_thr, NULL, connect_all, &aa)) != 0) {
+ dbenv->errx(dbenv, "can't create connect-all thread");
+ goto err;
+ }
+
+ /*
+ * We have now got the entire communication infrastructure set up.
+ * It's time to declare ourselves to be a client or master.
+ */
+ if (whoami == MASTER) {
+ if ((ret = dbenv->rep_start(dbenv, NULL, DB_REP_MASTER)) != 0) {
+ dbenv->err(dbenv, ret, "dbenv->rep_start failed");
+ goto err;
+ }
+ } else {
+ memset(&local, 0, sizeof(local));
+ local.data = myaddr;
+ local.size = (u_int32_t)strlen(myaddr) + 1;
+ if ((ret =
+ dbenv->rep_start(dbenv, &local, DB_REP_CLIENT)) != 0) {
+ dbenv->err(dbenv, ret, "dbenv->rep_start failed");
+ goto err;
+ }
+ /* Sleep to give ourselves time to find a master. */
+ sleep(5);
+ }
+ if ((ret = doloop(dbenv, &my_app_data)) != 0) {
+ dbenv->err(dbenv, ret, "Main loop failed");
+ goto err;
+ }
+
+ /* Wait on the connection threads. */
+ if (thread_join(all_thr, &astatus) || thread_join(conn_thr, &cstatus))
+ ret = -1;
+ if (ret == 0 &&
+ ((uintptr_t)astatus != EXIT_SUCCESS ||
+ (uintptr_t)cstatus != EXIT_SUCCESS))
+ ret = -1;
+
+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);
+}
diff --git a/db/examples_c/ex_rep/base/rep_base.h b/db/examples_c/ex_rep/base/rep_base.h
new file mode 100644
index 000000000..b252efc34
--- /dev/null
+++ b/db/examples_c/ex_rep/base/rep_base.h
@@ -0,0 +1,132 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2005
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_base.h,v 12.11 2006/08/24 14:45:45 bostic Exp $
+ */
+
+#ifndef _EX_REPQUOTE_H_
+#define _EX_REPQUOTE_H_
+
+#define SELF_EID 1
+
+typedef struct {
+ char *host; /* Host name. */
+ u_int32_t port; /* Port on which to connect to this site. */
+} repsite_t;
+
+/* 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;
+
+/* Arguments for the connect_all thread. */
+typedef struct {
+ DB_ENV *dbenv;
+ const char *progname;
+ const char *home;
+ machtab_t *machtab;
+ repsite_t *sites;
+ int nsites;
+} all_args;
+
+/* Arguments for the connect_loop thread. */
+typedef struct {
+ DB_ENV *dbenv;
+ const char * home;
+ const char * progname;
+ machtab_t *machtab;
+ int port;
+} connect_args;
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE "quote.db"
+#define MAX_THREADS 25
+#define SLEEPTIME 3
+
+#ifndef COMPQUIET
+#define COMPQUIET(x,y) x = (y)
+#endif
+
+/* Portability macros for basic threading and networking */
+#ifdef _WIN32
+
+#include <winsock2.h>
+#include <windows.h>
+
+extern int getopt(int, char * const *, const char *);
+
+typedef HANDLE thread_t;
+#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))
+
+typedef SOCKET socket_t;
+#define SOCKET_CREATION_FAILURE INVALID_SOCKET
+#define readsocket(s, buf, sz) recv((s), (buf), (int)(sz), 0)
+#define writesocket(s, buf, sz) send((s), (const char *)(buf), (int)(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_t;
+#define thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define thread_join(thr, statusp) pthread_join((thr), (statusp))
+
+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)
+
+typedef int socket_t;
+#define SOCKET_CREATION_FAILURE -1
+#define closesocket(fd) close(fd)
+#define net_errno errno
+#define readsocket(s, buf, sz) read((s), (buf), (sz))
+#define writesocket(s, buf, sz) write((s), (buf), (sz))
+
+#endif
+
+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 *));
+socket_t get_accepted_socket __P((const char *, int));
+socket_t get_connected_socket
+ __P((machtab_t *, const char *, const char *, int, int *, int *));
+int get_next_message __P((socket_t, DBT *, DBT *));
+socket_t listen_socket_init __P((const char *, int));
+socket_t listen_socket_accept __P((machtab_t *, const char *, socket_t, int *));
+int machtab_getinfo __P((machtab_t *, int, u_int32_t *, int *));
+int machtab_init __P((machtab_t **, int));
+void machtab_parm __P((machtab_t *, 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));
+
+#endif /* !_EX_REPQUOTE_H_ */
diff --git a/db/examples_c/ex_rep/base/rep_msg.c b/db/examples_c/ex_rep/base/rep_msg.c
new file mode 100644
index 000000000..87d668980
--- /dev/null
+++ b/db/examples_c/ex_rep/base/rep_msg.c
@@ -0,0 +1,464 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2005
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_msg.c,v 12.10 2006/08/24 14:45:45 bostic Exp $
+ */
+
+#include <sys/types.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+
+#include "rep_base.h"
+
+static int connect_site __P((DB_ENV *, machtab_t *,
+ const char *, repsite_t *, int *, int *, thread_t *));
+static void *elect_thread __P((void *));
+static void *hm_loop __P((void *));
+
+typedef struct {
+ DB_ENV *dbenv;
+ machtab_t *machtab;
+} elect_args;
+
+typedef struct {
+ DB_ENV *dbenv;
+ const char *progname;
+ const char *home;
+ socket_t fd;
+ u_int32_t eid;
+ machtab_t *tab;
+} hm_loop_args;
+
+/*
+ * This is a generic message handling loop that is used both by the
+ * master to accept messages from a client as well as by clients
+ * to communicate with other clients.
+ */
+static void *
+hm_loop(args)
+ void *args;
+{
+ DB_ENV *dbenv;
+ DB_LSN permlsn;
+ DBT rec, control;
+ const char *c, *home, *progname;
+ elect_args *ea;
+ hm_loop_args *ha;
+ machtab_t *tab;
+ thread_t elect_thr, *site_thrs, *tmp, tid;
+ repsite_t self;
+ u_int32_t timeout;
+ int eid, n, nsites, newm, nsites_allocd;
+ int already_open, r, ret, t_ret, tmpid;
+ socket_t fd;
+ void *status;
+
+ ea = NULL;
+ site_thrs = NULL;
+ nsites_allocd = 0;
+ nsites = 0;
+
+ ha = (hm_loop_args *)args;
+ dbenv = ha->dbenv;
+ fd = ha->fd;
+ home = ha->home;
+ eid = ha->eid;
+ progname = ha->progname;
+ tab = ha->tab;
+ free(ha);
+
+ memset(&rec, 0, sizeof(DBT));
+ memset(&control, 0, sizeof(DBT));
+
+ for (ret = 0; ret == 0;) {
+ if ((ret = get_next_message(fd, &rec, &control)) != 0) {
+ /*
+ * Close this connection; if it's the master call
+ * for an election.
+ */
+ closesocket(fd);
+ if ((ret = machtab_rem(tab, eid, 1)) != 0)
+ break;
+
+ /*
+ * If I'm the master, I just lost a client and this
+ * thread is done.
+ */
+ if (master_eid == SELF_EID)
+ break;
+
+ /*
+ * If I was talking with the master and the master
+ * went away, I need to call an election; else I'm
+ * done.
+ */
+ if (master_eid != eid)
+ break;
+
+ master_eid = DB_EID_INVALID;
+ machtab_parm(tab, &n, &timeout);
+ (void)dbenv->rep_set_timeout(dbenv,
+ DB_REP_ELECTION_TIMEOUT, timeout);
+ if ((ret = dbenv->rep_elect(dbenv,
+ n, (n/2+1), &newm, 0)) != 0)
+ continue;
+
+ /*
+ * Regardless of the results, the site I was talking
+ * to is gone, so I have nothing to do but exit.
+ */
+ if (newm == SELF_EID)
+ ret = dbenv->rep_start(dbenv,
+ NULL, DB_REP_MASTER);
+ break;
+ }
+
+ tmpid = eid;
+ 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
+ * did, if this is me or if we already have a
+ * connection to this new site. If we don't,
+ * establish a new one.
+ */
+
+ /* No connect info. */
+ if (rec.size == 0)
+ break;
+
+ /* It's me, do nothing. */
+ if (strncmp(myaddr, rec.data, rec.size) == 0)
+ break;
+
+ self.host = (char *)rec.data;
+ self.host = strtok(self.host, ":");
+ if ((c = strtok(NULL, ":")) == NULL) {
+ dbenv->errx(dbenv, "Bad host specification");
+ goto out;
+ }
+ self.port = atoi(c);
+
+ /*
+ * We try to connect to the new site. If we can't,
+ * we treat it as an error since we know that the site
+ * should be up if we got a message from it (even
+ * indirectly).
+ */
+ if (nsites == nsites_allocd) {
+ /* Need to allocate more space. */
+ if ((tmp = realloc(site_thrs,
+ (10 + nsites) * sizeof(thread_t))) == NULL) {
+ ret = errno;
+ goto out;
+ }
+ site_thrs = tmp;
+ nsites_allocd += 10;
+ }
+ if ((ret = connect_site(dbenv, tab, progname,
+ &self, &already_open, &tmpid, &tid)) != 0)
+ goto out;
+ if (!already_open)
+ memcpy(&site_thrs[nsites++], &tid, sizeof(thread_t));
+ break;
+ case DB_REP_HOLDELECTION:
+ if (master_eid == SELF_EID)
+ break;
+ /* Make sure that previous election has finished. */
+ if (ea != NULL) {
+ if (thread_join(elect_thr, &status) != 0) {
+ dbenv->errx(dbenv,
+ "thread join failure");
+ goto out;
+ }
+ ea = NULL;
+ }
+ if ((ea = calloc(sizeof(elect_args), 1)) == NULL) {
+ dbenv->errx(dbenv, "can't allocate memory");
+ ret = errno;
+ goto out;
+ }
+ ea->dbenv = dbenv;
+ ea->machtab = tab;
+ if ((ret = thread_create(&elect_thr,
+ NULL, elect_thread, (void *)ea)) != 0) {
+ dbenv->errx(dbenv,
+ "can't create election thread");
+ }
+ break;
+ case DB_REP_NEWMASTER:
+ /* Check if it's us. */
+ master_eid = tmpid;
+ if (tmpid == SELF_EID) {
+ if ((ret = dbenv->rep_start(dbenv,
+ NULL, DB_REP_MASTER)) != 0) {
+ dbenv->err(dbenv, ret,
+ "can't start as master");
+ goto out;
+ }
+ }
+ break;
+ case DB_REP_ISPERM:
+ /* FALLTHROUGH */
+ case 0:
+ break;
+ default:
+ dbenv->err(dbenv, r, "DB_ENV->rep_process_message");
+ break;
+ }
+ }
+
+out: if ((t_ret = machtab_rem(tab, eid, 1)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /* Don't close the environment before any children exit. */
+ if (ea != NULL && thread_join(elect_thr, &status) != 0)
+ dbenv->errx(dbenv, "can't join election thread");
+
+ if (site_thrs != NULL)
+ while (--nsites >= 0)
+ if (thread_join(site_thrs[nsites], &status) != 0)
+ dbenv->errx(dbenv, "can't join site thread");
+
+ return ((void *)(uintptr_t)ret);
+}
+
+/*
+ * This is a generic thread that spawns a thread to listen for connections
+ * on a socket and then spawns off child threads to handle each new
+ * connection.
+ */
+void *
+connect_thread(args)
+ void *args;
+{
+ DB_ENV *dbenv;
+ const char *home, *progname;
+ hm_loop_args *ha;
+ connect_args *cargs;
+ machtab_t *machtab;
+ thread_t hm_thrs[MAX_THREADS];
+ void *status;
+ int i, eid, port, ret;
+ socket_t fd, ns;
+
+ ha = NULL;
+ cargs = (connect_args *)args;
+ dbenv = cargs->dbenv;
+ home = cargs->home;
+ progname = cargs->progname;
+ machtab = cargs->machtab;
+ port = cargs->port;
+
+ /*
+ * Loop forever, accepting connections from new machines,
+ * and forking off a thread to handle each.
+ */
+ if ((fd = listen_socket_init(progname, port)) < 0) {
+ ret = errno;
+ goto err;
+ }
+
+ for (i = 0; i < MAX_THREADS; i++) {
+ if ((ns = listen_socket_accept(machtab,
+ progname, fd, &eid)) == SOCKET_CREATION_FAILURE) {
+ ret = errno;
+ goto err;
+ }
+ if ((ha = calloc(sizeof(hm_loop_args), 1)) == NULL) {
+ dbenv->errx(dbenv, "can't allocate memory");
+ ret = errno;
+ goto err;
+ }
+ ha->progname = progname;
+ ha->home = home;
+ ha->fd = ns;
+ ha->eid = eid;
+ ha->tab = machtab;
+ ha->dbenv = dbenv;
+ if ((ret = thread_create(&hm_thrs[i++], NULL,
+ hm_loop, (void *)ha)) != 0) {
+ dbenv->errx(dbenv, "can't create thread for site");
+ goto err;
+ }
+ ha = NULL;
+ }
+
+ /* If we fell out, we ended up with too many threads. */
+ dbenv->errx(dbenv, "Too many threads");
+ ret = ENOMEM;
+
+ /* Do not return until all threads have exited. */
+ while (--i >= 0)
+ if (thread_join(hm_thrs[i], &status) != 0)
+ dbenv->errx(dbenv, "can't join site thread");
+
+err: return (ret == 0 ? (void *)EXIT_SUCCESS : (void *)EXIT_FAILURE);
+}
+
+/*
+ * Open a connection to everyone that we've been told about. If we
+ * cannot open some connections, keep trying.
+ */
+void *
+connect_all(args)
+ void *args;
+{
+ DB_ENV *dbenv;
+ all_args *aa;
+ const char *home, *progname;
+ hm_loop_args *ha;
+ int failed, i, eid, nsites, open, ret, *success;
+ machtab_t *machtab;
+ thread_t *hm_thr;
+ repsite_t *sites;
+
+ ha = NULL;
+ aa = (all_args *)args;
+ dbenv = aa->dbenv;
+ progname = aa->progname;
+ home = aa->home;
+ machtab = aa->machtab;
+ nsites = aa->nsites;
+ sites = aa->sites;
+
+ ret = 0;
+ hm_thr = NULL;
+ success = NULL;
+
+ /* Some implementations of calloc are sad about allocating 0 things. */
+ if ((success = calloc(nsites > 0 ? nsites : 1, sizeof(int))) == NULL) {
+ dbenv->err(dbenv, errno, "connect_all");
+ ret = 1;
+ 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, &hm_thr[i]);
+
+ /*
+ * If we couldn't make the connection, this isn't
+ * fatal to the loop, but we have nothing further
+ * to do on this machine at the moment.
+ */
+ if (ret == DB_REP_UNAVAIL)
+ continue;
+
+ if (ret != 0)
+ goto err;
+
+ failed--;
+ success[i] = 1;
+
+ /* If the connection is already open, we're done. */
+ if (ret == 0 && open == 1)
+ continue;
+
+ }
+ sleep(1);
+ }
+
+err: if (success != NULL)
+ free(success);
+ if (hm_thr != NULL)
+ free(hm_thr);
+ return (ret ? (void *)EXIT_FAILURE : (void *)EXIT_SUCCESS);
+}
+
+static int
+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, *eidp;
+ thread_t *hm_thrp;
+{
+ int ret;
+ socket_t s;
+ hm_loop_args *ha;
+
+ if ((s = get_connected_socket(machtab, progname,
+ site->host, site->port, is_open, eidp)) < 0)
+ return (DB_REP_UNAVAIL);
+
+ if (*is_open)
+ return (0);
+
+ if ((ha = calloc(sizeof(hm_loop_args), 1)) == NULL) {
+ dbenv->errx(dbenv, "can't allocate memory");
+ ret = errno;
+ goto err;
+ }
+
+ ha->progname = progname;
+ ha->fd = s;
+ ha->eid = *eidp;
+ ha->tab = machtab;
+ ha->dbenv = dbenv;
+
+ if ((ret = thread_create(hm_thrp, NULL,
+ hm_loop, (void *)ha)) != 0) {
+ dbenv->errx(dbenv, "can't create thread for connected site");
+ goto err1;
+ }
+
+ return (0);
+
+err1: free(ha);
+err:
+ return (ret);
+}
+
+/*
+ * We need to spawn off a new thread in which to hold an election in
+ * case we are the only thread listening on for messages.
+ */
+static void *
+elect_thread(args)
+ void *args;
+{
+ DB_ENV *dbenv;
+ elect_args *eargs;
+ machtab_t *machtab;
+ u_int32_t timeout;
+ int n, ret;
+
+ eargs = (elect_args *)args;
+ dbenv = eargs->dbenv;
+ machtab = eargs->machtab;
+ free(eargs);
+
+ machtab_parm(machtab, &n, &timeout);
+ (void)dbenv->rep_set_timeout(dbenv, DB_REP_ELECTION_TIMEOUT, timeout);
+ while ((ret = dbenv->rep_elect(dbenv, n, (n/2+1),
+ &master_eid, 0)) != 0)
+ sleep(2);
+
+ /* Check if it's us. */
+ if (master_eid == SELF_EID)
+ if ((ret = dbenv->rep_start(dbenv, NULL, DB_REP_MASTER)) != 0)
+ dbenv->err(dbenv, ret,
+ "can't start as master in election thread");
+
+ return (NULL);
+}
diff --git a/db/examples_c/ex_rep/base/rep_net.c b/db/examples_c/ex_rep/base/rep_net.c
new file mode 100644
index 000000000..cc22f585e
--- /dev/null
+++ b/db/examples_c/ex_rep/base/rep_net.c
@@ -0,0 +1,748 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2005
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_net.c,v 12.12 2006/08/24 14:45:45 bostic Exp $
+ */
+
+#include <sys/types.h>
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+#include "rep_base.h"
+#include "../common/rep_common.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
+
+int machtab_add __P((machtab_t *, socket_t, u_int32_t, int, int *));
+#ifdef DIAGNOSTIC
+void machtab_print __P((machtab_t *));
+#endif
+ssize_t readn __P((socket_t, void *, size_t));
+
+/*
+ * This file defines the communication infrastructure for the ex_repquote
+ * sample application.
+ *
+ * This application uses TCP/IP for its communication. In an N-site
+ * replication group, this means that there are N * N communication
+ * channels so that every site can communicate with every other site
+ * (this allows elections to be held when the master fails). We do
+ * not require that anyone know about all sites when the application
+ * starts up. In order to communicate, the application should know
+ * about someone, else it has no idea how to ever get in the game.
+ *
+ * Communication is handled via a number of different threads. These
+ * thread functions are implemented in rep_util.c In this file, we
+ * define the data structures that maintain the state that describes
+ * the comm infrastructure, the functions that manipulates this state
+ * and the routines used to actually send and receive data over the
+ * sockets.
+ */
+
+/*
+ * The communication infrastructure is represented by a machine table,
+ * machtab_t, which is essentially a mutex-protected linked list of members
+ * of the group. The machtab also contains the parameters that are needed
+ * to call for an election. We hardwire values for these parameters in the
+ * init function, but these could be set via some configuration setup in a
+ * real application. We reserve the machine-id 1 to refer to ourselves and
+ * make the machine-id 0 be invalid.
+ */
+
+#define MACHID_INVALID 0
+#define MACHID_SELF 1
+
+struct __machtab {
+ LIST_HEAD(__machlist, __member) machlist;
+ int nextid;
+ mutex_t mtmutex;
+ u_int32_t timeout_time;
+ int current;
+ int max;
+ int nsites;
+};
+
+/* Data structure that describes each entry in the machtab. */
+struct __member {
+ u_int32_t hostaddr; /* Host IP address. */
+ int port; /* Port number. */
+ int eid; /* Application-specific machine id. */
+ socket_t fd; /* File descriptor for the socket. */
+ LIST_ENTRY(__member) links;
+ /* For linked list of all members we know of. */
+};
+
+static int quote_send_broadcast __P((machtab_t *,
+ const DBT *, const DBT *, u_int32_t));
+static int quote_send_one __P((const DBT *, const DBT *, socket_t, u_int32_t));
+
+/*
+ * machtab_init --
+ * Initialize the machine ID table.
+ * XXX Right now we treat the number of sites as the maximum
+ * number we've ever had on the list at one time. We probably
+ * want to make that smarter.
+ */
+int
+machtab_init(machtabp, nsites)
+ machtab_t **machtabp;
+ int nsites;
+{
+ int ret;
+ machtab_t *machtab;
+
+ if ((machtab = malloc(sizeof(machtab_t))) == NULL) {
+ fprintf(stderr, "can't allocate memory\n");
+ return (ENOMEM);
+ }
+
+ LIST_INIT(&machtab->machlist);
+
+ /* Reserve eid's 0 and 1. */
+ machtab->nextid = 2;
+ machtab->timeout_time = 2 * 1000000; /* 2 seconds. */
+ machtab->current = machtab->max = 0;
+ machtab->nsites = nsites;
+
+ ret = mutex_init(&machtab->mtmutex, NULL);
+ *machtabp = machtab;
+
+ return (ret);
+}
+
+/*
+ * machtab_add --
+ * Add a file descriptor to the table of machines, returning
+ * a new machine ID.
+ */
+int
+machtab_add(machtab, fd, hostaddr, port, idp)
+ machtab_t *machtab;
+ socket_t fd;
+ u_int32_t hostaddr;
+ int port, *idp;
+{
+ int ret;
+ member_t *m, *member;
+
+ ret = 0;
+ if ((member = malloc(sizeof(member_t))) == NULL) {
+ fprintf(stderr, "can't allocate memory\n");
+ return (ENOMEM);
+ }
+
+ member->fd = fd;
+ member->hostaddr = hostaddr;
+ member->port = port;
+
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0) {
+ fprintf(stderr, "can't lock mutex");
+ return (ret);
+ }
+
+ for (m = LIST_FIRST(&machtab->machlist);
+ m != NULL; m = LIST_NEXT(m, links))
+ if (m->hostaddr == hostaddr && m->port == port)
+ break;
+
+ if (m == NULL) {
+ member->eid = machtab->nextid++;
+ LIST_INSERT_HEAD(&machtab->machlist, member, links);
+ } else
+ member->eid = m->eid;
+
+ if ((ret = mutex_unlock(&machtab->mtmutex)) != 0) {
+ fprintf(stderr, "can't unlock mutex\n");
+ return (ret);
+ }
+
+ if (idp != NULL)
+ *idp = member->eid;
+
+ if (m == NULL) {
+ if (++machtab->current > machtab->max)
+ machtab->max = machtab->current;
+ } else {
+ free(member);
+ ret = EEXIST;
+ }
+#ifdef DIAGNOSTIC
+ printf("Exiting machtab_add\n");
+ machtab_print(machtab);
+#endif
+ return (ret);
+}
+
+/*
+ * machtab_getinfo --
+ * Return host and port information for a particular machine id.
+ */
+int
+machtab_getinfo(machtab, eid, hostp, portp)
+ machtab_t *machtab;
+ int eid;
+ u_int32_t *hostp;
+ int *portp;
+{
+ int ret;
+ member_t *member;
+
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0) {
+ fprintf(stderr, "can't lock mutex\n");
+ return (ret);
+ }
+
+ for (member = LIST_FIRST(&machtab->machlist);
+ member != NULL;
+ member = LIST_NEXT(member, links))
+ if (member->eid == eid) {
+ *hostp = member->hostaddr;
+ *portp = member->port;
+ break;
+ }
+
+ if ((ret = mutex_unlock(&machtab->mtmutex)) != 0) {
+ fprintf(stderr, "can't unlock mutex\n");
+ return (ret);
+ }
+
+ return (member != NULL ? 0 : EINVAL);
+}
+
+/*
+ * machtab_rem --
+ * Remove a mapping from the table of machines. Lock indicates
+ * whether we need to lock the machtab or not (0 indicates we do not
+ * need to lock; non-zero indicates that we do need to lock).
+ */
+int
+machtab_rem(machtab, eid, lock)
+ machtab_t *machtab;
+ int eid;
+ int lock;
+{
+ int found, ret;
+ member_t *member;
+
+ ret = 0;
+ if (lock && (ret = mutex_lock(&machtab->mtmutex)) != 0) {
+ fprintf(stderr, "can't lock mutex\n");
+ return (ret);
+ }
+
+ for (found = 0, member = LIST_FIRST(&machtab->machlist);
+ member != NULL;
+ member = LIST_NEXT(member, links))
+ if (member->eid == eid) {
+ found = 1;
+ LIST_REMOVE(member, links);
+ (void)closesocket(member->fd);
+ free(member);
+ machtab->current--;
+ break;
+ }
+
+ if (LIST_FIRST(&machtab->machlist) == NULL)
+ machtab->nextid = 2;
+
+ if (lock && (ret = mutex_unlock(&machtab->mtmutex)) != 0)
+ fprintf(stderr, "can't unlock mutex\n");
+
+#ifdef DIAGNOSTIC
+ printf("Exiting machtab_rem\n");
+ machtab_print(machtab);
+#endif
+ return (ret);
+}
+
+void
+machtab_parm(machtab, nump, timeoutp)
+ machtab_t *machtab;
+ int *nump;
+ u_int32_t *timeoutp;
+{
+ if (machtab->nsites == 0)
+ *nump = machtab->max;
+ else
+ *nump = machtab->nsites;
+ *timeoutp = machtab->timeout_time;
+}
+
+#ifdef DIAGNOSTIC
+void
+machtab_print(machtab)
+ machtab_t *machtab;
+{
+ member_t *m;
+
+ if (mutex_lock(&machtab->mtmutex) != 0) {
+ fprintf(stderr, "can't lock mutex\n");
+ abort();
+ }
+
+ 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);
+ }
+
+ if (mutex_unlock(&machtab->mtmutex) != 0) {
+ fprintf(stderr, "can't unlock mutex\n");
+ abort();
+ }
+}
+#endif
+/*
+ * listen_socket_init --
+ * Initialize a socket for listening on the specified port. Returns
+ * a file descriptor for the socket, ready for an accept() call
+ * in a thread that we're happy to let block.
+ */
+socket_t
+listen_socket_init(progname, port)
+ const char *progname;
+ int port;
+{
+ socket_t s;
+ int sockopt;
+ struct sockaddr_in si;
+
+ COMPQUIET(progname, NULL);
+
+ if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
+ perror("can't create listen socket");
+ return (-1);
+ }
+
+ memset(&si, 0, sizeof(si));
+ si.sin_family = AF_INET;
+ si.sin_addr.s_addr = htonl(INADDR_ANY);
+ 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,
+ (const char *)&sockopt, sizeof (sockopt));
+
+ if (bind(s, (struct sockaddr *)&si, sizeof(si)) != 0) {
+ perror("can't bind listen socket");
+ goto err;
+ }
+
+ if (listen(s, 5) != 0) {
+ perror("can't establish listen queue");
+ goto err;
+ }
+
+ return (s);
+
+err: closesocket(s);
+ return (-1);
+}
+
+/*
+ * listen_socket_accept --
+ * Accept a connection on a socket. This is essentially just a wrapper
+ * for accept(3).
+ */
+socket_t
+listen_socket_accept(machtab, progname, s, eidp)
+ machtab_t *machtab;
+ const char *progname;
+ socket_t s;
+ int *eidp;
+{
+ struct sockaddr_in si;
+ int si_len;
+ int host, ret;
+ socket_t ns;
+ u_int16_t port;
+
+ COMPQUIET(progname, NULL);
+
+wait: memset(&si, 0, sizeof(si));
+ si_len = sizeof(si);
+ ns = accept(s, (struct sockaddr *)&si, &si_len);
+ if (ns == SOCKET_CREATION_FAILURE) {
+ fprintf(stderr, "can't accept incoming connection\n");
+ return ns;
+ }
+ host = ntohl(si.sin_addr.s_addr);
+
+ /*
+ * 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) {
+ 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: closesocket(ns);
+ return SOCKET_CREATION_FAILURE;
+}
+
+/*
+ * get_connected_socket --
+ * Connect to the specified port of the specified remote machine,
+ * and return a file descriptor when we have accepted a connection on it.
+ * Add this connection to the machtab. If we already have a connection
+ * open to this machine, then don't create another one, return the eid
+ * of the connection (in *eidp) and set is_open to 1. Return 0.
+ */
+socket_t
+get_connected_socket(machtab, progname, remotehost, port, is_open, eidp)
+ machtab_t *machtab;
+ const char *progname, *remotehost;
+ int port, *is_open, *eidp;
+{
+ int ret;
+ socket_t s;
+ struct hostent *hp;
+ struct sockaddr_in si;
+ u_int32_t addr;
+ u_int16_t nport;
+
+ *is_open = 0;
+
+ if ((hp = gethostbyname(remotehost)) == NULL) {
+ fprintf(stderr, "%s: host not found: %s\n", progname,
+ strerror(net_errno));
+ return (-1);
+ }
+
+ if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
+ perror("can't create outgoing socket");
+ return (-1);
+ }
+ memset(&si, 0, sizeof(si));
+ memcpy((char *)&si.sin_addr, hp->h_addr, hp->h_length);
+ addr = ntohl(si.sin_addr.s_addr);
+ ret = machtab_add(machtab, s, addr, port, eidp);
+ if (ret == EEXIST) {
+ *is_open = 1;
+ closesocket(s);
+ return (0);
+ } else if (ret != 0) {
+ closesocket(s);
+ return (-1);
+ }
+
+ si.sin_family = AF_INET;
+ si.sin_port = htons((unsigned short)port);
+ if (connect(s, (struct sockaddr *)&si, sizeof(si)) < 0) {
+ fprintf(stderr, "%s: connection failed: %s\n",
+ 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);
+}
+
+/*
+ * get_next_message --
+ * Read a single message from the specified file descriptor, and
+ * return it in the format used by rep functions (two DBTs and a type).
+ *
+ * This function is called in a loop by both clients and masters, and
+ * the resulting DBTs are manually dispatched to DB_ENV->rep_process_message().
+ */
+int
+get_next_message(fd, rec, control)
+ socket_t fd;
+ DBT *rec, *control;
+{
+ size_t nr;
+ u_int32_t rsize, csize;
+ u_int8_t *recbuf, *controlbuf;
+
+ /*
+ * The protocol we use on the wire is dead simple:
+ *
+ * 4 bytes - rec->size
+ * (# read above) - rec->data
+ * 4 bytes - control->size
+ * (# read above) - control->data
+ */
+
+ /* Read rec->size. */
+ nr = readn(fd, &rsize, 4);
+ if (nr != 4)
+ return (1);
+
+ /* Read the record itself. */
+ if (rsize > 0) {
+ if (rec->size < rsize)
+ rec->data = realloc(rec->data, rsize);
+ recbuf = rec->data;
+ nr = readn(fd, recbuf, rsize);
+ } else {
+ if (rec->data != NULL)
+ free(rec->data);
+ rec->data = NULL;
+ }
+ rec->size = rsize;
+
+ /* Read control->size. */
+ nr = readn(fd, &csize, 4);
+ if (nr != 4)
+ return (1);
+
+ /* Read the control struct itself. */
+ if (csize > 0) {
+ controlbuf = control->data;
+ if (control->size < csize)
+ controlbuf = realloc(controlbuf, csize);
+ nr = readn(fd, controlbuf, csize);
+ if (nr != csize)
+ return (1);
+ } else {
+ if (control->data != NULL)
+ free(control->data);
+ controlbuf = NULL;
+ }
+ control->data = controlbuf;
+ control->size = csize;
+
+ return (0);
+}
+
+/*
+ * readn --
+ * Read a full n characters from a file descriptor, unless we get an error
+ * or EOF.
+ */
+ssize_t
+readn(fd, vptr, n)
+ socket_t fd;
+ void *vptr;
+ size_t n;
+{
+ size_t nleft;
+ ssize_t nread;
+ char *ptr;
+
+ ptr = vptr;
+ nleft = n;
+ while (nleft > 0) {
+ if ((nread = readsocket(fd, ptr, nleft)) < 0) {
+ /*
+ * Call read() again on interrupted system call;
+ * on other errors, bail.
+ */
+ if (net_errno == EINTR)
+ nread = 0;
+ else {
+ perror("can't read from socket");
+ return (-1);
+ }
+ } else if (nread == 0)
+ break; /* EOF */
+
+ nleft -= nread;
+ ptr += nread;
+ }
+
+ return (n - nleft);
+}
+
+/*
+ * quote_send --
+ * The f_send function for DB_ENV->set_rep_transport.
+ */
+int
+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;
+{
+ int n, ret, t_ret;
+ socket_t fd;
+ machtab_t *machtab;
+ member_t *m;
+
+ COMPQUIET(lsnp, NULL);
+ machtab =
+ (machtab_t *)((APP_DATA*)dbenv->app_private)->comm_infrastructure;
+
+ if (eid == DB_EID_BROADCAST) {
+ /*
+ * Right now, we do not require successful transmission.
+ * I'd like to move this requiring at least one successful
+ * transmission on PERMANENT requests.
+ */
+ n = quote_send_broadcast(machtab, rec, control, flags);
+ if (n < 0 /*|| (n == 0 && LF_ISSET(DB_REP_PERMANENT))*/)
+ return (DB_REP_UNAVAIL);
+ return (0);
+ }
+
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0) {
+ dbenv->errx(dbenv, "can't lock mutex");
+ return (ret);
+ }
+
+ fd = 0;
+ for (m = LIST_FIRST(&machtab->machlist); m != NULL;
+ m = LIST_NEXT(m, links)) {
+ if (m->eid == eid) {
+ fd = m->fd;
+ break;
+ }
+ }
+
+ if (fd == 0) {
+ dbenv->err(dbenv, DB_REP_UNAVAIL,
+ "quote_send: cannot find machine ID %d", eid);
+ return (DB_REP_UNAVAIL);
+ }
+
+ if ((ret = quote_send_one(rec, control, fd, flags)) != 0)
+ fprintf(stderr, "socket write error in send() function\n");
+
+ if ((t_ret = mutex_unlock(&machtab->mtmutex)) != 0) {
+ dbenv->errx(dbenv, "can't unlock mutex");
+ if (ret == 0)
+ ret = t_ret;
+ }
+
+ return (ret);
+}
+
+/*
+ * quote_send_broadcast --
+ * Send a message to everybody.
+ * Returns the number of sites to which this message was successfully
+ * communicated. A -1 indicates a fatal error.
+ */
+static int
+quote_send_broadcast(machtab, rec, control, flags)
+ machtab_t *machtab;
+ const DBT *rec, *control;
+ u_int32_t flags;
+{
+ int ret, sent;
+ member_t *m, *next;
+
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0) {
+ fprintf(stderr, "can't lock mutex\n");
+ return (ret);
+ }
+
+ sent = 0;
+ for (m = LIST_FIRST(&machtab->machlist); m != NULL; m = next) {
+ next = LIST_NEXT(m, links);
+ if ((ret = quote_send_one(rec, control, m->fd, flags)) != 0) {
+ fprintf(stderr, "socket write error in broadcast\n");
+ (void)machtab_rem(machtab, m->eid, 0);
+ } else
+ sent++;
+ }
+
+ if (mutex_unlock(&machtab->mtmutex) != 0) {
+ fprintf(stderr, "can't unlock mutex\n");
+ return (-1);
+ }
+
+ return (sent);
+}
+
+/*
+ * quote_send_one --
+ * Send a message to a single machine, given that machine's file
+ * descriptor.
+ *
+ * !!!
+ * Note that the machtab mutex should be held through this call.
+ * It doubles as a synchronizer to make sure that two threads don't
+ * intersperse writes that are part of two single messages.
+ */
+static int
+quote_send_one(rec, control, fd, flags)
+ const DBT *rec, *control;
+ socket_t fd;
+ u_int32_t flags;
+
+{
+ int retry;
+ ssize_t bytes_left, nw;
+ u_int8_t *wp;
+
+ COMPQUIET(flags, 0);
+
+ /*
+ * The protocol is simply: write rec->size, write rec->data,
+ * write control->size, write control->data.
+ */
+ nw = writesocket(fd, (const char *)&rec->size, 4);
+ if (nw != 4)
+ return (DB_REP_UNAVAIL);
+
+ if (rec->size > 0) {
+ nw = writesocket(fd, rec->data, rec->size);
+ if (nw < 0)
+ return (DB_REP_UNAVAIL);
+ if (nw != (ssize_t)rec->size) {
+ /* Try a couple of times to finish the write. */
+ wp = (u_int8_t *)rec->data + nw;
+ bytes_left = rec->size - nw;
+ for (retry = 0; bytes_left > 0 && retry < 3; retry++) {
+ nw = writesocket(fd, wp, bytes_left);
+ if (nw < 0)
+ return (DB_REP_UNAVAIL);
+ bytes_left -= nw;
+ wp += nw;
+ }
+ if (bytes_left > 0)
+ return (DB_REP_UNAVAIL);
+ }
+ }
+
+ nw = writesocket(fd, (const char *)&control->size, 4);
+ if (nw != 4)
+ return (DB_REP_UNAVAIL);
+ if (control->size > 0) {
+ nw = writesocket(fd, control->data, control->size);
+ if (nw != (ssize_t)control->size)
+ return (DB_REP_UNAVAIL);
+ }
+ return (0);
+}
diff --git a/db/examples_c/ex_rep/common/rep_common.c b/db/examples_c/ex_rep/common/rep_common.c
new file mode 100644
index 000000000..ecffa461e
--- /dev/null
+++ b/db/examples_c/ex_rep/common/rep_common.c
@@ -0,0 +1,286 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_common.c,v 12.13 2006/09/08 20:32:06 bostic Exp $
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+
+#include "rep_common.h"
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE "quote.db"
+#define SLEEPTIME 3
+
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#define sleep(s) Sleep(1000 * (s))
+#endif
+
+static void event_callback __P((DB_ENV *, u_int32_t, void *));
+static int print_stocks __P((DB *));
+
+static void
+event_callback(dbenv, which, info)
+ DB_ENV *dbenv;
+ u_int32_t which;
+ void *info;
+{
+ APP_DATA *app = dbenv->app_private;
+
+ info = NULL; /* Currently unused. */
+
+ switch (which) {
+ case DB_EVENT_REP_MASTER:
+ app->is_master = 1;
+ break;
+
+ case DB_EVENT_REP_CLIENT:
+ app->is_master = 0;
+ break;
+
+ case DB_EVENT_REP_STARTUPDONE: /* FALLTHROUGH */
+ case DB_EVENT_REP_NEWMASTER:
+ /* I don't care about these, for now. */
+ break;
+
+ default:
+ dbenv->errx(dbenv, "ignoring event %d", which);
+ }
+}
+
+static int
+print_stocks(dbp)
+ DB *dbp;
+{
+ DBC *dbc;
+ DBT key, data;
+#define MAXKEYSIZE 10
+#define MAXDATASIZE 20
+ char keybuf[MAXKEYSIZE + 1], databuf[MAXDATASIZE + 1];
+ int ret, t_ret;
+ u_int32_t keysize, datasize;
+
+ if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0) {
+ dbp->err(dbp, ret, "can't open cursor");
+ return (ret);
+ }
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+
+ printf("\tSymbol\tPrice\n");
+ printf("\t======\t=====\n");
+
+ for (ret = dbc->c_get(dbc, &key, &data, DB_FIRST);
+ ret == 0;
+ ret = dbc->c_get(dbc, &key, &data, DB_NEXT)) {
+ keysize = key.size > MAXKEYSIZE ? MAXKEYSIZE : key.size;
+ memcpy(keybuf, key.data, keysize);
+ keybuf[keysize] = '\0';
+
+ datasize = data.size >= MAXDATASIZE ? MAXDATASIZE : data.size;
+ memcpy(databuf, data.data, datasize);
+ databuf[datasize] = '\0';
+
+ printf("\t%s\t%s\n", keybuf, databuf);
+ }
+ printf("\n");
+ fflush(stdout);
+
+ if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ switch (ret) {
+ case 0:
+ case DB_NOTFOUND:
+ case DB_LOCK_DEADLOCK:
+ return (0);
+ default:
+ return (ret);
+ }
+}
+
+#define BUFSIZE 1024
+
+int
+doloop(dbenv, app_data)
+ DB_ENV *dbenv;
+ APP_DATA *app_data;
+{
+ DB *dbp;
+ DBT key, data;
+ char buf[BUFSIZE], *rbuf;
+ u_int32_t flags;
+ int ret;
+
+ dbp = NULL;
+ ret = 0;
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+
+ for (;;) {
+ if (dbp == NULL) {
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ return (ret);
+
+ /* Set page size small so page allocation is cheap. */
+ if ((ret = dbp->set_pagesize(dbp, 512)) != 0)
+ goto err;
+
+ flags = DB_AUTO_COMMIT;
+ if (app_data->is_master)
+ flags |= DB_CREATE;
+ if ((ret = dbp->open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, flags, 0)) != 0) {
+ if (ret == ENOENT) {
+ printf(
+ "No stock database yet available.\n");
+ if ((ret = dbp->close(dbp, 0)) != 0) {
+ dbenv->err(dbenv, ret,
+ "DB->close");
+ goto err;
+ }
+ dbp = NULL;
+ sleep(SLEEPTIME);
+ continue;
+ }
+ dbenv->err(dbenv, ret, "DB->open");
+ goto err;
+ }
+ }
+
+
+ printf("QUOTESERVER%s> ",
+ app_data->is_master ? "" : " (read-only)");
+ fflush(stdout);
+
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if (strtok(&buf[0], " \t\n") == NULL) {
+ switch ((ret = print_stocks(dbp))) {
+ case 0:
+ continue;
+ case DB_REP_HANDLE_DEAD:
+ (void)dbp->close(dbp, DB_NOSYNC);
+ dbp = NULL;
+ default:
+ dbp->err(dbp, ret, "Error traversing data");
+ goto err;
+ }
+ }
+ rbuf = strtok(NULL, " \t\n");
+ if (rbuf == NULL || rbuf[0] == '\0') {
+ if (strncmp(buf, "exit", 4) == 0 ||
+ strncmp(buf, "quit", 4) == 0)
+ break;
+ dbenv->errx(dbenv, "Format: TICKER VALUE");
+ continue;
+ }
+
+ if (!app_data->is_master) {
+ dbenv->errx(dbenv, "Can't update at client");
+ continue;
+ }
+
+ key.data = buf;
+ key.size = (u_int32_t)strlen(buf);
+
+ data.data = rbuf;
+ data.size = (u_int32_t)strlen(rbuf);
+
+ if ((ret = dbp->put(dbp,
+ NULL, &key, &data, DB_AUTO_COMMIT)) != 0) {
+ dbp->err(dbp, ret, "DB->put");
+ goto err;
+ }
+ }
+
+err: if (dbp != NULL)
+ (void)dbp->close(dbp, DB_NOSYNC);
+
+ return (ret);
+}
+
+int
+create_env(progname, dbenvp)
+ const char *progname;
+ DB_ENV **dbenvp;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(stderr, "can't create env handle: %s\n",
+ db_strerror(ret));
+ return (ret);
+ }
+
+ dbenv->set_errfile(dbenv, stderr);
+ dbenv->set_errpfx(dbenv, progname);
+ (void)dbenv->set_event_notify(dbenv, event_callback);
+
+ *dbenvp = dbenv;
+ return (0);
+}
+
+
+/* Open and configure an environment. */
+int
+env_init(dbenv, home)
+ DB_ENV *dbenv;
+ const char *home;
+{
+ u_int32_t flags;
+ int ret;
+
+ (void)dbenv->set_cachesize(dbenv, 0, CACHESIZE, 0);
+ (void)dbenv->set_flags(dbenv, DB_TXN_NOSYNC, 1);
+
+ flags = DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |
+ DB_INIT_REP | DB_INIT_TXN | DB_RECOVER | DB_THREAD;
+ if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0)
+ dbenv->err(dbenv, ret, "can't open environment");
+ return (ret);
+}
+
+/*
+ * In this application, we specify all communication via the command line. In
+ * a real application, we would expect that information about the other sites
+ * in the system would be maintained in some sort of configuration file. The
+ * critical part of this interface is that we assume at startup that we can
+ * find out
+ * 1) what host/port we wish to listen on for connections,
+ * 2) a (possibly empty) list of other sites we should attempt to connect
+ * to; and
+ * 3) what our Berkeley DB home environment is.
+ *
+ * These pieces of information are expressed by the following flags.
+ * -m host:port (required; m stands for me)
+ * -o host:port (optional; o stands for other; any number of these may be
+ * specified)
+ * -h home directory
+ * -n nsites (optional; number of sites in replication group; defaults to 0
+ * in which case we try to dynamically compute the number of sites in
+ * the replication group)
+ * -p priority (optional: defaults to 100)
+ * -C or -M start up as client or master (optional)
+ */
+void
+usage(progname)
+ const char *progname;
+{
+ fprintf(stderr, "usage: %s ", progname);
+ fprintf(stderr, "[-CM][-h home][-o host:port][-m host:port]%s",
+ "[-n nsites][-p priority]\n");
+ exit(EXIT_FAILURE);
+}
+
diff --git a/db/examples_c/ex_rep/common/rep_common.h b/db/examples_c/ex_rep/common/rep_common.h
new file mode 100644
index 000000000..4dafe5f16
--- /dev/null
+++ b/db/examples_c/ex_rep/common/rep_common.h
@@ -0,0 +1,18 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_common.h,v 12.2 2006/08/24 14:45:46 bostic Exp $
+ */
+
+typedef struct {
+ int is_master;
+ void *comm_infrastructure;
+} APP_DATA;
+
+int create_env __P((const char *progname, DB_ENV **));
+int doloop __P((DB_ENV *, APP_DATA *));
+int env_init __P((DB_ENV *, const char *));
+void usage __P((const char *));
diff --git a/db/examples_c/ex_rep/mgr/rep_mgr.c b/db/examples_c/ex_rep/mgr/rep_mgr.c
new file mode 100644
index 000000000..21017581b
--- /dev/null
+++ b/db/examples_c/ex_rep/mgr/rep_mgr.c
@@ -0,0 +1,149 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_mgr.c,v 12.15 2006/09/08 20:32:06 bostic Exp $
+ */
+
+#include <sys/types.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#ifndef _WIN32
+#include <unistd.h>
+#endif
+
+#include <db.h>
+
+#include "../common/rep_common.h"
+
+const char *progname = "ex_rep";
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#endif
+
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ extern char *optarg;
+ DB_ENV *dbenv;
+ const char *home;
+ char ch, *host, *portstr;
+ int ret, totalsites, t_ret, got_listen_address, friend;
+ u_int16_t port;
+ APP_DATA my_app_data;
+ u_int32_t start_policy;
+ int priority;
+
+ my_app_data.is_master = 0; /* assume I start out as client */
+ dbenv = NULL;
+ ret = got_listen_address = 0;
+ home = "TESTDIR";
+
+ if ((ret = create_env(progname, &dbenv)) != 0)
+ goto err;
+ dbenv->app_private = &my_app_data;
+
+ start_policy = DB_REP_ELECTION; /* default */
+ priority = 100; /* default */
+
+ while ((ch = getopt(argc, argv, "CFf:h:Mm:n:o:p:v")) != EOF) {
+ friend = 0;
+ switch (ch) {
+ case 'C':
+ start_policy = DB_REP_CLIENT;
+ break;
+ case 'F':
+ start_policy = DB_REP_FULL_ELECTION;
+ break;
+ case 'h':
+ home = optarg;
+ break;
+ case 'M':
+ start_policy = DB_REP_MASTER;
+ break;
+ case 'm':
+ host = strtok(optarg, ":");
+ if ((portstr = strtok(NULL, ":")) == NULL) {
+ fprintf(stderr, "Bad host specification.\n");
+ goto err;
+ }
+ port = (unsigned short)atoi(portstr);
+ if ((ret = dbenv->repmgr_set_local_site(dbenv,
+ host, port, 0)) != 0) {
+ fprintf(stderr,
+ "Could not set listen address (%d).\n", ret);
+ goto err;
+ }
+ got_listen_address = 1;
+ break;
+ case 'n':
+ totalsites = atoi(optarg);
+ if ((ret = dbenv->rep_set_nsites(dbenv, totalsites)) != 0)
+ dbenv->err(dbenv, ret, "set_nsites");
+ break;
+ case 'f':
+ friend = 1; /* FALLTHROUGH */
+ case 'o':
+ host = strtok(optarg, ":");
+ if ((portstr = strtok(NULL, ":")) == NULL) {
+ fprintf(stderr, "Bad host specification.\n");
+ goto err;
+ }
+ port = (unsigned short)atoi(portstr);
+ if ((ret = dbenv->repmgr_add_remote_site(dbenv, host,
+ port, NULL, friend ? DB_REPMGR_PEER : 0)) != 0) {
+ dbenv->err(dbenv, ret,
+ "Could not add site %s:%d", host,
+ (int)port);
+ goto err;
+ }
+ break;
+ case 'p':
+ priority = atoi(optarg);
+ break;
+ case 'v':
+ if ((ret = dbenv->set_verbose(dbenv,
+ DB_VERB_REPLICATION, 1)) != 0)
+ goto err;
+ break;
+ case '?':
+ default:
+ usage(progname);
+ }
+ }
+
+ /* Error check command line. */
+ if ((!got_listen_address) || home == NULL)
+ usage(progname);
+
+ dbenv->rep_set_priority(dbenv, priority);
+
+ if ((ret = env_init(dbenv, home)) != 0)
+ goto err;
+
+ if ((ret = dbenv->repmgr_start(dbenv, 3, start_policy)) != 0)
+ goto err;
+
+ if ((ret = doloop(dbenv, &my_app_data)) != 0) {
+ dbenv->err(dbenv, ret, "Client failed");
+ goto err;
+ }
+
+err:
+ if (dbenv != NULL &&
+ (t_ret = dbenv->close(dbenv, 0)) != 0) {
+ fprintf(stderr, "failure closing env: %s (%d)\n",
+ db_strerror(t_ret), t_ret);
+ if (ret == 0)
+ ret = t_ret;
+ }
+
+ return (ret);
+}
diff --git a/db/examples_c/ex_sequence.c b/db/examples_c/ex_sequence.c
index 76178e3aa..d797a299d 100644
--- a/db/examples_c/ex_sequence.c
+++ b/db/examples_c/ex_sequence.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_sequence.c,v 1.3 2004/10/14 18:12:13 bostic Exp $
+ * $Id: ex_sequence.c,v 12.5 2006/08/24 14:45:42 bostic Exp $
*/
#include <sys/types.h>
@@ -40,6 +40,9 @@ main(argc, argv)
char ch;
const char *database, *progname = "ex_sequence";
+ dbp = NULL;
+ seq = NULL;
+
rflag = 0;
while ((ch = getopt(argc, argv, "r")) != EOF)
switch (ch) {
@@ -71,12 +74,12 @@ main(argc, argv)
if ((ret = dbp->open(dbp,
NULL, database, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s: open", database);
- goto err1;
+ goto err;
}
if ((ret = db_sequence_create(&seq, dbp, 0)) != 0) {
dbp->err(dbp, ret, "db_sequence_create");
- goto err1;
+ goto err;
}
memset(&key, 0, sizeof(DBT));
@@ -85,24 +88,29 @@ main(argc, argv)
if ((ret = seq->open(seq, NULL, &key, DB_CREATE)) != 0) {
dbp->err(dbp, ret, "%s: DB_SEQUENCE->open", SEQUENCE);
- goto err2;
+ goto err;
}
for (i = 0; i < 10; i++) {
if ((ret = seq->get(seq, NULL, 1, &seqnum, 0)) != 0) {
dbp->err(dbp, ret, "DB_SEQUENCE->get");
- goto err2;
+ goto err;
}
- /* We don't have a portable way to print 64-bit numbers. */
- printf("Got sequence number (%x, %x)\n",
- (int)(seqnum >> 32), (unsigned)seqnum);
+ /* There's no portable way to print 64-bit numbers. */
+#ifdef _WIN32
+ printf("Got sequence number %l64d\n", (int64_t)seqnum);
+#else
+ printf(
+ "Got sequence number %llu\n", (unsigned long long)seqnum);
+#endif
}
/* Close everything down. */
if ((ret = seq->close(seq, 0)) != 0) {
+ seq = NULL;
dbp->err(dbp, ret, "DB_SEQUENCE->close");
- goto err1;
+ goto err;
}
if ((ret = dbp->close(dbp, 0)) != 0) {
fprintf(stderr,
@@ -111,8 +119,10 @@ main(argc, argv)
}
return (EXIT_SUCCESS);
-err2: (void)seq->close(seq, 0);
-err1: (void)dbp->close(dbp, 0);
+err: if (seq != NULL)
+ (void)seq->close(seq, 0);
+ if (dbp != NULL)
+ (void)dbp->close(dbp, 0);
return (EXIT_FAILURE);
}
diff --git a/db/examples_c/ex_thread.c b/db/examples_c/ex_thread.c
index 2db144d1d..e1ce36097 100644
--- a/db/examples_c/ex_thread.c
+++ b/db/examples_c/ex_thread.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_thread.c,v 11.36 2004/01/28 03:36:03 bostic Exp $
+ * $Id: ex_thread.c,v 12.4 2006/08/24 14:45:42 bostic Exp $
*/
#include <sys/types.h>
@@ -187,8 +187,8 @@ main(argc, argv)
/* Create reader/writer threads. */
for (i = 0; i < nreaders + nwriters; ++i)
- if ((ret =
- pthread_create(&tids[i], NULL, tstart, (void *)i)) != 0)
+ if ((ret = pthread_create(
+ &tids[i], NULL, tstart, (void *)(uintptr_t)i)) != 0)
fatal("pthread_create", ret > 0 ? ret : errno, 1);
/* Create buffer pool trickle thread. */
@@ -474,7 +474,7 @@ tstart(arg)
pthread_t tid;
u_int id;
- id = (u_int)arg + 1;
+ id = (uintptr_t)arg + 1;
tid = pthread_self();
diff --git a/db/examples_c/ex_tpcb.c b/db/examples_c/ex_tpcb.c
index 8033ca9e5..e60cbeda0 100644
--- a/db/examples_c/ex_tpcb.c
+++ b/db/examples_c/ex_tpcb.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ex_tpcb.c,v 11.46 2004/10/27 16:17:10 bostic Exp $
+ * $Id: ex_tpcb.c,v 12.5 2006/08/24 14:45:42 bostic Exp $
*/
#include <sys/types.h>
@@ -24,7 +24,7 @@ extern int getopt(int, char * const *, const char *);
typedef enum { ACCOUNT, BRANCH, TELLER } FTYPE;
-DB_ENV *db_init __P((const char *, const char *, int, int, u_int32_t));
+DB_ENV *db_init __P((const char *, const char *, int, u_int32_t));
int hpopulate __P((DB *, int, int, int, int));
int populate __P((DB *, u_int32_t, u_int32_t, int, const char *));
u_int32_t random_id __P((FTYPE, int, int, int));
@@ -174,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)
+ progname, mpool, txn_no_sync ? DB_TXN_NOSYNC : 0)) == NULL)
return (EXIT_FAILURE);
accounts = accounts == 0 ? ACCOUNTS : accounts;
@@ -237,9 +237,9 @@ usage(progname)
* Initialize the environment.
*/
DB_ENV *
-db_init(home, prefix, cachesize, initializing, flags)
+db_init(home, prefix, cachesize, flags)
const char *home, *prefix;
- int cachesize, initializing;
+ int cachesize;
u_int32_t flags;
{
DB_ENV *dbenv;
@@ -247,7 +247,8 @@ db_init(home, prefix, cachesize, initializing, flags)
int ret;
if ((ret = db_env_create(&dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "db_env_create");
+ fprintf(stderr,
+ "%s: db_env_create: %s\n", progname, db_strerror(ret));
return (NULL);
}
dbenv->set_errfile(dbenv, stderr);
@@ -259,8 +260,8 @@ db_init(home, prefix, cachesize, initializing, flags)
(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);
+ local_flags = flags | DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
+ DB_INIT_MPOOL | DB_INIT_TXN;
if ((ret = dbenv->open(dbenv, home, local_flags, 0)) != 0) {
dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
(void)dbenv->close(dbenv, 0);
@@ -286,7 +287,7 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
idnum = BEGID;
balance = 500000;
- oflags = DB_CREATE | DB_TRUNCATE;
+ oflags = DB_CREATE;
if ((ret = db_create(&dbp, env, 0)) != 0) {
env->err(env, ret, "db_create");
diff --git a/db/examples_c/getting_started/example_database_load.c b/db/examples_c/getting_started/example_database_load.c
index b7514f353..aacef8c2b 100644
--- a/db/examples_c/getting_started/example_database_load.c
+++ b/db/examples_c/getting_started/example_database_load.c
@@ -1,13 +1,16 @@
-/* File: example_database_load.c */
-
-/* We assume an ANSI-compatible compiler */
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ */
#include "gettingstarted_common.h"
/* Forward declarations */
int usage(void);
int load_vendors_database(STOCK_DBS, char *);
-int pack_string(char *, char *, int);
+size_t pack_string(char *, char *, size_t);
int load_inventory_database(STOCK_DBS, char *);
int
@@ -30,9 +33,9 @@ int
main(int argc, char *argv[])
{
STOCK_DBS my_stock;
- int ch, ret, size;
+ int ch, ret;
+ size_t size;
char *basename, *inventory_file, *vendor_file;
- extern char *optarg;
/* Initialize the STOCK_DBS struct */
initialize_stockdbs(&my_stock);
@@ -143,7 +146,7 @@ load_vendors_database(STOCK_DBS my_stock, char *vendor_file)
/* Set up the database record's key */
key.data = my_vendor.name;
- key.size = (strlen(my_vendor.name) + 1) * sizeof(char);
+ key.size = (u_int32_t)strlen(my_vendor.name) + 1;
/* Set up the database record's data */
data.data = &my_vendor;
@@ -172,10 +175,10 @@ load_vendors_database(STOCK_DBS my_stock, char *vendor_file)
* appropriate location. Used to ensure that all our strings
* are contained in a single contiguous chunk of memory.
*/
-int
-pack_string(char *buffer, char *string, int start_pos)
+size_t
+pack_string(char *buffer, char *string, size_t start_pos)
{
- int string_size;
+ size_t string_size;
string_size = strlen(string) + 1;
memcpy(buffer+start_pos, string, string_size);
@@ -197,7 +200,7 @@ load_inventory_database(STOCK_DBS my_stock, char *inventory_file)
DBT key, data;
char buf[MAXLINE];
char databuf[MAXDATABUF];
- int bufLen, dataLen;
+ size_t bufLen, dataLen;
FILE *ifp;
/*
@@ -255,11 +258,11 @@ load_inventory_database(STOCK_DBS my_stock, char *inventory_file)
/* The key is the item's SKU */
key.data = sku;
- key.size = strlen(sku) + 1;
+ key.size = (u_int32_t)strlen(sku) + 1;
/* The data is the information that we packed into databuf. */
data.data = databuf;
- data.size = bufLen;
+ data.size = (u_int32_t)bufLen;
/* Put the data into the database */
my_stock.vendor_dbp->put(my_stock.inventory_dbp, 0, &key, &data, 0);
diff --git a/db/examples_c/getting_started/example_database_read.c b/db/examples_c/getting_started/example_database_read.c
index 6ba42340b..72824a23b 100644
--- a/db/examples_c/getting_started/example_database_read.c
+++ b/db/examples_c/getting_started/example_database_read.c
@@ -1,6 +1,9 @@
-/* File: example_database_read.c */
-
-/* We assume an ANSI-compatible compiler */
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ */
#include "gettingstarted_common.h"
@@ -142,7 +145,7 @@ show_records(STOCK_DBS *my_stock, char *itemname)
* record that we want to examine.
*/
key.data = itemname;
- key.size = (strlen(itemname) + 1) * sizeof(char);
+ key.size = (u_int32_t)strlen(itemname) + 1;
/*
* Position our cursor to the first record in the secondary
@@ -190,7 +193,8 @@ char *
show_inventory_item(void *vBuf)
{
float price;
- int buf_pos, quantity;
+ int quantity;
+ size_t buf_pos;
char *category, *name, *sku, *vendor_name;
char *buf = (char *)vBuf;
@@ -240,7 +244,7 @@ show_vendor_record(char *vendor_name, DB *vendor_dbp)
/* Set the search key to the vendor's name */
key.data = vendor_name;
- key.size = strlen(vendor_name) + 1;
+ key.size = (u_int32_t)strlen(vendor_name) + 1;
/*
* Make sure we use the memory we set aside for the VENDOR
diff --git a/db/examples_c/getting_started/gettingstarted_common.c b/db/examples_c/getting_started/gettingstarted_common.c
index 26704252b..910b2b61e 100644
--- a/db/examples_c/getting_started/gettingstarted_common.c
+++ b/db/examples_c/getting_started/gettingstarted_common.c
@@ -1,4 +1,9 @@
-/* File: gettingstarted_common.c */
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ */
#include "gettingstarted_common.h"
@@ -38,7 +43,7 @@ get_item_name(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey)
/* Now set the secondary key's data to be the item name */
memset(skey, 0, sizeof(DBT));
skey->data = (u_int8_t *)pdata->data + offset;
- skey->size = strlen(skey->data) + 1;
+ skey->size = (u_int32_t)strlen(skey->data) + 1;
return (0);
}
diff --git a/db/examples_c/getting_started/gettingstarted_common.h b/db/examples_c/getting_started/gettingstarted_common.h
index 258e776e2..65c6e44dc 100644
--- a/db/examples_c/getting_started/gettingstarted_common.h
+++ b/db/examples_c/getting_started/gettingstarted_common.h
@@ -1,10 +1,10 @@
-/***************************************************************************
- gettingstarted_common.h - description
- -------------------
- begin : Sun Feb 22 2004
- copyright : (C) 2004 Sleepycat Software
- email : support@sleepycat.com
- ***************************************************************************/
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ */
+
#include <db.h>
#include <stdio.h>
#include <stdlib.h>
@@ -12,22 +12,23 @@
#ifdef _WIN32
extern int getopt(int, char * const *, const char *);
+extern char *optarg;
+#define snprintf _snprintf
#else
#include <unistd.h>
#endif
-
-#define DEFAULT_HOMEDIR "./"
-#define INVENTORY_FILE "inventory.txt"
-#define VENDORS_FILE "vendors.txt"
-#define INVENTORYDB "inventoryDB.db"
-#define ITEMNAMEDB "itemnameDB.db"
-#define MAXDATABUF 1024
-#define MAXFIELD 20
-#define MAXLINE 150
-#define PRIMARY_DB 0
-#define SECONDARY_DB 1
-#define VENDORDB "vendorDB.db"
+#define DEFAULT_HOMEDIR "./"
+#define INVENTORY_FILE "inventory.txt"
+#define VENDORS_FILE "vendors.txt"
+#define INVENTORYDB "inventoryDB.db"
+#define ITEMNAMEDB "itemnameDB.db"
+#define MAXDATABUF 1024
+#define MAXFIELD 20
+#define MAXLINE 150
+#define PRIMARY_DB 0
+#define SECONDARY_DB 1
+#define VENDORDB "vendorDB.db"
typedef struct stock_dbs {
DB *inventory_dbp; /* Database containing inventory information */
@@ -52,10 +53,8 @@ typedef struct vendor {
} VENDOR;
/* Function prototypes */
-int databases_setup(STOCK_DBS *, const char *, FILE *);
-int databases_close(STOCK_DBS *);
-void initialize_stockdbs(STOCK_DBS *);
-int open_database(DB **, const char *, const char *,
- FILE *, int);
-void set_db_filenames(STOCK_DBS *my_stock);
-
+int databases_close(STOCK_DBS *);
+int databases_setup(STOCK_DBS *, const char *, FILE *);
+void initialize_stockdbs(STOCK_DBS *);
+int open_database(DB **, const char *, const char *, FILE *, int);
+void set_db_filenames(STOCK_DBS *my_stock);
diff --git a/db/examples_c/txn_guide/txn_guide.c b/db/examples_c/txn_guide/txn_guide.c
new file mode 100644
index 000000000..48f8aafeb
--- /dev/null
+++ b/db/examples_c/txn_guide/txn_guide.c
@@ -0,0 +1,461 @@
+/* File: txn_guide.c */
+
+/* We assume an ANSI-compatible compiler */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <db.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#define PATHD '\\'
+extern int getopt(int, char * const *, const char *);
+extern char *optarg;
+
+typedef HANDLE thread_t;
+#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)
+#else
+#include <pthread.h>
+#include <unistd.h>
+#define PATHD '/'
+
+typedef pthread_t thread_t;
+#define thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define thread_join(thr, statusp) pthread_join((thr), (statusp))
+
+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)
+#endif
+
+/* Run 5 writers threads at a time. */
+#define NUMWRITERS 5
+
+/*
+ * Printing of a thread_t is implementation-specific, so we
+ * create our own thread IDs for reporting purposes.
+ */
+int global_thread_num;
+mutex_t thread_num_lock;
+
+/* Forward declarations */
+int count_records(DB *, DB_TXN *);
+int open_db(DB **, const char *, const char *, DB_ENV *, u_int32_t);
+int usage(void);
+void *writer_thread(void *);
+
+/* Usage function */
+int
+usage()
+{
+ fprintf(stderr, " [-h <database_home_directory>]\n");
+ return (EXIT_FAILURE);
+}
+
+int
+main(int argc, char *argv[])
+{
+ /* Initialize our handles */
+ DB *dbp = NULL;
+ DB_ENV *envp = NULL;
+
+ thread_t writer_threads[NUMWRITERS];
+ int ch, i, ret, ret_t;
+ u_int32_t env_flags;
+ char *db_home_dir;
+ /* Application name */
+ const char *prog_name = "txn_guide";
+ /* Database file name */
+ const char *file_name = "mydb.db";
+
+ /* Parse the command line arguments */
+#ifdef _WIN32
+ db_home_dir = ".\\";
+#else
+ db_home_dir = "./";
+#endif
+ while ((ch = getopt(argc, argv, "h:")) != EOF)
+ switch (ch) {
+ case 'h':
+ db_home_dir = optarg;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+
+ /* Create the environment */
+ ret = db_env_create(&envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, "Error creating environment handle: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Indicate that we want db to perform lock detection internally.
+ * Also indicate that the transaction with the fewest number of
+ * write locks will receive the deadlock notification in
+ * the event of a deadlock.
+ */
+ ret = envp->set_lk_detect(envp, DB_LOCK_MINWRITE);
+ if (ret != 0) {
+ fprintf(stderr, "Error setting lock detect: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ env_flags =
+ DB_CREATE | /* Create the environment if it does not exist */
+ DB_RECOVER | /* Run normal recovery. */
+ DB_INIT_LOCK | /* Initialize the locking subsystem */
+ DB_INIT_LOG | /* Initialize the logging subsystem */
+ DB_INIT_TXN | /* Initialize the transactional subsystem. This
+ * also turns on logging. */
+ DB_INIT_MPOOL | /* Initialize the memory pool (in-memory cache) */
+ DB_THREAD; /* Cause the environment to be free-threaded */
+
+ /* Now actually open the environment */
+ ret = envp->open(envp, db_home_dir, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, "Error opening environment: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * If we had utility threads (for running checkpoints or
+ * deadlock detection, for example) we would spawn those
+ * here. However, for a simple example such as this,
+ * that is not required.
+ */
+
+ /* Open the database */
+ ret = open_db(&dbp, prog_name, file_name,
+ envp, DB_DUPSORT);
+ if (ret != 0)
+ goto err;
+
+ /* Initialize a mutex. Used to help provide thread ids. */
+ (void)mutex_init(&thread_num_lock, NULL);
+
+ /* Start the writer threads. */
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_create(
+ &writer_threads[i], NULL, writer_thread, (void *)dbp);
+
+ /* Join the writers */
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_join(writer_threads[i], NULL);
+
+err:
+ /* Close our database handle, if it was opened. */
+ if (dbp != NULL) {
+ ret_t = dbp->close(dbp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, "%s database close failed: %s\n",
+ file_name, db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Close our environment, if it was opened. */
+ if (envp != NULL) {
+ ret_t = envp->close(envp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, "environment close failed: %s\n",
+ db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Final status message and return. */
+ printf("I'm all done.\n");
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+/*
+ * A function that performs a series of writes to a
+ * Berkeley DB database. The information written
+ * to the database is largely nonsensical, but the
+ * mechanism of transactional commit/abort and
+ * deadlock detection is illustrated here.
+ */
+void *
+writer_thread(void *args)
+{
+ DB *dbp;
+ DB_ENV *envp;
+
+ DBT key, value;
+ DB_TXN *txn;
+ int i, j, payload, ret, thread_num;
+ int retry_count, max_retries = 20; /* Max retry on a deadlock */
+ char *key_strings[] = {"key 1", "key 2", "key 3", "key 4",
+ "key 5", "key 6", "key 7", "key 8",
+ "key 9", "key 10"};
+
+ dbp = (DB *)args;
+ envp = dbp->get_env(dbp);
+
+ /* Get the thread number */
+ (void)mutex_lock(&thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)mutex_unlock(&thread_num_lock);
+
+ /* Initialize the random number generator */
+ srand(thread_num);
+
+ /* Write 50 times and then quit */
+ for (i = 0; i < 50; i++) {
+ retry_count = 0; /* Used for deadlock retries */
+
+ /*
+ * Some think it is bad form to loop with a goto statement, but
+ * we do it anyway because it is the simplest and clearest way
+ * to achieve our abort/retry operation.
+ */
+retry:
+ /* Begin our transaction. We group multiple writes in
+ * this thread under a single transaction so as to
+ * (1) show that you can atomically perform multiple writes
+ * at a time, and (2) to increase the chances of a
+ * deadlock occurring so that we can observe our
+ * deadlock detection at work.
+ *
+ * Normally we would want to avoid the potential for deadlocks,
+ * so for this workload the correct thing would be to perform our
+ * puts with autocommit. But that would excessively simplify our
+ * example, so we do the "wrong" thing here instead.
+ */
+ ret = envp->txn_begin(envp, NULL, &txn, 0);
+ if (ret != 0) {
+ envp->err(envp, ret, "txn_begin failed");
+ return ((void *)EXIT_FAILURE);
+ }
+ for (j = 0; j < 10; j++) {
+ /* Set up our key and values DBTs */
+ memset(&key, 0, sizeof(DBT));
+ key.data = key_strings[j];
+ key.size = (u_int32_t)strlen(key_strings[j]) + 1;
+
+ memset(&value, 0, sizeof(DBT));
+ payload = rand() + i;
+ value.data = &payload;
+ value.size = sizeof(int);
+
+ /* Perform the database put. */
+ switch (ret = dbp->put(dbp, txn, &key, &value, 0)) {
+ case 0:
+ break;
+ /*
+ * Our database is configured for sorted duplicates,
+ * so there is a potential for a KEYEXIST error return.
+ * If we get one, simply ignore it and continue on.
+ *
+ * Note that you will see KEYEXIST errors only after you
+ * have run this program at least once.
+ */
+ case DB_KEYEXIST:
+ printf("Got keyexists.\n");
+ break;
+ /*
+ * Here's where we perform deadlock detection. If
+ * DB_LOCK_DEADLOCK is returned by the put operation,
+ * then this thread has been chosen to break a deadlock.
+ * It must abort its operation, and optionally retry the
+ * put.
+ */
+ case DB_LOCK_DEADLOCK:
+ /*
+ * First thing that we MUST do is abort the
+ * transaction.
+ */
+ (void)txn->abort(txn);
+ /*
+ * Now we decide if we want to retry the operation.
+ * If we have retried less than max_retries,
+ * increment the retry count and goto retry.
+ */
+ if (retry_count < max_retries) {
+ printf("Writer %i: Got DB_LOCK_DEADLOCK.\n",
+ thread_num);
+ printf("Writer %i: Retrying write operation.\n",
+ thread_num);
+ retry_count++;
+ goto retry;
+ }
+ /*
+ * Otherwise, just give up.
+ */
+ printf("Writer %i: ", thread_num);
+ printf("Got DB_LOCK_DEADLOCK and out of retries.\n");
+ printf("Writer %i: Giving up.\n", thread_num);
+ return ((void *)EXIT_FAILURE);
+ /*
+ * If a generic error occurs, we simply abort the
+ * transaction and exit the thread completely.
+ */
+ default:
+ envp->err(envp, ret, "db put failed");
+ ret = txn->abort(txn);
+ if (ret != 0)
+ envp->err(envp, ret,
+ "txn abort failed");
+ return ((void *)EXIT_FAILURE);
+ } /** End case statement **/
+
+ } /** End for loop **/
+
+ /*
+ * print the number of records found in the database.
+ * See count_records() for usage information.
+ */
+ printf("Thread %i. Record count: %i\n", thread_num,
+ count_records(dbp, NULL));
+
+ /*
+ * If all goes well, we can commit the transaction and
+ * exit the thread.
+ */
+ ret = txn->commit(txn, 0);
+ if (ret != 0) {
+ envp->err(envp, ret, "txn commit failed");
+ return ((void *)EXIT_FAILURE);
+ }
+ }
+ return ((void *)EXIT_SUCCESS);
+}
+
+/*
+ * This simply counts the number of records contained in the
+ * database and returns the result. You can use this function
+ * in three ways:
+ *
+ * First call it with an active txn handle.
+ * Secondly, configure the cursor for uncommitted reads (this
+ * is what the example currently does).
+ * Third, call count_records AFTER the writer has committed
+ * its transaction.
+ *
+ * If you do none of these things, the writer thread will
+ * self-deadlock.
+ *
+ * Note that this function exists only for illustrative purposes.
+ * A more straight-forward way to count the number of records in
+ * a database is to use DB->stat() or DB->stat_print().
+ */
+
+int
+count_records(DB *dbp, DB_TXN *txn)
+{
+
+ DBT key, value;
+ DBC *cursorp;
+ int count, ret;
+
+ cursorp = NULL;
+ count = 0;
+
+ /* Get the cursor */
+ ret = dbp->cursor(dbp, txn, &cursorp,
+ DB_READ_UNCOMMITTED);
+ if (ret != 0) {
+ dbp->err(dbp, ret,
+ "count_records: cursor open failed.");
+ goto cursor_err;
+ }
+
+ /* Get the key DBT used for the database read */
+ memset(&key, 0, sizeof(DBT));
+ memset(&value, 0, sizeof(DBT));
+ do {
+ ret = cursorp->c_get(cursorp, &key, &value, DB_NEXT);
+ switch (ret) {
+ case 0:
+ count++;
+ break;
+ case DB_NOTFOUND:
+ break;
+ default:
+ dbp->err(dbp, ret,
+ "Count records unspecified error");
+ goto cursor_err;
+ }
+ } while (ret == 0);
+
+cursor_err:
+ if (cursorp != NULL) {
+ ret = cursorp->c_close(cursorp);
+ if (ret != 0) {
+ dbp->err(dbp, ret,
+ "count_records: cursor close failed.");
+ }
+ }
+
+ return (count);
+}
+
+/* Open a Berkeley DB database */
+int
+open_db(DB **dbpp, const char *progname, const char *file_name,
+ DB_ENV *envp, u_int32_t extra_flags)
+{
+ int ret;
+ u_int32_t open_flags;
+ DB *dbp;
+
+ /* Initialize the DB handle */
+ ret = db_create(&dbp, envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, "%s: %s\n", progname,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /* Point to the memory malloc'd by db_create() */
+ *dbpp = dbp;
+
+ if (extra_flags != 0) {
+ ret = dbp->set_flags(dbp, extra_flags);
+ if (ret != 0) {
+ dbp->err(dbp, ret,
+ "open_db: Attempt to set extra flags failed.");
+ return (EXIT_FAILURE);
+ }
+ }
+
+ /* Now open the database */
+ open_flags = DB_CREATE | /* Allow database creation */
+ DB_READ_UNCOMMITTED | /* Allow dirty reads */
+ DB_AUTO_COMMIT; /* Allow autocommit */
+
+ ret = dbp->open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ open_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+ if (ret != 0) {
+ dbp->err(dbp, ret, "Database '%s' open failed",
+ file_name);
+ return (EXIT_FAILURE);
+ }
+ return (EXIT_SUCCESS);
+}
diff --git a/db/examples_c/txn_guide/txn_guide_inmemory.c b/db/examples_c/txn_guide/txn_guide_inmemory.c
new file mode 100644
index 000000000..7b3cca1c6
--- /dev/null
+++ b/db/examples_c/txn_guide/txn_guide_inmemory.c
@@ -0,0 +1,450 @@
+/* File: txn_guide_inmemory.c */
+
+/* We assume an ANSI-compatible compiler */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <db.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#define PATHD '\\'
+extern int getopt(int, char * const *, const char *);
+extern char *optarg;
+
+typedef HANDLE thread_t;
+#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)
+#else
+#include <pthread.h>
+#include <unistd.h>
+#define PATHD '/'
+
+typedef pthread_t thread_t;
+#define thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define thread_join(thr, statusp) pthread_join((thr), (statusp))
+
+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)
+#endif
+
+/* Run 5 writers threads at a time. */
+#define NUMWRITERS 5
+
+/*
+ * Printing of a thread_t is implementation-specific, so we
+ * create our own thread IDs for reporting purposes.
+ */
+int global_thread_num;
+mutex_t thread_num_lock;
+
+/* Forward declarations */
+int count_records(DB *, DB_TXN *);
+int open_db(DB **, const char *, const char *, DB_ENV *, u_int32_t);
+void *writer_thread(void *);
+
+int
+main(void)
+{
+ /* Initialize our handles */
+ DB *dbp = NULL;
+ DB_ENV *envp = NULL;
+
+ thread_t writer_threads[NUMWRITERS];
+ int i, ret, ret_t;
+ u_int32_t env_flags;
+
+ /* Application name */
+ const char *prog_name = "txn_guide_inmemory";
+
+ /* Create the environment */
+ ret = db_env_create(&envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, "Error creating environment handle: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ env_flags =
+ DB_CREATE | /* Create the environment if it does not exist */
+ DB_INIT_LOCK | /* Initialize the locking subsystem */
+ DB_INIT_LOG | /* Initialize the logging subsystem */
+ DB_INIT_TXN | /* Initialize the transactional subsystem. This
+ * also turns on logging. */
+ DB_INIT_MPOOL | /* Initialize the memory pool (in-memory cache) */
+ DB_PRIVATE | /* Region files are backed by heap memory. */
+ DB_THREAD; /* Cause the environment to be free-threaded */
+
+ /* Specify in-memory logging */
+ ret = envp->set_flags(envp, DB_LOG_INMEMORY, 1);
+ if (ret != 0) {
+ fprintf(stderr, "Error setting log subsystem to in-memory: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Specify the size of the in-memory log buffer.
+ */
+ ret = envp->set_lg_bsize(envp, 10 * 1024 * 1024);
+ if (ret != 0) {
+ fprintf(stderr, "Error increasing the log buffer size: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Specify the size of the in-memory cache.
+ */
+ ret = envp->set_cachesize(envp, 0, 10 * 1024 * 1024, 1);
+ if (ret != 0) {
+ fprintf(stderr, "Error increasing the cache size: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Indicate that we want db to perform lock detection internally.
+ * Also indicate that the transaction with the fewest number of
+ * write locks will receive the deadlock notification in
+ * the event of a deadlock.
+ */
+ ret = envp->set_lk_detect(envp, DB_LOCK_MINWRITE);
+ if (ret != 0) {
+ fprintf(stderr, "Error setting lock detect: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /* Now actually open the environment */
+ ret = envp->open(envp, NULL, env_flags, 0);
+ if (ret != 0) {
+ fprintf(stderr, "Error opening environment: %s\n",
+ db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * If we had utility threads (for running checkpoints or
+ * deadlock detection, for example) we would spawn those
+ * here. However, for a simple example such as this,
+ * that is not required.
+ */
+
+ /* Open the database */
+ ret = open_db(&dbp, prog_name, NULL,
+ envp, DB_DUPSORT);
+ if (ret != 0)
+ goto err;
+
+ /* Initialize a mutex. Used to help provide thread ids. */
+ (void)mutex_init(&thread_num_lock, NULL);
+
+ /* Start the writer threads. */
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_create(
+ &writer_threads[i], NULL, writer_thread, (void *)dbp);
+
+ /* Join the writers */
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_join(writer_threads[i], NULL);
+
+err:
+ /* Close our database handle, if it was opened. */
+ if (dbp != NULL) {
+ ret_t = dbp->close(dbp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, "%s database close failed.\n",
+ db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Close our environment, if it was opened. */
+ if (envp != NULL) {
+ ret_t = envp->close(envp, 0);
+ if (ret_t != 0) {
+ fprintf(stderr, "environment close failed: %s\n",
+ db_strerror(ret_t));
+ ret = ret_t;
+ }
+ }
+
+ /* Final status message and return. */
+ printf("I'm all done.\n");
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+/*
+ * A function that performs a series of writes to a
+ * Berkeley DB database. The information written
+ * to the database is largely nonsensical, but the
+ * mechanism of transactional commit/abort and
+ * deadlock detection is illustrated here.
+ */
+void *
+writer_thread(void *args)
+{
+ DB *dbp;
+ DB_ENV *envp;
+ DBT key, value;
+ DB_TXN *txn;
+ int i, j, payload, ret, thread_num;
+ int retry_count, max_retries = 20; /* Max retry on a deadlock */
+ char *key_strings[] = {"key 1", "key 2", "key 3", "key 4",
+ "key 5", "key 6", "key 7", "key 8",
+ "key 9", "key 10"};
+
+ dbp = (DB *)args;
+ envp = dbp->get_env(dbp);
+
+ /* Get the thread number */
+ (void)mutex_lock(&thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)mutex_unlock(&thread_num_lock);
+
+ /* Initialize the random number generator */
+ srand(thread_num);
+
+ /* Write 50 times and then quit */
+ for (i = 0; i < 50; i++) {
+ retry_count = 0; /* Used for deadlock retries */
+
+ /*
+ * Some think it is bad form to loop with a goto statement, but
+ * we do it anyway because it is the simplest and clearest way
+ * to achieve our abort/retry operation.
+ */
+retry:
+ /* Begin our transaction. We group multiple writes in
+ * this thread under a single transaction so as to
+ * (1) show that you can atomically perform multiple writes
+ * at a time, and (2) to increase the chances of a
+ * deadlock occurring so that we can observe our
+ * deadlock detection at work.
+ *
+ * Normally we would want to avoid the potential for deadlocks,
+ * so for this workload the correct thing would be to perform our
+ * puts with autocommit. But that would excessively simplify our
+ * example, so we do the "wrong" thing here instead.
+ */
+ ret = envp->txn_begin(envp, NULL, &txn, 0);
+ if (ret != 0) {
+ envp->err(envp, ret, "txn_begin failed");
+ return ((void *)EXIT_FAILURE);
+ }
+ for (j = 0; j < 10; j++) {
+ /* Set up our key and values DBTs */
+ memset(&key, 0, sizeof(DBT));
+ key.data = key_strings[j];
+ key.size = (u_int32_t)strlen(key_strings[j]) + 1;
+
+ memset(&value, 0, sizeof(DBT));
+ payload = rand() + i;
+ value.data = &payload;
+ value.size = sizeof(int);
+
+ /* Perform the database put. */
+ switch (ret = dbp->put(dbp, txn, &key, &value, 0)) {
+ case 0:
+ break;
+
+ /*
+ * Here's where we perform deadlock detection. If
+ * DB_LOCK_DEADLOCK is returned by the put operation,
+ * then this thread has been chosen to break a deadlock.
+ * It must abort its operation, and optionally retry the
+ * put.
+ */
+ case DB_LOCK_DEADLOCK:
+ /*
+ * First thing that we MUST do is abort the
+ * transaction.
+ */
+ (void)txn->abort(txn);
+ /*
+ * Now we decide if we want to retry the operation.
+ * If we have retried less than max_retries,
+ * increment the retry count and goto retry.
+ */
+ if (retry_count < max_retries) {
+ printf("Writer %i: Got DB_LOCK_DEADLOCK.\n",
+ thread_num);
+ printf("Writer %i: Retrying write operation.\n",
+ thread_num);
+ retry_count++;
+ goto retry;
+ }
+ /*
+ * Otherwise, just give up.
+ */
+ printf("Writer %i: ", thread_num);
+ printf("Got DB_LOCK_DEADLOCK and out of retries.\n");
+ printf("Writer %i: Giving up.\n", thread_num);
+ return ((void *)EXIT_FAILURE);
+ /*
+ * If a generic error occurs, we simply abort the
+ * transaction and exit the thread completely.
+ */
+ default:
+ envp->err(envp, ret, "db put failed");
+ ret = txn->abort(txn);
+ if (ret != 0)
+ envp->err(envp, ret, "txn abort failed");
+ return ((void *)EXIT_FAILURE);
+ } /** End case statement **/
+
+ } /** End for loop **/
+
+ /*
+ * print the number of records found in the database.
+ * See count_records() for usage information.
+ */
+ printf("Thread %i. Record count: %i\n", thread_num,
+ count_records(dbp, txn));
+
+ /*
+ * If all goes well, we can commit the transaction and
+ * exit the thread.
+ */
+ ret = txn->commit(txn, 0);
+ if (ret != 0) {
+ envp->err(envp, ret, "txn commit failed");
+ return ((void *)EXIT_FAILURE);
+ }
+ }
+ return ((void *)EXIT_SUCCESS);
+}
+
+/*
+ * This simply counts the number of records contained in the
+ * database and returns the result. You can use this function
+ * in three ways:
+ *
+ * First call it with an active txn handle (this is what the
+ * example currently does).
+ *
+ * Secondly, configure the cursor for uncommitted reads.
+ *
+ * Third, call count_records AFTER the writer has committed
+ * its transaction.
+ *
+ * If you do none of these things, the writer thread will
+ * self-deadlock.
+ *
+ * Note that this function exists only for illustrative purposes.
+ * A more straight-forward way to count the number of records in
+ * a database is to use DB->stat() or DB->stat_print().
+ */
+
+int
+count_records(DB *dbp, DB_TXN *txn)
+{
+ DBT key, value;
+ DBC *cursorp;
+ int count, ret;
+
+ cursorp = NULL;
+ count = 0;
+
+ /* Get the cursor */
+ ret = dbp->cursor(dbp, txn, &cursorp, 0);
+ if (ret != 0) {
+ dbp->err(dbp, ret,
+ "count_records: cursor open failed.");
+ goto cursor_err;
+ }
+
+ /* Get the key DBT used for the database read */
+ memset(&key, 0, sizeof(DBT));
+ memset(&value, 0, sizeof(DBT));
+ do {
+ ret = cursorp->c_get(cursorp, &key, &value, DB_NEXT);
+ switch (ret) {
+ case 0:
+ count++;
+ break;
+ case DB_NOTFOUND:
+ break;
+ default:
+ dbp->err(dbp, ret,
+ "Count records unspecified error");
+ goto cursor_err;
+ }
+ } while (ret == 0);
+
+cursor_err:
+ if (cursorp != NULL) {
+ ret = cursorp->c_close(cursorp);
+ if (ret != 0) {
+ dbp->err(dbp, ret,
+ "count_records: cursor close failed.");
+ }
+ }
+
+ return (count);
+}
+
+/* Open a Berkeley DB database */
+int
+open_db(DB **dbpp, const char *progname, const char *file_name,
+ DB_ENV *envp, u_int32_t extra_flags)
+{
+ int ret;
+ u_int32_t open_flags;
+ DB *dbp;
+
+ /* Initialize the DB handle */
+ ret = db_create(&dbp, envp, 0);
+ if (ret != 0) {
+ fprintf(stderr, "%s: %s\n", progname,
+ db_strerror(ret));
+ return (EXIT_FAILURE);
+ }
+
+ /* Point to the memory malloc'd by db_create() */
+ *dbpp = dbp;
+
+ if (extra_flags != 0) {
+ ret = dbp->set_flags(dbp, extra_flags);
+ if (ret != 0) {
+ dbp->err(dbp, ret,
+ "open_db: Attempt to set extra flags failed.");
+ return (EXIT_FAILURE);
+ }
+ }
+
+ /* Now open the database */
+ open_flags = DB_CREATE | /* Allow database creation */
+ DB_THREAD |
+ DB_AUTO_COMMIT; /* Allow autocommit */
+
+ ret = dbp->open(dbp, /* Pointer to the database */
+ NULL, /* Txn pointer */
+ file_name, /* File name */
+ NULL, /* Logical db name */
+ DB_BTREE, /* Database type (using btree) */
+ open_flags, /* Open flags */
+ 0); /* File mode. Using defaults */
+
+ if (ret != 0) {
+ dbp->err(dbp, ret, "Database open failed");
+ return (EXIT_FAILURE);
+ }
+ return (EXIT_SUCCESS);
+}
diff --git a/db/examples_cxx/AccessExample.cpp b/db/examples_cxx/AccessExample.cpp
index ead22ac14..6e578f05b 100644
--- a/db/examples_cxx/AccessExample.cpp
+++ b/db/examples_cxx/AccessExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: AccessExample.cpp,v 11.24 2004/09/17 22:00:28 mjc Exp $
+ * $Id: AccessExample.cpp,v 12.3 2006/08/24 14:45:48 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_cxx/BtRecExample.cpp b/db/examples_cxx/BtRecExample.cpp
index e56effdac..b2808c3e3 100644
--- a/db/examples_cxx/BtRecExample.cpp
+++ b/db/examples_cxx/BtRecExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: BtRecExample.cpp,v 11.26 2004/09/17 22:00:28 mjc Exp $
+ * $Id: BtRecExample.cpp,v 12.3 2006/08/24 14:45:49 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_cxx/EnvExample.cpp b/db/examples_cxx/EnvExample.cpp
index 6e3aeab90..8de964d49 100644
--- a/db/examples_cxx/EnvExample.cpp
+++ b/db/examples_cxx/EnvExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: EnvExample.cpp,v 11.26 2004/01/28 03:36:04 bostic Exp $
+ * $Id: EnvExample.cpp,v 12.3 2006/08/24 14:45:49 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_cxx/LockExample.cpp b/db/examples_cxx/LockExample.cpp
index a6cfb6ef2..5fbc4747a 100644
--- a/db/examples_cxx/LockExample.cpp
+++ b/db/examples_cxx/LockExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LockExample.cpp,v 11.26 2004/09/17 22:00:28 mjc Exp $
+ * $Id: LockExample.cpp,v 12.3 2006/08/24 14:45:49 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/examples_cxx/MpoolExample.cpp b/db/examples_cxx/MpoolExample.cpp
index b7d43f091..8d2d43be6 100644
--- a/db/examples_cxx/MpoolExample.cpp
+++ b/db/examples_cxx/MpoolExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MpoolExample.cpp,v 11.25 2004/01/28 03:36:05 bostic Exp $
+ * $Id: MpoolExample.cpp,v 12.4 2006/08/24 14:45:49 bostic Exp $
*/
#include <sys/types.h>
@@ -187,7 +187,7 @@ MpoolExample::run(int hits, int pagesize, int npages)
srand((unsigned int)time(NULL));
for (cnt = 0; cnt < hits; ++cnt) {
pageno = (rand() % npages) + 1;
- if ((ret = mfp->get(&pageno, 0, &p)) != 0) {
+ if ((ret = mfp->get(&pageno, NULL, 0, &p)) != 0) {
cerr << "MpoolExample: unable to retrieve page "
<< (unsigned long)pageno << ": "
<< strerror(ret) << "\n";
diff --git a/db/examples_cxx/SequenceExample.cpp b/db/examples_cxx/SequenceExample.cpp
index 9958e00c7..7b8830f4e 100644
--- a/db/examples_cxx/SequenceExample.cpp
+++ b/db/examples_cxx/SequenceExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SequenceExample.cpp,v 1.1 2004/09/22 22:20:32 mjc Exp $
+ * $Id: SequenceExample.cpp,v 12.4 2006/08/24 14:45:49 bostic Exp $
*/
#include <sys/types.h>
@@ -118,7 +118,11 @@ void SequenceExample::run(bool removeExistingDatabase, const char *fileName)
for (int i = 0; i < 10; i++) {
db_seq_t seqnum;
seq.get(0, 1, &seqnum, 0);
- cout << "Got sequence number: " << seqnum << "\n";
+
+ // We don't have a portable way to print 64-bit numbers.
+ cout << "Got sequence number (" <<
+ (int)(seqnum >> 32) << ", " << (unsigned)seqnum <<
+ ")\n";
}
seq.close(0);
diff --git a/db/examples_cxx/TpcbExample.cpp b/db/examples_cxx/TpcbExample.cpp
index fd6648855..50093a47d 100644
--- a/db/examples_cxx/TpcbExample.cpp
+++ b/db/examples_cxx/TpcbExample.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TpcbExample.cpp,v 11.33 2004/01/28 03:36:05 bostic Exp $
+ * $Id: TpcbExample.cpp,v 12.5 2006/08/24 14:45:49 bostic Exp $
*/
#include <sys/types.h>
@@ -45,8 +45,7 @@ public:
// not fully initialized until the DbEnv::open() method
// is called.
//
- TpcbExample(const char *home, int cachesize,
- int initializing, int flags);
+ TpcbExample(const char *home, int cachesize, int flags);
private:
static const char FileName[];
@@ -208,8 +207,7 @@ 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, txn_no_sync ? DB_TXN_NOSYNC : 0);
if (iflag) {
if (ntxns != 0)
@@ -248,8 +246,7 @@ usage()
return (EXIT_FAILURE);
}
-TpcbExample::TpcbExample(const char *home, int cachesize,
- int initializing, int flags)
+TpcbExample::TpcbExample(const char *home, int cachesize, int flags)
: DbEnv(0)
{
u_int32_t local_flags;
@@ -263,9 +260,8 @@ TpcbExample::TpcbExample(const char *home, int cachesize,
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;
+ local_flags = flags | DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
+ DB_INIT_MPOOL | DB_INIT_TXN;
open(home, local_flags, 0);
}
@@ -290,7 +286,7 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp->set_h_nelem((unsigned int)accounts);
if ((err = dbp->open(NULL, "account", NULL, DB_HASH,
- DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
+ DB_CREATE, 0644)) != 0) {
DbException except("Account file create failed", err);
throw except;
}
@@ -319,7 +315,7 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp->set_pagesize(512);
if ((err = dbp->open(NULL, "branch", NULL, DB_HASH,
- DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
+ DB_CREATE, 0644)) != 0) {
DbException except("Branch file create failed", err);
throw except;
}
@@ -347,7 +343,7 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp->set_pagesize(512);
if ((err = dbp->open(NULL, "teller", NULL, DB_HASH,
- DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
+ DB_CREATE, 0644)) != 0) {
DbException except("Teller file create failed", err);
throw except;
}
@@ -368,7 +364,7 @@ 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(NULL, "history", NULL, DB_RECNO,
- DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
+ DB_CREATE, 0644)) != 0) {
DbException except("Create of history file failed", err);
throw except;
}
@@ -473,9 +469,8 @@ void
TpcbExample::run(int n, int accounts, int branches, int tellers)
{
Db *adb, *bdb, *hdb, *tdb;
- double gtps, itps;
- int failed, ifailed, ret, txns;
- time_t starttime, curtime, lasttime;
+ int failed, ret, txns;
+ time_t start_time, end_time;
//
// Open the database files.
@@ -510,39 +505,24 @@ TpcbExample::run(int n, int accounts, int branches, int tellers)
throw except;
}
- txns = failed = ifailed = 0;
- starttime = time(NULL);
- 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 = time(NULL);
- gtps = (double)(txns - failed) / (curtime - starttime);
- itps = (double)(5000 - ifailed) / (curtime - lasttime);
-
- // We use printf because it provides much simpler
- // formatting than iostreams.
- //
- printf("%d txns %d failed ", txns, failed);
- printf("%6.2f TPS (gross) %6.2f TPS (interval)\n",
- gtps, itps);
- lasttime = curtime;
- ifailed = 0;
- }
- }
+ (void)time(&start_time);
+ for (txns = n, failed = 0; n-- > 0;)
+ if ((ret = txn(adb, bdb, tdb, hdb,
+ accounts, branches, tellers)) != 0)
+ ++failed;
+ (void)time(&end_time);
+ if (end_time == start_time)
+ ++end_time;
+ // We use printf because it provides much simpler
+ // formatting than iostreams.
+ //
+ printf("%s: %d txns: %d failed, %.2f TPS\n", progname, txns, failed,
+ (txns - failed) / (double)(end_time - start_time));
(void)adb->close(0);
(void)bdb->close(0);
(void)tdb->close(0);
(void)hdb->close(0);
-
- cout << (long)txns << " transactions begun "
- << (long)failed << " failed\n";
}
//
@@ -567,9 +547,9 @@ TpcbExample::txn(Db *adb, Db *bdb, Db *tdb, Db *hdb,
Dbt k_dbt;
Dbt k_histdbt(&key, sizeof(key));
- //
- // XXX We could move a lot of this into the driver to make this
- // faster.
+ // !!!
+ // This is sample code -- we could move a lot of this into the driver
+ // to make it faster.
//
account = random_id(ACCOUNT, accounts, branches, tellers);
branch = random_id(BRANCH, accounts, branches, tellers);
@@ -588,7 +568,12 @@ TpcbExample::txn(Db *adb, Db *bdb, Db *tdb, Db *hdb,
// Request 0 bytes since we're just positioning.
d_histdbt.set_flags(DB_DBT_PARTIAL);
- // START TIMING
+ // START PER-TRANSACTION TIMING.
+ //
+ // Technically, TPCB requires a limit on response time, you only get
+ // to count transactions that complete within 2 seconds. That's not
+ // an issue for this sample application -- regardless, here's where
+ // the transaction begins.
if (txn_begin(NULL, &t, 0) != 0)
goto err;
@@ -636,7 +621,7 @@ TpcbExample::txn(Db *adb, Db *bdb, Db *tdb, Db *hdb,
if (ret != 0)
goto err;
- // END TIMING
+ // END PER-TRANSACTION TIMING.
return (0);
err:
diff --git a/db/examples_cxx/excxx_repquote/RepConfigInfo.cpp b/db/examples_cxx/excxx_repquote/RepConfigInfo.cpp
new file mode 100644
index 000000000..d1a24fda8
--- /dev/null
+++ b/db/examples_cxx/excxx_repquote/RepConfigInfo.cpp
@@ -0,0 +1,53 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RepConfigInfo.cpp,v 1.4 2006/08/24 14:45:50 bostic Exp $
+ */
+
+#include "RepConfigInfo.h"
+
+RepConfigInfo::RepConfigInfo()
+{
+ start_policy = DB_REP_ELECTION;
+ home = "TESTDIR";
+ got_listen_address = false;
+ totalsites = 0;
+ priority = 100;
+ verbose = false;
+ other_hosts = NULL;
+}
+
+RepConfigInfo::~RepConfigInfo()
+{
+ // release any other_hosts structs.
+ if (other_hosts != NULL) {
+ REP_HOST_INFO *CurItem = other_hosts;
+ while (CurItem->next != NULL)
+ {
+ REP_HOST_INFO *TmpItem = CurItem;
+ free(CurItem);
+ CurItem = TmpItem;
+ }
+ free(CurItem);
+ }
+ other_hosts = NULL;
+}
+
+void RepConfigInfo::addOtherHost(char* host, int port, bool peer)
+{
+ REP_HOST_INFO *newinfo;
+ newinfo = (REP_HOST_INFO*)malloc(sizeof(REP_HOST_INFO));
+ newinfo->host = host;
+ newinfo->port = port;
+ newinfo->peer = peer;
+ if (other_hosts == NULL) {
+ other_hosts = newinfo;
+ newinfo->next = NULL;
+ } else {
+ newinfo->next = other_hosts;
+ other_hosts = newinfo;
+ }
+}
diff --git a/db/examples_cxx/excxx_repquote/RepConfigInfo.h b/db/examples_cxx/excxx_repquote/RepConfigInfo.h
new file mode 100644
index 000000000..da42dea7d
--- /dev/null
+++ b/db/examples_cxx/excxx_repquote/RepConfigInfo.h
@@ -0,0 +1,36 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RepConfigInfo.h,v 1.2 2006/08/24 14:45:50 bostic Exp $
+ */
+#include <db_cxx.h>
+
+// Chainable struct used to store host information.
+typedef struct RepHostInfoObj{
+ char* host;
+ int port;
+ bool peer; // only relevant for "other" hosts
+ RepHostInfoObj* next; // used for chaining multiple "other" hosts.
+} REP_HOST_INFO;
+
+class RepConfigInfo {
+public:
+ RepConfigInfo();
+ virtual ~RepConfigInfo();
+
+ void addOtherHost(char* host, int port, bool peer);
+public:
+ u_int32_t start_policy;
+ char* home;
+ bool got_listen_address;
+ REP_HOST_INFO this_host;
+ int totalsites;
+ int priority;
+ bool verbose;
+ // used to store a set of optional other hosts.
+ REP_HOST_INFO *other_hosts;
+};
+
diff --git a/db/examples_cxx/excxx_repquote/RepQuoteExample.cpp b/db/examples_cxx/excxx_repquote/RepQuoteExample.cpp
new file mode 100644
index 000000000..a3e8e780b
--- /dev/null
+++ b/db/examples_cxx/excxx_repquote/RepQuoteExample.cpp
@@ -0,0 +1,459 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RepQuoteExample.cpp,v 1.11 2006/09/09 14:15:56 bostic Exp $
+ */
+
+/*
+ * In this application, we specify all communication via the command line. In
+ * a real application, we would expect that information about the other sites
+ * in the system would be maintained in some sort of configuration file. The
+ * critical part of this interface is that we assume at startup that we can
+ * find out
+ * 1) what host/port we wish to listen on for connections,
+ * 2) a (possibly empty) list of other sites we should attempt to connect
+ * to; and
+ * 3) what our Berkeley DB home environment is.
+ *
+ * These pieces of information are expressed by the following flags.
+ * -m host:port (required; m stands for me)
+ * -o host:port (optional; o stands for other; any number of these may be
+ * specified)
+ * -h home directory
+ * -n nsites (optional; number of sites in replication group; defaults to 0
+ * in which case we try to dynamically compute the number of sites in
+ * the replication group)
+ * -p priority (optional: defaults to 100)
+ */
+
+#include <iostream>
+
+#include <db_cxx.h>
+#include "RepConfigInfo.h"
+
+using std::cout;
+using std::cin;
+using std::cerr;
+using std::endl;
+using std::flush;
+
+#define CACHESIZE (10 * 1024 * 1024)
+#define DATABASE "quote.db"
+#define SLEEPTIME 3
+
+const char *progname = "excxx_repquote";
+
+#include <errno.h>
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#define sleep(s) Sleep(1000 * (s))
+
+extern "C" {
+ extern int getopt(int, char * const *, const char *);
+ extern char *optarg;
+}
+#else
+#include <errno.h>
+#endif
+
+// Struct used to store information in Db app_private field.
+typedef struct {
+ int is_master;
+} APP_DATA;
+
+class RepQuoteExample
+{
+public:
+ RepQuoteExample();
+ int init(RepConfigInfo* config);
+ int doloop();
+ int terminate();
+
+ static void event_callback(DbEnv * dbenv, u_int32_t which, void *info);
+
+private:
+ // disable copy constructor.
+ RepQuoteExample(const RepQuoteExample &);
+ void operator = (const RepQuoteExample &);
+
+ // internal data members.
+ APP_DATA app_data;
+ RepConfigInfo *app_config;
+ DbEnv cur_env;
+
+ // private methods.
+ static int print_stocks(Db *dbp);
+};
+
+static void usage()
+{
+ cerr << "usage: " << progname << endl
+ << "[-h home][-o host:port][-m host:port][-f host:port]"
+ << "[-n nsites][-p priority]" << endl;
+
+ cerr << "\t -m host:port (required; m stands for me)" << endl
+ << "\t -o host:port (optional; o stands for other; any "
+ << "number of these may be specified)" << endl
+ << "\t -h home directory" << endl
+ << "\t -n nsites (optional; number of sites in replication "
+ << "group; defaults to 0" << endl
+ << "\t in which case we try to dynamically compute the "
+ << "number of sites in" << endl
+ << "\t the replication group)" << endl
+ << "\t -p priority (optional: defaults to 100)" << endl;
+
+ exit(EXIT_FAILURE);
+}
+
+int main(int argc, char **argv)
+{
+ RepConfigInfo config;
+ char ch, *portstr, *tmphost;
+ int tmpport;
+ bool tmppeer;
+ int ret;
+
+ // Extract the command line parameters
+ while ((ch = getopt(argc, argv, "CFf:h:Mm:n:o:p:v")) != EOF) {
+ tmppeer = false;
+ switch (ch) {
+ case 'C':
+ config.start_policy = DB_REP_CLIENT;
+ break;
+ case 'F':
+ config.start_policy = DB_REP_FULL_ELECTION;
+ break;
+ case 'h':
+ config.home = optarg;
+ break;
+ case 'M':
+ config.start_policy = DB_REP_MASTER;
+ break;
+ case 'm':
+ config.this_host.host = strtok(optarg, ":");
+ if ((portstr = strtok(NULL, ":")) == NULL) {
+ cerr << "Bad host specification." << endl;
+ usage();
+ }
+ config.this_host.port = (unsigned short)atoi(portstr);
+ config.got_listen_address = true;
+ break;
+ case 'n':
+ config.totalsites = atoi(optarg);
+ break;
+ case 'f':
+ tmppeer = true; // FALLTHROUGH
+ case 'o':
+ tmphost = strtok(optarg, ":");
+ if ((portstr = strtok(NULL, ":")) == NULL) {
+ cerr << "Bad host specification." << endl;
+ usage();
+ }
+ tmpport = (unsigned short)atoi(portstr);
+
+ config.addOtherHost(tmphost, tmpport, tmppeer);
+
+ break;
+ case 'p':
+ config.priority = atoi(optarg);
+ break;
+ case 'v':
+ config.verbose = true;
+ break;
+ case '?':
+ default:
+ usage();
+ }
+ }
+
+ // Error check command line.
+ if ((!config.got_listen_address) || config.home == NULL)
+ usage();
+
+ RepQuoteExample runner;
+ try {
+ if((ret = runner.init(&config)) != 0)
+ goto err;
+ if((ret = runner.doloop()) != 0)
+ goto err;
+ } catch (DbException dbe) {
+ cerr << "Caught an exception during initialization or"
+ << " processing: " << dbe.what() << endl;
+ }
+err:
+ runner.terminate();
+ return 0;
+}
+
+RepQuoteExample::RepQuoteExample() : app_config(0), cur_env(0)
+{
+ app_data.is_master = 0; // assume I start out as client
+}
+
+int RepQuoteExample::init(RepConfigInfo *config)
+{
+ int ret = 0;
+
+ app_config = config;
+
+ cur_env.set_app_private(&app_data);
+ cur_env.set_errfile(stderr);
+ cur_env.set_errpfx(progname);
+ cur_env.set_event_notify(event_callback);
+ cur_env.repmgr_set_ack_policy(DB_REPMGR_ACKS_ALL);
+
+ if ((ret = cur_env.repmgr_set_local_site(app_config->this_host.host,
+ app_config->this_host.port, 0)) != 0) {
+ // should throw an exception anyway.
+ cerr << "Could not set listen address to host:port "
+ << app_config->this_host.host << ":"
+ << app_config->this_host.port
+ << "error: " << ret << endl;
+ cerr << "WARNING: This should have been an exception." << endl;
+ }
+
+ for ( REP_HOST_INFO *cur = app_config->other_hosts; cur != NULL;
+ cur = cur->next) {
+ if ((ret = cur_env.repmgr_add_remote_site(cur->host, cur->port,
+ NULL, cur->peer ? DB_REPMGR_PEER : 0)) != 0) {
+ // should have resulted in an exception.
+ cerr << "could not add site." << endl
+ << "WARNING: This should have been an exception." << endl;
+ }
+ }
+
+ if (app_config->totalsites > 0) {
+ try {
+ if ((ret = cur_env.rep_set_nsites(app_config->totalsites)) != 0)
+ cur_env.err(ret, "set_nsites");
+ } catch (DbException dbe) {
+ cerr << "rep_set_nsites call failed. Continuing." << endl;
+ // non-fatal to the test app.
+ }
+ }
+
+ cur_env.rep_set_priority(app_config->priority);
+
+ /*
+ * 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.
+ */
+ cur_env.set_cachesize(0, CACHESIZE, 0);
+ cur_env.set_flags(DB_TXN_NOSYNC, 1);
+
+ try {
+ cur_env.open(app_config->home, DB_CREATE | DB_RECOVER |
+ DB_THREAD | DB_INIT_REP | DB_INIT_LOCK | DB_INIT_LOG |
+ DB_INIT_MPOOL | DB_INIT_TXN, 0);
+ } catch(DbException dbe) {
+ cerr << "Caught an exception during DB environment open." << endl
+ << "Ensure that the home directory is created prior to starting"
+ << " the application." << endl;
+ ret = ENOENT;
+ goto err;
+ }
+ if (app_config->verbose &&
+ (ret = cur_env.set_verbose(DB_VERB_REPLICATION, 1)) != 0)
+ goto err;
+
+ if ((ret = cur_env.repmgr_start(3, app_config->start_policy)) != 0)
+ goto err;
+
+err:
+ return ret;
+}
+
+int RepQuoteExample::terminate()
+{
+ try {
+ cur_env.close(0);
+ } catch (DbException dbe) {
+ cout << "error closing environment: " << dbe.what() << endl;
+ }
+ return 0;
+}
+
+#define BUFSIZE 1024
+int RepQuoteExample::doloop()
+{
+ Db *dbp;
+ Dbt key, data;
+ char buf[BUFSIZE], *rbuf;
+ int ret, was_master;
+
+ dbp = NULL;
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ ret = was_master = 0;
+
+ for (;;) {
+ if (dbp == NULL) {
+ dbp = new Db(&cur_env, 0);
+
+ // Set page size small so page allocation is cheap.
+ if ((ret = dbp->set_pagesize(512)) != 0)
+ goto err;
+
+ try {
+ dbp->open(NULL, DATABASE, NULL, DB_BTREE,
+ app_data.is_master ? DB_CREATE | DB_AUTO_COMMIT :
+ DB_AUTO_COMMIT, 0);
+ } catch(DbException dbe) {
+ /* It is expected that the database open will fail
+ * when client sites first start up.
+ * It can take a while for the master site to be found
+ * and synced, and no DB is available until then.
+ */
+ if (dbe.get_errno() == ENOENT) {
+ cout << "No stock db available yet - retrying." << endl;
+ try {
+ dbp->close(0);
+ } catch (DbException dbe2) {
+ cout << "Unexpected error closing after failed" <<
+ " open, message: " << dbe2.what() << endl;
+ dbp = NULL;
+ goto err;
+ }
+ dbp = NULL;
+ sleep(SLEEPTIME);
+ continue;
+ } else {
+ cur_env.err(ret, "DB->open");
+ throw dbe;
+ }
+ }
+ }
+
+ cout << "QUOTESERVER" ;
+ if (!app_data.is_master)
+ cout << "(read-only)";
+ cout << "> " << flush;
+
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if (strtok(&buf[0], " \t\n") == NULL) {
+ switch ((ret = print_stocks(dbp))) {
+ case 0:
+ continue;
+ case DB_REP_HANDLE_DEAD:
+ (void)dbp->close(DB_NOSYNC);
+ dbp = NULL;
+ default:
+ dbp->err(ret, "Error traversing data");
+ goto err;
+ }
+ }
+ rbuf = strtok(NULL, " \t\n");
+ if (rbuf == NULL || rbuf[0] == '\0') {
+ if (strncmp(buf, "exit", 4) == 0 ||
+ strncmp(buf, "quit", 4) == 0)
+ break;
+ cur_env.errx("Format: TICKER VALUE");
+ continue;
+ }
+
+ if (!app_data.is_master) {
+ cur_env.errx("Can't update at client");
+ continue;
+ }
+
+ key.set_data(buf);
+ key.set_size((u_int32_t)strlen(buf));
+
+ data.set_data(rbuf);
+ data.set_size((u_int32_t)strlen(rbuf));
+
+ if ((ret = dbp->put(NULL, &key, &data, DB_AUTO_COMMIT)) != 0)
+ {
+ dbp->err(ret, "DB->put");
+ if (ret != DB_KEYEXIST)
+ goto err;
+ }
+ }
+
+err: if (dbp != NULL)
+ (void)dbp->close(DB_NOSYNC);
+
+ return (ret);
+}
+
+void RepQuoteExample::event_callback(DbEnv* dbenv, u_int32_t which, void *info)
+{
+ APP_DATA *app = (APP_DATA*)dbenv->get_app_private();
+
+ info = NULL; /* Currently unused. */
+
+ switch (which) {
+ case DB_EVENT_REP_MASTER:
+ app->is_master = 1;
+ break;
+
+ case DB_EVENT_REP_CLIENT:
+ app->is_master = 0;
+ break;
+
+ case DB_EVENT_REP_STARTUPDONE: /* FALLTHROUGH */
+ case DB_EVENT_REP_NEWMASTER:
+ // I don't care about this one, for now.
+ break;
+
+ default:
+ dbenv->errx("ignoring event %d", which);
+ }
+}
+
+int RepQuoteExample::print_stocks(Db *dbp)
+{
+ Dbc *dbc;
+ Dbt key, data;
+#define MAXKEYSIZE 10
+#define MAXDATASIZE 20
+ char keybuf[MAXKEYSIZE + 1], databuf[MAXDATASIZE + 1];
+ int ret, t_ret;
+ u_int32_t keysize, datasize;
+
+ if ((ret = dbp->cursor(NULL, &dbc, 0)) != 0) {
+ dbp->err(ret, "can't open cursor");
+ return (ret);
+ }
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+
+ cout << "\tSymbol\tPrice" << endl
+ << "\t======\t=====" << endl;
+
+ for (ret = dbc->get(&key, &data, DB_FIRST);
+ ret == 0;
+ ret = dbc->get(&key, &data, DB_NEXT)) {
+ keysize = key.get_size() > MAXKEYSIZE ? MAXKEYSIZE : key.get_size();
+ memcpy(keybuf, key.get_data(), keysize);
+ keybuf[keysize] = '\0';
+
+ datasize = data.get_size() >=
+ MAXDATASIZE ? MAXDATASIZE : data.get_size();
+ memcpy(databuf, data.get_data(), datasize);
+ databuf[datasize] = '\0';
+
+ cout << "\t" << keybuf << "\t" << databuf << endl;
+ }
+ cout << endl << flush;
+
+ if ((t_ret = dbc->close()) != 0 && ret == 0)
+ ret = t_ret;
+
+ switch (ret) {
+ case 0:
+ case DB_NOTFOUND:
+ case DB_LOCK_DEADLOCK:
+ return (0);
+ default:
+ return (ret);
+ }
+}
+
diff --git a/db/examples_cxx/getting_started/excxx_example_database_load.cpp b/db/examples_cxx/getting_started/excxx_example_database_load.cpp
index b9e79f339..e0605ae7a 100644
--- a/db/examples_cxx/getting_started/excxx_example_database_load.cpp
+++ b/db/examples_cxx/getting_started/excxx_example_database_load.cpp
@@ -9,7 +9,7 @@
#ifdef _WIN32
extern "C" {
extern int getopt(int, char * const *, const char *);
- extern int optind;
+ extern char *optarg;
}
#else
#include <unistd.h>
@@ -40,7 +40,6 @@ main (int argc, char *argv[])
{
char ch, lastChar;
- extern char *optarg;
// Initialize the path to the database files
std::string basename("./");
@@ -112,10 +111,10 @@ main (int argc, char *argv[])
// Used to locate the first pound sign (a field delimiter)
// in the input string.
-int
+size_t
getNextPound(std::string &theString, std::string &substring)
{
- int pos = theString.find("#");
+ size_t pos = theString.find("#");
substring.assign(theString, 0, pos);
theString.assign(theString, pos + 1, theString.size());
return (pos);
@@ -127,7 +126,7 @@ loadInventoryDB(MyDb &inventoryDB, std::string &inventoryFile)
{
InventoryData inventoryData;
std::string substring;
- int nextPound;
+ size_t nextPound;
std::ifstream inFile(inventoryFile.c_str(), std::ios::in);
if ( !inFile )
@@ -165,12 +164,12 @@ loadInventoryDB(MyDb &inventoryDB, std::string &inventoryFile)
inventoryData.setVendor(substring);
void *buff = (void *)inventoryData.getSKU().c_str();
- int size = inventoryData.getSKU().size()+1;
- Dbt key(buff, size);
+ size_t size = inventoryData.getSKU().size()+1;
+ Dbt key(buff, (u_int32_t)size);
buff = inventoryData.getBuffer();
size = inventoryData.getBufferSize();
- Dbt data(buff, size);
+ Dbt data(buff, (u_int32_t)size);
inventoryDB.getDb().put(NULL, &key, &data, 0);
}
@@ -211,7 +210,7 @@ loadVendorDB(MyDb &vendorDB, std::string &vendorFile)
my_vendor.zipcode, my_vendor.phone_number,
my_vendor.sales_rep, my_vendor.sales_rep_phone);
- Dbt key(my_vendor.name, strlen(my_vendor.name) + 1);
+ Dbt key(my_vendor.name, (u_int32_t)strlen(my_vendor.name) + 1);
Dbt data(&my_vendor, sizeof(VENDOR));
vendorDB.getDb().put(NULL, &key, &data, 0);
diff --git a/db/examples_cxx/getting_started/excxx_example_database_read.cpp b/db/examples_cxx/getting_started/excxx_example_database_read.cpp
index 373e7f371..ef9ec3c8e 100644
--- a/db/examples_cxx/getting_started/excxx_example_database_read.cpp
+++ b/db/examples_cxx/getting_started/excxx_example_database_read.cpp
@@ -10,7 +10,7 @@
#ifdef _WIN32
extern "C" {
extern int getopt(int, char * const *, const char *);
- extern int optind;
+ extern char *optarg;
}
#else
#include <unistd.h>
@@ -38,7 +38,6 @@ main (int argc, char *argv[])
{
char ch, lastChar;
- extern char *optarg;
// Initialize the path to the database files
std::string databaseHome("./");
@@ -114,7 +113,7 @@ show_item(MyDb &itemnameSDB, MyDb &vendorDB, std::string &itemName)
// Get the search key. This is the name on the inventory
// record that we want to examine.
std::cout << "Looking for " << itemName << std::endl;
- Dbt key((void *)itemName.c_str(), itemName.length() + 1);
+ Dbt key((void *)itemName.c_str(), (u_int32_t)itemName.length() + 1);
Dbt data;
// Position the cursor to the first record in the secondary
@@ -196,7 +195,7 @@ show_vendor(MyDb &vendorDB, const char *vendor)
// Set the search key to the vendor's name
// vendor is explicitly cast to char * to stop a compiler
// complaint.
- Dbt key((char *)vendor, strlen(vendor) + 1);
+ Dbt key((char *)vendor, (u_int32_t)strlen(vendor) + 1);
// Make sure we use the memory we set aside for the VENDOR
// structure rather than the memory that DB allocates.
diff --git a/db/examples_cxx/getting_started/gettingStartedCommon.hpp b/db/examples_cxx/getting_started/gettingStartedCommon.hpp
index 27d1cf1c7..d4d8ca9c1 100644
--- a/db/examples_cxx/getting_started/gettingStartedCommon.hpp
+++ b/db/examples_cxx/getting_started/gettingStartedCommon.hpp
@@ -96,7 +96,7 @@ public:
* Returns the size of the buffer. Used for storing
* the buffer in a database.
*/
- inline int getBufferSize() { return (bufLen_); }
+ inline size_t getBufferSize() { return (bufLen_); }
/* Utility function used to show the contents of this class */
void
@@ -118,7 +118,7 @@ private:
void
packString(char *buffer, std::string &theString)
{
- int string_size = theString.size() + 1;
+ size_t string_size = theString.size() + 1;
memcpy(buffer+bufLen_, theString.c_str(), string_size);
bufLen_ += string_size;
}
@@ -127,7 +127,7 @@ private:
std::string category_, name_, vendor_, sku_;
double price_;
long quantity_;
- int bufLen_;
+ size_t bufLen_;
char databuf_[500];
};
@@ -155,26 +155,32 @@ class Dbt;
int
get_item_name(Db *dbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey)
{
- InventoryData id(pdata->get_data());
- const char *itemname = id.getName().c_str();
+ /*
+ * First, obtain the buffer location where we placed the item's name. In
+ * this example, the item's name is located in the primary data. It is the
+ * first string in the buffer after the price (a double) and the quantity
+ * (a long).
+ */
+ u_int32_t offset = sizeof(double) + sizeof(long);
+ char *itemname = (char *)pdata->get_data() + offset;
// unused
(void)pkey;
- // If these don't match, then there was a problem with
- // the buffer contained in pdata, or there's a programming
- // error in how the buffer is marshalled/unmarshalled.
- // This should never happen!
- if ((u_int32_t)id.getBufferSize() != pdata->get_size()) {
+ /*
+ * If the offset is beyond the end of the data, then there was a problem
+ * with the buffer contained in pdata, or there's a programming error in
+ * how the buffer is marshalled/unmarshalled. This should never happen!
+ */
+ if (offset > pdata->get_size()) {
dbp->errx("get_item_name: buffer sizes do not match!");
- // When we return non-zero, the index record is not
- // added/updated.
+ // When we return non-zero, the index record is not added/updated.
return (-1);
}
/* Now set the secondary key's data to be the item name */
- skey->set_data((void *)itemname);
- skey->set_size(strlen(itemname) + 1);
+ skey->set_data(itemname);
+ skey->set_size((u_int32_t)strlen(itemname) + 1);
return (0);
};
diff --git a/db/examples_cxx/txn_guide/TxnGuide.cpp b/db/examples_cxx/txn_guide/TxnGuide.cpp
new file mode 100644
index 000000000..cadc2c0bb
--- /dev/null
+++ b/db/examples_cxx/txn_guide/TxnGuide.cpp
@@ -0,0 +1,387 @@
+// File TxnGuide.cpp
+
+#include <iostream>
+#include <db_cxx.h>
+
+#ifdef _WIN32
+#include <windows.h>
+extern "C" {
+ extern int getopt(int, char * const *, const char *);
+ extern char *optarg;
+}
+#define PATHD '\\'
+
+typedef HANDLE thread_t;
+#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)
+#else
+#include <pthread.h>
+#include <unistd.h>
+#define PATHD '/'
+
+typedef pthread_t thread_t;
+#define thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define thread_join(thr, statusp) pthread_join((thr), (statusp))
+
+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)
+#endif
+
+// Run 5 writers threads at a time.
+#define NUMWRITERS 5
+
+// Printing of thread_t is implementation-specific, so we
+// create our own thread IDs for reporting purposes.
+int global_thread_num;
+mutex_t thread_num_lock;
+
+// Forward declarations
+int countRecords(Db *, DbTxn *);
+int openDb(Db **, const char *, const char *, DbEnv *, u_int32_t);
+int usage(void);
+void *writerThread(void *);
+
+// Usage function
+int
+usage()
+{
+ std::cerr << " [-h <database_home_directory>]" << std::endl;
+ return (EXIT_FAILURE);
+}
+
+int
+main(int argc, char *argv[])
+{
+ // Initialize our handles
+ Db *dbp = NULL;
+ DbEnv *envp = NULL;
+
+ thread_t writerThreads[NUMWRITERS];
+ int ch, i;
+ u_int32_t envFlags;
+ char *dbHomeDir;
+ extern char *optarg;
+
+ // Application name
+ const char *progName = "TxnGuide";
+
+ // Database file name
+ const char *fileName = "mydb.db";
+
+ // Parse the command line arguments
+#ifdef _WIN32
+ dbHomeDir = ".\\";
+#else
+ dbHomeDir = "./";
+#endif
+ while ((ch = getopt(argc, argv, "h:")) != EOF)
+ switch (ch) {
+ case 'h':
+ dbHomeDir = optarg;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+
+
+ // Env open flags
+ envFlags =
+ DB_CREATE | // Create the environment if it does not exist
+ DB_RECOVER | // Run normal recovery.
+ DB_INIT_LOCK | // Initialize the locking subsystem
+ DB_INIT_LOG | // Initialize the logging subsystem
+ DB_INIT_TXN | // Initialize the transactional subsystem. This
+ // also turns on logging.
+ DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache)
+ DB_THREAD; // Cause the environment to be free-threaded
+
+ try {
+ // Create and open the environment
+ envp = new DbEnv(0);
+
+ // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction with
+ // the fewest number of write locks will receive the
+ // deadlock notification in the event of a deadlock.
+ envp->set_lk_detect(DB_LOCK_MINWRITE);
+
+ envp->open(dbHomeDir, envFlags, 0);
+
+
+ // If we had utility threads (for running checkpoints or
+ // deadlock detection, for example) we would spawn those
+ // here. However, for a simple example such as this,
+ // that is not required.
+
+ // Open the database
+ openDb(&dbp, progName, fileName,
+ envp, DB_DUPSORT);
+
+ // Initialize a mutex. Used to help provide thread ids.
+ (void)mutex_init(&thread_num_lock, NULL);
+
+ // Start the writer threads.
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_create(
+ &writerThreads[i], NULL,
+ writerThread, (void *)dbp);
+
+ // Join the writers
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_join(writerThreads[i], NULL);
+
+ } catch(DbException &e) {
+ std::cerr << "Error opening database environment: "
+ << dbHomeDir << std::endl;
+ std::cerr << e.what() << std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ try {
+ // Close our database handle if it was opened.
+ if (dbp != NULL)
+ dbp->close(0);
+
+ // Close our environment if it was opened.
+ if (envp != NULL)
+ envp->close(0);
+ } catch(DbException &e) {
+ std::cerr << "Error closing database and environment."
+ << std::endl;
+ std::cerr << e.what() << std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ // Final status message and return.
+
+ std::cout << "I'm all done." << std::endl;
+ return (EXIT_SUCCESS);
+}
+
+// A function that performs a series of writes to a
+// Berkeley DB database. The information written
+// to the database is largely nonsensical, but the
+// mechanism of transactional commit/abort and
+// deadlock detection is illustrated here.
+void *
+writerThread(void *args)
+{
+ int j, thread_num;
+ int max_retries = 20; // Max retry on a deadlock
+ char *key_strings[] = {"key 1", "key 2", "key 3", "key 4",
+ "key 5", "key 6", "key 7", "key 8",
+ "key 9", "key 10"};
+
+ Db *dbp = (Db *)args;
+ DbEnv *envp = dbp->get_env();
+
+ // Get the thread number
+ (void)mutex_lock(&thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)mutex_unlock(&thread_num_lock);
+
+ // Initialize the random number generator
+ srand(thread_num);
+
+ // Perform 50 transactions
+ for (int i=0; i<50; i++) {
+ DbTxn *txn;
+ bool retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) {
+ // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Begin our transaction. We group multiple writes in
+ // this thread under a single transaction so as to
+ // (1) show that you can atomically perform multiple
+ // writes at a time, and (2) to increase the chances
+ // of a deadlock occurring so that we can observe our
+ // deadlock detection at work.
+
+ // Normally we would want to avoid the potential for
+ // deadlocks, so for this workload the correct thing
+ // would be to perform our puts with autocommit. But
+ // that would excessively simplify our example, so we
+ // do the "wrong" thing here instead.
+ txn = NULL;
+ envp->txn_begin(NULL, &txn, 0);
+
+ // Perform the database write for this transaction.
+ for (j = 0; j < 10; j++) {
+ Dbt key, value;
+ key.set_data(key_strings[j]);
+ key.set_size((u_int32_t)strlen(key_strings[j]) + 1);
+
+ int payload = rand() + i;
+ value.set_data(&payload);
+ value.set_size(sizeof(int));
+
+ // Perform the database put
+ dbp->put(txn, &key, &value, 0);
+ }
+
+ // countRecords runs a cursor over the entire database.
+ // We do this to illustrate issues of deadlocking
+ std::cout << thread_num << " : Found "
+ << countRecords(dbp, NULL)
+ << " records in the database." << std::endl;
+
+ std::cout << thread_num << " : committing txn : " << i
+ << std::endl;
+
+ // commit
+ try {
+ txn->commit(0);
+ retry = false;
+ txn = NULL;
+ } catch (DbException &e) {
+ std::cout << "Error on txn commit: "
+ << e.what() << std::endl;
+ }
+ } catch (DbDeadlockException &) {
+ // First thing that we MUST do is abort the transaction.
+ if (txn != NULL)
+ (void)txn->abort();
+
+ // Now we decide if we want to retry the operation.
+ // If we have retried less than max_retries,
+ // increment the retry count and goto retry.
+ if (retry_count < max_retries) {
+ std::cout << "############### Writer " << thread_num
+ << ": Got DB_LOCK_DEADLOCK.\n"
+ << "Retrying write operation."
+ << std::endl;
+ retry_count++;
+ retry = true;
+ } else {
+ // Otherwise, just give up.
+ std::cerr << "Writer " << thread_num
+ << ": Got DeadLockException and out of "
+ << "retries. Giving up." << std::endl;
+ retry = false;
+ }
+ } catch (DbException &e) {
+ std::cerr << "db put failed" << std::endl;
+ std::cerr << e.what() << std::endl;
+ if (txn != NULL)
+ txn->abort();
+ retry = false;
+ } catch (std::exception &ee) {
+ std::cerr << "Unknown exception: " << ee.what() << std::endl;
+ return (0);
+ }
+ }
+ }
+ return (0);
+}
+
+
+// This simply counts the number of records contained in the
+// database and returns the result. You can use this method
+// in three ways:
+//
+// First call it with an active txn handle.
+// Secondly, configure the cursor for uncommitted reads
+//
+// Third, call countRecords AFTER the writer has committed
+// its transaction.
+//
+// If you do none of these things, the writer thread will
+// self-deadlock.
+//
+// Note that this method exists only for illustrative purposes.
+// A more straight-forward way to count the number of records in
+// a database is to use the Database.getStats() method.
+int
+countRecords(Db *dbp, DbTxn *txn)
+{
+
+ Dbc *cursorp = NULL;
+ int count = 0;
+
+ try {
+ // Get the cursor
+ dbp->cursor(txn, &cursorp, DB_READ_UNCOMMITTED);
+
+ Dbt key, value;
+ while (cursorp->get(&key, &value, DB_NEXT) == 0) {
+ count++;
+ }
+ } catch (DbDeadlockException &de) {
+ std::cerr << "countRecords: got deadlock" << std::endl;
+ cursorp->close();
+ throw de;
+ } catch (DbException &e) {
+ std::cerr << "countRecords error:" << std::endl;
+ std::cerr << e.what() << std::endl;
+ }
+
+ if (cursorp != NULL) {
+ try {
+ cursorp->close();
+ } catch (DbException &e) {
+ std::cerr << "countRecords: cursor close failed:" << std::endl;
+ std::cerr << e.what() << std::endl;
+ }
+ }
+
+ return (count);
+}
+
+
+// Open a Berkeley DB database
+int
+openDb(Db **dbpp, const char *progname, const char *fileName,
+ DbEnv *envp, u_int32_t extraFlags)
+{
+ int ret;
+ u_int32_t openFlags;
+
+ try {
+ Db *dbp = new Db(envp, 0);
+
+ // Point to the new'd Db
+ *dbpp = dbp;
+
+ if (extraFlags != 0)
+ ret = dbp->set_flags(extraFlags);
+
+ // Now open the database */
+ openFlags = DB_CREATE | // Allow database creation
+ DB_READ_UNCOMMITTED | // Allow uncommitted reads
+ DB_AUTO_COMMIT; // Allow autocommit
+
+ dbp->open(NULL, // Txn pointer
+ fileName, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ openFlags, // Open flags
+ 0); // File mode. Using defaults
+ } catch (DbException &e) {
+ std::cerr << progname << ": openDb: db open failed:" << std::endl;
+ std::cerr << e.what() << std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+}
+
diff --git a/db/examples_cxx/txn_guide/TxnGuideInMemory.cpp b/db/examples_cxx/txn_guide/TxnGuideInMemory.cpp
new file mode 100644
index 000000000..1d8122fc2
--- /dev/null
+++ b/db/examples_cxx/txn_guide/TxnGuideInMemory.cpp
@@ -0,0 +1,369 @@
+// File TxnGuideInMemory.cpp
+
+#include <iostream>
+#include <db_cxx.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#define PATHD '\\'
+extern "C" {
+ extern int getopt(int, char * const *, const char *);
+ extern char *optarg;
+}
+
+typedef HANDLE thread_t;
+#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)
+#else
+#include <pthread.h>
+#include <unistd.h>
+#define PATHD '/'
+
+typedef pthread_t thread_t;
+#define thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define thread_join(thr, statusp) pthread_join((thr), (statusp))
+
+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)
+#endif
+
+// Run 5 writers threads at a time.
+#define NUMWRITERS 5
+
+// Printing of pthread_t is implementation-specific, so we
+// create our own thread IDs for reporting purposes.
+int global_thread_num;
+mutex_t thread_num_lock;
+
+// Forward declarations
+int countRecords(Db *, DbTxn *);
+int openDb(Db **, const char *, const char *, DbEnv *, u_int32_t);
+int usage(void);
+void *writerThread(void *);
+
+int
+main(void)
+{
+ // Initialize our handles
+ Db *dbp = NULL;
+ DbEnv *envp = NULL;
+
+ thread_t writerThreads[NUMWRITERS];
+ int i;
+ u_int32_t envFlags;
+
+ // Application name
+ const char *progName = "TxnGuideInMemory";
+
+ // Env open flags
+ envFlags =
+ DB_CREATE | // Create the environment if it does not exist
+ DB_RECOVER | // Run normal recovery.
+ DB_INIT_LOCK | // Initialize the locking subsystem
+ DB_INIT_LOG | // Initialize the logging subsystem
+ DB_INIT_TXN | // Initialize the transactional subsystem. This
+ // also turns on logging.
+ DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache)
+ DB_PRIVATE | // Region files are not backed by the filesystem.
+ // Instead, they are backed by heap memory.
+ DB_THREAD; // Cause the environment to be free-threaded
+
+ try {
+ // Create the environment
+ envp = new DbEnv(0);
+
+ // Specify in-memory logging
+ envp->set_flags(DB_LOG_INMEMORY, 1);
+
+ // Specify the size of the in-memory log buffer.
+ envp->set_lg_bsize(10 * 1024 * 1024);
+
+ // Specify the size of the in-memory cache
+ envp->set_cachesize(0, 10 * 1024 * 1024, 1);
+
+ // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction with
+ // the fewest number of write locks will receive the
+ // deadlock notification in the event of a deadlock.
+ envp->set_lk_detect(DB_LOCK_MINWRITE);
+
+ // Open the environment
+ envp->open(NULL, envFlags, 0);
+
+ // If we had utility threads (for running checkpoints or
+ // deadlock detection, for example) we would spawn those
+ // here. However, for a simple example such as this,
+ // that is not required.
+
+ // Open the database
+ openDb(&dbp, progName, NULL,
+ envp, DB_DUPSORT);
+
+ // Initialize a mutex. Used to help provide thread ids.
+ (void)mutex_init(&thread_num_lock, NULL);
+
+ // Start the writer threads.
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_create(
+ &writerThreads[i], NULL,
+ writerThread,
+ (void *)dbp);
+
+ // Join the writers
+ for (i = 0; i < NUMWRITERS; i++)
+ (void)thread_join(writerThreads[i], NULL);
+
+ } catch(DbException &e) {
+ std::cerr << "Error opening database environment: "
+ << std::endl;
+ std::cerr << e.what() << std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ try {
+ // Close our database handle if it was opened.
+ if (dbp != NULL)
+ dbp->close(0);
+
+ // Close our environment if it was opened.
+ if (envp != NULL)
+ envp->close(0);
+ } catch(DbException &e) {
+ std::cerr << "Error closing database and environment."
+ << std::endl;
+ std::cerr << e.what() << std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ // Final status message and return.
+
+ std::cout << "I'm all done." << std::endl;
+ return (EXIT_SUCCESS);
+}
+
+// A function that performs a series of writes to a
+// Berkeley DB database. The information written
+// to the database is largely nonsensical, but the
+// mechanism of transactional commit/abort and
+// deadlock detection is illustrated here.
+void *
+writerThread(void *args)
+{
+ int j, thread_num;
+ int max_retries = 20; // Max retry on a deadlock
+ char *key_strings[] = {"key 1", "key 2", "key 3", "key 4",
+ "key 5", "key 6", "key 7", "key 8",
+ "key 9", "key 10"};
+
+ Db *dbp = (Db *)args;
+ DbEnv *envp = dbp->get_env();
+
+ // Get the thread number
+ (void)mutex_lock(&thread_num_lock);
+ global_thread_num++;
+ thread_num = global_thread_num;
+ (void)mutex_unlock(&thread_num_lock);
+
+ // Initialize the random number generator
+ srand(thread_num);
+
+ // Perform 50 transactions
+ for (int i=0; i<50; i++) {
+ DbTxn *txn;
+ bool retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) {
+ // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Begin our transaction. We group multiple writes in
+ // this thread under a single transaction so as to
+ // (1) show that you can atomically perform multiple
+ // writes at a time, and (2) to increase the chances
+ // of a deadlock occurring so that we can observe our
+ // deadlock detection at work.
+
+ // Normally we would want to avoid the potential for
+ // deadlocks, so for this workload the correct thing
+ // would be to perform our puts with autocommit. But
+ // that would excessively simplify our example, so we
+ // do the "wrong" thing here instead.
+ txn = NULL;
+ envp->txn_begin(NULL, &txn, 0);
+
+ // Perform the database write for this transaction.
+ for (j = 0; j < 10; j++) {
+ Dbt key, value;
+ key.set_data(key_strings[j]);
+ key.set_size((u_int32_t)strlen(key_strings[j]) + 1);
+
+ int payload = rand() + i;
+ value.set_data(&payload);
+ value.set_size(sizeof(int));
+
+ // Perform the database put
+ dbp->put(txn, &key, &value, 0);
+ }
+
+ // countRecords runs a cursor over the entire database.
+ // We do this to illustrate issues of deadlocking
+ std::cout << thread_num << " : Found "
+ << countRecords(dbp, txn)
+ << " records in the database." << std::endl;
+
+ std::cout << thread_num << " : committing txn : " << i
+ << std::endl;
+
+ // commit
+ try {
+ txn->commit(0);
+ retry = false;
+ txn = NULL;
+ } catch (DbException &e) {
+ std::cout << "Error on txn commit: "
+ << e.what() << std::endl;
+ }
+ } catch (DbDeadlockException &) {
+ // First thing that we MUST do is abort the transaction.
+ if (txn != NULL)
+ (void)txn->abort();
+
+ // Now we decide if we want to retry the operation.
+ // If we have retried less than max_retries,
+ // increment the retry count and goto retry.
+ if (retry_count < max_retries) {
+ std::cerr << "############### Writer " << thread_num
+ << ": Got DB_LOCK_DEADLOCK.\n"
+ << "Retrying write operation." << std::endl;
+ retry_count++;
+ retry = true;
+ } else {
+ // Otherwise, just give up.
+ std::cerr << "Writer " << thread_num
+ << ": Got DeadLockException and out of "
+ << "retries. Giving up." << std::endl;
+ retry = false;
+ }
+ } catch (DbException &e) {
+ std::cerr << "db put failed" << std::endl;
+ std::cerr << e.what() << std::endl;
+ if (txn != NULL)
+ txn->abort();
+ retry = false;
+ } catch (std::exception &ee) {
+ std::cerr << "Unknown exception: " << ee.what() << std::endl;
+ return (0);
+ }
+ }
+ }
+ return (0);
+}
+
+
+// This simply counts the number of records contained in the
+// database and returns the result. You can use this method
+// in three ways:
+//
+// First call it with an active txn handle.
+//
+// Secondly, configure the cursor for uncommitted reads
+//
+// Third, call countRecords AFTER the writer has committed
+// its transaction.
+//
+// If you do none of these things, the writer thread will
+// self-deadlock.
+//
+// Note that this method exists only for illustrative purposes.
+// A more straight-forward way to count the number of records in
+// a database is to use the Database.getStats() method.
+int
+countRecords(Db *dbp, DbTxn *txn)
+{
+
+ Dbc *cursorp = NULL;
+ int count = 0;
+
+ try {
+ // Get the cursor
+ dbp->cursor(txn, &cursorp, 0);
+
+ Dbt key, value;
+ while (cursorp->get(&key, &value, DB_NEXT) == 0) {
+ count++;
+ }
+ } catch (DbDeadlockException &de) {
+ std::cerr << "countRecords: got deadlock" << std::endl;
+ cursorp->close();
+ throw de;
+ } catch (DbException &e) {
+ std::cerr << "countRecords error:" << std::endl;
+ std::cerr << e.what() << std::endl;
+ }
+
+ if (cursorp != NULL) {
+ try {
+ cursorp->close();
+ } catch (DbException &e) {
+ std::cerr << "countRecords: cursor close failed:" << std::endl;
+ std::cerr << e.what() << std::endl;
+ }
+ }
+
+ return (count);
+}
+
+
+// Open a Berkeley DB database
+int
+openDb(Db **dbpp, const char *progname, const char *fileName,
+ DbEnv *envp, u_int32_t extraFlags)
+{
+ int ret;
+ u_int32_t openFlags;
+
+ try {
+ Db *dbp = new Db(envp, 0);
+
+ // Point to the new'd Db
+ *dbpp = dbp;
+
+ if (extraFlags != 0)
+ ret = dbp->set_flags(extraFlags);
+
+ // Now open the database */
+ openFlags = DB_CREATE | // Allow database creation
+ DB_THREAD |
+ DB_AUTO_COMMIT; // Allow autocommit
+
+ dbp->open(NULL, // Txn pointer
+ fileName, // File name
+ NULL, // Logical db name
+ DB_BTREE, // Database type (using btree)
+ openFlags, // Open flags
+ 0); // File mode. Using defaults
+ } catch (DbException &e) {
+ std::cerr << progname << ": openDb: db open failed:" << std::endl;
+ std::cerr << e.what() << std::endl;
+ return (EXIT_FAILURE);
+ }
+
+ return (EXIT_SUCCESS);
+}
+
diff --git a/db/examples_java/src/collections/access/AccessExample.java b/db/examples_java/src/collections/access/AccessExample.java
new file mode 100644
index 000000000..c79d6340e
--- /dev/null
+++ b/db/examples_java/src/collections/access/AccessExample.java
@@ -0,0 +1,286 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: AccessExample.java,v 12.4 2006/08/24 14:45:51 bostic Exp $
+ */
+
+package collections.access;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedMap;
+
+import com.sleepycat.bind.ByteArrayBinding;
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+/**
+ * AccesssExample mirrors the functionality of a class by the same name
+ * used to demonstrate the com.sleepycat.je Java API. This version makes
+ * use of the new com.sleepycat.collections.* collections style classes to make
+ * life easier.
+ *
+ *@author Gregory Burd
+ *@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 " + AccessExample.class.getName() +
+ " [-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 {
+
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ if (create) {
+ envConfig.setAllowCreate(true);
+ }
+ Environment env = new Environment(new File("."), envConfig);
+ // Remove the previous database.
+ if (removeExistingDatabase) {
+ env.removeDatabase(null, databaseName, null);
+ }
+
+ // create the app and run it
+ AccessExample app = new AccessExample(env, databaseName);
+ app.run();
+ } catch (DatabaseException e) {
+ e.printStackTrace();
+ System.exit(1);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ System.exit(1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ System.exit(0);
+ }
+
+
+ private Database db;
+ private SortedMap map;
+ private Environment env;
+
+
+ /**
+ * Constructor for the AccessExample object
+ *
+ *@param env Description of the Parameter
+ *@exception Exception Description of the Exception
+ */
+ public AccessExample(Environment env, String databaseName)
+ throws Exception {
+
+ this.env = env;
+
+ //
+ // Lets mimic the db.AccessExample 100%
+ // and use plain old byte arrays to store the key and data strings.
+ //
+ ByteArrayBinding keyBinding = new ByteArrayBinding();
+ ByteArrayBinding dataBinding = new ByteArrayBinding();
+
+ //
+ // Open a data store.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ if (create) {
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ }
+ this.db = env.openDatabase(null, databaseName, null, dbConfig);
+
+ //
+ // 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(db, keyBinding, dataBinding, true);
+ }
+
+
+ /**
+ * Main processing method for the AccessExample object
+ */
+ public void run() {
+ //
+ // Insert records into a Stored Sorted Map DatabaseImpl, 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/data 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.DatabaseException 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 data \"" +
+ 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/collections/hello/HelloDatabaseWorld.java b/db/examples_java/src/collections/hello/HelloDatabaseWorld.java
new file mode 100644
index 000000000..ff35a570c
--- /dev/null
+++ b/db/examples_java/src/collections/hello/HelloDatabaseWorld.java
@@ -0,0 +1,163 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: HelloDatabaseWorld.java,v 12.4 2006/08/24 14:45:51 bostic Exp $
+ */
+
+package collections.hello;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedMap;
+
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+/**
+ * @author Mark Hayes
+ */
+public class HelloDatabaseWorld implements TransactionWorker {
+
+ private static final String[] INT_NAMES = {
+ "Hello", "Database", "World",
+ };
+ private static boolean create = true;
+
+ private Environment env;
+ private ClassCatalog catalog;
+ private Database db;
+ private SortedMap map;
+
+ /** Creates the environment and runs a transaction */
+ public static void main(String[] argv)
+ throws Exception {
+
+ String dir = "./tmp";
+
+ // environment is transactional
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ if (create) {
+ envConfig.setAllowCreate(true);
+ }
+ Environment env = new Environment(new File(dir), envConfig);
+
+ // 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 database for this application */
+ private HelloDatabaseWorld(Environment 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 {
+
+ // use a generic database configuration
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ if (create) {
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+ }
+
+ // catalog is needed for serial bindings (java serialization)
+ Database catalogDb = env.openDatabase(null, "catalog", null, dbConfig);
+ catalog = new StoredClassCatalog(catalogDb);
+
+ // use Integer tuple binding for key entries
+ TupleBinding keyBinding =
+ TupleBinding.getPrimitiveBinding(Integer.class);
+
+ // use String serial binding for data entries
+ SerialBinding dataBinding = new SerialBinding(catalog, String.class);
+
+ this.db = env.openDatabase(null, "helloworld", null, dbConfig);
+
+ // create a map view of the database
+ this.map = new StoredSortedMap(db, keyBinding, dataBinding, true);
+ }
+
+ /** Closes the database. */
+ private void close()
+ throws Exception {
+
+ if (catalog != null) {
+ catalog.close();
+ catalog = null;
+ }
+ if (db != null) {
+ db.close();
+ db = null;
+ }
+ if (env != null) {
+ env.close();
+ 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/collections/ship/basic/PartData.java b/db/examples_java/src/collections/ship/basic/PartData.java
new file mode 100644
index 000000000..8bbcf1436
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/PartData.java
@@ -0,0 +1,65 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartData.java,v 12.4 2006/08/24 14:45:52 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.Serializable;
+
+/**
+ * A PartData serves as the data in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartData is used both as the storage entry for the
+ * data as well as the object binding to the data. Because it is used
+ * directly as storage data using serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartData implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartData(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 "[PartData: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/basic/PartKey.java b/db/examples_java/src/collections/ship/basic/PartKey.java
new file mode 100644
index 000000000..745789a19
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/PartKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:45:52 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.Serializable;
+
+/**
+ * A PartKey serves as the key in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartKey is used both as the storage entry for the key as
+ * well as the object binding to the key. Because it is used directly as
+ * storage data using serial format, 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/collections/ship/basic/Sample.java b/db/examples_java/src/collections/ship/basic/Sample.java
new file mode 100644
index 000000000..d98235a6b
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/Sample.java
@@ -0,0 +1,267 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.Map;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.DatabaseException;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.basic.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws DatabaseException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DatabaseException {
+
+ 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 PartData("Nut", "Red",
+ new Weight(12.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P2"),
+ new PartData("Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P3"),
+ new PartData("Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS),
+ "Rome"));
+ parts.put(new PartKey("P4"),
+ new PartData("Screw", "Red",
+ new Weight(14.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P5"),
+ new PartData("Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P6"),
+ new PartData("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 SupplierData("Smith", 20, "London"));
+ suppliers.put(new SupplierKey("S2"),
+ new SupplierData("Jones", 10, "Paris"));
+ suppliers.put(new SupplierKey("S3"),
+ new SupplierData("Blake", 30, "Paris"));
+ suppliers.put(new SupplierKey("S4"),
+ new SupplierData("Clark", 20, "London"));
+ suppliers.put(new SupplierKey("S5"),
+ new SupplierData("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 ShipmentData(300));
+ shipments.put(new ShipmentKey("P2", "S1"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P3", "S1"),
+ new ShipmentData(400));
+ shipments.put(new ShipmentKey("P4", "S1"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P5", "S1"),
+ new ShipmentData(100));
+ shipments.put(new ShipmentKey("P6", "S1"),
+ new ShipmentData(100));
+ shipments.put(new ShipmentKey("P1", "S2"),
+ new ShipmentData(300));
+ shipments.put(new ShipmentKey("P2", "S2"),
+ new ShipmentData(400));
+ shipments.put(new ShipmentKey("P2", "S3"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P2", "S4"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P4", "S4"),
+ new ShipmentData(300));
+ shipments.put(new ShipmentKey("P5", "S4"),
+ new ShipmentData(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/collections/ship/basic/SampleDatabase.java b/db/examples_java/src/collections/ship/basic/SampleDatabase.java
new file mode 100644
index 000000000..61ca83c54
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/SampleDatabase.java
@@ -0,0 +1,135 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private StoredClassCatalog javaCatalog;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Close all databases and the environment.
+ */
+ public void close()
+ throws DatabaseException {
+
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+}
diff --git a/db/examples_java/src/collections/ship/basic/SampleViews.java b/db/examples_java/src/collections/ship/basic/SampleViews.java
new file mode 100644
index 000000000..14065a714
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/SampleViews.java
@@ -0,0 +1,123 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.collections.StoredEntrySet;
+import com.sleepycat.collections.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) {
+
+ // In this sample, the stored key and data entries are used directly
+ // rather than mapping them to separate objects. Therefore, no binding
+ // classes are defined here and the SerialBinding class is used.
+ //
+ ClassCatalog catalog = db.getClassCatalog();
+ EntryBinding partKeyBinding =
+ new SerialBinding(catalog, PartKey.class);
+ EntryBinding partDataBinding =
+ new SerialBinding(catalog, PartData.class);
+ EntryBinding supplierKeyBinding =
+ new SerialBinding(catalog, SupplierKey.class);
+ EntryBinding supplierDataBinding =
+ new SerialBinding(catalog, SupplierData.class);
+ EntryBinding shipmentKeyBinding =
+ new SerialBinding(catalog, ShipmentKey.class);
+ EntryBinding shipmentDataBinding =
+ new SerialBinding(catalog, ShipmentData.class);
+
+ // 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.getPartDatabase(),
+ partKeyBinding, partDataBinding, true);
+ supplierMap =
+ new StoredMap(db.getSupplierDatabase(),
+ supplierKeyBinding, supplierDataBinding, true);
+ shipmentMap =
+ new StoredMap(db.getShipmentDatabase(),
+ shipmentKeyBinding, shipmentDataBinding, 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/collections/ship/basic/ShipmentData.java b/db/examples_java/src/collections/ship/basic/ShipmentData.java
new file mode 100644
index 000000000..3c596dfb9
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/ShipmentData.java
@@ -0,0 +1,42 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentData.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentData serves as the data in the key/data pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentData is used both as the storage entry for the
+ * data as well as the object binding to the data. Because it is used
+ * directly as storage data using serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentData implements Serializable {
+
+ private int quantity;
+
+ public ShipmentData(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentData: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/basic/ShipmentKey.java b/db/examples_java/src/collections/ship/basic/ShipmentKey.java
new file mode 100644
index 000000000..c34fa067f
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/ShipmentKey.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentKey serves as the key in the key/data pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is used both as the storage entry for the
+ * key as well as the object binding to the key. Because it is used directly
+ * as storage data using serial format, 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/collections/ship/basic/SupplierData.java b/db/examples_java/src/collections/ship/basic/SupplierData.java
new file mode 100644
index 000000000..7f0e80112
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/SupplierData.java
@@ -0,0 +1,58 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierData.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierData serves as the data in the key/data pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierData is used both as the storage entry for the
+ * data as well as the object binding to the data. Because it is used
+ * directly as storage data using serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierData implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierData(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 "[SupplierData: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/basic/SupplierKey.java b/db/examples_java/src/collections/ship/basic/SupplierKey.java
new file mode 100644
index 000000000..f08f96195
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/SupplierKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.basic;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierKey serves as the key in the key/data pair for a supplier entity.
+ *
+ * <p>In this sample, SupplierKey is used both as the storage entry for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using serial format, 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/collections/ship/basic/Weight.java b/db/examples_java/src/collections/ship/basic/Weight.java
new file mode 100644
index 000000000..9862d9d9e
--- /dev/null
+++ b/db/examples_java/src/collections/ship/basic/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:45:53 bostic Exp $
+ */
+
+package collections.ship.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/collections/ship/entity/Part.java b/db/examples_java/src/collections/ship/entity/Part.java
new file mode 100644
index 000000000..5e95cd48f
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/Part.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Part.java,v 12.4 2006/08/24 14:45:54 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+/**
+ * A Part represents the combined key/data pair for a part entity.
+ *
+ * <p>In this sample, Part is created from the stored key/data entry 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/collections/ship/entity/PartData.java b/db/examples_java/src/collections/ship/entity/PartData.java
new file mode 100644
index 000000000..dbd70ab96
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/PartData.java
@@ -0,0 +1,66 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartData.java,v 12.4 2006/08/24 14:45:54 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.Serializable;
+
+/**
+ * A PartData serves as the value in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartData 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 serial format, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartData implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartData(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 "[PartData: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/entity/PartKey.java b/db/examples_java/src/collections/ship/entity/PartKey.java
new file mode 100644
index 000000000..bfe702f08
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/PartKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:45:54 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.Serializable;
+
+/**
+ * A PartKey serves as the key in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartKey is used both as the storage entry for the key as
+ * well as the object binding to the key. Because it is used directly as
+ * storage data using serial format, 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/collections/ship/entity/Sample.java b/db/examples_java/src/collections/ship/entity/Sample.java
new file mode 100644
index 000000000..b041cf7c4
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/Sample.java
@@ -0,0 +1,250 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.DatabaseException;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.entity.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws DatabaseException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DatabaseException {
+
+ 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/collections/ship/entity/SampleDatabase.java b/db/examples_java/src/collections/ship/entity/SampleDatabase.java
new file mode 100644
index 000000000..fa643929b
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/SampleDatabase.java
@@ -0,0 +1,330 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.SerialSerialKeyCreator;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private SecondaryDatabase supplierByCityDb;
+ private SecondaryDatabase shipmentByPartDb;
+ private SecondaryDatabase shipmentBySupplierDb;
+ private StoredClassCatalog javaCatalog;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+
+ // Open the SecondaryDatabase for the city index of the supplier store,
+ // and for the part and supplier indices of the shipment store.
+ // Duplicate keys are allowed since more than one supplier may be in
+ // the same city, and more than one shipment may exist for the same
+ // supplier or part. A foreign key constraint is defined for the
+ // supplier and part indices to ensure that a shipment only refers to
+ // existing part and supplier keys. The CASCADE delete action means
+ // that shipments will be deleted if their associated part or supplier
+ // is deleted.
+ //
+ SecondaryConfig secConfig = new SecondaryConfig();
+ secConfig.setTransactional(true);
+ secConfig.setAllowCreate(true);
+ secConfig.setType(DatabaseType.BTREE);
+ secConfig.setSortedDuplicates(true);
+
+ secConfig.setKeyCreator(
+ new SupplierByCityKeyCreator(javaCatalog,
+ SupplierKey.class,
+ SupplierData.class,
+ String.class));
+ supplierByCityDb = env.openSecondaryDatabase(null, SUPPLIER_CITY_INDEX,
+ null,
+ supplierDb,
+ secConfig);
+
+ secConfig.setKeyCreator(
+ new ShipmentByPartKeyCreator(javaCatalog,
+ ShipmentKey.class,
+ ShipmentData.class,
+ PartKey.class));
+ shipmentByPartDb = env.openSecondaryDatabase(null, SHIPMENT_PART_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+
+ secConfig.setKeyCreator(
+ new ShipmentBySupplierKeyCreator(javaCatalog,
+ ShipmentKey.class,
+ ShipmentData.class,
+ SupplierKey.class));
+ shipmentBySupplierDb = env.openSecondaryDatabase(null,
+ SHIPMENT_SUPPLIER_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final SecondaryDatabase getShipmentByPartDatabase() {
+
+ return shipmentByPartDb;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final SecondaryDatabase getShipmentBySupplierDatabase() {
+
+ return shipmentBySupplierDb;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final SecondaryDatabase getSupplierByCityDatabase() {
+
+ return supplierByCityDb;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DatabaseException {
+
+ // Close secondary databases, then primary databases.
+ supplierByCityDb.close();
+ shipmentByPartDb.close();
+ shipmentBySupplierDb.close();
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+
+ /**
+ * The SecondaryKeyCreator for the SupplierByCity index. This is an
+ * extension of the abstract class SerialSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys and value are all
+ * of the serial format.
+ */
+ private static class SupplierByCityKeyCreator
+ extends SerialSerialKeyCreator {
+
+ /**
+ * Construct the city key extractor.
+ * @param catalog is the class catalog.
+ * @param primaryKeyClass is the supplier key class.
+ * @param valueClass is the supplier value class.
+ * @param indexKeyClass is the city key class.
+ */
+ private SupplierByCityKeyCreator(ClassCatalog catalog,
+ Class primaryKeyClass,
+ Class valueClass,
+ Class indexKeyClass) {
+
+ super(catalog, primaryKeyClass, valueClass, indexKeyClass);
+ }
+
+ /**
+ * 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 createSecondaryKey(Object primaryKeyInput,
+ Object valueInput) {
+
+ SupplierData supplierData = (SupplierData) valueInput;
+ return supplierData.getCity();
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentByPart index. This is an
+ * extension of the abstract class SerialSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys and value are all
+ * of the serial format.
+ */
+ private static class ShipmentByPartKeyCreator
+ extends SerialSerialKeyCreator {
+
+ /**
+ * Construct the part key extractor.
+ * @param catalog is the class catalog.
+ * @param primaryKeyClass is the shipment key class.
+ * @param valueClass is the shipment value class.
+ * @param indexKeyClass is the part key class.
+ */
+ private ShipmentByPartKeyCreator(ClassCatalog catalog,
+ Class primaryKeyClass,
+ Class valueClass,
+ Class indexKeyClass) {
+
+ super(catalog, primaryKeyClass, valueClass, indexKeyClass);
+ }
+
+ /**
+ * 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 createSecondaryKey(Object primaryKeyInput,
+ Object valueInput) {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new PartKey(shipmentKey.getPartNumber());
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentBySupplier index. This is an
+ * extension of the abstract class SerialSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys and value are all
+ * of the serial format.
+ */
+ private static class ShipmentBySupplierKeyCreator
+ extends SerialSerialKeyCreator {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param catalog is the class catalog.
+ * @param primaryKeyClass is the shipment key class.
+ * @param valueClass is the shipment value class.
+ * @param indexKeyClass is the supplier key class.
+ */
+ private ShipmentBySupplierKeyCreator(ClassCatalog catalog,
+ Class primaryKeyClass,
+ Class valueClass,
+ Class indexKeyClass) {
+
+ super(catalog, primaryKeyClass, valueClass, indexKeyClass);
+ }
+
+ /**
+ * 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 createSecondaryKey(Object primaryKeyInput,
+ Object valueInput) {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new SupplierKey(shipmentKey.getSupplierNumber());
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/entity/SampleViews.java b/db/examples_java/src/collections/ship/entity/SampleViews.java
new file mode 100644
index 000000000..a091d4a9d
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/SampleViews.java
@@ -0,0 +1,307 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import com.sleepycat.bind.EntityBinding;
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.serial.SerialSerialBinding;
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.StoredValueSet;
+
+/**
+ * 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/data entry pair to a combined data object. For keys, however,
+ // the stored entry is used directly via a SerialBinding and no
+ // special binding class is needed.
+ //
+ ClassCatalog catalog = db.getClassCatalog();
+ SerialBinding partKeyBinding =
+ new SerialBinding(catalog, PartKey.class);
+ EntityBinding partDataBinding =
+ new PartBinding(catalog, PartKey.class, PartData.class);
+ SerialBinding supplierKeyBinding =
+ new SerialBinding(catalog, SupplierKey.class);
+ EntityBinding supplierDataBinding =
+ new SupplierBinding(catalog, SupplierKey.class,
+ SupplierData.class);
+ SerialBinding shipmentKeyBinding =
+ new SerialBinding(catalog, ShipmentKey.class);
+ EntityBinding shipmentDataBinding =
+ new ShipmentBinding(catalog, ShipmentKey.class,
+ ShipmentData.class);
+ SerialBinding cityKeyBinding =
+ new SerialBinding(catalog, String.class);
+
+ // 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 StoredSortedMap(db.getPartDatabase(),
+ partKeyBinding, partDataBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierDatabase(),
+ supplierKeyBinding, supplierDataBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentDatabase(),
+ shipmentKeyBinding, shipmentDataBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartDatabase(),
+ partKeyBinding, shipmentDataBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierDatabase(),
+ supplierKeyBinding, shipmentDataBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityDatabase(),
+ cityKeyBinding, supplierDataBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredSortedMap 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 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 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;
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/data entry pair for a part
+ * to a combined data object (entity).
+ */
+ private static class PartBinding extends SerialSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private PartBinding(ClassCatalog classCatalog,
+ Class keyClass,
+ Class dataClass) {
+
+ super(classCatalog, keyClass, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ */
+ public Object entryToObject(Object keyInput, Object dataInput) {
+
+ PartKey key = (PartKey) keyInput;
+ PartData data = (PartData) dataInput;
+ return new Part(key.getNumber(), data.getName(), data.getColor(),
+ data.getWeight(), data.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public Object objectToKey(Object object) {
+
+ Part part = (Part) object;
+ return new PartKey(part.getNumber());
+ }
+
+ /**
+ * Create the stored data from the entity.
+ */
+ public Object objectToData(Object object) {
+
+ Part part = (Part) object;
+ return new PartData(part.getName(), part.getColor(),
+ part.getWeight(), part.getCity());
+ }
+ }
+
+ /**
+ * SupplierBinding is used to bind the stored key/data entry pair for a
+ * supplier to a combined data object (entity).
+ */
+ private static class SupplierBinding extends SerialSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private SupplierBinding(ClassCatalog classCatalog,
+ Class keyClass,
+ Class dataClass) {
+
+ super(classCatalog, keyClass, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ */
+ public Object entryToObject(Object keyInput, Object dataInput) {
+
+ SupplierKey key = (SupplierKey) keyInput;
+ SupplierData data = (SupplierData) dataInput;
+ return new Supplier(key.getNumber(), data.getName(),
+ data.getStatus(), data.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public Object objectToKey(Object object) {
+
+ Supplier supplier = (Supplier) object;
+ return new SupplierKey(supplier.getNumber());
+ }
+
+ /**
+ * Create the stored data from the entity.
+ */
+ public Object objectToData(Object object) {
+
+ Supplier supplier = (Supplier) object;
+ return new SupplierData(supplier.getName(), supplier.getStatus(),
+ supplier.getCity());
+ }
+ }
+
+ /**
+ * ShipmentBinding is used to bind the stored key/data entry pair for a
+ * shipment to a combined data object (entity).
+ */
+ private static class ShipmentBinding extends SerialSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private ShipmentBinding(ClassCatalog classCatalog,
+ Class keyClass,
+ Class dataClass) {
+
+ super(classCatalog, keyClass, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ */
+ public Object entryToObject(Object keyInput, Object dataInput) {
+
+ ShipmentKey key = (ShipmentKey) keyInput;
+ ShipmentData data = (ShipmentData) dataInput;
+ return new Shipment(key.getPartNumber(), key.getSupplierNumber(),
+ data.getQuantity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public Object objectToKey(Object object) {
+
+ Shipment shipment = (Shipment) object;
+ return new ShipmentKey(shipment.getPartNumber(),
+ shipment.getSupplierNumber());
+ }
+
+ /**
+ * Create the stored data from the entity.
+ */
+ public Object objectToData(Object object) {
+
+ Shipment shipment = (Shipment) object;
+ return new ShipmentData(shipment.getQuantity());
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/entity/Shipment.java b/db/examples_java/src/collections/ship/entity/Shipment.java
new file mode 100644
index 000000000..10ada4f31
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/Shipment.java
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Shipment.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+/**
+ * A Shipment represents the combined key/data pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is created from the stored key/data entry
+ * 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/collections/ship/entity/ShipmentData.java b/db/examples_java/src/collections/ship/entity/ShipmentData.java
new file mode 100644
index 000000000..f70cc7534
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/ShipmentData.java
@@ -0,0 +1,43 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentData.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentData serves as the value in the key/value pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentData 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
+ * serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentData implements Serializable {
+
+ private int quantity;
+
+ public ShipmentData(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentData: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/entity/ShipmentKey.java b/db/examples_java/src/collections/ship/entity/ShipmentKey.java
new file mode 100644
index 000000000..021a98a15
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/ShipmentKey.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentKey serves as the key in the key/data pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is used both as the storage entry for the
+ * key as well as the object binding to the key. Because it is used directly
+ * as storage data using serial format, 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/collections/ship/entity/Supplier.java b/db/examples_java/src/collections/ship/entity/Supplier.java
new file mode 100644
index 000000000..167d7f6df
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/Supplier.java
@@ -0,0 +1,64 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Supplier.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+/**
+ * A Supplier represents the combined key/data pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is created from the stored key/data entry
+ * 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/collections/ship/entity/SupplierData.java b/db/examples_java/src/collections/ship/entity/SupplierData.java
new file mode 100644
index 000000000..3397f918d
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/SupplierData.java
@@ -0,0 +1,59 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierData.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierData serves as the value in the key/value pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierData 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
+ * serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierData implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierData(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 "[SupplierData: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/entity/SupplierKey.java b/db/examples_java/src/collections/ship/entity/SupplierKey.java
new file mode 100644
index 000000000..d60c7a1c4
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/SupplierKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.entity;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierKey serves as the key in the key/data pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is used both as the storage entry for the
+ * key as well as the object binding to the key. Because it is used directly
+ * as storage data using serial format, 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/collections/ship/entity/Weight.java b/db/examples_java/src/collections/ship/entity/Weight.java
new file mode 100644
index 000000000..aa662af04
--- /dev/null
+++ b/db/examples_java/src/collections/ship/entity/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.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/collections/ship/factory/Part.java b/db/examples_java/src/collections/ship/factory/Part.java
new file mode 100644
index 000000000..87e575837
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/Part.java
@@ -0,0 +1,107 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Part.java,v 12.4 2006/08/24 14:45:55 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import java.io.Serializable;
+
+import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A Part represents the combined key/data pair for a part entity.
+ *
+ * <p> In this sample, Part is bound to the stored key/data entry by
+ * implementing the MarshalledTupleKeyEntity interface. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data entry 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 PartData 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) {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput) {
+
+ this.number = keyInput.readString();
+ }
+
+ public boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput) {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+
+ public boolean nullifyForeignKey(String keyName) {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/PartKey.java b/db/examples_java/src/collections/ship/factory/PartKey.java
new file mode 100644
index 000000000..e3641e115
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/PartKey.java
@@ -0,0 +1,61 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import com.sleepycat.bind.tuple.MarshalledTupleEntry;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A PartKey serves as the key in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the stored key tuple entry by
+ * implementing the MarshalledTupleEntry interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey implements MarshalledTupleEntry {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+
+ // --- MarshalledTupleEntry implementation ---
+
+ public PartKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void marshalEntry(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalEntry(TupleInput keyInput) {
+
+ this.number = keyInput.readString();
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/Sample.java b/db/examples_java/src/collections/ship/factory/Sample.java
new file mode 100644
index 000000000..49173875b
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/Sample.java
@@ -0,0 +1,248 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.factory.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws Exception {
+
+ db = new SampleDatabase(homeDir);
+ 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/collections/ship/factory/SampleDatabase.java b/db/examples_java/src/collections/ship/factory/SampleDatabase.java
new file mode 100644
index 000000000..d01920ca8
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/SampleDatabase.java
@@ -0,0 +1,225 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.collections.TupleSerialFactory;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private SecondaryDatabase supplierByCityDb;
+ private SecondaryDatabase shipmentByPartDb;
+ private SecondaryDatabase shipmentBySupplierDb;
+ private StoredClassCatalog javaCatalog;
+ private TupleSerialFactory factory;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Use the TupleSerialDbFactory for a Serial/Tuple-based database
+ // where marshalling interfaces are used.
+ //
+ factory = new TupleSerialFactory(javaCatalog);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+
+ // Open the SecondaryDatabase for the city index of the supplier store,
+ // and for the part and supplier indices of the shipment store.
+ // Duplicate keys are allowed since more than one supplier may be in
+ // the same city, and more than one shipment may exist for the same
+ // supplier or part. A foreign key constraint is defined for the
+ // supplier and part indices to ensure that a shipment only refers to
+ // existing part and supplier keys. The CASCADE delete action means
+ // that shipments will be deleted if their associated part or supplier
+ // is deleted.
+ //
+ SecondaryConfig secConfig = new SecondaryConfig();
+ secConfig.setTransactional(true);
+ secConfig.setAllowCreate(true);
+ secConfig.setType(DatabaseType.BTREE);
+ secConfig.setSortedDuplicates(true);
+
+ secConfig.setKeyCreator(factory.getKeyCreator(Supplier.class,
+ Supplier.CITY_KEY));
+ supplierByCityDb = env.openSecondaryDatabase(null, SUPPLIER_CITY_INDEX,
+ null,
+ supplierDb,
+ secConfig);
+
+ secConfig.setKeyCreator(factory.getKeyCreator(Shipment.class,
+ Shipment.PART_KEY));
+ shipmentByPartDb = env.openSecondaryDatabase(null, SHIPMENT_PART_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+
+ secConfig.setKeyCreator(factory.getKeyCreator(Shipment.class,
+ Shipment.SUPPLIER_KEY));
+ shipmentBySupplierDb = env.openSecondaryDatabase(null,
+ SHIPMENT_SUPPLIER_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+ }
+
+ /**
+ * Return the tuple-serial factory.
+ */
+ public final TupleSerialFactory getFactory() {
+
+ return factory;
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final SecondaryDatabase getShipmentByPartDatabase() {
+
+ return shipmentByPartDb;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final SecondaryDatabase getShipmentBySupplierDatabase() {
+
+ return shipmentBySupplierDb;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final SecondaryDatabase getSupplierByCityDatabase() {
+
+ return supplierByCityDb;
+ }
+
+ /**
+ * Close all databases and the environment.
+ */
+ public void close()
+ throws DatabaseException {
+
+ // Close secondary databases, then primary databases.
+ supplierByCityDb.close();
+ shipmentByPartDb.close();
+ shipmentBySupplierDb.close();
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/SampleViews.java b/db/examples_java/src/collections/ship/factory/SampleViews.java
new file mode 100644
index 000000000..028b474f6
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/SampleViews.java
@@ -0,0 +1,143 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.StoredSortedValueSet;
+import com.sleepycat.collections.TupleSerialFactory;
+
+/**
+ * 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) {
+
+ // Use the TupleSerialFactory for a Serial/Tuple-based database
+ // where marshalling interfaces are used.
+ //
+ TupleSerialFactory 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.getPartDatabase(),
+ PartKey.class, Part.class, true);
+ supplierMap =
+ factory.newSortedMap(db.getSupplierDatabase(),
+ SupplierKey.class, Supplier.class, true);
+ shipmentMap =
+ factory.newSortedMap(db.getShipmentDatabase(),
+ ShipmentKey.class, Shipment.class, true);
+ shipmentByPartMap =
+ factory.newSortedMap(db.getShipmentByPartDatabase(),
+ PartKey.class, Shipment.class, true);
+ shipmentBySupplierMap =
+ factory.newSortedMap(db.getShipmentBySupplierDatabase(),
+ SupplierKey.class, Shipment.class, true);
+ supplierByCityMap =
+ factory.newSortedMap(db.getSupplierByCityDatabase(),
+ String.class, Supplier.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 StoredSortedMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/Shipment.java b/db/examples_java/src/collections/ship/factory/Shipment.java
new file mode 100644
index 000000000..e8fb27164
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/Shipment.java
@@ -0,0 +1,103 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Shipment.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import java.io.Serializable;
+
+import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A Shipment represents the combined key/data pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is bound to the stored key/data entry by
+ * implementing the MarshalledTupleKeyEntity interface. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data entry 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 ShipmentData 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) {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput) {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+
+ public boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput) {
+
+ if (keyName.equals(PART_KEY)) {
+ keyOutput.writeString(this.partNumber);
+ return true;
+ } else if (keyName.equals(SUPPLIER_KEY)) {
+ keyOutput.writeString(this.supplierNumber);
+ return true;
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+
+ public boolean nullifyForeignKey(String keyName) {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/ShipmentKey.java b/db/examples_java/src/collections/ship/factory/ShipmentKey.java
new file mode 100644
index 000000000..19a86cb9d
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/ShipmentKey.java
@@ -0,0 +1,71 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import com.sleepycat.bind.tuple.MarshalledTupleEntry;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A ShipmentKey serves as the key in the key/data pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the stored key tuple entry by
+ * implementing the MarshalledTupleEntry interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey implements MarshalledTupleEntry {
+
+ 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 + ']';
+ }
+
+ // --- MarshalledTupleEntry implementation ---
+
+ public ShipmentKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void marshalEntry(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+
+ public void unmarshalEntry(TupleInput keyInput) {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/Supplier.java b/db/examples_java/src/collections/ship/factory/Supplier.java
new file mode 100644
index 000000000..ebb1bcadf
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/Supplier.java
@@ -0,0 +1,109 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Supplier.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import java.io.Serializable;
+
+import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A Supplier represents the combined key/data pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is bound to the stored key/data entry by
+ * implementing the MarshalledTupleKeyEntity interface. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data entry 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 SupplierData 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) {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput) {
+
+ this.number = keyInput.readString();
+ }
+
+ public boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput) {
+
+ if (keyName.equals(CITY_KEY)) {
+ if (this.city != null) {
+ keyOutput.writeString(this.city);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+
+ public boolean nullifyForeignKey(String keyName) {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/SupplierKey.java b/db/examples_java/src/collections/ship/factory/SupplierKey.java
new file mode 100644
index 000000000..de35c2549
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/SupplierKey.java
@@ -0,0 +1,61 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.factory;
+
+import com.sleepycat.bind.tuple.MarshalledTupleEntry;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A SupplierKey serves as the key in the key/data pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the stored key tuple entry by
+ * implementing the MarshalledTupleEntry interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey implements MarshalledTupleEntry {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+
+ // --- MarshalledTupleEntry implementation ---
+
+ public SupplierKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void marshalEntry(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalEntry(TupleInput keyInput) {
+
+ this.number = keyInput.readString();
+ }
+}
diff --git a/db/examples_java/src/collections/ship/factory/Weight.java b/db/examples_java/src/collections/ship/factory/Weight.java
new file mode 100644
index 000000000..4d7370443
--- /dev/null
+++ b/db/examples_java/src/collections/ship/factory/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:45:56 bostic Exp $
+ */
+
+package collections.ship.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/collections/ship/index/PartData.java b/db/examples_java/src/collections/ship/index/PartData.java
new file mode 100644
index 000000000..59bee2640
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/PartData.java
@@ -0,0 +1,65 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartData.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.Serializable;
+
+/**
+ * A PartData serves as the data in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartData is used both as the storage data for the data
+ * as well as the object binding to the data. Because it is used directly as
+ * storage data using serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartData implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartData(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 "[PartData: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/index/PartKey.java b/db/examples_java/src/collections/ship/index/PartKey.java
new file mode 100644
index 000000000..973f20fe9
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/PartKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.Serializable;
+
+/**
+ * A PartKey serves as the key in the key/data 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 serial format, 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/collections/ship/index/Sample.java b/db/examples_java/src/collections/ship/index/Sample.java
new file mode 100644
index 000000000..feb0513ae
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/Sample.java
@@ -0,0 +1,303 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.Map;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.DatabaseException;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.index.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws DatabaseException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DatabaseException {
+
+ 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 PartData("Nut", "Red",
+ new Weight(12.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P2"),
+ new PartData("Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P3"),
+ new PartData("Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS),
+ "Rome"));
+ parts.put(new PartKey("P4"),
+ new PartData("Screw", "Red",
+ new Weight(14.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P5"),
+ new PartData("Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P6"),
+ new PartData("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 SupplierData("Smith", 20, "London"));
+ suppliers.put(new SupplierKey("S2"),
+ new SupplierData("Jones", 10, "Paris"));
+ suppliers.put(new SupplierKey("S3"),
+ new SupplierData("Blake", 30, "Paris"));
+ suppliers.put(new SupplierKey("S4"),
+ new SupplierData("Clark", 20, "London"));
+ suppliers.put(new SupplierKey("S5"),
+ new SupplierData("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 ShipmentData(300));
+ shipments.put(new ShipmentKey("P2", "S1"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P3", "S1"),
+ new ShipmentData(400));
+ shipments.put(new ShipmentKey("P4", "S1"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P5", "S1"),
+ new ShipmentData(100));
+ shipments.put(new ShipmentKey("P6", "S1"),
+ new ShipmentData(100));
+ shipments.put(new ShipmentKey("P1", "S2"),
+ new ShipmentData(300));
+ shipments.put(new ShipmentKey("P2", "S2"),
+ new ShipmentData(400));
+ shipments.put(new ShipmentKey("P2", "S3"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P2", "S4"),
+ new ShipmentData(200));
+ shipments.put(new ShipmentKey("P4", "S4"),
+ new ShipmentData(300));
+ shipments.put(new ShipmentKey("P5", "S4"),
+ new ShipmentData(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/collections/ship/index/SampleDatabase.java b/db/examples_java/src/collections/ship/index/SampleDatabase.java
new file mode 100644
index 000000000..3b77dddc2
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/SampleDatabase.java
@@ -0,0 +1,330 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.SerialSerialKeyCreator;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private SecondaryDatabase supplierByCityDb;
+ private SecondaryDatabase shipmentByPartDb;
+ private SecondaryDatabase shipmentBySupplierDb;
+ private StoredClassCatalog javaCatalog;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+
+ // Open the SecondaryDatabase for the city index of the supplier store,
+ // and for the part and supplier indices of the shipment store.
+ // Duplicate keys are allowed since more than one supplier may be in
+ // the same city, and more than one shipment may exist for the same
+ // supplier or part. A foreign key constraint is defined for the
+ // supplier and part indices to ensure that a shipment only refers to
+ // existing part and supplier keys. The CASCADE delete action means
+ // that shipments will be deleted if their associated part or supplier
+ // is deleted.
+ //
+ SecondaryConfig secConfig = new SecondaryConfig();
+ secConfig.setTransactional(true);
+ secConfig.setAllowCreate(true);
+ secConfig.setType(DatabaseType.BTREE);
+ secConfig.setSortedDuplicates(true);
+
+ secConfig.setKeyCreator(
+ new SupplierByCityKeyCreator(javaCatalog,
+ SupplierKey.class,
+ SupplierData.class,
+ String.class));
+ supplierByCityDb = env.openSecondaryDatabase(null, SUPPLIER_CITY_INDEX,
+ null,
+ supplierDb,
+ secConfig);
+
+ secConfig.setKeyCreator(
+ new ShipmentByPartKeyCreator(javaCatalog,
+ ShipmentKey.class,
+ ShipmentData.class,
+ PartKey.class));
+ shipmentByPartDb = env.openSecondaryDatabase(null, SHIPMENT_PART_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+
+ secConfig.setKeyCreator(
+ new ShipmentBySupplierKeyCreator(javaCatalog,
+ ShipmentKey.class,
+ ShipmentData.class,
+ SupplierKey.class));
+ shipmentBySupplierDb = env.openSecondaryDatabase(null,
+ SHIPMENT_SUPPLIER_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final SecondaryDatabase getShipmentByPartDatabase() {
+
+ return shipmentByPartDb;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final SecondaryDatabase getShipmentBySupplierDatabase() {
+
+ return shipmentBySupplierDb;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final SecondaryDatabase getSupplierByCityDatabase() {
+
+ return supplierByCityDb;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DatabaseException {
+
+ // Close secondary databases, then primary databases.
+ supplierByCityDb.close();
+ shipmentByPartDb.close();
+ shipmentBySupplierDb.close();
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+
+ /**
+ * The SecondaryKeyCreator for the SupplierByCity index. This is an
+ * extension of the abstract class SerialSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys and value are all
+ * of the serial format.
+ */
+ private static class SupplierByCityKeyCreator
+ extends SerialSerialKeyCreator {
+
+ /**
+ * Construct the city key extractor.
+ * @param catalog is the class catalog.
+ * @param primaryKeyClass is the supplier key class.
+ * @param valueClass is the supplier value class.
+ * @param indexKeyClass is the city key class.
+ */
+ private SupplierByCityKeyCreator(ClassCatalog catalog,
+ Class primaryKeyClass,
+ Class valueClass,
+ Class indexKeyClass) {
+
+ super(catalog, primaryKeyClass, valueClass, indexKeyClass);
+ }
+
+ /**
+ * 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 createSecondaryKey(Object primaryKeyInput,
+ Object valueInput) {
+
+ SupplierData supplierData = (SupplierData) valueInput;
+ return supplierData.getCity();
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentByPart index. This is an
+ * extension of the abstract class SerialSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys and value are all
+ * of the serial format.
+ */
+ private static class ShipmentByPartKeyCreator
+ extends SerialSerialKeyCreator {
+
+ /**
+ * Construct the part key extractor.
+ * @param catalog is the class catalog.
+ * @param primaryKeyClass is the shipment key class.
+ * @param valueClass is the shipment value class.
+ * @param indexKeyClass is the part key class.
+ */
+ private ShipmentByPartKeyCreator(ClassCatalog catalog,
+ Class primaryKeyClass,
+ Class valueClass,
+ Class indexKeyClass) {
+
+ super(catalog, primaryKeyClass, valueClass, indexKeyClass);
+ }
+
+ /**
+ * 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 createSecondaryKey(Object primaryKeyInput,
+ Object valueInput) {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new PartKey(shipmentKey.getPartNumber());
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentBySupplier index. This is an
+ * extension of the abstract class SerialSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys and value are all
+ * of the serial format.
+ */
+ private static class ShipmentBySupplierKeyCreator
+ extends SerialSerialKeyCreator {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param catalog is the class catalog.
+ * @param primaryKeyClass is the shipment key class.
+ * @param valueClass is the shipment value class.
+ * @param indexKeyClass is the supplier key class.
+ */
+ private ShipmentBySupplierKeyCreator(ClassCatalog catalog,
+ Class primaryKeyClass,
+ Class valueClass,
+ Class indexKeyClass) {
+
+ super(catalog, primaryKeyClass, valueClass, indexKeyClass);
+ }
+
+ /**
+ * 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 createSecondaryKey(Object primaryKeyInput,
+ Object valueInput) {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new SupplierKey(shipmentKey.getSupplierNumber());
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/index/SampleViews.java b/db/examples_java/src/collections/ship/index/SampleViews.java
new file mode 100644
index 000000000..1d48ab183
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/SampleViews.java
@@ -0,0 +1,162 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.collections.StoredEntrySet;
+import com.sleepycat.collections.StoredSortedMap;
+
+/**
+ * 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, the stored key and data entries are used directly
+ // rather than mapping them to separate objects. Therefore, no binding
+ // classes are defined here and the SerialBinding class is used.
+ //
+ ClassCatalog catalog = db.getClassCatalog();
+ EntryBinding partKeyBinding =
+ new SerialBinding(catalog, PartKey.class);
+ EntryBinding partDataBinding =
+ new SerialBinding(catalog, PartData.class);
+ EntryBinding supplierKeyBinding =
+ new SerialBinding(catalog, SupplierKey.class);
+ EntryBinding supplierDataBinding =
+ new SerialBinding(catalog, SupplierData.class);
+ EntryBinding shipmentKeyBinding =
+ new SerialBinding(catalog, ShipmentKey.class);
+ EntryBinding shipmentDataBinding =
+ new SerialBinding(catalog, ShipmentData.class);
+ EntryBinding cityKeyBinding =
+ new SerialBinding(catalog, String.class);
+
+ // 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 StoredSortedMap(db.getPartDatabase(),
+ partKeyBinding, partDataBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierDatabase(),
+ supplierKeyBinding, supplierDataBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentDatabase(),
+ shipmentKeyBinding, shipmentDataBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartDatabase(),
+ partKeyBinding, shipmentDataBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierDatabase(),
+ supplierKeyBinding, shipmentDataBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityDatabase(),
+ cityKeyBinding, supplierDataBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredSortedMap 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 StoredSortedMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public final StoredSortedMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public final StoredSortedMap 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 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/collections/ship/index/ShipmentData.java b/db/examples_java/src/collections/ship/index/ShipmentData.java
new file mode 100644
index 000000000..8f43933de
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/ShipmentData.java
@@ -0,0 +1,42 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentData.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentData serves as the data in the key/data pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentData is used both as the storage data for the
+ * data as well as the object binding to the data. Because it is used
+ * directly as storage data using serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentData implements Serializable {
+
+ private int quantity;
+
+ public ShipmentData(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentData: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/index/ShipmentKey.java b/db/examples_java/src/collections/ship/index/ShipmentKey.java
new file mode 100644
index 000000000..bdcbd85e2
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/ShipmentKey.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentKey serves as the key in the key/data 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 serial format, 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/collections/ship/index/SupplierData.java b/db/examples_java/src/collections/ship/index/SupplierData.java
new file mode 100644
index 000000000..fd7264316
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/SupplierData.java
@@ -0,0 +1,58 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierData.java,v 12.4 2006/08/24 14:45:57 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierData serves as the data in the key/data pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierData is used both as the storage data for the
+ * data as well as the object binding to the data. Because it is used
+ * directly as storage data using serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierData implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierData(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 "[SupplierData: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/index/SupplierKey.java b/db/examples_java/src/collections/ship/index/SupplierKey.java
new file mode 100644
index 000000000..dcd2b4fec
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/SupplierKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.index;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierKey serves as the key in the key/data 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 serial format, 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/collections/ship/index/Weight.java b/db/examples_java/src/collections/ship/index/Weight.java
new file mode 100644
index 000000000..16d629218
--- /dev/null
+++ b/db/examples_java/src/collections/ship/index/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.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/collections/ship/marshal/MarshalledEnt.java b/db/examples_java/src/collections/ship/marshal/MarshalledEnt.java
new file mode 100644
index 000000000..d750f7ea6
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/MarshalledEnt.java
@@ -0,0 +1,43 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MarshalledEnt.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * MarshalledEnt is implemented by entity (combined key/data) objects and
+ * called by {@link SampleViews.MarshalledEntityBinding}. In this sample,
+ * MarshalledEnt 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 MarshalledEnt must also have a no arguments constructor so
+ * that it can be instantiated by the binding.
+ *
+ * @author Mark Hayes
+ */
+interface MarshalledEnt {
+
+ /**
+ * Extracts the entity's primary key and writes it to the key output.
+ */
+ void marshalPrimaryKey(TupleOutput keyOutput);
+
+ /**
+ * Completes construction of the entity by setting its primary key from the
+ * stored primary key.
+ */
+ void unmarshalPrimaryKey(TupleInput keyInput);
+
+ /**
+ * Extracts the entity's index key and writes it to the key output.
+ */
+ boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput);
+}
diff --git a/db/examples_java/src/collections/ship/marshal/MarshalledKey.java b/db/examples_java/src/collections/ship/marshal/MarshalledKey.java
new file mode 100644
index 000000000..b3d4e5302
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/MarshalledKey.java
@@ -0,0 +1,37 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MarshalledKey.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * 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 constructor so
+ * that it can be instantiated by the binding.
+ *
+ * @author Mark Hayes
+ */
+interface MarshalledKey {
+
+ /**
+ * Construct the key tuple entry from the key object.
+ */
+ void marshalKey(TupleOutput keyOutput);
+
+ /**
+ * Construct the key object from the key tuple entry.
+ */
+ void unmarshalKey(TupleInput keyInput);
+}
diff --git a/db/examples_java/src/collections/ship/marshal/Part.java b/db/examples_java/src/collections/ship/marshal/Part.java
new file mode 100644
index 000000000..2de3311de
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/Part.java
@@ -0,0 +1,117 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Part.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import java.io.Serializable;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A Part represents the combined key/data pair for a part entity.
+ *
+ * <p> In this sample, Part is bound to the stored key/data entry by
+ * implementing the MarshalledEnt 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 entry 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 PartData 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, MarshalledEnt {
+
+ 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 + ']';
+ }
+
+ // --- MarshalledEnt implementation ---
+
+ Part() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput) {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput) {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/PartKey.java b/db/examples_java/src/collections/ship/marshal/PartKey.java
new file mode 100644
index 000000000..7d0d62d4d
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/PartKey.java
@@ -0,0 +1,60 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A PartKey serves as the key in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the stored key tuple entry 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) {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalKey(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.number);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/Sample.java b/db/examples_java/src/collections/ship/marshal/Sample.java
new file mode 100644
index 000000000..b6b5663d1
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/Sample.java
@@ -0,0 +1,250 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.DatabaseException;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.marshal.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws DatabaseException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DatabaseException {
+
+ 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/collections/ship/marshal/SampleDatabase.java b/db/examples_java/src/collections/ship/marshal/SampleDatabase.java
new file mode 100644
index 000000000..e902f38fa
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/SampleDatabase.java
@@ -0,0 +1,259 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.serial.TupleSerialKeyCreator;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private SecondaryDatabase supplierByCityDb;
+ private SecondaryDatabase shipmentByPartDb;
+ private SecondaryDatabase shipmentBySupplierDb;
+ private StoredClassCatalog javaCatalog;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+
+ // Open the SecondaryDatabase for the city index of the supplier store,
+ // and for the part and supplier indices of the shipment store.
+ // Duplicate keys are allowed since more than one supplier may be in
+ // the same city, and more than one shipment may exist for the same
+ // supplier or part. A foreign key constraint is defined for the
+ // supplier and part indices to ensure that a shipment only refers to
+ // existing part and supplier keys. The CASCADE delete action means
+ // that shipments will be deleted if their associated part or supplier
+ // is deleted.
+ //
+ SecondaryConfig secConfig = new SecondaryConfig();
+ secConfig.setTransactional(true);
+ secConfig.setAllowCreate(true);
+ secConfig.setType(DatabaseType.BTREE);
+ secConfig.setSortedDuplicates(true);
+
+ secConfig.setKeyCreator(new MarshalledKeyCreator(javaCatalog,
+ Supplier.class,
+ Supplier.CITY_KEY));
+ supplierByCityDb = env.openSecondaryDatabase(null, SUPPLIER_CITY_INDEX,
+ null,
+ supplierDb,
+ secConfig);
+
+ secConfig.setKeyCreator(new MarshalledKeyCreator(javaCatalog,
+ Shipment.class,
+ Shipment.PART_KEY));
+ shipmentByPartDb = env.openSecondaryDatabase(null, SHIPMENT_PART_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+
+ secConfig.setKeyCreator(new MarshalledKeyCreator(javaCatalog,
+ Shipment.class,
+ Shipment.SUPPLIER_KEY));
+ shipmentBySupplierDb = env.openSecondaryDatabase(null,
+ SHIPMENT_SUPPLIER_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final SecondaryDatabase getShipmentByPartDatabase() {
+
+ return shipmentByPartDb;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final SecondaryDatabase getShipmentBySupplierDatabase() {
+
+ return shipmentBySupplierDb;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final SecondaryDatabase getSupplierByCityDatabase() {
+
+ return supplierByCityDb;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DatabaseException {
+
+ // Close secondary databases, then primary databases.
+ supplierByCityDb.close();
+ shipmentByPartDb.close();
+ shipmentBySupplierDb.close();
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+
+ /**
+ * The SecondaryKeyCreator for MarshalledEnt objects. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class MarshalledKeyCreator
+ extends TupleSerialKeyCreator {
+
+ private String keyName;
+
+ /**
+ * Construct the key creator.
+ * @param catalog is the class catalog.
+ * @param valueClass is the supplier value class.
+ * @param keyName is the key name passed to the marshalling methods.
+ */
+ private MarshalledKeyCreator(ClassCatalog catalog,
+ Class valueClass,
+ String keyName) {
+
+ super(catalog, valueClass);
+ 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ // 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
+ MarshalledEnt entity = (MarshalledEnt) valueInput;
+ entity.unmarshalPrimaryKey(primaryKeyInput);
+ return entity.marshalSecondaryKey(keyName, indexKeyOutput);
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/SampleViews.java b/db/examples_java/src/collections/ship/marshal/SampleViews.java
new file mode 100644
index 000000000..7424e5d45
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/SampleViews.java
@@ -0,0 +1,277 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import com.sleepycat.bind.EntityBinding;
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.TupleSerialBinding;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.StoredSortedValueSet;
+import com.sleepycat.util.RuntimeExceptionWrapper;
+
+/**
+ * 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/data entry pair to a combined data 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
+ // EntryBinding classes to bind the stored tuple entry to a key Object.
+ //
+ ClassCatalog catalog = db.getClassCatalog();
+ EntryBinding partKeyBinding =
+ new MarshalledKeyBinding(PartKey.class);
+ EntityBinding partDataBinding =
+ new MarshalledEntityBinding(catalog, Part.class);
+ EntryBinding supplierKeyBinding =
+ new MarshalledKeyBinding(SupplierKey.class);
+ EntityBinding supplierDataBinding =
+ new MarshalledEntityBinding(catalog, Supplier.class);
+ EntryBinding shipmentKeyBinding =
+ new MarshalledKeyBinding(ShipmentKey.class);
+ EntityBinding shipmentDataBinding =
+ new MarshalledEntityBinding(catalog, Shipment.class);
+ EntryBinding cityKeyBinding =
+ TupleBinding.getPrimitiveBinding(String.class);
+
+ // 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.getPartDatabase(),
+ partKeyBinding, partDataBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierDatabase(),
+ supplierKeyBinding, supplierDataBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentDatabase(),
+ shipmentKeyBinding, shipmentDataBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartDatabase(),
+ partKeyBinding, shipmentDataBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierDatabase(),
+ supplierKeyBinding, shipmentDataBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityDatabase(),
+ cityKeyBinding, supplierDataBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredSortedMap 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 entry 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.
+ */
+ private MarshalledKeyBinding(Class keyClass) {
+
+ // 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 entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ try {
+ MarshalledKey key = (MarshalledKey) keyClass.newInstance();
+ key.unmarshalKey(input);
+ return key;
+ } catch (IllegalAccessException e) {
+ throw new RuntimeExceptionWrapper(e);
+ } catch (InstantiationException e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ MarshalledKey key = (MarshalledKey) object;
+ key.marshalKey(output);
+ }
+ }
+
+ /**
+ * MarshalledEntityBinding is used to bind the stored key/data entry pair
+ * to a combined to an entity object representation. To do this, it calls
+ * the MarshalledEnt interface implemented by the entity class.
+ *
+ * <p> The binding is "tricky" in that it uses the entity class for both
+ * the stored data entry 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 "data" class
+ * completely. </p>
+ */
+ private static class MarshalledEntityBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private MarshalledEntityBinding(ClassCatalog classCatalog,
+ Class entityClass) {
+
+ super(classCatalog, entityClass);
+
+ // The entity class will be used to instantiate the entity object.
+ //
+ if (!MarshalledEnt.class.isAssignableFrom(entityClass)) {
+ throw new IllegalArgumentException(entityClass.toString() +
+ " does not implement MarshalledEnt");
+ }
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ * This "tricky" binding returns the stored data as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object entryToObject(TupleInput tupleInput, Object javaInput) {
+
+ MarshalledEnt entity = (MarshalledEnt) javaInput;
+ entity.unmarshalPrimaryKey(tupleInput);
+ return entity;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ MarshalledEnt entity = (MarshalledEnt) object;
+ entity.marshalPrimaryKey(output);
+ }
+
+ /**
+ * Return the entity as the stored data. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToData(Object object) {
+
+ return object;
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/Shipment.java b/db/examples_java/src/collections/ship/marshal/Shipment.java
new file mode 100644
index 000000000..0863a510e
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/Shipment.java
@@ -0,0 +1,114 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Shipment.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import java.io.Serializable;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A Shipment represents the combined key/data pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is bound to the stored key/data entry by
+ * implementing the MarshalledEnt 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 entry 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 ShipmentData 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, MarshalledEnt {
+
+ 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 + ']';
+ }
+
+ // --- MarshalledEnt implementation ---
+
+ Shipment() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput) {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+
+ public boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput) {
+
+ if (keyName.equals(PART_KEY)) {
+ keyOutput.writeString(this.partNumber);
+ return true;
+ } else if (keyName.equals(SUPPLIER_KEY)) {
+ keyOutput.writeString(this.supplierNumber);
+ return true;
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/ShipmentKey.java b/db/examples_java/src/collections/ship/marshal/ShipmentKey.java
new file mode 100644
index 000000000..6f2f829e1
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/ShipmentKey.java
@@ -0,0 +1,70 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A ShipmentKey serves as the key in the key/data pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the stored key tuple entry 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) {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+
+ public void marshalKey(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/Supplier.java b/db/examples_java/src/collections/ship/marshal/Supplier.java
new file mode 100644
index 000000000..fc9ca3709
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/Supplier.java
@@ -0,0 +1,119 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Supplier.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import java.io.Serializable;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A Supplier represents the combined key/data pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is bound to the stored key/data entry by
+ * implementing the MarshalledEnt 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 entry 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 SupplierData 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, MarshalledEnt {
+
+ 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 + ']';
+ }
+
+ // --- MarshalledEnt implementation ---
+
+ Supplier() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput) {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public boolean marshalSecondaryKey(String keyName, TupleOutput keyOutput) {
+
+ if (keyName.equals(CITY_KEY)) {
+ if (this.city != null) {
+ keyOutput.writeString(this.city);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/SupplierKey.java b/db/examples_java/src/collections/ship/marshal/SupplierKey.java
new file mode 100644
index 000000000..4aaed3379
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/SupplierKey.java
@@ -0,0 +1,60 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:45:58 bostic Exp $
+ */
+
+package collections.ship.marshal;
+
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+/**
+ * A SupplierKey serves as the key in the key/data pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the stored key tuple entry 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) {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalKey(TupleOutput keyOutput) {
+
+ keyOutput.writeString(this.number);
+ }
+}
diff --git a/db/examples_java/src/collections/ship/marshal/Weight.java b/db/examples_java/src/collections/ship/marshal/Weight.java
new file mode 100644
index 000000000..9ca19886b
--- /dev/null
+++ b/db/examples_java/src/collections/ship/marshal/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.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/collections/ship/sentity/Part.java b/db/examples_java/src/collections/ship/sentity/Part.java
new file mode 100644
index 000000000..3e2b48f43
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/Part.java
@@ -0,0 +1,91 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Part.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+import java.io.Serializable;
+
+/**
+ * A Part represents the combined key/data pair for a part entity.
+ *
+ * <p> In this sample, Part is created from the stored key/data entry 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 entry 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 PartData 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/collections/ship/sentity/PartKey.java b/db/examples_java/src/collections/ship/sentity/PartKey.java
new file mode 100644
index 000000000..70caa83c6
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/PartKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+/**
+ * A PartKey serves as the key in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the key's tuple storage entry 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/collections/ship/sentity/Sample.java b/db/examples_java/src/collections/ship/sentity/Sample.java
new file mode 100644
index 000000000..56cca90c3
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/Sample.java
@@ -0,0 +1,250 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.DatabaseException;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.sentity.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws DatabaseException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DatabaseException {
+
+ 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/collections/ship/sentity/SampleDatabase.java b/db/examples_java/src/collections/ship/sentity/SampleDatabase.java
new file mode 100644
index 000000000..e30b85523
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/SampleDatabase.java
@@ -0,0 +1,322 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.serial.TupleSerialKeyCreator;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private SecondaryDatabase supplierByCityDb;
+ private SecondaryDatabase shipmentByPartDb;
+ private SecondaryDatabase shipmentBySupplierDb;
+ private StoredClassCatalog javaCatalog;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+
+ // Open the SecondaryDatabase for the city index of the supplier store,
+ // and for the part and supplier indices of the shipment store.
+ // Duplicate keys are allowed since more than one supplier may be in
+ // the same city, and more than one shipment may exist for the same
+ // supplier or part. A foreign key constraint is defined for the
+ // supplier and part indices to ensure that a shipment only refers to
+ // existing part and supplier keys. The CASCADE delete action means
+ // that shipments will be deleted if their associated part or supplier
+ // is deleted.
+ //
+ SecondaryConfig secConfig = new SecondaryConfig();
+ secConfig.setTransactional(true);
+ secConfig.setAllowCreate(true);
+ secConfig.setType(DatabaseType.BTREE);
+ secConfig.setSortedDuplicates(true);
+
+ secConfig.setKeyCreator(new SupplierByCityKeyCreator(javaCatalog,
+ Supplier.class));
+ supplierByCityDb = env.openSecondaryDatabase(null, SUPPLIER_CITY_INDEX,
+ null,
+ supplierDb,
+ secConfig);
+
+ secConfig.setKeyCreator(new ShipmentByPartKeyCreator(javaCatalog,
+ Shipment.class));
+ shipmentByPartDb = env.openSecondaryDatabase(null, SHIPMENT_PART_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+
+ secConfig.setKeyCreator(new ShipmentBySupplierKeyCreator(javaCatalog,
+ Shipment.class));
+ shipmentBySupplierDb = env.openSecondaryDatabase(null,
+ SHIPMENT_SUPPLIER_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final SecondaryDatabase getShipmentByPartDatabase() {
+
+ return shipmentByPartDb;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final SecondaryDatabase getShipmentBySupplierDatabase() {
+
+ return shipmentBySupplierDb;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final SecondaryDatabase getSupplierByCityDatabase() {
+
+ return supplierByCityDb;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DatabaseException {
+
+ // Close secondary databases, then primary databases.
+ supplierByCityDb.close();
+ shipmentByPartDb.close();
+ shipmentBySupplierDb.close();
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+
+ /**
+ * The SecondaryKeyCreator for the SupplierByCity index. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class SupplierByCityKeyCreator
+ extends TupleSerialKeyCreator {
+
+ /**
+ * Construct the city key extractor.
+ * @param catalog is the class catalog.
+ * @param valueClass is the supplier value class.
+ */
+ private SupplierByCityKeyCreator(ClassCatalog catalog,
+ Class valueClass) {
+
+ super(catalog, valueClass);
+ }
+
+ /**
+ * 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ Supplier supplier = (Supplier) valueInput;
+ String city = supplier.getCity();
+ if (city != null) {
+ indexKeyOutput.writeString(supplier.getCity());
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentByPart index. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class ShipmentByPartKeyCreator
+ extends TupleSerialKeyCreator {
+
+ /**
+ * Construct the part key extractor.
+ * @param catalog is the class catalog.
+ * @param valueClass is the shipment value class.
+ */
+ private ShipmentByPartKeyCreator(ClassCatalog catalog,
+ Class valueClass) {
+ super(catalog, valueClass);
+ }
+
+ /**
+ * 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ String partNumber = primaryKeyInput.readString();
+ // don't bother reading the supplierNumber
+ indexKeyOutput.writeString(partNumber);
+ return true;
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentBySupplier index. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class ShipmentBySupplierKeyCreator
+ extends TupleSerialKeyCreator {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param catalog is the class catalog.
+ * @param valueClass is the shipment value class.
+ */
+ private ShipmentBySupplierKeyCreator(ClassCatalog catalog,
+ Class valueClass) {
+ super(catalog, valueClass);
+ }
+
+ /**
+ * 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ primaryKeyInput.readString(); // skip the partNumber
+ String supplierNumber = primaryKeyInput.readString();
+ indexKeyOutput.writeString(supplierNumber);
+ return true;
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/sentity/SampleViews.java b/db/examples_java/src/collections/ship/sentity/SampleViews.java
new file mode 100644
index 000000000..a322951f9
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/SampleViews.java
@@ -0,0 +1,420 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+import com.sleepycat.bind.EntityBinding;
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.TupleSerialBinding;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.StoredSortedValueSet;
+
+/**
+ * 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/data entry pair to a combined data 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
+ // EntryBinding classes to bind the stored tuple entry to a key Object.
+ //
+ ClassCatalog catalog = db.getClassCatalog();
+ EntryBinding partKeyBinding =
+ new PartKeyBinding();
+ EntityBinding partDataBinding =
+ new PartBinding(catalog, Part.class);
+ EntryBinding supplierKeyBinding =
+ new SupplierKeyBinding();
+ EntityBinding supplierDataBinding =
+ new SupplierBinding(catalog, Supplier.class);
+ EntryBinding shipmentKeyBinding =
+ new ShipmentKeyBinding();
+ EntityBinding shipmentDataBinding =
+ new ShipmentBinding(catalog, Shipment.class);
+ EntryBinding cityKeyBinding =
+ TupleBinding.getPrimitiveBinding(String.class);
+
+ // 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.getPartDatabase(),
+ partKeyBinding, partDataBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierDatabase(),
+ supplierKeyBinding, supplierDataBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentDatabase(),
+ shipmentKeyBinding, shipmentDataBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartDatabase(),
+ partKeyBinding, shipmentDataBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierDatabase(),
+ supplierKeyBinding, shipmentDataBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityDatabase(),
+ cityKeyBinding, supplierDataBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredSortedMap 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 entry for a part to
+ * a key object representation.
+ */
+ private static class PartKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private PartKeyBinding() {
+ }
+
+ /**
+ * Create the key object from the stored key tuple entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ String number = input.readString();
+ return new PartKey(number);
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ PartKey key = (PartKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/data entry pair for a part
+ * to a combined data object (entity).
+ *
+ * <p> The binding is "tricky" in that it uses the Part class for both the
+ * stored data entry 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 PartData class
+ * completely. </p>
+ */
+ private static class PartBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private PartBinding(ClassCatalog classCatalog, Class dataClass) {
+
+ super(classCatalog, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ * This "tricky" binding returns the stored data as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object entryToObject(TupleInput keyInput, Object dataInput) {
+
+ String number = keyInput.readString();
+ Part part = (Part) dataInput;
+ part.setKey(number);
+ return part;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ Part part = (Part) object;
+ output.writeString(part.getNumber());
+ }
+
+ /**
+ * Return the entity as the stored data. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToData(Object object) {
+
+ return object;
+ }
+ }
+
+ /**
+ * SupplierKeyBinding is used to bind the stored key tuple entry for a
+ * supplier to a key object representation.
+ */
+ private static class SupplierKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private SupplierKeyBinding() {
+ }
+
+ /**
+ * Create the key object from the stored key tuple entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ String number = input.readString();
+ return new SupplierKey(number);
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ SupplierKey key = (SupplierKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * SupplierBinding is used to bind the stored key/data entry pair for a
+ * supplier to a combined data object (entity).
+ *
+ * <p> The binding is "tricky" in that it uses the Supplier class for both
+ * the stored data entry 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
+ * SupplierData class completely. </p>
+ */
+ private static class SupplierBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private SupplierBinding(ClassCatalog classCatalog, Class dataClass) {
+
+ super(classCatalog, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ * This "tricky" binding returns the stored data as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object entryToObject(TupleInput keyInput, Object dataInput) {
+
+ String number = keyInput.readString();
+ Supplier supplier = (Supplier) dataInput;
+ supplier.setKey(number);
+ return supplier;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ Supplier supplier = (Supplier) object;
+ output.writeString(supplier.getNumber());
+ }
+
+ /**
+ * Return the entity as the stored data. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToData(Object object) {
+
+ return object;
+ }
+ }
+
+ /**
+ * ShipmentKeyBinding is used to bind the stored key tuple entry for a
+ * shipment to a key object representation.
+ */
+ private static class ShipmentKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private ShipmentKeyBinding() {
+ }
+
+ /**
+ * Create the key object from the stored key tuple entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ String partNumber = input.readString();
+ String supplierNumber = input.readString();
+ return new ShipmentKey(partNumber, supplierNumber);
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ ShipmentKey key = (ShipmentKey) object;
+ output.writeString(key.getPartNumber());
+ output.writeString(key.getSupplierNumber());
+ }
+ }
+
+ /**
+ * ShipmentBinding is used to bind the stored key/data entry pair for a
+ * shipment to a combined data object (entity).
+ *
+ * <p> The binding is "tricky" in that it uses the Shipment class for both
+ * the stored data entry 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
+ * ShipmentData class completely. </p>
+ */
+ private static class ShipmentBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private ShipmentBinding(ClassCatalog classCatalog, Class dataClass) {
+
+ super(classCatalog, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ * This "tricky" binding returns the stored data as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object entryToObject(TupleInput keyInput, Object dataInput) {
+
+ String partNumber = keyInput.readString();
+ String supplierNumber = keyInput.readString();
+ Shipment shipment = (Shipment) dataInput;
+ shipment.setKey(partNumber, supplierNumber);
+ return shipment;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ Shipment shipment = (Shipment) object;
+ output.writeString(shipment.getPartNumber());
+ output.writeString(shipment.getSupplierNumber());
+ }
+
+ /**
+ * Return the entity as the stored data. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToData(Object object) {
+
+ return object;
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/sentity/Shipment.java b/db/examples_java/src/collections/ship/sentity/Shipment.java
new file mode 100644
index 000000000..914f0d479
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/Shipment.java
@@ -0,0 +1,76 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Shipment.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+import java.io.Serializable;
+
+/**
+ * A Shipment represents the combined key/data pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is created from the stored key/data entry
+ * 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 entry 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 ShipmentData 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/collections/ship/sentity/ShipmentKey.java b/db/examples_java/src/collections/ship/sentity/ShipmentKey.java
new file mode 100644
index 000000000..f03e82e6c
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/ShipmentKey.java
@@ -0,0 +1,47 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+/**
+ * A ShipmentKey serves as the key in the key/data pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the key's tuple storage entry
+ * 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/collections/ship/sentity/Supplier.java b/db/examples_java/src/collections/ship/sentity/Supplier.java
new file mode 100644
index 000000000..f6f033b3c
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/Supplier.java
@@ -0,0 +1,83 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Supplier.java,v 12.4 2006/08/24 14:45:59 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+import java.io.Serializable;
+
+/**
+ * A Supplier represents the combined key/data pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is created from the stored key/data entry
+ * 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 entry 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 SupplierData 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/collections/ship/sentity/SupplierKey.java b/db/examples_java/src/collections/ship/sentity/SupplierKey.java
new file mode 100644
index 000000000..ac9478a7c
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/SupplierKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.sentity;
+
+/**
+ * A SupplierKey serves as the key in the key/data pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the key's tuple storage entry
+ * 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/collections/ship/sentity/Weight.java b/db/examples_java/src/collections/ship/sentity/Weight.java
new file mode 100644
index 000000000..0d045d6e6
--- /dev/null
+++ b/db/examples_java/src/collections/ship/sentity/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.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/collections/ship/tuple/Part.java b/db/examples_java/src/collections/ship/tuple/Part.java
new file mode 100644
index 000000000..644902e6a
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/Part.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Part.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+/**
+ * A Part represents the combined key/data pair for a part entity.
+ *
+ * <p> In this sample, Part is created from the stored key/data entry 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/collections/ship/tuple/PartData.java b/db/examples_java/src/collections/ship/tuple/PartData.java
new file mode 100644
index 000000000..797d06c2b
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/PartData.java
@@ -0,0 +1,66 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartData.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+import java.io.Serializable;
+
+/**
+ * A PartData serves as the value in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartData 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 serial format, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartData implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartData(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 "[PartData: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/tuple/PartKey.java b/db/examples_java/src/collections/ship/tuple/PartKey.java
new file mode 100644
index 000000000..8cb5612ef
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/PartKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PartKey.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+/**
+ * A PartKey serves as the key in the key/data pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the key's tuple storage entry 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/collections/ship/tuple/Sample.java b/db/examples_java/src/collections/ship/tuple/Sample.java
new file mode 100644
index 000000000..9770c6285
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/Sample.java
@@ -0,0 +1,249 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Sample.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.sleepycat.collections.StoredIterator;
+import com.sleepycat.collections.TransactionRunner;
+import com.sleepycat.collections.TransactionWorker;
+import com.sleepycat.db.DatabaseException;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java collections.ship.tuple.Sample
+ * [-h <home-directory> ]
+ * </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>
+ *
+ * @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.
+ //
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is RunRecoveryException, 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)
+ throws DatabaseException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DatabaseException {
+
+ 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/collections/ship/tuple/SampleDatabase.java b/db/examples_java/src/collections/ship/tuple/SampleDatabase.java
new file mode 100644
index 000000000..dfbba0de7
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/SampleDatabase.java
@@ -0,0 +1,322 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.serial.TupleSerialKeyCreator;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+/**
+ * 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 Environment env;
+ private Database partDb;
+ private Database supplierDb;
+ private Database shipmentDb;
+ private SecondaryDatabase supplierByCityDb;
+ private SecondaryDatabase shipmentByPartDb;
+ private SecondaryDatabase shipmentBySupplierDb;
+ private StoredClassCatalog javaCatalog;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory)
+ throws DatabaseException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ System.out.println("Opening environment in: " + homeDirectory);
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setTransactional(true);
+ envConfig.setAllowCreate(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setInitializeLocking(true);
+ env = new Environment(new File(homeDirectory), envConfig);
+
+ // Set the Berkeley DB config for opening all stores.
+ //
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ dbConfig.setType(DatabaseType.BTREE);
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of serial format.
+ //
+ Database catalogDb = env.openDatabase(null, CLASS_CATALOG, null,
+ dbConfig);
+ javaCatalog = new StoredClassCatalog(catalogDb);
+
+ // Open the Berkeley DB database for the part, supplier and shipment
+ // stores. The stores are opened with no duplicate keys allowed.
+ //
+ partDb = env.openDatabase(null, PART_STORE, null, dbConfig);
+
+ supplierDb = env.openDatabase(null, SUPPLIER_STORE, null, dbConfig);
+
+ shipmentDb = env.openDatabase(null, SHIPMENT_STORE, null, dbConfig);
+
+ // Open the SecondaryDatabase for the city index of the supplier store,
+ // and for the part and supplier indices of the shipment store.
+ // Duplicate keys are allowed since more than one supplier may be in
+ // the same city, and more than one shipment may exist for the same
+ // supplier or part. A foreign key constraint is defined for the
+ // supplier and part indices to ensure that a shipment only refers to
+ // existing part and supplier keys. The CASCADE delete action means
+ // that shipments will be deleted if their associated part or supplier
+ // is deleted.
+ //
+ SecondaryConfig secConfig = new SecondaryConfig();
+ secConfig.setTransactional(true);
+ secConfig.setAllowCreate(true);
+ secConfig.setType(DatabaseType.BTREE);
+ secConfig.setSortedDuplicates(true);
+
+ secConfig.setKeyCreator(new SupplierByCityKeyCreator(javaCatalog,
+ SupplierData.class));
+ supplierByCityDb = env.openSecondaryDatabase(null, SUPPLIER_CITY_INDEX,
+ null,
+ supplierDb,
+ secConfig);
+
+ secConfig.setKeyCreator(new ShipmentByPartKeyCreator(javaCatalog,
+ ShipmentData.class));
+ shipmentByPartDb = env.openSecondaryDatabase(null, SHIPMENT_PART_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+
+ secConfig.setKeyCreator(new ShipmentBySupplierKeyCreator(javaCatalog,
+ ShipmentData.class));
+ shipmentBySupplierDb = env.openSecondaryDatabase(null,
+ SHIPMENT_SUPPLIER_INDEX,
+ null,
+ shipmentDb,
+ secConfig);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final Environment getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the class catalog.
+ */
+ public final StoredClassCatalog getClassCatalog() {
+
+ return javaCatalog;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final Database getPartDatabase() {
+
+ return partDb;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final Database getSupplierDatabase() {
+
+ return supplierDb;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final Database getShipmentDatabase() {
+
+ return shipmentDb;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final SecondaryDatabase getShipmentByPartDatabase() {
+
+ return shipmentByPartDb;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final SecondaryDatabase getShipmentBySupplierDatabase() {
+
+ return shipmentBySupplierDb;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final SecondaryDatabase getSupplierByCityDatabase() {
+
+ return supplierByCityDb;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DatabaseException {
+
+ // Close secondary databases, then primary databases.
+ supplierByCityDb.close();
+ shipmentByPartDb.close();
+ shipmentBySupplierDb.close();
+ partDb.close();
+ supplierDb.close();
+ shipmentDb.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close();
+ }
+
+ /**
+ * The SecondaryKeyCreator for the SupplierByCity index. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class SupplierByCityKeyCreator
+ extends TupleSerialKeyCreator {
+
+ /**
+ * Construct the city key extractor.
+ * @param catalog is the class catalog.
+ * @param valueClass is the supplier value class.
+ */
+ private SupplierByCityKeyCreator(ClassCatalog catalog,
+ Class valueClass) {
+
+ super(catalog, valueClass);
+ }
+
+ /**
+ * 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ SupplierData supplierData = (SupplierData) valueInput;
+ String city = supplierData.getCity();
+ if (city != null) {
+ indexKeyOutput.writeString(supplierData.getCity());
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentByPart index. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class ShipmentByPartKeyCreator
+ extends TupleSerialKeyCreator {
+
+ /**
+ * Construct the part key extractor.
+ * @param catalog is the class catalog.
+ * @param valueClass is the shipment value class.
+ */
+ private ShipmentByPartKeyCreator(ClassCatalog catalog,
+ Class valueClass) {
+ super(catalog, valueClass);
+ }
+
+ /**
+ * 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ String partNumber = primaryKeyInput.readString();
+ // don't bother reading the supplierNumber
+ indexKeyOutput.writeString(partNumber);
+ return true;
+ }
+ }
+
+ /**
+ * The SecondaryKeyCreator for the ShipmentBySupplier index. This is an
+ * extension of the abstract class TupleSerialKeyCreator, which implements
+ * SecondaryKeyCreator for the case where the data keys are of the format
+ * TupleFormat and the data values are of the format SerialFormat.
+ */
+ private static class ShipmentBySupplierKeyCreator
+ extends TupleSerialKeyCreator {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param catalog is the class catalog.
+ * @param valueClass is the shipment value class.
+ */
+ private ShipmentBySupplierKeyCreator(ClassCatalog catalog,
+ Class valueClass) {
+ super(catalog, valueClass);
+ }
+
+ /**
+ * 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 boolean createSecondaryKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput) {
+
+ primaryKeyInput.readString(); // skip the partNumber
+ String supplierNumber = primaryKeyInput.readString();
+ indexKeyOutput.writeString(supplierNumber);
+ return true;
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/tuple/SampleViews.java b/db/examples_java/src/collections/ship/tuple/SampleViews.java
new file mode 100644
index 000000000..9429f08bd
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/SampleViews.java
@@ -0,0 +1,397 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+import com.sleepycat.bind.EntityBinding;
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.ClassCatalog;
+import com.sleepycat.bind.serial.TupleSerialBinding;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+import com.sleepycat.collections.StoredSortedMap;
+import com.sleepycat.collections.StoredSortedValueSet;
+
+/**
+ * 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/data entry pair to a combined data object. For keys, a
+ // one-to-one binding is implemented with EntryBinding classes to bind
+ // the stored tuple entry to a key Object.
+ //
+ ClassCatalog catalog = db.getClassCatalog();
+ EntryBinding partKeyBinding =
+ new PartKeyBinding();
+ EntityBinding partDataBinding =
+ new PartBinding(catalog, PartData.class);
+ EntryBinding supplierKeyBinding =
+ new SupplierKeyBinding();
+ EntityBinding supplierDataBinding =
+ new SupplierBinding(catalog, SupplierData.class);
+ EntryBinding shipmentKeyBinding =
+ new ShipmentKeyBinding();
+ EntityBinding shipmentDataBinding =
+ new ShipmentBinding(catalog, ShipmentData.class);
+ EntryBinding cityKeyBinding =
+ TupleBinding.getPrimitiveBinding(String.class);
+
+ // 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.getPartDatabase(),
+ partKeyBinding, partDataBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierDatabase(),
+ supplierKeyBinding, supplierDataBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentDatabase(),
+ shipmentKeyBinding, shipmentDataBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartDatabase(),
+ partKeyBinding, shipmentDataBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierDatabase(),
+ supplierKeyBinding, shipmentDataBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityDatabase(),
+ cityKeyBinding, supplierDataBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredSortedMap 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 entry for a part to
+ * a key object representation.
+ */
+ private static class PartKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private PartKeyBinding() {
+ }
+
+ /**
+ * Create the key object from the stored key tuple entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ String number = input.readString();
+ return new PartKey(number);
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ PartKey key = (PartKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/data entry pair for a part
+ * to a combined data object (entity).
+ */
+ private static class PartBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private PartBinding(ClassCatalog classCatalog, Class dataClass) {
+
+ super(classCatalog, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ */
+ public Object entryToObject(TupleInput keyInput, Object dataInput) {
+
+ String number = keyInput.readString();
+ PartData data = (PartData) dataInput;
+ return new Part(number, data.getName(), data.getColor(),
+ data.getWeight(), data.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ Part part = (Part) object;
+ output.writeString(part.getNumber());
+ }
+
+ /**
+ * Create the stored data from the entity.
+ */
+ public Object objectToData(Object object) {
+
+ Part part = (Part) object;
+ return new PartData(part.getName(), part.getColor(),
+ part.getWeight(), part.getCity());
+ }
+ }
+
+ /**
+ * SupplierKeyBinding is used to bind the stored key tuple entry for a
+ * supplier to a key object representation.
+ */
+ private static class SupplierKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private SupplierKeyBinding() {
+ }
+
+ /**
+ * Create the key object from the stored key tuple entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ String number = input.readString();
+ return new SupplierKey(number);
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ SupplierKey key = (SupplierKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * SupplierBinding is used to bind the stored key/data entry pair for a
+ * supplier to a combined data object (entity).
+ */
+ private static class SupplierBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private SupplierBinding(ClassCatalog classCatalog, Class dataClass) {
+
+ super(classCatalog, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ */
+ public Object entryToObject(TupleInput keyInput, Object dataInput) {
+
+ String number = keyInput.readString();
+ SupplierData data = (SupplierData) dataInput;
+ return new Supplier(number, data.getName(),
+ data.getStatus(), data.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ Supplier supplier = (Supplier) object;
+ output.writeString(supplier.getNumber());
+ }
+
+ /**
+ * Create the stored data from the entity.
+ */
+ public Object objectToData(Object object) {
+
+ Supplier supplier = (Supplier) object;
+ return new SupplierData(supplier.getName(), supplier.getStatus(),
+ supplier.getCity());
+ }
+ }
+
+ /**
+ * ShipmentKeyBinding is used to bind the stored key tuple entry for a
+ * shipment to a key object representation.
+ */
+ private static class ShipmentKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private ShipmentKeyBinding() {
+ }
+
+ /**
+ * Create the key object from the stored key tuple entry.
+ */
+ public Object entryToObject(TupleInput input) {
+
+ String partNumber = input.readString();
+ String supplierNumber = input.readString();
+ return new ShipmentKey(partNumber, supplierNumber);
+ }
+
+ /**
+ * Create the stored key tuple entry from the key object.
+ */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ ShipmentKey key = (ShipmentKey) object;
+ output.writeString(key.getPartNumber());
+ output.writeString(key.getSupplierNumber());
+ }
+ }
+
+ /**
+ * ShipmentBinding is used to bind the stored key/data entry pair for a
+ * shipment to a combined data object (entity).
+ */
+ private static class ShipmentBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ */
+ private ShipmentBinding(ClassCatalog classCatalog, Class dataClass) {
+
+ super(classCatalog, dataClass);
+ }
+
+ /**
+ * Create the entity by combining the stored key and data.
+ */
+ public Object entryToObject(TupleInput keyInput, Object dataInput) {
+
+ String partNumber = keyInput.readString();
+ String supplierNumber = keyInput.readString();
+ ShipmentData data = (ShipmentData) dataInput;
+ return new Shipment(partNumber, supplierNumber,
+ data.getQuantity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output) {
+
+ Shipment shipment = (Shipment) object;
+ output.writeString(shipment.getPartNumber());
+ output.writeString(shipment.getSupplierNumber());
+ }
+
+ /**
+ * Create the stored data from the entity.
+ */
+ public Object objectToData(Object object) {
+
+ Shipment shipment = (Shipment) object;
+ return new ShipmentData(shipment.getQuantity());
+ }
+ }
+}
diff --git a/db/examples_java/src/collections/ship/tuple/Shipment.java b/db/examples_java/src/collections/ship/tuple/Shipment.java
new file mode 100644
index 000000000..60f086b3a
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/Shipment.java
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Shipment.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+/**
+ * A Shipment represents the combined key/data pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is created from the stored key/data entry
+ * 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/collections/ship/tuple/ShipmentData.java b/db/examples_java/src/collections/ship/tuple/ShipmentData.java
new file mode 100644
index 000000000..e40fac898
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/ShipmentData.java
@@ -0,0 +1,43 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentData.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentData serves as the value in the key/value pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentData 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
+ * serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentData implements Serializable {
+
+ private int quantity;
+
+ public ShipmentData(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentData: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/tuple/ShipmentKey.java b/db/examples_java/src/collections/ship/tuple/ShipmentKey.java
new file mode 100644
index 000000000..8691a9fb3
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/ShipmentKey.java
@@ -0,0 +1,47 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+/**
+ * A ShipmentKey serves as the key in the key/data pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the key's tuple storage entry
+ * 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/collections/ship/tuple/Supplier.java b/db/examples_java/src/collections/ship/tuple/Supplier.java
new file mode 100644
index 000000000..beb9c32c9
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/Supplier.java
@@ -0,0 +1,64 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Supplier.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+/**
+ * A Supplier represents the combined key/data pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is created from the stored key/data entry
+ * 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/collections/ship/tuple/SupplierData.java b/db/examples_java/src/collections/ship/tuple/SupplierData.java
new file mode 100644
index 000000000..ebaad6146
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/SupplierData.java
@@ -0,0 +1,59 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierData.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierData serves as the value in the key/value pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierData 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
+ * serial format, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierData implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierData(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 "[SupplierData: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/collections/ship/tuple/SupplierKey.java b/db/examples_java/src/collections/ship/tuple/SupplierKey.java
new file mode 100644
index 000000000..cc9758510
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/SupplierKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.tuple;
+
+/**
+ * A SupplierKey serves as the key in the key/data pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the key's tuple storage entry
+ * 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/collections/ship/tuple/Weight.java b/db/examples_java/src/collections/ship/tuple/Weight.java
new file mode 100644
index 000000000..c3dae4fa9
--- /dev/null
+++ b/db/examples_java/src/collections/ship/tuple/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Weight.java,v 12.4 2006/08/24 14:46:00 bostic Exp $
+ */
+
+package collections.ship.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/examples_java/src/db/AccessExample.java b/db/examples_java/src/db/AccessExample.java
new file mode 100644
index 000000000..67e1f4788
--- /dev/null
+++ b/db/examples_java/src/db/AccessExample.java
@@ -0,0 +1,183 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: AccessExample.java,v 12.5 2006/08/24 14:46:01 bostic Exp $
+ */
+
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+class AccessExample {
+ private static final int EXIT_SUCCESS = 0;
+ private static final int EXIT_FAILURE = 1;
+
+ public AccessExample() {
+ }
+
+ public static void usage() {
+ System.out.println("usage: java " +
+ "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(removeExistingDatabase, databaseName);
+ } catch (DatabaseException dbe) {
+ System.err.println("AccessExample: " + dbe.toString());
+ System.exit(EXIT_FAILURE);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println("AccessExample: " + fnfe.toString());
+ System.exit(EXIT_FAILURE);
+ }
+ System.exit(EXIT_SUCCESS);
+ }
+
+ // Prompts for a line, and keeps prompting until a non blank
+ // line is returned. Returns null on error.
+ //
+ public static 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;
+ }
+
+ // Not terribly 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.
+ //
+ public static 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();
+ }
+
+ public void run(boolean removeExistingDatabase, String databaseName)
+ throws DatabaseException, FileNotFoundException {
+
+ // Remove the previous database.
+ if (removeExistingDatabase)
+ new File(databaseName).delete();
+
+ // Create the database object.
+ // There is no environment for this simple example.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setErrorStream(System.err);
+ dbConfig.setErrorPrefix("AccessExample");
+ dbConfig.setType(DatabaseType.BTREE);
+ dbConfig.setAllowCreate(true);
+ Database table = new Database(databaseName, null, dbConfig);
+
+ //
+ // Insert records into the database, where the key is the user
+ // input and the data is the user input in reverse order.
+ //
+ InputStreamReader reader = new InputStreamReader(System.in);
+
+ for (;;) {
+ String line = askForLine(reader, System.out, "input> ");
+ if (line == null)
+ break;
+
+ String reversed = (new StringBuffer(line)).reverse().toString();
+
+ // See definition of StringDbt below
+ //
+ StringEntry key = new StringEntry(line);
+ StringEntry data = new StringEntry(reversed);
+
+ try {
+ if (table.putNoOverwrite(null, key, data) == OperationStatus.KEYEXIST)
+ System.out.println("Key " + line + " already exists.");
+ } catch (DatabaseException dbe) {
+ System.out.println(dbe.toString());
+ }
+ }
+
+ // Acquire an iterator for the table.
+ Cursor cursor;
+ cursor = table.openCursor(null, null);
+
+ // Walk through the table, printing the key/data pairs.
+ // See class StringDbt defined below.
+ //
+ StringEntry key = new StringEntry();
+ StringEntry data = new StringEntry();
+ while (cursor.getNext(key, data, null) == OperationStatus.SUCCESS)
+ System.out.println(key.getString() + " : " + data.getString());
+ cursor.close();
+ table.close();
+ }
+
+ // Here's an example of how you can extend DatabaseEntry in a
+ // straightforward way to allow easy storage/retrieval of strings,
+ // or whatever kind of data you wish. We've declared it as a static
+ // inner class, but it need not be.
+ //
+ static /*inner*/
+ class StringEntry extends DatabaseEntry {
+ StringEntry() {
+ }
+
+ StringEntry(String value) {
+ setString(value);
+ }
+
+ void setString(String value) {
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
+ }
+
+ String getString() {
+ return new String(getData(), getOffset(), getSize());
+ }
+ }
+}
diff --git a/db/examples_java/src/db/BtRecExample.java b/db/examples_java/src/db/BtRecExample.java
new file mode 100644
index 000000000..8cb4e9fac
--- /dev/null
+++ b/db/examples_java/src/db/BtRecExample.java
@@ -0,0 +1,289 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: BtRecExample.java,v 12.5 2006/08/24 14:46:02 bostic Exp $
+ */
+
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+public class BtRecExample {
+ static final String progname = "BtRecExample"; // Program name.
+ static final String database = "access.db";
+ static final String wordlist = "../test/wordlist";
+
+ BtRecExample(BufferedReader reader)
+ throws DatabaseException, IOException, FileNotFoundException {
+
+ OperationStatus status;
+
+ // Remove the previous database.
+ File f = new File(database);
+ f.delete();
+
+ DatabaseConfig config = new DatabaseConfig();
+
+ config.setErrorStream(System.err);
+ config.setErrorPrefix(progname);
+ config.setPageSize(1024); // 1K page sizes.
+
+ config.setBtreeRecordNumbers(true);
+ config.setType(DatabaseType.BTREE);
+ config.setAllowCreate(true);
+ db = new Database(database, null, config);
+
+ //
+ // Insert records into the database, where the key is the word
+ // preceded by its record number, and the data is the same, but
+ // in reverse order.
+ //
+
+ for (int cnt = 1; cnt <= 1000; ++cnt) {
+ String numstr = String.valueOf(cnt);
+ while (numstr.length() < 4)
+ numstr = "0" + numstr;
+ String buf = numstr + '_' + reader.readLine();
+ StringBuffer rbuf = new StringBuffer(buf).reverse();
+
+ StringEntry key = new StringEntry(buf);
+ StringEntry data = new StringEntry(rbuf.toString());
+
+ status = db.putNoOverwrite(null, key, data);
+ if (status != OperationStatus.SUCCESS &&
+ status!= OperationStatus.KEYEXIST)
+ throw new DatabaseException("Database.put failed " + status);
+ }
+ }
+
+ void run() throws DatabaseException {
+ int recno;
+ OperationStatus status;
+
+ // Acquire a cursor for the database.
+ cursor = db.openCursor(null, null);
+
+ //
+ // Prompt the user for a record number, then retrieve and display
+ // that record.
+ //
+ InputStreamReader reader = new InputStreamReader(System.in);
+
+ for (;;) {
+ // Get a record number.
+ String line = askForLine(reader, System.out, "recno #> ");
+ if (line == null)
+ break;
+
+ try {
+ recno = Integer.parseInt(line);
+ } catch (NumberFormatException nfe) {
+ System.err.println("Bad record number: " + nfe);
+ continue;
+ }
+
+ //
+ // Start with a fresh key each time, the db.get() routine returns
+ // the key and data pair, not just the key!
+ //
+ RecnoStringEntry key = new RecnoStringEntry(recno, 100);
+ RecnoStringEntry data = new RecnoStringEntry(100);
+
+ status = cursor.getSearchRecordNumber(key, data, null);
+ if (status != OperationStatus.SUCCESS)
+ throw new DatabaseException("Cursor.setRecno failed: " + status);
+
+ // Display the key and data.
+ show("k/d\t", key, data);
+
+ // Move the cursor a record forward.
+ status = cursor.getNext(key, data, null);
+ if (status != OperationStatus.SUCCESS)
+ throw new DatabaseException("Cursor.getNext failed: " + status);
+
+ // Display the key and data.
+ show("next\t", key, data);
+
+ RecnoStringEntry datano = new RecnoStringEntry(100);
+
+ //
+ // Retrieve the record number for the following record into
+ // local memory.
+ //
+ status = cursor.getRecordNumber(datano, null);
+ if (status != OperationStatus.SUCCESS &&
+ status != OperationStatus.NOTFOUND &&
+ status != OperationStatus.KEYEMPTY)
+ throw new DatabaseException("Cursor.get failed: " + status);
+ else {
+ recno = datano.getRecordNumber();
+ System.out.println("retrieved recno: " + recno);
+ }
+ }
+
+ cursor.close();
+ cursor = null;
+ }
+
+ //
+ // Print out the number of records in the database.
+ //
+ void stats() throws DatabaseException {
+ BtreeStats stats;
+
+ stats = (BtreeStats)db.getStats(null, null);
+ System.out.println(progname + ": database contains " +
+ stats.getNumData() + " records");
+ }
+
+ void show(String msg, RecnoStringEntry key, RecnoStringEntry data)
+ throws DatabaseException {
+
+ System.out.println(msg + key.getString() + ": " + data.getString());
+ }
+
+ public void shutdown() throws DatabaseException {
+ if (cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
+ if (db != null) {
+ db.close();
+ db = null;
+ }
+ }
+
+ public static void main(String[] argv) {
+ try {
+ // Open the word database.
+ FileReader freader = new FileReader(wordlist);
+
+ BtRecExample app = new BtRecExample(new BufferedReader(freader));
+
+ // Close the word database.
+ freader.close();
+ freader = null;
+
+ app.stats();
+ app.run();
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(progname + ": unexpected open error " + fnfe);
+ System.exit (1);
+ } catch (IOException ioe) {
+ System.err.println(progname + ": open " + wordlist + ": " + ioe);
+ System.exit (1);
+ } catch (DatabaseException dbe) {
+ System.err.println("Exception: " + dbe);
+ System.exit(dbe.getErrno());
+ }
+
+ System.exit(0);
+ }
+
+ // Prompts for a line, and keeps prompting until a non blank
+ // line is returned. Returns null on error.
+ //
+ public static 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;
+ }
+
+ // Not terribly 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.
+ //
+ public static 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();
+ }
+
+ private Cursor cursor;
+ private Database db;
+
+ // Here's an example of how you can extend DatabaseEntry in a
+ // straightforward way to allow easy storage/retrieval of strings.
+ // We've declared it as a static inner class, but it need not be.
+ //
+ static class StringEntry extends DatabaseEntry {
+ StringEntry() {}
+
+ StringEntry(String value) {
+ setString(value);
+ }
+
+ void setString(String value) {
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
+ }
+
+ String getString() {
+ return new String(getData(), 0, getSize());
+ }
+ }
+
+ // Here's an example of how you can extend DatabaseEntry to store
+ // (potentially) both recno's and strings in the same structure.
+ //
+ static class RecnoStringEntry extends DatabaseEntry {
+ RecnoStringEntry(int maxsize) {
+ this(0, maxsize); // let other constructor do most of the work
+ }
+
+ RecnoStringEntry(int value, int maxsize) {
+ arr = new byte[maxsize];
+ setData(arr); // use our local array for data
+ setUserBuffer(maxsize, true);
+ setRecordNumber(value);
+ }
+
+ RecnoStringEntry(String value) {
+ byte[] data = value.getBytes();
+ setData(data); // use our local array for data
+ setUserBuffer(data.length, true);
+ }
+
+ void setString(String value) {
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
+ }
+
+ String getString() {
+ return new String(getData(), getOffset(), getSize());
+ }
+
+ byte[] arr;
+ }
+}
diff --git a/db/examples_java/src/db/BulkAccessExample.java b/db/examples_java/src/db/BulkAccessExample.java
new file mode 100644
index 000000000..ec6f2e51d
--- /dev/null
+++ b/db/examples_java/src/db/BulkAccessExample.java
@@ -0,0 +1,162 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: BulkAccessExample.java,v 12.5 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+class BulkAccessExample {
+ private static final String FileName = "access.db";
+
+ public BulkAccessExample() {
+ }
+
+ public static void main(String[] argv) {
+ try {
+ BulkAccessExample app = new BulkAccessExample();
+ app.run();
+ } catch (DatabaseException dbe) {
+ System.err.println("BulkAccessExample: " + dbe.toString());
+ System.exit(1);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println("BulkAccessExample: " + fnfe.toString());
+ System.exit(1);
+ }
+ System.exit(0);
+ }
+
+ // Prompts for a line, and keeps prompting until a non blank
+ // line is returned. Returns null on error.
+ //
+ public static 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;
+ }
+
+ // Not terribly 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.
+ //
+ public static 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();
+ }
+
+ public void run() throws DatabaseException, FileNotFoundException {
+ // Remove the previous database.
+ new File(FileName).delete();
+
+ // Create the database object.
+ // There is no environment for this simple example.
+ DatabaseConfig config = new DatabaseConfig();
+ config.setErrorStream(System.err);
+ config.setErrorPrefix("BulkAccessExample");
+ config.setType(DatabaseType.BTREE);
+ config.setAllowCreate(true);
+ config.setMode(0644);
+ Database table = new Database(FileName, null, config);
+
+ //
+ // Insert records into the database, where the key is the user
+ // input and the data is the user input in reverse order.
+ //
+ InputStreamReader reader = new InputStreamReader(System.in);
+
+ for (;;) {
+ String line = askForLine(reader, System.out, "input> ");
+ if (line == null)
+ break;
+
+ String reversed = (new StringBuffer(line)).reverse().toString();
+
+ // See definition of StringEntry below
+ //
+ StringEntry key = new StringEntry(line);
+ StringEntry data = new StringEntry(reversed);
+
+ try {
+ if (table.putNoOverwrite(null, key, data) == OperationStatus.KEYEXIST)
+ System.out.println("Key " + line + " already exists.");
+ } catch (DatabaseException dbe) {
+ System.out.println(dbe.toString());
+ }
+ System.out.println("");
+ }
+
+ // Acquire a cursor for the table.
+ Cursor cursor = table.openCursor(null, null);
+ DatabaseEntry foo = new DatabaseEntry();
+
+ MultipleKeyDataEntry bulk_data = new MultipleKeyDataEntry();
+ bulk_data.setData(new byte[1024 * 1024]);
+ bulk_data.setUserBuffer(1024 * 1024, true);
+
+ // Walk through the table, printing the key/data pairs.
+ //
+ while (cursor.getNext(foo, bulk_data, null) == OperationStatus.SUCCESS) {
+ StringEntry key, data;
+ key = new StringEntry();
+ data = new StringEntry();
+
+ while (bulk_data.next(key, data))
+ System.out.println(key.getString() + " : " + data.getString());
+ }
+ cursor.close();
+ table.close();
+ }
+
+ // Here's an example of how you can extend DatabaseEntry in a
+ // straightforward way to allow easy storage/retrieval of strings, or
+ // whatever kind of data you wish. We've declared it as a static inner
+ // class, but it need not be.
+ //
+ static class StringEntry extends DatabaseEntry {
+ StringEntry() {
+ }
+
+ StringEntry(String value) {
+ setString(value);
+ }
+
+ void setString(String value) {
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
+ }
+
+ String getString() {
+ return new String(getData(), getOffset(), getSize());
+ }
+ }
+}
diff --git a/db/examples_java/src/db/BulkAccessNIOExample.java b/db/examples_java/src/db/BulkAccessNIOExample.java
new file mode 100644
index 000000000..800d8cc2b
--- /dev/null
+++ b/db/examples_java/src/db/BulkAccessNIOExample.java
@@ -0,0 +1,182 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: BulkAccessNIOExample.java,v 1.4 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.nio.ByteBuffer;
+
+class BulkAccessNIOExample {
+ private static final String FileName = "access.db";
+
+ public BulkAccessNIOExample() {
+ }
+
+ public static void main(String[] argv) {
+ try {
+ BulkAccessNIOExample app = new BulkAccessNIOExample();
+ app.run();
+ } catch (DatabaseException dbe) {
+ System.err.println("BulkAccessNIOExample: " + dbe.toString());
+ System.exit(1);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println("BulkAccessNIOExample: " + fnfe.toString());
+ System.exit(1);
+ }
+ System.exit(0);
+ }
+
+ // Prompts for a line, and keeps prompting until a non blank
+ // line is returned. Returns null on error.
+ //
+ public static 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;
+ }
+
+ // Not terribly 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.
+ //
+ public static 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();
+ }
+
+ public void run() throws DatabaseException, FileNotFoundException {
+ // Remove the previous database.
+ new File(FileName).delete();
+
+ // Create the database object.
+ // There is no environment for this simple example.
+ DatabaseConfig config = new DatabaseConfig();
+ config.setErrorStream(System.err);
+ config.setErrorPrefix("BulkAccessNIOExample");
+ config.setType(DatabaseType.BTREE);
+ config.setAllowCreate(true);
+ config.setMode(0644);
+ Database table = new Database(FileName, null, config);
+
+ //
+ // Insert records into the database, where the key is the user
+ // input and the data is the user input in reverse order.
+ //
+ InputStreamReader reader = new InputStreamReader(System.in);
+
+ for (;;) {
+ String line = askForLine(reader, System.out, "input> ");
+ if (line == null || (line.compareToIgnoreCase("end") == 0))
+ break;
+
+ String reversed = (new StringBuffer(line)).reverse().toString();
+
+ // See definition of StringEntry below
+ //
+ StringEntry key = new StringEntry(line, true);
+ StringEntry data = new StringEntry(reversed, true);
+
+ try {
+ if (table.putNoOverwrite(null, key, data) == OperationStatus.KEYEXIST)
+ System.out.println("Key " + line + " already exists.");
+ } catch (DatabaseException dbe) {
+ System.out.println(dbe.toString());
+ }
+ }
+
+ // Acquire a cursor for the table.
+ Cursor cursor = table.openCursor(null, null);
+ DatabaseEntry foo = new DatabaseEntry();
+
+ MultipleKeyNIODataEntry bulk_data = new MultipleKeyNIODataEntry();
+
+ ByteBuffer rawData = ByteBuffer.allocateDirect(1024*1024);
+ bulk_data.setDataNIO(rawData);
+ bulk_data.setUserBuffer(1024 * 1024, true);
+
+ // Walk through the table, printing the key/data pairs.
+ //
+ while (cursor.getNext(foo, bulk_data, null) == OperationStatus.SUCCESS) {
+ StringEntry key, data;
+ key = new StringEntry();
+ data = new StringEntry();
+
+ while (bulk_data.next(key, data))
+ System.out.println(key.getString() + " : " + data.getString());
+ }
+ cursor.close();
+ table.close();
+ }
+
+ // Here's an example of how you can extend DatabaseEntry in a
+ // straightforward way to allow easy storage/retrieval of strings, or
+ // whatever kind of data you wish. We've declared it as a static inner
+ // class, but it need not be.
+ //
+ static class StringEntry extends DatabaseEntry {
+ StringEntry() {
+ }
+
+ StringEntry(String value, boolean nioData) {
+ setString(value, nioData);
+ }
+
+ void setString(String value, boolean nioData) {
+ byte[] data = value.getBytes();
+ if(nioData) {
+ ByteBuffer newBuf = ByteBuffer.allocateDirect(data.length);
+ newBuf.position(0);
+ newBuf.put(data, 0, data.length);
+ setDataNIO(newBuf);
+ setSize(data.length);
+ } else {
+ setData(data);
+ setSize(data.length);
+ }
+ }
+
+ String getString() {
+ String ret;
+ if(getData() == null) {
+ ByteBuffer tmp = getDataNIO();
+ tmp.position(getOffset());
+ byte[] data = new byte[getSize()];
+ tmp.get(data, 0, getSize());
+ ret = new String(data, 0, getSize());
+ } else {
+ ret = new String(getData(), getOffset(), getSize());
+ }
+ return ret;
+ }
+ }
+}
diff --git a/db/examples_java/src/db/EnvExample.java b/db/examples_java/src/db/EnvExample.java
new file mode 100644
index 000000000..83e90618b
--- /dev/null
+++ b/db/examples_java/src/db/EnvExample.java
@@ -0,0 +1,116 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: EnvExample.java,v 12.4 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.OutputStream;
+
+/*
+ * An example of a program configuring a database environment.
+ *
+ * For comparison purposes, this example uses a similar structure
+ * as examples/ex_env.c and examples_cxx/EnvExample.cpp.
+ */
+public class EnvExample {
+ private static final String progname = "EnvExample";
+ private static final File DATABASE_HOME = new File("/tmp/database");
+
+ private static void runApplication(Environment dbenv)
+ throws DatabaseException {
+
+ // Do something interesting...
+ // Your application goes here.
+ }
+
+ private static void setupEnvironment(File home,
+ String dataDir,
+ OutputStream errs)
+ throws DatabaseException, FileNotFoundException {
+
+ // Create an environment object and initialize it for error reporting.
+ EnvironmentConfig config = new EnvironmentConfig();
+ config.setErrorStream(errs);
+ config.setErrorPrefix(progname);
+
+ //
+ // We want to specify the shared memory buffer pool cachesize,
+ // but everything else is the default.
+ //
+ config.setCacheSize(64 * 1024);
+
+ // Databases are in a separate directory.
+ config.addDataDir(dataDir);
+
+ // Open the environment with full transactional support.
+ config.setAllowCreate(true);
+ config.setInitializeCache(true);
+ config.setTransactional(true);
+ config.setInitializeLocking(true);
+
+ //
+ // open is declared to throw a FileNotFoundException, which normally
+ // shouldn't occur when allowCreate is set.
+ //
+ Environment dbenv = new Environment(home, config);
+
+ try {
+ // Start your application.
+ runApplication(dbenv);
+ } finally {
+ // Close the environment. Doing this in the finally block ensures
+ // it is done, even if an error is thrown.
+ dbenv.close();
+ }
+ }
+
+ private static void teardownEnvironment(File home,
+ String dataDir,
+ OutputStream errs)
+ throws DatabaseException, FileNotFoundException {
+
+ // Remove the shared database regions.
+ EnvironmentConfig config = new EnvironmentConfig();
+
+ config.setErrorStream(errs);
+ config.setErrorPrefix(progname);
+ config.addDataDir(dataDir);
+ Environment.remove(home, true, config);
+ }
+
+ public static void main(String[] args) {
+ //
+ // All of the shared database files live in /tmp/database,
+ // but data files live in /database/files.
+ //
+ // Using Berkeley DB in C/C++, we need to allocate two elements
+ // in the array and set config[1] to NULL. This is not
+ // necessary in Java.
+ //
+ File home = DATABASE_HOME;
+ String dataDir = "/database/files";
+
+ try {
+ System.out.println("Setup env");
+ setupEnvironment(home, dataDir, System.err);
+
+ System.out.println("Teardown env");
+ teardownEnvironment(home, dataDir, System.err);
+ } catch (DatabaseException dbe) {
+ System.err.println(progname + ": environment open: " + dbe.toString());
+ System.exit (1);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(progname + ": unexpected open environment error " + fnfe);
+ System.exit (1);
+ }
+ }
+
+}
diff --git a/db/examples_java/src/db/GettingStarted/ExampleDatabaseLoad.java b/db/examples_java/src/db/GettingStarted/ExampleDatabaseLoad.java
new file mode 100644
index 000000000..d38b0da29
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/ExampleDatabaseLoad.java
@@ -0,0 +1,223 @@
+// File: ExampleDatabaseLoad.java
+
+package db.GettingStarted;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+
+public class ExampleDatabaseLoad {
+
+ private static String myDbsPath = "./";
+ private static File inventoryFile = new File("./inventory.txt");
+ private static File vendorsFile = new File("./vendors.txt");
+
+ // DatabaseEntries used for loading records
+ private static DatabaseEntry theKey = new DatabaseEntry();
+ private static DatabaseEntry theData = new DatabaseEntry();
+
+ // Encapsulates the databases.
+ private static MyDbs myDbs = new MyDbs();
+
+ private static void usage() {
+ System.out.println("ExampleDatabaseLoad [-h <database home>]");
+ System.out.println(" [-s <selections file>] [-v <vendors file>]");
+ System.exit(-1);
+ }
+
+
+ public static void main(String args[]) {
+ ExampleDatabaseLoad edl = new ExampleDatabaseLoad();
+ try {
+ edl.run(args);
+ } catch (DatabaseException dbe) {
+ System.err.println("ExampleDatabaseLoad: " + dbe.toString());
+ dbe.printStackTrace();
+ } catch (Exception e) {
+ System.out.println("Exception: " + e.toString());
+ e.printStackTrace();
+ } finally {
+ myDbs.close();
+ }
+ System.out.println("All done.");
+ }
+
+
+ private void run(String args[])
+ throws DatabaseException {
+ // Parse the arguments list
+ parseArgs(args);
+
+ myDbs.setup(myDbsPath);
+
+ System.out.println("loading vendors db....");
+ loadVendorsDb();
+
+ System.out.println("loading inventory db....");
+ loadInventoryDb();
+ }
+
+
+ private void loadVendorsDb()
+ throws DatabaseException {
+
+ // loadFile opens a flat-text file that contains our data
+ // and loads it into a list for us to work with. The integer
+ // parameter represents the number of fields expected in the
+ // file.
+ List vendors = loadFile(vendorsFile, 8);
+
+ // Now load the data into the database. The vendor's name is the
+ // key, and the data is a Vendor class object.
+
+ // Need a serial binding for the data
+ EntryBinding dataBinding =
+ new SerialBinding(myDbs.getClassCatalog(), Vendor.class);
+
+ for (int i = 0; i < vendors.size(); i++) {
+ String[] sArray = (String[])vendors.get(i);
+ Vendor theVendor = new Vendor();
+ theVendor.setVendorName(sArray[0]);
+ theVendor.setAddress(sArray[1]);
+ theVendor.setCity(sArray[2]);
+ theVendor.setState(sArray[3]);
+ theVendor.setZipcode(sArray[4]);
+ theVendor.setBusinessPhoneNumber(sArray[5]);
+ theVendor.setRepName(sArray[6]);
+ theVendor.setRepPhoneNumber(sArray[7]);
+
+ // The key is the vendor's name.
+ // ASSUMES THE VENDOR'S NAME IS UNIQUE!
+ String vendorName = theVendor.getVendorName();
+ try {
+ theKey = new DatabaseEntry(vendorName.getBytes("UTF-8"));
+ } catch (IOException willNeverOccur) {}
+
+ // Convert the Vendor object to a DatabaseEntry object
+ // using our SerialBinding
+ dataBinding.objectToEntry(theVendor, theData);
+
+ // Put it in the database.
+ myDbs.getVendorDB().put(null, theKey, theData);
+ }
+ }
+
+
+ private void loadInventoryDb()
+ throws DatabaseException {
+
+ // loadFile opens a flat-text file that contains our data
+ // and loads it into a list for us to work with. The integer
+ // parameter represents the number of fields expected in the
+ // file.
+ List inventoryArray = loadFile(inventoryFile, 6);
+
+ // Now load the data into the database. The item's sku is the
+ // key, and the data is an Inventory class object.
+
+ // Need a tuple binding for the Inventory class.
+ TupleBinding inventoryBinding = new InventoryBinding();
+
+ for (int i = 0; i < inventoryArray.size(); i++) {
+ String[] sArray = (String[])inventoryArray.get(i);
+ String sku = sArray[1];
+ try {
+ theKey = new DatabaseEntry(sku.getBytes("UTF-8"));
+ } catch (IOException willNeverOccur) {}
+
+ Inventory theInventory = new Inventory();
+ theInventory.setItemName(sArray[0]);
+ theInventory.setSku(sArray[1]);
+ theInventory.setVendorPrice((new Float(sArray[2])).floatValue());
+ theInventory.setVendorInventory((new Integer(sArray[3])).intValue());
+ theInventory.setCategory(sArray[4]);
+ theInventory.setVendor(sArray[5]);
+
+ // Place the Vendor object on the DatabaseEntry object using our
+ // the tuple binding we implemented in InventoryBinding.java
+ inventoryBinding.objectToEntry(theInventory, theData);
+
+ // Put it in the database. Note that this causes our secondary database
+ // to be automatically updated for us.
+ myDbs.getInventoryDB().put(null, theKey, theData);
+ }
+ }
+
+
+ private static void parseArgs(String args[]) {
+ for(int i = 0; i < args.length; ++i) {
+ if (args[i].startsWith("-")) {
+ switch(args[i].charAt(1)) {
+ case 'h':
+ myDbsPath = new String(args[++i]);
+ break;
+ case 'i':
+ inventoryFile = new File(args[++i]);
+ break;
+ case 'v':
+ vendorsFile = new File(args[++i]);
+ break;
+ default:
+ usage();
+ }
+ }
+ }
+ }
+
+
+ private List loadFile(File theFile, int numFields) {
+ List records = new ArrayList();
+ try {
+ String theLine = null;
+ FileInputStream fis = new FileInputStream(theFile);
+ BufferedReader br = new BufferedReader(new InputStreamReader(fis));
+ while((theLine=br.readLine()) != null) {
+ String[] theLineArray = splitString(theLine, "#");
+ if (theLineArray.length != numFields) {
+ System.out.println("Malformed line found in " + theFile.getPath());
+ System.out.println("Line was: '" + theLine);
+ System.out.println("length found was: " + theLineArray.length);
+ System.exit(-1);
+ }
+ records.add(theLineArray);
+ }
+ fis.close();
+ } catch (FileNotFoundException e) {
+ System.err.println(theFile.getPath() + " does not exist.");
+ e.printStackTrace();
+ usage();
+ } catch (IOException e) {
+ System.err.println("IO Exception: " + e.toString());
+ e.printStackTrace();
+ System.exit(-1);
+ }
+ return records;
+ }
+
+
+ private static String[] splitString(String s, String delimiter) {
+ Vector resultVector = new Vector();
+ StringTokenizer tokenizer = new StringTokenizer(s, delimiter);
+ while (tokenizer.hasMoreTokens())
+ resultVector.add(tokenizer.nextToken());
+ String[] resultArray = new String[resultVector.size()];
+ resultVector.copyInto(resultArray);
+ return resultArray;
+ }
+
+
+ protected ExampleDatabaseLoad() {}
+}
diff --git a/db/examples_java/src/db/GettingStarted/ExampleDatabaseRead.java b/db/examples_java/src/db/GettingStarted/ExampleDatabaseRead.java
new file mode 100644
index 000000000..7fc4a0bc9
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/ExampleDatabaseRead.java
@@ -0,0 +1,197 @@
+// File: ExampleDatabaseRead
+
+package db.GettingStarted;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.db.SecondaryCursor;
+
+import java.io.IOException;
+
+public class ExampleDatabaseRead {
+
+ private static String myDbsPath = "./";
+
+ // Encapsulates the database environment and databases.
+ private static MyDbs myDbs = new MyDbs();
+
+ private static TupleBinding inventoryBinding;
+ private static EntryBinding vendorBinding;
+
+ // The item to locate if the -s switch is used
+ private static String locateItem;
+
+ private static void usage() {
+ System.out.println("ExampleDatabaseRead [-h <env directory>]" +
+ "[-s <item to locate>]");
+ System.exit(-1);
+ }
+
+ public static void main(String args[]) {
+ ExampleDatabaseRead edr = new ExampleDatabaseRead();
+ try {
+ edr.run(args);
+ } catch (DatabaseException dbe) {
+ System.err.println("ExampleDatabaseRead: " + dbe.toString());
+ dbe.printStackTrace();
+ } finally {
+ myDbs.close();
+ }
+ System.out.println("All done.");
+ }
+
+ private void run(String args[])
+ throws DatabaseException {
+ // Parse the arguments list
+ parseArgs(args);
+
+ myDbs.setup(myDbsPath);
+
+ // Setup our bindings.
+ inventoryBinding = new InventoryBinding();
+ vendorBinding =
+ new SerialBinding(myDbs.getClassCatalog(),
+ Vendor.class);
+
+ if (locateItem != null) {
+ showItem();
+ } else {
+ showAllInventory();
+ }
+ }
+
+ private void showItem() throws DatabaseException {
+
+ SecondaryCursor secCursor = null;
+ try {
+ // searchKey is the key that we want to find in the
+ // secondary db.
+ DatabaseEntry searchKey =
+ new DatabaseEntry(locateItem.getBytes("UTF-8"));
+
+ // foundKey and foundData are populated from the primary
+ // entry that is associated with the secondary db key.
+ DatabaseEntry foundKey = new DatabaseEntry();
+ DatabaseEntry foundData = new DatabaseEntry();
+
+ // open a secondary cursor
+ secCursor =
+ myDbs.getNameIndexDB().openSecondaryCursor(null, null);
+
+ // Search for the secondary database entry.
+ OperationStatus retVal =
+ secCursor.getSearchKey(searchKey, foundKey,
+ foundData, LockMode.DEFAULT);
+
+ // Display the entry, if one is found. Repeat until no more
+ // secondary duplicate entries are found
+ while(retVal == OperationStatus.SUCCESS) {
+ Inventory theInventory =
+ (Inventory)inventoryBinding.entryToObject(foundData);
+ displayInventoryRecord(foundKey, theInventory);
+ retVal = secCursor.getNextDup(searchKey, foundKey,
+ foundData, LockMode.DEFAULT);
+ }
+ } catch (Exception e) {
+ System.err.println("Error on inventory secondary cursor:");
+ System.err.println(e.toString());
+ e.printStackTrace();
+ } finally {
+ if (secCursor != null) {
+ secCursor.close();
+ }
+ }
+ }
+
+ private void showAllInventory()
+ throws DatabaseException {
+ // Get a cursor
+ Cursor cursor = myDbs.getInventoryDB().openCursor(null, null);
+
+ // DatabaseEntry objects used for reading records
+ DatabaseEntry foundKey = new DatabaseEntry();
+ DatabaseEntry foundData = new DatabaseEntry();
+
+ try { // always want to make sure the cursor gets closed
+ while (cursor.getNext(foundKey, foundData,
+ LockMode.DEFAULT) == OperationStatus.SUCCESS) {
+ Inventory theInventory =
+ (Inventory)inventoryBinding.entryToObject(foundData);
+ displayInventoryRecord(foundKey, theInventory);
+ }
+ } catch (Exception e) {
+ System.err.println("Error on inventory cursor:");
+ System.err.println(e.toString());
+ e.printStackTrace();
+ } finally {
+ cursor.close();
+ }
+ }
+
+ private void displayInventoryRecord(DatabaseEntry theKey,
+ Inventory theInventory)
+ throws DatabaseException {
+
+ String theSKU = new String(theKey.getData());
+ System.out.println(theSKU + ":");
+ System.out.println("\t " + theInventory.getItemName());
+ System.out.println("\t " + theInventory.getCategory());
+ System.out.println("\t " + theInventory.getVendor());
+ System.out.println("\t\tNumber in stock: " +
+ theInventory.getVendorInventory());
+ System.out.println("\t\tPrice per unit: " +
+ theInventory.getVendorPrice());
+ System.out.println("\t\tContact: ");
+
+ DatabaseEntry searchKey = null;
+ try {
+ searchKey =
+ new DatabaseEntry(theInventory.getVendor().getBytes("UTF-8"));
+ } catch (IOException willNeverOccur) {}
+ DatabaseEntry foundVendor = new DatabaseEntry();
+
+ if (myDbs.getVendorDB().get(null, searchKey, foundVendor,
+ LockMode.DEFAULT) != OperationStatus.SUCCESS) {
+ System.out.println("Could not find vendor: " +
+ theInventory.getVendor() + ".");
+ System.exit(-1);
+ } else {
+ Vendor theVendor =
+ (Vendor)vendorBinding.entryToObject(foundVendor);
+ System.out.println("\t\t " + theVendor.getAddress());
+ System.out.println("\t\t " + theVendor.getCity() + ", " +
+ theVendor.getState() + " " + theVendor.getZipcode());
+ System.out.println("\t\t Business Phone: " +
+ theVendor.getBusinessPhoneNumber());
+ System.out.println("\t\t Sales Rep: " +
+ theVendor.getRepName());
+ System.out.println("\t\t " +
+ theVendor.getRepPhoneNumber());
+ }
+ }
+
+ protected ExampleDatabaseRead() {}
+
+ private static void parseArgs(String args[]) {
+ for(int i = 0; i < args.length; ++i) {
+ if (args[i].startsWith("-")) {
+ switch(args[i].charAt(1)) {
+ case 'h':
+ myDbsPath = new String(args[++i]);
+ break;
+ case 's':
+ locateItem = new String(args[++i]);
+ break;
+ default:
+ usage();
+ }
+ }
+ }
+ }
+}
diff --git a/db/examples_java/src/db/GettingStarted/Inventory.java b/db/examples_java/src/db/GettingStarted/Inventory.java
new file mode 100644
index 000000000..0fd73646c
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/Inventory.java
@@ -0,0 +1,62 @@
+// File: Inventory.java
+
+package db.GettingStarted;
+
+public class Inventory {
+
+ private String sku;
+ private String itemName;
+ private String category;
+ private String vendor;
+ private int vendorInventory;
+ private float vendorPrice;
+
+ public void setSku(String data) {
+ sku = data;
+ }
+
+ public void setItemName(String data) {
+ itemName = data;
+ }
+
+ public void setCategory(String data) {
+ category = data;
+ }
+
+ public void setVendorInventory(int data) {
+ vendorInventory = data;
+ }
+
+ public void setVendor(String data) {
+ vendor = data;
+ }
+
+ public void setVendorPrice(float data) {
+ vendorPrice = data;
+ }
+
+ public String getSku() {
+ return sku;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public int getVendorInventory() {
+ return vendorInventory;
+ }
+
+ public String getVendor() {
+ return vendor;
+ }
+
+ public float getVendorPrice() {
+ return vendorPrice;
+ }
+}
+
diff --git a/db/examples_java/src/db/GettingStarted/InventoryBinding.java b/db/examples_java/src/db/GettingStarted/InventoryBinding.java
new file mode 100644
index 000000000..c3b83d8f1
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/InventoryBinding.java
@@ -0,0 +1,46 @@
+// File: InventoryBinding.java
+
+package db.GettingStarted;
+
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.bind.tuple.TupleInput;
+import com.sleepycat.bind.tuple.TupleOutput;
+
+public class InventoryBinding extends TupleBinding {
+
+ // Implement this abstract method. Used to convert
+ // a DatabaseEntry to an Inventory object.
+ public Object entryToObject(TupleInput ti) {
+
+ String sku = ti.readString();
+ String itemName = ti.readString();
+ String category = ti.readString();
+ String vendor = ti.readString();
+ int vendorInventory = ti.readInt();
+ float vendorPrice = ti.readFloat();
+
+ Inventory inventory = new Inventory();
+ inventory.setSku(sku);
+ inventory.setItemName(itemName);
+ inventory.setCategory(category);
+ inventory.setVendor(vendor);
+ inventory.setVendorInventory(vendorInventory);
+ inventory.setVendorPrice(vendorPrice);
+
+ return inventory;
+ }
+
+ // Implement this abstract method. Used to convert a
+ // Inventory object to a DatabaseEntry object.
+ public void objectToEntry(Object object, TupleOutput to) {
+
+ Inventory inventory = (Inventory)object;
+
+ to.writeString(inventory.getSku());
+ to.writeString(inventory.getItemName());
+ to.writeString(inventory.getCategory());
+ to.writeString(inventory.getVendor());
+ to.writeInt(inventory.getVendorInventory());
+ to.writeFloat(inventory.getVendorPrice());
+ }
+}
diff --git a/db/examples_java/src/db/GettingStarted/ItemNameKeyCreator.java b/db/examples_java/src/db/GettingStarted/ItemNameKeyCreator.java
new file mode 100644
index 000000000..587b47e47
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/ItemNameKeyCreator.java
@@ -0,0 +1,37 @@
+// File: ItemNameKeyCreator.java
+
+package db.GettingStarted;
+
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.db.SecondaryKeyCreator;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.SecondaryDatabase;
+
+public class ItemNameKeyCreator implements SecondaryKeyCreator {
+
+ private TupleBinding theBinding;
+
+ // Use the constructor to set the tuple binding
+ ItemNameKeyCreator(TupleBinding binding) {
+ theBinding = binding;
+ }
+
+ // Abstract method that we must implement
+ public boolean createSecondaryKey(SecondaryDatabase secDb,
+ DatabaseEntry keyEntry, // From the primary
+ DatabaseEntry dataEntry, // From the primary
+ DatabaseEntry resultEntry) // set the key data on this.
+ throws DatabaseException {
+
+ if (dataEntry != null) {
+ // Convert dataEntry to an Inventory object
+ Inventory inventoryItem =
+ (Inventory)theBinding.entryToObject(dataEntry);
+ // Get the item name and use that as the key
+ String theItem = inventoryItem.getItemName();
+ resultEntry.setData(theItem.getBytes());
+ }
+ return true;
+ }
+}
diff --git a/db/examples_java/src/db/GettingStarted/MyDbs.java b/db/examples_java/src/db/GettingStarted/MyDbs.java
new file mode 100644
index 000000000..fa966a0d6
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/MyDbs.java
@@ -0,0 +1,157 @@
+// File: MyDbs.java
+
+package db.GettingStarted;
+
+import java.io.FileNotFoundException;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.SecondaryConfig;
+import com.sleepycat.db.SecondaryDatabase;
+
+
+public class MyDbs {
+
+ // The databases that our application uses
+ private Database vendorDb = null;
+ private Database inventoryDb = null;
+ private Database classCatalogDb = null;
+ private SecondaryDatabase itemNameIndexDb = null;
+
+ private String vendordb = "VendorDB.db";
+ private String inventorydb = "InventoryDB.db";
+ private String classcatalogdb = "ClassCatalogDB.db";
+ private String itemnameindexdb = "ItemNameIndexDB.db";
+
+ // Needed for object serialization
+ private StoredClassCatalog classCatalog;
+
+ // Our constructor does nothing
+ public MyDbs() {}
+
+ // The setup() method opens all our databases
+ // for us.
+ public void setup(String databasesHome)
+ throws DatabaseException {
+
+ DatabaseConfig myDbConfig = new DatabaseConfig();
+ SecondaryConfig mySecConfig = new SecondaryConfig();
+
+ myDbConfig.setErrorStream(System.err);
+ mySecConfig.setErrorStream(System.err);
+ myDbConfig.setErrorPrefix("MyDbs");
+ mySecConfig.setErrorPrefix("MyDbs");
+ myDbConfig.setType(DatabaseType.BTREE);
+ mySecConfig.setType(DatabaseType.BTREE);
+ myDbConfig.setAllowCreate(true);
+ mySecConfig.setAllowCreate(true);
+
+ // Now open, or create and open, our databases
+ // Open the vendors and inventory databases
+ try {
+ vendordb = databasesHome + "/" + vendordb;
+ vendorDb = new Database(vendordb,
+ null,
+ myDbConfig);
+
+ inventorydb = databasesHome + "/" + inventorydb;
+ inventoryDb = new Database(inventorydb,
+ null,
+ myDbConfig);
+
+ // Open the class catalog db. This is used to
+ // optimize class serialization.
+ classcatalogdb = databasesHome + "/" + classcatalogdb;
+ classCatalogDb = new Database(classcatalogdb,
+ null,
+ myDbConfig);
+ } catch(FileNotFoundException fnfe) {
+ System.err.println("MyDbs: " + fnfe.toString());
+ System.exit(-1);
+ }
+
+ // Create our class catalog
+ classCatalog = new StoredClassCatalog(classCatalogDb);
+
+ // Need a tuple binding for the Inventory class.
+ // We use the InventoryBinding class
+ // that we implemented for this purpose.
+ TupleBinding inventoryBinding = new InventoryBinding();
+
+ // Open the secondary database. We use this to create a
+ // secondary index for the inventory database
+
+ // We want to maintain an index for the inventory entries based
+ // on the item name. So, instantiate the appropriate key creator
+ // and open a secondary database.
+ ItemNameKeyCreator keyCreator =
+ new ItemNameKeyCreator(new InventoryBinding());
+
+
+ // Set up additional secondary properties
+ // Need to allow duplicates for our secondary database
+ mySecConfig.setSortedDuplicates(true);
+ mySecConfig.setAllowPopulate(true); // Allow autopopulate
+ mySecConfig.setKeyCreator(keyCreator);
+
+ // Now open it
+ try {
+ itemnameindexdb = databasesHome + "/" + itemnameindexdb;
+ itemNameIndexDb = new SecondaryDatabase(itemnameindexdb,
+ null,
+ inventoryDb,
+ mySecConfig);
+ } catch(FileNotFoundException fnfe) {
+ System.err.println("MyDbs: " + fnfe.toString());
+ System.exit(-1);
+ }
+ }
+
+ // getter methods
+ public Database getVendorDB() {
+ return vendorDb;
+ }
+
+ public Database getInventoryDB() {
+ return inventoryDb;
+ }
+
+ public SecondaryDatabase getNameIndexDB() {
+ return itemNameIndexDb;
+ }
+
+ public StoredClassCatalog getClassCatalog() {
+ return classCatalog;
+ }
+
+ // Close the databases
+ public void close() {
+ try {
+ if (itemNameIndexDb != null) {
+ itemNameIndexDb.close();
+ }
+
+ if (vendorDb != null) {
+ vendorDb.close();
+ }
+
+ if (inventoryDb != null) {
+ inventoryDb.close();
+ }
+
+ if (classCatalogDb != null) {
+ classCatalogDb.close();
+ }
+
+ } catch(DatabaseException dbe) {
+ System.err.println("Error closing MyDbs: " +
+ dbe.toString());
+ System.exit(-1);
+ }
+ }
+}
+
diff --git a/db/examples_java/src/db/GettingStarted/Vendor.java b/db/examples_java/src/db/GettingStarted/Vendor.java
new file mode 100644
index 000000000..1a8fdb784
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/Vendor.java
@@ -0,0 +1,82 @@
+// File: Vendor.java
+package db.GettingStarted;
+
+import java.io.Serializable;
+
+public class Vendor implements Serializable {
+
+ private String repName;
+ private String address;
+ private String city;
+ private String state;
+ private String zipcode;
+ private String bizPhoneNumber;
+ private String repPhoneNumber;
+ private String vendor;
+
+ public void setRepName(String data) {
+ repName = data;
+ }
+
+ public void setAddress(String data) {
+ address = data;
+ }
+
+ public void setCity(String data) {
+ city = data;
+ }
+
+ public void setState(String data) {
+ state = data;
+ }
+
+ public void setZipcode(String data) {
+ zipcode = data;
+ }
+
+ public void setBusinessPhoneNumber(String data) {
+ bizPhoneNumber = data;
+ }
+
+ public void setRepPhoneNumber(String data) {
+ repPhoneNumber = data;
+ }
+
+ public void setVendorName(String data) {
+ vendor = data;
+ }
+
+ public String getRepName() {
+ return repName;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public String getZipcode() {
+ return zipcode;
+ }
+
+ public String getBusinessPhoneNumber() {
+ return bizPhoneNumber;
+ }
+
+ public String getRepPhoneNumber() {
+ return repPhoneNumber;
+ }
+
+ public String getVendorName() {
+ return vendor;
+ }
+
+}
+
diff --git a/db/examples_java/src/db/GettingStarted/inventory.txt b/db/examples_java/src/db/GettingStarted/inventory.txt
new file mode 100644
index 000000000..d6b68762c
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/inventory.txt
@@ -0,0 +1,800 @@
+Oranges#OranfruiRu6Ghr#0.71#451#fruits#TriCounty Produce
+Oranges#OranfruiXRPFn1#0.73#263#fruits#Simply Fresh
+Oranges#OranfruiLEuzQj#0.69#261#fruits#Off the Vine
+Apples#ApplfruiZls4Du#1.20#472#fruits#TriCounty Produce
+Apples#Applfrui8fewZe#1.21#402#fruits#Simply Fresh
+Apples#ApplfruiXoT6xG#1.20#728#fruits#Off the Vine
+Bananas#BanafruipIlluX#0.50#207#fruits#TriCounty Produce
+Bananas#BanafruiEQhWuj#0.50#518#fruits#Simply Fresh
+Bananas#BanafruimpRgPO#0.50#741#fruits#Off the Vine
+Almonds#AlmofruiPPCLz8#0.55#600#fruits#TriCounty Produce
+Almonds#AlmofruidMyKmp#0.54#745#fruits#Simply Fresh
+Almonds#Almofrui7K0xzH#0.53#405#fruits#Off the Vine
+Allspice#AllsfruibJGK4R#0.94#669#fruits#TriCounty Produce
+Allspice#Allsfruilfvoeg#0.94#244#fruits#Simply Fresh
+Allspice#Allsfruio12BOS#0.95#739#fruits#Off the Vine
+Apricot#AprifruijphEpM#0.89#560#fruits#TriCounty Produce
+Apricot#AprifruiU1zIDn#0.91#980#fruits#Simply Fresh
+Apricot#AprifruichcwYS#0.95#668#fruits#Off the Vine
+Avocado#AvocfruiwYYomu#0.99#379#fruits#TriCounty Produce
+Avocado#AvocfruiT6IwWE#1.02#711#fruits#Simply Fresh
+Avocado#AvocfruisbK1h5#0.97#856#fruits#Off the Vine
+Bael Fruit#BaelfruilAU7Hj#0.41#833#fruits#TriCounty Produce
+Bael Fruit#BaelfruiX2KvqV#0.40#770#fruits#Simply Fresh
+Bael Fruit#Baelfruidjne4e#0.39#778#fruits#Off the Vine
+Betel Nut#BetefruiQYdHqQ#0.34#926#fruits#TriCounty Produce
+Betel Nut#Betefrui32BKAz#0.37#523#fruits#Simply Fresh
+Betel Nut#BetefruisaWzY4#0.34#510#fruits#Off the Vine
+Black Walnut#BlacfruiXxIuMU#0.57#923#fruits#TriCounty Produce
+Black Walnut#BlacfruiZXgY9t#0.59#312#fruits#Simply Fresh
+Black Walnut#BlacfruikWO0vz#0.60#877#fruits#Off the Vine
+Blueberry#BluefruiCbxb4t#1.02#276#fruits#TriCounty Produce
+Blueberry#BluefruiBuCfgO#1.03#522#fruits#Simply Fresh
+Blueberry#Bluefruixz8MkE#1.01#278#fruits#Off the Vine
+Boysenberry#BoysfruizxyMuz#1.05#239#fruits#TriCounty Produce
+Boysenberry#Boysfrui3hTRQu#1.09#628#fruits#Simply Fresh
+Boysenberry#BoysfruinpLvr3#1.02#349#fruits#Off the Vine
+Breadnut#Breafrui0kDPs6#0.31#558#fruits#TriCounty Produce
+Breadnut#Breafrui44s3og#0.32#879#fruits#Simply Fresh
+Breadnut#BreafruiwyLKhJ#0.30#407#fruits#Off the Vine
+Cactus#Cactfruiyo2ddH#0.56#601#fruits#TriCounty Produce
+Cactus#CactfruixTOLv5#0.54#477#fruits#Simply Fresh
+Cactus#Cactfrui4ioUav#0.55#896#fruits#Off the Vine
+California Wild Grape#CalifruiZsWAa6#0.78#693#fruits#TriCounty Produce
+California Wild Grape#Califruid84xyt#0.83#293#fruits#Simply Fresh
+California Wild Grape#CalifruiLSJFoJ#0.81#543#fruits#Off the Vine
+Cashew#CashfruihaOFVP#0.37#221#fruits#TriCounty Produce
+Cashew#Cashfruizzcw1E#0.38#825#fruits#Simply Fresh
+Cashew#CashfruiqtMe2Q#0.38#515#fruits#Off the Vine
+Chico Sapote#ChicfruiY534SX#0.47#216#fruits#TriCounty Produce
+Chico Sapote#ChicfruiSqL3Lc#0.45#476#fruits#Simply Fresh
+Chico Sapote#ChicfruiurzIp4#0.47#200#fruits#Off the Vine
+Chinese Jello#ChinfruiyRg75u#0.64#772#fruits#TriCounty Produce
+Chinese Jello#ChinfruiuIUj0X#0.65#624#fruits#Simply Fresh
+Chinese Jello#ChinfruiwXbRrL#0.67#719#fruits#Off the Vine
+Common Guava#Commfruib6znSI#0.80#483#fruits#TriCounty Produce
+Common Guava#Commfrui6eUivL#0.81#688#fruits#Simply Fresh
+Common Guava#CommfruibWKnz3#0.84#581#fruits#Off the Vine
+Crabapple#CrabfruioY2L63#0.94#582#fruits#TriCounty Produce
+Crabapple#Crabfruijxcxyt#0.94#278#fruits#Simply Fresh
+Crabapple#CrabfruibvWd8K#0.95#213#fruits#Off the Vine
+Cranberry#CranfruiJxmKr5#0.83#923#fruits#TriCounty Produce
+Cranberry#CranfruiPlklAF#0.84#434#fruits#Simply Fresh
+Cranberry#Cranfrui3G5XL9#0.84#880#fruits#Off the Vine
+Damson Plum#DamsfruibMRMwe#0.98#782#fruits#TriCounty Produce
+Damson Plum#DamsfruiV6wFLk#1.03#400#fruits#Simply Fresh
+Damson Plum#DamsfruiLhqFrQ#0.98#489#fruits#Off the Vine
+Date Palm#DatefruigS31GU#1.14#315#fruits#TriCounty Produce
+Date Palm#DatefruipKPaJK#1.09#588#fruits#Simply Fresh
+Date Palm#Datefrui5fTyNS#1.14#539#fruits#Off the Vine
+Dragon's Eye#DragfruirGJ3aI#0.28#315#fruits#TriCounty Produce
+Dragon's Eye#DragfruiBotxqt#0.27#705#fruits#Simply Fresh
+Dragon's Eye#DragfruiPsSnV9#0.29#482#fruits#Off the Vine
+East Indian Wine Palm#EastfruiNXFJuG#0.43#992#fruits#TriCounty Produce
+East Indian Wine Palm#Eastfruiq06fRr#0.40#990#fruits#Simply Fresh
+East Indian Wine Palm#Eastfrui4QUwl2#0.43#351#fruits#Off the Vine
+English Walnut#EnglfruiBMtHtW#1.04#787#fruits#TriCounty Produce
+English Walnut#EnglfruiHmVzxV#1.03#779#fruits#Simply Fresh
+English Walnut#Englfrui18Tc9n#1.06#339#fruits#Off the Vine
+False Mangosteen#FalsfruibkmYqH#0.66#971#fruits#TriCounty Produce
+False Mangosteen#FalsfruipBsbcX#0.68#250#fruits#Simply Fresh
+False Mangosteen#FalsfruiPrFfhe#0.70#386#fruits#Off the Vine
+Fried Egg Tree#FriefruiihHUdc#0.29#649#fruits#TriCounty Produce
+Fried Egg Tree#FriefruimdD1rf#0.28#527#fruits#Simply Fresh
+Fried Egg Tree#FriefruivyAzYq#0.29#332#fruits#Off the Vine
+Genipap#GenifruiDtKusQ#0.62#986#fruits#TriCounty Produce
+Genipap#GenifruiXq32eP#0.61#326#fruits#Simply Fresh
+Genipap#Genifruiphwwyq#0.61#794#fruits#Off the Vine
+Ginger#GingfruiQLbRZI#0.28#841#fruits#TriCounty Produce
+Ginger#GingfruiS8kK4p#0.29#432#fruits#Simply Fresh
+Ginger#GingfruioL3Y4S#0.27#928#fruits#Off the Vine
+Grapefruit#Grapfruih86Zxh#1.07#473#fruits#TriCounty Produce
+Grapefruit#GrapfruiwL1v0N#1.08#878#fruits#Simply Fresh
+Grapefruit#GrapfruihmJzWm#1.02#466#fruits#Off the Vine
+Hackberry#HackfruiQjomN7#0.22#938#fruits#TriCounty Produce
+Hackberry#HackfruiWS0eKp#0.20#780#fruits#Simply Fresh
+Hackberry#Hackfrui0MIv6J#0.21#345#fruits#Off the Vine
+Honey Locust#HonefruiebXGRc#1.08#298#fruits#TriCounty Produce
+Honey Locust#HonefruiPSqILB#1.00#427#fruits#Simply Fresh
+Honey Locust#Honefrui6UXtvW#1.03#422#fruits#Off the Vine
+Japanese Plum#JapafruihTmoYR#0.40#658#fruits#TriCounty Produce
+Japanese Plum#JapafruifGqz0l#0.40#700#fruits#Simply Fresh
+Japanese Plum#JapafruiufWkLx#0.39#790#fruits#Off the Vine
+Jojoba#JojofruisE0wTh#0.97#553#fruits#TriCounty Produce
+Jojoba#JojofruiwiYLp2#1.02#969#fruits#Simply Fresh
+Jojoba#JojofruigMD1ej#0.96#899#fruits#Off the Vine
+Jostaberry#JostfruiglsEGV#0.50#300#fruits#TriCounty Produce
+Jostaberry#JostfruiV3oo1h#0.52#423#fruits#Simply Fresh
+Jostaberry#JostfruiUBerur#0.53#562#fruits#Off the Vine
+Kangaroo Apple#KangfruiEQknz8#0.60#661#fruits#TriCounty Produce
+Kangaroo Apple#KangfruiNabdFq#0.60#377#fruits#Simply Fresh
+Kangaroo Apple#Kangfrui7hky1i#0.60#326#fruits#Off the Vine
+Ken's Red#Ken'fruinPUSIm#0.21#337#fruits#TriCounty Produce
+Ken's Red#Ken'fruiAoZlpl#0.21#902#fruits#Simply Fresh
+Ken's Red#Ken'frui5rmbd4#0.22#972#fruits#Off the Vine
+Ketembilla#Ketefrui3yAKxQ#0.31#303#fruits#TriCounty Produce
+Ketembilla#KetefruiROn6F5#0.34#283#fruits#Simply Fresh
+Ketembilla#Ketefrui16Rsts#0.33#887#fruits#Off the Vine
+King Orange#KingfruisOFzWk#0.74#429#fruits#TriCounty Produce
+King Orange#KingfruiBmzRJT#0.74#500#fruits#Simply Fresh
+King Orange#KingfruiGsrgRX#0.78#994#fruits#Off the Vine
+Kola Nut#KolafruiBbtAuw#0.58#991#fruits#TriCounty Produce
+Kola Nut#KolafruirbnLVS#0.62#733#fruits#Simply Fresh
+Kola Nut#Kolafrui1ItXJx#0.58#273#fruits#Off the Vine
+Kuko#Kukofrui6YH5Ds#0.41#647#fruits#TriCounty Produce
+Kuko#Kukofrui7WZaZK#0.39#241#fruits#Simply Fresh
+Kuko#Kukofruig9MQFT#0.40#204#fruits#Off the Vine
+Kumquat#KumqfruiT6WKQL#0.73#388#fruits#TriCounty Produce
+Kumquat#KumqfruidLiFLU#0.70#393#fruits#Simply Fresh
+Kumquat#KumqfruiL6zhQX#0.71#994#fruits#Off the Vine
+Kwai Muk#KwaifruiQK1zOE#1.10#249#fruits#TriCounty Produce
+Kwai Muk#KwaifruifbCRlT#1.14#657#fruits#Simply Fresh
+Kwai Muk#Kwaifruipe7T2m#1.09#617#fruits#Off the Vine
+Lanzone#LanzfruijsPf1v#0.34#835#fruits#TriCounty Produce
+Lanzone#LanzfruibU3QoL#0.34#404#fruits#Simply Fresh
+Lanzone#LanzfruiYgHwv6#0.34#237#fruits#Off the Vine
+Lemon#Lemofrui4Tgsg2#0.46#843#fruits#TriCounty Produce
+Lemon#LemofruivK6qvj#0.43#207#fruits#Simply Fresh
+Lemon#LemofruiXSXqJ0#0.44#910#fruits#Off the Vine
+Lemon Grass#LemofruiVFgVh5#0.40#575#fruits#TriCounty Produce
+Lemon Grass#LemofruiWIelvi#0.41#386#fruits#Simply Fresh
+Lemon Grass#LemofruiGVAow0#0.39#918#fruits#Off the Vine
+Lilly-pilly#LillfruiEQnW1m#1.21#974#fruits#TriCounty Produce
+Lilly-pilly#LillfruiMqVuR5#1.23#303#fruits#Simply Fresh
+Lilly-pilly#LillfruiVGH9p4#1.17#512#fruits#Off the Vine
+Ling Nut#LingfruiGtOf8X#0.85#540#fruits#TriCounty Produce
+Ling Nut#LingfruiuP0Jf9#0.83#200#fruits#Simply Fresh
+Ling Nut#LingfruiuO5qf5#0.81#319#fruits#Off the Vine
+Lipote#LipofruisxD2Qc#0.85#249#fruits#TriCounty Produce
+Lipote#LipofruiHNdIqL#0.85#579#fruits#Simply Fresh
+Lipote#LipofruiSQ2pKK#0.83#472#fruits#Off the Vine
+Litchee#Litcfrui1R6Ydz#0.99#806#fruits#TriCounty Produce
+Litchee#LitcfruiwtDM79#1.01#219#fruits#Simply Fresh
+Litchee#LitcfruilpPZbC#1.05#419#fruits#Off the Vine
+Longan#LongfruiEI0lWF#1.02#573#fruits#TriCounty Produce
+Longan#LongfruiPQxxSF#1.04#227#fruits#Simply Fresh
+Longan#LongfruisdI812#0.99#993#fruits#Off the Vine
+Love-in-a-mist#LovefruiKYPW70#0.69#388#fruits#TriCounty Produce
+Love-in-a-mist#LovefruiHrgjDa#0.67#478#fruits#Simply Fresh
+Love-in-a-mist#LovefruipSOWVz#0.71#748#fruits#Off the Vine
+Lychee#LychfruiicVLnY#0.38#276#fruits#TriCounty Produce
+Lychee#LychfruiGY6yJr#0.38#602#fruits#Simply Fresh
+Lychee#LychfruiTzDCq2#0.40#572#fruits#Off the Vine
+Mabolo#MabofruiSY8RQS#0.97#263#fruits#TriCounty Produce
+Mabolo#MabofruiOWWk0n#0.98#729#fruits#Simply Fresh
+Mabolo#MabofruixQLOTF#0.98#771#fruits#Off the Vine
+Macadamia Nut#MacafruiZppJPw#1.22#888#fruits#TriCounty Produce
+Macadamia Nut#MacafruiI7XFMV#1.24#484#fruits#Simply Fresh
+Macadamia Nut#Macafrui4x8bxV#1.20#536#fruits#Off the Vine
+Madagascar Plum#MadafruiVj5fDf#1.14#596#fruits#TriCounty Produce
+Madagascar Plum#MadafruivJhAFI#1.15#807#fruits#Simply Fresh
+Madagascar Plum#Madafrui7MTe1x#1.17#355#fruits#Off the Vine
+Magnolia Vine#MagnfruiigN4Y1#1.17#321#fruits#TriCounty Produce
+Magnolia Vine#MagnfruicKtiHd#1.15#353#fruits#Simply Fresh
+Magnolia Vine#MagnfruiLPDSCp#1.23#324#fruits#Off the Vine
+Mamey#Mamefrui5rjLF6#0.36#683#fruits#TriCounty Produce
+Mamey#MamefruiM6ndnR#0.38#404#fruits#Simply Fresh
+Mamey#Mamefruiq9KntD#0.36#527#fruits#Off the Vine
+Mandarin Orange#MandfruiRKpmKL#0.42#352#fruits#TriCounty Produce
+Mandarin Orange#Mandfrui1V0KLG#0.42#548#fruits#Simply Fresh
+Mandarin Orange#Mandfruig2o9Fg#0.41#686#fruits#Off the Vine
+Marany Nut#MarafruiqkrwoJ#1.14#273#fruits#TriCounty Produce
+Marany Nut#MarafruiCGKpke#1.12#482#fruits#Simply Fresh
+Marany Nut#MarafruiB1YE5x#1.09#412#fruits#Off the Vine
+Marula#MarufruiXF4biH#0.22#403#fruits#TriCounty Produce
+Marula#MarufruidZiVKZ#0.23#317#fruits#Simply Fresh
+Marula#MarufruiIS8BEp#0.21#454#fruits#Off the Vine
+Mayhaw#MayhfruiCSrm7k#0.24#220#fruits#TriCounty Produce
+Mayhaw#MayhfruiNRDzWs#0.25#710#fruits#Simply Fresh
+Mayhaw#MayhfruiIUCyEg#0.24#818#fruits#Off the Vine
+Meiwa Kumquat#MeiwfruiYhv3AY#0.21#997#fruits#TriCounty Produce
+Meiwa Kumquat#MeiwfruiyzQFNR#0.22#347#fruits#Simply Fresh
+Meiwa Kumquat#Meiwfruict4OUp#0.21#923#fruits#Off the Vine
+Mexican Barberry#Mexifrui2P2dXi#0.28#914#fruits#TriCounty Produce
+Mexican Barberry#MexifruiywUTMI#0.29#782#fruits#Simply Fresh
+Mexican Barberry#MexifruijPHu5X#0.29#367#fruits#Off the Vine
+Meyer Lemon#Meyefruin9901J#0.38#824#fruits#TriCounty Produce
+Meyer Lemon#MeyefruiNeQpjO#0.37#617#fruits#Simply Fresh
+Meyer Lemon#MeyefruiYEVznZ#0.37#741#fruits#Off the Vine
+Mississippi Honeyberry#Missfruipb5iW3#0.95#595#fruits#TriCounty Produce
+Mississippi Honeyberry#MissfruiINiDbB#0.96#551#fruits#Simply Fresh
+Mississippi Honeyberry#MissfruiNUQ82a#0.93#396#fruits#Off the Vine
+Monkey Pot#MonkfruiXlTW4j#0.90#896#fruits#TriCounty Produce
+Monkey Pot#Monkfrui1p7a4h#0.88#344#fruits#Simply Fresh
+Monkey Pot#Monkfrui4eKggb#0.92#917#fruits#Off the Vine
+Monos Plum#Monofrui0Mv9aV#1.11#842#fruits#TriCounty Produce
+Monos Plum#Monofrui6iTGQY#1.14#570#fruits#Simply Fresh
+Monos Plum#MonofruiNu2uGH#1.13#978#fruits#Off the Vine
+Moosewood#MoosfruiMXEGex#0.86#969#fruits#TriCounty Produce
+Moosewood#Moosfrui8805mB#0.86#963#fruits#Simply Fresh
+Moosewood#MoosfruiOsnDFL#0.88#594#fruits#Off the Vine
+Natal Orange#NatafruitB8Kh2#0.42#332#fruits#TriCounty Produce
+Natal Orange#NatafruiOhqRrd#0.42#982#fruits#Simply Fresh
+Natal Orange#NatafruiRObMf6#0.41#268#fruits#Off the Vine
+Nectarine#NectfruilNfeD8#0.36#601#fruits#TriCounty Produce
+Nectarine#NectfruiQfjt6b#0.35#818#fruits#Simply Fresh
+Nectarine#Nectfrui5U7U96#0.37#930#fruits#Off the Vine
+Neem Tree#NeemfruiCruEMF#0.24#222#fruits#TriCounty Produce
+Neem Tree#NeemfruiGv0pv5#0.24#645#fruits#Simply Fresh
+Neem Tree#NeemfruiUFPVfk#0.25#601#fruits#Off the Vine
+New Zealand Spinach#New fruihDIgec#0.87#428#fruits#TriCounty Produce
+New Zealand Spinach#New fruiaoR9TP#0.87#630#fruits#Simply Fresh
+New Zealand Spinach#New fruiy8LBul#0.94#570#fruits#Off the Vine
+Olosapo#OlosfruiGXvaMm#0.76#388#fruits#TriCounty Produce
+Olosapo#OlosfruiESlpB3#0.76#560#fruits#Simply Fresh
+Olosapo#OlosfruiFNEkER#0.76#962#fruits#Off the Vine
+Oregon Grape#OregfruiWxhzrf#1.14#892#fruits#TriCounty Produce
+Oregon Grape#OregfruiMgjHUn#1.20#959#fruits#Simply Fresh
+Oregon Grape#OregfruiC5UCxX#1.17#419#fruits#Off the Vine
+Otaheite Apple#OtahfruilT0iFj#0.21#579#fruits#TriCounty Produce
+Otaheite Apple#Otahfrui92PyMY#0.22#857#fruits#Simply Fresh
+Otaheite Apple#OtahfruiLGD1EH#0.20#807#fruits#Off the Vine
+Oyster Plant#OystfruimGxOsj#0.77#835#fruits#TriCounty Produce
+Oyster Plant#Oystfrui1kudBX#0.81#989#fruits#Simply Fresh
+Oyster Plant#OystfruiaX3uO2#0.80#505#fruits#Off the Vine
+Panama Berry#PanafruiZG0Vp4#1.19#288#fruits#TriCounty Produce
+Panama Berry#PanafruiobvXPE#1.21#541#fruits#Simply Fresh
+Panama Berry#PanafruipaW8F3#1.16#471#fruits#Off the Vine
+Peach Tomato#PeacfruiQpovYH#1.20#475#fruits#TriCounty Produce
+Peach Tomato#PeacfruixYXLTN#1.18#655#fruits#Simply Fresh
+Peach Tomato#PeacfruiILDYAp#1.23#876#fruits#Off the Vine
+Peanut#Peanfruiy8M7pt#0.69#275#fruits#TriCounty Produce
+Peanut#PeanfruiEimbED#0.65#307#fruits#Simply Fresh
+Peanut#Peanfruic452Vc#0.68#937#fruits#Off the Vine
+Peanut Butter Fruit#PeanfruixEDt9Y#0.27#628#fruits#TriCounty Produce
+Peanut Butter Fruit#PeanfruiST0T0R#0.27#910#fruits#Simply Fresh
+Peanut Butter Fruit#Peanfrui7jeRN2#0.27#938#fruits#Off the Vine
+Pear#PearfruiB5YmSJ#0.20#945#fruits#TriCounty Produce
+Pear#PearfruiA93XZx#0.21#333#fruits#Simply Fresh
+Pear#PearfruioNKiIf#0.21#715#fruits#Off the Vine
+Pecan#PecafruiiTIv1Z#0.26#471#fruits#TriCounty Produce
+Pecan#PecafruiMGkqla#0.26#889#fruits#Simply Fresh
+Pecan#Pecafrui1szYz2#0.25#929#fruits#Off the Vine
+Purple Passion Fruit#Purpfrui4mMGkD#1.04#914#fruits#TriCounty Produce
+Purple Passion Fruit#Purpfrui5XOW3K#1.06#423#fruits#Simply Fresh
+Purple Passion Fruit#PurpfruifDTAgW#1.05#549#fruits#Off the Vine
+Red Mulberry#Red fruiVLOXIW#1.24#270#fruits#TriCounty Produce
+Red Mulberry#Red fruiXNXt4a#1.21#836#fruits#Simply Fresh
+Red Mulberry#Red fruiUseWLG#1.21#795#fruits#Off the Vine
+Red Princess#Red fruigJLR4V#0.23#829#fruits#TriCounty Produce
+Red Princess#Red fruinVKps5#0.23#558#fruits#Simply Fresh
+Red Princess#Red frui0jl9mg#0.24#252#fruits#Off the Vine
+Striped Screw Pine#StrifruiUKzjoU#0.60#226#fruits#TriCounty Produce
+Striped Screw Pine#StrifruivWLDzH#0.64#685#fruits#Simply Fresh
+Striped Screw Pine#StrifruiiF7CGH#0.60#983#fruits#Off the Vine
+Tapioca#Tapifruib4LCqt#0.40#955#fruits#TriCounty Produce
+Tapioca#TapifruiwgQLj9#0.41#889#fruits#Simply Fresh
+Tapioca#TapifruiZ6Igg3#0.41#655#fruits#Off the Vine
+Tavola#Tavofrui0k9XOt#1.16#938#fruits#TriCounty Produce
+Tavola#Tavofrui8DuRxL#1.08#979#fruits#Simply Fresh
+Tavola#TavofruiNZEuJZ#1.16#215#fruits#Off the Vine
+Tea#TeafruiL0357s#1.11#516#fruits#TriCounty Produce
+Tea#TeafruiD5soTf#1.13#970#fruits#Simply Fresh
+Tea#TeafruiOWq4oO#1.19#357#fruits#Off the Vine
+Ugli Fruit#UglifruipKNCpf#0.24#501#fruits#TriCounty Produce
+Ugli Fruit#UglifruifbDrzc#0.24#642#fruits#Simply Fresh
+Ugli Fruit#Uglifruiwx8or4#0.24#280#fruits#Off the Vine
+Vegetable Brain#VegefruieXLBoc#0.73#355#fruits#TriCounty Produce
+Vegetable Brain#Vegefruik5FSdl#0.71#498#fruits#Simply Fresh
+Vegetable Brain#VegefruiKBfzN0#0.72#453#fruits#Off the Vine
+White Walnut#Whitfruit3oVHL#0.30#501#fruits#TriCounty Produce
+White Walnut#WhitfruiHygydw#0.30#913#fruits#Simply Fresh
+White Walnut#WhitfruieNtplo#0.30#401#fruits#Off the Vine
+Wood Apple#WoodfruijVPRqA#0.68#501#fruits#TriCounty Produce
+Wood Apple#Woodfrui4Zk69T#0.68#616#fruits#Simply Fresh
+Wood Apple#WoodfruiuSLHZK#0.70#474#fruits#Off the Vine
+Yellow Horn#Yellfrui5igjjf#1.18#729#fruits#TriCounty Produce
+Yellow Horn#Yellfrui0DiPqa#1.13#517#fruits#Simply Fresh
+Yellow Horn#Yellfrui0ljvqC#1.14#853#fruits#Off the Vine
+Yellow Sapote#YellfruilGmCfq#0.93#204#fruits#TriCounty Produce
+Yellow Sapote#Yellfrui4J2mke#0.88#269#fruits#Simply Fresh
+Yellow Sapote#Yellfrui6PuXaL#0.86#575#fruits#Off the Vine
+Ylang-ylang#Ylanfrui3rmByO#0.76#429#fruits#TriCounty Produce
+Ylang-ylang#YlanfruiA80Nkq#0.76#886#fruits#Simply Fresh
+Ylang-ylang#YlanfruinUEm5d#0.72#747#fruits#Off the Vine
+Zapote Blanco#ZapofruisZ5sMA#0.67#428#fruits#TriCounty Produce
+Zapote Blanco#ZapofruilKxl7N#0.65#924#fruits#Simply Fresh
+Zapote Blanco#ZapofruiAe6Eu1#0.68#255#fruits#Off the Vine
+Zulu Nut#Zulufrui469K4k#0.71#445#fruits#TriCounty Produce
+Zulu Nut#ZulufruiWbz6vU#0.71#653#fruits#Simply Fresh
+Zulu Nut#Zulufrui0LJnWK#0.71#858#fruits#Off the Vine
+Artichoke#ArtivegeIuqmS4#0.71#282#vegetables#The Pantry
+Artichoke#Artivegebljjnf#0.69#66#vegetables#TriCounty Produce
+Artichoke#ArtivegeTa2lcF#0.70#618#vegetables#Off the Vine
+Asparagus#AspavegezC0cDl#0.23#70#vegetables#The Pantry
+Asparagus#AspavegeM1q5Kt#0.24#546#vegetables#TriCounty Produce
+Asparagus#AspavegeXWbCb8#0.24#117#vegetables#Off the Vine
+Basil#Basivegev08fzf#0.31#213#vegetables#The Pantry
+Basil#BasivegeF3Uha7#0.29#651#vegetables#TriCounty Produce
+Basil#BasivegeqR8SHC#0.31#606#vegetables#Off the Vine
+Bean#BeanvegegCFUOp#0.27#794#vegetables#The Pantry
+Bean#BeanvegeqMSEVq#0.27#468#vegetables#TriCounty Produce
+Bean#Beanvege4IGUwX#0.27#463#vegetables#Off the Vine
+Beet#BeetvegedEv4Ic#0.35#120#vegetables#The Pantry
+Beet#Beetvegegi1bz1#0.35#540#vegetables#TriCounty Produce
+Beet#BeetvegemztZcN#0.36#386#vegetables#Off the Vine
+Blackeyed Pea#Blacvege3TPldr#0.86#133#vegetables#The Pantry
+Blackeyed Pea#Blacvege3Zqnep#0.88#67#vegetables#TriCounty Produce
+Blackeyed Pea#Blacvege3khffZ#0.90#790#vegetables#Off the Vine
+Cabbage#CabbvegeY0c4Fw#0.82#726#vegetables#The Pantry
+Cabbage#CabbvegeoaK7Co#0.85#439#vegetables#TriCounty Produce
+Cabbage#CabbvegeVvO646#0.82#490#vegetables#Off the Vine
+Carrot#CarrvegeEbI0sw#0.45#717#vegetables#The Pantry
+Carrot#CarrvegeEZndWL#0.49#284#vegetables#TriCounty Produce
+Carrot#CarrvegewUkHao#0.47#122#vegetables#Off the Vine
+Cauliflower#Caulvege1CPeNG#0.68#756#vegetables#The Pantry
+Cauliflower#CaulvegedrPqib#0.66#269#vegetables#TriCounty Produce
+Cauliflower#CaulvegeT6cka8#0.65#728#vegetables#Off the Vine
+Chayote#ChayvegePRReGE#0.14#233#vegetables#The Pantry
+Chayote#Chayvegep058f7#0.14#88#vegetables#TriCounty Produce
+Chayote#ChayvegeoxO40S#0.14#611#vegetables#Off the Vine
+Corn#CornvegeukXkv6#0.72#632#vegetables#The Pantry
+Corn#CornvegePnPREC#0.72#609#vegetables#TriCounty Produce
+Corn#CornvegeO0GwoQ#0.70#664#vegetables#Off the Vine
+Cucumber#CucuvegeEqQeA7#0.94#499#vegetables#The Pantry
+Cucumber#CucuvegewmKbJ1#0.94#738#vegetables#TriCounty Produce
+Cucumber#CucuvegeUW6JaA#0.94#565#vegetables#Off the Vine
+Cantaloupe#CantvegeIHs9vJ#0.66#411#vegetables#The Pantry
+Cantaloupe#CantvegeEaDdST#0.66#638#vegetables#TriCounty Produce
+Cantaloupe#CantvegewWQEa0#0.64#682#vegetables#Off the Vine
+Carraway#CarrvegewuL4Ma#0.32#740#vegetables#The Pantry
+Carraway#CarrvegeyiWfBj#0.32#265#vegetables#TriCounty Produce
+Carraway#CarrvegeMjb1i9#0.31#732#vegetables#Off the Vine
+Celeriac#CelevegeoTBicd#0.74#350#vegetables#The Pantry
+Celeriac#CelevegeCNABoZ#0.70#261#vegetables#TriCounty Produce
+Celeriac#Celevege9LUeww#0.70#298#vegetables#Off the Vine
+Celery#Celevegej40ZCc#0.59#740#vegetables#The Pantry
+Celery#CelevegerYlVRy#0.58#734#vegetables#TriCounty Produce
+Celery#Celevege67eimC#0.58#619#vegetables#Off the Vine
+Chervil#ChervegeuH4Dge#0.09#502#vegetables#The Pantry
+Chervil#Chervegea1OyKO#0.09#299#vegetables#TriCounty Produce
+Chervil#Chervegeq56gMO#0.09#474#vegetables#Off the Vine
+Chicory#Chicvege79qoQ8#0.09#709#vegetables#The Pantry
+Chicory#ChicvegeTSVBQq#0.10#477#vegetables#TriCounty Produce
+Chicory#Chicvege6qpcyi#0.10#282#vegetables#Off the Vine
+Chinese Cabbage#ChinvegeFNsSRn#0.78#408#vegetables#The Pantry
+Chinese Cabbage#Chinvege2ldNr3#0.80#799#vegetables#TriCounty Produce
+Chinese Cabbage#ChinvegeK3R2Td#0.80#180#vegetables#Off the Vine
+Chinese Beans#ChinvegebxbyPy#0.45#654#vegetables#The Pantry
+Chinese Beans#ChinvegewKGwgx#0.45#206#vegetables#TriCounty Produce
+Chinese Beans#ChinvegevVjzC0#0.47#643#vegetables#Off the Vine
+Chines Kale#ChinvegeCfdkss#0.70#239#vegetables#The Pantry
+Chines Kale#Chinvege6V6Dne#0.65#548#vegetables#TriCounty Produce
+Chines Kale#ChinvegeB7vE3x#0.66#380#vegetables#Off the Vine
+Chinese Radish#ChinvegeXcM4eq#0.22#190#vegetables#The Pantry
+Chinese Radish#ChinvegeTdUBqN#0.22#257#vegetables#TriCounty Produce
+Chinese Radish#ChinvegeMXMms8#0.22#402#vegetables#Off the Vine
+Chinese Mustard#ChinvegeRDdpdl#0.33#149#vegetables#The Pantry
+Chinese Mustard#ChinvegeABDhNd#0.32#320#vegetables#TriCounty Produce
+Chinese Mustard#Chinvege8NPwa2#0.34#389#vegetables#Off the Vine
+Cilantro#CilavegeQXBEsW#0.60#674#vegetables#The Pantry
+Cilantro#CilavegeRgjkUG#0.60#355#vegetables#TriCounty Produce
+Cilantro#CilavegelT2msu#0.59#464#vegetables#Off the Vine
+Collard#CollvegesTGGNw#0.32#745#vegetables#The Pantry
+Collard#CollvegeAwdor5#0.32#124#vegetables#TriCounty Produce
+Collard#CollvegeQe900L#0.30#796#vegetables#Off the Vine
+Coriander#CorivegeXxp4xY#0.26#560#vegetables#The Pantry
+Coriander#Corivege9xBAT0#0.27#321#vegetables#TriCounty Produce
+Coriander#CorivegeCfNjBx#0.27#709#vegetables#Off the Vine
+Dandelion#DandvegeJNcnbr#0.11#285#vegetables#The Pantry
+Dandelion#DandvegeGwBkHZ#0.11#733#vegetables#TriCounty Produce
+Dandelion#DandvegeZfwVqn#0.11#57#vegetables#Off the Vine
+Daikon Radish#DaikvegeHHsd7M#0.61#743#vegetables#The Pantry
+Daikon Radish#DaikvegeIu17yC#0.62#459#vegetables#TriCounty Produce
+Daikon Radish#DaikvegePzFjqf#0.63#296#vegetables#Off the Vine
+Eggplant#EggpvegeKJtydN#0.55#200#vegetables#The Pantry
+Eggplant#EggpvegeQMKrNs#0.53#208#vegetables#TriCounty Produce
+Eggplant#EggpvegeN0WnSo#0.51#761#vegetables#Off the Vine
+English Pea#Englvegea1ytIn#0.40#457#vegetables#The Pantry
+English Pea#EnglvegerU9Vty#0.37#263#vegetables#TriCounty Produce
+English Pea#EnglvegeCmkd3y#0.39#430#vegetables#Off the Vine
+Fennel#Fennvegebz2UM7#0.76#545#vegetables#The Pantry
+Fennel#FennvegeQzjtZ3#0.78#795#vegetables#TriCounty Produce
+Fennel#FennvegeXSrW61#0.75#79#vegetables#Off the Vine
+Garlic#GarlvegesR2yel#0.76#478#vegetables#The Pantry
+Garlic#GarlvegeEQvt8W#0.77#349#vegetables#TriCounty Produce
+Garlic#GarlvegedljBdK#0.80#708#vegetables#Off the Vine
+Ginger#GingvegeMNiTc2#0.88#563#vegetables#The Pantry
+Ginger#Gingvegeq366Sn#0.89#738#vegetables#TriCounty Produce
+Ginger#GingvegeznyyVj#0.89#598#vegetables#Off the Vine
+Horseradish#HorsvegemSwISt#0.12#622#vegetables#The Pantry
+Horseradish#HorsvegetCOS0x#0.11#279#vegetables#TriCounty Produce
+Horseradish#Horsvegew6XXaS#0.12#478#vegetables#Off the Vine
+Japanese Eggplant#JapavegeTdKDCL#0.57#539#vegetables#The Pantry
+Japanese Eggplant#JapavegevsJfGa#0.58#782#vegetables#TriCounty Produce
+Japanese Eggplant#JapavegeCIrIxd#0.57#777#vegetables#Off the Vine
+Jerusalem Artichoke#Jeruvege928cr0#0.13#231#vegetables#The Pantry
+Jerusalem Artichoke#JeruvegeC2v086#0.14#123#vegetables#TriCounty Produce
+Jerusalem Artichoke#JeruvegeehCYzi#0.14#196#vegetables#Off the Vine
+Jicama#JicavegeRWYj9n#0.75#79#vegetables#The Pantry
+Jicama#JicavegeGk5LKH#0.71#292#vegetables#TriCounty Produce
+Jicama#JicavegeUjpaX1#0.70#308#vegetables#Off the Vine
+Kale#Kalevegext6RNT#0.55#765#vegetables#The Pantry
+Kale#KalevegeFsp17B#0.53#107#vegetables#TriCounty Produce
+Kale#KalevegeAffBTS#0.57#573#vegetables#Off the Vine
+Kiwifruit#KiwivegeloZBKJ#0.60#769#vegetables#The Pantry
+Kiwifruit#KiwivegenCQAHw#0.59#307#vegetables#TriCounty Produce
+Kiwifruit#Kiwivege0Gi3P2#0.59#235#vegetables#Off the Vine
+Kohlrabi#KohlvegeJFKZDl#0.26#406#vegetables#The Pantry
+Kohlrabi#Kohlvege32UTAj#0.28#613#vegetables#TriCounty Produce
+Kohlrabi#KohlvegejNQC1M#0.28#326#vegetables#Off the Vine
+Leek#Leekvege5iaFtg#0.70#580#vegetables#The Pantry
+Leek#Leekvegei9Wxbz#0.68#188#vegetables#TriCounty Produce
+Leek#LeekvegewY4mAc#0.70#473#vegetables#Off the Vine
+Lettuce#LettvegesK9wDR#0.55#716#vegetables#The Pantry
+Lettuce#LettvegeWzMyCM#0.57#83#vegetables#TriCounty Produce
+Lettuce#LettvegeHgfGG8#0.56#268#vegetables#Off the Vine
+Melons#Melovege6t93WF#0.11#252#vegetables#The Pantry
+Melons#Melovegeq9kz7T#0.12#558#vegetables#TriCounty Produce
+Melons#Melovege9kLTXN#0.12#382#vegetables#Off the Vine
+Mushroom#MushvegeSq53h8#0.59#365#vegetables#The Pantry
+Mushroom#Mushvegedq6lYP#0.59#444#vegetables#TriCounty Produce
+Mushroom#Mushvege8o27D2#0.55#467#vegetables#Off the Vine
+Okra#OkravegeTszQSL#0.55#62#vegetables#The Pantry
+Okra#OkravegeJBWmfh#0.58#165#vegetables#TriCounty Produce
+Okra#OkravegeD6tF9n#0.55#77#vegetables#Off the Vine
+Onion#OniovegejwimQo#0.80#186#vegetables#The Pantry
+Onion#OniovegeUOwwks#0.80#417#vegetables#TriCounty Produce
+Onion#OniovegezcRDrc#0.80#435#vegetables#Off the Vine
+Oregano#OregvegetlU7Ez#0.71#119#vegetables#The Pantry
+Oregano#Oregvege9h9ZKy#0.70#173#vegetables#TriCounty Produce
+Oregano#OregvegebXr0PJ#0.70#773#vegetables#Off the Vine
+Parsley#ParsvegeXFEjjN#0.83#502#vegetables#The Pantry
+Parsley#ParsvegejAg5C4#0.80#454#vegetables#TriCounty Produce
+Parsley#ParsvegehAtH2H#0.84#523#vegetables#Off the Vine
+Parsnip#Parsvegee9Lp6D#0.46#626#vegetables#The Pantry
+Parsnip#ParsvegeSxXHSA#0.47#411#vegetables#TriCounty Produce
+Parsnip#Parsvegea0stPf#0.44#403#vegetables#Off the Vine
+Pea#Peavegecq4SxR#0.18#342#vegetables#The Pantry
+Pea#Peavege46Gdp9#0.18#255#vegetables#TriCounty Produce
+Pea#Peavegeov1gc5#0.18#251#vegetables#Off the Vine
+Pepper#PeppvegeUcBYRp#0.33#52#vegetables#The Pantry
+Pepper#PeppvegeB60btP#0.35#107#vegetables#TriCounty Produce
+Pepper#PeppvegeG4tP3e#0.34#481#vegetables#Off the Vine
+Pigeon Pea#Pigevegec5bAtm#0.94#391#vegetables#The Pantry
+Pigeon Pea#Pigevegeb93eLi#0.91#447#vegetables#TriCounty Produce
+Pigeon Pea#PigevegejEBDRa#0.89#259#vegetables#Off the Vine
+Irish Potato#IrisvegeJNQqby#0.72#355#vegetables#The Pantry
+Irish Potato#Irisvegewq1PLd#0.72#601#vegetables#TriCounty Produce
+Irish Potato#IrisvegeAfFLdO#0.68#740#vegetables#Off the Vine
+Pumpkin#PumpvegeiYsPR8#0.25#776#vegetables#The Pantry
+Pumpkin#PumpvegelqP1Kh#0.25#189#vegetables#TriCounty Produce
+Pumpkin#Pumpvegeb3nQU5#0.26#207#vegetables#Off the Vine
+Radish#RadivegeNwwSBJ#0.16#613#vegetables#The Pantry
+Radish#Radivege0tIBnL#0.16#779#vegetables#TriCounty Produce
+Radish#RadivegeNLqJCf#0.16#731#vegetables#Off the Vine
+Rhubarb#RhubvegeREfOti#0.12#301#vegetables#The Pantry
+Rhubarb#Rhubvege4Jc3b7#0.12#557#vegetables#TriCounty Produce
+Rhubarb#RhubvegeaXqF7H#0.12#378#vegetables#Off the Vine
+Rosemary#Rosevege16QStc#0.73#380#vegetables#The Pantry
+Rosemary#RosevegeNf6Oem#0.75#622#vegetables#TriCounty Produce
+Rosemary#RosevegeFgsOyN#0.74#631#vegetables#Off the Vine
+Rutabaga#RutavegecUYfQ3#0.55#676#vegetables#The Pantry
+Rutabaga#RutavegejOG5DF#0.55#273#vegetables#TriCounty Produce
+Rutabaga#RutavegewEVjzV#0.53#452#vegetables#Off the Vine
+Salsify#SalsvegeViS9HF#0.11#537#vegetables#The Pantry
+Salsify#Salsvegemd3HAL#0.11#753#vegetables#TriCounty Produce
+Salsify#SalsvegeuRCnmq#0.10#787#vegetables#Off the Vine
+Savory#Savovegee4DRWl#0.21#456#vegetables#The Pantry
+Savory#SavovegerZ90Xm#0.21#642#vegetables#TriCounty Produce
+Savory#Savovegeje7yy7#0.22#328#vegetables#Off the Vine
+Sesame#Sesavege4NAWZE#0.84#54#vegetables#The Pantry
+Sesame#SesavegeMTc9IN#0.84#458#vegetables#TriCounty Produce
+Sesame#SesavegegOwAjo#0.83#125#vegetables#Off the Vine
+Shallots#ShalvegeUO2pDO#0.26#599#vegetables#The Pantry
+Shallots#ShalvegeY1sekb#0.27#647#vegetables#TriCounty Produce
+Shallots#ShalvegeSDC8VY#0.27#369#vegetables#Off the Vine
+Sugar Snap Peas#SugavegepUZDTl#0.47#308#vegetables#The Pantry
+Sugar Snap Peas#Sugavege1XyzNH#0.48#205#vegetables#TriCounty Produce
+Sugar Snap Peas#SugavegeJuaG7f#0.46#348#vegetables#Off the Vine
+Soybean#SoybvegeqxSVRL#0.70#639#vegetables#The Pantry
+Soybean#SoybvegezEMjOG#0.68#423#vegetables#TriCounty Produce
+Soybean#SoybvegebanSFq#0.67#268#vegetables#Off the Vine
+Spaghetti Squash#SpagvegeMNO1yC#0.12#753#vegetables#The Pantry
+Spaghetti Squash#SpagvegeilpUaD#0.13#604#vegetables#TriCounty Produce
+Spaghetti Squash#SpagvegeAOoZNX#0.13#431#vegetables#Off the Vine
+Spinach#SpinvegeegXXou#0.10#742#vegetables#The Pantry
+Spinach#SpinvegeVcqXL6#0.11#708#vegetables#TriCounty Produce
+Spinach#SpinvegetZ26DN#0.11#625#vegetables#Off the Vine
+Sweet Potato#SweevegepNDQWb#0.94#720#vegetables#The Pantry
+Sweet Potato#Sweevegepnw7Tm#0.90#377#vegetables#TriCounty Produce
+Sweet Potato#Sweevegeyk0C82#0.89#242#vegetables#Off the Vine
+Swiss Chard#SwisvegeksalTA#0.54#545#vegetables#The Pantry
+Swiss Chard#SwisvegeKm2Kze#0.54#472#vegetables#TriCounty Produce
+Swiss Chard#SwisvegehteuMk#0.56#142#vegetables#Off the Vine
+Taro#Tarovege3fpGV6#0.87#155#vegetables#The Pantry
+Taro#TarovegerZkmof#0.86#371#vegetables#TriCounty Produce
+Taro#TarovegeXKPuzc#0.89#443#vegetables#Off the Vine
+Tarragon#TarrvegeCzVC6U#0.18#491#vegetables#The Pantry
+Tarragon#TarrvegesIkEfS#0.17#65#vegetables#TriCounty Produce
+Tarragon#TarrvegerZsKFP#0.18#180#vegetables#Off the Vine
+Thyme#Thymvege8Rv72c#0.41#442#vegetables#The Pantry
+Thyme#ThymvegeJoUdQS#0.42#237#vegetables#TriCounty Produce
+Thyme#ThymvegeRck5uO#0.43#491#vegetables#Off the Vine
+Tomato#Tomavegey0NHGK#0.31#60#vegetables#The Pantry
+Tomato#TomavegeKAjRUn#0.30#630#vegetables#TriCounty Produce
+Tomato#TomavegePZOHlH#0.30#70#vegetables#Off the Vine
+Turnip#TurnvegeRVQiV5#0.44#580#vegetables#The Pantry
+Turnip#TurnvegeVjIX9D#0.45#743#vegetables#TriCounty Produce
+Turnip#TurnvegelFhvuJ#0.44#219#vegetables#Off the Vine
+Watercress#WatevegelwzPLQ#0.54#230#vegetables#The Pantry
+Watercress#Watevege8oeDCT#0.54#774#vegetables#TriCounty Produce
+Watercress#Watevegexr8L1t#0.55#185#vegetables#Off the Vine
+Watermelon#WatevegeL83MRH#0.19#698#vegetables#The Pantry
+Watermelon#WatevegeR2S4Dq#0.21#488#vegetables#TriCounty Produce
+Watermelon#WatevegepFPXQu#0.21#439#vegetables#Off the Vine
+Kamote#KamovegegdON75#0.13#218#vegetables#The Pantry
+Kamote#KamovegevupDBf#0.13#98#vegetables#TriCounty Produce
+Kamote#KamovegeSQX7IA#0.14#703#vegetables#Off the Vine
+Alogbati#AlogvegeB1WaJU#0.41#775#vegetables#The Pantry
+Alogbati#AlogvegeVr5cPP#0.40#789#vegetables#TriCounty Produce
+Alogbati#AlogvegeyTUQzy#0.40#416#vegetables#Off the Vine
+Ampalaya#AmpavegemR9fSd#0.85#107#vegetables#The Pantry
+Ampalaya#AmpavegeJDu9Im#0.90#676#vegetables#TriCounty Produce
+Ampalaya#AmpavegepL8GH5#0.86#728#vegetables#Off the Vine
+Dahon ng sili#Dahovege6X9grk#0.11#369#vegetables#The Pantry
+Dahon ng sili#DahovegeiHZjQT#0.11#141#vegetables#TriCounty Produce
+Dahon ng sili#DahovegeoCDAH8#0.12#517#vegetables#Off the Vine
+Gabi#GabivegeVm4Xk3#0.44#396#vegetables#The Pantry
+Gabi#Gabivegeu6woqK#0.42#722#vegetables#TriCounty Produce
+Gabi#GabivegezcA7q1#0.42#394#vegetables#Off the Vine
+Kabute#Kabuvege6Tqrif#0.16#123#vegetables#The Pantry
+Kabute#KabuvegeA3uYdG#0.15#183#vegetables#TriCounty Produce
+Kabute#KabuvegeXW6ZiI#0.16#624#vegetables#Off the Vine
+Kamoteng Kahoy#KamovegeAdW37X#0.42#782#vegetables#The Pantry
+Kamoteng Kahoy#KamovegetFlqpC#0.42#515#vegetables#TriCounty Produce
+Kamoteng Kahoy#KamovegeMvxoLn#0.40#166#vegetables#Off the Vine
+Kangkong#KangvegeSFTvEz#0.35#759#vegetables#The Pantry
+Kangkong#KangvegeRLR6gL#0.34#695#vegetables#TriCounty Produce
+Kangkong#Kangvege9BFo14#0.35#783#vegetables#Off the Vine
+Labanos#Labavege3qrWJL#0.94#514#vegetables#The Pantry
+Labanos#LabavegekgVWDH#0.89#210#vegetables#TriCounty Produce
+Labanos#LabavegeiVPgMx#0.89#207#vegetables#Off the Vine
+Labong#LabovegeX3O8yz#0.85#722#vegetables#The Pantry
+Labong#LabovegeI1wSEs#0.87#472#vegetables#TriCounty Produce
+Labong#LabovegeOPiQht#0.85#740#vegetables#Off the Vine
+Malunggay#MaluvegeHkwAFm#0.30#252#vegetables#The Pantry
+Malunggay#Maluvegez6TiSY#0.30#245#vegetables#TriCounty Produce
+Malunggay#MaluvegewzY37D#0.31#405#vegetables#Off the Vine
+Munggo#MungvegeqeuwGw#0.25#362#vegetables#The Pantry
+Munggo#MungvegeNhqWvL#0.26#360#vegetables#TriCounty Produce
+Munggo#MungvegeGxNxQC#0.25#555#vegetables#Off the Vine
+Pechay#PechvegezDeHFZ#0.36#401#vegetables#The Pantry
+Pechay#Pechvegehi4Fcx#0.35#723#vegetables#TriCounty Produce
+Pechay#Pechvege8Pq8Eo#0.36#141#vegetables#Off the Vine
+Sigarilyas#SigavegeMJrtlV#0.88#335#vegetables#The Pantry
+Sigarilyas#SigavegeLhsoOB#0.87#768#vegetables#TriCounty Produce
+Sigarilyas#SigavegeS6RJcA#0.93#356#vegetables#Off the Vine
+Sitaw#Sitavege0hMi9z#0.65#153#vegetables#The Pantry
+Sitaw#Sitavegeez1g6N#0.67#561#vegetables#TriCounty Produce
+Sitaw#Sitavege0BCNeF#0.66#674#vegetables#Off the Vine
+Talong#TalovegevZjVK6#0.10#530#vegetables#The Pantry
+Talong#TalovegexX4MRw#0.09#305#vegetables#TriCounty Produce
+Talong#TalovegeO3U2ze#0.10#126#vegetables#Off the Vine
+Toge#TogevegeYelJUw#0.54#449#vegetables#The Pantry
+Toge#Togevegeilr1xK#0.54#274#vegetables#TriCounty Produce
+Toge#Togevegesvjnyn#0.51#316#vegetables#Off the Vine
+Ube#UbevegeoPnxvb#0.56#397#vegetables#The Pantry
+Ube#Ubevege2CNyve#0.55#450#vegetables#TriCounty Produce
+Ube#UbevegeC43sVj#0.55#263#vegetables#Off the Vine
+Upo#UpovegecOGRqC#0.22#404#vegetables#The Pantry
+Upo#Upovegekjl2wl#0.22#541#vegetables#TriCounty Produce
+Upo#UpovegemTTTwI#0.23#459#vegetables#Off the Vine
+Edamame#EdamvegeVYtk8z#0.79#296#vegetables#The Pantry
+Edamame#Edamvege608vXi#0.78#700#vegetables#TriCounty Produce
+Edamame#Edamvege1jiqGY#0.75#115#vegetables#Off the Vine
+Hairy melon#HairvegeFYFHIw#0.71#789#vegetables#The Pantry
+Hairy melon#HairvegeS7AAqI#0.72#302#vegetables#TriCounty Produce
+Hairy melon#HairvegeO6WJHL#0.72#444#vegetables#Off the Vine
+Burdock#BurdvegeyLstLV#0.56#761#vegetables#The Pantry
+Burdock#BurdvegeZsqAjT#0.56#582#vegetables#TriCounty Produce
+Burdock#BurdvegeycF7mo#0.55#566#vegetables#Off the Vine
+Snake gourd#SnakvegesfHGvt#0.92#626#vegetables#The Pantry
+Snake gourd#SnakvegedlNiBk#0.92#669#vegetables#TriCounty Produce
+Snake gourd#Snakvegec5n1UM#0.92#143#vegetables#Off the Vine
+Wasabi#Wasavege5P5pZp#0.67#751#vegetables#The Pantry
+Wasabi#Wasavege6EEE9r#0.68#559#vegetables#TriCounty Produce
+Wasabi#Wasavege1ve7TY#0.65#61#vegetables#Off the Vine
+Yam#YamvegeRN9ONH#0.57#438#vegetables#The Pantry
+Yam#YamvegeWjdzeA#0.56#564#vegetables#TriCounty Produce
+Yam#YamvegeI1AnyI#0.56#456#vegetables#Off the Vine
+Apple Fritters#AppldessDj96hw#6.12#16#desserts#Mom's Kitchen
+Apple Fritters#AppldessrN1kvM#6.06#7#desserts#The Baking Pan
+Banana Split#Banadess7tpjkJ#10.86#10#desserts#Mom's Kitchen
+Banana Split#Banadessfif758#11.07#14#desserts#The Baking Pan
+Blueberry Boy Bait#BluedesseX2LVU#3.72#16#desserts#Mom's Kitchen
+Blueberry Boy Bait#Bluedess9zLhaH#3.93#9#desserts#The Baking Pan
+Candied Cranberries#CanddessjW92p3#1.77#9#desserts#Mom's Kitchen
+Candied Cranberries#CanddesskhtVoQ#1.72#0#desserts#The Baking Pan
+Daiquiri Souffle#DaiqdessebnYcy#9.54#15#desserts#Mom's Kitchen
+Daiquiri Souffle#DaiqdessfM1DnX#9.72#6#desserts#The Baking Pan
+Bananas Flambe#BanadesscczumD#6.94#12#desserts#Mom's Kitchen
+Bananas Flambe#Banadess8qNfxd#7.07#16#desserts#The Baking Pan
+Pie, Apple#Pie,desshcSHhT#7.88#11#desserts#Mom's Kitchen
+Pie, Apple#Pie,dessTbiwDp#7.88#15#desserts#The Baking Pan
+Pie, Pumpkin#Pie,desswhPBPB#6.00#20#desserts#Mom's Kitchen
+Pie, Pumpkin#Pie,dessDg3NWl#6.24#19#desserts#The Baking Pan
+Pie, Blueberry#Pie,dessw9VdgD#2.14#3#desserts#Mom's Kitchen
+Pie, Blueberry#Pie,dessiSjZKD#2.12#1#desserts#The Baking Pan
+Pie, Pecan#Pie,dess2NqhNR#12.70#20#desserts#Mom's Kitchen
+Pie, Pecan#Pie,dessB1LfcE#12.33#12#desserts#The Baking Pan
+Pie, Cranberry Apple#Pie,dess1mL7IS#10.16#7#desserts#Mom's Kitchen
+Pie, Cranberry Apple#Pie,dessmDhkUA#10.16#11#desserts#The Baking Pan
+Pie, Banana Cream#Pie,dessH80DuG#7.35#6#desserts#Mom's Kitchen
+Pie, Banana Cream#Pie,dessf1YvFb#7.08#11#desserts#The Baking Pan
+Pie, Key Lime#Pie,desshtli5N#4.85#2#desserts#Mom's Kitchen
+Pie, Key Lime#Pie,dessMwQkKm#5.13#1#desserts#The Baking Pan
+Pie, Lemon Meringue#Pie,dess9naVkX#3.74#7#desserts#Mom's Kitchen
+Pie, Lemon Meringue#Pie,dessKYcNML#3.67#5#desserts#The Baking Pan
+Pie, Caramel#Pie,dessSUuiIU#2.27#9#desserts#Mom's Kitchen
+Pie, Caramel#Pie,dessvo8uHh#2.33#4#desserts#The Baking Pan
+Pie, Raspberry#Pie,dessUHhMlS#2.36#0#desserts#Mom's Kitchen
+Pie, Raspberry#Pie,dessJflbf5#2.36#2#desserts#The Baking Pan
+Ice Cream, Chocolate#Ice desseXuyxx#1.44#9#desserts#Mom's Kitchen
+Ice Cream, Chocolate#Ice dessASBohf#1.41#13#desserts#The Baking Pan
+Ice Cream, Vanilla#Ice dessYnzbbt#11.92#19#desserts#Mom's Kitchen
+Ice Cream, Vanilla#Ice dessUBBKp8#11.58#10#desserts#The Baking Pan
+Ice Cream, Strawberry#Ice dessfTwKhD#1.90#14#desserts#Mom's Kitchen
+Ice Cream, Strawberry#Ice dessaO9Fxf#1.99#6#desserts#The Baking Pan
+Ice Cream, Rocky Road#Ice dessyIri3P#13.10#20#desserts#Mom's Kitchen
+Ice Cream, Rocky Road#Ice dessZuLr8F#13.48#13#desserts#The Baking Pan
+Ice Cream, Mint Chocolate Chip#Ice dessV1IGG7#5.75#4#desserts#Mom's Kitchen
+Ice Cream, Mint Chocolate Chip#Ice dessX1gEQ4#5.64#1#desserts#The Baking Pan
+Ice Cream Sundae#Ice dessbhlAXt#5.62#11#desserts#Mom's Kitchen
+Ice Cream Sundae#Ice dessByapxl#5.72#16#desserts#The Baking Pan
+Cobbler, Peach#CobbdessYUGeOB#10.14#20#desserts#Mom's Kitchen
+Cobbler, Peach#CobbdessXfEtUK#10.43#16#desserts#The Baking Pan
+Cobbler, Berry-Pecan#Cobbdessx3htak#5.36#12#desserts#Mom's Kitchen
+Cobbler, Berry-Pecan#Cobbdesse4FUVI#5.41#8#desserts#The Baking Pan
+Cobbler, Blueberry#CobbdessbiI0oF#3.78#11#desserts#Mom's Kitchen
+Cobbler, Blueberry#CobbdessMXxbBN#3.57#2#desserts#The Baking Pan
+Cobbler, Cherry#CobbdessNSa8QW#12.58#0#desserts#Mom's Kitchen
+Cobbler, Cherry#CobbdessA1dADa#12.10#10#desserts#The Baking Pan
+Cobbler, Huckleberry#Cobbdess3t6O8d#3.99#18#desserts#Mom's Kitchen
+Cobbler, Huckleberry#CobbdessGI9euK#3.88#0#desserts#The Baking Pan
+Cobbler, Rhubarb#Cobbdess22X40Z#9.54#0#desserts#Mom's Kitchen
+Cobbler, Rhubarb#CobbdessPfnCT0#9.27#18#desserts#The Baking Pan
+Cobbler, Strawberry#CobbdessI78188#12.43#0#desserts#Mom's Kitchen
+Cobbler, Strawberry#CobbdessH3LdgQ#12.20#3#desserts#The Baking Pan
+Cobbler, Zucchini#Cobbdess5rK4dP#11.24#3#desserts#Mom's Kitchen
+Cobbler, Zucchini#Cobbdess4Ez8kS#10.51#10#desserts#The Baking Pan
+Brownies#BrowdessmogdTl#7.62#9#desserts#Mom's Kitchen
+Brownies#Browdess84Qc1z#7.55#9#desserts#The Baking Pan
+Fudge Bar#Fudgdess8iXSyf#11.72#6#desserts#Mom's Kitchen
+Fudge Bar#FudgdessakU1Id#12.29#5#desserts#The Baking Pan
+Cookies, Oatmeal#Cookdessnq9Oya#2.84#15#desserts#Mom's Kitchen
+Cookies, Oatmeal#CookdessBhgp7p#2.68#10#desserts#The Baking Pan
+Cookies, Chocolate Chip#CookdessRVszsZ#12.73#17#desserts#Mom's Kitchen
+Cookies, Chocolate Chip#CookdessSOoHmT#12.26#19#desserts#The Baking Pan
+Cookies, Peanut Butter#Cookdess2UcMI2#7.82#5#desserts#Mom's Kitchen
+Cookies, Peanut Butter#Cookdess1cILme#7.46#20#desserts#The Baking Pan
+Mousse, Chocolate#MousdessDpN4sQ#6.25#20#desserts#Mom's Kitchen
+Mousse, Chocolate#Mousdess8FyFT8#5.96#1#desserts#The Baking Pan
+Mousse, Blueberry Maple#MousdessacwrkO#7.28#7#desserts#Mom's Kitchen
+Mousse, Blueberry Maple#MousdessbiCMFg#7.21#12#desserts#The Baking Pan
+Mousse, Chocolate Banana#MousdessIeW4qz#5.13#2#desserts#Mom's Kitchen
+Mousse, Chocolate Banana#Mousdess1De9oL#5.08#19#desserts#The Baking Pan
+Mousse, Cherry#Mousdesss1bF8H#13.05#20#desserts#Mom's Kitchen
+Mousse, Cherry#Mousdess0ujevx#12.43#1#desserts#The Baking Pan
+Mousse, Eggnog#MousdessZ38hXj#9.07#10#desserts#Mom's Kitchen
+Mousse, Eggnog#Mousdesshs05ST#8.81#8#desserts#The Baking Pan
+Mousse, Strawberry#MousdessHCDlBK#5.58#3#desserts#Mom's Kitchen
+Mousse, Strawberry#MousdessSZ4PyW#5.36#6#desserts#The Baking Pan
+Sherbet, Cantaloupe#Sherdess3DCxUg#3.11#9#desserts#Mom's Kitchen
+Sherbet, Cantaloupe#Sherdesscp2VIz#2.99#7#desserts#The Baking Pan
+Sherbet, Lemon Milk#Sherdess1JVFOS#7.57#9#desserts#Mom's Kitchen
+Sherbet, Lemon Milk#SherdessC865vu#7.57#0#desserts#The Baking Pan
+Sherbet, Orange Crush#Sherdess8W8Mb9#4.32#18#desserts#Mom's Kitchen
+Sherbet, Orange Crush#SherdessxmVJBF#4.16#10#desserts#The Baking Pan
+Sherbet, Blueberry#SherdessFAgxqp#3.46#9#desserts#Mom's Kitchen
+Sherbet, Blueberry#SherdessMPL87u#3.60#6#desserts#The Baking Pan
+Sherbet, Raspberry#Sherdesse86ugA#6.08#1#desserts#Mom's Kitchen
+Sherbet, Raspberry#Sherdesslc1etR#5.85#12#desserts#The Baking Pan
+Sherbet, Strawberry#SherdessFwv09m#4.63#17#desserts#Mom's Kitchen
+Sherbet, Strawberry#SherdessKB0H7q#4.81#20#desserts#The Baking Pan
+Tart, Apple#TartdessrsTyXA#3.35#18#desserts#Mom's Kitchen
+Tart, Apple#Tartdessp7pyiy#3.13#11#desserts#The Baking Pan
+Tart, Almond#TartdessC7FARL#6.62#10#desserts#Mom's Kitchen
+Tart, Almond#Tartdess1V1A1c#6.68#13#desserts#The Baking Pan
+Tart, Blueberry#TartdesssQZRXX#10.28#10#desserts#Mom's Kitchen
+Tart, Blueberry#TartdessUSJSuc#10.28#9#desserts#The Baking Pan
+Tart, Chocolate-Pear#Tartdess2pdOE4#5.67#17#desserts#Mom's Kitchen
+Tart, Chocolate-Pear#TartdessL3aEDd#5.51#9#desserts#The Baking Pan
+Tart, Lemon Fudge#Tartdess9DhZUT#3.88#3#desserts#Mom's Kitchen
+Tart, Lemon Fudge#TartdesshzLOWt#3.96#13#desserts#The Baking Pan
+Tart, Pecan#TartdessvSbXzd#11.80#3#desserts#Mom's Kitchen
+Tart, Pecan#Tartdess6YXJec#11.04#13#desserts#The Baking Pan
+Tart, Pineapple#TartdesseMfJFe#9.01#18#desserts#Mom's Kitchen
+Tart, Pineapple#TartdessA2Wftr#8.44#13#desserts#The Baking Pan
+Tart, Pear#Tartdess4a1BUc#10.09#2#desserts#Mom's Kitchen
+Tart, Pear#TartdessNw8YPG#10.68#5#desserts#The Baking Pan
+Tart, Raspberry#TartdessAVnpP6#6.18#7#desserts#Mom's Kitchen
+Tart, Raspberry#TartdessfVxZFf#5.95#9#desserts#The Baking Pan
+Tart, Strawberry#Tartdess4IUcZW#4.75#8#desserts#Mom's Kitchen
+Tart, Strawberry#Tartdess2BeEDb#4.61#17#desserts#The Baking Pan
+Tart, Raspberry#TartdesshyBd24#1.85#5#desserts#Mom's Kitchen
+Tart, Raspberry#Tartdess5fqxgy#1.94#20#desserts#The Baking Pan
+Trifle, Berry#TrifdessmEkbU2#12.48#19#desserts#Mom's Kitchen
+Trifle, Berry#TrifdessAV9Ix8#12.60#18#desserts#The Baking Pan
+Trifle, American#TrifdesscsdSCd#4.70#17#desserts#Mom's Kitchen
+Trifle, American#TrifdessTArskm#4.35#11#desserts#The Baking Pan
+Trifle, English#TrifdessX87q8T#8.20#9#desserts#Mom's Kitchen
+Trifle, English#Trifdess52l955#8.12#11#desserts#The Baking Pan
+Trifle, Orange#TrifdesslUwxwe#9.74#15#desserts#Mom's Kitchen
+Trifle, Orange#TrifdessFrfCHP#10.22#1#desserts#The Baking Pan
+Trifle, Pumpkin#TrifdessJKFN96#4.72#7#desserts#Mom's Kitchen
+Trifle, Pumpkin#TrifdessMNw4EV#4.95#16#desserts#The Baking Pan
+Trifle, Scottish#TrifdessFa0JdK#13.63#0#desserts#Mom's Kitchen
+Trifle, Scottish#TrifdessAAUQCN#14.03#6#desserts#The Baking Pan
+Trifle, Sherry#TrifdesscuttJg#4.42#5#desserts#Mom's Kitchen
+Trifle, Sherry#TrifdesspRGpfP#4.21#19#desserts#The Baking Pan
+Trifle, Strawberry#TrifdessAd5TpV#3.58#11#desserts#Mom's Kitchen
+Trifle, Strawberry#Trifdess1rtW0A#3.58#3#desserts#The Baking Pan
+Trifle, Scotch Whiskey#Trifdess2zJsGi#5.44#5#desserts#Mom's Kitchen
+Trifle, Scotch Whiskey#TrifdessL8nuI6#5.18#5#desserts#The Baking Pan
+Cheesecake, Amaretto#CheedessOJBqfD#11.89#5#desserts#Mom's Kitchen
+Cheesecake, Amaretto#CheedessVnDf14#11.89#9#desserts#The Baking Pan
+Cheesecake, Apple#Cheedessuks1YK#11.22#15#desserts#Mom's Kitchen
+Cheesecake, Apple#CheedessMYKaKK#11.01#14#desserts#The Baking Pan
+Cheesecake, Apricot#CheedessKUxTYY#12.34#16#desserts#Mom's Kitchen
+Cheesecake, Apricot#CheedessMvB1pr#11.88#18#desserts#The Baking Pan
+Cheesecake, Australian#CheedessQ9WAIn#2.70#9#desserts#Mom's Kitchen
+Cheesecake, Australian#CheedessE6Jyjc#2.53#14#desserts#The Baking Pan
+Cheesecake, Arkansas#CheedessTbqzmw#6.98#9#desserts#Mom's Kitchen
+Cheesecake, Arkansas#CheedesstWJZfC#6.66#5#desserts#The Baking Pan
+Cheesecake, Blueberry#Cheedessyo51KL#8.07#11#desserts#Mom's Kitchen
+Cheesecake, Blueberry#Cheedess4Hz7P4#8.62#5#desserts#The Baking Pan
+Cheesecake, Cherry#CheedessEahRkC#4.40#14#desserts#Mom's Kitchen
+Cheesecake, Cherry#Cheedess3Nx4jZ#4.65#3#desserts#The Baking Pan
+Cheesecake, Cran-Raspberry#CheedessrJsr9i#13.47#20#desserts#Mom's Kitchen
+Cheesecake, Cran-Raspberry#CheedesshcuXCy#14.00#6#desserts#The Baking Pan
+Cheesecake, German Chocolate#CheedesswayvJL#12.03#16#desserts#Mom's Kitchen
+Cheesecake, German Chocolate#CheedessebTAeB#11.58#0#desserts#The Baking Pan
+Cheesecake, Turtle#CheedessLqgeIA#12.19#6#desserts#Mom's Kitchen
+Cheesecake, Turtle#CheedessvyNohA#12.07#19#desserts#The Baking Pan
+Brownies, Apple#BrowdessIDW1Cc#5.44#12#desserts#Mom's Kitchen
+Brownies, Apple#BrowdessyRMrAH#5.14#12#desserts#The Baking Pan
+Brownies, Fudge#BrowdessmIHIFJ#5.19#8#desserts#Mom's Kitchen
+Brownies, Fudge#BrowdessqewJ38#5.10#17#desserts#The Baking Pan
+Brownies, Almond Macaroon#BrowdessniK7QI#10.57#3#desserts#Mom's Kitchen
+Brownies, Almond Macaroon#BrowdessgkXURH#10.36#17#desserts#The Baking Pan
+Brownies, Butterscotch#BrowdesslpA06E#7.16#13#desserts#Mom's Kitchen
+Brownies, Butterscotch#BrowdessK5hofE#7.30#6#desserts#The Baking Pan
+Brownies, Caramel#BrowdessVGfoA8#3.07#3#desserts#Mom's Kitchen
+Brownies, Caramel#Browdess5jvVMM#3.13#11#desserts#The Baking Pan
+Brownies, Cherry#Browdessyoa66A#3.39#17#desserts#Mom's Kitchen
+Brownies, Cherry#BrowdessIg2JuF#3.39#11#desserts#The Baking Pan
+Brownies, Chocolate Chip#Browdessb9dc59#6.18#10#desserts#Mom's Kitchen
+Brownies, Chocolate Chip#BrowdessvW4nOx#6.43#14#desserts#The Baking Pan
+Brownies, Coconut#BrowdessWPHrVR#3.06#15#desserts#Mom's Kitchen
+Brownies, Coconut#BrowdessGVBlML#2.86#11#desserts#The Baking Pan
+Brownies, Cream Cheese#Browdess1OyRay#12.74#4#desserts#Mom's Kitchen
+Brownies, Cream Cheese#Browdess2fRsNv#12.61#19#desserts#The Baking Pan
+Brownies, Fudge Mint#Browdessl7DP7k#11.45#14#desserts#Mom's Kitchen
+Brownies, Fudge Mint#Browdessv70VKQ#11.34#16#desserts#The Baking Pan
+Brownies, Mint Chip#BrowdessDDMvF7#1.81#15#desserts#Mom's Kitchen
+Brownies, Mint Chip#Browdess0j9PBD#1.84#9#desserts#The Baking Pan
+Cake, Angel Food#CakedessEaqGaE#11.18#3#desserts#Mom's Kitchen
+Cake, Angel Food#CakedessJyAyFe#11.18#14#desserts#The Baking Pan
+Cake, Chocolate#CakedessKLXFbn#10.11#7#desserts#Mom's Kitchen
+Cake, Chocolate#CakedessfNP5Hg#9.91#14#desserts#The Baking Pan
+Cake, Carrot#CakedessUTgMoV#4.20#13#desserts#Mom's Kitchen
+Cake, Carrot#CakedessQdkaYg#4.00#3#desserts#The Baking Pan
+Cake, Lemon Blueberry#CakedessepkeEW#11.73#16#desserts#Mom's Kitchen
+Cake, Lemon Blueberry#CakedessHTKyQs#12.42#16#desserts#The Baking Pan
+Cake Triple Fudge#CakedessiZ75lR#7.92#7#desserts#Mom's Kitchen
+Cake Triple Fudge#CakedessWRrSXP#8.00#15#desserts#The Baking Pan
+Cake, Walnut#CakedessveYVXZ#10.83#17#desserts#Mom's Kitchen
+Cake, Walnut#Cakedesse22rT5#11.04#7#desserts#The Baking Pan
+Cake, French Apple#CakedessjA2Kxv#1.95#0#desserts#Mom's Kitchen
+Cake, French Apple#CakedessNBHCk0#1.86#20#desserts#The Baking Pan
+Cake, Fig#CakedessOncX4y#6.82#3#desserts#Mom's Kitchen
+Cake, Fig#CakedessTJtffn#7.08#10#desserts#The Baking Pan
+Cake, Maple#CakedessnoGPRF#3.04#11#desserts#Mom's Kitchen
+Cake, Maple#CakedessfVattM#3.22#4#desserts#The Baking Pan
+Cake, Devil's Food#CakedessiXcDCt#4.73#7#desserts#Mom's Kitchen
+Cake, Devil's Food#CakedessnBZk45#4.82#6#desserts#The Baking Pan
+Cake, Double-Lemon#CakedesskeS0Vd#3.46#9#desserts#Mom's Kitchen
+Cake, Double-Lemon#Cakedess50vx53#3.60#6#desserts#The Baking Pan
+Sorbet, Blackberry#SorbdessQoa0CE#9.88#15#desserts#Mom's Kitchen
+Sorbet, Blackberry#SorbdessqoOYzv#9.78#9#desserts#The Baking Pan
diff --git a/db/examples_java/src/db/GettingStarted/vendors.txt b/db/examples_java/src/db/GettingStarted/vendors.txt
new file mode 100644
index 000000000..528e1b110
--- /dev/null
+++ b/db/examples_java/src/db/GettingStarted/vendors.txt
@@ -0,0 +1,6 @@
+TriCounty Produce#309 S. Main Street#Middle Town#MN#55432#763 555 5761#Mort Dufresne#763 555 5765
+Simply Fresh#15612 Bogart Lane#Harrigan#WI#53704#420 333 3912#Cheryl Swedberg#420 333 3952
+Off the Vine#133 American Ct.#Centennial#IA#52002#563 121 3800#Bob King#563 121 3800 x54
+The Pantry#1206 N. Creek Way#Middle Town#MN#55432#763 555 3391#Sully Beckstrom#763 555 3391
+Mom's Kitchen#53 Yerman Ct.#Middle Town#MN#55432#763 554 9200#Maggie Kultgen#763 554 9200 x12
+The Baking Pan#1415 53rd Ave.#Dutchin#MN#56304#320 442 2277#Mike Roan#320 442 6879
diff --git a/db/examples_java/src/db/LockExample.java b/db/examples_java/src/db/LockExample.java
new file mode 100644
index 000000000..3144812e9
--- /dev/null
+++ b/db/examples_java/src/db/LockExample.java
@@ -0,0 +1,212 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: LockExample.java,v 12.5 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Vector;
+
+//
+// An example of a program using Lock and related classes.
+//
+class LockExample {
+ private static final String progname = "LockExample";
+ private static final File LOCK_HOME = new File("TESTDIR");
+ Environment dbenv;
+
+ public LockExample(File home, int maxlocks, boolean do_unlink)
+ throws DatabaseException, FileNotFoundException {
+
+ if (do_unlink) {
+ Environment.remove(home, true, null);
+ }
+
+ EnvironmentConfig config = new EnvironmentConfig();
+ config.setErrorStream(System.err);
+ config.setErrorPrefix("LockExample");
+ config.setMaxLocks(maxlocks);
+ config.setAllowCreate(true);
+ config.setInitializeLocking(true);
+ dbenv = new Environment(home, config);
+ }
+
+ public void close() throws DatabaseException {
+ dbenv.close();
+ }
+
+ // Prompts for a line, and keeps prompting until a non blank
+ // line is returned. Returns null on error.
+ //
+ public static 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;
+ }
+
+ // Not terribly 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.
+ //
+ public static 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();
+ }
+
+ public void run() throws DatabaseException {
+ long held;
+ int len = 0, locker;
+ int ret;
+ boolean did_get = false;
+ int lockid = 0;
+ InputStreamReader in = new InputStreamReader(System.in);
+ Vector locks = new Vector();
+
+ //
+ // Accept lock requests.
+ //
+ locker = dbenv.createLockerID();
+ for (held = 0;;) {
+ String opbuf = askForLine(in, System.out,
+ "Operation get/release [get]> ");
+ if (opbuf == null)
+ break;
+
+ try {
+ if (opbuf.equals("get")) {
+ // Acquire a lock.
+ String objbuf = askForLine(in, System.out,
+ "input object (text string) to lock> ");
+ if (objbuf == null)
+ break;
+
+ String lockbuf;
+ do {
+ lockbuf = askForLine(in, System.out,
+ "lock type read/write [read]> ");
+ if (lockbuf == null)
+ break;
+ len = lockbuf.length();
+ } while (len >= 1 &&
+ !lockbuf.equals("read") &&
+ !lockbuf.equals("write"));
+
+ LockRequestMode lock_type;
+ if (len <= 1 || lockbuf.equals("read"))
+ lock_type = LockRequestMode.READ;
+ else
+ lock_type = LockRequestMode.WRITE;
+
+ DatabaseEntry entry = new DatabaseEntry(objbuf.getBytes());
+
+ Lock lock;
+ did_get = true;
+ lock = dbenv.getLock(locker, true, entry, lock_type);
+ lockid = locks.size();
+ locks.addElement(lock);
+ } else {
+ // Release a lock.
+ String objbuf;
+ objbuf = askForLine(in, System.out,
+ "input lock to release> ");
+ if (objbuf == null)
+ break;
+
+ lockid = Integer.parseInt(objbuf, 16);
+ if (lockid < 0 || lockid >= locks.size()) {
+ System.out.println("Lock #" + lockid + " out of range");
+ continue;
+ }
+ did_get = false;
+ Lock lock = (Lock)locks.elementAt(lockid);
+ dbenv.putLock(lock);
+ }
+ System.out.println("Lock #" + lockid + " " +
+ (did_get ? "granted" : "released"));
+ held += did_get ? 1 : -1;
+ } catch (LockNotGrantedException lnge) {
+ System.err.println("Lock not granted");
+ } catch (DeadlockException de) {
+ System.err.println("LockExample: lock_" +
+ (did_get ? "get" : "put") +
+ ": returned DEADLOCK");
+ } catch (DatabaseException dbe) {
+ System.err.println("LockExample: lock_get: " + dbe.toString());
+ }
+ }
+ System.out.println();
+ System.out.println("Closing lock region " + String.valueOf(held) +
+ " locks held");
+ }
+
+ private static void usage() {
+ System.err.println("usage: LockExample [-u] [-h home] [-m maxlocks]");
+ System.exit(1);
+ }
+
+ public static void main(String[] argv) {
+ File home = LOCK_HOME;
+ boolean do_unlink = false;
+ int maxlocks = 0;
+
+ for (int i = 0; i < argv.length; ++i) {
+ if (argv[i].equals("-h")) {
+ if (++i >= argv.length)
+ usage();
+ home = new File(argv[i]);
+ } else if (argv[i].equals("-m")) {
+ if (++i >= argv.length)
+ usage();
+
+ try {
+ maxlocks = Integer.parseInt(argv[i]);
+ } catch (NumberFormatException nfe) {
+ usage();
+ }
+ } else if (argv[i].equals("-u")) {
+ do_unlink = true;
+ } else {
+ usage();
+ }
+ }
+
+ try {
+ LockExample app = new LockExample(home, maxlocks, do_unlink);
+ app.run();
+ app.close();
+ } catch (DatabaseException dbe) {
+ System.err.println(progname + ": " + dbe.toString());
+ } catch (Throwable t) {
+ System.err.println(progname + ": " + t.toString());
+ }
+ System.out.println("LockExample completed");
+ }
+}
diff --git a/db/examples_java/src/db/RPCExample.java b/db/examples_java/src/db/RPCExample.java
new file mode 100644
index 000000000..68230300d
--- /dev/null
+++ b/db/examples_java/src/db/RPCExample.java
@@ -0,0 +1,107 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RPCExample.java,v 12.4 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.OutputStream;
+
+/*
+ * An example of a program configuring a database environment as an RPC client.
+ */
+public class RPCExample {
+ private static final String progname = "RPCExample";
+ private static final File DATABASE_HOME = new File("TESTDIR");
+
+ private static void runApplication(Environment dbenv)
+ throws DatabaseException, FileNotFoundException {
+
+ // Do something interesting...
+ // Your application goes here.
+ DatabaseConfig config = new DatabaseConfig();
+ config.setAllowCreate(true);
+ config.setType(DatabaseType.BTREE);
+ Database db = dbenv.openDatabase(null, "test.db", null, config);
+ db.close();
+ }
+
+ private static void setupEnvironment(File home,
+ OutputStream errs)
+ throws DatabaseException, FileNotFoundException {
+
+ // Create an environment object and initialize it for error reporting.
+ EnvironmentConfig config = new EnvironmentConfig();
+ config.setErrorStream(errs);
+ config.setErrorPrefix(progname);
+
+ //
+ // We want to specify the shared memory buffer pool cachesize,
+ // but everything else is the default.
+ //
+ config.setCacheSize(64 * 1024);
+
+ // Open the environment with full transactional support.
+ config.setAllowCreate(true);
+ config.setInitializeCache(true);
+ config.setTransactional(true);
+ config.setInitializeLocking(true);
+
+ config.setRPCServer("localhost", 0, 0);
+
+ //
+ // open is declared to throw a FileNotFoundException, which normally
+ // shouldn't occur when allowCreate is set.
+ //
+ Environment dbenv = new Environment(home, config);
+
+ try {
+ // Start your application.
+ runApplication(dbenv);
+ } finally {
+ // Close the environment. Doing this in the finally block ensures
+ // it is done, even if an error is thrown.
+ dbenv.close();
+ }
+ }
+
+ private static void teardownEnvironment(File home,
+ OutputStream errs)
+ throws DatabaseException, FileNotFoundException {
+
+ // Remove the shared database regions.
+ EnvironmentConfig config = new EnvironmentConfig();
+
+ config.setErrorStream(errs);
+ config.setErrorPrefix(progname);
+ config.setRPCServer("localhost", 0, 0);
+ Environment.remove(home, true, config);
+ }
+
+ public static void main(String[] args) {
+ File home = DATABASE_HOME;
+
+ try {
+ System.out.println("Setup env");
+ setupEnvironment(home, System.err);
+
+ System.out.println("Teardown env");
+ teardownEnvironment(home, System.err);
+ } catch (DatabaseException dbe) {
+ System.err.println(progname + ": environment open: " + dbe.toString());
+ dbe.printStackTrace(System.err);
+ System.exit (1);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println(progname + ": unexpected open environment error " + fnfe);
+ System.exit (1);
+ }
+ }
+
+}
diff --git a/db/examples_java/src/db/SequenceExample.java b/db/examples_java/src/db/SequenceExample.java
new file mode 100644
index 000000000..63feb115a
--- /dev/null
+++ b/db/examples_java/src/db/SequenceExample.java
@@ -0,0 +1,93 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SequenceExample.java,v 12.4 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+
+class SequenceExample {
+ private static final int EXIT_SUCCESS = 0;
+ private static final int EXIT_FAILURE = 1;
+
+ public SequenceExample() {
+ }
+
+ public static void usage() {
+ System.out.println("usage: java " +
+ "db.SequenceExample [-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 {
+ SequenceExample app = new SequenceExample();
+ app.run(removeExistingDatabase, databaseName);
+ } catch (DatabaseException dbe) {
+ System.err.println("SequenceExample: " + dbe.toString());
+ System.exit(EXIT_FAILURE);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println("SequenceExample: " + fnfe.toString());
+ System.exit(EXIT_FAILURE);
+ }
+ System.exit(EXIT_SUCCESS);
+ }
+
+ public void run(boolean removeExistingDatabase, String databaseName)
+ throws DatabaseException, FileNotFoundException {
+
+ // Remove the previous database.
+ if (removeExistingDatabase)
+ new File(databaseName).delete();
+
+ // Create the database object.
+ // There is no environment for this simple example.
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setErrorStream(System.err);
+ dbConfig.setErrorPrefix("SequenceExample");
+ dbConfig.setType(DatabaseType.BTREE);
+ dbConfig.setAllowCreate(true);
+ Database table = new Database(databaseName, null, dbConfig);
+
+ SequenceConfig config = new SequenceConfig();
+ config.setAllowCreate(true);
+ DatabaseEntry key =
+ new DatabaseEntry("my_sequence".getBytes());
+ Sequence sequence = table.openSequence(null, key, config);
+
+ for (int i = 0; i < 10; i++) {
+ long seqnum = sequence.get(null, 1);
+ System.out.println("Got sequence number: " + seqnum);
+ }
+
+ sequence.close();
+ table.close();
+ }
+}
diff --git a/db/examples_java/src/db/TpcbExample.java b/db/examples_java/src/db/TpcbExample.java
new file mode 100644
index 000000000..9626746bd
--- /dev/null
+++ b/db/examples_java/src/db/TpcbExample.java
@@ -0,0 +1,789 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: TpcbExample.java,v 12.8 2006/08/24 14:46:02 bostic Exp $
+ */
+
+package db;
+
+import com.sleepycat.db.*;
+
+import java.io.File;
+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 {
+ 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.
+
+ Environment dbenv;
+ int accounts, branches, tellers, history;
+
+ public TpcbExample(File home,
+ int accounts, int branches, int tellers, int history,
+ int cachesize, boolean noSync)
+ throws DatabaseException, FileNotFoundException {
+
+ this.accounts = accounts;
+ this.branches = branches;
+ this.tellers = tellers;
+ this.history = history;
+
+ EnvironmentConfig config = new EnvironmentConfig();
+ config.setErrorStream(System.err);
+ config.setErrorPrefix(progname);
+ config.setCacheSize(cachesize == 0 ? 4 * 1024 * 1024 : cachesize);
+ config.setTxnNoSync(noSync);
+ config.setLockDetectMode(LockDetectMode.DEFAULT);
+ config.setAllowCreate(true);
+
+ config.setInitializeCache(true);
+ config.setTransactional(true);
+ config.setInitializeLocking(true);
+ config.setInitializeLogging(true);
+
+ dbenv = new Environment(home, config);
+ }
+
+ public void close()
+ throws DatabaseException {
+
+ try {
+ if (dbenv != null)
+ dbenv.close();
+ } finally {
+ dbenv = null;
+ }
+ }
+
+ //
+ // Initialize the database to the number of accounts, branches,
+ // history records, and tellers given to the constructor.
+ //
+ public void populate() {
+ Database 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 {
+ DatabaseConfig config = new DatabaseConfig();
+ config.setType(DatabaseType.HASH);
+ config.setHashNumElements(h_nelem);
+ config.setAllowCreate(true);
+ dbp = dbenv.openDatabase(null, "account", null, config);
+ } catch (Exception e1) {
+ // can be DatabaseException 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();
+ } catch (DatabaseException 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 {
+ DatabaseConfig config = new DatabaseConfig();
+ config.setType(DatabaseType.HASH);
+ config.setHashNumElements(h_nelem);
+ config.setHashFillFactor(1);
+ config.setPageSize(512);
+ config.setAllowCreate(true);
+ dbp = dbenv.openDatabase(null, "branch", null, config);
+ } catch (Exception e3) {
+ // can be DatabaseException 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();
+ } catch (DatabaseException 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 {
+ DatabaseConfig config = new DatabaseConfig();
+ config.setType(DatabaseType.HASH);
+ config.setHashNumElements(h_nelem);
+ config.setHashFillFactor(0);
+ config.setPageSize(512);
+ config.setAllowCreate(true);
+ dbp = dbenv.openDatabase(null, "teller", null, config);
+ } catch (Exception e5) {
+ // can be DatabaseException 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();
+ } catch (DatabaseException e6) {
+ errExit(e6, "Close of teller file failed");
+ }
+
+ if (verbose)
+ System.out.println("Populated tellers: " +
+ String.valueOf(start_tnum) + " - " +
+ String.valueOf(end_tnum));
+
+ try {
+ DatabaseConfig config = new DatabaseConfig();
+ config.setType(DatabaseType.RECNO);
+ config.setRecordLength(HISTORY_LEN);
+ config.setAllowCreate(true);
+ dbp = dbenv.openDatabase(null, "history", null, config);
+ } catch (Exception e7) {
+ // can be DatabaseException or FileNotFoundException
+ errExit(e7, "Create of history file failed");
+ }
+
+ populateHistory(dbp);
+
+ try {
+ dbp.close();
+ } catch (DatabaseException e8) {
+ errExit(e8, "Close of history file failed");
+ }
+ }
+
+ public void populateTable(Database dbp,
+ int start_id, int balance, int nrecs, String msg) {
+ Defrec drec = new Defrec();
+
+ DatabaseEntry kdbt = new DatabaseEntry(drec.data);
+ kdbt.setSize(4); // sizeof(int)
+ DatabaseEntry ddbt = new DatabaseEntry(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.putNoOverwrite(null, kdbt, ddbt);
+ }
+ } catch (DatabaseException dbe) {
+ System.err.println("Failure initializing " + msg + " file: " +
+ dbe.toString());
+ System.exit(1);
+ }
+ }
+
+ public void populateHistory(Database dbp) {
+ Histrec hrec = new Histrec();
+ hrec.set_amount(10);
+
+ byte[] arr = new byte[4]; // sizeof(int)
+ int i;
+ DatabaseEntry kdbt = new DatabaseEntry(arr);
+ kdbt.setSize(arr.length);
+ DatabaseEntry ddbt = new DatabaseEntry(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.append(null, kdbt, ddbt);
+ }
+ } catch (DatabaseException dbe) {
+ errExit(dbe, "Failure initializing history file");
+ }
+ }
+
+ static Random rand = new Random();
+ public static int random_int(int lo, int hi) {
+ int t = rand.nextInt();
+ if (t < 0)
+ t = -t;
+ int 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) & 0xff);
+ array[offset + 1] = (byte)((value >> 8) & 0xff);
+ array[offset + 2] = (byte)((value >> 16) & 0xff);
+ array[offset + 3] = (byte)((value >> 24) & 0xff);
+ }
+
+ // 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 Database adb, bdb, hdb, tdb;
+
+ public TxnThread(String name, int ntxns) {
+ super(name);
+ this.ntxns = ntxns;
+ }
+
+ public void run() {
+ double gtps, itps;
+ int n, ret;
+ long start_time, end_time;
+
+ //
+ // Open the database files.
+ //
+ int err;
+ try {
+ DatabaseConfig config = new DatabaseConfig();
+ config.setTransactional(true);
+ adb = dbenv.openDatabase(null, "account", null, config);
+ bdb = dbenv.openDatabase(null, "branch", null, config);
+ tdb = dbenv.openDatabase(null, "teller", null, config);
+ hdb = dbenv.openDatabase(null, "history", null, config);
+ } catch (DatabaseException dbe) {
+ TpcbExample.errExit(dbe, "Open of db files failed");
+ } catch (FileNotFoundException fnfe) {
+ TpcbExample.errExit(fnfe, "Open of db files failed, missing file");
+ }
+
+ start_time = (new Date()).getTime();
+ for (txns = n = ntxns, failed = 0; n-- > 0;)
+ if ((ret = txn()) != 0)
+ failed++;
+ end_time = (new Date()).getTime();
+ if (end_time == start_time)
+ end_time++;
+
+ System.out.println(getName() + ": " + (long)txns + " txns: " +
+ failed + " failed, " + TpcbExample.showRounded(
+ (txns - failed) / (double)(end_time - start_time), 2) + " TPS");
+
+ try {
+ adb.close();
+ bdb.close();
+ tdb.close();
+ hdb.close();
+ } catch (DatabaseException dbe2) {
+ TpcbExample.errExit(dbe2, "Close of db files failed");
+ }
+ }
+
+ //
+ // XXX Figure out the appropriate way to pick out IDs.
+ //
+ int txn() {
+ Cursor acurs = null;
+ Cursor bcurs = null;
+ Cursor hcurs = null;
+ Cursor tcurs = null;
+ Transaction t = null;
+
+ Defrec rec = new Defrec();
+ Histrec hrec = new Histrec();
+ int account, branch, teller;
+
+ DatabaseEntry d_dbt = new DatabaseEntry();
+ DatabaseEntry d_histdbt = new DatabaseEntry();
+ DatabaseEntry k_dbt = new DatabaseEntry();
+ DatabaseEntry k_histdbt = new DatabaseEntry();
+
+ 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.setData(rec.data);
+ d_dbt.setUserBuffer(rec.length(), true);
+
+ 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.setPartial(0, 0, true);
+
+ // START PER-TRANSACTION TIMING.
+ //
+ // Technically, TPCB requires a limit on response time, you only
+ // get to count transactions that complete within 2 seconds.
+ // That's not an issue for this sample application -- regardless,
+ // here's where the transaction begins.
+ try {
+ t = dbenv.beginTransaction(null, null);
+
+ acurs = adb.openCursor(t, null);
+ bcurs = bdb.openCursor(t, null);
+ tcurs = tdb.openCursor(t, null);
+ hcurs = hdb.openCursor(t, null);
+
+ // Account record
+ k_dbt.setRecordNumber(account);
+ if (acurs.getSearchKey(k_dbt, d_dbt, null) != OperationStatus.SUCCESS)
+ throw new Exception("acurs get failed");
+ rec.set_balance(rec.get_balance() + 10);
+ acurs.putCurrent(d_dbt);
+
+ // Branch record
+ k_dbt.setRecordNumber(branch);
+ if (bcurs.getSearchKey(k_dbt, d_dbt, null) != OperationStatus.SUCCESS)
+ throw new Exception("bcurs get failed");
+ rec.set_balance(rec.get_balance() + 10);
+ bcurs.putCurrent(d_dbt);
+
+ // Teller record
+ k_dbt.setRecordNumber(teller);
+ if (tcurs.getSearchKey(k_dbt, d_dbt, null) != OperationStatus.SUCCESS)
+ throw new Exception("ccurs get failed");
+ rec.set_balance(rec.get_balance() + 10);
+ tcurs.putCurrent(d_dbt);
+
+ // History record
+ d_histdbt.setPartial(0, 0, false);
+ d_histdbt.setData(hrec.data);
+ d_histdbt.setUserBuffer(hrec.length(), true);
+ if (hdb.append(t, k_histdbt, d_histdbt) != OperationStatus.SUCCESS)
+ throw new DatabaseException("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.
+ Transaction tmptxn = t;
+ t = null;
+ tmptxn.commit();
+
+ // 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 (DatabaseException 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 {
+ File home = new File("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 = new File(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);
+ } 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();
+ } catch (DatabaseException 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;
+}
diff --git a/db/examples_java/src/db/repquote/RepConfig.java b/db/examples_java/src/db/repquote/RepConfig.java
new file mode 100644
index 000000000..36b1dc892
--- /dev/null
+++ b/db/examples_java/src/db/repquote/RepConfig.java
@@ -0,0 +1,104 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RepConfig.java,v 1.5 2006/09/08 20:32:02 bostic Exp $
+ */
+
+package db.repquote;
+
+import java.util.Vector;
+
+import com.sleepycat.db.ReplicationHostAddress;
+import com.sleepycat.db.ReplicationManagerStartPolicy;
+
+public class RepConfig
+{
+ // Constant values used in the RepQuote application.
+ public static final String progname = "RepQuoteExample";
+ public static final int CACHESIZE = 10 * 1024 * 1024;
+ public static final int SLEEPTIME = 5000;
+
+ // member variables containing configuration information
+ public String home; // String specifying the home directory for rep files.
+ public Vector otherHosts; // stores an optional set of "other" hosts.
+ public int priority; // priority within the replication group.
+ public ReplicationManagerStartPolicy startPolicy;
+ public ReplicationHostAddress thisHost; // The host address to listen to.
+ // Optional parameter specifying the # of sites in the replication group.
+ public int totalSites;
+ public boolean verbose;
+
+ // member variables used internally.
+ private int currOtherHost;
+ private boolean gotListenAddress;
+
+ public RepConfig()
+ {
+ startPolicy = ReplicationManagerStartPolicy.REP_ELECTION;
+ home = "TESTDIR";
+ gotListenAddress = false;
+ totalSites = 0;
+ priority = 100;
+ verbose = false;
+ currOtherHost = 0;
+ thisHost = new ReplicationHostAddress();
+ otherHosts = new Vector();
+ }
+
+ public java.io.File getHome()
+ {
+ return new java.io.File(home);
+ }
+
+ public void setThisHost(String host, int port)
+ {
+ gotListenAddress = true;
+ thisHost.port = port;
+ thisHost.host = host;
+ }
+
+ public ReplicationHostAddress getThisHost()
+ {
+ if (!gotListenAddress)
+ System.err.println("Warning: no host specified, returning default.");
+ return thisHost;
+ }
+
+ public boolean gotListenAddress() {
+ return gotListenAddress;
+ }
+
+ public void addOtherHost(String host, int port, boolean peer)
+ {
+ ReplicationHostAddress newInfo =
+ new ReplicationHostAddress(host, port, peer, false);
+ otherHosts.add(newInfo);
+ }
+
+ public ReplicationHostAddress getFirstOtherHost()
+ {
+ currOtherHost = 0;
+ if (otherHosts.size() == 0)
+ return null;
+ return (ReplicationHostAddress)otherHosts.get(currOtherHost);
+ }
+
+ public ReplicationHostAddress getNextOtherHost()
+ {
+ currOtherHost++;
+ if (currOtherHost >= otherHosts.size())
+ return null;
+ return (ReplicationHostAddress)otherHosts.get(currOtherHost);
+ }
+
+ public ReplicationHostAddress getOtherHost(int i)
+ {
+ if (i >= otherHosts.size())
+ return null;
+ return (ReplicationHostAddress)otherHosts.get(i);
+ }
+}
+
diff --git a/db/examples_java/src/db/repquote/RepQuoteEnvironment.java b/db/examples_java/src/db/repquote/RepQuoteEnvironment.java
new file mode 100644
index 000000000..f2ace5373
--- /dev/null
+++ b/db/examples_java/src/db/repquote/RepQuoteEnvironment.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RepQuoteEnvironment.java,v 1.3 2006/08/24 14:46:03 bostic Exp $
+ */
+
+package db.repquote;
+
+import com.sleepycat.db.*;
+
+/*
+ * A simple wrapper class, that facilitates storing some
+ * custom information with an Environment object.
+ * The information is used by the Replication callback (handleEvent).
+ */
+public class RepQuoteEnvironment extends Environment
+{
+ private boolean isMaster;
+
+ public RepQuoteEnvironment(final java.io.File host,
+ EnvironmentConfig config)
+ throws DatabaseException, java.io.FileNotFoundException
+ {
+ super(host, config);
+ isMaster = false;
+ }
+
+ boolean getIsMaster()
+ {
+ return isMaster;
+ }
+
+ public void setIsMaster(boolean isMaster)
+ {
+ this.isMaster = isMaster;
+ }
+}
+
diff --git a/db/examples_java/src/db/repquote/RepQuoteExample.java b/db/examples_java/src/db/repquote/RepQuoteExample.java
new file mode 100644
index 000000000..30358d938
--- /dev/null
+++ b/db/examples_java/src/db/repquote/RepQuoteExample.java
@@ -0,0 +1,407 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RepQuoteExample.java,v 1.10 2006/09/09 14:12:42 bostic Exp $
+ */
+
+package db.repquote;
+
+import java.io.FileNotFoundException;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.lang.Thread;
+import java.lang.InterruptedException;
+
+import com.sleepycat.db.*;
+import db.repquote.RepConfig;
+
+/**
+ * RepQuoteExample 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 numerical value as input, and stores this information
+ * into a replicated database; either master or clients can display the
+ * contents of the database.
+ * <p>
+ * The options to start a given replication node are:
+ * <pre>
+ * -M (configure this process to start as a master)
+ * -C (configure this process to start as a client)
+ * -F Call a full election at startup
+ * -h environment home directory
+ * -m host:port (required; m stands for me)
+ * -o host:port (optional; o stands for other; any number of these may
+ * be specified)
+ * -f host:port (optional; f stands for friend, and indicates a peer
+ * relationship to the specified site)
+ * -n nsites (optional; number of sites in replication group.
+ * Defaults to 0 in which case we dynamically compute the number of
+ * sites in the replication group)
+ * -p priority (optional: defaults to 100)
+ * -v Enable verbose logging
+ * </pre>
+ * <p>
+ * A typical session begins with a command such as the following to start a
+ * master:
+ *
+ * <pre>
+ * java db.repquote.RepQuoteExample -M -h dir1 -m localhost:6000
+ * </pre>
+ *
+ * and several clients:
+ *
+ * <pre>
+ * java db.repquote.RepQuoteExample -C -h dir2
+ * -m localhost:6001 -o localhost:6000
+ * java db.repquote.RepQuoteExample -C -h dir3
+ * -m localhost:6002 -o localhost:6000
+ * java db.repquote.RepQuoteExample -C -h dir4
+ * -m localhost:6003 -o localhost:6000
+ * </pre>
+ *
+ * <p>
+ * Each process is a member of a DB replication group. The sample application
+ * expects the following commands to stdin:
+ * <ul>
+ * <li>NEWLINE -- print all the stocks held in the database</li>
+ * <li>quit -- shutdown this node</li>
+ * <li>exit -- shutdown this node</li>
+ * <li>stock_symbol number -- enter this stock and number into the
+ * database</li>
+ * </ul>
+ */
+
+public class RepQuoteExample implements EventHandler
+{
+ private RepConfig appConfig;
+ private RepQuoteEnvironment dbenv;
+
+ public static void usage()
+ {
+ System.err.println("usage: " + RepConfig.progname);
+ System.err.println("[-C][-M][-F][-h home][-o host:port]" +
+ "[-m host:port][-f host:port][-n nsites][-p priority][-v]");
+
+ System.err.println(
+ "\t -C start the site as client of the replication group\n" +
+ "\t -F Call a full election at startup\n" +
+ "\t -M start the site as master of the replication group\n" +
+ "\t -f host:port (optional; f stands for friend and \n" +
+ "\t indicates a peer relationship to the specified site)\n" +
+ "\t -h home directory\n" +
+ "\t -m host:port (required; m stands for me)\n" +
+ "\t -n nsites (optional; number of sites in replication \n" +
+ "\t group; defaults to 0\n" +
+ "\t In which case the number of sites are computed \n" +
+ "\t dynamically\n" +
+ "\t -o host:port (optional; o stands for other; any number\n" +
+ "\t of these may be specified)\n" +
+ "\t -p priority (optional: defaults to 100)\n" +
+ "\t -v Enable verbose logging\n");
+
+ System.exit(1);
+ }
+
+ public static void main(String[] argv)
+ throws Exception
+ {
+ RepConfig config = new RepConfig();
+ boolean isPeer;
+ String tmpHost;
+ int tmpPort = 0;
+ // Extract the command line parameters
+ for (int i = 0; i < argv.length; i++)
+ {
+ isPeer = false;
+ if (argv[i].compareTo("-C") == 0) {
+ config.startPolicy = ReplicationManagerStartPolicy.REP_CLIENT;
+ } else if (argv[i].compareTo("-F") == 0) {
+ config.startPolicy =
+ ReplicationManagerStartPolicy.REP_FULL_ELECTION;
+ } else if (argv[i].compareTo("-h") == 0) {
+ // home - a string arg.
+ i++;
+ config.home = argv[i];
+ } else if (argv[i].compareTo("-M") == 0) {
+ config.startPolicy = ReplicationManagerStartPolicy.REP_MASTER;
+ } else if (argv[i].compareTo("-m") == 0) {
+ // "me" should be host:port
+ i++;
+ String[] words = argv[i].split(":");
+ if (words.length != 2) {
+ System.err.println(
+ "Invalid host specification host:port needed.");
+ usage();
+ }
+ try {
+ tmpPort = Integer.parseInt(words[1]);
+ } catch (NumberFormatException nfe) {
+ System.err.println("Invalid host specification, " +
+ "could not parse port number.");
+ usage();
+ }
+ config.setThisHost(words[0], tmpPort);
+ } else if (argv[i].compareTo("-n") == 0) {
+ i++;
+ config.totalSites = Integer.parseInt(argv[i]);
+ } else if (argv[i].compareTo("-f") == 0 ||
+ argv[i].compareTo("-o") == 0) {
+ if (argv[i] == "-f")
+ isPeer = true;
+ i++;
+ String[] words = argv[i].split(":");
+ if (words.length != 2) {
+ System.err.println(
+ "Invalid host specification host:port needed.");
+ usage();
+ }
+ try {
+ tmpPort = Integer.parseInt(words[1]);
+ } catch (NumberFormatException nfe) {
+ System.err.println("Invalid host specification, " +
+ "could not parse port number.");
+ usage();
+ }
+ config.addOtherHost(words[0], tmpPort, isPeer);
+ } else if (argv[i].compareTo("-p") == 0) {
+ i++;
+ config.priority = Integer.parseInt(argv[i]);
+ } else if (argv[i].compareTo("-v") == 0) {
+ config.verbose = true;
+ } else {
+ System.err.println("Unrecognized option: " + argv[i]);
+ usage();
+ }
+
+ }
+
+ // Error check command line.
+ if ((!config.gotListenAddress()) || config.home.length() == 0)
+ usage();
+
+ RepQuoteExample runner = null;
+ try {
+ runner = new RepQuoteExample();
+ runner.init(config);
+
+ // Sleep to give ourselves time to find a master.
+ //try {
+ // Thread.sleep(5000);
+ //} catch (InterruptedException e) {}
+
+ runner.doloop();
+ runner.terminate();
+ } catch (DatabaseException dbe) {
+ System.err.println("Caught an exception during " +
+ "initialization or processing: " + dbe);
+ if (runner != null)
+ runner.terminate();
+ }
+ } // end main
+
+ public RepQuoteExample()
+ throws DatabaseException
+ {
+ appConfig = null;
+ dbenv = null;
+ }
+
+ public int init(RepConfig config)
+ throws DatabaseException
+ {
+ int ret = 0;
+ appConfig = config;
+ EnvironmentConfig envConfig = new EnvironmentConfig();
+ envConfig.setErrorStream(System.err);
+ envConfig.setErrorPrefix(RepConfig.progname);
+
+ envConfig.setReplicationManagerLocalSite(appConfig.getThisHost());
+ for (ReplicationHostAddress host = appConfig.getFirstOtherHost();
+ host != null; host = appConfig.getNextOtherHost())
+ {
+ envConfig.replicationManagerAddRemoteSite(host);
+ }
+
+ if (appConfig.totalSites > 0)
+ envConfig.setReplicationNumSites(appConfig.totalSites);
+ envConfig.setReplicationPriority(appConfig.priority);
+
+ envConfig.setCacheSize(RepConfig.CACHESIZE);
+ envConfig.setTxnNoSync(true);
+
+ envConfig.setEventHandler(this);
+ envConfig.setReplicationManagerAckPolicy(ReplicationManagerAckPolicy.ALL);
+
+ envConfig.setAllowCreate(true);
+ envConfig.setRunRecovery(true);
+ envConfig.setThreaded(true);
+ envConfig.setInitializeReplication(true);
+ envConfig.setInitializeLocking(true);
+ envConfig.setInitializeLogging(true);
+ envConfig.setInitializeCache(true);
+ envConfig.setTransactional(true);
+ envConfig.setVerboseReplication(appConfig.verbose);
+ try {
+ dbenv = new RepQuoteEnvironment(appConfig.getHome(), envConfig);
+ } catch(FileNotFoundException e) {
+ System.err.println("FileNotFound exception: " + e);
+ System.err.println(
+ "Ensure that the environment directory is pre-created.");
+ ret = 1;
+ }
+
+ // start replication manager
+ dbenv.replicationManagerStart(3, appConfig.startPolicy);
+ return ret;
+ }
+
+ public int doloop()
+ throws DatabaseException
+ {
+ Database db = null;
+
+ for (;;)
+ {
+ if (db == null) {
+ DatabaseConfig dbconf = new DatabaseConfig();
+ // Set page size small so page allocation is cheap.
+ dbconf.setPageSize(512);
+ dbconf.setType(DatabaseType.BTREE);
+ if (dbenv.getIsMaster()) {
+ dbconf.setAllowCreate(true);
+ }
+ dbconf.setTransactional(true);
+
+ try {
+ db = dbenv.openDatabase
+ (null, RepConfig.progname, null, dbconf);
+ } catch (java.io.FileNotFoundException e) {
+ System.err.println("no stock database available yet.");
+ if (db != null) {
+ db.close(true);
+ db = null;
+ }
+ try {
+ Thread.sleep(RepConfig.SLEEPTIME);
+ } catch (InterruptedException ie) {}
+ continue;
+ }
+ }
+
+ BufferedReader stdin =
+ new BufferedReader(new InputStreamReader(System.in));
+
+ // listen for input, and add it to the database.
+ System.out.print("QUOTESERVER");
+ if (!dbenv.getIsMaster())
+ System.out.print("(read-only)");
+ System.out.print("> ");
+ System.out.flush();
+ String nextline = null;
+ try {
+ nextline = stdin.readLine();
+ } catch (IOException ioe) {
+ System.err.println("Unable to get data from stdin");
+ break;
+ }
+ String[] words = nextline.split("\\s");
+
+ // A blank line causes the DB to be dumped to stdout.
+ if (words.length == 0 ||
+ (words.length == 1 && words[0].length() == 0)) {
+ try {
+ printStocks(db);
+ } catch (DeadlockException de) {
+ continue;
+ } catch (DatabaseException e) {
+ // this could be DB_REP_HANDLE_DEAD
+ // should close the database and continue
+ System.err.println("Got db exception reading replication" +
+ "DB: " + e);
+ System.err.println("Expected if it was due to a dead " +
+ "replication handle, otherwise an unexpected error.");
+ db.close(true); // close no sync.
+ db = null;
+ continue;
+ }
+ continue;
+ }
+
+ if (words.length == 1 &&
+ (words[0].compareToIgnoreCase("quit") == 0 ||
+ words[0].compareToIgnoreCase("exit") == 0)) {
+ break;
+ } else if (words.length != 2) {
+ System.err.println("Format: TICKER VALUE");
+ continue;
+ }
+
+ if (!dbenv.getIsMaster()) {
+ System.err.println("Can't update client.");
+ continue;
+ }
+
+ DatabaseEntry key = new DatabaseEntry(words[0].getBytes());
+ DatabaseEntry data = new DatabaseEntry(words[1].getBytes());
+
+ db.put(null, key, data);
+ }
+ if (db != null)
+ db.close(true);
+ return 0;
+ }
+
+ public void terminate()
+ throws DatabaseException
+ {
+ dbenv.close();
+ }
+
+ public int handleEvent(EventType event)
+ {
+ int ret = 0;
+ if (event == EventType.REP_MASTER)
+ dbenv.setIsMaster(true);
+ else if (event == EventType.REP_CLIENT)
+ dbenv.setIsMaster(false);
+ else if (event == EventType.REP_NEW_MASTER) {
+ // ignored for now.
+ } else {
+ System.err.println("Unknown event callback received.\n");
+ ret = 1;
+ }
+ return ret;
+ }
+
+ /*
+ * void return type since error conditions are propogated
+ * via exceptions.
+ */
+ private void printStocks(Database db)
+ throws DeadlockException, DatabaseException
+ {
+ Cursor dbc = db.openCursor(null, null);
+
+ System.out.println("\tSymbol\tPrice");
+ System.out.println("\t======\t=====");
+
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+ OperationStatus ret;
+ for (ret = dbc.getFirst(key, data, LockMode.DEFAULT);
+ ret == OperationStatus.SUCCESS;
+ ret = dbc.getNext(key, data, LockMode.DEFAULT)) {
+ String keystr = new String
+ (key.getData(), key.getOffset(), key.getSize());
+ String datastr = new String
+ (data.getData(), data.getOffset(), data.getSize());
+ System.out.println("\t"+keystr+"\t"+datastr);
+
+ }
+ dbc.close();
+ }
+} // end class
+
diff --git a/db/examples_java/src/db/txn/DBWriter.java b/db/examples_java/src/db/txn/DBWriter.java
new file mode 100644
index 000000000..0d310b86c
--- /dev/null
+++ b/db/examples_java/src/db/txn/DBWriter.java
@@ -0,0 +1,205 @@
+package db.txn;
+
+import com.sleepycat.bind.EntryBinding;
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.bind.serial.SerialBinding;
+import com.sleepycat.bind.tuple.StringBinding;
+
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.CursorConfig;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DeadlockException;
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.db.Transaction;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Random;
+
+public class DBWriter extends Thread
+{
+ private Database myDb = null;
+ private Environment myEnv = null;
+ private EntryBinding dataBinding = null;
+ private Random generator = new Random();
+ private boolean passTxn = false;
+
+
+ private static final int MAX_RETRY = 20;
+
+ private static String[] keys = {"key 1", "key 2", "key 3",
+ "key 4", "key 5", "key 6",
+ "key 7", "key 8", "key 9",
+ "key 10"};
+
+
+ // Constructor. Get our DB handles from here
+ // This consturctor allows us to indicate whether the
+ // txn handle should be handed to countRecords()
+ DBWriter(Environment env, Database db, StoredClassCatalog scc,
+ boolean passtxn)
+
+ throws DatabaseException {
+ myDb = db;
+ myEnv = env;
+ dataBinding = new SerialBinding(scc, PayloadData.class);
+
+ passTxn = passtxn;
+ }
+
+ // Constructor. Get our DB handles from here
+ DBWriter(Environment env, Database db, StoredClassCatalog scc)
+
+ throws DatabaseException {
+ myDb = db;
+ myEnv = env;
+ dataBinding = new SerialBinding(scc, PayloadData.class);
+ }
+
+ // Thread method that writes a series of records
+ // to the database using transaction protection.
+ // Deadlock handling is demonstrated here.
+ public void run () {
+ Transaction txn = null;
+
+ // Perform 50 transactions
+ for (int i=0; i<50; i++) {
+
+ boolean retry = true;
+ int retry_count = 0;
+ // while loop is used for deadlock retries
+ while (retry) {
+ // try block used for deadlock detection and
+ // general db exception handling
+ try {
+
+ // Get a transaction
+ txn = myEnv.beginTransaction(null, null);
+
+ // Write 10 records to the db
+ // for each transaction
+ for (int j = 0; j < 10; j++) {
+ // Get the key
+ DatabaseEntry key = new DatabaseEntry();
+ StringBinding.stringToEntry(keys[j], key);
+
+ // Get the data
+ PayloadData pd = new PayloadData(i+j, getName(),
+ generator.nextDouble());
+ DatabaseEntry data = new DatabaseEntry();
+ dataBinding.objectToEntry(pd, data);
+
+ // Do the put
+ myDb.put(txn, key, data);
+ }
+
+ // commit
+ System.out.println(getName() + " : committing txn : " + i);
+
+ // This code block allows us to decide if txn handle is
+ // passed to countRecords()
+ //
+ // TxnGuideInMemory requires a txn handle be handed to
+ // countRecords(). The code self deadlocks if you don't.
+ // TxnGuide has no such requirement because it supports
+ // uncommitted reads.
+ Transaction txnHandle = null;
+ if (passTxn) { txnHandle = txn; }
+
+ System.out.println(getName() + " : Found " +
+ countRecords(txnHandle) + " records in the database.");
+ try {
+ txn.commit();
+ txn = null;
+ } catch (DatabaseException e) {
+ System.err.println("Error on txn commit: " +
+ e.toString());
+ }
+ retry = false;
+
+ } catch (DeadlockException de) {
+ System.out.println("################# " + getName() +
+ " : caught deadlock");
+ // retry if necessary
+ if (retry_count < MAX_RETRY) {
+ System.err.println(getName() +
+ " : Retrying operation.");
+ retry = true;
+ retry_count++;
+ } else {
+ System.err.println(getName() +
+ " : out of retries. Giving up.");
+ retry = false;
+ }
+ } catch (DatabaseException e) {
+ // abort and don't retry
+ retry = false;
+ System.err.println(getName() +
+ " : caught exception: " + e.toString());
+ System.err.println(getName() +
+ " : errno: " + e.getErrno());
+ e.printStackTrace();
+ } finally {
+ if (txn != null) {
+ try {
+ txn.abort();
+ } catch (Exception e) {
+ System.err.println("Error aborting transaction: " +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // This simply counts the number of records contained in the
+ // database and returns the result. You can use this method
+ // in three ways:
+ //
+ // First call it with an active txn handle.
+ //
+ // Secondly, configure the cursor for dirty reads
+ //
+ // Third, call countRecords AFTER the writer has committed
+ // its transaction.
+ //
+ // If you do none of these things, the writer thread will
+ // self-deadlock.
+ //
+ // Note that this method exists only for illustrative purposes.
+ // A more straight-forward way to count the number of records in
+ // a database is to use the Database.getStats() method.
+ private int countRecords(Transaction txn) throws DatabaseException {
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+ int count = 0;
+ Cursor cursor = null;
+
+ try {
+ // Get the cursor
+ CursorConfig cc = new CursorConfig();
+ // setReadUncommitted is ignored if the database was not
+ // opened for uncommitted read support. TxnGuide opens
+ // its database in this way, TxnGuideInMemory does not.
+ cc.setReadUncommitted(true);
+ cursor = myDb.openCursor(txn, cc);
+ while (cursor.getNext(key, data, LockMode.DEFAULT) ==
+ OperationStatus.SUCCESS) {
+
+ count++;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return count;
+
+ }
+}
diff --git a/db/examples_java/src/db/txn/PayloadData.java b/db/examples_java/src/db/txn/PayloadData.java
new file mode 100644
index 000000000..b1d69838f
--- /dev/null
+++ b/db/examples_java/src/db/txn/PayloadData.java
@@ -0,0 +1,19 @@
+package db.txn;
+
+import java.io.Serializable;
+
+public class PayloadData implements Serializable {
+ private int oID;
+ private String threadName;
+ private double doubleData;
+
+ PayloadData(int id, String name, double data) {
+ oID = id;
+ threadName = name;
+ doubleData = data;
+ }
+
+ public double getDoubleData() { return doubleData; }
+ public int getID() { return oID; }
+ public String getThreadName() { return threadName; }
+}
diff --git a/db/examples_java/src/db/txn/TxnGuide.java b/db/examples_java/src/db/txn/TxnGuide.java
new file mode 100644
index 000000000..2a20d0708
--- /dev/null
+++ b/db/examples_java/src/db/txn/TxnGuide.java
@@ -0,0 +1,173 @@
+// File TxnGuide.java
+
+package db.txn;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.LockDetectMode;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+public class TxnGuide {
+
+ private static String myEnvPath = "./";
+ private static String dbName = "mydb.db";
+ private static String cdbName = "myclassdb.db";
+
+ // DB handles
+ private static Database myDb = null;
+ private static Database myClassDb = null;
+ private static Environment myEnv = null;
+
+ private static final int NUMTHREADS = 5;
+
+ private static void usage() {
+ System.out.println("TxnGuide [-h <env directory>]");
+ System.exit(-1);
+ }
+
+ public static void main(String args[]) {
+ try {
+ // Parse the arguments list
+ parseArgs(args);
+ // Open the environment and databases
+ openEnv();
+ // Get our class catalog (used to serialize objects)
+ StoredClassCatalog classCatalog =
+ new StoredClassCatalog(myClassDb);
+
+ // Start the threads
+ DBWriter[] threadArray;
+ threadArray = new DBWriter[NUMTHREADS];
+ for (int i = 0; i < NUMTHREADS; i++) {
+ threadArray[i] = new DBWriter(myEnv, myDb, classCatalog);
+ threadArray[i].start();
+ }
+
+ for (int i = 0; i < NUMTHREADS; i++) {
+ threadArray[i].join();
+ }
+ } catch (Exception e) {
+ System.err.println("TxnGuide: " + e.toString());
+ e.printStackTrace();
+ } finally {
+ closeEnv();
+ }
+ System.out.println("All done.");
+ }
+
+
+ private static void openEnv() throws DatabaseException {
+ System.out.println("opening env");
+
+ // Set up the environment.
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+ myEnvConfig.setAllowCreate(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setRunRecovery(true);
+ myEnvConfig.setTransactional(true);
+ // EnvironmentConfig.setThreaded(true) is the default behavior
+ // in Java, so we do not have to do anything to cause the
+ // environment handle to be free-threaded.
+
+ // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction that has
+ // performed the least amount of write activity to
+ // receive the deadlock notification, if any.
+ myEnvConfig.setLockDetectMode(LockDetectMode.MINWRITE);
+
+ // Set up the database
+ DatabaseConfig myDbConfig = new DatabaseConfig();
+ myDbConfig.setType(DatabaseType.BTREE);
+ myDbConfig.setAllowCreate(true);
+ myDbConfig.setTransactional(true);
+ myDbConfig.setSortedDuplicates(true);
+ myDbConfig.setReadUncommitted(true);
+ // no DatabaseConfig.setThreaded() method available.
+ // db handles in java are free-threaded so long as the
+ // env is also free-threaded.
+
+ try {
+ // Open the environment
+ myEnv = new Environment(new File(myEnvPath), // Env home
+ myEnvConfig);
+
+ // Open the database. Do not provide a txn handle. This open
+ // is autocommitted because DatabaseConfig.setTransactional()
+ // is true.
+ myDb = myEnv.openDatabase(null, // txn handle
+ dbName, // Database file name
+ null, // Database name
+ myDbConfig);
+
+ // Used by the bind API for serializing objects
+ // Class database must not support duplicates
+ myDbConfig.setSortedDuplicates(false);
+ myClassDb = myEnv.openDatabase(null, // txn handle
+ cdbName, // Database file name
+ null, // Database name,
+ myDbConfig);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println("openEnv: " + fnfe.toString());
+ System.exit(-1);
+ }
+ }
+
+ private static void closeEnv() {
+ System.out.println("Closing env and databases");
+ if (myDb != null ) {
+ try {
+ myDb.close();
+ } catch (DatabaseException e) {
+ System.err.println("closeEnv: myDb: " +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myClassDb != null ) {
+ try {
+ myClassDb.close();
+ } catch (DatabaseException e) {
+ System.err.println("closeEnv: myClassDb: " +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myEnv != null ) {
+ try {
+ myEnv.close();
+ } catch (DatabaseException e) {
+ System.err.println("closeEnv: " + e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private TxnGuide() {}
+
+ private static void parseArgs(String args[]) {
+ for(int i = 0; i < args.length; ++i) {
+ if (args[i].startsWith("-")) {
+ switch(args[i].charAt(1)) {
+ case 'h':
+ myEnvPath = new String(args[++i]);
+ break;
+ default:
+ usage();
+ }
+ }
+ }
+ }
+}
diff --git a/db/examples_java/src/db/txn/TxnGuideInMemory.java b/db/examples_java/src/db/txn/TxnGuideInMemory.java
new file mode 100644
index 000000000..26dff016f
--- /dev/null
+++ b/db/examples_java/src/db/txn/TxnGuideInMemory.java
@@ -0,0 +1,164 @@
+// File TxnGuideInMemory.java
+
+package db.txn;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.DatabaseType;
+import com.sleepycat.db.LockDetectMode;
+
+import com.sleepycat.db.Environment;
+import com.sleepycat.db.EnvironmentConfig;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+public class TxnGuideInMemory {
+
+ // DB handles
+ private static Database myDb = null;
+ private static Database myClassDb = null;
+ private static Environment myEnv = null;
+
+ private static int NUMTHREADS = 5;
+
+ public static void main(String args[]) {
+ try {
+ // Open the environment and databases
+ openEnv();
+
+ // Get our class catalog (used to serialize objects)
+ StoredClassCatalog classCatalog =
+ new StoredClassCatalog(myClassDb);
+
+ // Start the threads
+ DBWriter[] threadArray;
+ threadArray = new DBWriter[NUMTHREADS];
+ for (int i = 0; i < NUMTHREADS; i++) {
+ threadArray[i] = new DBWriter(myEnv, myDb, classCatalog, true);
+ threadArray[i].start();
+ }
+
+ System.out.println("Threads started.\n");
+
+ for (int i = 0; i < NUMTHREADS; i++) {
+ threadArray[i].join();
+ }
+ } catch (Exception e) {
+ System.err.println("TxnGuideInMemory: " + e.toString());
+ e.printStackTrace();
+ } finally {
+ closeEnv();
+ }
+ System.out.println("All done.");
+ }
+
+ private static void openEnv() throws DatabaseException {
+ System.out.println("opening env");
+
+ // Set up the environment.
+ EnvironmentConfig myEnvConfig = new EnvironmentConfig();
+
+ // Region files are not backed by the filesystem, they are
+ // backed by heap memory.
+ myEnvConfig.setPrivate(true);
+ myEnvConfig.setAllowCreate(true);
+ myEnvConfig.setInitializeCache(true);
+ myEnvConfig.setInitializeLocking(true);
+ myEnvConfig.setInitializeLogging(true);
+ myEnvConfig.setThreaded(true);
+
+ myEnvConfig.setTransactional(true);
+ // EnvironmentConfig.setThreaded(true) is the default behavior
+ // in Java, so we do not have to do anything to cause the
+ // environment handle to be free-threaded.
+
+ // Indicate that we want db to internally perform deadlock
+ // detection. Also indicate that the transaction that has
+ // performed the least amount of write activity to
+ // receive the deadlock notification, if any.
+ myEnvConfig.setLockDetectMode(LockDetectMode.MINWRITE);
+
+ // Specify in-memory logging
+ myEnvConfig.setLogInMemory(true);
+ // Specify the size of the in-memory log buffer
+ // Must be large enough to handle the log data created by
+ // the largest transaction.
+ myEnvConfig.setLogBufferSize(10 * 1024 * 1024);
+ // Specify the size of the in-memory cache
+ // Set it large enough so that it won't page.
+ myEnvConfig.setCacheSize(10 * 1024 * 1024);
+
+ // Set up the database
+ DatabaseConfig myDbConfig = new DatabaseConfig();
+ myDbConfig.setType(DatabaseType.BTREE);
+ myDbConfig.setAllowCreate(true);
+ myDbConfig.setTransactional(true);
+ myDbConfig.setSortedDuplicates(true);
+ // no DatabaseConfig.setThreaded() method available.
+ // db handles in java are free-threaded so long as the
+ // env is also free-threaded.
+
+ try {
+ // Open the environment
+ myEnv = new Environment(null, // Env home
+ myEnvConfig);
+
+ // Open the database. Do not provide a txn handle. This open
+ // is autocommitted because DatabaseConfig.setTransactional()
+ // is true.
+ myDb = myEnv.openDatabase(null, // txn handle
+ null, // Database file name
+ null, // Database name
+ myDbConfig);
+
+ // Used by the bind API for serializing objects
+ // Class database must not support duplicates
+ myDbConfig.setSortedDuplicates(false);
+ myClassDb = myEnv.openDatabase(null, // txn handle
+ null, // Database file name
+ null, // Database name,
+ myDbConfig);
+ } catch (FileNotFoundException fnfe) {
+ System.err.println("openEnv: " + fnfe.toString());
+ System.exit(-1);
+ }
+ }
+
+ private static void closeEnv() {
+ System.out.println("Closing env");
+ if (myDb != null ) {
+ try {
+ myDb.close();
+ } catch (DatabaseException e) {
+ System.err.println("closeEnv: myDb: " +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myClassDb != null ) {
+ try {
+ myClassDb.close();
+ } catch (DatabaseException e) {
+ System.err.println("closeEnv: myClassDb: " +
+ e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ if (myEnv != null ) {
+ try {
+ myEnv.close();
+ } catch (DatabaseException e) {
+ System.err.println("closeEnv: " + e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private TxnGuideInMemory() {}
+}
diff --git a/db/fileops/fileops.src b/db/fileops/fileops.src
index a77b5d5c4..ce81e1513 100644
--- a/db/fileops/fileops.src
+++ b/db/fileops/fileops.src
@@ -1,26 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: fileops.src,v 1.13 2004/06/17 17:35:20 bostic Exp $
+ * $Id: fileops.src,v 12.6 2006/08/24 14:46:03 bostic Exp $
*/
PREFIX __fop
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.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"
@@ -34,7 +26,7 @@ INCLUDE
* appname: indicates if the name needs to go through __db_appname
* mode: file system mode
*/
-BEGIN create 143
+BEGIN create 42 143
DBT name DBT s
ARG appname u_int32_t lu
ARG mode u_int32_t o
@@ -46,7 +38,7 @@ END
* name: name in the file system
* appname: indicates if the name needs to go through __db_appname
*/
-BEGIN remove 144
+BEGIN remove 42 144
DBT name DBT s
DBT fid DBT s
ARG appname u_int32_t lu
@@ -64,7 +56,7 @@ END
* flag: non-0 indicates that this is a tempfile, so we needn't undo
* these modifications (we'll toss the file).
*/
-BEGIN write 145
+BEGIN write 42 145
DBT name DBT s
ARG appname u_int32_t lu
ARG pgsize u_int32_t lu
@@ -82,7 +74,7 @@ END
* DB fileid of the file being renamed. We need to check it on recovery
* so that we don't inadvertently overwrite good files.
*/
-BEGIN rename 146
+BEGIN rename 42 146
DBT oldname DBT s
DBT newname DBT s
DBT fileid DBT s
@@ -103,7 +95,7 @@ END
* child: The transaction that removed or renamed the file.
*/
*/
-BEGIN file_remove 141
+BEGIN file_remove 42 141
DBT real_fid DBT s
DBT tmp_fid DBT s
DBT name DBT s
diff --git a/db/fileops/fileops_auto.c b/db/fileops/fileops_auto.c
index 333e37755..0da353b2b 100644
--- a/db/fileops/fileops_auto.c
+++ b/db/fileops/fileops_auto.c
@@ -2,17 +2,9 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.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"
@@ -23,10 +15,10 @@
* PUBLIC: u_int32_t, const DBT *, u_int32_t, u_int32_t));
*/
int
-__fop_create_log(dbenv, txnid, ret_lsnp, flags,
+__fop_create_log(dbenv, txnp, ret_lsnp, flags,
name, appname, mode)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *name;
@@ -50,29 +42,30 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -85,7 +78,7 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -136,12 +129,13 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -160,20 +154,21 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_create_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -197,13 +192,14 @@ __fop_create_read(dbenv, recbuf, argpp)
sizeof(__fop_create_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -231,10 +227,10 @@ __fop_create_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, const DBT *, const DBT *, u_int32_t));
*/
int
-__fop_remove_log(dbenv, txnid, ret_lsnp, flags,
+__fop_remove_log(dbenv, txnp, ret_lsnp, flags,
name, fid, appname)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *name;
@@ -258,29 +254,30 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -293,7 +290,7 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -351,12 +348,13 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -375,20 +373,21 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_remove_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -412,13 +411,14 @@ __fop_remove_read(dbenv, recbuf, argpp)
sizeof(__fop_remove_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -449,11 +449,11 @@ __fop_remove_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, const DBT *, u_int32_t));
*/
int
-__fop_write_log(dbenv, txnid, ret_lsnp, flags,
+__fop_write_log(dbenv, txnp, ret_lsnp, flags,
name, appname, pgsize, pageno, offset, page,
flag)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *name;
@@ -481,29 +481,30 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -520,7 +521,7 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -594,12 +595,13 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -618,20 +620,21 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_write_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -655,13 +658,14 @@ __fop_write_read(dbenv, recbuf, argpp)
sizeof(__fop_write_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -707,10 +711,10 @@ __fop_write_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, const DBT *, const DBT *, const DBT *, u_int32_t));
*/
int
-__fop_rename_log(dbenv, txnid, ret_lsnp, flags,
+__fop_rename_log(dbenv, txnp, ret_lsnp, flags,
oldname, newname, fileid, appname)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *oldname;
@@ -735,29 +739,30 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -771,7 +776,7 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -840,12 +845,13 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -864,20 +870,21 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_rename_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -901,13 +908,14 @@ __fop_rename_read(dbenv, recbuf, argpp)
sizeof(__fop_rename_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -944,10 +952,10 @@ __fop_rename_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, u_int32_t));
*/
int
-__fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
+__fop_file_remove_log(dbenv, txnp, ret_lsnp, flags,
real_fid, tmp_fid, name, appname, child)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *real_fid;
@@ -973,29 +981,30 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -1010,7 +1019,7 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1083,12 +1092,13 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1107,20 +1117,21 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_file_remove_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1145,13 +1156,14 @@ __fop_file_remove_read(dbenv, recbuf, argpp)
sizeof(__fop_file_remove_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
diff --git a/db/fileops/fileops_autop.c b/db/fileops/fileops_autop.c
index 970b0c63b..e19167691 100644
--- a/db/fileops/fileops_autop.c
+++ b/db/fileops/fileops_autop.c
@@ -2,17 +2,9 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.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"
@@ -35,20 +27,18 @@ __fop_create_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __fop_create_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_create%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__fop_create%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tname: ");
for (i = 0; i < argp->name.size; i++) {
ch = ((u_int8_t *)argp->name.data)[i];
@@ -79,20 +69,18 @@ __fop_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __fop_remove_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_remove%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__fop_remove%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tname: ");
for (i = 0; i < argp->name.size; i++) {
ch = ((u_int8_t *)argp->name.data)[i];
@@ -128,20 +116,18 @@ __fop_write_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __fop_write_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_write%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__fop_write%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tname: ");
for (i = 0; i < argp->name.size; i++) {
ch = ((u_int8_t *)argp->name.data)[i];
@@ -181,20 +167,18 @@ __fop_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __fop_rename_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_rename%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__fop_rename%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\toldname: ");
for (i = 0; i < argp->oldname.size; i++) {
ch = ((u_int8_t *)argp->oldname.data)[i];
@@ -236,20 +220,18 @@ __fop_file_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __fop_file_remove_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_file_remove%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__fop_file_remove%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\treal_fid: ");
for (i = 0; i < argp->real_fid.size; i++) {
ch = ((u_int8_t *)argp->real_fid.data)[i];
diff --git a/db/fileops/fop_basic.c b/db/fileops/fop_basic.c
index 36a958e95..9563ddbc1 100644
--- a/db/fileops/fop_basic.c
+++ b/db/fileops/fop_basic.c
@@ -1,22 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: fop_basic.c,v 1.32 2004/11/15 20:04:50 bostic Exp $
+ * $Id: fop_basic.c,v 12.19 2006/09/19 15:06:59 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/fop.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
@@ -24,9 +18,33 @@
#include "dbinc/db_am.h"
/*
- * This file implements the basic file-level operations. This code
- * ought to be fairly independent of DB, other than through its
- * error-reporting mechanism.
+ * The transactional guarantees Berkeley DB provides for file
+ * system level operations (database physical file create, delete,
+ * rename) are based on our understanding of current file system
+ * semantics; a system that does not provide these semantics and
+ * guarantees could be in danger.
+ *
+ * First, as in standard database changes, fsync and fdatasync must
+ * work: when applied to the log file, the records written into the
+ * log must be transferred to stable storage.
+ *
+ * Second, it must not be possible for the log file to be removed
+ * without previous file system level operations being flushed to
+ * stable storage. Berkeley DB applications write log records
+ * describing file system operations into the log, then perform the
+ * file system operation, then commit the enclosing transaction
+ * (which flushes the log file to stable storage). Subsequently,
+ * a database environment checkpoint may make it possible for the
+ * application to remove the log file containing the record of the
+ * file system operation. DB's transactional guarantees for file
+ * system operations require the log file removal not succeed until
+ * all previous filesystem operations have been flushed to stable
+ * storage. In other words, the flush of the log file, or the
+ * removal of the log file, must block until all previous
+ * filesystem operations have been flushed to stable storage. This
+ * semantic is not, as far as we know, required by any existing
+ * standards document, but we have never seen a filesystem where
+ * it does not apply.
*/
/*
@@ -55,20 +73,20 @@ __fop_create(dbenv, txn, fhpp, name, appname, mode, flags)
char *real_name;
real_name = NULL;
+ fhp = NULL;
if ((ret =
__db_appname(dbenv, appname, name, 0, NULL, &real_name)) != 0)
return (ret);
if (mode == 0)
- mode = __db_omode("rw----");
+ mode = __db_omode(OWNER_RW);
if (DBENV_LOGGING(dbenv)) {
- memset(&data, 0, sizeof(data));
- data.data = (void *)name;
- data.size = (u_int32_t)strlen(name) + 1;
+ DB_INIT_DBT(data, name, strlen(name) + 1);
if ((ret = __fop_create_log(dbenv, txn, &lsn,
- flags | DB_FLUSH, &data, (u_int32_t)appname, mode)) != 0)
+ flags | DB_FLUSH,
+ &data, (u_int32_t)appname, (u_int32_t)mode)) != 0)
goto err;
}
@@ -115,23 +133,21 @@ __fop_remove(dbenv, txn, fileid, name, appname, flags)
__db_appname(dbenv, appname, name, 0, NULL, &real_name)) != 0)
goto err;
- if (txn == NULL) {
+ if (!IS_REAL_TXN(txn)) {
if (fileid != NULL && (ret = __memp_nameop(
- dbenv, fileid, NULL, real_name, NULL)) != 0)
+ dbenv, fileid, NULL, real_name, NULL, 0)) != 0)
goto err;
} else {
if (DBENV_LOGGING(dbenv)) {
memset(&fdbt, 0, sizeof(ndbt));
fdbt.data = fileid;
fdbt.size = fileid == NULL ? 0 : DB_FILE_ID_LEN;
- memset(&ndbt, 0, sizeof(ndbt));
- ndbt.data = (void *)name;
- ndbt.size = (u_int32_t)strlen(name) + 1;
- if ((ret = __fop_remove_log(dbenv,
- txn, &lsn, flags, &ndbt, &fdbt, appname)) != 0)
+ DB_INIT_DBT(ndbt, name, strlen(name) + 1);
+ if ((ret = __fop_remove_log(dbenv, txn, &lsn,
+ flags, &ndbt, &fdbt, (u_int32_t)appname)) != 0)
goto err;
}
- ret = __txn_remevent(dbenv, txn, real_name, fileid);
+ ret = __txn_remevent(dbenv, txn, real_name, fileid, 0);
}
err: if (real_name != NULL)
@@ -176,7 +192,7 @@ __fop_write(dbenv,
int local_open, ret, t_ret;
char *real_name;
- DB_ASSERT(istmp != 0);
+ DB_ASSERT(dbenv, istmp != 0);
ret = local_open = 0;
real_name = NULL;
@@ -189,11 +205,10 @@ __fop_write(dbenv,
memset(&data, 0, sizeof(data));
data.data = buf;
data.size = size;
- 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, flags,
- &namedbt, appname, pgsize, pageno, off, &data, istmp)) != 0)
+ DB_INIT_DBT(namedbt, name, strlen(name) + 1);
+ if ((ret = __fop_write_log(dbenv, txn,
+ &lsn, flags, &namedbt, (u_int32_t)appname,
+ pgsize, pageno, off, &data, istmp)) != 0)
goto err;
}
@@ -205,8 +220,7 @@ __fop_write(dbenv,
}
/* Seek to offset. */
- if ((ret = __os_seek(dbenv,
- fhp, pgsize, pageno, off, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp, pageno, pgsize, off)) != 0)
goto err;
/* Now do the write. */
@@ -251,13 +265,9 @@ __fop_rename(dbenv, txn, oldname, newname, fid, appname, flags)
goto err;
if (DBENV_LOGGING(dbenv)) {
- memset(&old, 0, sizeof(old));
- memset(&new, 0, sizeof(new));
+ DB_INIT_DBT(old, oldname, strlen(oldname) + 1);
+ DB_INIT_DBT(new, newname, strlen(newname) + 1);
memset(&fiddbt, 0, sizeof(fiddbt));
- old.data = (void *)oldname;
- old.size = (u_int32_t)strlen(oldname) + 1;
- new.data = (void *)newname;
- 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, flags | DB_FLUSH,
@@ -265,7 +275,7 @@ __fop_rename(dbenv, txn, oldname, newname, fid, appname, flags)
goto err;
}
- ret = __memp_nameop(dbenv, fid, newname, o, n);
+ ret = __memp_nameop(dbenv, fid, newname, o, n, 0);
err: if (o != NULL)
__os_free(dbenv, o);
diff --git a/db/fileops/fop_rec.c b/db/fileops/fop_rec.c
index a9326d532..eced8fd39 100644
--- a/db/fileops/fop_rec.c
+++ b/db/fileops/fop_rec.c
@@ -1,29 +1,52 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: fop_rec.c,v 1.31 2004/09/22 03:45:25 bostic Exp $
+ * $Id: fop_rec.c,v 12.12 2006/08/24 14:46:03 bostic Exp $
*/
#include "db_config.h"
-#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/fop.h"
#include "dbinc/db_am.h"
#include "dbinc/mp.h"
#include "dbinc/txn.h"
/*
+ * The transactional guarantees Berkeley DB provides for file
+ * system level operations (database physical file create, delete,
+ * rename) are based on our understanding of current file system
+ * semantics; a system that does not provide these semantics and
+ * guarantees could be in danger.
+ *
+ * First, as in standard database changes, fsync and fdatasync must
+ * work: when applied to the log file, the records written into the
+ * log must be transferred to stable storage.
+ *
+ * Second, it must not be possible for the log file to be removed
+ * without previous file system level operations being flushed to
+ * stable storage. Berkeley DB applications write log records
+ * describing file system operations into the log, then perform the
+ * file system operation, then commit the enclosing transaction
+ * (which flushes the log file to stable storage). Subsequently,
+ * a database environment checkpoint may make it possible for the
+ * application to remove the log file containing the record of the
+ * file system operation. DB's transactional guarantees for file
+ * system operations require the log file removal not succeed until
+ * all previous filesystem operations have been flushed to stable
+ * storage. In other words, the flush of the log file, or the
+ * removal of the log file, must block until all previous
+ * filesystem operations have been flushed to stable storage. This
+ * semantic is not, as far as we know, required by any existing
+ * standards document, but we have never seen a filesystem where
+ * it does not apply.
+ */
+
+/*
* __fop_create_recover --
* Recovery function for create.
*
@@ -56,7 +79,7 @@ __fop_create_recover(dbenv, dbtp, lsnp, op, info)
(void)__os_unlink(dbenv, real_name);
else if (DB_REDO(op)) {
if ((ret = __os_open(dbenv, real_name,
- DB_OSO_CREATE | DB_OSO_EXCL, argp->mode, &fhp)) == 0)
+ DB_OSO_CREATE | DB_OSO_EXCL, (int)argp->mode, &fhp)) == 0)
(void)__os_closehandle(dbenv, fhp);
else
goto out;
@@ -101,7 +124,7 @@ __fop_remove_recover(dbenv, dbtp, lsnp, op, info)
/* 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);
+ (u_int8_t *)argp->fid.data, NULL, real_name, NULL, 0);
*lsnp = argp->prev_lsn;
out: if (real_name != NULL)
@@ -133,10 +156,10 @@ __fop_write_recover(dbenv, dbtp, lsnp, op, info)
ret = 0;
if (DB_UNDO(op))
- DB_ASSERT(argp->flag != 0);
+ DB_ASSERT(dbenv, argp->flag != 0);
else if (DB_REDO(op))
ret = __fop_write(dbenv,
- argp->txnid, argp->name.data, argp->appname,
+ argp->txnp, argp->name.data, (APPNAME)argp->appname,
NULL, argp->pgsize, argp->pageno, argp->offset,
argp->page.data, argp->page.size, argp->flag, 0);
@@ -209,14 +232,33 @@ __fop_rename_recover(dbenv, dbtp, lsnp, op, info)
goto done;
(void)__os_closehandle(dbenv, fhp);
fhp = NULL;
+ if (DB_REDO(op)) {
+ /*
+ * Check to see if the target file exists. If it
+ * does and it does not have the proper id then
+ * it is a later version. We just remove the source
+ * file since the state of the world is beyond this
+ * point.
+ */
+ if (__os_open(dbenv, real_new, 0, 0, &fhp) == 0 &&
+ __fop_read_meta(dbenv, src, mbuf,
+ DBMETASIZE, fhp, 1, NULL) == 0 &&
+ __db_chk_meta(dbenv, NULL, meta, 1) == 0 &&
+ memcmp(argp->fileid.data,
+ meta->uid, DB_FILE_ID_LEN) != 0) {
+ (void)__memp_nameop(dbenv,
+ fileid, NULL, real_old, NULL, 0);
+ goto done;
+ }
+ }
}
if (DB_UNDO(op))
(void)__memp_nameop(dbenv, fileid,
- (const char *)argp->oldname.data, real_new, real_old);
+ (const char *)argp->oldname.data, real_new, real_old, 0);
if (DB_REDO(op))
(void)__memp_nameop(dbenv, fileid,
- (const char *)argp->newname.data, real_old, real_new);
+ (const char *)argp->newname.data, real_old, real_new, 0);
done: *lsnp = argp->prev_lsn;
out: if (real_new != NULL)
@@ -327,7 +369,7 @@ __fop_file_remove_recover(dbenv, dbtp, lsnp, op, info)
if (cstat == TXN_COMMIT)
(void)__memp_nameop(dbenv,
is_real ? argp->real_fid.data : argp->tmp_fid.data,
- NULL, real_name, NULL);
+ NULL, real_name, NULL, 0);
}
done: *lsnp = argp->prev_lsn;
diff --git a/db/fileops/fop_util.c b/db/fileops/fop_util.c
index 564dc4a36..9da9d4a43 100644
--- a/db/fileops/fop_util.c
+++ b/db/fileops/fop_util.c
@@ -1,25 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: fop_util.c,v 1.104 2004/09/24 00:43:18 bostic Exp $
+ * $Id: fop_util.c,v 12.36 2006/09/19 15:06:59 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.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/hash.h"
#include "dbinc/fop.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -27,6 +20,15 @@
#include "dbinc/txn.h"
static int __fop_set_pgsize __P((DB *, DB_FH *, const char *));
+static int __fop_inmem_create __P((DB *, const char *, DB_TXN *, u_int32_t));
+static int __fop_inmem_dummy __P((DB *, DB_TXN *, const char *, u_int8_t *));
+static int __fop_inmem_read_meta __P((DB *, DB_TXN *, const char *, u_int32_t));
+static int __fop_inmem_swap __P((DB *, DB *, DB_TXN *,
+ const char *, const char *, const char *, u_int32_t));
+static int __fop_ondisk_dummy __P((DB *,
+ DB_TXN *, const char *, u_int8_t *, u_int32_t));
+static int __fop_ondisk_swap __P((DB *, DB *, DB_TXN *,
+ const char *, const char *, const char *, u_int32_t, u_int32_t));
/*
* Acquire the environment meta-data lock. The parameters are the
@@ -56,6 +58,14 @@ static int __fop_set_pgsize __P((DB *, DB_FH *, const char *));
} while (0)
#endif
+#define RESET_MPF(D, F) do { \
+ (void)__memp_fclose((D)->mpf, (F)); \
+ (D)->mpf = NULL; \
+ F_CLR((D), DB_AM_OPEN_CALLED); \
+ if ((ret = __memp_fcreate((D)->dbenv, &(D)->mpf)) != 0) \
+ goto err; \
+} while (0)
+
/*
* 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
@@ -109,7 +119,7 @@ __fop_lock_handle(dbenv, dbp, locker, mode, elockp, flags)
* doing is on the global environment.
*/
if (IS_RECOVERING(dbenv))
- return (elockp == NULL ? 0 : __ENV_LPUT(dbenv, *elockp, 0));
+ return (elockp == NULL ? 0 : __ENV_LPUT(dbenv, *elockp));
memcpy(lock_desc.fileid, dbp->fileid, DB_FILE_ID_LEN);
lock_desc.pgno = dbp->meta_pgno;
@@ -199,24 +209,28 @@ __fop_file_setup(dbp, txn, name, mode, flags, retidp)
DB_FH *fhp;
DB_LOCK elock;
DB_TXN *stxn;
+ DBTYPE save_type;
size_t len;
u_int32_t dflags, locker, oflags;
u_int8_t mbuf[DBMETASIZE];
- int created_locker, ret, retries, t_ret, tmp_created, truncating;
+ int created_locker, create_ok, ret, retries, t_ret, tmp_created;
+ int truncating, was_inval;
char *real_name, *real_tmpname, *tmpname;
- DB_ASSERT(name != NULL);
-
*retidp = TXN_INVALID;
dbenv = dbp->dbenv;
fhp = NULL;
LOCK_INIT(elock);
stxn = NULL;
- created_locker = tmp_created = truncating = 0;
+ created_locker = tmp_created = truncating = was_inval = 0;
real_name = real_tmpname = tmpname = NULL;
dflags = F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0;
+ ret = 0;
+ retries = 0;
+ save_type = dbp->type;
+
/*
* Get a lockerid for this handle. There are paths through queue
* rename and remove where this dbp already has a locker, so make
@@ -226,7 +240,7 @@ __fop_file_setup(dbp, txn, name, mode, flags, retidp)
!F_ISSET(dbp, DB_AM_COMPENSATE) &&
!F_ISSET(dbp, DB_AM_RECOVER) &&
dbp->lid == DB_LOCK_INVALIDID) {
- if ((ret = __lock_id(dbenv, &dbp->lid)) != 0)
+ if ((ret = __lock_id(dbenv, &dbp->lid, NULL)) != 0)
goto err;
created_locker = 1;
}
@@ -234,21 +248,29 @@ __fop_file_setup(dbp, txn, name, mode, flags, retidp)
locker = txn == NULL ? dbp->lid : txn->txnid;
- /* Get the real backing file name. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
- goto err;
+ oflags = 0;
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ real_name = (char *)name;
+ else {
+ /* Get the real backing file name. */
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
+ goto err;
- /* Fill in the default file mode. */
- if (mode == 0)
- mode = __db_omode("rwrw--");
+ /* Fill in the default file mode. */
+ if (mode == 0)
+ mode = __db_omode("rw-rw----");
+
+ if (LF_ISSET(DB_RDONLY))
+ oflags |= DB_OSO_RDONLY;
+ if (LF_ISSET(DB_TRUNCATE))
+ oflags |= DB_OSO_TRUNC;
+ }
- oflags = 0;
- if (LF_ISSET(DB_RDONLY))
- oflags |= DB_OSO_RDONLY;
- if (LF_ISSET(DB_TRUNCATE))
- oflags |= DB_OSO_TRUNC;
retries = 0;
+ create_ok = LF_ISSET(DB_CREATE);
+ LF_CLR(DB_CREATE);
+
retry:
/*
* If we cannot create the file, only retry a few times. We
@@ -257,13 +279,36 @@ retry:
* a previous crash).
*/
if (++retries > DB_RETRY) {
- __db_err(dbenv, "__fop_file_setup: Retry limit (%d) exceeded",
+ __db_errx(dbenv, "__fop_file_setup: Retry limit (%d) exceeded",
DB_RETRY);
goto err;
}
if (!F_ISSET(dbp, DB_AM_COMPENSATE) && !F_ISSET(dbp, DB_AM_RECOVER))
GET_ENVLOCK(dbenv, locker, &elock);
- if ((ret = __os_exists(real_name, NULL)) == 0) {
+ if (name == NULL)
+ ret = ENOENT;
+ else if (F_ISSET(dbp, DB_AM_INMEM)) {
+ ret = __db_dbenv_mpool(dbp, name, flags);
+ /*
+ * We are using __db_dbenv_open as a check for existence.
+ * However, db_dbenv_mpool does an actual open and there
+ * are scenarios where the object exists, but cannot be
+ * opened, because our settings don't match those internally.
+ * We need to check for that explicitly. We'll need the
+ * mpool open to read the meta-data page, so we're going to
+ * have to temporarily turn this dbp into an UNKNOWN one.
+ */
+ if (ret == EINVAL) {
+ was_inval = 1;
+ save_type = dbp->type;
+ dbp->type = DB_UNKNOWN;
+ ret = __db_dbenv_mpool(dbp, name, flags);
+ dbp->type = save_type;
+ }
+ } else
+ ret = __os_exists(dbenv, real_name, NULL);
+
+ if (ret == 0) {
/*
* If the file exists, there are 5 possible cases:
* 1. DB_EXCL was specified so this is an error, unless
@@ -275,12 +320,14 @@ retry:
* 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.
+ * -- on-disk files only!
* 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)
+ /* Open file (if there is one). */
+reopen: if (!F_ISSET(dbp, DB_AM_INMEM) &&
+ (ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
goto err;
/* Case 2: DB_TRUNCATE: we must do the creation in place. */
@@ -295,33 +342,43 @@ reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
}
/* 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);
-
- /* 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;
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ ret = __fop_inmem_read_meta(dbp, txn, name, flags);
+ else {
+ ret = __fop_read_meta(dbenv, real_name, mbuf,
+ sizeof(mbuf), fhp,
+ LF_ISSET(DB_FCNTL_LOCKING) && txn == NULL ? 1 : 0,
+ &len);
+
+ /* 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;
}
- tmpname = (char *)name;
- goto creat2;
+
+ /* Case 4: This is a valid file. */
+ if (ret == 0)
+ ret = __db_meta_setup(dbenv, dbp,
+ real_name, (DBMETA *)mbuf, flags, 1);
+
}
/* 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. */
if ((ret = __fop_lock_handle(dbenv,
dbp, locker, DB_LOCK_READ, NULL, DB_LOCK_NOWAIT)) == 0) {
- if ((ret = __ENV_LPUT(dbenv, elock, 0)) != 0)
+ if ((ret = __ENV_LPUT(dbenv, elock)) != 0)
goto err;
} else if (ret != DB_LOCK_NOTGRANTED ||
(txn != NULL && F_ISSET(txn, TXN_NOWAIT)))
@@ -341,28 +398,66 @@ reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
* 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, DB_LOCK_READ, &elock, 0);
- if (ret == DB_LOCK_NOTEXIST)
- goto retry;
- if (ret != 0)
+ DB_ASSERT(dbenv, !LF_ISSET(DB_FCNTL_LOCKING));
+ if (!F_ISSET(dbp, DB_AM_INMEM)) {
+ if ((ret = __os_closehandle(dbenv, fhp)) != 0)
+ goto err;
+ fhp = NULL;
+ }
+ if ((ret = __fop_lock_handle(dbenv,
+ dbp, locker, DB_LOCK_READ, &elock, 0)) != 0) {
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ RESET_MPF(dbp, 0);
goto err;
+ }
+
/*
- * 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...
+ * It's possible that our DBP was initialized
+ * with a different file last time we opened it.
+ * Therefore, we need to reset the DBP type and then
+ * re-read the meta-data page and reset any other
+ * fields that __db_meta_setup initializes. We
+ * need to shut down this dbp and reopen for in-memory
+ * named databases. Unfortunately __db_refresh is
+ * pretty aggressive at the shutting down, so we need
+ * to do a bunch of restoration.
+ * XXX it would be nice to pull refresh apart into
+ * the stuff you need to do to call __db_env_mpool
+ * and the stuff you can really throw away.
*/
- if ((ret =
- __os_open(dbenv, real_name, 0, 0, &fhp)) != 0)
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ if ((ret = __db_refresh(dbp,
+ txn, DB_NOSYNC, NULL, 1)) != 0)
+ goto err;
+ ret = __db_dbenv_mpool(dbp, name, flags);
+ } else
+ ret = __os_open(dbenv, real_name, 0, 0, &fhp);
+
+ if (ret != 0) {
+ if ((ret =
+ __ENV_LPUT(dbenv, dbp->handle_lock)) != 0) {
+ LOCK_INIT(dbp->handle_lock);
+ goto err;
+ }
+ goto retry;
+ }
+
+ dbp->type = save_type;
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ ret = __fop_inmem_read_meta(dbp,
+ txn, name, flags);
+ else if ((ret =
+ __fop_read_meta(dbenv, real_name, mbuf,
+ sizeof(mbuf), fhp,
+ LF_ISSET(DB_FCNTL_LOCKING) && txn == NULL ? 1 : 0,
+ &len)) != 0 ||
+ (ret = __db_meta_setup(dbenv, dbp, real_name,
+ (DBMETA *)mbuf, flags, 1)) != 0)
goto err;
+
}
- /* If we got here, then we now have the handle lock. */
+ /* If we got here, then we have the handle lock. */
/*
* Check for a file in the midst of a rename. If we find that
@@ -370,12 +465,18 @@ reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
* 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.
+ * handle because we reuse it below. This is a case where
+ * a 'was_inval' above is OK.
*/
if (F_ISSET(dbp, DB_AM_IN_RENAME)) {
- if (LF_ISSET(DB_CREATE)) {
- if ((ret = __os_closehandle(dbenv, fhp)) != 0)
+ was_inval = 0;
+ if (create_ok) {
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ RESET_MPF(dbp, DB_MPOOL_DISCARD);
+ } else if ((ret =
+ __os_closehandle(dbenv, fhp)) != 0)
goto err;
+ LF_SET(DB_CREATE);
goto create;
} else {
ret = ENOENT;
@@ -383,6 +484,12 @@ reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
}
}
+ /* If we get here, a was_inval is bad. */
+ if (was_inval) {
+ ret = EINVAL;
+ goto err;
+ }
+
/*
* 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
@@ -391,7 +498,7 @@ reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
* should not have been allowed to open it.
*/
if (LF_ISSET(DB_EXCL)) {
- ret = __ENV_LPUT(dbenv, dbp->handle_lock, 0);
+ ret = __ENV_LPUT(dbenv, dbp->handle_lock);
LOCK_INIT(dbp->handle_lock);
if (ret == 0)
ret = EEXIST;
@@ -401,59 +508,82 @@ reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
}
/* File does not exist. */
- if (!LF_ISSET(DB_CREATE))
+#ifdef HAVE_VXWORKS
+ /*
+ * VxWorks can return file-system specific error codes if the
+ * file does not exist, not ENOENT.
+ */
+ if (!create_ok)
+#else
+ if (!create_ok || ret != ENOENT)
+#endif
goto err;
+ LF_SET(DB_CREATE);
ret = 0;
/*
* 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.
+ * routines to create meta-data pages. For in-memory files, we retain
+ * the environment lock, while for on-disk files, we drop the env lock
+ * and create into a temporary.
*/
- if ((ret = __ENV_LPUT(dbenv, elock, 0)) != 0)
+ if (!F_ISSET(dbp, DB_AM_INMEM) &&
+ (ret = __ENV_LPUT(dbenv, elock)) != 0)
goto err;
create: if (txn != NULL && IS_REP_CLIENT(dbenv)) {
- __db_err(dbenv,
+ __db_errx(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 = __txn_begin(dbenv, txn, &stxn, 0)) != 0)
- goto err;
- if ((ret = __fop_create(dbenv,
- 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;
- __os_yield(dbenv, 1);
- goto retry;
+
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ ret = __fop_inmem_create(dbp, name, txn, flags);
+ else {
+ if ((ret = __db_backup_name(dbenv, name, txn, &tmpname)) != 0)
+ goto err;
+ if (TXN_ON(dbenv) && txn != NULL &&
+ (ret = __txn_begin(dbenv, txn, &stxn, 0)) != 0)
+ goto err;
+ if ((ret = __fop_create(dbenv,
+ stxn, &fhp, tmpname, DB_APP_DATA, mode, dflags)) != 0) {
+ /*
+ * If no transactions, there is a race on creating the
+ * backup file, as the backup file name is the same for
+ * all processes. Wait for the other process to finish
+ * with the name.
+ */
+ if (!TXN_ON(dbenv) && ret == EEXIST) {
+ __os_free(dbenv, tmpname);
+ tmpname = NULL;
+ __os_sleep(dbenv, 1, 0);
+ goto retry;
+ }
+ goto err;
}
- goto err;
+ tmp_created = 1;
}
- tmp_created = 1;
-creat2: if ((ret = __db_appname(dbenv,
- DB_APP_DATA, tmpname, 0, NULL, &real_tmpname)) != 0)
- goto err;
+creat2: if (!F_ISSET(dbp, DB_AM_INMEM)) {
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, tmpname, 0, NULL, &real_tmpname)) != 0)
+ goto err;
- /* Set the pagesize if it isn't yet set. */
- if (dbp->pgsize == 0 &&
- (ret = __fop_set_pgsize(dbp, fhp, real_tmpname)) != 0)
- goto errmsg;
+ /* Set the pagesize if it isn't yet set. */
+ if (dbp->pgsize == 0 &&
+ (ret = __fop_set_pgsize(dbp, fhp, real_tmpname)) != 0)
+ goto errmsg;
- /* Construct a file_id. */
- if ((ret = __os_fileid(dbenv, real_tmpname, 1, dbp->fileid)) != 0)
- goto errmsg;
+ /* Construct a file_id. */
+ if ((ret =
+ __os_fileid(dbenv, real_tmpname, 1, dbp->fileid)) != 0)
+ goto errmsg;
+ }
- if ((ret = __db_new_file(dbp, stxn, fhp, tmpname)) != 0)
+ if ((ret = __db_new_file(dbp,
+ F_ISSET(dbp, DB_AM_INMEM) ? txn : stxn, fhp, tmpname)) != 0)
goto err;
/*
@@ -464,9 +594,12 @@ creat2: if ((ret = __db_appname(dbenv,
/*
* 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).
+ * we created a database in a file that started out 0-length). If
+ * this is an in-memory file, we may or may not hold the environment
+ * lock depending on how we got here.
*/
- if (!F_ISSET(dbp, DB_AM_COMPENSATE) && !F_ISSET(dbp, DB_AM_RECOVER))
+ if (!F_ISSET(dbp, DB_AM_COMPENSATE) &&
+ !F_ISSET(dbp, DB_AM_RECOVER) && !LOCK_ISSET(elock))
GET_ENVLOCK(dbenv, locker, &elock);
if (F_ISSET(dbp, DB_AM_IN_RENAME)) {
@@ -474,14 +607,15 @@ creat2: if ((ret = __db_appname(dbenv,
__txn_remrem(dbenv, txn, real_name);
} else if (name == tmpname) {
/* We created it in place. */
- } else if (__os_exists(real_name, NULL) == 0) {
+ } else if (!F_ISSET(dbp, DB_AM_INMEM) &&
+ __os_exists(dbenv, 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, dflags);
- (void)__ENV_LPUT(dbenv, dbp->handle_lock, 0);
+ (void)__ENV_LPUT(dbenv, dbp->handle_lock);
LOCK_INIT(dbp->handle_lock);
if (stxn != NULL) {
@@ -493,10 +627,10 @@ creat2: if ((ret = __db_appname(dbenv,
goto reopen;
}
- if ((ret = __fop_lock_handle(dbenv,
+ if (name != NULL && (ret = __fop_lock_handle(dbenv,
dbp, locker, DB_LOCK_WRITE, &elock, NOWAIT_FLAG(txn))) != 0)
goto err;
- if (tmpname != name && (ret = __fop_rename(dbenv,
+ if (tmpname != NULL && tmpname != name && (ret = __fop_rename(dbenv,
stxn, tmpname, name, dbp->fileid, DB_APP_DATA, dflags)) != 0)
goto err;
@@ -513,7 +647,7 @@ creat2: if ((ret = __db_appname(dbenv,
F_SET(dbp, DB_AM_CREATED);
if (0) {
-errmsg: __db_err(dbenv, "%s: %s", name, db_strerror(ret));
+errmsg: __db_err(dbenv, ret, "%s", name);
err: CLOSE_HANDLE(dbp, fhp);
if (stxn != NULL)
@@ -522,8 +656,8 @@ err: CLOSE_HANDLE(dbp, fhp);
(void)__fop_remove(dbenv,
NULL, NULL, tmpname, DB_APP_DATA, dflags);
if (txn == NULL)
- (void)__ENV_LPUT(dbenv, dbp->handle_lock, 0);
- (void)__ENV_LPUT(dbenv, elock, 0);
+ (void)__ENV_LPUT(dbenv, dbp->handle_lock);
+ (void)__ENV_LPUT(dbenv, elock);
if (created_locker) {
(void)__lock_id_free(dbenv, dbp->lid);
dbp->lid = DB_LOCK_INVALIDID;
@@ -537,7 +671,7 @@ done: /*
*/
if (!truncating && tmpname != NULL && tmpname != name)
__os_free(dbenv, tmpname);
- if (real_name != NULL)
+ if (real_name != name && real_name != NULL)
__os_free(dbenv, real_name);
if (real_tmpname != NULL)
__os_free(dbenv, real_tmpname);
@@ -569,7 +703,7 @@ __fop_set_pgsize(dbp, fhp, name)
* default pagesize to 16K.
*/
if ((ret = __os_ioinfo(dbenv, name, fhp, NULL, NULL, &iopsize)) != 0) {
- __db_err(dbenv, "%s: %s", name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", name);
return (ret);
}
if (iopsize < 512)
@@ -681,7 +815,7 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
* If there was no transaction 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)
+ 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);
@@ -721,7 +855,7 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
err:
DB_TEST_RECOVERY_LABEL
if (txn == NULL)
- (void)__ENV_LPUT(dbenv, dbp->handle_lock, 0);
+ (void)__ENV_LPUT(dbenv, dbp->handle_lock);
}
/*
@@ -734,7 +868,7 @@ DB_TEST_RECOVERY_LABEL
* 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) {
+ if (!F_ISSET(dbp, DB_AM_RECOVER) && IS_REAL_TXN(txn)) {
/* Unregister old master events. */
__txn_remlock(dbenv,
txn, &mdbp->handle_lock, DB_LOCK_INVALIDID);
@@ -777,7 +911,6 @@ __fop_remove_setup(dbp, txn, name, flags)
DB_ENV *dbenv;
DB_FH *fhp;
DB_LOCK elock;
- u_int32_t refcnt;
u_int8_t mbuf[DBMETASIZE];
int ret;
@@ -786,13 +919,14 @@ __fop_remove_setup(dbp, txn, name, flags)
PANIC_CHECK(dbenv);
LOCK_INIT(elock);
fhp = NULL;
+ ret = 0;
/* Create locker if necessary. */
retry: if (LOCKING_ON(dbenv)) {
if (txn != NULL)
dbp->lid = txn->txnid;
else if (dbp->lid == DB_LOCK_INVALIDID) {
- if ((ret = __lock_id(dbenv, &dbp->lid)) != 0)
+ if ((ret = __lock_id(dbenv, &dbp->lid, NULL)) != 0)
goto err;
}
}
@@ -808,7 +942,7 @@ retry: if (LOCKING_ON(dbenv)) {
* that we shouldn't close the handle.
*/
fhp = dbp->saved_open_fhp;
- DB_ASSERT(LF_ISSET(DB_FCNTL_LOCKING) || fhp == NULL);
+ DB_ASSERT(dbenv, LF_ISSET(DB_FCNTL_LOCKING) || fhp == NULL);
/*
* Lock environment to protect file open. That will enable us to
@@ -816,15 +950,24 @@ retry: if (LOCKING_ON(dbenv)) {
* 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)
+
+ /* Open database. */
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ if ((ret = __db_dbenv_mpool(dbp, name, flags)) == 0)
+ ret = __os_strdup(dbenv, name, &dbp->dname);
+ } else if (fhp == NULL)
+ ret = __os_open(dbenv, name, DB_OSO_RDONLY, 0, &fhp);
+ if (ret != 0)
goto err;
- if ((ret =
- __db_meta_setup(dbenv, dbp, name, (DBMETA *)mbuf, flags, 1)) != 0)
+ /* Get meta-data */
+ if (F_ISSET(dbp, DB_AM_INMEM))
+ ret = __fop_inmem_read_meta(dbp, txn, name, flags);
+ else if ((ret = __fop_read_meta(dbenv,
+ name, mbuf, sizeof(mbuf), fhp, 0, NULL)) == 0)
+ ret = __db_meta_setup(dbenv,
+ dbp, name, (DBMETA *)mbuf, flags, 1);
+ if (ret != 0)
goto err;
/*
@@ -839,55 +982,45 @@ retry: if (LOCKING_ON(dbenv)) {
* Close the file, block on the lock, clean up the dbp, and
* then start all over again.
*/
- if (!LF_ISSET(DB_FCNTL_LOCKING)) {
+ if (!F_ISSET(dbp, DB_AM_INMEM) && !LF_ISSET(DB_FCNTL_LOCKING)) {
(void)__os_closehandle(dbenv, fhp);
fhp = NULL;
}
- if (ret == DB_LOCK_NOTEXIST) {
- if ((ret = __ENV_LPUT(dbenv, elock, 0)) != 0)
- goto err;
- } else if (ret != DB_LOCK_NOTGRANTED ||
+ if (ret != DB_LOCK_NOTGRANTED ||
(txn != NULL && F_ISSET(txn, TXN_NOWAIT)))
goto err;
else if ((ret = __fop_lock_handle(dbenv,
- dbp, dbp->lid, DB_LOCK_WRITE, &elock, 0)) != 0 &&
- ret != DB_LOCK_NOTEXIST)
+ dbp, dbp->lid, DB_LOCK_WRITE, &elock, 0)) != 0)
goto err;
- if (txn != NULL)
- dbp->lid = DB_LOCK_INVALIDID;
- (void)__db_refresh(dbp, txn, DB_NOSYNC, NULL);
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ (void)__lock_put(dbenv, &dbp->handle_lock);
+ (void)__db_refresh(dbp, txn, DB_NOSYNC, NULL, 1);
+ } else {
+ if (txn != NULL)
+ dbp->lid = DB_LOCK_INVALIDID;
+ (void)__db_refresh(dbp, txn, DB_NOSYNC, NULL, 0);
+ }
goto retry;
- } else if ((ret = __ENV_LPUT(dbenv, elock, 0)) != 0)
- goto err;
-
- /* Check if the file is already open. */
- if ((ret = __memp_get_refcnt(dbenv, dbp->fileid, &refcnt)) != 0)
+ } else if ((ret = __ENV_LPUT(dbenv, elock)) != 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 panic,
- * because this is a self deadlock and the application has a bug.
- * If the file isn't open, but it's in the midst of a rename then
- * this file doesn't really exist.
- */
- if (refcnt != 0) {
- __db_err(dbenv,
-"Attempting to remove file open in current transaction causing self-deadlock");
- ret = __db_panic(dbenv, DB_LOCK_DEADLOCK);
- } else if (F_ISSET(dbp, DB_AM_IN_RENAME))
+ else if (F_ISSET(dbp, DB_AM_IN_RENAME))
ret = ENOENT;
if (0) {
-err: (void)__ENV_LPUT(dbenv, elock, 0);
+err: (void)__ENV_LPUT(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 this is a real file and 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 since the file is closed and will be reopened again before
+ * access. However, this might be an in-memory file, in which case
+ * we will handle the discard from the mpool later as it's the "real"
+ * removal of the database.
*/
- if (ret == 0)
+ if (ret == 0 && !F_ISSET(dbp, DB_AM_INMEM))
F_SET(dbp, DB_AM_DISCARD);
return (ret);
}
@@ -926,13 +1059,13 @@ __fop_read_meta(dbenv, name, buf, size, fhp, errok, nbytesp)
if (ret != 0) {
if (!errok)
- __db_err(dbenv, "%s: %s", name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", name);
goto err;
}
if (nr != size) {
if (!errok)
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: unexpected file type or format", name);
ret = EINVAL;
}
@@ -957,100 +1090,418 @@ __fop_dummy(dbp, txn, old, new, flags)
const char *old, *new;
u_int32_t flags;
{
- DB *tmpdbp, *t2dbp;
+ DB *tmpdbp;
DB_ENV *dbenv;
- DB_FH *fhp;
- DB_LOCK elock;
- DB_LSN lsn;
- DBT fiddbt, namedbt, tmpdbt;
DB_TXN *stxn;
char *back;
- char *realback, *realnew, *realold;
int ret, t_ret;
- size_t len;
u_int8_t mbuf[DBMETASIZE];
- u_int32_t dflags, locker, stxnid;
+ u_int32_t locker;
dbenv = dbp->dbenv;
- LOCK_INIT(elock);
- realback = NULL;
- realnew = NULL;
- realold = NULL;
back = NULL;
stxn = NULL;
- tmpdbp = t2dbp = NULL;
- fhp = NULL;
- dflags = F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0;
+ tmpdbp = NULL;
- DB_ASSERT(txn != NULL);
+ DB_ASSERT(dbenv, txn != NULL);
locker = txn->txnid;
- /* Begin sub transaction to encapsulate the rename. */
+ /*
+ * Begin sub transaction to encapsulate the rename. Note that we
+ * expect the inmem_swap calls to complete the sub-transaction,
+ * aborting on error and committing on success.
+ */
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. */
if ((ret = __db_backup_name(dbenv, new, stxn, &back)) != 0)
goto err;
+ /* Create a dummy dbp handle. */
+ if ((ret = db_create(&tmpdbp, dbenv, 0)) != 0)
+ goto err;
+
+ memset(mbuf, 0, sizeof(mbuf));
+ ret = F_ISSET(dbp, DB_AM_INMEM) ?
+ __fop_inmem_dummy(tmpdbp, stxn, back, mbuf) :
+ __fop_ondisk_dummy(tmpdbp, stxn, back, mbuf, flags);
+
+ if (ret != 0)
+ goto err;
+
+ ret = F_ISSET(dbp, DB_AM_INMEM) ?
+ __fop_inmem_swap(dbp, tmpdbp, stxn, old, new, back, locker) :
+ __fop_ondisk_swap(dbp, tmpdbp, stxn, old, new, back, locker, flags);
+ stxn = NULL;
+ if (ret != 0)
+ goto err;
+
+err: if (stxn != NULL)
+ (void)__txn_abort(stxn);
+ if (tmpdbp != NULL &&
+ (t_ret = __db_close(tmpdbp, NULL, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (back != NULL)
+ __os_free(dbenv, back);
+ return (ret);
+}
+
+/*
+ * __fop_dbrename --
+ * Do the appropriate file locking and file system operations
+ * to effect a dbrename in the absence of transactions (__fop_dummy
+ * and the subsequent calls in __db_rename do the work for the
+ * transactional case).
+ *
+ * PUBLIC: int __fop_dbrename __P((DB *, const char *, const char *));
+ */
+int
+__fop_dbrename(dbp, old, new)
+ DB *dbp;
+ const char *old, *new;
+{
+ DB_ENV *dbenv;
+ DB_LOCK elock;
+ char *real_new, *real_old;
+ int ret, t_ret;
+
+ dbenv = dbp->dbenv;
+ real_new = NULL;
+ real_old = NULL;
+ LOCK_INIT(elock);
+
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ real_new = (char *)new;
+ real_old = (char *)old;
+ } else {
+ /* Get full names. */
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, new, 0, NULL, &real_new)) != 0)
+ goto err;
+
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, old, 0, NULL, &real_old)) != 0)
+ goto err;
+
+ }
+
+ /*
+ * It is an error to rename a file over one that already exists,
+ * as that wouldn't be transaction-safe. We check explicitly
+ * for ondisk files, but it's done memp_nameop for in-memory ones.
+ */
+ GET_ENVLOCK(dbenv, dbp->lid, &elock);
+ ret = F_ISSET(dbp, DB_AM_INMEM) ? ENOENT :
+ __os_exists(dbenv, real_new, NULL);
+
+ if (ret == 0) {
+ ret = EEXIST;
+ __db_errx(dbenv, "rename: file %s exists", real_new);
+ goto err;
+ }
+
+ ret = __memp_nameop(dbenv,
+ dbp->fileid, new, real_old, real_new, F_ISSET(dbp, DB_AM_INMEM));
+
+err: if ((t_ret = __ENV_LPUT(dbenv, elock)) != 0 && ret == 0)
+ ret = t_ret;
+ if (!F_ISSET(dbp, DB_AM_INMEM) && real_old != NULL)
+ __os_free(dbenv, real_old);
+ if (!F_ISSET(dbp, DB_AM_INMEM) && real_new != NULL)
+ __os_free(dbenv, real_new);
+ return (ret);
+}
+
+static int
+__fop_inmem_create(dbp, name, txn, flags)
+ DB *dbp;
+ const char *name;
+ DB_TXN *txn;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB_LSN lsn;
+ DBT fid_dbt, name_dbt;
+ int ret;
+ int32_t lfid;
+ u_int32_t *p32;
+
+ dbenv = dbp->dbenv;
+
+ MAKE_INMEM(dbp);
+
+ /* Set the pagesize if it isn't yet set. */
+ if (dbp->pgsize == 0)
+ dbp->pgsize = DB_DEF_IOSIZE;
+
+ /*
+ * Construct a file_id.
+ *
+ * If this file has no name, then we only need a fileid for locking.
+ * If this file has a name, we need the fileid both for locking and
+ * matching in the memory pool. So, with unnamed in-memory databases,
+ * use a lock_id. For named in-memory files, we need to find a value
+ * that we can use to uniquely identify a name/fid pair. We use a
+ * combination of a unique id (__os_unique_id) and a hash of the
+ * original name.
+ */
+ if (name == NULL) {
+ if (LOCKING_ON(dbenv) && (ret =
+ __lock_id(dbenv, (u_int32_t *)dbp->fileid, NULL)) != 0)
+ goto err;
+ } else {
+ p32 = (u_int32_t *)(&dbp->fileid[0]);
+ __os_unique_id(dbenv, p32);
+ p32++;
+ (void)strncpy(
+ (char *)p32, name, DB_FILE_ID_LEN - sizeof(u_int32_t));
+ dbp->preserve_fid = 1;
+
+ if (DBENV_LOGGING(dbenv) && dbp->log_filename != NULL)
+ memcpy(dbp->log_filename->ufid,
+ dbp->fileid, DB_FILE_ID_LEN);
+ }
+
+ /* Now, set the fileid. */
+ if ((ret = __memp_set_fileid(dbp->mpf, dbp->fileid)) != 0)
+ goto err;
+
+ if ((ret = __db_dbenv_mpool(dbp, name, flags)) != 0)
+ goto err;
+
+ if (name != NULL && DBENV_LOGGING(dbenv)) {
+ DB_INIT_DBT(name_dbt, name, strlen(name) + 1);
+ memset(&fid_dbt, 0, sizeof(fid_dbt));
+ fid_dbt.data = dbp->fileid;
+ fid_dbt.size = DB_FILE_ID_LEN;
+ lfid = dbp->log_filename == NULL ?
+ DB_LOGFILEID_INVALID : dbp->log_filename->id;
+ if ((ret = __crdel_inmem_create_log(dbenv, txn,
+ &lsn, 0, lfid, &name_dbt, &fid_dbt, dbp->pgsize)) != 0)
+ goto err;
+ }
+
+ F_SET(dbp, DB_AM_CREATED);
+
+err:
+ return (ret);
+}
+
+static int
+__fop_inmem_read_meta(dbp, txn, name, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name;
+ u_int32_t flags;
+{
+ DBMETA *metap;
+ db_pgno_t pgno;
+ int ret, t_ret;
+
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(dbp->mpf, &pgno, txn, 0, &metap)) != 0)
+ return (ret);
+ ret = __db_meta_setup(dbp->dbenv, dbp, name, metap, flags, 1);
+
+ if ((t_ret = __memp_fput(dbp->mpf, metap, 0)) && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+static int
+__fop_ondisk_dummy(dbp, txn, name, mbuf, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name;
+ u_int8_t *mbuf;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int ret;
+ char *realname;
+ u_int32_t dflags;
+
+ realname = NULL;
+ dbenv = dbp->dbenv;
+ dflags = F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0;
+
if ((ret = __db_appname(dbenv,
- DB_APP_DATA, back, flags, NULL, &realback)) != 0)
+ DB_APP_DATA, name, flags, NULL, &realname)) != 0)
goto err;
+
if ((ret = __fop_create(dbenv,
- stxn, NULL, back, DB_APP_DATA, 0, dflags)) != 0)
+ txn, NULL, name, DB_APP_DATA, 0, dflags)) != 0)
goto err;
- memset(mbuf, 0, sizeof(mbuf));
if ((ret =
- __os_fileid(dbenv, realback, 1, ((DBMETA *)mbuf)->uid)) != 0)
+ __os_fileid(dbenv, realname, 1, ((DBMETA *)mbuf)->uid)) != 0)
goto err;
+
((DBMETA *)mbuf)->magic = DB_RENAMEMAGIC;
- if ((ret = __fop_write(dbenv, stxn, back,
+ if ((ret = __fop_write(dbenv, txn, name,
DB_APP_DATA, NULL, 0, 0, 0, mbuf, DBMETASIZE, 1, dflags)) != 0)
goto err;
- /* Create a dummy dbp handle. */
- if ((ret = db_create(&tmpdbp, dbenv, 0)) != 0)
+ memcpy(dbp->fileid, ((DBMETA *)mbuf)->uid, DB_FILE_ID_LEN);
+
+err: if (realname != NULL)
+ __os_free(dbenv, realname);
+
+ return (ret);
+}
+
+static int
+__fop_inmem_dummy(dbp, txn, name, mbuf)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name;
+ u_int8_t *mbuf;
+{
+ DBMETA *metap;
+ db_pgno_t pgno;
+ int ret, t_ret;
+
+ if ((ret = __fop_inmem_create(dbp, name, txn, DB_CREATE)) != 0)
+ return (ret);
+
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(dbp->mpf, &pgno, txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &metap)) != 0)
+ return (ret);
+ /* Check file existed. */
+ if (metap->magic != 0)
+ ret = EEXIST;
+ else
+ metap->magic = DB_RENAMEMAGIC;
+
+ /* Copy the fileid onto the meta-data page. */
+ memcpy(metap->uid, dbp->fileid, DB_FILE_ID_LEN);
+
+ if ((t_ret = __memp_fput(dbp->mpf, metap,
+ ret == 0 ? 0 : DB_MPOOL_DISCARD)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (ret != 0)
goto err;
- memcpy(tmpdbp->fileid, ((DBMETA *)mbuf)->uid, DB_FILE_ID_LEN);
- /* Now, lock the name space while we initialize this file. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, new, 0, NULL, &realnew)) != 0)
+ ((DBMETA *)mbuf)->magic = DB_RENAMEMAGIC;
+
+err: return (ret);
+}
+
+static int
+__fop_ondisk_swap(dbp, tmpdbp, txn, old, new, back, locker, flags)
+ DB *dbp, *tmpdbp;
+ DB_TXN *txn;
+ const char *old, *new, *back;
+ u_int32_t locker, flags;
+{
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ DB_LOCK elock;
+ DB_LSN lsn;
+ DBT fiddbt, namedbt, tmpdbt;
+ DB_TXN *parent;
+ char *realold, *realnew;
+ int ret, t_ret;
+ u_int8_t mbuf[DBMETASIZE];
+ u_int32_t child_txnid, dflags;
+
+ dbenv = dbp->dbenv;
+ DB_ASSERT(dbenv, txn != NULL);
+ DB_ASSERT(dbenv, old != NULL);
+
+ realold = realnew = NULL;
+ LOCK_INIT(elock);
+ fhp = NULL;
+ dflags = F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0;
+
+ if ((ret =
+ __db_appname(dbenv, DB_APP_DATA, new, 0, NULL, &realnew)) != 0)
goto err;
- GET_ENVLOCK(dbenv, locker, &elock);
- if (__os_exists(realnew, NULL) == 0) {
+
+ /* Now, lock the name space while we initialize this file. */
+retry: GET_ENVLOCK(dbenv, locker, &elock);
+ if (__os_exists(dbenv, realnew, NULL) == 0) {
/*
* 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 ||
+ realnew, mbuf, sizeof(mbuf), fhp, 0, NULL)) != 0 ||
(ret = __db_meta_setup(dbenv,
- t2dbp, realnew, (DBMETA *)mbuf, 0, 1)) != 0) {
+ tmpdbp, 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.
+ * Now, try to acquire the handle lock. If the handle is locked
+ * by our current, transaction, then we'll get it and life is
+ * good.
+ *
+ * Alternately, it's not locked at all, we'll get the lock, but
+ * we will realize it exists and consider this an error.
+ *
+ * However, if it's held by another transaction, then there
+ * could be two different scenarios: 1) the file is in the
+ * midst of being created or deleted and when that transaction
+ * is over, we might be able to proceed. 2) the file is open
+ * and exists and we should report an error. In order to
+ * distinguish these two cases, we do the following. First, we
+ * try to acquire a READLOCK. If the handle is in the midst of
+ * being created, then we'll block because a writelock is held.
+ * In that case, we should request a blocking write, and when we
+ * get the lock, we should then go back and check to see if the
+ * object exists and start all over again.
+ *
+ * If we got the READLOCK, then either no one is holding the
+ * lock or someone has an open handle and the fact that the file
+ * exists is problematic. So, in this case, we request the
+ * WRITELOCK non-blocking -- if it succeeds, we're golden. If
+ * it fails, then the file exists and we return EEXIST.
*/
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, 0);
- if (!F_ISSET(t2dbp, DB_AM_IN_RENAME))
+ tmpdbp, locker, DB_LOCK_READ, NULL, DB_LOCK_NOWAIT)) != 0) {
+ /*
+ * Someone holds a writelock. Try for the WRITELOCK
+ * and after we get it, retry.
+ */
+ if ((ret = __fop_lock_handle(dbenv, tmpdbp,
+ locker, DB_LOCK_WRITE, &elock, 0)) != 0)
+ goto err;
+
+ /*
+ * We now have the write lock; release it and start
+ * over.
+ */
+ (void)__lock_put(dbenv, &tmpdbp->handle_lock);
+ (void)__db_refresh(tmpdbp, NULL, 0, NULL, 0);
+ goto retry;
+ } else {
+ /* We got the read lock; try to upgrade it. */
+ ret = __fop_lock_handle(dbenv,
+ tmpdbp, locker, DB_LOCK_WRITE,
+ NULL, DB_LOCK_UPGRADE | DB_LOCK_NOWAIT);
+ if (ret != 0) {
+ /*
+ * We did not get the writelock, so someone
+ * has the handle open. This is an error.
+ */
+ (void)__lock_put(dbenv, &tmpdbp->handle_lock);
+ ret = EEXIST;
+ } else if (F_ISSET(tmpdbp, DB_AM_IN_RENAME))
+ /* We got the lock and are renaming it. */
+ ret = 0;
+ else { /* We got the lock, but the file exists. */
+ (void)__lock_put(dbenv, &tmpdbp->handle_lock);
ret = EEXIST;
+ }
}
if ((t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
ret = t_ret;
@@ -1064,10 +1515,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, dflags)) != 0)
+ txn, old, new, dbp->fileid, DB_APP_DATA, dflags)) != 0)
goto err;
if ((ret = __fop_rename(dbenv,
- stxn, back, old, tmpdbp->fileid, DB_APP_DATA, dflags)) != 0)
+ txn, back, old, tmpdbp->fileid, DB_APP_DATA, dflags)) != 0)
goto err;
if ((ret = __fop_lock_handle(dbenv,
tmpdbp, locker, DB_LOCK_WRITE, &elock, NOWAIT_FLAG(txn))) != 0)
@@ -1080,108 +1531,174 @@ __fop_dummy(dbp, txn, old, new, flags)
*/
LOCK_INIT(tmpdbp->handle_lock);
- if (stxn != NULL) {
- /* Commit the child. */
- stxnid = stxn->txnid;
- ret = __txn_commit(stxn, 0);
- stxn = NULL;
-
- /* Now log the child information in the parent. */
- memset(&fiddbt, 0, sizeof(fiddbt));
- memset(&tmpdbt, 0, sizeof(fiddbt));
- memset(&namedbt, 0, sizeof(namedbt));
- fiddbt.data = dbp->fileid;
- fiddbt.size = DB_FILE_ID_LEN;
- tmpdbt.data = tmpdbp->fileid;
- tmpdbt.size = DB_FILE_ID_LEN;
- namedbt.data = (void *)old;
- namedbt.size = (u_int32_t)strlen(old) + 1;
- if ((t_ret =
- __fop_file_remove_log(dbenv, txn, &lsn, 0, &fiddbt,
- &tmpdbt, &namedbt, DB_APP_DATA, stxnid)) != 0 && ret == 0)
- ret = t_ret;
- }
+ /* Commit the child. */
+ child_txnid = txn->txnid;
+ parent = txn->parent;
+ ret = __txn_commit(txn, 0);
+ txn = NULL;
+
+ /* Now log the child information in the parent. */
+ memset(&fiddbt, 0, sizeof(fiddbt));
+ fiddbt.data = dbp->fileid;
+ fiddbt.size = DB_FILE_ID_LEN;
+ memset(&tmpdbt, 0, sizeof(fiddbt));
+ tmpdbt.data = tmpdbp->fileid;
+ tmpdbt.size = DB_FILE_ID_LEN;
+ DB_INIT_DBT(namedbt, old, strlen(old) + 1);
+ if ((t_ret = __fop_file_remove_log(dbenv,
+ parent, &lsn, 0, &fiddbt, &tmpdbt, &namedbt,
+ (u_int32_t)DB_APP_DATA, child_txnid)) != 0 && ret == 0)
+ ret = t_ret;
/* This is a delayed delete of the dummy file. */
if ((ret = __db_appname(dbenv,
DB_APP_DATA, old, flags, NULL, &realold)) != 0)
goto err;
- if ((ret = __txn_remevent(dbenv, txn, realold, NULL)) != 0)
+
+ if ((ret = __txn_remevent(dbenv, parent, realold, NULL, 0)) != 0)
goto err;
-err: (void)__ENV_LPUT(dbenv, elock, 0);
- if (stxn != NULL)
- (void)__txn_abort(stxn);
- if (tmpdbp != NULL &&
- (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);
+err: if (txn != NULL) /* Ret must already be set, so void abort. */
+ (void)__txn_abort(txn);
+
+ (void)__ENV_LPUT(dbenv, elock);
if (realnew != NULL)
__os_free(dbenv, realnew);
- if (realback != NULL)
- __os_free(dbenv, realback);
- if (back != NULL)
- __os_free(dbenv, back);
+ if (realold != NULL)
+ __os_free(dbenv, realold);
return (ret);
}
-/*
- * __fop_dbrename --
- * Do the appropriate file locking and file system operations
- * to effect a dbrename in the absence of transactions (__fop_dummy
- * and the subsequent calls in __db_rename do the work for the
- * transactional case).
- *
- * PUBLIC: int __fop_dbrename __P((DB *, const char *, const char *));
- */
-int
-__fop_dbrename(dbp, old, new)
- DB *dbp;
- const char *old, *new;
+static int
+__fop_inmem_swap(olddbp, backdbp, txn, old, new, back, locker)
+ DB *olddbp, *backdbp;
+ DB_TXN *txn;
+ const char *old, *new, *back;
+ u_int32_t locker;
{
DB_ENV *dbenv;
DB_LOCK elock;
- char *real_new, *real_old;
+ DB_LSN lsn;
+ DB_TXN *parent;
+ DBT fid_dbt, n1_dbt, n2_dbt;
+ DB *tmpdbp;
int ret, t_ret;
- dbenv = dbp->dbenv;
- real_new = NULL;
- real_old = NULL;
- LOCK_INIT(elock);
+ dbenv = olddbp->dbenv;
+ parent = txn->parent;
+retry: LOCK_INIT(elock);
+ if ((ret = db_create(&tmpdbp, dbenv, 0)) != 0)
+ return (ret);
+ MAKE_INMEM(tmpdbp);
- /* Find the real newname of the file. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, new, 0, NULL, &real_new)) != 0)
- goto err;
+ GET_ENVLOCK(dbenv, locker, &elock);
+ if ((ret = __db_dbenv_mpool(tmpdbp, new, 0)) == 0) {
+ /*
+ * It is possible that the only reason this database 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 = __fop_inmem_read_meta(tmpdbp, txn, new, 0)) != 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. See the comments in __fop_ondisk_swap for
+ * details.
+ */
+ if ((ret = __fop_lock_handle(dbenv,
+ tmpdbp, locker, DB_LOCK_READ, NULL, DB_LOCK_NOWAIT)) != 0) {
+ /*
+ * Someone holds a writelock. Try for the WRITELOCK
+ * and after we get it, retry.
+ */
+ if ((ret = __fop_lock_handle(dbenv, tmpdbp,
+ locker, DB_LOCK_WRITE, &elock, 0)) != 0)
+ goto err;
+
+ /* We have the write lock; release it and start over. */
+ (void)__lock_put(dbenv, &tmpdbp->handle_lock);
+ (void)__db_close(tmpdbp, NULL, DB_NOSYNC);
+ (void)__ENV_LPUT(dbenv, elock);
+ goto retry;
+ } else {
+ (void)__lock_put(dbenv, &tmpdbp->handle_lock);
+ if (!F_ISSET(tmpdbp, DB_AM_IN_RENAME))
+ ret = EEXIST;
+ }
+ if (ret != 0)
+ goto err;
+ }
+
+ /* Log the renames. */
+ if (LOGGING_ON(dbenv)) {
+ /* Rename old to new. */
+ DB_INIT_DBT(fid_dbt, olddbp->fileid, DB_FILE_ID_LEN);
+ DB_INIT_DBT(n1_dbt, old, strlen(old) + 1);
+ DB_INIT_DBT(n2_dbt, new, strlen(new) + 1);
+ if ((ret = __crdel_inmem_rename_log(dbenv, txn, &lsn, 0,
+ &n1_dbt, &n2_dbt, &fid_dbt)) != 0)
+ goto err;
+
+ /* Rename back to old */
+ fid_dbt.data = backdbp->fileid;
+ DB_SET_DBT(n2_dbt, back, strlen(back) + 1);
+ if ((ret = __crdel_inmem_rename_log(dbenv, txn, &lsn, 0,
+ &n2_dbt, &n1_dbt, &fid_dbt)) != 0)
+ goto err;
+ }
/*
- * It is an error to rename a file over one that already exists,
- * as that wouldn't be transaction-safe.
+ * While we have the namespace locked, do the renames and then
+ * swap for the handle lock. If we ran into a file in the midst
+ * of rename, then we need to delete it first, else nameop is
+ * going to consider it an error.
*/
- GET_ENVLOCK(dbenv, dbp->lid, &elock);
- if (__os_exists(real_new, NULL) == 0) {
- ret = EEXIST;
- __db_err(dbenv, "rename: file %s exists", real_new);
- goto err;
+ if (F_ISSET(tmpdbp, DB_AM_IN_RENAME)) {
+ if ((ret = __memp_nameop(dbenv,
+ tmpdbp->fileid, NULL, new, NULL, 1)) != 0)
+ goto err;
+ __txn_remrem(dbenv, parent, new);
}
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, old, 0, NULL, &real_old)) != 0)
+ if ((ret = __memp_nameop(dbenv, olddbp->fileid, new, old, new, 1)) != 0)
+ goto err;
+ if ((ret =
+ __memp_nameop(dbenv, backdbp->fileid, old, back, old, 1)) != 0)
goto err;
- ret = __memp_nameop(dbenv, dbp->fileid, new, real_old, real_new);
+ if ((ret = __fop_lock_handle(dbenv,
+ tmpdbp, locker, DB_LOCK_WRITE, &elock, 0)) != 0)
+ goto err;
-err: if ((t_ret = __ENV_LPUT(dbenv, elock, 0)) != 0 && ret == 0)
+ /*
+ * We just acquired a transactional lock on the tmp handle.
+ * We need to null out the tmp handle's lock so that it
+ * doesn't create problems for us in the close path.
+ */
+ LOCK_INIT(tmpdbp->handle_lock);
+
+ DB_ASSERT(dbenv, txn != NULL);
+
+ /* Commit the child. */
+ ret = __txn_commit(txn, 0);
+ txn = NULL;
+
+ if ((ret = __db_inmem_remove(backdbp, parent, old)) != 0)
+ goto err;
+
+err: (void)__ENV_LPUT(dbenv, elock);
+
+ if (txn != NULL)
+ (void)__txn_abort(txn);
+
+ if ((t_ret = __db_close(tmpdbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
- if (real_old != NULL)
- __os_free(dbenv, real_old);
- if (real_new != NULL)
- __os_free(dbenv, real_new);
+
return (ret);
}
diff --git a/db/hash/hash.c b/db/hash/hash.c
index 71c2f5e06..56ad1a25d 100644
--- a/db/hash/hash.c
+++ b/db/hash/hash.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -39,20 +39,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash.c,v 11.200 2004/10/14 18:11:36 bostic Exp $
+ * $Id: hash.c,v 12.25 2006/08/24 14:46:04 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
@@ -73,21 +66,8 @@ static int __ham_overwrite __P((DBC *, DBT *, u_int32_t));
/*
* __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.
- *
- * This function is called by __db_delete when the appropriate
- * conditions are met, and it performs the delete in the optimized way.
- *
- * 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.
+ * This function is called by __db_del when the appropriate conditions
+ * are met, and it performs the delete in the optimized way.
*
* PUBLIC: int __ham_quick_delete __P((DBC *));
*/
@@ -97,19 +77,33 @@ __ham_quick_delete(dbc)
{
int ret, t_ret;
- if ((ret = __ham_get_meta(dbc)) != 0)
- return (ret);
-
- /* 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.
+ * When performing a DB->del operation not involving secondary indices
+ * and 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.
+ *
+ * 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.
+ *
+ * We do not need to call CDB_LOCKING_INIT, __db_del calls here with
+ * a write cursor.
+ *
+ * Assert we're initialized, but not to an off-page duplicate.
+ * Assert we're not using secondary indices.
*/
+ DB_ASSERT(dbc->dbp->dbenv, IS_INITIALIZED(dbc));
+ DB_ASSERT(dbc->dbp->dbenv, dbc->internal->opd == NULL);
+ DB_ASSERT(dbc->dbp->dbenv, !F_ISSET(dbc->dbp, DB_AM_SECONDARY));
+ DB_ASSERT(dbc->dbp->dbenv,
+ LIST_FIRST(&dbc->dbp->s_secondaries) == NULL);
- /* 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);
+ if ((ret = __ham_get_meta(dbc)) != 0)
+ return (ret);
if ((ret = __ham_c_writelock(dbc)) == 0)
ret = __ham_del_pair(dbc, 1);
@@ -146,7 +140,7 @@ __ham_c_init(dbc)
}
dbc->internal = (DBC_INTERNAL *) new_curs;
- dbc->c_close = __db_c_close;
+ dbc->c_close = __db_c_close_pp;
dbc->c_count = __db_c_count_pp;
dbc->c_del = __db_c_del_pp;
dbc->c_dup = __db_c_dup_pp;
@@ -179,11 +173,9 @@ __ham_c_close(dbc, root_pgno, rmroot)
HKEYDATA *dp;
db_lockmode_t lock_mode;
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;
@@ -195,7 +187,7 @@ __ham_c_close(dbc, root_pgno, rmroot)
lock_mode = DB_LOCK_READ;
/* To support dirty reads we must reget the write lock. */
- if (F_ISSET(dbc->dbp, DB_AM_DIRTY) &&
+ if (F_ISSET(dbc->dbp, DB_AM_READ_UNCOMMITTED) &&
F_ISSET((BTREE_CURSOR *)
dbc->internal->opd->internal, C_DELETED))
lock_mode = DB_LOCK_WRITE;
@@ -215,14 +207,16 @@ __ham_c_close(dbc, root_pgno, rmroot)
hcp->opd->c_am_close(hcp->opd, root_pgno, &doroot)) != 0)
goto out;
if (doroot != 0) {
+ if ((ret = __memp_dirty(mpf, &hcp->page,
+ dbc->txn, 0)) != 0)
+ goto out;
if ((ret = __ham_del_pair(dbc, 1)) != 0)
goto out;
- dirty = DB_MPOOL_DIRTY;
}
}
-out: if (hcp->page != NULL && (t_ret =
- __memp_fput(mpf, hcp->page, dirty)) != 0 && ret == 0)
+out: if (hcp->page != NULL &&
+ (t_ret = __memp_fput(mpf, hcp->page, 0)) != 0 && ret == 0)
ret = t_ret;
if (gotmeta != 0 && (t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
@@ -338,6 +332,9 @@ __ham_c_del(dbc)
if (HPAGE_TYPE(dbp, hcp->page, H_DATAINDEX(hcp->indx)) == H_OFFDUP)
goto out;
+ if ((ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0)) != 0)
+ goto out;
+
if (F_ISSET(hcp, H_ISDUP)) { /* On-page duplicate. */
if (hcp->dup_off == 0 &&
DUP_SIZE(hcp->dup_len) == LEN_HDATA(dbp, hcp->page,
@@ -358,13 +355,11 @@ __ham_c_del(dbc)
DUP_SIZE(hcp->dup_len), 0, 1);
}
}
-
} else /* Not a duplicate */
ret = __ham_del_pair(dbc, 1);
out: if (hcp->page != NULL) {
- if ((t_ret = __memp_fput(mpf,
- hcp->page, ret == 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, hcp->page, 0)) != 0 && ret == 0)
ret = t_ret;
hcp->page = NULL;
}
@@ -385,7 +380,6 @@ __ham_c_dup(orig_dbc, new_dbc)
DBC *orig_dbc, *new_dbc;
{
HASH_CURSOR *orig, *new;
- int ret;
orig = (HASH_CURSOR *)orig_dbc->internal;
new = (HASH_CURSOR *)new_dbc->internal;
@@ -401,20 +395,6 @@ __ham_c_dup(orig_dbc, new_dbc)
if (F_ISSET(orig, H_ISDUP))
F_SET(new, H_ISDUP);
- /*
- * If the old cursor held a lock and we're not in transactions, get one
- * for the new one. The reason that we don't need a new lock if we're
- * in a transaction is because we already hold a lock and will continue
- * to do so until commit, so there is no point in re-acquiring it. We
- * don't know if the old lock was a read or write lock, but it doesn't
- * matter. We'll get a read lock. We know that this locker already
- * 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_dbc->txn == NULL && LOCK_ISSET(orig->lock))
- if ((ret = __ham_lock_bucket(new_dbc, DB_LOCK_READ)) != 0)
- return (ret);
-
return (0);
}
@@ -427,13 +407,15 @@ __ham_c_get(dbc, key, data, flags, pgnop)
db_pgno_t *pgnop;
{
DB *dbp;
+ DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
db_lockmode_t lock_type;
- int get_key, ret, t_ret;
+ int ret, t_ret;
hcp = (HASH_CURSOR *)dbc->internal;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
mpf = dbp->mpf;
/* Clear OR'd in additional bits so we can check for flag equality. */
@@ -447,7 +429,6 @@ __ham_c_get(dbc, key, data, flags, pgnop)
hcp->seek_size = 0;
ret = 0;
- get_key = 1;
switch (flags) {
case DB_PREV_NODUP:
F_SET(hcp, H_NEXT_NODUP);
@@ -483,13 +464,11 @@ __ham_c_get(dbc, key, data, flags, pgnop)
case DB_GET_BOTH:
case DB_GET_BOTH_RANGE:
ret = __ham_lookup(dbc, key, 0, lock_type, pgnop);
- get_key = 0;
break;
case DB_GET_BOTHC:
F_SET(hcp, H_DUPONLY);
ret = __ham_item_next(dbc, lock_type, pgnop);
- get_key = 0;
break;
case DB_CURRENT:
/* cgetchk has already determined that the cursor is set. */
@@ -501,7 +480,7 @@ __ham_c_get(dbc, key, data, flags, pgnop)
ret = __ham_item(dbc, lock_type, pgnop);
break;
default:
- ret = __db_unknown_flag(dbp->dbenv, "__ham_c_get", flags);
+ ret = __db_unknown_flag(dbenv, "__ham_c_get", flags);
break;
}
@@ -517,8 +496,7 @@ __ham_c_get(dbc, key, data, flags, pgnop)
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");
+ __db_errx(dbenv, "H_NOMORE returned to __ham_c_get");
ret = EINVAL;
break;
}
@@ -583,13 +561,10 @@ __ham_c_get(dbc, key, data, flags, pgnop)
ret = DB_KEYEMPTY;
goto err;
default:
- DB_ASSERT(0);
+ DB_ASSERT(dbenv, 0);
}
}
- if (get_key == 0)
- F_SET(key, DB_DBT_ISSET);
-
err: if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
@@ -1031,13 +1006,13 @@ __ham_c_put(dbc, key, data, flags, pgnop)
case DB_KEYLAST:
case DB_KEYFIRST:
case DB_NODUPDATA:
+ case DB_NOOVERWRITE:
nbytes = (ISBIG(hcp, key->size) ? HOFFPAGE_PSIZE :
HKEYDATA_PSIZE(key->size)) +
(ISBIG(hcp, data->size) ? HOFFPAGE_PSIZE :
HKEYDATA_PSIZE(data->size));
if ((ret = __ham_lookup(dbc,
key, nbytes, DB_LOCK_WRITE, pgnop)) == DB_NOTFOUND) {
- ret = 0;
if (hcp->seek_found_page != PGNO_INVALID &&
hcp->seek_found_page != hcp->pgno) {
if ((ret = __memp_fput(mpf, hcp->page, 0)) != 0)
@@ -1058,18 +1033,26 @@ __ham_c_put(dbc, key, data, flags, pgnop)
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);
- myval = &tmp_val;
- }
+ &dbc->my_rdata.ulen)) != 0)
+ goto err2;
+
+ memset(tmp_val.data, 0, data->doff);
+ memcpy((u_int8_t *)tmp_val.data +
+ data->doff, data->data, data->size);
+ myval = &tmp_val;
} else
myval = (DBT *)data;
- if (ret == 0)
- ret = __ham_add_el(dbc, key, myval, H_KEYDATA);
+ ret = __ham_add_el(dbc, key, myval, H_KEYDATA);
goto done;
+ } else if (flags == DB_NOOVERWRITE &&
+ !F_ISSET(hcp, H_DELETED)) {
+ if (*pgnop == PGNO_INVALID)
+ ret = DB_KEYEXIST;
+ else
+ ret = __bam_opd_exists(dbc, *pgnop);
+ if (ret != 0)
+ goto done;
}
break;
case DB_BEFORE:
@@ -1083,6 +1066,8 @@ __ham_c_put(dbc, key, data, flags, pgnop)
}
if (*pgnop == PGNO_INVALID && ret == 0) {
+ if ((ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0)) != 0)
+ goto done;
if (flags == DB_CURRENT ||
((flags == DB_KEYFIRST ||
flags == DB_KEYLAST || flags == DB_NODUPDATA) &&
@@ -1093,8 +1078,7 @@ __ham_c_put(dbc, key, data, flags, pgnop)
}
done: if (hcp->page != NULL) {
- if ((t_ret = __memp_fput(mpf,
- hcp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, hcp->page, 0)) != 0 && ret == 0)
ret = t_ret;
if (t_ret == 0)
hcp->page = NULL;
@@ -1103,6 +1087,9 @@ done: if (hcp->page != NULL) {
if (ret == 0 && F_ISSET(hcp, H_EXPAND)) {
ret = __ham_expand_table(dbc);
F_CLR(hcp, H_EXPAND);
+ /* If we are out of space, ignore the error. */
+ if (ret == ENOSPC && dbc->txn == NULL)
+ ret = 0;
}
err2: if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
@@ -1128,20 +1115,20 @@ __ham_expand_table(dbc)
HASH_CURSOR *hcp;
PAGE *h;
db_pgno_t pgno, mpgno;
- u_int32_t dirty_meta, logn, newalloc, new_bucket, old_bucket;
+ u_int32_t logn, newalloc, new_bucket, old_bucket;
int got_meta, new_double, ret, t_ret;
dbp = dbc->dbp;
mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
- if ((ret = __ham_dirty_meta(dbc)) != 0)
+ if ((ret = __ham_dirty_meta(dbc, 0)) != 0)
return (ret);
LOCK_INIT(metalock);
mmeta = (DBMETA *) hcp->hdr;
mpgno = mmeta->pgno;
h = NULL;
- dirty_meta = newalloc = 0;
+ newalloc = 0;
got_meta = 0;
/*
@@ -1171,8 +1158,8 @@ __ham_expand_table(dbc)
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(mpf, &pgno, DB_MPOOL_CREATE, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &h)) != 0)
goto err;
lsn = h->lsn;
} else {
@@ -1182,7 +1169,8 @@ __ham_expand_table(dbc)
if ((ret = __db_lget(dbc,
0, mpgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &mpgno, 0, &mmeta)) != 0)
+ if ((ret = __memp_fget(mpf, &mpgno, dbc->txn,
+ DB_MPOOL_DIRTY, &mmeta)) != 0)
goto err;
got_meta = 1;
}
@@ -1221,15 +1209,16 @@ __ham_expand_table(dbc)
* 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)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &h)) != 0)
goto err;
+ hcp->hdr->spares[logn + 1] =
+ (pgno - new_bucket) - hcp->hdr->max_bucket;
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);
@@ -1237,7 +1226,7 @@ __ham_expand_table(dbc)
/* Write out whatever page we ended up modifying. */
h->lsn = lsn;
- if ((ret = __memp_fput(mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
goto err;
h = NULL;
@@ -1255,7 +1244,7 @@ __ham_expand_table(dbc)
err: if (got_meta)
if ((t_ret =
- __memp_fput(mpf, mmeta, dirty_meta)) != 0 && ret == 0)
+ __memp_fput(mpf, mmeta, 0)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
@@ -1331,7 +1320,7 @@ __ham_dup_return(dbc, val, flags)
*/
/* We should never get here with off-page dups. */
- DB_ASSERT(type != H_OFFDUP);
+ DB_ASSERT(dbp->dbenv, type != H_OFFDUP);
/* Case 1 */
if (type != H_DUPLICATE && flags != DB_GET_BOTH &&
@@ -1396,7 +1385,7 @@ __ham_dup_return(dbc, val, flags)
HOFFPAGE_TLEN(hk), sizeof(u_int32_t));
memcpy(&pgno,
HOFFPAGE_PGNO(hk), sizeof(db_pgno_t));
- if ((ret = __db_moff(dbp, val,
+ if ((ret = __db_moff(dbp, dbc->txn, val,
pgno, tlen, dbp->dup_compare, &cmp)) != 0)
return (ret);
} else {
@@ -1418,15 +1407,11 @@ __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 we've already got the data for this value, or we're doing a bulk
+ * get, we don't want to return the data.
*/
- if (F_ISSET(dbc, DBC_MULTIPLE | DBC_MULTIPLE_KEY))
+ if (F_ISSET(dbc, DBC_MULTIPLE | DBC_MULTIPLE_KEY) ||
+ F_ISSET(val, DB_DBT_ISSET))
return (0);
/*
@@ -1442,27 +1427,31 @@ __ham_dup_return(dbc, val, flags)
* duplicate which is itself a partial.
*/
memcpy(&tmp_val, val, sizeof(*val));
+
if (F_ISSET(&tmp_val, DB_DBT_PARTIAL)) {
/*
* Take the user's length unless it would go
* beyond the end of the duplicate.
*/
- if (tmp_val.doff + hcp->dup_off > hcp->dup_len)
+ if (tmp_val.doff > hcp->dup_len)
tmp_val.dlen = 0;
- else if (tmp_val.dlen + tmp_val.doff >
- hcp->dup_len)
- tmp_val.dlen =
- hcp->dup_len - tmp_val.doff;
+ else if (tmp_val.dlen + tmp_val.doff > hcp->dup_len)
+ tmp_val.dlen = hcp->dup_len - tmp_val.doff;
- /*
- * Calculate the new offset.
- */
- tmp_val.doff += hcp->dup_off;
} else {
F_SET(&tmp_val, DB_DBT_PARTIAL);
tmp_val.dlen = hcp->dup_len;
- tmp_val.doff = hcp->dup_off + sizeof(db_indx_t);
+ tmp_val.doff = 0;
}
+
+ /*
+ * Set offset to the appropriate place within the
+ * current duplicate -- need to take into account
+ * both the dup_off and the current duplicate's
+ * length.
+ */
+ tmp_val.doff += hcp->dup_off + sizeof(db_indx_t);
+
myval = &tmp_val;
}
@@ -1470,8 +1459,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, dbc->txn,
+ pp, ndx, myval, &dbc->rdata->data, &dbc->rdata->ulen)) != 0)
return (ret);
/*
@@ -1510,7 +1499,7 @@ __ham_overwrite(dbc, nval, flags)
* This is an overwrite of a duplicate. We should never
* be off-page at this point.
*/
- DB_ASSERT(hcp->opd == NULL);
+ DB_ASSERT(dbenv, hcp->opd == NULL);
/* On page dups */
if (F_ISSET(nval, DB_DBT_PARTIAL)) {
/*
@@ -1647,7 +1636,7 @@ __ham_overwrite(dbc, nval, flags)
tmp_val2.size = hcp->dup_len;
if (dbp->dup_compare(
dbp, nval, &tmp_val2) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Existing data sorts differently from put data");
return (EINVAL);
}
@@ -1696,7 +1685,7 @@ __ham_overwrite(dbc, nval, flags)
* If the key is not found, the H_OK flag is not set. If the sought
* field is non-0, the pagep, bndx, pgno (dpagep, dndx, dpgno) fields
* are set indicating where an add might take place. If it is 0,
- * non of the cursor pointer field are valid.
+ * none of the cursor pointer field are valid.
*/
static int
__ham_lookup(dbc, key, sought, mode, pgnop)
@@ -1741,7 +1730,7 @@ __ham_lookup(dbc, key, sought, mode, pgnop)
if (tlen == key->size) {
memcpy(&pgno,
HOFFPAGE_PGNO(hk), sizeof(db_pgno_t));
- if ((ret = __db_moff(dbp,
+ if ((ret = __db_moff(dbp, dbc->txn,
key, pgno, tlen, NULL, &match)) != 0)
return (ret);
if (match == 0)
@@ -1856,7 +1845,7 @@ __ham_c_update(dbc, len, add, is_dup)
my_txn = IS_SUBTRANSACTION(dbc->txn) ? dbc->txn : NULL;
found = 0;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
/*
* Calculate the order of this deleted record.
@@ -1865,13 +1854,12 @@ __ham_c_update(dbc, len, add, is_dup)
*/
order = 0;
if (!add) {
- order = 1;
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (order = 1;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links) {
if (cp == dbc || cp->dbtype != DB_HASH)
continue;
lcp = (HASH_CURSOR *)cp->internal;
@@ -1879,26 +1867,29 @@ __ham_c_update(dbc, len, add, is_dup)
hcp->pgno == lcp->pgno &&
hcp->indx == lcp->indx &&
order <= lcp->order &&
- (!is_dup || hcp->dup_off == lcp->dup_off))
+ (!is_dup || hcp->dup_off == lcp->dup_off) &&
+ !MVCC_SKIP_CURADJ(cp, lcp->pgno))
order = lcp->order + 1;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
hcp->order = order;
}
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links) {
if (cp == dbc || cp->dbtype != DB_HASH)
continue;
lcp = (HASH_CURSOR *)cp->internal;
- if (lcp->pgno != hcp->pgno || lcp->indx == NDX_INVALID)
+ if (lcp->pgno != hcp->pgno ||
+ lcp->indx == NDX_INVALID ||
+ MVCC_SKIP_CURADJ(cp, lcp->pgno))
continue;
if (my_txn != NULL && cp->txn != my_txn)
@@ -1992,9 +1983,9 @@ __ham_c_update(dbc, len, add, is_dup)
}
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (found != 0 && DBC_LOGGING(dbc)) {
if ((ret = __ham_curadj_log(dbp, my_txn, &lsn, 0, hcp->pgno,
@@ -2028,21 +2019,21 @@ __ham_get_clist(dbp, pgno, indx, listp)
u_int nalloc, nused;
int ret;
+ *listp = NULL;
+ dbenv = dbp->dbenv;
+ nalloc = nused = 0;
+
/*
* Assume that finding anything is the exception, so optimize for
* the case where there aren't any.
*/
- nalloc = nused = 0;
- *listp = NULL;
- dbenv = dbp->dbenv;
-
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (;
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))
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links)
/*
* We match if cp->pgno matches the specified
* pgno, and if either the cp->indx matches
@@ -2050,7 +2041,8 @@ __ham_get_clist(dbp, pgno, indx, listp)
*/
if (cp->internal->pgno == pgno &&
(indx == NDX_INVALID ||
- cp->internal->indx == indx)) {
+ cp->internal->indx == indx) &&
+ !MVCC_SKIP_CURADJ(cp, pgno)) {
if (nused >= nalloc) {
nalloc += 10;
if ((ret = __os_realloc(dbp->dbenv,
@@ -2061,9 +2053,9 @@ __ham_get_clist(dbp, pgno, indx, listp)
(*listp)[nused++] = cp;
}
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbp->dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (listp != NULL) {
if (nused >= nalloc) {
@@ -2076,8 +2068,8 @@ __ham_get_clist(dbp, pgno, indx, listp)
}
return (0);
err:
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbp->dbenv, dbp->mutex);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
return (ret);
}
diff --git a/db/hash/hash.src b/db/hash/hash.src
index 4acff5e59..2e2c26221 100644
--- a/db/hash/hash.src
+++ b/db/hash/hash.src
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash.src,v 10.44 2004/06/17 17:35:21 bostic Exp $
+ * $Id: hash.src,v 12.6 2006/08/24 14:46:04 bostic Exp $
*/
/*
* Copyright (c) 1995, 1996
@@ -45,13 +45,6 @@
PREFIX __ham
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
@@ -74,7 +67,7 @@ INCLUDE
* key - the key being inserted
* data - the data being inserted
*/
-BEGIN insdel 21
+BEGIN insdel 42 21
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
@@ -94,7 +87,7 @@ END
* this should be PGNO_INVALID. For deletes, it may exist.
* pagelsn is the old lsn on the page.
*/
-BEGIN newpage 22
+BEGIN newpage 42 22
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG prev_pgno db_pgno_t lu
@@ -111,7 +104,7 @@ END
* new page (pages) and add the items back on the page if they are not
* yet there.
*/
-BEGIN splitdata 24
+BEGIN splitdata 42 24
DB fileid int32_t ld
ARG opcode u_int32_t lu
ARG pgno db_pgno_t lu
@@ -131,7 +124,7 @@ END
* newitem - DBT of the new item.
* makedup - this was a replacement that made an item a duplicate.
*/
-BEGIN replace 25
+BEGIN replace 42 25
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG ndx u_int32_t lu
@@ -152,7 +145,7 @@ END
* nnext_pgno: page after next_pgno (may need to change its prev)
* nnextlsn: the LSN of nnext_pgno.
*/
-BEGIN copypage 28
+BEGIN copypage 42 28
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER pagelsn DB_LSN * lu
@@ -182,9 +175,21 @@ END
* newalloc: 1 indicates that this record did the actual allocation;
* 0 indicates that the pages were already allocated from a
* previous (failed) allocation.
- * last_pgno: the last page in the file before this op.
+ * last_pgno: the last page in the file before this op (4.3+).
*/
-BEGIN metagroup 29
+BEGIN_COMPAT metagroup 42 29
+DB fileid int32_t ld
+ARG bucket u_int32_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
+
+BEGIN metagroup 43 29
DB fileid int32_t ld
ARG bucket u_int32_t lu
ARG mmpgno db_pgno_t lu
@@ -204,18 +209,26 @@ END
* a new database to make sure that we recreate or reclaim free pages
* when we allocate a chunk of contiguous ones during database creation.
*
- * pgno: meta-data page number
- * metalsn: meta-data lsn
- * start_pgno: starting page number
- * num: number of allocated pages
- * last_pgno: the last page in the file before this op.
+ * meta_lsn: meta-data lsn
+ * start_pgno: starting page number
+ * num: number of allocated pages
+ * unused: unused, historically the meta-data free list page number
+ * last_pgno: the last page in the file before this op (4.3+).
*/
-BEGIN groupalloc 32
+BEGIN_COMPAT groupalloc 42 32
DB fileid int32_t ld
POINTER meta_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 43 32
+DB fileid int32_t ld
+POINTER meta_lsn DB_LSN * lu
+ARG start_pgno db_pgno_t lu
+ARG num u_int32_t lu
+ARG unused db_pgno_t lu
ARG last_pgno db_pgno_t lu
END
@@ -245,7 +258,7 @@ END
* order that's assigned to the lowest deleted record we're
* moving.
*/
-BEGIN curadj 33
+BEGIN curadj 42 33
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
@@ -256,7 +269,7 @@ ARG is_dup int ld
ARG order u_int32_t lu
END
-BEGIN chgpg 34
+BEGIN chgpg 42 34
DB fileid int32_t ld
ARG mode db_ham_mode ld
ARG old_pgno db_pgno_t lu
diff --git a/db/hash/hash_auto.c b/db/hash/hash_auto.c
index 59629d46f..aa395e5a0 100644
--- a/db/hash/hash_auto.c
+++ b/db/hash/hash_auto.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -24,11 +17,11 @@
* PUBLIC: const DBT *, const DBT *));
*/
int
-__ham_insdel_log(dbp, txnid, ret_lsnp, flags,
+__ham_insdel_log(dbp, txnp, ret_lsnp, flags,
opcode, pgno, ndx, pagelsn, key,
data)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -58,30 +51,31 @@ __ham_insdel_log(dbp, txnid, ret_lsnp, flags,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -100,7 +94,7 @@ __ham_insdel_log(dbp, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -148,9 +142,15 @@ __ham_insdel_log(dbp, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
@@ -176,12 +176,13 @@ __ham_insdel_log(dbp, txnid, ret_lsnp, flags,
bp += data->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -200,20 +201,21 @@ __ham_insdel_log(dbp, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_insdel_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -237,13 +239,14 @@ __ham_insdel_read(dbenv, recbuf, argpp)
sizeof(__ham_insdel_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -289,11 +292,11 @@ __ham_insdel_read(dbenv, recbuf, argpp)
* PUBLIC: db_pgno_t, DB_LSN *));
*/
int
-__ham_newpage_log(dbp, txnid, ret_lsnp, flags,
+__ham_newpage_log(dbp, txnp, ret_lsnp, flags,
opcode, prev_pgno, prevlsn, new_pgno, pagelsn,
next_pgno, nextlsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -324,30 +327,31 @@ __ham_newpage_log(dbp, txnid, ret_lsnp, flags,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -367,7 +371,7 @@ __ham_newpage_log(dbp, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -411,9 +415,15 @@ __ham_newpage_log(dbp, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (prevlsn != NULL)
+ if (prevlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(prevlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, prevlsn) != 0))
+ return (ret);
+ }
memcpy(bp, prevlsn, sizeof(*prevlsn));
- else
+ } else
memset(bp, 0, sizeof(*prevlsn));
bp += sizeof(*prevlsn);
@@ -421,9 +431,15 @@ __ham_newpage_log(dbp, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
@@ -431,18 +447,25 @@ __ham_newpage_log(dbp, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (nextlsn != NULL)
+ if (nextlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(nextlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, nextlsn) != 0))
+ return (ret);
+ }
memcpy(bp, nextlsn, sizeof(*nextlsn));
- else
+ } else
memset(bp, 0, sizeof(*nextlsn));
bp += sizeof(*nextlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -461,20 +484,21 @@ __ham_newpage_log(dbp, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_newpage_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -499,13 +523,14 @@ __ham_newpage_read(dbenv, recbuf, argpp)
sizeof(__ham_newpage_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -548,9 +573,9 @@ __ham_newpage_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, u_int32_t, db_pgno_t, const DBT *, DB_LSN *));
*/
int
-__ham_splitdata_log(dbp, txnid, ret_lsnp, flags, opcode, pgno, pageimage, pagelsn)
+__ham_splitdata_log(dbp, txnp, ret_lsnp, flags, opcode, pgno, pageimage, pagelsn)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -578,30 +603,31 @@ __ham_splitdata_log(dbp, txnid, ret_lsnp, flags, opcode, pgno, pageimage, pagels
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -618,7 +644,7 @@ __ham_splitdata_log(dbp, txnid, ret_lsnp, flags, opcode, pgno, pageimage, pagels
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -673,18 +699,25 @@ __ham_splitdata_log(dbp, txnid, ret_lsnp, flags, opcode, pgno, pageimage, pagels
bp += pageimage->size;
}
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -703,20 +736,21 @@ __ham_splitdata_log(dbp, txnid, ret_lsnp, flags, opcode, pgno, pageimage, pagels
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_splitdata_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -741,13 +775,14 @@ __ham_splitdata_read(dbenv, recbuf, argpp)
sizeof(__ham_splitdata_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -783,10 +818,10 @@ __ham_splitdata_read(dbenv, recbuf, argpp)
* PUBLIC: const DBT *, u_int32_t));
*/
int
-__ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
+__ham_replace_log(dbp, txnp, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
newitem, makedup)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -817,30 +852,31 @@ __ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -860,7 +896,7 @@ __ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -904,9 +940,15 @@ __ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
@@ -940,12 +982,13 @@ __ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -964,20 +1007,21 @@ __ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_replace_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1002,13 +1046,14 @@ __ham_replace_read(dbenv, recbuf, argpp)
sizeof(__ham_replace_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1058,10 +1103,10 @@ __ham_replace_read(dbenv, recbuf, argpp)
* PUBLIC: DB_LSN *, const DBT *));
*/
int
-__ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextlsn, nnext_pgno,
+__ham_copypage_log(dbp, txnp, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextlsn, nnext_pgno,
nnextlsn, page)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1092,30 +1137,31 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1135,7 +1181,7 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1175,9 +1221,15 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
@@ -1185,9 +1237,15 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (nextlsn != NULL)
+ if (nextlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(nextlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, nextlsn) != 0))
+ return (ret);
+ }
memcpy(bp, nextlsn, sizeof(*nextlsn));
- else
+ } else
memset(bp, 0, sizeof(*nextlsn));
bp += sizeof(*nextlsn);
@@ -1195,9 +1253,15 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (nnextlsn != NULL)
+ if (nnextlsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(nnextlsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, nnextlsn) != 0))
+ return (ret);
+ }
memcpy(bp, nnextlsn, sizeof(*nnextlsn));
- else
+ } else
memset(bp, 0, sizeof(*nnextlsn));
bp += sizeof(*nnextlsn);
@@ -1212,12 +1276,13 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
bp += page->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1236,20 +1301,21 @@ __ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextls
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_copypage_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1274,13 +1340,14 @@ __ham_copypage_read(dbenv, recbuf, argpp)
sizeof(__ham_copypage_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1321,15 +1388,83 @@ __ham_copypage_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __ham_metagroup_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_metagroup_42_args **));
+ */
+int
+__ham_metagroup_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __ham_metagroup_42_args **argpp;
+{
+ __ham_metagroup_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_metagroup_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->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(&uinttmp, bp, sizeof(uinttmp));
+ argp->mpgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
+ bp += sizeof(argp->metalsn);
+
+ 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(&uinttmp, bp, sizeof(uinttmp));
+ argp->newalloc = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ *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, db_pgno_t));
*/
int
-__ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno, metalsn,
+__ham_metagroup_log(dbp, txnp, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno, metalsn,
pgno, pagelsn, newalloc, last_pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t bucket;
@@ -1362,30 +1497,31 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1407,7 +1543,7 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1451,9 +1587,15 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (mmetalsn != NULL)
+ if (mmetalsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(mmetalsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, mmetalsn) != 0))
+ return (ret);
+ }
memcpy(bp, mmetalsn, sizeof(*mmetalsn));
- else
+ } else
memset(bp, 0, sizeof(*mmetalsn));
bp += sizeof(*mmetalsn);
@@ -1461,9 +1603,15 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (metalsn != NULL)
+ if (metalsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(metalsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, metalsn) != 0))
+ return (ret);
+ }
memcpy(bp, metalsn, sizeof(*metalsn));
- else
+ } else
memset(bp, 0, sizeof(*metalsn));
bp += sizeof(*metalsn);
@@ -1471,9 +1619,15 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (pagelsn != NULL)
+ if (pagelsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(pagelsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, pagelsn) != 0))
+ return (ret);
+ }
memcpy(bp, pagelsn, sizeof(*pagelsn));
- else
+ } else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
@@ -1485,12 +1639,13 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1509,20 +1664,21 @@ __ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_metagroup_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1547,13 +1703,14 @@ __ham_metagroup_read(dbenv, recbuf, argpp)
sizeof(__ham_metagroup_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1600,20 +1757,74 @@ __ham_metagroup_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __ham_groupalloc_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_groupalloc_42_args **));
+ */
+int
+__ham_groupalloc_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __ham_groupalloc_42_args **argpp;
+{
+ __ham_groupalloc_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_groupalloc_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->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_groupalloc_log __P((DB *, DB_TXN *, DB_LSN *,
* PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_pgno_t,
* PUBLIC: db_pgno_t));
*/
int
-__ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, free, last_pgno)
+__ham_groupalloc_log(dbp, txnp, ret_lsnp, flags, meta_lsn, start_pgno, num, unused, last_pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
DB_LSN * meta_lsn;
db_pgno_t start_pgno;
u_int32_t num;
- db_pgno_t free;
+ db_pgno_t unused;
db_pgno_t last_pgno;
{
DBT logrec;
@@ -1636,30 +1847,31 @@ __ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, fre
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1677,7 +1889,7 @@ __ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, fre
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1713,9 +1925,15 @@ __ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, fre
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (meta_lsn != NULL)
+ if (meta_lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(meta_lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, meta_lsn) != 0))
+ return (ret);
+ }
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
+ } else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
@@ -1727,7 +1945,7 @@ __ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, fre
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- uinttmp = (u_int32_t)free;
+ uinttmp = (u_int32_t)unused;
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
@@ -1735,12 +1953,13 @@ __ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, fre
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1759,20 +1978,21 @@ __ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, fre
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_groupalloc_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1797,13 +2017,14 @@ __ham_groupalloc_read(dbenv, recbuf, argpp)
sizeof(__ham_groupalloc_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -1824,7 +2045,7 @@ __ham_groupalloc_read(dbenv, recbuf, argpp)
bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
- argp->free = (db_pgno_t)uinttmp;
+ argp->unused = (db_pgno_t)uinttmp;
bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
@@ -1841,10 +2062,10 @@ __ham_groupalloc_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t));
*/
int
-__ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno, indx, len, dup_off, add,
+__ham_curadj_log(dbp, txnp, ret_lsnp, flags, pgno, indx, len, dup_off, add,
is_dup, order)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_pgno_t pgno;
@@ -1875,30 +2096,31 @@ __ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno, indx, len, dup_off, add,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1918,7 +2140,7 @@ __ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno, indx, len, dup_off, add,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1982,12 +2204,13 @@ __ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno, indx, len, dup_off, add,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2006,20 +2229,21 @@ __ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno, indx, len, dup_off, add,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_curadj_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2043,13 +2267,14 @@ __ham_curadj_read(dbenv, recbuf, argpp)
sizeof(__ham_curadj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -2096,9 +2321,9 @@ __ham_curadj_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t));
*/
int
-__ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx, new_indx)
+__ham_chgpg_log(dbp, txnp, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx, new_indx)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_ham_mode mode;
@@ -2127,30 +2352,31 @@ __ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -2168,7 +2394,7 @@ __ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -2224,12 +2450,13 @@ __ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -2248,20 +2475,21 @@ __ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__ham_chgpg_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -2285,13 +2513,14 @@ __ham_chgpg_read(dbenv, recbuf, argpp)
sizeof(__ham_chgpg_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
diff --git a/db/hash/hash_autop.c b/db/hash/hash_autop.c
index 5664ba793..aec47b77a 100644
--- a/db/hash/hash_autop.c
+++ b/db/hash/hash_autop.c
@@ -3,13 +3,6 @@
#include "db_config.h"
#ifdef HAVE_HASH
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -36,20 +29,18 @@ __ham_insdel_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_insdel_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_insdel%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_insdel%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -88,20 +79,18 @@ __ham_newpage_print(dbenv, dbtp, lsnp, notused2, notused3)
__ham_newpage_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_newpage_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_newpage%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_newpage%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -135,20 +124,18 @@ __ham_splitdata_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_splitdata_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_splitdata%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_splitdata%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -182,20 +169,18 @@ __ham_replace_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_replace_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_replace%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_replace%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tndx: %lu\n", (u_long)argp->ndx);
@@ -237,20 +222,18 @@ __ham_copypage_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_copypage_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_copypage%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_copypage%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tpagelsn: [%lu][%lu]\n",
@@ -273,6 +256,50 @@ __ham_copypage_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __ham_metagroup_42_print __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__ham_metagroup_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __ham_metagroup_42_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __ham_metagroup_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__ham_metagroup_42%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (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);
+ (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_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -287,20 +314,18 @@ __ham_metagroup_print(dbenv, dbtp, lsnp, notused2, notused3)
__ham_metagroup_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_metagroup_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_metagroup%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_metagroup%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -320,6 +345,44 @@ __ham_metagroup_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __ham_groupalloc_42_print __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__ham_groupalloc_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __ham_groupalloc_42_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __ham_groupalloc_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__ham_groupalloc_42%s: rec: %lu txnp %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->txnp->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("\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_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -334,26 +397,24 @@ __ham_groupalloc_print(dbenv, dbtp, lsnp, notused2, notused3)
__ham_groupalloc_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_groupalloc_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_groupalloc%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_groupalloc%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\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("\tunused: %lu\n", (u_long)argp->unused);
(void)printf("\tlast_pgno: %lu\n", (u_long)argp->last_pgno);
(void)printf("\n");
__os_free(dbenv, argp);
@@ -375,20 +436,18 @@ __ham_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
__ham_curadj_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_curadj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_curadj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_curadj%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->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("\tindx: %lu\n", (u_long)argp->indx);
@@ -417,20 +476,18 @@ __ham_chgpg_print(dbenv, dbtp, lsnp, notused2, notused3)
__ham_chgpg_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __ham_chgpg_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__ham_chgpg%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__ham_chgpg%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
diff --git a/db/hash/hash_conv.c b/db/hash/hash_conv.c
index a90799c7b..dda40b5e7 100644
--- a/db/hash/hash_conv.c
+++ b/db/hash/hash_conv.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_conv.c,v 11.16 2004/03/24 20:37:38 bostic Exp $
+ * $Id: hash_conv.c,v 12.4 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_swap.h"
diff --git a/db/hash/hash_dup.c b/db/hash/hash_dup.c
index 93fc2b51f..7252d8480 100644
--- a/db/hash/hash_dup.c
+++ b/db/hash/hash_dup.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -35,11 +35,9 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash_dup.c,v 11.85 2004/06/03 16:32:21 margo Exp $
+ * $Id: hash_dup.c,v 12.17 2006/09/07 20:05:29 bostic Exp $
*/
-#include "db_config.h"
-
/*
* PACKAGE: hashing
*
@@ -47,15 +45,10 @@
* Manipulation of duplicates for the hash package.
*/
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
+#include "db_config.h"
#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"
@@ -90,6 +83,7 @@ __ham_add_dup(dbc, nval, flags, pgnop)
{
DB *dbp;
DBT pval, tmp_val;
+ DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
u_int32_t add_bytes, new_size;
@@ -97,10 +91,11 @@ __ham_add_dup(dbc, nval, flags, pgnop)
u_int8_t *hk;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
- DB_ASSERT(flags != DB_CURRENT);
+ DB_ASSERT(dbenv, flags != DB_CURRENT);
add_bytes = nval->size +
(F_ISSET(nval, DB_DBT_PARTIAL) ? nval->doff : 0);
@@ -146,7 +141,7 @@ __ham_add_dup(dbc, nval, flags, pgnop)
pval.data = HKEYDATA_DATA(hk);
pval.size = LEN_HDATA(dbp, hcp->page, dbp->pgsize,
hcp->indx);
- if ((ret = __ham_make_dup(dbp->dbenv,
+ if ((ret = __ham_make_dup(dbenv,
&pval, &tmp_val, &dbc->my_rdata.data,
&dbc->my_rdata.ulen)) != 0 || (ret =
__ham_replpair(dbc, &tmp_val, 1)) != 0)
@@ -165,7 +160,7 @@ __ham_add_dup(dbc, nval, flags, pgnop)
}
/* Now make the new entry a duplicate. */
- if ((ret = __ham_make_dup(dbp->dbenv, nval,
+ if ((ret = __ham_make_dup(dbenv, nval,
&tmp_val, &dbc->my_rdata.data, &dbc->my_rdata.ulen)) != 0)
return (ret);
@@ -200,15 +195,12 @@ __ham_add_dup(dbc, nval, flags, pgnop)
tmp_val.doff = hcp->dup_off + DUP_SIZE(hcp->dup_len);
break;
default:
- DB_ASSERT(0);
- return (EINVAL);
+ return (__db_unknown_path(dbenv, "__ham_add_dup"));
}
/* Add the duplicate. */
- ret = __ham_replpair(dbc, &tmp_val, 0);
- if (ret == 0)
- ret = __memp_fset(mpf, hcp->page, DB_MPOOL_DIRTY);
- if (ret != 0)
+ if ((ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0)) != 0 ||
+ (ret = __ham_replpair(dbc, &tmp_val, 0)) != 0)
return (ret);
/* Now, update the cursor if necessary. */
@@ -226,8 +218,7 @@ __ham_add_dup(dbc, nval, flags, pgnop)
hcp->dup_len = nval->size;
break;
default:
- DB_ASSERT(0);
- return (EINVAL);
+ return (__db_unknown_path(dbenv, "__ham_add_dup"));
}
ret = __ham_c_update(dbc, tmp_val.size, 1, 1);
return (ret);
@@ -256,6 +247,7 @@ __ham_dup_convert(dbc)
DB *dbp;
DBC **hcs;
DBT dbt;
+ DB_ENV *dbenv;
DB_LSN lsn;
DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
@@ -266,6 +258,7 @@ __ham_dup_convert(dbc)
u_int8_t *p, *pend;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
@@ -302,7 +295,7 @@ __ham_dup_convert(dbc)
memcpy(&ho, P_ENTRY(dbp, hcp->page, H_DATAINDEX(hcp->indx)),
HOFFPAGE_SIZE);
UMRW_SET(bo.unused1);
- B_TSET(bo.type, ho.type, 0);
+ B_TSET(bo.type, ho.type);
UMRW_SET(bo.unused2);
bo.pgno = ho.pgno;
bo.tlen = ho.tlen;
@@ -311,9 +304,6 @@ __ham_dup_convert(dbc)
ret = __db_pitem(dbc, dp, 0, dbt.size, &dbt, NULL);
finish: if (ret == 0) {
- if ((ret = __memp_fset(mpf, dp, DB_MPOOL_DIRTY)) != 0)
- break;
-
/* Update any other cursors. */
if (hcs != NULL && DBC_LOGGING(dbc) &&
IS_SUBTRANSACTION(dbc->txn)) {
@@ -367,7 +357,7 @@ finish: if (ret == 0) {
}
break;
default:
- ret = __db_pgfmt(dbp->dbenv, hcp->pgno);
+ ret = __db_pgfmt(dbenv, hcp->pgno);
break;
}
@@ -376,21 +366,20 @@ finish: if (ret == 0) {
* item.
*/
if (ret == 0)
+ ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0);
+
+ if (ret == 0)
ret = __ham_move_offpage(dbc, hcp->page,
(u_int32_t)H_DATAINDEX(hcp->indx), PGNO(dp));
-err: if (ret == 0)
- ret = __memp_fset(mpf, hcp->page, DB_MPOOL_DIRTY);
-
- if ((t_ret = __memp_fput(
- mpf, dp, ret == 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
+err: if ((t_ret = __memp_fput(mpf, dp, 0)) != 0 && ret == 0)
ret = t_ret;
if (ret == 0)
hcp->dup_tlen = hcp->dup_off = hcp->dup_len = 0;
if (hcs != NULL)
- __os_free(dbp->dbenv, hcs);
+ __os_free(dbenv, hcs);
return (ret);
}
@@ -466,7 +455,7 @@ __ham_check_move(dbc, add_len)
db_pgno_t next_pgno;
u_int32_t new_datalen, old_len, rectype;
u_int8_t *hk;
- int ret;
+ int ret, t_ret;
dbp = dbc->dbp;
mpf = dbp->mpf;
@@ -499,7 +488,8 @@ __ham_check_move(dbc, add_len)
HOFFDUP_SIZE - old_len <= P_FREESPACE(dbp, hcp->page)))
return (0);
- if (!ISBIG(hcp, new_datalen) && add_len <= P_FREESPACE(dbp, hcp->page))
+ if (!ISBIG(hcp, new_datalen) &&
+ (new_datalen - old_len) <= P_FREESPACE(dbp, hcp->page))
return (0);
/*
@@ -521,8 +511,8 @@ __ham_check_move(dbc, add_len)
(ret = __memp_fput(mpf, next_pagep, 0)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf,
- &next_pgno, DB_MPOOL_CREATE, &next_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &next_pgno, dbc->txn,
+ DB_MPOOL_CREATE, &next_pagep)) != 0)
return (ret);
if (P_FREESPACE(dbp, next_pagep) >= new_datalen)
@@ -530,11 +520,19 @@ __ham_check_move(dbc, add_len)
}
/* No more pages, add one. */
+ if ((ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0)) != 0)
+ return (ret);
+
if (next_pagep == NULL && (ret = __ham_add_ovflpage(dbc,
hcp->page, 0, &next_pagep)) != 0)
return (ret);
/* Add new page at the end of the chain. */
+ if ((ret = __memp_dirty(mpf, &next_pagep, dbc->txn, 0)) != 0) {
+ (void)__memp_fput(mpf, next_pagep, 0);
+ return (ret);
+ }
+
if (P_FREESPACE(dbp, next_pagep) < new_datalen && (ret =
__ham_add_ovflpage(dbc, next_pagep, 1, &next_pagep)) != 0) {
(void)__memp_fput(mpf, next_pagep, 0);
@@ -583,25 +581,15 @@ __ham_check_move(dbc, add_len)
LSN_NOT_LOGGED(new_lsn);
/* Move lsn onto page. */
+ if ((ret = __memp_dirty(mpf, &next_pagep, dbc->txn, 0)) != 0) {
+ (void)__memp_fput(mpf, next_pagep, 0);
+ return (ret);
+ }
LSN(next_pagep) = new_lsn; /* Structure assignment. */
__ham_copy_item(dbp, hcp->page, H_KEYINDEX(hcp->indx), next_pagep);
__ham_copy_item(dbp, hcp->page, H_DATAINDEX(hcp->indx), next_pagep);
- /*
- * We've just manually inserted a key and set of data onto
- * next_pagep; however, it's possible that our caller will
- * return without further modifying the new page, for instance
- * if DB_NODUPDATA is set and our new item is a duplicate duplicate.
- * Thus, to be on the safe side, we need to mark the page dirty
- * here. [#2996]
- *
- * 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 = __memp_fset(mpf, next_pagep, DB_MPOOL_DIRTY)) != 0)
- goto out;
-
/* Update all cursors that used to point to this item. */
if ((ret = __ham_c_chgpg(dbc, PGNO(hcp->page), H_KEYINDEX(hcp->indx),
PGNO(next_pagep), NUM_ENT(next_pagep) - 2)) != 0)
@@ -623,8 +611,8 @@ __ham_check_move(dbc, add_len)
if (!STD_LOCKING(dbc))
hcp->hdr->nelem++;
-out:
- (void)__memp_fput(mpf, hcp->page, DB_MPOOL_DIRTY);
+out: if ((t_ret = __memp_fput(mpf, hcp->page, 0)) != 0 && ret == 0)
+ ret = t_ret;
hcp->page = next_pagep;
hcp->pgno = PGNO(hcp->page);
hcp->indx = NUM_ENT(hcp->page) - 2;
@@ -738,8 +726,7 @@ __ham_dsearch(dbc, dbt, offp, cmpp, flags)
while (i < hcp->dup_tlen) {
memcpy(&len, data, sizeof(db_indx_t));
data += sizeof(db_indx_t);
- cur.data = data;
- cur.size = (u_int32_t)len;
+ DB_SET_DBT(cur, data, len);
/*
* If we find an exact match, we're done. If in a sorted
@@ -840,15 +827,14 @@ __ham_c_chgpg(dbc, old_pgno, old_index, new_pgno, new_index)
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);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links) {
if (cp == dbc || cp->dbtype != DB_HASH)
continue;
@@ -862,7 +848,8 @@ __ham_c_chgpg(dbc, old_pgno, old_index, new_pgno, new_index)
if (F_ISSET(hcp, H_DELETED))
continue;
- if (hcp->pgno == old_pgno) {
+ if (hcp->pgno == old_pgno &&
+ !MVCC_SKIP_CURADJ(cp, old_pgno)) {
if (hcp->indx == old_index) {
hcp->pgno = new_pgno;
hcp->indx = new_index;
@@ -872,9 +859,9 @@ __ham_c_chgpg(dbc, old_pgno, old_index, new_pgno, new_index)
found = 1;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (found != 0 && DBC_LOGGING(dbc)) {
if ((ret = __ham_chgpg_log(dbp, my_txn, &lsn, 0, DB_HAM_CHGPG,
diff --git a/db/hash/hash_func.c b/db/hash/hash_func.c
index b117fcee3..3b3c5137b 100644
--- a/db/hash/hash_func.c
+++ b/db/hash/hash_func.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993
@@ -39,15 +39,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash_func.c,v 11.15 2004/01/28 03:36:11 bostic Exp $
+ * $Id: hash_func.c,v 12.4 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/hash.h"
diff --git a/db/hash/hash_meta.c b/db/hash/hash_meta.c
index 6d700fcc1..33697e112 100644
--- a/db/hash/hash_meta.c
+++ b/db/hash/hash_meta.c
@@ -1,21 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_meta.c,v 11.31 2004/09/22 03:46:22 bostic Exp $
+ * $Id: hash_meta.c,v 12.8 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -44,8 +39,8 @@ __ham_get_meta(dbc)
hashp->meta_pgno, DB_LOCK_READ, 0, &hcp->hlock)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf,
- &hashp->meta_pgno, DB_MPOOL_CREATE, &(hcp->hdr))) != 0)
+ if ((ret = __memp_fget(mpf, &hashp->meta_pgno, dbc->txn,
+ DB_MPOOL_CREATE, &hcp->hdr)) != 0)
(void)__LPUT(dbc, hcp->hlock);
return (ret);
@@ -62,15 +57,16 @@ __ham_release_meta(dbc)
{
DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
+ int ret;
mpf = dbc->dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
- if (hcp->hdr)
- (void)__memp_fput(mpf, hcp->hdr,
- F_ISSET(hcp, H_DIRTY) ? DB_MPOOL_DIRTY : 0);
- hcp->hdr = NULL;
- F_CLR(hcp, H_DIRTY);
+ if (hcp->hdr != NULL) {
+ if ((ret = __memp_fput(mpf, hcp->hdr, 0)) != 0)
+ return (ret);
+ hcp->hdr = NULL;
+ }
return (__TLPUT(dbc, hcp->hlock));
}
@@ -78,11 +74,12 @@ __ham_release_meta(dbc)
/*
* Mark the meta-data page dirty.
*
- * PUBLIC: int __ham_dirty_meta __P((DBC *));
+ * PUBLIC: int __ham_dirty_meta __P((DBC *, u_int32_t));
*/
int
-__ham_dirty_meta(dbc)
+__ham_dirty_meta(dbc, flags)
DBC *dbc;
+ u_int32_t flags;
{
DB *dbp;
HASH *hashp;
@@ -93,12 +90,9 @@ __ham_dirty_meta(dbc)
hashp = dbp->h_internal;
hcp = (HASH_CURSOR *)dbc->internal;
- ret = 0;
-
- ret = __db_lget(dbc, LCK_COUPLE,
- hashp->meta_pgno, DB_LOCK_WRITE, 0, &hcp->hlock);
+ if ((ret = __db_lget(dbc, LCK_COUPLE,
+ hashp->meta_pgno, DB_LOCK_WRITE, 0, &hcp->hlock)) != 0)
+ return (ret);
- if (ret == 0)
- F_SET(hcp, H_DIRTY);
- return (ret);
+ return (__memp_dirty(dbp->mpf, &hcp->hdr, dbc->txn, flags));
}
diff --git a/db/hash/hash_method.c b/db/hash/hash_method.c
index 6b59787a6..6075fbbfa 100644
--- a/db/hash/hash_method.c
+++ b/db/hash/hash_method.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_method.c,v 11.17 2004/01/28 03:36:11 bostic Exp $
+ * $Id: hash_method.c,v 12.4 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/hash.h"
diff --git a/db/hash/hash_open.c b/db/hash/hash_open.c
index 67b12e5eb..871f014a3 100644
--- a/db/hash/hash_open.c
+++ b/db/hash/hash_open.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -39,26 +39,18 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash_open.c,v 11.191 2004/06/22 18:43:38 margo Exp $
+ * $Id: hash_open.c,v 12.16 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
#include "dbinc/hash.h"
#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"
@@ -113,11 +105,12 @@ __ham_open(dbp, txn, name, base_pgno, flags)
if (!F_ISSET(dbp, DB_AM_RDONLY) && !IS_RECOVERING(dbenv) &&
hashp->h_hash(dbp,
CHARKEY, sizeof(CHARKEY)) != hcp->hdr->h_charkey) {
- __db_err(dbp->dbenv,
+ __db_errx(dbenv,
"hash: incompatible hash function");
ret = EINVAL;
goto err2;
}
+ hashp->h_nelem = hcp->hdr->nelem;
if (F_ISSET(&hcp->hdr->dbmeta, DB_HASH_DUP))
F_SET(dbp, DB_AM_DUP);
if (F_ISSET(&hcp->hdr->dbmeta, DB_HASH_DUPSORT))
@@ -126,7 +119,7 @@ __ham_open(dbp, txn, name, base_pgno, flags)
F_SET(dbp, DB_AM_SUBDB);
} else if (!IS_RECOVERING(dbenv) && !F_ISSET(dbp, DB_AM_RECOVER)) {
- __db_err(dbp->dbenv,
+ __db_errx(dbenv,
"%s: Invalid hash meta page %d", name, base_pgno);
ret = EINVAL;
}
@@ -168,7 +161,7 @@ __ham_metachk(dbp, name, hashm)
case 4:
case 5:
case 6:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: hash version %lu requires a version upgrade",
name, (u_long)vers);
return (DB_OLD_VERSION);
@@ -176,7 +169,7 @@ __ham_metachk(dbp, name, hashm)
case 8:
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: unsupported hash version: %lu", name, (u_long)vers);
return (EINVAL);
}
@@ -204,7 +197,7 @@ __ham_metachk(dbp, name, hashm)
F_SET(dbp, DB_AM_DUP);
else
if (F_ISSET(dbp, DB_AM_DUP)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: DB_DUP specified to open method but not set in database",
name);
return (EINVAL);
@@ -214,7 +207,7 @@ __ham_metachk(dbp, name, hashm)
F_SET(dbp, DB_AM_SUBDB);
else
if (F_ISSET(dbp, DB_AM_SUBDB)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: multiple databases specified but not supported in file",
name);
return (EINVAL);
@@ -225,7 +218,7 @@ __ham_metachk(dbp, name, hashm)
dbp->dup_compare = __bam_defcmp;
} else
if (dbp->dup_compare != NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: duplicate sort function specified but not set in database",
name);
return (EINVAL);
@@ -255,11 +248,14 @@ __ham_init_meta(dbp, meta, pgno, lsnp)
db_pgno_t pgno;
DB_LSN *lsnp;
{
+ DB_ENV *dbenv;
HASH *hashp;
db_pgno_t nbuckets;
u_int i, l2;
+ dbenv = dbp->dbenv;
hashp = dbp->h_internal;
+
if (hashp->h_hash == NULL)
hashp->h_hash = DB_HASHVERSION < 5 ? __ham_func4 : __ham_func5;
@@ -280,8 +276,8 @@ __ham_init_meta(dbp, meta, pgno, lsnp)
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);
+ ((DB_CIPHER *)dbenv->crypto_handle)->alg;
+ DB_ASSERT(dbenv, meta->dbmeta.encrypt_alg != 0);
meta->crypto_magic = meta->dbmeta.magic;
}
meta->dbmeta.type = P_HASHMETA;
@@ -291,6 +287,7 @@ __ham_init_meta(dbp, meta, pgno, lsnp)
meta->high_mask = nbuckets - 1;
meta->low_mask = (nbuckets >> 1) - 1;
meta->ffactor = hashp->h_ffactor;
+ meta->nelem = hashp->h_nelem;
meta->h_charkey = hashp->h_hash(dbp, CHARKEY, sizeof(CHARKEY));
memcpy(meta->dbmeta.uid, dbp->fileid, DB_FILE_ID_LEN);
@@ -357,28 +354,34 @@ __ham_new_file(dbp, txn, fhp, name)
page = NULL;
buf = NULL;
- if (name == NULL) {
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
/* Build meta-data page. */
lpgno = PGNO_BASE_MD;
- if ((ret =
- __memp_fget(mpf, &lpgno, DB_MPOOL_CREATE, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &lpgno, txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &meta)) != 0)
return (ret);
LSN_NOT_LOGGED(lsn);
lpgno = __ham_init_meta(dbp, meta, PGNO_BASE_MD, &lsn);
meta->dbmeta.last_pgno = lpgno;
- ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ if ((ret = __db_log_page(dbp,
+ txn, &lsn, meta->dbmeta.pgno, (PAGE *)meta)) != 0)
+ goto err;
+ ret = __memp_fput(mpf, meta, 0);
meta = NULL;
if (ret != 0)
goto err;
/* Allocate the final hash bucket. */
- if ((ret =
- __memp_fget(mpf, &lpgno, DB_MPOOL_CREATE, &page)) != 0)
+ if ((ret = __memp_fget(mpf, &lpgno, txn,
+ DB_MPOOL_CREATE, &page)) != 0)
goto err;
P_INIT(page,
dbp->pgsize, lpgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
LSN_NOT_LOGGED(page->lsn);
- ret = __memp_fput(mpf, page, DB_MPOOL_DIRTY);
+ if ((ret =
+ __db_log_page(dbp, txn, &page->lsn, lpgno, page)) != 0)
+ goto err;
+ ret = __memp_fput(mpf, page, 0);
page = NULL;
if (ret != 0)
goto err;
@@ -472,8 +475,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 =
- __memp_fget(mpf, &dbp->meta_pgno, DB_MPOOL_CREATE, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &dbp->meta_pgno, dbc->txn,
+ DB_MPOOL_CREATE, &meta)) != 0)
goto err;
/* Initialize the new meta-data page. */
@@ -489,7 +492,8 @@ __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 = __memp_fget(mpf, &mpgno, 0, &mmeta)) != 0)
+ if ((ret = __memp_fget(mpf, &mpgno, dbc->txn,
+ DB_MPOOL_DIRTY, &mmeta)) != 0)
goto err;
/*
@@ -509,40 +513,36 @@ __ham_new_subdb(mdbp, dbp, txn)
if (DBENV_LOGGING(dbenv))
if ((ret = __ham_groupalloc_log(mdbp, txn,
&LSN(mmeta), 0, &LSN(mmeta), meta->spares[0],
- meta->max_bucket + 1, mmeta->free, mmeta->last_pgno)) != 0)
+ meta->max_bucket + 1, 0, mmeta->last_pgno)) != 0)
goto err;
/* Release the new meta-data page. */
- if ((ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
meta = NULL;
lpgno += mmeta->last_pgno;
/* Now allocate the final hash bucket. */
- if ((ret = __memp_fget(mpf, &lpgno, DB_MPOOL_CREATE, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &lpgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &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 = __memp_fput(mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
goto err;
- /* Now put the master-metadata page back. */
- if ((ret = __memp_fput(mpf, mmeta, DB_MPOOL_DIRTY)) != 0)
- goto err;
- mmeta = NULL;
-
-err:
- if (mmeta != NULL)
- if ((t_ret = __memp_fput(mpf, mmeta, 0)) != 0 && ret == 0)
- ret = t_ret;
+err: /* Now put the master-metadata page back. */
+ if (mmeta != NULL &&
+ (t_ret = __memp_fput(mpf, mmeta, 0)) != 0 && ret == 0)
+ ret = t_ret;
if ((t_ret = __LPUT(dbc, mmlock)) != 0 && ret == 0)
ret = t_ret;
- if (meta != NULL)
- if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
- ret = t_ret;
+ 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 (dbc != NULL)
diff --git a/db/hash/hash_page.c b/db/hash/hash_page.c
index 636767f4e..937718bc4 100644
--- a/db/hash/hash_page.c
+++ b/db/hash/hash_page.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -39,11 +39,9 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash_page.c,v 11.102 2004/09/22 21:14:56 ubell Exp $
+ * $Id: hash_page.c,v 12.21 2006/09/07 20:05:30 bostic Exp $
*/
-#include "db_config.h"
-
/*
* PACKAGE: hashing
*
@@ -51,15 +49,10 @@
* Page manipulation for hashing package.
*/
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
+#include "db_config.h"
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
#include "dbinc/mp.h"
@@ -85,7 +78,7 @@ __ham_item(dbc, mode, pgnop)
hcp = (HASH_CURSOR *)dbc->internal;
if (F_ISSET(hcp, H_DELETED)) {
- __db_err(dbp->dbenv, "Attempt to return a deleted item");
+ __db_errx(dbp->dbenv, "Attempt to return a deleted item");
return (EINVAL);
}
F_CLR(hcp, H_OK | H_NOMORE);
@@ -129,7 +122,7 @@ recheck:
}
next_pgno = NEXT_PGNO(hcp->page);
hcp->indx = 0;
- if ((ret = __ham_next_cpage(dbc, next_pgno, 0)) != 0)
+ if ((ret = __ham_next_cpage(dbc, next_pgno)) != 0)
return (ret);
goto recheck;
}
@@ -337,7 +330,7 @@ __ham_item_prev(dbc, mode, pgnop)
F_SET(hcp, H_NOMORE);
return (DB_NOTFOUND);
} else if ((ret =
- __ham_next_cpage(dbc, hcp->pgno, 0)) != 0)
+ __ham_next_cpage(dbc, hcp->pgno)) != 0)
return (ret);
else
hcp->indx = NUM_ENT(hcp->page);
@@ -348,13 +341,13 @@ __ham_item_prev(dbc, mode, pgnop)
* have to find the end of a bucket.
*/
if (hcp->indx == NDX_INVALID) {
- DB_ASSERT(hcp->page != NULL);
+ DB_ASSERT(dbp->dbenv, hcp->page != NULL);
hcp->indx = NUM_ENT(hcp->page);
for (next_pgno = NEXT_PGNO(hcp->page);
next_pgno != PGNO_INVALID;
next_pgno = NEXT_PGNO(hcp->page)) {
- if ((ret = __ham_next_cpage(dbc, next_pgno, 0)) != 0)
+ if ((ret = __ham_next_cpage(dbc, next_pgno)) != 0)
return (ret);
hcp->indx = NUM_ENT(hcp->page);
}
@@ -563,8 +556,9 @@ __ham_del_pair(dbc, reclaim_page)
n_pagep = p_pagep = nn_pagep = NULL;
ndx = hcp->indx;
- if (hcp->page == NULL && (ret = __memp_fget(
- mpf, &hcp->pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
+ if (hcp->page == NULL &&
+ (ret = __memp_fget(mpf, &hcp->pgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &hcp->page)) != 0)
return (ret);
p = hcp->page;
@@ -650,9 +644,9 @@ __ham_del_pair(dbc, reclaim_page)
* Perhaps we can retain incremental numbers and apply them later.
*/
if (!STD_LOCKING(dbc)) {
- --hcp->hdr->nelem;
- if ((ret = __ham_dirty_meta(dbc)) != 0)
+ if ((ret = __ham_dirty_meta(dbc, 0)) != 0)
return (ret);
+ --hcp->hdr->nelem;
}
/*
@@ -666,18 +660,20 @@ __ham_del_pair(dbc, reclaim_page)
if (!reclaim_page ||
NUM_ENT(p) != 0 ||
(PREV_PGNO(p) == PGNO_INVALID && NEXT_PGNO(p) == PGNO_INVALID))
- return (__memp_fset(mpf, p, DB_MPOOL_DIRTY));
+ return (0);
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 = __memp_fget(mpf, &NEXT_PGNO(p), 0, &n_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &NEXT_PGNO(p), dbc->txn,
+ DB_MPOOL_DIRTY, &n_pagep)) != 0)
return (ret);
- if (NEXT_PGNO(n_pagep) != PGNO_INVALID && (ret =
- __memp_fget(mpf, &NEXT_PGNO(n_pagep), 0, &nn_pagep)) != 0)
+ if (NEXT_PGNO(n_pagep) != PGNO_INVALID &&
+ (ret = __memp_fget(mpf, &NEXT_PGNO(n_pagep), dbc->txn,
+ DB_MPOOL_DIRTY, &nn_pagep)) != 0)
goto err;
if (DBC_LOGGING(dbc)) {
@@ -702,7 +698,7 @@ __ham_del_pair(dbc, reclaim_page)
if (nn_pagep != NULL) {
PREV_PGNO(nn_pagep) = PGNO(p);
if ((ret =
- __memp_fput(mpf, nn_pagep, DB_MPOOL_DIRTY)) != 0) {
+ __memp_fput(mpf, nn_pagep, 0)) != 0) {
nn_pagep = NULL;
goto err;
}
@@ -730,19 +726,18 @@ __ham_del_pair(dbc, reclaim_page)
hcp->pgno = PGNO(p);
hcp->order += order;
- 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 = __memp_fget(mpf, &PREV_PGNO(p), 0, &p_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &PREV_PGNO(p), dbc->txn,
+ DB_MPOOL_DIRTY, &p_pagep)) != 0)
goto err;
if (NEXT_PGNO(p) != PGNO_INVALID) {
- if ((ret =
- __memp_fget(mpf, &NEXT_PGNO(p), 0, &n_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &NEXT_PGNO(p), dbc->txn,
+ DB_MPOOL_DIRTY, &n_pagep)) != 0)
goto err;
n_lsn = &LSN(n_pagep);
} else {
@@ -799,10 +794,10 @@ __ham_del_pair(dbc, reclaim_page)
chg_pgno = PGNO(p);
ret = __db_free(dbc, p);
if ((t_ret =
- __memp_fput(mpf, p_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, p_pagep, 0)) != 0 && ret == 0)
ret = t_ret;
if (n_pagep != NULL && (t_ret =
- __memp_fput(mpf, n_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, n_pagep, 0)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
return (ret);
@@ -842,21 +837,26 @@ __ham_replpair(dbc, dbt, make_dup)
DB_LSN new_lsn;
HASH_CURSOR *hcp;
u_int32_t change;
- u_int32_t dup_flag, len, memsize;
+ u_int32_t dup_flag, len, memsize, newlen;
int beyond_eor, is_big, is_plus, ret, type;
u_int8_t *beg, *dest, *end, *hk, *src;
void *memp;
/*
- * Big item replacements are handled in generic code.
- * Items that fit on the current page fall into 4 classes.
- * 1. On-page element, same size
- * 2. On-page element, new is bigger (fits)
- * 3. On-page element, new is bigger (does not fit)
- * 4. On-page element, old is bigger
- * Numbers 1, 2, and 4 are essentially the same (and should
- * be the common case). We handle case 3 as a delete and
- * add.
+ * Items that were already offpage (ISBIG) were handled before
+ * we get in here. So, we need only handle cases where the old
+ * key is on a regular page. That leaves us 6 cases:
+ * 1. Original data onpage; new data is smaller
+ * 2. Original data onpage; new data is the same size
+ * 3. Original data onpage; new data is bigger, but not ISBIG,
+ * fits on page
+ * 4. Original data onpage; new data is bigger, but not ISBIG,
+ * does not fit on page
+ * 5. Original data onpage; New data is an off-page item.
+ * 6. Original data was offpage; new item is smaller.
+ *
+ * Cases 1-3 are essentially the same (and should be the common case).
+ * We handle 4-6 as delete and add.
*/
dbp = dbc->dbp;
dbenv = dbp->dbenv;
@@ -891,7 +891,7 @@ __ham_replpair(dbc, dbt, make_dup)
beyond_eor = dbt->doff + dbt->dlen > len;
if (beyond_eor) {
/*
- * The change is beyond the end of file. If change
+ * The change is beyond the end of record. If change
* is a positive number, we can simply add the extension
* to it. However, if change is negative, then we need
* to figure out if the extension is larger than the
@@ -907,10 +907,21 @@ __ham_replpair(dbc, dbt, make_dup)
change -= (dbt->doff + dbt->dlen - len);
}
- if ((is_plus && change > P_FREESPACE(dbp, hcp->page)) ||
+ newlen = (is_plus ? len + change : len - change);
+ if (ISBIG(hcp, newlen) ||
+ (is_plus && change > P_FREESPACE(dbp, hcp->page)) ||
beyond_eor || is_big) {
/*
- * Case 3 -- two subcases.
+ * If we are in cases 4 or 5 then is_plus will be true.
+ * If we don't have a transaction then we cannot roll back,
+ * make sure there is enough room for the new page.
+ */
+ if (is_plus && dbc->txn == NULL &&
+ dbp->mpf->mfp->maxpgno != 0 &&
+ dbp->mpf->mfp->maxpgno == dbp->mpf->mfp->last_pgno)
+ return (__db_space_err(dbp));
+ /*
+ * Cases 4-6 -- two subcases.
* A. This is not really a partial operation, but an overwrite.
* Simple del and add works.
* B. This is a partial and we need to construct the data that
@@ -921,9 +932,9 @@ __ham_replpair(dbc, dbt, make_dup)
* key, this could be a performance hit).
*/
memset(&tmp, 0, sizeof(tmp));
- if ((ret =
- __db_ret(dbp, hcp->page, H_KEYINDEX(hcp->indx),
- &tmp, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
+ if ((ret = __db_ret(dbp, dbc->txn,
+ hcp->page, H_KEYINDEX(hcp->indx), &tmp,
+ &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
return (ret);
/* Preserve duplicate info. */
@@ -939,7 +950,7 @@ __ham_replpair(dbc, dbt, make_dup)
memset(&tdata, 0, sizeof(tdata));
memp = NULL;
memsize = 0;
- if ((ret = __db_ret(dbp, hcp->page,
+ if ((ret = __db_ret(dbp, dbc->txn, hcp->page,
H_DATAINDEX(hcp->indx), &tdata, &memp, &memsize))
!= 0)
goto err;
@@ -1006,7 +1017,6 @@ err: return (ret);
(u_int32_t)H_DATAINDEX(hcp->indx), &LSN(hcp->page),
(int32_t)dbt->doff, &old_dbt, dbt, make_dup)) != 0)
return (ret);
-
} else
LSN_NOT_LOGGED(new_lsn);
@@ -1128,13 +1138,14 @@ __ham_split_page(dbc, obucket, nbucket)
if ((ret = __db_lget(dbc,
0, bucket_pgno, DB_LOCK_WRITE, 0, &block)) != 0)
goto err;
- if ((ret = __memp_fget(mpf,
- &bucket_pgno, DB_MPOOL_CREATE, &old_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &bucket_pgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &old_pagep)) != 0)
goto err;
/* Properly initialize the new bucket page. */
npgno = BUCKET_TO_PAGE(hcp, nbucket);
- if ((ret = __memp_fget(mpf, &npgno, DB_MPOOL_CREATE, &new_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &npgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &new_pagep)) != 0)
goto err;
P_INIT(new_pagep,
dbp->pgsize, npgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
@@ -1159,14 +1170,14 @@ __ham_split_page(dbc, obucket, nbucket)
big_len = 0;
big_buf = NULL;
- key.flags = 0;
+ memset(&key, 0, sizeof(key));
while (temp_pagep != NULL) {
if ((ret = __ham_get_clist(dbp,
PGNO(temp_pagep), NDX_INVALID, &carray)) != 0)
goto err;
for (n = 0; n < (db_indx_t)NUM_ENT(temp_pagep); n += 2) {
- if ((ret = __db_ret(dbp, temp_pagep,
+ if ((ret = __db_ret(dbp, dbc->txn, temp_pagep,
H_KEYINDEX(n), &key, &big_buf, &big_len)) != 0)
goto err;
@@ -1239,8 +1250,8 @@ __ham_split_page(dbc, obucket, nbucket)
if (next_pgno == PGNO_INVALID)
temp_pagep = NULL;
- else if ((ret = __memp_fget(
- mpf, &next_pgno, DB_MPOOL_CREATE, &temp_pagep)) != 0)
+ else if ((ret = __memp_fget(mpf, &next_pgno, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &temp_pagep)) != 0)
goto err;
if (temp_pagep != NULL) {
@@ -1298,21 +1309,21 @@ __ham_split_page(dbc, obucket, nbucket)
LSN_NOT_LOGGED(LSN(new_pagep));
}
- ret = __memp_fput(mpf, old_pagep, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, old_pagep, 0);
if ((t_ret =
- __memp_fput(mpf, new_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, new_pagep, 0)) != 0 && ret == 0)
ret = t_ret;
if (0) {
err: if (old_pagep != NULL)
- (void)__memp_fput(mpf, old_pagep, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, old_pagep, 0);
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);
+ (void)__memp_fput(mpf, new_pagep, 0);
}
if (temp_pagep != NULL && PGNO(temp_pagep) != bucket_pgno)
- (void)__memp_fput(mpf, temp_pagep, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, temp_pagep, 0);
}
if ((t_ret = __TLPUT(dbc, block)) != 0 && ret == 0)
ret = t_ret;
@@ -1344,7 +1355,8 @@ __ham_add_el(dbc, key, val, type)
HASH_CURSOR *hcp;
HOFFPAGE doff, koff;
db_pgno_t next_pgno, pgno;
- u_int32_t data_size, key_size, pairsize, rectype;
+ u_int32_t data_size, key_size;
+ u_int32_t pages, pagespace, pairsize, rectype;
int do_expand, is_keybig, is_databig, ret;
int key_type, data_type;
@@ -1355,8 +1367,8 @@ __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 = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
+ if (hcp->page == NULL && (ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_CREATE, &hcp->page)) != 0)
return (ret);
key_size = HKEYDATA_PSIZE(key->size);
@@ -1380,7 +1392,7 @@ __ham_add_el(dbc, key, val, type)
if (P_FREESPACE(dbp, hcp->page) >= pairsize)
break;
next_pgno = NEXT_PGNO(hcp->page);
- if ((ret = __ham_next_cpage(dbc, next_pgno, 0)) != 0)
+ if ((ret = __ham_next_cpage(dbc, next_pgno)) != 0)
return (ret);
}
@@ -1389,6 +1401,8 @@ __ham_add_el(dbc, key, val, type)
*/
if (P_FREESPACE(dbp, hcp->page) < pairsize) {
do_expand = 1;
+ if ((ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0)) != 0)
+ return (ret);
if ((ret = __ham_add_ovflpage(dbc,
(PAGE *)hcp->page, 1, (PAGE **)&hcp->page)) != 0)
return (ret);
@@ -1396,6 +1410,27 @@ __ham_add_el(dbc, key, val, type)
}
/*
+ * If we don't have a transaction then make sure we will not
+ * run out of file space before updating the key or data.
+ */
+ if (dbc->txn == NULL &&
+ dbp->mpf->mfp->maxpgno != 0 && (is_keybig || is_databig)) {
+ pagespace = P_MAXSPACE(dbp, dbp->pgsize);
+ pages = 0;
+ if (is_databig)
+ pages = ((data_size - 1) / pagespace) + 1;
+ if (is_keybig) {
+ pages += ((key->size - 1) / pagespace) + 1;
+ if (pages >
+ (dbp->mpf->mfp->maxpgno - dbp->mpf->mfp->last_pgno))
+ return (__db_space_err(dbp));
+ }
+ }
+
+ if ((ret = __memp_dirty(mpf, &hcp->page, dbc->txn, 0)) != 0)
+ return (ret);
+
+ /*
* Update cursor.
*/
hcp->indx = NUM_ENT(hcp->page);
@@ -1470,9 +1505,9 @@ __ham_add_el(dbc, key, val, type)
* Maybe keep incremental numbers here.
*/
if (!STD_LOCKING(dbc)) {
- hcp->hdr->nelem++;
- if ((ret = __ham_dirty_meta(dbc)) != 0)
+ if ((ret = __ham_dirty_meta(dbc, 0)) != 0)
return (ret);
+ hcp->hdr->nelem++;
}
if (do_expand || (hcp->hdr->ffactor != 0 &&
@@ -1519,10 +1554,10 @@ __ham_copy_item(dbp, src_page, src_ndx, dest_page)
}
/*
+ * __ham_add_ovflpage --
*
* Returns:
- * 0 on success -- pp points to new page.
- * errno on error -- pp not valid.
+ * 0 on success: pp points to new page; !0 on error, pp not valid.
*
* PUBLIC: int __ham_add_ovflpage __P((DBC *, PAGE *, int, PAGE **));
*/
@@ -1542,6 +1577,8 @@ __ham_add_ovflpage(dbc, pagep, release, pp)
dbp = dbc->dbp;
mpf = dbp->mpf;
+ DB_ASSERT(dbp->dbenv, IS_DIRTY(pagep));
+
if ((ret = __db_new(dbc, P_HASH, &new_pagep)) != 0)
return (ret);
@@ -1549,7 +1586,7 @@ __ham_add_ovflpage(dbc, pagep, release, pp)
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) {
- (void)__memp_fput(mpf, pagep, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, pagep, 0);
return (ret);
}
} else
@@ -1562,7 +1599,7 @@ __ham_add_ovflpage(dbc, pagep, release, pp)
PREV_PGNO(new_pagep) = PGNO(pagep);
if (release)
- ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, pagep, 0);
*pp = new_pagep;
return (ret);
@@ -1612,7 +1649,8 @@ __ham_get_cpage(dbc, mode)
*/
if ((LOCK_ISSET(hcp->lock) &&
((hcp->lock_mode == DB_LOCK_READ ||
- F_ISSET(dbp, DB_AM_DIRTY)) && mode == DB_LOCK_WRITE))) {
+ F_ISSET(dbp, DB_AM_READ_UNCOMMITTED)) &&
+ mode == DB_LOCK_WRITE))) {
/* Case 3. */
tmp_lock = hcp->lock;
LOCK_INIT(hcp->lock);
@@ -1628,7 +1666,7 @@ __ham_get_cpage(dbc, mode)
hcp->lock_mode = mode;
hcp->lbucket = hcp->bucket;
/* Case 3: release the original lock. */
- if ((ret = __ENV_LPUT(dbp->dbenv, tmp_lock, 0)) != 0)
+ if ((ret = __ENV_LPUT(dbp->dbenv, tmp_lock)) != 0)
return (ret);
} else if (LOCK_ISSET(tmp_lock))
hcp->lock = tmp_lock;
@@ -1637,8 +1675,8 @@ __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 = __memp_fget(mpf,
- &hcp->pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &hcp->pgno, dbc->txn,
+ DB_MPOOL_CREATE, &hcp->page)) != 0)
return (ret);
}
@@ -1650,13 +1688,12 @@ __ham_get_cpage(dbc, mode)
* If the flag is set to H_ISDUP, then we are talking about the
* duplicate page, not the main page.
*
- * PUBLIC: int __ham_next_cpage __P((DBC *, db_pgno_t, int));
+ * PUBLIC: int __ham_next_cpage __P((DBC *, db_pgno_t));
*/
int
-__ham_next_cpage(dbc, pgno, dirty)
+__ham_next_cpage(dbc, pgno)
DBC *dbc;
db_pgno_t pgno;
- int dirty;
{
DB *dbp;
DB_MPOOLFILE *mpf;
@@ -1668,12 +1705,13 @@ __ham_next_cpage(dbc, pgno, dirty)
mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
- if (hcp->page != NULL && (ret =
- __memp_fput(mpf, hcp->page, dirty ? DB_MPOOL_DIRTY : 0)) != 0)
+ if (hcp->page != NULL &&
+ (ret = __memp_fput(mpf, hcp->page, 0)) != 0)
return (ret);
hcp->page = NULL;
- if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &p)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn,
+ DB_MPOOL_CREATE, &p)) != 0)
return (ret);
hcp->page = p;
@@ -1811,14 +1849,14 @@ __ham_c_delpg(dbc, old_pgno, new_pgno, num_ent, op, orderp)
u_int32_t *orderp;
{
DB *dbp, *ldbp;
+ DBC *cp;
DB_ENV *dbenv;
DB_LSN lsn;
DB_TXN *my_txn;
- DBC *cp;
HASH_CURSOR *hcp;
- int found, ret;
db_indx_t indx;
u_int32_t order;
+ int found, ret;
/* Which is the worrisome index? */
indx = (op == DB_HAM_DELLASTPG) ? num_ent : 0;
@@ -1827,49 +1865,49 @@ __ham_c_delpg(dbc, old_pgno, new_pgno, num_ent, op, orderp)
dbenv = dbp->dbenv;
my_txn = IS_SUBTRANSACTION(dbc->txn) ? dbc->txn : NULL;
- found = 0;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
/*
* Find the highest order of any cursor our movement
* may collide with.
*/
- order = 1;
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (order = 1;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links) {
if (cp == dbc || cp->dbtype != DB_HASH)
continue;
hcp = (HASH_CURSOR *)cp->internal;
- if (hcp->pgno == new_pgno) {
+ if (hcp->pgno == new_pgno &&
+ !MVCC_SKIP_CURADJ(cp, new_pgno)) {
if (hcp->indx == indx &&
F_ISSET(hcp, H_DELETED) &&
hcp->order >= order)
order = hcp->order + 1;
- DB_ASSERT(op != DB_HAM_DELFIRSTPG ||
+ DB_ASSERT(dbenv, op != DB_HAM_DELFIRSTPG ||
hcp->indx == NDX_INVALID ||
(hcp->indx == 0 &&
F_ISSET(hcp, H_DELETED)));
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ FIND_FIRST_DB_MATCH(dbenv, dbp, ldbp);
+ for (found = 0;
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)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links) {
if (cp == dbc || cp->dbtype != DB_HASH)
continue;
hcp = (HASH_CURSOR *)cp->internal;
- if (hcp->pgno == old_pgno) {
+ if (hcp->pgno == old_pgno &&
+ !MVCC_SKIP_CURADJ(cp, old_pgno)) {
switch (op) {
case DB_HAM_DELFIRSTPG:
/*
@@ -1887,28 +1925,28 @@ __ham_c_delpg(dbc, old_pgno, new_pgno, num_ent, op, orderp)
break;
case DB_HAM_DELMIDPG:
hcp->pgno = new_pgno;
- DB_ASSERT(hcp->indx == 0 &&
+ DB_ASSERT(dbenv, hcp->indx == 0 &&
F_ISSET(hcp, H_DELETED));
hcp->order += order;
break;
case DB_HAM_DELLASTPG:
hcp->pgno = new_pgno;
- DB_ASSERT(hcp->indx == 0 &&
+ DB_ASSERT(dbenv, hcp->indx == 0 &&
F_ISSET(hcp, H_DELETED));
hcp->indx = indx;
hcp->order += order;
break;
default:
- DB_ASSERT(0);
- return (__db_panic(dbenv, EINVAL));
+ return (__db_unknown_path(
+ dbenv, "__ham_c_delpg"));
}
if (my_txn != NULL && cp->txn != my_txn)
found = 1;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
if (found != 0 && DBC_LOGGING(dbc)) {
if ((ret = __ham_chgpg_log(dbp, my_txn, &lsn, 0, op,
diff --git a/db/hash/hash_rec.c b/db/hash/hash_rec.c
index 2934f1919..e07d8c3bc 100644
--- a/db/hash/hash_rec.c
+++ b/db/hash/hash_rec.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1995, 1996
@@ -39,26 +39,21 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hash_rec.c,v 11.83 2004/10/25 16:52:13 ubell Exp $
+ * $Id: hash_rec.c,v 12.22 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/hash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
static int __ham_alloc_pages __P((DB *, __ham_groupalloc_args *, DB_LSN *));
+static int __ham_alloc_pages_42
+ __P((DB *, __ham_groupalloc_42_args *, DB_LSN *));
/*
* __ham_insdel_recover --
@@ -79,16 +74,17 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t flags, opcode;
+ u_int32_t opcode;
int cmp_n, cmp_p, ret, type;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__ham_insdel_print);
- REC_INTRO(__ham_insdel_read, 1);
+ REC_INTRO(__ham_insdel_read, 1, 0);
- if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
if (ret == DB_PAGE_NOTFOUND)
goto done;
@@ -107,16 +103,16 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
* the file may not have been extend yet.
* Create the page if necessary.
*/
- if ((ret = __memp_fget(mpf,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ DB_MPOOL_CREATE, &pagep)) != 0) {
ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
}
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
/*
* Two possible things going on:
* redo a delete/undo a put: delete the item from the page.
@@ -129,7 +125,6 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
*/
opcode = OPCODE_OF(argp->opcode);
- flags = 0;
if ((opcode == DELPAIR && cmp_n == 0 && DB_UNDO(op)) ||
(opcode == PUTPAIR && cmp_p == 0 && DB_REDO(op))) {
/*
@@ -138,6 +133,7 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
* position. That's a royal pain in the butt (because we do
* not store item lengths on the page), but there's no choice.
*/
+ REC_DIRTY(mpf, &pagep);
if (opcode != DELPAIR ||
argp->ndx == (u_int32_t)NUM_ENT(pagep)) {
__ham_putitem(file_dbp, pagep, &argp->key,
@@ -156,17 +152,15 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
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))) {
/* Need to undo a put or redo a delete. */
+ REC_DIRTY(mpf, &pagep);
__ham_dpair(file_dbp, pagep, argp->ndx);
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
- flags = DB_MPOOL_DIRTY;
}
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -200,16 +194,16 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t flags;
- int cmp_n, cmp_p, ret;
+ int change, cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__ham_newpage_print);
- REC_INTRO(__ham_newpage_read, 1);
+ REC_INTRO(__ham_newpage_read, 1, 0);
REC_FGET(mpf, argp->new_pgno, &pagep, ppage);
+ change = 0;
/*
* There are potentially three pages we need to check: the one
@@ -217,30 +211,31 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
* it.
*/
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
- flags = 0;
if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == PUTOVFL) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == DELOVFL)) {
/* Redo a create new page or undo a delete new page. */
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, file_dbp->pgsize, argp->new_pgno,
argp->prev_pgno, argp->next_pgno, 0, P_HASH);
- flags = DB_MPOOL_DIRTY;
+ change = 1;
} 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. All we
* really need to do is change the LSN.
*/
- flags = DB_MPOOL_DIRTY;
+ REC_DIRTY(mpf, &pagep);
+ change = 1;
}
- if (flags)
+ if (change)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -248,28 +243,30 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
ppage: if (argp->prev_pgno != PGNO_INVALID) {
REC_FGET(mpf, argp->prev_pgno, &pagep, npage);
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->prevlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->prevlsn);
- flags = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->prevlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->prevlsn);
+ change = 0;
if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == PUTOVFL) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == DELOVFL)) {
/* Redo a create new page or undo a delete new page. */
+ REC_DIRTY(mpf, &pagep);
pagep->next_pgno = argp->new_pgno;
- flags = DB_MPOOL_DIRTY;
+ change = 1;
} 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. */
+ REC_DIRTY(mpf, &pagep);
pagep->next_pgno = argp->next_pgno;
- flags = DB_MPOOL_DIRTY;
+ change = 1;
}
- if (flags)
+ if (change)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->prevlsn;
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
}
@@ -278,28 +275,30 @@ ppage: if (argp->prev_pgno != PGNO_INVALID) {
npage: if (argp->next_pgno != PGNO_INVALID) {
REC_FGET(mpf, argp->next_pgno, &pagep, done);
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->nextlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->nextlsn);
- flags = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->nextlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->nextlsn);
+ change = 0;
if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == PUTOVFL) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == DELOVFL)) {
/* Redo a create new page or undo a delete new page. */
+ REC_DIRTY(mpf, &pagep);
pagep->prev_pgno = argp->new_pgno;
- flags = DB_MPOOL_DIRTY;
+ change = 1;
} 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. */
+ REC_DIRTY(mpf, &pagep);
pagep->prev_pgno = argp->prev_pgno;
- flags = DB_MPOOL_DIRTY;
+ change = 1;
}
- if (flags)
+ if (change)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->nextlsn;
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
}
@@ -334,25 +333,24 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
DBT dbt;
PAGE *pagep;
- u_int32_t flags;
u_int32_t change;
- int cmp_n, cmp_p, is_plus, ret;
+ int cmp_n, cmp_p, is_plus, modified, ret;
u_int8_t *hk;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__ham_replace_print);
- REC_INTRO(__ham_replace_read, 1);
+ REC_INTRO(__ham_replace_read, 1, 0);
REC_FGET(mpf, argp->pgno, &pagep, done);
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
memset(&dbt, 0, sizeof(dbt));
- flags = 0;
+ modified = 0;
/*
* Before we know the direction of the transformation we will
@@ -370,12 +368,13 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
/* Reapply the change as specified. */
dbt.data = argp->newitem.data;
dbt.size = argp->newitem.size;
+ REC_DIRTY(mpf, &pagep);
LSN(pagep) = *lsnp;
/*
* The is_plus flag is set properly to reflect
* newitem.size - olditem.size.
*/
- flags = DB_MPOOL_DIRTY;
+ modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Undo the already applied change. */
dbt.data = argp->olditem.data;
@@ -385,11 +384,12 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
* olditem.size - newitem.size.
*/
is_plus = !is_plus;
+ REC_DIRTY(mpf, &pagep);
LSN(pagep) = argp->pagelsn;
- flags = DB_MPOOL_DIRTY;
+ modified = 1;
}
- if (flags) {
+ if (modified) {
__ham_onpage_replace(file_dbp, pagep,
argp->ndx, argp->off, change, is_plus, &dbt);
if (argp->makedup) {
@@ -401,7 +401,7 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
}
}
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -432,16 +432,16 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t flags;
int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__ham_splitdata_print);
- REC_INTRO(__ham_splitdata_read, 1);
+ REC_INTRO(__ham_splitdata_read, 1, 0);
- if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, NULL,
+ 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
if (ret == DB_PAGE_NOTFOUND)
goto done;
@@ -460,16 +460,16 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
* the file may not have been extend yet.
* Create the page if necessary.
*/
- if ((ret = __memp_fget(mpf,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno,
+ NULL, DB_MPOOL_CREATE, &pagep)) != 0) {
ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
}
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
/*
* There are two types of log messages here, one for the old page
@@ -481,15 +481,15 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
* redo NEW messages and undo OLD messages, but we have to update
* LSNs in both cases.
*/
- flags = 0;
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
if (argp->opcode == SPLITNEW)
/* Need to redo the split described. */
memcpy(pagep, argp->pageimage.data,
argp->pageimage.size);
LSN(pagep) = *lsnp;
- flags = DB_MPOOL_DIRTY;
} else if (cmp_n == 0 && DB_UNDO(op)) {
+ REC_DIRTY(mpf, &pagep);
if (argp->opcode == SPLITOLD) {
/* Put back the old image. */
memcpy(pagep, argp->pageimage.data,
@@ -498,9 +498,8 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
P_INIT(pagep, file_dbp->pgsize, argp->pgno,
PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
LSN(pagep) = argp->pagelsn;
- flags = DB_MPOOL_DIRTY;
}
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -532,39 +531,36 @@ __ham_copypage_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t flags;
int cmp_n, cmp_p, ret;
pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__ham_copypage_print);
- REC_INTRO(__ham_copypage_read, 1);
-
- flags = 0;
+ REC_INTRO(__ham_copypage_read, 1, 0);
/* This is the bucket page. */
REC_FGET(mpf, argp->pgno, &pagep, donext);
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
memcpy(pagep, argp->page.data, argp->page.size);
PGNO(pagep) = argp->pgno;
PREV_PGNO(pagep) = PGNO_INVALID;
LSN(pagep) = *lsnp;
- flags = DB_MPOOL_DIRTY;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
P_INIT(pagep, file_dbp->pgsize, argp->pgno, PGNO_INVALID,
argp->next_pgno, 0, P_HASH);
LSN(pagep) = argp->pagelsn;
- flags = DB_MPOOL_DIRTY;
}
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -572,19 +568,18 @@ donext: /* Now fix up the "next" page. */
REC_FGET(mpf, argp->next_pgno, &pagep, do_nn);
/* For REDO just update the LSN. For UNDO copy page back. */
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->nextlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->nextlsn);
- flags = 0;
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->nextlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->nextlsn);
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
LSN(pagep) = *lsnp;
- flags = DB_MPOOL_DIRTY;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
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, 0)) != 0)
goto out;
pagep = NULL;
@@ -594,23 +589,22 @@ do_nn: if (argp->nnext_pgno == PGNO_INVALID)
REC_FGET(mpf, argp->nnext_pgno, &pagep, done);
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->nnextlsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->nnextlsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->nnextlsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->nnextlsn);
- flags = 0;
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
+ REC_DIRTY(mpf, &pagep);
PREV_PGNO(pagep) = argp->pgno;
LSN(pagep) = *lsnp;
- flags = DB_MPOOL_DIRTY;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
+ REC_DIRTY(mpf, &pagep);
PREV_PGNO(pagep) = argp->next_pgno;
LSN(pagep) = argp->nnextlsn;
- flags = DB_MPOOL_DIRTY;
}
- if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
pagep = NULL;
@@ -645,14 +639,14 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
PAGE *pagep;
db_pgno_t pgno;
- u_int32_t flags, mmeta_flags;
- int cmp_n, cmp_p, did_recover, groupgrow, ret;
+ u_int32_t flags;
+ int cmp_n, cmp_p, did_alloc, groupgrow, ret;
COMPQUIET(info, NULL);
- mmeta_flags = 0;
+ did_alloc = 0;
mmeta = NULL;
REC_PRINT(__ham_metagroup_print);
- REC_INTRO(__ham_metagroup_read, 1);
+ REC_INTRO(__ham_metagroup_read, 1, 1);
/*
* This logs the virtual create of pages pgno to pgno + bucket
@@ -664,13 +658,15 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
* 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.
+ * bucket: old maximum bucket
* 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.
+ * We round up on log calculations, so we can figure out if we are
+ * about to double the hash table if argp->bucket+1 is a power of 2.
+ * If it is, then we are allocating an entire doubling of pages,
+ * otherwise, we are simply allocated one new page.
*/
- groupgrow = (u_int32_t)(1 << __db_log2(argp->bucket + 1)) ==
- argp->bucket + 1;
+ groupgrow =
+ (u_int32_t)(1 << __db_log2(argp->bucket + 1)) == argp->bucket + 1;
pgno = argp->pgno;
if (argp->newalloc)
pgno += argp->bucket;
@@ -678,37 +674,40 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
flags = 0;
pagep = NULL;
#ifndef HAVE_FTRUNCATE
- flags = DB_MPOOL_CREATE;
+ LF_SET(DB_MPOOL_CREATE);
#endif
- ret = __memp_fget(mpf, &pgno, flags, &pagep);
+ ret = __memp_fget(mpf, &pgno, NULL, flags, &pagep);
#ifdef HAVE_FTRUNCATE
/* If we are undoing, then we don't want to create the page. */
if (ret != 0 && DB_REDO(op))
- ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep);
- else if (ret == DB_PAGE_NOTFOUND) {
- groupgrow = 0;
+ ret = __memp_fget(mpf,
+ &pgno, NULL, DB_MPOOL_CREATE, &pagep);
+ else if (ret == DB_PAGE_NOTFOUND)
goto do_meta;
- }
#endif
if (ret != 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);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
+ /*
+ * When we get here then either we did not grow the file
+ * (groupgrow == 0) or we did grow the file and the allocation
+ * of those new pages succeeded.
+ */
+ did_alloc = groupgrow;
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
- flags = 0;
if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
pagep->lsn = *lsnp;
- flags = DB_MPOOL_DIRTY;
- }
- else if (cmp_n == 0 && DB_UNDO(op)) {
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
#ifdef HAVE_FTRUNCATE
/* If this record allocated the pages give them back. */
if (argp->newalloc) {
@@ -725,11 +724,11 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
* Otherwise just roll the page back to its
* previous state.
*/
+ REC_DIRTY(mpf, &pagep);
pagep->lsn = argp->pagelsn;
- flags = DB_MPOOL_DIRTY;
}
}
- if (pagep != NULL && (ret = __memp_fput(mpf, pagep, flags)) != 0)
+ if (pagep != NULL && (ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
do_meta:
@@ -737,12 +736,12 @@ do_meta:
hcp = (HASH_CURSOR *)dbc->internal;
if ((ret = __ham_get_meta(dbc)) != 0)
goto out;
- 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);
- did_recover = 0;
+ cmp_n = LOG_COMPARE(lsnp, &hcp->hdr->dbmeta.lsn);
+ cmp_p = LOG_COMPARE(&hcp->hdr->dbmeta.lsn, &argp->metalsn);
+ CHECK_LSN(dbenv, op, cmp_p, &hcp->hdr->dbmeta.lsn, &argp->metalsn);
if (cmp_p == 0 && DB_REDO(op)) {
/* Redo the actual updating of bucket counts. */
+ REC_DIRTY(mpf, &hcp->hdr);
++hcp->hdr->max_bucket;
if (groupgrow) {
hcp->hdr->low_mask = hcp->hdr->high_mask;
@@ -750,16 +749,15 @@ do_meta:
(argp->bucket + 1) | hcp->hdr->low_mask;
}
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;
+ REC_DIRTY(mpf, &hcp->hdr);
+ hcp->hdr->max_bucket = argp->bucket;
if (groupgrow) {
- hcp->hdr->high_mask = hcp->hdr->low_mask;
+ hcp->hdr->high_mask = argp->bucket;
hcp->hdr->low_mask = hcp->hdr->high_mask >> 1;
}
hcp->hdr->dbmeta.lsn = argp->metalsn;
- did_recover = 1;
}
/*
@@ -767,23 +765,23 @@ do_meta:
* spares array indicates the beginning page number for the
* indicated doubling. We need to fill this in whenever the
* spares array is invalid, if we never reclaim pages then
- * we have to allocate the pages to the
- * spares array in both the redo and undo cases.
+ * we have to allocate the pages to the spares array in both
+ * the redo and undo cases.
*/
- if (groupgrow &&
+ if (did_alloc &&
#ifdef HAVE_FTRUNCATE
!DB_UNDO(op) &&
#endif
hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] == PGNO_INVALID) {
+ REC_DIRTY(mpf, &hcp->hdr);
hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] =
(argp->pgno - argp->bucket) - 1;
- did_recover = 1;
}
#ifdef HAVE_FTRUNCATE
if (cmp_n == 0 && groupgrow && DB_UNDO(op)) {
+ REC_DIRTY(mpf, &hcp->hdr);
hcp->hdr->spares[
__db_log2(argp->bucket + 1) + 1] = PGNO_INVALID;
- did_recover = 1;
}
#endif
@@ -793,17 +791,25 @@ do_meta:
* same as the hash header page).
*/
if (argp->mmpgno != argp->mpgno) {
- if ((ret = __memp_fget(mpf, &argp->mmpgno, 0, &mmeta)) != 0)
+ if ((ret = __memp_fget(mpf, &argp->mmpgno, NULL,
+ DB_MPOOL_EDIT, &mmeta)) != 0) {
+ if (DB_UNDO(op) && ret == DB_PAGE_NOTFOUND)
+ ret = 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))
+ }
+ cmp_n = LOG_COMPARE(lsnp, &mmeta->lsn);
+ cmp_p = LOG_COMPARE(&mmeta->lsn, &argp->mmetalsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &mmeta);
mmeta->lsn = *lsnp;
- else if (cmp_n == 0 && DB_UNDO(op))
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ REC_DIRTY(mpf, &mmeta);
mmeta->lsn = argp->mmetalsn;
- } else
+ }
+ } else {
mmeta = (DBMETA *)hcp->hdr;
+ REC_DIRTY(mpf, &mmeta);
+ }
#ifdef HAVE_FTRUNCATE
if (cmp_n == 0 && DB_UNDO(op))
@@ -812,16 +818,12 @@ do_meta:
#endif
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)
+ (ret = __memp_fput(mpf, mmeta, 0)) != 0)
goto out;
mmeta = NULL;
- if (did_recover)
- F_SET(hcp, H_DIRTY);
-
done: *lsnp = argp->prev_lsn;
ret = 0;
@@ -857,15 +859,15 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
PAGE *pagep;
db_pgno_t pgno;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, ret;
mmeta = NULL;
- modified = 0;
REC_PRINT(__ham_groupalloc_print);
- REC_INTRO(__ham_groupalloc_read, 0);
+ REC_INTRO(__ham_groupalloc_read, 0, 0);
pgno = PGNO_BASE_MD;
- if ((ret = __memp_fget(mpf, &pgno, 0, &mmeta)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, NULL,
+ 0, &mmeta)) != 0) {
if (DB_REDO(op)) {
ret = __db_pgerr(file_dbp, pgno, ret);
goto out;
@@ -873,9 +875,9 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
goto done;
}
- cmp_n = log_compare(lsnp, &LSN(mmeta));
- cmp_p = log_compare(&LSN(mmeta), &argp->meta_lsn);
- CHECK_LSN(op, cmp_p, &LSN(mmeta), &argp->meta_lsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(mmeta));
+ cmp_p = LOG_COMPARE(&LSN(mmeta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(mmeta), &argp->meta_lsn);
/*
* Basically, we used mpool to allocate a chunk of pages.
@@ -891,8 +893,8 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __ham_alloc_pages(file_dbp, argp, lsnp)) != 0)
goto out;
if (cmp_p == 0) {
+ REC_DIRTY(mpf, &mmeta);
LSN(mmeta) = *lsnp;
- modified = 1;
}
} else if (DB_UNDO(op)) {
/*
@@ -900,8 +902,9 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
* the post allocation state.
*/
pagep = NULL;
- if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) == 0) {
- if (log_compare(&pagep->lsn, lsnp) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, NULL,
+ DB_MPOOL_EDIT, &pagep)) == 0) {
+ if (LOG_COMPARE(&pagep->lsn, lsnp) != 0) {
if ((ret = __memp_fput(mpf,
pagep, DB_MPOOL_DISCARD)) != 0)
goto out;
@@ -929,8 +932,8 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
* sure it reflects the the correct last_pgno.
*/
if (cmp_n == 0) {
+ REC_DIRTY(mpf, &mmeta);
mmeta->last_pgno = argp->last_pgno;
- modified = 1;
}
pgno = 0;
#else
@@ -938,11 +941,11 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
* Reset the last page back to its preallocation state.
*/
if (pagep != NULL) {
- if (log_compare(&pagep->lsn, lsnp) == 0)
+ REC_DIRTY(mpf, &pagep);
+ if (LOG_COMPARE(&pagep->lsn, lsnp) == 0)
ZERO_LSN(pagep->lsn);
- if ((ret =
- __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
goto out;
}
/*
@@ -953,8 +956,8 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
goto out;
#endif
if (cmp_n == 0) {
+ REC_DIRTY(mpf, &mmeta);
LSN(mmeta) = argp->meta_lsn;
- modified = 1;
}
}
@@ -964,8 +967,8 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
* will only be valid on REDO.
*/
if (pgno > mmeta->last_pgno) {
+ REC_DIRTY(mpf, &mmeta);
mmeta->last_pgno = pgno;
- modified = 1;
}
done: if (ret == 0)
@@ -973,7 +976,7 @@ done: if (ret == 0)
ret = 0;
out: if (mmeta != NULL)
- (void)__memp_fput(mpf, mmeta, modified ? DB_MPOOL_DIRTY : 0);
+ (void)__memp_fput(mpf, mmeta, 0);
if (ret == ENOENT && op == DB_TXN_BACKWARD_ALLOC)
ret = 0;
@@ -991,8 +994,8 @@ out: if (mmeta != NULL)
* Hash normally has holes in its files and handles them appropriately.
*/
static int
-__ham_alloc_pages(dbp, argp, lsnp)
- DB *dbp;
+__ham_alloc_pages(file_dbp, argp, lsnp)
+ DB *file_dbp;
__ham_groupalloc_args *argp;
DB_LSN *lsnp;
{
@@ -1001,33 +1004,32 @@ __ham_alloc_pages(dbp, argp, lsnp)
db_pgno_t pgno;
int ret;
- mpf = dbp->mpf;
+ mpf = file_dbp->mpf;
/* Read the last page of the allocation. */
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 ((ret =
+ __memp_fget(mpf, &pgno, NULL, 0, &pagep)) == 0) {
if (NUM_ENT(pagep) == 0 && IS_ZERO_LSN(pagep->lsn))
goto reinit_page;
- if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
- return (ret);
- return (0);
+ return (__memp_fput(mpf, pagep, 0));
}
/* Had to create the page. */
- if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- return (__db_pgerr(dbp, pgno, ret));
+ if ((ret = __memp_fget(
+ mpf, &pgno, NULL, DB_MPOOL_CREATE, &pagep)) != 0)
+ return (__db_pgerr(file_dbp, pgno, ret));
reinit_page:
/* Initialize the newly allocated page. */
- P_INIT(pagep, dbp->pgsize, pgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
+ REC_DIRTY(mpf, &pagep);
+ P_INIT(pagep, file_dbp->pgsize,
+ pgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
pagep->lsn = *lsnp;
- if ((ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
- return (ret);
-
- return (0);
+out: return (__memp_fput(mpf, pagep, 0));
}
/*
@@ -1054,7 +1056,7 @@ __ham_curadj_recover(dbenv, dbtp, lsnp, op, info)
COMPQUIET(info, NULL);
REC_PRINT(__ham_curadj_print);
- REC_INTRO(__ham_curadj_read, 0);
+ REC_INTRO(__ham_curadj_read, 0, 1);
if (op != DB_TXN_ABORT)
goto done;
@@ -1104,7 +1106,7 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
COMPQUIET(info, NULL);
REC_PRINT(__ham_chgpg_print);
- REC_INTRO(__ham_chgpg_read, 0);
+ REC_INTRO(__ham_chgpg_read, 0, 0);
if (op != DB_TXN_ABORT)
goto done;
@@ -1113,19 +1115,19 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
indx = argp->old_indx;
order = argp->new_indx;
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, file_dbp->adj_fileid);
+ MUTEX_LOCK(dbenv, dbenv->mtx_dblist);
+ FIND_FIRST_DB_MATCH(dbenv, file_dbp, ldbp);
+ for (;
ldbp != NULL && ldbp->adj_fileid == file_dbp->adj_fileid;
- ldbp = LIST_NEXT(ldbp, dblistlinks)) {
- MUTEX_THREAD_LOCK(dbenv, file_dbp->mutexp);
-
- for (cp = TAILQ_FIRST(&ldbp->active_queue); cp != NULL;
- cp = TAILQ_NEXT(cp, links)) {
+ ldbp = TAILQ_NEXT(ldbp, dblistlinks)) {
+ MUTEX_LOCK(dbenv, file_dbp->mutex);
+ TAILQ_FOREACH(cp, &ldbp->active_queue, links) {
lcp = (HASH_CURSOR *)cp->internal;
switch (argp->mode) {
case DB_HAM_DELFIRSTPG:
- if (lcp->pgno != argp->new_pgno)
+ if (lcp->pgno != argp->new_pgno ||
+ MVCC_SKIP_CURADJ(cp, lcp->pgno))
break;
if (lcp->indx != indx ||
!F_ISSET(lcp, H_DELETED) ||
@@ -1140,7 +1142,8 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
if (lcp->pgno == argp->new_pgno &&
lcp->indx == indx &&
F_ISSET(lcp, H_DELETED) &&
- lcp->order >= order) {
+ lcp->order >= order &&
+ !MVCC_SKIP_CURADJ(cp, lcp->pgno)) {
lcp->pgno = argp->old_pgno;
lcp->order -= order;
lcp->indx = 0;
@@ -1159,7 +1162,8 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
/* FALLTHROUGH */
case DB_HAM_SPLIT:
if (lcp->pgno == argp->new_pgno &&
- lcp->indx == argp->new_indx) {
+ lcp->indx == argp->new_indx &&
+ !MVCC_SKIP_CURADJ(cp, lcp->pgno)) {
lcp->indx = argp->old_indx;
lcp->pgno = argp->old_pgno;
}
@@ -1169,7 +1173,8 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
break;
opdcp = (BTREE_CURSOR *)lcp->opd->internal;
if (opdcp->pgno != argp->new_pgno ||
- opdcp->indx != argp->new_indx)
+ opdcp->indx != argp->new_indx ||
+ MVCC_SKIP_CURADJ(lcp->opd, opdcp->pgno))
break;
if (F_ISSET(opdcp, C_DELETED))
@@ -1183,18 +1188,369 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
* the cursor we're adjusting can't be closed
* under us.
*/
- MUTEX_THREAD_UNLOCK(dbenv, file_dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, file_dbp->mutex);
if ((ret = __db_c_close(lcp->opd)) != 0)
goto out;
- MUTEX_THREAD_LOCK(dbenv, file_dbp->mutexp);
+ MUTEX_LOCK(dbenv, file_dbp->mutex);
lcp->opd = NULL;
break;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, file_dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, file_dbp->mutex);
}
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ MUTEX_UNLOCK(dbenv, dbenv->mtx_dblist);
done: *lsnp = argp->prev_lsn;
out: REC_CLOSE;
}
+
+/*
+ * __ham_metagroup_recover --
+ * Recovery function for metagroup.
+ *
+ * PUBLIC: int __ham_metagroup_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__ham_metagroup_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __ham_metagroup_42_args *argp;
+ HASH_CURSOR *hcp;
+ DB *file_dbp;
+ DBMETA *mmeta;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ db_pgno_t pgno;
+ u_int32_t flags;
+ int cmp_n, cmp_p, did_alloc, groupgrow, ret;
+
+ COMPQUIET(info, NULL);
+ did_alloc = 0;
+ mmeta = NULL;
+ REC_PRINT(__ham_metagroup_42_print);
+ REC_INTRO(__ham_metagroup_42_read, 1, 1);
+
+ /*
+ * This logs the virtual create of pages pgno to pgno + bucket
+ * If HAVE_FTRUNCATE is not supported the mpool page-allocation is not
+ * transaction protected, we can never undo it. Even in an abort,
+ * 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: old maximum bucket
+ * pgno: page number of the new bucket.
+ * We round up on log calculations, so we can figure out if we are
+ * about to double the hash table if argp->bucket+1 is a power of 2.
+ * If it is, then we are allocating an entire doubling of pages,
+ * otherwise, we are simply allocated one new page.
+ */
+ groupgrow =
+ (u_int32_t)(1 << __db_log2(argp->bucket + 1)) == argp->bucket + 1;
+ pgno = argp->pgno;
+ if (argp->newalloc)
+ pgno += argp->bucket;
+
+ flags = 0;
+ pagep = NULL;
+ LF_SET(DB_MPOOL_CREATE);
+ ret = __memp_fget(mpf, &pgno, NULL, flags, &pagep);
+
+ if (ret != 0) {
+ if (ret != ENOSPC)
+ goto out;
+ pgno = 0;
+ goto do_meta;
+ }
+
+ /*
+ * When we get here then either we did not grow the file
+ * (groupgrow == 0) or we did grow the file and the allocation
+ * of those new pages succeeded.
+ */
+ did_alloc = groupgrow;
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
+ cmp_p = LOG_COMPARE(&LSN(pagep), &argp->pagelsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(pagep), &argp->pagelsn);
+
+ if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &pagep);
+ pagep->lsn = *lsnp;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /*
+ * Otherwise just roll the page back to its
+ * previous state.
+ */
+ REC_DIRTY(mpf, &pagep);
+ pagep->lsn = argp->pagelsn;
+ }
+ if (pagep != NULL && (ret = __memp_fput(mpf, pagep, 0)) != 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)
+ goto out;
+ cmp_n = LOG_COMPARE(lsnp, &hcp->hdr->dbmeta.lsn);
+ cmp_p = LOG_COMPARE(&hcp->hdr->dbmeta.lsn, &argp->metalsn);
+ CHECK_LSN(dbenv, op, cmp_p, &hcp->hdr->dbmeta.lsn, &argp->metalsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Redo the actual updating of bucket counts. */
+ REC_DIRTY(mpf, &hcp->hdr);
+ ++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 if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Undo the actual updating of bucket counts. */
+ REC_DIRTY(mpf, &hcp->hdr);
+ hcp->hdr->max_bucket = argp->bucket;
+ if (groupgrow) {
+ hcp->hdr->high_mask = argp->bucket;
+ hcp->hdr->low_mask = hcp->hdr->high_mask >> 1;
+ }
+ hcp->hdr->dbmeta.lsn = argp->metalsn;
+ }
+
+ /*
+ * 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, if we never reclaim pages then
+ * we have to allocate the pages to the spares array in both
+ * the redo and undo cases.
+ */
+ if (did_alloc &&
+ hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] == PGNO_INVALID) {
+ REC_DIRTY(mpf, &hcp->hdr);
+ hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] =
+ (argp->pgno - argp->bucket) - 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, NULL,
+ DB_MPOOL_EDIT, &mmeta)) != 0) {
+ if (DB_UNDO(op) && ret == DB_PAGE_NOTFOUND)
+ ret = 0;
+ goto out;
+ }
+ cmp_n = LOG_COMPARE(lsnp, &mmeta->lsn);
+ cmp_p = LOG_COMPARE(&mmeta->lsn, &argp->mmetalsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ REC_DIRTY(mpf, &mmeta);
+ mmeta->lsn = *lsnp;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ REC_DIRTY(mpf, &mmeta);
+ mmeta->lsn = argp->mmetalsn;
+ }
+ } else {
+ mmeta = (DBMETA *)hcp->hdr;
+ REC_DIRTY(mpf, &mmeta);
+ }
+
+ if (mmeta->last_pgno < pgno)
+ mmeta->last_pgno = pgno;
+
+ if (argp->mmpgno != argp->mpgno &&
+ (ret = __memp_fput(mpf, mmeta, 0)) != 0)
+ goto out;
+ mmeta = NULL;
+
+done: *lsnp = argp->prev_lsn;
+ ret = 0;
+
+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;
+}
+
+/*
+ * __ham_groupalloc_42_recover --
+ * Recover the batch creation of a set of pages for a new database.
+ *
+ * PUBLIC: int __ham_groupalloc_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__ham_groupalloc_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __ham_groupalloc_42_args *argp;
+ DBMETA *mmeta;
+ DB_MPOOLFILE *mpf;
+ DB *file_dbp;
+ DBC *dbc;
+ PAGE *pagep;
+ db_pgno_t pgno;
+ int cmp_n, cmp_p, ret;
+
+ mmeta = NULL;
+ REC_PRINT(__ham_groupalloc_42_print);
+ REC_INTRO(__ham_groupalloc_42_read, 0, 0);
+
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &mmeta)) != 0) {
+ if (DB_REDO(op)) {
+ ret = __db_pgerr(file_dbp, pgno, ret);
+ goto out;
+ } else
+ goto done;
+ }
+
+ cmp_n = LOG_COMPARE(lsnp, &LSN(mmeta));
+ cmp_p = LOG_COMPARE(&LSN(mmeta), &argp->meta_lsn);
+ CHECK_LSN(dbenv, op, cmp_p, &LSN(mmeta), &argp->meta_lsn);
+
+ /*
+ * Basically, we used mpool to allocate a chunk of pages.
+ * We need to either add those to a free list (in the undo
+ * case) or initialize them (in the redo case).
+ *
+ * If we are redoing and this is a hash subdatabase, it's possible
+ * that the pages were never allocated, so we'd better check for
+ * that and handle it here.
+ */
+ pgno = argp->start_pgno + argp->num - 1;
+ if (DB_REDO(op)) {
+ if ((ret = __ham_alloc_pages_42(file_dbp, argp, lsnp)) != 0)
+ goto out;
+ if (cmp_p == 0) {
+ REC_DIRTY(mpf, &mmeta);
+ LSN(mmeta) = *lsnp;
+ }
+ } else if (DB_UNDO(op)) {
+ /*
+ * Fetch the last page and determine if it is in
+ * the post allocation state.
+ */
+ pagep = NULL;
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &pagep)) == 0) {
+ if (LOG_COMPARE(&pagep->lsn, lsnp) != 0) {
+ if ((ret = __memp_fput(mpf,
+ pagep, DB_MPOOL_DISCARD)) != 0)
+ goto out;
+ pagep = NULL;
+ }
+ } else if (ret != DB_PAGE_NOTFOUND)
+ goto out;
+ /*
+ * Reset the last page back to its preallocation state.
+ */
+ if (pagep != NULL) {
+ if (LOG_COMPARE(&pagep->lsn, lsnp) == 0)
+ ZERO_LSN(pagep->lsn);
+
+ if ((ret =
+ __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
+ goto out;
+ }
+ /*
+ * 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) {
+ REC_DIRTY(mpf, &mmeta);
+ LSN(mmeta) = argp->meta_lsn;
+ }
+ }
+
+ /*
+ * In both REDO and UNDO, we have grown the file and need to make
+ * sure that last_pgno is correct. If we HAVE_FTRUNCATE pgno
+ * will only be valid on REDO.
+ */
+ if (pgno > mmeta->last_pgno) {
+ REC_DIRTY(mpf, &mmeta);
+ mmeta->last_pgno = pgno;
+ }
+
+done: if (ret == 0)
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: if (mmeta != NULL)
+ (void)__memp_fput(mpf, mmeta, 0);
+
+ if (ret == ENOENT && op == DB_TXN_BACKWARD_ALLOC)
+ ret = 0;
+ REC_CLOSE;
+}
+
+/*
+ * __ham_alloc_pages_42 --
+ *
+ * Called during redo of a file create. We create new pages in the file
+ * using the MPOOL_NEW_GROUP flag. We then log the meta-data page with a
+ * __crdel_metasub message. If we manage to crash without the newly written
+ * pages getting to disk (I'm not sure this can happen anywhere except our
+ * test suite?!), then we need to go through a recreate the final pages.
+ * Hash normally has holes in its files and handles them appropriately.
+ */
+static int
+__ham_alloc_pages_42(dbp, argp, lsnp)
+ DB *dbp;
+ __ham_groupalloc_42_args *argp;
+ DB_LSN *lsnp;
+{
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ db_pgno_t pgno;
+ int ret;
+
+ mpf = dbp->mpf;
+
+ /* Read the last page of the allocation. */
+ 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, NULL, 0, &pagep)) == 0) {
+ if (NUM_ENT(pagep) == 0 && IS_ZERO_LSN(pagep->lsn))
+ goto reinit_page;
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
+ return (ret);
+ return (0);
+ }
+
+ /* Had to create the page. */
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 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);
+ pagep->lsn = *lsnp;
+
+ if ((ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
+ return (ret);
+
+ return (0);
+}
diff --git a/db/hash/hash_reclaim.c b/db/hash/hash_reclaim.c
index f0adba7c6..8d793788c 100644
--- a/db/hash/hash_reclaim.c
+++ b/db/hash/hash_reclaim.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_reclaim.c,v 11.17 2004/06/22 18:43:38 margo Exp $
+ * $Id: hash_reclaim.c,v 12.6 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/hash.h"
@@ -46,6 +42,13 @@ __ham_reclaim(dbp, txn)
if ((ret = __ham_get_meta(dbc)) != 0)
goto err;
+ /* Write lock the metapage for deallocations. */
+ if ((ret = __ham_dirty_meta(dbc, 0)) != 0)
+ goto err;
+
+ /* Avoid locking every page, we have the handle locked exclusive. */
+ F_SET(dbc, DBC_DONTLOCK);
+
if ((ret = __ham_traverse(dbc,
DB_LOCK_WRITE, __db_reclaim_callback, dbc, 1)) != 0)
goto err;
@@ -88,6 +91,7 @@ __ham_truncate(dbc, countp)
if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
- *countp = trunc.count;
+ if (countp != NULL)
+ *countp = trunc.count;
return (ret);
}
diff --git a/db/hash/hash_stat.c b/db/hash/hash_stat.c
index a50e383af..6e1794208 100644
--- a/db/hash/hash_stat.c
+++ b/db/hash/hash_stat.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_stat.c,v 11.66 2004/09/22 03:46:22 bostic Exp $
+ * $Id: hash_stat.c,v 12.10 2006/09/07 20:05:30 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/hash.h"
#include "dbinc/mp.h"
@@ -71,7 +64,7 @@ __ham_stat(dbc, spp, flags)
sp->hash_metaflags = hcp->hdr->dbmeta.flags;
sp->hash_ffactor = hcp->hdr->ffactor;
- if (flags == DB_FAST_STAT || flags == DB_CACHED_COUNTS)
+ if (flags == DB_FAST_STAT)
goto done;
/* Walk the free list, counting pages. */
@@ -79,7 +72,7 @@ __ham_stat(dbc, spp, flags)
pgno != PGNO_INVALID;) {
++sp->hash_free;
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, dbc->txn, 0, &h)) != 0)
goto err;
pgno = h->next_pgno;
@@ -94,7 +87,13 @@ __ham_stat(dbc, spp, flags)
goto err;
if (!F_ISSET(dbp, DB_AM_RDONLY)) {
- if ((ret = __ham_dirty_meta(dbc)) != 0)
+ /*
+ * A transaction is not required for DB->stat, so this update
+ * can't safely make a copy of the meta page. We have to
+ * update in place.
+ */
+ if ((ret = __ham_dirty_meta(dbc,
+ (dbc->txn == NULL) ? DB_MPOOL_EDIT : 0)) != 0)
goto err;
hcp->hdr->dbmeta.key_count = sp->hash_nkeys;
hcp->hdr->dbmeta.record_count = sp->hash_ndata;
@@ -141,7 +140,7 @@ __ham_stat_print(dbc, flags)
dbp = dbc->dbp;
dbenv = dbp->dbenv;
- if ((ret = __ham_stat(dbc, &sp, 0)) != 0)
+ if ((ret = __ham_stat(dbc, &sp, LF_ISSET(DB_FAST_STAT))) != 0)
return (ret);
if (LF_ISSET(DB_STAT_ALL)) {
@@ -309,7 +308,6 @@ __ham_print_cursor(dbc)
static const FN fn[] = {
{ H_CONTINUE, "H_CONTINUE" },
{ H_DELETED, "H_DELETED" },
- { H_DIRTY, "H_DIRTY" },
{ H_DUPONLY, "H_DUPONLY" },
{ H_EXPAND, "H_EXPAND" },
{ H_ISDUP, "H_ISDUP" },
@@ -418,7 +416,7 @@ __ham_traverse(dbc, mode, callback, cookie, look_past_max)
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)) {
+ ret = __ham_next_cpage(dbc, pgno)) {
/*
* If we are cleaning up pages past the max_bucket,
@@ -466,17 +464,17 @@ __ham_traverse(dbc, mode, callback, cookie, look_past_max)
memcpy(&opgno, HOFFPAGE_PGNO(hk),
sizeof(db_pgno_t));
if ((ret = __db_traverse_big(dbp,
- opgno, callback, cookie)) != 0)
+ opgno, dbc->txn,
+ callback, cookie)) != 0)
goto err;
break;
case H_KEYDATA:
case H_DUPLICATE:
break;
default:
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(
+ dbp->dbenv, "__ham_traverse");
goto err;
-
}
}
diff --git a/db/hash/hash_stub.c b/db/hash/hash_stub.c
index 7bbe925c7..dd0cf930c 100644
--- a/db/hash/hash_stub.c
+++ b/db/hash/hash_stub.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_stub.c,v 1.10 2004/09/29 15:35:14 bostic Exp $
+ * $Id: hash_stub.c,v 12.8 2006/08/24 14:46:05 bostic Exp $
*/
-#include "db_config.h"
-
#ifndef HAVE_HASH
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
+#include "db_config.h"
#include "db_int.h"
#include "dbinc/db_page.h"
@@ -34,7 +30,7 @@ int
__db_no_hash_am(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"library build did not include support for the Hash access method");
return (DB_OPNOTSUP);
}
@@ -188,6 +184,36 @@ __ham_metachk(dbp, name, hashm)
}
int
+__ham_metagroup_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ COMPQUIET(dbtp, NULL);
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(op, 0);
+ COMPQUIET(info, NULL);
+ return (__db_no_hash_am(dbenv));
+}
+
+int
+__ham_groupalloc_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ COMPQUIET(dbtp, NULL);
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(op, 0);
+ COMPQUIET(info, NULL);
+ return (__db_no_hash_am(dbenv));
+}
+
+int
__ham_new_file(dbp, txn, fhp, name)
DB *dbp;
DB_TXN *txn;
diff --git a/db/hash/hash_upgrade.c b/db/hash/hash_upgrade.c
index b626138ef..8432129f2 100644
--- a/db/hash/hash_upgrade.c
+++ b/db/hash/hash_upgrade.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_upgrade.c,v 11.35 2004/04/06 12:38:08 bostic Exp $
+ * $Id: hash_upgrade.c,v 12.6 2006/08/24 14:46:05 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/hash.h"
@@ -155,8 +149,8 @@ __ham_30_sizefix(dbp, fhp, realname, metabuf)
* a zeroed page where last_desired would go.
*/
if (last_desired > last_actual) {
- if ((ret = __os_seek(dbenv,
- fhp, pagesize, last_desired, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(
+ dbenv, fhp, last_desired, pagesize, 0)) != 0)
return (ret);
if ((ret = __os_write(dbenv, fhp, buf, pagesize, &nw)) != 0)
return (ret);
diff --git a/db/hash/hash_verify.c b/db/hash/hash_verify.c
index b9caab276..d4b20f796 100644
--- a/db/hash/hash_verify.c
+++ b/db/hash/hash_verify.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: hash_verify.c,v 1.63 2004/10/14 18:11:36 bostic Exp $
+ * $Id: hash_verify.c,v 12.17 2006/09/07 20:05:31 bostic Exp $
*/
#include "db_config.h"
-#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_verify.h"
#include "dbinc/btree.h"
#include "dbinc/hash.h"
@@ -110,8 +103,6 @@ __ham_vrfy_meta(dbp, vdp, m, pgno, flags)
* max_bucket, high_mask and low_mask: high_mask must be one
* less than the next power of two above max_bucket, and
* low_mask must be one less than the power of two below it.
- *
- *
*/
pwr = (m->max_bucket == 0) ? 1 : 1 << __db_log2(m->max_bucket + 1);
if (m->high_mask != pwr - 1) {
@@ -192,19 +183,20 @@ __ham_vrfy(dbp, vdp, h, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
u_int32_t ent, himark, inpend;
db_indx_t *inp;
int isbad, ret, t_ret;
+ dbenv = dbp->dbenv;
isbad = 0;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
if (TYPE(h) != P_HASH) {
- TYPE_ERR_PRINT(dbp->dbenv, "__ham_vrfy", pgno, TYPE(h));
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__ham_vrfy");
goto err;
}
@@ -229,13 +221,13 @@ __ham_vrfy(dbp, vdp, h, pgno, flags)
inpend = (u_int32_t)((u_int8_t *)inp - (u_int8_t *)h);
ent < NUM_ENT(h); ent++)
if (inp[ent] >= himark) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: item %lu is out of order or nonsensical",
(u_long)pgno, (u_long)ent));
isbad = 1;
goto err;
} else if (inpend >= himark) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: entries array collided with data",
(u_long)pgno));
isbad = 1;
@@ -250,7 +242,7 @@ __ham_vrfy(dbp, vdp, h, pgno, flags)
}
err: if ((t_ret =
- __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0 && ret == 0)
+ __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return (ret == 0 && isbad == 1 ? DB_VERIFY_BAD : ret);
}
@@ -424,7 +416,7 @@ __ham_vrfy_structure(dbp, vdp, meta_pgno, flags)
return (ret);
/* Get the meta page; we'll need it frequently. */
- if ((ret = __memp_fget(mpf, &meta_pgno, 0, &m)) != 0)
+ if ((ret = __memp_fget(mpf, &meta_pgno, NULL, 0, &m)) != 0)
return (ret);
/* Loop through bucket by bucket. */
@@ -519,6 +511,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
HMETA *m;
u_int32_t bucket, flags;
{
+ DB_ENV *dbenv;
HASH *hashp;
VRFY_CHILDINFO *child;
VRFY_PAGEINFO *mip, *pip;
@@ -527,6 +520,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
DBC *cc;
u_int32_t (*hfunc) __P((DB *, const void *, u_int32_t));
+ dbenv = dbp->dbenv;
isbad = 0;
pip = NULL;
cc = NULL;
@@ -548,7 +542,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
/* Make sure we got a plausible page number. */
if (pgno > vdp->last_pgno || pip->type != P_HASH) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: impossible first page in bucket %lu",
(u_long)pgno, (u_long)bucket));
/* Unsafe to continue. */
@@ -557,7 +551,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
}
if (pip->prev_pgno != PGNO_INVALID) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: first page in hash bucket %lu has a prev_pgno",
(u_long)pgno, (u_long)bucket));
isbad = 1;
@@ -578,7 +572,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
if ((ret = __db_vrfy_pgset_get(vdp->pgset, pgno, &p)) != 0)
goto err;
if (p != 0) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: hash page referenced twice",
(u_long)pgno));
isbad = 1;
@@ -602,7 +596,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
/* If we have dups, our meta page had better know about it. */
if (F_ISSET(pip, VRFY_HAS_DUPS) &&
!F_ISSET(mip, VRFY_HAS_DUPS)) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: duplicates present in non-duplicate database",
(u_long)pgno));
isbad = 1;
@@ -614,7 +608,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
*/
if (F_ISSET(mip, VRFY_HAS_DUPSORT) &&
F_ISSET(pip, VRFY_DUPS_UNSORTED)) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: unsorted dups in sorted-dup database",
(u_long)pgno));
isbad = 1;
@@ -665,7 +659,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
}
next_pgno = pip->next_pgno;
- ret = __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip);
+ ret = __db_vrfy_putpageinfo(dbenv, vdp, pip);
pip = NULL;
if (ret != 0)
@@ -676,8 +670,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
/* We already checked this, but just in case... */
if (!IS_VALID_PGNO(next_pgno)) {
- DB_ASSERT(0);
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: hash page has bad next_pgno",
(u_long)pgno));
isbad = 1;
@@ -688,7 +681,7 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
goto err;
if (pip->prev_pgno != pgno) {
- EPRINT((dbp->dbenv,
+ EPRINT((dbenv,
"Page %lu: hash page has bad prev_pgno",
(u_long)next_pgno));
isbad = 1;
@@ -699,10 +692,10 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
err: if (cc != NULL && ((t_ret = __db_vrfy_ccclose(cc)) != 0) && ret == 0)
ret = t_ret;
if (mip != NULL && ((t_ret =
- __db_vrfy_putpageinfo(dbp->dbenv, vdp, mip)) != 0) && ret == 0)
+ __db_vrfy_putpageinfo(dbenv, vdp, mip)) != 0) && ret == 0)
ret = t_ret;
if (pip != NULL && ((t_ret =
- __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0) && ret == 0)
+ __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0) && ret == 0)
ret = t_ret;
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
@@ -738,7 +731,7 @@ __ham_vrfy_hashing(dbp, nentries, m, thisbucket, pgno, flags, hfunc)
memset(&dbt, 0, sizeof(DBT));
F_SET(&dbt, DB_DBT_REALLOC);
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
return (ret);
for (i = 0; i < nentries; i += 2) {
@@ -750,7 +743,7 @@ __ham_vrfy_hashing(dbp, nentries, m, thisbucket, pgno, flags, hfunc)
* can tweak this a bit if this proves to be a bottleneck,
* but for now, take the easy route.
*/
- if ((ret = __db_ret(dbp, h, i, &dbt, NULL, NULL)) != 0)
+ if ((ret = __db_ret(dbp, NULL, h, i, &dbt, NULL, NULL)) != 0)
goto err;
hval = hfunc(dbp, dbt.data, dbt.size);
@@ -795,17 +788,15 @@ __ham_salvage(dbp, vdp, pgno, h, handle, callback, flags)
DBT dbt, unkdbt;
db_pgno_t dpgno;
int ret, err_ret, t_ret;
- u_int32_t himark, tlen;
- u_int8_t *hk;
+ u_int32_t himark, i;
+ u_int8_t *hk, *p;
void *buf;
- u_int32_t dlen, len, i;
+ db_indx_t dlen, len, tlen;
memset(&dbt, 0, sizeof(DBT));
dbt.flags = DB_DBT_REALLOC;
- memset(&unkdbt, 0, sizeof(DBT));
- unkdbt.size = (u_int32_t)strlen("UNKNOWN") + 1;
- unkdbt.data = "UNKNOWN";
+ DB_INIT_DBT(unkdbt, "UNKNOWN", sizeof("UNKNOWN") - 1);
err_ret = 0;
@@ -830,28 +821,25 @@ __ham_salvage(dbp, vdp, pgno, h, handle, callback, flags)
break;
if (ret == 0) {
+ /* Set len to total entry length. */
+ len = LEN_HITEM(dbp, h, dbp->pgsize, i);
hk = P_ENTRY(dbp, h, i);
- len = LEN_HKEYDATA(dbp, h, dbp->pgsize, i);
- if ((u_int32_t)(hk + len - (u_int8_t *)h) >
+ if (len == 0 || len > dbp->pgsize ||
+ (u_int32_t)(hk + len - (u_int8_t *)h) >
dbp->pgsize) {
- /*
- * Item is unsafely large; either continue
- * or set it to the whole page, depending on
- * aggressiveness.
- */
- if (!LF_ISSET(DB_AGGRESSIVE))
- continue;
- len = dbp->pgsize -
- (u_int32_t)(hk - (u_int8_t *)h);
+ /* Item is unsafely large; skip it. */
err_ret = DB_VERIFY_BAD;
+ continue;
}
switch (HPAGE_PTYPE(hk)) {
default:
if (!LF_ISSET(DB_AGGRESSIVE))
break;
err_ret = DB_VERIFY_BAD;
- /* FALLTHROUGH */
+ break;
case H_KEYDATA:
+ /* Update len to size of item. */
+ len = LEN_HKEYDATA(dbp, h, dbp->pgsize, i);
keydata: memcpy(buf, HKEYDATA_DATA(hk), len);
dbt.size = len;
dbt.data = buf;
@@ -878,12 +866,12 @@ keydata: memcpy(buf, HKEYDATA_DATA(hk), len);
err_ret = ret;
break;
case H_OFFDUP:
- if (len < HOFFPAGE_SIZE) {
+ if (len < HOFFDUP_SIZE) {
err_ret = DB_VERIFY_BAD;
continue;
}
memcpy(&dpgno,
- HOFFPAGE_PGNO(hk), sizeof(dpgno));
+ HOFFDUP_PGNO(hk), sizeof(dpgno));
/* UNKNOWN iff pgno is bad or we're a key. */
if (!IS_VALID_PGNO(dpgno) || (i % 2 == 0)) {
if ((ret =
@@ -896,6 +884,7 @@ keydata: memcpy(buf, HKEYDATA_DATA(hk), len);
err_ret = ret;
break;
case H_DUPLICATE:
+ len = LEN_HKEYDATA(dbp, h, dbp->pgsize, i);
/*
* We're a key; printing dups will seriously
* foul the output. If we're being aggressive,
@@ -909,7 +898,12 @@ keydata: memcpy(buf, HKEYDATA_DATA(hk), len);
break;
}
- /* Too small to have any data. */
+ /*
+ * Check if too small to have any data.
+ * But first, we have to update the len to
+ * reflect the size of the data not the
+ * size of the on-page entry.
+ */
if (len <
HKEYDATA_SIZE(2 * sizeof(db_indx_t))) {
err_ret = DB_VERIFY_BAD;
@@ -919,15 +913,17 @@ keydata: memcpy(buf, HKEYDATA_DATA(hk), len);
/* Loop until we hit the total length. */
for (tlen = 0; tlen + sizeof(db_indx_t) < len;
tlen += dlen) {
+ p = HKEYDATA_DATA(hk) + tlen;
tlen += sizeof(db_indx_t);
- memcpy(&dlen, hk, sizeof(db_indx_t));
+ memcpy(&dlen, p, sizeof(db_indx_t));
+ p += sizeof(db_indx_t);
/*
* If dlen is too long, print all the
* rest of the dup set in a chunk.
*/
if (dlen + tlen > len)
dlen = len - tlen;
- memcpy(buf, hk + tlen, dlen);
+ memcpy(buf, p, dlen);
dbt.size = dlen;
dbt.data = buf;
if ((ret = __db_vrfy_prdbt(&dbt, 0, " ",
@@ -954,7 +950,8 @@ keydata: memcpy(buf, HKEYDATA_DATA(hk), len);
* PUBLIC: int __ham_meta2pgset __P((DB *, VRFY_DBINFO *, HMETA *, u_int32_t,
* PUBLIC: DB *));
*/
-int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
+int
+__ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
DB *dbp;
VRFY_DBINFO *vdp;
HMETA *hmeta;
@@ -973,7 +970,7 @@ int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
*/
COMPQUIET(flags, 0);
- DB_ASSERT(pgset != NULL);
+ DB_ASSERT(dbp->dbenv, pgset != NULL);
mpf = dbp->mpf;
totpgs = 0;
@@ -992,7 +989,7 @@ int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
* Safely walk the list of pages in this bucket.
*/
for (;;) {
- if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, NULL, 0, &h)) != 0)
return (ret);
if (TYPE(h) == P_HASH) {
diff --git a/db/hmac/hmac.c b/db/hmac/hmac.c
index bb2da5eb4..8edadd640 100644
--- a/db/hmac/hmac.c
+++ b/db/hmac/hmac.c
@@ -1,26 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
* Some parts of this code originally written by Adam Stubblefield,
* -- astubble@rice.edu.
*
- * $Id: hmac.c,v 1.27 2004/01/28 03:36:11 bostic Exp $
+ * $Id: hmac.c,v 12.9 2006/09/09 14:28:23 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h" /* for hash.h only */
#include "dbinc/hash.h"
#include "dbinc/hmac.h"
+#include "dbinc/log.h"
#define HMAC_OUTPUT_SIZE 20
#define HMAC_BLOCK_SIZE 64
@@ -79,10 +76,12 @@ __db_hmac(k, data, data_len, mac)
* __db_chksum --
* Create a MAC/SHA1 checksum.
*
- * PUBLIC: void __db_chksum __P((u_int8_t *, size_t, u_int8_t *, u_int8_t *));
+ * PUBLIC: void __db_chksum __P((void *,
+ * PUBLIC: u_int8_t *, size_t, u_int8_t *, u_int8_t *));
*/
void
-__db_chksum(data, data_len, mac_key, store)
+__db_chksum(hdr, data, data_len, mac_key, store)
+ void *hdr;
u_int8_t *data;
size_t data_len;
u_int8_t *mac_key;
@@ -90,27 +89,37 @@ __db_chksum(data, data_len, mac_key, store)
{
int sumlen;
u_int32_t hash4;
- u_int8_t tmp[DB_MAC_KEY];
/*
* Since the checksum might be on a page of data we are checksumming
* we might be overwriting after checksumming, we zero-out the
* checksum value so that we can have a known value there when
* we verify the checksum.
+ * If we are passed a log header XOR in prev and len so we have
+ * some redundancy on these fields. Mostly we need to be sure that
+ * we detect a race when doing hot backups and reading a live log
+ * file.
*/
if (mac_key == NULL)
sumlen = sizeof(u_int32_t);
else
sumlen = DB_MAC_KEY;
- memset(store, 0, sumlen);
+ if (hdr == NULL)
+ memset(store, 0, sumlen);
+ else
+ store = ((HDR*)hdr)->chksum;
if (mac_key == NULL) {
/* Just a hash, no MAC */
hash4 = __ham_func4(NULL, data, (u_int32_t)data_len);
+ if (hdr != NULL)
+ hash4 ^= ((HDR *)hdr)->prev ^ ((HDR *)hdr)->len;
memcpy(store, &hash4, sumlen);
} else {
- memset(tmp, 0, DB_MAC_KEY);
- __db_hmac(mac_key, data, data_len, tmp);
- memcpy(store, tmp, sumlen);
+ __db_hmac(mac_key, data, data_len, store);
+ if (hdr != 0) {
+ ((int *)store)[0] ^= ((HDR *)hdr)->prev;
+ ((int *)store)[1] ^= ((HDR *)hdr)->len;
+ }
}
return;
}
@@ -145,11 +154,12 @@ __db_derive_mac(passwd, plen, mac_key)
* Return 0 on success, >0 (errno) on error, -1 on checksum mismatch.
*
* PUBLIC: int __db_check_chksum __P((DB_ENV *,
- * PUBLIC: DB_CIPHER *, u_int8_t *, void *, size_t, int));
+ * PUBLIC: void *, DB_CIPHER *, u_int8_t *, void *, size_t, int));
*/
int
-__db_check_chksum(dbenv, db_cipher, chksum, data, data_len, is_hmac)
+__db_check_chksum(dbenv, hdr, db_cipher, chksum, data, data_len, is_hmac)
DB_ENV *dbenv;
+ void *hdr;
DB_CIPHER *db_cipher;
u_int8_t *chksum;
void *data;
@@ -168,7 +178,7 @@ __db_check_chksum(dbenv, db_cipher, chksum, data, data_len, is_hmac)
*/
if (is_hmac == 0) {
if (db_cipher != NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Unencrypted checksum with a supplied encryption key");
return (EINVAL);
}
@@ -176,7 +186,7 @@ __db_check_chksum(dbenv, db_cipher, chksum, data, data_len, is_hmac)
mac_key = NULL;
} else {
if (db_cipher == NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Encrypted checksum: no encryption key specified");
return (EINVAL);
}
@@ -189,16 +199,36 @@ __db_check_chksum(dbenv, db_cipher, chksum, data, data_len, is_hmac)
* Since the checksum might be on the page, we need to have known data
* there so that we can generate the same original checksum. We zero
* it out, just like we do in __db_chksum above.
+ * If there is a log header, XOR the prev and len fields.
*/
- memcpy(old, chksum, sum_len);
- memset(chksum, 0, sum_len);
+retry:
+ if (hdr == NULL) {
+ memcpy(old, chksum, sum_len);
+ memset(chksum, 0, sum_len);
+ chksum = old;
+ }
+
if (mac_key == NULL) {
/* Just a hash, no MAC */
hash4 = __ham_func4(NULL, data, (u_int32_t)data_len);
- ret = memcmp((u_int32_t *)old, &hash4, sum_len) ? -1 : 0;
+ if (hdr != NULL)
+ LOG_HDR_SUM(0, hdr, &hash4);
+ ret = memcmp((u_int32_t *)chksum, &hash4, sum_len) ? -1 : 0;
} else {
__db_hmac(mac_key, data, data_len, new);
- ret = memcmp(old, new, sum_len) ? -1 : 0;
+ if (hdr != NULL)
+ LOG_HDR_SUM(1, hdr, new);
+ ret = memcmp(chksum, new, sum_len) ? -1 : 0;
+ }
+ /*
+ * !!!
+ * We might be looking at an old log even with the new
+ * code. So, if we have a hdr, and the checksum doesn't
+ * match, try again without a hdr.
+ */
+ if (hdr != NULL && ret != 0) {
+ hdr = NULL;
+ goto retry;
}
return (ret);
diff --git a/db/hmac/sha1.c b/db/hmac/sha1.c
index 8824796f0..b3fdf7eb0 100644
--- a/db/hmac/sha1.c
+++ b/db/hmac/sha1.c
@@ -1,16 +1,19 @@
/*
- * $Id: sha1.c,v 1.14 2004/01/28 03:36:11 bostic Exp $
+ * $Id: sha1.c,v 12.2 2006/09/08 20:32:10 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+#include "dbinc/hmac.h"
+
/*
SHA-1 in C
By Steve Reid <sreid@sea-to-sky.net>
100% Public Domain
-----------------
-Modified 7/98
+Modified 7/98
By James H. Brown <jbrown@burgoyne.com>
Still 100% Public Domain
@@ -32,7 +35,7 @@ Since the file IO in main() reads 16K at a time, any file 8K or larger would
be guaranteed to generate the wrong hash (e.g. Test Vector #3, a million
"a"s).
-I also changed the declaration of variables i & j in SHA1Update to
+I also changed the declaration of variables i & j in SHA1Update to
unsigned long from unsigned int for the same reason.
These changes should make no difference to any 32 bit implementations since
@@ -59,7 +62,7 @@ Still 100% public domain
Modified 4/01
By Saul Kravitz <Saul.Kravitz@celera.com>
Still 100% PD
-Modified to run on Compaq Alpha hardware.
+Modified to run on Compaq Alpha hardware.
*/
@@ -76,13 +79,6 @@ A million repetitions of "a"
#define SHA1HANDSOFF
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
-
-#include "db_int.h"
-#include "dbinc/hmac.h"
-
/* #include <process.h> */ /* prototype for exit() - JHB */
/* Using return() instead of exit() - SWR */
@@ -113,7 +109,7 @@ __db_SHAPrintContext(context, msg)
{
printf("%s (%d,%d) %x %x %x %x %x\n",
msg,
- context->count[0], context->count[1],
+ context->count[0], context->count[1],
context->state[0],
context->state[1],
context->state[2],
@@ -126,7 +122,7 @@ __db_SHAPrintContext(context, msg)
/*
* __db_SHA1Transform --
- *
+ *
* PUBLIC: void __db_SHA1Transform __P((u_int32_t *, unsigned char *));
*/
void
@@ -191,7 +187,7 @@ static int is_bigendian = -1;
/* SHA1Init - Initialize new context */
-/*
+/*
* __db_SHA1Init --
* Initialize new context
*
@@ -290,6 +286,6 @@ unsigned char finalcount[8];
__db_SHA1Transform(context->state, context->buffer);
#endif
}
-
+
/*************************************************************/
diff --git a/db/hsearch/hsearch.c b/db/hsearch/hsearch.c
index 5bcbe93d3..831142490 100644
--- a/db/hsearch/hsearch.c
+++ b/db/hsearch/hsearch.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993
@@ -39,18 +39,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: hsearch.c,v 11.14 2004/01/28 03:36:11 bostic Exp $
+ * $Id: hsearch.c,v 12.7 2006/08/24 14:46:06 bostic Exp $
*/
+#define DB_DBM_HSEARCH 1
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
-#define DB_DBM_HSEARCH 1
#include "db_int.h"
static DB *dbp;
@@ -82,8 +76,8 @@ __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, (u_int32_t)nel)) != 0 ||
- (ret = dbp->open(dbp,
- NULL, NULL, NULL, DB_HASH, DB_CREATE, __db_omode("rw----"))) != 0)
+ (ret = dbp->open(dbp, NULL,
+ NULL, NULL, DB_HASH, DB_CREATE, __db_omode(OWNER_RW))) != 0)
__os_set_errno(ret);
/*
@@ -105,15 +99,12 @@ __db_hsearch(item, action)
__os_set_errno(EINVAL);
return (NULL);
}
- memset(&key, 0, sizeof(key));
+ DB_INIT_DBT(key, item.key, strlen(item.key) + 1);
memset(&val, 0, sizeof(val));
- key.data = item.key;
- key.size = (u_int32_t)strlen(item.key) + 1;
switch (action) {
case ENTER:
- val.data = item.data;
- val.size = (u_int32_t)strlen(item.data) + 1;
+ DB_SET_DBT(val, item.data, strlen(item.data) + 1);
/*
* Try and add the key to the database. If we fail because
diff --git a/db/java/src/com/sleepycat/bind/ByteArrayBinding.java b/db/java/src/com/sleepycat/bind/ByteArrayBinding.java
index e684c1fea..999869f7a 100644
--- a/db/java/src/com/sleepycat/bind/ByteArrayBinding.java
+++ b/db/java/src/com/sleepycat/bind/ByteArrayBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ByteArrayBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: ByteArrayBinding.java,v 12.4 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind;
@@ -19,6 +19,11 @@ import com.sleepycat.db.DatabaseEntry;
*/
public class ByteArrayBinding implements EntryBinding {
+ /*
+ * We can return the same byte[] for 0 length arrays.
+ */
+ private static byte[] ZERO_LENGTH_BYTE_ARRAY = new byte[0];
+
/**
* Creates a byte array binding.
*/
@@ -28,10 +33,15 @@ public class ByteArrayBinding implements EntryBinding {
// javadoc is inherited
public Object entryToObject(DatabaseEntry entry) {
- byte[] bytes = new byte[entry.getSize()];
- System.arraycopy(entry.getData(), entry.getOffset(),
- bytes, 0, bytes.length);
- return bytes;
+ int len = entry.getSize();
+ if (len == 0) {
+ return ZERO_LENGTH_BYTE_ARRAY;
+ } else {
+ byte[] bytes = new byte[len];
+ System.arraycopy(entry.getData(), entry.getOffset(),
+ bytes, 0, bytes.length);
+ return bytes;
+ }
}
// javadoc is inherited
diff --git a/db/java/src/com/sleepycat/bind/EntityBinding.java b/db/java/src/com/sleepycat/bind/EntityBinding.java
index 5209af56a..1683f59b7 100644
--- a/db/java/src/com/sleepycat/bind/EntityBinding.java
+++ b/db/java/src/com/sleepycat/bind/EntityBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: EntityBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: EntityBinding.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind;
diff --git a/db/java/src/com/sleepycat/bind/EntryBinding.java b/db/java/src/com/sleepycat/bind/EntryBinding.java
index e7ad56fa7..bae612716 100644
--- a/db/java/src/com/sleepycat/bind/EntryBinding.java
+++ b/db/java/src/com/sleepycat/bind/EntryBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: EntryBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: EntryBinding.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind;
diff --git a/db/java/src/com/sleepycat/bind/RecordNumberBinding.java b/db/java/src/com/sleepycat/bind/RecordNumberBinding.java
index 7fe3dce2e..08eb87c1d 100644
--- a/db/java/src/com/sleepycat/bind/RecordNumberBinding.java
+++ b/db/java/src/com/sleepycat/bind/RecordNumberBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: RecordNumberBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: RecordNumberBinding.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind;
diff --git a/db/java/src/com/sleepycat/bind/package.html b/db/java/src/com/sleepycat/bind/package.html
index e3066f1c0..2e6e452b3 100644
--- a/db/java/src/com/sleepycat/bind/package.html
+++ b/db/java/src/com/sleepycat/bind/package.html
@@ -1,4 +1,4 @@
-<!-- $Id: package.html,v 1.2 2004/11/09 00:41:06 mjc Exp $ -->
+<!-- $Id: package.html,v 12.0 2004/11/17 03:43:56 bostic Exp $ -->
<html>
<body>
Bindings between database entries and Java objects.
diff --git a/db/java/src/com/sleepycat/bind/serial/ClassCatalog.java b/db/java/src/com/sleepycat/bind/serial/ClassCatalog.java
index 5d249b4f8..266b2c5cf 100644
--- a/db/java/src/com/sleepycat/bind/serial/ClassCatalog.java
+++ b/db/java/src/com/sleepycat/bind/serial/ClassCatalog.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ClassCatalog.java,v 1.3 2004/09/01 14:34:20 mark Exp $
+ * $Id: ClassCatalog.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
diff --git a/db/java/src/com/sleepycat/bind/serial/SerialBase.java b/db/java/src/com/sleepycat/bind/serial/SerialBase.java
new file mode 100644
index 000000000..b33f15ca2
--- /dev/null
+++ b/db/java/src/com/sleepycat/bind/serial/SerialBase.java
@@ -0,0 +1,93 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SerialBase.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
+ */
+
+package com.sleepycat.bind.serial;
+
+import com.sleepycat.util.FastOutputStream;
+
+/**
+ * A base class for serial bindings creators that provides control over the
+ * allocation of the output buffer.
+ *
+ * <p>Serial bindings append data to a {@link FastOutputStream} instance. This
+ * object has a byte array buffer that is resized when it is full. The
+ * reallocation of this buffer can be a performance factor for some
+ * applications using large objects. To manage this issue, the {@link
+ * #setSerialBufferSize} method may be used to control the initial size of the
+ * buffer, and the {@link #getSerialOutput} method may be overridden by
+ * subclasses to take over creation of the FastOutputStream object.</p>
+ */
+public class SerialBase {
+
+ private int outputBufferSize;
+
+ /**
+ * Initializes the initial output buffer size to zero.
+ *
+ * <p>Unless {@link #setSerialBufferSize} is called, the default {@link
+ * FastOutputStream#DEFAULT_INIT_SIZE} size will be used.</p>
+ */
+ public SerialBase() {
+ outputBufferSize = 0;
+ }
+
+ /**
+ * Sets the initial byte size of the output buffer that is allocated by the
+ * default implementation of {@link #getSerialOutput}.
+ *
+ * <p>If this property is zero (the default), the default {@link
+ * FastOutputStream#DEFAULT_INIT_SIZE} size is used.</p>
+ *
+ * @param byteSize the initial byte size of the output buffer, or zero to
+ * use the default size.
+ */
+ public void setSerialBufferSize(int byteSize) {
+ outputBufferSize = byteSize;
+ }
+
+ /**
+ * Returns the initial byte size of the output buffer.
+ *
+ * @return the initial byte size of the output buffer.
+ *
+ * @see #setSerialBufferSize
+ */
+ public int getSerialBufferSize() {
+ return outputBufferSize;
+ }
+
+ /**
+ * Returns an empty SerialOutput instance that will be used by the serial
+ * binding or key creator.
+ *
+ * <p>The default implementation of this method creates a new SerialOutput
+ * with an initial buffer size that can be changed using the {@link
+ * #setSerialBufferSize} method.</p>
+ *
+ * <p>This method may be overridden to return a FastOutputStream instance.
+ * For example, an instance per thread could be created and returned by
+ * this method. If a FastOutputStream instance is reused, be sure to call
+ * its {@link FastOutputStream#reset} method before each use.</p>
+ *
+ * @param object is the object to be written to the serial output, and may
+ * be used by subclasses to determine the size of the output buffer.
+ *
+ * @return an empty FastOutputStream instance.
+ *
+ * @see #setSerialBufferSize
+ */
+ protected FastOutputStream getSerialOutput(Object object) {
+ int byteSize = getSerialBufferSize();
+ if (byteSize != 0) {
+ return new FastOutputStream(byteSize);
+ } else {
+ return new FastOutputStream();
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bind/serial/SerialBinding.java b/db/java/src/com/sleepycat/bind/serial/SerialBinding.java
index e2e607c14..084cc8d99 100644
--- a/db/java/src/com/sleepycat/bind/serial/SerialBinding.java
+++ b/db/java/src/com/sleepycat/bind/serial/SerialBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SerialBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: SerialBinding.java,v 12.5 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
@@ -26,9 +26,21 @@ import com.sleepycat.util.RuntimeExceptionWrapper;
* <code>Class</code> must implement the <code>Serializable</code>
* interface.</p>
*
+ * <p>For key bindings, a tuple binding is usually a better choice than a
+ * serial binding. A tuple binding gives a reasonable sort order, and works
+ * with comparators in all cases -- see below.</p>
+ *
+ * <p><em>WARNING:</em> SerialBinding should not be used with Berkeley DB Java
+ * Edition for key bindings, when a custom comparator is used. In JE,
+ * comparators are instantiated and called internally at times when databases
+ * are not accessible. Because serial bindings depend on the class catalog
+ * database, a serial binding cannot be used during these times. An attempt
+ * to use a serial binding with a custom comparator will result in a
+ * NullPointerException during environment open or close.</p>
+ *
* @author Mark Hayes
*/
-public class SerialBinding implements EntryBinding {
+public class SerialBinding extends SerialBase implements EntryBinding {
private ClassCatalog classCatalog;
private Class baseClass;
@@ -63,6 +75,28 @@ public class SerialBinding implements EntryBinding {
}
/**
+ * Returns the class loader to be used during deserialization, or null if
+ * a default class loader should be used. The default implementation of
+ * this method returns null.
+ *
+ * <p>This method may be overriden to return a dynamically determined class
+ * loader. For example,
+ * <code>Thread.currentThread().getContextClassLoader()</code> could be
+ * called to use the context class loader for the curren thread. Or
+ * <code>getBaseClass().getClassLoader()</code> could be called to use the
+ * class loader for the base class, assuming that a base class has been
+ * specified.</p>
+ *
+ * <p>If this method returns null, a default class loader will be used as
+ * determined by the <code>java.io.ObjectInputStream.resolveClass</code>
+ * method.</p>
+ */
+ public ClassLoader getClassLoader() {
+
+ return null;
+ }
+
+ /**
* Deserialize an object from an entry buffer. May only be called for data
* that was serialized using {@link #objectToEntry}, since the fixed
* serialization header is assumed to not be included in the input data.
@@ -85,7 +119,8 @@ public class SerialBinding implements EntryBinding {
try {
SerialInput jin = new SerialInput(
new FastInputStream(bufWithHeader, 0, bufWithHeader.length),
- classCatalog);
+ classCatalog,
+ getClassLoader());
return jin.readObject();
} catch (IOException e) {
throw new RuntimeExceptionWrapper(e);
@@ -100,6 +135,10 @@ public class SerialBinding implements EntryBinding {
* to deserialize the data the complementary {@link #entryToObject} method
* must be used. {@link SerialOutput} is used to serialize the object.
*
+ * <p>Note that this method sets the DatabaseEntry offset property to a
+ * non-zero value and the size property to a value less than the length of
+ * the byte array.</p>
+ *
* @param object is the input deserialized object.
*
* @param entry is the output serialized entry.
@@ -115,7 +154,7 @@ public class SerialBinding implements EntryBinding {
") not an instance of binding's base class (" +
baseClass + ')');
}
- FastOutputStream fo = new FastOutputStream();
+ FastOutputStream fo = getSerialOutput(object);
try {
SerialOutput jos = new SerialOutput(fo, classCatalog);
jos.writeObject(object);
diff --git a/db/java/src/com/sleepycat/bind/serial/SerialInput.java b/db/java/src/com/sleepycat/bind/serial/SerialInput.java
index 16bfd859f..16e3e47af 100644
--- a/db/java/src/com/sleepycat/bind/serial/SerialInput.java
+++ b/db/java/src/com/sleepycat/bind/serial/SerialInput.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SerialInput.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: SerialInput.java,v 12.4 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
@@ -35,6 +35,7 @@ import com.sleepycat.util.RuntimeExceptionWrapper;
public class SerialInput extends ObjectInputStream {
private ClassCatalog classCatalog;
+ private ClassLoader classLoader;
/**
* Creates a serial input stream.
@@ -48,12 +49,33 @@ public class SerialInput extends ObjectInputStream {
public SerialInput(InputStream in, ClassCatalog classCatalog)
throws IOException {
+ this(in, classCatalog, null);
+ }
+
+ /**
+ * 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.
+ *
+ * @param classLoader is the class loader to use, or null if a default
+ * class loader should be used.
+ */
+ public SerialInput(InputStream in,
+ ClassCatalog classCatalog,
+ ClassLoader classLoader)
+ throws IOException {
+
super(in);
this.classCatalog = classCatalog;
+ this.classLoader = classLoader;
}
- // javadoc is inherited
+ // javadoc is specified elsewhere
protected ObjectStreamClass readClassDescriptor()
throws IOException, ClassNotFoundException {
@@ -72,4 +94,19 @@ public class SerialInput extends ObjectInputStream {
throw new RuntimeExceptionWrapper(e);
}
}
+
+ // javadoc is specified elsewhere
+ protected Class resolveClass(ObjectStreamClass desc)
+ throws IOException, ClassNotFoundException {
+
+ if (classLoader != null) {
+ try {
+ return Class.forName(desc.getName(), false, classLoader);
+ } catch (ClassNotFoundException e) {
+ return super.resolveClass(desc);
+ }
+ } else {
+ return super.resolveClass(desc);
+ }
+ }
}
diff --git a/db/java/src/com/sleepycat/bind/serial/SerialOutput.java b/db/java/src/com/sleepycat/bind/serial/SerialOutput.java
index 22ae8f872..b88183142 100644
--- a/db/java/src/com/sleepycat/bind/serial/SerialOutput.java
+++ b/db/java/src/com/sleepycat/bind/serial/SerialOutput.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SerialOutput.java,v 1.3 2004/09/01 14:34:20 mark Exp $
+ * $Id: SerialOutput.java,v 12.5 2006/09/08 20:32:11 bostic Exp $
*/
package com.sleepycat.bind.serial;
@@ -40,15 +40,16 @@ import com.sleepycat.util.RuntimeExceptionWrapper;
*/
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.
+ /*
+ * 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);
+ new SerialOutput(baos, null);
} catch (IOException e) {
throw new RuntimeExceptionWrapper(e);
}
diff --git a/db/java/src/com/sleepycat/bind/serial/SerialSerialBinding.java b/db/java/src/com/sleepycat/bind/serial/SerialSerialBinding.java
index 3fba700bd..e92f6312b 100644
--- a/db/java/src/com/sleepycat/bind/serial/SerialSerialBinding.java
+++ b/db/java/src/com/sleepycat/bind/serial/SerialSerialBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SerialSerialBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: SerialSerialBinding.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
diff --git a/db/java/src/com/sleepycat/bind/serial/SerialSerialKeyCreator.java b/db/java/src/com/sleepycat/bind/serial/SerialSerialKeyCreator.java
index eae756f61..ae3fe3181 100644
--- a/db/java/src/com/sleepycat/bind/serial/SerialSerialKeyCreator.java
+++ b/db/java/src/com/sleepycat/bind/serial/SerialSerialKeyCreator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SerialSerialKeyCreator.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: SerialSerialKeyCreator.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
diff --git a/db/java/src/com/sleepycat/bind/serial/StoredClassCatalog.java b/db/java/src/com/sleepycat/bind/serial/StoredClassCatalog.java
index 04caeae3b..9a9c11fd2 100644
--- a/db/java/src/com/sleepycat/bind/serial/StoredClassCatalog.java
+++ b/db/java/src/com/sleepycat/bind/serial/StoredClassCatalog.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredClassCatalog.java,v 1.4 2004/09/01 14:34:20 mark Exp $
+ * $Id: StoredClassCatalog.java,v 12.4 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
@@ -106,13 +106,19 @@ public class StoredClassCatalog implements ClassCatalog {
classMap = new HashMap();
formatMap = new HashMap();
- /*
- * To avoid phantoms, use putNoOverwrite to ensure that there is always
- * a class ID record.
- */
- if (!dbConfig.getReadOnly()) {
- DatabaseEntry key = new DatabaseEntry(LAST_CLASS_ID_KEY);
- DatabaseEntry data = new DatabaseEntry(new byte[1]); // zero ID
+ DatabaseEntry key = new DatabaseEntry(LAST_CLASS_ID_KEY);
+ DatabaseEntry data = new DatabaseEntry();
+ if (dbConfig.getReadOnly()) {
+ /* Check that the class ID record exists. */
+ OperationStatus status = db.get(null, key, data, null);
+ if (status != OperationStatus.SUCCESS) {
+ throw new IllegalStateException
+ ("A read-only catalog database may not be empty");
+ }
+ } else {
+ /* Add the initial class ID record if it doesn't exist. */
+ data.setData(new byte[1]); // zero ID
+ /* Use putNoOverwrite to avoid phantoms. */
db.putNoOverwrite(null, key, data);
}
}
@@ -149,8 +155,8 @@ public class StoredClassCatalog implements ClassCatalog {
* DatabaseEntry object for the data, so the bytes of the class format can
* be examined afterwards.
*/
- private synchronized ObjectStreamClass getClassFormat(byte[] classID,
- DatabaseEntry data)
+ private ObjectStreamClass getClassFormat(byte[] classID,
+ DatabaseEntry data)
throws DatabaseException, ClassNotFoundException {
/* First check the map and, if found, add class info to the map. */
@@ -200,7 +206,7 @@ public class StoredClassCatalog implements ClassCatalog {
* loader; if they are different, a new class ID is assigned for the
* current format.
*/
- private synchronized ClassInfo getClassInfo(ObjectStreamClass classFormat)
+ private ClassInfo getClassInfo(ObjectStreamClass classFormat)
throws DatabaseException, ClassNotFoundException {
/*
@@ -264,10 +270,10 @@ public class StoredClassCatalog implements ClassCatalog {
* record with the new ID also. The ClassInfo passed as an argument is the
* one to be updated.
*/
- private synchronized ClassInfo putClassInfo(ClassInfo classInfo,
- String className,
- DatabaseEntry classKey,
- ObjectStreamClass classFormat)
+ private ClassInfo putClassInfo(ClassInfo classInfo,
+ String className,
+ DatabaseEntry classKey,
+ ObjectStreamClass classFormat)
throws DatabaseException, ClassNotFoundException {
/* An intent-to-write cursor is needed for CDB. */
@@ -422,6 +428,11 @@ public class StoredClassCatalog implements ClassCatalog {
} catch (IOException e) { return false; }
}
+ /*
+ * We can return the same byte[] for 0 length arrays.
+ */
+ private static byte[] ZERO_LENGTH_BYTE_ARRAY = new byte[0];
+
private static byte[] getBytes(DatabaseEntry dbt) {
byte[] b = dbt.getData();
if (b == null) {
@@ -430,9 +441,14 @@ public class StoredClassCatalog implements ClassCatalog {
if (dbt.getOffset() == 0 && b.length == dbt.getSize()) {
return b;
}
- byte[] t = new byte[dbt.getSize()];
- System.arraycopy(b, dbt.getOffset(), t, 0, t.length);
- return t;
+ int len = dbt.getSize();
+ if (len == 0) {
+ return ZERO_LENGTH_BYTE_ARRAY;
+ } else {
+ byte[] t = new byte[len];
+ System.arraycopy(b, dbt.getOffset(), t, 0, t.length);
+ return t;
+ }
}
private static byte[] getObjectBytes(Object o)
diff --git a/db/java/src/com/sleepycat/bind/serial/TupleSerialBinding.java b/db/java/src/com/sleepycat/bind/serial/TupleSerialBinding.java
index 2e30c3f5f..6157b9aa7 100644
--- a/db/java/src/com/sleepycat/bind/serial/TupleSerialBinding.java
+++ b/db/java/src/com/sleepycat/bind/serial/TupleSerialBinding.java
@@ -1,16 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleSerialBinding.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: TupleSerialBinding.java,v 12.4 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
import com.sleepycat.bind.EntityBinding;
-import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.bind.tuple.TupleBase;
import com.sleepycat.bind.tuple.TupleInput;
import com.sleepycat.bind.tuple.TupleOutput;
import com.sleepycat.db.DatabaseEntry;
@@ -31,7 +31,8 @@ import com.sleepycat.db.DatabaseEntry;
*
* @author Mark Hayes
*/
-public abstract class TupleSerialBinding implements EntityBinding {
+public abstract class TupleSerialBinding extends TupleBase
+ implements EntityBinding {
protected SerialBinding dataBinding;
@@ -62,16 +63,16 @@ public abstract class TupleSerialBinding implements EntityBinding {
// javadoc is inherited
public Object entryToObject(DatabaseEntry key, DatabaseEntry data) {
- return entryToObject(TupleBinding.entryToInput(key),
+ return entryToObject(entryToInput(key),
dataBinding.entryToObject(data));
}
// javadoc is inherited
public void objectToKey(Object object, DatabaseEntry key) {
- TupleOutput output = TupleBinding.newOutput();
+ TupleOutput output = getTupleOutput(object);
objectToKey(object, output);
- TupleBinding.outputToEntry(output, key);
+ outputToEntry(output, key);
}
// javadoc is inherited
diff --git a/db/java/src/com/sleepycat/bind/serial/TupleSerialKeyCreator.java b/db/java/src/com/sleepycat/bind/serial/TupleSerialKeyCreator.java
index f81f75a9a..396c706f4 100644
--- a/db/java/src/com/sleepycat/bind/serial/TupleSerialKeyCreator.java
+++ b/db/java/src/com/sleepycat/bind/serial/TupleSerialKeyCreator.java
@@ -1,15 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleSerialKeyCreator.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: TupleSerialKeyCreator.java,v 12.4 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
-import com.sleepycat.bind.tuple.TupleBinding;
+import com.sleepycat.bind.tuple.TupleBase;
import com.sleepycat.bind.tuple.TupleInput;
import com.sleepycat.bind.tuple.TupleOutput;
import com.sleepycat.db.DatabaseEntry;
@@ -30,7 +30,7 @@ import com.sleepycat.db.SecondaryKeyCreator;
*
* @author Mark Hayes
*/
-public abstract class TupleSerialKeyCreator
+public abstract class TupleSerialKeyCreator extends TupleBase
implements SecondaryKeyCreator {
protected SerialBinding dataBinding;
@@ -65,12 +65,11 @@ public abstract class TupleSerialKeyCreator
DatabaseEntry indexKeyEntry)
throws DatabaseException {
- TupleOutput output = TupleBinding.newOutput();
- TupleInput primaryKeyInput =
- TupleBinding.entryToInput(primaryKeyEntry);
+ TupleOutput output = getTupleOutput(null);
+ TupleInput primaryKeyInput = entryToInput(primaryKeyEntry);
Object dataInput = dataBinding.entryToObject(dataEntry);
if (createSecondaryKey(primaryKeyInput, dataInput, output)) {
- TupleBinding.outputToEntry(output, indexKeyEntry);
+ outputToEntry(output, indexKeyEntry);
return true;
} else {
return false;
diff --git a/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.java b/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.java
index 85a254e9a..7b66786c4 100644
--- a/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.java
+++ b/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleSerialMarshalledBinding.java,v 1.3 2004/09/22 18:01:01 bostic Exp $
+ * $Id: TupleSerialMarshalledBinding.java,v 12.4 2006/09/08 20:32:11 bostic Exp $
*/
package com.sleepycat.bind.serial;
diff --git a/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.java b/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.java
index 98b8fa637..d8d57bf35 100644
--- a/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.java
+++ b/db/java/src/com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleSerialMarshalledKeyCreator.java,v 1.2 2004/06/04 18:24:49 mark Exp $
+ * $Id: TupleSerialMarshalledKeyCreator.java,v 12.3 2006/08/31 18:14:05 bostic Exp $
*/
package com.sleepycat.bind.serial;
diff --git a/db/java/src/com/sleepycat/bind/serial/package.html b/db/java/src/com/sleepycat/bind/serial/package.html
index eab1e2151..8db3db9ad 100644
--- a/db/java/src/com/sleepycat/bind/serial/package.html
+++ b/db/java/src/com/sleepycat/bind/serial/package.html
@@ -1,4 +1,4 @@
-<!-- $Id: package.html,v 1.1 2004/08/02 18:52:04 mjc Exp $ -->
+<!-- $Id: package.html,v 12.0 2004/11/17 03:43:57 bostic Exp $ -->
<html>
<body>
Bindings that use Java serialization.
diff --git a/db/java/src/com/sleepycat/bind/tuple/BooleanBinding.java b/db/java/src/com/sleepycat/bind/tuple/BooleanBinding.java
index 389b19f25..c21e8e831 100644
--- a/db/java/src/com/sleepycat/bind/tuple/BooleanBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/BooleanBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: BooleanBinding.java,v 1.5 2004/08/13 15:16:44 mjc Exp $
+ * $Id: BooleanBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -39,13 +39,13 @@ public class BooleanBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeBoolean(((Boolean) object).booleanValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- booleanToEntry(((Boolean) object).booleanValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,7 +69,15 @@ public class BooleanBinding extends TupleBinding {
*/
public static void booleanToEntry(boolean val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[BOOLEAN_SIZE]).writeBoolean(val),
- entry);
+ outputToEntry(sizedOutput().writeBoolean(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[BOOLEAN_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/ByteBinding.java b/db/java/src/com/sleepycat/bind/tuple/ByteBinding.java
index f227e50c6..9f243aac2 100644
--- a/db/java/src/com/sleepycat/bind/tuple/ByteBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/ByteBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ByteBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: ByteBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -39,13 +39,13 @@ public class ByteBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeByte(((Number) object).byteValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- byteToEntry(((Number) object).byteValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,6 +69,15 @@ public class ByteBinding extends TupleBinding {
*/
public static void byteToEntry(byte val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[BYTE_SIZE]).writeByte(val), entry);
+ outputToEntry(sizedOutput().writeByte(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[BYTE_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/CharacterBinding.java b/db/java/src/com/sleepycat/bind/tuple/CharacterBinding.java
index c521a9ac4..6db9232e0 100644
--- a/db/java/src/com/sleepycat/bind/tuple/CharacterBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/CharacterBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: CharacterBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: CharacterBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -39,13 +39,13 @@ public class CharacterBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeChar(((Character) object).charValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- charToEntry(((Character) object).charValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,6 +69,15 @@ public class CharacterBinding extends TupleBinding {
*/
public static void charToEntry(char val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[CHAR_SIZE]).writeChar(val), entry);
+ outputToEntry(sizedOutput().writeChar(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[CHAR_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/DoubleBinding.java b/db/java/src/com/sleepycat/bind/tuple/DoubleBinding.java
index a94c7ecb9..e4ca9081f 100644
--- a/db/java/src/com/sleepycat/bind/tuple/DoubleBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/DoubleBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DoubleBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: DoubleBinding.java,v 12.5 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -15,6 +15,11 @@ import com.sleepycat.db.DatabaseEntry;
* A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
* wrapper or a <code>double</code> primitive.
*
+ * <p><em>Note:</em> This class produces byte array values that by default
+ * (without a custom comparator) do <em>not</em> sort correctly for negative
+ * values. Only non-negative values are sorted correctly by default. To sort
+ * all values correctly by default, use {@link SortedDoubleBinding}.</p>
+ *
* <p>There are two ways to use this class:</p>
* <ol>
* <li>When using the {@link com.sleepycat.db} package directly, the static
@@ -39,13 +44,13 @@ public class DoubleBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeDouble(((Number) object).doubleValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- doubleToEntry(((Number) object).doubleValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,7 +74,15 @@ public class DoubleBinding extends TupleBinding {
*/
public static void doubleToEntry(double val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[DOUBLE_SIZE]).writeDouble(val),
- entry);
+ outputToEntry(sizedOutput().writeDouble(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[DOUBLE_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/FloatBinding.java b/db/java/src/com/sleepycat/bind/tuple/FloatBinding.java
index c7d45716f..5d5f0f885 100644
--- a/db/java/src/com/sleepycat/bind/tuple/FloatBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/FloatBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: FloatBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: FloatBinding.java,v 12.5 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -15,6 +15,11 @@ import com.sleepycat.db.DatabaseEntry;
* A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
* wrapper or a <code>float</code> primitive.
*
+ * <p><em>Note:</em> This class produces byte array values that by default
+ * (without a custom comparator) do <em>not</em> sort correctly for negative
+ * values. Only non-negative values are sorted correctly by default. To sort
+ * all values correctly by default, use {@link SortedFloatBinding}.</p>
+ *
* <p>There are two ways to use this class:</p>
* <ol>
* <li>When using the {@link com.sleepycat.db} package directly, the static
@@ -39,13 +44,13 @@ public class FloatBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeFloat(((Number) object).floatValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- floatToEntry(((Number) object).floatValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,6 +74,15 @@ public class FloatBinding extends TupleBinding {
*/
public static void floatToEntry(float val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[FLOAT_SIZE]).writeFloat(val), entry);
+ outputToEntry(sizedOutput().writeFloat(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[FLOAT_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/IntegerBinding.java b/db/java/src/com/sleepycat/bind/tuple/IntegerBinding.java
index c2b6391ee..2c614cf8d 100644
--- a/db/java/src/com/sleepycat/bind/tuple/IntegerBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/IntegerBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: IntegerBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: IntegerBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -39,13 +39,13 @@ public class IntegerBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeInt(((Number) object).intValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- intToEntry(((Number) object).intValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,6 +69,15 @@ public class IntegerBinding extends TupleBinding {
*/
public static void intToEntry(int val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[INT_SIZE]).writeInt(val), entry);
+ outputToEntry(sizedOutput().writeInt(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[INT_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/LongBinding.java b/db/java/src/com/sleepycat/bind/tuple/LongBinding.java
index 6dee013b7..3181d727d 100644
--- a/db/java/src/com/sleepycat/bind/tuple/LongBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/LongBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LongBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: LongBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -39,13 +39,13 @@ public class LongBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeLong(((Number) object).longValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- longToEntry(((Number) object).longValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,6 +69,15 @@ public class LongBinding extends TupleBinding {
*/
public static void longToEntry(long val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[LONG_SIZE]).writeLong(val), entry);
+ outputToEntry(sizedOutput().writeLong(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[LONG_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleEntry.java b/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleEntry.java
index 9665b3c85..b7e69ed57 100644
--- a/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleEntry.java
+++ b/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleEntry.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MarshalledTupleEntry.java,v 1.2 2004/06/04 18:24:50 mark Exp $
+ * $Id: MarshalledTupleEntry.java,v 12.3 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
diff --git a/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.java b/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.java
index d7640e9f5..11fe1485f 100644
--- a/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.java
+++ b/db/java/src/com/sleepycat/bind/tuple/MarshalledTupleKeyEntity.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MarshalledTupleKeyEntity.java,v 1.3 2004/08/02 18:52:04 mjc Exp $
+ * $Id: MarshalledTupleKeyEntity.java,v 12.3 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
diff --git a/db/java/src/com/sleepycat/bind/tuple/ShortBinding.java b/db/java/src/com/sleepycat/bind/tuple/ShortBinding.java
index d330f9b1b..27d4bc793 100644
--- a/db/java/src/com/sleepycat/bind/tuple/ShortBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/ShortBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ShortBinding.java,v 1.4 2004/08/02 18:52:04 mjc Exp $
+ * $Id: ShortBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -39,13 +39,13 @@ public class ShortBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeShort(((Number) object).shortValue());
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- shortToEntry(((Number) object).shortValue(), entry);
+ return sizedOutput();
}
/**
@@ -69,6 +69,15 @@ public class ShortBinding extends TupleBinding {
*/
public static void shortToEntry(short val, DatabaseEntry entry) {
- outputToEntry(newOutput(new byte[SHORT_SIZE]).writeShort(val), entry);
+ outputToEntry(sizedOutput().writeShort(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput() {
+
+ return new TupleOutput(new byte[SHORT_SIZE]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/SortedDoubleBinding.java b/db/java/src/com/sleepycat/bind/tuple/SortedDoubleBinding.java
new file mode 100644
index 000000000..e36293dd2
--- /dev/null
+++ b/db/java/src/com/sleepycat/bind/tuple/SortedDoubleBinding.java
@@ -0,0 +1,86 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SortedDoubleBinding.java,v 12.2 2006/08/31 18:14:06 bostic Exp $
+ */
+
+package com.sleepycat.bind.tuple;
+
+import com.sleepycat.db.DatabaseEntry;
+
+/**
+ * A concrete <code>TupleBinding</code> for a <code>Double</code> primitive
+ * wrapper or a <code>double</code> primitive.
+ *
+ * <p>This class produces byte array values that by default (without a custom
+ * comparator) sort correctly, including sorting of negative values.
+ * Therefore, this class should normally be used instead of {@link
+ * DoubleBinding} which does not by default support sorting of negative values.
+ * Please note that:</p>
+ * <ul>
+ * <li>The byte array (stored) formats used by {@link DoubleBinding} and
+ * {@link SortedDoubleBinding} are different and incompatible. They are not
+ * interchangable once data has been stored.</li>
+ * <li>An instance of {@link DoubleBinding}, not {@link SortedDoubleBinding},
+ * is returned by {@link TupleBinding#getPrimitiveBinding} method. Therefore,
+ * to use {@link SortedDoubleBinding}, {@link TupleBinding#getPrimitiveBinding}
+ * should not be called.</li>
+ * </ul>
+ *
+ * <p>There are two ways to use this class:</p>
+ * <ol>
+ * <li>When using the {@link com.sleepycat.db} package directly, the static
+ * methods in this class can be used to convert between primitive values and
+ * {@link DatabaseEntry} objects.</li>
+ * <li>When using the {@link com.sleepycat.collections} package, an instance of
+ * this class can be used with any stored collection.</li>
+ * </ol>
+ */
+public class SortedDoubleBinding extends TupleBinding {
+
+ /* javadoc is inherited */
+ public Object entryToObject(TupleInput input) {
+
+ return new Double(input.readSortedDouble());
+ }
+
+ /* javadoc is inherited */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ output.writeSortedDouble(((Number) object).doubleValue());
+ }
+
+ /* javadoc is inherited */
+ protected TupleOutput getTupleOutput(Object object) {
+
+ return DoubleBinding.sizedOutput();
+ }
+
+ /**
+ * Converts an entry buffer into a simple <code>double</code> value.
+ *
+ * @param entry is the source entry buffer.
+ *
+ * @return the resulting value.
+ */
+ public static double entryToDouble(DatabaseEntry entry) {
+
+ return entryToInput(entry).readSortedDouble();
+ }
+
+ /**
+ * Converts a simple <code>double</code> value into an entry buffer.
+ *
+ * @param val is the source value.
+ *
+ * @param entry is the destination entry buffer.
+ */
+ public static void doubleToEntry(double val, DatabaseEntry entry) {
+
+ outputToEntry(DoubleBinding.sizedOutput().writeSortedDouble(val),
+ entry);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bind/tuple/SortedFloatBinding.java b/db/java/src/com/sleepycat/bind/tuple/SortedFloatBinding.java
new file mode 100644
index 000000000..a190a31a4
--- /dev/null
+++ b/db/java/src/com/sleepycat/bind/tuple/SortedFloatBinding.java
@@ -0,0 +1,85 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SortedFloatBinding.java,v 12.2 2006/08/31 18:14:06 bostic Exp $
+ */
+
+package com.sleepycat.bind.tuple;
+
+import com.sleepycat.db.DatabaseEntry;
+
+/**
+ * A concrete <code>TupleBinding</code> for a <code>Float</code> primitive
+ * wrapper or a <code>float</code> primitive.
+ *
+ * <p>This class produces byte array values that by default (without a custom
+ * comparator) sort correctly, including sorting of negative values.
+ * Therefore, this class should normally be used instead of {@link
+ * FloatBinding} which does not by default support sorting of negative values.
+ * Please note that:</p>
+ * <ul>
+ * <li>The byte array (stored) formats used by {@link FloatBinding} and
+ * {@link SortedFloatBinding} are different and incompatible. They are not
+ * interchangable once data has been stored.</li>
+ * <li>An instance of {@link FloatBinding}, not {@link SortedFloatBinding}, is
+ * returned by {@link TupleBinding#getPrimitiveBinding} method. Therefore, to
+ * use {@link SortedFloatBinding}, {@link TupleBinding#getPrimitiveBinding}
+ * should not be called.</li>
+ * </ul>
+ *
+ * <p>There are two ways to use this class:</p>
+ * <ol>
+ * <li>When using the {@link com.sleepycat.db} package directly, the static
+ * methods in this class can be used to convert between primitive values and
+ * {@link DatabaseEntry} objects.</li>
+ * <li>When using the {@link com.sleepycat.collections} package, an instance of
+ * this class can be used with any stored collection.</li>
+ * </ol>
+ */
+public class SortedFloatBinding extends TupleBinding {
+
+ /* javadoc is inherited */
+ public Object entryToObject(TupleInput input) {
+
+ return new Float(input.readSortedFloat());
+ }
+
+ /* javadoc is inherited */
+ public void objectToEntry(Object object, TupleOutput output) {
+
+ output.writeSortedFloat(((Number) object).floatValue());
+ }
+
+ /* javadoc is inherited */
+ protected TupleOutput getTupleOutput(Object object) {
+
+ return FloatBinding.sizedOutput();
+ }
+
+ /**
+ * Converts an entry buffer into a simple <code>float</code> value.
+ *
+ * @param entry is the source entry buffer.
+ *
+ * @return the resulting value.
+ */
+ public static float entryToFloat(DatabaseEntry entry) {
+
+ return entryToInput(entry).readSortedFloat();
+ }
+
+ /**
+ * Converts a simple <code>float</code> value into an entry buffer.
+ *
+ * @param val is the source value.
+ *
+ * @param entry is the destination entry buffer.
+ */
+ public static void floatToEntry(float val, DatabaseEntry entry) {
+
+ outputToEntry(FloatBinding.sizedOutput().writeSortedFloat(val), entry);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bind/tuple/StringBinding.java b/db/java/src/com/sleepycat/bind/tuple/StringBinding.java
index 257e01f44..9674745c9 100644
--- a/db/java/src/com/sleepycat/bind/tuple/StringBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/StringBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StringBinding.java,v 1.4 2004/08/02 18:52:05 mjc Exp $
+ * $Id: StringBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -37,13 +37,13 @@ public class StringBinding extends TupleBinding {
// javadoc is inherited
public void objectToEntry(Object object, TupleOutput output) {
- /* Do nothing. Not called by objectToEntry(Object,DatabaseEntry). */
+ output.writeString((String) object);
}
// javadoc is inherited
- public void objectToEntry(Object object, DatabaseEntry entry) {
+ protected TupleOutput getTupleOutput(Object object) {
- stringToEntry((String) object, entry);
+ return sizedOutput((String) object);
}
/**
@@ -67,10 +67,18 @@ public class StringBinding extends TupleBinding {
*/
public static void stringToEntry(String val, DatabaseEntry entry) {
+ outputToEntry(sizedOutput(val).writeString(val), entry);
+ }
+
+ /**
+ * Returns a tuple output object of the exact size needed, to avoid
+ * wasting space when a single primitive is output.
+ */
+ private static TupleOutput sizedOutput(String val) {
+
int stringLength =
(val == null) ? 1 : UtfOps.getByteLength(val.toCharArray());
stringLength++; // null terminator
- outputToEntry(newOutput(new byte[stringLength]).writeString(val),
- entry);
+ return new TupleOutput(new byte[stringLength]);
}
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleBase.java b/db/java/src/com/sleepycat/bind/tuple/TupleBase.java
new file mode 100644
index 000000000..b63cbc1e0
--- /dev/null
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleBase.java
@@ -0,0 +1,164 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: TupleBase.java,v 12.3 2006/08/31 18:14:06 bostic Exp $
+ */
+
+package com.sleepycat.bind.tuple;
+
+import com.sleepycat.db.DatabaseEntry;
+
+/**
+ * A base class for tuple bindings and tuple key creators that provides control
+ * over the allocation of the output buffer.
+ *
+ * <p>Tuple bindings and key creators append data to a {@link TupleOutput}
+ * instance, which is also a {@link com.sleepycat.util.FastOutputStream}
+ * instance. This object has a byte array buffer that is resized when it is
+ * full. The reallocation of this buffer can be a performance factor for
+ * some applications using large objects. To manage this issue, the {@link
+ * #setTupleBufferSize} method may be used to control the initial size of the
+ * buffer, and the {@link #getTupleOutput} method may be overridden by
+ * subclasses to take over creation of the TupleOutput object.</p>
+ */
+public class TupleBase {
+
+ private int outputBufferSize;
+
+ /**
+ * Initializes the initial output buffer size to zero.
+ *
+ * <p>Unless {@link #setTupleBufferSize} is called, the default {@link
+ * com.sleepycat.util.FastOutputStream#DEFAULT_INIT_SIZE} size will be
+ * used.</p>
+ */
+ public TupleBase() {
+ outputBufferSize = 0;
+ }
+
+ /**
+ * Sets the initial byte size of the output buffer that is allocated by the
+ * default implementation of {@link #getTupleOutput}.
+ *
+ * <p>If this property is zero (the default), the default {@link
+ * com.sleepycat.util.FastOutputStream#DEFAULT_INIT_SIZE} size is used.</p>
+ *
+ * @param byteSize the initial byte size of the output buffer, or zero to
+ * use the default size.
+ */
+ public void setTupleBufferSize(int byteSize) {
+ outputBufferSize = byteSize;
+ }
+
+ /**
+ * Returns the initial byte size of the output buffer.
+ *
+ * @return the initial byte size of the output buffer.
+ *
+ * @see #setTupleBufferSize
+ */
+ public int getTupleBufferSize() {
+ return outputBufferSize;
+ }
+
+ /**
+ * Returns an empty TupleOutput instance that will be used by the tuple
+ * binding or key creator.
+ *
+ * <p>The default implementation of this method creates a new TupleOutput
+ * with an initial buffer size that can be changed using the {@link
+ * #setTupleBufferSize} method.</p>
+ *
+ * <p>This method may be overridden to return a TupleOutput instance. For
+ * example, an instance per thread could be created and returned by this
+ * method. If a TupleOutput instance is reused, be sure to call its
+ * {@link com.sleepycat.util.FastOutputStream#reset} method before each
+ * use.</p>
+ *
+ * @param object is the object to be written to the tuple output, and may
+ * be used by subclasses to determine the size of the output buffer.
+ *
+ * @return an empty TupleOutput instance.
+ *
+ * @see #setTupleBufferSize
+ */
+ protected TupleOutput getTupleOutput(Object object) {
+ int byteSize = getTupleBufferSize();
+ if (byteSize != 0) {
+ return new TupleOutput(new byte[byteSize]);
+ } else {
+ return new TupleOutput();
+ }
+ }
+
+ /**
+ * Utility method to set the data in a entry buffer to the data in a tuple
+ * output object.
+ *
+ * @param output is the source tuple output object.
+ *
+ * @param entry is the destination entry buffer.
+ */
+ public static void outputToEntry(TupleOutput output, DatabaseEntry entry) {
+
+ entry.setData(output.getBufferBytes(), output.getBufferOffset(),
+ output.getBufferLength());
+ }
+
+ /**
+ * Utility method to set the data in a entry buffer to the data in a tuple
+ * input object.
+ *
+ * @param input is the source tuple input object.
+ *
+ * @param entry is the destination entry buffer.
+ */
+ public static void inputToEntry(TupleInput input, DatabaseEntry entry) {
+
+ entry.setData(input.getBufferBytes(), input.getBufferOffset(),
+ input.getBufferLength());
+ }
+
+ /**
+ * Utility method to create a new tuple input object for reading the data
+ * from a given buffer. If an existing input is reused, it is reset before
+ * returning it.
+ *
+ * @param entry is the source entry buffer.
+ *
+ * @return the new tuple input object.
+ */
+ public static TupleInput entryToInput(DatabaseEntry entry) {
+
+ return new TupleInput(entry.getData(), entry.getOffset(),
+ entry.getSize());
+ }
+
+ /**
+ * Utility method for use by bindings to create a tuple output object.
+ *
+ * @return a new tuple output object.
+ *
+ * @deprecated replaced by {@link #getTupleOutput}
+ */
+ public static TupleOutput newOutput() {
+
+ return new TupleOutput();
+ }
+
+ /**
+ * Utility method for use by bindings to create a tuple output object
+ * with a specific starting size.
+ *
+ * @return a new tuple output object.
+ *
+ * @deprecated replaced by {@link #getTupleOutput}
+ */
+ public static TupleOutput newOutput(byte[] buffer) {
+
+ return new TupleOutput(buffer);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleBinding.java b/db/java/src/com/sleepycat/bind/tuple/TupleBinding.java
index 5ae95545b..53fcc15d1 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleBinding.java,v 1.4 2004/06/29 06:06:36 mark Exp $
+ * $Id: TupleBinding.java,v 12.5 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -30,23 +30,36 @@ import com.sleepycat.db.DatabaseEntry;
*
* <p>For key or data entries 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>
+ * tuple binding. A custom tuple binding for these types is not needed.
+ * <em>Note:</em> {@link #getPrimitiveBinding} returns bindings that do not
+ * sort negative floating point numbers correctly by default. See {@link
+ * SortedFloatBinding} and {@link SortedDoubleBinding} for details.</p>
+ *
+ * <p>When a tuple binding is used as a key binding, it produces key values
+ * with a reasonable default sort order. For more information on the default
+ * sort order, see {@link com.sleepycat.bind.tuple.TupleOutput}.</p>
*
* @author Mark Hayes
*/
-public abstract class TupleBinding implements EntryBinding {
+public abstract class TupleBinding extends TupleBase implements EntryBinding {
private static final Map primitives = new HashMap();
static {
- primitives.put(String.class, new StringBinding());
- primitives.put(Character.class, new CharacterBinding());
- primitives.put(Boolean.class, new BooleanBinding());
- primitives.put(Byte.class, new ByteBinding());
- primitives.put(Short.class, new ShortBinding());
- primitives.put(Integer.class, new IntegerBinding());
- primitives.put(Long.class, new LongBinding());
- primitives.put(Float.class, new FloatBinding());
- primitives.put(Double.class, new DoubleBinding());
+ addPrimitive(String.class, String.class, new StringBinding());
+ addPrimitive(Character.class, Character.TYPE, new CharacterBinding());
+ addPrimitive(Boolean.class, Boolean.TYPE, new BooleanBinding());
+ addPrimitive(Byte.class, Byte.TYPE, new ByteBinding());
+ addPrimitive(Short.class, Short.TYPE, new ShortBinding());
+ addPrimitive(Integer.class, Integer.TYPE, new IntegerBinding());
+ addPrimitive(Long.class, Long.TYPE, new LongBinding());
+ addPrimitive(Float.class, Float.TYPE, new FloatBinding());
+ addPrimitive(Double.class, Double.TYPE, new DoubleBinding());
+ }
+
+ private static void addPrimitive(Class cls1, Class cls2,
+ TupleBinding binding) {
+ primitives.put(cls1, binding);
+ primitives.put(cls2, binding);
}
/**
@@ -64,76 +77,12 @@ public abstract class TupleBinding implements EntryBinding {
// javadoc is inherited
public void objectToEntry(Object object, DatabaseEntry entry) {
- TupleOutput output = newOutput();
+ TupleOutput output = getTupleOutput(object);
objectToEntry(object, output);
outputToEntry(output, entry);
}
/**
- * Utility method for use by bindings to create a tuple output object.
- *
- * @return a new tuple output object.
- */
- public static TupleOutput newOutput() {
-
- return new TupleOutput();
- }
-
- /**
- * Utility method for use by bindings to create a tuple output object
- * with a specific starting size.
- *
- * @return a new tuple output object.
- */
- public static TupleOutput newOutput(byte[] buffer) {
-
- return new TupleOutput(buffer);
- }
-
- /**
- * Utility method to set the data in a entry buffer to the data in a tuple
- * output object.
- *
- * @param output is the source tuple output object.
- *
- * @param entry is the destination entry buffer.
- */
- public static void outputToEntry(TupleOutput output, DatabaseEntry entry) {
-
- entry.setData(output.getBufferBytes(), output.getBufferOffset(),
- output.getBufferLength());
- }
-
- /**
- * Utility method to set the data in a entry buffer to the data in a tuple
- * input object.
- *
- * @param input is the source tuple input object.
- *
- * @param entry is the destination entry buffer.
- */
- public static void inputToEntry(TupleInput input, DatabaseEntry entry) {
-
- entry.setData(input.getBufferBytes(), input.getBufferOffset(),
- input.getBufferLength());
- }
-
- /**
- * Utility method to create a new tuple input object for reading the data
- * from a given buffer. If an existing input is reused, it is reset before
- * returning it.
- *
- * @param entry is the source entry buffer.
- *
- * @return the new tuple input object.
- */
- public static TupleInput entryToInput(DatabaseEntry entry) {
-
- return new TupleInput(entry.getData(), entry.getOffset(),
- entry.getSize());
- }
-
- /**
* Constructs a key or data object from a {@link TupleInput} entry.
*
* @param input is the tuple key or data entry.
@@ -167,6 +116,11 @@ public abstract class TupleBinding implements EntryBinding {
* <li><code>Double</code></li>
* </ul>
*
+ * <p><em>Note:</em> {@link #getPrimitiveBinding} returns bindings that do
+ * not sort negative floating point numbers correctly by default. See
+ * {@link SortedFloatBinding} and {@link SortedDoubleBinding} for
+ * details.</p>
+ *
* @param cls is the primitive Java class.
*
* @return a new binding for the primitive class or null if the cls
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleInput.java b/db/java/src/com/sleepycat/bind/tuple/TupleInput.java
index 97108b10a..426f61024 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleInput.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleInput.java
@@ -1,15 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleInput.java,v 1.4 2004/09/01 14:34:20 mark Exp $
+ * $Id: TupleInput.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
import com.sleepycat.util.FastInputStream;
+import com.sleepycat.util.PackedInteger;
import com.sleepycat.util.UtfOps;
/**
@@ -45,11 +46,28 @@ import com.sleepycat.util.UtfOps;
* character ordering.</li>
* </ul>
*
- * <p>Floats and doubles are stored in standard Java integer-bit representation
- * (IEEE 754). Non-negative numbers are correctly ordered by numeric value.
- * However, negative numbers are not correctly ordered; therefore, if you use
- * negative floating point numbers in a key, you'll need to implement and
- * configure a custom comparator to get correct numeric ordering.</p>
+ * <p>Floats and doubles are stored using two different representations: sorted
+ * representation and integer-bit (IEEE 754) representation. If you use
+ * negative floating point numbers in a key, you should use sorted
+ * representation; alternatively you may use integer-bit representation but you
+ * will need to implement and configure a custom comparator to get correct
+ * numeric ordering for negative numbers.</p>
+ *
+ * <p>To use sorted representation use this set of methods:</p>
+ * <ul>
+ * <li>{@link TupleOutput#writeSortedFloat}</li>
+ * <li>{@link TupleInput#readSortedFloat}</li>
+ * <li>{@link TupleOutput#writeSortedDouble}</li>
+ * <li>{@link TupleInput#readSortedDouble}</li>
+ * </ul>
+ *
+ * <p>To use integer-bit representation use this set of methods:</p>
+ * <ul>
+ * <li>{@link TupleOutput#writeFloat}</li>
+ * <li>{@link TupleInput#readFloat}</li>
+ * <li>{@link TupleOutput#writeDouble}</li>
+ * <li>{@link TupleInput#readDouble}</li>
+ * </ul>
*
* @author Mark Hayes
*/
@@ -119,17 +137,17 @@ public class TupleInput extends FastInputStream {
public final String readString()
throws IndexOutOfBoundsException, IllegalArgumentException {
- byte[] buf = getBufferBytes();
- int off = getBufferOffset();
+ byte[] myBuf = buf;
+ int myOff = off;
if (available() >= 2 &&
- buf[off] == TupleOutput.NULL_STRING_UTF_VALUE &&
- buf[off + 1] == 0) {
+ myBuf[myOff] == TupleOutput.NULL_STRING_UTF_VALUE &&
+ myBuf[myOff + 1] == 0) {
skip(2);
return null;
} else {
- int byteLen = UtfOps.getZeroTerminatedByteLength(buf, off);
+ int byteLen = UtfOps.getZeroTerminatedByteLength(myBuf, myOff);
skip(byteLen + 1);
- return UtfOps.bytesToString(buf, off, byteLen);
+ return UtfOps.bytesToString(myBuf, myOff, byteLen);
}
}
@@ -142,7 +160,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final char readChar() throws IndexOutOfBoundsException {
+ public final char readChar()
+ throws IndexOutOfBoundsException {
return (char) readUnsignedShort();
}
@@ -157,7 +176,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final boolean readBoolean() throws IndexOutOfBoundsException {
+ public final boolean readBoolean()
+ throws IndexOutOfBoundsException {
int c = readFast();
if (c < 0) {
@@ -175,7 +195,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final byte readByte() throws IndexOutOfBoundsException {
+ public final byte readByte()
+ throws IndexOutOfBoundsException {
return (byte) (readUnsignedByte() ^ 0x80);
}
@@ -189,7 +210,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final short readShort() throws IndexOutOfBoundsException {
+ public final short readShort()
+ throws IndexOutOfBoundsException {
return (short) (readUnsignedShort() ^ 0x8000);
}
@@ -203,7 +225,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final int readInt() throws IndexOutOfBoundsException {
+ public final int readInt()
+ throws IndexOutOfBoundsException {
return (int) (readUnsignedInt() ^ 0x80000000);
}
@@ -217,7 +240,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final long readLong() throws IndexOutOfBoundsException {
+ public final long readLong()
+ throws IndexOutOfBoundsException {
return readUnsignedLong() ^ 0x8000000000000000L;
}
@@ -228,12 +252,19 @@ public class TupleInput extends FastInputStream {
* <code>Float.intBitsToFloat</code> is used to convert the signed int
* value.
*
+ * <p><em>Note:</em> This method operations on byte array values that by
+ * default (without a custom comparator) do <em>not</em> sort correctly for
+ * negative values. Only non-negative values are sorted correctly by
+ * default. To sort all values correctly by default, use {@link
+ * #readSortedFloat}.</p>
+ *
* @return the value read from the buffer.
*
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final float readFloat() throws IndexOutOfBoundsException {
+ public final float readFloat()
+ throws IndexOutOfBoundsException {
return Float.intBitsToFloat((int) readUnsignedInt());
}
@@ -244,17 +275,80 @@ public class TupleInput extends FastInputStream {
* <code>Double.longBitsToDouble</code> is used to convert the signed long
* value.
*
+ * <p><em>Note:</em> This method operations on byte array values that by
+ * default (without a custom comparator) do <em>not</em> sort correctly for
+ * negative values. Only non-negative values are sorted correctly by
+ * default. To sort all values correctly by default, use {@link
+ * #readSortedDouble}.</p>
+ *
* @return the value read from the buffer.
*
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final double readDouble() throws IndexOutOfBoundsException {
+ public final double readDouble()
+ throws IndexOutOfBoundsException {
return Double.longBitsToDouble(readUnsignedLong());
}
/**
+ * Reads a signed float (four byte) value from the buffer, with support
+ * for correct default sorting of all values.
+ * Reads values that were written using {@link
+ * TupleOutput#writeSortedFloat}.
+ *
+ * <p><code>Float.intBitsToFloat</code> and the following bit
+ * manipulations are used to convert the stored representation to a signed
+ * float value.</p>
+ * <pre>
+ * int val = ... // get stored bits
+ * val ^= (val &lt; 0) ? 0x80000000 : 0xffffffff;
+ * return Float.intBitsToFloat(val);
+ * </pre>
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IndexOutOfBoundsException if not enough bytes are available in
+ * the buffer.
+ */
+ public final float readSortedFloat()
+ throws IndexOutOfBoundsException {
+
+ int val = (int) readUnsignedInt();
+ val ^= (val < 0) ? 0x80000000 : 0xffffffff;
+ return Float.intBitsToFloat(val);
+ }
+
+ /**
+ * Reads a signed double (eight byte) value from the buffer, with support
+ * for correct default sorting of all values.
+ * Reads values that were written using {@link
+ * TupleOutput#writeSortedDouble}.
+ *
+ * <p><code>Float.longBitsToDouble</code> and the following bit
+ * manipulations are used to convert the stored representation to a signed
+ * double value.</p>
+ * <pre>
+ * int val = ... // get stored bits
+ val ^= (val &lt; 0) ? 0x8000000000000000L : 0xffffffffffffffffL;
+ return Double.longBitsToDouble(val);
+ * </pre>
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IndexOutOfBoundsException if not enough bytes are available in
+ * the buffer.
+ */
+ public final double readSortedDouble()
+ throws IndexOutOfBoundsException {
+
+ long val = readUnsignedLong();
+ val ^= (val < 0) ? 0x8000000000000000L : 0xffffffffffffffffL;
+ return Double.longBitsToDouble(val);
+ }
+
+ /**
* Reads an unsigned byte (one byte) value from the buffer.
* Reads values that were written using {@link
* TupleOutput#writeUnsignedByte}.
@@ -264,7 +358,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final int readUnsignedByte() throws IndexOutOfBoundsException {
+ public final int readUnsignedByte()
+ throws IndexOutOfBoundsException {
int c = readFast();
if (c < 0) {
@@ -283,7 +378,8 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final int readUnsignedShort() throws IndexOutOfBoundsException {
+ public final int readUnsignedShort()
+ throws IndexOutOfBoundsException {
int c1 = readFast();
int c2 = readFast();
@@ -305,14 +401,15 @@ public class TupleInput extends FastInputStream {
* @throws IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
- public final long readUnsignedInt() throws IndexOutOfBoundsException {
+ public final long readUnsignedInt()
+ throws IndexOutOfBoundsException {
long c1 = readFast();
long c2 = readFast();
long c3 = readFast();
long c4 = readFast();
if ((c1 | c2 | c3 | c4) < 0) {
- throw new IndexOutOfBoundsException();
+ throw new IndexOutOfBoundsException();
}
return ((c1 << 24) | (c2 << 16) | (c3 << 8) | c4);
}
@@ -321,7 +418,8 @@ public class TupleInput extends FastInputStream {
* 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 IndexOutOfBoundsException {
+ private final long readUnsignedLong()
+ throws IndexOutOfBoundsException {
long c1 = readFast();
long c2 = readFast();
@@ -396,8 +494,6 @@ public class TupleInput extends FastInputStream {
* @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 IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
@@ -421,8 +517,6 @@ public class TupleInput extends FastInputStream {
* @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 IndexOutOfBoundsException if not enough bytes are available in
* the buffer.
*/
@@ -466,8 +560,6 @@ public class TupleInput extends FastInputStream {
* @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 IndexOutOfBoundsException if no null terminating byte is found
* in the buffer.
*
@@ -476,7 +568,52 @@ public class TupleInput extends FastInputStream {
public final void readString(char[] chars)
throws IndexOutOfBoundsException, IllegalArgumentException {
- byte[] buf = getBufferBytes();
off = UtfOps.bytesToChars(buf, off, chars, 0, chars.length, false);
}
+
+ /**
+ * Returns the byte length of a null-terminated UTF string in the data
+ * buffer, including the terminator. Used with string values that were
+ * written using {@link TupleOutput#writeString(String)}.
+ *
+ * @throws IndexOutOfBoundsException if no null terminating byte is found
+ * in the buffer.
+ *
+ * @throws IllegalArgumentException malformed UTF data is encountered.
+ */
+ public final int getStringByteLength()
+ throws IndexOutOfBoundsException, IllegalArgumentException {
+
+ if (available() >= 2 &&
+ buf[off] == TupleOutput.NULL_STRING_UTF_VALUE &&
+ buf[off + 1] == 0) {
+ return 2;
+ } else {
+ return UtfOps.getZeroTerminatedByteLength(buf, off) + 1;
+ }
+ }
+
+ /**
+ * Reads a packed integer. Note that packed integers are not appropriate
+ * for sorted values (keys) unless a custom comparator is used.
+ *
+ * @see PackedInteger
+ */
+ public int readPackedInt() {
+
+ int len = PackedInteger.getReadIntLength(buf, off);
+ int val = PackedInteger.readInt(buf, off);
+
+ off += len;
+ return val;
+ }
+
+ /**
+ * Returns the byte length of a packed integer.
+ *
+ * @see PackedInteger
+ */
+ public int getPackedIntByteLength() {
+ return PackedInteger.getReadIntLength(buf, off);
+ }
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleInputBinding.java b/db/java/src/com/sleepycat/bind/tuple/TupleInputBinding.java
index 20523dfce..382408ccf 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleInputBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleInputBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleInputBinding.java,v 1.2 2004/06/04 18:24:50 mark Exp $
+ * $Id: TupleInputBinding.java,v 12.3 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleMarshalledBinding.java b/db/java/src/com/sleepycat/bind/tuple/TupleMarshalledBinding.java
index 05644eab0..6eb4a6c07 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleMarshalledBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleMarshalledBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleMarshalledBinding.java,v 1.3 2004/09/22 18:01:01 bostic Exp $
+ * $Id: TupleMarshalledBinding.java,v 12.4 2006/09/08 20:32:11 bostic Exp $
*/
package com.sleepycat.bind.tuple;
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleOutput.java b/db/java/src/com/sleepycat/bind/tuple/TupleOutput.java
index da1fa0c8f..60ca0ac10 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleOutput.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleOutput.java
@@ -1,15 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleOutput.java,v 1.4 2004/09/01 14:34:20 mark Exp $
+ * $Id: TupleOutput.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
import com.sleepycat.util.FastOutputStream;
+import com.sleepycat.util.PackedInteger;
import com.sleepycat.util.UtfOps;
/**
@@ -45,11 +46,28 @@ import com.sleepycat.util.UtfOps;
* character ordering.</li>
* </ul>
*
- * <p>Floats and doubles are stored in standard Java integer-bit representation
- * (IEEE 754). Non-negative numbers are correctly ordered by numeric value.
- * However, negative numbers are not correctly ordered; therefore, if you use
- * negative floating point numbers in a key, you'll need to implement and
- * configure a custom comparator to get correct numeric ordering.</p>
+ * <p>Floats and doubles are stored using two different representations: sorted
+ * representation and integer-bit (IEEE 754) representation. If you use
+ * negative floating point numbers in a key, you should use sorted
+ * representation; alternatively you may use integer-bit representation but you
+ * will need to implement and configure a custom comparator to get correct
+ * numeric ordering for negative numbers.</p>
+ *
+ * <p>To use sorted representation use this set of methods:</p>
+ * <ul>
+ * <li>{@link TupleOutput#writeSortedFloat}</li>
+ * <li>{@link TupleInput#readSortedFloat}</li>
+ * <li>{@link TupleOutput#writeSortedDouble}</li>
+ * <li>{@link TupleInput#readSortedDouble}</li>
+ * </ul>
+ *
+ * <p>To use integer-bit representation use this set of methods:</p>
+ * <ul>
+ * <li>{@link TupleOutput#writeFloat}</li>
+ * <li>{@link TupleInput#readFloat}</li>
+ * <li>{@link TupleOutput#writeDouble}</li>
+ * <li>{@link TupleInput#readDouble}</li>
+ * </ul>
*
* @author Mark Hayes
*/
@@ -235,6 +253,12 @@ public class TupleOutput extends FastOutputStream {
* <code>Float.floatToIntBits</code> is used to convert the signed float
* value.
*
+ * <p><em>Note:</em> This method produces byte array values that by default
+ * (without a custom comparator) do <em>not</em> sort correctly for
+ * negative values. Only non-negative values are sorted correctly by
+ * default. To sort all values correctly by default, use {@link
+ * #writeSortedFloat}.</p>
+ *
* @param val is the value to write to the buffer.
*
* @return this tuple output object.
@@ -251,6 +275,12 @@ public class TupleOutput extends FastOutputStream {
* <code>Double.doubleToLongBits</code> is used to convert the signed
* double value.
*
+ * <p><em>Note:</em> This method produces byte array values that by default
+ * (without a custom comparator) do <em>not</em> sort correctly for
+ * negative values. Only non-negative values are sorted correctly by
+ * default. To sort all values correctly by default, use {@link
+ * #writeSortedDouble}.</p>
+ *
* @param val is the value to write to the buffer.
*
* @return this tuple output object.
@@ -261,6 +291,56 @@ public class TupleOutput extends FastOutputStream {
return this;
}
+ /**
+ * Writes a signed float (four byte) value to the buffer, with support for
+ * correct default sorting of all values.
+ * Writes values that can be read using {@link TupleInput#readSortedFloat}.
+ *
+ * <p><code>Float.floatToIntBits</code> and the following bit manipulations
+ * are used to convert the signed float value to a representation that is
+ * sorted correctly by default.</p>
+ * <pre>
+ * int intVal = Float.floatToIntBits(val);
+ * intVal ^= (intVal &lt; 0) ? 0xffffffff : 0x80000000;
+ * </pre>
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @return this tuple output object.
+ */
+ public final TupleOutput writeSortedFloat(float val) {
+
+ int intVal = Float.floatToIntBits(val);
+ intVal ^= (intVal < 0) ? 0xffffffff : 0x80000000;
+ writeUnsignedInt(intVal);
+ return this;
+ }
+
+ /**
+ * Writes a signed double (eight byte) value to the buffer, with support
+ * for correct default sorting of all values.
+ * Writes values that can be read using {@link TupleInput#readSortedDouble}.
+ *
+ * <p><code>Float.doubleToLongBits</code> and the following bit
+ * manipulations are used to convert the signed double value to a
+ * representation that is sorted correctly by default.</p>
+ * <pre>
+ * long longVal = Double.doubleToLongBits(val);
+ * longVal ^= (longVal &lt; 0) ? 0xffffffffffffffffL : 0x8000000000000000L;
+ * </pre>
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @return this tuple output object.
+ */
+ public final TupleOutput writeSortedDouble(double val) {
+
+ long longVal = Double.doubleToLongBits(val);
+ longVal ^= (longVal < 0) ? 0xffffffffffffffffL : 0x8000000000000000L;
+ writeUnsignedLong(longVal);
+ return this;
+ }
+
// --- end DataOutput compatible methods ---
/**
@@ -395,4 +475,20 @@ public class TupleOutput extends FastOutputStream {
writeFast((byte) val);
return this;
}
+
+ /**
+ * Writes a packed integer. Note that packed integers are not appropriate
+ * for sorted values (keys) unless a custom comparator is used.
+ *
+ * @see PackedInteger
+ */
+ public void writePackedInt(int val) {
+
+ makeSpace(PackedInteger.MAX_LENGTH);
+
+ int oldLen = getBufferLength();
+ int newLen = PackedInteger.writeInt(getBufferBytes(), oldLen, val);
+
+ addSize(newLen - oldLen);
+ }
}
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleTupleBinding.java b/db/java/src/com/sleepycat/bind/tuple/TupleTupleBinding.java
index ac8f4158f..8f4bdacd0 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleTupleBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleTupleBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleTupleBinding.java,v 1.2 2004/06/04 18:24:50 mark Exp $
+ * $Id: TupleTupleBinding.java,v 12.4 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -28,7 +28,8 @@ import com.sleepycat.db.DatabaseEntry;
*
* @author Mark Hayes
*/
-public abstract class TupleTupleBinding implements EntityBinding {
+public abstract class TupleTupleBinding extends TupleBase
+ implements EntityBinding {
/**
* Creates a tuple-tuple entity binding.
@@ -46,17 +47,17 @@ public abstract class TupleTupleBinding implements EntityBinding {
// javadoc is inherited
public void objectToKey(Object object, DatabaseEntry key) {
- TupleOutput output = TupleBinding.newOutput();
+ TupleOutput output = getTupleOutput(object);
objectToKey(object, output);
- TupleBinding.outputToEntry(output, key);
+ outputToEntry(output, key);
}
// javadoc is inherited
public void objectToData(Object object, DatabaseEntry data) {
- TupleOutput output = TupleBinding.newOutput();
+ TupleOutput output = getTupleOutput(object);
objectToData(object, output);
- TupleBinding.outputToEntry(output, data);
+ outputToEntry(output, data);
}
// abstract methods
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleTupleKeyCreator.java b/db/java/src/com/sleepycat/bind/tuple/TupleTupleKeyCreator.java
index f5041a94e..6ee73bc96 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleTupleKeyCreator.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleTupleKeyCreator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleTupleKeyCreator.java,v 1.4 2004/08/02 18:52:05 mjc Exp $
+ * $Id: TupleTupleKeyCreator.java,v 12.5 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
@@ -18,10 +18,15 @@ import com.sleepycat.db.SecondaryKeyCreator;
* An abstract key creator that uses a tuple key and a tuple data entry. This
* class takes care of converting the key and data entry to/from {@link
* TupleInput} and {@link TupleOutput} objects.
+ * The following abstract method must be implemented by a concrete subclass
+ * to create the index key using these objects
+ * <ul>
+ * <li> {@link #createSecondaryKey(TupleInput,TupleInput,TupleOutput)} </li>
+ * </ul>
*
* @author Mark Hayes
*/
-public abstract class TupleTupleKeyCreator
+public abstract class TupleTupleKeyCreator extends TupleBase
implements SecondaryKeyCreator {
/**
@@ -37,12 +42,11 @@ public abstract class TupleTupleKeyCreator
DatabaseEntry indexKeyEntry)
throws DatabaseException {
- TupleOutput output = TupleBinding.newOutput();
- TupleInput primaryKeyInput =
- TupleBinding.entryToInput(primaryKeyEntry);
- TupleInput dataInput = TupleBinding.entryToInput(dataEntry);
+ TupleOutput output = getTupleOutput(null);
+ TupleInput primaryKeyInput = entryToInput(primaryKeyEntry);
+ TupleInput dataInput = entryToInput(dataEntry);
if (createSecondaryKey(primaryKeyInput, dataInput, output)) {
- TupleBinding.outputToEntry(output, indexKeyEntry);
+ outputToEntry(output, indexKeyEntry);
return true;
} else {
return false;
@@ -54,10 +58,9 @@ public abstract class TupleTupleKeyCreator
DatabaseEntry dataEntry)
throws DatabaseException {
- TupleOutput output = TupleBinding.newOutput();
- if (nullifyForeignKey(TupleBinding.entryToInput(dataEntry),
- output)) {
- TupleBinding.outputToEntry(output, dataEntry);
+ TupleOutput output = getTupleOutput(null);
+ if (nullifyForeignKey(entryToInput(dataEntry), output)) {
+ outputToEntry(output, dataEntry);
return true;
} else {
return false;
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.java b/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.java
index 370b4cc8a..48a19bcb8 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleTupleMarshalledBinding.java,v 1.3 2004/09/22 18:01:01 bostic Exp $
+ * $Id: TupleTupleMarshalledBinding.java,v 12.4 2006/09/08 20:32:11 bostic Exp $
*/
package com.sleepycat.bind.tuple;
diff --git a/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.java b/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.java
index aa2911a91..3465ff3e2 100644
--- a/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.java
+++ b/db/java/src/com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleTupleMarshalledKeyCreator.java,v 1.2 2004/06/04 18:24:50 mark Exp $
+ * $Id: TupleTupleMarshalledKeyCreator.java,v 12.3 2006/08/31 18:14:06 bostic Exp $
*/
package com.sleepycat.bind.tuple;
diff --git a/db/java/src/com/sleepycat/bind/tuple/package.html b/db/java/src/com/sleepycat/bind/tuple/package.html
index 9f2723523..0572de64f 100644
--- a/db/java/src/com/sleepycat/bind/tuple/package.html
+++ b/db/java/src/com/sleepycat/bind/tuple/package.html
@@ -1,4 +1,4 @@
-<!-- $Id: package.html,v 1.1 2004/08/02 18:52:05 mjc Exp $ -->
+<!-- $Id: package.html,v 12.0 2004/11/17 03:43:58 bostic Exp $ -->
<html>
<body>
Bindings that use sequences of primitive fields, or tuples.
diff --git a/db/java/src/com/sleepycat/collections/BaseIterator.java b/db/java/src/com/sleepycat/collections/BaseIterator.java
new file mode 100644
index 000000000..7cd71284d
--- /dev/null
+++ b/db/java/src/com/sleepycat/collections/BaseIterator.java
@@ -0,0 +1,35 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: BaseIterator.java,v 12.2 2006/08/31 18:14:07 bostic Exp $
+ */
+
+package com.sleepycat.collections;
+
+import java.util.ListIterator;
+
+/**
+ * Common interface for BlockIterator and StoredIterator.
+ */
+interface BaseIterator extends ListIterator {
+
+ /**
+ * Duplicate a cursor. Called by StoredCollections.iterator.
+ */
+ ListIterator dup();
+
+ /**
+ * Returns whether the given data is the current iterator data. Called by
+ * StoredMapEntry.setValue.
+ */
+ boolean isCurrentData(Object currentData);
+
+ /**
+ * Initializes a list iterator at the given index. Called by
+ * StoredList.iterator(int).
+ */
+ boolean moveToIndex(int index);
+}
diff --git a/db/java/src/com/sleepycat/collections/BlockIterator.java b/db/java/src/com/sleepycat/collections/BlockIterator.java
new file mode 100644
index 000000000..d8cd450f3
--- /dev/null
+++ b/db/java/src/com/sleepycat/collections/BlockIterator.java
@@ -0,0 +1,728 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: BlockIterator.java,v 12.3 2006/09/08 20:32:13 bostic Exp $
+ */
+
+package com.sleepycat.collections;
+
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+
+import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.util.keyrange.KeyRange;
+
+/**
+ * An iterator that does need closing because a cursor is not kept open across
+ * method calls. A cursor is opened to read a block of records at a time and
+ * then closed before the method returns.
+ *
+ * @author Mark Hayes
+ */
+class BlockIterator implements BaseIterator {
+
+ private StoredCollection coll;
+ private boolean writeAllowed;
+
+ /**
+ * Slots for a block of record keys and values. The priKeys array is only
+ * used for secondary databases; otherwise it is set to the keys array.
+ */
+ private byte[][] keys;
+ private byte[][] priKeys;
+ private byte[][] values;
+
+ /**
+ * The slot index of the record that would be returned by next().
+ * nextIndex is always greater or equal to zero. If the next record is not
+ * available, then nextIndex is equal to keys.length or keys[nextIndex] is
+ * null.
+ */
+ private int nextIndex;
+
+ /**
+ * The slot index of the record last returned by next() or previous(), or
+ * the record inserted by add(). dataIndex is -1 if the data record is not
+ * available. If greater or equal to zero, the slot at dataIndex is always
+ * non-null.
+ */
+ private int dataIndex;
+
+ /**
+ * The iterator data last returned by next() or previous(). This value is
+ * set to null if dataIndex is -1, or if the state of the iterator is such
+ * that set() or remove() cannot be called. For example, after add() this
+ * field is set to null, even though the dataIndex is still valid.
+ */
+ private Object dataObject;
+
+ /**
+ * Creates an iterator.
+ */
+ BlockIterator(StoredCollection coll, boolean writeAllowed, int blockSize) {
+
+ this.coll = coll;
+ this.writeAllowed = writeAllowed;
+
+ keys = new byte[blockSize][];
+ priKeys = coll.isSecondary() ? (new byte[blockSize][]) : keys;
+ values = new byte[blockSize][];
+
+ nextIndex = blockSize;
+ dataIndex = -1;
+ dataObject = null;
+ }
+
+ /**
+ * Copy constructor.
+ */
+ private BlockIterator(BlockIterator o) {
+
+ coll = o.coll;
+ writeAllowed = o.writeAllowed;
+
+ keys = copyArray(o.keys);
+ priKeys = coll.isSecondary() ? copyArray(o.priKeys) : keys;
+ values = copyArray(o.values);
+
+ nextIndex = o.nextIndex;
+ dataIndex = o.dataIndex;
+ dataObject = o.dataObject;
+ }
+
+ /**
+ * Copies an array of byte arrays.
+ */
+ private byte[][] copyArray(byte[][] a) {
+
+ byte[][] b = new byte[a.length][];
+ for (int i = 0; i < b.length; i += 1) {
+ if (a[i] != null) {
+ b[i] = KeyRange.copyBytes(a[i]);
+ }
+ }
+ return b;
+ }
+
+ /**
+ * Returns whether the element at nextIndex is available.
+ */
+ private boolean isNextAvailable() {
+
+ return (nextIndex < keys.length) &&
+ (keys[nextIndex] != null);
+ }
+
+ /**
+ * Returns whether the element at nextIndex-1 is available.
+ */
+ private boolean isPrevAvailable() {
+
+ return (nextIndex > 0) &&
+ (keys[nextIndex - 1] != null);
+ }
+
+ /**
+ * Returns the record number at the given slot position.
+ */
+ private int getRecordNumber(int i) {
+
+ if (coll.view.btreeRecNumDb) {
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(coll.view, false);
+ if (moveCursor(i, cursor)) {
+ return cursor.getCurrentRecordNumber();
+ } else {
+ throw new IllegalStateException();
+ }
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ } else {
+ DatabaseEntry entry = new DatabaseEntry(keys[i]);
+ return DbCompat.getRecordNumber(entry);
+ }
+ }
+
+ /**
+ * Sets dataObject to the iterator data for the element at dataIndex.
+ */
+ private void makeDataObject() {
+
+ int i = dataIndex;
+ DatabaseEntry keyEntry = new DatabaseEntry(keys[i]);
+ DatabaseEntry priKeyEntry = (keys != priKeys)
+ ? (new DatabaseEntry(priKeys[i]))
+ : keyEntry;
+ DatabaseEntry valuesEntry = new DatabaseEntry(values[i]);
+
+ dataObject = coll.makeIteratorData(this, keyEntry, priKeyEntry,
+ valuesEntry);
+ }
+
+ /**
+ * Sets all slots to null.
+ */
+ private void clearSlots() {
+
+ for (int i = 0; i < keys.length; i += 1) {
+ keys[i] = null;
+ priKeys[i] = null;
+ values[i] = null;
+ }
+ }
+
+ /**
+ * Sets a given slot using the data in the given cursor.
+ */
+ private void setSlot(int i, DataCursor cursor) {
+
+ keys[i] = KeyRange.getByteArray(cursor.getKeyThang());
+
+ if (keys != priKeys) {
+ priKeys[i] = KeyRange.getByteArray
+ (cursor.getPrimaryKeyThang());
+ }
+
+ values[i] = KeyRange.getByteArray(cursor.getValueThang());
+ }
+
+ /**
+ * Inserts an added record at a given slot position and shifts other slots
+ * accordingly. Also adjusts nextIndex and sets dataIndex to -1.
+ */
+ private void insertSlot(int i, DataCursor cursor) {
+
+ if (i < keys.length) {
+ for (int j = keys.length - 1; j > i; j -= 1) {
+
+ /* Shift right. */
+ keys[j] = keys[j - 1];
+ priKeys[j] = priKeys[j - 1];
+ values[j] = values[j - 1];
+
+ /* Bump key in recno-renumber database. */
+ if (coll.view.recNumRenumber && keys[j] != null) {
+ bumpRecordNumber(j);
+ }
+ }
+ nextIndex += 1;
+ } else {
+ if (i != keys.length) {
+ throw new IllegalStateException();
+ }
+ i -= 1;
+ for (int j = 0; j < i; j += 1) {
+ /* Shift left. */
+ keys[j] = keys[j + 1];
+ priKeys[j] = priKeys[j + 1];
+ values[j] = values[j + 1];
+ }
+ }
+ setSlot(i, cursor);
+ dataIndex = -1;
+ }
+
+ /**
+ * Increments the record number key at the given slot.
+ */
+ private void bumpRecordNumber(int i) {
+
+ DatabaseEntry entry = new DatabaseEntry(keys[i]);
+ DbCompat.setRecordNumber(entry,
+ DbCompat.getRecordNumber(entry) + 1);
+ keys[i] = entry.getData();
+ }
+
+ /**
+ * Deletes the given slot, adjusts nextIndex and sets dataIndex to -1.
+ */
+ private void deleteSlot(int i) {
+
+ for (int j = i + 1; j < keys.length; j += 1) {
+ keys[j - 1] = keys[j];
+ priKeys[j - 1] = priKeys[j];
+ values[j - 1] = values[j];
+ }
+ int last = keys.length - 1;
+ keys[last] = null;
+ priKeys[last] = null;
+ values[last] = null;
+
+ if (nextIndex > i) {
+ nextIndex -= 1;
+ }
+ dataIndex = -1;
+ }
+
+ /**
+ * Moves the cursor to the key/data at the given slot, and returns false
+ * if the reposition (search) fails.
+ */
+ private boolean moveCursor(int i, DataCursor cursor)
+ throws DatabaseException {
+
+ return cursor.repositionExact(keys[i], priKeys[i], values[i], false);
+ }
+
+ /**
+ * Closes the given cursor if non-null.
+ */
+ private void closeCursor(DataCursor cursor) {
+
+ if (cursor != null) {
+ try {
+ cursor.close();
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+ }
+
+ // --- begin Iterator/ListIterator methods ---
+
+ public boolean hasNext() {
+
+ if (isNextAvailable()) {
+ return true;
+ }
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(coll.view, writeAllowed);
+ int prev = nextIndex - 1;
+ boolean found = false;
+
+ if (keys[prev] == null) {
+ /* Get the first record for an uninitialized iterator. */
+ OperationStatus status = cursor.getFirst(false);
+ if (status == OperationStatus.SUCCESS) {
+ found = true;
+ nextIndex = 0;
+ }
+ } else {
+ /* Reposition to the last known key/data pair. */
+ int repos = cursor.repositionRange
+ (keys[prev], priKeys[prev], values[prev], false);
+
+ if (repos == DataCursor.REPOS_EXACT) {
+
+ /*
+ * The last known key/data pair was found and will now be
+ * in slot zero.
+ */
+ found = true;
+ nextIndex = 1;
+
+ /* The data object is now in slot zero or not available. */
+ if (dataIndex == prev) {
+ dataIndex = 0;
+ } else {
+ dataIndex = -1;
+ dataObject = null;
+ }
+ } else if (repos == DataCursor.REPOS_NEXT) {
+
+ /*
+ * The last known key/data pair was not found, but the
+ * following record was found and it will be in slot zero.
+ */
+ found = true;
+ nextIndex = 0;
+
+ /* The data object is no longer available. */
+ dataIndex = -1;
+ dataObject = null;
+ } else {
+ if (repos != DataCursor.REPOS_EOF) {
+ throw new IllegalStateException();
+ }
+ }
+ }
+
+ if (found) {
+ /* Clear all slots first in case an exception occurs below. */
+ clearSlots();
+
+ /* Attempt to fill all slots with records. */
+ int i = 0;
+ boolean done = false;
+ while (!done) {
+ setSlot(i, cursor);
+ i += 1;
+ if (i < keys.length) {
+ OperationStatus status = coll.iterateDuplicates() ?
+ cursor.getNext(false) :
+ cursor.getNextNoDup(false);
+ if (status != OperationStatus.SUCCESS) {
+ done = true;
+ }
+ } else {
+ done = true;
+ }
+ }
+
+ }
+
+ /*
+ * If REPOS_EXACT was returned above, make sure we retrieved
+ * the following record.
+ */
+ return isNextAvailable();
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ public boolean hasPrevious() {
+
+ if (isPrevAvailable()) {
+ return true;
+ }
+ if (!isNextAvailable()) {
+ return false;
+ }
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(coll.view, writeAllowed);
+ int last = keys.length - 1;
+ int next = nextIndex;
+ boolean found = false;
+
+ /* Reposition to the last known key/data pair. */
+ int repos = cursor.repositionRange
+ (keys[next], priKeys[next], values[next], false);
+
+ if (repos == DataCursor.REPOS_EXACT ||
+ repos == DataCursor.REPOS_NEXT) {
+
+ /*
+ * The last known key/data pair, or the record following it,
+ * was found and will now be in the last slot.
+ */
+ found = true;
+ nextIndex = last;
+
+ /* The data object is now in the last slot or not available. */
+ if (dataIndex == next && repos == DataCursor.REPOS_EXACT) {
+ dataIndex = last;
+ } else {
+ dataIndex = -1;
+ dataObject = null;
+ }
+ } else {
+ if (repos != DataCursor.REPOS_EOF) {
+ throw new IllegalStateException();
+ }
+ }
+
+ if (found) {
+ /* Clear all slots first in case an exception occurs below. */
+ clearSlots();
+
+ /* Attempt to fill all slots with records. */
+ int i = last;
+ boolean done = false;
+ while (!done) {
+ setSlot(i, cursor);
+ i -= 1;
+ if (i >= 0) {
+ OperationStatus status = coll.iterateDuplicates() ?
+ cursor.getPrev(false) :
+ cursor.getPrevNoDup(false);
+ if (status != OperationStatus.SUCCESS) {
+ done = true;
+ }
+ } else {
+ done = true;
+ }
+ }
+ }
+
+ /*
+ * Make sure we retrieved the preceding record after the reposition
+ * above.
+ */
+ return isPrevAvailable();
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ public Object next() {
+
+ if (hasNext()) {
+ dataIndex = nextIndex;
+ nextIndex += 1;
+ makeDataObject();
+ return dataObject;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+
+ public Object previous() {
+
+ if (hasPrevious()) {
+ nextIndex -= 1;
+ dataIndex = nextIndex;
+ makeDataObject();
+ return dataObject;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+
+ public int nextIndex() {
+
+ if (!coll.view.recNumAccess) {
+ throw new UnsupportedOperationException(
+ "Record number access not supported");
+ }
+
+ return hasNext() ? (getRecordNumber(nextIndex) -
+ coll.getIndexOffset())
+ : Integer.MAX_VALUE;
+ }
+
+ public int previousIndex() {
+
+ if (!coll.view.recNumAccess) {
+ throw new UnsupportedOperationException(
+ "Record number access not supported");
+ }
+
+ return hasPrevious() ? (getRecordNumber(nextIndex - 1) -
+ coll.getIndexOffset())
+ : (-1);
+ }
+
+ public void set(Object value) {
+
+ if (dataObject == null) {
+ throw new IllegalStateException();
+ }
+ if (!coll.hasValues()) {
+ throw new UnsupportedOperationException();
+ }
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(coll.view, writeAllowed);
+ if (moveCursor(dataIndex, cursor)) {
+ cursor.putCurrent(value);
+ setSlot(dataIndex, cursor);
+ } else {
+ throw new IllegalStateException();
+ }
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ public void remove() {
+
+ if (dataObject == null) {
+ throw new IllegalStateException();
+ }
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(coll.view, writeAllowed);
+ if (moveCursor(dataIndex, cursor)) {
+ cursor.delete();
+ deleteSlot(dataIndex);
+ dataObject = null;
+ } else {
+ throw new IllegalStateException();
+ }
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ public void add(Object value) {
+
+ /*
+ * The checkIterAddAllowed method ensures that one of the following two
+ * conditions holds and throws UnsupportedOperationException otherwise:
+ * 1- This is a list iterator for a recno-renumber database.
+ * 2- This is a collection iterator for a duplicates database.
+ */
+ coll.checkIterAddAllowed();
+ OperationStatus status = OperationStatus.SUCCESS;
+ DataCursor cursor = null;
+ try {
+ if (coll.view.keysRenumbered || !coll.areDuplicatesOrdered()) {
+
+ /*
+ * This is a recno-renumber database or a btree/hash database
+ * with unordered duplicates.
+ */
+ boolean hasPrev = hasPrevious();
+ if (!hasPrev && !hasNext()) {
+
+ /* The collection is empty. */
+ if (coll.view.keysRenumbered) {
+
+ /* Append to an empty recno-renumber database. */
+ status = coll.view.append(value, null, null);
+
+ } else if (coll.view.dupsAllowed &&
+ coll.view.range.isSingleKey()) {
+
+ /*
+ * When inserting a duplicate into a single-key range,
+ * the main key is fixed, so we can always insert into
+ * an empty collection.
+ */
+ cursor = new DataCursor(coll.view, writeAllowed);
+ cursor.useRangeKey();
+ status = cursor.putNoDupData(null, value, null, true);
+ cursor.close();
+ cursor = null;
+ } else {
+ throw new IllegalStateException
+ ("Collection is empty, cannot add() duplicate");
+ }
+
+ /*
+ * Move past the record just inserted (the cursor should be
+ * closed above to prevent multiple open cursors in certain
+ * DB core modes).
+ */
+ if (status == OperationStatus.SUCCESS) {
+ next();
+ dataIndex = nextIndex - 1;
+ }
+ } else {
+
+ /*
+ * The collection is non-empty. If hasPrev is true then
+ * the element at (nextIndex - 1) is available; otherwise
+ * the element at nextIndex is available.
+ */
+ cursor = new DataCursor(coll.view, writeAllowed);
+ int insertIndex = hasPrev ? (nextIndex - 1) : nextIndex;
+
+ if (!moveCursor(insertIndex, cursor)) {
+ throw new IllegalStateException();
+ }
+
+ /*
+ * For a recno-renumber database or a database with
+ * unsorted duplicates, insert before the iterator 'next'
+ * position, or after the 'prev' position. Then adjust
+ * the slots to account for the inserted record.
+ */
+ status = hasPrev ? cursor.putAfter(value)
+ : cursor.putBefore(value);
+ if (status == OperationStatus.SUCCESS) {
+ insertSlot(nextIndex, cursor);
+ }
+ }
+ } else {
+ /* This is a btree/hash database with ordered duplicates. */
+ cursor = new DataCursor(coll.view, writeAllowed);
+
+ if (coll.view.range.isSingleKey()) {
+
+ /*
+ * When inserting a duplicate into a single-key range,
+ * the main key is fixed.
+ */
+ cursor.useRangeKey();
+ } else {
+
+ /*
+ * When inserting into a multi-key range, the main key
+ * is the last dataIndex accessed by next(), previous()
+ * or add().
+ */
+ if (dataIndex < 0 || !moveCursor(dataIndex, cursor)) {
+ throw new IllegalStateException();
+ }
+ }
+
+ /*
+ * For a hash/btree with duplicates, insert the duplicate,
+ * put the new record in slot zero, and set the next index
+ * to slot one (past the new record).
+ */
+ status = cursor.putNoDupData(null, value, null, true);
+ if (status == OperationStatus.SUCCESS) {
+ clearSlots();
+ setSlot(0, cursor);
+ dataIndex = 0;
+ nextIndex = 1;
+ }
+ }
+
+ if (status == OperationStatus.KEYEXIST) {
+ throw new IllegalArgumentException("Duplicate value");
+ } else if (status != OperationStatus.SUCCESS) {
+ throw new IllegalArgumentException("Could not insert: " +
+ status);
+ }
+
+ /* Prevent subsequent set() or remove() call. */
+ dataObject = null;
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ // --- end Iterator/ListIterator methods ---
+
+ // --- begin BaseIterator methods ---
+
+ public final ListIterator dup() {
+
+ return new BlockIterator(this);
+ }
+
+ public final boolean isCurrentData(Object currentData) {
+
+ return (dataObject == currentData);
+ }
+
+ public final boolean moveToIndex(int index) {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(coll.view, writeAllowed);
+ OperationStatus status =
+ cursor.getSearchKey(new Integer(index), null, false);
+ if (status == OperationStatus.SUCCESS) {
+ clearSlots();
+ setSlot(0, cursor);
+ nextIndex = 0;
+ return true;
+ } else {
+ return false;
+ }
+ } catch (DatabaseException e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ // --- end BaseIterator methods ---
+}
diff --git a/db/java/src/com/sleepycat/collections/CurrentTransaction.java b/db/java/src/com/sleepycat/collections/CurrentTransaction.java
index 1876f26fc..a41b445df 100644
--- a/db/java/src/com/sleepycat/collections/CurrentTransaction.java
+++ b/db/java/src/com/sleepycat/collections/CurrentTransaction.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: CurrentTransaction.java,v 1.4 2004/09/22 18:01:02 bostic Exp $
+ * $Id: CurrentTransaction.java,v 12.7 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
@@ -43,6 +43,7 @@ public class CurrentTransaction {
private LockMode writeLockMode;
private boolean cdbMode;
private boolean txnMode;
+ private boolean lockingMode;
private Environment env;
private ThreadLocal localTrans = new ThreadLocal();
private ThreadLocal localCdbCursors;
@@ -85,7 +86,8 @@ public class CurrentTransaction {
try {
EnvironmentConfig config = env.getConfig();
txnMode = config.getTransactional();
- if (txnMode || DbCompat.getInitializeLocking(config)) {
+ lockingMode = DbCompat.getInitializeLocking(config);
+ if (txnMode || lockingMode) {
writeLockMode = LockMode.RMW;
} else {
writeLockMode = LockMode.DEFAULT;
@@ -100,6 +102,14 @@ public class CurrentTransaction {
}
/**
+ * Returns whether environment is configured for locking.
+ */
+ final boolean isLockingMode() {
+
+ return lockingMode;
+ }
+
+ /**
* Returns whether this is a transactional environment.
*/
final boolean isTxnMode() {
@@ -145,6 +155,18 @@ public class CurrentTransaction {
}
/**
+ * Returns whether auto-commit may be performed by the collections API.
+ * True is returned no collections API transaction is currently active, and
+ * no XA transaction is currently active.
+ */
+ boolean isAutoCommitAllowed()
+ throws DatabaseException {
+
+ return getTransaction() == null &&
+ DbCompat.getThreadTransaction(env) == 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.
@@ -244,13 +266,14 @@ public class CurrentTransaction {
}
/**
- * Returns whether the current transaction is a dirtyRead transaction.
+ * Returns whether the current transaction is a readUncommitted
+ * transaction.
*/
- final boolean isDirtyRead() {
+ final boolean isReadUncommitted() {
Trans trans = (Trans) localTrans.get();
if (trans != null && trans.config != null) {
- return trans.config.getDirtyRead();
+ return trans.config.getReadUncommitted();
} else {
return false;
}
@@ -279,7 +302,8 @@ public class CurrentTransaction {
* Opens a cursor for a given database, dup'ing an existing CDB cursor if
* one is open for the current thread.
*/
- Cursor openCursor(Database db, boolean writeCursor, Transaction txn)
+ Cursor openCursor(Database db, CursorConfig cursorConfig,
+ boolean writeCursor, Transaction txn)
throws DatabaseException {
if (cdbMode) {
@@ -295,8 +319,15 @@ public class CurrentTransaction {
cdbCursors = new CdbCursors();
cdbCursorsMap.put(db, cdbCursors);
}
+
+ /*
+ * In CDB mode the cursorConfig specified by the user is ignored
+ * and only the writeCursor parameter is honored. This is the only
+ * meaningful cursor attribute for CDB, and here we count on
+ * writeCursor flag being set correctly by the caller.
+ */
List cursors;
- CursorConfig config;
+ CursorConfig cdbConfig;
if (writeCursor) {
if (cdbCursors.readCursors.size() > 0) {
@@ -310,23 +341,23 @@ public class CurrentTransaction {
"cannot open CDB write cursor when read cursor is open");
}
cursors = cdbCursors.writeCursors;
- config = new CursorConfig();
- DbCompat.setWriteCursor(config, true);
+ cdbConfig = new CursorConfig();
+ DbCompat.setWriteCursor(cdbConfig, true);
} else {
cursors = cdbCursors.readCursors;
- config = null;
+ cdbConfig = null;
}
Cursor cursor;
if (cursors.size() > 0) {
Cursor other = ((Cursor) cursors.get(0));
cursor = other.dup(false);
} else {
- cursor = db.openCursor(null, config);
+ cursor = db.openCursor(null, cdbConfig);
}
cursors.add(cursor);
return cursor;
} else {
- return db.openCursor(txn, null);
+ return db.openCursor(txn, cursorConfig);
}
}
@@ -411,13 +442,9 @@ public class CurrentTransaction {
if (cdbCursorsMap != null) {
CdbCursors cdbCursors = (CdbCursors) cdbCursorsMap.get(db);
- /*
- * FindBugs whines unnecessarily about a Null pointer
- * dereference here.
- */
if (cdbCursors != null &&
- cdbCursors.readCursors.size() > 0 ||
- cdbCursors.writeCursors.size() > 0) {
+ (cdbCursors.readCursors.size() > 0 ||
+ cdbCursors.writeCursors.size() > 0)) {
return true;
}
}
diff --git a/db/java/src/com/sleepycat/collections/DataCursor.java b/db/java/src/com/sleepycat/collections/DataCursor.java
index c3931f8f6..977522ab2 100644
--- a/db/java/src/com/sleepycat/collections/DataCursor.java
+++ b/db/java/src/com/sleepycat/collections/DataCursor.java
@@ -1,22 +1,25 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DataCursor.java,v 1.5 2004/11/05 01:08:31 mjc Exp $
+ * $Id: DataCursor.java,v 12.7 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
import com.sleepycat.compat.DbCompat;
import com.sleepycat.db.Cursor;
+import com.sleepycat.db.CursorConfig;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.JoinConfig;
import com.sleepycat.db.JoinCursor;
import com.sleepycat.db.LockMode;
import com.sleepycat.db.OperationStatus;
+import com.sleepycat.util.keyrange.KeyRange;
+import com.sleepycat.util.keyrange.RangeCursor;
/**
* Represents a Berkeley DB cursor and adds support for indices, bindings and
@@ -29,12 +32,19 @@ import com.sleepycat.db.OperationStatus;
*/
final class DataCursor implements Cloneable {
+ /** Repositioned exactly to the key/data pair given. */
+ static final int REPOS_EXACT = 0;
+ /** Repositioned on a record following the key/data pair given. */
+ static final int REPOS_NEXT = 1;
+ /** Repositioned failed, no records on or after the key/data pair given. */
+ static final int REPOS_EOF = 2;
+
private RangeCursor cursor;
private JoinCursor joinCursor;
private DataView view;
private KeyRange range;
private boolean writeAllowed;
- private boolean dirtyRead;
+ private boolean readUncommitted;
private DatabaseEntry keyThang;
private DatabaseEntry valueThang;
private DatabaseEntry primaryKeyThang;
@@ -47,28 +57,40 @@ final class DataCursor implements Cloneable {
DataCursor(DataView view, boolean writeAllowed)
throws DatabaseException {
- init(view, writeAllowed, null);
+ init(view, writeAllowed, null, null);
+ }
+
+ /**
+ * Creates a cursor for a given view.
+ */
+ DataCursor(DataView view, boolean writeAllowed, CursorConfig config)
+ throws DatabaseException {
+
+ init(view, writeAllowed, config, null);
}
/**
* Creates a cursor for a given view and single key range.
+ * Used by unit tests.
*/
DataCursor(DataView view, boolean writeAllowed, Object singleKey)
throws DatabaseException {
- init(view, writeAllowed, view.subRange(singleKey));
+ init(view, writeAllowed, null, view.subRange(view.range, singleKey));
}
/**
* Creates a cursor for a given view and key range.
+ * Used by unit tests.
*/
DataCursor(DataView view, boolean writeAllowed,
Object beginKey, boolean beginInclusive,
Object endKey, boolean endInclusive)
throws DatabaseException {
- init(view, writeAllowed,
- view.subRange(beginKey, beginInclusive, endKey, endInclusive));
+ init(view, writeAllowed, null,
+ view.subRange
+ (view.range, beginKey, beginInclusive, endKey, endInclusive));
}
/**
@@ -88,7 +110,7 @@ final class DataCursor implements Cloneable {
cursors[i] = indexCursors[i].cursor.getCursor();
}
joinCursor = view.db.join(cursors, joinConfig);
- init(view, false, null);
+ init(view, false, null, null);
if (closeIndexCursors) {
indexCursorsToClose = indexCursors;
}
@@ -130,18 +152,25 @@ final class DataCursor implements Cloneable {
/**
* Constructor helper.
*/
- private void init(DataView view, boolean writeAllowed, KeyRange range)
+ private void init(DataView view,
+ boolean writeAllowed,
+ CursorConfig config,
+ KeyRange range)
throws DatabaseException {
+ if (config == null) {
+ config = view.cursorConfig;
+ }
this.view = view;
this.writeAllowed = writeAllowed && view.writeAllowed;
this.range = (range != null) ? range : view.range;
- dirtyRead = view.dirtyReadEnabled;
-
+ readUncommitted = config.getReadUncommitted() ||
+ view.currentTxn.isReadUncommitted();
initThangs();
if (joinCursor == null) {
- cursor = new RangeCursor(view, this.range, this.writeAllowed);
+ cursor = new MyRangeCursor
+ (this.range, config, view, this.writeAllowed);
}
}
@@ -158,6 +187,22 @@ final class DataCursor implements Cloneable {
}
/**
+ * Set entries from given byte arrays.
+ */
+ private void setThangs(byte[] keyBytes,
+ byte[] priKeyBytes,
+ byte[] valueBytes) {
+
+ keyThang.setData(KeyRange.copyBytes(keyBytes));
+
+ if (keyThang != primaryKeyThang) {
+ primaryKeyThang.setData(KeyRange.copyBytes(priKeyBytes));
+ }
+
+ valueThang.setData(KeyRange.copyBytes(valueBytes));
+ }
+
+ /**
* Closes the associated cursor.
*/
void close()
@@ -183,6 +228,93 @@ final class DataCursor implements Cloneable {
}
/**
+ * Repositions to a given raw key/data pair, or just past it if that record
+ * has been deleted.
+ *
+ * @return REPOS_EXACT, REPOS_NEXT or REPOS_EOF.
+ */
+ int repositionRange(byte[] keyBytes,
+ byte[] priKeyBytes,
+ byte[] valueBytes,
+ boolean lockForWrite)
+ throws DatabaseException {
+
+ LockMode lockMode = getLockMode(lockForWrite);
+ OperationStatus status = null;
+
+ /* Use the given key/data byte arrays. */
+ setThangs(keyBytes, priKeyBytes, valueBytes);
+
+ /* Position on or after the given key/data pair. */
+ if (view.dupsAllowed) {
+ status = cursor.getSearchBothRange(keyThang, primaryKeyThang,
+ valueThang, lockMode);
+ }
+ if (status != OperationStatus.SUCCESS) {
+ status = cursor.getSearchKeyRange(keyThang, primaryKeyThang,
+ valueThang, lockMode);
+ }
+
+ /* Return the result of the operation. */
+ if (status == OperationStatus.SUCCESS) {
+ if (!KeyRange.equalBytes(keyBytes, 0, keyBytes.length,
+ keyThang.getData(),
+ keyThang.getOffset(),
+ keyThang.getSize())) {
+ return REPOS_NEXT;
+ }
+ if (view.dupsAllowed) {
+ DatabaseEntry thang = view.isSecondary() ? primaryKeyThang
+ : valueThang;
+ byte[] bytes = view.isSecondary() ? priKeyBytes
+ : valueBytes;
+ if (!KeyRange.equalBytes(bytes, 0, bytes.length,
+ thang.getData(),
+ thang.getOffset(),
+ thang.getSize())) {
+ return REPOS_NEXT;
+ }
+ }
+ return REPOS_EXACT;
+ } else {
+ return REPOS_EOF;
+ }
+ }
+
+ /**
+ * Repositions to a given raw key/data pair.
+ *
+ * @throws IllegalStateException when the database has unordered keys or
+ * unordered duplicates.
+ *
+ * @return whether the search succeeded.
+ */
+ boolean repositionExact(byte[] keyBytes,
+ byte[] priKeyBytes,
+ byte[] valueBytes,
+ boolean lockForWrite)
+ throws DatabaseException {
+
+ LockMode lockMode = getLockMode(lockForWrite);
+ OperationStatus status = null;
+
+ /* Use the given key/data byte arrays. */
+ setThangs(keyBytes, priKeyBytes, valueBytes);
+
+ /* Position on the given key/data pair. */
+ if (view.recNumRenumber) {
+ /* getSearchBoth doesn't work with recno-renumber databases. */
+ status = cursor.getSearchKey(keyThang, primaryKeyThang,
+ valueThang, lockMode);
+ } else {
+ status = cursor.getSearchBoth(keyThang, primaryKeyThang,
+ valueThang, lockMode);
+ }
+
+ return (status == OperationStatus.SUCCESS);
+ }
+
+ /**
* Returns the view for this cursor.
*/
DataView getView() {
@@ -213,10 +345,7 @@ final class DataCursor implements Cloneable {
Object getCurrentKey()
throws DatabaseException {
- if (view.keyBinding == null) {
- throw new UnsupportedOperationException();
- }
- return view.makeKey(keyThang);
+ return view.makeKey(keyThang, primaryKeyThang);
}
/**
@@ -229,6 +358,28 @@ final class DataCursor implements Cloneable {
}
/**
+ * Returns the internal key entry.
+ */
+ DatabaseEntry getKeyThang() {
+ return keyThang;
+ }
+
+ /**
+ * Returns the internal primary key entry, which is the same object as the
+ * key entry if the cursor is not for a secondary database.
+ */
+ DatabaseEntry getPrimaryKeyThang() {
+ return primaryKeyThang;
+ }
+
+ /**
+ * Returns the internal value entry.
+ */
+ DatabaseEntry getValueThang() {
+ return valueThang;
+ }
+
+ /**
* Returns whether record number access is allowed.
*/
boolean hasRecNumAccess() {
@@ -306,9 +457,12 @@ final class DataCursor implements Cloneable {
LockMode lockMode = getLockMode(lockForWrite);
if (joinCursor != null) {
return joinCursor.getNext(keyThang, valueThang, lockMode);
+ } else if (view.dupsView) {
+ return cursor.getNext
+ (keyThang, primaryKeyThang, valueThang, lockMode);
} else {
- return cursor.getNextNoDup(keyThang, primaryKeyThang, valueThang,
- lockMode);
+ return cursor.getNextNoDup
+ (keyThang, primaryKeyThang, valueThang, lockMode);
}
}
@@ -319,8 +473,13 @@ final class DataCursor implements Cloneable {
throws DatabaseException {
checkNoJoinCursor();
- return cursor.getNextDup(keyThang, primaryKeyThang, valueThang,
- getLockMode(lockForWrite));
+ if (view.dupsView) {
+ return null;
+ } else {
+ return cursor.getNextDup
+ (keyThang, primaryKeyThang, valueThang,
+ getLockMode(lockForWrite));
+ }
}
/**
@@ -352,8 +511,16 @@ final class DataCursor implements Cloneable {
throws DatabaseException {
checkNoJoinCursor();
- return cursor.getPrevNoDup(keyThang, primaryKeyThang, valueThang,
- getLockMode(lockForWrite));
+ LockMode lockMode = getLockMode(lockForWrite);
+ if (view.dupsView) {
+ return null;
+ } else if (view.dupsView) {
+ return cursor.getPrev
+ (keyThang, primaryKeyThang, valueThang, lockMode);
+ } else {
+ return cursor.getPrevNoDup
+ (keyThang, primaryKeyThang, valueThang, lockMode);
+ }
}
/**
@@ -363,8 +530,13 @@ final class DataCursor implements Cloneable {
throws DatabaseException {
checkNoJoinCursor();
- return cursor.getPrevDup(keyThang, primaryKeyThang, valueThang,
- getLockMode(lockForWrite));
+ if (view.dupsView) {
+ return null;
+ } else {
+ return cursor.getPrevDup
+ (keyThang, primaryKeyThang, valueThang,
+ getLockMode(lockForWrite));
+ }
}
/**
@@ -376,11 +548,19 @@ final class DataCursor implements Cloneable {
throws DatabaseException {
checkNoJoinCursor();
- if (view.useKey(key, value, keyThang, range)) {
- return doGetSearchKey(lockForWrite);
+ if (view.dupsView) {
+ if (view.useKey(key, value, primaryKeyThang, view.dupsRange)) {
+ KeyRange.copy(view.dupsKey, keyThang);
+ return cursor.getSearchBoth
+ (keyThang, primaryKeyThang, valueThang,
+ getLockMode(lockForWrite));
+ }
} else {
- return OperationStatus.NOTFOUND;
+ if (view.useKey(key, value, keyThang, range)) {
+ return doGetSearchKey(lockForWrite);
+ }
}
+ return OperationStatus.NOTFOUND;
}
/**
@@ -408,28 +588,46 @@ final class DataCursor implements Cloneable {
throws DatabaseException {
checkNoJoinCursor();
- if (view.useKey(key, value, keyThang, range)) {
- return cursor.getSearchKeyRange(keyThang, primaryKeyThang,
- valueThang,
- getLockMode(lockForWrite));
+ LockMode lockMode = getLockMode(lockForWrite);
+ if (view.dupsView) {
+ if (view.useKey(key, value, primaryKeyThang, view.dupsRange)) {
+ KeyRange.copy(view.dupsKey, keyThang);
+ return cursor.getSearchBothRange
+ (keyThang, primaryKeyThang, valueThang, lockMode);
+ }
} else {
- return OperationStatus.NOTFOUND;
+ if (view.useKey(key, value, keyThang, range)) {
+ return cursor.getSearchKeyRange
+ (keyThang, primaryKeyThang, valueThang, lockMode);
+ }
}
+ return OperationStatus.NOTFOUND;
}
/**
- * Binding version of Cursor.getSearchBoth(), no join cursor allowed.
- * Unlike SecondaryCursor.getSearchBoth, for a secondary this searches for
- * the primary value not the primary key.
+ * Find the given key and value using getSearchBoth if possible or a
+ * sequential scan otherwise, no join cursor allowed.
*/
- OperationStatus getSearchBoth(Object key, Object value,
- boolean lockForWrite)
+ OperationStatus findBoth(Object key, Object value, boolean lockForWrite)
throws DatabaseException {
checkNoJoinCursor();
LockMode lockMode = getLockMode(lockForWrite);
view.useValue(value, valueThang, null);
- if (view.useKey(key, value, keyThang, range)) {
+ if (view.dupsView) {
+ if (view.useKey(key, value, primaryKeyThang, view.dupsRange)) {
+ KeyRange.copy(view.dupsKey, keyThang);
+ if (otherThang == null) {
+ otherThang = new DatabaseEntry();
+ }
+ OperationStatus status = cursor.getSearchBoth
+ (keyThang, primaryKeyThang, otherThang, lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ KeyRange.equalBytes(otherThang, valueThang)) {
+ return status;
+ }
+ }
+ } else if (view.useKey(key, value, keyThang, range)) {
if (view.isSecondary()) {
if (otherThang == null) {
otherThang = new DatabaseEntry();
@@ -440,35 +638,32 @@ final class DataCursor implements Cloneable {
lockMode);
while (status == OperationStatus.SUCCESS) {
if (KeyRange.equalBytes(otherThang, valueThang)) {
- break;
+ return status;
}
status = cursor.getNextDup(keyThang, primaryKeyThang,
otherThang, lockMode);
}
/* if status != SUCCESS set range cursor to invalid? */
- return status;
} else {
return cursor.getSearchBoth(keyThang, null, valueThang,
lockMode);
}
- } else {
- return OperationStatus.NOTFOUND;
}
+ return OperationStatus.NOTFOUND;
}
/**
* Find the given value using getSearchBoth if possible or a sequential
* scan otherwise, no join cursor allowed.
*/
- OperationStatus find(Object value, boolean findFirst)
+ OperationStatus findValue(Object value, boolean findFirst)
throws DatabaseException {
checkNoJoinCursor();
- LockMode lockMode = getLockMode(false);
if (view.entityBinding != null && !view.isSecondary() &&
(findFirst || !view.dupsAllowed)) {
- return getSearchBoth(null, value, false);
+ return findBoth(null, value, false);
} else {
if (otherThang == null) {
otherThang = new DatabaseEntry();
@@ -493,7 +688,11 @@ final class DataCursor implements Cloneable {
throws DatabaseException {
checkNoJoinCursor();
- return cursor.count();
+ if (view.dupsView) {
+ return 1;
+ } else {
+ return cursor.count();
+ }
}
/**
@@ -535,7 +734,7 @@ final class DataCursor implements Cloneable {
checkWriteAllowed(false);
view.useValue(value, valueThang, null); /* why no key check? */
- return cursor.putAfter(new DatabaseEntry(), valueThang);
+ return cursor.putAfter(keyThang, valueThang);
}
/**
@@ -546,7 +745,7 @@ final class DataCursor implements Cloneable {
checkWriteAllowed(false);
view.useValue(value, valueThang, keyThang);
- return cursor.putBefore(new DatabaseEntry(), valueThang);
+ return cursor.putBefore(keyThang, valueThang);
}
/**
@@ -631,10 +830,10 @@ final class DataCursor implements Cloneable {
* time a putXxx() method is called that key will be used.
*/
void useRangeKey() {
- if (!range.singleKey) {
+ if (!range.isSingleKey()) {
throw new IllegalStateException();
}
- KeyRange.copy(range.beginKey, keyThang);
+ KeyRange.copy(range.getSingleKey(), keyThang);
}
/**
@@ -652,11 +851,11 @@ final class DataCursor implements Cloneable {
*/
LockMode getLockMode(boolean lockForWrite) {
- /* Dirty-read takes precedence over write-locking. */
+ /* Read-uncommmitted takes precedence over write-locking. */
- if (dirtyRead) {
- return LockMode.DIRTY_READ;
- } else if (lockForWrite && !view.currentTxn.isDirtyRead()) {
+ if (readUncommitted) {
+ return LockMode.READ_UNCOMMITTED;
+ } else if (lockForWrite) {
return view.currentTxn.getWriteLockMode();
} else {
return LockMode.DEFAULT;
diff --git a/db/java/src/com/sleepycat/collections/DataView.java b/db/java/src/com/sleepycat/collections/DataView.java
index e8cec80b3..787459930 100644
--- a/db/java/src/com/sleepycat/collections/DataView.java
+++ b/db/java/src/com/sleepycat/collections/DataView.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DataView.java,v 1.4 2004/08/02 18:52:05 mjc Exp $
+ * $Id: DataView.java,v 12.4 2006/08/31 18:14:07 bostic Exp $
*/
package com.sleepycat.collections;
@@ -12,6 +12,7 @@ package com.sleepycat.collections;
import com.sleepycat.bind.EntityBinding;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.CursorConfig;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseConfig;
import com.sleepycat.db.DatabaseEntry;
@@ -24,6 +25,8 @@ import com.sleepycat.db.SecondaryDatabase;
import com.sleepycat.db.SecondaryKeyCreator;
import com.sleepycat.db.Transaction;
import com.sleepycat.util.RuntimeExceptionWrapper;
+import com.sleepycat.util.keyrange.KeyRange;
+import com.sleepycat.util.keyrange.KeyRangeException;
/**
* Represents a Berkeley DB database and adds support for indices, bindings and
@@ -45,19 +48,29 @@ final class DataView implements Cloneable {
EntityBinding entityBinding;
PrimaryKeyAssigner keyAssigner;
SecondaryKeyCreator secKeyCreator;
- boolean writeAllowed; // Read-write view
- boolean ordered; // Not a HASH Db
- boolean recNumAllowed; // QUEUE, RECNO, or BTREE-RECNUM Db
- boolean recNumAccess; // recNumAllowed && using a rec num binding
- boolean btreeRecNumDb; // BTREE-RECNUM Db
- boolean btreeRecNumAccess; // recNumAccess && BTREE-RECNUM Db
- boolean recNumRenumber; // RECNO-RENUM Db
- boolean keysRenumbered; // recNumRenumber || btreeRecNumAccess
- boolean dupsAllowed; // Dups configured
- boolean dupsOrdered; // Sorted dups configured
- boolean transactional; // Db is transactional
- boolean dirtyReadAllowed; // Dirty-read is optional in DB-CORE
- boolean dirtyReadEnabled; // This view is a dirty-ready view
+ CursorConfig cursorConfig; // Used for all operations via this view
+ boolean writeAllowed; // Read-write view
+ boolean ordered; // Not a HASH Db
+ boolean recNumAllowed; // QUEUE, RECNO, or BTREE-RECNUM Db
+ boolean recNumAccess; // recNumAllowed && using a rec num binding
+ boolean btreeRecNumDb; // BTREE-RECNUM Db
+ boolean btreeRecNumAccess; // recNumAccess && BTREE-RECNUM Db
+ boolean recNumRenumber; // RECNO-RENUM Db
+ boolean keysRenumbered; // recNumRenumber || btreeRecNumAccess
+ boolean dupsAllowed; // Dups configured
+ boolean dupsOrdered; // Sorted dups configured
+ boolean transactional; // Db is transactional
+ boolean readUncommittedAllowed; // Read-uncommited is optional in DB-CORE
+
+ /*
+ * If duplicatesView is called, dupsView will be true and dupsKey will be
+ * the secondary key used as the "single key" range. dupRange will be set
+ * as the range of the primary key values if subRange is subsequently
+ * called, to further narrow the view.
+ */
+ DatabaseEntry dupsKey;
+ boolean dupsView;
+ KeyRange dupsRange;
/**
* Creates a view for a given database and bindings. The initial key range
@@ -94,7 +107,7 @@ final class DataView implements Cloneable {
dupsOrdered = DbCompat.getSortedDuplicates(dbConfig);
transactional = currentTxn.isTxnMode() &&
dbConfig.getTransactional();
- dirtyReadAllowed = DbCompat.getDirtyRead(dbConfig);
+ readUncommittedAllowed = DbCompat.getReadUncommitted(dbConfig);
btreeRecNumDb = recNumAllowed && DbCompat.isTypeBtree(dbConfig);
range = new KeyRange(dbConfig.getBtreeComparator());
} catch (DatabaseException e) {
@@ -105,6 +118,7 @@ final class DataView implements Cloneable {
this.valueBinding = valueBinding;
this.entityBinding = entityBinding;
this.keyAssigner = keyAssigner;
+ cursorConfig = CursorConfig.DEFAULT;
if (valueBinding != null && entityBinding != null)
throw new IllegalArgumentException(
@@ -189,7 +203,7 @@ final class DataView implements Cloneable {
* Must do subRange before valueSetView since the latter clears the
* key binding needed for the former.
*/
- KeyRange singleKeyRange = subRange(singleKey);
+ KeyRange singleKeyRange = subRange(range, singleKey);
DataView view = valueSetView();
view.range = singleKeyRange;
return view;
@@ -211,14 +225,35 @@ final class DataView implements Cloneable {
}
/**
- * Returns a new view with a specified dirtyRead setting.
+ * Return a new duplicates view for a given secondary key.
+ */
+ DataView duplicatesView(Object secondaryKey,
+ EntryBinding primaryKeyBinding)
+ throws DatabaseException, KeyRangeException {
+
+ if (!isSecondary()) {
+ throw new UnsupportedOperationException
+ ("Only allowed for maps on secondary databases");
+ }
+ if (dupsView) {
+ throw new IllegalStateException();
+ }
+ DataView view = cloneView();
+ view.range = subRange(view.range, secondaryKey);
+ view.dupsKey = view.range.getSingleKey();
+ view.dupsView = true;
+ view.keyBinding = primaryKeyBinding;
+ return view;
+ }
+
+ /**
+ * Returns a new view with a specified cursor configuration.
*/
- DataView dirtyReadView(boolean enable) {
+ DataView configuredView(CursorConfig config) {
- if (!dirtyReadAllowed)
- return this;
DataView view = cloneView();
- view.dirtyReadEnabled = enable;
+ view.cursorConfig = (config != null) ?
+ DbCompat.cloneCursorConfig(config) : CursorConfig.DEFAULT;
return view;
}
@@ -238,7 +273,14 @@ final class DataView implements Cloneable {
Object endKey, boolean endInclusive)
throws DatabaseException, KeyRangeException {
- range = subRange(beginKey, beginInclusive, endKey, endInclusive);
+ KeyRange useRange = useSubRange();
+ useRange = subRange
+ (useRange, beginKey, beginInclusive, endKey, endInclusive);
+ if (dupsView) {
+ dupsRange = useRange;
+ } else {
+ range = useRange;
+ }
}
/**
@@ -458,7 +500,7 @@ final class DataView implements Cloneable {
throw new IllegalStateException(
"EntityBinding required to derive key from value");
}
- if (isSecondary()) {
+ if (!dupsView && isSecondary()) {
DatabaseEntry primaryKeyThang = new DatabaseEntry();
entityBinding.objectToKey(value, primaryKeyThang);
DatabaseEntry valueThang = new DatabaseEntry();
@@ -514,7 +556,7 @@ final class DataView implements Cloneable {
"non-null value with null value/entity binding");
}
} else {
- valueThang.setData(new byte[0]);
+ valueThang.setData(KeyRange.ZERO_LENGTH_BYTE_ARRAY);
valueThang.setOffset(0);
valueThang.setSize(0);
}
@@ -523,18 +565,24 @@ final class DataView implements Cloneable {
/**
* Converts a key entry to a key object.
*/
- Object makeKey(DatabaseEntry keyThang)
- throws DatabaseException {
+ Object makeKey(DatabaseEntry keyThang, DatabaseEntry priKeyThang) {
- if (keyThang.getSize() == 0) return null;
- return keyBinding.entryToObject(keyThang);
+ if (keyBinding == null) {
+ throw new UnsupportedOperationException();
+ } else {
+ DatabaseEntry thang = dupsView ? priKeyThang : keyThang;
+ if (thang.getSize() == 0) {
+ return null;
+ } else {
+ return keyBinding.entryToObject(thang);
+ }
+ }
}
/**
* Converts a key-value entry pair to a value object.
*/
- Object makeValue(DatabaseEntry primaryKeyThang, DatabaseEntry valueThang)
- throws DatabaseException {
+ Object makeValue(DatabaseEntry primaryKeyThang, DatabaseEntry valueThang) {
Object value;
if (valueBinding != null) {
@@ -552,21 +600,22 @@ final class DataView implements Cloneable {
/**
* Intersects the given key and the current range.
*/
- KeyRange subRange(Object singleKey)
+ KeyRange subRange(KeyRange useRange, Object singleKey)
throws DatabaseException, KeyRangeException {
- return range.subRange(makeRangeKey(singleKey));
+ return useRange.subRange(makeRangeKey(singleKey));
}
/**
* Intersects the given range and the current range.
*/
- KeyRange subRange(Object beginKey, boolean beginInclusive,
+ KeyRange subRange(KeyRange useRange,
+ Object beginKey, boolean beginInclusive,
Object endKey, boolean endInclusive)
throws DatabaseException, KeyRangeException {
if (beginKey == endKey && beginInclusive && endInclusive) {
- return subRange(beginKey);
+ return subRange(useRange, beginKey);
}
if (!ordered) {
throw new UnsupportedOperationException(
@@ -577,8 +626,30 @@ final class DataView implements Cloneable {
DatabaseEntry endThang =
(endKey != null) ? makeRangeKey(endKey) : null;
- return range.subRange(beginThang, beginInclusive,
- endThang, endInclusive);
+ return useRange.subRange(beginThang, beginInclusive,
+ endThang, endInclusive);
+ }
+
+ /**
+ * Returns the range to use for sub-ranges. Returns range if this is not a
+ * dupsView, or the dupsRange if this is a dupsView, creating dupsRange if
+ * necessary.
+ */
+ KeyRange useSubRange()
+ throws DatabaseException {
+
+ if (dupsView) {
+ synchronized (this) {
+ if (dupsRange == null) {
+ DatabaseConfig config =
+ secDb.getPrimaryDatabase().getConfig();
+ dupsRange = new KeyRange(config.getBtreeComparator());
+ }
+ }
+ return dupsRange;
+ } else {
+ return range;
+ }
}
/**
diff --git a/db/java/src/com/sleepycat/collections/MapEntryParameter.java b/db/java/src/com/sleepycat/collections/MapEntryParameter.java
index 8148bbe8a..ce3209e29 100644
--- a/db/java/src/com/sleepycat/collections/MapEntryParameter.java
+++ b/db/java/src/com/sleepycat/collections/MapEntryParameter.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MapEntryParameter.java,v 1.1 2004/04/09 16:34:08 mark Exp $
+ * $Id: MapEntryParameter.java,v 12.3 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
diff --git a/db/java/src/com/sleepycat/collections/MyRangeCursor.java b/db/java/src/com/sleepycat/collections/MyRangeCursor.java
new file mode 100644
index 000000000..26363da57
--- /dev/null
+++ b/db/java/src/com/sleepycat/collections/MyRangeCursor.java
@@ -0,0 +1,74 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MyRangeCursor.java,v 12.2 2006/08/31 18:14:08 bostic Exp $
+ */
+
+package com.sleepycat.collections;
+
+import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.CursorConfig;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.util.keyrange.KeyRange;
+import com.sleepycat.util.keyrange.RangeCursor;
+
+class MyRangeCursor extends RangeCursor {
+
+ private DataView view;
+ private boolean isRecnoOrQueue;
+ private boolean writeCursor;
+
+ MyRangeCursor(KeyRange range,
+ CursorConfig config,
+ DataView view,
+ boolean writeAllowed)
+ throws DatabaseException {
+
+ super(range, view.dupsRange, openCursor(view, config, writeAllowed));
+ this.view = view;
+ isRecnoOrQueue = view.recNumAllowed && !view.btreeRecNumDb;
+ writeCursor = isWriteCursor(config, writeAllowed);
+ }
+
+ /**
+ * Returns true if a write cursor is requested by the user via the cursor
+ * config, or if this is a writable cursor and the user has not specified a
+ * cursor config. For CDB, a special cursor must be created for writing.
+ * See CurrentTransaction.openCursor.
+ */
+ private static boolean isWriteCursor(CursorConfig config,
+ boolean writeAllowed) {
+ return DbCompat.getWriteCursor(config) ||
+ (config == CursorConfig.DEFAULT && writeAllowed);
+ }
+
+ private static Cursor openCursor(DataView view,
+ CursorConfig config,
+ boolean writeAllowed)
+ throws DatabaseException {
+
+ return view.currentTxn.openCursor
+ (view.db, config, isWriteCursor(config, writeAllowed),
+ view.useTransaction());
+ }
+
+ protected Cursor dupCursor(Cursor cursor, boolean samePosition)
+ throws DatabaseException {
+
+ return view.currentTxn.dupCursor(cursor, writeCursor, samePosition);
+ }
+
+ protected void closeCursor(Cursor cursor)
+ throws DatabaseException {
+
+ view.currentTxn.closeCursor(cursor);
+ }
+
+ protected boolean checkRecordNumber() {
+ return isRecnoOrQueue;
+ }
+}
diff --git a/db/java/src/com/sleepycat/collections/PrimaryKeyAssigner.java b/db/java/src/com/sleepycat/collections/PrimaryKeyAssigner.java
index 1af3ba1ae..38aff9c5c 100644
--- a/db/java/src/com/sleepycat/collections/PrimaryKeyAssigner.java
+++ b/db/java/src/com/sleepycat/collections/PrimaryKeyAssigner.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: PrimaryKeyAssigner.java,v 1.2 2004/06/04 18:24:50 mark Exp $
+ * $Id: PrimaryKeyAssigner.java,v 12.3 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
diff --git a/db/java/src/com/sleepycat/collections/StoredCollection.java b/db/java/src/com/sleepycat/collections/StoredCollection.java
index 90f1a2f11..222b9a748 100644
--- a/db/java/src/com/sleepycat/collections/StoredCollection.java
+++ b/db/java/src/com/sleepycat/collections/StoredCollection.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredCollection.java,v 1.4 2004/08/02 18:52:05 mjc Exp $
+ * $Id: StoredCollection.java,v 12.6 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
@@ -15,6 +15,8 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import com.sleepycat.db.CursorConfig;
+import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.JoinConfig;
import com.sleepycat.db.OperationStatus;
@@ -26,22 +28,14 @@ import com.sleepycat.db.OperationStatus;
* and {@link #remove}, are provided by concrete classes that extend this
* class.
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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 #getIteratorBlockSize}</li>
+ * <li>{@link #setIteratorBlockSize}</li>
+ * <li>{@link #storedIterator()}</li>
+ * <li>{@link #storedIterator(boolean)}</li>
* <li>{@link #join}</li>
* <li>{@link #toList()}</li>
* </ul>
@@ -51,11 +45,46 @@ import com.sleepycat.db.OperationStatus;
public abstract class StoredCollection extends StoredContainer
implements Collection {
+ /**
+ * The default number of records read at one time by iterators.
+ * @see #setIteratorBlockSize
+ */
+ public static final int DEFAULT_ITERATOR_BLOCK_SIZE = 10;
+
+ private int iteratorBlockSize = DEFAULT_ITERATOR_BLOCK_SIZE;
+
StoredCollection(DataView view) {
super(view);
}
+ /**
+ * Returns the number of records read at one time by iterators returned by
+ * the {@link #iterator} method. By default this value is {@link
+ * #DEFAULT_ITERATOR_BLOCK_SIZE}.
+ */
+ public int getIteratorBlockSize() {
+
+ return iteratorBlockSize;
+ }
+
+ /**
+ * Changes the number of records read at one time by iterators returned by
+ * the {@link #iterator} method. By default this value is {@link
+ * #DEFAULT_ITERATOR_BLOCK_SIZE}.
+ *
+ * @throws IllegalArgumentException if the blockSize is less than two.
+ */
+ public void setIteratorBlockSize(int blockSize) {
+
+ if (blockSize < 2) {
+ throw new IllegalArgumentException
+ ("blockSize is less than two: " + blockSize);
+ }
+
+ iteratorBlockSize = blockSize;
+ }
+
final boolean add(Object key, Object value) {
DataCursor cursor = null;
@@ -73,21 +102,53 @@ public abstract class StoredCollection extends StoredContainer
}
}
+ BlockIterator blockIterator() {
+ return new BlockIterator(this, isWriteAllowed(), iteratorBlockSize);
+ }
+
/**
* 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.
+ * <p>The iterator returned by this method does not keep a database cursor
+ * open and therefore it does not need to be closed. It reads blocks of
+ * records as needed, opening and closing a cursor to read each block of
+ * records. The number of records per block is 10 by default and can be
+ * changed with {@link #setIteratorBlockSize}.</p>
*
- * @throws RuntimeExceptionWrapper if a {@link DatabaseException} is
- * thrown.
+ * <p>Because this iterator does not keep a cursor open, if it is used
+ * without transactions, the iterator does not have <em>cursor
+ * stability</em> characteristics. In other words, the record at the
+ * current iterator position can be changed or deleted by another thread.
+ * To prevent this from happening, call this method within a transaction or
+ * use the {@link #storedIterator()} method instead.</p>
+ *
+ * @return a standard {@link Iterator} for this collection.
*
* @see #isWriteAllowed
*/
public Iterator iterator() {
+ return blockIterator();
+ }
+
+ /**
+ * Returns an iterator over the elements in this collection.
+ * The iterator will be read-only if the collection is read-only.
+ * This method does not exist in the standard {@link Collection} interface.
+ *
+ * <p><strong>Warning:</strong> The iterator returned must be explicitly
+ * closed using {@link StoredIterator#close()} or {@link
+ * StoredIterator#close(java.util.Iterator)} to release the underlying
+ * database cursor resources.</p>
+ *
+ * @return a {@link StoredIterator} for this collection.
+ *
+ * @see #isWriteAllowed
+ */
+ public StoredIterator storedIterator() {
- return iterator(isWriteAllowed());
+ return storedIterator(isWriteAllowed());
}
/**
@@ -95,6 +156,11 @@ public abstract class StoredCollection extends StoredContainer
* collection.
* This method does not exist in the standard {@link Collection} interface.
*
+ * <p><strong>Warning:</strong> The iterator returned must be explicitly
+ * closed using {@link StoredIterator#close()} or {@link
+ * StoredIterator#close(java.util.Iterator)} to release the underlying
+ * database cursor resources.</p>
+ *
* @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.
@@ -109,7 +175,7 @@ public abstract class StoredCollection extends StoredContainer
*
* @see #isWriteAllowed
*/
- public StoredIterator iterator(boolean writeAllowed) {
+ public StoredIterator storedIterator(boolean writeAllowed) {
try {
return new StoredIterator(this, writeAllowed && isWriteAllowed(),
@@ -120,6 +186,17 @@ public abstract class StoredCollection extends StoredContainer
}
/**
+ * @deprecated Please use {@link #storedIterator()} or {@link
+ * #storedIterator(boolean)} instead. Because the iterator returned must
+ * be closed, the method name {@code iterator} is confusing since standard
+ * Java iterators do not need to be closed.
+ */
+ public StoredIterator iterator(boolean writeAllowed) {
+
+ return storedIterator(writeAllowed);
+ }
+
+ /**
* Returns an array of all the elements in this collection.
* This method conforms to the {@link Collection#toArray()} interface.
*
@@ -129,13 +206,13 @@ public abstract class StoredCollection extends StoredContainer
public Object[] toArray() {
ArrayList list = new ArrayList();
- Iterator i = iterator();
+ StoredIterator i = storedIterator();
try {
while (i.hasNext()) {
list.add(i.next());
}
} finally {
- StoredIterator.close(i);
+ i.close();
}
return list.toArray();
}
@@ -152,7 +229,7 @@ public abstract class StoredCollection extends StoredContainer
public Object[] toArray(Object[] a) {
int j = 0;
- Iterator i = iterator();
+ StoredIterator i = storedIterator();
try {
while (j < a.length && i.hasNext()) {
a[j++] = i.next();
@@ -167,7 +244,7 @@ public abstract class StoredCollection extends StoredContainer
a = list.toArray(a);
}
} finally {
- StoredIterator.close(i);
+ i.close();
}
return a;
}
@@ -181,7 +258,7 @@ public abstract class StoredCollection extends StoredContainer
* thrown.
*/
public boolean containsAll(Collection coll) {
- Iterator i = coll.iterator();
+ Iterator i = storedOrExternalIterator(coll);
try {
while (i.hasNext()) {
if (!contains(i.next())) {
@@ -212,7 +289,7 @@ public abstract class StoredCollection extends StoredContainer
Iterator i = null;
boolean doAutoCommit = beginAutoCommit();
try {
- i = coll.iterator();
+ i = storedOrExternalIterator(coll);
boolean changed = false;
while (i.hasNext()) {
if (add(i.next())) {
@@ -259,22 +336,24 @@ public abstract class StoredCollection extends StoredContainer
}
private boolean removeAll(Collection coll, boolean ifExistsInColl) {
- Iterator i = null;
+ StoredIterator i = null;
boolean doAutoCommit = beginAutoCommit();
try {
boolean changed = false;
- i = iterator();
+ i = storedIterator();
while (i.hasNext()) {
if (ifExistsInColl == coll.contains(i.next())) {
i.remove();
changed = true;
}
}
- StoredIterator.close(i);
+ i.close();
commitAutoCommit(doAutoCommit);
return changed;
} catch (Exception e) {
- StoredIterator.close(i);
+ if (i != null) {
+ i.close();
+ }
throw handleException(e, doAutoCommit);
}
}
@@ -292,7 +371,7 @@ public abstract class StoredCollection extends StoredContainer
if (other instanceof Collection) {
Collection otherColl = StoredCollection.copyCollection(other);
- Iterator i = iterator();
+ StoredIterator i = storedIterator();
try {
while (i.hasNext()) {
if (!otherColl.remove(i.next())) {
@@ -301,7 +380,7 @@ public abstract class StoredCollection extends StoredContainer
}
return otherColl.isEmpty();
} finally {
- StoredIterator.close(i);
+ i.close();
}
} else {
return false;
@@ -329,19 +408,18 @@ public abstract class StoredCollection extends StoredContainer
public List toList() {
ArrayList list = new ArrayList();
- Iterator i = iterator();
+ StoredIterator i = storedIterator();
try {
while (i.hasNext()) list.add(i.next());
return list;
} finally {
- StoredIterator.close(i);
+ i.close();
}
}
/**
* 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.
+ * WARNING: The returned string may be very large.
*
* @return the string representation.
*
@@ -351,7 +429,7 @@ public abstract class StoredCollection extends StoredContainer
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("[");
- Iterator i = iterator();
+ StoredIterator i = storedIterator();
try {
while (i.hasNext()) {
if (buf.length() > 1) buf.append(',');
@@ -360,15 +438,47 @@ public abstract class StoredCollection extends StoredContainer
buf.append(']');
return buf.toString();
} finally {
- StoredIterator.close(i);
+ i.close();
}
}
+ // Inherit javadoc
+ public int size() {
+
+ int count = 0;
+ boolean countDups = iterateDuplicates();
+ CursorConfig cursorConfig = view.currentTxn.isLockingMode() ?
+ CursorConfig.READ_UNCOMMITTED : null;
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false, cursorConfig);
+ OperationStatus status = cursor.getFirst(false);
+ while (status == OperationStatus.SUCCESS) {
+ if (countDups) {
+ count += cursor.count();
+ } else {
+ count += 1;
+ }
+ status = cursor.getNextNoDup(false);
+ }
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ return count;
+ }
+
/**
* Returns an iterator representing an equality join of the indices and
* index key values specified.
* This method does not exist in the standard {@link Collection} interface.
*
+ * <p><strong>Warning:</strong> The iterator returned must be explicitly
+ * closed using {@link StoredIterator#close()} or {@link
+ * StoredIterator#close(java.util.Iterator)} to release the underlying
+ * database cursor resources.</p>
+ *
* <p>The returned iterator supports only the two methods: hasNext() and
* next(). All other methods will throw UnsupportedOperationException.</p>
*
@@ -425,9 +535,18 @@ public abstract class StoredCollection extends StoredContainer
}
}
- abstract Object makeIteratorData(StoredIterator iterator,
- DataCursor cursor)
- throws DatabaseException;
+ Object makeIteratorData(BaseIterator iterator, DataCursor cursor) {
+
+ return makeIteratorData(iterator,
+ cursor.getKeyThang(),
+ cursor.getPrimaryKeyThang(),
+ cursor.getValueThang());
+ }
+
+ abstract Object makeIteratorData(BaseIterator iterator,
+ DatabaseEntry keyEntry,
+ DatabaseEntry priKeyEntry,
+ DatabaseEntry valueEntry);
abstract boolean hasValues();
diff --git a/db/java/src/com/sleepycat/collections/StoredCollections.java b/db/java/src/com/sleepycat/collections/StoredCollections.java
index c9a4ab9fc..29233287a 100644
--- a/db/java/src/com/sleepycat/collections/StoredCollections.java
+++ b/db/java/src/com/sleepycat/collections/StoredCollections.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredCollections.java,v 1.1 2004/04/09 16:34:09 mark Exp $
+ * $Id: StoredCollections.java,v 12.4 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -17,140 +17,244 @@ import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
+import com.sleepycat.db.CursorConfig;
+
/**
- * 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.
+ * Static methods operating on collections and maps.
+ *
+ * <p>This class consists exclusively of static methods that operate on or
+ * return stored collections and maps, jointly called containers. It contains
+ * methods for changing certain properties of a container. Because container
+ * properties are immutable, these methods always return a new container
+ * instance. This allows stored container instances to be used safely by
+ * multiple threads. Creating the new container instance is not expensive and
+ * creates only two new objects.</p>
*
- * <p>When a collection is created with a particular property, all collections
- * and iterators derived 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>When a container is created with a particular property, all containers
+ * and iterators derived from that container will inherit the property. For
+ * example, if a read-uncommitted Map is created then calls to its subMap(),
+ * values(), entrySet(), and keySet() methods will create read-uncommitted
+ * containers 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#isDirtyRead} will
- * return true. Dirty-read is disabled by default for a container.</p>
+ * <p>Method names beginning with "configured" create a new container with a
+ * specified {@link CursorConfig} from a given stored container. This allows
+ * configuring a container for read-committed isolation, read-uncommitted
+ * isolation, or any other property supported by <code>CursorConfig</code>.
+ * All operations performed with the resulting container will be performed with
+ * the specified cursor configuration.</p>
*/
public class StoredCollections {
private StoredCollections() {}
/**
- * Creates a dirty-read collection from a given stored collection.
+ * Creates a configured collection from a given stored collection.
*
* @param storedCollection the base collection.
*
- * @return the dirty-read collection.
+ * @param config is the cursor configuration to be used for all operations
+ * performed via the new collection instance; null may be specified to use
+ * the default configuration.
+ *
+ * @return the configured collection.
*
* @throws ClassCastException if the given container is not a
* StoredContainer.
*/
- public static Collection dirtyReadCollection(Collection storedCollection) {
+ public static Collection configuredCollection(Collection storedCollection,
+ CursorConfig config) {
return (Collection)
- ((StoredContainer) storedCollection).dirtyReadClone();
+ ((StoredContainer) storedCollection).configuredClone(config);
}
/**
- * Creates a dirty-read list from a given stored list.
+ * Creates a configured list from a given stored list.
+ *
+ * <p>Note that this method may not be called in the JE product, since the
+ * StoredList class is not supported.</p>
*
* @param storedList the base list.
*
- * @return the dirty-read list.
+ * @param config is the cursor configuration to be used for all operations
+ * performed via the new list instance; null may be specified to use the
+ * default configuration.
+ *
+ * @return the configured list.
*
* @throws ClassCastException if the given container is not a
* StoredContainer.
*/
- public static List dirtyReadList(List storedList) {
+ public static List configuredList(List storedList, CursorConfig config) {
- return (List) ((StoredContainer) storedList).dirtyReadClone();
+ return (List) ((StoredContainer) storedList).configuredClone(config);
}
/**
- * Creates a dirty-read map from a given stored map.
+ * Creates a configured map from a given stored map.
*
* @param storedMap the base map.
*
- * @return the dirty-read map.
+ * @param config is the cursor configuration to be used for all operations
+ * performed via the new map instance; null may be specified to use the
+ * default configuration.
+ *
+ * @return the configured map.
*
* @throws ClassCastException if the given container is not a
* StoredContainer.
*/
- public static Map dirtyReadMap(Map storedMap) {
+ public static Map configuredMap(Map storedMap, CursorConfig config) {
- return (Map) ((StoredContainer) storedMap).dirtyReadClone();
+ return (Map) ((StoredContainer) storedMap).configuredClone(config);
}
/**
- * Creates a dirty-read set from a given stored set.
+ * Creates a configured set from a given stored set.
*
* @param storedSet the base set.
*
- * @return the dirty-read set.
+ * @param config is the cursor configuration to be used for all operations
+ * performed via the new set instance; null may be specified to use the
+ * default configuration.
+ *
+ * @return the configured set.
*
* @throws ClassCastException if the given container is not a
* StoredContainer.
*/
- public static Set dirtyReadSet(Set storedSet) {
+ public static Set configuredSet(Set storedSet, CursorConfig config) {
- return (Set) ((StoredContainer) storedSet).dirtyReadClone();
+ return (Set) ((StoredContainer) storedSet).configuredClone(config);
}
/**
- * Creates a dirty-read sorted map from a given stored sorted map.
+ * Creates a configured sorted map from a given stored sorted map.
*
* @param storedSortedMap the base map.
*
- * @return the dirty-read map.
+ * @param config is the cursor configuration to be used for all operations
+ * performed via the new map instance; null may be specified to use the
+ * default configuration.
+ *
+ * @return the configured map.
*
* @throws ClassCastException if the given container is not a
* StoredContainer.
*/
- public static SortedMap dirtyReadSortedMap(SortedMap storedSortedMap) {
+ public static SortedMap configuredSortedMap(SortedMap storedSortedMap,
+ CursorConfig config) {
return (SortedMap)
- ((StoredContainer) storedSortedMap).dirtyReadClone();
+ ((StoredContainer) storedSortedMap).configuredClone(config);
}
/**
- * Creates a dirty-read sorted set from a given stored sorted set.
+ * Creates a configured sorted set from a given stored sorted set.
*
* @param storedSortedSet the base set.
*
- * @return the dirty-read set.
+ * @param config is the cursor configuration to be used for all operations
+ * performed via the new set instance; null may be specified to use the
+ * default configuration.
+ *
+ * @return the configured set.
*
* @throws ClassCastException if the given container is not a
* StoredContainer.
*/
- public static SortedSet dirtyReadSortedSet(SortedSet storedSortedSet) {
+ public static SortedSet configuredSortedSet(SortedSet storedSortedSet,
+ CursorConfig config) {
return (SortedSet)
- ((StoredContainer) storedSortedSet).dirtyReadClone();
+ ((StoredContainer) storedSortedSet).configuredClone(config);
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link
+ * #configuredCollection} in order to conform to ANSI database isolation
+ * terminology. To obtain a dirty-read collection, pass
+ * <code>CursorConfig.READ_UNCOMMITTED</code>
+ */
+ public static Collection dirtyReadCollection(Collection storedCollection) {
+
+ /* We can't use READ_UNCOMMITTED until is is added to DB core. */
+ return configuredCollection
+ (storedCollection, CursorConfig.DIRTY_READ);
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link #configuredList} in
+ * order to conform to ANSI database isolation terminology. To obtain a
+ * dirty-read list, pass <code>CursorConfig.READ_UNCOMMITTED</code>
+ */
+ public static List dirtyReadList(List storedList) {
+
+ /* We can't use READ_UNCOMMITTED until is is added to DB core. */
+ return configuredList(storedList, CursorConfig.DIRTY_READ);
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link #configuredMap} in
+ * order to conform to ANSI database isolation terminology. To obtain a
+ * dirty-read map, pass <code>CursorConfig.READ_UNCOMMITTED</code>
+ */
+ public static Map dirtyReadMap(Map storedMap) {
+
+ /* We can't use READ_UNCOMMITTED until is is added to DB core. */
+ return configuredMap(storedMap, CursorConfig.DIRTY_READ);
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link #configuredSet} in
+ * order to conform to ANSI database isolation terminology. To obtain a
+ * dirty-read set, pass <code>CursorConfig.READ_UNCOMMITTED</code>
+ */
+ public static Set dirtyReadSet(Set storedSet) {
+
+ /* We can't use READ_UNCOMMITTED until is is added to DB core. */
+ return configuredSet(storedSet, CursorConfig.DIRTY_READ);
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link
+ * #configuredSortedMap} in order to conform to ANSI database isolation
+ * terminology. To obtain a dirty-read map, pass
+ * <code>CursorConfig.READ_UNCOMMITTED</code>
+ */
+ public static SortedMap dirtyReadSortedMap(SortedMap storedSortedMap) {
+
+ /* We can't use READ_UNCOMMITTED until is is added to DB core. */
+ return configuredSortedMap
+ (storedSortedMap, CursorConfig.DIRTY_READ);
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link
+ * #configuredSortedSet} in order to conform to ANSI database isolation
+ * terminology. To obtain a dirty-read set, pass
+ * <code>CursorConfig.READ_UNCOMMITTED</code>
+ */
+ public static SortedSet dirtyReadSortedSet(SortedSet storedSortedSet) {
+
+ /* We can't use READ_UNCOMMITTED until is is added to DB core. */
+ return configuredSortedSet
+ (storedSortedSet, CursorConfig.DIRTY_READ);
}
/**
- * Clones a stored iterator preserving its current position.
+ * Clones an iterator preserving its current position.
*
- * @param storedIterator an iterator to clone.
+ * @param iter an iterator to clone.
*
- * @return a new {@link StoredIterator} having the same position as the
- * given iterator.
+ * @return a new {@code Iterator} having the same position as the given
+ * iterator.
*
- * @throws ClassCastException if the given iterator is not a
- * StoredIterator.
+ * @throws ClassCastException if the given iterator was not obtained via a
+ * {@link StoredCollection} method.
*/
- public static Iterator iterator(Iterator storedIterator) {
+ public static Iterator iterator(Iterator iter) {
- return (Iterator) ((StoredIterator) storedIterator).clone();
+ return ((BaseIterator) iter).dup();
}
}
diff --git a/db/java/src/com/sleepycat/collections/StoredContainer.java b/db/java/src/com/sleepycat/collections/StoredContainer.java
index f503a5dc8..e2f4e7e1e 100644
--- a/db/java/src/com/sleepycat/collections/StoredContainer.java
+++ b/db/java/src/com/sleepycat/collections/StoredContainer.java
@@ -1,14 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredContainer.java,v 1.2 2004/06/02 20:59:38 mark Exp $
+ * $Id: StoredContainer.java,v 12.6 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.CursorConfig;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
import com.sleepycat.util.RuntimeExceptionWrapper;
@@ -19,17 +24,6 @@ import com.sleepycat.util.RuntimeExceptionWrapper;
* java.util.Collection} and the {@link java.util.Map} interfaces, namely
* {@link #clear}, {@link #isEmpty} and {@link #size}.
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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>
@@ -40,8 +34,7 @@ import com.sleepycat.util.RuntimeExceptionWrapper;
* <li>{@link #areDuplicatesAllowed()}</li>
* <li>{@link #areDuplicatesOrdered()}</li>
* <li>{@link #areKeysRenumbered()}</li>
- * <li>{@link #isDirtyReadAllowed()}</li>
- * <li>{@link #isDirtyRead()}</li>
+ * <li>{@link #getCursorConfig()}</li>
* <li>{@link #isTransactional()}</li>
* </ul>
*
@@ -70,37 +63,50 @@ public abstract class StoredContainer implements Cloneable {
}
/**
- * Returns whether dirty-read is allowed for this container.
- * For the JE product, dirty-read is always allowed; for the DB product,
- * dirty-read is allowed if it was configured for the underlying database
- * for this container.
- * Even when dirty-read is allowed it must specifically be enabled by
- * calling one of the {@link StoredCollections} methods.
+ * Returns the cursor configuration that is used for all operations
+ * performed via this container.
+ * For example, if <code>CursorConfig.getReadUncommitted</code> returns
+ * true, data will be read that is modified but not committed.
* This method does not exist in the standard {@link java.util.Map} or
* {@link java.util.Collection} interfaces.
*
- * @return whether dirty-read is allowed.
+ * @return the cursor configuration, or null if no configuration has been
+ * specified.
*/
- public final boolean isDirtyReadAllowed() {
+ public final CursorConfig getCursorConfig() {
- return view.dirtyReadAllowed;
+ return DbCompat.cloneCursorConfig(view.cursorConfig);
}
/**
- * 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.
+ * Returns whether read-uncommitted is allowed for this container.
+ * For the JE product, read-uncommitted is always allowed; for the DB
+ * product, read-uncommitted is allowed if it was configured for the
+ * underlying database for this container.
+ * Even when read-uncommitted is allowed it must specifically be enabled by
+ * calling one of the {@link StoredCollections} methods.
* This method does not exist in the standard {@link java.util.Map} or
* {@link java.util.Collection} interfaces.
*
- * @return whether dirty-read is enabled.
+ * @return whether read-uncommitted is allowed.
+ *
+ * @deprecated This method is deprecated with no replacement in this class.
+ * In the DB product, <code>DatabaseConfig.getReadUncommitted</code> may be
+ * called.
+ */
+ public final boolean isDirtyReadAllowed() {
+
+ return view.readUncommittedAllowed;
+ }
+
+ /**
+ * @deprecated This method has been replaced by {@link #getCursorConfig}.
+ * <code>CursorConfig.isReadUncommitted</code> may be called to determine
+ * whether dirty-read is enabled.
*/
public final boolean isDirtyRead() {
- return view.dirtyReadEnabled;
+ return view.cursorConfig.getReadUncommitted();
}
/**
@@ -120,25 +126,32 @@ public abstract class StoredContainer implements Cloneable {
}
/**
- * Clones and enables dirty-read in the clone.
+ * Clones a container with a specified cursor configuration.
*/
- final StoredContainer dirtyReadClone() {
+ final StoredContainer configuredClone(CursorConfig config) {
- if (!isDirtyReadAllowed())
- return this;
try {
StoredContainer cont = (StoredContainer) clone();
- cont.view = cont.view.dirtyReadView(true);
+ cont.view = cont.view.configuredView(config);
+ cont.initAfterClone();
return cont;
} catch (CloneNotSupportedException willNeverOccur) { return null; }
}
/**
+ * Override this method to initialize view-dependent fields.
+ */
+ void initAfterClone() {
+ }
+
+ /**
* 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 java.util.Map} or
* {@link java.util.Collection} interfaces.
*
+ * <p>Note that the JE product only supports BTREE databases.</p>
+ *
* @return whether duplicates are allowed.
*/
public final boolean areDuplicatesAllowed() {
@@ -152,6 +165,9 @@ public abstract class StoredContainer implements Cloneable {
* This method does not exist in the standard {@link java.util.Map} or
* {@link java.util.Collection} interfaces.
*
+ * <p>Note that the JE product only supports BTREE databases, and
+ * duplicates are always sorted.</p>
+ *
* @return whether duplicates are ordered.
*/
public final boolean areDuplicatesOrdered() {
@@ -165,6 +181,9 @@ public abstract class StoredContainer implements Cloneable {
* This method does not exist in the standard {@link java.util.Map} or
* {@link java.util.Collection} interfaces.
*
+ * <p>Note that the JE product does not support RECNO databases, and
+ * therefore keys are never renumbered.</p>
+ *
* @return whether keys are renumbered.
*/
public final boolean areKeysRenumbered() {
@@ -178,6 +197,9 @@ public abstract class StoredContainer implements Cloneable {
* This method does not exist in the standard {@link java.util.Map} or
* {@link java.util.Collection} interfaces.
*
+ * <p>Note that the JE product only support BTREE databases, and
+ * therefore keys are always ordered.</p>
+ *
* @return whether keys are ordered.
*/
public final boolean isOrdered() {
@@ -199,20 +221,21 @@ public abstract class StoredContainer implements Cloneable {
}
/**
- * Always throws UnsupportedOperationException. The size of a database
- * cannot be obtained reliably or inexpensively.
- * This method therefore violates the {@link java.util.Collection#size} and
- * {@link java.util.Map#size} interfaces.
+ * Returns the number of records in the collection or map.
+ * This method conforms to the {@link java.util.Collection#size} and {@link
+ * java.util.Map#size} interfaces.
+ *
+ * <p>Note that if other threads are adding or removing records while this
+ * method is executing, the size returned may be incorrect. This method
+ * does not lock the database.</p>
*
- * @return always throws an exception.
+ * <p>Also note that, for a large database, this method may be expensive.
+ * All non-duplicate records in the database are enumerated by this method,
+ * bringing them into memory if they are not already cached.</p>
*
- * @throws UnsupportedOperationException unconditionally.
+ * @throws RuntimeExceptionWrapper if a {@link DatabaseException} is thrown.
*/
- public int size() {
-
- throw new UnsupportedOperationException(
- "collection size not available");
- }
+ public abstract int size();
/**
* Returns true if this map or collection contains no mappings or elements.
@@ -302,7 +325,8 @@ public abstract class StoredContainer implements Cloneable {
if (oldVal != null && oldVal[0] == null) {
oldVal[0] = cursor.getCurrentValue();
}
- status = cursor.getNextDup(true);
+ status = areDuplicatesAllowed() ?
+ cursor.getNextDup(true): OperationStatus.NOTFOUND;
}
closeCursor(cursor);
commitAutoCommit(doAutoCommit);
@@ -333,7 +357,7 @@ public abstract class StoredContainer implements Cloneable {
boolean doAutoCommit = beginAutoCommit();
try {
cursor = new DataCursor(view, true);
- OperationStatus status = cursor.find(value, true);
+ OperationStatus status = cursor.findValue(value, true);
if (status == OperationStatus.SUCCESS) {
cursor.delete();
}
@@ -351,7 +375,7 @@ public abstract class StoredContainer implements Cloneable {
DataCursor cursor = null;
try {
cursor = new DataCursor(view, false);
- OperationStatus status = cursor.find(value, true);
+ OperationStatus status = cursor.findValue(value, true);
return (status == OperationStatus.SUCCESS);
} catch (Exception e) {
throw StoredContainer.convertException(e);
@@ -360,6 +384,20 @@ public abstract class StoredContainer implements Cloneable {
}
}
+ /**
+ * Returns a StoredIterator if the given collection is a StoredCollection,
+ * else returns a regular/external Iterator. The iterator returned should
+ * be closed with the static method StoredIterator.close(Iterator).
+ */
+ final Iterator storedOrExternalIterator(Collection coll) {
+
+ if (coll instanceof StoredCollection) {
+ return ((StoredCollection) coll).storedIterator();
+ } else {
+ return coll.iterator();
+ }
+ }
+
final void closeCursor(DataCursor cursor) {
if (cursor != null) {
@@ -374,9 +412,9 @@ public abstract class StoredContainer implements Cloneable {
final boolean beginAutoCommit() {
if (view.transactional) {
+ CurrentTransaction currentTxn = view.getCurrentTxn();
try {
- CurrentTransaction currentTxn = view.getCurrentTxn();
- if (currentTxn.getTransaction() == null) {
+ if (currentTxn.isAutoCommitAllowed()) {
currentTxn.beginTransaction(null);
return true;
}
@@ -399,6 +437,7 @@ public abstract class StoredContainer implements Cloneable {
try {
view.getCurrentTxn().abortTransaction();
} catch (DatabaseException ignored) {
+ /* Klockwork - ok */
}
}
return StoredContainer.convertException(e);
diff --git a/db/java/src/com/sleepycat/collections/StoredEntrySet.java b/db/java/src/com/sleepycat/collections/StoredEntrySet.java
index fbc5f85d2..0389aa72a 100644
--- a/db/java/src/com/sleepycat/collections/StoredEntrySet.java
+++ b/db/java/src/com/sleepycat/collections/StoredEntrySet.java
@@ -1,20 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredEntrySet.java,v 1.3 2004/06/04 18:24:50 mark Exp $
+ * $Id: StoredEntrySet.java,v 12.4 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
-import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
+import com.sleepycat.util.RuntimeExceptionWrapper;
/**
* The Set returned by Map.entrySet(). This class may not be instantiated
@@ -25,17 +26,6 @@ import com.sleepycat.db.OperationStatus;
* that are returned by this class and its iterators behaves just as the {@link
* StoredIterator#set} method does.</p>
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* @author Mark Hayes
*/
public class StoredEntrySet extends StoredCollection implements Set {
@@ -94,7 +84,7 @@ public class StoredEntrySet extends StoredCollection implements Set {
try {
cursor = new DataCursor(view, true);
OperationStatus status =
- cursor.getSearchBoth(entry.getKey(), entry.getValue(), true);
+ cursor.findBoth(entry.getKey(), entry.getValue(), true);
if (status == OperationStatus.SUCCESS) {
cursor.delete();
}
@@ -129,7 +119,7 @@ public class StoredEntrySet extends StoredCollection implements Set {
try {
cursor = new DataCursor(view, false);
OperationStatus status =
- cursor.getSearchBoth(entry.getKey(), entry.getValue(), false);
+ cursor.findBoth(entry.getKey(), entry.getValue(), false);
return (status == OperationStatus.SUCCESS);
} catch (Exception e) {
throw StoredContainer.convertException(e);
@@ -142,7 +132,7 @@ public class StoredEntrySet extends StoredCollection implements Set {
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("[");
- Iterator i = iterator();
+ StoredIterator i = storedIterator();
try {
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
@@ -157,15 +147,17 @@ public class StoredEntrySet extends StoredCollection implements Set {
return buf.toString();
}
finally {
- StoredIterator.close(i);
+ i.close();
}
}
- Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
- throws DatabaseException {
+ Object makeIteratorData(BaseIterator iterator,
+ DatabaseEntry keyEntry,
+ DatabaseEntry priKeyEntry,
+ DatabaseEntry valueEntry) {
- return new StoredMapEntry(cursor.getCurrentKey(),
- cursor.getCurrentValue(),
+ return new StoredMapEntry(view.makeKey(keyEntry, priKeyEntry),
+ view.makeValue(priKeyEntry, valueEntry),
this, iterator);
}
diff --git a/db/java/src/com/sleepycat/collections/StoredIterator.java b/db/java/src/com/sleepycat/collections/StoredIterator.java
index cfc7c67a4..228d19efe 100644
--- a/db/java/src/com/sleepycat/collections/StoredIterator.java
+++ b/db/java/src/com/sleepycat/collections/StoredIterator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredIterator.java,v 1.5 2004/09/22 18:01:03 bostic Exp $
+ * $Id: StoredIterator.java,v 12.5 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
@@ -15,6 +15,7 @@ import java.util.NoSuchElementException;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
+import com.sleepycat.util.RuntimeExceptionWrapper;
/**
* The Iterator returned by all stored collections.
@@ -41,6 +42,7 @@ import com.sleepycat.db.OperationStatus;
* <ul>
* <li>{@link #close()}</li>
* <li>{@link #close(Iterator)}</li>
+ * <li>{@link #count()}</li>
* <li>{@link #getCollection}</li>
* <li>{@link #setReadModifyWrite}</li>
* <li>{@link #isReadModifyWrite}</li>
@@ -48,7 +50,7 @@ import com.sleepycat.db.OperationStatus;
*
* @author Mark Hayes
*/
-public class StoredIterator implements ListIterator, Cloneable {
+public class StoredIterator implements BaseIterator, Cloneable {
/**
* Closes the given iterator using {@link #close()} if it is a {@link
@@ -79,7 +81,6 @@ public class StoredIterator implements ListIterator, Cloneable {
private boolean writeAllowed;
private boolean setAndRemoveAllowed;
private Object currentData;
- private final boolean recNumAccess;
StoredIterator(StoredCollection coll, boolean writeAllowed,
DataCursor joinCursor) {
@@ -90,30 +91,14 @@ public class StoredIterator implements ListIterator, Cloneable {
this.cursor = new DataCursor(coll.view, writeAllowed);
else
this.cursor = joinCursor;
- this.recNumAccess = cursor.hasRecNumAccess();
reset();
} catch (Exception e) {
try {
/* Ensure that the cursor is closed. [#10516] */
close();
- } catch (Exception ignored) {}
- 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 = cursor.cloneCursor();
- return o;
- } catch (Exception e) {
+ } catch (Exception ignored) {
+ /* Klockwork - ok */
+ }
throw StoredContainer.convertException(e);
}
}
@@ -170,8 +155,7 @@ public class StoredIterator implements ListIterator, Cloneable {
}
}
return (toNext == 0);
- }
- catch (Exception e) {
+ } catch (Exception e) {
throw StoredContainer.convertException(e);
}
}
@@ -290,7 +274,7 @@ public class StoredIterator implements ListIterator, Cloneable {
*/
public int nextIndex() {
- if (!recNumAccess) {
+ if (!coll.view.recNumAccess) {
throw new UnsupportedOperationException(
"Record number access not supported");
}
@@ -319,14 +303,14 @@ public class StoredIterator implements ListIterator, Cloneable {
*/
public int previousIndex() {
- if (!recNumAccess) {
+ if (!coll.view.recNumAccess) {
throw new UnsupportedOperationException(
"Record number access not supported");
}
try {
return hasPrevious() ? (cursor.getCurrentRecordNumber() -
coll.getIndexOffset())
- : -1;
+ : (-1);
} catch (Exception e) {
throw StoredContainer.convertException(e);
}
@@ -370,6 +354,10 @@ public class StoredIterator implements ListIterator, Cloneable {
* that when the collection is a list and the RECNO-RENUMBER access method
* is not used, list indices will not be renumbered.
*
+ * <p>Note that for the JE product, RECNO-RENUMBER databases are not
+ * supported, and therefore list indices are never renumbered by this
+ * method.</p>
+ *
* @throws UnsupportedOperationException if the collection is a sublist, or
* if the collection is read-only.
*
@@ -398,6 +386,10 @@ public class StoredIterator implements ListIterator, Cloneable {
* manner as list elements.
* If duplicates are sorted, the new value will be inserted in sort order.
*
+ * <p>Note that for the JE product, RECNO-RENUMBER databases are not
+ * supported, and therefore this method may only be used to add
+ * duplicates.</p>
+ *
* @param value the new value.
*
* @throws UnsupportedOperationException if the collection is a sublist, or
@@ -497,6 +489,8 @@ public class StoredIterator implements ListIterator, Cloneable {
* 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.
+ * This method does not exist in the standard {@link Iterator} or {@link
+ * ListIterator} interfaces.
*
* @return the number of duplicates.
*
@@ -549,12 +543,25 @@ public class StoredIterator implements ListIterator, Cloneable {
return coll;
}
- final boolean isCurrentData(Object currentData) {
+ // --- begin BaseIterator methods ---
+
+ public final ListIterator dup() {
+
+ try {
+ StoredIterator o = (StoredIterator) super.clone();
+ o.cursor = cursor.cloneCursor();
+ return o;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ public final boolean isCurrentData(Object currentData) {
return (this.currentData == currentData);
}
- final boolean moveToIndex(int index) {
+ public final boolean moveToIndex(int index) {
try {
OperationStatus status =
@@ -566,6 +573,8 @@ public class StoredIterator implements ListIterator, Cloneable {
}
}
+ // --- end BaseIterator methods ---
+
private void moveToCurrent()
throws DatabaseException {
diff --git a/db/java/src/com/sleepycat/collections/StoredKeySet.java b/db/java/src/com/sleepycat/collections/StoredKeySet.java
index 1c86aa003..38d770014 100644
--- a/db/java/src/com/sleepycat/collections/StoredKeySet.java
+++ b/db/java/src/com/sleepycat/collections/StoredKeySet.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredKeySet.java,v 1.3 2004/06/04 18:24:50 mark Exp $
+ * $Id: StoredKeySet.java,v 12.4 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -13,6 +13,7 @@ import java.util.Set;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
@@ -24,17 +25,6 @@ import com.sleepycat.db.OperationStatus;
* particularly useful for enumerating the unique keys of a store or index that
* allows duplicates.
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* @author Mark Hayes
*/
public class StoredKeySet extends StoredCollection implements Set {
@@ -131,10 +121,12 @@ public class StoredKeySet extends StoredCollection implements Set {
return false;
}
- Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
- throws DatabaseException {
+ Object makeIteratorData(BaseIterator iterator,
+ DatabaseEntry keyEntry,
+ DatabaseEntry priKeyEntry,
+ DatabaseEntry valueEntry) {
- return cursor.getCurrentKey();
+ return view.makeKey(keyEntry, priKeyEntry);
}
boolean iterateDuplicates() {
diff --git a/db/java/src/com/sleepycat/collections/StoredList.java b/db/java/src/com/sleepycat/collections/StoredList.java
index a65e5a734..808f0a7f8 100644
--- a/db/java/src/com/sleepycat/collections/StoredList.java
+++ b/db/java/src/com/sleepycat/collections/StoredList.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredList.java,v 1.4 2004/08/02 18:52:05 mjc Exp $
+ * $Id: StoredList.java,v 12.4 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -21,6 +21,7 @@ import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
+import com.sleepycat.util.keyrange.KeyRangeException;
/**
* A List view of a {@link Database}.
@@ -34,17 +35,6 @@ import com.sleepycat.db.OperationStatus;
* read-only collections where record numbers are not required to be
* sequential.</p>
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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>
@@ -293,7 +283,7 @@ public class StoredList extends StoredCollection implements List {
Iterator i = null;
boolean doAutoCommit = beginAutoCommit();
try {
- i = coll.iterator();
+ i = storedOrExternalIterator(coll);
if (!i.hasNext()) {
return false;
}
@@ -377,7 +367,7 @@ public class StoredList extends StoredCollection implements List {
DataCursor cursor = null;
try {
cursor = new DataCursor(view, false);
- OperationStatus status = cursor.find(value, findFirst);
+ OperationStatus status = cursor.findValue(value, findFirst);
return (status == OperationStatus.SUCCESS)
? (cursor.getCurrentRecordNumber() - baseIndex)
: (-1);
@@ -399,7 +389,10 @@ public class StoredList extends StoredCollection implements List {
* 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.
+ * <p>For information on cursor stability and iterator block size, see
+ * {@link #iterator()}.</p>
+ *
+ * @return a {@link ListIterator} for this collection.
*
* @throws RuntimeExceptionWrapper if a {@link DatabaseException} is
* thrown.
@@ -408,7 +401,7 @@ public class StoredList extends StoredCollection implements List {
*/
public ListIterator listIterator() {
- return iterator(isWriteAllowed());
+ return blockIterator();
}
/**
@@ -417,7 +410,10 @@ public class StoredList extends StoredCollection implements 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.
+ * <p>For information on cursor stability and iterator block size, see
+ * {@link #iterator()}.</p>
+ *
+ * @return a {@link ListIterator} for this collection.
*
* @throws RuntimeExceptionWrapper if a {@link DatabaseException} is
* thrown.
@@ -426,11 +422,10 @@ public class StoredList extends StoredCollection implements List {
*/
public ListIterator listIterator(int index) {
- StoredIterator i = iterator(isWriteAllowed());
+ BlockIterator i = blockIterator();
if (i.moveToIndex(index)) {
return i;
} else {
- i.close();
throw new IndexOutOfBoundsException(String.valueOf(index));
}
}
@@ -538,11 +533,11 @@ public class StoredList extends StoredCollection implements List {
if (!(other instanceof List)) return false;
List otherList = (List) other;
- ListIterator i1 = null;
+ StoredIterator i1 = null;
ListIterator i2 = null;
try {
- i1 = listIterator();
- i2 = otherList.listIterator();
+ i1 = storedIterator();
+ i2 = storedOrExternalListIterator(otherList);
while (i1.hasNext()) {
if (!i2.hasNext()) return false;
if (i1.nextIndex() != i2.nextIndex()) return false;
@@ -557,11 +552,25 @@ public class StoredList extends StoredCollection implements List {
if (i2.hasNext()) return false;
return true;
} finally {
- StoredIterator.close(i1);
+ i1.close();
StoredIterator.close(i2);
}
}
+ /**
+ * Returns a StoredIterator if the given collection is a StoredCollection,
+ * else returns a regular/external ListIterator. The iterator returned
+ * should be closed with the static method StoredIterator.close(Iterator).
+ */
+ final ListIterator storedOrExternalListIterator(List list) {
+
+ if (list instanceof StoredCollection) {
+ return ((StoredCollection) list).storedIterator();
+ } else {
+ return list.listIterator();
+ }
+ }
+
/*
* Add this in to keep FindBugs from whining at us about implementing
* equals(), but not hashCode().
@@ -570,10 +579,12 @@ public class StoredList extends StoredCollection implements List {
return super.hashCode();
}
- Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
- throws DatabaseException {
+ Object makeIteratorData(BaseIterator iterator,
+ DatabaseEntry keyEntry,
+ DatabaseEntry priKeyEntry,
+ DatabaseEntry valueEntry) {
- return cursor.getCurrentValue();
+ return view.makeValue(priKeyEntry, valueEntry);
}
boolean hasValues() {
diff --git a/db/java/src/com/sleepycat/collections/StoredMap.java b/db/java/src/com/sleepycat/collections/StoredMap.java
index 1c0e1dcf1..a1a3d9e38 100644
--- a/db/java/src/com/sleepycat/collections/StoredMap.java
+++ b/db/java/src/com/sleepycat/collections/StoredMap.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredMap.java,v 1.4 2004/09/22 18:01:03 bostic Exp $
+ * $Id: StoredMap.java,v 12.7 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
@@ -18,27 +18,18 @@ import java.util.Set;
import com.sleepycat.bind.EntityBinding;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.db.Database;
+import com.sleepycat.util.keyrange.KeyRangeException;
/**
* A Map view of a {@link Database}.
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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>
+ * <li>{@link #duplicates}</li>
+ * <li>{@link #duplicatesMap}</li>
+ * <li>{@link #append}</li>
* </ul>
*
* @author Mark Hayes
@@ -46,11 +37,8 @@ import com.sleepycat.db.Database;
public class StoredMap extends StoredContainer implements Map {
private StoredKeySet keySet;
- private boolean keySetInitialized = false;
private StoredEntrySet entrySet;
- private boolean entrySetInitialized = false;
private StoredValueSet valueSet;
- private boolean valueSetInitialized = false;
/**
* Creates a map view of a {@link Database}.
@@ -77,6 +65,7 @@ public class StoredMap extends StoredContainer implements Map {
super(new DataView(database, keyBinding, valueBinding, null,
writeAllowed, null));
+ initView();
}
/**
@@ -106,21 +95,7 @@ public class StoredMap extends StoredContainer implements Map {
super(new DataView(database, keyBinding, valueBinding, null,
true, keyAssigner));
- }
-
- 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.keySetInitialized = false;
- other.entrySet = null;
- other.entrySetInitialized = false;
- other.valueSet = null;
- other.valueSetInitialized = false;
- return other;
+ initView();
}
/**
@@ -148,6 +123,7 @@ public class StoredMap extends StoredContainer implements Map {
super(new DataView(database, keyBinding, null, valueEntityBinding,
writeAllowed, null));
+ initView();
}
/**
@@ -177,11 +153,54 @@ public class StoredMap extends StoredContainer implements Map {
super(new DataView(database, keyBinding, null, valueEntityBinding,
true, keyAssigner));
+ initView();
}
StoredMap(DataView view) {
super(view);
+ initView();
+ }
+
+ /**
+ * Override this method to initialize view-dependent fields.
+ */
+ void initAfterClone() {
+ initView();
+ }
+
+ /**
+ * The keySet, entrySet and valueSet are created during Map construction
+ * rather than lazily when requested (as done with the java.util.Map
+ * implementations). This is done to avoid synchronization every time they
+ * are requested. Since they are requested often but a StoredMap is
+ * created infrequently, this gives the best performance. The additional
+ * views are small objects and are cheap to construct.
+ */
+ private void initView() {
+
+ /* entrySet */
+ if (isOrdered()) {
+ entrySet = new StoredSortedEntrySet(view);
+ } else {
+ entrySet = new StoredEntrySet(view);
+ }
+
+ /* keySet */
+ DataView newView = view.keySetView();
+ if (isOrdered()) {
+ keySet = new StoredSortedKeySet(newView);
+ } else {
+ keySet = new StoredKeySet(newView);
+ }
+
+ /* valueSet */
+ newView = view.valueSetView();
+ if (isOrdered() && newView.canDeriveKeyFromValue()) {
+ valueSet = new StoredSortedValueSet(newView);
+ } else {
+ valueSet = new StoredValueSet(newView);
+ }
}
/**
@@ -238,6 +257,10 @@ public class StoredMap extends StoredContainer implements Map {
* the key. This method does not exist in the standard {@link Map}
* interface.
*
+ * <p>Note that for the JE product, QUEUE and RECNO databases are not
+ * supported, and therefore a PrimaryKeyAssigner must be associated with
+ * the map in order to call this method.</p>
+ *
* @param value the value to be appended.
*
* @return the assigned key.
@@ -322,17 +345,18 @@ public class StoredMap extends StoredContainer implements Map {
public void putAll(Map map) {
boolean doAutoCommit = beginAutoCommit();
- Iterator entries = null;
+ Iterator i = null;
try {
- entries = map.entrySet().iterator();
- while (entries.hasNext()) {
- Map.Entry entry = (Map.Entry) entries.next();
+ Collection coll = map.entrySet();
+ i = storedOrExternalIterator(coll);
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry) i.next();
put(entry.getKey(), entry.getValue());
}
- StoredIterator.close(entries);
+ StoredIterator.close(i);
commitAutoCommit(doAutoCommit);
} catch (Exception e) {
- StoredIterator.close(entries);
+ StoredIterator.close(i);
throw handleException(e, doAutoCommit);
}
}
@@ -343,6 +367,9 @@ public class StoredMap extends StoredContainer implements Map {
* collection will be read-only if the map is read-only. This method
* conforms to the {@link Map#keySet()} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @return a {@link StoredKeySet} or a {@link StoredSortedKeySet} for this
* map.
*
@@ -354,19 +381,6 @@ public class StoredMap extends StoredContainer implements Map {
*/
public Set keySet() {
- if (!keySetInitialized) {
- synchronized (this) {
- if (!keySetInitialized) {
- DataView newView = view.keySetView();
- if (isOrdered()) {
- keySet = new StoredSortedKeySet(newView);
- } else {
- keySet = new StoredKeySet(newView);
- }
- keySetInitialized = true;
- }
- }
- }
return keySet;
}
@@ -376,6 +390,9 @@ public class StoredMap extends StoredContainer implements Map {
* collection will be read-only if the map is read-only. This method
* conforms to the {@link Map#entrySet()} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @return a {@link StoredEntrySet} or a {@link StoredSortedEntrySet} for
* this map.
*
@@ -387,18 +404,6 @@ public class StoredMap extends StoredContainer implements Map {
*/
public Set entrySet() {
- if (!entrySetInitialized) {
- synchronized (this) {
- if (!entrySetInitialized) {
- if (isOrdered()) {
- entrySet = new StoredSortedEntrySet(view);
- } else {
- entrySet = new StoredEntrySet(view);
- }
- entrySetInitialized = true;
- }
- }
- }
return entrySet;
}
@@ -407,9 +412,12 @@ public class StoredMap extends StoredContainer implements Map {
* java.util.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()}
+ * map is read-only. This method conforms to the {@link Map#values()}
* interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @return a {@link StoredValueSet} or a {@link StoredSortedValueSet} for
* this map.
*
@@ -421,19 +429,6 @@ public class StoredMap extends StoredContainer implements Map {
*/
public Collection values() {
- if (!valueSetInitialized) {
- synchronized (this) {
- if (!valueSetInitialized) {
- DataView newView = view.valueSetView();
- if (isOrdered() && newView.canDeriveKeyFromValue()) {
- valueSet = new StoredSortedValueSet(newView);
- } else {
- valueSet = new StoredValueSet(newView);
- }
- valueSetInitialized = true;
- }
- }
- }
return valueSet;
}
@@ -459,7 +454,7 @@ public class StoredMap extends StoredContainer implements Map {
try {
DataView newView = view.valueSetView(key);
- return new StoredValueSet(newView, true);
+ return new StoredValueSet(newView);
} catch (KeyRangeException e) {
return Collections.EMPTY_SET;
} catch (Exception e) {
@@ -468,6 +463,41 @@ public class StoredMap extends StoredContainer implements Map {
}
/**
+ * Returns a new map from primary key to value for the subset of records
+ * having a given secondary key (duplicates). 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 secondaryKey is the secondary key for which duplicates values
+ * will be represented by the returned map.
+ *
+ * @param primaryKeyBinding is the binding used for keys in the returned
+ * map.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link
+ * com.sleepycat.db.DatabaseException} is thrown.
+ */
+ public Map duplicatesMap(Object secondaryKey,
+ EntryBinding primaryKeyBinding) {
+ try {
+ DataView newView =
+ view.duplicatesView(secondaryKey, primaryKeyBinding);
+ if (isOrdered()) {
+ return new StoredSortedMap(newView);
+ } else {
+ return new StoredMap(newView);
+ }
+ } 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
@@ -493,6 +523,11 @@ public class StoredMap extends StoredContainer implements Map {
return super.hashCode();
}
+ // Inherit javadoc
+ public int size() {
+ return values().size();
+ }
+
/**
* Converts the map to a string representation for debugging. WARNING: All
* mappings will be converted to strings and returned and therefore the
diff --git a/db/java/src/com/sleepycat/collections/StoredMapEntry.java b/db/java/src/com/sleepycat/collections/StoredMapEntry.java
index 020e878e4..9812cd95a 100644
--- a/db/java/src/com/sleepycat/collections/StoredMapEntry.java
+++ b/db/java/src/com/sleepycat/collections/StoredMapEntry.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredMapEntry.java,v 1.1 2004/04/09 16:34:09 mark Exp $
+ * $Id: StoredMapEntry.java,v 12.4 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -14,14 +14,15 @@ package com.sleepycat.collections;
*/
final class StoredMapEntry extends MapEntryParameter {
- private StoredIterator iter;
+ private BaseIterator iter;
private StoredCollection coll;
- StoredMapEntry(Object key, Object value, StoredCollection coll,
- StoredIterator iter) {
+ StoredMapEntry(Object key,
+ Object value,
+ StoredCollection coll,
+ BaseIterator iter) {
super(key, value);
- // Assert: coll, coll.keyBinding/valueBinding
this.coll = coll;
this.iter = iter;
}
@@ -33,6 +34,9 @@ final class StoredMapEntry extends MapEntryParameter {
oldValue = getValue();
iter.set(newValue);
} else {
+ if (coll.view.dupsAllowed) {
+ throw new IllegalStateException("May not insert duplicates");
+ }
oldValue = coll.put(getKey(), newValue);
}
setValueInternal(newValue);
diff --git a/db/java/src/com/sleepycat/collections/StoredSortedEntrySet.java b/db/java/src/com/sleepycat/collections/StoredSortedEntrySet.java
index 99fceab9b..806db58c9 100644
--- a/db/java/src/com/sleepycat/collections/StoredSortedEntrySet.java
+++ b/db/java/src/com/sleepycat/collections/StoredSortedEntrySet.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredSortedEntrySet.java,v 1.2 2004/06/02 20:59:39 mark Exp $
+ * $Id: StoredSortedEntrySet.java,v 12.5 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -22,17 +22,6 @@ import java.util.SortedSet;
* that are returned by this class and its iterators behaves just as the {@link
* StoredIterator#set} method does.</p>
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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>
@@ -98,6 +87,9 @@ public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
* strictly less than toMapEntry.
* This method conforms to the {@link SortedSet#headSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toMapEntry the upper bound.
*
* @return the subset.
@@ -115,6 +107,9 @@ public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
* strictly less than toMapEntry, optionally including toMapEntry.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toMapEntry is the upper bound.
*
* @param toInclusive is true to include toMapEntry.
@@ -134,6 +129,9 @@ public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
* greater than or equal to fromMapEntry.
* This method conforms to the {@link SortedSet#tailSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromMapEntry is the lower bound.
*
* @return the subset.
@@ -151,6 +149,9 @@ public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
* strictly greater than fromMapEntry, optionally including fromMapEntry.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromMapEntry is the lower bound.
*
* @param fromInclusive is true to include fromMapEntry.
@@ -170,6 +171,9 @@ public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
* from fromMapEntry, inclusive, to toMapEntry, exclusive.
* This method conforms to the {@link SortedSet#subSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromMapEntry is the lower bound.
*
* @param toMapEntry is the upper bound.
@@ -190,6 +194,9 @@ public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
* optionally including fromMapEntry and toMapEntry.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromMapEntry is the lower bound.
*
* @param fromInclusive is true to include fromMapEntry.
diff --git a/db/java/src/com/sleepycat/collections/StoredSortedKeySet.java b/db/java/src/com/sleepycat/collections/StoredSortedKeySet.java
index 44b12d55a..80ec6b93b 100644
--- a/db/java/src/com/sleepycat/collections/StoredSortedKeySet.java
+++ b/db/java/src/com/sleepycat/collections/StoredSortedKeySet.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredSortedKeySet.java,v 1.2 2004/06/02 20:59:39 mark Exp $
+ * $Id: StoredSortedKeySet.java,v 12.5 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -23,17 +23,6 @@ import com.sleepycat.db.Database;
* particularly useful for enumerating the unique keys of a store or index that
* allows duplicates.
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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>
@@ -123,6 +112,9 @@ public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
* strictly less than toKey.
* This method conforms to the {@link SortedSet#headSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toKey is the upper bound.
*
* @return the subset.
@@ -140,6 +132,9 @@ public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
* strictly less than toKey, optionally including toKey.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toKey is the upper bound.
*
* @param toInclusive is true to include toKey.
@@ -159,6 +154,9 @@ public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
* greater than or equal to fromKey.
* This method conforms to the {@link SortedSet#tailSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @return the subset.
@@ -176,6 +174,9 @@ public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
* strictly greater than fromKey, optionally including fromKey.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @param fromInclusive is true to include fromKey.
@@ -195,6 +196,9 @@ public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
* from fromKey, inclusive, to toKey, exclusive.
* This method conforms to the {@link SortedSet#subSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @param toKey is the upper bound.
@@ -215,6 +219,9 @@ public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
* optionally including fromKey and toKey.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @param fromInclusive is true to include fromKey.
diff --git a/db/java/src/com/sleepycat/collections/StoredSortedMap.java b/db/java/src/com/sleepycat/collections/StoredSortedMap.java
index 142e75ff4..e3020b5b8 100644
--- a/db/java/src/com/sleepycat/collections/StoredSortedMap.java
+++ b/db/java/src/com/sleepycat/collections/StoredSortedMap.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredSortedMap.java,v 1.3 2004/09/22 18:01:03 bostic Exp $
+ * $Id: StoredSortedMap.java,v 12.6 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
@@ -20,22 +20,10 @@ import com.sleepycat.db.OperationStatus;
/**
* A SortedMap view of a {@link Database}.
*
- * <p><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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>
@@ -230,6 +218,9 @@ public class StoredSortedMap extends StoredMap implements SortedMap {
* strictly less than toKey.
* This method conforms to the {@link SortedMap#headMap} interface.
*
+ * <p>Note that the return value is a StoredStoredMap and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toKey is the upper bound.
*
* @return the submap.
@@ -247,6 +238,9 @@ public class StoredSortedMap extends StoredMap implements SortedMap {
* strictly less than toKey, optionally including toKey.
* This method does not exist in the standard {@link SortedMap} interface.
*
+ * <p>Note that the return value is a StoredStoredMap and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toKey is the upper bound.
*
* @param toInclusive is true to include toKey.
@@ -266,6 +260,9 @@ public class StoredSortedMap extends StoredMap implements SortedMap {
* greater than or equal to fromKey.
* This method conforms to the {@link SortedMap#tailMap} interface.
*
+ * <p>Note that the return value is a StoredStoredMap and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @return the submap.
@@ -283,6 +280,9 @@ public class StoredSortedMap extends StoredMap implements SortedMap {
* strictly greater than fromKey, optionally including fromKey.
* This method does not exist in the standard {@link SortedMap} interface.
*
+ * <p>Note that the return value is a StoredStoredMap and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @param fromInclusive is true to include fromKey.
@@ -302,6 +302,9 @@ public class StoredSortedMap extends StoredMap implements SortedMap {
* from fromKey, inclusive, to toKey, exclusive.
* This method conforms to the {@link SortedMap#subMap} interface.
*
+ * <p>Note that the return value is a StoredStoredMap and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @param toKey is the upper bound.
@@ -322,6 +325,9 @@ public class StoredSortedMap extends StoredMap implements SortedMap {
* optionally including fromKey and toKey.
* This method does not exist in the standard {@link SortedMap} interface.
*
+ * <p>Note that the return value is a StoredStoredMap and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromKey is the lower bound.
*
* @param fromInclusive is true to include fromKey.
diff --git a/db/java/src/com/sleepycat/collections/StoredSortedValueSet.java b/db/java/src/com/sleepycat/collections/StoredSortedValueSet.java
index 96c534137..809287d68 100644
--- a/db/java/src/com/sleepycat/collections/StoredSortedValueSet.java
+++ b/db/java/src/com/sleepycat/collections/StoredSortedValueSet.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredSortedValueSet.java,v 1.2 2004/06/02 20:59:39 mark Exp $
+ * $Id: StoredSortedValueSet.java,v 12.5 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -21,17 +21,6 @@ import com.sleepycat.db.Database;
* 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><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* <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
@@ -136,6 +125,9 @@ public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
* strictly less than toValue.
* This method conforms to the {@link SortedSet#headSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toValue the upper bound.
*
* @return the subset.
@@ -153,6 +145,9 @@ public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
* strictly less than toValue, optionally including toValue.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param toValue is the upper bound.
*
* @param toInclusive is true to include toValue.
@@ -172,6 +167,9 @@ public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
* greater than or equal to fromValue.
* This method conforms to the {@link SortedSet#tailSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromValue is the lower bound.
*
* @return the subset.
@@ -189,6 +187,9 @@ public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
* strictly greater than fromValue, optionally including fromValue.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromValue is the lower bound.
*
* @param fromInclusive is true to include fromValue.
@@ -208,6 +209,9 @@ public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
* from fromValue, inclusive, to toValue, exclusive.
* This method conforms to the {@link SortedSet#subSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromValue is the lower bound.
*
* @param toValue is the upper bound.
@@ -228,6 +232,9 @@ public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
* optionally including fromValue and toValue.
* This method does not exist in the standard {@link SortedSet} interface.
*
+ * <p>Note that the return value is a StoredCollection and must be treated
+ * as such; for example, its iterators must be explicitly closed.</p>
+ *
* @param fromValue is the lower bound.
*
* @param fromInclusive is true to include fromValue.
diff --git a/db/java/src/com/sleepycat/collections/StoredValueSet.java b/db/java/src/com/sleepycat/collections/StoredValueSet.java
index a4d30bc87..d578bb6ab 100644
--- a/db/java/src/com/sleepycat/collections/StoredValueSet.java
+++ b/db/java/src/com/sleepycat/collections/StoredValueSet.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredValueSet.java,v 1.3 2004/06/04 18:24:50 mark Exp $
+ * $Id: StoredValueSet.java,v 12.4 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
@@ -14,6 +14,7 @@ import java.util.Set;
import com.sleepycat.bind.EntityBinding;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
@@ -23,17 +24,6 @@ import com.sleepycat.db.OperationStatus;
* 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><em>Note that this class does not conform to the standard Java
- * collections interface in the following ways:</em></p>
- * <ul>
- * <li>The {@link #size} method always throws
- * <code>UnsupportedOperationException</code> because, for performance reasons,
- * databases do not maintain their total record count.</li>
- * <li>All iterators must be explicitly closed using {@link
- * StoredIterator#close()} or {@link StoredIterator#close(java.util.Iterator)}
- * to release the underlying database cursor resources.</li>
- * </ul>
- *
* @author Mark Hayes
*/
public class StoredValueSet extends StoredCollection implements Set {
@@ -42,8 +32,6 @@ 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 Database}.
*
@@ -99,12 +87,6 @@ public class StoredValueSet extends StoredCollection implements Set {
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).
@@ -126,7 +108,7 @@ public class StoredValueSet extends StoredCollection implements Set {
if (view.isSecondary()) {
throw new UnsupportedOperationException(
"add() not allowed with index");
- } else if (isSingleKey) {
+ } else if (view.range.isSingleKey()) {
/* entity is actually just a value in this case */
if (!view.dupsAllowed) {
throw new UnsupportedOperationException("duplicates required");
@@ -185,32 +167,12 @@ public class StoredValueSet extends StoredCollection implements Set {
return removeValue(value);
}
- // javadoc is inherited
- public int size() {
-
- if (!isSingleKey) {
- return super.size();
- }
- DataCursor cursor = null;
- try {
- cursor = new DataCursor(view, false);
- OperationStatus status = cursor.getFirst(false);
- if (status == OperationStatus.SUCCESS) {
- return cursor.count();
- } else {
- return 0;
- }
- } catch (Exception e) {
- throw StoredContainer.convertException(e);
- } finally {
- closeCursor(cursor);
- }
- }
-
- Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
- throws DatabaseException {
+ Object makeIteratorData(BaseIterator iterator,
+ DatabaseEntry keyEntry,
+ DatabaseEntry priKeyEntry,
+ DatabaseEntry valueEntry) {
- return cursor.getCurrentValue();
+ return view.makeValue(priKeyEntry, valueEntry);
}
boolean hasValues() {
diff --git a/db/java/src/com/sleepycat/collections/TransactionRunner.java b/db/java/src/com/sleepycat/collections/TransactionRunner.java
index 270d265fb..4296d8e2e 100644
--- a/db/java/src/com/sleepycat/collections/TransactionRunner.java
+++ b/db/java/src/com/sleepycat/collections/TransactionRunner.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TransactionRunner.java,v 1.2 2004/09/22 18:01:03 bostic Exp $
+ * $Id: TransactionRunner.java,v 12.6 2006/09/08 20:32:13 bostic Exp $
*/
package com.sleepycat.collections;
@@ -19,7 +19,56 @@ import com.sleepycat.util.ExceptionUnwrapper;
/**
* Starts a transaction, calls {@link TransactionWorker#doWork}, and handles
- * transaction retry and exceptions.
+ * transaction retry and exceptions. To perform a transaction, the user
+ * implements the {@link TransactionWorker} interface and passes an instance of
+ * that class to the {@link #run} method.
+ *
+ * <p>A single TransactionRunner instance may be used by any number of threads
+ * for any number of transactions.</p>
+ *
+ * <p>The behavior of the run() method depends on whether the environment is
+ * transactional, whether nested transactions are enabled, and whether a
+ * transaction is already active.</p>
+ *
+ * <ul>
+ * <li>When the run() method is called in a transactional environment and no
+ * transaction is active for the current thread, a new transaction is started
+ * before calling doWork(). If DeadlockException is thrown by doWork(), the
+ * transaction will be aborted and the process will be repeated up to the
+ * maximum number of retries. 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 the run() method. If no exception is
+ * thrown by doWork(), the transaction will be committed. The run() method
+ * will not attempt to commit or abort a transaction if it has already been
+ * committed or aborted by doWork().</li>
+ *
+ * <li>When the run() method is called and a transaction is active for the
+ * current thread, and nested transactions are enabled, a nested transaction is
+ * started before calling doWork(). The transaction that is active when
+ * calling the run() method will become the parent of the nested transaction.
+ * The nested transaction will be committed or aborted by the run() method
+ * following the same rules described above. Note that nested transactions may
+ * not be enabled for the JE product, since JE does not support nested
+ * transactions.</li>
+ *
+ * <li>When the run() method is called in a non-transactional environment, the
+ * doWork() method is called without starting a transaction. The run() method
+ * will return without committing or aborting a transaction, and any exceptions
+ * thrown by the doWork() method will be thrown by the run() method.</li>
+ *
+ * <li>When the run() method is called and a transaction is active for the
+ * current thread and nested transactions are not enabled (the default) the
+ * same rules as above apply. All the operations performed by the doWork()
+ * method will be part of the currently active transaction.</li>
+ * </ul>
+ *
+ * <p>In a transactional environment, the rules described above support nested
+ * calls to the run() method and guarantee that the outermost call will cause
+ * the transaction to be committed or aborted. This is true whether or not
+ * nested transactions are supported or enabled. Note that nested transactions
+ * are provided as an optimization for improving concurrency but do not change
+ * the meaning of the outermost transaction. Nested transactions are not
+ * currently supported by the JE product.</p>
*
* @author Mark Hayes
*/
@@ -93,6 +142,9 @@ public class TransactionRunner {
* <code>run()</code> is called when a transaction is already active for
* the current thread.
* By default this property is false.
+ *
+ * <p>Note that this method always returns false in the JE product, since
+ * nested transactions are not supported by JE.</p>
*/
public boolean getAllowNestedTransactions() {
@@ -104,6 +156,9 @@ public class TransactionRunner {
* <code>run()</code> is called when a transaction is already active for
* the current thread.
* Calling this method does not impact transactions already running.
+ *
+ * <p>Note that true may not be passed to this method in the JE product,
+ * since nested transactions are not supported by JE.</p>
*/
public void setAllowNestedTransactions(boolean allowNestedTxn) {
@@ -146,20 +201,10 @@ public class TransactionRunner {
/**
* Calls the {@link TransactionWorker#doWork} method and, for transactional
- * environments, begins and ends a transaction. If the environment given
+ * environments, may begin and end 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 DeadlockException 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>
+ * method will still be called. See the class description for more
+ * information.
*
* @throws DeadlockException when it is thrown by doWork() and the
* maximum number of retries has occurred. The transaction will have been
@@ -175,6 +220,7 @@ public class TransactionRunner {
if (currentTxn != null &&
(allowNestedTxn || currentTxn.getTransaction() == null)) {
+
/*
* Transactional and (not nested or nested txns allowed).
*/
@@ -187,27 +233,34 @@ public class TransactionRunner {
currentTxn.commitTransaction();
}
return;
- } catch (Exception e) {
- e = ExceptionUnwrapper.unwrap(e);
+ } catch (Throwable e) {
+ e = ExceptionUnwrapper.unwrapAny(e);
if (txn != null && txn == currentTxn.getTransaction()) {
try {
currentTxn.abortTransaction();
- } catch (Exception e2) {
+ } catch (Throwable e2) {
+
/*
* XXX We should really throw a 3rd exception that
* wraps both e and e2, to give the user a complete
* set of error information.
*/
e2.printStackTrace();
- throw e;
+ /* Force the original exception to be thrown. */
+ i = maxRetries + 1;
}
}
if (i >= maxRetries || !(e instanceof DeadlockException)) {
- throw e;
+ if (e instanceof Exception) {
+ throw (Exception) e;
+ } else {
+ throw (Error) e;
+ }
}
}
}
} else {
+
/*
* Non-transactional or (nested and no nested txns allowed).
*/
diff --git a/db/java/src/com/sleepycat/collections/TransactionWorker.java b/db/java/src/com/sleepycat/collections/TransactionWorker.java
index eb69c7095..6e49b7d44 100644
--- a/db/java/src/com/sleepycat/collections/TransactionWorker.java
+++ b/db/java/src/com/sleepycat/collections/TransactionWorker.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TransactionWorker.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: TransactionWorker.java,v 12.3 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
diff --git a/db/java/src/com/sleepycat/collections/TupleSerialFactory.java b/db/java/src/com/sleepycat/collections/TupleSerialFactory.java
index b8382a1a8..32fb4a780 100644
--- a/db/java/src/com/sleepycat/collections/TupleSerialFactory.java
+++ b/db/java/src/com/sleepycat/collections/TupleSerialFactory.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleSerialFactory.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: TupleSerialFactory.java,v 12.3 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.collections;
diff --git a/db/java/src/com/sleepycat/collections/package.html b/db/java/src/com/sleepycat/collections/package.html
index 488929d23..35d7bcf09 100644
--- a/db/java/src/com/sleepycat/collections/package.html
+++ b/db/java/src/com/sleepycat/collections/package.html
@@ -1,20 +1,21 @@
-<!-- $Id: package.html,v 1.2 2004/11/09 00:41:06 mjc Exp $ -->
+<!-- $Id: package.html,v 12.4 2006/08/31 18:14:08 bostic Exp $ -->
<html>
<head>
<!--
See the file LICENSE for redistribution information.
- Copyright (c) 2002-2004
- Sleepycat Software. All rights reserved.
+ Copyright (c) 2002-2006
+ Oracle Corporation. All rights reserved.
- $Id: package.html,v 1.2 2004/11/09 00:41:06 mjc Exp $
+ $Id: package.html,v 12.4 2006/08/31 18:14:08 bostic Exp $
-->
</head>
<body>
Data access based on the standard Java collections API.
<p>
-Examples can be found in je/examples/com/sleepycat/examples/collections. Build and run directions are in the installation notes.
+Examples can be found in je/examples/collections. Build and run directions are
+in the installation notes.
</body>
</html>
diff --git a/db/java/src/com/sleepycat/compat/DbCompat.java b/db/java/src/com/sleepycat/compat/DbCompat.java
index 9f5cdf76e..78e3ae309 100644
--- a/db/java/src/com/sleepycat/compat/DbCompat.java
+++ b/db/java/src/com/sleepycat/compat/DbCompat.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DbCompat.java,v 1.6 2004/11/05 01:08:31 mjc Exp $
+ * $Id: DbCompat.java,v 12.7 2006/08/31 18:14:08 bostic Exp $
*/
package com.sleepycat.compat;
@@ -28,6 +28,7 @@ import com.sleepycat.db.SecondaryConfig;
import com.sleepycat.db.SecondaryCursor;
import com.sleepycat.db.SecondaryDatabase;
import com.sleepycat.db.Transaction;
+import com.sleepycat.db.TransactionConfig;
/**
* A minimal set of DB-JE compatibility methods for internal use only.
@@ -49,7 +50,7 @@ public class DbCompat {
public static final boolean RECNO_METHOD = true;
public static final boolean QUEUE_METHOD = true;
public static final boolean BTREE_RECNUM_METHOD = true;
- public static final boolean OPTIONAL_DIRTY_READ = true;
+ public static final boolean OPTIONAL_READ_UNCOMMITTED = true;
public static final boolean SECONDARIES = true;
/* Methods used by the collections package. */
@@ -82,8 +83,8 @@ public class DbCompat {
return dbConfig.getBtreeRecordNumbers();
}
- public static boolean getDirtyRead(DatabaseConfig dbConfig) {
- return dbConfig.getDirtyRead();
+ public static boolean getReadUncommitted(DatabaseConfig dbConfig) {
+ return dbConfig.getReadUncommitted();
}
public static boolean getRenumbering(DatabaseConfig dbConfig) {
@@ -98,6 +99,19 @@ public class DbCompat {
return dbConfig.getUnsortedDuplicates();
}
+ // XXX Remove this when DB and JE support CursorConfig.cloneConfig
+ public static CursorConfig cloneCursorConfig(CursorConfig config) {
+ CursorConfig newConfig = new CursorConfig();
+ newConfig.setReadCommitted(config.getReadCommitted());
+ newConfig.setReadUncommitted(config.getReadUncommitted());
+ newConfig.setWriteCursor(config.getWriteCursor());
+ return newConfig;
+ }
+
+ public static boolean getWriteCursor(CursorConfig config) {
+ return config.getWriteCursor();
+ }
+
public static void setWriteCursor(CursorConfig config, boolean val) {
config.setWriteCursor(val);
}
@@ -139,12 +153,16 @@ public class DbCompat {
return cursor.getSearchRecordNumber(key, pKey, data, lockMode);
}
- public static OperationStatus putAfter(Cursor cursor, DatabaseEntry key, DatabaseEntry data)
+ public static OperationStatus putAfter(Cursor cursor,
+ DatabaseEntry key,
+ DatabaseEntry data)
throws DatabaseException {
return cursor.putAfter(key, data);
}
- public static OperationStatus putBefore(Cursor cursor, DatabaseEntry key, DatabaseEntry data)
+ public static OperationStatus putBefore(Cursor cursor,
+ DatabaseEntry key,
+ DatabaseEntry data)
throws DatabaseException {
return cursor.putBefore(key, data);
}
@@ -157,6 +175,11 @@ public class DbCompat {
return db.append(txn, key, data);
}
+ public static Transaction getThreadTransaction(Environment env)
+ throws DatabaseException {
+ return null;
+ }
+
/* Methods used by the collections tests. */
public static void setInitializeCache(EnvironmentConfig config,
@@ -205,9 +228,9 @@ public class DbCompat {
dbConfig.setBtreeRecordNumbers(val);
}
- public static void setDirtyRead(DatabaseConfig dbConfig,
- boolean val) {
- dbConfig.setDirtyRead(val);
+ public static void setReadUncommitted(DatabaseConfig dbConfig,
+ boolean val) {
+ dbConfig.setReadUncommitted(val);
}
public static void setRenumbering(DatabaseConfig dbConfig,
diff --git a/db/java/src/com/sleepycat/db/BtreePrefixCalculator.java b/db/java/src/com/sleepycat/db/BtreePrefixCalculator.java
index ca86f0a68..5a3b2f2ee 100644
--- a/db/java/src/com/sleepycat/db/BtreePrefixCalculator.java
+++ b/db/java/src/com/sleepycat/db/BtreePrefixCalculator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: BtreePrefixCalculator.java,v 1.1 2004/04/06 20:43:36 mjc Exp $
+ * $Id: BtreePrefixCalculator.java,v 12.3 2006/08/24 14:46:06 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/BtreeStats.java b/db/java/src/com/sleepycat/db/BtreeStats.java
index 50c8f9d7a..00f0bb85b 100644
--- a/db/java/src/com/sleepycat/db/BtreeStats.java
+++ b/db/java/src/com/sleepycat/db/BtreeStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class BtreeStats extends DatabaseStats {
// no public constructor
- protected BtreeStats() {}
+ /* package */ BtreeStats() {}
private int bt_magic;
public int getMagic() {
@@ -43,11 +43,6 @@ public class BtreeStats extends DatabaseStats {
return bt_pagesize;
}
- private int bt_maxkey;
- public int getMaxKey() {
- return bt_maxkey;
- }
-
private int bt_minkey;
public int getMinKey() {
return bt_minkey;
@@ -126,7 +121,6 @@ public class BtreeStats extends DatabaseStats {
+ "\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
diff --git a/db/java/src/com/sleepycat/db/CacheFile.java b/db/java/src/com/sleepycat/db/CacheFile.java
index 2fa44a19c..0c5102f8e 100644
--- a/db/java/src/com/sleepycat/db/CacheFile.java
+++ b/db/java/src/com/sleepycat/db/CacheFile.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: CacheFile.java,v 1.3 2004/09/23 17:56:39 mjc Exp $
+ * $Id: CacheFile.java,v 12.3 2006/08/24 14:46:07 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/CacheFilePriority.java b/db/java/src/com/sleepycat/db/CacheFilePriority.java
index 89f08c8f2..80428d680 100644
--- a/db/java/src/com/sleepycat/db/CacheFilePriority.java
+++ b/db/java/src/com/sleepycat/db/CacheFilePriority.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: CacheFilePriority.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: CacheFilePriority.java,v 12.3 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/CacheFileStats.java b/db/java/src/com/sleepycat/db/CacheFileStats.java
index 7b864ed4e..a1f21d765 100644
--- a/db/java/src/com/sleepycat/db/CacheFileStats.java
+++ b/db/java/src/com/sleepycat/db/CacheFileStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class CacheFileStats {
// no public constructor
- protected CacheFileStats() {}
+ /* package */ CacheFileStats() {}
private String file_name;
public String getFileName() {
diff --git a/db/java/src/com/sleepycat/db/CacheStats.java b/db/java/src/com/sleepycat/db/CacheStats.java
index b9e16c96a..387980438 100644
--- a/db/java/src/com/sleepycat/db/CacheStats.java
+++ b/db/java/src/com/sleepycat/db/CacheStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class CacheStats {
// no public constructor
- protected CacheStats() {}
+ /* package */ CacheStats() {}
private int st_gbytes;
public int getGbytes() {
@@ -143,6 +143,11 @@ public class CacheStats {
return st_hash_wait;
}
+ private int st_hash_max_nowait;
+ public int getHashMaxNowait() {
+ return st_hash_max_nowait;
+ }
+
private int st_hash_max_wait;
public int getHashMaxWait() {
return st_hash_max_wait;
@@ -158,6 +163,21 @@ public class CacheStats {
return st_region_wait;
}
+ private int st_mvcc_frozen;
+ public int getMultiversionFrozen() {
+ return st_mvcc_frozen;
+ }
+
+ private int st_mvcc_thawed;
+ public int getMultiversionThawed() {
+ return st_mvcc_thawed;
+ }
+
+ private int st_mvcc_freed;
+ public int getMultiversionFreed() {
+ return st_mvcc_freed;
+ }
+
private int st_alloc;
public int getAlloc() {
return st_alloc;
@@ -183,6 +203,11 @@ public class CacheStats {
return st_alloc_max_pages;
}
+ private int st_io_wait;
+ public int getIoWait() {
+ return st_io_wait;
+ }
+
public String toString() {
return "CacheStats:"
+ "\n st_gbytes=" + st_gbytes
@@ -211,14 +236,19 @@ public class CacheStats {
+ "\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_nowait=" + st_hash_max_nowait
+ "\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_mvcc_frozen=" + st_mvcc_frozen
+ + "\n st_mvcc_thawed=" + st_mvcc_thawed
+ + "\n st_mvcc_freed=" + st_mvcc_freed
+ "\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
+ + "\n st_io_wait=" + st_io_wait
;
}
}
diff --git a/db/java/src/com/sleepycat/db/CheckpointConfig.java b/db/java/src/com/sleepycat/db/CheckpointConfig.java
index ab9d6bc83..71d16b6fc 100644
--- a/db/java/src/com/sleepycat/db/CheckpointConfig.java
+++ b/db/java/src/com/sleepycat/db/CheckpointConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: CheckpointConfig.java,v 1.3 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: CheckpointConfig.java,v 12.3 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/CompactConfig.java b/db/java/src/com/sleepycat/db/CompactConfig.java
new file mode 100644
index 000000000..405054c48
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/CompactConfig.java
@@ -0,0 +1,79 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: CompactConfig.java,v 12.4 2006/08/24 14:46:07 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public class CompactConfig implements Cloneable {
+ public static final CompactConfig DEFAULT = new CompactConfig();
+
+ /* package */
+ static CompactConfig checkNull(CompactConfig config) {
+ return (config == null) ? DEFAULT : config;
+ }
+
+ private int fillpercent = 0;
+ private boolean freeListOnly = false;
+ private boolean freeSpace = false;
+ private int maxPages = 0;
+ private int timeout = 0;
+
+ public CompactConfig() {
+ }
+
+ public void setFillPercent(final int fillpercent) {
+ this.fillpercent = fillpercent;
+ }
+
+ public int getFillPercent() {
+ return fillpercent;
+ }
+
+ public void setFreeListOnly(boolean freeListOnly) {
+ this.freeListOnly = freeListOnly;
+ }
+
+ public boolean getFreeListOnly() {
+ return freeListOnly;
+ }
+
+ public void setFreeSpace(boolean freeSpace) {
+ this.freeSpace = freeSpace;
+ }
+
+ public boolean getFreeSpace() {
+ return freeSpace;
+ }
+
+ public void setMaxPages(final int maxPages) {
+ this.maxPages = maxPages;
+ }
+
+ public int getMaxPages() {
+ return maxPages;
+ }
+
+ public void setTimeout(final int timeout) {
+ this.timeout = timeout;
+ }
+
+ public int getTimeout() {
+ return timeout;
+ }
+
+ /* package */
+ int getFlags() {
+ int flags = 0;
+ flags |= freeListOnly ? DbConstants.DB_FREELIST_ONLY : 0;
+ flags |= freeSpace ? DbConstants.DB_FREE_SPACE : 0;
+
+ return flags;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/CompactStats.java b/db/java/src/com/sleepycat/db/CompactStats.java
new file mode 100644
index 000000000..a26b4cefd
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/CompactStats.java
@@ -0,0 +1,85 @@
+/*-
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
+ *
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbUtil;
+
+public class CompactStats
+{
+ // no public constructor
+ /* package */ CompactStats() {}
+
+ /* package */
+ CompactStats(int fillpercent, int timeout, int pages) {
+ this.compact_fillpercent = fillpercent;
+ this.compact_timeout = timeout;
+ this.compact_pages = pages;
+ }
+
+ private int compact_fillpercent;
+ /* package */ int getFillPercent() {
+ return compact_fillpercent;
+ }
+
+ private int compact_timeout;
+ /* package */ int getTimeout() {
+ return compact_timeout;
+ }
+
+ private int compact_pages;
+ /* package */ int getPages() {
+ return compact_pages;
+ }
+
+ private int compact_pages_free;
+ public int getPagesFree() {
+ return compact_pages_free;
+ }
+
+ private int compact_pages_examine;
+ public int getPagesExamine() {
+ return compact_pages_examine;
+ }
+
+ private int compact_levels;
+ public int getLevels() {
+ return compact_levels;
+ }
+
+ private int compact_deadlock;
+ public int getDeadlock() {
+ return compact_deadlock;
+ }
+
+ private int compact_pages_truncated;
+ public int getPagesTruncated() {
+ return compact_pages_truncated;
+ }
+
+ private int compact_truncate;
+ /* package */ int getTruncate() {
+ return compact_truncate;
+ }
+
+ public String toString() {
+ return "CompactStats:"
+ + "\n compact_fillpercent=" + compact_fillpercent
+ + "\n compact_timeout=" + compact_timeout
+ + "\n compact_pages=" + compact_pages
+ + "\n compact_pages_free=" + compact_pages_free
+ + "\n compact_pages_examine=" + compact_pages_examine
+ + "\n compact_levels=" + compact_levels
+ + "\n compact_deadlock=" + compact_deadlock
+ + "\n compact_pages_truncated=" + compact_pages_truncated
+ + "\n compact_truncate=" + compact_truncate
+ ;
+ }
+}
+// end of TransactionStats.java
diff --git a/db/java/src/com/sleepycat/db/Cursor.java b/db/java/src/com/sleepycat/db/Cursor.java
index bbdf04799..14dbdf305 100644
--- a/db/java/src/com/sleepycat/db/Cursor.java
+++ b/db/java/src/com/sleepycat/db/Cursor.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: Cursor.java,v 1.6 2004/11/05 01:08:31 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Cursor.java,v 12.5 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
@@ -14,17 +14,20 @@ import com.sleepycat.db.internal.Dbc;
public class Cursor {
/* package */ Dbc dbc;
- protected Database database;
- protected CursorConfig config;
+ /* package */ Database database;
+ /* package */ CursorConfig config;
- protected Cursor() {
+ // Constructor needed by Java RPC server
+ protected Cursor(final Database database, final CursorConfig config) {
+ this.database = database;
+ this.config = config;
}
Cursor(final Database database, final Dbc dbc, final CursorConfig config)
throws DatabaseException {
- this.dbc = dbc;
this.database = database;
+ this.dbc = dbc;
this.config = config;
}
diff --git a/db/java/src/com/sleepycat/db/CursorConfig.java b/db/java/src/com/sleepycat/db/CursorConfig.java
index f674de3c8..a81998c16 100644
--- a/db/java/src/com/sleepycat/db/CursorConfig.java
+++ b/db/java/src/com/sleepycat/db/CursorConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: CursorConfig.java,v 1.4 2004/09/28 19:30:36 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: CursorConfig.java,v 12.5 2006/09/08 20:32:14 bostic Exp $
+ */
package com.sleepycat.db;
@@ -17,18 +17,22 @@ import com.sleepycat.db.internal.DbTxn;
public class CursorConfig implements Cloneable {
public static final CursorConfig DEFAULT = new CursorConfig();
- public static final CursorConfig DIRTY_READ = new CursorConfig();
- static { DIRTY_READ.setDirtyRead(true); }
+ public static final CursorConfig READ_UNCOMMITTED = new CursorConfig();
+ static { READ_UNCOMMITTED.setReadUncommitted(true); }
- public static final CursorConfig DEGREE_2 = new CursorConfig();
- static { DEGREE_2.setDegree2(true); }
+ public static final CursorConfig READ_COMMITTED = new CursorConfig();
+ static { READ_COMMITTED.setReadCommitted(true); }
public static final CursorConfig WRITECURSOR = new CursorConfig();
static { WRITECURSOR.setWriteCursor(true); }
+ /** @deprecated */
+ public static final CursorConfig DIRTY_READ = READ_UNCOMMITTED;
+ /** @deprecated */
+ public static final CursorConfig DEGREE_2 = READ_COMMITTED;
- private boolean dirtyRead = false;
- private boolean degree2 = false;
+ private boolean readUncommitted = false;
+ private boolean readCommitted = false;
private boolean writeCursor = false;
public CursorConfig() {
@@ -39,20 +43,40 @@ public class CursorConfig implements Cloneable {
return (config == null) ? DEFAULT : config;
}
+ public void setReadCommitted(final boolean readCommitted) {
+ this.readCommitted = readCommitted;
+ }
+
+ public boolean getReadCommitted() {
+ return readCommitted;
+ }
+
+ /** @deprecated */
public void setDegree2(final boolean degree2) {
- this.degree2 = degree2;
+ setReadCommitted(degree2);
}
+ /** @deprecated */
public boolean getDegree2() {
- return degree2;
+ return getReadCommitted();
+ }
+
+ public void setReadUncommitted(final boolean readUncommitted) {
+ this.readUncommitted = readUncommitted;
+ }
+
+ public boolean getReadUncommitted() {
+ return readUncommitted;
}
+ /** @deprecated */
public void setDirtyRead(final boolean dirtyRead) {
- this.dirtyRead = dirtyRead;
+ setReadUncommitted(dirtyRead);
}
+ /** @deprecated */
public boolean getDirtyRead() {
- return dirtyRead;
+ return getReadUncommitted();
}
public void setWriteCursor(final boolean writeCursor) {
@@ -68,8 +92,8 @@ public class CursorConfig implements Cloneable {
throws DatabaseException {
int flags = 0;
- flags |= dirtyRead ? DbConstants.DB_DIRTY_READ : 0;
- flags |= degree2 ? DbConstants.DB_DEGREE_2 : 0;
+ flags |= readUncommitted ? DbConstants.DB_READ_UNCOMMITTED : 0;
+ flags |= readCommitted ? DbConstants.DB_READ_COMMITTED : 0;
flags |= writeCursor ? DbConstants.DB_WRITECURSOR : 0;
return db.cursor(txn, flags);
}
diff --git a/db/java/src/com/sleepycat/db/Database.java b/db/java/src/com/sleepycat/db/Database.java
index 186e71e21..3a98b0e9f 100644
--- a/db/java/src/com/sleepycat/db/Database.java
+++ b/db/java/src/com/sleepycat/db/Database.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: Database.java,v 1.12 2004/09/28 19:30:37 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Database.java,v 12.5 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
@@ -54,6 +54,21 @@ public class Database {
close(false);
}
+ public CompactStats compact(final Transaction txn,
+ final DatabaseEntry start,
+ final DatabaseEntry stop,
+ final DatabaseEntry end,
+ CompactConfig config)
+ throws DatabaseException {
+
+ config = CompactConfig.checkNull(config);
+ CompactStats compact = new CompactStats(config.getFillPercent(),
+ config.getTimeout(), config.getMaxPages());
+ db.compact((txn == null) ? null : txn.txn,
+ start, stop, compact, config.getFlags(), end);
+ return compact;
+ }
+
public Cursor openCursor(final Transaction txn, CursorConfig config)
throws DatabaseException {
@@ -75,7 +90,7 @@ public class Database {
SequenceConfig config)
throws DatabaseException {
- config = SequenceConfig.checkNull(config);
+ config = SequenceConfig.checkNull(config);
final DbSequence seq = config.openSequence(
db, (txn == null) ? null : txn.txn, key);
seq.remove((txn == null) ? null : txn.txn,
@@ -302,13 +317,15 @@ public class Database {
db.close(0);
}
- public boolean verify(final String fileName,
- final String databaseName,
- final java.io.PrintStream dumpStream,
- VerifyConfig config)
+ public static boolean verify(final String fileName,
+ final String databaseName,
+ final java.io.PrintStream dumpStream,
+ VerifyConfig verifyConfig,
+ DatabaseConfig dbConfig)
throws DatabaseException, java.io.FileNotFoundException {
+ final Db db = DatabaseConfig.checkNull(dbConfig).createDatabase(null);
return db.verify(fileName, databaseName, dumpStream,
- VerifyConfig.checkNull(config).getFlags());
+ VerifyConfig.checkNull(verifyConfig).getFlags());
}
}
diff --git a/db/java/src/com/sleepycat/db/DatabaseConfig.java b/db/java/src/com/sleepycat/db/DatabaseConfig.java
index 3e07386f7..f5acffaad 100644
--- a/db/java/src/com/sleepycat/db/DatabaseConfig.java
+++ b/db/java/src/com/sleepycat/db/DatabaseConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: DatabaseConfig.java,v 1.9 2004/11/05 00:50:54 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: DatabaseConfig.java,v 12.6 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
@@ -51,9 +51,10 @@ public class DatabaseConfig implements Cloneable {
private boolean allowCreate = false;
private boolean btreeRecordNumbers = false;
private boolean checksum = false;
- private boolean dirtyRead = false;
+ private boolean readUncommitted = false;
private boolean encrypted = false;
private boolean exclusiveCreate = false;
+ private boolean multiversion = false;
private boolean noMMap = false;
private boolean queueInOrder = false;
private boolean readOnly = false;
@@ -149,15 +150,26 @@ public class DatabaseConfig implements Cloneable {
return checksum;
}
+ public void setReadUncommitted(final boolean readUncommitted) {
+ this.readUncommitted = readUncommitted;
+ }
+
+ public boolean getReadUncommitted() {
+ return readUncommitted;
+ }
+
+ /** @deprecated */
public void setDirtyRead(final boolean dirtyRead) {
- this.dirtyRead = dirtyRead;
+ setReadUncommitted(dirtyRead);
}
+ /** @deprecated */
public boolean getDirtyRead() {
- return dirtyRead;
+ return getReadUncommitted();
}
- public void setDuplicateComparator(final java.util.Comparator duplicateComparator) {
+ public void setDuplicateComparator(
+ final java.util.Comparator duplicateComparator) {
this.duplicateComparator = duplicateComparator;
}
@@ -261,6 +273,14 @@ public class DatabaseConfig implements Cloneable {
return mode;
}
+ public void setMultiversion(final boolean Multiversion) {
+ this.multiversion = multiversion;
+ }
+
+ public boolean getMultiversion() {
+ return multiversion;
+ }
+
public void setNoMMap(final boolean noMMap) {
this.noMMap = noMMap;
}
@@ -309,7 +329,8 @@ public class DatabaseConfig implements Cloneable {
return readOnly;
}
- public void setRecordNumberAppender(final RecordNumberAppender recnoAppender) {
+ public void setRecordNumberAppender(
+ final RecordNumberAppender recnoAppender) {
this.recnoAppender = recnoAppender;
}
@@ -462,8 +483,9 @@ public class DatabaseConfig implements Cloneable {
int openFlags = 0;
openFlags |= allowCreate ? DbConstants.DB_CREATE : 0;
- openFlags |= dirtyRead ? DbConstants.DB_DIRTY_READ : 0;
+ openFlags |= readUncommitted ? DbConstants.DB_READ_UNCOMMITTED : 0;
openFlags |= exclusiveCreate ? DbConstants.DB_EXCL : 0;
+ openFlags |= multiversion ? DbConstants.DB_MULTIVERSION : 0;
openFlags |= noMMap ? DbConstants.DB_NOMMAP : 0;
openFlags |= readOnly ? DbConstants.DB_RDONLY : 0;
openFlags |= threaded ? DbConstants.DB_THREAD : 0;
@@ -494,7 +516,6 @@ public class DatabaseConfig implements Cloneable {
int dbFlags = 0;
dbFlags |= checksum ? DbConstants.DB_CHKSUM : 0;
- dbFlags |= (password != null) ? DbConstants.DB_ENCRYPT : 0;
dbFlags |= btreeRecordNumbers ? DbConstants.DB_RECNUM : 0;
dbFlags |= queueInOrder ? DbConstants.DB_INORDER : 0;
dbFlags |= renumbering ? DbConstants.DB_RENUMBER : 0;
@@ -503,6 +524,8 @@ public class DatabaseConfig implements Cloneable {
dbFlags |= snapshot ? DbConstants.DB_SNAPSHOT : 0;
dbFlags |= unsortedDuplicates ? DbConstants.DB_DUP : 0;
dbFlags |= transactionNotDurable ? DbConstants.DB_TXN_NOT_DURABLE : 0;
+ if (!db.getPrivateDbEnv())
+ dbFlags |= (password != null) ? DbConstants.DB_ENCRYPT : 0;
if (dbFlags != 0)
db.set_flags(dbFlags);
@@ -526,7 +549,7 @@ public class DatabaseConfig implements Cloneable {
db.set_message_stream(messageStream);
if (pageSize != oldConfig.pageSize)
db.set_pagesize(pageSize);
- if (password != oldConfig.password)
+ if (password != oldConfig.password && db.getPrivateDbEnv())
db.set_encrypt(password, DbConstants.DB_ENCRYPT_AES);
if (queueExtentSize != oldConfig.queueExtentSize)
db.set_q_extentsize(queueExtentSize);
@@ -568,8 +591,9 @@ public class DatabaseConfig implements Cloneable {
final int openFlags = db.get_open_flags();
allowCreate = (openFlags & DbConstants.DB_CREATE) != 0;
- dirtyRead = (openFlags & DbConstants.DB_DIRTY_READ) != 0;
+ readUncommitted = (openFlags & DbConstants.DB_READ_UNCOMMITTED) != 0;
exclusiveCreate = (openFlags & DbConstants.DB_EXCL) != 0;
+ multiversion = (openFlags & DbConstants.DB_MULTIVERSION) != 0;
noMMap = (openFlags & DbConstants.DB_NOMMAP) != 0;
readOnly = (openFlags & DbConstants.DB_RDONLY) != 0;
truncate = (openFlags & DbConstants.DB_TRUNCATE) != 0;
diff --git a/db/java/src/com/sleepycat/db/DatabaseEntry.java b/db/java/src/com/sleepycat/db/DatabaseEntry.java
index be67fe024..5ac47bbdb 100644
--- a/db/java/src/com/sleepycat/db/DatabaseEntry.java
+++ b/db/java/src/com/sleepycat/db/DatabaseEntry.java
@@ -1,27 +1,31 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: DatabaseEntry.java,v 1.7 2004/09/22 18:01:03 bostic Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: DatabaseEntry.java,v 12.7 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
import com.sleepycat.db.internal.DbConstants;
import com.sleepycat.db.internal.DbUtil;
+import java.nio.ByteBuffer;
+import java.lang.IllegalArgumentException;
+
public class DatabaseEntry {
/* Currently, JE stores all data records as byte array */
- protected byte[] data;
- protected int dlen = 0;
- protected int doff = 0;
- protected int flags = 0;
- protected int offset = 0;
- protected int size = 0;
- protected int ulen = 0;
+ /* package */ byte[] data;
+ /* package */ ByteBuffer data_nio;
+ /* package */ int dlen = 0;
+ /* package */ int doff = 0;
+ /* package */ int flags = 0;
+ /* package */ int offset = 0;
+ /* package */ int size = 0;
+ /* package */ int ulen = 0;
/*
* IGNORE is used to avoid returning data that is not needed. It may not
@@ -38,7 +42,7 @@ public class DatabaseEntry {
/* package */
static final DatabaseEntry UNUSED = new DatabaseEntry();
- protected static final int INT32SZ = 4;
+ /* package */ static final int INT32SZ = 4;
/*
* Constructors
@@ -52,12 +56,22 @@ public class DatabaseEntry {
if (data != null) {
this.size = data.length;
}
+ this.data_nio = null;
}
public DatabaseEntry(final byte[] data, final int offset, final int size) {
this.data = data;
this.offset = offset;
this.size = size;
+ this.data_nio = null;
+ }
+
+ public DatabaseEntry(ByteBuffer data) {
+ this.data_nio = data;
+ if (data != null) {
+ this.size = this.ulen = data.limit();
+ setUserBuffer(data.limit(), true);
+ }
}
/*
@@ -68,16 +82,42 @@ public class DatabaseEntry {
return data;
}
+ public ByteBuffer getDataNIO() {
+ return data_nio;
+ }
+
public void setData(final byte[] data, final int offset, final int size) {
this.data = data;
this.offset = offset;
this.size = size;
+
+ this.data_nio = null;
}
public void setData(final byte[] data) {
setData(data, 0, (data == null) ? 0 : data.length);
}
+ public void setDataNIO(final ByteBuffer data, final int offset, final int size) {
+ this.data_nio = data;
+ this.offset = offset;
+ this.size = this.ulen = size;
+
+ this.data = null;
+ flags = 0;
+ setUserBuffer(size, true);
+ }
+
+ public void setDataNIO(final ByteBuffer data) {
+ setDataNIO(data, 0, (data == null) ? 0 : data.capacity());
+ }
+
+ /**
+ * This method is called just before performing a get operation. It is
+ * overridden by Multiple*Entry classes to return the flags used for bulk
+ * retrieval. If non-zero is returned, this method should reset the entry
+ * position so that the next set of key/data can be returned.
+ */
/* package */
int getMultiFlag() {
return 0;
@@ -146,6 +186,10 @@ public class DatabaseEntry {
}
public void setReuseBuffer(boolean reuse) {
+ if (data_nio != null)
+ throw new IllegalArgumentException("Can only set the reuse flag on" +
+ " DatabaseEntry classes with a underlying byte[] data");
+
if (reuse)
flags &= ~(DbConstants.DB_DBT_MALLOC | DbConstants.DB_DBT_USERMEM);
else {
@@ -171,6 +215,7 @@ public class DatabaseEntry {
}
public void setUserBuffer(final int length, final boolean usermem) {
+
this.ulen = length;
if (usermem) {
flags &= ~DbConstants.DB_DBT_MALLOC;
@@ -178,4 +223,43 @@ public class DatabaseEntry {
} else
flags &= ~DbConstants.DB_DBT_USERMEM;
}
+
+ public boolean equals(Object o) {
+ if (!(o instanceof DatabaseEntry)) {
+ return false;
+ }
+ DatabaseEntry e = (DatabaseEntry) o;
+ if (getPartial() || e.getPartial()) {
+ if (getPartial() != e.getPartial() ||
+ dlen != e.dlen ||
+ doff != e.doff) {
+ return false;
+ }
+ }
+ if (data == null && e.data == null) {
+ return true;
+ }
+ if (data == null || e.data == null) {
+ return false;
+ }
+ if (size != e.size) {
+ return false;
+ }
+ for (int i = 0; i < size; i += 1) {
+ if (data[offset + i] != e.data[e.offset + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public int hashCode() {
+ int hash = 0;
+ if (data != null) {
+ for (int i = 0; i < size; i += 1) {
+ hash += data[offset + i];
+ }
+ }
+ return hash;
+ }
}
diff --git a/db/java/src/com/sleepycat/db/DatabaseException.java b/db/java/src/com/sleepycat/db/DatabaseException.java
index 17ffb5432..7eb7108f9 100644
--- a/db/java/src/com/sleepycat/db/DatabaseException.java
+++ b/db/java/src/com/sleepycat/db/DatabaseException.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DatabaseException.java,v 1.1 2004/04/06 20:43:36 mjc Exp $
+ * $Id: DatabaseException.java,v 12.4 2006/08/24 14:46:07 bostic Exp $
*/
package com.sleepycat.db;
@@ -31,7 +30,7 @@ public class DatabaseException extends Exception {
this.dbenv = dbenv;
}
- protected DatabaseException(final String s,
+ /* package */ DatabaseException(final String s,
final int errno,
final DbEnv dbenv) {
this(s, errno, (dbenv == null) ? null : dbenv.wrapper);
diff --git a/db/java/src/com/sleepycat/db/DatabaseStats.java b/db/java/src/com/sleepycat/db/DatabaseStats.java
index c372ca435..c7cdaf193 100644
--- a/db/java/src/com/sleepycat/db/DatabaseStats.java
+++ b/db/java/src/com/sleepycat/db/DatabaseStats.java
@@ -1,15 +1,14 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DatabaseStats.java,v 1.2 2004/09/28 19:30:37 mjc Exp $
+ * $Id: DatabaseStats.java,v 12.4 2006/08/24 14:46:07 bostic Exp $
*/
package com.sleepycat.db;
public abstract class DatabaseStats {
// no public constructor
- protected DatabaseStats() {}
+ /* package */ DatabaseStats() {}
}
diff --git a/db/java/src/com/sleepycat/db/DatabaseType.java b/db/java/src/com/sleepycat/db/DatabaseType.java
index 2407498cf..2166b43a8 100644
--- a/db/java/src/com/sleepycat/db/DatabaseType.java
+++ b/db/java/src/com/sleepycat/db/DatabaseType.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: DatabaseType.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: DatabaseType.java,v 12.3 2006/08/24 14:46:07 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/DeadlockException.java b/db/java/src/com/sleepycat/db/DeadlockException.java
index afe9b498a..6d341d52e 100644
--- a/db/java/src/com/sleepycat/db/DeadlockException.java
+++ b/db/java/src/com/sleepycat/db/DeadlockException.java
@@ -1,18 +1,17 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DeadlockException.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: DeadlockException.java,v 12.4 2006/08/24 14:46:07 bostic Exp $
*/
package com.sleepycat.db;
import com.sleepycat.db.internal.DbEnv;
public class DeadlockException extends DatabaseException {
- protected DeadlockException(final String s,
+ /* package */ DeadlockException(final String s,
final int errno,
final DbEnv dbenv) {
super(s, errno, dbenv);
diff --git a/db/java/src/com/sleepycat/db/Environment.java b/db/java/src/com/sleepycat/db/Environment.java
index a2b8cd7c9..b79e30f84 100644
--- a/db/java/src/com/sleepycat/db/Environment.java
+++ b/db/java/src/com/sleepycat/db/Environment.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: Environment.java,v 1.6 2004/11/05 00:50:54 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Environment.java,v 12.16 2006/09/08 20:32:14 bostic Exp $
+ */
package com.sleepycat.db;
@@ -191,14 +191,22 @@ public class Environment {
}
/* Replication support */
- public int electReplicationMaster(int nsites,
- int nvotes,
- int priority,
- int timeout)
+ public void startReplication(DatabaseEntry cdata, boolean master)
+ throws DatabaseException {
+
+ dbenv.rep_start(cdata,
+ master ? DbConstants.DB_REP_MASTER : DbConstants.DB_REP_CLIENT);
+ }
+
+ public int electReplicationMaster(int nsites, int nvotes)
+ throws DatabaseException {
+ return dbenv.rep_elect(nsites, nvotes, 0 /* unused flags */);
+ }
+
+ public void flushReplication()
throws DatabaseException {
- return dbenv.rep_elect(nsites, nvotes, priority, timeout,
- 0 /* unused flags */);
+ dbenv.rep_flush();
}
public ReplicationStatus processReplicationMessage(DatabaseEntry control,
@@ -217,11 +225,38 @@ public class Environment {
return ReplicationStatus.getStatus(ret, cdata, wrappedID.envid, lsn);
}
- public void startReplication(DatabaseEntry cdata, boolean master)
+ public void setReplicationConfig(ReplicationConfig config, boolean onoff)
throws DatabaseException {
- dbenv.rep_start(cdata,
- master ? DbConstants.DB_REP_MASTER : DbConstants.DB_REP_CLIENT);
+ dbenv.rep_set_config(config.getFlag(), onoff);
+ }
+
+ public boolean getReplicationConfig(ReplicationConfig config)
+ throws DatabaseException {
+
+ return dbenv.rep_get_config(config.getFlag());
+ }
+
+ public void setReplicationTimeout(
+ final ReplicationTimeoutType type, final int replicationTimeout)
+ throws DatabaseException {
+ dbenv.rep_set_timeout(type.getId(), replicationTimeout);
+ }
+
+ public int getReplicationTimeout(final ReplicationTimeoutType type)
+ throws DatabaseException {
+ return dbenv.rep_get_timeout(type.getId());
+ }
+
+ public void syncReplication() throws DatabaseException {
+ dbenv.rep_sync(0);
+ }
+
+ /* Replication Manager interface */
+ public void replicationManagerStart(
+ int nthreads, ReplicationManagerStartPolicy disp)
+ throws DatabaseException {
+ dbenv.repmgr_start(nthreads, disp.getId());
}
/* Statistics */
@@ -243,6 +278,11 @@ public class Environment {
return dbenv.log_stat(StatsConfig.checkNull(config).getFlags());
}
+ public ReplicationHostAddress[] getReplicationSiteList()
+ throws DatabaseException {
+ return dbenv.repmgr_site_list();
+ }
+
public ReplicationStats getReplicationStats(StatsConfig config)
throws DatabaseException {
@@ -255,6 +295,12 @@ public class Environment {
return dbenv.lock_stat(StatsConfig.checkNull(config).getFlags());
}
+ public MutexStats getMutexStats(StatsConfig config)
+ throws DatabaseException {
+
+ return dbenv.mutex_stat(StatsConfig.checkNull(config).getFlags());
+ }
+
public TransactionStats getTransactionStats(StatsConfig config)
throws DatabaseException {
@@ -262,6 +308,11 @@ public class Environment {
}
/* Transaction management */
+ public Transaction beginCDSGroup() throws DatabaseException {
+
+ return new Transaction(dbenv.cdsgroup_begin());
+ }
+
public Transaction beginTransaction(final Transaction parent,
TransactionConfig config)
throws DatabaseException {
@@ -291,14 +342,20 @@ public class Environment {
return lsn;
}
+ public void logPrint(Transaction txn, String message)
+ throws DatabaseException {
+
+ dbenv.log_print((txn == null) ? null : txn.txn, message);
+ }
+
public java.io.File[] getArchiveLogFiles(boolean includeInUse)
throws DatabaseException {
- final String[] logNames =
- dbenv.log_archive(DbConstants.DB_ARCH_ABS |
+ final String[] logNames = dbenv.log_archive(DbConstants.DB_ARCH_ABS |
(includeInUse ? DbConstants.DB_ARCH_LOG : 0));
- final java.io.File[] logFiles = new java.io.File[logNames.length];
- for (int i = 0; i < logNames.length; i++)
+ final int len = (logNames == null) ? 0 : logNames.length;
+ final java.io.File[] logFiles = new java.io.File[len];
+ for (int i = 0; i < len; i++)
logFiles[i] = new java.io.File(logNames[i]);
return logFiles;
}
@@ -308,8 +365,9 @@ public class Environment {
final String home = dbenv.get_home();
final String[] dbNames = dbenv.log_archive(DbConstants.DB_ARCH_DATA);
- final java.io.File[] dbFiles = new java.io.File[dbNames.length];
- for (int i = 0; i < dbNames.length; i++)
+ final int len = (dbNames == null) ? 0 : dbNames.length;
+ final java.io.File[] dbFiles = new java.io.File[len];
+ for (int i = 0; i < len; i++)
dbFiles[i] = new java.io.File(home, dbNames[i]);
return dbFiles;
}
@@ -328,6 +386,18 @@ public class Environment {
continued ? DbConstants.DB_NEXT : DbConstants.DB_FIRST);
}
+ public void resetFileID(final String filename, boolean encrypted)
+ throws DatabaseException {
+
+ dbenv.fileid_reset(filename, encrypted ? DbConstants.DB_ENCRYPT : 0);
+ }
+
+ public void resetLogSequenceNumber(final String filename, boolean encrypted)
+ throws DatabaseException {
+
+ dbenv.lsn_reset(filename, encrypted ? DbConstants.DB_ENCRYPT : 0);
+ }
+
/* Panic the environment, or stop a panic. */
public void panic(boolean onoff)
throws DatabaseException {
diff --git a/db/java/src/com/sleepycat/db/EnvironmentConfig.java b/db/java/src/com/sleepycat/db/EnvironmentConfig.java
index ad663bb5b..ecaff061d 100644
--- a/db/java/src/com/sleepycat/db/EnvironmentConfig.java
+++ b/db/java/src/com/sleepycat/db/EnvironmentConfig.java
@@ -1,16 +1,17 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: EnvironmentConfig.java,v 1.15 2004/11/05 00:50:54 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: EnvironmentConfig.java,v 12.21 2006/09/08 20:32:14 bostic Exp $
+ */
package com.sleepycat.db;
import com.sleepycat.db.internal.DbConstants;
import com.sleepycat.db.internal.DbEnv;
+import com.sleepycat.db.ReplicationHostAddress;
public class EnvironmentConfig implements Cloneable {
/*
@@ -30,8 +31,9 @@ public class EnvironmentConfig implements Cloneable {
private long cacheSize = 0L;
private java.util.Vector dataDirs = new java.util.Vector();
private int envid = 0;
- private java.io.OutputStream errorStream = null;
private String errorPrefix = null;
+ private java.io.OutputStream errorStream = null;
+ private java.io.OutputStream messageStream = null;
private byte[][] lockConflicts = null;
private LockDetectMode lockDetectMode = LockDetectMode.NONE;
private int maxLocks = 0;
@@ -39,22 +41,36 @@ public class EnvironmentConfig implements Cloneable {
private int maxLockObjects = 0;
private int maxLogFileSize = 0;
private int logBufferSize = 0;
- private java.io.OutputStream messageStream = null;
private java.io.File logDirectory = null;
+ private int logFileMode = 0;
private int logRegionSize = 0;
+ private int maxMutexes = 0;
+ private int maxOpenFiles = 0;
+ private int maxWrite = 0;
+ private int maxWriteSleep = 0;
+ private int mutexAlignment = 0;
+ private int mutexIncrement = 0;
+ private int mutexTestAndSetSpins = 0;
private long mmapSize = 0L;
private String password = null;
private long replicationLimit = 0L;
+ private int replicationNSites = 0;
+ private int replicationPriority = 0;
+ private int replicationRequestMin = 0;
+ private int replicationRequestMax = 0;
private String rpcServer = null;
private long rpcClientTimeout = 0L;
private long rpcServerTimeout = 0L;
private long segmentId = 0L;
- private int testAndSetSpins = 0;
private long lockTimeout = 0L;
private int txnMaxActive = 0;
private long txnTimeout = 0L;
private java.util.Date txnTimestamp = null;
- private String temporaryDirectory = null;
+ private java.io.File temporaryDirectory = null;
+ private ReplicationManagerAckPolicy repmgrAckPolicy =
+ ReplicationManagerAckPolicy.ALL;
+ private ReplicationHostAddress repmgrLocalSiteAddr = null;
+ private java.util.Vector repmgrRemoteSites = new java.util.Vector();
/* Open flags */
private boolean allowCreate = false;
@@ -66,7 +82,7 @@ public class EnvironmentConfig implements Cloneable {
private boolean joinEnvironment = false;
private boolean lockDown = false;
private boolean isPrivate = false;
- private boolean readOnly = false;
+ private boolean register = false;
private boolean runRecovery = false;
private boolean runFatalRecovery = false;
private boolean systemMemory = false;
@@ -79,22 +95,26 @@ public class EnvironmentConfig implements Cloneable {
private boolean cdbLockAllDatabases = false;
private boolean directDatabaseIO = false;
private boolean directLogIO = false;
+ private boolean dsyncDatabases = false;
private boolean dsyncLog = false;
private boolean initializeRegions = false;
private boolean logAutoRemove = false;
private boolean logInMemory = false;
+ private boolean multiversion = false;
private boolean noLocking = false;
private boolean noMMap = false;
private boolean noPanic = false;
private boolean overwrite = false;
private boolean txnNoSync = false;
private boolean txnNotDurable = false;
+ private boolean txnSnapshot = false;
private boolean txnWriteNoSync = false;
private boolean yieldCPU = false;
/* Verbose Flags */
private boolean verboseDeadlock = false;
private boolean verboseRecovery = false;
+ private boolean verboseRegister = false;
private boolean verboseReplication = false;
private boolean verboseWaitsFor = false;
@@ -102,6 +122,7 @@ public class EnvironmentConfig implements Cloneable {
private ErrorHandler errorHandler = null;
private FeedbackHandler feedbackHandler = null;
private LogRecordHandler logRecordHandler = null;
+ private EventHandler eventHandler = null;
private MessageHandler messageHandler = null;
private PanicHandler panicHandler = null;
private ReplicationTransport replicationTransport = null;
@@ -141,12 +162,17 @@ public class EnvironmentConfig implements Cloneable {
return cdbLockAllDatabases;
}
- public void addDataDir(final String dataDir) {
+ public void addDataDir(final java.io.File dataDir) {
this.dataDirs.add(dataDir);
}
- public String[] getDataDirs() {
- final String[] dirs = new String[dataDirs.size()];
+ /* @deprecated */
+ public void addDataDir(final String dataDir) {
+ this.addDataDir(new java.io.File(dataDir));
+ }
+
+ public java.io.File[] getDataDirs() {
+ final java.io.File[] dirs = new java.io.File[dataDirs.size()];
dataDirs.copyInto(dirs);
return dirs;
}
@@ -167,6 +193,14 @@ public class EnvironmentConfig implements Cloneable {
return directLogIO;
}
+ public void setDsyncDatabases(final boolean dsyncDatabases) {
+ this.dsyncDatabases = dsyncDatabases;
+ }
+
+ public boolean getDsyncDatabases() {
+ return dsyncDatabases;
+ }
+
public void setDsyncLog(final boolean dsyncLog) {
this.dsyncLog = dsyncLog;
}
@@ -327,6 +361,42 @@ public class EnvironmentConfig implements Cloneable {
return logRecordHandler;
}
+ public void setEventHandler(final EventHandler eventHandler) {
+ this.eventHandler = eventHandler;
+ }
+
+ public EventHandler getEventHandler() {
+ return eventHandler;
+ }
+
+ public void setReplicationManagerAckPolicy(
+ final ReplicationManagerAckPolicy repmgrAckPolicy)
+ {
+ this.repmgrAckPolicy = repmgrAckPolicy;
+ }
+
+ public ReplicationManagerAckPolicy getReplicationManagerAckPolicy()
+ {
+ return repmgrAckPolicy;
+ }
+
+ public void setReplicationManagerLocalSite(
+ final ReplicationHostAddress repmgrLocalSiteAddr)
+ {
+ this.repmgrLocalSiteAddr = repmgrLocalSiteAddr;
+ }
+
+ public ReplicationHostAddress getReplicationManagerLocalSite()
+ {
+ return repmgrLocalSiteAddr;
+ }
+
+ public void replicationManagerAddRemoteSite(
+ final ReplicationHostAddress repmgrRemoteAddr)
+ {
+ this.repmgrRemoteSites.add(repmgrRemoteAddr);
+ }
+
public void setMaxLocks(final int maxLocks) {
this.maxLocks = maxLocks;
}
@@ -375,6 +445,14 @@ public class EnvironmentConfig implements Cloneable {
return logDirectory;
}
+ public void setLogFileMode(final int logFileMode) {
+ this.logFileMode = logFileMode;
+ }
+
+ public int getLogFileMode() {
+ return logFileMode;
+ }
+
public void setLogRegionSize(final int logRegionSize) {
this.logRegionSize = logRegionSize;
}
@@ -383,6 +461,27 @@ public class EnvironmentConfig implements Cloneable {
return logRegionSize;
}
+ public void setMaxOpenFiles(final int maxOpenFiles) {
+ this.maxOpenFiles = maxOpenFiles;
+ }
+
+ public int getMaxOpenFiles() {
+ return maxOpenFiles;
+ }
+
+ public void setMaxWrite(final int maxWrite, final int maxWriteSleep) {
+ this.maxWrite = maxWrite;
+ this.maxWriteSleep = maxWriteSleep;
+ }
+
+ public int getMaxWrite() {
+ return maxWrite;
+ }
+
+ public int getMaxWriteSleep() {
+ return maxWriteSleep;
+ }
+
public void setMessageHandler(final MessageHandler messageHandler) {
this.messageHandler = messageHandler;
}
@@ -415,6 +514,14 @@ public class EnvironmentConfig implements Cloneable {
return mode;
}
+ public void setMultiversion(final boolean multiversion) {
+ this.multiversion = multiversion;
+ }
+
+ public boolean getMultiversion() {
+ return multiversion;
+ }
+
public void setNoLocking(final boolean noLocking) {
this.noLocking = noLocking;
}
@@ -463,14 +570,6 @@ public class EnvironmentConfig implements Cloneable {
return isPrivate;
}
- public boolean getReadOnly() {
- return readOnly;
- }
-
- public void setReadOnly(final boolean readOnly) {
- this.readOnly = readOnly;
- }
-
public void setReplicationLimit(final long replicationLimit) {
this.replicationLimit = replicationLimit;
}
@@ -479,6 +578,22 @@ public class EnvironmentConfig implements Cloneable {
return replicationLimit;
}
+ public void setReplicationRequestMin(final int replicationRequestMin) {
+ this.replicationRequestMin = replicationRequestMin;
+ }
+
+ public int getReplicationRequestMin() {
+ return replicationRequestMin;
+ }
+
+ public void setReplicationRequestMax(final int replicationRequestMax) {
+ this.replicationRequestMax = replicationRequestMax;
+ }
+
+ public int getReplicationRequestMax() {
+ return replicationRequestMax;
+ }
+
public void setReplicationTransport(final int envid,
final ReplicationTransport replicationTransport) {
@@ -490,6 +605,14 @@ public class EnvironmentConfig implements Cloneable {
return replicationTransport;
}
+ public void setRegister(final boolean register) {
+ this.register = register;
+ }
+
+ public boolean getRegister() {
+ return register;
+ }
+
public void setRunFatalRecovery(final boolean runFatalRecovery) {
this.runFatalRecovery = runFatalRecovery;
}
@@ -533,20 +656,75 @@ public class EnvironmentConfig implements Cloneable {
return segmentId;
}
- public void setTemporaryDirectory(final String temporaryDirectory) {
+ public void setTemporaryDirectory(final java.io.File temporaryDirectory) {
this.temporaryDirectory = temporaryDirectory;
}
- public String getTemporaryDirectory() {
+ /* @deprecated */
+ public void setTemporaryDirectory(final String temporaryDirectory) {
+ this.setTemporaryDirectory(new java.io.File(temporaryDirectory));
+ }
+
+ public java.io.File getTemporaryDirectory() {
return temporaryDirectory;
}
- public void setTestAndSetSpins(final int testAndSetSpins) {
- this.testAndSetSpins = testAndSetSpins;
+ public void setMutexAlignment(final int mutexAlignment) {
+ this.mutexAlignment = mutexAlignment;
+ }
+
+ public int getMutexAlignment() {
+ return mutexAlignment;
+ }
+
+ public void setMutexIncrement(final int mutexIncrement) {
+ this.mutexIncrement = mutexIncrement;
+ }
+
+ public int getMutexIncrement() {
+ return mutexIncrement;
+ }
+
+ public void setMaxMutexes(final int maxMutexes) {
+ this.maxMutexes = maxMutexes;
+ }
+
+ public int getMaxMutexes() {
+ return maxMutexes;
+ }
+
+ public void setMutexTestAndSetSpins(final int mutexTestAndSetSpins) {
+ this.mutexTestAndSetSpins = mutexTestAndSetSpins;
+ }
+
+ public int getMutexTestAndSetSpins() {
+ return mutexTestAndSetSpins;
+ }
+
+ public void setReplicationNumSites(final int replicationNSites) {
+ this.replicationNSites = replicationNSites;
}
+ public int getReplicationNumSites() {
+ return replicationNSites;
+ }
+
+ public void setReplicationPriority(final int replicationPriority) {
+ this.replicationPriority = replicationPriority;
+ }
+
+ public int getReplicationPriority() {
+ return replicationPriority;
+ }
+
+ /* @deprecated Renamed setMutexTestAndSetSpins */
+ public void setTestAndSetSpins(final int mutexTestAndSetSpins) {
+ setMutexTestAndSetSpins(mutexTestAndSetSpins);
+ }
+
+ /* @deprecated Renamed getMutexTestAndSetSpins */
public int getTestAndSetSpins() {
- return testAndSetSpins;
+ return getMutexTestAndSetSpins();
}
public void setThreaded(final boolean threaded) {
@@ -581,6 +759,14 @@ public class EnvironmentConfig implements Cloneable {
return txnNotDurable;
}
+ public void setTxnSnapshot(final boolean txnSnapshot) {
+ this.txnSnapshot = txnSnapshot;
+ }
+
+ public boolean getTxnSnapshot() {
+ return txnSnapshot;
+ }
+
public void setTxnMaxActive(final int txnMaxActive) {
this.txnMaxActive = txnMaxActive;
}
@@ -645,6 +831,14 @@ public class EnvironmentConfig implements Cloneable {
return verboseRecovery;
}
+ public void setVerboseRegister(final boolean verboseRegister) {
+ this.verboseRegister = verboseRegister;
+ }
+
+ public boolean getVerboseRegister() {
+ return verboseRegister;
+ }
+
public void setVerboseReplication(final boolean verboseReplication) {
this.verboseReplication = verboseReplication;
}
@@ -700,7 +894,7 @@ public class EnvironmentConfig implements Cloneable {
openFlags |= joinEnvironment ? DbConstants.DB_JOINENV : 0;
openFlags |= lockDown ? DbConstants.DB_LOCKDOWN : 0;
openFlags |= isPrivate ? DbConstants.DB_PRIVATE : 0;
- openFlags |= readOnly ? DbConstants.DB_RDONLY : 0;
+ openFlags |= register ? DbConstants.DB_REGISTER : 0;
openFlags |= runRecovery ? DbConstants.DB_RECOVER : 0;
openFlags |= runFatalRecovery ? DbConstants.DB_RECOVER_FATAL : 0;
openFlags |= systemMemory ? DbConstants.DB_SYSTEM_MEM : 0;
@@ -756,8 +950,8 @@ public class EnvironmentConfig implements Cloneable {
if (rpcServer != oldConfig.rpcServer ||
rpcClientTimeout != oldConfig.rpcClientTimeout ||
rpcServerTimeout != oldConfig.rpcServerTimeout)
- dbenv.set_rpc_server(null, rpcServer,
- rpcClientTimeout, rpcServerTimeout, 0);
+ dbenv.set_rpc_server(rpcServer,
+ rpcClientTimeout, rpcServerTimeout, 0);
// We always set DB_TIME_NOTGRANTED in the Java API, because
// LockNotGrantedException extends DeadlockException, so there's no
@@ -780,6 +974,11 @@ public class EnvironmentConfig implements Cloneable {
if (!directLogIO && oldConfig.directLogIO)
offFlags |= DbConstants.DB_DIRECT_LOG;
+ if (dsyncDatabases && !oldConfig.dsyncDatabases)
+ onFlags |= DbConstants.DB_DSYNC_DB;
+ if (!dsyncDatabases && oldConfig.dsyncDatabases)
+ offFlags |= DbConstants.DB_DSYNC_DB;
+
if (dsyncLog && !oldConfig.dsyncLog)
onFlags |= DbConstants.DB_DSYNC_LOG;
if (!dsyncLog && oldConfig.dsyncLog)
@@ -800,6 +999,11 @@ public class EnvironmentConfig implements Cloneable {
if (!logInMemory && oldConfig.logInMemory)
offFlags |= DbConstants.DB_LOG_INMEMORY;
+ if (multiversion && !oldConfig.multiversion)
+ onFlags |= DbConstants.DB_MULTIVERSION;
+ if (!multiversion && oldConfig.multiversion)
+ offFlags |= DbConstants.DB_MULTIVERSION;
+
if (noLocking && !oldConfig.noLocking)
onFlags |= DbConstants.DB_NOLOCKING;
if (!noLocking && oldConfig.noLocking)
@@ -830,6 +1034,11 @@ public class EnvironmentConfig implements Cloneable {
if (!txnNotDurable && oldConfig.txnNotDurable)
offFlags |= DbConstants.DB_TXN_NOT_DURABLE;
+ if (txnSnapshot && !oldConfig.txnSnapshot)
+ onFlags |= DbConstants.DB_TXN_SNAPSHOT;
+ if (!txnSnapshot && oldConfig.txnSnapshot)
+ offFlags |= DbConstants.DB_TXN_SNAPSHOT;
+
if (txnWriteNoSync && !oldConfig.txnWriteNoSync)
onFlags |= DbConstants.DB_TXN_WRITE_NOSYNC;
if (!txnWriteNoSync && oldConfig.txnWriteNoSync)
@@ -846,45 +1055,44 @@ public class EnvironmentConfig implements Cloneable {
dbenv.set_flags(offFlags, false);
/* Verbose flags */
- onFlags = 0;
- offFlags = 0;
-
if (verboseDeadlock && !oldConfig.verboseDeadlock)
- onFlags |= DbConstants.DB_VERB_DEADLOCK;
+ dbenv.set_verbose(DbConstants.DB_VERB_DEADLOCK, true);
if (!verboseDeadlock && oldConfig.verboseDeadlock)
- offFlags |= DbConstants.DB_VERB_DEADLOCK;
+ dbenv.set_verbose(DbConstants.DB_VERB_DEADLOCK, false);
if (verboseRecovery && !oldConfig.verboseRecovery)
- onFlags |= DbConstants.DB_VERB_RECOVERY;
+ dbenv.set_verbose(DbConstants.DB_VERB_RECOVERY, true);
if (!verboseRecovery && oldConfig.verboseRecovery)
- offFlags |= DbConstants.DB_VERB_RECOVERY;
+ dbenv.set_verbose(DbConstants.DB_VERB_RECOVERY, false);
+
+ if (verboseRegister && !oldConfig.verboseRegister)
+ dbenv.set_verbose(DbConstants.DB_VERB_REGISTER, true);
+ if (!verboseRegister && oldConfig.verboseRegister)
+ dbenv.set_verbose(DbConstants.DB_VERB_REGISTER, false);
if (verboseReplication && !oldConfig.verboseReplication)
- onFlags |= DbConstants.DB_VERB_REPLICATION;
+ dbenv.set_verbose(DbConstants.DB_VERB_REPLICATION, true);
if (!verboseReplication && oldConfig.verboseReplication)
- offFlags |= DbConstants.DB_VERB_REPLICATION;
+ dbenv.set_verbose(DbConstants.DB_VERB_REPLICATION, false);
if (verboseWaitsFor && !oldConfig.verboseWaitsFor)
- onFlags |= DbConstants.DB_VERB_WAITSFOR;
+ dbenv.set_verbose(DbConstants.DB_VERB_WAITSFOR, true);
if (!verboseWaitsFor && oldConfig.verboseWaitsFor)
- offFlags |= DbConstants.DB_VERB_WAITSFOR;
-
- if (onFlags != 0)
- dbenv.set_verbose(onFlags, true);
- if (offFlags != 0)
- dbenv.set_verbose(offFlags, false);
+ dbenv.set_verbose(DbConstants.DB_VERB_WAITSFOR, false);
/* Callbacks */
if (feedbackHandler != oldConfig.feedbackHandler)
dbenv.set_feedback(feedbackHandler);
if (logRecordHandler != oldConfig.logRecordHandler)
dbenv.set_app_dispatch(logRecordHandler);
+ if (eventHandler != oldConfig.eventHandler)
+ dbenv.set_event_notify(eventHandler);
if (messageHandler != oldConfig.messageHandler)
dbenv.set_msgcall(messageHandler);
if (panicHandler != oldConfig.panicHandler)
dbenv.set_paniccall(panicHandler);
if (replicationTransport != oldConfig.replicationTransport)
- dbenv.set_rep_transport(envid, replicationTransport);
+ dbenv.rep_set_transport(envid, replicationTransport);
/* Other settings */
if (cacheSize != oldConfig.cacheSize ||
@@ -892,9 +1100,9 @@ public class EnvironmentConfig implements Cloneable {
dbenv.set_cachesize(cacheSize, cacheCount);
for (final java.util.Enumeration e = dataDirs.elements();
e.hasMoreElements();) {
- final String dir = (String)e.nextElement();
+ final java.io.File dir = (java.io.File)e.nextElement();
if (!oldConfig.dataDirs.contains(dir))
- dbenv.set_data_dir(dir);
+ dbenv.set_data_dir(dir.toString());
}
if (!lockConflictsEqual(lockConflicts, oldConfig.lockConflicts))
dbenv.set_lk_conflicts(lockConflicts);
@@ -913,8 +1121,15 @@ public class EnvironmentConfig implements Cloneable {
if (logDirectory != oldConfig.logDirectory && logDirectory != null &&
!logDirectory.equals(oldConfig.logDirectory))
dbenv.set_lg_dir(logDirectory.toString());
+ if (logFileMode != oldConfig.logFileMode)
+ dbenv.set_lg_filemode(logFileMode);
if (logRegionSize != oldConfig.logRegionSize)
dbenv.set_lg_regionmax(logRegionSize);
+ if (maxOpenFiles != oldConfig.maxOpenFiles)
+ dbenv.set_mp_max_openfd(maxOpenFiles);
+ if (maxWrite != oldConfig.maxWrite ||
+ maxWriteSleep != oldConfig.maxWriteSleep)
+ dbenv.set_mp_max_write(maxWrite, maxWriteSleep);
if (messageStream != oldConfig.messageStream)
dbenv.set_message_stream(messageStream);
if (mmapSize != oldConfig.mmapSize)
@@ -922,11 +1137,24 @@ public class EnvironmentConfig implements Cloneable {
if (password != null)
dbenv.set_encrypt(password, DbConstants.DB_ENCRYPT_AES);
if (replicationLimit != oldConfig.replicationLimit)
- dbenv.set_rep_limit(replicationLimit);
+ dbenv.rep_set_limit(replicationLimit);
+ if (replicationRequestMin != oldConfig.replicationRequestMin ||
+ replicationRequestMax != oldConfig.replicationRequestMax)
+ dbenv.set_rep_request(replicationRequestMin, replicationRequestMax);
if (segmentId != oldConfig.segmentId)
dbenv.set_shm_key(segmentId);
- if (testAndSetSpins != oldConfig.testAndSetSpins)
- dbenv.set_tas_spins(testAndSetSpins);
+ if (mutexAlignment != oldConfig.mutexAlignment)
+ dbenv.mutex_set_align(mutexAlignment);
+ if (mutexIncrement != oldConfig.mutexIncrement)
+ dbenv.mutex_set_increment(mutexIncrement);
+ if (maxMutexes != oldConfig.maxMutexes)
+ dbenv.mutex_set_max(maxMutexes);
+ if (mutexTestAndSetSpins != oldConfig.mutexTestAndSetSpins)
+ dbenv.mutex_set_tas_spins(mutexTestAndSetSpins);
+ if (replicationNSites != oldConfig.replicationNSites)
+ dbenv.rep_set_nsites(replicationNSites);
+ if (replicationPriority != oldConfig.replicationPriority)
+ dbenv.rep_set_priority(replicationPriority);
if (lockTimeout != oldConfig.lockTimeout)
dbenv.set_timeout(lockTimeout, DbConstants.DB_SET_LOCK_TIMEOUT);
if (txnMaxActive != oldConfig.txnMaxActive)
@@ -939,7 +1167,21 @@ public class EnvironmentConfig implements Cloneable {
if (temporaryDirectory != oldConfig.temporaryDirectory &&
temporaryDirectory != null &&
!temporaryDirectory.equals(oldConfig.temporaryDirectory))
- dbenv.set_tmp_dir(temporaryDirectory);
+ dbenv.set_tmp_dir(temporaryDirectory.toString());
+ if (repmgrAckPolicy != oldConfig.repmgrAckPolicy)
+ dbenv.repmgr_set_ack_policy(repmgrAckPolicy.getId());
+ if (repmgrLocalSiteAddr != oldConfig.repmgrLocalSiteAddr) {
+ dbenv.repmgr_set_local_site(
+ repmgrLocalSiteAddr.host, repmgrLocalSiteAddr.port, 0);
+ }
+ for (java.util.Enumeration elems = repmgrRemoteSites.elements();
+ elems.hasMoreElements();)
+ {
+ ReplicationHostAddress nextAddr =
+ (ReplicationHostAddress)elems.nextElement();
+ dbenv.repmgr_add_remote_site(nextAddr.host, nextAddr.port,
+ nextAddr.isPeer ? DbConstants.DB_REPMGR_PEER : 0);
+ }
}
/* package */
@@ -957,7 +1199,7 @@ public class EnvironmentConfig implements Cloneable {
joinEnvironment = ((openFlags & DbConstants.DB_JOINENV) != 0);
lockDown = ((openFlags & DbConstants.DB_LOCKDOWN) != 0);
isPrivate = ((openFlags & DbConstants.DB_PRIVATE) != 0);
- readOnly = ((openFlags & DbConstants.DB_RDONLY) != 0);
+ register = ((openFlags & DbConstants.DB_REGISTER) != 0);
runRecovery = ((openFlags & DbConstants.DB_RECOVER) != 0);
runFatalRecovery = ((openFlags & DbConstants.DB_RECOVER_FATAL) != 0);
systemMemory = ((openFlags & DbConstants.DB_SYSTEM_MEM) != 0);
@@ -972,22 +1214,26 @@ public class EnvironmentConfig implements Cloneable {
cdbLockAllDatabases = ((envFlags & DbConstants.DB_CDB_ALLDB) != 0);
directDatabaseIO = ((envFlags & DbConstants.DB_DIRECT_DB) != 0);
directLogIO = ((envFlags & DbConstants.DB_DIRECT_LOG) != 0);
+ dsyncDatabases = ((envFlags & DbConstants.DB_DSYNC_DB) != 0);
dsyncLog = ((envFlags & DbConstants.DB_DSYNC_LOG) != 0);
initializeRegions = ((envFlags & DbConstants.DB_REGION_INIT) != 0);
logAutoRemove = ((envFlags & DbConstants.DB_LOG_AUTOREMOVE) != 0);
logInMemory = ((envFlags & DbConstants.DB_LOG_INMEMORY) != 0);
+ multiversion = ((envFlags & DbConstants.DB_MULTIVERSION) != 0);
noLocking = ((envFlags & DbConstants.DB_NOLOCKING) != 0);
noMMap = ((envFlags & DbConstants.DB_NOMMAP) != 0);
noPanic = ((envFlags & DbConstants.DB_NOPANIC) != 0);
overwrite = ((envFlags & DbConstants.DB_OVERWRITE) != 0);
txnNoSync = ((envFlags & DbConstants.DB_TXN_NOSYNC) != 0);
txnNotDurable = ((envFlags & DbConstants.DB_TXN_NOT_DURABLE) != 0);
+ txnSnapshot = ((envFlags & DbConstants.DB_TXN_SNAPSHOT) != 0);
txnWriteNoSync = ((envFlags & DbConstants.DB_TXN_WRITE_NOSYNC) != 0);
yieldCPU = ((envFlags & DbConstants.DB_YIELDCPU) != 0);
/* Verbose flags */
verboseDeadlock = dbenv.get_verbose(DbConstants.DB_VERB_DEADLOCK);
verboseRecovery = dbenv.get_verbose(DbConstants.DB_VERB_RECOVERY);
+ verboseRegister = dbenv.get_verbose(DbConstants.DB_VERB_REGISTER);
verboseReplication = dbenv.get_verbose(DbConstants.DB_VERB_REPLICATION);
verboseWaitsFor = dbenv.get_verbose(DbConstants.DB_VERB_WAITSFOR);
@@ -995,6 +1241,7 @@ public class EnvironmentConfig implements Cloneable {
errorHandler = dbenv.get_errcall();
feedbackHandler = dbenv.get_feedback();
logRecordHandler = dbenv.get_app_dispatch();
+ eventHandler = dbenv.get_event_notify();
messageHandler = dbenv.get_msgcall();
panicHandler = dbenv.get_paniccall();
// XXX: replicationTransport and envid aren't available?
@@ -1004,6 +1251,9 @@ public class EnvironmentConfig implements Cloneable {
cacheSize = dbenv.get_cachesize();
cacheCount = dbenv.get_cachesize_ncache();
mmapSize = dbenv.get_mp_mmapsize();
+ maxOpenFiles = dbenv.get_mp_max_openfd();
+ maxWrite = dbenv.get_mp_max_write();
+ maxWriteSleep = dbenv.get_mp_max_write_sleep();
}
String[] dataDirArray = dbenv.get_data_dirs();
@@ -1012,7 +1262,7 @@ public class EnvironmentConfig implements Cloneable {
dataDirs = new java.util.Vector(dataDirArray.length);
dataDirs.setSize(dataDirArray.length);
for (int i = 0; i < dataDirArray.length; i++)
- dataDirs.set(i, dataDirArray[i]);
+ dataDirs.set(i, new java.io.File(dataDirArray[i]));
errorPrefix = dbenv.get_errpfx();
errorStream = dbenv.get_error_stream();
@@ -1039,6 +1289,7 @@ public class EnvironmentConfig implements Cloneable {
logBufferSize = dbenv.get_lg_bsize();
logDirectory = (dbenv.get_lg_dir() == null) ? null :
new java.io.File(dbenv.get_lg_dir());
+ logFileMode = dbenv.get_lg_filemode();
logRegionSize = dbenv.get_lg_regionmax();
} else {
maxLogFileSize = 0;
@@ -1052,9 +1303,12 @@ public class EnvironmentConfig implements Cloneable {
password = (dbenv.get_encrypt_flags() == 0) ? null : "";
if (initializeReplication) {
- replicationLimit = dbenv.get_rep_limit();
+ replicationLimit = dbenv.rep_get_limit();
+ // XXX: no way to find out replicationRequest{Min,Max}
} else {
replicationLimit = 0L;
+ replicationRequestMin = 0;
+ replicationRequestMax = 0;
}
// XXX: no way to find RPC server?
@@ -1063,7 +1317,12 @@ public class EnvironmentConfig implements Cloneable {
rpcServerTimeout = 0;
segmentId = dbenv.get_shm_key();
- testAndSetSpins = dbenv.get_tas_spins();
+ mutexAlignment = dbenv.mutex_get_align();
+ mutexIncrement = dbenv.mutex_get_increment();
+ maxMutexes = dbenv.mutex_get_max();
+ mutexTestAndSetSpins = dbenv.mutex_get_tas_spins();
+ replicationNSites = dbenv.rep_get_nsites();
+ replicationPriority = dbenv.rep_get_priority();
if (transactional) {
txnMaxActive = dbenv.get_tx_max();
final long txnTimestampSeconds = dbenv.get_tx_timestamp();
@@ -1075,6 +1334,6 @@ public class EnvironmentConfig implements Cloneable {
txnMaxActive = 0;
txnTimestamp = null;
}
- temporaryDirectory = dbenv.get_tmp_dir();
+ temporaryDirectory = new java.io.File(dbenv.get_tmp_dir());
}
}
diff --git a/db/java/src/com/sleepycat/db/ErrorHandler.java b/db/java/src/com/sleepycat/db/ErrorHandler.java
index ad4a9e5c4..bdec4c7d2 100644
--- a/db/java/src/com/sleepycat/db/ErrorHandler.java
+++ b/db/java/src/com/sleepycat/db/ErrorHandler.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ErrorHandler.java,v 1.2 2004/04/20 20:45:11 mjc Exp $
+ * $Id: ErrorHandler.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/EventHandler.java b/db/java/src/com/sleepycat/db/EventHandler.java
new file mode 100644
index 000000000..b92d9f89e
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/EventHandler.java
@@ -0,0 +1,14 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: EventHandler.java,v 1.2 2006/08/24 14:46:08 bostic Exp $
+ */
+package com.sleepycat.db;
+import com.sleepycat.db.EventType;
+
+public interface EventHandler {
+ int handleEvent(EventType event);
+}
diff --git a/db/java/src/com/sleepycat/db/EventType.java b/db/java/src/com/sleepycat/db/EventType.java
new file mode 100644
index 000000000..98e479629
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/EventType.java
@@ -0,0 +1,68 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: EventType.java,v 1.3 2006/09/10 01:40:07 alexg Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public final class EventType {
+
+ public static final EventType PANIC =
+ new EventType("PANIC", DbConstants.DB_EVENT_PANIC);
+
+ public static final EventType REP_CLIENT =
+ new EventType("REP_CLIENT", DbConstants.DB_EVENT_REP_CLIENT);
+
+ public static final EventType REP_MASTER =
+ new EventType("REP_MASTER", DbConstants.DB_EVENT_REP_MASTER);
+
+ public static final EventType REP_NEW_MASTER =
+ new EventType("REP_NEW_MASTER", DbConstants.DB_EVENT_REP_NEWMASTER);
+
+ public static final EventType REP_STARTUPDONE =
+ new EventType("REP_STARTUPDONE", DbConstants.DB_EVENT_REP_STARTUPDONE);
+
+ public static final EventType WRITE_FAILED =
+ new EventType("WRITE_FAILED", DbConstants.DB_EVENT_WRITE_FAILED);
+
+ /* package */
+ public static EventType fromInt(int type) {
+ switch(type) {
+ case DbConstants.DB_EVENT_PANIC:
+ return PANIC;
+ case DbConstants.DB_EVENT_REP_CLIENT:
+ return REP_CLIENT;
+ case DbConstants.DB_EVENT_REP_MASTER:
+ return REP_MASTER;
+ case DbConstants.DB_EVENT_REP_NEWMASTER:
+ return REP_NEW_MASTER;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown event type: " + type);
+ }
+ }
+
+ private String statusName;
+ private int id;
+
+ private EventType(final String statusName, final int id) {
+ this.statusName = statusName;
+ this.id = id;
+ }
+
+ /* package */
+ int getId() {
+ return id;
+ }
+
+ public String toString() {
+ return "EventType." + statusName;
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/db/FeedbackHandler.java b/db/java/src/com/sleepycat/db/FeedbackHandler.java
index 96b2e6eb2..4a733965c 100644
--- a/db/java/src/com/sleepycat/db/FeedbackHandler.java
+++ b/db/java/src/com/sleepycat/db/FeedbackHandler.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: FeedbackHandler.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
+ * $Id: FeedbackHandler.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/HashStats.java b/db/java/src/com/sleepycat/db/HashStats.java
index 3e04452b7..d56dfb488 100644
--- a/db/java/src/com/sleepycat/db/HashStats.java
+++ b/db/java/src/com/sleepycat/db/HashStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class HashStats extends DatabaseStats {
// no public constructor
- protected HashStats() {}
+ /* package */ HashStats() {}
private int hash_magic;
public int getMagic() {
diff --git a/db/java/src/com/sleepycat/db/Hasher.java b/db/java/src/com/sleepycat/db/Hasher.java
index cc46a8549..cc3d440ad 100644
--- a/db/java/src/com/sleepycat/db/Hasher.java
+++ b/db/java/src/com/sleepycat/db/Hasher.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: Hasher.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: Hasher.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/JoinConfig.java b/db/java/src/com/sleepycat/db/JoinConfig.java
index 41689767c..c05c66867 100644
--- a/db/java/src/com/sleepycat/db/JoinConfig.java
+++ b/db/java/src/com/sleepycat/db/JoinConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: JoinConfig.java,v 1.4 2004/09/28 19:30:37 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: JoinConfig.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/JoinCursor.java b/db/java/src/com/sleepycat/db/JoinCursor.java
index 5527a6177..8cc90a57d 100644
--- a/db/java/src/com/sleepycat/db/JoinCursor.java
+++ b/db/java/src/com/sleepycat/db/JoinCursor.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: JoinCursor.java,v 1.2 2004/04/09 15:08:38 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: JoinCursor.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/KeyRange.java b/db/java/src/com/sleepycat/db/KeyRange.java
index 5ddbb123d..feb37b5be 100644
--- a/db/java/src/com/sleepycat/db/KeyRange.java
+++ b/db/java/src/com/sleepycat/db/KeyRange.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: KeyRange.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: KeyRange.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/Lock.java b/db/java/src/com/sleepycat/db/Lock.java
index 64559e359..9f4a8f7d6 100644
--- a/db/java/src/com/sleepycat/db/Lock.java
+++ b/db/java/src/com/sleepycat/db/Lock.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: Lock.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: Lock.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
@@ -14,9 +14,9 @@ import com.sleepycat.db.internal.DbLock;
public final class Lock {
private DbLock dbLock;
- private Lock(final DbLock dblock) {
- this.dbLock = dbLock;
- dbLock.wrapper = this;
+ private Lock(final DbLock inLock) {
+ this.dbLock = inLock;
+ inLock.wrapper = this;
}
/* package */
diff --git a/db/java/src/com/sleepycat/db/LockDetectMode.java b/db/java/src/com/sleepycat/db/LockDetectMode.java
index ac163cad3..2e20e6cf9 100644
--- a/db/java/src/com/sleepycat/db/LockDetectMode.java
+++ b/db/java/src/com/sleepycat/db/LockDetectMode.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: LockDetectMode.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: LockDetectMode.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/LockMode.java b/db/java/src/com/sleepycat/db/LockMode.java
index ab03d49a5..7daaefc94 100644
--- a/db/java/src/com/sleepycat/db/LockMode.java
+++ b/db/java/src/com/sleepycat/db/LockMode.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: LockMode.java,v 1.2 2004/04/09 15:08:38 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: LockMode.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
@@ -22,13 +22,18 @@ public final class LockMode {
public static final LockMode DEFAULT =
new LockMode("DEFAULT", 0);
- public static final LockMode DIRTY_READ =
- new LockMode("DIRTY_READ", DbConstants.DB_DIRTY_READ);
- public static final LockMode DEGREE_2 =
- new LockMode("DEGREE_2", DbConstants.DB_DEGREE_2);
+ public static final LockMode READ_UNCOMMITTED =
+ new LockMode("READ_UNCOMMITTED", DbConstants.DB_READ_UNCOMMITTED);
+ public static final LockMode READ_COMMITTED =
+ new LockMode("READ_COMMITTED", DbConstants.DB_READ_COMMITTED);
public static final LockMode RMW =
new LockMode("RMW", DbConstants.DB_RMW);
+ /** @deprecated */
+ public static final LockMode DIRTY_READ = READ_UNCOMMITTED;
+ /** @deprecated */
+ public static final LockMode DEGREE_2 = READ_COMMITTED;
+
public String toString() {
return "LockMode." + lockModeName;
}
diff --git a/db/java/src/com/sleepycat/db/LockNotGrantedException.java b/db/java/src/com/sleepycat/db/LockNotGrantedException.java
index 6ce32a715..91d6822a1 100644
--- a/db/java/src/com/sleepycat/db/LockNotGrantedException.java
+++ b/db/java/src/com/sleepycat/db/LockNotGrantedException.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LockNotGrantedException.java,v 1.3 2004/11/05 00:50:55 mjc Exp $
+ * $Id: LockNotGrantedException.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
@@ -20,7 +19,7 @@ public class LockNotGrantedException extends DeadlockException {
private DatabaseEntry obj;
private int op;
- protected LockNotGrantedException(final String message,
+ /* package */ LockNotGrantedException(final String message,
final int op,
final int mode,
final DatabaseEntry obj,
diff --git a/db/java/src/com/sleepycat/db/LockOperation.java b/db/java/src/com/sleepycat/db/LockOperation.java
index 4bda73728..e6b181356 100644
--- a/db/java/src/com/sleepycat/db/LockOperation.java
+++ b/db/java/src/com/sleepycat/db/LockOperation.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: LockOperation.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: LockOperation.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/LockRequest.java b/db/java/src/com/sleepycat/db/LockRequest.java
index d5d5a8fa3..41525f1ef 100644
--- a/db/java/src/com/sleepycat/db/LockRequest.java
+++ b/db/java/src/com/sleepycat/db/LockRequest.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LockRequest.java,v 1.3 2004/07/26 17:01:51 mjc Exp $
+ * $Id: LockRequest.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/LockRequestMode.java b/db/java/src/com/sleepycat/db/LockRequestMode.java
index 14f49d5c6..4af12d908 100644
--- a/db/java/src/com/sleepycat/db/LockRequestMode.java
+++ b/db/java/src/com/sleepycat/db/LockRequestMode.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: LockRequestMode.java,v 1.2 2004/07/26 17:01:51 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: LockRequestMode.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/LockStats.java b/db/java/src/com/sleepycat/db/LockStats.java
index a16a22616..f22c6c45c 100644
--- a/db/java/src/com/sleepycat/db/LockStats.java
+++ b/db/java/src/com/sleepycat/db/LockStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class LockStats {
// no public constructor
- protected LockStats() {}
+ /* package */ LockStats() {}
private int st_id;
public int getId() {
@@ -73,11 +73,6 @@ public class LockStats {
return st_maxnobjects;
}
- private int st_nconflicts;
- public int getNumConflicts() {
- return st_nconflicts;
- }
-
private int st_nrequests;
public int getNumRequests() {
return st_nrequests;
@@ -88,9 +83,24 @@ public class LockStats {
return st_nreleases;
}
- private int st_nnowaits;
- public int getNumNowaits() {
- return st_nnowaits;
+ private int st_nupgrade;
+ public int getNumUpgrade() {
+ return st_nupgrade;
+ }
+
+ private int st_ndowngrade;
+ public int getNumDowngrade() {
+ return st_ndowngrade;
+ }
+
+ private int st_lock_wait;
+ public int getLockWait() {
+ return st_lock_wait;
+ }
+
+ private int st_lock_nowait;
+ public int getLockNowait() {
+ return st_lock_nowait;
}
private int st_ndeadlocks;
@@ -147,10 +157,12 @@ public class LockStats {
+ "\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_nupgrade=" + st_nupgrade
+ + "\n st_ndowngrade=" + st_ndowngrade
+ + "\n st_lock_wait=" + st_lock_wait
+ + "\n st_lock_nowait=" + st_lock_nowait
+ "\n st_ndeadlocks=" + st_ndeadlocks
+ "\n st_locktimeout=" + st_locktimeout
+ "\n st_nlocktimeouts=" + st_nlocktimeouts
diff --git a/db/java/src/com/sleepycat/db/LogCursor.java b/db/java/src/com/sleepycat/db/LogCursor.java
index e15576ed9..0957c3a48 100644
--- a/db/java/src/com/sleepycat/db/LogCursor.java
+++ b/db/java/src/com/sleepycat/db/LogCursor.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LogCursor.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: LogCursor.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
@@ -13,9 +13,9 @@ import com.sleepycat.db.internal.DbConstants;
import com.sleepycat.db.internal.DbLogc;
public class LogCursor {
- protected DbLogc logc;
+ /* package */ DbLogc logc;
- protected LogCursor(final DbLogc logc) {
+ /* package */ LogCursor(final DbLogc logc) {
this.logc = logc;
}
diff --git a/db/java/src/com/sleepycat/db/LogRecordHandler.java b/db/java/src/com/sleepycat/db/LogRecordHandler.java
index db4d6368c..f1c60a8eb 100644
--- a/db/java/src/com/sleepycat/db/LogRecordHandler.java
+++ b/db/java/src/com/sleepycat/db/LogRecordHandler.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LogRecordHandler.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
+ * $Id: LogRecordHandler.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/LogSequenceNumber.java b/db/java/src/com/sleepycat/db/LogSequenceNumber.java
index 7d1d09313..fd49c894b 100644
--- a/db/java/src/com/sleepycat/db/LogSequenceNumber.java
+++ b/db/java/src/com/sleepycat/db/LogSequenceNumber.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: LogSequenceNumber.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: LogSequenceNumber.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/LogStats.java b/db/java/src/com/sleepycat/db/LogStats.java
index aacf1e8f0..088d636a8 100644
--- a/db/java/src/com/sleepycat/db/LogStats.java
+++ b/db/java/src/com/sleepycat/db/LogStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class LogStats {
// no public constructor
- protected LogStats() {}
+ /* package */ LogStats() {}
private int st_magic;
public int getMagic() {
@@ -38,6 +38,11 @@ public class LogStats {
return st_lg_size;
}
+ private int st_record;
+ public int getRecord() {
+ return st_record;
+ }
+
private int st_w_bytes;
public int getWBytes() {
return st_w_bytes;
@@ -68,6 +73,11 @@ public class LogStats {
return st_wcount_fill;
}
+ private int st_rcount;
+ public int getRCount() {
+ return st_rcount;
+ }
+
private int st_scount;
public int getSCount() {
return st_scount;
@@ -125,12 +135,14 @@ public class LogStats {
+ "\n st_mode=" + st_mode
+ "\n st_lg_bsize=" + st_lg_bsize
+ "\n st_lg_size=" + st_lg_size
+ + "\n st_record=" + st_record
+ "\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_rcount=" + st_rcount
+ "\n st_scount=" + st_scount
+ "\n st_region_wait=" + st_region_wait
+ "\n st_region_nowait=" + st_region_nowait
diff --git a/db/java/src/com/sleepycat/db/MemoryException.java b/db/java/src/com/sleepycat/db/MemoryException.java
index 7c612494f..34e9729d6 100644
--- a/db/java/src/com/sleepycat/db/MemoryException.java
+++ b/db/java/src/com/sleepycat/db/MemoryException.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MemoryException.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: MemoryException.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
@@ -15,7 +14,7 @@ public class MemoryException extends DatabaseException {
private DatabaseEntry dbt = null;
private String message;
- protected MemoryException(final String s,
+ /* package */ MemoryException(final String s,
final DatabaseEntry dbt,
final int errno,
final DbEnv dbenv) {
diff --git a/db/java/src/com/sleepycat/db/MessageHandler.java b/db/java/src/com/sleepycat/db/MessageHandler.java
index a28e35820..769f6cbaf 100644
--- a/db/java/src/com/sleepycat/db/MessageHandler.java
+++ b/db/java/src/com/sleepycat/db/MessageHandler.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MessageHandler.java,v 1.2 2004/04/20 20:45:11 mjc Exp $
+ * $Id: MessageHandler.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/MultipleDataEntry.java b/db/java/src/com/sleepycat/db/MultipleDataEntry.java
index 17c2af473..7b2bb68c5 100644
--- a/db/java/src/com/sleepycat/db/MultipleDataEntry.java
+++ b/db/java/src/com/sleepycat/db/MultipleDataEntry.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: MultipleDataEntry.java,v 1.2 2004/04/09 15:08:38 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleDataEntry.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
@@ -27,8 +27,13 @@ public class MultipleDataEntry extends MultipleEntry {
super(data, offset, size);
}
+ /**
+ * Return the bulk retrieval flag and reset the entry position so that the
+ * next set of key/data can be returned.
+ */
/* package */
int getMultiFlag() {
+ pos = 0;
return DbConstants.DB_MULTIPLE;
}
diff --git a/db/java/src/com/sleepycat/db/MultipleEntry.java b/db/java/src/com/sleepycat/db/MultipleEntry.java
index f3025a5e5..fbaaa090b 100644
--- a/db/java/src/com/sleepycat/db/MultipleEntry.java
+++ b/db/java/src/com/sleepycat/db/MultipleEntry.java
@@ -1,23 +1,28 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: MultipleEntry.java,v 1.4 2004/09/28 19:30:37 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleEntry.java,v 12.6 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
import com.sleepycat.db.internal.DbConstants;
+import java.nio.ByteBuffer;
+
public abstract class MultipleEntry extends DatabaseEntry {
- protected int pos;
+ /* package */ int pos;
- protected MultipleEntry(final byte[] data, final int offset, final int size) {
+ /* package */ MultipleEntry(final byte[] data, final int offset, final int size) {
super(data, offset, size);
- setUserBuffer(data.length - offset, true);
- this.flags |= DbConstants.DB_DBT_USERMEM;
+ setUserBuffer((data != null) ? (data.length - offset) : 0, true);
+ }
+
+ /* package */ MultipleEntry(final ByteBuffer data) {
+ super(data);
}
public void setUserBuffer(final int length, final boolean usermem) {
diff --git a/db/java/src/com/sleepycat/db/MultipleKeyDataEntry.java b/db/java/src/com/sleepycat/db/MultipleKeyDataEntry.java
index 17234b640..4b1985467 100644
--- a/db/java/src/com/sleepycat/db/MultipleKeyDataEntry.java
+++ b/db/java/src/com/sleepycat/db/MultipleKeyDataEntry.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: MultipleKeyDataEntry.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleKeyDataEntry.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
@@ -27,8 +27,13 @@ public class MultipleKeyDataEntry extends MultipleEntry {
super(data, offset, size);
}
+ /**
+ * Return the bulk retrieval flag and reset the entry position so that the
+ * next set of key/data can be returned.
+ */
/* package */
int getMultiFlag() {
+ pos = 0;
return DbConstants.DB_MULTIPLE_KEY;
}
diff --git a/db/java/src/com/sleepycat/db/MultipleKeyNIODataEntry.java b/db/java/src/com/sleepycat/db/MultipleKeyNIODataEntry.java
new file mode 100644
index 000000000..53a61fff6
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/MultipleKeyNIODataEntry.java
@@ -0,0 +1,74 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleKeyNIODataEntry.java,v 1.3 2006/09/08 20:32:14 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+import com.sleepycat.db.internal.DbUtil;
+
+import java.nio.ByteBuffer;
+
+public class MultipleKeyNIODataEntry extends MultipleEntry {
+ public MultipleKeyNIODataEntry() {
+ super(null);
+ }
+
+ public MultipleKeyNIODataEntry(final ByteBuffer data) {
+ super(data);
+ }
+
+ /**
+ * Return the bulk retrieval flag and reset the entry position so that the
+ * next set of key/data can be returned.
+ */
+ /* package */
+ int getMultiFlag() {
+ pos = 0;
+ return DbConstants.DB_MULTIPLE_KEY;
+ }
+
+ public boolean next(final DatabaseEntry key, final DatabaseEntry data) {
+ byte[] intarr;
+ int saveoffset;
+ if (pos == 0)
+ pos = ulen - INT32SZ;
+
+ // pull the offsets out of the ByteBuffer.
+ if(this.data_nio.capacity() < 16)
+ return false;
+ intarr = new byte[16];
+ saveoffset = this.data_nio.position();
+ this.data_nio.position(pos - INT32SZ*3);
+ this.data_nio.get(intarr, 0, 16);
+ this.data_nio.position(saveoffset);
+
+ final int keyoff = DbUtil.array2int(intarr, 12);
+
+ // crack out the key and data offsets and lengths.
+ if (keyoff < 0)
+ return false;
+
+ final int keysz = DbUtil.array2int(intarr, 8);
+ final int dataoff = DbUtil.array2int(intarr, 4);
+ final int datasz = DbUtil.array2int(intarr, 0);
+
+ // move the position to one before the last offset read.
+ pos -= INT32SZ*4;
+
+ key.setDataNIO(this.data_nio);
+ key.setOffset(keyoff);
+ key.setSize(keysz);
+
+ data.setDataNIO(this.data_nio);
+ data.setOffset(dataoff);
+ data.setSize(datasz);
+
+ return true;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/MultipleNIODataEntry.java b/db/java/src/com/sleepycat/db/MultipleNIODataEntry.java
new file mode 100644
index 000000000..2052b6b2f
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/MultipleNIODataEntry.java
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleNIODataEntry.java,v 1.3 2006/09/08 20:32:14 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+import com.sleepycat.db.internal.DbUtil;
+
+import java.nio.ByteBuffer;
+
+public class MultipleNIODataEntry extends MultipleEntry {
+ public MultipleNIODataEntry() {
+ super(null);
+ }
+
+ public MultipleNIODataEntry(final ByteBuffer data) {
+ super(data);
+ }
+
+ /**
+ * Return the bulk retrieval flag and reset the entry position so that the
+ * next set of key/data can be returned.
+ */
+ /* package */
+ int getMultiFlag() {
+ pos = 0;
+ return DbConstants.DB_MULTIPLE;
+ }
+
+ public boolean next(final DatabaseEntry data) {
+ byte[] intarr;
+ int saveoffset;
+ if (pos == 0)
+ pos = ulen - INT32SZ;
+
+ // pull the offsets out of the ByteBuffer.
+ if(this.data_nio.capacity() < 8)
+ return false;
+ intarr = new byte[8];
+ saveoffset = this.data_nio.position();
+ this.data_nio.position(pos - INT32SZ);
+ this.data_nio.get(intarr, 0, 8);
+ this.data_nio.position(saveoffset);
+
+ final int dataoff = DbUtil.array2int(intarr, 4);
+
+ // crack out the data offset and length.
+ if (dataoff < 0) {
+ return (false);
+ }
+
+ final int datasz = DbUtil.array2int(intarr, 0);
+
+ // move the position to one before the last offset read.
+ pos -= INT32SZ*2;
+
+ data.setDataNIO(this.data_nio);
+ data.setSize(datasz);
+ data.setOffset(dataoff);
+
+ return (true);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/MultipleRecnoDataEntry.java b/db/java/src/com/sleepycat/db/MultipleRecnoDataEntry.java
index 016c671d0..51e5aaed7 100644
--- a/db/java/src/com/sleepycat/db/MultipleRecnoDataEntry.java
+++ b/db/java/src/com/sleepycat/db/MultipleRecnoDataEntry.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: MultipleRecnoDataEntry.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleRecnoDataEntry.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
@@ -27,8 +27,13 @@ public class MultipleRecnoDataEntry extends MultipleEntry {
super(data, offset, size);
}
+ /**
+ * Return the bulk retrieval flag and reset the entry position so that the
+ * next set of key/data can be returned.
+ */
/* package */
int getMultiFlag() {
+ pos = 0;
return DbConstants.DB_MULTIPLE_KEY;
}
diff --git a/db/java/src/com/sleepycat/db/MultipleRecnoNIODataEntry.java b/db/java/src/com/sleepycat/db/MultipleRecnoNIODataEntry.java
new file mode 100644
index 000000000..661e5b548
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/MultipleRecnoNIODataEntry.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: MultipleRecnoNIODataEntry.java,v 1.3 2006/09/08 20:32:14 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+import com.sleepycat.db.internal.DbUtil;
+
+import java.nio.ByteBuffer;
+
+public class MultipleRecnoNIODataEntry extends MultipleEntry {
+ public MultipleRecnoNIODataEntry() {
+ super(null);
+ }
+
+ public MultipleRecnoNIODataEntry(final ByteBuffer data) {
+ super(data);
+ }
+
+ /**
+ * Return the bulk retrieval flag and reset the entry position so that the
+ * next set of key/data can be returned.
+ */
+ /* package */
+ int getMultiFlag() {
+ pos = 0;
+ return DbConstants.DB_MULTIPLE_KEY;
+ }
+
+ public boolean next(final DatabaseEntry recno, final DatabaseEntry data) {
+ byte[] intarr;
+ int saveoffset;
+ if (pos == 0)
+ pos = ulen - INT32SZ;
+
+ // pull the offsets out of the ByteBuffer.
+ if(this.data_nio.capacity() < 12)
+ return false;
+ intarr = new byte[12];
+ saveoffset = this.data_nio.position();
+ this.data_nio.position(pos - INT32SZ*2);
+ this.data_nio.get(intarr, 0, 12);
+ this.data_nio.position(saveoffset);
+
+ final int keyoff = DbUtil.array2int(intarr, 8);
+
+ // crack out the key offset and the data offset and length.
+ if (keyoff < 0)
+ return false;
+
+ final int dataoff = DbUtil.array2int(intarr, 4);
+ final int datasz = DbUtil.array2int(intarr, 0);
+
+ // move the position to one before the last offset read.
+ pos -= INT32SZ*3;
+
+ recno.setDataNIO(this.data_nio);
+ recno.setOffset(keyoff);
+ recno.setSize(INT32SZ);
+
+ data.setDataNIO(this.data_nio);
+ data.setOffset(dataoff);
+ data.setSize(datasz);
+
+ return true;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/MutexStats.java b/db/java/src/com/sleepycat/db/MutexStats.java
new file mode 100644
index 000000000..101a14604
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/MutexStats.java
@@ -0,0 +1,74 @@
+/*-
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
+ *
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ */
+
+package com.sleepycat.db;
+
+public class MutexStats {
+ // no public constructor
+ /* package */ MutexStats() {}
+
+ private int st_mutex_align;
+ public int getMutexAlign() {
+ return st_mutex_align;
+ }
+
+ private int st_mutex_tas_spins;
+ public int getMutexTasSpins() {
+ return st_mutex_tas_spins;
+ }
+
+ private int st_mutex_cnt;
+ public int getMutexCount() {
+ return st_mutex_cnt;
+ }
+
+ private int st_mutex_free;
+ public int getMutexFree() {
+ return st_mutex_free;
+ }
+
+ private int st_mutex_inuse;
+ public int getMutexInuse() {
+ return st_mutex_inuse;
+ }
+
+ private int st_mutex_inuse_max;
+ public int getMutexInuseMax() {
+ return st_mutex_inuse_max;
+ }
+
+ private int st_region_wait;
+ public int getRegionWait() {
+ return st_region_wait;
+ }
+
+ private int st_region_nowait;
+ public int getRegionNowait() {
+ return st_region_nowait;
+ }
+
+ private int st_regsize;
+ public int getRegSize() {
+ return st_regsize;
+ }
+
+ public String toString() {
+ return "MutexStats:"
+ + "\n st_mutex_align=" + st_mutex_align
+ + "\n st_mutex_tas_spins=" + st_mutex_tas_spins
+ + "\n st_mutex_cnt=" + st_mutex_cnt
+ + "\n st_mutex_free=" + st_mutex_free
+ + "\n st_mutex_inuse=" + st_mutex_inuse
+ + "\n st_mutex_inuse_max=" + st_mutex_inuse_max
+ + "\n st_region_wait=" + st_region_wait
+ + "\n st_region_nowait=" + st_region_nowait
+ + "\n st_regsize=" + st_regsize
+ ;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/OperationStatus.java b/db/java/src/com/sleepycat/db/OperationStatus.java
index 5739bc6e2..f819a91ee 100644
--- a/db/java/src/com/sleepycat/db/OperationStatus.java
+++ b/db/java/src/com/sleepycat/db/OperationStatus.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: OperationStatus.java,v 1.2 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: OperationStatus.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/PanicHandler.java b/db/java/src/com/sleepycat/db/PanicHandler.java
index 7c9b838a8..ae21b27e3 100644
--- a/db/java/src/com/sleepycat/db/PanicHandler.java
+++ b/db/java/src/com/sleepycat/db/PanicHandler.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: PanicHandler.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: PanicHandler.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/PreparedTransaction.java b/db/java/src/com/sleepycat/db/PreparedTransaction.java
index 36d103134..e24837cd0 100644
--- a/db/java/src/com/sleepycat/db/PreparedTransaction.java
+++ b/db/java/src/com/sleepycat/db/PreparedTransaction.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: PreparedTransaction.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: PreparedTransaction.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/QueueStats.java b/db/java/src/com/sleepycat/db/QueueStats.java
index 10ad3f768..1510321e4 100644
--- a/db/java/src/com/sleepycat/db/QueueStats.java
+++ b/db/java/src/com/sleepycat/db/QueueStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class QueueStats extends DatabaseStats {
// no public constructor
- protected QueueStats() {}
+ /* package */ QueueStats() {}
private int qs_magic;
public int getMagic() {
diff --git a/db/java/src/com/sleepycat/db/RecordNumberAppender.java b/db/java/src/com/sleepycat/db/RecordNumberAppender.java
index 4162a1ead..4842882ec 100644
--- a/db/java/src/com/sleepycat/db/RecordNumberAppender.java
+++ b/db/java/src/com/sleepycat/db/RecordNumberAppender.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: RecordNumberAppender.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: RecordNumberAppender.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/RecoveryOperation.java b/db/java/src/com/sleepycat/db/RecoveryOperation.java
index 938eacd2e..9d5dae64c 100644
--- a/db/java/src/com/sleepycat/db/RecoveryOperation.java
+++ b/db/java/src/com/sleepycat/db/RecoveryOperation.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: RecoveryOperation.java,v 1.1 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RecoveryOperation.java,v 12.3 2006/08/24 14:46:08 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/ReplicationConfig.java b/db/java/src/com/sleepycat/db/ReplicationConfig.java
new file mode 100644
index 000000000..76d45c42e
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationConfig.java
@@ -0,0 +1,60 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationConfig.java,v 12.5 2006/08/24 14:46:08 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public final class ReplicationConfig implements Cloneable {
+ public static final ReplicationConfig BULK =
+ new ReplicationConfig("BULK", DbConstants.DB_REP_CONF_BULK);
+
+ public static final ReplicationConfig DELAYCLIENT =
+ new ReplicationConfig("DELAYCLIENT", DbConstants.DB_REP_CONF_DELAYCLIENT);
+
+ public static final ReplicationConfig NOAUTOINIT =
+ new ReplicationConfig("NOAUTOINIT", DbConstants.DB_REP_CONF_NOAUTOINIT);
+
+ public static final ReplicationConfig NOWAIT =
+ new ReplicationConfig("NOWAIT", DbConstants.DB_REP_CONF_NOWAIT);
+
+ /* package */
+ static ReplicationConfig fromInt(int which) {
+ switch(which) {
+ case DbConstants.DB_REP_CONF_BULK:
+ return BULK;
+ case DbConstants.DB_REP_CONF_DELAYCLIENT:
+ return DELAYCLIENT;
+ case DbConstants.DB_REP_CONF_NOAUTOINIT:
+ return NOAUTOINIT;
+ case DbConstants.DB_REP_CONF_NOWAIT:
+ return NOWAIT;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown replication config: " + which);
+ }
+ }
+
+ private String configName;
+ private int flag;
+
+ private ReplicationConfig(final String configName, final int flag) {
+ this.configName = configName;
+ this.flag = flag;
+ }
+
+ /* package */
+ int getFlag() {
+ return flag;
+ }
+
+ public String toString() {
+ return "ReplicationConfig." + configName;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationDuplicateMasterException.java b/db/java/src/com/sleepycat/db/ReplicationDuplicateMasterException.java
new file mode 100644
index 000000000..62fe961ad
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationDuplicateMasterException.java
@@ -0,0 +1,19 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationDuplicateMasterException.java,v 12.5 2006/08/24 14:46:08 bostic Exp $
+ */
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbEnv;
+
+public class ReplicationDuplicateMasterException extends DatabaseException {
+ /* package */ ReplicationDuplicateMasterException(final String s,
+ final int errno,
+ final DbEnv dbenv) {
+ super(s, errno, dbenv);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationHandleDeadException.java b/db/java/src/com/sleepycat/db/ReplicationHandleDeadException.java
index cfcf92ab6..c43b9fa3a 100644
--- a/db/java/src/com/sleepycat/db/ReplicationHandleDeadException.java
+++ b/db/java/src/com/sleepycat/db/ReplicationHandleDeadException.java
@@ -1,18 +1,17 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ReplicationHandleDeadException.java,v 1.1 2004/09/23 17:56:39 mjc Exp $
+ * $Id: ReplicationHandleDeadException.java,v 12.4 2006/08/24 14:46:08 bostic Exp $
*/
package com.sleepycat.db;
import com.sleepycat.db.internal.DbEnv;
public class ReplicationHandleDeadException extends DatabaseException {
- protected ReplicationHandleDeadException(final String s,
+ /* package */ ReplicationHandleDeadException(final String s,
final int errno,
final DbEnv dbenv) {
super(s, errno, dbenv);
diff --git a/db/java/src/com/sleepycat/db/ReplicationHoldElectionException.java b/db/java/src/com/sleepycat/db/ReplicationHoldElectionException.java
new file mode 100644
index 000000000..cda36e013
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationHoldElectionException.java
@@ -0,0 +1,19 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationHoldElectionException.java,v 12.5 2006/08/24 14:46:08 bostic Exp $
+ */
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbEnv;
+
+public class ReplicationHoldElectionException extends DatabaseException {
+ /* package */ ReplicationHoldElectionException(final String s,
+ final int errno,
+ final DbEnv dbenv) {
+ super(s, errno, dbenv);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationHostAddress.java b/db/java/src/com/sleepycat/db/ReplicationHostAddress.java
new file mode 100644
index 000000000..79624428e
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationHostAddress.java
@@ -0,0 +1,43 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationHostAddress.java,v 12.4 2006/09/07 21:24:29 alexg Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public class ReplicationHostAddress
+{
+ public int port;
+ public String host;
+ public int eid;
+ private int status;
+ public boolean isPeer;
+
+ public ReplicationHostAddress()
+ {
+ this("localhost", 0, false, false);
+ }
+
+ public ReplicationHostAddress(String host, int port)
+ {
+ this(host, port, false, false);
+ }
+
+ public ReplicationHostAddress(String host, int port, boolean isPeer, boolean isConnected)
+ {
+ this.host = host;
+ this.port = port;
+ this.isPeer = isPeer;
+ this.status = isConnected ? DbConstants.DB_REPMGR_CONNECTED : 0;
+ }
+
+ public boolean isConnected() {
+ return ((this.status & DbConstants.DB_REPMGR_CONNECTED) != 0);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationJoinFailureException.java b/db/java/src/com/sleepycat/db/ReplicationJoinFailureException.java
new file mode 100644
index 000000000..c4946ceac
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationJoinFailureException.java
@@ -0,0 +1,19 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationJoinFailureException.java,v 12.4 2006/08/24 14:46:09 bostic Exp $
+ */
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbEnv;
+
+public class ReplicationJoinFailureException extends DatabaseException {
+ /* package */ ReplicationJoinFailureException(final String s,
+ final int errno,
+ final DbEnv dbenv) {
+ super(s, errno, dbenv);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationLockoutException.java b/db/java/src/com/sleepycat/db/ReplicationLockoutException.java
new file mode 100644
index 000000000..ee8162479
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationLockoutException.java
@@ -0,0 +1,19 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationLockoutException.java,v 12.4 2006/08/24 14:46:09 bostic Exp $
+ */
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbEnv;
+
+public class ReplicationLockoutException extends DatabaseException {
+ /* package */ ReplicationLockoutException(final String s,
+ final int errno,
+ final DbEnv dbenv) {
+ super(s, errno, dbenv);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationManagerAckPolicy.java b/db/java/src/com/sleepycat/db/ReplicationManagerAckPolicy.java
new file mode 100644
index 000000000..0b0894178
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationManagerAckPolicy.java
@@ -0,0 +1,76 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationManagerAckPolicy.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public final class ReplicationManagerAckPolicy {
+
+ public static final ReplicationManagerAckPolicy ALL =
+ new ReplicationManagerAckPolicy("ALL", DbConstants.DB_REPMGR_ACKS_ALL);
+
+ public static final ReplicationManagerAckPolicy ALL_PEERS =
+ new ReplicationManagerAckPolicy(
+ "ALL_PEERS", DbConstants.DB_REPMGR_ACKS_ALL_PEERS);
+
+ public static final ReplicationManagerAckPolicy NONE =
+ new ReplicationManagerAckPolicy(
+ "NONE", DbConstants.DB_REPMGR_ACKS_NONE);
+
+ public static final ReplicationManagerAckPolicy ONE =
+ new ReplicationManagerAckPolicy("ONE", DbConstants.DB_REPMGR_ACKS_ONE);
+
+ public static final ReplicationManagerAckPolicy ONE_PEER =
+ new ReplicationManagerAckPolicy(
+ "ONE_PEER", DbConstants.DB_REPMGR_ACKS_ONE_PEER);
+
+ public static final ReplicationManagerAckPolicy QUORUM =
+ new ReplicationManagerAckPolicy(
+ "QUORUM", DbConstants.DB_REPMGR_ACKS_QUORUM);
+
+ /* package */
+ static ReplicationManagerAckPolicy fromInt(int type) {
+ switch(type) {
+ case DbConstants.DB_REPMGR_ACKS_ALL:
+ return ALL;
+ case DbConstants.DB_REPMGR_ACKS_ALL_PEERS:
+ return ALL_PEERS;
+ case DbConstants.DB_REPMGR_ACKS_NONE:
+ return NONE;
+ case DbConstants.DB_REPMGR_ACKS_ONE:
+ return ONE;
+ case DbConstants.DB_REPMGR_ACKS_ONE_PEER:
+ return ONE_PEER;
+ case DbConstants.DB_REPMGR_ACKS_QUORUM:
+ return QUORUM;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown ACK policy: " + type);
+ }
+ }
+
+ private String statusName;
+ private int id;
+
+ private ReplicationManagerAckPolicy(final String statusName, final int id) {
+ this.statusName = statusName;
+ this.id = id;
+ }
+
+ /* package */
+ int getId() {
+ return id;
+ }
+
+ public String toString() {
+ return "ReplicationManagerAckPolicy." + statusName;
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/db/ReplicationManagerStartPolicy.java b/db/java/src/com/sleepycat/db/ReplicationManagerStartPolicy.java
new file mode 100644
index 000000000..c804b3251
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationManagerStartPolicy.java
@@ -0,0 +1,68 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationManagerStartPolicy.java,v 12.4 2006/09/08 20:32:14 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public final class ReplicationManagerStartPolicy {
+
+ public static final ReplicationManagerStartPolicy REP_MASTER =
+ new ReplicationManagerStartPolicy(
+ "REP_MASTER", DbConstants.DB_REP_MASTER);
+
+ public static final ReplicationManagerStartPolicy REP_CLIENT =
+ new ReplicationManagerStartPolicy(
+ "REP_CLIENT", DbConstants.DB_REP_CLIENT);
+
+ public static final ReplicationManagerStartPolicy REP_ELECTION =
+ new ReplicationManagerStartPolicy(
+ "REP_ELECTION", DbConstants.DB_REP_ELECTION);
+
+ public static final ReplicationManagerStartPolicy REP_FULL_ELECTION =
+ new ReplicationManagerStartPolicy(
+ "REP_FULL_ELECTION", DbConstants.DB_REP_FULL_ELECTION);
+
+ /* package */
+ static ReplicationManagerStartPolicy fromInt(int type) {
+ switch(type) {
+ case DbConstants.DB_REP_MASTER:
+ return REP_MASTER;
+ case DbConstants.DB_REP_CLIENT:
+ return REP_CLIENT;
+ case DbConstants.DB_REP_ELECTION:
+ return REP_ELECTION;
+ case DbConstants.DB_REP_FULL_ELECTION:
+ return REP_FULL_ELECTION;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown rep start policy: " + type);
+ }
+ }
+
+ private String statusName;
+ private int id;
+
+ private ReplicationManagerStartPolicy(final String statusName,
+ final int id) {
+
+ this.statusName = statusName;
+ this.id = id;
+ }
+
+ /* package */
+ int getId() {
+ return id;
+ }
+
+ public String toString() {
+ return "ReplicationManagerStartPolicy." + statusName;
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/db/ReplicationSiteUnavailableException.java b/db/java/src/com/sleepycat/db/ReplicationSiteUnavailableException.java
new file mode 100644
index 000000000..f0e3dae2f
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationSiteUnavailableException.java
@@ -0,0 +1,19 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationSiteUnavailableException.java,v 12.5 2006/08/24 14:46:09 bostic Exp $
+ */
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbEnv;
+
+public class ReplicationSiteUnavailableException extends DatabaseException {
+ /* package */ ReplicationSiteUnavailableException(final String s,
+ final int errno,
+ final DbEnv dbenv) {
+ super(s, errno, dbenv);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationStats.java b/db/java/src/com/sleepycat/db/ReplicationStats.java
index 70c2bf032..0195ec3b6 100644
--- a/db/java/src/com/sleepycat/db/ReplicationStats.java
+++ b/db/java/src/com/sleepycat/db/ReplicationStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class ReplicationStats {
// no public constructor
- protected ReplicationStats() {}
+ /* package */ ReplicationStats() {}
private int st_status;
public int getStatus() {
@@ -53,6 +53,41 @@ public class ReplicationStats {
return st_env_priority;
}
+ private int st_bulk_fills;
+ public int getBulkFills() {
+ return st_bulk_fills;
+ }
+
+ private int st_bulk_overflows;
+ public int getBulkOverflows() {
+ return st_bulk_overflows;
+ }
+
+ private int st_bulk_records;
+ public int getBulkRecords() {
+ return st_bulk_records;
+ }
+
+ private int st_bulk_transfers;
+ public int getBulkTransfers() {
+ return st_bulk_transfers;
+ }
+
+ private int st_client_rerequests;
+ public int getClientRerequests() {
+ return st_client_rerequests;
+ }
+
+ private int st_client_svc_req;
+ public int getClientSvcReq() {
+ return st_client_svc_req;
+ }
+
+ private int st_client_svc_miss;
+ public int getClientSvcMiss() {
+ return st_client_svc_miss;
+ }
+
private int st_gen;
public int getGen() {
return st_gen;
@@ -228,6 +263,16 @@ public class ReplicationStats {
return st_election_votes;
}
+ private int st_election_sec;
+ public int getElectionSec() {
+ return st_election_sec;
+ }
+
+ private int st_election_usec;
+ public int getElectionUsec() {
+ return st_election_usec;
+ }
+
public String toString() {
return "ReplicationStats:"
+ "\n st_status=" + st_status
@@ -238,6 +283,13 @@ public class ReplicationStats {
+ "\n st_dupmasters=" + st_dupmasters
+ "\n st_env_id=" + st_env_id
+ "\n st_env_priority=" + st_env_priority
+ + "\n st_bulk_fills=" + st_bulk_fills
+ + "\n st_bulk_overflows=" + st_bulk_overflows
+ + "\n st_bulk_records=" + st_bulk_records
+ + "\n st_bulk_transfers=" + st_bulk_transfers
+ + "\n st_client_rerequests=" + st_client_rerequests
+ + "\n st_client_svc_req=" + st_client_svc_req
+ + "\n st_client_svc_miss=" + st_client_svc_miss
+ "\n st_gen=" + st_gen
+ "\n st_egen=" + st_egen
+ "\n st_log_duplicated=" + st_log_duplicated
@@ -273,6 +325,8 @@ public class ReplicationStats {
+ "\n st_election_status=" + st_election_status
+ "\n st_election_tiebreaker=" + st_election_tiebreaker
+ "\n st_election_votes=" + st_election_votes
+ + "\n st_election_sec=" + st_election_sec
+ + "\n st_election_usec=" + st_election_usec
;
}
}
diff --git a/db/java/src/com/sleepycat/db/ReplicationStatus.java b/db/java/src/com/sleepycat/db/ReplicationStatus.java
index 64e4fd2c1..76b9a26cc 100644
--- a/db/java/src/com/sleepycat/db/ReplicationStatus.java
+++ b/db/java/src/com/sleepycat/db/ReplicationStatus.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: ReplicationStatus.java,v 1.5 2004/08/17 20:04:42 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationStatus.java,v 12.6 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
@@ -44,12 +44,8 @@ public final class ReplicationStatus {
return errCode == 0;
}
- public boolean isDupMaster() {
- return errCode == DbConstants.DB_REP_DUPMASTER;
- }
-
- public boolean isHoldElection() {
- return errCode == DbConstants.DB_REP_HOLDELECTION;
+ public boolean isIgnore() {
+ return errCode == DbConstants.DB_REP_IGNORE;
}
public boolean isPermanent() {
@@ -68,10 +64,6 @@ public final class ReplicationStatus {
return errCode == DbConstants.DB_REP_NOTPERM;
}
- public boolean isStartupDone() {
- return errCode == DbConstants.DB_REP_STARTUPDONE;
- }
-
public DatabaseEntry getCData() {
return cdata;
}
@@ -96,10 +88,8 @@ public final class ReplicationStatus {
switch(errCode) {
case 0:
return SUCCESS;
- case DbConstants.DB_REP_DUPMASTER:
- return DUPMASTER;
- case DbConstants.DB_REP_HOLDELECTION:
- return HOLDELECTION;
+ case DbConstants.DB_REP_IGNORE:
+ return IGNORE;
case DbConstants.DB_REP_ISPERM:
return new ReplicationStatus("ISPERM", errCode, cdata, envid, lsn);
case DbConstants.DB_REP_NEWMASTER:
@@ -114,8 +104,6 @@ public final class ReplicationStatus {
}
}
- private static final ReplicationStatus DUPMASTER =
- new ReplicationStatus("DUPMASTER", DbConstants.DB_REP_DUPMASTER);
- private static final ReplicationStatus HOLDELECTION =
- new ReplicationStatus("HOLDELECTION", DbConstants.DB_REP_HOLDELECTION);
+ private static final ReplicationStatus IGNORE =
+ new ReplicationStatus("IGNORE", DbConstants.DB_REP_IGNORE);
}
diff --git a/db/java/src/com/sleepycat/db/ReplicationTimeoutType.java b/db/java/src/com/sleepycat/db/ReplicationTimeoutType.java
new file mode 100644
index 000000000..a01cdcb24
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/ReplicationTimeoutType.java
@@ -0,0 +1,61 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ReplicationTimeoutType.java,v 12.2 2006/08/24 14:46:09 bostic Exp $
+ */
+
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbConstants;
+
+public final class ReplicationTimeoutType {
+
+ public static final ReplicationTimeoutType ACK_TIMEOUT =
+ new ReplicationTimeoutType("ACK_TIMEOUT", DbConstants.DB_REP_ACK_TIMEOUT);
+
+ public static final ReplicationTimeoutType ELECTION_TIMEOUT =
+ new ReplicationTimeoutType("ELECTION_TIMEOUT", DbConstants.DB_REP_ELECTION_TIMEOUT);
+
+ public static final ReplicationTimeoutType ELECTION_RETRY =
+ new ReplicationTimeoutType("ELECTION_RETRY", DbConstants.DB_REP_ELECTION_RETRY);
+
+ public static final ReplicationTimeoutType CONNECTION_RETRY =
+ new ReplicationTimeoutType("CONNECTION_RETRY", DbConstants.DB_REP_CONNECTION_RETRY);
+
+ /* package */
+ static ReplicationTimeoutType fromInt(int type) {
+ switch(type) {
+ case DbConstants.DB_REP_ACK_TIMEOUT:
+ return ACK_TIMEOUT;
+ case DbConstants.DB_REP_ELECTION_TIMEOUT:
+ return ELECTION_TIMEOUT;
+ case DbConstants.DB_REP_ELECTION_RETRY:
+ return ELECTION_RETRY;
+ case DbConstants.DB_REP_CONNECTION_RETRY:
+ return CONNECTION_RETRY;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown timeout type: " + type);
+ }
+ }
+
+ private String statusName;
+ private int id;
+
+ private ReplicationTimeoutType(final String statusName, final int id) {
+ this.statusName = statusName;
+ this.id = id;
+ }
+
+ /* package */
+ int getId() {
+ return id;
+ }
+
+ public String toString() {
+ return "ReplicationTimeoutType." + statusName;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/ReplicationTransport.java b/db/java/src/com/sleepycat/db/ReplicationTransport.java
index 72b28a73c..5d2792aef 100644
--- a/db/java/src/com/sleepycat/db/ReplicationTransport.java
+++ b/db/java/src/com/sleepycat/db/ReplicationTransport.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ReplicationTransport.java,v 1.3 2004/07/06 15:06:37 mjc Exp $
+ * $Id: ReplicationTransport.java,v 12.4 2006/08/24 14:46:09 bostic Exp $
*/
package com.sleepycat.db;
@@ -18,7 +17,9 @@ public interface ReplicationTransport {
LogSequenceNumber lsn,
int envid,
boolean noBuffer,
- boolean permanent)
+ boolean permanent,
+ boolean anywhere,
+ boolean isRetry)
throws DatabaseException;
int EID_BROADCAST = DbConstants.DB_EID_BROADCAST;
diff --git a/db/java/src/com/sleepycat/db/RunRecoveryException.java b/db/java/src/com/sleepycat/db/RunRecoveryException.java
index 640d81af8..c389700b5 100644
--- a/db/java/src/com/sleepycat/db/RunRecoveryException.java
+++ b/db/java/src/com/sleepycat/db/RunRecoveryException.java
@@ -1,18 +1,17 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: RunRecoveryException.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
+ * $Id: RunRecoveryException.java,v 12.4 2006/08/24 14:46:09 bostic Exp $
*/
package com.sleepycat.db;
import com.sleepycat.db.internal.DbEnv;
public class RunRecoveryException extends DatabaseException {
- protected RunRecoveryException(final String s,
+ /* package */ RunRecoveryException(final String s,
final int errno,
final DbEnv dbenv) {
super(s, errno, dbenv);
diff --git a/db/java/src/com/sleepycat/db/SecondaryConfig.java b/db/java/src/com/sleepycat/db/SecondaryConfig.java
index e275e19e5..d2905beaf 100644
--- a/db/java/src/com/sleepycat/db/SecondaryConfig.java
+++ b/db/java/src/com/sleepycat/db/SecondaryConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: SecondaryConfig.java,v 1.3 2004/08/06 21:56:40 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SecondaryConfig.java,v 12.4 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
@@ -27,6 +27,7 @@ public class SecondaryConfig extends DatabaseConfig implements Cloneable {
}
private boolean allowPopulate;
+ private boolean immutableSecondaryKey;
private SecondaryKeyCreator keyCreator;
public SecondaryConfig() {
@@ -48,6 +49,14 @@ public class SecondaryConfig extends DatabaseConfig implements Cloneable {
return allowPopulate;
}
+ public void setImmutableSecondaryKey(final boolean immutableSecondaryKey) {
+ this.immutableSecondaryKey = immutableSecondaryKey;
+ }
+
+ public boolean getImmutableSecondaryKey() {
+ return immutableSecondaryKey;
+ }
+
/* package */
Db openSecondaryDatabase(final DbEnv dbenv,
final DbTxn txn,
@@ -60,6 +69,8 @@ public class SecondaryConfig extends DatabaseConfig implements Cloneable {
associateFlags |= allowPopulate ? DbConstants.DB_CREATE : 0;
if (getTransactional() && txn == null)
associateFlags |= DbConstants.DB_AUTO_COMMIT;
+ if (immutableSecondaryKey)
+ associateFlags |= DbConstants.DB_IMMUTABLE_KEY;
final Db db = super.openDatabase(dbenv, txn, fileName, databaseName);
boolean succeeded = false;
diff --git a/db/java/src/com/sleepycat/db/SecondaryCursor.java b/db/java/src/com/sleepycat/db/SecondaryCursor.java
index 886ea5f92..29583d6dd 100644
--- a/db/java/src/com/sleepycat/db/SecondaryCursor.java
+++ b/db/java/src/com/sleepycat/db/SecondaryCursor.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: SecondaryCursor.java,v 1.3 2004/04/21 01:09:09 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SecondaryCursor.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/SecondaryDatabase.java b/db/java/src/com/sleepycat/db/SecondaryDatabase.java
index 3ea7c1398..727c6bea4 100644
--- a/db/java/src/com/sleepycat/db/SecondaryDatabase.java
+++ b/db/java/src/com/sleepycat/db/SecondaryDatabase.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: SecondaryDatabase.java,v 1.3 2004/04/21 01:09:10 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SecondaryDatabase.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/SecondaryKeyCreator.java b/db/java/src/com/sleepycat/db/SecondaryKeyCreator.java
index 10d17c56e..9e146e619 100644
--- a/db/java/src/com/sleepycat/db/SecondaryKeyCreator.java
+++ b/db/java/src/com/sleepycat/db/SecondaryKeyCreator.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: SecondaryKeyCreator.java,v 1.1 2004/04/06 20:43:40 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SecondaryKeyCreator.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/Sequence.java b/db/java/src/com/sleepycat/db/Sequence.java
index 14a6d29dd..8591258de 100644
--- a/db/java/src/com/sleepycat/db/Sequence.java
+++ b/db/java/src/com/sleepycat/db/Sequence.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: Sequence.java,v 1.2 2004/09/28 19:30:37 mjc Exp $
+ * $Id: Sequence.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
*/
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/SequenceConfig.java b/db/java/src/com/sleepycat/db/SequenceConfig.java
index 2901ac1e6..282d8d3e7 100644
--- a/db/java/src/com/sleepycat/db/SequenceConfig.java
+++ b/db/java/src/com/sleepycat/db/SequenceConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: SequenceConfig.java,v 1.2 2004/09/23 17:56:39 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: SequenceConfig.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/SequenceStats.java b/db/java/src/com/sleepycat/db/SequenceStats.java
index 5c1e3a868..09e92bf2d 100644
--- a/db/java/src/com/sleepycat/db/SequenceStats.java
+++ b/db/java/src/com/sleepycat/db/SequenceStats.java
@@ -3,15 +3,15 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
public class SequenceStats {
// no public constructor
- protected SequenceStats() {}
+ /* package */ SequenceStats() {}
private int st_wait;
public int getWait() {
diff --git a/db/java/src/com/sleepycat/db/StatsConfig.java b/db/java/src/com/sleepycat/db/StatsConfig.java
index 400407960..217554c4e 100644
--- a/db/java/src/com/sleepycat/db/StatsConfig.java
+++ b/db/java/src/com/sleepycat/db/StatsConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: StatsConfig.java,v 1.3 2004/04/21 01:09:10 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: StatsConfig.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/Transaction.java b/db/java/src/com/sleepycat/db/Transaction.java
index 7aacc86ed..f27a31eac 100644
--- a/db/java/src/com/sleepycat/db/Transaction.java
+++ b/db/java/src/com/sleepycat/db/Transaction.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: Transaction.java,v 1.2 2004/04/21 01:09:10 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: Transaction.java,v 12.4 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
@@ -55,12 +55,24 @@ public class Transaction {
return txn.id();
}
+ public String getName()
+ throws DatabaseException {
+
+ return txn.get_name();
+ }
+
public void prepare(final byte[] gid)
throws DatabaseException {
txn.prepare(gid);
}
+ public void setName(final String name)
+ throws DatabaseException {
+
+ txn.set_name(name);
+ }
+
public void setTxnTimeout(final long timeOut)
throws DatabaseException {
diff --git a/db/java/src/com/sleepycat/db/TransactionConfig.java b/db/java/src/com/sleepycat/db/TransactionConfig.java
index 6d00225cc..64dfe83bf 100644
--- a/db/java/src/com/sleepycat/db/TransactionConfig.java
+++ b/db/java/src/com/sleepycat/db/TransactionConfig.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TransactionConfig.java,v 1.3 2004/09/28 19:30:37 mjc Exp $
+ * $Id: TransactionConfig.java,v 12.6 2006/09/08 20:32:14 bostic Exp $
*/
package com.sleepycat.db;
@@ -25,29 +25,50 @@ public class TransactionConfig implements Cloneable {
return (config == null) ? DEFAULT : config;
}
- private boolean dirtyRead = false;
- private boolean degree2 = false;
+ private boolean readUncommitted = false;
+ private boolean readCommitted = false;
private boolean noSync = false;
private boolean noWait = false;
+ private boolean snapshot = false;
private boolean sync = false;
public TransactionConfig() {
}
+ public void setReadCommitted(final boolean readCommitted) {
+ this.readCommitted = readCommitted;
+ }
+
+ public boolean getReadCommitted() {
+ return readCommitted;
+ }
+
+ /** @deprecated */
public void setDegree2(final boolean degree2) {
- this.degree2 = degree2;
+ setReadCommitted(degree2);
}
+ /** @deprecated */
public boolean getDegree2() {
- return degree2;
+ return getReadCommitted();
+ }
+
+ public void setReadUncommitted(final boolean readUncommitted) {
+ this.readUncommitted = readUncommitted;
}
+ public boolean getReadUncommitted() {
+ return readUncommitted;
+ }
+
+ /** @deprecated */
public void setDirtyRead(final boolean dirtyRead) {
- this.dirtyRead = dirtyRead;
+ setReadUncommitted(dirtyRead);
}
+ /** @deprecated */
public boolean getDirtyRead() {
- return dirtyRead;
+ return getReadUncommitted();
}
public void setNoSync(final boolean noSync) {
@@ -66,6 +87,14 @@ public class TransactionConfig implements Cloneable {
return noWait;
}
+ public void setSnapshot(final boolean snapshot) {
+ this.snapshot = snapshot;
+ }
+
+ public boolean getSnapshot() {
+ return snapshot;
+ }
+
public void setSync(final boolean sync) {
this.sync = sync;
}
@@ -78,10 +107,11 @@ public class TransactionConfig implements Cloneable {
throws DatabaseException {
int flags = 0;
- flags |= degree2 ? DbConstants.DB_DEGREE_2 : 0;
- flags |= dirtyRead ? DbConstants.DB_DIRTY_READ : 0;
+ flags |= readCommitted ? DbConstants.DB_READ_COMMITTED : 0;
+ flags |= readUncommitted ? DbConstants.DB_READ_UNCOMMITTED : 0;
flags |= noSync ? DbConstants.DB_TXN_NOSYNC : 0;
flags |= noWait ? DbConstants.DB_TXN_NOWAIT : 0;
+ flags |= snapshot ? DbConstants.DB_TXN_SNAPSHOT : 0;
flags |= sync ? DbConstants.DB_TXN_SYNC : 0;
return dbenv.txn_begin(parent, flags);
diff --git a/db/java/src/com/sleepycat/db/TransactionStats.java b/db/java/src/com/sleepycat/db/TransactionStats.java
index a872cde4c..f299b5886 100644
--- a/db/java/src/com/sleepycat/db/TransactionStats.java
+++ b/db/java/src/com/sleepycat/db/TransactionStats.java
@@ -3,8 +3,8 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
package com.sleepycat.db;
@@ -14,10 +14,10 @@ import com.sleepycat.db.internal.DbUtil;
public class TransactionStats
{
// no public constructor
- protected TransactionStats() {}
+ /* package */ TransactionStats() {}
public static class Active { // no public constructor
- protected Active() {}
+ /* package */ Active() {}
private int txnid;
public int getTxnId() {
@@ -29,11 +29,31 @@ public class TransactionStats
return parentid;
}
+ private int pid;
+ public int getPid() {
+ return pid;
+ }
+
private LogSequenceNumber lsn;
public LogSequenceNumber getLsn() {
return lsn;
}
+ private LogSequenceNumber read_lsn;
+ public LogSequenceNumber getReadLsn() {
+ return read_lsn;
+ }
+
+ private int mvcc_ref;
+ public int getMultiversionRef() {
+ return mvcc_ref;
+ }
+
+ private int status;
+ public int getStatus() {
+ return status;
+ }
+
private int xa_status;
public int getXaStatus() {
return xa_status;
@@ -44,13 +64,23 @@ public class TransactionStats
return xid;
}
+ private String name;
+ public String getName() {
+ return name;
+ }
+
public String toString() {
return "Active:"
+ "\n txnid=" + txnid
+ "\n parentid=" + parentid
+ + "\n pid=" + pid
+ "\n lsn=" + lsn
+ + "\n read_lsn=" + read_lsn
+ + "\n mvcc_ref=" + mvcc_ref
+ + "\n status=" + status
+ "\n xa_status=" + xa_status
+ "\n xid=" + DbUtil.byteArrayToString(xid)
+ + "\n name=" + name
;
}
};
@@ -95,6 +125,11 @@ public class TransactionStats
return st_nactive;
}
+ private int st_nsnapshot;
+ public int getNumSnapshot() {
+ return st_nsnapshot;
+ }
+
private int st_nrestores;
public int getNumRestores() {
return st_nrestores;
@@ -105,6 +140,11 @@ public class TransactionStats
return st_maxnactive;
}
+ private int st_maxnsnapshot;
+ public int getMaxNsnapshot() {
+ return st_maxnsnapshot;
+ }
+
private Active[] st_txnarray;
public Active[] getTxnarray() {
return st_txnarray;
@@ -135,8 +175,10 @@ public class TransactionStats
+ "\n st_nbegins=" + st_nbegins
+ "\n st_ncommits=" + st_ncommits
+ "\n st_nactive=" + st_nactive
+ + "\n st_nsnapshot=" + st_nsnapshot
+ "\n st_nrestores=" + st_nrestores
+ "\n st_maxnactive=" + st_maxnactive
+ + "\n st_maxnsnapshot=" + st_maxnsnapshot
+ "\n st_txnarray=" + DbUtil.objectArrayToString(st_txnarray, "st_txnarray")
+ "\n st_region_wait=" + st_region_wait
+ "\n st_region_nowait=" + st_region_nowait
diff --git a/db/java/src/com/sleepycat/db/VerifyConfig.java b/db/java/src/com/sleepycat/db/VerifyConfig.java
index 0bb4031e0..a33e60182 100644
--- a/db/java/src/com/sleepycat/db/VerifyConfig.java
+++ b/db/java/src/com/sleepycat/db/VerifyConfig.java
@@ -1,11 +1,11 @@
/*-
-* See the file LICENSE for redistribution information.
-*
-* Copyright (c) 2002-2004
-* Sleepycat Software. All rights reserved.
-*
-* $Id: VerifyConfig.java,v 1.3 2004/04/21 01:09:10 mjc Exp $
-*/
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: VerifyConfig.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
+ */
package com.sleepycat.db;
diff --git a/db/java/src/com/sleepycat/db/VersionMismatchException.java b/db/java/src/com/sleepycat/db/VersionMismatchException.java
new file mode 100644
index 000000000..2043986c3
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/VersionMismatchException.java
@@ -0,0 +1,19 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: VersionMismatchException.java,v 1.5 2006/08/24 14:46:09 bostic Exp $
+ */
+package com.sleepycat.db;
+
+import com.sleepycat.db.internal.DbEnv;
+
+public class VersionMismatchException extends DatabaseException {
+ /* package */ VersionMismatchException(final String s,
+ final int errno,
+ final DbEnv dbenv) {
+ super(s, errno, dbenv);
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/internal/Db.java b/db/java/src/com/sleepycat/db/internal/Db.java
index 0bee8f4c1..541885370 100644
--- a/db/java/src/com/sleepycat/db/internal/Db.java
+++ b/db/java/src/com/sleepycat/db/internal/Db.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class Db {
swigCPtr = cPtr;
}
- protected Db() {
- this(0, false);
+ protected static long getCPtr(Db obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class Db {
swigCPtr = 0;
}
- protected static long getCPtr(Db obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
/* package */ static final int GIGABYTE = 1 << 30;
/*
* Internally, the JNI layer creates a global reference to each Db,
@@ -76,6 +71,10 @@ public class Db {
dbenv = null;
}
+ public boolean getPrivateDbEnv() throws com.sleepycat.db.DatabaseException {
+ return private_dbenv;
+ }
+
public synchronized void close(int flags) throws DatabaseException {
try {
close0(flags);
@@ -83,7 +82,7 @@ public class Db {
cleanup();
}
}
-
+
public DbEnv get_env() throws DatabaseException {
return dbenv;
}
@@ -97,15 +96,16 @@ public class Db {
return append_recno_handler;
}
- private final int handle_bt_compare(DatabaseEntry dbt1, DatabaseEntry dbt2) {
- return bt_compare_handler.compare(dbt1, dbt2);
+ private final int handle_bt_compare(byte[] arr1, byte[] arr2) {
+ return bt_compare_handler.compare(arr1, arr2);
}
public Comparator get_bt_compare() throws com.sleepycat.db.DatabaseException {
return bt_compare_handler;
}
- private final int handle_bt_prefix(DatabaseEntry dbt1, DatabaseEntry dbt2) {
+ private final int handle_bt_prefix(DatabaseEntry dbt1,
+ DatabaseEntry dbt2) {
return bt_prefix_handler.prefix(wrapper, dbt1, dbt2);
}
@@ -125,8 +125,8 @@ public class Db {
return db_feedback_handler;
}
- private final int handle_dup_compare(DatabaseEntry dbt1, DatabaseEntry dbt2) {
- return dup_compare_handler.compare(dbt1, dbt2);
+ private final int handle_dup_compare(byte[] arr1, byte[] arr2) {
+ return dup_compare_handler.compare(arr1, arr2);
}
public Comparator get_dup_compare() throws com.sleepycat.db.DatabaseException {
@@ -141,7 +141,9 @@ public class Db {
return h_hash_handler;
}
- private final int handle_seckey_create(DatabaseEntry key, DatabaseEntry data, DatabaseEntry result)
+ private final int handle_seckey_create(DatabaseEntry key,
+ DatabaseEntry data,
+ DatabaseEntry result)
throws DatabaseException {
return seckey_create_handler.createSecondaryKey(
(SecondaryDatabase)wrapper, key, data, result) ?
@@ -189,14 +191,6 @@ public class Db {
dbenv.set_errcall(db_errcall_fcn);
}
- public MessageHandler get_msgcall() /* no exception */ {
- return dbenv.get_msgcall();
- }
-
- public void set_msgcall(MessageHandler db_msgcall_fcn) /* no exception */ {
- dbenv.set_msgcall(db_msgcall_fcn);
- }
-
public java.io.OutputStream get_error_stream() /* no exception */ {
return dbenv.get_error_stream();
}
@@ -205,6 +199,14 @@ public class Db {
dbenv.set_error_stream(stream);
}
+ public void set_errpfx(String errpfx) /* no exception */ {
+ dbenv.set_errpfx(errpfx);
+ }
+
+ public String get_errpfx() /* no exception */ {
+ return dbenv.get_errpfx();
+ }
+
public java.io.OutputStream get_message_stream() /* no exception */ {
return dbenv.get_message_stream();
}
@@ -213,6 +215,14 @@ public class Db {
dbenv.set_message_stream(stream);
}
+ public MessageHandler get_msgcall() /* no exception */ {
+ return dbenv.get_msgcall();
+ }
+
+ public void set_msgcall(MessageHandler db_msgcall_fcn) /* no exception */ {
+ dbenv.set_msgcall(db_msgcall_fcn);
+ }
+
public void set_paniccall(PanicHandler db_panic_fcn)
throws DatabaseException {
dbenv.set_paniccall(db_panic_fcn);
@@ -229,6 +239,8 @@ public class Db {
public void associate(DbTxn txnid, Db secondary, com.sleepycat.db.SecondaryKeyCreator callback, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_associate(swigCPtr, DbTxn.getCPtr(txnid), Db.getCPtr(secondary), (secondary.seckey_create_handler = callback) , flags); }
+ public void compact(DbTxn txnid, com.sleepycat.db.DatabaseEntry start, com.sleepycat.db.DatabaseEntry stop, com.sleepycat.db.CompactStats c_data, int flags, com.sleepycat.db.DatabaseEntry end) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_compact(swigCPtr, DbTxn.getCPtr(txnid), start, stop, c_data, flags, end); }
+
/* package */ int close0(int flags) {
return db_javaJNI.Db_close0(swigCPtr, flags);
}
@@ -274,10 +286,6 @@ public class Db {
public int get_encrypt_flags() throws com.sleepycat.db.DatabaseException { return db_javaJNI.Db_get_encrypt_flags(swigCPtr); }
- public String get_errpfx() /* no exception */ {
- return db_javaJNI.Db_get_errpfx(swigCPtr);
- }
-
public int get_flags() throws com.sleepycat.db.DatabaseException { return db_javaJNI.Db_get_flags(swigCPtr); }
public int get_lorder() throws com.sleepycat.db.DatabaseException {
@@ -344,8 +352,6 @@ public class Db {
public void set_bt_compare(java.util.Comparator bt_compare_fcn) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_bt_compare(swigCPtr, (bt_compare_handler = bt_compare_fcn) ); }
- public void set_bt_maxkey(int maxkey) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_bt_maxkey(swigCPtr, maxkey); }
-
public void set_bt_minkey(int bt_minkey) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_bt_minkey(swigCPtr, bt_minkey); }
public void set_bt_prefix(com.sleepycat.db.BtreePrefixCalculator bt_prefix_fcn) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_bt_prefix(swigCPtr, (bt_prefix_handler = bt_prefix_fcn) ); }
@@ -356,10 +362,6 @@ public class Db {
public void set_encrypt(String passwd, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_encrypt(swigCPtr, passwd, flags); }
- public void set_errpfx(String errpfx) /* no exception */ {
- db_javaJNI.Db_set_errpfx(swigCPtr, errpfx);
- }
-
public void set_feedback(com.sleepycat.db.FeedbackHandler db_feedback_fcn) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_feedback(swigCPtr, (db_feedback_handler = db_feedback_fcn) ); }
public void set_flags(int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.Db_set_flags(swigCPtr, flags); }
diff --git a/db/java/src/com/sleepycat/db/internal/DbConstants.java b/db/java/src/com/sleepycat/db/internal/DbConstants.java
index 7a8e6ba1a..5c71317b7 100644
--- a/db/java/src/com/sleepycat/db/internal/DbConstants.java
+++ b/db/java/src/com/sleepycat/db/internal/DbConstants.java
@@ -11,55 +11,63 @@ public interface DbConstants
int DB_ARCH_DATA = 0x002;
int DB_ARCH_LOG = 0x004;
int DB_ARCH_REMOVE = 0x008;
- int DB_AUTO_COMMIT = 0x01000000;
+ int DB_AUTO_COMMIT = 0x02000000;
int DB_BEFORE = 3;
int DB_BTREE = 1;
- int DB_CDB_ALLDB = 0x00001000;
- int DB_CHKSUM = 0x0000001;
- int DB_CONSUME = 5;
- int DB_CONSUME_WAIT = 6;
+ int DB_CDB_ALLDB = 0x00004000;
+ int DB_CHKSUM = 0x00004000;
+ int DB_CONSUME = 4;
+ int DB_CONSUME_WAIT = 5;
int DB_CREATE = 0x0000001;
- int DB_CURRENT = 7;
+ int DB_CURRENT = 6;
int DB_DBT_MALLOC = 0x004;
int DB_DBT_PARTIAL = 0x008;
- int DB_DBT_USERMEM = 0x020;
- int DB_DEGREE_2 = 0x02000000;
- int DB_DIRECT_DB = 0x00002000;
- int DB_DIRECT_LOG = 0x00004000;
- int DB_DIRTY_READ = 0x04000000;
+ int DB_DBT_USERMEM = 0x040;
+ int DB_DIRECT_DB = 0x00008000;
+ int DB_DIRECT_LOG = 0x00010000;
int DB_DONOTINDEX = -30998;
- int DB_DSYNC_LOG = 0x00008000;
- int DB_DUP = 0x0000002;
- int DB_DUPSORT = 0x0000004;
+ int DB_DSYNC_DB = 0x00020000;
+ int DB_DSYNC_LOG = 0x00040000;
+ int DB_DUP = 0x00008000;
+ int DB_DUPSORT = 0x00010000;
int DB_EID_BROADCAST = -1;
int DB_EID_INVALID = -2;
- int DB_ENCRYPT = 0x0000008;
+ int DB_ENCRYPT = 0x00020000;
int DB_ENCRYPT_AES = 0x0000001;
- int DB_EXCL = 0x0001000;
- int DB_FAST_STAT = 8;
- int DB_FIRST = 9;
+ int DB_EVENT_PANIC = 1;
+ int DB_EVENT_REP_CLIENT = 2;
+ int DB_EVENT_REP_MASTER = 3;
+ int DB_EVENT_REP_NEWMASTER = 4;
+ int DB_EVENT_REP_STARTUPDONE = 5;
+ int DB_EVENT_WRITE_FAILED = 6;
+ int DB_EXCL = 0x0004000;
+ int DB_FAST_STAT = 0x0000001;
+ int DB_FIRST = 7;
int DB_FLUSH = 0x001;
int DB_FORCE = 0x0000004;
- int DB_GET_BOTH = 10;
- int DB_GET_BOTH_RANGE = 12;
- int DB_GET_RECNO = 13;
+ int DB_FREELIST_ONLY = 0x00004000;
+ int DB_FREE_SPACE = 0x00008000;
+ int DB_GET_BOTH = 8;
+ int DB_GET_BOTH_RANGE = 10;
+ int DB_GET_RECNO = 11;
int DB_HASH = 2;
- int DB_INIT_CDB = 0x0001000;
- int DB_INIT_LOCK = 0x0002000;
- int DB_INIT_LOG = 0x0004000;
- int DB_INIT_MPOOL = 0x0008000;
- int DB_INIT_REP = 0x0010000;
- int DB_INIT_TXN = 0x0020000;
- int DB_INORDER = 0x0000010;
- int DB_JOINENV = 0x0040000;
- int DB_JOIN_ITEM = 14;
+ int DB_IMMUTABLE_KEY = 0x0004000;
+ int DB_INIT_CDB = 0x0004000;
+ int DB_INIT_LOCK = 0x0008000;
+ int DB_INIT_LOG = 0x0010000;
+ int DB_INIT_MPOOL = 0x0020000;
+ int DB_INIT_REP = 0x0040000;
+ int DB_INIT_TXN = 0x0080000;
+ int DB_INORDER = 0x00040000;
+ int DB_JOINENV = 0x0;
+ int DB_JOIN_ITEM = 12;
int DB_JOIN_NOSORT = 0x0000001;
int DB_KEYEMPTY = -30997;
int DB_KEYEXIST = -30996;
- int DB_KEYFIRST = 15;
- int DB_KEYLAST = 16;
- int DB_LAST = 17;
- int DB_LOCKDOWN = 0x0080000;
+ int DB_KEYFIRST = 13;
+ int DB_KEYLAST = 14;
+ int DB_LAST = 15;
+ int DB_LOCKDOWN = 0x0100000;
int DB_LOCK_DEADLOCK = -30995;
int DB_LOCK_DEFAULT = 1;
int DB_LOCK_EXPIRE = 2;
@@ -83,101 +91,125 @@ public interface DbConstants
int DB_LOCK_TIMEOUT = 8;
int DB_LOCK_WRITE = 2;
int DB_LOCK_YOUNGEST = 9;
- int DB_LOG_AUTOREMOVE = 0x00010000;
- int DB_LOG_INMEMORY = 0x00020000;
+ int DB_LOG_AUTOREMOVE = 0x00080000;
+ int DB_LOG_INMEMORY = 0x00100000;
int DB_MPOOL_NOFILE = 0x001;
int DB_MPOOL_UNLINK = 0x002;
- int DB_MULTIPLE = 0x08000000;
- int DB_MULTIPLE_KEY = 0x10000000;
- int DB_NEXT = 18;
- int DB_NEXT_DUP = 19;
- int DB_NEXT_NODUP = 20;
- int DB_NODUPDATA = 21;
- int DB_NOLOCKING = 0x00040000;
- int DB_NOMMAP = 0x0000008;
+ int DB_MULTIPLE = 0x10000000;
+ int DB_MULTIPLE_KEY = 0x20000000;
+ int DB_MULTIVERSION = 0x0000008;
+ int DB_NEXT = 16;
+ int DB_NEXT_DUP = 17;
+ int DB_NEXT_NODUP = 18;
+ int DB_NODUPDATA = 19;
+ int DB_NOLOCKING = 0x00200000;
+ int DB_NOMMAP = 0x0000010;
int DB_NOORDERCHK = 0x0000002;
- int DB_NOOVERWRITE = 22;
- int DB_NOPANIC = 0x00080000;
+ int DB_NOOVERWRITE = 20;
+ int DB_NOPANIC = 0x00400000;
int DB_NOSERVER_HOME = -30991;
int DB_NOSERVER_ID = -30990;
- int DB_NOSYNC = 23;
+ int DB_NOSYNC = 21;
int DB_NOTFOUND = -30989;
int DB_ORDERCHKONLY = 0x0000004;
- int DB_OVERWRITE = 0x00100000;
- int DB_PANIC_ENVIRONMENT = 0x00200000;
- int DB_POSITION = 24;
- int DB_PREV = 25;
- int DB_PREV_NODUP = 26;
+ int DB_OVERWRITE = 0x00800000;
+ int DB_PANIC_ENVIRONMENT = 0x01000000;
+ int DB_POSITION = 22;
+ int DB_PREV = 23;
+ int DB_PREV_NODUP = 24;
int DB_PRINTABLE = 0x0000020;
int DB_PRIORITY_DEFAULT = 3;
int DB_PRIORITY_HIGH = 4;
int DB_PRIORITY_LOW = 2;
int DB_PRIORITY_VERY_HIGH = 5;
int DB_PRIORITY_VERY_LOW = 1;
- int DB_PRIVATE = 0x0100000;
+ int DB_PRIVATE = 0x0200000;
int DB_QUEUE = 4;
- int DB_RDONLY = 0x0000010;
+ int DB_RDONLY = 0x0000020;
+ int DB_READ_COMMITTED = 0x04000000;
+ int DB_READ_UNCOMMITTED = 0x08000000;
int DB_RECNO = 3;
- int DB_RECNUM = 0x0000020;
- int DB_RECOVER = 0x0000020;
- int DB_RECOVER_FATAL = 0x0200000;
- int DB_REGION_INIT = 0x00400000;
- int DB_RENUMBER = 0x0000040;
- int DB_REP_CLIENT = 0x001;
- int DB_REP_DUPMASTER = -30986;
- int DB_REP_HOLDELECTION = -30984;
- int DB_REP_ISPERM = -30983;
- int DB_REP_MASTER = 0x002;
- int DB_REP_NEWMASTER = -30982;
- int DB_REP_NEWSITE = -30981;
- int DB_REP_NOBUFFER = 0x0000001;
- int DB_REP_NOTPERM = -30980;
- int DB_REP_PERMANENT = 0x0000002;
- int DB_REP_STARTUPDONE = -30979;
- int DB_REVSPLITOFF = 0x0000080;
- int DB_RMW = 0x20000000;
- int DB_RPCCLIENT = 0x0000001;
+ int DB_RECNUM = 0x00080000;
+ int DB_RECOVER = 0x0000040;
+ int DB_RECOVER_FATAL = 0x0400000;
+ int DB_REGION_INIT = 0x20000000;
+ int DB_REGISTER = 0x0800000;
+ int DB_RENUMBER = 0x00100000;
+ int DB_REPMGR_ACKS_ALL = 1;
+ int DB_REPMGR_ACKS_ALL_PEERS = 2;
+ int DB_REPMGR_ACKS_NONE = 3;
+ int DB_REPMGR_ACKS_ONE = 4;
+ int DB_REPMGR_ACKS_ONE_PEER = 5;
+ int DB_REPMGR_ACKS_QUORUM = 6;
+ int DB_REPMGR_CONNECTED = 0x01;
+ int DB_REPMGR_PEER = 0x01;
+ int DB_REP_ACK_TIMEOUT = 1;
+ int DB_REP_ANYWHERE = 0x0000001;
+ int DB_REP_CLIENT = 1;
+ int DB_REP_CONF_BULK = 0x0001;
+ int DB_REP_CONF_DELAYCLIENT = 0x0002;
+ int DB_REP_CONF_NOAUTOINIT = 0x0004;
+ int DB_REP_CONF_NOWAIT = 0x0008;
+ int DB_REP_CONNECTION_RETRY = 4;
+ int DB_REP_ELECTION = 2;
+ int DB_REP_ELECTION_RETRY = 3;
+ int DB_REP_ELECTION_TIMEOUT = 2;
+ int DB_REP_FULL_ELECTION = 3;
+ int DB_REP_IGNORE = -30983;
+ int DB_REP_ISPERM = -30982;
+ int DB_REP_MASTER = 4;
+ int DB_REP_NEWMASTER = -30979;
+ int DB_REP_NEWSITE = -30978;
+ int DB_REP_NOBUFFER = 0x0000002;
+ int DB_REP_NOTPERM = -30977;
+ int DB_REP_PERMANENT = 0x0000004;
+ int DB_REP_REREQUEST = 0x0000008;
+ int DB_REVSPLITOFF = 0x00200000;
+ int DB_RMW = 0x40000000;
+ int DB_RPCCLIENT = 0x0000002;
int DB_SALVAGE = 0x0000040;
int DB_SEQ_DEC = 0x00000001;
int DB_SEQ_INC = 0x00000002;
int DB_SEQ_WRAP = 0x00000008;
- int DB_SET = 28;
- int DB_SET_LOCK_TIMEOUT = 29;
- int DB_SET_RANGE = 30;
- int DB_SET_RECNO = 31;
- int DB_SET_TXN_TIMEOUT = 33;
- int DB_SNAPSHOT = 0x0000100;
- int DB_STAT_CLEAR = 0x0000002;
- int DB_SYSTEM_MEM = 0x0400000;
- int DB_THREAD = 0x0000040;
- int DB_TIME_NOTGRANTED = 0x00800000;
- int DB_TRUNCATE = 0x0000080;
+ int DB_SET = 25;
+ int DB_SET_LOCK_TIMEOUT = 26;
+ int DB_SET_RANGE = 27;
+ int DB_SET_RECNO = 28;
+ int DB_SET_TXN_TIMEOUT = 30;
+ int DB_SNAPSHOT = 0x00400000;
+ int DB_STAT_CLEAR = 0x0000004;
+ int DB_SYSTEM_MEM = 0x1000000;
+ int DB_THREAD = 0x0000080;
+ int DB_TIME_NOTGRANTED = 0x40000000;
+ int DB_TRUNCATE = 0x0000100;
int DB_TXN_ABORT = 0;
int DB_TXN_APPLY = 1;
int DB_TXN_BACKWARD_ROLL = 3;
int DB_TXN_FORWARD_ROLL = 4;
- int DB_TXN_NOSYNC = 0x0000100;
- int DB_TXN_NOT_DURABLE = 0x0000200;
- int DB_TXN_NOWAIT = 0x0001000;
+ int DB_TXN_NOSYNC = 0x0000200;
+ int DB_TXN_NOT_DURABLE = 0x0000400;
+ int DB_TXN_NOWAIT = 0x0004000;
int DB_TXN_PRINT = 7;
- int DB_TXN_SYNC = 0x0002000;
- int DB_TXN_WRITE_NOSYNC = 0x10000000;
+ int DB_TXN_SNAPSHOT = 0x10000000;
+ int DB_TXN_SYNC = 0x0008000;
+ int DB_TXN_WRITE_NOSYNC = 0x0000800;
int DB_UNKNOWN = 5;
int DB_UPGRADE = 0x0000001;
- int DB_USE_ENVIRON = 0x0000400;
- int DB_USE_ENVIRON_ROOT = 0x0000800;
+ int DB_USE_ENVIRON = 0x0001000;
+ int DB_USE_ENVIRON_ROOT = 0x0002000;
int DB_VERB_DEADLOCK = 0x0001;
int DB_VERB_RECOVERY = 0x0002;
- int DB_VERB_REPLICATION = 0x0004;
- int DB_VERB_WAITSFOR = 0x0008;
+ int DB_VERB_REGISTER = 0x0004;
+ int DB_VERB_REPLICATION = 0x0008;
+ int DB_VERB_WAITSFOR = 0x0010;
int DB_VERIFY = 0x0000002;
int DB_VERSION_MAJOR = 4;
- int DB_VERSION_MINOR = 3;
- int DB_VERSION_PATCH = 27;
- int DB_WRITECURSOR = 35;
+ int DB_VERSION_MINOR = 5;
+ int DB_VERSION_PATCH = 20;
+ int DB_WRITECURSOR = 32;
int DB_XA_CREATE = 0x0000002;
int DB_XIDDATASIZE = 128;
- int DB_YIELDCPU = 0x20000000;
+ int DB_YIELDCPU = 0x80000000;
}
// end of DbConstants.java
diff --git a/db/java/src/com/sleepycat/db/internal/DbEnv.java b/db/java/src/com/sleepycat/db/internal/DbEnv.java
index 1a8112943..de3822a95 100644
--- a/db/java/src/com/sleepycat/db/internal/DbEnv.java
+++ b/db/java/src/com/sleepycat/db/internal/DbEnv.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class DbEnv {
swigCPtr = cPtr;
}
- protected DbEnv() {
- this(0, false);
+ protected static long getCPtr(DbEnv obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class DbEnv {
swigCPtr = 0;
}
- protected static long getCPtr(DbEnv obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
/*
* Internally, the JNI layer creates a global reference to each DbEnv,
* which can potentially be different to this. We keep a copy here so
@@ -46,8 +41,10 @@ public class DbEnv {
public Environment wrapper;
private LogRecordHandler app_dispatch_handler;
+ private EventHandler event_notify_handler;
private FeedbackHandler env_feedback_handler;
private ErrorHandler error_handler;
+ private String errpfx;
private MessageHandler message_handler;
private PanicHandler panic_handler;
private ReplicationTransport rep_transport_handler;
@@ -83,14 +80,25 @@ public class DbEnv {
}
}
- private final int handle_app_dispatch(DatabaseEntry dbt, LogSequenceNumber lsn, int recops) {
- return app_dispatch_handler.handleLogRecord(wrapper, dbt, lsn, RecoveryOperation.fromFlag(recops));
+ private final int handle_app_dispatch(DatabaseEntry dbt,
+ LogSequenceNumber lsn,
+ int recops) {
+ return app_dispatch_handler.handleLogRecord(wrapper, dbt, lsn,
+ RecoveryOperation.fromFlag(recops));
}
public LogRecordHandler get_app_dispatch() throws com.sleepycat.db.DatabaseException {
return app_dispatch_handler;
}
+ private final int handle_event_notify(int event) {
+ return event_notify_handler.handleEvent(EventType.fromInt(event));
+ }
+
+ public EventHandler get_event_notify() throws com.sleepycat.db.DatabaseException {
+ return event_notify_handler;
+ }
+
private final void handle_env_feedback(int opcode, int percent) {
if (opcode == DbConstants.DB_RECOVER)
env_feedback_handler.recoveryFeedback(wrapper, percent);
@@ -101,8 +109,16 @@ public class DbEnv {
return env_feedback_handler;
}
- private final void handle_error(String errpfx, String msg) {
- error_handler.error(wrapper, errpfx, msg);
+ public void set_errpfx(String errpfx) /* no exception */ {
+ this.errpfx = errpfx;
+ }
+
+ public String get_errpfx() /* no exception */ {
+ return errpfx;
+ }
+
+ private final void handle_error(String msg) {
+ error_handler.error(wrapper, this.errpfx, msg);
}
public ErrorHandler get_errcall() /* no exception */ {
@@ -125,16 +141,22 @@ public class DbEnv {
return panic_handler;
}
- private final int handle_rep_transport(DatabaseEntry control, DatabaseEntry rec,
- LogSequenceNumber lsn, int envid, int flags)
+ private final int handle_rep_transport(DatabaseEntry control,
+ DatabaseEntry rec,
+ LogSequenceNumber lsn,
+ int envid, int flags)
throws DatabaseException {
- return rep_transport_handler.send(wrapper, control, rec, lsn, envid,
+ return rep_transport_handler.send(wrapper,
+ control, rec, lsn, envid,
(flags & DbConstants.DB_REP_NOBUFFER) != 0,
- (flags & DbConstants.DB_REP_PERMANENT) != 0);
+ (flags & DbConstants.DB_REP_PERMANENT) != 0,
+ (flags & DbConstants.DB_REP_ANYWHERE) != 0,
+ (flags & DbConstants.DB_REP_REREQUEST) != 0);
}
-
+
public void lock_vec(/*u_int32_t*/ int locker, int flags,
- LockRequest[] list, int offset, int count) throws DatabaseException {
+ LockRequest[] list, int offset, int count)
+ throws DatabaseException {
db_javaJNI.DbEnv_lock_vec(swigCPtr, locker, flags, list,
offset, count);
}
@@ -206,14 +228,17 @@ public class DbEnv {
db_javaJNI.DbEnv_errx(swigCPtr, message);
}
+ public DbTxn cdsgroup_begin() throws com.sleepycat.db.DatabaseException {
+ long cPtr = db_javaJNI.DbEnv_cdsgroup_begin(swigCPtr);
+ return (cPtr == 0) ? null : new DbTxn(cPtr, false);
+ }
+
+ public void fileid_reset(String file, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_fileid_reset(swigCPtr, file, flags); }
+
public String[] get_data_dirs() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_data_dirs(swigCPtr); }
public int get_encrypt_flags() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_encrypt_flags(swigCPtr); }
- public String get_errpfx() /* no exception */ {
- return db_javaJNI.DbEnv_get_errpfx(swigCPtr);
- }
-
public int get_flags() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_flags(swigCPtr); }
public String get_home() throws com.sleepycat.db.DatabaseException {
@@ -224,14 +249,16 @@ public class DbEnv {
public long get_shm_key() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_shm_key(swigCPtr); }
- public int get_tas_spins() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_tas_spins(swigCPtr); }
-
public String get_tmp_dir() throws com.sleepycat.db.DatabaseException {
return db_javaJNI.DbEnv_get_tmp_dir(swigCPtr);
}
public boolean get_verbose(int which) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_verbose(swigCPtr, which); }
+ public boolean is_bigendian() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_is_bigendian(swigCPtr); }
+
+ public void lsn_reset(String file, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_lsn_reset(swigCPtr, file, flags); }
+
public void open(String db_home, int flags, int mode) throws com.sleepycat.db.DatabaseException, java.io.FileNotFoundException { db_javaJNI.DbEnv_open(swigCPtr, db_home, flags, mode); }
/* package */ void remove0(String db_home, int flags) { db_javaJNI.DbEnv_remove0(swigCPtr, db_home, flags); }
@@ -240,20 +267,22 @@ public class DbEnv {
public void set_data_dir(String dir) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_data_dir(swigCPtr, dir); }
+ public void set_intermediate_dir(int mode, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_intermediate_dir(swigCPtr, mode, flags); }
+
public void set_encrypt(String passwd, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_encrypt(swigCPtr, passwd, flags); }
public void set_errcall(com.sleepycat.db.ErrorHandler db_errcall_fcn) /* no exception */ {
db_javaJNI.DbEnv_set_errcall(swigCPtr, (error_handler = db_errcall_fcn) );
}
- public void set_errpfx(String errpfx) /* no exception */ {
- db_javaJNI.DbEnv_set_errpfx(swigCPtr, errpfx);
- }
-
public void set_flags(int flags, boolean onoff) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_flags(swigCPtr, flags, onoff); }
public void set_feedback(com.sleepycat.db.FeedbackHandler env_feedback_fcn) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_feedback(swigCPtr, (env_feedback_handler = env_feedback_fcn) ); }
+ public void set_mp_max_openfd(int maxopenfd) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_mp_max_openfd(swigCPtr, maxopenfd); }
+
+ public void set_mp_max_write(int maxwrite, int maxwrite_sleep) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_mp_max_write(swigCPtr, maxwrite, maxwrite_sleep); }
+
public void set_mp_mmapsize(long mp_mmapsize) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_mp_mmapsize(swigCPtr, mp_mmapsize); }
public void set_msgcall(com.sleepycat.db.MessageHandler db_msgcall_fcn) /* no exception */ {
@@ -262,12 +291,10 @@ public class DbEnv {
public void set_paniccall(com.sleepycat.db.PanicHandler db_panic_fcn) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_paniccall(swigCPtr, (panic_handler = db_panic_fcn) ); }
- public void set_rpc_server(DbClient client, String host, long cl_timeout, long sv_timeout, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_rpc_server(swigCPtr, client, host, cl_timeout, sv_timeout, flags); }
+ public void set_rpc_server(String host, long cl_timeout, long sv_timeout, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_rpc_server(swigCPtr, host, cl_timeout, sv_timeout, flags); }
public void set_shm_key(long shm_key) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_shm_key(swigCPtr, shm_key); }
- public void set_tas_spins(int tas_spins) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_tas_spins(swigCPtr, tas_spins); }
-
public void set_timeout(long timeout, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_timeout(swigCPtr, timeout, flags); }
public void set_tmp_dir(String dir) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_tmp_dir(swigCPtr, dir); }
@@ -276,6 +303,8 @@ public class DbEnv {
public void set_app_dispatch(com.sleepycat.db.LogRecordHandler tx_recover) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_app_dispatch(swigCPtr, (app_dispatch_handler = tx_recover) ); }
+ public void set_event_notify(com.sleepycat.db.EventHandler event_notify) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_event_notify(swigCPtr, (event_notify_handler = event_notify) ); }
+
/* package */ void set_tx_timestamp0(long timestamp) { db_javaJNI.DbEnv_set_tx_timestamp0(swigCPtr, timestamp); }
public void set_verbose(int which, boolean onoff) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_verbose(swigCPtr, which, onoff); }
@@ -323,6 +352,10 @@ public class DbEnv {
return db_javaJNI.DbEnv_get_lg_dir(swigCPtr);
}
+ public int get_lg_filemode() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_get_lg_filemode(swigCPtr);
+ }
+
public int get_lg_max() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_lg_max(swigCPtr); }
public int get_lg_regionmax() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_lg_regionmax(swigCPtr); }
@@ -342,16 +375,20 @@ public class DbEnv {
return db_javaJNI.DbEnv_log_file(swigCPtr, lsn);
}
- public void log_flush(com.sleepycat.db.LogSequenceNumber lsn) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_log_flush(swigCPtr, lsn); }
+ public void log_flush(com.sleepycat.db.LogSequenceNumber lsn_or_null) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_log_flush(swigCPtr, lsn_or_null); }
public void log_put(com.sleepycat.db.LogSequenceNumber lsn, com.sleepycat.db.DatabaseEntry data, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_log_put(swigCPtr, lsn, data, flags); }
+ public void log_print(DbTxn txn, String msg) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_log_print(swigCPtr, DbTxn.getCPtr(txn), msg); }
+
public com.sleepycat.db.LogStats log_stat(int flags) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_log_stat(swigCPtr, flags); }
public void set_lg_bsize(int lg_bsize) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_lg_bsize(swigCPtr, lg_bsize); }
public void set_lg_dir(String dir) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_lg_dir(swigCPtr, dir); }
+ public void set_lg_filemode(int mode) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_lg_filemode(swigCPtr, mode); }
+
public void set_lg_max(int lg_max) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_lg_max(swigCPtr, lg_max); }
public void set_lg_regionmax(int lg_regionmax) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_lg_regionmax(swigCPtr, lg_regionmax); }
@@ -364,6 +401,18 @@ public class DbEnv {
return db_javaJNI.DbEnv_get_cachesize_ncache(swigCPtr);
}
+ public int get_mp_max_openfd() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_get_mp_max_openfd(swigCPtr);
+ }
+
+ public int get_mp_max_write() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_get_mp_max_write(swigCPtr);
+ }
+
+ public int get_mp_max_write_sleep() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_get_mp_max_write_sleep(swigCPtr);
+ }
+
public long get_mp_mmapsize() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_mp_mmapsize(swigCPtr); }
public com.sleepycat.db.CacheStats memp_stat(int flags) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_memp_stat(swigCPtr, flags); }
@@ -374,6 +423,24 @@ public class DbEnv {
return db_javaJNI.DbEnv_memp_trickle(swigCPtr, percent);
}
+ public int mutex_get_align() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_mutex_get_align(swigCPtr); }
+
+ public int mutex_get_increment() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_mutex_get_increment(swigCPtr); }
+
+ public int mutex_get_max() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_mutex_get_max(swigCPtr); }
+
+ public int mutex_get_tas_spins() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_mutex_get_tas_spins(swigCPtr); }
+
+ public void mutex_set_align(int align) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_mutex_set_align(swigCPtr, align); }
+
+ public void mutex_set_increment(int increment) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_mutex_set_increment(swigCPtr, increment); }
+
+ public void mutex_set_max(int mutex_max) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_mutex_set_max(swigCPtr, mutex_max); }
+
+ public void mutex_set_tas_spins(int tas_spins) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_mutex_set_tas_spins(swigCPtr, tas_spins); }
+
+ public com.sleepycat.db.MutexStats mutex_stat(int flags) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_mutex_stat(swigCPtr, flags); }
+
public int get_tx_max() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_tx_max(swigCPtr); }
public long get_tx_timestamp() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_get_tx_timestamp(swigCPtr); }
@@ -391,25 +458,65 @@ public class DbEnv {
public com.sleepycat.db.TransactionStats txn_stat(int flags) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_txn_stat(swigCPtr, flags); }
- public long get_rep_limit() throws com.sleepycat.db.DatabaseException {
- return db_javaJNI.DbEnv_get_rep_limit(swigCPtr);
+ public long rep_get_limit() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_rep_get_limit(swigCPtr);
}
- public int rep_elect(int nsites, int nvotes, int priority, int timeout, int flags) throws com.sleepycat.db.DatabaseException {
- return db_javaJNI.DbEnv_rep_elect(swigCPtr, nsites, nvotes, priority, timeout, flags);
+ public int rep_elect(int nsites, int nvotes, int flags) throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_rep_elect(swigCPtr, nsites, nvotes, flags);
}
public int rep_process_message(com.sleepycat.db.DatabaseEntry control, com.sleepycat.db.DatabaseEntry rec, DbEnv.RepProcessMessage envid, com.sleepycat.db.LogSequenceNumber ret_lsn) /* no exception */ {
return db_javaJNI.DbEnv_rep_process_message(swigCPtr, control, rec, envid, ret_lsn);
}
+ public void rep_flush() throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_flush(swigCPtr); }
+
+ public void rep_set_config(int which, boolean onoff) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_set_config(swigCPtr, which, onoff); }
+
public void rep_start(com.sleepycat.db.DatabaseEntry cdata, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_start(swigCPtr, cdata, flags); }
+ public void rep_sync(int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_sync(swigCPtr, flags); }
+
+ public boolean rep_get_config(int which) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_rep_get_config(swigCPtr, which); }
+
public com.sleepycat.db.ReplicationStats rep_stat(int flags) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_rep_stat(swigCPtr, flags); }
- public void set_rep_limit(long bytes) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_rep_limit(swigCPtr, bytes); }
+ public void rep_set_limit(long bytes) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_set_limit(swigCPtr, bytes); }
+
+ public void set_rep_request(int min, int max) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_rep_request(swigCPtr, min, max); }
+
+ public void rep_set_transport(int envid, com.sleepycat.db.ReplicationTransport send) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_set_transport(swigCPtr, envid, (rep_transport_handler = send) ); }
+
+ public int rep_get_nsites() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_rep_get_nsites(swigCPtr);
+ }
+
+ public int rep_get_priority() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_rep_get_priority(swigCPtr);
+ }
+
+ public int rep_get_timeout(int which) throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_rep_get_timeout(swigCPtr, which); }
+
+ public void rep_set_nsites(int number) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_set_nsites(swigCPtr, number); }
+
+ public void rep_set_priority(int priority) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_set_priority(swigCPtr, priority); }
+
+ public void rep_set_timeout(int which, long timeout) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_rep_set_timeout(swigCPtr, which, timeout); }
+
+ public int repmgr_add_remote_site(String host, int port, int flags) throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbEnv_repmgr_add_remote_site(swigCPtr, host, port, flags);
+ }
+
+ public void repmgr_get_ack_policy() throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_repmgr_get_ack_policy(swigCPtr); }
+
+ public void repmgr_set_ack_policy(int policy) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_repmgr_set_ack_policy(swigCPtr, policy); }
+
+ public void repmgr_set_local_site(String host, int port, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_repmgr_set_local_site(swigCPtr, host, port, flags); }
+
+ public com.sleepycat.db.ReplicationHostAddress[] repmgr_site_list() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbEnv_repmgr_site_list(swigCPtr); }
- public void set_rep_transport(int envid, com.sleepycat.db.ReplicationTransport send) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_set_rep_transport(swigCPtr, envid, (rep_transport_handler = send) ); }
+ public void repmgr_start(int nthreads, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbEnv_repmgr_start(swigCPtr, nthreads, flags); }
public static String strerror(int error) /* no exception */ {
return db_javaJNI.DbEnv_strerror(error);
diff --git a/db/java/src/com/sleepycat/db/internal/DbLock.java b/db/java/src/com/sleepycat/db/internal/DbLock.java
index 723629908..656396525 100644
--- a/db/java/src/com/sleepycat/db/internal/DbLock.java
+++ b/db/java/src/com/sleepycat/db/internal/DbLock.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class DbLock {
swigCPtr = cPtr;
}
- protected DbLock() {
- this(0, false);
+ protected static long getCPtr(DbLock obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
@@ -42,10 +41,6 @@ public class DbLock {
swigCPtr = 0;
}
- protected static long getCPtr(DbLock obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
public Lock wrapper;
}
diff --git a/db/java/src/com/sleepycat/db/internal/DbLogc.java b/db/java/src/com/sleepycat/db/internal/DbLogc.java
index d26d95f60..e2daad018 100644
--- a/db/java/src/com/sleepycat/db/internal/DbLogc.java
+++ b/db/java/src/com/sleepycat/db/internal/DbLogc.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class DbLogc {
swigCPtr = cPtr;
}
- protected DbLogc() {
- this(0, false);
+ protected static long getCPtr(DbLogc obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class DbLogc {
swigCPtr = 0;
}
- protected static long getCPtr(DbLogc obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
public synchronized void close(int flags) throws DatabaseException {
try {
close0(flags);
diff --git a/db/java/src/com/sleepycat/db/internal/DbMpoolFile.java b/db/java/src/com/sleepycat/db/internal/DbMpoolFile.java
index e72c1c70d..9e193db62 100644
--- a/db/java/src/com/sleepycat/db/internal/DbMpoolFile.java
+++ b/db/java/src/com/sleepycat/db/internal/DbMpoolFile.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class DbMpoolFile {
swigCPtr = cPtr;
}
- protected DbMpoolFile() {
- this(0, false);
+ protected static long getCPtr(DbMpoolFile obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class DbMpoolFile {
swigCPtr = 0;
}
- protected static long getCPtr(DbMpoolFile obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
public int get_priority() throws com.sleepycat.db.DatabaseException {
return db_javaJNI.DbMpoolFile_get_priority(swigCPtr);
}
diff --git a/db/java/src/com/sleepycat/db/internal/DbSequence.java b/db/java/src/com/sleepycat/db/internal/DbSequence.java
index ac8da65b5..34b620d7f 100644
--- a/db/java/src/com/sleepycat/db/internal/DbSequence.java
+++ b/db/java/src/com/sleepycat/db/internal/DbSequence.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class DbSequence {
swigCPtr = cPtr;
}
- protected DbSequence() {
- this(0, false);
+ protected static long getCPtr(DbSequence obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class DbSequence {
swigCPtr = 0;
}
- protected static long getCPtr(DbSequence obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
public Sequence wrapper;
public synchronized void close(int flags) throws DatabaseException {
diff --git a/db/java/src/com/sleepycat/db/internal/DbTxn.java b/db/java/src/com/sleepycat/db/internal/DbTxn.java
index d277f1982..088e8e26a 100644
--- a/db/java/src/com/sleepycat/db/internal/DbTxn.java
+++ b/db/java/src/com/sleepycat/db/internal/DbTxn.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class DbTxn {
swigCPtr = cPtr;
}
- protected DbTxn() {
- this(0, false);
+ protected static long getCPtr(DbTxn obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class DbTxn {
swigCPtr = 0;
}
- protected static long getCPtr(DbTxn obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
public void abort() throws DatabaseException {
try {
abort0();
@@ -94,10 +89,16 @@ public class DbTxn {
/* package */ void discard0(int flags) { db_javaJNI.DbTxn_discard0(swigCPtr, flags); }
+ public String get_name() throws com.sleepycat.db.DatabaseException {
+ return db_javaJNI.DbTxn_get_name(swigCPtr);
+ }
+
public int id() throws com.sleepycat.db.DatabaseException { return db_javaJNI.DbTxn_id(swigCPtr); }
public void prepare(byte[] gid) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbTxn_prepare(swigCPtr, gid); }
public void set_timeout(long timeout, int flags) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbTxn_set_timeout(swigCPtr, timeout, flags); }
+ public void set_name(String name) throws com.sleepycat.db.DatabaseException { db_javaJNI.DbTxn_set_name(swigCPtr, name); }
+
}
diff --git a/db/java/src/com/sleepycat/db/internal/DbUtil.java b/db/java/src/com/sleepycat/db/internal/DbUtil.java
index 54a2730f9..520613d1e 100644
--- a/db/java/src/com/sleepycat/db/internal/DbUtil.java
+++ b/db/java/src/com/sleepycat/db/internal/DbUtil.java
@@ -1,11 +1,10 @@
-/*
- * -
- * See the file LICENSE for redistribution information.
+/*-
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2003
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DbUtil.java,v 1.2 2004/09/22 18:01:04 bostic Exp $
+ * $Id: DbUtil.java,v 12.3 2006/08/24 14:46:09 bostic Exp $
*/
package com.sleepycat.db.internal;
diff --git a/db/java/src/com/sleepycat/db/internal/Dbc.java b/db/java/src/com/sleepycat/db/internal/Dbc.java
index 9d9bced88..c45cef0fb 100644
--- a/db/java/src/com/sleepycat/db/internal/Dbc.java
+++ b/db/java/src/com/sleepycat/db/internal/Dbc.java
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
@@ -8,7 +8,6 @@
package com.sleepycat.db.internal;
-
import com.sleepycat.db.*;
import java.util.Comparator;
@@ -21,8 +20,8 @@ public class Dbc {
swigCPtr = cPtr;
}
- protected Dbc() {
- this(0, false);
+ protected static long getCPtr(Dbc obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
/* package */ void delete() {
@@ -33,10 +32,6 @@ public class Dbc {
swigCPtr = 0;
}
- protected static long getCPtr(Dbc obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
-
public synchronized void close() throws DatabaseException {
try {
close0();
diff --git a/db/java/src/com/sleepycat/db/internal/db_java.java b/db/java/src/com/sleepycat/db/internal/db_java.java
index 6bfbf64c8..724c196f0 100644
--- a/db/java/src/com/sleepycat/db/internal/db_java.java
+++ b/db/java/src/com/sleepycat/db/internal/db_java.java
@@ -1,13 +1,12 @@
-package com.sleepycat.db.internal;
-
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
+package com.sleepycat.db.internal;
/* package */ class db_java {
public static void DbEnv_lock_vec(DbEnv dbenv, int locker, int flags, com.sleepycat.db.LockRequest[] list, int offset, int nlist) throws com.sleepycat.db.DatabaseException {
diff --git a/db/java/src/com/sleepycat/db/internal/db_javaJNI.java b/db/java/src/com/sleepycat/db/internal/db_javaJNI.java
index 4b47b3bec..7ad91c6a2 100644
--- a/db/java/src/com/sleepycat/db/internal/db_javaJNI.java
+++ b/db/java/src/com/sleepycat/db/internal/db_javaJNI.java
@@ -1,13 +1,12 @@
-package com.sleepycat.db.internal;
-
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version: 1.3.21
+ * Version 1.3.29
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
+package com.sleepycat.db.internal;
class db_javaJNI {
@@ -15,9 +14,11 @@ class db_javaJNI {
/* An alternate library name can be specified via a property. */
String libname;
- if ((libname = System.getProperty("sleepycat.db.libfile")) != null)
+ if ((libname =
+ System.getProperty("sleepycat.db.libfile")) != null)
System.load(libname);
- else if ((libname = System.getProperty("sleepycat.db.libname")) != null)
+ else if ((libname =
+ System.getProperty("sleepycat.db.libname")) != null)
System.loadLibrary(libname);
else {
String os = System.getProperty("os.name");
@@ -52,11 +53,12 @@ class db_javaJNI {
}
initialize();
-
+
if (DbEnv_get_version_major() != DbConstants.DB_VERSION_MAJOR ||
DbEnv_get_version_minor() != DbConstants.DB_VERSION_MINOR ||
DbEnv_get_version_patch() != DbConstants.DB_VERSION_PATCH)
- throw new RuntimeException("Berkeley DB library version doesn't match Java classes");
+ throw new RuntimeException(
+ "Berkeley DB library version doesn't match Java classes");
}
static native final void initialize();
@@ -68,6 +70,7 @@ class db_javaJNI {
/* package */ final static native long getDbEnv0(long jarg1);
public final static native long new_Db(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_associate(long jarg1, long jarg2, long jarg3, com.sleepycat.db.SecondaryKeyCreator jarg4, int jarg5) throws com.sleepycat.db.DatabaseException;
+ public final static native void Db_compact(long jarg1, long jarg2, com.sleepycat.db.DatabaseEntry jarg3, com.sleepycat.db.DatabaseEntry jarg4, com.sleepycat.db.CompactStats jarg5, int jarg6, com.sleepycat.db.DatabaseEntry jarg7) throws com.sleepycat.db.DatabaseException;
/* package */ final static native int Db_close0(long jarg1, int jarg2);
public final static native long Db_cursor(long jarg1, long jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native int Db_del(long jarg1, long jarg2, com.sleepycat.db.DatabaseEntry jarg3, int jarg4) throws com.sleepycat.db.DatabaseException;
@@ -81,7 +84,6 @@ class db_javaJNI {
public final static native String Db_get_filename(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native String Db_get_dbname(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int Db_get_encrypt_flags(long jarg1) throws com.sleepycat.db.DatabaseException;
- public final static native String Db_get_errpfx(long jarg1) /* no exception */;
public final static native int Db_get_flags(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int Db_get_lorder(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native long Db_get_mpf(long jarg1) throws com.sleepycat.db.DatabaseException;
@@ -105,13 +107,11 @@ class db_javaJNI {
/* package */ 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, com.sleepycat.db.RecordNumberAppender jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_bt_compare(long jarg1, java.util.Comparator jarg2) throws com.sleepycat.db.DatabaseException;
- public final static native void Db_set_bt_maxkey(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_bt_minkey(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_bt_prefix(long jarg1, com.sleepycat.db.BtreePrefixCalculator jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_cachesize(long jarg1, long jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_dup_compare(long jarg1, java.util.Comparator jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_encrypt(long jarg1, String jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
- public final static native void Db_set_errpfx(long jarg1, String jarg2) /* no exception */;
public final static native void Db_set_feedback(long jarg1, com.sleepycat.db.FeedbackHandler jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_flags(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void Db_set_h_ffactor(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
@@ -142,35 +142,39 @@ class db_javaJNI {
public final static native void DbEnv_dbrename(long jarg1, long jarg2, String jarg3, String jarg4, String jarg5, int jarg6) throws com.sleepycat.db.DatabaseException, java.io.FileNotFoundException;
public final static native void DbEnv_err(long jarg1, int jarg2, String jarg3) /* no exception */;
public final static native void DbEnv_errx(long jarg1, String jarg2) /* no exception */;
+ public final static native long DbEnv_cdsgroup_begin(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_fileid_reset(long jarg1, String jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native String[] DbEnv_get_data_dirs(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_encrypt_flags(long jarg1) throws com.sleepycat.db.DatabaseException;
- public final static native String DbEnv_get_errpfx(long jarg1) /* no exception */;
public final static native int DbEnv_get_flags(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native String DbEnv_get_home(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_open_flags(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native long DbEnv_get_shm_key(long jarg1) throws com.sleepycat.db.DatabaseException;
- public final static native int DbEnv_get_tas_spins(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native String DbEnv_get_tmp_dir(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native boolean DbEnv_get_verbose(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native boolean DbEnv_is_bigendian(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_lsn_reset(long jarg1, String jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_open(long jarg1, String jarg2, int jarg3, int jarg4) throws com.sleepycat.db.DatabaseException, java.io.FileNotFoundException;
/* package */ 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 com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_data_dir(long jarg1, String jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_intermediate_dir(long jarg1, int jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_encrypt(long jarg1, String jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_errcall(long jarg1, com.sleepycat.db.ErrorHandler jarg2) /* no exception */;
- public final static native void DbEnv_set_errpfx(long jarg1, String jarg2) /* no exception */;
public final static native void DbEnv_set_flags(long jarg1, int jarg2, boolean jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_feedback(long jarg1, com.sleepycat.db.FeedbackHandler jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_mp_max_openfd(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_mp_max_write(long jarg1, int jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_mp_mmapsize(long jarg1, long jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_msgcall(long jarg1, com.sleepycat.db.MessageHandler jarg2) /* no exception */;
public final static native void DbEnv_set_paniccall(long jarg1, com.sleepycat.db.PanicHandler jarg2) throws com.sleepycat.db.DatabaseException;
- public final static native void DbEnv_set_rpc_server(long jarg1, DbClient jarg2, String jarg3, long jarg4, long jarg5, int jarg6) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_rpc_server(long jarg1, String jarg2, long jarg3, long jarg4, int jarg5) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_shm_key(long jarg1, long jarg2) throws com.sleepycat.db.DatabaseException;
- public final static native void DbEnv_set_tas_spins(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_timeout(long jarg1, long jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_tmp_dir(long jarg1, String jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_tx_max(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_app_dispatch(long jarg1, com.sleepycat.db.LogRecordHandler jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_event_notify(long jarg1, com.sleepycat.db.EventHandler jarg2) throws com.sleepycat.db.DatabaseException;
/* package */ 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 com.sleepycat.db.DatabaseException;
public final static native byte[][] DbEnv_get_lk_conflicts(long jarg1) throws com.sleepycat.db.DatabaseException;
@@ -191,6 +195,7 @@ class db_javaJNI {
public final static native void DbEnv_set_lk_max_objects(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_lg_bsize(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native String DbEnv_get_lg_dir(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_get_lg_filemode(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_lg_max(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_lg_regionmax(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native String[] DbEnv_log_archive(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
@@ -199,17 +204,31 @@ class db_javaJNI {
public final static native String DbEnv_log_file(long jarg1, com.sleepycat.db.LogSequenceNumber jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_log_flush(long jarg1, com.sleepycat.db.LogSequenceNumber jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_log_put(long jarg1, com.sleepycat.db.LogSequenceNumber jarg2, com.sleepycat.db.DatabaseEntry jarg3, int jarg4) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_log_print(long jarg1, long jarg2, String jarg3) throws com.sleepycat.db.DatabaseException;
public final static native com.sleepycat.db.LogStats DbEnv_log_stat(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_lg_bsize(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_lg_dir(long jarg1, String jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_lg_filemode(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_lg_max(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_set_lg_regionmax(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native long DbEnv_get_cachesize(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_cachesize_ncache(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_get_mp_max_openfd(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_get_mp_max_write(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_get_mp_max_write_sleep(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native long DbEnv_get_mp_mmapsize(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native com.sleepycat.db.CacheStats DbEnv_memp_stat(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native com.sleepycat.db.CacheFileStats[] DbEnv_memp_fstat(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_memp_trickle(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_mutex_get_align(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_mutex_get_increment(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_mutex_get_max(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_mutex_get_tas_spins(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_mutex_set_align(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_mutex_set_increment(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_mutex_set_max(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_mutex_set_tas_spins(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native com.sleepycat.db.MutexStats DbEnv_mutex_stat(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_get_tx_max(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native long DbEnv_get_tx_timestamp(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native long DbEnv_get_timeout(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
@@ -217,13 +236,30 @@ class db_javaJNI {
public final static native void DbEnv_txn_checkpoint(long jarg1, int jarg2, int jarg3, int jarg4) throws com.sleepycat.db.DatabaseException;
public final static native com.sleepycat.db.PreparedTransaction[] DbEnv_txn_recover(long jarg1, int jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native com.sleepycat.db.TransactionStats DbEnv_txn_stat(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
- public final static native long DbEnv_get_rep_limit(long jarg1) throws com.sleepycat.db.DatabaseException;
- public final static native int DbEnv_rep_elect(long jarg1, int jarg2, int jarg3, int jarg4, int jarg5, int jarg6) throws com.sleepycat.db.DatabaseException;
+ public final static native long DbEnv_rep_get_limit(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_rep_elect(long jarg1, int jarg2, int jarg3, int jarg4) throws com.sleepycat.db.DatabaseException;
public final static native int DbEnv_rep_process_message(long jarg1, com.sleepycat.db.DatabaseEntry jarg2, com.sleepycat.db.DatabaseEntry jarg3, DbEnv.RepProcessMessage jarg4, com.sleepycat.db.LogSequenceNumber jarg5) /* no exception */;
+ public final static native void DbEnv_rep_flush(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_set_config(long jarg1, int jarg2, boolean jarg3) throws com.sleepycat.db.DatabaseException;
public final static native void DbEnv_rep_start(long jarg1, com.sleepycat.db.DatabaseEntry jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_sync(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native boolean DbEnv_rep_get_config(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
public final static native com.sleepycat.db.ReplicationStats DbEnv_rep_stat(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
- public final static native void DbEnv_set_rep_limit(long jarg1, long jarg2) throws com.sleepycat.db.DatabaseException;
- public final static native void DbEnv_set_rep_transport(long jarg1, int jarg2, com.sleepycat.db.ReplicationTransport jarg3) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_set_limit(long jarg1, long jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_set_rep_request(long jarg1, int jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_set_transport(long jarg1, int jarg2, com.sleepycat.db.ReplicationTransport jarg3) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_rep_get_nsites(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_rep_get_priority(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_rep_get_timeout(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_set_nsites(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_set_priority(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_rep_set_timeout(long jarg1, int jarg2, long jarg3) throws com.sleepycat.db.DatabaseException;
+ public final static native int DbEnv_repmgr_add_remote_site(long jarg1, String jarg2, int jarg3, int jarg4) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_repmgr_get_ack_policy(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_repmgr_set_ack_policy(long jarg1, int jarg2) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_repmgr_set_local_site(long jarg1, String jarg2, int jarg3, int jarg4) throws com.sleepycat.db.DatabaseException;
+ public final static native com.sleepycat.db.ReplicationHostAddress[] DbEnv_repmgr_site_list(long jarg1) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbEnv_repmgr_start(long jarg1, int jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
public final static native String DbEnv_strerror(int jarg1) /* no exception */;
public final static native int DbEnv_get_version_major() /* no exception */;
public final static native int DbEnv_get_version_minor() /* no exception */;
@@ -257,7 +293,9 @@ class db_javaJNI {
/* package */ final static native void DbTxn_abort0(long jarg1);
/* package */ final static native void DbTxn_commit0(long jarg1, int jarg2);
/* package */ final static native void DbTxn_discard0(long jarg1, int jarg2);
+ public final static native String DbTxn_get_name(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native int DbTxn_id(long jarg1) throws com.sleepycat.db.DatabaseException;
public final static native void DbTxn_prepare(long jarg1, byte[] jarg2) throws com.sleepycat.db.DatabaseException;
public final static native void DbTxn_set_timeout(long jarg1, long jarg2, int jarg3) throws com.sleepycat.db.DatabaseException;
+ public final static native void DbTxn_set_name(long jarg1, String jarg2) throws com.sleepycat.db.DatabaseException;
}
diff --git a/db/java/src/com/sleepycat/db/package.html b/db/java/src/com/sleepycat/db/package.html
index fe77f9223..bea841ac2 100644
--- a/db/java/src/com/sleepycat/db/package.html
+++ b/db/java/src/com/sleepycat/db/package.html
@@ -5,16 +5,16 @@
See the file LICENSE for redistribution information.
- Copyright (c) 2002-2004
- Sleepycat Software. All rights reserved.
+ Copyright (c) 2002-2006
+ Oracle Corporation. All rights reserved.
- $Id: package.html,v 1.6 2004/08/02 18:52:03 mjc Exp $
+ $Id: package.html,v 12.4 2006/08/31 18:14:08 bostic Exp $
-->
</head>
<body>
Berkeley DB Java API<br>
-<a href="{@docRoot}/%2e%2e/ref/toc.html" target="_top">[reference guide]</a> <a href="{@docRoot}/%2e%2e/ref/java/program%2ehtml" target="_top">[Java programming notes]</a>.
+<a href="{@docRoot}/../ref/toc.html" target="_top">[reference guide]</a> <a href="{@docRoot}/../ref/java/program.html" target="_top">[Java programming notes]</a>.
<p>
This package is a wrapper around the Berkeley DB library. It uses JNI
to provide access to Berkeley DB, which is implemented in C. That means
diff --git a/db/java/src/com/sleepycat/util/ExceptionUnwrapper.java b/db/java/src/com/sleepycat/util/ExceptionUnwrapper.java
index ee7e8ceb4..7d6e4b3d7 100644
--- a/db/java/src/com/sleepycat/util/ExceptionUnwrapper.java
+++ b/db/java/src/com/sleepycat/util/ExceptionUnwrapper.java
@@ -1,19 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ExceptionUnwrapper.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: ExceptionUnwrapper.java,v 12.4 2006/08/31 18:14:09 bostic Exp $
*/
package com.sleepycat.util;
/**
* Unwraps nested exceptions by calling the {@link
- * ExceptionWrapper#getDetail()} method for exceptions that implement the
+ * ExceptionWrapper#getCause()} method for exceptions that implement the
* {@link ExceptionWrapper} interface. Does not currently support the Java 1.4
- * <code>Throwable.getDetail()</code> method.
+ * <code>Throwable.getCause()</code> method.
*
* @author Mark Hayes
*/
@@ -55,7 +55,7 @@ public class ExceptionUnwrapper {
while (true) {
if (e instanceof ExceptionWrapper) {
- Throwable e2 = ((ExceptionWrapper) e).getDetail();
+ Throwable e2 = ((ExceptionWrapper) e).getCause();
if (e2 == null) {
return e;
} else {
diff --git a/db/java/src/com/sleepycat/util/ExceptionWrapper.java b/db/java/src/com/sleepycat/util/ExceptionWrapper.java
index 4917fdc2b..78126aa0e 100644
--- a/db/java/src/com/sleepycat/util/ExceptionWrapper.java
+++ b/db/java/src/com/sleepycat/util/ExceptionWrapper.java
@@ -1,11 +1,11 @@
/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
- *
- * $Id: ExceptionWrapper.java,v 1.1 2004/04/09 16:34:10 mark Exp $
- */
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: ExceptionWrapper.java,v 12.5 2006/08/31 18:14:09 bostic Exp $
+ */
package com.sleepycat.util;
@@ -20,6 +20,20 @@ public interface ExceptionWrapper {
* Returns the nested exception or null if none is present.
*
* @return the nested exception or null if none is present.
+ *
+ * @deprecated replaced by {@link #getCause}.
*/
Throwable getDetail();
+
+ /**
+ * Returns the nested exception or null if none is present.
+ *
+ * <p>This method is intentionally defined to be the same signature as the
+ * <code>java.lang.Throwable.getCause</code> method in Java 1.4 and
+ * greater. By defining this method to return a nested exception, the Java
+ * 1.4 runtime will print the nested stack trace.</p>
+ *
+ * @return the nested exception or null if none is present.
+ */
+ Throwable getCause();
}
diff --git a/db/java/src/com/sleepycat/util/FastInputStream.java b/db/java/src/com/sleepycat/util/FastInputStream.java
index 6bad7d79a..4e7d13bf9 100644
--- a/db/java/src/com/sleepycat/util/FastInputStream.java
+++ b/db/java/src/com/sleepycat/util/FastInputStream.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: FastInputStream.java,v 1.2 2004/06/04 18:24:50 mark Exp $
+ * $Id: FastInputStream.java,v 12.5 2006/08/31 18:14:09 bostic Exp $
*/
package com.sleepycat.util;
@@ -55,7 +55,7 @@ public class FastInputStream extends InputStream {
buf = buffer;
off = offset;
- len = length;
+ len = offset + length;
}
// --- begin ByteArrayInputStream compatible methods ---
@@ -70,9 +70,9 @@ public class FastInputStream extends InputStream {
return true;
}
- public void mark(int pos) {
+ public void mark(int readLimit) {
- mark = pos;
+ mark = off;
}
public void reset() {
@@ -86,7 +86,7 @@ public class FastInputStream extends InputStream {
if (myCount + off > len) {
myCount = len - off;
}
- off += myCount;
+ skipFast(myCount);
return myCount;
}
@@ -108,6 +108,16 @@ public class FastInputStream extends InputStream {
// --- end ByteArrayInputStream compatible methods ---
/**
+ * Equivalent to <code>skip()<code> but takes an int parameter instead of a
+ * long, and does not check whether the count given is larger than the
+ * number of remaining bytes.
+ * @see #skip(long)
+ */
+ public final void skipFast(int count) {
+ off += count;
+ }
+
+ /**
* Equivalent to <code>read()<code> but does not throw
* <code>IOException</code>.
* @see #read()
@@ -141,9 +151,8 @@ public class FastInputStream extends InputStream {
if (length > avail) {
length = avail;
}
- for (int i = 0; i < length; i++) {
- toBuf[offset++] = buf[off++];
- }
+ System.arraycopy(buf, off, toBuf, offset, length);
+ off += length;
return length;
}
diff --git a/db/java/src/com/sleepycat/util/FastOutputStream.java b/db/java/src/com/sleepycat/util/FastOutputStream.java
index a0984bfe4..5ef2ccbff 100644
--- a/db/java/src/com/sleepycat/util/FastOutputStream.java
+++ b/db/java/src/com/sleepycat/util/FastOutputStream.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: FastOutputStream.java,v 1.3 2004/07/03 16:15:36 mark Exp $
+ * $Id: FastOutputStream.java,v 12.5 2006/08/31 18:14:09 bostic Exp $
*/
package com.sleepycat.util;
@@ -27,13 +27,27 @@ import java.io.UnsupportedEncodingException;
*/
public class FastOutputStream extends OutputStream {
+ /**
+ * The default initial size of the buffer if no initialSize parameter is
+ * specified. This constant is 100 bytes.
+ */
public static final int DEFAULT_INIT_SIZE = 100;
- public static final int DEFAULT_BUMP_SIZE = 100;
+
+ /**
+ * The default amount that the buffer is increased when it is full. This
+ * constant is zero, which means to double the current buffer size.
+ */
+ public static final int DEFAULT_BUMP_SIZE = 0;
private int len;
private int bumpLen;
private byte[] buf;
+ /*
+ * We can return the same byte[] for 0 length arrays.
+ */
+ private static byte[] ZERO_LENGTH_BYTE_ARRAY = new byte[0];
+
/**
* Creates an output stream with default sizes.
*/
@@ -83,7 +97,9 @@ public class FastOutputStream extends OutputStream {
*
* @param buffer the initial buffer; will be owned by this object.
*
- * @param bumpSize the amount to increment the buffer.
+ * @param bumpSize the amount to increment the buffer. If zero (the
+ * default), the current buffer size will be doubled when the buffer is
+ * full.
*/
public FastOutputStream(byte[] buffer, int bumpSize) {
@@ -142,12 +158,14 @@ public class FastOutputStream extends OutputStream {
public byte[] toByteArray() {
- byte[] toBuf = new byte[len];
+ if (len == 0) {
+ return ZERO_LENGTH_BYTE_ARRAY;
+ } else {
+ byte[] toBuf = new byte[len];
+ System.arraycopy(buf, 0, toBuf, 0, len);
- for (int i = 0; i < len; i++)
- toBuf[i] = buf[i];
-
- return toBuf;
+ return toBuf;
+ }
}
// --- end ByteArrayOutputStream compatible methods ---
@@ -176,8 +194,8 @@ public class FastOutputStream extends OutputStream {
if (needed > 0)
bump(needed);
- for (int i = 0; i < fromBuf.length; i++)
- buf[len++] = fromBuf[i];
+ System.arraycopy(fromBuf, 0, buf, len, fromBuf.length);
+ len += fromBuf.length;
}
/**
@@ -191,25 +209,8 @@ public class FastOutputStream extends OutputStream {
if (needed > 0)
bump(needed);
- int fromLen = offset + length;
-
- for (int i = offset; i < fromLen; i++)
- buf[len++] = fromBuf[i];
- }
-
- /**
- * 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];
+ System.arraycopy(fromBuf, offset, buf, len, length);
+ len += length;
}
/**
@@ -268,10 +269,12 @@ public class FastOutputStream extends OutputStream {
private void bump(int needed) {
- byte[] toBuf = new byte[buf.length + needed + bumpLen];
+ /* Double the buffer if the bumpLen is zero. */
+ int bump = (bumpLen > 0) ? bumpLen : buf.length;
+
+ byte[] toBuf = new byte[buf.length + needed + bump];
- for (int i = 0; i < len; i++)
- toBuf[i] = buf[i];
+ System.arraycopy(buf, 0, toBuf, 0, len);
buf = toBuf;
}
diff --git a/db/java/src/com/sleepycat/util/IOExceptionWrapper.java b/db/java/src/com/sleepycat/util/IOExceptionWrapper.java
index 76b409829..4ae4511a1 100644
--- a/db/java/src/com/sleepycat/util/IOExceptionWrapper.java
+++ b/db/java/src/com/sleepycat/util/IOExceptionWrapper.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: IOExceptionWrapper.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: IOExceptionWrapper.java,v 12.4 2006/08/31 18:14:09 bostic Exp $
*/
package com.sleepycat.util;
@@ -27,8 +27,16 @@ public class IOExceptionWrapper
this.e = e;
}
+ /**
+ * @deprecated replaced by {@link #getCause}.
+ */
public Throwable getDetail() {
return e;
}
+
+ public Throwable getCause() {
+
+ return e;
+ }
}
diff --git a/db/java/src/com/sleepycat/util/PackedInteger.java b/db/java/src/com/sleepycat/util/PackedInteger.java
new file mode 100644
index 000000000..506b50b49
--- /dev/null
+++ b/db/java/src/com/sleepycat/util/PackedInteger.java
@@ -0,0 +1,183 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PackedInteger.java,v 12.2 2006/08/31 18:14:09 bostic Exp $
+ */
+
+package com.sleepycat.util;
+
+/**
+ * Static methods for reading and writing packed integers.
+ *
+ * <p>Note that packed integers are not sorted naturally for a byte-by-byte
+ * comparison because they have a preceding length and are little endian;
+ * therefore, they are typically not used for keys.</p>
+ *
+ * <p>Values in the inclusive range [-119,119] are stored in a single byte.
+ * For values outside that range, the first byte stores the sign and the number
+ * of additional bytes. The additional bytes store (abs(value) - 119) as an
+ * unsigned little endian integer.</p>
+ *
+ * <p>To read and write packed integer values, call {@link #readInt} and {@link
+ * #writeInt}. To get the length of a packed integer without reading it, call
+ * {@link #getReadIntLength}. To get the length of an unpacked integer without
+ * writing it, call {@link #getWriteIntLength}.</p>
+ *
+ * <p>Note that the packed integer format is designed to accomodate long
+ * integers using up to 9 bytes of storage. Currently only int values are
+ * implemented, but the same format may be used in future for long values.</p>
+ */
+public class PackedInteger {
+
+ /**
+ * The maximum number of bytes needed to store an int value (5). The fifth
+ * byte is only needed for values greater than (Integer.MAX_VALUE - 119) or
+ * less than (Integer.MIN_VALUE + 119).
+ */
+ public static final int MAX_LENGTH = 5;
+
+ /**
+ * Reads a packed integer at the given buffer offset and returns it.
+ *
+ * @param buf the buffer to read from.
+ *
+ * @param off the offset in the buffer at which to start reading.
+ *
+ * @return the integer that was read.
+ */
+ public static int readInt(byte[] buf, int off) {
+
+ boolean negative;
+ int byteLen;
+
+ int b1 = buf[off++];
+ if (b1 < -119) {
+ negative = true;
+ byteLen = -b1 - 119;
+ } else if (b1 > 119) {
+ negative = false;
+ byteLen = b1 - 119;
+ } else {
+ return b1;
+ }
+
+ int value = buf[off++] & 0xFF;
+ if (byteLen > 1) {
+ value |= (buf[off++] & 0xFF) << 8;
+ if (byteLen > 2) {
+ value |= (buf[off++] & 0xFF) << 16;
+ if (byteLen > 3) {
+ value |= (buf[off++] & 0xFF) << 24;
+ }
+ }
+ }
+
+ return negative ? (-value - 119) : (value + 119);
+ }
+
+ /**
+ * Returns the number of bytes that would be read by {@link #readInt}.
+ *
+ * @param buf the buffer to read from.
+ *
+ * @param off the offset in the buffer at which to start reading.
+ *
+ * @return the number of bytes that would be read.
+ */
+ public static int getReadIntLength(byte[] buf, int off) {
+
+ int b1 = buf[off];
+ if (b1 < -119) {
+ return -b1 - 119 + 1;
+ } else if (b1 > 119) {
+ return b1 - 119 + 1;
+ } else {
+ return 1;
+ }
+ }
+
+ /**
+ * Writes a packed integer starting at the given buffer offset and returns
+ * the next offset to be written.
+ *
+ * @param buf the buffer to write to.
+ *
+ * @param offset the offset in the buffer at which to start writing.
+ *
+ * @param value the integer to be written.
+ *
+ * @return the offset past the bytes written.
+ */
+ public static int writeInt(byte[] buf, int offset, int value) {
+
+ int byte1Off = offset;
+ boolean negative;
+
+ if (value < -119) {
+ negative = true;
+ value = -value - 119;
+ } else if (value > 119) {
+ negative = false;
+ value = value - 119;
+ } else {
+ buf[offset++] = (byte) value;
+ return offset;
+ }
+ offset++;
+
+ buf[offset++] = (byte) value;
+ if ((value & 0xFFFFFF00) == 0) {
+ buf[byte1Off] = negative ? (byte) -120 : (byte) 120;
+ return offset;
+ }
+
+ buf[offset++] = (byte) (value >>> 8);
+ if ((value & 0xFFFF0000) == 0) {
+ buf[byte1Off] = negative ? (byte) -121 : (byte) 121;
+ return offset;
+ }
+
+ buf[offset++] = (byte) (value >>> 16);
+ if ((value & 0xFF000000) == 0) {
+ buf[byte1Off] = negative ? (byte) -122 : (byte) 122;
+ return offset;
+ }
+
+ buf[offset++] = (byte) (value >>> 24);
+ buf[byte1Off] = negative ? (byte) -123 : (byte) 123;
+ return offset;
+ }
+
+ /**
+ * Returns the number of bytes that would be written by {@link #writeInt}.
+ *
+ * @param value the integer to be written.
+ *
+ * @return the number of bytes that would be used to write the given
+ * integer.
+ */
+ public static int getWriteIntLength(int value) {
+
+ if (value < -119) {
+ value = -value - 119;
+ } else if (value > 119) {
+ value = value - 119;
+ } else {
+ return 1;
+ }
+
+ if ((value & 0xFFFFFF00) == 0) {
+ return 2;
+ }
+ if ((value & 0xFFFF0000) == 0) {
+ return 3;
+ }
+ if ((value & 0xFF000000) == 0) {
+ return 4;
+ }
+ return 5;
+ }
+}
diff --git a/db/java/src/com/sleepycat/util/RuntimeExceptionWrapper.java b/db/java/src/com/sleepycat/util/RuntimeExceptionWrapper.java
index f40f1ff7a..cc92188cd 100644
--- a/db/java/src/com/sleepycat/util/RuntimeExceptionWrapper.java
+++ b/db/java/src/com/sleepycat/util/RuntimeExceptionWrapper.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: RuntimeExceptionWrapper.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: RuntimeExceptionWrapper.java,v 12.4 2006/08/31 18:14:09 bostic Exp $
*/
package com.sleepycat.util;
@@ -25,8 +25,16 @@ public class RuntimeExceptionWrapper extends RuntimeException
this.e = e;
}
+ /**
+ * @deprecated replaced by {@link #getCause}.
+ */
public Throwable getDetail() {
return e;
}
+
+ public Throwable getCause() {
+
+ return e;
+ }
}
diff --git a/db/java/src/com/sleepycat/util/UtfOps.java b/db/java/src/com/sleepycat/util/UtfOps.java
index 19c8a9ee3..147f6baff 100644
--- a/db/java/src/com/sleepycat/util/UtfOps.java
+++ b/db/java/src/com/sleepycat/util/UtfOps.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: UtfOps.java,v 1.2 2004/06/04 18:24:51 mark Exp $
+ * $Id: UtfOps.java,v 12.3 2006/08/31 18:14:09 bostic Exp $
*/
package com.sleepycat.util;
diff --git a/db/java/src/com/sleepycat/util/keyrange/KeyRange.java b/db/java/src/com/sleepycat/util/keyrange/KeyRange.java
new file mode 100644
index 000000000..23f70de92
--- /dev/null
+++ b/db/java/src/com/sleepycat/util/keyrange/KeyRange.java
@@ -0,0 +1,342 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: KeyRange.java,v 1.2 2006/08/31 18:14:11 bostic Exp $
+ */
+
+package com.sleepycat.util.keyrange;
+
+import java.util.Comparator;
+
+import com.sleepycat.db.DatabaseEntry;
+
+/**
+ * Encapsulates a key range for use with a RangeCursor.
+ */
+public class KeyRange {
+
+ /*
+ * We can return the same byte[] for 0 length arrays.
+ */
+ public static final byte[] ZERO_LENGTH_BYTE_ARRAY = new byte[0];
+
+ Comparator comparator;
+ DatabaseEntry beginKey;
+ DatabaseEntry endKey;
+ boolean singleKey;
+ boolean beginInclusive;
+ boolean endInclusive;
+
+ /**
+ * Creates an unconstrained key range.
+ */
+ public KeyRange(Comparator comparator) {
+ this.comparator = comparator;
+ }
+
+ /**
+ * Creates a range for a single key.
+ */
+ public KeyRange subRange(DatabaseEntry key)
+ throws KeyRangeException {
+
+ if (!check(key)) {
+ throw new KeyRangeException("singleKey out of range");
+ }
+ KeyRange range = new KeyRange(comparator);
+ range.beginKey = key;
+ range.endKey = key;
+ range.beginInclusive = true;
+ range.endInclusive = true;
+ range.singleKey = true;
+ return range;
+ }
+
+ /**
+ * Creates a range that is the intersection of this range and the given
+ * range parameters.
+ */
+ public KeyRange subRange(DatabaseEntry beginKey, boolean beginInclusive,
+ DatabaseEntry endKey, boolean endInclusive)
+ throws KeyRangeException {
+
+ if (beginKey == null) {
+ beginKey = this.beginKey;
+ beginInclusive = this.beginInclusive;
+ } else if (!check(beginKey, beginInclusive)) {
+ throw new KeyRangeException("beginKey out of range");
+ }
+ if (endKey == null) {
+ endKey = this.endKey;
+ endInclusive = this.endInclusive;
+ } else if (!check(endKey, endInclusive)) {
+ throw new KeyRangeException("endKey out of range");
+ }
+ KeyRange range = new KeyRange(comparator);
+ range.beginKey = beginKey;
+ range.endKey = endKey;
+ range.beginInclusive = beginInclusive;
+ range.endInclusive = endInclusive;
+ return range;
+ }
+
+ /**
+ * Returns whether this is a single-key range.
+ */
+ public final boolean isSingleKey() {
+ return singleKey;
+ }
+
+ /**
+ * Returns the key of a single-key range, or null if not a single-key
+ * range.
+ */
+ public final DatabaseEntry getSingleKey() {
+
+ return singleKey ? beginKey : null;
+ }
+
+ /**
+ * Returns whether this range has a begin or end bound.
+ */
+ public final boolean hasBound() {
+
+ return endKey != null || beginKey != null;
+ }
+
+ /**
+ * Formats this range as a string for debugging.
+ */
+ public String toString() {
+
+ return "[KeyRange " + beginKey + ' ' + beginInclusive +
+ endKey + ' ' + endInclusive +
+ (singleKey ? " single" : "");
+ }
+
+ /**
+ * Returns whether a given key is within range.
+ */
+ public boolean check(DatabaseEntry key) {
+
+ if (singleKey) {
+ return (compare(key, beginKey) == 0);
+ } else {
+ return checkBegin(key, true) && checkEnd(key, true);
+ }
+ }
+
+ /**
+ * Returns whether a given key is within range.
+ */
+ public boolean check(DatabaseEntry key, boolean inclusive) {
+
+ if (singleKey) {
+ return (compare(key, beginKey) == 0);
+ } else {
+ return checkBegin(key, inclusive) && checkEnd(key, inclusive);
+ }
+ }
+
+ /**
+ * Returns whether the given key is within range with respect to the
+ * beginning of the range.
+ *
+ * <p>The inclusive parameter should be true for checking a key read from
+ * the database; this will require that the key is within range. When
+ * inclusive=false the key is allowed to be equal to the beginKey for the
+ * range; this is used for checking a new exclusive bound of a
+ * sub-range.</p>
+ *
+ * <p>Note that when inclusive=false and beginInclusive=true our check is
+ * not exactly correct because in theory we should allow the key to be "one
+ * less" than the existing bound; however, checking for "one less" is
+ * impossible so we do the best we can and test the bounds
+ * conservatively.</p>
+ */
+ public boolean checkBegin(DatabaseEntry key, boolean inclusive) {
+
+ if (beginKey == null) {
+ return true;
+ } else if (!beginInclusive && inclusive) {
+ return compare(key, beginKey) > 0;
+ } else {
+ return compare(key, beginKey) >= 0;
+ }
+ }
+
+ /**
+ * Returns whether the given key is within range with respect to the
+ * end of the range. See checkBegin for details.
+ */
+ public boolean checkEnd(DatabaseEntry key, boolean inclusive) {
+
+ if (endKey == null) {
+ return true;
+ } else if (!endInclusive && inclusive) {
+ return compare(key, endKey) < 0;
+ } else {
+ return compare(key, endKey) <= 0;
+ }
+ }
+
+ /**
+ * Compares two keys, using the user comparator if there is one.
+ */
+ public int compare(DatabaseEntry key1, DatabaseEntry key2) {
+
+ if (comparator != null) {
+ return comparator.compare(getByteArray(key1), getByteArray(key2));
+ } else {
+ return compareBytes
+ (key1.getData(), key1.getOffset(), key1.getSize(),
+ key2.getData(), key2.getOffset(), key2.getSize());
+
+ }
+ }
+
+ /**
+ * Copies a byte array.
+ */
+ public static byte[] copyBytes(byte[] bytes) {
+
+ byte[] a = new byte[bytes.length];
+ System.arraycopy(bytes, 0, a, 0, a.length);
+ return a;
+ }
+
+ /**
+ * Compares two keys as unsigned byte arrays, which is the default
+ * comparison used by JE/DB.
+ */
+ public static int compareBytes(byte[] data1, int offset1, int size1,
+ byte[] data2, int offset2, int size2) {
+
+ for (int i = 0; i < size1 && i < size2; i++) {
+
+ int b1 = 0xFF & data1[offset1 + i];
+ int b2 = 0xFF & data2[offset2 + i];
+ if (b1 < b2)
+ return -1;
+ else if (b1 > b2)
+ return 1;
+ }
+
+ if (size1 < size2)
+ return -1;
+ else if (size1 > size2)
+ return 1;
+ else
+ return 0;
+ }
+
+ /**
+ * Compares two byte arrays for equality.
+ */
+ public static boolean equalBytes(byte[] data1, int offset1, int size1,
+ byte[] data2, int offset2, int size2) {
+ if (size1 != size2) {
+ return false;
+ }
+ for (int i = 0; i < size1; i += 1) {
+ if (data1[i + offset1] != data2[i + offset2]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns a copy of an entry.
+ */
+ public static DatabaseEntry copy(DatabaseEntry from) {
+ return new DatabaseEntry(getByteArray(from));
+ }
+
+ /**
+ * Copies one entry to another.
+ */
+ public static void copy(DatabaseEntry from, DatabaseEntry to) {
+ to.setData(getByteArray(from));
+ to.setOffset(0);
+ }
+
+ /**
+ * Returns an entry's byte array, copying it if the entry offset is
+ * non-zero.
+ */
+ public static byte[] getByteArray(DatabaseEntry entry) {
+
+ byte[] bytes = entry.getData();
+ if (bytes == null) return null;
+ int size = entry.getSize();
+ byte[] data;
+ if (size == 0) {
+ data = ZERO_LENGTH_BYTE_ARRAY;
+ } else {
+ data = new byte[size];
+ System.arraycopy(bytes, entry.getOffset(), data, 0, size);
+ }
+ return data;
+ }
+
+ /**
+ * Returns the two DatabaseEntry objects have the same data value.
+ */
+ public static boolean equalBytes(DatabaseEntry e1, DatabaseEntry e2) {
+
+ if (e1 == null && e2 == null) {
+ return true;
+ }
+ if (e1 == null || e2 == null) {
+ return false;
+ }
+
+ byte[] d1 = e1.getData();
+ byte[] d2 = e2.getData();
+ int s1 = e1.getSize();
+ int s2 = e2.getSize();
+ int o1 = e1.getOffset();
+ int o2 = e2.getOffset();
+
+ if (d1 == null && d2 == null) {
+ return true;
+ }
+ if (d1 == null || d2 == null) {
+ return false;
+ }
+ if (s1 != s2) {
+ return false;
+ }
+ for (int i = 0; i < s1; i += 1) {
+ if (d1[o1 + i] != d2[o2 + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 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(DatabaseEntry dbt) {
+
+ int len = dbt.getOffset() + dbt.getSize();
+ StringBuffer buf = new StringBuffer(len * 2);
+ byte[] data = dbt.getData();
+ for (int i = dbt.getOffset(); i < len; i++) {
+ String num = Integer.toHexString(data[i]);
+ if (num.length() < 2) buf.append('0');
+ buf.append(num);
+ }
+ return buf.toString();
+ }
+}
diff --git a/db/java/src/com/sleepycat/util/keyrange/KeyRangeException.java b/db/java/src/com/sleepycat/util/keyrange/KeyRangeException.java
new file mode 100644
index 000000000..e4c077f1a
--- /dev/null
+++ b/db/java/src/com/sleepycat/util/keyrange/KeyRangeException.java
@@ -0,0 +1,26 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: KeyRangeException.java,v 1.2 2006/08/31 18:14:11 bostic Exp $
+ */
+
+package com.sleepycat.util.keyrange;
+
+/**
+ * An exception thrown when a key is out of range.
+ *
+ * @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/util/keyrange/RangeCursor.java b/db/java/src/com/sleepycat/util/keyrange/RangeCursor.java
new file mode 100644
index 000000000..9b65912ba
--- /dev/null
+++ b/db/java/src/com/sleepycat/util/keyrange/RangeCursor.java
@@ -0,0 +1,1060 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: RangeCursor.java,v 1.3 2006/09/08 20:32:14 bostic Exp $
+ */
+
+package com.sleepycat.util.keyrange;
+
+import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.Cursor;
+import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.db.DatabaseException;
+import com.sleepycat.db.LockMode;
+import com.sleepycat.db.OperationStatus;
+import com.sleepycat.db.SecondaryCursor;
+
+/**
+ * A cursor-like interface that enforces a key range. The method signatures
+ * are actually those of SecondaryCursor, but the pKey parameter may be null.
+ * It was done this way to avoid doubling the number of methods.
+ *
+ * <p>This is not a fully general implementation of a range cursor and should
+ * not be used directly by applications; however, it may evolve into a
+ * generally useful range cursor some day.</p>
+ *
+ * @author Mark Hayes
+ */
+public class RangeCursor implements Cloneable {
+
+ /**
+ * The cursor and secondary cursor are the same object. The secCursor is
+ * null if the database is not a secondary database.
+ */
+ private Cursor cursor;
+ private SecondaryCursor secCursor;
+
+ /**
+ * The range is always non-null, but may be unbounded meaning that it is
+ * open and not used.
+ */
+ private KeyRange range;
+
+ /**
+ * The pkRange may be non-null only if the range is a single-key range
+ * and the cursor is a secondary cursor. It further restricts the range of
+ * primary keys in a secondary database.
+ */
+ private KeyRange pkRange;
+
+ /**
+ * The privXxx entries are used only when the range is bounded. We read
+ * into these private entries to avoid modifying the caller's entry
+ * parameters in the case where we read successfully but the key is out of
+ * range. In that case we return NOTFOUND and we want to leave the entry
+ * parameters unchanged.
+ */
+ private DatabaseEntry privKey;
+ private DatabaseEntry privPKey;
+ private DatabaseEntry privData;
+
+ /**
+ * The initialized flag is set to true whenever we successfully position
+ * the cursor. It is used to implement the getNext/Prev logic for doing a
+ * getFirst/Last when the cursor is not initialized. We can't rely on
+ * Cursor to do that for us, since if we position the underlying cursor
+ * successfully but the key is out of range, we have no way to set the
+ * underlying cursor to uninitialized. A range cursor always starts in the
+ * uninitialized state.
+ */
+ private boolean initialized;
+
+ /**
+ * Creates a range cursor.
+ */
+ public RangeCursor(KeyRange range, Cursor cursor)
+ throws DatabaseException {
+
+ this.range = range;
+ this.cursor = cursor;
+ init();
+ }
+
+ /**
+ * Creates a range cursor with a duplicate range.
+ */
+ public RangeCursor(KeyRange range, KeyRange pkRange, Cursor cursor)
+ throws DatabaseException {
+
+ if (pkRange != null && !range.singleKey) {
+ throw new IllegalArgumentException();
+ }
+ this.range = range;
+ this.pkRange = pkRange;
+ this.cursor = cursor;
+ init();
+ if (pkRange != null && secCursor == null) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ /**
+ * Create a cloned range cursor. The caller must clone the underlying
+ * cursor before using this constructor, because cursor open/close is
+ * handled specially for CDS cursors outside this class.
+ */
+ public RangeCursor dup(boolean samePosition)
+ throws DatabaseException {
+
+ try {
+ RangeCursor c = (RangeCursor) super.clone();
+ c.cursor = dupCursor(cursor, samePosition);
+ c.init();
+ return c;
+ } catch (CloneNotSupportedException neverHappens) {
+ return null;
+ }
+ }
+
+ /**
+ * Used for opening and duping (cloning).
+ */
+ private void init() {
+
+ if (cursor instanceof SecondaryCursor) {
+ secCursor = (SecondaryCursor) cursor;
+ } else {
+ secCursor = null;
+ }
+
+ if (range.hasBound()) {
+ privKey = new DatabaseEntry();
+ privPKey = new DatabaseEntry();
+ privData = new DatabaseEntry();
+ } else {
+ privKey = null;
+ privPKey = null;
+ privData = null;
+ }
+ }
+
+ /**
+ * Returns whether the cursor is initialized at a valid position.
+ */
+ public boolean isInitialized() {
+ return initialized;
+ }
+
+ /**
+ * Returns the underlying cursor. Used for cloning.
+ */
+ public Cursor getCursor() {
+ return cursor;
+ }
+
+ /**
+ * When an unbounded range is used, this method is called to use the
+ * callers entry parameters directly, to avoid the extra step of copying
+ * between the private entries and the caller's entries.
+ */
+ private void setParams(DatabaseEntry key, DatabaseEntry pKey,
+ DatabaseEntry data) {
+ privKey = key;
+ privPKey = pKey;
+ privData = data;
+ }
+
+ /**
+ * Dups the cursor, sets the cursor and secCursor fields to the duped
+ * cursor, and returns the old cursor. Always call endOperation in a
+ * finally clause after calling beginOperation.
+ *
+ * <p>If the returned cursor == the cursor field, the cursor is
+ * uninitialized and was not duped; this case is handled correctly by
+ * endOperation.</p>
+ */
+ private Cursor beginOperation()
+ throws DatabaseException {
+
+ Cursor oldCursor = cursor;
+ if (initialized) {
+ cursor = dupCursor(cursor, true);
+ if (secCursor != null) {
+ secCursor = (SecondaryCursor) cursor;
+ }
+ } else {
+ return cursor;
+ }
+ return oldCursor;
+ }
+
+ /**
+ * If the operation succeded, leaves the duped cursor in place and closes
+ * the oldCursor. If the operation failed, moves the oldCursor back in
+ * place and closes the duped cursor. oldCursor may be null if
+ * beginOperation was not called, in cases where we don't need to dup
+ * the cursor. Always call endOperation when a successful operation ends,
+ * in order to set the initialized field.
+ */
+ private void endOperation(Cursor oldCursor, OperationStatus status,
+ DatabaseEntry key, DatabaseEntry pKey,
+ DatabaseEntry data)
+ throws DatabaseException {
+
+ if (status == OperationStatus.SUCCESS) {
+ if (oldCursor != null && oldCursor != cursor) {
+ closeCursor(oldCursor);
+ }
+ if (key != null) {
+ swapData(key, privKey);
+ }
+ if (pKey != null && secCursor != null) {
+ swapData(pKey, privPKey);
+ }
+ if (data != null) {
+ swapData(data, privData);
+ }
+ initialized = true;
+ } else {
+ if (oldCursor != null && oldCursor != cursor) {
+ closeCursor(cursor);
+ cursor = oldCursor;
+ if (secCursor != null) {
+ secCursor = (SecondaryCursor) cursor;
+ }
+ }
+ }
+ }
+
+ /**
+ * Swaps the contents of the two entries. Used to return entry data to
+ * the caller when the operation was successful.
+ */
+ private static void swapData(DatabaseEntry e1, DatabaseEntry e2) {
+
+ byte[] d1 = e1.getData();
+ int o1 = e1.getOffset();
+ int s1 = e1.getSize();
+
+ e1.setData(e2.getData(), e2.getOffset(), e2.getSize());
+ e2.setData(d1, o1, s1);
+ }
+
+ /**
+ * Shares the same byte array, offset and size between two entries.
+ * Used when copying the entry data is not necessary because it is known
+ * that the underlying operation will not modify the entry, for example,
+ * with getSearchKey.
+ */
+ private static void shareData(DatabaseEntry from, DatabaseEntry to) {
+
+ if (from != null) {
+ to.setData(from.getData(), from.getOffset(), from.getSize());
+ }
+ }
+
+ public OperationStatus getFirst(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetFirst(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (pkRange != null) {
+ KeyRange.copy(range.beginKey, privKey);
+ if (pkRange.singleKey) {
+ KeyRange.copy(pkRange.beginKey, privPKey);
+ status = doGetSearchBoth(lockMode);
+ endOperation(null, status, key, pKey, data);
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ if (pkRange.beginKey == null) {
+ status = doGetSearchKey(lockMode);
+ } else {
+ KeyRange.copy(pkRange.beginKey, privPKey);
+ status = doGetSearchBothRange(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.beginInclusive &&
+ pkRange.compare(privPKey, pkRange.beginKey) == 0) {
+ status = doGetNextDup(lockMode);
+ }
+ }
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.check(privPKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ } else if (range.singleKey) {
+ KeyRange.copy(range.beginKey, privKey);
+ status = doGetSearchKey(lockMode);
+ endOperation(null, status, key, pKey, data);
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ if (range.beginKey == null) {
+ status = doGetFirst(lockMode);
+ } else {
+ KeyRange.copy(range.beginKey, privKey);
+ status = doGetSearchKeyRange(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !range.beginInclusive &&
+ range.compare(privKey, range.beginKey) == 0) {
+ status = doGetNextNoDup(lockMode);
+ }
+ }
+ if (status == OperationStatus.SUCCESS &&
+ !range.check(privKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ return status;
+ }
+
+ public OperationStatus getLast(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status = OperationStatus.NOTFOUND;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetLast(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ Cursor oldCursor = beginOperation();
+ try {
+ if (pkRange != null) {
+ KeyRange.copy(range.beginKey, privKey);
+ boolean doLast = false;
+ if (pkRange.endKey == null) {
+ doLast = true;
+ } else {
+ KeyRange.copy(pkRange.endKey, privPKey);
+ status = doGetSearchBothRange(lockMode);
+ if (status == OperationStatus.SUCCESS) {
+ if (!pkRange.endInclusive ||
+ pkRange.compare(pkRange.endKey, privPKey) != 0) {
+ status = doGetPrevDup(lockMode);
+ }
+ } else {
+ KeyRange.copy(range.beginKey, privKey);
+ doLast = true;
+ }
+ }
+ if (doLast) {
+ status = doGetSearchKey(lockMode);
+ if (status == OperationStatus.SUCCESS) {
+ status = doGetNextNoDup(lockMode);
+ if (status == OperationStatus.SUCCESS) {
+ status = doGetPrev(lockMode);
+ } else {
+ status = doGetLast(lockMode);
+ }
+ }
+ }
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.check(privPKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } else if (range.endKey == null) {
+ status = doGetLast(lockMode);
+ } else {
+ KeyRange.copy(range.endKey, privKey);
+ status = doGetSearchKeyRange(lockMode);
+ if (status == OperationStatus.SUCCESS) {
+ if (range.endInclusive &&
+ range.compare(range.endKey, privKey) == 0) {
+ /* Skip this step if dups are not configured? */
+ status = doGetNextNoDup(lockMode);
+ if (status == OperationStatus.SUCCESS) {
+ status = doGetPrev(lockMode);
+ } else {
+ status = doGetLast(lockMode);
+ }
+ } else {
+ status = doGetPrev(lockMode);
+ }
+ } else {
+ status = doGetLast(lockMode);
+ }
+ }
+ if (status == OperationStatus.SUCCESS &&
+ !range.checkBegin(privKey, true)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getNext(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!initialized) {
+ return getFirst(key, pKey, data, lockMode);
+ }
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetNext(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (pkRange != null) {
+ if (pkRange.endKey == null) {
+ status = doGetNextDup(lockMode);
+ endOperation(null, status, key, pKey, data);
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetNextDup(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.checkEnd(privPKey, true)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ } else if (range.singleKey) {
+ status = doGetNextDup(lockMode);
+ endOperation(null, status, key, pKey, data);
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetNext(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !range.check(privKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ return status;
+ }
+
+ public OperationStatus getNextNoDup(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!initialized) {
+ return getFirst(key, pKey, data, lockMode);
+ }
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetNextNoDup(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (range.singleKey) {
+ status = OperationStatus.NOTFOUND;
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetNextNoDup(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !range.check(privKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ return status;
+ }
+
+ public OperationStatus getPrev(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!initialized) {
+ return getLast(key, pKey, data, lockMode);
+ }
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetPrev(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (pkRange != null) {
+ if (pkRange.beginKey == null) {
+ status = doGetPrevDup(lockMode);
+ endOperation(null, status, key, pKey, data);
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetPrevDup(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.checkBegin(privPKey, true)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ } else if (range.singleKey) {
+ status = doGetPrevDup(lockMode);
+ endOperation(null, status, key, pKey, data);
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetPrev(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !range.check(privKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ return status;
+ }
+
+ public OperationStatus getPrevNoDup(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!initialized) {
+ return getLast(key, pKey, data, lockMode);
+ }
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetPrevNoDup(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (range.singleKey) {
+ status = OperationStatus.NOTFOUND;
+ } else {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetPrevNoDup(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !range.check(privKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ }
+ return status;
+ }
+
+ public OperationStatus getSearchKey(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetSearchKey(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (!range.check(key)) {
+ status = OperationStatus.NOTFOUND;
+ } else if (pkRange != null) {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ shareData(key, privKey);
+ status = doGetSearchKey(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.check(privPKey)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ } else {
+ shareData(key, privKey);
+ status = doGetSearchKey(lockMode);
+ endOperation(null, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getSearchBoth(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetSearchBoth(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (!range.check(key) ||
+ (pkRange != null && !pkRange.check(pKey))) {
+ status = OperationStatus.NOTFOUND;
+ } else {
+ shareData(key, privKey);
+ if (secCursor != null) {
+ shareData(pKey, privPKey);
+ } else {
+ shareData(data, privData);
+ }
+ status = doGetSearchBoth(lockMode);
+ endOperation(null, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getSearchKeyRange(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status = OperationStatus.NOTFOUND;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetSearchKeyRange(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ Cursor oldCursor = beginOperation();
+ try {
+ shareData(key, privKey);
+ status = doGetSearchKeyRange(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ (!range.check(privKey) ||
+ (pkRange != null && !pkRange.check(pKey)))) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getSearchBothRange(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status = OperationStatus.NOTFOUND;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetSearchBothRange(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ Cursor oldCursor = beginOperation();
+ try {
+ shareData(key, privKey);
+ if (secCursor != null) {
+ shareData(pKey, privPKey);
+ } else {
+ shareData(data, privData);
+ }
+ status = doGetSearchBothRange(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ (!range.check(privKey) ||
+ (pkRange != null && !pkRange.check(pKey)))) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getSearchRecordNumber(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ OperationStatus status;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetSearchRecordNumber(lockMode);
+ endOperation(null, status, null, null, null);
+ return status;
+ }
+ if (!range.check(key)) {
+ status = OperationStatus.NOTFOUND;
+ } else {
+ shareData(key, privKey);
+ status = doGetSearchRecordNumber(lockMode);
+ endOperation(null, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getNextDup(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ if (!initialized) {
+ throw new DatabaseException("Cursor not initialized");
+ }
+ OperationStatus status;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetNextDup(lockMode);
+ endOperation(null, status, null, null, null);
+ } else if (pkRange != null && pkRange.endKey != null) {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetNextDup(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.checkEnd(privPKey, true)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ } else {
+ status = doGetNextDup(lockMode);
+ endOperation(null, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getPrevDup(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ if (!initialized) {
+ throw new DatabaseException("Cursor not initialized");
+ }
+ OperationStatus status;
+ if (!range.hasBound()) {
+ setParams(key, pKey, data);
+ status = doGetPrevDup(lockMode);
+ endOperation(null, status, null, null, null);
+ } else if (pkRange != null && pkRange.beginKey != null) {
+ status = OperationStatus.NOTFOUND;
+ Cursor oldCursor = beginOperation();
+ try {
+ status = doGetPrevDup(lockMode);
+ if (status == OperationStatus.SUCCESS &&
+ !pkRange.checkBegin(privPKey, true)) {
+ status = OperationStatus.NOTFOUND;
+ }
+ } finally {
+ endOperation(oldCursor, status, key, pKey, data);
+ }
+ } else {
+ status = doGetPrevDup(lockMode);
+ endOperation(null, status, key, pKey, data);
+ }
+ return status;
+ }
+
+ public OperationStatus getCurrent(DatabaseEntry key,
+ DatabaseEntry pKey,
+ DatabaseEntry data,
+ LockMode lockMode)
+ throws DatabaseException {
+
+ if (!initialized) {
+ throw new DatabaseException("Cursor not initialized");
+ }
+ if (secCursor != null && pKey != null) {
+ return secCursor.getCurrent(key, pKey, data, lockMode);
+ } else {
+ return cursor.getCurrent(key, data, lockMode);
+ }
+ }
+
+ /*
+ * Pass-thru methods.
+ */
+
+ public void close()
+ throws DatabaseException {
+
+ closeCursor(cursor);
+ }
+
+ public int count()
+ throws DatabaseException {
+
+ return cursor.count();
+ }
+
+ public OperationStatus delete()
+ throws DatabaseException {
+
+ return cursor.delete();
+ }
+
+ public OperationStatus put(DatabaseEntry key, DatabaseEntry data)
+ throws DatabaseException {
+
+ return cursor.put(key, data);
+ }
+
+ public OperationStatus putNoOverwrite(DatabaseEntry key,
+ DatabaseEntry data)
+ throws DatabaseException {
+
+ return cursor.putNoOverwrite(key, data);
+ }
+
+ public OperationStatus putNoDupData(DatabaseEntry key, DatabaseEntry data)
+ throws DatabaseException {
+
+ return cursor.putNoDupData(key, data);
+ }
+
+ public OperationStatus putCurrent(DatabaseEntry data)
+ throws DatabaseException {
+
+ return cursor.putCurrent(data);
+ }
+
+ public OperationStatus putAfter(DatabaseEntry key, DatabaseEntry data)
+ throws DatabaseException {
+
+ return DbCompat.putAfter(cursor, key, data);
+ }
+
+ public OperationStatus putBefore(DatabaseEntry key, DatabaseEntry data)
+ throws DatabaseException {
+
+ return DbCompat.putBefore(cursor, key, data);
+ }
+
+ private OperationStatus doGetFirst(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getFirst(privKey, privPKey, privData, lockMode);
+ } else {
+ return cursor.getFirst(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetLast(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getLast(privKey, privPKey, privData, lockMode);
+ } else {
+ return cursor.getLast(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetNext(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getNext(privKey, privPKey, privData, lockMode);
+ } else {
+ return cursor.getNext(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetNextDup(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getNextDup(privKey, privPKey, privData, lockMode);
+ } else {
+ return cursor.getNextDup(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetNextNoDup(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getNextNoDup(privKey, privPKey, privData,
+ lockMode);
+ } else {
+ return cursor.getNextNoDup(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetPrev(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getPrev(privKey, privPKey, privData, lockMode);
+ } else {
+ return cursor.getPrev(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetPrevDup(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getPrevDup(privKey, privPKey, privData, lockMode);
+ } else {
+ return cursor.getPrevDup(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetPrevNoDup(LockMode lockMode)
+ throws DatabaseException {
+
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getPrevNoDup(privKey, privPKey, privData,
+ lockMode);
+ } else {
+ return cursor.getPrevNoDup(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetSearchKey(LockMode lockMode)
+ throws DatabaseException {
+
+ if (checkRecordNumber() && DbCompat.getRecordNumber(privKey) <= 0) {
+ return OperationStatus.NOTFOUND;
+ }
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getSearchKey(privKey, privPKey, privData,
+ lockMode);
+ } else {
+ return cursor.getSearchKey(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetSearchKeyRange(LockMode lockMode)
+ throws DatabaseException {
+
+ if (checkRecordNumber() && DbCompat.getRecordNumber(privKey) <= 0) {
+ return OperationStatus.NOTFOUND;
+ }
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getSearchKeyRange(privKey, privPKey, privData,
+ lockMode);
+ } else {
+ return cursor.getSearchKeyRange(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetSearchBoth(LockMode lockMode)
+ throws DatabaseException {
+
+ if (checkRecordNumber() && DbCompat.getRecordNumber(privKey) <= 0) {
+ return OperationStatus.NOTFOUND;
+ }
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getSearchBoth(privKey, privPKey, privData,
+ lockMode);
+ } else {
+ return cursor.getSearchBoth(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetSearchBothRange(LockMode lockMode)
+ throws DatabaseException {
+
+ if (checkRecordNumber() && DbCompat.getRecordNumber(privKey) <= 0) {
+ return OperationStatus.NOTFOUND;
+ }
+ if (secCursor != null && privPKey != null) {
+ return secCursor.getSearchBothRange(privKey, privPKey, privData,
+ lockMode);
+ } else {
+ return cursor.getSearchBothRange(privKey, privData, lockMode);
+ }
+ }
+
+ private OperationStatus doGetSearchRecordNumber(LockMode lockMode)
+ throws DatabaseException {
+
+ if (DbCompat.getRecordNumber(privKey) <= 0) {
+ return OperationStatus.NOTFOUND;
+ }
+ if (secCursor != null && privPKey != null) {
+ return DbCompat.getSearchRecordNumber(secCursor, privKey, privPKey,
+ privData, lockMode);
+ } else {
+ return DbCompat.getSearchRecordNumber(cursor, privKey, privData,
+ lockMode);
+ }
+ }
+
+ /*
+ * Protected methods for duping and closing cursors. These are overridden
+ * by the collections API to implement cursor pooling for CDS.
+ */
+
+ /**
+ * Dups the given cursor.
+ */
+ protected Cursor dupCursor(Cursor cursor, boolean samePosition)
+ throws DatabaseException {
+
+ return cursor.dup(samePosition);
+ }
+
+ /**
+ * Closes the given cursor.
+ */
+ protected void closeCursor(Cursor cursor)
+ throws DatabaseException {
+
+ cursor.close();
+ }
+
+ /**
+ * If the database is a RECNO or QUEUE database, we know its keys are
+ * record numbers. We treat a non-positive record number as out of bounds,
+ * that is, we return NOTFOUND rather than throwing
+ * IllegalArgumentException as would happen if we passed a non-positive
+ * record number into the DB cursor. This behavior is required by the
+ * collections interface.
+ */
+ protected boolean checkRecordNumber() {
+ return false;
+ }
+}
diff --git a/db/java/src/com/sleepycat/util/package.html b/db/java/src/com/sleepycat/util/package.html
index 83fae5ca9..00e5fc2a5 100644
--- a/db/java/src/com/sleepycat/util/package.html
+++ b/db/java/src/com/sleepycat/util/package.html
@@ -1,4 +1,4 @@
-<!-- $Id: package.html,v 1.1 2004/08/02 18:52:06 mjc Exp $ -->
+<!-- $Id: package.html,v 12.0 2004/11/17 03:44:04 bostic Exp $ -->
<html>
<body>
General utilities used throughout Berkeley DB.
diff --git a/db/libdb_java/README b/db/libdb_java/README
index 7fcb6fc33..0a05e5851 100644
--- a/db/libdb_java/README
+++ b/db/libdb_java/README
@@ -1,5 +1,5 @@
Berkeley DB's Java API
-$Id: README,v 11.2 2003/03/06 00:42:16 mjc Exp $
+$Id: README,v 12.2 2006/08/24 14:46:10 bostic Exp $
Berkeley DB's Java API is now generated with SWIG
(http://www.swig.org). This document describes how SWIG is used -
@@ -15,7 +15,7 @@ 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
+simplifies the wrapper layer (type translation is trivial), it usually
doesn't result in natural API in the target language.
A further constraint for Berkeley DB's Java API was backwards
@@ -73,7 +73,7 @@ SWIG directives are added to the input. In particular:
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
+ with Berkeley DB'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.
diff --git a/db/libdb_java/db.i b/db/libdb_java/db.i
index ec40c39d8..92001d02c 100644
--- a/db/libdb_java/db.i
+++ b/db/libdb_java/db.i
@@ -2,6 +2,12 @@
#include "db_config.h"
#include "db_int.h"
#include "dbinc/txn.h"
+
+#ifdef HAVE_CRYPTO
+#define CRYPTO_ONLY(x) (x);
+#else
+#define CRYPTO_ONLY(x)
+#endif
%}
#if defined(SWIGJAVA)
@@ -13,6 +19,10 @@
typedef unsigned char u_int8_t;
typedef long int32_t;
typedef long long db_seq_t;
+typedef long long pid_t;
+#ifndef SWIGJAVA
+typedef long long db_threadid_t;
+#endif
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. */
@@ -40,16 +50,21 @@ struct __db_out_stream {
int (*callback) __P((void *, const void *));
};
-#define Db __db
-#define Dbc __dbc
-#define Dbt __db_dbt
-#define DbEnv __db_env
-#define DbLock __db_lock_u
-#define DbLogc __db_log_cursor
-#define DbLsn __db_lsn
-#define DbMpoolFile __db_mpoolfile
-#define DbSequence __db_sequence
-#define DbTxn __db_txn
+struct __db_repmgr_sites {
+ DB_REPMGR_SITE *sites;
+ u_int32_t nsites;
+};
+
+#define Db __db
+#define Dbc __dbc
+#define Dbt __db_dbt
+#define DbEnv __db_env
+#define DbLock __db_lock_u
+#define DbLogc __db_log_cursor
+#define DbLsn __db_lsn
+#define DbMpoolFile __db_mpoolfile
+#define DbSequence __db_sequence
+#define DbTxn __db_txn
/* Suppress a compilation warning for an unused symbol */
void *unused = SWIG_JavaThrowException;
@@ -73,17 +88,18 @@ struct DbTxn; typedef struct DbTxn DB_TXN;
u_int32_t flags, const DBT *object, db_lockmode_t lock_mode);
%newobject DbEnv::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;
+ DB *self = NULL;
errno = db_create(&self, dbenv, flags);
- return (errno == 0) ? self : NULL;
+ if (errno == 0 && dbenv == NULL)
+ self->dbenv->dbt_usercopy = __dbj_dbt_memcopy;
+ return self;
}
-
+
JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
db_ret_t associate(DB_TXN *txnid, DB *secondary,
int (*callback)(DB *, const DBT *, const DBT *, DBT *),
@@ -91,6 +107,12 @@ struct Db
return self->associate(self, txnid, secondary, callback, flags);
}
+ db_ret_t compact(DB_TXN *txnid, DBT *start, DBT *stop,
+ DB_COMPACT *c_data, u_int32_t flags, DBT *end) {
+ return self->compact(self, txnid, start, stop, c_data, flags,
+ end);
+ }
+
/*
* Should probably be db_ret_t, but maintaining backwards compatibility
* for now.
@@ -103,9 +125,9 @@ struct Db
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
DBC *cursor(DB_TXN *txnid, u_int32_t flags) {
- DBC *cursorp;
+ DBC *cursorp = NULL;
errno = self->cursor(self, txnid, &cursorp, flags);
- return (errno == 0) ? cursorp : NULL;
+ return cursorp;
}
JAVA_EXCEPT(DB_RETOK_DBDEL, DB2JDBENV)
@@ -121,14 +143,14 @@ struct Db
void errx(const char *message) {
self->errx(self, message);
}
-
+
int_bool get_transactional() {
return self->get_transactional(self);
}
#ifndef SWIGJAVA
int fd() {
- int ret;
+ int ret = 0;
errno = self->fd(self, &ret);
return ret;
}
@@ -141,38 +163,38 @@ struct Db
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
int_bool get_byteswapped() {
- int ret;
+ int ret = 0;
errno = self->get_byteswapped(self, &ret);
return ret;
}
jlong get_cachesize() {
- u_int32_t gbytes, bytes;
+ u_int32_t gbytes = 0, bytes = 0;
errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
return (jlong)gbytes * GIGABYTE + bytes;
}
u_int32_t get_cachesize_ncache() {
- int ret;
+ int ret = 0;
errno = self->get_cachesize(self, NULL, NULL, &ret);
return ret;
}
const char *get_filename() {
- const char *ret;
+ const char *ret = NULL;
errno = self->get_dbname(self, &ret, NULL);
return ret;
}
const char *get_dbname() {
- const char *ret;
+ const char *ret = NULL;
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);
+ u_int32_t ret = 0;
+ CRYPTO_ONLY(errno = self->get_encrypt_flags(self, &ret))
return ret;
}
@@ -182,106 +204,106 @@ struct Db
*/
#ifndef SWIGJAVA
DB_ENV *get_env() {
- DB_ENV *env;
+ DB_ENV *env = NULL;
errno = self->get_env(self, &env);
return env;
}
-#endif
const char *get_errpfx() {
- const char *ret;
+ const char *ret = NULL;
errno = 0;
self->get_errpfx(self, &ret);
return ret;
}
+#endif
u_int32_t get_flags() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_flags(self, &ret);
return ret;
}
int get_lorder() {
- int ret;
+ int ret = 0;
errno = self->get_lorder(self, &ret);
return ret;
}
-
+
DB_MPOOLFILE *get_mpf() {
errno = 0;
- return self->mpf;
+ return self->get_mpf(self);
}
u_int32_t get_open_flags() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_open_flags(self, &ret);
return ret;
}
u_int32_t get_pagesize() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_pagesize(self, &ret);
return ret;
}
u_int32_t get_bt_minkey() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_bt_minkey(self, &ret);
return ret;
}
u_int32_t get_h_ffactor() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_h_ffactor(self, &ret);
return ret;
}
u_int32_t get_h_nelem() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_h_nelem(self, &ret);
return ret;
}
int get_re_delim() {
- int ret;
+ int ret = 0;
errno = self->get_re_delim(self, &ret);
return ret;
}
u_int32_t get_re_len() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_re_len(self, &ret);
return ret;
}
int get_re_pad() {
- int ret;
+ int ret = 0;
errno = self->get_re_pad(self, &ret);
return ret;
}
const char *get_re_source() {
- const char *ret;
+ const char *ret = NULL;
errno = self->get_re_source(self, &ret);
return ret;
}
u_int32_t get_q_extentsize() {
- u_int32_t ret;
+ u_int32_t ret = 0;
errno = self->get_q_extentsize(self, &ret);
return ret;
}
DBTYPE get_type() {
- DBTYPE type;
+ DBTYPE type = (DBTYPE)0;
errno = self->get_type(self, &type);
return type;
}
DBC *join(DBC **curslist, u_int32_t flags) {
- DBC *dbcp;
+ DBC *dbcp = NULL;
errno = self->join(self, curslist, &dbcp, flags);
- return (errno == 0) ? dbcp : NULL;
+ return dbcp;
}
JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
@@ -329,10 +351,6 @@ struct Db
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);
}
@@ -359,14 +377,15 @@ struct Db
JAVA_EXCEPT_NONE
#ifndef SWIGJAVA
- void set_errcall(void (*db_errcall_fcn)(const DB_ENV *, const char *, const char *)) {
+ void set_errcall(
+ void (*db_errcall_fcn)(const DB_ENV *, const char *, const char *)) {
self->set_errcall(self, db_errcall_fcn);
}
-#endif /* SWIGJAVA */
void set_errpfx(const char *errpfx) {
self->set_errpfx(self, errpfx);
}
+#endif /* SWIGJAVA */
JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
db_ret_t set_feedback(void (*db_feedback_fcn)(DB *, int, int)) {
@@ -406,7 +425,7 @@ struct Db
#ifndef SWIGJAVA
db_ret_t set_paniccall(void (* db_panic_fcn)(DB_ENV *, int)) {
- return self->set_paniccall(self, db_panic_fcn);
+ return self->set_paniccall(self, db_panic_fcn);
}
#endif /* SWIGJAVA */
@@ -432,9 +451,9 @@ struct Db
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
void *stat(DB_TXN *txnid, u_int32_t flags) {
- void *statp;
+ void *statp = NULL;
errno = self->stat(self, txnid, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
@@ -444,7 +463,7 @@ struct Db
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
int truncate(DB_TXN *txnid, u_int32_t flags) {
- u_int32_t count;
+ u_int32_t count = 0;
errno = self->truncate(self, txnid, &count, flags);
return count;
}
@@ -474,7 +493,6 @@ struct Db
}
};
-
struct Dbc
{
%extend {
@@ -485,7 +503,7 @@ struct Dbc
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DBC2JDBENV)
db_recno_t count(u_int32_t flags) {
- db_recno_t count;
+ db_recno_t count = 0;
errno = self->c_count(self, &count, flags);
return count;
}
@@ -497,9 +515,9 @@ struct Dbc
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DBC2JDBENV)
DBC *dup(u_int32_t flags) {
- DBC *newcurs;
+ DBC *newcurs = NULL;
errno = self->c_dup(self, &newcurs, flags);
- return (errno == 0) ? newcurs : NULL;
+ return newcurs;
}
JAVA_EXCEPT(DB_RETOK_DBCGET, DBC2JDBENV)
@@ -518,7 +536,6 @@ struct Dbc
}
};
-
struct DbEnv
{
%extend {
@@ -526,14 +543,16 @@ struct DbEnv
DbEnv(u_int32_t flags) {
DB_ENV *self = NULL;
errno = db_env_create(&self, flags);
- return (errno == 0) ? self : NULL;
+ if (errno == 0)
+ self->dbt_usercopy = __dbj_dbt_memcopy;
+ return self;
}
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) {
@@ -555,25 +574,77 @@ struct DbEnv
self->errx(self, message);
}
+#ifndef SWIGJAVA
+ pid_t getpid() {
+ pid_t ret;
+ db_threadid_t junk;
+ __os_id(self, &ret, &junk);
+ return ret;
+ }
+
+ db_threadid_t get_threadid() {
+ pid_t junk;
+ db_threadid_t ret;
+ __os_id(self, &junk, &ret);
+ return ret;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t failchk(u_int32_t flags) {
+ return self->failchk(self, flags);
+ }
+
+ db_ret_t set_isalive(
+ int (*isalive_fcn)(DB_ENV *, pid_t, db_threadid_t)) {
+ return self->set_isalive(self, isalive_fcn);
+ }
+
+ db_ret_t set_thread_count(u_int32_t count) {
+ return self->set_thread_count(self, count);
+ }
+
+ db_ret_t set_thread_id(void (*thread_id_fcn)(DB_ENV *, pid_t *,
+ db_threadid_t *)) {
+ return self->set_thread_id(self, thread_id_fcn);
+ }
+
+ db_ret_t set_thread_id_string(char *(*thread_id_string_fcn)(DB_ENV *,
+ pid_t, db_threadid_t, char *)) {
+ return self->set_thread_id_string(self, thread_id_string_fcn);
+ }
+#endif
+
+ DB_TXN *cdsgroup_begin() {
+ DB_TXN *tid = NULL;
+ errno = self->cdsgroup_begin(self, &tid);
+ return tid;
+ }
+
+ db_ret_t fileid_reset(const char *file, u_int32_t flags) {
+ return self->fileid_reset(self, file, flags);
+ }
+
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);
+ u_int32_t ret = 0;
+ CRYPTO_ONLY(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 /* SWIGJAVA */
u_int32_t get_flags() {
u_int32_t ret;
@@ -599,12 +670,6 @@ struct DbEnv
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);
@@ -617,16 +682,25 @@ struct DbEnv
return ret;
}
+ JAVA_EXCEPT_NONE
+ int_bool is_bigendian() {
+ return self->is_bigendian();
+ }
+
JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t lsn_reset(const char *file, u_int32_t flags) {
+ return self->lsn_reset(self, file, flags);
+ }
+
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,
@@ -637,19 +711,26 @@ struct DbEnv
db_ret_t set_data_dir(const char *dir) {
return self->set_data_dir(self, dir);
}
-
+
+ db_ret_t set_intermediate_dir(int mode, u_int32_t flags) {
+ return self->set_intermediate_dir(self, mode, flags);
+ }
+
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 DB_ENV *, const char *, const char *)) {
+ void set_errcall(void (*db_errcall_fcn)(const DB_ENV *, const char *,
+ const 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) {
@@ -660,6 +741,14 @@ struct DbEnv
return self->set_feedback(self, env_feedback_fcn);
}
+ db_ret_t set_mp_max_openfd(int maxopenfd) {
+ return self->set_mp_max_openfd(self, maxopenfd);
+ }
+
+ db_ret_t set_mp_max_write(int maxwrite, int maxwrite_sleep) {
+ return self->set_mp_max_write(self, maxwrite, maxwrite_sleep);
+ }
+
db_ret_t set_mp_mmapsize(size_t mp_mmapsize) {
return self->set_mp_mmapsize(self, mp_mmapsize);
}
@@ -674,9 +763,9 @@ struct DbEnv
return self->set_paniccall(self, db_panic_fcn);
}
- db_ret_t set_rpc_server(void *client, char *host,
+ db_ret_t set_rpc_server(char *host,
long cl_timeout, long sv_timeout, u_int32_t flags) {
- return self->set_rpc_server(self, client, host,
+ return self->set_rpc_server(self, NULL, host,
cl_timeout, sv_timeout, flags);
}
@@ -684,10 +773,6 @@ struct DbEnv
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);
}
@@ -705,6 +790,11 @@ struct DbEnv
return self->set_app_dispatch(self, tx_recover);
}
+ db_ret_t set_event_notify(
+ void (*event_notify)(DB_ENV *, u_int32_t, void *)) {
+ return self->set_event_notify(self, event_notify);
+ }
+
db_ret_t set_tx_timestamp(time_t *timestamp) {
return self->set_tx_timestamp(self, timestamp);
}
@@ -778,9 +868,9 @@ struct DbEnv
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
DB_LOCK_STAT *lock_stat(u_int32_t flags) {
- DB_LOCK_STAT *statp;
+ DB_LOCK_STAT *statp = NULL;
errno = self->lock_stat(self, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
#ifndef SWIGJAVA
@@ -804,12 +894,6 @@ struct DbEnv
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);
}
@@ -836,6 +920,12 @@ struct DbEnv
return ret;
}
+ int get_lg_filemode() {
+ int ret;
+ errno = self->get_lg_filemode(self, &ret);
+ return ret;
+ }
+
u_int32_t get_lg_max() {
u_int32_t ret;
errno = self->get_lg_max(self, &ret);
@@ -851,7 +941,7 @@ struct DbEnv
char **log_archive(u_int32_t flags) {
char **list = NULL;
errno = self->log_archive(self, &list, flags);
- return (errno == 0) ? list : NULL;
+ return list;
}
JAVA_EXCEPT_NONE
@@ -861,31 +951,35 @@ struct DbEnv
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
DB_LOGC *log_cursor(u_int32_t flags) {
- DB_LOGC *cursor;
+ DB_LOGC *cursor = NULL;
errno = self->log_cursor(self, &cursor, flags);
- return (errno == 0) ? cursor : NULL;
+ return cursor;
}
char *log_file(DB_LSN *lsn) {
- char namebuf[MAXPATHLEN];
+ char namebuf[DB_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_flush(const DB_LSN *lsn_or_null) {
+ return self->log_flush(self, lsn_or_null);
}
db_ret_t log_put(DB_LSN *lsn, const DBT *data, u_int32_t flags) {
return self->log_put(self, lsn, data, flags);
}
+ db_ret_t log_print(DB_TXN *txn, const char *msg) {
+ return self->log_printf(self, txn, "%s", msg);
+ }
+
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
DB_LOG_STAT *log_stat(u_int32_t flags) {
- DB_LOG_STAT *sp;
+ DB_LOG_STAT *sp = NULL;
errno = self->log_stat(self, &sp, flags);
- return (errno == 0) ? sp : NULL;
+ return sp;
}
JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
@@ -897,6 +991,10 @@ struct DbEnv
return self->set_lg_dir(self, dir);
}
+ db_ret_t set_lg_filemode(int mode) {
+ return self->set_lg_filemode(self, mode);
+ }
+
db_ret_t set_lg_max(u_int32_t lg_max) {
return self->set_lg_max(self, lg_max);
}
@@ -919,6 +1017,24 @@ struct DbEnv
return ret;
}
+ int get_mp_max_openfd() {
+ int ret;
+ errno = self->get_mp_max_openfd(self, &ret);
+ return ret;
+ }
+
+ int get_mp_max_write() {
+ int ret, junk;
+ errno = self->get_mp_max_write(self, &ret, &junk);
+ return ret;
+ }
+
+ int get_mp_max_write_sleep() {
+ int ret, junk;
+ errno = self->get_mp_max_write(self, &junk, &ret);
+ return ret;
+ }
+
size_t get_mp_mmapsize() {
size_t ret;
errno = self->get_mp_mmapsize(self, &ret);
@@ -926,23 +1042,73 @@ struct DbEnv
}
DB_MPOOL_STAT *memp_stat(u_int32_t flags) {
- DB_MPOOL_STAT *mp_stat;
+ DB_MPOOL_STAT *mp_stat = NULL;
errno = self->memp_stat(self, &mp_stat, NULL, flags);
- return (errno == 0) ? mp_stat : NULL;
+ return mp_stat;
}
DB_MPOOL_FSTAT **memp_fstat(u_int32_t flags) {
- DB_MPOOL_FSTAT **mp_fstat;
+ DB_MPOOL_FSTAT **mp_fstat = NULL;
errno = self->memp_stat(self, NULL, &mp_fstat, flags);
- return (errno == 0) ? mp_fstat : NULL;
+ return mp_fstat;
}
-
+
int memp_trickle(int percent) {
int ret;
errno = self->memp_trickle(self, percent, &ret);
return ret;
}
+ /* Mutex functions */
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ u_int32_t mutex_get_align() {
+ u_int32_t ret;
+ errno = self->mutex_get_align(self, &ret);
+ return ret;
+ }
+
+ u_int32_t mutex_get_increment() {
+ u_int32_t ret;
+ errno = self->mutex_get_increment(self, &ret);
+ return ret;
+ }
+
+ u_int32_t mutex_get_max() {
+ u_int32_t ret;
+ errno = self->mutex_get_max(self, &ret);
+ return ret;
+ }
+
+ u_int32_t mutex_get_tas_spins() {
+ u_int32_t ret;
+ errno = self->mutex_get_tas_spins(self, &ret);
+ return ret;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t mutex_set_align(u_int32_t align) {
+ return self->mutex_set_align(self, align);
+ }
+
+ db_ret_t mutex_set_increment(u_int32_t increment) {
+ return self->mutex_set_increment(self, increment);
+ }
+
+ db_ret_t mutex_set_max(u_int32_t mutex_max) {
+ return self->mutex_set_increment(self, mutex_max);
+ }
+
+ db_ret_t mutex_set_tas_spins(u_int32_t tas_spins) {
+ return self->mutex_set_tas_spins(self, tas_spins);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ DB_MUTEX_STAT *mutex_stat(u_int32_t flags) {
+ DB_MUTEX_STAT *statp = NULL;
+ errno = self->mutex_stat(self, &statp, flags);
+ return statp;
+ }
+
/* Transaction functions */
u_int32_t get_tx_max() {
u_int32_t ret;
@@ -963,9 +1129,9 @@ struct DbEnv
}
DB_TXN *txn_begin(DB_TXN *parent, u_int32_t flags) {
- DB_TXN *tid;
+ DB_TXN *tid = NULL;
errno = self->txn_begin(self, parent, &tid, flags);
- return (errno == 0) ? tid : NULL;
+ return tid;
}
JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
@@ -989,58 +1155,151 @@ struct DbEnv
__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;
+ DB_TXN_STAT *statp = NULL;
errno = self->txn_stat(self, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
/* Replication functions */
- jlong get_rep_limit() {
+ jlong rep_get_limit() {
u_int32_t gbytes, bytes;
- errno = self->get_rep_limit(self, &gbytes, &bytes);
+ errno = self->rep_get_limit(self, &gbytes, &bytes);
return (jlong)gbytes * GIGABYTE + bytes;
}
- int rep_elect(int nsites, int nvotes, int priority, u_int32_t timeout, u_int32_t flags) {
+ int rep_elect(int nsites, int nvotes, u_int32_t flags) {
int id;
- errno = self->rep_elect(self, nsites, nvotes, priority, timeout, &id, flags);
+ errno = self->rep_elect(self, nsites, nvotes, &id, flags);
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);
+ 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_flush() {
+ return self->rep_flush(self);
+ }
+
+ db_ret_t rep_set_config(u_int32_t which, int_bool onoff) {
+ return self->rep_set_config(self, which, onoff);
+ }
+
db_ret_t rep_start(DBT *cdata, u_int32_t flags) {
return self->rep_start(self, cdata, flags);
}
+ db_ret_t rep_sync(u_int32_t flags) {
+ return self->rep_sync(self, flags);
+ }
+
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ int_bool rep_get_config(u_int32_t which) {
+ int ret;
+ errno = self->rep_get_config(self, which, &ret);
+ return ret;
+ }
+
DB_REP_STAT *rep_stat(u_int32_t flags) {
- DB_REP_STAT *statp;
+ DB_REP_STAT *statp = NULL;
errno = self->rep_stat(self, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
- db_ret_t set_rep_limit(jlong bytes) {
- return self->set_rep_limit(self,
+ db_ret_t rep_set_limit(jlong bytes) {
+ return self->rep_set_limit(self,
(u_int32_t)(bytes / GIGABYTE),
(u_int32_t)(bytes % GIGABYTE));
}
- db_ret_t set_rep_transport(int envid,
+ db_ret_t set_rep_request(u_int32_t min, u_int32_t max) {
+ return self->set_rep_request(self, min, max);
+ }
+
+ db_ret_t rep_set_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);
+ return self->rep_set_transport(self, envid, send);
+ }
+
+ /* Advanced replication functions. */
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ int rep_get_nsites() {
+ int ret;
+ errno = self->rep_get_nsites(self, &ret);
+ return ret;
+ }
+
+ int rep_get_priority() {
+ int ret;
+ errno = self->rep_get_priority(self, &ret);
+ return ret;
+ }
+
+ u_int32_t rep_get_timeout(int which) {
+ u_int32_t ret;
+ errno = self->rep_get_timeout(self, which, &ret);
+ return ret;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t rep_set_nsites(int number) {
+ return self->rep_set_nsites(self, number);
+ }
+
+ db_ret_t rep_set_priority(int priority) {
+ return self->rep_set_priority(self, priority);
+ }
+
+ db_ret_t rep_set_timeout(int which, db_timeout_t timeout) {
+ return self->rep_set_timeout(self, which, timeout);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ int repmgr_add_remote_site(const char * host, u_int32_t port,
+ u_int32_t flags) {
+ int eid;
+ errno = self->repmgr_add_remote_site(self, host, port, &eid, flags);
+ return eid;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t repmgr_get_ack_policy() {
+ int ret;
+ errno = self->repmgr_get_ack_policy(self, &ret);
+ return ret;
+ }
+
+ db_ret_t repmgr_set_ack_policy(int policy) {
+ return self->repmgr_set_ack_policy(self, policy);
+ }
+
+ db_ret_t repmgr_set_local_site(const char * host, u_int32_t port, u_int32_t flags) {
+ return self->repmgr_set_local_site(self, host, port, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ struct __db_repmgr_sites repmgr_site_list() {
+ struct __db_repmgr_sites sites;
+ errno = self->repmgr_site_list(self,
+ &sites.nsites, &sites.sites);
+ return sites;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t repmgr_start(int nthreads, u_int32_t flags) {
+ return self->repmgr_start(self, nthreads, flags);
}
/* Convert DB errors to strings */
@@ -1048,27 +1307,26 @@ struct DbEnv
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 DbLock
{
%extend {
@@ -1079,7 +1337,6 @@ struct DbLock
}
};
-
struct DbLogc
{
%extend {
@@ -1095,7 +1352,6 @@ struct DbLogc
}
};
-
#ifndef SWIGJAVA
struct DbLsn
{
@@ -1103,8 +1359,7 @@ struct DbLsn
JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
DbLsn(u_int32_t file, u_int32_t offset) {
DB_LSN *self = NULL;
- errno = __os_malloc(NULL, sizeof (DB_LSN), &self);
- if (errno == 0) {
+ if ((errno = __os_malloc(NULL, sizeof (DB_LSN), &self)) == 0) {
self->file = file;
self->offset = offset;
}
@@ -1127,7 +1382,6 @@ struct DbLsn
};
#endif
-
struct DbMpoolFile
{
%extend {
@@ -1137,9 +1391,9 @@ struct DbMpoolFile
errno = self->get_priority(self, &ret);
return ret;
}
-
+
JAVA_EXCEPT(DB_RETOK_STD, NULL)
- db_ret_t set_priority(DB_CACHE_PRIORITY priority){
+ db_ret_t set_priority(DB_CACHE_PRIORITY priority) {
return self->set_priority(self, priority);
}
@@ -1161,7 +1415,7 @@ struct DbMpoolFile
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) {
@@ -1172,7 +1426,6 @@ struct DbMpoolFile
}
};
-
struct DbSequence
{
%extend {
@@ -1265,7 +1518,6 @@ struct DbSequence
}
};
-
struct DbTxn
{
%extend {
@@ -1273,7 +1525,7 @@ struct DbTxn
db_ret_t abort() {
return self->abort(self);
}
-
+
db_ret_t commit(u_int32_t flags) {
return self->commit(self, flags);
}
@@ -1282,6 +1534,13 @@ struct DbTxn
return self->discard(self, flags);
}
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, TXN2JDBENV)
+ const char *get_name() {
+ const char *name = NULL;
+ errno = self->get_name(self, &name);
+ return name;
+ }
+
JAVA_EXCEPT_NONE
u_int32_t id() {
return self->id(self);
@@ -1295,7 +1554,10 @@ struct DbTxn
db_ret_t set_timeout(db_timeout_t timeout, u_int32_t flags) {
return self->set_timeout(self, timeout, flags);
}
+
+ db_ret_t set_name(const char *name) {
+ return self->set_name(self, name);
+ }
}
};
-
diff --git a/db/libdb_java/db_java.i b/db/libdb_java/db_java.i
index d84d210c5..dd4ff939c 100644
--- a/db/libdb_java/db_java.i
+++ b/db/libdb_java/db_java.i
@@ -62,8 +62,10 @@ import java.util.Comparator;
public Environment wrapper;
private LogRecordHandler app_dispatch_handler;
+ private EventHandler event_notify_handler;
private FeedbackHandler env_feedback_handler;
private ErrorHandler error_handler;
+ private String errpfx;
private MessageHandler message_handler;
private PanicHandler panic_handler;
private ReplicationTransport rep_transport_handler;
@@ -99,14 +101,25 @@ import java.util.Comparator;
}
}
- private final int handle_app_dispatch(DatabaseEntry dbt, LogSequenceNumber lsn, int recops) {
- return app_dispatch_handler.handleLogRecord(wrapper, dbt, lsn, RecoveryOperation.fromFlag(recops));
+ private final int handle_app_dispatch(DatabaseEntry dbt,
+ LogSequenceNumber lsn,
+ int recops) {
+ return app_dispatch_handler.handleLogRecord(wrapper, dbt, lsn,
+ RecoveryOperation.fromFlag(recops));
}
public LogRecordHandler get_app_dispatch() {
return app_dispatch_handler;
}
+ private final int handle_event_notify(int event) {
+ return event_notify_handler.handleEvent(EventType.fromInt(event));
+ }
+
+ public EventHandler get_event_notify() {
+ return event_notify_handler;
+ }
+
private final void handle_env_feedback(int opcode, int percent) {
if (opcode == DbConstants.DB_RECOVER)
env_feedback_handler.recoveryFeedback(wrapper, percent);
@@ -117,8 +130,16 @@ import java.util.Comparator;
return env_feedback_handler;
}
- private final void handle_error(String errpfx, String msg) {
- error_handler.error(wrapper, errpfx, msg);
+ public void set_errpfx(String errpfx) {
+ this.errpfx = errpfx;
+ }
+
+ public String get_errpfx() {
+ return errpfx;
+ }
+
+ private final void handle_error(String msg) {
+ error_handler.error(wrapper, this.errpfx, msg);
}
public ErrorHandler get_errcall() {
@@ -141,16 +162,22 @@ import java.util.Comparator;
return panic_handler;
}
- private final int handle_rep_transport(DatabaseEntry control, DatabaseEntry rec,
- LogSequenceNumber lsn, int envid, int flags)
+ private final int handle_rep_transport(DatabaseEntry control,
+ DatabaseEntry rec,
+ LogSequenceNumber lsn,
+ int envid, int flags)
throws DatabaseException {
- return rep_transport_handler.send(wrapper, control, rec, lsn, envid,
+ return rep_transport_handler.send(wrapper,
+ control, rec, lsn, envid,
(flags & DbConstants.DB_REP_NOBUFFER) != 0,
- (flags & DbConstants.DB_REP_PERMANENT) != 0);
+ (flags & DbConstants.DB_REP_PERMANENT) != 0,
+ (flags & DbConstants.DB_REP_ANYWHERE) != 0,
+ (flags & DbConstants.DB_REP_REREQUEST) != 0);
}
-
+
public void lock_vec(/*u_int32_t*/ int locker, int flags,
- LockRequest[] list, int offset, int count) throws DatabaseException {
+ LockRequest[] list, int offset, int count)
+ throws DatabaseException {
db_javaJNI.DbEnv_lock_vec(swigCPtr, locker, flags, list,
offset, count);
}
@@ -244,6 +271,10 @@ import java.util.Comparator;
dbenv = null;
}
+ public boolean getPrivateDbEnv() {
+ return private_dbenv;
+ }
+
public synchronized void close(int flags) throws DatabaseException {
try {
close0(flags);
@@ -251,7 +282,7 @@ import java.util.Comparator;
cleanup();
}
}
-
+
public DbEnv get_env() throws DatabaseException {
return dbenv;
}
@@ -265,15 +296,16 @@ import java.util.Comparator;
return append_recno_handler;
}
- private final int handle_bt_compare(DatabaseEntry dbt1, DatabaseEntry dbt2) {
- return bt_compare_handler.compare(dbt1, dbt2);
+ private final int handle_bt_compare(byte[] arr1, byte[] arr2) {
+ return bt_compare_handler.compare(arr1, arr2);
}
public Comparator get_bt_compare() {
return bt_compare_handler;
}
- private final int handle_bt_prefix(DatabaseEntry dbt1, DatabaseEntry dbt2) {
+ private final int handle_bt_prefix(DatabaseEntry dbt1,
+ DatabaseEntry dbt2) {
return bt_prefix_handler.prefix(wrapper, dbt1, dbt2);
}
@@ -293,8 +325,8 @@ import java.util.Comparator;
return db_feedback_handler;
}
- private final int handle_dup_compare(DatabaseEntry dbt1, DatabaseEntry dbt2) {
- return dup_compare_handler.compare(dbt1, dbt2);
+ private final int handle_dup_compare(byte[] arr1, byte[] arr2) {
+ return dup_compare_handler.compare(arr1, arr2);
}
public Comparator get_dup_compare() {
@@ -309,7 +341,9 @@ import java.util.Comparator;
return h_hash_handler;
}
- private final int handle_seckey_create(DatabaseEntry key, DatabaseEntry data, DatabaseEntry result)
+ private final int handle_seckey_create(DatabaseEntry key,
+ DatabaseEntry data,
+ DatabaseEntry result)
throws DatabaseException {
return seckey_create_handler.createSecondaryKey(
(SecondaryDatabase)wrapper, key, data, result) ?
@@ -357,14 +391,6 @@ import java.util.Comparator;
dbenv.set_errcall(db_errcall_fcn);
}
- public MessageHandler get_msgcall() {
- return dbenv.get_msgcall();
- }
-
- public void set_msgcall(MessageHandler db_msgcall_fcn) {
- dbenv.set_msgcall(db_msgcall_fcn);
- }
-
public java.io.OutputStream get_error_stream() {
return dbenv.get_error_stream();
}
@@ -373,6 +399,14 @@ import java.util.Comparator;
dbenv.set_error_stream(stream);
}
+ public void set_errpfx(String errpfx) {
+ dbenv.set_errpfx(errpfx);
+ }
+
+ public String get_errpfx() {
+ return dbenv.get_errpfx();
+ }
+
public java.io.OutputStream get_message_stream() {
return dbenv.get_message_stream();
}
@@ -381,6 +415,14 @@ import java.util.Comparator;
dbenv.set_message_stream(stream);
}
+ public MessageHandler get_msgcall() {
+ return dbenv.get_msgcall();
+ }
+
+ public void set_msgcall(MessageHandler db_msgcall_fcn) {
+ dbenv.set_msgcall(db_msgcall_fcn);
+ }
+
public void set_paniccall(PanicHandler db_panic_fcn)
throws DatabaseException {
dbenv.set_paniccall(db_panic_fcn);
@@ -498,31 +540,31 @@ import java.util.Comparator;
JNIEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_initDbEnvRef0(
JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- DB_ENV *self = *(DB_ENV **)&jarg1;
+ DB_ENV *self = *(DB_ENV **)(void *)&jarg1;
jlong ret;
COMPQUIET(jcls, NULL);
DB_ENV_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
- *(jobject *)&ret = (jobject)DB_ENV_INTERNAL(self);
+ *(jobject *)(void *)&ret = (jobject)DB_ENV_INTERNAL(self);
return (ret);
}
JNIEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_initDbRef0(
JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- DB *self = *(DB **)&jarg1;
+ DB *self = *(DB **)(void *)&jarg1;
jlong ret;
COMPQUIET(jcls, NULL);
DB_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
- *(jobject *)&ret = (jobject)DB_INTERNAL(self);
+ *(jobject *)(void *)&ret = (jobject)DB_INTERNAL(self);
return (ret);
}
JNIEXPORT void JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0(
JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jobject jref = *(jobject *)&jarg1;
+ jobject jref = *(jobject *)(void *)&jarg1;
COMPQUIET(jcls, NULL);
if (jref != 0L)
@@ -532,14 +574,14 @@ Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0(
JNIEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_getDbEnv0(
JNIEnv *jenv, jclass jcls, jlong jarg1) {
- DB *self = *(DB **)&jarg1;
- jlong env_cptr;
+ DB *self = *(DB **)(void *)&jarg1;
+ jlong ret;
COMPQUIET(jenv, NULL);
COMPQUIET(jcls, NULL);
- *(DB_ENV **)&env_cptr = self->dbenv;
- return (env_cptr);
+ *(DB_ENV **)(void *)&ret = self->dbenv;
+ return (ret);
}
JNIEXPORT jboolean JNICALL
diff --git a/db/libdb_java/db_java_wrap.c b/db/libdb_java/db_java_wrap.c
index 5b18ff3c5..14253433b 100644
--- a/db/libdb_java/db_java_wrap.c
+++ b/db/libdb_java/db_java_wrap.c
@@ -1,6 +1,7 @@
+#include "db_config.h"
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
- * Version 1.3.21
+ * Version 1.3.29
*
* 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
@@ -8,10 +9,117 @@
* interface file instead.
* ----------------------------------------------------------------------------- */
+/* -----------------------------------------------------------------------------
+ * This section contains generic SWIG labels for method/variable
+ * declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC)
+# if (__SUNPRO_CC <= 0x560)
+# define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+# else
+# define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+# define SWIGINLINE inline
+# else
+# define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+# elif defined(__ICC)
+# define SWIGUNUSED __attribute__ ((__unused__))
+# else
+# define SWIGUNUSED
+# endif
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+# define SWIGUNUSEDPARM(p)
+# else
+# define SWIGUNUSEDPARM(p) p SWIGUNUSED
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# ifndef GCC_HASCLASSVISIBILITY
+# define GCC_HASCLASSVISIBILITY
+# endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# if defined(STATIC_LINKED)
+# define SWIGEXPORT
+# else
+# define SWIGEXPORT __declspec(dllexport)
+# endif
+# else
+# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+# define SWIGEXPORT __attribute__ ((visibility("default")))
+# else
+# define SWIGEXPORT
+# endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+# define SWIGSTDCALL __stdcall
+# else
+# define SWIGSTDCALL
+# endif
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
+# undef _CRT_SECURE_NO_DEPRECATE
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
-#if defined(__GNUC__)
- typedef long long __int64; /*For gcc on Windows */
+/* Fix for jlong on some versions of gcc on Windows */
+#if defined(__GNUC__) && !defined(__INTELC__)
+ typedef long long __int64;
#endif
+
+/* Fix for jlong on 64-bit x86 Solaris */
+#if defined(__x86_64)
+# ifdef _LP64
+# undef _LP64
+# endif
+#endif
+
#include <jni.h>
#include <stdlib.h>
#include <string.h>
@@ -36,7 +144,7 @@ typedef struct {
} SWIG_JavaExceptions_t;
-static void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
+static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
jclass excep;
static const SWIG_JavaExceptions_t java_exceptions[] = {
{ SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
@@ -66,10 +174,15 @@ static void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code,
#define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else
-#include "db_config.h"
#include "db_int.h"
#include "dbinc/txn.h"
+#ifdef HAVE_CRYPTO
+#define CRYPTO_ONLY(x) (x);
+#else
+#define CRYPTO_ONLY(x)
+#endif
+
/* don't use SWIG's array handling - save code space */
#define SWIG_NOINCLUDE 1
@@ -89,24 +202,31 @@ 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 bt_stat_class, h_stat_class, lock_stat_class;
+static jclass bt_stat_class, compact_class, h_stat_class, lock_stat_class;
static jclass log_stat_class, mpool_stat_class, mpool_fstat_class;
-static jclass qam_stat_class, rep_stat_class, seq_stat_class, txn_stat_class;
+static jclass mutex_stat_class, qam_stat_class, rep_stat_class;
+static jclass rephost_class, seq_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 rephandledeadex_class, runrecex_class;
+static jclass repdupmasterex_class, rephandledeadex_class;
+static jclass repholdelectionex_class, repjoinfailex_class, replockoutex_class;
+static jclass repunavailex_class;
+static jclass runrecex_class, versionex_class;
static jclass filenotfoundex_class, illegalargex_class, outofmemerr_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 dblsn_file_fid, dblsn_offset_fid;
+static jfieldID dbt_data_fid, dbt_data_nio_fid, dbt_size_fid, dbt_ulen_fid;
+static jfieldID dbt_dlen_fid, 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_modeflag_fid, lockreq_timeout_fid;
static jfieldID lockreq_obj_fid, lockreq_lock_fid;
-static jfieldID rep_processmsg_envid;
+static jfieldID rep_processmsg_envid_fid;
+static jfieldID rephost_port_fid, rephost_host_fid, rephost_eid_fid;
+static jfieldID rephost_status_fid;
/* BEGIN-STAT-FIELD-DECLS */
static jfieldID bt_stat_bt_magic_fid;
@@ -115,7 +235,6 @@ static jfieldID bt_stat_bt_metaflags_fid;
static jfieldID bt_stat_bt_nkeys_fid;
static jfieldID bt_stat_bt_ndata_fid;
static jfieldID bt_stat_bt_pagesize_fid;
-static jfieldID bt_stat_bt_maxkey_fid;
static jfieldID bt_stat_bt_minkey_fid;
static jfieldID bt_stat_bt_re_len_fid;
static jfieldID bt_stat_bt_re_pad_fid;
@@ -130,6 +249,15 @@ static jfieldID bt_stat_bt_int_pgfree_fid;
static jfieldID bt_stat_bt_leaf_pgfree_fid;
static jfieldID bt_stat_bt_dup_pgfree_fid;
static jfieldID bt_stat_bt_over_pgfree_fid;
+static jfieldID compact_compact_fillpercent_fid;
+static jfieldID compact_compact_timeout_fid;
+static jfieldID compact_compact_pages_fid;
+static jfieldID compact_compact_pages_free_fid;
+static jfieldID compact_compact_pages_examine_fid;
+static jfieldID compact_compact_levels_fid;
+static jfieldID compact_compact_deadlock_fid;
+static jfieldID compact_compact_pages_truncated_fid;
+static jfieldID compact_compact_truncate_fid;
static jfieldID h_stat_hash_magic_fid;
static jfieldID h_stat_hash_version_fid;
static jfieldID h_stat_hash_metaflags_fid;
@@ -158,10 +286,12 @@ static jfieldID lock_stat_st_nlockers_fid;
static jfieldID lock_stat_st_maxnlockers_fid;
static jfieldID lock_stat_st_nobjects_fid;
static jfieldID lock_stat_st_maxnobjects_fid;
-static jfieldID lock_stat_st_nconflicts_fid;
static jfieldID lock_stat_st_nrequests_fid;
static jfieldID lock_stat_st_nreleases_fid;
-static jfieldID lock_stat_st_nnowaits_fid;
+static jfieldID lock_stat_st_nupgrade_fid;
+static jfieldID lock_stat_st_ndowngrade_fid;
+static jfieldID lock_stat_st_lock_wait_fid;
+static jfieldID lock_stat_st_lock_nowait_fid;
static jfieldID lock_stat_st_ndeadlocks_fid;
static jfieldID lock_stat_st_locktimeout_fid;
static jfieldID lock_stat_st_nlocktimeouts_fid;
@@ -175,12 +305,14 @@ static jfieldID log_stat_st_version_fid;
static jfieldID log_stat_st_mode_fid;
static jfieldID log_stat_st_lg_bsize_fid;
static jfieldID log_stat_st_lg_size_fid;
+static jfieldID log_stat_st_record_fid;
static jfieldID log_stat_st_w_bytes_fid;
static jfieldID log_stat_st_w_mbytes_fid;
static jfieldID log_stat_st_wc_bytes_fid;
static jfieldID log_stat_st_wc_mbytes_fid;
static jfieldID log_stat_st_wcount_fid;
static jfieldID log_stat_st_wcount_fill_fid;
+static jfieldID log_stat_st_rcount_fid;
static jfieldID log_stat_st_scount_fid;
static jfieldID log_stat_st_region_wait_fid;
static jfieldID log_stat_st_region_nowait_fid;
@@ -225,14 +357,28 @@ static jfieldID mpool_stat_st_hash_longest_fid;
static jfieldID mpool_stat_st_hash_examined_fid;
static jfieldID mpool_stat_st_hash_nowait_fid;
static jfieldID mpool_stat_st_hash_wait_fid;
+static jfieldID mpool_stat_st_hash_max_nowait_fid;
static jfieldID mpool_stat_st_hash_max_wait_fid;
static jfieldID mpool_stat_st_region_nowait_fid;
static jfieldID mpool_stat_st_region_wait_fid;
+static jfieldID mpool_stat_st_mvcc_frozen_fid;
+static jfieldID mpool_stat_st_mvcc_thawed_fid;
+static jfieldID mpool_stat_st_mvcc_freed_fid;
static jfieldID mpool_stat_st_alloc_fid;
static jfieldID mpool_stat_st_alloc_buckets_fid;
static jfieldID mpool_stat_st_alloc_max_buckets_fid;
static jfieldID mpool_stat_st_alloc_pages_fid;
static jfieldID mpool_stat_st_alloc_max_pages_fid;
+static jfieldID mpool_stat_st_io_wait_fid;
+static jfieldID mutex_stat_st_mutex_align_fid;
+static jfieldID mutex_stat_st_mutex_tas_spins_fid;
+static jfieldID mutex_stat_st_mutex_cnt_fid;
+static jfieldID mutex_stat_st_mutex_free_fid;
+static jfieldID mutex_stat_st_mutex_inuse_fid;
+static jfieldID mutex_stat_st_mutex_inuse_max_fid;
+static jfieldID mutex_stat_st_region_wait_fid;
+static jfieldID mutex_stat_st_region_nowait_fid;
+static jfieldID mutex_stat_st_regsize_fid;
static jfieldID qam_stat_qs_magic_fid;
static jfieldID qam_stat_qs_version_fid;
static jfieldID qam_stat_qs_metaflags_fid;
@@ -254,6 +400,13 @@ static jfieldID rep_stat_st_waiting_pg_fid;
static jfieldID rep_stat_st_dupmasters_fid;
static jfieldID rep_stat_st_env_id_fid;
static jfieldID rep_stat_st_env_priority_fid;
+static jfieldID rep_stat_st_bulk_fills_fid;
+static jfieldID rep_stat_st_bulk_overflows_fid;
+static jfieldID rep_stat_st_bulk_records_fid;
+static jfieldID rep_stat_st_bulk_transfers_fid;
+static jfieldID rep_stat_st_client_rerequests_fid;
+static jfieldID rep_stat_st_client_svc_req_fid;
+static jfieldID rep_stat_st_client_svc_miss_fid;
static jfieldID rep_stat_st_gen_fid;
static jfieldID rep_stat_st_egen_fid;
static jfieldID rep_stat_st_log_duplicated_fid;
@@ -289,6 +442,8 @@ static jfieldID rep_stat_st_election_priority_fid;
static jfieldID rep_stat_st_election_status_fid;
static jfieldID rep_stat_st_election_tiebreaker_fid;
static jfieldID rep_stat_st_election_votes_fid;
+static jfieldID rep_stat_st_election_sec_fid;
+static jfieldID rep_stat_st_election_usec_fid;
static jfieldID seq_stat_st_wait_fid;
static jfieldID seq_stat_st_nowait_fid;
static jfieldID seq_stat_st_current_fid;
@@ -306,35 +461,49 @@ static jfieldID txn_stat_st_naborts_fid;
static jfieldID txn_stat_st_nbegins_fid;
static jfieldID txn_stat_st_ncommits_fid;
static jfieldID txn_stat_st_nactive_fid;
+static jfieldID txn_stat_st_nsnapshot_fid;
static jfieldID txn_stat_st_nrestores_fid;
static jfieldID txn_stat_st_maxnactive_fid;
+static jfieldID txn_stat_st_maxnsnapshot_fid;
static jfieldID txn_stat_st_txnarray_fid;
static jfieldID txn_stat_st_region_wait_fid;
static jfieldID txn_stat_st_region_nowait_fid;
static jfieldID txn_stat_st_regsize_fid;
static jfieldID txn_active_txnid_fid;
static jfieldID txn_active_parentid_fid;
+static jfieldID txn_active_pid_fid;
static jfieldID txn_active_lsn_fid;
+static jfieldID txn_active_read_lsn_fid;
+static jfieldID txn_active_mvcc_ref_fid;
+static jfieldID txn_active_status_fid;
static jfieldID txn_active_xa_status_fid;
static jfieldID txn_active_xid_fid;
+static jfieldID txn_active_name_fid;
/* END-STAT-FIELD-DECLS */
static jmethodID dbenv_construct, dbt_construct, dblsn_construct;
static jmethodID dbpreplist_construct, dbtxn_construct;
static jmethodID bt_stat_construct, h_stat_construct;
-static jmethodID lock_stat_construct, log_stat_construct, mpool_stat_construct;
-static jmethodID mpool_fstat_construct, qam_stat_construct;
+static jmethodID lock_stat_construct, log_stat_construct;
+static jmethodID mpool_stat_construct, mpool_fstat_construct;
+static jmethodID mutex_stat_construct, qam_stat_construct;
static jmethodID rep_stat_construct, seq_stat_construct;
static jmethodID txn_stat_construct, txn_active_construct;
static jmethodID dbex_construct, deadex_construct, lockex_construct;
static jmethodID memex_construct, memex_update_method;
-static jmethodID rephandledeadex_construct, runrecex_construct;
+static jmethodID repdupmasterex_construct, rephandledeadex_construct;
+static jmethodID repholdelectionex_construct, repjoinfailex_construct;
+static jmethodID rephost_construct;
+static jmethodID replockoutex_construct, repunavailex_construct;
+static jmethodID runrecex_construct, versionex_construct;
static jmethodID filenotfoundex_construct, illegalargex_construct;
static jmethodID outofmemerr_construct;
static jmethodID lock_construct;
static jmethodID app_dispatch_method, errcall_method, env_feedback_method;
static jmethodID msgcall_method, paniccall_method, rep_transport_method;
+static jmethodID event_notify_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;
@@ -354,11 +523,13 @@ const struct {
{ &dbtxn_class, DB_PKG "internal/DbTxn" },
{ &bt_stat_class, DB_PKG "BtreeStats" },
+ { &compact_class, DB_PKG "CompactStats" },
{ &h_stat_class, DB_PKG "HashStats" },
{ &lock_stat_class, DB_PKG "LockStats" },
{ &log_stat_class, DB_PKG "LogStats" },
{ &mpool_fstat_class, DB_PKG "CacheFileStats" },
{ &mpool_stat_class, DB_PKG "CacheStats" },
+ { &mutex_stat_class, DB_PKG "MutexStats" },
{ &qam_stat_class, DB_PKG "QueueStats" },
{ &rep_stat_class, DB_PKG "ReplicationStats" },
{ &seq_stat_class, DB_PKG "SequenceStats" },
@@ -369,13 +540,21 @@ const struct {
{ &lock_class, DB_PKG "internal/DbLock" },
{ &lockreq_class, DB_PKG "LockRequest" },
{ &rep_processmsg_class, DB_PKG "internal/DbEnv$RepProcessMessage" },
+ { &rep_processmsg_class, DB_PKG "internal/DbEnv$RepProcessMessage" },
{ &dbex_class, DB_PKG "DatabaseException" },
{ &deadex_class, DB_PKG "DeadlockException" },
{ &lockex_class, DB_PKG "LockNotGrantedException" },
{ &memex_class, DB_PKG "MemoryException" },
+ { &repdupmasterex_class, DB_PKG "ReplicationDuplicateMasterException" },
{ &rephandledeadex_class, DB_PKG "ReplicationHandleDeadException" },
+ { &repholdelectionex_class, DB_PKG "ReplicationHoldElectionException" },
+ { &rephost_class, DB_PKG "ReplicationHostAddress" },
+ { &repjoinfailex_class, DB_PKG "ReplicationJoinFailureException" },
+ { &replockoutex_class, DB_PKG "ReplicationLockoutException" },
+ { &repunavailex_class, DB_PKG "ReplicationSiteUnavailableException" },
{ &runrecex_class, DB_PKG "RunRecoveryException" },
+ { &versionex_class, DB_PKG "VersionMismatchException" },
{ &filenotfoundex_class, "java/io/FileNotFoundException" },
{ &illegalargex_class, "java/lang/IllegalArgumentException" },
{ &outofmemerr_class, "java/lang/OutOfMemoryError" },
@@ -392,8 +571,12 @@ const struct {
const char *sig;
} all_fields[] = {
{ &dbc_cptr_fid, &dbc_class, "swigCPtr", "J" },
-
+
+ { &dblsn_file_fid, &dblsn_class, "file", "I" },
+ { &dblsn_offset_fid, &dblsn_class, "offset", "I" },
+
{ &dbt_data_fid, &dbt_class, "data", "[B" },
+ { &dbt_data_nio_fid, &dbt_class, "data_nio", "Ljava/nio/ByteBuffer;" },
{ &dbt_size_fid, &dbt_class, "size", "I" },
{ &dbt_ulen_fid, &dbt_class, "ulen", "I" },
{ &dbt_dlen_fid, &dbt_class, "dlen", "I" },
@@ -410,8 +593,10 @@ const struct {
{ &lockreq_op_fid, &lockreq_class, "op", "I" },
{ &lockreq_modeflag_fid, &lockreq_class, "modeFlag", "I" },
{ &lockreq_timeout_fid, &lockreq_class, "timeout", "I" },
- { &lockreq_obj_fid, &lockreq_class, "obj", "L" DB_PKG "DatabaseEntry;" },
- { &lockreq_lock_fid, &lockreq_class, "lock", "L" DB_PKG "internal/DbLock;" },
+ { &lockreq_obj_fid, &lockreq_class, "obj",
+ "L" DB_PKG "DatabaseEntry;" },
+ { &lockreq_lock_fid, &lockreq_class, "lock",
+ "L" DB_PKG "internal/DbLock;" },
/* BEGIN-STAT-FIELDS */
{ &bt_stat_bt_magic_fid, &bt_stat_class, "bt_magic", "I" },
@@ -420,7 +605,6 @@ const struct {
{ &bt_stat_bt_nkeys_fid, &bt_stat_class, "bt_nkeys", "I" },
{ &bt_stat_bt_ndata_fid, &bt_stat_class, "bt_ndata", "I" },
{ &bt_stat_bt_pagesize_fid, &bt_stat_class, "bt_pagesize", "I" },
- { &bt_stat_bt_maxkey_fid, &bt_stat_class, "bt_maxkey", "I" },
{ &bt_stat_bt_minkey_fid, &bt_stat_class, "bt_minkey", "I" },
{ &bt_stat_bt_re_len_fid, &bt_stat_class, "bt_re_len", "I" },
{ &bt_stat_bt_re_pad_fid, &bt_stat_class, "bt_re_pad", "I" },
@@ -435,6 +619,15 @@ const struct {
{ &bt_stat_bt_leaf_pgfree_fid, &bt_stat_class, "bt_leaf_pgfree", "I" },
{ &bt_stat_bt_dup_pgfree_fid, &bt_stat_class, "bt_dup_pgfree", "I" },
{ &bt_stat_bt_over_pgfree_fid, &bt_stat_class, "bt_over_pgfree", "I" },
+ { &compact_compact_fillpercent_fid, &compact_class, "compact_fillpercent", "I" },
+ { &compact_compact_timeout_fid, &compact_class, "compact_timeout", "I" },
+ { &compact_compact_pages_fid, &compact_class, "compact_pages", "I" },
+ { &compact_compact_pages_free_fid, &compact_class, "compact_pages_free", "I" },
+ { &compact_compact_pages_examine_fid, &compact_class, "compact_pages_examine", "I" },
+ { &compact_compact_levels_fid, &compact_class, "compact_levels", "I" },
+ { &compact_compact_deadlock_fid, &compact_class, "compact_deadlock", "I" },
+ { &compact_compact_pages_truncated_fid, &compact_class, "compact_pages_truncated", "I" },
+ { &compact_compact_truncate_fid, &compact_class, "compact_truncate", "I" },
{ &h_stat_hash_magic_fid, &h_stat_class, "hash_magic", "I" },
{ &h_stat_hash_version_fid, &h_stat_class, "hash_version", "I" },
{ &h_stat_hash_metaflags_fid, &h_stat_class, "hash_metaflags", "I" },
@@ -463,10 +656,12 @@ const struct {
{ &lock_stat_st_maxnlockers_fid, &lock_stat_class, "st_maxnlockers", "I" },
{ &lock_stat_st_nobjects_fid, &lock_stat_class, "st_nobjects", "I" },
{ &lock_stat_st_maxnobjects_fid, &lock_stat_class, "st_maxnobjects", "I" },
- { &lock_stat_st_nconflicts_fid, &lock_stat_class, "st_nconflicts", "I" },
{ &lock_stat_st_nrequests_fid, &lock_stat_class, "st_nrequests", "I" },
{ &lock_stat_st_nreleases_fid, &lock_stat_class, "st_nreleases", "I" },
- { &lock_stat_st_nnowaits_fid, &lock_stat_class, "st_nnowaits", "I" },
+ { &lock_stat_st_nupgrade_fid, &lock_stat_class, "st_nupgrade", "I" },
+ { &lock_stat_st_ndowngrade_fid, &lock_stat_class, "st_ndowngrade", "I" },
+ { &lock_stat_st_lock_wait_fid, &lock_stat_class, "st_lock_wait", "I" },
+ { &lock_stat_st_lock_nowait_fid, &lock_stat_class, "st_lock_nowait", "I" },
{ &lock_stat_st_ndeadlocks_fid, &lock_stat_class, "st_ndeadlocks", "I" },
{ &lock_stat_st_locktimeout_fid, &lock_stat_class, "st_locktimeout", "I" },
{ &lock_stat_st_nlocktimeouts_fid, &lock_stat_class, "st_nlocktimeouts", "I" },
@@ -480,12 +675,14 @@ const struct {
{ &log_stat_st_mode_fid, &log_stat_class, "st_mode", "I" },
{ &log_stat_st_lg_bsize_fid, &log_stat_class, "st_lg_bsize", "I" },
{ &log_stat_st_lg_size_fid, &log_stat_class, "st_lg_size", "I" },
+ { &log_stat_st_record_fid, &log_stat_class, "st_record", "I" },
{ &log_stat_st_w_bytes_fid, &log_stat_class, "st_w_bytes", "I" },
{ &log_stat_st_w_mbytes_fid, &log_stat_class, "st_w_mbytes", "I" },
{ &log_stat_st_wc_bytes_fid, &log_stat_class, "st_wc_bytes", "I" },
{ &log_stat_st_wc_mbytes_fid, &log_stat_class, "st_wc_mbytes", "I" },
{ &log_stat_st_wcount_fid, &log_stat_class, "st_wcount", "I" },
{ &log_stat_st_wcount_fill_fid, &log_stat_class, "st_wcount_fill", "I" },
+ { &log_stat_st_rcount_fid, &log_stat_class, "st_rcount", "I" },
{ &log_stat_st_scount_fid, &log_stat_class, "st_scount", "I" },
{ &log_stat_st_region_wait_fid, &log_stat_class, "st_region_wait", "I" },
{ &log_stat_st_region_nowait_fid, &log_stat_class, "st_region_nowait", "I" },
@@ -530,14 +727,28 @@ const struct {
{ &mpool_stat_st_hash_examined_fid, &mpool_stat_class, "st_hash_examined", "I" },
{ &mpool_stat_st_hash_nowait_fid, &mpool_stat_class, "st_hash_nowait", "I" },
{ &mpool_stat_st_hash_wait_fid, &mpool_stat_class, "st_hash_wait", "I" },
+ { &mpool_stat_st_hash_max_nowait_fid, &mpool_stat_class, "st_hash_max_nowait", "I" },
{ &mpool_stat_st_hash_max_wait_fid, &mpool_stat_class, "st_hash_max_wait", "I" },
{ &mpool_stat_st_region_nowait_fid, &mpool_stat_class, "st_region_nowait", "I" },
{ &mpool_stat_st_region_wait_fid, &mpool_stat_class, "st_region_wait", "I" },
+ { &mpool_stat_st_mvcc_frozen_fid, &mpool_stat_class, "st_mvcc_frozen", "I" },
+ { &mpool_stat_st_mvcc_thawed_fid, &mpool_stat_class, "st_mvcc_thawed", "I" },
+ { &mpool_stat_st_mvcc_freed_fid, &mpool_stat_class, "st_mvcc_freed", "I" },
{ &mpool_stat_st_alloc_fid, &mpool_stat_class, "st_alloc", "I" },
{ &mpool_stat_st_alloc_buckets_fid, &mpool_stat_class, "st_alloc_buckets", "I" },
{ &mpool_stat_st_alloc_max_buckets_fid, &mpool_stat_class, "st_alloc_max_buckets", "I" },
{ &mpool_stat_st_alloc_pages_fid, &mpool_stat_class, "st_alloc_pages", "I" },
{ &mpool_stat_st_alloc_max_pages_fid, &mpool_stat_class, "st_alloc_max_pages", "I" },
+ { &mpool_stat_st_io_wait_fid, &mpool_stat_class, "st_io_wait", "I" },
+ { &mutex_stat_st_mutex_align_fid, &mutex_stat_class, "st_mutex_align", "I" },
+ { &mutex_stat_st_mutex_tas_spins_fid, &mutex_stat_class, "st_mutex_tas_spins", "I" },
+ { &mutex_stat_st_mutex_cnt_fid, &mutex_stat_class, "st_mutex_cnt", "I" },
+ { &mutex_stat_st_mutex_free_fid, &mutex_stat_class, "st_mutex_free", "I" },
+ { &mutex_stat_st_mutex_inuse_fid, &mutex_stat_class, "st_mutex_inuse", "I" },
+ { &mutex_stat_st_mutex_inuse_max_fid, &mutex_stat_class, "st_mutex_inuse_max", "I" },
+ { &mutex_stat_st_region_wait_fid, &mutex_stat_class, "st_region_wait", "I" },
+ { &mutex_stat_st_region_nowait_fid, &mutex_stat_class, "st_region_nowait", "I" },
+ { &mutex_stat_st_regsize_fid, &mutex_stat_class, "st_regsize", "I" },
{ &qam_stat_qs_magic_fid, &qam_stat_class, "qs_magic", "I" },
{ &qam_stat_qs_version_fid, &qam_stat_class, "qs_version", "I" },
{ &qam_stat_qs_metaflags_fid, &qam_stat_class, "qs_metaflags", "I" },
@@ -559,6 +770,13 @@ const struct {
{ &rep_stat_st_dupmasters_fid, &rep_stat_class, "st_dupmasters", "I" },
{ &rep_stat_st_env_id_fid, &rep_stat_class, "st_env_id", "I" },
{ &rep_stat_st_env_priority_fid, &rep_stat_class, "st_env_priority", "I" },
+ { &rep_stat_st_bulk_fills_fid, &rep_stat_class, "st_bulk_fills", "I" },
+ { &rep_stat_st_bulk_overflows_fid, &rep_stat_class, "st_bulk_overflows", "I" },
+ { &rep_stat_st_bulk_records_fid, &rep_stat_class, "st_bulk_records", "I" },
+ { &rep_stat_st_bulk_transfers_fid, &rep_stat_class, "st_bulk_transfers", "I" },
+ { &rep_stat_st_client_rerequests_fid, &rep_stat_class, "st_client_rerequests", "I" },
+ { &rep_stat_st_client_svc_req_fid, &rep_stat_class, "st_client_svc_req", "I" },
+ { &rep_stat_st_client_svc_miss_fid, &rep_stat_class, "st_client_svc_miss", "I" },
{ &rep_stat_st_gen_fid, &rep_stat_class, "st_gen", "I" },
{ &rep_stat_st_egen_fid, &rep_stat_class, "st_egen", "I" },
{ &rep_stat_st_log_duplicated_fid, &rep_stat_class, "st_log_duplicated", "I" },
@@ -594,6 +812,8 @@ const struct {
{ &rep_stat_st_election_status_fid, &rep_stat_class, "st_election_status", "I" },
{ &rep_stat_st_election_tiebreaker_fid, &rep_stat_class, "st_election_tiebreaker", "I" },
{ &rep_stat_st_election_votes_fid, &rep_stat_class, "st_election_votes", "I" },
+ { &rep_stat_st_election_sec_fid, &rep_stat_class, "st_election_sec", "I" },
+ { &rep_stat_st_election_usec_fid, &rep_stat_class, "st_election_usec", "I" },
{ &seq_stat_st_wait_fid, &seq_stat_class, "st_wait", "I" },
{ &seq_stat_st_nowait_fid, &seq_stat_class, "st_nowait", "I" },
{ &seq_stat_st_current_fid, &seq_stat_class, "st_current", "J" },
@@ -611,20 +831,31 @@ const struct {
{ &txn_stat_st_nbegins_fid, &txn_stat_class, "st_nbegins", "I" },
{ &txn_stat_st_ncommits_fid, &txn_stat_class, "st_ncommits", "I" },
{ &txn_stat_st_nactive_fid, &txn_stat_class, "st_nactive", "I" },
+ { &txn_stat_st_nsnapshot_fid, &txn_stat_class, "st_nsnapshot", "I" },
{ &txn_stat_st_nrestores_fid, &txn_stat_class, "st_nrestores", "I" },
{ &txn_stat_st_maxnactive_fid, &txn_stat_class, "st_maxnactive", "I" },
+ { &txn_stat_st_maxnsnapshot_fid, &txn_stat_class, "st_maxnsnapshot", "I" },
{ &txn_stat_st_txnarray_fid, &txn_stat_class, "st_txnarray", "[L" DB_PKG "TransactionStats$Active;" },
{ &txn_stat_st_region_wait_fid, &txn_stat_class, "st_region_wait", "I" },
{ &txn_stat_st_region_nowait_fid, &txn_stat_class, "st_region_nowait", "I" },
{ &txn_stat_st_regsize_fid, &txn_stat_class, "st_regsize", "I" },
{ &txn_active_txnid_fid, &txn_active_class, "txnid", "I" },
{ &txn_active_parentid_fid, &txn_active_class, "parentid", "I" },
+ { &txn_active_pid_fid, &txn_active_class, "pid", "I" },
{ &txn_active_lsn_fid, &txn_active_class, "lsn", "L" DB_PKG "LogSequenceNumber;" },
+ { &txn_active_read_lsn_fid, &txn_active_class, "read_lsn", "L" DB_PKG "LogSequenceNumber;" },
+ { &txn_active_mvcc_ref_fid, &txn_active_class, "mvcc_ref", "I" },
+ { &txn_active_status_fid, &txn_active_class, "status", "I" },
{ &txn_active_xa_status_fid, &txn_active_class, "xa_status", "I" },
{ &txn_active_xid_fid, &txn_active_class, "xid", "[B" },
+ { &txn_active_name_fid, &txn_active_class, "name", "Ljava/lang/String;" },
/* END-STAT-FIELDS */
- { &rep_processmsg_envid, &rep_processmsg_class, "envid", "I" }
+ { &rephost_port_fid, &rephost_class, "port", "I" },
+ { &rephost_host_fid, &rephost_class, "host", "Ljava/lang/String;" },
+ { &rephost_eid_fid, &rephost_class, "eid", "I" },
+ { &rephost_status_fid, &rephost_class, "status", "I" },
+ { &rep_processmsg_envid_fid, &rep_processmsg_class, "envid", "I" }
};
const struct {
@@ -646,26 +877,42 @@ const struct {
{ &log_stat_construct, &log_stat_class, "<init>", "()V" },
{ &mpool_stat_construct, &mpool_stat_class, "<init>", "()V" },
{ &mpool_fstat_construct, &mpool_fstat_class, "<init>", "()V" },
+ { &mutex_stat_construct, &mutex_stat_class, "<init>", "()V" },
{ &qam_stat_construct, &qam_stat_class, "<init>", "()V" },
{ &rep_stat_construct, &rep_stat_class, "<init>", "()V" },
{ &seq_stat_construct, &seq_stat_class, "<init>", "()V" },
{ &txn_stat_construct, &txn_stat_class, "<init>", "()V" },
{ &txn_active_construct, &txn_active_class, "<init>", "()V" },
+ { &rephost_construct, &rephost_class, "<init>", "()V" },
{ &dbex_construct, &dbex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &deadex_construct, &deadex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &lockex_construct, &lockex_class, "<init>",
- "(Ljava/lang/String;IIL" DB_PKG "DatabaseEntry;L" DB_PKG "internal/DbLock;IL" DB_PKG "internal/DbEnv;)V" },
+ "(Ljava/lang/String;IIL" DB_PKG "DatabaseEntry;L"
+ DB_PKG "internal/DbLock;IL" DB_PKG "internal/DbEnv;)V" },
{ &memex_construct, &memex_class, "<init>",
- "(Ljava/lang/String;L" DB_PKG "DatabaseEntry;IL" DB_PKG "internal/DbEnv;)V" },
+ "(Ljava/lang/String;L" DB_PKG "DatabaseEntry;IL"
+ DB_PKG "internal/DbEnv;)V" },
{ &memex_update_method, &memex_class, "updateDatabaseEntry",
"(L" DB_PKG "DatabaseEntry;)V" },
+ { &repdupmasterex_construct, &repdupmasterex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &rephandledeadex_construct, &rephandledeadex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &repholdelectionex_construct, &repholdelectionex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &repjoinfailex_construct, &repjoinfailex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &replockoutex_construct, &replockoutex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &repunavailex_construct, &repunavailex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &runrecex_construct, &runrecex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &versionex_construct, &versionex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &filenotfoundex_construct, &filenotfoundex_class, "<init>",
"(Ljava/lang/String;)V" },
{ &illegalargex_construct, &illegalargex_class, "<init>",
@@ -677,47 +924,51 @@ const struct {
{ &app_dispatch_method, &dbenv_class, "handle_app_dispatch",
"(L" DB_PKG "DatabaseEntry;L" DB_PKG "LogSequenceNumber;I)I" },
+ { &event_notify_method, &dbenv_class, "handle_event_notify",
+ "(I)I" },
{ &env_feedback_method, &dbenv_class, "handle_env_feedback", "(II)V" },
{ &errcall_method, &dbenv_class, "handle_error",
- "(Ljava/lang/String;Ljava/lang/String;)V" },
+ "(Ljava/lang/String;)V" },
{ &msgcall_method, &dbenv_class, "handle_message",
"(Ljava/lang/String;)V" },
{ &paniccall_method, &dbenv_class, "handle_panic",
"(L" DB_PKG "DatabaseException;)V" },
{ &rep_transport_method, &dbenv_class, "handle_rep_transport",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG "LogSequenceNumber;II)I" },
+ "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L"
+ DB_PKG "LogSequenceNumber;II)I" },
{ &append_recno_method, &db_class, "handle_append_recno",
"(L" DB_PKG "DatabaseEntry;I)V" },
{ &bt_compare_method, &db_class, "handle_bt_compare",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
+ "([B[B)I" },
{ &bt_prefix_method, &db_class, "handle_bt_prefix",
"(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
{ &db_feedback_method, &db_class, "handle_db_feedback", "(II)V" },
{ &dup_compare_method, &db_class, "handle_dup_compare",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
+ "([B[B)I" },
{ &h_hash_method, &db_class, "handle_h_hash", "([BI)I" },
{ &seckey_create_method, &db_class, "handle_seckey_create",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
+ "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L"
+ DB_PKG "DatabaseEntry;)I" },
{ &outputstream_write_method, &outputstream_class, "write", "([BII)V" }
};
-#define NELEM(x) (sizeof (x) / sizeof (x[0]))
+#define NELEM(x) (sizeof (x) / sizeof (x[0]))
-JNIEXPORT void JNICALL
-Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz)
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_initialize(
+ JNIEnv *jenv, jclass clazz)
{
jclass cl;
unsigned int i, j;
-
+
COMPQUIET(clazz, NULL);
-
+
if ((*jenv)->GetJavaVM(jenv, &javavm) != 0) {
- __db_err(NULL, "Cannot get Java VM");
+ __db_errx(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) {
@@ -741,12 +992,11 @@ Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz
}
}
-
/* 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) {
fprintf(stderr,
"Failed to look up field %s with sig %s\n",
@@ -754,20 +1004,21 @@ Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz
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) {
for (j = 0; j < NELEM(all_classes); j++)
if (all_methods[i].cl == all_classes[j].cl)
break;
fprintf(stderr,
"Failed to look up method %s.%s with sig %s\n",
- all_classes[j].name, all_methods[i].name, all_methods[i].sig);
+ all_classes[j].name, all_methods[i].name,
+ all_methods[i].sig);
return;
}
}
@@ -820,7 +1071,7 @@ static jthrowable __dbj_get_except(JNIEnv *jenv,
if (msg == NULL)
msg = db_strerror(err);
-
+
jmsg = (*jenv)->NewStringUTF(jenv, msg);
switch (err) {
@@ -840,11 +1091,36 @@ static jthrowable __dbj_get_except(JNIEnv *jenv,
return (jthrowable)(*jenv)->NewObject(jenv, memex_class,
memex_construct, jmsg, obj, err, jdbenv);
+ case DB_REP_DUPMASTER:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repdupmasterex_class, repdupmasterex_construct,
+ jmsg, err, jdbenv);
+
case DB_REP_HANDLE_DEAD:
return (jthrowable)(*jenv)->NewObject(jenv,
rephandledeadex_class, rephandledeadex_construct,
jmsg, err, jdbenv);
+ case DB_REP_HOLDELECTION:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repholdelectionex_class, repholdelectionex_construct,
+ jmsg, err, jdbenv);
+
+ case DB_REP_JOIN_FAILURE:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repjoinfailex_class, repjoinfailex_construct,
+ jmsg, err, jdbenv);
+
+ case DB_REP_LOCKOUT:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ replockoutex_class, replockoutex_construct,
+ jmsg, err, jdbenv);
+
+ case DB_REP_UNAVAIL:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repunavailex_class, repunavailex_construct,
+ jmsg, err, jdbenv);
+
case DB_RUNRECOVERY:
return (jthrowable)(*jenv)->NewObject(jenv, runrecex_class,
runrecex_construct, jmsg, err, jdbenv);
@@ -852,11 +1128,15 @@ static jthrowable __dbj_get_except(JNIEnv *jenv,
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);
-
+ lockex_construct, jmsg, err, 0, NULL, NULL, 0, jdbenv);
+
+ case DB_VERSION_MISMATCH:
+ return (jthrowable)(*jenv)->NewObject(jenv, versionex_class,
+ versionex_construct, jmsg, err, jdbenv);
+
default:
return (jthrowable)(*jenv)->NewObject(jenv, dbex_class,
dbex_construct, jmsg, err, jdbenv);
@@ -877,37 +1157,112 @@ static int __dbj_throw(JNIEnv *jenv,
* 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.
+ * this error, so we just call __db_errx here.
*/
if (msg == NULL)
msg = db_strerror(err);
-
- __db_err(NULL, "Couldn't create exception for: '%s'",
+
+ __db_errx(NULL, "Couldn't create exception for: '%s'",
msg);
} else
(*jenv)->Throw(jenv, t);
}
-
+
return (err);
}
typedef struct __dbt_locked {
+ JNIEnv *jenv;
+ jobject jdbt;
DBT dbt;
+ jobject jdata_nio;
jbyteArray jarr;
- jbyte *orig_data;
jint offset;
int reuse;
u_int32_t orig_size;
jsize array_len;
} DBT_LOCKED;
+static int __dbj_dbt_memcopy(DBT *dbt, u_int32_t offset, void *buf, u_int32_t size, u_int32_t flags) {
+ DBT_LOCKED *ldbt = dbt->app_data;
+ JNIEnv *jenv = ldbt->jenv;
+
+ if (size == 0)
+ return (0);
+ else if (!F_ISSET(dbt, DB_DBT_USERCOPY)) {
+ /*
+ * For simplicity, the Java API calls this function directly,
+ * so it needs to work with regular DBTs.
+ */
+ switch (flags) {
+ case DB_USERCOPY_GETDATA:
+ memcpy(buf, (u_int8_t *)dbt->data + offset, size);
+ return (0);
+ case DB_USERCOPY_SETDATA:
+ memcpy((u_int8_t *)dbt->data + offset, buf, size);
+ return (0);
+ default:
+ return (EINVAL);
+ }
+ }
+
+ switch (flags) {
+ case DB_USERCOPY_GETDATA:
+ (*jenv)->GetByteArrayRegion(jenv, ldbt->jarr, ldbt->offset +
+ offset, size, buf);
+ break;
+ case DB_USERCOPY_SETDATA:
+ /*
+ * Check whether this is the first time through the callback by relying
+ * on the offset being zero.
+ */
+ if (offset == 0 && (!ldbt->reuse ||
+ (jsize)(ldbt->offset + dbt->size) > ldbt->array_len)) {
+ if (ldbt->jarr != NULL)
+ (*jenv)->DeleteLocalRef(jenv, ldbt->jarr);
+ ldbt->jarr = (*jenv)->NewByteArray(jenv, (jsize)dbt->size);
+ if (ldbt->jarr == NULL)
+ return (ENOMEM);
+ (*jenv)->SetObjectField(jenv, ldbt->jdbt, dbt_data_fid, ldbt->jarr);
+ /* We've allocated a new array, start from the beginning. */
+ ldbt->offset = 0;
+ }
+ (*jenv)->SetByteArrayRegion(jenv, ldbt->jarr, ldbt->offset +
+ offset, size, buf);
+ break;
+ default:
+ return (EINVAL);
+ }
+ return ((*jenv)->ExceptionOccurred(jenv) ? EINVAL : 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_offset_fid, 0);
+ (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
+ if (jarr != NULL)
+ *jarr = newarr;
+ else
+ (*jenv)->DeleteLocalRef(jenv, newarr);
+}
+
static int __dbj_dbt_copyin(
JNIEnv *jenv, DBT_LOCKED *ldbt, DBT **dbtp, jobject jdbt, int allow_null)
{
DBT *dbt;
+ jlong capacity;
memset(ldbt, 0, sizeof (*ldbt));
+ ldbt->jenv = jenv;
+ ldbt->jdbt = jdbt;
if (jdbt == NULL) {
if (allow_null) {
@@ -918,52 +1273,64 @@ static int __dbj_dbt_copyin(
"DatabaseEntry must not be null", NULL, NULL));
}
}
-
+
dbt = &ldbt->dbt;
if (dbtp != NULL)
*dbtp = dbt;
-
- ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv,
- jdbt, dbt_data_fid);
- ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
+ ldbt->jdata_nio = (*jenv)->GetObjectField(jenv, jdbt, dbt_data_nio_fid);
+ if (ldbt->jdata_nio != NULL)
+ F_SET(dbt, DB_DBT_USERMEM);
+ else
+ ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv, jdbt, dbt_data_fid);
+ ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
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);
+ if (F_ISSET(dbt, DB_DBT_USERMEM))
+ dbt->ulen = (*jenv)->GetIntField(jenv, jdbt, dbt_ulen_fid);
+ if (F_ISSET(dbt, DB_DBT_PARTIAL)) {
+ dbt->dlen = (*jenv)->GetIntField(jenv, jdbt, dbt_dlen_fid);
+ dbt->doff = (*jenv)->GetIntField(jenv, jdbt, dbt_doff_fid);
+
+ if ((jint)dbt->doff < 0)
+ return (__dbj_throw(jenv, EINVAL, "DatabaseEntry doff illegal",
+ NULL, NULL));
+ }
+
/*
* We don't support DB_DBT_REALLOC - map anything that's not USERMEM to
* MALLOC.
*/
if (!F_ISSET(dbt, DB_DBT_USERMEM)) {
ldbt->reuse = !F_ISSET(dbt, DB_DBT_MALLOC);
- F_CLR(dbt, DB_DBT_REALLOC);
- F_SET(dbt, DB_DBT_MALLOC);
+ F_CLR(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC);
}
/* Verify parameters before allocating or locking data. */
- if ((jint)dbt->doff < 0)
- return (__dbj_throw(jenv, EINVAL, "DatabaseEntry doff illegal",
- NULL, NULL));
-
- if (ldbt->jarr == NULL) {
+ if (ldbt->jdata_nio != NULL) {
+ capacity = (*jenv)->GetDirectBufferCapacity(jenv,
+ ldbt->jdata_nio);
+ if (capacity > (jlong)UINT32_MAX)
+ return (__dbj_throw(jenv, EINVAL,
+ "DirectBuffer may not be larger than 4GB",
+ NULL, NULL));
+ ldbt->array_len = (u_int32_t)capacity;
+ } else if (ldbt->jarr == NULL) {
/*
* Some code makes the assumption that if a DBT's size or ulen
- * is non-zero, there is data to copy from dbt->data.
+ * is non-zero, there is data to copy from dbt->data.
*
* Clean up the dbt fields so we don't run into trouble.
* (Note that doff, dlen, and flags all may contain
* meaningful values.)
*/
- ldbt->orig_data = dbt->data = NULL;
+ dbt->data = NULL;
ldbt->array_len = ldbt->offset = dbt->size = dbt->ulen = 0;
- return (0);
} else
ldbt->array_len = (*jenv)->GetArrayLength(jenv, ldbt->jarr);
-
+
if (F_ISSET(dbt, DB_DBT_USERMEM)) {
if (ldbt->offset < 0)
return (__dbj_throw(jenv, EINVAL,
@@ -977,56 +1344,39 @@ static int __dbj_dbt_copyin(
return (__dbj_throw(jenv, EINVAL,
"offset + ulen greater than array length",
NULL, NULL));
- if ((ldbt->orig_data = (*jenv)->GetByteArrayElements(jenv,
+ }
+
+ if (ldbt->jdata_nio) {
+ dbt->data = (*jenv)->GetDirectBufferAddress(jenv,
+ ldbt->jdata_nio);
+ dbt->data = (u_int8_t *)dbt->data + ldbt->offset;
+ } else if (F_ISSET(dbt, DB_DBT_USERMEM)) {
+ if (ldbt->jarr != NULL &&
+ (dbt->data = (*jenv)->GetByteArrayElements(jenv,
ldbt->jarr, NULL)) == NULL)
return (EINVAL); /* an exception will be pending */
- dbt->data = ldbt->orig_data + ldbt->offset;
- } else {
- if (__os_umalloc(NULL, dbt->size, &dbt->data) != 0)
- return (ENOMEM);
- ldbt->orig_data = dbt->data;
- (*jenv)->GetByteArrayRegion(jenv,
- ldbt->jarr, ldbt->offset, dbt->size, dbt->data);
- if ((*jenv)->ExceptionOccurred(jenv)) {
- (void)__os_ufree(NULL, dbt->data);
- return (EINVAL);
- }
- }
+ dbt->data = (u_int8_t *)dbt->data + ldbt->offset;
+ } else
+ F_SET(dbt, DB_DBT_USERCOPY);
+ dbt->app_data = ldbt;
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_offset_fid, 0);
- (*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 (dbt == NULL)
return;
-
+
if (dbt->size != ldbt->orig_size)
(*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
-
+
if (F_ISSET(dbt, DB_DBT_USERMEM)) {
- if (ldbt->jarr != NULL)
- (*jenv)->ReleaseByteArrayElements(jenv,
- ldbt->jarr, ldbt->orig_data, 0);
+ if (ldbt->jarr != NULL)
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt->jarr,
+ (jbyte *)dbt->data - ldbt->offset, 0);
if (dbt->size > dbt->ulen &&
(t = (*jenv)->ExceptionOccurred(jenv)) != NULL &&
@@ -1039,20 +1389,6 @@ static void __dbj_dbt_release(
*/
(*jenv)->Throw(jenv, t);
}
- } else {
- if (dbt->size > 0 && dbt->data != ldbt->orig_data) {
- if (ldbt->reuse &&
- (jsize)(ldbt->offset + dbt->size) <= ldbt->array_len)
- (*jenv)->SetByteArrayRegion(jenv,
- ldbt->jarr, ldbt->offset, (jsize)dbt->size,
- (jbyte *)dbt->data);
- else
- __dbj_dbt_copyout(jenv, dbt, NULL, jdbt);
- (void)__os_ufree(NULL, dbt->data);
- }
-
- if (ldbt->orig_data != NULL)
- (void)__os_ufree(NULL, ldbt->orig_data);
}
}
@@ -1097,15 +1433,17 @@ static int __dbj_verify_callback(void *handle, const void *str_arg) {
}
-JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1vec
- (JNIEnv *jenv, jclass jcls, jlong jdbenvp, jint locker,
- jint flags, jobjectArray list, jint offset, jint count) {
+JNIEXPORT void JNICALL
+Java_com_sleepycat_db_internal_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;
+ DBT *obj;
int err, alloc_err, i;
size_t bytesize, ldbtsize;
jobject jlockreq;
@@ -1115,7 +1453,7 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
int completed;
COMPQUIET(jcls, NULL);
- dbenv = *(DB_ENV **)&jdbenvp;
+ dbenv = *(DB_ENV **)(void *)&jdbenvp;
jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
if (dbenv == NULL) {
@@ -1169,8 +1507,13 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
jobj = (*jenv)->GetObjectField(jenv, jlockreq,
lockreq_obj_fid);
if ((err = __dbj_dbt_copyin(jenv,
- &locked_dbts[i], &prereq->obj, jobj, 0)) != 0)
+ &locked_dbts[i], &obj, jobj, 0)) != 0 ||
+ (err =
+ __os_umalloc(dbenv, obj->size, &obj->data)) != 0 ||
+ (err = __dbj_dbt_memcopy(obj, 0,
+ obj->data, obj->size, DB_USERCOPY_GETDATA)) != 0)
goto out2;
+ prereq->obj = obj;
break;
case DB_LOCK_PUT:
/* Needed: lock. Ignored: mode, obj. */
@@ -1180,10 +1523,11 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
(jlockp = (*jenv)->GetLongField(jenv, jlock,
lock_cptr_fid)) == 0L) {
__dbj_throw(jenv, EINVAL,
- "LockRequest lock field is NULL", NULL, jdbenv);
+ "LockRequest lock field is NULL", NULL,
+ jdbenv);
goto out2;
}
- lockp = *(DB_LOCK **)&jlockp;
+ lockp = *(DB_LOCK **)(void *)&jlockp;
prereq->lock = *lockp;
break;
case DB_LOCK_PUT_ALL:
@@ -1195,8 +1539,13 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
jobj = (*jenv)->GetObjectField(jenv, jlockreq,
lockreq_obj_fid);
if ((err = __dbj_dbt_copyin(jenv,
- &locked_dbts[i], &prereq->obj, jobj, 0)) != 0)
+ &locked_dbts[i], &obj, jobj, 0)) != 0 ||
+ (err =
+ __os_umalloc(dbenv, obj->size, &obj->data)) != 0 ||
+ (err = __dbj_dbt_memcopy(obj, 0,
+ obj->data, obj->size, DB_USERCOPY_GETDATA)) != 0)
goto out2;
+ prereq->obj = obj;
break;
default:
__dbj_throw(jenv, EINVAL,
@@ -1226,7 +1575,7 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
lockreq_lock_fid);
jlockp = (*jenv)->GetLongField(jenv, jlock,
lock_cptr_fid);
- lockp = *(DB_LOCK **)&jlockp;
+ lockp = *(DB_LOCK **)(void *)&jlockp;
__os_free(NULL, lockp);
(*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
(jlong)0);
@@ -1239,12 +1588,13 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
*/
if ((alloc_err =
__os_malloc(dbenv, sizeof(DB_LOCK), &lockp)) != 0) {
- __dbj_throw(jenv, alloc_err, NULL, NULL, jdbenv);
+ __dbj_throw(jenv, alloc_err, NULL, NULL,
+ jdbenv);
goto out2;
}
*lockp = lockreq[i].lock;
- *(DB_LOCK **)&jlockp = lockp;
+ *(DB_LOCK **)(void *)&jlockp = lockp;
jlockreq = (*jenv)->GetObjectArrayElement(jenv,
list, i + offset);
@@ -1274,16 +1624,12 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
} 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);
+out2: __os_free(dbenv, locked_dbts);
+out1: for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++)
+ if ((prereq->op == DB_LOCK_GET || prereq->op == DB_LOCK_PUT) &&
+ prereq->obj->data != NULL)
+ __os_ufree(dbenv, prereq->obj->data);
+ __os_free(dbenv, lockreq);
out0: return;
}
@@ -1323,16 +1669,17 @@ out0: return;
#include "java_stat_auto.c"
-static void __dbj_error(const DB_ENV *dbenv, const char *prefix, const char *msg)
+static void __dbj_error(const DB_ENV *dbenv,
+ const char *prefix, const char *msg)
{
JNIEnv *jenv = __dbj_get_jnienv();
jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ COMPQUIET(prefix, NULL);
+
if (jdbenv != NULL)
(*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
- errcall_method,
- (*jenv)->NewStringUTF(jenv, prefix),
- (*jenv)->NewStringUTF(jenv, msg));
+ errcall_method, (*jenv)->NewStringUTF(jenv, msg));
}
static void __dbj_env_feedback(DB_ENV *dbenv, int opcode, int percent)
@@ -1340,8 +1687,9 @@ 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);
+ if (jdbenv != NULL)
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ env_feedback_method, opcode, percent);
}
static void __dbj_message(const DB_ENV *dbenv, const char *msg)
@@ -1359,8 +1707,10 @@ 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));
+ if (jdbenv != NULL)
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ paniccall_method,
+ __dbj_get_except(jenv, err, NULL, NULL, jdbenv));
}
static int __dbj_app_dispatch(DB_ENV *dbenv,
@@ -1372,6 +1722,9 @@ static int __dbj_app_dispatch(DB_ENV *dbenv,
jbyteArray jdbtarr;
int ret;
+ if (jdbenv == NULL)
+ return (EINVAL);
+
jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
__dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
if (jdbt == NULL)
@@ -1386,7 +1739,7 @@ static int __dbj_app_dispatch(DB_ENV *dbenv,
/* The exception will be thrown, so this could be any error. */
ret = EINVAL;
}
-
+
(*jenv)->DeleteLocalRef(jenv, jdbtarr);
(*jenv)->DeleteLocalRef(jenv, jdbt);
if (jlsn != NULL)
@@ -1395,6 +1748,27 @@ static int __dbj_app_dispatch(DB_ENV *dbenv,
return (ret);
}
+static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ int ret;
+
+ COMPQUIET(info, NULL);
+
+ if(jdbenv == NULL)
+ return ;
+
+ ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
+ event_notify_method, event_id);
+
+ if((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+ return ;
+}
+
static int __dbj_rep_transport(DB_ENV *dbenv,
const DBT *control, const DBT *rec, const DB_LSN *lsn, int envid,
u_int32_t flags)
@@ -1405,6 +1779,9 @@ static int __dbj_rep_transport(DB_ENV *dbenv,
jbyteArray jcontrolarr, jrecarr;
int ret;
+ if (jdbenv == NULL)
+ return (EINVAL);
+
jcontrol = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
jrec = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
if (jcontrol == NULL || jrec == NULL)
@@ -1424,7 +1801,7 @@ static int __dbj_rep_transport(DB_ENV *dbenv,
/* 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);
@@ -1445,18 +1822,30 @@ static int __dbj_seckey_create(DB *db,
DBT_LOCKED lresult;
int ret;
- jkey = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
- jdata = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdb == NULL)
+ return (EINVAL);
+
+ jkey = (key->app_data != NULL) ?
+ ((DBT_LOCKED *)key->app_data)->jdbt :
+ (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdata = (data->app_data != NULL) ?
+ ((DBT_LOCKED *)data->app_data)->jdbt :
+ (*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 */
-
+ if (key->app_data == NULL) {
+ __dbj_dbt_copyout(jenv, key, &jkeyarr, jkey);
+ if (jkeyarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+ }
+ if (data->app_data == NULL) {
+ __dbj_dbt_copyout(jenv, data, &jdataarr, jdata);
+ if (jdataarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+ }
+
ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
seckey_create_method, jkey, jdata, jresult);
@@ -1468,24 +1857,34 @@ static int __dbj_seckey_create(DB *db,
ret = EINVAL;
goto err;
}
-
+
if ((ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jresult, 0)) != 0)
goto err;
- if (lresult.jarr != NULL) {
- /*
- * If there's data, we've got a copy of it (that's the default
- * when no Dbt flags are set, so we can safely free the array.
- */
- *result = lresult.dbt;
+ if (lresult.dbt.size != 0) {
+ /* If there's data, we need to take a copy of it. */
+ memset(result, 0, sizeof (DBT));
+ result->size = lresult.dbt.size;
+ if ((ret =
+ __os_umalloc(NULL, result->size, &result->data)) != 0)
+ goto err;
+ if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
+ result->data, result->size,
+ DB_USERCOPY_GETDATA)) != 0)
+ goto err;
+ __dbj_dbt_release(jenv, jresult, &lresult.dbt, &lresult);
(*jenv)->DeleteLocalRef(jenv, lresult.jarr);
- result->flags |= DB_DBT_APPMALLOC;
+ F_SET(result, DB_DBT_APPMALLOC);
+ }
+
+err: if (key->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jkeyarr);
+ (*jenv)->DeleteLocalRef(jenv, jkey);
+ }
+ if (data->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jdataarr);
+ (*jenv)->DeleteLocalRef(jenv, jdata);
}
-
-err: (*jenv)->DeleteLocalRef(jenv, jkeyarr);
- (*jenv)->DeleteLocalRef(jenv, jkey);
- (*jenv)->DeleteLocalRef(jenv, jdataarr);
- (*jenv)->DeleteLocalRef(jenv, jdata);
(*jenv)->DeleteLocalRef(jenv, jresult);
return (ret);
@@ -1500,6 +1899,14 @@ static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
jbyteArray jdbtarr;
int ret;
+ if (jdb == NULL)
+ return (EINVAL);
+
+ /*
+ * The dbt we're passed will be from the application, but we can't
+ * just reuse it, since we will have already taken a copy of the data.
+ * Make a new DatabaseEntry object here for the callback.
+ */
jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
if (jdbt == NULL)
return (ENOMEM); /* An exception is pending */
@@ -1510,25 +1917,29 @@ static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
ret = 0;
(*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
- append_recno_method, jdbt, recno);
+ 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, NULL, jdbt, 0)) != 0)
- goto err;
-
- if (lresult.jarr != NULL) {
- /*
- * If there's data, we've got a copy of it (that's the default
- * when no Dbt flags are set, so we can safely free the array.
- */
- *dbt = lresult.dbt;
+ return (EINVAL);
+ }
+
+ ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jdbt, 0);
+ memset(dbt, 0, sizeof (DBT));
+
+ if (ret == 0 && lresult.dbt.size != 0) {
+ /* If there's data, we need to take a copy of it. */
+ dbt->size = lresult.dbt.size;
+ if ((ret =
+ __os_umalloc(NULL, dbt->size, &dbt->data)) != 0)
+ goto err;
+ if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
+ dbt->data, dbt->size,
+ DB_USERCOPY_GETDATA)) != 0)
+ goto err;
+ __dbj_dbt_release(jenv, jdbt, &lresult.dbt, &lresult);
(*jenv)->DeleteLocalRef(jenv, lresult.jarr);
- dbt->flags |= DB_DBT_APPMALLOC;
+ F_SET(dbt, DB_DBT_APPMALLOC);
}
err: (*jenv)->DeleteLocalRef(jenv, jdbtarr);
@@ -1544,17 +1955,28 @@ static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
jbyteArray jdbtarr1, jdbtarr2;
int ret;
- jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
- if (jdbtarr1 == NULL)
- return ENOMEM;
- (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0, (jsize)dbt1->size,
- (jbyte *)dbt1->data);
+ if (jdb == NULL)
+ return (EINVAL);
- jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
- if (jdbtarr2 == NULL)
- return ENOMEM;
- (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0, (jsize)dbt2->size,
- (jbyte *)dbt2->data);
+ if (dbt1->app_data != NULL)
+ jdbtarr1 = ((DBT_LOCKED *)dbt1->app_data)->jarr;
+ else {
+ jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
+ if (jdbtarr1 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0,
+ (jsize)dbt1->size, (jbyte *)dbt1->data);
+ }
+
+ if (dbt2->app_data != NULL)
+ jdbtarr2 = ((DBT_LOCKED *)dbt2->app_data)->jarr;
+ else {
+ jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
+ if (jdbtarr2 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0,
+ (jsize)dbt2->size, (jbyte *)dbt2->data);
+ }
ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
bt_compare_method, jdbtarr1, jdbtarr2);
@@ -1563,9 +1985,11 @@ static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
/* The exception will be thrown, so this could be any error. */
ret = EINVAL;
}
-
- (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
- (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+
+ if (dbt1->app_data == NULL)
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ if (dbt2->app_data == NULL)
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
return (ret);
}
@@ -1578,23 +2002,40 @@ static size_t __dbj_bt_prefix(DB *db, const DBT *dbt1, const DBT *dbt2)
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 */
+ if (jdb == NULL)
+ return (EINVAL);
+
+ if (dbt1->app_data != NULL)
+ jdbt1 = ((DBT_LOCKED *)dbt1->app_data)->jdbt;
+ else {
+ if ((jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct)) == NULL)
+ return (ENOMEM); /* An exception is pending */
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ if (jdbtarr1 == NULL)
+ return (ENOMEM); /* An exception is pending */
+ }
+
+ if (dbt2->app_data != NULL)
+ jdbt2 = ((DBT_LOCKED *)dbt2->app_data)->jdbt;
+ else {
+ if ((jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct)) == NULL)
+ return (ENOMEM); /* An exception is pending */
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr2 == 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);
+
+ if (dbt1->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+ }
+ if (dbt2->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ }
return (ret);
}
@@ -1603,32 +2044,34 @@ 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 */
+ if (jdb == NULL)
+ return (EINVAL);
- __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 */
+ jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
+ if (jdbtarr1 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0, (jsize)dbt1->size,
+ (jbyte *)dbt1->data);
+
+ jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
+ if (jdbtarr2 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0, (jsize)dbt2->size,
+ (jbyte *)dbt2->data);
ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
- dup_compare_method, jdbt1, jdbt2);
-
+ dup_compare_method, jdbtarr1, jdbtarr2);
+
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);
}
@@ -1638,8 +2081,9 @@ 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);
+ if (jdb != NULL)
+ (*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)
@@ -1649,8 +2093,11 @@ static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
jbyteArray jarr = (*jenv)->NewByteArray(jenv, (jsize)len);
int ret;
- if (jarr == NULL)
- return ENOMEM; /* An exception is pending */
+ if (jdb == NULL)
+ return (EINVAL);
+
+ if ((jarr = (*jenv)->NewByteArray(jenv, (jsize)len)) == NULL)
+ return (ENOMEM); /* An exception is pending */
(*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)len, (jbyte *)data);
@@ -1666,31 +2113,31 @@ static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
JNIEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_initDbEnvRef0(
JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- DB_ENV *self = *(DB_ENV **)&jarg1;
+ DB_ENV *self = *(DB_ENV **)(void *)&jarg1;
jlong ret;
COMPQUIET(jcls, NULL);
DB_ENV_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
- *(jobject *)&ret = (jobject)DB_ENV_INTERNAL(self);
+ *(jobject *)(void *)&ret = (jobject)DB_ENV_INTERNAL(self);
return (ret);
}
JNIEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_initDbRef0(
JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- DB *self = *(DB **)&jarg1;
+ DB *self = *(DB **)(void *)&jarg1;
jlong ret;
COMPQUIET(jcls, NULL);
DB_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
- *(jobject *)&ret = (jobject)DB_INTERNAL(self);
+ *(jobject *)(void *)&ret = (jobject)DB_INTERNAL(self);
return (ret);
}
JNIEXPORT void JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0(
JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jobject jref = *(jobject *)&jarg1;
+ jobject jref = *(jobject *)(void *)&jarg1;
COMPQUIET(jcls, NULL);
if (jref != 0L)
@@ -1700,14 +2147,14 @@ Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0(
JNIEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_getDbEnv0(
JNIEnv *jenv, jclass jcls, jlong jarg1) {
- DB *self = *(DB **)&jarg1;
- jlong env_cptr;
+ DB *self = *(DB **)(void *)&jarg1;
+ jlong ret;
COMPQUIET(jenv, NULL);
COMPQUIET(jcls, NULL);
- *(DB_ENV **)&env_cptr = self->dbenv;
- return (env_cptr);
+ *(DB_ENV **)(void *)&ret = self->dbenv;
+ return (ret);
}
JNIEXPORT jboolean JNICALL
@@ -1734,263 +2181,262 @@ struct __db_out_stream {
int (*callback) __P((void *, const void *));
};
-#define Db __db
-#define Dbc __dbc
-#define Dbt __db_dbt
-#define DbEnv __db_env
-#define DbLock __db_lock_u
-#define DbLogc __db_log_cursor
-#define DbLsn __db_lsn
-#define DbMpoolFile __db_mpoolfile
-#define DbSequence __db_sequence
-#define DbTxn __db_txn
+struct __db_repmgr_sites {
+ DB_REPMGR_SITE *sites;
+ u_int32_t nsites;
+};
+
+#define Db __db
+#define Dbc __dbc
+#define Dbt __db_dbt
+#define DbEnv __db_env
+#define DbLock __db_lock_u
+#define DbLogc __db_log_cursor
+#define DbLsn __db_lsn
+#define DbMpoolFile __db_mpoolfile
+#define DbSequence __db_sequence
+#define DbTxn __db_txn
/* Suppress a compilation warning for an unused symbol */
void *unused = SWIG_JavaThrowException;
-struct Db *new_Db(DB_ENV *dbenv,u_int32_t flags){
- DB *self;
+SWIGINTERN struct Db *new_Db(DB_ENV *dbenv,u_int32_t flags){
+ DB *self = NULL;
errno = db_create(&self, dbenv, flags);
- return (errno == 0) ? self : NULL;
+ if (errno == 0 && dbenv == NULL)
+ self->dbenv->dbt_usercopy = __dbj_dbt_memcopy;
+ return self;
}
-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){
+SWIGINTERN 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);
}
-int Db_close(struct Db *self,u_int32_t flags){
+SWIGINTERN db_ret_t Db_compact(struct Db *self,DB_TXN *txnid,DBT *start,DBT *stop,DB_COMPACT *c_data,u_int32_t flags,DBT *end){
+ return self->compact(self, txnid, start, stop, c_data, flags,
+ end);
+ }
+SWIGINTERN int Db_close(struct Db *self,u_int32_t flags){
errno = self->close(self, flags);
return errno;
}
-DBC *Db_cursor(struct Db *self,DB_TXN *txnid,u_int32_t flags){
- DBC *cursorp;
+SWIGINTERN DBC *Db_cursor(struct Db *self,DB_TXN *txnid,u_int32_t flags){
+ DBC *cursorp = NULL;
errno = self->cursor(self, txnid, &cursorp, flags);
- return (errno == 0) ? cursorp : NULL;
+ return cursorp;
}
-int Db_del(struct Db *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
+SWIGINTERN int Db_del(struct Db *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
return self->del(self, txnid, key, flags);
}
-void Db_err(struct Db *self,int error,char const *message){
+SWIGINTERN void Db_err(struct Db *self,int error,char const *message){
self->err(self, error, message);
}
-void Db_errx(struct Db *self,char const *message){
+SWIGINTERN void Db_errx(struct Db *self,char const *message){
self->errx(self, message);
}
-int_bool Db_get_transactional(struct Db *self){
+SWIGINTERN int_bool Db_get_transactional(struct Db *self){
return self->get_transactional(self);
}
-int Db_get(struct Db *self,DB_TXN *txnid,DBT *key,DBT *data,u_int32_t flags){
+SWIGINTERN int Db_get(struct Db *self,DB_TXN *txnid,DBT *key,DBT *data,u_int32_t flags){
return self->get(self, txnid, key, data, flags);
}
-int_bool Db_get_byteswapped(struct Db *self){
- int ret;
+SWIGINTERN int_bool Db_get_byteswapped(struct Db *self){
+ int ret = 0;
errno = self->get_byteswapped(self, &ret);
return ret;
}
-jlong Db_get_cachesize(struct Db *self){
- u_int32_t gbytes, bytes;
+SWIGINTERN jlong Db_get_cachesize(struct Db *self){
+ u_int32_t gbytes = 0, bytes = 0;
errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
return (jlong)gbytes * GIGABYTE + bytes;
}
-u_int32_t Db_get_cachesize_ncache(struct Db *self){
- int ret;
+SWIGINTERN u_int32_t Db_get_cachesize_ncache(struct Db *self){
+ int ret = 0;
errno = self->get_cachesize(self, NULL, NULL, &ret);
return ret;
}
-char const *Db_get_filename(struct Db *self){
- const char *ret;
+SWIGINTERN char const *Db_get_filename(struct Db *self){
+ const char *ret = NULL;
errno = self->get_dbname(self, &ret, NULL);
return ret;
}
-char const *Db_get_dbname(struct Db *self){
- const char *ret;
+SWIGINTERN char const *Db_get_dbname(struct Db *self){
+ const char *ret = NULL;
errno = self->get_dbname(self, NULL, &ret);
return ret;
}
-u_int32_t Db_get_encrypt_flags(struct Db *self){
- u_int32_t ret;
- errno = self->get_encrypt_flags(self, &ret);
- return ret;
- }
-char const *Db_get_errpfx(struct Db *self){
- const char *ret;
- errno = 0;
- self->get_errpfx(self, &ret);
+SWIGINTERN u_int32_t Db_get_encrypt_flags(struct Db *self){
+ u_int32_t ret = 0;
+ CRYPTO_ONLY(errno = self->get_encrypt_flags(self, &ret))
return ret;
}
-u_int32_t Db_get_flags(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_flags(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_flags(self, &ret);
return ret;
}
-int Db_get_lorder(struct Db *self){
- int ret;
+SWIGINTERN int Db_get_lorder(struct Db *self){
+ int ret = 0;
errno = self->get_lorder(self, &ret);
return ret;
}
-DB_MPOOLFILE *Db_get_mpf(struct Db *self){
+SWIGINTERN DB_MPOOLFILE *Db_get_mpf(struct Db *self){
errno = 0;
- return self->mpf;
+ return self->get_mpf(self);
}
-u_int32_t Db_get_open_flags(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_open_flags(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_open_flags(self, &ret);
return ret;
}
-u_int32_t Db_get_pagesize(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_pagesize(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_pagesize(self, &ret);
return ret;
}
-u_int32_t Db_get_bt_minkey(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_bt_minkey(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_bt_minkey(self, &ret);
return ret;
}
-u_int32_t Db_get_h_ffactor(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_h_ffactor(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_h_ffactor(self, &ret);
return ret;
}
-u_int32_t Db_get_h_nelem(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_h_nelem(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_h_nelem(self, &ret);
return ret;
}
-int Db_get_re_delim(struct Db *self){
- int ret;
+SWIGINTERN int Db_get_re_delim(struct Db *self){
+ int ret = 0;
errno = self->get_re_delim(self, &ret);
return ret;
}
-u_int32_t Db_get_re_len(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_re_len(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_re_len(self, &ret);
return ret;
}
-int Db_get_re_pad(struct Db *self){
- int ret;
+SWIGINTERN int Db_get_re_pad(struct Db *self){
+ int ret = 0;
errno = self->get_re_pad(self, &ret);
return ret;
}
-char const *Db_get_re_source(struct Db *self){
- const char *ret;
+SWIGINTERN char const *Db_get_re_source(struct Db *self){
+ const char *ret = NULL;
errno = self->get_re_source(self, &ret);
return ret;
}
-u_int32_t Db_get_q_extentsize(struct Db *self){
- u_int32_t ret;
+SWIGINTERN u_int32_t Db_get_q_extentsize(struct Db *self){
+ u_int32_t ret = 0;
errno = self->get_q_extentsize(self, &ret);
return ret;
}
-DBTYPE Db_get_type(struct Db *self){
- DBTYPE type;
+SWIGINTERN DBTYPE Db_get_type(struct Db *self){
+ DBTYPE type = (DBTYPE)0;
errno = self->get_type(self, &type);
return type;
}
-DBC *Db_join(struct Db *self,DBC **curslist,u_int32_t flags){
- DBC *dbcp;
+SWIGINTERN DBC *Db_join(struct Db *self,DBC **curslist,u_int32_t flags){
+ DBC *dbcp = NULL;
errno = self->join(self, curslist, &dbcp, flags);
- return (errno == 0) ? dbcp : NULL;
+ return dbcp;
}
-db_ret_t Db_key_range(struct Db *self,DB_TXN *txnid,DBT *key,DB_KEY_RANGE *key_range,u_int32_t flags){
+SWIGINTERN 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);
}
-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){
+SWIGINTERN 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);
}
-int Db_pget(struct Db *self,DB_TXN *txnid,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
+SWIGINTERN int Db_pget(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);
}
-int Db_put(struct Db *self,DB_TXN *txnid,DBT *key,DBT *data,u_int32_t flags){
+SWIGINTERN 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);
}
-db_ret_t Db_remove(struct Db *self,char const *file,char const *database,u_int32_t flags){
+SWIGINTERN 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);
}
-db_ret_t Db_rename(struct Db *self,char const *file,char const *database,char const *newname,u_int32_t flags){
+SWIGINTERN 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);
}
-db_ret_t Db_set_append_recno(struct Db *self,int (*db_append_recno_fcn)(DB *,DBT *,db_recno_t)){
+SWIGINTERN 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);
}
-db_ret_t Db_set_bt_compare(struct Db *self,int (*bt_compare_fcn)(DB *,DBT const *,DBT const *)){
+SWIGINTERN 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);
}
-db_ret_t Db_set_bt_maxkey(struct Db *self,u_int32_t maxkey){
- return self->set_bt_maxkey(self, maxkey);
- }
-db_ret_t Db_set_bt_minkey(struct Db *self,u_int32_t bt_minkey){
+SWIGINTERN db_ret_t Db_set_bt_minkey(struct Db *self,u_int32_t bt_minkey){
return self->set_bt_minkey(self, bt_minkey);
}
-db_ret_t Db_set_bt_prefix(struct Db *self,size_t (*bt_prefix_fcn)(DB *,DBT const *,DBT const *)){
+SWIGINTERN 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);
}
-db_ret_t Db_set_cachesize(struct Db *self,jlong bytes,int ncache){
+SWIGINTERN 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);
}
-db_ret_t Db_set_dup_compare(struct Db *self,int (*dup_compare_fcn)(DB *,DBT const *,DBT const *)){
+SWIGINTERN 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);
}
-db_ret_t Db_set_encrypt(struct Db *self,char const *passwd,u_int32_t flags){
+SWIGINTERN db_ret_t Db_set_encrypt(struct Db *self,char const *passwd,u_int32_t flags){
return self->set_encrypt(self, passwd, flags);
}
-void Db_set_errpfx(struct Db *self,char const *errpfx){
- self->set_errpfx(self, errpfx);
- }
-db_ret_t Db_set_feedback(struct Db *self,void (*db_feedback_fcn)(DB *,int,int)){
+SWIGINTERN db_ret_t Db_set_feedback(struct Db *self,void (*db_feedback_fcn)(DB *,int,int)){
return self->set_feedback(self, db_feedback_fcn);
}
-db_ret_t Db_set_flags(struct Db *self,u_int32_t flags){
+SWIGINTERN db_ret_t Db_set_flags(struct Db *self,u_int32_t flags){
return self->set_flags(self, flags);
}
-db_ret_t Db_set_h_ffactor(struct Db *self,u_int32_t h_ffactor){
+SWIGINTERN db_ret_t Db_set_h_ffactor(struct Db *self,u_int32_t h_ffactor){
return self->set_h_ffactor(self, h_ffactor);
}
-db_ret_t Db_set_h_hash(struct Db *self,u_int32_t (*h_hash_fcn)(DB *,void const *,u_int32_t)){
+SWIGINTERN 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);
}
-db_ret_t Db_set_h_nelem(struct Db *self,u_int32_t h_nelem){
+SWIGINTERN db_ret_t Db_set_h_nelem(struct Db *self,u_int32_t h_nelem){
return self->set_h_nelem(self, h_nelem);
}
-db_ret_t Db_set_lorder(struct Db *self,int lorder){
+SWIGINTERN db_ret_t Db_set_lorder(struct Db *self,int lorder){
return self->set_lorder(self, lorder);
}
-db_ret_t Db_set_pagesize(struct Db *self,u_int32_t pagesize){
+SWIGINTERN db_ret_t Db_set_pagesize(struct Db *self,u_int32_t pagesize){
return self->set_pagesize(self, pagesize);
}
-db_ret_t Db_set_re_delim(struct Db *self,int re_delim){
+SWIGINTERN db_ret_t Db_set_re_delim(struct Db *self,int re_delim){
return self->set_re_delim(self, re_delim);
}
-db_ret_t Db_set_re_len(struct Db *self,u_int32_t re_len){
+SWIGINTERN db_ret_t Db_set_re_len(struct Db *self,u_int32_t re_len){
return self->set_re_len(self, re_len);
}
-db_ret_t Db_set_re_pad(struct Db *self,int re_pad){
+SWIGINTERN db_ret_t Db_set_re_pad(struct Db *self,int re_pad){
return self->set_re_pad(self, re_pad);
}
-db_ret_t Db_set_re_source(struct Db *self,char *source){
+SWIGINTERN db_ret_t Db_set_re_source(struct Db *self,char *source){
return self->set_re_source(self, source);
}
-db_ret_t Db_set_q_extentsize(struct Db *self,u_int32_t extentsize){
+SWIGINTERN db_ret_t Db_set_q_extentsize(struct Db *self,u_int32_t extentsize){
return self->set_q_extentsize(self, extentsize);
}
-void *Db_stat(struct Db *self,DB_TXN *txnid,u_int32_t flags){
- void *statp;
+SWIGINTERN void *Db_stat(struct Db *self,DB_TXN *txnid,u_int32_t flags){
+ void *statp = NULL;
errno = self->stat(self, txnid, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
-db_ret_t Db_sync(struct Db *self,u_int32_t flags){
+SWIGINTERN db_ret_t Db_sync(struct Db *self,u_int32_t flags){
return self->sync(self, flags);
}
-int Db_truncate(struct Db *self,DB_TXN *txnid,u_int32_t flags){
- u_int32_t count;
+SWIGINTERN int Db_truncate(struct Db *self,DB_TXN *txnid,u_int32_t flags){
+ u_int32_t count = 0;
errno = self->truncate(self, txnid, &count, flags);
return count;
}
-db_ret_t Db_upgrade(struct Db *self,char const *file,u_int32_t flags){
+SWIGINTERN db_ret_t Db_upgrade(struct Db *self,char const *file,u_int32_t flags){
return self->upgrade(self, file, flags);
}
-int_bool Db_verify(struct Db *self,char const *file,char const *database,struct __db_out_stream outfile,u_int32_t flags){
+SWIGINTERN int_bool 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.
@@ -2005,354 +2451,428 @@ int_bool Db_verify(struct Db *self,char const *file,char const *database,struct
} else
return 1;
}
-db_ret_t Dbc_close(struct Dbc *self){
+SWIGINTERN db_ret_t Dbc_close(struct Dbc *self){
return self->c_close(self);
}
-db_recno_t Dbc_count(struct Dbc *self,u_int32_t flags){
- db_recno_t count;
+SWIGINTERN db_recno_t Dbc_count(struct Dbc *self,u_int32_t flags){
+ db_recno_t count = 0;
errno = self->c_count(self, &count, flags);
return count;
}
-int Dbc_del(struct Dbc *self,u_int32_t flags){
+SWIGINTERN int Dbc_del(struct Dbc *self,u_int32_t flags){
return self->c_del(self, flags);
}
-DBC *Dbc_dup(struct Dbc *self,u_int32_t flags){
- DBC *newcurs;
+SWIGINTERN DBC *Dbc_dup(struct Dbc *self,u_int32_t flags){
+ DBC *newcurs = NULL;
errno = self->c_dup(self, &newcurs, flags);
- return (errno == 0) ? newcurs : NULL;
+ return newcurs;
}
-int Dbc_get(struct Dbc *self,DBT *key,DBT *data,u_int32_t flags){
+SWIGINTERN int Dbc_get(struct Dbc *self,DBT *key,DBT *data,u_int32_t flags){
return self->c_get(self, key, data, flags);
}
-int Dbc_pget(struct Dbc *self,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
+SWIGINTERN int Dbc_pget(struct Dbc *self,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
return self->c_pget(self, key, pkey, data, flags);
}
-int Dbc_put(struct Dbc *self,DBT *key,DBT *data,u_int32_t flags){
+SWIGINTERN int Dbc_put(struct Dbc *self,DBT *key,DBT *data,u_int32_t flags){
return self->c_put(self, key, data, flags);
}
-struct DbEnv *new_DbEnv(u_int32_t flags){
+SWIGINTERN struct DbEnv *new_DbEnv(u_int32_t flags){
DB_ENV *self = NULL;
errno = db_env_create(&self, flags);
- return (errno == 0) ? self : NULL;
+ if (errno == 0)
+ self->dbt_usercopy = __dbj_dbt_memcopy;
+ return self;
}
-db_ret_t DbEnv_close(struct DbEnv *self,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_close(struct DbEnv *self,u_int32_t flags){
return self->close(self, flags);
}
-db_ret_t DbEnv_dbremove(struct DbEnv *self,DB_TXN *txnid,char const *file,char const *database,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_dbremove(struct DbEnv *self,DB_TXN *txnid,char const *file,char const *database,u_int32_t flags){
return self->dbremove(self, txnid, file, database, flags);
}
-db_ret_t DbEnv_dbrename(struct DbEnv *self,DB_TXN *txnid,char const *file,char const *database,char const *newname,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_dbrename(struct DbEnv *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);
}
-void DbEnv_err(struct DbEnv *self,int error,char const *message){
+SWIGINTERN void DbEnv_err(struct DbEnv *self,int error,char const *message){
self->err(self, error, message);
}
-void DbEnv_errx(struct DbEnv *self,char const *message){
+SWIGINTERN void DbEnv_errx(struct DbEnv *self,char const *message){
self->errx(self, message);
}
-char const **DbEnv_get_data_dirs(struct DbEnv *self){
+SWIGINTERN DB_TXN *DbEnv_cdsgroup_begin(struct DbEnv *self){
+ DB_TXN *tid = NULL;
+ errno = self->cdsgroup_begin(self, &tid);
+ return tid;
+ }
+SWIGINTERN db_ret_t DbEnv_fileid_reset(struct DbEnv *self,char const *file,u_int32_t flags){
+ return self->fileid_reset(self, file, flags);
+ }
+SWIGINTERN char const **DbEnv_get_data_dirs(struct DbEnv *self){
const char **ret;
errno = self->get_data_dirs(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_encrypt_flags(struct DbEnv *self){
- u_int32_t ret;
- errno = self->get_encrypt_flags(self, &ret);
- return ret;
- }
-char const *DbEnv_get_errpfx(struct DbEnv *self){
- const char *ret;
- errno = 0;
- self->get_errpfx(self, &ret);
+SWIGINTERN u_int32_t DbEnv_get_encrypt_flags(struct DbEnv *self){
+ u_int32_t ret = 0;
+ CRYPTO_ONLY(errno = self->get_encrypt_flags(self, &ret))
return ret;
}
-u_int32_t DbEnv_get_flags(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_flags(struct DbEnv *self){
u_int32_t ret;
errno = self->get_flags(self, &ret);
return ret;
}
-char const *DbEnv_get_home(struct DbEnv *self){
+SWIGINTERN char const *DbEnv_get_home(struct DbEnv *self){
const char *ret;
errno = self->get_home(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_open_flags(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_open_flags(struct DbEnv *self){
u_int32_t ret;
errno = self->get_open_flags(self, &ret);
return ret;
}
-long DbEnv_get_shm_key(struct DbEnv *self){
+SWIGINTERN long DbEnv_get_shm_key(struct DbEnv *self){
long ret;
errno = self->get_shm_key(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_tas_spins(struct DbEnv *self){
- u_int32_t ret;
- errno = self->get_tas_spins(self, &ret);
- return ret;
- }
-char const *DbEnv_get_tmp_dir(struct DbEnv *self){
+SWIGINTERN char const *DbEnv_get_tmp_dir(struct DbEnv *self){
const char *ret;
errno = self->get_tmp_dir(self, &ret);
return ret;
}
-int_bool DbEnv_get_verbose(struct DbEnv *self,u_int32_t which){
+SWIGINTERN int_bool DbEnv_get_verbose(struct DbEnv *self,u_int32_t which){
int ret;
errno = self->get_verbose(self, which, &ret);
return ret;
}
-db_ret_t DbEnv_open(struct DbEnv *self,char const *db_home,u_int32_t flags,int mode){
+SWIGINTERN int_bool DbEnv_is_bigendian(struct DbEnv *self){
+ return self->is_bigendian();
+ }
+SWIGINTERN db_ret_t DbEnv_lsn_reset(struct DbEnv *self,char const *file,u_int32_t flags){
+ return self->lsn_reset(self, file, flags);
+ }
+SWIGINTERN db_ret_t DbEnv_open(struct DbEnv *self,char const *db_home,u_int32_t flags,int mode){
return self->open(self, db_home, flags, mode);
}
-db_ret_t DbEnv_remove(struct DbEnv *self,char const *db_home,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_remove(struct DbEnv *self,char const *db_home,u_int32_t flags){
return self->remove(self, db_home, flags);
}
-db_ret_t DbEnv_set_cachesize(struct DbEnv *self,jlong bytes,int ncache){
+SWIGINTERN db_ret_t DbEnv_set_cachesize(struct DbEnv *self,jlong bytes,int ncache){
return self->set_cachesize(self,
(u_int32_t)(bytes / GIGABYTE),
(u_int32_t)(bytes % GIGABYTE), ncache);
}
-db_ret_t DbEnv_set_data_dir(struct DbEnv *self,char const *dir){
+SWIGINTERN db_ret_t DbEnv_set_data_dir(struct DbEnv *self,char const *dir){
return self->set_data_dir(self, dir);
}
-db_ret_t DbEnv_set_encrypt(struct DbEnv *self,char const *passwd,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_set_intermediate_dir(struct DbEnv *self,int mode,u_int32_t flags){
+ return self->set_intermediate_dir(self, mode, flags);
+ }
+SWIGINTERN db_ret_t DbEnv_set_encrypt(struct DbEnv *self,char const *passwd,u_int32_t flags){
return self->set_encrypt(self, passwd, flags);
}
-void DbEnv_set_errcall(struct DbEnv *self,void (*db_errcall_fcn)(DB_ENV const *,char const *,char const *)){
+SWIGINTERN void DbEnv_set_errcall(struct DbEnv *self,void (*db_errcall_fcn)(DB_ENV const *,char const *,char const *)){
self->set_errcall(self, db_errcall_fcn);
}
-void DbEnv_set_errpfx(struct DbEnv *self,char const *errpfx){
- self->set_errpfx(self, errpfx);
- }
-db_ret_t DbEnv_set_flags(struct DbEnv *self,u_int32_t flags,int_bool onoff){
+SWIGINTERN db_ret_t DbEnv_set_flags(struct DbEnv *self,u_int32_t flags,int_bool onoff){
return self->set_flags(self, flags, onoff);
}
-db_ret_t DbEnv_set_feedback(struct DbEnv *self,void (*env_feedback_fcn)(DB_ENV *,int,int)){
+SWIGINTERN db_ret_t DbEnv_set_feedback(struct DbEnv *self,void (*env_feedback_fcn)(DB_ENV *,int,int)){
return self->set_feedback(self, env_feedback_fcn);
}
-db_ret_t DbEnv_set_mp_mmapsize(struct DbEnv *self,size_t mp_mmapsize){
+SWIGINTERN db_ret_t DbEnv_set_mp_max_openfd(struct DbEnv *self,int maxopenfd){
+ return self->set_mp_max_openfd(self, maxopenfd);
+ }
+SWIGINTERN db_ret_t DbEnv_set_mp_max_write(struct DbEnv *self,int maxwrite,int maxwrite_sleep){
+ return self->set_mp_max_write(self, maxwrite, maxwrite_sleep);
+ }
+SWIGINTERN db_ret_t DbEnv_set_mp_mmapsize(struct DbEnv *self,size_t mp_mmapsize){
return self->set_mp_mmapsize(self, mp_mmapsize);
}
-void DbEnv_set_msgcall(struct DbEnv *self,void (*db_msgcall_fcn)(DB_ENV const *,char const *)){
+SWIGINTERN void DbEnv_set_msgcall(struct DbEnv *self,void (*db_msgcall_fcn)(DB_ENV const *,char const *)){
self->set_msgcall(self, db_msgcall_fcn);
}
-db_ret_t DbEnv_set_paniccall(struct DbEnv *self,void (*db_panic_fcn)(DB_ENV *,int)){
+SWIGINTERN db_ret_t DbEnv_set_paniccall(struct DbEnv *self,void (*db_panic_fcn)(DB_ENV *,int)){
return self->set_paniccall(self, db_panic_fcn);
}
-db_ret_t DbEnv_set_rpc_server(struct DbEnv *self,void *client,char *host,long cl_timeout,long sv_timeout,u_int32_t flags){
- return self->set_rpc_server(self, client, host,
+SWIGINTERN db_ret_t DbEnv_set_rpc_server(struct DbEnv *self,char *host,long cl_timeout,long sv_timeout,u_int32_t flags){
+ return self->set_rpc_server(self, NULL, host,
cl_timeout, sv_timeout, flags);
}
-db_ret_t DbEnv_set_shm_key(struct DbEnv *self,long shm_key){
+SWIGINTERN db_ret_t DbEnv_set_shm_key(struct DbEnv *self,long shm_key){
return self->set_shm_key(self, shm_key);
}
-db_ret_t DbEnv_set_tas_spins(struct DbEnv *self,u_int32_t tas_spins){
- return self->set_tas_spins(self, tas_spins);
- }
-db_ret_t DbEnv_set_timeout(struct DbEnv *self,db_timeout_t timeout,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_set_timeout(struct DbEnv *self,db_timeout_t timeout,u_int32_t flags){
return self->set_timeout(self, timeout, flags);
}
-db_ret_t DbEnv_set_tmp_dir(struct DbEnv *self,char const *dir){
+SWIGINTERN db_ret_t DbEnv_set_tmp_dir(struct DbEnv *self,char const *dir){
return self->set_tmp_dir(self, dir);
}
-db_ret_t DbEnv_set_tx_max(struct DbEnv *self,u_int32_t max){
+SWIGINTERN db_ret_t DbEnv_set_tx_max(struct DbEnv *self,u_int32_t max){
return self->set_tx_max(self, max);
}
-db_ret_t DbEnv_set_app_dispatch(struct DbEnv *self,int (*tx_recover)(DB_ENV *,DBT *,DB_LSN *,db_recops)){
+SWIGINTERN db_ret_t DbEnv_set_app_dispatch(struct DbEnv *self,int (*tx_recover)(DB_ENV *,DBT *,DB_LSN *,db_recops)){
return self->set_app_dispatch(self, tx_recover);
}
-db_ret_t DbEnv_set_tx_timestamp(struct DbEnv *self,time_t *timestamp){
+SWIGINTERN db_ret_t DbEnv_set_event_notify(struct DbEnv *self,void (*event_notify)(DB_ENV *,u_int32_t,void *)){
+ return self->set_event_notify(self, event_notify);
+ }
+SWIGINTERN db_ret_t DbEnv_set_tx_timestamp(struct DbEnv *self,time_t *timestamp){
return self->set_tx_timestamp(self, timestamp);
}
-db_ret_t DbEnv_set_verbose(struct DbEnv *self,u_int32_t which,int_bool onoff){
+SWIGINTERN db_ret_t DbEnv_set_verbose(struct DbEnv *self,u_int32_t which,int_bool onoff){
return self->set_verbose(self, which, onoff);
}
-struct __db_lk_conflicts DbEnv_get_lk_conflicts(struct DbEnv *self){
+SWIGINTERN struct __db_lk_conflicts DbEnv_get_lk_conflicts(struct DbEnv *self){
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 DbEnv_get_lk_detect(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_lk_detect(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lk_detect(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_lk_max_locks(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_lk_max_locks(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lk_max_locks(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_lk_max_lockers(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_lk_max_lockers(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lk_max_lockers(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_lk_max_objects(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_lk_max_objects(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lk_max_objects(self, &ret);
return ret;
}
-int DbEnv_lock_detect(struct DbEnv *self,u_int32_t flags,u_int32_t atype){
+SWIGINTERN int DbEnv_lock_detect(struct DbEnv *self,u_int32_t flags,u_int32_t atype){
int aborted;
errno = self->lock_detect(self, flags, atype, &aborted);
return aborted;
}
-DB_LOCK *DbEnv_lock_get(struct DbEnv *self,u_int32_t locker,u_int32_t flags,DBT const *object,db_lockmode_t lock_mode){
+SWIGINTERN DB_LOCK *DbEnv_lock_get(struct DbEnv *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;
}
-u_int32_t DbEnv_lock_id(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_lock_id(struct DbEnv *self){
u_int32_t id;
errno = self->lock_id(self, &id);
return id;
}
-db_ret_t DbEnv_lock_id_free(struct DbEnv *self,u_int32_t id){
+SWIGINTERN db_ret_t DbEnv_lock_id_free(struct DbEnv *self,u_int32_t id){
return self->lock_id_free(self, id);
}
-db_ret_t DbEnv_lock_put(struct DbEnv *self,DB_LOCK *lock){
+SWIGINTERN db_ret_t DbEnv_lock_put(struct DbEnv *self,DB_LOCK *lock){
return self->lock_put(self, lock);
}
-DB_LOCK_STAT *DbEnv_lock_stat(struct DbEnv *self,u_int32_t flags){
- DB_LOCK_STAT *statp;
+SWIGINTERN DB_LOCK_STAT *DbEnv_lock_stat(struct DbEnv *self,u_int32_t flags){
+ DB_LOCK_STAT *statp = NULL;
errno = self->lock_stat(self, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
-db_ret_t DbEnv_set_lk_conflicts(struct DbEnv *self,struct __db_lk_conflicts conflicts){
+SWIGINTERN db_ret_t DbEnv_set_lk_conflicts(struct DbEnv *self,struct __db_lk_conflicts conflicts){
return self->set_lk_conflicts(self,
conflicts.lk_conflicts, conflicts.lk_modes);
}
-db_ret_t DbEnv_set_lk_detect(struct DbEnv *self,u_int32_t detect){
+SWIGINTERN db_ret_t DbEnv_set_lk_detect(struct DbEnv *self,u_int32_t detect){
return self->set_lk_detect(self, detect);
}
-db_ret_t DbEnv_set_lk_max_lockers(struct DbEnv *self,u_int32_t max){
+SWIGINTERN db_ret_t DbEnv_set_lk_max_lockers(struct DbEnv *self,u_int32_t max){
return self->set_lk_max_lockers(self, max);
}
-db_ret_t DbEnv_set_lk_max_locks(struct DbEnv *self,u_int32_t max){
+SWIGINTERN db_ret_t DbEnv_set_lk_max_locks(struct DbEnv *self,u_int32_t max){
return self->set_lk_max_locks(self, max);
}
-db_ret_t DbEnv_set_lk_max_objects(struct DbEnv *self,u_int32_t max){
+SWIGINTERN db_ret_t DbEnv_set_lk_max_objects(struct DbEnv *self,u_int32_t max){
return self->set_lk_max_objects(self, max);
}
-u_int32_t DbEnv_get_lg_bsize(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_lg_bsize(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lg_bsize(self, &ret);
return ret;
}
-char const *DbEnv_get_lg_dir(struct DbEnv *self){
+SWIGINTERN char const *DbEnv_get_lg_dir(struct DbEnv *self){
const char *ret;
errno = self->get_lg_dir(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_lg_max(struct DbEnv *self){
+SWIGINTERN int DbEnv_get_lg_filemode(struct DbEnv *self){
+ int ret;
+ errno = self->get_lg_filemode(self, &ret);
+ return ret;
+ }
+SWIGINTERN u_int32_t DbEnv_get_lg_max(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lg_max(self, &ret);
return ret;
}
-u_int32_t DbEnv_get_lg_regionmax(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_get_lg_regionmax(struct DbEnv *self){
u_int32_t ret;
errno = self->get_lg_regionmax(self, &ret);
return ret;
}
-char **DbEnv_log_archive(struct DbEnv *self,u_int32_t flags){
+SWIGINTERN char **DbEnv_log_archive(struct DbEnv *self,u_int32_t flags){
char **list = NULL;
errno = self->log_archive(self, &list, flags);
- return (errno == 0) ? list : NULL;
+ return list;
}
-int DbEnv_log_compare(DB_LSN const *lsn0,DB_LSN const *lsn1){
+SWIGINTERN int DbEnv_log_compare(DB_LSN const *lsn0,DB_LSN const *lsn1){
return log_compare(lsn0, lsn1);
}
-DB_LOGC *DbEnv_log_cursor(struct DbEnv *self,u_int32_t flags){
- DB_LOGC *cursor;
+SWIGINTERN DB_LOGC *DbEnv_log_cursor(struct DbEnv *self,u_int32_t flags){
+ DB_LOGC *cursor = NULL;
errno = self->log_cursor(self, &cursor, flags);
- return (errno == 0) ? cursor : NULL;
+ return cursor;
}
-char *DbEnv_log_file(struct DbEnv *self,DB_LSN *lsn){
- char namebuf[MAXPATHLEN];
+SWIGINTERN char *DbEnv_log_file(struct DbEnv *self,DB_LSN *lsn){
+ char namebuf[DB_MAXPATHLEN];
errno = self->log_file(self, lsn, namebuf, sizeof namebuf);
return (errno == 0) ? strdup(namebuf) : NULL;
}
-db_ret_t DbEnv_log_flush(struct DbEnv *self,DB_LSN const *lsn){
- return self->log_flush(self, lsn);
+SWIGINTERN db_ret_t DbEnv_log_flush(struct DbEnv *self,DB_LSN const *lsn_or_null){
+ return self->log_flush(self, lsn_or_null);
}
-db_ret_t DbEnv_log_put(struct DbEnv *self,DB_LSN *lsn,DBT const *data,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_log_put(struct DbEnv *self,DB_LSN *lsn,DBT const *data,u_int32_t flags){
return self->log_put(self, lsn, data, flags);
}
-DB_LOG_STAT *DbEnv_log_stat(struct DbEnv *self,u_int32_t flags){
- DB_LOG_STAT *sp;
+SWIGINTERN db_ret_t DbEnv_log_print(struct DbEnv *self,DB_TXN *txn,char const *msg){
+ return self->log_printf(self, txn, "%s", msg);
+ }
+SWIGINTERN DB_LOG_STAT *DbEnv_log_stat(struct DbEnv *self,u_int32_t flags){
+ DB_LOG_STAT *sp = NULL;
errno = self->log_stat(self, &sp, flags);
- return (errno == 0) ? sp : NULL;
+ return sp;
}
-db_ret_t DbEnv_set_lg_bsize(struct DbEnv *self,u_int32_t lg_bsize){
+SWIGINTERN db_ret_t DbEnv_set_lg_bsize(struct DbEnv *self,u_int32_t lg_bsize){
return self->set_lg_bsize(self, lg_bsize);
}
-db_ret_t DbEnv_set_lg_dir(struct DbEnv *self,char const *dir){
+SWIGINTERN db_ret_t DbEnv_set_lg_dir(struct DbEnv *self,char const *dir){
return self->set_lg_dir(self, dir);
}
-db_ret_t DbEnv_set_lg_max(struct DbEnv *self,u_int32_t lg_max){
+SWIGINTERN db_ret_t DbEnv_set_lg_filemode(struct DbEnv *self,int mode){
+ return self->set_lg_filemode(self, mode);
+ }
+SWIGINTERN db_ret_t DbEnv_set_lg_max(struct DbEnv *self,u_int32_t lg_max){
return self->set_lg_max(self, lg_max);
}
-db_ret_t DbEnv_set_lg_regionmax(struct DbEnv *self,u_int32_t lg_regionmax){
+SWIGINTERN db_ret_t DbEnv_set_lg_regionmax(struct DbEnv *self,u_int32_t lg_regionmax){
return self->set_lg_regionmax(self, lg_regionmax);
}
-jlong DbEnv_get_cachesize(struct DbEnv *self){
+SWIGINTERN jlong DbEnv_get_cachesize(struct DbEnv *self){
u_int32_t gbytes, bytes;
errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
return (jlong)gbytes * GIGABYTE + bytes;
}
-int DbEnv_get_cachesize_ncache(struct DbEnv *self){
+SWIGINTERN int DbEnv_get_cachesize_ncache(struct DbEnv *self){
int ret;
errno = self->get_cachesize(self, NULL, NULL, &ret);
return ret;
}
-size_t DbEnv_get_mp_mmapsize(struct DbEnv *self){
+SWIGINTERN int DbEnv_get_mp_max_openfd(struct DbEnv *self){
+ int ret;
+ errno = self->get_mp_max_openfd(self, &ret);
+ return ret;
+ }
+SWIGINTERN int DbEnv_get_mp_max_write(struct DbEnv *self){
+ int ret, junk;
+ errno = self->get_mp_max_write(self, &ret, &junk);
+ return ret;
+ }
+SWIGINTERN int DbEnv_get_mp_max_write_sleep(struct DbEnv *self){
+ int ret, junk;
+ errno = self->get_mp_max_write(self, &junk, &ret);
+ return ret;
+ }
+SWIGINTERN size_t DbEnv_get_mp_mmapsize(struct DbEnv *self){
size_t ret;
errno = self->get_mp_mmapsize(self, &ret);
return ret;
}
-DB_MPOOL_STAT *DbEnv_memp_stat(struct DbEnv *self,u_int32_t flags){
- DB_MPOOL_STAT *mp_stat;
+SWIGINTERN DB_MPOOL_STAT *DbEnv_memp_stat(struct DbEnv *self,u_int32_t flags){
+ DB_MPOOL_STAT *mp_stat = NULL;
errno = self->memp_stat(self, &mp_stat, NULL, flags);
- return (errno == 0) ? mp_stat : NULL;
+ return mp_stat;
}
-DB_MPOOL_FSTAT **DbEnv_memp_fstat(struct DbEnv *self,u_int32_t flags){
- DB_MPOOL_FSTAT **mp_fstat;
+SWIGINTERN DB_MPOOL_FSTAT **DbEnv_memp_fstat(struct DbEnv *self,u_int32_t flags){
+ DB_MPOOL_FSTAT **mp_fstat = NULL;
errno = self->memp_stat(self, NULL, &mp_fstat, flags);
- return (errno == 0) ? mp_fstat : NULL;
+ return mp_fstat;
}
-int DbEnv_memp_trickle(struct DbEnv *self,int percent){
+SWIGINTERN int DbEnv_memp_trickle(struct DbEnv *self,int percent){
int ret;
errno = self->memp_trickle(self, percent, &ret);
return ret;
}
-u_int32_t DbEnv_get_tx_max(struct DbEnv *self){
+SWIGINTERN u_int32_t DbEnv_mutex_get_align(struct DbEnv *self){
+ u_int32_t ret;
+ errno = self->mutex_get_align(self, &ret);
+ return ret;
+ }
+SWIGINTERN u_int32_t DbEnv_mutex_get_increment(struct DbEnv *self){
+ u_int32_t ret;
+ errno = self->mutex_get_increment(self, &ret);
+ return ret;
+ }
+SWIGINTERN u_int32_t DbEnv_mutex_get_max(struct DbEnv *self){
+ u_int32_t ret;
+ errno = self->mutex_get_max(self, &ret);
+ return ret;
+ }
+SWIGINTERN u_int32_t DbEnv_mutex_get_tas_spins(struct DbEnv *self){
+ u_int32_t ret;
+ errno = self->mutex_get_tas_spins(self, &ret);
+ return ret;
+ }
+SWIGINTERN db_ret_t DbEnv_mutex_set_align(struct DbEnv *self,u_int32_t align){
+ return self->mutex_set_align(self, align);
+ }
+SWIGINTERN db_ret_t DbEnv_mutex_set_increment(struct DbEnv *self,u_int32_t increment){
+ return self->mutex_set_increment(self, increment);
+ }
+SWIGINTERN db_ret_t DbEnv_mutex_set_max(struct DbEnv *self,u_int32_t mutex_max){
+ return self->mutex_set_increment(self, mutex_max);
+ }
+SWIGINTERN db_ret_t DbEnv_mutex_set_tas_spins(struct DbEnv *self,u_int32_t tas_spins){
+ return self->mutex_set_tas_spins(self, tas_spins);
+ }
+SWIGINTERN DB_MUTEX_STAT *DbEnv_mutex_stat(struct DbEnv *self,u_int32_t flags){
+ DB_MUTEX_STAT *statp = NULL;
+ errno = self->mutex_stat(self, &statp, flags);
+ return statp;
+ }
+SWIGINTERN u_int32_t DbEnv_get_tx_max(struct DbEnv *self){
u_int32_t ret;
errno = self->get_tx_max(self, &ret);
return ret;
}
-time_t DbEnv_get_tx_timestamp(struct DbEnv *self){
+SWIGINTERN time_t DbEnv_get_tx_timestamp(struct DbEnv *self){
time_t ret;
errno = self->get_tx_timestamp(self, &ret);
return ret;
}
-db_timeout_t DbEnv_get_timeout(struct DbEnv *self,u_int32_t flag){
+SWIGINTERN db_timeout_t DbEnv_get_timeout(struct DbEnv *self,u_int32_t flag){
db_timeout_t ret;
errno = self->get_timeout(self, &ret, flag);
return ret;
}
-DB_TXN *DbEnv_txn_begin(struct DbEnv *self,DB_TXN *parent,u_int32_t flags){
- DB_TXN *tid;
+SWIGINTERN DB_TXN *DbEnv_txn_begin(struct DbEnv *self,DB_TXN *parent,u_int32_t flags){
+ DB_TXN *tid = NULL;
errno = self->txn_begin(self, parent, &tid, flags);
- return (errno == 0) ? tid : NULL;
+ return tid;
}
-db_ret_t DbEnv_txn_checkpoint(struct DbEnv *self,u_int32_t kbyte,u_int32_t min,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_txn_checkpoint(struct DbEnv *self,u_int32_t kbyte,u_int32_t min,u_int32_t flags){
return self->txn_checkpoint(self, kbyte, min, flags);
}
-DB_PREPLIST *DbEnv_txn_recover(struct DbEnv *self,int count,u_int32_t flags){
+SWIGINTERN DB_PREPLIST *DbEnv_txn_recover(struct DbEnv *self,int count,u_int32_t flags){
DB_PREPLIST *preplist;
long retcount;
@@ -2366,5963 +2886,6724 @@ DB_PREPLIST *DbEnv_txn_recover(struct DbEnv *self,int count,u_int32_t flags){
__os_free(self, preplist);
return NULL;
}
-
+
preplist[retcount].txn = NULL;
return preplist;
}
-DB_TXN_STAT *DbEnv_txn_stat(struct DbEnv *self,u_int32_t flags){
- DB_TXN_STAT *statp;
+SWIGINTERN DB_TXN_STAT *DbEnv_txn_stat(struct DbEnv *self,u_int32_t flags){
+ DB_TXN_STAT *statp = NULL;
errno = self->txn_stat(self, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
-jlong DbEnv_get_rep_limit(struct DbEnv *self){
+SWIGINTERN jlong DbEnv_rep_get_limit(struct DbEnv *self){
u_int32_t gbytes, bytes;
- errno = self->get_rep_limit(self, &gbytes, &bytes);
+ errno = self->rep_get_limit(self, &gbytes, &bytes);
return (jlong)gbytes * GIGABYTE + bytes;
}
-int DbEnv_rep_elect(struct DbEnv *self,int nsites,int nvotes,int priority,u_int32_t timeout,u_int32_t flags){
+SWIGINTERN int DbEnv_rep_elect(struct DbEnv *self,int nsites,int nvotes,u_int32_t flags){
int id;
- errno = self->rep_elect(self, nsites, nvotes, priority, timeout, &id, flags);
+ errno = self->rep_elect(self, nsites, nvotes, &id, flags);
return id;
}
-int DbEnv_rep_process_message(struct DbEnv *self,DBT *control,DBT *rec,int *envid,DB_LSN *ret_lsn){
- return self->rep_process_message(self, control, rec, envid, ret_lsn);
+SWIGINTERN int DbEnv_rep_process_message(struct DbEnv *self,DBT *control,DBT *rec,int *envid,DB_LSN *ret_lsn){
+ return self->rep_process_message(self, control, rec, envid,
+ ret_lsn);
+ }
+SWIGINTERN db_ret_t DbEnv_rep_flush(struct DbEnv *self){
+ return self->rep_flush(self);
+ }
+SWIGINTERN db_ret_t DbEnv_rep_set_config(struct DbEnv *self,u_int32_t which,int_bool onoff){
+ return self->rep_set_config(self, which, onoff);
}
-db_ret_t DbEnv_rep_start(struct DbEnv *self,DBT *cdata,u_int32_t flags){
+SWIGINTERN db_ret_t DbEnv_rep_start(struct DbEnv *self,DBT *cdata,u_int32_t flags){
return self->rep_start(self, cdata, flags);
}
-DB_REP_STAT *DbEnv_rep_stat(struct DbEnv *self,u_int32_t flags){
- DB_REP_STAT *statp;
+SWIGINTERN db_ret_t DbEnv_rep_sync(struct DbEnv *self,u_int32_t flags){
+ return self->rep_sync(self, flags);
+ }
+SWIGINTERN int_bool DbEnv_rep_get_config(struct DbEnv *self,u_int32_t which){
+ int ret;
+ errno = self->rep_get_config(self, which, &ret);
+ return ret;
+ }
+SWIGINTERN DB_REP_STAT *DbEnv_rep_stat(struct DbEnv *self,u_int32_t flags){
+ DB_REP_STAT *statp = NULL;
errno = self->rep_stat(self, &statp, flags);
- return (errno == 0) ? statp : NULL;
+ return statp;
}
-db_ret_t DbEnv_set_rep_limit(struct DbEnv *self,jlong bytes){
- return self->set_rep_limit(self,
+SWIGINTERN db_ret_t DbEnv_rep_set_limit(struct DbEnv *self,jlong bytes){
+ return self->rep_set_limit(self,
(u_int32_t)(bytes / GIGABYTE),
(u_int32_t)(bytes % GIGABYTE));
}
-db_ret_t DbEnv_set_rep_transport(struct DbEnv *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);
+SWIGINTERN db_ret_t DbEnv_set_rep_request(struct DbEnv *self,u_int32_t min,u_int32_t max){
+ return self->set_rep_request(self, min, max);
+ }
+SWIGINTERN db_ret_t DbEnv_rep_set_transport(struct DbEnv *self,int envid,int (*send)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t)){
+ return self->rep_set_transport(self, envid, send);
+ }
+SWIGINTERN int DbEnv_rep_get_nsites(struct DbEnv *self){
+ int ret;
+ errno = self->rep_get_nsites(self, &ret);
+ return ret;
+ }
+SWIGINTERN int DbEnv_rep_get_priority(struct DbEnv *self){
+ int ret;
+ errno = self->rep_get_priority(self, &ret);
+ return ret;
+ }
+SWIGINTERN u_int32_t DbEnv_rep_get_timeout(struct DbEnv *self,int which){
+ u_int32_t ret;
+ errno = self->rep_get_timeout(self, which, &ret);
+ return ret;
+ }
+SWIGINTERN db_ret_t DbEnv_rep_set_nsites(struct DbEnv *self,int number){
+ return self->rep_set_nsites(self, number);
}
-char const *DbEnv_strerror(int error){
+SWIGINTERN db_ret_t DbEnv_rep_set_priority(struct DbEnv *self,int priority){
+ return self->rep_set_priority(self, priority);
+ }
+SWIGINTERN db_ret_t DbEnv_rep_set_timeout(struct DbEnv *self,int which,db_timeout_t timeout){
+ return self->rep_set_timeout(self, which, timeout);
+ }
+SWIGINTERN int DbEnv_repmgr_add_remote_site(struct DbEnv *self,char const *host,u_int32_t port,u_int32_t flags){
+ int eid;
+ errno = self->repmgr_add_remote_site(self, host, port, &eid, flags);
+ return eid;
+ }
+SWIGINTERN db_ret_t DbEnv_repmgr_get_ack_policy(struct DbEnv *self){
+ int ret;
+ errno = self->repmgr_get_ack_policy(self, &ret);
+ return ret;
+ }
+SWIGINTERN db_ret_t DbEnv_repmgr_set_ack_policy(struct DbEnv *self,int policy){
+ return self->repmgr_set_ack_policy(self, policy);
+ }
+SWIGINTERN db_ret_t DbEnv_repmgr_set_local_site(struct DbEnv *self,char const *host,u_int32_t port,u_int32_t flags){
+ return self->repmgr_set_local_site(self, host, port, flags);
+ }
+SWIGINTERN struct __db_repmgr_sites DbEnv_repmgr_site_list(struct DbEnv *self){
+ struct __db_repmgr_sites sites;
+ errno = self->repmgr_site_list(self,
+ &sites.nsites, &sites.sites);
+ return sites;
+ }
+SWIGINTERN db_ret_t DbEnv_repmgr_start(struct DbEnv *self,int nthreads,u_int32_t flags){
+ return self->repmgr_start(self, nthreads, flags);
+ }
+SWIGINTERN char const *DbEnv_strerror(int error){
return db_strerror(error);
}
-int DbEnv_get_version_major(){
+SWIGINTERN int DbEnv_get_version_major(){
return DB_VERSION_MAJOR;
}
-int DbEnv_get_version_minor(){
+SWIGINTERN int DbEnv_get_version_minor(){
return DB_VERSION_MINOR;
}
-int DbEnv_get_version_patch(){
+SWIGINTERN int DbEnv_get_version_patch(){
return DB_VERSION_PATCH;
}
-char const *DbEnv_get_version_string(){
+SWIGINTERN char const *DbEnv_get_version_string(){
return DB_VERSION_STRING;
}
-void delete_DbLock(struct DbLock *self){
+SWIGINTERN void delete_DbLock(struct DbLock *self){
__os_free(NULL, self);
}
-db_ret_t DbLogc_close(struct DbLogc *self,u_int32_t flags){
+SWIGINTERN db_ret_t DbLogc_close(struct DbLogc *self,u_int32_t flags){
return self->close(self, flags);
}
-int DbLogc_get(struct DbLogc *self,DB_LSN *lsn,DBT *data,u_int32_t flags){
+SWIGINTERN int DbLogc_get(struct DbLogc *self,DB_LSN *lsn,DBT *data,u_int32_t flags){
return self->get(self, lsn, data, flags);
}
-DB_CACHE_PRIORITY DbMpoolFile_get_priority(struct DbMpoolFile *self){
+SWIGINTERN DB_CACHE_PRIORITY DbMpoolFile_get_priority(struct DbMpoolFile *self){
DB_CACHE_PRIORITY ret;
errno = self->get_priority(self, &ret);
return ret;
}
-db_ret_t DbMpoolFile_set_priority(struct DbMpoolFile *self,DB_CACHE_PRIORITY priority){
+SWIGINTERN db_ret_t DbMpoolFile_set_priority(struct DbMpoolFile *self,DB_CACHE_PRIORITY priority){
return self->set_priority(self, priority);
}
-u_int32_t DbMpoolFile_get_flags(struct DbMpoolFile *self){
+SWIGINTERN u_int32_t DbMpoolFile_get_flags(struct DbMpoolFile *self){
u_int32_t ret;
errno = self->get_flags(self, &ret);
return ret;
}
-db_ret_t DbMpoolFile_set_flags(struct DbMpoolFile *self,u_int32_t flags,int_bool onoff){
+SWIGINTERN db_ret_t DbMpoolFile_set_flags(struct DbMpoolFile *self,u_int32_t flags,int_bool onoff){
return self->set_flags(self, flags, onoff);
}
-jlong DbMpoolFile_get_maxsize(struct DbMpoolFile *self){
+SWIGINTERN jlong DbMpoolFile_get_maxsize(struct DbMpoolFile *self){
u_int32_t gbytes, bytes;
errno = self->get_maxsize(self, &gbytes, &bytes);
return (jlong)gbytes * GIGABYTE + bytes;
}
-db_ret_t DbMpoolFile_set_maxsize(struct DbMpoolFile *self,jlong bytes){
+SWIGINTERN db_ret_t DbMpoolFile_set_maxsize(struct DbMpoolFile *self,jlong bytes){
return self->set_maxsize(self,
(u_int32_t)(bytes / GIGABYTE),
(u_int32_t)(bytes % GIGABYTE));
}
-struct DbSequence *new_DbSequence(DB *db,u_int32_t flags){
+SWIGINTERN struct DbSequence *new_DbSequence(DB *db,u_int32_t flags){
DB_SEQUENCE *self = NULL;
errno = db_sequence_create(&self, db, flags);
return self;
}
-db_ret_t DbSequence_close(struct DbSequence *self,u_int32_t flags){
+SWIGINTERN db_ret_t DbSequence_close(struct DbSequence *self,u_int32_t flags){
return self->close(self, flags);
}
-db_seq_t DbSequence_get(struct DbSequence *self,DB_TXN *txnid,int32_t delta,u_int32_t flags){
+SWIGINTERN db_seq_t DbSequence_get(struct DbSequence *self,DB_TXN *txnid,int32_t delta,u_int32_t flags){
db_seq_t ret = 0;
errno = self->get(self, txnid, delta, &ret, flags);
return ret;
}
-int32_t DbSequence_get_cachesize(struct DbSequence *self){
+SWIGINTERN int32_t DbSequence_get_cachesize(struct DbSequence *self){
int32_t ret = 0;
errno = self->get_cachesize(self, &ret);
return ret;
}
-DB *DbSequence_get_db(struct DbSequence *self){
+SWIGINTERN DB *DbSequence_get_db(struct DbSequence *self){
DB *ret = NULL;
errno = self->get_db(self, &ret);
return ret;
}
-u_int32_t DbSequence_get_flags(struct DbSequence *self){
+SWIGINTERN u_int32_t DbSequence_get_flags(struct DbSequence *self){
u_int32_t ret = 0;
errno = self->get_flags(self, &ret);
return ret;
}
-db_ret_t DbSequence_get_key(struct DbSequence *self,DBT *key){
+SWIGINTERN db_ret_t DbSequence_get_key(struct DbSequence *self,DBT *key){
return self->get_key(self, key);
}
-db_seq_t DbSequence_get_range_min(struct DbSequence *self){
+SWIGINTERN db_seq_t DbSequence_get_range_min(struct DbSequence *self){
db_seq_t ret = 0;
errno = self->get_range(self, &ret, NULL);
return ret;
}
-db_seq_t DbSequence_get_range_max(struct DbSequence *self){
+SWIGINTERN db_seq_t DbSequence_get_range_max(struct DbSequence *self){
db_seq_t ret = 0;
errno = self->get_range(self, NULL, &ret);
return ret;
}
-db_ret_t DbSequence_initial_value(struct DbSequence *self,db_seq_t val){
+SWIGINTERN db_ret_t DbSequence_initial_value(struct DbSequence *self,db_seq_t val){
return self->initial_value(self, val);
}
-db_ret_t DbSequence_open(struct DbSequence *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
+SWIGINTERN db_ret_t DbSequence_open(struct DbSequence *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
return self->open(self, txnid, key, flags);
}
-db_ret_t DbSequence_remove(struct DbSequence *self,DB_TXN *txnid,u_int32_t flags){
+SWIGINTERN db_ret_t DbSequence_remove(struct DbSequence *self,DB_TXN *txnid,u_int32_t flags){
return self->remove(self, txnid, flags);
}
-db_ret_t DbSequence_set_cachesize(struct DbSequence *self,int32_t size){
+SWIGINTERN db_ret_t DbSequence_set_cachesize(struct DbSequence *self,int32_t size){
return self->set_cachesize(self, size);
}
-db_ret_t DbSequence_set_flags(struct DbSequence *self,u_int32_t flags){
+SWIGINTERN db_ret_t DbSequence_set_flags(struct DbSequence *self,u_int32_t flags){
return self->set_flags(self, flags);
}
-db_ret_t DbSequence_set_range(struct DbSequence *self,db_seq_t min,db_seq_t max){
+SWIGINTERN db_ret_t DbSequence_set_range(struct DbSequence *self,db_seq_t min,db_seq_t max){
return self->set_range(self, min, max);
}
-DB_SEQUENCE_STAT *DbSequence_stat(struct DbSequence *self,u_int32_t flags){
+SWIGINTERN DB_SEQUENCE_STAT *DbSequence_stat(struct DbSequence *self,u_int32_t flags){
DB_SEQUENCE_STAT *ret = NULL;
errno = self->stat(self, &ret, flags);
return ret;
}
-db_ret_t DbTxn_abort(struct DbTxn *self){
+SWIGINTERN db_ret_t DbTxn_abort(struct DbTxn *self){
return self->abort(self);
}
-db_ret_t DbTxn_commit(struct DbTxn *self,u_int32_t flags){
+SWIGINTERN db_ret_t DbTxn_commit(struct DbTxn *self,u_int32_t flags){
return self->commit(self, flags);
}
-db_ret_t DbTxn_discard(struct DbTxn *self,u_int32_t flags){
+SWIGINTERN db_ret_t DbTxn_discard(struct DbTxn *self,u_int32_t flags){
return self->discard(self, flags);
}
-u_int32_t DbTxn_id(struct DbTxn *self){
+SWIGINTERN char const *DbTxn_get_name(struct DbTxn *self){
+ const char *name = NULL;
+ errno = self->get_name(self, &name);
+ return name;
+ }
+SWIGINTERN u_int32_t DbTxn_id(struct DbTxn *self){
return self->id(self);
}
-db_ret_t DbTxn_prepare(struct DbTxn *self,u_int8_t *gid){
+SWIGINTERN db_ret_t DbTxn_prepare(struct DbTxn *self,u_int8_t *gid){
return self->prepare(self, gid);
}
-db_ret_t DbTxn_set_timeout(struct DbTxn *self,db_timeout_t timeout,u_int32_t flags){
+SWIGINTERN db_ret_t DbTxn_set_timeout(struct DbTxn *self,db_timeout_t timeout,u_int32_t flags){
return self->set_timeout(self, timeout, flags);
}
+SWIGINTERN db_ret_t DbTxn_set_name(struct DbTxn *self,char const *name){
+ return self->set_name(self, name);
+ }
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_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;
+ jlong jresult = 0 ;
+ DB_ENV *arg1 = (DB_ENV *) 0 ;
+ u_int32_t arg2 ;
+ struct Db *result = 0 ;
+
+ (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_internal_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);
- }
-
+ 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 void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1compact(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jobject jarg4, jobject jarg5, jint jarg6, jobject jarg7) {
+ struct Db *arg1 = (struct Db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ DBT *arg4 = (DBT *) 0 ;
+ DB_COMPACT *arg5 = (DB_COMPACT *) 0 ;
+ u_int32_t arg6 ;
+ DBT *arg7 = (DBT *) 0 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt3 ;
+ DBT_LOCKED ldbt4 ;
+ DB_COMPACT compact5 ;
+ DBT_LOCKED ldbt7 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct Db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 1) != 0) {
+ return ; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 1) != 0) {
+ return ; /* An exception will be pending. */
+ }
+
+ memset(&compact5, 0, sizeof (DB_COMPACT));
+ arg5 = &compact5;
+ arg5->compact_fillpercent = (*jenv)->GetIntField(jenv, jarg5,
+ compact_compact_fillpercent_fid);
+ arg5->compact_timeout = (*jenv)->GetIntField(jenv, jarg5,
+ compact_compact_timeout_fid);
+ arg5->compact_pages = (*jenv)->GetIntField(jenv, jarg5,
+ compact_compact_pages_fid);
+
+ arg6 = (u_int32_t)jarg6;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt7, &arg7, jarg7, 1) != 0) {
+ return ; /* An exception will be pending. */
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)Db_compact(arg1,arg2,arg3,arg4,arg5,arg6,arg7);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+ }
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+ __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
+ __dbj_fill_compact(jenv, jarg5, arg5);
+ __dbj_dbt_release(jenv, jarg7, arg7, &ldbt7);
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_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;
+ 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_internal_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;
+ jlong jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ DBC *result = 0 ;
+
+ (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_internal_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, &arg3, jarg3, 0) != 0) {
- return 0;
- }
- 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;
+ 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, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ 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_internal_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(arg1,arg2,(char const *)arg3);
-
- {
- if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ int arg2 ;
+ char *arg3 = (char *) 0 ;
+
+ (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(arg1,arg2,(char const *)arg3);
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_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);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ (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 jboolean JNICALL Java_com_sleepycat_db_internal_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;
- }
- result = (int_bool)Db_get_transactional(arg1);
-
- jresult = (result) ? JNI_TRUE : JNI_FALSE;
- return jresult;
+ 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;
+ }
+ result = (int_bool)Db_get_transactional(arg1);
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get(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, &arg3, jarg3, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
- return 0;
- }
- arg5 = (u_int32_t)jarg5;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- result = (int)Db_get(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;
+ 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, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (int)Db_get(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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ jstring jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *result = 0 ;
+
+ (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_internal_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;
+ jstring jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *result = 0 ;
+
+ (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_internal_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 jstring JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1errpfx(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_errpfx(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
- }
-
- {
- if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
- }
- return jresult;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ jlong jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ DB_MPOOLFILE *result = 0 ;
+
+ (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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ jstring jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *result = 0 ;
+
+ (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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ jlong jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ DBC **arg2 = (DBC **) 0 ;
+ u_int32_t arg3 ;
+ DBC *result = 0 ;
+
+ (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 **)(void *)&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_internal_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, &arg3, jarg3, 0) != 0) {
- return ;
- }
- {
- 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);
+ 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, &arg3, jarg3, 0) != 0) {
+ return ; /* An exception will be pending. */
+ }
+ {
+ 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_internal_db_1javaJNI_Db_1open(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);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ 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_internal_db_1javaJNI_Db_1pget(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, &arg3, jarg3, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt5, &arg5, jarg5, 0) != 0) {
- return 0;
- }
- arg6 = (u_int32_t)jarg6;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- result = (int)Db_pget(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;
+ 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, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt5, &arg5, jarg5, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ arg6 = (u_int32_t)jarg6;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (int)Db_pget(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_internal_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, &arg3, jarg3, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
- return 0;
- }
- 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;
+ 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, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ 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_internal_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);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ 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_internal_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);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ 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_internal_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);
- }
-
+ 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_internal_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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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_internal_db_1javaJNI_Db_1set_1errpfx(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_set_errpfx(arg1,(char const *)arg2);
-
- {
- if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+ 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_internal_db_1javaJNI_Db_1set_1feedback(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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
-
+ 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_internal_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);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+ 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_internal_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);
- }
-
+ 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_internal_db_1javaJNI_Db_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
- jobject jresult = 0 ;
- struct Db *arg1 = (struct Db *) 0 ;
- DB_TXN *arg2 = (DB_TXN *) 0 ;
- u_int32_t arg3 ;
- void *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 = (void *)Db_stat(arg1,arg2,arg3);
-
- 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, bt_stat_class,
- bt_stat_construct);
- if (jresult != NULL)
- __dbj_fill_bt_stat(jenv, jresult,
- (DB_BTREE_STAT *)result);
- break;
-
- /* Hash stat structure */
- case DB_HASH:
- jresult = (*jenv)->NewObject(jenv, h_stat_class,
- h_stat_construct);
- if (jresult != NULL)
- __dbj_fill_h_stat(jenv, jresult,
- (DB_HASH_STAT *)result);
- break;
-
- case DB_QUEUE:
- jresult = (*jenv)->NewObject(jenv, qam_stat_class,
- qam_stat_construct);
- if (jresult != NULL)
- __dbj_fill_qam_stat(jenv, 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;
+ jobject jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ void *result = 0 ;
+
+ (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 = (void *)Db_stat(arg1,arg2,arg3);
+ 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, bt_stat_class,
+ bt_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_bt_stat(jenv, jresult,
+ (DB_BTREE_STAT *)result);
+ break;
+
+ /* Hash stat structure */
+ case DB_HASH:
+ jresult = (*jenv)->NewObject(jenv, h_stat_class,
+ h_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_h_stat(jenv, jresult,
+ (DB_HASH_STAT *)result);
+ break;
+
+ case DB_QUEUE:
+ jresult = (*jenv)->NewObject(jenv, qam_stat_class,
+ qam_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_qam_stat(jenv, 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_internal_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);
- }
-
+ 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_internal_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;
+ 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_internal_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);
- }
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+ 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 jboolean JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1verify0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jstring jarg3, jobject jarg4, jint jarg5) {
- jboolean jresult = 0 ;
- struct Db *arg1 = (struct Db *) 0 ;
- char *arg2 ;
- char *arg3 ;
- struct __db_out_stream arg4 ;
- u_int32_t arg5 ;
- int_bool 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 0;
- }
- }
- {
- arg3 = 0;
- if (jarg3) {
- arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
- if (!arg3) return 0;
- }
- }
- {
- 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 0;
- }
-
- errno = 0;
- result = (int_bool)Db_verify(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (result) ? JNI_TRUE : JNI_FALSE;
- {
- if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
- }
- {
- if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
- }
- return jresult;
+ jboolean jresult = 0 ;
+ struct Db *arg1 = (struct Db *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ struct __db_out_stream arg4 ;
+ u_int32_t arg5 ;
+ int_bool 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 0;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return 0;
+ }
+ {
+ 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 0;
+ }
+
+ errno = 0;
+ result = (int_bool)Db_verify(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_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);
- }
-
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ jlong jresult = 0 ;
+ struct Dbc *arg1 = (struct Dbc *) 0 ;
+ u_int32_t arg2 ;
+ DBC *result = 0 ;
+
+ (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_internal_db_1javaJNI_Dbc_1get(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, &arg2, jarg2, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return 0;
- }
- arg4 = (u_int32_t)jarg4;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- result = (int)Dbc_get(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;
+ 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, &arg2, jarg2, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (int)Dbc_get(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_internal_db_1javaJNI_Dbc_1pget(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, &arg2, jarg2, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
- return 0;
- }
- arg5 = (u_int32_t)jarg5;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- result = (int)Dbc_pget(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;
+ 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, &arg2, jarg2, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (int)Dbc_pget(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_internal_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, &arg2, jarg2, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return 0;
- }
- 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;
+ 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, &arg2, jarg2, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ 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_internal_db_1javaJNI_new_1DbEnv(JNIEnv *jenv, jclass jcls, jint jarg1) {
- jlong jresult = 0 ;
- u_int32_t arg1 ;
- struct DbEnv *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = (u_int32_t)jarg1;
-
- errno = 0;
- result = (struct DbEnv *)new_DbEnv(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- *(struct DbEnv **)&jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ u_int32_t arg1 ;
+ struct DbEnv *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = (u_int32_t)jarg1;
+
+ errno = 0;
+ result = (struct DbEnv *)new_DbEnv(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ *(struct DbEnv **)&jresult = result;
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_close(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_close(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1dbremove(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jstring jarg4, jint jarg5) {
- struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1dbrename(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jstring jarg4, jstring jarg5, jint jarg6) {
- struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ u_int32_t arg6 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1err(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jstring jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- int arg2 ;
- char *arg3 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 ;
- }
- DbEnv_err(arg1,arg2,(char const *)arg3);
-
- {
- if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ char *arg3 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 ;
+ }
+ DbEnv_err(arg1,arg2,(char const *)arg3);
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1errx(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 ;
- }
- DbEnv_errx(arg1,(char const *)arg2);
-
- {
- if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 ;
+ }
+ DbEnv_errx(arg1,(char const *)arg2);
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1cdsgroup_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_TXN *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+ result = (DB_TXN *)DbEnv_cdsgroup_begin(arg1);
+ *(DB_TXN **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1fileid_1reset(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_fileid_reset(arg1,(char const *)arg2,arg3);
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
}
JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1data_1dirs(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jobjectArray jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char **result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (char **)DbEnv_get_data_dirs(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- {
- if(result != NULL) {
- /*@../libdb_java/java_typemaps.i,291,STRING_ARRAY_OUT@*/ int i, len;
-
- len = 0;
- while (result[len] != NULL)
- len++;
- if ((jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, string_class,
+ jobjectArray jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char **result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (char **)DbEnv_get_data_dirs(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ {
+ if (result != NULL) {
+ /*@SWIG: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 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);
+ }
+ /*@SWIG@*/
}
- return jresult;
+ }
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1encrypt_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_encrypt_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_internal_db_1javaJNI_DbEnv_1get_1errpfx(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jstring jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (char *)DbEnv_get_errpfx(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- {
- if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
- }
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_flags(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1home(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jstring jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (char *)DbEnv_get_home(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- {
- if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
- }
- return jresult;
+ jstring jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (char *)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1open_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_open_flags(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1shm_1key(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- long result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (long)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1tas_1spins(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_tas_spins(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ long result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (long)DbEnv_get_shm_key(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ jresult = (jlong)result;
+ return jresult;
}
JNIEXPORT jstring JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tmp_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jstring jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (char *)DbEnv_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;
+ jstring jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (char *)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1verbose(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jboolean jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- int_bool result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_get_verbose(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (result) ? JNI_TRUE : JNI_FALSE;
- return jresult;
+ jboolean jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ int_bool result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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 jboolean JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1is_1bigendian(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jboolean jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int_bool result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+ result = (int_bool)DbEnv_is_bigendian(arg1);
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lsn_1reset(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_lsn_reset(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_internal_db_1javaJNI_DbEnv_1open(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3, jint jarg4) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
- u_int32_t arg3 ;
- int arg4 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ int arg4 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1remove0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
- u_int32_t arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- jlong arg2 ;
- int arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = jarg2;
- arg3 = (int)jarg3;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_cachesize(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ jlong arg2 ;
+ int arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = jarg2;
+ arg3 = (int)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_cachesize(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1data_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1intermediate_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_intermediate_dir(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1encrypt(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
- u_int32_t arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1errcall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- void (*arg2)(DB_ENV const *,char const *,char const *) = (void (*)(DB_ENV const *,char const *,char const *)) 0 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- arg2 = (jarg2 == NULL) ? NULL : __dbj_error;
-
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
- DbEnv_set_errcall(arg1,arg2);
-
-}
-
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1errpfx(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 ;
- }
- DbEnv_set_errpfx(arg1,(char const *)arg2);
-
- {
- if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ void (*arg2)(DB_ENV const *,char const *,char const *) = (void (*)(DB_ENV const *,char const *,char const *)) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_error;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+ DbEnv_set_errcall(arg1,arg2);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- int_bool arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_flags(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_set_flags(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1feedback(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- void (*arg2)(DB_ENV *,int,int) = (void (*)(DB_ENV *,int,int)) 0 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_feedback(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ void (*arg2)(DB_ENV *,int,int) = (void (*)(DB_ENV *,int,int)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_set_feedback(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1mp_1max_1openfd(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_mp_max_openfd(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1mp_1max_1write(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ int arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+ arg3 = (int)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_mp_max_write(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1mp_1mmapsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- size_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (size_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_mp_mmapsize(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ size_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (size_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_mp_mmapsize(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1msgcall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- void (*arg2)(DB_ENV const *,char const *) = (void (*)(DB_ENV const *,char const *)) 0 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- arg2 = (jarg2 == NULL) ? NULL : __dbj_message;
-
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
- DbEnv_set_msgcall(arg1,arg2);
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ void (*arg2)(DB_ENV const *,char const *) = (void (*)(DB_ENV const *,char const *)) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_message;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+ DbEnv_set_msgcall(arg1,arg2);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1paniccall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- void (*arg2)(DB_ENV *,int) = (void (*)(DB_ENV *,int)) 0 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_paniccall(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
-}
-
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rpc_1server(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jstring jarg3, jlong jarg4, jlong jarg5, jint jarg6) {
- struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ void (*arg2)(DB_ENV *,int) = (void (*)(DB_ENV *,int)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_set_paniccall(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rpc_1server(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jlong jarg3, jlong jarg4, jint jarg5) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ long arg3 ;
+ long arg4 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ arg3 = (long)jarg3;
+ arg4 = (long)jarg4;
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_rpc_server(arg1,arg2,arg3,arg4,arg5);
+ 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_internal_db_1javaJNI_DbEnv_1set_1shm_1key(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- long arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (long)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_shm_key(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
-}
-
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tas_1spins(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_tas_spins(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ long arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (long)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_shm_key(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- db_timeout_t arg2 ;
- u_int32_t arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_timeout(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ db_timeout_t arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_set_timeout(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tmp_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1tx_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_tx_max(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_tx_max(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1app_1dispatch(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_set_app_dispatch(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_set_app_dispatch(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1event_1notify(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ void (*arg2)(DB_ENV *,u_int32_t,void *) = (void (*)(DB_ENV *,u_int32_t,void *)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_event_notify;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_event_notify(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1tx_1timestamp0(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- time_t *arg2 = (time_t *) 0 ;
- db_ret_t result;
- time_t time2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_tx_timestamp(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ time_t *arg2 = (time_t *) 0 ;
+ db_ret_t result;
+ time_t time2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_set_tx_timestamp(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1verbose(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- int_bool arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_verbose(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_set_verbose(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1lk_1conflicts(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jobjectArray jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- struct __db_lk_conflicts result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = DbEnv_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;
+ jobjectArray jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ struct __db_lk_conflicts result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lk_1detect(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lk_detect(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lk_1max_1locks(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lk_max_locks(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lk_1max_1lockers(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lk_max_lockers(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lk_1max_1objects(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lk_max_objects(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1lock_1detect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- u_int32_t arg3 ;
- int result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_lock_detect(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1lock_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jobject jarg4, jint jarg5) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
- arg3 = (u_int32_t)jarg3;
-
- if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
- return 0;
- }
- 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 *)DbEnv_lock_get(arg1,arg2,arg3,(DBT const *)arg4,arg5);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- *(DB_LOCK **)&jresult = result;
- __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ DBT *arg4 = (DBT *) 0 ;
+ db_lockmode_t arg5 ;
+ DB_LOCK *result = 0 ;
+ DBT_LOCKED ldbt4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, &arg4, jarg4, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ 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 *)DbEnv_lock_get(arg1,arg2,arg3,(struct Dbt const *)arg4,arg5);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ *(DB_LOCK **)&jresult = result;
+ __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1id(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_lock_id(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1lock_1id_1free(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_lock_id_free(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_lock_id_free(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1put(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- DB_LOCK *arg2 = (DB_LOCK *) 0 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = *(DB_LOCK **)&jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_lock_put(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_LOCK *arg2 = (DB_LOCK *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = *(DB_LOCK **)&jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_lock_put(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobject jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_LOCK_STAT *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
- __os_ufree(NULL, result);
-
- return jresult;
+ jobject jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_LOCK_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1conflicts(JNIEnv *jenv, jclass jcls, jlong jarg1, jobjectArray jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- struct __db_lk_conflicts arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_set_lk_conflicts(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
-
- __os_free(NULL, (&arg2)->lk_conflicts);
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ struct __db_lk_conflicts arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1lk_1detect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lk_detect(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_lk_detect(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1max_1lockers(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lk_max_lockers(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1lk_1max_1locks(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lk_max_locks(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1lk_1max_1objects(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lk_max_objects(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lg_1bsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lg_bsize(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lg_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jstring jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (char *)DbEnv_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;
+ jstring jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (char *)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lg_1filemode(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_get_lg_filemode(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_internal_db_1javaJNI_DbEnv_1get_1lg_1max(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lg_max(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1lg_1regionmax(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_lg_regionmax(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1log_1archive(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobjectArray jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- char **result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 **)DbEnv_log_archive(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- {
- if(result != NULL) {
- /*@../libdb_java/java_typemaps.i,291,STRING_ARRAY_OUT@*/ int i, len;
-
- len = 0;
- while (result[len] != NULL)
- len++;
- if ((jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, string_class,
+ jobjectArray jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ char **result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 **)DbEnv_log_archive(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ {
+ if (result != NULL) {
+ /*@SWIG: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 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);
+ }
+ /*@SWIG@*/
+ __os_ufree(NULL, result);
}
- return jresult;
+ }
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1compare(JNIEnv *jenv, jclass jcls, jobject jarg1, jobject jarg2) {
- jint jresult = 0 ;
- DB_LSN *arg1 = (DB_LSN *) 0 ;
- DB_LSN *arg2 = (DB_LSN *) 0 ;
- int result;
- DB_LSN lsn1 ;
- DB_LSN lsn2 ;
-
- (void)jenv;
- (void)jcls;
-
- /* XXX: TODO */
+ jint jresult = 0 ;
+ DB_LSN *arg1 = (DB_LSN *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ int result;
+ DB_LSN lsn1 ;
+ DB_LSN lsn2 ;
+
+ (void)jenv;
+ (void)jcls;
+
+ if (jarg1 == NULL) {
+ arg1 = NULL;
+ } else {
arg1 = &lsn1;
-
-
- /* XXX: TODO */
+ arg1->file = (*jenv)->GetIntField(jenv, jarg1, dblsn_file_fid);
+ arg1->offset = (*jenv)->GetIntField(jenv, jarg1,
+ dblsn_offset_fid);
+ }
+
+
+ if (jarg2 == NULL) {
+ arg2 = NULL;
+ } else {
arg2 = &lsn2;
-
-
- if (jarg1 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return 0;
- }
-
-
- if (jarg2 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return 0;
- }
-
- result = (int)DbEnv_log_compare((DB_LSN const *)arg1,(DB_LSN const *)arg2);
-
- jresult = (jint)result;
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg1, arg1, &lsn1); */
-
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg2, arg2, &lsn2); */
-
- return jresult;
+ arg2->file = (*jenv)->GetIntField(jenv, jarg2, dblsn_file_fid);
+ arg2->offset = (*jenv)->GetIntField(jenv, jarg2,
+ dblsn_offset_fid);
+ }
+
+
+ if (arg1 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
+ return 0;
+ }
+
+
+ if (arg2 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
+ return 0;
+ }
+
+ result = (int)DbEnv_log_compare((struct DbLsn const *)arg1,(struct DbLsn const *)arg2);
+ jresult = (jint)result;
+
+ if (jarg1 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg1, dblsn_file_fid, arg1->file);
+ (*jenv)->SetIntField(jenv, jarg1,
+ dblsn_offset_fid, arg1->offset);
+ }
+
+
+ if (jarg2 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg2, dblsn_file_fid, arg2->file);
+ (*jenv)->SetIntField(jenv, jarg2,
+ dblsn_offset_fid, arg2->offset);
+ }
+
+ return jresult;
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1cursor(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_LOGC *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_log_cursor(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- *(DB_LOGC **)&jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_LOGC *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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_internal_db_1javaJNI_DbEnv_1log_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- jstring jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- DB_LSN *arg2 = (DB_LSN *) 0 ;
- char *result;
- DB_LSN lsn2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- /* XXX: TODO */
+ jstring jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ char *result = 0 ;
+ DB_LSN lsn2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg2 == NULL) {
+ arg2 = NULL;
+ } else {
arg2 = &lsn2;
-
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- if (jarg2 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return 0;
- }
-
-
- errno = 0;
- result = (char *)DbEnv_log_file(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- {
- if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
- }
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg2, arg2, &lsn2); */
-
- return jresult;
+ arg2->file = (*jenv)->GetIntField(jenv, jarg2, dblsn_file_fid);
+ arg2->offset = (*jenv)->GetIntField(jenv, jarg2,
+ dblsn_offset_fid);
+ }
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ if (arg2 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)DbEnv_log_file(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+
+ if (jarg2 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg2, dblsn_file_fid, arg2->file);
+ (*jenv)->SetIntField(jenv, jarg2,
+ dblsn_offset_fid, arg2->offset);
+ }
+
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1flush(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- DB_LSN *arg2 = (DB_LSN *) 0 ;
- db_ret_t result;
- DB_LSN lsn2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- /* XXX: TODO */
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ db_ret_t result;
+ DB_LSN lsn2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg2 == NULL) {
+ arg2 = NULL;
+ } else {
arg2 = &lsn2;
-
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- if (jarg2 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return ;
- }
-
-
- result = (db_ret_t)DbEnv_log_flush(arg1,(DB_LSN const *)arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg2, arg2, &lsn2); */
-
+ arg2->file = (*jenv)->GetIntField(jenv, jarg2, dblsn_file_fid);
+ arg2->offset = (*jenv)->GetIntField(jenv, jarg2,
+ dblsn_offset_fid);
+ }
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)DbEnv_log_flush(arg1,(struct DbLsn const *)arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+
+ if (jarg2 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg2, dblsn_file_fid, arg2->file);
+ (*jenv)->SetIntField(jenv, jarg2,
+ dblsn_offset_fid, arg2->offset);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1put(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jint jarg4) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- DB_LSN *arg2 = (DB_LSN *) 0 ;
- DBT *arg3 = (DBT *) 0 ;
- u_int32_t arg4 ;
- db_ret_t result;
- DB_LSN lsn2 ;
- DBT_LOCKED ldbt3 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- /* XXX: TODO */
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+ DB_LSN lsn2 ;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg2 == NULL) {
+ arg2 = NULL;
+ } else {
arg2 = &lsn2;
-
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return ;
- }
- arg4 = (u_int32_t)jarg4;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- if (jarg2 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return ;
- }
-
-
- result = (db_ret_t)DbEnv_log_put(arg1,arg2,(DBT const *)arg3,arg4);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg2, arg2, &lsn2); */
-
- __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+ arg2->file = (*jenv)->GetIntField(jenv, jarg2, dblsn_file_fid);
+ arg2->offset = (*jenv)->GetIntField(jenv, jarg2,
+ dblsn_offset_fid);
+ }
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return ; /* An exception will be pending. */
+ }
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ if (arg2 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)DbEnv_log_put(arg1,arg2,(struct Dbt const *)arg3,arg4);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+
+ if (jarg2 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg2, dblsn_file_fid, arg2->file);
+ (*jenv)->SetIntField(jenv, jarg2,
+ dblsn_offset_fid, arg2->offset);
+ }
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 = (char *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = *(DB_TXN **)&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 ;
+ }
+
+ result = (db_ret_t)DbEnv_log_print(arg1,arg2,(char const *)arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobject jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_LOG_STAT *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
- __os_ufree(NULL, result);
-
- return jresult;
+ jobject jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_LOG_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1bsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lg_bsize(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_lg_bsize(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- char *arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_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);
- }
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1set_1lg_1filemode(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_lg_filemode(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lg_max(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_lg_max(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lg_1regionmax(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_lg_regionmax(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_set_lg_regionmax(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- jlong result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = DbEnv_get_cachesize(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1cachesize_1ncache(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- int result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (int)DbEnv_get_cachesize_ncache(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_get_cachesize_ncache(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_internal_db_1javaJNI_DbEnv_1get_1mp_1max_1openfd(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_get_mp_max_openfd(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_internal_db_1javaJNI_DbEnv_1get_1mp_1max_1write(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_get_mp_max_write(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_internal_db_1javaJNI_DbEnv_1get_1mp_1max_1write_1sleep(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_get_mp_max_write_sleep(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_internal_db_1javaJNI_DbEnv_1get_1mp_1mmapsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- size_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = DbEnv_get_mp_mmapsize(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jlong)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ size_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbEnv_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_internal_db_1javaJNI_DbEnv_1memp_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobject jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_MPOOL_STAT *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
- __os_ufree(NULL, result);
-
- return jresult;
+ jobject jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_MPOOL_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
}
JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1fstat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobjectArray jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_MPOOL_FSTAT **result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 **)DbEnv_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, obj, result[i]);
- }
+ jobjectArray jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_MPOOL_FSTAT **result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 **)DbEnv_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, obj, result[i]);
}
- return jresult;
+ __os_ufree(NULL, result);
+ }
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1trickle(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- int arg2 ;
- int result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (int)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (int)DbEnv_memp_trickle(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_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_internal_db_1javaJNI_DbEnv_1mutex_1get_1align(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_mutex_get_align(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_internal_db_1javaJNI_DbEnv_1mutex_1get_1increment(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_mutex_get_increment(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_internal_db_1javaJNI_DbEnv_1mutex_1get_1max(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_mutex_get_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_internal_db_1javaJNI_DbEnv_1mutex_1get_1tas_1spins(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_mutex_get_tas_spins(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_internal_db_1javaJNI_DbEnv_1mutex_1set_1align(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_mutex_set_align(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mutex_1set_1increment(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_mutex_set_increment(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mutex_1set_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_mutex_set_max(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mutex_1set_1tas_1spins(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_mutex_set_tas_spins(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mutex_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_MUTEX_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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_MUTEX_STAT *)DbEnv_mutex_stat(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+
+ jresult = (*jenv)->NewObject(jenv, mutex_stat_class, mutex_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_mutex_stat(jenv, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tx_1max(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbEnv_get_tx_max(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1tx_1timestamp(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- time_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = DbEnv_get_tx_timestamp(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jlong)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ time_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbEnv_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_internal_db_1javaJNI_DbEnv_1get_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- db_timeout_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_get_timeout(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jlong)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_timeout_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1txn_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- DB_TXN *arg2 = (DB_TXN *) 0 ;
- u_int32_t arg3 ;
- DB_TXN *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_txn_begin(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- *(DB_TXN **)&jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ DB_TXN *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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_internal_db_1javaJNI_DbEnv_1txn_1checkpoint(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- u_int32_t arg3 ;
- u_int32_t arg4 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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)DbEnv_txn_checkpoint(arg1,arg2,arg3,arg4);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1txn_1recover(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
- jobjectArray jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- int arg2 ;
- u_int32_t arg3 ;
- DB_PREPLIST *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_txn_recover(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ jobjectArray jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ u_int32_t arg3 ;
+ DB_PREPLIST *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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);
}
-
- {
- 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;
+ __os_ufree(NULL, result);
+ }
+ return jresult;
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobject jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_TXN_STAT *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_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, 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_st_txnarray_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, obj, &result->st_txnarray[i]);
- }
+ jobject jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_TXN_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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, 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_st_txnarray_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, obj, &result->st_txnarray[i]);
}
- return jresult;
-}
-
-
-JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1rep_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- jlong result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = DbEnv_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_internal_db_1javaJNI_DbEnv_1rep_1elect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4, jint jarg5, jint jarg6) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- int arg2 ;
- int arg3 ;
- int arg4 ;
- u_int32_t arg5 ;
- u_int32_t arg6 ;
- int result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = (int)jarg2;
- arg3 = (int)jarg3;
- arg4 = (int)jarg4;
- arg5 = (u_int32_t)jarg5;
- arg6 = (u_int32_t)jarg6;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (int)DbEnv_rep_elect(arg1,arg2,arg3,arg4,arg5,arg6);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
- }
-
- jresult = (jint)result;
- return jresult;
+ __os_ufree(NULL, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1get_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbEnv_rep_get_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_internal_db_1javaJNI_DbEnv_1rep_1elect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ int arg3 ;
+ u_int32_t arg4 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_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_internal_db_1javaJNI_DbEnv_1rep_1process_1message(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jobject jarg4, jobject jarg5) {
- jint jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 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 ;
- DB_LSN lsn5 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 0) != 0) {
- return 0;
- }
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return 0;
- }
-
- id4 = (*jenv)->GetIntField(jenv, jarg4, rep_processmsg_envid);
- arg4 = &id4;
-
-
- /* XXX: TODO */
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 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 ;
+ DB_LSN lsn5 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+
+ id4 = (*jenv)->GetIntField(jenv, jarg4, rep_processmsg_envid_fid);
+ arg4 = &id4;
+
+
+ if (jarg5 == NULL) {
+ arg5 = NULL;
+ } else {
arg5 = &lsn5;
-
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- if (jarg5 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return 0;
- }
-
-
- result = (int)DbEnv_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);
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg5, arg5, &lsn5); */
-
- return jresult;
+ arg5->file = (*jenv)->GetIntField(jenv, jarg5, dblsn_file_fid);
+ arg5->offset = (*jenv)->GetIntField(jenv, jarg5,
+ dblsn_offset_fid);
+ }
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ if (arg5 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)DbEnv_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_fid, *arg4);
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+ if (jarg5 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg5, dblsn_file_fid, arg5->file);
+ (*jenv)->SetIntField(jenv, jarg5,
+ dblsn_offset_fid, arg5->offset);
+ }
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1flush(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_rep_flush(arg1);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1config(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_rep_set_config(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1start(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jint jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- DBT *arg2 = (DBT *) 0 ;
- u_int32_t arg3 ;
- db_ret_t result;
- DBT_LOCKED ldbt2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
-
- if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 1) != 0) {
- return ;
- }
- arg3 = (u_int32_t)jarg3;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_rep_start(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
- __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 1) != 0) {
+ return ; /* An exception will be pending. */
+ }
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_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 void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1sync(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_rep_sync(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1get_1config(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jboolean jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ int_bool result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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)DbEnv_rep_get_config(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+ return jresult;
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobject jresult = 0 ;
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- u_int32_t arg2 ;
- DB_REP_STAT *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
- __os_ufree(NULL, result);
-
- return jresult;
-}
-
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rep_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbEnv *arg1 = (struct DbEnv *) 0 ;
- jlong arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbEnv **)&jarg1;
- arg2 = jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbEnv_set_rep_limit(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
-}
-
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rep_1transport(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jobject jarg3) {
- struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_set_rep_transport(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, JDBENV);
- }
-
+ jobject jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ DB_REP_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 *)DbEnv_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, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ jlong arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_rep_set_limit(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1rep_1request(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&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 ;
+ }
+
+ result = (db_ret_t)DbEnv_set_rep_request(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1transport(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jobject jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 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 DbEnv **)&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)DbEnv_rep_set_transport(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1get_1nsites(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_rep_get_nsites(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_internal_db_1javaJNI_DbEnv_1rep_1get_1priority(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int)DbEnv_rep_get_priority(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_internal_db_1javaJNI_DbEnv_1rep_1get_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbEnv_rep_get_timeout(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1nsites(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_rep_set_nsites(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1priority(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_rep_set_priority(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jlong jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ db_timeout_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+ arg3 = (db_timeout_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_rep_set_timeout(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1add_1remote_1site(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ u_int32_t arg4 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return 0;
+ }
+ arg3 = (u_int32_t)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)DbEnv_repmgr_add_remote_site(arg1,(char const *)arg2,arg3,arg4);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ jresult = (jint)result;
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1get_1ack_1policy(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_repmgr_get_ack_policy(arg1);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1set_1ack_1policy(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_repmgr_set_ack_policy(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1set_1local_1site(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3, jint jarg4) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ char *arg2 = (char *) 0 ;
+ u_int32_t arg3 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ 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)DbEnv_repmgr_set_local_site(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 jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1site_1list(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jobjectArray jresult = 0 ;
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ struct __db_repmgr_sites result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbEnv_repmgr_site_list(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+ }
+
+ {
+ int i, len;
+
+ len = (&result)->nsites;
+ jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, rephost_class,
+ NULL);
+ if (jresult == NULL)
+ return 0; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jobject jrep_addr = (*jenv)->NewObject(jenv,
+ rephost_class, rephost_construct);
+
+ (*jenv)->SetObjectField(jenv, jrep_addr, rephost_host_fid,
+ (*jenv)->NewStringUTF(jenv, (&result)->sites[i].host));
+ (*jenv)->SetIntField(jenv, jrep_addr, rephost_port_fid,
+ (&result)->sites[i].port);
+ (*jenv)->SetIntField(jenv, jrep_addr, rephost_eid_fid,
+ (&result)->sites[i].eid);
+ (*jenv)->SetIntField(jenv, jrep_addr, rephost_status_fid,
+ (&result)->sites[i].status);
+
+ if (jrep_addr == NULL)
+ return 0; /* An exception is pending */
+
+ (*jenv)->SetObjectArrayElement(jenv, jresult, i, jrep_addr);
+ }
+ __os_ufree(NULL, (&result)->sites);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1start(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
+ struct DbEnv *arg1 = (struct DbEnv *) 0 ;
+ int arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbEnv **)&jarg1;
+ arg2 = (int)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbEnv_repmgr_start(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+ }
+
}
JNIEXPORT jstring JNICALL Java_com_sleepycat_db_internal_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;
+ jstring jresult = 0 ;
+ int arg1 ;
+ char *result = 0 ;
+
+ (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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ 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_internal_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;
+ jstring jresult = 0 ;
+ char *result = 0 ;
+
+ (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_internal_db_1javaJNI_delete_1DbLock(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- struct DbLock *arg1 = (struct DbLock *) 0 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbLock **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
- delete_DbLock(arg1);
-
+ struct DbLock *arg1 = (struct DbLock *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbLock **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+ delete_DbLock(arg1);
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbLogc_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbLogc *arg1 = (struct DbLogc *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbLogc **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbLogc_close(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbLogc *arg1 = (struct DbLogc *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbLogc **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbLogc_close(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbLogc_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jint jarg4) {
- jint jresult = 0 ;
- struct DbLogc *arg1 = (struct DbLogc *) 0 ;
- DB_LSN *arg2 = (DB_LSN *) 0 ;
- DBT *arg3 = (DBT *) 0 ;
- u_int32_t arg4 ;
- int result;
- DB_LSN lsn2 ;
- DBT_LOCKED ldbt3 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbLogc **)&jarg1;
-
- /* XXX: TODO */
+ jint jresult = 0 ;
+ struct DbLogc *arg1 = (struct DbLogc *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ int result;
+ DB_LSN lsn2 ;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbLogc **)&jarg1;
+
+ if (jarg2 == NULL) {
+ arg2 = NULL;
+ } else {
arg2 = &lsn2;
-
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return 0;
- }
- arg4 = (u_int32_t)jarg4;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- if (jarg2 == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
- return 0;
- }
-
-
- result = (int)DbLogc_get(arg1,arg2,arg3,arg4);
-
- if (!DB_RETOK_LGGET(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
- jresult = (jint)result;
-
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, jarg2, arg2, &lsn2); */
-
- __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
- return jresult;
+ arg2->file = (*jenv)->GetIntField(jenv, jarg2, dblsn_file_fid);
+ arg2->offset = (*jenv)->GetIntField(jenv, jarg2,
+ dblsn_offset_fid);
+ }
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return 0; /* An exception will be pending. */
+ }
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ if (arg2 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)DbLogc_get(arg1,arg2,arg3,arg4);
+ if (!DB_RETOK_LGGET(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
+ jresult = (jint)result;
+
+ if (jarg2 != NULL) {
+ (*jenv)->SetIntField(jenv, jarg2, dblsn_file_fid, arg2->file);
+ (*jenv)->SetIntField(jenv, jarg2,
+ dblsn_offset_fid, arg2->offset);
+ }
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1get_1priority(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
- DB_CACHE_PRIORITY result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbMpoolFile **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (DB_CACHE_PRIORITY)DbMpoolFile_get_priority(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
+ DB_CACHE_PRIORITY result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbMpoolFile **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (DB_CACHE_PRIORITY)DbMpoolFile_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_internal_db_1javaJNI_DbMpoolFile_1set_1priority(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
- DB_CACHE_PRIORITY arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbMpoolFile **)&jarg1;
- arg2 = (DB_CACHE_PRIORITY)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbMpoolFile_set_priority(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
+ DB_CACHE_PRIORITY arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbMpoolFile **)&jarg1;
+ arg2 = (DB_CACHE_PRIORITY)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbMpoolFile_set_priority(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1get_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbMpoolFile **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbMpoolFile_get_flags(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbMpoolFile **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbMpoolFile_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_internal_db_1javaJNI_DbMpoolFile_1set_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
- struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
- u_int32_t arg2 ;
- int_bool arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbMpoolFile **)&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)DbMpoolFile_set_flags(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbMpoolFile **)&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)DbMpoolFile_set_flags(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbMpoolFile_1get_1maxsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
- jlong result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbMpoolFile **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = DbMpoolFile_get_maxsize(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbMpoolFile **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = DbMpoolFile_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_internal_db_1javaJNI_DbMpoolFile_1set_1maxsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
- jlong arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbMpoolFile **)&jarg1;
- arg2 = jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbMpoolFile_set_maxsize(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbMpoolFile *arg1 = (struct DbMpoolFile *) 0 ;
+ jlong arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbMpoolFile **)&jarg1;
+ arg2 = jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbMpoolFile_set_maxsize(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_new_1DbSequence(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jlong jresult = 0 ;
- DB *arg1 = (DB *) 0 ;
- u_int32_t arg2 ;
- struct DbSequence *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(DB **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- errno = 0;
- result = (struct DbSequence *)new_DbSequence(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- *(struct DbSequence **)&jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ DB *arg1 = (DB *) 0 ;
+ u_int32_t arg2 ;
+ struct DbSequence *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(DB **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ errno = 0;
+ result = (struct DbSequence *)new_DbSequence(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ *(struct DbSequence **)&jresult = result;
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_close(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_close(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3, jint jarg4) {
- jlong jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- DB_TXN *arg2 = (DB_TXN *) 0 ;
- int32_t arg3 ;
- u_int32_t arg4 ;
- db_seq_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = *(DB_TXN **)&jarg2;
- arg3 = (int32_t)jarg3;
- arg4 = (u_int32_t)jarg4;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (db_seq_t)DbSequence_get(arg1,arg2,arg3,arg4);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jlong)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ int32_t arg3 ;
+ u_int32_t arg4 ;
+ db_seq_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ arg3 = (int32_t)jarg3;
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (db_seq_t)DbSequence_get(arg1,arg2,arg3,arg4);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ jresult = (jlong)result;
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (int32_t)DbSequence_get_cachesize(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (int32_t)DbSequence_get_cachesize(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ jresult = (jint)result;
+ return jresult;
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1db(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- DB *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (DB *)DbSequence_get_db(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- *(DB **)&jresult = result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ DB *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (DB *)DbSequence_get_db(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ *(DB **)&jresult = result;
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (u_int32_t)DbSequence_get_flags(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (u_int32_t)DbSequence_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_internal_db_1javaJNI_DbSequence_1get_1key(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- DBT *arg2 = (DBT *) 0 ;
- db_ret_t result;
- DBT_LOCKED ldbt2 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
-
- if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 0) != 0) {
- return ;
- }
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_get_key(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
- __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 0) != 0) {
+ return ; /* An exception will be pending. */
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_get_key(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1range_1min(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- db_seq_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (db_seq_t)DbSequence_get_range_min(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jlong)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ db_seq_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (db_seq_t)DbSequence_get_range_min(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ jresult = (jlong)result;
+ return jresult;
}
JNIEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1range_1max(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jlong jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- db_seq_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
-
- errno = 0;
- result = (db_seq_t)DbSequence_get_range_max(arg1);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
- jresult = (jlong)result;
- return jresult;
+ jlong jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ db_seq_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (db_seq_t)DbSequence_get_range_max(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+ jresult = (jlong)result;
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1initial_1value(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- db_seq_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = (db_seq_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_initial_value(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ db_seq_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = (db_seq_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_initial_value(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1open(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jint jarg4) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- DB_TXN *arg2 = (DB_TXN *) 0 ;
- DBT *arg3 = (DBT *) 0 ;
- u_int32_t arg4 ;
- db_ret_t result;
- DBT_LOCKED ldbt3 ;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = *(DB_TXN **)&jarg2;
-
- if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
- return ;
- }
- arg4 = (u_int32_t)jarg4;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_open(arg1,arg2,arg3,arg4);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
- __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 0) != 0) {
+ return ; /* An exception will be pending. */
+ }
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_open(arg1,arg2,arg3,arg4);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1remove0(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- DB_TXN *arg2 = (DB_TXN *) 0 ;
- u_int32_t arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = *(DB_TXN **)&jarg2;
- arg3 = (u_int32_t)jarg3;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_remove(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_remove(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = (int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_set_cachesize(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = (int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_set_cachesize(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_set_flags(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_set_flags(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1range(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3) {
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- db_seq_t arg2 ;
- db_seq_t arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&jarg1;
- arg2 = (db_seq_t)jarg2;
- arg3 = (db_seq_t)jarg3;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbSequence_set_range(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ db_seq_t arg2 ;
+ db_seq_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&jarg1;
+ arg2 = (db_seq_t)jarg2;
+ arg3 = (db_seq_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbSequence_set_range(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- jobject jresult = 0 ;
- struct DbSequence *arg1 = (struct DbSequence *) 0 ;
- u_int32_t arg2 ;
- DB_SEQUENCE_STAT *result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbSequence **)&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_SEQUENCE_STAT *)DbSequence_stat(arg1,arg2);
-
- if (!DB_RETOK_STD(errno)) {
- __dbj_throw(jenv, errno, NULL, NULL, NULL);
- }
-
-
- jresult = (*jenv)->NewObject(jenv, seq_stat_class, seq_stat_construct);
- if (jresult != NULL)
- __dbj_fill_seq_stat(jenv, jresult, result);
- __os_ufree(NULL, result);
-
- return jresult;
+ jobject jresult = 0 ;
+ struct DbSequence *arg1 = (struct DbSequence *) 0 ;
+ u_int32_t arg2 ;
+ DB_SEQUENCE_STAT *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbSequence **)&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_SEQUENCE_STAT *)DbSequence_stat(arg1,arg2);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+ }
+
+
+ jresult = (*jenv)->NewObject(jenv, seq_stat_class, seq_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_seq_stat(jenv, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1abort0(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- struct DbTxn *arg1 = (struct DbTxn *) 0 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbTxn **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbTxn_abort(arg1);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbTxn_abort(arg1);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbTxn *arg1 = (struct DbTxn *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbTxn **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbTxn_commit(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbTxn_commit(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1discard0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
- struct DbTxn *arg1 = (struct DbTxn *) 0 ;
- u_int32_t arg2 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbTxn **)&jarg1;
- arg2 = (u_int32_t)jarg2;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return ;
- }
-
- result = (db_ret_t)DbTxn_discard(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, NULL);
- }
-
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ result = (db_ret_t)DbTxn_discard(arg1,arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+ }
+
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1get_1name(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ char *result = 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ errno = 0;
+ result = (char *)DbTxn_get_name(arg1);
+ if (!DB_RETOK_STD(errno)) {
+ __dbj_throw(jenv, errno, NULL, NULL, TXN2JDBENV);
+ }
+
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ return jresult;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1id(JNIEnv *jenv, jclass jcls, jlong jarg1) {
- jint jresult = 0 ;
- struct DbTxn *arg1 = (struct DbTxn *) 0 ;
- u_int32_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbTxn **)&jarg1;
-
- if (jarg1 == 0) {
- __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
- return 0;
- }
- result = (u_int32_t)DbTxn_id(arg1);
-
- jresult = (jint)result;
- return jresult;
+ jint jresult = 0 ;
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+ result = (u_int32_t)DbTxn_id(arg1);
+ jresult = (jint)result;
+ return jresult;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1prepare(JNIEnv *jenv, jclass jcls, jlong jarg1, jbyteArray jarg2) {
- struct DbTxn *arg1 = (struct DbTxn *) 0 ;
- u_int8_t *arg2 = (u_int8_t *) 0 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbTxn **)&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)DbTxn_prepare(arg1,arg2);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, TXN2JDBENV);
- }
-
-
- (*jenv)->ReleaseByteArrayElements(jenv, jarg2, (jbyte *)arg2, 0);
-
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ u_int8_t *arg2 = (u_int8_t *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&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)DbTxn_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_internal_db_1javaJNI_DbTxn_1set_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
- struct DbTxn *arg1 = (struct DbTxn *) 0 ;
- db_timeout_t arg2 ;
- u_int32_t arg3 ;
- db_ret_t result;
-
- (void)jenv;
- (void)jcls;
- arg1 = *(struct DbTxn **)&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)DbTxn_set_timeout(arg1,arg2,arg3);
-
- if (!DB_RETOK_STD(result)) {
- __dbj_throw(jenv, result, NULL, NULL, TXN2JDBENV);
- }
-
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ db_timeout_t arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&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)DbTxn_set_timeout(arg1,arg2,arg3);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, TXN2JDBENV);
+ }
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1set_1name(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct DbTxn *arg1 = (struct DbTxn *) 0 ;
+ char *arg2 = (char *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct DbTxn **)&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)DbTxn_set_name(arg1,(char const *)arg2);
+ if (!DB_RETOK_STD(result)) {
+ __dbj_throw(jenv, result, NULL, NULL, TXN2JDBENV);
+ }
+
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
}
diff --git a/db/libdb_java/java_callbacks.i b/db/libdb_java/java_callbacks.i
index 2d38738f0..ae10f2062 100644
--- a/db/libdb_java/java_callbacks.i
+++ b/db/libdb_java/java_callbacks.i
@@ -13,16 +13,17 @@ JAVA_TYPEMAP(_sig, _jclass, jobject)
%enddef
%{
-static void __dbj_error(const DB_ENV *dbenv, const char *prefix, const char *msg)
+static void __dbj_error(const DB_ENV *dbenv,
+ const char *prefix, const char *msg)
{
JNIEnv *jenv = __dbj_get_jnienv();
jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ COMPQUIET(prefix, NULL);
+
if (jdbenv != NULL)
(*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
- errcall_method,
- (*jenv)->NewStringUTF(jenv, prefix),
- (*jenv)->NewStringUTF(jenv, msg));
+ errcall_method, (*jenv)->NewStringUTF(jenv, msg));
}
static void __dbj_env_feedback(DB_ENV *dbenv, int opcode, int percent)
@@ -30,8 +31,9 @@ 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);
+ if (jdbenv != NULL)
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ env_feedback_method, opcode, percent);
}
static void __dbj_message(const DB_ENV *dbenv, const char *msg)
@@ -49,8 +51,10 @@ 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));
+ if (jdbenv != NULL)
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ paniccall_method,
+ __dbj_get_except(jenv, err, NULL, NULL, jdbenv));
}
static int __dbj_app_dispatch(DB_ENV *dbenv,
@@ -62,6 +66,9 @@ static int __dbj_app_dispatch(DB_ENV *dbenv,
jbyteArray jdbtarr;
int ret;
+ if (jdbenv == NULL)
+ return (EINVAL);
+
jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
__dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
if (jdbt == NULL)
@@ -76,7 +83,7 @@ static int __dbj_app_dispatch(DB_ENV *dbenv,
/* The exception will be thrown, so this could be any error. */
ret = EINVAL;
}
-
+
(*jenv)->DeleteLocalRef(jenv, jdbtarr);
(*jenv)->DeleteLocalRef(jenv, jdbt);
if (jlsn != NULL)
@@ -85,6 +92,27 @@ static int __dbj_app_dispatch(DB_ENV *dbenv,
return (ret);
}
+static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ int ret;
+
+ COMPQUIET(info, NULL);
+
+ if(jdbenv == NULL)
+ return ;
+
+ ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
+ event_notify_method, event_id);
+
+ if((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+ return ;
+}
+
static int __dbj_rep_transport(DB_ENV *dbenv,
const DBT *control, const DBT *rec, const DB_LSN *lsn, int envid,
u_int32_t flags)
@@ -95,6 +123,9 @@ static int __dbj_rep_transport(DB_ENV *dbenv,
jbyteArray jcontrolarr, jrecarr;
int ret;
+ if (jdbenv == NULL)
+ return (EINVAL);
+
jcontrol = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
jrec = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
if (jcontrol == NULL || jrec == NULL)
@@ -114,7 +145,7 @@ static int __dbj_rep_transport(DB_ENV *dbenv,
/* 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);
@@ -135,18 +166,30 @@ static int __dbj_seckey_create(DB *db,
DBT_LOCKED lresult;
int ret;
- jkey = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
- jdata = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdb == NULL)
+ return (EINVAL);
+
+ jkey = (key->app_data != NULL) ?
+ ((DBT_LOCKED *)key->app_data)->jdbt :
+ (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdata = (data->app_data != NULL) ?
+ ((DBT_LOCKED *)data->app_data)->jdbt :
+ (*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 */
-
+ if (key->app_data == NULL) {
+ __dbj_dbt_copyout(jenv, key, &jkeyarr, jkey);
+ if (jkeyarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+ }
+ if (data->app_data == NULL) {
+ __dbj_dbt_copyout(jenv, data, &jdataarr, jdata);
+ if (jdataarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+ }
+
ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
seckey_create_method, jkey, jdata, jresult);
@@ -158,24 +201,34 @@ static int __dbj_seckey_create(DB *db,
ret = EINVAL;
goto err;
}
-
+
if ((ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jresult, 0)) != 0)
goto err;
- if (lresult.jarr != NULL) {
- /*
- * If there's data, we've got a copy of it (that's the default
- * when no Dbt flags are set, so we can safely free the array.
- */
- *result = lresult.dbt;
+ if (lresult.dbt.size != 0) {
+ /* If there's data, we need to take a copy of it. */
+ memset(result, 0, sizeof (DBT));
+ result->size = lresult.dbt.size;
+ if ((ret =
+ __os_umalloc(NULL, result->size, &result->data)) != 0)
+ goto err;
+ if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
+ result->data, result->size,
+ DB_USERCOPY_GETDATA)) != 0)
+ goto err;
+ __dbj_dbt_release(jenv, jresult, &lresult.dbt, &lresult);
(*jenv)->DeleteLocalRef(jenv, lresult.jarr);
- result->flags |= DB_DBT_APPMALLOC;
+ F_SET(result, DB_DBT_APPMALLOC);
+ }
+
+err: if (key->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jkeyarr);
+ (*jenv)->DeleteLocalRef(jenv, jkey);
+ }
+ if (data->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jdataarr);
+ (*jenv)->DeleteLocalRef(jenv, jdata);
}
-
-err: (*jenv)->DeleteLocalRef(jenv, jkeyarr);
- (*jenv)->DeleteLocalRef(jenv, jkey);
- (*jenv)->DeleteLocalRef(jenv, jdataarr);
- (*jenv)->DeleteLocalRef(jenv, jdata);
(*jenv)->DeleteLocalRef(jenv, jresult);
return (ret);
@@ -190,6 +243,14 @@ static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
jbyteArray jdbtarr;
int ret;
+ if (jdb == NULL)
+ return (EINVAL);
+
+ /*
+ * The dbt we're passed will be from the application, but we can't
+ * just reuse it, since we will have already taken a copy of the data.
+ * Make a new DatabaseEntry object here for the callback.
+ */
jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
if (jdbt == NULL)
return (ENOMEM); /* An exception is pending */
@@ -200,25 +261,29 @@ static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
ret = 0;
(*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
- append_recno_method, jdbt, recno);
+ append_recno_method, jdbt, recno);
if ((*jenv)->ExceptionOccurred(jenv)) {
/* The exception will be thrown, so this could be any error. */
- ret = EINVAL;
- goto err;
+ return (EINVAL);
}
- if ((ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jdbt, 0)) != 0)
- goto err;
-
- if (lresult.jarr != NULL) {
- /*
- * If there's data, we've got a copy of it (that's the default
- * when no Dbt flags are set, so we can safely free the array.
- */
- *dbt = lresult.dbt;
+ ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jdbt, 0);
+ memset(dbt, 0, sizeof (DBT));
+
+ if (ret == 0 && lresult.dbt.size != 0) {
+ /* If there's data, we need to take a copy of it. */
+ dbt->size = lresult.dbt.size;
+ if ((ret =
+ __os_umalloc(NULL, dbt->size, &dbt->data)) != 0)
+ goto err;
+ if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
+ dbt->data, dbt->size,
+ DB_USERCOPY_GETDATA)) != 0)
+ goto err;
+ __dbj_dbt_release(jenv, jdbt, &lresult.dbt, &lresult);
(*jenv)->DeleteLocalRef(jenv, lresult.jarr);
- dbt->flags |= DB_DBT_APPMALLOC;
+ F_SET(dbt, DB_DBT_APPMALLOC);
}
err: (*jenv)->DeleteLocalRef(jenv, jdbtarr);
@@ -234,17 +299,28 @@ static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
jbyteArray jdbtarr1, jdbtarr2;
int ret;
- jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
- if (jdbtarr1 == NULL)
- return ENOMEM;
- (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0, (jsize)dbt1->size,
- (jbyte *)dbt1->data);
+ if (jdb == NULL)
+ return (EINVAL);
+
+ if (dbt1->app_data != NULL)
+ jdbtarr1 = ((DBT_LOCKED *)dbt1->app_data)->jarr;
+ else {
+ jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
+ if (jdbtarr1 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0,
+ (jsize)dbt1->size, (jbyte *)dbt1->data);
+ }
- jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
- if (jdbtarr2 == NULL)
- return ENOMEM;
- (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0, (jsize)dbt2->size,
- (jbyte *)dbt2->data);
+ if (dbt2->app_data != NULL)
+ jdbtarr2 = ((DBT_LOCKED *)dbt2->app_data)->jarr;
+ else {
+ jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
+ if (jdbtarr2 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0,
+ (jsize)dbt2->size, (jbyte *)dbt2->data);
+ }
ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
bt_compare_method, jdbtarr1, jdbtarr2);
@@ -253,9 +329,11 @@ static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
/* The exception will be thrown, so this could be any error. */
ret = EINVAL;
}
-
- (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
- (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+
+ if (dbt1->app_data == NULL)
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ if (dbt2->app_data == NULL)
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
return (ret);
}
@@ -268,23 +346,40 @@ static size_t __dbj_bt_prefix(DB *db, const DBT *dbt1, const DBT *dbt2)
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 */
+ if (jdb == NULL)
+ return (EINVAL);
+
+ if (dbt1->app_data != NULL)
+ jdbt1 = ((DBT_LOCKED *)dbt1->app_data)->jdbt;
+ else {
+ if ((jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct)) == NULL)
+ return (ENOMEM); /* An exception is pending */
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ if (jdbtarr1 == NULL)
+ return (ENOMEM); /* An exception is pending */
+ }
+
+ if (dbt2->app_data != NULL)
+ jdbt2 = ((DBT_LOCKED *)dbt2->app_data)->jdbt;
+ else {
+ if ((jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct)) == NULL)
+ return (ENOMEM); /* An exception is pending */
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr2 == 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);
+
+ if (dbt1->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+ }
+ if (dbt2->app_data == NULL) {
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ }
return (ret);
}
@@ -293,32 +388,34 @@ 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 */
+ if (jdb == NULL)
+ return (EINVAL);
- __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 */
+ jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
+ if (jdbtarr1 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0, (jsize)dbt1->size,
+ (jbyte *)dbt1->data);
+
+ jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
+ if (jdbtarr2 == NULL)
+ return (ENOMEM);
+ (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0, (jsize)dbt2->size,
+ (jbyte *)dbt2->data);
ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
- dup_compare_method, jdbt1, jdbt2);
-
+ dup_compare_method, jdbtarr1, jdbtarr2);
+
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);
}
@@ -328,8 +425,9 @@ 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);
+ if (jdb != NULL)
+ (*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)
@@ -339,8 +437,11 @@ static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
jbyteArray jarr = (*jenv)->NewByteArray(jenv, (jsize)len);
int ret;
- if (jarr == NULL)
- return ENOMEM; /* An exception is pending */
+ if (jdb == NULL)
+ return (EINVAL);
+
+ if ((jarr = (*jenv)->NewByteArray(jenv, (jsize)len)) == NULL)
+ return (ENOMEM); /* An exception is pending */
(*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)len, (jbyte *)data);
@@ -353,18 +454,20 @@ static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
}
%}
-JAVA_CALLBACK(void (*db_errcall_fcn)(const DB_ENV *, const char *, const char *),
- com.sleepycat.db.ErrorHandler, error)
+JAVA_CALLBACK(void (*db_errcall_fcn)(const DB_ENV *,
+ const char *, const char *), com.sleepycat.db.ErrorHandler, error)
JAVA_CALLBACK(void (*env_feedback_fcn)(DB_ENV *, int, int),
com.sleepycat.db.FeedbackHandler, env_feedback)
JAVA_CALLBACK(void (*db_msgcall_fcn)(const DB_ENV *, const char *),
com.sleepycat.db.MessageHandler, message)
JAVA_CALLBACK(void (*db_panic_fcn)(DB_ENV *, int),
com.sleepycat.db.PanicHandler, panic)
+JAVA_CALLBACK(void (*event_notify)(DB_ENV *, u_int32_t, void *),
+ com.sleepycat.db.EventHandler, event_notify)
JAVA_CALLBACK(int (*tx_recover)(DB_ENV *, DBT *, DB_LSN *, db_recops),
com.sleepycat.db.LogRecordHandler, app_dispatch)
JAVA_CALLBACK(int (*send)(DB_ENV *, const DBT *, const DBT *,
- const DB_LSN *, int, u_int32_t),
+ const DB_LSN *, int, u_int32_t),
com.sleepycat.db.ReplicationTransport, rep_transport)
/*
diff --git a/db/libdb_java/java_except.i b/db/libdb_java/java_except.i
index bc36cef23..c90e4cc1f 100644
--- a/db/libdb_java/java_except.i
+++ b/db/libdb_java/java_except.i
@@ -62,7 +62,7 @@ static jthrowable __dbj_get_except(JNIEnv *jenv,
if (msg == NULL)
msg = db_strerror(err);
-
+
jmsg = (*jenv)->NewStringUTF(jenv, msg);
switch (err) {
@@ -82,11 +82,36 @@ static jthrowable __dbj_get_except(JNIEnv *jenv,
return (jthrowable)(*jenv)->NewObject(jenv, memex_class,
memex_construct, jmsg, obj, err, jdbenv);
+ case DB_REP_DUPMASTER:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repdupmasterex_class, repdupmasterex_construct,
+ jmsg, err, jdbenv);
+
case DB_REP_HANDLE_DEAD:
return (jthrowable)(*jenv)->NewObject(jenv,
rephandledeadex_class, rephandledeadex_construct,
jmsg, err, jdbenv);
+ case DB_REP_HOLDELECTION:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repholdelectionex_class, repholdelectionex_construct,
+ jmsg, err, jdbenv);
+
+ case DB_REP_JOIN_FAILURE:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repjoinfailex_class, repjoinfailex_construct,
+ jmsg, err, jdbenv);
+
+ case DB_REP_LOCKOUT:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ replockoutex_class, replockoutex_construct,
+ jmsg, err, jdbenv);
+
+ case DB_REP_UNAVAIL:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ repunavailex_class, repunavailex_construct,
+ jmsg, err, jdbenv);
+
case DB_RUNRECOVERY:
return (jthrowable)(*jenv)->NewObject(jenv, runrecex_class,
runrecex_construct, jmsg, err, jdbenv);
@@ -94,11 +119,15 @@ static jthrowable __dbj_get_except(JNIEnv *jenv,
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);
-
+ lockex_construct, jmsg, err, 0, NULL, NULL, 0, jdbenv);
+
+ case DB_VERSION_MISMATCH:
+ return (jthrowable)(*jenv)->NewObject(jenv, versionex_class,
+ versionex_construct, jmsg, err, jdbenv);
+
default:
return (jthrowable)(*jenv)->NewObject(jenv, dbex_class,
dbex_construct, jmsg, err, jdbenv);
@@ -119,17 +148,17 @@ static int __dbj_throw(JNIEnv *jenv,
* 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.
+ * this error, so we just call __db_errx here.
*/
if (msg == NULL)
msg = db_strerror(err);
-
- __db_err(NULL, "Couldn't create exception for: '%s'",
+
+ __db_errx(NULL, "Couldn't create exception for: '%s'",
msg);
} else
(*jenv)->Throw(jenv, t);
}
-
+
return (err);
}
%}
diff --git a/db/libdb_java/java_stat.i b/db/libdb_java/java_stat.i
index 121f51658..e932f5e23 100644
--- a/db/libdb_java/java_stat.i
+++ b/db/libdb_java/java_stat.i
@@ -45,6 +45,19 @@ JAVA_TYPEMAP(_ctype, _jtype, jobject)
%}
%enddef
+JAVA_STAT_CLASS(DB_COMPACT *, com.sleepycat.db.CompactStats, compact)
+%typemap(freearg) DB_COMPACT * %{ __dbj_fill_compact(jenv, $input, $1); %}
+%typemap(in) DB_COMPACT * (DB_COMPACT compact) %{
+ memset(&compact, 0, sizeof (DB_COMPACT));
+ $1 = &compact;
+ $1->compact_fillpercent = (*jenv)->GetIntField(jenv, $input,
+ compact_compact_fillpercent_fid);
+ $1->compact_timeout = (*jenv)->GetIntField(jenv, $input,
+ compact_compact_timeout_fid);
+ $1->compact_pages = (*jenv)->GetIntField(jenv, $input,
+ compact_compact_pages_fid);
+%}
+
JAVA_STAT_CLASS(DB_LOCK_STAT *, com.sleepycat.db.LockStats, lock_stat)
JAVA_STAT_CLASS(DB_LOG_STAT *, com.sleepycat.db.LogStats, log_stat)
JAVA_STAT_CLASS(DB_MPOOL_STAT *, com.sleepycat.db.CacheStats, mpool_stat)
@@ -52,11 +65,12 @@ JAVA_STAT_CLASS(DB_MPOOL_STAT *, com.sleepycat.db.CacheStats, mpool_stat)
JAVA_TYPEMAP(DB_MPOOL_FSTAT **, com.sleepycat.db.CacheFileStats[], 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);
+ $result = (*jenv)->NewObjectArray(jenv, (jsize)len,
+ mpool_fstat_class, 0);
if ($result == NULL) {
__os_ufree(NULL, $1);
return $null;
@@ -74,6 +88,7 @@ JAVA_TYPEMAP(DB_MPOOL_FSTAT **, com.sleepycat.db.CacheFileStats[], jobjectArray)
__os_ufree(NULL, $1);
}
+JAVA_STAT_CLASS(DB_MUTEX_STAT *, com.sleepycat.db.MutexStats, mutex_stat)
JAVA_STAT_CLASS(DB_REP_STAT *, com.sleepycat.db.ReplicationStats, rep_stat)
JAVA_STAT_CLASS(DB_SEQUENCE_STAT *, com.sleepycat.db.SequenceStats, seq_stat)
JAVA_TYPEMAP(DB_TXN_STAT *, com.sleepycat.db.TransactionStats, jobject)
@@ -83,14 +98,15 @@ JAVA_TYPEMAP(DB_TXN_STAT *, com.sleepycat.db.TransactionStats, jobject)
$result = (*jenv)->NewObject(jenv, txn_stat_class, txn_stat_construct);
if ($result != NULL)
__dbj_fill_txn_stat(jenv, $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_st_txnarray_fid, actives);
+ (*jenv)->SetObjectField(jenv, $result,
+ txn_stat_st_txnarray_fid, actives);
for (i = 0; i < $1->st_nactive; i++) {
jobject obj = (*jenv)->NewObject(jenv, txn_active_class,
txn_active_construct);
@@ -112,12 +128,12 @@ JAVA_TYPEMAP(DB_TXN_STAT *, com.sleepycat.db.TransactionStats, jobject)
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:
@@ -152,7 +168,7 @@ JAVA_TYPEMAP(DB_TXN_STAT *, com.sleepycat.db.TransactionStats, jobject)
" 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 eb03823a0..b3de2a958 100644
--- a/db/libdb_java/java_stat_auto.c
+++ b/db/libdb_java/java_stat_auto.c
@@ -3,10 +3,10 @@
*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*/
-static int __dbj_fill_bt_stat(JNIEnv *jnienv,
+static int __dbj_fill_bt_stat(JNIEnv *jnienv,
jobject jobj, struct __db_bt_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_magic_fid, statp, bt_magic);
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_version_fid, statp, bt_version);
@@ -14,7 +14,6 @@ static int __dbj_fill_bt_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_nkeys_fid, statp, bt_nkeys);
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_ndata_fid, statp, bt_ndata);
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_pagesize_fid, statp, bt_pagesize);
- JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_maxkey_fid, statp, bt_maxkey);
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_minkey_fid, statp, bt_minkey);
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_re_len_fid, statp, bt_re_len);
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_re_pad_fid, statp, bt_re_pad);
@@ -31,7 +30,20 @@ static int __dbj_fill_bt_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_over_pgfree_fid, statp, bt_over_pgfree);
return (0);
}
-static int __dbj_fill_h_stat(JNIEnv *jnienv,
+static int __dbj_fill_compact(JNIEnv *jnienv,
+ jobject jobj, struct __db_compact *statp) {
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_fillpercent_fid, statp, compact_fillpercent);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_timeout_fid, statp, compact_timeout);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_pages_fid, statp, compact_pages);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_pages_free_fid, statp, compact_pages_free);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_pages_examine_fid, statp, compact_pages_examine);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_levels_fid, statp, compact_levels);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_deadlock_fid, statp, compact_deadlock);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_pages_truncated_fid, statp, compact_pages_truncated);
+ JAVADB_STAT_INT(jnienv, jobj, compact_compact_truncate_fid, statp, compact_truncate);
+ return (0);
+}
+static int __dbj_fill_h_stat(JNIEnv *jnienv,
jobject jobj, struct __db_h_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_magic_fid, statp, hash_magic);
JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_version_fid, statp, hash_version);
@@ -51,7 +63,7 @@ static int __dbj_fill_h_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_dup_free_fid, statp, hash_dup_free);
return (0);
}
-static int __dbj_fill_lock_stat(JNIEnv *jnienv,
+static int __dbj_fill_lock_stat(JNIEnv *jnienv,
jobject jobj, struct __db_lock_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_id_fid, statp, st_id);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_cur_maxid_fid, statp, st_cur_maxid);
@@ -65,10 +77,12 @@ static int __dbj_fill_lock_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_maxnlockers_fid, statp, st_maxnlockers);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nobjects_fid, statp, st_nobjects);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_maxnobjects_fid, statp, st_maxnobjects);
- JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nconflicts_fid, statp, st_nconflicts);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nrequests_fid, statp, st_nrequests);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nreleases_fid, statp, st_nreleases);
- JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nnowaits_fid, statp, st_nnowaits);
+ JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nupgrade_fid, statp, st_nupgrade);
+ JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_ndowngrade_fid, statp, st_ndowngrade);
+ JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_lock_wait_fid, statp, st_lock_wait);
+ JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_lock_nowait_fid, statp, st_lock_nowait);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_ndeadlocks_fid, statp, st_ndeadlocks);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_locktimeout_fid, statp, st_locktimeout);
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_nlocktimeouts_fid, statp, st_nlocktimeouts);
@@ -79,19 +93,21 @@ static int __dbj_fill_lock_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_regsize_fid, statp, st_regsize);
return (0);
}
-static int __dbj_fill_log_stat(JNIEnv *jnienv,
+static int __dbj_fill_log_stat(JNIEnv *jnienv,
jobject jobj, struct __db_log_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_magic_fid, statp, st_magic);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_version_fid, statp, st_version);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_mode_fid, statp, st_mode);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_lg_bsize_fid, statp, st_lg_bsize);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_lg_size_fid, statp, st_lg_size);
+ JAVADB_STAT_INT(jnienv, jobj, log_stat_st_record_fid, statp, st_record);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_w_bytes_fid, statp, st_w_bytes);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_w_mbytes_fid, statp, st_w_mbytes);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_wc_bytes_fid, statp, st_wc_bytes);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_wc_mbytes_fid, statp, st_wc_mbytes);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_wcount_fid, statp, st_wcount);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_wcount_fill_fid, statp, st_wcount_fill);
+ JAVADB_STAT_INT(jnienv, jobj, log_stat_st_rcount_fid, statp, st_rcount);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_scount_fid, statp, st_scount);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_region_wait_fid, statp, st_region_wait);
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_region_nowait_fid, statp, st_region_nowait);
@@ -104,7 +120,7 @@ static int __dbj_fill_log_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, log_stat_st_mincommitperflush_fid, statp, st_mincommitperflush);
return (0);
}
-static int __dbj_fill_mpool_fstat(JNIEnv *jnienv,
+static int __dbj_fill_mpool_fstat(JNIEnv *jnienv,
jobject jobj, struct __db_mpool_fstat *statp) {
JAVADB_STAT_STRING(jnienv, jobj, mpool_fstat_file_name_fid, statp, file_name);
JAVADB_STAT_INT(jnienv, jobj, mpool_fstat_st_pagesize_fid, statp, st_pagesize);
@@ -116,7 +132,7 @@ static int __dbj_fill_mpool_fstat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, mpool_fstat_st_page_out_fid, statp, st_page_out);
return (0);
}
-static int __dbj_fill_mpool_stat(JNIEnv *jnienv,
+static int __dbj_fill_mpool_stat(JNIEnv *jnienv,
jobject jobj, struct __db_mpool_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_gbytes_fid, statp, st_gbytes);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_bytes_fid, statp, st_bytes);
@@ -144,17 +160,35 @@ static int __dbj_fill_mpool_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_hash_examined_fid, statp, st_hash_examined);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_hash_nowait_fid, statp, st_hash_nowait);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_hash_wait_fid, statp, st_hash_wait);
+ JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_hash_max_nowait_fid, statp, st_hash_max_nowait);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_hash_max_wait_fid, statp, st_hash_max_wait);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_region_nowait_fid, statp, st_region_nowait);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_region_wait_fid, statp, st_region_wait);
+ JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_mvcc_frozen_fid, statp, st_mvcc_frozen);
+ JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_mvcc_thawed_fid, statp, st_mvcc_thawed);
+ JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_mvcc_freed_fid, statp, st_mvcc_freed);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_alloc_fid, statp, st_alloc);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_alloc_buckets_fid, statp, st_alloc_buckets);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_alloc_max_buckets_fid, statp, st_alloc_max_buckets);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_alloc_pages_fid, statp, st_alloc_pages);
JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_alloc_max_pages_fid, statp, st_alloc_max_pages);
+ JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_io_wait_fid, statp, st_io_wait);
+ return (0);
+}
+static int __dbj_fill_mutex_stat(JNIEnv *jnienv,
+ jobject jobj, struct __db_mutex_stat *statp) {
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_mutex_align_fid, statp, st_mutex_align);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_mutex_tas_spins_fid, statp, st_mutex_tas_spins);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_mutex_cnt_fid, statp, st_mutex_cnt);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_mutex_free_fid, statp, st_mutex_free);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_mutex_inuse_fid, statp, st_mutex_inuse);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_mutex_inuse_max_fid, statp, st_mutex_inuse_max);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_region_wait_fid, statp, st_region_wait);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_region_nowait_fid, statp, st_region_nowait);
+ JAVADB_STAT_INT(jnienv, jobj, mutex_stat_st_regsize_fid, statp, st_regsize);
return (0);
}
-static int __dbj_fill_qam_stat(JNIEnv *jnienv,
+static int __dbj_fill_qam_stat(JNIEnv *jnienv,
jobject jobj, struct __db_qam_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, qam_stat_qs_magic_fid, statp, qs_magic);
JAVADB_STAT_INT(jnienv, jobj, qam_stat_qs_version_fid, statp, qs_version);
@@ -171,7 +205,7 @@ static int __dbj_fill_qam_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, qam_stat_qs_cur_recno_fid, statp, qs_cur_recno);
return (0);
}
-static int __dbj_fill_rep_stat(JNIEnv *jnienv,
+static int __dbj_fill_rep_stat(JNIEnv *jnienv,
jobject jobj, struct __db_rep_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_status_fid, statp, st_status);
JAVADB_STAT_LSN(jnienv, jobj, rep_stat_st_next_lsn_fid, statp, st_next_lsn);
@@ -181,6 +215,13 @@ static int __dbj_fill_rep_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_dupmasters_fid, statp, st_dupmasters);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_env_id_fid, statp, st_env_id);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_env_priority_fid, statp, st_env_priority);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_bulk_fills_fid, statp, st_bulk_fills);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_bulk_overflows_fid, statp, st_bulk_overflows);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_bulk_records_fid, statp, st_bulk_records);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_bulk_transfers_fid, statp, st_bulk_transfers);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_client_rerequests_fid, statp, st_client_rerequests);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_client_svc_req_fid, statp, st_client_svc_req);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_client_svc_miss_fid, statp, st_client_svc_miss);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_gen_fid, statp, st_gen);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_egen_fid, statp, st_egen);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_log_duplicated_fid, statp, st_log_duplicated);
@@ -216,9 +257,11 @@ static int __dbj_fill_rep_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_election_status_fid, statp, st_election_status);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_election_tiebreaker_fid, statp, st_election_tiebreaker);
JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_election_votes_fid, statp, st_election_votes);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_election_sec_fid, statp, st_election_sec);
+ JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_election_usec_fid, statp, st_election_usec);
return (0);
}
-static int __dbj_fill_seq_stat(JNIEnv *jnienv,
+static int __dbj_fill_seq_stat(JNIEnv *jnienv,
jobject jobj, struct __db_seq_stat *statp) {
JAVADB_STAT_INT(jnienv, jobj, seq_stat_st_wait_fid, statp, st_wait);
JAVADB_STAT_INT(jnienv, jobj, seq_stat_st_nowait_fid, statp, st_nowait);
@@ -231,7 +274,7 @@ static int __dbj_fill_seq_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, seq_stat_st_flags_fid, statp, st_flags);
return (0);
}
-static int __dbj_fill_txn_stat(JNIEnv *jnienv,
+static int __dbj_fill_txn_stat(JNIEnv *jnienv,
jobject jobj, struct __db_txn_stat *statp) {
JAVADB_STAT_LSN(jnienv, jobj, txn_stat_st_last_ckp_fid, statp, st_last_ckp);
JAVADB_STAT_LONG(jnienv, jobj, txn_stat_st_time_ckp_fid, statp, st_time_ckp);
@@ -241,20 +284,27 @@ static int __dbj_fill_txn_stat(JNIEnv *jnienv,
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_nbegins_fid, statp, st_nbegins);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_ncommits_fid, statp, st_ncommits);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_nactive_fid, statp, st_nactive);
+ JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_nsnapshot_fid, statp, st_nsnapshot);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_nrestores_fid, statp, st_nrestores);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_maxnactive_fid, statp, st_maxnactive);
+ JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_maxnsnapshot_fid, statp, st_maxnsnapshot);
JAVADB_STAT_ACTIVE(jnienv, jobj, txn_stat_st_txnarray_fid, statp, st_txnarray);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_region_wait_fid, statp, st_region_wait);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_region_nowait_fid, statp, st_region_nowait);
JAVADB_STAT_INT(jnienv, jobj, txn_stat_st_regsize_fid, statp, st_regsize);
return (0);
}
-static int __dbj_fill_txn_active(JNIEnv *jnienv,
+static int __dbj_fill_txn_active(JNIEnv *jnienv,
jobject jobj, struct __db_txn_active *statp) {
JAVADB_STAT_INT(jnienv, jobj, txn_active_txnid_fid, statp, txnid);
JAVADB_STAT_INT(jnienv, jobj, txn_active_parentid_fid, statp, parentid);
+ JAVADB_STAT_INT(jnienv, jobj, txn_active_pid_fid, statp, pid);
JAVADB_STAT_LSN(jnienv, jobj, txn_active_lsn_fid, statp, lsn);
+ JAVADB_STAT_LSN(jnienv, jobj, txn_active_read_lsn_fid, statp, read_lsn);
+ JAVADB_STAT_INT(jnienv, jobj, txn_active_mvcc_ref_fid, statp, mvcc_ref);
+ JAVADB_STAT_INT(jnienv, jobj, txn_active_status_fid, statp, status);
JAVADB_STAT_INT(jnienv, jobj, txn_active_xa_status_fid, statp, xa_status);
JAVADB_STAT_XID(jnienv, jobj, txn_active_xid_fid, statp, xid);
+ JAVADB_STAT_STRING(jnienv, jobj, txn_active_name_fid, statp, name);
return (0);
}
diff --git a/db/libdb_java/java_typemaps.i b/db/libdb_java/java_typemaps.i
index e1bc92020..89a572886 100644
--- a/db/libdb_java/java_typemaps.i
+++ b/db/libdb_java/java_typemaps.i
@@ -13,6 +13,10 @@ JAVA_TYPEMAP(u_int32_t, int, jint)
JAVA_TYPEMAP(u_int32_t pagesize, long, jlong)
JAVA_TYPEMAP(long, long, jlong)
JAVA_TYPEMAP(db_seq_t, long, jlong)
+JAVA_TYPEMAP(pid_t, long, jlong)
+#ifndef SWIGJAVA
+JAVA_TYPEMAP(db_threadid_t, long, jlong)
+#endif
JAVA_TYPEMAP(db_timeout_t, long, jlong)
JAVA_TYPEMAP(size_t, long, jlong)
JAVA_TYPEMAP(db_ret_t, void, void)
@@ -28,21 +32,96 @@ JAVA_TYPEMAP(DBT *, com.sleepycat.db.DatabaseEntry, jobject)
%{
typedef struct __dbt_locked {
+ JNIEnv *jenv;
+ jobject jdbt;
DBT dbt;
+ jobject jdata_nio;
jbyteArray jarr;
- jbyte *orig_data;
jint offset;
int reuse;
u_int32_t orig_size;
jsize array_len;
} DBT_LOCKED;
+static int __dbj_dbt_memcopy(DBT *dbt, u_int32_t offset, void *buf, u_int32_t size, u_int32_t flags) {
+ DBT_LOCKED *ldbt = dbt->app_data;
+ JNIEnv *jenv = ldbt->jenv;
+
+ if (size == 0)
+ return (0);
+ else if (!F_ISSET(dbt, DB_DBT_USERCOPY)) {
+ /*
+ * For simplicity, the Java API calls this function directly,
+ * so it needs to work with regular DBTs.
+ */
+ switch (flags) {
+ case DB_USERCOPY_GETDATA:
+ memcpy(buf, (u_int8_t *)dbt->data + offset, size);
+ return (0);
+ case DB_USERCOPY_SETDATA:
+ memcpy((u_int8_t *)dbt->data + offset, buf, size);
+ return (0);
+ default:
+ return (EINVAL);
+ }
+ }
+
+ switch (flags) {
+ case DB_USERCOPY_GETDATA:
+ (*jenv)->GetByteArrayRegion(jenv, ldbt->jarr, ldbt->offset +
+ offset, size, buf);
+ break;
+ case DB_USERCOPY_SETDATA:
+ /*
+ * Check whether this is the first time through the callback by relying
+ * on the offset being zero.
+ */
+ if (offset == 0 && (!ldbt->reuse ||
+ (jsize)(ldbt->offset + dbt->size) > ldbt->array_len)) {
+ if (ldbt->jarr != NULL)
+ (*jenv)->DeleteLocalRef(jenv, ldbt->jarr);
+ ldbt->jarr = (*jenv)->NewByteArray(jenv, (jsize)dbt->size);
+ if (ldbt->jarr == NULL)
+ return (ENOMEM);
+ (*jenv)->SetObjectField(jenv, ldbt->jdbt, dbt_data_fid, ldbt->jarr);
+ /* We've allocated a new array, start from the beginning. */
+ ldbt->offset = 0;
+ }
+ (*jenv)->SetByteArrayRegion(jenv, ldbt->jarr, ldbt->offset +
+ offset, size, buf);
+ break;
+ default:
+ return (EINVAL);
+ }
+ return ((*jenv)->ExceptionOccurred(jenv) ? EINVAL : 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_offset_fid, 0);
+ (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
+ if (jarr != NULL)
+ *jarr = newarr;
+ else
+ (*jenv)->DeleteLocalRef(jenv, newarr);
+}
+
static int __dbj_dbt_copyin(
JNIEnv *jenv, DBT_LOCKED *ldbt, DBT **dbtp, jobject jdbt, int allow_null)
{
DBT *dbt;
+ jlong capacity;
memset(ldbt, 0, sizeof (*ldbt));
+ ldbt->jenv = jenv;
+ ldbt->jdbt = jdbt;
if (jdbt == NULL) {
if (allow_null) {
@@ -53,52 +132,64 @@ static int __dbj_dbt_copyin(
"DatabaseEntry must not be null", NULL, NULL));
}
}
-
+
dbt = &ldbt->dbt;
if (dbtp != NULL)
*dbtp = dbt;
-
- ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv,
- jdbt, dbt_data_fid);
- ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
+ ldbt->jdata_nio = (*jenv)->GetObjectField(jenv, jdbt, dbt_data_nio_fid);
+ if (ldbt->jdata_nio != NULL)
+ F_SET(dbt, DB_DBT_USERMEM);
+ else
+ ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv, jdbt, dbt_data_fid);
+ ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
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);
+ if (F_ISSET(dbt, DB_DBT_USERMEM))
+ dbt->ulen = (*jenv)->GetIntField(jenv, jdbt, dbt_ulen_fid);
+ if (F_ISSET(dbt, DB_DBT_PARTIAL)) {
+ dbt->dlen = (*jenv)->GetIntField(jenv, jdbt, dbt_dlen_fid);
+ dbt->doff = (*jenv)->GetIntField(jenv, jdbt, dbt_doff_fid);
+
+ if ((jint)dbt->doff < 0)
+ return (__dbj_throw(jenv, EINVAL, "DatabaseEntry doff illegal",
+ NULL, NULL));
+ }
+
/*
* We don't support DB_DBT_REALLOC - map anything that's not USERMEM to
* MALLOC.
*/
if (!F_ISSET(dbt, DB_DBT_USERMEM)) {
ldbt->reuse = !F_ISSET(dbt, DB_DBT_MALLOC);
- F_CLR(dbt, DB_DBT_REALLOC);
- F_SET(dbt, DB_DBT_MALLOC);
+ F_CLR(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC);
}
/* Verify parameters before allocating or locking data. */
- if ((jint)dbt->doff < 0)
- return (__dbj_throw(jenv, EINVAL, "DatabaseEntry doff illegal",
- NULL, NULL));
-
- if (ldbt->jarr == NULL) {
+ if (ldbt->jdata_nio != NULL) {
+ capacity = (*jenv)->GetDirectBufferCapacity(jenv,
+ ldbt->jdata_nio);
+ if (capacity > (jlong)UINT32_MAX)
+ return (__dbj_throw(jenv, EINVAL,
+ "DirectBuffer may not be larger than 4GB",
+ NULL, NULL));
+ ldbt->array_len = (u_int32_t)capacity;
+ } else if (ldbt->jarr == NULL) {
/*
* Some code makes the assumption that if a DBT's size or ulen
- * is non-zero, there is data to copy from dbt->data.
+ * is non-zero, there is data to copy from dbt->data.
*
* Clean up the dbt fields so we don't run into trouble.
* (Note that doff, dlen, and flags all may contain
* meaningful values.)
*/
- ldbt->orig_data = dbt->data = NULL;
+ dbt->data = NULL;
ldbt->array_len = ldbt->offset = dbt->size = dbt->ulen = 0;
- return (0);
} else
ldbt->array_len = (*jenv)->GetArrayLength(jenv, ldbt->jarr);
-
+
if (F_ISSET(dbt, DB_DBT_USERMEM)) {
if (ldbt->offset < 0)
return (__dbj_throw(jenv, EINVAL,
@@ -112,56 +203,39 @@ static int __dbj_dbt_copyin(
return (__dbj_throw(jenv, EINVAL,
"offset + ulen greater than array length",
NULL, NULL));
- if ((ldbt->orig_data = (*jenv)->GetByteArrayElements(jenv,
+ }
+
+ if (ldbt->jdata_nio) {
+ dbt->data = (*jenv)->GetDirectBufferAddress(jenv,
+ ldbt->jdata_nio);
+ dbt->data = (u_int8_t *)dbt->data + ldbt->offset;
+ } else if (F_ISSET(dbt, DB_DBT_USERMEM)) {
+ if (ldbt->jarr != NULL &&
+ (dbt->data = (*jenv)->GetByteArrayElements(jenv,
ldbt->jarr, NULL)) == NULL)
return (EINVAL); /* an exception will be pending */
- dbt->data = ldbt->orig_data + ldbt->offset;
- } else {
- if (__os_umalloc(NULL, dbt->size, &dbt->data) != 0)
- return (ENOMEM);
- ldbt->orig_data = dbt->data;
- (*jenv)->GetByteArrayRegion(jenv,
- ldbt->jarr, ldbt->offset, dbt->size, dbt->data);
- if ((*jenv)->ExceptionOccurred(jenv)) {
- (void)__os_ufree(NULL, dbt->data);
- return (EINVAL);
- }
- }
+ dbt->data = (u_int8_t *)dbt->data + ldbt->offset;
+ } else
+ F_SET(dbt, DB_DBT_USERCOPY);
+ dbt->app_data = ldbt;
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_offset_fid, 0);
- (*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 (dbt == NULL)
return;
-
+
if (dbt->size != ldbt->orig_size)
(*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
-
+
if (F_ISSET(dbt, DB_DBT_USERMEM)) {
- if (ldbt->jarr != NULL)
- (*jenv)->ReleaseByteArrayElements(jenv,
- ldbt->jarr, ldbt->orig_data, 0);
+ if (ldbt->jarr != NULL)
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt->jarr,
+ (jbyte *)dbt->data - ldbt->offset, 0);
if (dbt->size > dbt->ulen &&
(t = (*jenv)->ExceptionOccurred(jenv)) != NULL &&
@@ -174,59 +248,56 @@ static void __dbj_dbt_release(
*/
(*jenv)->Throw(jenv, t);
}
- } else {
- if (dbt->size > 0 && dbt->data != ldbt->orig_data) {
- if (ldbt->reuse &&
- (jsize)(ldbt->offset + dbt->size) <= ldbt->array_len)
- (*jenv)->SetByteArrayRegion(jenv,
- ldbt->jarr, ldbt->offset, (jsize)dbt->size,
- (jbyte *)dbt->data);
- else
- __dbj_dbt_copyout(jenv, dbt, NULL, jdbt);
- (void)__os_ufree(NULL, dbt->data);
- }
-
- if (ldbt->orig_data != NULL)
- (void)__os_ufree(NULL, ldbt->orig_data);
}
}
%}
%typemap(in) DBT * (DBT_LOCKED ldbt) %{
if (__dbj_dbt_copyin(jenv, &ldbt, &$1, $input, 0) != 0) {
- return $null;
+ return $null; /* An exception will be pending. */
}%}
-/* Special case for the cdata param in DbEnv.rep_start - it may be null */
-%typemap(in) DBT *cdata (DBT_LOCKED ldbt) %{
+/* Special cases for DBTs that may be null: DbEnv.rep_start and Db.compact */
+%typemap(in) DBT *data_or_null (DBT_LOCKED ldbt) %{
if (__dbj_dbt_copyin(jenv, &ldbt, &$1, $input, 1) != 0) {
- return $null;
+ return $null; /* An exception will be pending. */
}%}
-%typemap(freearg) DBT * %{ __dbj_dbt_release(jenv, $input, $1, &ldbt$argnum); %}
+%apply DBT *data_or_null {DBT *cdata, DBT *start, DBT *stop, DBT *end};
+%typemap(freearg) DBT * %{ __dbj_dbt_release(jenv, $input, $1, &ldbt$argnum); %}
/* DbLsn handling */
JAVA_TYPEMAP(DB_LSN *, com.sleepycat.db.LogSequenceNumber, jobject)
+%typemap(check) DB_LSN *lsn_or_null ""
+
%typemap(check) DB_LSN * %{
- if ($input == NULL) {
- __dbj_throw(jenv, EINVAL, "LogSequenceNumber must not be null", NULL, NULL);
+ if ($1 == NULL) {
+ __dbj_throw(jenv, EINVAL, "null LogSequenceNumber", NULL, NULL);
return $null;
}
%}
%typemap(in) DB_LSN * (DB_LSN lsn) %{
- /* XXX: TODO */
- $1 = &lsn;
+ if ($input == NULL) {
+ $1 = NULL;
+ } else {
+ $1 = &lsn;
+ $1->file = (*jenv)->GetIntField(jenv, $input, dblsn_file_fid);
+ $1->offset = (*jenv)->GetIntField(jenv, $input,
+ dblsn_offset_fid);
+ }
%}
%typemap(freearg) DB_LSN * %{
- /* XXX: TODO */
- /* -- __dbj_dbt_release(jenv, $input, $1, &lsn$argnum); */
+ if ($input != NULL) {
+ (*jenv)->SetIntField(jenv, $input, dblsn_file_fid, $1->file);
+ (*jenv)->SetIntField(jenv, $input,
+ dblsn_offset_fid, $1->offset);
+ }
%}
-
/* Various typemaps */
JAVA_TYPEMAP(time_t, long, jlong)
JAVA_TYPEMAP(time_t *, long, jlong)
@@ -235,15 +306,6 @@ JAVA_TYPEMAP(time_t *, long, jlong)
$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 *, com.sleepycat.db.KeyRange, jobject)
%typemap(in) DB_KEY_RANGE * (DB_KEY_RANGE range) {
$1 = &range;
@@ -257,7 +319,7 @@ JAVA_TYPEMAP(DB_KEY_RANGE *, com.sleepycat.db.KeyRange, jobject)
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);
@@ -274,7 +336,7 @@ JAVA_TYPEMAP(DBC **, Dbc[], jobjectArray)
} else {
jlong jptr = (*jenv)->GetLongField(jenv, jobj,
dbc_cptr_fid);
- $1[i] = *(DBC **)&jptr;
+ $1[i] = *(DBC **)(void *)&jptr;
}
}
$1[count] = NULL;
@@ -288,7 +350,8 @@ 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);
+ "DbTxn.prepare gid array must be >= 128 bytes", NULL,
+ TXN2JDBENV);
return $null;
}
%}
@@ -303,7 +366,7 @@ JAVA_TYPEMAP(u_int8_t *gid, byte[], jbyteArray)
%define STRING_ARRAY_OUT
int i, len;
-
+
len = 0;
while ($1[len] != NULL)
len++;
@@ -318,12 +381,12 @@ JAVA_TYPEMAP(u_int8_t *gid, byte[], jbyteArray)
JAVA_TYPEMAP(char **, String[], jobjectArray)
%typemap(out) const char ** {
- if($1 != NULL) {
+ if ($1 != NULL) {
STRING_ARRAY_OUT
}
}
%typemap(out) char ** {
- if($1 != NULL) {
+ if ($1 != NULL) {
STRING_ARRAY_OUT
__os_ufree(NULL, $1);
}
@@ -357,7 +420,7 @@ JAVA_TYPEMAP(struct __db_lk_conflicts, byte[][], jobjectArray)
%typemap(out) struct __db_lk_conflicts {
int i;
jbyteArray bytes;
-
+
$result = (*jenv)->NewObjectArray(jenv,
(jsize)$1.lk_modes, bytearray_class, NULL);
if ($result == NULL)
@@ -423,10 +486,11 @@ JAVA_TYPEMAP(struct __db_out_stream, java.io.OutputStream, jobject)
$1.callback = __dbj_verify_callback;
}
-JAVA_TYPEMAP(DB_PREPLIST *, com.sleepycat.db.PreparedTransaction[], jobjectArray)
+JAVA_TYPEMAP(DB_PREPLIST *, com.sleepycat.db.PreparedTransaction[],
+ jobjectArray)
%typemap(out) DB_PREPLIST * {
int i, len;
-
+
len = 0;
while ($1[len].txn != NULL)
len++;
@@ -457,15 +521,17 @@ JAVA_TYPEMAP(DB_LOCKREQ *, com.sleepycat.db.LockRequest[], 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_internal_db_1javaJNI_DbEnv_1lock_1vec
- (JNIEnv *jenv, jclass jcls, jlong jdbenvp, jint locker,
- jint flags, jobjectArray list, jint offset, jint count) {
+JNIEXPORT void JNICALL
+Java_com_sleepycat_db_internal_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;
+ DBT *obj;
int err, alloc_err, i;
size_t bytesize, ldbtsize;
jobject jlockreq;
@@ -475,7 +541,7 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
int completed;
COMPQUIET(jcls, NULL);
- dbenv = *(DB_ENV **)&jdbenvp;
+ dbenv = *(DB_ENV **)(void *)&jdbenvp;
jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
if (dbenv == NULL) {
@@ -529,8 +595,13 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
jobj = (*jenv)->GetObjectField(jenv, jlockreq,
lockreq_obj_fid);
if ((err = __dbj_dbt_copyin(jenv,
- &locked_dbts[i], &prereq->obj, jobj, 0)) != 0)
+ &locked_dbts[i], &obj, jobj, 0)) != 0 ||
+ (err =
+ __os_umalloc(dbenv, obj->size, &obj->data)) != 0 ||
+ (err = __dbj_dbt_memcopy(obj, 0,
+ obj->data, obj->size, DB_USERCOPY_GETDATA)) != 0)
goto out2;
+ prereq->obj = obj;
break;
case DB_LOCK_PUT:
/* Needed: lock. Ignored: mode, obj. */
@@ -540,10 +611,11 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
(jlockp = (*jenv)->GetLongField(jenv, jlock,
lock_cptr_fid)) == 0L) {
__dbj_throw(jenv, EINVAL,
- "LockRequest lock field is NULL", NULL, jdbenv);
+ "LockRequest lock field is NULL", NULL,
+ jdbenv);
goto out2;
}
- lockp = *(DB_LOCK **)&jlockp;
+ lockp = *(DB_LOCK **)(void *)&jlockp;
prereq->lock = *lockp;
break;
case DB_LOCK_PUT_ALL:
@@ -555,8 +627,13 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
jobj = (*jenv)->GetObjectField(jenv, jlockreq,
lockreq_obj_fid);
if ((err = __dbj_dbt_copyin(jenv,
- &locked_dbts[i], &prereq->obj, jobj, 0)) != 0)
+ &locked_dbts[i], &obj, jobj, 0)) != 0 ||
+ (err =
+ __os_umalloc(dbenv, obj->size, &obj->data)) != 0 ||
+ (err = __dbj_dbt_memcopy(obj, 0,
+ obj->data, obj->size, DB_USERCOPY_GETDATA)) != 0)
goto out2;
+ prereq->obj = obj;
break;
default:
__dbj_throw(jenv, EINVAL,
@@ -586,7 +663,7 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
lockreq_lock_fid);
jlockp = (*jenv)->GetLongField(jenv, jlock,
lock_cptr_fid);
- lockp = *(DB_LOCK **)&jlockp;
+ lockp = *(DB_LOCK **)(void *)&jlockp;
__os_free(NULL, lockp);
(*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
(jlong)0);
@@ -599,12 +676,13 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
*/
if ((alloc_err =
__os_malloc(dbenv, sizeof(DB_LOCK), &lockp)) != 0) {
- __dbj_throw(jenv, alloc_err, NULL, NULL, jdbenv);
+ __dbj_throw(jenv, alloc_err, NULL, NULL,
+ jdbenv);
goto out2;
}
*lockp = lockreq[i].lock;
- *(DB_LOCK **)&jlockp = lockp;
+ *(DB_LOCK **)(void *)&jlockp = lockp;
jlockreq = (*jenv)->GetObjectArrayElement(jenv,
list, i + offset);
@@ -634,28 +712,56 @@ JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1v
} 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);
+out2: __os_free(dbenv, locked_dbts);
+out1: for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++)
+ if ((prereq->op == DB_LOCK_GET || prereq->op == DB_LOCK_PUT) &&
+ prereq->obj->data != NULL)
+ __os_ufree(dbenv, prereq->obj->data);
+ __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);
+ id = (*jenv)->GetIntField(jenv, $input, rep_processmsg_envid_fid);
$1 = &id;
%}
%typemap(argout) int *envid %{
- (*jenv)->SetIntField(jenv, $input, rep_processmsg_envid, *$1);
+ (*jenv)->SetIntField(jenv, $input, rep_processmsg_envid_fid, *$1);
%}
+JAVA_TYPEMAP(struct __db_repmgr_sites,
+ com.sleepycat.db.ReplicationHostAddress[], jobjectArray)
+%typemap(out) struct __db_repmgr_sites
+{
+ int i, len;
+
+ len = $1.nsites;
+ $result = (*jenv)->NewObjectArray(jenv, (jsize)len, rephost_class,
+ NULL);
+ if ($result == NULL)
+ return $null; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jobject jrep_addr = (*jenv)->NewObject(jenv,
+ rephost_class, rephost_construct);
+
+ (*jenv)->SetObjectField(jenv, jrep_addr, rephost_host_fid,
+ (*jenv)->NewStringUTF(jenv, $1.sites[i].host));
+ (*jenv)->SetIntField(jenv, jrep_addr, rephost_port_fid,
+ $1.sites[i].port);
+ (*jenv)->SetIntField(jenv, jrep_addr, rephost_eid_fid,
+ $1.sites[i].eid);
+ (*jenv)->SetIntField(jenv, jrep_addr, rephost_status_fid,
+ $1.sites[i].status);
+
+ if (jrep_addr == NULL)
+ return $null; /* An exception is pending */
+
+ (*jenv)->SetObjectArrayElement(jenv, $result, i, jrep_addr);
+ }
+ __os_ufree(NULL, $1.sites);
+}
+
JAVA_TYPEMAP(void *, Object, jobject)
diff --git a/db/libdb_java/java_util.i b/db/libdb_java/java_util.i
index 22688813b..2a9c27c45 100644
--- a/db/libdb_java/java_util.i
+++ b/db/libdb_java/java_util.i
@@ -3,9 +3,11 @@
/* An alternate library name can be specified via a property. */
String libname;
- if ((libname = System.getProperty("sleepycat.db.libfile")) != null)
+ if ((libname =
+ System.getProperty("sleepycat.db.libfile")) != null)
System.load(libname);
- else if ((libname = System.getProperty("sleepycat.db.libname")) != null)
+ else if ((libname =
+ System.getProperty("sleepycat.db.libname")) != null)
System.loadLibrary(libname);
else {
String os = System.getProperty("os.name");
@@ -40,11 +42,12 @@
}
initialize();
-
+
if (DbEnv_get_version_major() != DbConstants.DB_VERSION_MAJOR ||
DbEnv_get_version_minor() != DbConstants.DB_VERSION_MINOR ||
DbEnv_get_version_patch() != DbConstants.DB_VERSION_PATCH)
- throw new RuntimeException("Berkeley DB library version doesn't match Java classes");
+ throw new RuntimeException(
+ "Berkeley DB library version doesn't match Java classes");
}
static native final void initialize();
@@ -69,24 +72,31 @@ 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 bt_stat_class, h_stat_class, lock_stat_class;
+static jclass bt_stat_class, compact_class, h_stat_class, lock_stat_class;
static jclass log_stat_class, mpool_stat_class, mpool_fstat_class;
-static jclass qam_stat_class, rep_stat_class, seq_stat_class, txn_stat_class;
+static jclass mutex_stat_class, qam_stat_class, rep_stat_class;
+static jclass rephost_class, seq_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 rephandledeadex_class, runrecex_class;
+static jclass repdupmasterex_class, rephandledeadex_class;
+static jclass repholdelectionex_class, repjoinfailex_class, replockoutex_class;
+static jclass repunavailex_class;
+static jclass runrecex_class, versionex_class;
static jclass filenotfoundex_class, illegalargex_class, outofmemerr_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 dblsn_file_fid, dblsn_offset_fid;
+static jfieldID dbt_data_fid, dbt_data_nio_fid, dbt_size_fid, dbt_ulen_fid;
+static jfieldID dbt_dlen_fid, 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_modeflag_fid, lockreq_timeout_fid;
static jfieldID lockreq_obj_fid, lockreq_lock_fid;
-static jfieldID rep_processmsg_envid;
+static jfieldID rep_processmsg_envid_fid;
+static jfieldID rephost_port_fid, rephost_host_fid, rephost_eid_fid;
+static jfieldID rephost_status_fid;
/* BEGIN-STAT-FIELD-DECLS */
static jfieldID bt_stat_bt_magic_fid;
@@ -95,7 +105,6 @@ static jfieldID bt_stat_bt_metaflags_fid;
static jfieldID bt_stat_bt_nkeys_fid;
static jfieldID bt_stat_bt_ndata_fid;
static jfieldID bt_stat_bt_pagesize_fid;
-static jfieldID bt_stat_bt_maxkey_fid;
static jfieldID bt_stat_bt_minkey_fid;
static jfieldID bt_stat_bt_re_len_fid;
static jfieldID bt_stat_bt_re_pad_fid;
@@ -110,6 +119,15 @@ static jfieldID bt_stat_bt_int_pgfree_fid;
static jfieldID bt_stat_bt_leaf_pgfree_fid;
static jfieldID bt_stat_bt_dup_pgfree_fid;
static jfieldID bt_stat_bt_over_pgfree_fid;
+static jfieldID compact_compact_fillpercent_fid;
+static jfieldID compact_compact_timeout_fid;
+static jfieldID compact_compact_pages_fid;
+static jfieldID compact_compact_pages_free_fid;
+static jfieldID compact_compact_pages_examine_fid;
+static jfieldID compact_compact_levels_fid;
+static jfieldID compact_compact_deadlock_fid;
+static jfieldID compact_compact_pages_truncated_fid;
+static jfieldID compact_compact_truncate_fid;
static jfieldID h_stat_hash_magic_fid;
static jfieldID h_stat_hash_version_fid;
static jfieldID h_stat_hash_metaflags_fid;
@@ -138,10 +156,12 @@ static jfieldID lock_stat_st_nlockers_fid;
static jfieldID lock_stat_st_maxnlockers_fid;
static jfieldID lock_stat_st_nobjects_fid;
static jfieldID lock_stat_st_maxnobjects_fid;
-static jfieldID lock_stat_st_nconflicts_fid;
static jfieldID lock_stat_st_nrequests_fid;
static jfieldID lock_stat_st_nreleases_fid;
-static jfieldID lock_stat_st_nnowaits_fid;
+static jfieldID lock_stat_st_nupgrade_fid;
+static jfieldID lock_stat_st_ndowngrade_fid;
+static jfieldID lock_stat_st_lock_wait_fid;
+static jfieldID lock_stat_st_lock_nowait_fid;
static jfieldID lock_stat_st_ndeadlocks_fid;
static jfieldID lock_stat_st_locktimeout_fid;
static jfieldID lock_stat_st_nlocktimeouts_fid;
@@ -155,12 +175,14 @@ static jfieldID log_stat_st_version_fid;
static jfieldID log_stat_st_mode_fid;
static jfieldID log_stat_st_lg_bsize_fid;
static jfieldID log_stat_st_lg_size_fid;
+static jfieldID log_stat_st_record_fid;
static jfieldID log_stat_st_w_bytes_fid;
static jfieldID log_stat_st_w_mbytes_fid;
static jfieldID log_stat_st_wc_bytes_fid;
static jfieldID log_stat_st_wc_mbytes_fid;
static jfieldID log_stat_st_wcount_fid;
static jfieldID log_stat_st_wcount_fill_fid;
+static jfieldID log_stat_st_rcount_fid;
static jfieldID log_stat_st_scount_fid;
static jfieldID log_stat_st_region_wait_fid;
static jfieldID log_stat_st_region_nowait_fid;
@@ -205,14 +227,28 @@ static jfieldID mpool_stat_st_hash_longest_fid;
static jfieldID mpool_stat_st_hash_examined_fid;
static jfieldID mpool_stat_st_hash_nowait_fid;
static jfieldID mpool_stat_st_hash_wait_fid;
+static jfieldID mpool_stat_st_hash_max_nowait_fid;
static jfieldID mpool_stat_st_hash_max_wait_fid;
static jfieldID mpool_stat_st_region_nowait_fid;
static jfieldID mpool_stat_st_region_wait_fid;
+static jfieldID mpool_stat_st_mvcc_frozen_fid;
+static jfieldID mpool_stat_st_mvcc_thawed_fid;
+static jfieldID mpool_stat_st_mvcc_freed_fid;
static jfieldID mpool_stat_st_alloc_fid;
static jfieldID mpool_stat_st_alloc_buckets_fid;
static jfieldID mpool_stat_st_alloc_max_buckets_fid;
static jfieldID mpool_stat_st_alloc_pages_fid;
static jfieldID mpool_stat_st_alloc_max_pages_fid;
+static jfieldID mpool_stat_st_io_wait_fid;
+static jfieldID mutex_stat_st_mutex_align_fid;
+static jfieldID mutex_stat_st_mutex_tas_spins_fid;
+static jfieldID mutex_stat_st_mutex_cnt_fid;
+static jfieldID mutex_stat_st_mutex_free_fid;
+static jfieldID mutex_stat_st_mutex_inuse_fid;
+static jfieldID mutex_stat_st_mutex_inuse_max_fid;
+static jfieldID mutex_stat_st_region_wait_fid;
+static jfieldID mutex_stat_st_region_nowait_fid;
+static jfieldID mutex_stat_st_regsize_fid;
static jfieldID qam_stat_qs_magic_fid;
static jfieldID qam_stat_qs_version_fid;
static jfieldID qam_stat_qs_metaflags_fid;
@@ -234,6 +270,13 @@ static jfieldID rep_stat_st_waiting_pg_fid;
static jfieldID rep_stat_st_dupmasters_fid;
static jfieldID rep_stat_st_env_id_fid;
static jfieldID rep_stat_st_env_priority_fid;
+static jfieldID rep_stat_st_bulk_fills_fid;
+static jfieldID rep_stat_st_bulk_overflows_fid;
+static jfieldID rep_stat_st_bulk_records_fid;
+static jfieldID rep_stat_st_bulk_transfers_fid;
+static jfieldID rep_stat_st_client_rerequests_fid;
+static jfieldID rep_stat_st_client_svc_req_fid;
+static jfieldID rep_stat_st_client_svc_miss_fid;
static jfieldID rep_stat_st_gen_fid;
static jfieldID rep_stat_st_egen_fid;
static jfieldID rep_stat_st_log_duplicated_fid;
@@ -269,6 +312,8 @@ static jfieldID rep_stat_st_election_priority_fid;
static jfieldID rep_stat_st_election_status_fid;
static jfieldID rep_stat_st_election_tiebreaker_fid;
static jfieldID rep_stat_st_election_votes_fid;
+static jfieldID rep_stat_st_election_sec_fid;
+static jfieldID rep_stat_st_election_usec_fid;
static jfieldID seq_stat_st_wait_fid;
static jfieldID seq_stat_st_nowait_fid;
static jfieldID seq_stat_st_current_fid;
@@ -286,35 +331,49 @@ static jfieldID txn_stat_st_naborts_fid;
static jfieldID txn_stat_st_nbegins_fid;
static jfieldID txn_stat_st_ncommits_fid;
static jfieldID txn_stat_st_nactive_fid;
+static jfieldID txn_stat_st_nsnapshot_fid;
static jfieldID txn_stat_st_nrestores_fid;
static jfieldID txn_stat_st_maxnactive_fid;
+static jfieldID txn_stat_st_maxnsnapshot_fid;
static jfieldID txn_stat_st_txnarray_fid;
static jfieldID txn_stat_st_region_wait_fid;
static jfieldID txn_stat_st_region_nowait_fid;
static jfieldID txn_stat_st_regsize_fid;
static jfieldID txn_active_txnid_fid;
static jfieldID txn_active_parentid_fid;
+static jfieldID txn_active_pid_fid;
static jfieldID txn_active_lsn_fid;
+static jfieldID txn_active_read_lsn_fid;
+static jfieldID txn_active_mvcc_ref_fid;
+static jfieldID txn_active_status_fid;
static jfieldID txn_active_xa_status_fid;
static jfieldID txn_active_xid_fid;
+static jfieldID txn_active_name_fid;
/* END-STAT-FIELD-DECLS */
static jmethodID dbenv_construct, dbt_construct, dblsn_construct;
static jmethodID dbpreplist_construct, dbtxn_construct;
static jmethodID bt_stat_construct, h_stat_construct;
-static jmethodID lock_stat_construct, log_stat_construct, mpool_stat_construct;
-static jmethodID mpool_fstat_construct, qam_stat_construct;
+static jmethodID lock_stat_construct, log_stat_construct;
+static jmethodID mpool_stat_construct, mpool_fstat_construct;
+static jmethodID mutex_stat_construct, qam_stat_construct;
static jmethodID rep_stat_construct, seq_stat_construct;
static jmethodID txn_stat_construct, txn_active_construct;
static jmethodID dbex_construct, deadex_construct, lockex_construct;
static jmethodID memex_construct, memex_update_method;
-static jmethodID rephandledeadex_construct, runrecex_construct;
+static jmethodID repdupmasterex_construct, rephandledeadex_construct;
+static jmethodID repholdelectionex_construct, repjoinfailex_construct;
+static jmethodID rephost_construct;
+static jmethodID replockoutex_construct, repunavailex_construct;
+static jmethodID runrecex_construct, versionex_construct;
static jmethodID filenotfoundex_construct, illegalargex_construct;
static jmethodID outofmemerr_construct;
static jmethodID lock_construct;
static jmethodID app_dispatch_method, errcall_method, env_feedback_method;
static jmethodID msgcall_method, paniccall_method, rep_transport_method;
+static jmethodID event_notify_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;
@@ -334,11 +393,13 @@ const struct {
{ &dbtxn_class, DB_PKG "internal/DbTxn" },
{ &bt_stat_class, DB_PKG "BtreeStats" },
+ { &compact_class, DB_PKG "CompactStats" },
{ &h_stat_class, DB_PKG "HashStats" },
{ &lock_stat_class, DB_PKG "LockStats" },
{ &log_stat_class, DB_PKG "LogStats" },
{ &mpool_fstat_class, DB_PKG "CacheFileStats" },
{ &mpool_stat_class, DB_PKG "CacheStats" },
+ { &mutex_stat_class, DB_PKG "MutexStats" },
{ &qam_stat_class, DB_PKG "QueueStats" },
{ &rep_stat_class, DB_PKG "ReplicationStats" },
{ &seq_stat_class, DB_PKG "SequenceStats" },
@@ -349,13 +410,21 @@ const struct {
{ &lock_class, DB_PKG "internal/DbLock" },
{ &lockreq_class, DB_PKG "LockRequest" },
{ &rep_processmsg_class, DB_PKG "internal/DbEnv$RepProcessMessage" },
+ { &rep_processmsg_class, DB_PKG "internal/DbEnv$RepProcessMessage" },
{ &dbex_class, DB_PKG "DatabaseException" },
{ &deadex_class, DB_PKG "DeadlockException" },
{ &lockex_class, DB_PKG "LockNotGrantedException" },
{ &memex_class, DB_PKG "MemoryException" },
+ { &repdupmasterex_class, DB_PKG "ReplicationDuplicateMasterException" },
{ &rephandledeadex_class, DB_PKG "ReplicationHandleDeadException" },
+ { &repholdelectionex_class, DB_PKG "ReplicationHoldElectionException" },
+ { &rephost_class, DB_PKG "ReplicationHostAddress" },
+ { &repjoinfailex_class, DB_PKG "ReplicationJoinFailureException" },
+ { &replockoutex_class, DB_PKG "ReplicationLockoutException" },
+ { &repunavailex_class, DB_PKG "ReplicationSiteUnavailableException" },
{ &runrecex_class, DB_PKG "RunRecoveryException" },
+ { &versionex_class, DB_PKG "VersionMismatchException" },
{ &filenotfoundex_class, "java/io/FileNotFoundException" },
{ &illegalargex_class, "java/lang/IllegalArgumentException" },
{ &outofmemerr_class, "java/lang/OutOfMemoryError" },
@@ -372,8 +441,12 @@ const struct {
const char *sig;
} all_fields[] = {
{ &dbc_cptr_fid, &dbc_class, "swigCPtr", "J" },
-
+
+ { &dblsn_file_fid, &dblsn_class, "file", "I" },
+ { &dblsn_offset_fid, &dblsn_class, "offset", "I" },
+
{ &dbt_data_fid, &dbt_class, "data", "[B" },
+ { &dbt_data_nio_fid, &dbt_class, "data_nio", "Ljava/nio/ByteBuffer;" },
{ &dbt_size_fid, &dbt_class, "size", "I" },
{ &dbt_ulen_fid, &dbt_class, "ulen", "I" },
{ &dbt_dlen_fid, &dbt_class, "dlen", "I" },
@@ -390,8 +463,10 @@ const struct {
{ &lockreq_op_fid, &lockreq_class, "op", "I" },
{ &lockreq_modeflag_fid, &lockreq_class, "modeFlag", "I" },
{ &lockreq_timeout_fid, &lockreq_class, "timeout", "I" },
- { &lockreq_obj_fid, &lockreq_class, "obj", "L" DB_PKG "DatabaseEntry;" },
- { &lockreq_lock_fid, &lockreq_class, "lock", "L" DB_PKG "internal/DbLock;" },
+ { &lockreq_obj_fid, &lockreq_class, "obj",
+ "L" DB_PKG "DatabaseEntry;" },
+ { &lockreq_lock_fid, &lockreq_class, "lock",
+ "L" DB_PKG "internal/DbLock;" },
/* BEGIN-STAT-FIELDS */
{ &bt_stat_bt_magic_fid, &bt_stat_class, "bt_magic", "I" },
@@ -400,7 +475,6 @@ const struct {
{ &bt_stat_bt_nkeys_fid, &bt_stat_class, "bt_nkeys", "I" },
{ &bt_stat_bt_ndata_fid, &bt_stat_class, "bt_ndata", "I" },
{ &bt_stat_bt_pagesize_fid, &bt_stat_class, "bt_pagesize", "I" },
- { &bt_stat_bt_maxkey_fid, &bt_stat_class, "bt_maxkey", "I" },
{ &bt_stat_bt_minkey_fid, &bt_stat_class, "bt_minkey", "I" },
{ &bt_stat_bt_re_len_fid, &bt_stat_class, "bt_re_len", "I" },
{ &bt_stat_bt_re_pad_fid, &bt_stat_class, "bt_re_pad", "I" },
@@ -415,6 +489,15 @@ const struct {
{ &bt_stat_bt_leaf_pgfree_fid, &bt_stat_class, "bt_leaf_pgfree", "I" },
{ &bt_stat_bt_dup_pgfree_fid, &bt_stat_class, "bt_dup_pgfree", "I" },
{ &bt_stat_bt_over_pgfree_fid, &bt_stat_class, "bt_over_pgfree", "I" },
+ { &compact_compact_fillpercent_fid, &compact_class, "compact_fillpercent", "I" },
+ { &compact_compact_timeout_fid, &compact_class, "compact_timeout", "I" },
+ { &compact_compact_pages_fid, &compact_class, "compact_pages", "I" },
+ { &compact_compact_pages_free_fid, &compact_class, "compact_pages_free", "I" },
+ { &compact_compact_pages_examine_fid, &compact_class, "compact_pages_examine", "I" },
+ { &compact_compact_levels_fid, &compact_class, "compact_levels", "I" },
+ { &compact_compact_deadlock_fid, &compact_class, "compact_deadlock", "I" },
+ { &compact_compact_pages_truncated_fid, &compact_class, "compact_pages_truncated", "I" },
+ { &compact_compact_truncate_fid, &compact_class, "compact_truncate", "I" },
{ &h_stat_hash_magic_fid, &h_stat_class, "hash_magic", "I" },
{ &h_stat_hash_version_fid, &h_stat_class, "hash_version", "I" },
{ &h_stat_hash_metaflags_fid, &h_stat_class, "hash_metaflags", "I" },
@@ -443,10 +526,12 @@ const struct {
{ &lock_stat_st_maxnlockers_fid, &lock_stat_class, "st_maxnlockers", "I" },
{ &lock_stat_st_nobjects_fid, &lock_stat_class, "st_nobjects", "I" },
{ &lock_stat_st_maxnobjects_fid, &lock_stat_class, "st_maxnobjects", "I" },
- { &lock_stat_st_nconflicts_fid, &lock_stat_class, "st_nconflicts", "I" },
{ &lock_stat_st_nrequests_fid, &lock_stat_class, "st_nrequests", "I" },
{ &lock_stat_st_nreleases_fid, &lock_stat_class, "st_nreleases", "I" },
- { &lock_stat_st_nnowaits_fid, &lock_stat_class, "st_nnowaits", "I" },
+ { &lock_stat_st_nupgrade_fid, &lock_stat_class, "st_nupgrade", "I" },
+ { &lock_stat_st_ndowngrade_fid, &lock_stat_class, "st_ndowngrade", "I" },
+ { &lock_stat_st_lock_wait_fid, &lock_stat_class, "st_lock_wait", "I" },
+ { &lock_stat_st_lock_nowait_fid, &lock_stat_class, "st_lock_nowait", "I" },
{ &lock_stat_st_ndeadlocks_fid, &lock_stat_class, "st_ndeadlocks", "I" },
{ &lock_stat_st_locktimeout_fid, &lock_stat_class, "st_locktimeout", "I" },
{ &lock_stat_st_nlocktimeouts_fid, &lock_stat_class, "st_nlocktimeouts", "I" },
@@ -460,12 +545,14 @@ const struct {
{ &log_stat_st_mode_fid, &log_stat_class, "st_mode", "I" },
{ &log_stat_st_lg_bsize_fid, &log_stat_class, "st_lg_bsize", "I" },
{ &log_stat_st_lg_size_fid, &log_stat_class, "st_lg_size", "I" },
+ { &log_stat_st_record_fid, &log_stat_class, "st_record", "I" },
{ &log_stat_st_w_bytes_fid, &log_stat_class, "st_w_bytes", "I" },
{ &log_stat_st_w_mbytes_fid, &log_stat_class, "st_w_mbytes", "I" },
{ &log_stat_st_wc_bytes_fid, &log_stat_class, "st_wc_bytes", "I" },
{ &log_stat_st_wc_mbytes_fid, &log_stat_class, "st_wc_mbytes", "I" },
{ &log_stat_st_wcount_fid, &log_stat_class, "st_wcount", "I" },
{ &log_stat_st_wcount_fill_fid, &log_stat_class, "st_wcount_fill", "I" },
+ { &log_stat_st_rcount_fid, &log_stat_class, "st_rcount", "I" },
{ &log_stat_st_scount_fid, &log_stat_class, "st_scount", "I" },
{ &log_stat_st_region_wait_fid, &log_stat_class, "st_region_wait", "I" },
{ &log_stat_st_region_nowait_fid, &log_stat_class, "st_region_nowait", "I" },
@@ -510,14 +597,28 @@ const struct {
{ &mpool_stat_st_hash_examined_fid, &mpool_stat_class, "st_hash_examined", "I" },
{ &mpool_stat_st_hash_nowait_fid, &mpool_stat_class, "st_hash_nowait", "I" },
{ &mpool_stat_st_hash_wait_fid, &mpool_stat_class, "st_hash_wait", "I" },
+ { &mpool_stat_st_hash_max_nowait_fid, &mpool_stat_class, "st_hash_max_nowait", "I" },
{ &mpool_stat_st_hash_max_wait_fid, &mpool_stat_class, "st_hash_max_wait", "I" },
{ &mpool_stat_st_region_nowait_fid, &mpool_stat_class, "st_region_nowait", "I" },
{ &mpool_stat_st_region_wait_fid, &mpool_stat_class, "st_region_wait", "I" },
+ { &mpool_stat_st_mvcc_frozen_fid, &mpool_stat_class, "st_mvcc_frozen", "I" },
+ { &mpool_stat_st_mvcc_thawed_fid, &mpool_stat_class, "st_mvcc_thawed", "I" },
+ { &mpool_stat_st_mvcc_freed_fid, &mpool_stat_class, "st_mvcc_freed", "I" },
{ &mpool_stat_st_alloc_fid, &mpool_stat_class, "st_alloc", "I" },
{ &mpool_stat_st_alloc_buckets_fid, &mpool_stat_class, "st_alloc_buckets", "I" },
{ &mpool_stat_st_alloc_max_buckets_fid, &mpool_stat_class, "st_alloc_max_buckets", "I" },
{ &mpool_stat_st_alloc_pages_fid, &mpool_stat_class, "st_alloc_pages", "I" },
{ &mpool_stat_st_alloc_max_pages_fid, &mpool_stat_class, "st_alloc_max_pages", "I" },
+ { &mpool_stat_st_io_wait_fid, &mpool_stat_class, "st_io_wait", "I" },
+ { &mutex_stat_st_mutex_align_fid, &mutex_stat_class, "st_mutex_align", "I" },
+ { &mutex_stat_st_mutex_tas_spins_fid, &mutex_stat_class, "st_mutex_tas_spins", "I" },
+ { &mutex_stat_st_mutex_cnt_fid, &mutex_stat_class, "st_mutex_cnt", "I" },
+ { &mutex_stat_st_mutex_free_fid, &mutex_stat_class, "st_mutex_free", "I" },
+ { &mutex_stat_st_mutex_inuse_fid, &mutex_stat_class, "st_mutex_inuse", "I" },
+ { &mutex_stat_st_mutex_inuse_max_fid, &mutex_stat_class, "st_mutex_inuse_max", "I" },
+ { &mutex_stat_st_region_wait_fid, &mutex_stat_class, "st_region_wait", "I" },
+ { &mutex_stat_st_region_nowait_fid, &mutex_stat_class, "st_region_nowait", "I" },
+ { &mutex_stat_st_regsize_fid, &mutex_stat_class, "st_regsize", "I" },
{ &qam_stat_qs_magic_fid, &qam_stat_class, "qs_magic", "I" },
{ &qam_stat_qs_version_fid, &qam_stat_class, "qs_version", "I" },
{ &qam_stat_qs_metaflags_fid, &qam_stat_class, "qs_metaflags", "I" },
@@ -539,6 +640,13 @@ const struct {
{ &rep_stat_st_dupmasters_fid, &rep_stat_class, "st_dupmasters", "I" },
{ &rep_stat_st_env_id_fid, &rep_stat_class, "st_env_id", "I" },
{ &rep_stat_st_env_priority_fid, &rep_stat_class, "st_env_priority", "I" },
+ { &rep_stat_st_bulk_fills_fid, &rep_stat_class, "st_bulk_fills", "I" },
+ { &rep_stat_st_bulk_overflows_fid, &rep_stat_class, "st_bulk_overflows", "I" },
+ { &rep_stat_st_bulk_records_fid, &rep_stat_class, "st_bulk_records", "I" },
+ { &rep_stat_st_bulk_transfers_fid, &rep_stat_class, "st_bulk_transfers", "I" },
+ { &rep_stat_st_client_rerequests_fid, &rep_stat_class, "st_client_rerequests", "I" },
+ { &rep_stat_st_client_svc_req_fid, &rep_stat_class, "st_client_svc_req", "I" },
+ { &rep_stat_st_client_svc_miss_fid, &rep_stat_class, "st_client_svc_miss", "I" },
{ &rep_stat_st_gen_fid, &rep_stat_class, "st_gen", "I" },
{ &rep_stat_st_egen_fid, &rep_stat_class, "st_egen", "I" },
{ &rep_stat_st_log_duplicated_fid, &rep_stat_class, "st_log_duplicated", "I" },
@@ -574,6 +682,8 @@ const struct {
{ &rep_stat_st_election_status_fid, &rep_stat_class, "st_election_status", "I" },
{ &rep_stat_st_election_tiebreaker_fid, &rep_stat_class, "st_election_tiebreaker", "I" },
{ &rep_stat_st_election_votes_fid, &rep_stat_class, "st_election_votes", "I" },
+ { &rep_stat_st_election_sec_fid, &rep_stat_class, "st_election_sec", "I" },
+ { &rep_stat_st_election_usec_fid, &rep_stat_class, "st_election_usec", "I" },
{ &seq_stat_st_wait_fid, &seq_stat_class, "st_wait", "I" },
{ &seq_stat_st_nowait_fid, &seq_stat_class, "st_nowait", "I" },
{ &seq_stat_st_current_fid, &seq_stat_class, "st_current", "J" },
@@ -591,20 +701,31 @@ const struct {
{ &txn_stat_st_nbegins_fid, &txn_stat_class, "st_nbegins", "I" },
{ &txn_stat_st_ncommits_fid, &txn_stat_class, "st_ncommits", "I" },
{ &txn_stat_st_nactive_fid, &txn_stat_class, "st_nactive", "I" },
+ { &txn_stat_st_nsnapshot_fid, &txn_stat_class, "st_nsnapshot", "I" },
{ &txn_stat_st_nrestores_fid, &txn_stat_class, "st_nrestores", "I" },
{ &txn_stat_st_maxnactive_fid, &txn_stat_class, "st_maxnactive", "I" },
+ { &txn_stat_st_maxnsnapshot_fid, &txn_stat_class, "st_maxnsnapshot", "I" },
{ &txn_stat_st_txnarray_fid, &txn_stat_class, "st_txnarray", "[L" DB_PKG "TransactionStats$Active;" },
{ &txn_stat_st_region_wait_fid, &txn_stat_class, "st_region_wait", "I" },
{ &txn_stat_st_region_nowait_fid, &txn_stat_class, "st_region_nowait", "I" },
{ &txn_stat_st_regsize_fid, &txn_stat_class, "st_regsize", "I" },
{ &txn_active_txnid_fid, &txn_active_class, "txnid", "I" },
{ &txn_active_parentid_fid, &txn_active_class, "parentid", "I" },
+ { &txn_active_pid_fid, &txn_active_class, "pid", "I" },
{ &txn_active_lsn_fid, &txn_active_class, "lsn", "L" DB_PKG "LogSequenceNumber;" },
+ { &txn_active_read_lsn_fid, &txn_active_class, "read_lsn", "L" DB_PKG "LogSequenceNumber;" },
+ { &txn_active_mvcc_ref_fid, &txn_active_class, "mvcc_ref", "I" },
+ { &txn_active_status_fid, &txn_active_class, "status", "I" },
{ &txn_active_xa_status_fid, &txn_active_class, "xa_status", "I" },
{ &txn_active_xid_fid, &txn_active_class, "xid", "[B" },
+ { &txn_active_name_fid, &txn_active_class, "name", "Ljava/lang/String;" },
/* END-STAT-FIELDS */
- { &rep_processmsg_envid, &rep_processmsg_class, "envid", "I" }
+ { &rephost_port_fid, &rephost_class, "port", "I" },
+ { &rephost_host_fid, &rephost_class, "host", "Ljava/lang/String;" },
+ { &rephost_eid_fid, &rephost_class, "eid", "I" },
+ { &rephost_status_fid, &rephost_class, "status", "I" },
+ { &rep_processmsg_envid_fid, &rep_processmsg_class, "envid", "I" }
};
const struct {
@@ -626,26 +747,42 @@ const struct {
{ &log_stat_construct, &log_stat_class, "<init>", "()V" },
{ &mpool_stat_construct, &mpool_stat_class, "<init>", "()V" },
{ &mpool_fstat_construct, &mpool_fstat_class, "<init>", "()V" },
+ { &mutex_stat_construct, &mutex_stat_class, "<init>", "()V" },
{ &qam_stat_construct, &qam_stat_class, "<init>", "()V" },
{ &rep_stat_construct, &rep_stat_class, "<init>", "()V" },
{ &seq_stat_construct, &seq_stat_class, "<init>", "()V" },
{ &txn_stat_construct, &txn_stat_class, "<init>", "()V" },
{ &txn_active_construct, &txn_active_class, "<init>", "()V" },
+ { &rephost_construct, &rephost_class, "<init>", "()V" },
{ &dbex_construct, &dbex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &deadex_construct, &deadex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &lockex_construct, &lockex_class, "<init>",
- "(Ljava/lang/String;IIL" DB_PKG "DatabaseEntry;L" DB_PKG "internal/DbLock;IL" DB_PKG "internal/DbEnv;)V" },
+ "(Ljava/lang/String;IIL" DB_PKG "DatabaseEntry;L"
+ DB_PKG "internal/DbLock;IL" DB_PKG "internal/DbEnv;)V" },
{ &memex_construct, &memex_class, "<init>",
- "(Ljava/lang/String;L" DB_PKG "DatabaseEntry;IL" DB_PKG "internal/DbEnv;)V" },
+ "(Ljava/lang/String;L" DB_PKG "DatabaseEntry;IL"
+ DB_PKG "internal/DbEnv;)V" },
{ &memex_update_method, &memex_class, "updateDatabaseEntry",
"(L" DB_PKG "DatabaseEntry;)V" },
+ { &repdupmasterex_construct, &repdupmasterex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &rephandledeadex_construct, &rephandledeadex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &repholdelectionex_construct, &repholdelectionex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &repjoinfailex_construct, &repjoinfailex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &replockoutex_construct, &replockoutex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &repunavailex_construct, &repunavailex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &runrecex_construct, &runrecex_class, "<init>",
"(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
+ { &versionex_construct, &versionex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
{ &filenotfoundex_construct, &filenotfoundex_class, "<init>",
"(Ljava/lang/String;)V" },
{ &illegalargex_construct, &illegalargex_class, "<init>",
@@ -657,47 +794,51 @@ const struct {
{ &app_dispatch_method, &dbenv_class, "handle_app_dispatch",
"(L" DB_PKG "DatabaseEntry;L" DB_PKG "LogSequenceNumber;I)I" },
+ { &event_notify_method, &dbenv_class, "handle_event_notify",
+ "(I)I" },
{ &env_feedback_method, &dbenv_class, "handle_env_feedback", "(II)V" },
{ &errcall_method, &dbenv_class, "handle_error",
- "(Ljava/lang/String;Ljava/lang/String;)V" },
+ "(Ljava/lang/String;)V" },
{ &msgcall_method, &dbenv_class, "handle_message",
"(Ljava/lang/String;)V" },
{ &paniccall_method, &dbenv_class, "handle_panic",
"(L" DB_PKG "DatabaseException;)V" },
{ &rep_transport_method, &dbenv_class, "handle_rep_transport",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG "LogSequenceNumber;II)I" },
+ "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L"
+ DB_PKG "LogSequenceNumber;II)I" },
{ &append_recno_method, &db_class, "handle_append_recno",
"(L" DB_PKG "DatabaseEntry;I)V" },
{ &bt_compare_method, &db_class, "handle_bt_compare",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
+ "([B[B)I" },
{ &bt_prefix_method, &db_class, "handle_bt_prefix",
"(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
{ &db_feedback_method, &db_class, "handle_db_feedback", "(II)V" },
{ &dup_compare_method, &db_class, "handle_dup_compare",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
+ "([B[B)I" },
{ &h_hash_method, &db_class, "handle_h_hash", "([BI)I" },
{ &seckey_create_method, &db_class, "handle_seckey_create",
- "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
+ "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L"
+ DB_PKG "DatabaseEntry;)I" },
{ &outputstream_write_method, &outputstream_class, "write", "([BII)V" }
};
-#define NELEM(x) (sizeof (x) / sizeof (x[0]))
+#define NELEM(x) (sizeof (x) / sizeof (x[0]))
-JNIEXPORT void JNICALL
-Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz)
+JNIEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_initialize(
+ JNIEnv *jenv, jclass clazz)
{
jclass cl;
unsigned int i, j;
-
+
COMPQUIET(clazz, NULL);
-
+
if ((*jenv)->GetJavaVM(jenv, &javavm) != 0) {
- __db_err(NULL, "Cannot get Java VM");
+ __db_errx(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) {
@@ -721,12 +862,11 @@ Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz
}
}
-
/* 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) {
fprintf(stderr,
"Failed to look up field %s with sig %s\n",
@@ -734,20 +874,21 @@ Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz
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) {
for (j = 0; j < NELEM(all_classes); j++)
if (all_methods[i].cl == all_classes[j].cl)
break;
fprintf(stderr,
"Failed to look up method %s.%s with sig %s\n",
- all_classes[j].name, all_methods[i].name, all_methods[i].sig);
+ all_classes[j].name, all_methods[i].name,
+ all_methods[i].sig);
return;
}
}
diff --git a/db/lock/Design b/db/lock/Design
index f0bb5c6e9..0fcdca2a2 100644
--- a/db/lock/Design
+++ b/db/lock/Design
@@ -1,4 +1,4 @@
-# $Id: Design,v 11.5 2002/02/01 19:07:18 bostic Exp $
+# $Id: Design,v 12.0 2004/11/17 03:44:06 bostic Exp $
Synchronization in the Locking Subsystem
diff --git a/db/lock/lock.c b/db/lock/lock.c
index 2b4f63e0d..03cd11831 100644
--- a/db/lock/lock.c
+++ b/db/lock/lock.c
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock.c,v 11.167 2004/10/15 16:59:41 bostic Exp $
+ * $Id: lock.c,v 12.30 2006/08/24 14:46:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -29,7 +22,7 @@ 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 *,
+static int __lock_remove_waiter __P((DB_LOCKTAB *,
DB_LOCKOBJ *, struct __db_lock *, db_status_t));
static int __lock_trade __P((DB_ENV *, DB_LOCK *, u_int32_t));
@@ -50,7 +43,8 @@ __lock_vec_pp(dbenv, locker, flags, list, nlist, elistp)
int nlist;
DB_LOCKREQ *list, **elistp;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -61,12 +55,10 @@ __lock_vec_pp(dbenv, locker, flags, list, nlist, elistp)
"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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv,
+ (__lock_vec(dbenv, locker, flags, list, nlist, elistp)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -108,7 +100,7 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
region = lt->reginfo.primary;
run_dd = 0;
- LOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+ LOCK_SYSTEM_LOCK(dbenv);
for (i = 0, ret = 0; i < nlist && ret == 0; i++)
switch (list[i].op) {
case DB_LOCK_GET_TIMEOUT:
@@ -119,7 +111,7 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
LOCK_INIT(list[i].lock);
break;
}
- ret = __lock_get_internal(dbenv->lk_handle,
+ ret = __lock_get_internal(lt,
locker, flags, list[i].obj,
list[i].mode, list[i].timeout, &list[i].lock);
break;
@@ -190,7 +182,7 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
locker_links, __db_lock);
if (writes == 1 ||
lp->mode == DB_LOCK_READ ||
- lp->mode == DB_LOCK_DIRTY) {
+ lp->mode == DB_LOCK_READ_UNCOMMITTED) {
SH_LIST_REMOVE(lp,
locker_links, __db_lock);
sh_obj = (DB_LOCKOBJ *)
@@ -211,8 +203,8 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
continue;
}
if (objlist != NULL) {
- DB_ASSERT((char *)np <
- (char *)objlist->data +
+ DB_ASSERT(dbenv, (u_int8_t *)np <
+ (u_int8_t *)objlist->data +
objlist->size);
np->data = SH_DBT_PTR(&sh_obj->lockobj);
np->size = sh_obj->lockobj.size;
@@ -230,11 +222,8 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
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)) {
+ SH_LIST_FOREACH(lp, &sh_locker->heldby,
+ locker_links, __db_lock) {
if (lp->mode != DB_LOCK_WWRITE)
continue;
lock.off = R_OFFSET(&lt->reginfo, lp);
@@ -325,15 +314,13 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
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)) {
+ SH_LIST_FOREACH(
+ lp, &sh_locker->heldby, locker_links, __db_lock)
__lock_printlock(lt, NULL, lp, 1);
- }
break;
#endif
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"Invalid lock operation: %d", list[i].op);
ret = EINVAL;
break;
@@ -342,7 +329,7 @@ __lock_vec(dbenv, locker, flags, list, nlist, elistp)
if (ret == 0 && region->detect != DB_LOCK_NORUN &&
(region->need_dd || LOCK_TIME_ISVALID(&region->next_timeout)))
run_dd = 1;
- UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+ LOCK_SYSTEM_UNLOCK(dbenv);
if (run_dd)
(void)__lock_detect(dbenv, region->detect, &did_abort);
@@ -368,7 +355,8 @@ __lock_get_pp(dbenv, locker, flags, obj, lock_mode, lock)
db_lockmode_t lock_mode;
DB_LOCK *lock;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -379,12 +367,10 @@ __lock_get_pp(dbenv, locker, flags, obj, lock_mode, lock)
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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv,
+ (__lock_get(dbenv, locker, flags, obj, lock_mode, lock)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -403,17 +389,19 @@ __lock_get(dbenv, locker, flags, obj, lock_mode, lock)
db_lockmode_t lock_mode;
DB_LOCK *lock;
{
+ DB_LOCKTAB *lt;
int ret;
+ lt = dbenv->lk_handle;
+
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, 0, lock);
- UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+ LOCK_SYSTEM_LOCK(dbenv);
+ ret = __lock_get_internal(lt, locker, flags, obj, lock_mode, 0, lock);
+ LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -434,11 +422,12 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
db_timeout_t timeout;
DB_LOCK *lock;
{
- struct __db_lock *newl, *lp, *wwrite;
+ struct __db_lock *newl, *lp;
DB_ENV *dbenv;
DB_LOCKER *sh_locker;
DB_LOCKOBJ *sh_obj;
DB_LOCKREGION *region;
+ DB_THREAD_INFO *ip;
u_int32_t holder, locker_ndx, obj_ndx;
int did_abort, ihold, grant_dirty, no_dd, ret, t_ret;
@@ -463,24 +452,21 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
no_dd = ret = 0;
newl = NULL;
-
- /*
- * 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_INIT(*lock);
+ sh_obj = NULL;
/* Check that the lock mode is valid. */
if (lock_mode >= (db_lockmode_t)region->stat.st_nmodes) {
- __db_err(dbenv, "DB_ENV->lock_get: invalid lock mode %lu",
+ __db_errx(dbenv, "DB_ENV->lock_get: invalid lock mode %lu",
(u_long)lock_mode);
return (EINVAL);
}
- region->stat.st_nrequests++;
+ if (LF_ISSET(DB_LOCK_UPGRADE))
+ region->stat.st_nupgrade++;
+ else if (!LF_ISSET(DB_LOCK_SWITCH))
+ region->stat.st_nrequests++;
if (obj == NULL) {
- DB_ASSERT(LOCK_ISSET(*lock));
+ DB_ASSERT(dbenv, LOCK_ISSET(*lock));
lp = R_ADDR(&lt->reginfo, lock->off);
sh_obj = (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
} else {
@@ -493,17 +479,11 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
/* 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, locker > DB_LOCK_MAXID ? 1 : 0, &sh_locker)) != 0) {
- /*
- * XXX
- * We cannot tell if we created the object or not, so we don't
- * kow if we should free it or not.
- */
+ locker_ndx, locker > DB_LOCK_MAXID ? 1 : 0, &sh_locker)) != 0)
goto err;
- }
if (sh_locker == NULL) {
- __db_err(dbenv, "Locker does not exist");
+ __db_errx(dbenv, "Locker does not exist");
ret = EINVAL;
goto err;
}
@@ -534,7 +514,6 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
ihold = 0;
grant_dirty = 0;
holder = 0;
- wwrite = NULL;
/*
* SWITCH is a special case, used by the queue access method
@@ -548,6 +527,7 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
else
lp = SH_TAILQ_FIRST(&sh_obj->holders, __db_lock);
for (; lp != NULL; lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
+ DB_ASSERT(dbenv, lp->status != DB_LSTAT_FREE);
if (locker == lp->holder) {
if (lp->mode == lock_mode &&
lp->status == DB_LSTAT_HELD) {
@@ -568,9 +548,6 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
goto done;
} else {
ihold = 1;
- 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;
@@ -583,17 +560,15 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
}
}
- /* If we want a write lock and we have a was write, upgrade. */
- if (wwrite != NULL)
- LF_SET(DB_LOCK_UPGRADE);
-
/*
- * If there are conflicting holders we will have to wait. An upgrade
- * or dirty reader goes to the head of the queue, everyone else to the
- * back.
+ * If there are conflicting holders we will have to wait. If we
+ * already hold a lock on this object or are doing an upgrade or
+ * this is a dirty reader it goes to the head of the queue, everyone
+ * else to the back.
*/
if (lp != NULL) {
- if (LF_ISSET(DB_LOCK_UPGRADE) || lock_mode == DB_LOCK_DIRTY)
+ if (ihold || LF_ISSET(DB_LOCK_UPGRADE) ||
+ lock_mode == DB_LOCK_READ_UNCOMMITTED)
action = HEAD;
else
action = TAIL;
@@ -608,13 +583,12 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
/*
* Look for conflicting waiters.
*/
- for (lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
+ SH_TAILQ_FOREACH(
+ lp, &sh_obj->waiters, 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
@@ -646,7 +620,8 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
*/
if (lp == NULL)
action = GRANT;
- else if (lock_mode == DB_LOCK_DIRTY && grant_dirty) {
+ else if (grant_dirty &&
+ lock_mode == DB_LOCK_READ_UNCOMMITTED) {
/*
* An upgrade will be at the head of the
* queue.
@@ -658,7 +633,7 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
action = SECOND;
else
action = GRANT;
- } else if (lock_mode == DB_LOCK_DIRTY)
+ } else if (lock_mode == DB_LOCK_READ_UNCOMMITTED)
action = SECOND;
else
action = TAIL;
@@ -672,14 +647,33 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
case GRANT:
/* Allocate a new lock. */
if ((newl =
- SH_TAILQ_FIRST(&region->free_locks, __db_lock)) == NULL)
- return (__lock_nomem(dbenv, "locks"));
+ SH_TAILQ_FIRST(&region->free_locks, __db_lock)) == NULL) {
+ ret = __lock_nomem(dbenv, "locks");
+ goto err;
+ }
SH_TAILQ_REMOVE(&region->free_locks, newl, links, __db_lock);
/* Update new lock statistics. */
if (++region->stat.st_nlocks > region->stat.st_maxnlocks)
region->stat.st_maxnlocks = region->stat.st_nlocks;
+ /*
+ * Allocate a mutex if we do not have a mutex backing the lock.
+ *
+ * Use the lock mutex to block the thread; lock the mutex
+ * when it is allocated so that we will block when we try
+ * to lock it again. We will wake up when another thread
+ * grants the lock and releases the mutex. We leave it
+ * locked for the next use of this lock object.
+ */
+ if (newl->mtx_lock == MUTEX_INVALID) {
+ if ((ret = __mutex_alloc(dbenv, MTX_LOGICAL_LOCK,
+ DB_MUTEX_LOGICAL_LOCK | DB_MUTEX_SELF_BLOCK,
+ &newl->mtx_lock)) != 0)
+ goto err;
+ MUTEX_LOCK(dbenv, newl->mtx_lock);
+ }
+
newl->holder = locker;
newl->refcount = 1;
newl->mode = lock_mode;
@@ -700,15 +694,7 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
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;
- }
- else
- lp = R_ADDR(&lt->reginfo, lock->off);
+upgrade: lp = R_ADDR(&lt->reginfo, lock->off);
if (IS_WRITELOCK(lock_mode) && !IS_WRITELOCK(lp->mode))
sh_locker->nwrites++;
lp->mode = lock_mode;
@@ -717,7 +703,7 @@ upgrade: if (wwrite != NULL) {
switch (action) {
case UPGRADE:
- DB_ASSERT(0);
+ DB_ASSERT(dbenv, 0);
break;
case GRANT:
newl->status = DB_LSTAT_HELD;
@@ -728,7 +714,7 @@ upgrade: if (wwrite != NULL) {
case SECOND:
if (LF_ISSET(DB_LOCK_NOWAIT)) {
ret = DB_LOCK_NOTGRANTED;
- region->stat.st_nnowaits++;
+ region->stat.st_lock_nowait++;
goto err;
}
if ((lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock)) == NULL)
@@ -747,26 +733,19 @@ upgrade: if (wwrite != NULL) {
SH_TAILQ_INSERT_TAIL(&sh_obj->waiters, newl, links);
break;
default:
- DB_ASSERT(0);
+ DB_ASSERT(dbenv, 0);
}
/* 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_remove_waiter(lt, sh_obj, newl, DB_LSTAT_FREE);
+ (void)__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->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
@@ -808,17 +787,29 @@ upgrade: if (wwrite != NULL) {
LOCK_TIME_GREATER(
&region->next_timeout, &sh_locker->lk_expire)))
region->next_timeout = sh_locker->lk_expire;
- UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+
+ newl->status = DB_LSTAT_WAITING;
+ region->stat.st_lock_wait++;
+ /* We are about to block, deadlock detector must run. */
+ region->need_dd = 1;
+
+ LOCK_SYSTEM_UNLOCK(dbenv);
/*
- * We are about to wait; before waiting, see if the deadlock
- * detector should be run.
+ * Before waiting, see if the deadlock detector should run.
*/
if (region->detect != DB_LOCK_NORUN && !no_dd)
(void)__lock_detect(dbenv, region->detect, &did_abort);
- MUTEX_LOCK(dbenv, &newl->mutex);
- LOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+ ip = NULL;
+ if (dbenv->thr_hashtab != NULL &&
+ (ret = __env_set_state(dbenv, &ip, THREAD_BLOCKED)) != 0)
+ goto err;
+ MUTEX_LOCK(dbenv, newl->mtx_lock);
+ if (ip != NULL)
+ ip->dbth_state = THREAD_ACTIVE;
+
+ LOCK_SYSTEM_LOCK(dbenv);
/* Turn off lock timeout. */
if (newl->status != DB_LSTAT_EXPIRED)
@@ -828,20 +819,20 @@ upgrade: if (wwrite != NULL) {
case DB_LSTAT_ABORTED:
ret = DB_LOCK_DEADLOCK;
goto err;
- case DB_LSTAT_NOTEXIST:
- ret = DB_LOCK_NOTEXIST;
- goto err;
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)
- break;
+ ret = __lock_put_internal(lt, newl,
+ obj_ndx, DB_LOCK_UNLINK | DB_LOCK_FREE);
+ newl = NULL;
+ if (ret != 0)
+ goto err;
if (LOCK_TIME_EQUAL(
&sh_locker->lk_expire, &sh_locker->tx_expire))
region->stat.st_ntxntimeouts++;
else
region->stat.st_nlocktimeouts++;
- return (DB_LOCK_NOTGRANTED);
+ ret = DB_LOCK_NOTGRANTED;
+ goto err;
case DB_LSTAT_PENDING:
if (LF_ISSET(DB_LOCK_UPGRADE)) {
/*
@@ -865,7 +856,7 @@ expired: SHOBJECT_LOCK(lt, region, sh_obj, obj_ndx);
case DB_LSTAT_HELD:
case DB_LSTAT_WAITING:
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"Unexpected lock status: %d", (int)newl->status);
ret = __db_panic(dbenv, EINVAL);
goto err;
@@ -876,18 +867,22 @@ expired: SHOBJECT_LOCK(lt, region, sh_obj, obj_ndx);
lock->gen = newl->gen;
lock->mode = newl->mode;
sh_locker->nlocks++;
- if (IS_WRITELOCK(newl->mode))
+ if (IS_WRITELOCK(newl->mode)) {
sh_locker->nwrites++;
+ if (newl->mode == DB_LOCK_WWRITE)
+ F_SET(sh_locker, DB_LOCKER_DIRTY);
+ }
return (0);
-done:
- ret = 0;
-err:
- if (newl != NULL &&
+err: if (!LF_ISSET(DB_LOCK_UPGRADE | DB_LOCK_SWITCH))
+ LOCK_INIT(*lock);
+
+done: if (newl != NULL &&
(t_ret = __lock_freelock(lt, newl, locker,
DB_LOCK_FREE | DB_LOCK_UNLINK)) != 0 && ret == 0)
ret = t_ret;
+
return (ret);
}
@@ -902,32 +897,29 @@ __lock_put_pp(dbenv, lock)
DB_ENV *dbenv;
DB_LOCK *lock;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int 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, 0);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__lock_put(dbenv, lock)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
/*
* __lock_put --
*
- * PUBLIC: int __lock_put __P((DB_ENV *, DB_LOCK *, u_int32_t));
+ * PUBLIC: int __lock_put __P((DB_ENV *, DB_LOCK *));
* Internal lock_put interface.
*/
int
-__lock_put(dbenv, lock, flags)
+__lock_put(dbenv, lock)
DB_ENV *dbenv;
DB_LOCK *lock;
- u_int32_t flags;
{
DB_LOCKTAB *lt;
int ret, run_dd;
@@ -937,9 +929,9 @@ __lock_put(dbenv, lock, flags)
lt = dbenv->lk_handle;
- LOCKREGION(dbenv, lt);
- ret = __lock_put_nolock(dbenv, lock, &run_dd, flags);
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
+ ret = __lock_put_nolock(dbenv, lock, &run_dd, 0);
+ LOCK_SYSTEM_UNLOCK(dbenv);
/*
* Only run the lock detector if put told us to AND we are running
@@ -974,20 +966,13 @@ __lock_put_nolock(dbenv, lock, runp, flags)
lockp = R_ADDR(&lt->reginfo, lock->off);
if (lock->gen != lockp->gen) {
- __db_err(dbenv, __db_lock_invalid, "DB_LOCK->lock_put");
+ __db_errx(dbenv, __db_lock_invalid, "DB_LOCK->lock_put");
LOCK_INIT(*lock);
return (EINVAL);
}
- if (LF_ISSET(DB_LOCK_DOWNGRADE) &&
- lock->mode == DB_LOCK_WRITE && lockp->refcount > 1) {
- ret = __lock_downgrade(dbenv,
- lock, DB_LOCK_WWRITE, DB_LOCK_NOREGION);
- if (ret == 0)
- lockp->refcount--;
- } else
- ret = __lock_put_internal(lt,
- lockp, lock->ndx, flags | DB_LOCK_UNLINK | DB_LOCK_FREE);
+ ret = __lock_put_internal(lt,
+ lockp, lock->ndx, flags | DB_LOCK_UNLINK | DB_LOCK_FREE);
LOCK_INIT(*lock);
*runp = 0;
@@ -1036,11 +1021,13 @@ __lock_downgrade(dbenv, lock, new_mode, flags)
region = lt->reginfo.primary;
if (!LF_ISSET(DB_LOCK_NOREGION))
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
+
+ region->stat.st_ndowngrade++;
lockp = R_ADDR(&lt->reginfo, lock->off);
if (lock->gen != lockp->gen) {
- __db_err(dbenv, __db_lock_invalid, "lock_downgrade");
+ __db_errx(dbenv, __db_lock_invalid, "lock_downgrade");
ret = EINVAL;
goto out;
}
@@ -1051,24 +1038,21 @@ __lock_downgrade(dbenv, lock, new_mode, flags)
indx, 0, &sh_locker)) != 0 || sh_locker == NULL) {
if (ret == 0)
ret = EINVAL;
- __db_err(dbenv, __db_locker_invalid);
+ __db_errx(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;
lock->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));
+ ret = __lock_promote(lt, obj, NULL, LF_ISSET(DB_LOCK_NOWAITERS));
out: if (!LF_ISSET(DB_LOCK_NOREGION))
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -1113,10 +1097,18 @@ __lock_put_internal(lt, lockp, obj_ndx, flags)
/* Get the object associated with this lock. */
sh_obj = (DB_LOCKOBJ *)((u_int8_t *)lockp + lockp->obj);
- /* Remove this lock from its holders/waitlist. */
- if (lockp->status != DB_LSTAT_HELD && lockp->status != DB_LSTAT_PENDING)
- __lock_remove_waiter(lt, sh_obj, lockp, DB_LSTAT_FREE);
- else {
+ /*
+ * Remove this lock from its holders/waitlist. Set its status
+ * to ABORTED. It may get freed below, but if not then the
+ * waiter has been aborted (it will panic if the lock is
+ * free).
+ */
+ if (lockp->status != DB_LSTAT_HELD &&
+ lockp->status != DB_LSTAT_PENDING) {
+ if ((ret = __lock_remove_waiter(
+ lt, sh_obj, lockp, DB_LSTAT_ABORTED)) != 0)
+ return (ret);
+ } else {
SH_TAILQ_REMOVE(&sh_obj->holders, lockp, links, __db_lock);
lockp->links.stqe_prev = -1;
}
@@ -1124,14 +1116,15 @@ __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_REMOVE | DB_LOCK_NOWAITERS));
+ if ((ret = __lock_promote(lt, sh_obj, &state_changed,
+ LF_ISSET(DB_LOCK_NOWAITERS))) != 0)
+ return (ret);
/* 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) {
- HASHREMOVE_EL(lt->obj_tab,
- obj_ndx, __db_lockobj, links, sh_obj);
+ SH_TAILQ_REMOVE(
+ &lt->obj_tab[obj_ndx], sh_obj, links, __db_lockobj);
if (sh_obj->lockobj.size > sizeof(sh_obj->objdata))
__db_shalloc_free(&lt->reginfo,
SH_DBT_PTR(&sh_obj->lockobj));
@@ -1174,16 +1167,13 @@ __lock_freelock(lt, lockp, locker, flags)
dbenv = lt->dbenv;
region = lt->reginfo.primary;
- ret = 0;
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);
+ __db_errx(dbenv, __db_locker_invalid);
+ return (ret == 0 ? EINVAL : ret);
}
SH_LIST_REMOVE(lockp, locker_links, __db_lock);
@@ -1195,13 +1185,23 @@ __lock_freelock(lt, lockp, locker, flags)
}
if (LF_ISSET(DB_LOCK_FREE)) {
+ /*
+ * If the lock is not held we cannot be sure of its mutex
+ * state so we just destroy it and let it be re-created
+ * when needed.
+ */
+ if (lockp->mtx_lock != MUTEX_INVALID &&
+ lockp->status != DB_LSTAT_HELD &&
+ lockp->status != DB_LSTAT_EXPIRED &&
+ (ret = __mutex_free(dbenv, &lockp->mtx_lock)) != 0)
+ return (ret);
lockp->status = DB_LSTAT_FREE;
SH_TAILQ_INSERT_HEAD(
&region->free_locks, lockp, links, __db_lock);
region->stat.st_nlocks--;
}
- return (ret);
+ return (0);
}
/*
@@ -1230,8 +1230,11 @@ __lock_getobj(lt, obj, ndx, create, retp)
region = lt->reginfo.primary;
/* Look up the object in the hash table. */
- HASHLOOKUP(lt->obj_tab,
- ndx, __db_lockobj, links, obj, sh_obj, __lock_cmp);
+ SH_TAILQ_FOREACH(sh_obj, &lt->obj_tab[ndx], links, __db_lockobj)
+ if (obj->size == sh_obj->lockobj.size &&
+ memcmp(obj->data,
+ SH_DBT_PTR(&sh_obj->lockobj), obj->size) == 0)
+ break;
/*
* If we found the object, then we can just return it. If
@@ -1253,7 +1256,7 @@ __lock_getobj(lt, obj, ndx, create, retp)
p = sh_obj->objdata;
else if ((ret =
__db_shalloc(&lt->reginfo, obj->size, 0, &p)) != 0) {
- __db_err(dbenv, "No space for lock object storage");
+ __db_errx(dbenv, "No space for lock object storage");
goto err;
}
@@ -1269,8 +1272,8 @@ __lock_getobj(lt, obj, ndx, create, retp)
sh_obj->lockobj.size = obj->size;
sh_obj->lockobj.off =
(roff_t)SH_PTR_TO_OFF(&sh_obj->lockobj, p);
-
- HASHINSERT(lt->obj_tab, ndx, __db_lockobj, links, sh_obj);
+ SH_TAILQ_INSERT_HEAD(
+ &lt->obj_tab[ndx], sh_obj, links, __db_lockobj);
}
*retp = sh_obj;
@@ -1330,7 +1333,7 @@ __lock_locker_is_parent(dbenv, locker, child, retp)
LOCKER_LOCK(lt, region, child, locker_ndx);
if ((ret =
__lock_getlocker(lt, child, locker_ndx, 0, &sh_locker)) != 0) {
- __db_err(dbenv, __db_locker_invalid);
+ __db_errx(dbenv, __db_locker_invalid);
return (ret);
}
@@ -1381,15 +1384,14 @@ __lock_inherit_locks(lt, locker, flags)
F_ISSET(sh_locker, DB_LOCKER_DELETED)) {
if (ret == 0 && sh_locker != NULL)
ret = EINVAL;
- __db_err(dbenv, __db_locker_invalid);
- goto err;
+ __db_errx(dbenv, __db_locker_invalid);
+ return (ret);
}
/* 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;
+ __db_errx(dbenv, "Not a child transaction");
+ return (EINVAL);
}
sh_parent = R_ADDR(&lt->reginfo, sh_locker->parent_locker);
F_SET(sh_locker, DB_LOCKER_DELETED);
@@ -1401,11 +1403,11 @@ __lock_inherit_locks(lt, locker, flags)
LOCKER_LOCK(lt, region, locker, ndx);
if (F_ISSET(sh_parent, DB_LOCKER_DELETED)) {
if (ret == 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Parent locker is not valid");
ret = EINVAL;
}
- goto err;
+ return (ret);
}
/*
@@ -1421,9 +1423,7 @@ __lock_inherit_locks(lt, locker, flags)
/* 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))
+ SH_TAILQ_FOREACH(hlp, &obj->holders, links, __db_lock)
if (hlp->holder == sh_parent->id &&
lp->mode == hlp->mode)
break;
@@ -1433,7 +1433,7 @@ __lock_inherit_locks(lt, locker, flags)
hlp->refcount += lp->refcount;
/* Remove lock from object list and free it. */
- DB_ASSERT(lp->status == DB_LSTAT_HELD);
+ DB_ASSERT(dbenv, lp->status == DB_LSTAT_HELD);
SH_TAILQ_REMOVE(&obj->holders, lp, links, __db_lock);
(void)__lock_freelock(lt, lp, locker, DB_LOCK_FREE);
} else {
@@ -1449,15 +1449,16 @@ __lock_inherit_locks(lt, locker, flags)
* 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));
+ if ((ret = __lock_promote(
+ lt, obj, NULL, LF_ISSET(DB_LOCK_NOWAITERS))) != 0)
+ return (ret);
}
/* Transfer child counts to parent. */
sh_parent->nlocks += sh_locker->nlocks;
sh_parent->nwrites += sh_locker->nwrites;
-err: return (ret);
+ return (ret);
}
/*
@@ -1466,12 +1467,14 @@ err: return (ret);
* 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 *, u_int32_t));
+ * PUBLIC: int __lock_promote
+ * PUBLIC: __P((DB_LOCKTAB *, DB_LOCKOBJ *, int *, u_int32_t));
*/
int
-__lock_promote(lt, obj, flags)
+__lock_promote(lt, obj, state_changedp, flags)
DB_LOCKTAB *lt;
DB_LOCKOBJ *obj;
+ int *state_changedp;
u_int32_t flags;
{
struct __db_lock *lp_w, *lp_h, *next_waiter;
@@ -1510,21 +1513,17 @@ __lock_promote(lt, obj, flags)
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)) {
+ SH_TAILQ_FOREACH(lp_h, &obj->holders, 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);
if ((__lock_getlocker(lt, lp_w->holder,
locker_ndx, 0, &sh_locker)) != 0) {
- DB_ASSERT(0);
- break;
+ __db_errx(lt->dbenv,
+ "Locker %#lx missing",
+ (u_long)lp_w->holder);
+ return (__db_panic(lt->dbenv, EINVAL));
}
if (!__lock_is_parent(lt,
lp_h->holder, sh_locker))
@@ -1540,7 +1539,7 @@ __lock_promote(lt, obj, flags)
SH_TAILQ_INSERT_TAIL(&obj->holders, lp_w, links);
/* Wake up waiter. */
- MUTEX_UNLOCK(lt->dbenv, &lp_w->mutex);
+ MUTEX_UNLOCK(lt->dbenv, lp_w->mtx_lock);
state_changed = 1;
}
@@ -1550,7 +1549,11 @@ __lock_promote(lt, obj, flags)
*/
if (had_waiters && SH_TAILQ_FIRST(&obj->waiters, __db_lock) == NULL)
SH_TAILQ_REMOVE(&region->dd_objs, obj, dd_links, __db_lockobj);
- return (state_changed);
+
+ if (state_changedp != NULL)
+ *state_changedp = state_changed;
+
+ return (0);
}
/*
@@ -1563,7 +1566,7 @@ __lock_promote(lt, obj, flags)
*
* This must be called with the Object bucket locked.
*/
-static void
+static int
__lock_remove_waiter(lt, sh_obj, lockp, status)
DB_LOCKTAB *lt;
DB_LOCKOBJ *sh_obj;
@@ -1589,7 +1592,9 @@ __lock_remove_waiter(lt, sh_obj, lockp, status)
* Wake whoever is waiting on this lock.
*/
if (do_wakeup)
- MUTEX_UNLOCK(lt->dbenv, &lockp->mutex);
+ MUTEX_UNLOCK(lt->dbenv, lockp->mtx_lock);
+
+ return (0);
}
/*
@@ -1627,7 +1632,7 @@ __lock_trade(dbenv, lock, new_locker)
return (ret);
if (sh_locker == NULL) {
- __db_err(dbenv, "Locker does not exist");
+ __db_errx(dbenv, "Locker does not exist");
return (EINVAL);
}
diff --git a/db/lock/lock_deadlock.c b/db/lock/lock_deadlock.c
index 8caf82100..4dfcfc727 100644
--- a/db/lock/lock_deadlock.c
+++ b/db/lock/lock_deadlock.c
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_deadlock.c,v 11.86 2004/10/15 16:59:42 bostic Exp $
+ * $Id: lock_deadlock.c,v 12.17 2006/08/24 14:46:10 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
@@ -30,7 +23,7 @@
}
#define SET_MAP(M, B) ((M)[(B) / 32] |= (1 << ((B) % 32)))
-#define CLR_MAP(M, B) ((M)[(B) / 32] &= ~(1 << ((B) % 32)))
+#define CLR_MAP(M, B) ((M)[(B) / 32] &= ~((u_int)1 << ((B) % 32)))
#define OR_MAP(D, S, N) { \
u_int32_t __i; \
@@ -51,7 +44,7 @@ typedef struct {
db_pgno_t pgno;
} locker_info;
-static int __dd_abort __P((DB_ENV *, locker_info *));
+static int __dd_abort __P((DB_ENV *, locker_info *, int *));
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 *,
@@ -77,7 +70,8 @@ __lock_detect_pp(dbenv, flags, atype, abortp)
u_int32_t flags, atype;
int *abortp;
{
- int ret, rep_check;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -98,17 +92,14 @@ __lock_detect_pp(dbenv, flags, atype, abortp)
case DB_LOCK_YOUNGEST:
break;
default:
- __db_err(dbenv,
+ __db_errx(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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__lock_detect(dbenv, atype, abortp)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -126,19 +117,18 @@ __lock_detect(dbenv, atype, abortp)
{
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
- DB_TXNMGR *tmgr;
db_timeval_t now;
locker_info *idmap;
u_int32_t *bitmap, *copymap, **deadp, **free_me, *tmpmap;
u_int32_t i, cid, keeper, killid, limit, nalloc, nlockers;
u_int32_t lock_max, txn_max;
- int ret;
+ int ret, status;
/*
* If this environment is a replication client, then we must use the
* MINWRITE detection discipline.
*/
- if (__rep_is_client(dbenv))
+ if (IS_REP_CLIENT(dbenv))
atype = DB_LOCK_MINWRITE;
free_me = NULL;
@@ -148,7 +138,7 @@ __lock_detect(dbenv, atype, abortp)
*abortp = 0;
/* Check if a detector run is necessary. */
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
/* Make a pass only if auto-detect would run. */
region = lt->reginfo.primary;
@@ -157,7 +147,7 @@ __lock_detect(dbenv, atype, abortp)
if (region->need_dd == 0 &&
(!LOCK_TIME_ISVALID(&region->next_timeout) ||
!__lock_expired(dbenv, &now, &region->next_timeout))) {
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
return (0);
}
if (region->need_dd == 0)
@@ -169,33 +159,19 @@ __lock_detect(dbenv, atype, abortp)
/* Build the waits-for bitmap. */
ret = __dd_build(dbenv, atype, &bitmap, &nlockers, &nalloc, &idmap);
lock_max = region->stat.st_cur_maxid;
- UNLOCKREGION(dbenv, lt);
-
- /*
- * 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;
+ LOCK_SYSTEM_UNLOCK(dbenv);
if (ret != 0 || atype == DB_LOCK_EXPIRE)
return (ret);
+ /* If there are no lockers, there are no deadlocks. */
if (nlockers == 0)
return (0);
+
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_WAITSFOR))
__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)
@@ -210,6 +186,23 @@ __lock_detect(dbenv, atype, abortp)
__dd_find(dbenv, bitmap, idmap, nlockers, nalloc, &deadp)) != 0)
return (ret);
+ /*
+ * 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.
+ */
+ if (TXN_ON(dbenv)) {
+ TXN_SYSTEM_LOCK(dbenv);
+ txn_max = ((DB_TXNREGION *)
+ dbenv->tx_handle->reginfo.primary)->cur_maxid;
+ TXN_SYSTEM_UNLOCK(dbenv);
+ } else
+ txn_max = TXN_MAXIMUM;
+
killid = BAD_KILLID;
free_me = deadp;
for (; *deadp != NULL; deadp++) {
@@ -327,24 +320,24 @@ dokill: if (killid == BAD_KILLID) {
* break the deadlock, signal to run
* detection again.
*/
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
region->need_dd = 1;
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
killid = keeper;
}
}
/* Kill the locker with lockid idmap[killid]. */
- if ((ret = __dd_abort(dbenv, &idmap[killid])) != 0) {
- /*
- * It's possible that the lock was already aborted;
- * this isn't necessarily a problem, so do not treat
- * it as an error.
- */
- if (ret == DB_ALREADY_ABORTED)
- ret = 0;
- else
- __db_err(dbenv,
+ if ((ret = __dd_abort(dbenv, &idmap[killid], &status)) != 0)
+ break;
+
+ /*
+ * It's possible that the lock was already aborted; this isn't
+ * necessarily a problem, so do not treat it as an error.
+ */
+ if (status != 0) {
+ if (status != DB_ALREADY_ABORTED)
+ __db_errx(dbenv,
"warning: unable to abort locker %lx",
(u_long)idmap[killid].id);
} else if (FLD_ISSET(dbenv->verbose, DB_VERB_DEADLOCK))
@@ -367,7 +360,7 @@ err: if (free_me != NULL)
* Utilities
*/
-# define DD_INVALID_ID ((u_int32_t) -1)
+#define DD_INVALID_ID ((u_int32_t) -1)
static int
__dd_build(dbenv, atype, bmp, nlockers, allocp, idmap)
@@ -384,26 +377,43 @@ __dd_build(dbenv, atype, bmp, nlockers, allocp, idmap)
db_timeval_t now, min_timeout;
u_int32_t *bitmap, count, dd, *entryp, id, ndx, nentries, *tmpmap;
u_int8_t *pptr;
- int expire_only, is_first, ret;
+ int 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.
+ * 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;
+ if (atype == DB_LOCK_EXPIRE) {
+ SH_TAILQ_FOREACH(op, &region->dd_objs, dd_links, __db_lockobj)
+ SH_TAILQ_FOREACH(lp, &op->waiters, links, __db_lock) {
+ LOCKER_LOCK(lt, region, lp->holder, ndx);
+ if ((ret = __lock_getlocker(lt,
+ lp->holder, ndx, 0, &lockerp)) != 0)
+ continue;
+ if (lp->status == DB_LSTAT_WAITING) {
+ if (__lock_expired(dbenv,
+ &now, &lockerp->lk_expire)) {
+ lp->status = DB_LSTAT_EXPIRED;
+ MUTEX_UNLOCK(
+ dbenv, lp->mtx_lock);
+ continue;
+ }
+ if (LOCK_TIME_GREATER(
+ &min_timeout, &lockerp->lk_expire))
+ min_timeout =
+ lockerp->lk_expire;
+ }
+ }
+ goto done;
}
/*
@@ -413,7 +423,6 @@ __dd_build(dbenv, atype, bmp, nlockers, allocp, idmap)
* mutex the second time.
*/
retry: count = region->stat.st_nlockers;
-
if (count == 0) {
*nlockers = 0;
return (0);
@@ -462,9 +471,8 @@ retry: count = region->stat.st_nlockers;
/*
* First we go through and assign each locker a deadlock detector id.
*/
- for (id = 0, lip = SH_TAILQ_FIRST(&region->lockers, __db_locker);
- lip != NULL;
- lip = SH_TAILQ_NEXT(lip, ulinks, __db_locker)) {
+ id = 0;
+ SH_TAILQ_FOREACH(lip, &region->lockers, ulinks, __db_locker) {
if (lip->master_locker == INVALID_ROFF) {
lip->dd_id = id++;
id_array[lip->dd_id].id = lip->id;
@@ -477,6 +485,8 @@ retry: count = region->stat.st_nlockers;
case DB_LOCK_MAXWRITE:
id_array[lip->dd_id].count = lip->nwrites;
break;
+ default:
+ break;
}
if (F_ISSET(lip, DB_LOCKER_INABORT))
id_array[lip->dd_id].in_abort = 1;
@@ -492,20 +502,14 @@ retry: count = region->stat.st_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;
+ SH_TAILQ_FOREACH(op, &region->dd_objs, dd_links, __db_lockobj) {
CLEAR_MAP(tmpmap, nentries);
/*
* First we go through and create a bit map that
* represents all the holders of this object.
*/
- for (lp = SH_TAILQ_FIRST(&op->holders, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
+ SH_TAILQ_FOREACH(lp, &op->holders, links, __db_lock) {
LOCKER_LOCK(lt, region, lp->holder, ndx);
if ((ret = __lock_getlocker(lt,
lp->holder, ndx, 0, &lockerp)) != 0)
@@ -524,6 +528,8 @@ obj_loop:
case DB_LOCK_MAXWRITE:
id_array[dd].count += lockerp->nwrites;
break;
+ default:
+ break;
}
if (F_ISSET(lockerp, DB_LOCKER_INABORT))
id_array[dd].in_abort = 1;
@@ -544,7 +550,6 @@ obj_loop:
* 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;
@@ -558,18 +563,14 @@ look_waiters:
if (__lock_expired(dbenv,
&now, &lockerp->lk_expire)) {
lp->status = DB_LSTAT_EXPIRED;
- MUTEX_UNLOCK(dbenv, &lp->mutex);
+ MUTEX_UNLOCK(dbenv, lp->mtx_lock);
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;
@@ -583,6 +584,8 @@ look_waiters:
case DB_LOCK_MAXWRITE:
id_array[dd].count += lockerp->nwrites;
break;
+ default:
+ break;
}
} else
dd = lockerp->dd_id;
@@ -612,15 +615,6 @@ look_waiters:
}
}
- 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)
@@ -628,7 +622,7 @@ look_waiters:
LOCKER_LOCK(lt, region, id_array[id].id, ndx);
if ((ret = __lock_getlocker(lt,
id_array[id].id, ndx, 0, &lockerp)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"No locks for locker %lu", (u_long)id_array[id].id);
continue;
}
@@ -680,6 +674,12 @@ get_lock: id_array[id].last_lock = R_OFFSET(&lt->reginfo, lp);
*bmp = bitmap;
*allocp = nentries;
__os_free(dbenv, tmpmap);
+done: 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;
+ }
return (0);
}
@@ -750,9 +750,10 @@ __dd_find(dbenv, bmp, idmap, nlockers, nalloc, deadp)
}
static int
-__dd_abort(dbenv, info)
+__dd_abort(dbenv, info, statusp)
DB_ENV *dbenv;
locker_info *info;
+ int *statusp;
{
struct __db_lock *lockp;
DB_LOCKER *lockerp;
@@ -762,37 +763,39 @@ __dd_abort(dbenv, info)
u_int32_t ndx;
int ret;
+ *statusp = 0;
+
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
+ ret = 0;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
/*
- * Get the locker. If its gone or was aborted while
- * we were detecting return that.
+ * Get the locker. If it's 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 || F_ISSET(lockerp, DB_LOCKER_INABORT)) {
- if (ret == 0)
- ret = DB_ALREADY_ABORTED;
+ info->last_locker_id, ndx, 0, &lockerp)) != 0)
+ goto err;
+ if (lockerp == NULL || F_ISSET(lockerp, DB_LOCKER_INABORT)) {
+ *statusp = DB_ALREADY_ABORTED;
goto out;
}
/*
- * Find the locker's last lock.
- * It is possible for this lock to have been freed,
- * either though a timeout or another detector run.
+ * 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 = SH_LIST_FIRST(&lockerp->heldby, __db_lock)) == NULL) {
- ret = DB_ALREADY_ABORTED;
+ *statusp = 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;
+ *statusp = DB_ALREADY_ABORTED;
goto out;
}
@@ -812,15 +815,12 @@ __dd_abort(dbenv, info)
SH_TAILQ_REMOVE(&region->dd_objs,
sh_obj, dd_links, __db_lockobj);
else
- ret = __lock_promote(lt, sh_obj, 0);
- MUTEX_UNLOCK(dbenv, &lockp->mutex);
+ ret = __lock_promote(lt, sh_obj, NULL, 0);
+ MUTEX_UNLOCK(dbenv, lockp->mtx_lock);
region->stat.st_ndeadlocks++;
- UNLOCKREGION(dbenv, lt);
-
- return (0);
-
-out: UNLOCKREGION(dbenv, lt);
+err:
+out: LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
diff --git a/db/lock/lock_failchk.c b/db/lock/lock_failchk.c
new file mode 100644
index 000000000..55f729694
--- /dev/null
+++ b/db/lock/lock_failchk.c
@@ -0,0 +1,95 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: lock_failchk.c,v 12.9 2006/08/24 14:46:11 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/lock.h"
+#include "dbinc/txn.h"
+
+/*
+ * __lock_failchk --
+ * Check for locks held by dead threads of control.
+ *
+ * PUBLIC: int __lock_failchk __P((DB_ENV *));
+ */
+int
+__lock_failchk(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_LOCKER *lip;
+ DB_LOCKREGION *lrp;
+ DB_LOCKREQ request;
+ DB_LOCKTAB *lt;
+ u_int32_t i;
+ int ret;
+ char buf[DB_THREADID_STRLEN];
+
+ lt = dbenv->lk_handle;
+ lrp = lt->reginfo.primary;
+
+retry: LOCK_SYSTEM_LOCK(dbenv);
+
+ ret = 0;
+ for (i = 0; i < lrp->locker_t_size; i++)
+ SH_TAILQ_FOREACH(lip, &lt->locker_tab[i], links, __db_locker) {
+ /*
+ * If the locker is transactional, we can ignore it;
+ * __txn_failchk aborts any transactions the locker
+ * is involved in.
+ */
+ if (lip->id >= TXN_MINIMUM)
+ continue;
+
+ /* If the locker is still alive, it's not a problem. */
+ if (dbenv->is_alive(dbenv, lip->pid, lip->tid, 0))
+ continue;
+
+ /*
+ * We can only deal with read locks. If the locker
+ * holds write locks we have to assume a Berkeley DB
+ * operation was interrupted with only 1-of-N pages
+ * modified.
+ */
+ if (lip->nwrites != 0) {
+ ret = __db_failed(dbenv,
+ "locker has write locks",
+ lip->pid, lip->tid);
+ break;
+ }
+
+ /*
+ * Discard the locker and its read locks.
+ */
+ __db_msg(dbenv, "Freeing locks for locker %#lx: %s",
+ (u_long)lip->id, dbenv->thread_id_string(
+ dbenv, lip->pid, lip->tid, buf));
+ LOCK_SYSTEM_UNLOCK(dbenv);
+ memset(&request, 0, sizeof(request));
+ request.op = DB_LOCK_PUT_ALL;
+ if ((ret = __lock_vec(
+ dbenv, lip->id, 0, &request, 1, NULL)) != 0)
+ return (ret);
+
+ /*
+ * This locker is most likely referenced by a cursor
+ * which is owned by a dead thread. Normally the
+ * cursor would be available for other threads
+ * but we assume the dead thread will never release
+ * it.
+ */
+ if ((ret = __lock_freefamilylocker(lt, lip->id)) != 0)
+ return (ret);
+ goto retry;
+ }
+
+ LOCK_SYSTEM_UNLOCK(dbenv);
+
+ return (ret);
+}
diff --git a/db/lock/lock_id.c b/db/lock/lock_id.c
index 02f85765d..0e9fb14dd 100644
--- a/db/lock/lock_id.c
+++ b/db/lock/lock_id.c
@@ -1,23 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_id.c,v 11.146 2004/10/15 16:59:42 bostic Exp $
+ * $Id: lock_id.c,v 12.16 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -32,18 +24,16 @@ __lock_id_pp(dbenv, idp)
DB_ENV *dbenv;
u_int32_t *idp;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__lock_id(dbenv, idp, NULL)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -51,31 +41,34 @@ __lock_id_pp(dbenv, idp)
* __lock_id --
* DB_ENV->lock_id.
*
- * PUBLIC: int __lock_id __P((DB_ENV *, u_int32_t *));
+ * PUBLIC: int __lock_id __P((DB_ENV *, u_int32_t *, DB_LOCKER **));
*/
int
-__lock_id(dbenv, idp)
+__lock_id(dbenv, idp, lkp)
DB_ENV *dbenv;
u_int32_t *idp;
+ DB_LOCKER **lkp;
{
DB_LOCKER *lk;
DB_LOCKTAB *lt;
DB_LOCKREGION *region;
- u_int32_t *ids, locker_ndx;
+ u_int32_t id, *ids, locker_ndx;
int nids, ret;
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
ret = 0;
+ id = DB_LOCK_INVALIDID;
+ lk = NULL;
+
+ LOCK_SYSTEM_LOCK(dbenv);
+
/*
- * 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);
- /*
+ * 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.
+ *
* Our current valid range can span the maximum valid value, so check
* for it and wrap manually.
*/
@@ -87,9 +80,7 @@ __lock_id(dbenv, idp)
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))
+ SH_TAILQ_FOREACH(lk, &region->lockers, ulinks, __db_locker)
ids[nids++] = lk->id;
region->stat.st_id = DB_LOCK_INVALIDID;
region->stat.st_cur_maxid = DB_LOCK_MAXID;
@@ -98,18 +89,37 @@ __lock_id(dbenv, idp)
&region->stat.st_id, &region->stat.st_cur_maxid);
__os_free(dbenv, ids);
}
- *idp = ++region->stat.st_id;
+ id = ++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);
+ LOCKER_LOCK(lt, region, id, locker_ndx);
+ ret = __lock_getlocker(lt, id, locker_ndx, 1, &lk);
-err: UNLOCKREGION(dbenv, lt);
+err: LOCK_SYSTEM_UNLOCK(dbenv);
+ if (idp)
+ *idp = id;
+ if (lkp)
+ *lkp = lk;
return (ret);
}
/*
+ * __lock_set_thread_id --
+ * Set the thread_id in an existing locker.
+ * PUBLIC: void __lock_set_thread_id __P((DB_LOCKER *, pid_t, db_threadid_t));
+ */
+void
+__lock_set_thread_id(lref, pid, tid)
+ DB_LOCKER *lref;
+ pid_t pid;
+ db_threadid_t tid;
+{
+ lref->pid = pid;
+ lref->tid = tid;
+}
+
+/*
* __lock_id_free_pp --
* DB_ENV->lock_id_free pre/post processing.
*
@@ -120,18 +130,16 @@ __lock_id_free_pp(dbenv, id)
DB_ENV *dbenv;
u_int32_t id;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__lock_id_free(dbenv, id)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -159,26 +167,26 @@ __lock_id_free(dbenv, id)
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
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) {
- __db_err(dbenv, "Unknown locker ID: %lx", (u_long)id);
+ __db_errx(dbenv, "Unknown locker ID: %lx", (u_long)id);
ret = EINVAL;
goto err;
}
if (sh_locker->nlocks != 0) {
- __db_err(dbenv, "Locker still has locks");
+ __db_errx(dbenv, "Locker still has locks");
ret = EINVAL;
goto err;
}
__lock_freelocker(lt, region, sh_locker, locker_ndx);
-err: UNLOCKREGION(dbenv, lt);
+err: LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -233,13 +241,13 @@ __lock_getlocker(lt, locker, indx, create, retp)
dbenv = lt->dbenv;
region = lt->reginfo.primary;
- HASHLOOKUP(lt->locker_tab,
- indx, __db_locker, links, locker, sh_locker, __lock_locker_cmp);
-
/*
- * If we found the locker, then we can just return it. If
- * we didn't find the locker, then we need to create it.
+ * If we find the locker, then we can just return it. If we don't find
+ * the locker, then we need to create it.
*/
+ SH_TAILQ_FOREACH(sh_locker, &lt->locker_tab[indx], links, __db_locker)
+ if (sh_locker->id == locker)
+ break;
if (sh_locker == NULL && create) {
/* Create new locker and then insert it into hash table. */
if ((sh_locker = SH_TAILQ_FIRST(
@@ -251,6 +259,7 @@ __lock_getlocker(lt, locker, indx, create, retp)
region->stat.st_maxnlockers = region->stat.st_nlockers;
sh_locker->id = locker;
+ dbenv->thread_id(dbenv, &sh_locker->pid, &sh_locker->tid);
sh_locker->dd_id = 0;
sh_locker->master_locker = INVALID_ROFF;
sh_locker->parent_locker = INVALID_ROFF;
@@ -263,7 +272,8 @@ __lock_getlocker(lt, locker, indx, create, retp)
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(
+ &lt->locker_tab[indx], sh_locker, links, __db_locker);
SH_TAILQ_INSERT_HEAD(&region->lockers,
sh_locker, ulinks, __db_locker);
}
@@ -291,12 +301,11 @@ __lock_addfamilylocker(dbenv, pid, id)
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
/* get/create the parent locker info */
LOCKER_LOCK(lt, region, pid, ndx);
- if ((ret = __lock_getlocker(dbenv->lk_handle,
- pid, ndx, 1, &mlockerp)) != 0)
+ if ((ret = __lock_getlocker(lt, pid, ndx, 1, &mlockerp)) != 0)
goto err;
/*
@@ -307,8 +316,7 @@ __lock_addfamilylocker(dbenv, pid, id)
* family be created at the same time.
*/
LOCKER_LOCK(lt, region, id, ndx);
- if ((ret = __lock_getlocker(dbenv->lk_handle,
- id, ndx, 1, &lockerp)) != 0)
+ if ((ret = __lock_getlocker(lt, id, ndx, 1, &lockerp)) != 0)
goto err;
/* Point to our parent. */
@@ -330,8 +338,7 @@ __lock_addfamilylocker(dbenv, pid, id)
SH_LIST_INSERT_HEAD(
&mlockerp->child_locker, lockerp, child_link, __db_locker);
-err:
- UNLOCKREGION(dbenv, lt);
+err: LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -358,7 +365,7 @@ __lock_freefamilylocker(lt, locker)
dbenv = lt->dbenv;
region = lt->reginfo.primary;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
LOCKER_LOCK(lt, region, locker, indx);
if ((ret = __lock_getlocker(lt,
@@ -367,7 +374,7 @@ __lock_freefamilylocker(lt, locker)
if (SH_LIST_FIRST(&sh_locker->heldby, __db_lock) != NULL) {
ret = EINVAL;
- __db_err(dbenv, "Freeing locker with locks");
+ __db_errx(dbenv, "Freeing locker with locks");
goto err;
}
@@ -377,8 +384,7 @@ __lock_freefamilylocker(lt, locker)
__lock_freelocker(lt, region, sh_locker, indx);
-err:
- UNLOCKREGION(dbenv, lt);
+err: LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -398,8 +404,7 @@ __lock_freelocker(lt, region, sh_locker, indx)
u_int32_t indx;
{
- HASHREMOVE_EL(
- lt->locker_tab, indx, __db_locker, links, sh_locker);
+ SH_TAILQ_REMOVE(&lt->locker_tab[indx], sh_locker, links, __db_locker);
SH_TAILQ_INSERT_HEAD(
&region->free_lockers, sh_locker, links, __db_locker);
SH_TAILQ_REMOVE(&region->lockers, sh_locker, ulinks, __db_locker);
diff --git a/db/lock/lock_list.c b/db/lock/lock_list.c
index 5851dc7fa..ab1db32e0 100644
--- a/db/lock/lock_list.c
+++ b/db/lock/lock_list.c
@@ -1,23 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_list.c,v 11.146 2004/09/22 03:48:29 bostic Exp $
+ * $Id: lock_list.c,v 12.9 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -240,16 +232,30 @@ __lock_get_list(dbenv, locker, flags, lock_mode, list)
u_int16_t npgno, size;
u_int32_t i, nlocks;
int ret;
- void *dp;
+ void *data, *dp;
if (list->size == 0)
return (0);
ret = 0;
+ data = NULL;
+
lt = dbenv->lk_handle;
dp = list->data;
+ /*
+ * There is no assurance log records will be aligned. If not, then
+ * copy the data to an aligned region so the rest of the code does
+ * not have to worry about it.
+ */
+ if ((uintptr_t)dp != DB_ALIGN((uintptr_t)dp, sizeof(u_int32_t))) {
+ if ((ret = __os_malloc(dbenv, list->size, &data)) != 0)
+ return (ret);
+ memcpy(data, list->data, list->size);
+ dp = data;
+ }
+
GET_COUNT(dp, nlocks);
- LOCKREGION(dbenv, dbenv->lk_handle);
+ LOCK_SYSTEM_LOCK(dbenv);
for (i = 0; i < nlocks; i++) {
GET_PCOUNT(dp, npgno);
@@ -271,8 +277,9 @@ __lock_get_list(dbenv, locker, flags, lock_mode, list)
lock->pgno = save_pgno;
}
-err:
- UNLOCKREGION(dbenv, dbenv->lk_handle);
+err: LOCK_SYSTEM_UNLOCK(dbenv);
+ if (data != NULL)
+ __os_free(dbenv, data);
return (ret);
}
diff --git a/db/lock/lock_method.c b/db/lock/lock_method.c
index d57179493..0ca08dc01 100644
--- a/db/lock/lock_method.c
+++ b/db/lock/lock_method.c
@@ -1,51 +1,24 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_method.c,v 11.44 2004/06/01 21:50:05 bostic Exp $
+ * $Id: lock_method.c,v 12.13 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
-#ifdef HAVE_RPC
-#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 *));
+ * PUBLIC: int __lock_dbenv_create __P((DB_ENV *));
*/
-void
+int
__lock_dbenv_create(dbenv)
DB_ENV *dbenv;
{
@@ -55,100 +28,56 @@ __lock_dbenv_create(dbenv)
* 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_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_stat_print = NULL;
- 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_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_stat_print = __lock_stat_print_pp;
- dbenv->lock_vec = __lock_vec_pp;
- }
+ return (0);
}
/*
- * __lock_dbenv_close --
+ * __lock_dbenv_destroy --
* Lock specific destruction of the DB_ENV structure.
*
- * PUBLIC: int __lock_dbenv_close __P((DB_ENV *));
+ * PUBLIC: void __lock_dbenv_destroy __P((DB_ENV *));
*/
-int
-__lock_dbenv_close(dbenv)
+void
+__lock_dbenv_destroy(dbenv)
DB_ENV *dbenv;
{
if (dbenv->lk_conflicts != NULL) {
__os_free(dbenv, dbenv->lk_conflicts);
dbenv->lk_conflicts = NULL;
}
-
- return (0);
}
/*
* __lock_get_lk_conflicts
* Get the conflicts matrix.
+ *
+ * PUBLIC: int __lock_get_lk_conflicts
+ * PUBLIC: __P((DB_ENV *, const u_int8_t **, int *));
*/
-static int
+int
__lock_get_lk_conflicts(dbenv, lk_conflictsp, lk_modesp)
DB_ENV *dbenv;
const u_int8_t **lk_conflictsp;
int *lk_modesp;
{
+ DB_LOCKTAB *lt;
+
ENV_NOT_CONFIGURED(dbenv,
dbenv->lk_handle, "DB_ENV->get_lk_conflicts", DB_INIT_LOCK);
+ lt = dbenv->lk_handle;
+
if (LOCKING_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
if (lk_conflictsp != NULL)
- *lk_conflictsp =
- ((DB_LOCKTAB *)dbenv->lk_handle)->conflicts;
+ *lk_conflictsp = lt->conflicts;
if (lk_modesp != NULL)
- *lk_modesp = ((DB_LOCKREGION *)((DB_LOCKTAB *)
- dbenv->lk_handle)->reginfo.primary)->stat.st_nmodes;
+ *lk_modesp = ((DB_LOCKREGION *)
+ (lt->reginfo.primary))->stat.st_nmodes;
} else {
if (lk_conflictsp != NULL)
*lk_conflictsp = dbenv->lk_conflicts;
@@ -161,8 +90,10 @@ __lock_get_lk_conflicts(dbenv, lk_conflictsp, lk_modesp)
/*
* __lock_set_lk_conflicts
* Set the conflicts matrix.
+ *
+ * PUBLIC: int __lock_set_lk_conflicts __P((DB_ENV *, u_int8_t *, int));
*/
-static int
+int
__lock_set_lk_conflicts(dbenv, lk_conflicts, lk_modes)
DB_ENV *dbenv;
u_int8_t *lk_conflicts;
@@ -186,7 +117,10 @@ __lock_set_lk_conflicts(dbenv, lk_conflicts, lk_modes)
return (0);
}
-static int
+/*
+ * PUBLIC: int __lock_get_lk_detect __P((DB_ENV *, u_int32_t *));
+ */
+int
__lock_get_lk_detect(dbenv, lk_detectp)
DB_ENV *dbenv;
u_int32_t *lk_detectp;
@@ -198,10 +132,9 @@ __lock_get_lk_detect(dbenv, lk_detectp)
if (LOCKING_ON(dbenv)) {
lt = dbenv->lk_handle;
- LOCKREGION(dbenv, lt);
- *lk_detectp = ((DB_LOCKREGION *)
- ((DB_LOCKTAB *)dbenv->lk_handle)->reginfo.primary)->detect;
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
+ *lk_detectp = ((DB_LOCKREGION *)lt->reginfo.primary)->detect;
+ LOCK_SYSTEM_UNLOCK(dbenv);
} else
*lk_detectp = dbenv->lk_detect;
return (0);
@@ -237,7 +170,7 @@ __lock_set_lk_detect(dbenv, lk_detect)
case DB_LOCK_YOUNGEST:
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->set_lk_detect: unknown deadlock detection mode specified");
return (EINVAL);
}
@@ -246,7 +179,7 @@ __lock_set_lk_detect(dbenv, lk_detect)
if (LOCKING_ON(dbenv)) {
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
/*
* Check for incompatible automatic deadlock detection requests.
* There are scenarios where changing the detector configuration
@@ -259,13 +192,13 @@ __lock_set_lk_detect(dbenv, lk_detect)
if (region->detect != DB_LOCK_NORUN &&
lk_detect != DB_LOCK_DEFAULT &&
region->detect != lk_detect) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->set_lk_detect: incompatible deadlock detector mode");
ret = EINVAL;
} else
if (region->detect == DB_LOCK_NORUN)
region->detect = lk_detect;
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
} else
dbenv->lk_detect = lk_detect;
@@ -273,25 +206,9 @@ __lock_set_lk_detect(dbenv, lk_detect)
}
/*
- * __lock_set_lk_max
- * DB_ENV->set_lk_max.
- *
- * PUBLIC: int __lock_set_lk_max __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __lock_get_lk_max_locks __P((DB_ENV *, u_int32_t *));
*/
int
-__lock_set_lk_max(dbenv, lk_max)
- DB_ENV *dbenv;
- u_int32_t lk_max;
-{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_max");
-
- dbenv->lk_max = lk_max;
- dbenv->lk_max_objects = lk_max;
- dbenv->lk_max_lockers = lk_max;
- return (0);
-}
-
-static int
__lock_get_lk_max_locks(dbenv, lk_maxp)
DB_ENV *dbenv;
u_int32_t *lk_maxp;
@@ -301,8 +218,8 @@ __lock_get_lk_max_locks(dbenv, lk_maxp)
if (LOCKING_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
- *lk_maxp = ((DB_LOCKREGION *)((DB_LOCKTAB *)
- dbenv->lk_handle)->reginfo.primary)->stat.st_maxlocks;
+ *lk_maxp = ((DB_LOCKREGION *)
+ dbenv->lk_handle->reginfo.primary)->stat.st_maxlocks;
} else
*lk_maxp = dbenv->lk_max;
return (0);
@@ -325,7 +242,10 @@ __lock_set_lk_max_locks(dbenv, lk_max)
return (0);
}
-static int
+/*
+ * PUBLIC: int __lock_get_lk_max_lockers __P((DB_ENV *, u_int32_t *));
+ */
+int
__lock_get_lk_max_lockers(dbenv, lk_maxp)
DB_ENV *dbenv;
u_int32_t *lk_maxp;
@@ -335,8 +255,8 @@ __lock_get_lk_max_lockers(dbenv, lk_maxp)
if (LOCKING_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
- *lk_maxp = ((DB_LOCKREGION *)((DB_LOCKTAB *)
- dbenv->lk_handle)->reginfo.primary)->stat.st_maxlockers;
+ *lk_maxp = ((DB_LOCKREGION *)
+ dbenv->lk_handle->reginfo.primary)->stat.st_maxlockers;
} else
*lk_maxp = dbenv->lk_max_lockers;
return (0);
@@ -359,7 +279,10 @@ __lock_set_lk_max_lockers(dbenv, lk_max)
return (0);
}
-static int
+/*
+ * PUBLIC: int __lock_get_lk_max_objects __P((DB_ENV *, u_int32_t *));
+ */
+int
__lock_get_lk_max_objects(dbenv, lk_maxp)
DB_ENV *dbenv;
u_int32_t *lk_maxp;
@@ -369,8 +292,8 @@ __lock_get_lk_max_objects(dbenv, lk_maxp)
if (LOCKING_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
- *lk_maxp = ((DB_LOCKREGION *)((DB_LOCKTAB *)
- dbenv->lk_handle)->reginfo.primary)->stat.st_maxobjects;
+ *lk_maxp = ((DB_LOCKREGION *)
+ dbenv->lk_handle->reginfo.primary)->stat.st_maxobjects;
} else
*lk_maxp = dbenv->lk_max_objects;
return (0);
@@ -393,7 +316,11 @@ __lock_set_lk_max_objects(dbenv, lk_max)
return (0);
}
-static int
+/*
+ * PUBLIC: int __lock_get_env_timeout
+ * PUBLIC: __P((DB_ENV *, db_timeout_t *, u_int32_t));
+ */
+int
__lock_get_env_timeout(dbenv, timeoutp, flag)
DB_ENV *dbenv;
db_timeout_t *timeoutp;
@@ -410,7 +337,7 @@ __lock_get_env_timeout(dbenv, timeoutp, flag)
if (LOCKING_ON(dbenv)) {
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
switch (flag) {
case DB_SET_LOCK_TIMEOUT:
*timeoutp = region->lk_timeout;
@@ -422,7 +349,7 @@ __lock_get_env_timeout(dbenv, timeoutp, flag)
ret = 1;
break;
}
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
} else
switch (flag) {
case DB_SET_LOCK_TIMEOUT:
@@ -465,7 +392,7 @@ __lock_set_env_timeout(dbenv, timeout, flags)
if (LOCKING_ON(dbenv)) {
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
switch (flags) {
case DB_SET_LOCK_TIMEOUT:
region->lk_timeout = timeout;
@@ -477,7 +404,7 @@ __lock_set_env_timeout(dbenv, timeout, flags)
ret = 1;
break;
}
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
} else
switch (flags) {
case DB_SET_LOCK_TIMEOUT:
diff --git a/db/lock/lock_region.c b/db/lock/lock_region.c
index b03dc74f1..c3a1b401d 100644
--- a/db/lock/lock_region.c
+++ b/db/lock/lock_region.c
@@ -1,32 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_region.c,v 11.82 2004/10/15 16:59:42 bostic Exp $
+ * $Id: lock_region.c,v 12.11 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
static int __lock_region_init __P((DB_ENV *, DB_LOCKTAB *));
static size_t
__lock_region_size __P((DB_ENV *));
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-static size_t __lock_region_maint __P((DB_ENV *));
-#endif
-
/*
* 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.
@@ -73,7 +62,9 @@ __lock_open(dbenv)
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
size_t size;
- int ret;
+ int region_locked, ret;
+
+ region_locked = 0;
/* Create the lock table structure. */
if ((ret = __os_calloc(dbenv, 1, sizeof(DB_LOCKTAB), &lt)) != 0)
@@ -100,6 +91,16 @@ __lock_open(dbenv)
region = lt->reginfo.primary =
R_ADDR(&lt->reginfo, lt->reginfo.rp->primary);
+ /* Set remaining pointers into region. */
+ lt->conflicts = R_ADDR(&lt->reginfo, region->conf_off);
+ lt->obj_tab = R_ADDR(&lt->reginfo, region->obj_off);
+ lt->locker_tab = R_ADDR(&lt->reginfo, region->locker_off);
+
+ dbenv->lk_handle = lt;
+
+ LOCK_SYSTEM_LOCK(dbenv);
+ region_locked = 1;
+
if (dbenv->lk_detect != DB_LOCK_NORUN) {
/*
* Check for incompatible automatic deadlock detection requests.
@@ -113,7 +114,7 @@ __lock_open(dbenv)
if (region->detect != DB_LOCK_NORUN &&
dbenv->lk_detect != DB_LOCK_DEFAULT &&
region->detect != dbenv->lk_detect) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"lock_open: incompatible deadlock detector mode");
ret = EINVAL;
goto err;
@@ -131,22 +132,18 @@ __lock_open(dbenv)
if (dbenv->tx_timeout != 0)
region->tx_timeout = dbenv->tx_timeout;
- /* Set remaining pointers into region. */
- lt->conflicts = R_ADDR(&lt->reginfo, region->conf_off);
- lt->obj_tab = R_ADDR(&lt->reginfo, region->obj_off);
- lt->locker_tab = R_ADDR(&lt->reginfo, region->locker_off);
+ LOCK_SYSTEM_UNLOCK(dbenv);
+ region_locked = 0;
- R_UNLOCK(dbenv, &lt->reginfo);
-
- dbenv->lk_handle = lt;
return (0);
-err: if (lt->reginfo.addr != NULL) {
- if (F_ISSET(&lt->reginfo, REGION_CREATE))
- ret = __db_panic(dbenv, ret);
- R_UNLOCK(dbenv, &lt->reginfo);
+err: dbenv->lk_handle = NULL;
+ if (lt->reginfo.addr != NULL) {
+ if (region_locked)
+ LOCK_SYSTEM_UNLOCK(dbenv);
(void)__db_r_detach(dbenv, &lt->reginfo, 0);
}
+
__os_free(dbenv, lt);
return (ret);
}
@@ -165,9 +162,6 @@ __lock_region_init(dbenv, lt)
DB_LOCKER *lidp;
DB_LOCKOBJ *op;
DB_LOCKREGION *region;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- size_t maint_size;
-#endif
u_int32_t i;
u_int8_t *addr;
int lk_modes, ret;
@@ -179,6 +173,10 @@ __lock_region_init(dbenv, lt)
region = lt->reginfo.primary;
memset(region, 0, sizeof(*region));
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_LOCK_REGION, 0, &region->mtx_region)) != 0)
+ return (ret);
+
/* Select a conflict matrix if none specified. */
if (dbenv->lk_modes == 0)
if (CDB_LOCKING(dbenv)) {
@@ -229,33 +227,15 @@ __lock_region_init(dbenv, lt)
__db_hashinit(addr, region->locker_t_size);
region->locker_off = R_OFFSET(&lt->reginfo, addr);
-#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,
- sizeof(REGMAINT) + maint_size, 0, &addr)) != 0)
- goto mem_err;
- __db_maintinit(&lt->reginfo, addr, maint_size);
- region->maint_off = R_OFFSET(&lt->reginfo, addr);
-#endif
-
- /*
- * Initialize locks onto a free list. Initialize and lock the mutex
- * so that when we need to block, all we need do is try to acquire
- * the mutex.
- */
+ /* Initialize locks onto a free list. */
SH_TAILQ_INIT(&region->free_locks);
for (i = 0; i < region->stat.st_maxlocks; ++i) {
if ((ret = __db_shalloc(&lt->reginfo,
- sizeof(struct __db_lock), MUTEX_ALIGN, &lp)) != 0)
+ sizeof(struct __db_lock), 0, &lp)) != 0)
goto mem_err;
- lp->status = DB_LSTAT_FREE;
+ lp->mtx_lock = MUTEX_INVALID;
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);
+ lp->status = DB_LSTAT_FREE;
SH_TAILQ_INSERT_HEAD(&region->free_locks, lp, links, __db_lock);
}
@@ -276,7 +256,7 @@ __lock_region_init(dbenv, lt)
for (i = 0; i < region->stat.st_maxlockers; ++i) {
if ((ret = __db_shalloc(&lt->reginfo,
sizeof(DB_LOCKER), 0, &lidp)) != 0) {
-mem_err: __db_err(dbenv,
+mem_err: __db_errx(dbenv,
"Unable to allocate memory for the lock table");
return (ret);
}
@@ -316,14 +296,13 @@ __lock_dbenv_refresh(dbenv)
*/
if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
/* Discard the conflict matrix. */
- __db_shalloc_free(reginfo, R_ADDR(&lt->reginfo, lr->conf_off));
+ __db_shalloc_free(reginfo, R_ADDR(reginfo, lr->conf_off));
/* Discard the object hash table. */
- __db_shalloc_free(reginfo, R_ADDR(&lt->reginfo, lr->obj_off));
+ __db_shalloc_free(reginfo, R_ADDR(reginfo, lr->obj_off));
/* Discard the locker hash table. */
- __db_shalloc_free(
- reginfo, R_ADDR(&lt->reginfo, lr->locker_off));
+ __db_shalloc_free(reginfo, R_ADDR(reginfo, lr->locker_off));
/* Discard locks. */
while ((lp =
@@ -360,6 +339,19 @@ __lock_dbenv_refresh(dbenv)
}
/*
+ * __lock_region_mutex_count --
+ * Return the number of mutexes the lock region will need.
+ *
+ * PUBLIC: u_int32_t __lock_region_mutex_count __P((DB_ENV *));
+ */
+u_int32_t
+__lock_region_mutex_count(dbenv)
+ DB_ENV *dbenv;
+{
+ return (dbenv->lk_max);
+}
+
+/*
* __lock_region_size --
* Return the region size.
*/
@@ -377,20 +369,16 @@ __lock_region_size(dbenv)
retval += __db_shalloc_size(sizeof(DB_LOCKREGION), 0);
retval += __db_shalloc_size(
(size_t)(dbenv->lk_modes * dbenv->lk_modes), 0);
- retval += __db_shalloc_size(__db_tablesize
- (dbenv->lk_max_lockers) * (sizeof(DB_HASHTAB)), 0);
- retval += __db_shalloc_size(__db_tablesize
- (dbenv->lk_max_objects) * (sizeof(DB_HASHTAB)), 0);
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ retval += __db_shalloc_size(
+ __db_tablesize(dbenv->lk_max_objects) * (sizeof(DB_HASHTAB)), 0);
+ retval += __db_shalloc_size(
+ __db_tablesize(dbenv->lk_max_lockers) * (sizeof(DB_HASHTAB)), 0);
retval +=
- __db_shalloc_size(sizeof(REGMAINT) + __lock_region_maint(dbenv), 0);
-#endif
- retval += __db_shalloc_size
- (sizeof(struct __db_lock), MUTEX_ALIGN) * dbenv->lk_max;
+ __db_shalloc_size(sizeof(struct __db_lock), 0) * dbenv->lk_max;
retval +=
- __db_shalloc_size(sizeof(DB_LOCKOBJ), 1) * dbenv->lk_max_objects;
+ __db_shalloc_size(sizeof(DB_LOCKOBJ), 0) * dbenv->lk_max_objects;
retval +=
- __db_shalloc_size(sizeof(DB_LOCKER), 1) * dbenv->lk_max_lockers;
+ __db_shalloc_size(sizeof(DB_LOCKER), 0) * dbenv->lk_max_lockers;
/*
* Include 16 bytes of string space per lock. DB doesn't use it
@@ -403,51 +391,3 @@ __lock_region_size(dbenv)
return (retval);
}
-
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-/*
- * __lock_region_maint --
- * Return the amount of space needed for region maintenance info.
- */
-static size_t
-__lock_region_maint(dbenv)
- DB_ENV *dbenv;
-{
- size_t s;
-
- s = sizeof(DB_MUTEX *) * dbenv->lk_max;
- return (s);
-}
-#endif
-
-/*
- * __lock_region_destroy
- * Destroy any region maintenance info.
- *
- * PUBLIC: void __lock_region_destroy __P((DB_ENV *, REGINFO *));
- */
-void
-__lock_region_destroy(dbenv, infop)
- DB_ENV *dbenv;
- REGINFO *infop;
-{
- /*
- * This routine is called in two cases: when discarding the mutexes
- * from a previous Berkeley DB run, during recovery, and two, when
- * discarding the mutexes as we shut down the database environment.
- * In the latter case, we also need to discard shared memory segments,
- * this is the last time we use them, and the last region-specific
- * call we make.
- */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- DB_LOCKREGION *lt;
-
- lt = R_ADDR(infop, infop->rp->primary);
-
- __db_shlocks_destroy(infop, R_ADDR(infop, lt->maint_off));
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, R_ADDR(infop, lt->maint_off));
-#endif
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, infop->primary);
-}
diff --git a/db/lock/lock_stat.c b/db/lock/lock_stat.c
index 7cf56bb90..90bb57bb7 100644
--- a/db/lock/lock_stat.c
+++ b/db/lock/lock_stat.c
@@ -1,33 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_stat.c,v 11.64 2004/10/15 16:59:42 bostic Exp $
+ * $Id: lock_stat.c,v 12.17 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.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
-
-#include <ctype.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/db_page.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -54,7 +36,8 @@ __lock_stat_pp(dbenv, statp, flags)
DB_LOCK_STAT **statp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -64,12 +47,9 @@ __lock_stat_pp(dbenv, statp, flags)
"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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__lock_stat(dbenv, statp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -95,20 +75,20 @@ __lock_stat(dbenv, statp, flags)
return (ret);
/* Copy out the global statistics. */
- R_LOCK(dbenv, &lt->reginfo);
+ LOCK_SYSTEM_LOCK(dbenv);
region = lt->reginfo.primary;
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;
+ __mutex_set_wait_info(dbenv, region->mtx_region,
+ &stats->st_region_wait, &stats->st_region_nowait);
stats->st_regsize = lt->reginfo.rp->size;
if (LF_ISSET(DB_STAT_CLEAR)) {
tmp = region->stat;
memset(&region->stat, 0, sizeof(region->stat));
- MUTEX_CLEAR(&lt->reginfo.rp->mutex);
+ __mutex_clear(dbenv, region->mtx_region);
region->stat.st_id = tmp.st_id;
region->stat.st_cur_maxid = tmp.st_cur_maxid;
@@ -124,7 +104,7 @@ __lock_stat(dbenv, statp, flags)
region->stat.st_nmodes = tmp.st_nmodes;
}
- R_UNLOCK(dbenv, &lt->reginfo);
+ LOCK_SYSTEM_UNLOCK(dbenv);
*statp = stats;
return (0);
@@ -141,7 +121,8 @@ __lock_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -154,12 +135,9 @@ __lock_stat_print_pp(dbenv, flags)
flags, DB_STAT_CLEAR | DB_STAT_LOCK_FLAGS)) != 0)
return (ret);
- rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
- ret = __lock_stat_print(dbenv, flags);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__lock_stat_print(dbenv, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -235,11 +213,15 @@ __lock_print_stats(dbenv, flags)
__db_dl(dbenv,
"Total number of locks released", (u_long)sp->st_nreleases);
__db_dl(dbenv,
- "Total number of lock requests failing because DB_LOCK_NOWAIT was set",
- (u_long)sp->st_nnowaits);
+ "Total number of locks upgraded", (u_long)sp->st_nupgrade);
+ __db_dl(dbenv,
+ "Total number of locks downgraded", (u_long)sp->st_ndowngrade);
__db_dl(dbenv,
- "Total number of locks not immediately available due to conflicts",
- (u_long)sp->st_nconflicts);
+ "Lock requests not available due to conflicts, for which we waited",
+ (u_long)sp->st_lock_wait);
+ __db_dl(dbenv,
+ "Lock requests not available due to conflicts, for which we did not wait",
+ (u_long)sp->st_lock_nowait);
__db_dl(dbenv, "Number of deadlocks", (u_long)sp->st_ndeadlocks);
__db_dl(dbenv, "Lock timeout value", (u_long)sp->st_locktimeout);
__db_dl(dbenv, "Number of locks that have timed out",
@@ -277,31 +259,38 @@ __lock_print_all(dbenv, flags)
DB_MSGBUF mb;
int i, j;
u_int32_t k;
- char buf[64];
lt = dbenv->lk_handle;
lrp = lt->reginfo.primary;
DB_MSGBUF_INIT(&mb);
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
__db_print_reginfo(dbenv, &lt->reginfo, "Lock");
if (LF_ISSET(DB_STAT_ALL | DB_STAT_LOCK_PARAMS)) {
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "Lock region parameters:");
+ __mutex_print_debug_single(dbenv,
+ "Lock region region mutex", lrp->mtx_region, flags);
STAT_ULONG("locker table size", lrp->locker_t_size);
STAT_ULONG("object table size", lrp->object_t_size);
STAT_ULONG("obj_off", lrp->obj_off);
- STAT_ULONG("osynch_off", lrp->osynch_off);
STAT_ULONG("locker_off", lrp->locker_off);
- STAT_ULONG("lsynch_off", lrp->lsynch_off);
STAT_ULONG("need_dd", 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)) != 0)
- __db_msg(dbenv, "next_timeout: %s.%lu",
- buf, (u_long)lrp->next_timeout.tv_usec);
+ if (LOCK_TIME_ISVALID(&lrp->next_timeout)) {
+#ifdef HAVE_STRFTIME
+ time_t t = (time_t)lrp->next_timeout.tv_sec;
+ char tbuf[64];
+ if (strftime(tbuf, sizeof(tbuf),
+ "%m-%d-%H:%M:%S", localtime(&t)) != 0)
+ __db_msg(dbenv, "next_timeout: %s.%lu",
+ tbuf, (u_long)lrp->next_timeout.tv_usec);
+ else
+#endif
+ __db_msg(dbenv, "next_timeout: %lu",
+ (u_long)lrp->next_timeout.tv_usec);
+ }
}
if (LF_ISSET(DB_STAT_ALL | DB_STAT_LOCK_CONF)) {
@@ -320,28 +309,23 @@ __lock_print_all(dbenv, flags)
__db_msg(dbenv, "Locks grouped by lockers:");
__lock_print_header(dbenv);
for (k = 0; k < lrp->locker_t_size; k++)
- for (lip =
- SH_TAILQ_FIRST(&lt->locker_tab[k], __db_locker);
- lip != NULL;
- lip = SH_TAILQ_NEXT(lip, links, __db_locker)) {
+ SH_TAILQ_FOREACH(
+ lip, &lt->locker_tab[k], links, __db_locker)
__lock_dump_locker(dbenv, &mb, lt, lip);
- }
}
if (LF_ISSET(DB_STAT_ALL | DB_STAT_LOCK_OBJECTS)) {
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "Locks grouped by object:");
__lock_print_header(dbenv);
- for (k = 0; k < lrp->object_t_size; k++) {
- for (op = SH_TAILQ_FIRST(&lt->obj_tab[k], __db_lockobj);
- op != NULL;
- op = SH_TAILQ_NEXT(op, links, __db_lockobj)) {
+ for (k = 0; k < lrp->object_t_size; k++)
+ SH_TAILQ_FOREACH(
+ op, &lt->obj_tab[k], links, __db_lockobj) {
__lock_dump_object(lt, &mb, op);
__db_msg(dbenv, "%s", "");
}
- }
}
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
return (0);
}
@@ -354,34 +338,45 @@ __lock_dump_locker(dbenv, mbp, lt, lip)
DB_LOCKER *lip;
{
struct __db_lock *lp;
- time_t s;
- char buf[64];
+ char buf[DB_THREADID_STRLEN];
__db_msgadd(dbenv,
- mbp, "%8lx dd=%2ld locks held %-4d write locks %-4d",
- (u_long)lip->id, (long)lip->dd_id, lip->nlocks, lip->nwrites);
+ mbp, "%8lx dd=%2ld locks held %-4d write locks %-4d pid/thread %s",
+ (u_long)lip->id, (long)lip->dd_id, lip->nlocks, lip->nwrites,
+ dbenv->thread_id_string(dbenv, lip->pid, lip->tid, buf));
__db_msgadd(
dbenv, mbp, "%s", F_ISSET(lip, DB_LOCKER_DELETED) ? "(D)" : " ");
if (LOCK_TIME_ISVALID(&lip->tx_expire)) {
- s = (time_t)lip->tx_expire.tv_sec;
- if (strftime(buf,
- sizeof(buf), "%m-%d-%H:%M:%S", localtime(&s)) != 0)
+#ifdef HAVE_STRFTIME
+ time_t t = (time_t)lip->tx_expire.tv_sec;
+ char tbuf[64];
+ if (strftime(tbuf, sizeof(tbuf),
+ "%m-%d-%H:%M:%S", localtime(&t)) != 0)
__db_msgadd(dbenv, mbp, "expires %s.%lu",
- buf, (u_long)lip->tx_expire.tv_usec);
+ tbuf, (u_long)lip->tx_expire.tv_usec);
+ else
+#endif
+ __db_msgadd(dbenv, mbp, "expires %lu",
+ (u_long)lip->tx_expire.tv_usec);
}
if (F_ISSET(lip, DB_LOCKER_TIMEOUT))
__db_msgadd(dbenv, mbp, " lk timeout %u", lip->lk_timeout);
if (LOCK_TIME_ISVALID(&lip->lk_expire)) {
- s = (time_t)lip->lk_expire.tv_sec;
- if (strftime(buf,
- sizeof(buf), "%m-%d-%H:%M:%S", localtime(&s)) != 0)
+#ifdef HAVE_STRFTIME
+ time_t t = (time_t)lip->lk_expire.tv_sec;
+ char tbuf[64];
+ if (strftime(tbuf,
+ sizeof(tbuf), "%m-%d-%H:%M:%S", localtime(&t)) != 0)
__db_msgadd(dbenv, mbp, " lk expires %s.%lu",
- buf, (u_long)lip->lk_expire.tv_usec);
+ tbuf, (u_long)lip->lk_expire.tv_usec);
+ else
+#endif
+ __db_msgadd(dbenv, mbp, " lk expires %lu",
+ (u_long)lip->lk_expire.tv_usec);
}
DB_MSGBUF_FLUSH(dbenv, mbp);
- for (lp = SH_LIST_FIRST(&lip->heldby, __db_lock);
- lp != NULL; lp = SH_LIST_NEXT(lp, locker_links, __db_lock))
+ SH_LIST_FOREACH(lp, &lip->heldby, locker_links, __db_lock)
__lock_printlock(lt, mbp, lp, 1);
}
@@ -393,15 +388,9 @@ __lock_dump_object(lt, mbp, op)
{
struct __db_lock *lp;
- for (lp =
- SH_TAILQ_FIRST(&op->holders, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock))
+ SH_TAILQ_FOREACH(lp, &op->holders, links, __db_lock)
__lock_printlock(lt, mbp, lp, 1);
- for (lp =
- SH_TAILQ_FIRST(&op->waiters, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock))
+ SH_TAILQ_FOREACH(lp, &op->waiters, links, __db_lock)
__lock_printlock(lt, mbp, lp, 1);
}
@@ -447,9 +436,6 @@ __lock_printlock(lt, mbp, lp, ispgno)
}
switch (lp->mode) {
- case DB_LOCK_DIRTY:
- mode = "DIRTY_READ";
- break;
case DB_LOCK_IREAD:
mode = "IREAD";
break;
@@ -465,6 +451,9 @@ __lock_printlock(lt, mbp, lp, ispgno)
case DB_LOCK_READ:
mode = "READ";
break;
+ case DB_LOCK_READ_UNCOMMITTED:
+ mode = "READ_UNCOMMITTED";
+ break;
case DB_LOCK_WRITE:
mode = "WRITE";
break;
@@ -491,9 +480,6 @@ __lock_printlock(lt, mbp, lp, ispgno)
case DB_LSTAT_HELD:
status = "HELD";
break;
- case DB_LSTAT_NOTEXIST:
- status = "NOTEXIST";
- break;
case DB_LSTAT_PENDING:
status = "PENDING";
break;
diff --git a/db/lock/lock_timer.c b/db/lock/lock_timer.c
index 55efb6c6c..11ccd3036 100644
--- a/db/lock/lock_timer.c
+++ b/db/lock/lock_timer.c
@@ -1,23 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_timer.c,v 11.141 2004/03/24 20:51:39 bostic Exp $
+ * $Id: lock_timer.c,v 12.6 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
/*
@@ -38,14 +30,11 @@ __lock_set_timeout(dbenv, locker, timeout, op)
db_timeout_t timeout;
u_int32_t op;
{
- DB_LOCKTAB *lt;
int ret;
- lt = dbenv->lk_handle;
-
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
ret = __lock_set_timeout_internal(dbenv, locker, timeout, op);
- UNLOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -127,7 +116,7 @@ __lock_inherit_timeout(dbenv, parent, locker)
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
ret = 0;
- LOCKREGION(dbenv, lt);
+ LOCK_SYSTEM_LOCK(dbenv);
/* If the parent does not exist, we are done. */
LOCKER_LOCK(lt, region, parent, locker_ndx);
@@ -162,8 +151,7 @@ __lock_inherit_timeout(dbenv, parent, locker)
}
done:
-err:
- UNLOCKREGION(dbenv, lt);
+err: LOCK_SYSTEM_UNLOCK(dbenv);
return (ret);
}
diff --git a/db/lock/lock_util.c b/db/lock/lock_util.c
index 0c38d72ac..be5d18626 100644
--- a/db/lock/lock_util.c
+++ b/db/lock/lock_util.c
@@ -1,60 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: lock_util.c,v 11.12 2004/09/22 03:48:29 bostic Exp $
+ * $Id: lock_util.c,v 12.7 2006/08/24 14:46:11 bostic Exp $
*/
#include "db_config.h"
-#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/hash.h"
#include "dbinc/lock.h"
/*
- * __lock_cmp --
- * This function is used to compare a DBT that is about to be entered
- * into a hash table with an object already in the hash table. Note
- * that it just returns true on equal and 0 on not-equal. Therefore
- * this function cannot be used as a sort function; its purpose is to
- * be used as a hash comparison function.
- *
- * PUBLIC: int __lock_cmp __P((const DBT *, DB_LOCKOBJ *));
- */
-int
-__lock_cmp(dbt, lock_obj)
- const DBT *dbt;
- DB_LOCKOBJ *lock_obj;
-{
- void *obj_data;
-
- obj_data = SH_DBT_PTR(&lock_obj->lockobj);
- return (dbt->size == lock_obj->lockobj.size &&
- memcmp(dbt->data, obj_data, dbt->size) == 0);
-}
-
-/*
- * PUBLIC: int __lock_locker_cmp __P((u_int32_t, DB_LOCKER *));
- */
-int
-__lock_locker_cmp(locker, sh_locker)
- u_int32_t locker;
- DB_LOCKER *sh_locker;
-{
- return (locker == sh_locker->id);
-}
-
-/*
* The next two functions are the hash functions used to store objects in the
* lock hash tables. They are hashing the same items, but one (__lock_ohash)
* takes a DBT (used for hashing a parameter passed from the user) and the
@@ -121,21 +81,6 @@ __lock_lhash(lock_obj)
}
/*
- * __lock_locker_hash --
- * Hash function for entering lockers into the locker hash table.
- * Since these are simply 32-bit unsigned integers, just return
- * the locker value.
- *
- * PUBLIC: u_int32_t __lock_locker_hash __P((u_int32_t));
- */
-u_int32_t
-__lock_locker_hash(locker)
- u_int32_t locker;
-{
- return (locker);
-}
-
-/*
* __lock_nomem --
* Report a lack of some resource.
*
@@ -146,6 +91,6 @@ __lock_nomem(dbenv, res)
DB_ENV *dbenv;
const char *res;
{
- __db_err(dbenv, "Lock table is out of available %s", res);
+ __db_errx(dbenv, "Lock table is out of available %s", res);
return (ENOMEM);
}
diff --git a/db/log/log.c b/db/log/log.c
index 14e888abd..825bcf478 100644
--- a/db/log/log.c
+++ b/db/log/log.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log.c,v 11.161 2004/10/15 16:59:42 bostic Exp $
+ * $Id: log.c,v 12.40 2006/08/24 14:46:12 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
@@ -26,7 +18,6 @@
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 *));
/*
* __log_open --
@@ -40,7 +31,10 @@ __log_open(dbenv)
{
DB_LOG *dblp;
LOG *lp;
- int ret;
+ u_int8_t *bulk;
+ int region_locked, ret;
+
+ region_locked = 0;
/* Create/initialize the DB_LOG structure. */
if ((ret = __os_calloc(dbenv, 1, sizeof(DB_LOG), &dblp)) != 0)
@@ -71,19 +65,16 @@ __log_open(dbenv)
/* Set the local addresses. */
lp = dblp->reginfo.primary =
R_ADDR(&dblp->reginfo, dblp->reginfo.rp->primary);
+ dblp->bufp = R_ADDR(&dblp->reginfo, lp->buffer_off);
/*
- * If the region is threaded, then we have to lock both the handles
- * and the region, and we need to allocate a mutex for that purpose.
+ * If the region is threaded, we have to lock the DBREG list, and we
+ * need to allocate a mutex for that purpose.
*/
- if (F_ISSET(dbenv, DB_ENV_THREAD) &&
- (ret = __db_mutex_setup(dbenv, &dblp->reginfo, &dblp->mutexp,
- MUTEX_ALLOC | MUTEX_NO_RLOCK)) != 0)
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_LOG_REGION, DB_MUTEX_PROCESS_ONLY, &dblp->mtx_dbreg)) != 0)
goto err;
- /* Initialize the rest of the structure. */
- dblp->bufp = R_ADDR(&dblp->reginfo, lp->buffer_off);
-
/*
* Set the handle -- we may be about to run recovery, which allocates
* log cursors. Log cursors require logging be already configured,
@@ -121,11 +112,26 @@ __log_open(dbenv)
* so that checkpoint gets a valid ckp_lsn value.
*/
if (IS_INIT_LSN(lp->lsn) &&
- (ret = __log_newfile(dblp, NULL, 0)) != 0)
+ (ret = __log_newfile(dblp, NULL, 0, 0)) != 0)
goto err;
- /* Initialize replication's next-expected LSN value. */
+ /*
+ * Initialize replication's next-expected LSN value
+ * and replication's bulk buffer.
+ */
lp->ready_lsn = lp->lsn;
+ if (IS_ENV_REPLICATED(dbenv)) {
+ if ((ret = __db_shalloc(&dblp->reginfo, MEGABYTE, 0,
+ &bulk)) != 0)
+ goto err;
+ lp->bulk_buf = R_OFFSET(&dblp->reginfo, bulk);
+ lp->bulk_len = MEGABYTE;
+ lp->bulk_off = 0;
+ } else {
+ lp->bulk_buf = INVALID_ROFF;
+ lp->bulk_len = 0;
+ lp->bulk_off = 0;
+ }
} else {
/*
* A process joining the region may have reset the log file
@@ -133,6 +139,9 @@ __log_open(dbenv)
* create. We need to check that the size is reasonable given
* the buffer size in the region.
*/
+ LOG_SYSTEM_LOCK(dbenv);
+ region_locked = 1;
+
if (dbenv->lg_size != 0) {
if ((ret =
__log_check_sizes(dbenv, dbenv->lg_size, 0)) != 0)
@@ -146,22 +155,21 @@ __log_open(dbenv)
F_SET(dbenv, DB_ENV_LOG_AUTOREMOVE);
if (lp->db_log_inmemory)
F_SET(dbenv, DB_ENV_LOG_INMEMORY);
+
+ LOG_SYSTEM_UNLOCK(dbenv);
+ region_locked = 0;
}
- R_UNLOCK(dbenv, &dblp->reginfo);
return (0);
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);
+ if (region_locked)
+ LOG_SYSTEM_UNLOCK(dbenv);
(void)__db_r_detach(dbenv, &dblp->reginfo, 0);
}
- if (dblp->mutexp != NULL)
- __db_mutex_free(dbenv, &dblp->reginfo, dblp->mutexp);
-
+ (void)__mutex_free(dbenv, &dblp->mtx_dbreg);
__os_free(dbenv, dblp);
return (ret);
@@ -176,13 +184,9 @@ __log_init(dbenv, dblp)
DB_ENV *dbenv;
DB_LOG *dblp;
{
- DB_MUTEX *flush_mutexp;
LOG *lp;
int ret;
void *p;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- u_int8_t *addr;
-#endif
/*
* This is the first point where we can validate the buffer size,
@@ -194,13 +198,17 @@ __log_init(dbenv, dblp)
return (ret);
if ((ret = __db_shalloc(&dblp->reginfo,
- sizeof(*lp), MUTEX_ALIGN, &dblp->reginfo.primary)) != 0)
+ sizeof(*lp), 0, &dblp->reginfo.primary)) != 0)
goto mem_err;
dblp->reginfo.rp->primary =
R_OFFSET(&dblp->reginfo, dblp->reginfo.primary);
lp = dblp->reginfo.primary;
memset(lp, 0, sizeof(*lp));
+ if ((ret =
+ __mutex_alloc(dbenv, MTX_LOG_REGION, 0, &lp->mtx_region)) != 0)
+ return (ret);
+
lp->fid_max = 0;
SH_TAILQ_INIT(&lp->fq);
lp->free_fid_stack = INVALID_ROFF;
@@ -224,40 +232,21 @@ __log_init(dbenv, dblp)
*/
ZERO_LSN(lp->cached_ckp_lsn);
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- /* Allocate room for the log maintenance info and initialize it. */
- if ((ret = __db_shalloc(&dblp->reginfo,
- sizeof(REGMAINT) + LG_MAINT_SIZE, 0, &addr)) != 0)
- goto mem_err;
- __db_maintinit(&dblp->reginfo, addr, LG_MAINT_SIZE);
- lp->maint_off = R_OFFSET(&dblp->reginfo, addr);
-#endif
-
- if ((ret = __db_mutex_setup(dbenv, &dblp->reginfo, &lp->fq_mutex,
- MUTEX_NO_RLOCK)) != 0)
+ if ((ret =
+ __mutex_alloc(dbenv, MTX_LOG_FILENAME, 0, &lp->mtx_filelist)) != 0)
return (ret);
-
- /*
- * We must create a place for the flush mutex separately; mutexes have
- * to be aligned to MUTEX_ALIGN, and the only way to guarantee that is
- * to make sure they're at the beginning of a shalloc'ed chunk.
- */
- if ((ret = __db_shalloc(&dblp->reginfo,
- sizeof(DB_MUTEX), MUTEX_ALIGN, &flush_mutexp)) != 0)
- goto mem_err;
- if ((ret = __db_mutex_setup(dbenv, &dblp->reginfo, flush_mutexp,
- MUTEX_NO_RLOCK)) != 0)
+ if ((ret = __mutex_alloc(dbenv, MTX_LOG_FLUSH, 0, &lp->mtx_flush)) != 0)
return (ret);
- lp->flush_mutex_off = R_OFFSET(&dblp->reginfo, flush_mutexp);
/* Initialize the buffer. */
if ((ret = __db_shalloc(&dblp->reginfo, dbenv->lg_bsize, 0, &p)) != 0) {
-mem_err: __db_err(dbenv, "Unable to allocate memory for the log buffer");
+mem_err: __db_errx( dbenv, "unable to allocate log region memory");
return (ret);
}
lp->regionmax = dbenv->lg_regionmax;
lp->buffer_off = R_OFFSET(&dblp->reginfo, p);
lp->buffer_size = dbenv->lg_bsize;
+ lp->filemode = dbenv->lg_filemode;
lp->log_size = lp->log_nsize = dbenv->lg_size;
/* Initialize the commit Queue. */
@@ -275,8 +264,11 @@ mem_err: __db_err(dbenv, "Unable to allocate memory for the log buffer");
* as each log file is created.
*/
lp->persist.magic = DB_LOGMAGIC;
+ /*
+ * Don't use __log_set_version because dbenv->dblp isn't set up yet.
+ */
lp->persist.version = DB_LOGVERSION;
- lp->persist.mode = (u_int32_t)dbenv->db_mode;
+ lp->persist.notused = 0;
/* Migrate persistent flags from the DB_ENV into the region. */
if (F_ISSET(dbenv, DB_ENV_LOG_AUTOREMOVE))
@@ -284,6 +276,7 @@ mem_err: __db_err(dbenv, "Unable to allocate memory for the log buffer");
if (F_ISSET(dbenv, DB_ENV_LOG_INMEMORY))
lp->db_log_inmemory = 1;
+ (void)time(&lp->timestamp);
return (0);
}
@@ -318,17 +311,18 @@ __log_recover(dblp)
return (0);
/*
- * If the last file is an old version, readable or no, start a new
+ * If the last file is an old, unreadable version, start a new
* file. Don't bother finding the end of the last log file;
* we assume that it's valid in its entirety, since the user
* should have shut down cleanly or run recovery before upgrading.
*/
- if (status == DB_LV_OLD_READABLE || status == DB_LV_OLD_UNREADABLE) {
+ if (status == DB_LV_OLD_UNREADABLE) {
lp->lsn.file = lp->s_lsn.file = cnt + 1;
lp->lsn.offset = lp->s_lsn.offset = 0;
goto skipsearch;
}
- DB_ASSERT(status == DB_LV_NORMAL);
+ DB_ASSERT(dbenv,
+ (status == DB_LV_NORMAL || status == DB_LV_OLD_READABLE));
/*
* We have the last useful log file and we've loaded any persistent
@@ -467,7 +461,7 @@ __log_find(dblp, find_first, valp, statusp)
*q = savech;
if (ret != 0) {
- __db_err(dbenv, "%s: %s", dir, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", dir);
__os_free(dbenv, p);
return (ret);
}
@@ -513,15 +507,16 @@ __log_find(dblp, find_first, valp, statusp)
if (logval != 0 && clv < logval)
continue;
- if ((ret = __log_valid(dblp, clv, 1, NULL, 0, &status)) != 0) {
- __db_err(dbenv, "Invalid log file: %s: %s",
- names[cnt], db_strerror(ret));
+ if ((ret = __log_valid(dblp, clv, 1, NULL, 0,
+ &status, NULL)) != 0) {
+ __db_err(
+ dbenv, ret, "Invalid log file: %s", names[cnt]);
goto err;
}
switch (status) {
case DB_LV_NONEXISTENT:
/* __log_valid never returns DB_LV_NONEXISTENT. */
- DB_ASSERT(0);
+ DB_ASSERT(dbenv, 0);
break;
case DB_LV_INCOMPLETE:
/*
@@ -578,16 +573,17 @@ err: __os_dirfree(dbenv, names, fcnt);
* normal, if it's zero-length, or if it's an old version).
*
* PUBLIC: int __log_valid __P((DB_LOG *, u_int32_t, int,
- * PUBLIC: DB_FH **, u_int32_t, logfile_validity *));
+ * PUBLIC: DB_FH **, u_int32_t, logfile_validity *, u_int32_t *));
*/
int
-__log_valid(dblp, number, set_persist, fhpp, flags, statusp)
+__log_valid(dblp, number, set_persist, fhpp, flags, statusp, versionp)
DB_LOG *dblp;
u_int32_t number;
int set_persist;
DB_FH **fhpp;
u_int32_t flags;
logfile_validity *statusp;
+ u_int32_t *versionp;
{
DB_CIPHER *db_cipher;
DB_ENV *dbenv;
@@ -649,8 +645,7 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
* The error was a fatal read error, not just an
* incompletely initialized log file.
*/
- __db_err(dbenv, "Ignoring log file: %s: %s",
- fname, db_strerror(ret));
+ __db_err(dbenv, ret, "ignoring log file: %s", fname);
goto err;
}
@@ -684,13 +679,14 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
* data length for our persistent data.
*/
if ((hdr->len - hdrsize) != sizeof(LOGP)) {
- __db_err(dbenv, "log record size mismatch");
+ __db_errx(dbenv, "log record size mismatch");
goto err;
}
/* Check the checksum and decrypt. */
- if ((ret = __db_check_chksum(dbenv, db_cipher, &hdr->chksum[0],
- (u_int8_t *)persist, hdr->len - hdrsize, is_hmac)) != 0) {
- __db_err(dbenv, "log record checksum mismatch");
+ if ((ret = __db_check_chksum(dbenv, hdr, db_cipher,
+ &hdr->chksum[0], (u_int8_t *)persist,
+ hdr->len - hdrsize, is_hmac)) != 0) {
+ __db_errx(dbenv, "log record checksum mismatch");
goto err;
}
if ((ret = db_cipher->decrypt(dbenv, db_cipher->data,
@@ -700,7 +696,7 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
/* Validate the header. */
if (persist->magic != DB_LOGMAGIC) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Ignoring log file: %s: magic number %lx, not %lx",
fname, (u_long)persist->magic, (u_long)DB_LOGMAGIC);
ret = EINVAL;
@@ -714,7 +710,7 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
*/
if (persist->version > DB_LOGVERSION) {
/* This is a fatal error--the log file is newer than DB. */
- __db_err(dbenv,
+ __db_errx(dbenv,
"Unacceptable log file %s: unsupported log version %lu",
fname, (u_long)persist->version);
ret = EINVAL;
@@ -722,7 +718,7 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
} else if (persist->version < DB_LOGOLDVER) {
status = DB_LV_OLD_UNREADABLE;
/* This is a non-fatal error, but give some feedback. */
- __db_err(dbenv,
+ __db_errx(dbenv,
"Skipping log file %s: historic log version %lu",
fname, (u_long)persist->version);
/*
@@ -739,9 +735,9 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
* old log headers put the length and checksum in a different location.
*/
if (!CRYPTO_ON(dbenv) && ((ret = __db_check_chksum(dbenv,
- db_cipher, &hdr->chksum[0], (u_int8_t *)persist,
+ hdr, db_cipher, &hdr->chksum[0], (u_int8_t *)persist,
hdr->len - hdrsize, is_hmac)) != 0)) {
- __db_err(dbenv, "log record checksum mismatch");
+ __db_errx(dbenv, "log record checksum mismatch");
goto err;
}
@@ -750,18 +746,14 @@ __log_valid(dblp, number, set_persist, fhpp, flags, statusp)
* set the region's persistent information based on the headers.
*
* Override the current log file size.
- *
- * XXX
- * Always use the persistent header's mode, regardless of what was set
- * in the current environment. We've always done it this way, but it's
- * probably a bug -- I can't think of a way not-changing the mode would
- * be a problem, though.
*/
if (set_persist) {
lp = dblp->reginfo.primary;
lp->log_size = persist->log_size;
- lp->persist.mode = persist->mode;
+ lp->persist.version = persist->version;
}
+ if (versionp != NULL)
+ *versionp = persist->version;
err: if (fname != NULL)
__os_free(dbenv, fname);
@@ -773,7 +765,8 @@ err: if (fname != NULL)
if (tmp != NULL)
__os_free(dbenv, tmp);
- *statusp = status;
+ if (statusp != NULL)
+ *statusp = status;
return (ret);
}
@@ -791,15 +784,39 @@ __log_dbenv_refresh(dbenv)
DB_LOG *dblp;
LOG *lp;
REGINFO *reginfo;
+ struct __fname *fnp;
+ struct __db_filestart *filestart;
int ret, t_ret;
dblp = dbenv->lg_handle;
reginfo = &dblp->reginfo;
lp = reginfo->primary;
+ ret = 0;
+
+ /*
+ * Flush the log if it's private -- there's no Berkeley DB guarantee
+ * that this gets done, but in case the application has forgotten to
+ * flush for durability, it's the polite thing to do.
+ */
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE) &&
+ (t_ret = __log_flush(dbenv, NULL)) != 0 && ret == 0)
+ ret = t_ret;
/* We may have opened files as part of XA; if so, close them. */
- F_SET(dblp, DBLOG_RECOVER);
- ret = __dbreg_close_files(dbenv);
+ if ((t_ret = __dbreg_close_files(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /*
+ * After we close the files, check for any unlogged closes left in
+ * the shared memory queue. If we find any, we need to panic the
+ * region. Note, just set "ret" -- a panic overrides any previously
+ * set error return.
+ */
+ MUTEX_LOCK(dbenv, lp->mtx_filelist);
+ SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname)
+ if (F_ISSET(fnp, DB_FNAME_NOTLOGGED))
+ ret = __db_panic(dbenv, EINVAL);
+ MUTEX_UNLOCK(dbenv, lp->mtx_filelist);
/*
* If a private region, return the memory to the heap. Not needed for
@@ -808,8 +825,9 @@ __log_dbenv_refresh(dbenv)
*/
if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
/* Discard the flush mutex. */
- __db_shalloc_free(reginfo,
- R_ADDR(reginfo, lp->flush_mutex_off));
+ if ((t_ret =
+ __mutex_free(dbenv, &lp->mtx_flush)) != 0 && ret == 0)
+ ret = t_ret;
/* Discard the buffer. */
__db_shalloc_free(reginfo, R_ADDR(reginfo, lp->buffer_off));
@@ -818,11 +836,26 @@ __log_dbenv_refresh(dbenv)
if (lp->free_fid_stack != INVALID_ROFF)
__db_shalloc_free(reginfo,
R_ADDR(reginfo, lp->free_fid_stack));
+
+ /* Discard the list of in-memory log file markers. */
+ while ((filestart = SH_TAILQ_FIRST(&lp->logfiles,
+ __db_filestart)) != NULL) {
+ SH_TAILQ_REMOVE(&lp->logfiles, filestart, links,
+ __db_filestart);
+ __db_shalloc_free(reginfo, filestart);
+ }
+
+ while ((filestart = SH_TAILQ_FIRST(&lp->free_logfiles,
+ __db_filestart)) != NULL) {
+ SH_TAILQ_REMOVE(&lp->free_logfiles, filestart, links,
+ __db_filestart);
+ __db_shalloc_free(reginfo, filestart);
+ }
}
- /* Discard the per-thread lock. */
- if (dblp->mutexp != NULL)
- __db_mutex_free(dbenv, reginfo, dblp->mutexp);
+ /* Discard the per-thread DBREG mutex. */
+ if ((t_ret = __mutex_free(dbenv, &dblp->mtx_dbreg)) != 0 && ret == 0)
+ ret = t_ret;
/* Detach from the region. */
if ((t_ret = __db_r_detach(dbenv, reginfo, 0)) != 0 && ret == 0)
@@ -848,9 +881,9 @@ __log_dbenv_refresh(dbenv)
* __log_get_cached_ckp_lsn --
* Retrieve any last checkpoint LSN that we may have found on startup.
*
- * PUBLIC: void __log_get_cached_ckp_lsn __P((DB_ENV *, DB_LSN *));
+ * PUBLIC: int __log_get_cached_ckp_lsn __P((DB_ENV *, DB_LSN *));
*/
-void
+int
__log_get_cached_ckp_lsn(dbenv, ckp_lsnp)
DB_ENV *dbenv;
DB_LSN *ckp_lsnp;
@@ -858,12 +891,32 @@ __log_get_cached_ckp_lsn(dbenv, ckp_lsnp)
DB_LOG *dblp;
LOG *lp;
- dblp = (DB_LOG *)dbenv->lg_handle;
+ dblp = dbenv->lg_handle;
lp = (LOG *)dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
*ckp_lsnp = lp->cached_ckp_lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
+}
+
+/*
+ * __log_region_mutex_count --
+ * Return the number of mutexes the log region will need.
+ *
+ * PUBLIC: u_int32_t __log_region_mutex_count __P((DB_ENV *));
+ */
+u_int32_t
+__log_region_mutex_count(dbenv)
+ DB_ENV *dbenv;
+{
+ /*
+ * We need a few assorted mutexes, and one per transaction waiting
+ * on the group commit list. We can't know how many that will be,
+ * but it should be bounded by the maximum active transactions.
+ */
+ return (dbenv->tx_max + 5);
}
/*
@@ -881,44 +934,15 @@ __log_region_size(dbenv)
size_t s;
s = dbenv->lg_regionmax + dbenv->lg_bsize;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- if (F_ISSET(dbenv, DB_ENV_THREAD))
- s += sizeof(REGMAINT) + LG_MAINT_SIZE;
-#endif
- return (s);
-}
-/*
- * __log_region_destroy
- * Destroy any region maintenance info.
- *
- * PUBLIC: void __log_region_destroy __P((DB_ENV *, REGINFO *));
- */
-void
-__log_region_destroy(dbenv, infop)
- DB_ENV *dbenv;
- REGINFO *infop;
-{
/*
- * This routine is called in two cases: when discarding the mutexes
- * from a previous Berkeley DB run, during recovery, and two, when
- * discarding the mutexes as we shut down the database environment.
- * In the latter case, we also need to discard shared memory segments,
- * this is the last time we use them, and the last region-specific
- * call we make.
+ * If running with replication, add in space for bulk buffer.
+ * Allocate a megabyte and a little bit more space.
*/
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- LOG *lp;
-
- lp = R_ADDR(infop, infop->rp->primary);
+ if (IS_ENV_REPLICATED(dbenv))
+ s += MEGABYTE;
- /* Destroy mutexes. */
- __db_shlocks_destroy(infop, R_ADDR(infop, lp->maint_off));
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, R_ADDR(infop, lp->maint_off));
-#endif
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, infop->primary);
+ return (s);
}
/*
@@ -940,7 +964,6 @@ __log_vtruncate(dbenv, lsn, ckplsn, trunclsn)
DB_LOG *dblp;
DB_LOGC *logc;
DB_LSN end_lsn;
- DB_MUTEX *flush_mutexp;
LOG *lp;
u_int32_t bytes, c_len;
int ret, t_ret;
@@ -957,10 +980,10 @@ __log_vtruncate(dbenv, lsn, ckplsn, trunclsn)
return (ret);
/* Now do the truncate. */
- dblp = (DB_LOG *)dbenv->lg_handle;
+ dblp = dbenv->lg_handle;
lp = (LOG *)dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
/*
* Flush the log so we can simply initialize the in-memory buffer
@@ -982,7 +1005,7 @@ __log_vtruncate(dbenv, lsn, ckplsn, trunclsn)
* I am going to assume that the number of bytes written since
* the last checkpoint doesn't exceed a 32-bit number.
*/
- DB_ASSERT(lp->lsn.file >= ckplsn->file);
+ DB_ASSERT(dbenv, lp->lsn.file >= ckplsn->file);
bytes = 0;
if (ckplsn->file != lp->lsn.file) {
bytes = lp->log_size - ckplsn->offset;
@@ -1000,11 +1023,10 @@ __log_vtruncate(dbenv, lsn, ckplsn, trunclsn)
* 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)
+ MUTEX_LOCK(dbenv, lp->mtx_flush);
+ if (LOG_COMPARE(&lp->s_lsn, lsn) > 0)
lp->s_lsn = lp->lsn;
- MUTEX_UNLOCK(dbenv, flush_mutexp);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
/* Initialize the in-region buffer to a pristine state. */
ZERO_LSN(lp->f_lsn);
@@ -1017,17 +1039,14 @@ __log_vtruncate(dbenv, lsn, ckplsn, trunclsn)
if ((ret = __log_zero(dbenv, &lp->lsn, &end_lsn)) != 0)
goto err;
-err: R_UNLOCK(dbenv, &dblp->reginfo);
+err: LOG_SYSTEM_UNLOCK(dbenv);
return (ret);
}
/*
* __log_is_outdated --
- * Used by the replication system to identify if a client's logs
- * are too old. The log represented by dbenv is compared to the file
- * number passed in fnum. If the log file fnum does not exist and is
- * lower-numbered than the current logs, the we return *outdatedp non
- * zero, else we return it 0.
+ * Used by the replication system to identify if a client's logs are too
+ * old.
*
* PUBLIC: int __log_is_outdated __P((DB_ENV *, u_int32_t, int *));
*/
@@ -1046,12 +1065,17 @@ __log_is_outdated(dbenv, fnum, outdatedp)
dblp = dbenv->lg_handle;
+ /*
+ * The log represented by dbenv is compared to the file number passed
+ * in fnum. If the log file fnum does not exist and is lower-numbered
+ * than the current logs, return *outdatedp non-zero, else we return 0.
+ */
if (F_ISSET(dbenv, DB_ENV_LOG_INMEMORY)) {
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lp = (LOG *)dblp->reginfo.primary;
filestart = SH_TAILQ_FIRST(&lp->logfiles, __db_filestart);
- *outdatedp = (fnum < filestart->file);
- R_UNLOCK(dbenv, &dblp->reginfo);
+ *outdatedp = filestart == NULL ? 0 : (fnum < filestart->file);
+ LOG_SYSTEM_UNLOCK(dbenv);
return (0);
}
@@ -1060,7 +1084,7 @@ __log_is_outdated(dbenv, fnum, outdatedp)
return (ret);
/* If the file exists, we're just fine. */
- if (__os_exists(name, NULL) == 0)
+ if (__os_exists(dbenv, name, NULL) == 0)
goto out;
/*
@@ -1068,10 +1092,10 @@ __log_is_outdated(dbenv, fnum, outdatedp)
* too little. If it's too little, then we need to indicate
* that the LSN is outdated.
*/
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lp = (LOG *)dblp->reginfo.primary;
cfile = lp->lsn.file;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
if (cfile > fnum)
*outdatedp = 1;
@@ -1082,8 +1106,10 @@ out: __os_free(dbenv, name);
/*
* __log_zero --
* Zero out the tail of a log after a truncate.
+ *
+ * PUBLIC: int __log_zero __P((DB_ENV *, DB_LSN *, DB_LSN *));
*/
-static int
+int
__log_zero(dbenv, from_lsn, to_lsn)
DB_ENV *dbenv;
DB_LSN *from_lsn, *to_lsn;
@@ -1099,9 +1125,9 @@ __log_zero(dbenv, from_lsn, to_lsn)
char *fname;
dblp = dbenv->lg_handle;
- DB_ASSERT(log_compare(from_lsn, to_lsn) <= 0);
- if (log_compare(from_lsn, to_lsn) > 0) {
- __db_err(dbenv,
+ DB_ASSERT(dbenv, LOG_COMPARE(from_lsn, to_lsn) <= 0);
+ if (LOG_COMPARE(from_lsn, to_lsn) > 0) {
+ __db_errx(dbenv,
"Warning: truncating to point beyond end of log");
return (0);
}
@@ -1109,19 +1135,18 @@ __log_zero(dbenv, from_lsn, to_lsn)
lp = (LOG *)dblp->reginfo.primary;
if (lp->db_log_inmemory) {
/*
- * Remove the first file if it is invalidated by this write.
- * Log records can't be bigger than a file, so we only need to
- * check the first file.
+ * Remove the files that are invalidated by this truncate.
*/
for (filestart = SH_TAILQ_FIRST(&lp->logfiles, __db_filestart);
- filestart != NULL && from_lsn->file < filestart->file;
- filestart = nextstart) {
+ filestart != NULL; filestart = nextstart) {
nextstart = SH_TAILQ_NEXT(filestart,
links, __db_filestart);
- SH_TAILQ_REMOVE(&lp->logfiles, filestart,
- links, __db_filestart);
- SH_TAILQ_INSERT_HEAD(&lp->free_logfiles, filestart,
- links, __db_filestart);
+ if (filestart->file > from_lsn->file) {
+ SH_TAILQ_REMOVE(&lp->logfiles,
+ filestart, links, __db_filestart);
+ SH_TAILQ_INSERT_HEAD(&lp->free_logfiles,
+ filestart, links, __db_filestart);
+ }
}
return (0);
@@ -1140,6 +1165,7 @@ __log_zero(dbenv, from_lsn, to_lsn)
break;
}
(void)__os_closehandle(dbenv, fhp);
+ (void)time(&lp->timestamp);
ret = __os_unlink(dbenv, fname);
__os_free(dbenv, fname);
if (ret != 0)
@@ -1154,14 +1180,13 @@ __log_zero(dbenv, from_lsn, to_lsn)
if ((ret = __os_ioinfo(dbenv,
NULL, dblp->lfhp, &mbytes, &bytes, NULL)) != 0)
goto err;
- DB_ASSERT((mbytes * MEGABYTE + bytes) >= from_lsn->offset);
+ DB_ASSERT(dbenv, (mbytes * MEGABYTE + bytes) >= from_lsn->offset);
len = (mbytes * MEGABYTE + bytes) - from_lsn->offset;
memset(buf, 0, sizeof(buf));
/* Initialize the write position. */
- if ((ret = __os_seek(dbenv,
- dblp->lfhp, 0, 0, from_lsn->offset, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, dblp->lfhp, 0, 0, from_lsn->offset)) != 0)
goto err;
while (len > 0) {
@@ -1185,9 +1210,9 @@ err: (void)__os_closehandle(dbenv, dblp->lfhp);
* PUBLIC: int __log_inmem_lsnoff __P((DB_LOG *, DB_LSN *, size_t *));
*/
int
-__log_inmem_lsnoff(dblp, lsn, offsetp)
+__log_inmem_lsnoff(dblp, lsnp, offsetp)
DB_LOG *dblp;
- DB_LSN *lsn;
+ DB_LSN *lsnp;
size_t *offsetp;
{
LOG *lp;
@@ -1196,9 +1221,9 @@ __log_inmem_lsnoff(dblp, lsn, offsetp)
lp = (LOG *)dblp->reginfo.primary;
SH_TAILQ_FOREACH(filestart, &lp->logfiles, links, __db_filestart)
- if (filestart->file == lsn->file) {
+ if (filestart->file == lsnp->file) {
*offsetp =
- (filestart->b_off + lsn->offset) % lp->buffer_size;
+ (filestart->b_off + lsnp->offset) % lp->buffer_size;
return (0);
}
@@ -1228,6 +1253,18 @@ __log_inmem_newfile(dblp, file)
lp = (LOG *)dblp->reginfo.primary;
/*
+ * If the log buffer is empty, reuse the filestart entry.
+ */
+ filestart = SH_TAILQ_FIRST(&lp->logfiles, __db_filestart);
+ if (filestart != NULL &&
+ RINGBUF_LEN(lp, filestart->b_off, lp->b_off) <=
+ sizeof(HDR) + sizeof(LOGP)) {
+ filestart->file = file;
+ filestart->b_off = lp->b_off;
+ return (0);
+ }
+
+ /*
* We write an empty header at the end of every in-memory log file.
* This is used during cursor traversal to indicate when to switch the
* LSN to the next file.
@@ -1256,7 +1293,7 @@ __log_inmem_newfile(dblp, file)
last = SH_TAILQ_LAST(&(lp)->logfiles, links, __db_filestart);
/* Check that we don't wrap. */
- DB_ASSERT(!first || first == last ||
+ DB_ASSERT(dblp->dbenv, !first || first == last ||
RINGBUF_LEN(lp, first->b_off, lp->b_off) ==
RINGBUF_LEN(lp, first->b_off, last->b_off) +
RINGBUF_LEN(lp, last->b_off, lp->b_off));
@@ -1279,13 +1316,16 @@ __log_inmem_chkspace(dblp, len)
DB_LOG *dblp;
size_t len;
{
+ DB_ENV *dbenv;
LOG *lp;
DB_LSN active_lsn, old_active_lsn;
struct __db_filestart *filestart;
+ int ret;
+ dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
- DB_ASSERT(lp->db_log_inmemory);
+ DB_ASSERT(dbenv, lp->db_log_inmemory);
/*
* Allow room for an extra header so that we don't need to check for
@@ -1299,7 +1339,7 @@ __log_inmem_chkspace(dblp, len)
* don't even bother checking: in that case we can always overwrite old
* log records, because we're never going to abort.
*/
- while (TXN_ON(dblp->dbenv) &&
+ while (TXN_ON(dbenv) &&
RINGBUF_LEN(lp, lp->b_off, lp->a_off) <= len) {
old_active_lsn = lp->active_lsn;
active_lsn = lp->lsn;
@@ -1308,20 +1348,21 @@ __log_inmem_chkspace(dblp, len)
* Drop the log region lock so we don't hold it while
* taking the transaction region lock.
*/
- R_UNLOCK(dblp->dbenv, &dblp->reginfo);
- __txn_getactive(dblp->dbenv, &active_lsn);
- R_LOCK(dblp->dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
+ if ((ret = __txn_getactive(dbenv, &active_lsn)) != 0)
+ return (ret);
+ LOG_SYSTEM_LOCK(dbenv);
active_lsn.offset = 0;
/* If we didn't make any progress, give up. */
- if (log_compare(&active_lsn, &old_active_lsn) == 0) {
- __db_err(dblp->dbenv,
+ if (LOG_COMPARE(&active_lsn, &old_active_lsn) == 0) {
+ __db_errx(dbenv,
"In-memory log buffer is full (an active transaction spans the buffer)");
return (DB_LOG_BUFFER_FULL);
}
/* Make sure we're moving the region LSN forwards. */
- if (log_compare(&active_lsn, &lp->active_lsn) > 0) {
+ if (LOG_COMPARE(&active_lsn, &lp->active_lsn) > 0) {
lp->active_lsn = active_lsn;
(void)__log_inmem_lsnoff(dblp, &active_lsn,
&lp->a_off);
@@ -1395,3 +1436,113 @@ __log_inmem_copyin(dblp, offset, buf, size)
if (nbytes < size)
memcpy(dblp->bufp, (u_int8_t *)buf + nbytes, size - nbytes);
}
+
+/*
+ * __log_set_version --
+ * Sets the current version of the log subsystem to the given version.
+ * Essentially this modifies the lp->persist.version field in the
+ * shared memory region. Called when region is initially created
+ * and when replication is starting up or finds a new master.
+ *
+ * PUBLIC: void __log_set_version __P((DB_ENV *, u_int32_t));
+ */
+void
+__log_set_version(dbenv, newver)
+ DB_ENV *dbenv;
+ u_int32_t newver;
+{
+ DB_LOG *dblp;
+ LOG *lp;
+
+ dblp = dbenv->lg_handle;
+ lp = (LOG *)dblp->reginfo.primary;
+ /*
+ * We should be able to update this atomically without locking.
+ */
+ lp->persist.version = newver;
+}
+
+/*
+ * __log_get_oldversion --
+ * Returns the last version of log that this environment was working
+ * with. Since there could be several versions of log files, if
+ * the user upgraded and didn't log archive, we check the version
+ * of the first log file, compare it to the last log file. If those
+ * are different, then there is an older log existing, and we then
+ * walk backward in the log files looking for the version of the
+ * most recent older log file.
+ *
+ * PUBLIC: int __log_get_oldversion __P((DB_ENV *, u_int32_t *));
+ */
+int
+__log_get_oldversion(dbenv, ver)
+ DB_ENV *dbenv;
+ u_int32_t *ver;
+{
+ DBT rec;
+ DB_LOG *dblp;
+ DB_LOGC *logc;
+ DB_LSN lsn;
+ u_int32_t firstfnum, fnum, lastver, oldver;
+ int ret, t_ret;
+
+ dblp = dbenv->lg_handle;
+
+ logc = NULL;
+ ret = 0;
+ oldver = DB_LOGVERSION;
+ memset(&rec, 0, sizeof(rec));
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
+ /*
+ * Get the version numbers of the first and last log files.
+ */
+ if ((ret = __log_c_get(logc, &lsn, &rec, DB_FIRST)) != 0) {
+ /*
+ * If there is no log file, we'll get DB_NOTFOUND.
+ * If we get that, set the version to the current.
+ */
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ goto err;
+ }
+ firstfnum = lsn.file;
+ if ((ret = __log_c_get(logc, &lsn, &rec, DB_LAST)) != 0)
+ goto err;
+ if ((ret = __log_valid(dblp, firstfnum, 0, NULL, 0,
+ NULL, &oldver)) != 0)
+ goto err;
+ /*
+ * If the first and last LSN are in the same file, then we
+ * already have the version in oldver. Return it.
+ */
+ if (firstfnum == lsn.file)
+ goto err;
+
+ /*
+ * Otherwise they're in different files and we call __log_valid
+ * to get the version numbers in both files.
+ */
+ if ((ret = __log_valid(dblp, lsn.file, 0, NULL, 0,
+ NULL, &lastver)) != 0)
+ goto err;
+ /*
+ * If the version numbers are different, walk backward getting
+ * the version of each log file until we find one that is
+ * different than the last.
+ */
+ if (oldver != lastver) {
+ for (fnum = lsn.file - 1; fnum >= firstfnum; fnum--) {
+ if ((ret = __log_valid(dblp, fnum, 0, NULL, 0,
+ NULL, &oldver)) != 0)
+ goto err;
+ if (oldver != lastver)
+ break;
+ }
+ }
+err: if (logc != NULL && ((t_ret = __log_c_close(logc)) != 0) && ret == 0)
+ ret = t_ret;
+ if (ret == 0 && ver != NULL)
+ *ver = oldver;
+ return (ret);
+}
diff --git a/db/log/log_archive.c b/db/log/log_archive.c
index 8b9e58163..bbaa56e86 100644
--- a/db/log/log_archive.c
+++ b/db/log/log_archive.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log_archive.c,v 11.62 2004/07/16 21:38:59 mjc Exp $
+ * $Id: log_archive.c,v 12.21 2006/09/07 20:05:32 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/log.h"
@@ -41,7 +33,8 @@ __log_archive_pp(dbenv, listp, flags)
char ***listp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -61,12 +54,9 @@ __log_archive_pp(dbenv, listp, flags)
return (ret);
}
- 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_archive(dbenv, listp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -85,11 +75,10 @@ __log_archive(dbenv, listp, flags)
LOG *lp;
DB_LOGC *logc;
DB_LSN stable_lsn;
- __txn_ckp_args *ckp_args;
u_int array_size, n;
u_int32_t fnum;
int ret, t_ret;
- char **array, **arrayp, *name, *p, *pref, buf[MAXPATHLEN];
+ char **array, **arrayp, *name, *p, *pref, path[DB_MAXPATHLEN];
dblp = dbenv->lg_handle;
lp = (LOG *)dblp->reginfo.primary;
@@ -117,22 +106,26 @@ __log_archive(dbenv, listp, flags)
return (0);
/*
- * Get the absolute pathname of the current directory. It would
- * be nice to get the shortest pathname of the database directory,
- * but that's just not possible.
- *
- * XXX
- * Can't trust getcwd(3) to set a valid errno. If it doesn't, just
- * guess that we ran out of memory.
+ * Prepend the original absolute pathname if the user wants an
+ * absolute path to the database environment directory.
*/
if (LF_ISSET(DB_ARCH_ABS)) {
+ /*
+ * XXX
+ * Can't trust getcwd(3) to set a valid errno, so don't display
+ * one unless we know it's good. It's likely a permissions
+ * problem: use something bland and useless in the default
+ * return value, so we don't send somebody off in the wrong
+ * direction.
+ */
__os_set_errno(0);
- if ((pref = getcwd(buf, sizeof(buf))) == NULL) {
- if (__os_get_errno() == 0)
- __os_set_errno(ENOMEM);
+ if (getcwd(path, sizeof(path)) == NULL) {
ret = __os_get_errno();
- goto err;
+ __db_err(dbenv,
+ ret, "no absolute path for the current directory");
+ return (ret);
}
+ pref = path;
} else
pref = NULL;
@@ -159,50 +152,23 @@ __log_archive(dbenv, listp, flags)
__log_autoremove(dbenv);
goto err;
case 0:
- memset(&rec, 0, sizeof(rec));
- if (!TXN_ON(dbenv)) {
- __log_get_cached_ckp_lsn(dbenv, &stable_lsn);
- if (IS_ZERO_LSN(stable_lsn) && (ret =
- __txn_findlastckp(dbenv, &stable_lsn, NULL)) != 0)
- goto err;
- if (IS_ZERO_LSN(stable_lsn))
- goto err;
- }
- else if (__txn_getckp(dbenv, &stable_lsn) != 0) {
- /*
- * A failure return means that there's no checkpoint
- * in the log (so we are not going to be deleting
- * any log files).
- */
- goto err;
- }
- if ((ret = __log_cursor(dbenv, &logc)) != 0)
- goto err;
- 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.
- */
+
+ ret = __log_get_stable_lsn(dbenv, &stable_lsn);
+ /*
+ * A return of DB_NOTFOUND means the checkpoint LSN
+ * is before the beginning of the log files we have.
+ * This is not an error; it just means we're done.
+ */
+ if (ret != 0) {
if (ret == DB_NOTFOUND)
ret = 0;
- if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
- ret = t_ret;
goto err;
}
- if ((ret = __log_c_close(logc)) != 0)
- goto err;
- 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;
default:
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__log_archive");
goto err;
}
@@ -218,7 +184,7 @@ __log_archive(dbenv, listp, flags)
for (n = 0; fnum > 0; --fnum) {
if ((ret = __log_name(dblp, fnum, &name, NULL, 0)) != 0)
goto err;
- if (__os_exists(name, NULL) != 0) {
+ if (__os_exists(dbenv, name, NULL) != 0) {
if (LF_ISSET(DB_ARCH_LOG) && fnum == stable_lsn.file)
continue;
__os_free(dbenv, name);
@@ -277,6 +243,73 @@ err: if (array != NULL) {
}
/*
+ * __log_get_stable_lsn --
+ * Get the stable lsn based on where checkpoints are.
+ *
+ * PUBLIC: int __log_get_stable_lsn __P((DB_ENV *, DB_LSN *));
+ */
+int
+__log_get_stable_lsn(dbenv, stable_lsn)
+ DB_ENV *dbenv;
+ DB_LSN *stable_lsn;
+{
+ DB_LOGC *logc;
+ DBT rec;
+ LOG *lp;
+ __txn_ckp_args *ckp_args;
+ int ret, t_ret;
+
+ lp = dbenv->lg_handle->reginfo.primary;
+
+ ret = 0;
+ memset(&rec, 0, sizeof(rec));
+ if (!TXN_ON(dbenv)) {
+ if ((ret = __log_get_cached_ckp_lsn(dbenv, stable_lsn)) != 0)
+ goto err;
+ /*
+ * No need to check for a return value of DB_NOTFOUND;
+ * __txn_findlastckp returns 0 if no checkpoint record
+ * is found. Instead of checking the return value, we
+ * check to see if the return LSN has been filled in.
+ */
+ if (IS_ZERO_LSN(*stable_lsn) && (ret =
+ __txn_findlastckp(dbenv, stable_lsn, NULL)) != 0)
+ goto err;
+ /*
+ * If the LSN has not been filled in return DB_NOTFOUND
+ * so that the caller knows it may be done.
+ */
+ if (IS_ZERO_LSN(*stable_lsn)) {
+ ret = DB_NOTFOUND;
+ goto err;
+ }
+ } else if ((ret = __txn_getckp(dbenv, stable_lsn)) != 0)
+ goto err;
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
+ /*
+ * Read checkpoint records until we find one that is on disk,
+ * then copy the ckp_lsn to the stable_lsn;
+ */
+ while ((ret = __log_c_get(logc, stable_lsn, &rec, DB_SET)) == 0 &&
+ (ret = __txn_ckp_read(dbenv, rec.data, &ckp_args)) == 0) {
+ if (stable_lsn->file < lp->s_lsn.file ||
+ (stable_lsn->file == lp->s_lsn.file &&
+ stable_lsn->offset < lp->s_lsn.offset)) {
+ *stable_lsn = ckp_args->ckp_lsn;
+ __os_free(dbenv, ckp_args);
+ break;
+ }
+ *stable_lsn = ckp_args->last_ckp;
+ __os_free(dbenv, ckp_args);
+ }
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+err:
+ return (ret);
+}
+
+/*
* __log_autoremove --
* Delete any non-essential log files.
*
@@ -286,17 +319,30 @@ void
__log_autoremove(dbenv)
DB_ENV *dbenv;
{
+ int ret;
char **begin, **list;
- if (__log_archive(dbenv, &list, DB_ARCH_ABS) != 0)
+ /*
+ * Complain if there's an error, but don't return the error to our
+ * caller. Auto-remove is done when writing a log record, and we
+ * don't want to fail a write, which could fail the corresponding
+ * committing transaction, for a permissions error.
+ */
+ if ((ret = __log_archive(dbenv, &list, DB_ARCH_ABS)) != 0) {
+ if (ret != DB_NOTFOUND)
+ __db_err(dbenv, ret, "log file auto-remove");
return;
+ }
+ /*
+ * Remove the files. No error message needed for __os_unlink failure,
+ * the underlying OS layer has its own error handling.
+ */
if (list != NULL) {
for (begin = list; *list != NULL; ++list)
(void)__os_unlink(dbenv, *list);
__os_ufree(dbenv, begin);
}
- return;
}
/*
@@ -330,7 +376,7 @@ __build_data(dbenv, pref, listp)
for (n = 0; (ret = __log_c_get(logc, &lsn, &rec, DB_PREV)) == 0;) {
if (rec.size < sizeof(rectype)) {
ret = EINVAL;
- __db_err(dbenv, "DB_ENV->log_archive: bad log record");
+ __db_errx(dbenv, "DB_ENV->log_archive: bad log record");
break;
}
@@ -340,7 +386,7 @@ __build_data(dbenv, pref, listp)
if ((ret =
__dbreg_register_read(dbenv, rec.data, &argp)) != 0) {
ret = EINVAL;
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->log_archive: unable to read log record");
break;
}
@@ -425,7 +471,7 @@ free_continue: __os_free(dbenv, argp);
goto err2;
/* If the file doesn't exist, ignore it. */
- if (__os_exists(real_name, NULL) != 0) {
+ if (__os_exists(dbenv, real_name, NULL) != 0) {
__os_free(dbenv, real_name);
__os_free(dbenv, array[last]);
array[last] = NULL;
diff --git a/db/log/log_compare.c b/db/log/log_compare.c
index 97d0367ea..996771797 100644
--- a/db/log/log_compare.c
+++ b/db/log/log_compare.c
@@ -1,19 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log_compare.c,v 11.8 2004/01/28 03:36:17 bostic Exp $
+ * $Id: log_compare.c,v 12.8 2006/09/14 15:00:49 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
+#include "dbinc/log.h"
/*
* log_compare --
@@ -25,11 +22,46 @@ int
log_compare(lsn0, lsn1)
const DB_LSN *lsn0, *lsn1;
{
- if (lsn0->file != lsn1->file)
- return (lsn0->file < lsn1->file ? -1 : 1);
+ return (LOG_COMPARE(lsn0, lsn1));
+}
+
+/*
+ * __log_check_page_lsn --
+ * Panic if the page's lsn in past the end of the current log.
+ *
+ * PUBLIC: int __log_check_page_lsn __P((DB_ENV *, DB *, DB_LSN *));
+ */
+int
+__log_check_page_lsn(dbenv, dbp, lsnp)
+ DB_ENV *dbenv;
+ DB *dbp;
+ DB_LSN *lsnp;
+{
+ LOG *lp;
+ int ret;
+
+ lp = dbenv->lg_handle->reginfo.primary;
+ LOG_SYSTEM_LOCK(dbenv);
+
+ ret = LOG_COMPARE(lsnp, &lp->lsn);
- if (lsn0->offset != lsn1->offset)
- return (lsn0->offset < lsn1->offset ? -1 : 1);
+ LOG_SYSTEM_UNLOCK(dbenv);
+ if (ret >=0) {
+ __db_errx(dbenv,
+ "file %s has LSN %lu/%lu, past end of log at %lu/%lu",
+ dbp == NULL || dbp->fname == NULL ? "unknown" : dbp->fname,
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (u_long)lp->lsn.file,
+ (u_long)lp->lsn.offset);
+ __db_errx(dbenv, "%s",
+ "Commonly caused by moving a database from one transactional database");
+ __db_errx(dbenv, "%s",
+ "environment to another without clearing the database LSNs, or removing");
+ __db_errx(dbenv, "%s",
+ "all of the log files from a database environment");
+ return (EINVAL);
+ }
return (0);
}
diff --git a/db/log/log_debug.c b/db/log/log_debug.c
new file mode 100644
index 000000000..f142d88f0
--- /dev/null
+++ b/db/log/log_debug.c
@@ -0,0 +1,153 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: log_debug.c,v 1.9 2006/08/24 14:46:12 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+
+static int __log_printf_int __P((DB_ENV *, DB_TXN *, const char *, va_list));
+
+/*
+ * __log_printf_capi --
+ * Write a printf-style format string into the DB log.
+ *
+ * PUBLIC: int __log_printf_capi __P((DB_ENV *, DB_TXN *, const char *, ...))
+ * PUBLIC: __attribute__ ((__format__ (__printf__, 3, 4)));
+ */
+int
+#ifdef STDC_HEADERS
+__log_printf_capi(DB_ENV *dbenv, DB_TXN *txnid, const char *fmt, ...)
+#else
+__log_printf_capi(dbenv, txnid, fmt, va_alist)
+ DB_ENV *dbenv;
+ DB_TXN *txnid;
+ const char *fmt;
+ va_dcl
+#endif
+{
+ va_list ap;
+ int ret;
+
+#ifdef STDC_HEADERS
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+#endif
+ ret = __log_printf_pp(dbenv, txnid, fmt, ap);
+ va_end(ap);
+
+ return (ret);
+}
+
+/*
+ * __log_printf_pp --
+ * Handle the arguments and call an internal routine to do the work.
+ *
+ * The reason this routine isn't just folded into __log_printf_capi
+ * is because the C++ API has to call a C API routine, and you can
+ * only pass variadic arguments to a single routine.
+ *
+ * PUBLIC: int __log_printf_pp
+ * PUBLIC: __P((DB_ENV *, DB_TXN *, const char *, va_list));
+ */
+int
+__log_printf_pp(dbenv, txnid, fmt, ap)
+ DB_ENV *dbenv;
+ DB_TXN *txnid;
+ const char *fmt;
+ va_list ap;
+{
+ DB_THREAD_INFO *ip;
+ int rep_check, ret, t_ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lg_handle, "DB_ENV->log_printf", DB_INIT_LOG);
+
+ ENV_ENTER(dbenv, ip);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check && (ret = __env_rep_enter(dbenv, 0)) != 0)
+ return (ret);
+
+ ret = __log_printf_int(dbenv, txnid, fmt, ap);
+
+ if (rep_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && (ret) == 0)
+ ret = t_ret;
+ va_end(ap);
+ ENV_LEAVE(dbenv, ip);
+
+ return (ret);
+}
+
+/*
+ * __log_printf --
+ * Write a printf-style format string into the DB log.
+ *
+ * PUBLIC: int __log_printf __P((DB_ENV *, DB_TXN *, const char *, ...))
+ * PUBLIC: __attribute__ ((__format__ (__printf__, 3, 4)));
+ */
+int
+#ifdef STDC_HEADERS
+__log_printf(DB_ENV *dbenv, DB_TXN *txnid, const char *fmt, ...)
+#else
+__log_printf(dbenv, txnid, fmt, va_alist)
+ DB_ENV *dbenv;
+ DB_TXN *txnid;
+ const char *fmt;
+ va_dcl
+#endif
+{
+ va_list ap;
+ int ret;
+
+#ifdef STDC_HEADERS
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+#endif
+ ret = __log_printf_int(dbenv, txnid, fmt, ap);
+ va_end(ap);
+
+ return (ret);
+}
+
+/*
+ * __log_printf_int --
+ * Write a printf-style format string into the DB log (internal).
+ */
+static int
+__log_printf_int(dbenv, txnid, fmt, ap)
+ DB_ENV *dbenv;
+ DB_TXN *txnid;
+ const char *fmt;
+ va_list ap;
+{
+ DBT opdbt, msgdbt;
+ DB_LSN lsn;
+ char __logbuf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
+
+ if (!DBENV_LOGGING(dbenv)) {
+ __db_errx(dbenv, "Logging not currently permitted");
+ return (EAGAIN);
+ }
+
+ memset(&opdbt, 0, sizeof(opdbt));
+ opdbt.data = "DIAGNOSTIC";
+ opdbt.size = sizeof("DIAGNOSTIC") - 1;
+
+ memset(&msgdbt, 0, sizeof(msgdbt));
+ msgdbt.data = __logbuf;
+ msgdbt.size = (u_int32_t)vsnprintf(__logbuf, sizeof(__logbuf), fmt, ap);
+
+ return (__db_debug_log(
+ dbenv, txnid, &lsn, 0, &opdbt, -1, &msgdbt, NULL, 0));
+}
diff --git a/db/log/log_get.c b/db/log/log_get.c
index 2e8f09a6d..5d5570cc9 100644
--- a/db/log/log_get.c
+++ b/db/log/log_get.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log_get.c,v 11.110 2004/09/17 22:00:31 mjc Exp $
+ * $Id: log_get.c,v 12.35 2006/09/07 20:05:32 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -30,13 +24,14 @@ 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 **));
+ DB_LSN *, RLOCK *, DB_LSN *, HDR *, u_int8_t **, int *));
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 *, u_int32_t, 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));
+static int __log_c_version_pp __P((DB_LOGC *, u_int32_t *, u_int32_t));
/*
* __log_cursor_pp --
@@ -50,7 +45,8 @@ __log_cursor_pp(dbenv, logcp, flags)
DB_LOGC **logcp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -60,12 +56,9 @@ __log_cursor_pp(dbenv, logcp, flags)
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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_cursor(dbenv, logcp)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -89,7 +82,7 @@ __log_cursor(dbenv, logcp)
if ((ret = __os_calloc(dbenv, 1, sizeof(DB_LOGC), &logc)) != 0)
return (ret);
- logc->bp_size = DB_LOGC_BUF_SIZE;
+ logc->bp_size = LG_CURSOR_BUF_SIZE;
/*
* Set this to something positive.
*/
@@ -102,6 +95,7 @@ __log_cursor(dbenv, logcp)
logc->dbenv = dbenv;
logc->close = __log_c_close_pp;
logc->get = __log_c_get_pp;
+ logc->version = __log_c_version_pp;
*logcp = logc;
return (0);
@@ -116,8 +110,9 @@ __log_c_close_pp(logc, flags)
DB_LOGC *logc;
u_int32_t flags;
{
+ DB_THREAD_INFO *ip;
DB_ENV *dbenv;
- int rep_check, ret;
+ int ret;
dbenv = logc->dbenv;
@@ -125,12 +120,9 @@ __log_c_close_pp(logc, flags)
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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_c_close(logc)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -163,6 +155,88 @@ __log_c_close(logc)
}
/*
+ * __log_c_version_pp --
+ * DB_LOGC->version.
+ */
+static int
+__log_c_version_pp(logc, versionp, flags)
+ DB_LOGC *logc;
+ u_int32_t *versionp;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
+ int ret;
+
+ dbenv = logc->dbenv;
+
+ PANIC_CHECK(dbenv);
+ if ((ret = __db_fchk(dbenv, "DB_LOGC->version", flags, 0)) != 0)
+ return (ret);
+
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_c_version(logc, versionp)), ret);
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
+}
+
+/*
+ * __log_c_version --
+ * DB_LOGC->version.
+ *
+ * PUBLIC: int __log_c_version __P((DB_LOGC *, u_int32_t *));
+ */
+int
+__log_c_version(logc, versionp)
+ DB_LOGC *logc;
+ u_int32_t *versionp;
+{
+ DB_ENV *dbenv;
+ DB_LSN plsn;
+ DB_LOGC *plogc;
+ DBT hdrdbt;
+ LOGP *persist;
+ int ret, t_ret;
+
+ dbenv = logc->dbenv;
+ if (IS_ZERO_LSN(logc->c_lsn)) {
+ __db_errx(dbenv, "DB_LOGC->get: unset cursor");
+ return (EINVAL);
+ }
+ ret = 0;
+ /*
+ * Check if the persist info we have is for the same file
+ * as the current cursor position. If we already have the
+ * information, then we're done. If not, we open a new
+ * log cursor and get the header.
+ *
+ * Since most users walk forward through the log when
+ * using this feature (i.e. printlog) we're likely to
+ * have the information we need.
+ */
+ if (logc->c_lsn.file != logc->p_lsn.file) {
+ if ((ret = __log_cursor(dbenv, &plogc)) != 0)
+ return (ret);
+ plsn.file = logc->c_lsn.file;
+ plsn.offset = 0;
+ plogc->c_lsn = plsn;
+ memset(&hdrdbt, 0, sizeof(DBT));
+ if ((ret = __log_c_get_int(plogc,
+ &plsn, &hdrdbt, DB_SET)) == 0) {
+ persist = (LOGP *)hdrdbt.data;
+ logc->p_lsn = logc->c_lsn;
+ logc->p_version = persist->version;
+ }
+ if ((t_ret = __log_c_close(plogc)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+ /* Return the version. */
+ if (ret == 0)
+ *versionp = logc->p_version;
+ return (ret);
+}
+
+/*
* __log_c_get_pp --
* DB_LOGC->get pre/post processing.
*/
@@ -174,7 +248,8 @@ __log_c_get_pp(logc, alsn, dbt, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbenv = logc->dbenv;
@@ -190,7 +265,7 @@ __log_c_get_pp(logc, alsn, dbt, flags)
break;
case DB_SET:
if (IS_ZERO_LSN(*alsn)) {
- __db_err(dbenv, "DB_LOGC->get: invalid LSN: %lu/%lu",
+ __db_errx(dbenv, "DB_LOGC->get: invalid LSN: %lu/%lu",
(u_long)alsn->file, (u_long)alsn->offset);
return (EINVAL);
}
@@ -199,12 +274,9 @@ __log_c_get_pp(logc, alsn, dbt, flags)
return (__db_ferr(dbenv, "DB_LOGC->get", 1));
}
- 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_c_get(logc, alsn, dbt, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -223,6 +295,7 @@ __log_c_get(logc, alsn, dbt, flags)
{
DB_ENV *dbenv;
DB_LSN saved_lsn;
+ LOGP *persist;
int ret;
dbenv = logc->dbenv;
@@ -242,7 +315,6 @@ __log_c_get(logc, alsn, dbt, flags)
* put in there.
*/
saved_lsn = *alsn;
-
/*
* 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
@@ -266,6 +338,13 @@ __log_c_get(logc, alsn, dbt, flags)
default:
break;
}
+ /*
+ * If we're walking the log and we find a persist header
+ * then store so that we may use it later if needed.
+ */
+ persist = (LOGP *)dbt->data;
+ logc->p_lsn = *alsn;
+ logc->p_version = persist->version;
if (F_ISSET(dbt, DB_DBT_MALLOC)) {
__os_free(dbenv, dbt->data);
dbt->data = NULL;
@@ -300,9 +379,10 @@ __log_c_get_int(logc, alsn, dbt, flags)
logfile_validity status;
u_int32_t cnt;
u_int8_t *rp;
- int eof, is_hmac, ret;
+ int eof, is_hmac, need_cksum, ret;
dbenv = logc->dbenv;
+ db_cipher = dbenv->crypto_handle;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
is_hmac = 0;
@@ -346,7 +426,7 @@ __log_c_get_int(logc, alsn, dbt, flags)
*/
switch (status) {
case DB_LV_INCOMPLETE:
- DB_ASSERT(lp->lsn.file == cnt);
+ DB_ASSERT(dbenv, lp->lsn.file == cnt);
/* FALLTHROUGH */
case DB_LV_NORMAL:
case DB_LV_OLD_READABLE:
@@ -354,11 +434,11 @@ __log_c_get_int(logc, alsn, dbt, flags)
break;
case DB_LV_NONEXISTENT:
nlsn.file = 1;
- DB_ASSERT(lp->lsn.file == nlsn.file);
+ DB_ASSERT(dbenv, lp->lsn.file == nlsn.file);
break;
case DB_LV_OLD_UNREADABLE:
nlsn.file = cnt + 1;
- DB_ASSERT(lp->lsn.file == nlsn.file);
+ DB_ASSERT(dbenv, lp->lsn.file == nlsn.file);
break;
}
nlsn.offset = 0;
@@ -375,7 +455,7 @@ __log_c_get_int(logc, alsn, dbt, flags)
}
if ((!lp->db_log_inmemory &&
(__log_valid(dblp, nlsn.file - 1, 0, NULL,
- 0, &status) != 0 ||
+ 0, &status, NULL) != 0 ||
(status != DB_LV_NORMAL &&
status != DB_LV_OLD_READABLE)))) {
ret = DB_NOTFOUND;
@@ -391,7 +471,7 @@ __log_c_get_int(logc, alsn, dbt, flags)
case DB_LAST: /* Last log record. */
if (rlock == L_NONE) {
rlock = L_ACQUIRED;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
}
nlsn.file = lp->lsn.file;
nlsn.offset = lp->lsn.offset - lp->len;
@@ -400,8 +480,7 @@ __log_c_get_int(logc, alsn, dbt, flags)
nlsn = *alsn;
break;
default:
- DB_ASSERT(0);
- ret = EINVAL;
+ ret = __db_unknown_path(dbenv, "__log_c_get_int");
goto err;
}
@@ -422,7 +501,11 @@ next_file: ++nlsn.file;
hdr.size = HDR_NORMAL_SZ;
is_hmac = 0;
}
- /* Check to see if the record is in the cursor's buffer. */
+
+ /*
+ * Check to see if the record is in the cursor's buffer -- if so,
+ * we'll need to checksum it.
+ */
if ((ret = __log_c_incursor(logc, &nlsn, &hdr, &rp)) != 0)
goto err;
if (rp != NULL)
@@ -434,7 +517,7 @@ next_file: ++nlsn.file;
* buffer. Else, check the region's buffer.
*
* If the record isn't in the region's buffer, then either logs are
- * in-memory, and we're done, or we're going to have to read the
+ * in-memory, and we're done, or 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
@@ -445,14 +528,22 @@ next_file: ++nlsn.file;
*/
ZERO_LSN(last_lsn);
if (!F_ISSET(logc, DB_LOG_DISK) ||
- log_compare(&nlsn, &logc->c_lsn) > 0) {
+ LOG_COMPARE(&nlsn, &logc->c_lsn) > 0) {
F_CLR(logc, DB_LOG_DISK);
if ((ret = __log_c_inregion(logc,
- &nlsn, &rlock, &last_lsn, &hdr, &rp)) != 0)
+ &nlsn, &rlock, &last_lsn, &hdr, &rp, &need_cksum)) != 0)
goto err;
- if (rp != NULL)
- goto cksum;
+ if (rp != NULL) {
+ /*
+ * If we read the entire record from the in-memory log
+ * buffer, we don't need to checksum it, nor do we need
+ * to worry about vtruncate issues.
+ */
+ if (need_cksum)
+ goto cksum;
+ goto from_memory;
+ }
if (lp->db_log_inmemory)
goto nohdr;
}
@@ -467,7 +558,7 @@ next_file: ++nlsn.file;
*/
if (rlock == L_ACQUIRED) {
rlock = L_NONE;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
}
if ((ret = __log_c_ondisk(
logc, &nlsn, &last_lsn, flags, &hdr, &rp, &eof)) != 0)
@@ -485,13 +576,13 @@ next_file: ++nlsn.file;
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.
+ * get here is we acquired the region lock because of the caller's
+ * flag argument, but we found the record in the in-memory or cursor
+ * buffers. Improbable, but it's easy to avoid.)
*/
if (rlock == L_ACQUIRED) {
rlock = L_NONE;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
}
/*
@@ -500,17 +591,16 @@ cksum: /*
* 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,
+ if ((ret = __db_check_chksum(dbenv, &hdr, 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_errx(dbenv,
"DB_LOGC->get: log record LSN %lu/%lu: checksum mismatch",
(u_long)nlsn.file, (u_long)nlsn.offset);
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_LOGC->get: catastrophic recovery may be required");
ret = __db_panic(dbenv, DB_RUNRECOVERY);
}
@@ -538,9 +628,8 @@ nohdr: switch (flags) {
* the first record in that new file should have its
* prev field set correctly.
*/
- __db_err(dbenv,
+ __db_errx(dbenv,
"Encountered zero length records while traversing backwards");
- DB_ASSERT(0);
ret = __db_panic(dbenv, DB_RUNRECOVERY);
goto err;
case DB_SET:
@@ -550,6 +639,18 @@ nohdr: switch (flags) {
}
}
+from_memory:
+ /*
+ * Discard the region lock if we're still holding it. (The path to
+ * get here is we acquired the region lock because of the caller's
+ * flag argument, but we found the record in the in-memory or cursor
+ * buffers. Improbable, but it's easy to avoid.)
+ */
+ if (rlock == L_ACQUIRED) {
+ rlock = L_NONE;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ }
+
/* Copy the record into the user's DBT. */
if ((ret = __db_retcopy(dbenv, dbt, rp + hdr.size,
(u_int32_t)(hdr.len - hdr.size),
@@ -579,7 +680,7 @@ nohdr: switch (flags) {
logc->c_prev = hdr.prev;
err: if (rlock == L_ACQUIRED)
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -644,12 +745,13 @@ __log_c_incursor(logc, lsn, hdr, pp)
* 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)
+__log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp, need_cksump)
DB_LOGC *logc;
DB_LSN *lsn, *last_lsn;
RLOCK *rlockp;
HDR *hdr;
u_int8_t **pp;
+ int *need_cksump;
{
DB_ENV *dbenv;
DB_LOG *dblp;
@@ -661,16 +763,17 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
dbenv = logc->dbenv;
dblp = dbenv->lg_handle;
- lp = ((DB_LOG *)logc->dbenv->lg_handle)->reginfo.primary;
+ lp = dbenv->lg_handle->reginfo.primary;
ret = 0;
b_region = 0;
*pp = NULL;
+ *need_cksump = 0;
/* If we haven't yet acquired the log region lock, do so. */
if (*rlockp == L_NONE) {
*rlockp = L_ACQUIRED;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
}
/*
@@ -711,12 +814,12 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
*/
if (IS_ZERO_LSN(lp->lsn))
return (0);
- if (log_compare(lsn, &lp->lsn) >= 0)
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0)
return (DB_NOTFOUND);
else if (lp->db_log_inmemory) {
if ((ret = __log_inmem_lsnoff(dblp, lsn, &b_region)) != 0)
return (ret);
- } else if (lp->b_off == 0 || log_compare(lsn, &lp->f_lsn) < 0)
+ } else if (lp->b_off == 0 || LOG_COMPARE(lsn, &lp->f_lsn) < 0)
return (0);
/*
@@ -737,10 +840,10 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
*
* There is one case where the header check can fail: on a scan through
* in-memory logs, when we reach the end of a file we can read an empty
- * heady. In that case, it's safe to return zero, here: it will be
+ * header. In that case, it's safe to return zero, here: it will be
* caught in our caller. Otherwise, the LSN is bogus. Fail hard.
*/
- if (lp->db_log_inmemory || log_compare(lsn, &lp->f_lsn) > 0) {
+ if (lp->db_log_inmemory || LOG_COMPARE(lsn, &lp->f_lsn) > 0) {
if (!lp->db_log_inmemory)
b_region = lsn->offset - lp->w_off;
__log_inmem_copyout(dblp, b_region, hdr, hdr->size);
@@ -754,7 +857,7 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
} else if (lsn->offset + hdr->len > lp->w_off + lp->buffer_size)
return (DB_NOTFOUND);
if (logc->bp_size <= hdr->len) {
- len = (size_t)DB_ALIGN(hdr->len * 2, 128);
+ len = (size_t)DB_ALIGN((uintmax_t)hdr->len * 2, 128);
if ((ret =
__os_realloc(logc->dbenv, len, &logc->bp)) != 0)
return (ret);
@@ -765,7 +868,7 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
return (0);
}
- DB_ASSERT(!lp->db_log_inmemory);
+ DB_ASSERT(dbenv, !lp->db_log_inmemory);
/*
* There's a partial record, that is, the requested record starts
@@ -803,7 +906,7 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
* of waiting.
*/
if (logc->bp_size <= b_region + b_disk) {
- len = (size_t)DB_ALIGN((b_region + b_disk) * 2, 128);
+ len = (size_t)DB_ALIGN((uintmax_t)(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;
@@ -816,7 +919,7 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
/* Release the region lock. */
if (*rlockp == L_ACQUIRED) {
*rlockp = L_NONE;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
}
/*
@@ -831,6 +934,9 @@ __log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
return (ret);
if (nr < b_disk)
return (__log_c_shortread(logc, lsn, 0));
+
+ /* We read bytes from the disk, we'll need to checksum them. */
+ *need_cksump = 1;
}
/* Copy the header information into the caller's structure. */
@@ -898,7 +1004,7 @@ __log_c_ondisk(logc, lsn, last_lsn, flags, hdr, pp, eofp)
* Make sure we have enough space.
*/
if (logc->bp_size <= hdr->len) {
- len = (size_t)DB_ALIGN(hdr->len * 2, 128);
+ len = (size_t)DB_ALIGN((uintmax_t)hdr->len * 2, 128);
if ((ret = __os_realloc(dbenv, len, &logc->bp)) != 0)
return (ret);
logc->bp_size = (u_int32_t)len;
@@ -1012,7 +1118,7 @@ __log_c_hdrchk(logc, lsn, hdr, eofp)
* 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));
+ __db_err(dbenv, ret, "DB_LOGC->get");
return (ret);
}
if (logc->bp_maxrec != 0 && hdr->len > logc->bp_maxrec)
@@ -1021,7 +1127,7 @@ __log_c_hdrchk(logc, lsn, hdr, eofp)
return (0);
err: if (!F_ISSET(logc, DB_LOG_SILENT_ERR))
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_LOGC->get: LSN %lu/%lu: invalid log record header",
(u_long)lsn->file, (u_long)lsn->offset);
return (EIO);
@@ -1041,11 +1147,13 @@ __log_c_io(logc, fnum, offset, p, nrp, eofp)
{
DB_ENV *dbenv;
DB_LOG *dblp;
+ LOG *lp;
int ret;
char *np;
dbenv = logc->dbenv;
dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
/*
* If we've switched files, discard the current file handle and acquire
@@ -1070,15 +1178,13 @@ __log_c_io(logc, fnum, offset, p, nrp, eofp)
*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));
+ __db_err(dbenv, ret, "DB_LOGC->get: %s", np);
__os_free(dbenv, np);
return (ret);
}
if ((ret = __log_c_set_maxrec(logc, np)) != 0) {
- __db_err(dbenv,
- "DB_LOGC->get: %s: %s", np, db_strerror(ret));
+ __db_err(dbenv, ret, "DB_LOGC->get: %s", np);
__os_free(dbenv, np);
return (ret);
}
@@ -1087,22 +1193,14 @@ __log_c_io(logc, fnum, offset, p, nrp, eofp)
logc->bp_lsn.file = fnum;
}
- /* 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) {
+ ++lp->stat.st_rcount;
+ /* Seek to the record's offset and read the data. */
+ if ((ret = __os_io(dbenv, DB_IO_READ,
+ logc->c_fhp, 0, 0, offset, (u_int32_t)*nrp, p, 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));
+ __db_err(dbenv, ret,
+ "DB_LOGC->get: LSN: %lu/%lu: read",
+ (u_long)fnum, (u_long)offset);
return (ret);
}
@@ -1120,7 +1218,7 @@ __log_c_shortread(logc, lsn, check_silent)
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",
+ __db_errx(logc->dbenv, "DB_LOGC->get: LSN: %lu/%lu: short read",
(u_long)lsn->file, (u_long)lsn->offset);
return (EIO);
}
@@ -1178,3 +1276,132 @@ __log_c_set_maxrec(logc, np)
return (0);
}
+
+#ifdef HAVE_REPLICATION
+/*
+ * __log_rep_split --
+ * - Split a log buffer into individual records.
+ *
+ * This is used by a replication client to process a bulk log message from the
+ * master and convert it into individual __rep_apply requests.
+ *
+ * PUBLIC: int __log_rep_split __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *,
+ * PUBLIC: DB_LSN *));
+ */
+int
+__log_rep_split(dbenv, rp, rec, ret_lsnp, last_lsnp)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ DBT *rec;
+ DB_LSN *ret_lsnp;
+ DB_LSN *last_lsnp;
+{
+ DB_LSN save_lsn, tmp_lsn;
+ DBT logrec;
+ REP_CONTROL tmprp;
+ u_int32_t len;
+ int is_dup, is_perm, ret, save_ret;
+ u_int8_t *p, *ep;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ memset(&logrec, 0, sizeof(logrec));
+ memset(&save_lsn, 0, sizeof(save_lsn));
+ memset(&tmp_lsn, 0, sizeof(tmp_lsn));
+ /*
+ * We're going to be modifying the rp LSN contents so make
+ * our own private copy to play with.
+ */
+ memcpy(&tmprp, rp, sizeof(tmprp));
+ /*
+ * We send the bulk buffer on a PERM record, so often we will have
+ * DB_LOG_PERM set. However, we only want to mark the last LSN
+ * we have as a PERM record. So clear it here, and when we're on
+ * the last record below, set it.
+ */
+ is_perm = F_ISSET(rp, REPCTL_PERM);
+ F_CLR(&tmprp, REPCTL_PERM);
+ ret = save_ret = 0;
+ for (ep = (u_int8_t *)rec->data + rec->size, p = (u_int8_t *)rec->data;
+ p < ep; ) {
+ /*
+ * First thing in the buffer is the length. Then the LSN
+ * of this record, then the record itself.
+ */
+ /*
+ * XXX
+ * If/when we add architecture neutral log files we may want
+ * to send/receive these lengths in network byte order.
+ */
+ memcpy(&len, p, sizeof(len));
+ p += sizeof(len);
+ memcpy(&tmprp.lsn, p, sizeof(DB_LSN));
+ p += sizeof(DB_LSN);
+ logrec.data = p;
+ logrec.size = len;
+ RPRINT(dbenv, (dbenv, &mb,
+ "log_rep_split: Processing LSN [%lu][%lu]",
+ (u_long)tmprp.lsn.file, (u_long)tmprp.lsn.offset));
+ RPRINT(dbenv, (dbenv, &mb,
+ "log_rep_split: p %#lx ep %#lx logrec data %#lx, size %lu (%#lx)",
+ P_TO_ULONG(p), P_TO_ULONG(ep), P_TO_ULONG(logrec.data),
+ (u_long)logrec.size, (u_long)logrec.size));
+ is_dup = 0;
+ p += len;
+ if (p >= ep && is_perm)
+ F_SET(&tmprp, REPCTL_PERM);
+ ret = __rep_apply(dbenv,
+ &tmprp, &logrec, &tmp_lsn, &is_dup, last_lsnp);
+ RPRINT(dbenv, (dbenv, &mb,
+ "log_split: rep_apply ret %d, tmp_lsn [%lu][%lu]",
+ ret, (u_long)tmp_lsn.file, (u_long)tmp_lsn.offset));
+#if 0
+ /*
+ * This buffer may be old and we've already gotten these
+ * records. Short-circuit processing this buffer.
+ */
+ if (is_dup)
+ goto out;
+#endif
+ switch (ret) {
+ /*
+ * If we received the pieces we need for running recovery,
+ * short-circuit because recovery will truncate the log to
+ * the LSN we want anyway.
+ */
+ case DB_REP_LOGREADY:
+ goto out;
+ /*
+ * If we just handled a special record, retain that information.
+ */
+ case DB_REP_ISPERM:
+ case DB_REP_NOTPERM:
+ save_ret = ret;
+ save_lsn = tmp_lsn;
+ ret = 0;
+ break;
+ /*
+ * Normal processing, do nothing, just continue.
+ */
+ case 0:
+ break;
+ /*
+ * If we get an error, then stop immediately.
+ */
+ default:
+ goto out;
+ }
+ }
+out:
+ /*
+ * If we finish processing successfully, set our return values
+ * based on what we saw.
+ */
+ if (ret == 0) {
+ ret = save_ret;
+ *ret_lsnp = save_lsn;
+ }
+ return (ret);
+}
+#endif
diff --git a/db/log/log_method.c b/db/log/log_method.c
index 1565a53a0..812330906 100644
--- a/db/log/log_method.c
+++ b/db/log/log_method.c
@@ -1,48 +1,24 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log_method.c,v 11.50 2004/09/22 16:26:15 bostic Exp $
+ * $Id: log_method.c,v 12.10 2006/08/30 10:05:32 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
#include "dbinc/log.h"
-#ifdef HAVE_RPC
-#include "dbinc_auto/rpc_client_ext.h"
-#endif
-
-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 --
* Log specific initialization of the DB_ENV structure.
*
- * PUBLIC: void __log_dbenv_create __P((DB_ENV *));
+ * PUBLIC: int __log_dbenv_create __P((DB_ENV *));
*/
-void
+int
__log_dbenv_create(dbenv)
DB_ENV *dbenv;
{
@@ -52,55 +28,29 @@ __log_dbenv_create(dbenv)
* 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_bsize = 0;
dbenv->lg_regionmax = LG_BASE_REGION_SIZE;
-#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->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;
- dbenv->log_stat_print = NULL;
- } 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;
- dbenv->log_stat_print = __log_stat_print_pp;
- }
+ return (0);
}
-static int
+/*
+ * __log_dbenv_destroy --
+ * Log specific destruction of the DB_ENV structure.
+ *
+ * PUBLIC: void __log_dbenv_destroy __P((DB_ENV *));
+ */
+void
+__log_dbenv_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+}
+
+/*
+ * PUBLIC: int __log_get_lg_bsize __P((DB_ENV *, u_int32_t *));
+ */
+int
__log_get_lg_bsize(dbenv, lg_bsizep)
DB_ENV *dbenv;
u_int32_t *lg_bsizep;
@@ -110,8 +60,8 @@ __log_get_lg_bsize(dbenv, lg_bsizep)
if (LOGGING_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
- *lg_bsizep = ((LOG *)
- ((DB_LOG *)dbenv->lg_handle)->reginfo.primary)->buffer_size;
+ *lg_bsizep =
+ ((LOG *)dbenv->lg_handle->reginfo.primary)->buffer_size;
} else
*lg_bsizep = dbenv->lg_bsize;
return (0);
@@ -134,7 +84,63 @@ __log_set_lg_bsize(dbenv, lg_bsize)
return (0);
}
-static int
+/*
+ * PUBLIC: int __log_get_lg_filemode __P((DB_ENV *, int *));
+ */
+int
+__log_get_lg_filemode(dbenv, lg_modep)
+ DB_ENV *dbenv;
+ int *lg_modep;
+{
+ DB_LOG *dblp;
+
+ ENV_NOT_CONFIGURED(dbenv,
+ dbenv->lg_handle, "DB_ENV->get_lg_filemode", DB_INIT_LOG);
+
+ if (LOGGING_ON(dbenv)) {
+ dblp = dbenv->lg_handle;
+ LOG_SYSTEM_LOCK(dbenv);
+ *lg_modep = ((LOG *)dblp->reginfo.primary)->filemode;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ } else
+ *lg_modep = dbenv->lg_filemode;
+
+ return (0);
+}
+
+/*
+ * __log_set_lg_filemode --
+ * DB_ENV->set_lg_filemode.
+ *
+ * PUBLIC: int __log_set_lg_filemode __P((DB_ENV *, int));
+ */
+int
+__log_set_lg_filemode(dbenv, lg_mode)
+ DB_ENV *dbenv;
+ int lg_mode;
+{
+ DB_LOG *dblp;
+ LOG *lp;
+
+ ENV_NOT_CONFIGURED(dbenv,
+ dbenv->lg_handle, "DB_ENV->set_lg_filemode", DB_INIT_LOG);
+
+ if (LOGGING_ON(dbenv)) {
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ LOG_SYSTEM_LOCK(dbenv);
+ lp->filemode = lg_mode;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ } else
+ dbenv->lg_filemode = lg_mode;
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __log_get_lg_max __P((DB_ENV *, u_int32_t *));
+ */
+int
__log_get_lg_max(dbenv, lg_maxp)
DB_ENV *dbenv;
u_int32_t *lg_maxp;
@@ -146,9 +152,9 @@ __log_get_lg_max(dbenv, lg_maxp)
if (LOGGING_ON(dbenv)) {
dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
*lg_maxp = ((LOG *)dblp->reginfo.primary)->log_nsize;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
} else
*lg_maxp = dbenv->lg_size;
@@ -178,16 +184,19 @@ __log_set_lg_max(dbenv, lg_max)
return (ret);
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lp->log_nsize = lg_max;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
} else
dbenv->lg_size = lg_max;
return (0);
}
-static int
+/*
+ * PUBLIC: int __log_get_lg_regionmax __P((DB_ENV *, u_int32_t *));
+ */
+int
__log_get_lg_regionmax(dbenv, lg_regionmaxp)
DB_ENV *dbenv;
u_int32_t *lg_regionmaxp;
@@ -197,8 +206,8 @@ __log_get_lg_regionmax(dbenv, lg_regionmaxp)
if (LOGGING_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
- *lg_regionmaxp = ((LOG *)
- ((DB_LOG *)dbenv->lg_handle)->reginfo.primary)->regionmax;
+ *lg_regionmaxp =
+ ((LOG *)dbenv->lg_handle->reginfo.primary)->regionmax;
} else
*lg_regionmaxp = dbenv->lg_regionmax;
return (0);
@@ -219,8 +228,8 @@ __log_set_lg_regionmax(dbenv, lg_regionmax)
/* Let's not be silly. */
if (lg_regionmax != 0 && lg_regionmax < LG_BASE_REGION_SIZE) {
- __db_err(dbenv,
- "log file size must be >= %d", LG_BASE_REGION_SIZE);
+ __db_errx(dbenv,
+ "log region size must be >= %d", LG_BASE_REGION_SIZE);
return (EINVAL);
}
@@ -228,7 +237,10 @@ __log_set_lg_regionmax(dbenv, lg_regionmax)
return (0);
}
-static int
+/*
+ * PUBLIC: int __log_get_lg_dir __P((DB_ENV *, const char **));
+ */
+int
__log_get_lg_dir(dbenv, dirp)
DB_ENV *dbenv;
const char **dirp;
@@ -327,7 +339,7 @@ __log_check_sizes(dbenv, lg_max, lg_bsize)
int inmem;
if (LOGGING_ON(dbenv)) {
- lp = ((DB_LOG *)dbenv->lg_handle)->reginfo.primary;
+ lp = dbenv->lg_handle->reginfo.primary;
inmem = lp->db_log_inmemory;
lg_bsize = lp->buffer_size;
} else
@@ -340,7 +352,7 @@ __log_check_sizes(dbenv, lg_max, lg_bsize)
lg_max = LG_MAX_INMEM;
if (lg_bsize <= lg_max) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"in-memory log buffer must be larger than the log file size");
return (EINVAL);
}
diff --git a/db/log/log_put.c b/db/log/log_put.c
index 86deffe86..832a3b284 100644
--- a/db/log/log_put.c
+++ b/db/log/log_put.c
@@ -1,32 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log_put.c,v 11.168 2004/10/15 16:59:42 bostic Exp $
+ * $Id: log_put.c,v 12.46 2006/08/24 14:46:12 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 <stdio.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
@@ -57,7 +39,8 @@ __log_put_pp(dbenv, lsnp, udbt, flags)
const DBT *udbt;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -66,7 +49,7 @@ __log_put_pp(dbenv, lsnp, udbt, flags)
/* 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)
+ DB_FLUSH | DB_LOG_NOCOPY | DB_LOG_WRNOSYNC)) != 0)
return (ret);
/* DB_LOG_WRNOSYNC and DB_FLUSH are mutually exclusive. */
@@ -75,17 +58,14 @@ __log_put_pp(dbenv, lsnp, udbt, flags)
/* Replication clients should never write log records. */
if (IS_REP_CLIENT(dbenv)) {
- __db_err(dbenv,
+ __db_errx(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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_put(dbenv, lsnp, udbt, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -103,21 +83,45 @@ __log_put(dbenv, lsnp, udbt, flags)
u_int32_t flags;
{
DB_CIPHER *db_cipher;
- DBT *dbt, t;
+ DBT *dbt, newfiledbt, t;
DB_LOG *dblp;
DB_LSN lsn, old_lsn;
+ DB_REP *db_rep;
HDR hdr;
LOG *lp;
+ REP *rep;
+ REP_BULK bulk;
int lock_held, need_free, ret;
+ u_int32_t ctlflags;
u_int8_t *key;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
db_cipher = dbenv->crypto_handle;
+ db_rep = dbenv->rep_handle;
+ if (db_rep != NULL)
+ rep = db_rep->region;
+ else
+ rep = NULL;
+
dbt = &t;
t = *udbt;
lock_held = need_free = 0;
ZERO_LSN(old_lsn);
+ hdr.len = hdr.prev = 0;
+
+#if !defined(DEBUG_ROP) && !defined(DEBUG_WOP)
+ /*
+ * If we are not a rep application, but are sharing a master rep env,
+ * we should not be writing log records.
+ */
+ if (IS_REP_MASTER(dbenv) && db_rep->send == NULL) {
+ __db_errx(dbenv, "%s %s",
+ "Non-replication DB_ENV handle attempting",
+ "to modify a replicated environment");
+ return (EINVAL);
+ }
+#endif
/*
* If we are coming from the logging code, we use an internal flag,
@@ -143,30 +147,20 @@ __log_put(dbenv, lsnp, udbt, flags)
key = db_cipher->mac_key;
else
key = NULL;
- /* Otherwise, we actually have a record to put. Put it. */
/* Before we grab the region lock, calculate the record's checksum. */
- __db_chksum(dbt->data, dbt->size, key, hdr.chksum);
+ if (lp->persist.version != DB_LOGVERSION)
+ __db_chksum(NULL, dbt->data, dbt->size, key, hdr.chksum);
+ else
+ __db_chksum(&hdr, dbt->data, dbt->size, key, hdr.chksum);
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lock_held = 1;
if ((ret = __log_put_next(dbenv, &lsn, dbt, &hdr, &old_lsn)) != 0)
goto panic_check;
/*
- * If we are not a rep application, but are sharing a master rep env,
- * we should not be writing log records.
- */
- if (IS_REP_MASTER(dbenv) && dbenv->rep_send == NULL) {
- __db_err(dbenv, "%s %s",
- "Non-replication DB_ENV handle attempting",
- "to modify a replicated environment");
- ret = EINVAL;
- goto err;
- }
-
- /*
* Assign the return LSN before dropping the region lock. Necessary
* in case the lsn is a begin_lsn from a TXN_DETAIL structure passed
* in by the logging routines.
@@ -178,8 +172,10 @@ __log_put(dbenv, lsnp, udbt, flags)
* Replication masters need to drop the lock to send messages,
* but want to drop and reacquire it a minimal number of times.
*/
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
lock_held = 0;
+ ctlflags = LF_ISSET(DB_LOG_COMMIT | DB_LOG_CHKPNT) ?
+ REPCTL_PERM : 0;
/*
* If we changed files and we're in a replicated environment,
@@ -191,28 +187,68 @@ __log_put(dbenv, lsnp, udbt, flags)
* that the record we already put is a commit, so we don't just
* want to return failure.
*/
- if (!IS_ZERO_LSN(old_lsn))
- (void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWFILE, &old_lsn, NULL, 0);
+ if (!IS_ZERO_LSN(old_lsn)) {
+ memset(&newfiledbt, 0, sizeof(newfiledbt));
+ newfiledbt.data = &lp->persist.version;
+ newfiledbt.size = sizeof(lp->persist.version);
+ (void)__rep_send_message(dbenv, DB_EID_BROADCAST,
+ REP_NEWFILE, &old_lsn, &newfiledbt, 0, 0);
+ }
/*
- * Then send the log record itself on to our clients.
- *
+ * If we're doing bulk processing put it in the bulk buffer.
+ */
+ ret = 0;
+ if (FLD_ISSET(rep->config, REP_C_BULK)) {
+ /*
+ * Bulk could have been turned on by another process.
+ * If so, set the address into the bulk region now.
+ */
+ if (db_rep->bulk == NULL)
+ db_rep->bulk = R_ADDR(&dblp->reginfo,
+ lp->bulk_buf);
+ memset(&bulk, 0, sizeof(bulk));
+ bulk.addr = db_rep->bulk;
+ bulk.offp = &lp->bulk_off;
+ bulk.len = lp->bulk_len;
+ bulk.lsn = lsn;
+ bulk.type = REP_BULK_LOG;
+ bulk.eid = DB_EID_BROADCAST;
+ bulk.flagsp = &lp->bulk_flags;
+ ret = __rep_bulk_message(dbenv, &bulk, NULL,
+ &lsn, udbt, ctlflags);
+ }
+ if (!FLD_ISSET(rep->config, REP_C_BULK) ||
+ ret == DB_REP_BULKOVF) {
+ /*
+ * Then send the log record itself on to our clients.
+ */
+ /*
+ * !!!
+ * In the crypto case, we MUST send the udbt, not the
+ * now-encrypted dbt. Clients have no way to decrypt
+ * without the header.
+ */
+ ret = __rep_send_message(dbenv, DB_EID_BROADCAST,
+ REP_LOG, &lsn, udbt, ctlflags, 0);
+ }
+ /*
* If the send fails and we're a commit or checkpoint,
* there's nothing we can do; the record's in the log.
- * Flush it, even if we're running with TXN_NOSYNC, on the
- * grounds that it should be in durable form somewhere.
+ * Flush it, even if we're running with TXN_NOSYNC,
+ * on the grounds that it should be in durable
+ * form somewhere.
*/
+ if (ret != 0 && FLD_ISSET(ctlflags, REPCTL_PERM))
+ LF_SET(DB_FLUSH);
/*
- * !!!
- * In the crypto case, we MUST send the udbt, not the
- * now-encrypted dbt. Clients have no way to decrypt
- * without the header.
+ * We ignore send failures so reset 'ret' to 0 here.
+ * We needed to check special return values from
+ * bulk transfer and errors from either bulk or normal
+ * message sending need flushing on perm records. But
+ * otherwise we need to ignore it and reset it now.
*/
- if ((__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_LOG, &lsn, udbt, flags) != 0) &&
- LF_ISSET(DB_LOG_PERM))
- LF_SET(DB_FLUSH);
+ ret = 0;
}
/*
@@ -225,7 +261,7 @@ __log_put(dbenv, lsnp, udbt, flags)
*/
if (LF_ISSET(DB_FLUSH | DB_LOG_WRNOSYNC)) {
if (!lock_held) {
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lock_held = 1;
}
if ((ret = __log_flush_commit(dbenv, &lsn, flags)) != 0)
@@ -239,6 +275,9 @@ __log_put(dbenv, lsnp, udbt, flags)
if (LF_ISSET(DB_LOG_CHKPNT))
lp->stat.st_wc_bytes = lp->stat.st_wc_mbytes = 0;
+ /* Increment count of records added to the log. */
+ ++lp->stat.st_record;
+
if (0) {
panic_check: /*
* Writing log records cannot fail if we're a replication
@@ -252,7 +291,7 @@ panic_check: /*
}
err: if (lock_held)
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
if (need_free)
__os_free(dbenv, dbt->data);
@@ -267,13 +306,14 @@ err: if (lock_held)
}
/*
- * __log_txn_lsn --
+ * __log_current_lsn --
+ * Return the current LSN.
*
- * PUBLIC: void __log_txn_lsn
+ * PUBLIC: int __log_current_lsn
* PUBLIC: __P((DB_ENV *, DB_LSN *, u_int32_t *, u_int32_t *));
*/
-void
-__log_txn_lsn(dbenv, lsnp, mbytesp, bytesp)
+int
+__log_current_lsn(dbenv, lsnp, mbytesp, bytesp)
DB_ENV *dbenv;
DB_LSN *lsnp;
u_int32_t *mbytesp, *bytesp;
@@ -284,14 +324,10 @@ __log_txn_lsn(dbenv, lsnp, mbytesp, bytesp)
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
/*
- * We are trying to get the LSN of the last entry in the log. We use
- * this in two places: 1) DB_ENV->txn_checkpoint uses it as a first
- * value when trying to compute an LSN such that all transactions begun
- * before it are complete. 2) DB_ENV->txn_begin uses it as the
- * begin_lsn.
+ * We need the LSN of the last entry in the log.
*
* Typically, it's easy to get the last written LSN, you simply look
* at the current log pointer and back up the number of bytes of the
@@ -315,7 +351,9 @@ __log_txn_lsn(dbenv, lsnp, mbytesp, bytesp)
*bytesp = (u_int32_t)(lp->stat.st_wc_bytes + lp->b_off);
}
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
/*
@@ -334,7 +372,7 @@ __log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)
DB_LOG *dblp;
DB_LSN old_lsn;
LOG *lp;
- int newfile, ret;
+ int adv_file, newfile, ret;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
@@ -349,23 +387,32 @@ __log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)
*/
old_lsn = lp->lsn;
newfile = 0;
+ adv_file = 0;
+ /*
+ * If our current log is at an older version and we want to write
+ * a record then we need to advance the log.
+ */
+ if (lp->persist.version != DB_LOGVERSION) {
+ __log_set_version(dbenv, DB_LOGVERSION);
+ adv_file = 1;
+ }
/*
* If this information won't fit in the file, or if we're a
* replication client environment and have been told to do so,
* swap files.
*/
- if (lp->lsn.offset == 0 ||
+ if (adv_file || lp->lsn.offset == 0 ||
lp->lsn.offset + hdr->size + dbt->size > lp->log_size) {
if (hdr->size + sizeof(LOGP) + dbt->size > lp->log_size) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"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);
}
- if ((ret = __log_newfile(dblp, NULL, 0)) != 0)
+ if ((ret = __log_newfile(dblp, NULL, 0, 0)) != 0)
return (ret);
/*
@@ -378,12 +425,6 @@ __log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)
newfile = 1;
}
- /*
- * The offset into the log file at this point is the LSN where
- * we're about to put this record, and is the LSN the caller wants.
- */
- *lsn = lp->lsn;
-
/* If we switched log files, let our caller know where. */
if (newfile)
*old_lsnp = old_lsn;
@@ -443,11 +484,11 @@ __log_flush_commit(dbenv, lsnp, flags)
* Else, make sure that the commit record does not get out after we
* abort the transaction. Do this by overwriting the commit record
* in the buffer. (Note that other commits in this buffer will wait
- * wait until a successful write happens, we do not wake them.) We
- * point at the right part of the buffer and write an abort record
- * over the commit. We must then try and flush the buffer again,
- * since the interesting part of the buffer may have actually made
- * it out to disk before there was a failure, we can't know for sure.
+ * until a successful write happens, we do not wake them.) We point
+ * at the right part of the buffer and write an abort record over the
+ * commit. We must then try and flush the buffer again, since the
+ * interesting part of the buffer may have actually made it out to
+ * disk before there was a failure, we can't know for sure.
*/
if (__txn_force_abort(dbenv,
dblp->bufp + flush_lsn.offset - lp->w_off) == 0)
@@ -461,13 +502,14 @@ __log_flush_commit(dbenv, lsnp, flags)
* Initialize and switch to a new log file. (Note that this is
* called both when no log yet exists and when we fill a log file.)
*
- * PUBLIC: int __log_newfile __P((DB_LOG *, DB_LSN *, u_int32_t));
+ * PUBLIC: int __log_newfile __P((DB_LOG *, DB_LSN *, u_int32_t, u_int32_t));
*/
int
-__log_newfile(dblp, lsnp, logfile)
+__log_newfile(dblp, lsnp, logfile, version)
DB_LOG *dblp;
DB_LSN *lsnp;
u_int32_t logfile;
+ u_int32_t version;
{
DB_CIPHER *db_cipher;
DB_ENV *dbenv;
@@ -483,10 +525,11 @@ __log_newfile(dblp, lsnp, logfile)
dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
- DB_ASSERT(logfile == 0 || logfile > lp->lsn.file);
-
- /* If we're not at the beginning of a file already, start a new one. */
- if (lp->lsn.offset != 0) {
+ /*
+ * If we're not specifying a specific log file number and we're
+ * not at the beginning of a file already, start a new one.
+ */
+ if (logfile == 0 && lp->lsn.offset != 0) {
/*
* Flush the log so this file is out and can be closed. We
* cannot release the region lock here because we need to
@@ -526,11 +569,15 @@ __log_newfile(dblp, lsnp, logfile)
if (logfile != 0) {
lp->lsn.file = logfile;
lp->lsn.offset = 0;
- if ((ret = __log_newfh(dblp, 1)) != 0)
+ lp->w_off = 0;
+ if (lp->db_log_inmemory) {
+ lsn = lp->lsn;
+ (void)__log_vtruncate(dbenv, &lsn, &lsn, NULL);
+ } else if ((ret = __log_newfh(dblp, 1)) != 0)
return (ret);
}
- DB_ASSERT(lp->db_log_inmemory || lp->b_off == 0);
+ DB_ASSERT(dbenv, lp->db_log_inmemory || lp->b_off == 0);
if (lp->db_log_inmemory &&
(ret = __log_inmem_newfile(dblp, lp->lsn.file)) != 0)
return (ret);
@@ -550,18 +597,30 @@ __log_newfile(dblp, lsnp, logfile)
tsize += db_cipher->adj_size(tsize);
if ((ret = __os_calloc(dbenv, 1, tsize, &tmp)) != 0)
return (ret);
+ /*
+ * If we're told what version to make this file, then we
+ * need to be at that version. Update here.
+ */
+ if (version != 0) {
+ __log_set_version(dbenv, version);
+ if ((ret = __env_init_rec(dbenv, version)) != 0)
+ goto err;
+ }
lp->persist.log_size = lp->log_size = lp->log_nsize;
memcpy(tmp, &lp->persist, sizeof(LOGP));
- t.data = tmp;
- t.size = (u_int32_t)tsize;
+ DB_SET_DBT(t, tmp, tsize);
need_free = 1;
if ((ret =
__log_encrypt_record(dbenv, &t, &hdr, (u_int32_t)tsize)) != 0)
goto err;
- __db_chksum(t.data, t.size,
- (CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL, hdr.chksum);
- lsn = lp->lsn;
+ if (lp->persist.version != DB_LOGVERSION)
+ __db_chksum(NULL, t.data, t.size,
+ (CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL, hdr.chksum);
+ else
+ __db_chksum(&hdr, t.data, t.size,
+ (CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL, hdr.chksum);
+
if ((ret = __log_putr(dblp, &lsn,
&t, lastoff == 0 ? 0 : lastoff - lp->len, &hdr)) != 0)
goto err;
@@ -635,14 +694,32 @@ __log_putr(dblp, lsn, dbt, prev, h)
* here.
*/
if (hdr->chksum[0] == 0)
- __db_chksum(dbt->data, dbt->size,
- (CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL,
- hdr->chksum);
+ if (lp->persist.version != DB_LOGVERSION)
+ __db_chksum(NULL, dbt->data, dbt->size,
+ (CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL,
+ hdr->chksum);
+ else
+ __db_chksum(hdr, dbt->data, dbt->size,
+ (CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL,
+ hdr->chksum);
+ else if (lp->persist.version == DB_LOGVERSION) {
+ /*
+ * We need to correct for prev and len since they are not
+ * set before here.
+ */
+ LOG_HDR_SUM(CRYPTO_ON(dbenv), hdr, hdr->chksum);
+ }
if (lp->db_log_inmemory && (ret = __log_inmem_chkspace(dblp,
(u_int32_t)hdr->size + dbt->size)) != 0)
goto err;
+ /*
+ * The offset into the log file at this point is the LSN where
+ * we're about to put this record, and is the LSN the caller wants.
+ */
+ *lsn = lp->lsn;
+
if ((ret = __log_fill(dblp, lsn, hdr, (u_int32_t)hdr->size)) != 0)
goto err;
@@ -659,14 +736,13 @@ err:
* and be ignored.
*/
if (w_off + lp->buffer_size < lp->w_off) {
- DB_ASSERT(!lp->db_log_inmemory);
- if ((t_ret = __os_seek(dbenv,
- dblp->lfhp, 0, 0, w_off, 0, DB_OS_SEEK_SET)) != 0 ||
+ DB_ASSERT(dbenv, !lp->db_log_inmemory);
+ if ((t_ret = __os_seek(dbenv, dblp->lfhp, 0, 0, w_off)) != 0 ||
(t_ret = __os_read(dbenv, dblp->lfhp, dblp->bufp,
b_off, &nr)) != 0)
return (__db_panic(dbenv, t_ret));
if (nr != b_off) {
- __db_err(dbenv, "Short read while restoring log");
+ __db_errx(dbenv, "Short read while restoring log");
return (__db_panic(dbenv, EIO));
}
}
@@ -690,23 +766,33 @@ __log_flush_pp(dbenv, lsn)
DB_ENV *dbenv;
const DB_LSN *lsn;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int 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_db_rep_exit(dbenv);
-
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_flush(dbenv, lsn)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
/*
+ * 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.
+ * This all assumes we can read an 32-bit quantity in one state or
+ * the other, not in transition.
+ */
+#define ALREADY_FLUSHED(lp, lsnp) \
+ (((lp)->s_lsn.file > (lsnp)->file) || \
+ ((lp)->s_lsn.file == (lsnp)->file && \
+ (lp)->s_lsn.offset > (lsnp)->offset))
+
+/*
* __log_flush --
* DB_ENV->log_flush
*
@@ -718,12 +804,16 @@ __log_flush(dbenv, lsn)
const DB_LSN *lsn;
{
DB_LOG *dblp;
+ LOG *lp;
int ret;
dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
+ lp = dblp->reginfo.primary;
+ if (lsn != NULL && ALREADY_FLUSHED(lp, lsn))
+ return (0);
+ LOG_SYSTEM_LOCK(dbenv);
ret = __log_flush_int(dblp, lsn, 1);
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -743,7 +833,6 @@ __log_flush_int(dblp, lsnp, release)
struct __db_commit *commit;
DB_ENV *dbenv;
DB_LSN flush_lsn, f_lsn;
- DB_MUTEX *flush_mutexp;
LOG *lp;
size_t b_off;
u_int32_t ncommit, w_off;
@@ -751,7 +840,6 @@ __log_flush_int(dblp, lsnp, release)
dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
- flush_mutexp = R_ADDR(&dblp->reginfo, lp->flush_mutex_off);
ncommit = 0;
ret = 0;
@@ -772,32 +860,18 @@ __log_flush_int(dblp, lsnp, release)
} else if (lsnp->file > lp->lsn.file ||
(lsnp->file == lp->lsn.file &&
lsnp->offset > lp->lsn.offset - lp->len)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"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",
+ __db_errx(dbenv, "%s %s %s",
"Database environment corrupt; the wrong log files may",
"have been removed or incompatible database files imported",
"from another environment");
return (__db_panic(dbenv, DB_RUNRECOVERY));
} 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.
- * This all assumes we can read an integer in one
- * state or the other, not in transition.
- */
- if (lp->s_lsn.file > lsnp->file)
- return (0);
-
- if (lp->s_lsn.file == lsnp->file &&
- lp->s_lsn.offset > lsnp->offset)
+ if (ALREADY_FLUSHED(lp, lsnp))
return (0);
-
flush_lsn = *lsnp;
}
@@ -809,17 +883,15 @@ __log_flush_int(dblp, lsnp, release)
if ((commit = SH_TAILQ_FIRST(
&lp->free_commits, __db_commit)) == NULL) {
if ((ret = __db_shalloc(&dblp->reginfo,
- sizeof(struct __db_commit),
- MUTEX_ALIGN, &commit)) != 0)
+ sizeof(struct __db_commit), 0, &commit)) != 0)
goto flush;
memset(commit, 0, sizeof(*commit));
- if ((ret = __db_mutex_setup(dbenv, &dblp->reginfo,
- &commit->mutex, MUTEX_SELF_BLOCK |
- MUTEX_NO_RLOCK)) != 0) {
+ if ((ret = __mutex_alloc(dbenv, MTX_TXN_COMMIT,
+ DB_MUTEX_SELF_BLOCK, &commit->mtx_txnwait)) != 0) {
__db_shalloc_free(&dblp->reginfo, commit);
return (ret);
}
- MUTEX_LOCK(dbenv, &commit->mutex);
+ MUTEX_LOCK(dbenv, commit->mtx_txnwait);
} else
SH_TAILQ_REMOVE(
&lp->free_commits, commit, links, __db_commit);
@@ -830,16 +902,16 @@ __log_flush_int(dblp, lsnp, release)
* Flushes may be requested out of LSN order; be
* sure we only move lp->t_lsn forward.
*/
- if (log_compare(&lp->t_lsn, &flush_lsn) < 0)
+ if (LOG_COMPARE(&lp->t_lsn, &flush_lsn) < 0)
lp->t_lsn = flush_lsn;
commit->lsn = flush_lsn;
SH_TAILQ_INSERT_HEAD(
&lp->commits, commit, links, __db_commit);
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
/* Wait here for the in-progress flush to finish. */
- MUTEX_LOCK(dbenv, &commit->mutex);
- R_LOCK(dbenv, &dblp->reginfo);
+ MUTEX_LOCK(dbenv, commit->mtx_txnwait);
+ LOG_SYSTEM_LOCK(dbenv);
lp->ncommit--;
/*
@@ -862,7 +934,7 @@ __log_flush_int(dblp, lsnp, release)
* Protect flushing with its own mutex so we can release
* the region lock except during file switches.
*/
-flush: MUTEX_LOCK(dbenv, flush_mutexp);
+flush: MUTEX_LOCK(dbenv, lp->mtx_flush);
/*
* If the LSN is less than or equal to the last-sync'd LSN, we're done.
@@ -873,7 +945,7 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
if (flush_lsn.file < lp->s_lsn.file ||
(flush_lsn.file == lp->s_lsn.file &&
flush_lsn.offset < lp->s_lsn.offset)) {
- MUTEX_UNLOCK(dbenv, flush_mutexp);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
goto done;
}
@@ -886,17 +958,17 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
* written to this log file. Acquire a file descriptor if we don't
* already have one.
*/
- if (lp->b_off != 0 && log_compare(&flush_lsn, &lp->f_lsn) >= 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) {
- MUTEX_UNLOCK(dbenv, flush_mutexp);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
goto done;
}
lp->b_off = 0;
} else if (dblp->lfhp == NULL || dblp->lfname != lp->lsn.file)
if ((ret = __log_newfh(dblp, 0)) != 0) {
- MUTEX_UNLOCK(dbenv, flush_mutexp);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
goto done;
}
@@ -910,13 +982,13 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
f_lsn = lp->f_lsn;
lp->in_flush++;
if (release)
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
/* Sync all writes to disk. */
if ((ret = __os_fsync(dbenv, dblp->lfhp)) != 0) {
- MUTEX_UNLOCK(dbenv, flush_mutexp);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
if (release)
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
ret = __db_panic(dbenv, ret);
return (ret);
}
@@ -933,9 +1005,9 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
if (b_off == 0)
lp->s_lsn.offset = w_off;
- MUTEX_UNLOCK(dbenv, flush_mutexp);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
if (release)
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lp->in_flush--;
++lp->stat.st_scount;
@@ -948,17 +1020,15 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
done:
if (lp->ncommit != 0) {
first = 1;
- for (commit = SH_TAILQ_FIRST(&lp->commits, __db_commit);
- commit != NULL;
- commit = SH_TAILQ_NEXT(commit, links, __db_commit))
- if (log_compare(&lp->s_lsn, &commit->lsn) > 0) {
- MUTEX_UNLOCK(dbenv, &commit->mutex);
+ SH_TAILQ_FOREACH(commit, &lp->commits, links, __db_commit)
+ if (LOG_COMPARE(&lp->s_lsn, &commit->lsn) > 0) {
+ MUTEX_UNLOCK(dbenv, commit->mtx_txnwait);
SH_TAILQ_REMOVE(
&lp->commits, commit, links, __db_commit);
ncommit++;
} else if (first == 1) {
F_SET(commit, DB_COMMIT_FLUSH);
- MUTEX_UNLOCK(dbenv, &commit->mutex);
+ MUTEX_UNLOCK(dbenv, commit->mtx_txnwait);
SH_TAILQ_REMOVE(
&lp->commits, commit, links, __db_commit);
/*
@@ -1066,7 +1136,7 @@ __log_write(dblp, addr, len)
dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
- DB_ASSERT(!lp->db_log_inmemory);
+ DB_ASSERT(dbenv, !lp->db_log_inmemory);
/*
* If we haven't opened the log file yet or the current one has
@@ -1074,7 +1144,8 @@ __log_write(dblp, addr, len)
* about to write to the start of it, in other words, if the write
* offset is zero.
*/
- if (dblp->lfhp == NULL || dblp->lfname != lp->lsn.file)
+ if (dblp->lfhp == NULL || dblp->lfname != lp->lsn.file ||
+ dblp->lf_timestamp != lp->timestamp)
if ((ret = __log_newfh(dblp, lp->w_off == 0)) != 0)
return (ret);
@@ -1083,21 +1154,23 @@ __log_write(dblp, addr, len)
* guarantees unwritten blocks are zero-filled, we set the size of the
* file in advance. This increases sync performance on some systems,
* because they don't need to update metadata on every sync.
+ *
+ * Ignore any error -- we may have run out of disk space, but that's no
+ * reason to quit.
*/
#ifdef HAVE_FILESYSTEM_NOTZERO
if (lp->w_off == 0 && !__os_fs_notzero())
#else
if (lp->w_off == 0)
#endif
- ret = __db_fileinit(dbenv, dblp->lfhp, lp->log_size, 0);
+ (void)__db_file_extend(dbenv, dblp->lfhp, lp->log_size);
/*
* Seek to the offset in the file (someone may have written it
* since we last did).
*/
- 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)
+ if ((ret = __os_io(dbenv, DB_IO_WRITE,
+ dblp->lfhp, 0, 0, lp->w_off, len, addr, &nw)) != 0)
return (ret);
/* Reset the buffer offset and update the seek offset. */
@@ -1130,24 +1203,22 @@ __log_file_pp(dbenv, lsn, namep, len)
char *namep;
size_t len;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
dbenv->lg_handle, "DB_ENV->log_file", DB_INIT_LOG);
if (F_ISSET(dbenv, DB_ENV_LOG_INMEMORY)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->log_file is illegal with in-memory logs.");
return (EINVAL);
}
- 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_file(dbenv, lsn, namep, len)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -1167,16 +1238,16 @@ __log_file(dbenv, lsn, namep, len)
char *name;
dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
ret = __log_name(dblp, lsn->file, &name, NULL, 0);
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
if (ret != 0)
return (ret);
/* Check to make sure there's enough room and copy the name. */
if (len < strlen(name) + 1) {
*namep = '\0';
- __db_err(dbenv, "DB_ENV->log_file: name buffer is too short");
+ __db_errx(dbenv, "DB_ENV->log_file: name buffer is too short");
return (EINVAL);
}
(void)strcpy(namep, name);
@@ -1209,7 +1280,7 @@ __log_newfh(dblp, create)
dblp->lfhp = NULL;
}
- flags = DB_OSO_LOG | DB_OSO_SEQ |
+ flags = DB_OSO_SEQ |
(create ? DB_OSO_CREATE : 0) |
(F_ISSET(dbenv, DB_ENV_DIRECT_LOG) ? DB_OSO_DIRECT : 0) |
(F_ISSET(dbenv, DB_ENV_DSYNC_LOG) ? DB_OSO_DSYNC : 0);
@@ -1217,10 +1288,11 @@ __log_newfh(dblp, create)
/* Get the path of the new file and open it. */
dblp->lfname = lp->lsn.file;
if ((ret = __log_valid(dblp, dblp->lfname, 0, &dblp->lfhp,
- flags, &status)) != 0)
- __db_err(dbenv,
- "DB_ENV->log_put: %d: %s", lp->lsn.file, db_strerror(ret));
- else if (status != DB_LV_NORMAL && status != DB_LV_INCOMPLETE)
+ flags, &status, NULL)) != 0)
+ __db_err(dbenv, ret,
+ "DB_ENV->log_newfh: %lu", (u_long)lp->lsn.file);
+ else if (status != DB_LV_NORMAL && status != DB_LV_INCOMPLETE &&
+ status != DB_LV_OLD_READABLE)
ret = DB_NOTFOUND;
return (ret);
@@ -1242,14 +1314,14 @@ __log_name(dblp, filenumber, namep, fhpp, flags)
{
DB_ENV *dbenv;
LOG *lp;
- int ret;
+ int mode, ret;
char *oname;
char old[sizeof(LFPREFIX) + 5 + 20], new[sizeof(LFPREFIX) + 10 + 20];
dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
- DB_ASSERT(!lp->db_log_inmemory);
+ DB_ASSERT(dbenv, !lp->db_log_inmemory);
/*
* !!!
@@ -1274,18 +1346,35 @@ __log_name(dblp, filenumber, namep, fhpp, flags)
DB_APP_LOG, new, 0, NULL, namep)) != 0 || fhpp == NULL)
return (ret);
+ /* The application may have specified an absolute file mode. */
+ if (lp->filemode == 0)
+ mode = dbenv->db_mode;
+ else {
+ LF_SET(DB_OSO_ABSMODE);
+ mode = lp->filemode;
+ }
+
/* Open the new-style file -- if we succeed, we're done. */
- if ((ret = __os_open_extend(dbenv, *namep, 0, flags,
- (int)lp->persist.mode, fhpp)) == 0)
+ dblp->lf_timestamp = lp->timestamp;
+ if ((ret = __os_open_extend(dbenv, *namep, 0, flags, mode, fhpp)) == 0)
return (0);
/*
+ * If the open failed for reason other than the file
+ * not being there, complain loudly, the wrong user
+ * probably started up the application.
+ */
+ if (ret != ENOENT) {
+ __db_err(dbenv, ret, "%s: log file unreadable", *namep);
+ return (__db_panic(dbenv, ret));
+ }
+
+ /*
* The open failed... if the DB_RDONLY flag isn't set, we're done,
* the caller isn't interested in old-style files.
*/
if (!LF_ISSET(DB_OSO_RDONLY)) {
- __db_err(dbenv,
- "%s: log file open failed: %s", *namep, db_strerror(ret));
+ __db_err(dbenv, ret, "%s: log file open failed", *namep);
return (__db_panic(dbenv, ret));
}
@@ -1299,8 +1388,7 @@ __log_name(dblp, filenumber, namep, fhpp, flags)
* space allocated for the new-style name and return the old-style
* name to the caller.
*/
- if ((ret =
- __os_open(dbenv, oname, flags, (int)lp->persist.mode, fhpp)) == 0) {
+ if ((ret = __os_open(dbenv, oname, flags, mode, fhpp)) == 0) {
__os_free(dbenv, *namep);
*namep = oname;
return (0);
@@ -1321,13 +1409,13 @@ err: __os_free(dbenv, oname);
/*
* __log_rep_put --
* Short-circuit way for replication clients to put records into the
- * log. Replication clients' logs need to be laid out exactly their masters'
+ * log. Replication clients' logs need to be laid out exactly as their masters'
* are, so we let replication take responsibility for when the log gets
* flushed, when log switches files, etc. This is just a thin PUBLIC wrapper
* for __log_putr with a slightly prettier interface.
*
- * 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.
+ * Note that the REP->mtx_clientdb should be held when this is called.
+ * Note that we acquire the log region mutex while holding mtx_clientdb.
*
* PUBLIC: int __log_rep_put __P((DB_ENV *, DB_LSN *, const DBT *));
*/
@@ -1347,7 +1435,7 @@ __log_rep_put(dbenv, lsnp, rec)
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
memset(&hdr, 0, sizeof(HDR));
t = *rec;
dbt = &t;
@@ -1362,17 +1450,17 @@ __log_rep_put(dbenv, lsnp, rec)
if ((ret = __log_encrypt_record(dbenv, dbt, &hdr, rec->size)) != 0)
goto err;
- __db_chksum(t.data, t.size,
+ __db_chksum(&hdr, t.data, t.size,
(CRYPTO_ON(dbenv)) ? db_cipher->mac_key : NULL, hdr.chksum);
- DB_ASSERT(log_compare(lsnp, &lp->lsn) == 0);
+ DB_ASSERT(dbenv, 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.
+ * !!! Assume caller holds REP->mtx_clientdb to modify ready_lsn.
*/
lp->ready_lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
if (need_free)
__os_free(dbenv, t.data);
return (ret);
diff --git a/db/log/log_stat.c b/db/log/log_stat.c
index ce8c8af33..150db3533 100644
--- a/db/log/log_stat.c
+++ b/db/log/log_stat.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: log_stat.c,v 11.149 2004/10/15 16:59:42 bostic Exp $
+ * $Id: log_stat.c,v 12.13 2006/08/24 14:46:12 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
@@ -37,7 +31,8 @@ __log_stat_pp(dbenv, statp, flags)
DB_LOG_STAT **statp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -47,12 +42,9 @@ __log_stat_pp(dbenv, statp, flags)
"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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_stat(dbenv, statp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -80,21 +72,21 @@ __log_stat(dbenv, statp, flags)
return (ret);
/* Copy out the global statistics. */
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
*stats = lp->stat;
if (LF_ISSET(DB_STAT_CLEAR))
memset(&lp->stat, 0, sizeof(lp->stat));
stats->st_magic = lp->persist.magic;
stats->st_version = lp->persist.version;
- stats->st_mode = (int)lp->persist.mode;
+ stats->st_mode = lp->filemode;
stats->st_lg_bsize = lp->buffer_size;
stats->st_lg_size = lp->log_nsize;
- stats->st_region_wait = dblp->reginfo.rp->mutex.mutex_set_wait;
- stats->st_region_nowait = dblp->reginfo.rp->mutex.mutex_set_nowait;
+ __mutex_set_wait_info(dbenv, lp->mtx_region,
+ &stats->st_region_wait, &stats->st_region_nowait);
if (LF_ISSET(DB_STAT_CLEAR))
- MUTEX_CLEAR(&dblp->reginfo.rp->mutex);
+ __mutex_clear(dbenv, lp->mtx_region);
stats->st_regsize = dblp->reginfo.rp->size;
stats->st_cur_file = lp->lsn.file;
@@ -102,7 +94,7 @@ __log_stat(dbenv, statp, flags)
stats->st_disk_file = lp->s_lsn.file;
stats->st_disk_offset = lp->s_lsn.offset;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
*statp = stats;
return (0);
@@ -119,7 +111,8 @@ __log_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -129,12 +122,9 @@ __log_stat_print_pp(dbenv, flags)
flags, DB_STAT_ALL | DB_STAT_CLEAR)) != 0)
return (ret);
- rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
- ret = __log_stat_print(dbenv, flags);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__log_stat_print(dbenv, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -198,14 +188,16 @@ __log_print_stats(dbenv, flags)
else
__db_msg(dbenv, "%lu\tCurrent log file size",
(u_long)sp->st_lg_size);
+ __db_dl(dbenv, "Records entered into the log", (u_long)sp->st_record);
__db_dlbytes(dbenv, "Log bytes written",
(u_long)0, (u_long)sp->st_w_mbytes, (u_long)sp->st_w_bytes);
__db_dlbytes(dbenv, "Log bytes written since last checkpoint",
(u_long)0, (u_long)sp->st_wc_mbytes, (u_long)sp->st_wc_bytes);
- __db_dl(dbenv, "Total log file writes", (u_long)sp->st_wcount);
- __db_dl(dbenv, "Total log file write due to overflow",
+ __db_dl(dbenv, "Total log file I/O writes", (u_long)sp->st_wcount);
+ __db_dl(dbenv, "Total log file I/O writes due to overflow",
(u_long)sp->st_wcount_fill);
__db_dl(dbenv, "Total log file flushes", (u_long)sp->st_scount);
+ __db_dl(dbenv, "Total log file I/O reads", (u_long)sp->st_rcount);
STAT_ULONG("Current log file number", sp->st_cur_file);
STAT_ULONG("Current log file offset", sp->st_cur_offset);
STAT_ULONG("On-disk log file number", sp->st_disk_file);
@@ -243,48 +235,43 @@ __log_print_all(dbenv, flags)
{ 0, NULL }
};
DB_LOG *dblp;
- DB_MUTEX *flush_mutexp;
LOG *lp;
dblp = dbenv->lg_handle;
lp = (LOG *)dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
__db_print_reginfo(dbenv, &dblp->reginfo, "Log");
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB_LOG handle information:");
-
- __db_print_mutex(
- dbenv, NULL, dblp->mutexp, "DB_LOG handle mutex", flags);
+ __mutex_print_debug_single(
+ dbenv, "DB_LOG handle mutex", dblp->mtx_dbreg, flags);
STAT_ULONG("Log file name", dblp->lfname);
- if (dblp->lfhp == NULL)
- STAT_ISSET("Log file handle", dblp->lfhp);
- else
- __db_print_fh(dbenv, dblp->lfhp, flags);
+ __db_print_fh(dbenv, "Log file handle", dblp->lfhp, flags);
__db_prflags(dbenv, NULL, dblp->flags, fn, NULL, "\tFlags");
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "LOG handle information:");
-
- __db_print_mutex(
- dbenv, NULL, &lp->fq_mutex, "file name list mutex", flags);
+ __mutex_print_debug_single(
+ dbenv, "LOG region mutex", lp->mtx_region, flags);
+ __mutex_print_debug_single(
+ dbenv, "File name list mutex", lp->mtx_filelist, flags);
STAT_HEX("persist.magic", lp->persist.magic);
STAT_ULONG("persist.version", lp->persist.version);
__db_dlbytes(dbenv,
"persist.log_size", (u_long)0, (u_long)0, lp->persist.log_size);
- STAT_FMT("persist.mode", "%#lo", u_long, lp->persist.mode);
+ STAT_FMT("log file permissions mode", "%#lo", u_long, lp->filemode);
STAT_LSN("current file offset LSN", &lp->lsn);
STAT_LSN("first buffer byte LSN", &lp->lsn);
STAT_ULONG("current buffer offset", lp->b_off);
STAT_ULONG("current file write offset", lp->w_off);
STAT_ULONG("length of last record", lp->len);
STAT_LONG("log flush in progress", lp->in_flush);
-
- flush_mutexp = R_ADDR(&dblp->reginfo, lp->flush_mutex_off);
- __db_print_mutex(dbenv, NULL, flush_mutexp, "Log flush mutex", flags);
+ __mutex_print_debug_single(
+ dbenv, "Log flush mutex", lp->mtx_flush, flags);
STAT_LSN("last sync LSN", &lp->s_lsn);
@@ -305,8 +292,7 @@ __log_print_all(dbenv, flags)
STAT_ULONG("transactions waiting to commit", lp->ncommit);
STAT_LSN("LSN of first commit", &lp->t_lsn);
- __dbreg_print_dblist(dbenv, flags);
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
return (0);
}
diff --git a/db/mod_db4/ABOUT b/db/mod_db4/ABOUT
index e5cccaf9f..5c7a73da7 100644
--- a/db/mod_db4/ABOUT
+++ b/db/mod_db4/ABOUT
@@ -42,6 +42,7 @@ int mod_db4_db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags);
which takes identical arguments to db_create().
-Otherwise the API is completely consistent with the standard Sleepycat API.
+Otherwise the API is completely consistent with the standard Berkeley
+DB API.
For installation instructions, see the INSTALL file.
diff --git a/db/mod_db4/BSD b/db/mod_db4/BSD
new file mode 100644
index 000000000..86de5549b
--- /dev/null
+++ b/db/mod_db4/BSD
@@ -0,0 +1,10 @@
+Copyright (c) 2005, 2006, Theo Schlossnagle
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * 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.
+ * Neither the name OmniTI 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
diff --git a/db/mod_db4/Makefile.in b/db/mod_db4/Makefile.in
index e30e14eed..95e829a49 100644
--- a/db/mod_db4/Makefile.in
+++ b/db/mod_db4/Makefile.in
@@ -1,12 +1,13 @@
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
# http://www.apache.org/licenses/LICENSE-2.0.txt
#
APXS=@APXS@
CXXFLAGS=@CXXFLAGS@
+CPPFLAGS=@CPPFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
@@ -15,7 +16,7 @@ SOURCES=mod_db4.c sem_utils.c skiplist.c utils.c mm_hash.c
all: mod_db4.so
mod_db4.so: $(SOURCES)
- $(APXS) -c -S CC=$(CXX) $(LDFLAGS) $(CXXFLAGS) $(SOURCES) $(LIBS)
+ $(APXS) -c -S CC=$(CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(SOURCES) $(LIBS)
install: mod_db4.so
$(APXS) -i mod_db4.so
diff --git a/db/mod_db4/configure b/db/mod_db4/configure
index eeaa777a7..7bf758584 100755
--- a/db/mod_db4/configure
+++ b/db/mod_db4/configure
@@ -1,9 +1,8 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.57.
+# Generated by GNU Autoconf 2.59.
#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-# Free Software Foundation, Inc.
+# Copyright (C) 2003 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
@@ -20,9 +19,10 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
set -o posix
fi
+DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
as_unset=unset
else
as_unset=false
@@ -41,7 +41,7 @@ for as_var in \
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
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
$as_unset $as_var
@@ -218,16 +218,17 @@ rm -f conf$$ conf$$.exe conf$$.file
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
else
+ test -d ./-p && rmdir ./-p
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"
+as_tr_cpp="eval 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"
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
# IFS
@@ -630,7 +631,7 @@ done
# Be sure to have absolute paths.
for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
+ localstatedir libdir includedir oldincludedir infodir mandir
do
eval ac_val=$`echo $ac_var`
case $ac_val in
@@ -670,10 +671,10 @@ if test -z "$srcdir"; then
# Try the directory containing this script, then its parent.
ac_confdir=`(dirname "$0") 2>/dev/null ||
$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
echo X"$0" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
/^X\(\/\/\)[^/].*/{ s//\1/; q; }
@@ -761,9 +762,9 @@ _ACEOF
cat <<_ACEOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
+ [$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
+ [PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
@@ -851,12 +852,45 @@ case $srcdir in
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`
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
cd $ac_dir
# Check for guested configure; otherwise get Cygnus style configure.
@@ -867,13 +901,13 @@ ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
echo
$SHELL $ac_srcdir/configure --help=recursive
elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
+ 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
+ cd "$ac_popdir"
done
fi
@@ -881,8 +915,7 @@ test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-Free Software Foundation, Inc.
+Copyright (C) 2003 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -894,7 +927,7 @@ This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.57. Invocation command line was
+generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -971,19 +1004,19 @@ do
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.
+ 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
+ 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.
@@ -1017,12 +1050,12 @@ _ASBOX
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"
+ "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"
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
esac;
}
@@ -1051,7 +1084,7 @@ _ASBOX
for ac_var in $ac_subst_files
do
eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ echo "$ac_var='"'"'$ac_val'"'"'"
done | sort
echo
fi
@@ -1070,7 +1103,7 @@ _ASBOX
echo "$as_me: caught signal $ac_signal"
echo "$as_me: exit $exit_status"
} >&5
- rm -f core core.* *.core &&
+ rm -f core *.core &&
rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
' 0
@@ -1150,7 +1183,7 @@ fi
# 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
+ 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"
@@ -1167,13 +1200,13 @@ echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
,);;
*)
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:$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:$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:$LINENO: current value: $ac_new_val" >&5
echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
+ ac_cache_corrupted=:
fi;;
esac
# Pass precious variables to config.status.
@@ -1337,7 +1370,6 @@ ac_compiler=`set X $ac_compile; echo $2`
(exit $ac_status); }
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -1357,8 +1389,8 @@ 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
+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $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
@@ -1378,23 +1410,23 @@ 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.
- ;;
+ # This is the source file.
+ ;;
[ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
+ # 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;;
+ 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;;
+ break;;
esac
done
else
@@ -1468,8 +1500,8 @@ for ac_file in conftest.exe conftest conftest.*; do
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;;
+ export ac_cv_exeext
+ break;;
* ) break;;
esac
done
@@ -1494,7 +1526,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
@@ -1545,7 +1576,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
@@ -1565,11 +1595,20 @@ main ()
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+ (eval $ac_compile) 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); } &&
- { ac_try='test -s conftest.$ac_objext'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (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); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -1582,7 +1621,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_compiler_gnu=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
@@ -1598,7 +1637,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
@@ -1615,11 +1653,20 @@ main ()
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+ (eval $ac_compile) 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); } &&
- { ac_try='test -s conftest.$ac_objext'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (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); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -1632,7 +1679,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_prog_cxx_g=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err 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
@@ -1652,8 +1699,7 @@ else
fi
fi
for ac_declaration in \
- ''\
- '#include <stdlib.h>' \
+ '' \
'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 ();' \
@@ -1661,14 +1707,13 @@ for ac_declaration in \
'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. */
-#include <stdlib.h>
$ac_declaration
+#include <stdlib.h>
int
main ()
{
@@ -1679,11 +1724,20 @@ exit (42);
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+ (eval $ac_compile) 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); } &&
- { ac_try='test -s conftest.$ac_objext'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (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); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -1696,9 +1750,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
continue
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -1715,11 +1768,20 @@ exit (42);
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+ (eval $ac_compile) 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); } &&
- { ac_try='test -s conftest.$ac_objext'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (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); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -1731,7 +1793,7 @@ else
sed 's/^/| /' conftest.$ac_ext >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
rm -f conftest*
if test -n "$ac_declaration"; then
@@ -1766,7 +1828,6 @@ 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
@@ -1798,7 +1859,7 @@ echo "${ECHO_T}no" >&6;{ { echo "$as_me:$LINENO: error: a working C++ compiler i
echo "$as_me: error: a working C++ compiler is required" >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
# Allow user to specify flags
@@ -1808,7 +1869,7 @@ if test "${with_cxxflags+set}" = set; then
withval="$with_cxxflags"
if test "x$withval" != "xno" ; then
- CXXFLAGS="$CXXFLAGS $withval"
+ CXXFLAGS="$withval $CXXFLAGS"
fi
@@ -1820,7 +1881,7 @@ if test "${with_ldflags+set}" = set; then
withval="$with_ldflags"
if test "x$withval" != "xno" ; then
- LDFLAGS="$LDFLAGS $withval"
+ LDFLAGS="$withval $LDFLAGS"
fi
@@ -1832,7 +1893,7 @@ if test "${with_libs+set}" = set; then
withval="$with_libs"
if test "x$withval" != "xno" ; then
- LIBS="$LIBS $withval"
+ LIBS="$withval $LIBS"
fi
@@ -1844,8 +1905,8 @@ if test "${with_mm+set}" = set; then
withval="$with_mm"
if test "x$withval" != "xno" ; then
- LIBS="$LIBS -L$withval/lib"
- CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LIBS="-L$withval/lib $LIBS"
+ CPPFLAGS="-I$withval/include $CPPFLAGS"
fi
@@ -1858,8 +1919,8 @@ if test "${with_db4+set}" = set; then
withval="$with_db4"
if test "x$withval" != "xno" ; then
- LIBS="$LIBS -L$withval/lib"
- CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LIBS="-L$withval/lib $LIBS"
+ CPPFLAGS="-I$withval/include $CPPFLAGS"
fi
@@ -1893,7 +1954,6 @@ if test "${cv_semun+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
@@ -1914,11 +1974,20 @@ union semun x;
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+ (eval $ac_compile) 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); } &&
- { ac_try='test -s conftest.$ac_objext'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (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); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -1935,7 +2004,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
cv_semun=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $cv_semun" >&5
@@ -1968,7 +2037,6 @@ else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lmm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -1992,11 +2060,20 @@ mm_core_create ();
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+ (eval $ac_link) 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); } &&
- { ac_try='test -s conftest$ac_exeext'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
+ { (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); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2009,7 +2086,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_lib_mm_mm_core_create=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
echo "$as_me:$LINENO: result: $ac_cv_lib_mm_mm_core_create" >&5
@@ -2058,13 +2136,13 @@ _ACEOF
# `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"
+ "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"
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
esac;
} |
@@ -2094,13 +2172,13 @@ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# 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[ ]*=/{
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
s/:*\$(srcdir):*/:/;
s/:*\${srcdir}:*/:/;
s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
+s/^\([^=]*=[ ]*\):*/\1/;
s/:*$//;
-s/^[^=]*=[ ]*$//;
+s/^[^=]*=[ ]*$//;
}'
fi
@@ -2111,7 +2189,7 @@ 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$//'`
+ 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'
@@ -2155,9 +2233,10 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
set -o posix
fi
+DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
as_unset=unset
else
as_unset=false
@@ -2176,7 +2255,7 @@ for as_var in \
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
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
$as_unset $as_var
@@ -2355,16 +2434,17 @@ rm -f conf$$ conf$$.exe conf$$.file
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
else
+ test -d ./-p && rmdir ./-p
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"
+as_tr_cpp="eval 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"
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
# IFS
@@ -2391,7 +2471,7 @@ _ASBOX
cat >&5 <<_CSEOF
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.57. Invocation command line was
+generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -2435,9 +2515,9 @@ Usage: $0 [OPTIONS] [FILE]...
-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
+ instantiate the configuration file FILE
--header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
+ instantiate the configuration header FILE
Configuration files:
$config_files
@@ -2451,11 +2531,10 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.57,
+configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
+Copyright (C) 2003 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
@@ -2679,9 +2758,9 @@ _ACEOF
(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"
+ 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"
+ 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
@@ -2699,21 +2778,21 @@ 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
- | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ 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=`echo "$ac_file" | sed 's,:.*,,'` ;;
* ) ac_file_in=$ac_file.in ;;
esac
# 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 ||
+ 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; }
@@ -2729,10 +2808,10 @@ echo X"$ac_file" |
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 ||
+ 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; }
@@ -2770,20 +2849,48 @@ case $srcdir in
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`
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
- 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. */
@@ -2793,7 +2900,7 @@ echo "$as_me: creating $ac_file" >&6;}
configure_input="$ac_file. "
fi
configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
+ sed 's,.*/,,'` by configure."
# First look for the input files in the build tree, otherwise in the
# src tree.
@@ -2802,26 +2909,32 @@ echo "$as_me: creating $ac_file" >&6;}
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
+ # 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;;
+ 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
+ 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;;
+ fi;;
esac
done` || { (exit 1); exit 1; }
+
+ 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
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
sed "$ac_vpsub
@@ -2860,12 +2973,12 @@ cat >>$CONFIG_STATUS <<\_ACEOF
# 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_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_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
ac_uB='$,\1#\2define\3'
ac_uC=' '
ac_uD=',;t'
@@ -2874,11 +2987,11 @@ 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
- | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ 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=`echo "$ac_file" | sed 's,:.*,,'` ;;
* ) ac_file_in=$ac_file.in ;;
esac
@@ -2892,28 +3005,29 @@ echo "$as_me: creating $ac_file" >&6;}
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
+ # 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;;
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ 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
+ 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;;
+ fi;;
esac
done` || { (exit 1); exit 1; }
# Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
_ACEOF
@@ -2936,9 +3050,9 @@ s/[\\&,]/\\&/g
s,[\\$`],\\&,g
t clear
: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+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
+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
@@ -2952,13 +3066,13 @@ rm -f confdef2sed.sed
# 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.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+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 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
@@ -2967,7 +3081,7 @@ 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
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
# Work around the forget-to-reset-the-flag bug.
echo 't clr' >>$CONFIG_STATUS
echo ': clr' >>$CONFIG_STATUS
@@ -2994,7 +3108,7 @@ do
# 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
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
# Work around the forget-to-reset-the-flag bug.
echo 't clr' >>$CONFIG_STATUS
echo ': clr' >>$CONFIG_STATUS
@@ -3028,10 +3142,10 @@ 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 ||
+ 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; }
@@ -3047,10 +3161,10 @@ echo X"$ac_file" |
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 ||
+ 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; }
diff --git a/db/mod_db4/configure.in b/db/mod_db4/configure.in
index 14c72d104..cf454d483 100644
--- a/db/mod_db4/configure.in
+++ b/db/mod_db4/configure.in
@@ -1,6 +1,6 @@
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
# http://www.apache.org/licenses/LICENSE-2.0.txt
#
@@ -22,7 +22,7 @@ AC_ARG_WITH(cxxflags,
[ --with-cxxflags Specify additional flags to pass to compiler],
[
if test "x$withval" != "xno" ; then
- CXXFLAGS="$CXXFLAGS $withval"
+ CXXFLAGS="$withval $CXXFLAGS"
fi
]
)
@@ -31,7 +31,7 @@ AC_ARG_WITH(ldflags,
[ --with-ldflags Specify additional flags to pass to linker],
[
if test "x$withval" != "xno" ; then
- LDFLAGS="$LDFLAGS $withval"
+ LDFLAGS="$withval $LDFLAGS"
fi
]
)
@@ -40,7 +40,7 @@ AC_ARG_WITH(libs,
[ --with-libs Specify additional libraries],
[
if test "x$withval" != "xno" ; then
- LIBS="$LIBS $withval"
+ LIBS="$withval $LIBS"
fi
]
)
@@ -49,8 +49,8 @@ AC_ARG_WITH(mm,
[ --with-mm Specify additional libraries],
[
if test "x$withval" != "xno" ; then
- LIBS="$LIBS -L$withval/lib"
- CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LIBS="-L$withval/lib $LIBS"
+ CPPFLAGS="-I$withval/include $CPPFLAGS"
fi
]
@@ -60,8 +60,8 @@ AC_ARG_WITH(db4,
[ --with-db4 Specify additional libraries],
[
if test "x$withval" != "xno" ; then
- LIBS="$LIBS -L$withval/lib"
- CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LIBS="-L$withval/lib $LIBS"
+ CPPFLAGS="-I$withval/include $CPPFLAGS"
fi
]
diff --git a/db/mod_db4/mm_hash.c b/db/mod_db4/mm_hash.c
index db3417120..33724b409 100644
--- a/db/mod_db4/mm_hash.c
+++ b/db/mod_db4/mm_hash.c
@@ -1,14 +1,13 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: Thies C. Arntzen <thies@php.net>
- * Sterling Hughes <sterling@php.net>
- * George Schlossnagle <george@omniti.com>
+ * authors: Thies C. Arntzen <thies@php.net>
+ * Sterling Hughes <sterling@php.net>
+ * George Schlossnagle <george@omniti.com>
*/
-
extern "C"
{
#include <stdlib.h>
diff --git a/db/mod_db4/mm_hash.h b/db/mod_db4/mm_hash.h
index d7c5e016c..28686c572 100644
--- a/db/mod_db4/mm_hash.h
+++ b/db/mod_db4/mm_hash.h
@@ -1,12 +1,12 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: Thies C. Arntzen <thies@php.net>
- * Sterling Hughes <sterling@php.net>
- * George Schlossnagle <george@omniti.com>
+ * authors: Thies C. Arntzen <thies@php.net>
+ * Sterling Hughes <sterling@php.net>
+ * George Schlossnagle <george@omniti.com>
*/
#ifndef _MM_HASH_H
diff --git a/db/mod_db4/mod_db4.c b/db/mod_db4/mod_db4.c
index d2094c69f..d8b1984b2 100644
--- a/db/mod_db4/mod_db4.c
+++ b/db/mod_db4/mod_db4.c
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
extern "C"
diff --git a/db/mod_db4/mod_db4_export.h b/db/mod_db4/mod_db4_export.h
index a7d5e3020..f8d39dd1b 100644
--- a/db/mod_db4/mod_db4_export.h
+++ b/db/mod_db4/mod_db4_export.h
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
#ifndef MOD_DB4_EXPORT_H
diff --git a/db/mod_db4/sem_utils.c b/db/mod_db4/sem_utils.c
index fac72c674..7ba7c1a7f 100644
--- a/db/mod_db4/sem_utils.c
+++ b/db/mod_db4/sem_utils.c
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
extern "C"
{
diff --git a/db/mod_db4/sem_utils.h b/db/mod_db4/sem_utils.h
index 891a312f3..96f0216e2 100644
--- a/db/mod_db4/sem_utils.h
+++ b/db/mod_db4/sem_utils.h
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
#ifndef MOD_DB4_SEM_UTILS_H
diff --git a/db/mod_db4/skiplist.c b/db/mod_db4/skiplist.c
index c4f8e47a2..e9ae40ea2 100644
--- a/db/mod_db4/skiplist.c
+++ b/db/mod_db4/skiplist.c
@@ -1,5 +1,5 @@
/* ======================================================================
- * Copyright (c) 2000 Theo Schlossnagle
+ * Copyright (c) 2000,2006 Theo Schlossnagle
* All rights reserved.
* The following code was written by Theo Schlossnagle for use in the
* Backhand project at The Center for Networking and Distributed Systems
@@ -7,7 +7,11 @@
*
* This is a skiplist implementation to be used for abstract structures
* and is release under the LGPL license version 2.1 or later. A copy
- * of this license can be found at http://www.gnu.org/copyleft/lesser.html
+ * of this license can be found file LGPL.
+ *
+ * Alternatively, this file may be licensed under the new BSD license.
+ * A copy of this license can be found file BSD.
+ *
* ======================================================================
*/
diff --git a/db/mod_db4/skiplist.h b/db/mod_db4/skiplist.h
index bf8c6e868..8d6ee6bb3 100644
--- a/db/mod_db4/skiplist.h
+++ b/db/mod_db4/skiplist.h
@@ -1,5 +1,5 @@
/* ======================================================================
- * Copyright (c) 2000 Theo Schlossnagle
+ * Copyright (c) 2000,2006 Theo Schlossnagle
* All rights reserved.
* The following code was written by Theo Schlossnagle for use in the
* Backhand project at The Center for Networking and Distributed Systems
@@ -7,7 +7,11 @@
*
* This is a skiplist implementation to be used for abstract structures
* and is release under the LGPL license version 2.1 or later. A copy
- * of this license can be found at http://www.gnu.org/copyleft/lesser.html
+ * of this license can be found file LGPL.
+ *
+ * Alternatively, this file may be licensed under the new BSD license.
+ * A copy of this license can be found file BSD.
+ *
* ======================================================================
*/
diff --git a/db/mod_db4/utils.c b/db/mod_db4/utils.c
index bbd69f8cc..ed346d27e 100644
--- a/db/mod_db4/utils.c
+++ b/db/mod_db4/utils.c
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
extern "C"
diff --git a/db/mod_db4/utils.h b/db/mod_db4/utils.h
index 376d4162e..8f718310f 100644
--- a/db/mod_db4/utils.h
+++ b/db/mod_db4/utils.h
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
#ifndef DB4_UTILS_H
diff --git a/db/mp/mp_alloc.c b/db/mp/mp_alloc.c
index 79aa84f99..0619d5ccf 100644
--- a/db/mp/mp_alloc.c
+++ b/db/mp/mp_alloc.c
@@ -1,24 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_alloc.c,v 11.47 2004/10/15 16:59:42 bostic Exp $
+ * $Id: mp_alloc.c,v 12.20 2006/09/07 15:11:26 mjc Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
-static void __memp_bad_buffer __P((DB_MPOOL_HASH *));
+static void __memp_bad_buffer __P((DB_ENV *, DB_MPOOL_HASH *));
/*
* __memp_alloc --
@@ -36,16 +31,18 @@ __memp_alloc(dbmp, infop, mfp, len, offsetp, retp)
roff_t *offsetp;
void *retp;
{
- BH *bhp;
+ BH *bhp, *oldest_bhp, *tbhp;
+ BH_FROZEN_PAGE *frozen_bhp;
DB_ENV *dbenv;
DB_MPOOL_HASH *dbht, *hp, *hp_end, *hp_tmp;
- DB_MUTEX *mutexp;
MPOOL *c_mp;
MPOOLFILE *bh_mfp;
size_t freed_space;
- u_int32_t buckets, buffers, high_priority, priority, put_counter;
- u_int32_t total_buckets;
- int aggressive, giveup, ret;
+ db_mutex_t mutex;
+ u_int32_t buckets, buffers, high_priority, priority;
+ u_int32_t put_counter, total_buckets;
+ int aggressive, alloc_freeze, giveup, got_oldest, ret;
+ u_int8_t *endp;
void *p;
dbenv = dbmp->dbenv;
@@ -54,7 +51,7 @@ __memp_alloc(dbmp, infop, mfp, len, offsetp, retp)
hp_end = &dbht[c_mp->htab_buckets];
buckets = buffers = put_counter = total_buckets = 0;
- aggressive = giveup = 0;
+ aggressive = alloc_freeze = giveup = got_oldest = 0;
hp_tmp = NULL;
c_mp->stat.st_alloc++;
@@ -66,10 +63,14 @@ __memp_alloc(dbmp, infop, mfp, len, offsetp, retp)
* NULL, we'll compare the underlying page sizes of the two buffers
* before free-ing and re-allocating buffers.
*/
- if (mfp != NULL)
- len = (sizeof(BH) - sizeof(u_int8_t)) + mfp->stat.st_pagesize;
+ if (mfp != NULL) {
+ len = SSZA(BH, buf) + mfp->stat.st_pagesize;
+ /* Add space for alignment padding for MVCC diagnostics. */
+ MVCC_BHSIZE(mfp, len);
+ }
+
+ MPOOL_REGION_LOCK(dbenv, infop);
- R_LOCK(dbenv, infop);
/*
* Anything newer than 1/10th of the buffer pool is ignored during
* allocation (unless allocation starts failing).
@@ -85,10 +86,15 @@ __memp_alloc(dbmp, infop, mfp, len, offsetp, retp)
* 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(infop, len, MUTEX_ALIGN, &p)) == 0) {
+alloc: if ((ret = __db_shalloc(infop, len, 0, &p)) == 0) {
if (mfp != NULL)
c_mp->stat.st_pages++;
- R_UNLOCK(dbenv, infop);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
+ /*
+ * For MVCC diagnostics, align the pointer so that the buffer
+ * starts on a page boundary.
+ */
+ MVCC_BHALIGN(mfp, p);
found: if (offsetp != NULL)
*offsetp = R_OFFSET(infop, p);
@@ -113,12 +119,13 @@ found: if (offsetp != NULL)
}
return (0);
} else if (giveup || c_mp->stat.st_pages == 0) {
- R_UNLOCK(dbenv, infop);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
- __db_err(dbenv,
+ __db_errx(dbenv,
"unable to allocate space from the buffer cache");
return (ret);
}
+ ret = 0;
/*
* We re-attempt the allocation every time we've freed 3 times what
@@ -187,7 +194,7 @@ found: if (offsetp != NULL)
if ((++buckets % c_mp->htab_buckets) == 0) {
if (freed_space > 0)
goto alloc;
- R_UNLOCK(dbenv, infop);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
switch (++aggressive) {
case 1:
@@ -211,7 +218,7 @@ found: if (offsetp != NULL)
break;
}
- R_LOCK(dbenv, infop);
+ MPOOL_REGION_LOCK(dbenv, infop);
goto alloc;
}
@@ -239,12 +246,12 @@ found: if (offsetp != NULL)
priority = hp->hash_priority;
/* Unlock the region and lock the hash bucket. */
- R_UNLOCK(dbenv, infop);
- mutexp = &hp->hash_mutex;
- MUTEX_LOCK(dbenv, mutexp);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
+ mutex = hp->mtx_hash;
+ MUTEX_LOCK(dbenv, mutex);
#ifdef DIAGNOSTIC
- __memp_check_order(hp);
+ __memp_check_order(dbenv, hp);
#endif
/*
* The lowest priority page is first in the bucket, as they are
@@ -255,8 +262,7 @@ found: if (offsetp != NULL)
* 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)
+this_hb: if ((bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) == NULL)
goto next_hb;
buffers++;
@@ -264,6 +270,41 @@ found: if (offsetp != NULL)
/* Find the associated MPOOLFILE. */
bh_mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
+ /* Select the lowest priority buffer in the chain. */
+ for (oldest_bhp = bhp, tbhp = SH_CHAIN_PREV(bhp, vc, __bh);
+ tbhp != NULL;
+ oldest_bhp = tbhp, tbhp = SH_CHAIN_PREV(tbhp, vc, __bh))
+ if (tbhp->ref <= bhp->ref &&
+ tbhp->priority <= bhp->priority)
+ bhp = tbhp;
+
+ /*
+ * Prefer the last buffer in the chain.
+ *
+ * If the oldest buffer isn't obsolete with respect to the
+ * cached old reader LSN, recalculate the oldest reader LSN
+ * and retry. There is a tradeoff here, because if we had the
+ * LSN earlier, we might have found pages to evict, but to get
+ * it, we need to lock the transaction region.
+ */
+ if (oldest_bhp != bhp && oldest_bhp->ref == 0) {
+ if (F_ISSET(bhp, BH_FROZEN) &&
+ !F_ISSET(oldest_bhp, BH_FROZEN))
+ bhp = oldest_bhp;
+ else if (BH_OBSOLETE(oldest_bhp, hp->old_reader))
+ bhp = oldest_bhp;
+ else if (!got_oldest &&
+ __txn_oldest_reader(dbenv, &hp->old_reader) == 0) {
+ got_oldest = 1;
+ if (BH_OBSOLETE(oldest_bhp, hp->old_reader))
+ bhp = oldest_bhp;
+ }
+ }
+
+ if (bhp->ref != 0 || (bhp != oldest_bhp &&
+ !aggressive && bhp->priority > priority))
+ goto next_hb;
+
/* If the page is dirty, pin it and write it. */
ret = 0;
if (F_ISSET(bhp, BH_DIRTY)) {
@@ -276,6 +317,32 @@ found: if (offsetp != NULL)
++c_mp->stat.st_ro_evict;
/*
+ * Freeze this buffer, if necessary. That is, if the buffer
+ * itself or the next version created could be read by the
+ * oldest reader in the system.
+ */
+ if (ret == 0 && bh_mfp->multiversion) {
+ if (!got_oldest && !SH_CHAIN_HASPREV(bhp, vc) &&
+ !BH_OBSOLETE(bhp, hp->old_reader)) {
+ (void)__txn_oldest_reader(dbenv,
+ &hp->old_reader);
+ got_oldest = 1;
+ }
+ if (SH_CHAIN_HASPREV(bhp, vc) ||
+ !BH_OBSOLETE(bhp, hp->old_reader)) {
+ /*
+ * Before freezing, double-check that we have
+ * an up-to-date old_reader LSN.
+ */
+ if (!aggressive ||
+ F_ISSET(bhp, BH_FROZEN) || bhp->ref != 0)
+ goto next_hb;
+ ret = __memp_bh_freeze(dbmp,
+ infop, hp, bhp, &alloc_freeze);
+ }
+ }
+
+ /*
* If a write fails for any reason, we can't proceed.
*
* We released the hash bucket lock while doing I/O, so another
@@ -288,25 +355,61 @@ found: if (offsetp != NULL)
*/
if (ret != 0 || bhp->ref != 0) {
if (ret != 0 && aggressive)
- __memp_bad_buffer(hp);
+ __memp_bad_buffer(dbenv, hp);
goto next_hb;
}
/*
+ * If we need some empty buffer headers for freezing, turn the
+ * buffer we've found into frozen headers and put them on the
+ * free list. Only reset alloc_freeze if we've actually
+ * allocated some frozen buffer headers.
+ *
* Check to see if the buffer is the size we're looking for.
- * If so, we can simply reuse it. Else, free the buffer and
- * its space and keep looking.
+ * If so, we can simply reuse it. Otherwise, free the buffer
+ * and its space and keep looking.
*/
- if (mfp != NULL &&
+ if (F_ISSET(bhp, BH_FROZEN)) {
+ ++bhp->ref;
+ if ((ret = __memp_bh_thaw(dbmp, infop, hp,
+ bhp, NULL)) != 0) {
+ MUTEX_UNLOCK(dbenv, mutex);
+ return (ret);
+ }
+ alloc_freeze = 0;
+ goto this_hb;
+ } else if (alloc_freeze) {
+ if ((ret = __memp_bhfree(dbmp, hp, bhp, 0)) != 0)
+ return (ret);
+ MVCC_MPROTECT(bhp->buf, bh_mfp->stat.st_pagesize,
+ PROT_READ | PROT_WRITE | PROT_EXEC);
+
+ MPOOL_REGION_LOCK(dbenv, infop);
+ SH_TAILQ_INSERT_TAIL(&c_mp->alloc_frozen,
+ (BH_FROZEN_ALLOC *)bhp, links);
+ frozen_bhp = (BH_FROZEN_PAGE *)
+ ((BH_FROZEN_ALLOC *)bhp + 1);
+ endp = (u_int8_t *)bhp->buf + bh_mfp->stat.st_pagesize;
+ while ((u_int8_t *)(frozen_bhp + 1) < endp) {
+ SH_TAILQ_INSERT_TAIL(&c_mp->free_frozen,
+ (BH *)frozen_bhp, hq);
+ frozen_bhp++;
+ }
+ alloc_freeze = 0;
+ continue;
+ } else if (mfp != NULL &&
mfp->stat.st_pagesize == bh_mfp->stat.st_pagesize) {
- __memp_bhfree(dbmp, hp, bhp, 0);
-
+ if ((ret = __memp_bhfree(dbmp, hp, bhp, 0)) != 0)
+ return (ret);
p = bhp;
goto found;
+ } else {
+ freed_space += __db_shalloc_sizeof(bhp);
+ if ((ret = __memp_bhfree(dbmp,
+ hp, bhp, BH_FREE_FREEMEM)) != 0)
+ return (ret);
}
- freed_space += __db_shalloc_sizeof(bhp);
- __memp_bhfree(dbmp, hp, bhp, BH_FREE_FREEMEM);
if (aggressive > 1)
aggressive = 1;
@@ -316,9 +419,9 @@ found: if (offsetp != NULL)
* hash bucket lock has already been discarded.
*/
if (0) {
-next_hb: MUTEX_UNLOCK(dbenv, mutexp);
+next_hb: MUTEX_UNLOCK(dbenv, mutex);
}
- R_LOCK(dbenv, infop);
+ MPOOL_REGION_LOCK(dbenv, infop);
/*
* Retry the allocation as soon as we've freed up sufficient
@@ -333,37 +436,69 @@ next_hb: MUTEX_UNLOCK(dbenv, mutexp);
}
/*
+ * __memp_free --
+ * Free some space from a cache region.
+ *
+ * PUBLIC: void __memp_free __P((REGINFO *, MPOOLFILE *, void *));
+ */
+void
+__memp_free(infop, mfp, buf)
+ REGINFO *infop;
+ MPOOLFILE *mfp;
+ void *buf;
+{
+ MVCC_BHUNALIGN(mfp, buf);
+ COMPQUIET(mfp, NULL);
+ __db_shalloc_free(infop, buf);
+}
+
+/*
* __memp_bad_buffer --
* Make the first buffer in a hash bucket the least desirable buffer.
*/
static void
-__memp_bad_buffer(hp)
+__memp_bad_buffer(dbenv, hp)
+ DB_ENV *dbenv;
DB_MPOOL_HASH *hp;
{
- BH *bhp;
+ BH *bhp, *last_bhp;
u_int32_t priority;
- /* Remove the first buffer from the bucket. */
+ /*
+ * Get the first buffer from the bucket. If it is also the last buffer
+ * (in other words, it is the only buffer in the bucket), we're done.
+ */
bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
+ last_bhp = SH_TAILQ_LASTP(&hp->hash_bucket, hq, __bh);
+ if (bhp == last_bhp)
+ return;
+
+ /* There are multiple buffers in the bucket, remove the first one. */
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;
+ priority = BH_PRIORITY(last_bhp);
/*
- * Set our buffer's priority to be just as bad, and append it to
- * the bucket.
+ * Append our buffer to the bucket and set its priority to be just as
+ * bad.
*/
- bhp->priority = priority;
SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ for (; bhp != NULL ; bhp = SH_CHAIN_PREV(bhp, vc, __bh))
+ bhp->priority = priority;
/* Reset the hash bucket's priority. */
- hp->hash_priority = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
+ hp->hash_priority = BH_PRIORITY(
+ SH_TAILQ_FIRSTP(&hp->hash_bucket, __bh));
+
+#ifdef DIAGNOSTIC
+ __memp_check_order(dbenv, hp);
+#else
+ COMPQUIET(dbenv, NULL);
+#endif
}
#ifdef DIAGNOSTIC
@@ -372,27 +507,45 @@ __memp_bad_buffer(hp)
* Verify the priority ordering of a hash bucket chain.
*
* PUBLIC: #ifdef DIAGNOSTIC
- * PUBLIC: void __memp_check_order __P((DB_MPOOL_HASH *));
+ * PUBLIC: void __memp_check_order __P((DB_ENV *, DB_MPOOL_HASH *));
* PUBLIC: #endif
*/
void
-__memp_check_order(hp)
+__memp_check_order(dbenv, hp)
+ DB_ENV *dbenv;
DB_MPOOL_HASH *hp;
{
- BH *bhp;
- u_int32_t priority;
+ BH *bhp, *first_bhp, *tbhp;
+ u_int32_t priority, last_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);
+ last_priority = hp->hash_priority;
+ for (bhp = first_bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
+ bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh)) {
+ DB_ASSERT(dbenv, !SH_CHAIN_HASNEXT(bhp, vc));
+
+ priority = BH_PRIORITY(bhp);
+ DB_ASSERT(dbenv, (bhp == first_bhp) ?
+ priority == last_priority : priority >= last_priority);
+ last_priority = priority;
+
+ /* Chains have referential integrity. */
+ for (tbhp = SH_CHAIN_PREV(bhp, vc, __bh); tbhp != NULL;
+ tbhp = SH_CHAIN_PREV(tbhp, vc, __bh))
+ DB_ASSERT(dbenv, tbhp == SH_CHAIN_PREV(
+ SH_CHAIN_NEXT(tbhp, vc, __bh), vc, __bh));
- for (priority = bhp->priority;
- (bhp = SH_TAILQ_NEXT(bhp, hq, __bh)) != NULL;
- priority = bhp->priority)
- DB_ASSERT(priority <= bhp->priority);
+ /*
+ * No repeats.
+ * XXX This is O(N**2) where N is the number of buffers in the
+ * bucket, but we generally assume small buckets.
+ */
+ for (tbhp = SH_TAILQ_NEXT(bhp, hq, __bh); tbhp != NULL;
+ tbhp = SH_TAILQ_NEXT(tbhp, hq, __bh))
+ DB_ASSERT(dbenv, bhp->pgno != tbhp->pgno ||
+ bhp->mf_offset != tbhp->mf_offset);
+ }
}
#endif
diff --git a/db/mp/mp_bh.c b/db/mp/mp_bh.c
index b28698146..ef4d1d4be 100644
--- a/db/mp/mp_bh.c
+++ b/db/mp/mp_bh.c
@@ -1,25 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_bh.c,v 11.99 2004/10/15 16:59:42 bostic Exp $
+ * $Id: mp_bh.c,v 12.31 2006/09/07 19:11:46 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
+#include "dbinc/db_page.h" /* Required for diagnostic code. */
#include "dbinc/mp.h"
#include "dbinc/log.h"
-#include "dbinc/db_page.h"
+#include "dbinc/txn.h"
static int __memp_pgwrite
__P((DB_ENV *, DB_MPOOLFILE *, DB_MPOOL_HASH *, BH *));
@@ -58,14 +52,13 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
* Walk the process' DB_MPOOLFILE list and find a file descriptor for
* the file. We also check that the descriptor is open for writing.
*/
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
- dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q))
+ MUTEX_LOCK(dbenv, dbmp->mutex);
+ TAILQ_FOREACH(dbmfp, &dbmp->dbmfq, q)
if (dbmfp->mfp == mfp && !F_ISSET(dbmfp, MP_READONLY)) {
++dbmfp->ref;
break;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
if (dbmfp != NULL) {
/*
@@ -75,20 +68,23 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
*/
if (dbmfp->fhp == NULL) {
/* We may not be allowed to create backing files. */
- if (mfp->no_backing_file)
+ if (mfp->no_backing_file) {
+ --dbmfp->ref;
return (EPERM);
+ }
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+ MUTEX_LOCK(dbenv, dbmp->mutex);
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);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
if (ret != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"unable to create temporary backing file");
+ --dbmfp->ref;
return (ret);
}
}
@@ -125,22 +121,21 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
* has already been closed in another process, in which case it should
* be marked dead.
*/
- if (F_ISSET(mfp, MP_TEMP))
+ if (F_ISSET(mfp, MP_TEMP) || mfp->no_backing_file)
return (EPERM);
/*
* It's not a page from a file we've opened. If the file requires
- * input/output processing, see if this process has ever registered
- * information as to how to write this type of file. If not, there's
- * nothing we can do.
+ * application-specific input/output processing, see if this process
+ * has ever registered information as to how to write this type of
+ * file. If not, there's nothing we can do.
*/
- if (mfp->ftype != 0) {
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- for (mpreg = LIST_FIRST(&dbmp->dbregq);
- mpreg != NULL; mpreg = LIST_NEXT(mpreg, q))
+ if (mfp->ftype != 0 && mfp->ftype != DB_FTYPE_SET) {
+ MUTEX_LOCK(dbenv, dbmp->mutex);
+ LIST_FOREACH(mpreg, &dbmp->dbregq, q)
if (mpreg->ftype == mfp->ftype)
break;
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
if (mpreg == NULL)
return (EPERM);
}
@@ -169,6 +164,8 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
}
pgwrite:
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize,
+ PROT_READ | PROT_WRITE | PROT_EXEC);
ret = __memp_pgwrite(dbenv, dbmfp, hp, bhp);
if (dbmfp == NULL)
return (ret);
@@ -177,12 +174,12 @@ pgwrite:
* Discard our reference, and, if we're the last reference, make sure
* the file eventually gets closed.
*/
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+ MUTEX_LOCK(dbenv, dbmp->mutex);
if (dbmfp->ref == 1)
F_SET(dbmfp, MP_FLUSH);
else
--dbmfp->ref;
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
return (ret);
}
@@ -191,12 +188,12 @@ pgwrite:
* __memp_pgread --
* Read a page from a file.
*
- * PUBLIC: int __memp_pgread __P((DB_MPOOLFILE *, DB_MUTEX *, BH *, int));
+ * PUBLIC: int __memp_pgread __P((DB_MPOOLFILE *, DB_MPOOL_HASH *, BH *, int));
*/
int
-__memp_pgread(dbmfp, mutexp, bhp, can_create)
+__memp_pgread(dbmfp, hp, bhp, can_create)
DB_MPOOLFILE *dbmfp;
- DB_MUTEX *mutexp;
+ DB_MPOOL_HASH *hp;
BH *bhp;
int can_create;
{
@@ -211,12 +208,12 @@ __memp_pgread(dbmfp, mutexp, bhp, can_create)
pagesize = mfp->stat.st_pagesize;
/* We should never be called with a dirty or a locked buffer. */
- DB_ASSERT(!F_ISSET(bhp, BH_DIRTY | BH_DIRTY_CREATE | BH_LOCKED));
+ DB_ASSERT(dbenv, !F_ISSET(bhp, BH_DIRTY_CREATE | BH_LOCKED));
+ DB_ASSERT(dbenv, can_create || !F_ISSET(bhp, BH_DIRTY));
- /* Lock the buffer and swap the hash bucket lock for the buffer lock. */
+ /* Lock the buffer and unlock the hash bucket. */
F_SET(bhp, BH_LOCKED | BH_TRASH);
- MUTEX_LOCK(dbenv, &bhp->mutex);
- MUTEX_UNLOCK(dbenv, mutexp);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
/*
* Temporary files may not yet have been created. We don't create
@@ -224,8 +221,8 @@ __memp_pgread(dbmfp, mutexp, bhp, can_create)
*/
nr = 0;
if (dbmfp->fhp != NULL)
- if ((ret = __os_io(dbenv, DB_IO_READ,
- dbmfp->fhp, bhp->pgno, pagesize, bhp->buf, &nr)) != 0)
+ if ((ret = __os_io(dbenv, DB_IO_READ, dbmfp->fhp,
+ bhp->pgno, pagesize, 0, pagesize, bhp->buf, &nr)) != 0)
goto err;
/*
@@ -241,13 +238,14 @@ __memp_pgread(dbmfp, mutexp, bhp, can_create)
* in which case we won't find the page. The caller must know
* how to handle the error.
*/
- if (can_create == 0) {
+ if (!can_create) {
ret = DB_PAGE_NOTFOUND;
goto err;
}
/* Clear any bytes that need to be cleared. */
- len = mfp->clear_len == 0 ? pagesize : mfp->clear_len;
+ len = mfp->clear_len == DB_CLEARLEN_NOTSET ?
+ pagesize : mfp->clear_len;
memset(bhp->buf, 0, len);
#if defined(DIAGNOSTIC) || defined(UMRW)
@@ -265,9 +263,8 @@ __memp_pgread(dbmfp, mutexp, bhp, can_create)
/* Call any pgin function. */
ret = mfp->ftype == 0 ? 0 : __memp_pg(dbmfp, bhp, 1);
- /* Unlock the buffer and reacquire the hash bucket lock. */
-err: MUTEX_UNLOCK(dbenv, &bhp->mutex);
- MUTEX_LOCK(dbenv, mutexp);
+ /* Re-acquire the hash bucket lock. */
+err: MUTEX_LOCK(dbenv, hp->mtx_hash);
/*
* If no errors occurred, the data is now valid, clear the BH_TRASH
@@ -277,6 +274,14 @@ err: MUTEX_UNLOCK(dbenv, &bhp->mutex);
if (ret == 0)
F_CLR(bhp, BH_TRASH);
+ /*
+ * If a thread of control is waiting on this buffer, wake it up.
+ */
+ if (F_ISSET(hp, IO_WAITER)) {
+ F_CLR(hp, IO_WAITER);
+ MUTEX_UNLOCK(dbenv, hp->mtx_io);
+ }
+
return (ret);
}
@@ -303,17 +308,13 @@ __memp_pgwrite(dbenv, dbmfp, hp, bhp)
* We should never be called with a clean or trash buffer.
* The sync code does call us with already locked buffers.
*/
- DB_ASSERT(F_ISSET(bhp, BH_DIRTY));
- DB_ASSERT(!F_ISSET(bhp, BH_TRASH));
+ DB_ASSERT(dbenv, F_ISSET(bhp, BH_DIRTY));
+ DB_ASSERT(dbenv, !F_ISSET(bhp, BH_TRASH));
- /*
- * If we have not already traded the hash bucket lock for the buffer
- * lock, do so now.
- */
+ /* If not already done, lock the buffer and unlock the hash bucket. */
if (!F_ISSET(bhp, BH_LOCKED)) {
F_SET(bhp, BH_LOCKED);
- MUTEX_LOCK(dbenv, &bhp->mutex);
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
}
/*
@@ -335,7 +336,8 @@ __memp_pgwrite(dbenv, dbmfp, hp, bhp)
if (LOGGING_ON(dbenv) && mfp->lsn_off != -1 &&
!IS_CLIENT_PGRECOVER(dbenv)) {
memcpy(&lsn, bhp->buf + mfp->lsn_off, sizeof(DB_LSN));
- if ((ret = __log_flush(dbenv, &lsn)) != 0)
+ if (!IS_NOT_LOGGED_LSN(lsn) &&
+ (ret = __log_flush(dbenv, &lsn)) != 0)
goto err;
}
@@ -367,17 +369,16 @@ __memp_pgwrite(dbenv, 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 (!lp->db_log_inmemory &&
- 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);
- MUTEX_UNLOCK(dbenv, mtx);
+ LOG_COMPARE(&lp->s_lsn, &LSN(bhp->buf)) <= 0) {
+ MUTEX_LOCK(dbenv, lp->mtx_flush);
+ DB_ASSERT(dbenv,
+ LOG_COMPARE(&lp->s_lsn, &LSN(bhp->buf)) > 0);
+ MUTEX_UNLOCK(dbenv, lp->mtx_flush);
}
}
#endif
@@ -394,13 +395,20 @@ __memp_pgwrite(dbenv, dbmfp, hp, bhp)
}
/* Write the page. */
- 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",
+ if ((ret = __os_io(
+ dbenv, DB_IO_WRITE, dbmfp->fhp, bhp->pgno, mfp->stat.st_pagesize,
+ 0, mfp->stat.st_pagesize, bhp->buf, &nw)) != 0) {
+ __db_errx(dbenv, "%s: write failed for page %lu",
__memp_fn(dbmfp), (u_long)bhp->pgno);
goto err;
}
++mfp->stat.st_page_out;
+ if (bhp->pgno > mfp->last_flushed_pgno) {
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (bhp->pgno > mfp->last_flushed_pgno)
+ mfp->last_flushed_pgno = bhp->pgno;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ }
err:
file_dead:
@@ -409,10 +417,9 @@ file_dead:
* Once we pass this point, dbmfp and mfp may be NULL, we may not have
* a valid file reference.
*
- * Unlock the buffer and reacquire the hash lock.
+ * Re-acquire the hash lock.
*/
- MUTEX_UNLOCK(dbenv, &bhp->mutex);
- MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
/*
* If we rewrote the page, it will need processing by the pgin
@@ -422,13 +429,12 @@ file_dead:
F_SET(bhp, BH_CALLPGIN);
/*
- * Update the hash bucket statistics, reset the flags.
- * If we were successful, the page is no longer dirty.
+ * Update the hash bucket statistics, reset the flags. If we were
+ * successful, the page is no longer dirty.
*/
if (ret == 0) {
- DB_ASSERT(hp->hash_page_dirty != 0);
+ DB_ASSERT(dbenv, hp->hash_page_dirty != 0);
--hp->hash_page_dirty;
-
F_CLR(bhp, BH_DIRTY | BH_DIRTY_CREATE);
}
@@ -436,6 +442,14 @@ file_dead:
bhp->ref_sync = 0;
F_CLR(bhp, BH_LOCKED);
+ /*
+ * If a thread of control is waiting on this buffer, wake it up.
+ */
+ if (F_ISSET(hp, IO_WAITER)) {
+ F_CLR(hp, IO_WAITER);
+ MUTEX_UNLOCK(dbenv, hp->mtx_io);
+ }
+
return (ret);
}
@@ -462,42 +476,38 @@ __memp_pg(dbmfp, bhp, is_pgin)
dbmp = dbenv->mp_handle;
mfp = dbmfp->mfp;
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
-
- ftype = mfp->ftype;
- for (mpreg = LIST_FIRST(&dbmp->dbregq);
- mpreg != NULL; mpreg = LIST_NEXT(mpreg, q)) {
- if (ftype != mpreg->ftype)
- continue;
- if (mfp->pgcookie_len == 0)
- dbtp = NULL;
- else {
- dbt.size = (u_int32_t)mfp->pgcookie_len;
- dbt.data = R_ADDR(dbmp->reginfo, mfp->pgcookie_off);
- dbtp = &dbt;
- }
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
-
- if (is_pgin) {
- if (mpreg->pgin != NULL &&
- (ret = mpreg->pgin(dbenv,
- bhp->pgno, bhp->buf, dbtp)) != 0)
- goto err;
- } else
- if (mpreg->pgout != NULL &&
- (ret = mpreg->pgout(dbenv,
- bhp->pgno, bhp->buf, dbtp)) != 0)
- goto err;
- break;
+ if ((ftype = mfp->ftype) == DB_FTYPE_SET)
+ mpreg = dbmp->pg_inout;
+ else {
+ MUTEX_LOCK(dbenv, dbmp->mutex);
+ LIST_FOREACH(mpreg, &dbmp->dbregq, q)
+ if (ftype == mpreg->ftype)
+ break;
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
}
-
if (mpreg == NULL)
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ return (0);
+
+ if (mfp->pgcookie_len == 0)
+ dbtp = NULL;
+ else {
+ DB_SET_DBT(dbt, R_ADDR(
+ dbmp->reginfo, mfp->pgcookie_off), mfp->pgcookie_len);
+ dbtp = &dbt;
+ }
+
+ if (is_pgin) {
+ if (mpreg->pgin != NULL &&
+ (ret = mpreg->pgin(dbenv, bhp->pgno, bhp->buf, dbtp)) != 0)
+ goto err;
+ } else
+ if (mpreg->pgout != NULL &&
+ (ret = mpreg->pgout(dbenv, bhp->pgno, bhp->buf, dbtp)) != 0)
+ goto err;
return (0);
-err: MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- __db_err(dbenv, "%s: %s failed for page %lu",
+err: __db_errx(dbenv, "%s: %s failed for page %lu",
__memp_fn(dbmfp), is_pgin ? "pgin" : "pgout", (u_long)bhp->pgno);
return (ret);
}
@@ -506,10 +516,10 @@ err: MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
* __memp_bhfree --
* Free a bucket header and its referenced data.
*
- * PUBLIC: void __memp_bhfree
+ * PUBLIC: int __memp_bhfree
* PUBLIC: __P((DB_MPOOL *, DB_MPOOL_HASH *, BH *, u_int32_t));
*/
-void
+int
__memp_bhfree(dbmp, hp, bhp, flags)
DB_MPOOL *dbmp;
DB_MPOOL_HASH *hp;
@@ -519,7 +529,14 @@ __memp_bhfree(dbmp, hp, bhp, flags)
DB_ENV *dbenv;
MPOOL *c_mp, *mp;
MPOOLFILE *mfp;
+ BH *next_bhp, *prev_bhp;
u_int32_t n_cache;
+ int reorder, ret, t_ret;
+#ifdef DIAG_MVCC
+ size_t pagesize;
+#endif
+
+ ret = 0;
/*
* Assumes the hash bucket is locked and the MPOOL is not.
@@ -527,52 +544,104 @@ __memp_bhfree(dbmp, hp, bhp, flags)
dbenv = dbmp->dbenv;
mp = dbmp->reginfo[0].primary;
n_cache = NCACHE(mp, bhp->mf_offset, bhp->pgno);
+ mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
+#ifdef DIAG_MVCC
+ pagesize = mfp->stat.st_pagesize;
+#endif
+
+ DB_ASSERT(dbenv, bhp->ref == 0);
+ DB_ASSERT(dbenv, LF_ISSET(BH_FREE_UNLOCKED) ||
+ SH_CHAIN_SINGLETON(bhp, vc) ||
+ (SH_CHAIN_HASNEXT(bhp, vc) &&
+ F_ISSET(SH_CHAIN_NEXT(bhp, vc, __bh), BH_FROZEN) &&
+ bhp->td_off == INVALID_ROFF) ||
+ (SH_CHAIN_HASPREV(bhp, vc) ?
+ IS_MAX_LSN(*VISIBLE_LSN(dbenv, bhp)) :
+ BH_OBSOLETE(bhp, hp->old_reader)));
/*
- * Delete the buffer header from the hash bucket queue and reset
- * the hash bucket's priority, if necessary.
+ * Delete the buffer header from the hash bucket queue or the
+ * version chain and reset the hash bucket's priority, if necessary.
*/
- SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
- if (bhp->priority == hp->hash_priority)
- hp->hash_priority =
- SH_TAILQ_FIRST(&hp->hash_bucket, __bh) == NULL ?
- 0 : SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
+ reorder = (__memp_bh_priority(bhp) == bhp->priority);
+ prev_bhp = SH_CHAIN_PREV(bhp, vc, __bh);
+ if ((next_bhp = SH_CHAIN_NEXT(bhp, vc, __bh)) == NULL) {
+ if (prev_bhp != NULL)
+ SH_TAILQ_INSERT_AFTER(&hp->hash_bucket,
+ bhp, prev_bhp, hq, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ next_bhp = prev_bhp;
+ }
+ SH_CHAIN_REMOVE(bhp, vc, __bh);
+ if (reorder) {
+ if (next_bhp != NULL)
+ __memp_bucket_reorder(dbenv, hp, next_bhp);
+ else
+ hp->hash_priority = SH_TAILQ_EMPTY(&hp->hash_bucket) ?
+ 0 : BH_PRIORITY(
+ SH_TAILQ_FIRSTP(&hp->hash_bucket, __bh));
+ }
+
+#ifdef DIAGNOSTIC
+ __memp_check_order(dbenv, hp);
+#endif
/*
- * Discard the hash bucket's mutex, it's no longer needed, and
- * we don't want to be holding it when acquiring other locks.
+ * Remove the reference to this buffer from the transaction that
+ * created it, if any. When the BH_FREE_UNLOCKED flag is set, we're
+ * discarding the environment, so the transaction region is already
+ * gone.
*/
- if (!LF_ISSET(BH_FREE_UNLOCKED))
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ if (bhp->td_off != INVALID_ROFF && !LF_ISSET(BH_FREE_UNLOCKED)) {
+ ret = __txn_remove_buffer(
+ dbenv, BH_OWNER(dbenv, bhp), hp->mtx_hash);
+ bhp->td_off = INVALID_ROFF;
+ }
/*
- * Find the underlying MPOOLFILE and decrement its reference count.
- * If this is its last reference, remove it.
+ * We're going to use the memory for something else -- it had better be
+ * accessible.
*/
- mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
- MUTEX_LOCK(dbenv, &mfp->mutex);
- if (--mfp->block_cnt == 0 && mfp->mpf_cnt == 0)
- (void)__memp_mf_discard(dbmp, mfp);
- else
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MVCC_MPROTECT(bhp->buf, pagesize, PROT_READ | PROT_WRITE | PROT_EXEC);
- R_LOCK(dbenv, &dbmp->reginfo[n_cache]);
+ /*
+ * If we're only removing this header from the chain for reuse, we're
+ * done.
+ */
+ if (LF_ISSET(BH_FREE_REUSE))
+ return (0);
/*
- * Clear the mutex this buffer recorded; requires the region lock
- * be held.
+ * Discard the hash bucket's mutex, it's no longer needed, and
+ * we don't want to be holding it when acquiring other locks.
*/
- __db_shlocks_clear(&bhp->mutex, &dbmp->reginfo[n_cache],
- R_ADDR(&dbmp->reginfo[n_cache], mp->maint_off));
+ if (!LF_ISSET(BH_FREE_UNLOCKED))
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
/*
- * If we're not reusing the buffer immediately, free the buffer header
- * and data for real.
+ * If we're not reusing the buffer immediately, free the buffer for
+ * real.
*/
if (LF_ISSET(BH_FREE_FREEMEM)) {
- __db_shalloc_free(&dbmp->reginfo[n_cache], bhp);
+ MPOOL_REGION_LOCK(dbenv, &dbmp->reginfo[n_cache]);
+
+ __memp_free(&dbmp->reginfo[n_cache], mfp, bhp);
c_mp = dbmp->reginfo[n_cache].primary;
c_mp->stat.st_pages--;
+
+ MPOOL_REGION_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
}
- R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
+
+ /*
+ * Decrement the reference count of the underlying MPOOLFILE.
+ * If this is its last reference, remove it.
+ */
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (--mfp->block_cnt == 0 && mfp->mpf_cnt == 0) {
+ if ((t_ret = __memp_mf_discard(dbmp, mfp)) != 0 && ret == 0)
+ ret = t_ret;
+ } else
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+
+ return (ret);
}
diff --git a/db/mp/mp_fget.c b/db/mp/mp_fget.c
index a955fc1e6..5f7eb6802 100644
--- a/db/mp/mp_fget.c
+++ b/db/mp/mp_fget.c
@@ -1,40 +1,36 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_fget.c,v 11.96 2004/10/15 16:59:42 bostic Exp $
+ * $Id: mp_fget.c,v 12.33 2006/09/13 14:53:42 mjc Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
/*
* __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 *));
+ * PUBLIC: __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, u_int32_t, void *));
*/
int
-__memp_fget_pp(dbmfp, pgnoaddr, flags, addrp)
+__memp_fget_pp(dbmfp, pgnoaddr, txnp, flags, addrp)
DB_MPOOLFILE *dbmfp;
db_pgno_t *pgnoaddr;
+ DB_TXN *txnp;
u_int32_t flags;
void *addrp;
{
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
int rep_check, ret;
dbenv = dbmfp->dbenv;
@@ -55,13 +51,16 @@ __memp_fget_pp(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)
+#define OKFLAGS (DB_MPOOL_CREATE | DB_MPOOL_DIRTY | \
+ DB_MPOOL_EDIT | DB_MPOOL_LAST | DB_MPOOL_NEW)
if (flags != 0) {
if ((ret = __db_fchk(dbenv, "memp_fget", flags, OKFLAGS)) != 0)
return (ret);
switch (flags) {
+ case DB_MPOOL_DIRTY:
case DB_MPOOL_CREATE:
+ case DB_MPOOL_EDIT:
case DB_MPOOL_LAST:
case DB_MPOOL_NEW:
break;
@@ -70,17 +69,24 @@ __memp_fget_pp(dbmfp, pgnoaddr, flags, addrp)
}
}
+ ENV_ENTER(dbenv, ip);
+
rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __op_rep_enter(dbenv);
- ret = __memp_fget(dbmfp, pgnoaddr, flags, addrp);
+ if (rep_check && (ret = __op_rep_enter(dbenv)) != 0)
+ goto err;
+ ret = __memp_fget(dbmfp, pgnoaddr, txnp, flags, addrp);
/*
* We only decrement the count in op_rep_exit if the operation fails.
* Otherwise the count will be decremented when the page is no longer
* pinned in memp_fput.
*/
if (ret != 0 && rep_check)
- __op_rep_exit(dbenv);
+ (void)__op_rep_exit(dbenv);
+
+ /* Similarly if an app has a page pinned it is ACTIVE. */
+err: if (ret != 0)
+ ENV_LEAVE(dbenv, ip);
+
return (ret);
}
@@ -89,27 +95,33 @@ __memp_fget_pp(dbmfp, pgnoaddr, flags, addrp)
* Get a page from the file.
*
* PUBLIC: int __memp_fget
- * PUBLIC: __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ * PUBLIC: __P((DB_MPOOLFILE *, db_pgno_t *, DB_TXN *, u_int32_t, void *));
*/
int
-__memp_fget(dbmfp, pgnoaddr, flags, addrp)
+__memp_fget(dbmfp, pgnoaddr, txn, flags, addrp)
DB_MPOOLFILE *dbmfp;
db_pgno_t *pgnoaddr;
+ DB_TXN *txn;
u_int32_t flags;
void *addrp;
{
enum { FIRST_FOUND, FIRST_MISS, SECOND_FOUND, SECOND_MISS } state;
- BH *alloc_bhp, *bhp;
+ BH *alloc_bhp, *bhp, *current_bhp, *frozen_bhp, *oldest_bhp;
DB_ENV *dbenv;
DB_MPOOL *dbmp;
DB_MPOOL_HASH *hp;
MPOOL *c_mp, *mp;
MPOOLFILE *mfp;
+ REGINFO *infop;
+ TXN_DETAIL *td;
+ DB_LSN *read_lsnp;
roff_t mf_offset;
u_int32_t n_cache, st_hsearch;
- int b_incr, extending, first, ret;
+ int b_incr, b_locked, dirty, edit, extending, first;
+ int makecopy, mvcc, need_free, reorder, ret;
*(void **)addrp = NULL;
+ COMPQUIET(oldest_bhp, NULL);
dbenv = dbmfp->dbenv;
dbmp = dbenv->mp_handle;
@@ -117,23 +129,69 @@ __memp_fget(dbmfp, pgnoaddr, flags, addrp)
c_mp = NULL;
mp = dbmp->reginfo[0].primary;
mfp = dbmfp->mfp;
+ mvcc = mfp->multiversion;
mf_offset = R_OFFSET(dbmp->reginfo, mfp);
- alloc_bhp = bhp = NULL;
+ alloc_bhp = bhp = frozen_bhp = NULL;
+ read_lsnp = NULL;
hp = NULL;
- b_incr = extending = ret = 0;
+ b_incr = b_locked = extending = makecopy = ret = 0;
+ n_cache = 0;
+ infop = NULL;
+ td = NULL;
+
+ if (LF_ISSET(DB_MPOOL_DIRTY)) {
+ if (F_ISSET(dbmfp, MP_READONLY)) {
+ __db_errx(dbenv,
+ "%s: dirty flag set for readonly file page",
+ __memp_fn(dbmfp));
+ return (EINVAL);
+ }
+ if ((ret = __db_fcchk(dbenv, "DB_MPOOLFILE->get",
+ flags, DB_MPOOL_DIRTY, DB_MPOOL_EDIT)) != 0)
+ return (ret);
+ }
+
+ dirty = LF_ISSET(DB_MPOOL_DIRTY);
+ edit = LF_ISSET(DB_MPOOL_EDIT);
+ LF_CLR(DB_MPOOL_DIRTY | DB_MPOOL_EDIT);
+
+ /*
+ * If the transaction is being used to update a multiversion database
+ * for the first time, set the read LSN. In addition, if this is an
+ * update, allocate a mutex. If no transaction has been supplied, that
+ * will be caught later, when we know whether one is required.
+ */
+ if (mvcc && txn != NULL && txn->td != NULL) {
+ /* We're only interested in the ultimate parent transaction. */
+ while (txn->parent != NULL)
+ txn = txn->parent;
+ td = (TXN_DETAIL *)txn->td;
+ if (F_ISSET(txn, TXN_SNAPSHOT)) {
+ read_lsnp = &td->read_lsn;
+ if (IS_MAX_LSN(*read_lsnp) &&
+ (ret = __log_current_lsn(dbenv, read_lsnp,
+ NULL, NULL)) != 0)
+ return (ret);
+ }
+ if ((dirty || LF_ISSET(DB_MPOOL_CREATE | DB_MPOOL_NEW)) &&
+ td->mvcc_mtx == MUTEX_INVALID && (ret =
+ __mutex_alloc(dbenv, MTX_TXN_MVCC, 0, &td->mvcc_mtx)) != 0)
+ return (ret);
+ }
switch (flags) {
case DB_MPOOL_LAST:
/* Get the last page number in the file. */
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
*pgnoaddr = mfp->last_pgno;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
break;
case DB_MPOOL_NEW:
/*
* If always creating a page, skip the first search
* of the hash bucket.
*/
+ state = FIRST_MISS;
goto alloc;
case DB_MPOOL_CREATE:
default:
@@ -177,19 +235,50 @@ hb_search:
* 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);
+ infop = &dbmp->reginfo[n_cache];
+ c_mp = infop->primary;
+ hp = R_ADDR(infop, c_mp->htab);
hp = &hp[NBUCKET(c_mp, mf_offset, *pgnoaddr)];
/* Search the hash chain for the page. */
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)) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ b_locked = 1;
+ SH_TAILQ_FOREACH(bhp, &hp->hash_bucket, hq, __bh) {
++st_hsearch;
if (bhp->pgno != *pgnoaddr || bhp->mf_offset != mf_offset)
continue;
+ if (mvcc) {
+ /*
+ * Snapshot reads -- get the version of the page that
+ * was visible *at* the read_lsn.
+ */
+ current_bhp = bhp;
+ if (read_lsnp != NULL &&
+ !BH_OWNED_BY(dbenv, bhp, txn) && !edit) {
+ while (bhp != NULL &&
+ bhp->td_off != INVALID_ROFF &&
+ log_compare(VISIBLE_LSN(dbenv, bhp),
+ read_lsnp) > 0)
+ bhp = SH_CHAIN_PREV(bhp, vc, __bh);
+
+ DB_ASSERT(dbenv, bhp != NULL);
+ }
+
+ makecopy = dirty && !BH_OWNED_BY(dbenv, bhp, txn);
+ if (makecopy && bhp != current_bhp) {
+ ret = DB_LOCK_DEADLOCK;
+ goto err;
+ }
+
+ if (F_ISSET(bhp, BH_FROZEN) &&
+ !F_ISSET(bhp, BH_FREED)) {
+ DB_ASSERT(dbenv, frozen_bhp == NULL);
+ frozen_bhp = bhp;
+ }
+ }
+
/*
* Increment the reference count. We may discard the hash
* bucket lock as we evaluate and/or read the buffer, so we
@@ -197,9 +286,7 @@ retry: st_hsearch = 0;
* unchanged.
*/
if (bhp->ref == UINT16_MAX) {
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
-
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: page %lu: reference count overflow",
__memp_fn(dbmfp), (u_long)bhp->pgno);
ret = __db_panic(dbenv, EINVAL);
@@ -213,37 +300,66 @@ retry: st_hsearch = 0;
* 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 the buffer to become available, re-acquire the bucket.
*/
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.
+ * 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);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ b_incr = b_locked = 0;
+ __os_sleep(dbenv, 0, 1);
goto retry;
}
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
/*
- * 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 we're the first thread waiting on I/O, set the
+ * flag so the thread doing I/O knows to wake us up,
+ * and lock the mutex.
*/
- if (!first)
- __os_yield(dbenv, 1);
+ if (!F_ISSET(hp, IO_WAITER)) {
+ F_SET(hp, IO_WAITER);
+ MUTEX_LOCK(dbenv, hp->mtx_io);
+ }
+ ++hp->hash_io_wait;
- MUTEX_LOCK(dbenv, &bhp->mutex);
- /* Wait for I/O to finish... */
- MUTEX_UNLOCK(dbenv, &bhp->mutex);
- MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ /* Release the hash bucket lock. */
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+
+ /* Wait for I/O to finish. */
+ MUTEX_LOCK(dbenv, hp->mtx_io);
+ MUTEX_UNLOCK(dbenv, hp->mtx_io);
+
+ /* Re-acquire the hash bucket lock. */
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ }
+
+ /*
+ * If the buffer was frozen before we waited for any I/O to
+ * complete and is still frozen, we need to unfreeze it.
+ * Otherwise, it was unfrozen while we waited, and we need to
+ * search again.
+ */
+ if (frozen_bhp != NULL && !F_ISSET(frozen_bhp, BH_FROZEN)) {
+thawed: need_free = (--frozen_bhp->ref == 0);
+ b_incr = 0;
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ MPOOL_REGION_LOCK(dbenv, infop);
+ if (alloc_bhp != NULL) {
+ __memp_free(infop, mfp, alloc_bhp);
+ alloc_bhp = NULL;
+ }
+ if (need_free)
+ SH_TAILQ_INSERT_TAIL(&c_mp->free_frozen,
+ frozen_bhp, hq);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
+ frozen_bhp = NULL;
+ goto retry;
}
++mfp->stat.st_cache_hit;
@@ -285,34 +401,108 @@ retry: st_hsearch = 0;
state = bhp == NULL ?
(alloc_bhp == NULL ? FIRST_MISS : SECOND_MISS) :
(alloc_bhp == NULL ? FIRST_FOUND : SECOND_FOUND);
+
switch (state) {
case FIRST_FOUND:
/*
- * If we are to free the buffer, then this had better
- * be the only reference. If so, just free the buffer.
- * If not, complain and get out.
+ * If we are to free the buffer, then this had better be the
+ * only reference. If so, just free the buffer. If not,
+ * complain and get out.
*/
if (flags == DB_MPOOL_FREE) {
- if (bhp->ref == 1) {
- __memp_bhfree(dbmp, hp, bhp, BH_FREE_FREEMEM);
- return (0);
+ if (--bhp->ref == 0) {
+ /*
+ * In a multiversion database, this page could
+ * be requested again so we have to leave it in
+ * cache for now. It should *not* ever be
+ * requested again for modification without an
+ * intervening DB_MPOOL_CREATE or DB_MPOOL_NEW.
+ *
+ * Mark it with BH_FREED so we don't reuse the
+ * data when the page is resurrected.
+ */
+ if (mvcc && (!SH_CHAIN_SINGLETON(bhp, vc) ||
+ bhp->td_off == INVALID_ROFF ||
+ !IS_MAX_LSN(*VISIBLE_LSN(dbenv, bhp)))) {
+ if (F_ISSET(bhp, BH_DIRTY)) {
+ --hp->hash_page_dirty;
+ F_CLR(bhp,
+ BH_DIRTY | BH_DIRTY_CREATE);
+ }
+ F_SET(bhp, BH_FREED);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ return (0);
+ }
+ return (__memp_bhfree(
+ dbmp, hp, bhp, BH_FREE_FREEMEM));
}
- __db_err(dbenv,
+ __db_errx(dbenv,
"File %s: freeing pinned buffer for page %lu",
__memp_fns(dbmp, mfp), (u_long)*pgnoaddr);
ret = __db_panic(dbenv, EINVAL);
goto err;
}
- /* We found the buffer in our first check -- we're done. */
- break;
+ if (mvcc) {
+ if (flags == DB_MPOOL_CREATE &&
+ F_ISSET(bhp, BH_FREED)) {
+ extending = makecopy = 1;
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (*pgnoaddr > mfp->last_pgno)
+ mfp->last_pgno = *pgnoaddr;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ }
+
+ /*
+ * With multiversion databases, we might need to
+ * allocate a new buffer into which we can copy the one
+ * that we found. In that case, check the last buffer
+ * in the chain to see whether we can reuse an obsolete
+ * buffer.
+ *
+ * To provide snapshot isolation, we need to make sure
+ * that we've seen a buffer older than the oldest
+ * snapshot read LSN.
+ */
+ if ((makecopy || frozen_bhp != NULL) && (oldest_bhp =
+ SH_CHAIN_PREV(bhp, vc, __bh)) != NULL) {
+ while (SH_CHAIN_HASPREV(oldest_bhp, vc))
+ oldest_bhp = SH_CHAIN_PREVP(oldest_bhp,
+ vc, __bh);
+
+ if (oldest_bhp->ref == 0 &&
+ !F_ISSET(oldest_bhp, BH_FROZEN) &&
+ (BH_OBSOLETE(oldest_bhp, hp->old_reader) ||
+ ((ret = __txn_oldest_reader(dbenv,
+ &hp->old_reader)) == 0 &&
+ BH_OBSOLETE(oldest_bhp, hp->old_reader)))) {
+ if ((ret = __memp_bhfree(dbmp, hp,
+ oldest_bhp, BH_FREE_REUSE)) != 0)
+ goto err;
+ alloc_bhp = oldest_bhp;
+ } else if (ret != 0)
+ goto err;
+
+ DB_ASSERT(dbenv, alloc_bhp == NULL ||
+ !F_ISSET(alloc_bhp, BH_FROZEN));
+ }
+ }
+
+ if ((!makecopy && frozen_bhp == NULL) || alloc_bhp != NULL)
+ /* We found the buffer -- we're done. */
+ break;
+
+ /* FALLTHROUGH */
case FIRST_MISS:
/*
* 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);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ b_locked = 0;
/*
* The buffer is not in the pool, so we don't need to free it.
@@ -322,19 +512,17 @@ retry: st_hsearch = 0;
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
+ * If neither DB_MPOOL_CREATE or DB_MPOOL_NEW is set, then
* it's an error to try and get a page past the end of file.
*/
- COMPQUIET(n_cache, 0);
-
- extending = ret = 0;
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
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",
+ __db_errx(
+ dbenv, "%s: file limited to %lu pages",
__memp_fn(dbmfp), (u_long)mfp->maxpgno);
ret = ENOSPC;
} else
@@ -342,17 +530,18 @@ alloc: /*
break;
case DB_MPOOL_CREATE:
if (mfp->maxpgno != 0 && *pgnoaddr > mfp->maxpgno) {
- __db_err(dbenv, "%s: file limited to %lu pages",
+ __db_errx(
+ dbenv, "%s: file limited to %lu pages",
__memp_fn(dbmfp), (u_long)mfp->maxpgno);
ret = ENOSPC;
- } else
+ } else if (!extending)
extending = *pgnoaddr > mfp->last_pgno;
break;
default:
ret = *pgnoaddr > mfp->last_pgno ? DB_PAGE_NOTFOUND : 0;
break;
}
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
if (ret != 0)
goto err;
@@ -363,26 +552,27 @@ alloc: /*
*/
mf_offset = R_OFFSET(dbmp->reginfo, mfp);
n_cache = NCACHE(mp, mf_offset, *pgnoaddr);
- c_mp = dbmp->reginfo[n_cache].primary;
+ infop = &dbmp->reginfo[n_cache];
+ c_mp = infop->primary;
/* Allocate a new buffer header and data space. */
- if ((ret = __memp_alloc(dbmp,
- &dbmp->reginfo[n_cache], mfp, 0, NULL, &alloc_bhp)) != 0)
+ if ((ret =
+ __memp_alloc(dbmp,infop, mfp, 0, NULL, &alloc_bhp)) != 0)
goto err;
#ifdef DIAGNOSTIC
if ((uintptr_t)alloc_bhp->buf & (sizeof(size_t) - 1)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_MPOOLFILE->get: buffer data is NOT size_t aligned");
ret = __db_panic(dbenv, EINVAL);
goto err;
}
#endif
/*
- * If we are extending the file, we'll need the region lock
+ * If we are extending the file, we'll need the mfp lock
* again.
*/
if (extending)
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
/*
* DB_MPOOL_NEW does not guarantee you a page unreferenced by
@@ -414,15 +604,14 @@ alloc: /*
if (n_cache != NCACHE(mp, mf_offset, *pgnoaddr)) {
/*
* flags == DB_MPOOL_NEW, so extending is set
- * and we're holding the region locked.
+ * and we're holding the mfp locked.
*/
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
- R_LOCK(dbenv, &dbmp->reginfo[n_cache]);
- __db_shalloc_free(
- &dbmp->reginfo[n_cache], alloc_bhp);
+ MPOOL_REGION_LOCK(dbenv, infop);
+ __memp_free(infop, mfp, alloc_bhp);
c_mp->stat.st_pages--;
- R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
alloc_bhp = NULL;
goto alloc;
@@ -430,7 +619,7 @@ alloc: /*
}
/*
- * We released the region lock, so another thread might have
+ * We released the mfp lock, so another thread might have
* extended the file. Update the last_pgno and initialize
* the file, as necessary, if we extended the file.
*/
@@ -438,29 +627,51 @@ alloc: /*
if (*pgnoaddr > mfp->last_pgno)
mfp->last_pgno = *pgnoaddr;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
if (ret != 0)
goto err;
}
+
+ /*
+ * If we're doing copy-on-write, we will already have the
+ * buffer header. In that case, we don't need to search again.
+ */
+ if (bhp != NULL) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ b_locked = 1;
+ break;
+ }
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.
+ * unless DB_MPOOL_NEW is set. If we're about to copy-on-write,
+ * this is exactly the situation we want.
*
- * Free the allocated memory, we no longer need it. Since we
+ * For multiversion files, we may have left some pages in cache
+ * beyond the end of a file after truncating. In that case, we
+ * would get to here with extending set. If so, we need to
+ * insert the new page in the version chain similar to when
+ * we copy on write.
+ */
+ if (extending && F_ISSET(bhp, BH_FREED))
+ makecopy = 1;
+ if (makecopy || frozen_bhp != NULL)
+ break;
+
+ /* 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], alloc_bhp);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ MPOOL_REGION_LOCK(dbenv, infop);
+ __memp_free(infop, mfp, alloc_bhp);
c_mp->stat.st_pages--;
+ MPOOL_REGION_UNLOCK(dbenv, infop);
alloc_bhp = NULL;
- R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
/*
* We can't use the page we found in the pool if DB_MPOOL_NEW
@@ -472,12 +683,13 @@ alloc: /*
*/
if (flags == DB_MPOOL_NEW) {
--bhp->ref;
- b_incr = 0;
+ b_incr = b_locked = 0;
+ bhp = NULL;
goto alloc;
}
/* We can use the page -- get the bucket lock. */
- MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
break;
case SECOND_MISS:
/*
@@ -495,19 +707,24 @@ alloc: /*
* Append the buffer to the tail of the bucket list and update
* the hash bucket's priority.
*/
- b_incr = 1;
-
/*lint --e{668} (flexelint: bhp cannot be NULL). */
+#ifdef DIAG_MVCC
+ memset(bhp, 0, SSZ(BH, align_off));
+#else
memset(bhp, 0, sizeof(BH));
+#endif
bhp->ref = 1;
+ b_incr = 1;
bhp->priority = UINT32_MAX;
bhp->pgno = *pgnoaddr;
bhp->mf_offset = mf_offset;
SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ SH_CHAIN_INIT(bhp, vc);
+
hp->hash_priority =
- SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
+ BH_PRIORITY(SH_TAILQ_FIRSTP(&hp->hash_bucket, __bh));
- /* If we extended the file, make sure the page is never lost. */
+ /* We created a new page, it starts dirty. */
if (extending) {
++hp->hash_page_dirty;
F_SET(bhp, BH_DIRTY | BH_DIRTY_CREATE);
@@ -532,7 +749,9 @@ alloc: /*
* if DB_MPOOL_CREATE is set.
*/
if (extending) {
- if (mfp->clear_len == 0)
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize,
+ PROT_READ | PROT_WRITE);
+ if (mfp->clear_len == DB_CLEARLEN_NOTSET)
memset(bhp->buf, 0, mfp->stat.st_pagesize);
else {
memset(bhp->buf, 0, mfp->clear_len);
@@ -552,22 +771,43 @@ alloc: /*
}
/* Increment buffer count referenced by MPOOLFILE. */
- MUTEX_LOCK(dbenv, &mfp->mutex);
+ MUTEX_LOCK(dbenv, mfp->mutex);
++mfp->block_cnt;
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ }
+
+ DB_ASSERT(dbenv, bhp != NULL);
+ DB_ASSERT(dbenv, bhp->ref != 0);
+
+ /* We've got a buffer header we're re-instantiating. */
+ if (frozen_bhp != NULL) {
+ DB_ASSERT(dbenv, alloc_bhp != NULL);
/*
- * 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.
+ * If the empty buffer has been filled in the meantime, don't
+ * overwrite it.
*/
- if ((ret = __db_mutex_setup(dbenv,
- &dbmp->reginfo[n_cache], &bhp->mutex, 0)) != 0)
- goto err;
- }
+ if (!F_ISSET(frozen_bhp, BH_FROZEN))
+ goto thawed;
+ else {
+ if ((ret = __memp_bh_thaw(dbmp, infop, hp,
+ frozen_bhp, alloc_bhp)) != 0)
+ goto err;
+ bhp = alloc_bhp;
+ }
- DB_ASSERT(bhp->ref != 0);
+ frozen_bhp = alloc_bhp = NULL;
+
+ /*
+ * If we're updating a buffer that was frozen, we have to go
+ * through all of that again to allocate another buffer to hold
+ * the new copy.
+ */
+ if (makecopy) {
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ goto alloc;
+ }
+ }
/*
* If we're the only reference, update buffer and bucket priorities.
@@ -576,11 +816,21 @@ alloc: /*
* the buffer, so there is no need to do it again.)
*/
if (state != SECOND_MISS && bhp->ref == 1) {
- bhp->priority = UINT32_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;
+ if (SH_CHAIN_SINGLETON(bhp, vc)) {
+ bhp->priority = UINT32_MAX;
+ if (bhp != SH_TAILQ_LAST(&hp->hash_bucket, hq, __bh)) {
+ SH_TAILQ_REMOVE(&hp->hash_bucket,
+ bhp, hq, __bh);
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ }
+ hp->hash_priority = BH_PRIORITY(
+ SH_TAILQ_FIRSTP(&hp->hash_bucket, __bh));
+ } else {
+ reorder = (BH_PRIORITY(bhp) == bhp->priority);
+ bhp->priority = UINT32_MAX;
+ if (reorder)
+ __memp_bucket_reorder(dbenv, hp, bhp);
+ }
}
/*
@@ -598,7 +848,7 @@ alloc: /*
*/
if (F_ISSET(bhp, BH_TRASH) &&
(ret = __memp_pgread(dbmfp,
- &hp->hash_mutex, bhp, LF_ISSET(DB_MPOOL_CREATE) ? 1 : 0)) != 0)
+ hp, bhp, LF_ISSET(DB_MPOOL_CREATE) ? 1 : 0)) != 0)
goto err;
/*
@@ -607,27 +857,94 @@ alloc: /*
* to be re-converted for use.
*/
if (F_ISSET(bhp, BH_CALLPGIN)) {
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize,
+ PROT_READ | PROT_WRITE);
if ((ret = __memp_pg(dbmfp, bhp, 1)) != 0)
goto err;
F_CLR(bhp, BH_CALLPGIN);
}
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ /* Copy-on-write. */
+ if (makecopy && state != SECOND_MISS) {
+ DB_ASSERT(dbenv, !SH_CHAIN_HASNEXT(bhp, vc));
+ DB_ASSERT(dbenv, bhp != NULL);
+ DB_ASSERT(dbenv, alloc_bhp != NULL);
+ DB_ASSERT(dbenv, alloc_bhp != bhp);
+
+ if (bhp->ref == 1)
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize,
+ PROT_READ);
+
+ alloc_bhp->ref = 1;
+ alloc_bhp->ref_sync = 0;
+ alloc_bhp->flags = F_ISSET(bhp, BH_DIRTY | BH_DIRTY_CREATE);
+ F_CLR(bhp, BH_DIRTY | BH_DIRTY_CREATE);
+ alloc_bhp->priority = bhp->priority;
+ alloc_bhp->pgno = bhp->pgno;
+ alloc_bhp->mf_offset = bhp->mf_offset;
+ alloc_bhp->td_off = INVALID_ROFF;
+ if (extending) {
+ memset(alloc_bhp->buf, 0, mfp->stat.st_pagesize);
+ F_SET(alloc_bhp, BH_DIRTY_CREATE);
+ } else
+ memcpy(alloc_bhp->buf, bhp->buf, mfp->stat.st_pagesize);
+
+ SH_CHAIN_INSERT_AFTER(bhp, alloc_bhp, vc, __bh);
+ SH_TAILQ_INSERT_BEFORE(&hp->hash_bucket,
+ bhp, alloc_bhp, hq, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ if (--bhp->ref == 0)
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize, 0);
+ bhp = alloc_bhp;
+
+ if (alloc_bhp != oldest_bhp) {
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ ++mfp->block_cnt;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ }
+
+ alloc_bhp = NULL;
+ }
+
+ if ((dirty || edit || extending) && !F_ISSET(bhp, BH_DIRTY)) {
+ ++hp->hash_page_dirty;
+ F_SET(bhp, BH_DIRTY);
+ }
+
+ if (mvcc &&
+ ((makecopy && !extending) || (extending && txn != NULL)) &&
+ (ret = __memp_bh_settxn(dbmp, mfp, bhp, td)) != 0)
+ goto err;
+
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize, PROT_READ |
+ (dirty || edit || extending || F_ISSET(bhp, BH_DIRTY) ?
+ PROT_WRITE : 0));
+
+#ifdef DIAGNOSTIC
+ __memp_check_order(dbenv, hp);
+#endif
+
+ DB_ASSERT(dbenv, !(mfp->multiversion && F_ISSET(bhp, BH_DIRTY)) ||
+ !SH_CHAIN_HASNEXT(bhp, vc));
+
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
#ifdef DIAGNOSTIC
/* Update the file's pinned reference count. */
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
++dbmfp->pinref;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
/*
* 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);
+ __os_yield(dbenv);
#endif
+ DB_ASSERT(dbenv, alloc_bhp == NULL);
+
*(void **)addrp = bhp->buf;
return (0);
@@ -636,21 +953,27 @@ err: /*
* 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)
- __memp_bhfree(dbmp, hp, bhp, BH_FREE_FREEMEM);
- else {
- --bhp->ref;
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ if (b_incr || frozen_bhp != NULL) {
+ if (!b_locked) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ b_locked = 1;
+ }
+ if (frozen_bhp != NULL)
+ --frozen_bhp;
+ if (b_incr && --bhp->ref == 0) {
+ (void)__memp_bhfree(dbmp, hp, bhp, BH_FREE_FREEMEM);
+ b_locked = 0;
}
}
+ if (b_locked)
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
/* 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], alloc_bhp);
+ MPOOL_REGION_LOCK(dbenv, infop);
+ __memp_free(infop, mfp, alloc_bhp);
c_mp->stat.st_pages--;
- R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
}
return (ret);
diff --git a/db/mp/mp_fmethod.c b/db/mp/mp_fmethod.c
index e27800c0d..76d160ee5 100644
--- a/db/mp/mp_fmethod.c
+++ b/db/mp/mp_fmethod.c
@@ -1,37 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_fmethod.c,v 11.142 2004/10/15 16:59:42 bostic Exp $
+ * $Id: mp_fmethod.c,v 12.13 2006/08/24 14:46:14 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
-#ifdef HAVE_RPC
-#include "dbinc_auto/rpc_client_ext.h"
-#endif
-
static int __memp_get_clear_len __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 *));
@@ -52,7 +33,8 @@ __memp_fcreate_pp(dbenv, retp, flags)
DB_MPOOLFILE **retp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
@@ -60,12 +42,9 @@ __memp_fcreate_pp(dbenv, retp, flags)
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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_fcreate(dbenv, retp)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -92,57 +71,28 @@ __memp_fcreate(dbenv, retp)
dbmfp->dbenv = dbenv;
dbmfp->mfp = INVALID_ROFF;
-#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;
+ dbmfp->get = __memp_fget_pp;
+ dbmfp->get_clear_len = __memp_get_clear_len;
+ dbmfp->get_fileid = __memp_get_fileid;
+ dbmfp->get_flags = __memp_get_flags;
+ dbmfp->get_ftype = __memp_get_ftype;
+ dbmfp->get_lsn_offset = __memp_get_lsn_offset;
+ dbmfp->get_maxsize = __memp_get_maxsize;
+ dbmfp->get_pgcookie = __memp_get_pgcookie;
+ dbmfp->get_priority = __memp_get_priority;
+ dbmfp->open = __memp_fopen_pp;
+ dbmfp->put = __memp_fput_pp;
+ dbmfp->set = __memp_fset_pp;
+ dbmfp->set_clear_len = __memp_set_clear_len;
+ dbmfp->set_fileid = __memp_set_fileid;
+ dbmfp->set_flags = __memp_set_flags;
+ dbmfp->set_ftype = __memp_set_ftype;
+ dbmfp->set_lsn_offset = __memp_set_lsn_offset;
+ dbmfp->set_maxsize = __memp_set_maxsize;
+ dbmfp->set_pgcookie = __memp_set_pgcookie;
+ dbmfp->set_priority = __memp_set_priority;
+ dbmfp->sync = __memp_fsync_pp;
*retp = dbmfp;
return (0);
@@ -190,7 +140,7 @@ __memp_get_fileid(dbmfp, fileid)
u_int8_t *fileid;
{
if (!F_ISSET(dbmfp, MP_FILEID_SET)) {
- __db_err(dbmfp->dbenv, "get_fileid: file ID not set");
+ __db_errx(dbmfp->dbenv, "get_fileid: file ID not set");
return (EINVAL);
}
@@ -365,7 +315,6 @@ __memp_get_maxsize(dbmfp, gbytesp, bytesp)
u_int32_t *gbytesp, *bytesp;
{
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
MPOOLFILE *mfp;
if ((mfp = dbmfp->mfp) == NULL) {
@@ -373,15 +322,14 @@ __memp_get_maxsize(dbmfp, gbytesp, bytesp)
*bytesp = dbmfp->bytes;
} else {
dbenv = dbmfp->dbenv;
- dbmp = dbenv->mp_handle;
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
*gbytesp = (u_int32_t)
(mfp->maxpgno / (GIGABYTE / mfp->stat.st_pagesize));
*bytesp = (u_int32_t)
((mfp->maxpgno % (GIGABYTE / mfp->stat.st_pagesize)) *
mfp->stat.st_pagesize);
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
}
return (0);
@@ -397,7 +345,6 @@ __memp_set_maxsize(dbmfp, gbytes, bytes)
u_int32_t gbytes, bytes;
{
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
MPOOLFILE *mfp;
if ((mfp = dbmfp->mfp) == NULL) {
@@ -405,15 +352,14 @@ __memp_set_maxsize(dbmfp, gbytes, bytes)
dbmfp->bytes = bytes;
} else {
dbenv = dbmfp->dbenv;
- dbmp = dbenv->mp_handle;
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
mfp->maxpgno = (db_pgno_t)
(gbytes * (GIGABYTE / mfp->stat.st_pagesize));
mfp->maxpgno += (db_pgno_t)
((bytes + mfp->stat.st_pagesize - 1) /
mfp->stat.st_pagesize);
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
}
return (0);
@@ -494,7 +440,7 @@ __memp_get_priority(dbmfp, priorityp)
*priorityp = DB_PRIORITY_VERY_HIGH;
break;
default:
- __db_err(dbmfp->dbenv,
+ __db_errx(dbmfp->dbenv,
"DB_MPOOLFILE->get_priority: unknown priority value: %d",
dbmfp->priority);
return (EINVAL);
@@ -529,7 +475,7 @@ __memp_set_priority(dbmfp, priority)
dbmfp->priority = MPOOL_PRI_VERY_HIGH;
break;
default:
- __db_err(dbmfp->dbenv,
+ __db_errx(dbmfp->dbenv,
"DB_MPOOLFILE->set_priority: unknown priority value: %d",
priority);
return (EINVAL);
@@ -537,7 +483,7 @@ __memp_set_priority(dbmfp, priority)
/* Update the underlying file if we've already opened it. */
if (dbmfp->mfp != NULL)
- dbmfp->mfp->priority = priority;
+ dbmfp->mfp->priority = dbmfp->priority;
return (0);
}
@@ -549,22 +495,24 @@ __memp_set_priority(dbmfp, priority)
* !!!
* Undocumented interface: DB private.
*
- * PUBLIC: void __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
+ * PUBLIC: int __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
*/
-void
+int
__memp_last_pgno(dbmfp, pgnoaddr)
DB_MPOOLFILE *dbmfp;
db_pgno_t *pgnoaddr;
{
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
+ MPOOLFILE *mfp;
dbenv = dbmfp->dbenv;
- dbmp = dbenv->mp_handle;
+ mfp = dbmfp->mfp;
- R_LOCK(dbenv, dbmp->reginfo);
- *pgnoaddr = dbmfp->mfp->last_pgno;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ *pgnoaddr = mfp->last_pgno;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+
+ return (0);
}
/*
diff --git a/db/mp/mp_fopen.c b/db/mp/mp_fopen.c
index 7e302f898..f13876e75 100644
--- a/db/mp/mp_fopen.c
+++ b/db/mp/mp_fopen.c
@@ -1,24 +1,22 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_fopen.c,v 11.143 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_fopen.c,v 12.34 2006/09/09 13:55:52 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
+
+static int __memp_mfp_alloc __P((DB_MPOOL *,
+ DB_MPOOLFILE *, const char *, u_int32_t, u_int32_t, MPOOLFILE **));
/*
* __memp_fopen_pp --
@@ -36,7 +34,8 @@ __memp_fopen_pp(dbmfp, path, flags, mode, pagesize)
size_t pagesize;
{
DB_ENV *dbenv;
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbenv = dbmfp->dbenv;
@@ -44,7 +43,7 @@ __memp_fopen_pp(dbmfp, path, flags, mode, pagesize)
/* Validate arguments. */
if ((ret = __db_fchk(dbenv, "DB_MPOOLFILE->open", flags,
- DB_CREATE | DB_DIRECT | DB_EXTENT |
+ DB_CREATE | DB_DIRECT | DB_EXTENT | DB_MULTIVERSION |
DB_NOMMAP | DB_ODDFILESIZE | DB_RDONLY | DB_TRUNCATE)) != 0)
return (ret);
@@ -53,29 +52,33 @@ __memp_fopen_pp(dbmfp, path, flags, mode, pagesize)
* clear length.
*/
if (pagesize == 0 || !POWER_OF_TWO(pagesize)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_MPOOLFILE->open: page sizes must be a power-of-2");
return (EINVAL);
}
if (dbmfp->clear_len > pagesize) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"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,
+ __db_errx(dbenv,
"DB_MPOOLFILE->open: temporary files can't be readonly");
return (EINVAL);
}
- 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_db_rep_exit(dbenv);
+ if (LF_ISSET(DB_MULTIVERSION) && !TXN_ON(dbenv)) {
+ __db_errx(dbenv,
+ "DB_MPOOLFILE->open: DB_MULTIVERSION requires transactions");
+ return (EINVAL);
+ }
+
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv,
+ (__memp_fopen(dbmfp, NULL, path, flags, mode, pagesize)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -98,19 +101,26 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
DB_ENV *dbenv;
DB_MPOOL *dbmp;
DB_MPOOLFILE *tmp_dbmfp;
+ DB_MPOOL_HASH *hp;
MPOOL *mp;
- db_pgno_t last_pgno;
+ MPOOLFILE *alloc_mfp;
size_t maxmap;
- u_int32_t mbytes, bytes, oflags, pagesize;
+ db_pgno_t last_pgno;
+ u_int32_t bucket, mbytes, bytes, oflags, pagesize;
int refinc, ret;
char *rpath;
- void *p;
+
+ /* If this handle is already open, return. */
+ if (F_ISSET(dbmfp, MP_OPEN_CALLED))
+ return (0);
dbenv = dbmfp->dbenv;
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
refinc = ret = 0;
+ mbytes = bytes = 0;
rpath = NULL;
+ alloc_mfp = NULL;
/*
* We're keeping the page size as a size_t in the public API, but
@@ -123,11 +133,14 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
* path is NULL, but we'll get the path from the underlying region
* information. Otherwise, if the path is NULL, it's a temporary
* file -- we know we can't join any existing files, and we'll delay
- * the open until we actually need to write the file.
+ * the open until we actually need to write the file. All temporary
+ * files will go into the first hash bucket.
*/
- DB_ASSERT(mfp == NULL || path == NULL);
+ DB_ASSERT(dbenv, mfp == NULL || path == NULL);
- if (mfp == NULL && path == NULL)
+ bucket = 0;
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+ if (path == NULL && mfp == NULL)
goto alloc;
/*
@@ -140,12 +153,12 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
* failed creating the file DB_AM_DISCARD). Increment the ref
* count so the file cannot become dead and be unlinked.
*/
- MUTEX_LOCK(dbenv, &mfp->mutex);
+ MUTEX_LOCK(dbenv, mfp->mutex);
if (!mfp->deadfile) {
++mfp->mpf_cnt;
refinc = 1;
}
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
/*
* Test one last time to see if the file is dead -- it may have
@@ -157,89 +170,126 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
return (EINVAL);
}
- /* Convert MP open flags to DB OS-layer open flags. */
- oflags = 0;
- if (LF_ISSET(DB_CREATE))
- oflags |= DB_OSO_CREATE;
- if (LF_ISSET(DB_DIRECT))
- oflags |= DB_OSO_DIRECT;
- if (LF_ISSET(DB_RDONLY)) {
- F_SET(dbmfp, MP_READONLY);
- oflags |= DB_OSO_RDONLY;
- }
-
/*
- * Get the real name for this file and open it.
- *
- * Supply a page size so os_open can decide whether to turn buffering
- * off if the DB_DIRECT_DB flag is set.
- *
- * Acquire the region lock if we're using a path from an underlying
- * MPOOLFILE -- there's a race in accessing the path name stored in
- * the region, __memp_nameop may be simultaneously renaming the file.
+ * If there's no backing file, we can join existing files in the cache,
+ * but there's nothing to read from disk.
*/
- if (mfp != NULL) {
- R_LOCK(dbenv, dbmp->reginfo);
- path = R_ADDR(dbmp->reginfo, mfp->path_off);
- }
- if ((ret =
- __db_appname(dbenv, DB_APP_DATA, path, 0, NULL, &rpath)) == 0)
- ret = __os_open_extend(dbenv,
- rpath, (u_int32_t)pagesize, oflags, mode, &dbmfp->fhp);
- if (mfp != NULL)
- R_UNLOCK(dbenv, dbmp->reginfo);
- if (ret != 0) {
- /* If it's a Queue extent file, it may not exist, that's OK. */
- if (!LF_ISSET(DB_EXTENT))
- __db_err(dbenv, "%s: %s", rpath, db_strerror(ret));
- goto err;
- }
+ if (!FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE)) {
+ /* Convert MP open flags to DB OS-layer open flags. */
+ oflags = 0;
+ if (LF_ISSET(DB_CREATE))
+ oflags |= DB_OSO_CREATE;
+ if (LF_ISSET(DB_DIRECT))
+ oflags |= DB_OSO_DIRECT;
+ if (LF_ISSET(DB_RDONLY)) {
+ F_SET(dbmfp, MP_READONLY);
+ oflags |= DB_OSO_RDONLY;
+ }
- /*
- * 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;
+ /*
+ * XXX
+ * A grievous layering violation, the DB_DSYNC_DB flag
+ * was left in the DB_ENV structure and not driven through
+ * the cache API. This needs to be fixed when the general
+ * API configuration is fixed.
+ */
+ if (F_ISSET(dbenv, DB_ENV_DSYNC_DB))
+ oflags |= DB_OSO_DSYNC;
- /*
- * Figure out the file's size.
- *
- * !!!
- * We can't use off_t's here, or in any code in the mainline library
- * for that matter. (We have to use them in the os stubs, of course,
- * as there are system calls that take them as arguments.) The reason
- * is some customers build in environments where an off_t is 32-bits,
- * but still run where offsets are 64-bits, and they pay us a lot of
- * money.
- */
- if ((ret = __os_ioinfo(
- dbenv, rpath, dbmfp->fhp, &mbytes, &bytes, NULL)) != 0) {
- __db_err(dbenv, "%s: %s", rpath, db_strerror(ret));
- goto err;
- }
+ /*
+ * Get the real name for this file and open it.
+ *
+ * Supply a page size so os_open can decide whether to
+ * turn buffering off if the DB_DIRECT_DB flag is set.
+ *
+ * Acquire the region lock if we're using a path from
+ * an underlying MPOOLFILE -- there's a race in accessing
+ * the path name stored in the region, __memp_nameop may
+ * be simultaneously renaming the file.
+ */
+ if (mfp != NULL) {
+ MPOOL_SYSTEM_LOCK(dbenv);
+ path = R_ADDR(dbmp->reginfo, mfp->path_off);
+ }
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, path, 0, NULL, &rpath)) == 0)
+ ret = __os_open_extend(dbenv, rpath,
+ (u_int32_t)pagesize, oflags, mode, &dbmfp->fhp);
+ if (mfp != NULL)
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+ if (ret != 0)
+ goto err;
- /*
- * Get the file id if we weren't given one. Generated file id's
- * don't use timestamps, otherwise there'd be no chance of any
- * other process joining the party.
- */
- if (!F_ISSET(dbmfp, MP_FILEID_SET) &&
- (ret = __os_fileid(dbenv, rpath, 0, dbmfp->fileid)) != 0)
- 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 ((ret = __mutex_alloc(dbenv, MTX_MPOOL_FH,
+ DB_MUTEX_PROCESS_ONLY, &dbmfp->fhp->mtx_fh)) != 0)
+ goto err;
+
+ /*
+ * Figure out the file's size.
+ *
+ * !!!
+ * We can't use off_t's here, or in any code in the mainline
+ * library for that matter. (We have to use them in the
+ * os stubs, of course, as there are system calls that
+ * take them as arguments.) The reason is some customers
+ * build in environments where an off_t is 32-bits, but
+ * still run where offsets are 64-bits, and they pay us
+ * a lot of money.
+ */
+ if ((ret = __os_ioinfo(
+ dbenv, rpath, dbmfp->fhp, &mbytes, &bytes, NULL)) != 0) {
+ __db_err(dbenv, ret, "%s", rpath);
+ goto err;
+ }
+
+ /*
+ * Don't permit files that aren't a multiple of the pagesize,
+ * and find the number of the last page in the file, all the
+ * time being careful not to overflow 32 bits.
+ *
+ * During verify or recovery, we might have to cope with a
+ * truncated file; if the file size is not a multiple of the
+ * page size, round down to a page, we'll take care of the
+ * partial page outside the mpool system.
+ */
+ DB_ASSERT(dbenv, pagesize != 0);
+ if (bytes % pagesize != 0) {
+ if (LF_ISSET(DB_ODDFILESIZE))
+ bytes -= (u_int32_t)(bytes % pagesize);
+ else {
+ __db_errx(dbenv,
+ "%s: file size not a multiple of the pagesize", rpath);
+ ret = EINVAL;
+ goto err;
+ }
+ }
+
+ /*
+ * Get the file id if we weren't given one. Generated file id's
+ * don't use timestamps, otherwise there'd be no chance of any
+ * other process joining the party. Don't bother looking for
+ * this id in the hash table, its new.
+ */
+ if (mfp == NULL && !F_ISSET(dbmfp, MP_FILEID_SET)) {
+ if ((ret =
+ __os_fileid(dbenv, rpath, 0, dbmfp->fileid)) != 0)
+ goto err;
+ F_SET(dbmfp, MP_FILEID_SET);
+ goto alloc;
+ }
+ }
if (mfp != NULL)
goto have_mfp;
/*
- * If not creating a temporary file, walk the list of MPOOLFILE's,
- * looking for a matching file. Files backed by temporary files
- * or previously removed files can't match.
- *
- * DB_TRUNCATE support.
+ * Hash to the proper file table entry and walk it.
*
* The fileID is a filesystem unique number (e.g., a UNIX dev/inode
* pair) plus a timestamp. If files are removed and created in less
@@ -255,17 +305,51 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
* a matching entry, we ensure that it's never found again, and we
* create a new entry for the current request.
*/
- R_LOCK(dbenv, dbmp->reginfo);
- for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
- mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
+ if (FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE)) {
+ DB_ASSERT(dbenv, path != NULL);
+ bucket = FNBUCKET(path, strlen(path));
+ } else
+ bucket = FNBUCKET(dbmfp->fileid, DB_FILE_ID_LEN);
+ hp += bucket;
+
+ /*
+ * We can race with another process opening the same file when
+ * we allocate the mpoolfile structure. We will come back
+ * here and check the hash table again to see if it has appeared.
+ * For most files this is not a problem, since the name is locked
+ * at a higher layer but QUEUE extent files are not locked.
+ */
+
+check: MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(mfp, &hp->hash_bucket, q, __mpoolfile) {
/* Skip dead files and temporary files. */
if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
continue;
- /* Skip non-matching files. */
- if (memcmp(dbmfp->fileid, R_ADDR(dbmp->reginfo,
- mfp->fileid_off), DB_FILE_ID_LEN) != 0)
- continue;
+ /*
+ * Any remaining DB_MPOOL_NOFILE databases are in-memory
+ * named databases and need only match other in-memory
+ * databases with the same name.
+ */
+ if (FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE)) {
+ if (!mfp->no_backing_file)
+ continue;
+
+ DB_ASSERT(dbenv, path != NULL);
+ if (strcmp(path, R_ADDR(dbmp->reginfo, mfp->path_off)))
+ continue;
+
+ /*
+ * We matched an in-memory file; grab the fileid if
+ * it is set in the region, but not in the dbmfp.
+ */
+ if (!F_ISSET(dbmfp, MP_FILEID_SET))
+ (void)__memp_set_fileid(dbmfp,
+ R_ADDR(dbmp->reginfo, mfp->fileid_off));
+ } else
+ if (memcmp(dbmfp->fileid, R_ADDR(dbmp->reginfo,
+ mfp->fileid_off), DB_FILE_ID_LEN) != 0)
+ continue;
/*
* If the file is being truncated, remove it from the system
@@ -276,15 +360,17 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
* loop, but I like the idea of checking all the entries.
*/
if (LF_ISSET(DB_TRUNCATE)) {
- MUTEX_LOCK(dbenv, &mfp->mutex);
+ MUTEX_LOCK(dbenv, mfp->mutex);
mfp->deadfile = 1;
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
continue;
}
/*
* Some things about a file cannot be changed: the clear length,
- * page size, or lSN location.
+ * page size, or LSN location. However, if this is an attempt
+ * to open a named in-memory file, we may not yet have that
+ * information. so accept uninitialized entries.
*
* The file type can change if the application's pre- and post-
* processing needs change. For example, an application that
@@ -295,13 +381,17 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
* We do not check to see if the pgcookie information changed,
* or update it if it is.
*/
- if (dbmfp->clear_len != mfp->clear_len ||
- pagesize != mfp->stat.st_pagesize ||
- dbmfp->lsn_offset != mfp->lsn_off) {
- __db_err(dbenv,
+ if ((dbmfp->clear_len != DB_CLEARLEN_NOTSET &&
+ mfp->clear_len != DB_CLEARLEN_NOTSET &&
+ dbmfp->clear_len != mfp->clear_len) ||
+ (pagesize != 0 && pagesize != mfp->stat.st_pagesize) ||
+ (dbmfp->lsn_offset != -1 &&
+ mfp->lsn_off != DB_LSN_OFF_NOTSET &&
+ dbmfp->lsn_offset != mfp->lsn_off)) {
+ __db_errx(dbenv,
"%s: clear length, page size or LSN location changed",
path);
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
ret = EINVAL;
goto err;
}
@@ -318,82 +408,64 @@ __memp_fopen(dbmfp, mfp, path, flags, mode, pgsize)
* 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);
+ MUTEX_LOCK(dbenv, mfp->mutex);
if (mfp->deadfile) {
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
continue;
}
++mfp->mpf_cnt;
refinc = 1;
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ /* Initialize any fields that are not yet set. */
if (dbmfp->ftype != 0)
mfp->ftype = dbmfp->ftype;
+ if (dbmfp->clear_len != DB_CLEARLEN_NOTSET)
+ mfp->clear_len = dbmfp->clear_len;
+ if (dbmfp->lsn_offset != -1)
+ mfp->lsn_off = dbmfp->lsn_offset;
break;
}
- R_UNLOCK(dbenv, dbmp->reginfo);
-
- if (mfp != NULL)
- goto have_mfp;
-
-alloc: /* Allocate and initialize a new MPOOLFILE. */
- if ((ret = __memp_alloc(
- dbmp, dbmp->reginfo, NULL, sizeof(MPOOLFILE), NULL, &mfp)) != 0)
- goto err;
- 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 = (db_pgno_t)
- (dbmfp->gbytes * (GIGABYTE / mfp->stat.st_pagesize));
- mfp->maxpgno += (db_pgno_t)
- ((dbmfp->bytes + mfp->stat.st_pagesize - 1) /
- mfp->stat.st_pagesize);
+ if (alloc_mfp != NULL && mfp == NULL) {
+ mfp = alloc_mfp;
+ alloc_mfp = NULL;
+ SH_TAILQ_INSERT_HEAD(&hp->hash_bucket, mfp, q, __mpoolfile);
}
- 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_DURABLE_UNKNOWN | DB_RDONLY))
- F_SET(mfp, MP_DURABLE_UNKNOWN);
- if (LF_ISSET(DB_DIRECT))
- F_SET(mfp, MP_DIRECT);
- if (LF_ISSET(DB_EXTENT))
- F_SET(mfp, MP_EXTENT);
- F_SET(mfp, MP_CAN_MMAP);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ if (alloc_mfp != NULL) {
+ MUTEX_LOCK(dbenv, alloc_mfp->mutex);
+ if ((ret = __memp_mf_discard(dbmp, alloc_mfp)) != 0)
+ goto err;
+ }
- if (path == NULL)
- F_SET(mfp, MP_TEMP);
- else {
+ if (mfp == NULL) {
/*
- * Don't permit files that aren't a multiple of the pagesize,
- * and find the number of the last page in the file, all the
- * time being careful not to overflow 32 bits.
- *
- * During verify or recovery, we might have to cope with a
- * truncated file; if the file size is not a multiple of the
- * page size, round down to a page, we'll take care of the
- * partial page outside the mpool system.
+ * If we didn't find the file and this is an in-memory file,
+ * then the create flag should be set.
*/
- if (bytes % pagesize != 0) {
- if (LF_ISSET(DB_ODDFILESIZE))
- bytes -= (u_int32_t)(bytes % pagesize);
- else {
- __db_err(dbenv,
- "%s: file size not a multiple of the pagesize", rpath);
- ret = EINVAL;
- goto err;
- }
+ if (FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE) &&
+ !LF_ISSET(DB_CREATE)) {
+ ret = ENOENT;
+ goto err;
}
+alloc: /*
+ * Get the file ID if we weren't given one. Generated file
+ * ID's don't use timestamps, otherwise there'd be no
+ * chance of any other process joining the party.
+ */
+ if (path != NULL &&
+ !FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE) &&
+ !F_ISSET(dbmfp, MP_FILEID_SET) && (ret =
+ __os_fileid(dbenv, rpath, 0, dbmfp->fileid)) != 0)
+ goto err;
+
+ if ((ret = __memp_mfp_alloc(dbmp,
+ dbmfp, path, pagesize, flags, &alloc_mfp)) != 0)
+ goto err;
+
/*
* If the user specifies DB_MPOOL_LAST or DB_MPOOL_NEW on a
* page get, we have to increment the last page in the file.
@@ -401,49 +473,27 @@ alloc: /* Allocate and initialize a new MPOOLFILE. */
*
* Note correction: page numbers are zero-based, not 1-based.
*/
+ DB_ASSERT(dbenv, pagesize != 0);
last_pgno = (db_pgno_t)(mbytes * (MEGABYTE / pagesize));
last_pgno += (db_pgno_t)(bytes / pagesize);
if (last_pgno != 0)
--last_pgno;
- mfp->orig_last_pgno = mfp->last_pgno = last_pgno;
- /* Copy the file path into shared memory. */
- if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
- NULL, strlen(path) + 1, &mfp->path_off, &p)) != 0)
- goto err;
- memcpy(p, path, strlen(path) + 1);
+ alloc_mfp->last_flushed_pgno = alloc_mfp->orig_last_pgno =
+ alloc_mfp->last_pgno = last_pgno;
- /* Copy the file identification string into shared memory. */
- if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
- NULL, DB_FILE_ID_LEN, &mfp->fileid_off, &p)) != 0)
- goto err;
- memcpy(p, dbmfp->fileid, DB_FILE_ID_LEN);
- }
+ alloc_mfp->bucket = bucket;
- /* Copy the page cookie into shared memory. */
- if (dbmfp->pgcookie == NULL || dbmfp->pgcookie->size == 0) {
- mfp->pgcookie_len = 0;
- mfp->pgcookie_off = 0;
- } else {
- if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
- NULL, dbmfp->pgcookie->size, &mfp->pgcookie_off, &p)) != 0)
- goto err;
- memcpy(p, dbmfp->pgcookie->data, dbmfp->pgcookie->size);
- mfp->pgcookie_len = dbmfp->pgcookie->size;
- }
-
- /*
- * Prepend the MPOOLFILE to the list of MPOOLFILE's.
- */
- R_LOCK(dbenv, dbmp->reginfo);
- ret = __db_mutex_setup(dbenv, dbmp->reginfo, &mfp->mutex,
- MUTEX_NO_RLOCK);
- if (ret == 0)
- SH_TAILQ_INSERT_HEAD(&mp->mpfq, mfp, q, __mpoolfile);
- R_UNLOCK(dbenv, dbmp->reginfo);
- if (ret != 0)
- goto err;
+ /* Go back and see if someone else has opened the file. */
+ if (path != NULL)
+ goto check;
+ mfp = alloc_mfp;
+ /* This is a temp, noone else can see it, put it at the end. */
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, mfp, q);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ }
have_mfp:
/*
* We need to verify that all handles open a file either durable or not
@@ -457,12 +507,18 @@ have_mfp:
F_CLR(mfp, MP_DURABLE_UNKNOWN);
} else if (!LF_ISSET(DB_TXN_NOT_DURABLE) !=
!F_ISSET(mfp, MP_NOT_DURABLE)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Cannot open DURABLE and NOT DURABLE handles in the same file");
ret = EINVAL;
goto err;
}
}
+
+ if (LF_ISSET(DB_MULTIVERSION)) {
+ ++mfp->multiversion;
+ F_SET(dbmfp, MP_MULTIVERSION);
+ }
+
/*
* All paths to here have initialized the mfp variable to reference
* the selected (or allocated) MPOOLFILE.
@@ -492,7 +548,10 @@ have_mfp:
*/
#define DB_MAXMMAPSIZE (10 * 1024 * 1024) /* 10 MB. */
if (F_ISSET(mfp, MP_CAN_MMAP)) {
- if (path == NULL)
+ maxmap = dbenv->mp_mmapsize == 0 ?
+ DB_MAXMMAPSIZE : dbenv->mp_mmapsize;
+ if (path == NULL ||
+ FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE))
F_CLR(mfp, MP_CAN_MMAP);
else if (!F_ISSET(dbmfp, MP_READONLY))
F_CLR(mfp, MP_CAN_MMAP);
@@ -501,10 +560,10 @@ have_mfp:
else if (LF_ISSET(DB_NOMMAP) || F_ISSET(dbenv, DB_ENV_NOMMAP))
F_CLR(mfp, MP_CAN_MMAP);
else {
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
maxmap = mp->mp_mmapsize == 0 ?
DB_MAXMMAPSIZE : mp->mp_mmapsize;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
if (mbytes > maxmap / MEGABYTE ||
(mbytes == maxmap / MEGABYTE &&
bytes >= maxmap % MEGABYTE))
@@ -529,26 +588,23 @@ have_mfp:
*
* 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;
- }
+ MUTEX_LOCK(dbenv, dbmp->mutex);
+
+ if (dbmfp->fhp != NULL)
+ TAILQ_FOREACH(tmp_dbmfp, &dbmp->dbmfq, q)
+ if (dbmfp->mfp == tmp_dbmfp->mfp &&
+ (F_ISSET(dbmfp, MP_READONLY) ||
+ !F_ISSET(tmp_dbmfp, MP_READONLY))) {
+ (void)__mutex_free(dbenv, &dbmfp->fhp->mtx_fh);
+ (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);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
if (0) {
err: if (refinc) {
@@ -558,9 +614,9 @@ err: if (refinc) {
* error trying to open the file, so we probably cannot
* unlink it anyway.
*/
- MUTEX_LOCK(dbenv, &mfp->mutex);
+ MUTEX_LOCK(dbenv, mfp->mutex);
--mfp->mpf_cnt;
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
}
}
@@ -569,6 +625,104 @@ err: if (refinc) {
return (ret);
}
+static int
+__memp_mfp_alloc(dbmp, dbmfp, path, pagesize, flags, retmfp)
+ DB_MPOOL *dbmp;
+ DB_MPOOLFILE *dbmfp;
+ const char *path;
+ u_int32_t pagesize;
+ u_int32_t flags;
+ MPOOLFILE **retmfp;
+{
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ int ret;
+ void *p;
+
+ dbenv = dbmp->dbenv;
+ ret = 0;
+ /* Allocate and initialize a new MPOOLFILE. */
+ if ((ret = __memp_alloc(dbmp,
+ dbmp->reginfo, NULL, sizeof(MPOOLFILE), NULL, &mfp)) != 0)
+ goto err;
+ 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 = (db_pgno_t)
+ (dbmfp->gbytes * (GIGABYTE / mfp->stat.st_pagesize));
+ mfp->maxpgno += (db_pgno_t)
+ ((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_DURABLE_UNKNOWN | DB_RDONLY))
+ F_SET(mfp, MP_DURABLE_UNKNOWN);
+ if (LF_ISSET(DB_DIRECT))
+ F_SET(mfp, MP_DIRECT);
+ if (LF_ISSET(DB_EXTENT))
+ F_SET(mfp, MP_EXTENT);
+ if (LF_ISSET(DB_TXN_NOT_DURABLE))
+ F_SET(mfp, MP_NOT_DURABLE);
+ F_SET(mfp, MP_CAN_MMAP);
+
+ /*
+ * An in-memory database with no name is a temp file. Named
+ * in-memory databases get an artificially bumped reference
+ * count so they don't disappear on close; they need a remove
+ * to make them disappear.
+ */
+ if (path == NULL)
+ F_SET(mfp, MP_TEMP);
+ else if (FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE))
+ mfp->mpf_cnt++;
+
+ /* Copy the file identification string into shared memory. */
+ if (F_ISSET(dbmfp, MP_FILEID_SET)) {
+ if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
+ NULL, DB_FILE_ID_LEN, &mfp->fileid_off, &p)) != 0)
+ goto err;
+ memcpy(p, dbmfp->fileid, DB_FILE_ID_LEN);
+ }
+
+ /* Copy the file path into shared memory. */
+ if (path != NULL) {
+ if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
+ NULL, strlen(path) + 1, &mfp->path_off, &p)) != 0)
+ goto err;
+ memcpy(p, path, strlen(path) + 1);
+ }
+
+ /* Copy the page cookie into shared memory. */
+ if (dbmfp->pgcookie == NULL || dbmfp->pgcookie->size == 0) {
+ mfp->pgcookie_len = 0;
+ mfp->pgcookie_off = 0;
+ } else {
+ if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
+ NULL, dbmfp->pgcookie->size,
+ &mfp->pgcookie_off, &p)) != 0)
+ goto err;
+ memcpy(p,
+ dbmfp->pgcookie->data, dbmfp->pgcookie->size);
+ mfp->pgcookie_len = dbmfp->pgcookie->size;
+ }
+
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_MPOOLFILE_HANDLE, 0, &mfp->mutex)) != 0)
+ goto err;
+ *retmfp = mfp;
+
+err: return (ret);
+}
+
/*
* memp_fclose_pp --
* DB_MPOOLFILE->close pre/post processing.
@@ -581,7 +735,8 @@ __memp_fclose_pp(dbmfp, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int rep_check, ret, t_ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbenv = dbmfp->dbenv;
@@ -591,15 +746,11 @@ __memp_fclose_pp(dbmfp, flags)
* !!!
* DB_MPOOL_DISCARD: Undocumented flag: DB private.
*/
- ret = __db_fchk(dbenv, "DB_MPOOLFILE->close", flags, DB_MPOOL_DISCARD);
+ (void)__db_fchk(dbenv, "DB_MPOOLFILE->close", flags, DB_MPOOL_DISCARD);
- 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_fclose(dbmfp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -637,9 +788,9 @@ __memp_fclose(dbmfp, flags)
if (dbmp == NULL)
goto done;
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+ MUTEX_LOCK(dbenv, dbmp->mutex);
- DB_ASSERT(dbmfp->ref >= 1);
+ DB_ASSERT(dbenv, dbmfp->ref >= 1);
if ((ref = --dbmfp->ref) == 0 && F_ISSET(dbmfp, MP_OPEN_CALLED))
TAILQ_REMOVE(&dbmp->dbmfq, dbmfp, q);
@@ -649,13 +800,13 @@ __memp_fclose(dbmfp, flags)
*/
if (ref == 0 && dbmfp->fhp != NULL && --dbmfp->fhp->ref > 0)
dbmfp->fhp = NULL;
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
if (ref != 0)
return (0);
/* Complain if pinned blocks never returned. */
if (dbmfp->pinref != 0) {
- __db_err(dbenv, "%s: close: %lu blocks left pinned",
+ __db_errx(dbenv, "%s: close: %lu blocks left pinned",
__memp_fn(dbmfp), (u_long)dbmfp->pinref);
ret = __db_panic(dbenv, DB_RUNRECOVERY);
}
@@ -663,21 +814,18 @@ __memp_fclose(dbmfp, flags)
/* Discard any mmap information. */
if (dbmfp->addr != NULL &&
(ret = __os_unmapfile(dbenv, dbmfp->addr, dbmfp->len)) != 0)
- __db_err(dbenv, "%s: %s", __memp_fn(dbmfp), db_strerror(ret));
+ __db_err(dbenv, ret, "%s", __memp_fn(dbmfp));
/*
* 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 =
+ __mutex_free(dbenv, &dbmfp->fhp->mtx_fh)) != 0 && ret == 0)
+ ret = t_ret;
if ((t_ret = __os_closehandle(dbenv, dbmfp->fhp)) != 0) {
- __db_err(dbenv, "%s: %s",
- __memp_fn(dbmfp), db_strerror(t_ret));
+ __db_err(dbenv, t_ret, "%s", __memp_fn(dbmfp));
if (ret == 0)
ret = t_ret;
}
@@ -691,7 +839,8 @@ __memp_fclose(dbmfp, flags)
* be NULL and MP_OPEN_CALLED will not be set.
*/
mfp = dbmfp->mfp;
- DB_ASSERT((F_ISSET(dbmfp, MP_OPEN_CALLED) && mfp != NULL) ||
+ DB_ASSERT(dbenv,
+ (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;
@@ -704,11 +853,14 @@ __memp_fclose(dbmfp, flags)
* when we try to flush them.
*/
deleted = 0;
- MUTEX_LOCK(dbenv, &mfp->mutex);
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (F_ISSET(dbmfp, MP_MULTIVERSION))
+ --mfp->multiversion;
if (--mfp->mpf_cnt == 0 || LF_ISSET(DB_MPOOL_DISCARD)) {
if (LF_ISSET(DB_MPOOL_DISCARD) ||
- F_ISSET(mfp, MP_TEMP) || mfp->unlink_on_close)
+ 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,
@@ -728,8 +880,8 @@ __memp_fclose(dbmfp, flags)
deleted = 1;
}
}
- if (deleted == 0)
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ if (!deleted)
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
done: /* Discard the DB_MPOOLFILE structure. */
if (dbmfp->pgcookie != NULL) {
@@ -753,12 +905,16 @@ __memp_mf_discard(dbmp, mfp)
MPOOLFILE *mfp;
{
DB_ENV *dbenv;
+ DB_MPOOL_HASH *hp;
DB_MPOOL_STAT *sp;
MPOOL *mp;
- int need_sync, ret;
+ int need_sync, ret, t_ret;
dbenv = dbmp->dbenv;
mp = dbmp->reginfo[0].primary;
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+ hp += mfp->bucket;
+ ret = 0;
/*
* Expects caller to be holding the MPOOLFILE mutex.
@@ -779,14 +935,21 @@ __memp_mf_discard(dbmp, mfp)
*/
mfp->deadfile = 1;
- /* Discard the mutex we're holding. */
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ /* Discard the mutex we're holding and return it too the pool. */
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ if ((t_ret = __mutex_free(dbenv, &mfp->mutex)) != 0 && ret == 0)
+ ret = t_ret;
- /* Lock the region and delete from the list of MPOOLFILEs. */
- R_LOCK(dbenv, dbmp->reginfo);
- SH_TAILQ_REMOVE(&mp->mpfq, mfp, q, __mpoolfile);
+ /* Lock the bucket and delete from the list of MPOOLFILEs. */
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, mfp, q, __mpoolfile);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
- ret = need_sync ? __memp_mf_sync(dbmp, mfp) : 0;
+ /* Lock the region and collect stats and free the space. */
+ MPOOL_SYSTEM_LOCK(dbenv);
+ if (need_sync &&
+ (t_ret = __memp_mf_sync(dbmp, mfp, 1)) != 0 && ret == 0)
+ ret = t_ret;
/* Copy the statistics into the region. */
sp = &mp->stat;
@@ -797,23 +960,89 @@ __memp_mf_discard(dbmp, mfp)
sp->st_page_in += mfp->stat.st_page_in;
sp->st_page_out += mfp->stat.st_page_out;
- /* Clear the mutex this MPOOLFILE recorded. */
- __db_shlocks_clear(&mfp->mutex, dbmp->reginfo,
- R_ADDR(dbmp->reginfo, mp->maint_off));
-
/* Free the space. */
if (mfp->path_off != 0)
- __db_shalloc_free(&dbmp->reginfo[0],
+ __memp_free(&dbmp->reginfo[0], NULL,
R_ADDR(dbmp->reginfo, mfp->path_off));
if (mfp->fileid_off != 0)
- __db_shalloc_free(&dbmp->reginfo[0],
+ __memp_free(&dbmp->reginfo[0], NULL,
R_ADDR(dbmp->reginfo, mfp->fileid_off));
if (mfp->pgcookie_off != 0)
- __db_shalloc_free(&dbmp->reginfo[0],
+ __memp_free(&dbmp->reginfo[0], NULL,
R_ADDR(dbmp->reginfo, mfp->pgcookie_off));
- __db_shalloc_free(&dbmp->reginfo[0], mfp);
+ __memp_free(&dbmp->reginfo[0], NULL, mfp);
+
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+
+ return (ret);
+}
- R_UNLOCK(dbenv, dbmp->reginfo);
+/*
+ * __memp_inmemlist --
+ * Return a list of the named in-memory databases.
+ *
+ * PUBLIC: int __memp_inmemlist __P((DB_ENV *, char ***, int *));
+ */
+int
+__memp_inmemlist(dbenv, namesp, cntp)
+ DB_ENV *dbenv;
+ char ***namesp;
+ int *cntp;
+{
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ MPOOL *mp;
+ MPOOLFILE *mfp;
+ int arraysz, cnt, i, ret;
+ char **names;
+
+ names = NULL;
+ dbmp = dbenv->mp_handle;
+ mp = dbmp->reginfo[0].primary;
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+
+ arraysz = cnt = 0;
+ for (i = 0; i < MPOOL_FILE_BUCKETS; i++, hp++) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(mfp, &hp->hash_bucket, q, __mpoolfile) {
+ /* Skip dead files and temporary files. */
+ if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
+ continue;
+
+ /* Skip entries that allow files. */
+ if (!mfp->no_backing_file)
+ continue;
+
+ /* We found one. */
+ if (cnt >= arraysz) {
+ arraysz += 100;
+ if ((ret = __os_realloc(dbenv,
+ (u_int)arraysz * sizeof(names[0]),
+ &names)) != 0)
+ goto nomem;
+ }
+ if ((ret = __os_strdup(dbenv,
+ R_ADDR(dbmp->reginfo, mfp->path_off),
+ &names[cnt])) != 0)
+ goto nomem;
+
+ cnt++;
+ }
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ }
+ *namesp = names;
+ *cntp = cnt;
+ return (0);
+
+nomem: MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ if (names != NULL) {
+ while (--cnt >= 0)
+ __os_free(dbenv, names[cnt]);
+ __os_free(dbenv, names);
+ }
+ /* Make sure we don't return any garbage. */
+ *cntp = 0;
+ *namesp = NULL;
return (ret);
}
diff --git a/db/mp/mp_fput.c b/db/mp/mp_fput.c
index a21eb6733..124d2e1da 100644
--- a/db/mp/mp_fput.c
+++ b/db/mp/mp_fput.c
@@ -1,25 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_fput.c,v 11.59 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_fput.c,v 12.22 2006/09/07 20:05:33 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
-static void __memp_reset_lru __P((DB_ENV *, REGINFO *));
+static int __memp_reset_lru __P((DB_ENV *, REGINFO *));
/*
* __memp_fput_pp --
@@ -34,14 +28,20 @@ __memp_fput_pp(dbmfp, pgaddr, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int ret;
+ DB_THREAD_INFO *ip;
+ int ret, t_ret;
dbenv = dbmfp->dbenv;
PANIC_CHECK(dbenv);
+ ENV_ENTER(dbenv, ip);
+
ret = __memp_fput(dbmfp, pgaddr, flags);
- if (IS_ENV_REPLICATED(dbenv))
- __op_rep_exit(dbenv);
+ if (IS_ENV_REPLICATED(dbenv) &&
+ (t_ret = __op_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -57,33 +57,35 @@ __memp_fput(dbmfp, pgaddr, flags)
void *pgaddr;
u_int32_t flags;
{
- BH *fbhp, *bhp, *prev;
DB_ENV *dbenv;
DB_MPOOL *dbmp;
DB_MPOOL_HASH *hp;
MPOOL *c_mp;
MPOOLFILE *mfp;
+ BH *bhp;
u_int32_t n_cache;
- int adjust, ret;
+ int adjust, ret, t_ret;
dbenv = dbmfp->dbenv;
MPF_ILLEGAL_BEFORE_OPEN(dbmfp, "DB_MPOOLFILE->put");
-
dbmp = dbenv->mp_handle;
- /* Validate arguments. */
+ mfp = dbmfp->mfp;
+ bhp = (BH *)((u_int8_t *)pgaddr - SSZA(BH, buf));
+ ret = 0;
+
+ /*
+ * Check arguments, but don't fail because we want to unpin the page
+ * regardless. The problem is when running with replication. There
+ * is a reference count we incremented when __memp_fget was called,
+ * and we need to unpin the page and decrement that reference count.
+ * If we see flag problems, mark the page dirty.
+ */
if (flags) {
- if ((ret = __db_fchk(dbenv, "memp_fput", flags,
- DB_MPOOL_CLEAN | DB_MPOOL_DIRTY | DB_MPOOL_DISCARD)) != 0)
- return (ret);
- if ((ret = __db_fcchk(dbenv, "memp_fput",
- flags, DB_MPOOL_CLEAN, DB_MPOOL_DIRTY)) != 0)
- return (ret);
-
- if (LF_ISSET(DB_MPOOL_DIRTY) && F_ISSET(dbmfp, MP_READONLY)) {
- __db_err(dbenv,
- "%s: dirty flag set for readonly file page",
- __memp_fn(dbmfp));
- return (EACCES);
+ if (__db_fchk(dbenv, "memp_fput", flags,
+ DB_MPOOL_DISCARD) != 0) {
+ flags = 0;
+ ret = EINVAL;
+ DB_ASSERT(dbenv, 0);
}
}
@@ -98,46 +100,29 @@ __memp_fput(dbmfp, pgaddr, flags)
return (0);
#ifdef DIAGNOSTIC
- {
/*
* Decrement the per-file pinned buffer count (mapped pages aren't
* counted).
*/
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
if (dbmfp->pinref == 0) {
- __db_err(dbenv,
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+ __db_errx(dbenv,
"%s: more pages returned than retrieved", __memp_fn(dbmfp));
- ret = __db_panic(dbenv, EINVAL);
- } else {
- ret = 0;
- --dbmfp->pinref;
- }
- R_UNLOCK(dbenv, dbmp->reginfo);
- if (ret != 0)
- return (ret);
+ return (__db_panic(dbenv, EACCES));
}
+ --dbmfp->pinref;
+ MPOOL_SYSTEM_UNLOCK(dbenv);
#endif
/* 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)];
- MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
- /* 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)) {
- ++hp->hash_page_dirty;
- F_SET(bhp, BH_DIRTY);
- }
if (LF_ISSET(DB_MPOOL_DISCARD))
F_SET(bhp, BH_DISCARD);
@@ -146,10 +131,11 @@ __memp_fput(dbmfp, pgaddr, flags)
* application returns a page twice.
*/
if (bhp->ref == 0) {
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
- __db_err(dbenv, "%s: page %lu: unpinned page returned",
+ __db_errx(dbenv, "%s: page %lu: unpinned page returned",
__memp_fn(dbmfp), (u_long)bhp->pgno);
- return (__db_panic(dbenv, EINVAL));
+ DB_ASSERT(dbenv, bhp->ref != 0);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ return (__db_panic(dbenv, EACCES));
}
/* Note the activity so allocation won't decide to quit. */
@@ -160,8 +146,7 @@ __memp_fput(dbmfp, pgaddr, flags)
* as the dirty flag because the buffer might have been marked dirty
* in the DB_MPOOLFILE->set method.
*/
- mfp = dbmfp->mfp;
- if (LF_ISSET(DB_MPOOL_DIRTY) || F_ISSET(bhp, BH_DIRTY))
+ if (F_ISSET(bhp, BH_DIRTY))
mfp->file_written = 1;
/*
@@ -170,10 +155,13 @@ __memp_fput(dbmfp, pgaddr, flags)
* discard flags (for now) and leave the buffer's priority alone.
*/
if (--bhp->ref > 1 || (bhp->ref == 1 && !F_ISSET(bhp, BH_LOCKED))) {
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
return (0);
}
+ /* The buffer should not be accessed again. */
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize, 0);
+
/* Update priority values. */
if (F_ISSET(bhp, BH_DISCARD) || mfp->priority == MPOOL_PRI_VERY_LOW)
bhp->priority = 0;
@@ -187,10 +175,10 @@ __memp_fput(dbmfp, pgaddr, flags)
adjust = 0;
if (mfp->priority != 0)
- adjust =
- (int)c_mp->stat.st_pages / mfp->priority;
+ adjust = (int)c_mp->stat.st_pages / mfp->priority;
+
if (F_ISSET(bhp, BH_DIRTY))
- adjust += c_mp->stat.st_pages / MPOOL_PRI_DIRTY;
+ adjust += (int)c_mp->stat.st_pages / MPOOL_PRI_DIRTY;
if (adjust > 0) {
if (UINT32_MAX - bhp->priority >= (u_int32_t)adjust)
@@ -200,34 +188,13 @@ __memp_fput(dbmfp, pgaddr, flags)
bhp->priority += adjust;
}
- /*
- * Buffers on hash buckets are sorted by priority -- move the buffer
- * to the correct position in the list.
- */
- 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);
+ if (SH_TAILQ_FIRST(&hp->hash_bucket, __bh) ==
+ SH_TAILQ_LAST(&hp->hash_bucket, hq, __bh))
+ hp->hash_priority = BH_PRIORITY(bhp);
else
- 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;
-
+ __memp_bucket_reorder(dbenv, hp, bhp);
#ifdef DIAGNOSTIC
- __memp_check_order(hp);
+ __memp_check_order(dbenv, hp);
#endif
/*
@@ -241,28 +208,30 @@ done:
if (F_ISSET(bhp, BH_LOCKED) && bhp->ref_sync != 0)
--bhp->ref_sync;
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
/*
* On every buffer put we update the buffer generation number and check
* for wraparound.
*/
if (++c_mp->lru_count == UINT32_MAX)
- __memp_reset_lru(dbenv, dbmp->reginfo);
+ if ((t_ret =
+ __memp_reset_lru(dbenv, dbmp->reginfo)) != 0 && ret == 0)
+ ret = t_ret;
- return (0);
+ return (ret);
}
/*
* __memp_reset_lru --
* Reset the cache LRU counter.
*/
-static void
+static int
__memp_reset_lru(dbenv, infop)
DB_ENV *dbenv;
REGINFO *infop;
{
- BH *bhp;
+ BH *bhp, *tbhp;
DB_MPOOL_HASH *hp;
MPOOL *c_mp;
u_int32_t bucket;
@@ -287,12 +256,16 @@ __memp_reset_lru(dbenv, infop)
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_MAX &&
- bhp->priority > MPOOL_BASE_DECREMENT)
- bhp->priority -= MPOOL_BASE_DECREMENT;
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(bhp, &hp->hash_bucket, hq, __bh)
+ for (tbhp = bhp; tbhp != NULL;
+ tbhp = SH_CHAIN_PREV(tbhp, vc, __bh)) {
+ if (tbhp->priority != UINT32_MAX &&
+ tbhp->priority > MPOOL_BASE_DECREMENT)
+ tbhp->priority -= MPOOL_BASE_DECREMENT;
+ }
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
}
+
+ return (0);
}
diff --git a/db/mp/mp_fset.c b/db/mp/mp_fset.c
index 0d29c41df..e3fd2f4df 100644
--- a/db/mp/mp_fset.c
+++ b/db/mp/mp_fset.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_fset.c,v 11.34 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_fset.c,v 12.16 2006/09/13 14:53:42 mjc Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
/*
* __memp_fset_pp --
@@ -32,7 +27,8 @@ __memp_fset_pp(dbmfp, pgaddr, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbenv = dbmfp->dbenv;
@@ -43,25 +39,12 @@ __memp_fset_pp(dbmfp, pgaddr, flags)
if (flags == 0)
return (__db_ferr(dbenv, "memp_fset", 1));
- if ((ret = __db_fchk(dbenv, "memp_fset", flags,
- 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)
+ if ((ret = __db_fchk(dbenv, "memp_fset", flags, DB_MPOOL_DISCARD)) != 0)
return (ret);
- if (LF_ISSET(DB_MPOOL_DIRTY) && F_ISSET(dbmfp, MP_READONLY)) {
- __db_err(dbenv, "%s: dirty flag set for readonly file page",
- __memp_fn(dbmfp));
- return (EACCES);
- }
-
- 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_fset(dbmfp, pgaddr, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -87,6 +70,8 @@ __memp_fset(dbmfp, pgaddr, flags)
dbenv = dbmfp->dbenv;
dbmp = dbenv->mp_handle;
+ DB_ASSERT(dbenv, !LF_ISSET(DB_MPOOL_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);
@@ -94,22 +79,112 @@ __memp_fset(dbmfp, pgaddr, flags)
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);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
- /* 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_DISCARD))
+ F_SET(bhp, BH_DISCARD);
+
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ return (0);
+}
+
+/*
+ * __memp_dirty --
+ * Upgrade a page from a read-only to a writeable pointer.
+ *
+ * PUBLIC: int __memp_dirty __P((DB_MPOOLFILE *, void *, DB_TXN *, u_int32_t));
+ */
+int
+__memp_dirty(dbmfp, addrp, txn, flags)
+ DB_MPOOLFILE *dbmfp;
+ void *addrp;
+ DB_TXN *txn;
+ u_int32_t flags;
+{
+ BH *bhp;
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ DB_TXN *ancestor;
+#ifdef DIAG_MVCC
+ MPOOLFILE *mfp;
+#endif
+ MPOOL *c_mp;
+ u_int32_t n_cache;
+ int ret;
+ db_pgno_t pgno;
+ void *pgaddr;
+
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+ pgaddr = *(void **)addrp;
+
+ /* Convert the page address to a buffer header. */
+ bhp = (BH *)((u_int8_t *)pgaddr - SSZA(BH, buf));
+ pgno = bhp->pgno;
+
+ if (flags == 0)
+ flags = DB_MPOOL_DIRTY;
+ DB_ASSERT(dbenv, flags == DB_MPOOL_DIRTY || flags == DB_MPOOL_EDIT);
+
+ if (F_ISSET(dbmfp, MP_READONLY)) {
+ __db_errx(dbenv, "%s: dirty flag set for readonly file page",
+ __memp_fn(dbmfp));
+ return (EACCES);
+ }
+
+ for (ancestor = txn;
+ ancestor != NULL && ancestor->parent != NULL;
+ ancestor = ancestor->parent)
+ ;
+
+ if (dbmfp->mfp->multiversion &&
+ txn != NULL && !BH_OWNED_BY(dbenv, bhp, ancestor)) {
+ if ((ret = __memp_fget(dbmfp,
+ &pgno, txn, flags, addrp)) != 0) {
+ if (ret != DB_LOCK_DEADLOCK)
+ __db_errx(dbenv,
+ "%s: error getting a page for writing",
+ __memp_fn(dbmfp));
+ *(void **)addrp = pgaddr;
+ return (ret);
+ }
+
+ DB_ASSERT(dbenv,
+ (flags == DB_MPOOL_EDIT && *(void **)addrp == pgaddr) ||
+ (flags != DB_MPOOL_EDIT && *(void **)addrp != pgaddr));
+
+ if ((ret = __memp_fput(dbmfp, pgaddr, 0)) != 0) {
+ __db_errx(dbenv,
+ "%s: error releasing a read-only page",
+ __memp_fn(dbmfp));
+ (void)__memp_fput(dbmfp, *(void **)addrp, 0);
+ *(void **)addrp = NULL;
+ return (ret);
+ }
+ pgaddr = *(void **)addrp;
+ bhp = (BH *)((u_int8_t *)pgaddr - SSZA(BH, buf));
+ DB_ASSERT(dbenv, pgno == bhp->pgno);
+ return (0);
}
- if (LF_ISSET(DB_MPOOL_DIRTY) && !F_ISSET(bhp, BH_DIRTY)) {
+
+ 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->mtx_hash);
+ /* Set/clear the page bits. */
+ if (!F_ISSET(bhp, BH_DIRTY)) {
++hp->hash_page_dirty;
F_SET(bhp, BH_DIRTY);
}
- if (LF_ISSET(DB_MPOOL_DISCARD))
- F_SET(bhp, BH_DISCARD);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+#ifdef DIAG_MVCC
+ mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
+ MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize, PROT_READ | PROT_WRITE);
+#endif
return (0);
}
diff --git a/db/mp/mp_method.c b/db/mp/mp_method.c
index b149bfc13..14c144974 100644
--- a/db/mp/mp_method.c
+++ b/db/mp/mp_method.c
@@ -1,47 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_method.c,v 11.58 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_method.c,v 12.36 2006/09/15 18:54:13 margo Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/mp.h"
-
-#ifdef HAVE_RPC
-#include "dbinc_auto/rpc_client_ext.h"
-#endif
-
-static int __memp_get_mp_max_openfd __P((DB_ENV *, int *));
-static int __memp_get_mp_max_write __P((DB_ENV *, int *, int *));
-static int __memp_get_mp_mmapsize __P((DB_ENV *, size_t *));
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
/*
* __memp_dbenv_create --
* Mpool specific creation of the DB_ENV structure.
*
- * PUBLIC: void __memp_dbenv_create __P((DB_ENV *));
+ * PUBLIC: int __memp_dbenv_create __P((DB_ENV *));
*/
-void
+int
__memp_dbenv_create(dbenv)
DB_ENV *dbenv;
{
@@ -62,39 +41,20 @@ __memp_dbenv_create(dbenv)
32 * ((8 * 1024) + sizeof(BH)) + 37 * sizeof(DB_MPOOL_HASH);
dbenv->mp_ncache = 1;
-#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_max_openfd = __dbcl_get_mp_max_openfd;
- dbenv->set_mp_max_openfd = __dbcl_set_mp_max_openfd;
- dbenv->get_mp_max_write = __dbcl_get_mp_max_write;
- dbenv->set_mp_max_write = __dbcl_set_mp_max_write;
- dbenv->get_mp_mmapsize = __dbcl_get_mp_mmapsize;
- dbenv->set_mp_mmapsize = __dbcl_set_mp_mmapsize;
- dbenv->memp_register = __dbcl_memp_register;
- dbenv->memp_stat = __dbcl_memp_stat;
- dbenv->memp_stat_print = NULL;
- 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_max_openfd = __memp_get_mp_max_openfd;
- dbenv->set_mp_max_openfd = __memp_set_mp_max_openfd;
- dbenv->get_mp_max_write = __memp_get_mp_max_write;
- dbenv->set_mp_max_write = __memp_set_mp_max_write;
- dbenv->get_mp_mmapsize = __memp_get_mp_mmapsize;
- dbenv->set_mp_mmapsize = __memp_set_mp_mmapsize;
- dbenv->memp_register = __memp_register_pp;
- dbenv->memp_stat = __memp_stat_pp;
- dbenv->memp_stat_print = __memp_stat_print_pp;
- dbenv->memp_sync = __memp_sync_pp;
- dbenv->memp_trickle = __memp_trickle_pp;
- }
- dbenv->memp_fcreate = __memp_fcreate_pp;
+ return (0);
+}
+
+/*
+ * __memp_dbenv_destroy --
+ * Mpool specific destruction of the DB_ENV structure.
+ *
+ * PUBLIC: void __memp_dbenv_destroy __P((DB_ENV *));
+ */
+void
+__memp_dbenv_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
}
/*
@@ -117,7 +77,7 @@ __memp_get_cachesize(dbenv, gbytesp, bytesp, ncachep)
if (MPOOL_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
- mp = ((DB_MPOOL *)dbenv->mp_handle)->reginfo[0].primary;
+ mp = dbenv->mp_handle->reginfo[0].primary;
if (gbytesp != NULL)
*gbytesp = mp->stat.st_gbytes;
if (bytesp != NULL)
@@ -158,7 +118,7 @@ __memp_set_cachesize(dbenv, gbytes, bytes, arg_ncache)
* 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) {
+ if (sizeof(roff_t) == 4 && gbytes / ncache == 4 && bytes == 0) {
--gbytes;
bytes = GIGABYTE - 1;
} else {
@@ -166,11 +126,25 @@ __memp_set_cachesize(dbenv, gbytes, bytes, arg_ncache)
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);
- }
+ /*
+ * !!!
+ * With 32-bit region offsets, individual cache regions must be smaller
+ * than 4GB. Also, cache sizes larger than 10TB would cause 32-bit
+ * wrapping in the calculation of the number of hash buckets. See
+ * __memp_open for details.
+ */
+ if (sizeof(roff_t) <= 4) {
+ if (gbytes / ncache >= 4) {
+ __db_errx(dbenv,
+ "individual cache size too large: maximum is 4GB");
+ return (EINVAL);
+ }
+ } else
+ if (gbytes / ncache > 10000) {
+ __db_errx(dbenv,
+ "individual cache size too large: maximum is 10TB");
+ return (EINVAL);
+ }
/*
* If the application requested less than 500Mb, increase the cachesize
@@ -197,7 +171,10 @@ __memp_set_cachesize(dbenv, gbytes, bytes, arg_ncache)
return (0);
}
-static int
+/*
+ * PUBLIC: int __memp_get_mp_max_openfd __P((DB_ENV *, int *));
+ */
+int
__memp_get_mp_max_openfd(dbenv, maxopenfdp)
DB_ENV *dbenv;
int *maxopenfdp;
@@ -211,9 +188,9 @@ __memp_get_mp_max_openfd(dbenv, maxopenfdp)
if (MPOOL_ON(dbenv)) {
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
*maxopenfdp = mp->mp_maxopenfd;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
} else
*maxopenfdp = dbenv->mp_maxopenfd;
return (0);
@@ -238,15 +215,18 @@ __memp_set_mp_max_openfd(dbenv, maxopenfd)
if (MPOOL_ON(dbenv)) {
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
mp->mp_maxopenfd = maxopenfd;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
} else
dbenv->mp_maxopenfd = maxopenfd;
return (0);
}
-static int
+/*
+ * PUBLIC: int __memp_get_mp_max_write __P((DB_ENV *, int *, int *));
+ */
+int
__memp_get_mp_max_write(dbenv, maxwritep, maxwrite_sleepp)
DB_ENV *dbenv;
int *maxwritep, *maxwrite_sleepp;
@@ -255,15 +235,15 @@ __memp_get_mp_max_write(dbenv, maxwritep, maxwrite_sleepp)
MPOOL *mp;
ENV_NOT_CONFIGURED(dbenv,
- dbenv->mp_handle, "DB_ENV->get_mp_max_openfd", DB_INIT_MPOOL);
+ dbenv->mp_handle, "DB_ENV->get_mp_max_write", DB_INIT_MPOOL);
if (MPOOL_ON(dbenv)) {
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
*maxwritep = mp->mp_maxwrite;
*maxwrite_sleepp = mp->mp_maxwrite_sleep;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
} else {
*maxwritep = dbenv->mp_maxwrite;
*maxwrite_sleepp = dbenv->mp_maxwrite_sleep;
@@ -286,15 +266,15 @@ __memp_set_mp_max_write(dbenv, maxwrite, maxwrite_sleep)
MPOOL *mp;
ENV_NOT_CONFIGURED(dbenv,
- dbenv->mp_handle, "DB_ENV->get_mp_max_openfd", DB_INIT_MPOOL);
+ dbenv->mp_handle, "DB_ENV->get_mp_max_write", DB_INIT_MPOOL);
if (MPOOL_ON(dbenv)) {
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
mp->mp_maxwrite = maxwrite;
mp->mp_maxwrite_sleep = maxwrite_sleep;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
} else {
dbenv->mp_maxwrite = maxwrite;
dbenv->mp_maxwrite_sleep = maxwrite_sleep;
@@ -302,7 +282,10 @@ __memp_set_mp_max_write(dbenv, maxwrite, maxwrite_sleep)
return (0);
}
-static int
+/*
+ * PUBLIC: int __memp_get_mp_mmapsize __P((DB_ENV *, size_t *));
+ */
+int
__memp_get_mp_mmapsize(dbenv, mp_mmapsizep)
DB_ENV *dbenv;
size_t *mp_mmapsizep;
@@ -316,9 +299,9 @@ __memp_get_mp_mmapsize(dbenv, mp_mmapsizep)
if (MPOOL_ON(dbenv)) {
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
*mp_mmapsizep = mp->mp_mmapsize;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
} else
*mp_mmapsizep = dbenv->mp_mmapsize;
return (0);
@@ -344,9 +327,9 @@ __memp_set_mp_mmapsize(dbenv, mp_mmapsize)
if (MPOOL_ON(dbenv)) {
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
mp->mp_mmapsize = mp_mmapsize;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
} else
dbenv->mp_mmapsize = mp_mmapsize;
return (0);
@@ -357,37 +340,45 @@ __memp_set_mp_mmapsize(dbenv, mp_mmapsize)
* 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 *));
+ * PUBLIC: u_int8_t *, const char *, const char *, const char *, int));
*
* XXX
* Undocumented interface: DB private.
*/
int
-__memp_nameop(dbenv, fileid, newname, fullold, fullnew)
+__memp_nameop(dbenv, fileid, newname, fullold, fullnew, inmem)
DB_ENV *dbenv;
u_int8_t *fileid;
const char *newname, *fullold, *fullnew;
+ int inmem;
{
DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp, *nhp;
MPOOL *mp;
MPOOLFILE *mfp;
roff_t newname_off;
+ u_int32_t bucket;
int locked, ret;
+ size_t nlen;
void *p;
- /* We get passed either a two names, or two NULLs. */
- DB_ASSERT(
- (newname == NULL && fullnew == NULL) ||
- (newname != NULL && fullnew != NULL));
+#undef op_is_remove
+#define op_is_remove (newname == NULL)
+
+ COMPQUIET(bucket, 0);
- locked = 0;
dbmp = NULL;
+ mfp = NULL;
+ p = NULL;
+ locked = ret = 0;
if (!MPOOL_ON(dbenv))
goto fsop;
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+ nhp = NULL;
/*
* Remove or rename a file that the mpool might know about. We assume
@@ -397,174 +388,367 @@ __memp_nameop(dbenv, fileid, newname, fullold, fullnew)
* 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.
+ * grab the region lock. If this is a memory file
+ * then on a rename, we need to make sure that the new name does
+ * not exist.
*/
- if (newname == NULL) {
- p = NULL;
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+ if (op_is_remove) {
COMPQUIET(newname_off, INVALID_ROFF);
} else {
+ nlen = strlen(newname);
if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
- NULL, strlen(newname) + 1, &newname_off, &p)) != 0)
+ NULL, nlen + 1, &newname_off, &p)) != 0)
return (ret);
- memcpy(p, newname, strlen(newname) + 1);
+ memcpy(p, newname, nlen + 1);
+ MPOOL_SYSTEM_LOCK(dbenv);
+ locked = 1;
+ if (inmem) {
+ bucket = FNBUCKET(newname, nlen);
+ nhp = hp + bucket;
+ MUTEX_LOCK(dbenv, nhp->mtx_hash);
+ SH_TAILQ_FOREACH(mfp, &nhp->hash_bucket, q, __mpoolfile)
+ if (!mfp->deadfile &&
+ mfp->no_backing_file && strcmp(newname,
+ R_ADDR(dbmp->reginfo, mfp->path_off)) == 0)
+ break;
+ MUTEX_UNLOCK(dbenv, nhp->mtx_hash);
+ if (mfp != NULL) {
+ ret = EEXIST;
+ goto err;
+ }
+ }
}
+ if (locked == 0)
+ MPOOL_SYSTEM_LOCK(dbenv);
locked = 1;
- R_LOCK(dbenv, dbmp->reginfo);
+
+ if (inmem) {
+ DB_ASSERT(dbenv, fullold != NULL);
+ hp += FNBUCKET(fullold, strlen(fullold));
+ } else
+ hp += FNBUCKET(fileid, DB_FILE_ID_LEN);
/*
- * Find the file -- if mpool doesn't know about this file, that's not
- * an error -- we may not have it open.
+ * Find the file -- if mpool doesn't know about this file, that may
+ * not be an error -- if the file is not a memory-only file and it
*/
- for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
- mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(mfp, &hp->hash_bucket, q, __mpoolfile) {
/* Ignore non-active files. */
if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
continue;
- /* Ignore non-matching files. */
+ /* Try to match on fileid. */
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);
+ break;
+ }
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ if (mfp == NULL)
+ goto fsop;
+
+ if (op_is_remove) {
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ /*
+ * In-memory dbs have an artificially incremented
+ * ref count so that they do not ever get reclaimed
+ * as long as they exist. Since we are now deleting
+ * the database, we need to dec that count.
+ */
+ if (mfp->no_backing_file)
+ mfp->mpf_cnt--;
+ 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;
+
+ /* If its in memory we need to move it the right bucket. */
+ if (inmem) {
+ DB_ASSERT(dbenv, nhp != NULL);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, mfp, q, __mpoolfile);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ mfp->bucket = bucket;
+ MUTEX_LOCK(dbenv, nhp->mtx_hash);
+ SH_TAILQ_INSERT_TAIL(&nhp->hash_bucket, mfp, q);
+ MUTEX_UNLOCK(dbenv, nhp->mtx_hash);
+ }
+ }
+
+fsop: if (mfp == NULL && inmem) {
+ ret = ENOENT;
+ goto err;
+ }
+
+ /*
+ * If this is a real file, then mfp could be NULL, because
+ * mpool isn't turned on, and we still need to do the file ops.
+ */
+ if (mfp == NULL || !mfp->no_backing_file) {
+ if (op_is_remove) {
+ /*
+ * !!!
+ * Replication may ask us to unlink a file that's been
+ * renamed. Don't complain if it doesn't exist.
+ */
+ if ((ret = __os_unlink(dbenv, fullold)) == ENOENT)
+ ret = 0;
} else {
/*
- * Else, it's a rename. We've allocated memory
- * for the new name. Swap it with the old one.
+ * Defensive only, fullname should never be
+ * NULL.
*/
- p = R_ADDR(dbmp->reginfo, mfp->path_off);
- mfp->path_off = newname_off;
+ DB_ASSERT(dbenv, fullnew != NULL);
+ if (fullnew == NULL)
+ return (EINVAL);
+ ret = __os_rename(dbenv, fullold, fullnew, 1);
}
- break;
}
/* Delete the memory we no longer need. */
- if (p != NULL)
- __db_shalloc_free(&dbmp->reginfo[0], p);
+err: if (p != NULL)
+ __memp_free(&dbmp->reginfo[0], NULL, p);
-fsop: if (newname == NULL) {
- /*
- * !!!
- * Replication may ask us to unlink a file that's been
- * renamed. Don't complain if it doesn't exist.
- */
- if ((ret = __os_unlink(dbenv, fullold)) == ENOENT)
- ret = 0;
- } else {
- /* Defensive only, fullname should never be NULL. */
- DB_ASSERT(fullnew != NULL);
- if (fullnew == NULL)
- return (EINVAL);
+ if (locked == 1)
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+ return (ret);
+}
+
+#ifdef HAVE_FTRUNCATE
+/*
+ * __memp_ftruncate __
+ * Truncate the file.
+ *
+ * PUBLIC: int __memp_ftruncate __P((DB_MPOOLFILE *, db_pgno_t, u_int32_t));
+ */
+int
+__memp_ftruncate(dbmfp, pgno, flags)
+ DB_MPOOLFILE *dbmfp;
+ db_pgno_t pgno;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ void *pagep;
+ db_pgno_t last_pgno, pg;
+ int ret;
+
+ dbenv = dbmfp->dbenv;
+ mfp = dbmfp->mfp;
+
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ last_pgno = mfp->last_pgno;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
- ret = __os_rename(dbenv, fullold, fullnew, 1);
+ if (pgno > last_pgno) {
+ if (LF_ISSET(MP_TRUNC_RECOVER))
+ return (0);
+ __db_errx(dbenv, "Truncate beyond the end of file");
+ return (EINVAL);
}
- if (locked)
- R_UNLOCK(dbenv, dbmp->reginfo);
+ pg = pgno;
+ do {
+ if ((ret =
+ __memp_fget(dbmfp, &pg, NULL, DB_MPOOL_FREE, &pagep)) != 0)
+ return (ret);
+ } while (pg++ < last_pgno);
+
+ /*
+ * If we are aborting an extend of a file, the call to __os_truncate
+ * could extend the file if the new page(s) had not yet been
+ * written to disk. We do not want to extend the file to pages
+ * whose log records are not yet flushed [#14031]. In addition if
+ * we are out of disk space we can generate an error [#12743].
+ */
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (!F_ISSET(mfp, MP_TEMP) &&
+ !mfp->no_backing_file && pgno <= mfp->last_flushed_pgno)
+ ret = __os_truncate(dbenv,
+ dbmfp->fhp, pgno, mfp->stat.st_pagesize);
+
+ /*
+ * This set could race with another thread of control that extending
+ * the file. It's not a problem because we should have the page
+ * locked at a higher level of the system.
+ */
+ if (ret == 0) {
+ mfp->last_pgno = pgno - 1;
+ if (mfp->last_flushed_pgno > mfp->last_pgno)
+ mfp->last_flushed_pgno = mfp->last_pgno;
+ }
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
return (ret);
}
/*
- * __memp_get_refcnt
- * Return a reference count, given a fileid.
+ * Support routines for maintaining a sorted freelist
+ * while we try to rearrange and truncate the file.
+ */
+
+/*
+ * __memp_alloc_freelist -- allocate mpool space for the freelist.
*
- * PUBLIC: int __memp_get_refcnt __P((DB_ENV *, u_int8_t *, u_int32_t *));
+ * PUBLIC: int __memp_alloc_freelist __P((DB_MPOOLFILE *,
+ * PUBLIC: u_int32_t, db_pgno_t **));
*/
int
-__memp_get_refcnt(dbenv, fileid, refp)
+__memp_alloc_freelist(dbmfp, nelems, listp)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t nelems;
+ db_pgno_t **listp;
+{
DB_ENV *dbenv;
- u_int8_t *fileid;
- u_int32_t *refp;
+ DB_MPOOL *dbmp;
+ MPOOLFILE *mfp;
+ void *retp;
+ int ret;
+
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+ mfp = dbmfp->mfp;
+
+ *listp = NULL;
+
+ /*
+ * These fields are protected because the database layer
+ * has the metapage locked while manipulating them.
+ */
+ mfp->free_ref++;
+ if (mfp->free_size != 0)
+ return (EBUSY);
+
+ /* Allocate at least a few slots. */
+ mfp->free_cnt = nelems;
+ if (nelems == 0)
+ nelems = 50;
+
+ if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
+ NULL, nelems * sizeof(db_pgno_t), &mfp->free_list, &retp)) != 0)
+ return (ret);
+
+ mfp->free_size = nelems * sizeof(db_pgno_t);
+ *listp = retp;
+ return (0);
+}
+
+/*
+ * __memp_free_freelist -- free the list.
+ *
+ * PUBLIC: int __memp_free_freelist __P((DB_MPOOLFILE *));
+ */
+int
+__memp_free_freelist(dbmfp)
+ DB_MPOOLFILE *dbmfp;
{
+ DB_ENV *dbenv;
DB_MPOOL *dbmp;
- MPOOL *mp;
MPOOLFILE *mfp;
- *refp = 0;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+ mfp = dbmfp->mfp;
- if (!MPOOL_ON(dbenv))
+ DB_ASSERT(dbenv, mfp->free_ref > 0);
+ if (--mfp->free_ref > 0)
return (0);
- dbmp = dbenv->mp_handle;
- mp = dbmp->reginfo[0].primary;
+ DB_ASSERT(dbenv, mfp->free_size != 0);
- 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)) {
+ MPOOL_SYSTEM_LOCK(dbenv);
+ __memp_free(dbmp->reginfo, NULL, R_ADDR(dbmp->reginfo, mfp->free_list));
+ MPOOL_SYSTEM_UNLOCK(dbenv);
- /* Ignore non-active files. */
- if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
- continue;
+ mfp->free_cnt = 0;
+ mfp->free_list = 0;
+ mfp->free_size = 0;
+ return (0);
+}
- /* Ignore non-matching files. */
- if (memcmp(fileid, R_ADDR(
- dbmp->reginfo, mfp->fileid_off), DB_FILE_ID_LEN) != 0)
- continue;
+/*
+ * __memp_get_freelst -- return current list.
+ *
+ * PUBLIC: int __memp_get_freelist __P((
+ * PUBLIC: DB_MPOOLFILE *, u_int32_t *, db_pgno_t **));
+ */
+int
+__memp_get_freelist(dbmfp, nelemp, listp)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t *nelemp;
+ db_pgno_t **listp;
+{
+ MPOOLFILE *mfp;
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
- *refp = mfp->mpf_cnt;
- break;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+ mfp = dbmfp->mfp;
+
+ if (mfp->free_size == 0) {
+ *nelemp = 0;
+ *listp = NULL;
+ } else {
+ *nelemp = mfp->free_cnt;
+ *listp = R_ADDR(dbmp->reginfo, mfp->free_list);
}
- R_UNLOCK(dbenv, dbmp->reginfo);
return (0);
}
/*
- * __memp_ftruncate __
- * Truncate the file.
+ * __memp_extend_freelist -- extend the list.
*
- * PUBLIC: int __memp_ftruncate __P((DB_MPOOLFILE *, db_pgno_t, u_int32_t));
+ * PUBLIC: int __memp_extend_freelist __P((
+ * PUBLIC: DB_MPOOLFILE *, u_int32_t , db_pgno_t **));
*/
int
-__memp_ftruncate(dbmfp, pgno, flags)
+__memp_extend_freelist(dbmfp, count, listp)
DB_MPOOLFILE *dbmfp;
- db_pgno_t pgno;
- u_int32_t flags;
+ u_int32_t count;
+ db_pgno_t **listp;
{
DB_ENV *dbenv;
DB_MPOOL *dbmp;
- void *pagep;
- db_pgno_t last_pgno, pg;
+ MPOOLFILE *mfp;
int ret;
+ void *retp;
- COMPQUIET(flags, 0);
dbenv = dbmfp->dbenv;
dbmp = dbenv->mp_handle;
+ mfp = dbmfp->mfp;
- R_LOCK(dbenv, dbmp->reginfo);
- last_pgno = dbmfp->mfp->last_pgno;
- R_UNLOCK(dbenv, dbmp->reginfo);
-
- if (pgno > last_pgno) {
- __db_err(dbenv, "Truncate beyond the end of file");
+ if (mfp->free_size == 0)
return (EINVAL);
- }
- pg = pgno;
- do {
- if ((ret =
- __memp_fget(dbmfp, &pg, DB_MPOOL_FREE, &pagep)) != 0)
+ if (count * sizeof(db_pgno_t) > mfp->free_size) {
+ mfp->free_size =
+ (size_t)DB_ALIGN(count * sizeof(db_pgno_t), 512);
+ *listp = R_ADDR(dbmp->reginfo, mfp->free_list);
+ if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
+ NULL, mfp->free_size, &mfp->free_list, &retp)) != 0)
return (ret);
- } while (pg++ < last_pgno);
- if (!F_ISSET(dbmfp->mfp, MP_TEMP) &&
- (ret = __os_truncate(dbenv,
- dbmfp->fhp, pgno, dbmfp->mfp->stat.st_pagesize)) != 0)
- return (ret);
+ memcpy(retp, *listp, mfp->free_cnt * sizeof(db_pgno_t));
- R_LOCK(dbenv, dbmp->reginfo);
- dbmfp->mfp->last_pgno = pgno - 1;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
+ __memp_free(dbmp->reginfo, NULL, *listp);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+ }
- return (ret);
+ mfp->free_cnt = count;
+ *listp = R_ADDR(dbmp->reginfo, mfp->free_list);
+
+ return (0);
}
+#endif
diff --git a/db/mp/mp_mvcc.c b/db/mp/mp_mvcc.c
new file mode 100644
index 000000000..4a763e1de
--- /dev/null
+++ b/db/mp/mp_mvcc.c
@@ -0,0 +1,682 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mp_mvcc.c,v 12.24 2006/09/18 13:11:50 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
+
+static int __pgno_cmp __P((const void *, const void *));
+
+/*
+ * __memp_bh_priority --
+ * Get the the aggregate priority of a chain of buffer headers.
+ *
+ * PUBLIC: u_int32_t __memp_bh_priority __P((BH *));
+ */
+u_int32_t
+__memp_bh_priority(bhp)
+ BH *bhp;
+{
+ u_int32_t priority;
+
+ while (SH_CHAIN_HASNEXT(bhp, vc))
+ bhp = SH_CHAIN_NEXT(bhp, vc, __bh);
+
+ priority = bhp->priority;
+
+ while ((bhp = SH_CHAIN_PREV(bhp, vc, __bh)) != NULL)
+ if (bhp->priority < priority)
+ priority = bhp->priority;
+
+ return (priority);
+}
+
+/*
+ * __memp_bucket_reorder --
+ * Adjust a hash queue so that the given bhp is in priority order.
+ *
+ * PUBLIC: void __memp_bucket_reorder __P((DB_ENV *, DB_MPOOL_HASH *, BH *));
+ */
+void
+__memp_bucket_reorder(dbenv, hp, bhp)
+ DB_ENV *dbenv;
+ DB_MPOOL_HASH *hp;
+ BH *bhp;
+{
+ BH *first_bhp, *last_bhp, *next;
+ u_int32_t priority;
+
+ DB_ASSERT(dbenv, bhp != NULL);
+ COMPQUIET(dbenv, NULL);
+
+ /*
+ * Buffers on hash buckets are sorted by priority -- move the buffer to
+ * the correct position in the list. We only need to do any work if
+ * there are two or more buffers in the bucket.
+ */
+ if ((first_bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) ==
+ (last_bhp = SH_TAILQ_LAST(&hp->hash_bucket, hq, __bh)))
+ goto done;
+
+ while (SH_CHAIN_HASNEXT(bhp, vc))
+ bhp = SH_CHAIN_NEXTP(bhp, vc, __bh);
+
+ priority = BH_PRIORITY(bhp);
+
+ /* Optimize common cases. */
+ if (bhp != first_bhp && priority <= BH_PRIORITY(first_bhp)) {
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ SH_TAILQ_INSERT_HEAD(&hp->hash_bucket, bhp, hq, __bh);
+ } else if (bhp != last_bhp && priority >= BH_PRIORITY(last_bhp)) {
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ } else {
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ for (next = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
+ next != NULL && priority > BH_PRIORITY(next);
+ next = SH_TAILQ_NEXT(next, hq, __bh))
+ ;
+ if (next == NULL)
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ else
+ SH_TAILQ_INSERT_BEFORE(&hp->hash_bucket,
+ next, bhp, hq, __bh);
+ }
+
+done: /* Reset the hash bucket's priority. */
+ hp->hash_priority =
+ BH_PRIORITY(SH_TAILQ_FIRST(&hp->hash_bucket, __bh));
+}
+
+/*
+ * __memp_bh_settxn --
+ * Set the transaction that owns the given buffer.
+ *
+ * PUBLIC: int __memp_bh_settxn __P((DB_MPOOL *, MPOOLFILE *mfp, BH *, void *));
+ */
+int __memp_bh_settxn(dbmp, mfp, bhp, vtd)
+ DB_MPOOL *dbmp;
+ MPOOLFILE *mfp;
+ BH *bhp;
+ void *vtd;
+{
+ DB_ENV *dbenv;
+ TXN_DETAIL *td;
+
+ dbenv = dbmp->dbenv;
+ td = (TXN_DETAIL *)vtd;
+
+ if (td == NULL) {
+ __db_errx(dbenv,
+ "%s: non-transactional update to a multiversion file",
+ __memp_fns(dbmp, mfp));
+ return (EINVAL);
+ }
+
+ if (bhp->td_off != INVALID_ROFF) {
+ DB_ASSERT(dbenv, BH_OWNER(dbenv, bhp) == td);
+ return (0);
+ }
+
+ bhp->td_off = R_OFFSET(&dbenv->tx_handle->reginfo, td);
+ return (__txn_add_buffer(dbenv, td));
+}
+
+/*
+ * __memp_skip_curadj --
+ * Indicate whether a cursor adjustment can be skipped for a snapshot
+ * cursor.
+ *
+ * PUBLIC: int __memp_skip_curadj __P((DBC *, db_pgno_t));
+ */
+int
+__memp_skip_curadj(dbc, pgno)
+ DBC * dbc;
+ db_pgno_t pgno;
+{
+ BH *bhp;
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ DB_MPOOLFILE *dbmfp;
+ DB_TXN *txn;
+ MPOOL *c_mp, *mp;
+ MPOOLFILE *mfp;
+ REGINFO *infop;
+ roff_t mf_offset;
+ u_int32_t n_cache;
+ int skip;
+
+ dbenv = dbc->dbp->dbenv;
+ dbmp = dbenv->mp_handle;
+ mp = dbmp->reginfo[0].primary;
+ dbmfp = dbc->dbp->mpf;
+ mfp = dbmfp->mfp;
+ mf_offset = R_OFFSET(dbmp->reginfo, mfp);
+ skip = 0;
+
+ for (txn = dbc->txn; txn->parent != NULL; txn = txn->parent)
+ ;
+
+ /*
+ * 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, pgno);
+ infop = &dbmp->reginfo[n_cache];
+ c_mp = infop->primary;
+ hp = R_ADDR(infop, c_mp->htab);
+ hp = &hp[NBUCKET(c_mp, mf_offset, pgno)];
+
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(bhp, &hp->hash_bucket, hq, __bh) {
+ if (bhp->pgno != pgno || bhp->mf_offset != mf_offset)
+ continue;
+
+ if (!BH_OWNED_BY(dbenv, bhp, txn))
+ skip = 1;
+ break;
+ }
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+
+ return (skip);
+}
+
+#define DB_FREEZER_MAGIC 0x06102002
+
+/*
+ * __memp_bh_freeze --
+ * Save a buffer header to temporary storage in case it is needed later by
+ * a snapshot transaction. This function should be called with the hash
+ * bucket locked and will exit with it locked, as it inserts a frozen
+ * buffer after writing the data.
+ *
+ * PUBLIC: int __memp_bh_freeze __P((DB_MPOOL *, REGINFO *, DB_MPOOL_HASH *,
+ * PUBLIC: BH *, int *));
+ */
+int
+__memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp)
+ DB_MPOOL *dbmp;
+ REGINFO *infop;
+ DB_MPOOL_HASH *hp;
+ BH *bhp;
+ int *need_frozenp;
+{
+ BH *frozen_bhp;
+ BH_FROZEN_ALLOC *frozen_alloc;
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ MPOOL *c_mp;
+ MPOOLFILE *bh_mfp;
+ db_pgno_t maxpgno, newpgno, nextfree;
+ size_t nio;
+ int ret, t_ret;
+ u_int32_t magic, nbucket, ncache, pagesize;
+ char filename[100], *real_name;
+
+ dbenv = dbmp->dbenv;
+ c_mp = infop->primary;
+ ret = 0;
+ /* Find the associated MPOOLFILE. */
+ bh_mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
+ pagesize = bh_mfp->stat.st_pagesize;
+ real_name = NULL;
+ fhp = NULL;
+
+ DB_ASSERT(dbenv, bhp->ref == 0);
+ DB_ASSERT(dbenv, !F_ISSET(bhp, BH_DIRTY | BH_FROZEN | BH_LOCKED));
+
+ ++bhp->ref;
+ F_SET(bhp, BH_LOCKED);
+ MVCC_MPROTECT(bhp->buf, pagesize, PROT_READ | PROT_WRITE);
+
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+
+ MPOOL_REGION_LOCK(dbenv, infop);
+ frozen_bhp = SH_TAILQ_FIRST(&c_mp->free_frozen, __bh);
+ if (frozen_bhp != NULL) {
+ SH_TAILQ_REMOVE(&c_mp->free_frozen, frozen_bhp, hq, __bh);
+ *need_frozenp = SH_TAILQ_EMPTY(&c_mp->free_frozen);
+ } else {
+ *need_frozenp = 1;
+
+ /* There might be a small amount of unallocated space. */
+ if (__db_shalloc(infop,
+ sizeof(BH_FROZEN_ALLOC) + sizeof(BH_FROZEN_PAGE), 0,
+ &frozen_alloc) == 0) {
+ frozen_bhp = (BH *)(frozen_alloc + 1);
+ SH_TAILQ_INSERT_HEAD(&c_mp->alloc_frozen, frozen_alloc,
+ links, __bh_frozen_a);
+ }
+ }
+ MPOOL_REGION_UNLOCK(dbenv, infop);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+
+ /*
+ * If we can't get a frozen buffer header, return ENOMEM immediately:
+ * we don't want to call __memp_alloc recursively. __memp_alloc will
+ * turn the next free page it finds into frozen buffer headers.
+ */
+ if (frozen_bhp == NULL) {
+ ret = ENOMEM;
+ goto err;
+ }
+
+ /*
+ * For now, keep things simple and have one file per page size per
+ * cache. Concurrency will be suboptimal, but debugging should be
+ * simpler.
+ */
+ ncache = (u_int32_t)(infop - dbmp->reginfo);
+ nbucket = (u_int32_t)(hp - (DB_MPOOL_HASH *)R_ADDR(infop, c_mp->htab));
+ snprintf(filename, sizeof(filename), "__db.freezer.%u.%u.%uK",
+ ncache, nbucket, pagesize / 1024);
+
+ if ((ret = __db_appname(dbenv, DB_APP_NONE, filename,
+ 0, NULL, &real_name)) != 0)
+ goto err;
+ if ((ret = __os_open_extend(dbenv, real_name, pagesize,
+ DB_OSO_CREATE | DB_OSO_EXCL, dbenv->db_mode, &fhp)) == 0) {
+ /* We're creating the file -- initialize the metadata page. */
+ magic = DB_FREEZER_MAGIC;
+ maxpgno = newpgno = 0;
+ if ((ret = __os_write(dbenv, fhp, &magic, sizeof(u_int32_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_write(dbenv, fhp, &newpgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_write(dbenv, fhp, &maxpgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_seek(dbenv, fhp, 0, 0, 0)) != 0)
+ goto err;
+ } else if (ret == EEXIST)
+ ret = __os_open_extend(dbenv, real_name, pagesize, 0,
+ dbenv->db_mode, &fhp);
+ if (ret != 0)
+ goto err;
+ if ((ret = __os_read(dbenv, fhp, &magic, sizeof(u_int32_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_read(dbenv, fhp, &newpgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_read(dbenv, fhp, &maxpgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0)
+ goto err;
+ if (magic != DB_FREEZER_MAGIC) {
+ ret = EINVAL;
+ goto err;
+ }
+ if (newpgno == 0) {
+ newpgno = ++maxpgno;
+ if ((ret = __os_seek(dbenv,
+ fhp, 0, 0, sizeof(u_int32_t) + sizeof(db_pgno_t))) != 0 ||
+ (ret = __os_write(dbenv, fhp, &maxpgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0)
+ goto err;
+ } else {
+ if ((ret = __os_seek(dbenv, fhp, newpgno, pagesize, 0)) != 0 ||
+ (ret = __os_read(dbenv, fhp, &nextfree, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0)
+ goto err;
+ if ((ret =
+ __os_seek(dbenv, fhp, 0, 0, sizeof(u_int32_t))) != 0 ||
+ (ret = __os_write(dbenv, fhp, &nextfree, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0)
+ goto err;
+ }
+
+ /* Write the buffer to the allocated page. */
+ if ((ret = __os_io(dbenv, DB_IO_WRITE, fhp, newpgno, pagesize, 0,
+ pagesize, bhp->buf, &nio)) != 0 || nio == 0)
+ goto err;
+
+ /*
+ * Set up the frozen_bhp with the freezer page number. The original
+ * buffer header is about to be freed, so transfer resources to the
+ * frozen header here.
+ */
+#ifdef DIAG_MVCC
+ memcpy(frozen_bhp, bhp, SSZ(BH, align_off));
+#else
+ memcpy(frozen_bhp, bhp, SSZA(BH, buf));
+#endif
+ frozen_bhp->ref = frozen_bhp->ref_sync = 0;
+ F_SET(frozen_bhp, BH_FROZEN);
+ F_CLR(frozen_bhp, BH_LOCKED);
+ frozen_bhp->priority = UINT32_MAX;
+ ((BH_FROZEN_PAGE *)frozen_bhp)->spgno = newpgno;
+
+ bhp->td_off = INVALID_ROFF;
+
+ /*
+ * Add the frozen buffer to the version chain and update the hash
+ * bucket if this is the head revision. __memp_alloc will remove it by
+ * calling __memp_bhfree on the old version of the buffer.
+ */
+ SH_CHAIN_INSERT_AFTER(bhp, frozen_bhp, vc, __bh);
+ if (!SH_CHAIN_HASNEXT(frozen_bhp, vc)) {
+ SH_TAILQ_INSERT_BEFORE(&hp->hash_bucket,
+ bhp, frozen_bhp, hq, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ }
+
+ /*
+ * Increment the file's block count -- freeing the original buffer will
+ * decrement it.
+ */
+ ++bh_mfp->block_cnt;
+ ++hp->hash_frozen;
+
+ if (0) {
+err: if (ret == 0)
+ ret = EIO;
+ if (frozen_bhp != NULL) {
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ MPOOL_REGION_LOCK(dbenv, infop);
+ SH_TAILQ_INSERT_TAIL(&c_mp->free_frozen,
+ frozen_bhp, hq);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ }
+ }
+ if (real_name != NULL)
+ __os_free(dbenv, real_name);
+ if (fhp != NULL &&
+ (t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0 && ret != ENOMEM)
+ __db_err(dbenv, ret, "__memp_bh_freeze");
+ F_CLR(bhp, BH_LOCKED);
+ --bhp->ref;
+
+ /*
+ * If a thread of control is waiting on this buffer, wake it up.
+ */
+ if (F_ISSET(hp, IO_WAITER)) {
+ F_CLR(hp, IO_WAITER);
+ MUTEX_UNLOCK(dbenv, hp->mtx_io);
+ }
+ return (ret);
+}
+
+static int
+__pgno_cmp(a, b)
+ const void *a, *b;
+{
+ db_pgno_t *ap, *bp;
+
+ ap = (db_pgno_t *)a;
+ bp = (db_pgno_t *)b;
+
+ return (int)(*ap - *bp);
+}
+
+/*
+ * __memp_bh_thaw --
+ * Free a buffer header in temporary storage. optionally restore the
+ * buffer (if alloc_bhp != NULL). This function should be
+ * called with the hash bucket locked and will return with it locked.
+ *
+ * PUBLIC: int __memp_bh_thaw __P((DB_MPOOL *, REGINFO *,
+ * PUBLIC: DB_MPOOL_HASH *, BH *, BH *));
+ */
+int
+__memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp)
+ DB_MPOOL *dbmp;
+ REGINFO *infop;
+ DB_MPOOL_HASH *hp;
+ BH *frozen_bhp, *alloc_bhp;
+{
+ BH *next_bhp;
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ MPOOL *c_mp;
+ MPOOLFILE *bh_mfp;
+ db_pgno_t *freelist, *ppgno, freepgno, maxpgno, spgno;
+ size_t nio;
+ u_int32_t listsize, magic, nbucket, ncache, ntrunc, nfree, pagesize;
+#ifdef HAVE_FTRUNCATE
+ int i;
+#endif
+ int needfree, reorder, ret, t_ret;
+ char filename[100], *real_name;
+
+ dbenv = dbmp->dbenv;
+ fhp = NULL;
+ c_mp = infop->primary;
+ bh_mfp = R_ADDR(dbmp->reginfo, frozen_bhp->mf_offset);
+ freelist = NULL;
+ pagesize = bh_mfp->stat.st_pagesize;
+ ret = 0;
+ real_name = NULL;
+
+ DB_ASSERT(dbenv, F_ISSET(frozen_bhp, BH_FROZEN));
+ DB_ASSERT(dbenv, !F_ISSET(frozen_bhp, BH_LOCKED));
+ DB_ASSERT(dbenv, alloc_bhp != NULL ||
+ BH_OBSOLETE(frozen_bhp, hp->old_reader));
+
+ spgno = ((BH_FROZEN_PAGE *)frozen_bhp)->spgno;
+
+ if (alloc_bhp != NULL) {
+#ifdef DIAG_MVCC
+ memcpy(alloc_bhp, frozen_bhp, SSZ(BH, align_off));
+#else
+ memcpy(alloc_bhp, frozen_bhp, SSZA(BH, buf));
+#endif
+ alloc_bhp->ref = 1;
+ alloc_bhp->ref_sync = 0;
+ F_CLR(alloc_bhp, BH_FROZEN);
+ }
+
+ F_SET(frozen_bhp, BH_LOCKED);
+
+ /*
+ * For now, keep things simple and have one file per page size per
+ * cache. Concurrency will be suboptimal, but debugging should be
+ * simpler.
+ */
+ ncache = (u_int32_t)(infop - dbmp->reginfo);
+ nbucket = (u_int32_t)(hp - (DB_MPOOL_HASH *)R_ADDR(infop, c_mp->htab));
+ snprintf(filename, sizeof(filename), "__db.freezer.%u.%u.%uK",
+ ncache, nbucket, pagesize / 1024);
+
+ if ((ret = __db_appname(dbenv, DB_APP_NONE, filename, 0, NULL,
+ &real_name)) != 0)
+ goto err;
+
+ if ((ret = __os_open_extend(dbenv, real_name, pagesize, 0,
+ dbenv->db_mode, &fhp)) != 0)
+ goto err;
+
+ /*
+ * Read the first free page number -- we're about to free the page
+ * after we we read it.
+ */
+ if ((ret = __os_read(dbenv, fhp, &magic, sizeof(u_int32_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_read(dbenv, fhp, &freepgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_read(dbenv, fhp, &maxpgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0)
+ goto err;
+
+ if (magic != DB_FREEZER_MAGIC) {
+ ret = EINVAL;
+ goto err;
+ }
+
+ /* Read the buffer from the frozen page. */
+ if (alloc_bhp != NULL &&
+ ((ret = __os_io(dbenv, DB_IO_READ, fhp, spgno, pagesize,
+ 0, pagesize, alloc_bhp->buf, &nio)) != 0 || nio == 0))
+ goto err;
+
+ /*
+ * Free the page from the file. If it's the last page, truncate.
+ * Otherwise, update free page linked list.
+ */
+ needfree = 1;
+ if (spgno == maxpgno) {
+ listsize = 100;
+ if ((ret = __os_malloc(dbenv,
+ listsize * sizeof(db_pgno_t), &freelist)) != 0)
+ goto err;
+ nfree = 0;
+ while (freepgno != 0) {
+ if (nfree == listsize) {
+ listsize *= 2;
+ if ((ret = __os_realloc(dbenv,
+ listsize * sizeof(db_pgno_t),
+ &freelist)) != 0)
+ goto err;
+ }
+ freelist[nfree++] = freepgno;
+ if ((ret = __os_seek(
+ dbenv, fhp, freepgno, pagesize, 0)) != 0 ||
+ (ret = __os_read(dbenv, fhp, &freepgno,
+ sizeof(db_pgno_t), &nio)) < 0 || nio == 0)
+ goto err;
+ }
+ freelist[nfree++] = spgno;
+ qsort(freelist, nfree, sizeof(db_pgno_t), __pgno_cmp);
+ for (ppgno = &freelist[nfree - 1]; ppgno > freelist; ppgno--)
+ if (*(ppgno - 1) != *ppgno - 1)
+ break;
+ ntrunc = (u_int32_t)(&freelist[nfree] - ppgno);
+ if (ntrunc == (u_int32_t)maxpgno) {
+ needfree = 0;
+ ret = __os_closehandle(dbenv, fhp);
+ fhp = NULL;
+ if (ret != 0 ||
+ (ret = __os_unlink(dbenv, real_name)) != 0)
+ goto err;
+ }
+#ifdef HAVE_FTRUNCATE
+ else {
+ maxpgno -= (db_pgno_t)ntrunc;
+ if ((ret = __os_truncate(dbenv, fhp,
+ maxpgno + 1, pagesize)) != 0)
+ goto err;
+
+ /* Fix up the linked list */
+ freelist[nfree - ntrunc] = 0;
+ if ((ret = __os_seek(
+ dbenv, fhp, 0, 0, sizeof(u_int32_t))) != 0 ||
+ (ret = __os_write(dbenv, fhp, &freelist[0],
+ sizeof(db_pgno_t), &nio)) < 0 || nio == 0 ||
+ (ret = __os_write(dbenv, fhp, &maxpgno,
+ sizeof(db_pgno_t), &nio)) < 0 || nio == 0)
+ goto err;
+
+ for (i = 0; i < (int)(nfree - ntrunc); i++)
+ if ((ret = __os_seek(dbenv,
+ fhp, freelist[i], pagesize, 0)) != 0 ||
+ (ret = __os_write(dbenv, fhp,
+ &freelist[i + 1], sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0)
+ goto err;
+ needfree = 0;
+ }
+#endif
+ }
+ if (needfree &&
+ ((ret = __os_seek(dbenv, fhp, spgno, pagesize, 0)) != 0 ||
+ (ret = __os_write(dbenv, fhp, &freepgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0 ||
+ (ret = __os_seek(dbenv, fhp, 0, 0, sizeof(u_int32_t))) != 0 ||
+ (ret = __os_write(dbenv, fhp, &spgno, sizeof(db_pgno_t),
+ &nio)) < 0 || nio == 0))
+ goto err;
+
+ /*
+ * Add the thawed buffer (if any) to the version chain. We can't
+ * do this any earlier, because we can't guarantee that another thread
+ * won't be waiting for it, which means we can't clean up if there are
+ * errors reading from the freezer. We can't do it any later, because
+ * we're about to free frozen_bhp, and without it we would need to do
+ * another cache lookup to find out where the new page should live.
+ */
+ if (alloc_bhp != NULL) {
+ SH_CHAIN_INSERT_AFTER(frozen_bhp, alloc_bhp, vc, __bh);
+ if (!SH_CHAIN_HASNEXT(alloc_bhp, vc)) {
+ SH_TAILQ_INSERT_BEFORE(&hp->hash_bucket,
+ frozen_bhp, alloc_bhp, hq, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, frozen_bhp, hq, __bh);
+ }
+ }
+
+ reorder = (alloc_bhp == NULL) &&
+ BH_PRIORITY(frozen_bhp) == frozen_bhp->priority;
+ if ((next_bhp = SH_CHAIN_NEXT(frozen_bhp, vc, __bh)) == NULL) {
+ if ((next_bhp = SH_CHAIN_PREV(frozen_bhp, vc, __bh)) != NULL)
+ SH_TAILQ_INSERT_BEFORE(&hp->hash_bucket, frozen_bhp,
+ next_bhp, hq, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, frozen_bhp, hq, __bh);
+ }
+ SH_CHAIN_REMOVE(frozen_bhp, vc, __bh);
+ if (reorder) {
+ if (next_bhp != NULL)
+ __memp_bucket_reorder(dbenv, hp, next_bhp);
+ else
+ hp->hash_priority = BH_PRIORITY(SH_TAILQ_FIRST(
+ &hp->hash_bucket, __bh));
+ }
+
+ /*
+ * If other threads are waiting for this buffer as well, they will have
+ * incremented the reference count and will be waiting on the I/O mutex.
+ * For that reason, we can't unconditionally free the memory here.
+ */
+ if (--frozen_bhp->ref == 0) {
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+
+ if (alloc_bhp == NULL && frozen_bhp->td_off != INVALID_ROFF)
+ ret = __txn_remove_buffer(dbenv,
+ BH_OWNER(dbenv, frozen_bhp), MUTEX_INVALID);
+
+ MPOOL_REGION_LOCK(dbenv, infop);
+ SH_TAILQ_INSERT_TAIL(&c_mp->free_frozen, frozen_bhp, hq);
+ MPOOL_REGION_UNLOCK(dbenv, infop);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ } else {
+ DB_ASSERT(dbenv, alloc_bhp != NULL);
+ F_CLR(frozen_bhp, BH_FROZEN | BH_LOCKED);
+ }
+
+ if (alloc_bhp != NULL)
+ ++hp->hash_thawed;
+ else
+ ++hp->hash_frozen_freed;
+
+ if (0) {
+err: if (ret == 0)
+ ret = EIO;
+ }
+ if (real_name != NULL)
+ __os_free(dbenv, real_name);
+ if (freelist != NULL)
+ __os_free(dbenv, freelist);
+ if (fhp != NULL &&
+ (t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0)
+ __db_err(dbenv, ret, "__memp_bh_thaw");
+
+ /*
+ * If a thread of control is waiting on this buffer, wake it up.
+ */
+ if (F_ISSET(hp, IO_WAITER)) {
+ F_CLR(hp, IO_WAITER);
+ MUTEX_UNLOCK(dbenv, hp->mtx_io);
+ }
+
+ return (ret);
+}
diff --git a/db/mp/mp_region.c b/db/mp/mp_region.c
index 3c7ee6a4b..a02683f21 100644
--- a/db/mp/mp_region.c
+++ b/db/mp/mp_region.c
@@ -1,29 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_region.c,v 11.68 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_region.c,v 12.21 2006/08/24 14:46:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/mp.h"
static int __memp_init __P((DB_ENV *, DB_MPOOL *, u_int, u_int32_t));
-static void __memp_init_config __P((DB_ENV *, MPOOL *));
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-static size_t __memp_region_maint __P((REGINFO *));
-#endif
+static int __memp_init_config __P((DB_ENV *, MPOOL *));
+static void __memp_region_size __P((DB_ENV *, roff_t *, u_int32_t *));
/*
* __memp_open --
@@ -43,20 +34,8 @@ __memp_open(dbenv)
u_int32_t htab_buckets, *regids;
int ret;
- /* Figure out how big each cache region is. */
- reg_size = (dbenv->mp_gbytes / dbenv->mp_ncache) * GIGABYTE;
- reg_size += ((dbenv->mp_gbytes %
- dbenv->mp_ncache) * GIGABYTE) / dbenv->mp_ncache;
- reg_size += dbenv->mp_bytes / dbenv->mp_ncache;
-
- /*
- * Figure out how many hash buckets each region will have. Assume we
- * want to keep the hash chains with under 10 pages on each chain. We
- * don't know the pagesize in advance, and it may differ for different
- * files. Use a pagesize of 1K for the calculation -- we walk these
- * chains a lot, they must be kept short.
- */
- htab_buckets = __db_tablesize((u_int32_t)(reg_size / (1 * 1024)) / 10);
+ /* Calculate the region size and hash bucket count. */
+ __memp_region_size(dbenv, &reg_size, &htab_buckets);
/* Create and initialize the DB_MPOOL structure. */
if ((ret = __os_calloc(dbenv, 1, sizeof(*dbmp), &dbmp)) != 0)
@@ -116,14 +95,9 @@ __memp_open(dbenv)
if ((ret =
__memp_init(dbenv, dbmp, i, htab_buckets)) != 0)
goto err;
- R_UNLOCK(dbenv, &dbmp->reginfo[i]);
regids[i] = dbmp->reginfo[i].id;
}
-
- __memp_init_config(dbenv, mp);
-
- R_UNLOCK(dbenv, dbmp->reginfo);
} else {
/*
* Determine how many regions there are going to be, allocate
@@ -140,21 +114,6 @@ __memp_open(dbenv)
dbmp->reginfo[i].id = INVALID_REGION_ID;
dbmp->reginfo[0] = reginfo;
- __memp_init_config(dbenv, mp);
-
- /*
- * 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) {
@@ -165,7 +124,6 @@ __memp_open(dbenv)
if ((ret = __db_r_attach(
dbenv, &dbmp->reginfo[i], 0)) != 0)
goto err;
- R_UNLOCK(dbenv, &dbmp->reginfo[i]);
}
}
@@ -175,28 +133,28 @@ __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) &&
- (ret = __db_mutex_setup(dbenv, dbmp->reginfo, &dbmp->mutexp,
- MUTEX_ALLOC | MUTEX_THREAD)) != 0)
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_MPOOL_HANDLE, DB_MUTEX_PROCESS_ONLY, &dbmp->mutex)) != 0)
goto err;
dbenv->mp_handle = dbmp;
- return (0);
-err: if (dbmp->reginfo != NULL && dbmp->reginfo[0].addr != NULL) {
- if (F_ISSET(dbmp->reginfo, REGION_CREATE))
- ret = __db_panic(dbenv, ret);
+ /* A process joining the region may reset the mpool configuration. */
+ if ((ret = __memp_init_config(dbenv, mp)) != 0)
+ return (ret);
- R_UNLOCK(dbenv, dbmp->reginfo);
+ return (0);
+err: dbenv->mp_handle = NULL;
+ if (dbmp->reginfo != NULL && dbmp->reginfo[0].addr != NULL) {
for (i = 0; i < dbmp->nreg; ++i)
if (dbmp->reginfo[i].id != INVALID_REGION_ID)
(void)__db_r_detach(
dbenv, &dbmp->reginfo[i], 0);
__os_free(dbenv, dbmp->reginfo);
}
- if (dbmp->mutexp != NULL)
- __db_mutex_free(dbenv, dbmp->reginfo, dbmp->mutexp);
+
+ (void)__mutex_free(dbenv, &dbmp->mutex);
__os_free(dbenv, dbmp);
return (ret);
}
@@ -212,37 +170,26 @@ __memp_init(dbenv, dbmp, reginfo_off, htab_buckets)
u_int reginfo_off;
u_int32_t htab_buckets;
{
- DB_MPOOL_HASH *htab;
+ DB_MPOOL_HASH *htab, *hp;
MPOOL *mp;
REGINFO *reginfo;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- size_t maint_size;
-#endif
u_int32_t i;
int ret;
void *p;
reginfo = &dbmp->reginfo[reginfo_off];
- if ((ret = __db_shalloc(reginfo,
- sizeof(MPOOL), MUTEX_ALIGN, &reginfo->primary)) != 0)
+ if ((ret = __db_shalloc(
+ reginfo, sizeof(MPOOL), 0, &reginfo->primary)) != 0)
goto mem_err;
reginfo->rp->primary = R_OFFSET(reginfo, reginfo->primary);
mp = reginfo->primary;
memset(mp, 0, sizeof(*mp));
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- maint_size = __memp_region_maint(reginfo);
- /* Allocate room for the maintenance info and initialize it. */
- if ((ret = __db_shalloc(reginfo,
- sizeof(REGMAINT) + maint_size, 0, &p)) != 0)
- goto mem_err;
- __db_maintinit(reginfo, p, maint_size);
- mp->maint_off = R_OFFSET(reginfo, p);
-#endif
+ if ((ret =
+ __mutex_alloc(dbenv, MTX_MPOOL_REGION, 0, &mp->mtx_region)) != 0)
+ return (ret);
if (reginfo_off == 0) {
- SH_TAILQ_INIT(&mp->mpfq);
-
ZERO_LSN(mp->lsn);
mp->nreg = dbmp->nreg;
@@ -250,22 +197,45 @@ __memp_init(dbenv, dbmp, reginfo_off, htab_buckets)
dbmp->nreg * sizeof(u_int32_t), 0, &p)) != 0)
goto mem_err;
mp->regids = R_OFFSET(dbmp->reginfo, p);
+
+ /* Allocate file table space and initialize it. */
+ if ((ret = __db_shalloc(reginfo,
+ MPOOL_FILE_BUCKETS * sizeof(DB_MPOOL_HASH), 0, &htab)) != 0)
+ goto mem_err;
+ mp->ftab = R_OFFSET(reginfo, htab);
+ for (i = 0; i < MPOOL_FILE_BUCKETS; i++) {
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_MPOOL_FILE_BUCKET, 0, &htab[i].mtx_hash)) != 0)
+ return (ret);
+ SH_TAILQ_INIT(&htab[i].hash_bucket);
+ htab[i].hash_page_dirty = htab[i].hash_priority = 0;
+ }
+
}
/* Allocate hash table space and initialize it. */
if ((ret = __db_shalloc(reginfo,
- htab_buckets * sizeof(DB_MPOOL_HASH), MUTEX_ALIGN, &htab)) != 0)
+ htab_buckets * sizeof(DB_MPOOL_HASH), 0, &htab)) != 0)
goto mem_err;
mp->htab = R_OFFSET(reginfo, htab);
for (i = 0; i < htab_buckets; i++) {
- if ((ret = __db_mutex_setup(dbenv,
- reginfo, &htab[i].hash_mutex, MUTEX_NO_RLOCK)) != 0)
+ hp = &htab[i];
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_MPOOL_HASH_BUCKET, 0, &hp->mtx_hash)) != 0)
+ return (ret);
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_MPOOL_IO, DB_MUTEX_SELF_BLOCK, &hp->mtx_io)) != 0)
return (ret);
- SH_TAILQ_INIT(&htab[i].hash_bucket);
- htab[i].hash_page_dirty = htab[i].hash_priority = 0;
+ SH_TAILQ_INIT(&hp->hash_bucket);
+ hp->hash_page_dirty = hp->hash_priority = hp->hash_io_wait = 0;
+ hp->flags = 0;
+ ZERO_LSN(hp->old_reader);
}
mp->htab_buckets = mp->stat.st_hash_buckets = htab_buckets;
+ SH_TAILQ_INIT(&mp->free_frozen);
+ SH_TAILQ_INIT(&mp->alloc_frozen);
+
/*
* Only the environment creator knows the total cache size, fill in
* those statistics now.
@@ -274,20 +244,81 @@ __memp_init(dbenv, dbmp, reginfo_off, htab_buckets)
mp->stat.st_bytes = dbenv->mp_bytes;
return (0);
-mem_err:__db_err(dbenv, "Unable to allocate memory for mpool region");
+mem_err:__db_errx(dbenv, "Unable to allocate memory for mpool region");
return (ret);
}
/*
+ * __memp_region_size --
+ * Size the region and figure out how many hash buckets we'll have.
+ */
+static void
+__memp_region_size(dbenv, reg_sizep, htab_bucketsp)
+ DB_ENV *dbenv;
+ roff_t *reg_sizep;
+ u_int32_t *htab_bucketsp;
+{
+ roff_t reg_size;
+
+ /*
+ * Figure out how big each cache region is. Cast an operand to roff_t
+ * so we do 64-bit arithmetic as appropriate.
+ */
+ reg_size = ((roff_t)GIGABYTE / dbenv->mp_ncache) * dbenv->mp_gbytes;
+ reg_size += dbenv->mp_bytes / dbenv->mp_ncache;
+ *reg_sizep = reg_size;
+
+ /*
+ * Figure out how many hash buckets each region will have. Assume we
+ * want to keep the hash chains with under 10 pages on each chain. We
+ * don't know the pagesize in advance, and it may differ for different
+ * files. Use a pagesize of 1K for the calculation -- we walk these
+ * chains a lot, they must be kept short.
+ *
+ * XXX
+ * Cache sizes larger than 10TB would cause 32-bit wrapping in the
+ * calculation of the number of hash buckets. This probably isn't
+ * something we need to worry about right now, but is checked when the
+ * cache size is set.
+ */
+ *htab_bucketsp = __db_tablesize((u_int32_t)(reg_size / (10 * 1024)));
+}
+
+/*
+ * __memp_region_mutex_count --
+ * Return the number of mutexes the mpool region will need.
+ *
+ * PUBLIC: u_int32_t __memp_region_mutex_count __P((DB_ENV *));
+ */
+u_int32_t
+__memp_region_mutex_count(dbenv)
+ DB_ENV *dbenv;
+{
+ roff_t reg_size;
+ u_int32_t htab_buckets;
+
+ __memp_region_size(dbenv, &reg_size, &htab_buckets);
+
+ /*
+ * We need a couple of mutexes for the region itself, one for each
+ * file handle (MPOOLFILE) the application allocates, one for each
+ * of the MPOOL_FILE_BUCKETS, and each cache has two mutexes per
+ * hash bucket.
+ */
+ return (dbenv->mp_ncache * htab_buckets * 2 + 50 + MPOOL_FILE_BUCKETS);
+}
+
+/*
* __memp_init_config --
* Initialize shared configuration information.
*/
-static void
+static int
__memp_init_config(dbenv, mp)
DB_ENV *dbenv;
MPOOL *mp;
{
- /* A process joining the region may reset the mpool configuration. */
+ MPOOL_SYSTEM_LOCK(dbenv);
+
if (dbenv->mp_mmapsize != 0)
mp->mp_mmapsize = dbenv->mp_mmapsize;
if (dbenv->mp_maxopenfd != 0)
@@ -296,6 +327,10 @@ __memp_init_config(dbenv, mp)
mp->mp_maxwrite = dbenv->mp_maxwrite;
if (dbenv->mp_maxwrite_sleep != 0)
mp->mp_maxwrite_sleep = dbenv->mp_maxwrite_sleep;
+
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
/*
@@ -309,6 +344,7 @@ __memp_dbenv_refresh(dbenv)
DB_ENV *dbenv;
{
BH *bhp;
+ BH_FROZEN_ALLOC *frozen_alloc;
DB_MPOOL *dbmp;
DB_MPOOLFILE *dbmfp;
DB_MPOOL_HASH *hp;
@@ -333,11 +369,31 @@ __memp_dbenv_refresh(dbenv)
reginfo = &dbmp->reginfo[i];
mp = reginfo->primary;
for (hp = R_ADDR(reginfo, mp->htab), bucket = 0;
- bucket < mp->htab_buckets; ++hp, ++bucket)
+ bucket < mp->htab_buckets; ++hp, ++bucket) {
while ((bhp = SH_TAILQ_FIRST(
&hp->hash_bucket, __bh)) != NULL)
- __memp_bhfree(dbmp, hp, bhp,
- BH_FREE_FREEMEM | BH_FREE_UNLOCKED);
+ if (F_ISSET(bhp, BH_FROZEN))
+ SH_TAILQ_REMOVE(
+ &hp->hash_bucket, bhp,
+ hq, __bh);
+ else if ((t_ret = __memp_bhfree(
+ dbmp, hp, bhp,
+ BH_FREE_FREEMEM |
+ BH_FREE_UNLOCKED)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __mutex_free(
+ dbenv, &hp->mtx_hash)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __mutex_free(
+ dbenv, &hp->mtx_io)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+ while ((frozen_alloc = SH_TAILQ_FIRST(
+ &mp->alloc_frozen, __bh_frozen_a)) != NULL) {
+ SH_TAILQ_REMOVE(&mp->alloc_frozen, frozen_alloc,
+ links, __bh_frozen_a);
+ __db_shalloc_free(reginfo, frozen_alloc);
+ }
}
/* Discard DB_MPOOLFILEs. */
@@ -346,26 +402,31 @@ __memp_dbenv_refresh(dbenv)
ret = t_ret;
/* Discard DB_MPREGs. */
+ if (dbmp->pg_inout != NULL)
+ __os_free(dbenv, dbmp->pg_inout);
while ((mpreg = LIST_FIRST(&dbmp->dbregq)) != NULL) {
LIST_REMOVE(mpreg, q);
__os_free(dbenv, mpreg);
}
/* Discard the DB_MPOOL thread mutex. */
- if (dbmp->mutexp != NULL)
- __db_mutex_free(dbenv, dbmp->reginfo, dbmp->mutexp);
+ if ((t_ret = __mutex_free(dbenv, &dbmp->mutex)) != 0 && ret == 0)
+ ret = t_ret;
if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
/* Discard REGION IDs. */
reginfo = &dbmp->reginfo[0];
mp = dbmp->reginfo[0].primary;
- __db_shalloc_free(reginfo, R_ADDR(reginfo, mp->regids));
+ __memp_free(reginfo, NULL, R_ADDR(reginfo, mp->regids));
+
+ /* Discard the File table. */
+ __memp_free(reginfo, NULL, R_ADDR(reginfo, mp->ftab));
/* Discard Hash tables. */
for (i = 0; i < dbmp->nreg; ++i) {
reginfo = &dbmp->reginfo[i];
mp = reginfo->primary;
- __db_shalloc_free(reginfo, R_ADDR(reginfo, mp->htab));
+ __memp_free(reginfo, NULL, R_ADDR(reginfo, mp->htab));
}
}
@@ -383,62 +444,3 @@ __memp_dbenv_refresh(dbenv)
dbenv->mp_handle = NULL;
return (ret);
}
-
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
-/*
- * __memp_region_maint --
- * Return the amount of space needed for region maintenance info.
- *
- */
-static size_t
-__memp_region_maint(infop)
- REGINFO *infop;
-{
- size_t s;
- int numlocks;
-
- /*
- * 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 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);
-}
-#endif
-
-/*
- * __memp_region_destroy
- * Destroy any region maintenance info.
- *
- * PUBLIC: void __memp_region_destroy __P((DB_ENV *, REGINFO *));
- */
-void
-__memp_region_destroy(dbenv, infop)
- DB_ENV *dbenv;
- REGINFO *infop;
-{
- /*
- * This routine is called in two cases: when discarding the mutexes
- * from a previous Berkeley DB run, during recovery, and two, when
- * discarding the mutexes as we shut down the database environment.
- * In the latter case, we also need to discard shared memory segments,
- * this is the last time we use them, and the last region-specific
- * call we make.
- */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- MPOOL *mp;
-
- mp = R_ADDR(infop, infop->rp->primary);
-
- /* Destroy mutexes. */
- __db_shlocks_destroy(infop, R_ADDR(infop, mp->maint_off));
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, R_ADDR(infop, mp->maint_off));
-#endif
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, infop->primary);
-}
diff --git a/db/mp/mp_register.c b/db/mp/mp_register.c
index 0294fd5f0..1ca5f8311 100644
--- a/db/mp/mp_register.c
+++ b/db/mp/mp_register.c
@@ -1,20 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_register.c,v 11.26 2004/07/15 15:52:54 sue Exp $
+ * $Id: mp_register.c,v 12.11 2006/08/24 14:46:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
@@ -33,18 +28,17 @@ __memp_register_pp(dbenv, ftype, pgin, pgout)
int (*pgin) __P((DB_ENV *, db_pgno_t, void *, DBT *));
int (*pgout) __P((DB_ENV *, db_pgno_t, void *, DBT *));
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int 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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv,
+ (__memp_register(dbenv, ftype, pgin, pgout)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -70,33 +64,46 @@ __memp_register(dbenv, ftype, pgin, pgout)
dbmp = dbenv->mp_handle;
/*
- * Chances are good that the item has already been registered, as the
- * DB access methods are the folks that call this routine. If already
- * registered, just update the entry, although it's probably unchanged.
+ * We keep the DB pgin/pgout functions outside of the linked list
+ * to avoid locking/unlocking the linked list on every page I/O.
+ *
+ * The Berkeley DB I/O conversion functions are registered when the
+ * environment is first created, so there's no need for locking here.
+ */
+ if (ftype == DB_FTYPE_SET) {
+ if (dbmp->pg_inout != NULL)
+ return (0);
+ if ((ret =
+ __os_malloc(dbenv, sizeof(DB_MPREG), &dbmp->pg_inout)) != 0)
+ return (ret);
+ dbmp->pg_inout->ftype = ftype;
+ dbmp->pg_inout->pgin = pgin;
+ dbmp->pg_inout->pgout = pgout;
+ return (0);
+ }
+
+ /*
+ * The item may already have been registered. If already registered,
+ * just update the entry, although it's probably unchanged.
*/
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- for (mpreg = LIST_FIRST(&dbmp->dbregq);
- mpreg != NULL; mpreg = LIST_NEXT(mpreg, q))
+ MUTEX_LOCK(dbenv, dbmp->mutex);
+ LIST_FOREACH(mpreg, &dbmp->dbregq, q)
if (mpreg->ftype == ftype) {
mpreg->pgin = pgin;
mpreg->pgout = pgout;
break;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- if (mpreg != NULL)
- return (0);
-
- /* New entry. */
- if ((ret = __os_malloc(dbenv, sizeof(DB_MPREG), &mpreg)) != 0)
- return (ret);
- mpreg->ftype = ftype;
- mpreg->pgin = pgin;
- mpreg->pgout = pgout;
+ if (mpreg == NULL) { /* New entry. */
+ if ((ret = __os_malloc(dbenv, sizeof(DB_MPREG), &mpreg)) != 0)
+ return (ret);
+ mpreg->ftype = ftype;
+ mpreg->pgin = pgin;
+ mpreg->pgout = pgout;
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- LIST_INSERT_HEAD(&dbmp->dbregq, mpreg, q);
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ LIST_INSERT_HEAD(&dbmp->dbregq, mpreg, q);
+ }
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
return (0);
}
diff --git a/db/mp/mp_stat.c b/db/mp/mp_stat.c
index 3896b06da..b4d4544b5 100644
--- a/db/mp/mp_stat.c
+++ b/db/mp/mp_stat.c
@@ -1,39 +1,40 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_stat.c,v 11.82 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_stat.c,v 12.28 2006/09/11 14:53:42 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdio.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/log.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
#ifdef HAVE_STATISTICS
-static void __memp_print_bh
- __P((DB_ENV *, DB_MPOOL *, BH *, roff_t *, u_int32_t));
+static void __memp_print_bh __P((DB_ENV *,
+ DB_MPOOL *, const char *, BH *, roff_t *));
static int __memp_print_all __P((DB_ENV *, u_int32_t));
static int __memp_print_stats __P((DB_ENV *, u_int32_t));
-static void __memp_print_hash __P((DB_ENV *,
+static int __memp_print_hash __P((DB_ENV *,
DB_MPOOL *, REGINFO *, roff_t *, u_int32_t));
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 *, u_int32_t));
+ DB_ENV *, REGINFO *, MPOOL *, DB_MPOOL_STAT *, u_int32_t));
+static int __memp_file_stats __P((DB_ENV *,
+ MPOOLFILE *, void *, u_int32_t *, u_int32_t));
+static int __memp_count_files __P((DB_ENV *,
+ MPOOLFILE *, void *, u_int32_t *, u_int32_t));
+static int __memp_get_files __P((DB_ENV *,
+ MPOOLFILE *, void *, u_int32_t *, u_int32_t));
+static int __memp_print_files __P((DB_ENV *,
+ MPOOLFILE *, void *, u_int32_t *, u_int32_t));
/*
* __memp_stat_pp --
@@ -49,7 +50,8 @@ __memp_stat_pp(dbenv, gspp, fspp, flags)
DB_MPOOL_FSTAT ***fspp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -59,12 +61,9 @@ __memp_stat_pp(dbenv, gspp, fspp, flags)
"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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_stat(dbenv, gspp, fspp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -80,14 +79,13 @@ __memp_stat(dbenv, gspp, fspp, flags)
u_int32_t flags;
{
DB_MPOOL *dbmp;
- DB_MPOOL_FSTAT **tfsp, *tstruct;
+ DB_MPOOL_FSTAT **tfsp;
DB_MPOOL_STAT *sp;
MPOOL *c_mp, *mp;
- MPOOLFILE *mfp;
- size_t len, nlen;
- u_int32_t pages, pagesize, i;
+ size_t len;
+ u_int32_t i, st_bytes, st_gbytes, st_hash_buckets, st_pages;
+ u_int32_t tmp_wait, tmp_nowait;
int ret;
- char *name, *tname;
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
@@ -112,12 +110,12 @@ __memp_stat(dbenv, gspp, fspp, flags)
sp->st_ncache = dbmp->nreg;
sp->st_regsize = dbmp->reginfo[0].rp->size;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
sp->st_mmapsize = mp->mp_mmapsize;
sp->st_maxopenfd = mp->mp_maxopenfd;
sp->st_maxwrite = mp->mp_maxwrite;
sp->st_maxwrite_sleep = mp->mp_maxwrite_sleep;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
/* Walk the cache list and accumulate the global information. */
for (i = 0; i < mp->nreg; ++i) {
@@ -148,11 +146,12 @@ __memp_stat(dbenv, gspp, fspp, flags)
* 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;
+ __memp_stat_wait(
+ dbenv, &dbmp->reginfo[i], c_mp, sp, flags);
+ __mutex_set_wait_info(dbenv,
+ c_mp->mtx_region, &tmp_wait, &tmp_nowait);
+ sp->st_region_nowait += tmp_nowait;
+ sp->st_region_wait += tmp_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 <
@@ -166,14 +165,19 @@ __memp_stat(dbenv, gspp, fspp, flags)
c_mp->stat.st_alloc_max_pages;
if (LF_ISSET(DB_STAT_CLEAR)) {
- MUTEX_CLEAR(&dbmp->reginfo[i].rp->mutex);
+ __mutex_clear(dbenv, c_mp->mtx_region);
- R_LOCK(dbenv, dbmp->reginfo);
- pages = c_mp->stat.st_pages;
+ MPOOL_SYSTEM_LOCK(dbenv);
+ st_bytes = c_mp->stat.st_bytes;
+ st_gbytes = c_mp->stat.st_gbytes;
+ st_hash_buckets = c_mp->stat.st_hash_buckets;
+ st_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);
+ c_mp->stat.st_bytes = st_bytes;
+ c_mp->stat.st_gbytes = st_gbytes;
+ c_mp->stat.st_hash_buckets = st_hash_buckets;
+ c_mp->stat.st_pages = st_pages;
+ MPOOL_SYSTEM_UNLOCK(dbenv);
}
}
@@ -185,22 +189,9 @@ __memp_stat(dbenv, gspp, fspp, flags)
* 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_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);
+ if ((ret = __memp_walk_files(dbenv, mp, __memp_file_stats,
+ sp, NULL, fspp == NULL ? LF_ISSET(DB_STAT_CLEAR) : 0)) != 0)
+ return (ret);
}
/* Per-file statistics. */
@@ -208,62 +199,144 @@ __memp_stat(dbenv, gspp, fspp, flags)
*fspp = NULL;
/* Count the MPOOLFILE structures. */
- R_LOCK(dbenv, dbmp->reginfo);
- for (i = 0, len = 0,
- mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
- mfp != NULL;
- ++i, mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile))
- len += sizeof(DB_MPOOL_FSTAT *) +
- sizeof(DB_MPOOL_FSTAT) +
- strlen(__memp_fns(dbmp, mfp)) + 1;
- len += sizeof(DB_MPOOL_FSTAT *); /* Trailing NULL */
- R_UNLOCK(dbenv, dbmp->reginfo);
+ i = 0;
+ len = 0;
+ if ((ret = __memp_walk_files(dbenv,
+ mp, __memp_count_files, &len, &i, flags)) != 0)
+ return (ret);
if (i == 0)
return (0);
+ len += sizeof(DB_MPOOL_FSTAT *); /* Trailing NULL */
/* Allocate space */
if ((ret = __os_umalloc(dbenv, len, fspp)) != 0)
return (ret);
- /*
- * Build each individual entry. We assume that an array of
- * pointers are aligned correctly to be followed by an array
- * of structures, which should be safe (in this particular
- * case, the first element of the structure is a pointer, so
- * we're doubly safe). The array is followed by space for
- * the text file names.
- *
- * Add 1 to i because we need to skip over the NULL.
- */
tfsp = *fspp;
- tstruct = (DB_MPOOL_FSTAT *)(tfsp + i + 1);
- tname = (char *)(tstruct + i);
+ *tfsp = NULL;
/*
* 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 && 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);
- }
- R_UNLOCK(dbenv, dbmp->reginfo);
+ if ((ret = __memp_walk_files(dbenv,
+ mp, __memp_get_files, &tfsp, &i, flags)) != 0)
+ return (ret);
- *tfsp = NULL;
+ *++tfsp = NULL;
+ }
+
+ return (0);
+}
+
+static int
+__memp_file_stats(dbenv, mfp, argp, countp, flags)
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ void *argp;
+ u_int32_t *countp;
+ u_int32_t flags;
+{
+ DB_MPOOL_STAT *sp;
+ u_int32_t pagesize;
+
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(countp, NULL);
+
+ sp = argp;
+
+ 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_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 (LF_ISSET(DB_STAT_CLEAR)) {
+ pagesize = mfp->stat.st_pagesize;
+ memset(&mfp->stat, 0, sizeof(mfp->stat));
+ mfp->stat.st_pagesize = pagesize;
+ }
+ return (0);
+}
+
+static int
+__memp_count_files(dbenv, mfp, argp, countp, flags)
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ void *argp;
+ u_int32_t *countp;
+ u_int32_t flags;
+{
+ DB_MPOOL *dbmp;
+ size_t len;
+
+ COMPQUIET(flags, 0);
+ dbmp = dbenv->mp_handle;
+ len = *(size_t *)argp;
+
+ (*countp)++;
+ len += sizeof(DB_MPOOL_FSTAT *) +
+ sizeof(DB_MPOOL_FSTAT) + strlen(__memp_fns(dbmp, mfp)) + 1;
+
+ *(size_t *)argp = len;
+ return (0);
+}
+
+/*
+ * __memp_get_files --
+ * get file specific statistics
+ *
+ * Build each individual entry. We assume that an array of pointers are
+ * aligned correctly to be followed by an array of structures, which should
+ * be safe (in this particular case, the first element of the structure
+ * is a pointer, so we're doubly safe). The array is followed by space
+ * for the text file names.
+ */
+static int
+__memp_get_files(dbenv, mfp, argp, countp, flags)
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ void *argp;
+ u_int32_t *countp;
+ u_int32_t flags;
+{
+ DB_MPOOL *dbmp;
+ DB_MPOOL_FSTAT **tfsp, *tstruct;
+ char *name, *tname;
+ size_t nlen;
+ u_int32_t pagesize;
+
+ if (*countp == 0)
+ return (0);
+
+ dbmp = dbenv->mp_handle;
+ tfsp = *(DB_MPOOL_FSTAT ***)argp;
+
+ if (*tfsp == NULL) {
+ /* Add 1 to count because we need to skip over the NULL. */
+ tstruct = (DB_MPOOL_FSTAT *)(tfsp + *countp + 1);
+ tname = (char *)(tstruct + *countp);
+ *tfsp = tstruct;
+ } else {
+ tstruct = *tfsp + 1;
+ tname = (*tfsp)->file_name + strlen((*tfsp)->file_name) + 1;
+ *++tfsp = tstruct;
+ }
+
+ name = __memp_fns(dbmp, mfp);
+ nlen = strlen(name) + 1;
+ memcpy(tname, name, nlen);
+ *tstruct = mfp->stat;
+ tstruct->file_name = tname;
+
+ *(DB_MPOOL_FSTAT ***)argp = tfsp;
+ (*countp)--;
+
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ pagesize = mfp->stat.st_pagesize;
+ memset(&mfp->stat, 0, sizeof(mfp->stat));
+ mfp->stat.st_pagesize = pagesize;
}
return (0);
}
@@ -279,7 +352,8 @@ __memp_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -291,12 +365,9 @@ __memp_stat_print_pp(dbenv, flags)
"DB_ENV->memp_stat_print", flags, DB_STAT_MEMP_FLAGS)) != 0)
return (ret);
- rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
- ret = __memp_stat_print(dbenv, flags);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_stat_print(dbenv, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -393,19 +464,26 @@ __memp_print_stats(dbenv, flags)
__db_dl(dbenv, "The longest hash chain searched for a page",
(u_long)gsp->st_hash_longest);
__db_dl(dbenv,
- "Total number of hash buckets examined for page location",
+ "Total number of hash chain entries checked for page",
(u_long)gsp->st_hash_examined);
__db_dl_pct(dbenv,
"The number of hash bucket locks that required waiting",
(u_long)gsp->st_hash_wait, DB_PCT(
gsp->st_hash_wait, gsp->st_hash_wait + gsp->st_hash_nowait), NULL);
- __db_dl(dbenv,
+ __db_dl_pct(dbenv,
"The maximum number of times any hash bucket lock was waited for",
- (u_long)gsp->st_hash_max_wait);
+ (u_long)gsp->st_hash_max_wait, DB_PCT(gsp->st_hash_max_wait,
+ gsp->st_hash_max_wait + gsp->st_hash_max_nowait), NULL);
__db_dl_pct(dbenv,
"The number of region locks that required waiting",
(u_long)gsp->st_region_wait, DB_PCT(gsp->st_region_wait,
gsp->st_region_wait + gsp->st_region_nowait), NULL);
+ __db_dl(dbenv, "The number of buffers frozen",
+ (u_long)gsp->st_mvcc_frozen);
+ __db_dl(dbenv, "The number of buffers thawed",
+ (u_long)gsp->st_mvcc_thawed);
+ __db_dl(dbenv, "The number of frozen buffers freed",
+ (u_long)gsp->st_mvcc_freed);
__db_dl(dbenv, "The number of page allocations", (u_long)gsp->st_alloc);
__db_dl(dbenv,
"The number of hash buckets examined during allocations",
@@ -417,6 +495,7 @@ __memp_print_stats(dbenv, flags)
(u_long)gsp->st_alloc_pages);
__db_dl(dbenv, "The max number of pages examined for an allocation",
(u_long)gsp->st_alloc_max_pages);
+ __db_dl(dbenv, "Threads waited on page I/O", (u_long)gsp->st_io_wait);
for (tfsp = fsp; fsp != NULL && *tfsp != NULL; ++tfsp) {
if (LF_ISSET(DB_STAT_ALL))
@@ -454,18 +533,6 @@ __memp_print_all(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- static const FN fn[] = {
- { MP_CAN_MMAP, "MP_CAN_MMAP" },
- { MP_DIRECT, "MP_DIRECT" },
- { MP_EXTENT, "MP_EXTENT" },
- { MP_FAKE_DEADFILE, "deadfile" },
- { MP_FAKE_FILEWRITTEN, "file written" },
- { MP_FAKE_NB, "no backing file" },
- { MP_FAKE_UOC, "unlink on close" },
- { MP_NOT_DURABLE, "not durable" },
- { MP_TEMP, "MP_TEMP" },
- { 0, NULL }
- };
static const FN cfn[] = {
{ DB_MPOOL_NOFILE, "DB_MPOOL_NOFILE" },
{ DB_MPOOL_UNLINK, "DB_MPOOL_UNLINK" },
@@ -474,20 +541,22 @@ __memp_print_all(dbenv, flags)
DB_MPOOL *dbmp;
DB_MPOOLFILE *dbmfp;
MPOOL *mp;
- MPOOLFILE *mfp;
roff_t fmap[FMAP_ENTRIES + 1];
- u_int32_t i, mfp_flags;
- int cnt;
+ u_int32_t i, cnt;
+ int ret;
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
+ ret = 0;
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
__db_print_reginfo(dbenv, dbmp->reginfo, "Mpool");
-
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+
__db_msg(dbenv, "MPOOL structure:");
+ __mutex_print_debug_single(
+ dbenv, "MPOOL region mutex", mp->mtx_region, flags);
STAT_LSN("Maximum checkpoint LSN", &mp->lsn);
STAT_ULONG("Hash table entries", mp->htab_buckets);
STAT_ULONG("Hash table last-checked", mp->last_checked);
@@ -496,16 +565,16 @@ __memp_print_all(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB_MPOOL handle information:");
- __db_print_mutex(
- dbenv, NULL, dbmp->mutexp, "DB_MPOOL handle mutex", flags);
+ __mutex_print_debug_single(
+ dbenv, "DB_MPOOL handle mutex", dbmp->mutex, flags);
STAT_ULONG("Underlying cache regions", dbmp->nreg);
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB_MPOOLFILE structures:");
for (cnt = 0, dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q), ++cnt) {
- __db_msg(dbenv, "File #%d: %s: per-process, %s",
- cnt + 1, __memp_fn(dbmfp),
+ __db_msg(dbenv, "File #%lu: %s: per-process, %s",
+ (u_long)cnt + 1, __memp_fn(dbmfp),
F_ISSET(dbmfp, MP_READONLY) ? "readonly" : "read/write");
STAT_ULONG("Reference count", dbmfp->ref);
STAT_ULONG("Pinned block reference count", dbmfp->ref);
@@ -516,49 +585,19 @@ __memp_print_all(dbenv, flags)
STAT_ULONG("Max gbytes", dbmfp->gbytes);
STAT_ULONG("Max bytes", dbmfp->bytes);
STAT_ULONG("Cache priority", dbmfp->priority);
- STAT_HEX("mmap address", dbmfp->addr);
+ STAT_POINTER("mmap address", dbmfp->addr);
STAT_ULONG("mmap length", dbmfp->len);
__db_prflags(dbenv, NULL, dbmfp->flags, cfn, NULL, "\tFlags");
- __db_print_fh(dbenv, dbmfp->fhp, flags);
+ __db_print_fh(dbenv, "File handle", dbmfp->fhp, flags);
}
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "MPOOLFILE structures:");
- for (cnt = 0, mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
- mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile), ++cnt) {
- __db_msg(dbenv, "File #%d: %s", cnt + 1, __memp_fns(dbmp, mfp));
- __db_print_mutex(dbenv, NULL, &mfp->mutex, "Mutex", flags);
-
- MUTEX_LOCK(dbenv, &mfp->mutex);
- STAT_ULONG("Reference count", mfp->mpf_cnt);
- STAT_ULONG("Block count", mfp->block_cnt);
- STAT_ULONG("Last page number", mfp->last_pgno);
- STAT_ULONG("Original last page number", mfp->orig_last_pgno);
- STAT_ULONG("Maximum page number", mfp->maxpgno);
- STAT_LONG("Type", mfp->ftype);
- STAT_LONG("Priority", mfp->priority);
- STAT_LONG("Page's LSN offset", mfp->lsn_off);
- STAT_LONG("Page's clear length", mfp->clear_len);
-
- __db_print_fileid(dbenv,
- R_ADDR(dbmp->reginfo, mfp->fileid_off), "\tID");
-
- 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(dbenv, NULL, mfp_flags, fn, NULL, "\tFlags");
-
- if (cnt < FMAP_ENTRIES)
- fmap[cnt] = R_OFFSET(dbmp->reginfo, mfp);
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
- }
- R_UNLOCK(dbenv, dbmp->reginfo);
+ cnt = 0;
+ if ((ret = __memp_walk_files(dbenv,
+ mp, __memp_print_files, fmap, &cnt, flags)) != 0)
+ return (ret);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
if (cnt < FMAP_ENTRIES)
fmap[cnt] = INVALID_ROFF;
@@ -569,9 +608,73 @@ __memp_print_all(dbenv, flags)
for (i = 0; i < mp->nreg; ++i) {
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "Cache #%d:", i + 1);
- __memp_print_hash(dbenv, dbmp, &dbmp->reginfo[i], fmap, flags);
+ if ((ret = __memp_print_hash(
+ dbenv, dbmp, &dbmp->reginfo[i], fmap, flags)) != 0)
+ break;
}
+ return (ret);
+}
+
+static int
+__memp_print_files(dbenv, mfp, argp, countp, flags)
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ void *argp;
+ u_int32_t *countp;
+ u_int32_t flags;
+{
+ roff_t *fmap;
+ DB_MPOOL *dbmp;
+ u_int32_t mfp_flags;
+ static const FN fn[] = {
+ { MP_CAN_MMAP, "MP_CAN_MMAP" },
+ { MP_DIRECT, "MP_DIRECT" },
+ { MP_EXTENT, "MP_EXTENT" },
+ { MP_FAKE_DEADFILE, "deadfile" },
+ { MP_FAKE_FILEWRITTEN, "file written" },
+ { MP_FAKE_NB, "no backing file" },
+ { MP_FAKE_UOC, "unlink on close" },
+ { MP_NOT_DURABLE, "not durable" },
+ { MP_TEMP, "MP_TEMP" },
+ { 0, NULL }
+ };
+
+ dbmp = dbenv->mp_handle;
+ fmap = argp;
+
+ __db_msg(dbenv, "File #%d: %s", *countp + 1, __memp_fns(dbmp, mfp));
+ __mutex_print_debug_single(dbenv, "Mutex", mfp->mutex, flags);
+
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ STAT_ULONG("Reference count", mfp->mpf_cnt);
+ STAT_ULONG("Block count", mfp->block_cnt);
+ STAT_ULONG("Last page number", mfp->last_pgno);
+ STAT_ULONG("Original last page number", mfp->orig_last_pgno);
+ STAT_ULONG("Maximum page number", mfp->maxpgno);
+ STAT_LONG("Type", mfp->ftype);
+ STAT_LONG("Priority", mfp->priority);
+ STAT_LONG("Page's LSN offset", mfp->lsn_off);
+ STAT_LONG("Page's clear length", mfp->clear_len);
+
+ __db_print_fileid(dbenv,
+ R_ADDR(dbmp->reginfo, mfp->fileid_off), "\tID");
+
+ 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(dbenv, NULL, mfp_flags, fn, NULL, "\tFlags");
+
+ if (*countp < FMAP_ENTRIES)
+ fmap[*countp] = R_OFFSET(dbmp->reginfo, mfp);
+ (*countp)++;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
return (0);
}
@@ -579,7 +682,7 @@ __memp_print_all(dbenv, flags)
* __memp_print_hash --
* Display hash bucket statistics for a cache.
*/
-static void
+static int
__memp_print_hash(dbenv, dbmp, reginfo, fmap, flags)
DB_ENV *dbenv;
DB_MPOOL *dbmp;
@@ -587,7 +690,7 @@ __memp_print_hash(dbenv, dbmp, reginfo, fmap, flags)
roff_t *fmap;
u_int32_t flags;
{
- BH *bhp;
+ BH *bhp, *vbhp;
DB_MPOOL_HASH *hp;
DB_MSGBUF mb;
MPOOL *c_mp;
@@ -599,26 +702,40 @@ __memp_print_hash(dbenv, dbmp, reginfo, fmap, flags)
/* Display the hash table list of BH's. */
__db_msg(dbenv,
"BH hash table (%lu hash slots)", (u_long)c_mp->htab_buckets);
- __db_msg(dbenv, "bucket #: priority, mutex");
- __db_msg(dbenv,
- "\tpageno, file, ref, LSN, mutex, address, priority, flags");
+ __db_msg(dbenv, "bucket #: priority, I/O wait, [mutex]");
+ __db_msg(dbenv, "\tpageno, file, ref, LSN, address, priority, flags");
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) {
- __db_msgadd(dbenv, &mb, "bucket %lu: %lu, ",
- (u_long)bucket, (u_long)hp->hash_priority);
- __db_print_mutex(
- dbenv, &mb, &hp->hash_mutex, ":", flags);
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ if ((bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) != NULL) {
+ __db_msgadd(dbenv, &mb, "bucket %lu: %lu, %lu ",
+ (u_long)bucket, (u_long)hp->hash_io_wait,
+ (u_long)hp->hash_priority);
+ if (hp->hash_frozen != 0)
+ __db_msgadd(dbenv, &mb, "(MVCC %lu/%lu/%lu) ",
+ (u_long)hp->hash_frozen,
+ (u_long)hp->hash_thawed,
+ (u_long)hp->hash_frozen_freed);
+ __mutex_print_debug_stats(
+ dbenv, &mb, hp->mtx_hash, flags);
DB_MSGBUF_FLUSH(dbenv, &mb);
}
- for (; bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh))
- __memp_print_bh(dbenv, dbmp, bhp, fmap, flags);
-
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ for (; bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh)) {
+ __memp_print_bh(dbenv, dbmp, NULL, bhp, fmap);
+
+ /* Print the version chain, if it exists. */
+ for (vbhp = SH_CHAIN_PREV(bhp, vc, __bh);
+ vbhp != NULL;
+ vbhp = SH_CHAIN_PREV(vbhp, vc, __bh)) {
+ __memp_print_bh(dbenv, dbmp,
+ " next:\t", vbhp, fmap);
+ }
+ }
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
}
+
+ return (0);
}
/*
@@ -626,18 +743,20 @@ __memp_print_hash(dbenv, dbmp, reginfo, fmap, flags)
* Display a BH structure.
*/
static void
-__memp_print_bh(dbenv, dbmp, bhp, fmap, flags)
+__memp_print_bh(dbenv, dbmp, prefix, bhp, fmap)
DB_ENV *dbenv;
DB_MPOOL *dbmp;
+ const char *prefix;
BH *bhp;
roff_t *fmap;
- u_int32_t flags;
{
static const FN fn[] = {
{ BH_CALLPGIN, "callpgin" },
{ BH_DIRTY, "dirty" },
{ BH_DIRTY_CREATE, "created" },
{ BH_DISCARD, "discard" },
+ { BH_FREED, "freed" },
+ { BH_FROZEN, "frozen" },
{ BH_LOCKED, "locked" },
{ BH_TRASH, "trash" },
{ 0, NULL }
@@ -647,21 +766,31 @@ __memp_print_bh(dbenv, dbmp, bhp, fmap, flags)
DB_MSGBUF_INIT(&mb);
+ if (prefix != NULL)
+ __db_msgadd(dbenv, &mb, "%s", prefix);
+ else
+ __db_msgadd(dbenv, &mb, "\t");
+
for (i = 0; i < FMAP_ENTRIES; ++i)
if (fmap[i] == INVALID_ROFF || fmap[i] == bhp->mf_offset)
break;
if (fmap[i] == INVALID_ROFF)
- __db_msgadd(dbenv, &mb, "\t%5lu, %lu, ",
+ __db_msgadd(dbenv, &mb, "%5lu, %lu, ",
(u_long)bhp->pgno, (u_long)bhp->mf_offset);
else
__db_msgadd(
- dbenv, &mb, "\t%5lu, #%d, ", (u_long)bhp->pgno, i + 1);
-
- __db_msgadd(dbenv, &mb, "%2lu, %lu/%lu, ", (u_long)bhp->ref,
- (u_long)LSN(bhp->buf).file, (u_long)LSN(bhp->buf).offset);
- __db_print_mutex(dbenv, &mb, &bhp->mutex, ", ", flags);
- __db_msgadd(dbenv, &mb, "%#08lx, %lu",
+ dbenv, &mb, "%5lu, #%d, ", (u_long)bhp->pgno, i + 1);
+
+ __db_msgadd(dbenv, &mb, "%2lu%s, %lu/%lu", (u_long)bhp->ref,
+ bhp->ref_sync == 0 ? "" : " (sync-lock)",
+ F_ISSET(bhp, BH_FROZEN) ? 0 : (u_long)LSN(bhp->buf).file,
+ F_ISSET(bhp, BH_FROZEN) ? 0 : (u_long)LSN(bhp->buf).offset);
+ if (bhp->td_off != INVALID_ROFF)
+ __db_msgadd(dbenv, &mb, " (@%lu/%lu)",
+ (u_long)VISIBLE_LSN(dbenv, bhp)->file,
+ (u_long)VISIBLE_LSN(dbenv, bhp)->offset);
+ __db_msgadd(dbenv, &mb, ", %#08lx, %lu",
(u_long)R_OFFSET(dbmp->reginfo, bhp), (u_long)bhp->priority);
__db_prflags(dbenv, &mb, bhp->flags, fn, " (", ")");
DB_MSGBUF_FLUSH(dbenv, &mb);
@@ -672,27 +801,40 @@ __memp_print_bh(dbenv, dbmp, bhp, fmap, flags)
* Total hash bucket wait stats into the region.
*/
static void
-__memp_stat_wait(reginfo, mp, mstat, flags)
+__memp_stat_wait(dbenv, reginfo, mp, mstat, flags)
+ DB_ENV *dbenv;
REGINFO *reginfo;
MPOOL *mp;
DB_MPOOL_STAT *mstat;
u_int32_t flags;
{
DB_MPOOL_HASH *hp;
- DB_MUTEX *mutexp;
- u_int32_t i;
+ u_int32_t i, tmp_nowait, tmp_wait;
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;
-
+ __mutex_set_wait_info(
+ dbenv, hp->mtx_hash, &tmp_wait, &tmp_nowait);
+ mstat->st_hash_nowait += tmp_nowait;
+ mstat->st_hash_wait += tmp_wait;
+ if (tmp_wait > mstat->st_hash_max_wait) {
+ mstat->st_hash_max_wait = tmp_wait;
+ mstat->st_hash_max_nowait = tmp_nowait;
+ }
if (LF_ISSET(DB_STAT_CLEAR))
- MUTEX_CLEAR(mutexp);
+ __mutex_clear(dbenv, hp->mtx_hash);
+
+ mstat->st_io_wait += hp->hash_io_wait;
+ mstat->st_mvcc_frozen += hp->hash_frozen;
+ mstat->st_mvcc_thawed += hp->hash_thawed;
+ mstat->st_mvcc_freed += hp->hash_frozen_freed;
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ hp->hash_io_wait = 0;
+ hp->hash_frozen = 0;
+ hp->hash_thawed = 0;
+ hp->hash_frozen_freed = 0;
+ }
}
}
diff --git a/db/mp/mp_sync.c b/db/mp/mp_sync.c
index 6aadab2c1..898ae5b6d 100644
--- a/db/mp/mp_sync.c
+++ b/db/mp/mp_sync.c
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_sync.c,v 11.98 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_sync.c,v 12.24 2006/08/24 14:46:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
@@ -30,6 +23,48 @@ typedef struct {
static int __bhcmp __P((const void *, const void *));
static int __memp_close_flush_files __P((DB_ENV *, DB_MPOOL *, int));
static int __memp_sync_files __P((DB_ENV *, DB_MPOOL *));
+static int __memp_sync_file __P((DB_ENV *,
+ MPOOLFILE *, void *, u_int32_t *, u_int32_t));
+
+/*
+ * __memp_walk_files --
+ * PUBLIC: int __memp_walk_files __P((DB_ENV *, MPOOL *,
+ * PUBLIC: int (*) __P((DB_ENV *, MPOOLFILE *, void *,
+ * PUBLIC: u_int32_t *, u_int32_t)), void *, u_int32_t *, u_int32_t));
+ */
+int
+__memp_walk_files(dbenv, mp, func, arg, countp, flags)
+ DB_ENV *dbenv;
+ MPOOL *mp;
+ int (*func)__P((DB_ENV *, MPOOLFILE *, void *, u_int32_t *, u_int32_t));
+ void *arg;
+ u_int32_t *countp;
+ u_int32_t flags;
+{
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ MPOOLFILE *mfp;
+ int i, ret, t_ret;
+
+ dbmp = dbenv->mp_handle;
+ ret = 0;
+
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+ for (i = 0; i < MPOOL_FILE_BUCKETS; i++, hp++) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(mfp, &hp->hash_bucket, q, __mpoolfile) {
+ if ((t_ret = func(dbenv,
+ mfp, arg, countp, flags)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0 && !LF_ISSET(DB_STAT_NOERROR))
+ break;
+ }
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
+ if (ret != 0 && !LF_ISSET(DB_STAT_NOERROR))
+ break;
+ }
+ return (ret);
+}
/*
* __memp_sync_pp --
@@ -42,7 +77,8 @@ __memp_sync_pp(dbenv, lsnp)
DB_ENV *dbenv;
DB_LSN *lsnp;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -56,12 +92,9 @@ __memp_sync_pp(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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_sync(dbenv, lsnp)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -85,24 +118,24 @@ __memp_sync(dbenv, lsnp)
/* If we've flushed to the requested LSN, return that information. */
if (lsnp != NULL) {
- R_LOCK(dbenv, dbmp->reginfo);
- if (log_compare(lsnp, &mp->lsn) <= 0) {
+ MPOOL_SYSTEM_LOCK(dbenv);
+ if (LOG_COMPARE(lsnp, &mp->lsn) <= 0) {
*lsnp = mp->lsn;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
return (0);
}
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
}
if ((ret = __memp_sync_int(dbenv, NULL, 0, DB_SYNC_CACHE, NULL)) != 0)
return (ret);
if (lsnp != NULL) {
- R_LOCK(dbenv, dbmp->reginfo);
- if (log_compare(lsnp, &mp->lsn) > 0)
+ MPOOL_SYSTEM_LOCK(dbenv);
+ if (LOG_COMPARE(lsnp, &mp->lsn) > 0)
mp->lsn = *lsnp;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
}
return (0);
@@ -119,19 +152,17 @@ __memp_fsync_pp(dbmfp)
DB_MPOOLFILE *dbmfp;
{
DB_ENV *dbenv;
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
dbenv = dbmfp->dbenv;
PANIC_CHECK(dbenv);
MPF_ILLEGAL_BEFORE_OPEN(dbmfp, "DB_MPOOLFILE->sync");
- rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
- ret = __memp_fsync(dbmfp);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_fsync(dbmfp)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -158,7 +189,7 @@ __memp_fsync(dbmfp)
if (F_ISSET(dbmfp, MP_READONLY))
return (0);
- if (F_ISSET(mfp, MP_TEMP))
+ if (F_ISSET(dbmfp->mfp, MP_TEMP) || dbmfp->mfp->no_backing_file)
return (0);
if (mfp->file_written == 0)
@@ -216,9 +247,9 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
BH_TRACK *bharray;
DB_MPOOL *dbmp;
DB_MPOOL_HASH *hp;
- DB_MUTEX *mutexp;
MPOOL *c_mp, *mp;
MPOOLFILE *mfp;
+ db_mutex_t mutex;
roff_t last_mf_offset;
u_int32_t ar_cnt, ar_max, i, n_cache, remaining, wrote;
int filecnt, hb_lock, maxopenfd, maxwrite, maxwrite_sleep;
@@ -230,11 +261,11 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
filecnt = pass = wrote = 0;
/* Get shared configuration information. */
- R_LOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_LOCK(dbenv);
maxopenfd = mp->mp_maxopenfd;
maxwrite = mp->mp_maxwrite;
maxwrite_sleep = mp->mp_maxwrite_sleep;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MPOOL_SYSTEM_UNLOCK(dbenv);
/* Assume one dirty page per bucket. */
ar_max = mp->nreg * mp->htab_buckets;
@@ -244,7 +275,7 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
/*
* Walk each cache's list of buffers and mark all dirty buffers to be
- * written and all pinned buffers to be potentially written, depending
+ * written and all dirty buffers to be potentially written, depending
* on our flags.
*/
for (ar_cnt = 0, n_cache = 0; n_cache < mp->nreg; ++n_cache) {
@@ -261,39 +292,21 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
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)) {
- /* Always ignore unreferenced, clean pages. */
- if (bhp->ref == 0 && !F_ISSET(bhp, BH_DIRTY))
- continue;
-
- /*
- * Checkpoints have to wait on all pinned pages,
- * as pages may be marked dirty when returned to
- * the cache.
- *
- * File syncs only wait on pages both pinned and
- * dirty. (We don't care if pages are marked
- * dirty when returned to the cache, that means
- * there's another writing thread and flushing
- * the cache for this handle is meaningless.)
- */
- if (op == DB_SYNC_FILE &&
- !F_ISSET(bhp, BH_DIRTY))
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ SH_TAILQ_FOREACH(bhp, &hp->hash_bucket, hq, __bh) {
+ /* Always ignore clean pages. */
+ if (!F_ISSET(bhp, BH_DIRTY))
continue;
mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
/*
- * Ignore temporary files -- this means you
- * can't even flush temporary files by handle.
- * (Checkpoint doesn't require temporary files
- * be flushed and the underlying buffer write
- * write routine may not be able to write it
- * anyway.)
+ * Ignore in-memory files, even if they are
+ * temp files to whom a backing file has been
+ * allocated.
*/
- if (F_ISSET(mfp, MP_TEMP))
+ if (mfp->no_backing_file ||
+ F_ISSET(mfp, MP_TEMP))
continue;
/*
@@ -330,7 +343,7 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
ar_max *= 2;
}
}
- MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
if (ret != 0)
goto err;
@@ -382,10 +395,9 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
continue;
/* Lock the hash bucket and find the buffer. */
- mutexp = &hp->hash_mutex;
- MUTEX_LOCK(dbenv, mutexp);
- for (bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
- bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh))
+ mutex = hp->mtx_hash;
+ MUTEX_LOCK(dbenv, mutex);
+ SH_TAILQ_FOREACH(bhp, &hp->hash_bucket, hq, __bh)
if (bhp->pgno == bharray[i].track_pgno &&
bhp->mf_offset == bharray[i].track_off)
break;
@@ -394,11 +406,11 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
* If we can't find the buffer we're done, somebody else had
* to have written it.
*
- * If the buffer isn't pinned or dirty, we're done, there's
- * no work needed.
+ * If the buffer isn't dirty, we're done, there's no work
+ * needed.
*/
- if (bhp == NULL || (bhp->ref == 0 && !F_ISSET(bhp, BH_DIRTY))) {
- MUTEX_UNLOCK(dbenv, mutexp);
+ if (bhp == NULL || !F_ISSET(bhp, BH_DIRTY)) {
+ MUTEX_UNLOCK(dbenv, mutex);
--remaining;
bharray[i].track_hp = NULL;
continue;
@@ -416,7 +428,7 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
* write it.
*/
if (F_ISSET(bhp, BH_LOCKED) || (bhp->ref != 0 && pass < 2)) {
- MUTEX_UNLOCK(dbenv, mutexp);
+ MUTEX_UNLOCK(dbenv, mutex);
if (op != DB_SYNC_CACHE && op != DB_SYNC_FILE) {
--remaining;
bharray[i].track_hp = NULL;
@@ -425,7 +437,7 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
}
/*
- * The buffer is either pinned or dirty.
+ * The buffer is dirty and may also be pinned.
*
* Set the sync wait-for count, used to count down outstanding
* references to this buffer as they are returned to the cache.
@@ -435,7 +447,6 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
/* Pin the buffer into memory and lock it. */
++bhp->ref;
F_SET(bhp, BH_LOCKED);
- MUTEX_LOCK(dbenv, &bhp->mutex);
/*
* Unlock the hash bucket and wait for the wait-for count to
@@ -450,11 +461,11 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
* If, when the wait-for count goes to 0, the buffer is found
* to be dirty, write it.
*/
- MUTEX_UNLOCK(dbenv, mutexp);
+ MUTEX_UNLOCK(dbenv, mutex);
for (wait_cnt = 1;
bhp->ref_sync != 0 && wait_cnt < 4; ++wait_cnt)
__os_sleep(dbenv, 1, 0);
- MUTEX_LOCK(dbenv, mutexp);
+ MUTEX_LOCK(dbenv, mutex);
hb_lock = 1;
/*
@@ -464,9 +475,9 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
if (maxopenfd != 0 && bhp->mf_offset != last_mf_offset) {
if (++filecnt >= maxopenfd) {
filecnt = 0;
- if ((ret = __memp_close_flush_files(
- dbenv, dbmp, 1)) != 0)
- break;
+ if ((t_ret = __memp_close_flush_files(
+ dbenv, dbmp, 1)) != 0 && ret == 0)
+ ret = t_ret;
}
last_mf_offset = bhp->mf_offset;
}
@@ -485,15 +496,20 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
* dirty, we write it. We only try to write the buffer once.
*/
if (bhp->ref_sync == 0 && F_ISSET(bhp, BH_DIRTY)) {
+ MUTEX_UNLOCK(dbenv, mutex);
hb_lock = 0;
- MUTEX_UNLOCK(dbenv, mutexp);
mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
- if ((ret = __memp_bhwrite(dbmp, hp, mfp, bhp, 1)) == 0)
+ if ((t_ret =
+ __memp_bhwrite(dbmp, hp, mfp, bhp, 1)) == 0)
++wrote;
- else
- __db_err(dbenv, "%s: unable to flush page: %lu",
+ else {
+ if (ret == 0)
+ ret = t_ret;
+ __db_errx
+ (dbenv, "%s: unable to flush page: %lu",
__memp_fns(dbmp, mfp), (u_long)bhp->pgno);
+ }
/*
* Avoid saturating the disk, sleep once we've done
@@ -512,21 +528,14 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
*
* We may or may not currently hold the hash bucket mutex. If
* the __memp_bhwrite -> __memp_pgwrite call was successful,
- * then __memp_pgwrite will have swapped the buffer lock for
- * the hash lock. All other call paths will leave us without
- * the hash bucket lock.
- *
- * The order of mutexes above was to acquire the buffer lock
- * while holding the hash bucket lock. Don't deadlock here,
- * release the buffer lock and then acquire the hash bucket
- * lock.
+ * __memp_pgwrite will have acquired the hash bucket lock; all
+ * other call paths will leave us without the hash bucket lock.
*/
if (F_ISSET(bhp, BH_LOCKED)) {
- F_CLR(bhp, BH_LOCKED);
- MUTEX_UNLOCK(dbenv, &bhp->mutex);
-
if (!hb_lock)
- MUTEX_LOCK(dbenv, mutexp);
+ MUTEX_LOCK(dbenv, mutex);
+
+ F_CLR(bhp, BH_LOCKED);
}
/*
@@ -535,12 +544,19 @@ __memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
*/
bhp->ref_sync = 0;
- /* Discard our reference and unlock the bucket. */
+ /* Discard our buffer reference. */
--bhp->ref;
- MUTEX_UNLOCK(dbenv, mutexp);
- if (ret != 0)
- break;
+ /*
+ * If a thread of control is waiting on this buffer, wake it up.
+ */
+ if (F_ISSET(hp, IO_WAITER)) {
+ F_CLR(hp, IO_WAITER);
+ MUTEX_UNLOCK(dbenv, hp->mtx_io);
+ }
+
+ /* Release the hash bucket mutex. */
+ MUTEX_UNLOCK(dbenv, mutex);
}
done: /*
@@ -568,6 +584,127 @@ err: __os_free(dbenv, bharray);
return (ret);
}
+static int
+__memp_sync_file(dbenv, mfp, argp, countp, flags)
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ void *argp;
+ u_int32_t *countp;
+ u_int32_t flags;
+{
+ DB_MPOOL *dbmp;
+ DB_MPOOLFILE *dbmfp;
+ int ret, t_ret;
+
+ COMPQUIET(countp, NULL);
+ COMPQUIET(flags, 0);
+
+ if (!mfp->file_written || mfp->no_backing_file ||
+ mfp->deadfile || F_ISSET(mfp, MP_TEMP))
+ return (0);
+ /*
+ * Pin the MPOOLFILE structure into memory, and release the
+ * region mutex allowing us to walk the linked list. We'll
+ * re-acquire that mutex to move to the next entry in the list.
+ *
+ * This works because we only need to flush current entries,
+ * we don't care about new entries being added, and the linked
+ * list is never re-ordered, a single pass is sufficient. It
+ * requires MPOOLFILE structures removed before we get to them
+ * be flushed to disk, but that's nothing new, they could have
+ * been removed while checkpoint was running, too.
+ *
+ * Once we have the MPOOLFILE lock, re-check the MPOOLFILE is
+ * not being discarded. (A thread removing the MPOOLFILE
+ * will: hold the MPOOLFILE mutex, set deadfile, drop the
+ * MPOOLFILE mutex and then acquire the region MUTEX to walk
+ * the linked list and remove the MPOOLFILE structure. Make
+ * sure the MPOOLFILE wasn't marked dead while we waited for
+ * the mutex.
+ */
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (!mfp->file_written || mfp->deadfile) {
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ return (0);
+ }
+ ++mfp->mpf_cnt;
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+
+ /*
+ * Look for an already open, writeable handle (fsync doesn't
+ * work on read-only Windows handles).
+ */
+ dbmp = dbenv->mp_handle;
+ MUTEX_LOCK(dbenv, dbmp->mutex);
+ TAILQ_FOREACH(dbmfp, &dbmp->dbmfq, q) {
+ if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY))
+ continue;
+ /*
+ * We don't want to hold the mutex while calling sync.
+ * Increment the DB_MPOOLFILE handle ref count to pin
+ * it into memory.
+ */
+ ++dbmfp->ref;
+ break;
+ }
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
+
+ /* If we don't find a handle we can use, open one. */
+ if (dbmfp == NULL) {
+ if ((ret = __memp_mf_sync(dbmp, mfp, 0)) != 0) {
+ __db_err(dbenv, ret,
+ "%s: unable to flush", (char *)
+ R_ADDR(dbmp->reginfo, mfp->path_off));
+ }
+ } else {
+ ret = __os_fsync(dbenv, dbmfp->fhp);
+
+ if ((t_ret = __memp_fclose(dbmfp, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+ /*
+ * Re-acquire the MPOOLFILE mutex, we need it to modify the
+ * reference count.
+ */
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ --mfp->mpf_cnt;
+
+ /*
+ * If we wrote the file and there are no open handles (or there
+ * is a single open handle, and it's the one we opened to write
+ * buffers during checkpoint), clear the file_written flag. We
+ * do this so that applications opening thousands of files don't
+ * loop here opening and flushing those files during checkpoint.
+ *
+ * The danger here is if a buffer were to be written as part of
+ * a checkpoint, and then not be flushed to disk. This cannot
+ * happen because we only clear file_written when there are no
+ * other users of the MPOOLFILE in the system, and, as we hold
+ * the region lock, no possibility of another thread of control
+ * racing with us to open a MPOOLFILE.
+ */
+ if (mfp->mpf_cnt == 0 || (mfp->mpf_cnt == 1 &&
+ dbmfp != NULL && F_ISSET(dbmfp, MP_FLUSH))) {
+ mfp->file_written = 0;
+
+ /*
+ * We may be the last reference for a MPOOLFILE, as we
+ * weren't holding the MPOOLFILE mutex when flushing
+ * it's buffers to disk. If we can discard it, set
+ * a flag to schedule a clean-out pass. (Not likely,
+ * I mean, what are the chances that there aren't any
+ * buffers in the pool? Regardless, it might happen.)
+ */
+ if (mfp->mpf_cnt == 0 && mfp->block_cnt == 0)
+ *(int *)argp = 1;
+ }
+
+ /* Unlock the MPOOLFILE, and move to the next entry. */
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
+ return (0);
+}
+
/*
* __memp_sync_files --
* Sync all the files in the environment, open or not.
@@ -577,83 +714,60 @@ int __memp_sync_files(dbenv, dbmp)
DB_ENV *dbenv;
DB_MPOOL *dbmp;
{
- DB_MPOOLFILE *dbmfp;
+ DB_MPOOL_HASH *hp;
MPOOL *mp;
- MPOOLFILE *mfp;
- int final_ret, ret;
+ MPOOLFILE *mfp, *next_mfp;
+ int i, need_discard_pass, ret;
- final_ret = 0;
+ need_discard_pass = 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->file_written ||
- mfp->deadfile || F_ISSET(mfp, MP_TEMP))
- continue;
+ ret = __memp_walk_files(dbenv,
+ mp, __memp_sync_file, &need_discard_pass, 0, DB_STAT_NOERROR);
- /*
- * 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 || F_ISSET(dbmfp, MP_READONLY))
+ /*
+ * We may need to do a last pass through the MPOOLFILE list -- if we
+ * were the last reference to an MPOOLFILE, we need to clean it out.
+ */
+ if (!need_discard_pass)
+ return (ret);
+
+ hp = R_ADDR(dbmp->reginfo, mp->ftab);
+ for (i = 0; i < MPOOL_FILE_BUCKETS; i++, hp++) {
+ MUTEX_LOCK(dbenv, hp->mtx_hash);
+ for (mfp = SH_TAILQ_FIRST(&hp->hash_bucket,
+ __mpoolfile); mfp != NULL; mfp = next_mfp) {
+ next_mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile);
+ /*
+ * Do a fast check -- we can check for zero/non-zero
+ * without a mutex on the MPOOLFILE. If likely to
+ * succeed, lock the MPOOLFILE down and look for real.
+ */
+ if (mfp->block_cnt != 0 || mfp->mpf_cnt != 0)
continue;
- ret = __os_fsync(dbenv, dbmfp->fhp);
- break;
- }
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- /* If we don't find one, open one. */
- 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;
- continue;
+ MUTEX_LOCK(dbenv, mfp->mutex);
+ if (mfp->block_cnt == 0 && mfp->mpf_cnt == 0)
+ (void)__memp_mf_discard(dbmp, mfp);
+ else
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
}
-
- /*
- * If we wrote the file and there are no open handles (or there
- * is a single open handle, and it's the one we opened to write
- * buffers during checkpoint), clear the file_written flag. We
- * do this so that applications opening thousands of files don't
- * loop here opening and flushing those files during checkpoint.
- *
- * The danger here is if a buffer were to be written as part of
- * a checkpoint, and then not be flushed to disk. This cannot
- * happen because we only clear file_written when there are no
- * other users of the MPOOLFILE in the system, and, as we hold
- * the region lock, no possibility of another thread of control
- * racing with us to open a MPOOLFILE.
- */
- if (mfp->mpf_cnt == 0 || (mfp->mpf_cnt == 1 &&
- dbmfp != NULL && F_ISSET(dbmfp, MP_FLUSH)))
- mfp->file_written = 0;
+ MUTEX_UNLOCK(dbenv, hp->mtx_hash);
}
- R_UNLOCK(dbenv, dbmp->reginfo);
-
- return (final_ret);
+ return (ret);
}
/*
* __memp_mf_sync --
- * Flush an MPOOLFILE.
+ * Flush an MPOOLFILE, when no currently open handle is available.
*
- * Should only be used when the file is not already open in this process.
- *
- * PUBLIC: int __memp_mf_sync __P((DB_MPOOL *, MPOOLFILE *));
+ * PUBLIC: int __memp_mf_sync __P((DB_MPOOL *, MPOOLFILE *, int));
*/
int
-__memp_mf_sync(dbmp, mfp)
+__memp_mf_sync(dbmp, mfp, region_locked)
DB_MPOOL *dbmp;
MPOOLFILE *mfp;
+ int region_locked;
{
DB_ENV *dbenv;
DB_FH *fhp;
@@ -663,12 +777,14 @@ __memp_mf_sync(dbmp, mfp)
dbenv = dbmp->dbenv;
/*
- * Expects caller to be holding the region lock: we're using the path
- * name and __memp_nameop might try and rename the file.
+ * We need to be holding the region lock: we're using the path name
+ * and __memp_nameop might try and rename the file.
*/
+ if (!region_locked)
+ MPOOL_SYSTEM_LOCK(dbenv);
+
if ((ret = __db_appname(dbenv, DB_APP_DATA,
- R_ADDR(dbmp->reginfo, mfp->path_off), 0, NULL,
- &rpath)) == 0) {
+ 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 =
@@ -678,6 +794,9 @@ __memp_mf_sync(dbmp, mfp)
__os_free(dbenv, rpath);
}
+ if (!region_locked)
+ MPOOL_SYSTEM_UNLOCK(dbenv);
+
return (ret);
}
@@ -708,33 +827,34 @@ __memp_close_flush_files(dbenv, dbmp, dosync)
* MP_FLUSH flag. Here we walk through our file descriptor list,
* and, if a file was opened by __memp_bhwrite(), we close it.
*/
-retry: MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
- dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q))
+retry: MUTEX_LOCK(dbenv, dbmp->mutex);
+ TAILQ_FOREACH(dbmfp, &dbmp->dbmfq, q)
if (F_ISSET(dbmfp, MP_FLUSH)) {
F_CLR(dbmfp, MP_FLUSH);
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
if (dosync) {
- if ((ret = __os_fsync(dbenv, dbmfp->fhp)) != 0)
- return (ret);
/*
- * If the file is clean and we have the only
- * open handle on the file, clear the dirty
- * flag so we don't re-open and sync it again.
+ * If we have the only open handle on the file,
+ * clear the dirty flag so we don't re-open and
+ * sync it again when discarding the MPOOLFILE
+ * structure. Clear the flag before the sync
+ * so can't race with a thread writing the file.
*/
mfp = dbmfp->mfp;
if (mfp->mpf_cnt == 1) {
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, mfp->mutex);
if (mfp->mpf_cnt == 1)
mfp->file_written = 0;
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, mfp->mutex);
}
+ if ((ret = __os_fsync(dbenv, dbmfp->fhp)) != 0)
+ return (ret);
}
if ((ret = __memp_fclose(dbmfp, 0)) != 0)
return (ret);
goto retry;
}
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbmp->mutex);
return (0);
}
diff --git a/db/mp/mp_trickle.c b/db/mp/mp_trickle.c
index fc3468904..d1d3853aa 100644
--- a/db/mp/mp_trickle.c
+++ b/db/mp/mp_trickle.c
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mp_trickle.c,v 11.35 2004/10/15 16:59:43 bostic Exp $
+ * $Id: mp_trickle.c,v 12.9 2006/08/24 14:46:15 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
@@ -33,18 +26,16 @@ __memp_trickle_pp(dbenv, pct, nwrotep)
DB_ENV *dbenv;
int pct, *nwrotep;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__memp_trickle(dbenv, pct, nwrotep)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -59,8 +50,8 @@ __memp_trickle(dbenv, pct, nwrotep)
{
DB_MPOOL *dbmp;
MPOOL *c_mp, *mp;
- u_int32_t dirty, i, total, dtmp, wrote;
- int n, ret;
+ u_int32_t clean, dirty, i, need_clean, total, dtmp, wrote;
+ int ret;
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
@@ -68,20 +59,21 @@ __memp_trickle(dbenv, pct, nwrotep)
if (nwrotep != NULL)
*nwrotep = 0;
- if (pct < 1 || pct > 100)
+ if (pct < 1 || pct > 100) {
+ __db_errx(dbenv,
+ "DB_ENV->memp_trickle: %d: percent must be between 1 and 100",
+ pct);
return (EINVAL);
+ }
/*
- * If there are sufficient clean buffers, no buffers or no dirty
- * buffers, we're done.
+ * Loop through the caches counting total/dirty buffers.
*
* XXX
* 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.
+ * than one page size, as a free 512B buffer may not be equivalent to
+ * having a free 8KB buffer.
*/
for (ret = 0, i = dirty = total = 0; i < mp->nreg; ++i) {
c_mp = dbmp->reginfo[i].primary;
@@ -91,15 +83,20 @@ __memp_trickle(dbenv, pct, nwrotep)
}
/*
- * !!!
- * Be careful in modifying this calculation, total may be 0.
+ * If there are sufficient clean buffers, no buffers or no dirty
+ * buffers, we're done.
*/
- n = ((total * (u_int)pct) / 100) - (total - dirty);
- if (dirty == 0 || n <= 0)
+ if (total == 0 || dirty == 0)
+ return (0);
+
+ clean = total - dirty;
+ need_clean = (total * (u_int)pct) / 100;
+ if (clean >= need_clean)
return (0);
+ need_clean -= clean;
ret = __memp_sync_int(
- dbenv, NULL, (u_int32_t)n, DB_SYNC_TRICKLE, &wrote);
+ dbenv, NULL, need_clean, DB_SYNC_TRICKLE, &wrote);
mp->stat.st_page_trickle += wrote;
if (nwrotep != NULL)
*nwrotep = (int)wrote;
diff --git a/db/mutex/README b/db/mutex/README
index 323c34f1e..23527586a 100644
--- a/db/mutex/README
+++ b/db/mutex/README
@@ -1,35 +1,37 @@
-# $Id: README,v 11.2 1999/11/21 18:12:48 bostic Exp $
+# $Id: README,v 12.1 2005/07/20 16:51:55 bostic Exp $
Note: this only applies to locking using test-and-set and fcntl calls,
pthreads were added after this was written.
-Resource locking routines: lock based on a db_mutex_t. All this gunk
+Resource locking routines: lock based on a DB_MUTEX. All this gunk
(including trying to make assembly code portable), is necessary because
System V semaphores require system calls for uncontested locks and we
don't want to make two system calls per resource lock.
-First, this is how it works. The db_mutex_t structure contains a resource
+First, this is how it works. The DB_MUTEX structure contains a resource
test-and-set lock (tsl), a file offset, a pid for debugging and statistics
information.
-If HAVE_MUTEX_THREADS is defined (i.e. we know how to do test-and-sets
-for this compiler/architecture combination), we try and lock the resource
-tsl __os_spin() times. If we can't acquire the lock that way, we use a
-system call to sleep for 1ms, 2ms, 4ms, etc. (The time is bounded at 1
-second, just in case.) Using the timer backoff means that there are two
-assumptions: that locks are held for brief periods (never over system
-calls or I/O) and that locks are not hotly contested.
-
-If HAVE_MUTEX_THREADS is not defined, i.e. we can't do test-and-sets, we
-use a file descriptor to do byte locking on a file at a specified offset.
-In this case, ALL of the locking is done in the kernel. Because file
-descriptors are allocated per process, we have to provide the file
-descriptor as part of the lock call. We still have to do timer backoff
-because we need to be able to block ourselves, i.e. the lock manager
-causes processes to wait by having the process acquire a mutex and then
-attempting to re-acquire the mutex. There's no way to use kernel locking
-to block yourself, i.e. if you hold a lock and attempt to re-acquire it,
-the attempt will succeed.
+If HAVE_MUTEX_FCNTL is NOT defined (that is, we know how to do
+test-and-sets for this compiler/architecture combination), we try and
+lock the resource tsl some number of times (based on the number of
+processors). If we can't acquire the mutex that way, we use a system
+call to sleep for 1ms, 2ms, 4ms, etc. (The time is bounded at 10ms for
+mutexes backing logical locks and 25 ms for data structures, just in
+case.) Using the timer backoff means that there are two assumptions:
+that mutexes are held for brief periods (never over system calls or I/O)
+and mutexes are not hotly contested.
+
+If HAVE_MUTEX_FCNTL is defined, we use a file descriptor to do byte
+locking on a file at a specified offset. In this case, ALL of the
+locking is done in the kernel. Because file descriptors are allocated
+per process, we have to provide the file descriptor as part of the lock
+call. We still have to do timer backoff because we need to be able to
+block ourselves, that is, the lock manager causes processes to wait by
+having the process acquire a mutex and then attempting to re-acquire the
+mutex. There's no way to use kernel locking to block yourself, that is,
+if you hold a lock and attempt to re-acquire it, the attempt will
+succeed.
Next, let's talk about why it doesn't work the way a reasonable person
would think it should work.
@@ -42,7 +44,7 @@ would wake any waiting processes up after releasing the lock. This would
actually require both another tsl (call it the mutex tsl) and
synchronization between the call that blocks in the kernel and the actual
resource tsl. The mutex tsl would be used to protect accesses to the
-db_mutex_t itself. Locking the mutex tsl would be done by a busy loop,
+DB_MUTEX itself. Locking the mutex tsl would be done by a busy loop,
which is safe because processes would never block holding that tsl (all
they would do is try to obtain the resource tsl and set/check the wait
count). The problem in this model is that the blocking call into the
@@ -55,7 +57,7 @@ methods are sufficient to solve the problem.
The problem with fcntl locking is that only the process that obtained the
lock can release it. Remember, we want the normal state of the kernel
-semaphore to be locked. So, if the creator of the db_mutex_t were to
+semaphore to be locked. So, if the creator of the DB_MUTEX were to
initialize the lock to "locked", then a second process locks the resource
tsl, and then a third process needs to block, waiting for the resource
tsl, when the second process wants to wake up the third process, it can't
@@ -69,11 +71,11 @@ or using a different blocking offset depending on which process is
holding the lock, but it gets complicated fairly quickly. I'm open to
suggestions, but I'm not holding my breath.
-Regardless, we use this form of locking when HAVE_SPINLOCKS is not
-defined, (i.e. we're locking in the kernel) because it doesn't have the
-limitations found in System V semaphores, and because the normal state of
-the kernel object in that case is unlocked, so the process releasing the
-lock is also the holder of the lock.
+Regardless, we use this form of locking when we don't have any other
+choice, because it doesn't have the limitations found in System V
+semaphores, and because the normal state of the kernel object in that
+case is unlocked, so the process releasing the lock is also the holder
+of the lock.
The System V semaphore design has a number of other limitations that make
it inappropriate for this task. Namely:
diff --git a/db/mutex/mut_alloc.c b/db/mutex/mut_alloc.c
new file mode 100644
index 000000000..bfc453dc6
--- /dev/null
+++ b/db/mutex/mut_alloc.c
@@ -0,0 +1,230 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mut_alloc.c,v 12.15 2006/08/24 14:46:16 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/mutex_int.h"
+
+/*
+ * __mutex_alloc --
+ * Allocate a mutex from the mutex region.
+ *
+ * PUBLIC: int __mutex_alloc __P((DB_ENV *, int, u_int32_t, db_mutex_t *));
+ */
+int
+__mutex_alloc(dbenv, alloc_id, flags, indxp)
+ DB_ENV *dbenv;
+ int alloc_id;
+ u_int32_t flags;
+ db_mutex_t *indxp;
+{
+ int ret;
+
+ /* The caller may depend on us to initialize. */
+ *indxp = MUTEX_INVALID;
+
+ /*
+ * If this is not an application lock, and we've turned off locking,
+ * or the DB_ENV handle isn't thread-safe, and this is a thread lock
+ * or the environment isn't multi-process by definition, there's no
+ * need to mutex at all.
+ */
+ if (alloc_id != MTX_APPLICATION &&
+ (F_ISSET(dbenv, DB_ENV_NOLOCKING) ||
+ (!F_ISSET(dbenv, DB_ENV_THREAD) &&
+ (LF_ISSET(DB_MUTEX_PROCESS_ONLY) ||
+ F_ISSET(dbenv, DB_ENV_PRIVATE)))))
+ return (0);
+
+ /*
+ * If we have a region in which to allocate the mutexes, lock it and
+ * do the allocation.
+ */
+ if (MUTEX_ON(dbenv))
+ return (__mutex_alloc_int(dbenv, 1, alloc_id, flags, indxp));
+
+ /*
+ * We have to allocate some number of mutexes before we have a region
+ * in which to allocate them. We handle this by saving up the list of
+ * flags and allocating them as soon as we have a handle.
+ *
+ * The list of mutexes to alloc is maintained in pairs: first the
+ * alloc_id argument, second the flags passed in by the caller.
+ */
+ if (dbenv->mutex_iq == NULL) {
+ dbenv->mutex_iq_max = 50;
+ if ((ret = __os_calloc(dbenv, dbenv->mutex_iq_max,
+ sizeof(dbenv->mutex_iq[0]), &dbenv->mutex_iq)) != 0)
+ return (ret);
+ } else if (dbenv->mutex_iq_next == dbenv->mutex_iq_max - 1) {
+ dbenv->mutex_iq_max *= 2;
+ if ((ret = __os_realloc(dbenv,
+ dbenv->mutex_iq_max * sizeof(dbenv->mutex_iq[0]),
+ &dbenv->mutex_iq)) != 0)
+ return (ret);
+ }
+ *indxp = dbenv->mutex_iq_next + 1; /* Correct for MUTEX_INVALID. */
+ dbenv->mutex_iq[dbenv->mutex_iq_next].alloc_id = alloc_id;
+ dbenv->mutex_iq[dbenv->mutex_iq_next].flags = flags;
+ ++dbenv->mutex_iq_next;
+
+ return (0);
+}
+
+/*
+ * __mutex_alloc_int --
+ * Internal routine to allocate a mutex.
+ *
+ * PUBLIC: int __mutex_alloc_int
+ * PUBLIC: __P((DB_ENV *, int, int, u_int32_t, db_mutex_t *));
+ */
+int
+__mutex_alloc_int(dbenv, locksys, alloc_id, flags, indxp)
+ DB_ENV *dbenv;
+ int locksys, alloc_id;
+ u_int32_t flags;
+ db_mutex_t *indxp;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ int ret;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ ret = 0;
+
+ /*
+ * If we're not initializing the mutex region, then lock the region to
+ * allocate new mutexes. Drop the lock before initializing the mutex,
+ * mutex initialization may require a system call.
+ */
+ if (locksys)
+ MUTEX_SYSTEM_LOCK(dbenv);
+
+ if (mtxregion->mutex_next == MUTEX_INVALID) {
+ __db_errx(dbenv,
+ "unable to allocate memory for mutex; resize mutex region");
+ if (locksys)
+ MUTEX_SYSTEM_UNLOCK(dbenv);
+ return (ENOMEM);
+ }
+
+ *indxp = mtxregion->mutex_next;
+ mutexp = MUTEXP_SET(*indxp);
+ mtxregion->mutex_next = mutexp->mutex_next_link;
+
+ --mtxregion->stat.st_mutex_free;
+ ++mtxregion->stat.st_mutex_inuse;
+ if (mtxregion->stat.st_mutex_inuse > mtxregion->stat.st_mutex_inuse_max)
+ mtxregion->stat.st_mutex_inuse_max =
+ mtxregion->stat.st_mutex_inuse;
+ if (locksys)
+ MUTEX_SYSTEM_UNLOCK(dbenv);
+
+ /* Initialize the mutex. */
+ memset(mutexp, 0, sizeof(*mutexp));
+ F_SET(mutexp, DB_MUTEX_ALLOCATED |
+ LF_ISSET(DB_MUTEX_LOGICAL_LOCK | DB_MUTEX_PROCESS_ONLY));
+
+ /*
+ * If the mutex is associated with a single process, set the process
+ * ID. If the application ever calls DbEnv::failchk, we'll need the
+ * process ID to know if the mutex is still in use.
+ */
+ if (LF_ISSET(DB_MUTEX_PROCESS_ONLY))
+ dbenv->thread_id(dbenv, &mutexp->pid, NULL);
+
+#ifdef HAVE_STATISTICS
+ mutexp->alloc_id = alloc_id;
+#else
+ COMPQUIET(alloc_id, 0);
+#endif
+
+ if ((ret = __mutex_init(dbenv, *indxp, flags)) != 0)
+ (void)__mutex_free_int(dbenv, locksys, indxp);
+
+ return (ret);
+}
+
+/*
+ * __mutex_free --
+ * Free a mutex.
+ *
+ * PUBLIC: int __mutex_free __P((DB_ENV *, db_mutex_t *));
+ */
+int
+__mutex_free(dbenv, indxp)
+ DB_ENV *dbenv;
+ db_mutex_t *indxp;
+{
+ /*
+ * There is no explicit ordering in how the regions are cleaned up
+ * up and/or discarded when an environment is destroyed (either a
+ * private environment is closed or a public environment is removed).
+ * The way we deal with mutexes is to clean up all remaining mutexes
+ * when we close the mutex environment (because we have to be able to
+ * do that anyway, after a crash), which means we don't have to deal
+ * with region cleanup ordering on normal environment destruction.
+ * All that said, what it really means is we can get here without a
+ * mpool region. It's OK, the mutex has been, or will be, destroyed.
+ *
+ * If the mutex has never been configured, we're done.
+ */
+ if (!MUTEX_ON(dbenv) || *indxp == MUTEX_INVALID)
+ return (0);
+
+ return (__mutex_free_int(dbenv, 1, indxp));
+}
+
+/*
+ * __mutex_free_int --
+ * Internal routine to free a mutex.
+ *
+ * PUBLIC: int __mutex_free_int __P((DB_ENV *, int, db_mutex_t *));
+ */
+int
+__mutex_free_int(dbenv, locksys, indxp)
+ DB_ENV *dbenv;
+ int locksys;
+ db_mutex_t *indxp;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ db_mutex_t mutex;
+ int ret;
+
+ mutex = *indxp;
+ *indxp = MUTEX_INVALID;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+ DB_ASSERT(dbenv, F_ISSET(mutexp, DB_MUTEX_ALLOCATED));
+ F_CLR(mutexp, DB_MUTEX_ALLOCATED);
+
+ ret = __mutex_destroy(dbenv, mutex);
+
+ if (locksys)
+ MUTEX_SYSTEM_LOCK(dbenv);
+
+ /* Link the mutex on the head of the free list. */
+ mutexp->mutex_next_link = mtxregion->mutex_next;
+ mtxregion->mutex_next = mutex;
+ ++mtxregion->stat.st_mutex_free;
+ --mtxregion->stat.st_mutex_inuse;
+
+ if (locksys)
+ MUTEX_SYSTEM_UNLOCK(dbenv);
+
+ return (ret);
+}
diff --git a/db/mutex/mut_failchk.c b/db/mutex/mut_failchk.c
new file mode 100644
index 000000000..3d9d46a98
--- /dev/null
+++ b/db/mutex/mut_failchk.c
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mut_failchk.c,v 12.3 2006/08/24 14:46:16 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/mutex_int.h"
+
+/*
+ * __mut_failchk --
+ * Check for mutexes held by dead processes.
+ *
+ * PUBLIC: int __mut_failchk __P((DB_ENV *));
+ */
+int
+__mut_failchk(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ DB_MUTEX *mutexp;
+ db_mutex_t i;
+ int ret;
+ char buf[DB_THREADID_STRLEN];
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ ret = 0;
+
+ MUTEX_SYSTEM_LOCK(dbenv);
+ for (i = 1; i <= mtxregion->stat.st_mutex_cnt; ++i, ++mutexp) {
+ mutexp = MUTEXP_SET(i);
+
+ /*
+ * We're looking for per-process mutexes where the process
+ * has died.
+ */
+ if (!F_ISSET(mutexp, DB_MUTEX_ALLOCATED) ||
+ !F_ISSET(mutexp, DB_MUTEX_PROCESS_ONLY))
+ continue;
+
+ /*
+ * The thread that allocated the mutex may have exited, but
+ * we cannot reclaim the mutex if the process is still alive.
+ */
+ if (dbenv->is_alive(
+ dbenv, mutexp->pid, 0, DB_MUTEX_PROCESS_ONLY))
+ continue;
+
+ __db_msg(dbenv, "Freeing mutex for process: %s",
+ dbenv->thread_id_string(dbenv, mutexp->pid, 0, buf));
+
+ /* Unlock and free the mutex. */
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED))
+ MUTEX_UNLOCK(dbenv, i);
+
+ if ((ret = __mutex_free_int(dbenv, 0, &i)) != 0)
+ break;
+ }
+ MUTEX_SYSTEM_UNLOCK(dbenv);
+
+ return (ret);
+}
diff --git a/db/mutex/mut_fcntl.c b/db/mutex/mut_fcntl.c
index 03521bd77..eb4c6ef7f 100644
--- a/db/mutex/mut_fcntl.c
+++ b/db/mutex/mut_fcntl.c
@@ -1,64 +1,32 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mut_fcntl.c,v 11.26 2004/01/28 03:36:18 bostic Exp $
+ * $Id: mut_fcntl.c,v 12.20 2006/08/24 14:46:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h> /* SEEK_SET on SunOS. */
-#endif
-
#include "db_int.h"
+#include "dbinc/mutex_int.h"
/*
* __db_fcntl_mutex_init --
- * Initialize a DB mutex structure.
+ * Initialize a fcntl mutex.
*
- * PUBLIC: int __db_fcntl_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
+ * PUBLIC: int __db_fcntl_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
*/
int
-__db_fcntl_mutex_init(dbenv, mutexp, offset)
+__db_fcntl_mutex_init(dbenv, mutex, flags)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
- u_int32_t offset;
+ db_mutex_t mutex;
+ u_int32_t flags;
{
- 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
- * the application is private, we don't need any locks.
- */
- if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
- F_SET(mutexp, MUTEX_IGNORE);
- return (0);
- }
-
- mutexp->off = offset;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- mutexp->reg_off = INVALID_ROFF;
-#endif
- F_SET(mutexp, MUTEX_INITED);
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(mutex, MUTEX_INVALID);
+ COMPQUIET(flags, 0);
return (0);
}
@@ -67,32 +35,45 @@ __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 *, DB_MUTEX *));
+ * PUBLIC: int __db_fcntl_mutex_lock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_fcntl_mutex_lock(dbenv, mutexp)
+__db_fcntl_mutex_lock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
struct flock k_lock;
- int locked, ms, waited;
+ int locked, ms, ret;
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+#ifdef HAVE_STATISTICS
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED))
+ ++mutexp->mutex_set_wait;
+ else
+ ++mutexp->mutex_set_nowait;
+#endif
+
/* Initialize the lock. */
k_lock.l_whence = SEEK_SET;
- k_lock.l_start = mutexp->off;
+ k_lock.l_start = mutex;
k_lock.l_len = 1;
- for (locked = waited = 0;;) {
+ for (locked = 0;;) {
/*
* Wait for the lock to become available; wait 1ms initially,
* up to 1 second.
*/
- for (ms = 1; mutexp->pid != 0;) {
- waited = 1;
- __os_yield(NULL, ms * USEC_PER_MS);
+ for (ms = 1; F_ISSET(mutexp, DB_MUTEX_LOCKED);) {
+ __os_sleep(NULL, 0, ms * USEC_PER_MS);
if ((ms <<= 1) > MS_PER_SEC)
ms = MS_PER_SEC;
}
@@ -100,18 +81,21 @@ __db_fcntl_mutex_lock(dbenv, mutexp)
/* Acquire an exclusive kernel lock. */
k_lock.l_type = F_WRLCK;
if (fcntl(dbenv->lockfhp->fd, F_SETLKW, &k_lock))
- return (__os_get_errno());
+ goto err;
/* If the resource is still available, it's ours. */
- if (mutexp->pid == 0) {
+ if (!F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
locked = 1;
- __os_id(&mutexp->pid);
+
+ F_SET(mutexp, DB_MUTEX_LOCKED);
+ dbenv->thread_id(dbenv, &mutexp->pid, &mutexp->tid);
+ CHECK_MTX_THREAD(dbenv, mutexp);
}
/* Release the kernel lock. */
k_lock.l_type = F_UNLCK;
if (fcntl(dbenv->lockfhp->fd, F_SETLK, &k_lock))
- return (__os_get_errno());
+ goto err;
/*
* If we got the resource lock we're done.
@@ -126,57 +110,74 @@ __db_fcntl_mutex_lock(dbenv, mutexp)
break;
}
- if (waited)
- ++mutexp->mutex_set_wait;
- else
- ++mutexp->mutex_set_nowait;
+#ifdef DIAGNOSTIC
+ /*
+ * We want to switch threads as often as possible. Yield every time
+ * we get a mutex to ensure contention.
+ */
+ if (F_ISSET(dbenv, DB_ENV_YIELDCPU))
+ __os_yield(dbenv);
+#endif
return (0);
+
+err: ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "fcntl lock failed");
+ return (__db_panic(dbenv, __os_posix_err(ret)));
}
/*
* __db_fcntl_mutex_unlock --
- * Release a lock.
+ * Release a mutex.
*
- * PUBLIC: int __db_fcntl_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_fcntl_mutex_unlock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_fcntl_mutex_unlock(dbenv, mutexp)
+__db_fcntl_mutex_unlock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
#ifdef DIAGNOSTIC
-#define MSG "mutex_unlock: ERROR: released lock that was unlocked\n"
-#ifndef STDERR_FILENO
-#define STDERR_FILENO 2
-#endif
- if (mutexp->pid == 0)
- write(STDERR_FILENO, MSG, sizeof(MSG) - 1);
+ if (!F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ __db_errx(dbenv, "fcntl unlock failed: lock already unlocked");
+ return (__db_panic(dbenv, EACCES));
+ }
#endif
/*
* Release the resource. We don't have to acquire any locks because
- * processes trying to acquire the lock are checking for a pid set to
- * 0/non-0, not to any specific value.
+ * processes trying to acquire the lock are waiting for the flag to
+ * go to 0. Once that happens the waiters will serialize acquiring
+ * an exclusive kernel lock before locking the mutex.
*/
- mutexp->pid = 0;
+ F_CLR(mutexp, DB_MUTEX_LOCKED);
return (0);
}
/*
* __db_fcntl_mutex_destroy --
- * Destroy a DB_MUTEX.
+ * Destroy a mutex.
*
- * PUBLIC: int __db_fcntl_mutex_destroy __P((DB_MUTEX *));
+ * PUBLIC: int __db_fcntl_mutex_destroy __P((DB_ENV *, db_mutex_t));
*/
int
-__db_fcntl_mutex_destroy(mutexp)
- DB_MUTEX *mutexp;
+__db_fcntl_mutex_destroy(dbenv, mutex)
+ DB_ENV *dbenv;
+ db_mutex_t mutex;
{
- COMPQUIET(mutexp, NULL);
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(mutex, MUTEX_INVALID);
return (0);
}
diff --git a/db/mutex/mut_method.c b/db/mutex/mut_method.c
new file mode 100644
index 000000000..08da11d94
--- /dev/null
+++ b/db/mutex/mut_method.c
@@ -0,0 +1,286 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mut_method.c,v 12.12 2006/08/24 14:46:16 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/mutex_int.h"
+
+/*
+ * __mutex_alloc_pp --
+ * Allocate a mutex, application method.
+ *
+ * PUBLIC: int __mutex_alloc_pp __P((DB_ENV *, u_int32_t, db_mutex_t *));
+ */
+int
+__mutex_alloc_pp(dbenv, flags, indxp)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+ db_mutex_t *indxp;
+{
+ DB_THREAD_INFO *ip;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+
+ switch (flags) {
+ case 0:
+ case DB_MUTEX_PROCESS_ONLY:
+ case DB_MUTEX_SELF_BLOCK:
+ break;
+ default:
+ return (__db_ferr(dbenv, "DB_ENV->mutex_alloc", 0));
+ }
+
+ ENV_ENTER(dbenv, ip);
+ ret = __mutex_alloc(dbenv, MTX_APPLICATION, flags, indxp);
+ ENV_LEAVE(dbenv, ip);
+
+ return (ret);
+}
+
+/*
+ * __mutex_free_pp --
+ * Destroy a mutex, application method.
+ *
+ * PUBLIC: int __mutex_free_pp __P((DB_ENV *, db_mutex_t));
+ */
+int
+__mutex_free_pp(dbenv, indx)
+ DB_ENV *dbenv;
+ db_mutex_t indx;
+{
+ DB_THREAD_INFO *ip;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+
+ if (indx == MUTEX_INVALID)
+ return (EINVAL);
+
+ /*
+ * Internally Berkeley DB passes around the db_mutex_t address on
+ * free, because we want to make absolutely sure the slot gets
+ * overwritten with MUTEX_INVALID. We don't export MUTEX_INVALID,
+ * so we don't export that part of the API, either.
+ */
+ ENV_ENTER(dbenv, ip);
+ ret = __mutex_free(dbenv, &indx);
+ ENV_LEAVE(dbenv, ip);
+
+ return (ret);
+}
+
+/*
+ * __mutex_lock --
+ * Lock a mutex, application method.
+ *
+ * PUBLIC: int __mutex_lock_pp __P((DB_ENV *, db_mutex_t));
+ */
+int
+__mutex_lock_pp(dbenv, indx)
+ DB_ENV *dbenv;
+ db_mutex_t indx;
+{
+ PANIC_CHECK(dbenv);
+
+ if (indx == MUTEX_INVALID)
+ return (EINVAL);
+
+ return (__mutex_lock(dbenv, indx));
+}
+
+/*
+ * __mutex_unlock --
+ * Unlock a mutex, application method.
+ *
+ * PUBLIC: int __mutex_unlock_pp __P((DB_ENV *, db_mutex_t));
+ */
+int
+__mutex_unlock_pp(dbenv, indx)
+ DB_ENV *dbenv;
+ db_mutex_t indx;
+{
+ PANIC_CHECK(dbenv);
+
+ if (indx == MUTEX_INVALID)
+ return (EINVAL);
+
+ return (__mutex_unlock(dbenv, indx));
+}
+
+/*
+ * __mutex_get_align --
+ * DB_ENV->mutex_get_align.
+ *
+ * PUBLIC: int __mutex_get_align __P((DB_ENV *, u_int32_t *));
+ */
+int
+__mutex_get_align(dbenv, alignp)
+ DB_ENV *dbenv;
+ u_int32_t *alignp;
+{
+ if (MUTEX_ON(dbenv))
+ *alignp = ((DB_MUTEXREGION *)
+ dbenv->mutex_handle->reginfo.primary)->stat.st_mutex_align;
+ else
+ *alignp = dbenv->mutex_align;
+ return (0);
+}
+
+/*
+ * __mutex_set_align --
+ * DB_ENV->mutex_set_align.
+ *
+ * PUBLIC: int __mutex_set_align __P((DB_ENV *, u_int32_t));
+ */
+int
+__mutex_set_align(dbenv, align)
+ DB_ENV *dbenv;
+ u_int32_t align;
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_mutex_align");
+
+ if (align == 0 || !POWER_OF_TWO(align)) {
+ __db_errx(dbenv,
+ "DB_ENV->mutex_set_align: alignment value must be a non-zero power-of-two");
+ return (EINVAL);
+ }
+
+ dbenv->mutex_align = align;
+ return (0);
+}
+
+/*
+ * __mutex_get_increment --
+ * DB_ENV->mutex_get_increment.
+ *
+ * PUBLIC: int __mutex_get_increment __P((DB_ENV *, u_int32_t *));
+ */
+int
+__mutex_get_increment(dbenv, incrementp)
+ DB_ENV *dbenv;
+ u_int32_t *incrementp;
+{
+ /*
+ * We don't maintain the increment in the region (it just makes
+ * no sense). Return whatever we have configured on this handle,
+ * nobody is ever going to notice.
+ */
+ *incrementp = dbenv->mutex_inc;
+ return (0);
+}
+
+/*
+ * __mutex_set_increment --
+ * DB_ENV->mutex_set_increment.
+ *
+ * PUBLIC: int __mutex_set_increment __P((DB_ENV *, u_int32_t));
+ */
+int
+__mutex_set_increment(dbenv, increment)
+ DB_ENV *dbenv;
+ u_int32_t increment;
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_mutex_increment");
+
+ dbenv->mutex_cnt = 0;
+ dbenv->mutex_inc = increment;
+ return (0);
+}
+
+/*
+ * __mutex_get_max --
+ * DB_ENV->mutex_get_max.
+ *
+ * PUBLIC: int __mutex_get_max __P((DB_ENV *, u_int32_t *));
+ */
+int
+__mutex_get_max(dbenv, maxp)
+ DB_ENV *dbenv;
+ u_int32_t *maxp;
+{
+ if (MUTEX_ON(dbenv))
+ *maxp = ((DB_MUTEXREGION *)
+ dbenv->mutex_handle->reginfo.primary)->stat.st_mutex_cnt;
+ else
+ *maxp = dbenv->mutex_cnt;
+ return (0);
+}
+
+/*
+ * __mutex_set_max --
+ * DB_ENV->mutex_set_max.
+ *
+ * PUBLIC: int __mutex_set_max __P((DB_ENV *, u_int32_t));
+ */
+int
+__mutex_set_max(dbenv, max)
+ DB_ENV *dbenv;
+ u_int32_t max;
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_mutex_max");
+
+ dbenv->mutex_cnt = max;
+ dbenv->mutex_inc = 0;
+ return (0);
+}
+
+/*
+ * __mutex_get_tas_spins --
+ * DB_ENV->mutex_get_tas_spins.
+ *
+ * PUBLIC: int __mutex_get_tas_spins __P((DB_ENV *, u_int32_t *));
+ */
+int
+__mutex_get_tas_spins(dbenv, tas_spinsp)
+ DB_ENV *dbenv;
+ u_int32_t *tas_spinsp;
+{
+ if (MUTEX_ON(dbenv))
+ *tas_spinsp = ((DB_MUTEXREGION *)dbenv->
+ mutex_handle->reginfo.primary)->stat.st_mutex_tas_spins;
+ else
+ *tas_spinsp = dbenv->mutex_tas_spins;
+ return (0);
+}
+
+/*
+ * __mutex_set_tas_spins --
+ * DB_ENV->mutex_set_tas_spins.
+ *
+ * PUBLIC: int __mutex_set_tas_spins __P((DB_ENV *, u_int32_t));
+ */
+int
+__mutex_set_tas_spins(dbenv, tas_spins)
+ DB_ENV *dbenv;
+ u_int32_t tas_spins;
+{
+ /*
+ * Bound the value -- less than 1 makes no sense, greater than 1M
+ * makes no sense.
+ */
+ if (tas_spins == 0)
+ tas_spins = 1;
+ else if (tas_spins > 1000000)
+ tas_spins = 1000000;
+
+ /*
+ * There's a theoretical race here, but I'm not interested in locking
+ * the test-and-set spin count. The worst possibility is a thread
+ * reads out a bad spin count and spins until it gets the lock, but
+ * that's awfully unlikely.
+ */
+ if (MUTEX_ON(dbenv))
+ ((DB_MUTEXREGION *)dbenv->mutex_handle
+ ->reginfo.primary)->stat.st_mutex_tas_spins = tas_spins;
+ else
+ dbenv->mutex_tas_spins = tas_spins;
+ return (0);
+}
diff --git a/db/mutex/mut_pthread.c b/db/mutex/mut_pthread.c
index 6507eba73..08c7b388b 100644
--- a/db/mutex/mut_pthread.c
+++ b/db/mutex/mut_pthread.c
@@ -1,32 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mut_pthread.c,v 11.62 2004/09/22 16:27:05 bostic Exp $
+ * $Id: mut_pthread.c,v 12.19 2006/08/24 14:46:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#include <unistd.h>
-#endif
-
#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
+#include "dbinc/mutex_int.h"
#ifdef HAVE_MUTEX_SOLARIS_LWP
#define pthread_cond_destroy(x) 0
@@ -36,12 +20,6 @@
#define pthread_mutex_lock _lwp_mutex_lock
#define pthread_mutex_trylock _lwp_mutex_trylock
#define pthread_mutex_unlock _lwp_mutex_unlock
-/*
- * !!!
- * _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.
- */
#endif
#ifdef HAVE_MUTEX_UI_THREADS
#define pthread_cond_destroy(x) cond_destroy
@@ -51,89 +29,78 @@
#define pthread_mutex_lock mutex_lock
#define pthread_mutex_trylock mutex_trylock
#define pthread_mutex_unlock mutex_unlock
-#define pthread_self thr_self
#endif
#define PTHREAD_UNLOCK_ATTEMPTS 5
/*
+ * IBM's MVS pthread mutex implementation returns -1 and sets errno rather than
+ * returning errno itself. As -1 is not a valid errno value, assume functions
+ * returning -1 have set errno. If they haven't, return a random error value.
+ */
+#define RET_SET(f, ret) do { \
+ if (((ret) = (f)) == -1 && ((ret) = errno) == 0) \
+ (ret) = EAGAIN; \
+} while (0)
+
+/*
* __db_pthread_mutex_init --
- * Initialize a DB_MUTEX.
+ * Initialize a pthread mutex.
*
- * PUBLIC: int __db_pthread_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
+ * PUBLIC: int __db_pthread_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
*/
int
-__db_pthread_mutex_init(dbenv, mutexp, flags)
+__db_pthread_mutex_init(dbenv, mutex, flags)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
u_int32_t flags;
{
- u_int32_t save;
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
int ret;
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
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
- * no other processes in the environment, use thread-only locks, they
- * are faster in some cases.
- *
- * This is where we decide to ignore locks we don't need to set -- if
- * the application isn't threaded, there aren't any threads to block.
- */
- if (LF_ISSET(MUTEX_THREAD) || F_ISSET(dbenv, DB_ENV_PRIVATE)) {
- if (!F_ISSET(dbenv, DB_ENV_THREAD)) {
- F_SET(mutexp, MUTEX_IGNORE);
- return (0);
- }
- }
-
#ifdef HAVE_MUTEX_PTHREADS
{
pthread_condattr_t condattr, *condattrp = NULL;
pthread_mutexattr_t mutexattr, *mutexattrp = NULL;
- if (!LF_ISSET(MUTEX_THREAD)) {
- ret = pthread_mutexattr_init(&mutexattr);
+ if (!LF_ISSET(DB_MUTEX_PROCESS_ONLY)) {
+ RET_SET((pthread_mutexattr_init(&mutexattr)), ret);
#ifndef HAVE_MUTEX_THREAD_ONLY
if (ret == 0)
- ret = pthread_mutexattr_setpshared(
- &mutexattr, PTHREAD_PROCESS_SHARED);
+ RET_SET((pthread_mutexattr_setpshared(
+ &mutexattr, PTHREAD_PROCESS_SHARED)), ret);
#endif
mutexattrp = &mutexattr;
}
if (ret == 0)
- ret = pthread_mutex_init(&mutexp->mutex, mutexattrp);
+ RET_SET((pthread_mutex_init(&mutexp->mutex, mutexattrp)), ret);
if (mutexattrp != NULL)
- pthread_mutexattr_destroy(mutexattrp);
- if (ret == 0 && LF_ISSET(MUTEX_SELF_BLOCK)) {
- if (!LF_ISSET(MUTEX_THREAD)) {
- ret = pthread_condattr_init(&condattr);
-#ifndef HAVE_MUTEX_THREAD_ONLY
+ (void)pthread_mutexattr_destroy(mutexattrp);
+ if (ret == 0 && LF_ISSET(DB_MUTEX_SELF_BLOCK)) {
+ if (!LF_ISSET(DB_MUTEX_PROCESS_ONLY)) {
+ RET_SET((pthread_condattr_init(&condattr)), ret);
if (ret == 0) {
condattrp = &condattr;
- ret = pthread_condattr_setpshared(
- &condattr, PTHREAD_PROCESS_SHARED);
- }
+#ifndef HAVE_MUTEX_THREAD_ONLY
+ RET_SET((pthread_condattr_setpshared(
+ &condattr, PTHREAD_PROCESS_SHARED)), ret);
#endif
+ }
}
if (ret == 0)
- ret = pthread_cond_init(&mutexp->cond, condattrp);
+ RET_SET(
+ (pthread_cond_init(&mutexp->cond, condattrp)), ret);
- F_SET(mutexp, MUTEX_SELF_BLOCK);
+ F_SET(mutexp, DB_MUTEX_SELF_BLOCK);
if (condattrp != NULL)
(void)pthread_condattr_destroy(condattrp);
}
@@ -149,7 +116,7 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
* initialization values doesn't have surrounding braces. There's not
* much we can do.
*/
- if (LF_ISSET(MUTEX_THREAD)) {
+ if (LF_ISSET(DB_MUTEX_PROCESS_ONLY)) {
static lwp_mutex_t mi = DEFAULTMUTEX;
mutexp->mutex = mi;
@@ -158,8 +125,8 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
mutexp->mutex = mi;
}
- if (LF_ISSET(MUTEX_SELF_BLOCK)) {
- if (LF_ISSET(MUTEX_THREAD)) {
+ if (LF_ISSET(DB_MUTEX_SELF_BLOCK)) {
+ if (LF_ISSET(DB_MUTEX_PROCESS_ONLY)) {
static lwp_cond_t ci = DEFAULTCV;
mutexp->cond = ci;
@@ -168,63 +135,74 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
mutexp->cond = ci;
}
- F_SET(mutexp, MUTEX_SELF_BLOCK);
+ F_SET(mutexp, DB_MUTEX_SELF_BLOCK);
}
#endif
#ifdef HAVE_MUTEX_UI_THREADS
{
int type;
- type = LF_ISSET(MUTEX_THREAD) ? USYNC_THREAD : USYNC_PROCESS;
+ type = LF_ISSET(DB_MUTEX_PROCESS_ONLY) ? USYNC_THREAD : USYNC_PROCESS;
ret = mutex_init(&mutexp->mutex, type, NULL);
- if (ret == 0 && LF_ISSET(MUTEX_SELF_BLOCK)) {
+ if (ret == 0 && LF_ISSET(DB_MUTEX_SELF_BLOCK)) {
ret = cond_init(&mutexp->cond, type, NULL);
- F_SET(mutexp, MUTEX_SELF_BLOCK);
+ F_SET(mutexp, DB_MUTEX_SELF_BLOCK);
}}
#endif
-#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));
-
+ if (ret != 0) {
+ __db_err(dbenv, ret, "unable to initialize mutex");
+ }
return (ret);
}
/*
* __db_pthread_mutex_lock
- * Lock on a mutex, logically blocking if necessary.
+ * Lock on a mutex, blocking if necessary.
*
- * PUBLIC: int __db_pthread_mutex_lock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_pthread_mutex_lock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_pthread_mutex_lock(dbenv, mutexp)
+__db_pthread_mutex_lock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
- u_int32_t nspins;
- int i, ret, waited;
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ int i, ret;
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
- /* Attempt to acquire the resource for N spins. */
- for (nspins = dbenv->tas_spins; nspins > 0; --nspins)
- if (pthread_mutex_trylock(&mutexp->mutex) == 0)
- break;
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+#ifdef HAVE_STATISTICS
+ /*
+ * We want to know which mutexes are contentious, but don't want to
+ * do an interlocked test here -- that's slower when the underlying
+ * system has adaptive mutexes and can perform optimizations like
+ * spinning only if the thread holding the mutex is actually running
+ * on a CPU. Make a guess, using a normal load instruction.
+ */
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED))
+ ++mutexp->mutex_set_wait;
+ else
+ ++mutexp->mutex_set_nowait;
+#endif
- if (nspins == 0 && (ret = pthread_mutex_lock(&mutexp->mutex)) != 0)
+ RET_SET((pthread_mutex_lock(&mutexp->mutex)), ret);
+ if (ret != 0)
goto err;
- if (F_ISSET(mutexp, MUTEX_SELF_BLOCK)) {
- for (waited = 0; mutexp->locked != 0; waited = 1) {
- ret = pthread_cond_wait(&mutexp->cond, &mutexp->mutex);
+ if (F_ISSET(mutexp, DB_MUTEX_SELF_BLOCK)) {
+ while (F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ RET_SET((pthread_cond_wait(
+ &mutexp->cond, &mutexp->mutex)), ret);
/*
* !!!
* Solaris bug workaround:
@@ -241,20 +219,14 @@ __db_pthread_mutex_lock(dbenv, mutexp)
#endif
ret != ETIMEDOUT) {
(void)pthread_mutex_unlock(&mutexp->mutex);
- return (ret);
+ goto err;
}
}
- if (waited)
- ++mutexp->mutex_set_wait;
- else
- ++mutexp->mutex_set_nowait;
+ F_SET(mutexp, DB_MUTEX_LOCKED);
+ dbenv->thread_id(dbenv, &mutexp->pid, &mutexp->tid);
+ CHECK_MTX_THREAD(dbenv, mutexp);
-#ifdef DIAGNOSTIC
- mutexp->locked = (u_int32_t)pthread_self();
-#else
- mutexp->locked = 1;
-#endif
/*
* According to HP-UX engineers contacted by Netscape,
* pthread_mutex_unlock() will occasionally return EFAULT
@@ -266,101 +238,130 @@ __db_pthread_mutex_lock(dbenv, mutexp)
*/
i = PTHREAD_UNLOCK_ATTEMPTS;
do {
- ret = pthread_mutex_unlock(&mutexp->mutex);
+ RET_SET((pthread_mutex_unlock(&mutexp->mutex)), ret);
} while (ret == EFAULT && --i > 0);
if (ret != 0)
goto err;
} else {
- if (nspins == dbenv->tas_spins)
- ++mutexp->mutex_set_nowait;
- 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) {
- char msgbuf[128];
- (void)snprintf(msgbuf,
- sizeof(msgbuf), MSG1, (u_long)mutexp->locked);
- (void)write(STDERR_FILENO, msgbuf, strlen(msgbuf));
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ char buf[DB_THREADID_STRLEN];
+ (void)dbenv->thread_id_string(dbenv,
+ mutexp->pid, mutexp->tid, buf);
+ __db_errx(dbenv,
+ "pthread lock failed: lock currently in use: pid/tid: %s",
+ buf);
+ ret = EINVAL;
+ goto err;
}
- mutexp->locked = (u_int32_t)pthread_self();
-#else
- mutexp->locked = 1;
#endif
+ F_SET(mutexp, DB_MUTEX_LOCKED);
+ dbenv->thread_id(dbenv, &mutexp->pid, &mutexp->tid);
+ CHECK_MTX_THREAD(dbenv, mutexp);
}
+
+#ifdef DIAGNOSTIC
+ /*
+ * We want to switch threads as often as possible. Yield every time
+ * we get a mutex to ensure contention.
+ */
+ if (F_ISSET(dbenv, DB_ENV_YIELDCPU))
+ __os_yield(dbenv);
+#endif
return (0);
-err: __db_err(dbenv, "unable to lock mutex: %s", strerror(ret));
- return (ret);
+err: __db_err(dbenv, ret, "pthread lock failed");
+ return (__db_panic(dbenv, ret));
}
/*
* __db_pthread_mutex_unlock --
- * Release a lock.
+ * Release a mutex.
*
- * PUBLIC: int __db_pthread_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_pthread_mutex_unlock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_pthread_mutex_unlock(dbenv, mutexp)
+__db_pthread_mutex_unlock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
int i, ret;
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
#ifdef DIAGNOSTIC
- if (!mutexp->locked)
- (void)write(STDERR_FILENO, MSG2, sizeof(MSG2) - 1);
+ if (!F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ __db_errx(
+ dbenv, "pthread unlock failed: lock already unlocked");
+ return (__db_panic(dbenv, EACCES));
+ }
#endif
-
- if (F_ISSET(mutexp, MUTEX_SELF_BLOCK)) {
- if ((ret = pthread_mutex_lock(&mutexp->mutex)) != 0)
+ if (F_ISSET(mutexp, DB_MUTEX_SELF_BLOCK)) {
+ RET_SET((pthread_mutex_lock(&mutexp->mutex)), ret);
+ if (ret != 0)
goto err;
- mutexp->locked = 0;
-
- if ((ret = pthread_cond_signal(&mutexp->cond)) != 0)
- return (ret);
+ F_CLR(mutexp, DB_MUTEX_LOCKED);
+ RET_SET((pthread_cond_signal(&mutexp->cond)), ret);
+ if (ret != 0)
+ goto err;
} else
- mutexp->locked = 0;
+ F_CLR(mutexp, DB_MUTEX_LOCKED);
/* See comment above; workaround for [#2471]. */
i = PTHREAD_UNLOCK_ATTEMPTS;
do {
- ret = pthread_mutex_unlock(&mutexp->mutex);
+ RET_SET((pthread_mutex_unlock(&mutexp->mutex)), ret);
} while (ret == EFAULT && --i > 0);
- return (ret);
-err: __db_err(dbenv, "unable to unlock mutex: %s", strerror(ret));
+err: if (ret != 0) {
+ __db_err(dbenv, ret, "pthread unlock failed");
+ return (__db_panic(dbenv, ret));
+ }
return (ret);
}
/*
* __db_pthread_mutex_destroy --
- * Destroy a DB_MUTEX.
+ * Destroy a mutex.
*
- * PUBLIC: int __db_pthread_mutex_destroy __P((DB_MUTEX *));
+ * PUBLIC: int __db_pthread_mutex_destroy __P((DB_ENV *, db_mutex_t));
*/
int
-__db_pthread_mutex_destroy(mutexp)
- DB_MUTEX *mutexp;
+__db_pthread_mutex_destroy(dbenv, mutex)
+ DB_ENV *dbenv;
+ db_mutex_t mutex;
{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
int ret, t_ret;
- if (F_ISSET(mutexp, MUTEX_IGNORE))
+ if (!MUTEX_ON(dbenv))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
ret = 0;
- if (F_ISSET(mutexp, MUTEX_SELF_BLOCK) &&
- (ret = pthread_cond_destroy(&mutexp->cond)) != 0)
- __db_err(NULL, "unable to destroy cond: %s", strerror(ret));
- if ((t_ret = pthread_mutex_destroy(&mutexp->mutex)) != 0) {
- __db_err(NULL, "unable to destroy mutex: %s", strerror(t_ret));
+ if (F_ISSET(mutexp, DB_MUTEX_SELF_BLOCK)) {
+ RET_SET((pthread_cond_destroy(&mutexp->cond)), ret);
+ if (ret != 0)
+ __db_err(dbenv, ret, "unable to destroy cond");
+ }
+ RET_SET((pthread_mutex_destroy(&mutexp->mutex)), t_ret);
+ if (t_ret != 0) {
+ __db_err(dbenv, t_ret, "unable to destroy mutex");
if (ret == 0)
ret = t_ret;
}
diff --git a/db/mutex/mut_region.c b/db/mutex/mut_region.c
new file mode 100644
index 000000000..6e1b4f3ad
--- /dev/null
+++ b/db/mutex/mut_region.c
@@ -0,0 +1,356 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mut_region.c,v 12.18 2006/08/24 14:46:16 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/log.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/mutex_int.h"
+
+static int __mutex_region_init __P((DB_ENV *, DB_MUTEXMGR *));
+static size_t __mutex_region_size __P((DB_ENV *));
+
+/*
+ * __mutex_open --
+ * Open a mutex region.
+ *
+ * PUBLIC: int __mutex_open __P((DB_ENV *));
+ */
+int
+__mutex_open(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ db_mutex_t mutex;
+ u_int i;
+ int ret;
+
+ /*
+ * Initialize the DB_ENV handle information if not already initialized.
+ *
+ * Align mutexes on the byte boundaries specified by the application.
+ */
+ if (dbenv->mutex_align == 0)
+ dbenv->mutex_align = MUTEX_ALIGN;
+ if (dbenv->mutex_tas_spins == 0 &&
+ ((ret = __mutex_set_tas_spins(dbenv, __os_spin(dbenv))) != 0))
+ return (ret);
+
+ /*
+ * If the user didn't set an absolute value on the number of mutexes
+ * we'll need, figure it out. We're conservative in our allocation,
+ * we need mutexes for DB handles, group-commit queues and other things
+ * applications allocate at run-time. The application may have kicked
+ * up our count to allocate its own mutexes, add that in.
+ */
+ if (dbenv->mutex_cnt == 0)
+ dbenv->mutex_cnt =
+ __lock_region_mutex_count(dbenv) +
+ __log_region_mutex_count(dbenv) +
+ __memp_region_mutex_count(dbenv) +
+ dbenv->mutex_inc + 100;
+
+ /* Create/initialize the mutex manager structure. */
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_MUTEXMGR), &mtxmgr)) != 0)
+ return (ret);
+
+ /* Join/create the txn region. */
+ mtxmgr->reginfo.dbenv = dbenv;
+ mtxmgr->reginfo.type = REGION_TYPE_MUTEX;
+ mtxmgr->reginfo.id = INVALID_REGION_ID;
+ mtxmgr->reginfo.flags = REGION_JOIN_OK;
+ if (F_ISSET(dbenv, DB_ENV_CREATE))
+ F_SET(&mtxmgr->reginfo, REGION_CREATE_OK);
+ if ((ret = __db_r_attach(dbenv,
+ &mtxmgr->reginfo, __mutex_region_size(dbenv))) != 0)
+ goto err;
+
+ /* If we created the region, initialize it. */
+ if (F_ISSET(&mtxmgr->reginfo, REGION_CREATE))
+ if ((ret = __mutex_region_init(dbenv, mtxmgr)) != 0)
+ goto err;
+
+ /* Set the local addresses. */
+ mtxregion = mtxmgr->reginfo.primary =
+ R_ADDR(&mtxmgr->reginfo, mtxmgr->reginfo.rp->primary);
+ mtxmgr->mutex_array = R_ADDR(&mtxmgr->reginfo, mtxregion->mutex_offset);
+
+ dbenv->mutex_handle = mtxmgr;
+
+ /* Allocate initial queue of mutexes. */
+ if (dbenv->mutex_iq != NULL) {
+ DB_ASSERT(dbenv, F_ISSET(&mtxmgr->reginfo, REGION_CREATE));
+ for (i = 0; i < dbenv->mutex_iq_next; ++i) {
+ if ((ret = __mutex_alloc_int(
+ dbenv, 0, dbenv->mutex_iq[i].alloc_id,
+ dbenv->mutex_iq[i].flags, &mutex)) != 0)
+ goto err;
+ /*
+ * Confirm we allocated the right index, correcting
+ * for avoiding slot 0 (MUTEX_INVALID).
+ */
+ DB_ASSERT(dbenv, mutex == i + 1);
+ }
+ __os_free(dbenv, dbenv->mutex_iq);
+ dbenv->mutex_iq = NULL;
+
+ /*
+ * This is the first place we can test mutexes and we need to
+ * know if they're working. (They CAN fail, for example on
+ * SunOS, when using fcntl(2) for locking and using an
+ * in-memory filesystem as the database environment directory.
+ * But you knew that, I'm sure -- it probably wasn't worth
+ * mentioning.)
+ */
+ mutex = MUTEX_INVALID;
+ if ((ret =
+ __mutex_alloc(dbenv, MTX_MUTEX_TEST, 0, &mutex) != 0) ||
+ (ret = __mutex_lock(dbenv, mutex)) != 0 ||
+ (ret = __mutex_unlock(dbenv, mutex)) != 0 ||
+ (ret = __mutex_free(dbenv, &mutex)) != 0) {
+ __db_errx(dbenv,
+ "Unable to acquire/release a mutex; check configuration");
+ goto err;
+ }
+ }
+
+ /*
+ * Initialize thread tracking. We want to do this as early
+ * as possible in case we die. This sits in the mutex region
+ * so do it now.
+ */
+ if ((ret = __env_thread_init(dbenv,
+ F_ISSET(&mtxmgr->reginfo, REGION_CREATE))) != 0)
+ goto err;
+
+ return (0);
+
+err: dbenv->mutex_handle = NULL;
+ if (mtxmgr->reginfo.addr != NULL)
+ (void)__db_r_detach(dbenv, &mtxmgr->reginfo, 0);
+
+ __os_free(dbenv, mtxmgr);
+ return (ret);
+}
+
+/*
+ * __mutex_region_init --
+ * Initialize a mutex region in shared memory.
+ */
+static int
+__mutex_region_init(dbenv, mtxmgr)
+ DB_ENV *dbenv;
+ DB_MUTEXMGR *mtxmgr;
+{
+ DB_MUTEXREGION *mtxregion;
+ DB_MUTEX *mutexp;
+ db_mutex_t i;
+ int ret;
+ void *mutex_array;
+
+ COMPQUIET(mutexp, NULL);
+
+ if ((ret = __db_shalloc(&mtxmgr->reginfo,
+ sizeof(DB_MUTEXREGION), 0, &mtxmgr->reginfo.primary)) != 0) {
+ __db_errx(dbenv,
+ "Unable to allocate memory for the mutex region");
+ return (ret);
+ }
+ mtxmgr->reginfo.rp->primary =
+ R_OFFSET(&mtxmgr->reginfo, mtxmgr->reginfo.primary);
+ mtxregion = mtxmgr->reginfo.primary;
+ memset(mtxregion, 0, sizeof(*mtxregion));
+
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_MUTEX_REGION, 0, &mtxregion->mtx_region)) != 0)
+ return (ret);
+
+ mtxregion->mutex_size =
+ (size_t)DB_ALIGN(sizeof(DB_MUTEX), dbenv->mutex_align);
+
+ mtxregion->stat.st_mutex_align = dbenv->mutex_align;
+ mtxregion->stat.st_mutex_cnt = dbenv->mutex_cnt;
+ mtxregion->stat.st_mutex_tas_spins = dbenv->mutex_tas_spins;
+
+ /*
+ * Get a chunk of memory to be used for the mutexes themselves. Each
+ * piece of the memory must be properly aligned.
+ *
+ * The OOB mutex (MUTEX_INVALID) is 0. To make this work, we ignore
+ * the first allocated slot when we build the free list. We have to
+ * correct the count by 1 here, though, otherwise our counter will be
+ * off by 1.
+ */
+ if ((ret = __db_shalloc(&mtxmgr->reginfo,
+ (mtxregion->stat.st_mutex_cnt + 1) * mtxregion->mutex_size,
+ mtxregion->stat.st_mutex_align, &mutex_array)) != 0) {
+ __db_errx(dbenv,
+ "Unable to allocate memory for mutexes from the region");
+ return (ret);
+ }
+
+ mtxregion->mutex_offset = R_OFFSET(&mtxmgr->reginfo, mutex_array);
+ mtxmgr->mutex_array = mutex_array;
+
+ /*
+ * Put the mutexes on a free list and clear the allocated flag.
+ *
+ * The OOB mutex (MUTEX_INVALID) is 0, skip it.
+ *
+ * The comparison is <, not <=, because we're looking ahead one
+ * in each link.
+ */
+ for (i = 1; i < mtxregion->stat.st_mutex_cnt; ++i) {
+ mutexp = MUTEXP_SET(i);
+ mutexp->flags = 0;
+ mutexp->mutex_next_link = i + 1;
+ }
+ mutexp = MUTEXP_SET(i);
+ mutexp->flags = 0;
+ mutexp->mutex_next_link = MUTEX_INVALID;
+ mtxregion->mutex_next = 1;
+ mtxregion->stat.st_mutex_free = mtxregion->stat.st_mutex_cnt;
+ mtxregion->stat.st_mutex_inuse = mtxregion->stat.st_mutex_inuse_max = 0;
+
+ return (0);
+}
+
+/*
+ * __mutex_dbenv_refresh --
+ * Clean up after the mutex region on a close or failed open.
+ *
+ * PUBLIC: int __mutex_dbenv_refresh __P((DB_ENV *));
+ */
+int
+__mutex_dbenv_refresh(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ REGINFO *reginfo;
+ int ret;
+
+ mtxmgr = dbenv->mutex_handle;
+ reginfo = &mtxmgr->reginfo;
+ mtxregion = mtxmgr->reginfo.primary;
+
+ /*
+ * If a private region, return the memory to the heap. Not needed for
+ * filesystem-backed or system shared memory regions, that memory isn't
+ * owned by any particular process.
+ */
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ /*
+ * If destroying the mutex region, return any system resources
+ * to the system.
+ */
+ __mutex_resource_return(dbenv, reginfo);
+#endif
+ /* Discard the mutex array. */
+ __db_shalloc_free(
+ reginfo, R_ADDR(reginfo, mtxregion->mutex_offset));
+ }
+
+ /* Detach from the region. */
+ ret = __db_r_detach(dbenv, reginfo, 0);
+
+ __os_free(dbenv, mtxmgr);
+
+ dbenv->mutex_handle = NULL;
+
+ return (ret);
+}
+
+/*
+ * __mutex_region_size --
+ * Return the amount of space needed for the mutex region.
+ */
+static size_t
+__mutex_region_size(dbenv)
+ DB_ENV *dbenv;
+{
+ size_t s;
+
+ s = sizeof(DB_MUTEXMGR) + 1024;
+ s += dbenv->mutex_cnt *
+ __db_shalloc_size(sizeof(DB_MUTEX), dbenv->mutex_align);
+ /*
+ * Allocate space for thread info blocks. Max is only advisory,
+ * so we allocate 25% more.
+ */
+ s += (dbenv->thr_max + dbenv->thr_max/4) *
+ __db_shalloc_size(sizeof(DB_THREAD_INFO), sizeof(roff_t));
+ s += dbenv->thr_nbucket *
+ __db_shalloc_size(sizeof(DB_HASHTAB), sizeof(roff_t));
+ return (s);
+}
+
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+/*
+ * __mutex_resource_return
+ * Return any system-allocated mutex resources to the system.
+ *
+ * PUBLIC: void __mutex_resource_return __P((DB_ENV *, REGINFO *));
+ */
+void
+__mutex_resource_return(dbenv, infop)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr, mtxmgr_st;
+ DB_MUTEXREGION *mtxregion;
+ db_mutex_t i;
+ void *orig_handle;
+
+ /*
+ * This routine is called in two cases: when discarding the regions
+ * from a previous Berkeley DB run, during recovery, and two, when
+ * discarding regions as we shut down the database environment.
+ *
+ * Walk the list of mutexes and destroy any live ones.
+ *
+ * This is just like joining a region -- the REGINFO we're handed
+ * is the same as the one returned by __db_r_attach(), all we have
+ * to do is fill in the links.
+ *
+ * !!!
+ * The region may be corrupted, of course. We're safe because the
+ * only things we look at are things that are initialized when the
+ * region is created, and never modified after that.
+ */
+ memset(&mtxmgr_st, 0, sizeof(mtxmgr_st));
+ mtxmgr = &mtxmgr_st;
+ mtxmgr->reginfo = *infop;
+ mtxregion = mtxmgr->reginfo.primary =
+ R_ADDR(&mtxmgr->reginfo, mtxmgr->reginfo.rp->primary);
+ mtxmgr->mutex_array = R_ADDR(&mtxmgr->reginfo, mtxregion->mutex_offset);
+
+ /*
+ * This is a little strange, but the mutex_handle is what all of the
+ * underlying mutex routines will use to determine if they should do
+ * any work and to find their information. Save/restore the handle
+ * around the work loop.
+ *
+ * The OOB mutex (MUTEX_INVALID) is 0, skip it.
+ */
+ orig_handle = dbenv->mutex_handle;
+ dbenv->mutex_handle = mtxmgr;
+ for (i = 1; i <= mtxregion->stat.st_mutex_cnt; ++i, ++mutexp) {
+ mutexp = MUTEXP_SET(i);
+ if (F_ISSET(mutexp, DB_MUTEX_ALLOCATED))
+ (void)__mutex_destroy(dbenv, i);
+ }
+ dbenv->mutex_handle = orig_handle;
+}
+#endif
diff --git a/db/mutex/mut_stat.c b/db/mutex/mut_stat.c
new file mode 100644
index 000000000..1e642fe2f
--- /dev/null
+++ b/db/mutex/mut_stat.c
@@ -0,0 +1,450 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: mut_stat.c,v 12.17 2006/08/24 14:46:16 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/mutex_int.h"
+
+#ifdef HAVE_STATISTICS
+static int __mutex_print_all __P((DB_ENV *, u_int32_t));
+static const char *__mutex_print_id __P((int));
+static int __mutex_print_stats __P((DB_ENV *, u_int32_t));
+static void __mutex_print_summary __P((DB_ENV *));
+
+/*
+ * __mutex_stat --
+ * DB_ENV->mutex_stat.
+ *
+ * PUBLIC: int __mutex_stat __P((DB_ENV *, DB_MUTEX_STAT **, u_int32_t));
+ */
+int
+__mutex_stat(dbenv, statp, flags)
+ DB_ENV *dbenv;
+ DB_MUTEX_STAT **statp;
+ u_int32_t flags;
+{
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ DB_MUTEX_STAT *stats;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->mutex_stat", flags, DB_STAT_CLEAR)) != 0)
+ return (ret);
+
+ *statp = NULL;
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+
+ if ((ret = __os_umalloc(dbenv, sizeof(DB_MUTEX_STAT), &stats)) != 0)
+ return (ret);
+
+ MUTEX_SYSTEM_LOCK(dbenv);
+
+ /*
+ * Most fields are maintained in the underlying region structure.
+ * Region size and region mutex are not.
+ */
+ *stats = mtxregion->stat;
+ stats->st_regsize = mtxmgr->reginfo.rp->size;
+ __mutex_set_wait_info(dbenv, mtxregion->mtx_region,
+ &stats->st_region_wait, &stats->st_region_nowait);
+ if (LF_ISSET(DB_STAT_CLEAR))
+ __mutex_clear(dbenv, mtxregion->mtx_region);
+
+ MUTEX_SYSTEM_UNLOCK(dbenv);
+
+ *statp = stats;
+ return (0);
+}
+
+/*
+ * __mutex_stat_print
+ * DB_ENV->mutex_stat_print method.
+ *
+ * PUBLIC: int __mutex_stat_print __P((DB_ENV *, u_int32_t));
+ */
+int
+__mutex_stat_print(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ u_int32_t orig_flags;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_fchk(dbenv, "DB_ENV->mutex_stat_print",
+ flags, DB_STAT_ALL | DB_STAT_CLEAR)) != 0)
+ return (ret);
+
+ orig_flags = flags;
+ LF_CLR(DB_STAT_CLEAR);
+ if (flags == 0 || LF_ISSET(DB_STAT_ALL)) {
+ ret = __mutex_print_stats(dbenv, orig_flags);
+ __mutex_print_summary(dbenv);
+ if (flags == 0 || ret != 0)
+ return (ret);
+ }
+
+ if (LF_ISSET(DB_STAT_ALL))
+ ret = __mutex_print_all(dbenv, orig_flags);
+
+ return (0);
+}
+
+static void
+__mutex_print_summary(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ db_mutex_t i;
+ u_int32_t counts[MTX_MAX_ENTRY + 2];
+ int alloc_id;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ memset(counts, 0, sizeof(counts));
+
+ for (i = 1; i <= mtxregion->stat.st_mutex_cnt; ++i, ++mutexp) {
+ mutexp = MUTEXP_SET(i);
+
+ if (!F_ISSET(mutexp, DB_MUTEX_ALLOCATED))
+ counts[0]++;
+ else if (mutexp->alloc_id > MTX_MAX_ENTRY)
+ counts[MTX_MAX_ENTRY + 1]++;
+ else
+ counts[mutexp->alloc_id]++;
+ }
+ __db_msg(dbenv, "Mutex counts");
+ __db_msg(dbenv, "%d\tUnallocated", counts[0]);
+ for (alloc_id = 1; alloc_id <= MTX_TXN_REGION + 1; alloc_id++)
+ if (counts[alloc_id] != 0)
+ __db_msg(dbenv, "%lu\t%s",
+ (u_long)counts[alloc_id],
+ __mutex_print_id(alloc_id));
+
+}
+
+/*
+ * __mutex_print_stats --
+ * Display default mutex region statistics.
+ */
+static int
+__mutex_print_stats(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ DB_MUTEX_STAT *sp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ REGINFO *infop;
+ THREAD_INFO *thread;
+ int ret;
+
+ if ((ret = __mutex_stat(dbenv, &sp, LF_ISSET(DB_STAT_CLEAR))) != 0)
+ return (ret);
+
+ if (LF_ISSET(DB_STAT_ALL))
+ __db_msg(dbenv, "Default mutex region information:");
+
+ __db_dlbytes(dbenv, "Mutex region size",
+ (u_long)0, (u_long)0, (u_long)sp->st_regsize);
+ __db_dl_pct(dbenv,
+ "The number of region locks that required waiting",
+ (u_long)sp->st_region_wait, DB_PCT(sp->st_region_wait,
+ sp->st_region_wait + sp->st_region_nowait), NULL);
+ STAT_ULONG("Mutex alignment", sp->st_mutex_align);
+ STAT_ULONG("Mutex test-and-set spins", sp->st_mutex_tas_spins);
+ STAT_ULONG("Mutex total count", sp->st_mutex_cnt);
+ STAT_ULONG("Mutex free count", sp->st_mutex_free);
+ STAT_ULONG("Mutex in-use count", sp->st_mutex_inuse);
+ STAT_ULONG("Mutex maximum in-use count", sp->st_mutex_inuse_max);
+
+ __os_ufree(dbenv, sp);
+
+ /*
+ * Dump out the info we have on thread tracking, we do it here only
+ * because we share the region.
+ */
+ if (dbenv->thr_hashtab != NULL) {
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ infop = &mtxmgr->reginfo;
+ thread = R_ADDR(infop, mtxregion->thread_off);
+ STAT_ULONG("Thread blocks allocated", thread->thr_count);
+ STAT_ULONG("Thread allocation threshold", thread->thr_max);
+ STAT_ULONG("Thread hash buckets", thread->thr_nbucket);
+ }
+
+ return (0);
+}
+
+/*
+ * __mutex_print_all --
+ * Display debugging mutex region statistics.
+ */
+static int
+__mutex_print_all(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ static const FN fn[] = {
+ { DB_MUTEX_ALLOCATED, "alloc" },
+ { DB_MUTEX_LOCKED, "locked" },
+ { DB_MUTEX_LOGICAL_LOCK, "logical" },
+ { DB_MUTEX_PROCESS_ONLY, "process-private" },
+ { DB_MUTEX_SELF_BLOCK, "self-block" },
+ { 0, NULL }
+ };
+ DB_MSGBUF mb, *mbp;
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ db_mutex_t i;
+
+ DB_MSGBUF_INIT(&mb);
+ mbp = &mb;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+
+ __db_print_reginfo(dbenv, &mtxmgr->reginfo, "Mutex");
+ __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+
+ __db_msg(dbenv, "DB_MUTEXREGION structure:");
+ __mutex_print_debug_single(dbenv,
+ "DB_MUTEXREGION region mutex", mtxregion->mtx_region, flags);
+ STAT_ULONG("Size of the aligned mutex", mtxregion->mutex_size);
+ STAT_ULONG("Next free mutex", mtxregion->mutex_next);
+
+ /*
+ * The OOB mutex (MUTEX_INVALID) is 0, skip it.
+ *
+ * We're not holding the mutex region lock, so we're racing threads of
+ * control allocating mutexes. That's OK, it just means we display or
+ * clear statistics while mutexes are moving.
+ */
+ __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+ __db_msg(dbenv, "mutex\twait/nowait, pct wait, holder, flags");
+ for (i = 1; i <= mtxregion->stat.st_mutex_cnt; ++i, ++mutexp) {
+ mutexp = MUTEXP_SET(i);
+
+ if (!F_ISSET(mutexp, DB_MUTEX_ALLOCATED))
+ continue;
+
+ __db_msgadd(dbenv, mbp, "%5lu\t", (u_long)i);
+
+ __mutex_print_debug_stats(dbenv, mbp, i, flags);
+
+ if (mutexp->alloc_id != 0)
+ __db_msgadd(dbenv,
+ mbp, ", %s", __mutex_print_id(mutexp->alloc_id));
+
+ __db_prflags(dbenv, mbp, mutexp->flags, fn, " (", ")");
+
+ DB_MSGBUF_FLUSH(dbenv, mbp);
+ }
+
+ return (0);
+}
+
+/*
+ * __mutex_print_debug_single --
+ * Print mutex internal debugging statistics for a single mutex on a
+ * single output line.
+ *
+ * PUBLIC: void __mutex_print_debug_single
+ * PUBLIC: __P((DB_ENV *, const char *, db_mutex_t, u_int32_t));
+ */
+void
+__mutex_print_debug_single(dbenv, tag, mutex, flags)
+ DB_ENV *dbenv;
+ const char *tag;
+ db_mutex_t mutex;
+ u_int32_t flags;
+{
+ DB_MSGBUF mb, *mbp;
+
+ DB_MSGBUF_INIT(&mb);
+ mbp = &mb;
+
+ __db_msgadd(dbenv, mbp, "%lu\t%s ", (u_long)mutex, tag);
+ __mutex_print_debug_stats(dbenv, mbp, mutex, flags);
+ DB_MSGBUF_FLUSH(dbenv, mbp);
+}
+
+/*
+ * __mutex_print_debug_stats --
+ * Print mutex internal debugging statistics, that is, the statistics
+ * in the [] square brackets.
+ *
+ * PUBLIC: void __mutex_print_debug_stats
+ * PUBLIC: __P((DB_ENV *, DB_MSGBUF *, db_mutex_t, u_int32_t));
+ */
+void
+__mutex_print_debug_stats(dbenv, mbp, mutex, flags)
+ DB_ENV *dbenv;
+ DB_MSGBUF *mbp;
+ db_mutex_t mutex;
+ u_int32_t flags;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ u_long value;
+ char buf[DB_THREADID_STRLEN];
+
+ if (mutex == MUTEX_INVALID) {
+ __db_msgadd(dbenv, mbp, "[!Set]");
+ return;
+ }
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+ __db_msgadd(dbenv, mbp, "[");
+ if ((value = mutexp->mutex_set_wait) < 10000000)
+ __db_msgadd(dbenv, mbp, "%lu", value);
+ else
+ __db_msgadd(dbenv, mbp, "%luM", value / 1000000);
+ if ((value = mutexp->mutex_set_nowait) < 10000000)
+ __db_msgadd(dbenv, mbp, "/%lu", value);
+ else
+ __db_msgadd(dbenv, mbp, "/%luM", value / 1000000);
+
+ __db_msgadd(dbenv, mbp, " %d%%",
+ DB_PCT(mutexp->mutex_set_wait,
+ mutexp->mutex_set_wait + mutexp->mutex_set_nowait));
+
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED))
+ __db_msgadd(dbenv, mbp, " %s]",
+ dbenv->thread_id_string(dbenv,
+ mutexp->pid, mutexp->tid, buf));
+ else
+ __db_msgadd(dbenv, mbp, " !Own]");
+
+ if (LF_ISSET(DB_STAT_CLEAR))
+ __mutex_clear(dbenv, mutex);
+}
+
+static const char *
+__mutex_print_id(alloc_id)
+ int alloc_id;
+{
+ switch (alloc_id) {
+ case MTX_APPLICATION: return ("application allocated");
+ case MTX_DB_HANDLE: return ("db handle");
+ case MTX_ENV_DBLIST: return ("env dblist");
+ case MTX_ENV_REGION: return ("env region");
+ case MTX_LOCK_REGION: return ("lock region");
+ case MTX_LOGICAL_LOCK: return ("logical lock");
+ case MTX_LOG_FILENAME: return ("log filename");
+ case MTX_LOG_FLUSH: return ("log flush");
+ case MTX_LOG_HANDLE: return ("log handle");
+ case MTX_LOG_REGION: return ("log region");
+ case MTX_MPOOLFILE_HANDLE: return ("mpoolfile handle");
+ case MTX_MPOOL_FH: return ("mpool filehandle");
+ case MTX_MPOOL_FILE_BUCKET: return ("mpool file bucket");
+ case MTX_MPOOL_HANDLE: return ("mpool handle");
+ case MTX_MPOOL_HASH_BUCKET: return ("mpool hash bucket");
+ case MTX_MPOOL_IO: return ("mpool buffer I/O");
+ case MTX_MPOOL_REGION: return ("mpool region");
+ case MTX_REP_DATABASE: return ("replication database");
+ case MTX_REP_REGION: return ("replication region");
+ case MTX_SEQUENCE: return ("sequence");
+ case MTX_TWISTER: return ("twister");
+ case MTX_TXN_ACTIVE: return ("txn active list");
+ case MTX_TXN_COMMIT: return ("txn commit");
+ case MTX_TXN_MVCC: return ("txn mvcc");
+ case MTX_TXN_REGION: return ("txn region");
+ default: return ("unknown mutex type");
+ }
+ /* NOTREACHED */
+}
+
+/*
+ * __mutex_set_wait_info --
+ * Return mutex statistics.
+ *
+ * PUBLIC: void __mutex_set_wait_info
+ * PUBLIC: __P((DB_ENV *, db_mutex_t, u_int32_t *, u_int32_t *));
+ */
+void
+__mutex_set_wait_info(dbenv, mutex, waitp, nowaitp)
+ DB_ENV *dbenv;
+ db_mutex_t mutex;
+ u_int32_t *waitp, *nowaitp;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+ *waitp = mutexp->mutex_set_wait;
+ *nowaitp = mutexp->mutex_set_nowait;
+}
+
+/*
+ * __mutex_clear --
+ * Clear mutex statistics.
+ *
+ * PUBLIC: void __mutex_clear __P((DB_ENV *, db_mutex_t));
+ */
+void
+__mutex_clear(dbenv, mutex)
+ DB_ENV *dbenv;
+ db_mutex_t mutex;
+{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+ mutexp->mutex_set_wait = mutexp->mutex_set_nowait = 0;
+}
+
+#else /* !HAVE_STATISTICS */
+
+int
+__mutex_stat(dbenv, statp, flags)
+ DB_ENV *dbenv;
+ DB_MUTEX_STAT **statp;
+ u_int32_t flags;
+{
+ COMPQUIET(statp, NULL);
+ COMPQUIET(flags, 0);
+
+ return (__db_stat_not_built(dbenv));
+}
+
+int
+__mutex_stat_print(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ COMPQUIET(flags, 0);
+
+ return (__db_stat_not_built(dbenv));
+}
+#endif
diff --git a/db/mutex/mut_tas.c b/db/mutex/mut_tas.c
index 08d7ed876..bbe25fa8e 100644
--- a/db/mutex/mut_tas.c
+++ b/db/mutex/mut_tas.c
@@ -1,132 +1,113 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mut_tas.c,v 11.44 2004/09/15 19:14:49 bostic Exp $
+ * $Id: mut_tas.c,v 12.20 2006/08/24 14:46:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
+#include "db_int.h"
/*
* This is where we load in the actual test-and-set mutex code.
*/
#define LOAD_ACTUAL_MUTEX_CODE
-#include "db_int.h"
+#include "dbinc/mutex_int.h"
/*
* __db_tas_mutex_init --
- * Initialize a DB_MUTEX.
+ * Initialize a test-and-set mutex.
*
- * PUBLIC: int __db_tas_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
+ * PUBLIC: int __db_tas_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
*/
int
-__db_tas_mutex_init(dbenv, mutexp, flags)
+__db_tas_mutex_init(dbenv, mutex, flags)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
u_int32_t flags;
{
- u_int32_t save;
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+ int ret;
+
+ COMPQUIET(flags, 0);
+
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
/* Check alignment. */
- if ((uintptr_t)mutexp & (MUTEX_ALIGN - 1)) {
- __db_err(dbenv,
- "__db_tas_mutex_init: mutex not appropriately aligned");
+ if (((uintptr_t)mutexp & (dbenv->mutex_align - 1)) != 0) {
+ __db_errx(dbenv, "TAS: mutex not appropriately aligned");
return (EINVAL);
}
- /*
- * 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
- * no other processes in the environment, use thread-only locks, they
- * are faster in some cases.
- *
- * This is where we decide to ignore locks we don't need to set -- if
- * the application isn't threaded, there aren't any threads to block.
- */
- if (LF_ISSET(MUTEX_THREAD) || F_ISSET(dbenv, DB_ENV_PRIVATE)) {
- if (!F_ISSET(dbenv, DB_ENV_THREAD)) {
- F_SET(mutexp, MUTEX_IGNORE);
- return (0);
- }
+ if (MUTEX_INIT(&mutexp->tas)) {
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "TAS: mutex initialize");
+ return (__os_posix_err(ret));
}
-
- if (LF_ISSET(MUTEX_LOGICAL_LOCK))
- F_SET(mutexp, MUTEX_LOGICAL_LOCK);
-
- /* Initialize the lock. */
- if (MUTEX_INIT(&mutexp->tas))
- return (__os_get_errno());
-
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- mutexp->reg_off = INVALID_ROFF;
-#endif
- F_SET(mutexp, MUTEX_INITED);
-
return (0);
}
/*
* __db_tas_mutex_lock
- * Lock on a mutex, logically blocking if necessary.
+ * Lock on a mutex, blocking if necessary.
*
- * PUBLIC: int __db_tas_mutex_lock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_tas_mutex_lock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_tas_mutex_lock(dbenv, mutexp)
+__db_tas_mutex_lock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
u_int32_t nspins;
u_long ms, max_ms;
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
+#ifdef HAVE_STATISTICS
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED))
+ ++mutexp->mutex_set_wait;
+ else
+ ++mutexp->mutex_set_nowait;
+#endif
+
/*
* 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;
+ max_ms = F_ISSET(mutexp, DB_MUTEX_LOGICAL_LOCK) ? 10 : 25;
loop: /* Attempt to acquire the resource for N spins. */
- for (nspins = dbenv->tas_spins; nspins > 0; --nspins) {
+ for (nspins =
+ mtxregion->stat.st_mutex_tas_spins; nspins > 0; --nspins) {
#ifdef HAVE_MUTEX_HPPA_MSEM_INIT
relock:
#endif
#ifdef HAVE_MUTEX_S390_CC_ASSEMBLY
tsl_t zero = 0;
#endif
- if (
-#ifdef MUTEX_SET_TEST
/*
- * If using test-and-set mutexes, and we know the "set" value,
- * we can avoid interlocked instructions since they're unlikely
- * to succeed.
+ * Avoid interlocked instructions until they're likely to
+ * succeed.
*/
- mutexp->tas ||
-#endif
- !MUTEX_SET(&mutexp->tas)) {
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED) ||
+ !MUTEX_SET(&mutexp->tas)) {
/*
* Some systems (notably those with newer Intel CPUs)
* need a small pause here. [#6975]
@@ -141,71 +122,95 @@ relock:
/*
* HP semaphores are unlocked automatically when a holding
* process exits. If the mutex appears to be locked
- * (mutexp->locked != 0) but we got here, assume this has
- * happened. Stick our own pid into mutexp->locked and
+ * (F_ISSET(DB_MUTEX_LOCKED)) but we got here, assume this
+ * has happened. Set the pid and tid into the mutex and
* lock again. (The default state of the mutexes used to
* block in __lock_get_internal is locked, so exiting with
* a locked mutex is reasonable behavior for a process that
* happened to initialize or use one of them.)
*/
- if (mutexp->locked != 0) {
- __os_id(&mutexp->locked);
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ F_SET(mutexp, DB_MUTEX_LOCKED);
+ dbenv->thread_id(dbenv, &mutexp->pid, &mutexp->tid);
+ CHECK_MTX_THREAD(dbenv, mutexp);
goto relock;
}
/*
- * If we make it here, locked == 0, the diagnostic won't fire,
- * and we were really unlocked by someone calling the
- * DB mutex unlock function.
+ * If we make it here, the mutex isn't locked, the diagnostic
+ * won't fire, and we were really unlocked by someone calling
+ * the DB mutex unlock function.
*/
#endif
#ifdef DIAGNOSTIC
- if (mutexp->locked != 0)
- __db_err(dbenv,
- "__db_tas_mutex_lock: ERROR: lock currently in use: ID: %lu",
- (u_long)mutexp->locked);
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ char buf[DB_THREADID_STRLEN];
+ __db_errx(dbenv,
+ "TAS lock failed: lock currently in use: ID: %s",
+ dbenv->thread_id_string(dbenv,
+ mutexp->pid, mutexp->tid, buf));
+ return (__db_panic(dbenv, EACCES));
+ }
#endif
-#if defined(DIAGNOSTIC) || defined(HAVE_MUTEX_HPPA_MSEM_INIT)
- __os_id(&mutexp->locked);
+ F_SET(mutexp, DB_MUTEX_LOCKED);
+ dbenv->thread_id(dbenv, &mutexp->pid, &mutexp->tid);
+ CHECK_MTX_THREAD(dbenv, mutexp);
+
+#ifdef DIAGNOSTIC
+ /*
+ * We want to switch threads as often as possible. Yield
+ * every time we get a mutex to ensure contention.
+ */
+ if (F_ISSET(dbenv, DB_ENV_YIELDCPU))
+ __os_yield(dbenv);
#endif
- if (ms == 1)
- ++mutexp->mutex_set_nowait;
- else
- ++mutexp->mutex_set_wait;
return (0);
}
- /*
- * Yield the processor.
- */
- __os_yield(NULL, ms * USEC_PER_MS);
+ /* Wait for the lock to become available. */
+ __os_sleep(dbenv, 0, ms * USEC_PER_MS);
if ((ms <<= 1) > max_ms)
ms = max_ms;
+ /*
+ * We're spinning. The environment might be hung, and somebody else
+ * has already recovered it. The first thing recovery does is panic
+ * the environment. Check to see if we're never going to get this
+ * mutex.
+ */
+ PANIC_CHECK(dbenv);
+
goto loop;
}
/*
* __db_tas_mutex_unlock --
- * Release a lock.
+ * Release a mutex.
*
- * PUBLIC: int __db_tas_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_tas_mutex_unlock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_tas_mutex_unlock(dbenv, mutexp)
+__db_tas_mutex_unlock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
#ifdef DIAGNOSTIC
- if (!mutexp->locked)
- __db_err(dbenv,
- "__db_tas_mutex_unlock: ERROR: lock already unlocked");
-#endif
-#if defined(DIAGNOSTIC) || defined(HAVE_MUTEX_HPPA_MSEM_INIT)
- mutexp->locked = 0;
+ if (!F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ __db_errx(dbenv, "TAS unlock failed: lock already unlocked");
+ return (__db_panic(dbenv, EACCES));
+ }
#endif
+ F_CLR(mutexp, DB_MUTEX_LOCKED);
MUTEX_UNSET(&mutexp->tas);
@@ -214,17 +219,26 @@ __db_tas_mutex_unlock(dbenv, mutexp)
/*
* __db_tas_mutex_destroy --
- * Destroy a DB_MUTEX.
+ * Destroy a mutex.
*
- * PUBLIC: int __db_tas_mutex_destroy __P((DB_MUTEX *));
+ * PUBLIC: int __db_tas_mutex_destroy __P((DB_ENV *, db_mutex_t));
*/
int
-__db_tas_mutex_destroy(mutexp)
- DB_MUTEX *mutexp;
+__db_tas_mutex_destroy(dbenv, mutex)
+ DB_ENV *dbenv;
+ db_mutex_t mutex;
{
- if (F_ISSET(mutexp, MUTEX_IGNORE))
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
+
+ if (!MUTEX_ON(dbenv))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
MUTEX_DESTROY(&mutexp->tas);
return (0);
diff --git a/db/mutex/mut_win32.c b/db/mutex/mut_win32.c
index b51000321..083784310 100644
--- a/db/mutex/mut_win32.c
+++ b/db/mutex/mut_win32.c
@@ -1,113 +1,136 @@
/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: mut_win32.c,v 1.18 2004/07/06 21:06:39 mjc Exp $
+ * $Id: mut_win32.c,v 12.21 2006/08/24 14:46:16 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
+#include "db_int.h"
/*
* This is where we load in the actual test-and-set mutex code.
*/
#define LOAD_ACTUAL_MUTEX_CODE
-#include "db_int.h"
+#include "dbinc/mutex_int.h"
/* We don't want to run this code even in "ordinary" diagnostic mode. */
#undef MUTEX_DIAG
+/*
+ * Common code to get an event handle. This is executed whenever a mutex
+ * blocks, or when unlocking a mutex that a thread is waiting on. We can't
+ * keep these handles around, since the mutex structure is in shared memory,
+ * and each process gets its own handle value.
+ *
+ * We pass security attributes so that the created event is accessible by all
+ * users, in case a Windows service is sharing an environment with a local
+ * process run as a different user.
+ */
static _TCHAR hex_digits[] = _T("0123456789abcdef");
+static SECURITY_DESCRIPTOR null_sd;
+static SECURITY_ATTRIBUTES all_sa;
+static int security_initialized = 0;
+
+static __inline int get_handle(dbenv, mutexp, eventp)
+ DB_ENV *dbenv;
+ DB_MUTEX *mutexp;
+ HANDLE *eventp;
+{
+ _TCHAR idbuf[] = _T("db.m00000000");
+ _TCHAR *p = idbuf + 12;
+ int ret = 0;
+ u_int32_t id;
+
+ for (id = (mutexp)->id; id != 0; id >>= 4)
+ *--p = hex_digits[id & 0xf];
+
+ if (!security_initialized) {
+ InitializeSecurityDescriptor(&null_sd,
+ SECURITY_DESCRIPTOR_REVISION);
+ SetSecurityDescriptorDacl(&null_sd, TRUE, 0, FALSE);
+ all_sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+ all_sa.bInheritHandle = FALSE;
+ all_sa.lpSecurityDescriptor = &null_sd;
+ security_initialized = 1;
+ }
+
+ if ((*eventp = CreateEvent(&all_sa, FALSE, FALSE, idbuf)) == NULL) {
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "Win32 create event failed");
+ }
-#define GET_HANDLE(mutexp, event) do { \
- _TCHAR idbuf[] = _T("db.m00000000"); \
- _TCHAR *p = idbuf + 12; \
- u_int32_t id; \
- \
- for (id = (mutexp)->id; id != 0; id >>= 4) \
- *--p = hex_digits[id & 0xf]; \
- event = CreateEvent(NULL, FALSE, FALSE, idbuf); \
- if (event == NULL) \
- return (__os_get_errno()); \
-} while (0)
+ return (ret);
+}
/*
* __db_win32_mutex_init --
- * Initialize a DB_MUTEX.
+ * Initialize a Win32 mutex.
*
- * PUBLIC: int __db_win32_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
+ * PUBLIC: int __db_win32_mutex_init __P((DB_ENV *, db_mutex_t, u_int32_t));
*/
int
-__db_win32_mutex_init(dbenv, mutexp, flags)
+__db_win32_mutex_init(dbenv, mutex, flags)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
u_int32_t flags;
{
- 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);
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
- /*
- * If this is a thread lock or the process has told us that there are
- * no other processes in the environment, and the application isn't
- * threaded, there aren't any threads to block.
- */
- if (LF_ISSET(MUTEX_THREAD) || F_ISSET(dbenv, DB_ENV_PRIVATE)) {
- if (!F_ISSET(dbenv, DB_ENV_THREAD)) {
- F_SET(mutexp, MUTEX_IGNORE);
- return (0);
- }
- }
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
mutexp->id = ((getpid() & 0xffff) << 16) ^ P_TO_UINT32(mutexp);
- F_SET(mutexp, MUTEX_INITED);
+
return (0);
}
/*
* __db_win32_mutex_lock
- * Lock on a mutex, logically blocking if necessary.
+ * Lock on a mutex, blocking if necessary.
*
- * PUBLIC: int __db_win32_mutex_lock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_win32_mutex_lock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_win32_mutex_lock(dbenv, mutexp)
+__db_win32_mutex_lock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
HANDLE event;
u_int32_t nspins;
- int ret, ms;
+ int ms, ret;
#ifdef MUTEX_DIAG
LARGE_INTEGER now;
#endif
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
+
event = NULL;
ms = 50;
ret = 0;
loop: /* Attempt to acquire the resource for N spins. */
- for (nspins = dbenv->tas_spins; nspins > 0; --nspins) {
- if (!MUTEX_SET(&mutexp->tas)) {
+ for (nspins =
+ mtxregion->stat.st_mutex_tas_spins; nspins > 0; --nspins) {
+ /*
+ * We can avoid the (expensive) interlocked instructions if
+ * the mutex is already "set".
+ */
+ if (mutexp->tas || !MUTEX_SET(&mutexp->tas)) {
/*
* Some systems (notably those with newer Intel CPUs)
* need a small pause here. [#6975]
@@ -119,17 +142,26 @@ loop: /* Attempt to acquire the resource for N spins. */
}
#ifdef DIAGNOSTIC
- if (mutexp->locked)
- __db_err(dbenv,
- "__db_win32_mutex_lock: mutex double-locked!");
-
- __os_id(&mutexp->locked);
+ if (F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ char buf[DB_THREADID_STRLEN];
+ __db_errx(dbenv,
+ "Win32 lock failed: mutex already locked by %s",
+ dbenv->thread_id_string(dbenv,
+ mutexp->pid, mutexp->tid, buf));
+ return (__db_panic(dbenv, EACCES));
+ }
#endif
+ F_SET(mutexp, DB_MUTEX_LOCKED);
+ dbenv->thread_id(dbenv, &mutexp->pid, &mutexp->tid);
+ CHECK_MTX_THREAD(dbenv, mutexp);
+#ifdef HAVE_STATISTICS
if (event == NULL)
++mutexp->mutex_set_nowait;
- else {
+ else
++mutexp->mutex_set_wait;
+#endif
+ if (event != NULL) {
CloseHandle(event);
InterlockedDecrement(&mutexp->nwaiters);
#ifdef MUTEX_DIAG
@@ -142,6 +174,15 @@ loop: /* Attempt to acquire the resource for N spins. */
#endif
}
+#ifdef DIAGNOSTIC
+ /*
+ * We want to switch threads as often as possible. Yield
+ * every time we get a mutex to ensure contention.
+ */
+ if (F_ISSET(dbenv, DB_ENV_YIELDCPU))
+ __os_yield(dbenv);
+#endif
+
return (0);
}
@@ -158,79 +199,92 @@ loop: /* Attempt to acquire the resource for N spins. */
now.QuadPart, mutexp, mutexp->id);
#endif
InterlockedIncrement(&mutexp->nwaiters);
- GET_HANDLE(mutexp, event);
+ if ((ret = get_handle(dbenv, mutexp, &event)) != 0)
+ goto err;
+ }
+ if ((ret = WaitForSingleObject(event, ms)) == WAIT_FAILED) {
+ ret = __os_get_syserr();
+ goto err;
}
- if ((ret = WaitForSingleObject(event, ms)) == WAIT_FAILED)
- return (__os_get_errno());
if ((ms <<= 1) > MS_PER_SEC)
ms = MS_PER_SEC;
+ PANIC_CHECK(dbenv);
goto loop;
+
+err: __db_syserr(dbenv, ret, "Win32 lock failed");
+ return (__db_panic(dbenv, __os_posix_err(ret)));
}
/*
* __db_win32_mutex_unlock --
- * Release a lock.
+ * Release a mutex.
*
- * PUBLIC: int __db_win32_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
+ * PUBLIC: int __db_win32_mutex_unlock __P((DB_ENV *, db_mutex_t));
*/
int
-__db_win32_mutex_unlock(dbenv, mutexp)
+__db_win32_mutex_unlock(dbenv, mutex)
DB_ENV *dbenv;
- DB_MUTEX *mutexp;
+ db_mutex_t mutex;
{
- int ret;
+ DB_MUTEX *mutexp;
+ DB_MUTEXMGR *mtxmgr;
+ DB_MUTEXREGION *mtxregion;
HANDLE event;
+ int ret;
#ifdef MUTEX_DIAG
- LARGE_INTEGER now;
+ LARGE_INTEGER now;
#endif
-
- if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (!MUTEX_ON(dbenv) || F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
-#ifdef DIAGNOSTIC
- if (!mutexp->tas || !mutexp->locked)
- __db_err(dbenv,
- "__db_win32_mutex_unlock: ERROR: lock already unlocked");
+ mtxmgr = dbenv->mutex_handle;
+ mtxregion = mtxmgr->reginfo.primary;
+ mutexp = MUTEXP_SET(mutex);
- mutexp->locked = 0;
+#ifdef DIAGNOSTIC
+ if (!mutexp->tas || !F_ISSET(mutexp, DB_MUTEX_LOCKED)) {
+ __db_errx(dbenv, "Win32 unlock failed: lock already unlocked");
+ return (__db_panic(dbenv, EACCES));
+ }
#endif
+ F_CLR(mutexp, DB_MUTEX_LOCKED);
MUTEX_UNSET(&mutexp->tas);
- ret = 0;
-
if (mutexp->nwaiters > 0) {
- GET_HANDLE(mutexp, event);
+ if ((ret = get_handle(dbenv, mutexp, &event)) != 0)
+ goto err;
#ifdef MUTEX_DIAG
QueryPerformanceCounter(&now);
printf("[%I64d]: Signalling mutex %p, id %d\n",
now.QuadPart, mutexp, mutexp->id);
#endif
- if (!PulseEvent(event))
- ret = __os_get_errno();
+ if (!PulseEvent(event)) {
+ ret = __os_get_syserr();
+ CloseHandle(event);
+ goto err;
+ }
CloseHandle(event);
}
-#ifdef DIAGNOSTIC
- if (ret != 0)
- __db_err(dbenv,
- "__db_win32_mutex_unlock: ERROR: unlock failed");
-#endif
+ return (0);
- return (ret);
+err: __db_syserr(dbenv, ret, "Win32 unlock failed");
+ return (__db_panic(dbenv, __os_posix_err(ret)));
}
/*
* __db_win32_mutex_destroy --
- * Destroy a DB_MUTEX - noop with this implementation.
+ * Destroy a mutex.
*
- * PUBLIC: int __db_win32_mutex_destroy __P((DB_MUTEX *));
+ * PUBLIC: int __db_win32_mutex_destroy __P((DB_ENV *, db_mutex_t));
*/
int
-__db_win32_mutex_destroy(mutexp)
- DB_MUTEX *mutexp;
+__db_win32_mutex_destroy(dbenv, mutex)
+ DB_ENV *dbenv;
+ db_mutex_t mutex;
{
return (0);
}
diff --git a/db/mutex/tm.c b/db/mutex/tm.c
index ebfb2f329..de647fa1f 100644
--- a/db/mutex/tm.c
+++ b/db/mutex/tm.c
@@ -1,50 +1,76 @@
/*
* Standalone mutex tester for Berkeley DB mutexes.
+ *
+ * $Id: tm.c,v 12.14 2006/07/17 15:16:46 bostic Exp $
*/
+
#include "db_config.h"
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
+#include "db_int.h"
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+#include <sys/wait.h>
#if defined(MUTEX_THREAD_TEST)
#include <pthread.h>
#endif
-#include "db_int.h"
+#ifdef DB_WIN32
+extern int getopt(int, char * const *, const char *);
+
+typedef HANDLE os_pid_t;
+typedef HANDLE os_thread_t;
-#ifndef HAVE_QNX
-#define shm_open open
-#define shm_unlink remove
+#define os_thread_create(thrp, attr, func, arg) \
+ (((*(thrp) = CreateThread(NULL, 0, \
+ (LPTHREAD_START_ROUTINE)(func), (arg), 0, NULL)) == NULL) ? -1 : 0)
+#define os_thread_join(thr, statusp) \
+ ((WaitForSingleObject((thr), INFINITE) == WAIT_OBJECT_0) && \
+ GetExitCodeThread((thr), (LPDWORD)(statusp)) ? 0 : -1)
+#define os_thread_self() GetCurrentThreadId()
+
+#else /* !DB_WIN32 */
+
+typedef pid_t os_pid_t;
+
+#ifdef MUTEX_THREAD_TEST
+typedef pthread_t os_thread_t;
#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"
-
-DB_ENV dbenv; /* Fake out DB. */
+#define os_thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define os_thread_join(thr, statusp) pthread_join((thr), (statusp))
+#define os_thread_self() pthread_self()
+#endif
+
+#define OS_BAD_PID (os_pid_t)-1
+
+#define TESTDIR "TESTDIR" /* Working area */
+#define MT_FILE "TESTDIR/mutex.file"
+#define MT_FILE_QUIT "TESTDIR/mutex.file.quit"
+
+/*
+ * The backing file layout:
+ * TM[1] per-thread mutex array lock
+ * TM[nthreads] per-thread mutex array
+ * TM[maxlocks] per-lock mutex array
+ */
+typedef struct {
+ db_mutex_t mutex; /* Mutex. */
+ u_long id; /* Holder's ID. */
+ u_int wakeme; /* Request to awake. */
+} TM;
+
+DB_ENV *dbenv; /* Backing environment */
size_t len; /* Backing file size. */
-int align; /* Mutex alignment in file. */
+
+u_int8_t *gm_addr; /* Global mutex */
+u_int8_t *lm_addr; /* Locker mutexes */
+u_int8_t *tm_addr; /* Thread mutexes */
+
+#ifdef MUTEX_THREAD_TEST
+os_thread_t *kidsp; /* Locker threads */
+os_thread_t wakep; /* Wakeup thread */
+#endif
int maxlocks = 20; /* -l: Backing locks. */
int nlocks = 10000; /* -n: Locks per processes. */
@@ -52,12 +78,24 @@ int nprocs = 20; /* -p: Processes. */
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 locker_start(u_long);
+int locker_wait(void);
+void map_file(u_int8_t **, u_int8_t **, u_int8_t **, DB_FH **);
+os_pid_t os_spawn(const char *, char *const[]);
+int os_wait(os_pid_t *, int);
+void *run_lthread(void *);
+void *run_wthread(void *);
+os_pid_t spawn_proc(u_long, char *, char *);
+void tm_env_close(void);
+int tm_env_init(void);
+void tm_file_init(void);
+void tm_mutex_destroy(void);
+void tm_mutex_init(void);
+void tm_mutex_stats(void);
+void unmap_file(u_int8_t *, DB_FH *);
+int usage(void);
+int wakeup_start(u_long);
+int wakeup_wait(void);
int
main(argc, argv)
@@ -67,12 +105,11 @@ main(argc, argv)
enum {LOCKER, WAKEUP, PARENT} rtype;
extern int optind;
extern char *optarg;
- pid_t pid;
+ os_pid_t wakeup_pid, *pids;
u_long id;
- int ch, fd, eval, i, status;
- char *p, *tmpath;
-
- __os_spin(&dbenv); /* Fake out DB. */
+ DB_FH *fhp, *map_fhp;
+ int ch, err, i;
+ char *p, *tmpath, cmd[1024];
rtype = PARENT;
id = 0;
@@ -122,173 +159,211 @@ main(argc, argv)
argv += optind;
/*
- * The file layout:
- * TM[1] per-thread mutex array lock
- * TM[nthreads] per-thread mutex array
- * TM[maxlocks] per-lock mutex array
+ * If we're not running a multi-process test, we should be running
+ * a multi-thread test.
*/
- align = DB_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);
+ if (nprocs == 1 && nthreads == 1) {
+ fprintf(stderr,
+ "tm: running in a single process requires multiple threads\n");
+ return (EXIT_FAILURE);
+ }
+
+ len = sizeof(TM) * (1 + nthreads * nprocs + maxlocks);
+
+ /*
+ * In the multi-process test, the parent spawns processes that exec
+ * the original binary, ending up here. Each process joins the DB
+ * environment separately and then calls the supporting function.
+ */
+ if (rtype == LOCKER || rtype == WAKEUP) {
+ __os_sleep(dbenv, 3, 0); /* Let everyone catch up. */
+ /* Initialize random numbers. */
+ srand((u_int)time(NULL) % getpid());
+
+ if (tm_env_init() != 0) /* Join the environment. */
+ exit(EXIT_FAILURE);
+ /* Join the backing file. */
+ map_file(&gm_addr, &tm_addr, &lm_addr, &map_fhp);
+ if (verbose)
+ printf(
+ "Backing file: global (%#lx), threads (%#lx), locks (%#lx)\n",
+ (u_long)gm_addr, (u_long)tm_addr, (u_long)lm_addr);
+
+ if ((rtype == LOCKER ?
+ locker_start(id) : wakeup_start(id)) != 0)
+ exit(EXIT_FAILURE);
+ if ((rtype == LOCKER ? locker_wait() : wakeup_wait()) != 0)
+ exit(EXIT_FAILURE);
+
+ unmap_file(gm_addr, map_fhp); /* Detach from backing file. */
+
+ tm_env_close(); /* Detach from environment. */
+
+ exit(EXIT_SUCCESS);
}
+ /*
+ * The following code is only executed by the original parent process.
+ *
+ * Clean up from any previous runs.
+ */
+ snprintf(cmd, sizeof(cmd), "rm -rf %s", TESTDIR);
+ (void)system(cmd);
+ snprintf(cmd, sizeof(cmd), "mkdir %s", TESTDIR);
+ (void)system(cmd);
+
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);
+ printf("tm: backing file %lu bytes\n", (u_long)len);
+
+ if (tm_env_init() != 0) /* Create the environment. */
+ exit(EXIT_FAILURE);
tm_file_init(); /* Initialize backing file. */
- tm_mutex_init(); /* Initialize file's mutexes. */
-
- for (i = 0; i < nprocs; ++i) {
- switch (fork()) {
- case -1:
- perror("fork");
- return (EXIT_FAILURE);
- case 0:
- exec_proc(id, tmpath, "locker");
- break;
- default:
- break;
+
+ /* Map in the backing file. */
+ map_file(&gm_addr, &tm_addr, &lm_addr, &map_fhp);
+ if (verbose)
+ printf(
+ "backing file: global (%#lx), threads (%#lx), locks (%#lx)\n",
+ (u_long)gm_addr, (u_long)tm_addr, (u_long)lm_addr);
+
+ tm_mutex_init(); /* Initialize mutexes. */
+
+ if (nprocs > 1) { /* Run the multi-process test. */
+ /* Allocate array of locker process IDs. */
+ if ((pids = calloc(nprocs, sizeof(os_pid_t))) == NULL) {
+ fprintf(stderr, "tm: %s\n", strerror(errno));
+ goto fail;
}
- id += nthreads;
- }
- (void)remove(MT_FILE_QUIT);
+ /* Spawn locker processes and threads. */
+ for (i = 0; i < nprocs; ++i) {
+ if ((pids[i] =
+ spawn_proc(id, tmpath, "locker")) == OS_BAD_PID) {
+ fprintf(stderr,
+ "tm: failed to spawn a locker\n");
+ goto fail;
+ }
+ id += nthreads;
+ }
- switch (fork()) {
- case -1:
- perror("fork");
- return (EXIT_FAILURE);
- case 0:
- exec_proc(id, tmpath, "wakeup");
- break;
- default:
- break;
- }
- ++id;
+ /* Spawn wakeup process/thread. */
+ if ((wakeup_pid =
+ spawn_proc(id, tmpath, "wakeup")) == OS_BAD_PID) {
+ fprintf(stderr, "tm: failed to spawn waker\n");
+ goto fail;
+ }
+ ++id;
- /* 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;
+ /* Wait for all lockers to exit. */
+ if ((err = os_wait(pids, nprocs)) != 0) {
+ fprintf(stderr, "locker wait failed with %d\n", err);
+ goto fail;
}
- /* 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);
+ /* Signal wakeup process to exit. */
+ if ((err = __os_open(
+ dbenv, MT_FILE_QUIT, DB_OSO_CREATE, 0664, &fhp)) != 0) {
+ fprintf(stderr, "tm: open %s\n", db_strerror(err));
+ goto fail;
+ }
+ (void)__os_closehandle(dbenv, fhp);
- /* 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;
- }
+ /* Wait for wakeup process/thread. */
+ if ((err = os_wait(&wakeup_pid, 1)) != 0) {
+ fprintf(stderr,
+ "%lu: exited %d\n", (u_long)wakeup_pid, err);
+ goto fail;
+ }
+ } else { /* Run the single-process test. */
+ /* Spawn locker threads. */
+ if (locker_start(0) != 0)
+ goto fail;
+
+ /* Spawn wakeup thread. */
+ if (wakeup_start(nthreads) != 0)
+ goto fail;
+
+ /* Wait for all lockers to exit. */
+ if (locker_wait() != 0)
+ goto fail;
+
+ /* Signal wakeup process to exit. */
+ if ((err = __os_open(
+ dbenv, MT_FILE_QUIT, DB_OSO_CREATE, 0664, &fhp)) != 0) {
+ fprintf(stderr, "tm: open %s\n", db_strerror(err));
+ goto fail;
+ }
+ (void)__os_closehandle(dbenv, fhp);
- (void)remove(MT_FILE_QUIT);
+ /* Wait for wakeup thread. */
+ if (wakeup_wait() != 0)
+ goto fail;
+ }
- tm_mutex_stats(); /* Display run statistics. */
- tm_mutex_destroy(); /* Destroy region. */
+ tm_mutex_stats(); /* Display run statistics. */
+ tm_mutex_destroy(); /* Destroy mutexes. */
- printf("tm: exit status: %s\n",
- eval == EXIT_SUCCESS ? "success" : "failed!");
- return (eval);
-}
+ unmap_file(gm_addr, map_fhp); /* Detach from backing file. */
-void
-exec_proc(id, tmpath, typearg)
- u_long id;
- char *tmpath, *typearg;
-{
- 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;
- sprintf(b_t, "-t%d", nthreads);
- *ap++ = b_t;
- sprintf(b_T, "-T%s=%lu", typearg, id);
- *ap++ = b_T;
- if (verbose)
- *ap++ = "-v";
+ tm_env_close(); /* Detach from environment. */
- *ap = NULL;
- execvp(tmpath, argv);
+ printf("tm: test succeeded\n");
+ return (EXIT_SUCCESS);
- fprintf(stderr, "%s: %s\n", tmpath, strerror(errno));
- exit(EXIT_FAILURE);
+fail: printf("tm: FAILED!\n");
+ return (EXIT_FAILURE);
}
-void
-run_locker(id)
+int
+locker_start(id)
u_long id;
{
#if defined(MUTEX_THREAD_TEST)
- pthread_t *kidsp;
- int i;
- void *retp;
-#endif
- int status;
+ int err, i;
- __os_sleep(&dbenv, 3, 0); /* Let everyone catch up. */
-
- srand((u_int)time(NULL) % getpid()); /* Initialize random numbers. */
-
-#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) {
+ (os_thread_t *)calloc(sizeof(os_thread_t), nthreads)) == NULL) {
fprintf(stderr, "tm: %s\n", strerror(errno));
- exit(EXIT_FAILURE);
+ return (1);
}
for (i = 0; i < nthreads; i++)
- if ((errno = pthread_create(
+ if ((err = os_thread_create(
&kidsp[i], NULL, run_lthread, (void *)(id + i))) != 0) {
fprintf(stderr, "tm: failed spawning thread: %s\n",
- strerror(errno));
- exit(EXIT_FAILURE);
+ db_strerror(err));
+ return (1);
}
+ return (0);
+#else
+ return (run_lthread((void *)id) == NULL ? 0 : 1);
+#endif
+}
+
+int
+locker_wait()
+{
+#if defined(MUTEX_THREAD_TEST)
+ int i;
+ void *retp;
/* Wait for the threads to exit. */
- status = EXIT_SUCCESS;
for (i = 0; i < nthreads; i++) {
- pthread_join(kidsp[i], &retp);
+ os_thread_join(kidsp[i], &retp);
if (retp != NULL) {
fprintf(stderr, "tm: thread exited with error\n");
- status = EXIT_FAILURE;
+ return (1);
}
}
free(kidsp);
-#else
- status = (int)run_lthread((void *)id);
#endif
- exit(status);
+ return (0);
}
void *
@@ -297,49 +372,38 @@ run_lthread(arg)
{
TM *gp, *mp, *tp;
u_long id, tid;
- int fd, i, lock, nl, remap;
- u_int8_t *gm_addr, *lm_addr, *tm_addr;
+ int err, i, lock, nl;
- id = (int)arg;
+ id = (uintptr_t)arg;
#if defined(MUTEX_THREAD_TEST)
- tid = (u_long)pthread_self();
+ tid = (u_long)os_thread_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(
- "%03lu: map threads @ %#lx; locks @ %#lx\n",
- id, (u_long)tm_addr, (u_long)lm_addr);
- remap = (rand() % 100) + 35;
- }
+ gp = (TM *)gm_addr;
+ tp = (TM *)(tm_addr + id * sizeof(TM));
+ for (nl = nlocks; nl > 0;) {
/* Select and acquire a data lock. */
lock = rand() % maxlocks;
- mp = (TM *)(lm_addr + lock * align);
+ mp = (TM *)(lm_addr + lock * sizeof(TM));
if (verbose)
- printf("%03lu: lock %d @ %#lx\n",
- id, lock, (u_long)&mp->mutex);
+ printf("%03lu: lock %d (mtx: %lu)\n",
+ id, lock, (u_long)mp->mutex);
- if (__db_mutex_lock(&dbenv, &mp->mutex)) {
+ if ((err = dbenv->mutex_lock(dbenv, mp->mutex)) != 0) {
fprintf(stderr, "%03lu: never got lock %d: %s\n",
- id, lock, strerror(errno));
- return ((void *)EXIT_FAILURE);
+ id, lock, db_strerror(err));
+ return ((void *)1);
}
if (mp->id != 0) {
fprintf(stderr,
"RACE! (%03lu granted lock %d held by %03lu)\n",
id, lock, mp->id);
- return ((void *)EXIT_FAILURE);
+ return ((void *)1);
}
mp->id = id;
@@ -348,12 +412,12 @@ run_lthread(arg)
* we still hold the mutex.
*/
for (i = 0; i < 3; ++i) {
- __os_sleep(&dbenv, 0, rand() % 3);
+ __os_sleep(dbenv, 0, rand() % 3);
if (mp->id != id) {
fprintf(stderr,
"RACE! (%03lu stole lock %d from %03lu)\n",
mp->id, lock, id);
- return ((void *)EXIT_FAILURE);
+ return ((void *)1);
}
}
@@ -367,112 +431,106 @@ run_lthread(arg)
*
* The wakeup thread will wake us up.
*/
- if (__db_mutex_lock(&dbenv, &gp->mutex)) {
+ if ((err = dbenv->mutex_lock(dbenv, gp->mutex)) != 0) {
fprintf(stderr,
- "%03lu: global lock: %s\n", id, strerror(errno));
- return ((void *)EXIT_FAILURE);
+ "%03lu: global lock: %s\n", id, db_strerror(err));
+ return ((void *)1);
}
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);
+ return ((void *)1);
}
tp->id = id;
if (verbose)
- printf("%03lu: self-blocking\n", id);
- if (F_ISSET(tp, MUTEX_WAKEME)) {
+ printf("%03lu: self-blocking (mtx: %lu)\n",
+ id, (u_long)tp->mutex);
+ if (tp->wakeme) {
fprintf(stderr,
"%03lu: wakeup flag incorrectly set\n", id);
- return ((void *)EXIT_FAILURE);
+ return ((void *)1);
}
- F_SET(tp, MUTEX_WAKEME);
- if (__db_mutex_unlock(&dbenv, &gp->mutex)) {
+ tp->wakeme = 1;
+ if ((err = dbenv->mutex_unlock(dbenv, gp->mutex)) != 0) {
fprintf(stderr,
- "%03lu: global unlock: %s\n", id, strerror(errno));
- return ((void *)EXIT_FAILURE);
+ "%03lu: global unlock: %s\n", id, db_strerror(err));
+ return ((void *)1);
}
- if (__db_mutex_lock(&dbenv, &tp->mutex)) {
+ if ((err = dbenv->mutex_lock(dbenv, tp->mutex)) != 0) {
fprintf(stderr, "%03lu: per-thread lock: %s\n",
- id, strerror(errno));
- return ((void *)EXIT_FAILURE);
+ id, db_strerror(err));
+ return ((void *)1);
}
/* Time passes... */
- if (F_ISSET(tp, MUTEX_WAKEME)) {
+ if (tp->wakeme) {
fprintf(stderr, "%03lu: wakeup flag not cleared\n", id);
- return ((void *)EXIT_FAILURE);
+ return ((void *)1);
}
if (verbose)
- printf("%03lu: release %d @ %#lx\n",
- id, lock, (u_long)&mp->mutex);
+ printf("%03lu: release %d (mtx: %lu)\n",
+ id, lock, (u_long)mp->mutex);
/* Release the data lock. */
mp->id = 0;
- if (__db_mutex_unlock(&dbenv, &mp->mutex)) {
+ if ((err = dbenv->mutex_unlock(dbenv, mp->mutex)) != 0) {
fprintf(stderr,
- "%03lu: lock release: %s\n", id, strerror(errno));
- return ((void *)EXIT_FAILURE);
+ "%03lu: lock release: %s\n", id, db_strerror(err));
+ return ((void *)1);
}
- if (--nl % 100 == 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;
-
- __os_sleep(&dbenv, 0, rand() % 500);
+ /*
+ * Windows buffers stderr and the output looks wrong
+ * without this.
+ */
+ fflush(stderr);
}
}
return (NULL);
}
-void
-run_wakeup(id)
+int
+wakeup_start(id)
u_long id;
{
#if defined(MUTEX_THREAD_TEST)
- pthread_t wakep;
- int status;
- void *retp;
-#endif
- __os_sleep(&dbenv, 3, 0); /* Let everyone catch up. */
-
- srand((u_int)time(NULL) % getpid()); /* Initialize random numbers. */
+ int err;
-#if defined(MUTEX_THREAD_TEST)
/*
* Spawn off wakeup thread.
*/
- if ((errno = pthread_create(
+ if ((err = os_thread_create(
&wakep, NULL, run_wthread, (void *)id)) != 0) {
fprintf(stderr, "tm: failed spawning wakeup thread: %s\n",
- strerror(errno));
- exit(EXIT_FAILURE);
+ db_strerror(err));
+ return (1);
}
+ return (0);
+#else
+ return (run_wthread((void *)id) == NULL ? 0 : 1);
+#endif
+}
+
+int
+wakeup_wait()
+{
+#if defined(MUTEX_THREAD_TEST)
+ void *retp;
/*
- * run_locker will create a file when the wakeup thread is no
- * longer needed.
+ * A file is created when the wakeup thread is no longer needed.
*/
- status = 0;
- pthread_join(wakep, &retp);
+ os_thread_join(wakep, &retp);
if (retp != NULL) {
fprintf(stderr, "tm: wakeup thread exited with error\n");
- status = EXIT_FAILURE;
+ return (1);
}
-
- exit(status);
-#else
- exit((int)run_wthread((void *)id));
#endif
+ return (0);
}
/*
@@ -483,31 +541,25 @@ 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;
+ int check_id, err;
- id = (int)arg;
+ id = (uintptr_t)arg;
#if defined(MUTEX_THREAD_TEST)
- tid = (u_long)pthread_self();
+ tid = (u_long)os_thread_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)
+ if (__os_exists(dbenv, MT_FILE_QUIT, NULL) == 0)
break;
/* Check for ID wraparound. */
@@ -515,69 +567,128 @@ run_wthread(arg)
check_id = 0;
/* Check for a thread that needs a wakeup. */
- tp = (TM *)(tm_addr + check_id * align);
- if (!F_ISSET(tp, MUTEX_WAKEME))
+ tp = (TM *)(tm_addr + check_id * sizeof(TM));
+ if (!tp->wakeme)
continue;
- if (verbose)
- printf("%03lu: wakeup thread %03lu @ %#lx\n",
- id, tp->id, (u_long)&tp->mutex);
+ if (verbose) {
+ printf("%03lu: wakeup thread %03lu (mtx: %lu)\n",
+ id, tp->id, (u_long)tp->mutex);
+ fflush(stdout);
+ }
/* Acquire the global lock. */
- if (__db_mutex_lock(&dbenv, &gp->mutex)) {
+ if ((err = dbenv->mutex_lock(dbenv, gp->mutex)) != 0) {
fprintf(stderr,
- "wakeup: global lock: %s\n", strerror(errno));
- return ((void *)EXIT_FAILURE);
+ "wakeup: global lock: %s\n", db_strerror(err));
+ return ((void *)1);
}
- F_CLR(tp, MUTEX_WAKEME);
- if (__db_mutex_unlock(&dbenv, &tp->mutex)) {
+ tp->wakeme = 0;
+ if ((err = dbenv->mutex_unlock(dbenv, tp->mutex)) != 0) {
fprintf(stderr,
- "wakeup: unlock: %s\n", strerror(errno));
- return ((void *)EXIT_FAILURE);
+ "wakeup: unlock: %s\n", db_strerror(err));
+ return ((void *)1);
}
- if (__db_mutex_unlock(&dbenv, &gp->mutex)) {
+ if ((err = dbenv->mutex_unlock(dbenv, gp->mutex))) {
fprintf(stderr,
- "wakeup: global unlock: %s\n", strerror(errno));
- return ((void *)EXIT_FAILURE);
+ "wakeup: global unlock: %s\n", db_strerror(err));
+ return ((void *)1);
}
- __os_sleep(&dbenv, 0, rand() % 3);
+ __os_sleep(dbenv, 0, rand() % 3);
}
return (NULL);
}
/*
+ * tm_env_init --
+ * Create the backing database environment.
+ */
+int
+tm_env_init()
+{
+ u_int32_t flags;
+ int ret;
+ char *home;
+
+ /*
+ * Create an environment object and initialize it for error
+ * reporting.
+ */
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(stderr, "tm: %s\n", db_strerror(ret));
+ return (1);
+ }
+ dbenv->set_errfile(dbenv, stderr);
+ dbenv->set_errpfx(dbenv, "tm");
+
+ /* Allocate enough mutexes. */
+ if ((ret = dbenv->mutex_set_increment(dbenv,
+ 1 + nthreads * nprocs + maxlocks)) != 0) {
+ dbenv->err(dbenv, ret, "dbenv->mutex_set_increment");
+ return (1);
+ }
+
+ flags = DB_CREATE;
+ if (nprocs == 1) {
+ home = NULL;
+ flags |= DB_PRIVATE;
+ } else
+ home = TESTDIR;
+ if (nthreads != 1)
+ flags |= DB_THREAD;
+ if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0) {
+ dbenv->err(dbenv, ret, "environment open: %s", home);
+ return (1);
+ }
+
+ return (0);
+}
+
+/*
+ * tm_env_close --
+ * Close the backing database environment.
+ */
+void
+tm_env_close()
+{
+ (void)dbenv->close(dbenv, 0);
+}
+
+/*
* tm_file_init --
* Initialize the backing file.
*/
void
tm_file_init()
{
- int fd;
+ DB_FH *fhp;
+ int err;
+ size_t nwrite;
/* Initialize the backing file. */
if (verbose)
printf("Create the backing file.\n");
- (void)shm_unlink(MT_FILE);
+ (void)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) {
+ if ((err = __os_open(dbenv, MT_FILE,
+ DB_OSO_CREATE | DB_OSO_TRUNC, 0666, &fhp)) == -1) {
(void)fprintf(stderr,
- "%s: open: %s\n", MT_FILE, strerror(errno));
+ "%s: open: %s\n", MT_FILE, db_strerror(err));
exit(EXIT_FAILURE);
}
- if (lseek(fd,
- (off_t)len, SEEK_SET) != (off_t)len || write(fd, &fd, 1) != 1) {
+ if ((err = __os_seek(dbenv, fhp, 0, 0, len)) != 0 ||
+ (err = __os_write(dbenv, fhp, &err, 1, &nwrite)) != 0 ||
+ nwrite != 1) {
(void)fprintf(stderr,
- "%s: seek/write: %s\n", MT_FILE, strerror(errno));
+ "%s: seek/write: %s\n", MT_FILE, db_strerror(err));
exit(EXIT_FAILURE);
}
- (void)close(fd);
+ (void)__os_closehandle(dbenv, fhp);
}
/*
@@ -588,59 +699,59 @@ void
tm_mutex_init()
{
TM *mp;
- int fd, i;
- u_int8_t *gm_addr, *lm_addr, *tm_addr;
-
- 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);
+ int err, i;
if (verbose)
- printf("Initialize the global mutex:\n");
+ printf("Allocate the global mutex: ");
mp = (TM *)gm_addr;
- if (__db_mutex_init_int(&dbenv, &mp->mutex, 0, 0)) {
+ if ((err = dbenv->mutex_alloc(dbenv, 0, &mp->mutex)) != 0) {
fprintf(stderr,
- "__db_mutex_init (global): %s\n", strerror(errno));
+ "DB_ENV->mutex_alloc (global): %s\n", db_strerror(err));
exit(EXIT_FAILURE);
}
if (verbose)
- printf("\t@ %#lx\n", (u_long)&mp->mutex);
+ printf("%lu\n", (u_long)mp->mutex);
if (verbose)
printf(
- "Initialize %d per-thread mutexes:\n", nthreads * nprocs);
+ "Allocate %d per-thread, self-blocking mutexes: ",
+ 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));
+ mp = (TM *)(tm_addr + i * sizeof(TM));
+ if ((err = dbenv->mutex_alloc(
+ dbenv, DB_MUTEX_SELF_BLOCK, &mp->mutex)) != 0) {
+ fprintf(stderr,
+ "DB_ENV->mutex_alloc (per-thread %d): %s\n",
+ i, db_strerror(err));
exit(EXIT_FAILURE);
}
- if (__db_mutex_lock(&dbenv, &mp->mutex)) {
- fprintf(stderr, "__db_mutex_lock (per-thread %d): %s\n",
- i, strerror(errno));
+ if ((err = dbenv->mutex_lock(dbenv, mp->mutex)) != 0) {
+ fprintf(stderr,
+ "DB_ENV->mutex_lock (per-thread %d): %s\n",
+ i, db_strerror(err));
exit(EXIT_FAILURE);
}
if (verbose)
- printf("\t@ %#lx\n", (u_long)&mp->mutex);
+ printf("%lu ", (u_long)mp->mutex);
}
+ if (verbose)
+ printf("\n");
if (verbose)
- printf("Initialize %d per-lock mutexes:\n", maxlocks);
+ printf("Allocate %d per-lock mutexes: ", 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));
+ mp = (TM *)(lm_addr + i * sizeof(TM));
+ if ((err = dbenv->mutex_alloc(dbenv, 0, &mp->mutex)) != 0) {
+ fprintf(stderr,
+ "DB_ENV->mutex_alloc (per-lock: %d): %s\n",
+ i, db_strerror(err));
exit(EXIT_FAILURE);
}
if (verbose)
- printf("\t@ %#lx\n", (u_long)&mp->mutex);
+ printf("%lu ", (u_long)mp->mutex);
}
-
- unmap_file(gm_addr, fd);
+ if (verbose)
+ printf("\n");
}
/*
@@ -651,28 +762,25 @@ void
tm_mutex_destroy()
{
TM *gp, *mp;
- int fd, i;
- u_int8_t *gm_addr, *lm_addr, *tm_addr;
-
- map_file(&gm_addr, &tm_addr, &lm_addr, &fd);
+ int err, i;
if (verbose)
printf("Destroy the global mutex.\n");
gp = (TM *)gm_addr;
- if (__db_mutex_destroy(&gp->mutex)) {
+ if ((err = dbenv->mutex_free(dbenv, gp->mutex)) != 0) {
fprintf(stderr,
- "__db_mutex_destroy (global): %s\n", strerror(errno));
+ "DB_ENV->mutex_free (global): %s\n", db_strerror(err));
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)) {
+ mp = (TM *)(tm_addr + i * sizeof(TM));
+ if ((err = dbenv->mutex_free(dbenv, mp->mutex)) != 0) {
fprintf(stderr,
- "__db_mutex_destroy (per-thread %d): %s\n",
- i, strerror(errno));
+ "DB_ENV->mutex_free (per-thread %d): %s\n",
+ i, db_strerror(err));
exit(EXIT_FAILURE);
}
}
@@ -680,18 +788,16 @@ tm_mutex_destroy()
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)) {
+ mp = (TM *)(lm_addr + i * sizeof(TM));
+ if ((err = dbenv->mutex_free(dbenv, mp->mutex)) != 0) {
fprintf(stderr,
- "__db_mutex_destroy (per-lock: %d): %s\n",
- i, strerror(errno));
+ "DB_ENV->mutex_free (per-lock: %d): %s\n",
+ i, db_strerror(err));
exit(EXIT_FAILURE);
}
}
- unmap_file(gm_addr, fd);
-
- (void)shm_unlink(MT_FILE);
+ (void)unlink(MT_FILE);
}
/*
@@ -701,21 +807,19 @@ tm_mutex_destroy()
void
tm_mutex_stats()
{
+#ifdef HAVE_STATISTICS
TM *mp;
- int fd, i;
- u_int8_t *gm_addr, *lm_addr;
-
- map_file(&gm_addr, NULL, &lm_addr, &fd);
+ int i;
+ u_int32_t set_wait, set_nowait;
printf("Per-lock mutex statistics.\n");
for (i = 0; i < maxlocks; ++i) {
- mp = (TM *)(lm_addr + i * align);
+ mp = (TM *)(lm_addr + i * sizeof(TM));
+ __mutex_set_wait_info(dbenv, mp->mutex, &set_wait, &set_nowait);
printf("mutex %2d: wait: %lu; no wait %lu\n", i,
- (u_long)mp->mutex.mutex_set_wait,
- (u_long)mp->mutex.mutex_set_nowait);
+ (u_long)set_wait, (u_long)set_nowait);
}
-
- unmap_file(gm_addr, fd);
+#endif
}
/*
@@ -723,12 +827,13 @@ tm_mutex_stats()
* Map in the backing file.
*/
void
-map_file(gm_addrp, tm_addrp, lm_addrp, fdp)
+map_file(gm_addrp, tm_addrp, lm_addrp, fhpp)
u_int8_t **gm_addrp, **tm_addrp, **lm_addrp;
- int *fdp;
+ DB_FH **fhpp;
{
void *addr;
- int fd;
+ DB_FH *fhp;
+ int err;
#ifndef MAP_FAILED
#define MAP_FAILED (void *)-1
@@ -736,29 +841,24 @@ map_file(gm_addrp, tm_addrp, lm_addrp, fdp)
#ifndef MAP_FILE
#define MAP_FILE 0
#endif
- if ((fd = shm_open(MT_FILE, O_RDWR, 0)) == -1) {
- fprintf(stderr, "%s: open %s\n", MT_FILE, strerror(errno));
+ if ((err = __os_open(dbenv, MT_FILE, 0, 0, &fhp)) != 0) {
+ fprintf(stderr, "%s: open %s\n", MT_FILE, db_strerror(err));
exit(EXIT_FAILURE);
}
- addr = mmap(NULL, len,
- PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, (off_t)0);
- if (addr == MAP_FAILED) {
- fprintf(stderr, "%s: mmap: %s\n", MT_FILE, strerror(errno));
+ if ((err = __os_mapfile(dbenv, MT_FILE, fhp, len, 0, &addr)) != 0) {
+ fprintf(stderr, "%s: mmap: %s\n", MT_FILE, db_strerror(err));
exit(EXIT_FAILURE);
}
- 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;
+ *gm_addrp = (u_int8_t *)addr;
+ addr = (u_int8_t *)addr + sizeof(TM);
+ *tm_addrp = (u_int8_t *)addr;
+ addr = (u_int8_t *)addr + sizeof(TM) * (nthreads * nprocs);
+ *lm_addrp = (u_int8_t *)addr;
+
+ if (fhpp != NULL)
+ *fhpp = fhp;
}
/*
@@ -766,16 +866,18 @@ map_file(gm_addrp, tm_addrp, lm_addrp, fdp)
* Discard backing file map.
*/
void
-unmap_file(addr, fd)
+unmap_file(addr, fhp)
u_int8_t *addr;
- int fd;
+ DB_FH *fhp;
{
- if (munmap(addr, len) != 0) {
- fprintf(stderr, "munmap: %s\n", strerror(errno));
+ int err;
+
+ if ((err = __os_unmapfile(dbenv, addr, len)) != 0) {
+ fprintf(stderr, "munmap: %s\n", db_strerror(err));
exit(EXIT_FAILURE);
}
- if (close(fd) != 0) {
- fprintf(stderr, "close: %s\n", strerror(errno));
+ if ((err = __os_closehandle(dbenv, fhp)) != 0) {
+ fprintf(stderr, "close: %s\n", db_strerror(err));
exit(EXIT_FAILURE);
}
}
@@ -792,3 +894,117 @@ usage()
"[-n locks] [-p procs] [-T locker=ID|wakeup=ID] [-t threads]");
return (EXIT_FAILURE);
}
+
+/*
+ * os_wait --
+ * Wait for an array of N procs.
+ */
+int
+os_wait(procs, nprocs)
+ os_pid_t *procs;
+ int nprocs;
+{
+ int i, status;
+#if defined(DB_WIN32)
+ DWORD ret;
+#endif
+
+ status = 0;
+
+#if defined(DB_WIN32)
+ do {
+ ret = WaitForMultipleObjects(nprocs, procs, FALSE, INFINITE);
+ i = ret - WAIT_OBJECT_0;
+ if (i < 0 || i >= nprocs)
+ return (__os_posix_err(__os_get_syserr()));
+
+ if ((GetExitCodeProcess(procs[i], &ret) == 0) || (ret != 0))
+ return (ret);
+
+ /* remove the process handle from the list */
+ while (++i < nprocs)
+ procs[i - 1] = procs[i];
+ } while (--nprocs);
+#elif !defined(HAVE_VXWORKS)
+ do {
+ if ((i = wait(&status)) == -1)
+ return (__os_posix_err(__os_get_syserr()));
+
+ if (WIFEXITED(status) == 0 || WEXITSTATUS(status) != 0) {
+ for (i = 0; i < nprocs; i++)
+ kill(procs[i], SIGKILL);
+ return (WEXITSTATUS(status));
+ }
+ } while (--nprocs);
+#endif
+
+ return (0);
+}
+
+os_pid_t
+spawn_proc(id, tmpath, typearg)
+ u_long id;
+ char *tmpath, *typearg;
+{
+ char lbuf[16], nbuf[16], pbuf[16], tbuf[16], Tbuf[256];
+ char *const vbuf = verbose ? "-v" : NULL;
+ char *args[] = { NULL /* tmpath */,
+ "-l", NULL /* lbuf */, "-n", NULL /* nbuf */,
+ "-p", NULL /* pbuf */, "-t", NULL /* tbuf */,
+ "-T", NULL /* Tbuf */, NULL /* vbuf */,
+ NULL
+ };
+
+ args[0] = tmpath;
+ snprintf(lbuf, sizeof(lbuf), "%d", maxlocks);
+ args[2] = lbuf;
+ snprintf(nbuf, sizeof(nbuf), "%d", nlocks);
+ args[4] = nbuf;
+ snprintf(pbuf, sizeof(pbuf), "%d", nprocs);
+ args[6] = pbuf;
+ snprintf(tbuf, sizeof(tbuf), "%d", nthreads);
+ args[8] = tbuf;
+ snprintf(Tbuf, sizeof(Tbuf), "%s=%lu", typearg, id);
+ args[10] = Tbuf;
+ args[11] = vbuf;
+
+ return (os_spawn(tmpath, args));
+}
+
+os_pid_t
+os_spawn(path, argv)
+ const char *path;
+ char *const argv[];
+{
+ os_pid_t pid;
+ int status;
+
+ COMPQUIET(pid, 0);
+ COMPQUIET(status, 0);
+
+#ifdef HAVE_VXWORKS
+ fprintf(stderr, "ERROR: os_spawn not supported for VxWorks.\n");
+ return (OS_BAD_PID);
+#elif defined(HAVE_QNX)
+ /*
+ * For QNX, we cannot fork if we've ever used threads. So
+ * we'll use their spawn function. We use 'spawnl' which
+ * is NOT a POSIX function.
+ *
+ * The return value of spawnl is just what we want depending
+ * on the value of the 'wait' arg.
+ */
+ return (spawnv(P_NOWAIT, path, argv));
+#elif defined(DB_WIN32)
+ return (os_pid_t)(_spawnv(P_NOWAIT, path, argv));
+#else
+ if ((pid = fork()) != 0) {
+ if (pid == -1)
+ return (OS_BAD_PID);
+ return (pid);
+ } else {
+ execv(path, argv);
+ exit(EXIT_FAILURE);
+ }
+#endif
+}
diff --git a/db/mutex/uts4_cc.s b/db/mutex/uts4_cc.s
index 9b314c4af..a8f2498ab 100644
--- a/db/mutex/uts4_cc.s
+++ b/db/mutex/uts4_cc.s
@@ -1,9 +1,9 @@
/ See the file LICENSE for redistribution information.
/
- / Copyright (c) 1997-2004
- / Sleepycat Software. All rights reserved.
+ / Copyright (c) 1997-2006
+ / Oracle Corporation. All rights reserved.
/
- / $Id: uts4_cc.s,v 11.4 2004/01/28 03:36:18 bostic Exp $
+ / $Id: uts4_cc.s,v 12.3 2006/08/24 14:46:16 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 3d9f921ae..de95da99d 100644
--- a/db/os/os_abs.c
+++ b/db/os/os_abs.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_abs.c,v 11.7 2004/01/28 03:36:18 bostic Exp $
+ * $Id: os_abs.c,v 12.4 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
/*
diff --git a/db/os/os_alloc.c b/db/os/os_alloc.c
index 7dd9f94f5..868a59601 100644
--- a/db/os/os_alloc.c
+++ b/db/os/os_alloc.c
@@ -1,21 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_alloc.c,v 11.41 2004/07/06 21:06:36 mjc Exp $
+ * $Id: os_alloc.c,v 12.8 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#ifdef DIAGNOSTIC
@@ -46,9 +39,11 @@ union __db_allocinfo {
/*
* __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.
+ * Allocate memory to be used by the application.
+ *
+ * Use, in order of preference, the allocation function specified to the
+ * DB_ENV handle, the allocation function specified as a replacement for
+ * the library malloc, or the library malloc().
*
* PUBLIC: int __os_umalloc __P((DB_ENV *, size_t, void *));
*/
@@ -77,15 +72,15 @@ __os_umalloc(dbenv, size, storep)
ret = ENOMEM;
__os_set_errno(ENOMEM);
}
- __db_err(dbenv,
- "malloc: %s: %lu", strerror(ret), (u_long)size);
+ __db_err(dbenv, ret, "malloc: %lu", (u_long)size);
return (ret);
}
return (0);
}
if ((*(void **)storep = dbenv->db_malloc(size)) == NULL) {
- __db_err(dbenv, "User-specified malloc function returned NULL");
+ __db_errx(dbenv,
+ "user-specified malloc function returned NULL");
return (ENOMEM);
}
@@ -94,7 +89,9 @@ __os_umalloc(dbenv, size, storep)
/*
* __os_urealloc --
- * realloc(3) counterpart to __os_umalloc.
+ * Allocate memory to be used by the application.
+ *
+ * A realloc(3) counterpart to __os_umalloc's malloc(3).
*
* PUBLIC: int __os_urealloc __P((DB_ENV *, size_t, void *));
*/
@@ -129,15 +126,14 @@ __os_urealloc(dbenv, size, storep)
ret = ENOMEM;
__os_set_errno(ENOMEM);
}
- __db_err(dbenv,
- "realloc: %s: %lu", strerror(ret), (u_long)size);
+ __db_err(dbenv, ret, "realloc: %lu", (u_long)size);
return (ret);
}
return (0);
}
if ((*(void **)storep = dbenv->db_realloc(ptr, size)) == NULL) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"User-specified realloc function returned NULL");
return (ENOMEM);
}
@@ -147,7 +143,9 @@ __os_urealloc(dbenv, size, storep)
/*
* __os_ufree --
- * free(3) counterpart to __os_umalloc.
+ * Free memory used by the application.
+ *
+ * A free(3) counterpart to __os_umalloc's malloc(3).
*
* PUBLIC: void __os_ufree __P((DB_ENV *, void *));
*/
@@ -258,8 +256,7 @@ __os_malloc(dbenv, size, storep)
ret = ENOMEM;
__os_set_errno(ENOMEM);
}
- __db_err(dbenv,
- "malloc: %s: %lu", strerror(ret), (u_long)size);
+ __db_err(dbenv, ret, "malloc: %lu", (u_long)size);
return (ret);
}
@@ -313,6 +310,14 @@ __os_realloc(dbenv, size, storep)
/* Back up to the real beginning */
ptr = &((union __db_allocinfo *)ptr)[-1];
+
+ {
+ size_t s;
+
+ s = ((union __db_allocinfo *)ptr)->size;
+ if (((u_int8_t *)ptr)[s - 1] != CLEAR_BYTE)
+ __os_guard(dbenv);
+ }
#endif
/*
@@ -334,8 +339,7 @@ __os_realloc(dbenv, size, storep)
ret = ENOMEM;
__os_set_errno(ENOMEM);
}
- __db_err(dbenv,
- "realloc: %s: %lu", strerror(ret), (u_long)size);
+ __db_err(dbenv, ret, "realloc: %lu", (u_long)size);
return (ret);
}
#ifdef DIAGNOSTIC
@@ -396,7 +400,7 @@ static void
__os_guard(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "Guard byte incorrect during free");
+ __db_errx(dbenv, "Guard byte incorrect during free");
abort();
/* NOTREACHED */
}
diff --git a/db/os/os_clock.c b/db/os/os_clock.c
index 2a8c44d1c..e7feead7c 100644
--- a/db/os/os_clock.c
+++ b/db/os/os_clock.c
@@ -1,31 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_clock.c,v 1.15 2004/07/06 17:33:14 bostic Exp $
+ * $Id: os_clock.c,v 12.11 2006/08/24 14:46:17 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 /* HAVE_SYS_TIME_H */
-#endif /* TIME_WITH SYS_TIME */
-
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -86,6 +69,6 @@ __os_clock(dbenv, secsp, usecsp)
#endif
return;
-err: __db_err(dbenv, "%s: %s", sc, strerror(ret));
- (void)__db_panic(dbenv, ret);
+err: __db_syserr(dbenv, ret, "%s", sc);
+ (void)__db_panic(dbenv, __os_posix_err(ret));
}
diff --git a/db/os/os_config.c b/db/os/os_config.c
index dcde0dca9..80ddc3d46 100644
--- a/db/os/os_config.c
+++ b/db/os/os_config.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_config.c,v 11.15 2004/01/28 03:36:18 bostic Exp $
+ * $Id: os_config.c,v 12.6 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
/*
@@ -27,3 +23,49 @@ __os_fs_notzero()
/* Most filesystems zero out implicitly created pages. */
return (0);
}
+
+/*
+ * __os_support_direct_io --
+ * Return 1 if we support direct I/O.
+ *
+ * PUBLIC: int __os_support_direct_io __P((void));
+ */
+int
+__os_support_direct_io()
+{
+ int ret;
+
+ ret = 0;
+
+#ifdef HAVE_O_DIRECT
+ ret = 1;
+#endif
+#if defined(HAVE_DIRECTIO) && defined(DIRECTIO_ON)
+ ret = 1;
+#endif
+ return (ret);
+}
+
+/*
+ * __os_support_db_register --
+ * Return 1 if the system supports DB_REGISTER.
+ *
+ * PUBLIC: int __os_support_db_register __P((void));
+ */
+int
+__os_support_db_register()
+{
+ return (1);
+}
+
+/*
+ * __os_support_replication --
+ * Return 1 if the system supports replication.
+ *
+ * PUBLIC: int __os_support_replication __P((void));
+ */
+int
+__os_support_replication()
+{
+ return (1);
+}
diff --git a/db/os/os_dir.c b/db/os/os_dir.c
index 3e381ae7f..2e37b61d1 100644
--- a/db/os/os_dir.c
+++ b/db/os/os_dir.c
@@ -1,16 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_dir.c,v 11.17 2004/04/26 18:48:19 bostic Exp $
+ * $Id: os_dir.c,v 12.8 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
+#include "db_int.h"
#if HAVE_DIRENT_H
# include <dirent.h>
@@ -29,10 +28,6 @@
# endif
#endif
-#endif
-
-#include "db_int.h"
-
/*
* __os_dirlist --
* Return a list of the files in a directory.
@@ -48,8 +43,9 @@ __os_dirlist(dbenv, dir, namesp, cntp)
{
struct dirent *dp;
DIR *dirp;
+ struct stat sb;
int arraysz, cnt, ret;
- char **names;
+ char **names, buf[DB_MAXPATHLEN];
if (DB_GLOBAL(j_dirlist) != NULL)
return (DB_GLOBAL(j_dirlist)(dir, namesp, cntp));
@@ -61,15 +57,32 @@ __os_dirlist(dbenv, dir, namesp, cntp)
#endif
return (__os_get_errno());
names = NULL;
- for (arraysz = cnt = 0; (dp = readdir(dirp)) != NULL; ++cnt) {
+ for (arraysz = cnt = 0; (dp = readdir(dirp)) != NULL;) {
+ snprintf(buf, sizeof(buf), "%s/%s", dir, dp->d_name);
+
+ /*
+ * We're only interested in regular files, skip the rest.
+ * Other parts of Berkeley DB depend on this, for example,
+ * the db_hotbackup utility doesn't want to try and copy
+ * directories.
+ */
+ RETRY_CHK(stat(buf, &sb), ret);
+ if (ret != 0) {
+ ret = __os_posix_err(ret);
+ goto err;
+ }
+ if (!S_ISREG(sb.st_mode))
+ continue;
+
if (cnt >= arraysz) {
arraysz += 100;
if ((ret = __os_realloc(dbenv,
(u_int)arraysz * sizeof(names[0]), &names)) != 0)
- goto nomem;
+ goto err;
}
if ((ret = __os_strdup(dbenv, dp->d_name, &names[cnt])) != 0)
- goto nomem;
+ goto err;
+ cnt++;
}
(void)closedir(dirp);
@@ -77,7 +90,7 @@ __os_dirlist(dbenv, dir, namesp, cntp)
*cntp = cnt;
return (0);
-nomem: if (names != NULL)
+err: if (names != NULL)
__os_dirfree(dbenv, names, cnt);
if (dirp != NULL)
(void)closedir(dirp);
diff --git a/db/os/os_errno.c b/db/os/os_errno.c
index 52bce4ce6..8d08db404 100644
--- a/db/os/os_errno.c
+++ b/db/os/os_errno.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_errno.c,v 11.11 2004/01/28 03:36:18 bostic Exp $
+ * $Id: os_errno.c,v 12.6 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
@@ -13,7 +13,7 @@
/*
* __os_get_errno_ret_zero --
- * Return the value of errno, even if it's zero.
+ * Return the last system error, including an error of zero.
*
* PUBLIC: int __os_get_errno_ret_zero __P((void));
*/
@@ -25,26 +25,53 @@ __os_get_errno_ret_zero()
}
/*
+ * We've seen cases where system calls failed but errno was never set. For
+ * that reason, __os_get_errno() and __os_get_syserr set errno to EAGAIN if
+ * it's not already set, to work around the problem. For obvious reasons,
+ * we can only call this function if we know an error has occurred, that
+ * is, we can't test the return for a non-zero value after the get call.
+ *
* __os_get_errno --
- * Return the value of errno, or EAGAIN if errno is zero.
+ * Return the last ANSI C "errno" value or EAGAIN if the last error
+ * is zero.
*
* PUBLIC: int __os_get_errno __P((void));
*/
int
__os_get_errno()
{
- /*
- * 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.
- */
+ /* This routine must be able to return the same value repeatedly. */
+ return (__os_get_syserr());
+}
+
+#if 0
+/*
+ * __os_get_neterr --
+ * Return the last network-related error or EAGAIN if the last
+ * error is zero.
+ *
+ * PUBLIC: int __os_get_neterr __P((void));
+ */
+int
+__os_get_neterr()
+{
+ /* This routine must be able to return the same value repeatedly. */
+ return (__os_get_syserr());
+}
+#endif
+
+/*
+ * __os_get_syserr --
+ * Return the last system error or EAGAIN if the last error is zero.
+ *
+ * PUBLIC: int __os_get_syserr __P((void));
+ */
+int
+__os_get_syserr()
+{
+ /* This routine must be able to return the same value repeatedly. */
if (errno == 0)
__os_set_errno(EAGAIN);
-
return (errno);
}
@@ -69,3 +96,35 @@ __os_set_errno(evalue)
errno =
evalue >= 0 ? evalue : (evalue == DB_RUNRECOVERY ? EFAULT : EINVAL);
}
+
+/*
+ * __os_strerror --
+ * Return a string associated with the system error.
+ *
+ * PUBLIC: char *__os_strerror __P((int, char *, size_t));
+ */
+char *
+__os_strerror(error, buf, len)
+ int error;
+ char *buf;
+ size_t len;
+{
+ /* No translation is needed in the POSIX layer. */
+ (void)strncpy(buf, strerror(error), len - 1);
+ buf[len - 1] = '\0';
+
+ return (buf);
+}
+
+/*
+ * __os_posix_err
+ * Convert a system error to a POSIX error.
+ *
+ * PUBLIC: int __os_posix_err __P((int));
+ */
+int
+__os_posix_err(error)
+ int error;
+{
+ return (error);
+}
diff --git a/db/os/os_fid.c b/db/os/os_fid.c
index 29f19cd81..03e19832b 100644
--- a/db/os/os_fid.c
+++ b/db/os/os_fid.c
@@ -1,43 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_fid.c,v 11.21 2004/07/06 13:55:48 bostic Exp $
+ * $Id: os_fid.c,v 12.11 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <sys/stat.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 <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
* __os_fileid --
- * 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.
+ * Return a unique identifier for a file.
*
* PUBLIC: int __os_fileid __P((DB_ENV *, const char *, int, u_int8_t *));
*/
@@ -48,24 +24,35 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
int unique_okay;
u_int8_t *fidp;
{
- struct stat sb;
+ pid_t pid;
size_t i;
- int ret;
u_int32_t tmp;
u_int8_t *p;
- /* Clear the buffer. */
- memset(fidp, 0, DB_FILE_ID_LEN);
+#ifdef HAVE_STAT
+ struct stat sb;
+ int ret;
- /* On POSIX/UNIX, use a dev/inode pair. */
+ /*
+ * The structure of a fileid on a POSIX/UNIX system 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.
+ *
+ * Clear the buffer.
+ */
+ memset(fidp, 0, DB_FILE_ID_LEN);
#ifdef HAVE_VXWORKS
RETRY_CHK((stat((char *)fname, &sb)), ret);
#else
RETRY_CHK((stat(fname, &sb)), ret);
#endif
if (ret != 0) {
- __db_err(dbenv, "%s: %s", fname, strerror(ret));
- return (ret);
+ __db_syserr(dbenv, ret, "stat: %s", fname);
+ return (__os_posix_err(ret));
}
/*
@@ -101,6 +88,10 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
tmp = (u_int32_t)sb.st_dev;
for (p = (u_int8_t *)&tmp, i = sizeof(u_int32_t); i > 0; --i)
*fidp++ = *p++;
+#else
+ /* Use the file name. */
+ (void)strncpy(fidp, fname, DB_FILE_ID_LEN);
+#endif /* HAVE_STAT */
if (unique_okay) {
static u_int32_t fid_serial = 0;
@@ -117,6 +108,10 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
* if we race on this no real harm will be done, since the
* finished fileid has so many other components.
*
+ * We use the bottom 32-bits of the process ID, hoping they
+ * are more random than the top 32-bits (should we be on a
+ * machine with 64-bit process IDs).
+ *
* We increment by 100000 on each call as a simple way of
* randomizing; simply incrementing seems potentially less
* useful if pids are also simply incremented, since this
@@ -125,9 +120,10 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
* 32-bit platforms, and has few interesting properties in
* base 2.
*/
- if (fid_serial == 0)
- __os_id(&fid_serial);
- else
+ if (fid_serial == 0) {
+ dbenv->thread_id(dbenv, &pid, NULL);
+ fid_serial = (u_int32_t)pid;
+ } else
fid_serial += 100000;
for (p =
diff --git a/db/os/os_flock.c b/db/os/os_flock.c
new file mode 100644
index 000000000..25f3ecfe1
--- /dev/null
+++ b/db/os/os_flock.c
@@ -0,0 +1,55 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_flock.c,v 12.11 2006/08/24 14:46:17 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_fdlock --
+ * Acquire/release a lock on a byte in a file.
+ *
+ * PUBLIC: int __os_fdlock __P((DB_ENV *, DB_FH *, off_t, int, int));
+ */
+int
+__os_fdlock(dbenv, fhp, offset, acquire, nowait)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ int acquire, nowait;
+ off_t offset;
+{
+#ifdef HAVE_FCNTL
+ struct flock fl;
+ int ret, t_ret;
+
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+
+ fl.l_start = offset;
+ fl.l_len = 1;
+ fl.l_type = acquire ? F_WRLCK : F_UNLCK;
+ fl.l_whence = SEEK_SET;
+
+ RETRY_CHK_EINTR_ONLY(
+ (fcntl(fhp->fd, nowait ? F_SETLK : F_SETLKW, &fl)), ret);
+
+ if (ret == 0)
+ return (0);
+
+ if ((t_ret = __os_posix_err(ret)) != EACCES && t_ret != EAGAIN)
+ __db_syserr(dbenv, ret, "fcntl");
+ return (t_ret);
+#else
+ COMPQUIET(fhp, NULL);
+ COMPQUIET(acquire, 0);
+ COMPQUIET(nowait, 0);
+ COMPQUIET(offset, 0);
+ __db_syserr(dbenv, DB_OPNOTSUP, "advisory file locking unavailable");
+ return (DB_OPNOTSUP);
+#endif
+}
diff --git a/db/os/os_fsync.c b/db/os/os_fsync.c
index 576acf00b..c1eedcf73 100644
--- a/db/os/os_fsync.c
+++ b/db/os/os_fsync.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_fsync.c,v 11.22 2004/07/06 20:54:09 mjc Exp $
+ * $Id: os_fsync.c,v 12.9 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h> /* XXX: Required by __hp3000s900 */
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
#ifdef HAVE_VXWORKS
@@ -69,6 +61,9 @@ __os_fsync(dbenv, fhp)
{
int ret;
+ /* Check for illegal usage. */
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+
/*
* Do nothing if the file descriptor has been marked as not requiring
* any sync to disk.
@@ -76,19 +71,20 @@ __os_fsync(dbenv, fhp)
if (F_ISSET(fhp, DB_FH_NOSYNC))
return (0);
- /* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
-
if (DB_GLOBAL(j_fsync) != NULL)
ret = DB_GLOBAL(j_fsync)(fhp->fd);
else
-#ifdef HAVE_FDATASYNC
+#if defined(F_FULLFSYNC)
+ RETRY_CHK((fcntl(fhp->fd, F_FULLFSYNC, 0)), ret);
+#elif defined(HAVE_FDATASYNC)
RETRY_CHK((fdatasync(fhp->fd)), ret);
#else
RETRY_CHK((fsync(fhp->fd)), ret);
#endif
- if (ret != 0)
- __db_err(dbenv, "fsync %s", strerror(ret));
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "fsync");
+ ret = __os_posix_err(ret);
+ }
return (ret);
}
diff --git a/db/os/os_fzero.c b/db/os/os_fzero.c
new file mode 100644
index 000000000..97a40e900
--- /dev/null
+++ b/db/os/os_fzero.c
@@ -0,0 +1,104 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_fzero.c,v 12.17 2006/09/19 14:14:12 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_zerofill --
+ * Zero out bytes in the file.
+ *
+ * Pages allocated by writing pages past end-of-file are not zeroed,
+ * on some systems. Recovery could theoretically be fooled by a page
+ * showing up that contained garbage. In order to avoid this, we
+ * have to write the pages out to disk, and flush them. The reason
+ * for the flush is because if we don't sync, the allocation of another
+ * page subsequent to this one might reach the disk first, and if we
+ * crashed at the right moment, leave us with this page as the one
+ * allocated by writing a page past it in the file.
+ *
+ * PUBLIC: int __os_zerofill __P((DB_ENV *, DB_FH *));
+ */
+int
+__os_zerofill(dbenv, fhp)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+{
+#ifdef HAVE_FILESYSTEM_NOTZERO
+ off_t stat_offset, write_offset;
+ size_t blen, nw;
+ u_int32_t bytes, mbytes;
+ int group_sync, need_free, ret;
+ u_int8_t buf[8 * 1024], *bp;
+
+ /* Calculate the byte offset of the next write. */
+ write_offset = (off_t)fhp->pgno * fhp->pgsize + fhp->offset;
+
+ /* Stat the file. */
+ if ((ret = __os_ioinfo(dbenv, NULL, fhp, &mbytes, &bytes, NULL)) != 0)
+ return (ret);
+ stat_offset = (off_t)mbytes * MEGABYTE + bytes;
+
+ /* Check if the file is large enough. */
+ if (stat_offset >= write_offset)
+ return (0);
+
+ /* Get a large buffer if we're writing lots of data. */
+#undef ZF_LARGE_WRITE
+#define ZF_LARGE_WRITE (64 * 1024)
+ if (write_offset - stat_offset > ZF_LARGE_WRITE) {
+ if ((ret = __os_calloc(dbenv, 1, ZF_LARGE_WRITE, &bp)) != 0)
+ return (ret);
+ blen = ZF_LARGE_WRITE;
+ need_free = 1;
+ } else {
+ bp = buf;
+ blen = sizeof(buf);
+ need_free = 0;
+ memset(buf, 0, sizeof(buf));
+ }
+
+ /* Seek to the current end of the file. */
+ if ((ret = __os_seek(dbenv, fhp, mbytes, MEGABYTE, bytes)) != 0)
+ goto err;
+
+ /*
+ * Hash is the only access method that allocates groups of pages. Hash
+ * uses the existence of the last page in a group to signify the entire
+ * group is OK; so, write all the pages but the last one in the group,
+ * flush them to disk, then write the last one to disk and flush it.
+ */
+ for (group_sync = 0; stat_offset < write_offset; group_sync = 1) {
+ if (write_offset - stat_offset <= (off_t)blen) {
+ blen = (size_t)(write_offset - stat_offset);
+ if (group_sync && (ret = __os_fsync(dbenv, fhp)) != 0)
+ goto err;
+ }
+ if ((ret = __os_physwrite(dbenv, fhp, bp, blen, &nw)) != 0)
+ goto err;
+ stat_offset += blen;
+ }
+ if ((ret = __os_fsync(dbenv, fhp)) != 0)
+ goto err;
+
+ /* Seek back to where we started. */
+ mbytes = (u_int32_t)(write_offset / MEGABYTE);
+ bytes = (u_int32_t)(write_offset % MEGABYTE);
+ ret = __os_seek(dbenv, fhp, mbytes, MEGABYTE, bytes);
+
+err: if (need_free)
+ __os_free(dbenv, bp);
+ return (ret);
+#else
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(fhp, NULL);
+ return (0);
+#endif /* HAVE_FILESYSTEM_NOTZERO */
+}
diff --git a/db/os/os_getenv.c b/db/os/os_getenv.c
new file mode 100644
index 000000000..ae4479e49
--- /dev/null
+++ b/db/os/os_getenv.c
@@ -0,0 +1,59 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_getenv.c,v 12.5 2006/08/31 20:30:55 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_getenv --
+ * Retrieve an environment variable.
+ *
+ * PUBLIC: int __os_getenv __P((DB_ENV *, const char *, char **, size_t));
+ */
+int
+__os_getenv(dbenv, name, bpp, buflen)
+ DB_ENV *dbenv;
+ const char *name;
+ char **bpp;
+ size_t buflen;
+{
+ /*
+ * If we have getenv, there's a value and the buffer is large enough:
+ * copy value into the pointer, return 0
+ * If we have getenv, there's a value and the buffer is too short:
+ * set pointer to NULL, return EINVAL
+ * If we have getenv and there's no value:
+ * set pointer to NULL, return 0
+ * If we don't have getenv:
+ * set pointer to NULL, return 0
+ */
+#ifdef HAVE_GETENV
+ char *p;
+
+ if ((p = getenv(name)) != NULL) {
+ if (strlen(p) < buflen) {
+ (void)strcpy(*bpp, p);
+ return (0);
+ }
+
+ *bpp = NULL;
+ __db_errx(dbenv,
+ "%s: buffer too small to hold environment variable %s",
+ name, p);
+ return (EINVAL);
+ }
+#else
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(name, NULL);
+ COMPQUIET(buflen, 0);
+#endif
+ *bpp = NULL;
+ return (0);
+}
diff --git a/db/os/os_handle.c b/db/os/os_handle.c
index 62a7bc1a1..5fc06151e 100644
--- a/db/os/os_handle.c
+++ b/db/os/os_handle.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_handle.c,v 11.40 2004/08/19 17:59:22 sue Exp $
+ * $Id: os_handle.c,v 12.7 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
/*
@@ -47,7 +39,7 @@ __os_openhandle(dbenv, name, flags, mode, 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) {
- ret = __os_get_errno();
+ ret = __os_posix_err(__os_get_syserr());
goto err;
}
F_SET(fhp, DB_FH_OPENED);
@@ -124,16 +116,16 @@ __os_openhandle(dbenv, name, flags, mode, fhpp)
#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));
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "fcntl(F_SETFD)");
+ ret = __os_posix_err(ret);
goto err;
}
#endif
break;
}
- switch (ret = __os_get_errno()) {
+ switch (ret = __os_posix_err(__os_get_syserr())) {
case EMFILE:
case ENFILE:
case ENOSPC:
@@ -156,6 +148,7 @@ __os_openhandle(dbenv, name, flags, mode, fhpp)
--nrepeat;
break;
default:
+ /* Open is silent on error. */
break;
}
}
@@ -193,8 +186,10 @@ __os_closehandle(dbenv, fhp)
else
RETRY_CHK((close(fhp->fd)), ret);
- if (ret != 0)
- __db_err(dbenv, "close: %s", strerror(ret));
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "close");
+ ret = __os_posix_err(ret);
+ }
/* Unlink the file if we haven't already done so. */
if (F_ISSET(fhp, DB_FH_UNLINK)) {
diff --git a/db/os/os_map.c b/db/os/os_map.c
index adcdaef3c..886918ccb 100644
--- a/db/os/os_map.c
+++ b/db/os/os_map.c
@@ -1,16 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_map.c,v 11.57 2004/07/06 13:55:48 bostic Exp $
+ * $Id: os_map.c,v 12.12 2006/08/24 14:46:17 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
#ifdef HAVE_MMAP
#include <sys/mman.h>
#endif
@@ -19,17 +20,15 @@
#include <sys/ipc.h>
#include <sys/shm.h>
#endif
-
-#include <string.h>
#endif
-#include "db_int.h"
-
#ifdef HAVE_MMAP
static int __os_map __P((DB_ENV *, char *, DB_FH *, size_t, int, int, void **));
#endif
-#ifndef HAVE_SHMGET
-static int __db_nosystemmem __P((DB_ENV *));
+#ifdef HAVE_SHMGET
+static int __shm_mode __P((DB_ENV *));
+#else
+static int __no_system_mem __P((DB_ENV *));
#endif
/*
@@ -55,8 +54,8 @@ __os_r_sysattach(dbenv, infop, rp)
* threaded. If we reach this point, we know we're public, so
* it's an error.
*/
-#if defined(MUTEX_NO_SHMGET_LOCKS)
- __db_err(dbenv,
+#if defined(HAVE_MUTEX_HPPA_MSEM_INIT)
+ __db_errx(dbenv,
"architecture does not support locks inside system shared memory");
return (EINVAL);
#endif
@@ -82,7 +81,7 @@ __os_r_sysattach(dbenv, infop, rp)
* the ipcs output.
*/
if (dbenv->shm_key == INVALID_REGION_SEGID) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"no base system shared memory ID specified");
return (EINVAL);
}
@@ -98,7 +97,7 @@ __os_r_sysattach(dbenv, infop, rp)
if ((id = shmget(segid, 0, 0)) != -1) {
(void)shmctl(id, IPC_RMID, NULL);
if ((id = shmget(segid, 0, 0)) != -1) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"shmget: key: %ld: shared system memory region already exists",
(long)segid);
return (EAGAIN);
@@ -109,13 +108,13 @@ __os_r_sysattach(dbenv, infop, rp)
* Map the DbEnv::open method file mode permissions to
* shmget call permissions.
*/
- mode = IPC_CREAT | __db_shm_mode(dbenv);
+ mode = IPC_CREAT | __shm_mode(dbenv);
if ((id = shmget(segid, rp->size, mode)) == -1) {
- ret = __os_get_errno();
- __db_err(dbenv,
- "shmget: key: %ld: unable to create shared system memory region: %s",
- (long)segid, strerror(ret));
- return (ret);
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret,
+ "shmget: key: %ld: unable to create shared system memory region",
+ (long)segid);
+ return (__os_posix_err(ret));
}
rp->segid = id;
} else
@@ -123,17 +122,16 @@ __os_r_sysattach(dbenv, infop, rp)
if ((infop->addr = shmat(id, NULL, 0)) == (void *)-1) {
infop->addr = NULL;
- ret = __os_get_errno();
- __db_err(dbenv,
- "shmat: id %d: unable to attach to shared system memory region: %s",
- id, strerror(ret));
- return (ret);
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret,
+ "shmat: id %d: unable to attach to shared system memory region", id);
+ return (__os_posix_err(ret));
}
return (0);
}
#else
- return (__db_nosystemmem(dbenv));
+ return (__no_system_mem(dbenv));
#endif
}
@@ -154,7 +152,7 @@ __os_r_sysattach(dbenv, infop, rp)
DB_OSO_REGION |
(F_ISSET(infop, REGION_CREATE_OK) ? DB_OSO_CREATE : 0),
dbenv->db_mode, &fhp)) != 0)
- __db_err(dbenv, "%s: %s", infop->name, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", infop->name);
/*
* If we created the file, grow it to its full size before mapping
@@ -163,9 +161,13 @@ __os_r_sysattach(dbenv, infop, rp)
* systems without merged VM/buffer cache systems, or, more to the
* point, *badly* merged VM/buffer cache systems.
*/
- if (ret == 0 && F_ISSET(infop, REGION_CREATE))
- ret = __db_fileinit(dbenv,
- fhp, rp->size, F_ISSET(dbenv, DB_ENV_REGION_INIT) ? 1 : 0);
+ if (ret == 0 && F_ISSET(infop, REGION_CREATE)) {
+ if (F_ISSET(dbenv, DB_ENV_REGION_INIT))
+ ret = __db_file_write(dbenv, fhp,
+ rp->size / MEGABYTE, rp->size % MEGABYTE, 0x00);
+ else
+ ret = __db_file_extend(dbenv, fhp, rp->size);
+ }
/* Map the file in. */
if (ret == 0)
@@ -180,7 +182,7 @@ __os_r_sysattach(dbenv, infop, rp)
#else
COMPQUIET(infop, NULL);
COMPQUIET(rp, NULL);
- __db_err(dbenv,
+ __db_errx(dbenv,
"architecture lacks mmap(2), shared environments not possible");
return (DB_OPNOTSUP);
#endif
@@ -199,12 +201,13 @@ __os_r_sysdetach(dbenv, infop, destroy)
int destroy;
{
REGION *rp;
+ int ret;
rp = infop->rp;
if (F_ISSET(dbenv, DB_ENV_SYSTEM_MEM)) {
#ifdef HAVE_SHMGET
- int ret, segid;
+ int segid;
/*
* We may be about to remove the memory referenced by rp,
@@ -215,22 +218,22 @@ __os_r_sysdetach(dbenv, infop, destroy)
rp->segid = INVALID_REGION_SEGID;
if (shmdt(infop->addr) != 0) {
- ret = __os_get_errno();
- __db_err(dbenv, "shmdt: %s", strerror(ret));
- return (ret);
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "shmdt");
+ return (__os_posix_err(ret));
}
if (destroy && shmctl(segid, IPC_RMID,
- NULL) != 0 && (ret = __os_get_errno()) != EINVAL) {
- __db_err(dbenv,
- "shmctl: id %d: unable to delete system shared memory region: %s",
- segid, strerror(ret));
- return (ret);
+ NULL) != 0 && (ret = __os_get_syserr()) != EINVAL) {
+ __db_syserr(dbenv, ret,
+ "shmctl: id %d: unable to delete system shared memory region",
+ segid);
+ return (__os_posix_err(ret));
}
return (0);
#else
- return (__db_nosystemmem(dbenv));
+ return (__no_system_mem(dbenv));
#endif
}
@@ -240,19 +243,18 @@ __os_r_sysdetach(dbenv, infop, destroy)
(void)munlock(infop->addr, rp->size);
#endif
if (munmap(infop->addr, rp->size) != 0) {
- int ret;
-
- ret = __os_get_errno();
- __db_err(dbenv, "munmap: %s", strerror(ret));
- return (ret);
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "munmap");
+ return (__os_posix_err(ret));
}
- if (destroy && __os_region_unlink(dbenv, infop->name) != 0)
- return (__os_get_errno());
+ if (destroy && (ret = __os_region_unlink(dbenv, infop->name)) != 0)
+ return (ret);
return (0);
#else
COMPQUIET(destroy, 0);
+ COMPQUIET(ret, 0);
return (EINVAL);
#endif
}
@@ -308,16 +310,20 @@ __os_unmapfile(dbenv, addr, len)
#ifdef HAVE_MUNLOCK
if (F_ISSET(dbenv, DB_ENV_LOCKDOWN))
RETRY_CHK((munlock(addr, len)), ret);
+ /*
+ * !!!
+ * The return value is ignored.
+ */
#else
COMPQUIET(dbenv, NULL);
#endif
RETRY_CHK((munmap(addr, len)), ret);
- return (ret);
+ ret = __os_posix_err(ret);
#else
COMPQUIET(dbenv, NULL);
-
- return (EINVAL);
+ ret = EINVAL;
#endif
+ return (ret);
}
#ifdef HAVE_MMAP
@@ -343,7 +349,7 @@ __os_map(dbenv, path, fhp, len, is_region, is_rdonly, addrp)
(path, len, is_region, is_rdonly, addrp));
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ DB_ASSERT(dbenv, 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.
@@ -404,7 +410,7 @@ __os_map(dbenv, path, fhp, len, is_region, is_rdonly, addrp)
*/
#ifdef VMS
if (__os_fsync(dbenv, fhp) == -1)
- return (__os_get_errno());
+ return (__os_posix_err(__os_get_syserr()));
#endif
/* MAP_FAILED was not defined in early mmap implementations. */
@@ -413,9 +419,9 @@ __os_map(dbenv, path, fhp, len, is_region, is_rdonly, addrp)
#endif
if ((p = mmap(NULL,
len, prot, flags, fhp->fd, (off_t)0)) == (void *)MAP_FAILED) {
- ret = __os_get_errno();
- __db_err(dbenv, "mmap: %s", strerror(ret));
- return (ret);
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "mmap");
+ return (__os_posix_err(ret));
}
#ifdef HAVE_MLOCK
@@ -429,10 +435,10 @@ __os_map(dbenv, path, fhp, len, is_region, is_rdonly, addrp)
* the call isn't conditional.
*/
if (F_ISSET(dbenv, DB_ENV_LOCKDOWN) && mlock(p, len) != 0) {
- ret = __os_get_errno();
+ ret = __os_get_syserr();
(void)munmap(p, len);
- __db_err(dbenv, "mlock: %s", strerror(ret));
- return (ret);
+ __db_syserr(dbenv, ret, "mlock");
+ return (__os_posix_err(ret));
}
#else
COMPQUIET(dbenv, NULL);
@@ -443,17 +449,55 @@ __os_map(dbenv, path, fhp, len, is_region, is_rdonly, addrp)
}
#endif
-#ifndef HAVE_SHMGET
+#ifdef HAVE_SHMGET
+#ifndef SHM_R
+#define SHM_R 0400
+#endif
+#ifndef SHM_W
+#define SHM_W 0200
+#endif
+
/*
- * __db_nosystemmem --
+ * __shm_mode --
+ * Map the DbEnv::open method file mode permissions to shmget call
+ * permissions.
+ */
+int
+__shm_mode(dbenv)
+ DB_ENV *dbenv;
+{
+ int mode;
+
+ /* Default to r/w owner, r/w group. */
+ if (dbenv->db_mode == 0)
+ return (SHM_R | SHM_W | SHM_R >> 3 | SHM_W >> 3);
+
+ mode = 0;
+ if (dbenv->db_mode & S_IRUSR)
+ mode |= SHM_R;
+ if (dbenv->db_mode & S_IWUSR)
+ mode |= SHM_W;
+ if (dbenv->db_mode & S_IRGRP)
+ mode |= SHM_R >> 3;
+ if (dbenv->db_mode & S_IWGRP)
+ mode |= SHM_W >> 3;
+ if (dbenv->db_mode & S_IROTH)
+ mode |= SHM_R >> 6;
+ if (dbenv->db_mode & S_IWOTH)
+ mode |= SHM_W >> 6;
+ return (mode);
+}
+#else
+/*
+ * __no_system_mem --
* No system memory environments error message.
*/
static int
-__db_nosystemmem(dbenv)
+__no_system_mem(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"architecture doesn't support environments in system memory");
return (DB_OPNOTSUP);
}
-#endif
+#endif /* HAVE_SHMGET */
diff --git a/db/os/os_method.c b/db/os/os_method.c
index a5bb17a79..1a629d570 100644
--- a/db/os/os_method.c
+++ b/db/os/os_method.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_method.c,v 11.21 2004/09/17 22:00:31 mjc Exp $
+ * $Id: os_method.c,v 12.4 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
/*
diff --git a/db/os/os_mkdir.c b/db/os/os_mkdir.c
new file mode 100644
index 000000000..a44dd1e8b
--- /dev/null
+++ b/db/os/os_mkdir.c
@@ -0,0 +1,52 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_mkdir.c,v 12.16 2006/08/24 14:46:18 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_mkdir --
+ * Create a directory.
+ *
+ * PUBLIC: int __os_mkdir __P((DB_ENV *, const char *, int));
+ */
+int
+__os_mkdir(dbenv, name, mode)
+ DB_ENV *dbenv;
+ const char *name;
+ int mode;
+{
+ int ret;
+
+ COMPQUIET(dbenv, NULL);
+
+ /* Make the directory, with paranoid permissions. */
+#ifdef HAVE_VXWORKS
+ RETRY_CHK((mkdir((char *)name)), ret);
+#else
+#ifdef DB_WIN32
+ RETRY_CHK((_mkdir(name)), ret);
+#else
+ RETRY_CHK((mkdir(name, __db_omode("rwx------"))), ret);
+#endif
+ if (ret != 0)
+ return (__os_posix_err(ret));
+
+ /* Set the absolute permissions, if specified. */
+#ifndef DB_WIN32
+ if (mode != 0) {
+ RETRY_CHK((chmod(name, mode)), ret);
+ if (ret != 0)
+ ret = __os_posix_err(ret);
+ }
+#endif
+#endif
+ return (ret);
+}
diff --git a/db/os/os_oflags.c b/db/os/os_oflags.c
index 2ffb6db2d..c0fdbf2be 100644
--- a/db/os/os_oflags.c
+++ b/db/os/os_oflags.c
@@ -1,28 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_oflags.c,v 11.14 2004/07/09 18:39:10 mjc Exp $
+ * $Id: os_oflags.c,v 12.6 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <sys/stat.h>
+#include "db_int.h"
+#ifndef NO_SYSTEM_INCLUDES
#ifdef HAVE_SHMGET
#include <sys/ipc.h>
#include <sys/shm.h>
#endif
-
-#include <fcntl.h>
#endif
-#include "db_int.h"
-
/*
* __db_oflags --
* Convert open(2) flags to DB flags.
@@ -70,18 +65,27 @@ __db_oflags(oflags)
#ifndef S_IWUSR
#define S_IWUSR S_IWRITE /* W for owner */
#endif
+#ifndef S_IXUSR
+#define S_IXUSR 0 /* X 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_IXGRP
+#define S_IXGRP 0 /* X 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
+#ifndef S_IXOTH
+#define S_IXOTH 0 /* X for other */
+#endif
#else
#ifndef S_IRUSR
#define S_IRUSR 0000400 /* R for owner */
@@ -89,18 +93,27 @@ __db_oflags(oflags)
#ifndef S_IWUSR
#define S_IWUSR 0000200 /* W for owner */
#endif
+#ifndef S_IXUSR
+#define S_IXUSR 0000100 /* X 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_IXGRP
+#define S_IXGRP 0000010 /* X 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
+#ifndef S_IXOTH
+#define S_IXOTH 0000001 /* X for other */
+#endif
#endif /* DB_WIN32 */
/*
@@ -119,56 +132,19 @@ __db_omode(perm)
mode |= S_IRUSR;
if (perm[1] == 'w')
mode |= S_IWUSR;
- if (perm[2] == 'r')
+ if (perm[2] == 'x')
+ mode |= S_IXUSR;
+ if (perm[3] == 'r')
mode |= S_IRGRP;
- if (perm[3] == 'w')
+ if (perm[4] == 'w')
mode |= S_IWGRP;
- if (perm[4] == 'r')
+ if (perm[5] == 'x')
+ mode |= S_IXGRP;
+ if (perm[6] == 'r')
mode |= S_IROTH;
- if (perm[5] == 'w')
+ if (perm[7] == 'w')
mode |= S_IWOTH;
+ if (perm[8] == 'x')
+ mode |= S_IXOTH;
return (mode);
}
-
-#ifdef HAVE_SHMGET
-
-#ifndef SHM_R
-#define SHM_R 0400
-#endif
-#ifndef SHM_W
-#define SHM_W 0200
-#endif
-
-/*
- * __db_shm_mode --
- * Map the DbEnv::open method file mode permissions to shmget call
- * permissions.
- *
- * PUBLIC: int __db_shm_mode __P((DB_ENV *));
- */
-int
-__db_shm_mode(dbenv)
- DB_ENV *dbenv;
-{
- int mode;
-
- /* Default to r/w owner, r/w group. */
- if (dbenv->db_mode == 0)
- return (SHM_R | SHM_W | SHM_R >> 3 | SHM_W >> 3);
-
- mode = 0;
- if (dbenv->db_mode & S_IRUSR)
- mode |= SHM_R;
- if (dbenv->db_mode & S_IWUSR)
- mode |= SHM_W;
- if (dbenv->db_mode & S_IRGRP)
- mode |= SHM_R >> 3;
- if (dbenv->db_mode & S_IWGRP)
- mode |= SHM_W >> 3;
- if (dbenv->db_mode & S_IROTH)
- mode |= SHM_R >> 6;
- if (dbenv->db_mode & S_IWOTH)
- mode |= SHM_W >> 6;
- return (mode);
-}
-#endif
diff --git a/db/os/os_open.c b/db/os/os_open.c
index 44c02e6d4..73d30dbf6 100644
--- a/db/os/os_open.c
+++ b/db/os/os_open.c
@@ -1,56 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_open.c,v 11.60 2004/09/24 00:43:19 bostic Exp $
+ * $Id: os_open.c,v 12.18 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_SYS_FCNTL_H
-#include <sys/fcntl.h>
-#endif
-
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
-static int __os_intermediate_dir __P((DB_ENV *, const char *));
-static int __os_mkdir __P((DB_ENV *, const char *));
#ifdef HAVE_QNX
-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;
+static int __os_qnx_region_open
+ __P((DB_ENV *, const char *, int, int, DB_FH **));
#endif
-#if defined(HAVE_DIRECTIO) && defined(DIRECTIO_ON)
- ret = 1;
-#endif
- return (ret);
-}
/*
* __os_open --
@@ -94,9 +58,9 @@ __os_open_extend(dbenv, name, page_size, flags, mode, fhpp)
oflags = 0;
#define OKFLAGS \
- (DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_DSYNC | DB_OSO_EXCL | \
- DB_OSO_LOG | DB_OSO_RDONLY | DB_OSO_REGION | DB_OSO_SEQ | \
- DB_OSO_TEMP | DB_OSO_TRUNC)
+ (DB_OSO_ABSMODE | DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_DSYNC |\
+ DB_OSO_EXCL | 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);
@@ -126,7 +90,7 @@ __os_open_extend(dbenv, name, page_size, flags, mode, fhpp)
oflags |= O_DIRECT;
#endif
#ifdef O_DSYNC
- if (LF_ISSET(DB_OSO_LOG) && LF_ISSET(DB_OSO_DSYNC))
+ if (LF_ISSET(DB_OSO_DSYNC))
oflags |= O_DSYNC;
#endif
@@ -144,7 +108,7 @@ __os_open_extend(dbenv, name, page_size, flags, mode, fhpp)
*/
if (dbenv != NULL &&
dbenv->dir_mode != 0 && LF_ISSET(DB_OSO_CREATE) &&
- (ret = __os_intermediate_dir(dbenv, name)) != 0)
+ (ret = __db_mkpath(dbenv, name)) != 0)
return (ret);
#ifdef HAVE_QNX
@@ -155,8 +119,25 @@ __os_open_extend(dbenv, name, page_size, flags, mode, fhpp)
if ((ret = __os_openhandle(dbenv, name, oflags, mode, &fhp)) != 0)
return (ret);
+#ifdef HAVE_FCHMOD
+ /*
+ * If the code using Berkeley DB is a library, that code may not be able
+ * to control the application's umask value. Allow applications to set
+ * absolute file modes. We can't fix the race between file creation and
+ * the fchmod call -- we can't modify the process' umask here since the
+ * process may be multi-threaded and the umask value is per-process, not
+ * per-thread.
+ */
+ if (LF_ISSET(DB_OSO_CREATE) && LF_ISSET(DB_OSO_ABSMODE))
+ (void)fchmod(fhp->fd, mode);
+#endif
+
#ifdef O_DSYNC
- if (LF_ISSET(DB_OSO_LOG) && LF_ISSET(DB_OSO_DSYNC))
+ /*
+ * If we can configure the file descriptor to flush on write, the
+ * file descriptor does not need to be explicitly sync'd.
+ */
+ if (LF_ISSET(DB_OSO_DSYNC))
F_SET(fhp, DB_FH_NOSYNC);
#endif
@@ -226,20 +207,20 @@ __os_qnx_region_open(dbenv, name, oflags, mode, fhpp)
* anymore. Other callers of this will convert themselves.
*/
fhp->fd = shm_open(newname, oflags, mode);
+ if (fhp->fd == -1)
+ ret = __os_posix_err(__os_get_syserr());
__os_free(dbenv, newname);
-
- if (fhp->fd == -1) {
- ret = __os_get_errno();
+ if (fhp->fd == -1)
goto err;
- }
F_SET(fhp, DB_FH_OPENED);
#ifdef 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));
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "fcntl(F_SETFD)");
+ ret = __os_posix_err(ret);
goto err;
}
#endif
@@ -327,86 +308,3 @@ __os_shmname(dbenv, name, newnamep)
return (0);
}
#endif
-
-/*
- * __os_intermediate_dir --
- * Create intermediate directories.
- */
-static int
-__os_intermediate_dir(dbenv, name)
- DB_ENV *dbenv;
- const char *name;
-{
- size_t len;
- int ret;
- char savech, *p, *t, buf[128];
-
- ret = 0;
-
- /*
- * Get a copy so we can modify the string.
- *
- * Allocate memory if temporary space is too small.
- */
- if ((len = strlen(name)) > sizeof(buf) - 1) {
- if ((ret = __os_umalloc(dbenv, len, &t)) != 0)
- return (ret);
- } else
- t = buf;
- (void)strcpy(t, name);
-
- /*
- * Cycle through the path, creating intermediate directories.
- *
- * Skip the first byte if it's a path separator, it's the start of an
- * absolute pathname.
- */
- if (PATH_SEPARATOR[1] == '\0') {
- for (p = t + 1; p[0] != '\0'; ++p)
- if (p[0] == PATH_SEPARATOR[0]) {
- savech = *p;
- *p = '\0';
- if (__os_exists(t, NULL) &&
- (ret = __os_mkdir(dbenv, t)) != 0)
- break;
- *p = savech;
- }
- } else
- for (p = t + 1; p[0] != '\0'; ++p)
- if (strchr(PATH_SEPARATOR, p[0]) != NULL) {
- savech = *p;
- *p = '\0';
- if (__os_exists(t, NULL) &&
- (ret = __os_mkdir(dbenv, t)) != 0)
- break;
- *p = savech;
- }
- if (t != buf)
- __os_free(dbenv, t);
- return (ret);
-}
-
-/*
- * __os_mkdir --
- * Create a directory.
- */
-static int
-__os_mkdir(dbenv, name)
- DB_ENV *dbenv;
- const char *name;
-{
- int ret;
-
- /* Make the directory, with paranoid permissions. */
-#ifdef HAVE_VXWORKS
- RETRY_CHK((mkdir((char *)name)), ret);
-#else
- RETRY_CHK((mkdir(name, 0600)), ret);
- if (ret != 0)
- return (ret);
-
- /* Set the absolute permissions. */
- RETRY_CHK((chmod(name, dbenv->dir_mode)), ret);
-#endif
- return (ret);
-}
diff --git a/db/os/os_pid.c b/db/os/os_pid.c
new file mode 100644
index 000000000..e9a663954
--- /dev/null
+++ b/db/os/os_pid.c
@@ -0,0 +1,61 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_pid.c,v 12.21 2006/08/24 14:46:18 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/mutex_int.h" /* Required to load appropriate
+ header files for thread functions. */
+/*
+ * __os_id --
+ * Return the current process ID.
+ *
+ * PUBLIC: void __os_id __P((DB_ENV *, pid_t *, db_threadid_t*));
+ */
+void
+__os_id(dbenv, pidp, tidp)
+ DB_ENV *dbenv;
+ pid_t *pidp;
+ db_threadid_t *tidp;
+{
+ /*
+ * We can't depend on dbenv not being NULL, this routine is called
+ * from places where there's no DB_ENV handle. It takes a DB_ENV
+ * handle as an arg because it's the default DB_ENV->thread_id function.
+ *
+ * We cache the pid in the DB_ENV handle, it's a fairly slow call on
+ * lots of systems.
+ */
+ if (pidp != NULL) {
+ if (dbenv == NULL) {
+#if defined(HAVE_VXWORKS)
+ *pidp = taskIdSelf();
+#else
+ *pidp = getpid();
+#endif
+ } else
+ *pidp = dbenv->pid_cache;
+ }
+
+ if (tidp != NULL) {
+#if defined(DB_WIN32)
+ *tidp = GetCurrentThreadId();
+#elif defined(HAVE_MUTEX_UI_THREADS)
+ *tidp = thr_self();
+#elif defined(HAVE_MUTEX_SOLARIS_LWP) || \
+ defined(HAVE_MUTEX_PTHREADS) || defined(HAVE_PTHREAD_API)
+ *tidp = pthread_self();
+#else
+ /*
+ * Default to just getpid.
+ */
+ *tidp = 0;
+#endif
+ }
+}
diff --git a/db/os/os_region.c b/db/os/os_region.c
index 024c0320d..ea9cde3a5 100644
--- a/db/os/os_region.c
+++ b/db/os/os_region.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_region.c,v 11.21 2004/06/10 17:20:57 bostic Exp $
+ * $Id: os_region.c,v 12.9 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -31,13 +25,24 @@ __os_r_attach(dbenv, infop, rp)
{
int ret;
- /* Round off the requested size for the underlying VM. */
+ /*
+ * All regions are created on 8K boundaries out of sheer paranoia,
+ * so we don't make some underlying VM unhappy. Make sure we don't
+ * overflow or underflow.
+ */
+#define OS_VMPAGESIZE (8 * 1024)
+#define OS_VMROUNDOFF(i) { \
+ if ((i) < \
+ (UINT32_MAX - OS_VMPAGESIZE) + 1 || (i) < OS_VMPAGESIZE) \
+ (i) += OS_VMPAGESIZE - 1; \
+ (i) -= (i) % OS_VMPAGESIZE; \
+}
OS_VMROUNDOFF(rp->size);
#ifdef DB_REGIONSIZE_MAX
/* Some architectures have hard limits on the maximum region size. */
if (rp->size > DB_REGIONSIZE_MAX) {
- __db_err(dbenv, "region size %lu is too large; maximum is %lu",
+ __db_errx(dbenv, "region size %lu is too large; maximum is %lu",
(u_long)rp->size, (u_long)DB_REGIONSIZE_MAX);
return (EINVAL);
}
@@ -52,7 +57,7 @@ __os_r_attach(dbenv, infop, rp)
* I don't know of any architectures (yet!) where malloc is a problem.
*/
if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
-#if defined(MUTEX_NO_MALLOC_LOCKS)
+#if defined(HAVE_MUTEX_HPPA_MSEM_INIT)
/*
* !!!
* There exist spinlocks that don't work in malloc memory, e.g.,
@@ -61,19 +66,15 @@ __os_r_attach(dbenv, infop, rp)
* be threaded.
*/
if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- __db_err(dbenv, "%s",
+ __db_errx(dbenv, "%s",
"architecture does not support locks inside process-local (malloc) memory");
- __db_err(dbenv, "%s",
+ __db_errx(dbenv, "%s",
"application may not specify both DB_PRIVATE and DB_THREAD");
return (EINVAL);
}
#endif
- /*
- * Pad out the allocation, we're going to align it to mutex
- * alignment.
- */
- if ((ret = __os_malloc(dbenv,
- sizeof(REGENV) + (MUTEX_ALIGN - 1), &infop->addr)) != 0)
+ if ((ret = __os_malloc(
+ dbenv, sizeof(REGENV), &infop->addr)) != 0)
return (ret);
infop->max_alloc = rp->size;
@@ -97,12 +98,12 @@ __os_r_attach(dbenv, infop, rp)
* the original values for restoration when the region is discarded.
*/
infop->addr_orig = infop->addr;
- infop->addr = ALIGNP_INC(infop->addr_orig, MUTEX_ALIGN);
+ infop->addr = ALIGNP_INC(infop->addr_orig, sizeof(size_t));
rp->size_orig = rp->size;
if (infop->addr != infop->addr_orig)
- rp->size -=
- (u_int8_t *)infop->addr - (u_int8_t *)infop->addr_orig;
+ rp->size -= (roff_t)
+ ((u_int8_t *)infop->addr - (u_int8_t *)infop->addr_orig);
return (0);
}
diff --git a/db/os/os_rename.c b/db/os/os_rename.c
index a55160bcc..912feb26e 100644
--- a/db/os/os_rename.c
+++ b/db/os/os_rename.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_rename.c,v 11.17 2004/07/06 13:55:48 bostic Exp $
+ * $Id: os_rename.c,v 12.7 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -32,14 +26,19 @@ __os_rename(dbenv, old, new, silent)
{
int ret;
- RETRY_CHK((DB_GLOBAL(j_rename) != NULL ?
- DB_GLOBAL(j_rename)(old, new) : rename(old, new)), ret);
+ if (DB_GLOBAL(j_rename) != NULL)
+ ret = DB_GLOBAL(j_rename)(old, new);
+ else
+ RETRY_CHK((rename(old, new)), ret);
/*
* If "silent" is not set, then errors are OK and we should not output
* an error message.
*/
- if (!silent && ret != 0)
- __db_err(dbenv, "rename %s %s: %s", old, new, strerror(ret));
+ if (ret != 0) {
+ if (!silent)
+ __db_syserr(dbenv, ret, "rename %s %s", old, new);
+ ret = __os_posix_err(ret);
+ }
return (ret);
}
diff --git a/db/os/os_root.c b/db/os/os_root.c
index bf4702ed2..4b340dc8e 100644
--- a/db/os/os_root.c
+++ b/db/os/os_root.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_root.c,v 11.8 2004/01/28 03:36:18 bostic Exp $
+ * $Id: os_root.c,v 12.5 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <unistd.h>
-#endif
-
#include "db_int.h"
/*
diff --git a/db/os/os_rpath.c b/db/os/os_rpath.c
index 28a0a4826..b25d6bb75 100644
--- a/db/os/os_rpath.c
+++ b/db/os/os_rpath.c
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_rpath.c,v 11.9 2004/01/28 03:36:18 bostic Exp $
+ * $Id: os_rpath.c,v 12.5 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <string.h>
-#endif
-
#include "db_int.h"
-#ifdef HAVE_VXWORKS
-#include "iosLib.h"
-#endif
/*
* __db_rpath --
@@ -29,31 +22,8 @@ __db_rpath(path)
const char *path;
{
const char *s, *last;
-#ifdef HAVE_VXWORKS
- DEV_HDR *dummy;
- char *ptail;
- /*
- * VxWorks devices can be rooted at any name. We want to
- * skip over the device name and not take into account any
- * PATH_SEPARATOR characters that might be in that name.
- *
- * XXX [#2393]
- * VxWorks supports having a filename directly follow a device
- * name with no separator. I.e. to access a file 'xxx' in
- * the top level directory of a device mounted at "mydrive"
- * you could say "mydrivexxx" or "mydrive/xxx" or "mydrive\xxx".
- * We do not support the first usage here.
- * XXX
- */
- if ((dummy = iosDevFind((char *)path, &ptail)) == NULL)
- s = path;
- else
- s = ptail;
-#else
s = path;
-#endif
-
last = NULL;
if (PATH_SEPARATOR[1] != '\0') {
for (; s[0] != '\0'; ++s)
diff --git a/db/os/os_rw.c b/db/os/os_rw.c
index 5519f35e4..90a4c8a95 100644
--- a/db/os/os_rw.c
+++ b/db/os/os_rw.c
@@ -1,62 +1,62 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_rw.c,v 11.39 2004/09/17 22:00:31 mjc Exp $
+ * $Id: os_rw.c,v 12.17 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
-#ifdef HAVE_FILESYSTEM_NOTZERO
-static int __os_zerofill __P((DB_ENV *, DB_FH *));
-#endif
-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 *,
- * PUBLIC: int, DB_FH *, db_pgno_t, u_int32_t, u_int8_t *, size_t *));
+ * PUBLIC: int __os_io __P((DB_ENV *, int, DB_FH *, db_pgno_t,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t, u_int8_t *, size_t *));
*/
int
-__os_io(dbenv, op, fhp, pgno, pagesize, buf, niop)
+__os_io(dbenv, op, fhp, pgno, pgsize, relative, io_len, buf, niop)
DB_ENV *dbenv;
int op;
DB_FH *fhp;
db_pgno_t pgno;
- u_int32_t pagesize;
+ u_int32_t pgsize, relative, io_len;
u_int8_t *buf;
size_t *niop;
{
#if defined(HAVE_PREAD) && defined(HAVE_PWRITE)
+ off_t offset;
ssize_t nio;
#endif
int ret;
- /* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ /*
+ * Check for illegal usage.
+ *
+ * This routine is used in one of two ways: reading bytes from an
+ * absolute offset and reading a specific database page. All of
+ * our absolute offsets are known to fit into a u_int32_t, while
+ * our database pages might be at offsets larger than a u_int32_t.
+ * We don't want to specify an absolute offset in our caller as we
+ * aren't exactly sure what size an off_t might be.
+ */
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ DB_ASSERT(dbenv, (pgno == 0 && pgsize == 0) || relative == 0);
#if defined(HAVE_PREAD) && defined(HAVE_PWRITE)
+ if ((offset = relative) == 0)
+ offset = (off_t)pgno * pgsize;
switch (op) {
case DB_IO_READ:
if (DB_GLOBAL(j_read) != NULL)
goto slow;
- nio = DB_GLOBAL(j_pread) != NULL ? DB_GLOBAL(j_pread)
- (fhp->fd, buf, pagesize, (off_t)pgno * pagesize) :
- pread(fhp->fd, buf, pagesize, (off_t)pgno * pagesize);
+ nio = DB_GLOBAL(j_pread) != NULL ?
+ DB_GLOBAL(j_pread)(fhp->fd, buf, io_len, offset) :
+ pread(fhp->fd, buf, io_len, offset);
break;
case DB_IO_WRITE:
if (DB_GLOBAL(j_write) != NULL)
@@ -65,37 +65,36 @@ __os_io(dbenv, op, fhp, pgno, pagesize, buf, niop)
if (__os_fs_notzero())
goto slow;
#endif
- nio = DB_GLOBAL(j_pwrite) != NULL ? DB_GLOBAL(j_pwrite)
- (fhp->fd, buf, pagesize, (off_t)pgno * pagesize) :
- pwrite(fhp->fd, buf, pagesize, (off_t)pgno * pagesize);
+ nio = DB_GLOBAL(j_pwrite) != NULL ?
+ DB_GLOBAL(j_pwrite)(fhp->fd, buf, io_len, offset) :
+ pwrite(fhp->fd, buf, io_len, offset);
break;
default:
return (EINVAL);
}
- if (nio == (ssize_t)pagesize) {
- *niop = pagesize;
+ if (nio == (ssize_t)io_len) {
+ *niop = io_len;
return (0);
}
slow:
#endif
- MUTEX_THREAD_LOCK(dbenv, fhp->mutexp);
+ MUTEX_LOCK(dbenv, fhp->mtx_fh);
- if ((ret = __os_seek(dbenv, fhp,
- pagesize, pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp, pgno, pgsize, relative)) != 0)
goto err;
switch (op) {
case DB_IO_READ:
- ret = __os_read(dbenv, fhp, buf, pagesize, niop);
+ ret = __os_read(dbenv, fhp, buf, io_len, niop);
break;
case DB_IO_WRITE:
- ret = __os_write(dbenv, fhp, buf, pagesize, niop);
+ ret = __os_write(dbenv, fhp, buf, io_len, niop);
break;
default:
ret = EINVAL;
break;
}
-err: MUTEX_THREAD_UNLOCK(dbenv, fhp->mutexp);
+err: MUTEX_UNLOCK(dbenv, fhp->mtx_fh);
return (ret);
@@ -123,14 +122,15 @@ __os_read(dbenv, fhp, addr, len, nrp)
ret = 0;
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
if (DB_GLOBAL(j_read) != NULL) {
*nrp = len;
if (DB_GLOBAL(j_read)(fhp->fd, addr, len) != (ssize_t)len) {
- ret = __os_get_errno();
- __db_err(dbenv, "read: %#lx, %lu: %s",
- P_TO_ULONG(addr), (u_long)len, strerror(ret));
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "read: %#lx, %lu",
+ P_TO_ULONG(addr), (u_long)len);
+ ret = __os_posix_err(ret);
}
return (ret);
}
@@ -143,9 +143,11 @@ __os_read(dbenv, fhp, addr, len, nrp)
break;
}
*nrp = (size_t)(taddr - (u_int8_t *)addr);
- if (ret != 0)
- __db_err(dbenv, "read: %#lx, %lu: %s",
- P_TO_ULONG(taddr), (u_long)len - offset, strerror(ret));
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "read: %#lx, %lu",
+ P_TO_ULONG(taddr), (u_long)len - offset);
+ ret = __os_posix_err(ret);
+ }
return (ret);
}
@@ -164,7 +166,7 @@ __os_write(dbenv, fhp, addr, len, nwp)
size_t *nwp;
{
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
#ifdef HAVE_FILESYSTEM_NOTZERO
/* Zero-fill as necessary. */
@@ -180,8 +182,11 @@ __os_write(dbenv, fhp, addr, len, nwp)
/*
* __os_physwrite --
* Physical write to a file handle.
+ *
+ * PUBLIC: int __os_physwrite
+ * PUBLIC: __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
*/
-static int
+int
__os_physwrite(dbenv, fhp, addr, len, nwp)
DB_ENV *dbenv;
DB_FH *fhp;
@@ -201,18 +206,34 @@ __os_physwrite(dbenv, fhp, addr, len, nwp)
struct stat sb;
off_t cur_off;
- DB_ASSERT(fstat(fhp->fd, &sb) != -1 &&
+ DB_ASSERT(dbenv, fstat(fhp->fd, &sb) != -1 &&
(cur_off = lseek(fhp->fd, (off_t)0, SEEK_CUR)) != -1 &&
cur_off <= sb.st_size);
}
#endif
+ /*
+ * Make a last "panic" check. Imagine a thread of control running in
+ * Berkeley DB, going to sleep. Another thread of control decides to
+ * run recovery because the environment is broken. The first thing
+ * recovery does is panic the existing environment, but we only check
+ * the panic flag when crossing the public API. If the sleeping thread
+ * wakes up and writes something, we could have two threads of control
+ * writing the log files at the same time. So, before writing, make a
+ * last panic check. Obviously, there's still a window, but it's very,
+ * very small.
+ */
+ PANIC_CHECK(dbenv);
+
if (DB_GLOBAL(j_write) != NULL) {
*nwp = len;
if (DB_GLOBAL(j_write)(fhp->fd, addr, len) != (ssize_t)len) {
- ret = __os_get_errno();
- __db_err(dbenv, "write: %#lx, %lu: %s",
- P_TO_ULONG(addr), (u_long)len, strerror(ret));
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "write: %#lx, %lu",
+ P_TO_ULONG(addr), (u_long)len);
+ ret = __os_posix_err(ret);
+
+ DB_EVENT(dbenv, DB_EVENT_WRITE_FAILED, NULL);
}
return (ret);
}
@@ -225,95 +246,12 @@ __os_physwrite(dbenv, fhp, addr, len, nwp)
break;
}
*nwp = len;
- if (ret != 0)
- __db_err(dbenv, "write: %#lx, %lu: %s",
- P_TO_ULONG(taddr), (u_long)len - offset, strerror(ret));
- return (ret);
-}
-
-#ifdef HAVE_FILESYSTEM_NOTZERO
-/*
- * __os_zerofill --
- * Zero out bytes in the file.
- *
- * Pages allocated by writing pages past end-of-file are not zeroed,
- * on some systems. Recovery could theoretically be fooled by a page
- * showing up that contained garbage. In order to avoid this, we
- * have to write the pages out to disk, and flush them. The reason
- * for the flush is because if we don't sync, the allocation of another
- * page subsequent to this one might reach the disk first, and if we
- * crashed at the right moment, leave us with this page as the one
- * allocated by writing a page past it in the file.
- */
-static int
-__os_zerofill(dbenv, fhp)
- DB_ENV *dbenv;
- DB_FH *fhp;
-{
- off_t stat_offset, write_offset;
- size_t blen, nw;
- u_int32_t bytes, mbytes;
- int group_sync, need_free, ret;
- u_int8_t buf[8 * 1024], *bp;
-
- /* Calculate the byte offset of the next write. */
- write_offset = (off_t)fhp->pgno * fhp->pgsize + fhp->offset;
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "write: %#lx, %lu",
+ P_TO_ULONG(taddr), (u_long)len - offset);
+ ret = __os_posix_err(ret);
- /* Stat the file. */
- if ((ret = __os_ioinfo(dbenv, NULL, fhp, &mbytes, &bytes, NULL)) != 0)
- return (ret);
- stat_offset = (off_t)mbytes * MEGABYTE + bytes;
-
- /* Check if the file is large enough. */
- if (stat_offset >= write_offset)
- return (0);
-
- /* Get a large buffer if we're writing lots of data. */
-#undef ZF_LARGE_WRITE
-#define ZF_LARGE_WRITE (64 * 1024)
- if (write_offset - stat_offset > ZF_LARGE_WRITE) {
- if ((ret = __os_calloc(dbenv, 1, ZF_LARGE_WRITE, &bp)) != 0)
- return (ret);
- blen = ZF_LARGE_WRITE;
- need_free = 1;
- } else {
- bp = buf;
- blen = sizeof(buf);
- need_free = 0;
- memset(buf, 0, sizeof(buf));
+ DB_EVENT(dbenv, DB_EVENT_WRITE_FAILED, NULL);
}
-
- /* Seek to the current end of the file. */
- if ((ret = __os_seek(
- dbenv, fhp, MEGABYTE, mbytes, bytes, 0, DB_OS_SEEK_SET)) != 0)
- goto err;
-
- /*
- * Hash is the only access method that allocates groups of pages. Hash
- * uses the existence of the last page in a group to signify the entire
- * group is OK; so, write all the pages but the last one in the group,
- * flush them to disk, then write the last one to disk and flush it.
- */
- for (group_sync = 0; stat_offset < write_offset; group_sync = 1) {
- if (write_offset - stat_offset <= blen) {
- blen = (size_t)(write_offset - stat_offset);
- if (group_sync && (ret = __os_fsync(dbenv, fhp)) != 0)
- goto err;
- }
- if ((ret = __os_physwrite(dbenv, fhp, bp, blen, &nw)) != 0)
- goto err;
- stat_offset += blen;
- }
- if ((ret = __os_fsync(dbenv, fhp)) != 0)
- goto err;
-
- /* Seek back to where we started. */
- mbytes = (u_int32_t)(write_offset / MEGABYTE);
- bytes = (u_int32_t)(write_offset % MEGABYTE);
- ret = __os_seek(dbenv, fhp, MEGABYTE, mbytes, bytes, 0, DB_OS_SEEK_SET);
-
-err: if (need_free)
- __os_free(dbenv, bp);
return (ret);
}
-#endif
diff --git a/db/os/os_seek.c b/db/os/os_seek.c
index 482bb6c6c..ee4b02901 100644
--- a/db/os/os_seek.c
+++ b/db/os/os_seek.c
@@ -1,22 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_seek.c,v 11.26 2004/09/17 22:00:31 mjc Exp $
+ * $Id: os_seek.c,v 12.10 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
/*
@@ -24,55 +16,40 @@
* Seek to a page/byte offset in the file.
*
* PUBLIC: int __os_seek __P((DB_ENV *,
- * PUBLIC: DB_FH *, u_int32_t, db_pgno_t, u_int32_t, int, DB_OS_SEEK));
+ * PUBLIC: DB_FH *, db_pgno_t, u_int32_t, u_int32_t));
*/
int
-__os_seek(dbenv, fhp, pgsize, pageno, relative, isrewind, db_whence)
+__os_seek(dbenv, fhp, pgno, pgsize, relative)
DB_ENV *dbenv;
DB_FH *fhp;
+ db_pgno_t pgno;
u_int32_t pgsize;
- db_pgno_t pageno;
u_int32_t relative;
- int isrewind;
- DB_OS_SEEK db_whence;
{
off_t offset;
- int ret, whence;
+ int ret;
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
- switch (db_whence) {
- case DB_OS_SEEK_CUR:
- whence = SEEK_CUR;
- break;
- case DB_OS_SEEK_END:
- whence = SEEK_END;
- break;
- case DB_OS_SEEK_SET:
- whence = SEEK_SET;
- break;
- default:
- return (EINVAL);
- }
-
- offset = (off_t)pgsize * pageno + relative;
- if (isrewind)
- offset = -offset;
+ offset = (off_t)pgsize * pgno + relative;
if (DB_GLOBAL(j_seek) != NULL)
- ret = DB_GLOBAL(j_seek)(fhp->fd, offset, whence);
+ ret = DB_GLOBAL(j_seek)(fhp->fd, offset, SEEK_SET);
else
- RETRY_CHK((lseek(fhp->fd, offset, whence) == -1 ? 1 : 0), ret);
+ RETRY_CHK((lseek(
+ fhp->fd, offset, SEEK_SET) == -1 ? 1 : 0), ret);
if (ret == 0) {
fhp->pgsize = pgsize;
- fhp->pgno = pageno;
+ fhp->pgno = pgno;
fhp->offset = relative;
- } else
- __db_err(dbenv, "seek: %lu %d %d: %s",
- (u_long)pgsize * pageno + relative,
- isrewind, db_whence, strerror(ret));
+ } else {
+ __db_syserr(dbenv, ret,
+ "seek: %lu: (%lu * %lu) + %lu", (u_long)offset,
+ (u_long)pgno, (u_long)pgsize, (u_long)relative);
+ ret = __os_posix_err(ret);
+ }
return (ret);
}
diff --git a/db/os/os_sleep.c b/db/os/os_sleep.c
index da3e97280..b0a5e61fe 100644
--- a/db/os/os_sleep.c
+++ b/db/os/os_sleep.c
@@ -1,42 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_sleep.c,v 11.23 2004/03/27 19:09:13 bostic Exp $
+ * $Id: os_sleep.c,v 12.9 2006/09/06 20:22:12 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#ifdef HAVE_VXWORKS
-#include <sys/times.h>
-#include <time.h>
-#include <selectLib.h>
-#else
-#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 */
-#endif /* HAVE_VXWORKS */
-
-#include <string.h>
-#include <unistd.h>
-#endif
-
+#define __INCLUDE_SELECT_H 1
#include "db_int.h"
/*
@@ -66,6 +39,16 @@ __os_sleep(dbenv, secs, usecs)
* It's important that we yield the processor here so that other
* processes or threads are permitted to run.
*
+ * XXX
+ * VxWorks doesn't yield the processor on select. This isn't really
+ * an infinite loop, even though __os_yield can call __os_sleep, and
+ * we'll fix this when the tree isn't frozen. [#15037]
+ */
+#ifdef HAVE_VXWORKS
+ __os_yield(dbenv);
+#endif
+
+ /*
* Sheer raving paranoia -- don't select for 0 time.
*/
t.tv_sec = (long)secs;
@@ -81,7 +64,9 @@ __os_sleep(dbenv, secs, usecs)
* 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 (select(0, NULL, NULL, NULL, &t) == -1)
- if ((ret = __os_get_errno()) != EINTR)
- __db_err(dbenv, "select: %s", strerror(ret));
+ if (select(0, NULL, NULL, NULL, &t) == -1) {
+ ret = __os_get_syserr();
+ if (__os_posix_err(ret) != EINTR)
+ __db_syserr(dbenv, ret, "select");
+ }
}
diff --git a/db/os/os_spin.c b/db/os/os_spin.c
index 23d4d71ae..9e53d3c80 100644
--- a/db/os/os_spin.c
+++ b/db/os/os_spin.c
@@ -1,26 +1,22 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_spin.c,v 11.20 2004/06/23 14:10:56 bostic Exp $
+ * $Id: os_spin.c,v 12.10 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
+
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
#if defined(HAVE_PSTAT_GETDYNAMIC)
#include <sys/pstat.h>
#endif
-
-#include <limits.h> /* Needed for sysconf on Solaris. */
-#include <unistd.h>
#endif
-#include "db_int.h"
-
#if defined(HAVE_PSTAT_GETDYNAMIC)
static int __os_pstat_getdynamic __P((void));
@@ -39,18 +35,19 @@ __os_pstat_getdynamic()
#endif
#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
-static int __os_sysconf __P((void));
+static u_int32_t __os_sysconf __P((void));
/*
* __os_sysconf --
* Solaris, Linux.
*/
-static int
+static u_int32_t
__os_sysconf()
{
long nproc;
- return ((nproc = sysconf(_SC_NPROCESSORS_ONLN)) > 1 ? (int)nproc : 1);
+ nproc = sysconf(_SC_NPROCESSORS_ONLN);
+ return ((u_int32_t)(nproc > 1 ? nproc : 1));
}
#endif
@@ -58,54 +55,30 @@ __os_sysconf()
* __os_spin --
* Set the number of default spins before blocking.
*
- * PUBLIC: void __os_spin __P((DB_ENV *));
+ * PUBLIC: u_int32_t __os_spin __P((DB_ENV *));
*/
-void
+u_int32_t
__os_spin(dbenv)
DB_ENV *dbenv;
{
- /*
- * If the application specified a value or we've already figured it
- * out, return it.
- *
- * Don't repeatedly call the underlying function because it can be
- * expensive (for example, taking multiple filesystem accesses under
- * Debian Linux).
- */
- if (dbenv->tas_spins != 0)
- return;
+ u_int32_t tas_spins;
- dbenv->tas_spins = 1;
+ COMPQUIET(dbenv, NULL);
+
+ tas_spins = 1;
#if defined(HAVE_PSTAT_GETDYNAMIC)
- dbenv->tas_spins = __os_pstat_getdynamic();
+ tas_spins = __os_pstat_getdynamic();
#endif
#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
- dbenv->tas_spins = __os_sysconf();
+ tas_spins = __os_sysconf();
#endif
/*
* Spin 50 times per processor, we have anecdotal evidence that this
* is a reasonable value.
*/
- if (dbenv->tas_spins != 1)
- dbenv->tas_spins *= 50;
-}
+ if (tas_spins != 1)
+ tas_spins *= 50;
-/*
- * __os_yield --
- * Yield the processor.
- *
- * PUBLIC: void __os_yield __P((DB_ENV*, u_long));
- */
-void
-__os_yield(dbenv, usecs)
- DB_ENV *dbenv;
- u_long usecs;
-{
- if (DB_GLOBAL(j_yield) != NULL && DB_GLOBAL(j_yield)() == 0)
- return;
-#ifdef HAVE_VXWORKS
- taskDelay(1);
-#endif
- __os_sleep(dbenv, 0, usecs);
+ return (tas_spins);
}
diff --git a/db/os/os_stat.c b/db/os/os_stat.c
index 92cea98c0..7a2abedb3 100644
--- a/db/os/os_stat.c
+++ b/db/os/os_stat.c
@@ -1,37 +1,33 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_stat.c,v 11.27 2004/07/06 13:55:48 bostic Exp $
+ * $Id: os_stat.c,v 12.9 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
* __os_exists --
* Return if the file exists.
*
- * PUBLIC: int __os_exists __P((const char *, int *));
+ * PUBLIC: int __os_exists __P((DB_ENV *, const char *, int *));
*/
int
-__os_exists(path, isdirp)
+__os_exists(dbenv, path, isdirp)
+ DB_ENV *dbenv;
const char *path;
int *isdirp;
{
struct stat sb;
int ret;
+ COMPQUIET(dbenv, NULL);
+
if (DB_GLOBAL(j_exists) != NULL)
return (DB_GLOBAL(j_exists)(path, isdirp));
@@ -41,7 +37,7 @@ __os_exists(path, isdirp)
RETRY_CHK((stat(path, &sb)), ret);
#endif
if (ret != 0)
- return (ret);
+ return (__os_posix_err(ret));
#if !defined(S_ISDIR) || defined(STAT_MACROS_BROKEN)
#undef S_ISDIR
@@ -80,12 +76,12 @@ __os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
fhp->fd, mbytesp, bytesp, iosizep));
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ DB_ASSERT(dbenv, F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
RETRY_CHK((fstat(fhp->fd, &sb)), ret);
if (ret != 0) {
- __db_err(dbenv, "fstat: %s", strerror(ret));
- return (ret);
+ __db_syserr(dbenv, ret, "fstat");
+ return (__os_posix_err(ret));
}
/* Return the size of the file. */
@@ -95,7 +91,7 @@ __os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
*bytesp = (u_int32_t)(sb.st_size % MEGABYTE);
/*
- * Return the underlying filesystem blocksize, if available.
+ * Return the underlying filesystem I/O size, if available.
*
* XXX
* Check for a 0 size -- the HP MPE/iX architecture has st_blksize,
diff --git a/db/os/os_tmpdir.c b/db/os/os_tmpdir.c
index c1abf3cff..75cbb35a2 100644
--- a/db/os/os_tmpdir.c
+++ b/db/os/os_tmpdir.c
@@ -1,25 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_tmpdir.c,v 11.24 2004/10/05 14:55:33 mjc Exp $
+ * $Id: os_tmpdir.c,v 12.11 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#endif
-
#include "db_int.h"
+#ifndef NO_SYSTEM_INCLUDES
#ifdef macintosh
#include <TFileSpec.h>
#endif
+#endif
/*
* __os_tmpdir --
@@ -35,7 +31,7 @@ __os_tmpdir(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int isdir;
+ int isdir, ret;
/*
* !!!
@@ -54,34 +50,45 @@ __os_tmpdir(dbenv, flags)
"C:/tmp", /* Windows. */
NULL
};
- const char * const *lp, *p;
+ const char * const *lp;
+ char *tdir, tdir_buf[DB_MAXPATHLEN];
/* Use the environment if it's permitted and initialized. */
if (LF_ISSET(DB_USE_ENVIRON) ||
(LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot())) {
- if ((p = getenv("TMPDIR")) != NULL && p[0] == '\0') {
- __db_err(dbenv, "illegal TMPDIR environment variable");
- return (EINVAL);
- }
- /* Windows */
- if (p == NULL && (p = getenv("TEMP")) != NULL && p[0] == '\0') {
- __db_err(dbenv, "illegal TEMP environment variable");
- return (EINVAL);
- }
- /* Windows */
- if (p == NULL && (p = getenv("TMP")) != NULL && p[0] == '\0') {
- __db_err(dbenv, "illegal TMP environment variable");
- return (EINVAL);
- }
+ /* POSIX: TMPDIR */
+ tdir = tdir_buf;
+ if ((ret = __os_getenv(
+ dbenv, "TMPDIR", &tdir, sizeof(tdir_buf))) != 0)
+ return (ret);
+ if (tdir != NULL && tdir[0] != '\0')
+ goto found;
+
+ /*
+ * Windows: TEMP, TMP
+ */
+ tdir = tdir_buf;
+ if ((ret = __os_getenv(
+ dbenv, "TEMP", &tdir, sizeof(tdir_buf))) != 0)
+ return (ret);
+ if (tdir != NULL && tdir[0] != '\0')
+ goto found;
+
+ tdir = tdir_buf;
+ if ((ret = __os_getenv(
+ dbenv, "TMP", &tdir, sizeof(tdir_buf))) != 0)
+ return (ret);
+ if (tdir != NULL && tdir[0] != '\0')
+ goto found;
+
/* Macintosh */
- if (p == NULL &&
- (p = getenv("TempFolder")) != NULL && p[0] == '\0') {
- __db_err(dbenv,
- "illegal TempFolder environment variable");
- return (EINVAL);
- }
- if (p != NULL)
- return (__os_strdup(dbenv, p, &dbenv->db_tmp_dir));
+ tdir = tdir_buf;
+ if ((ret = __os_getenv(
+ dbenv, "TempFolder", &tdir, sizeof(tdir_buf))) != 0)
+ return (ret);
+
+ if (tdir != NULL && tdir[0] != '\0')
+found: return (__os_strdup(dbenv, tdir, &dbenv->db_tmp_dir));
}
#ifdef macintosh
@@ -97,18 +104,18 @@ __os_tmpdir(dbenv, flags)
#ifdef DB_WIN32
/* Get the path to the temporary directory. */
{
- int ret;
- _TCHAR tpath[MAXPATHLEN + 1];
+ _TCHAR tpath[DB_MAXPATHLEN + 1];
char *path, *eos;
- if (GetTempPath(MAXPATHLEN, tpath) > 2) {
+ if (GetTempPath(DB_MAXPATHLEN, tpath) > 2) {
FROM_TSTRING(dbenv, tpath, path, ret);
if (ret != 0)
return (ret);
+
eos = path + strlen(path) - 1;
if (*eos == '\\' || *eos == '/')
*eos = '\0';
- if (__os_exists(path, &isdir) == 0 && isdir) {
+ if (__os_exists(dbenv, path, &isdir) == 0 && isdir) {
ret = __os_strdup(dbenv,
path, &dbenv->db_tmp_dir);
FREE_STRING(dbenv, path);
@@ -121,7 +128,7 @@ __os_tmpdir(dbenv, flags)
/* Step through the static list looking for a possibility. */
for (lp = list; *lp != NULL; ++lp)
- if (__os_exists(*lp, &isdir) == 0 && isdir != 0)
+ if (__os_exists(dbenv, *lp, &isdir) == 0 && isdir != 0)
return (__os_strdup(dbenv, *lp, &dbenv->db_tmp_dir));
return (0);
}
diff --git a/db/os/os_truncate.c b/db/os/os_truncate.c
index 0367fde73..42e07b7b2 100644
--- a/db/os/os_truncate.c
+++ b/db/os/os_truncate.c
@@ -1,21 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_truncate.c,v 11.7 2004/09/17 22:00:31 mjc Exp $
+ * $Id: os_truncate.c,v 12.7 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
/*
@@ -50,9 +43,10 @@ __os_truncate(dbenv, fhp, pgno, pgsize)
#endif
}
- if (ret != 0)
- __db_err(dbenv,
- "ftruncate: %lu: %s", (u_long)offset, strerror(ret));
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "ftruncate: %lu", (u_long)offset);
+ ret = __os_posix_err(ret);
+ }
return (ret);
}
diff --git a/db/os/os_uid.c b/db/os/os_uid.c
new file mode 100644
index 000000000..46eaaa28d
--- /dev/null
+++ b/db/os/os_uid.c
@@ -0,0 +1,52 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_uid.c,v 12.23 2006/09/15 19:24:50 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_unique_id --
+ * Return a unique 32-bit value.
+ *
+ * PUBLIC: void __os_unique_id __P((DB_ENV *, u_int32_t *));
+ */
+void
+__os_unique_id(dbenv, idp)
+ DB_ENV *dbenv;
+ u_int32_t *idp;
+{
+ static int first = 1;
+ pid_t pid;
+ u_int32_t id, sec, usec;
+
+ *idp = 0;
+
+ /*
+ * Our randomized value is comprised of our process ID, the current
+ * time of day and a stack address, all XOR'd together.
+ */
+ __os_id(dbenv, &pid, NULL);
+ __os_clock(dbenv, &sec, &usec);
+
+ id = (u_int32_t)pid ^ sec ^ usec ^ P_TO_UINT32(&pid);
+
+ /*
+ * We could try and find a reasonable random-number generator, but
+ * that's not all that easy to do. Seed and use srand()/rand(), if
+ * we can find them.
+ */
+ if (first == 1) {
+ srand((u_int)id);
+ first = 0;
+ }
+ id ^= (u_int)rand();
+
+ *idp = id;
+}
diff --git a/db/os/os_unlink.c b/db/os/os_unlink.c
index 228e06d39..9ebd44316 100644
--- a/db/os/os_unlink.c
+++ b/db/os/os_unlink.c
@@ -1,21 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_unlink.c,v 11.28 2004/07/06 13:55:48 bostic Exp $
+ * $Id: os_unlink.c,v 12.8 2006/08/24 14:46:18 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#include <unistd.h>
-#endif
-
#include "db_int.h"
/*
@@ -37,10 +30,9 @@ __os_region_unlink(dbenv, path)
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));
+ ret = __os_get_syserr();
+ if (__os_posix_err(ret) != ENOENT)
+ __db_syserr(dbenv, ret, "shm_unlink: %s", newname);
}
err:
if (newname != NULL)
@@ -48,7 +40,7 @@ err:
return (ret);
#else
if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
- (void)__db_overwrite(dbenv, path);
+ (void)__db_file_multi_write(dbenv, path);
return (__os_unlink(dbenv, path));
#endif
@@ -65,7 +57,7 @@ __os_unlink(dbenv, path)
DB_ENV *dbenv;
const char *path;
{
- int ret;
+ int ret, t_ret;
if (DB_GLOBAL(j_unlink) != NULL)
ret = DB_GLOBAL(j_unlink)(path);
@@ -90,8 +82,12 @@ __os_unlink(dbenv, path)
* are expecting not to be there. Reporting errors in these cases
* is annoying.
*/
- if (ret != 0 && ret != ENOENT)
- __db_err(dbenv, "unlink: %s: %s", path, strerror(ret));
+ if (ret != 0) {
+ t_ret = __os_posix_err(ret);
+ if (t_ret != ENOENT)
+ __db_syserr(dbenv, ret, "unlink: %s", path);
+ ret = t_ret;
+ }
return (ret);
}
diff --git a/db/os/os_yield.c b/db/os/os_yield.c
new file mode 100644
index 000000000..0043a7ca2
--- /dev/null
+++ b/db/os/os_yield.c
@@ -0,0 +1,48 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_yield.c,v 12.11 2006/09/06 13:33:25 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+#ifndef NO_SYSTEM_INCLUDES
+#if defined(HAVE_SCHED_YIELD)
+#include <sched.h>
+#endif
+#endif
+
+/*
+ * __os_yield --
+ * Yield the processor.
+ *
+ * PUBLIC: void __os_yield __P((DB_ENV *));
+ */
+void
+__os_yield(dbenv)
+ DB_ENV *dbenv;
+{
+ if (DB_GLOBAL(j_yield) != NULL) {
+ (void)DB_GLOBAL(j_yield)();
+ return;
+ }
+
+#if defined(HAVE_MUTEX_UI_THREADS)
+ thr_yield();
+#elif defined(HAVE_PTHREAD_YIELD) && \
+ (defined(HAVE_MUTEX_PTHREADS) || defined(HAVE_PTHREAD_API))
+ pthread_yield();
+#elif defined(HAVE_SCHED_YIELD)
+ (void)sched_yield();
+#elif defined(HAVE_YIELD)
+ yield();
+#else
+ __os_sleep(dbenv, 0, 1);
+#endif
+ COMPQUIET(dbenv, NULL);
+}
diff --git a/db/os_vxworks/os_vx_abs.c b/db/os_vxworks/os_vx_abs.c
index 34a1fe37a..03eed5715 100644
--- a/db/os_vxworks/os_vx_abs.c
+++ b/db/os_vxworks/os_vx_abs.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_vx_abs.c,v 1.9 2004/01/28 03:36:19 bostic Exp $
+ * $Id: os_vx_abs.c,v 12.3 2006/08/24 14:46:20 bostic Exp $
*/
#include "db_config.h"
diff --git a/db/os_vxworks/os_vx_config.c b/db/os_vxworks/os_vx_config.c
index b90a4365d..915f7d1e8 100644
--- a/db/os_vxworks/os_vx_config.c
+++ b/db/os_vxworks/os_vx_config.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: os_vx_config.c,v 1.6 2004/01/28 03:36:19 bostic Exp $
+ * $Id: os_vx_config.c,v 12.6 2006/08/24 14:46:20 bostic Exp $
*/
#include "db_config.h"
@@ -14,8 +14,6 @@
/*
* __os_fs_notzero --
* Return 1 if allocated filesystem blocks are not zeroed.
- *
- * PUBLIC: int __os_fs_notzero __P((void));
*/
int
__os_fs_notzero()
@@ -27,3 +25,33 @@ __os_fs_notzero()
*/
return (1);
}
+
+/*
+ * __os_support_direct_io --
+ * Return 1 if we support direct I/O.
+ */
+int
+__os_support_direct_io()
+{
+ return (0);
+}
+
+/*
+ * __os_support_db_register --
+ * Return 1 if the system supports DB_REGISTER.
+ */
+int
+__os_support_db_register()
+{
+ return (0);
+}
+
+/*
+ * __os_support_replication --
+ * Return 1 if the system supports replication.
+ */
+int
+__os_support_replication()
+{
+ return (1);
+}
diff --git a/db/os_vxworks/os_vx_map.c b/db/os_vxworks/os_vx_map.c
index 416f4cc8c..f0e42d51b 100644
--- a/db/os_vxworks/os_vx_map.c
+++ b/db/os_vxworks/os_vx_map.c
@@ -1,22 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
* This code is derived from software contributed to Sleepycat Software by
* Frederick G.M. Roeber of Netscape Communications Corp.
*
- * $Id: os_vx_map.c,v 1.23 2004/01/28 03:36:19 bostic Exp $
+ * $Id: os_vx_map.c,v 12.6 2006/08/24 14:46:20 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
/*
@@ -59,8 +54,6 @@ static int __os_segdata_release __P((DB_ENV *, REGION *, int));
/*
* __os_r_sysattach --
* Create/join a shared memory region.
- *
- * PUBLIC: int __os_r_sysattach __P((DB_ENV *, REGINFO *, REGION *));
*/
int
__os_r_sysattach(dbenv, infop, rp)
@@ -85,7 +78,7 @@ __os_r_sysattach(dbenv, infop, rp)
*/
if (!F_ISSET(infop, REGION_CREATE)) {
if (ret != 0) {
- __db_err(dbenv, "segment %s does not exist",
+ __db_errx(dbenv, "segment %s does not exist",
infop->name);
ret = EAGAIN;
}
@@ -106,12 +99,12 @@ __os_r_sysattach(dbenv, infop, rp)
goto out;
if (dbenv->shm_key == INVALID_REGION_SEGID) {
- __db_err(dbenv, "no base shared memory ID specified");
+ __db_errx(dbenv, "no base shared memory ID specified");
ret = EAGAIN;
goto out;
}
if (ret == 0 && __os_segdata_release(dbenv, rp, 1) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"key: %ld: shared memory region already exists",
dbenv->shm_key + (infop->id - 1));
ret = EAGAIN;
@@ -127,8 +120,6 @@ out:
/*
* __os_r_sysdetach --
* Detach from a shared region.
- *
- * PUBLIC: int __os_r_sysdetach __P((DB_ENV *, REGINFO *, int));
*/
int
__os_r_sysdetach(dbenv, infop, destroy)
@@ -148,9 +139,6 @@ __os_r_sysdetach(dbenv, infop, destroy)
/*
* __os_mapfile --
* Map in a shared memory file.
- *
- * PUBLIC: int __os_mapfile __P((DB_ENV *,
- * PUBLIC: char *, DB_FH *, size_t, int, void **));
*/
int
__os_mapfile(dbenv, path, fhp, len, is_rdonly, addrp)
@@ -174,8 +162,6 @@ __os_mapfile(dbenv, path, fhp, len, is_rdonly, addrp)
/*
* __os_unmapfile --
* Unmap the shared memory file.
- *
- * PUBLIC: int __os_unmapfile __P((DB_ENV *, void *, size_t));
*/
int
__os_unmapfile(dbenv, addr, len)
@@ -202,7 +188,7 @@ __os_segdata_init(dbenv)
int ret;
if (__os_segdata != NULL) {
- __db_err(dbenv, "shared memory segment already exists");
+ __db_errx(dbenv, "shared memory segment already exists");
return (EEXIST);
}
@@ -311,7 +297,7 @@ __os_segdata_new(dbenv, segidp)
int i, newsize, ret;
if (__os_segdata == NULL) {
- __db_err(dbenv, "shared memory segment not initialized");
+ __db_errx(dbenv, "shared memory segment not initialized");
return (EAGAIN);
}
@@ -344,9 +330,6 @@ __os_segdata_new(dbenv, segidp)
* Finds a segment by its name and shm_key.
*
* Assumes it is called with the SEGDATA lock taken.
- *
- * PUBLIC: __os_segdata_find_byname
- * PUBLIC: __P((DB_ENV *, const char *, REGINFO *, REGION *));
*/
static int
__os_segdata_find_byname(dbenv, name, infop, rp)
@@ -360,12 +343,12 @@ __os_segdata_find_byname(dbenv, name, infop, rp)
int i;
if (__os_segdata == NULL) {
- __db_err(dbenv, "shared memory segment not initialized");
+ __db_errx(dbenv, "shared memory segment not initialized");
return (EAGAIN);
}
if (name == NULL) {
- __db_err(dbenv, "no segment name given");
+ __db_errx(dbenv, "no segment name given");
return (EAGAIN);
}
@@ -379,7 +362,7 @@ __os_segdata_find_byname(dbenv, name, infop, rp)
else {
if (rp->segid >= __os_segdata_size ||
rp->segid == INVALID_REGION_SEGID) {
- __db_err(dbenv, "Invalid segment id given");
+ __db_errx(dbenv, "Invalid segment id given");
return (EAGAIN);
}
segid = __os_segdata[rp->segid].segid;
@@ -409,12 +392,12 @@ __os_segdata_release(dbenv, rp, is_locked)
os_segdata_t *p;
if (__os_segdata == NULL) {
- __db_err(dbenv, "shared memory segment not initialized");
+ __db_errx(dbenv, "shared memory segment not initialized");
return (EAGAIN);
}
if (rp->segid < 0 || rp->segid >= __os_segdata_size) {
- __db_err(dbenv, "segment id %ld out of range", rp->segid);
+ __db_errx(dbenv, "segment id %ld out of range", rp->segid);
return (EINVAL);
}
diff --git a/db/os_vxworks/os_vx_rpath.c b/db/os_vxworks/os_vx_rpath.c
new file mode 100644
index 000000000..7a51ef8ee
--- /dev/null
+++ b/db/os_vxworks/os_vx_rpath.c
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_vx_rpath.c,v 12.5 2006/08/24 14:46:20 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+#include "iosLib.h"
+
+/*
+ * __db_rpath --
+ * Return the last path separator in the path or NULL if none found.
+ */
+char *
+__db_rpath(path)
+ const char *path;
+{
+ const char *s, *last;
+ DEV_HDR *dummy;
+ char *ptail;
+
+ /*
+ * VxWorks devices can be rooted at any name. We want to
+ * skip over the device name and not take into account any
+ * PATH_SEPARATOR characters that might be in that name.
+ *
+ * XXX [#2393]
+ * VxWorks supports having a filename directly follow a device
+ * name with no separator. I.e. to access a file 'xxx' in
+ * the top level directory of a device mounted at "mydrive"
+ * you could say "mydrivexxx" or "mydrive/xxx" or "mydrive\xxx".
+ * We do not support the first usage here.
+ * XXX
+ */
+ if ((dummy = iosDevFind((char *)path, &ptail)) == NULL)
+ s = path;
+ else
+ s = ptail;
+
+ last = NULL;
+ if (PATH_SEPARATOR[1] != '\0') {
+ for (; s[0] != '\0'; ++s)
+ if (strchr(PATH_SEPARATOR, s[0]) != NULL)
+ last = s;
+ } else
+ for (; s[0] != '\0'; ++s)
+ if (s[0] == PATH_SEPARATOR[0])
+ last = s;
+ return ((char *)last);
+}
diff --git a/db/os_windows/os_abs.c b/db/os_windows/os_abs.c
new file mode 100644
index 000000000..e4ace7bfb
--- /dev/null
+++ b/db/os_windows/os_abs.c
@@ -0,0 +1,31 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_abs.c,v 12.3 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_abspath --
+ * Return if a path is an absolute path.
+ */
+int
+__os_abspath(path)
+ const char *path;
+{
+ /*
+ * !!!
+ * Check for drive specifications, e.g., "C:". In addition, the path
+ * separator used by the win32 DB (PATH_SEPARATOR) is \; look for both
+ * / and \ since these are user-input paths.
+ */
+ if (isalpha(path[0]) && path[1] == ':')
+ path += 2;
+ return (path[0] == '/' || path[0] == '\\');
+}
diff --git a/db/os_windows/os_clock.c b/db/os_windows/os_clock.c
new file mode 100644
index 000000000..2a0203237
--- /dev/null
+++ b/db/os_windows/os_clock.c
@@ -0,0 +1,30 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_clock.c,v 12.6 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_clock --
+ * Return the current time-of-day clock in seconds and microseconds.
+ */
+void
+__os_clock(dbenv, secsp, usecsp)
+ DB_ENV *dbenv;
+ u_int32_t *secsp, *usecsp; /* Seconds and microseconds. */
+{
+ struct _timeb now;
+
+ _ftime(&now);
+ if (secsp != NULL)
+ *secsp = (u_int32_t)now.time;
+ if (usecsp != NULL)
+ *usecsp = now.millitm * 1000;
+}
diff --git a/db/os_windows/os_config.c b/db/os_windows/os_config.c
new file mode 100644
index 000000000..51fc1b3ad
--- /dev/null
+++ b/db/os_windows/os_config.c
@@ -0,0 +1,118 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_config.c,v 12.6 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#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.
+ */
+int
+__os_fs_notzero()
+{
+ static int __os_notzero = -1;
+ OSVERSIONINFO osvi;
+
+ /*
+ * Windows/NT zero-fills pages that were never explicitly written to
+ * the file. Note however that this is *NOT* documented. In fact, the
+ * Win32 documentation makes it clear that there are no guarantees that
+ * uninitialized bytes will be zeroed:
+ *
+ * If the file is extended, the contents of the file between the old
+ * EOF position and the new position are not defined.
+ *
+ * Experiments confirm that NT/2K/XP all zero fill for both NTFS and
+ * FAT32. Cygwin also relies on this behavior. This is the relevant
+ * comment from Cygwin:
+ *
+ * Oops, this is the bug case - Win95 uses whatever is on the disk
+ * instead of some known (safe) value, so we must seek back and fill
+ * in the gap with zeros. - DJ
+ * Note: this bug doesn't happen on NT4, even though the
+ * documentation for WriteFile() says that it *may* happen on any OS.
+ *
+ * We're making a bet, here, but we made it a long time ago and haven't
+ * yet seen any evidence that it was wrong.
+ *
+ * Windows 95/98 and On-Time give random garbage, and that breaks
+ * Berkeley DB.
+ *
+ * The value of __os_notzero is computed only once, and cached to
+ * avoid the overhead of repeated calls to GetVersion().
+ */
+ if (__os_notzero == -1) {
+ if (__os_is_winnt()) {
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&osvi);
+ if (_tcscmp(osvi.szCSDVersion, _T("RTTarget-32")) == 0)
+ __os_notzero = 1; /* On-Time */
+ else
+ __os_notzero = 0; /* Windows/NT */
+ } else
+ __os_notzero = 1; /* Not Windows/NT */
+ }
+ return (__os_notzero);
+}
+
+/*
+ * __os_support_direct_io --
+ * Check to see if we support direct I/O.
+ */
+int
+__os_support_direct_io()
+{
+ return (1);
+}
+
+/*
+ * __os_support_db_register --
+ * Return 1 if the system supports DB_REGISTER.
+ */
+int
+__os_support_db_register()
+{
+ return (__os_is_winnt());
+}
+
+/*
+ * __os_support_replication --
+ * Return 1 if the system supports replication.
+ */
+int
+__os_support_replication()
+{
+ return (__os_is_winnt());
+}
diff --git a/db/os_windows/os_dir.c b/db/os_windows/os_dir.c
new file mode 100644
index 000000000..4e47fa771
--- /dev/null
+++ b/db/os_windows/os_dir.c
@@ -0,0 +1,104 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_dir.c,v 12.8 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_dirlist --
+ * Return a list of the files in a directory.
+ */
+int
+__os_dirlist(dbenv, dir, namesp, cntp)
+ DB_ENV *dbenv;
+ const char *dir;
+ char ***namesp;
+ int *cntp;
+{
+ HANDLE dirhandle;
+ WIN32_FIND_DATA fdata;
+ int arraysz, cnt, ret;
+ char **names, *onename;
+ _TCHAR tfilespec[DB_MAXPATHLEN + 1];
+ _TCHAR *tdir;
+
+ TO_TSTRING(dbenv, dir, tdir, ret);
+ if (ret != 0)
+ return (ret);
+
+ (void)_sntprintf(tfilespec, DB_MAXPATHLEN,
+ _T("%s%hc*"), tdir, PATH_SEPARATOR[0]);
+ if ((dirhandle =
+ FindFirstFile(tfilespec, &fdata)) == INVALID_HANDLE_VALUE)
+ return (__os_posix_err(__os_get_syserr()));
+
+ names = NULL;
+ arraysz = cnt = ret = 0;
+ for (;;) {
+ if ((fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
+ if (cnt >= arraysz) {
+ arraysz += 100;
+ if ((ret = __os_realloc(dbenv,
+ arraysz * sizeof(names[0]), &names)) != 0)
+ goto err;
+ }
+ /*
+ * FROM_TSTRING doesn't necessarily allocate new
+ * memory, so we must do that explicitly.
+ * Unfortunately, when compiled with UNICODE, we'll
+ * copy twice.
+ */
+ FROM_TSTRING(dbenv, fdata.cFileName, onename, ret);
+ if (ret != 0)
+ goto err;
+ ret = __os_strdup(dbenv, onename, &names[cnt]);
+ FREE_STRING(dbenv, onename);
+ if (ret != 0)
+ goto err;
+ cnt++;
+ }
+ if (!FindNextFile(dirhandle, &fdata)) {
+ if (GetLastError() == ERROR_NO_MORE_FILES)
+ break;
+ else {
+ ret = __os_posix_err(__os_get_syserr());
+ goto err;
+ }
+ }
+ }
+
+err: if (!FindClose(dirhandle) && ret == 0)
+ ret = __os_posix_err(__os_get_syserr());
+
+ if (ret == 0) {
+ *namesp = names;
+ *cntp = cnt;
+ } else if (names != NULL)
+ __os_dirfree(dbenv, names, cnt);
+
+ FREE_STRING(dbenv, tdir);
+
+ return (ret);
+}
+
+/*
+ * __os_dirfree --
+ * Free the list of files.
+ */
+void
+__os_dirfree(dbenv, names, cnt)
+ DB_ENV *dbenv;
+ char **names;
+ int cnt;
+{
+ while (cnt > 0)
+ __os_free(dbenv, names[--cnt]);
+ __os_free(dbenv, names);
+}
diff --git a/db/os_windows/os_errno.c b/db/os_windows/os_errno.c
new file mode 100644
index 000000000..14bdab6c5
--- /dev/null
+++ b/db/os_windows/os_errno.c
@@ -0,0 +1,405 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_errno.c,v 12.10 2006/09/19 14:14:13 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_get_errno_ret_zero --
+ * Return the last system error, including an error of zero.
+ */
+int
+__os_get_errno_ret_zero()
+{
+ /* This routine must be able to return the same value repeatedly. */
+ return (errno);
+}
+
+/*
+ * We've seen cases where system calls failed but errno was never set. For
+ * that reason, __os_get_errno() and __os_get_syserr set errno to EAGAIN if
+ * it's not already set, to work around the problem. For obvious reasons,
+ * we can only call this function if we know an error has occurred, that
+ * is, we can't test the return for a non-zero value after the get call.
+ *
+ * __os_get_errno --
+ * Return the last ANSI C "errno" value or EAGAIN if the last error
+ * is zero.
+ */
+int
+__os_get_errno()
+{
+ /* This routine must be able to return the same value repeatedly. */
+ if (errno == 0)
+ __os_set_errno(EAGAIN);
+ return (errno);
+}
+
+/*
+ * __os_get_neterr --
+ * Return the last networking error or EAGAIN if the last error is zero.
+ *
+ * PUBLIC: int __os_get_neterr __P((void));
+ */
+int
+__os_get_neterr()
+{
+ int err;
+
+ /* This routine must be able to return the same value repeatedly. */
+ err = WSAGetLastError();
+ if (err == 0)
+ WSASetLastError(err = ERROR_RETRY);
+ return (err);
+}
+
+/*
+ * __os_get_syserr --
+ * Return the last system error or EAGAIN if the last error is zero.
+ */
+int
+__os_get_syserr()
+{
+ int err;
+
+ /* This routine must be able to return the same value repeatedly. */
+ err = GetLastError();
+ if (err == 0)
+ SetLastError(err = ERROR_RETRY);
+ return (err);
+}
+
+/*
+ * __os_set_errno --
+ * Set the value of errno.
+ */
+void
+__os_set_errno(evalue)
+ int 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);
+}
+
+/*
+ * __os_strerror --
+ * Return a string associated with the system error.
+ */
+char *
+__os_strerror(error, buf, len)
+ int error;
+ char *buf;
+ size_t len;
+{
+ DB_ASSERT(NULL, error != 0);
+
+ /*
+ * Explicitly call FormatMessageA, since we want to receive a char
+ * string back, not a tchar string.
+ */
+ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM,
+ 0, (DWORD)error, 0, buf, (DWORD)(len - 1), NULL);
+ buf[len - 1] = '\0';
+
+ return (buf);
+}
+
+/*
+ * __os_posix_err --
+ * Convert a system error to a POSIX error.
+ */
+int
+__os_posix_err(error)
+ int error;
+{
+ /* Handle calls on successful returns. */
+ if (error == 0)
+ return (0);
+
+ /*
+ * Translate the Windows error codes we care about.
+ */
+ switch (error) {
+ case ERROR_FILE_NOT_FOUND:
+ case ERROR_INVALID_DRIVE:
+ case ERROR_PATH_NOT_FOUND:
+ return (ENOENT);
+
+ case ERROR_NO_MORE_FILES:
+ case ERROR_TOO_MANY_OPEN_FILES:
+ return (EMFILE);
+
+ case ERROR_ACCESS_DENIED:
+ return (EPERM);
+
+ case ERROR_INVALID_HANDLE:
+ return (EBADF);
+
+ case ERROR_NOT_ENOUGH_MEMORY:
+ return (ENOMEM);
+
+ case ERROR_DISK_FULL:
+ return (ENOSPC);
+
+ case ERROR_ARENA_TRASHED:
+ case ERROR_BAD_COMMAND:
+ case ERROR_BAD_ENVIRONMENT:
+ case ERROR_BAD_FORMAT:
+ case ERROR_GEN_FAILURE:
+ case ERROR_INVALID_ACCESS:
+ case ERROR_INVALID_BLOCK:
+ case ERROR_INVALID_DATA:
+ case ERROR_READ_FAULT:
+ case ERROR_WRITE_FAULT:
+ return (EFAULT);
+
+ case ERROR_ALREADY_EXISTS:
+ case ERROR_FILE_EXISTS:
+ return (EEXIST);
+
+ case ERROR_NOT_SAME_DEVICE:
+ return (EXDEV);
+
+ case ERROR_WRITE_PROTECT:
+ return (EACCES);
+
+ case ERROR_LOCK_FAILED:
+ case ERROR_LOCK_VIOLATION:
+ case ERROR_NOT_READY:
+ case ERROR_SHARING_VIOLATION:
+ return (EBUSY);
+
+ case ERROR_RETRY:
+ return (EINTR);
+ }
+
+ /*
+ * Translate the Windows socket error codes.
+ */
+ switch (error) {
+ case WSAEADDRINUSE:
+#ifdef EADDRINUSE
+ return (EADDRINUSE);
+#else
+ break;
+#endif
+ case WSAEADDRNOTAVAIL:
+#ifdef EADDRNOTAVAIL
+ return (EADDRNOTAVAIL);
+#else
+ break;
+#endif
+ case WSAEAFNOSUPPORT:
+#ifdef EAFNOSUPPORT
+ return (EAFNOSUPPORT);
+#else
+ break;
+#endif
+ case WSAEALREADY:
+#ifdef EALREADY
+ return (EALREADY);
+#else
+ break;
+#endif
+ case WSAEBADF:
+ return (EBADF);
+ case WSAECONNABORTED:
+#ifdef ECONNABORTED
+ return (ECONNABORTED);
+#else
+ break;
+#endif
+ case WSAECONNREFUSED:
+#ifdef ECONNREFUSED
+ return (ECONNREFUSED);
+#else
+ break;
+#endif
+ case WSAECONNRESET:
+#ifdef ECONNRESET
+ return (ECONNRESET);
+#else
+ break;
+#endif
+ case WSAEDESTADDRREQ:
+#ifdef EDESTADDRREQ
+ return (EDESTADDRREQ);
+#else
+ break;
+#endif
+ case WSAEFAULT:
+ return (EFAULT);
+ case WSAEHOSTDOWN:
+#ifdef EHOSTDOWN
+ return (EHOSTDOWN);
+#else
+ break;
+#endif
+ case WSAEHOSTUNREACH:
+#ifdef EHOSTUNREACH
+ return (EHOSTUNREACH);
+#else
+ break;
+#endif
+ case WSAEINPROGRESS:
+#ifdef EINPROGRESS
+ return (EINPROGRESS);
+#else
+ break;
+#endif
+ case WSAEINTR:
+ return (EINTR);
+ case WSAEINVAL:
+ return (EINVAL);
+ case WSAEISCONN:
+#ifdef EISCONN
+ return (EISCONN);
+#else
+ break;
+#endif
+ case WSAELOOP:
+#ifdef ELOOP
+ return (ELOOP);
+#else
+ break;
+#endif
+ case WSAEMFILE:
+ return (EMFILE);
+ case WSAEMSGSIZE:
+#ifdef EMSGSIZE
+ return (EMSGSIZE);
+#else
+ break;
+#endif
+ case WSAENAMETOOLONG:
+ return (ENAMETOOLONG);
+ case WSAENETDOWN:
+#ifdef ENETDOWN
+ return (ENETDOWN);
+#else
+ break;
+#endif
+ case WSAENETRESET:
+#ifdef ENETRESET
+ return (ENETRESET);
+#else
+ break;
+#endif
+ case WSAENETUNREACH:
+#ifdef ENETUNREACH
+ return (ENETUNREACH);
+#else
+ break;
+#endif
+ case WSAENOBUFS:
+#ifdef ENOBUFS
+ return (ENOBUFS);
+#else
+ break;
+#endif
+ case WSAENOPROTOOPT:
+#ifdef ENOPROTOOPT
+ return (ENOPROTOOPT);
+#else
+ break;
+#endif
+ case WSAENOTCONN:
+#ifdef ENOTCONN
+ return (ENOTCONN);
+#else
+ break;
+#endif
+ case WSANOTINITIALISED:
+ return (EAGAIN);
+ case WSAENOTSOCK:
+#ifdef ENOTSOCK
+ return (ENOTSOCK);
+#else
+ break;
+#endif
+ case WSAEOPNOTSUPP:
+ return (DB_OPNOTSUP);
+ case WSAEPFNOSUPPORT:
+#ifdef EPFNOSUPPORT
+ return (EPFNOSUPPORT);
+#else
+ break;
+#endif
+ case WSAEPROTONOSUPPORT:
+#ifdef EPROTONOSUPPORT
+ return (EPROTONOSUPPORT);
+#else
+ break;
+#endif
+ case WSAEPROTOTYPE:
+#ifdef EPROTOTYPE
+ return (EPROTOTYPE);
+#else
+ break;
+#endif
+ case WSAESHUTDOWN:
+#ifdef ESHUTDOWN
+ return (ESHUTDOWN);
+#else
+ break;
+#endif
+ case WSAESOCKTNOSUPPORT:
+#ifdef ESOCKTNOSUPPORT
+ return (ESOCKTNOSUPPORT);
+#else
+ break;
+#endif
+ case WSAETIMEDOUT:
+#ifdef ETIMEDOUT
+ return (ETIMEDOUT);
+#else
+ break;
+#endif
+ case WSAETOOMANYREFS:
+#ifdef ETOOMANYREFS
+ return (ETOOMANYREFS);
+#else
+ break;
+#endif
+ case WSAEWOULDBLOCK:
+#ifdef EWOULDBLOCK
+ return (EWOULDBLOCK);
+#else
+ return (EAGAIN);
+#endif
+ case WSAHOST_NOT_FOUND:
+#ifdef EHOSTUNREACH
+ return (EHOSTUNREACH);
+#else
+ break;
+#endif
+ case WSASYSNOTREADY:
+ return (EAGAIN);
+ case WSATRY_AGAIN:
+ return (EAGAIN);
+ case WSAVERNOTSUPPORTED:
+ return (DB_OPNOTSUP);
+ case WSAEACCES:
+ return (EACCES);
+ }
+
+ /*
+ * EFAULT is the default if we don't have a translation.
+ */
+ return (EFAULT);
+}
diff --git a/db/os_windows/os_fid.c b/db/os_windows/os_fid.c
new file mode 100644
index 000000000..9fa2a57c9
--- /dev/null
+++ b/db/os_windows/os_fid.c
@@ -0,0 +1,147 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_fid.c,v 12.9 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+#define SERIAL_INIT 0
+static u_int32_t fid_serial = SERIAL_INIT;
+
+/*
+ * __os_fileid --
+ * Return a unique identifier for a file.
+ */
+int
+__os_fileid(dbenv, fname, unique_okay, fidp)
+ DB_ENV *dbenv;
+ const char *fname;
+ int unique_okay;
+ u_int8_t *fidp;
+{
+ pid_t pid;
+ size_t i;
+ u_int32_t tmp;
+ u_int8_t *p;
+ int ret;
+
+ /*
+ * The documentation for GetFileInformationByHandle() states that the
+ * inode-type numbers are not constant between processes. Actually,
+ * they are, they're the NTFS MFT indexes. So, this works on NTFS,
+ * but perhaps not on other platforms, and perhaps not over a network.
+ * Can't think of a better solution right now.
+ */
+ DB_FH *fhp;
+ BY_HANDLE_FILE_INFORMATION fi;
+ BOOL retval = FALSE;
+
+ DB_ASSERT(dbenv, fname != NULL);
+
+ /* Clear the buffer. */
+ memset(fidp, 0, DB_FILE_ID_LEN);
+
+ /*
+ * Initialize/increment the serial number we use to help avoid
+ * fileid collisions. Note that we don't bother with locking;
+ * it's unpleasant to do from down in here, and if we race on
+ * this no real harm will be done, since the finished fileid
+ * has so many other components.
+ *
+ * We use the bottom 32-bits of the process ID, hoping they
+ * are more random than the top 32-bits (should we be on a
+ * machine with 64-bit process IDs).
+ *
+ * We increment by 100000 on each call as a simple way of
+ * randomizing; simply incrementing seems potentially less useful
+ * if pids are also simply incremented, since this is process-local
+ * and we may be one of a set of processes starting up. 100000
+ * pushes us out of pid space on most platforms, and has few
+ * interesting properties in base 2.
+ */
+ if (fid_serial == SERIAL_INIT) {
+ __os_id(dbenv, &pid, NULL);
+ fid_serial = pid;
+ } else
+ fid_serial += 100000;
+
+ /*
+ * 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, &fhp)) != 0)
+ return (ret);
+
+ /* File open, get its info */
+ if ((retval = GetFileInformationByHandle(fhp->handle, &fi)) == FALSE)
+ ret = __os_get_syserr();
+ (void)__os_closehandle(dbenv, fhp);
+
+ if (retval == FALSE)
+ return (__os_posix_err(ret));
+
+ /*
+ * We want the three 32-bit words which tell us the volume ID and
+ * the file ID. We make a crude attempt to copy the bytes over to
+ * the callers buffer.
+ *
+ * We don't worry about byte sexing or the actual variable sizes.
+ *
+ * When this routine is called from the DB access methods, it's only
+ * called once -- whatever ID is generated when a database is created
+ * is stored in the database file's metadata, and that is what is
+ * saved in the mpool region's information to uniquely identify the
+ * file.
+ *
+ * When called from the mpool layer this routine will be called each
+ * time a new thread of control wants to share the file, which makes
+ * things tougher. As far as byte sexing goes, since the mpool region
+ * lives on a single host, there's no issue of that -- the entire
+ * region is byte sex dependent. As far as variable sizes go, we make
+ * the simplifying assumption that 32-bit and 64-bit processes will
+ * get the same 32-bit values if we truncate any returned 64-bit value
+ * to a 32-bit value.
+ */
+ tmp = (u_int32_t)fi.nFileIndexLow;
+ for (p = (u_int8_t *)&tmp, i = sizeof(u_int32_t); i > 0; --i)
+ *fidp++ = *p++;
+ 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
+ * within this process. A millisecond counter
+ * overflows 32 bits in about 49 days. So we use 8
+ * bytes, and don't bother with the volume ID, which
+ * is not very useful for our purposes.
+ */
+ SYSTEMTIME st;
+
+ GetSystemTime(&st);
+ tmp = (st.wYear - 1900) * 12 + (st.wMonth - 1);
+ for (p = (u_int8_t *)&tmp, i = sizeof(u_int32_t); i > 0; --i)
+ *fidp++ = *p++;
+ tmp = ((((st.wDay - 1) * 24 + st.wHour) * 60 +
+ st.wMinute) * 60 + st.wSecond) * 1000 +
+ st.wMilliseconds;
+ for (p = (u_int8_t *)&tmp, i = sizeof(u_int32_t); i > 0; --i)
+ *fidp++ = *p++;
+ for (p = (u_int8_t *)&fid_serial, i = sizeof(u_int32_t);
+ i > 0; --i)
+ *fidp++ = *p++;
+ } else {
+ tmp = (u_int32_t)fi.dwVolumeSerialNumber;
+ for (p = (u_int8_t *)&tmp, i = sizeof(u_int32_t); i > 0; --i)
+ *fidp++ = *p++;
+ }
+
+ return (0);
+}
diff --git a/db/os_windows/os_flock.c b/db/os_windows/os_flock.c
new file mode 100644
index 000000000..c08193891
--- /dev/null
+++ b/db/os_windows/os_flock.c
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_flock.c,v 1.12 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_fdlock --
+ * Acquire/release a lock on a byte in a file.
+ */
+int
+__os_fdlock(dbenv, fhp, offset, acquire, nowait)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ int acquire, nowait;
+ off_t offset;
+{
+ int ret;
+ DWORD low, high;
+ OVERLAPPED over;
+
+ DB_ASSERT(dbenv,
+ F_ISSET(fhp, DB_FH_OPENED) && fhp->handle != INVALID_HANDLE_VALUE);
+
+ /*
+ * Windows file locking interferes with read/write operations, so we
+ * map the ranges to an area past the end of the file.
+ */
+ DB_ASSERT(dbenv, offset < (u_int64_t)INT64_MAX);
+ offset = UINT64_MAX - offset;
+ low = (DWORD)offset;
+ high = (DWORD)(offset >> 32);
+
+ if (acquire) {
+ if (nowait)
+ RETRY_CHK_EINTR_ONLY(
+ !LockFile(fhp->handle, low, high, 1, 0), ret);
+ else if (__os_is_winnt()) {
+ memset(&over, 0, sizeof(over));
+ over.Offset = low;
+ over.OffsetHigh = high;
+ RETRY_CHK_EINTR_ONLY(
+ !LockFileEx(fhp->handle, LOCKFILE_EXCLUSIVE_LOCK,
+ 0, 1, 0, &over),
+ ret);
+ } else {
+ /* Windows 9x/ME doesn't support a blocking call. */
+ for (;;) {
+ RETRY_CHK_EINTR_ONLY(
+ !LockFile(fhp->handle, low, high, 1, 0),
+ ret);
+ if (__os_posix_err(ret) != EAGAIN)
+ break;
+ __os_sleep(dbenv, 1, 0);
+ }
+ }
+ } else
+ RETRY_CHK_EINTR_ONLY(
+ !UnlockFile(fhp->handle, low, high, 1, 0), ret);
+
+ return (__os_posix_err(ret));
+}
diff --git a/db/os_windows/os_fsync.c b/db/os_windows/os_fsync.c
new file mode 100644
index 000000000..050d68e55
--- /dev/null
+++ b/db/os_windows/os_fsync.c
@@ -0,0 +1,38 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_fsync.c,v 12.7 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_fsync --
+ * Flush a file descriptor.
+ */
+int
+__os_fsync(dbenv, fhp)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+{
+ int ret;
+
+ /*
+ * Do nothing if the file descriptor has been marked as not requiring
+ * any sync to disk.
+ */
+ if (F_ISSET(fhp, DB_FH_NOSYNC))
+ return (0);
+
+ RETRY_CHK((!FlushFileBuffers(fhp->handle)), ret);
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "FlushFileBuffers");
+ ret = __os_posix_err(ret);
+ }
+ return (ret);
+}
diff --git a/db/os_windows/os_getenv.c b/db/os_windows/os_getenv.c
new file mode 100644
index 000000000..a42dbd677
--- /dev/null
+++ b/db/os_windows/os_getenv.c
@@ -0,0 +1,97 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_getenv.c,v 1.4 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_getenv --
+ * Retrieve an environment variable.
+ */
+int
+__os_getenv(dbenv, name, bpp, buflen)
+ DB_ENV *dbenv;
+ const char *name;
+ char **bpp;
+ size_t buflen;
+{
+ _TCHAR *tname, tbuf[1024];
+ int ret;
+ char *p;
+
+ /*
+ * If there's a value and the buffer is large enough:
+ * copy value into the pointer, return 0
+ * If there's a value and the buffer is too short:
+ * set pointer to NULL, return EINVAL
+ * If there's no value:
+ * set pointer to NULL, return 0
+ */
+ if ((p = getenv(name)) != NULL) {
+ if (strlen(p) < buflen) {
+ (void)strcpy(*bpp, p);
+ return (0);
+ }
+ goto small_buf;
+ }
+
+ TO_TSTRING(dbenv, name, tname, ret);
+ if (ret != 0)
+ return (ret);
+ /*
+ * The declared size of the tbuf buffer limits the maximum environment
+ * variable size in Berkeley DB on Windows. If that's too small, or if
+ * we need to get rid of large allocations on the BDB stack, we should
+ * malloc the tbuf memory.
+ */
+ ret = GetEnvironmentVariable(tname, tbuf, sizeof(tbuf));
+ FREE_STRING(dbenv, tname);
+
+ /*
+ * If GetEnvironmentVariable succeeds, the return value is the number
+ * of characters stored in the buffer pointed to by lpBuffer, not
+ * including the terminating null character. If the buffer is not
+ * large enough to hold the data, the return value is the buffer size,
+ * in characters, required to hold the string and its terminating null
+ * character. If GetEnvironmentVariable fails, the return value is
+ * zero. If the specified environment variable was not found in the
+ * environment block, GetLastError returns ERROR_ENVVAR_NOT_FOUND.
+ */
+ if (ret == 0) {
+ if ((ret = __os_get_syserr()) == ERROR_ENVVAR_NOT_FOUND) {
+ *bpp = NULL;
+ return (0);
+ }
+ __db_syserr(dbenv, ret, "GetEnvironmentVariable");
+ return (__os_posix_err(ret));
+ }
+ if (ret > (int)sizeof(tbuf))
+ goto small_buf;
+
+ FROM_TSTRING(dbenv, tbuf, p, ret);
+ if (ret != 0)
+ return (ret);
+ if (strlen(p) < buflen)
+ (void)strcpy(*bpp, p);
+ else
+ *bpp = NULL;
+ FREE_STRING(dbenv, p);
+ if (*bpp == NULL)
+ goto small_buf;
+
+ return (0);
+
+small_buf:
+ *bpp = NULL;
+ __db_errx(dbenv,
+ "%s: buffer too small to hold environment variable %s",
+ name, p);
+ return (EINVAL);
+}
diff --git a/db/os_windows/os_handle.c b/db/os_windows/os_handle.c
new file mode 100644
index 000000000..c03a5ecd8
--- /dev/null
+++ b/db/os_windows/os_handle.c
@@ -0,0 +1,119 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_handle.c,v 12.10 2006/09/05 15:02:31 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_openhandle --
+ * Open a file, using POSIX 1003.1 open flags.
+ */
+int
+__os_openhandle(dbenv, name, flags, mode, fhpp)
+ DB_ENV *dbenv;
+ const char *name;
+ int flags, mode;
+ DB_FH **fhpp;
+{
+ DB_FH *fhp;
+ int ret, nrepeat, retries;
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), fhpp)) != 0)
+ return (ret);
+ fhp = *fhpp;
+
+ retries = 0;
+ for (nrepeat = 1; nrepeat < 4; ++nrepeat) {
+ ret = 0;
+ fhp->fd = _open(name, flags, mode);
+
+ if (fhp->fd != -1) {
+ F_SET(fhp, DB_FH_OPENED);
+ break;
+ }
+
+ switch (ret = __os_posix_err(__os_get_syserr())) {
+ 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.
+ */
+ __os_sleep(dbenv, nrepeat * 2, 0);
+ break;
+ case EAGAIN:
+ case EBUSY:
+ case EINTR:
+ /*
+ * If an EAGAIN, EBUSY or EINTR, retry immediately for
+ * DB_RETRY times.
+ */
+ if (++retries < DB_RETRY)
+ --nrepeat;
+ break;
+ }
+ }
+
+ if (ret != 0) {
+ (void)__os_closehandle(dbenv, fhp);
+ *fhpp = NULL;
+ }
+
+ return (ret);
+}
+
+/*
+ * __os_closehandle --
+ * Close a file.
+ */
+int
+__os_closehandle(dbenv, fhp)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+{
+ int ret, t_ret;
+
+ ret = 0;
+
+ /*
+ * If we have a valid handle, close it and unlink any temporary
+ * file.
+ */
+ if (F_ISSET(fhp, DB_FH_OPENED)) {
+ if (fhp->handle != INVALID_HANDLE_VALUE)
+ RETRY_CHK((!CloseHandle(fhp->handle)), ret);
+ else
+ RETRY_CHK((_close(fhp->fd)), ret);
+
+ if (fhp->trunc_handle != INVALID_HANDLE_VALUE) {
+ RETRY_CHK((!CloseHandle(fhp->trunc_handle)), t_ret);
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "CloseHandle");
+ ret = __os_posix_err(ret);
+ }
+
+ /* Unlink the file if we haven't already done so. */
+ if (F_ISSET(fhp, DB_FH_UNLINK)) {
+ (void)__os_unlink(dbenv, fhp->name);
+ __os_free(dbenv, fhp->name);
+ }
+ }
+
+ __os_free(dbenv, fhp);
+
+ return (ret);
+}
diff --git a/db/os_windows/os_map.c b/db/os_windows/os_map.c
new file mode 100644
index 000000000..e254ea429
--- /dev/null
+++ b/db/os_windows/os_map.c
@@ -0,0 +1,309 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_map.c,v 12.8 2006/08/24 14:46:21 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+static int __os_map
+ __P((DB_ENV *, char *, REGINFO *, DB_FH *, size_t, int, int, int, void **));
+static int __os_unique_name __P((_TCHAR *, HANDLE, _TCHAR *, size_t));
+
+/*
+ * __os_r_sysattach --
+ * Create/join a shared memory region.
+ */
+int
+__os_r_sysattach(dbenv, infop, rp)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+ REGION *rp;
+{
+ DB_FH *fhp;
+ int is_system, ret;
+
+ /*
+ * Try to open/create the file. We DO NOT need to ensure that multiple
+ * threads/processes attempting to simultaneously create the region are
+ * properly ordered, our caller has already taken care of that.
+ */
+ if ((ret = __os_open(dbenv, infop->name,
+ F_ISSET(infop, REGION_CREATE_OK) ? DB_OSO_CREATE: 0,
+ dbenv->db_mode, &fhp)) != 0) {
+ __db_err(dbenv, ret, "%s", infop->name);
+ return (ret);
+ }
+
+ /*
+ * On Windows/9X, files that are opened by multiple processes do not
+ * share data correctly. For this reason, the DB_SYSTEM_MEM flag is
+ * implied for any application that does not specify the DB_PRIVATE
+ * flag.
+ */
+ is_system = F_ISSET(dbenv, DB_ENV_SYSTEM_MEM) ||
+ (!F_ISSET(dbenv, DB_ENV_PRIVATE) && __os_is_winnt() == 0);
+
+ /*
+ * Map the file in. If we're creating an in-system-memory region,
+ * specify a segment ID (which is never used again) so that the
+ * calling code writes out the REGENV_REF structure to the primary
+ * environment file.
+ */
+ 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(dbenv, fhp);
+
+ return (ret);
+}
+
+/*
+ * __os_r_sysdetach --
+ * Detach from a shared memory region.
+ */
+int
+__os_r_sysdetach(dbenv, infop, destroy)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+ int destroy;
+{
+ int ret, t_ret;
+
+ if (infop->wnt_handle != NULL) {
+ (void)CloseHandle(infop->wnt_handle);
+ infop->wnt_handle = NULL;
+ }
+
+ ret = !UnmapViewOfFile(infop->addr) ? __os_get_syserr() : 0;
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "UnmapViewOfFile");
+ ret = __os_posix_err(ret);
+ }
+
+ if (!F_ISSET(dbenv, DB_ENV_SYSTEM_MEM) && destroy) {
+ if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
+ (void)__db_file_multi_write(dbenv, infop->name);
+ if ((t_ret = __os_unlink(dbenv, infop->name)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+ return (ret);
+}
+
+/*
+ * __os_mapfile --
+ * Map in a shared memory file.
+ */
+int
+__os_mapfile(dbenv, path, fhp, len, is_rdonly, addr)
+ DB_ENV *dbenv;
+ char *path;
+ DB_FH *fhp;
+ int is_rdonly;
+ size_t len;
+ void **addr;
+{
+ return (__os_map(dbenv, path, NULL, fhp, len, 0, 0, is_rdonly, addr));
+}
+
+/*
+ * __os_unmapfile --
+ * Unmap the shared memory file.
+ */
+int
+__os_unmapfile(dbenv, addr, len)
+ DB_ENV *dbenv;
+ void *addr;
+ size_t len;
+{
+ return (!UnmapViewOfFile(addr) ? __os_posix_err(__os_get_syserr()) : 0);
+}
+
+/*
+ * __os_unique_name --
+ * Create a unique identifying name from a pathname (may be absolute or
+ * relative) and/or a file descriptor.
+ *
+ * The name returned must be unique (different files map to different
+ * names), and repeatable (same files, map to same names). It's not
+ * so easy to do by name. Should handle not only:
+ *
+ * foo.bar == ./foo.bar == c:/whatever_path/foo.bar
+ *
+ * but also understand that:
+ *
+ * foo.bar == Foo.Bar (FAT file system)
+ * foo.bar != Foo.Bar (NTFS)
+ *
+ * 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, hfile, result_path, result_path_len)
+ _TCHAR *orig_path, *result_path;
+ HANDLE hfile;
+ size_t result_path_len;
+{
+ BY_HANDLE_FILE_INFORMATION fileinfo;
+ _TCHAR *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 = _tcsrchr(orig_path, '/');
+ p = _tcsrchr(orig_path, '\\');
+ if (basename == NULL || (p != NULL && p > basename))
+ basename = p;
+ if (basename == NULL)
+ basename = _tcsrchr(orig_path, ':');
+
+ if (basename == NULL)
+ basename = orig_path;
+ else
+ basename++;
+
+ if (!GetFileInformationByHandle(hfile, &fileinfo))
+ return (__os_posix_err(__os_get_syserr()));
+
+ (void)_sntprintf(result_path, result_path_len,
+ _T("__db_shmem.%8.8lx.%8.8lx.%8.8lx.%8.8lx.%8.8lx.%s"),
+ fileinfo.dwVolumeSerialNumber,
+ fileinfo.nFileIndexHigh,
+ fileinfo.nFileIndexLow,
+ fileinfo.ftCreationTime.dwHighDateTime,
+ fileinfo.ftCreationTime.dwHighDateTime,
+ basename);
+
+ return (0);
+}
+
+/*
+ * __os_map --
+ * The mmap(2) function for Windows.
+ */
+static int
+__os_map(dbenv, path, infop, fhp, len, is_region, is_system, is_rdonly, addr)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+ char *path;
+ DB_FH *fhp;
+ int is_region, is_system, is_rdonly;
+ size_t len;
+ void **addr;
+{
+ HANDLE hMemory;
+ int ret, use_pagefile;
+ _TCHAR *tpath, shmem_name[DB_MAXPATHLEN];
+ void *pMemory;
+
+ ret = 0;
+ if (infop != NULL)
+ infop->wnt_handle = NULL;
+
+ use_pagefile = is_region && is_system;
+
+ /*
+ * If creating a region in system space, get a matching name in the
+ * paging file namespace.
+ */
+ if (use_pagefile) {
+ TO_TSTRING(dbenv, path, tpath, ret);
+ if (ret != 0)
+ return (ret);
+ ret = __os_unique_name(tpath, fhp->handle,
+ shmem_name, sizeof(shmem_name));
+ FREE_STRING(dbenv, tpath);
+ if (ret != 0)
+ return (ret);
+ }
+
+ /*
+ * XXX
+ * DB: We have not implemented copy-on-write here.
+ *
+ * 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:
+ *
+ * 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.
+ *
+ * 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;
+ if (use_pagefile) {
+ hMemory = OpenFileMapping(
+ is_rdonly ? FILE_MAP_READ : FILE_MAP_ALL_ACCESS,
+ 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, (DWORD)len, NULL);
+
+ if (hMemory == NULL) {
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "OpenFileMapping");
+ return (__db_panic(dbenv, __os_posix_err(ret)));
+ }
+
+ pMemory = MapViewOfFile(hMemory,
+ (is_rdonly ? FILE_MAP_READ : FILE_MAP_ALL_ACCESS), 0, 0, len);
+ if (pMemory == NULL) {
+ ret = __os_get_syserr();
+ __db_syserr(dbenv, ret, "MapViewOfFile");
+ return (__db_panic(dbenv, __os_posix_err(ret)));
+ }
+
+ /*
+ * XXX
+ * It turns out that the kernel object underlying the named section
+ * is reference counted, but that the call to MapViewOfFile() above
+ * does NOT increment the reference count! So, if we close the handle
+ * here, the kernel deletes the object from the kernel namespace.
+ * When a second process comes along to join the region, the kernel
+ * happily creates a new object with the same name, but completely
+ * 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.
+ */
+ if (use_pagefile && infop != NULL)
+ infop->wnt_handle = hMemory;
+ else
+ CloseHandle(hMemory);
+
+ *addr = pMemory;
+ return (ret);
+}
diff --git a/db/os_windows/os_open.c b/db/os_windows/os_open.c
new file mode 100644
index 000000000..9346722ae
--- /dev/null
+++ b/db/os_windows/os_open.c
@@ -0,0 +1,186 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_open.c,v 12.16 2006/09/12 01:49:36 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_open --
+ * Open a file descriptor.
+ */
+__os_open(dbenv, name, flags, mode, fhpp)
+ DB_ENV *dbenv;
+ const char *name;
+ u_int32_t flags;
+ int mode;
+ DB_FH **fhpp;
+{
+ return (__os_open_extend(dbenv, name, 0, flags, mode, fhpp));
+}
+
+/*
+ * __os_open_extend --
+ * Open a file descriptor (including page size and log size information).
+ */
+int
+__os_open_extend(dbenv, name, page_size, flags, mode, fhpp)
+ DB_ENV *dbenv;
+ const char *name;
+ u_int32_t page_size, flags;
+ int mode;
+ DB_FH **fhpp;
+{
+ DB_FH *fhp;
+ DWORD cluster_size, sector_size, free_clusters, total_clusters;
+ int access, attr, createflag, nrepeat, ret, share;
+ _TCHAR *drive, *tname;
+ _TCHAR dbuf[4]; /* <letter><colon><slash><nul> */
+
+ fhp = NULL;
+ tname = NULL;
+
+#define OKFLAGS \
+ (DB_OSO_ABSMODE | DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_DSYNC |\
+ DB_OSO_EXCL | 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);
+
+ TO_TSTRING(dbenv, name, tname, ret);
+ if (ret != 0)
+ goto err;
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), &fhp)) != 0)
+ goto err;
+
+ /*
+ * Otherwise, use the Windows/32 CreateFile interface so that we can
+ * play magic games with files to get data flush effects similar to
+ * the POSIX O_DSYNC flag.
+ *
+ * !!!
+ * We currently ignore the 'mode' argument. It would be possible
+ * to construct a set of security attributes that we could pass to
+ * CreateFile that would accurately represents the mode. In worst
+ * case, this would require looking up user and all group names and
+ * creating an entry for each. Alternatively, we could call the
+ * _chmod (partial emulation) function after file creation, although
+ * this leaves us with an obvious race. However, these efforts are
+ * largely meaningless on FAT, the most common file system, which
+ * only has a "readable" and "writeable" flag, applying to all users.
+ */
+ access = GENERIC_READ;
+ if (!LF_ISSET(DB_OSO_RDONLY))
+ access |= GENERIC_WRITE;
+
+ share = FILE_SHARE_READ | FILE_SHARE_WRITE;
+ if (__os_is_winnt())
+ share |= FILE_SHARE_DELETE;
+ attr = FILE_ATTRIBUTE_NORMAL;
+
+ /*
+ * Reproduce POSIX 1003.1 semantics: if O_CREATE and O_EXCL are both
+ * specified, fail, returning EEXIST, unless we create the file.
+ */
+ if (LF_ISSET(DB_OSO_CREATE) && LF_ISSET(DB_OSO_EXCL))
+ createflag = CREATE_NEW; /* create only if !exist*/
+ else if (!LF_ISSET(DB_OSO_CREATE) && LF_ISSET(DB_OSO_TRUNC))
+ createflag = TRUNCATE_EXISTING; /* truncate, fail if !exist */
+ else if (LF_ISSET(DB_OSO_TRUNC))
+ createflag = CREATE_ALWAYS; /* create and truncate */
+ else if (LF_ISSET(DB_OSO_CREATE))
+ createflag = OPEN_ALWAYS; /* open or create */
+ else
+ createflag = OPEN_EXISTING; /* open only if existing */
+
+ if (LF_ISSET(DB_OSO_DSYNC)) {
+ F_SET(fhp, DB_FH_NOSYNC);
+ attr |= FILE_FLAG_WRITE_THROUGH;
+ }
+
+ if (LF_ISSET(DB_OSO_SEQ))
+ attr |= FILE_FLAG_SEQUENTIAL_SCAN;
+ else
+ attr |= FILE_FLAG_RANDOM_ACCESS;
+
+ if (LF_ISSET(DB_OSO_TEMP))
+ attr |= FILE_FLAG_DELETE_ON_CLOSE;
+
+ /*
+ * 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;
+ _sntprintf(dbuf, sizeof(dbuf), _T("%c:\\"), tname[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;
+ }
+
+ fhp->handle = fhp->trunc_handle = INVALID_HANDLE_VALUE;
+ for (nrepeat = 1;; ++nrepeat) {
+ if (fhp->handle == INVALID_HANDLE_VALUE)
+ fhp->handle = CreateFile(
+ tname, access, share, NULL, createflag, attr, 0);
+
+ /*
+ * Windows does not provide truncate directly. There is no
+ * safe way to use a handle for truncate concurrently with
+ * reads or writes. To deal with this, we open a second handle
+ * used just for truncating.
+ */
+ if (fhp->handle != INVALID_HANDLE_VALUE &&
+ !LF_ISSET(DB_OSO_RDONLY | DB_OSO_TEMP) &&
+ fhp->trunc_handle == INVALID_HANDLE_VALUE)
+ fhp->trunc_handle = CreateFile(
+ tname, access, share, NULL, OPEN_EXISTING, attr, 0);
+
+ if (fhp->handle == INVALID_HANDLE_VALUE ||
+ (!LF_ISSET(DB_OSO_RDONLY | DB_OSO_TEMP) &&
+ fhp->trunc_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
+ * if we can't open a database, an inability to open a
+ * log file is cause for serious dismay.
+ */
+ ret = __os_posix_err(__os_get_syserr());
+ if ((ret != ENFILE && ret != EMFILE && ret != ENOSPC) ||
+ nrepeat > 3)
+ goto err;
+
+ __os_sleep(dbenv, nrepeat * 2, 0);
+ } else
+ break;
+ }
+
+ FREE_STRING(dbenv, tname);
+
+ F_SET(fhp, DB_FH_OPENED);
+ *fhpp = fhp;
+ return (0);
+
+err: FREE_STRING(dbenv, tname);
+ if (fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
+ return (ret);
+}
diff --git a/db/os_windows/os_rename.c b/db/os_windows/os_rename.c
new file mode 100644
index 000000000..a7bdfac2b
--- /dev/null
+++ b/db/os_windows/os_rename.c
@@ -0,0 +1,70 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_rename.c,v 12.6 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_rename --
+ * Rename a file.
+ */
+int
+__os_rename(dbenv, oldname, newname, silent)
+ DB_ENV *dbenv;
+ const char *oldname, *newname;
+ u_int32_t silent;
+{
+ _TCHAR *toldname, *tnewname;
+ int ret;
+
+ TO_TSTRING(dbenv, oldname, toldname, ret);
+ if (ret != 0)
+ return (ret);
+ TO_TSTRING(dbenv, newname, tnewname, ret);
+ if (ret != 0) {
+ FREE_STRING(dbenv, toldname);
+ return (ret);
+ }
+
+ if (!MoveFile(toldname, tnewname))
+ ret = __os_get_syserr();
+
+ if (__os_posix_err(ret) == EEXIST) {
+ ret = 0;
+ if (__os_is_winnt()) {
+ if (!MoveFileEx(
+ toldname, tnewname, MOVEFILE_REPLACE_EXISTING))
+ ret = __os_get_syserr();
+ } else {
+ /*
+ * There is no MoveFileEx for Win9x/Me, so we have to
+ * 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(tnewname);
+ if (!MoveFile(toldname, tnewname))
+ ret = __os_get_syserr();
+ }
+ }
+
+ FREE_STRING(dbenv, tnewname);
+ FREE_STRING(dbenv, toldname);
+
+ if (ret != 0) {
+ if (silent == 0)
+ __db_syserr(
+ dbenv, ret, "MoveFileEx %s %s", oldname, newname);
+ ret = __os_posix_err(ret);
+ }
+
+ return (ret);
+}
diff --git a/db/os_windows/os_rw.c b/db/os_windows/os_rw.c
new file mode 100644
index 000000000..2d98a0f28
--- /dev/null
+++ b/db/os_windows/os_rw.c
@@ -0,0 +1,186 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_rw.c,v 12.15 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_io --
+ * Do an I/O.
+ */
+int
+__os_io(dbenv, op, fhp, pgno, pgsize, relative, io_len, buf, niop)
+ DB_ENV *dbenv;
+ int op;
+ DB_FH *fhp;
+ db_pgno_t pgno;
+ u_int32_t pgsize, relative, io_len;
+ u_int8_t *buf;
+ size_t *niop;
+{
+ int ret;
+
+ if (__os_is_winnt()) {
+ ULONG64 off;
+ OVERLAPPED over;
+ DWORD nbytes;
+ if ((off = relative) == 0)
+ off = (ULONG64)pgsize * pgno;
+ over.Offset = (DWORD)(off & 0xffffffff);
+ over.OffsetHigh = (DWORD)(off >> 32);
+ over.hEvent = 0; /* we don't want asynchronous notifications */
+
+ switch (op) {
+ case DB_IO_READ:
+ if (!ReadFile(fhp->handle,
+ buf, (DWORD)io_len, &nbytes, &over))
+ goto slow;
+ break;
+ case DB_IO_WRITE:
+#ifdef HAVE_FILESYSTEM_NOTZERO
+ if (__os_fs_notzero())
+ goto slow;
+#endif
+ if (!WriteFile(fhp->handle,
+ buf, (DWORD)io_len, &nbytes, &over))
+ goto slow;
+ break;
+ }
+ if (nbytes == io_len) {
+ *niop = (size_t)nbytes;
+ return (0);
+ }
+ }
+
+slow: MUTEX_LOCK(dbenv, fhp->mtx_fh);
+
+ if ((ret = __os_seek(dbenv, fhp, pgno, pgsize, relative)) != 0)
+ goto err;
+
+ switch (op) {
+ case DB_IO_READ:
+ ret = __os_read(dbenv, fhp, buf, io_len, niop);
+ break;
+ case DB_IO_WRITE:
+ ret = __os_write(dbenv, fhp, buf, io_len, niop);
+ break;
+ }
+
+err: MUTEX_UNLOCK(dbenv, fhp->mtx_fh);
+
+ return (ret);
+}
+
+/*
+ * __os_read --
+ * Read from a file handle.
+ */
+int
+__os_read(dbenv, fhp, addr, len, nrp)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ void *addr;
+ size_t len;
+ size_t *nrp;
+{
+ size_t offset, nr;
+ DWORD count;
+ int ret;
+ u_int8_t *taddr;
+
+ ret = 0;
+ for (taddr = addr,
+ offset = 0; offset < len; taddr += nr, offset += nr) {
+ RETRY_CHK((!ReadFile(fhp->handle,
+ taddr, (DWORD)(len - offset), &count, NULL)), ret);
+ if (count == 0 || ret != 0)
+ break;
+ nr = (size_t)count;
+ }
+ *nrp = taddr - (u_int8_t *)addr;
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "read: 0x%lx, %lu",
+ P_TO_ULONG(taddr), (u_long)len - offset);
+ ret = __os_posix_err(ret);
+ }
+ return (ret);
+}
+
+/*
+ * __os_write --
+ * Write to a file handle.
+ */
+int
+__os_write(dbenv, fhp, addr, len, nwp)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ void *addr;
+ size_t len;
+ size_t *nwp;
+{
+ int ret;
+
+#ifdef HAVE_FILESYSTEM_NOTZERO
+ /* Zero-fill as necessary. */
+ if (__os_fs_notzero() && (ret = __os_zerofill(dbenv, fhp)) != 0)
+ return (ret);
+#endif
+ return (__os_physwrite(dbenv, fhp, addr, len, nwp));
+}
+
+/*
+ * __os_physwrite --
+ * Physical write to a file handle.
+ */
+int
+__os_physwrite(dbenv, fhp, addr, len, nwp)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ void *addr;
+ size_t len;
+ size_t *nwp;
+{
+ size_t offset, nw;
+ DWORD count;
+ int ret;
+ u_int8_t *taddr;
+
+ /*
+ * Make a last "panic" check. Imagine a thread of control running in
+ * Berkeley DB, going to sleep. Another thread of control decides to
+ * run recovery because the environment is broken. The first thing
+ * recovery does is panic the existing environment, but we only check
+ * the panic flag when crossing the public API. If the sleeping thread
+ * wakes up and writes something, we could have two threads of control
+ * writing the log files at the same time. So, before writing, make a
+ * last panic check. Obviously, there's still a window, but it's very,
+ * very small.
+ */
+ PANIC_CHECK(dbenv);
+
+ ret = 0;
+ for (taddr = addr,
+ offset = 0; offset < len; taddr += nw, offset += nw) {
+ RETRY_CHK((!WriteFile(fhp->handle,
+ taddr, (DWORD)(len - offset), &count, NULL)), ret);
+ if (ret != 0)
+ break;
+ nw = (size_t)count;
+ }
+ *nwp = len;
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "write: %#lx, %lu",
+ P_TO_ULONG(taddr), (u_long)len - offset);
+ ret = __os_posix_err(ret);
+
+ DB_EVENT(dbenv, DB_EVENT_WRITE_FAILED, NULL);
+ }
+ return (ret);
+}
diff --git a/db/os_windows/os_seek.c b/db/os_windows/os_seek.c
new file mode 100644
index 000000000..1a2131879
--- /dev/null
+++ b/db/os_windows/os_seek.c
@@ -0,0 +1,55 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_seek.c,v 12.8 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_seek --
+ * Seek to a page/byte offset in the file.
+ */
+int
+__os_seek(dbenv, fhp, pgno, pgsize, relative)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ db_pgno_t pgno;
+ u_int32_t pgsize;
+ u_int32_t relative;
+{
+ /* Yes, this really is how Microsoft designed their API. */
+ union {
+ __int64 bigint;
+ struct {
+ unsigned long low;
+ long high;
+ };
+ } offbytes;
+ off_t offset;
+ int ret;
+
+ offset = (off_t)pgsize * pgno + relative;
+
+ offbytes.bigint = offset;
+ ret = (SetFilePointer(fhp->handle, offbytes.low,
+ &offbytes.high, FILE_BEGIN) == (DWORD)-1) ? __os_get_syserr() : 0;
+
+ if (ret == 0) {
+ fhp->pgsize = pgsize;
+ fhp->pgno = pgno;
+ fhp->offset = relative;
+ } else {
+ __db_syserr(dbenv, ret,
+ "seek: %lu: (%lu * %lu) + %lu", (u_long)offset,
+ (u_long)pgno, (u_long)pgsize, (u_long)relative);
+ ret = __os_posix_err(ret);
+ }
+
+ return (ret);
+}
diff --git a/db/os_windows/os_sleep.c b/db/os_windows/os_sleep.c
new file mode 100644
index 000000000..f3709fb1a
--- /dev/null
+++ b/db/os_windows/os_sleep.c
@@ -0,0 +1,34 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_sleep.c,v 12.4 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_sleep --
+ * Yield the processor for a period of time.
+ */
+void
+__os_sleep(dbenv, secs, usecs)
+ DB_ENV *dbenv;
+ u_long secs, usecs; /* Seconds and microseconds. */
+{
+ COMPQUIET(dbenv, NULL);
+
+ /* Don't require that the values be normalized. */
+ for (; usecs >= 1000000; ++secs, usecs -= 1000000)
+ ;
+
+ /*
+ * It's important that we yield the processor here so that other
+ * processes or threads are permitted to run.
+ */
+ Sleep(secs * 1000 + usecs / 1000);
+}
diff --git a/db/os_windows/os_spin.c b/db/os_windows/os_spin.c
new file mode 100644
index 000000000..5d5a23a28
--- /dev/null
+++ b/db/os_windows/os_spin.c
@@ -0,0 +1,38 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_spin.c,v 12.6 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_spin --
+ * Return the number of default spins before blocking.
+ */
+u_int32_t
+__os_spin(dbenv)
+ DB_ENV *dbenv;
+{
+ SYSTEM_INFO SystemInfo;
+ u_int32_t tas_spins;
+
+ /* Get the number of processors */
+ GetSystemInfo(&SystemInfo);
+
+ /*
+ * Spin 50 times per processor -- we have anecdotal evidence that this
+ * is a reasonable value.
+ */
+ if (SystemInfo.dwNumberOfProcessors > 1)
+ tas_spins = 50 * SystemInfo.dwNumberOfProcessors;
+ else
+ tas_spins = 1;
+
+ return (tas_spins);
+}
diff --git a/db/os_windows/os_stat.c b/db/os_windows/os_stat.c
new file mode 100644
index 000000000..cd018b83f
--- /dev/null
+++ b/db/os_windows/os_stat.c
@@ -0,0 +1,84 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_stat.c,v 12.9 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_exists --
+ * Return if the file exists.
+ */
+int
+__os_exists(dbenv, path, isdirp)
+ DB_ENV *dbenv;
+ const char *path;
+ int *isdirp;
+{
+ int ret;
+ DWORD attrs;
+ _TCHAR *tpath;
+
+ TO_TSTRING(dbenv, path, tpath, ret);
+ if (ret != 0)
+ return (ret);
+
+ RETRY_CHK(
+ ((attrs = GetFileAttributes(tpath)) == (DWORD)-1 ? 1 : 0), ret);
+ if (ret == 0) {
+ if (isdirp != NULL)
+ *isdirp = (attrs & FILE_ATTRIBUTE_DIRECTORY);
+ } else
+ ret = __os_posix_err(ret);
+
+ FREE_STRING(dbenv, tpath);
+ return (ret);
+}
+
+/*
+ * __os_ioinfo --
+ * Return file size and I/O size; abstracted to make it easier
+ * to replace.
+ */
+int
+__os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
+ DB_ENV *dbenv;
+ const char *path;
+ DB_FH *fhp;
+ u_int32_t *mbytesp, *bytesp, *iosizep;
+{
+ int ret;
+ BY_HANDLE_FILE_INFORMATION bhfi;
+ unsigned __int64 filesize;
+
+ RETRY_CHK((!GetFileInformationByHandle(fhp->handle, &bhfi)), ret);
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "GetFileInformationByHandle");
+ return (__os_posix_err(ret));
+ }
+
+ filesize = ((unsigned __int64)bhfi.nFileSizeHigh << 32) +
+ bhfi.nFileSizeLow;
+
+ /* Return the size of the file. */
+ if (mbytesp != NULL)
+ *mbytesp = (u_int32_t)(filesize / MEGABYTE);
+ if (bytesp != NULL)
+ *bytesp = (u_int32_t)(filesize % MEGABYTE);
+
+ /*
+ * The filesystem I/O size 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_windows/os_truncate.c b/db/os_windows/os_truncate.c
new file mode 100644
index 000000000..936d080ef
--- /dev/null
+++ b/db/os_windows/os_truncate.c
@@ -0,0 +1,90 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_truncate.c,v 12.12 2006/09/05 15:30:18 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_truncate --
+ * Truncate the file.
+ */
+int
+__os_truncate(dbenv, fhp, pgno, pgsize)
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ db_pgno_t pgno;
+ u_int32_t pgsize;
+{
+ /* Yes, this really is how Microsoft have designed their API */
+ union {
+ __int64 bigint;
+ struct {
+ unsigned long low;
+ long high;
+ };
+ } off;
+ off_t offset;
+ int ret;
+
+ ret = 0;
+ offset = (off_t)pgsize * pgno;
+
+#ifdef HAVE_FILESYSTEM_NOTZERO
+ /*
+ * If the filesystem doesn't zero fill, it isn't safe to extend the
+ * file, or we end up with junk blocks. Just return in that case.
+ */
+ if (__os_fs_notzero()) {
+ off_t stat_offset;
+ u_int32_t mbytes, bytes;
+
+ /* Stat the file. */
+ if ((ret =
+ __os_ioinfo(dbenv, NULL, fhp, &mbytes, &bytes, NULL)) != 0)
+ return (ret);
+ stat_offset = (off_t)mbytes * MEGABYTE + bytes;
+
+ if (offset > stat_offset)
+ return (0);
+ }
+#endif
+
+ /*
+ * Windows doesn't provide truncate directly. Instead, it has
+ * SetEndOfFile, which truncates to the current position. To
+ * deal with that, we open a duplicate file handle for truncating.
+ *
+ * We want to retry the truncate call, which involves a SetFilePointer
+ * and a SetEndOfFile, but there are several complications:
+ *
+ * 1) since the Windows API deals in 32-bit values, it's possible that
+ * the return from SetFilePointer (the low 32-bits) is
+ * INVALID_SET_FILE_POINTER even when the call has succeeded. So we
+ * have to also check whether GetLastError() returns NO_ERROR.
+ *
+ * 2) when it returns, SetFilePointer overwrites the high bits of the
+ * offset, so if we need to retry, we have to reset the offset each
+ * time.
+ *
+ * We can't switch to SetFilePointerEx, which knows about 64-bit
+ * offsets, because it isn't supported on Win9x/ME.
+ */
+ RETRY_CHK((off.bigint = (__int64)pgsize * pgno,
+ (SetFilePointer(fhp->trunc_handle, off.low, &off.high, FILE_BEGIN)
+ == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) ||
+ !SetEndOfFile(fhp->trunc_handle)), ret);
+
+ if (ret != 0) {
+ __db_syserr(dbenv, ret, "SetFilePointer: %lu", pgno * pgsize);
+ ret = __os_posix_err(ret);
+ }
+
+ return (ret);
+}
diff --git a/db/os_windows/os_unlink.c b/db/os_windows/os_unlink.c
new file mode 100644
index 000000000..d6a7359c2
--- /dev/null
+++ b/db/os_windows/os_unlink.c
@@ -0,0 +1,109 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_unlink.c,v 12.15 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_region_unlink --
+ * Remove a shared memory object file.
+ */
+int
+__os_region_unlink(dbenv, path)
+ DB_ENV *dbenv;
+ const char *path;
+{
+ if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
+ (void)__db_file_multi_write(dbenv, path);
+
+ return (__os_unlink(dbenv, path));
+}
+
+/*
+ * __os_unlink --
+ * Remove a file.
+ */
+int
+__os_unlink(dbenv, path)
+ DB_ENV *dbenv;
+ const char *path;
+{
+ HANDLE h;
+ _TCHAR *tpath, *orig_tpath, buf[DB_MAXPATHLEN];
+ u_int32_t id;
+ int ret, t_ret;
+
+ TO_TSTRING(dbenv, path, tpath, ret);
+ if (ret != 0)
+ return (ret);
+ orig_tpath = tpath;
+
+ /*
+ * Windows NT and its descendents allow removal of open files, but the
+ * DeleteFile Win32 system call isn't equivalent to a POSIX unlink.
+ * Firstly, it only succeeds if FILE_SHARE_DELETE is set when the file
+ * is opened. Secondly, it leaves the file in a "zombie" state, where
+ * it can't be opened again, but a new file with the same name can't be
+ * created either.
+ *
+ * Since we depend on being able to recreate files (during recovery,
+ * say), we have to first rename the file, and then delete it. It
+ * still hangs around, but with a name we don't care about. The rename
+ * will fail if the file doesn't exist, which isn't a problem, but if
+ * it fails for some other reason, we need to know about it or a
+ * subsequent open may fail for no apparent reason.
+ */
+ if (__os_is_winnt()) {
+ __os_unique_id(dbenv, &id);
+ _sntprintf(buf, DB_MAXPATHLEN, _T("%s.del.%010u"), tpath, id);
+ if (MoveFile(tpath, buf))
+ tpath = buf;
+ else {
+ ret = __os_get_syserr();
+ if (__os_posix_err(ret) != ENOENT)
+ __db_err(dbenv, ret,
+ "MoveFile: rename %s to temporary file",
+ path);
+ }
+
+ /*
+ * Try removing the file using the delete-on-close flag. This
+ * plays nicer with files that are still open than DeleteFile.
+ */
+ h = CreateFile(tpath, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
+ FILE_FLAG_DELETE_ON_CLOSE, 0);
+ if (h != INVALID_HANDLE_VALUE) {
+ (void)CloseHandle (h);
+ if (GetFileAttributes(tpath) == INVALID_FILE_ATTRIBUTES)
+ goto skipdel;
+ }
+ }
+
+ RETRY_CHK((!DeleteFile(tpath)), ret);
+
+skipdel:
+ FREE_STRING(dbenv, orig_tpath);
+
+ /*
+ * XXX
+ * We shouldn't be testing for an errno of ENOENT here, but ENOENT
+ * signals that a file is missing, and we attempt to unlink things
+ * (such as v. 2.x environment regions, in DB_ENV->remove) that we
+ * are expecting not to be there. Reporting errors in these cases
+ * is annoying.
+ */
+ if (ret != 0) {
+ if ((t_ret = __os_posix_err(ret)) != ENOENT)
+ __db_syserr(dbenv, ret, "DeleteFile: %s", path);
+ ret = t_ret;
+ }
+
+ return (ret);
+}
diff --git a/db/os_windows/os_yield.c b/db/os_windows/os_yield.c
new file mode 100644
index 000000000..200633cc7
--- /dev/null
+++ b/db/os_windows/os_yield.c
@@ -0,0 +1,27 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: os_yield.c,v 12.7 2006/08/24 14:46:22 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+
+/*
+ * __os_yield --
+ * Yield the processor.
+ */
+void
+__os_yield(dbenv)
+ DB_ENV *dbenv;
+{
+ /*
+ * The call to Sleep(0) is specified by MSDN to yield the current
+ * thread's time slice to another thread of equal or greater priority.
+ */
+ Sleep(0);
+}
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.pm b/db/perl/BerkeleyDB/BerkeleyDB.pm
index 5791faea5..441c48ff2 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.pm
+++ b/db/perl/BerkeleyDB/BerkeleyDB.pm
@@ -2,7 +2,7 @@
package BerkeleyDB;
-# Copyright (c) 1997-2004 Paul Marquess. All rights reserved.
+# Copyright (c) 1997-2006 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.26';
+$VERSION = '0.30';
require Exporter;
#require DynaLoader;
@@ -51,6 +51,7 @@ BEGIN {
DB_ARCH_DATA
DB_ARCH_LOG
DB_ARCH_REMOVE
+ DB_ASSOC_IMMUTABLE_KEY
DB_AUTO_COMMIT
DB_BEFORE
DB_BTREE
@@ -66,6 +67,7 @@ BEGIN {
DB_CLIENT
DB_CL_WRITER
DB_COMMIT
+ DB_COMPACT_FLAGS
DB_CONSUME
DB_CONSUME_WAIT
DB_CREATE
@@ -137,6 +139,8 @@ BEGIN {
DB_FIXEDLEN
DB_FLUSH
DB_FORCE
+ DB_FREELIST_ONLY
+ DB_FREE_SPACE
DB_GETREC
DB_GET_BOTH
DB_GET_BOTHC
@@ -147,6 +151,7 @@ BEGIN {
DB_HASHMAGIC
DB_HASHOLDVER
DB_HASHVERSION
+ DB_IMMUTABLE_KEY
DB_INCOMPLETE
DB_INIT_CDB
DB_INIT_LOCK
@@ -239,6 +244,10 @@ BEGIN {
DB_MULTIPLE_KEY
DB_MUTEXDEBUG
DB_MUTEXLOCKS
+ DB_MUTEX_ALLOCATED
+ DB_MUTEX_LOGICAL_LOCK
+ DB_MUTEX_SELF_BLOCK
+ DB_MUTEX_THREAD
DB_NEEDSPLIT
DB_NEXT
DB_NEXT_DUP
@@ -293,6 +302,8 @@ BEGIN {
DB_QUEUE
DB_RDONLY
DB_RDWRMASTER
+ DB_READ_COMMITTED
+ DB_READ_UNCOMMITTED
DB_RECNO
DB_RECNUM
DB_RECORDCOUNT
@@ -303,16 +314,21 @@ BEGIN {
DB_REGION_INIT
DB_REGION_MAGIC
DB_REGION_NAME
+ DB_REGISTER
DB_REGISTERED
DB_RENAMEMAGIC
DB_RENUMBER
+ DB_REP_ANYWHERE
+ DB_REP_BULKOVF
DB_REP_CLIENT
DB_REP_CREATE
DB_REP_DUPMASTER
DB_REP_EGENCHG
DB_REP_HANDLE_DEAD
DB_REP_HOLDELECTION
+ DB_REP_IGNORE
DB_REP_ISPERM
+ DB_REP_LOCKOUT
DB_REP_LOGREADY
DB_REP_LOGSONLY
DB_REP_MASTER
@@ -323,6 +339,7 @@ BEGIN {
DB_REP_OUTDATED
DB_REP_PAGEDONE
DB_REP_PERMANENT
+ DB_REP_REREQUEST
DB_REP_STARTUPDONE
DB_REP_UNAVAIL
DB_REVSPLITOFF
@@ -333,12 +350,14 @@ BEGIN {
DB_RUNRECOVERY
DB_SALVAGE
DB_SECONDARY_BAD
+ DB_SEQUENCE_OLDVER
DB_SEQUENCE_VERSION
DB_SEQUENTIAL
DB_SEQ_DEC
DB_SEQ_INC
DB_SEQ_RANGE_SET
DB_SEQ_WRAP
+ DB_SEQ_WRAPPED
DB_SET
DB_SET_LOCK_TIMEOUT
DB_SET_RANGE
@@ -414,6 +433,7 @@ BEGIN {
DB_VERB_CHKPOINT
DB_VERB_DEADLOCK
DB_VERB_RECOVERY
+ DB_VERB_REGISTER
DB_VERB_REPLICATION
DB_VERB_WAITSFOR
DB_VERIFY
@@ -434,6 +454,10 @@ BEGIN {
DB_YIELDCPU
DB_debug_FLAG
DB_user_BEGIN
+ REP_CONF_AUTOINIT
+ REP_CONF_BULK
+ REP_CONF_DELAYCLIENT
+ REP_CONF_NOWAIT
);
sub AUTOLOAD {
@@ -493,7 +517,7 @@ sub ParseParameters($@)
if (@Bad) {
my ($bad) = join(", ", @Bad) ;
- croak "unknown key value(s) @Bad" ;
+ croak "unknown key value(s) $bad" ;
}
return \%got ;
@@ -566,6 +590,7 @@ sub db_remove
Subname => undef,
Flags => 0,
Env => undef,
+ Txn => undef,
}, @_) ;
croak("Must specify a filename")
@@ -586,6 +611,7 @@ sub db_rename
Newname => undef,
Flags => 0,
Env => undef,
+ Txn => undef,
}, @_) ;
croak("Env not of type BerkeleyDB::Env")
@@ -594,8 +620,8 @@ sub db_rename
croak("Must specify a filename")
if ! defined $got->{Filename} ;
- croak("Must specify a Subname")
- if ! defined $got->{Subname} ;
+ #croak("Must specify a Subname")
+ #if ! defined $got->{Subname} ;
croak("Must specify a Newname")
if ! defined $got->{Newname} ;
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.pod b/db/perl/BerkeleyDB/BerkeleyDB.pod
index ba2cc0c58..f743c8016 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.pod
+++ b/db/perl/BerkeleyDB/BerkeleyDB.pod
@@ -44,6 +44,7 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $db->status() ;
$boolean = $db->byteswapped() ;
$status = $db->truncate($count) ;
+ $status = $db->compact($start, $stop, $c_data, $flags, $end);
$bool = $env->cds_enabled();
$bool = $db->cds_enabled();
@@ -71,6 +72,8 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$hash_ref = $env->txn_stat()
$status = $env->setmutexlocks()
$status = $env->set_flags()
+ $status = $env->set_timeout()
+ $status = $env->lsn_reset()
$txn = $env->txn_begin() ;
$db->Txn($txn);
@@ -80,6 +83,7 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $txn->txn_abort()
$status = $txn->txn_id()
$status = $txn->txn_discard()
+ $status = $txn->set_timeout()
$status = $env->set_lg_dir();
$status = $env->set_lg_bsize();
@@ -394,6 +398,8 @@ This option requires Berkeley DB 4.2 or better.
Use the C<-SharedMemKey> option when opening the environemt to set the
base segment ID.
+=item $env->set_timeout($timeout, $flags)
+
=item $env->status()
Returns the status of the last BerkeleyDB::Env method.
@@ -935,7 +941,7 @@ The code below is a simple example of using a btree database.
tie %h, 'BerkeleyDB::Btree',
-Filename => $filename,
-Flags => DB_CREATE
- or die "Cannot open $filename: $!\n" ;
+ or die "Cannot open $filename: $! $BerkeleyDB::Error\n" ;
# Add a key/value pair to the file
$h{'Wall'} = 'Larry' ;
@@ -1436,6 +1442,46 @@ Returns the status of the last C<$db> method called.
Truncates the datatabase and returns the number or records deleted
in C<$count>.
+=head2 $status = $db->compact($start, $stop, $c_data, $flags, $end);
+
+Compacts the database C<$db>.
+
+All the parameters are optional - if only want to make use of some of them,
+use C<undef> for those you don't want. Trailing unusused parameters can be
+omitted. For example, if you only want to use the C<$c_data> parameter to
+set the C<compact_fillpercent>, write you code like this
+
+ my %hash;
+ $hash{compact_fillpercent} = 50;
+ $db->commit(undef, undef, \%hash);
+
+The parameters operate identically to the C equivalent of this method.
+The C<$c_data> needs a bit of explanation - it must be a hash reference.
+The values of the following keys can be set before calling C<compact> and
+will affect the operation of the compaction.
+
+=over 5
+=item * compact_fillpercent
+=item * compact_timeout
+
+=back
+
+The following keys, along with associated values, will be created in the
+hash reference if the C<compact> operation was successful.
+
+=over 5
+
+=item * compact_deadlock
+=item * compact_levels
+=item * compact_pages_free
+=item * compact_pages_examine
+=item * compact_pages_truncated
+
+=back
+
+You need to be running Berkeley DB 4.4 or better if you wan to make use of
+C<compact>.
+
=head1 CURSORS
A cursor is used whenever you want to access the contents of a database
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.pod.P b/db/perl/BerkeleyDB/BerkeleyDB.pod.P
index 6540a943a..959b240d0 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.pod.P
+++ b/db/perl/BerkeleyDB/BerkeleyDB.pod.P
@@ -44,6 +44,7 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $db->status() ;
$boolean = $db->byteswapped() ;
$status = $db->truncate($count) ;
+ $status = $db->compact($start, $stop, $c_data, $flags, $end);
$bool = $env->cds_enabled();
$bool = $db->cds_enabled();
@@ -71,6 +72,8 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$hash_ref = $env->txn_stat()
$status = $env->setmutexlocks()
$status = $env->set_flags()
+ $status = $env->set_timeout()
+ $status = $env->lsn_reset()
$txn = $env->txn_begin() ;
$db->Txn($txn);
@@ -80,6 +83,7 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $txn->txn_abort()
$status = $txn->txn_id()
$status = $txn->txn_discard()
+ $status = $txn->set_timeout()
$status = $env->set_lg_dir();
$status = $env->set_lg_bsize();
@@ -394,6 +398,8 @@ This option requires Berkeley DB 4.2 or better.
Use the C<-SharedMemKey> option when opening the environemt to set the
base segment ID.
+=item $env->set_timeout($timeout, $flags)
+
=item $env->status()
Returns the status of the last BerkeleyDB::Env method.
@@ -1242,6 +1248,46 @@ Returns the status of the last C<$db> method called.
Truncates the datatabase and returns the number or records deleted
in C<$count>.
+=head2 $status = $db->compact($start, $stop, $c_data, $flags, $end);
+
+Compacts the database C<$db>.
+
+All the parameters are optional - if only want to make use of some of them,
+use C<undef> for those you don't want. Trailing unusused parameters can be
+omitted. For example, if you only want to use the C<$c_data> parameter to
+set the C<compact_fillpercent>, write you code like this
+
+ my %hash;
+ $hash{compact_fillpercent} = 50;
+ $db->commit(undef, undef, \%hash);
+
+The parameters operate identically to the C equivalent of this method.
+The C<$c_data> needs a bit of explanation - it must be a hash reference.
+The values of the following keys can be set before calling C<compact> and
+will affect the operation of the compaction.
+
+=over 5
+=item * compact_fillpercent
+=item * compact_timeout
+
+=back
+
+The following keys, along with associated values, will be created in the
+hash reference if the C<compact> operation was successful.
+
+=over 5
+
+=item * compact_deadlock
+=item * compact_levels
+=item * compact_pages_free
+=item * compact_pages_examine
+=item * compact_pages_truncated
+
+=back
+
+You need to be running Berkeley DB 4.4 or better if you wan to make use of
+C<compact>.
+
=head1 CURSORS
A cursor is used whenever you want to access the contents of a database
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.xs b/db/perl/BerkeleyDB/BerkeleyDB.xs
index bd78509f5..08a2cde58 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 &4
+ BerkeleyDB.xs -- Perl 5 interface to Berkeley DB version 2, 3 & 4
written by Paul Marquess <pmqs@cpan.org>
All comments/suggestions/problems are welcome
- Copyright (c) 1997-2004 Paul Marquess. All rights reserved.
+ Copyright (c) 1997-2006 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.
@@ -125,6 +125,14 @@ extern "C" {
# define AT_LEAST_DB_4_3
#endif
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 4)
+# define AT_LEAST_DB_4_4
+#endif
+
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 5)
+# define AT_LEAST_DB_4_5
+#endif
+
#ifdef __cplusplus
}
#endif
@@ -230,8 +238,9 @@ typedef struct {
bool in_hash ;
#ifdef AT_LEAST_DB_3_3
SV * associated ;
- bool secondary_db ;
+ bool secondary_db ;
#endif
+ bool primary_recno_or_queue ;
int Status ;
DB_INFO * info ;
DBC * cursor ;
@@ -268,6 +277,7 @@ typedef struct {
SV * associated ;
bool secondary_db ;
#endif
+ bool primary_recno_or_queue ;
int Status ;
DB_INFO * info ;
DBC * cursor ;
@@ -337,10 +347,13 @@ typedef DBT DBTKEY ;
typedef DBT DBT_OPT ;
typedef DBT DBT_B ;
typedef DBT DBTKEY_B ;
+typedef DBT DBTKEY_Br ;
+typedef DBT DBTKEY_Bpr ;
typedef DBT DBTVALUE ;
typedef void * PV_or_NULL ;
typedef PerlIO * IO_or_NULL ;
typedef int DualType ;
+typedef SV SVnull;
static void
hash_delete(char * hash, char * key);
@@ -369,6 +382,9 @@ hash_delete(char * hash, char * key);
# define flagSet(bitmask) ((flags & DB_OPFLAGS_MASK) == (bitmask))
#endif
+#ifndef AT_LEAST_DB_4
+typedef int db_timeout_t ;
+#endif
#define ERR_BUFF "BerkeleyDB::Error"
@@ -385,6 +401,8 @@ hash_delete(char * hash, char * key);
#define my_sv_setpvn(sv, d, s) (s ? sv_setpvn(sv, d, s) : sv_setpv(sv, "") )
+#define GetValue_iv(h,k) (((sv = readHash(h, k)) && sv != &PL_sv_undef) \
+ ? SvIV(sv) : 0)
#define SetValue_iv(i, k) if ((sv = readHash(hash, k)) && sv != &PL_sv_undef) \
i = SvIV(sv)
#define SetValue_io(i, k) if ((sv = readHash(hash, k)) && sv != &PL_sv_undef) \
@@ -454,8 +472,38 @@ hash_delete(char * hash, char * key);
#define OutputKey_B(arg, name) \
{ if (RETVAL == 0) \
{ \
- if (db->recno_or_queue || \
- (db->type == DB_BTREE && \
+ if (db->recno_or_queue \
+ || (db->type == DB_BTREE && \
+ flagSet(DB_GET_RECNO))){ \
+ sv_setiv(arg, (I32)(*(I32*)name.data) - RECNO_BASE); \
+ } \
+ else { \
+ my_sv_setpvn(arg, name.data, name.size); \
+ } \
+ DBM_ckFilter(arg, filter_fetch_key, "filter_fetch_key") ; \
+ } \
+ }
+
+#define OutputKey_Br(arg, name) \
+ { if (RETVAL == 0) \
+ { \
+ if (db->recno_or_queue || db->primary_recno_or_queue \
+ || (db->type == DB_BTREE && \
+ flagSet(DB_GET_RECNO))){ \
+ sv_setiv(arg, (I32)(*(I32*)name.data) - RECNO_BASE); \
+ } \
+ else { \
+ my_sv_setpvn(arg, name.data, name.size); \
+ } \
+ DBM_ckFilter(arg, filter_fetch_key, "filter_fetch_key") ; \
+ } \
+ }
+
+#define OutputKey_Bpr(arg, name) \
+ { if (RETVAL == 0) \
+ { \
+ if (db->primary_recno_or_queue \
+ || (db->type == DB_BTREE && \
flagSet(DB_GET_RECNO))){ \
sv_setiv(arg, (I32)(*(I32*)name.data) - RECNO_BASE); \
} \
@@ -1121,6 +1169,7 @@ 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); */
@@ -1136,6 +1185,80 @@ associate_cb(DB_callback const DBT * pkey, const DBT * pdata, DBT * skey)
return (retval) ;
}
+static int
+associate_cb_recno(DB_callback const DBT * pkey, const DBT * pdata, DBT * skey)
+{
+ dSP ;
+ char * pk_dat, * pd_dat ;
+ /* char *sk_dat ; */
+ int retval ;
+ int count ;
+ SV * skey_SV ;
+ STRLEN skey_len;
+ char * skey_ptr ;
+ db_recno_t Value;
+
+ Trace(("In associate_cb_recno \n")) ;
+ if (getCurrentDB->associated == NULL){
+ Trace(("No Callback registered\n")) ;
+ return EINVAL ;
+ }
+
+ skey_SV = newSVpv("",0);
+
+
+ pk_dat = (char*) pkey->data ;
+ pd_dat = (char*) pdata->data ;
+
+#ifndef newSVpvn
+ /* As newSVpv will assume that the data pointer is a null terminated C
+ string if the size parameter is 0, make sure that data points to an
+ empty string if the length is 0
+ */
+ if (pkey->size == 0)
+ pk_dat = "" ;
+ if (pdata->size == 0)
+ pd_dat = "" ;
+#endif
+
+ ENTER ;
+ SAVETMPS;
+
+ PUSHMARK(SP) ;
+ EXTEND(SP,2) ;
+ PUSHs(sv_2mortal(newSVpvn(pk_dat,pkey->size)));
+ PUSHs(sv_2mortal(newSVpvn(pd_dat,pdata->size)));
+ PUSHs(sv_2mortal(skey_SV));
+ PUTBACK ;
+
+ Trace(("calling associated cb\n"));
+ count = perl_call_sv(getCurrentDB->associated, G_SCALAR);
+ Trace(("called associated cb\n"));
+
+ SPAGAIN ;
+
+ if (count != 1)
+ softCrash ("associate: expected 1 return value from prefix sub, got %d", count) ;
+
+ retval = POPi ;
+
+ PUTBACK ;
+
+ /* retrieve the secondary key */
+ DBT_clear(*skey);
+
+ Value = GetRecnoKey(getCurrentDB, SvIV(skey_SV)) ;
+ skey->flags = DB_DBT_APPMALLOC;
+ skey->size = (int)sizeof(db_recno_t);
+ skey->data = (char*)safemalloc(skey->size);
+ memcpy(skey->data, &Value, skey->size);
+
+ FREETMPS ;
+ LEAVE ;
+
+ return (retval) ;
+}
+
#endif /* AT_LEAST_DB_3_3 */
static void
@@ -1202,6 +1325,28 @@ hv_store_iv(HV * hash, char * key, IV value)
hv_store(hash, key, strlen(key), newSViv(value), 0);
}
+#if 0
+static void
+hv_store_uv(HV * hash, char * key, UV value)
+{
+ hv_store(hash, key, strlen(key), newSVuv(value), 0);
+}
+#endif
+
+static void
+GetKey(BerkeleyDB_type * db, SV * sv, DBTKEY * key)
+{
+ if (db->recno_or_queue) {
+ Value = GetRecnoKey(db, SvIV(sv)) ;
+ key->data = & Value;
+ key->size = (int)sizeof(db_recno_t);
+ }
+ else {
+ key->data = SvPV(sv, PL_na);
+ key->size = (int)PL_na;
+ }
+}
+
static BerkeleyDB
my_db_open(
BerkeleyDB db ,
@@ -1411,6 +1556,10 @@ my_db_open(
#endif
}
+ /* In-memory database need DB_CREATE from 4.4 */
+ if (! file)
+ flags |= DB_CREATE;
+
#ifdef AT_LEAST_DB_4_1
if ((Status = (dbp->open)(dbp, txnid, file, subname, type, flags, mode)) == 0) {
@@ -1434,6 +1583,7 @@ my_db_open(
RETVAL->type = dbp->get_type(dbp) ;
#endif
#endif /* DB_VERSION_MAJOR > 2 */
+ RETVAL->primary_recno_or_queue = FALSE;
RETVAL->recno_or_queue = (RETVAL->type == DB_RECNO ||
RETVAL->type == DB_QUEUE) ;
RETVAL->filename = my_strdup(file) ;
@@ -1499,6 +1649,7 @@ _db_remove(ref)
const char * db = NULL ;
const char * subdb = NULL ;
BerkeleyDB__Env env = NULL ;
+ BerkeleyDB__Txn txn = NULL ;
DB_ENV * dbenv = NULL ;
u_int32_t flags = 0 ;
@@ -1507,12 +1658,22 @@ _db_remove(ref)
SetValue_pv(subdb, "Subname", char *) ;
SetValue_iv(flags, "Flags") ;
SetValue_ov(env, "Env", BerkeleyDB__Env) ;
- if (env)
- dbenv = env->Env ;
- RETVAL = db_create(&dbp, dbenv, 0) ;
- if (RETVAL == 0) {
- RETVAL = dbp->remove(dbp, db, subdb, flags) ;
- }
+ if (txn) {
+#ifdef AT_LEAST_DB_4_1
+ if (!env)
+ softCrash("transactional db_remove requires an environment");
+ RETVAL = env->Status = env->Env->dbremove(env->Env, txn->txn, db, subdb, flags);
+#else
+ softCrash("transactional db_remove requires Berkeley DB 4.1 or better");
+#endif
+ } else {
+ if (env)
+ dbenv = env->Env ;
+ RETVAL = db_create(&dbp, dbenv, 0) ;
+ if (RETVAL == 0) {
+ RETVAL = dbp->remove(dbp, db, subdb, flags) ;
+ }
+ }
#endif
}
OUTPUT:
@@ -1579,6 +1740,7 @@ _db_rename(ref)
const char * subdb = NULL ;
const char * newname = NULL ;
BerkeleyDB__Env env = NULL ;
+ BerkeleyDB__Txn txn = NULL ;
DB_ENV * dbenv = NULL ;
u_int32_t flags = 0 ;
@@ -1588,12 +1750,23 @@ _db_rename(ref)
SetValue_pv(newname, "Newname", char *) ;
SetValue_iv(flags, "Flags") ;
SetValue_ov(env, "Env", BerkeleyDB__Env) ;
- if (env)
- dbenv = env->Env ;
- RETVAL = db_create(&dbp, dbenv, 0) ;
- if (RETVAL == 0) {
- RETVAL = (dbp->rename)(dbp, db, subdb, newname, flags) ;
- }
+ SetValue_ov(txn, "Txn", BerkeleyDB__Txn) ;
+ if (txn) {
+#ifdef AT_LEAST_DB_4_1
+ if (!env)
+ softCrash("transactional db_rename requires an environment");
+ RETVAL = env->Status = env->Env->dbrename(env->Env, txn->txn, db, subdb, newname, flags);
+#else
+ softCrash("transactional db_rename requires Berkeley DB 4.1 or better");
+#endif
+ } else {
+ if (env)
+ dbenv = env->Env ;
+ RETVAL = db_create(&dbp, dbenv, 0) ;
+ if (RETVAL == 0) {
+ RETVAL = (dbp->rename)(dbp, db, subdb, newname, flags) ;
+ }
+ }
#endif
}
OUTPUT:
@@ -1938,7 +2111,11 @@ log_archive(env, flags=0)
env->Status = log_archive(env->Env, &list, flags, safemalloc) ;
# endif
# endif
- if (env->Status == 0 && list != NULL)
+#ifdef DB_ARCH_REMOVE
+ if (env->Status == 0 && list != NULL && flags != DB_ARCH_REMOVE)
+#else
+ if (env->Status == 0 && list != NULL )
+#endif
{
for (file = list; *file != NULL; ++file)
{
@@ -2280,7 +2457,7 @@ set_mutexlocks(env, do_lock)
softCrash("$env->set_setmutexlocks needs Berkeley DB 3.0 or better") ;
#else
# ifdef AT_LEAST_DB_4
- RETVAL = env->Status = env->Env->set_flags(env->Env, DB_NOLOCKING, do_lock);
+ RETVAL = env->Status = env->Env->set_flags(env->Env, DB_NOLOCKING, !do_lock);
# else
# if defined(AT_LEAST_DB_3_2_6) || defined(IS_DB_3_0_x)
RETVAL = env->Status = env->Env->set_mutexlocks(env->Env, do_lock);
@@ -2324,6 +2501,55 @@ set_flags(env, flags, onoff)
OUTPUT:
RETVAL
+int
+lsn_reset(env, file, flags)
+ BerkeleyDB::Env env
+ char* file
+ u_int32_t flags
+ INIT:
+ ckActive_Database(env->active) ;
+ CODE:
+#ifndef AT_LEAST_DB_4_3
+ softCrash("$env->lsn_reset needs Berkeley DB 4.3.x or better") ;
+#else
+ RETVAL = env->Status = env->Env->lsn_reset(env->Env, file, flags);
+#endif
+ OUTPUT:
+ RETVAL
+
+int
+set_timeout(env, timeout, flags=0)
+ BerkeleyDB::Env env
+ db_timeout_t timeout
+ u_int32_t flags
+ INIT:
+ ckActive_Database(env->active) ;
+ CODE:
+#ifndef AT_LEAST_DB_4
+ softCrash("$env->set_timeout needs Berkeley DB 4.x or better") ;
+#else
+ RETVAL = env->Status = env->Env->set_timeout(env->Env, timeout, flags);
+#endif
+ OUTPUT:
+ RETVAL
+
+int
+get_timeout(env, timeout, flags=0)
+ BerkeleyDB::Env env
+ db_timeout_t timeout = NO_INIT
+ u_int32_t flags
+ INIT:
+ ckActive_Database(env->active) ;
+ CODE:
+#ifndef AT_LEAST_DB_4_2
+ softCrash("$env->set_timeout needs Berkeley DB 4.2.x or better") ;
+#else
+ RETVAL = env->Status = env->Env->get_timeout(env->Env, &timeout, flags);
+#endif
+ OUTPUT:
+ RETVAL
+ timeout
+
MODULE = BerkeleyDB::Term PACKAGE = BerkeleyDB::Term
@@ -2606,7 +2832,9 @@ db_stat(db, flags=0)
#else
hv_store_iv(RETVAL, "bt_flags", stat->bt_flags) ;
#endif
+#ifndef AT_LEAST_DB_4_4
hv_store_iv(RETVAL, "bt_maxkey", stat->bt_maxkey) ;
+#endif
hv_store_iv(RETVAL, "bt_minkey", stat->bt_minkey);
hv_store_iv(RETVAL, "bt_re_len", stat->bt_re_len);
hv_store_iv(RETVAL, "bt_re_pad", stat->bt_re_pad);
@@ -2908,6 +3136,7 @@ _db_cursor(db, flags=0)
#ifdef AT_LEAST_DB_3_3
RETVAL->associated = db->associated ;
RETVAL->secondary_db = db->secondary_db;
+ RETVAL->primary_recno_or_queue = db->primary_recno_or_queue ;
#endif
RETVAL->prefix = db->prefix ;
RETVAL->hash = db->hash ;
@@ -2979,6 +3208,7 @@ _db_join(db, cursors, flags=0)
#ifdef AT_LEAST_DB_3_3
RETVAL->associated = db->associated ;
RETVAL->secondary_db = db->secondary_db;
+ RETVAL->primary_recno_or_queue = db->primary_recno_or_queue ;
#endif
RETVAL->prefix = db->prefix ;
RETVAL->hash = db->hash ;
@@ -3209,7 +3439,7 @@ db_pget(db, key, pkey, data, flags=0)
u_int flags
BerkeleyDB::Common db
DBTKEY_B key
- DBTKEY_B pkey = NO_INIT
+ DBTKEY_Bpr pkey = NO_INIT
DBT_OPT data
CODE:
#ifndef AT_LEAST_DB_3_3
@@ -3364,13 +3594,82 @@ associate(db, secondary, callback, flags=0)
saveCurrentDB(db) ;
/* db->associated = newSVsv(callback) ; */
secondary->associated = newSVsv(callback) ;
+ secondary->primary_recno_or_queue = db->recno_or_queue ;
/* secondary->dbp->app_private = secondary->associated ; */
secondary->secondary_db = TRUE;
- RETVAL = db_associate(db, secondary, associate_cb, flags);
+ if (secondary->recno_or_queue)
+ RETVAL = db_associate(db, secondary, associate_cb_recno, flags);
+ else
+ RETVAL = db_associate(db, secondary, associate_cb, flags);
#endif
OUTPUT:
RETVAL
+DualType
+compact(db, start=NULL, stop=NULL, c_data=NULL, flags=0, end=NULL)
+ PREINIT:
+ DBTKEY end_key;
+ INPUT:
+ BerkeleyDB::Common db
+ SVnull* start
+ SVnull* stop
+ SVnull* c_data
+ u_int32_t flags
+ SVnull* end
+ CODE:
+ {
+#ifndef AT_LEAST_DB_4_4
+ softCrash("compact needs Berkeley DB 4.4 or later") ;
+#else
+ DBTKEY start_key;
+ DBTKEY stop_key;
+ DBTKEY* start_p = NULL;
+ DBTKEY* stop_p = NULL;
+ DBTKEY* end_p = NULL;
+ DB_COMPACT cmpt;
+ DB_COMPACT* cmpt_p = NULL;
+ SV * sv;
+ HV* hash = NULL;
+
+ DBT_clear(start_key);
+ DBT_clear(stop_key);
+ DBT_clear(end_key);
+ Zero(&cmpt, 1, DB_COMPACT) ;
+ ckActive_Database(db->active) ;
+ saveCurrentDB(db) ;
+ if (start && SvOK(start)) {
+ start_p = &start_key;
+ DBM_ckFilter(start, filter_store_key, "filter_store_key");
+ GetKey(db, start, start_p);
+ }
+ if (stop && SvOK(stop)) {
+ stop_p = &stop_key;
+ DBM_ckFilter(stop, filter_store_key, "filter_store_key");
+ GetKey(db, stop, stop_p);
+ }
+ if (end) {
+ end_p = &end_key;
+ }
+ if (c_data && SvOK(c_data)) {
+ hash = (HV*) SvRV(c_data) ;
+ cmpt_p = & cmpt;
+ cmpt.compact_fillpercent = GetValue_iv(hash,"compact_fillpercent") ;
+ cmpt.compact_timeout = (db_timeout_t) GetValue_iv(hash, "compact_timeout");
+ }
+ RETVAL = (db->dbp)->compact(db->dbp, db->txn, start_p, stop_p, cmpt_p, flags, end_p);
+ if (RETVAL == 0 && hash) {
+ hv_store_iv(hash, "compact_deadlock", cmpt.compact_deadlock) ;
+ hv_store_iv(hash, "compact_levels", cmpt.compact_levels) ;
+ hv_store_iv(hash, "compact_pages_free", cmpt.compact_pages_free) ;
+ hv_store_iv(hash, "compact_pages_examine", cmpt.compact_pages_examine) ;
+ hv_store_iv(hash, "compact_pages_truncated", cmpt.compact_pages_truncated) ;
+ }
+#endif
+ }
+ OUTPUT:
+ RETVAL
+ end if (RETVAL == 0 && end) OutputValue_B(ST(5), end_key) ;
+
MODULE = BerkeleyDB::Cursor PACKAGE = BerkeleyDB::Cursor PREFIX = cu_
@@ -3397,6 +3696,7 @@ _c_dup(db, flags=0)
RETVAL->dbp = db->dbp ;
RETVAL->type = db->type ;
RETVAL->recno_or_queue = db->recno_or_queue ;
+ RETVAL->primary_recno_or_queue = db->primary_recno_or_queue ;
RETVAL->cds_enabled = db->cds_enabled ;
RETVAL->filename = my_strdup(db->filename) ;
RETVAL->compare = db->compare ;
@@ -3506,7 +3806,7 @@ cu_c_pget(db, key, pkey, data, flags=0)
int flags
BerkeleyDB::Cursor db
DBTKEY_B key
- DBTKEY_B pkey = NO_INIT
+ DBTKEY_Bpr pkey = NO_INIT
DBT_B data
CODE:
#ifndef AT_LEAST_DB_3_3
@@ -3707,6 +4007,53 @@ status(tid)
RETVAL
int
+set_timeout(txn, timeout, flags=0)
+ BerkeleyDB::Txn txn
+ db_timeout_t timeout
+ u_int32_t flags
+ INIT:
+ ckActive_Transaction(txn->active) ;
+ CODE:
+#ifndef AT_LEAST_DB_4
+ softCrash("$env->set_timeout needs Berkeley DB 4.x or better") ;
+#else
+ RETVAL = txn->Status = txn->txn->set_timeout(txn->txn, timeout, flags);
+#endif
+ OUTPUT:
+ RETVAL
+
+int
+set_tx_max(txn, max)
+ BerkeleyDB::Txn txn
+ u_int32_t max
+ INIT:
+ ckActive_Transaction(txn->active) ;
+ CODE:
+#ifndef AT_LEAST_DB_2_3
+ softCrash("$env->set_tx_max needs Berkeley DB 2_3.x or better") ;
+#else
+ RETVAL = txn->Status = txn->txn->set_tx_max(txn->txn, max);
+#endif
+ OUTPUT:
+ RETVAL
+
+int
+get_tx_max(txn, max)
+ BerkeleyDB::Txn txn
+ u_int32_t max = NO_INIT
+ INIT:
+ ckActive_Transaction(txn->active) ;
+ CODE:
+#ifndef AT_LEAST_DB_2_3
+ softCrash("$env->get_tx_max needs Berkeley DB 2_3.x or better") ;
+#else
+ RETVAL = txn->Status = txn->txn->get_tx_max(txn->txn, &max);
+#endif
+ OUTPUT:
+ RETVAL
+ max
+
+int
_DESTROY(tid)
BerkeleyDB::Txn tid
CODE:
diff --git a/db/perl/BerkeleyDB/Changes b/db/perl/BerkeleyDB/Changes
index 8f3718a7f..3f27687a8 100644
--- a/db/perl/BerkeleyDB/Changes
+++ b/db/perl/BerkeleyDB/Changes
@@ -1,5 +1,44 @@
Revision history for Perl extension BerkeleyDB.
+0.30 11th Sept 2006
+
+ * Fixed queue test harness for Berkeley DB 4.5 compliance
+
+ * Added $env->lsn_reset, $txn->set_timeout, $env->set_timeout &
+ $env->get_timeout, $txn->set_tx_max, $txn->get_tx_max
+
+0.29 2nd July 2006
+
+ * Fixes for cursor get from secondary where primary os recno.
+
+ * Added db_compact
+
+0.28 11th June 2006
+
+ * Fixes for secondary where primary is recno.
+
+ * GET_BOTH_RANGE wasn't working. It is now.
+
+ * Added FreeBSD hints to README - patch supplied by David Landgren
+ in #17675 from rt.cpan.org
+
+0.27 1st Novemver 2005
+
+ * Added support for Berkeley DB 4.4
+
+ * Fixed secondary key issue with recno databases
+
+ * Added libscan to Makefile.PL
+
+ * Fixed a problem in t/subdb.t that meant it hung on Win32.
+
+ * The logic for set_mutexlocks was inverted when using Berkeley DB 4.x
+ Bug spotted by Zefram <zefram@fysh.org>
+
+ * Transactional rename/remove added.
+ Patch supplied by Zefram <zefram@fysh.org>
+
+
0.26 10th October 2004
* Changed to allow Building with Berkeley DB 4.3
diff --git a/db/perl/BerkeleyDB/MANIFEST b/db/perl/BerkeleyDB/MANIFEST
index 7c090a175..979e790f7 100644
--- a/db/perl/BerkeleyDB/MANIFEST
+++ b/db/perl/BerkeleyDB/MANIFEST
@@ -24,6 +24,7 @@ t/db-3.0.t
t/db-3.1.t
t/db-3.2.t
t/db-3.3.t
+t/db-4.4.t
t/destroy.t
t/encrypt.t
t/env.t
@@ -43,6 +44,8 @@ t/subdb.t
t/txn.t
t/unknown.t
t/util.pm
+t/Test/More.pm
+t/Test/Builder.pm
Todo
typemap
patches/5.004
diff --git a/db/perl/BerkeleyDB/META.yml b/db/perl/BerkeleyDB/META.yml
index 3b205c9ce..dd6a0e25b 100644
--- a/db/perl/BerkeleyDB/META.yml
+++ b/db/perl/BerkeleyDB/META.yml
@@ -1,7 +1,7 @@
# 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: 0.30
version_from: BerkeleyDB.pm
installdirs: site
requires:
diff --git a/db/perl/BerkeleyDB/Makefile.PL b/db/perl/BerkeleyDB/Makefile.PL
index 0c926a394..747d6e72c 100644
--- a/db/perl/BerkeleyDB/Makefile.PL
+++ b/db/perl/BerkeleyDB/Makefile.PL
@@ -67,6 +67,19 @@ WriteMakefile(
);
+sub MY::libscan
+{
+ my $self = shift ;
+ my $path = shift ;
+
+ return undef
+ if $path =~ /(~|\.bak)$/ ||
+ $path =~ /^\..*\.swp$/ ;
+
+ return $path;
+}
+
+
sub MY::postamble {
'
$(NAME).pod: $(NAME).pod.P t/examples.t.T t/examples3.t.T mkpod
diff --git a/db/perl/BerkeleyDB/README b/db/perl/BerkeleyDB/README
index 3c08d2c82..0e8735568 100644
--- a/db/perl/BerkeleyDB/README
+++ b/db/perl/BerkeleyDB/README
@@ -1,12 +1,12 @@
- BerkeleyDB
+ BerkeleyDB
- Version 0.26
+ Version 0.30
- 10th Oct 2004
+ 11th Sept 2006
- Copyright (c) 1997-2004 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.
+ Copyright (c) 1997-2006 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.
DESCRIPTION
@@ -58,8 +58,11 @@ be relatively straightforward.
Step 1 : If you are running Solaris 2.5, 2.7 or HP-UX 10 read either
the Solaris Notes or HP-UX Notes sections below.
- If you are running Linux please read the Linux Notes section
+ If you are running Linux please read the Linux Notes section
before proceeding.
+ If you are running FreeBSD read the FreeBSD Notes section
+ below.
+
Step 2 : Edit the file config.in to suit you local installation.
Instructions are given in the file.
@@ -563,6 +566,33 @@ following steps should do the trick:
3: Build and install the Berkeley DB distribution as usual.
+FreeBSD Notes
+-------------
+
+On FreeBSD 4.x through 6.x, the default db.h is for version 1. The build
+will fail with an error similar to:
+
+BerkeleyDB.xs:74: #error db.h is from Berkeley DB 1.x - need at least
+Berkeley DB 2.6.4
+
+Later versions of Berkeley DB are usually installed from ports.
+The available versions can be found by running a find(1) command:
+
+ % find /usr/local/include -name 'db.h'
+ /usr/local/include/db3/db.h
+ /usr/local/include/db4/db.h
+ /usr/local/include/db41/db.h
+ /usr/local/include/db42/db.h
+ /usr/local/include/db43/db.h
+
+The desired version of the library must be specified on the command line or
+via the config.in file. Make sure both values point to the same version:
+
+ INCLUDE = /usr/local/include/db43
+ LIB = /usr/local/lib/db43
+
+
+
FEEDBACK
--------
diff --git a/db/perl/BerkeleyDB/constants.h b/db/perl/BerkeleyDB/constants.h
index 98dc5eb16..786df3719 100644
--- a/db/perl/BerkeleyDB/constants.h
+++ b/db/perl/BerkeleyDB/constants.h
@@ -693,9 +693,9 @@ constant_11 (pTHX_ const char *name, IV *iv_return) {
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_SEQ_WRAP DB_SNAPSHOT DB_STAT_ALL DB_TRUNCATE DB_TXNMAGIC DB_TXN_LOCK
- DB_TXN_REDO DB_TXN_SYNC DB_TXN_UNDO DB_WRNOSYNC DB_YIELDCPU */
+ DB_OK_BTREE DB_OK_QUEUE DB_OK_RECNO DB_POSITION DB_QAMMAGIC DB_REGISTER
+ DB_RENUMBER DB_SEQ_WRAP DB_SNAPSHOT DB_STAT_ALL 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':
@@ -1064,6 +1064,15 @@ constant_11 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REGISTER", 11)) {
+ /* ^ */
+#ifdef DB_REGISTER
+ *iv_return = DB_REGISTER;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'U':
if (memEQ(name, "DB_NOTFOUND", 11)) {
@@ -1565,72 +1574,82 @@ constant_13 (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_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_ABORT DB_LOCK_NORUN DB_LOCK_RIW_N
- DB_LOCK_TRADE DB_LOGVERSION DB_LOG_CHKPNT DB_LOG_COMMIT DB_LOG_LOCKED
- DB_LOG_NOCOPY DB_LOG_RESEND DB_MPOOL_FREE 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_debug_FLAG
- DB_user_BEGIN */
- /* Offset 5 gives the best switch position. */
- switch (name[5]) {
+ DB_DONOTINDEX DB_ENV_CREATE DB_ENV_NOMMAP DB_ENV_THREAD DB_FREE_SPACE
+ DB_HASHOLDVER DB_INCOMPLETE DB_INIT_MPOOL DB_LOCK_ABORT DB_LOCK_NORUN
+ DB_LOCK_RIW_N DB_LOCK_TRADE DB_LOGVERSION DB_LOG_CHKPNT DB_LOG_COMMIT
+ DB_LOG_LOCKED DB_LOG_NOCOPY DB_LOG_RESEND DB_MPOOL_FREE 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_IGNORE 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_debug_FLAG DB_user_BEGIN REP_CONF_BULK */
+ /* Offset 8 gives the best switch position. */
+ switch (name[8]) {
case 'A':
- if (memEQ(name, "DB_STAT_CLEAR", 13)) {
- /* ^ */
-#ifdef DB_STAT_CLEAR
- *iv_return = DB_STAT_CLEAR;
+ if (memEQ(name, "DB_LOCK_ABORT", 13)) {
+ /* ^ */
+#ifdef DB_LOCK_ABORT
+ *iv_return = DB_LOCK_ABORT;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'C':
- if (memEQ(name, "DB_INCOMPLETE", 13)) {
- /* ^ */
-#ifdef DB_INCOMPLETE
- *iv_return = DB_INCOMPLETE;
+ if (memEQ(name, "DB_PR_HEADERS", 13)) {
+ /* ^ */
+#ifdef DB_PR_HEADERS
+ *iv_return = DB_PR_HEADERS;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOCK_ABORT", 13)) {
- /* ^ */
-#ifdef DB_LOCK_ABORT
- *iv_return = DB_LOCK_ABORT;
+ if (memEQ(name, "DB_RDWRMASTER", 13)) {
+ /* ^ */
+#ifdef DB_RDWRMASTER
+ *iv_return = DB_RDWRMASTER;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOCK_NORUN", 13)) {
- /* ^ */
-#ifdef DB_LOCK_NORUN
- *iv_return = DB_LOCK_NORUN;
+ if (memEQ(name, "DB_REP_MASTER", 13)) {
+ /* ^ */
+#ifdef DB_REP_MASTER
+ *iv_return = DB_REP_MASTER;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOCK_RIW_N", 13)) {
- /* ^ */
-#ifdef DB_LOCK_RIW_N
- *iv_return = DB_LOCK_RIW_N;
+ break;
+ case 'B':
+ 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
}
- if (memEQ(name, "DB_LOCK_TRADE", 13)) {
- /* ^ */
-#if (DB_VERSION_MAJOR > 4) || \
- (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 1) || \
- (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 1 && \
- DB_VERSION_PATCH >= 24)
- *iv_return = DB_LOCK_TRADE;
+ break;
+ case 'C':
+ if (memEQ(name, "DB_STAT_CLEAR", 13)) {
+ /* ^ */
+#ifdef DB_STAT_CLEAR
+ *iv_return = DB_STAT_CLEAR;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'D':
+ if (memEQ(name, "DB_MUTEXDEBUG", 13)) {
+ /* ^ */
+#ifdef DB_MUTEXDEBUG
+ *iv_return = DB_MUTEXDEBUG;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -1638,19 +1657,19 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'E':
- if (memEQ(name, "DB_CHECKPOINT", 13)) {
- /* ^ */
-#ifdef DB_CHECKPOINT
- *iv_return = DB_CHECKPOINT;
+ if (memEQ(name, "DB_LOG_RESEND", 13)) {
+ /* ^ */
+#ifdef DB_LOG_RESEND
+ *iv_return = DB_LOG_RESEND;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_PREV_NODUP", 13)) {
- /* ^ */
-#ifdef DB_PREV_NODUP
- *iv_return = DB_PREV_NODUP;
+ if (memEQ(name, "DB_NOORDERCHK", 13)) {
+ /* ^ */
+#ifdef DB_NOORDERCHK
+ *iv_return = DB_NOORDERCHK;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -1658,26 +1677,28 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'G':
- if (memEQ(name, "DB_AGGRESSIVE", 13)) {
- /* ^ */
-#ifdef DB_AGGRESSIVE
- *iv_return = DB_AGGRESSIVE;
+ if (memEQ(name, "DB_REP_IGNORE", 13)) {
+ /* ^ */
+#ifdef DB_REP_IGNORE
+ *iv_return = DB_REP_IGNORE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOGVERSION", 13)) {
- /* ^ */
-#ifdef DB_LOGVERSION
- *iv_return = DB_LOGVERSION;
+ break;
+ case 'H':
+ if (memEQ(name, "DB_ENV_THREAD", 13)) {
+ /* ^ */
+#ifdef DB_ENV_THREAD
+ *iv_return = DB_ENV_THREAD;
return PERL_constant_ISIV;
#else
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;
@@ -1685,55 +1706,59 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOG_COMMIT", 13)) {
- /* ^ */
-#ifdef DB_LOG_COMMIT
- *iv_return = DB_LOG_COMMIT;
+ break;
+ case 'I':
+ if (memEQ(name, "DB_DONOTINDEX", 13)) {
+ /* ^ */
+#ifdef DB_DONOTINDEX
+ *iv_return = DB_DONOTINDEX;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOG_LOCKED", 13)) {
- /* ^ */
-#ifdef DB_LOG_LOCKED
- *iv_return = DB_LOG_LOCKED;
+ break;
+ case 'L':
+ if (memEQ(name, "DB_HASHOLDVER", 13)) {
+ /* ^ */
+#ifdef DB_HASHOLDVER
+ *iv_return = DB_HASHOLDVER;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOG_NOCOPY", 13)) {
- /* ^ */
-#ifdef DB_LOG_NOCOPY
- *iv_return = DB_LOG_NOCOPY;
+ if (memEQ(name, "DB_MUTEXLOCKS", 13)) {
+ /* ^ */
+#ifdef DB_MUTEXLOCKS
+ *iv_return = DB_MUTEXLOCKS;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOG_RESEND", 13)) {
- /* ^ */
-#ifdef DB_LOG_RESEND
- *iv_return = DB_LOG_RESEND;
+ if (memEQ(name, "DB_REP_CLIENT", 13)) {
+ /* ^ */
+#ifdef DB_REP_CLIENT
+ *iv_return = DB_REP_CLIENT;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_REGISTERED", 13)) {
- /* ^ */
-#ifdef DB_REGISTERED
- *iv_return = DB_REGISTERED;
+ break;
+ case 'M':
+ if (memEQ(name, "DB_BTREEMAGIC", 13)) {
+ /* ^ */
+#ifdef DB_BTREEMAGIC
+ *iv_return = DB_BTREEMAGIC;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'I':
if (memEQ(name, "DB_INIT_MPOOL", 13)) {
- /* ^ */
+ /* ^ */
#ifdef DB_INIT_MPOOL
*iv_return = DB_INIT_MPOOL;
return PERL_constant_ISIV;
@@ -1741,12 +1766,10 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'M':
- if (memEQ(name, "DB_QAMVERSION", 13)) {
- /* ^ */
-#ifdef DB_QAMVERSION
- *iv_return = DB_QAMVERSION;
+ if (memEQ(name, "DB_SYSTEM_MEM", 13)) {
+ /* ^ */
+#ifdef DB_SYSTEM_MEM
+ *iv_return = DB_SYSTEM_MEM;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -1754,37 +1777,37 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'N':
- if (memEQ(name, "DB_DONOTINDEX", 13)) {
- /* ^ */
-#ifdef DB_DONOTINDEX
- *iv_return = DB_DONOTINDEX;
+ if (memEQ(name, "DB_LOCK_NORUN", 13)) {
+ /* ^ */
+#ifdef DB_LOCK_NORUN
+ *iv_return = DB_LOCK_NORUN;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_TXNVERSION", 13)) {
- /* ^ */
-#ifdef DB_TXNVERSION
- *iv_return = DB_TXNVERSION;
+ if (memEQ(name, "DB_NEXT_NODUP", 13)) {
+ /* ^ */
+#ifdef DB_NEXT_NODUP
+ *iv_return = DB_NEXT_NODUP;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_TXN_NOSYNC", 13)) {
- /* ^ */
-#ifdef DB_TXN_NOSYNC
- *iv_return = DB_TXN_NOSYNC;
+ if (memEQ(name, "DB_PREV_NODUP", 13)) {
+ /* ^ */
+#ifdef DB_PREV_NODUP
+ *iv_return = DB_PREV_NODUP;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_TXN_NOWAIT", 13)) {
- /* ^ */
-#ifdef DB_TXN_NOWAIT
- *iv_return = DB_TXN_NOWAIT;
+ if (memEQ(name, "DB_SEQUENTIAL", 13)) {
+ /* ^ */
+#ifdef DB_SEQUENTIAL
+ *iv_return = DB_SEQUENTIAL;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -1792,77 +1815,75 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'O':
- if (memEQ(name, "DB_MPOOL_FREE", 13)) {
- /* ^ */
-#ifdef DB_MPOOL_FREE
- *iv_return = DB_MPOOL_FREE;
+ if (memEQ(name, "DB_ENV_NOMMAP", 13)) {
+ /* ^ */
+#ifdef DB_ENV_NOMMAP
+ *iv_return = DB_ENV_NOMMAP;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_MPOOL_LAST", 13)) {
- /* ^ */
-#ifdef DB_MPOOL_LAST
- *iv_return = DB_MPOOL_LAST;
+ 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_NOORDERCHK", 13)) {
- /* ^ */
-#ifdef DB_NOORDERCHK
- *iv_return = DB_NOORDERCHK;
+ if (memEQ(name, "DB_LOG_LOCKED", 13)) {
+ /* ^ */
+#ifdef DB_LOG_LOCKED
+ *iv_return = DB_LOG_LOCKED;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'P':
- if (memEQ(name, "DB_REP_CLIENT", 13)) {
- /* ^ */
-#ifdef DB_REP_CLIENT
- *iv_return = DB_REP_CLIENT;
+ 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_REP_CREATE", 13)) {
- /* ^ */
-#ifdef DB_REP_CREATE
- *iv_return = DB_REP_CREATE;
+ if (memEQ(name, "DB_TXN_NOSYNC", 13)) {
+ /* ^ */
+#ifdef DB_TXN_NOSYNC
+ *iv_return = DB_TXN_NOSYNC;
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;
+ if (memEQ(name, "DB_TXN_NOWAIT", 13)) {
+ /* ^ */
+#ifdef DB_TXN_NOWAIT
+ *iv_return = DB_TXN_NOWAIT;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_REP_MASTER", 13)) {
- /* ^ */
-#ifdef DB_REP_MASTER
- *iv_return = DB_REP_MASTER;
+ break;
+ case 'P':
+ if (memEQ(name, "DB_CHECKPOINT", 13)) {
+ /* ^ */
+#ifdef DB_CHECKPOINT
+ *iv_return = DB_CHECKPOINT;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'Q':
- if (memEQ(name, "DB_SEQUENTIAL", 13)) {
- /* ^ */
-#ifdef DB_SEQUENTIAL
- *iv_return = DB_SEQUENTIAL;
+ if (memEQ(name, "DB_INCOMPLETE", 13)) {
+ /* ^ */
+#ifdef DB_INCOMPLETE
+ *iv_return = DB_INCOMPLETE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -1870,128 +1891,127 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'R':
- if (memEQ(name, "DB_BTREEMAGIC", 13)) {
- /* ^ */
-#ifdef DB_BTREEMAGIC
- *iv_return = DB_BTREEMAGIC;
+ if (memEQ(name, "DB_ENV_CREATE", 13)) {
+ /* ^ */
+#ifdef DB_ENV_CREATE
+ *iv_return = DB_ENV_CREATE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_DIRECT_LOG", 13)) {
- /* ^ */
-#ifdef DB_DIRECT_LOG
- *iv_return = DB_DIRECT_LOG;
+ if (memEQ(name, "DB_LOCK_RIW_N", 13)) {
+ /* ^ */
+#ifdef DB_LOCK_RIW_N
+ *iv_return = DB_LOCK_RIW_N;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_DIRTY_READ", 13)) {
- /* ^ */
-#ifdef DB_DIRTY_READ
- *iv_return = DB_DIRTY_READ;
+ if (memEQ(name, "DB_LOGVERSION", 13)) {
+ /* ^ */
+#ifdef DB_LOGVERSION
+ *iv_return = DB_LOGVERSION;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_VERIFY_BAD", 13)) {
- /* ^ */
-#ifdef DB_VERIFY_BAD
- *iv_return = DB_VERIFY_BAD;
+ if (memEQ(name, "DB_QAMVERSION", 13)) {
+ /* ^ */
+#ifdef DB_QAMVERSION
+ *iv_return = DB_QAMVERSION;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'S':
- if (memEQ(name, "DB_HASHOLDVER", 13)) {
- /* ^ */
-#ifdef DB_HASHOLDVER
- *iv_return = DB_HASHOLDVER;
+ 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_SYSTEM_MEM", 13)) {
- /* ^ */
-#ifdef DB_SYSTEM_MEM
- *iv_return = DB_SYSTEM_MEM;
+ if (memEQ(name, "DB_TXNVERSION", 13)) {
+ /* ^ */
+#ifdef DB_TXNVERSION
+ *iv_return = DB_TXNVERSION;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'T':
- if (memEQ(name, "DB_MUTEXDEBUG", 13)) {
- /* ^ */
-#ifdef DB_MUTEXDEBUG
- *iv_return = DB_MUTEXDEBUG;
+ case 'S':
+ if (memEQ(name, "DB_AGGRESSIVE", 13)) {
+ /* ^ */
+#ifdef DB_AGGRESSIVE
+ *iv_return = DB_AGGRESSIVE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_MUTEXLOCKS", 13)) {
- /* ^ */
-#ifdef DB_MUTEXLOCKS
- *iv_return = DB_MUTEXLOCKS;
+ if (memEQ(name, "DB_FREE_SPACE", 13)) {
+ /* ^ */
+#ifdef DB_FREE_SPACE
+ *iv_return = DB_FREE_SPACE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'V':
- if (memEQ(name, "DB_ENV_CREATE", 13)) {
- /* ^ */
-#ifdef DB_ENV_CREATE
- *iv_return = DB_ENV_CREATE;
+ 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_ENV_NOMMAP", 13)) {
- /* ^ */
-#ifdef DB_ENV_NOMMAP
- *iv_return = DB_ENV_NOMMAP;
+ break;
+ case 'T':
+ if (memEQ(name, "DB_DIRECT_LOG", 13)) {
+ /* ^ */
+#ifdef DB_DIRECT_LOG
+ *iv_return = DB_DIRECT_LOG;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_ENV_THREAD", 13)) {
- /* ^ */
-#ifdef DB_ENV_THREAD
- *iv_return = DB_ENV_THREAD;
+ if (memEQ(name, "DB_LOCK_TRADE", 13)) {
+ /* ^ */
+#if (DB_VERSION_MAJOR > 4) || \
+ (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 1) || \
+ (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 1 && \
+ DB_VERSION_PATCH >= 24)
+ *iv_return = DB_LOCK_TRADE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'W':
- if (memEQ(name, "DB_RDWRMASTER", 13)) {
- /* ^ */
-#ifdef DB_RDWRMASTER
- *iv_return = DB_RDWRMASTER;
+ if (memEQ(name, "DB_REGISTERED", 13)) {
+ /* ^ */
+#ifdef DB_REGISTERED
+ *iv_return = DB_REGISTERED;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'X':
- if (memEQ(name, "DB_NEXT_NODUP", 13)) {
- /* ^ */
-#ifdef DB_NEXT_NODUP
- *iv_return = DB_NEXT_NODUP;
+ case 'Y':
+ if (memEQ(name, "DB_VERIFY_BAD", 13)) {
+ /* ^ */
+#ifdef DB_VERIFY_BAD
+ *iv_return = DB_VERIFY_BAD;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -1999,19 +2019,35 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
}
break;
case '_':
- if (memEQ(name, "DB_PR_HEADERS", 13)) {
- /* ^ */
-#ifdef DB_PR_HEADERS
- *iv_return = DB_PR_HEADERS;
+ if (memEQ(name, "DB_DIRTY_READ", 13)) {
+ /* ^ */
+#ifdef DB_DIRTY_READ
+ *iv_return = DB_DIRTY_READ;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_MPOOL_FREE", 13)) {
+ /* ^ */
+#ifdef DB_MPOOL_FREE
+ *iv_return = DB_MPOOL_FREE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_MPOOL_LAST", 13)) {
+ /* ^ */
+#ifdef DB_MPOOL_LAST
+ *iv_return = DB_MPOOL_LAST;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'b':
if (memEQ(name, "DB_debug_FLAG", 13)) {
- /* ^ */
+ /* ^ */
#ifdef DB_debug_FLAG
*iv_return = DB_debug_FLAG;
return PERL_constant_ISIV;
@@ -2019,12 +2055,10 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'e':
- if (memEQ(name, "DB_user_BEGIN", 13)) {
- /* ^ */
-#ifdef DB_user_BEGIN
- *iv_return = DB_user_BEGIN;
+ if (memEQ(name, "REP_CONF_BULK", 13)) {
+ /* ^ */
+#ifdef REP_CONF_BULK
+ *iv_return = REP_CONF_BULK;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -2046,9 +2080,10 @@ constant_14 (pTHX_ const char *name, IV *iv_return) {
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_EGENCHG DB_REP_NEWSITE
- DB_REP_NOTPERM DB_REP_UNAVAIL DB_REVSPLITOFF DB_RUNRECOVERY DB_SET_TXN_NOW
- DB_USE_ENVIRON DB_WRITECURSOR DB_XIDDATASIZE */
+ DB_REGION_INIT DB_REGION_NAME DB_RENAMEMAGIC DB_REP_BULKOVF DB_REP_EGENCHG
+ DB_REP_LOCKOUT DB_REP_NEWSITE DB_REP_NOTPERM DB_REP_UNAVAIL DB_REVSPLITOFF
+ DB_RUNRECOVERY DB_SEQ_WRAPPED DB_SET_TXN_NOW DB_USE_ENVIRON DB_WRITECURSOR
+ DB_XIDDATASIZE */
/* Offset 9 gives the best switch position. */
switch (name[9]) {
case 'A':
@@ -2079,6 +2114,15 @@ constant_14 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_SEQ_WRAPPED", 14)) {
+ /* ^ */
+#ifdef DB_SEQ_WRAPPED
+ *iv_return = DB_SEQ_WRAPPED;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_XIDDATASIZE", 14)) {
/* ^ */
#ifdef DB_XIDDATASIZE
@@ -2126,6 +2170,15 @@ constant_14 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REP_LOCKOUT", 14)) {
+ /* ^ */
+#ifdef DB_REP_LOCKOUT
+ *iv_return = DB_REP_LOCKOUT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'D':
if (memEQ(name, "DB_FILE_ID_LEN", 14)) {
@@ -2262,6 +2315,15 @@ constant_14 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REP_BULKOVF", 14)) {
+ /* ^ */
+#ifdef DB_REP_BULKOVF
+ *iv_return = DB_REP_BULKOVF;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'M':
if (memEQ(name, "DB_RENAMEMAGIC", 14)) {
@@ -2532,11 +2594,12 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
DB_LOCK_INHERIT DB_LOCK_NOTHELD DB_LOCK_PUT_ALL DB_LOCK_PUT_OBJ
DB_LOCK_TIMEOUT DB_LOCK_UPGRADE DB_LOG_INMEMORY 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_LOGREADY DB_REP_LOGSONLY DB_REP_NOBUFFER
- DB_REP_OUTDATED DB_REP_PAGEDONE DB_SURPRISE_KID DB_TEST_POSTLOG
- DB_TEST_PREOPEN DB_TXN_LOCK_2PL DB_TXN_LOG_MASK DB_TXN_LOG_REDO
- DB_TXN_LOG_UNDO DB_VERIFY_FATAL */
+ DB_MULTIPLE_KEY DB_MUTEX_THREAD DB_OPFLAGS_MASK DB_ORDERCHKONLY
+ DB_PRIORITY_LOW DB_REGION_MAGIC DB_REP_ANYWHERE DB_REP_LOGREADY
+ DB_REP_LOGSONLY DB_REP_NOBUFFER DB_REP_OUTDATED DB_REP_PAGEDONE
+ DB_SURPRISE_KID DB_TEST_POSTLOG DB_TEST_PREOPEN DB_TXN_LOCK_2PL
+ DB_TXN_LOG_MASK DB_TXN_LOG_REDO DB_TXN_LOG_UNDO DB_VERIFY_FATAL
+ REP_CONF_NOWAIT */
/* Offset 10 gives the best switch position. */
switch (name[10]) {
case 'D':
@@ -2641,6 +2704,15 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_MUTEX_THREAD", 15)) {
+ /* ^ */
+#ifdef DB_MUTEX_THREAD
+ *iv_return = DB_MUTEX_THREAD;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'I':
if (memEQ(name, "DB_ENV_PANIC_OK", 15)) {
@@ -2755,6 +2827,15 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "REP_CONF_NOWAIT", 15)) {
+ /* ^ */
+#ifdef REP_CONF_NOWAIT
+ *iv_return = REP_CONF_NOWAIT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'R':
if (memEQ(name, "DB_BTREEVERSION", 15)) {
@@ -2860,6 +2941,17 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'W':
+ if (memEQ(name, "DB_REP_ANYWHERE", 15)) {
+ /* ^ */
+#ifdef DB_REP_ANYWHERE
+ *iv_return = DB_REP_ANYWHERE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'X':
if (memEQ(name, "DB_MPOOL_EXTENT", 15)) {
/* ^ */
@@ -2940,17 +3032,18 @@ static int
constant_16 (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_CACHED_COUNTS DB_EID_BROADCAST DB_ENV_CDB_ALLDB DB_ENV_DIRECT_DB
- DB_ENV_DSYNC_LOG DB_ENV_NOLOCKING DB_ENV_OVERWRITE DB_ENV_RPCCLIENT
- DB_FCNTL_LOCKING DB_JAVA_CALLBACK DB_LOCK_CONFLICT DB_LOCK_DEADLOCK
- DB_LOCK_MAXLOCKS DB_LOCK_MAXWRITE DB_LOCK_MINLOCKS DB_LOCK_MINWRITE
- DB_LOCK_NOTEXIST DB_LOCK_PUT_READ DB_LOCK_YOUNGEST DB_LOGC_BUF_SIZE
- DB_MPOOL_DISCARD DB_MPOOL_PRIVATE DB_NOSERVER_HOME DB_PAGE_NOTFOUND
- DB_PRIORITY_HIGH DB_RECOVER_FATAL DB_REP_DUPMASTER DB_REP_NEWMASTER
- DB_REP_PERMANENT DB_SECONDARY_BAD DB_SEQ_RANGE_SET DB_TEST_POSTOPEN
+ DB_CACHED_COUNTS DB_COMPACT_FLAGS DB_EID_BROADCAST DB_ENV_CDB_ALLDB
+ DB_ENV_DIRECT_DB DB_ENV_DSYNC_LOG DB_ENV_NOLOCKING DB_ENV_OVERWRITE
+ DB_ENV_RPCCLIENT DB_FCNTL_LOCKING DB_FREELIST_ONLY DB_IMMUTABLE_KEY
+ DB_JAVA_CALLBACK DB_LOCK_CONFLICT DB_LOCK_DEADLOCK DB_LOCK_MAXLOCKS
+ DB_LOCK_MAXWRITE DB_LOCK_MINLOCKS DB_LOCK_MINWRITE DB_LOCK_NOTEXIST
+ DB_LOCK_PUT_READ DB_LOCK_YOUNGEST DB_LOGC_BUF_SIZE DB_MPOOL_DISCARD
+ DB_MPOOL_PRIVATE DB_NOSERVER_HOME DB_PAGE_NOTFOUND DB_PRIORITY_HIGH
+ DB_RECOVER_FATAL DB_REP_DUPMASTER DB_REP_NEWMASTER DB_REP_PERMANENT
+ DB_REP_REREQUEST DB_SECONDARY_BAD DB_SEQ_RANGE_SET DB_TEST_POSTOPEN
DB_TEST_POSTSYNC DB_TXN_LOCK_MASK DB_TXN_OPENFILES DB_VERB_CHKPOINT
- DB_VERB_DEADLOCK DB_VERB_RECOVERY DB_VERB_WAITSFOR DB_VERSION_MAJOR
- DB_VERSION_MINOR DB_VERSION_PATCH DB_VRFY_FLAGMASK */
+ DB_VERB_DEADLOCK DB_VERB_RECOVERY DB_VERB_REGISTER DB_VERB_WAITSFOR
+ DB_VERSION_MAJOR DB_VERSION_MINOR DB_VERSION_PATCH DB_VRFY_FLAGMASK */
/* Offset 10 gives the best switch position. */
switch (name[10]) {
case 'A':
@@ -3030,6 +3123,15 @@ constant_16 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REP_REREQUEST", 16)) {
+ /* ^ */
+#ifdef DB_REP_REREQUEST
+ *iv_return = DB_REP_REREQUEST;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'F':
if (memEQ(name, "DB_LOGC_BUF_SIZE", 16)) {
@@ -3052,6 +3154,15 @@ constant_16 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_VERB_REGISTER", 16)) {
+ /* ^ */
+#ifdef DB_VERB_REGISTER
+ *iv_return = DB_VERB_REGISTER;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'I':
if (memEQ(name, "DB_MPOOL_DISCARD", 16)) {
@@ -3094,6 +3205,15 @@ constant_16 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'L':
+ if (memEQ(name, "DB_IMMUTABLE_KEY", 16)) {
+ /* ^ */
+#ifdef DB_IMMUTABLE_KEY
+ *iv_return = DB_IMMUTABLE_KEY;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_JAVA_CALLBACK", 16)) {
/* ^ */
#ifdef DB_JAVA_CALLBACK
@@ -3262,6 +3382,15 @@ constant_16 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'T':
+ if (memEQ(name, "DB_FREELIST_ONLY", 16)) {
+ /* ^ */
+#ifdef DB_FREELIST_ONLY
+ *iv_return = DB_FREELIST_ONLY;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_LOCK_NOTEXIST", 16)) {
/* ^ */
#ifdef DB_LOCK_NOTEXIST
@@ -3339,6 +3468,15 @@ constant_16 (pTHX_ const char *name, IV *iv_return) {
}
break;
case '_':
+ if (memEQ(name, "DB_COMPACT_FLAGS", 16)) {
+ /* ^ */
+#ifdef DB_COMPACT_FLAGS
+ *iv_return = DB_COMPACT_FLAGS;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_ENV_CDB_ALLDB", 16)) {
/* ^ */
#ifdef DB_ENV_CDB_ALLDB
@@ -3395,10 +3533,10 @@ 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_AUTOREMOVE DB_LOG_SILENT_ERR DB_NO_AUTO_COMMIT DB_RPC_SERVERPROG
- DB_RPC_SERVERVERS DB_STAT_LOCK_CONF DB_STAT_MEMP_HASH DB_STAT_SUBSYSTEM
- DB_TEST_ELECTINIT DB_TEST_ELECTSEND DB_TEST_PRERENAME DB_TXN_POPENFILES
- DB_VERSION_STRING */
+ DB_LOG_AUTOREMOVE DB_LOG_SILENT_ERR DB_NO_AUTO_COMMIT DB_READ_COMMITTED
+ DB_RPC_SERVERPROG DB_RPC_SERVERVERS DB_STAT_LOCK_CONF DB_STAT_MEMP_HASH
+ DB_STAT_SUBSYSTEM DB_TEST_ELECTINIT DB_TEST_ELECTSEND DB_TEST_PRERENAME
+ DB_TXN_POPENFILES DB_VERSION_STRING REP_CONF_AUTOINIT */
/* Offset 13 gives the best switch position. */
switch (name[13]) {
case 'A':
@@ -3465,6 +3603,15 @@ constant_17 (pTHX_ const char *name, IV *iv_return, const char **pv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "REP_CONF_AUTOINIT", 17)) {
+ /* ^ */
+#ifdef REP_CONF_AUTOINIT
+ *iv_return = REP_CONF_AUTOINIT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'L':
if (memEQ(name, "DB_ENV_STANDALONE", 17)) {
@@ -3577,6 +3724,17 @@ constant_17 (pTHX_ const char *name, IV *iv_return, const char **pv_return) {
#endif
}
break;
+ case 'T':
+ if (memEQ(name, "DB_READ_COMMITTED", 17)) {
+ /* ^ */
+#ifdef DB_READ_COMMITTED
+ *iv_return = DB_READ_COMMITTED;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'V':
if (memEQ(name, "DB_RPC_SERVERVERS", 17)) {
/* ^ */
@@ -3628,10 +3786,11 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
DB_ALREADY_ABORTED DB_DURABLE_UNKNOWN DB_ENV_AUTO_COMMIT
DB_ENV_OPEN_CALLED DB_ENV_REGION_INIT DB_LOCK_NOTGRANTED
DB_LOG_BUFFER_FULL DB_LOG_NOT_DURABLE DB_MPOOL_NEW_GROUP
- DB_PR_RECOVERYTEST DB_REP_HANDLE_DEAD DB_REP_STARTUPDONE
- DB_SET_TXN_TIMEOUT DB_TEST_ELECTVOTE1 DB_TEST_ELECTVOTE2
- DB_TEST_ELECTWAIT1 DB_TEST_ELECTWAIT2 DB_TEST_POSTRENAME
- DB_TEST_PREDESTROY DB_TIME_NOTGRANTED DB_TXN_NOT_DURABLE */
+ DB_MUTEX_ALLOCATED DB_PR_RECOVERYTEST DB_REP_HANDLE_DEAD
+ DB_REP_STARTUPDONE DB_SEQUENCE_OLDVER DB_SET_TXN_TIMEOUT
+ DB_TEST_ELECTVOTE1 DB_TEST_ELECTVOTE2 DB_TEST_ELECTWAIT1
+ DB_TEST_ELECTWAIT2 DB_TEST_POSTRENAME DB_TEST_PREDESTROY
+ DB_TIME_NOTGRANTED DB_TXN_NOT_DURABLE */
/* Offset 13 gives the best switch position. */
switch (name[13]) {
case 'A':
@@ -3663,6 +3822,17 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'C':
+ if (memEQ(name, "DB_MUTEX_ALLOCATED", 18)) {
+ /* ^ */
+#ifdef DB_MUTEX_ALLOCATED
+ *iv_return = DB_MUTEX_ALLOCATED;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'E':
if (memEQ(name, "DB_TEST_POSTRENAME", 18)) {
/* ^ */
@@ -3696,6 +3866,17 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'L':
+ if (memEQ(name, "DB_SEQUENCE_OLDVER", 18)) {
+ /* ^ */
+#ifdef DB_SEQUENCE_OLDVER
+ *iv_return = DB_SEQUENCE_OLDVER;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'M':
if (memEQ(name, "DB_SET_TXN_TIMEOUT", 18)) {
/* ^ */
@@ -3858,12 +4039,13 @@ constant_19 (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_LOG_INMEMORY DB_ENV_REP_LOGSONLY DB_LOCK_FREE_LOCKER
- DB_LOCK_GET_TIMEOUT DB_LOCK_SET_TIMEOUT DB_PRIORITY_DEFAULT
- DB_REP_HOLDELECTION DB_SEQUENCE_VERSION DB_SET_LOCK_TIMEOUT
- DB_STAT_LOCK_PARAMS DB_TEST_POSTDESTROY DB_TEST_POSTLOGMETA
- DB_TEST_SUBDB_LOCKS DB_TXN_FORWARD_ROLL DB_TXN_LOG_UNDOREDO
- DB_TXN_WRITE_NOSYNC DB_UPDATE_SECONDARY DB_USE_ENVIRON_ROOT
- DB_VERB_REPLICATION DB_VERSION_MISMATCH */
+ DB_LOCK_GET_TIMEOUT DB_LOCK_SET_TIMEOUT DB_MUTEX_SELF_BLOCK
+ DB_PRIORITY_DEFAULT DB_READ_UNCOMMITTED DB_REP_HOLDELECTION
+ DB_SEQUENCE_VERSION DB_SET_LOCK_TIMEOUT DB_STAT_LOCK_PARAMS
+ DB_TEST_POSTDESTROY DB_TEST_POSTLOGMETA DB_TEST_SUBDB_LOCKS
+ DB_TXN_FORWARD_ROLL DB_TXN_LOG_UNDOREDO DB_TXN_WRITE_NOSYNC
+ DB_UPDATE_SECONDARY DB_USE_ENVIRON_ROOT DB_VERB_REPLICATION
+ DB_VERSION_MISMATCH */
/* Offset 9 gives the best switch position. */
switch (name[9]) {
case 'C':
@@ -3961,6 +4143,15 @@ constant_19 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'N':
+ if (memEQ(name, "DB_READ_UNCOMMITTED", 19)) {
+ /* ^ */
+#ifdef DB_READ_UNCOMMITTED
+ *iv_return = DB_READ_UNCOMMITTED;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_VERSION_MISMATCH", 19)) {
/* ^ */
#ifdef DB_VERSION_MISMATCH
@@ -4034,6 +4225,17 @@ constant_19 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'S':
+ if (memEQ(name, "DB_MUTEX_SELF_BLOCK", 19)) {
+ /* ^ */
+#ifdef DB_MUTEX_SELF_BLOCK
+ *iv_return = DB_MUTEX_SELF_BLOCK;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'T':
if (memEQ(name, "DB_PRIORITY_DEFAULT", 19)) {
/* ^ */
@@ -4091,7 +4293,7 @@ constant_20 (pTHX_ const char *name, IV *iv_return) {
here. However, subsequent manual editing may have added or removed some.
DB_CXX_NO_EXCEPTIONS DB_LOGFILEID_INVALID DB_PANIC_ENVIRONMENT
DB_PRIORITY_VERY_LOW DB_STAT_LOCK_LOCKERS DB_STAT_LOCK_OBJECTS
- DB_TXN_BACKWARD_ROLL DB_TXN_LOCK_OPTIMIST */
+ DB_TXN_BACKWARD_ROLL DB_TXN_LOCK_OPTIMIST REP_CONF_DELAYCLIENT */
/* Offset 15 gives the best switch position. */
switch (name[15]) {
case 'C':
@@ -4127,6 +4329,17 @@ constant_20 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'L':
+ if (memEQ(name, "REP_CONF_DELAYCLIENT", 20)) {
+ /* ^ */
+#ifdef REP_CONF_DELAYCLIENT
+ *iv_return = REP_CONF_DELAYCLIENT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'N':
if (memEQ(name, "DB_PANIC_ENVIRONMENT", 20)) {
/* ^ */
@@ -4196,8 +4409,8 @@ 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_ENV_LOG_AUTOREMOVE DB_LOCK_UPGRADE_WRITE DB_PRIORITY_VERY_HIGH
- DB_TXN_BACKWARD_ALLOC */
+ DB_ENV_LOG_AUTOREMOVE DB_LOCK_UPGRADE_WRITE DB_MUTEX_LOGICAL_LOCK
+ DB_PRIORITY_VERY_HIGH DB_TXN_BACKWARD_ALLOC */
/* Offset 4 gives the best switch position. */
switch (name[4]) {
case 'N':
@@ -4239,6 +4452,17 @@ constant_21 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'U':
+ if (memEQ(name, "DB_MUTEX_LOGICAL_LOCK", 21)) {
+ /* ^ */
+#ifdef DB_MUTEX_LOGICAL_LOCK
+ *iv_return = DB_MUTEX_LOGICAL_LOCK;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'X':
if (memEQ(name, "DB_TXN_BACKWARD_ALLOC", 21)) {
/* ^ */
@@ -4261,48 +4485,59 @@ 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_OPTIMISTI", 21)) {
- /* C */
-#ifdef DB_TXN_LOCK_OPTIMISTIC
- *iv_return = DB_TXN_LOCK_OPTIMISTIC;
+ DB_ASSOC_IMMUTABLE_KEY DB_ENV_RPCCLIENT_GIVEN DB_ENV_TIME_NOTGRANTED
+ DB_ENV_TXN_NOT_DURABLE DB_TXN_LOCK_OPTIMISTIC */
+ /* Offset 17 gives the best switch position. */
+ switch (name[17]) {
+ case 'A':
+ 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 'D':
- if (memEQ(name, "DB_ENV_TIME_NOTGRANTE", 21)) {
- /* D */
-#ifdef DB_ENV_TIME_NOTGRANTED
- *iv_return = DB_ENV_TIME_NOTGRANTED;
+ case 'E':
+ if (memEQ(name, "DB_ASSOC_IMMUTABLE_KEY", 22)) {
+ /* ^ */
+#ifdef DB_ASSOC_IMMUTABLE_KEY
+ *iv_return = DB_ASSOC_IMMUTABLE_KEY;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'E':
- if (memEQ(name, "DB_ENV_TXN_NOT_DURABL", 21)) {
- /* E */
-#ifdef DB_ENV_TXN_NOT_DURABLE
- *iv_return = DB_ENV_TXN_NOT_DURABLE;
+ case 'G':
+ 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;
- case 'N':
- if (memEQ(name, "DB_ENV_RPCCLIENT_GIVE", 21)) {
- /* N */
-#ifdef DB_ENV_RPCCLIENT_GIVEN
- *iv_return = DB_ENV_RPCCLIENT_GIVEN;
+ case 'I':
+ 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 'R':
+ 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;
@@ -4326,36 +4561,37 @@ 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
-#!/usr/bin/perl5.8.3 -w
+#!/usr/bin/perl5.8.6 -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_ARCH_REMOVE DB_AUTO_COMMIT DB_BEFORE DB_BTREEMAGIC
- DB_BTREEOLDVER DB_BTREEVERSION DB_BUFFER_SMALL 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_DEGREE_2 DB_DELETED
- DB_DELIMITER DB_DIRECT DB_DIRECT_DB DB_DIRECT_LOG DB_DIRTY_READ
- DB_DONOTINDEX DB_DSYNC_LOG DB_DUP DB_DUPCURSOR DB_DUPSORT
- DB_DURABLE_UNKNOWN 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_DSYNC_LOG DB_ENV_FATAL DB_ENV_LOCKDOWN
- DB_ENV_LOCKING DB_ENV_LOGGING DB_ENV_LOG_AUTOREMOVE
- DB_ENV_LOG_INMEMORY 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_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_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_ARCH_REMOVE DB_ASSOC_IMMUTABLE_KEY DB_AUTO_COMMIT DB_BEFORE
+ DB_BTREEMAGIC DB_BTREEOLDVER DB_BTREEVERSION DB_BUFFER_SMALL
+ DB_CACHED_COUNTS DB_CDB_ALLDB DB_CHECKPOINT DB_CHKSUM
+ DB_CHKSUM_SHA1 DB_CLIENT DB_CL_WRITER DB_COMMIT DB_COMPACT_FLAGS
+ DB_CONSUME DB_CONSUME_WAIT DB_CREATE DB_CURLSN DB_CURRENT
+ DB_CXX_NO_EXCEPTIONS DB_DEGREE_2 DB_DELETED DB_DELIMITER
+ DB_DIRECT DB_DIRECT_DB DB_DIRECT_LOG DB_DIRTY_READ DB_DONOTINDEX
+ DB_DSYNC_LOG DB_DUP DB_DUPCURSOR DB_DUPSORT DB_DURABLE_UNKNOWN
+ 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_DSYNC_LOG DB_ENV_FATAL DB_ENV_LOCKDOWN DB_ENV_LOCKING
+ DB_ENV_LOGGING DB_ENV_LOG_AUTOREMOVE DB_ENV_LOG_INMEMORY
+ 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_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_FILEOPEN DB_FILE_ID_LEN DB_FIRST DB_FIXEDLEN DB_FLUSH
+ DB_FORCE DB_FREELIST_ONLY DB_FREE_SPACE 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_IMMUTABLE_KEY
DB_INCOMPLETE DB_INIT_CDB DB_INIT_LOCK DB_INIT_LOG DB_INIT_MPOOL
DB_INIT_REP DB_INIT_TXN DB_INORDER DB_JAVA_CALLBACK DB_JOINENV
DB_JOIN_ITEM DB_JOIN_NOSORT DB_KEYEMPTY DB_KEYEXIST DB_KEYFIRST
@@ -4375,29 +4611,33 @@ my @names = (qw(DB_AFTER DB_AGGRESSIVE DB_ALREADY_ABORTED DB_APPEND
DB_MPOOL_CREATE DB_MPOOL_DIRTY DB_MPOOL_DISCARD DB_MPOOL_EXTENT
DB_MPOOL_FREE 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
- DB_PRIVATE DB_PR_HEADERS DB_PR_PAGE DB_PR_RECOVERYTEST
- DB_QAMMAGIC DB_QAMOLDVER DB_QAMVERSION DB_RDONLY DB_RDWRMASTER
- 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_MULTIPLE_KEY DB_MUTEXDEBUG DB_MUTEXLOCKS DB_MUTEX_ALLOCATED
+ DB_MUTEX_LOGICAL_LOCK DB_MUTEX_SELF_BLOCK DB_MUTEX_THREAD
+ 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 DB_PRIVATE DB_PR_HEADERS
+ DB_PR_PAGE DB_PR_RECOVERYTEST DB_QAMMAGIC DB_QAMOLDVER
+ DB_QAMVERSION DB_RDONLY DB_RDWRMASTER DB_READ_COMMITTED
+ DB_READ_UNCOMMITTED 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_REGISTER DB_REGISTERED
+ DB_RENAMEMAGIC DB_RENUMBER DB_REP_ANYWHERE DB_REP_BULKOVF
DB_REP_CLIENT DB_REP_CREATE DB_REP_DUPMASTER DB_REP_EGENCHG
- DB_REP_HANDLE_DEAD DB_REP_HOLDELECTION DB_REP_ISPERM
- DB_REP_LOGREADY DB_REP_LOGSONLY DB_REP_MASTER DB_REP_NEWMASTER
- DB_REP_NEWSITE DB_REP_NOBUFFER DB_REP_NOTPERM DB_REP_OUTDATED
- DB_REP_PAGEDONE DB_REP_PERMANENT DB_REP_STARTUPDONE
- DB_REP_UNAVAIL DB_REVSPLITOFF DB_RMW DB_RPCCLIENT
- DB_RPC_SERVERPROG DB_RPC_SERVERVERS DB_RUNRECOVERY DB_SALVAGE
- DB_SECONDARY_BAD DB_SEQUENCE_VERSION DB_SEQUENTIAL DB_SEQ_DEC
- DB_SEQ_INC DB_SEQ_RANGE_SET DB_SEQ_WRAP DB_SET
+ DB_REP_HANDLE_DEAD DB_REP_HOLDELECTION DB_REP_IGNORE
+ DB_REP_ISPERM DB_REP_LOCKOUT DB_REP_LOGREADY DB_REP_LOGSONLY
+ DB_REP_MASTER DB_REP_NEWMASTER DB_REP_NEWSITE DB_REP_NOBUFFER
+ DB_REP_NOTPERM DB_REP_OUTDATED DB_REP_PAGEDONE DB_REP_PERMANENT
+ DB_REP_REREQUEST DB_REP_STARTUPDONE DB_REP_UNAVAIL
+ DB_REVSPLITOFF DB_RMW DB_RPCCLIENT DB_RPC_SERVERPROG
+ DB_RPC_SERVERVERS DB_RUNRECOVERY DB_SALVAGE DB_SECONDARY_BAD
+ DB_SEQUENCE_OLDVER DB_SEQUENCE_VERSION DB_SEQUENTIAL DB_SEQ_DEC
+ DB_SEQ_INC DB_SEQ_RANGE_SET DB_SEQ_WRAP DB_SEQ_WRAPPED DB_SET
DB_SET_LOCK_TIMEOUT DB_SET_RANGE DB_SET_RECNO DB_SET_TXN_NOW
DB_SET_TXN_TIMEOUT DB_SNAPSHOT DB_STAT_ALL DB_STAT_CLEAR
DB_STAT_LOCK_CONF DB_STAT_LOCK_LOCKERS DB_STAT_LOCK_OBJECTS
@@ -4416,12 +4656,14 @@ my @names = (qw(DB_AFTER DB_AGGRESSIVE DB_ALREADY_ABORTED DB_APPEND
DB_TXN_NOT_DURABLE DB_TXN_NOWAIT DB_TXN_REDO DB_TXN_SYNC
DB_TXN_UNDO DB_TXN_WRITE_NOSYNC DB_UNREF 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_MISMATCH
- DB_VERSION_PATCH DB_VRFY_FLAGMASK DB_WRITECURSOR DB_WRITELOCK
- DB_WRITEOPEN DB_WRNOSYNC DB_XA_CREATE DB_XIDDATASIZE DB_YIELDCPU
- DB_debug_FLAG DB_user_BEGIN),
+ DB_VERB_DEADLOCK DB_VERB_RECOVERY DB_VERB_REGISTER
+ DB_VERB_REPLICATION DB_VERB_WAITSFOR DB_VERIFY DB_VERIFY_BAD
+ DB_VERIFY_FATAL DB_VERSION_MAJOR DB_VERSION_MINOR
+ DB_VERSION_MISMATCH DB_VERSION_PATCH DB_VRFY_FLAGMASK
+ DB_WRITECURSOR DB_WRITELOCK DB_WRITEOPEN DB_WRNOSYNC
+ DB_XA_CREATE DB_XIDDATASIZE DB_YIELDCPU DB_debug_FLAG
+ DB_user_BEGIN REP_CONF_AUTOINIT REP_CONF_BULK
+ REP_CONF_DELAYCLIENT REP_CONF_NOWAIT),
{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 >= 3)\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 >= 3)\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 >= 3)\n", "#endif\n"]},
diff --git a/db/perl/BerkeleyDB/mkconsts b/db/perl/BerkeleyDB/mkconsts
index 0383378e4..2d6a7e152 100644
--- a/db/perl/BerkeleyDB/mkconsts
+++ b/db/perl/BerkeleyDB/mkconsts
@@ -668,7 +668,7 @@ use constant IGNORE => 'ignore' ;
TXN_RESTORED => IGNORE,
#########
- # 4.3.12
+ # 4.3.21
#########
DBC_DEGREE_2 => IGNORE,
@@ -707,6 +707,49 @@ use constant IGNORE => 'ignore' ;
TXN_DEADLOCK => IGNORE,
TXN_DEGREE_2 => IGNORE,
+ #########
+ # 4.3.28
+ #########
+
+ DB_SEQUENCE_OLDVER => DEFINE,
+
+ #########
+ # 4.4.9
+ #########
+
+ DBC_READ_COMMITTED => IGNORE,
+ DBC_READ_UNCOMMITTED => IGNORE,
+ DB_AM_READ_UNCOMMITTED => IGNORE,
+ DB_ASSOC_IMMUTABLE_KEY => DEFINE,
+ DB_COMPACT_FLAGS => DEFINE,
+ DB_FREELIST_ONLY => DEFINE,
+ DB_FREE_SPACE => DEFINE,
+ DB_IMMUTABLE_KEY => DEFINE,
+ DB_MUTEX_ALLOCATED => DEFINE,
+ DB_MUTEX_LOGICAL_LOCK => DEFINE,
+ DB_MUTEX_SELF_BLOCK => DEFINE,
+ DB_MUTEX_THREAD => DEFINE,
+ DB_READ_COMMITTED => DEFINE,
+ DB_READ_UNCOMMITTED => DEFINE,
+ DB_REGISTER => DEFINE,
+ DB_REP_ANYWHERE => DEFINE,
+ DB_REP_BULKOVF => DEFINE,
+ DB_REP_IGNORE => DEFINE,
+ DB_REP_LOCKOUT => DEFINE,
+ DB_REP_REREQUEST => DEFINE,
+ DB_SEQ_WRAPPED => DEFINE,
+ DB_VERB_REGISTER => DEFINE,
+ REP_CONF_AUTOINIT => DEFINE,
+ REP_CONF_BULK => DEFINE,
+ REP_CONF_DELAYCLIENT => DEFINE,
+ REP_CONF_NOWAIT => DEFINE,
+ TXN_READ_COMMITTED => IGNORE,
+ TXN_READ_UNCOMMITTED => IGNORE,
+ TXN_SYNC_FLAGS => IGNORE,
+ TXN_WRITE_NOSYNC => IGNORE,
+
+ # enum db_lockmode_t
+ DB_LOCK_READ_UNCOMMITTED => IGNORE, # 4.4.9
) ;
sub enum_Macro
diff --git a/db/perl/BerkeleyDB/t/Test/Builder.pm b/db/perl/BerkeleyDB/t/Test/Builder.pm
new file mode 100644
index 000000000..9f6a3a43d
--- /dev/null
+++ b/db/perl/BerkeleyDB/t/Test/Builder.pm
@@ -0,0 +1,1591 @@
+package Test::Builder;
+
+use 5.004;
+
+# $^C was only introduced in 5.005-ish. We do this to prevent
+# use of uninitialized value warnings in older perls.
+$^C ||= 0;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = '0.22';
+$VERSION = eval $VERSION; # make the alpha version come out as a number
+
+# Make Test::Builder thread-safe for ithreads.
+BEGIN {
+ use Config;
+ # Load threads::shared when threads are turned on
+ if( $] >= 5.008 && $Config{useithreads} && $INC{'threads.pm'}) {
+ require threads::shared;
+
+ # Hack around YET ANOTHER threads::shared bug. It would
+ # occassionally forget the contents of the variable when sharing it.
+ # So we first copy the data, then share, then put our copy back.
+ *share = sub (\[$@%]) {
+ my $type = ref $_[0];
+ my $data;
+
+ if( $type eq 'HASH' ) {
+ %$data = %{$_[0]};
+ }
+ elsif( $type eq 'ARRAY' ) {
+ @$data = @{$_[0]};
+ }
+ elsif( $type eq 'SCALAR' ) {
+ $$data = ${$_[0]};
+ }
+ else {
+ die "Unknown type: ".$type;
+ }
+
+ $_[0] = &threads::shared::share($_[0]);
+
+ if( $type eq 'HASH' ) {
+ %{$_[0]} = %$data;
+ }
+ elsif( $type eq 'ARRAY' ) {
+ @{$_[0]} = @$data;
+ }
+ elsif( $type eq 'SCALAR' ) {
+ ${$_[0]} = $$data;
+ }
+ else {
+ die "Unknown type: ".$type;
+ }
+
+ return $_[0];
+ };
+ }
+ # 5.8.0's threads::shared is busted when threads are off.
+ # We emulate it here.
+ else {
+ *share = sub { return $_[0] };
+ *lock = sub { 0 };
+ }
+}
+
+
+=head1 NAME
+
+Test::Builder - Backend for building test libraries
+
+=head1 SYNOPSIS
+
+ package My::Test::Module;
+ use Test::Builder;
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT = qw(ok);
+
+ my $Test = Test::Builder->new;
+ $Test->output('my_logfile');
+
+ sub import {
+ my($self) = shift;
+ my $pack = caller;
+
+ $Test->exported_to($pack);
+ $Test->plan(@_);
+
+ $self->export_to_level(1, $self, 'ok');
+ }
+
+ sub ok {
+ my($test, $name) = @_;
+
+ $Test->ok($test, $name);
+ }
+
+
+=head1 DESCRIPTION
+
+Test::Simple and Test::More have proven to be popular testing modules,
+but they're not always flexible enough. Test::Builder provides the a
+building block upon which to write your own test libraries I<which can
+work together>.
+
+=head2 Construction
+
+=over 4
+
+=item B<new>
+
+ my $Test = Test::Builder->new;
+
+Returns a Test::Builder object representing the current state of the
+test.
+
+Since you only run one test per program, there is B<one and only one>
+Test::Builder object. No matter how many times you call new(), you're
+getting the same object. (This is called a singleton).
+
+=cut
+
+my $Test = Test::Builder->new;
+sub new {
+ my($class) = shift;
+ $Test ||= bless ['Move along, nothing to see here'], $class;
+ return $Test;
+}
+
+=item B<reset>
+
+ $Test->reset;
+
+Reinitializes the Test::Builder singleton to its original state.
+Mostly useful for tests run in persistent environments where the same
+test might be run multiple times in the same process.
+
+=cut
+
+my $Test_Died;
+my $Have_Plan;
+my $No_Plan;
+my $Curr_Test; share($Curr_Test);
+use vars qw($Level);
+my $Original_Pid;
+my @Test_Results; share(@Test_Results);
+
+my $Exported_To;
+my $Expected_Tests;
+
+my $Skip_All;
+
+my $Use_Nums;
+
+my($No_Header, $No_Ending);
+
+$Test->reset;
+
+sub reset {
+ my ($self) = @_;
+
+ $Test_Died = 0;
+ $Have_Plan = 0;
+ $No_Plan = 0;
+ $Curr_Test = 0;
+ $Level = 1;
+ $Original_Pid = $$;
+ @Test_Results = ();
+
+ $Exported_To = undef;
+ $Expected_Tests = 0;
+
+ $Skip_All = 0;
+
+ $Use_Nums = 1;
+
+ ($No_Header, $No_Ending) = (0,0);
+
+ $self->_dup_stdhandles unless $^C;
+
+ return undef;
+}
+
+=back
+
+=head2 Setting up tests
+
+These methods are for setting up tests and declaring how many there
+are. You usually only want to call one of these methods.
+
+=over 4
+
+=item B<exported_to>
+
+ my $pack = $Test->exported_to;
+ $Test->exported_to($pack);
+
+Tells Test::Builder what package you exported your functions to.
+This is important for getting TODO tests right.
+
+=cut
+
+sub exported_to {
+ my($self, $pack) = @_;
+
+ if( defined $pack ) {
+ $Exported_To = $pack;
+ }
+ return $Exported_To;
+}
+
+=item B<plan>
+
+ $Test->plan('no_plan');
+ $Test->plan( skip_all => $reason );
+ $Test->plan( tests => $num_tests );
+
+A convenient way to set up your tests. Call this and Test::Builder
+will print the appropriate headers and take the appropriate actions.
+
+If you call plan(), don't call any of the other methods below.
+
+=cut
+
+sub plan {
+ my($self, $cmd, $arg) = @_;
+
+ return unless $cmd;
+
+ if( $Have_Plan ) {
+ die sprintf "You tried to plan twice! Second plan at %s line %d\n",
+ ($self->caller)[1,2];
+ }
+
+ if( $cmd eq 'no_plan' ) {
+ $self->no_plan;
+ }
+ elsif( $cmd eq 'skip_all' ) {
+ return $self->skip_all($arg);
+ }
+ elsif( $cmd eq 'tests' ) {
+ if( $arg ) {
+ return $self->expected_tests($arg);
+ }
+ elsif( !defined $arg ) {
+ die "Got an undefined number of tests. Looks like you tried to ".
+ "say how many tests you plan to run but made a mistake.\n";
+ }
+ elsif( !$arg ) {
+ die "You said to run 0 tests! You've got to run something.\n";
+ }
+ }
+ else {
+ require Carp;
+ my @args = grep { defined } ($cmd, $arg);
+ Carp::croak("plan() doesn't understand @args");
+ }
+
+ return 1;
+}
+
+=item B<expected_tests>
+
+ my $max = $Test->expected_tests;
+ $Test->expected_tests($max);
+
+Gets/sets the # of tests we expect this test to run and prints out
+the appropriate headers.
+
+=cut
+
+sub expected_tests {
+ my $self = shift;
+ my($max) = @_;
+
+ if( @_ ) {
+ die "Number of tests must be a postive integer. You gave it '$max'.\n"
+ unless $max =~ /^\+?\d+$/ and $max > 0;
+
+ $Expected_Tests = $max;
+ $Have_Plan = 1;
+
+ $self->_print("1..$max\n") unless $self->no_header;
+ }
+ return $Expected_Tests;
+}
+
+
+=item B<no_plan>
+
+ $Test->no_plan;
+
+Declares that this test will run an indeterminate # of tests.
+
+=cut
+
+sub no_plan {
+ $No_Plan = 1;
+ $Have_Plan = 1;
+}
+
+=item B<has_plan>
+
+ $plan = $Test->has_plan
+
+Find out whether a plan has been defined. $plan is either C<undef> (no plan has been set), C<no_plan> (indeterminate # of tests) or an integer (the number of expected tests).
+
+=cut
+
+sub has_plan {
+ return($Expected_Tests) if $Expected_Tests;
+ return('no_plan') if $No_Plan;
+ return(undef);
+};
+
+
+=item B<skip_all>
+
+ $Test->skip_all;
+ $Test->skip_all($reason);
+
+Skips all the tests, using the given $reason. Exits immediately with 0.
+
+=cut
+
+sub skip_all {
+ my($self, $reason) = @_;
+
+ my $out = "1..0";
+ $out .= " # Skip $reason" if $reason;
+ $out .= "\n";
+
+ $Skip_All = 1;
+
+ $self->_print($out) unless $self->no_header;
+ exit(0);
+}
+
+=back
+
+=head2 Running tests
+
+These actually run the tests, analogous to the functions in
+Test::More.
+
+$name is always optional.
+
+=over 4
+
+=item B<ok>
+
+ $Test->ok($test, $name);
+
+Your basic test. Pass if $test is true, fail if $test is false. Just
+like Test::Simple's ok().
+
+=cut
+
+sub ok {
+ my($self, $test, $name) = @_;
+
+ # $test might contain an object which we don't want to accidentally
+ # store, so we turn it into a boolean.
+ $test = $test ? 1 : 0;
+
+ unless( $Have_Plan ) {
+ require Carp;
+ Carp::croak("You tried to run a test without a plan! Gotta have a plan.");
+ }
+
+ lock $Curr_Test;
+ $Curr_Test++;
+
+ # In case $name is a string overloaded object, force it to stringify.
+ $self->_unoverload(\$name);
+
+ $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/;
+ You named your test '$name'. You shouldn't use numbers for your test names.
+ Very confusing.
+ERR
+
+ my($pack, $file, $line) = $self->caller;
+
+ my $todo = $self->todo($pack);
+ $self->_unoverload(\$todo);
+
+ my $out;
+ my $result = &share({});
+
+ unless( $test ) {
+ $out .= "not ";
+ @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
+ }
+ else {
+ @$result{ 'ok', 'actual_ok' } = ( 1, $test );
+ }
+
+ $out .= "ok";
+ $out .= " $Curr_Test" if $self->use_numbers;
+
+ if( defined $name ) {
+ $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.
+ $out .= " - $name";
+ $result->{name} = $name;
+ }
+ else {
+ $result->{name} = '';
+ }
+
+ if( $todo ) {
+ $out .= " # TODO $todo";
+ $result->{reason} = $todo;
+ $result->{type} = 'todo';
+ }
+ else {
+ $result->{reason} = '';
+ $result->{type} = '';
+ }
+
+ $Test_Results[$Curr_Test-1] = $result;
+ $out .= "\n";
+
+ $self->_print($out);
+
+ unless( $test ) {
+ my $msg = $todo ? "Failed (TODO)" : "Failed";
+ $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
+ $self->diag(" $msg test ($file at line $line)\n");
+ }
+
+ return $test ? 1 : 0;
+}
+
+
+sub _unoverload {
+ my $self = shift;
+
+ local($@,$!);
+
+ eval { require overload } || return;
+
+ foreach my $thing (@_) {
+ eval {
+ if( defined $$thing ) {
+ if( my $string_meth = overload::Method($$thing, '""') ) {
+ $$thing = $$thing->$string_meth();
+ }
+ }
+ };
+ }
+}
+
+
+=item B<is_eq>
+
+ $Test->is_eq($got, $expected, $name);
+
+Like Test::More's is(). Checks if $got eq $expected. This is the
+string version.
+
+=item B<is_num>
+
+ $Test->is_num($got, $expected, $name);
+
+Like Test::More's is(). Checks if $got == $expected. This is the
+numeric version.
+
+=cut
+
+sub is_eq {
+ my($self, $got, $expect, $name) = @_;
+ local $Level = $Level + 1;
+
+ if( !defined $got || !defined $expect ) {
+ # undef only matches undef and nothing else
+ my $test = !defined $got && !defined $expect;
+
+ $self->ok($test, $name);
+ $self->_is_diag($got, 'eq', $expect) unless $test;
+ return $test;
+ }
+
+ return $self->cmp_ok($got, 'eq', $expect, $name);
+}
+
+sub is_num {
+ my($self, $got, $expect, $name) = @_;
+ local $Level = $Level + 1;
+
+ if( !defined $got || !defined $expect ) {
+ # undef only matches undef and nothing else
+ my $test = !defined $got && !defined $expect;
+
+ $self->ok($test, $name);
+ $self->_is_diag($got, '==', $expect) unless $test;
+ return $test;
+ }
+
+ return $self->cmp_ok($got, '==', $expect, $name);
+}
+
+sub _is_diag {
+ my($self, $got, $type, $expect) = @_;
+
+ foreach my $val (\$got, \$expect) {
+ if( defined $$val ) {
+ if( $type eq 'eq' ) {
+ # quote and force string context
+ $$val = "'$$val'"
+ }
+ else {
+ # force numeric context
+ $$val = $$val+0;
+ }
+ }
+ else {
+ $$val = 'undef';
+ }
+ }
+
+ return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
+ got: %s
+ expected: %s
+DIAGNOSTIC
+
+}
+
+=item B<isnt_eq>
+
+ $Test->isnt_eq($got, $dont_expect, $name);
+
+Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
+the string version.
+
+=item B<isnt_num>
+
+ $Test->is_num($got, $dont_expect, $name);
+
+Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
+the numeric version.
+
+=cut
+
+sub isnt_eq {
+ my($self, $got, $dont_expect, $name) = @_;
+ local $Level = $Level + 1;
+
+ if( !defined $got || !defined $dont_expect ) {
+ # undef only matches undef and nothing else
+ my $test = defined $got || defined $dont_expect;
+
+ $self->ok($test, $name);
+ $self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
+ return $test;
+ }
+
+ return $self->cmp_ok($got, 'ne', $dont_expect, $name);
+}
+
+sub isnt_num {
+ my($self, $got, $dont_expect, $name) = @_;
+ local $Level = $Level + 1;
+
+ if( !defined $got || !defined $dont_expect ) {
+ # undef only matches undef and nothing else
+ my $test = defined $got || defined $dont_expect;
+
+ $self->ok($test, $name);
+ $self->_cmp_diag($got, '!=', $dont_expect) unless $test;
+ return $test;
+ }
+
+ return $self->cmp_ok($got, '!=', $dont_expect, $name);
+}
+
+
+=item B<like>
+
+ $Test->like($this, qr/$regex/, $name);
+ $Test->like($this, '/$regex/', $name);
+
+Like Test::More's like(). Checks if $this matches the given $regex.
+
+You'll want to avoid qr// if you want your tests to work before 5.005.
+
+=item B<unlike>
+
+ $Test->unlike($this, qr/$regex/, $name);
+ $Test->unlike($this, '/$regex/', $name);
+
+Like Test::More's unlike(). Checks if $this B<does not match> the
+given $regex.
+
+=cut
+
+sub like {
+ my($self, $this, $regex, $name) = @_;
+
+ local $Level = $Level + 1;
+ $self->_regex_ok($this, $regex, '=~', $name);
+}
+
+sub unlike {
+ my($self, $this, $regex, $name) = @_;
+
+ local $Level = $Level + 1;
+ $self->_regex_ok($this, $regex, '!~', $name);
+}
+
+=item B<maybe_regex>
+
+ $Test->maybe_regex(qr/$regex/);
+ $Test->maybe_regex('/$regex/');
+
+Convenience method for building testing functions that take regular
+expressions as arguments, but need to work before perl 5.005.
+
+Takes a quoted regular expression produced by qr//, or a string
+representing a regular expression.
+
+Returns a Perl value which may be used instead of the corresponding
+regular expression, or undef if it's argument is not recognised.
+
+For example, a version of like(), sans the useful diagnostic messages,
+could be written as:
+
+ sub laconic_like {
+ my ($self, $this, $regex, $name) = @_;
+ my $usable_regex = $self->maybe_regex($regex);
+ die "expecting regex, found '$regex'\n"
+ unless $usable_regex;
+ $self->ok($this =~ m/$usable_regex/, $name);
+ }
+
+=cut
+
+
+sub maybe_regex {
+ my ($self, $regex) = @_;
+ my $usable_regex = undef;
+
+ return $usable_regex unless defined $regex;
+
+ my($re, $opts);
+
+ # Check for qr/foo/
+ if( ref $regex eq 'Regexp' ) {
+ $usable_regex = $regex;
+ }
+ # Check for '/foo/' or 'm,foo,'
+ elsif( ($re, $opts) = $regex =~ m{^ /(.*)/ (\w*) $ }sx or
+ (undef, $re, $opts) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx
+ )
+ {
+ $usable_regex = length $opts ? "(?$opts)$re" : $re;
+ }
+
+ return $usable_regex;
+};
+
+sub _regex_ok {
+ my($self, $this, $regex, $cmp, $name) = @_;
+
+ local $Level = $Level + 1;
+
+ my $ok = 0;
+ my $usable_regex = $self->maybe_regex($regex);
+ unless (defined $usable_regex) {
+ $ok = $self->ok( 0, $name );
+ $self->diag(" '$regex' doesn't look much like a regex to me.");
+ return $ok;
+ }
+
+ {
+ local $^W = 0;
+ my $test = $this =~ /$usable_regex/ ? 1 : 0;
+ $test = !$test if $cmp eq '!~';
+ $ok = $self->ok( $test, $name );
+ }
+
+ unless( $ok ) {
+ $this = defined $this ? "'$this'" : 'undef';
+ my $match = $cmp eq '=~' ? "doesn't match" : "matches";
+ $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
+ %s
+ %13s '%s'
+DIAGNOSTIC
+
+ }
+
+ return $ok;
+}
+
+=item B<cmp_ok>
+
+ $Test->cmp_ok($this, $type, $that, $name);
+
+Works just like Test::More's cmp_ok().
+
+ $Test->cmp_ok($big_num, '!=', $other_big_num);
+
+=cut
+
+sub cmp_ok {
+ my($self, $got, $type, $expect, $name) = @_;
+
+ my $test;
+ {
+ local $^W = 0;
+ local($@,$!); # don't interfere with $@
+ # eval() sometimes resets $!
+ $test = eval "\$got $type \$expect";
+ }
+ local $Level = $Level + 1;
+ my $ok = $self->ok($test, $name);
+
+ unless( $ok ) {
+ if( $type =~ /^(eq|==)$/ ) {
+ $self->_is_diag($got, $type, $expect);
+ }
+ else {
+ $self->_cmp_diag($got, $type, $expect);
+ }
+ }
+ return $ok;
+}
+
+sub _cmp_diag {
+ my($self, $got, $type, $expect) = @_;
+
+ $got = defined $got ? "'$got'" : 'undef';
+ $expect = defined $expect ? "'$expect'" : 'undef';
+ return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect);
+ %s
+ %s
+ %s
+DIAGNOSTIC
+}
+
+=item B<BAILOUT>
+
+ $Test->BAILOUT($reason);
+
+Indicates to the Test::Harness that things are going so badly all
+testing should terminate. This includes running any additional test
+scripts.
+
+It will exit with 255.
+
+=cut
+
+sub BAILOUT {
+ my($self, $reason) = @_;
+
+ $self->_print("Bail out! $reason");
+ exit 255;
+}
+
+=item B<skip>
+
+ $Test->skip;
+ $Test->skip($why);
+
+Skips the current test, reporting $why.
+
+=cut
+
+sub skip {
+ my($self, $why) = @_;
+ $why ||= '';
+ $self->_unoverload(\$why);
+
+ unless( $Have_Plan ) {
+ require Carp;
+ Carp::croak("You tried to run tests without a plan! Gotta have a plan.");
+ }
+
+ lock($Curr_Test);
+ $Curr_Test++;
+
+ $Test_Results[$Curr_Test-1] = &share({
+ 'ok' => 1,
+ actual_ok => 1,
+ name => '',
+ type => 'skip',
+ reason => $why,
+ });
+
+ my $out = "ok";
+ $out .= " $Curr_Test" if $self->use_numbers;
+ $out .= " # skip";
+ $out .= " $why" if length $why;
+ $out .= "\n";
+
+ $Test->_print($out);
+
+ return 1;
+}
+
+
+=item B<todo_skip>
+
+ $Test->todo_skip;
+ $Test->todo_skip($why);
+
+Like skip(), only it will declare the test as failing and TODO. Similar
+to
+
+ print "not ok $tnum # TODO $why\n";
+
+=cut
+
+sub todo_skip {
+ my($self, $why) = @_;
+ $why ||= '';
+
+ unless( $Have_Plan ) {
+ require Carp;
+ Carp::croak("You tried to run tests without a plan! Gotta have a plan.");
+ }
+
+ lock($Curr_Test);
+ $Curr_Test++;
+
+ $Test_Results[$Curr_Test-1] = &share({
+ 'ok' => 1,
+ actual_ok => 0,
+ name => '',
+ type => 'todo_skip',
+ reason => $why,
+ });
+
+ my $out = "not ok";
+ $out .= " $Curr_Test" if $self->use_numbers;
+ $out .= " # TODO & SKIP $why\n";
+
+ $Test->_print($out);
+
+ return 1;
+}
+
+
+=begin _unimplemented
+
+=item B<skip_rest>
+
+ $Test->skip_rest;
+ $Test->skip_rest($reason);
+
+Like skip(), only it skips all the rest of the tests you plan to run
+and terminates the test.
+
+If you're running under no_plan, it skips once and terminates the
+test.
+
+=end _unimplemented
+
+=back
+
+
+=head2 Test style
+
+=over 4
+
+=item B<level>
+
+ $Test->level($how_high);
+
+How far up the call stack should $Test look when reporting where the
+test failed.
+
+Defaults to 1.
+
+Setting $Test::Builder::Level overrides. This is typically useful
+localized:
+
+ {
+ local $Test::Builder::Level = 2;
+ $Test->ok($test);
+ }
+
+=cut
+
+sub level {
+ my($self, $level) = @_;
+
+ if( defined $level ) {
+ $Level = $level;
+ }
+ return $Level;
+}
+
+
+=item B<use_numbers>
+
+ $Test->use_numbers($on_or_off);
+
+Whether or not the test should output numbers. That is, this if true:
+
+ ok 1
+ ok 2
+ ok 3
+
+or this if false
+
+ ok
+ ok
+ ok
+
+Most useful when you can't depend on the test output order, such as
+when threads or forking is involved.
+
+Test::Harness will accept either, but avoid mixing the two styles.
+
+Defaults to on.
+
+=cut
+
+sub use_numbers {
+ my($self, $use_nums) = @_;
+
+ if( defined $use_nums ) {
+ $Use_Nums = $use_nums;
+ }
+ return $Use_Nums;
+}
+
+=item B<no_header>
+
+ $Test->no_header($no_header);
+
+If set to true, no "1..N" header will be printed.
+
+=item B<no_ending>
+
+ $Test->no_ending($no_ending);
+
+Normally, Test::Builder does some extra diagnostics when the test
+ends. It also changes the exit code as described below.
+
+If this is true, none of that will be done.
+
+=cut
+
+sub no_header {
+ my($self, $no_header) = @_;
+
+ if( defined $no_header ) {
+ $No_Header = $no_header;
+ }
+ return $No_Header;
+}
+
+sub no_ending {
+ my($self, $no_ending) = @_;
+
+ if( defined $no_ending ) {
+ $No_Ending = $no_ending;
+ }
+ return $No_Ending;
+}
+
+
+=back
+
+=head2 Output
+
+Controlling where the test output goes.
+
+It's ok for your test to change where STDOUT and STDERR point to,
+Test::Builder's default output settings will not be affected.
+
+=over 4
+
+=item B<diag>
+
+ $Test->diag(@msgs);
+
+Prints out the given @msgs. Like C<print>, arguments are simply
+appended together.
+
+Normally, it uses the failure_output() handle, but if this is for a
+TODO test, the todo_output() handle is used.
+
+Output will be indented and marked with a # so as not to interfere
+with test output. A newline will be put on the end if there isn't one
+already.
+
+We encourage using this rather than calling print directly.
+
+Returns false. Why? Because diag() is often used in conjunction with
+a failing test (C<ok() || diag()>) it "passes through" the failure.
+
+ return ok(...) || diag(...);
+
+=for blame transfer
+Mark Fowler <mark@twoshortplanks.com>
+
+=cut
+
+sub diag {
+ my($self, @msgs) = @_;
+ return unless @msgs;
+
+ # Prevent printing headers when compiling (i.e. -c)
+ return if $^C;
+
+ # Smash args together like print does.
+ # Convert undef to 'undef' so its readable.
+ my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
+
+ # Escape each line with a #.
+ $msg =~ s/^/# /gm;
+
+ # Stick a newline on the end if it needs it.
+ $msg .= "\n" unless $msg =~ /\n\Z/;
+
+ local $Level = $Level + 1;
+ $self->_print_diag($msg);
+
+ return 0;
+}
+
+=begin _private
+
+=item B<_print>
+
+ $Test->_print(@msgs);
+
+Prints to the output() filehandle.
+
+=end _private
+
+=cut
+
+sub _print {
+ my($self, @msgs) = @_;
+
+ # Prevent printing headers when only compiling. Mostly for when
+ # tests are deparsed with B::Deparse
+ return if $^C;
+
+ my $msg = join '', @msgs;
+
+ local($\, $", $,) = (undef, ' ', '');
+ my $fh = $self->output;
+
+ # Escape each line after the first with a # so we don't
+ # confuse Test::Harness.
+ $msg =~ s/\n(.)/\n# $1/sg;
+
+ # Stick a newline on the end if it needs it.
+ $msg .= "\n" unless $msg =~ /\n\Z/;
+
+ print $fh $msg;
+}
+
+
+=item B<_print_diag>
+
+ $Test->_print_diag(@msg);
+
+Like _print, but prints to the current diagnostic filehandle.
+
+=cut
+
+sub _print_diag {
+ my $self = shift;
+
+ local($\, $", $,) = (undef, ' ', '');
+ my $fh = $self->todo ? $self->todo_output : $self->failure_output;
+ print $fh @_;
+}
+
+=item B<output>
+
+ $Test->output($fh);
+ $Test->output($file);
+
+Where normal "ok/not ok" test output should go.
+
+Defaults to STDOUT.
+
+=item B<failure_output>
+
+ $Test->failure_output($fh);
+ $Test->failure_output($file);
+
+Where diagnostic output on test failures and diag() should go.
+
+Defaults to STDERR.
+
+=item B<todo_output>
+
+ $Test->todo_output($fh);
+ $Test->todo_output($file);
+
+Where diagnostics about todo test failures and diag() should go.
+
+Defaults to STDOUT.
+
+=cut
+
+my($Out_FH, $Fail_FH, $Todo_FH);
+sub output {
+ my($self, $fh) = @_;
+
+ if( defined $fh ) {
+ $Out_FH = _new_fh($fh);
+ }
+ return $Out_FH;
+}
+
+sub failure_output {
+ my($self, $fh) = @_;
+
+ if( defined $fh ) {
+ $Fail_FH = _new_fh($fh);
+ }
+ return $Fail_FH;
+}
+
+sub todo_output {
+ my($self, $fh) = @_;
+
+ if( defined $fh ) {
+ $Todo_FH = _new_fh($fh);
+ }
+ return $Todo_FH;
+}
+
+
+sub _new_fh {
+ my($file_or_fh) = shift;
+
+ my $fh;
+ if( _is_fh($file_or_fh) ) {
+ $fh = $file_or_fh;
+ }
+ else {
+ $fh = do { local *FH };
+ open $fh, ">$file_or_fh" or
+ die "Can't open test output log $file_or_fh: $!";
+ }
+
+ return $fh;
+}
+
+
+sub _is_fh {
+ my $maybe_fh = shift;
+
+ return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
+
+ return UNIVERSAL::isa($maybe_fh, 'GLOB') ||
+ UNIVERSAL::isa($maybe_fh, 'IO::Handle') ||
+
+ # 5.5.4's tied() and can() doesn't like getting undef
+ UNIVERSAL::can((tied($maybe_fh) || ''), 'TIEHANDLE');
+}
+
+
+sub _autoflush {
+ my($fh) = shift;
+ my $old_fh = select $fh;
+ $| = 1;
+ select $old_fh;
+}
+
+
+my $Opened_Testhandles = 0;
+sub _dup_stdhandles {
+ my $self = shift;
+
+ $self->_open_testhandles unless $Opened_Testhandles;
+
+ # Set everything to unbuffered else plain prints to STDOUT will
+ # come out in the wrong order from our own prints.
+ _autoflush(\*TESTOUT);
+ _autoflush(\*STDOUT);
+ _autoflush(\*TESTERR);
+ _autoflush(\*STDERR);
+
+ $Test->output(\*TESTOUT);
+ $Test->failure_output(\*TESTERR);
+ $Test->todo_output(\*TESTOUT);
+}
+
+sub _open_testhandles {
+ # We dup STDOUT and STDERR so people can change them in their
+ # test suites while still getting normal test output.
+ open(TESTOUT, ">&STDOUT") or die "Can't dup STDOUT: $!";
+ open(TESTERR, ">&STDERR") or die "Can't dup STDERR: $!";
+ $Opened_Testhandles = 1;
+}
+
+
+=back
+
+
+=head2 Test Status and Info
+
+=over 4
+
+=item B<current_test>
+
+ my $curr_test = $Test->current_test;
+ $Test->current_test($num);
+
+Gets/sets the current test number we're on. You usually shouldn't
+have to set this.
+
+If set forward, the details of the missing tests are filled in as 'unknown'.
+if set backward, the details of the intervening tests are deleted. You
+can erase history if you really want to.
+
+=cut
+
+sub current_test {
+ my($self, $num) = @_;
+
+ lock($Curr_Test);
+ if( defined $num ) {
+ unless( $Have_Plan ) {
+ require Carp;
+ Carp::croak("Can't change the current test number without a plan!");
+ }
+
+ $Curr_Test = $num;
+
+ # If the test counter is being pushed forward fill in the details.
+ if( $num > @Test_Results ) {
+ my $start = @Test_Results ? $#Test_Results + 1 : 0;
+ for ($start..$num-1) {
+ $Test_Results[$_] = &share({
+ 'ok' => 1,
+ actual_ok => undef,
+ reason => 'incrementing test number',
+ type => 'unknown',
+ name => undef
+ });
+ }
+ }
+ # If backward, wipe history. Its their funeral.
+ elsif( $num < @Test_Results ) {
+ $#Test_Results = $num - 1;
+ }
+ }
+ return $Curr_Test;
+}
+
+
+=item B<summary>
+
+ my @tests = $Test->summary;
+
+A simple summary of the tests so far. True for pass, false for fail.
+This is a logical pass/fail, so todos are passes.
+
+Of course, test #1 is $tests[0], etc...
+
+=cut
+
+sub summary {
+ my($self) = shift;
+
+ return map { $_->{'ok'} } @Test_Results;
+}
+
+=item B<details>
+
+ my @tests = $Test->details;
+
+Like summary(), but with a lot more detail.
+
+ $tests[$test_num - 1] =
+ { 'ok' => is the test considered a pass?
+ actual_ok => did it literally say 'ok'?
+ name => name of the test (if any)
+ type => type of test (if any, see below).
+ reason => reason for the above (if any)
+ };
+
+'ok' is true if Test::Harness will consider the test to be a pass.
+
+'actual_ok' is a reflection of whether or not the test literally
+printed 'ok' or 'not ok'. This is for examining the result of 'todo'
+tests.
+
+'name' is the name of the test.
+
+'type' indicates if it was a special test. Normal tests have a type
+of ''. Type can be one of the following:
+
+ skip see skip()
+ todo see todo()
+ todo_skip see todo_skip()
+ unknown see below
+
+Sometimes the Test::Builder test counter is incremented without it
+printing any test output, for example, when current_test() is changed.
+In these cases, Test::Builder doesn't know the result of the test, so
+it's type is 'unkown'. These details for these tests are filled in.
+They are considered ok, but the name and actual_ok is left undef.
+
+For example "not ok 23 - hole count # TODO insufficient donuts" would
+result in this structure:
+
+ $tests[22] = # 23 - 1, since arrays start from 0.
+ { ok => 1, # logically, the test passed since it's todo
+ actual_ok => 0, # in absolute terms, it failed
+ name => 'hole count',
+ type => 'todo',
+ reason => 'insufficient donuts'
+ };
+
+=cut
+
+sub details {
+ return @Test_Results;
+}
+
+=item B<todo>
+
+ my $todo_reason = $Test->todo;
+ my $todo_reason = $Test->todo($pack);
+
+todo() looks for a $TODO variable in your tests. If set, all tests
+will be considered 'todo' (see Test::More and Test::Harness for
+details). Returns the reason (ie. the value of $TODO) if running as
+todo tests, false otherwise.
+
+todo() is pretty part about finding the right package to look for
+$TODO in. It uses the exported_to() package to find it. If that's
+not set, it's pretty good at guessing the right package to look at.
+
+Sometimes there is some confusion about where todo() should be looking
+for the $TODO variable. If you want to be sure, tell it explicitly
+what $pack to use.
+
+=cut
+
+sub todo {
+ my($self, $pack) = @_;
+
+ $pack = $pack || $self->exported_to || $self->caller(1);
+
+ no strict 'refs';
+ return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
+ : 0;
+}
+
+=item B<caller>
+
+ my $package = $Test->caller;
+ my($pack, $file, $line) = $Test->caller;
+ my($pack, $file, $line) = $Test->caller($height);
+
+Like the normal caller(), except it reports according to your level().
+
+=cut
+
+sub caller {
+ my($self, $height) = @_;
+ $height ||= 0;
+
+ my @caller = CORE::caller($self->level + $height + 1);
+ return wantarray ? @caller : $caller[0];
+}
+
+=back
+
+=cut
+
+=begin _private
+
+=over 4
+
+=item B<_sanity_check>
+
+ _sanity_check();
+
+Runs a bunch of end of test sanity checks to make sure reality came
+through ok. If anything is wrong it will die with a fairly friendly
+error message.
+
+=cut
+
+#'#
+sub _sanity_check {
+ _whoa($Curr_Test < 0, 'Says here you ran a negative number of tests!');
+ _whoa(!$Have_Plan and $Curr_Test,
+ 'Somehow your tests ran without a plan!');
+ _whoa($Curr_Test != @Test_Results,
+ 'Somehow you got a different number of results than tests ran!');
+}
+
+=item B<_whoa>
+
+ _whoa($check, $description);
+
+A sanity check, similar to assert(). If the $check is true, something
+has gone horribly wrong. It will die with the given $description and
+a note to contact the author.
+
+=cut
+
+sub _whoa {
+ my($check, $desc) = @_;
+ if( $check ) {
+ die <<WHOA;
+WHOA! $desc
+This should never happen! Please contact the author immediately!
+WHOA
+ }
+}
+
+=item B<_my_exit>
+
+ _my_exit($exit_num);
+
+Perl seems to have some trouble with exiting inside an END block. 5.005_03
+and 5.6.1 both seem to do odd things. Instead, this function edits $?
+directly. It should ONLY be called from inside an END block. It
+doesn't actually exit, that's your job.
+
+=cut
+
+sub _my_exit {
+ $? = $_[0];
+
+ return 1;
+}
+
+
+=back
+
+=end _private
+
+=cut
+
+$SIG{__DIE__} = sub {
+ # We don't want to muck with death in an eval, but $^S isn't
+ # totally reliable. 5.005_03 and 5.6.1 both do the wrong thing
+ # with it. Instead, we use caller. This also means it runs under
+ # 5.004!
+ my $in_eval = 0;
+ for( my $stack = 1; my $sub = (CORE::caller($stack))[3]; $stack++ ) {
+ $in_eval = 1 if $sub =~ /^\(eval\)/;
+ }
+ $Test_Died = 1 unless $in_eval;
+};
+
+sub _ending {
+ my $self = shift;
+
+ _sanity_check();
+
+ # Don't bother with an ending if this is a forked copy. Only the parent
+ # should do the ending.
+ do{ _my_exit($?) && return } if $Original_Pid != $$;
+
+ # Bailout if plan() was never called. This is so
+ # "require Test::Simple" doesn't puke.
+ do{ _my_exit(0) && return } if !$Have_Plan && !$Test_Died;
+
+ # Figure out if we passed or failed and print helpful messages.
+ if( @Test_Results ) {
+ # The plan? We have no plan.
+ if( $No_Plan ) {
+ $self->_print("1..$Curr_Test\n") unless $self->no_header;
+ $Expected_Tests = $Curr_Test;
+ }
+
+ # Auto-extended arrays and elements which aren't explicitly
+ # filled in with a shared reference will puke under 5.8.0
+ # ithreads. So we have to fill them in by hand. :(
+ my $empty_result = &share({});
+ for my $idx ( 0..$Expected_Tests-1 ) {
+ $Test_Results[$idx] = $empty_result
+ unless defined $Test_Results[$idx];
+ }
+
+ my $num_failed = grep !$_->{'ok'}, @Test_Results[0..$Expected_Tests-1];
+ $num_failed += abs($Expected_Tests - @Test_Results);
+
+ if( $Curr_Test < $Expected_Tests ) {
+ my $s = $Expected_Tests == 1 ? '' : 's';
+ $self->diag(<<"FAIL");
+Looks like you planned $Expected_Tests test$s but only ran $Curr_Test.
+FAIL
+ }
+ elsif( $Curr_Test > $Expected_Tests ) {
+ my $num_extra = $Curr_Test - $Expected_Tests;
+ my $s = $Expected_Tests == 1 ? '' : 's';
+ $self->diag(<<"FAIL");
+Looks like you planned $Expected_Tests test$s but ran $num_extra extra.
+FAIL
+ }
+ elsif ( $num_failed ) {
+ my $s = $num_failed == 1 ? '' : 's';
+ $self->diag(<<"FAIL");
+Looks like you failed $num_failed test$s of $Expected_Tests.
+FAIL
+ }
+
+ if( $Test_Died ) {
+ $self->diag(<<"FAIL");
+Looks like your test died just after $Curr_Test.
+FAIL
+
+ _my_exit( 255 ) && return;
+ }
+
+ _my_exit( $num_failed <= 254 ? $num_failed : 254 ) && return;
+ }
+ elsif ( $Skip_All ) {
+ _my_exit( 0 ) && return;
+ }
+ elsif ( $Test_Died ) {
+ $self->diag(<<'FAIL');
+Looks like your test died before it could output anything.
+FAIL
+ _my_exit( 255 ) && return;
+ }
+ else {
+ $self->diag("No tests run!\n");
+ _my_exit( 255 ) && return;
+ }
+}
+
+END {
+ $Test->_ending if defined $Test and !$Test->no_ending;
+}
+
+=head1 EXIT CODES
+
+If all your tests passed, Test::Builder will exit with zero (which is
+normal). If anything failed it will exit with how many failed. If
+you run less (or more) tests than you planned, the missing (or extras)
+will be considered failures. If no tests were ever run Test::Builder
+will throw a warning and exit with 255. If the test died, even after
+having successfully completed all its tests, it will still be
+considered a failure and will exit with 255.
+
+So the exit codes are...
+
+ 0 all tests successful
+ 255 test died
+ any other number how many failed (including missing or extras)
+
+If you fail more than 254 tests, it will be reported as 254.
+
+
+=head1 THREADS
+
+In perl 5.8.0 and later, Test::Builder is thread-safe. The test
+number is shared amongst all threads. This means if one thread sets
+the test number using current_test() they will all be effected.
+
+Test::Builder is only thread-aware if threads.pm is loaded I<before>
+Test::Builder.
+
+=head1 EXAMPLES
+
+CPAN can provide the best examples. Test::Simple, Test::More,
+Test::Exception and Test::Differences all use Test::Builder.
+
+=head1 SEE ALSO
+
+Test::Simple, Test::More, Test::Harness
+
+=head1 AUTHORS
+
+Original code by chromatic, maintained by Michael G Schwern
+E<lt>schwern@pobox.comE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and
+ Michael G Schwern E<lt>schwern@pobox.comE<gt>.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See F<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
+
+1;
diff --git a/db/perl/BerkeleyDB/t/Test/More.pm b/db/perl/BerkeleyDB/t/Test/More.pm
new file mode 100644
index 000000000..aa0280851
--- /dev/null
+++ b/db/perl/BerkeleyDB/t/Test/More.pm
@@ -0,0 +1,1448 @@
+package Test::More;
+
+use 5.004;
+
+use strict;
+use Test::Builder;
+
+
+# Can't use Carp because it might cause use_ok() to accidentally succeed
+# even though the module being used forgot to use Carp. Yes, this
+# actually happened.
+sub _carp {
+ my($file, $line) = (caller(1))[1,2];
+ warn @_, " at $file line $line\n";
+}
+
+
+
+require Exporter;
+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS $TODO);
+$VERSION = '0.54';
+$VERSION = eval $VERSION; # make the alpha version come out as a number
+
+@ISA = qw(Exporter);
+@EXPORT = qw(ok use_ok require_ok
+ is isnt like unlike is_deeply
+ cmp_ok
+ skip todo todo_skip
+ pass fail
+ eq_array eq_hash eq_set
+ $TODO
+ plan
+ can_ok isa_ok
+ diag
+ );
+
+my $Test = Test::Builder->new;
+my $Show_Diag = 1;
+
+
+# 5.004's Exporter doesn't have export_to_level.
+sub _export_to_level
+{
+ my $pkg = shift;
+ my $level = shift;
+ (undef) = shift; # redundant arg
+ my $callpkg = caller($level);
+ $pkg->export($callpkg, @_);
+}
+
+
+=head1 NAME
+
+Test::More - yet another framework for writing test scripts
+
+=head1 SYNOPSIS
+
+ use Test::More tests => $Num_Tests;
+ # or
+ use Test::More qw(no_plan);
+ # or
+ use Test::More skip_all => $reason;
+
+ BEGIN { use_ok( 'Some::Module' ); }
+ require_ok( 'Some::Module' );
+
+ # Various ways to say "ok"
+ ok($this eq $that, $test_name);
+
+ is ($this, $that, $test_name);
+ isnt($this, $that, $test_name);
+
+ # Rather than print STDERR "# here's what went wrong\n"
+ diag("here's what went wrong");
+
+ like ($this, qr/that/, $test_name);
+ unlike($this, qr/that/, $test_name);
+
+ cmp_ok($this, '==', $that, $test_name);
+
+ is_deeply($complex_structure1, $complex_structure2, $test_name);
+
+ SKIP: {
+ skip $why, $how_many unless $have_some_feature;
+
+ ok( foo(), $test_name );
+ is( foo(42), 23, $test_name );
+ };
+
+ TODO: {
+ local $TODO = $why;
+
+ ok( foo(), $test_name );
+ is( foo(42), 23, $test_name );
+ };
+
+ can_ok($module, @methods);
+ isa_ok($object, $class);
+
+ pass($test_name);
+ fail($test_name);
+
+ # Utility comparison functions.
+ eq_array(\@this, \@that);
+ eq_hash(\%this, \%that);
+ eq_set(\@this, \@that);
+
+ # UNIMPLEMENTED!!!
+ my @status = Test::More::status;
+
+ # UNIMPLEMENTED!!!
+ BAIL_OUT($why);
+
+
+=head1 DESCRIPTION
+
+B<STOP!> If you're just getting started writing tests, have a look at
+Test::Simple first. This is a drop in replacement for Test::Simple
+which you can switch to once you get the hang of basic testing.
+
+The purpose of this module is to provide a wide range of testing
+utilities. Various ways to say "ok" with better diagnostics,
+facilities to skip tests, test future features and compare complicated
+data structures. While you can do almost anything with a simple
+C<ok()> function, it doesn't provide good diagnostic output.
+
+
+=head2 I love it when a plan comes together
+
+Before anything else, you need a testing plan. This basically declares
+how many tests your script is going to run to protect against premature
+failure.
+
+The preferred way to do this is to declare a plan when you C<use Test::More>.
+
+ use Test::More tests => $Num_Tests;
+
+There are rare cases when you will not know beforehand how many tests
+your script is going to run. In this case, you can declare that you
+have no plan. (Try to avoid using this as it weakens your test.)
+
+ use Test::More qw(no_plan);
+
+B<NOTE>: using no_plan requires a Test::Harness upgrade else it will
+think everything has failed. See L<BUGS and CAVEATS>)
+
+In some cases, you'll want to completely skip an entire testing script.
+
+ use Test::More skip_all => $skip_reason;
+
+Your script will declare a skip with the reason why you skipped and
+exit immediately with a zero (success). See L<Test::Harness> for
+details.
+
+If you want to control what functions Test::More will export, you
+have to use the 'import' option. For example, to import everything
+but 'fail', you'd do:
+
+ use Test::More tests => 23, import => ['!fail'];
+
+Alternatively, you can use the plan() function. Useful for when you
+have to calculate the number of tests.
+
+ use Test::More;
+ plan tests => keys %Stuff * 3;
+
+or for deciding between running the tests at all:
+
+ use Test::More;
+ if( $^O eq 'MacOS' ) {
+ plan skip_all => 'Test irrelevant on MacOS';
+ }
+ else {
+ plan tests => 42;
+ }
+
+=cut
+
+sub plan {
+ my(@plan) = @_;
+
+ my $idx = 0;
+ my @cleaned_plan;
+ while( $idx <= $#plan ) {
+ my $item = $plan[$idx];
+
+ if( $item eq 'no_diag' ) {
+ $Show_Diag = 0;
+ }
+ else {
+ push @cleaned_plan, $item;
+ }
+
+ $idx++;
+ }
+
+ $Test->plan(@cleaned_plan);
+}
+
+sub import {
+ my($class) = shift;
+
+ my $caller = caller;
+
+ $Test->exported_to($caller);
+
+ my $idx = 0;
+ my @plan;
+ my @imports;
+ while( $idx <= $#_ ) {
+ my $item = $_[$idx];
+
+ if( $item eq 'import' ) {
+ push @imports, @{$_[$idx+1]};
+ $idx++;
+ }
+ else {
+ push @plan, $item;
+ }
+
+ $idx++;
+ }
+
+ plan(@plan);
+
+ __PACKAGE__->_export_to_level(1, __PACKAGE__, @imports);
+}
+
+
+=head2 Test names
+
+By convention, each test is assigned a number in order. This is
+largely done automatically for you. However, it's often very useful to
+assign a name to each test. Which would you rather see:
+
+ ok 4
+ not ok 5
+ ok 6
+
+or
+
+ ok 4 - basic multi-variable
+ not ok 5 - simple exponential
+ ok 6 - force == mass * acceleration
+
+The later gives you some idea of what failed. It also makes it easier
+to find the test in your script, simply search for "simple
+exponential".
+
+All test functions take a name argument. It's optional, but highly
+suggested that you use it.
+
+
+=head2 I'm ok, you're not ok.
+
+The basic purpose of this module is to print out either "ok #" or "not
+ok #" depending on if a given test succeeded or failed. Everything
+else is just gravy.
+
+All of the following print "ok" or "not ok" depending on if the test
+succeeded or failed. They all also return true or false,
+respectively.
+
+=over 4
+
+=item B<ok>
+
+ ok($this eq $that, $test_name);
+
+This simply evaluates any expression (C<$this eq $that> is just a
+simple example) and uses that to determine if the test succeeded or
+failed. A true expression passes, a false one fails. Very simple.
+
+For example:
+
+ ok( $exp{9} == 81, 'simple exponential' );
+ ok( Film->can('db_Main'), 'set_db()' );
+ ok( $p->tests == 4, 'saw tests' );
+ ok( !grep !defined $_, @items, 'items populated' );
+
+(Mnemonic: "This is ok.")
+
+$test_name is a very short description of the test that will be printed
+out. It makes it very easy to find a test in your script when it fails
+and gives others an idea of your intentions. $test_name is optional,
+but we B<very> strongly encourage its use.
+
+Should an ok() fail, it will produce some diagnostics:
+
+ not ok 18 - sufficient mucus
+ # Failed test 18 (foo.t at line 42)
+
+This is actually Test::Simple's ok() routine.
+
+=cut
+
+sub ok ($;$) {
+ my($test, $name) = @_;
+ $Test->ok($test, $name);
+}
+
+=item B<is>
+
+=item B<isnt>
+
+ is ( $this, $that, $test_name );
+ isnt( $this, $that, $test_name );
+
+Similar to ok(), is() and isnt() compare their two arguments
+with C<eq> and C<ne> respectively and use the result of that to
+determine if the test succeeded or failed. So these:
+
+ # Is the ultimate answer 42?
+ is( ultimate_answer(), 42, "Meaning of Life" );
+
+ # $foo isn't empty
+ isnt( $foo, '', "Got some foo" );
+
+are similar to these:
+
+ ok( ultimate_answer() eq 42, "Meaning of Life" );
+ ok( $foo ne '', "Got some foo" );
+
+(Mnemonic: "This is that." "This isn't that.")
+
+So why use these? They produce better diagnostics on failure. ok()
+cannot know what you are testing for (beyond the name), but is() and
+isnt() know what the test was and why it failed. For example this
+test:
+
+ my $foo = 'waffle'; my $bar = 'yarblokos';
+ is( $foo, $bar, 'Is foo the same as bar?' );
+
+Will produce something like this:
+
+ not ok 17 - Is foo the same as bar?
+ # Failed test (foo.t at line 139)
+ # got: 'waffle'
+ # expected: 'yarblokos'
+
+So you can figure out what went wrong without rerunning the test.
+
+You are encouraged to use is() and isnt() over ok() where possible,
+however do not be tempted to use them to find out if something is
+true or false!
+
+ # XXX BAD!
+ is( exists $brooklyn{tree}, 1, 'A tree grows in Brooklyn' );
+
+This does not check if C<exists $brooklyn{tree}> is true, it checks if
+it returns 1. Very different. Similar caveats exist for false and 0.
+In these cases, use ok().
+
+ ok( exists $brooklyn{tree}, 'A tree grows in Brooklyn' );
+
+For those grammatical pedants out there, there's an C<isn't()>
+function which is an alias of isnt().
+
+=cut
+
+sub is ($$;$) {
+ $Test->is_eq(@_);
+}
+
+sub isnt ($$;$) {
+ $Test->isnt_eq(@_);
+}
+
+*isn't = \&isnt;
+
+
+=item B<like>
+
+ like( $this, qr/that/, $test_name );
+
+Similar to ok(), like() matches $this against the regex C<qr/that/>.
+
+So this:
+
+ like($this, qr/that/, 'this is like that');
+
+is similar to:
+
+ ok( $this =~ /that/, 'this is like that');
+
+(Mnemonic "This is like that".)
+
+The second argument is a regular expression. It may be given as a
+regex reference (i.e. C<qr//>) or (for better compatibility with older
+perls) as a string that looks like a regex (alternative delimiters are
+currently not supported):
+
+ like( $this, '/that/', 'this is like that' );
+
+Regex options may be placed on the end (C<'/that/i'>).
+
+Its advantages over ok() are similar to that of is() and isnt(). Better
+diagnostics on failure.
+
+=cut
+
+sub like ($$;$) {
+ $Test->like(@_);
+}
+
+
+=item B<unlike>
+
+ unlike( $this, qr/that/, $test_name );
+
+Works exactly as like(), only it checks if $this B<does not> match the
+given pattern.
+
+=cut
+
+sub unlike ($$;$) {
+ $Test->unlike(@_);
+}
+
+
+=item B<cmp_ok>
+
+ cmp_ok( $this, $op, $that, $test_name );
+
+Halfway between ok() and is() lies cmp_ok(). This allows you to
+compare two arguments using any binary perl operator.
+
+ # ok( $this eq $that );
+ cmp_ok( $this, 'eq', $that, 'this eq that' );
+
+ # ok( $this == $that );
+ cmp_ok( $this, '==', $that, 'this == that' );
+
+ # ok( $this && $that );
+ cmp_ok( $this, '&&', $that, 'this && that' );
+ ...etc...
+
+Its advantage over ok() is when the test fails you'll know what $this
+and $that were:
+
+ not ok 1
+ # Failed test (foo.t at line 12)
+ # '23'
+ # &&
+ # undef
+
+It's also useful in those cases where you are comparing numbers and
+is()'s use of C<eq> will interfere:
+
+ cmp_ok( $big_hairy_number, '==', $another_big_hairy_number );
+
+=cut
+
+sub cmp_ok($$$;$) {
+ $Test->cmp_ok(@_);
+}
+
+
+=item B<can_ok>
+
+ can_ok($module, @methods);
+ can_ok($object, @methods);
+
+Checks to make sure the $module or $object can do these @methods
+(works with functions, too).
+
+ can_ok('Foo', qw(this that whatever));
+
+is almost exactly like saying:
+
+ ok( Foo->can('this') &&
+ Foo->can('that') &&
+ Foo->can('whatever')
+ );
+
+only without all the typing and with a better interface. Handy for
+quickly testing an interface.
+
+No matter how many @methods you check, a single can_ok() call counts
+as one test. If you desire otherwise, use:
+
+ foreach my $meth (@methods) {
+ can_ok('Foo', $meth);
+ }
+
+=cut
+
+sub can_ok ($@) {
+ my($proto, @methods) = @_;
+ my $class = ref $proto || $proto;
+
+ unless( @methods ) {
+ my $ok = $Test->ok( 0, "$class->can(...)" );
+ $Test->diag(' can_ok() called with no methods');
+ return $ok;
+ }
+
+ my @nok = ();
+ foreach my $method (@methods) {
+ local($!, $@); # don't interfere with caller's $@
+ # eval sometimes resets $!
+ eval { $proto->can($method) } || push @nok, $method;
+ }
+
+ my $name;
+ $name = @methods == 1 ? "$class->can('$methods[0]')"
+ : "$class->can(...)";
+
+ my $ok = $Test->ok( !@nok, $name );
+
+ $Test->diag(map " $class->can('$_') failed\n", @nok);
+
+ return $ok;
+}
+
+=item B<isa_ok>
+
+ isa_ok($object, $class, $object_name);
+ isa_ok($ref, $type, $ref_name);
+
+Checks to see if the given C<< $object->isa($class) >>. Also checks to make
+sure the object was defined in the first place. Handy for this sort
+of thing:
+
+ my $obj = Some::Module->new;
+ isa_ok( $obj, 'Some::Module' );
+
+where you'd otherwise have to write
+
+ my $obj = Some::Module->new;
+ ok( defined $obj && $obj->isa('Some::Module') );
+
+to safeguard against your test script blowing up.
+
+It works on references, too:
+
+ isa_ok( $array_ref, 'ARRAY' );
+
+The diagnostics of this test normally just refer to 'the object'. If
+you'd like them to be more specific, you can supply an $object_name
+(for example 'Test customer').
+
+=cut
+
+sub isa_ok ($$;$) {
+ my($object, $class, $obj_name) = @_;
+
+ my $diag;
+ $obj_name = 'The object' unless defined $obj_name;
+ my $name = "$obj_name isa $class";
+ if( !defined $object ) {
+ $diag = "$obj_name isn't defined";
+ }
+ elsif( !ref $object ) {
+ $diag = "$obj_name isn't a reference";
+ }
+ else {
+ # We can't use UNIVERSAL::isa because we want to honor isa() overrides
+ local($@, $!); # eval sometimes resets $!
+ my $rslt = eval { $object->isa($class) };
+ if( $@ ) {
+ if( $@ =~ /^Can't call method "isa" on unblessed reference/ ) {
+ if( !UNIVERSAL::isa($object, $class) ) {
+ my $ref = ref $object;
+ $diag = "$obj_name isn't a '$class' it's a '$ref'";
+ }
+ } else {
+ die <<WHOA;
+WHOA! I tried to call ->isa on your object and got some weird error.
+This should never happen. Please contact the author immediately.
+Here's the error.
+$@
+WHOA
+ }
+ }
+ elsif( !$rslt ) {
+ my $ref = ref $object;
+ $diag = "$obj_name isn't a '$class' it's a '$ref'";
+ }
+ }
+
+
+
+ my $ok;
+ if( $diag ) {
+ $ok = $Test->ok( 0, $name );
+ $Test->diag(" $diag\n");
+ }
+ else {
+ $ok = $Test->ok( 1, $name );
+ }
+
+ return $ok;
+}
+
+
+=item B<pass>
+
+=item B<fail>
+
+ pass($test_name);
+ fail($test_name);
+
+Sometimes you just want to say that the tests have passed. Usually
+the case is you've got some complicated condition that is difficult to
+wedge into an ok(). In this case, you can simply use pass() (to
+declare the test ok) or fail (for not ok). They are synonyms for
+ok(1) and ok(0).
+
+Use these very, very, very sparingly.
+
+=cut
+
+sub pass (;$) {
+ $Test->ok(1, @_);
+}
+
+sub fail (;$) {
+ $Test->ok(0, @_);
+}
+
+=back
+
+=head2 Diagnostics
+
+If you pick the right test function, you'll usually get a good idea of
+what went wrong when it failed. But sometimes it doesn't work out
+that way. So here we have ways for you to write your own diagnostic
+messages which are safer than just C<print STDERR>.
+
+=over 4
+
+=item B<diag>
+
+ diag(@diagnostic_message);
+
+Prints a diagnostic message which is guaranteed not to interfere with
+test output. Like C<print> @diagnostic_message is simply concatinated
+together.
+
+Handy for this sort of thing:
+
+ ok( grep(/foo/, @users), "There's a foo user" ) or
+ diag("Since there's no foo, check that /etc/bar is set up right");
+
+which would produce:
+
+ not ok 42 - There's a foo user
+ # Failed test (foo.t at line 52)
+ # Since there's no foo, check that /etc/bar is set up right.
+
+You might remember C<ok() or diag()> with the mnemonic C<open() or
+die()>.
+
+All diag()s can be made silent by passing the "no_diag" option to
+Test::More. C<use Test::More tests => 1, 'no_diag'>. This is useful
+if you have diagnostics for personal testing but then wish to make
+them silent for release without commenting out each individual
+statement.
+
+B<NOTE> The exact formatting of the diagnostic output is still
+changing, but it is guaranteed that whatever you throw at it it won't
+interfere with the test.
+
+=cut
+
+sub diag {
+ return unless $Show_Diag;
+ $Test->diag(@_);
+}
+
+
+=back
+
+=head2 Module tests
+
+You usually want to test if the module you're testing loads ok, rather
+than just vomiting if its load fails. For such purposes we have
+C<use_ok> and C<require_ok>.
+
+=over 4
+
+=item B<use_ok>
+
+ BEGIN { use_ok($module); }
+ BEGIN { use_ok($module, @imports); }
+
+These simply use the given $module and test to make sure the load
+happened ok. It's recommended that you run use_ok() inside a BEGIN
+block so its functions are exported at compile-time and prototypes are
+properly honored.
+
+If @imports are given, they are passed through to the use. So this:
+
+ BEGIN { use_ok('Some::Module', qw(foo bar)) }
+
+is like doing this:
+
+ use Some::Module qw(foo bar);
+
+Version numbers can be checked like so:
+
+ # Just like "use Some::Module 1.02"
+ BEGIN { use_ok('Some::Module', 1.02) }
+
+Don't try to do this:
+
+ BEGIN {
+ use_ok('Some::Module');
+
+ ...some code that depends on the use...
+ ...happening at compile time...
+ }
+
+because the notion of "compile-time" is relative. Instead, you want:
+
+ BEGIN { use_ok('Some::Module') }
+ BEGIN { ...some code that depends on the use... }
+
+
+=cut
+
+sub use_ok ($;@) {
+ my($module, @imports) = @_;
+ @imports = () unless @imports;
+
+ my($pack,$filename,$line) = caller;
+
+ local($@,$!); # eval sometimes interferes with $!
+
+ if( @imports == 1 and $imports[0] =~ /^\d+(?:\.\d+)?$/ ) {
+ # probably a version check. Perl needs to see the bare number
+ # for it to work with non-Exporter based modules.
+ eval <<USE;
+package $pack;
+use $module $imports[0];
+USE
+ }
+ else {
+ eval <<USE;
+package $pack;
+use $module \@imports;
+USE
+ }
+
+ my $ok = $Test->ok( !$@, "use $module;" );
+
+ unless( $ok ) {
+ chomp $@;
+ $@ =~ s{^BEGIN failed--compilation aborted at .*$}
+ {BEGIN failed--compilation aborted at $filename line $line.}m;
+ $Test->diag(<<DIAGNOSTIC);
+ Tried to use '$module'.
+ Error: $@
+DIAGNOSTIC
+
+ }
+
+ return $ok;
+}
+
+=item B<require_ok>
+
+ require_ok($module);
+ require_ok($file);
+
+Like use_ok(), except it requires the $module or $file.
+
+=cut
+
+sub require_ok ($) {
+ my($module) = shift;
+
+ my $pack = caller;
+
+ # Try to deterine if we've been given a module name or file.
+ # Module names must be barewords, files not.
+ $module = qq['$module'] unless _is_module_name($module);
+
+ local($!, $@); # eval sometimes interferes with $!
+ eval <<REQUIRE;
+package $pack;
+require $module;
+REQUIRE
+
+ my $ok = $Test->ok( !$@, "require $module;" );
+
+ unless( $ok ) {
+ chomp $@;
+ $Test->diag(<<DIAGNOSTIC);
+ Tried to require '$module'.
+ Error: $@
+DIAGNOSTIC
+
+ }
+
+ return $ok;
+}
+
+
+sub _is_module_name {
+ my $module = shift;
+
+ # Module names start with a letter.
+ # End with an alphanumeric.
+ # The rest is an alphanumeric or ::
+ $module =~ s/\b::\b//g;
+ $module =~ /^[a-zA-Z]\w+$/;
+}
+
+=back
+
+=head2 Conditional tests
+
+Sometimes running a test under certain conditions will cause the
+test script to die. A certain function or method isn't implemented
+(such as fork() on MacOS), some resource isn't available (like a
+net connection) or a module isn't available. In these cases it's
+necessary to skip tests, or declare that they are supposed to fail
+but will work in the future (a todo test).
+
+For more details on the mechanics of skip and todo tests see
+L<Test::Harness>.
+
+The way Test::More handles this is with a named block. Basically, a
+block of tests which can be skipped over or made todo. It's best if I
+just show you...
+
+=over 4
+
+=item B<SKIP: BLOCK>
+
+ SKIP: {
+ skip $why, $how_many if $condition;
+
+ ...normal testing code goes here...
+ }
+
+This declares a block of tests that might be skipped, $how_many tests
+there are, $why and under what $condition to skip them. An example is
+the easiest way to illustrate:
+
+ SKIP: {
+ eval { require HTML::Lint };
+
+ skip "HTML::Lint not installed", 2 if $@;
+
+ my $lint = new HTML::Lint;
+ isa_ok( $lint, "HTML::Lint" );
+
+ $lint->parse( $html );
+ is( $lint->errors, 0, "No errors found in HTML" );
+ }
+
+If the user does not have HTML::Lint installed, the whole block of
+code I<won't be run at all>. Test::More will output special ok's
+which Test::Harness interprets as skipped, but passing, tests.
+
+It's important that $how_many accurately reflects the number of tests
+in the SKIP block so the # of tests run will match up with your plan.
+If your plan is C<no_plan> $how_many is optional and will default to 1.
+
+It's perfectly safe to nest SKIP blocks. Each SKIP block must have
+the label C<SKIP>, or Test::More can't work its magic.
+
+You don't skip tests which are failing because there's a bug in your
+program, or for which you don't yet have code written. For that you
+use TODO. Read on.
+
+=cut
+
+#'#
+sub skip {
+ my($why, $how_many) = @_;
+
+ unless( defined $how_many ) {
+ # $how_many can only be avoided when no_plan is in use.
+ _carp "skip() needs to know \$how_many tests are in the block"
+ unless $Test->has_plan eq 'no_plan';
+ $how_many = 1;
+ }
+
+ for( 1..$how_many ) {
+ $Test->skip($why);
+ }
+
+ local $^W = 0;
+ last SKIP;
+}
+
+
+=item B<TODO: BLOCK>
+
+ TODO: {
+ local $TODO = $why if $condition;
+
+ ...normal testing code goes here...
+ }
+
+Declares a block of tests you expect to fail and $why. Perhaps it's
+because you haven't fixed a bug or haven't finished a new feature:
+
+ TODO: {
+ local $TODO = "URI::Geller not finished";
+
+ my $card = "Eight of clubs";
+ is( URI::Geller->your_card, $card, 'Is THIS your card?' );
+
+ my $spoon;
+ URI::Geller->bend_spoon;
+ is( $spoon, 'bent', "Spoon bending, that's original" );
+ }
+
+With a todo block, the tests inside are expected to fail. Test::More
+will run the tests normally, but print out special flags indicating
+they are "todo". Test::Harness will interpret failures as being ok.
+Should anything succeed, it will report it as an unexpected success.
+You then know the thing you had todo is done and can remove the
+TODO flag.
+
+The nice part about todo tests, as opposed to simply commenting out a
+block of tests, is it's like having a programmatic todo list. You know
+how much work is left to be done, you're aware of what bugs there are,
+and you'll know immediately when they're fixed.
+
+Once a todo test starts succeeding, simply move it outside the block.
+When the block is empty, delete it.
+
+B<NOTE>: TODO tests require a Test::Harness upgrade else it will
+treat it as a normal failure. See L<BUGS and CAVEATS>)
+
+
+=item B<todo_skip>
+
+ TODO: {
+ todo_skip $why, $how_many if $condition;
+
+ ...normal testing code...
+ }
+
+With todo tests, it's best to have the tests actually run. That way
+you'll know when they start passing. Sometimes this isn't possible.
+Often a failing test will cause the whole program to die or hang, even
+inside an C<eval BLOCK> with and using C<alarm>. In these extreme
+cases you have no choice but to skip over the broken tests entirely.
+
+The syntax and behavior is similar to a C<SKIP: BLOCK> except the
+tests will be marked as failing but todo. Test::Harness will
+interpret them as passing.
+
+=cut
+
+sub todo_skip {
+ my($why, $how_many) = @_;
+
+ unless( defined $how_many ) {
+ # $how_many can only be avoided when no_plan is in use.
+ _carp "todo_skip() needs to know \$how_many tests are in the block"
+ unless $Test->has_plan eq 'no_plan';
+ $how_many = 1;
+ }
+
+ for( 1..$how_many ) {
+ $Test->todo_skip($why);
+ }
+
+ local $^W = 0;
+ last TODO;
+}
+
+=item When do I use SKIP vs. TODO?
+
+B<If it's something the user might not be able to do>, use SKIP.
+This includes optional modules that aren't installed, running under
+an OS that doesn't have some feature (like fork() or symlinks), or maybe
+you need an Internet connection and one isn't available.
+
+B<If it's something the programmer hasn't done yet>, use TODO. This
+is for any code you haven't written yet, or bugs you have yet to fix,
+but want to put tests in your testing script (always a good idea).
+
+
+=back
+
+=head2 Comparison functions
+
+Not everything is a simple eq check or regex. There are times you
+need to see if two arrays are equivalent, for instance. For these
+instances, Test::More provides a handful of useful functions.
+
+B<NOTE> I'm not quite sure what will happen with filehandles.
+
+=over 4
+
+=item B<is_deeply>
+
+ is_deeply( $this, $that, $test_name );
+
+Similar to is(), except that if $this and $that are hash or array
+references, it does a deep comparison walking each data structure to
+see if they are equivalent. If the two structures are different, it
+will display the place where they start differing.
+
+Test::Differences and Test::Deep provide more in-depth functionality
+along these lines.
+
+=cut
+
+use vars qw(@Data_Stack %Refs_Seen);
+my $DNE = bless [], 'Does::Not::Exist';
+sub is_deeply {
+ unless( @_ == 2 or @_ == 3 ) {
+ my $msg = <<WARNING;
+is_deeply() takes two or three args, you gave %d.
+This usually means you passed an array or hash instead
+of a reference to it
+WARNING
+ chop $msg; # clip off newline so carp() will put in line/file
+
+ _carp sprintf $msg, scalar @_;
+ }
+
+ my($this, $that, $name) = @_;
+
+ my $ok;
+ if( !ref $this xor !ref $that ) { # one's a reference, one isn't
+ $ok = 0;
+ }
+ if( !ref $this and !ref $that ) {
+ $ok = $Test->is_eq($this, $that, $name);
+ }
+ else {
+ local @Data_Stack = ();
+ local %Refs_Seen = ();
+ if( _deep_check($this, $that) ) {
+ $ok = $Test->ok(1, $name);
+ }
+ else {
+ $ok = $Test->ok(0, $name);
+ $ok = $Test->diag(_format_stack(@Data_Stack));
+ }
+ }
+
+ return $ok;
+}
+
+sub _format_stack {
+ my(@Stack) = @_;
+
+ my $var = '$FOO';
+ my $did_arrow = 0;
+ foreach my $entry (@Stack) {
+ my $type = $entry->{type} || '';
+ my $idx = $entry->{'idx'};
+ if( $type eq 'HASH' ) {
+ $var .= "->" unless $did_arrow++;
+ $var .= "{$idx}";
+ }
+ elsif( $type eq 'ARRAY' ) {
+ $var .= "->" unless $did_arrow++;
+ $var .= "[$idx]";
+ }
+ elsif( $type eq 'REF' ) {
+ $var = "\${$var}";
+ }
+ }
+
+ my @vals = @{$Stack[-1]{vals}}[0,1];
+ my @vars = ();
+ ($vars[0] = $var) =~ s/\$FOO/ \$got/;
+ ($vars[1] = $var) =~ s/\$FOO/\$expected/;
+
+ my $out = "Structures begin differing at:\n";
+ foreach my $idx (0..$#vals) {
+ my $val = $vals[$idx];
+ $vals[$idx] = !defined $val ? 'undef' :
+ $val eq $DNE ? "Does not exist"
+ : "'$val'";
+ }
+
+ $out .= "$vars[0] = $vals[0]\n";
+ $out .= "$vars[1] = $vals[1]\n";
+
+ $out =~ s/^/ /msg;
+ return $out;
+}
+
+
+sub _type {
+ my $thing = shift;
+
+ return '' if !ref $thing;
+
+ for my $type (qw(ARRAY HASH REF SCALAR GLOB Regexp)) {
+ return $type if UNIVERSAL::isa($thing, $type);
+ }
+
+ return '';
+}
+
+
+=item B<eq_array>
+
+ eq_array(\@this, \@that);
+
+Checks if two arrays are equivalent. This is a deep check, so
+multi-level structures are handled correctly.
+
+=cut
+
+#'#
+sub eq_array {
+ local @Data_Stack;
+ local %Refs_Seen;
+ _eq_array(@_);
+}
+
+sub _eq_array {
+ my($a1, $a2) = @_;
+
+ if( grep !_type($_) eq 'ARRAY', $a1, $a2 ) {
+ warn "eq_array passed a non-array ref";
+ return 0;
+ }
+
+ return 1 if $a1 eq $a2;
+
+ if($Refs_Seen{$a1}) {
+ return $Refs_Seen{$a1} eq $a2;
+ }
+ else {
+ $Refs_Seen{$a1} = "$a2";
+ }
+
+ my $ok = 1;
+ my $max = $#$a1 > $#$a2 ? $#$a1 : $#$a2;
+ for (0..$max) {
+ my $e1 = $_ > $#$a1 ? $DNE : $a1->[$_];
+ my $e2 = $_ > $#$a2 ? $DNE : $a2->[$_];
+
+ push @Data_Stack, { type => 'ARRAY', idx => $_, vals => [$e1, $e2] };
+ $ok = _deep_check($e1,$e2);
+ pop @Data_Stack if $ok;
+
+ last unless $ok;
+ }
+
+ return $ok;
+}
+
+sub _deep_check {
+ my($e1, $e2) = @_;
+ my $ok = 0;
+
+ {
+ # Quiet uninitialized value warnings when comparing undefs.
+ local $^W = 0;
+
+ $Test->_unoverload(\$e1, \$e2);
+
+ # Either they're both references or both not.
+ my $same_ref = !(!ref $e1 xor !ref $e2);
+
+ if( defined $e1 xor defined $e2 ) {
+ $ok = 0;
+ }
+ elsif ( $e1 == $DNE xor $e2 == $DNE ) {
+ $ok = 0;
+ }
+ elsif ( $same_ref and ($e1 eq $e2) ) {
+ $ok = 1;
+ }
+ else {
+ my $type = _type($e1);
+ $type = '' unless _type($e2) eq $type;
+
+ if( !$type ) {
+ push @Data_Stack, { vals => [$e1, $e2] };
+ $ok = 0;
+ }
+ elsif( $type eq 'ARRAY' ) {
+ $ok = _eq_array($e1, $e2);
+ }
+ elsif( $type eq 'HASH' ) {
+ $ok = _eq_hash($e1, $e2);
+ }
+ elsif( $type eq 'REF' ) {
+ push @Data_Stack, { type => 'REF', vals => [$e1, $e2] };
+ $ok = _deep_check($$e1, $$e2);
+ pop @Data_Stack if $ok;
+ }
+ elsif( $type eq 'SCALAR' ) {
+ push @Data_Stack, { type => 'REF', vals => [$e1, $e2] };
+ $ok = _deep_check($$e1, $$e2);
+ pop @Data_Stack if $ok;
+ }
+ }
+ }
+
+ return $ok;
+}
+
+
+=item B<eq_hash>
+
+ eq_hash(\%this, \%that);
+
+Determines if the two hashes contain the same keys and values. This
+is a deep check.
+
+=cut
+
+sub eq_hash {
+ local @Data_Stack;
+ local %Refs_Seen;
+ return _eq_hash(@_);
+}
+
+sub _eq_hash {
+ my($a1, $a2) = @_;
+
+ if( grep !_type($_) eq 'HASH', $a1, $a2 ) {
+ warn "eq_hash passed a non-hash ref";
+ return 0;
+ }
+
+ return 1 if $a1 eq $a2;
+
+ if( $Refs_Seen{$a1} ) {
+ return $Refs_Seen{$a1} eq $a2;
+ }
+ else {
+ $Refs_Seen{$a1} = "$a2";
+ }
+
+ my $ok = 1;
+ my $bigger = keys %$a1 > keys %$a2 ? $a1 : $a2;
+ foreach my $k (keys %$bigger) {
+ my $e1 = exists $a1->{$k} ? $a1->{$k} : $DNE;
+ my $e2 = exists $a2->{$k} ? $a2->{$k} : $DNE;
+
+ push @Data_Stack, { type => 'HASH', idx => $k, vals => [$e1, $e2] };
+ $ok = _deep_check($e1, $e2);
+ pop @Data_Stack if $ok;
+
+ last unless $ok;
+ }
+
+ return $ok;
+}
+
+=item B<eq_set>
+
+ eq_set(\@this, \@that);
+
+Similar to eq_array(), except the order of the elements is B<not>
+important. This is a deep check, but the irrelevancy of order only
+applies to the top level.
+
+B<NOTE> By historical accident, this is not a true set comparision.
+While the order of elements does not matter, duplicate elements do.
+
+=cut
+
+sub eq_set {
+ my($a1, $a2) = @_;
+ return 0 unless @$a1 == @$a2;
+
+ # There's faster ways to do this, but this is easiest.
+ local $^W = 0;
+
+ # We must make sure that references are treated neutrally. It really
+ # doesn't matter how we sort them, as long as both arrays are sorted
+ # with the same algorithm.
+ # Have to inline the sort routine due to a threading/sort bug.
+ # See [rt.cpan.org 6782]
+ return eq_array(
+ [sort { ref $a ? -1 : ref $b ? 1 : $a cmp $b } @$a1],
+ [sort { ref $a ? -1 : ref $b ? 1 : $a cmp $b } @$a2]
+ );
+}
+
+=back
+
+
+=head2 Extending and Embedding Test::More
+
+Sometimes the Test::More interface isn't quite enough. Fortunately,
+Test::More is built on top of Test::Builder which provides a single,
+unified backend for any test library to use. This means two test
+libraries which both use Test::Builder B<can be used together in the
+same program>.
+
+If you simply want to do a little tweaking of how the tests behave,
+you can access the underlying Test::Builder object like so:
+
+=over 4
+
+=item B<builder>
+
+ my $test_builder = Test::More->builder;
+
+Returns the Test::Builder object underlying Test::More for you to play
+with.
+
+=cut
+
+sub builder {
+ return Test::Builder->new;
+}
+
+=back
+
+
+=head1 EXIT CODES
+
+If all your tests passed, Test::Builder will exit with zero (which is
+normal). If anything failed it will exit with how many failed. If
+you run less (or more) tests than you planned, the missing (or extras)
+will be considered failures. If no tests were ever run Test::Builder
+will throw a warning and exit with 255. If the test died, even after
+having successfully completed all its tests, it will still be
+considered a failure and will exit with 255.
+
+So the exit codes are...
+
+ 0 all tests successful
+ 255 test died
+ any other number how many failed (including missing or extras)
+
+If you fail more than 254 tests, it will be reported as 254.
+
+
+=head1 CAVEATS and NOTES
+
+=over 4
+
+=item Backwards compatibility
+
+Test::More works with Perls as old as 5.004_05.
+
+
+=item Overloaded objects
+
+String overloaded objects are compared B<as strings>. This prevents
+Test::More from piercing an object's interface allowing better blackbox
+testing. So if a function starts returning overloaded objects instead of
+bare strings your tests won't notice the difference. This is good.
+
+However, it does mean that functions like is_deeply() cannot be used to
+test the internals of string overloaded objects. In this case I would
+suggest Test::Deep which contains more flexible testing functions for
+complex data structures.
+
+
+=item Threads
+
+Test::More will only be aware of threads if "use threads" has been done
+I<before> Test::More is loaded. This is ok:
+
+ use threads;
+ use Test::More;
+
+This may cause problems:
+
+ use Test::More
+ use threads;
+
+
+=item Test::Harness upgrade
+
+no_plan and todo depend on new Test::Harness features and fixes. If
+you're going to distribute tests that use no_plan or todo your
+end-users will have to upgrade Test::Harness to the latest one on
+CPAN. If you avoid no_plan and TODO tests, the stock Test::Harness
+will work fine.
+
+Installing Test::More should also upgrade Test::Harness.
+
+=back
+
+
+=head1 HISTORY
+
+This is a case of convergent evolution with Joshua Pritikin's Test
+module. I was largely unaware of its existence when I'd first
+written my own ok() routines. This module exists because I can't
+figure out how to easily wedge test names into Test's interface (along
+with a few other problems).
+
+The goal here is to have a testing utility that's simple to learn,
+quick to use and difficult to trip yourself up with while still
+providing more flexibility than the existing Test.pm. As such, the
+names of the most common routines are kept tiny, special cases and
+magic side-effects are kept to a minimum. WYSIWYG.
+
+
+=head1 SEE ALSO
+
+L<Test::Simple> if all this confuses you and you just want to write
+some tests. You can upgrade to Test::More later (it's forward
+compatible).
+
+L<Test> is the old testing module. Its main benefit is that it has
+been distributed with Perl since 5.004_05.
+
+L<Test::Harness> for details on how your test results are interpreted
+by Perl.
+
+L<Test::Differences> for more ways to test complex data structures.
+And it plays well with Test::More.
+
+L<Test::Class> is like XUnit but more perlish.
+
+L<Test::Deep> gives you more powerful complex data structure testing.
+
+L<Test::Unit> is XUnit style testing.
+
+L<Test::Inline> shows the idea of embedded testing.
+
+L<Bundle::Test> installs a whole bunch of useful test modules.
+
+
+=head1 AUTHORS
+
+Michael G Schwern E<lt>schwern@pobox.comE<gt> with much inspiration
+from Joshua Pritikin's Test module and lots of help from Barrie
+Slaymaker, Tony Bowden, blackstar.co.uk, chromatic, Fergal Daly and
+the perl-qa gang.
+
+
+=head1 BUGS
+
+See F<http://rt.cpan.org> to report and view bugs.
+
+
+=head1 COPYRIGHT
+
+Copyright 2001, 2002, 2004 by Michael G Schwern E<lt>schwern@pobox.comE<gt>.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See F<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
+
+1;
diff --git a/db/perl/BerkeleyDB/t/btree.t b/db/perl/BerkeleyDB/t/btree.t
index 152c36601..69e69a4b6 100644
--- a/db/perl/BerkeleyDB/t/btree.t
+++ b/db/perl/BerkeleyDB/t/btree.t
@@ -1,18 +1,10 @@
#!./perl -w
-# ID: %I%, %G%
-
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't';
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..244\n";
@@ -32,7 +24,8 @@ umask(0) ;
ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' $db = new BerkeleyDB::Btree -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
- ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
+ ok 2, $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/
+ or print "# $@" ;
eval ' $db = new BerkeleyDB::Btree -Env => 2 ' ;
ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
@@ -127,7 +120,7 @@ umask(0) ;
my ($k, $v) ;
ok 33, my $db = new BerkeleyDB::Btree -Filename => $Dfile,
-Flags => DB_CREATE ;
-print "[$db] [$!] $BerkeleyDB::Error\n" ;
+#print "[$db] [$!] $BerkeleyDB::Error\n" ;
# create some data
my %data = (
diff --git a/db/perl/BerkeleyDB/t/cds.t b/db/perl/BerkeleyDB/t/cds.t
index 4d129a0a6..8f2e27aad 100644
--- a/db/perl/BerkeleyDB/t/cds.t
+++ b/db/perl/BerkeleyDB/t/cds.t
@@ -3,16 +3,10 @@
# Tests for Concurrent Data Store mode
use strict ;
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
BEGIN
{
diff --git a/db/perl/BerkeleyDB/t/db-3.0.t b/db/perl/BerkeleyDB/t/db-3.0.t
index 6f5137106..e508fdfcb 100644
--- a/db/perl/BerkeleyDB/t/db-3.0.t
+++ b/db/perl/BerkeleyDB/t/db-3.0.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't';
use BerkeleyDB;
-use t::util ;
+use util ;
BEGIN
{
diff --git a/db/perl/BerkeleyDB/t/db-3.1.t b/db/perl/BerkeleyDB/t/db-3.1.t
index d4a3c3dda..434273f1b 100644
--- a/db/perl/BerkeleyDB/t/db-3.1.t
+++ b/db/perl/BerkeleyDB/t/db-3.1.t
@@ -1,28 +1,19 @@
#!./perl -w
-# ID: %I%, %G%
-
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
+use lib 't';
+use util (1);
+
+use Test::More ;
use BerkeleyDB;
-use t::util ;
-BEGIN
-{
- if ($BerkeleyDB::db_version < 3.1) {
- print "1..0 # Skip: this needs Berkeley DB 3.1.x or better\n" ;
- exit 0 ;
- }
-}
+plan(skip_all => "1..0 # Skip: this needs Berkeley DB 3.1.x or better\n")
+ if $BerkeleyDB::db_version < 3.1 ;
+
+plan(tests => 48) ;
-print "1..35\n";
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -34,13 +25,14 @@ umask(0) ;
{
- # c_count
+ title "c_count";
my $lex = new LexFile $Dfile ;
my %hash ;
- ok 1, my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
- -Property => DB_DUP,
- -Flags => DB_CREATE ;
+ my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
+ -Property => DB_DUP,
+ -Flags => DB_CREATE ;
+ ok $db, " open database ok";
$hash{'Wall'} = 'Larry' ;
$hash{'Wall'} = 'Stone' ;
@@ -49,26 +41,29 @@ umask(0) ;
$hash{'Wall'} = 'Brick' ;
$hash{'mouse'} = 'mickey' ;
- ok 2, keys %hash == 6 ;
+ is keys %hash, 6, " keys == 6" ;
# create a cursor
- ok 3, my $cursor = $db->db_cursor() ;
+ my $cursor = $db->db_cursor() ;
+ ok $cursor, " created cursor";
my $key = "Wall" ;
my $value ;
- ok 4, $cursor->c_get($key, $value, DB_SET) == 0 ;
- ok 5, $key eq "Wall" && $value eq "Larry" ;
+ cmp_ok $cursor->c_get($key, $value, DB_SET), '==', 0, " c_get ok" ;
+ is $key, "Wall", " key is 'Wall'";
+ is $value, "Larry", " value is 'Larry'"; ;
my $count ;
- ok 6, $cursor->c_count($count) == 0 ;
- ok 7, $count == 4 ;
+ cmp_ok $cursor->c_count($count), '==', 0, " c_count ok" ;
+ is $count, 4, " count is 4" ;
$key = "Smith" ;
- ok 8, $cursor->c_get($key, $value, DB_SET) == 0 ;
- ok 9, $key eq "Smith" && $value eq "John" ;
+ cmp_ok $cursor->c_get($key, $value, DB_SET), '==', 0, " c_get ok" ;
+ is $key, "Smith", " key is 'Smith'";
+ is $value, "John", " value is 'John'"; ;
- ok 10, $cursor->c_count($count) == 0 ;
- ok 11, $count == 1 ;
+ cmp_ok $cursor->c_count($count), '==', 0, " c_count ok" ;
+ is $count, 1, " count is 1" ;
undef $db ;
@@ -78,13 +73,14 @@ umask(0) ;
}
{
- # db_key_range
+ title "db_key_range";
my $lex = new LexFile $Dfile ;
my %hash ;
- ok 12, my $db = tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
+ my $db = tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
-Property => DB_DUP,
-Flags => DB_CREATE ;
+ isa_ok $db, 'BerkeleyDB::Btree', " create database ok";
$hash{'Wall'} = 'Larry' ;
$hash{'Wall'} = 'Stone' ;
@@ -93,29 +89,29 @@ umask(0) ;
$hash{'Wall'} = 'Brick' ;
$hash{'mouse'} = 'mickey' ;
- ok 13, keys %hash == 6 ;
+ is keys %hash, 6, " 6 keys" ;
my $key = "Wall" ;
my ($less, $equal, $greater) ;
- ok 14, $db->db_key_range($key, $less, $equal, $greater) == 0 ;
+ cmp_ok $db->db_key_range($key, $less, $equal, $greater), '==', 0, " db_key_range ok" ;
- ok 15, $less != 0 ;
- ok 16, $equal != 0 ;
- ok 17, $greater != 0 ;
+ cmp_ok $less, '!=', 0 ;
+ cmp_ok $equal, '!=', 0 ;
+ cmp_ok $greater, '!=', 0 ;
$key = "Smith" ;
- ok 18, $db->db_key_range($key, $less, $equal, $greater) == 0 ;
+ cmp_ok $db->db_key_range($key, $less, $equal, $greater), '==', 0, " db_key_range ok" ;
- ok 19, $less == 0 ;
- ok 20, $equal != 0 ;
- ok 21, $greater != 0 ;
+ cmp_ok $less, '==', 0 ;
+ cmp_ok $equal, '!=', 0 ;
+ cmp_ok $greater, '!=', 0 ;
$key = "NotThere" ;
- ok 22, $db->db_key_range($key, $less, $equal, $greater) == 0 ;
+ cmp_ok $db->db_key_range($key, $less, $equal, $greater), '==', 0, " db_key_range ok" ;
- ok 23, $less == 0 ;
- ok 24, $equal == 0 ;
- ok 25, $greater == 1 ;
+ cmp_ok $less, '==', 0 ;
+ cmp_ok $equal, '==', 0 ;
+ cmp_ok $greater, '==', 1 ;
undef $db ;
untie %hash ;
@@ -123,17 +119,19 @@ umask(0) ;
}
{
- # rename
+ title "rename a subdb";
my $lex = new LexFile $Dfile ;
- ok 26, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
+ my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "fred" ,
-Flags => DB_CREATE ;
+ isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
- ok 27, my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
+ my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
-Subname => "joe" ,
-Flags => DB_CREATE ;
+ isa_ok $db2, 'BerkeleyDB::Btree', " create database ok";
# Add a k/v pair
my %data = qw(
@@ -144,30 +142,75 @@ umask(0) ;
green grass
) ;
- ok 28, addData($db1, %data) ;
- ok 29, addData($db2, %data) ;
+ ok addData($db1, %data), " added to db1 ok" ;
+ ok addData($db2, %data), " added to db2 ok" ;
undef $db1 ;
undef $db2 ;
# now rename
- ok 30, BerkeleyDB::db_rename(-Filename => $Dfile,
+ cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile,
-Subname => "fred",
- -Newname => "harry") == 0;
+ -Newname => "harry"), '==', 0, " rename ok";
- ok 31, my $db3 = new BerkeleyDB::Hash -Filename => $Dfile,
+ my $db3 = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "harry" ;
+ isa_ok $db3, 'BerkeleyDB::Hash', " verify rename";
+
+}
+
+{
+ title "rename a file";
+
+ my $lex = new LexFile $Dfile, $Dfile2 ;
+
+ my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
+ -Subname => "fred" ,
+ -Flags => DB_CREATE;
+ isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
+
+ my $db2 = new BerkeleyDB::Hash -Filename => $Dfile,
+ -Subname => "joe" ,
+ -Flags => DB_CREATE ;
+ isa_ok $db2, 'BerkeleyDB::Hash', " create database ok";
+
+ # Add a k/v pair
+ my %data = qw(
+ red sky
+ blue sea
+ black heart
+ yellow belley
+ green grass
+ ) ;
+
+ ok addData($db1, %data), " add data to db1" ;
+ ok addData($db2, %data), " add data to db2" ;
+
+ undef $db1 ;
+ undef $db2 ;
+
+ # now rename
+ cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile, -Newname => $Dfile2),
+ '==', 0, " rename file to $Dfile2 ok";
+
+ my $db3 = new BerkeleyDB::Hash -Filename => $Dfile2,
+ -Subname => "fred" ;
+ isa_ok $db3, 'BerkeleyDB::Hash', " verify rename"
+ or diag "$! $BerkeleyDB::Error";
+
+# TODO add rename with no subname & txn
}
{
- # verify
+ title "verify";
my $lex = new LexFile $Dfile, $Dfile2 ;
- ok 32, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
+ my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "fred" ,
-Flags => DB_CREATE ;
+ isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
# Add a k/v pair
my %data = qw(
@@ -178,20 +221,20 @@ umask(0) ;
green grass
) ;
- ok 33, addData($db1, %data) ;
+ ok addData($db1, %data), " added data ok" ;
undef $db1 ;
# now verify
- ok 34, BerkeleyDB::db_verify(-Filename => $Dfile,
+ cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
-Subname => "fred",
- ) == 0;
+ ), '==', 0, " verify ok";
# now verify & dump
- ok 35, BerkeleyDB::db_verify(-Filename => $Dfile,
+ cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
-Subname => "fred",
-Outfile => $Dfile2,
- ) == 0;
+ ), '==', 0, " verify and dump ok";
}
diff --git a/db/perl/BerkeleyDB/t/db-3.2.t b/db/perl/BerkeleyDB/t/db-3.2.t
index b9807cef4..5b5e2a047 100644
--- a/db/perl/BerkeleyDB/t/db-3.2.t
+++ b/db/perl/BerkeleyDB/t/db-3.2.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
BEGIN
{
diff --git a/db/perl/BerkeleyDB/t/db-3.3.t b/db/perl/BerkeleyDB/t/db-3.3.t
index e13050ff0..7f38bec9e 100644
--- a/db/perl/BerkeleyDB/t/db-3.3.t
+++ b/db/perl/BerkeleyDB/t/db-3.3.t
@@ -1,18 +1,12 @@
#!./perl -w
-# ID: %I%, %G%
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
BEGIN
{
@@ -24,7 +18,7 @@ BEGIN
umask(0);
-print "1..44\n";
+print "1..130\n";
{
# db->truncate
@@ -130,39 +124,48 @@ print "1..44\n";
ok 23, my $s_cursor = $secondary->db_cursor();
# c_get from primary
- $k = 1;
- ok 24, $p_cursor->c_get($k, $v, DB_FIRST) == 0;
+ $k = 'green';
+ ok 24, $p_cursor->c_get($k, $v, DB_SET) == 0;
+ ok 25, $k eq 'green';
+ ok 26, $v eq 'house';
# c_get from secondary
- ok 25, $s_cursor->c_get($k, $v, DB_FIRST) == 0;
+ $k = 'sea';
+ ok 27, $s_cursor->c_get($k, $v, DB_SET) == 0;
+ ok 28, $k eq 'sea';
+ ok 29, $v eq 'sea';
# c_pget from primary database should fail
$k = 1;
- ok 26, $p_cursor->c_pget($k, $pk, $v, DB_FIRST) != 0;
+ ok 30, $p_cursor->c_pget($k, $pk, $v, DB_FIRST) != 0;
# c_pget from secondary database
- ok 27, $s_cursor->c_pget($k, $pk, $v, DB_FIRST) == 0;
+ $k = 'flag';
+ ok 31, $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0;
+ ok 32, $k eq 'flag';
+ ok 33, $pk eq 'red';
+ ok 34, $v eq 'flag';
# check put to secondary is illegal
- ok 28, $secondary->db_put("tom", "dick") != 0;
- ok 29, countRecords($secondary) == 3 ;
+ ok 35, $secondary->db_put("tom", "dick") != 0;
+ ok 36, countRecords($secondary) == 3 ;
# delete from primary
- ok 30, $primary->db_del("green") == 0 ;
- ok 31, countRecords($primary) == 2 ;
+ ok 37, $primary->db_del("green") == 0 ;
+ ok 38, countRecords($primary) == 2 ;
# check has been deleted in secondary
- ok 32, $secondary->db_get("house", $v) != 0;
- ok 33, countRecords($secondary) == 2 ;
+ ok 39, $secondary->db_get("house", $v) != 0;
+ ok 40, countRecords($secondary) == 2 ;
# delete from secondary
- ok 34, $secondary->db_del('flag') == 0 ;
- ok 35, countRecords($secondary) == 1 ;
+ ok 41, $secondary->db_del('flag') == 0 ;
+ ok 42, countRecords($secondary) == 1 ;
# check deleted from primary
- ok 36, $primary->db_get("red", $v) != 0;
- ok 37, countRecords($primary) == 1 ;
+ ok 43, $primary->db_get("red", $v) != 0;
+ ok 44, countRecords($primary) == 1 ;
}
@@ -193,18 +196,18 @@ print "1..44\n";
my ($k, $v, $pk) = ('','','');
# create primary database
- ok 38, my $primary = new BerkeleyDB::Btree -Filename => $Dfile1,
+ ok 45, 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,
+ ok 46, 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;
+ ok 47, $primary->associate($secondary, \&sec_key2) == 0;
# add data to the primary
my %data = (
@@ -220,21 +223,254 @@ print "1..44\n";
#print "put [$r] $BerkeleyDB::Error\n";
$ret += $r;
}
- ok 41, $ret == 0 ;
+ ok 48, $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 ;
+ ok 49, 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 ;
+ ok 50, $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 ;
+ ok 51, $s_data eq join " ", sort { $a <=> $b } map { length } values %data ;
+
+}
+
+{
+ # db->associate -- primary recno, secondary hash
+
+ sub sec_key3
+ {
+ #print "in sec_key\n";
+ my $pkey = shift ;
+ my $pdata = shift ;
+
+ $_[0] = $pdata ;
+ return 0;
+ }
+
+ my ($Dfile1, $Dfile2);
+ my $lex = new LexFile $Dfile1, $Dfile2 ;
+ my %hash ;
+ my $status;
+ my ($k, $v, $pk) = ('','','');
+
+ # create primary database
+ ok 52, my $primary = new BerkeleyDB::Recno -Filename => $Dfile1,
+ -Flags => DB_CREATE ;
+
+ # create secondary database
+ ok 53, my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
+ -Flags => DB_CREATE ;
+
+ # associate primary with secondary
+ ok 54, $primary->associate($secondary, \&sec_key3) == 0;
+
+ # add data to the primary
+ my %data = (
+ 0 => "flag",
+ 1 => "house",
+ 2 => "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 55, $ret == 0 ;
+
+ # check the records in the secondary
+ ok 56, countRecords($secondary) == 3 ;
+
+ ok 57, $secondary->db_get("flag", $v) == 0;
+ ok 58, $v eq "flag";
+
+ ok 59, $secondary->db_get("house", $v) == 0;
+ ok 60, $v eq "house";
+
+ ok 61, $secondary->db_get("sea", $v) == 0;
+ ok 62, $v eq "sea" ;
+
+ # pget to primary database is illegal
+ ok 63, $primary->db_pget(0, $pk, $v) != 0 ;
+
+ # pget to secondary database is ok
+ ok 64, $secondary->db_pget('house', $pk, $v) == 0 ;
+ ok 65, $pk == 1 ;
+ ok 66, $v eq 'house';
+
+ ok 67, my $p_cursor = $primary->db_cursor();
+ ok 68, my $s_cursor = $secondary->db_cursor();
+
+ # c_get from primary
+ $k = 1;
+ ok 69, $p_cursor->c_get($k, $v, DB_SET) == 0;
+ ok 70, $k == 1;
+ ok 71, $v eq 'house';
+
+ # c_get from secondary
+ $k = 'sea';
+ ok 72, $s_cursor->c_get($k, $v, DB_SET) == 0;
+ ok 73, $k eq 'sea'
+ or warn "# key [$k]\n";
+ ok 74, $v eq 'sea';
+
+ # c_pget from primary database should fail
+ $k = 1;
+ ok 75, $p_cursor->c_pget($k, $pk, $v, DB_FIRST) != 0;
+
+ # c_pget from secondary database
+ $k = 'sea';
+ ok 76, $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0;
+ ok 77, $k eq 'sea' ;
+ ok 78, $pk == 2 ;
+ ok 79, $v eq 'sea';
+
+ # check put to secondary is illegal
+ ok 80, $secondary->db_put("tom", "dick") != 0;
+ ok 81, countRecords($secondary) == 3 ;
+
+ # delete from primary
+ ok 82, $primary->db_del(2) == 0 ;
+ ok 83, countRecords($primary) == 2 ;
+
+ # check has been deleted in secondary
+ ok 84, $secondary->db_get("sea", $v) != 0;
+ ok 85, countRecords($secondary) == 2 ;
+
+ # delete from secondary
+ ok 86, $secondary->db_del('flag') == 0 ;
+ ok 87, countRecords($secondary) == 1 ;
+
+
+ # check deleted from primary
+ ok 88, $primary->db_get(0, $v) != 0;
+ ok 89, countRecords($primary) == 1 ;
}
+{
+ # db->associate -- primary hash, secondary recno
+
+ sub sec_key4
+ {
+ #print "in sec_key4\n";
+ my $pkey = shift ;
+ my $pdata = shift ;
+
+ $_[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 90, my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
+ -Flags => DB_CREATE ;
+
+ # create secondary database
+ ok 91, my $secondary = new BerkeleyDB::Recno -Filename => $Dfile2,
+ #-Property => DB_DUP,
+ -Flags => DB_CREATE ;
+
+ # associate primary with secondary
+ ok 92, $primary->associate($secondary, \&sec_key4) == 0;
+
+ # add data to the primary
+ my %data = (
+ "red" => "flag",
+ "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 93, $ret == 0 ;
+
+ # check the records in the secondary
+ ok 94, countRecords($secondary) == 3 ;
+
+ ok 95, $secondary->db_get(0, $v) != 0;
+ ok 96, $secondary->db_get(1, $v) != 0;
+ ok 97, $secondary->db_get(2, $v) != 0;
+ ok 98, $secondary->db_get(3, $v) == 0;
+ ok 99, $v eq "sea";
+
+ ok 100, $secondary->db_get(4, $v) == 0;
+ ok 101, $v eq "flag";
+
+ ok 102, $secondary->db_get(5, $v) == 0;
+ ok 103, $v eq "house";
+
+ # pget to primary database is illegal
+ ok 104, $primary->db_pget(0, $pk, $v) != 0 ;
+
+ # pget to secondary database is ok
+ ok 105, $secondary->db_pget(4, $pk, $v) == 0 ;
+ ok 106, $pk eq 'red'
+ or warn "# $pk\n";;
+ ok 107, $v eq 'flag';
+
+ ok 108, my $p_cursor = $primary->db_cursor();
+ ok 109, my $s_cursor = $secondary->db_cursor();
+
+ # c_get from primary
+ $k = 'green';
+ ok 110, $p_cursor->c_get($k, $v, DB_SET) == 0;
+ ok 111, $k eq 'green';
+ ok 112, $v eq 'house';
+
+ # c_get from secondary
+ $k = 3;
+ ok 113, $s_cursor->c_get($k, $v, DB_SET) == 0;
+ ok 114, $k == 3 ;
+ ok 115, $v eq 'sea';
+
+ # c_pget from primary database should fail
+ $k = 1;
+ ok 116, $p_cursor->c_pget($k, $pk, $v, DB_SET) != 0;
+
+ # c_pget from secondary database
+ $k = 5;
+ ok 117, $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0;
+ ok 118, $k == 5 ;
+ ok 119, $pk eq 'green';
+ ok 120, $v eq 'house';
+
+ # check put to secondary is illegal
+ ok 121, $secondary->db_put(77, "dick") != 0;
+ ok 122, countRecords($secondary) == 3 ;
+
+ # delete from primary
+ ok 123, $primary->db_del("green") == 0 ;
+ ok 124, countRecords($primary) == 2 ;
+
+ # check has been deleted in secondary
+ ok 125, $secondary->db_get(5, $v) != 0;
+ ok 126, countRecords($secondary) == 2 ;
+
+ # delete from secondary
+ ok 127, $secondary->db_del(4) == 0 ;
+ ok 128, countRecords($secondary) == 1 ;
+
+
+ # check deleted from primary
+ ok 129, $primary->db_get("red", $v) != 0;
+ ok 130, countRecords($primary) == 1 ;
+
+}
diff --git a/db/perl/BerkeleyDB/t/db-4.4.t b/db/perl/BerkeleyDB/t/db-4.4.t
new file mode 100644
index 000000000..549097b66
--- /dev/null
+++ b/db/perl/BerkeleyDB/t/db-4.4.t
@@ -0,0 +1,57 @@
+#!./perl -w
+
+use strict ;
+
+use lib 't' ;
+use BerkeleyDB;
+use Test::More ;
+use util (1);
+
+plan(skip_all => "this needs Berkeley DB 4.4.x or better\n" )
+ if $BerkeleyDB::db_version < 4.4;
+
+plan tests => 5;
+
+{
+ title "Testing compact";
+
+ # db->db_compact
+
+ my $Dfile;
+ my $lex = new LexFile $Dfile ;
+ my ($k, $v) ;
+ ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
+ -Flags => DB_CREATE ;
+
+ # 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 $ret == 0, " Created some data" ;
+
+ my $key;
+ my $end;
+ my %hash;
+ $hash{compact_filepercent} = 20;
+
+ ok $db->compact("red", "green", \%hash, 0, $end) == 0, " Compacted ok";
+
+ if (0)
+ {
+ diag "end at $end";
+ for my $key (sort keys %hash)
+ {
+ diag "[$key][$hash{$key}]\n";
+ }
+ }
+
+ ok $db->compact() == 0, " Compacted ok";
+}
+
diff --git a/db/perl/BerkeleyDB/t/destroy.t b/db/perl/BerkeleyDB/t/destroy.t
index 445d07407..e7b4e9e6a 100644
--- a/db/perl/BerkeleyDB/t/destroy.t
+++ b/db/perl/BerkeleyDB/t/destroy.t
@@ -2,15 +2,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..15\n";
diff --git a/db/perl/BerkeleyDB/t/encrypt.t b/db/perl/BerkeleyDB/t/encrypt.t
index b3cc13821..a855ed597 100644
--- a/db/perl/BerkeleyDB/t/encrypt.t
+++ b/db/perl/BerkeleyDB/t/encrypt.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
BEGIN
{
diff --git a/db/perl/BerkeleyDB/t/env.t b/db/perl/BerkeleyDB/t/env.t
index 6729ed92b..2bca2b311 100644
--- a/db/perl/BerkeleyDB/t/env.t
+++ b/db/perl/BerkeleyDB/t/env.t
@@ -1,23 +1,16 @@
#!./perl -w
-# ID: 1.2, 7/17/97
-
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
+use lib 't' ;
BEGIN {
$ENV{LC_ALL} = 'de_DE@euro';
}
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..53\n";
@@ -46,7 +39,7 @@ my $version_major = 0;
ok 7, $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' $env = new BerkeleyDB::Env( -Bad => 2, -Home => "/tmp", -Stupid => 3) ; ' ;
- ok 8, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
+ ok 8, $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/ ;
eval ' $env = new BerkeleyDB::Env (-Config => {"fred" => " "} ) ; ' ;
ok 9, !$env ;
@@ -126,6 +119,21 @@ my $version_major = 0;
undef $env ;
}
+sub chkMsg
+{
+ my $prefix = shift || '';
+
+ $prefix = "$prefix: " if $prefix;
+
+ my $ErrMsg = join "|", map { "$prefix$_" }
+ 'illegal flag specified to (db_open|DB->open)',
+ 'DB_AUTO_COMMIT may not be specified in non-transactional environment';
+
+ return 1 if $BerkeleyDB::Error =~ /^$ErrMsg/ ;
+ warn "# $BerkeleyDB::Error\n" ;
+ return 0;
+}
+
{
# -ErrFile with a filename
my $errfile = "./errfile" ;
@@ -140,7 +148,10 @@ my $version_major = 0;
-Flags => -1;
ok 26, !$db ;
- ok 27, $BerkeleyDB::Error =~ /^illegal flag specified to (db_open|DB->open)/;
+ my $ErrMsg = join "'", 'illegal flag specified to (db_open|DB->open)',
+ 'DB_AUTO_COMMIT may not be specified in non-transactional environment';
+
+ ok 27, chkMsg();
ok 28, -e $errfile ;
my $contents = docat($errfile) ;
chomp $contents ;
@@ -165,7 +176,7 @@ my $version_major = 0;
-Flags => -1;
ok 32, !$db ;
- ok 33, $BerkeleyDB::Error =~ /^illegal flag specified to (db_open|DB->open)/;
+ ok 33, chkMsg();
ok 34, -e $errfile ;
my $contents = docat($errfile) ;
chomp $contents ;
@@ -189,7 +200,7 @@ my $version_major = 0;
-Flags => -1;
ok 38, !$db ;
- ok 39, $BerkeleyDB::Error =~ /^PREFIX: illegal flag specified to (db_open|DB->open)/;
+ ok 39, chkMsg('PREFIX');
ok 40, -e $errfile ;
my $contents = docat($errfile) ;
chomp $contents ;
@@ -203,7 +214,7 @@ my $version_major = 0;
-Env => $env,
-Flags => -1;
ok 43, !$db ;
- ok 44, $BerkeleyDB::Error =~ /^NEW ONE: illegal flag specified to (db_open|DB->open)/;
+ ok 44, chkMsg('NEW ONE');
$contents = docat($errfile) ;
chomp $contents ;
ok 45, $contents =~ /$BerkeleyDB::Error$/ ;
diff --git a/db/perl/BerkeleyDB/t/examples.t b/db/perl/BerkeleyDB/t/examples.t
index 69b7f8ff8..62eab027a 100644
--- a/db/perl/BerkeleyDB/t/examples.t
+++ b/db/perl/BerkeleyDB/t/examples.t
@@ -9,10 +9,12 @@ BEGIN {
}
}
+use lib 't';
use BerkeleyDB;
-use t::util;
+use Test::More;
+use util(1);
-print "1..7\n";
+plan tests => 7;
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -62,7 +64,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(1, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
Banana Exists
orange -> orange
@@ -113,7 +115,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(2, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
Banana Exists
orange -> orange
@@ -138,7 +140,7 @@ my $redirect = "xyzt" ;
tie %h, 'BerkeleyDB::Btree',
-Filename => $filename,
-Flags => DB_CREATE
- or die "Cannot open $filename: $!\n" ;
+ or die "Cannot open $filename: $! $BerkeleyDB::Error\n" ;
# Add a key/value pair to the file
$h{'Wall'} = 'Larry' ;
@@ -160,7 +162,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(3, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
Smith
Wall
mouse
@@ -206,7 +208,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(4, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
mouse
Smith
Wall
@@ -256,7 +258,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(5, docat_del($redirect) eq <<"EOM") ;
+ is(docat_del($redirect), <<"EOM") ;
abc\x00 -> def\x00
EOM
@@ -300,7 +302,7 @@ my $redirect = "xyzt" ;
my $val = pack("i", 123) ;
#print "[" . docat($redirect) . "]\n" ;
- ok(6, docat_del($redirect) eq <<"EOM") ;
+ is(docat_del($redirect), <<"EOM") ;
$val -> def
EOM
@@ -390,7 +392,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(7, docat_del($redirect) eq <<"EOM") ;
+ is(docat_del($redirect), <<"EOM") ;
The array contains 5 entries
popped black
shifted white
diff --git a/db/perl/BerkeleyDB/t/examples.t.T b/db/perl/BerkeleyDB/t/examples.t.T
index fe9bdf76b..eba2ad72c 100644
--- a/db/perl/BerkeleyDB/t/examples.t.T
+++ b/db/perl/BerkeleyDB/t/examples.t.T
@@ -9,10 +9,12 @@ BEGIN {
}
}
+use lib 't';
use BerkeleyDB;
-use t::util;
+use Test::More;
+use util(1);
-print "1..7\n";
+plan tests => 7;
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -64,7 +66,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(1, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
Banana Exists
orange -> orange
@@ -117,7 +119,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(2, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
Banana Exists
orange -> orange
@@ -143,7 +145,7 @@ my $redirect = "xyzt" ;
tie %h, 'BerkeleyDB::Btree',
-Filename => $filename,
-Flags => DB_CREATE
- or die "Cannot open $filename: $!\n" ;
+ or die "Cannot open $filename: $! $BerkeleyDB::Error\n" ;
# Add a key/value pair to the file
$h{'Wall'} = 'Larry' ;
@@ -166,7 +168,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(3, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
Smith
Wall
mouse
@@ -214,7 +216,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(4, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
mouse
Smith
Wall
@@ -266,7 +268,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(5, docat_del($redirect) eq <<"EOM") ;
+ is(docat_del($redirect), <<"EOM") ;
abc\x00 -> def\x00
EOM
@@ -312,7 +314,7 @@ my $redirect = "xyzt" ;
my $val = pack("i", 123) ;
#print "[" . docat($redirect) . "]\n" ;
- ok(6, docat_del($redirect) eq <<"EOM") ;
+ is(docat_del($redirect), <<"EOM") ;
$val -> def
EOM
@@ -404,7 +406,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]\n" ;
- ok(7, docat_del($redirect) eq <<"EOM") ;
+ is(docat_del($redirect), <<"EOM") ;
The array contains 5 entries
popped black
shifted white
diff --git a/db/perl/BerkeleyDB/t/examples3.t b/db/perl/BerkeleyDB/t/examples3.t
index 22e94b770..15500bf54 100644
--- a/db/perl/BerkeleyDB/t/examples3.t
+++ b/db/perl/BerkeleyDB/t/examples3.t
@@ -9,19 +9,26 @@ BEGIN {
}
}
+use lib 't';
use BerkeleyDB;
-use t::util;
+use Test::More;
+use util (1);
+
+#BEGIN
+#{
+# if ($BerkeleyDB::db_version < 3) {
+# print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
+# exit 0 ;
+# }
+#}
+
+plan(skip_all => "this needs Berkeley DB 3.x or better\n" )
+ if $BerkeleyDB::db_version < 3;
+
-BEGIN
-{
- if ($BerkeleyDB::db_version < 3) {
- print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
- exit 0 ;
- }
-}
+plan tests => 2;
-print "1..2\n";
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -70,7 +77,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(1, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
orange -> orange
yellow -> banana
red -> apple
@@ -118,7 +125,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(2, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
orange -> orange
yellow -> banana
red -> apple
diff --git a/db/perl/BerkeleyDB/t/examples3.t.T b/db/perl/BerkeleyDB/t/examples3.t.T
index 5eeaa14d0..82f3c8547 100644
--- a/db/perl/BerkeleyDB/t/examples3.t.T
+++ b/db/perl/BerkeleyDB/t/examples3.t.T
@@ -9,19 +9,26 @@ BEGIN {
}
}
+use lib 't';
use BerkeleyDB;
-use t::util;
+use Test::More;
+use util (1);
+
+#BEGIN
+#{
+# if ($BerkeleyDB::db_version < 3) {
+# print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
+# exit 0 ;
+# }
+#}
+
+plan(skip_all => "this needs Berkeley DB 3.x or better\n" )
+ if $BerkeleyDB::db_version < 3;
+
-BEGIN
-{
- if ($BerkeleyDB::db_version < 3) {
- print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
- exit 0 ;
- }
-}
+plan tests => 2;
-print "1..2\n";
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -72,7 +79,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(1, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
orange -> orange
yellow -> banana
red -> apple
@@ -122,7 +129,7 @@ my $redirect = "xyzt" ;
}
#print "[" . docat($redirect) . "]" ;
- ok(2, docat_del($redirect) eq <<'EOM') ;
+ is(docat_del($redirect), <<'EOM') ;
orange -> orange
yellow -> banana
red -> apple
diff --git a/db/perl/BerkeleyDB/t/filter.t b/db/perl/BerkeleyDB/t/filter.t
index ff1435ae7..b8af7c32e 100644
--- a/db/perl/BerkeleyDB/t/filter.t
+++ b/db/perl/BerkeleyDB/t/filter.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..52\n";
diff --git a/db/perl/BerkeleyDB/t/hash.t b/db/perl/BerkeleyDB/t/hash.t
index 25b8b20cd..98aaf7258 100644
--- a/db/perl/BerkeleyDB/t/hash.t
+++ b/db/perl/BerkeleyDB/t/hash.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..212\n";
@@ -32,7 +26,7 @@ umask(0) ;
ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' $db = new BerkeleyDB::Hash -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
- ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
+ ok 2, $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/ ;
eval ' $db = new BerkeleyDB::Hash -Env => 2 ' ;
ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
@@ -270,7 +264,8 @@ umask(0) ;
my %hash ;
my $fd ;
my $value ;
- ok 76, my $db = tie %hash, 'BerkeleyDB::Hash' ;
+ ok 76, my $db = tie %hash, 'BerkeleyDB::Hash'
+ or die $BerkeleyDB::Error;
ok 77, $db->db_put("some key", "some value") == 0 ;
ok 78, $db->db_get("some key", $value) == 0 ;
diff --git a/db/perl/BerkeleyDB/t/join.t b/db/perl/BerkeleyDB/t/join.t
index ae7942f2c..3c3fc8f54 100644
--- a/db/perl/BerkeleyDB/t/join.t
+++ b/db/perl/BerkeleyDB/t/join.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't';
use BerkeleyDB;
-use t::util ;
+use util ;
if ($BerkeleyDB::db_ver < 2.005002)
{
diff --git a/db/perl/BerkeleyDB/t/mldbm.t b/db/perl/BerkeleyDB/t/mldbm.t
index 215d34f42..dfbd863e9 100644
--- a/db/perl/BerkeleyDB/t/mldbm.t
+++ b/db/perl/BerkeleyDB/t/mldbm.t
@@ -14,9 +14,12 @@ BEGIN
print "1..0 # Skip: Data::Dumper is not installed on this system.\n";
exit 0 ;
}
- if ($Data::Dumper::VERSION < 2.08) {
- print "1..0 # Skip: Data::Dumper 2.08 or better required (found $Data::Dumper::VERSION).\n";
- exit 0 ;
+ {
+ local ($^W) = 0 ;
+ if ($Data::Dumper::VERSION < 2.08) {
+ print "1..0 # Skip: Data::Dumper 2.08 or better required (found $Data::Dumper::VERSION).\n";
+ exit 0 ;
+ }
}
eval { require MLDBM ; };
if ($@) {
@@ -25,7 +28,8 @@ BEGIN
}
}
-use t::util ;
+use lib 't' ;
+use util ;
print "1..12\n";
diff --git a/db/perl/BerkeleyDB/t/queue.t b/db/perl/BerkeleyDB/t/queue.t
index 00291641c..22d4289fa 100644
--- a/db/perl/BerkeleyDB/t/queue.t
+++ b/db/perl/BerkeleyDB/t/queue.t
@@ -4,25 +4,16 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use Test::More;
+use util(1) ;
-BEGIN
-{
- if ($BerkeleyDB::db_version < 3.3) {
- print "1..0 # Skip: Queue needs Berkeley DB 3.3.x or better\n" ;
- exit 0 ;
- }
-}
+plan(skip_all => "Queue needs Berkeley DB 3.3.x or better\n" )
+ if $BerkeleyDB::db_version < 3.3;
+
+plan tests => 253;
-print "1..200\n";
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -37,20 +28,20 @@ umask(0) ;
# Check for invalid parameters
my $db ;
eval ' $db = new BerkeleyDB::Queue -Stupid => 3 ; ' ;
- ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
+ ok $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' $db = new BerkeleyDB::Queue -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
- ok 2, $@ =~ /unknown key value\(s\) / ;
+ ok $@ =~ /unknown key value\(s\) / ;
eval ' $db = new BerkeleyDB::Queue -Env => 2 ' ;
- ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
+ ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
eval ' $db = new BerkeleyDB::Queue -Txn => "x" ' ;
- ok 4, $@ =~ /^Txn not of type BerkeleyDB::Txn/ ;
+ ok $@ =~ /^Txn not of type BerkeleyDB::Txn/ ;
my $obj = bless [], "main" ;
eval ' $db = new BerkeleyDB::Queue -Env => $obj ' ;
- ok 5, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
+ ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
}
# Now check the interface to Queue
@@ -60,7 +51,7 @@ umask(0) ;
my $rec_len = 10 ;
my $pad = "x" ;
- ok 6, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Flags => DB_CREATE,
-Len => $rec_len,
-Pad => $pad;
@@ -68,39 +59,39 @@ umask(0) ;
# Add a k/v pair
my $value ;
my $status ;
- ok 7, $db->db_put(1, "some value") == 0 ;
- ok 8, $db->status() == 0 ;
- ok 9, $db->db_get(1, $value) == 0 ;
- ok 10, $value eq fillout("some value", $rec_len, $pad) ;
- 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_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 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 24, $db->db_sync() == 0 ;
+ ok $db->db_put(1, "some value") == 0 ;
+ ok $db->status() == 0 ;
+ ok $db->db_get(1, $value) == 0 ;
+ ok $value eq fillout("some value", $rec_len, $pad) ;
+ ok $db->db_put(2, "value") == 0 ;
+ ok $db->db_get(2, $value) == 0 ;
+ ok $value eq fillout("value", $rec_len, $pad) ;
+ ok $db->db_put(3, "value") == 0 ;
+ ok $db->db_get(3, $value) == 0 ;
+ ok $value eq fillout("value", $rec_len, $pad) ;
+ ok $db->db_del(2) == 0 ;
+ ok $db->db_get(2, $value) == DB_KEYEMPTY ;
+ ok $db->status() == DB_KEYEMPTY ;
+ ok $db->status() eq $DB_errors{'DB_KEYEMPTY'} ;
+
+ ok $db->db_get(7, $value) == DB_NOTFOUND ;
+ ok $db->status() == DB_NOTFOUND ;
+ ok $db->status() eq $DB_errors{'DB_NOTFOUND'} ;
+
+ ok $db->db_sync() == 0 ;
# Check NOOVERWRITE will make put fail when attempting to overwrite
# an existing record.
- 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 ;
+ ok $db->db_put( 1, 'x', DB_NOOVERWRITE) == DB_KEYEXIST ;
+ ok $db->status() eq $DB_errors{'DB_KEYEXIST'} ;
+ ok $db->status() == DB_KEYEXIST ;
# check that the value of the key has not been changed by the
# previous test
- ok 28, $db->db_get(1, $value) == 0 ;
- ok 29, $value eq fillout("some value", $rec_len, $pad) ;
+ ok $db->db_get(1, $value) == 0 ;
+ ok $value eq fillout("some value", $rec_len, $pad) ;
}
@@ -113,20 +104,20 @@ umask(0) ;
my $home = "./fred" ;
my $rec_len = 11 ;
- ok 30, my $lexD = new LexDir($home);
+ ok my $lexD = new LexDir($home);
- ok 31, my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,@StdErrFile,
+ ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,@StdErrFile,
-Home => $home ;
- ok 32, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Env => $env,
-Flags => DB_CREATE,
-Len => $rec_len;
# Add a k/v pair
my $value ;
- 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) ;
+ ok $db->db_put(1, "some value") == 0 ;
+ ok $db->db_get(1, $value) == 0 ;
+ ok $value eq fillout("some value", $rec_len) ;
undef $db ;
undef $env ;
}
@@ -139,7 +130,7 @@ umask(0) ;
my @array ;
my ($k, $v) ;
my $rec_len = 5 ;
- ok 36, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-ArrayBase => 0,
-Flags => DB_CREATE ,
-Len => $rec_len;
@@ -158,10 +149,10 @@ umask(0) ;
$ret += $db->db_put($i, $data[$i]) ;
$data{$i} = $data[$i] ;
}
- ok 37, $ret == 0 ;
+ ok $ret == 0 ;
# create the cursor
- ok 38, my $cursor = $db->db_cursor() ;
+ ok my $cursor = $db->db_cursor() ;
$k = 0 ; $v = "" ;
my %copy = %data;
@@ -175,10 +166,10 @@ umask(0) ;
{ ++ $extras }
}
- ok 39, $cursor->status() == DB_NOTFOUND ;
- ok 40, $cursor->status() eq $DB_errors{'DB_NOTFOUND'} ;
- ok 41, keys %copy == 0 ;
- ok 42, $extras == 0 ;
+ ok $cursor->status() == DB_NOTFOUND ;
+ ok $cursor->status() eq $DB_errors{'DB_NOTFOUND'} ;
+ ok keys %copy == 0 ;
+ ok $extras == 0 ;
# sequence backwards
%copy = %data ;
@@ -192,12 +183,12 @@ umask(0) ;
else
{ ++ $extras }
}
- 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 ;
+ ok $status == DB_NOTFOUND ;
+ ok $status eq $DB_errors{'DB_NOTFOUND'} ;
+ ok $cursor->status() == $status ;
+ ok $cursor->status() eq $status ;
+ ok keys %copy == 0 ;
+ ok $extras == 0 ;
}
{
@@ -207,36 +198,36 @@ umask(0) ;
my @array ;
my $db ;
my $rec_len = 10 ;
- ok 49, $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
+ ok $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
-ArrayBase => 0,
-Flags => DB_CREATE ,
-Len => $rec_len;
- ok 50, my $cursor = (tied @array)->db_cursor() ;
+ ok 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 51, $cursor->status() == DB_NOTFOUND ;
- ok 52, $count == 0 ;
+ ok $cursor->status() == DB_NOTFOUND ;
+ ok $count == 0 ;
- ok 53, @array == 0 ;
+ ok @array == 0 ;
# Add a k/v pair
my $value ;
$array[1] = "some value";
- ok 54, (tied @array)->status() == 0 ;
- 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 ;
+ ok ((tied @array)->status() == 0) ;
+ ok $array[1] eq fillout("some value", $rec_len);
+ ok defined $array[1];
+ ok ((tied @array)->status() == 0) ;
+ ok !defined $array[3];
+ ok ((tied @array)->status() == DB_NOTFOUND) ;
$array[1] = 2 ;
$array[10] = 20 ;
- $array[1000] = 2000 ;
+ $array[100] = 200 ;
my ($keys, $values) = (0,0);
$count = 0 ;
@@ -247,65 +238,65 @@ umask(0) ;
$values += $v ;
++ $count ;
}
- ok 60, $count == 3 ;
- ok 61, $keys == 1011 ;
- ok 62, $values == 2022 ;
+ ok $count == 3 ;
+ ok $keys == 111 ;
+ ok $values == 222 ;
# unshift isn't allowed
# eval {
# $FA ? unshift @array, "red", "green", "blue"
# : $db->unshift("red", "green", "blue" ) ;
# } ;
-# ok 64, $@ =~ /^unshift is unsupported with Queue databases/ ;
+# ok $@ =~ /^unshift is unsupported with Queue databases/ ;
$array[0] = "red" ;
$array[1] = "green" ;
$array[2] = "blue" ;
$array[4] = 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 ;
+ ok $array[0] eq fillout("red", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_FIRST) == 0 ;
+ ok $k == 0 ;
+ ok $v eq fillout("red", $rec_len) ;
+ ok $array[1] eq fillout("green", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok $k == 1 ;
+ ok $v eq fillout("green", $rec_len) ;
+ ok $array[2] eq fillout("blue", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok $k == 2 ;
+ ok $v eq fillout("blue", $rec_len) ;
+ ok $array[4] == 2 ;
+ ok $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok $k == 4 ;
+ ok $v == 2 ;
# shift
- 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 ;
+ ok (($FA ? shift @array : $db->shift()) eq fillout("red", $rec_len)) ;
+ ok (($FA ? shift @array : $db->shift()) eq fillout("green", $rec_len)) ;
+ ok (($FA ? shift @array : $db->shift()) eq fillout("blue", $rec_len)) ;
+ ok (($FA ? shift @array : $db->shift()) == 2) ;
# push
$FA ? push @array, "the", "end"
: $db->push("the", "end") ;
- 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 ;
+ ok $cursor->c_get($k, $v, DB_LAST) == 0 ;
+ ok $k == 102 ;
+ ok $v eq fillout("end", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_PREV) == 0 ;
+ ok $k == 101 ;
+ ok $v eq fillout("the", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_PREV) == 0 ;
+ ok $k == 100 ;
+ ok $v == 200 ;
# pop
- 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 ;
+ ok (( $FA ? pop @array : $db->pop ) eq fillout("end", $rec_len)) ;
+ ok (( $FA ? pop @array : $db->pop ) eq fillout("the", $rec_len)) ;
+ ok (( $FA ? pop @array : $db->pop ) == 200) ;
# now clear the array
$FA ? @array = ()
: $db->clear() ;
- ok 95, $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
+ ok $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
undef $cursor ;
undef $db ;
@@ -319,12 +310,12 @@ umask(0) ;
my $fd ;
my $value ;
my $rec_len = 15 ;
- ok 96, my $db = tie @array, 'BerkeleyDB::Queue',
+ ok my $db = tie @array, 'BerkeleyDB::Queue',
-Len => $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) ;
+ ok $db->db_put(1, "some value") == 0 ;
+ ok $db->db_get(1, $value) == 0 ;
+ ok $value eq fillout("some value", $rec_len) ;
}
@@ -335,7 +326,7 @@ umask(0) ;
my $lex = new LexFile $Dfile ;
my $value ;
my $rec_len = 8 ;
- ok 100, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Flags => DB_CREATE ,
-Len => $rec_len,
-Pad => " " ;
@@ -354,65 +345,65 @@ umask(0) ;
my $r = $db->db_put($i, $data[$i]) ;
$ret += $r ;
}
- ok 101, $ret == 0 ;
+ ok $ret == 0 ;
# do a partial get
my ($pon, $off, $len) = $db->partial_set(0,2) ;
- 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" ;
+ ok ! $pon && $off == 0 && $len == 0 ;
+ ok $db->db_get(1, $value) == 0 && $value eq "bo" ;
+ ok $db->db_get(2, $value) == 0 && $value eq "ho" ;
+ ok $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 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 " " ;
+ ok $pon ;
+ ok $off == 0 ;
+ ok $len == 2 ;
+ ok $db->db_get(1, $value) == 0 && $value eq fillout("t", 2) ;
+ ok $db->db_get(2, $value) == 0 && $value eq "se" ;
+ ok $db->db_get(3, $value) == 0 && $value eq " " ;
# switch of partial mode
($pon, $off, $len) = $db->partial_clear() ;
- 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) ;
+ ok $pon ;
+ ok $off == 3 ;
+ ok $len == 2 ;
+ ok $db->db_get(1, $value) == 0 && $value eq fillout("boat", $rec_len) ;
+ ok $db->db_get(2, $value) == 0 && $value eq fillout("house", $rec_len) ;
+ ok $db->db_get(3, $value) == 0 && $value eq fillout("sea", $rec_len) ;
# now partial put
$db->partial_set(0,2) ;
- 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 ;
+ ok $db->db_put(1, "") != 0 ;
+ ok $db->db_put(2, "AB") == 0 ;
+ ok $db->db_put(3, "XY") == 0 ;
+ ok $db->db_put(4, "KLM") != 0 ;
+ ok $db->db_put(4, "KL") == 0 ;
($pon, $off, $len) = $db->partial_clear() ;
- 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) ;
+ ok $pon ;
+ ok $off == 0 ;
+ ok $len == 2 ;
+ ok $db->db_get(1, $value) == 0 && $value eq fillout("boat", $rec_len) ;
+ ok $db->db_get(2, $value) == 0 && $value eq fillout("ABuse", $rec_len) ;
+ ok $db->db_get(3, $value) == 0 && $value eq fillout("XYa", $rec_len) ;
+ ok $db->db_get(4, $value) == 0 && $value eq fillout("KL", $rec_len) ;
# now partial put
($pon, $off, $len) = $db->partial_set(3,2) ;
- 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 ;
+ ok ! $pon ;
+ ok $off == 0 ;
+ ok $len == 0 ;
+ ok $db->db_put(1, "PP") == 0 ;
+ ok $db->db_put(2, "Q") != 0 ;
+ ok $db->db_put(3, "XY") == 0 ;
+ ok $db->db_put(4, "TU") == 0 ;
$db->partial_clear() ;
- 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) ;
+ ok $db->db_get(1, $value) == 0 && $value eq fillout("boaPP", $rec_len) ;
+ ok $db->db_get(2, $value) == 0 && $value eq fillout("ABuse",$rec_len) ;
+ ok $db->db_get(3, $value) == 0 && $value eq fillout("XYaXY", $rec_len) ;
+ ok $db->db_get(4, $value) == 0 && $value eq fillout("KL TU", $rec_len) ;
}
{
@@ -423,7 +414,7 @@ umask(0) ;
my @array ;
my $value ;
my $rec_len = 8 ;
- ok 141, my $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
+ ok my $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
-Flags => DB_CREATE ,
-Len => $rec_len,
-Pad => " " ;
@@ -443,59 +434,59 @@ umask(0) ;
$status += $db->status() ;
}
- ok 142, $status == 0 ;
+ ok $status == 0 ;
# do a partial get
$db->partial_set(0,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) ;
+ ok $array[1] eq fillout("bo", 2) ;
+ ok $array[2] eq fillout("ho", 2) ;
+ ok $array[3] eq fillout("se", 2) ;
# do a partial get, off end of data
$db->partial_set(3,2) ;
- ok 146, $array[1] eq fillout("t", 2) ;
- ok 147, $array[2] eq fillout("se", 2) ;
- ok 148, $array[3] eq fillout("", 2) ;
+ ok $array[1] eq fillout("t", 2) ;
+ ok $array[2] eq fillout("se", 2) ;
+ ok $array[3] eq fillout("", 2) ;
# switch of partial mode
$db->partial_clear() ;
- 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) ;
+ ok $array[1] eq fillout("boat", $rec_len) ;
+ ok $array[2] eq fillout("house", $rec_len) ;
+ ok $array[3] eq fillout("sea", $rec_len) ;
# now partial put
$db->partial_set(0,2) ;
$array[1] = "" ;
- ok 152, $db->status() != 0 ;
+ ok $db->status() != 0 ;
$array[2] = "AB" ;
- ok 153, $db->status() == 0 ;
+ ok $db->status() == 0 ;
$array[3] = "XY" ;
- ok 154, $db->status() == 0 ;
+ ok $db->status() == 0 ;
$array[4] = "KL" ;
- ok 155, $db->status() == 0 ;
+ ok $db->status() == 0 ;
$db->partial_clear() ;
- 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) ;
+ ok $array[1] eq fillout("boat", $rec_len) ;
+ ok $array[2] eq fillout("ABuse", $rec_len) ;
+ ok $array[3] eq fillout("XYa", $rec_len) ;
+ ok $array[4] eq fillout("KL", $rec_len) ;
# now partial put
$db->partial_set(3,2) ;
$array[1] = "PP" ;
- ok 160, $db->status() == 0 ;
+ ok $db->status() == 0 ;
$array[2] = "Q" ;
- ok 161, $db->status() != 0 ;
+ ok $db->status() != 0 ;
$array[3] = "XY" ;
- ok 162, $db->status() == 0 ;
+ ok $db->status() == 0 ;
$array[4] = "TU" ;
- ok 163, $db->status() == 0 ;
+ ok $db->status() == 0 ;
$db->partial_clear() ;
- 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) ;
+ ok $array[1] eq fillout("boaPP", $rec_len) ;
+ ok $array[2] eq fillout("ABuse", $rec_len) ;
+ ok $array[3] eq fillout("XYaXY", $rec_len) ;
+ ok $array[4] eq fillout("KL TU", $rec_len) ;
}
{
@@ -506,13 +497,13 @@ umask(0) ;
my $value ;
my $home = "./fred" ;
- ok 168, my $lexD = new LexDir($home);
+ ok my $lexD = new LexDir($home);
my $rec_len = 9 ;
- ok 169, my $env = new BerkeleyDB::Env -Home => $home,@StdErrFile,
+ ok my $env = new BerkeleyDB::Env -Home => $home,@StdErrFile,
-Flags => DB_CREATE|DB_INIT_TXN|
DB_INIT_MPOOL|DB_INIT_LOCK ;
- ok 170, my $txn = $env->txn_begin() ;
- ok 171, my $db1 = tie @array, 'BerkeleyDB::Queue',
+ ok my $txn = $env->txn_begin() ;
+ ok my $db1 = tie @array, 'BerkeleyDB::Queue',
-Filename => $Dfile,
-ArrayBase => 0,
-Flags => DB_CREATE ,
@@ -522,8 +513,8 @@ umask(0) ;
-Pad => " " ;
- ok 172, $txn->txn_commit() == 0 ;
- ok 173, $txn = $env->txn_begin() ;
+ ok $txn->txn_commit() == 0 ;
+ ok $txn = $env->txn_begin() ;
$db1->Txn($txn);
# create some data
@@ -538,31 +529,31 @@ umask(0) ;
for ($i = 0 ; $i < @data ; ++$i) {
$ret += $db1->db_put($i, $data[$i]) ;
}
- ok 174, $ret == 0 ;
+ ok $ret == 0 ;
# should be able to see all the records
- ok 175, my $cursor = $db1->db_cursor() ;
+ ok 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 176, $count == 3 ;
+ ok $count == 3 ;
undef $cursor ;
# now abort the transaction
- ok 177, $txn->txn_abort() == 0 ;
+ ok $txn->txn_abort() == 0 ;
# there shouldn't be any records in the database
$count = 0 ;
# sequence forwards
- ok 178, $cursor = $db1->db_cursor() ;
+ ok $cursor = $db1->db_cursor() ;
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
++ $count ;
}
- ok 179, $count == 0 ;
+ ok $count == 0 ;
undef $txn ;
undef $cursor ;
@@ -580,7 +571,7 @@ umask(0) ;
my @array ;
my ($k, $v) ;
my $rec_len = 7 ;
- ok 180, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Flags => DB_CREATE,
-Pagesize => 4 * 1024,
-Len => $rec_len,
@@ -588,8 +579,8 @@ umask(0) ;
;
my $ref = $db->db_stat() ;
- ok 181, $ref->{$recs} == 0;
- ok 182, $ref->{'qs_pagesize'} == 4 * 1024;
+ ok $ref->{$recs} == 0;
+ ok $ref->{'qs_pagesize'} == 4 * 1024;
# create some data
my @data = (
@@ -603,10 +594,10 @@ umask(0) ;
for ($i = $db->ArrayOffset ; @data ; ++$i) {
$ret += $db->db_put($i, shift @data) ;
}
- ok 183, $ret == 0 ;
+ ok $ret == 0 ;
$ref = $db->db_stat() ;
- ok 184, $ref->{$recs} == 3;
+ ok $ref->{$recs} == 3;
}
{
@@ -657,7 +648,7 @@ EOM
BEGIN { push @INC, '.'; }
eval 'use SubDB ; ';
- main::ok 185, $@ eq "" ;
+ main::ok $@ eq "" ;
my @h ;
my $X ;
my $rec_len = 34 ;
@@ -670,24 +661,24 @@ EOM
);
' ;
- main::ok 186, $@ eq "" ;
+ main::ok $@ eq "" ;
my $ret = eval '$h[1] = 3 ; return $h[1] ' ;
- main::ok 187, $@ eq "" ;
- main::ok 188, $ret == 7 ;
+ main::ok $@ eq "" ;
+ main::ok $ret == 7 ;
my $value = 0;
$ret = eval '$X->db_put(1, 4) ; $X->db_get(1, $value) ; return $value' ;
- main::ok 189, $@ eq "" ;
- main::ok 190, $ret == 10 ;
+ main::ok $@ eq "" ;
+ main::ok $ret == 10 ;
$ret = eval ' DB_NEXT eq main::DB_NEXT ' ;
- main::ok 191, $@ eq "" ;
- main::ok 192, $ret == 1 ;
+ main::ok $@ eq "" ;
+ main::ok $ret == 1 ;
$ret = eval '$X->A_new_method(1) ' ;
- main::ok 193, $@ eq "" ;
- main::ok 194, $ret eq "[[10]]" ;
+ main::ok $@ eq "" ;
+ main::ok $ret eq "[[10]]" ;
undef $X ;
untie @h ;
@@ -702,7 +693,7 @@ EOM
my @array ;
my $value ;
my $rec_len = 21 ;
- ok 195, my $db = tie @array, 'BerkeleyDB::Queue',
+ ok my $db = tie @array, 'BerkeleyDB::Queue',
-Filename => $Dfile,
-Flags => DB_CREATE ,
-Len => $rec_len,
@@ -713,9 +704,9 @@ EOM
$array[3] = "ghi" ;
my $k = 0 ;
- ok 196, $db->db_put($k, "fred", DB_APPEND) == 0 ;
- ok 197, $k == 4 ;
- ok 198, $array[4] eq fillout("fred", $rec_len) ;
+ ok $db->db_put($k, "fred", DB_APPEND) == 0 ;
+ ok $k == 4 ;
+ ok $array[4] eq fillout("fred", $rec_len) ;
undef $db ;
untie @array ;
@@ -727,7 +718,7 @@ EOM
my @array ;
my $db ;
my $rec_len = 21 ;
- ok 199, $db = tie @array, 'BerkeleyDB::Queue',
+ ok $db = tie @array, 'BerkeleyDB::Queue',
-Flags => DB_CREATE ,
-ArrayBase => 0,
-Len => $rec_len,
@@ -736,13 +727,137 @@ EOM
$FA ? push @array, "first"
: $db->push("first") ;
- ok 200, ($FA ? pop @array : $db->pop()) eq fillout("first", $rec_len) ;
+ ok (($FA ? pop @array : $db->pop()) eq fillout("first", $rec_len)) ;
undef $db;
untie @array ;
}
+{
+ # Tied Array interface with transactions
+
+ my $lex = new LexFile $Dfile ;
+ my @array ;
+ my $db ;
+ my $rec_len = 10 ;
+ my $home = "./fred" ;
+ ok my $lexD = new LexDir($home);
+ ok my $env = new BerkeleyDB::Env -Home => $home,@StdErrFile,
+ -Flags => DB_CREATE|DB_INIT_TXN|
+ DB_INIT_MPOOL|DB_INIT_LOCK ;
+ ok my $txn = $env->txn_begin() ;
+ ok $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
+ -ArrayBase => 0,
+ -Flags => DB_CREATE ,
+ -Env => $env ,
+ -Txn => $txn ,
+ -Len => $rec_len;
+
+ ok $txn->txn_commit() == 0 ;
+ ok $txn = $env->txn_begin() ;
+ $db->Txn($txn);
+
+ ok 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 $cursor->status() == DB_NOTFOUND ;
+ ok $count == 0 ;
+
+ ok @array == 0 ;
+
+ # Add a k/v pair
+ my $value ;
+ $array[1] = "some value";
+ ok ((tied @array)->status() == 0) ;
+ ok $array[1] eq fillout("some value", $rec_len);
+ ok defined $array[1];
+ ok ((tied @array)->status() == 0) ;
+ ok !defined $array[3];
+ ok ((tied @array)->status() == DB_NOTFOUND) ;
+
+ $array[1] = 2 ;
+ $array[10] = 20 ;
+ $array[100] = 200 ;
+
+ my ($keys, $values) = (0,0);
+ $count = 0 ;
+ for ( my $status = $cursor->c_get($k, $v, DB_FIRST) ;
+ $status == 0 ;
+ $status = $cursor->c_get($k, $v, DB_NEXT)) {
+ $keys += $k ;
+ $values += $v ;
+ ++ $count ;
+ }
+ ok $count == 3 ;
+ ok $keys == 111 ;
+ ok $values == 222 ;
+
+ # unshift isn't allowed
+# eval {
+# $FA ? unshift @array, "red", "green", "blue"
+# : $db->unshift("red", "green", "blue" ) ;
+# } ;
+# ok $@ =~ /^unshift is unsupported with Queue databases/ ;
+ $array[0] = "red" ;
+ $array[1] = "green" ;
+ $array[2] = "blue" ;
+ $array[4] = 2 ;
+ ok $array[0] eq fillout("red", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_FIRST) == 0 ;
+ ok $k == 0 ;
+ ok $v eq fillout("red", $rec_len) ;
+ ok $array[1] eq fillout("green", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok $k == 1 ;
+ ok $v eq fillout("green", $rec_len) ;
+ ok $array[2] eq fillout("blue", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok $k == 2 ;
+ ok $v eq fillout("blue", $rec_len) ;
+ ok $array[4] == 2 ;
+ ok $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok $k == 4 ;
+ ok $v == 2 ;
+
+ # shift
+ ok (($FA ? shift @array : $db->shift()) eq fillout("red", $rec_len)) ;
+ ok (($FA ? shift @array : $db->shift()) eq fillout("green", $rec_len)) ;
+ ok (($FA ? shift @array : $db->shift()) eq fillout("blue", $rec_len)) ;
+ ok (($FA ? shift @array : $db->shift()) == 2) ;
+
+ # push
+ $FA ? push @array, "the", "end"
+ : $db->push("the", "end") ;
+ ok $cursor->c_get($k, $v, DB_LAST) == 0 ;
+ ok $k == 102 ;
+ ok $v eq fillout("end", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_PREV) == 0 ;
+ ok $k == 101 ;
+ ok $v eq fillout("the", $rec_len) ;
+ ok $cursor->c_get($k, $v, DB_PREV) == 0 ;
+ ok $k == 100 ;
+ ok $v == 200 ;
+
+ # pop
+ ok (( $FA ? pop @array : $db->pop ) eq fillout("end", $rec_len)) ;
+ ok (( $FA ? pop @array : $db->pop ) eq fillout("the", $rec_len)) ;
+ ok (( $FA ? pop @array : $db->pop ) == 200 ) ;
+
+ # now clear the array
+ $FA ? @array = ()
+ : $db->clear() ;
+ ok $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
+ undef $cursor ;
+ ok $txn->txn_commit() == 0 ;
+
+ undef $db ;
+ untie @array ;
+}
__END__
diff --git a/db/perl/BerkeleyDB/t/recno.t b/db/perl/BerkeleyDB/t/recno.t
index 7bbb50169..9fadef1f3 100644
--- a/db/perl/BerkeleyDB/t/recno.t
+++ b/db/perl/BerkeleyDB/t/recno.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..226\n";
diff --git a/db/perl/BerkeleyDB/t/strict.t b/db/perl/BerkeleyDB/t/strict.t
index 4774cd15d..2c75127ca 100644
--- a/db/perl/BerkeleyDB/t/strict.t
+++ b/db/perl/BerkeleyDB/t/strict.t
@@ -2,15 +2,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..44\n";
diff --git a/db/perl/BerkeleyDB/t/subdb.t b/db/perl/BerkeleyDB/t/subdb.t
index 4e56332eb..929232d9f 100644
--- a/db/perl/BerkeleyDB/t/subdb.t
+++ b/db/perl/BerkeleyDB/t/subdb.t
@@ -2,25 +2,15 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use Test::More ;
+use util qw(1);
-BEGIN
-{
- if ($BerkeleyDB::db_version < 3) {
- print "1..0 # Skip: this needs Berkeley DB 3.x or better\n" ;
- exit 0 ;
- }
-}
+plan(skip_all => "this needs Berkeley DB 3.x or better\n" )
+ if $BerkeleyDB::db_version < 3;
-print "1..43\n";
+plan tests => 43;
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -29,6 +19,29 @@ unlink $Dfile;
umask(0) ;
+sub countDatabases
+{
+ my $file = shift ;
+
+ ok my $db = new BerkeleyDB::Unknown -Filename => $file ,
+ -Flags => DB_RDONLY ;
+
+ #my $type = $db->type() ; print "type $type\n" ;
+ ok my $cursor = $db->db_cursor() ;
+ my ($k, $v) = ("", "") ;
+ my $status ;
+ my @dbnames = () ;
+ while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
+ push @dbnames, $k ;
+ }
+
+ ok $status == DB_NOTFOUND;
+
+ return wantarray ? sort @dbnames : scalar @dbnames ;
+
+
+}
+
# Berkeley DB 3.x specific functionality
# Check for invalid parameters
@@ -36,20 +49,20 @@ umask(0) ;
# Check for invalid parameters
my $db ;
eval ' BerkeleyDB::db_remove -Stupid => 3 ; ' ;
- ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
+ ok $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' BerkeleyDB::db_remove -Bad => 2, -Filename => "fred", -Stupid => 3; ' ;
- ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
+ ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/ ;
eval ' BerkeleyDB::db_remove -Filename => "a", -Env => 2 ' ;
- ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
+ ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
eval ' BerkeleyDB::db_remove -Subname => "a"' ;
- ok 4, $@ =~ /^Must specify a filename/ ;
+ ok $@ =~ /^Must specify a filename/ ;
my $obj = bless [], "main" ;
eval ' BerkeleyDB::db_remove -Filename => "x", -Env => $obj ' ;
- ok 5, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
+ ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
}
{
@@ -60,7 +73,7 @@ umask(0) ;
my $lex = new LexFile $Dfile ;
- ok 6, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
-Flags => DB_CREATE ;
# Add a k/v pair
@@ -72,16 +85,16 @@ umask(0) ;
green grass
) ;
- ok 7, addData($db, %data) ;
+ ok addData($db, %data) ;
undef $db ;
$db = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "fred" ;
- ok 8, ! $db ;
+ ok ! $db ;
- ok 9, -e $Dfile ;
- ok 10, ! BerkeleyDB::db_remove(-Filename => $Dfile) ;
+ ok -e $Dfile ;
+ ok ! BerkeleyDB::db_remove(-Filename => $Dfile) ;
}
{
@@ -92,7 +105,7 @@ umask(0) ;
my $lex = new LexFile $Dfile ;
- ok 11, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "fred" ,
-Flags => DB_CREATE ;
@@ -105,14 +118,14 @@ umask(0) ;
green grass
) ;
- ok 12, addData($db, %data) ;
+ ok addData($db, %data) ;
undef $db ;
$db = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "joe" ;
- ok 13, !$db ;
+ ok !$db ;
}
@@ -121,7 +134,7 @@ umask(0) ;
my $lex = new LexFile $Dfile ;
- ok 14, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
+ ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "fred" ,
-Flags => DB_CREATE ;
@@ -134,23 +147,11 @@ umask(0) ;
green grass
) ;
- ok 15, addData($db, %data) ;
-
+ ok addData($db, %data) ;
undef $db ;
- ok 16, $db = new BerkeleyDB::Hash -Filename => $Dfile,
- -Subname => "fred" ;
+ is join(",", countDatabases($Dfile)), "fred";
- ok 17, my $cursor = $db->db_cursor() ;
- my ($k, $v) = ("", "") ;
- my $status ;
- while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
- if ($data{$k} eq $v) {
- delete $data{$k} ;
- }
- }
- ok 18, $status == DB_NOTFOUND ;
- ok 19, keys %data == 0 ;
}
{
@@ -161,11 +162,11 @@ umask(0) ;
my $lex = new LexFile $Dfile ;
- ok 20, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
+ ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
-Subname => "fred" ,
-Flags => DB_CREATE ;
- ok 21, my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
+ ok my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
-Subname => "joe" ,
-Flags => DB_CREATE ;
@@ -178,66 +179,32 @@ umask(0) ;
green grass
) ;
- ok 22, addData($db1, %data) ;
- ok 23, addData($db2, %data) ;
+ ok addData($db1, %data) ;
+ ok addData($db2, %data) ;
undef $db1 ;
undef $db2 ;
- ok 24, my $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
- -Flags => DB_RDONLY ;
-
- #my $type = $db->type() ; print "type $type\n" ;
- ok 25, my $cursor = $db->db_cursor() ;
- my ($k, $v) = ("", "") ;
- my $status ;
- my @dbnames = () ;
- while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
- push @dbnames, $k ;
- }
- ok 26, $status == DB_NOTFOUND ;
- ok 27, join(",", sort @dbnames) eq "fred,joe" ;
- undef $db ;
+ is join(",", countDatabases($Dfile)), "fred,joe";
- ok 28, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "harry") != 0;
- ok 29, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") == 0 ;
+ ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "harry") != 0;
+ ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") == 0 ;
# should only be one subdatabase
- ok 30, $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
- -Flags => DB_RDONLY ;
-
- ok 31, $cursor = $db->db_cursor() ;
- @dbnames = () ;
- while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
- push @dbnames, $k ;
- }
- ok 32, $status == DB_NOTFOUND ;
- ok 33, join(",", sort @dbnames) eq "joe" ;
- undef $db ;
+ is join(",", countDatabases($Dfile)), "joe";
# can't delete an already deleted subdatabase
- ok 34, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") != 0;
+ ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") != 0;
- ok 35, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "joe") == 0 ;
+ ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "joe") == 0 ;
# should only be one subdatabase
- ok 36, $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
- -Flags => DB_RDONLY ;
-
- ok 37, $cursor = $db->db_cursor() ;
- @dbnames = () ;
- while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
- push @dbnames, $k ;
- }
- ok 38, $status == DB_NOTFOUND ;
- ok 39, @dbnames == 0 ;
- undef $db ;
- undef $cursor ;
+ is countDatabases($Dfile), 0;
- ok 40, -e $Dfile ;
- ok 41, BerkeleyDB::db_remove(-Filename => $Dfile) == 0 ;
- ok 42, ! -e $Dfile ;
- ok 43, BerkeleyDB::db_remove(-Filename => $Dfile) != 0 ;
+ ok -e $Dfile ;
+ ok BerkeleyDB::db_remove(-Filename => $Dfile) == 0 ;
+ ok ! -e $Dfile ;
+ ok BerkeleyDB::db_remove(-Filename => $Dfile) != 0 ;
}
# db_remove with env
diff --git a/db/perl/BerkeleyDB/t/txn.t b/db/perl/BerkeleyDB/t/txn.t
index f8fa2ceb8..c451c6409 100644
--- a/db/perl/BerkeleyDB/t/txn.t
+++ b/db/perl/BerkeleyDB/t/txn.t
@@ -2,15 +2,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..58\n";
diff --git a/db/perl/BerkeleyDB/t/unknown.t b/db/perl/BerkeleyDB/t/unknown.t
index f2630b585..4214e3cb9 100644
--- a/db/perl/BerkeleyDB/t/unknown.t
+++ b/db/perl/BerkeleyDB/t/unknown.t
@@ -4,15 +4,9 @@
use strict ;
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib' if -d '../lib';
- }
-}
-
+use lib 't' ;
use BerkeleyDB;
-use t::util ;
+use util ;
print "1..41\n";
@@ -30,7 +24,7 @@ umask(0) ;
ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' $db = new BerkeleyDB::Unknown -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
- ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
+ ok 2, $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/ ;
eval ' $db = new BerkeleyDB::Unknown -Env => 2 ' ;
ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
diff --git a/db/perl/BerkeleyDB/t/util.pm b/db/perl/BerkeleyDB/t/util.pm
index 9f55c40d8..01b2f05ac 100644
--- a/db/perl/BerkeleyDB/t/util.pm
+++ b/db/perl/BerkeleyDB/t/util.pm
@@ -1,5 +1,32 @@
package util ;
+use strict;
+
+use vars qw( $wantOK) ;
+$wantOK = 1 ;
+
+sub _ok
+{
+ my $no = shift ;
+ my $result = shift ;
+
+ print "not " unless $result ;
+ print "ok $no\n" ;
+ return $result;
+}
+
+sub import
+{
+ my $class = shift ;
+ my $no_want_ok = shift ;
+
+ $wantOK = 0 if $no_want_ok ;
+ if (! $no_want_ok)
+ {
+ *main::ok = \&_ok ;
+ }
+}
+
package main ;
use strict ;
@@ -43,22 +70,23 @@ $FA = 0 ;
sub new
{
- my $self = shift ;
+ my $self = shift ;
#my @files = () ;
foreach (@_)
{
$_ = $basename ;
- unlink $basename ;
+ 1 while unlink $basename ;
push @files, $basename ;
++ $basename ;
}
- bless [ @files ], $self ;
+ bless [ @files ], $self ;
}
sub DESTROY
{
- my $self = shift ;
- #unlink @{ $self } ;
+ my $self = shift ;
+ chmod 0777, @{ $self } ;
+ for (@$self) { 1 while unlink $_ } ;
}
END
@@ -258,14 +286,6 @@ sub addData
return ($ret == 0) ;
}
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
# These two subs lifted directly from MLDBM.pm
@@ -323,4 +343,12 @@ sub fillout
return $template ;
}
+sub title
+{
+ #diag "" ;
+ ok(1, $_[0]) ;
+ #diag "" ;
+}
+
+
1;
diff --git a/db/perl/BerkeleyDB/typemap b/db/perl/BerkeleyDB/typemap
index 66c622bd0..43035ed39 100644
--- a/db/perl/BerkeleyDB/typemap
+++ b/db/perl/BerkeleyDB/typemap
@@ -8,9 +8,11 @@
#
#
+SVnull* T_SV_NULL
void * T_PV
u_int T_U_INT
u_int32_t T_U_INT
+db_timeout_t T_U_INT
const char * T_PV_NULL
PV_or_NULL T_PV_NULL
IO_or_NULL T_IO_NULL
@@ -53,6 +55,8 @@ DBT_OPT T_dbtdatum_opt
DBT_B T_dbtdatum_btree
DBTKEY T_dbtkeydatum
DBTKEY_B T_dbtkeydatum_btree
+DBTKEY_Br T_dbtkeydatum_btree_r
+DBTKEY_Bpr T_dbtkeydatum_btree_pr
DBTYPE T_U_INT
DualType T_DUAL
BerkeleyDB_type * T_IV
@@ -88,6 +92,12 @@ T_SV_REF_NULL
else
croak(\"$var is not of type ${ntype}\")
+T_SV_NULL
+ if ($arg == NULL || $arg == &PL_sv_undef)
+ $var = NULL ;
+ else
+ $var = $arg ;
+
T_HV_REF_NULL
if ($arg == &PL_sv_undef)
$var = NULL ;
@@ -208,6 +218,42 @@ T_dbtkeydatum_btree
}
}
+T_dbtkeydatum_btree_r
+ {
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
+ DBT_clear($var) ;
+ SvGETMAGIC($arg) ;
+ 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_dbtkeydatum_btree_pr
+ {
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
+ DBT_clear($var) ;
+ SvGETMAGIC($arg) ;
+ 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
{
SV* my_sv = $arg ;
@@ -223,7 +269,7 @@ T_dbtdatum
T_dbtdatum_opt
DBT_clear($var) ;
- if (flagSet(DB_GET_BOTH)) {
+ if (flagSet(DB_GET_BOTH)|| flagSet(DB_GET_BOTH)) {
SV* my_sv = $arg ;
DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
SvGETMAGIC($arg) ;
@@ -236,7 +282,7 @@ T_dbtdatum_opt
T_dbtdatum_btree
DBT_clear($var) ;
- if (flagSet(DB_GET_BOTH)) {
+ if (flagSet(DB_GET_BOTH)|| flagSet(DB_GET_BOTH)) {
SV* my_sv = $arg ;
DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
SvGETMAGIC($arg) ;
@@ -250,6 +296,9 @@ T_dbtdatum_btree
OUTPUT
+T_SV_NULL
+ $arg = $var;
+
T_RAW
sv_setiv($arg, PTR2IV($var));
@@ -276,6 +325,10 @@ T_PV_NULL
T_dbtkeydatum_btree
OutputKey_B($arg, $var)
+T_dbtkeydatum_btree_r
+ OutputKey_Br($arg, $var)
+T_dbtkeydatum_btree_pr
+ OutputKey_Bpr($arg, $var)
T_dbtkeydatum
OutputKey($arg, $var)
T_dbtdatum
diff --git a/db/perl/DB_File/Changes b/db/perl/DB_File/Changes
index 89027d13f..d472ece99 100644
--- a/db/perl/DB_File/Changes
+++ b/db/perl/DB_File/Changes
@@ -1,11 +1,35 @@
+1.814 11 November 2005
+
+ * Fix from Dominic Dunlop to tidy up an OS-X specific warning in
+ db-btree.t.
+
+ * Silenced a warning about $DB_File::Error only being used once.
+ Issue spotted by Dominic Dunlop.
+
+1.813 31st October 2005
+
+ * Updates for Berkeley DB 4.4
+
+1.812 9th October 2005
+
+ * Added libscan to Makefile.PL
+
+ * Fixed test failing under windows
+
+1.811 12th March 2005
+
+ * Fixed DBM filter bug in seq
+
1.810 7th August 2004
* Fixed db-hash.t for Cygwin
* Added substr tests to db-hast.t
+ * Documented AIX build problem in README.
+
1.809 20th June 2004
* Merged core patch 22258
diff --git a/db/perl/DB_File/DB_File.pm b/db/perl/DB_File/DB_File.pm
index 5ddac46c9..3bdadede0 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 (pmqs@cpan.org)
-# last modified 7th August 2004
-# version 1.810
+# last modified 11th November 2005
+# version 1.814
#
-# Copyright (c) 1995-2004 Paul Marquess. All rights reserved.
+# Copyright (c) 1995-2005 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.
@@ -161,11 +161,11 @@ package DB_File ;
use warnings;
use strict;
our ($VERSION, @ISA, @EXPORT, $AUTOLOAD, $DB_BTREE, $DB_HASH, $DB_RECNO);
-our ($db_version, $use_XSLoader, $splice_end_array);
+our ($db_version, $use_XSLoader, $splice_end_array, $Error);
use Carp;
-$VERSION = "1.810" ;
+$VERSION = "1.814" ;
{
local $SIG{__WARN__} = sub {$splice_end_array = "@_";};
@@ -268,6 +268,10 @@ sub tie_hash_or_array
# make recno in Berkeley DB version 2 (or better) work like
# recno in version 1.
+ if ($db_version >= 4 and ! $tieHASH) {
+ $arg[2] |= O_CREAT();
+ }
+
if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and
$arg[1] and ! -e $arg[1]) {
open(FH, ">$arg[1]") or return undef ;
@@ -1851,7 +1855,7 @@ Here is another real-life example. By default, whenever Perl writes to
a DBM database it always writes the key and value as strings. So when
you use this:
- $hash{12345} = "soemthing" ;
+ $hash{12345} = "something" ;
the key 12345 will get stored in the DBM database as the 5 byte string
"12345". If you actually want the key to be stored in the DBM database
@@ -2253,7 +2257,7 @@ compile properly on IRIX 5.3.
=head1 COPYRIGHT
-Copyright (c) 1995-2004 Paul Marquess. All rights reserved. This program
+Copyright (c) 1995-2005 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.
diff --git a/db/perl/DB_File/DB_File.xs b/db/perl/DB_File/DB_File.xs
index 8f6cec1cc..8f4cb2fe7 100644
--- a/db/perl/DB_File/DB_File.xs
+++ b/db/perl/DB_File/DB_File.xs
@@ -3,12 +3,12 @@
DB_File.xs -- Perl 5 interface to Berkeley DB
written by Paul Marquess <pmqs@cpan.org>
- last modified 7th August 2004
- version 1.810
+ last modified 11th November 2005
+ version 1.814
All comments/suggestions/problems are welcome
- Copyright (c) 1995-2004 Paul Marquess. All rights reserved.
+ Copyright (c) 1995-2005 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.
@@ -110,6 +110,10 @@
1.808 - leak fixed in ParseOpenInfo
1.809 - no change
1.810 - no change
+ 1.811 - no change
+ 1.812 - no change
+ 1.813 - no change
+ 1.814 - no change
*/
@@ -191,10 +195,22 @@
# define AT_LEAST_DB_3_2
#endif
+#if DB_VERSION_MAJOR > 3 || (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR >= 3)
+# define AT_LEAST_DB_3_3
+#endif
+
#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
# define AT_LEAST_DB_4_1
#endif
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
+# define AT_LEAST_DB_4_3
+#endif
+
+#ifdef AT_LEAST_DB_3_3
+# define WANT_ERROR
+#endif
+
/* map version 2 features & constants onto their version 1 equivalent */
#ifdef DB_Prefix_t
@@ -768,14 +784,13 @@ HASH_CB_SIZE_TYPE size ;
return (retval) ;
}
-#if 0
+#ifdef WANT_ERROR
+
static void
-#ifdef CAN_PROTOTYPE
-db_errcall_cb(const char * db_errpfx, char * buffer)
+#ifdef AT_LEAST_DB_4_3
+db_errcall_cb(const DB_ENV* dbenv, const char * db_errpfx, const char * buffer)
#else
-db_errcall_cb(db_errpfx, buffer)
-const char * db_errpfx;
-char * buffer;
+db_errcall_cb(const char * db_errpfx, char * buffer)
#endif
{
#ifdef dTHX
@@ -1235,6 +1250,9 @@ SV * sv ;
}
dbp = RETVAL->dbp ;
+#ifdef WANT_ERROR
+ RETVAL->dbp->set_errcall(RETVAL->dbp, db_errcall_cb) ;
+#endif
if (sv)
{
if (! SvROK(sv) )
@@ -1429,6 +1447,12 @@ SV * sv ;
Flags |= DB_TRUNCATE ;
#endif
+#ifdef AT_LEAST_DB_4_4
+ /* need this for recno */
+ if ((flags & O_TRUNC) == O_TRUNC)
+ Flags |= DB_CREATE ;
+#endif
+
#ifdef AT_LEAST_DB_4_1
status = (RETVAL->dbp->open)(RETVAL->dbp, NULL, name, NULL, RETVAL->type,
Flags, mode) ;
@@ -1439,7 +1463,6 @@ SV * sv ;
/* printf("open returned %d %s\n", status, db_strerror(status)) ; */
if (status == 0) {
- /* RETVAL->dbp->set_errcall(RETVAL->dbp, db_errcall_cb) ;*/
status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
0) ;
@@ -1469,7 +1492,9 @@ BOOT:
#ifdef dTHX
dTHX;
#endif
- /* SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ; */
+#ifdef WANT_ERROR
+ SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ;
+#endif
MY_CXT_INIT;
__getBerkeleyDBInfo() ;
diff --git a/db/perl/DB_File/META.yml b/db/perl/DB_File/META.yml
index 2cb481b8c..44e0815ee 100644
--- a/db/perl/DB_File/META.yml
+++ b/db/perl/DB_File/META.yml
@@ -1,10 +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.810
+version: 1.814
version_from: DB_File.pm
installdirs: site
requires:
distribution_type: module
-generated_by: ExtUtils::MakeMaker version 6.21_02
+generated_by: ExtUtils::MakeMaker version 6.17
diff --git a/db/perl/DB_File/Makefile.PL b/db/perl/DB_File/Makefile.PL
index a8c671002..582addd92 100644
--- a/db/perl/DB_File/Makefile.PL
+++ b/db/perl/DB_File/Makefile.PL
@@ -135,6 +135,19 @@ else {
exit;
+sub MY::libscan
+{
+ my $self = shift ;
+ my $path = shift ;
+
+ return undef
+ if $path =~ /(~|\.bak)$/ ||
+ $path =~ /^\..*\.swp$/ ;
+
+ return $path;
+}
+
+
sub MY::postamble { <<'EOM' } ;
MyDoubleCheck:
diff --git a/db/perl/DB_File/README b/db/perl/DB_File/README
index 5a435fd0c..f22c68e05 100644
--- a/db/perl/DB_File/README
+++ b/db/perl/DB_File/README
@@ -1,12 +1,12 @@
- DB_File
+ DB_File
- Version 1.810
+ Version 1.814
- 7th August 2004
+ 11th November 2005
- Copyright (c) 1995-2004 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.
+ Copyright (c) 1995-2005 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.
IMPORTANT NOTICE
@@ -136,6 +136,8 @@ This symptom can imply:
to the directories where libdb.a and db.h are installed.
+
+
Undefined symbol db_version
---------------------------
@@ -155,12 +157,13 @@ when you run the test harness:
BEGIN failed--compilation aborted at t/db-btree.t line 21.
dubious Test returned status 2 (wstat 512, 0x200)
-This error usually happens when you have both version 1 and version
-2 of Berkeley DB installed on your system and DB_File attempts to
-build using the db.h for Berkeley DB version 2 and the version 1
-library. Unfortunately the two versions aren't compatible with each
-other. The undefined symbol error is actually caused because Berkeley
-DB version 1 doesn't have the symbol db_version.
+This error usually happens when you have two version of Berkeley DB
+installed on your system -- specifically, if you have both version 1 and
+a newer version (i.e. version 2 or better) of Berkeley DB installed. If
+DB_File is built using the db.h for the newer Berkeley DB and the version
+1 Berkeley DB library you will trigger this error. Unfortunately the two
+versions aren't compatible with each other. The undefined symbol error is
+caused because Berkeley DB version 1 doesn't have the symbol db_version.
Solution: Setting the LIB & INCLUDE variables in config.in to point to the
correct directories can sometimes be enough to fix this
@@ -301,7 +304,7 @@ The solution is either:
Linux Notes
-----------
-Newer versions of Linux (e.g. RedHat 6, SuSe 6) ship with a C library
+Some older 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
@@ -458,7 +461,7 @@ to compile properly on IRIX 5.3.
AIX NOTES
---------
-I've had replrts of a build failure like this on AIX 5.2 using the
+I've had reports of a build failure like this on AIX 5.2 using the
xlC compiler.
rm -f blib/arch/auto/DB_File/DB_File.so
diff --git a/db/perl/DB_File/t/db-btree.t b/db/perl/DB_File/t/db-btree.t
index deab41010..cb5ff4386 100644
--- a/db/perl/DB_File/t/db-btree.t
+++ b/db/perl/DB_File/t/db-btree.t
@@ -18,7 +18,12 @@ BEGIN {
exit 0;
}
}
+}
+
+BEGIN
+{
if ($^O eq 'darwin'
+ && (split(/\./, $Config{osvers}))[0] < 7 # Mac OS X 10.3 == Darwin 7
&& $Config{db_version_major} == 1
&& $Config{db_version_minor} == 0
&& $Config{db_version_patch} == 0) {
@@ -456,7 +461,8 @@ ok(70, $status == 0 );
# ##
$status = $X->fd ;
-ok(71, $status != 0 );
+ok(71, 1 );
+#ok(71, $status != 0 );
undef $X ;
diff --git a/db/perl/DB_File/t/db-hash.t b/db/perl/DB_File/t/db-hash.t
index 018952f9d..e8f23c90d 100644
--- a/db/perl/DB_File/t/db-hash.t
+++ b/db/perl/DB_File/t/db-hash.t
@@ -337,7 +337,8 @@ ok(42, $status == 0 );
# ##
$status = $X->fd ;
-ok(43, $status != 0 );
+ok(43, 1 );
+#ok(43, $status != 0 );
undef $X ;
untie %h ;
@@ -582,8 +583,8 @@ EOM
($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
$k = 'Fred'; $v ='';
ok(74, ! $db->seq($k, $v, R_FIRST) ) ;
- ok(75, $k eq "Fred") ;
- #print "k [$k]\n" ;
+ ok(75, $k eq "FRED") or
+ print "# k [$k]\n" ;
ok(76, $v eq "[Jxe]") ;
# fk sk fv sv
ok(77, checkOutput( "FRED", "fred", "[Jxe]", "")) ;
diff --git a/db/perl/DB_File/t/db-recno.t b/db/perl/DB_File/t/db-recno.t
index 23bf0cdec..26bae0706 100644
--- a/db/perl/DB_File/t/db-recno.t
+++ b/db/perl/DB_File/t/db-recno.t
@@ -522,7 +522,9 @@ EOM
ok(86, $x eq "abc\ndef\nghi\njkl\n") ;
# $# sets array to same length
- ok(87, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ;
+ $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ;
+ ok(87, $self)
+ or warn "# $DB_File::Error\n";
if ($FA)
{ $#h = 3 }
else
diff --git a/db/perl/DB_File/typemap b/db/perl/DB_File/typemap
index f15999508..077a95cb6 100644
--- a/db/perl/DB_File/typemap
+++ b/db/perl/DB_File/typemap
@@ -15,29 +15,35 @@ DBTKEY T_dbtkeydatum
INPUT
T_dbtkeydatum
- DBM_ckFilter($arg, filter_store_key, \"filter_store_key\");
+ {
+ SV * my_sv = $arg;
+ DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
DBT_clear($var) ;
- SvGETMAGIC($arg) ;
+ SvGETMAGIC(my_sv) ;
if (db->type == DB_RECNO) {
- if (SvOK($arg))
- Value = GetRecnoKey(aTHX_ db, SvIV($arg)) ;
+ if (SvOK(my_sv))
+ Value = GetRecnoKey(aTHX_ db, SvIV(my_sv)) ;
else
Value = 1 ;
$var.data = & Value;
$var.size = (int)sizeof(recno_t);
}
- else if (SvOK($arg)) {
- $var.data = SvPVbyte($arg, PL_na);
+ else if (SvOK(my_sv)) {
+ $var.data = SvPVbyte(my_sv, PL_na);
$var.size = (int)PL_na;
}
+ }
T_dbtdatum
- DBM_ckFilter($arg, filter_store_value, \"filter_store_value\");
+ {
+ SV * my_sv = $arg;
+ DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
DBT_clear($var) ;
- SvGETMAGIC($arg) ;
- if (SvOK($arg)) {
- $var.data = SvPVbyte($arg, PL_na);
+ SvGETMAGIC(my_sv) ;
+ if (SvOK(my_sv)) {
+ $var.data = SvPVbyte(my_sv, PL_na);
$var.size = (int)PL_na;
}
+ }
OUTPUT
diff --git a/db/php_db4/INSTALL b/db/php_db4/INSTALL
index 810bd011e..cdf91005e 100644
--- a/db/php_db4/INSTALL
+++ b/db/php_db4/INSTALL
@@ -1,3 +1,8 @@
+
+This php module can be configured and built to run standalone
+or in the context of the mod_db4 Apache module (Apache 1.3.* only).
+These configurations are not interchangeable.
+
*** A note about pthreads ***
The db4 c++ library by default tries to link against libpthread on some
systems (notably Linux). If your PHP install is not linked against
@@ -8,8 +13,6 @@ editing
its build files (which some distributions do), or by building it with
--with-experimental-zts.
-
-
To install this php module linked against the mod_db4 framework,
execute the following steps:
@@ -24,10 +27,9 @@ Then in your php.ini file add:
extension=db4.so
-This extension will now only run in a SAPI linked into Apache httpd
-(mod_php4,
-most likely), and will take advantage of all of it's auto-recovery and
-handle-caching facilities.
+This extension will now ONLY run in a SAPI linked into Apache httpd
+(mod_php4, most likely), and will take advantage of all of it's
+auto-recovery and handle-caching facilities.
To install this php module linked against db-4.2 and NOT the mod_db4
diff --git a/db/php_db4/config.m4 b/db/php_db4/config.m4
index d39d518a8..274965804 100644
--- a/db/php_db4/config.m4
+++ b/db/php_db4/config.m4
@@ -1,11 +1,11 @@
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
# http://www.apache.org/licenses/LICENSE-2.0.txt
#
-dnl $Id: config.m4,v 12.2 2004/12/21 16:59:21 george Exp $
+dnl $Id: config.m4,v 12.6 2006/08/24 14:46:22 bostic Exp $
dnl config.m4 for extension db4
dnl Comments in this file start with the string 'dnl'.
@@ -20,7 +20,7 @@ PHP_ARG_WITH(mod_db4, whether to link against mod_db4,
if test "$PHP_DB4" != "no"; then
if test "$PHP_DB4" != "no"; then
- for i in $PHP_DB4 /usr/local/BerkeleyDB.4.2 /usr/local/BerkeleyDB.4.1 /usr/local/BerkeleyDB.4.0 /usr/local /usr; do
+ for i in $PHP_DB4 /usr/local/BerkeleyDB.4.4 /usr/local /usr; do
if test -f "$i/db4/db.h"; then
THIS_PREFIX=$i
INC_DIR=$i/db4
@@ -71,6 +71,7 @@ if test "$PHP_DB4" != "no"; then
fi
EXTRA_CXXFLAGS="-g -DHAVE_CONFIG_H -O2 -Wall"
PHP_REQUIRE_CXX()
+ PHP_ADD_LIBRARY(stdc++, 1, DB4_SHARED_LIBADD)
PHP_NEW_EXTENSION(db4, db4.cpp, $ext_shared)
PHP_ADD_MAKEFILE_FRAGMENT
PHP_SUBST(DB4_SHARED_LIBADD)
diff --git a/db/php_db4/db4.cpp b/db/php_db4/db4.cpp
index ec0ea6de8..ad952cb58 100644
--- a/db/php_db4/db4.cpp
+++ b/db/php_db4/db4.cpp
@@ -1,10 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
#ifdef HAVE_CONFIG_H
@@ -32,6 +32,10 @@ extern "C"
#define my_db_env_create db_env_create
#endif
+#if PHP_MAJOR_VERSION <= 4
+unsigned char second_arg_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
+unsigned char third_arg_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
+#endif
extern int errno;
/* True global resources - no need for thread safety here */
@@ -49,10 +53,12 @@ struct php_DB_TXN {
struct php_DBC {
DBC *dbc;
struct php_DB_TXN *parent_txn;
+ struct php_DB *parent_db;
};
struct php_DB {
DB *db;
+ struct my_llist *open_cursors;
int autocommit;
};
@@ -76,10 +82,10 @@ static void _free_php_dbc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
struct php_DBC *pdbc = (struct php_DBC *) rsrc->ptr;
#ifndef HAVE_MOD_DB4
- if(pdbc->dbc) pdbc->dbc->c_close(pdbc->dbc);
pdbc->dbc = NULL;
#endif
if(pdbc) efree(pdbc);
+ rsrc->ptr = NULL;
}
static void _free_php_db(zend_rsrc_list_entry *rsrc TSRMLS_DC)
@@ -94,8 +100,8 @@ static void _free_php_db(zend_rsrc_list_entry *rsrc TSRMLS_DC)
static void _free_php_dbenv(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
-#ifndef HAVE_MOD_DB4
struct php_DB_ENV *pdb = (struct php_DB_ENV *)rsrc->ptr;
+#ifndef HAVE_MOD_DB4
DbEnv *dbe;
if(pdb->dbenv) {
dbe = DbEnv::get_DbEnv(pdb->dbenv);
@@ -204,6 +210,8 @@ ZEND_NAMED_FUNCTION(_wrap_db_txn_commit);
ZEND_NAMED_FUNCTION(_wrap_db_txn_discard);
ZEND_NAMED_FUNCTION(_wrap_db_txn_id);
ZEND_NAMED_FUNCTION(_wrap_db_txn_set_timeout);
+ZEND_NAMED_FUNCTION(_wrap_db_txn_set_name);
+ZEND_NAMED_FUNCTION(_wrap_db_txn_get_name);
ZEND_NAMED_FUNCTION(_wrap_new_DbTxn);
static zend_function_entry DbTxn_functions[] = {
@@ -212,6 +220,8 @@ static zend_function_entry DbTxn_functions[] = {
ZEND_NAMED_FE(discard, _wrap_db_txn_discard, NULL)
ZEND_NAMED_FE(id, _wrap_db_txn_id, NULL)
ZEND_NAMED_FE(set_timeout, _wrap_db_txn_set_timeout, NULL)
+ ZEND_NAMED_FE(set_name, _wrap_db_txn_set_name, NULL)
+ ZEND_NAMED_FE(get_name, _wrap_db_txn_get_name, NULL)
ZEND_NAMED_FE(db4txn, _wrap_new_DbTxn, NULL)
{ NULL, NULL, NULL}
};
@@ -233,14 +243,30 @@ ZEND_NAMED_FUNCTION(_wrap_dbc_get);
ZEND_NAMED_FUNCTION(_wrap_dbc_put);
ZEND_NAMED_FUNCTION(_wrap_dbc_pget);
+#ifdef ZEND_ENGINE_2
+ZEND_BEGIN_ARG_INFO(first_and_second_args_force_ref, 0)
+ ZEND_ARG_PASS_INFO(1)
+ ZEND_ARG_PASS_INFO(1)
+ZEND_END_ARG_INFO();
+
+ZEND_BEGIN_ARG_INFO(first_and_second_and_third_args_force_ref, 0)
+ ZEND_ARG_PASS_INFO(1)
+ ZEND_ARG_PASS_INFO(1)
+ZEND_END_ARG_INFO();
+
+#else
+static unsigned char first_and_second_args_force_ref[] = {2, BYREF_FORCE, BYREF_FORCE };
+static unsigned char first_and_second_and_third_args_force_ref[] = {3, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE };
+#endif
+
static zend_function_entry Dbc_functions[] = {
ZEND_NAMED_FE(close, _wrap_dbc_close, NULL)
ZEND_NAMED_FE(count, _wrap_dbc_count, NULL)
ZEND_NAMED_FE(del, _wrap_dbc_del, NULL)
ZEND_NAMED_FE(dup, _wrap_dbc_dup, NULL)
- ZEND_NAMED_FE(get, _wrap_dbc_get, NULL)
+ ZEND_NAMED_FE(get, _wrap_dbc_get, first_and_second_args_force_ref)
ZEND_NAMED_FE(put, _wrap_dbc_put, NULL)
- ZEND_NAMED_FE(pget, _wrap_dbc_pget, second_arg_force_ref)
+ ZEND_NAMED_FE(pget, _wrap_dbc_pget, first_and_second_and_third_args_force_ref)
{ NULL, NULL, NULL}
};
/* }}} */
@@ -367,10 +393,10 @@ PHP_MINIT_FUNCTION(db4)
INIT_CLASS_ENTRY(_db_env_ce, "db4env", DbEnv_functions);
db_env_ce = zend_register_internal_class(&_db_env_ce TSRMLS_CC);
- le_db = zend_register_list_destructors_ex(_free_php_db, NULL, "Db4", module_number);
- le_dbenv = zend_register_list_destructors_ex(_free_php_dbenv, NULL, "Db4Env", module_number);
le_db_txn = zend_register_list_destructors_ex(_free_php_db_txn, NULL, "Db4Txn", module_number);
le_dbc = zend_register_list_destructors_ex(_free_php_dbc, NULL, "Db4Cursor", module_number);
+ le_db = zend_register_list_destructors_ex(_free_php_db, NULL, "Db4", module_number);
+ le_dbenv = zend_register_list_destructors_ex(_free_php_dbenv, NULL, "Db4Env", module_number);
REGISTER_LONG_CONSTANT("DB_VERSION_MAJOR", DB_VERSION_MAJOR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_VERSION_MINOR", DB_VERSION_MINOR, CONST_CS | CONST_PERSISTENT);
@@ -391,6 +417,8 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_NOMMAP", DB_NOMMAP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_RDONLY", DB_RDONLY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_RECOVER", DB_RECOVER, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DB_MULTIVERSION", DB_MULTIVERSION, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DB_TXN_SNAPSHOT", DB_TXN_SNAPSHOT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_THREAD", DB_THREAD, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_TRUNCATE", DB_TRUNCATE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_TXN_NOSYNC", DB_TXN_NOSYNC, CONST_CS | CONST_PERSISTENT);
@@ -398,10 +426,12 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_USE_ENVIRON", DB_USE_ENVIRON, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_USE_ENVIRON_ROOT", DB_USE_ENVIRON_ROOT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AUTO_COMMIT", DB_AUTO_COMMIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_DIRTY_READ", DB_DIRTY_READ, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DB_DIRTY_READ", DB_READ_UNCOMMITTED, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DB_DEGREE_2", DB_READ_COMMITTED, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DB_READ_COMMITTED", DB_READ_COMMITTED, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DB_READ_UNCOMMITTED", DB_READ_UNCOMMITTED, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_NO_AUTO_COMMIT", DB_NO_AUTO_COMMIT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_RPCCLIENT", DB_RPCCLIENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_REP_CREATE", DB_REP_CREATE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_XA_CREATE", DB_XA_CREATE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_INIT_CDB", DB_INIT_CDB, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_INIT_LOCK", DB_INIT_LOCK, CONST_CS | CONST_PERSISTENT);
@@ -470,7 +500,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_LOCK_YOUNGEST", DB_LOCK_YOUNGEST, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOCK_NOWAIT", DB_LOCK_NOWAIT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOCK_RECORD", DB_LOCK_RECORD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_LOCK_REMOVE", DB_LOCK_REMOVE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOCK_SET_TIMEOUT", DB_LOCK_SET_TIMEOUT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOCK_SWITCH", DB_LOCK_SWITCH, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOCK_UPGRADE", DB_LOCK_UPGRADE, CONST_CS | CONST_PERSISTENT);
@@ -489,18 +518,15 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_LOG_COMMIT", DB_LOG_COMMIT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOG_NOCOPY", DB_LOG_NOCOPY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOG_NOT_DURABLE", DB_LOG_NOT_DURABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_LOG_PERM", DB_LOG_PERM, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOG_WRNOSYNC", DB_LOG_WRNOSYNC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_user_BEGIN", DB_user_BEGIN, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_debug_FLAG", DB_debug_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_LOGC_BUF_SIZE", DB_LOGC_BUF_SIZE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOG_DISK", DB_LOG_DISK, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOG_LOCKED", DB_LOG_LOCKED, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_LOG_SILENT_ERR", DB_LOG_SILENT_ERR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MPOOL_CREATE", DB_MPOOL_CREATE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MPOOL_LAST", DB_MPOOL_LAST, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MPOOL_NEW", DB_MPOOL_NEW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_MPOOL_CLEAN", DB_MPOOL_CLEAN, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MPOOL_DIRTY", DB_MPOOL_DIRTY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MPOOL_DISCARD", DB_MPOOL_DISCARD, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MPOOL_NOFILE", DB_MPOOL_NOFILE, CONST_CS | CONST_PERSISTENT);
@@ -524,7 +550,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_AFTER", DB_AFTER, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_APPEND", DB_APPEND, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_BEFORE", DB_BEFORE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_CACHED_COUNTS", DB_CACHED_COUNTS, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_CONSUME", DB_CONSUME, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_CONSUME_WAIT", DB_CONSUME_WAIT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_CURRENT", DB_CURRENT, CONST_CS | CONST_PERSISTENT);
@@ -547,7 +572,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_POSITION", DB_POSITION, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_PREV", DB_PREV, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_PREV_NODUP", DB_PREV_NODUP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_RECORDCOUNT", DB_RECORDCOUNT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_SET", DB_SET, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_SET_LOCK_TIMEOUT", DB_SET_LOCK_TIMEOUT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_SET_RANGE", DB_SET_RANGE, CONST_CS | CONST_PERSISTENT);
@@ -561,7 +585,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_MULTIPLE", DB_MULTIPLE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_MULTIPLE_KEY", DB_MULTIPLE_KEY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_RMW", DB_RMW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_LOCK_DEADLOCK", DB_LOCK_DEADLOCK, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_DONOTINDEX", DB_DONOTINDEX, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_KEYEMPTY", DB_KEYEMPTY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_KEYEXIST", DB_KEYEXIST, CONST_CS | CONST_PERSISTENT);
@@ -586,7 +609,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_VERIFY_BAD", DB_VERIFY_BAD, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_ALREADY_ABORTED", DB_ALREADY_ABORTED, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_DELETED", DB_DELETED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_LOCK_NOTEXIST", DB_LOCK_NOTEXIST, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_NEEDSPLIT", DB_NEEDSPLIT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_SURPRISE_KID", DB_SURPRISE_KID, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_SWAPBYTES", DB_SWAPBYTES, CONST_CS | CONST_PERSISTENT);
@@ -605,7 +627,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_AM_CREATED_MSTR", DB_AM_CREATED_MSTR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_DBM_ERROR", DB_AM_DBM_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_DELIMITER", DB_AM_DELIMITER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_AM_DIRTY", DB_AM_DIRTY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_DISCARD", DB_AM_DISCARD, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_DUP", DB_AM_DUP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_DUPSORT", DB_AM_DUPSORT, CONST_CS | CONST_PERSISTENT);
@@ -621,7 +642,6 @@ PHP_MINIT_FUNCTION(db4)
REGISTER_LONG_CONSTANT("DB_AM_RECNUM", DB_AM_RECNUM, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_RECOVER", DB_AM_RECOVER, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_RENUMBER", DB_AM_RENUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DB_AM_REPLICATION", DB_AM_REPLICATION, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_REVSPLITOFF", DB_AM_REVSPLITOFF, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_SECONDARY", DB_AM_SECONDARY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DB_AM_SNAPSHOT", DB_AM_SNAPSHOT, CONST_CS | CONST_PERSISTENT);
@@ -1090,6 +1110,46 @@ ZEND_NAMED_FUNCTION(_wrap_db_txn_set_timeout)
}
/* }}} */
+/* {{{ proto bool Db4Txn::set_name(string $name)
+ */
+ZEND_NAMED_FUNCTION(_wrap_db_txn_set_name)
+{
+ DB_TXN *txn;
+ char *name;
+ int name_len;
+ int ret;
+
+ getDbTxnFromThis(txn);
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE)
+ {
+ return;
+ }
+ txn->set_name(txn, name);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool Db4Txn::get_name()
+ */
+ZEND_NAMED_FUNCTION(_wrap_db_txn_get_name)
+{
+ DB_TXN *txn;
+ const char *name;
+ int ret;
+
+ getDbTxnFromThis(txn);
+ if(ZEND_NUM_ARGS())
+ {
+ WRONG_PARAM_COUNT;
+ }
+ if((ret = txn->get_name(txn, &name)) != 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", db_strerror(ret));
+ RETURN_FALSE;
+ }
+ RETURN_STRING((char *)name, 1);
+}
+/* }}} */
+
/* {{{ private Db4Txn::Db4Txn()
*/
ZEND_NAMED_FUNCTION(_wrap_new_DbTxn)
@@ -1191,7 +1251,7 @@ ZEND_NAMED_FUNCTION(_wrap_db_close)
int autocommit;
getPhpDbFromThis(pdb);
- if(ZEND_NUM_ARGS() TSRMLS_CC) {
+ if(ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
if(pdb && pdb->db) {
@@ -1584,7 +1644,7 @@ ZEND_NAMED_FUNCTION(_wrap_db_cursor)
DB *db;
DB_TXN *txn = NULL;
zval *txn_obj = NULL, *self;
- DBC *cursor;
+ DBC *cursor = NULL;
u_int32_t flags = 0;
int ret, autocommit;
@@ -1604,7 +1664,7 @@ ZEND_NAMED_FUNCTION(_wrap_db_cursor)
}
else {
object_init_ex(return_value, dbc_ce);
- setDbc(return_value, cursor, getPhpDbTxnFromObj(txn_obj TSRMLS_CC) TSRMLS_CC);
+ setDbc(return_value, cursor, txn_obj?getPhpDbTxnFromObj(txn_obj TSRMLS_CC):NULL TSRMLS_CC);
}
}
@@ -1693,73 +1753,79 @@ ZEND_NAMED_FUNCTION(_wrap_dbc_dup)
}
/* }}} */
-/* {{{ proto string Db4Cursor::get(string $key [, long $flags])
+/* {{{ proto string Db4Cursor::get(string &$key, string &$data [, long $flags])
*/
ZEND_NAMED_FUNCTION(_wrap_dbc_get)
{
DBC *dbc;
DBT key, value;
- char *keyname;
- int keylen;
- u_int32_t flags = 0;
+ zval *zkey, *zvalue;
+ u_int32_t flags = DB_NEXT;
zval *self;
int ret;
self = getThis();
getDbcFromThis(dbc);
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &keyname, &keylen, &flags) == FAILURE)
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z/|l", &zkey, &zvalue, &flags) == FAILURE)
{
return;
}
memset(&key, 0, sizeof(DBT));
- key.data = keyname;
- key.size = keylen;
+ key.data = Z_STRVAL_P(zkey);
+ key.size = Z_STRLEN_P(zkey);
memset(&value, 0, sizeof(DBT));
+ value.data = Z_STRVAL_P(zvalue);
+ value.size = Z_STRLEN_P(zvalue);
if((ret = dbc->c_get(dbc, &key, &value, flags)) == 0) {
- RETURN_STRINGL((char *)value.data, value.size, 1);
+ zval_dtor(zkey); ZVAL_STRINGL(zkey, (char *) key.data, key.size, 1);
+ zval_dtor(zvalue); ZVAL_STRINGL(zvalue, (char *) value.data, value.size, 1);
+ RETURN_LONG(0);
}
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", db_strerror(ret));
- add_property_string(self, "lastError", db_strerror(ret), 1);
- RETURN_FALSE;
+ if(ret != DB_NOTFOUND) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", db_strerror(ret));
+ add_property_string(self, "lastError", db_strerror(ret), 1);
+ }
+ RETURN_LONG(1);
}
/* }}} */
-/* {{{ proto string Db4Cursor::pget(string $key, string &$primary_key [, long flags])
+/* {{{ proto string Db4Cursor::pget(string &$key, string &$pkey, string &$data [, long $flags])
*/
ZEND_NAMED_FUNCTION(_wrap_dbc_pget)
{
DBC *dbc;
DBT key, pkey, value;
- char *keyname;
- int keylen;
- u_int32_t flags = 0;
- zval *self, *z_pkey;
+ zval *zkey, *zvalue, *zpkey;
+ u_int32_t flags = DB_NEXT;
+ zval *self;
int ret;
self = getThis();
getDbcFromThis(dbc);
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &keyname, &keylen, &z_pkey, &flags) == FAILURE)
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z/z/|l", &zkey, &zpkey, &zvalue, &flags) == FAILURE)
{
return;
}
memset(&key, 0, sizeof(DBT));
- key.data = keyname;
- key.size = keylen;
+ key.data = Z_STRVAL_P(zkey);
+ key.size = Z_STRLEN_P(zkey);
memset(&pkey, 0, sizeof(DBT));
+ pkey.data = Z_STRVAL_P(zpkey);
+ pkey.size = Z_STRLEN_P(zpkey);
memset(&value, 0, sizeof(DBT));
+ value.data = Z_STRVAL_P(zvalue);
+ value.size = Z_STRLEN_P(zvalue);
if((ret = dbc->c_pget(dbc, &key, &pkey, &value, flags)) == 0) {
- if(Z_STRLEN_P(z_pkey) == 0) {
- Z_STRVAL_P(z_pkey) = (char *) emalloc(pkey.size);
- } else {
- Z_STRVAL_P(z_pkey) = (char *) erealloc(Z_STRVAL_P(z_pkey), pkey.size);
- }
- memcpy(Z_STRVAL_P(z_pkey), pkey.data, pkey.size);
- Z_STRLEN_P(z_pkey) = pkey.size;
- RETURN_STRINGL((char *)value.data, value.size, 1);
+ zval_dtor(zkey); ZVAL_STRINGL(zkey, (char *) key.data, key.size, 1);
+ zval_dtor(zpkey); ZVAL_STRINGL(zpkey, (char *) pkey.data, pkey.size, 1);
+ zval_dtor(zvalue); ZVAL_STRINGL(zvalue, (char *) value.data, value.size, 1);
+ RETURN_LONG(0);
}
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", db_strerror(ret));
- add_property_string(self, "lastError", db_strerror(ret), 1);
- RETURN_FALSE;
+ if(ret != DB_NOTFOUND) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", db_strerror(ret));
+ add_property_string(self, "lastError", db_strerror(ret), 1);
+ }
+ RETURN_LONG(1);
}
/* }}} */
@@ -1805,6 +1871,7 @@ ZEND_NAMED_FUNCTION(_wrap_dbc_put)
void php_db4_error(const DB_ENV *dp, const char *errpfx, const char *msg)
{
+ TSRMLS_FETCH();
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s %s\n", errpfx, msg);
}
/* }}} */
@@ -1841,7 +1908,7 @@ ZEND_NAMED_FUNCTION(_wrap_db_env_close)
u_int32_t flags = 0;
int ret;
- pdb = php_db4_getPhpDbEnvFromObj(getThis());
+ pdb = php_db4_getPhpDbEnvFromObj(getThis() TSRMLS_CC);
if(!pdb || !pdb->dbenv) {
RETURN_FALSE;
}
@@ -2044,7 +2111,7 @@ ZEND_NAMED_FUNCTION(_wrap_db_env_txn_checkpoint)
/*
* Local variables:
* tab-width: 4
- * c-basic-offset: 4
+ c-basic-offset: 4
* End:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
diff --git a/db/php_db4/php_db4.h b/db/php_db4/php_db4.h
index 139a44cee..a02ac6e18 100644
--- a/db/php_db4/php_db4.h
+++ b/db/php_db4/php_db4.h
@@ -1,12 +1,10 @@
/*-
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * http://www.apache.org/licenses/LICENSE-2.0.txt
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
*
- * authors: Thies C. Arntzen <thies@php.net>
- * Sterling Hughes <sterling@php.net>
- * George Schlossnagle <george@omniti.com>
+ * authors: George Schlossnagle <george@omniti.com>
*/
#ifndef PHP_DB4_H
diff --git a/db/php_db4/samples/simple_counter.php b/db/php_db4/samples/simple_counter.php
index 94d37e465..8d6de2df5 100644
--- a/db/php_db4/samples/simple_counter.php
+++ b/db/php_db4/samples/simple_counter.php
@@ -4,11 +4,11 @@ $db = new Db4();
// Open it outside a Db4Env environment with datafile/var/lib/db4
// and database name "test"
-$db->open(null, "/var/lib/db4", "test");
+$db->open(null, "/var/tmp/db4", "test");
// Get the current value of "counter"
$counter = $db->get("counter");
-print "Counter Value is $counter";
+print "Counter Value is $counter\n";
// Increment $counter and put() it.
$db->put("counter", $counter+1);
diff --git a/db/php_db4/samples/transactional_counter.php b/db/php_db4/samples/transactional_counter.php
index 715e0b504..2a03e9807 100644
--- a/db/php_db4/samples/transactional_counter.php
+++ b/db/php_db4/samples/transactional_counter.php
@@ -2,8 +2,8 @@
// Open a new Db4Env
$dbenv = new Db4Env();
-$dbenv->set_data_dir("/var/lib/dbhome");
-$dbenv->open("/var/lib/dbhome/test");
+$dbenv->set_data_dir("/var/tmp/dbhome");
+$dbenv->open("/var/tmp/dbhome");
// Open a database in $dbenv. Note that even though
// we pass null in as the transaction, db4 forces this
diff --git a/db/qam/qam.c b/db/qam/qam.c
index 3ae2f90d0..08c5e3417 100644
--- a/db/qam/qam.c
+++ b/db/qam/qam.c
@@ -1,23 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam.c,v 11.187 2004/10/18 20:21:13 ubell Exp $
+ * $Id: qam.c,v 12.38 2006/09/09 14:28:24 bostic Exp $
*/
#include "db_config.h"
-#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/btree.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
@@ -33,18 +26,22 @@ 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 *));
+#define DONT_NEED_LOCKS(dbc) ((dbc)->txn == NULL || \
+ F_ISSET(dbc, DBC_READ_COMMITTED | DBC_READ_UNCOMMITTED))
+
/*
* __qam_position --
* Position a queued access method cursor at a record. This returns
* the page locked. *exactp will be set if the record is valid.
* PUBLIC: int __qam_position
- * PUBLIC: __P((DBC *, db_recno_t *, qam_position_mode, int *));
+ * PUBLIC: __P((DBC *, db_recno_t *, db_lockmode_t, u_int32_t, int *));
*/
int
-__qam_position(dbc, recnop, mode, exactp)
+__qam_position(dbc, recnop, lock_mode, get_mode, exactp)
DBC *dbc; /* open cursor */
db_recno_t *recnop; /* pointer to recno to find */
- qam_position_mode mode;/* locking: read or write */
+ db_lockmode_t lock_mode;/* locking: read or write */
+ u_int32_t get_mode; /* flags to __memp_fget */
int *exactp; /* indicate if it was found */
{
QUEUE_CURSOR *cp;
@@ -59,14 +56,13 @@ __qam_position(dbc, recnop, mode, exactp)
/* Fetch the page for this recno. */
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)
+ if ((ret = __db_lget(dbc, 0, pg, lock_mode, 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) {
- if (mode != QAM_WRITE &&
+ dbc->txn, get_mode, &cp->page)) != 0) {
+ if (!FLD_ISSET(get_mode, DB_MPOOL_CREATE) &&
(ret == DB_PAGE_NOTFOUND || ret == ENOENT))
ret = 0;
@@ -79,10 +75,16 @@ __qam_position(dbc, recnop, mode, exactp)
cp->indx = QAM_RECNO_INDEX(dbp, pg, *recnop);
if (PGNO(cp->page) == 0) {
- if (F_ISSET(dbp, DB_AM_RDONLY)) {
+ /*
+ * We have read an uninitialized page: set the page number if
+ * we're creating the page. Otherwise, we know that the record
+ * doesn't exist yet.
+ */
+ if (!FLD_ISSET(get_mode, DB_MPOOL_CREATE)) {
*exactp = 0;
return (0);
}
+ DB_ASSERT(dbp->dbenv, FLD_ISSET(get_mode, DB_MPOOL_CREATE));
PGNO(cp->page) = pg;
TYPE(cp->page) = P_QAMDATA;
}
@@ -102,7 +104,7 @@ __qam_position(dbc, recnop, mode, exactp)
* pagep must be write locked
*
* PUBLIC: int __qam_pitem
- * PUBLIC: __P((DBC *, QPAGE *, u_int32_t, db_recno_t, DBT *));
+ * PUBLIC: __P((DBC *, QPAGE *, u_int32_t, db_recno_t, DBT *));
*/
int
__qam_pitem(dbc, pagep, indx, recno, data)
@@ -133,7 +135,7 @@ __qam_pitem(dbc, pagep, indx, recno, data)
datap = data;
if (F_ISSET(data, DB_DBT_PARTIAL)) {
if (data->doff + data->dlen > t->re_len) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: data offset plus length larger than record size of %lu",
"Record length error", (u_long)t->re_len);
return (EINVAL);
@@ -175,7 +177,7 @@ __qam_pitem(dbc, pagep, indx, recno, data)
if (F_ISSET(qp, QAM_VALID))
memcpy(dest, p, t->re_len);
else
- memset(dest, t->re_pad, t->re_len);
+ memset(dest, (int)t->re_pad, t->re_len);
dest += data->doff;
memcpy(dest, data->data, data->size);
@@ -202,7 +204,8 @@ no_partial:
F_SET(qp, QAM_VALID | QAM_SET);
memcpy(p, datap->data, datap->size);
if (!F_ISSET(data, DB_DBT_PARTIAL))
- memset(p + datap->size, t->re_pad, t->re_len - datap->size);
+ memset(p + datap->size,
+ (int)t->re_pad, t->re_len - datap->size);
err: if (allocated)
__os_free(dbenv, datap->data);
@@ -222,6 +225,7 @@ __qam_c_put(dbc, key, data, flags, pgnop)
db_pgno_t *pgnop;
{
DB *dbp;
+ DB_ENV *dbenv;
DB_LOCK lock;
DB_MPOOLFILE *mpf;
QMETA *meta;
@@ -229,9 +233,10 @@ __qam_c_put(dbc, key, data, flags, pgnop)
db_pgno_t pg;
db_recno_t new_cur, new_first;
u_int32_t opcode;
- int exact, ret, t_ret;
+ int exact, ret, t_ret, writelock;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
mpf = dbp->mpf;
if (pgnop != NULL)
*pgnop = PGNO_INVALID;
@@ -241,6 +246,7 @@ __qam_c_put(dbc, key, data, flags, pgnop)
switch (flags) {
case DB_KEYFIRST:
case DB_KEYLAST:
+ case DB_NOOVERWRITE:
if ((ret = __qam_getno(dbp, key, &cp->recno)) != 0)
return (ret);
/* FALLTHROUGH */
@@ -248,29 +254,34 @@ __qam_c_put(dbc, key, data, flags, pgnop)
break;
default:
/* The interface shouldn't let anything else through. */
- DB_ASSERT(0);
- return (__db_ferr(dbp->dbenv, "DBC->put", 0));
+ return (__db_ferr(dbenv, "DBC->put", 0));
}
/* Write lock the record. */
- if ((ret = __db_lget(dbc,
- 0, cp->recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &lock)) != 0)
+ if ((ret = __db_lget(dbc, LCK_COUPLE,
+ cp->recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &cp->lock)) != 0)
return (ret);
- if ((ret = __qam_position(dbc, &cp->recno, QAM_WRITE, &exact)) != 0) {
+ lock = cp->lock;
+
+ if ((ret = __qam_position(dbc, &cp->recno, DB_LOCK_WRITE,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &exact)) != 0) {
/* We could not get the page, we can release the record lock. */
(void)__LPUT(dbc, lock);
return (ret);
}
- /* Put the item on the page. */
- ret = __qam_pitem(dbc, (QPAGE *)cp->page, cp->indx, cp->recno, data);
+ if (exact != 0 && flags == DB_NOOVERWRITE)
+ ret = DB_KEYEXIST;
+ else
+ /* 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)) != 0 && ret == 0)
+ if ((t_ret = __qam_fput(dbp, cp->pgno, cp->page, 0)) != 0 && ret == 0)
ret = t_ret;
cp->page = NULL;
cp->lock = lock;
@@ -282,12 +293,14 @@ __qam_c_put(dbc, key, data, flags, pgnop)
pg = ((QUEUE *)dbp->q_internal)->q_meta;
/*
- * Get the meta page first, we don't want to write lock it while
- * trying to pin it.
+ * Get the meta page first, we don't want to lock it while trying
+ * to pin it.
*/
- if ((ret = __memp_fget(mpf, &pg, 0, &meta)) != 0)
+ writelock = 0;
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, 0, &meta)) != 0)
return (ret);
- if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0) {
+ if ((ret = __db_lget(dbc, LCK_COUPLE,
+ pg, DB_LOCK_READ, 0, &cp->lock)) != 0) {
(void)__memp_fput(mpf, meta, 0);
return (ret);
}
@@ -303,6 +316,7 @@ __qam_c_put(dbc, key, data, flags, pgnop)
* insert is.
*/
+recheck:
if (meta->first_recno == meta->cur_recno) {
new_first = cp->recno;
new_cur = cp->recno + 1;
@@ -311,19 +325,12 @@ __qam_c_put(dbc, key, data, flags, pgnop)
opcode |= QAM_SETFIRST;
opcode |= QAM_SETCUR;
} else {
- if (QAM_BEFORE_FIRST(meta, cp->recno) &&
- (meta->first_recno <= meta->cur_recno ||
- meta->first_recno - cp->recno <
- cp->recno - meta->cur_recno)) {
+ if (QAM_BEFORE_FIRST(meta, cp->recno)) {
new_first = cp->recno;
opcode |= QAM_SETFIRST;
}
- 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))) {
+ if (QAM_AFTER_CURRENT(meta, cp->recno)) {
new_cur = cp->recno + 1;
if (new_cur == RECNO_OOB)
new_cur++;
@@ -331,25 +338,36 @@ __qam_c_put(dbc, key, data, flags, pgnop)
}
}
- 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 == 0)
+ goto done;
+
+ /* Drop the read lock and get the a write lock on the meta page. */
+ if (writelock == 0 && (ret = __db_lget(dbc, LCK_COUPLE_ALWAYS,
+ pg, DB_LOCK_WRITE, 0, &cp->lock)) != 0) {
+ (void)__memp_fput(mpf, meta, 0);
+ return (ret);
}
+ if (writelock++ == 0)
+ goto recheck;
+
+ if (((ret = __memp_dirty(mpf, &meta, dbc->txn, DB_MPOOL_DIRTY)) != 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)) != 0)))
+ opcode = 0;
if (opcode & QAM_SETCUR)
meta->cur_recno = new_cur;
if (opcode & QAM_SETFIRST)
meta->first_recno = new_first;
- if ((t_ret = __memp_fput(
- mpf, meta, opcode != 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
+done: if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
/* Don't hold the meta page long term. */
- if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
+ if ((t_ret = __LPUT(dbc, cp->lock)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
@@ -385,7 +403,7 @@ __qam_append(dbc, key, data)
* 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)
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, DB_MPOOL_DIRTY, &meta)) != 0)
return (ret);
/* Write lock the meta page. */
if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0) {
@@ -443,7 +461,8 @@ __qam_append(dbc, key, data)
/* Fetch and write lock the data page. */
if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0)
goto err;
- if ((ret = __qam_fget(dbp, &pg, DB_MPOOL_CREATE, &page)) != 0) {
+ if ((ret = __qam_fget(dbp, &pg, dbc->txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &page)) != 0) {
/* We did not fetch it, we can release the lock. */
(void)__LPUT(dbc, lock);
goto err;
@@ -464,7 +483,7 @@ __qam_append(dbc, key, data)
ret = t_ret;
if ((t_ret =
- __qam_fput(dbp, pg, page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __qam_fput(dbp, pg, page, 0)) != 0 && ret == 0)
ret = t_ret;
/* Return the record number to the user. */
@@ -491,7 +510,7 @@ __qam_append(dbc, key, data)
}
err: /* Release the meta page. */
- if ((t_ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -514,19 +533,19 @@ __qam_c_del(dbc)
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;
+ LOCK_INIT(lock);
pg = ((QUEUE *)dbp->q_internal)->q_meta;
/*
* 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)
+ if ((ret = __memp_fget(mpf, &pg, dbc->txn, 0, &meta)) != 0)
return (ret);
/* Write lock the meta page. */
if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_READ, 0, &metalock)) != 0) {
@@ -537,8 +556,6 @@ __qam_c_del(dbc)
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, metalock)) != 0 && ret == 0)
ret = t_ret;
@@ -546,13 +563,15 @@ __qam_c_del(dbc)
if (ret != 0)
goto err;
- if ((ret = __db_lget(dbc,
- 0, cp->recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &lock)) != 0)
+ if ((ret = __db_lget(dbc, LCK_COUPLE,
+ cp->recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &cp->lock)) != 0)
goto err;
cp->lock_mode = DB_LOCK_WRITE;
+ lock = cp->lock;
/* Find the record ; delete only deletes exact matches. */
- if ((ret = __qam_position(dbc, &cp->recno, QAM_WRITE, &exact)) != 0)
+ if ((ret = __qam_position(dbc, &cp->recno, DB_LOCK_WRITE,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &exact)) != 0)
goto err;
if (!exact) {
@@ -582,20 +601,30 @@ __qam_c_del(dbc)
F_CLR(qp, QAM_VALID);
- if (cp->recno == first) {
+ /*
+ * Peek at the first_recno before locking the meta page.
+ * Other threads cannot move first_recno past
+ * our position while we have the record locked.
+ * If it's pointing at the deleted record then lock
+ * the metapage and check again as lower numbered
+recheck:
+ * record may have been inserted.
+ */
+ if (cp->recno == meta->first_recno) {
pg = ((QUEUE *)dbp->q_internal)->q_meta;
if ((ret =
__db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- ret = __qam_consume(dbc, meta, first);
+ if (cp->recno == meta->first_recno)
+ ret = __qam_consume(dbc, meta, meta->first_recno);
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
}
err: 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)
+ if (cp->page != NULL &&
+ (t_ret = __qam_fput(dbp, cp->pgno, cp->page, 0)) != 0 && ret == 0)
ret = t_ret;
cp->page = NULL;
@@ -633,37 +662,32 @@ __qam_c_get(dbc, key, data, flags, pgnop)
QMETA *meta;
QUEUE *t;
QUEUE_CURSOR *cp;
- db_lockmode_t lock_mode;
+ db_lockmode_t lock_mode, meta_mode;
db_pgno_t metapno;
db_recno_t first;
- qam_position_mode mode;
int exact, inorder, is_first, locked, ret, t_ret, wait, with_delete;
- int put_mode, retrying;
+ int retrying;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
mpf = dbp->mpf;
cp = (QUEUE_CURSOR *)dbc->internal;
+ LOCK_INIT(lock);
+ LOCK_INIT(pglock);
PANIC_CHECK(dbenv);
wait = 0;
with_delete = 0;
retrying = 0;
- lock_mode = DB_LOCK_READ;
+ lock_mode = F_ISSET(dbc, DBC_RMW) ? DB_LOCK_WRITE : DB_LOCK_READ;
+ meta_mode = DB_LOCK_READ;
meta = NULL;
inorder = F_ISSET(dbp, DB_AM_INORDER);
- put_mode = 0;
t_ret = 0;
*pgnop = 0;
pg = NULL;
- mode = QAM_READ;
- if (F_ISSET(dbc, DBC_RMW)) {
- lock_mode = DB_LOCK_WRITE;
- mode = QAM_WRITE;
- }
-
if (flags == DB_CONSUME_WAIT) {
wait = 1;
flags = DB_CONSUME;
@@ -671,8 +695,7 @@ __qam_c_get(dbc, key, data, flags, pgnop)
if (flags == DB_CONSUME) {
with_delete = 1;
flags = DB_FIRST;
- lock_mode = DB_LOCK_WRITE;
- mode = QAM_CONSUME;
+ meta_mode = lock_mode = DB_LOCK_WRITE;
}
DEBUG_LREAD(dbc, dbc->txn, "qam_c_get",
@@ -682,22 +705,36 @@ __qam_c_get(dbc, key, data, flags, pgnop)
locked = 0;
is_first = 0;
+ first = 0;
t = (QUEUE *)dbp->q_internal;
metapno = t->q_meta;
+ LOCK_INIT(metalock);
/*
* 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)
+ if ((ret = __memp_fget(mpf, &metapno, dbc->txn, 0, &meta)) != 0)
return (ret);
- if ((ret = __db_lget(dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
- goto err;
- locked = 1;
- first = 0;
+get_next:
+ switch (flags) {
+ case DB_NEXT:
+ case DB_NEXT_NODUP:
+ case DB_FIRST:
+ case DB_PREV:
+ case DB_PREV_NODUP:
+ case DB_LAST:
+ if ((ret = __db_lget(dbc,
+ 0, metapno, meta_mode, 0, &metalock)) != 0)
+ goto err;
+ locked = 1;
+ break;
+ default:
+ break;
+ }
/* Release any previous lock if not in a transaction. */
if ((ret = __TLPUT(dbc, cp->lock)) != 0)
@@ -713,7 +750,7 @@ retry: /* Update the record number. */
/* NOTREACHED */
case DB_NEXT:
case DB_NEXT_NODUP:
-get_next: if (cp->recno != RECNO_OOB) {
+ if (cp->recno != RECNO_OOB) {
++cp->recno;
/* Wrap around, skipping zero. */
if (cp->recno == RECNO_OOB)
@@ -721,8 +758,7 @@ get_next: if (cp->recno != RECNO_OOB) {
/*
* Check to see if we are out of data.
*/
- if (cp->recno == meta->cur_recno ||
- QAM_AFTER_CURRENT(meta, cp->recno)) {
+ if (QAM_AFTER_CURRENT(meta, cp->recno)) {
pg = NULL;
if (!wait) {
ret = DB_NOTFOUND;
@@ -742,18 +778,18 @@ get_next: if (cp->recno != RECNO_OOB) {
if (CDB_LOCKING(dbenv)) {
/* Drop the metapage before we wait. */
- if ((ret =
- __memp_fput(mpf, meta, 0)) != 0)
- goto err;
+ ret = __memp_fput(mpf, meta, 0);
meta = NULL;
+ if (ret != 0)
+ goto err;
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)
+ if ((ret = __memp_fget(mpf, &metapno,
+ dbc->txn, 0, &meta)) != 0)
goto err;
if ((ret = __lock_get(
dbenv, dbc->locker,
@@ -770,31 +806,31 @@ get_next: if (cp->recno != RECNO_OOB) {
*/
if (locked == 0) {
if ((ret = __db_lget(dbc, 0, metapno,
- lock_mode, 0, &metalock)) != 0)
+ meta_mode, 0, &metalock)) != 0)
goto err;
locked = 1;
- if (cp->recno != meta->cur_recno &&
- cp->recno != RECNO_OOB &&
+ 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;
+ ret = __memp_fput(mpf, meta, 0);
meta = NULL;
+ if (ret != 0)
+ goto err;
if ((ret = __db_lget(dbc,
- 0, metapno, DB_LOCK_WAIT,
- DB_LOCK_SWITCH, &metalock)) != 0) {
+ 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)
+ if ((ret = __memp_fget(mpf, &metapno, dbc->txn,
+ 0, &meta)) != 0)
goto err;
if ((ret = __db_lget(dbc, 0,
- PGNO_INVALID, DB_LOCK_WRITE,
- DB_LOCK_UPGRADE, &metalock)) != 0) {
+ PGNO_INVALID, DB_LOCK_WRITE,
+ DB_LOCK_UPGRADE, &metalock)) != 0) {
if (ret == DB_LOCK_DEADLOCK)
ret = DB_LOCK_NOTGRANTED;
goto err;
@@ -843,10 +879,6 @@ get_next: if (cp->recno != RECNO_OOB) {
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(dbenv, "__qam_c_get", flags);
@@ -861,18 +893,20 @@ get_next: if (cp->recno != RECNO_OOB) {
}
/* Lock the record. */
- if ((ret = __db_lget(dbc, 0, cp->recno, lock_mode,
+ if (((ret = __db_lget(dbc, LCK_COUPLE, cp->recno, lock_mode,
(with_delete && !retrying) ?
DB_LOCK_NOWAIT | DB_LOCK_RECORD : DB_LOCK_RECORD,
- &lock)) == DB_LOCK_DEADLOCK && with_delete) {
+ &lock)) == DB_LOCK_DEADLOCK || ret == DB_LOCK_NOTGRANTED) &&
+ with_delete) {
#ifdef QDEBUG
- __db_logmsg(dbenv,
- dbc->txn, "Queue S", 0, "%x %d %d %d",
- dbc->locker, cp->recno, first, meta->first_recno);
+ if (DBC_LOGGING(dbc))
+ (void)__log_printf(dbenv,
+ dbc->txn, "Queue S: %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)
+ __db_lget(dbc, 0, metapno, meta_mode, 0, &metalock)) != 0)
goto err;
locked = 1;
goto retry;
@@ -886,27 +920,55 @@ get_next: if (cp->recno != RECNO_OOB) {
* since the first/last may have moved while we slept.
* We release our locks and try again.
*/
- if (((inorder || !with_delete) && is_first) || flags == DB_LAST) {
-get_first:
+ switch (flags) {
+ default:
+ if ((!inorder && with_delete) || !is_first)
+ break;
+ /* FALLTHROUGH */
+ case DB_SET:
+ case DB_SET_RANGE:
+ case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
+ case DB_LAST:
if ((ret =
- __db_lget(dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
- goto err;
- if (cp->recno !=
- (is_first ? meta->first_recno : (meta->cur_recno - 1))) {
+ __db_lget(dbc, 0, metapno, meta_mode, 0, &metalock)) != 0)
+ goto lerr;
+ locked = 1;
+ if ((is_first && cp->recno != meta->first_recno) ||
+ (flags == DB_LAST && cp->recno != meta->cur_recno - 1)) {
if ((ret = __LPUT(dbc, lock)) != 0)
goto err;
if (is_first)
flags = DB_FIRST;
- locked = 1;
goto retry;
+ } else if (!is_first && flags != DB_LAST) {
+ if (QAM_BEFORE_FIRST(meta, cp->recno)) {
+ if (flags == DB_SET_RANGE ||
+ flags == DB_GET_BOTH_RANGE) {
+ if ((ret = __LPUT(dbc, metalock)) != 0)
+ goto err;
+ locked = 0;
+ cp->lock = lock;
+ LOCK_INIT(lock);
+ goto release_retry;
+ }
+ ret = DB_NOTFOUND;
+ goto lerr;
+ }
+ if (QAM_AFTER_CURRENT(meta, cp->recno)) {
+ ret = DB_NOTFOUND;
+ goto lerr;
+ }
}
/* Don't hold the meta page long term. */
if ((ret = __LPUT(dbc, metalock)) != 0)
goto err;
+ locked = 0;
}
/* Position the cursor on the record. */
- if ((ret = __qam_position(dbc, &cp->recno, mode, &exact)) != 0) {
+ if ((ret = __qam_position(dbc, &cp->recno,
+ lock_mode, 0, &exact)) != 0) {
/* We cannot get the page, release the record lock. */
(void)__LPUT(dbc, lock);
goto err;
@@ -916,6 +978,7 @@ get_first:
pglock = cp->lock;
cp->lock = lock;
cp->lock_mode = lock_mode;
+ LOCK_INIT(lock);
if (!exact) {
release_retry: /* Release locks and retry, if possible. */
@@ -924,38 +987,53 @@ release_retry: /* Release locks and retry, if possible. */
cp->page = pg = NULL;
if ((ret = __LPUT(dbc, pglock)) != 0)
goto err1;
+ if (with_delete) {
+ if ((ret = __LPUT(dbc, cp->lock)) != 0)
+ goto err1;
+ } else if ((ret = __TLPUT(dbc, cp->lock)) != 0)
+ goto err1;
+ /*
+ * If we don't need locks and we are out of range
+ * then we can just skip to the FIRST/LAST record
+ * otherwise we must iterate to lock the records
+ * and get serializability.
+ */
switch (flags) {
- case DB_GET_BOTH_RANGE:
- flags = DB_SET_RANGE;
- /* FALLTHROUGH */
case DB_NEXT:
case DB_NEXT_NODUP:
- case DB_SET_RANGE:
if (!with_delete)
is_first = 0;
- /* Peek at the meta page unlocked. */
- if (QAM_BEFORE_FIRST(meta, cp->recno))
- goto get_first;
- /* FALLTHROUGH */
+ if (QAM_BEFORE_FIRST(meta, cp->recno) &&
+ DONT_NEED_LOCKS(dbc))
+ flags = DB_FIRST;
+ break;
+ case DB_LAST:
case DB_PREV:
case DB_PREV_NODUP:
- case DB_LAST:
- if (flags == DB_LAST)
+ if (QAM_AFTER_CURRENT(meta, cp->recno) &&
+ DONT_NEED_LOCKS(dbc))
+ flags = DB_LAST;
+ else
flags = DB_PREV;
- retrying = 0;
- if ((ret = __LPUT(dbc, cp->lock)) != 0)
- goto err1;
- if (flags == DB_SET_RANGE)
- goto get_next;
+ break;
+
+ case DB_GET_BOTH_RANGE:
+ case DB_SET_RANGE:
+ if (QAM_BEFORE_FIRST(meta, cp->recno) &&
+ DONT_NEED_LOCKS(dbc))
+ flags = DB_FIRST;
else
- goto retry;
+ flags = DB_NEXT;
+ break;
default:
/* this is for the SET and GET_BOTH cases */
ret = DB_KEYEMPTY;
goto err1;
}
+ retrying = 0;
+ goto get_next;
}
qp = QAM_GET_RECORD(dbp, pg, cp->indx);
@@ -976,18 +1054,18 @@ release_retry: /* Release locks and retry, if possible. */
}
/* Return the key if the user didn't give us one. */
- if (key != NULL) {
- if (flags != DB_GET_BOTH && flags != DB_SET &&
- (ret = __db_retcopy(dbp->dbenv,
+ if (key != NULL && !F_ISSET(key, DB_DBT_ISSET)) {
+ if ((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);
}
- if (data != NULL) {
- if (!F_ISSET(dbc, DBC_MULTIPLE|DBC_MULTIPLE_KEY) &&
- (ret = __db_retcopy(dbp->dbenv, data, qp->data, t->re_len,
+ if (data != NULL &&
+ !F_ISSET(dbc, DBC_MULTIPLE|DBC_MULTIPLE_KEY) &&
+ !F_ISSET(data, DB_DBT_ISSET)) {
+ if ((ret = __db_retcopy(dbp->dbenv, data, qp->data, t->re_len,
&dbc->rdata->data, &dbc->rdata->ulen)) != 0)
goto err1;
F_SET(data, DB_DBT_ISSET);
@@ -1001,7 +1079,12 @@ release_retry: /* Release locks and retry, if possible. */
* DB_APPEND there; attempting one should be forbidden by
* the interface.
*/
- DB_ASSERT(!F_ISSET(dbp, DB_AM_SECONDARY));
+ DB_ASSERT(dbenv, !F_ISSET(dbp, DB_AM_SECONDARY));
+
+ if ((ret = __qam_dirty(dbp, cp->pgno, &cp->page,
+ dbc->txn, 0)) != 0)
+ goto err1;
+ pg = cp->page;
/*
* Check and see if we *have* any secondary indices.
@@ -1048,7 +1131,6 @@ release_retry: /* Release locks and retry, if possible. */
}
F_CLR(qp, QAM_VALID);
- put_mode = DB_MPOOL_DIRTY;
if ((ret = __LPUT(dbc, pglock)) != 0)
goto err1;
@@ -1066,14 +1148,15 @@ release_retry: /* Release locks and retry, if possible. */
*/
if (locked == 0 && (ret = __db_lget(
- dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
+ dbc, 0, metapno, meta_mode, 0, &metalock)) != 0)
goto err1;
locked = 1;
#ifdef QDEBUG
- __db_logmsg(dbenv,
- dbc->txn, "Queue D", 0, "%x %d %d %d",
- dbc->locker, cp->recno, first, meta->first_recno);
+ if (DBC_LOGGING(dbc))
+ (void)__log_printf(dbenv,
+ dbc->txn, "Queue D: %x %d %d %d",
+ dbc->locker, cp->recno, first, meta->first_recno);
#endif
/*
* See if we deleted the "first" record. If
@@ -1092,8 +1175,8 @@ release_retry: /* Release locks and retry, if possible. */
done:
err1: if (cp->page != NULL) {
- if ((t_ret = __qam_fput(
- dbp, cp->pgno, cp->page, put_mode)) != 0 && ret == 0)
+ if ((t_ret = __qam_fput(dbp, cp->pgno, cp->page, 0)) != 0 &&
+ ret == 0)
ret = t_ret;
/* Doing record locking, release the page lock */
@@ -1101,6 +1184,9 @@ err1: if (cp->page != NULL) {
ret = t_ret;
cp->page = NULL;
}
+ if (0) {
+lerr: (void)__LPUT(dbc, lock);
+ }
err: if (meta) {
/* Release the meta page. */
@@ -1112,11 +1198,11 @@ err: if (meta) {
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
}
- DB_ASSERT(!LOCK_ISSET(metalock));
+ DB_ASSERT(dbenv, !LOCK_ISSET(metalock));
return ((ret == DB_LOCK_NOTGRANTED &&
- !F_ISSET(dbenv, DB_ENV_TIME_NOTGRANTED)) ?
- DB_LOCK_DEADLOCK : ret);
+ !F_ISSET(dbenv, DB_ENV_TIME_NOTGRANTED)) ?
+ DB_LOCK_DEADLOCK : ret);
}
/*
@@ -1142,7 +1228,7 @@ __qam_consume(dbc, meta, first)
dbp = dbc->dbp;
mpf = dbp->mpf;
cp = (QUEUE_CURSOR *)dbc->internal;
- put_mode = DB_MPOOL_DIRTY;
+ put_mode = 0;
ret = 0;
save_page = cp->pgno;
@@ -1165,12 +1251,11 @@ __qam_consume(dbc, meta, first)
if (ret != 0)
goto done;
if ((ret =
- __qam_fput(dbp, cp->pgno, cp->page, put_mode)) != 0)
+ __qam_fput(dbp, cp->pgno, cp->page, 0)) != 0)
goto done;
cp->page = NULL;
- put_mode = 0;
if ((ret = __qam_position(dbc,
- &first, QAM_READ, &exact)) != 0 || exact != 0) {
+ &first, DB_LOCK_READ, 0, &exact)) != 0 || exact != 0) {
(void)__LPUT(dbc, lock);
goto done;
}
@@ -1198,20 +1283,20 @@ __qam_consume(dbc, meta, first)
*/
if (cp->page != NULL && rec_extent != 0 &&
((exact = (first % rec_extent == 0)) ||
- first % meta->rec_page == 0 ||
+ (first % meta->rec_page == 0) ||
first == UINT32_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);
+ if (DBC_LOGGING(dbc))
+ (void)__log_printf(dbp->dbenv, dbc->txn,
+ "Queue R: %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)
+ if ((ret =
+ __qam_fput(dbp, cp->pgno, cp->page, put_mode)) != 0)
break;
cp->page = NULL;
@@ -1250,7 +1335,7 @@ __qam_consume(dbc, meta, first)
break;
if ((ret = __qam_position(dbc,
- &first, QAM_READ, &exact)) != 0) {
+ &first, DB_LOCK_READ, 0, &exact)) != 0) {
(void)__LPUT(dbc, lock);
break;
}
@@ -1275,10 +1360,13 @@ __qam_consume(dbc, meta, first)
* Advance first_recno to this point.
*/
if (ret == 0 && meta->first_recno != first) {
+ if ((ret = __memp_dirty(mpf, &meta, dbc->txn, 0)) != 0)
+ goto done;
#ifdef QDEBUG
- __db_logmsg(dbp->dbenv, dbc->txn, "Queue M",
- 0, "%x %d %d %d", dbc->locker, cp->recno,
- first, meta->first_recno);
+ if (DBC_LOGGING(dbc))
+ (void)__log_printf(dbp->dbenv, dbc->txn,
+ "Queue M: %x %d %d %d", dbc->locker, cp->recno,
+ first, meta->first_recno);
#endif
if (DBC_LOGGING(dbc))
if ((ret = __qam_incfirst_log(dbp,
@@ -1286,7 +1374,6 @@ __qam_consume(dbc, meta, first)
cp->recno, PGNO_BASE_MD)) != 0)
goto done;
meta->first_recno = first;
- (void)__memp_fset(mpf, meta, DB_MPOOL_DIRTY);
}
done:
@@ -1309,22 +1396,17 @@ __qam_bulk(dbc, data, flags)
db_indx_t indx;
db_lockmode_t lkmode;
db_pgno_t metapno;
- qam_position_mode mode;
- int32_t *endp, *offp;
+ u_int32_t *endp, *offp;
+ u_int32_t pagesize, re_len, recs;
u_int8_t *dbuf, *dp, *np;
- int exact, recs, re_len, ret, t_ret, valid;
- int is_key, need_pg, pagesize, size, space;
+ int exact, ret, t_ret, valid;
+ int is_key, need_pg, size, space;
dbp = dbc->dbp;
mpf = dbp->mpf;
cp = (QUEUE_CURSOR *)dbc->internal;
- mode = QAM_READ;
- lkmode = DB_LOCK_READ;
- if (F_ISSET(dbc, DBC_RMW)) {
- mode = QAM_WRITE;
- lkmode = DB_LOCK_WRITE;
- }
+ lkmode = F_ISSET(dbc, DBC_RMW) ? DB_LOCK_WRITE : DB_LOCK_READ;
pagesize = dbp->pgsize;
re_len = ((QUEUE *)dbp->q_internal)->re_len;
@@ -1336,7 +1418,7 @@ __qam_bulk(dbc, data, flags)
if ((ret = __db_lget(dbc, 0, metapno, DB_LOCK_READ, 0, &metalock)) != 0)
return (ret);
- if ((ret = __memp_fget(mpf, &metapno, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapno, dbc->txn, 0, &meta)) != 0) {
/* We did not fetch it, we can release the lock. */
(void)__LPUT(dbc, metalock);
return (ret);
@@ -1346,11 +1428,11 @@ __qam_bulk(dbc, data, flags)
np = dp = dbuf;
/* Keep track of space that is left. There is an termination entry */
- space = data->ulen;
- space -= sizeof(*offp);
+ space = (int)data->ulen;
+ space -= (int)sizeof(*offp);
- /* Build the offset/size table form the end up. */
- endp = (int32_t *) ((u_int8_t *)dbuf + data->ulen);
+ /* Build the offset/size table from the end up. */
+ endp = (u_int32_t *)((u_int8_t *)dbuf + data->ulen);
endp--;
offp = endp;
/* Save the lock on the current position of the cursor. */
@@ -1361,7 +1443,7 @@ next_pg:
/* Wrap around, skipping zero. */
if (cp->recno == RECNO_OOB)
cp->recno++;
- if ((ret = __qam_position(dbc, &cp->recno, mode, &exact)) != 0)
+ if ((ret = __qam_position(dbc, &cp->recno, lkmode, 0, &exact)) != 0)
goto done;
pg = cp->page;
@@ -1379,23 +1461,24 @@ next_pg:
if (pg != NULL) {
if ((ret = __db_lget(dbc, LCK_COUPLE,
- cp->recno, lkmode, DB_LOCK_RECORD, &rlock)) != 0)
+ cp->recno, lkmode, DB_LOCK_RECORD, &rlock)) != 0)
goto done;
qp = QAM_GET_RECORD(dbp, pg, indx);
if (F_ISSET(qp, QAM_VALID)) {
valid = 1;
- space -= (is_key ? 3 : 2) * sizeof(*offp);
+ space -= (int)
+ ((is_key ? 3 : 2) * sizeof(*offp));
if (space < 0)
goto get_space;
if (need_pg) {
dp = np;
- size = pagesize - QPAGE_SZ(dbp);
+ size = (int)pagesize - QPAGE_SZ(dbp);
if (space < size) {
get_space:
if (offp == endp) {
data->size = (u_int32_t)
- DB_ALIGN(size +
- pagesize,
+ DB_ALIGN((u_int32_t)
+ size + pagesize,
sizeof(u_int32_t));
ret = DB_BUFFER_SMALL;
break;
@@ -1407,16 +1490,17 @@ get_space:
break;
}
memcpy(dp,
- (char *)pg + QPAGE_SZ(dbp), size);
+ (u_int8_t *)pg + QPAGE_SZ(dbp),
+ (u_int)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-- = (u_int32_t)((((u_int8_t *)qp -
+ (u_int8_t *)pg) - QPAGE_SZ(dbp)) +
+ (dp - dbuf) + SSZA(QAMDATA, data));
*offp-- = re_len;
}
}
@@ -1426,7 +1510,6 @@ get_space:
}
cp->recno++;
} while (++indx < recs && cp->recno != RECNO_OOB &&
- cp->recno != meta->cur_recno &&
!QAM_AFTER_CURRENT(meta, cp->recno));
/* Drop the page lock. */
@@ -1442,7 +1525,6 @@ get_space:
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;
@@ -1457,7 +1539,7 @@ get_space:
if (is_key == 1)
*offp = RECNO_OOB;
else
- *offp = -1;
+ *offp = (u_int32_t)-1;
done: /* Release the meta page. */
if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
@@ -1514,19 +1596,12 @@ __qam_c_dup(orig_dbc, new_dbc)
DBC *orig_dbc, *new_dbc;
{
QUEUE_CURSOR *orig, *new;
- int ret;
orig = (QUEUE_CURSOR *)orig_dbc->internal;
new = (QUEUE_CURSOR *)new_dbc->internal;
new->recno = orig->recno;
- /* Acquire the long term lock if we are not in a transaction. */
- if (orig_dbc->txn == NULL && LOCK_ISSET(orig->lock))
- if ((ret = __db_lget(new_dbc, 0, new->recno,
- new->lock_mode, DB_LOCK_RECORD, &new->lock)) != 0)
- return (ret);
-
return (0);
}
@@ -1555,7 +1630,7 @@ __qam_c_init(dbc)
}
/* Initialize methods. */
- dbc->c_close = __db_c_close;
+ dbc->c_close = __db_c_close_pp;
dbc->c_count = __db_c_count_pp;
dbc->c_del = __db_c_del_pp;
dbc->c_dup = __db_c_dup_pp;
@@ -1598,7 +1673,7 @@ __qam_getno(dbp, key, rep)
db_recno_t *rep;
{
if ((*rep = *(db_recno_t *)key->data) == 0) {
- __db_err(dbp->dbenv, "illegal record number of 0");
+ __db_errx(dbp->dbenv, "illegal record number of 0");
return (EINVAL);
}
return (0);
@@ -1639,7 +1714,8 @@ __qam_truncate(dbc, countp)
return (ret);
mpf = dbp->mpf;
- if ((ret = __memp_fget(mpf, &metapno, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapno, dbc->txn,
+ DB_MPOOL_DIRTY, &meta)) != 0) {
/* We did not fetch it, we can release the lock. */
(void)__LPUT(dbc, metalock);
return (ret);
@@ -1647,7 +1723,7 @@ __qam_truncate(dbc, countp)
/* Remove the last extent file. */
if (meta->cur_recno > 1 && ((QUEUE *)dbp->q_internal)->page_ext != 0) {
if ((ret = __qam_fremove(dbp,
- QAM_RECNO_PAGE(dbp, meta->cur_recno - 1))) != 0)
+ QAM_RECNO_PAGE(dbp, meta->cur_recno - 1))) != 0)
return (ret);
}
@@ -1659,13 +1735,36 @@ __qam_truncate(dbc, countp)
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)
+ if ((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;
- *countp = count;
+ if (countp != NULL)
+ *countp = count;
return (ret);
}
+
+/*
+ * __qam_delete --
+ * Queue fast delete function.
+ *
+ * PUBLIC: int __qam_delete __P((DBC *, DBT *));
+ */
+int
+__qam_delete(dbc, key)
+ DBC *dbc;
+ DBT *key;
+{
+ QUEUE_CURSOR *cp;
+ int ret;
+
+ cp = (QUEUE_CURSOR *)dbc->internal;
+ if ((ret = __qam_getno(dbc->dbp, key, &cp->recno)) != 0)
+ goto err;
+
+ ret = __qam_c_del(dbc);
+
+err: return (ret);
+}
diff --git a/db/qam/qam.src b/db/qam/qam.src
index 71063f0b6..4e795e553 100644
--- a/db/qam/qam.src
+++ b/db/qam/qam.src
@@ -1,22 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam.src,v 11.33 2004/06/17 17:35:22 bostic Exp $
+ * $Id: qam.src,v 12.5 2006/08/24 14:46:23 bostic Exp $
*/
PREFIX __qam
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <sys/types.h>
-INCLUDE
-INCLUDE #include <ctype.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
@@ -31,7 +24,7 @@ INCLUDE
* incfirst
* Used when we increment first_recno.
*/
-BEGIN incfirst 84
+BEGIN incfirst 42 84
DB fileid int32_t ld
ARG recno db_recno_t lu
ARG meta_pgno db_pgno_t lu
@@ -41,7 +34,7 @@ END
* mvptr
* Used when we change one or both of cur_recno and first_recno.
*/
-BEGIN mvptr 85
+BEGIN mvptr 42 85
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG old_first db_recno_t lu
@@ -58,7 +51,7 @@ END
* Used when we delete a record.
* recno is the record that is being deleted.
*/
-BEGIN del 79
+BEGIN del 42 79
DB fileid int32_t ld
POINTER lsn DB_LSN * lu
ARG pgno db_pgno_t lu
@@ -72,7 +65,7 @@ END
* recno is the record being added.
* data is the record itself.
*/
-BEGIN add 80
+BEGIN add 42 80
DB fileid int32_t ld
POINTER lsn DB_LSN * lu
ARG pgno db_pgno_t lu
@@ -88,7 +81,7 @@ END
* Used when we delete a record in extent based queue.
* recno is the record that is being deleted.
*/
-BEGIN delext 83
+BEGIN delext 42 83
DB fileid int32_t ld
POINTER lsn DB_LSN * lu
ARG pgno db_pgno_t lu
diff --git a/db/qam/qam_auto.c b/db/qam/qam_auto.c
index fe3dcf6fd..acca78332 100644
--- a/db/qam/qam_auto.c
+++ b/db/qam/qam_auto.c
@@ -2,13 +2,6 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -23,9 +16,9 @@
* PUBLIC: u_int32_t, db_recno_t, db_pgno_t));
*/
int
-__qam_incfirst_log(dbp, txnid, ret_lsnp, flags, recno, meta_pgno)
+__qam_incfirst_log(dbp, txnp, ret_lsnp, flags, recno, meta_pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
db_recno_t recno;
@@ -51,30 +44,31 @@ __qam_incfirst_log(dbp, txnid, ret_lsnp, flags, recno, meta_pgno)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -89,7 +83,7 @@ __qam_incfirst_log(dbp, txnid, ret_lsnp, flags, recno, meta_pgno)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -133,12 +127,13 @@ __qam_incfirst_log(dbp, txnid, ret_lsnp, flags, recno, meta_pgno)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -157,20 +152,21 @@ __qam_incfirst_log(dbp, txnid, ret_lsnp, flags, recno, meta_pgno)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__qam_incfirst_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -195,13 +191,14 @@ __qam_incfirst_read(dbenv, recbuf, argpp)
sizeof(__qam_incfirst_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -228,11 +225,11 @@ __qam_incfirst_read(dbenv, recbuf, argpp)
* PUBLIC: db_recno_t, DB_LSN *, db_pgno_t));
*/
int
-__qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
+__qam_mvptr_log(dbp, txnp, ret_lsnp, flags,
opcode, old_first, new_first, old_cur, new_cur,
metalsn, meta_pgno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -263,30 +260,31 @@ __qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -306,7 +304,7 @@ __qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -362,9 +360,15 @@ __qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (metalsn != NULL)
+ if (metalsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(metalsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, metalsn) != 0))
+ return (ret);
+ }
memcpy(bp, metalsn, sizeof(*metalsn));
- else
+ } else
memset(bp, 0, sizeof(*metalsn));
bp += sizeof(*metalsn);
@@ -372,12 +376,13 @@ __qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -396,20 +401,21 @@ __qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__qam_mvptr_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -433,13 +439,14 @@ __qam_mvptr_read(dbenv, recbuf, argpp)
sizeof(__qam_mvptr_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -484,9 +491,9 @@ __qam_mvptr_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_recno_t));
*/
int
-__qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
+__qam_del_log(dbp, txnp, ret_lsnp, flags, lsn, pgno, indx, recno)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
DB_LSN * lsn;
@@ -514,30 +521,31 @@ __qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -554,7 +562,7 @@ __qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -590,9 +598,15 @@ __qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -608,12 +622,13 @@ __qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -632,20 +647,21 @@ __qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__qam_del_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -669,13 +685,14 @@ __qam_del_read(dbenv, recbuf, argpp)
sizeof(__qam_del_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -709,10 +726,10 @@ __qam_del_read(dbenv, recbuf, argpp)
* PUBLIC: const DBT *, u_int32_t, const DBT *));
*/
int
-__qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
+__qam_add_log(dbp, txnp, ret_lsnp, flags, lsn, pgno, indx, recno, data,
vflag, olddata)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
DB_LSN * lsn;
@@ -743,30 +760,31 @@ __qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -786,7 +804,7 @@ __qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -822,9 +840,15 @@ __qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -866,12 +890,13 @@ __qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
bp += olddata->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -890,20 +915,21 @@ __qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__qam_add_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -927,13 +953,14 @@ __qam_add_read(dbenv, recbuf, argpp)
sizeof(__qam_add_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -983,9 +1010,9 @@ __qam_add_read(dbenv, recbuf, argpp)
* PUBLIC: const DBT *));
*/
int
-__qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
+__qam_delext_log(dbp, txnp, ret_lsnp, flags, lsn, pgno, indx, recno, data)
DB *dbp;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
DB_LSN * lsn;
@@ -1014,30 +1041,31 @@ __qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (txnp == NULL)
+ return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
(ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
@@ -1055,7 +1083,7 @@ __qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1091,9 +1119,15 @@ __qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- if (lsn != NULL)
+ if (lsn != NULL) {
+ if (txnp != NULL) {
+ LOG *lp = dbenv->lg_handle->reginfo.primary;
+ if (LOG_COMPARE(lsn, &lp->lsn) >= 0 && (ret =
+ __log_check_page_lsn(dbenv, dbp, lsn) != 0))
+ return (ret);
+ }
memcpy(bp, lsn, sizeof(*lsn));
- else
+ } else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
@@ -1120,12 +1154,13 @@ __qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
bp += data->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1144,20 +1179,21 @@ __qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__qam_delext_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1181,13 +1217,14 @@ __qam_delext_read(dbenv, recbuf, argpp)
sizeof(__qam_delext_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
diff --git a/db/qam/qam_autop.c b/db/qam/qam_autop.c
index e9c122385..8a1f14f28 100644
--- a/db/qam/qam_autop.c
+++ b/db/qam/qam_autop.c
@@ -3,13 +3,6 @@
#include "db_config.h"
#ifdef HAVE_QUEUE
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
@@ -34,20 +27,18 @@ __qam_incfirst_print(dbenv, dbtp, lsnp, notused2, notused3)
__qam_incfirst_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __qam_incfirst_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__qam_incfirst%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__qam_incfirst%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -71,20 +62,18 @@ __qam_mvptr_print(dbenv, dbtp, lsnp, notused2, notused3)
__qam_mvptr_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __qam_mvptr_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__qam_mvptr%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__qam_mvptr%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -114,20 +103,18 @@ __qam_del_print(dbenv, dbtp, lsnp, notused2, notused3)
__qam_del_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __qam_del_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__qam_del%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__qam_del%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
(void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
@@ -156,20 +143,18 @@ __qam_add_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __qam_add_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__qam_add%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__qam_add%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
(void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
@@ -211,20 +196,18 @@ __qam_delext_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __qam_delext_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__qam_delext%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__qam_delext%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tfileid: %ld\n", (long)argp->fileid);
(void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
diff --git a/db/qam/qam_conv.c b/db/qam/qam_conv.c
index c2b7d53a4..85fb47871 100644
--- a/db/qam/qam_conv.c
+++ b/db/qam/qam_conv.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_conv.c,v 11.17 2004/01/28 03:36:19 bostic Exp $
+ * $Id: qam_conv.c,v 12.4 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_swap.h"
diff --git a/db/qam/qam_files.c b/db/qam/qam_files.c
index d3f040603..62ad8ed8a 100644
--- a/db/qam/qam_files.c
+++ b/db/qam/qam_files.c
@@ -1,25 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_files.c,v 1.88 2004/10/21 14:54:42 bostic Exp $
+ * $Id: qam_files.c,v 12.17 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <stdlib.h>
-
-#include <string.h>
-#include <ctype.h>
-#endif
-
#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/fop.h"
@@ -35,13 +26,14 @@
*
* Calculate which extent the page is in, open and create if necessary.
*
- * PUBLIC: int __qam_fprobe
- * PUBLIC: __P((DB *, db_pgno_t, void *, qam_probe_mode, u_int32_t));
+ * PUBLIC: int __qam_fprobe __P((DB *, db_pgno_t,
+ * PUBLIC: DB_TXN *, void *, qam_probe_mode, u_int32_t));
*/
int
-__qam_fprobe(dbp, pgno, addrp, mode, flags)
+__qam_fprobe(dbp, pgno, txn, addrp, mode, flags)
DB *dbp;
db_pgno_t pgno;
+ DB_TXN *txn;
void *addrp;
qam_probe_mode mode;
u_int32_t flags;
@@ -51,8 +43,8 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
MPFARRAY *array;
QUEUE *qp;
u_int8_t fid[DB_FILE_ID_LEN];
- u_int32_t extid, maxext, numext, offset, oldext, openflags;
- char buf[MAXPATHLEN];
+ u_int32_t i, extid, maxext, numext, lflags, offset, oldext, openflags;
+ char buf[DB_MAXPATHLEN];
int ftype, less, ret, t_ret;
dbenv = dbp->dbenv;
@@ -61,9 +53,17 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
if (qp->page_ext == 0) {
mpf = dbp->mpf;
- return (mode == QAM_PROBE_GET ?
- __memp_fget(mpf, &pgno, flags, addrp) :
- __memp_fput(mpf, addrp, flags));
+ switch (mode) {
+ case QAM_PROBE_GET:
+ return (__memp_fget(mpf, &pgno, txn, flags, addrp));
+ case QAM_PROBE_PUT:
+ return (__memp_fput(mpf, addrp, flags));
+ case QAM_PROBE_DIRTY:
+ return (__memp_dirty(mpf, addrp, txn, flags));
+ case QAM_PROBE_MPF:
+ *(DB_MPOOLFILE **)addrp = mpf;
+ return (0);
+ }
}
mpf = NULL;
@@ -73,7 +73,7 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
* The file cannot go away because we must have a record locked
* in that file.
*/
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
extid = QAM_PAGE_EXTENT(dbp, pgno);
/* Array1 will always be in use if array2 is in use. */
@@ -87,6 +87,7 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
goto alloc;
}
+retry:
if (extid < array->low_extent) {
less = 1;
offset = array->low_extent - extid;
@@ -129,16 +130,12 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
* sizeof(array->mpfarray[0]));
offset = 0;
} else if (less == 0 && offset == array->n_extent &&
- mode != QAM_PROBE_MPF && array->mpfarray[0].pinref == 0) {
+ (mode == QAM_PROBE_GET || mode == QAM_PROBE_PUT) &&
+ array->mpfarray[0].pinref == 0) {
/*
* If this is at the end of the array and the file at
* the beginning 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)) != 0)
@@ -160,18 +157,49 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
/ (qp->page_ext * qp->rec_page);
if (offset >= maxext/2) {
array = &qp->array2;
- DB_ASSERT(array->n_extent == 0);
+ DB_ASSERT(dbenv, array->n_extent == 0);
oldext = 0;
array->n_extent = 4;
array->low_extent = extid;
offset = 0;
numext = 0;
+ } else if (array->mpfarray[0].pinref == 0) {
+ /*
+ * Check to see if there are extents marked
+ * for deletion at the beginning of the cache.
+ * If so close them so they will go away.
+ */
+ for (i = 0; i < array->n_extent; i++) {
+ if (array->mpfarray[i].pinref != 0)
+ break;
+ mpf = array->mpfarray[i].mpf;
+ if (mpf == NULL)
+ continue;
+ (void)__memp_get_flags(mpf, &lflags);
+ if (!FLD_ISSET(lflags, DB_MPOOL_UNLINK))
+ break;
+
+ array->mpfarray[i].mpf = NULL;
+ if ((ret = __memp_fclose(mpf, 0)) != 0)
+ goto err;
+ }
+ if (i == 0)
+ goto increase;
+ memmove(&array->mpfarray[0],
+ &array->mpfarray[i],
+ (array->n_extent - i) *
+ sizeof(array->mpfarray[0]));
+ memset(&array->mpfarray[array->n_extent - i],
+ '\0', i * sizeof(array->mpfarray[0]));
+ array->low_extent += i;
+ array->hi_extent += i;
+ goto retry;
} else {
/*
* Increase the size to at least include
* the new one and double it.
*/
- array->n_extent += offset;
+increase: array->n_extent += offset;
array->n_extent <<= 2;
}
alloc: if ((ret = __os_realloc(dbenv,
@@ -219,6 +247,7 @@ alloc: if ((ret = __os_realloc(dbenv,
(void)__memp_set_pgcookie(mpf, &qp->pgcookie);
(void)__memp_get_ftype(dbp->mpf, &ftype);
(void)__memp_set_ftype(mpf, ftype);
+ (void)__memp_set_clear_len(mpf, dbp->pgsize);
/* Set up the fileid for this extent. */
__qam_exid(dbp, fid, extid);
@@ -255,25 +284,31 @@ alloc: if ((ret = __os_realloc(dbenv,
(void)__memp_set_flags(mpf, DB_MPOOL_UNLINK, 0);
err:
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
if (ret == 0) {
- if (mode == QAM_PROBE_MPF) {
- *(DB_MPOOLFILE **)addrp = mpf;
- return (0);
- }
pgno--;
pgno %= qp->page_ext;
- if (mode == QAM_PROBE_GET) {
- if ((ret = __memp_fget(mpf, &pgno, flags, addrp)) == 0)
- return (ret);
- } else
+ switch (mode) {
+ case QAM_PROBE_GET:
+ ret = __memp_fget(mpf, &pgno, txn, flags, addrp);
+ if (ret == 0)
+ return (0);
+ break;
+ case QAM_PROBE_PUT:
ret = __memp_fput(mpf, addrp, flags);
+ break;
+ case QAM_PROBE_DIRTY:
+ return (__memp_dirty(mpf, addrp, txn, flags));
+ case QAM_PROBE_MPF:
+ *(DB_MPOOLFILE **)addrp = mpf;
+ return (0);
+ }
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
/* Recalculate because we dropped the lock. */
offset = extid - array->low_extent;
- DB_ASSERT(array->mpfarray[offset].pinref > 0);
+ DB_ASSERT(dbenv, array->mpfarray[offset].pinref > 0);
if (--array->mpfarray[offset].pinref == 0 &&
(mode == QAM_PROBE_GET || ret == 0)) {
/* Check to see if this file will be unlinked. */
@@ -285,7 +320,7 @@ err:
ret = t_ret;
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
}
return (ret);
}
@@ -314,7 +349,7 @@ __qam_fclose(dbp, pgnoaddr)
dbenv = dbp->dbenv;
qp = (QUEUE *)dbp->q_internal;
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
extid = QAM_PAGE_EXTENT(dbp, pgnoaddr);
array = &qp->array1;
@@ -322,7 +357,8 @@ __qam_fclose(dbp, pgnoaddr)
array = &qp->array2;
offset = extid - array->low_extent;
- DB_ASSERT(extid >= array->low_extent && offset < array->n_extent);
+ DB_ASSERT(dbenv,
+ extid >= array->low_extent && offset < array->n_extent);
/* If other threads are still using this file, leave it. */
if (array->mpfarray[offset].pinref != 0)
@@ -333,7 +369,7 @@ __qam_fclose(dbp, pgnoaddr)
ret = __memp_fclose(mpf, 0);
done:
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ MUTEX_UNLOCK(dbenv, dbp->mutex);
return (ret);
}
@@ -356,16 +392,13 @@ __qam_fremove(dbp, pgnoaddr)
MPFARRAY *array;
QUEUE *qp;
u_int32_t extid, offset;
-#ifdef CONFIG_TEST
- char buf[MAXPATHLEN], *real_name;
-#endif
int ret;
qp = (QUEUE *)dbp->q_internal;
dbenv = dbp->dbenv;
ret = 0;
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ MUTEX_LOCK(dbenv, dbp->mutex);
extid = QAM_PAGE_EXTENT(dbp, pgnoaddr);
array = &qp->array1;
@@ -373,16 +406,14 @@ __qam_fremove(dbp, pgnoaddr)
array = &qp->array2;
offset = extid - array->low_extent;
- DB_ASSERT(extid >= array->low_extent && offset < array->n_extent);
+ DB_ASSERT(dbenv,
+ extid >= array->low_extent && offset < array->n_extent);
-#ifdef CONFIG_TEST
- real_name = NULL;
- /* Find the real name of the file. */
- QAM_EXNAME(qp, extid, buf, sizeof(buf));
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, buf, 0, NULL, &real_name)) != 0)
+ mpf = array->mpfarray[offset].mpf;
+ /* This extent my already be marked for delete and closed. */
+ if (mpf == NULL)
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.
@@ -390,7 +421,6 @@ __qam_fremove(dbp, pgnoaddr)
if (LOGGING_ON(dbenv) && (ret = __log_flush(dbenv, NULL)) != 0)
goto err;
- mpf = array->mpfarray[offset].mpf;
(void)__memp_set_flags(mpf, DB_MPOOL_UNLINK, 1);
/* Someone could be real slow, let them close it down. */
if (array->mpfarray[offset].pinref != 0)
@@ -416,12 +446,8 @@ __qam_fremove(dbp, pgnoaddr)
array->hi_extent--;
}
-err:
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
-#ifdef CONFIG_TEST
- if (real_name != NULL)
- __os_free(dbenv, real_name);
-#endif
+err: MUTEX_UNLOCK(dbenv, dbp->mutex);
+
return (ret);
}
@@ -491,7 +517,7 @@ __qam_gen_filelist(dbp, filelistp)
/* Find out the first and last record numbers in the database. */
i = PGNO_BASE_MD;
- if ((ret = __memp_fget(mpf, &i, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &i, NULL, 0, &meta)) != 0)
return (ret);
current = meta->cur_recno;
@@ -536,15 +562,15 @@ again:
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 = __qam_fprobe(dbp, QAM_RECNO_PAGE(dbp, i), NULL,
+ &fp->mpf, QAM_PROBE_MPF, 0)) != 0) {
if (ret == ENOENT)
continue;
return (ret);
}
fp->id = QAM_RECNO_EXTENT(dbp, i);
fp++;
- DB_ASSERT((size_t)(fp - *filelistp) < extent_cnt);
+ DB_ASSERT(dbenv, (size_t)(fp - *filelistp) < extent_cnt);
}
if (current < first) {
@@ -571,7 +597,7 @@ __qam_extent_names(dbenv, name, namelistp)
QUEUE_FILELIST *filelist, *fp;
size_t len;
int cnt, ret, t_ret;
- char buf[MAXPATHLEN], **cp, *freep;
+ char buf[DB_MAXPATHLEN], **cp, *freep;
*namelistp = NULL;
filelist = NULL;
@@ -579,7 +605,7 @@ __qam_extent_names(dbenv, name, namelistp)
return (ret);
if ((ret = __db_open(dbp,
NULL, name, NULL, DB_QUEUE, DB_RDONLY, 0, PGNO_BASE_MD)) != 0)
- return (ret);
+ goto done;
qp = dbp->q_internal;
if (qp->page_ext == 0)
goto done;
@@ -677,7 +703,7 @@ int __qam_nameop(dbp, txn, newname, op)
u_int8_t fid[DB_FILE_ID_LEN];
u_int32_t exid;
int cnt, i, ret, t_ret;
- char buf[MAXPATHLEN], nbuf[MAXPATHLEN], sepsave;
+ char buf[DB_MAXPATHLEN], nbuf[DB_MAXPATHLEN], sepsave;
char *endname, *endpath, *exname, *fullname, **names;
char *ndir, *namep, *new, *cp;
@@ -769,7 +795,7 @@ int __qam_nameop(dbp, txn, newname, op)
continue;
/* Make sure we have all numbers. foo.db vs. foo.db.0. */
for (cp = &names[i][len]; *cp != '\0'; cp++)
- if (!isdigit(*cp))
+ if (!isdigit((int)*cp))
break;
if (*cp != '\0')
continue;
@@ -786,7 +812,8 @@ int __qam_nameop(dbp, txn, newname, op)
snprintf(exname, exlen,
"%s%s", fullname, names[i] + len);
if ((t_ret = __memp_nameop(dbenv,
- fid, NULL, exname, NULL)) != 0 && ret == 0)
+ fid, NULL, exname, NULL,
+ F_ISSET(dbp, DB_AM_INMEM))) != 0 && ret == 0)
ret = t_ret;
break;
diff --git a/db/qam/qam_method.c b/db/qam/qam_method.c
index e3526fa3c..ff5129517 100644
--- a/db/qam/qam_method.c
+++ b/db/qam/qam_method.c
@@ -1,21 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_method.c,v 11.84 2004/10/14 18:09:32 bostic Exp $
+ * $Id: qam_method.c,v 12.8 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#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/mp.h"
@@ -130,7 +125,7 @@ __qam_set_extentsize(dbp, extentsize)
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_extentsize");
if (extentsize < 1) {
- __db_err(dbp->dbenv, "Extent size must be at least 1");
+ __db_errx(dbp->dbenv, "Extent size must be at least 1");
return (EINVAL);
}
@@ -163,7 +158,7 @@ __queue_pageinfo(dbp, firstp, lastp, emptyp, prpage, flags)
/* Find out the page number of the last page in the database. */
i = PGNO_BASE_MD;
- if ((ret = __memp_fget(mpf, &i, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &i, NULL, 0, &meta)) != 0)
return (ret);
first = QAM_RECNO_PAGE(dbp, meta->first_recno);
@@ -222,7 +217,7 @@ __db_prqueue(dbp, flags)
/* Dump each page. */
begin:
for (; i <= stop; ++i) {
- if ((ret = __qam_fget(dbp, &i, 0, &h)) != 0) {
+ if ((ret = __qam_fget(dbp, &i, NULL, 0, &h)) != 0) {
pg_ext = ((QUEUE *)dbp->q_internal)->page_ext;
if (pg_ext == 0) {
if (ret == DB_PAGE_NOTFOUND && first == last)
@@ -302,8 +297,8 @@ __qam_rr(dbp, txn, name, subdb, newname, op)
PANIC_CHECK(dbenv);
- if (subdb != NULL) {
- __db_err(dbenv,
+ if (subdb != NULL && name != NULL) {
+ __db_errx(dbenv,
"Queue does not support multiple databases per file");
return (EINVAL);
}
diff --git a/db/qam/qam_open.c b/db/qam/qam_open.c
index 595d74dac..75df8e41c 100644
--- a/db/qam/qam_open.c
+++ b/db/qam/qam_open.c
@@ -1,24 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_open.c,v 11.68 2004/02/27 12:38:31 bostic Exp $
+ * $Id: qam_open.c,v 12.11 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.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"
@@ -58,11 +51,17 @@ __qam_open(dbp, txn, name, base_pgno, mode, flags)
qmeta = NULL;
if (name == NULL && t->page_ext != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Extent size may not be specified for in-memory queue database");
return (EINVAL);
}
+ if (MULTIVERSION(dbp)) {
+ __db_errx(dbenv,
+ "Multiversion queue databases are not supported");
+ return (EINVAL);
+ }
+
/* Initialize the remaining fields/methods of the DB. */
dbp->db_am_remove = __qam_remove;
dbp->db_am_rename = __qam_rename;
@@ -86,12 +85,12 @@ __qam_open(dbp, txn, name, base_pgno, mode, flags)
if ((ret =
__db_lget(dbc, 0, base_pgno, DB_LOCK_READ, 0, &metalock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &base_pgno, 0, &qmeta)) != 0)
+ if ((ret = __memp_fget(mpf, &base_pgno, dbc->txn, 0, &qmeta)) != 0)
goto err;
/* 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);
+ __db_errx(dbenv, "%s: unexpected file type or format", name);
ret = EINVAL;
goto err;
}
@@ -103,7 +102,7 @@ __qam_open(dbp, txn, name, base_pgno, mode, flags)
goto err;
if (mode == 0)
- mode = __db_omode("rwrw--");
+ mode = __db_omode("rw-rw----");
t->mode = mode;
t->re_pad = qmeta->re_pad;
t->re_len = qmeta->re_len;
@@ -188,7 +187,7 @@ __qam_metachk(dbp, name, qmeta)
switch (vers) {
case 1:
case 2:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: queue version %lu requires a version upgrade",
name, (u_long)vers);
return (DB_OLD_VERSION);
@@ -196,7 +195,7 @@ __qam_metachk(dbp, name, qmeta)
case 4:
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"%s: unsupported qam version: %lu", name, (u_long)vers);
return (EINVAL);
}
@@ -233,8 +232,10 @@ __qam_init_meta(dbp, meta)
DB *dbp;
QMETA *meta;
{
+ DB_ENV *dbenv;
QUEUE *t;
+ dbenv = dbp->dbenv;
t = dbp->q_internal;
memset(meta, 0, sizeof(QMETA));
@@ -248,8 +249,8 @@ __qam_init_meta(dbp, meta)
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);
+ ((DB_CIPHER *)dbenv->crypto_handle)->alg;
+ DB_ASSERT(dbenv, meta->dbmeta.encrypt_alg != 0);
meta->crypto_magic = meta->dbmeta.magic;
}
meta->dbmeta.type = P_QAMMETA;
@@ -264,7 +265,7 @@ __qam_init_meta(dbp, meta)
/* Verify that we can fit at least one record per page. */
if (QAM_RECNO_PER_PAGE(dbp) < 1) {
- __db_err(dbp->dbenv,
+ __db_errx(dbenv,
"Record size of %lu too large for page size of %lu",
(u_long)t->re_len, (u_long)dbp->pgsize);
return (EINVAL);
@@ -308,11 +309,12 @@ __qam_new_file(dbp, txn, fhp, name)
/* Build meta-data page. */
- if (name == NULL) {
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
pgno = PGNO_BASE_MD;
- ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &meta);
+ ret = __memp_fget(mpf, &pgno, txn,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &meta);
} else {
- ret = __os_calloc(dbp->dbenv, 1, dbp->pgsize, &buf);
+ ret = __os_calloc(dbenv, 1, dbp->pgsize, &buf);
meta = (QMETA *)buf;
}
if (ret != 0)
@@ -321,9 +323,12 @@ __qam_new_file(dbp, txn, fhp, name)
if ((ret = __qam_init_meta(dbp, meta)) != 0)
goto err;
- if (name == NULL)
- ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
- else {
+ if (F_ISSET(dbp, DB_AM_INMEM)) {
+ if ((ret = __db_log_page(dbp,
+ txn, &meta->dbmeta.lsn, pgno, (PAGE *)meta)) != 0)
+ goto err;
+ ret = __memp_fput(mpf, meta, 0);
+ } else {
pginfo.db_pagesize = dbp->pgsize;
pginfo.flags =
F_ISSET(dbp, (DB_AM_CHKSUM | DB_AM_ENCRYPT | DB_AM_SWAP));
diff --git a/db/qam/qam_rec.c b/db/qam/qam_rec.c
index e92141ddd..88a7bf261 100644
--- a/db/qam/qam_rec.c
+++ b/db/qam/qam_rec.c
@@ -1,28 +1,42 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_rec.c,v 11.78 2004/05/11 14:04:51 bostic Exp $
+ * $Id: qam_rec.c,v 12.20 2006/09/09 14:28:24 bostic Exp $
*/
#include "db_config.h"
-#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/lock.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+/*
+ * LSNs in queue data pages are advisory. They do not have to be accurate
+ * as all operations are idempotent on records. They should not be rolled
+ * forward during recovery as committed transaction may obscure updates from
+ * an incomplete transaction that updates the same page. The incomplete
+ * transaction may be completed during a later hot backup cycle.
+ */
+
+/* Determine if we are restoring prepared transactions from __txn_recover. */
+#define IS_IN_RESTORE(dbenv) \
+ (((DB_TXNREGION *) \
+ (dbenv)->tx_handle->reginfo.primary)->stat.st_nrestores != 0)
+
+/* Queue version of REC_DIRTY -- needs to probe the correct file. */
+#define QAM_DIRTY(dbp, pgno, pagep) \
+ if ((ret = __qam_dirty((dbp), pgno, pagep, NULL, 0)) != 0) { \
+ ret = __db_pgerr((dbp), (pgno), ret); \
+ goto out; \
+ }
/*
* __qam_incfirst_recover --
@@ -49,20 +63,23 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
QUEUE_CURSOR *cp;
db_pgno_t metapg;
u_int32_t rec_ext;
- int exact, modified, ret, t_ret;
+ int exact, ret, t_ret;
+ LOCK_INIT(lock);
+ COMPQUIET(meta, NULL);
REC_PRINT(__qam_incfirst_print);
- REC_INTRO(__qam_incfirst_read, 1);
+ REC_INTRO(__qam_incfirst_read, 1, 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 ((ret = __memp_fget(mpf, &metapg, NULL,
+ 0, &meta)) != 0) {
if (DB_REDO(op)) {
- if ((ret = __memp_fget(mpf,
- &metapg, DB_MPOOL_CREATE, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapg, NULL,
+ DB_MPOOL_CREATE, &meta)) != 0) {
(void)__LPUT(dbc, lock);
goto out;
}
@@ -75,8 +92,6 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
}
}
- modified = 0;
-
/*
* Only move first_recno backwards so we pick up the aborted delete.
* When going forward we need to be careful since
@@ -84,21 +99,21 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
*/
if (DB_UNDO(op)) {
if (QAM_BEFORE_FIRST(meta, argp->recno)) {
+ REC_DIRTY(mpf, &meta);
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) {
+ LOG_COMPARE(&LSN(meta), &trunc_lsn) > 0) {
+ REC_DIRTY(mpf, &meta);
LSN(meta) = trunc_lsn;
- modified = 1;
}
} else {
- if (log_compare(&LSN(meta), lsnp) < 0) {
+ if (LOG_COMPARE(&LSN(meta), lsnp) < 0) {
+ REC_DIRTY(mpf, &meta);
LSN(meta) = *lsnp;
- modified = 1;
}
if (meta->page_ext == 0)
rec_ext = 0;
@@ -110,7 +125,7 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
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)
+ &meta->first_recno, DB_LOCK_READ, 0, &exact)) != 0)
goto err;
if (cp->page != NULL && (ret =
__qam_fput(file_dbp, cp->pgno, cp->page, 0)) != 0)
@@ -123,14 +138,14 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
if ((ret =
__qam_fremove(file_dbp, cp->pgno)) != 0)
goto err;
+ REC_DIRTY(mpf, &meta);
meta->first_recno++;
if (meta->first_recno == RECNO_OOB)
meta->first_recno++;
- modified = 1;
}
}
- ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0);
+ ret = __memp_fput(mpf, meta, 0);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
@@ -169,21 +184,23 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
DB_LOCK lock;
DB_MPOOLFILE *mpf;
QMETA *meta;
+ QUEUE_CURSOR *cp;
db_pgno_t metapg;
- int cmp_n, cmp_p, modified, ret;
+ int cmp_n, cmp_p, exact, ret;
REC_PRINT(__qam_mvptr_print);
- REC_INTRO(__qam_mvptr_read, 1);
+ REC_INTRO(__qam_mvptr_read, 1, 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 ((ret = __memp_fget(mpf, &metapg, NULL,
+ 0, &meta)) != 0) {
if (DB_REDO(op)) {
- if ((ret = __memp_fget(mpf,
- &metapg, DB_MPOOL_CREATE, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapg, NULL,
+ DB_MPOOL_CREATE, &meta)) != 0) {
(void)__LPUT(dbc, lock);
goto out;
}
@@ -196,43 +213,75 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
}
}
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(meta));
- cmp_p = log_compare(&LSN(meta), &argp->metalsn);
+ cmp_n = LOG_COMPARE(lsnp, &LSN(meta));
+ cmp_p = LOG_COMPARE(&LSN(meta), &argp->metalsn);
/*
* Under normal circumstances, we never undo a movement of one of
* the pointers. Just move them along regardless of abort/commit.
+ * When going forward we need to verify that this is really where
+ * the pointer belongs. A transaction may roll back and reinsert
+ * a record that was missing at the time of this action.
*
* If we're undoing a truncate, we need to reset the pointers to
* their state before the truncate.
*/
if (DB_UNDO(op)) {
if ((argp->opcode & QAM_TRUNCATE) && cmp_n <= 0) {
+ REC_DIRTY(mpf, &meta);
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) {
+ LOG_COMPARE(&trunc_lsn, &LSN(meta)) < 0) {
+ REC_DIRTY(mpf, &meta);
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;
+ REC_DIRTY(mpf, &meta);
+ cp = (QUEUE_CURSOR *)dbc->internal;
+ if ((argp->opcode & QAM_SETFIRST) &&
+ meta->first_recno == argp->old_first) {
+ if (argp->old_first > argp->new_first)
+ meta->first_recno = argp->new_first;
+ else {
+ if ((ret = __qam_position(dbc,
+ &meta->first_recno, DB_LOCK_READ, 0,
+ &exact)) != 0)
+ goto err;
+ if (!exact)
+ meta->first_recno = argp->new_first;
+ if (cp->page != NULL &&
+ (ret = __qam_fput(file_dbp,
+ cp->pgno, cp->page, 0)) != 0)
+ goto err;
+ }
+ }
- if (argp->opcode & QAM_SETCUR)
- meta->cur_recno = argp->new_cur;
+ if ((argp->opcode & QAM_SETCUR) &&
+ meta->cur_recno == argp->old_cur) {
+ if (argp->old_cur < argp->new_cur)
+ meta->cur_recno = argp->new_cur;
+ else {
+ if ((ret = __qam_position(dbc, &meta->cur_recno,
+ DB_LOCK_READ, 0, &exact)) != 0)
+ goto err;
+ if (!exact)
+ meta->cur_recno = argp->new_cur;
+ if (cp->page != NULL &&
+ (ret = __qam_fput(file_dbp,
+ cp->pgno, cp->page, 0)) != 0)
+ goto err;
+ }
+ }
- modified = 1;
meta->dbmeta.lsn = *lsnp;
}
- if ((ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto out;
if ((ret = __LPUT(dbc, lock)) != 0)
@@ -241,6 +290,11 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
done: *lsnp = argp->prev_lsn;
ret = 0;
+ if (0) {
+err: (void)__memp_fput(mpf, meta, 0);
+ (void)__LPUT(dbc, lock);
+ }
+
out: REC_CLOSE;
}
@@ -269,24 +323,24 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
QMETA *meta;
QPAGE *pagep;
db_pgno_t metapg;
- int cmp_n, modified, ret, t_ret;
+ int cmp_n, ret, t_ret;
COMPQUIET(info, NULL);
+ COMPQUIET(pagep, NULL);
REC_PRINT(__qam_del_print);
- REC_INTRO(__qam_del_read, 1);
+ REC_INTRO(__qam_del_read, 1, 1);
- if ((ret = __qam_fget(file_dbp,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ if ((ret = __qam_fget(file_dbp, &argp->pgno, NULL,
+ DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
- modified = 0;
if (pagep->pgno == PGNO_INVALID) {
+ QAM_DIRTY(file_dbp, argp->pgno, &pagep);
pagep->pgno = argp->pgno;
pagep->type = P_QAMDATA;
- modified = 1;
}
- cmp_n = log_compare(lsnp, &LSN(pagep));
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
if (DB_UNDO(op)) {
/* make sure first is behind us */
@@ -294,7 +348,8 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __db_lget(dbc,
LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapg, NULL,
+ DB_MPOOL_EDIT, &meta)) != 0) {
(void)__LPUT(dbc, lock);
goto err;
}
@@ -303,8 +358,9 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
(meta->first_recno <= meta->cur_recno ||
meta->first_recno -
argp->recno < argp->recno - meta->cur_recno))) {
+ REC_DIRTY(mpf, &meta);
meta->first_recno = argp->recno;
- ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, meta, 0);
} else
ret = __memp_fput(mpf, meta, 0);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
@@ -313,6 +369,7 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
goto err;
/* Need to undo delete - mark the record as present */
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
qp = QAM_GET_RECORD(file_dbp, pagep, argp->indx);
F_SET(qp, QAM_VALID);
@@ -323,19 +380,28 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
* foul up a concurrent put. Having too late an LSN
* is harmless in queue except when we're determining
* what we need to roll forward during recovery. [#2588]
+ * If we are aborting a restored transaction then it
+ * might get rolled forward later so the LSN needs to
+ * be correct in that case too. [#12181]
*/
- if (op == DB_TXN_BACKWARD_ROLL && cmp_n <= 0)
+ if (cmp_n <= 0 &&
+ (op == DB_TXN_BACKWARD_ROLL || IS_IN_RESTORE(dbenv)))
LSN(pagep) = argp->lsn;
- modified = 1;
} else if (op == DB_TXN_APPLY || (cmp_n > 0 && DB_REDO(op))) {
/* Need to redo delete - clear the valid bit */
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
qp = QAM_GET_RECORD(file_dbp, pagep, argp->indx);
F_CLR(qp, QAM_VALID);
- LSN(pagep) = *lsnp;
- modified = 1;
+ /*
+ * We only move the LSN forward during replication.
+ * During recovery we could obscure an update from
+ * a partially completed transaction while processing
+ * a hot backup. [#13823]
+ */
+ if (op == DB_TXN_APPLY)
+ LSN(pagep) = *lsnp;
}
- if ((ret = __qam_fput(file_dbp,
- argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __qam_fput(file_dbp, argp->pgno, pagep, 0)) != 0)
goto out;
done: *lsnp = argp->prev_lsn;
@@ -371,34 +437,31 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
QMETA *meta;
QPAGE *pagep;
db_pgno_t metapg;
- int cmp_n, modified, ret, t_ret;
+ int cmp_n, ret, t_ret;
COMPQUIET(info, NULL);
+ COMPQUIET(pagep, NULL);
REC_PRINT(__qam_delext_print);
- REC_INTRO(__qam_delext_read, 1);
+ REC_INTRO(__qam_delext_read, 1, 1);
- if ((ret = __qam_fget(file_dbp, &argp->pgno, 0, &pagep)) != 0) {
- if (ret != DB_PAGE_NOTFOUND && ret != ENOENT)
- goto out;
+ if ((ret = __qam_fget(file_dbp, &argp->pgno, NULL,
+ DB_REDO(op) ? 0 : DB_MPOOL_CREATE, &pagep)) != 0) {
/*
* If we are redoing a delete and the page is not there
* we are done.
*/
- if (DB_REDO(op))
+ if (DB_REDO(op) && (ret == DB_PAGE_NOTFOUND || ret == ENOENT))
goto done;
- if ((ret = __qam_fget(file_dbp,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto out;
+ goto out;
}
- modified = 0;
if (pagep->pgno == PGNO_INVALID) {
+ QAM_DIRTY(file_dbp, argp->pgno, &pagep);
pagep->pgno = argp->pgno;
pagep->type = P_QAMDATA;
- modified = 1;
}
- cmp_n = log_compare(lsnp, &LSN(pagep));
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
if (DB_UNDO(op)) {
/* make sure first is behind us */
@@ -406,7 +469,8 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __db_lget(dbc,
LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapg, NULL,
+ DB_MPOOL_EDIT, &meta)) != 0) {
(void)__LPUT(dbc, lock);
goto err;
}
@@ -416,7 +480,7 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
meta->first_recno -
argp->recno < argp->recno - meta->cur_recno))) {
meta->first_recno = argp->recno;
- ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, meta, 0);
} else
ret = __memp_fput(mpf, meta, 0);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
@@ -424,6 +488,7 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
if (ret != 0)
goto err;
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
if ((ret = __qam_pitem(dbc, pagep,
argp->indx, argp->recno, &argp->data)) != 0)
goto err;
@@ -436,18 +501,24 @@ __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 (cmp_n <= 0 &&
+ (op == DB_TXN_BACKWARD_ROLL || IS_IN_RESTORE(dbenv)))
LSN(pagep) = argp->lsn;
- modified = 1;
} else if (op == DB_TXN_APPLY || (cmp_n > 0 && DB_REDO(op))) {
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
/* Need to redo delete - clear the valid bit */
qp = QAM_GET_RECORD(file_dbp, pagep, argp->indx);
F_CLR(qp, QAM_VALID);
- LSN(pagep) = *lsnp;
- modified = 1;
+ /*
+ * We only move the LSN forward during replication.
+ * During recovery we could obscure an update from
+ * a partially completed transaction while processing
+ * a hot backup. [#13823]
+ */
+ if (op == DB_TXN_APPLY)
+ LSN(pagep) = *lsnp;
}
- if ((ret = __qam_fput(file_dbp,
- argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __qam_fput(file_dbp, argp->pgno, pagep, 0)) != 0)
goto out;
done: *lsnp = argp->prev_lsn;
@@ -482,62 +553,65 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
QMETA *meta;
QPAGE *pagep;
db_pgno_t metapg;
- int cmp_n, meta_dirty, modified, ret;
+ int cmp_n, ret;
COMPQUIET(info, NULL);
+ COMPQUIET(pagep, NULL);
REC_PRINT(__qam_add_print);
- REC_INTRO(__qam_add_read, 1);
+ REC_INTRO(__qam_add_read, 1, 1);
- modified = 0;
- if ((ret = __qam_fget(file_dbp, &argp->pgno, 0, &pagep)) != 0) {
- if (ret != DB_PAGE_NOTFOUND && ret != ENOENT)
- goto out;
+ if ((ret = __qam_fget(file_dbp, &argp->pgno, NULL,
+ DB_UNDO(op) ? 0 : DB_MPOOL_CREATE, &pagep)) != 0) {
/*
* If we are undoing an append and the page is not there
* we are done.
*/
- if (DB_UNDO(op))
+ if (DB_UNDO(op) && (ret == DB_PAGE_NOTFOUND || ret == ENOENT))
goto done;
- if ((ret = __qam_fget(file_dbp,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto out;
+ goto out;
}
if (pagep->pgno == PGNO_INVALID) {
+ QAM_DIRTY(file_dbp, argp->pgno, &pagep);
pagep->pgno = argp->pgno;
pagep->type = P_QAMDATA;
- modified = 1;
}
- cmp_n = log_compare(lsnp, &LSN(pagep));
+ cmp_n = LOG_COMPARE(lsnp, &LSN(pagep));
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, NULL,
+ 0, &meta)) != 0)
goto err;
- meta_dirty = 0;
if (QAM_BEFORE_FIRST(meta, argp->recno)) {
+ REC_DIRTY(mpf, &meta);
meta->first_recno = argp->recno;
- meta_dirty = 1;
}
if (argp->recno == meta->cur_recno ||
- QAM_AFTER_CURRENT(meta, argp->recno)) {
+ QAM_AFTER_CURRENT(meta, argp->recno)) {
+ REC_DIRTY(mpf, &meta);
meta->cur_recno = argp->recno + 1;
- meta_dirty = 1;
}
- if ((ret = __memp_fput(mpf,
- meta, meta_dirty? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
/* Now update the actual page if necessary. */
if (op == DB_TXN_APPLY || cmp_n > 0) {
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
/* 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;
+ /*
+ * We only move the LSN forward during replication.
+ * During recovery we could obscure an update from
+ * a partially completed transaction while processing
+ * a hot backup. [#13823]
+ */
+ if (op == DB_TXN_APPLY)
+ LSN(pagep) = *lsnp;
}
} else if (DB_UNDO(op)) {
/*
@@ -546,6 +620,7 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
* Otherwise just clear the valid bit
*/
if (argp->olddata.size != 0) {
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
if ((ret = __qam_pitem(dbc, pagep,
argp->indx, argp->recno, &argp->olddata)) != 0)
goto err;
@@ -555,11 +630,10 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
file_dbp, pagep, argp->indx);
F_CLR(qp, QAM_VALID);
}
- modified = 1;
} else {
+ QAM_DIRTY(file_dbp, pagep->pgno, &pagep);
qp = QAM_GET_RECORD(file_dbp, pagep, argp->indx);
qp->flags = 0;
- modified = 1;
}
/*
@@ -570,12 +644,13 @@ __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 (cmp_n <= 0 &&
+ (op == DB_TXN_BACKWARD_ROLL || IS_IN_RESTORE(dbenv)))
LSN(pagep) = argp->lsn;
}
if ((ret = __qam_fput(file_dbp,
- argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ argp->pgno, pagep, 0)) != 0)
goto out;
done: *lsnp = argp->prev_lsn;
diff --git a/db/qam/qam_stat.c b/db/qam/qam_stat.c
index c5264bd01..067555a57 100644
--- a/db/qam/qam_stat.c
+++ b/db/qam/qam_stat.c
@@ -1,24 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_stat.c,v 11.47 2004/09/22 16:29:47 bostic Exp $
+ * $Id: qam_stat.c,v 12.8 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <ctype.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/lock.h"
#include "dbinc/mp.h"
@@ -70,10 +62,10 @@ __qam_stat(dbc, spp, flags)
/* Determine the last page of the database. */
if ((ret = __db_lget(dbc, 0, t->q_meta, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- if ((ret = __memp_fget(mpf, &t->q_meta, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &t->q_meta, dbc->txn, 0, &meta)) != 0)
goto err;
- if (flags == DB_FAST_STAT || flags == DB_CACHED_COUNTS) {
+ if (flags == DB_FAST_STAT) {
sp->qs_nkeys = meta->dbmeta.key_count;
sp->qs_ndata = meta->dbmeta.record_count;
goto meta_only;
@@ -102,7 +94,7 @@ begin:
if ((ret =
__db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- ret = __qam_fget(dbp, &pgno, 0, &h);
+ ret = __qam_fget(dbp, &pgno, dbc->txn, 0, &h);
if (ret == ENOENT) {
pgno += pg_ext - 1;
continue;
@@ -153,7 +145,8 @@ 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(mpf, &t->q_meta, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &t->q_meta, dbc->txn,
+ F_ISSET(dbp, DB_AM_RDONLY) ? 0 : DB_MPOOL_DIRTY, &meta)) != 0)
goto err;
if (!F_ISSET(dbp, DB_AM_RDONLY))
@@ -174,8 +167,7 @@ meta_only:
sp->qs_cur_recno = meta->cur_recno;
/* Discard the meta-data page. */
- ret = __memp_fput(mpf,
- meta, F_ISSET(dbp, DB_AM_RDONLY) ? 0 : DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, meta, 0);
if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
@@ -213,7 +205,7 @@ __qam_stat_print(dbc, flags)
dbp = dbc->dbp;
dbenv = dbp->dbenv;
- if ((ret = __qam_stat(dbc, &sp, 0)) != 0)
+ if ((ret = __qam_stat(dbc, &sp, LF_ISSET(DB_FAST_STAT))) != 0)
return (ret);
if (LF_ISSET(DB_STAT_ALL)) {
diff --git a/db/qam/qam_stub.c b/db/qam/qam_stub.c
index 1c22aaa52..7b02c8ef1 100644
--- a/db/qam/qam_stub.c
+++ b/db/qam/qam_stub.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_stub.c,v 1.12 2004/06/14 15:23:33 bostic Exp $
+ * $Id: qam_stub.c,v 12.5 2006/08/24 14:46:24 bostic Exp $
*/
-#include "db_config.h"
-
#ifndef HAVE_QUEUE
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
+#include "db_config.h"
#include "db_int.h"
#include "dbinc/db_page.h"
@@ -34,7 +30,7 @@ int
__db_no_queue_am(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"library build did not include support for the Queue access method");
return (DB_OPNOTSUP);
}
diff --git a/db/qam/qam_upgrade.c b/db/qam/qam_upgrade.c
index dff82404a..0c5777e25 100644
--- a/db/qam/qam_upgrade.c
+++ b/db/qam/qam_upgrade.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_upgrade.c,v 11.16 2004/05/10 21:29:43 bostic Exp $
+ * $Id: qam_upgrade.c,v 12.4 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_upgrade.h"
#include "dbinc/db_page.h"
diff --git a/db/qam/qam_verify.c b/db/qam/qam_verify.c
index 571157b8f..b6457ce70 100644
--- a/db/qam/qam_verify.c
+++ b/db/qam/qam_verify.c
@@ -1,29 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: qam_verify.c,v 1.51 2004/10/11 18:47:51 bostic Exp $
+ * $Id: qam_verify.c,v 12.9 2006/08/24 14:46:24 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#endif
-
#include "db_int.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 --
* Verify the queue-specific part of a metadata page.
@@ -93,6 +84,8 @@ __qam_vrfy_meta(dbp, vdp, meta, pgno, flags)
* it when handling extents. It would get set up in open,
* if we called open normally, but we don't.
*/
+ vdp->re_pad = meta->re_pad;
+ qp->re_pad = (int)meta->re_pad;
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;
@@ -165,7 +158,7 @@ __qam_vrfy_meta(dbp, vdp, meta, pgno, flags)
}
}
if (nextents > 0)
- __db_err(dbenv,
+ __db_errx(dbenv,
"Warning: %d extra extent files found", nextents);
vdp->nextents = nextents;
vdp->extents = extents;
@@ -344,7 +337,7 @@ begin: for (; i <= stop; i++) {
*/
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 = __qam_fget(dbp, &i, NULL, 0, &h)) != 0) {
if (t_ret == ENOENT || t_ret == DB_PAGE_NOTFOUND) {
i += (pg_ext - ((i - 1) % pg_ext)) - 1;
continue;
diff --git a/db/rep/rep.src b/db/rep/rep.src
index ffabca3fa..f80c39dd3 100644
--- a/db/rep/rep.src
+++ b/db/rep/rep.src
@@ -1,23 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep.src,v 1.5 2004/09/22 18:01:04 bostic Exp $
+ * $Id: rep.src,v 12.9 2006/08/24 14:46:25 bostic Exp $
*/
PREFIX __rep
DBPRIVATE
-INCLUDE #ifndef NO_SYSTEM_INCLUDES
-INCLUDE #include <stdlib.h>
-INCLUDE #include <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/db_page.h"
-INCLUDE #include "dbinc/db_shash.h"
INCLUDE #include "dbinc/db_am.h"
INCLUDE #include "dbinc/log.h"
INCLUDE #include "dbinc/mp.h"
@@ -27,19 +21,20 @@ INCLUDE
/*
* update - send update information
*/
-BEGIN_BUF update
+BEGIN_BUF update 42
POINTER first_lsn DB_LSN * lu
-ARG num_files int d
+ARG first_vers u_int32_t lu
+ARG num_files u_int32_t lu
END
/*
* file info
*/
-BEGIN_BUF fileinfo
-ARG pgsize size_t lu
+BEGIN_BUF fileinfo 42
+ARG pgsize u_int32_t lu
ARG pgno db_pgno_t lu
ARG max_pgno db_pgno_t lu
-ARG filenum int d
+ARG filenum u_int32_t lu
ARG id int32_t d
ARG type u_int32_t lu
ARG flags u_int32_t lu
diff --git a/db/rep/rep_auto.c b/db/rep/rep_auto.c
index 75a9d5a34..7ee4dfdc1 100644
--- a/db/rep/rep_auto.c
+++ b/db/rep/rep_auto.c
@@ -2,14 +2,8 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <stdlib.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/log.h"
#include "dbinc/mp.h"
@@ -17,15 +11,16 @@
/*
* PUBLIC: int __rep_update_buf __P((u_int8_t *, size_t, size_t *,
- * PUBLIC: DB_LSN *, int));
+ * PUBLIC: DB_LSN *, u_int32_t, u_int32_t));
*/
int
__rep_update_buf(buf, max, lenp,
- first_lsn, num_files)
+ first_lsn, first_vers, num_files)
u_int8_t *buf;
size_t max, *lenp;
DB_LSN * first_lsn;
- int num_files;
+ u_int32_t first_vers;
+ u_int32_t num_files;
{
u_int32_t uinttmp;
u_int8_t *endbuf;
@@ -45,6 +40,12 @@ __rep_update_buf(buf, max, lenp,
memset(bp, 0, sizeof(*first_lsn));
bp += sizeof(*first_lsn);
+ uinttmp = (u_int32_t)first_vers;
+ if (bp + sizeof(uinttmp) > endbuf)
+ return (ENOMEM);
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
uinttmp = (u_int32_t)num_files;
if (bp + sizeof(uinttmp) > endbuf)
return (ENOMEM);
@@ -80,7 +81,11 @@ __rep_update_read(dbenv, recbuf, nextp, argpp)
bp += sizeof(argp->first_lsn);
memcpy(&uinttmp, bp, sizeof(uinttmp));
- argp->num_files = (int)uinttmp;
+ argp->first_vers = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->num_files = (u_int32_t)uinttmp;
bp += sizeof(uinttmp);
*nextp = bp;
@@ -90,7 +95,7 @@ __rep_update_read(dbenv, recbuf, nextp, argpp)
/*
* PUBLIC: int __rep_fileinfo_buf __P((u_int8_t *, size_t, size_t *,
- * PUBLIC: size_t, db_pgno_t, db_pgno_t, int, int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, db_pgno_t, db_pgno_t, u_int32_t, int32_t, u_int32_t,
* PUBLIC: u_int32_t, const DBT *, const DBT *));
*/
int
@@ -99,10 +104,10 @@ __rep_fileinfo_buf(buf, max, lenp,
flags, uid, info)
u_int8_t *buf;
size_t max, *lenp;
- size_t pgsize;
+ u_int32_t pgsize;
db_pgno_t pgno;
db_pgno_t max_pgno;
- int filenum;
+ u_int32_t filenum;
int32_t id;
u_int32_t type;
u_int32_t flags;
@@ -222,7 +227,7 @@ __rep_fileinfo_read(dbenv, recbuf, nextp, argpp)
return (ret);
bp = recbuf;
memcpy(&uinttmp, bp, sizeof(uinttmp));
- argp->pgsize = (size_t)uinttmp;
+ argp->pgsize = (u_int32_t)uinttmp;
bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
@@ -234,7 +239,7 @@ __rep_fileinfo_read(dbenv, recbuf, nextp, argpp)
bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
- argp->filenum = (int)uinttmp;
+ argp->filenum = (u_int32_t)uinttmp;
bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
diff --git a/db/rep/rep_autop.c b/db/rep/rep_autop.c
index 64cb10bea..15276c3f8 100644
--- a/db/rep/rep_autop.c
+++ b/db/rep/rep_autop.c
@@ -2,14 +2,8 @@
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <stdlib.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/log.h"
#include "dbinc/mp.h"
diff --git a/db/rep/rep_backup.c b/db/rep/rep_backup.c
index 64c538fb5..506dd4467 100644
--- a/db/rep/rep_backup.c
+++ b/db/rep/rep_backup.c
@@ -1,57 +1,43 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep_backup.c,v 1.33 2004/10/29 18:08:09 bostic Exp $
+ * $Id: rep_backup.c,v 12.75 2006/09/19 14:14:09 mjc Exp $
*/
#include "db_config.h"
-#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/db_page.h"
-#include "dbinc/db_shash.h"
#include "dbinc/db_am.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 __rep_check_uid __P(( DB_ENV *, u_int8_t *, u_int8_t *, u_int8_t *));
static int __rep_filedone __P((DB_ENV *, int, REP *, __rep_fileinfo_args *,
u_int32_t));
-static int __rep_files_data __P((DB_ENV *, u_int8_t *, size_t *,
- size_t *, int *));
-static int __rep_files_inmem __P((DB_ENV *, u_int8_t *, size_t *,
- size_t *, int *));
+static int __rep_find_dbs __P((DB_ENV *, u_int8_t **, size_t *,
+ size_t *, u_int32_t *, int));
static int __rep_get_fileinfo __P((DB_ENV *, const char *,
- __rep_fileinfo_args *, u_int8_t *, int *));
+ const char *, __rep_fileinfo_args *, u_int8_t *, u_int32_t *));
static int __rep_log_setup __P((DB_ENV *, REP *));
static int __rep_mpf_open __P((DB_ENV *, DB_MPOOLFILE **,
- __rep_fileinfo_args *));
+ __rep_fileinfo_args *, u_int32_t));
static int __rep_page_gap __P((DB_ENV *, REP *, __rep_fileinfo_args *,
u_int32_t));
static int __rep_page_sendpages __P((DB_ENV *, int,
__rep_fileinfo_args *, DB_MPOOLFILE *, DB *));
static int __rep_queue_filedone __P((DB_ENV *, REP *, __rep_fileinfo_args *));
-static int __rep_walk_dir __P((DB_ENV *, const char *, u_int8_t *,
- size_t *, size_t *, int *));
+static int __rep_remove_dbs __P((DB_ENV *));
+static int __rep_remove_logs __P((DB_ENV *));
+static int __rep_walk_dir __P((DB_ENV *, const char *, u_int8_t **, u_int8_t *,
+ size_t *, size_t *, u_int32_t *, int));
static int __rep_write_page __P((DB_ENV *, REP *, __rep_fileinfo_args *));
/*
@@ -65,14 +51,14 @@ __rep_update_req(dbenv, eid)
DB_ENV *dbenv;
int eid;
{
- DBT updbt;
+ DBT updbt, vdbt;
DB_LOG *dblp;
DB_LOGC *logc;
DB_LSN lsn;
- DBT data_dbt;
size_t filelen, filesz, updlen;
+ u_int32_t filecnt, version;
u_int8_t *buf, *fp;
- int filecnt, ret, t_ret;
+ int ret, t_ret;
/*
* Allocate enough for all currently open files and then some.
@@ -87,6 +73,7 @@ __rep_update_req(dbenv, eid)
* ...
*/
dblp = dbenv->lg_handle;
+ logc = NULL;
filecnt = 0;
filelen = 0;
updlen = 0;
@@ -99,120 +86,163 @@ __rep_update_req(dbenv, eid)
* then get on-disk files.
*/
fp = buf + sizeof(__rep_update_args);
- if ((ret = __rep_files_inmem(dbenv, fp, &filesz, &filelen,
- &filecnt)) != 0)
+ if ((ret = __rep_find_dbs(
+ dbenv, &fp, &filesz, &filelen, &filecnt, 0)) != 0)
goto err;
- if ((ret = __rep_files_data(dbenv, fp, &filesz, &filelen,
- &filecnt)) != 0)
+
+ /*
+ * Now get our first LSN. We send the lsn of the first
+ * non-archivable log file.
+ */
+ if ((ret = __log_get_stable_lsn(dbenv, &lsn)) != 0)
goto err;
/*
- * Now get our first LSN.
+ * Now get the version number of the log file of that LSN.
*/
if ((ret = __log_cursor(dbenv, &logc)) != 0)
goto err;
- memset(&data_dbt, 0, sizeof(data_dbt));
- ret = __log_c_get(logc, &lsn, &data_dbt, DB_FIRST);
- if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
- ret = t_ret;
- if (ret != 0)
+
+ memset(&vdbt, 0, sizeof(vdbt));
+ /*
+ * Set our log cursor on the LSN we are sending.
+ */
+ if ((ret = __log_c_get(logc, &lsn, &vdbt, DB_SET)) != 0)
goto err;
+ if ((ret = __log_c_version(logc, &version)) != 0)
+ goto err;
/*
* Package up the update information.
*/
- if ((ret = __rep_update_buf(buf, filesz, &updlen, &lsn, filecnt)) != 0)
+ if ((ret = __rep_update_buf(buf, filesz, &updlen,
+ &lsn, version, filecnt)) != 0)
goto err;
/*
* We have all the file information now. Send it to the client.
*/
- memset(&updbt, 0, sizeof(updbt));
- updbt.data = buf;
- updbt.size = (u_int32_t)(filelen + updlen);
- R_LOCK(dbenv, &dblp->reginfo);
+ DB_INIT_DBT(updbt, buf, filelen + updlen);
+
+ LOG_SYSTEM_LOCK(dbenv);
lsn = ((LOG *)dblp->reginfo.primary)->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- (void)__rep_send_message(dbenv, eid, REP_UPDATE, &lsn, &updbt, 0);
+ LOG_SYSTEM_UNLOCK(dbenv);
+ (void)__rep_send_message(
+ dbenv, eid, REP_UPDATE, &lsn, &updbt, 0, 0);
-err:
- __os_free(dbenv, buf);
+err: __os_free(dbenv, buf);
+ if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
/*
- * __rep_files_data -
- * Walk through all the files in the env's data_dirs. We need to
- * open them, gather the necessary information and then close them.
- * Then we need to figure out if they're already in the dbentry array.
+ * __rep_find_dbs -
+ * Walk through all the named files/databases including those in the
+ * environment or data_dirs and those that in named and in-memory. We
+ * need to open them, gather the necessary information and then close
+ * them. Then we need to figure out if they're already in the dbentry
+ * array.
*/
static int
-__rep_files_data(dbenv, fp, fileszp, filelenp, filecntp)
+__rep_find_dbs(dbenv, fp, fileszp, filelenp, filecntp, do_remove)
DB_ENV *dbenv;
- u_int8_t *fp;
+ u_int8_t **fp;
size_t *fileszp, *filelenp;
- int *filecntp;
+ u_int32_t *filecntp;
+ int do_remove;
{
int ret;
- char **ddir;
+ char **ddir, *real_dir;
+ u_int8_t *origfp;
ret = 0;
+ real_dir = NULL;
if (dbenv->db_data_dir == NULL) {
/*
* If we don't have a data dir, we have just the
* env home dir.
*/
- ret = __rep_walk_dir(dbenv, dbenv->db_home, fp,
- fileszp, filelenp, filecntp);
+ ret = __rep_walk_dir(dbenv, dbenv->db_home, fp, NULL,
+ fileszp, filelenp, filecntp, do_remove);
} else {
- for (ddir = dbenv->db_data_dir; *ddir != NULL; ++ddir)
- if ((ret = __rep_walk_dir(dbenv, *ddir, fp,
- fileszp, filelenp, filecntp)) != 0)
+ if (fp != NULL)
+ origfp = *fp;
+ else
+ origfp = NULL;
+ for (ddir = dbenv->db_data_dir; *ddir != NULL; ++ddir) {
+ if ((ret = __db_appname(dbenv, DB_APP_NONE,
+ *ddir, 0, NULL, &real_dir)) != 0)
+ break;
+ if ((ret = __rep_walk_dir(dbenv, real_dir, fp, origfp,
+ fileszp, filelenp, filecntp, do_remove)) != 0)
break;
+ __os_free(dbenv, real_dir);
+ real_dir = NULL;
+ }
}
+
+ /* Now, collect any in-memory named databases. */
+ if (ret == 0 && do_remove == 0)
+ ret = __rep_walk_dir(dbenv, NULL,
+ fp, NULL, fileszp, filelenp, filecntp, do_remove);
+
+ if (real_dir != NULL)
+ __os_free(dbenv, real_dir);
return (ret);
}
+/*
+ * __rep_walk_dir --
+ *
+ * This is the routine that walks a directory and fills in the structures
+ * that we use to generate messages to the client telling it what files
+ * files are available. If the directory name is NULL, then we should
+ * walk the list of in-memory named files.
+ */
static int
-__rep_walk_dir(dbenv, dir, fp, fileszp, filelenp, filecntp)
+__rep_walk_dir(dbenv, dir, fp, origfp, fileszp, filelenp, filecntp, do_remove)
DB_ENV *dbenv;
const char *dir;
- u_int8_t *fp;
+ u_int8_t **fp, *origfp;
size_t *fileszp, *filelenp;
- int *filecntp;
+ u_int32_t *filecntp;
+ int do_remove;
{
DBT namedbt, uiddbt;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
__rep_fileinfo_args tmpfp;
size_t len, offset;
- int cnt, i, ret;
+ int cnt, first_file, i, ret;
u_int8_t *rfp, uid[DB_FILE_ID_LEN];
- char **names;
-#ifdef DIAGNOSTIC
- REP *rep;
- DB_MSGBUF mb;
- DB_REP *db_rep;
+ char *file, **names, *subdb;
- db_rep = dbenv->rep_handle;
- rep = db_rep->region;
-#endif
memset(&namedbt, 0, sizeof(namedbt));
memset(&uiddbt, 0, sizeof(uiddbt));
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Walk_dir: Getting info for dir: %s", dir));
- if ((ret = __os_dirlist(dbenv, dir, &names, &cnt)) != 0)
- return (ret);
- rfp = fp;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ if (dir == NULL) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Walk_dir: Getting info for in-memory named files"));
+ if ((ret = __memp_inmemlist(dbenv, &names, &cnt)) != 0)
+ return (ret);
+ } else {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Walk_dir: Getting info for dir: %s", dir));
+ if ((ret = __os_dirlist(dbenv, dir, &names, &cnt)) != 0)
+ return (ret);
+ }
+ rfp = NULL;
+ if (fp != NULL)
+ rfp = *fp;
+ RPRINT(dbenv, (dbenv, &mb,
"Walk_dir: Dir %s has %d files", dir, cnt));
+ first_file = 1;
for (i = 0; i < cnt; i++) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Walk_dir: File %d name: %s", i, names[i]));
/*
- * Skip DB-owned files: ., .., __db*, DB_CONFIG, log*
+ * Skip DB-owned files: __db*, DB_CONFIG, log*
*/
- if (strcmp(names[i], ".") == 0)
- continue;
- if (strcmp(names[i], "..") == 0)
- continue;
if (strncmp(names[i], "__db", 4) == 0)
continue;
if (strncmp(names[i], "DB_CONFIG", 9) == 0)
@@ -223,42 +253,115 @@ __rep_walk_dir(dbenv, dir, fp, fileszp, filelenp, filecntp)
* We found a file to process. Check if we need
* to allocate more space.
*/
- if ((ret = __rep_get_fileinfo(dbenv, names[i], &tmpfp, uid,
- filecntp)) != 0) {
+ if (dir == NULL) {
+ file = NULL;
+ subdb = names[i];
+ } else {
+ file = names[i];
+ subdb = NULL;
+ }
+ if ((ret = __rep_get_fileinfo(dbenv,
+ file, subdb, &tmpfp, uid, filecntp)) != 0) {
/*
* If we find a file that isn't a database, skip it.
*/
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Walk_dir: File %d %s: returned error %s",
i, names[i], db_strerror(ret)));
ret = 0;
continue;
}
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Walk_dir: File %d (of %d) %s: pgsize %lu, max_pgno %lu",
- tmpfp.filenum, i, names[i],
+ if (do_remove) {
+ /*
+ * Calling __fop_remove will both purge any matching
+ * fileid from mpool and unlink it on disk.
+ */
+#ifdef HAVE_QUEUE
+ /*
+ * Handle queue separately. __fop_remove will not
+ * remove extent files. Use __qam_remove to remove
+ * extent files that might exist under this name.
+ */
+ if (tmpfp.type == (u_int32_t)DB_QUEUE) {
+ DB *dummydbp;
+ if ((ret = db_create(&dummydbp, dbenv, 0))
+ != 0)
+ goto err;
+ RPRINT(dbenv, (dbenv, &mb,
+ "Walk_dir: QAM: Unlink %s via __qam_remove", names[i]));
+ if ((ret = __qam_remove(dummydbp, NULL,
+ names[i], NULL)) != 0) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Walk_dir: qam_remove returned %d",
+ ret));
+ goto err;
+ }
+ if ((ret = __db_close(dummydbp, NULL,
+ DB_NOSYNC)) != 0)
+ goto err;
+ }
+#endif
+ /*
+ * We call fop_remove even if we've called qam_remove.
+ * That will only have removed extent files. Now
+ * we need to deal with the actual file itself.
+ */
+ if ((ret = __fop_remove(dbenv, NULL, uid,
+ names[i], DB_APP_DATA, 0)) != 0)
+ goto err;
+ continue;
+ }
+ /*
+ * Only do this if we're not removing.
+ */
+ RPRINT(dbenv, (dbenv, &mb,
+ "Walk_dir: File %d (of %d) %s at 0x%lx: pgsize %lu, max_pgno %lu",
+ tmpfp.filenum, *filecntp, names[i], P_TO_ULONG(rfp),
(u_long)tmpfp.pgsize, (u_long)tmpfp.max_pgno));
- namedbt.data = names[i];
- namedbt.size = (u_int32_t)strlen(names[i]) + 1;
+ DB_SET_DBT(namedbt, names[i], strlen(names[i]) + 1);
uiddbt.data = uid;
uiddbt.size = DB_FILE_ID_LEN;
+ /*
+ * Check if we already have info on this file. Since we're
+ * walking directories, we only need to check the first
+ * file to discover if we have a duplicate data_dir.
+ */
+ if (first_file && origfp != NULL) {
+ /*
+ * If we have any file info, check if we have this uid.
+ */
+ if (rfp != origfp &&
+ (ret = __rep_check_uid(dbenv, origfp,
+ origfp + *filelenp, uid)) != 0) {
+ /*
+ * If we have this uid. Adjust the file
+ * count and stop processing this dir.
+ */
+ if (ret == DB_KEYEXIST) {
+ ret = 0;
+ (*filecntp)--;
+ }
+ goto err;
+ }
+ first_file = 0;
+ }
retry:
ret = __rep_fileinfo_buf(rfp, *fileszp, &len,
tmpfp.pgsize, tmpfp.pgno, tmpfp.max_pgno,
tmpfp.filenum, tmpfp.id, tmpfp.type,
tmpfp.flags, &uiddbt, &namedbt);
if (ret == ENOMEM) {
- offset = (size_t)(rfp - fp);
+ offset = (size_t)(rfp - *fp);
*fileszp *= 2;
/*
* Need to account for update info on both sides
* of the allocation.
*/
- fp -= sizeof(__rep_update_args);
- if ((ret = __os_realloc(dbenv, *fileszp, fp)) != 0)
+ *fp -= sizeof(__rep_update_args);
+ if ((ret = __os_realloc(dbenv, *fileszp, *fp)) != 0)
break;
- fp += sizeof(__rep_update_args);
- rfp = fp + offset;
+ *fp += sizeof(__rep_update_args);
+ rfp = *fp + offset;
/*
* Now that we've reallocated the space, try to
* store it again.
@@ -266,21 +369,68 @@ retry:
goto retry;
}
rfp += len;
+ *fp = rfp;
*filelenp += len;
}
+err:
__os_dirfree(dbenv, names, cnt);
return (ret);
}
+/*
+ * This function is called when we process the first file of any
+ * new directory for internal init. We walk the list of current
+ * files to see if we have already processed these files. This
+ * is to prevent transmitting the same file multiple times if the
+ * user calls dbenv->set_data_dir on the same directory more than once.
+ */
static int
-__rep_get_fileinfo(dbenv, file, rfp, uid, filecntp)
+__rep_check_uid(dbenv, fp, endfp, uid)
DB_ENV *dbenv;
- const char *file;
+ u_int8_t *fp, *endfp, *uid;
+{
+ __rep_fileinfo_args *rfp;
+ u_int8_t *fuid;
+ int ret;
+ void *next;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ ret = 0;
+ next = fp;
+ rfp = NULL;
+ while (next <= (void *)endfp) {
+ if ((ret =
+ __rep_fileinfo_read(dbenv, next, &next, &rfp)) != 0) {
+ __db_errx(dbenv, "Rep_check_uid: Could not malloc");
+ goto err;
+ }
+ fuid = (u_int8_t *)rfp->uid.data;
+ if (memcmp(fuid, uid, DB_FILE_ID_LEN) == 0) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Check_uid: Found matching file."));
+ ret = DB_KEYEXIST;
+ goto err;
+ }
+ __os_free(dbenv, rfp);
+ rfp = NULL;
+ }
+err:
+ if (rfp != NULL)
+ __os_free(dbenv, rfp);
+ return (ret);
+
+}
+
+static int
+__rep_get_fileinfo(dbenv, file, subdb, rfp, uid, filecntp)
+ DB_ENV *dbenv;
+ const char *file, *subdb;
__rep_fileinfo_args *rfp;
u_int8_t *uid;
- int *filecntp;
+ u_int32_t *filecntp;
{
-
DB *dbp, *entdbp;
DB_LOCK lk;
DB_LOG *dblp;
@@ -296,10 +446,9 @@ __rep_get_fileinfo(dbenv, file, rfp, uid, filecntp)
mpf = NULL;
LOCK_INIT(lk);
- dblp = dbenv->lg_handle;
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
goto err;
- if ((ret = __db_open(dbp, NULL, file, NULL, DB_UNKNOWN,
+ if ((ret = __db_open(dbp, NULL, file, subdb, DB_UNKNOWN,
DB_RDONLY | (F_ISSET(dbenv, DB_ENV_THREAD) ? DB_THREAD : 0),
0, PGNO_BASE_MD)) != 0)
goto err;
@@ -309,7 +458,8 @@ __rep_get_fileinfo(dbenv, file, rfp, uid, filecntp)
if ((ret = __db_lget(
dbc, 0, dbp->meta_pgno, DB_LOCK_READ, 0, &lk)) != 0)
goto err;
- if ((ret = __memp_fget(dbp->mpf, &dbp->meta_pgno, 0, &pagep)) != 0)
+ if ((ret = __memp_fget(dbp->mpf, &dbp->meta_pgno, dbc->txn,
+ 0, &pagep)) != 0)
goto err;
/*
* We have the meta page. Set up our information.
@@ -327,7 +477,7 @@ __rep_get_fileinfo(dbenv, file, rfp, uid, filecntp)
rfp->pgsize = dbp->pgsize;
memcpy(uid, dbp->fileid, DB_FILE_ID_LEN);
rfp->filenum = (*filecntp)++;
- rfp->type = dbp->type;
+ rfp->type = (u_int32_t)dbp->type;
rfp->flags = dbp->flags;
rfp->id = DB_LOGFILEID_INVALID;
ret = __memp_fput(dbp->mpf, pagep, 0);
@@ -352,50 +502,28 @@ err:
* is useless in that case.
*/
if (ret == 0) {
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+ LOG_SYSTEM_LOCK(dbenv);
/*
* Walk entry table looking for this uid.
* If we find it, save the id.
*/
- for (i = 0; i < dblp->dbentry_cnt; i++) {
+ for (dblp = dbenv->lg_handle,
+ i = 0; i < dblp->dbentry_cnt; i++) {
entdbp = dblp->dbentry[i].dbp;
if (entdbp == NULL)
break;
- DB_ASSERT(entdbp->log_filename != NULL);
+ DB_ASSERT(dbenv, entdbp->log_filename != NULL);
if (memcmp(uid,
entdbp->log_filename->ufid,
DB_FILE_ID_LEN) == 0)
rfp->id = i;
}
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ LOG_SYSTEM_UNLOCK(dbenv);
}
return (ret);
}
/*
- * __rep_files_inmem -
- * Gather all the information about in-memory files.
- */
-static int
-__rep_files_inmem(dbenv, fp, fileszp, filelenp, filecntp)
- DB_ENV *dbenv;
- u_int8_t *fp;
- size_t *fileszp, *filelenp;
- int *filecntp;
-{
-
- int ret;
-
- COMPQUIET(dbenv, NULL);
- COMPQUIET(fp, NULL);
- COMPQUIET(fileszp, NULL);
- COMPQUIET(filelenp, NULL);
- COMPQUIET(filecntp, NULL);
- ret = 0;
- return (ret);
-}
-
-/*
* __rep_page_req
* Process a page_req and send the page information to the client.
*
@@ -407,40 +535,41 @@ __rep_page_req(dbenv, eid, rec)
int eid;
DBT *rec;
{
+ __rep_fileinfo_args *msgfp;
DB *dbp;
DBT msgdbt;
DB_LOG *dblp;
DB_MPOOLFILE *mpf;
- __rep_fileinfo_args *msgfp;
+ DB_REP *db_rep;
+ REP *rep;
int ret, t_ret;
void *next;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
- DB_REP *db_rep;
- REP *rep;
+#endif
db_rep = dbenv->rep_handle;
rep = db_rep->region;
-#endif
dblp = dbenv->lg_handle;
+
if ((ret = __rep_fileinfo_read(dbenv, rec->data, &next, &msgfp)) != 0)
return (ret);
+
/*
- * See if we can find it already. If so we can quickly
- * access its mpool and process. Otherwise we have to
- * open the file ourselves.
+ * See if we can find it already. If so we can quickly access its
+ * mpool and process. Otherwise we have to open the file ourselves.
*/
- RPRINT(dbenv, rep, (dbenv, &mb, "page_req: file %d page %lu to %lu",
+ RPRINT(dbenv, (dbenv, &mb, "page_req: file %d page %lu to %lu",
msgfp->filenum, (u_long)msgfp->pgno, (u_long)msgfp->max_pgno));
- MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
+ LOG_SYSTEM_LOCK(dbenv);
if (msgfp->id >= 0 && dblp->dbentry_cnt > msgfp->id) {
dbp = dblp->dbentry[msgfp->id].dbp;
if (dbp != NULL) {
- DB_ASSERT(dbp->log_filename != NULL);
+ DB_ASSERT(dbenv, dbp->log_filename != NULL);
if (memcmp(msgfp->uid.data, dbp->log_filename->ufid,
DB_FILE_ID_LEN) == 0) {
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
- RPRINT(dbenv, rep, (dbenv, &mb,
+ LOG_SYSTEM_UNLOCK(dbenv);
+ RPRINT(dbenv, (dbenv, &mb,
"page_req: found %d in dbreg",
msgfp->filenum));
ret = __rep_page_sendpages(dbenv, eid,
@@ -449,23 +578,26 @@ __rep_page_req(dbenv, eid, rec)
}
}
}
- MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
+ LOG_SYSTEM_UNLOCK(dbenv);
/*
* If we get here, we do not have the file open via dbreg.
* We need to open the file and then send its pages.
* If we cannot open the file, we send REP_FILE_FAIL.
*/
- RPRINT(dbenv, rep, (dbenv, &mb, "page_req: Open %d via mpf_open",
+ RPRINT(dbenv, (dbenv, &mb, "page_req: Open %d via mpf_open",
msgfp->filenum));
- if ((ret = __rep_mpf_open(dbenv, &mpf, msgfp)) != 0) {
+ if ((ret = __rep_mpf_open(dbenv, &mpf, msgfp, 0)) != 0) {
memset(&msgdbt, 0, sizeof(msgdbt));
msgdbt.data = msgfp;
msgdbt.size = sizeof(*msgfp);
- RPRINT(dbenv, rep, (dbenv, &mb, "page_req: Open %d failed",
+ RPRINT(dbenv, (dbenv, &mb, "page_req: Open %d failed",
msgfp->filenum));
- (void)__rep_send_message(dbenv, eid, REP_FILE_FAIL,
- NULL, &msgdbt, 0);
+ if (F_ISSET(rep, REP_F_MASTER))
+ (void)__rep_send_message(dbenv, eid, REP_FILE_FAIL,
+ NULL, &msgdbt, 0, 0);
+ else
+ ret = DB_NOTFOUND;
goto err;
}
@@ -487,39 +619,49 @@ __rep_page_sendpages(dbenv, eid, msgfp, mpf, dbp)
DB *dbp;
{
DB *qdbp;
- DBT msgdbt, pgdbt;
+ DBT lockdbt, msgdbt, pgdbt;
+ DB_LOCK lock;
+ DB_LOCK_ILOCK lock_obj;
DB_LOG *dblp;
DB_LSN lsn;
- DB_MSGBUF mb;
DB_REP *db_rep;
PAGE *pagep;
REP *rep;
+ REP_BULK bulk;
+ REP_THROTTLE repth;
db_pgno_t p;
+ uintptr_t bulkoff;
size_t len, msgsz;
- u_int32_t bytes, gbytes, type;
- int check_limit, opened, ret, t_ret;
+ u_int32_t bulkflags, lockid, use_bulk;
+ int opened, ret, t_ret;
u_int8_t *buf;
-
-#ifndef DIAGNOSTIC
- DB_MSGBUF_INIT(&mb);
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
#endif
+
db_rep = dbenv->rep_handle;
rep = db_rep->region;
+ lockid = DB_LOCK_INVALIDID;
opened = 0;
- gbytes = bytes = 0;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- gbytes = rep->gbytes;
- bytes = rep->bytes;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- check_limit = gbytes != 0 || bytes != 0;
qdbp = NULL;
buf = NULL;
- if (msgfp->type == DB_QUEUE) {
+ bulk.addr = NULL;
+ use_bulk = FLD_ISSET(rep->config, REP_C_BULK);
+ if (msgfp->type == (u_int32_t)DB_QUEUE) {
if (dbp == NULL) {
if ((ret = db_create(&qdbp, dbenv, 0)) != 0)
goto err;
- if ((ret = __db_open(qdbp, NULL, msgfp->info.data,
- NULL, DB_UNKNOWN,
+ /*
+ * We need to check whether this is in-memory so that
+ * we pass the name correctly as either the file or
+ * the database name.
+ */
+ if ((ret = __db_open(qdbp, NULL,
+ FLD_ISSET(msgfp->flags, DB_AM_INMEM) ?
+ NULL : msgfp->info.data,
+ FLD_ISSET(msgfp->flags, DB_AM_INMEM) ?
+ msgfp->info.data : NULL,
+ DB_UNKNOWN,
DB_RDONLY | (F_ISSET(dbenv, DB_ENV_THREAD) ?
DB_THREAD : 0), 0, PGNO_BASE_MD)) != 0)
goto err;
@@ -529,111 +671,167 @@ __rep_page_sendpages(dbenv, eid, msgfp, mpf, dbp)
}
msgsz = sizeof(__rep_fileinfo_args) + DB_FILE_ID_LEN + msgfp->pgsize;
if ((ret = __os_calloc(dbenv, 1, msgsz, &buf)) != 0)
- return (ret);
+ goto err;
memset(&msgdbt, 0, sizeof(msgdbt));
memset(&pgdbt, 0, sizeof(pgdbt));
- RPRINT(dbenv, rep, (dbenv, &mb, "sendpages: file %d page %lu to %lu",
+ RPRINT(dbenv, (dbenv, &mb, "sendpages: file %d page %lu to %lu",
msgfp->filenum, (u_long)msgfp->pgno, (u_long)msgfp->max_pgno));
+ memset(&repth, 0, sizeof(repth));
+ /*
+ * If we're doing bulk transfer, allocate a bulk buffer to put our
+ * pages in. We still need to initialize the throttle info
+ * because if we encounter a page larger than our entire bulk
+ * buffer, we need to send it as a singleton.
+ *
+ * Use a local var so that we don't need to worry if someone else
+ * turns on/off bulk in the middle of our call here.
+ */
+ if (use_bulk && (ret = __rep_bulk_alloc(dbenv, &bulk, eid,
+ &bulkoff, &bulkflags, REP_BULK_PAGE)) != 0)
+ goto err;
+ REP_SYSTEM_LOCK(dbenv);
+ repth.gbytes = rep->gbytes;
+ repth.bytes = rep->bytes;
+ repth.type = REP_PAGE;
+ repth.data_dbt = &msgdbt;
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ /*
+ * Set up locking.
+ */
+ LOCK_INIT(lock);
+ memset(&lock_obj, 0, sizeof(lock_obj));
+ if ((ret = __lock_id(dbenv, &lockid, NULL)) != 0)
+ goto err;
+ memcpy(lock_obj.fileid, mpf->fileid, DB_FILE_ID_LEN);
+ lock_obj.type = DB_PAGE_LOCK;
+
+ memset(&lockdbt, 0, sizeof(lockdbt));
+ lockdbt.data = &lock_obj;
+ lockdbt.size = sizeof(lock_obj);
+
for (p = msgfp->pgno; p <= msgfp->max_pgno; p++) {
- if (msgfp->type == DB_QUEUE && p != 0)
+ /*
+ * We're not waiting for the lock, if we cannot get
+ * the lock for this page, skip it. The gap
+ * code will rerequest it.
+ */
+ lock_obj.pgno = p;
+ if ((ret = __lock_get(dbenv, lockid, DB_LOCK_NOWAIT, &lockdbt,
+ DB_LOCK_READ, &lock)) != 0) {
+ /*
+ * Continue if we couldn't get the lock.
+ */
+ if (ret == DB_LOCK_NOTGRANTED)
+ continue;
+ /*
+ * Otherwise we have an error.
+ */
+ goto err;
+ }
+ if (msgfp->type == (u_int32_t)DB_QUEUE && p != 0)
#ifdef HAVE_QUEUE
- ret = __qam_fget(qdbp, &p, DB_MPOOL_CREATE, &pagep);
+ ret = __qam_fget(qdbp, &p, NULL,
+ DB_MPOOL_CREATE, &pagep);
#else
ret = DB_PAGE_NOTFOUND;
#endif
else
- ret = __memp_fget(mpf, &p, DB_MPOOL_CREATE, &pagep);
- type = REP_PAGE;
+ ret = __memp_fget(mpf, &p, NULL,
+ DB_MPOOL_CREATE, &pagep);
if (ret == DB_PAGE_NOTFOUND) {
memset(&pgdbt, 0, sizeof(pgdbt));
- ret = 0;
ZERO_LSN(lsn);
- RPRINT(dbenv, rep, (dbenv, &mb,
- "sendpages: PAGE_FAIL on page %lu", (u_long)p));
- type = REP_PAGE_FAIL;
msgfp->pgno = p;
- goto send;
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ ret = 0;
+ RPRINT(dbenv, (dbenv, &mb,
+ "sendpages: PAGE_FAIL on page %lu",
+ (u_long)p));
+ (void)__rep_send_message(dbenv, eid,
+ REP_PAGE_FAIL, &lsn, &msgdbt, 0, 0);
+ } else
+ ret = DB_NOTFOUND;
+ goto lockerr;
} else if (ret != 0)
- goto err;
- else {
- pgdbt.data = pagep;
- pgdbt.size = (u_int32_t)msgfp->pgsize;
- }
+ goto lockerr;
+ else
+ DB_SET_DBT(pgdbt, pagep, msgfp->pgsize);
len = 0;
+ RPRINT(dbenv, (dbenv, &mb,
+ "sendpages: %lu, page lsn [%lu][%lu]", (u_long)p,
+ (u_long)pagep->lsn.file, (u_long)pagep->lsn.offset));
ret = __rep_fileinfo_buf(buf, msgsz, &len,
msgfp->pgsize, p, msgfp->max_pgno,
msgfp->filenum, msgfp->id, msgfp->type,
msgfp->flags, &msgfp->uid, &pgdbt);
+ if (msgfp->type != (u_int32_t)DB_QUEUE || p == 0)
+ t_ret = __memp_fput(mpf, pagep, 0);
+#ifdef HAVE_QUEUE
+ else
+ /*
+ * We don't need an #else for HAVE_QUEUE here because if
+ * we're not compiled with queue, then we're guaranteed
+ * to have set REP_PAGE_FAIL above.
+ */
+ t_ret = __qam_fput(qdbp, p, pagep, 0);
+#endif
+ if ((t_ret = __ENV_LPUT(dbenv, lock)) != 0 && ret == 0)
+ ret = t_ret;
if (ret != 0)
goto err;
- DB_ASSERT(len <= msgsz);
- msgdbt.data = buf;
- msgdbt.size = (u_int32_t)len;
+ DB_ASSERT(dbenv, len <= msgsz);
+ DB_SET_DBT(msgdbt, buf, len);
dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = ((LOG *)dblp->reginfo.primary)->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- if (check_limit) {
- /*
- * msgdbt.size is only the size of the page and
- * other information we're sending. It doesn't
- * count the size of the control structure. Factor
- * that in as well so we're not off by a lot if
- * pages are small.
- */
- while (bytes < msgdbt.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_PAGE_MORE;
- goto send;
- }
- bytes -= (msgdbt.size + sizeof(REP_CONTROL));
- }
-send:
- RPRINT(dbenv, rep, (dbenv, &mb,
- "sendpages: %s %lu, lsn [%lu][%lu]",
- (type == REP_PAGE ? "PAGE" :
- (type == REP_PAGE_MORE ? "PAGE_MORE" : "PAGE_FAIL")),
- (u_long)p, (u_long)lsn.file, (u_long)lsn.offset));
- (void)__rep_send_message(dbenv, eid, type, &lsn, &msgdbt, 0);
+ LOG_SYSTEM_LOCK(dbenv);
+ repth.lsn = ((LOG *)dblp->reginfo.primary)->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ /*
+ * If we are configured for bulk, try to send this as a bulk
+ * request. If not configured, or it is too big for bulk
+ * then just send normally.
+ */
+ if (use_bulk)
+ ret = __rep_bulk_message(dbenv, &bulk, &repth,
+ &repth.lsn, &msgdbt, 0);
+ if (!use_bulk || ret == DB_REP_BULKOVF)
+ ret = __rep_send_throttle(dbenv, eid, &repth, 0);
+ RPRINT(dbenv, (dbenv, &mb,
+ "sendpages: %lu, lsn [%lu][%lu]", (u_long)p,
+ (u_long)repth.lsn.file, (u_long)repth.lsn.offset));
/*
- * If we have REP_PAGE_FAIL we need to break before trying
- * to give the page back to mpool. If we have REP_PAGE_MORE
+ * If we have REP_PAGE_MORE
* we need to break this loop after giving the page back
* to mpool. Otherwise, with REP_PAGE, we keep going.
*/
- if (type == REP_PAGE_FAIL)
- break;
- if (msgfp->type != DB_QUEUE || p == 0)
- ret = __memp_fput(mpf, pagep, 0);
-#ifdef HAVE_QUEUE
- else
- /*
- * We don't need an #else for HAVE_QUEUE here because if
- * we're not compiled with queue, then we're guaranteed
- * to have set REP_PAGE_FAIL above.
- */
- ret = __qam_fput(qdbp, p, pagep, 0);
-#endif
- if (type == REP_PAGE_MORE)
+ if (ret == 0)
+ ret = t_ret;
+ if (repth.type == REP_PAGE_MORE || ret != 0)
break;
}
+
+ if (0) {
+lockerr: if ((t_ret = __ENV_LPUT(dbenv, lock)) != 0 && ret == 0)
+ ret = t_ret;
+ }
err:
+ /*
+ * We're done, force out whatever remains in the bulk buffer and
+ * free it.
+ */
+ if (use_bulk && bulk.addr != NULL &&
+ (t_ret = __rep_bulk_free(dbenv, &bulk, 0)) != 0 && ret == 0)
+ ret = t_ret;
if (opened && (t_ret = __db_close(qdbp, NULL, DB_NOSYNC)) != 0 &&
ret == 0)
ret = t_ret;
if (buf != NULL)
__os_free(dbenv, buf);
+ if (lockid != DB_LOCK_INVALIDID && (t_ret = __lock_id_free(dbenv,
+ lockid)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -651,7 +849,6 @@ __rep_update_setup(dbenv, eid, rp, rec)
DBT *rec;
{
DB_LOG *dblp;
- DB_LSN lsn;
DB_REP *db_rep;
DBT pagereq_dbt;
LOG *lp;
@@ -673,25 +870,26 @@ __rep_update_setup(dbenv, eid, rp, rec)
lp = dblp->reginfo.primary;
ret = 0;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
if (!F_ISSET(rep, REP_F_RECOVER_UPDATE)) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
return (0);
}
F_CLR(rep, REP_F_RECOVER_UPDATE);
/*
* We know we're the first to come in here due to the
- * REP_F_RECOVER_UPDATE flag. REP_F_READY should not be set.
+ * REP_F_RECOVER_UPDATE flag.
*/
- DB_ASSERT(!F_ISSET(rep, REP_F_READY));
F_SET(rep, REP_F_RECOVER_PAGE);
/*
* We do not clear REP_F_READY or rep->in_recovery in this code.
* We'll eventually call the normal __rep_verify_match recovery
* code and that will clear all the flags and allow others to
- * proceed.
+ * proceed. We only need to lockout the API here. We do not
+ * need to lockout other message threads.
*/
- __rep_lockout(dbenv, db_rep, rep, 1);
+ if ((ret = __rep_lockout_api(dbenv, rep)) != 0)
+ goto err;
/*
* We need to update the timestamp and kill any open handles
* on this client. The files are changing completely.
@@ -700,39 +898,33 @@ __rep_update_setup(dbenv, eid, rp, rec)
renv = infop->primary;
(void)time(&renv->rep_timestamp);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
lp->wait_recs = rep->request_gap;
lp->rcvd_recs = 0;
ZERO_LSN(lp->ready_lsn);
+ ZERO_LSN(lp->verify_lsn);
ZERO_LSN(lp->waiting_lsn);
ZERO_LSN(lp->max_wait_lsn);
ZERO_LSN(lp->max_perm_lsn);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
if ((ret = __rep_update_read(dbenv, rec->data, &next, &rup)) != 0)
- goto err;
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ goto err_nolock;
/*
* We need to empty out any old log records that might be in the
* temp database.
*/
if ((ret = __db_truncate(db_rep->rep_db, NULL, &count)) != 0)
- goto err;
+ goto err_nolock;
/*
- * If our log is before the master's beginning of log,
- * we need to request from the master's beginning.
- * If we have some log, we need the earlier of the
- * master's last checkpoint LSN or our current LSN.
+ * We will remove all logs we have so we need to request
+ * from the master's beginning.
*/
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- if (log_compare(&lsn, &rup->first_lsn) < 0)
- rep->first_lsn = rup->first_lsn;
- else
- rep->first_lsn = lsn;
+ REP_SYSTEM_LOCK(dbenv);
+ rep->first_lsn = rup->first_lsn;
+ rep->first_vers = rup->first_vers;
rep->last_lsn = rp->lsn;
rep->nfiles = rup->num_files;
rep->curfile = 0;
@@ -743,11 +935,11 @@ __rep_update_setup(dbenv, eid, rp, rec)
__os_free(dbenv, rup);
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Update setup for %d files.", rep->nfiles));
- RPRINT(dbenv, rep, (dbenv, &mb, "Update setup: First LSN [%lu][%lu].",
+ RPRINT(dbenv, (dbenv, &mb, "Update setup: First LSN [%lu][%lu].",
(u_long)rep->first_lsn.file, (u_long)rep->first_lsn.offset));
- RPRINT(dbenv, rep, (dbenv, &mb, "Update setup: Last LSN [%lu][%lu]",
+ RPRINT(dbenv, (dbenv, &mb, "Update setup: Last LSN [%lu][%lu]",
(u_long)rep->last_lsn.file, (u_long)rep->last_lsn.offset));
infolen = rec->size - sizeof(__rep_update_args);
@@ -757,7 +949,7 @@ __rep_update_setup(dbenv, eid, rp, rec)
rep->finfo = rep->originfo;
if ((ret = __rep_fileinfo_read(dbenv,
rep->finfo, &next, &rep->curinfo)) != 0) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Update setup: Fileinfo read: %s", db_strerror(ret)));
goto errmem1;
}
@@ -765,15 +957,24 @@ __rep_update_setup(dbenv, eid, rp, rec)
#ifdef DIAGNOSTIC
msgfp = rep->curinfo;
- DB_ASSERT(msgfp->pgno == 0);
+ DB_ASSERT(dbenv, msgfp->pgno == 0);
#endif
/*
+ * We need to remove all logs and databases the client has prior to
+ * getting pages for current databases on the master.
+ */
+ if ((ret = __rep_remove_logs(dbenv)) != 0)
+ goto errmem;
+ if ((ret = __rep_remove_dbs(dbenv)) != 0)
+ goto errmem;
+
+ /*
* We want to create/open our dbp to the database
* where we'll keep our page information.
*/
if ((ret = __rep_client_dbinit(dbenv, 1, REP_PG)) != 0) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Update setup: Client_dbinit %s", db_strerror(ret)));
goto errmem;
}
@@ -783,10 +984,10 @@ __rep_update_setup(dbenv, eid, rp, rec)
*/
memset(&pagereq_dbt, 0, sizeof(pagereq_dbt));
pagereq_dbt.data = rep->finfo;
- pagereq_dbt.size = (u_int32_t)((u_int8_t *)rep->nextinfo -
- (u_int8_t *)rep->finfo);
+ pagereq_dbt.size =
+ (u_int32_t)((u_int8_t *)rep->nextinfo - (u_int8_t *)rep->finfo);
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Update PAGE_REQ file 0: pgsize %lu, maxpg %lu",
(u_long)rep->curinfo->pgsize,
(u_long)rep->curinfo->max_pgno));
@@ -794,7 +995,7 @@ __rep_update_setup(dbenv, eid, rp, rec)
* We set up pagereq_dbt as we went along. Send it now.
*/
(void)__rep_send_message(dbenv, eid, REP_PAGE_REQ,
- NULL, &pagereq_dbt, 0);
+ NULL, &pagereq_dbt, 0, DB_REP_ANYWHERE);
if (0) {
errmem: __os_free(dbenv, rep->curinfo);
errmem1: __os_free(dbenv, rep->originfo);
@@ -802,22 +1003,165 @@ errmem1: __os_free(dbenv, rep->originfo);
rep->curinfo = NULL;
rep->originfo = NULL;
}
-err:
- /*
- * If we get an error, we cannot leave ourselves in the
- * RECOVER_PAGE state because we have no file information.
- * That also means undo'ing the rep_lockout.
- * We need to move back to the RECOVER_UPDATE stage.
+
+ if (0) {
+err_nolock: REP_SYSTEM_LOCK(dbenv);
+ }
+
+err: /*
+ * If we get an error, we cannot leave ourselves in the RECOVER_PAGE
+ * state because we have no file information. That also means undo'ing
+ * the rep_lockout. We need to move back to the RECOVER_UPDATE stage.
*/
if (ret != 0) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Update_setup: Error: Clear PAGE, set UPDATE again. %s",
db_strerror(ret)));
F_CLR(rep, REP_F_RECOVER_PAGE | REP_F_READY);
rep->in_recovery = 0;
F_SET(rep, REP_F_RECOVER_UPDATE);
}
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ return (ret);
+}
+
+/*
+ * __rep_remove_logs -
+ * Remove our logs to prepare for internal init.
+ */
+static int
+__rep_remove_logs(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_LOG *dblp;
+ DB_LSN lsn;
+ LOG *lp;
+ u_int32_t fnum, lastfile;
+ int ret;
+ char *name;
+
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ ret = 0;
+
+ /*
+ * Call memp_sync to flush out any logs that might
+ * be in the log buffers and not on disk before
+ * we remove files on disk.
+ */
+ if ((ret = __memp_sync(dbenv, NULL)) != 0)
+ return (ret);
+ /*
+ * Forcibly remove existing log files or reset
+ * the in-memory log space.
+ */
+ if (lp->db_log_inmemory) {
+ INIT_LSN(lsn);
+ if ((ret = __log_zero(dbenv, &lsn, &lp->lsn)) != 0)
+ return (ret);
+ } else {
+ lastfile = lp->lsn.file;
+ for (fnum = 1; fnum <= lastfile; fnum++) {
+ if ((ret = __log_name(dblp, fnum, &name, NULL, 0)) != 0)
+ return (ret);
+ (void)time(&lp->timestamp);
+ (void)__os_unlink(dbenv, name);
+ __os_free(dbenv, name);
+ }
+ }
+ return (0);
+}
+
+/*
+ * __rep_remove_dbs
+ * Walk the directories removing databases.
+ */
+static int
+__rep_remove_dbs(dbenv)
+ DB_ENV *dbenv;
+{
+ u_int32_t filecnt;
+ int ret;
+
+ filecnt = 0;
+ if ((ret = __rep_closefiles(dbenv)) != 0)
+ return (ret);
+
+ /*
+ * We find the databases and remove them instead of building up
+ * the file information.
+ */
+ return (ret = __rep_find_dbs(dbenv, NULL, NULL, NULL, &filecnt, 1));
+}
+
+/*
+ * __rep_bulk_page
+ * Process a bulk page message.
+ *
+ * PUBLIC: int __rep_bulk_page __P((DB_ENV *, int, REP_CONTROL *, DBT *));
+ */
+int
+__rep_bulk_page(dbenv, eid, rp, rec)
+ DB_ENV *dbenv;
+ int eid;
+ REP_CONTROL *rp;
+ DBT *rec;
+{
+ DBT pgrec;
+ REP_CONTROL tmprp;
+ u_int32_t len;
+ int ret;
+ u_int8_t *p, *ep;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ memset(&pgrec, 0, sizeof(pgrec));
+ /*
+ * We're going to be modifying the rp LSN contents so make
+ * our own private copy to play with. We need to set the
+ * rectype to REP_PAGE because we're calling through __rep_page
+ * to process each page, and lower functions make decisions
+ * based on the rectypes (for throttling/gap processing)
+ */
+ memcpy(&tmprp, rp, sizeof(tmprp));
+ tmprp.rectype = REP_PAGE;
+ ret = 0;
+ for (ep = (u_int8_t *)rec->data + rec->size, p = (u_int8_t *)rec->data;
+ p < ep; p += len) {
+ /*
+ * First thing in the buffer is the length. Then the LSN
+ * of this page, then the page info itself.
+ */
+ memcpy(&len, p, sizeof(len));
+ p += sizeof(len);
+ memcpy(&tmprp.lsn, p, sizeof(DB_LSN));
+ p += sizeof(DB_LSN);
+ pgrec.data = p;
+ pgrec.size = len;
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_bulk_page: Processing LSN [%lu][%lu]",
+ (u_long)tmprp.lsn.file, (u_long)tmprp.lsn.offset));
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_bulk_page: p %#lx ep %#lx pgrec data %#lx, size %lu (%#lx)",
+ P_TO_ULONG(p), P_TO_ULONG(ep), P_TO_ULONG(pgrec.data),
+ (u_long)pgrec.size, (u_long)pgrec.size));
+ /*
+ * Now send the page info DBT to the page processing function.
+ */
+ ret = __rep_page(dbenv, eid, &tmprp, &pgrec);
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_bulk_page: rep_page ret %d", ret));
+
+ /*
+ * If this set of pages is already done just return.
+ */
+ if (ret != 0) {
+ if (ret == DB_REP_PAGEDONE)
+ ret = 0;
+ break;
+ }
+ }
return (ret);
}
@@ -850,16 +1194,13 @@ __rep_page(dbenv, eid, rp, rec)
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- if (!F_ISSET(rep, REP_F_RECOVER_PAGE)) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- return (0);
- }
- if ((ret = __rep_fileinfo_read(dbenv, rec->data, &next, &msgfp)) != 0) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if (!F_ISSET(rep, REP_F_RECOVER_PAGE))
+ return (DB_REP_PAGEDONE);
+ if ((ret = __rep_fileinfo_read(dbenv, rec->data, &next, &msgfp)) != 0)
return (ret);
- }
- RPRINT(dbenv, rep, (dbenv, &mb,
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ REP_SYSTEM_LOCK(dbenv);
+ RPRINT(dbenv, (dbenv, &mb,
"PAGE: Received page %lu from file %d",
(u_long)msgfp->pgno, msgfp->filenum));
/*
@@ -872,9 +1213,10 @@ __rep_page(dbenv, eid, rp, rec)
* is updating, then we'd have to verify the file's uid here too.
*/
if (msgfp->filenum != rep->curfile) {
- RPRINT(dbenv, rep,
+ RPRINT(dbenv,
(dbenv, &mb, "Msg file %d != curfile %d",
msgfp->filenum, rep->curfile));
+ ret = DB_REP_PAGEDONE;
goto err;
}
/*
@@ -884,7 +1226,6 @@ __rep_page(dbenv, eid, rp, rec)
if ((ret = __rep_client_dbinit(dbenv, 1, REP_PG)) != 0)
goto err;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
recno = (db_recno_t)(msgfp->pgno + 1);
@@ -899,19 +1240,18 @@ __rep_page(dbenv, eid, rp, rec)
*/
ret = __db_put(rep->file_dbp, NULL, &key, &data, DB_NOOVERWRITE);
if (ret == DB_KEYEXIST) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"PAGE: Received duplicate page %lu from file %d",
(u_long)msgfp->pgno, msgfp->filenum));
rep->stat.st_pg_duplicated++;
ret = 0;
- goto err_nolock;
+ goto err;
}
if (ret != 0)
- goto err_nolock;
+ goto err;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"PAGE: Write page %lu into mpool", (u_long)msgfp->pgno));
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
/*
* We put the page in the database file itself.
*/
@@ -936,7 +1276,7 @@ __rep_page(dbenv, eid, rp, rec)
* Now check the LSN on the page and save it if it is later
* than the one we have.
*/
- if (log_compare(&rp->lsn, &rep->last_lsn) > 0)
+ if (LOG_COMPARE(&rp->lsn, &rep->last_lsn) > 0)
rep->last_lsn = rp->lsn;
/*
@@ -947,9 +1287,9 @@ __rep_page(dbenv, eid, rp, rec)
*/
ret = __rep_filedone(dbenv, eid, rep, msgfp, rp->rectype);
-err:
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-err_nolock:
+err: REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+
__os_free(dbenv, msgfp);
return (ret);
}
@@ -980,15 +1320,10 @@ __rep_page_fail(dbenv, eid, rec)
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- if (!F_ISSET(rep, REP_F_RECOVER_PAGE)) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if (!F_ISSET(rep, REP_F_RECOVER_PAGE))
return (0);
- }
- if ((ret = __rep_fileinfo_read(dbenv, rec->data, &next, &msgfp)) != 0) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if ((ret = __rep_fileinfo_read(dbenv, rec->data, &next, &msgfp)) != 0)
return (ret);
- }
/*
* Check if this page is from the file we're expecting.
* This may be an old or delayed page message.
@@ -998,14 +1333,17 @@ __rep_page_fail(dbenv, eid, rec)
* If we allow dbrename/dbremove on the master while a client
* is updating, then we'd have to verify the file's uid here too.
*/
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ REP_SYSTEM_LOCK(dbenv);
if (msgfp->filenum != rep->curfile) {
- RPRINT(dbenv, rep, (dbenv, &mb, "Msg file %d != curfile %d",
+ RPRINT(dbenv, (dbenv, &mb, "Msg file %d != curfile %d",
msgfp->filenum, rep->curfile));
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
return (0);
}
rfp = rep->curinfo;
- if (rfp->type != DB_QUEUE)
+ if (rfp->type != (u_int32_t)DB_QUEUE)
--rfp->max_pgno;
else {
/*
@@ -1013,7 +1351,7 @@ __rep_page_fail(dbenv, eid, rec)
* may disappear, as well as at the end. Use msgfp->pgno
* to adjust accordingly.
*/
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"page_fail: BEFORE page %lu failed. ready %lu, max %lu, npages %d",
(u_long)msgfp->pgno, (u_long)rep->ready_pg,
(u_long)rfp->max_pgno, rep->npages));
@@ -1023,7 +1361,7 @@ __rep_page_fail(dbenv, eid, rec)
rep->ready_pg = msgfp->pgno + 1;
rep->npages = rep->ready_pg;
}
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"page_fail: AFTER page %lu failed. ready %lu, max %lu, npages %d",
(u_long)msgfp->pgno, (u_long)rep->ready_pg,
(u_long)rfp->max_pgno, rep->npages));
@@ -1036,7 +1374,8 @@ __rep_page_fail(dbenv, eid, rec)
* send out a page request for the next file's pages.
*/
ret = __rep_filedone(dbenv, eid, rep, msgfp, REP_PAGE_FAIL);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
return (ret);
}
@@ -1051,12 +1390,13 @@ __rep_write_page(dbenv, rep, msgfp)
__rep_fileinfo_args *msgfp;
{
__rep_fileinfo_args *rfp;
- DB_FH *rfh;
int ret;
void *dst;
- char *real_name;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
- real_name = NULL;
+ rfp = NULL;
/*
* If this is the first page we're putting in this database, we need
@@ -1067,33 +1407,25 @@ __rep_write_page(dbenv, rep, msgfp)
* We need to create the file, removing any existing file and associate
* the correct file ID with the new one.
*/
+ rfp = rep->curinfo;
if (rep->file_mpf == NULL) {
- rfp = rep->curinfo;
-
if (!F_ISSET(rfp, DB_AM_INMEM)) {
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- rfp->info.data, 0, NULL, &real_name)) != 0)
- goto err;
/*
- * Calling memp_nameop will both purge any matching
- * fileid from mpool and unlink it on disk.
+ * Recreate the file on disk. We'll be putting
+ * the data into the file via mpool.
*/
- if ((ret = __memp_nameop(dbenv,
- rfp->uid.data, NULL, real_name, NULL)) != 0)
- goto err;
- /*
- * Create the file on disk. We'll be putting the data
- * into the file via mpool.
- */
- if ((ret = __os_open(dbenv, real_name,
- DB_OSO_CREATE, dbenv->db_mode, &rfh)) == 0)
- ret = __os_closehandle(dbenv, rfh);
- if (ret != 0)
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_write_page: Calling fop_create for %s",
+ (char *)rfp->info.data));
+ if ((ret = __fop_create(dbenv, NULL, NULL,
+ rfp->info.data, DB_APP_DATA,
+ dbenv->db_mode, 0)) != 0)
goto err;
}
if ((ret =
- __rep_mpf_open(dbenv, &rep->file_mpf, rep->curinfo)) != 0)
+ __rep_mpf_open(dbenv, &rep->file_mpf, rep->curinfo,
+ F_ISSET(rfp, DB_AM_INMEM) ? DB_CREATE : 0)) != 0)
goto err;
}
/*
@@ -1104,30 +1436,32 @@ __rep_write_page(dbenv, rep, msgfp)
* we'll use the normal path for that first page. After that we
* can assume the dbp is opened.
*/
- if (msgfp->type == DB_QUEUE && msgfp->pgno != 0) {
+ if (msgfp->type == (u_int32_t)DB_QUEUE && msgfp->pgno != 0) {
#ifdef HAVE_QUEUE
- if ((ret = __qam_fget(
- rep->queue_dbp, &msgfp->pgno, DB_MPOOL_CREATE, &dst)) != 0)
+ ret = __qam_fget(rep->queue_dbp, &msgfp->pgno, NULL,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &dst);
#else
- if ((ret = __db_no_queue_am(dbenv)) != 0)
+ /*
+ * This always returns an error.
+ */
+ ret = __db_no_queue_am(dbenv);
#endif
- goto err;
- } else if ((ret = __memp_fget(
- rep->file_mpf, &msgfp->pgno, DB_MPOOL_CREATE, &dst)) != 0)
- goto err;
+ } else
+ ret = __memp_fget(rep->file_mpf, &msgfp->pgno, NULL,
+ DB_MPOOL_CREATE | DB_MPOOL_DIRTY, &dst);
+
+ if (ret != 0)
+ goto err;
memcpy(dst, msgfp->info.data, msgfp->pgsize);
- if (msgfp->type != DB_QUEUE || msgfp->pgno == 0)
- ret = __memp_fput(rep->file_mpf, dst, DB_MPOOL_DIRTY);
#ifdef HAVE_QUEUE
+ if (msgfp->type == (u_int32_t)DB_QUEUE && msgfp->pgno != 0)
+ ret = __qam_fput(rep->queue_dbp, msgfp->pgno, dst, 0);
else
- ret = __qam_fput(rep->queue_dbp, msgfp->pgno, dst,
- DB_MPOOL_DIRTY);
#endif
+ ret = __memp_fput(rep->file_mpf, dst, 0);
-err: if (real_name != NULL)
- __os_free(dbenv, real_name);
- return (ret);
+err: return (ret);
}
/*
@@ -1143,20 +1477,20 @@ __rep_page_gap(dbenv, rep, msgfp, type)
u_int32_t type;
{
DB_LOG *dblp;
- DB_REP *db_rep;
+ DBC *dbc;
DBT data, key;
LOG *lp;
__rep_fileinfo_args *rfp;
db_recno_t recno;
- int ret;
+ int ret, t_ret;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
#endif
- db_rep = dbenv->rep_handle;
- ret = 0;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
+ ret = 0;
+ dbc = NULL;
/*
* We've successfully put this page into our file.
@@ -1164,13 +1498,8 @@ __rep_page_gap(dbenv, rep, msgfp, type)
* if necessary.
*/
/*
- * We already hold the rep mutex, but we also need the db mutex.
- * So we need to drop it, acquire both in the right order and
- * then recheck the state of the world.
+ * We already hold both the db mutex and rep mutex.
*/
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
rfp = rep->curinfo;
/*
@@ -1184,19 +1513,26 @@ __rep_page_gap(dbenv, rep, msgfp, type)
/*
* We have 3 possible states:
- * 1. We receive a page we already have.
+ * 1. We receive a page we already have accounted for.
* msg pgno < ready pgno
* 2. We receive a page that is beyond a gap.
* msg pgno > ready pgno
- * 3. We receive the page we're expecting.
+ * 3. We receive the page we're expecting next.
* msg pgno == ready pgno
*/
/*
- * State 1. This should not happen because this function
- * should only be called once per page received because we
- * check for DB_KEY_EXIST when we save the page information.
+ * State 1. This can happen once we put our page record into the
+ * database, but by the time we acquire the mutex other
+ * threads have already accounted for this page and moved on.
+ * We just want to return.
*/
- DB_ASSERT(msgfp->pgno >= rep->ready_pg);
+ if (msgfp->pgno < rep->ready_pg) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "PAGE_GAP: pgno %lu < ready %lu, waiting %lu",
+ (u_long)msgfp->pgno, (u_long)rep->ready_pg,
+ (u_long)rep->waiting_pg));
+ goto err;
+ }
/*
* State 2. This page is beyond the page we're expecting.
@@ -1204,7 +1540,7 @@ __rep_page_gap(dbenv, rep, msgfp, type)
* (earlier) the current waiting_pg. There is nothing
* to do but see if we need to request.
*/
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"PAGE_GAP: pgno %lu, max_pg %lu ready %lu, waiting %lu max_wait %lu",
(u_long)msgfp->pgno, (u_long)rfp->max_pgno, (u_long)rep->ready_pg,
(u_long)rep->waiting_pg, (u_long)rep->max_wait_pg));
@@ -1218,9 +1554,11 @@ __rep_page_gap(dbenv, rep, msgfp, type)
*/
rep->ready_pg++;
lp->rcvd_recs = 0;
- while (ret == 0 && rep->ready_pg == rep->waiting_pg) {
+ if (rep->ready_pg == rep->waiting_pg) {
/*
* If we get here we know we just filled a gap.
+ * Move the cursor to that place and then walk
+ * forward looking for the next gap, if it exists.
*/
lp->wait_recs = 0;
lp->rcvd_recs = 0;
@@ -1231,16 +1569,53 @@ __rep_page_gap(dbenv, rep, msgfp, type)
*/
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
- recno = (db_recno_t)rep->ready_pg;
+ if ((ret = __db_cursor(rep->file_dbp, NULL,
+ &dbc, 0)) != 0)
+ goto err;
+ /*
+ * Set cursor to the first waiting page.
+ * Page numbers/record numbers are offset by 1.
+ */
+ recno = (db_recno_t)rep->waiting_pg + 1;
key.data = &recno;
key.ulen = key.size = sizeof(db_recno_t);
key.flags = DB_DBT_USERMEM;
- ret = __db_get(rep->file_dbp, NULL, &key, &data, 0);
- if (ret == DB_NOTFOUND || ret == DB_KEYEMPTY)
- break;
- else if (ret != 0)
+ /*
+ * We know that page is there, this should
+ * find the record.
+ */
+ ret = __db_c_get(dbc, &key, &data, DB_SET);
+ if (ret != 0)
goto err;
+ RPRINT(dbenv, (dbenv, &mb,
+ "PAGE_GAP: Set cursor for ready %lu, waiting %lu",
+ (u_long)rep->ready_pg, (u_long)rep->waiting_pg));
+ }
+ while (ret == 0 && rep->ready_pg == rep->waiting_pg) {
rep->ready_pg++;
+ ret = __db_c_get(dbc, &key, &data, DB_NEXT);
+ /*
+ * If we get to the end of the list, there are no
+ * more gaps. Reset waiting_pg.
+ */
+ if (ret == DB_NOTFOUND || ret == DB_KEYEMPTY) {
+ rep->waiting_pg = PGNO_INVALID;
+ RPRINT(dbenv, (dbenv, &mb,
+ "PAGE_GAP: Next cursor No next - ready %lu, waiting %lu",
+ (u_long)rep->ready_pg,
+ (u_long)rep->waiting_pg));
+ break;
+ }
+ /*
+ * Subtract 1 from waiting_pg because record numbers
+ * are 1-based and pages are 0-based and we added 1
+ * into the page number when we put it into the db.
+ */
+ rep->waiting_pg = *(db_pgno_t *)key.data;
+ rep->waiting_pg--;
+ RPRINT(dbenv, (dbenv, &mb,
+ "PAGE_GAP: Next cursor ready %lu, waiting %lu",
+ (u_long)rep->ready_pg, (u_long)rep->waiting_pg));
}
}
@@ -1276,7 +1651,7 @@ __rep_page_gap(dbenv, rep, msgfp, type)
*/
if ((__rep_check_doreq(dbenv, rep) || type == REP_PAGE_MORE) &&
((ret = __rep_pggap_req(dbenv, rep, rfp,
- type == REP_PAGE_MORE)) != 0))
+ (type == REP_PAGE_MORE) ? REP_GAP_FORCE : 0)) != 0))
goto err;
} else {
lp->wait_recs = 0;
@@ -1284,7 +1659,59 @@ __rep_page_gap(dbenv, rep, msgfp, type)
}
err:
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __rep_init_cleanup -
+ * Clean up internal initialization pieces.
+ *
+ * PUBLIC: int __rep_init_cleanup __P((DB_ENV *, REP *, int));
+ */
+int
+__rep_init_cleanup(dbenv, rep, force)
+ DB_ENV *dbenv;
+ REP *rep;
+ int force;
+{
+ int ret, t_ret;
+
+ ret = 0;
+ /*
+ * 1. Close up the file data pointer we used.
+ * 2. Close/reset the page database.
+ * 3. Close/reset the queue database if we're forcing a cleanup.
+ * 4. Free current file info.
+ * 5. If we have all files or need to force, free original file info.
+ */
+ if (rep->file_mpf != NULL) {
+ ret = __memp_fclose(rep->file_mpf, 0);
+ rep->file_mpf = NULL;
+ }
+ if (rep->file_dbp != NULL) {
+ t_ret = __db_close(rep->file_dbp, NULL, DB_NOSYNC);
+ rep->file_dbp = NULL;
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+ }
+ if (force && rep->queue_dbp != NULL) {
+ t_ret = __db_close(rep->queue_dbp, NULL, DB_NOSYNC);
+ rep->queue_dbp = NULL;
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+ }
+ if (rep->curinfo != NULL) {
+ __os_free(dbenv, rep->curinfo);
+ rep->curinfo = NULL;
+ }
+ if (rep->originfo != NULL &&
+ (force || ++rep->curfile == rep->nfiles)) {
+ __os_free(dbenv, rep->originfo);
+ rep->originfo = NULL;
+ }
return (ret);
}
@@ -1306,14 +1733,12 @@ __rep_filedone(dbenv, eid, rep, msgfp, type)
u_int32_t type;
{
DBT dbt;
- DB_REP *db_rep;
__rep_fileinfo_args *rfp;
int ret;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
#endif
- db_rep = dbenv->rep_handle;
/*
* We've put our page, now we need to do any gap processing
* that might be needed to re-request pages.
@@ -1331,7 +1756,7 @@ __rep_filedone(dbenv, eid, rep, msgfp, type)
* max_pgno is 0-based and npages is 1-based, so we don't have
* all the pages until npages is > max_pgno.
*/
- RPRINT(dbenv, rep, (dbenv, &mb, "FILEDONE: have %lu pages. Need %lu.",
+ RPRINT(dbenv, (dbenv, &mb, "FILEDONE: have %lu pages. Need %lu.",
(u_long)rep->npages, (u_long)rfp->max_pgno + 1));
if (rep->npages <= rfp->max_pgno)
return (0);
@@ -1341,47 +1766,22 @@ __rep_filedone(dbenv, eid, rep, msgfp, type)
* we need to do special queue processing. Queue is handled in
* several stages.
*/
- if (rfp->type == DB_QUEUE &&
+ if (rfp->type == (u_int32_t)DB_QUEUE &&
((ret = __rep_queue_filedone(dbenv, rep, rfp)) !=
DB_REP_PAGEDONE))
return (ret);
/*
- * We have all the pages for this file. We need to:
- * 1. Close up the file data pointer we used.
- * 2. Close/reset the page database.
- * 3. Check if we have all file data. If so, request logs.
- * 4. If not, set curfile to next file and request its pages.
- */
- /*
- * 1. Close up the file data pointer we used.
- */
- if (rep->file_mpf != NULL) {
- ret = __memp_fclose(rep->file_mpf, 0);
- rep->file_mpf = NULL;
- if (ret != 0)
- goto err;
- }
-
- /*
- * 2. Close/reset the page database.
+ * We have all the pages for this file. Clean up.
*/
- ret = __db_close(rep->file_dbp, NULL, DB_NOSYNC);
- rep->file_dbp = NULL;
- if (ret != 0)
+ if ((ret = __rep_init_cleanup(dbenv, rep, 0)) != 0)
goto err;
-
- /*
- * 3. Check if we have all file data. If so, request logs.
- */
- __os_free(dbenv, rep->curinfo);
- if (++rep->curfile == rep->nfiles) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ if (rep->curfile == rep->nfiles) {
+ RPRINT(dbenv, (dbenv, &mb,
"FILEDONE: have %d files. RECOVER_LOG now", rep->nfiles));
/*
* Move to REP_RECOVER_LOG state.
* Request logs.
*/
- __os_free(dbenv, rep->originfo);
/*
* We need to do a sync here so that any later opens
* can find the file and file id. We need to do it
@@ -1395,16 +1795,17 @@ __rep_filedone(dbenv, eid, rep, msgfp, type)
memset(&dbt, 0, sizeof(dbt));
dbt.data = &rep->last_lsn;
dbt.size = sizeof(rep->last_lsn);
- RPRINT(dbenv, rep, (dbenv, &mb,
+ REP_SYSTEM_UNLOCK(dbenv);
+ if ((ret = __rep_log_setup(dbenv, rep)) != 0)
+ goto err;
+ RPRINT(dbenv, (dbenv, &mb,
"FILEDONE: LOG_REQ from LSN [%lu][%lu] to [%lu][%lu]",
(u_long)rep->first_lsn.file, (u_long)rep->first_lsn.offset,
(u_long)rep->last_lsn.file, (u_long)rep->last_lsn.offset));
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- if ((ret = __rep_log_setup(dbenv, rep)) != 0)
- goto err;
(void)__rep_send_message(dbenv, eid,
- REP_LOG_REQ, &rep->first_lsn, &dbt, 0);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_LOG_REQ, &rep->first_lsn, &dbt,
+ REPCTL_INIT, DB_REP_ANYWHERE);
+ REP_SYSTEM_LOCK(dbenv);
return (0);
}
@@ -1415,20 +1816,20 @@ __rep_filedone(dbenv, eid, rep, msgfp, type)
if ((ret = __rep_fileinfo_read(dbenv, rep->finfo, &rep->nextinfo,
&rep->curinfo)) != 0)
goto err;
- DB_ASSERT(rep->curinfo->pgno == 0);
+ DB_ASSERT(dbenv, rep->curinfo->pgno == 0);
rep->ready_pg = 0;
rep->npages = 0;
rep->waiting_pg = PGNO_INVALID;
rep->max_wait_pg = PGNO_INVALID;
memset(&dbt, 0, sizeof(dbt));
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"FILEDONE: Next file %d. Request pages 0 to %lu",
rep->curinfo->filenum, (u_long)rep->curinfo->max_pgno));
dbt.data = rep->finfo;
- dbt.size = (u_int32_t)((u_int8_t *)rep->nextinfo -
- (u_int8_t *)rep->finfo);
+ dbt.size =
+ (u_int32_t)((u_int8_t *)rep->nextinfo - (u_int8_t *)rep->finfo);
(void)__rep_send_message(dbenv, eid, REP_PAGE_REQ,
- NULL, &dbt, 0);
+ NULL, &dbt, 0, DB_REP_ANYWHERE);
err:
return (ret);
}
@@ -1439,10 +1840,11 @@ err:
* Used by both master and client to bring files into mpool.
*/
static int
-__rep_mpf_open(dbenv, mpfp, rfp)
+__rep_mpf_open(dbenv, mpfp, rfp, flags)
DB_ENV *dbenv;
DB_MPOOLFILE **mpfp;
__rep_fileinfo_args *rfp;
+ u_int32_t flags;
{
DB db;
int ret;
@@ -1454,13 +1856,17 @@ __rep_mpf_open(dbenv, mpfp, rfp)
* We need a dbp to pass into to __db_dbenv_mpool. Set up
* only the parts that it needs.
*/
- db.type = rfp->type;
- db.pgsize = (u_int32_t)rfp->pgsize;
+ db.dbenv = dbenv;
+ db.type = (DBTYPE)rfp->type;
+ db.pgsize = rfp->pgsize;
memcpy(db.fileid, rfp->uid.data, DB_FILE_ID_LEN);
db.flags = rfp->flags;
+ /* We need to make sure the dbp isn't marked open. */
+ F_CLR(&db, DB_AM_OPEN_CALLED);
db.mpf = *mpfp;
- db.dbenv = dbenv;
- if ((ret = __db_dbenv_mpool(&db, rfp->info.data, 0)) != 0) {
+ if (F_ISSET(&db, DB_AM_INMEM))
+ (void)__memp_set_flags(db.mpf, DB_MPOOL_NOFILE, 1);
+ if ((ret = __db_dbenv_mpool(&db, rfp->info.data, flags)) != 0) {
(void)__memp_fclose(*mpfp, 0);
*mpfp = NULL;
}
@@ -1469,21 +1875,22 @@ __rep_mpf_open(dbenv, mpfp, rfp)
/*
* __rep_pggap_req -
- * Request a page gap. Assumes the caller holds the rep_mutexp.
+ * Request a page gap. Assumes the caller holds the rep_mutex.
*
* PUBLIC: int __rep_pggap_req __P((DB_ENV *, REP *, __rep_fileinfo_args *,
- * PUBLIC: int));
+ * PUBLIC: u_int32_t));
*/
int
-__rep_pggap_req(dbenv, rep, reqfp, moregap)
+__rep_pggap_req(dbenv, rep, reqfp, gapflags)
DB_ENV *dbenv;
REP *rep;
__rep_fileinfo_args *reqfp;
- int moregap;
+ u_int32_t gapflags;
{
DBT max_pg_dbt;
- __rep_fileinfo_args *tmpfp;
+ __rep_fileinfo_args *tmpfp, t;
size_t len;
+ u_int32_t flags;
int alloc, ret;
ret = 0;
@@ -1502,8 +1909,10 @@ __rep_pggap_req(dbenv, rep, reqfp, moregap)
if ((ret = __rep_finfo_alloc(dbenv, rep->curinfo, &tmpfp)) != 0)
return (ret);
alloc = 1;
- } else
- tmpfp = reqfp;
+ } else {
+ t = *reqfp;
+ tmpfp = &t;
+ }
/*
* If we've never requested this page, then
@@ -1511,30 +1920,44 @@ __rep_pggap_req(dbenv, rep, reqfp, moregap)
* page we have. If we have requested this page
* then only request this record, not the entire gap.
*/
+ flags = 0;
memset(&max_pg_dbt, 0, sizeof(max_pg_dbt));
tmpfp->pgno = rep->ready_pg;
max_pg_dbt.data = rep->finfo;
- max_pg_dbt.size = (u_int32_t)((u_int8_t *)rep->nextinfo -
- (u_int8_t *)rep->finfo);
- if (rep->max_wait_pg == PGNO_INVALID || moregap) {
+ max_pg_dbt.size =
+ (u_int32_t)((u_int8_t *)rep->nextinfo - (u_int8_t *)rep->finfo);
+ if (rep->max_wait_pg == PGNO_INVALID ||
+ FLD_ISSET(gapflags, REP_GAP_FORCE | REP_GAP_REREQUEST)) {
/*
* Request the gap - set max to waiting_pg - 1 or if
* there is no waiting_pg, just ask for one.
*/
if (rep->waiting_pg == PGNO_INVALID) {
- if (moregap)
+ if (FLD_ISSET(gapflags,
+ REP_GAP_FORCE | REP_GAP_REREQUEST))
rep->max_wait_pg = rep->curinfo->max_pgno;
else
rep->max_wait_pg = rep->ready_pg;
} else
rep->max_wait_pg = rep->waiting_pg - 1;
tmpfp->max_pgno = rep->max_wait_pg;
+ /*
+ * Gap requests are "new" and can go anywhere.
+ */
+ if (FLD_ISSET(gapflags, REP_GAP_REREQUEST))
+ flags = DB_REP_REREQUEST;
+ else
+ flags = DB_REP_ANYWHERE;
} else {
/*
* Request 1 page - set max to ready_pg.
*/
rep->max_wait_pg = rep->ready_pg;
tmpfp->max_pgno = rep->ready_pg;
+ /*
+ * If we're dropping to singletons, this is a rerequest.
+ */
+ flags = DB_REP_REREQUEST;
}
if (rep->master_id != DB_EID_INVALID) {
rep->stat.st_pg_requested++;
@@ -1548,12 +1971,12 @@ __rep_pggap_req(dbenv, rep, reqfp, moregap)
tmpfp->pgsize, tmpfp->pgno, tmpfp->max_pgno,
tmpfp->filenum, tmpfp->id, tmpfp->type,
tmpfp->flags, &tmpfp->uid, &tmpfp->info);
- DB_ASSERT(len == max_pg_dbt.size);
+ DB_ASSERT(dbenv, len == max_pg_dbt.size);
(void)__rep_send_message(dbenv, rep->master_id,
- REP_PAGE_REQ, NULL, &max_pg_dbt, 0);
+ REP_PAGE_REQ, NULL, &max_pg_dbt, 0, flags);
} else
(void)__rep_send_message(dbenv, DB_EID_BROADCAST,
- REP_MASTER_REQ, NULL, NULL, 0);
+ REP_MASTER_REQ, NULL, NULL, 0, 0);
if (alloc)
__os_free(dbenv, tmpfp);
@@ -1561,59 +1984,6 @@ __rep_pggap_req(dbenv, rep, reqfp, moregap)
}
/*
- * __rep_loggap_req -
- * Request a log gap. Assumes the caller holds the db_mutexp.
- *
- * PUBLIC: void __rep_loggap_req __P((DB_ENV *, REP *, DB_LSN *, int));
- */
-void
-__rep_loggap_req(dbenv, rep, lsnp, moregap)
- DB_ENV *dbenv;
- REP *rep;
- DB_LSN *lsnp;
- int moregap;
-{
- DB_LOG *dblp;
- DBT max_lsn_dbt, *max_lsn_dbtp;
- DB_LSN next_lsn;
- LOG *lp;
-
- dblp = dbenv->lg_handle;
- lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
- next_lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
-
- if (moregap ||
- (lsnp != NULL &&
- (log_compare(lsnp, &lp->max_wait_lsn) == 0 ||
- IS_ZERO_LSN(lp->max_wait_lsn)))) {
- /*
- * We need to ask for the gap. Either we never asked
- * for records before, or we asked for a single record
- * and received it.
- */
- 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;
- }
- if (rep->master_id != DB_EID_INVALID) {
- rep->stat.st_log_requested++;
- (void)__rep_send_message(dbenv, rep->master_id,
- REP_LOG_REQ, &next_lsn, max_lsn_dbtp, 0);
- } else
- (void)__rep_send_message(dbenv, DB_EID_BROADCAST,
- REP_MASTER_REQ, NULL, NULL, 0);
-
- return;
-}
-
-/*
* __rep_finfo_alloc -
* Allocate and initialize a fileinfo structure.
*
@@ -1625,15 +1995,32 @@ __rep_finfo_alloc(dbenv, rfpsrc, rfpp)
DB_ENV *dbenv;
__rep_fileinfo_args *rfpsrc, **rfpp;
{
+ __rep_fileinfo_args *rfp;
size_t size;
int ret;
+ void *uidp, *infop;
+ /*
+ * Allocate enough for the structure and the two DBT data areas.
+ */
size = sizeof(__rep_fileinfo_args) + rfpsrc->uid.size +
rfpsrc->info.size;
- if ((ret = __os_malloc(dbenv, size, rfpp)) != 0)
+ if ((ret = __os_malloc(dbenv, size, &rfp)) != 0)
return (ret);
- memcpy(*rfpp, rfpsrc, size);
+ /*
+ * Copy the structure itself, and then set the DBT data pointers
+ * to their space and copy the data itself as well.
+ */
+ memcpy(rfp, rfpsrc, sizeof(__rep_fileinfo_args));
+ uidp = (u_int8_t *)rfp + sizeof(__rep_fileinfo_args);
+ rfp->uid.data = uidp;
+ memcpy(uidp, rfpsrc->uid.data, rfpsrc->uid.size);
+
+ infop = (u_int8_t *)uidp + rfpsrc->uid.size;
+ rfp->info.data = infop;
+ memcpy(infop, rfpsrc->info.data, rfpsrc->info.size);
+ *rfpp = rfp;
return (ret);
}
@@ -1649,31 +2036,32 @@ __rep_log_setup(dbenv, rep)
{
DB_LOG *dblp;
DB_LSN lsn;
- u_int32_t fnum;
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ LOG *lp;
int ret;
- char *name;
dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
/*
* Set up the log starting at the file number of the first LSN we
* need to get from the master.
*/
- if ((ret = __log_newfile(dblp, &lsn, rep->first_lsn.file)) == 0) {
- /*
- * We do know we want to start this client's log at
- * log file 'first_lsn.file'. So we want to forcibly
- * remove any log files earlier than that number.
- * We don't know what might be in any earlier log files
- * so we cannot just use __log_autoremove.
- */
- for (fnum = 1; fnum < rep->first_lsn.file; fnum++) {
- if ((ret = __log_name(dblp, fnum, &name, NULL, 0)) != 0)
- goto err;
- (void)__os_unlink(dbenv, name);
- __os_free(dbenv, name);
- }
- }
-err:
+ ret = __log_newfile(dblp, &lsn, rep->first_lsn.file, rep->first_vers);
+
+ /*
+ * We reset first_lsn to the lp->lsn. We were given the LSN of
+ * the checkpoint and we now need the LSN for the beginning of
+ * the file, which __log_newfile conveniently set up for us
+ * in lp->lsn.
+ */
+ rep->first_lsn = lp->lsn;
+ TXN_SYSTEM_LOCK(dbenv);
+ ZERO_LSN(region->last_ckp);
+ TXN_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -1723,19 +2111,24 @@ __rep_queue_filedone(dbenv, rep, rfp)
*/
if ((ret = __memp_sync(dbenv, NULL)) != 0)
goto out;
- if ((ret = db_create(&rep->queue_dbp, dbenv,
- DB_REP_CREATE)) != 0)
+ if ((ret = db_create(&rep->queue_dbp, dbenv, 0)) != 0)
goto out;
flags = DB_NO_AUTO_COMMIT |
(F_ISSET(dbenv, DB_ENV_THREAD) ? DB_THREAD : 0);
- if ((ret = __db_open(rep->queue_dbp, NULL, rfp->info.data,
- NULL, DB_QUEUE, flags, 0, PGNO_BASE_MD)) != 0)
+ /*
+ * We need to check whether this is in-memory so that we pass
+ * the name correctly as either the file or the database name.
+ */
+ if ((ret = __db_open(rep->queue_dbp, NULL,
+ FLD_ISSET(rfp->flags, DB_AM_INMEM) ? NULL : rfp->info.data,
+ FLD_ISSET(rfp->flags, DB_AM_INMEM) ? rfp->info.data : NULL,
+ DB_QUEUE, flags, 0, PGNO_BASE_MD)) != 0)
goto out;
}
if ((ret = __queue_pageinfo(rep->queue_dbp,
&first, &last, &empty, 0, 0)) != 0)
goto out;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Queue fileinfo: first %lu, last %lu, empty %d",
(u_long)first, (u_long)last, empty));
/*
@@ -1758,7 +2151,7 @@ __rep_queue_filedone(dbenv, rep, rfp)
QAM_RECNO_PAGE(rep->queue_dbp, UINT32_MAX);
} else
rfp->max_pgno = last;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Queue fileinfo: First req: first %lu, last %lu",
(u_long)first, (u_long)rfp->max_pgno));
goto req;
@@ -1771,7 +2164,7 @@ __rep_queue_filedone(dbenv, rep, rfp)
*/
first = 1;
rfp->max_pgno = last;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Queue fileinfo: Wrap req: first %lu, last %lu",
(u_long)first, (u_long)last));
req:
diff --git a/db/rep/rep_elect.c b/db/rep/rep_elect.c
new file mode 100644
index 000000000..f158cb337
--- /dev/null
+++ b/db/rep/rep_elect.c
@@ -0,0 +1,995 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_elect.c,v 12.35 2006/09/13 17:43:40 alanb Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+
+/*
+ * We need to check sites == nsites, not more than half
+ * like we do in __rep_elect and the VOTE2 code. 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.
+ */
+#define IS_PHASE1_DONE(rep) \
+ ((rep)->sites >= (rep)->nsites && (rep)->w_priority > 0)
+
+#define I_HAVE_WON(rep, winner) \
+ ((rep)->votes >= (rep)->nvotes && winner == (rep)->eid)
+
+static void __rep_cmp_vote __P((DB_ENV *, REP *, int, DB_LSN *,
+ int, u_int32_t, u_int32_t, u_int32_t));
+static int __rep_elect_init
+ __P((DB_ENV *, DB_LSN *, int, int, int *, u_int32_t *));
+static int __rep_tally __P((DB_ENV *, REP *, int, int *, u_int32_t, roff_t));
+static int __rep_wait __P((DB_ENV *, u_int32_t, int *, u_int32_t));
+
+/*
+ * __rep_elect --
+ * Called after master failure to hold/participate in an election for
+ * a new master.
+ *
+ * PUBLIC: int __rep_elect __P((DB_ENV *, int, int, int *, u_int32_t));
+ */
+int
+__rep_elect(dbenv, given_nsites, nvotes, eidp, flags)
+ DB_ENV *dbenv;
+ int given_nsites, nvotes;
+ int *eidp;
+ u_int32_t flags;
+{
+ DB_LOG *dblp;
+ DB_LSN lsn;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ int ack, done, in_progress, nsites, priority, realpri, ret, send_vote;
+ u_int32_t ctlflags, egen, orig_tally, tiebreaker, to, timeout;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+ COMPQUIET(flags, 0);
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_elect", DB_INIT_REP);
+
+ /* Error checking. */
+ if (given_nsites < 0) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_elect: nsites may not be negative");
+ return (EINVAL);
+ }
+ if (nvotes < 0) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_elect: nvotes may not be negative");
+ return (EINVAL);
+ }
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ /*
+ * Specifying 0 for nsites signals us to use the value configured
+ * previously via rep_set_nsites. Similarly, if the given nvotes is 0,
+ * it asks us to compute the value representing a simple majority.
+ */
+ nsites = given_nsites == 0 ? db_rep->config_nsites : given_nsites;
+ ack = nvotes == 0 ? ELECTION_MAJORITY(nsites) : nvotes;
+
+ /*
+ * XXX
+ * If users give us less than a majority, they run the risk of
+ * having a network partition. However, this also allows the
+ * scenario of master/1 client to elect the client. Allow
+ * sub-majority values, but give a warning.
+ */
+ if (ack <= (nsites / 2)) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_elect:WARNING: nvotes (%d) is sub-majority with nsites (%d)",
+ nvotes, nsites);
+ }
+
+ if (nsites < ack) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_elect: nvotes (%d) is larger than nsites (%d)",
+ ack, nsites);
+ return (EINVAL);
+ }
+
+ timeout = rep->elect_timeout;
+ realpri = rep->priority;
+
+ RPRINT(dbenv,
+ (dbenv, &mb, "Start election nsites %d, ack %d, priority %d",
+ nsites, ack, realpri));
+
+ /*
+ * Special case when having an election while running with
+ * sites of potentially mixed versions. We set a bit indicating
+ * we're an electable site, but set our priority to 0.
+ * Old sites will never elect us, with 0 priority, but if all
+ * we have are new sites, then we can elect the best electable
+ * site of the group.
+ * Thus 'priority' is this special, possibly-fake, effective
+ * priority that we'll use for this election, while 'realpri' is our
+ * real, configured priority, as retrieved from REP region.
+ */
+ ctlflags = realpri != 0 ? REPCTL_ELECTABLE : 0;
+ LOG_SYSTEM_LOCK(dbenv);
+ lsn = lp->lsn;
+ priority = lp->persist.version != DB_LOGVERSION ? 0 : realpri;
+#ifdef CONFIG_TEST
+ /*
+ * This allows us to unit test the ELECTABLE flag simply by
+ * using the priority values.
+ */
+ if (priority > 0 && priority <= 10) {
+ RPRINT(dbenv,
+ (dbenv, &mb,
+ "Artificially setting priority 0 (ELECTABLE) for CONFIG_TEST mode"));
+ DB_ASSERT(dbenv, ctlflags == REPCTL_ELECTABLE);
+ priority = 0;
+ }
+#endif
+ LOG_SYSTEM_UNLOCK(dbenv);
+
+ orig_tally = 0;
+ to = timeout;
+ if ((ret = __rep_elect_init(dbenv,
+ &lsn, nsites, ack, &in_progress, &orig_tally)) != 0) {
+ if (ret == DB_REP_NEWMASTER) {
+ ret = 0;
+ *eidp = rep->eid;
+ }
+ goto err;
+ }
+ /*
+ * If another thread is in the middle of an election we
+ * just quietly return and not interfere.
+ */
+ if (in_progress) {
+ *eidp = rep->master_id;
+ return (0);
+ }
+ __os_clock(dbenv, &rep->esec, &rep->eusec);
+restart:
+ /* Generate a randomized tiebreaker value. */
+ __os_unique_id(dbenv, &tiebreaker);
+
+ REP_SYSTEM_LOCK(dbenv);
+ F_SET(rep, REP_F_EPHASE1 | REP_F_NOARCHIVE);
+ F_CLR(rep, REP_F_TALLY);
+
+ /*
+ * We are about to participate at this egen. We must
+ * write out the next egen before participating in this one
+ * so that if we crash we can never participate in this egen
+ * again.
+ */
+ if ((ret = __rep_write_egen(dbenv, rep->egen + 1)) != 0)
+ goto lockdone;
+
+ /* Tally our own vote */
+ if (__rep_tally(dbenv, rep, rep->eid, &rep->sites, rep->egen,
+ rep->tally_off) != 0) {
+ ret = EINVAL;
+ goto lockdone;
+ }
+ __rep_cmp_vote(dbenv, rep, rep->eid, &lsn, priority, rep->gen,
+ tiebreaker, ctlflags);
+
+ RPRINT(dbenv, (dbenv, &mb, "Beginning an election"));
+
+ /* Now send vote */
+ send_vote = DB_EID_INVALID;
+ egen = rep->egen;
+ done = IS_PHASE1_DONE(rep);
+ REP_SYSTEM_UNLOCK(dbenv);
+ __rep_send_vote(dbenv, &lsn, nsites, ack, priority, tiebreaker, egen,
+ DB_EID_BROADCAST, REP_VOTE1, ctlflags);
+ DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTVOTE1, ret, NULL);
+ if (done) {
+ REP_SYSTEM_LOCK(dbenv);
+ goto vote;
+ }
+ ret = __rep_wait(dbenv, to, eidp, REP_F_EPHASE1);
+ switch (ret) {
+ case 0:
+ /* Check if election complete or phase complete. */
+ if (*eidp != DB_EID_INVALID && !IN_ELECTION(rep)) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Ended election phase 1"));
+ goto edone;
+ }
+ goto phase2;
+ case DB_REP_EGENCHG:
+ if (to > timeout)
+ to = timeout;
+ to = (to * 8) / 10;
+ RPRINT(dbenv, (dbenv, &mb,
+"Egen changed while waiting. Now %lu. New timeout %lu, orig timeout %lu",
+ (u_long)rep->egen, (u_long)to, (u_long)timeout));
+ /*
+ * If the egen changed while we were sleeping, that
+ * means we're probably late to the next election,
+ * so we'll backoff our timeout so that we don't get
+ * into an out-of-phase election scenario.
+ *
+ * Backoff to 80% of the current timeout.
+ */
+ goto restart;
+ case DB_TIMEOUT:
+ break;
+ default:
+ goto err;
+ }
+ /*
+ * If we got here, we haven't heard from everyone, but we've
+ * run out of time, so it's time to decide if we have enough
+ * votes to pick a winner and if so, to send out a vote to
+ * the winner.
+ */
+ REP_SYSTEM_LOCK(dbenv);
+ /*
+ * If our egen changed while we were waiting. We need to
+ * essentially reinitialize our election.
+ */
+ if (egen != rep->egen) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ RPRINT(dbenv, (dbenv, &mb, "Egen changed from %lu to %lu",
+ (u_long)egen, (u_long)rep->egen));
+ goto restart;
+ }
+ if (rep->sites >= rep->nvotes) {
+vote:
+ /* We think we've seen enough to cast a vote. */
+ send_vote = rep->winner;
+ /*
+ * 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);
+ RPRINT(dbenv, (dbenv, &mb,
+ "Counted my vote %d", rep->votes));
+ }
+ F_SET(rep, REP_F_EPHASE2);
+ F_CLR(rep, REP_F_EPHASE1);
+ }
+ REP_SYSTEM_UNLOCK(dbenv);
+ if (send_vote == DB_EID_INVALID) {
+ /* We do not have enough votes to elect. */
+ RPRINT(dbenv, (dbenv, &mb,
+ "Not enough votes to elect: recvd %d of %d from %d sites",
+ rep->sites, rep->nvotes, rep->nsites));
+ 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) {
+ RPRINT(dbenv, (dbenv, &mb, "Sending vote"));
+ __rep_send_vote(dbenv, NULL, 0, 0, 0, 0, egen,
+ send_vote, REP_VOTE2, 0);
+ /*
+ * If we are NOT the new master we want to send
+ * our vote to the winner, and wait longer. The
+ * reason is that the winner may be "behind" us
+ * in the election waiting and if the master is
+ * down, the winner will wait the full timeout
+ * and we want to give the winner enough time to
+ * process all the votes. Otherwise we could
+ * incorrectly return DB_REP_UNAVAIL and start a
+ * new election before the winner can declare
+ * itself.
+ */
+ to = to * 2;
+
+ }
+
+phase2:
+ if (I_HAVE_WON(rep, rep->winner)) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Skipping phase2 wait: already got %d votes",
+ rep->votes));
+ REP_SYSTEM_LOCK(dbenv);
+ goto i_won;
+ }
+ ret = __rep_wait(dbenv, to, eidp, REP_F_EPHASE2);
+ RPRINT(dbenv, (dbenv, &mb,
+ "Ended election phase 2 %d", ret));
+ switch (ret) {
+ case 0:
+ if (*eidp != DB_EID_INVALID)
+ goto edone;
+ ret = DB_REP_UNAVAIL;
+ break;
+ case DB_REP_EGENCHG:
+ if (to > timeout)
+ to = timeout;
+ to = (to * 8) / 10;
+ RPRINT(dbenv, (dbenv, &mb,
+"While waiting egen changed to %lu. Phase 2 New timeout %lu, orig timeout %lu",
+ (u_long)rep->egen,
+ (u_long)to, (u_long)timeout));
+ goto restart;
+ case DB_TIMEOUT:
+ ret = DB_REP_UNAVAIL;
+ break;
+ default:
+ goto err;
+ }
+ REP_SYSTEM_LOCK(dbenv);
+ if (egen != rep->egen) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ RPRINT(dbenv, (dbenv, &mb,
+ "Egen ph2 changed from %lu to %lu",
+ (u_long)egen, (u_long)rep->egen));
+ goto restart;
+ }
+ done = rep->votes >= rep->nvotes;
+ RPRINT(dbenv, (dbenv, &mb,
+ "After phase 2: votes %d, nvotes %d, nsites %d",
+ rep->votes, rep->nvotes, rep->nsites));
+ if (I_HAVE_WON(rep, rep->winner)) {
+i_won: __rep_elect_master(dbenv, rep, eidp);
+ ret = 0;
+ goto lockdone;
+ }
+ REP_SYSTEM_UNLOCK(dbenv);
+ }
+
+err: REP_SYSTEM_LOCK(dbenv);
+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);
+
+ /*
+ * If the election finished elsewhere, we need to decrement
+ * the elect_th anyway.
+ */
+ if (0) {
+edone: REP_SYSTEM_LOCK(dbenv);
+ }
+ rep->elect_th = 0;
+
+ RPRINT(dbenv, (dbenv, &mb,
+ "Ended election with %d, sites %d, egen %lu, flags 0x%lx",
+ ret, rep->sites, (u_long)rep->egen, (u_long)rep->flags));
+ REP_SYSTEM_UNLOCK(dbenv);
+
+DB_TEST_RECOVERY_LABEL
+ return (ret);
+}
+
+/*
+ * __rep_vote1 --
+ * Handle incoming vote1 message on a client.
+ *
+ * PUBLIC: int __rep_vote1 __P((DB_ENV *, REP_CONTROL *, DBT *, int *));
+ */
+int
+__rep_vote1(dbenv, rp, rec, eidp)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ DBT *rec;
+ int *eidp;
+{
+ DB_LOG *dblp;
+ DB_LSN lsn;
+ DB_REP *db_rep;
+ DBT data_dbt;
+ LOG *lp;
+ REP *rep;
+ REP_OLD_VOTE_INFO *ovi;
+ REP_VOTE_INFO tmpvi, *vi;
+ u_int32_t egen;
+ int master, ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ RPRINT(dbenv, (dbenv, &mb, "Master received vote"));
+ LOG_SYSTEM_LOCK(dbenv);
+ lsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0, 0);
+ return (ret);
+ }
+
+ if (rep->version == DB_REPVERSION_42) {
+ ovi = (REP_OLD_VOTE_INFO *)rec->data;
+ tmpvi.egen = ovi->egen;
+ tmpvi.nsites = ovi->nsites;
+ tmpvi.nvotes = ovi->nsites / 2 + 1;
+ tmpvi.priority = ovi->priority;
+ tmpvi.tiebreaker = ovi->tiebreaker;
+ vi = &tmpvi;
+ } else
+ vi = (REP_VOTE_INFO *)rec->data;
+ REP_SYSTEM_LOCK(dbenv);
+
+ /*
+ * 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 we get an old vote,
+ * send an ALIVE to the old participant.
+ */
+ RPRINT(dbenv, (dbenv, &mb,
+ "Received vote1 egen %lu, egen %lu",
+ (u_long)vi->egen, (u_long)rep->egen));
+ if (vi->egen < rep->egen) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Received old vote %lu, egen %lu, ignoring vote1",
+ (u_long)vi->egen, (u_long)rep->egen));
+ egen = rep->egen;
+ REP_SYSTEM_UNLOCK(dbenv);
+ data_dbt.data = &egen;
+ data_dbt.size = sizeof(egen);
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_ALIVE, &rp->lsn, &data_dbt, 0, 0);
+ return (ret);
+ }
+ if (vi->egen > rep->egen) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Received VOTE1 from egen %lu, my egen %lu; reset",
+ (u_long)vi->egen, (u_long)rep->egen));
+ __rep_elect_done(dbenv, rep);
+ rep->egen = vi->egen;
+ }
+
+ /*
+ * If this site (sender of the VOTE1) is the first to the party, simply
+ * initialize values from the message. Otherwise, see if the site knows
+ * about more sites, and/or requires more votes, than we do.
+ */
+ if (!IN_ELECTION_TALLY(rep)) {
+ F_SET(rep, REP_F_TALLY);
+ rep->nsites = vi->nsites;
+ rep->nvotes = vi->nvotes;
+ } else {
+ if (vi->nsites > rep->nsites)
+ rep->nsites = vi->nsites;
+ if (vi->nvotes > rep->nvotes)
+ rep->nvotes = vi->nvotes;
+ }
+
+ /*
+ * 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) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Grow sites returned error %d", ret));
+ goto err;
+ }
+
+ /*
+ * Ignore vote1's if we're in phase 2.
+ */
+ if (F_ISSET(rep, REP_F_EPHASE2)) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "In phase 2, ignoring vote1"));
+ goto err;
+ }
+
+ /*
+ * 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) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Tally returned %d, sites %d",
+ ret, rep->sites));
+ ret = 0;
+ goto err;
+ }
+ RPRINT(dbenv, (dbenv, &mb,
+ "Incoming vote: (eid)%d (pri)%d %s (gen)%lu (egen)%lu [%lu,%lu]",
+ *eidp, vi->priority,
+ F_ISSET(rp, REPCTL_ELECTABLE) ? "ELECTABLE" : "",
+ (u_long)rp->gen, (u_long)vi->egen,
+ (u_long)rp->lsn.file, (u_long)rp->lsn.offset));
+#ifdef DIAGNOSTIC
+ if (rep->sites > 1)
+ RPRINT(dbenv, (dbenv, &mb,
+ "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
+ __rep_cmp_vote(dbenv, rep, *eidp, &rp->lsn, vi->priority,
+ rp->gen, vi->tiebreaker, rp->flags);
+ /*
+ * 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)) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Not in election, but received vote1 0x%x",
+ rep->flags));
+ ret = DB_REP_HOLDELECTION;
+ goto err;
+ }
+
+ master = rep->winner;
+ lsn = rep->w_lsn;
+ if (IS_PHASE1_DONE(rep)) {
+ RPRINT(dbenv,
+ (dbenv, &mb, "Phase1 election done"));
+ RPRINT(dbenv, (dbenv, &mb, "Voting for %d%s",
+ master, master == rep->eid ? "(self)" : ""));
+ egen = rep->egen;
+ F_SET(rep, REP_F_EPHASE2);
+ F_CLR(rep, REP_F_EPHASE1);
+ if (master == rep->eid) {
+ (void)__rep_tally(dbenv, rep, rep->eid,
+ &rep->votes, egen, rep->v2tally_off);
+ RPRINT(dbenv, (dbenv, &mb,
+ "After phase 1 done: counted vote %d of %d",
+ rep->votes, rep->nvotes));
+ if (I_HAVE_WON(rep, rep->winner)) {
+ __rep_elect_master(dbenv, rep, eidp);
+ ret = DB_REP_NEWMASTER;
+ }
+ goto err;
+ }
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ /* Vote for someone else. */
+ __rep_send_vote(dbenv, NULL, 0, 0, 0, 0, egen,
+ master, REP_VOTE2, 0);
+ } else
+err: REP_SYSTEM_UNLOCK(dbenv);
+ return (ret);
+}
+
+/*
+ * __rep_vote2 --
+ * Handle incoming vote2 message on a client.
+ *
+ * PUBLIC: int __rep_vote2 __P((DB_ENV *, DBT *, int *));
+ */
+int
+__rep_vote2(dbenv, rec, eidp)
+ DB_ENV *dbenv;
+ DBT *rec;
+ int *eidp;
+{
+ DB_LOG *dblp;
+ DB_LSN lsn;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ REP_OLD_VOTE_INFO *ovi;
+ REP_VOTE_INFO tmpvi, *vi;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ RPRINT(dbenv, (dbenv, &mb, "We received a vote%s",
+ F_ISSET(rep, REP_F_MASTER) ? " (master)" : ""));
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ LOG_SYSTEM_LOCK(dbenv);
+ lsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ rep->stat.st_elections_won++;
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0, 0);
+ return (ret);
+ }
+
+ REP_SYSTEM_LOCK(dbenv);
+
+ /* If we have priority 0, we should never get a vote. */
+ DB_ASSERT(dbenv, rep->priority != 0);
+
+ /*
+ * 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.
+ */
+ if (rep->version == DB_REPVERSION_42) {
+ ovi = (REP_OLD_VOTE_INFO *)rec->data;
+ tmpvi.egen = ovi->egen;
+ tmpvi.nsites = ovi->nsites;
+ tmpvi.nvotes = ovi->nsites / 2 + 1;
+ tmpvi.priority = ovi->priority;
+ tmpvi.tiebreaker = ovi->tiebreaker;
+ vi = &tmpvi;
+ } else
+ vi = (REP_VOTE_INFO *)rec->data;
+ if (!IN_ELECTION_TALLY(rep) && vi->egen >= rep->egen) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Not in election gen %lu, at %lu, got vote",
+ (u_long)vi->egen, (u_long)rep->egen));
+ ret = DB_REP_HOLDELECTION;
+ goto err;
+ }
+
+ /*
+ * 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 record it, because we simply
+ * may be processing messages out of order or its vote1 got lost,
+ * but that site got all the votes it needed to send 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.
+ */
+ /*
+ * Case 1.
+ */
+ if (vi->egen != rep->egen) {
+ RPRINT(dbenv, (dbenv, &mb, "Bad vote egen %lu. Mine %lu",
+ (u_long)vi->egen, (u_long)rep->egen));
+ ret = 0;
+ goto err;
+ }
+
+ /*
+ * __rep_tally takes care of cases 2, 3 and 4.
+ */
+ if ((ret = __rep_tally(dbenv, rep, *eidp, &rep->votes,
+ vi->egen, rep->v2tally_off)) != 0) {
+ ret = 0;
+ goto err;
+ }
+ RPRINT(dbenv, (dbenv, &mb, "Counted vote %d of %d",
+ rep->votes, rep->nvotes));
+ if (I_HAVE_WON(rep, rep->winner)) {
+ __rep_elect_master(dbenv, rep, eidp);
+ ret = DB_REP_NEWMASTER;
+ }
+
+err: REP_SYSTEM_UNLOCK(dbenv);
+ return (ret);
+}
+
+/*
+ * __rep_tally --
+ * Handle incoming vote 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.
+ */
+static int
+__rep_tally(dbenv, rep, eid, countp, egen, vtoff)
+ DB_ENV *dbenv;
+ REP *rep;
+ int eid, *countp;
+ u_int32_t egen;
+ roff_t vtoff;
+{
+ REP_VTALLY *tally, *vtp;
+ int i;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#else
+ 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) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Tally found[%d] (%d, %lu), this vote (%d, %lu)",
+ i, vtp->eid, (u_long)vtp->egen,
+ eid, (u_long)egen));
+ 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 (vtoff == rep->tally_off)
+ RPRINT(dbenv, (dbenv, &mb, "Tallying VOTE1[%d] (%d, %lu)",
+ i, eid, (u_long)egen));
+ else
+ RPRINT(dbenv, (dbenv, &mb, "Tallying VOTE2[%d] (%d, %lu)",
+ i, eid, (u_long)egen));
+#endif
+ vtp->eid = eid;
+ vtp->egen = egen;
+ (*countp)++;
+ return (0);
+}
+
+/*
+ * __rep_cmp_vote --
+ * Compare incoming vote1 message on a client. Called with the db_rep
+ * mutex held.
+ *
+ */
+static void
+__rep_cmp_vote(dbenv, rep, eid, lsnp, priority, gen, tiebreaker, flags)
+ DB_ENV *dbenv;
+ REP *rep;
+ int eid;
+ DB_LSN *lsnp;
+ int priority;
+ u_int32_t flags, gen, tiebreaker;
+{
+ int cmp;
+
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#else
+ 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 || LF_ISSET(REPCTL_ELECTABLE))) {
+ /*
+ * Special case, if we have a mixed version group of sites,
+ * we set priority to 0, but set the ELECTABLE flag so that
+ * all sites talking at lower versions can correctly elect.
+ * If a non-zero priority comes in and current winner is
+ * zero priority (but was electable), then the non-zero
+ * site takes precedence no matter what its LSN is.
+ *
+ * Then LSN is determinant only if we're comparing
+ * like-styled version/priorities. I.e. both with
+ * 0/ELECTABLE priority or both with non-zero priority.
+ * Then actual priority value if LSNs
+ * are equal, then tiebreaker if both are equal.
+ */
+ if ((priority != 0 && rep->w_priority == 0) ||
+ (((priority == 0 && rep->w_priority == 0) ||
+ (priority != 0 && rep->w_priority != 0)) && cmp > 0) ||
+ (cmp == 0 && (priority > rep->w_priority ||
+ (priority == rep->w_priority &&
+ (tiebreaker > rep->w_tiebreaker))))) {
+ RPRINT(dbenv, (dbenv, &mb, "Accepting new vote"));
+ rep->winner = eid;
+ rep->w_priority = priority;
+ rep->w_lsn = *lsnp;
+ rep->w_gen = gen;
+ rep->w_tiebreaker = tiebreaker;
+ }
+ } else if (rep->sites == 1) {
+ if (priority != 0 || LF_ISSET(REPCTL_ELECTABLE)) {
+ /* Make ourselves the winner to start. */
+ rep->winner = eid;
+ 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 = -1;
+ rep->w_gen = 0;
+ ZERO_LSN(rep->w_lsn);
+ rep->w_tiebreaker = 0;
+ }
+ }
+ return;
+}
+
+/*
+ * __rep_elect_init
+ * Initialize an election. Sets beginp non-zero if the election is
+ * already in progress; makes it 0 otherwise.
+ */
+static int
+__rep_elect_init(dbenv, lsnp, nsites, nvotes, beginp, otally)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+ int nsites, nvotes;
+ int *beginp;
+ u_int32_t *otally;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ ret = 0;
+
+ /* We may miscount, as we don't hold the replication mutex here. */
+ rep->stat.st_elections++;
+
+ /* If we are already a master; simply broadcast that fact and return. */
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_NEWMASTER, lsnp, NULL, 0, 0);
+ rep->stat.st_elections_won++;
+ return (DB_REP_NEWMASTER);
+ }
+
+ REP_SYSTEM_LOCK(dbenv);
+ if (otally != NULL)
+ *otally = F_ISSET(rep, REP_F_TALLY);
+ *beginp = IN_ELECTION(rep) || rep->elect_th;
+ if (!*beginp) {
+ /*
+ * Make sure that we always initialize all the election fields
+ * before putting ourselves in an election state. That means
+ * issuing calls that can fail (allocation) before setting all
+ * the variables.
+ */
+ if (nsites > rep->asites &&
+ (ret = __rep_grow_sites(dbenv, nsites)) != 0)
+ goto err;
+ DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTINIT, ret, NULL);
+ rep->elect_th = 1;
+ /*
+ * If we're the first to the party, we simply set initial
+ * values: pre-existing values would be left over from previous
+ * election.
+ */
+ if (!IN_ELECTION_TALLY(rep)) {
+ rep->nsites = nsites;
+ rep->nvotes = nvotes;
+ } else {
+ if (nsites > rep->nsites)
+ rep->nsites = nsites;
+ if (nvotes > rep->nvotes)
+ rep->nvotes = nvotes;
+ }
+ }
+DB_TEST_RECOVERY_LABEL
+err: REP_SYSTEM_UNLOCK(dbenv);
+ return (ret);
+}
+
+/*
+ * __rep_elect_master
+ * Set up for new master from election. Must be called with
+ * the replication region 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;
+{
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#else
+ COMPQUIET(dbenv, NULL);
+#endif
+ rep->master_id = rep->eid;
+ F_SET(rep, REP_F_MASTERELECT);
+ if (eidp != NULL)
+ *eidp = rep->master_id;
+ rep->stat.st_elections_won++;
+ RPRINT(dbenv, (dbenv, &mb,
+ "Got enough votes to win; election done; winner is %d, gen %lu",
+ rep->master_id, (u_long)rep->gen));
+}
+
+static int
+__rep_wait(dbenv, timeout, eidp, flags)
+ DB_ENV *dbenv;
+ u_int32_t timeout;
+ int *eidp;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ int done, echg;
+ u_int32_t egen, sleeptime;
+
+ done = echg = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ egen = rep->egen;
+
+ /*
+ * The user specifies an overall timeout function, but checking
+ * is cheap and the timeout may be a generous upper bound.
+ * Sleep repeatedly for the smaller of .5s and timeout/10.
+ */
+ sleeptime = (timeout > 5000000) ? 500000 : timeout / 10;
+ if (sleeptime == 0)
+ sleeptime++;
+ while (timeout > 0) {
+ __os_sleep(dbenv, 0, sleeptime);
+ REP_SYSTEM_LOCK(dbenv);
+ echg = egen != rep->egen;
+ done = !F_ISSET(rep, flags);
+
+ *eidp = rep->master_id;
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ if (done)
+ return (0);
+
+ if (echg)
+ return (DB_REP_EGENCHG);
+
+ if (timeout > sleeptime)
+ timeout -= sleeptime;
+ else
+ timeout = 0;
+ }
+ return (DB_TIMEOUT);
+}
diff --git a/db/rep/rep_log.c b/db/rep/rep_log.c
new file mode 100644
index 000000000..230b14e43
--- /dev/null
+++ b/db/rep/rep_log.c
@@ -0,0 +1,703 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_log.c,v 12.47 2006/09/11 19:41:20 sue Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/log.h"
+
+static int __rep_chk_newfile __P((DB_ENV *, DB_LOGC *, REP *,
+ REP_CONTROL *, int));
+
+/*
+ * __rep_allreq --
+ * Handle a REP_ALL_REQ message.
+ *
+ * PUBLIC: int __rep_allreq __P((DB_ENV *, REP_CONTROL *, int));
+ */
+int
+__rep_allreq(dbenv, rp, eid)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ int eid;
+{
+ DB_LOGC *logc;
+ DB_LSN oldfilelsn;
+ DB_REP *db_rep;
+ DBT data_dbt, newfiledbt;
+ REP *rep;
+ REP_BULK bulk;
+ REP_THROTTLE repth;
+ uintptr_t bulkoff;
+ u_int32_t bulkflags, flags, use_bulk, version;
+ int ret, t_ret;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+ memset(&data_dbt, 0, sizeof(data_dbt));
+ /*
+ * If we're doing bulk transfer, allocate a bulk buffer to put our
+ * log records in. We still need to initialize the throttle info
+ * because if we encounter a log record larger than our entire bulk
+ * buffer, we need to send it as a singleton and also we want to
+ * support throttling with bulk.
+ *
+ * Use a local var so we don't need to worry if someone else turns
+ * on/off bulk in the middle of our call.
+ */
+ use_bulk = FLD_ISSET(rep->config, REP_C_BULK);
+ if (use_bulk && (ret = __rep_bulk_alloc(dbenv, &bulk, eid,
+ &bulkoff, &bulkflags, REP_BULK_LOG)) != 0)
+ goto err;
+ memset(&repth, 0, sizeof(repth));
+ REP_SYSTEM_LOCK(dbenv);
+ repth.gbytes = rep->gbytes;
+ repth.bytes = rep->bytes;
+ oldfilelsn = repth.lsn = rp->lsn;
+ repth.type = REP_LOG;
+ repth.data_dbt = &data_dbt;
+ REP_SYSTEM_UNLOCK(dbenv);
+ flags = IS_ZERO_LSN(rp->lsn) ||
+ IS_INIT_LSN(rp->lsn) ? DB_FIRST : DB_SET;
+ /*
+ * We get the first item so that a client servicing requests
+ * can distinguish between not having the records and reaching
+ * the end of its log. Return the DB_NOTFOUND if the client
+ * cannot get the record. Return 0 if we finish the loop and
+ * sent all that we have.
+ */
+ ret = __log_c_get(logc, &repth.lsn, &data_dbt, flags);
+ /*
+ * If the client is asking for all records
+ * because it doesn't have any, and our first
+ * record is not in the first log file, then
+ * the client is outdated and needs to get a
+ * VERIFY_FAIL.
+ */
+ if (ret == 0 && repth.lsn.file != 1 && flags == DB_FIRST) {
+ (void)__rep_send_message(dbenv, eid,
+ REP_VERIFY_FAIL, &repth.lsn, NULL, 0, 0);
+ goto err;
+ }
+ /*
+ * If we got DB_NOTFOUND it could be because the LSN we were
+ * given is at the end of the log file and we need to switch
+ * log files. Reinitialize and get the current record when we return.
+ */
+ if (ret == DB_NOTFOUND) {
+ ret = __rep_chk_newfile(dbenv, logc, rep, rp, eid);
+ /*
+ * If we still get DB_NOTFOUND the client gave us a
+ * bad or unknown LSN. Ignore it if we're the master.
+ * Any other error is returned.
+ */
+ if (ret == 0)
+ ret = __log_c_get(logc, &repth.lsn,
+ &data_dbt, DB_CURRENT);
+ else if (ret == DB_NOTFOUND && F_ISSET(rep, REP_F_MASTER)) {
+ ret = 0;
+ goto err;
+ }
+ if (ret != 0)
+ goto err;
+ }
+
+ /*
+ * For singleton log records, we break when we get a REP_LOG_MORE.
+ * Or if we're not using throttling, or we are using bulk, we stop
+ * when we reach the end (i.e. ret != 0).
+ */
+ for (;
+ ret == 0 && repth.type != REP_LOG_MORE;
+ ret = __log_c_get(logc, &repth.lsn, &data_dbt, DB_NEXT)) {
+ if (repth.lsn.file != oldfilelsn.file) {
+ if ((ret = __log_c_version(logc, &version)) != 0)
+ break;
+ memset(&newfiledbt, 0, sizeof(newfiledbt));
+ newfiledbt.data = &version;
+ newfiledbt.size = sizeof(version);
+ (void)__rep_send_message(dbenv,
+ eid, REP_NEWFILE, &oldfilelsn, &newfiledbt, 0, 0);
+ }
+ /*
+ * If we are configured for bulk, try to send this as a bulk
+ * request. If not configured, or it is too big for bulk
+ * then just send normally.
+ */
+ if (use_bulk)
+ ret = __rep_bulk_message(dbenv, &bulk, &repth,
+ &repth.lsn, &data_dbt, REPCTL_RESEND);
+ if (!use_bulk || ret == DB_REP_BULKOVF)
+ ret = __rep_send_throttle(dbenv, eid, &repth, 0);
+ if (ret != 0)
+ break;
+ /*
+ * If we are about to change files, then we'll need the
+ * last LSN in the previous file. Save it here.
+ */
+ oldfilelsn = repth.lsn;
+ oldfilelsn.offset += logc->c_len;
+ }
+
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ /*
+ * We're done, force out whatever remains in the bulk buffer and
+ * free it.
+ */
+ if (use_bulk && (t_ret = __rep_bulk_free(dbenv, &bulk,
+ REPCTL_RESEND)) != 0 && ret == 0)
+ ret = t_ret;
+err:
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __rep_log --
+ * Handle a REP_LOG/REP_LOG_MORE message.
+ *
+ * PUBLIC: int __rep_log __P((DB_ENV *, REP_CONTROL *, DBT *,
+ * PUBLIC: time_t, DB_LSN *));
+ */
+int
+__rep_log(dbenv, rp, rec, savetime, ret_lsnp)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ DBT *rec;
+ time_t savetime;
+ DB_LSN *ret_lsnp;
+{
+ DB_LOG *dblp;
+ DB_LSN last_lsn, lsn;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ int is_dup, master, ret;
+
+ is_dup = ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ ret = __rep_apply(dbenv, rp, rec, ret_lsnp, &is_dup, &last_lsn);
+ switch (ret) {
+ /*
+ * We're in an internal backup and we've gotten
+ * all the log we need to run recovery. Do so now.
+ */
+ case DB_REP_LOGREADY:
+ if ((ret =
+ __rep_logready(dbenv, rep, savetime, &last_lsn)) != 0)
+ goto out;
+ break;
+ /*
+ * If we get any of the "normal" returns, we only process
+ * LOG_MORE if this is not a duplicate record. If the
+ * record is a duplicate we don't want to handle LOG_MORE
+ * and request a multiple data stream (or trigger internal
+ * initialization) since this could be a very old record
+ * that no longer exists on the master.
+ */
+ case DB_REP_ISPERM:
+ case DB_REP_NOTPERM:
+ case 0:
+ if (is_dup)
+ goto out;
+ else
+ break;
+ /*
+ * Any other return (errors), we're done.
+ */
+ default:
+ goto out;
+ }
+ if (rp->rectype == REP_LOG_MORE) {
+ REP_SYSTEM_LOCK(dbenv);
+ master = rep->master_id;
+ REP_SYSTEM_UNLOCK(dbenv);
+ LOG_SYSTEM_LOCK(dbenv);
+ lsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ /*
+ * 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 we've asked for a bunch of records, it could
+ * either be from a LOG_REQ or ALL_REQ. If we're
+ * waiting for a gap to be filled, call loggap_req,
+ * otherwise use ALL_REQ again.
+ */
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ if (master == DB_EID_INVALID) {
+ ret = 0;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ } else if (IS_ZERO_LSN(lp->waiting_lsn)) {
+ /*
+ * We're making an ALL_REQ. However, since we're
+ * in a LOG_MORE, this is in reply to a request and
+ * it is likely we may receive new records, even if
+ * we don't have any at this moment. So, to avoid
+ * multiple data streams, set the wait_recs high
+ * now to give the master a chance to start sending
+ * us these records before the gap code re-requests
+ * the same gap. Wait_recs will get reset once we
+ * start receiving these records.
+ */
+ lp->wait_recs = rep->max_gap;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ if (__rep_send_message(dbenv, master, REP_ALL_REQ,
+ &lsn, NULL, 0, DB_REP_ANYWHERE) != 0)
+ goto out;
+ } else {
+ ret = __rep_loggap_req(dbenv, rep, &lsn, REP_GAP_FORCE);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ }
+ }
+out:
+ return (ret);
+}
+
+/*
+ * __rep_bulk_log --
+ * Handle a REP_BULK_LOG message.
+ *
+ * PUBLIC: int __rep_bulk_log __P((DB_ENV *, REP_CONTROL *, DBT *,
+ * PUBLIC: time_t, DB_LSN *));
+ */
+int
+__rep_bulk_log(dbenv, rp, rec, savetime, ret_lsnp)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ DBT *rec;
+ time_t savetime;
+ DB_LSN *ret_lsnp;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ DB_LSN last_lsn;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ ret = __log_rep_split(dbenv, rp, rec, ret_lsnp, &last_lsn);
+ switch (ret) {
+ /*
+ * We're in an internal backup and we've gotten
+ * all the log we need to run recovery. Do so now.
+ */
+ case DB_REP_LOGREADY:
+ ret = __rep_logready(dbenv, rep, savetime, &last_lsn);
+ break;
+ /*
+ * Any other return (errors), we're done.
+ */
+ default:
+ break;
+ }
+ return (ret);
+}
+
+/*
+ * __rep_log_req --
+ * Handle a REP_LOG_REQ message.
+ *
+ * PUBLIC: int __rep_logreq __P((DB_ENV *, REP_CONTROL *, DBT *, int));
+ */
+int
+__rep_logreq(dbenv, rp, rec, eid)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ DBT *rec;
+ int eid;
+{
+ DB_LOGC *logc;
+ DB_LSN lsn, oldfilelsn;
+ DB_REP *db_rep;
+ DBT data_dbt, newfiledbt;
+ REP *rep;
+ REP_BULK bulk;
+ REP_THROTTLE repth;
+ uintptr_t bulkoff;
+ u_int32_t bulkflags, use_bulk, version;
+ int ret, t_ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ if (rec != NULL && rec->size != 0) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "[%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));
+ }
+ /*
+ * There are three different cases here.
+ * 1. We asked log_c_get for a particular LSN and got it.
+ * 2. We asked log_c_get 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 log_c_get 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 on a master).
+ *
+ * If we have a valid LSN and the request has a data_dbt with
+ * it, the sender is asking for a chunk of log records.
+ * Then we need to send all records up to the LSN in the data dbt.
+ */
+ memset(&data_dbt, 0, sizeof(data_dbt));
+ oldfilelsn = lsn = rp->lsn;
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+ ret = __log_c_get(logc, &lsn, &data_dbt, DB_SET);
+
+ if (ret == 0) /* Case 1 */
+ (void)__rep_send_message(dbenv,
+ eid, REP_LOG, &lsn, &data_dbt, REPCTL_RESEND, 0);
+ else if (ret == DB_NOTFOUND) {
+ ret = __rep_chk_newfile(dbenv, logc, rep, rp, eid);
+ if (ret == DB_NOTFOUND) {
+ /* Case 3 */
+ /*
+ * If we're a master, this is a problem.
+ * If we're a client servicing a request
+ * just return the DB_NOTFOUND.
+ */
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ __db_errx(dbenv,
+ "Request for LSN [%lu][%lu] fails",
+ (u_long)rp->lsn.file,
+ (u_long)rp->lsn.offset);
+ ret = EINVAL;
+ } else
+ ret = DB_NOTFOUND;
+ }
+ }
+
+ if (ret != 0)
+ goto err;
+
+ /*
+ * If the user requested a gap, send the whole thing, while observing
+ * the limits from rep_set_limit.
+ *
+ * If we're doing bulk transfer, allocate a bulk buffer to put our
+ * log records in. We still need to initialize the throttle info
+ * because if we encounter a log record larger than our entire bulk
+ * buffer, we need to send it as a singleton.
+ *
+ * Use a local var so we don't need to worry if someone else turns
+ * on/off bulk in the middle of our call.
+ */
+ use_bulk = FLD_ISSET(rep->config, REP_C_BULK);
+ if (use_bulk && (ret = __rep_bulk_alloc(dbenv, &bulk, eid,
+ &bulkoff, &bulkflags, REP_BULK_LOG)) != 0)
+ goto err;
+ memset(&repth, 0, sizeof(repth));
+ REP_SYSTEM_LOCK(dbenv);
+ repth.gbytes = rep->gbytes;
+ repth.bytes = rep->bytes;
+ repth.type = REP_LOG;
+ repth.data_dbt = &data_dbt;
+ REP_SYSTEM_UNLOCK(dbenv);
+ while (ret == 0 && rec != NULL && rec->size != 0 &&
+ repth.type == REP_LOG) {
+ if ((ret =
+ __log_c_get(logc, &repth.lsn, &data_dbt, DB_NEXT)) != 0) {
+ /*
+ * If we're a client and we only have part of the gap,
+ * return DB_NOTFOUND so that we send a REREQUEST
+ * back to the requester and it can ask for more.
+ */
+ if (ret == DB_NOTFOUND && F_ISSET(rep, REP_F_MASTER))
+ ret = 0;
+ break;
+ }
+ if (LOG_COMPARE(&repth.lsn, (DB_LSN *)rec->data) >= 0)
+ break;
+ if (repth.lsn.file != oldfilelsn.file) {
+ if ((ret = __log_c_version(logc, &version)) != 0)
+ break;
+ memset(&newfiledbt, 0, sizeof(newfiledbt));
+ newfiledbt.data = &version;
+ newfiledbt.size = sizeof(version);
+ (void)__rep_send_message(dbenv,
+ eid, REP_NEWFILE, &oldfilelsn, &newfiledbt, 0, 0);
+ }
+ /*
+ * If we are configured for bulk, try to send this as a bulk
+ * request. If not configured, or it is too big for bulk
+ * then just send normally.
+ */
+ if (use_bulk)
+ ret = __rep_bulk_message(dbenv, &bulk, &repth,
+ &repth.lsn, &data_dbt, REPCTL_RESEND);
+ if (!use_bulk || ret == DB_REP_BULKOVF)
+ ret = __rep_send_throttle(dbenv, eid, &repth, 0);
+ if (ret != 0)
+ break;
+ /*
+ * If we are about to change files, then we'll need the
+ * last LSN in the previous file. Save it here.
+ */
+ oldfilelsn = repth.lsn;
+ oldfilelsn.offset += logc->c_len;
+ }
+
+ /*
+ * We're done, force out whatever remains in the bulk buffer and
+ * free it.
+ */
+ if (use_bulk && (t_ret = __rep_bulk_free(dbenv, &bulk,
+ REPCTL_RESEND)) != 0 && ret == 0)
+ ret = t_ret;
+err:
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __rep_loggap_req -
+ * Request a log gap. Assumes the caller holds the REP->mtx_clientdb.
+ *
+ * lsnp is the current LSN we're handling. It is used to help decide
+ * if we ask for a gap or singleton.
+ * gapflags are flags that may override the algorithm or control the
+ * processing in some way.
+ *
+ * PUBLIC: int __rep_loggap_req __P((DB_ENV *, REP *, DB_LSN *, u_int32_t));
+ */
+int
+__rep_loggap_req(dbenv, rep, lsnp, gapflags)
+ DB_ENV *dbenv;
+ REP *rep;
+ DB_LSN *lsnp;
+ u_int32_t gapflags;
+{
+ DB_LOG *dblp;
+ DBT max_lsn_dbt, *max_lsn_dbtp;
+ DB_LSN next_lsn;
+ LOG *lp;
+ u_int32_t ctlflags, flags, type;
+
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ LOG_SYSTEM_LOCK(dbenv);
+ next_lsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ ctlflags = flags = 0;
+ type = REP_LOG_REQ;
+
+ /*
+ * Check if we need to ask for the gap.
+ * We ask for the gap if:
+ * We are forced to with gapflags.
+ * If max_wait_lsn is ZERO_LSN - we've never asked for
+ * records before.
+ * If we asked for a single record and received it.
+ *
+ * If we want a gap, but don't have an ending LSN (waiting_lsn)
+ * send an ALL_REQ. This is primarily used by REP_REREQUEST when
+ * an ALL_REQ was not able to be fulfilled by another client.
+ */
+ if (FLD_ISSET(gapflags, (REP_GAP_FORCE | REP_GAP_REREQUEST)) ||
+ IS_ZERO_LSN(lp->max_wait_lsn) ||
+ (lsnp != NULL && LOG_COMPARE(lsnp, &lp->max_wait_lsn) == 0)) {
+ lp->max_wait_lsn = lp->waiting_lsn;
+ if (IS_ZERO_LSN(lp->max_wait_lsn))
+ type = REP_ALL_REQ;
+ 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;
+ /*
+ * Gap requests are "new" and can go anywhere, unless
+ * this is already a rerequest.
+ */
+ if (FLD_ISSET(gapflags, REP_GAP_REREQUEST))
+ flags = DB_REP_REREQUEST;
+ else
+ flags = DB_REP_ANYWHERE;
+ } else {
+ max_lsn_dbtp = NULL;
+ lp->max_wait_lsn = next_lsn;
+ /*
+ * If we're dropping to singletons, this is a rerequest.
+ */
+ flags = DB_REP_REREQUEST;
+ }
+ if (rep->master_id != DB_EID_INVALID) {
+ rep->stat.st_log_requested++;
+ if (F_ISSET(rep, REP_F_RECOVER_LOG))
+ ctlflags = REPCTL_INIT;
+ (void)__rep_send_message(dbenv, rep->master_id,
+ type, &next_lsn, max_lsn_dbtp, ctlflags, flags);
+ } else
+ (void)__rep_send_message(dbenv, DB_EID_BROADCAST,
+ REP_MASTER_REQ, NULL, NULL, 0, 0);
+
+ return (0);
+}
+
+/*
+ * __rep_logready -
+ * Handle getting back REP_LOGREADY. Any call to __rep_apply
+ * can return it.
+ *
+ * PUBLIC: int __rep_logready __P((DB_ENV *, REP *, time_t, DB_LSN *));
+ */
+int
+__rep_logready(dbenv, rep, savetime, last_lsnp)
+ DB_ENV *dbenv;
+ REP *rep;
+ time_t savetime;
+ DB_LSN *last_lsnp;
+{
+ int ret;
+
+ if ((ret = __log_flush(dbenv, NULL)) != 0)
+ goto out;
+ if ((ret = __rep_verify_match(dbenv, last_lsnp,
+ savetime)) == 0) {
+ REP_SYSTEM_LOCK(dbenv);
+ ZERO_LSN(rep->first_lsn);
+ F_CLR(rep, REP_F_RECOVER_LOG);
+ REP_SYSTEM_UNLOCK(dbenv);
+ } else {
+out: __db_errx(dbenv,
+ "Client initialization failed. Need to manually restore client");
+ return (__db_panic(dbenv, ret));
+ }
+ return (ret);
+
+}
+
+/*
+ * __rep_chk_newfile --
+ * Determine if getting DB_NOTFOUND is because we're at the
+ * end of a log file and need to send a NEWFILE message.
+ *
+ * This function handles these cases:
+ * [Case 1 was that we found the record we were looking for - it
+ * is already handled by the caller.]
+ * 2. We asked log_c_get for an LSN and it's not found because it is
+ * beyond the end of a log file and we need a NEWFILE msg.
+ * 3. We asked log_c_get for an LSN and it simply doesn't exist, but
+ * doesn't meet any of those other criteria, in which case
+ * we return DB_NOTFOUND and the caller decides if it's an error.
+ *
+ * This function returns 0 if we had to send a message and the bad
+ * LSN is dealt with and DB_NOTFOUND if this really is an unknown LSN
+ * (on a client) and errors if it isn't found on the master.
+ */
+static int
+__rep_chk_newfile(dbenv, logc, rep, rp, eid)
+ DB_ENV *dbenv;
+ DB_LOGC *logc;
+ REP *rep;
+ REP_CONTROL *rp;
+ int eid;
+{
+ DB_LOG *dblp;
+ DB_LSN endlsn;
+ DBT data_dbt, newfiledbt;
+ LOG *lp;
+ u_int32_t version;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ ret = 0;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ memset(&data_dbt, 0, sizeof(data_dbt));
+ LOG_SYSTEM_LOCK(dbenv);
+ endlsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ if (endlsn.file > rp->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 = rp->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) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Unable to get prev of [%lu][%lu]",
+ (u_long)rp->lsn.file,
+ (u_long)rp->lsn.offset));
+ /*
+ * We want to push the error back
+ * to the client so that the client
+ * does an internal backup. The
+ * client asked for a log record
+ * we no longer have and it is
+ * outdated.
+ * XXX - This could be optimized by
+ * having the master perform and
+ * send a REP_UPDATE message. We
+ * currently want the client to set
+ * up its 'update' state prior to
+ * requesting REP_UPDATE_REQ.
+ *
+ * If we're a client servicing a request
+ * just return DB_NOTFOUND.
+ */
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ ret = 0;
+ (void)__rep_send_message(dbenv, eid,
+ REP_VERIFY_FAIL, &rp->lsn,
+ NULL, 0, 0);
+ } else
+ ret = DB_NOTFOUND;
+ } else {
+ endlsn.offset += logc->c_len;
+ if ((ret = __log_c_version(logc,
+ &version)) == 0) {
+ memset(&newfiledbt, 0,
+ sizeof(newfiledbt));
+ newfiledbt.data = &version;
+ newfiledbt.size = sizeof(version);
+ (void)__rep_send_message(dbenv, eid,
+ REP_NEWFILE, &endlsn,
+ &newfiledbt, 0, 0);
+ }
+ }
+ } else
+ ret = DB_NOTFOUND;
+
+ return (ret);
+}
diff --git a/db/rep/rep_method.c b/db/rep/rep_method.c
index 9e83dd729..749123e5f 100644
--- a/db/rep/rep_method.c
+++ b/db/rep/rep_method.c
@@ -1,115 +1,232 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep_method.c,v 1.167 2004/10/07 17:20:12 bostic Exp $
+ * $Id: rep_method.c,v 12.46 2006/09/09 14:19:20 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/btree.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
-#ifdef HAVE_RPC
-#include "dbinc_auto/rpc_client_ext.h"
-#endif
-
-static int __rep_abort_prepared __P((DB_ENV *));
-static int __rep_bt_cmp __P((DB *, const DBT *, const DBT *));
-static int __rep_elect
- __P((DB_ENV *, int, int, int, u_int32_t, int *, u_int32_t));
-static int __rep_elect_init
- __P((DB_ENV *, DB_LSN *, int, 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 *, const DB_LSN *,
- int, u_int32_t)));
-static int __rep_start __P((DB_ENV *, DBT *, u_int32_t));
-static int __rep_wait __P((DB_ENV *, u_int32_t, int *, u_int32_t));
+static int __rep_abort_prepared __P((DB_ENV *));
+static int __rep_bt_cmp __P((DB *, const DBT *, const DBT *));
+static void __rep_config_map __P((DB_ENV *, u_int32_t *, u_int32_t *));
+static u_int32_t __rep_conv_vers __P((DB_ENV *, u_int32_t));
+static int __rep_restore_prepared __P((DB_ENV *));
/*
* __rep_dbenv_create --
* Replication-specific initialization of the DB_ENV structure.
*
- * PUBLIC: void __rep_dbenv_create __P((DB_ENV *));
+ * PUBLIC: int __rep_dbenv_create __P((DB_ENV *));
*/
-void
+int
__rep_dbenv_create(dbenv)
DB_ENV *dbenv;
{
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
- 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->rep_stat_print = NULL;
- 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;
+ DB_REP *db_rep;
+ int ret;
- } else
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_REP), &db_rep)) != 0)
+ return (ret);
+
+ db_rep->eid = DB_EID_INVALID;
+ db_rep->request_gap = DB_REP_REQUEST_GAP;
+ db_rep->max_gap = DB_REP_MAX_GAP;
+
+#ifdef HAVE_REPLICATION_THREADS
+ if ((ret = __repmgr_dbenv_create(dbenv, db_rep)) != 0) {
+ __os_free(dbenv, db_rep);
+ return (ret);
+ }
+#endif
+
+ dbenv->rep_handle = db_rep;
+ return (0);
+}
+
+/*
+ * __rep_dbenv_destroy --
+ * Replication-specific destruction of the DB_ENV structure.
+ *
+ * PUBLIC: void __rep_dbenv_destroy __P((DB_ENV *));
+ */
+void
+__rep_dbenv_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ if (dbenv->rep_handle != NULL) {
+#ifdef HAVE_REPLICATION_THREADS
+ __repmgr_dbenv_destroy(dbenv, dbenv->rep_handle);
#endif
- {
- 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_pp;
- dbenv->rep_stat_print = __rep_stat_print_pp;
- 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;
+ __os_free(dbenv, dbenv->rep_handle);
+ dbenv->rep_handle = NULL;
}
}
/*
- * __rep_open --
- * Replication-specific initialization of the DB_ENV structure.
+ * __rep_get_config --
+ * Return the replication subsystem configuration.
*
- * PUBLIC: int __rep_open __P((DB_ENV *));
+ * PUBLIC: int __rep_get_config __P((DB_ENV *, u_int32_t, int *));
*/
int
-__rep_open(dbenv)
+__rep_get_config(dbenv, which, onp)
DB_ENV *dbenv;
+ u_int32_t which;
+ int *onp;
{
DB_REP *db_rep;
+ REP *rep;
+ u_int32_t mapped;
+
+#undef OK_FLAGS
+#define OK_FLAGS \
+ (DB_REP_CONF_BULK | DB_REP_CONF_DELAYCLIENT | \
+ DB_REP_CONF_NOAUTOINIT | DB_REP_CONF_NOWAIT)
+
+ if (FLD_ISSET(which, ~OK_FLAGS))
+ return (__db_ferr(dbenv, "DB_ENV->rep_get_config", 0));
+
+ db_rep = dbenv->rep_handle;
+ ENV_NOT_CONFIGURED(
+ dbenv, db_rep->region, "DB_ENV->rep_get_config", DB_INIT_REP);
+
+ mapped = 0;
+ __rep_config_map(dbenv, &which, &mapped);
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ if (FLD_ISSET(rep->config, mapped))
+ *onp = 1;
+ else
+ *onp = 0;
+ } else {
+ if (FLD_ISSET(db_rep->config, mapped))
+ *onp = 1;
+ else
+ *onp = 0;
+ }
+ return (0);
+}
+
+/*
+ * __rep_set_config --
+ * Configure the replication subsystem.
+ *
+ * PUBLIC: int __rep_set_config __P((DB_ENV *, u_int32_t, int));
+ */
+int
+__rep_set_config(dbenv, which, on)
+ DB_ENV *dbenv;
+ u_int32_t which;
+ int on;
+{
+ DB_LOG *dblp;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ REP_BULK bulk;
int ret;
+ u_int32_t mapped, orig;
- if ((ret = __os_calloc(dbenv, 1, sizeof(DB_REP), &db_rep)) != 0)
- return (ret);
- dbenv->rep_handle = db_rep;
- ret = __rep_region_init(dbenv);
+ ret = 0;
+
+#undef OK_FLAGS
+#define OK_FLAGS \
+ (DB_REP_CONF_BULK | DB_REP_CONF_DELAYCLIENT | \
+ DB_REP_CONF_NOAUTOINIT | DB_REP_CONF_NOWAIT)
+
+ if (FLD_ISSET(which, ~OK_FLAGS))
+ return (__db_ferr(dbenv, "DB_ENV->rep_set_config", 0));
+
+ db_rep = dbenv->rep_handle;
+ ENV_NOT_CONFIGURED(
+ dbenv, db_rep->region, "DB_ENV->rep_set_config", DB_INIT_REP);
+
+ mapped = 0;
+ __rep_config_map(dbenv, &which, &mapped);
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ REP_SYSTEM_LOCK(dbenv);
+ orig = rep->config;
+ if (on)
+ FLD_SET(rep->config, mapped);
+ else
+ FLD_CLR(rep->config, mapped);
+
+ /*
+ * Bulk transfer requires special processing if it is getting
+ * toggled.
+ */
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ if (FLD_ISSET(rep->config, REP_C_BULK) &&
+ !FLD_ISSET(orig, REP_C_BULK))
+ db_rep->bulk = R_ADDR(&dblp->reginfo, lp->bulk_buf);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ /*
+ * If turning bulk off and it was on, send out whatever is in
+ * the buffer already.
+ */
+ if (FLD_ISSET(orig, REP_C_BULK) &&
+ !FLD_ISSET(rep->config, REP_C_BULK) && lp->bulk_off != 0) {
+ memset(&bulk, 0, sizeof(bulk));
+ if (db_rep->bulk == NULL)
+ bulk.addr =
+ R_ADDR(&dblp->reginfo, lp->bulk_buf);
+ else
+ bulk.addr = db_rep->bulk;
+ bulk.offp = &lp->bulk_off;
+ bulk.len = lp->bulk_len;
+ bulk.type = REP_BULK_LOG;
+ bulk.eid = DB_EID_BROADCAST;
+ bulk.flagsp = &lp->bulk_flags;
+ ret = __rep_send_bulk(dbenv, &bulk, 0);
+ }
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ } else {
+ if (on)
+ FLD_SET(db_rep->config, mapped);
+ else
+ FLD_CLR(db_rep->config, mapped);
+ }
return (ret);
}
+static void
+__rep_config_map(dbenv, inflagsp, outflagsp)
+ DB_ENV *dbenv;
+ u_int32_t *inflagsp, *outflagsp;
+{
+ COMPQUIET(dbenv, NULL);
+
+ if (FLD_ISSET(*inflagsp, DB_REP_CONF_BULK)) {
+ FLD_SET(*outflagsp, REP_C_BULK);
+ FLD_CLR(*inflagsp, DB_REP_CONF_BULK);
+ }
+ if (FLD_ISSET(*inflagsp, DB_REP_CONF_DELAYCLIENT)) {
+ FLD_SET(*outflagsp, REP_C_DELAYCLIENT);
+ FLD_CLR(*inflagsp, DB_REP_CONF_DELAYCLIENT);
+ }
+ if (FLD_ISSET(*inflagsp, DB_REP_CONF_NOAUTOINIT)) {
+ FLD_SET(*outflagsp, REP_C_NOAUTOINIT);
+ FLD_CLR(*inflagsp, DB_REP_CONF_NOAUTOINIT);
+ }
+ if (FLD_ISSET(*inflagsp, DB_REP_CONF_NOWAIT)) {
+ FLD_SET(*outflagsp, REP_C_NOWAIT);
+ FLD_CLR(*inflagsp, DB_REP_CONF_NOWAIT);
+ }
+}
+
/*
* __rep_start --
* Become a master or client, and start sending messages to participate
@@ -121,7 +238,8 @@ __rep_open(dbenv)
* 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->lockout_th - this is set if a thread is in rep_start or other
+ * operation requiring lockout with rep_proc_msg threads.
* 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
@@ -135,8 +253,10 @@ __rep_open(dbenv)
* 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.
+ *
+ * PUBLIC: int __rep_start __P((DB_ENV *, DBT *, u_int32_t));
*/
-static int
+int
__rep_start(dbenv, dbt, flags)
DB_ENV *dbenv;
DBT *dbt;
@@ -145,20 +265,22 @@ __rep_start(dbenv, dbt, flags)
DB_LOG *dblp;
DB_LSN lsn;
DB_REP *db_rep;
+ LOG *lp;
REP *rep;
- u_int32_t repflags;
- int announce, init_db, redo_prepared, ret, role_chg;
- int sleep_cnt, t_ret;
+ u_int32_t oldvers, pending_event, repflags;
+ int announce, init_db, locked, redo_prepared, ret, role_chg;
+ int t_ret;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
#endif
PANIC_CHECK(dbenv);
- ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->rep_start");
- ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_start", DB_INIT_REP);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_start", DB_INIT_REP);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
+ locked = 0;
if ((ret = __db_fchk(dbenv, "DB_ENV->rep_start", flags,
DB_REP_CLIENT | DB_REP_MASTER)) != 0)
@@ -169,83 +291,78 @@ __rep_start(dbenv, dbt, flags)
"DB_ENV->rep_start", flags, DB_REP_CLIENT, DB_REP_MASTER)) != 0)
return (ret);
if (!LF_ISSET(DB_REP_CLIENT | DB_REP_MASTER)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->rep_start: replication mode must be specified");
return (EINVAL);
}
/* We need a transport function. */
- if (dbenv->rep_send == NULL) {
- __db_err(dbenv,
- "DB_ENV->set_rep_transport must be called before DB_ENV->rep_start");
+ if (db_rep->send == NULL) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_set_transport must be called before DB_ENV->rep_start");
return (EINVAL);
}
/*
- * 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.
+ * In order to correctly check log files for old versions, we
+ * need to flush the logs.
*/
- if (LF_ISSET(DB_REP_MASTER) && (ret = __log_flush(dbenv, NULL)) != 0)
+ if ((ret = __log_flush(dbenv, NULL)) != 0)
return (ret);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ pending_event = DB_EVENT_NO_SUCH_EVENT;
+ REP_SYSTEM_LOCK(dbenv);
/*
* 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.
+ * its work and have this thread simply return. Similarly,
+ * if a thread is in a critical lockout section we return.
*/
- if (rep->start_th != 0) {
+ if (rep->lockout_th != 0) {
/*
- * There is already someone in rep_start. Return.
+ * There is already someone in lockout. Return.
*/
- RPRINT(dbenv, rep, (dbenv, &mb, "Thread already in rep_start"));
+ RPRINT(dbenv, (dbenv, &mb, "Thread already in lockout"));
goto err;
- } else
- rep->start_th = 1;
+ } else if ((ret = __rep_lockout_msg(dbenv, rep, 0)) != 0)
+ goto errunlock;
- role_chg = (F_ISSET(rep, REP_F_CLIENT) && LF_ISSET(DB_REP_MASTER)) ||
- (F_ISSET(rep, REP_F_MASTER) && LF_ISSET(DB_REP_CLIENT));
+ role_chg = (!F_ISSET(rep, REP_F_MASTER) && LF_ISSET(DB_REP_MASTER)) ||
+ (!F_ISSET(rep, REP_F_CLIENT) && LF_ISSET(DB_REP_CLIENT));
/*
* Wait for any active txns or mpool ops to complete, and
* prevent any new ones from occurring, only if we're
- * changing roles. If we are not changing roles, then we
- * only need to coordinate with msg_th.
+ * changing roles.
*/
- if (role_chg)
- __rep_lockout(dbenv, db_rep, rep, 0);
- else {
- 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);
- __os_sleep(dbenv, 1, 0);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- }
+ if (role_chg) {
+ if ((ret = __rep_lockout_api(dbenv, rep)) != 0)
+ goto errunlock;
+ locked = 1;
}
- if (rep->eid == DB_EID_INVALID)
- rep->eid = dbenv->rep_eid;
-
if (LF_ISSET(DB_REP_MASTER)) {
if (role_chg) {
/*
* If we're upgrading from having been a client,
- * preclose, so that we close our temporary database.
- *
- * Do not close files that we may have opened while
- * doing a rep_apply; they'll get closed when we
- * finally close the environment, but for now, leave
- * them open, as we don't want to recycle their
- * fileids, and we may need the handles again if
- * we become a client and the original master
- * that opened them becomes a master again.
+ * preclose, so that we close our temporary database
+ * and any files we opened while doing a rep_apply.
+ * If we don't we can infinitely leak file ids if
+ * the master crashed with files open (the likely
+ * case). If we don't close them we can run into
+ * problems if we try to remove that file or long
+ * running applications end up with an unbounded
+ * number of used fileids, each getting written
+ * on checkpoint. Just close them.
+ * Then invalidate all files open in the logging
+ * region. These are files open by other processes
+ * attached to the environment. They must be
+ * closed by the other processes when they notice
+ * the change in role.
*/
- if ((ret = __rep_preclose(dbenv, 0)) != 0)
+ if ((ret = __rep_preclose(dbenv)) != 0)
goto errunlock;
+
}
redo_prepared = 0;
@@ -273,38 +390,68 @@ __rep_start(dbenv, dbt, flags)
}
if (rep->egen <= rep->gen)
rep->egen = rep->gen + 1;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"New master gen %lu, egen %lu",
(u_long)rep->gen, (u_long)rep->egen));
}
rep->master_id = rep->eid;
/*
- * Note, setting flags below implicitly clears out
- * REP_F_NOARCHIVE, REP_F_INIT and REP_F_READY.
+ * Clear out almost everything, and then set MASTER. Leave
+ * READY alone in case we did a lockout above; we'll clear it in
+ * a moment (below), once we've written the txn_recycle into the
+ * log.
*/
- rep->flags = REP_F_MASTER;
- rep->start_th = 0;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ repflags = F_ISSET(rep, REP_F_READY);
+ FLD_SET(repflags, REP_F_MASTER);
+ rep->flags = repflags;
+
dblp = (DB_LOG *)dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = ((LOG *)dblp->reginfo.primary)->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ lp = dblp->reginfo.primary;
+ /*
+ * We're master. Set the versions to the current ones.
+ */
+ oldvers = lp->persist.version;
+ /*
+ * If we're moving forward to the current version, we need
+ * to force the log file to advance and reset the
+ * recovery table since it contains pointers to old
+ * recovery functions.
+ */
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_start: Old log version was %lu", (u_long)oldvers));
+ if (lp->persist.version != DB_LOGVERSION) {
+ if ((ret = __env_init_rec(dbenv, DB_LOGVERSION)) != 0)
+ goto errunlock;
+ }
+ rep->version = DB_REPVERSION;
+ rep->lockout_th = 0;
+ REP_SYSTEM_UNLOCK(dbenv);
+ LOG_SYSTEM_LOCK(dbenv);
+ lsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
/*
* 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
+ * We need to perform all actions below no matter what
* regarding errors.
*/
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0);
+ DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0, 0);
ret = 0;
if (role_chg) {
- ret = __txn_reset(dbenv);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ pending_event = DB_EVENT_REP_MASTER;
+ ret = __dbreg_invalidate_files(dbenv);
+ if ((t_ret = __rep_closefiles(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __txn_reset(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ DB_ENV_TEST_RECYCLE(dbenv, ret);
+ REP_SYSTEM_LOCK(dbenv);
F_CLR(rep, REP_F_READY);
rep->in_recovery = 0;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ locked = 0;
+ REP_SYSTEM_UNLOCK(dbenv);
}
/*
* Take a transaction checkpoint so that our new generation
@@ -321,10 +468,9 @@ __rep_start(dbenv, dbt, flags)
announce = role_chg || rep->master_id == DB_EID_INVALID;
/*
- * If we're changing roles from master to client or if
- * we never were any role at all, we need to init the db.
+ * If we're changing roles we need to init the db.
*/
- if (role_chg || !F_ISSET(rep, REP_F_CLIENT)) {
+ if (role_chg) {
rep->master_id = DB_EID_INVALID;
init_db = 1;
}
@@ -332,9 +478,18 @@ __rep_start(dbenv, dbt, flags)
repflags = F_ISSET(rep, REP_F_NOARCHIVE |
REP_F_RECOVER_MASK | REP_F_TALLY);
FLD_SET(repflags, REP_F_CLIENT);
-
+ if ((ret = __log_get_oldversion(dbenv, &oldvers)) != 0)
+ goto errunlock;
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_start: Found old version log %d", oldvers));
+ if (oldvers >= DB_LOGVERSION_42) {
+ __log_set_version(dbenv, oldvers);
+ oldvers = __rep_conv_vers(dbenv, oldvers);
+ DB_ASSERT(dbenv, oldvers != DB_REPVERSION_INVALID);
+ rep->version = oldvers;
+ }
rep->flags = repflags;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
/*
* Abort any prepared transactions that were restored
@@ -347,18 +502,21 @@ __rep_start(dbenv, dbt, flags)
if ((ret = __rep_abort_prepared(dbenv)) != 0)
goto errlock;
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
ret = __rep_client_dbinit(dbenv, init_db, REP_DB);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
if (ret != 0)
goto errlock;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- rep->start_th = 0;
- if (role_chg) {
+ if (role_chg)
+ pending_event = DB_EVENT_REP_CLIENT;
+ REP_SYSTEM_LOCK(dbenv);
+ rep->lockout_th = 0;
+ if (locked) {
F_CLR(rep, REP_F_READY);
rep->in_recovery = 0;
+ locked = 0;
}
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
/*
* If this client created a newly replicated environment,
@@ -370,30 +528,31 @@ __rep_start(dbenv, dbt, flags)
*/
if (announce)
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWCLIENT, NULL, dbt, 0);
+ DB_EID_BROADCAST, REP_NEWCLIENT, NULL, dbt, 0, 0);
else
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_ALIVE_REQ, NULL, NULL, 0);
+ DB_EID_BROADCAST, REP_ALIVE_REQ, NULL, NULL, 0, 0);
}
if (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
+ * error before we've set lockout_th, we use 'err'. If
+ * we are erroring while holding the region 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;
- if (role_chg) {
+DB_TEST_RECOVERY_LABEL
+errlock: REP_SYSTEM_LOCK(dbenv);
+errunlock: rep->lockout_th = 0;
+ if (locked) {
F_CLR(rep, REP_F_READY);
rep->in_recovery = 0;
}
-err: MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+err: REP_SYSTEM_UNLOCK(dbenv);
}
+ if (pending_event != DB_EVENT_NO_SUCH_EVENT)
+ DB_EVENT(dbenv, pending_event, NULL);
return (ret);
}
@@ -428,9 +587,6 @@ __rep_client_dbinit(dbenv, startup, which)
rep = db_rep->region;
dbp = NULL;
-#define REPDBNAME "__db.rep.db"
-#define REPPAGENAME "__db.reppg.db"
-
if (which == REP_DB) {
name = REPDBNAME;
rdbpp = &db_rep->rep_db;
@@ -443,7 +599,7 @@ __rep_client_dbinit(dbenv, startup, which)
return (0);
if (startup) {
- if ((ret = db_create(&dbp, dbenv, DB_REP_CREATE)) != 0)
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
goto err;
/*
* Ignore errors, because if the file doesn't exist, this
@@ -452,7 +608,7 @@ __rep_client_dbinit(dbenv, startup, which)
(void)__db_remove(dbp, NULL, name, NULL, DB_FORCE);
}
- if ((ret = db_create(&dbp, dbenv, DB_REP_CREATE)) != 0)
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
goto err;
if (which == REP_DB &&
(ret = __bam_set_bt_compare(dbp, __rep_bt_cmp)) != 0)
@@ -545,10 +701,10 @@ __rep_abort_prepared(dbenv)
region = mgr->reginfo.primary;
do_aborts = 0;
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
if (region->stat.st_nrestores != 0)
do_aborts = 1;
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
if (do_aborts) {
op = DB_FIRST;
@@ -584,18 +740,26 @@ __rep_restore_prepared(dbenv)
{
DB_LOGC *logc;
DB_LSN ckp_lsn, lsn;
+ DB_REP *db_rep;
+ DB_TXNHEAD *txninfo;
DBT rec;
+ REP *rep;
__txn_ckp_args *ckp_args;
+ __txn_ckp_42_args *ckp42_args;
__txn_regop_args *regop_args;
+ __txn_regop_42_args *regop42_args;
__txn_xa_regop_args *prep_args;
int ret, t_ret;
- u_int32_t hi_txn, low_txn, rectype, status;
- void *txninfo;
+ u_int32_t hi_txn, low_txn, rectype, status, txnid, txnop;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
txninfo = NULL;
ckp_args = NULL;
+ ckp42_args = NULL;
prep_args = NULL;
regop_args = NULL;
+ regop42_args = NULL;
ZERO_LSN(ckp_lsn);
ZERO_LSN(lsn);
@@ -616,24 +780,34 @@ __rep_restore_prepared(dbenv)
memset(&rec, 0, sizeof(DBT));
if ((ret = __txn_getckp(dbenv, &lsn)) == 0) {
if ((ret = __log_c_get(logc, &lsn, &rec, DB_SET)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Checkpoint record at LSN [%lu][%lu] not found",
(u_long)lsn.file, (u_long)lsn.offset);
goto err;
}
- if ((ret = __txn_ckp_read(dbenv, rec.data, &ckp_args)) != 0) {
- __db_err(dbenv,
+ if (rep->version >= DB_REPVERSION_43) {
+ if ((ret = __txn_ckp_read(dbenv, rec.data,
+ &ckp_args)) == 0) {
+ ckp_lsn = ckp_args->ckp_lsn;
+ __os_free(dbenv, ckp_args);
+ }
+ } else {
+ if ((ret = __txn_ckp_42_read(dbenv, rec.data,
+ &ckp42_args)) == 0) {
+ ckp_lsn = ckp42_args->ckp_lsn;
+ __os_free(dbenv, ckp42_args);
+ }
+ }
+ if (ret != 0) {
+ __db_errx(dbenv,
"Invalid checkpoint record at [%lu][%lu]",
(u_long)lsn.file, (u_long)lsn.offset);
goto err;
}
- ckp_lsn = ckp_args->ckp_lsn;
- __os_free(dbenv, ckp_args);
-
if ((ret = __log_c_get(logc, &ckp_lsn, &rec, DB_SET)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Checkpoint LSN record [%lu][%lu] not found",
(u_long)ckp_lsn.file, (u_long)ckp_lsn.offset);
goto err;
@@ -644,7 +818,7 @@ __rep_restore_prepared(dbenv)
ret = 0;
goto done;
}
- __db_err(dbenv, "Attempt to get first log record failed");
+ __db_errx(dbenv, "Attempt to get first log record failed");
goto err;
}
@@ -676,7 +850,7 @@ __rep_restore_prepared(dbenv)
* Note that DB_NOTFOUND is unacceptable here because we
* had to have looked at some log record to get this far.
*/
- __db_err(dbenv, "Final log record not found");
+ __db_errx(dbenv, "Final log record not found");
goto err;
}
do {
@@ -708,7 +882,7 @@ __rep_restore_prepared(dbenv)
* were isolated, this should be safe.
*/
for (ret = __log_c_get(logc, &lsn, &rec, DB_LAST);
- ret == 0 && log_compare(&lsn, &ckp_lsn) > 0;
+ ret == 0 && LOG_COMPARE(&lsn, &ckp_lsn) > 0;
ret = __log_c_get(logc, &lsn, &rec, DB_PREV)) {
memcpy(&rectype, rec.data, sizeof(rectype));
switch (rectype) {
@@ -718,19 +892,29 @@ __rep_restore_prepared(dbenv)
* which! Just add it to the list of txns
* that are resolved.
*/
- if ((ret = __txn_regop_read(dbenv, rec.data,
- &regop_args)) != 0)
- goto err;
+ if (rep->version >= DB_REPVERSION_44) {
+ if ((ret = __txn_regop_read(dbenv, rec.data,
+ &regop_args)) != 0)
+ goto err;
+ txnid = regop_args->txnp->txnid;
+ txnop = regop_args->opcode;
+ __os_free(dbenv, regop_args);
+ } else {
+ if ((ret = __txn_regop_42_read(dbenv, rec.data,
+ &regop42_args)) != 0)
+ goto err;
+ txnid = regop42_args->txnp->txnid;
+ txnop = regop42_args->opcode;
+ __os_free(dbenv, regop42_args);
+ }
ret = __db_txnlist_find(dbenv,
- txninfo, regop_args->txnid->txnid, &status);
+ txninfo, txnid, &status);
if (ret == DB_NOTFOUND)
ret = __db_txnlist_add(dbenv, txninfo,
- regop_args->txnid->txnid,
- regop_args->opcode, &lsn);
+ txnid, txnop, &lsn);
else if (ret != 0)
goto err;
- __os_free(dbenv, regop_args);
break;
case DB___txn_xa_regop:
/*
@@ -742,11 +926,11 @@ __rep_restore_prepared(dbenv)
&prep_args)) != 0)
goto err;
ret = __db_txnlist_find(dbenv, txninfo,
- prep_args->txnid->txnid, &status);
+ prep_args->txnp->txnid, &status);
if (ret == DB_NOTFOUND) {
if (prep_args->opcode == TXN_ABORT)
ret = __db_txnlist_add(dbenv, txninfo,
- prep_args->txnid->txnid,
+ prep_args->txnp->txnid,
prep_args->opcode, &lsn);
else if ((ret =
__rep_process_txn(dbenv, &rec)) == 0)
@@ -774,7 +958,14 @@ err: t_ret = __log_c_close(logc);
return (ret == 0 ? t_ret : ret);
}
-static int
+/*
+ * __rep_get_limit --
+ * Get the limit on the amount of data that will be sent during a single
+ * invocation of __rep_process_message.
+ *
+ * PUBLIC: int __rep_get_limit __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ */
+int
__rep_get_limit(dbenv, gbytesp, bytesp)
DB_ENV *dbenv;
u_int32_t *gbytesp, *bytesp;
@@ -782,22 +973,24 @@ __rep_get_limit(dbenv, 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;
+ ENV_NOT_CONFIGURED(
+ dbenv, db_rep->region, "DB_ENV->rep_get_limit", DB_INIT_REP);
+
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ REP_SYSTEM_LOCK(dbenv);
+ if (gbytesp != NULL)
+ *gbytesp = rep->gbytes;
+ if (bytesp != NULL)
+ *bytesp = rep->bytes;
+ REP_SYSTEM_UNLOCK(dbenv);
+ } else {
+ if (gbytesp != NULL)
+ *gbytesp = db_rep->gbytes;
+ if (bytesp != NULL)
+ *bytesp = db_rep->bytes;
+ }
return (0);
}
@@ -806,8 +999,10 @@ __rep_get_limit(dbenv, gbytesp, bytesp)
* __rep_set_limit --
* Set a limit on the amount of data that will be sent during a single
* invocation of __rep_process_message.
+ *
+ * PUBLIC: int __rep_set_limit __P((DB_ENV *, u_int32_t, u_int32_t));
*/
-static int
+int
__rep_set_limit(dbenv, gbytes, bytes)
DB_ENV *dbenv;
u_int32_t gbytes, bytes;
@@ -815,448 +1010,178 @@ __rep_set_limit(dbenv, 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 (!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->rep_mutexp);
+ ENV_NOT_CONFIGURED(
+ dbenv, db_rep->region, "DB_ENV->rep_set_limit", DB_INIT_REP);
+
if (bytes > GIGABYTE) {
gbytes += bytes / GIGABYTE;
bytes = bytes % GIGABYTE;
}
- rep->gbytes = gbytes;
- rep->bytes = bytes;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ REP_SYSTEM_LOCK(dbenv);
+ rep->gbytes = gbytes;
+ rep->bytes = bytes;
+ REP_SYSTEM_UNLOCK(dbenv);
+ } else {
+ db_rep->gbytes = gbytes;
+ db_rep->bytes = bytes;
+ }
return (0);
}
/*
- * __rep_set_request --
- * Set the minimum and maximum number of log records that we wait
- * before retransmitting.
- * UNDOCUMENTED.
+ * PUBLIC: int __rep_set_nsites __P((DB_ENV *, int));
*/
-static int
-__rep_set_request(dbenv, min, max)
+int
+__rep_set_nsites(dbenv, n)
DB_ENV *dbenv;
- u_int32_t min, max;
+ int n;
{
- LOG *lp;
- DB_LOG *dblp;
DB_REP *db_rep;
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 (!REP_ON(dbenv)) {
- __db_err(dbenv,
- "DB_ENV->set_rep_request: database environment not properly initialized");
- return (__db_panic(dbenv, EINVAL));
+ if (n <= 0) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_set_nsites: nsites must be a positive number");
+ return (EINVAL);
}
+
db_rep = dbenv->rep_handle;
- rep = db_rep->region;
- /*
- * 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->rep_mutexp);
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- dblp = dbenv->lg_handle;
- if (dblp != NULL && (lp = dblp->reginfo.primary) != NULL) {
- lp->wait_recs = 0;
- lp->rcvd_recs = 0;
- }
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ /* TODO: ENV_REQUIRES_CONFIG(... ) and/or ENV_NOT_CONFIGURED (?) */
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ rep->config_nsites = n;
+ } else
+ db_rep->config_nsites = n;
return (0);
}
/*
- * __rep_set_transport --
- * Set the transport function for replication.
+ * PUBLIC: int __rep_get_nsites __P((DB_ENV *, int *));
*/
-static int
-__rep_set_rep_transport(dbenv, eid, f_send)
+int
+__rep_get_nsites(dbenv, n)
DB_ENV *dbenv;
- int eid;
- int (*f_send) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
- int, u_int32_t));
+ int *n;
{
- PANIC_CHECK(dbenv);
+ DB_REP *db_rep;
+ REP *rep;
+
+ db_rep = dbenv->rep_handle;
+
+ /* TODO: ENV_REQUIRES_CONFIG(... ) and/or ENV_NOT_CONFIGURED (?) */
+
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ *n = rep->config_nsites;
+ } else
+ *n = db_rep->config_nsites;
- 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);
- }
- dbenv->rep_send = f_send;
- dbenv->rep_eid = eid;
return (0);
}
/*
- * __rep_elect --
- * Called after master failure to hold/participate in an election for
- * a new master.
+ * PUBLIC: int __rep_set_priority __P((DB_ENV *, int));
*/
-static int
-__rep_elect(dbenv, nsites, nvotes, priority, timeout, eidp, flags)
+int
+__rep_set_priority(dbenv, priority)
DB_ENV *dbenv;
- int nsites, nvotes, priority;
- u_int32_t timeout;
- int *eidp;
- u_int32_t flags;
+ int priority;
{
- DB_LOG *dblp;
- DB_LSN lsn;
DB_REP *db_rep;
REP *rep;
- int ack, done, in_progress, ret, send_vote;
- u_int32_t egen, orig_tally, tiebreaker, to;
-#ifdef DIAGNOSTIC
- DB_MSGBUF mb;
-#endif
- PANIC_CHECK(dbenv);
- COMPQUIET(flags, 0);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_elect", DB_INIT_REP);
-
- /* Error checking. */
- if (nsites <= 0) {
- __db_err(dbenv,
- "DB_ENV->rep_elect: nsites must be greater than 0");
- return (EINVAL);
- }
- if (nvotes < 0) {
- __db_err(dbenv,
- "DB_ENV->rep_elect: nvotes may not be negative");
- return (EINVAL);
- }
if (priority < 0) {
- __db_err(dbenv,
- "DB_ENV->rep_elect: priority may not be negative");
+ __db_errx(dbenv, "priority may not be negative");
return (EINVAL);
}
- if (nsites < nvotes) {
- __db_err(dbenv,
- "DB_ENV->rep_elect: nvotes (%d) is larger than nsites (%d)",
- nvotes, nsites);
- return (EINVAL);
- }
-
- ack = nvotes;
- /* If they give us a 0 for nvotes, default to simple majority. */
- if (nvotes == 0)
- ack = (nsites / 2) + 1;
-
- /*
- * XXX
- * If users give us less than a majority, they run the risk of
- * having a network partition. However, this also allows the
- * scenario of master/1 client to elect the client. Allow
- * sub-majority values, but give a warning.
- */
- if (nvotes <= (nsites / 2)) {
- __db_err(dbenv,
- "DB_ENV->rep_elect:WARNING: nvotes (%d) is sub-majority with nsites (%d)",
- nvotes, nsites);
- }
-
db_rep = dbenv->rep_handle;
- rep = db_rep->region;
- dblp = dbenv->lg_handle;
-
- RPRINT(dbenv, rep,
- (dbenv, &mb, "Start election nsites %d, ack %d, priority %d",
- nsites, ack, priority));
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ rep->priority = priority;
+ } else
+ db_rep->my_priority = priority;
+ return (0);
+}
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = ((LOG *)dblp->reginfo.primary)->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+/*
+ * PUBLIC: int __rep_get_priority __P((DB_ENV *, int *));
+ */
+int
+__rep_get_priority(dbenv, priority)
+ DB_ENV *dbenv;
+ int *priority;
+{
+ DB_REP *db_rep;
+ REP *rep;
- orig_tally = 0;
- to = timeout;
- if ((ret = __rep_elect_init(dbenv,
- &lsn, nsites, ack, priority, &in_progress, &orig_tally)) != 0) {
- if (ret == DB_REP_NEWMASTER) {
- ret = 0;
- *eidp = dbenv->rep_eid;
- }
- goto err;
- }
- /*
- * If another thread is in the middle of an election we
- * just quietly return and not interfere.
- */
- if (in_progress) {
- *eidp = rep->master_id;
- return (0);
- }
- (void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0);
- ret = __rep_wait(dbenv, to/4, eidp, REP_F_EPHASE1);
- switch (ret) {
- case 0:
- /* Check if we found a master. */
- if (*eidp != DB_EID_INVALID) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Found master %d", *eidp));
- goto edone;
- }
- /*
- * If we didn't find a master, continue
- * the election.
- */
- break;
- case DB_REP_EGENCHG:
- /*
- * Egen changed, just continue with election.
- */
- break;
- case DB_TIMEOUT:
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Did not find master. Sending vote1"));
- break;
- default:
- goto err;
- }
-restart:
- /* Generate a randomized tiebreaker value. */
- __os_unique_id(dbenv, &tiebreaker);
+ db_rep = dbenv->rep_handle;
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ *priority = rep->priority;
+ } else
+ *priority = db_rep->my_priority;
+ return (0);
+}
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- F_SET(rep, REP_F_EPHASE1 | REP_F_NOARCHIVE);
- F_CLR(rep, REP_F_TALLY);
+/*
+ * PUBLIC: int __rep_set_timeout __P((DB_ENV *, int, db_timeout_t));
+ */
+int
+__rep_set_timeout(dbenv, which, timeout)
+ DB_ENV *dbenv;
+ int which;
+ db_timeout_t timeout;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ int ret;
- /*
- * We are about to participate at this egen. We must
- * write out the next egen before participating in this one
- * so that if we crash we can never participate in this egen
- * again.
- */
- if ((ret = __rep_write_egen(dbenv, rep->egen + 1)) != 0)
- goto lockdone;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ ret = 0;
- /* Tally our own vote */
- if (__rep_tally(dbenv, rep, rep->eid, &rep->sites, rep->egen,
- rep->tally_off) != 0) {
+ switch (which) {
+ case DB_REP_ELECTION_TIMEOUT:
+ if (REP_ON(dbenv))
+ rep->elect_timeout = timeout;
+ else
+ db_rep->elect_timeout = timeout;
+ break;
+#ifdef HAVE_REPLICATION_THREADS
+ case DB_REP_ACK_TIMEOUT:
+ db_rep->ack_timeout = timeout;
+ break;
+ case DB_REP_ELECTION_RETRY:
+ db_rep->election_retry_wait = timeout;
+ break;
+ case DB_REP_CONNECTION_RETRY:
+ db_rep->connection_retry_wait = timeout;
+ break;
+#endif
+ default:
+ __db_errx(dbenv,
+ "Unknown timeout type argument to DB_ENV->rep_set_timeout");
ret = EINVAL;
- goto lockdone;
- }
- __rep_cmp_vote(dbenv, rep, &rep->eid, &lsn, priority, rep->gen,
- tiebreaker);
-
- RPRINT(dbenv, rep, (dbenv, &mb, "Beginning an election"));
-
- /* Now send vote */
- send_vote = DB_EID_INVALID;
- egen = rep->egen;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- __rep_send_vote(dbenv, &lsn, nsites, ack, priority, tiebreaker, egen,
- DB_EID_BROADCAST, REP_VOTE1);
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTVOTE1, ret, NULL);
- ret = __rep_wait(dbenv, to, eidp, REP_F_EPHASE1);
- switch (ret) {
- case 0:
- /* Check if election complete or phase complete. */
- if (*eidp != DB_EID_INVALID) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Ended election phase 1 %d", ret));
- goto edone;
- }
- goto phase2;
- case DB_REP_EGENCHG:
- if (to > timeout)
- to = timeout;
- to = (to * 8) / 10;
- RPRINT(dbenv, rep, (dbenv, &mb,
-"Egen changed while waiting. Now %lu. New timeout %lu, orig timeout %lu",
- (u_long)rep->egen, (u_long)to, (u_long)timeout));
- /*
- * If the egen changed while we were sleeping, that
- * means we're probably late to the next election,
- * so we'll backoff our timeout so that we don't get
- * into an out-of-phase election scenario.
- *
- * Backoff to 80% of the current timeout.
- */
- goto restart;
- case DB_TIMEOUT:
- break;
- default:
- goto err;
- }
- /*
- * If we got here, we haven't heard from everyone, but we've
- * run out of time, so it's time to decide if we have enough
- * votes to pick a winner and if so, to send out a vote to
- * the winner.
- */
- 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);
- RPRINT(dbenv, rep, (dbenv, &mb, "Egen changed from %lu to %lu",
- (u_long)egen, (u_long)rep->egen));
- goto restart;
}
- if (rep->sites >= rep->nvotes) {
-
- /* We think we've seen enough to cast a vote. */
- send_vote = rep->winner;
- /*
- * 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);
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Counted my vote %d", rep->votes));
- }
- F_SET(rep, REP_F_EPHASE2);
- F_CLR(rep, REP_F_EPHASE1);
- }
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- if (send_vote == DB_EID_INVALID) {
- /* We do not have enough votes to elect. */
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Not enough votes to elect: recvd %d of %d from %d sites",
- rep->sites, rep->nvotes, rep->nsites));
- 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) {
- RPRINT(dbenv, rep, (dbenv, &mb, "Sending vote"));
- __rep_send_vote(dbenv, NULL, 0, 0, 0, 0, egen,
- send_vote, REP_VOTE2);
- /*
- * If we are NOT the new master we want to send
- * our vote to the winner, and wait longer. The
- * reason is that the winner may be "behind" us
- * in the election waiting and if the master is
- * down, the winner will wait the full timeout
- * and we want to give the winner enough time to
- * process all the votes. Otherwise we could
- * incorrectly return DB_REP_UNAVAIL and start a
- * new election before the winner can declare
- * itself.
- */
- to = to * 2;
-
- }
-
-phase2: ret = __rep_wait(dbenv, to, eidp, REP_F_EPHASE2);
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Ended election phase 2 %d", ret));
- switch (ret) {
- case 0:
- goto edone;
- case DB_REP_EGENCHG:
- if (to > timeout)
- to = timeout;
- to = (to * 8) / 10;
- RPRINT(dbenv, rep, (dbenv, &mb,
-"While waiting egen changed to %lu. Phase 2 New timeout %lu, orig timeout %lu",
- (u_long)rep->egen,
- (u_long)to, (u_long)timeout));
- goto restart;
- case DB_TIMEOUT:
- ret = DB_REP_UNAVAIL;
- break;
- default:
- goto err;
- }
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- if (egen != rep->egen) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Egen ph2 changed from %lu to %lu",
- (u_long)egen, (u_long)rep->egen));
- goto restart;
- }
- done = rep->votes >= rep->nvotes;
- RPRINT(dbenv, rep, (dbenv, &mb,
- "After phase 2: done %d, votes %d, nsites %d",
- done, rep->votes, rep->nsites));
- if (send_vote == rep->eid && done) {
- __rep_elect_master(dbenv, rep, eidp);
- ret = 0;
- goto lockdone;
- }
- MUTEX_UNLOCK(dbenv, db_rep->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);
-
- /*
- * If the election finished elsewhere, we need to decrement
- * the elect_th anyway.
- */
- if (0)
-edone: MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- rep->elect_th = 0;
-
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Ended election with %d, sites %d, egen %lu, flags 0x%lx",
- ret, rep->sites, (u_long)rep->egen, (u_long)rep->flags));
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-DB_TEST_RECOVERY_LABEL
return (ret);
}
/*
- * __rep_elect_init
- * Initialize an election. Sets beginp non-zero if the election is
- * already in progress; makes it 0 otherwise.
+ * PUBLIC: int __rep_get_timeout __P((DB_ENV *, int, db_timeout_t *));
*/
-static int
-__rep_elect_init(dbenv, lsnp, nsites, nvotes, priority, beginp, otally)
+int
+__rep_get_timeout(dbenv, which, timeout)
DB_ENV *dbenv;
- DB_LSN *lsnp;
- int nsites, nvotes, priority;
- int *beginp;
- u_int32_t *otally;
+ int which;
+ db_timeout_t *timeout;
{
DB_REP *db_rep;
REP *rep;
@@ -1264,128 +1189,178 @@ __rep_elect_init(dbenv, lsnp, nsites, nvotes, priority, beginp, otally)
db_rep = dbenv->rep_handle;
rep = db_rep->region;
-
ret = 0;
- /* We may miscount, as we don't hold the replication mutex here. */
- rep->stat.st_elections++;
-
- /* If we are already a master; simply broadcast that fact and return. */
- 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);
+ switch (which) {
+ case DB_REP_ELECTION_TIMEOUT:
+ if (REP_ON(dbenv))
+ *timeout = rep->elect_timeout;
+ else
+ *timeout = db_rep->elect_timeout;
+ break;
+#ifdef HAVE_REPLICATION_THREADS
+ case DB_REP_ACK_TIMEOUT:
+ *timeout = db_rep->ack_timeout;
+ break;
+ case DB_REP_ELECTION_RETRY:
+ *timeout = db_rep->election_retry_wait;
+ break;
+ case DB_REP_CONNECTION_RETRY:
+ *timeout = db_rep->connection_retry_wait;
+ break;
+#endif
+ default:
+ __db_errx(dbenv,
+ "Unknown timeout type argument to DB_ENV->rep_get_timeout");
+ ret = EINVAL;
}
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- if (otally != NULL)
- *otally = F_ISSET(rep, REP_F_TALLY);
- *beginp = IN_ELECTION(rep) || rep->elect_th;
- if (!*beginp) {
+ return (ret);
+}
+
+/*
+ * __rep_get_request --
+ * Get the minimum and maximum number of log records that we wait
+ * before retransmitting.
+ *
+ * !!!
+ * UNDOCUMENTED.
+ *
+ * PUBLIC: int __rep_get_request __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ */
+int
+__rep_get_request(dbenv, minp, maxp)
+ DB_ENV *dbenv;
+ u_int32_t *minp, *maxp;
+{
+ DB_REP *db_rep;
+ REP *rep;
+
+ db_rep = dbenv->rep_handle;
+ ENV_NOT_CONFIGURED(
+ dbenv, db_rep->region, "DB_ENV->rep_get_request", DB_INIT_REP);
+
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
/*
- * Make sure that we always initialize all the election fields
- * before putting ourselves in an election state. That means
- * issuing calls that can fail (allocation) before setting all
- * the variables.
+ * We acquire the mtx_region or mtx_clientdb mutexes as needed.
*/
- if (nsites > rep->asites &&
- (ret = __rep_grow_sites(dbenv, nsites)) != 0)
- goto err;
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTINIT, ret, NULL);
- rep->elect_th = 1;
- rep->nsites = nsites;
- rep->nvotes = nvotes;
- rep->priority = priority;
- rep->master_id = DB_EID_INVALID;
+ REP_SYSTEM_LOCK(dbenv);
+ if (minp != NULL)
+ *minp = rep->request_gap;
+ if (maxp != NULL)
+ *maxp = rep->max_gap;
+ REP_SYSTEM_UNLOCK(dbenv);
+ } else {
+ if (minp != NULL)
+ *minp = db_rep->request_gap;
+ if (maxp != NULL)
+ *maxp = db_rep->max_gap;
}
-DB_TEST_RECOVERY_LABEL
-err: MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- return (ret);
+
+ return (0);
}
/*
- * __rep_elect_master
- * Set up for new master from election. Must be called with
- * the db_rep->rep_mutex held.
+ * __rep_set_request --
+ * Set the minimum and maximum number of log records that we wait
+ * before retransmitting.
+ *
+ * !!!
+ * UNDOCUMENTED.
*
- * PUBLIC: void __rep_elect_master __P((DB_ENV *, REP *, int *));
+ * PUBLIC: int __rep_set_request __P((DB_ENV *, u_int32_t, u_int32_t));
*/
-void
-__rep_elect_master(dbenv, rep, eidp)
+int
+__rep_set_request(dbenv, min, max)
DB_ENV *dbenv;
- REP *rep;
- int *eidp;
+ u_int32_t min, max;
{
-#ifdef DIAGNOSTIC
- DB_MSGBUF mb;
-#else
- COMPQUIET(dbenv, NULL);
-#endif
- rep->master_id = rep->eid;
- F_SET(rep, REP_F_MASTERELECT);
- if (eidp != NULL)
- *eidp = rep->master_id;
- rep->stat.st_elections_won++;
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Got enough votes to win; election done; winner is %d, gen %lu",
- rep->master_id, (u_long)rep->gen));
+ LOG *lp;
+ DB_LOG *dblp;
+ DB_REP *db_rep;
+ REP *rep;
+
+ db_rep = dbenv->rep_handle;
+ ENV_NOT_CONFIGURED(
+ dbenv, db_rep->region, "DB_ENV->rep_set_request", DB_INIT_REP);
+
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ /*
+ * We acquire the mtx_region or mtx_clientdb mutexes as needed.
+ */
+ REP_SYSTEM_LOCK(dbenv);
+ rep->request_gap = min;
+ rep->max_gap = max;
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ dblp = dbenv->lg_handle;
+ if (dblp != NULL && (lp = dblp->reginfo.primary) != NULL) {
+ lp->wait_recs = 0;
+ lp->rcvd_recs = 0;
+ }
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ } else {
+ db_rep->request_gap = min;
+ db_rep->max_gap = max;
+ }
+
+ return (0);
}
-static int
-__rep_wait(dbenv, timeout, eidp, flags)
+/*
+ * __rep_set_transport --
+ * Set the transport function for replication.
+ *
+ * PUBLIC: int __rep_set_transport __P((DB_ENV *, int,
+ * PUBLIC: int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ * PUBLIC: int, u_int32_t)));
+ */
+int
+__rep_set_transport(dbenv, eid, f_send)
DB_ENV *dbenv;
- u_int32_t timeout;
- int *eidp;
- u_int32_t flags;
+ int eid;
+ int (*f_send) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t));
{
DB_REP *db_rep;
REP *rep;
- int done, echg;
- u_int32_t egen, sleeptime;
- done = echg = 0;
- db_rep = dbenv->rep_handle;
- rep = db_rep->region;
- egen = rep->egen;
+ if (f_send == NULL) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_set_transport: no send function specified");
+ return (EINVAL);
+ }
- /*
- * The user specifies an overall timeout function, but checking
- * is cheap and the timeout may be a generous upper bound.
- * Sleep repeatedly for the smaller of .5s and timeout/10.
- */
- sleeptime = (timeout > 5000000) ? 500000 : timeout / 10;
- if (sleeptime == 0)
- sleeptime++;
- while (timeout > 0) {
- __os_sleep(dbenv, 0, sleeptime);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- echg = egen != rep->egen;
- done = !F_ISSET(rep, flags) && rep->master_id != DB_EID_INVALID;
-
- *eidp = rep->master_id;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-
- if (done)
- return (0);
-
- if (echg)
- return (DB_REP_EGENCHG);
-
- if (timeout > sleeptime)
- timeout -= sleeptime;
- else
- timeout = 0;
+ if (eid < 0) {
+ __db_errx(dbenv,
+ "DB_ENV->rep_set_transport: eid must be greater than or equal to 0");
+ return (EINVAL);
}
- return (DB_TIMEOUT);
+
+ db_rep = dbenv->rep_handle;
+ db_rep->send = f_send;
+
+ if (REP_ON(dbenv)) {
+ rep = db_rep->region;
+ REP_SYSTEM_LOCK(dbenv);
+ rep->eid = eid;
+ REP_SYSTEM_UNLOCK(dbenv);
+ } else
+ db_rep->eid = eid;
+ return (0);
}
/*
* __rep_flush --
* Re-push the last log record to all clients, in case they've lost
- * messages and don't know it.
+ * messages and don't know it.
+ *
+ * PUBLIC: int __rep_flush __P((DB_ENV *));
*/
-static int
+int
__rep_flush(dbenv)
DB_ENV *dbenv;
{
@@ -1395,7 +1370,8 @@ __rep_flush(dbenv)
int ret, t_ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_flush", DB_INIT_REP);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_flush", DB_INIT_REP);
if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
@@ -1407,9 +1383,109 @@ __rep_flush(dbenv)
goto err;
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_LOG, &lsn, &rec, 0);
+ DB_EID_BROADCAST, REP_LOG, &lsn, &rec, 0, 0);
err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
+
+/*
+ * __rep_sync --
+ * Force a synchronization to occur between this client and the master.
+ * This is the other half of configuring DELAYCLIENT.
+ *
+ * PUBLIC: int __rep_sync __P((DB_ENV *, u_int32_t));
+ */
+int
+__rep_sync(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ DB_LOG *dblp;
+ DB_LSN lsn;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ int master;
+ u_int32_t type;
+
+ COMPQUIET(flags, 0);
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_sync", DB_INIT_REP);
+
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ /*
+ * Simple cases. If we're not in the DELAY state we have nothing
+ * to do. If we don't know who the master is, send a MASTER_REQ.
+ */
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ lsn = lp->verify_lsn;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ REP_SYSTEM_LOCK(dbenv);
+ master = rep->master_id;
+ if (master == DB_EID_INVALID) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ (void)__rep_send_message(dbenv, DB_EID_BROADCAST,
+ REP_MASTER_REQ, NULL, NULL, 0, 0);
+ return (0);
+ }
+ /*
+ * We want to hold the rep mutex to test and then clear the
+ * DELAY flag. Racing threads in here could otherwise result
+ * in dual data streams.
+ */
+ if (!F_ISSET(rep, REP_F_DELAY)) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ return (0);
+ }
+
+ /*
+ * If we get here, we clear the delay flag and kick off a
+ * synchronization. From this point forward, we will
+ * synchronize until the next time the master changes.
+ */
+ F_CLR(rep, REP_F_DELAY);
+ REP_SYSTEM_UNLOCK(dbenv);
+ /*
+ * When we set REP_F_DELAY, we set verify_lsn to the real verify
+ * lsn if we need to verify, or we zeroed it out if this is a client
+ * that needs to sync up from the beginning. So, send the type
+ * of message now that __rep_new_master delayed sending.
+ */
+ if (IS_ZERO_LSN(lsn))
+ type = REP_ALL_REQ;
+ else
+ type = REP_VERIFY_REQ;
+ (void)__rep_send_message(dbenv, master, type, &lsn, NULL, 0,
+ DB_REP_ANYWHERE);
+ return (0);
+}
+
+/*
+ * __rep_conv_vers --
+ * Convert from a log version to the replication message version
+ * that release used.
+ */
+static u_int32_t
+__rep_conv_vers(dbenv, log_ver)
+ DB_ENV *dbenv;
+ u_int32_t log_ver;
+{
+ COMPQUIET(dbenv, NULL);
+ if (log_ver == DB_LOGVERSION_42)
+ return (DB_REPVERSION_42);
+ if (log_ver == DB_LOGVERSION_43)
+ return (DB_REPVERSION_43);
+ if (log_ver == DB_LOGVERSION_44)
+ return (DB_REPVERSION_44);
+ if (log_ver == DB_LOGVERSION_45)
+ return (DB_REPVERSION_45);
+ return (DB_REPVERSION_INVALID);
+}
diff --git a/db/rep/rep_record.c b/db/rep/rep_record.c
index 2421c5af2..e50203407 100644
--- a/db/rep/rep_record.c
+++ b/db/rep/rep_record.c
@@ -1,60 +1,41 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep_record.c,v 1.255 2004/11/04 18:35:29 sue Exp $
+ * $Id: rep_record.c,v 12.51 2006/09/11 19:41:20 sue Exp $
*/
#include "db_config.h"
-#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 <stdlib.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/lock.h"
#include "dbinc/log.h"
#include "dbinc/mp.h"
#include "dbinc/txn.h"
-static int __rep_apply __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *, int *));
static int __rep_collect_txn __P((DB_ENV *, DB_LSN *, LSN_COLLECTION *));
static int __rep_do_ckp __P((DB_ENV *, DBT *, REP_CONTROL *));
-static int __rep_dorecovery __P((DB_ENV *, DB_LSN *, DB_LSN *));
static int __rep_getnext __P((DB_ENV *));
static int __rep_lsn_cmp __P((const void *, const void *));
-static int __rep_newfile __P((DB_ENV *, REP_CONTROL *, DB_LSN *));
+static int __rep_newfile __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *));
static int __rep_process_rec __P((DB_ENV *,
REP_CONTROL *, DBT *, u_int32_t *, DB_LSN *));
static int __rep_remfirst __P((DB_ENV *, DBT *, DBT *));
static int __rep_resend_req __P((DB_ENV *, int));
-static int __rep_verify_match __P((DB_ENV *, DB_LSN *, time_t));
+static int __rep_skip_msg __P((DB_ENV *, REP *, int, u_int32_t));
/* Used to consistently designate which messages ought to be received where. */
#define MASTER_ONLY(rep, rp) do { \
if (!F_ISSET(rep, REP_F_MASTER)) { \
- RPRINT(dbenv, rep, \
- (dbenv, &mb, "Master record received on client")); \
+ RPRINT(dbenv, \
+ (dbenv, &mb, "Master record received on client")); \
REP_PRINT_MESSAGE(dbenv, \
- *eidp, rp, "rep_process_message"); \
+ *eidp, rp, "rep_process_message", 0); \
ret = EINVAL; \
goto errlock; \
} \
@@ -62,40 +43,65 @@ static int __rep_verify_match __P((DB_ENV *, DB_LSN *, time_t));
#define CLIENT_ONLY(rep, rp) do { \
if (!F_ISSET(rep, REP_F_CLIENT)) { \
- RPRINT(dbenv, rep, \
+ RPRINT(dbenv, \
(dbenv, &mb, "Client record received on master")); \
REP_PRINT_MESSAGE(dbenv, \
- *eidp, rp, "rep_process_message"); \
+ *eidp, rp, "rep_process_message", 0); \
(void)__rep_send_message(dbenv, \
- DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0); \
+ DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0, 0); \
ret = DB_REP_DUPMASTER; \
goto errlock; \
} \
} while (0)
-#define MASTER_CHECK(dbenv, eid, rep) do { \
- if (rep->master_id == DB_EID_INVALID) { \
- RPRINT(dbenv, rep, (dbenv, &mb, \
- "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; \
+/*
+ * If a client is attempting to service a request it does not have,
+ * call rep_skip_msg to skip this message and force a rerequest to the
+ * sender. We don't hold the mutex for the stats and may miscount.
+ */
+#define CLIENT_REREQ do { \
+ if (F_ISSET(rep, REP_F_CLIENT)) { \
+ rep->stat.st_client_svc_req++; \
+ if (ret == DB_NOTFOUND) { \
+ rep->stat.st_client_svc_miss++; \
+ ret = __rep_skip_msg(dbenv, rep, *eidp, rp->rectype);\
+ } \
} \
} while (0)
#define MASTER_UPDATE(dbenv, renv) do { \
- MUTEX_LOCK((dbenv), &(renv)->mutex); \
+ REP_SYSTEM_LOCK(dbenv); \
F_SET((renv), DB_REGENV_REPLOCKED); \
(void)time(&(renv)->op_timestamp); \
- MUTEX_UNLOCK((dbenv), &(renv)->mutex); \
+ REP_SYSTEM_UNLOCK(dbenv); \
+} while (0)
+
+#define RECOVERING_SKIP do { \
+ if (recovering) { \
+ /* Not holding region mutex, may miscount */ \
+ rep->stat.st_msgs_recover++; \
+ ret = __rep_skip_msg(dbenv, rep, *eidp, rp->rectype); \
+ goto errlock; \
+ } \
+} while (0)
+
+/*
+ * If we're recovering the log we only want log records that are in the
+ * range we need to recover. Otherwise we can end up storing a huge
+ * number of "new" records, only to truncate the temp database later after
+ * we run recovery. If we are actively delaying a sync-up, we also skip
+ * all incoming log records until the application requests sync-up.
+ */
+#define RECOVERING_LOG_SKIP do { \
+ if (F_ISSET(rep, REP_F_DELAY) || \
+ (recovering && \
+ (!F_ISSET(rep, REP_F_RECOVER_LOG) || \
+ LOG_COMPARE(&rp->lsn, &rep->last_lsn) > 0))) { \
+ /* Not holding region mutex, may miscount */ \
+ rep->stat.st_msgs_recover++; \
+ ret = __rep_skip_msg(dbenv, rep, *eidp, rp->rectype); \
+ goto errlock; \
+ } \
} while (0)
#define ANYSITE(rep)
@@ -125,37 +131,34 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
DB_LSN *ret_lsnp;
{
DB_LOG *dblp;
- DB_LOGC *logc;
- DB_LSN endlsn, lsn, oldfilelsn;
+ DB_LSN last_lsn, lsn;
DB_REP *db_rep;
- DBT *d, data_dbt, mylog;
+ DBT data_dbt;
LOG *lp;
REGENV *renv;
REGINFO *infop;
REP *rep;
REP_CONTROL *rp;
- REP_VOTE_INFO *vi;
- u_int32_t bytes, egen, flags, gen, gbytes, rectype, type;
- int check_limit, cmp, done, do_req, is_dup;
- int master, match, old, recovering, ret, t_ret;
+ u_int32_t egen, gen;
+ int cmp, recovering, ret;
time_t savetime;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
#endif
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_process_message",
- DB_INIT_REP);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_process_message", DB_INIT_REP);
/* Control argument must be non-Null. */
if (control == NULL || control->size == 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->rep_process_message: control argument must be specified");
return (EINVAL);
}
if (!IS_REP_MASTER(dbenv) && !IS_REP_CLIENT(dbenv)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Environment not configured as replication master or client");
return (EINVAL);
}
@@ -174,15 +177,17 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
/*
* Acquire the replication lock.
*/
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- if (rep->start_th != 0) {
+ REP_SYSTEM_LOCK(dbenv);
+ if (rep->lockout_th != 0) {
/*
* If we're racing with a thread in rep_start, then
* just ignore the message and return.
*/
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Racing rep_start, ignore message."));
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ RPRINT(dbenv, (dbenv, &mb,
+ "Racing replication msg lockout, ignore message."));
+ if (F_ISSET(rp, REPCTL_PERM))
+ ret = DB_REP_IGNORE;
+ REP_SYSTEM_UNLOCK(dbenv);
goto out;
}
rep->msg_th++;
@@ -191,20 +196,40 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
savetime = renv->rep_timestamp;
rep->stat.st_msgs_processed++;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-
- REP_PRINT_MESSAGE(dbenv, *eidp, rp, "rep_process_message");
+ REP_SYSTEM_UNLOCK(dbenv);
- /* Complain if we see an improper version number. */
- if (rp->rep_version != DB_REPVERSION) {
- __db_err(dbenv,
+ /*
+ * Check the version number for both rep and log. If it is
+ * an old version we support, convert it. Otherwise complain.
+ */
+ REP_PRINT_MESSAGE(dbenv, *eidp, rp, "rep_process_message", 0);
+ if (rp->rep_version < DB_REPVERSION) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Received record %lu with old rep version %lu",
+ (u_long)rp->rectype, (u_long)rp->rep_version));
+ rp->rectype = __rep_msg_from_old(rp->rep_version, rp->rectype);
+ /*
+ * We should have a valid new record type for all the old
+ * versions.
+ */
+ DB_ASSERT(dbenv, rp->rectype != REP_INVALID);
+ RPRINT(dbenv, (dbenv, &mb,
+ "Converted to record %lu with old rep version %lu",
+ (u_long)rp->rectype, (u_long)rp->rep_version));
+ } else if (rp->rep_version > DB_REPVERSION) {
+ __db_errx(dbenv,
"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,
+
+ if (rp->log_version < DB_LOGVERSION) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "Received record %lu with old log version %lu",
+ (u_long)rp->rectype, (u_long)rp->log_version));
+ } else if (rp->log_version > DB_LOGVERSION) {
+ __db_errx(dbenv,
"unexpected log record version %lu, expected %d",
(u_long)rp->log_version, DB_LOGVERSION);
ret = EINVAL;
@@ -223,6 +248,8 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
* We don't hold the rep mutex, and could miscount if we race.
*/
rep->stat.st_msgs_badgen++;
+ if (F_ISSET(rp, REPCTL_PERM))
+ ret = DB_REP_IGNORE;
goto errlock;
}
@@ -237,7 +264,7 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
if (rp->rectype != REP_DUPMASTER)
(void)__rep_send_message(dbenv,
DB_EID_BROADCAST, REP_DUPMASTER,
- NULL, NULL, 0);
+ NULL, NULL, 0, 0);
goto errlock;
}
@@ -250,8 +277,8 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
*/
if (rp->rectype == REP_ALIVE ||
rp->rectype == REP_VOTE1 || rp->rectype == REP_VOTE2) {
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- RPRINT(dbenv, rep, (dbenv, &mb,
+ REP_SYSTEM_LOCK(dbenv);
+ RPRINT(dbenv, (dbenv, &mb,
"Updating gen from %lu to %lu",
(u_long)gen, (u_long)rp->gen));
rep->master_id = DB_EID_INVALID;
@@ -260,23 +287,26 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
* Updating of egen will happen when we process the
* message below for each message type.
*/
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
if (rp->rectype == REP_ALIVE)
(void)__rep_send_message(dbenv,
DB_EID_BROADCAST, REP_MASTER_REQ, NULL,
- NULL, 0);
+ NULL, 0, 0);
} else if (rp->rectype != REP_NEWMASTER) {
- (void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0);
+ /*
+ * Ignore this message, retransmit if needed.
+ */
+ if (__rep_check_doreq(dbenv, rep))
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_MASTER_REQ,
+ NULL, NULL, 0, 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.
*/
-
}
/*
@@ -286,80 +316,15 @@ __rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
* PAGE* and FILE*. We need to also accept LOG messages
* if we're copying the log for recovery/backup.
*/
- 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_NEWFILE:
- case REP_LOG:
- case REP_LOG_MORE:
- if (!F_ISSET(rep, REP_F_RECOVER_LOG))
- goto skip;
- /*
- * If we're recovering the log we only want
- * log records that are in the range we need
- * to recover. Otherwise we can end up storing
- * a huge number of "new" records, only to
- * truncate the temp database later after we
- * run recovery.
- */
- if (log_compare(&rp->lsn, &rep->last_lsn) > 0)
- goto skip;
- break;
- case REP_ALIVE:
- case REP_ALIVE_REQ:
- case REP_DUPMASTER:
- case REP_FILE_FAIL:
- case REP_NEWCLIENT:
- case REP_NEWMASTER:
- case REP_NEWSITE:
- case REP_PAGE:
- case REP_PAGE_FAIL:
- case REP_PAGE_MORE:
- case REP_PAGE_REQ:
- case REP_UPDATE:
- case REP_UPDATE_REQ:
- case REP_VERIFY_FAIL:
- case REP_VOTE1:
- case REP_VOTE2:
- break;
- default:
-skip:
- /* Check for need to retransmit. */
- /* Not holding rep_mutex, may miscount */
- rep->stat.st_msgs_recover++;
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- do_req = __rep_check_doreq(dbenv, rep);
- 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)
- ret = __rep_resend_req(dbenv, *eidp);
- }
- goto errlock;
- }
- }
-
switch (rp->rectype) {
case REP_ALIVE:
+ /*
+ * Handle even if we're recovering.
+ */
ANYSITE(rep);
egen = *(u_int32_t *)rec->data;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- RPRINT(dbenv, rep, (dbenv, &mb,
+ REP_SYSTEM_LOCK(dbenv);
+ RPRINT(dbenv, (dbenv, &mb,
"Received ALIVE egen of %lu, mine %lu",
(u_long)egen, (u_long)rep->egen));
if (egen > rep->egen) {
@@ -370,348 +335,83 @@ skip:
__rep_elect_done(dbenv, rep);
rep->egen = egen;
}
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
break;
case REP_ALIVE_REQ:
+ /*
+ * Handle even if we're recovering.
+ */
ANYSITE(rep);
dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lsn = ((LOG *)dblp->reginfo.primary)->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ LOG_SYSTEM_UNLOCK(dbenv);
+ REP_SYSTEM_LOCK(dbenv);
egen = rep->egen;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
data_dbt.data = &egen;
data_dbt.size = sizeof(egen);
(void)__rep_send_message(dbenv,
- *eidp, REP_ALIVE, &lsn, &data_dbt, 0);
- goto errlock;
+ *eidp, REP_ALIVE, &lsn, &data_dbt, 0, 0);
+ break;
+ case REP_ALL_REQ:
+ RECOVERING_SKIP;
+ ret = __rep_allreq(dbenv, rp, *eidp);
+ CLIENT_REREQ;
+ break;
+ case REP_BULK_LOG:
+ RECOVERING_LOG_SKIP;
+ CLIENT_ONLY(rep, rp);
+ ret = __rep_bulk_log(dbenv, rp, rec, savetime, ret_lsnp);
+ break;
+ case REP_BULK_PAGE:
+ /*
+ * Handle even if we're recovering.
+ */
+ CLIENT_ONLY(rep, rp);
+ ret = __rep_bulk_page(dbenv, *eidp, rp, rec);
+ break;
case REP_DUPMASTER:
+ /*
+ * Handle even if we're recovering.
+ */
if (F_ISSET(rep, REP_F_MASTER))
ret = DB_REP_DUPMASTER;
- goto errlock;
- case REP_ALL_REQ:
- MASTER_ONLY(rep, rp);
- gbytes = bytes = 0;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- gbytes = rep->gbytes;
- bytes = rep->bytes;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- check_limit = gbytes != 0 || bytes != 0;
- if ((ret = __log_cursor(dbenv, &logc)) != 0)
- goto errlock;
- memset(&data_dbt, 0, sizeof(data_dbt));
- oldfilelsn = lsn = rp->lsn;
- type = REP_LOG;
- 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 = __log_c_get(logc, &lsn, &data_dbt, DB_NEXT)) {
- /*
- * 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.file != oldfilelsn.file)
- (void)__rep_send_message(dbenv,
- *eidp, REP_NEWFILE, &oldfilelsn, NULL, 0);
- if (check_limit) {
- /*
- * 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.
- */
- 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));
- }
-
-send: if (__rep_send_message(dbenv, *eidp, type,
- &lsn, &data_dbt, DB_LOG_RESEND) != 0)
- break;
-
- /*
- * 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 = __log_c_close(logc)) != 0 && ret == 0)
- ret = t_ret;
- goto errlock;
+ break;
#ifdef NOTYET
case REP_FILE: /* TODO */
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
break;
case REP_FILE_REQ:
- MASTER_ONLY(rep, rp);
ret = __rep_send_file(dbenv, rec, *eidp);
- goto errlock;
+ break;
#endif
case REP_FILE_FAIL:
+ /*
+ * Handle even if we're recovering.
+ */
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
/*
* XXX
*/
break;
case REP_LOG:
case REP_LOG_MORE:
+ RECOVERING_LOG_SKIP;
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
- is_dup = 0;
- ret = __rep_apply(dbenv, rp, rec, ret_lsnp, &is_dup);
- switch (ret) {
- /*
- * We're in an internal backup and we've gotten
- * all the log we need to run recovery. Do so now.
- */
- case DB_REP_LOGREADY:
- if ((ret = __log_flush(dbenv, NULL)) != 0)
- goto errlock;
- if ((ret = __rep_verify_match(dbenv, &rep->last_lsn,
- savetime)) == 0) {
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- ZERO_LSN(rep->first_lsn);
- ZERO_LSN(rep->last_lsn);
- F_CLR(rep, REP_F_RECOVER_LOG);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- }
- break;
- /*
- * If we get any of the "normal" returns, we only process
- * LOG_MORE if this is not a duplicate record. If the
- * record is a duplicate we don't want to handle LOG_MORE
- * and request a multiple data stream (or trigger internal
- * initialization) since this could be a very old record
- * that no longer exists on the master.
- */
- case DB_REP_ISPERM:
- case DB_REP_NOTPERM:
- case 0:
- if (is_dup)
- goto errlock;
- else
- break;
- /*
- * Any other return (errors), we're done.
- */
- default:
- goto errlock;
- }
- if (rp->rectype == REP_LOG_MORE) {
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- master = rep->master_id;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- /*
- * 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.
- */
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- if (master == DB_EID_INVALID)
- ret = 0;
- /*
- * If we've asked for a bunch of records, it could
- * either be from a LOG_REQ or ALL_REQ. If we're
- * waiting for a gap to be filled, call loggap_req,
- * otherwise use ALL_REQ again.
- */
- else if (IS_ZERO_LSN(lp->waiting_lsn)) {
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- if (__rep_send_message(dbenv,
- master, REP_ALL_REQ, &lsn, NULL, 0) != 0)
- break;
- } else {
- __rep_loggap_req(dbenv, rep, &lsn, 1);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- }
- }
- goto errlock;
+ ret = __rep_log(dbenv, rp, rec, savetime, ret_lsnp);
+ break;
case REP_LOG_REQ:
- MASTER_ONLY(rep, rp);
- if (rec != NULL && rec->size != 0) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "[%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));
- }
- /*
- * There are three different cases here.
- * 1. We asked for a particular LSN and got it.
- * 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.
- */
- oldfilelsn = lsn = rp->lsn;
- if ((ret = __log_cursor(dbenv, &logc)) != 0)
- goto errlock;
- memset(&data_dbt, 0, sizeof(data_dbt));
- ret = __log_c_get(logc, &lsn, &data_dbt, DB_SET);
-
- if (ret == 0) /* Case 1 */
- (void)__rep_send_message(dbenv,
- *eidp, REP_LOG, &lsn, &data_dbt, DB_LOG_RESEND);
- 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) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Unable to get prev of [%lu][%lu]",
- (u_long)lsn.file,
- (u_long)lsn.offset));
- /*
- * We want to push the error back
- * to the client so that the client
- * does an internal backup. The
- * client asked for a log record
- * we no longer have and it is
- * outdated.
- * XXX - This could be optimized by
- * having the master perform and
- * send a REP_UPDATE message. We
- * currently want the client to set
- * up its 'update' state prior to
- * requesting REP_UPDATE_REQ.
- */
- ret = 0;
- (void)__rep_send_message(dbenv, *eidp,
- REP_VERIFY_FAIL, &rp->lsn, NULL, 0);
- } else {
- endlsn.offset += logc->c_len;
- (void)__rep_send_message(dbenv, *eidp,
- REP_NEWFILE, &endlsn, NULL, 0);
- }
- } else {
- /* Case 3 */
- __db_err(dbenv,
- "Request for LSN [%lu][%lu] fails",
- (u_long)lsn.file, (u_long)lsn.offset);
- DB_ASSERT(0);
- ret = EINVAL;
- }
- }
-
+ RECOVERING_SKIP;
+ if (F_ISSET(rp, REPCTL_INIT))
+ MASTER_UPDATE(dbenv, renv);
+ ret = __rep_logreq(dbenv, rp, rec, *eidp);
+ CLIENT_REREQ;
+ break;
+ case REP_NEWSITE:
/*
- * If the user requested a gap, send the whole thing,
- * while observing the limits from set_rep_limit.
+ * Handle even if we're recovering.
*/
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- gbytes = rep->gbytes;
- bytes = rep->bytes;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- check_limit = gbytes != 0 || bytes != 0;
- type = REP_LOG;
- while (ret == 0 && rec != NULL && rec->size != 0 &&
- type == REP_LOG) {
- 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;
- /*
- * 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.file != oldfilelsn.file)
- (void)__rep_send_message(dbenv,
- *eidp, REP_NEWFILE, &oldfilelsn, NULL, 0);
- if (check_limit) {
- /*
- * 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.
- */
- 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 send1;
- }
- bytes -= (data_dbt.size + sizeof(REP_CONTROL));
- }
-
-send1: if (__rep_send_message(dbenv, *eidp, type,
- &lsn, &data_dbt, DB_LOG_RESEND) != 0)
- break;
- /*
- * 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 ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
- ret = t_ret;
- goto errlock;
- case REP_NEWSITE:
/* We don't hold the rep mutex, and may miscount. */
rep->stat.st_newsites++;
@@ -719,16 +419,19 @@ send1: if (__rep_send_message(dbenv, *eidp, type,
if (F_ISSET(rep, REP_F_MASTER)) {
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
(void)__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0);
+ *eidp, REP_NEWMASTER, &lsn, NULL, 0, 0);
}
ret = DB_REP_NEWSITE;
- goto errlock;
+ break;
case REP_NEWCLIENT:
/*
+ * Handle even if we're recovering.
+ */
+ /*
* 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
@@ -738,30 +441,31 @@ send1: if (__rep_send_message(dbenv, *eidp, type,
* all the clients.
*/
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWSITE, &rp->lsn, rec, 0);
+ DB_EID_BROADCAST, REP_NEWSITE, &rp->lsn, rec, 0, 0);
ret = DB_REP_NEWSITE;
if (F_ISSET(rep, REP_F_CLIENT)) {
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
egen = rep->egen;
if (*eidp == rep->master_id)
rep->master_id = DB_EID_INVALID;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
data_dbt.data = &egen;
data_dbt.size = sizeof(egen);
(void)__rep_send_message(dbenv, DB_EID_BROADCAST,
- REP_ALIVE, &rp->lsn, &data_dbt, 0);
- goto errlock;
+ REP_ALIVE, &rp->lsn, &data_dbt, 0, 0);
+ break;
}
/* FALLTHROUGH */
case REP_MASTER_REQ:
+ RECOVERING_SKIP;
if (F_ISSET(rep, REP_F_MASTER)) {
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0);
+ DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0, 0);
}
/*
* If there is no master, then we could get into a state
@@ -770,59 +474,88 @@ send1: if (__rep_send_message(dbenv, *eidp, type,
* never get to the current gen.
*/
if (F_ISSET(rep, REP_F_CLIENT) && rp->gen < gen) {
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
egen = rep->egen;
if (*eidp == rep->master_id)
rep->master_id = DB_EID_INVALID;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
data_dbt.data = &egen;
data_dbt.size = sizeof(egen);
(void)__rep_send_message(dbenv, *eidp,
- REP_ALIVE, &rp->lsn, &data_dbt, 0);
- goto errlock;
+ REP_ALIVE, &rp->lsn, &data_dbt, 0, 0);
}
- goto errlock;
+ break;
case REP_NEWFILE:
+ RECOVERING_LOG_SKIP;
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
- ret = __rep_apply(dbenv, rp, rec, ret_lsnp, NULL);
- goto errlock;
+ ret = __rep_apply(dbenv, rp, rec, ret_lsnp, NULL, &last_lsn);
+ if (ret == DB_REP_LOGREADY)
+ ret = __rep_logready(dbenv, rep, savetime, &last_lsn);
+ break;
case REP_NEWMASTER:
+ /*
+ * Handle even if we're recovering.
+ */
ANYSITE(rep);
if (F_ISSET(rep, REP_F_MASTER) &&
- *eidp != dbenv->rep_eid) {
+ *eidp != rep->eid) {
/* We don't hold the rep mutex, and may miscount. */
rep->stat.st_dupmasters++;
ret = DB_REP_DUPMASTER;
(void)__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0);
- goto errlock;
+ DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0, 0);
+ break;
}
ret = __rep_new_master(dbenv, rp, *eidp);
- goto errlock;
+ break;
case REP_PAGE:
case REP_PAGE_MORE:
+ /*
+ * Handle even if we're recovering.
+ */
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
ret = __rep_page(dbenv, *eidp, rp, rec);
+ if (ret == DB_REP_PAGEDONE)
+ ret = 0;
break;
case REP_PAGE_FAIL:
+ /*
+ * Handle even if we're recovering.
+ */
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
ret = __rep_page_fail(dbenv, *eidp, rec);
break;
case REP_PAGE_REQ:
- MASTER_ONLY(rep, rp);
+ /*
+ * Handle even if we're recovering.
+ */
MASTER_UPDATE(dbenv, renv);
ret = __rep_page_req(dbenv, *eidp, rec);
+ CLIENT_REREQ;
+ break;
+ case REP_REREQUEST:
+ /*
+ * Handle even if we're recovering. Don't do a master
+ * check.
+ */
+ CLIENT_ONLY(rep, rp);
+ /*
+ * Don't hold any mutex, may miscount.
+ */
+ rep->stat.st_client_rerequests++;
+ ret = __rep_resend_req(dbenv, 1);
break;
case REP_UPDATE:
+ /*
+ * Handle even if we're recovering.
+ */
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
-
ret = __rep_update_setup(dbenv, *eidp, rp, rec);
break;
case REP_UPDATE_REQ:
+ /*
+ * Handle even if we're recovering.
+ */
MASTER_ONLY(rep, rp);
infop = dbenv->reginfo;
renv = infop->primary;
@@ -830,388 +563,60 @@ send1: if (__rep_send_message(dbenv, *eidp, type,
ret = __rep_update_req(dbenv, *eidp);
break;
case REP_VERIFY:
- CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
- if (IS_ZERO_LSN(lp->verify_lsn))
- goto errlock;
-
- if ((ret = __log_cursor(dbenv, &logc)) != 0)
- goto errlock;
- memset(&mylog, 0, sizeof(mylog));
- if ((ret = __log_c_get(logc, &rp->lsn, &mylog, DB_SET)) != 0)
- goto rep_verify_err;
- match = 0;
- memcpy(&rectype, mylog.data, sizeof(rectype));
- if (mylog.size == rec->size &&
- memcmp(mylog.data, rec->data, rec->size) == 0)
- match = 1;
- DB_ASSERT(rectype == DB___txn_ckp);
- /*
- * If we don't have a match, backup to the previous
- * checkpoint and try again.
- */
- if (match == 0) {
- ZERO_LSN(lsn);
- if ((ret = __log_backup(dbenv, logc, &rp->lsn, &lsn,
- LASTCKP_CMP)) == 0) {
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- lp->verify_lsn = lsn;
- lp->rcvd_recs = 0;
- lp->wait_recs = rep->request_gap;
- 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 the latter
- * we don't think these sites were ever part of
- * the same environment and we'll say so.
- * In the former, request internal backup.
- */
- if (rp->lsn.file == 1) {
- __db_err(dbenv,
- "Client was never part of master's environment");
- ret = EINVAL;
- } else {
- rep->stat.st_outdated++;
-
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- F_CLR(rep, REP_F_RECOVER_VERIFY);
- F_SET(rep, REP_F_RECOVER_UPDATE);
- ZERO_LSN(rep->first_lsn);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- (void)__rep_send_message(dbenv,
- *eidp, REP_UPDATE_REQ, NULL,
- NULL, 0);
- }
+ if (recovering) {
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ cmp = LOG_COMPARE(&lp->verify_lsn, &rp->lsn);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ /*
+ * If this is not the verify record I want, skip it.
+ */
+ if (cmp != 0) {
+ ret = __rep_skip_msg(
+ dbenv, rep, *eidp, rp->rectype);
+ break;
}
- } else
- ret = __rep_verify_match(dbenv, &rp->lsn, savetime);
-
-rep_verify_err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
- ret = t_ret;
- goto errlock;
- case REP_VERIFY_FAIL:
+ }
CLIENT_ONLY(rep, rp);
- MASTER_CHECK(dbenv, *eidp, rep);
- /*
- * If any recovery flags are set, but not VERIFY,
- * then we ignore this message. We are already
- * in the middle of updating.
- */
- if (F_ISSET(rep, REP_F_RECOVER_MASK) &&
- !F_ISSET(rep, REP_F_RECOVER_VERIFY))
- goto errlock;
- rep->stat.st_outdated++;
-
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ ret = __rep_verify(dbenv, rp, rec, *eidp, savetime);
+ break;
+ case REP_VERIFY_FAIL:
/*
- * We don't want an old or delayed VERIFY_FAIL
- * message to throw us into internal initialization
- * when we shouldn't be.
- *
- * Only go into internal initialization if:
- * We are in RECOVER_VERIFY and this LSN == verify_lsn.
- * We are not in any RECOVERY and we are expecting
- * an LSN that no longer exists on the master.
- * Otherwise, ignore this message.
+ * Handle even if we're recovering.
*/
- if (((F_ISSET(rep, REP_F_RECOVER_VERIFY)) &&
- log_compare(&rp->lsn, &lp->verify_lsn) == 0) ||
- (F_ISSET(rep, REP_F_RECOVER_MASK) == 0 &&
- log_compare(&rp->lsn, &lp->ready_lsn) >= 0)) {
- F_CLR(rep, REP_F_RECOVER_VERIFY);
- F_SET(rep, REP_F_RECOVER_UPDATE);
- ZERO_LSN(rep->first_lsn);
- lp->wait_recs = rep->request_gap;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- (void)__rep_send_message(dbenv,
- *eidp, REP_UPDATE_REQ, NULL, NULL, 0);
- } else {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- }
- goto errlock;
+ CLIENT_ONLY(rep, rp);
+ ret = __rep_verify_fail(dbenv, rp, *eidp);
+ break;
case REP_VERIFY_REQ:
- MASTER_ONLY(rep, rp);
- type = REP_VERIFY;
- 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 = __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.
- * If we get a DB_NOTFOUND, then there is a chance that
- * the LSN comes before the first file present in which
- * case we need to return a fail so that the client can return
- * a DB_OUTDATED.
- */
- if (ret == DB_NOTFOUND &&
- __log_is_outdated(dbenv, rp->lsn.file, &old) == 0 &&
- old != 0)
- type = REP_VERIFY_FAIL;
-
- if (ret != 0)
- d = NULL;
-
- (void)__rep_send_message(dbenv, *eidp, type, &rp->lsn, d, 0);
- ret = __log_c_close(logc);
- goto errlock;
+ RECOVERING_SKIP;
+ ret = __rep_verify_req(dbenv, rp, *eidp);
+ CLIENT_REREQ;
+ break;
case REP_VOTE1:
- if (F_ISSET(rep, REP_F_MASTER)) {
- RPRINT(dbenv, rep,
- (dbenv, &mb, "Master received vote"));
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- (void)__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0);
- goto errlock;
- }
-
- vi = (REP_VOTE_INFO *)rec->data;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
-
- /*
- * 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 we get an old vote,
- * send an ALIVE to the old participant.
- */
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Received vote1 egen %lu, egen %lu",
- (u_long)vi->egen, (u_long)rep->egen));
- if (vi->egen < rep->egen) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Received old vote %lu, egen %lu, ignoring vote1",
- (u_long)vi->egen, (u_long)rep->egen));
- 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;
- }
- if (vi->egen > rep->egen) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Received VOTE1 from egen %lu, my egen %lu; reset",
- (u_long)vi->egen, (u_long)rep->egen));
- __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 this site requires more votes than we do. */
- if (vi->nvotes > rep->nvotes)
- rep->nvotes = vi->nvotes;
-
- /*
- * 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) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Grow sites returned error %d", ret));
- goto errunlock;
- }
-
- /*
- * Ignore vote1's if we're in phase 2.
- */
- if (F_ISSET(rep, REP_F_EPHASE2)) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "In phase 2, ignoring vote1"));
- goto errunlock;
- }
-
- /*
- * 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) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Tally returned %d, sites %d",
- ret, rep->sites));
- ret = 0;
- goto errunlock;
- }
- RPRINT(dbenv, rep, (dbenv, &mb,
- "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));
-#ifdef DIAGNOSTIC
- if (rep->sites > 1)
- RPRINT(dbenv, rep, (dbenv, &mb,
- "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
- __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)) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Not in election, but received vote1 0x%x",
- rep->flags));
- ret = DB_REP_HOLDELECTION;
- goto errunlock;
- }
-
- master = rep->winner;
- lsn = rep->w_lsn;
/*
- * 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.
+ * Handle even if we're recovering.
*/
- done = rep->sites >= rep->nsites && rep->w_priority != 0;
- if (done) {
- RPRINT(dbenv, rep,
- (dbenv, &mb, "Phase1 election done"));
- RPRINT(dbenv, rep, (dbenv, &mb, "Voting for %d%s",
- master, master == rep->eid ? "(self)" : ""));
- egen = rep->egen;
- F_SET(rep, REP_F_EPHASE2);
- 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. */
- __rep_send_vote(dbenv, NULL, 0, 0, 0, 0, egen,
- master, REP_VOTE2);
- } else
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-
- /* Election is still going on. */
+ ret = __rep_vote1(dbenv, rp, rec, eidp);
break;
case REP_VOTE2:
- RPRINT(dbenv, rep, (dbenv, &mb, "We received a vote%s",
- F_ISSET(rep, REP_F_MASTER) ? " (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++;
- (void)__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0);
- goto errlock;
- }
-
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
-
- /* If we have priority 0, we should never get a vote. */
- DB_ASSERT(rep->priority != 0);
-
/*
- * 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.
+ * Handle even if we're recovering.
*/
- vi = (REP_VOTE_INFO *)rec->data;
- if (!IN_ELECTION_TALLY(rep) && vi->egen >= rep->egen) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Not in election gen %lu, at %lu, got vote",
- (u_long)vi->egen, (u_long)rep->egen));
- ret = DB_REP_HOLDELECTION;
- goto errunlock;
- }
-
- /*
- * 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->nvotes;
- RPRINT(dbenv, rep, (dbenv, &mb, "Counted vote %d of %d",
- rep->votes, rep->nvotes));
- if (done) {
- __rep_elect_master(dbenv, rep, eidp);
- ret = DB_REP_NEWMASTER;
- goto errunlock;
- } else
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ ret = __rep_vote2(dbenv, rec, eidp);
break;
default:
- __db_err(dbenv,
+ __db_errx(dbenv,
"DB_ENV->rep_process_message: unknown replication message: type %lu",
(u_long)rp->rectype);
ret = EINVAL;
- goto errlock;
+ break;
}
- /*
- * 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_SYSTEM_LOCK(dbenv);
rep->msg_th--;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
out:
- if (ret == 0 && F_ISSET(rp, DB_LOG_PERM)) {
+ if (ret == 0 && F_ISSET(rp, REPCTL_PERM)) {
if (ret_lsnp != NULL)
*ret_lsnp = rp->lsn;
ret = DB_REP_NOTPERM;
@@ -1228,14 +633,18 @@ out:
* __rep_process_rec, when possible and enqueuing in the __db.rep.db
* when necessary. As gaps in the stream are filled in, this is where
* we try to process as much as possible from __db.rep.db to catch up.
+ *
+ * PUBLIC: int __rep_apply __P((DB_ENV *, REP_CONTROL *,
+ * PUBLIC: DBT *, DB_LSN *, int *, DB_LSN *));
*/
-static int
-__rep_apply(dbenv, rp, rec, ret_lsnp, is_dupp)
+int
+__rep_apply(dbenv, rp, rec, ret_lsnp, is_dupp, last_lsnp)
DB_ENV *dbenv;
REP_CONTROL *rp;
DBT *rec;
DB_LSN *ret_lsnp;
int *is_dupp;
+ DB_LSN *last_lsnp;
{
DB_REP *db_rep;
DBT control_dbt, key_dbt;
@@ -1261,14 +670,14 @@ __rep_apply(dbenv, rp, rec, ret_lsnp, is_dupp)
ZERO_LSN(max_lsn);
dblp = dbenv->lg_handle;
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
lp = dblp->reginfo.primary;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
if (F_ISSET(rep, REP_F_RECOVER_LOG) &&
- log_compare(&lp->ready_lsn, &rep->first_lsn) < 0)
+ LOG_COMPARE(&lp->ready_lsn, &rep->first_lsn) < 0)
lp->ready_lsn = rep->first_lsn;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- cmp = log_compare(&rp->lsn, &lp->ready_lsn);
+ REP_SYSTEM_UNLOCK(dbenv);
+ cmp = LOG_COMPARE(&rp->lsn, &lp->ready_lsn);
if (cmp == 0) {
if ((ret =
@@ -1280,16 +689,15 @@ __rep_apply(dbenv, rp, rec, ret_lsnp, is_dupp)
* towards the request interval.
*/
lp->rcvd_recs = 0;
+ ZERO_LSN(lp->max_wait_lsn);
while (ret == 0 &&
- log_compare(&lp->ready_lsn, &lp->waiting_lsn) == 0) {
+ 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->rcvd_recs = 0;
- ZERO_LSN(lp->max_wait_lsn);
if ((ret =
__rep_remfirst(dbenv, &control_dbt, &rec_dbt)) != 0)
goto err;
@@ -1305,7 +713,23 @@ gap_check:
*/
--rep->stat.st_log_queued;
+ /*
+ * Since we just filled a gap in the log stream, and
+ * we're writing subsequent records to the log, we want
+ * to use rcvd_recs and wait_recs so that we will
+ * request the next gap if we end up with a gap and
+ * a lot of records still in the temp db, but not
+ * request if it is near the end of the temp db and
+ * likely to arrive on its own shortly. We want to
+ * avoid requesting the record in that case. Also
+ * reset max_wait_lsn because the next gap is a
+ * fresh gap.
+ */
+ lp->rcvd_recs = rep->stat.st_log_queued;
+ lp->wait_recs = rep->request_gap;
+
if ((ret = __rep_getnext(dbenv)) == DB_NOTFOUND) {
+ lp->rcvd_recs = 0;
ret = 0;
break;
} else if (ret != 0)
@@ -1317,13 +741,17 @@ gap_check:
* need to ask for any records.
*/
if (!IS_ZERO_LSN(lp->waiting_lsn) &&
- log_compare(&lp->ready_lsn, &lp->waiting_lsn) != 0) {
+ 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.
+ * still be waiting for more records. If we
+ * filled a gap we keep a count of how many other
+ * records are in the temp database and if we should
+ * request the next gap at this time.
*/
- if (__rep_check_doreq(dbenv, rep))
- __rep_loggap_req(dbenv, rep, &rp->lsn, 0);
+ if (__rep_check_doreq(dbenv, rep) && (ret =
+ __rep_loggap_req(dbenv, rep, &rp->lsn, 0)) != 0)
+ goto err;
} else {
lp->wait_recs = 0;
ZERO_LSN(lp->max_wait_lsn);
@@ -1351,8 +779,9 @@ gap_check:
lp->rcvd_recs = 0;
ZERO_LSN(lp->max_wait_lsn);
}
- if (__rep_check_doreq(dbenv, rep))
- __rep_loggap_req(dbenv, rep, &rp->lsn, 0);
+ if (__rep_check_doreq(dbenv, rep) &&
+ (ret = __rep_loggap_req(dbenv, rep, &rp->lsn, 0) != 0))
+ goto err;
ret = __db_put(dbp, NULL, &key_dbt, rec, DB_NOOVERWRITE);
rep->stat.st_log_queued++;
@@ -1366,14 +795,14 @@ gap_check:
goto done;
if (IS_ZERO_LSN(lp->waiting_lsn) ||
- log_compare(&rp->lsn, &lp->waiting_lsn) < 0)
+ LOG_COMPARE(&rp->lsn, &lp->waiting_lsn) < 0)
lp->waiting_lsn = rp->lsn;
/*
* 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 == 0 && F_ISSET(rp, REPCTL_PERM)) {
max_lsn = rp->lsn;
ret = DB_REP_NOTPERM;
}
@@ -1386,47 +815,56 @@ gap_check:
rep->stat.st_log_duplicated++;
if (is_dupp != NULL)
*is_dupp = 1;
- if (F_ISSET(rp, DB_LOG_PERM))
+ if (F_ISSET(rp, REPCTL_PERM))
max_lsn = lp->max_perm_lsn;
goto done;
}
/* Check if we need to go back into the table. */
- if (ret == 0 && log_compare(&lp->ready_lsn, &lp->waiting_lsn) == 0)
+ if (ret == 0 && LOG_COMPARE(&lp->ready_lsn, &lp->waiting_lsn) == 0)
goto gap_check;
done:
-err: /* Check if we need to go back into the table. */
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+err: /*
+ * In case of a race, to make sure only one thread can get
+ * DB_REP_LOGREADY, zero out rep->last_lsn to show that we've gotten to
+ * this point.
+ */
+ REP_SYSTEM_LOCK(dbenv);
if (ret == 0 &&
F_ISSET(rep, REP_F_RECOVER_LOG) &&
- log_compare(&lp->ready_lsn, &rep->last_lsn) >= 0) {
- rep->last_lsn = max_lsn;
+ !IS_ZERO_LSN(rep->last_lsn) &&
+ LOG_COMPARE(&lp->ready_lsn, &rep->last_lsn) >= 0) {
+ *last_lsnp = max_lsn;
+ ZERO_LSN(rep->last_lsn);
ZERO_LSN(max_lsn);
ret = DB_REP_LOGREADY;
}
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
if (ret == 0 && !F_ISSET(rep, REP_F_RECOVER_LOG) &&
!IS_ZERO_LSN(max_lsn)) {
if (ret_lsnp != NULL)
*ret_lsnp = max_lsn;
ret = DB_REP_ISPERM;
- DB_ASSERT(log_compare(&max_lsn, &lp->max_perm_lsn) >= 0);
+ DB_ASSERT(dbenv, LOG_COMPARE(&max_lsn, &lp->max_perm_lsn) >= 0);
lp->max_perm_lsn = max_lsn;
}
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
/*
- * Startup is complete when we process our first live record. However,
- * we want to return DB_REP_STARTUPDONE on the first record we can --
- * but other return values trump this one. We know we've processed at
- * least one record when rectype is non-zero.
+ * Startup is complete when we process our first live record. We know
+ * we've processed at least one record when rectype is non-zero.
*/
- if (ret == 0 && !F_ISSET(rp, DB_LOG_RESEND) &&
+ if ((ret == 0 || ret == DB_REP_ISPERM) && !F_ISSET(rp, REPCTL_RESEND) &&
rectype != 0 && rep->stat.st_startup_complete == 0) {
rep->stat.st_startup_complete = 1;
- ret = DB_REP_STARTUPDONE;
+#ifdef DIAGNOSTIC
+ RPRINT(dbenv, (dbenv, &mb,
+ "Firing STARTUPDONE event [%lu][%lu]",
+ (u_long)rp->lsn.file, (u_long)rp->lsn.offset));
+#endif
+ DB_EVENT(dbenv, DB_EVENT_REP_STARTUPDONE, NULL);
}
if (ret == 0 && rp->rectype == REP_NEWFILE && lp->db_log_autoremove)
__log_autoremove(dbenv);
@@ -1441,22 +879,18 @@ err: /* Check if we need to go back into the table. */
#ifdef DIAGNOSTIC
if (ret == DB_REP_ISPERM)
- RPRINT(dbenv, rep, (dbenv, &mb, "Returning ISPERM [%lu][%lu]",
+ RPRINT(dbenv, (dbenv, &mb, "Returning ISPERM [%lu][%lu]",
(u_long)max_lsn.file, (u_long)max_lsn.offset));
else if (ret == DB_REP_LOGREADY)
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Returning LOGREADY up to [%lu][%lu]",
(u_long)rep->last_lsn.file,
(u_long)rep->last_lsn.offset));
else if (ret == DB_REP_NOTPERM)
- RPRINT(dbenv, rep, (dbenv, &mb, "Returning NOTPERM [%lu][%lu]",
+ RPRINT(dbenv, (dbenv, &mb, "Returning NOTPERM [%lu][%lu]",
(u_long)max_lsn.file, (u_long)max_lsn.offset));
- else if (ret == DB_REP_STARTUPDONE)
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Returning STARTUPDONE [%lu][%lu]",
- (u_long)rp->lsn.file, (u_long)rp->lsn.offset));
else if (ret != 0)
- RPRINT(dbenv, rep, (dbenv, &mb, "Returning %d [%lu][%lu]", ret,
+ RPRINT(dbenv, (dbenv, &mb, "Returning %d [%lu][%lu]", ret,
(u_long)max_lsn.file, (u_long)max_lsn.offset));
#endif
return (ret);
@@ -1480,19 +914,21 @@ __rep_process_txn(dbenv, rec)
DB_LOGC *logc;
DB_LSN prev_lsn, *lsnp;
DB_REP *db_rep;
+ DB_TXNHEAD *txninfo;
LSN_COLLECTION lc;
REP *rep;
__txn_regop_args *txn_args;
+ __txn_regop_42_args *txn42_args;
__txn_xa_regop_args *prep_args;
u_int32_t lockid, rectype;
u_int i;
int ret, t_ret;
- void *txninfo;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
logc = NULL;
txn_args = NULL;
+ txn42_args = NULL;
prep_args = NULL;
txninfo = NULL;
@@ -1516,17 +952,30 @@ __rep_process_txn(dbenv, rec)
* We're the end of a transaction. Make sure this is
* really a commit and not an abort!
*/
- if ((ret = __txn_regop_read(dbenv, rec->data, &txn_args)) != 0)
- return (ret);
- if (txn_args->opcode != TXN_COMMIT) {
- __os_free(dbenv, txn_args);
- return (0);
+ if (rep->version >= DB_REPVERSION_44) {
+ if ((ret = __txn_regop_read(dbenv, rec->data,
+ &txn_args)) != 0)
+ return (ret);
+ 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 {
+ if ((ret = __txn_regop_42_read(dbenv, rec->data,
+ &txn42_args)) != 0)
+ return (ret);
+ if (txn42_args->opcode != TXN_COMMIT) {
+ __os_free(dbenv, txn42_args);
+ return (0);
+ }
+ prev_lsn = txn42_args->prev_lsn;
+ lock_dbt = &txn42_args->locks;
}
- prev_lsn = txn_args->prev_lsn;
- lock_dbt = &txn_args->locks;
} else {
/* We're a prepare. */
- DB_ASSERT(rectype == DB___txn_xa_regop);
+ DB_ASSERT(dbenv, rectype == DB___txn_xa_regop);
if ((ret =
__txn_xa_regop_read(dbenv, rec->data, &prep_args)) != 0)
@@ -1536,7 +985,7 @@ __rep_process_txn(dbenv, rec)
}
/* Get locks. */
- if ((ret = __lock_id(dbenv, &lockid)) != 0)
+ if ((ret = __lock_id(dbenv, &lockid, NULL)) != 0)
goto err1;
if ((ret =
@@ -1561,14 +1010,14 @@ __rep_process_txn(dbenv, rec)
goto err;
for (lsnp = &lc.array[0], i = 0; i < lc.nlsns; i++, lsnp++) {
if ((ret = __log_c_get(logc, lsnp, &data_dbt, DB_SET)) != 0) {
- __db_err(dbenv, "failed to read the log at [%lu][%lu]",
+ __db_errx(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_err(dbenv, "transaction failed at [%lu][%lu]",
+ __db_errx(dbenv, "transaction failed at [%lu][%lu]",
(u_long)lsnp->file, (u_long)lsnp->offset);
goto err;
}
@@ -1585,6 +1034,8 @@ err: memset(&req, 0, sizeof(req));
err1: if (txn_args != NULL)
__os_free(dbenv, txn_args);
+ if (txn42_args != NULL)
+ __os_free(dbenv, txn42_args);
if (prep_args != NULL)
__os_free(dbenv, prep_args);
if (lc.array != NULL)
@@ -1671,7 +1122,7 @@ __rep_collect_txn(dbenv, lsnp, lc)
goto err;
}
if (ret != 0)
- __db_err(dbenv, "collect failed at: [%lu][%lu]",
+ __db_errx(dbenv, "collect failed at: [%lu][%lu]",
(u_long)lsnp->file, (u_long)lsnp->offset);
err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
@@ -1683,14 +1134,14 @@ err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
/*
* __rep_lsn_cmp --
- * qsort-type-compatible wrapper for log_compare.
+ * qsort-type-compatible wrapper for LOG_COMPARE.
*/
static int
__rep_lsn_cmp(lsn1, lsn2)
const void *lsn1, *lsn2;
{
- return (log_compare((DB_LSN *)lsn1, (DB_LSN *)lsn2));
+ return (LOG_COMPARE((DB_LSN *)lsn1, (DB_LSN *)lsn2));
}
/*
@@ -1700,391 +1151,39 @@ __rep_lsn_cmp(lsn1, lsn2)
* swapped files.
*/
static int
-__rep_newfile(dbenv, rc, lsnp)
+__rep_newfile(dbenv, rc, rec, lsnp)
DB_ENV *dbenv;
REP_CONTROL *rc;
+ DBT *rec;
DB_LSN *lsnp;
{
DB_LOG *dblp;
LOG *lp;
-
- dblp = dbenv->lg_handle;
- lp = dblp->reginfo.primary;
-
- if (rc->lsn.file + 1 > lp->lsn.file)
- return (__log_newfile(dblp, lsnp, 0));
- else {
- /* We've already applied this NEWFILE. Just ignore it. */
- *lsnp = lp->lsn;
- return (0);
- }
-}
-
-/*
- * __rep_tally --
- * PUBLIC: int __rep_tally __P((DB_ENV *, REP *, int, int *,
- * PUBLIC: u_int32_t, roff_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;
- roff_t vtoff;
-{
- REP_VTALLY *tally, *vtp;
- int i;
-#ifdef DIAGNOSTIC
- DB_MSGBUF mb;
-#else
- 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) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Tally found[%d] (%d, %lu), this vote (%d, %lu)",
- i, vtp->eid, (u_long)vtp->egen,
- eid, (u_long)egen));
- 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 (vtoff == rep->tally_off)
- RPRINT(dbenv, rep, (dbenv, &mb, "Tallying VOTE1[%d] (%d, %lu)",
- i, eid, (u_long)egen));
- else
- RPRINT(dbenv, rep, (dbenv, &mb, "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, u_int32_t, u_int32_t));
- *
- * 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;
- u_int32_t gen, tiebreaker;
-{
- int cmp;
-
+ u_int32_t version;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
-#else
- 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))))) {
- RPRINT(dbenv, rep, (dbenv, &mb, "Accepting new vote"));
- 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;
-#ifdef DIAGNOSTIC
- DB_MSGBUF mb;
-#endif
-
- 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) {
- RPRINT(dbenv, rep, (dbenv, &mb,
- "Found matching vote1 (%d, %lu), at %d of %d",
- eid, (u_long)egen, i, rep->sites));
- return (0);
- }
- }
- RPRINT(dbenv, rep,
- (dbenv, &mb, "Didn't find vote1 for eid %d, egen %lu",
- eid, (u_long)egen));
- return (1);
-}
-
-static int
-__rep_dorecovery(dbenv, lsnp, trunclsnp)
- DB_ENV *dbenv;
- DB_LSN *lsnp, *trunclsnp;
-{
- DB_LSN lsn;
- DB_REP *db_rep;
- DBT mylog;
- DB_LOGC *logc;
- int ret, t_ret, update;
- u_int32_t rectype;
- __txn_regop_args *txnrec;
-
- db_rep = dbenv->rep_handle;
-
- /* Figure out if we are backing out any committed transactions. */
- if ((ret = __log_cursor(dbenv, &logc)) != 0)
- return (ret);
-
- memset(&mylog, 0, sizeof(mylog));
- update = 0;
- while (update == 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)
- update = 1;
- __os_free(dbenv, txnrec);
- }
- }
-
- /*
- * If we successfully run recovery, we've opened all the necessary
- * files. We are guaranteed to be single-threaded here, so no mutex
- * is necessary.
- */
- if ((ret = __db_apprec(dbenv, lsnp, trunclsnp, update, 0)) == 0)
- F_SET(db_rep, DBREP_OPENFILES);
-
-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, reclsnp, savetime)
- DB_ENV *dbenv;
- DB_LSN *reclsnp;
- time_t savetime;
-{
- DB_LOG *dblp;
- DB_LSN trunclsn;
- DB_REP *db_rep;
- LOG *lp;
- REGENV *renv;
- REGINFO *infop;
- REP *rep;
- int done, master, ret;
- u_int32_t unused;
dblp = dbenv->lg_handle;
- db_rep = dbenv->rep_handle;
- rep = db_rep->region;
lp = dblp->reginfo.primary;
- ret = 0;
- infop = dbenv->reginfo;
- renv = infop->primary;
- /*
- * 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);
- done = savetime != renv->rep_timestamp;
- if (done) {
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ if (rc->lsn.file + 1 > lp->lsn.file) {
+ version = *(u_int32_t *)rec->data;
+ RPRINT(dbenv, (dbenv, &mb, "Rep_newfile: File %d vers %d",
+ rc->lsn.file + 1, version));
+ return (__log_newfile(dblp, lsnp, 0, version));
+ } else {
+ /* We've already applied this NEWFILE. Just ignore it. */
+ *lsnp = lp->lsn;
return (0);
}
- ZERO_LSN(lp->verify_lsn);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
-
- /*
- * 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_RECOVER_LOG) &&
- (F_ISSET(rep, REP_F_READY) || rep->in_recovery != 0)) {
- rep->stat.st_msgs_recover++;
- goto errunlock;
- }
-
- __rep_lockout(dbenv, db_rep, rep, 1);
-
- /* OK, everyone is out, we can now run recovery. */
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-
- if ((ret = __rep_dorecovery(dbenv, reclsnp, &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;
- ZERO_LSN(lp->waiting_lsn);
- ZERO_LSN(lp->max_wait_lsn);
- lp->max_perm_lsn = *reclsnp;
- 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);
- 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_RECOVER_MASK);
-
- 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, reclsnp, NULL, 0);
- if (0) {
-errunlock:
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- }
- return (ret);
}
/*
* __rep_do_ckp --
- * Perform the memp_sync necessary for this checkpoint without holding
- * the db_rep->db_mutexp. All callers of this function must hold the
- * db_rep->db_mutexp and must not be holding the db_rep->rep_mutexp.
+ * Perform the memp_sync necessary for this checkpoint without holding the
+ * REP->mtx_clientdb. Callers of this function must hold REP->mtx_clientdb
+ * and must not be holding the region mutex.
*/
static int
__rep_do_ckp(dbenv, rec, rp)
@@ -2098,9 +1197,9 @@ __rep_do_ckp(dbenv, rec, rp)
db_rep = dbenv->rep_handle;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->region->mtx_clientdb);
- DB_TEST_CHECKPOINT(dbenv, dbenv->test_check);
+ DB_TEST_WAIT(dbenv, dbenv->test_check);
/* Sync the memory pool. */
memcpy(&ckp_lsn, (u_int8_t *)rec->data +
@@ -2109,13 +1208,13 @@ __rep_do_ckp(dbenv, rec, rp)
/* Update the last_ckp in the txn region. */
if (ret == 0)
- __txn_updateckp(dbenv, &rp->lsn);
+ ret = __txn_updateckp(dbenv, &rp->lsn);
else {
- __db_err(dbenv, "Error syncing ckp [%lu][%lu]",
+ __db_errx(dbenv, "Error syncing ckp [%lu][%lu]",
(u_long)ckp_lsn.file, (u_long)ckp_lsn.offset);
ret = __db_panic(dbenv, ret);
}
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, db_rep->region->mtx_clientdb);
return (ret);
}
@@ -2134,7 +1233,6 @@ __rep_remfirst(dbenv, cntrl, rec)
DBC *dbc;
DB_REP *db_rep;
int ret, t_ret;
- u_int32_t rectype;
db_rep = dbenv->rep_handle;
dbp = db_rep->rep_db;
@@ -2145,10 +1243,8 @@ __rep_remfirst(dbenv, cntrl, rec)
/* The DBTs need to persist through another call. */
F_SET(cntrl, DB_DBT_REALLOC);
F_SET(rec, DB_DBT_REALLOC);
- if ((ret = __db_c_get(dbc, cntrl, rec, DB_RMW | DB_FIRST)) == 0) {
- memcpy(&rectype, rec->data, sizeof(rectype));
+ if ((ret = __db_c_get(dbc, cntrl, rec, DB_RMW | DB_FIRST)) == 0)
ret = __db_c_del(dbc, 0);
- }
if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
@@ -2251,7 +1347,7 @@ __rep_process_rec(dbenv, rp, rec, typep, ret_lsnp)
ret = 0;
if (rp->rectype == REP_NEWFILE) {
- ret = __rep_newfile(dbenv, rp, &lp->ready_lsn);
+ ret = __rep_newfile(dbenv, rp, rec, &lp->ready_lsn);
/* Make this evaluate to a simple rectype. */
*typep = 0;
@@ -2295,15 +1391,22 @@ __rep_process_rec(dbenv, rp, rec, typep, ret_lsnp)
/*
* DB opens occur in the context of a transaction, so we can
* simply handle them when we process the transaction. Closes,
- * however, are not transaction-protected, so we have to
- * handle them here.
+ * however, are not transaction-protected, so we have to handle
+ * them here.
+ *
+ * It should be unsafe for the master to do a close of a file
+ * that was opened in an active transaction, so we should be
+ * guaranteed to get the ordering right.
*
- * Note that it should be unsafe for the master to do a close
- * of a file that was opened in an active transaction, so we
- * should be guaranteed to get the ordering right.
+ * !!!
+ * The txn ID is the second 4-byte field of the log record.
+ * We should really be calling __dbreg_register_read() and
+ * working from the __dbreg_register_args structure, but this
+ * is considerably faster and the order of the fields won't
+ * change.
*/
- memcpy(&txnid, (u_int8_t *)rec->data +
- SSZ(__dbreg_register_args, txnid), sizeof(u_int32_t));
+ memcpy(&txnid, (u_int8_t *)
+ rec->data + sizeof(u_int32_t), sizeof(u_int32_t));
if (txnid == TXN_INVALID)
ret = __db_dispatch(dbenv, dbenv->recover_dtab,
dbenv->recover_dtab_size, rec, &rp->lsn,
@@ -2332,7 +1435,7 @@ __rep_process_rec(dbenv, rp, rec, typep, ret_lsnp)
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]",
+ __db_errx(dbenv, "Error processing txn [%lu][%lu]",
(u_long)rp->lsn.file, (u_long)rp->lsn.offset);
ret = __db_panic(dbenv, ret);
}
@@ -2342,15 +1445,13 @@ __rep_process_rec(dbenv, rp, rec, typep, ret_lsnp)
break;
case DB___txn_ckp:
/*
- * We do not want to hold the db_rep->db_mutexp
- * mutex while syncing the mpool, so if we get
- * a checkpoint record that we are supposed to
- * process, we add it to the __db.rep.db, do
- * the memp_sync and then go back and process
- * it later, when the sync has finished. If
- * this record is already in the table, then
- * some other thread will process it, so simply
- * return REP_NOTPERM;
+ * We do not want to hold the REP->mtx_clientdb mutex while
+ * syncing the mpool, so if we get a checkpoint record we are
+ * supposed to process, add it to the __db.rep.db, do the
+ * memp_sync and then go back and process it later, when the
+ * sync has finished. If this record is already in the table,
+ * then some other thread will process it, so simply return
+ * REP_NOTPERM.
*/
memset(&key_dbt, 0, sizeof(key_dbt));
key_dbt.data = rp;
@@ -2383,13 +1484,19 @@ __rep_process_rec(dbenv, rp, rec, typep, ret_lsnp)
if ((t_ret = __rep_remfirst(dbenv,
&control_dbt, &rec_dbt)) != 0 && ret == 0)
ret = t_ret;
+ /*
+ * If we're successful putting the log record in the
+ * log, flush it for a checkpoint.
+ */
+ if (ret == 0)
+ ret = __log_flush(dbenv, NULL);
break;
default:
break;
}
out:
- if (ret == 0 && F_ISSET(rp, DB_LOG_PERM))
+ if (ret == 0 && F_ISSET(rp, REPCTL_PERM))
*ret_lsnp = rp->lsn;
if (control_dbt.data != NULL)
__os_ufree(dbenv, control_dbt.data);
@@ -2406,9 +1513,9 @@ out:
* The caller holds no locks.
*/
static int
-__rep_resend_req(dbenv, eid)
+__rep_resend_req(dbenv, rereq)
DB_ENV *dbenv;
- int eid;
+ int rereq;
{
DB_LOG *dblp;
@@ -2417,37 +1524,45 @@ __rep_resend_req(dbenv, eid)
LOG *lp;
REP *rep;
int ret;
- u_int32_t repflags;
+ u_int32_t gapflags, repflags;
- ret = 0;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
+ ret = 0;
repflags = rep->flags;
+ /*
+ * If we are delayed we do not rerequest anything.
+ */
+ if (FLD_ISSET(repflags, REP_F_DELAY))
+ return (ret);
+ gapflags = rereq ? REP_GAP_REREQUEST : 0;
+
if (FLD_ISSET(repflags, REP_F_RECOVER_VERIFY)) {
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
lsn = lp->verify_lsn;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
if (!IS_ZERO_LSN(lsn))
- (void)__rep_send_message(dbenv, eid,
- REP_VERIFY_REQ, &lsn, NULL, 0);
- goto out;
+ (void)__rep_send_message(dbenv, rep->master_id,
+ REP_VERIFY_REQ, &lsn, NULL, 0, DB_REP_REREQUEST);
} else if (FLD_ISSET(repflags, REP_F_RECOVER_UPDATE)) {
- (void)__rep_send_message(dbenv, eid,
- REP_UPDATE_REQ, NULL, NULL, 0);
+ /*
+ * UPDATE_REQ only goes to the master.
+ */
+ (void)__rep_send_message(dbenv, rep->master_id,
+ REP_UPDATE_REQ, NULL, NULL, 0, 0);
} else if (FLD_ISSET(repflags, REP_F_RECOVER_PAGE)) {
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- ret = __rep_pggap_req(dbenv, rep, NULL, 0);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- } else if (FLD_ISSET(repflags, REP_F_RECOVER_LOG)) {
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- __rep_loggap_req(dbenv, rep, NULL, 0);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
+ ret = __rep_pggap_req(dbenv, rep, NULL, gapflags);
+ REP_SYSTEM_UNLOCK(dbenv);
+ } else {
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ ret = __rep_loggap_req(dbenv, rep, NULL, gapflags);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
}
-out:
return (ret);
}
@@ -2457,7 +1572,7 @@ out:
*
* Check if we need to send another request. If so, compare with
* the request limits the user might have set. This assumes the
- * caller holds the db_rep->db_mutexp mutex. Returns 1 if a request
+ * caller holds the REP->mtx_clientdb mutex. Returns 1 if a request
* needs to be made, and 0 if it does not.
*/
int
@@ -2483,51 +1598,55 @@ __rep_check_doreq(dbenv, rep)
}
/*
- * __rep_lockout --
- * PUBLIC: void __rep_lockout __P((DB_ENV *, DB_REP *, REP *, u_int32_t));
+ * __rep_skip_msg -
*
- * Coordinate with other threads in the library and active txns so
- * that we can run single-threaded, for recovery or internal backup.
- * Assumes the caller holds rep_mutexp.
+ * If we're in recovery we want to skip/ignore the message, but
+ * we also need to see if we need to re-request any retransmissions.
*/
-void
-__rep_lockout(dbenv, db_rep, rep, msg_th)
+static int
+__rep_skip_msg(dbenv, rep, eid, rectype)
DB_ENV *dbenv;
- DB_REP *db_rep;
REP *rep;
- u_int32_t msg_th;
+ int eid;
+ u_int32_t rectype;
{
- int wait_cnt;
+ int do_req, ret;
- /* 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/backup for %d minutes",
- wait_cnt / 60);
-#endif
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ ret = 0;
+ /*
+ * If we have a request message from a client then immediately
+ * send a REP_REREQUEST back to that client since we're skipping it.
+ */
+ if (F_ISSET(rep, REP_F_CLIENT) && REP_MSG_REQ(rectype))
+ do_req = 1;
+ else {
+ /* Check for need to retransmit. */
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ do_req = __rep_check_doreq(dbenv, rep);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
}
-
/*
- * 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).
+ * Don't respond to a MASTER_REQ with
+ * a MASTER_REQ or REREQUEST.
*/
- rep->in_recovery = 1;
- for (wait_cnt = 0; rep->handle_cnt != 0 || rep->msg_th > msg_th;) {
- 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 count to run replication recovery/backup for %d minutes",
- wait_cnt / 60);
-#endif
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (do_req && rectype != REP_MASTER_REQ) {
+ /*
+ * There are three cases:
+ * 1. If we don't know who the master is, then send MASTER_REQ.
+ * 2. If the message we're skipping came from the master,
+ * then we need to rerequest.
+ * 3. If the message didn't come from a master (i.e. client
+ * to client), then send a rerequest back to the sender so
+ * the sender can rerequest it elsewhere, if we are a client.
+ */
+ if (rep->master_id == DB_EID_INVALID) /* Case 1. */
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0, 0);
+ else if (eid == rep->master_id) /* Case 2. */
+ ret = __rep_resend_req(dbenv, 0);
+ else if (F_ISSET(rep, REP_F_CLIENT)) /* Case 3. */
+ (void)__rep_send_message(dbenv,
+ eid, REP_REREQUEST, NULL, NULL, 0, 0);
}
+ return (ret);
}
diff --git a/db/rep/rep_region.c b/db/rep/rep_region.c
index 2a5afc786..dc500d1cf 100644
--- a/db/rep/rep_region.c
+++ b/db/rep/rep_region.c
@@ -1,49 +1,33 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep_region.c,v 1.53 2004/10/15 16:59:44 bostic Exp $
+ * $Id: rep_region.c,v 12.29 2006/08/24 14:46:25 bostic Exp $
*/
#include "db_config.h"
-#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/db_page.h"
-#include "dbinc/log.h"
#include "dbinc/db_am.h"
+#include "dbinc/log.h"
static int __rep_egen_init __P((DB_ENV *, REP *));
/*
- * __rep_region_init --
+ * __rep_open --
* Initialize the shared memory state for the replication system.
*
- * PUBLIC: int __rep_region_init __P((DB_ENV *));
+ * PUBLIC: int __rep_open __P((DB_ENV *));
*/
int
-__rep_region_init(dbenv)
+__rep_open(dbenv)
DB_ENV *dbenv;
{
REGENV *renv;
REGINFO *infop;
- DB_MUTEX *db_mutexp;
DB_REP *db_rep;
REP *rep;
int ret;
@@ -53,32 +37,20 @@ __rep_region_init(dbenv)
renv = infop->primary;
ret = 0;
- MUTEX_LOCK(dbenv, &renv->mutex);
if (renv->rep_off == INVALID_ROFF) {
/* Must create the region. */
- if ((ret =
- __db_shalloc(infop, sizeof(REP), MUTEX_ALIGN, &rep)) != 0)
- goto err;
+ if ((ret = __db_shalloc(infop, sizeof(REP), 0, &rep)) != 0)
+ return (ret);
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,
- MUTEX_NO_RECORD)) != 0)
- goto err;
/*
- * We must create a place for the db_mutex separately;
- * mutexes have to be aligned to MUTEX_ALIGN, and the only way
- * to guarantee that is to make sure they're at the beginning
- * of a shalloc'ed chunk.
+ * We have the region; fill in the values. Some values may
+ * have been configured before we open the region, and those
+ * are taken from the DB_REP structure.
*/
- if ((ret = __db_shalloc(infop, sizeof(DB_MUTEX),
- MUTEX_ALIGN, &db_mutexp)) != 0)
- goto err;
- rep->db_mutex_off = R_OFFSET(infop, db_mutexp);
-
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_REP_REGION, 0, &rep->mtx_region)) != 0)
+ return (ret);
/*
* Because we have no way to prevent deadlocks and cannot log
* changes made to it, we single-thread access to the client
@@ -86,36 +58,41 @@ __rep_region_init(dbenv)
* accessed when messages arrive out-of-order, so it should
* stay small and not be used in a high-performance app.
*/
- if ((ret = __db_mutex_setup(dbenv, infop, db_mutexp,
- MUTEX_NO_RECORD)) != 0)
- goto err;
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_REP_DATABASE, 0, &rep->mtx_clientdb)) != 0)
+ return (ret);
- /* We have the region; fill in the values. */
- rep->eid = DB_EID_INVALID;
+ rep->tally_off = INVALID_ROFF;
+ rep->v2tally_off = INVALID_ROFF;
+ rep->eid = db_rep->eid;
rep->master_id = DB_EID_INVALID;
rep->gen = 0;
+ rep->version = DB_REPVERSION;
if ((ret = __rep_egen_init(dbenv, rep)) != 0)
- goto err;
- /*
- * Set default values for the min and max log records that we
- * wait before requesting a missing log record.
- */
- rep->request_gap = DB_REP_REQUEST_GAP;
- rep->max_gap = DB_REP_MAX_GAP;
+ return (ret);
+ rep->gen = 0;
+ rep->gbytes = db_rep->gbytes;
+ rep->bytes = db_rep->bytes;
+ rep->request_gap = db_rep->request_gap;
+ rep->max_gap = db_rep->max_gap;
+ rep->config_nsites = db_rep->config_nsites;
+ rep->config = db_rep->config;
+ rep->elect_timeout = db_rep->elect_timeout;
+ rep->priority = db_rep->my_priority;
+
F_SET(rep, REP_F_NOARCHIVE);
+
+ /* Initialize encapsulating region. */
+ renv->rep_off = R_OFFSET(infop, rep);
(void)time(&renv->rep_timestamp);
+ renv->op_timestamp = 0;
+ F_CLR(renv, DB_REGENV_REPLOCKED);
} else
rep = R_ADDR(infop, renv->rep_off);
- MUTEX_UNLOCK(dbenv, &renv->mutex);
- db_rep->rep_mutexp = &rep->mutex;
- db_rep->db_mutexp = R_ADDR(infop, rep->db_mutex_off);
db_rep->region = rep;
return (0);
-
-err: MUTEX_UNLOCK(dbenv, &renv->mutex);
- return (ret);
}
/*
@@ -129,19 +106,29 @@ __rep_region_destroy(dbenv)
DB_ENV *dbenv;
{
DB_REP *db_rep;
+ REGENV *renv;
+ REGINFO *infop;
int ret, t_ret;
- ret = t_ret = 0;
- db_rep = dbenv->rep_handle;
+ if (!REP_ON(dbenv))
+ return (0);
+
+ ret = 0;
- if (db_rep != NULL) {
- 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);
+ db_rep = dbenv->rep_handle;
+ if (db_rep->region != NULL) {
+ ret = __mutex_free(dbenv, &db_rep->region->mtx_region);
+ if ((t_ret = __mutex_free(
+ dbenv, &db_rep->region->mtx_clientdb)) != 0 && ret == 0)
+ ret = t_ret;
}
- return (ret == 0 ? t_ret : ret);
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ if (renv->rep_off != INVALID_ROFF)
+ __db_shalloc_free(infop, R_ADDR(infop, renv->rep_off));
+
+ return (ret);
}
/*
@@ -154,70 +141,128 @@ void
__rep_dbenv_refresh(dbenv)
DB_ENV *dbenv;
{
- if (REP_ON(dbenv))
- ((DB_REP *)dbenv->rep_handle)->region = NULL;
- return;
+ dbenv->rep_handle->region = NULL;
}
/*
- * __rep_dbenv_close --
- * Replication-specific destruction of the DB_ENV structure.
+ * __rep_close --
+ * Shut down all of replication.
*
- * PUBLIC: int __rep_dbenv_close __P((DB_ENV *));
+ * PUBLIC: int __rep_close __P((DB_ENV *));
*/
int
-__rep_dbenv_close(dbenv)
+__rep_close(dbenv)
DB_ENV *dbenv;
{
- if (REP_ON(dbenv)) {
- __os_free(dbenv, dbenv->rep_handle);
- dbenv->rep_handle = NULL;
- dbenv->rep_send = NULL;
- }
+ int ret, t_ret;
- return (0);
+ ret = __rep_preclose(dbenv);
+ if ((t_ret = __rep_closefiles(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
}
/*
* __rep_preclose --
- * If we are a client, shut down our client database and, if we're
- * actually closing the environment, close all databases we've opened
- * while applying messages.
+ * If we are a client, shut down our client database and send
+ * any outstanding bulk buffers.
*
- * PUBLIC: int __rep_preclose __P((DB_ENV *, int));
+ * PUBLIC: int __rep_preclose __P((DB_ENV *));
*/
int
-__rep_preclose(dbenv, do_closefiles)
+__rep_preclose(dbenv)
DB_ENV *dbenv;
- int do_closefiles;
{
+ DB_LOG *dblp;
DB_REP *db_rep;
- int ret, t_ret;
+ LOG *lp;
+ REP_BULK bulk;
+ int ret;
ret = 0;
db_rep = dbenv->rep_handle;
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ dblp = dbenv->lg_handle;
+
+ /*
+ * If we have a rep region, we can preclose. Otherwise, return.
+ * If we're on an error path from env open, we may not have
+ * a region, even though we have a handle.
+ */
+ if (db_rep == NULL || db_rep->region == NULL)
+ return (ret);
+ MUTEX_LOCK(dbenv, db_rep->region->mtx_clientdb);
if (db_rep->rep_db != NULL) {
ret = __db_close(db_rep->rep_db, NULL, DB_NOSYNC);
db_rep->rep_db = NULL;
}
+ /*
+ * We could be called early in an env_open error path, so
+ * only do this if we have a log region set up.
+ */
+ if (dblp == NULL)
+ goto out;
+ lp = dblp->reginfo.primary;
+ /*
+ * If we have something in the bulk buffer, send anything in it
+ * if we are able to.
+ */
+ if (lp->bulk_off != 0 && db_rep->send != NULL) {
+ memset(&bulk, 0, sizeof(bulk));
+ bulk.addr = R_ADDR(&dblp->reginfo, lp->bulk_buf);
+ bulk.offp = &lp->bulk_off;
+ bulk.len = lp->bulk_len;
+ bulk.type = REP_BULK_LOG;
+ bulk.eid = DB_EID_BROADCAST;
+ bulk.flagsp = &lp->bulk_flags;
+ /*
+ * Ignore send errors here. This can be called on the
+ * env->close path - make a best attempt to send.
+ */
+ (void)__rep_send_bulk(dbenv, &bulk, 0);
+ }
+out: MUTEX_UNLOCK(dbenv, db_rep->region->mtx_clientdb);
+ return (ret);
+}
- if (do_closefiles) {
- if ((t_ret = __dbreg_close_files(dbenv)) != 0 && ret == 0)
- ret = t_ret;
+/*
+ * __rep_closefiles --
+ * If we were a client and are now a master, close all databases
+ * we've opened while applying messages as a client. This can
+ * be called from __env_close and we need to check if the env,
+ * handles and regions are set up, or not.
+ *
+ * PUBLIC: int __rep_closefiles __P((DB_ENV *));
+ */
+int
+__rep_closefiles(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_LOG *dblp;
+ DB_REP *db_rep;
+ int ret;
+
+ ret = 0;
+
+ db_rep = dbenv->rep_handle;
+ dblp = dbenv->lg_handle;
+
+ if (db_rep == NULL)
+ return (ret);
+ if (dblp == NULL)
+ return (ret);
+ if ((ret = __dbreg_close_files(dbenv)) == 0)
F_CLR(db_rep, DBREP_OPENFILES);
- }
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+
return (ret);
}
/*
* __rep_egen_init --
- * Initialize the value of egen in the region. Called
- * only from __rep_region_init, which is guaranteed to be
- * single-threaded as we create the rep region. We set the
- * rep->egen field which is normally protected by db_rep->rep_mutex.
+ * Initialize the value of egen in the region. Called only from
+ * __rep_region_init, which is guaranteed to be single-threaded
+ * as we create the rep region. We set the rep->egen field which
+ * is normally protected by db_rep->region->mutex.
*/
static int
__rep_egen_init(dbenv, rep)
@@ -238,7 +283,7 @@ __rep_egen_init(dbenv, rep)
/*
* If the file doesn't exist, create it now and initialize with 1.
*/
- if (__os_exists(p, NULL) != 0) {
+ if (__os_exists(dbenv, p, NULL) != 0) {
rep->egen = rep->gen + 1;
if ((ret = __rep_write_egen(dbenv, rep->egen)) != 0)
goto err;
@@ -247,12 +292,12 @@ __rep_egen_init(dbenv, rep)
* File exists, open it and read in our egen.
*/
if ((ret = __os_open(dbenv, p, DB_OSO_RDONLY,
- __db_omode("rw----"), &fhp)) != 0)
+ __db_omode(OWNER_RW), &fhp)) != 0)
goto err;
if ((ret = __os_read(dbenv, fhp, &rep->egen, sizeof(u_int32_t),
&cnt)) < 0 || cnt == 0)
goto err1;
- RPRINT(dbenv, rep, (dbenv, &mb, "Read in egen %lu",
+ RPRINT(dbenv, (dbenv, &mb, "Read in egen %lu",
(u_long)rep->egen));
err1: (void)__os_closehandle(dbenv, fhp);
}
@@ -280,10 +325,10 @@ __rep_write_egen(dbenv, egen)
__db_appname(dbenv, DB_APP_NONE, REP_EGENNAME, 0, NULL, &p)) != 0)
return (ret);
if ((ret = __os_open(dbenv, p, DB_OSO_CREATE | DB_OSO_TRUNC,
- __db_omode("rw----"), &fhp)) == 0) {
+ __db_omode(OWNER_RW), &fhp)) == 0) {
if ((ret = __os_write(dbenv, fhp, &egen, sizeof(u_int32_t),
&cnt)) != 0 || ((ret = __os_fsync(dbenv, fhp)) != 0))
- __db_err(dbenv, "%s: %s", p, db_strerror(ret));
+ __db_err(dbenv, ret, "%s", p);
(void)__os_closehandle(dbenv, fhp);
}
__os_free(dbenv, p);
diff --git a/db/rep/rep_stat.c b/db/rep/rep_stat.c
index d740c2b40..ab8a993ce 100644
--- a/db/rep/rep_stat.c
+++ b/db/rep/rep_stat.c
@@ -1,31 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep_stat.c,v 1.155 2004/09/29 15:36:38 bostic Exp $
+ * $Id: rep_stat.c,v 12.16 2006/09/07 16:51:04 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 <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
@@ -48,17 +31,22 @@ __rep_stat_pp(dbenv, statp, flags)
DB_REP_STAT **statp;
u_int32_t flags;
{
+ DB_THREAD_INFO *ip;
int ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv,
- dbenv->rep_handle, "DB_ENV->rep_stat", DB_INIT_REP);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_stat", DB_INIT_REP);
if ((ret = __db_fchk(dbenv,
"DB_ENV->rep_stat", flags, DB_STAT_CLEAR)) != 0)
return (ret);
- return (__rep_stat(dbenv, statp, flags));
+ ENV_ENTER(dbenv, ip);
+ ret = __rep_stat(dbenv, statp, flags);
+ ENV_LEAVE(dbenv, ip);
+
+ return (ret);
}
/*
@@ -99,20 +87,19 @@ __rep_stat(dbenv, statp, flags)
memcpy(stats, &rep->stat, sizeof(*stats));
/* Copy out election stats. */
- 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))
- stats->st_election_status = 2;
-
- stats->st_election_nsites = rep->sites;
- stats->st_election_cur_winner = rep->winner;
- stats->st_election_priority = rep->w_priority;
- stats->st_election_gen = rep->w_gen;
- stats->st_election_lsn = rep->w_lsn;
- stats->st_election_votes = rep->votes;
- stats->st_election_tiebreaker = rep->w_tiebreaker;
- }
+ if (F_ISSET(rep, REP_F_EPHASE1))
+ stats->st_election_status = 1;
+ else if (F_ISSET(rep, REP_F_EPHASE2))
+ stats->st_election_status = 2;
+
+ stats->st_election_nsites = rep->sites;
+ stats->st_election_cur_winner = rep->winner;
+ stats->st_election_priority = rep->w_priority;
+ stats->st_election_gen = rep->w_gen;
+ stats->st_election_lsn = rep->w_lsn;
+ stats->st_election_votes = rep->votes;
+ stats->st_election_nvotes = rep->nvotes;
+ stats->st_election_tiebreaker = rep->w_tiebreaker;
/* Copy out other info that's protected by the rep mutex. */
stats->st_env_id = rep->eid;
@@ -141,7 +128,7 @@ __rep_stat(dbenv, statp, flags)
* protected by the log region lock.
*/
if (dolock)
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
if (F_ISSET(rep, REP_F_CLIENT)) {
stats->st_next_lsn = lp->ready_lsn;
stats->st_waiting_lsn = lp->waiting_lsn;
@@ -155,7 +142,7 @@ __rep_stat(dbenv, statp, flags)
ZERO_LSN(stats->st_waiting_lsn);
}
if (dolock)
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
*statp = stats;
return (0);
@@ -172,17 +159,22 @@ __rep_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
+ DB_THREAD_INFO *ip;
int ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv,
- dbenv->rep_handle, "DB_ENV->rep_stat_print", DB_INIT_REP);
+ ENV_REQUIRES_CONFIG_XX(
+ dbenv, rep_handle, "DB_ENV->rep_stat_print", DB_INIT_REP);
if ((ret = __db_fchk(dbenv, "DB_ENV->rep_stat_print",
flags, DB_STAT_ALL | DB_STAT_CLEAR)) != 0)
return (ret);
- return (__rep_stat_print(dbenv, flags));
+ ENV_ENTER(dbenv, ip);
+ ret = __rep_stat_print(dbenv, flags);
+ ENV_LEAVE(dbenv, ip);
+
+ return (ret);
}
/*
@@ -328,9 +320,14 @@ __rep_print_stats(dbenv, flags)
__db_dl(dbenv,
"Number of elections won", (u_long)sp->st_elections_won);
- if (sp->st_election_status == 0)
+ if (sp->st_election_status == 0) {
__db_msg(dbenv, "No election in progress");
- else {
+ if (sp->st_election_sec > 0 || sp->st_election_usec > 0)
+ __db_msg(dbenv,
+ "%lu.%.6lu\tDuration of last election (seconds)",
+ (u_long)sp->st_election_sec,
+ (u_long)sp->st_election_usec);
+ } else {
__db_dl(dbenv, "Current election phase",
(u_long)sp->st_election_status);
__db_dl(dbenv, "Election winner",
@@ -352,9 +349,29 @@ __rep_print_stats(dbenv, flags)
__db_dl(dbenv, "Votes received this election round",
(u_long)sp->st_election_votes);
}
+ __db_dl(dbenv, "Number of bulk buffer sends triggered by full buffer",
+ (u_long)sp->st_bulk_fills);
+ __db_dl(dbenv, "Number of single records exceeding bulk buffer size",
+ (u_long)sp->st_bulk_overflows);
+ __db_dl(dbenv, "Number of records added to a bulk buffer",
+ (u_long)sp->st_bulk_records);
+ __db_dl(dbenv, "Number of bulk buffers sent",
+ (u_long)sp->st_bulk_transfers);
+ __db_dl(dbenv, "Number of re-request messages received",
+ (u_long)sp->st_client_rerequests);
+ __db_dl(dbenv,
+ "Number of request messages this client failed to process",
+ (u_long)sp->st_client_svc_miss);
+ __db_dl(dbenv, "Number of request messages received by this client",
+ (u_long)sp->st_client_svc_req);
__os_ufree(dbenv, sp);
+#ifdef HAVE_REPLICATION_THREADS
+ if ((ret = __repmgr_print_stats(dbenv)) != 0)
+ return (ret);
+#endif
+
return (0);
}
@@ -392,6 +409,7 @@ __rep_print_all(dbenv, flags)
REGENV *renv;
REGINFO *infop;
REP *rep;
+ char time_buf[CTIME_BUFLEN];
db_rep = dbenv->rep_handle;
rep = db_rep->region;
@@ -400,10 +418,6 @@ __rep_print_all(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB_REP handle information:");
- __db_print_mutex(dbenv, NULL,
- db_rep->rep_mutexp, "Replication region mutex", flags);
- __db_print_mutex(dbenv, NULL,
- db_rep->db_mutexp, "Bookkeeping database mutex", flags);
if (db_rep->rep_db == NULL)
STAT_ISSET("Bookkeeping database", db_rep->rep_db);
@@ -414,7 +428,10 @@ __rep_print_all(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "REP handle information:");
- __db_print_mutex(dbenv, NULL, &rep->mutex, "REP mutex", flags);
+ __mutex_print_debug_single(dbenv,
+ "Replication region mutex", rep->mtx_region, flags);
+ __mutex_print_debug_single(dbenv,
+ "Bookkeeping database mutex", rep->mtx_clientdb, flags);
STAT_LONG("Environment ID", rep->eid);
STAT_LONG("Master environment ID", rep->master_id);
@@ -432,12 +449,13 @@ __rep_print_all(dbenv, flags)
STAT_LONG("Thread is in rep_elect", rep->elect_th);
STAT_ULONG("Callers in rep_proc_msg", rep->msg_th);
- STAT_LONG("Thread is in rep_start", rep->start_th);
+ STAT_LONG("Thread is in msg lockout", rep->lockout_th);
STAT_ULONG("Library handle count", rep->handle_cnt);
STAT_ULONG("Multi-step operation count", rep->op_cnt);
STAT_LONG("Running recovery", rep->in_recovery);
__db_msg(dbenv, "%.24s\tRecovery timestamp",
- renv->rep_timestamp == 0 ? "0" : ctime(&renv->rep_timestamp));
+ renv->rep_timestamp == 0 ?
+ "0" : __db_ctime(&renv->rep_timestamp, time_buf));
STAT_LONG("Sites heard from", rep->sites);
STAT_LONG("Current winner", rep->winner);
@@ -451,7 +469,7 @@ __rep_print_all(dbenv, flags)
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "LOG replication information:");
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
dblp = dbenv->lg_handle;
lp = (LOG *)dblp->reginfo.primary;
STAT_LSN("First log record after a gap", &lp->waiting_lsn);
@@ -460,7 +478,7 @@ __rep_print_all(dbenv, flags)
STAT_ULONG("Records to wait before requesting", lp->wait_recs);
STAT_ULONG("Records received while waiting", lp->rcvd_recs);
STAT_LSN("Next LSN expected", &lp->ready_lsn);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
return (0);
}
diff --git a/db/rep/rep_stub.c b/db/rep/rep_stub.c
index c2851915d..354bca4d0 100644
--- a/db/rep/rep_stub.c
+++ b/db/rep/rep_stub.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: rep_stub.c,v 1.22 2004/09/29 15:36:04 bostic Exp $
+ * $Id: rep_stub.c,v 12.18 2006/08/24 14:46:25 bostic Exp $
*/
-#include "db_config.h"
-
#ifndef HAVE_REPLICATION
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
+#include "db_config.h"
#include "db_int.h"
#include "dbinc/db_page.h"
@@ -22,17 +18,7 @@
* 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, int, u_int32_t, int *, u_int32_t));
-static int __rep_flush __P((DB_ENV *));
-static int __rep_start __P((DB_ENV *, DBT *, 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 --
@@ -42,7 +28,7 @@ static int
__db_norep(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv,
+ __db_errx(dbenv,
"library build did not include support for replication");
return (DB_OPNOTSUP);
}
@@ -58,60 +44,51 @@ __db_rep_enter(dbp, checkgen, checklock, return_now)
return (__db_norep(dbp->dbenv));
}
-void
-__env_rep_enter(dbenv)
+int
+__env_rep_enter(dbenv, checklock)
DB_ENV *dbenv;
+ int checklock;
{
- COMPQUIET(dbenv, NULL);
- return;
+ COMPQUIET(checklock, 0);
+ return (__db_norep(dbenv));
}
-void
+int
__env_db_rep_exit(dbenv)
DB_ENV *dbenv;
{
- COMPQUIET(dbenv, NULL);
- return;
+ return (__db_norep(dbenv));
}
-void
+int
__op_rep_enter(dbenv)
DB_ENV *dbenv;
{
- COMPQUIET(dbenv, NULL);
- return;
+ return (__db_norep(dbenv));
}
-void
+int
__op_rep_exit(dbenv)
DB_ENV *dbenv;
{
- COMPQUIET(dbenv, NULL);
- return;
+ return (__db_norep(dbenv));
}
int
-__rep_dbenv_close(dbenv)
- DB_ENV *dbenv;
-{
- COMPQUIET(dbenv, NULL);
- return (0);
-}
-
-void
-__rep_dbenv_create(dbenv)
+__rep_bulk_message(dbenv, bulkp, repth, lsnp, dbt, flags)
DB_ENV *dbenv;
+ REP_BULK *bulkp;
+ REP_THROTTLE *repth;
+ DB_LSN *lsnp;
+ const DBT *dbt;
+ u_int32_t flags;
{
- 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_pp;
- dbenv->rep_stat_print = __rep_stat_print_pp;
- 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;
+ COMPQUIET(bulkp, NULL);
+ COMPQUIET(repth, NULL);
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(dbt, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_norep(dbenv));
}
void
@@ -122,30 +99,108 @@ __rep_dbenv_refresh(dbenv)
return;
}
-static int
-__rep_elect(dbenv, nsites, nvotes, priority, timeout, eidp, flags)
+int
+__rep_elect(dbenv, nsites, nvotes, eidp, flags)
DB_ENV *dbenv;
- int nsites, nvotes, priority;
- u_int32_t timeout, flags;
+ int nsites, nvotes;
+ u_int32_t flags;
int *eidp;
{
COMPQUIET(nsites, 0);
COMPQUIET(nvotes, 0);
- COMPQUIET(priority, 0);
- COMPQUIET(timeout, 0);
COMPQUIET(eidp, NULL);
COMPQUIET(flags, 0);
return (__db_norep(dbenv));
}
-static int
+int
__rep_flush(dbenv)
DB_ENV *dbenv;
{
return (__db_norep(dbenv));
}
-static int
+int
+__rep_set_nsites(dbenv, n)
+ DB_ENV *dbenv;
+ int n;
+{
+ COMPQUIET(n, 0);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_get_nsites(dbenv, n)
+ DB_ENV *dbenv;
+ int *n;
+{
+ COMPQUIET(n, NULL);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_set_priority(dbenv, priority)
+ DB_ENV *dbenv;
+ int priority;
+{
+ COMPQUIET(priority, 0);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_get_priority(dbenv, priority)
+ DB_ENV *dbenv;
+ int *priority;
+{
+ COMPQUIET(priority, NULL);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_set_timeout(dbenv, which, timeout)
+ DB_ENV *dbenv;
+ int which;
+ db_timeout_t timeout;
+{
+ COMPQUIET(which, 0);
+ COMPQUIET(timeout, 0);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_get_timeout(dbenv, which, timeout)
+ DB_ENV *dbenv;
+ int which;
+ db_timeout_t *timeout;
+{
+ COMPQUIET(which, 0);
+ COMPQUIET(timeout, NULL);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_get_config(dbenv, which, onp)
+ DB_ENV *dbenv;
+ u_int32_t which;
+ int *onp;
+{
+ COMPQUIET(which, 0);
+ COMPQUIET(onp, NULL);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_set_config(dbenv, which, on)
+ DB_ENV *dbenv;
+ u_int32_t which;
+ int on;
+{
+ COMPQUIET(which, 0);
+ COMPQUIET(on, 0);
+ return (__db_norep(dbenv));
+}
+
+int
__rep_get_limit(dbenv, gbytesp, bytesp)
DB_ENV *dbenv;
u_int32_t *gbytesp, *bytesp;
@@ -155,22 +210,13 @@ __rep_get_limit(dbenv, gbytesp, bytesp)
return (__db_norep(dbenv));
}
-void
+int
__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);
+ return (__db_norep(dbenv));
}
int
@@ -190,11 +236,9 @@ __rep_open(dbenv)
}
int
-__rep_preclose(dbenv, do_closefiles)
+__rep_preclose(dbenv)
DB_ENV *dbenv;
- int do_closefiles;
{
- COMPQUIET(do_closefiles, 0);
return (__db_norep(dbenv));
}
@@ -221,31 +265,24 @@ __rep_region_destroy(dbenv)
}
int
-__rep_region_init(dbenv)
- DB_ENV *dbenv;
-{
- COMPQUIET(dbenv, NULL);
- return (0);
-}
-
-int
-__rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
+__rep_send_message(dbenv, eid, rtype, lsnp, dbtp, logflags, repflags)
DB_ENV *dbenv;
int eid;
u_int32_t rtype;
DB_LSN *lsnp;
const DBT *dbtp;
- u_int32_t flags;
+ u_int32_t logflags, repflags;
{
COMPQUIET(eid, 0);
COMPQUIET(rtype, 0);
COMPQUIET(lsnp, NULL);
COMPQUIET(dbtp, NULL);
- COMPQUIET(flags, 0);
+ COMPQUIET(logflags, 0);
+ COMPQUIET(repflags, 0);
return (__db_norep(dbenv));
}
-static int
+int
__rep_set_limit(dbenv, gbytes, bytes)
DB_ENV *dbenv;
u_int32_t gbytes, bytes;
@@ -255,8 +292,8 @@ __rep_set_limit(dbenv, gbytes, bytes)
return (__db_norep(dbenv));
}
-static int
-__rep_set_rep_transport(dbenv, eid, f_send)
+int
+__rep_set_transport(dbenv, eid, f_send)
DB_ENV *dbenv;
int eid;
int (*f_send) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
@@ -267,7 +304,7 @@ __rep_set_rep_transport(dbenv, eid, f_send)
return (__db_norep(dbenv));
}
-static int
+int
__rep_set_request(dbenv, min, max)
DB_ENV *dbenv;
u_int32_t min, max;
@@ -277,7 +314,7 @@ __rep_set_request(dbenv, min, max)
return (__db_norep(dbenv));
}
-static int
+int
__rep_start(dbenv, dbt, flags)
DB_ENV *dbenv;
DBT *dbt;
@@ -316,4 +353,13 @@ __rep_stat_print(dbenv, flags)
COMPQUIET(flags, 0);
return (__db_norep(dbenv));
}
+
+int
+__rep_sync(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ COMPQUIET(flags, 0);
+ return (__db_norep(dbenv));
+}
#endif /* !HAVE_REPLICATION */
diff --git a/db/rep/rep_util.c b/db/rep/rep_util.c
index b6e72a6b4..f624a136c 100644
--- a/db/rep/rep_util.c
+++ b/db/rep/rep_util.c
@@ -1,74 +1,333 @@
/*-
- * See the file LICENSE for redistribution information. *
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * See the file LICENSE for redistribution information.
*
- * $Id: rep_util.c,v 1.135 2004/10/15 16:59:44 bostic Exp $
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_util.c,v 12.73 2006/09/15 15:59:37 alanb Exp $
*/
#include "db_config.h"
-#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 <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
+#ifdef REP_DIAGNOSTIC
+#include "dbinc/db_page.h"
+#include "dbinc/fop.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/qam.h"
+#endif
+
/*
* rep_util.c:
* Miscellaneous replication-related utility functions, including
* those called by other subsystems.
*/
-#define TIMESTAMP_CHECK(dbenv, ts, renv) \
-do { \
- if (renv->op_timestamp != 0 && \
+#define TIMESTAMP_CHECK(dbenv, ts, renv) do { \
+ if (renv->op_timestamp != 0 && \
renv->op_timestamp + DB_REGENV_TIMEOUT < ts) { \
- MUTEX_LOCK(dbenv, &renv->mutex); \
- F_CLR(renv, DB_REGENV_REPLOCKED); \
- renv->op_timestamp = 0; \
- MUTEX_UNLOCK(dbenv, &renv->mutex); \
- } \
+ REP_SYSTEM_LOCK(dbenv); \
+ F_CLR(renv, DB_REGENV_REPLOCKED); \
+ renv->op_timestamp = 0; \
+ REP_SYSTEM_UNLOCK(dbenv); \
+ } \
} while (0)
+static int __rep_newmaster_empty __P((DB_ENV *, DB_LSN *, REP_CONTROL *, int));
#ifdef REP_DIAGNOSTIC
static void __rep_print_logmsg __P((DB_ENV *, const DBT *, DB_LSN *));
#endif
/*
+ * __rep_bulk_message --
+ * This is a wrapper for putting a record into a bulk buffer. Since
+ * we have different bulk buffers, the caller must hand us the information
+ * we need to put the record into the correct buffer. All bulk buffers
+ * are protected by the REP->mtx_clientdb.
+ *
+ * PUBLIC: int __rep_bulk_message __P((DB_ENV *, REP_BULK *, REP_THROTTLE *,
+ * PUBLIC: DB_LSN *, const DBT *, u_int32_t));
+ */
+int
+__rep_bulk_message(dbenv, bulk, repth, lsn, dbt, flags)
+ DB_ENV *dbenv;
+ REP_BULK *bulk;
+ REP_THROTTLE *repth;
+ DB_LSN *lsn;
+ const DBT *dbt;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ int ret;
+ u_int32_t recsize, typemore;
+ u_int8_t *p;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ ret = 0;
+
+ /*
+ * Figure out the total number of bytes needed for this record.
+ */
+ recsize = dbt->size + sizeof(DB_LSN) + sizeof(dbt->size);
+
+ /*
+ * If *this* buffer is actively being transmitted, wait until
+ * we can use it.
+ */
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ while (FLD_ISSET(*(bulk->flagsp), BULK_XMIT)) {
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ __os_sleep(dbenv, 1, 0);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ }
+
+ /*
+ * If the record is bigger than the buffer entirely, send the
+ * current buffer and then return DB_REP_BULKOVF so that this
+ * record is sent as a singleton. Do we have enough info to
+ * do that here? XXX
+ */
+ if (recsize > bulk->len) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "bulk_msg: Record %d (0x%x) larger than entire buffer 0x%x",
+ recsize, recsize, bulk->len));
+ rep->stat.st_bulk_overflows++;
+ (void)__rep_send_bulk(dbenv, bulk, flags);
+ /*
+ * XXX __rep_send_message...
+ */
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ return (DB_REP_BULKOVF);
+ }
+ /*
+ * If this record doesn't fit, send the current buffer.
+ * Sending the buffer will reset the offset, but we will
+ * drop the mutex while sending so we need to keep checking
+ * if we're racing.
+ */
+ while (recsize + *(bulk->offp) > bulk->len) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "bulk_msg: Record %lu (%#lx) doesn't fit. Send %lu (%#lx) now.",
+ (u_long)recsize, (u_long)recsize,
+ (u_long)bulk->len, (u_long)bulk->len));
+ rep->stat.st_bulk_fills++;
+ if ((ret = __rep_send_bulk(dbenv, bulk, flags)) != 0)
+ break;
+ }
+
+ /*
+ * If we're using throttling, see if we are at the throttling
+ * limit before we do any more work here, by checking if the
+ * call to rep_send_throttle changed the repth->type to the
+ * *_MORE message type. If the throttling code hits the limit
+ * then we're done here.
+ */
+ if (bulk->type == REP_BULK_LOG)
+ typemore = REP_LOG_MORE;
+ else
+ typemore = REP_PAGE_MORE;
+ if (repth != NULL &&
+ (ret = __rep_send_throttle(dbenv, bulk->eid, repth,
+ REP_THROTTLE_ONLY)) == 0 && repth->type == typemore) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "bulk_msg: Record %d (0x%x) hit throttle limit.",
+ recsize, recsize));
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ return (ret);
+ }
+
+ /*
+ * Now we own the buffer, and we know our record fits into it.
+ * The buffer is structured with the len, LSN and then the record.
+ * Copy the record into the buffer. Then if we need to,
+ * send the buffer.
+ */
+ /*
+ * First thing is the length of the dbt record.
+ */
+ p = bulk->addr + *(bulk->offp);
+ memcpy(p, &dbt->size, sizeof(dbt->size));
+ p += sizeof(dbt->size);
+ /*
+ * The next thing is the LSN. We need LSNs for both pages and
+ * log records. For log records, this is obviously, the LSN of
+ * this record. For pages, the LSN is used by the internal init code.
+ */
+ memcpy(p, lsn, sizeof(DB_LSN));
+ RPRINT(dbenv, (dbenv, &mb,
+ "bulk_msg: Copying LSN [%lu][%lu] of %lu bytes to %#lx",
+ (u_long)lsn->file, (u_long)lsn->offset, (u_long)dbt->size,
+ P_TO_ULONG(p)));
+ p += sizeof(DB_LSN);
+ /*
+ * If we're the first record, we need to save the first
+ * LSN in the bulk structure.
+ */
+ if (*(bulk->offp) == 0)
+ bulk->lsn = *lsn;
+ /*
+ * Now copy the record and finally adjust the offset.
+ */
+ memcpy(p, dbt->data, dbt->size);
+ p += dbt->size;
+ *(bulk->offp) = (uintptr_t)p - (uintptr_t)bulk->addr;
+ rep->stat.st_bulk_records++;
+ /*
+ * Send the buffer if it is a perm record or a force.
+ */
+ if (LF_ISSET(REPCTL_PERM) || FLD_ISSET(*(bulk->flagsp), BULK_FORCE)) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "bulk_msg: Send buffer after copy due to %s",
+ LF_ISSET(REPCTL_PERM) ? "PERM" : "FORCE"));
+ ret = __rep_send_bulk(dbenv, bulk, flags);
+ }
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ return (ret);
+
+}
+
+/*
+ * __rep_send_bulk --
+ * This function transmits the bulk buffer given. It assumes the
+ * caller holds the REP->mtx_clientdb. We may release it and reacquire
+ * it during this call. We will return with it held.
+ *
+ * PUBLIC: int __rep_send_bulk __P((DB_ENV *, REP_BULK *, u_int32_t));
+ */
+int
+__rep_send_bulk(dbenv, bulkp, ctlflags)
+ DB_ENV *dbenv;
+ REP_BULK *bulkp;
+ u_int32_t ctlflags;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ DBT dbt;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ /*
+ * If the offset is 0, we're done. There is nothing to send.
+ */
+ if (*(bulkp->offp) == 0)
+ return (0);
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ /*
+ * Set that this buffer is being actively transmitted.
+ */
+ FLD_SET(*(bulkp->flagsp), BULK_XMIT);
+ DB_INIT_DBT(dbt, bulkp->addr, *(bulkp->offp));
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ RPRINT(dbenv, (dbenv, &mb,
+ "send_bulk: Send %d (0x%x) bulk buffer bytes", dbt.size, dbt.size));
+
+ /*
+ * Unlocked the mutex and now send the message.
+ */
+ rep->stat.st_bulk_transfers++;
+ ret = __rep_send_message(dbenv, bulkp->eid, bulkp->type, &bulkp->lsn,
+ &dbt, ctlflags, 0);
+
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ /*
+ * Ready the buffer for further records.
+ */
+ *(bulkp->offp) = 0;
+ FLD_CLR(*(bulkp->flagsp), BULK_XMIT);
+ return (ret);
+}
+
+/*
+ * __rep_bulk_alloc --
+ * This function allocates and initializes an internal bulk buffer.
+ * This is used by the master when fulfilling a request for a chunk of
+ * log records or a bunch of pages.
+ *
+ * PUBLIC: int __rep_bulk_alloc __P((DB_ENV *, REP_BULK *, int, uintptr_t *,
+ * PUBLIC: u_int32_t *, u_int32_t));
+ */
+int
+__rep_bulk_alloc(dbenv, bulkp, eid, offp, flagsp, type)
+ DB_ENV *dbenv;
+ REP_BULK *bulkp;
+ int eid;
+ uintptr_t *offp;
+ u_int32_t *flagsp, type;
+{
+ int ret;
+
+ memset(bulkp, 0, sizeof(REP_BULK));
+ *offp = *flagsp = 0;
+ bulkp->len = MEGABYTE;
+ if ((ret = __os_malloc(dbenv, bulkp->len, &bulkp->addr)) != 0)
+ return (ret);
+ bulkp->offp = offp;
+ bulkp->type = type;
+ bulkp->eid = eid;
+ bulkp->flagsp = flagsp;
+ return (ret);
+}
+
+/*
+ * __rep_bulk_free --
+ * This function sends the remainder of the bulk buffer and frees it.
+ *
+ * PUBLIC: int __rep_bulk_free __P((DB_ENV *, REP_BULK *, u_int32_t));
+ */
+int
+__rep_bulk_free(dbenv, bulkp, flags)
+ DB_ENV *dbenv;
+ REP_BULK *bulkp;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+
+ MUTEX_LOCK(dbenv, db_rep->region->mtx_clientdb);
+ ret = __rep_send_bulk(dbenv, bulkp, flags);
+ MUTEX_UNLOCK(dbenv, db_rep->region->mtx_clientdb);
+ __os_free(dbenv, bulkp->addr);
+ return (ret);
+}
+
+/*
* __rep_send_message --
* This is a wrapper for sending a message. It takes care of constructing
* the REP_CONTROL structure and calling the user's specified send function.
*
* PUBLIC: int __rep_send_message __P((DB_ENV *, int,
- * PUBLIC: u_int32_t, DB_LSN *, const DBT *, u_int32_t));
+ * PUBLIC: u_int32_t, DB_LSN *, const DBT *, u_int32_t, u_int32_t));
*/
int
-__rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
+__rep_send_message(dbenv, eid, rtype, lsnp, dbt, ctlflags, repflags)
DB_ENV *dbenv;
int eid;
u_int32_t rtype;
DB_LSN *lsnp;
- const DBT *dbtp;
- u_int32_t flags;
+ const DBT *dbt;
+ u_int32_t ctlflags, repflags;
{
+ DB_LOG *dblp;
DB_REP *db_rep;
- REP *rep;
DBT cdbt, scrap_dbt;
+ LOG *lp;
+ REP *rep;
REP_CONTROL cntrl;
int ret;
u_int32_t myflags, rectype;
@@ -78,6 +337,14 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
db_rep = dbenv->rep_handle;
rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ ret = 0;
+
+#if defined(DEBUG_ROP) || defined(DEBUG_WOP)
+ if (db_rep->send == NULL)
+ return (0);
+#endif
/* Set up control structure. */
memset(&cntrl, 0, sizeof(cntrl));
@@ -85,10 +352,28 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
ZERO_LSN(cntrl.lsn);
else
cntrl.lsn = *lsnp;
- cntrl.rectype = rtype;
- cntrl.flags = flags;
- cntrl.rep_version = DB_REPVERSION;
- cntrl.log_version = DB_LOGVERSION;
+ /*
+ * Set the rectype based on the version we need to speak.
+ */
+ if (rep->version == DB_REPVERSION)
+ cntrl.rectype = rtype;
+ else if (rep->version < DB_REPVERSION) {
+ cntrl.rectype = __rep_msg_to_old(rep->version, rtype);
+ RPRINT(dbenv, (dbenv, &mb,
+ "rep_send_msg: rtype %lu to version %lu record %lu.",
+ (u_long)rtype, (u_long)rep->version,
+ (u_long)cntrl.rectype));
+ if (cntrl.rectype == REP_INVALID)
+ return (ret);
+ } else {
+ __db_errx(dbenv,
+ "rep_send_message: Unknown rep version %lu, my version %lu",
+ (u_long)rep->version, (u_long)DB_REPVERSION);
+ return (__db_panic(dbenv, EINVAL));
+ }
+ cntrl.flags = ctlflags;
+ cntrl.rep_version = rep->version;
+ cntrl.log_version = lp->persist.version;
cntrl.gen = rep->gen;
memset(&cdbt, 0, sizeof(cdbt));
@@ -96,45 +381,61 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
cdbt.size = sizeof(cntrl);
/* Don't assume the send function will be tolerant of NULL records. */
- if (dbtp == NULL) {
+ if (dbt == NULL) {
memset(&scrap_dbt, 0, sizeof(DBT));
- dbtp = &scrap_dbt;
+ dbt = &scrap_dbt;
}
- REP_PRINT_MESSAGE(dbenv, eid, &cntrl, "rep_send_message");
-#ifdef REP_DIAGNOSTIC
- if (rtype == REP_LOG)
- __rep_print_logmsg(dbenv, dbtp, lsnp);
-#endif
/*
- * There are three types of records: commit and checkpoint records
+ * There are several 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.
+ *
+ * There are request records that can be sent anywhere, and there
+ * are rerequest records that the app might want to send to the master.
*/
- myflags = 0;
- if (LF_ISSET(DB_LOG_PERM))
- myflags = DB_REP_PERMANENT;
- else if (rtype != REP_LOG || LF_ISSET(DB_LOG_RESEND))
- myflags = DB_REP_NOBUFFER;
- if (rtype == REP_LOG && !LF_ISSET(DB_LOG_PERM)) {
+ myflags = repflags;
+ if (FLD_ISSET(ctlflags, REPCTL_PERM))
+ myflags |= DB_REP_PERMANENT;
+ else if (rtype != REP_LOG || FLD_ISSET(ctlflags, REPCTL_RESEND))
+ myflags |= DB_REP_NOBUFFER;
+ if (rtype == REP_LOG && !FLD_ISSET(ctlflags, REPCTL_PERM)) {
/*
* 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.
+ * may need a REPCTL_PERM. This is of type REP_LOG,
+ * so we know that dbt is a log record.
*/
- memcpy(&rectype, dbtp->data, sizeof(rectype));
+ memcpy(&rectype, dbt->data, sizeof(rectype));
if (rectype == DB___txn_regop || rectype == DB___txn_ckp)
- F_SET(&cntrl, DB_LOG_PERM);
- }
+ F_SET(&cntrl, REPCTL_PERM);
+ }
+
+ /*
+ * We're sending messages to some other version. We cannot
+ * assume DB_REP_ANYWHERE is available. Turn it off.
+ */
+ if (rep->version != DB_REPVERSION)
+ FLD_CLR(myflags, DB_REP_ANYWHERE);
+
+ REP_PRINT_MESSAGE(dbenv, eid, &cntrl, "rep_send_message", myflags);
+#ifdef REP_DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION) && rtype == REP_LOG)
+ __rep_print_logmsg(dbenv, dbt, lsnp);
+#endif
/*
+ * If DB_REP_PERMANENT is set, the LSN better be non-zero.
+ */
+ DB_ASSERT(dbenv, !FLD_ISSET(myflags, DB_REP_PERMANENT) ||
+ !IS_ZERO_LSN(cntrl.lsn));
+ /*
* 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);
+ ret = db_rep->send(dbenv, &cdbt, dbt, &cntrl.lsn, eid, myflags);
/*
* We don't hold the rep lock, so this could miscount if we race.
@@ -145,20 +446,18 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
rep->stat.st_msgs_sent++;
else {
rep->stat.st_msgs_send_failures++;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"rep_send_function returned: %d", ret));
}
return (ret);
}
#ifdef REP_DIAGNOSTIC
-
/*
* __rep_print_logmsg --
* This is a debugging routine for printing out log records that
* we are about to transmit to a client.
*/
-
static void
__rep_print_logmsg(dbenv, logdbt, lsnp)
DB_ENV *dbenv;
@@ -166,11 +465,10 @@ __rep_print_logmsg(dbenv, logdbt, lsnp)
DB_LSN *lsnp;
{
/* Static structures to hold the printing functions. */
- static int (**ptab)__P((DB_ENV *,
- DBT *, DB_LSN *, db_recops, void *)) = NULL;
- size_t ptabsize = 0;
+ static size_t ptabsize;
+ static int (**ptab)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- if (ptabsize == 0) {
+ if (ptab == NULL) {
/* Initialize the table. */
(void)__bam_init_print(dbenv, &ptab, &ptabsize);
(void)__crdel_init_print(dbenv, &ptab, &ptabsize);
@@ -185,8 +483,8 @@ __rep_print_logmsg(dbenv, logdbt, lsnp)
(void)__db_dispatch(dbenv,
ptab, ptabsize, (DBT *)logdbt, lsnp, DB_TXN_PRINT, NULL);
}
-
#endif
+
/*
* __rep_new_master --
* Called after a master election to sync back up with a new master.
@@ -206,51 +504,94 @@ __rep_new_master(dbenv, cntrl, eid)
int eid;
{
DB_LOG *dblp;
- DB_LSN ckp_lsn, lsn;
+ DB_LOGC *logc;
+ DB_LSN first_lsn, lsn;
DB_REP *db_rep;
- DB_TXNMGR *mgr;
- DB_TXNREGION *region;
+ DBT dbt;
LOG *lp;
REGENV *renv;
REGINFO *infop;
REP *rep;
- int change, do_req, ret;
+ int change, do_req, lockout, ret, t_ret;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
#endif
db_rep = dbenv->rep_handle;
- mgr = dbenv->tx_handle;
- region = mgr->reginfo.primary;
rep = db_rep->region;
ret = 0;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ logc = NULL;
+ lockout = 0;
+ REP_SYSTEM_LOCK(dbenv);
__rep_elect_done(dbenv, rep);
change = rep->gen != cntrl->gen || rep->master_id != eid;
if (change) {
- RPRINT(dbenv, rep, (dbenv, &mb,
+ /*
+ * If we are already locking out others, we're either
+ * in the middle of sync-up recovery or internal init
+ * when this newmaster comes in (we also lockout in
+ * rep_start, but we cannot be racing that because we
+ * don't allow rep_proc_msg when rep_start is going on).
+ *
+ * If we were in the middle of an internal initialization
+ * and we've discovered a new master instead, clean up
+ * our old internal init information. We need to clean
+ * up any flags and unlock our lockout.
+ */
+ if (rep->lockout_th != 0)
+ goto lckout;
+
+ if ((ret = __rep_lockout_msg(dbenv, rep, 1)) != 0)
+ goto errlck;
+
+ lockout = 1;
+ if ((ret = __env_init_rec(dbenv, cntrl->log_version)) != 0)
+ goto errlck;
+
+ if (rep->in_recovery || F_ISSET(rep, REP_F_READY)) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ REP_SYSTEM_LOCK(dbenv);
+ if (rep->in_recovery || F_ISSET(rep, REP_F_READY)) {
+ (void)__rep_init_cleanup(dbenv, rep, DB_FORCE);
+ F_CLR(rep, REP_F_RECOVER_MASK);
+ rep->in_recovery = 0;
+ F_CLR(rep, REP_F_READY);
+ }
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ }
+ RPRINT(dbenv, (dbenv, &mb,
"Updating gen from %lu to %lu from master %d",
(u_long)rep->gen, (u_long)cntrl->gen, eid));
rep->gen = cntrl->gen;
if (rep->egen <= rep->gen)
rep->egen = rep->gen + 1;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ RPRINT(dbenv, (dbenv, &mb,
"Egen is %lu", (u_long)rep->egen));
rep->master_id = eid;
rep->stat.st_master_changes++;
rep->stat.st_startup_complete = 0;
+ __log_set_version(dbenv, cntrl->log_version);
+ rep->version = cntrl->rep_version;
+
+ /*
+ * If we're delaying client sync-up, we know we have a
+ * new/changed master now, set flag indicating we are
+ * actively delaying.
+ */
+ if (FLD_ISSET(rep->config, REP_C_DELAYCLIENT))
+ F_SET(rep, REP_F_DELAY);
F_SET(rep, REP_F_NOARCHIVE | REP_F_RECOVER_VERIFY);
+ rep->lockout_th = 0;
+ lockout = 0;
}
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
+ LOG_SYSTEM_LOCK(dbenv);
lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- R_LOCK(dbenv, &mgr->reginfo);
- ckp_lsn = region->last_ckp;
- R_UNLOCK(dbenv, &mgr->reginfo);
+ LOG_SYSTEM_UNLOCK(dbenv);
if (!change) {
/*
@@ -258,22 +599,25 @@ __rep_new_master(dbenv, cntrl, eid)
* catching up or verification to do.
*/
ret = 0;
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
do_req = __rep_check_doreq(dbenv, rep);
if (F_ISSET(rep, REP_F_RECOVER_VERIFY)) {
lsn = lp->verify_lsn;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- if (!IS_ZERO_LSN(lsn) && do_req)
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ if (!F_ISSET(rep, REP_F_DELAY) &&
+ !IS_ZERO_LSN(lsn) && do_req)
(void)__rep_send_message(dbenv, eid,
- REP_VERIFY_REQ, &lsn, NULL, 0);
+ REP_VERIFY_REQ, &lsn, NULL, 0,
+ DB_REP_ANYWHERE);
} else {
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- if (log_compare(&lsn, &cntrl->lsn) < 0 && do_req)
- (void)__rep_send_message(dbenv,
- eid, REP_ALL_REQ, &lsn, NULL, 0);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ if (LOG_COMPARE(&lsn, &cntrl->lsn) < 0 && do_req)
+ (void)__rep_send_message(dbenv, eid,
+ REP_ALL_REQ, &lsn, NULL,
+ 0, DB_REP_ANYWHERE);
+ REP_SYSTEM_LOCK(dbenv);
F_CLR(rep, REP_F_NOARCHIVE);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
}
return (ret);
}
@@ -286,74 +630,153 @@ __rep_new_master(dbenv, cntrl, eid)
* the master is not, then we just need to request all the log
* records from the master.
*/
- if (IS_INIT_LSN(lsn) || IS_ZERO_LSN(lsn) || IS_ZERO_LSN(ckp_lsn)) {
- /*
- * If we don't have a checkpoint, we still might have
- * some log records but we're discarding them to sync
- * up with the master from the start. Therefore,
- * truncate our log.
- */
- if (IS_ZERO_LSN(ckp_lsn)) {
- INIT_LSN(lsn);
- (void)__log_vtruncate(dbenv, &lsn, &ckp_lsn, NULL);
- infop = dbenv->reginfo;
- renv = infop->primary;
- (void)time(&renv->rep_timestamp);
- }
+ if (IS_INIT_LSN(lsn) || IS_ZERO_LSN(lsn)) {
+ if ((ret = __rep_newmaster_empty(dbenv, &lsn, cntrl, eid)) != 0)
+ return (ret);
+ return (DB_REP_NEWMASTER);
+ }
- /*
- * If we have no log, then we have no files to open
- * in recovery, but we've opened what we can, which
- * is none. Mark DBREP_OPENFILES here.
- */
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- F_SET(db_rep, DBREP_OPENFILES);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- F_CLR(rep, REP_F_NOARCHIVE | REP_F_RECOVER_MASK);
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ memset(&dbt, 0, sizeof(dbt));
+ /*
+ * If this client is farther ahead on the log file than the master, see
+ * if there is any overlap in the logs. If not, the client is too
+ * far ahead of the master and we cannot determine they're part of
+ * the same replication group.
+ */
+ if (cntrl->lsn.file < lsn.file) {
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
+ ret = __log_c_get(logc, &first_lsn, &dbt, DB_FIRST);
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret == DB_NOTFOUND)
+ goto notfound;
+ else if (ret != 0)
+ goto err;
+ if (cntrl->lsn.file < first_lsn.file) {
+ __db_errx(dbenv,
+ "Client too far ahead of master; unable to join replication group");
+ ret = DB_REP_JOIN_FAILURE;
+ goto err;
+ }
+ }
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
+ ret = __rep_log_backup(dbenv, rep, logc, &lsn);
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret == DB_NOTFOUND)
+ goto notfound;
+ else if (ret != 0)
+ goto err;
- if (!IS_INIT_LSN(cntrl->lsn))
- (void)__rep_send_message(dbenv, rep->master_id,
- REP_ALL_REQ, &lsn, NULL, 0);
+ /*
+ * Finally, we have a record to ask for.
+ */
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ lp->verify_lsn = lsn;
+ lp->rcvd_recs = 0;
+ lp->wait_recs = rep->request_gap;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ if (!F_ISSET(rep, REP_F_DELAY))
+ (void)__rep_send_message(dbenv,
+ eid, REP_VERIFY_REQ, &lsn, NULL, 0, DB_REP_ANYWHERE);
- return (DB_REP_NEWMASTER);
- }
+ return (DB_REP_NEWMASTER);
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- lp->verify_lsn = ckp_lsn;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- (void)__rep_send_message(dbenv,
- eid, REP_VERIFY_REQ, &ckp_lsn, NULL, 0);
+err: /*
+ * If we failed, we need to clear the flags we may have set above
+ * because we're not going to be setting the verify_lsn.
+ */
+ REP_SYSTEM_LOCK(dbenv);
+errlck: if (lockout)
+ rep->lockout_th = 0;
+ F_CLR(rep, REP_F_RECOVER_MASK | REP_F_DELAY);
+lckout: REP_SYSTEM_UNLOCK(dbenv);
+ return (ret);
+notfound:
+ /*
+ * If we don't have an identification record, we still
+ * might have some log records but we're discarding them
+ * to sync up with the master from the start.
+ * Therefore, truncate our log and treat it as if it
+ * were empty. In-memory logs can't be completely
+ * zeroed using __log_vtruncate, so just zero them out.
+ */
+ INIT_LSN(lsn);
+ RPRINT(dbenv, (dbenv, &mb, "No commit or ckp found. Truncate log."));
+ ret = lp->db_log_inmemory ?
+ __log_zero(dbenv, &lsn, &lp->lsn) :
+ __log_vtruncate(dbenv, &lsn, &lsn, NULL);
+ if (ret != 0 && ret != DB_NOTFOUND)
+ return (ret);
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ REP_SYSTEM_LOCK(dbenv);
+ (void)time(&renv->rep_timestamp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ if ((ret = __rep_newmaster_empty(dbenv, &lsn, cntrl, eid)) != 0)
+ return (ret);
return (DB_REP_NEWMASTER);
}
/*
- * __rep_is_client
- * Used by other subsystems to figure out if this is a replication
- * client site.
- *
- * PUBLIC: int __rep_is_client __P((DB_ENV *));
+ * __rep_newmaster_empty
+ * Handle the case of a NEWMASTER message received when we have an empty
+ * log. If both the master and we agree that the max LSN is 0,0, then there is
+ * no recovery to be done. If we are at 0 and the master is not, then we just
+ * need to request all the log records from the master.
*/
-int
-__rep_is_client(dbenv)
+static int
+__rep_newmaster_empty(dbenv, lsnp, cntrl, eid)
DB_ENV *dbenv;
+ DB_LSN *lsnp;
+ REP_CONTROL *cntrl;
+ int eid;
{
DB_REP *db_rep;
REP *rep;
-
- if (!REP_ON(dbenv))
- return (0);
+ LOG *lp;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
+ lp = dbenv->lg_handle->reginfo.primary;
/*
- * Don't just return F_ISSET since that converts unsigned
- * into signed.
+ * If we have no log, then we have no files to open in recovery, but
+ * we've opened what we can, which is none. Mark DBREP_OPENFILES here.
*/
- return (F_ISSET(rep, REP_F_CLIENT) ? 1 : 0);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ F_SET(db_rep, DBREP_OPENFILES);
+ ZERO_LSN(lp->verify_lsn);
+ REP_SYSTEM_LOCK(dbenv);
+ F_CLR(rep, REP_F_NOARCHIVE | REP_F_RECOVER_MASK);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ if (!IS_INIT_LSN(cntrl->lsn)) {
+ /*
+ * We're making an ALL_REQ. But now that we've cleared the
+ * flags, we're likely receiving new log records from the
+ * master, resulting in a gap immediately. So to avoid multiple
+ * data streams, set the wait_recs value high now to give the
+ * master a chance to start sending us these records before the
+ * gap code re-requests the same gap. Wait_recs will get reset
+ * once we start receiving these records.
+ */
+ lp->wait_recs = rep->max_gap;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ /*
+ * Don't send the ALL_REQ if we're delayed. But we check here,
+ * after lp->wait_recs is set up so that when the app calls
+ * rep_sync, everything is ready to go.
+ */
+ if (!F_ISSET(rep, REP_F_DELAY))
+ (void)__rep_send_message(dbenv, eid, REP_ALL_REQ,
+ lsnp, NULL, 0, DB_REP_ANYWHERE);
+ } else
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ return (0);
}
/*
@@ -373,15 +796,14 @@ __rep_noarchive(dbenv)
REP *rep;
time_t timestamp;
- if (!REP_ON(dbenv))
- return (0);
- db_rep = dbenv->rep_handle;
- rep = db_rep->region;
infop = dbenv->reginfo;
renv = infop->primary;
- if (F_ISSET(rep, REP_F_NOARCHIVE))
- return (1);
+ /*
+ * This is tested before REP_ON below because we always need
+ * to obey if any replication process has disabled archiving.
+ * Everything is in the environment region that we need here.
+ */
if (F_ISSET(renv, DB_REGENV_REPLOCKED)) {
(void)time(&timestamp);
TIMESTAMP_CHECK(dbenv, timestamp, renv);
@@ -392,7 +814,13 @@ __rep_noarchive(dbenv)
if (F_ISSET(renv, DB_REGENV_REPLOCKED))
return (EINVAL);
}
- return (0);
+
+ if (!REP_ON(dbenv))
+ return (0);
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ return (F_ISSET(rep, REP_F_NOARCHIVE) ? 1 : 0);
}
/*
@@ -400,37 +828,52 @@ __rep_noarchive(dbenv)
* Send this site's vote for the election.
*
* PUBLIC: void __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int,
- * PUBLIC: u_int32_t, u_int32_t, int, u_int32_t));
+ * PUBLIC: u_int32_t, u_int32_t, int, u_int32_t, u_int32_t));
*/
void
-__rep_send_vote(dbenv, lsnp, nsites, nvotes, pri, tie, egen, eid, vtype)
+__rep_send_vote(dbenv, lsnp, nsites, nvotes, pri, tie, egen, eid, vtype, flags)
DB_ENV *dbenv;
DB_LSN *lsnp;
int eid, nsites, nvotes, pri;
- u_int32_t egen, tie, vtype;
+ u_int32_t flags, egen, tie, vtype;
{
+ DB_REP *db_rep;
DBT vote_dbt;
+ REP *rep;
+ REP_OLD_VOTE_INFO ovi;
REP_VOTE_INFO vi;
- memset(&vi, 0, sizeof(vi));
-
- vi.egen = egen;
- vi.priority = pri;
- vi.nsites = nsites;
- vi.nvotes = nvotes;
- vi.tiebreaker = tie;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ memset(&ovi, 0, sizeof(ovi));
+ memset(&vi, 0, sizeof(vi));
memset(&vote_dbt, 0, sizeof(vote_dbt));
- vote_dbt.data = &vi;
- vote_dbt.size = sizeof(vi);
- (void)__rep_send_message(dbenv, eid, vtype, lsnp, &vote_dbt, 0);
+ if (rep->version == DB_REPVERSION_42) {
+ ovi.egen = egen;
+ ovi.priority = pri;
+ ovi.nsites = nsites;
+ ovi.tiebreaker = tie;
+ vote_dbt.data = &ovi;
+ vote_dbt.size = sizeof(ovi);
+ } else {
+ vi.egen = egen;
+ vi.priority = pri;
+ vi.nsites = nsites;
+ vi.nvotes = nvotes;
+ vi.tiebreaker = tie;
+ vote_dbt.data = &vi;
+ vote_dbt.size = sizeof(vi);
+ }
+
+ (void)__rep_send_message(dbenv, eid, vtype, lsnp, &vote_dbt, flags, 0);
}
/*
* __rep_elect_done
* Clear all election information for this site. Assumes the
- * caller hold rep_mutex.
+ * caller hold the region mutex.
*
* PUBLIC: void __rep_elect_done __P((DB_ENV *, REP *));
*/
@@ -440,6 +883,7 @@ __rep_elect_done(dbenv, rep)
REP *rep;
{
int inelect;
+ u_int32_t endsec, endusec;
#ifdef DIAGNOSTIC
DB_MSGBUF mb;
#else
@@ -449,9 +893,22 @@ __rep_elect_done(dbenv, rep)
F_CLR(rep, REP_F_EPHASE1 | REP_F_EPHASE2 | REP_F_TALLY);
rep->sites = 0;
rep->votes = 0;
- if (inelect)
+ if (inelect) {
+ if (rep->esec != 0) {
+ __os_clock(dbenv, &endsec, &endusec);
+ __db_difftime(rep->esec, endsec, rep->eusec, endusec,
+ &rep->stat.st_election_sec,
+ &rep->stat.st_election_usec);
+ RPRINT(dbenv, (dbenv, &mb,
+ "Election finished in %u.%06u sec",
+ rep->stat.st_election_sec,
+ rep->stat.st_election_usec));
+ rep->esec = 0;
+ rep->eusec = 0;
+ }
rep->egen++;
- RPRINT(dbenv, rep, (dbenv, &mb,
+ }
+ RPRINT(dbenv, (dbenv, &mb,
"Election done; egen %lu", (u_long)rep->egen));
}
@@ -474,35 +931,33 @@ __rep_grow_sites(dbenv, nsites)
REP *rep;
int nalloc, ret, *tally;
- rep = ((DB_REP *)dbenv->rep_handle)->region;
+ 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;
infop = dbenv->reginfo;
renv = infop->primary;
- MUTEX_LOCK(dbenv, &renv->mutex);
+ MUTEX_LOCK(dbenv, renv->mtx_regenv);
+
/*
* 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.
*/
if ((ret = __db_shalloc(infop,
- (size_t)nalloc * sizeof(REP_VTALLY), sizeof(REP_VTALLY),
- &tally)) == 0) {
+ (size_t)nalloc * sizeof(REP_VTALLY), 0, &tally)) == 0) {
if (rep->tally_off != INVALID_ROFF)
__db_shalloc_free(
infop, R_ADDR(infop, rep->tally_off));
rep->tally_off = R_OFFSET(infop, tally);
if ((ret = __db_shalloc(infop,
- (size_t)nalloc * sizeof(REP_VTALLY), sizeof(REP_VTALLY),
- &tally)) == 0) {
+ (size_t)nalloc * sizeof(REP_VTALLY), 0, &tally)) == 0) {
/* Success */
if (rep->v2tally_off != INVALID_ROFF)
__db_shalloc_free(infop,
@@ -528,47 +983,71 @@ __rep_grow_sites(dbenv, nsites)
rep->nsites = 0;
}
}
- MUTEX_UNLOCK(dbenv, &renv->mutex);
+ MUTEX_UNLOCK(dbenv, renv->mtx_regenv);
return (ret);
}
/*
* __env_rep_enter --
*
- * Check if we are in the middle of replication initialization and/or
+ * 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 *));
+ * PUBLIC: int __env_rep_enter __P((DB_ENV *, int));
*/
-void
-__env_rep_enter(dbenv)
+int
+__env_rep_enter(dbenv, checklock)
DB_ENV *dbenv;
+ int checklock;
{
DB_REP *db_rep;
+ REGENV *renv;
+ REGINFO *infop;
REP *rep;
int cnt;
+ time_t timestamp;
- /* Check if locks have been globally turned off. */
+ /* Check if locks have been globally turned off. */
if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
- return;
+ return (0);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ if (checklock && F_ISSET(renv, DB_REGENV_REPLOCKED)) {
+ (void)time(&timestamp);
+ TIMESTAMP_CHECK(dbenv, timestamp, renv);
+ /*
+ * Check if we're still locked out after checking
+ * the timestamp.
+ */
+ if (F_ISSET(renv, DB_REGENV_REPLOCKED))
+ return (EINVAL);
+ }
+
+ REP_SYSTEM_LOCK(dbenv);
for (cnt = 0; rep->in_recovery;) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ if (FLD_ISSET(rep->config, REP_C_NOWAIT)) {
+ __db_errx(dbenv,
+ "Operation locked out. Waiting for replication lockout to complete");
+ return (DB_REP_LOCKOUT);
+ }
__os_sleep(dbenv, 1, 0);
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
if (++cnt % 60 == 0)
- __db_err(dbenv,
- "DB_ENV handle waiting %d minutes for replication recovery to complete",
+ __db_errx(dbenv,
+ "DB_ENV handle waiting %d minutes for replication lockout to complete",
cnt / 60);
}
rep->handle_cnt++;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
/*
@@ -576,25 +1055,27 @@ __env_rep_enter(dbenv)
*
* Decrement handle count upon routine exit.
*
- * PUBLIC: void __env_db_rep_exit __P((DB_ENV *));
+ * PUBLIC: int __env_db_rep_exit __P((DB_ENV *));
*/
-void
+int
__env_db_rep_exit(dbenv)
DB_ENV *dbenv;
{
DB_REP *db_rep;
REP *rep;
- /* Check if locks have been globally turned off. */
+ /* Check if locks have been globally turned off. */
if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
- return;
+ return (0);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
rep->handle_cnt--;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
/*
@@ -602,8 +1083,12 @@ __env_db_rep_exit(dbenv)
* 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.
+ * sleep before returning DB_DEADLOCK. Without the sleep, it is likely
+ * the application will immediately try again and could reach a retry
+ * limit before replication has a chance to finish. The sleep increases
+ * the probability that an application retry will succeed.
*
* PUBLIC: int __db_rep_enter __P((DB *, int, int, int));
*/
@@ -639,23 +1124,23 @@ __db_rep_enter(dbp, checkgen, checklock, return_now)
if (F_ISSET(renv, DB_REGENV_REPLOCKED))
return (EINVAL);
}
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
if (F_ISSET(rep, REP_F_READY)) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
if (!return_now)
__os_sleep(dbenv, 5, 0);
return (DB_LOCK_DEADLOCK);
}
if (checkgen && dbp->timestamp != renv->rep_timestamp) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- __db_err(dbenv, "%s %s",
+ REP_SYSTEM_UNLOCK(dbenv);
+ __db_errx(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);
+ REP_SYSTEM_UNLOCK(dbenv);
return (0);
}
@@ -669,9 +1154,9 @@ __db_rep_enter(dbp, checkgen, checklock, return_now)
* increment the op_cnt, so that we do not start recovery while we have
* active operations.
*
- * PUBLIC: void __op_rep_enter __P((DB_ENV *));
+ * PUBLIC: int __op_rep_enter __P((DB_ENV *));
*/
-void
+int
__op_rep_enter(dbenv)
DB_ENV *dbenv;
{
@@ -679,25 +1164,33 @@ __op_rep_enter(dbenv)
REP *rep;
int cnt;
- /* Check if locks have been globally turned off. */
+ /* Check if locks have been globally turned off. */
if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
- return;
+ return (0);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
for (cnt = 0; F_ISSET(rep, REP_F_READY);) {
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+ if (FLD_ISSET(rep->config, REP_C_NOWAIT)) {
+ __db_errx(dbenv,
+ "Operation locked out. Waiting for replication lockout to complete");
+ return (DB_REP_LOCKOUT);
+ }
__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 += 5;
+ REP_SYSTEM_LOCK(dbenv);
+ if (cnt % 60 == 0)
+ __db_errx(dbenv,
+ "__op_rep_enter waiting %d minutes for lockout to complete",
cnt / 60);
}
rep->op_cnt++;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
/*
@@ -706,26 +1199,28 @@ __op_rep_enter(dbenv)
* Decrement op count upon transaction commit/abort/discard or
* memp_fput.
*
- * PUBLIC: void __op_rep_exit __P((DB_ENV *));
+ * PUBLIC: int __op_rep_exit __P((DB_ENV *));
*/
-void
+int
__op_rep_exit(dbenv)
DB_ENV *dbenv;
{
DB_REP *db_rep;
REP *rep;
- /* Check if locks have been globally turned off. */
+ /* Check if locks have been globally turned off. */
if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
- return;
+ return (0);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
- DB_ASSERT(rep->op_cnt > 0);
+ REP_SYSTEM_LOCK(dbenv);
+ DB_ASSERT(dbenv, rep->op_cnt > 0);
rep->op_cnt--;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
/*
@@ -733,9 +1228,9 @@ __op_rep_exit(dbenv)
*
* Get the generation number from a replicated environment.
*
- * PUBLIC: void __rep_get_gen __P((DB_ENV *, u_int32_t *));
+ * PUBLIC: int __rep_get_gen __P((DB_ENV *, u_int32_t *));
*/
-void
+int
__rep_get_gen(dbenv, genp)
DB_ENV *dbenv;
u_int32_t *genp;
@@ -746,29 +1241,293 @@ __rep_get_gen(dbenv, genp)
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_LOCK(dbenv);
if (rep->recover_gen > rep->gen)
*genp = rep->recover_gen;
else
*genp = rep->gen;
- MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
}
+/*
+ * __rep_lockout_api --
+ * Coordinate with other threads in the library and active txns so
+ * that we can run single-threaded, for recovery or internal backup.
+ * Assumes the caller holds the region mutex.
+ *
+ * PUBLIC: int __rep_lockout_api __P((DB_ENV *, REP *));
+ */
+int
+__rep_lockout_api(dbenv, rep)
+ DB_ENV *dbenv;
+ REP *rep;
+{
+ int wait_cnt;
+
+ /* 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;) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ __os_sleep(dbenv, 1, 0);
+#if defined(DIAGNOSTIC) || defined(CONFIG_TEST)
+ if (wait_cnt == 5)
+ __db_errx(dbenv,
+ "Waiting for op_cnt (%lu) to complete replication lockout",
+ (u_long)rep->op_cnt);
+ if (++wait_cnt % 60 == 0)
+ __db_errx(dbenv,
+"Waiting for op_cnt (%lu) to complete replication lockout for %d minutes",
+ (u_long)rep->op_cnt, wait_cnt / 60);
+#endif
+ REP_SYSTEM_LOCK(dbenv);
+ }
+
+ /*
+ * 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_SYSTEM_UNLOCK(dbenv);
+ __os_sleep(dbenv, 1, 0);
#ifdef DIAGNOSTIC
+ if (wait_cnt == 5)
+ __db_errx(dbenv,
+"Waiting for handle count (%lu) or msg_th (%lu) to complete replication lockout",
+ (u_long)rep->handle_cnt, (u_long)rep->msg_th);
+ if (++wait_cnt % 60 == 0)
+ __db_errx(dbenv,
+"Waiting for handle count (%lu) to complete replication lockout for %d minutes",
+ (u_long)rep->handle_cnt,
+ wait_cnt / 60);
+#endif
+ REP_SYSTEM_LOCK(dbenv);
+ }
+
+ return (0);
+}
+
/*
- * PUBLIC: void __rep_print_message __P((DB_ENV *, int, REP_CONTROL *, char *));
+ * __rep_lockout_msg --
+ * Coordinate with other threads processing messages so that
+ * we can run single-threaded and know that no incoming
+ * message can change the world (i.e., like a NEWMASTER message).
+ * This call should be short-term covering a specific critical
+ * operation where we need to make sure no new messages arrive
+ * in the middle and all message threads are out before we start it.
+ * Assumes the caller holds the region mutex.
+ *
+ * PUBLIC: int __rep_lockout_msg __P((DB_ENV *, REP *, u_int32_t));
+ */
+int
+__rep_lockout_msg(dbenv, rep, msg_th)
+ DB_ENV *dbenv;
+ REP *rep;
+ u_int32_t msg_th;
+{
+ int wait_cnt;
+
+ rep->lockout_th = 1;
+ for (wait_cnt = 0; rep->msg_th > msg_th;) {
+ REP_SYSTEM_UNLOCK(dbenv);
+ __os_sleep(dbenv, 1, 0);
+#ifdef DIAGNOSTIC
+ if (wait_cnt == 5)
+ __db_errx(dbenv,
+"Waiting for msg_th (%lu) to complete replication lockout",
+ (u_long)rep->msg_th);
+ if (++wait_cnt % 60 == 0)
+ __db_errx(dbenv,
+"Waiting for msg_th (%lu) to complete replication lockout for %d minutes",
+ (u_long)rep->msg_th, wait_cnt / 60);
+#endif
+ REP_SYSTEM_LOCK(dbenv);
+ }
+
+ return (0);
+}
+
+/*
+ * __rep_send_throttle -
+ * Send a record, throttling if necessary. Callers of this function
+ * will throttle - breaking out of their loop, if the repth->type field
+ * changes from the normal message type to the *_MORE message type.
+ * This function will send the normal type unless throttling gets invoked.
+ * Then it sets the type field and sends the _MORE message.
+ *
+ * PUBLIC: int __rep_send_throttle __P((DB_ENV *, int, REP_THROTTLE *,
+ * PUBLIC: u_int32_t));
+ */
+int
+__rep_send_throttle(dbenv, eid, repth, flags)
+ DB_ENV *dbenv;
+ int eid;
+ REP_THROTTLE *repth;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ u_int32_t size, typemore;
+ int check_limit;
+
+ check_limit = repth->gbytes != 0 || repth->bytes != 0;
+ /*
+ * If we only want to do throttle processing and we don't have it
+ * turned on, return immediately.
+ */
+ if (!check_limit && LF_ISSET(REP_THROTTLE_ONLY))
+ return (0);
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ typemore = 0;
+ if (repth->type == REP_LOG)
+ typemore = REP_LOG_MORE;
+ if (repth->type == REP_PAGE)
+ typemore = REP_PAGE_MORE;
+ DB_ASSERT(dbenv, typemore != 0);
+
+ /*
+ * 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.
+ */
+ size = repth->data_dbt->size + sizeof(REP_CONTROL);
+ if (check_limit) {
+ if (repth->lsn.offset == 28) {
+ repth->type = typemore;
+ goto send;
+ }
+ while (repth->bytes <= size) {
+ if (repth->gbytes > 0) {
+ repth->bytes += GIGABYTE;
+ --(repth->gbytes);
+ continue;
+ }
+ /*
+ * We don't hold the rep mutex,
+ * and may miscount.
+ */
+ rep->stat.st_nthrottles++;
+ repth->type = typemore;
+ goto send;
+ }
+ repth->bytes -= size;
+ }
+ /*
+ * Always send if it is typemore, otherwise send only if
+ * REP_THROTTLE_ONLY is not set.
+ */
+send: if ((repth->type == typemore || !LF_ISSET(REP_THROTTLE_ONLY)) &&
+ (__rep_send_message(dbenv, eid, repth->type,
+ &repth->lsn, repth->data_dbt, REPCTL_RESEND, 0) != 0))
+ return (1);
+ return (0);
+}
+
+/*
+ * __rep_msg_to_old --
+ * Convert current message numbers to old message numbers.
+ *
+ * PUBLIC: u_int32_t __rep_msg_to_old __P((u_int32_t, u_int32_t));
+ */
+u_int32_t
+__rep_msg_to_old(version, rectype)
+ u_int32_t version, rectype;
+{
+ /*
+ * We need to convert from current message numbers to old numbers and
+ * we need to convert from old numbers to current numbers. Offset by
+ * one for more readable code.
+ */
+ /*
+ * Everything for version 0 is invalid, there is no version 0.
+ */
+ static const u_int32_t table[DB_REPVERSION][REP_MAX_MSG+1] = {
+ { REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID },
+ { REP_INVALID, 1, 2, 3, REP_INVALID, REP_INVALID,
+ 4, 5, REP_INVALID, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, REP_INVALID, REP_INVALID, 16, REP_INVALID,
+ REP_INVALID, REP_INVALID, 19, 20, 21, 22, 23 },
+ { REP_INVALID, 1, 2, 3, REP_INVALID, REP_INVALID,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, REP_INVALID, 20, 21, 22, 23, 24, 25, 26 }
+ };
+ return (table[version][rectype]);
+}
+
+/*
+ * __rep_msg_from_old --
+ * Convert old message numbers to current message numbers.
+ *
+ * PUBLIC: u_int32_t __rep_msg_from_old __P((u_int32_t, u_int32_t));
+ */
+u_int32_t
+__rep_msg_from_old(version, rectype)
+ u_int32_t version, rectype;
+{
+ /*
+ * We need to convert from current message numbers to old numbers and
+ * we need to convert from old numbers to current numbers. Offset by
+ * one for more readable code.
+ */
+ /*
+ * Everything for version 0 is invalid, there is no version 0.
+ */
+ const u_int32_t table[DB_REPVERSION][REP_MAX_MSG+1] = {
+ { REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID },
+ { REP_INVALID, 1, 2, 3, 6, 7, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 21, REP_INVALID, REP_INVALID,
+ 25, 26, 27, 28, 29,
+ REP_INVALID, REP_INVALID, REP_INVALID, REP_INVALID,
+ REP_INVALID, REP_INVALID },
+ { REP_INVALID, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26,
+ 27, 28, 29, REP_INVALID, REP_INVALID, REP_INVALID }
+ };
+ return (table[version][rectype]);
+}
+
+#ifdef DIAGNOSTIC
+/*
+ * PUBLIC: void __rep_print_message
+ * PUBLIC: __P((DB_ENV *, int, REP_CONTROL *, char *, u_int32_t));
*/
void
-__rep_print_message(dbenv, eid, rp, str)
+__rep_print_message(dbenv, eid, rp, str, flags)
DB_ENV *dbenv;
int eid;
REP_CONTROL *rp;
char *str;
+ u_int32_t flags;
{
DB_MSGBUF mb;
- char *type;
+ u_int32_t rectype;
+ char ftype[32], *type;
- switch (rp->rectype) {
+ rectype = rp->rectype;
+ if (rp->rep_version != DB_REPVERSION)
+ rectype = __rep_msg_from_old(rp->rep_version, rectype);
+ switch (rectype) {
case REP_ALIVE:
type = "alive";
break;
@@ -778,6 +1537,12 @@ __rep_print_message(dbenv, eid, rp, str)
case REP_ALL_REQ:
type = "all_req";
break;
+ case REP_BULK_LOG:
+ type = "bulk_log";
+ break;
+ case REP_BULK_PAGE:
+ type = "bulk_page";
+ break;
case REP_DUPMASTER:
type = "dupmaster";
break;
@@ -826,6 +1591,9 @@ __rep_print_message(dbenv, eid, rp, str)
case REP_PAGE_REQ:
type = "page_req";
break;
+ case REP_REREQUEST:
+ type = "rerequest";
+ break;
case REP_UPDATE:
type = "update";
break;
@@ -851,9 +1619,26 @@ __rep_print_message(dbenv, eid, rp, str)
type = "NOTYPE";
break;
}
- RPRINT(dbenv, ((REP *)((DB_REP *)(dbenv)->rep_handle)->region),
- (dbenv, &mb, "%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));
+
+ /*
+ * !!!
+ * If adding new flags to print out make sure the aggregate
+ * length cannot overflow the buffer.
+ */
+ ftype[0] = '\0';
+ if (LF_ISSET(DB_REP_ANYWHERE))
+ (void)strcat(ftype, " any");
+ if (LF_ISSET(DB_REP_NOBUFFER))
+ (void)strcat(ftype, " nobuf");
+ if (LF_ISSET(DB_REP_PERMANENT))
+ (void)strcat(ftype, " perm");
+ if (LF_ISSET(DB_REP_REREQUEST))
+ (void)strcat(ftype, " rereq");
+ RPRINT(dbenv,
+ (dbenv, &mb,
+ "%s %s: msgv = %lu logv %lu gen = %lu eid %d, type %s, LSN [%lu][%lu] %s",
+ dbenv->db_home, str,
+ (u_long)rp->rep_version, (u_long)rp->log_version, (u_long)rp->gen,
+ eid, type, (u_long)rp->lsn.file, (u_long)rp->lsn.offset, ftype));
}
#endif
diff --git a/db/rep/rep_verify.c b/db/rep/rep_verify.c
new file mode 100644
index 000000000..630db3f02
--- /dev/null
+++ b/db/rep/rep_verify.c
@@ -0,0 +1,536 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: rep_verify.c,v 12.32 2006/09/07 03:05:26 sue Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+
+static int __rep_dorecovery __P((DB_ENV *, DB_LSN *, DB_LSN *));
+
+/*
+ * __rep_verify --
+ * Handle a REP_VERIFY message.
+ *
+ * PUBLIC: int __rep_verify __P((DB_ENV *, REP_CONTROL *, DBT *, int, time_t));
+ */
+int
+__rep_verify(dbenv, rp, rec, eid, savetime)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ DBT *rec;
+ int eid;
+ time_t savetime;
+{
+ DB_LOG *dblp;
+ DB_LOGC *logc;
+ DB_LSN lsn;
+ DB_REP *db_rep;
+ DBT mylog;
+ LOG *lp;
+ REP *rep;
+ u_int32_t rectype;
+ int match, ret, t_ret;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ if (IS_ZERO_LSN(lp->verify_lsn))
+ return (ret);
+
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+ memset(&mylog, 0, sizeof(mylog));
+ if ((ret = __log_c_get(logc, &rp->lsn, &mylog, DB_SET)) != 0)
+ goto err;
+ match = 0;
+ memcpy(&rectype, mylog.data, sizeof(rectype));
+ if (mylog.size == rec->size &&
+ memcmp(mylog.data, rec->data, rec->size) == 0)
+ match = 1;
+ /*
+ * If we don't have a match, backup to the previous
+ * identification record and try again.
+ */
+ if (match == 0) {
+ ZERO_LSN(lsn);
+ if ((ret = __rep_log_backup(dbenv, rep, logc, &lsn)) == 0) {
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ lp->verify_lsn = lsn;
+ lp->rcvd_recs = 0;
+ lp->wait_recs = rep->request_gap;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ (void)__rep_send_message(dbenv, eid, REP_VERIFY_REQ,
+ &lsn, NULL, 0, DB_REP_ANYWHERE);
+ } 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 the latter
+ * we don't think these sites were ever part of
+ * the same environment and we'll say so.
+ * In the former, request internal backup.
+ */
+ if (rp->lsn.file == 1) {
+ __db_errx(dbenv,
+ "Client was never part of master's environment");
+ ret = DB_REP_JOIN_FAILURE;
+ } else {
+ rep->stat.st_outdated++;
+
+ LOG_SYSTEM_LOCK(dbenv);
+ lsn = lp->lsn;
+ LOG_SYSTEM_UNLOCK(dbenv);
+ REP_SYSTEM_LOCK(dbenv);
+ F_CLR(rep, REP_F_RECOVER_VERIFY);
+ if (FLD_ISSET(rep->config, REP_C_NOAUTOINIT) ||
+ rep->version == DB_REPVERSION_42)
+ ret = DB_REP_JOIN_FAILURE;
+ else {
+ F_SET(rep, REP_F_RECOVER_UPDATE);
+ ZERO_LSN(rep->first_lsn);
+ }
+ REP_SYSTEM_UNLOCK(dbenv);
+ if (ret == 0)
+ (void)__rep_send_message(dbenv,
+ eid, REP_UPDATE_REQ, NULL,
+ NULL, 0, DB_REP_ANYWHERE);
+ }
+ }
+ } else
+ ret = __rep_verify_match(dbenv, &rp->lsn, savetime);
+
+err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __rep_verify_fail --
+ * Handle a REP_VERIFY_FAIL message.
+ *
+ * PUBLIC: int __rep_verify_fail __P((DB_ENV *, REP_CONTROL *, int));
+ */
+int
+__rep_verify_fail(dbenv, rp, eid)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ int eid;
+{
+ DB_LOG *dblp;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ int ret;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ /*
+ * If any recovery flags are set, but not VERIFY,
+ * then we ignore this message. We are already
+ * in the middle of updating.
+ */
+ if (F_ISSET(rep, REP_F_RECOVER_MASK) &&
+ !F_ISSET(rep, REP_F_RECOVER_VERIFY))
+ return (0);
+ /*
+ * Update stats. Reset startup_complete.
+ */
+ rep->stat.st_outdated++;
+ rep->stat.st_startup_complete = 0;
+
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ REP_SYSTEM_LOCK(dbenv);
+ /*
+ * We don't want an old or delayed VERIFY_FAIL
+ * message to throw us into internal initialization
+ * when we shouldn't be.
+ *
+ * Only go into internal initialization if:
+ * We are set for AUTOINIT mode.
+ * We are in RECOVER_VERIFY and this LSN == verify_lsn.
+ * We are not in any RECOVERY and we are expecting
+ * an LSN that no longer exists on the master.
+ * Otherwise, ignore this message.
+ */
+ if (FLD_ISSET(rep->config, REP_C_NOAUTOINIT) &&
+ ((F_ISSET(rep, REP_F_RECOVER_VERIFY) &&
+ LOG_COMPARE(&rp->lsn, &lp->verify_lsn) == 0) ||
+ (F_ISSET(rep, REP_F_RECOVER_MASK) == 0 &&
+ LOG_COMPARE(&rp->lsn, &lp->ready_lsn) >= 0))) {
+ ret = DB_REP_JOIN_FAILURE;
+ goto unlock;
+ }
+ if (((F_ISSET(rep, REP_F_RECOVER_VERIFY)) &&
+ LOG_COMPARE(&rp->lsn, &lp->verify_lsn) == 0) ||
+ (F_ISSET(rep, REP_F_RECOVER_MASK) == 0 &&
+ LOG_COMPARE(&rp->lsn, &lp->ready_lsn) >= 0)) {
+ F_CLR(rep, REP_F_RECOVER_VERIFY);
+ F_SET(rep, REP_F_RECOVER_UPDATE);
+ ZERO_LSN(rep->first_lsn);
+ lp->wait_recs = rep->request_gap;
+ REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ (void)__rep_send_message(dbenv,
+ eid, REP_UPDATE_REQ, NULL, NULL, 0, 0);
+ } else {
+unlock: REP_SYSTEM_UNLOCK(dbenv);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ }
+ return (ret);
+}
+
+/*
+ * __rep_verify_req --
+ * Handle a REP_VERIFY_REQ message.
+ *
+ * PUBLIC: int __rep_verify_req __P((DB_ENV *, REP_CONTROL *, int));
+ */
+int
+__rep_verify_req(dbenv, rp, eid)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ int eid;
+{
+ DB_LOGC *logc;
+ DB_REP *db_rep;
+ DBT *d, data_dbt;
+ REP *rep;
+ u_int32_t type;
+ int old, ret;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ type = REP_VERIFY;
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+ d = &data_dbt;
+ memset(d, 0, sizeof(data_dbt));
+ F_SET(logc, DB_LOG_SILENT_ERR);
+ 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.
+ * If we get a DB_NOTFOUND, then there is a chance that
+ * the LSN comes before the first file present in which
+ * case we need to return a fail so that the client can return
+ * a DB_OUTDATED.
+ *
+ * If we're a client servicing this request and we get a
+ * NOTFOUND, return it so the caller can rerequest from
+ * a better source.
+ */
+ if (ret == DB_NOTFOUND) {
+ if (F_ISSET(rep, REP_F_CLIENT))
+ goto notfound;
+ else if (__log_is_outdated(dbenv, rp->lsn.file, &old) == 0 &&
+ old != 0)
+ type = REP_VERIFY_FAIL;
+ }
+
+ if (ret != 0)
+ d = NULL;
+
+ (void)__rep_send_message(dbenv, eid, type, &rp->lsn, d, 0, 0);
+notfound:
+ ret = __log_c_close(logc);
+ return (ret);
+}
+
+static int
+__rep_dorecovery(dbenv, lsnp, trunclsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp, *trunclsnp;
+{
+ DB_LSN lsn;
+ DB_REP *db_rep;
+ DBT mylog;
+ DB_LOGC *logc;
+ REP *rep;
+ int ret, t_ret, update;
+ u_int32_t rectype, opcode;
+ __txn_regop_args *txnrec;
+ __txn_regop_42_args *txn42rec;
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ /* Figure out if we are backing out any committed transactions. */
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+
+ memset(&mylog, 0, sizeof(mylog));
+ if (F_ISSET(rep, REP_F_RECOVER_LOG))
+ update = 1;
+ else
+ update = 0;
+ while (update == 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 (rep->version >= DB_REPVERSION_44) {
+ if ((ret = __txn_regop_read(dbenv,
+ mylog.data, &txnrec)) != 0)
+ goto err;
+ opcode = txnrec->opcode;
+ __os_free(dbenv, txnrec);
+ } else {
+ if ((ret = __txn_regop_42_read(dbenv,
+ mylog.data, &txn42rec)) != 0)
+ goto err;
+ opcode = txn42rec->opcode;
+ __os_free(dbenv, txn42rec);
+ }
+ if (opcode != TXN_ABORT)
+ update = 1;
+ }
+ }
+ /*
+ * Handle if the log_c_get fails.
+ */
+ if (ret != 0)
+ goto err;
+
+ /*
+ * If we successfully run recovery, we've opened all the necessary
+ * files. We are guaranteed to be single-threaded here, so no mutex
+ * is necessary.
+ */
+ if ((ret = __db_apprec(dbenv, lsnp, trunclsnp, update, 0)) == 0)
+ F_SET(db_rep, DBREP_OPENFILES);
+
+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.
+ *
+ * PUBLIC: int __rep_verify_match __P((DB_ENV *, DB_LSN *, time_t));
+ */
+int
+__rep_verify_match(dbenv, reclsnp, savetime)
+ DB_ENV *dbenv;
+ DB_LSN *reclsnp;
+ time_t savetime;
+{
+ DB_LOG *dblp;
+ DB_LSN trunclsn;
+ DB_REP *db_rep;
+ LOG *lp;
+ REGENV *renv;
+ REGINFO *infop;
+ REP *rep;
+ int done, master, ret;
+ u_int32_t unused;
+
+ dblp = dbenv->lg_handle;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ lp = dblp->reginfo.primary;
+ ret = 0;
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+
+ /*
+ * 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, rep->mtx_clientdb);
+ done = savetime != renv->rep_timestamp;
+ if (done) {
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ return (0);
+ }
+ ZERO_LSN(lp->verify_lsn);
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+
+ /*
+ * 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.
+ */
+ REP_SYSTEM_LOCK(dbenv);
+ if (rep->lockout_th != 0 ||
+ (!F_ISSET(rep, REP_F_RECOVER_LOG) &&
+ (F_ISSET(rep, REP_F_READY) || rep->in_recovery != 0))) {
+ rep->stat.st_msgs_recover++;
+ goto errunlock;
+ }
+
+ if ((ret = __rep_lockout_msg(dbenv, rep, 1)) != 0)
+ goto errunlock;
+
+ if ((ret = __rep_lockout_api(dbenv, rep)) != 0)
+ goto errunlock;
+
+ /* OK, everyone is out, we can now run recovery. */
+ REP_SYSTEM_UNLOCK(dbenv);
+
+ if ((ret = __rep_dorecovery(dbenv, reclsnp, &trunclsn)) != 0) {
+ REP_SYSTEM_LOCK(dbenv);
+ rep->lockout_th = 0;
+ 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, rep->mtx_clientdb);
+ lp->ready_lsn = trunclsn;
+ ZERO_LSN(lp->waiting_lsn);
+ ZERO_LSN(lp->max_wait_lsn);
+ lp->max_perm_lsn = *reclsnp;
+ 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, rep->mtx_clientdb);
+ ret = __db_truncate(db_rep->rep_db, NULL, &unused);
+ MUTEX_LOCK(dbenv, rep->mtx_clientdb);
+ F_CLR(db_rep->rep_db, DB_AM_RECOVER);
+
+ REP_SYSTEM_LOCK(dbenv);
+ rep->stat.st_log_queued = 0;
+ rep->in_recovery = 0;
+ rep->lockout_th = 0;
+ F_CLR(rep, REP_F_NOARCHIVE | REP_F_RECOVER_MASK);
+ if (ret != 0)
+ goto errunlock2;
+
+ /*
+ * 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;
+ REP_SYSTEM_UNLOCK(dbenv);
+ if (master == DB_EID_INVALID) {
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ ret = 0;
+ } else {
+ /*
+ * We're making an ALL_REQ. But now that we've
+ * cleared the flags, we're likely receiving new
+ * log records from the master, resulting in a gap
+ * immediately. So to avoid multiple data streams,
+ * set the wait_recs value high now to give the master
+ * a chance to start sending us these records before
+ * the gap code re-requests the same gap. Wait_recs
+ * will get reset once we start receiving these
+ * records.
+ */
+ lp->wait_recs = rep->max_gap;
+ MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+ (void)__rep_send_message(dbenv,
+ master, REP_ALL_REQ, reclsnp, NULL, 0, DB_REP_ANYWHERE);
+ }
+ if (0) {
+errunlock2: MUTEX_UNLOCK(dbenv, rep->mtx_clientdb);
+errunlock: REP_SYSTEM_UNLOCK(dbenv);
+ }
+ return (ret);
+}
+
+/*
+ * __rep_log_backup --
+ *
+ * In the verify handshake, we walk backward looking for
+ * identification records. Those are the only record types
+ * we verify and match on.
+ *
+ * PUBLIC: int __rep_log_backup __P((DB_ENV *, REP *, DB_LOGC *, DB_LSN *));
+ */
+int
+__rep_log_backup(dbenv, rep, logc, lsn)
+ DB_ENV *dbenv;
+ REP *rep;
+ DB_LOGC *logc;
+ DB_LSN *lsn;
+{
+ DBT mylog;
+ u_int32_t rectype;
+ int ret;
+
+ COMPQUIET(dbenv, NULL);
+ ret = 0;
+ memset(&mylog, 0, sizeof(mylog));
+ while ((ret = __log_c_get(logc, lsn, &mylog, DB_PREV)) == 0) {
+ /*
+ * Determine what we look for based on version number.
+ * Due to the contents of records changing between
+ * versions we have to match based on criteria of that
+ * particular version.
+ */
+ memcpy(&rectype, mylog.data, sizeof(rectype));
+ /*
+ * In 4.2, we match anything except ckp, recycle and
+ * dbreg register.
+ */
+ if (rep->version == DB_REPVERSION_42 &&
+ rectype != DB___txn_ckp && rectype != DB___txn_recycle &&
+ rectype != DB___dbreg_register)
+ break;
+ /*
+ * In 4.3 we only match on checkpoint.
+ */
+ if (rep->version == DB_REPVERSION_43 &&
+ rectype == DB___txn_ckp)
+ break;
+ /*
+ * In 4.4 and beyond we match checkpoint and commit.
+ */
+ if (rep->version >= DB_REPVERSION_44 &&
+ (rectype == DB___txn_ckp || rectype == DB___txn_regop))
+ break;
+ }
+ return (ret);
+}
diff --git a/db/repmgr/repmgr_elect.c b/db/repmgr/repmgr_elect.c
new file mode 100644
index 000000000..39ed1e863
--- /dev/null
+++ b/db/repmgr/repmgr_elect.c
@@ -0,0 +1,369 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_elect.c,v 1.23 2006/09/12 01:06:34 alanb Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+static int __repmgr_is_ready __P((DB_ENV *));
+static int __repmgr_elect_main __P((DB_ENV *));
+static void *__repmgr_elect_thread __P((void *));
+static int start_election_thread __P((DB_ENV *));
+
+/*
+ * Starts the election thread, or wakes up an existing one, starting off with
+ * the specified operation (an election, or a call to rep_start(CLIENT), or
+ * nothing). Avoid multiple concurrent elections.
+ *
+ * PUBLIC: int __repmgr_init_election __P((DB_ENV *, int));
+ *
+ * !!!
+ * Caller must hold mutex.
+ */
+int
+__repmgr_init_election(dbenv, initial_operation)
+ DB_ENV *dbenv;
+ int initial_operation;
+{
+ DB_REP *db_rep;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+
+ if (db_rep->finished) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "ignoring elect thread request %d; repmgr is finished",
+ initial_operation));
+ return (0);
+ }
+
+ db_rep->operation_needed = initial_operation;
+ if (db_rep->elect_thread == NULL)
+ ret = start_election_thread(dbenv);
+ else if (db_rep->elect_thread->finished) {
+ RPRINT(dbenv, (dbenv, &mb, "join dead elect thread"));
+ if ((ret = __repmgr_thread_join(db_rep->elect_thread)) != 0)
+ return (ret);
+ __os_free(dbenv, db_rep->elect_thread);
+ db_rep->elect_thread = NULL;
+ ret = start_election_thread(dbenv);
+ } else {
+ RPRINT(dbenv, (dbenv, &mb, "reusing existing elect thread"));
+ if ((ret = __repmgr_signal(&db_rep->check_election)) != 0)
+ __db_err(dbenv, ret, "can't signal election thread");
+ }
+ return (ret);
+}
+
+/*
+ * !!!
+ * Caller holds mutex.
+ */
+static int
+start_election_thread(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REPMGR_RUNNABLE *elector;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+
+ if ((ret = __os_malloc(dbenv, sizeof(REPMGR_RUNNABLE), &elector))
+ != 0)
+ return (ret);
+ elector->dbenv = dbenv;
+ elector->run = __repmgr_elect_thread;
+
+ if ((ret = __repmgr_thread_start(dbenv, elector)) == 0)
+ db_rep->elect_thread = elector;
+ else
+ __os_free(dbenv, elector);
+
+ return (ret);
+}
+
+static void *
+__repmgr_elect_thread(args)
+ void *args;
+{
+ DB_ENV *dbenv = args;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ RPRINT(dbenv, (dbenv, &mb, "starting election thread"));
+
+ if ((ret = __repmgr_elect_main(dbenv)) != 0) {
+ __db_err(dbenv, ret, "election thread failed");
+ __repmgr_thread_failure(dbenv, ret);
+ }
+
+ RPRINT(dbenv, (dbenv, &mb, "election thread is exiting"));
+ return (NULL);
+}
+
+static int
+__repmgr_elect_main(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ DBT my_addr;
+#ifdef DB_WIN32
+ DWORD duration;
+#else
+ struct timespec deadline;
+#endif
+ u_int nsites, nvotes;
+ int chosen_master, done, failure_recovery, last_op, ret, to_do;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ last_op = 0;
+
+ /*
+ * db_rep->operation_needed is the mechanism by which the outside world
+ * (running in a different thread) tells us what it wants us to do. It
+ * is obviously relevant when we're just starting up. But it can also
+ * be set if a subsequent request for us to do something occurs while
+ * we're still looping.
+ *
+ * ELECT_FAILURE_ELECTION asks us to start by doing an election, but to
+ * do so in failure recovery mode. This failure recovery mode may
+ * persist through several loop iterations: as long as it takes us to
+ * succeed in finding a master, or until we get asked to perform a new
+ * request. Thus the time for mapping ELECT_FAILURE_ELECTION to the
+ * internal ELECT_ELECTION, as well as the setting of the failure
+ * recovery flag, is at the point we receive the new request from
+ * operation_needed (either here, or within the loop below).
+ */
+ LOCK_MUTEX(db_rep->mutex);
+ if (db_rep->finished) {
+ db_rep->elect_thread->finished = TRUE;
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (0);
+ }
+ to_do = db_rep->operation_needed;
+ db_rep->operation_needed = 0;
+ UNLOCK_MUTEX(db_rep->mutex);
+ if (to_do == ELECT_FAILURE_ELECTION) {
+ failure_recovery = TRUE;
+ to_do = ELECT_ELECTION;
+ } else
+ failure_recovery = FALSE;
+
+ for (;;) {
+ RPRINT(dbenv, (dbenv, &mb, "elect thread to do: %d", to_do));
+ switch (to_do) {
+ case ELECT_ELECTION:
+ nsites = __repmgr_get_nsites(db_rep);
+
+ if (db_rep->init_policy == DB_REP_FULL_ELECTION &&
+ !db_rep->found_master)
+ nvotes = nsites;
+ else {
+ nvotes = ELECTION_MAJORITY(nsites);
+
+ /*
+ * If we're doing an election because we noticed
+ * that the master failed, it's reasonable to
+ * expect that the master won't participate. By
+ * not waiting for its vote, we can probably
+ * complete the election faster. But note that
+ * we shouldn't allow this to affect nvotes
+ * calculation.
+ */
+ if (failure_recovery) {
+ nsites--;
+
+ if (nsites == 1) {
+ /*
+ * We've just lost the only
+ * other site in the group, so
+ * there's no point in holding
+ * an election.
+ */
+ if ((ret =
+ __repmgr_become_master(
+ dbenv)) != 0)
+ return (ret);
+ break;
+ }
+ }
+ }
+
+ switch (ret = __rep_elect(dbenv,
+ (int)nsites, (int)nvotes, &chosen_master, 0)) {
+ case DB_REP_UNAVAIL:
+ break;
+
+ case 0:
+ if (chosen_master == SELF_EID &&
+ (ret = __repmgr_become_master(dbenv)) != 0)
+ return (ret);
+ break;
+
+ default:
+ __db_err(
+ dbenv, ret, "unexpected election failure");
+ return (ret);
+ }
+ last_op = ELECT_ELECTION;
+ break;
+ case ELECT_REPSTART:
+ if ((ret =
+ __repmgr_prepare_my_addr(dbenv, &my_addr)) != 0)
+ return (ret);
+ ret = __rep_start(dbenv, &my_addr, DB_REP_CLIENT);
+ __os_free(dbenv, my_addr.data);
+ if (ret != 0) {
+ __db_err(dbenv, ret, "rep_start");
+ return (ret);
+ }
+ last_op = ELECT_REPSTART;
+ break;
+ case 0:
+ /*
+ * Nothing to do: this can happen the first time
+ * through, on initialization.
+ */
+ last_op = 0;
+ break;
+ default:
+ DB_ASSERT(dbenv, FALSE);
+ }
+
+ LOCK_MUTEX(db_rep->mutex);
+ while (!__repmgr_is_ready(dbenv)) {
+#ifdef DB_WIN32
+ duration = db_rep->election_retry_wait / 1000;
+ ret = SignalObjectAndWait(db_rep->mutex,
+ db_rep->check_election, duration, FALSE);
+ LOCK_MUTEX(db_rep->mutex);
+ if (ret == WAIT_TIMEOUT)
+ break;
+ DB_ASSERT(dbenv, ret == WAIT_OBJECT_0);
+#else
+ __repmgr_compute_wait_deadline(dbenv, &deadline,
+ db_rep->election_retry_wait);
+ if ((ret = pthread_cond_timedwait(
+ &db_rep->check_election, &db_rep->mutex, &deadline))
+ == ETIMEDOUT)
+ break;
+ DB_ASSERT(dbenv, ret == 0);
+#endif
+ }
+
+ /*
+ * Ways we can get here: time out, operation needed, master
+ * becomes valid, or thread shut-down command.
+ *
+ * If we're not yet done, figure out what to do next: if we've
+ * been told explicitly what to do (operation_needed), do that.
+ * Otherwise, what we do next is approximately the complement of
+ * what we just did; in other words, we alternate.
+ */
+ done = IS_VALID_EID(db_rep->master_eid) || db_rep->finished;
+ if (done)
+ db_rep->elect_thread->finished = TRUE;
+ else if ((to_do = db_rep->operation_needed) == 0) {
+ if (last_op == ELECT_ELECTION)
+ to_do = ELECT_REPSTART;
+ else {
+ /*
+ * Generally, if what we previously did is a
+ * rep_start (or nothing, which really just
+ * means another thread did the rep_start before
+ * turning us on), then we next do an election.
+ * However, with the REP_CLIENT init policy we
+ * never do an initial election.
+ */
+ to_do = ELECT_ELECTION;
+ if (db_rep->init_policy == DB_REP_CLIENT &&
+ !db_rep->found_master)
+ to_do = ELECT_REPSTART;
+ }
+ } else {
+ db_rep->operation_needed = 0;
+ if (to_do == ELECT_FAILURE_ELECTION) {
+ failure_recovery = TRUE;
+ to_do = ELECT_ELECTION;
+ } else
+ failure_recovery = FALSE;
+ }
+
+ /*
+ * TODO: is it possible for an operation_needed to be set, with
+ * nevertheless a valid master? I don't think so. Would a more
+ * straightforward exit test involve "operation_needed" instead
+ * of (or in addition to) valid master?
+ */
+
+ UNLOCK_MUTEX(db_rep->mutex);
+ if (done)
+ return (0);
+ }
+}
+
+/*
+ * Tests whether the election thread is ready to do something, or if it should
+ * wait a little while.
+ */
+static int
+__repmgr_is_ready(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+
+ RPRINT(dbenv, (dbenv, &mb,
+ "repmgr elect: opcode %d, finished %d, master %d",
+ db_rep->operation_needed, db_rep->finished, db_rep->master_eid));
+
+ return (db_rep->operation_needed ||
+ db_rep->finished || IS_VALID_EID(db_rep->master_eid));
+}
+
+/*
+ * PUBLIC: int __repmgr_become_master __P((DB_ENV *));
+ */
+int
+__repmgr_become_master(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ DBT my_addr;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ db_rep->master_eid = SELF_EID;
+ db_rep->found_master = TRUE;
+
+ if ((ret = __repmgr_prepare_my_addr(dbenv, &my_addr)) != 0)
+ return (ret);
+ ret = __rep_start(dbenv, &my_addr, DB_REP_MASTER);
+ __os_free(dbenv, my_addr.data);
+ if (ret != 0)
+ return (ret);
+ if ((ret = __repmgr_stash_generation(dbenv)) != 0)
+ return (ret);
+
+ return (0);
+}
diff --git a/db/repmgr/repmgr_method.c b/db/repmgr/repmgr_method.c
new file mode 100644
index 000000000..d2fdb8eb9
--- /dev/null
+++ b/db/repmgr/repmgr_method.c
@@ -0,0 +1,442 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_method.c,v 1.28 2006/09/11 15:15:20 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+static int __repmgr_await_threads __P((DB_ENV *));
+
+/*
+ * TODO: should (more of) this function be protected by mutex? Caution: calling
+ * rep_start while holding mutex doesn't work, 'cuz it pushes out a message to
+ * the send() function.
+ */
+/*
+ * PUBLIC: int __repmgr_start __P((DB_ENV *, int, u_int32_t));
+ */
+int
+__repmgr_start(dbenv, nthreads, flags)
+ DB_ENV *dbenv;
+ int nthreads;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ DBT my_addr;
+ REPMGR_RUNNABLE *selector, *messenger;
+ int ret, i;
+
+ db_rep = dbenv->rep_handle;
+
+ /* Check that the required initialization has been done. */
+ if (db_rep->my_addr.port == 0) {
+ __db_errx(dbenv,
+ "repmgr_set_local_site must be called before repmgr_start");
+ return (EINVAL);
+ }
+
+ if (db_rep->selector != NULL || db_rep->finished) {
+ __db_errx(dbenv,
+ "DB_ENV->repmgr_start may not be called more than once");
+ return (EINVAL);
+ }
+
+ switch (flags) {
+ case DB_REP_CLIENT:
+ case DB_REP_ELECTION:
+ case DB_REP_FULL_ELECTION:
+ case DB_REP_MASTER:
+ break;
+ default:
+ __db_errx(dbenv,
+ "repmgr_start: unrecognized flags parameter value");
+ return (EINVAL);
+ }
+
+ if (nthreads <= 0) {
+ __db_errx(dbenv,
+ "repmgr_start: nthreads parameter must be >= 1");
+ return (EINVAL);
+ }
+
+ if ((ret =
+ __os_calloc(dbenv, (u_int)nthreads, sizeof(REPMGR_RUNNABLE *),
+ &db_rep->messengers)) != 0)
+ return (ret);
+ db_rep->nthreads = nthreads;
+
+ if ((ret = __repmgr_net_init(dbenv, db_rep)) != 0 ||
+ (ret = __repmgr_init_sync(dbenv, db_rep)) != 0 ||
+ (ret = __rep_set_transport(dbenv, SELF_EID, __repmgr_send)) != 0)
+ return (ret);
+
+ /*
+ * Make some sort of call to rep_start before starting other threads, to
+ * ensure that incoming messages being processed always have a rep
+ * context properly configured.
+ */
+ if ((db_rep->init_policy = flags) == DB_REP_MASTER)
+ ret = __repmgr_become_master(dbenv);
+ else {
+ if ((ret = __repmgr_prepare_my_addr(dbenv, &my_addr)) != 0)
+ return (ret);
+ ret = __rep_start(dbenv, &my_addr, DB_REP_CLIENT);
+ __os_free(dbenv, my_addr.data);
+ if (ret == 0) {
+ LOCK_MUTEX(db_rep->mutex);
+ ret = __repmgr_init_election(dbenv, 0);
+ UNLOCK_MUTEX(db_rep->mutex);
+ }
+ }
+ if (ret != 0)
+ return (ret);
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(REPMGR_RUNNABLE), &selector))
+ != 0)
+ return (ret);
+ selector->dbenv = dbenv;
+ selector->run = __repmgr_select_thread;
+ if ((ret = __repmgr_thread_start(dbenv, selector)) != 0) {
+ __db_err(dbenv, ret, "can't start selector thread");
+ __os_free(dbenv, selector);
+ return (ret);
+ } else
+ db_rep->selector = selector;
+
+ for (i=0; i<nthreads; i++) {
+ if ((ret = __os_calloc(dbenv, 1, sizeof(REPMGR_RUNNABLE),
+ &messenger)) != 0)
+ return (ret);
+
+ messenger->dbenv = dbenv;
+ messenger->run = __repmgr_msg_thread;
+ if ((ret = __repmgr_thread_start(dbenv, messenger)) != 0) {
+ __os_free(dbenv, messenger);
+ return (ret);
+ }
+ db_rep->messengers[i] = messenger;
+ }
+
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_close __P((DB_ENV *));
+ */
+int
+__repmgr_close(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ int ret, t_ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ if (db_rep->selector != NULL) {
+ RPRINT(dbenv, (dbenv, &mb, "Stopping repmgr threads"));
+ ret = __repmgr_stop_threads(dbenv);
+ if ((t_ret = __repmgr_await_threads(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ RPRINT(dbenv, (dbenv, &mb, "Repmgr threads are finished"));
+ }
+
+ if ((t_ret = __repmgr_net_close(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = __repmgr_close_sync(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_set_ack_policy __P((DB_ENV *, int));
+ */
+int
+__repmgr_set_ack_policy(dbenv, policy)
+ DB_ENV *dbenv;
+ int policy;
+{
+ switch (policy) {
+ case DB_REPMGR_ACKS_ALL: /* FALLTHROUGH */
+ case DB_REPMGR_ACKS_ALL_PEERS: /* FALLTHROUGH */
+ case DB_REPMGR_ACKS_NONE: /* FALLTHROUGH */
+ case DB_REPMGR_ACKS_ONE: /* FALLTHROUGH */
+ case DB_REPMGR_ACKS_ONE_PEER: /* FALLTHROUGH */
+ case DB_REPMGR_ACKS_QUORUM:
+ dbenv->rep_handle->perm_policy = policy;
+ return (0);
+ default:
+ __db_errx(dbenv,
+ "Unknown ack_policy in DB_ENV->repmgr_set_ack_policy");
+ return (EINVAL);
+ }
+}
+
+/*
+ * PUBLIC: int __repmgr_get_ack_policy __P((DB_ENV *, int *));
+ */
+int
+__repmgr_get_ack_policy(dbenv, policy)
+ DB_ENV *dbenv;
+ int *policy;
+{
+ *policy = dbenv->rep_handle->perm_policy;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_dbenv_create __P((DB_ENV *, DB_REP *));
+ */
+int
+__repmgr_dbenv_create(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ int ret;
+
+ /* Set some default values. */
+ db_rep->elect_timeout = 2 * 1000000; /* 2 seconds */
+ db_rep->ack_timeout = 1 * 1000000; /* 1 second */
+ db_rep->connection_retry_wait = 30 * 1000000; /* 30 seconds */
+ db_rep->election_retry_wait = 10 * 1000000; /* 10 seconds */
+ db_rep->config_nsites = 0;
+ db_rep->peer = DB_EID_INVALID;
+ db_rep->perm_policy = DB_REPMGR_ACKS_QUORUM;
+ db_rep->my_priority = 100;
+
+ /*
+ * TODO: OK, this has just crossed my pain tolerance threshold: I think
+ * this is just getting too unjustifiably complex. It's probably just
+ * to have an explicit flag of some sort indicating that initialization
+ * has been done, and maybe not even bother with the fine granularity of
+ * initializing net, sync and queue separately (at least in terms of
+ * letting them succeed or fail independently).
+ */
+#ifdef DB_WIN32
+ db_rep->waiters = NULL;
+#else
+ db_rep->read_pipe = db_rep->write_pipe = -1;
+#endif
+ if ((ret = __repmgr_net_create(dbenv, db_rep)) == 0)
+ ret = __repmgr_queue_create(dbenv, db_rep);
+
+ return (ret);
+}
+
+/*
+ * PUBLIC: void __repmgr_dbenv_destroy __P((DB_ENV *, DB_REP *));
+ */
+void
+__repmgr_dbenv_destroy(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ __repmgr_queue_destroy(dbenv);
+ __repmgr_net_destroy(dbenv, db_rep);
+ if (db_rep->messengers != NULL) {
+ __os_free(dbenv, db_rep->messengers);
+ db_rep->messengers = NULL;
+ }
+}
+
+/*
+ * PUBLIC: int __repmgr_stop_threads __P((DB_ENV *));
+ */
+int
+__repmgr_stop_threads(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+
+ /*
+ * Hold mutex for the purpose of waking up threads, but then get out of
+ * the way to let them clean up and exit.
+ */
+ LOCK_MUTEX(db_rep->mutex);
+ db_rep->finished = TRUE;
+ if (db_rep->elect_thread != NULL &&
+ (ret = __repmgr_signal(&db_rep->check_election)) != 0)
+ goto unlock;
+
+ if ((ret = __repmgr_signal(&db_rep->queue_nonempty)) != 0)
+ goto unlock;
+ UNLOCK_MUTEX(db_rep->mutex);
+
+ return (__repmgr_wake_main_thread(dbenv));
+
+unlock:
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
+
+static int
+__repmgr_await_threads(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REPMGR_RUNNABLE *messenger;
+ int ret, t_ret, i;
+
+ db_rep = dbenv->rep_handle;
+ ret = 0;
+ if (db_rep->elect_thread != NULL) {
+ ret = __repmgr_thread_join(db_rep->elect_thread);
+ __os_free(dbenv, db_rep->elect_thread);
+ db_rep->elect_thread = NULL;
+ }
+
+ /* TODO: if the join fails, how/when do we clean up the memory? */
+ for (i=0; i<db_rep->nthreads && db_rep->messengers[i] != NULL; i++) {
+ messenger = db_rep->messengers[i];
+ if ((t_ret = __repmgr_thread_join(messenger)) != 0 && ret == 0)
+ ret = t_ret;
+ __os_free(dbenv, messenger);
+ db_rep->messengers[i] = NULL; /* necessary? */
+ }
+ __os_free(dbenv, db_rep->messengers);
+ db_rep->messengers = NULL;
+
+ if (db_rep->selector != NULL) {
+ if ((t_ret = __repmgr_thread_join(db_rep->selector)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+ __os_free(dbenv, db_rep->selector);
+ db_rep->selector = NULL;
+ }
+
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_set_local_site __P((DB_ENV *, const char *, u_int,
+ * PUBLIC: u_int32_t));
+ */
+int
+__repmgr_set_local_site(dbenv, host, port, flags)
+ DB_ENV *dbenv;
+ const char *host;
+ u_int port;
+ u_int32_t flags;
+{
+ ADDRINFO *address_list;
+ DB_REP *db_rep;
+ repmgr_netaddr_t addr;
+ int locked, ret;
+ const char *sharable_host;
+ char buffer[MAXHOSTNAMELEN];
+
+ if (flags != 0)
+ return (__db_ferr(dbenv, "DB_ENV->repmgr_set_local_site", 0));
+
+ db_rep = dbenv->rep_handle;
+ if (db_rep->my_addr.port != 0) {
+ __db_errx(dbenv, "Listen address already set");
+ return (EINVAL);
+ }
+
+ /*
+ * If we haven't been given a sharable local host name, we must get one
+ * for the purpose of sharing with our friends, but it's ok to use for
+ * the address look-up. "Helpfully" converting special names such as
+ * "localhost" in this same way is tempting, but in practice turns out
+ * to be too tricky.
+ */
+ if (host == NULL) {
+ if ((ret = gethostname(buffer, sizeof(buffer))) != 0)
+ return (net_errno);
+
+ /* In case truncation leaves no terminating NUL byte: */
+ buffer[sizeof(buffer) - 1] = '\0';
+ sharable_host = buffer;
+ } else
+ sharable_host = host;
+
+ if ((ret = __repmgr_getaddr(dbenv,
+ host, port, AI_PASSIVE, &address_list)) != 0)
+ return (ret);
+
+ if ((ret = __repmgr_pack_netaddr(dbenv,
+ sharable_host, port, address_list, &addr)) != 0) {
+ __db_freeaddrinfo(dbenv, address_list);
+ return (ret);
+ }
+
+ if (REPMGR_SYNC_INITED(db_rep)) {
+ LOCK_MUTEX(db_rep->mutex);
+ locked = TRUE;
+ } else
+ locked = FALSE;
+
+ memcpy(&db_rep->my_addr, &addr, sizeof(addr));
+
+ if (locked)
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (0);
+}
+
+/*
+ * If the application only calls this method from a single thread (e.g., during
+ * its initialization), it will avoid the problems with the non-thread-safe host
+ * name lookup. In any case, if we relegate the blocking lookup to here it
+ * won't affect our select() loop.
+ *
+ * PUBLIC: int __repmgr_add_remote_site __P((DB_ENV *, const char *, u_int,
+ * PUBLIC: int *, u_int32_t));
+ */
+int
+__repmgr_add_remote_site(dbenv, host, port, eidp, flags)
+ DB_ENV *dbenv;
+ const char *host;
+ u_int port;
+ int *eidp;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ int eid, locked, ret;
+
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->repmgr_add_remote_site", flags, DB_REPMGR_PEER)) != 0)
+ return (ret);
+
+ if (host == NULL) {
+ __db_errx(dbenv,
+ "repmgr_add_remote_site: host name is required");
+ return (EINVAL);
+ }
+
+ db_rep = dbenv->rep_handle;
+
+ if (REPMGR_SYNC_INITED(db_rep)) {
+ LOCK_MUTEX(db_rep->mutex);
+ locked = TRUE;
+ } else
+ locked = FALSE;
+
+ if ((ret = __repmgr_add_site(dbenv, host, port, &site)) != 0)
+ goto unlock;
+ eid = EID_FROM_SITE(site);
+
+ if (LF_ISSET(DB_REPMGR_PEER))
+ db_rep->peer = eid;
+ if (eidp != NULL)
+ *eidp = eid;
+
+unlock: if (locked)
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
diff --git a/db/repmgr/repmgr_msg.c b/db/repmgr/repmgr_msg.c
new file mode 100644
index 000000000..ceeeb968d
--- /dev/null
+++ b/db/repmgr/repmgr_msg.c
@@ -0,0 +1,333 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_msg.c,v 1.23 2006/09/11 15:15:20 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+static int message_loop __P((DB_ENV *));
+static int process_message __P((DB_ENV*, DBT*, DBT*, int));
+static int handle_newsite __P((DB_ENV *, const DBT *));
+static int ack_message __P((DB_ENV *, u_int32_t, DB_LSN *));
+
+/*
+ * PUBLIC: void *__repmgr_msg_thread __P((void *));
+ */
+void *
+__repmgr_msg_thread(args)
+ void *args;
+{
+ DB_ENV *dbenv = args;
+ int ret;
+
+ if ((ret = message_loop(dbenv)) != 0) {
+ __db_err(dbenv, ret, "message thread failed");
+ __repmgr_thread_failure(dbenv, ret);
+ }
+ return (NULL);
+}
+
+static int
+message_loop(dbenv)
+ DB_ENV *dbenv;
+{
+ REPMGR_MESSAGE *msg;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ while ((ret = __repmgr_queue_get(dbenv, &msg)) == 0) {
+ while ((ret = process_message(dbenv, &msg->control, &msg->rec,
+ msg->originating_eid)) == DB_LOCK_DEADLOCK)
+ RPRINT(dbenv, (dbenv, &mb, "repmgr deadlock retry"));
+
+ __os_free(dbenv, msg);
+ if (ret != 0)
+ return (ret);
+ }
+
+ return (ret == DB_REP_UNAVAIL ? 0 : ret);
+}
+
+static int
+process_message(dbenv, control, rec, eid)
+ DB_ENV *dbenv;
+ DBT *control, *rec;
+ int eid;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ DB_LSN permlsn;
+ int ret;
+ u_int32_t generation;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+
+ /*
+ * Save initial generation number, in case it changes in a close race
+ * with a NEWMASTER. See msgdir.10000/10039/msg00086.html.
+ */
+ generation = db_rep->generation;
+
+ switch (ret =
+ __rep_process_message(dbenv, control, rec, &eid, &permlsn)) {
+ case DB_REP_NEWSITE:
+ return (handle_newsite(dbenv, rec));
+
+ case DB_REP_NEWMASTER:
+ db_rep->found_master = TRUE;
+ /* Check if it's us. */
+ if ((db_rep->master_eid = eid) == SELF_EID) {
+ if ((ret = __repmgr_become_master(dbenv)) != 0)
+ return (ret);
+ } else {
+ /*
+ * Since we have no further need for 'eid' throughout
+ * the remainder of this function, it's (relatively)
+ * safe to pass its address directly to the
+ * application. If that were not the case, we could
+ * instead copy it into a scratch variable.
+ */
+ RPRINT(dbenv,
+ (dbenv, &mb, "firing NEWMASTER (%d) event", eid));
+ DB_EVENT(dbenv, DB_EVENT_REP_NEWMASTER, &eid);
+ if ((ret = __repmgr_stash_generation(dbenv)) != 0)
+ return (ret);
+ }
+ break;
+
+ case DB_REP_HOLDELECTION:
+ LOCK_MUTEX(db_rep->mutex);
+ db_rep->master_eid = DB_EID_INVALID;
+ ret = __repmgr_init_election(dbenv, ELECT_ELECTION);
+ UNLOCK_MUTEX(db_rep->mutex);
+ if (ret != 0)
+ return (ret);
+ break;
+
+ case DB_REP_DUPMASTER:
+ LOCK_MUTEX(db_rep->mutex);
+ db_rep->master_eid = DB_EID_INVALID;
+ ret = __repmgr_init_election(dbenv, ELECT_REPSTART);
+ UNLOCK_MUTEX(db_rep->mutex);
+ if (ret != 0)
+ return (ret);
+ break;
+
+ case DB_REP_ISPERM:
+ /*
+ * Don't bother sending ack if master doesn't care about it.
+ */
+ rep = db_rep->region;
+ if (db_rep->perm_policy == DB_REPMGR_ACKS_NONE ||
+ (IS_PEER_POLICY(db_rep->perm_policy) &&
+ rep->priority == 0))
+ break;
+
+ if ((ret = ack_message(dbenv, generation, &permlsn)) != 0)
+ return (ret);
+
+ break;
+
+ case DB_REP_NOTPERM: /* FALLTHROUGH */
+ case DB_REP_IGNORE: /* FALLTHROUGH */
+ case DB_LOCK_DEADLOCK: /* FALLTHROUGH */
+ case 0:
+ break;
+ default:
+ __db_err(dbenv, ret, "DB_ENV->rep_process_message");
+ return (ret);
+ }
+ return (0);
+}
+
+/*
+ * Acknowledges a message.
+ */
+static int
+ack_message(dbenv, generation, lsn)
+ DB_ENV *dbenv;
+ u_int32_t generation;
+ DB_LSN *lsn;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ REPMGR_CONNECTION *conn;
+ DB_REPMGR_ACK ack;
+ DBT control2, rec2;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ /*
+ * Regardless of where a message came from, all ack's go to the master
+ * site. If we're not in touch with the master, we drop it, since
+ * there's not much else we can do.
+ */
+ if (!IS_VALID_EID(db_rep->master_eid) ||
+ db_rep->master_eid == SELF_EID) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "dropping ack with master %d", db_rep->master_eid));
+ return (0);
+ }
+
+ ret = 0;
+ LOCK_MUTEX(db_rep->mutex);
+ site = SITE_FROM_EID(db_rep->master_eid);
+ if (site->state == SITE_CONNECTED &&
+ !F_ISSET(site->ref.conn, CONN_CONNECTING)) {
+
+ ack.generation = generation;
+ memcpy(&ack.lsn, lsn, sizeof(DB_LSN));
+ control2.data = &ack;
+ control2.size = sizeof(ack);
+ rec2.size = 0;
+
+ conn = site->ref.conn;
+ if ((ret = __repmgr_send_one(dbenv, conn, REPMGR_ACK,
+ &control2, &rec2)) == DB_REP_UNAVAIL)
+ ret = __repmgr_bust_connection(dbenv, conn, FALSE);
+ }
+
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
+
+/*
+ * Does everything necessary to handle the processing of a NEWSITE return.
+ */
+static int
+handle_newsite(dbenv, rec)
+ DB_ENV *dbenv;
+ const DBT *rec;
+{
+ ADDRINFO *ai;
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ repmgr_netaddr_t *addr;
+ size_t hlen;
+ u_int16_t port;
+ int ret;
+ char *host;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+ SITE_STRING_BUFFER buffer;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ /*
+ * Check if we got sent connect information and if we did, if
+ * this is me or if we already have a connection to this new
+ * site. If we don't, establish a new one.
+ *
+ * Unmarshall the cdata: a 2-byte port number, in network byte order,
+ * followed by the host name string, which should already be
+ * null-terminated, but let's make sure.
+ */
+ if (rec->size < sizeof(port) + 1) {
+ __db_errx(dbenv, "unexpected cdata size, msg ignored");
+ return (0);
+ }
+ memcpy(&port, rec->data, sizeof(port));
+ port = ntohs(port);
+
+ host = (char*)((u_int8_t*)rec->data + sizeof(port));
+ hlen = (rec->size - sizeof(port)) - 1;
+ host[hlen] = '\0';
+
+ /* It's me, do nothing. */
+ if (strcmp(host, db_rep->my_addr.host) == 0 &&
+ port == db_rep->my_addr.port) {
+ RPRINT(dbenv, (dbenv, &mb, "repmgr ignores own NEWSITE info"));
+ return (0);
+ }
+
+ LOCK_MUTEX(db_rep->mutex);
+ if ((ret = __repmgr_add_site(dbenv, host, port, &site)) == EEXIST) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "NEWSITE info from %s was already known",
+ __repmgr_format_site_loc(site, buffer)));
+ /*
+ * TODO: test this. Is this really how it works? When
+ * a site comes back on-line, do we really get NEWSITE?
+ * Or is that return code reserved for only the first
+ * time a site joins a group?
+ */
+
+ /*
+ * TODO: it seems like it might be a good idea to move
+ * this site's retry up to the beginning of the queue,
+ * and try it now, on the theory that if it's
+ * generating a NEWSITE, it might have woken up. Does
+ * that pose a problem for my assumption of time-ordered
+ * retry list? I guess not, if we can reorder items.
+ */
+
+ /*
+ * In case we already know about this site only because it
+ * first connected to us, we may not yet have had a chance to
+ * look up its addresses. Even though we don't need them just
+ * now, this is an advantageous opportunity to get them since we
+ * can do so away from the critical select thread.
+ */
+ addr = &site->net_addr;
+ if (addr->address_list == NULL &&
+ __repmgr_getaddr(dbenv,
+ addr->host, addr->port, 0, &ai) == 0)
+ addr->address_list = ai;
+
+ ret = 0;
+ if (site->state == SITE_IDLE) {
+ /*
+ * TODO: yank the retry object up to the front
+ * of the queue, after marking it as due now
+ */
+ } else
+ goto unlock; /* Nothing to do. */
+ } else {
+ RPRINT(dbenv, (dbenv, &mb, "NEWSITE info added %s",
+ __repmgr_format_site_loc(site, buffer)));
+ if (ret != 0)
+ goto unlock;
+ }
+
+ /*
+ * Wake up the main thread to connect to the new or reawakened
+ * site.
+ */
+ ret = __repmgr_wake_main_thread(dbenv);
+
+unlock: UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_stash_generation __P((DB_ENV *));
+ */
+int
+__repmgr_stash_generation(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP_STAT *statp;
+ int ret;
+
+ if ((ret = __rep_stat_pp(dbenv, &statp, 0)) != 0)
+ return (ret);
+ dbenv->rep_handle->generation = statp->st_gen;
+
+ __os_ufree(dbenv, statp);
+ return (0);
+}
diff --git a/db/repmgr/repmgr_net.c b/db/repmgr/repmgr_net.c
new file mode 100644
index 000000000..15402e490
--- /dev/null
+++ b/db/repmgr/repmgr_net.c
@@ -0,0 +1,1041 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_net.c,v 1.39 2006/09/19 14:14:11 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+/*
+ * The functions in this module implement a simple wire protocol for
+ * transmitting messages, both replication messages and our own internal control
+ * messages. The protocol is as follows:
+ *
+ * 1 byte - message type (defined in repmgr_int.h)
+ * 4 bytes - size of control
+ * 4 bytes - size of rec
+ * ? bytes - control
+ * ? bytes - rec
+ *
+ * where both sizes are 32-bit binary integers in network byte order.
+ * Either control or rec can have zero length, but even in this case the
+ * 4-byte length will be present.
+ * Putting both lengths right up at the front allows us to read in fewer
+ * phases, and allows us to allocate buffer space for both parts (plus a wrapper
+ * struct) at once.
+ */
+
+/*
+ * In sending a message, we first try to send it in-line, in the sending thread,
+ * and without first copying the message, by using scatter/gather I/O, using
+ * iovecs to point to the various pieces of the message. If that all works
+ * without blocking, that's optimal.
+ * If we find that, for a particular connection, we can't send without
+ * blocking, then we must copy the message for sending later in the select()
+ * thread. In the course of doing that, we might as well "flatten" the message,
+ * forming one single buffer, to simplify life. Not only that, once we've gone
+ * to the trouble of doing that, other sites to which we also want to send the
+ * message (in the case of a broadcast), may as well take advantage of the
+ * simplified structure also.
+ * This structure holds it all. Note that this structure, and the
+ * "flat_msg" structure, are allocated separately, because (1) the flat_msg
+ * version is usually not needed; and (2) when it is needed, it will need to
+ * live longer than the wrapping sending_msg structure.
+ * Note that, for the broadcast case, where we're going to use this
+ * repeatedly, the iovecs is a template that must be copied, since in normal use
+ * the iovecs pointers and lengths get adjusted after every partial write.
+ *
+ * TODO: this is such an important point that it's probably worth renaming the
+ * iovecs field here to iovecs_template.
+ */
+struct sending_msg {
+ REPMGR_IOVECS iovecs;
+ u_int8_t type;
+ u_int32_t control_size_buf, rec_size_buf;
+ REPMGR_FLAT *fmsg;
+};
+
+static int __repmgr_send_broadcast
+ __P((DB_ENV *, const DBT *, const DBT *, u_int *, u_int *));
+static void setup_sending_msg
+ __P((struct sending_msg *, u_int, const DBT *, const DBT *));
+static int __repmgr_send_internal
+ __P((DB_ENV *, REPMGR_CONNECTION *, struct sending_msg *));
+static int enqueue_msg
+ __P((DB_ENV *, REPMGR_CONNECTION *, struct sending_msg *, size_t));
+static int flatten __P((DB_ENV *, struct sending_msg *));
+static REPMGR_SITE *__repmgr_available_site __P((DB_ENV *, int));
+
+/*
+ * __repmgr_send --
+ * The send function for DB_ENV->rep_set_transport.
+ *
+ * PUBLIC: int __repmgr_send __P((DB_ENV *, const DBT *, const DBT *,
+ * PUBLIC: const DB_LSN *, int, u_int32_t));
+ */
+int
+__repmgr_send(dbenv, control, rec, lsnp, eid, flags)
+ DB_ENV *dbenv;
+ const DBT *control, *rec;
+ const DB_LSN *lsnp;
+ int eid;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ u_int nsites, npeers, available, needed;
+ int ret, t_ret;
+ REPMGR_SITE *site;
+ REPMGR_CONNECTION *conn;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+
+ LOCK_MUTEX(db_rep->mutex);
+ if (eid == DB_EID_BROADCAST) {
+ if ((ret = __repmgr_send_broadcast(dbenv, control, rec,
+ &nsites, &npeers)) != 0)
+ goto out;
+ } else {
+ /*
+ * If this is a request that can be sent anywhere, then see if
+ * we can send it to our peer (to save load on the master), but
+ * not if it's a rerequest, 'cuz that likely means we tried this
+ * already and failed.
+ */
+ if ((flags & (DB_REP_ANYWHERE | DB_REP_REREQUEST)) ==
+ DB_REP_ANYWHERE &&
+ IS_VALID_EID(db_rep->peer) &&
+ (site = __repmgr_available_site(dbenv, db_rep->peer)) !=
+ NULL) {
+ RPRINT(dbenv, (dbenv, &mb, "sending request to peer"));
+ } else if ((site = __repmgr_available_site(dbenv, eid)) ==
+ NULL) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "ignoring message sent to unavailable site"));
+ ret = DB_REP_UNAVAIL;
+ goto out;
+ }
+
+ conn = site->ref.conn;
+ if ((ret = __repmgr_send_one(dbenv, conn, REPMGR_REP_MESSAGE,
+ control, rec)) == DB_REP_UNAVAIL &&
+ (t_ret = __repmgr_bust_connection(dbenv, conn, FALSE)) != 0)
+ ret = t_ret;
+ if (ret != 0)
+ goto out;
+
+ nsites = 1;
+ npeers = site->priority > 0 ? 1 : 0;
+ }
+ /*
+ * Right now, nsites and npeers represent the (maximum) number of sites
+ * we've attempted to begin sending the message to. Of course we
+ * haven't really received any ack's yet. But since we've only sent to
+ * nsites/npeers other sites, that's the maximum number of ack's we
+ * could possibly expect. If even that number fails to satisfy our PERM
+ * policy, there's no point waiting for something that will never
+ * happen.
+ */
+ if (LF_ISSET(DB_REP_PERMANENT)) {
+ switch (db_rep->perm_policy) {
+ case DB_REPMGR_ACKS_NONE:
+ goto out;
+
+ case DB_REPMGR_ACKS_ONE:
+ needed = 1;
+ available = nsites;
+ break;
+
+ case DB_REPMGR_ACKS_ALL:
+ /* Number of sites in the group besides myself. */
+ needed = __repmgr_get_nsites(db_rep) - 1;
+ available = nsites;
+ break;
+
+ case DB_REPMGR_ACKS_ONE_PEER:
+ needed = 1;
+ available = npeers;
+ break;
+
+ case DB_REPMGR_ACKS_ALL_PEERS:
+ /*
+ * Too hard to figure out "needed", since we're not
+ * keeping track of how many peers we have; so just skip
+ * the optimization in this case.
+ */
+ needed = 1;
+ available = npeers;
+ break;
+
+ case DB_REPMGR_ACKS_QUORUM:
+ /*
+ * The minimum number of acks necessary to ensure that
+ * the transaction is durable if an election is held.
+ */
+ needed = (__repmgr_get_nsites(db_rep) - 1) / 2;
+ available = npeers;
+ break;
+
+ default:
+ COMPQUIET(available, 0);
+ COMPQUIET(needed, 0);
+ (void)__db_unknown_path(dbenv, "__repmgr_send");
+ break;
+ }
+ if (available < needed) {
+ ret = DB_REP_UNAVAIL;
+ goto out;
+ }
+ /* In ALL_PEERS case, display of "needed" might be confusing. */
+ RPRINT(dbenv, (dbenv, &mb,
+ "will await acknowledgement: need %u", needed));
+ ret = __repmgr_await_ack(dbenv, lsnp);
+ }
+
+out: UNLOCK_MUTEX(db_rep->mutex);
+
+ return (ret);
+}
+
+static REPMGR_SITE *
+__repmgr_available_site(dbenv, eid)
+ DB_ENV *dbenv;
+ int eid;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+
+ db_rep = dbenv->rep_handle;
+ site = SITE_FROM_EID(eid);
+ if (site->state != SITE_CONNECTED)
+ return (NULL);
+
+ if (F_ISSET(site->ref.conn, CONN_CONNECTING))
+ return (NULL);
+ return (site);
+}
+
+/*
+ * Sends message to all sites with which we currently have an active
+ * connection. Sets result parameters according to how many sites we attempted
+ * to begin sending to, even if we did nothing more than queue it for later
+ * delivery.
+ *
+ * !!!
+ * Caller must hold dbenv->mutex.
+ */
+static int
+__repmgr_send_broadcast(dbenv, control, rec, nsitesp, npeersp)
+ DB_ENV *dbenv;
+ const DBT *control, *rec;
+ u_int *nsitesp, *npeersp;
+{
+ DB_REP *db_rep;
+ struct sending_msg msg;
+ REPMGR_CONNECTION *conn;
+ REPMGR_SITE *site;
+ u_int nsites, npeers;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+
+ setup_sending_msg(&msg, REPMGR_REP_MESSAGE, control, rec);
+ nsites = npeers = 0;
+
+ /*
+ * Traverse the connections list. Here, even in bust_connection, we
+ * don't unlink the current list entry, so we can use the TAILQ_FOREACH
+ * macro.
+ */
+ TAILQ_FOREACH(conn, &db_rep->connections, entries) {
+ if (F_ISSET(conn, CONN_CONNECTING | CONN_DEFUNCT) ||
+ !IS_VALID_EID(conn->eid))
+ continue;
+
+ if ((ret = __repmgr_send_internal(dbenv, conn, &msg)) == 0) {
+ site = SITE_FROM_EID(conn->eid);
+ nsites++;
+ if (site->priority > 0)
+ npeers++;
+ } else if (ret == DB_REP_UNAVAIL) {
+ if ((ret = __repmgr_bust_connection(
+ dbenv, conn, FALSE)) != 0)
+ return (ret);
+ } else
+ return (ret);
+ }
+
+ *nsitesp = nsites;
+ *npeersp = npeers;
+ return (0);
+}
+
+/*
+ * __repmgr_send_one --
+ * Send a message to a site, or if you can't just yet, make a copy of it
+ * and arrange to have it sent later. 'rec' may be NULL, in which case we send
+ * a zero length and no data.
+ *
+ * If we get an error, we take care of cleaning up the connection (calling
+ * __repmgr_bust_connection()), so that the caller needn't do so.
+ *
+ * !!!
+ * Note that the mutex should be held through this call.
+ * It doubles as a synchronizer to make sure that two threads don't
+ * intersperse writes that are part of two single messages.
+ *
+ * PUBLIC: int __repmgr_send_one __P((DB_ENV *, REPMGR_CONNECTION *,
+ * PUBLIC: u_int, const DBT *, const DBT *));
+ */
+int
+__repmgr_send_one(dbenv, conn, msg_type, control, rec)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+ u_int msg_type;
+ const DBT *control, *rec;
+{
+ struct sending_msg msg;
+
+ setup_sending_msg(&msg, msg_type, control, rec);
+ return (__repmgr_send_internal(dbenv, conn, &msg));
+}
+
+/*
+ * Attempts a "best effort" to send a message on the given site. If there is an
+ * excessive backlog of message already queued on the connection, we simply drop
+ * this message, and still return 0 even in this case.
+ */
+static int
+__repmgr_send_internal(dbenv, conn, msg)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+ struct sending_msg *msg;
+{
+#define OUT_QUEUE_LIMIT 10 /* arbitrary, for now */
+ REPMGR_IOVECS iovecs;
+ int ret;
+ size_t nw;
+ size_t total_written;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+ SITE_STRING_BUFFER buffer;
+#endif
+
+ DB_ASSERT(dbenv, !F_ISSET(conn, CONN_CONNECTING));
+ if (!STAILQ_EMPTY(&conn->outbound_queue)) {
+ /*
+ * Output to this site is currently owned by the select()
+ * thread, so we can't try sending in-line here. We can only
+ * queue the msg for later.
+ */
+ RPRINT(dbenv, (dbenv, &mb, "msg to %s to be queued",
+ __repmgr_format_eid_loc(dbenv->rep_handle,
+ conn->eid, buffer)));
+ if (conn->out_queue_length < OUT_QUEUE_LIMIT)
+ return (enqueue_msg(dbenv, conn, msg, 0));
+ else {
+ RPRINT(dbenv, (dbenv, &mb, "queue limit exceeded"));
+/* repmgr->stats.tossed_msgs++; */
+ return (0);
+ }
+ }
+
+ /*
+ * Send as much data to the site as we can, without blocking. Keep
+ * writing as long as we're making some progress. Make a scratch copy
+ * of iovecs for our use, since we destroy it in the process of
+ * adjusting pointers after each partial I/O.
+ */
+ memcpy(&iovecs, &msg->iovecs, sizeof(iovecs));
+ total_written = 0;
+ while ((ret = __repmgr_writev(conn->fd, &iovecs.vectors[iovecs.offset],
+ iovecs.count-iovecs.offset, &nw)) == 0) {
+ total_written += nw;
+ if (__repmgr_update_consumed(&iovecs, nw)) /* all written */
+ return (0);
+ }
+
+ if (ret != WOULDBLOCK) {
+ __db_err(dbenv, ret, "socket writing failure");
+ return (DB_REP_UNAVAIL);
+ }
+
+ RPRINT(dbenv, (dbenv, &mb, "wrote only %lu bytes to %s",
+ (u_long)total_written,
+ __repmgr_format_eid_loc(dbenv->rep_handle, conn->eid, buffer)));
+ /*
+ * We can't send any more without blocking: queue (a pointer to) a
+ * "flattened" copy of the message, so that the select() thread will
+ * finish sending it later.
+ */
+ if ((ret = enqueue_msg(dbenv, conn, msg, total_written)) != 0)
+ return (ret);
+
+/* repmgr->stats.partial_retransmissions++; */
+
+ /*
+ * Wake the main select thread so that it can discover that it has
+ * received ownership of this connection. Note that we didn't have to
+ * do this in the previous case (above), because the non-empty queue
+ * implies that the select() thread is already managing ownership of
+ * this connection.
+ */
+#ifdef DB_WIN32
+ if (WSAEventSelect(conn->fd, conn->event_object,
+ FD_READ|FD_WRITE|FD_CLOSE) == SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't add FD_WRITE event bit");
+ return (ret);
+ }
+#endif
+ return (__repmgr_wake_main_thread(dbenv));
+}
+
+/*
+ * PUBLIC: int __repmgr_is_permanent __P((DB_ENV *, const DB_LSN *));
+ *
+ * Count up how many sites have ack'ed the given LSN. Returns TRUE if enough
+ * sites have ack'ed; FALSE otherwise.
+ *
+ * !!!
+ * Caller must hold the mutex.
+ */
+int
+__repmgr_is_permanent(dbenv, lsnp)
+ DB_ENV *dbenv;
+ const DB_LSN *lsnp;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ u_int eid, nsites, npeers;
+ int is_perm, has_missing_peer;
+
+ db_rep = dbenv->rep_handle;
+
+ if (db_rep->perm_policy == DB_REPMGR_ACKS_NONE)
+ return (TRUE);
+
+ nsites = npeers = 0;
+ has_missing_peer = FALSE;
+ for (eid = 0; eid < db_rep->site_cnt; eid++) {
+ site = SITE_FROM_EID(eid);
+ if (site->priority == -1) {
+ /*
+ * Never connected to this site: since we can't know
+ * whether it's a peer, assume the worst.
+ */
+ has_missing_peer = TRUE;
+ continue;
+ }
+
+ if (log_compare(&site->max_ack, lsnp) >= 0) {
+ nsites++;
+ if (site->priority > 0)
+ npeers++;
+ } else {
+ /* This site hasn't ack'ed the message. */
+ if (site->priority > 0)
+ has_missing_peer = TRUE;
+ }
+ }
+
+ switch (db_rep->perm_policy) {
+ case DB_REPMGR_ACKS_ONE:
+ is_perm = (nsites >= 1);
+ break;
+ case DB_REPMGR_ACKS_ONE_PEER:
+ is_perm = (npeers >= 1);
+ break;
+ case DB_REPMGR_ACKS_QUORUM:
+ /*
+ * The minimum number of acks necessary to ensure that the
+ * transaction is durable if an election is held (given that we
+ * always conduct elections according to the standard,
+ * recommended practice of requiring votes from a majority of
+ * sites).
+ */
+ if (__repmgr_get_nsites(db_rep) == 2) {
+ /*
+ * A group of 2 sites is, as always, a special case.
+ * For a transaction to be durable the other site has to
+ * have received it.
+ */
+ is_perm = (npeers >= 1);
+ } else
+ is_perm = (npeers >= (__repmgr_get_nsites(db_rep)-1)/2);
+ break;
+ case DB_REPMGR_ACKS_ALL:
+ /* Adjust by 1, since get_nsites includes local site. */
+ is_perm = (nsites >= __repmgr_get_nsites(db_rep) - 1);
+ break;
+ case DB_REPMGR_ACKS_ALL_PEERS:
+ if (db_rep->site_cnt < __repmgr_get_nsites(db_rep) - 1) {
+ /* Assume missing site might be a peer. */
+ has_missing_peer = TRUE;
+ }
+ is_perm = !has_missing_peer;
+ break;
+ default:
+ is_perm = FALSE;
+ (void)__db_unknown_path(dbenv, "__repmgr_is_permanent");
+ }
+ return (is_perm);
+}
+
+/*
+ * Abandons a connection, to recover from an error. Upon entry the conn struct
+ * must be on the connections list.
+ *
+ * If the 'do_close' flag is true, we do the whole job; the clean-up includes
+ * removing the struct from the list and freeing all its memory, so upon return
+ * the caller must not refer to it any further. Otherwise, we merely mark the
+ * connection for clean-up later by the main thread.
+ *
+ * PUBLIC: int __repmgr_bust_connection __P((DB_ENV *,
+ * PUBLIC: REPMGR_CONNECTION *, int));
+ *
+ * !!!
+ * Caller holds mutex.
+ */
+int
+__repmgr_bust_connection(dbenv, conn, do_close)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+ int do_close;
+{
+ DB_REP *db_rep;
+ int ret, eid;
+
+ db_rep = dbenv->rep_handle;
+ ret = 0;
+
+ DB_ASSERT(dbenv, !TAILQ_EMPTY(&db_rep->connections));
+ eid = conn->eid;
+ if (do_close)
+ __repmgr_cleanup_connection(dbenv, conn);
+ else {
+ F_SET(conn, CONN_DEFUNCT);
+ conn->eid = -1;
+ }
+
+ /*
+ * When we first accepted the incoming connection, we set conn->eid to
+ * -1 to indicate that we didn't yet know what site it might be from.
+ * If we then get here because we later decide it was a redundant
+ * connection, the following scary stuff will correctly not happen.
+ */
+ if (IS_VALID_EID(eid)) {
+ /* schedule_connection_attempt wakes the main thread. */
+ if ((ret = __repmgr_schedule_connection_attempt(
+ dbenv, (u_int)eid, FALSE)) != 0)
+ return (ret);
+
+ if (eid == db_rep->master_eid) {
+ db_rep->master_eid = DB_EID_INVALID;
+
+ if ((ret = __repmgr_init_election(
+ dbenv, ELECT_FAILURE_ELECTION)) != 0)
+ return (ret);
+ }
+ } else if (!do_close) {
+ /*
+ * One way or another, make sure the main thread is poked, so
+ * that we do the deferred clean-up.
+ */
+ ret = __repmgr_wake_main_thread(dbenv);
+ }
+ return (ret);
+}
+
+/*
+ * PUBLIC: void __repmgr_cleanup_connection
+ * PUBLIC: __P((DB_ENV *, REPMGR_CONNECTION *));
+ */
+void
+__repmgr_cleanup_connection(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ DB_REP *db_rep;
+ QUEUED_OUTPUT *out;
+ REPMGR_FLAT *msg;
+ DBT *dbt;
+
+ db_rep = dbenv->rep_handle;
+
+ TAILQ_REMOVE(&db_rep->connections, conn, entries);
+ (void)closesocket(conn->fd);
+#ifdef DB_WIN32
+ (void)WSACloseEvent(conn->event_object);
+#endif
+
+ /*
+ * Deallocate any input and output buffers we may have.
+ */
+ if (conn->reading_phase == DATA_PHASE) {
+ if (conn->msg_type == REPMGR_REP_MESSAGE)
+ __os_free(dbenv, conn->input.rep_message);
+ else {
+ dbt = &conn->input.repmgr_msg.cntrl;
+ __os_free(dbenv, dbt->data);
+ dbt = &conn->input.repmgr_msg.rec;
+ if (dbt->size > 0)
+ __os_free(dbenv, dbt->data);
+ }
+ }
+ while (!STAILQ_EMPTY(&conn->outbound_queue)) {
+ out = STAILQ_FIRST(&conn->outbound_queue);
+ STAILQ_REMOVE_HEAD(&conn->outbound_queue, entries);
+ msg = out->msg;
+ if (--msg->ref_count <= 0)
+ __os_free(dbenv, msg);
+ __os_free(dbenv, out);
+ }
+
+ __os_free(dbenv, conn);
+}
+
+static int
+enqueue_msg(dbenv, conn, msg, offset)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+ struct sending_msg *msg;
+ size_t offset;
+{
+ QUEUED_OUTPUT *q_element;
+ int ret;
+
+ if (msg->fmsg == NULL && ((ret = flatten(dbenv, msg)) != 0))
+ return (ret);
+ if ((ret = __os_malloc(dbenv, sizeof(QUEUED_OUTPUT), &q_element)) != 0)
+ return (ret);
+ q_element->msg = msg->fmsg;
+ msg->fmsg->ref_count++; /* encapsulation would be sweeter */
+ q_element->offset = offset;
+
+ /* Put it on the connection's outbound queue. */
+ STAILQ_INSERT_TAIL(&conn->outbound_queue, q_element, entries);
+ conn->out_queue_length++;
+ return (0);
+}
+
+/*
+ * The 'rec' DBT can be NULL, in which case we treat it like a zero-length DBT.
+ * But 'control' is always present.
+ */
+static void
+setup_sending_msg(msg, type, control, rec)
+ struct sending_msg *msg;
+ u_int type;
+ const DBT *control, *rec;
+{
+ u_int32_t rec_size;
+
+ /*
+ * The wire protocol is documented in a comment at the top of this
+ * module.
+ */
+ __repmgr_iovec_init(&msg->iovecs);
+ msg->type = type;
+ __repmgr_add_buffer(&msg->iovecs, &msg->type, sizeof(msg->type));
+
+ msg->control_size_buf = htonl(control->size);
+ __repmgr_add_buffer(&msg->iovecs,
+ &msg->control_size_buf, sizeof(msg->control_size_buf));
+
+ rec_size = rec == NULL ? 0 : rec->size;
+ msg->rec_size_buf = htonl(rec_size);
+ __repmgr_add_buffer(
+ &msg->iovecs, &msg->rec_size_buf, sizeof(msg->rec_size_buf));
+
+ if (control->size > 0)
+ __repmgr_add_dbt(&msg->iovecs, control);
+
+ if (rec_size > 0)
+ __repmgr_add_dbt(&msg->iovecs, rec);
+
+ msg->fmsg = NULL;
+}
+
+/*
+ * Convert a message stored as iovec pointers to various pieces, into flattened
+ * form, by copying all the pieces, and then make the iovec just point to the
+ * new simplified form.
+ */
+static int
+flatten(dbenv, msg)
+ DB_ENV *dbenv;
+ struct sending_msg *msg;
+{
+ u_int8_t *p;
+ size_t msg_size;
+ int i, ret;
+
+ DB_ASSERT(dbenv, msg->fmsg == NULL);
+
+ msg_size = msg->iovecs.total_bytes;
+ if ((ret = __os_malloc(dbenv, sizeof(*msg->fmsg) + msg_size,
+ &msg->fmsg)) != 0)
+ return (ret);
+ msg->fmsg->length = msg_size;
+ msg->fmsg->ref_count = 0;
+ p = &msg->fmsg->data[0];
+
+ for (i = 0; i < msg->iovecs.count; i++) {
+ memcpy(p, msg->iovecs.vectors[i].iov_base,
+ msg->iovecs.vectors[i].iov_len);
+ p = &p[msg->iovecs.vectors[i].iov_len];
+ }
+ __repmgr_iovec_init(&msg->iovecs);
+ __repmgr_add_buffer(&msg->iovecs, &msg->fmsg->data[0], msg_size);
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_find_site __P((DB_ENV *, const char *, u_int));
+ */
+int
+__repmgr_find_site(dbenv, host, port)
+ DB_ENV *dbenv;
+ const char *host;
+ u_int port;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ u_int i;
+
+ db_rep = dbenv->rep_handle;
+ for (i = 0; i < db_rep->site_cnt; i++) {
+ site = &db_rep->sites[i];
+
+ if (strcmp(site->net_addr.host, host) == 0 &&
+ site->net_addr.port == port)
+ return ((int)i);
+ }
+
+ return (-1);
+}
+
+/*
+ * Stash a copy of the given host name and port number into a convenient data
+ * structure so that we can save it permanently. This is kind of like a
+ * constructor for a netaddr object, except that the caller supplies the memory
+ * for the base struct (though not the subordinate attachments).
+ *
+ * All inputs are assumed to have been already validated.
+ *
+ * PUBLIC: int __repmgr_pack_netaddr __P((DB_ENV *, const char *,
+ * PUBLIC: u_int, ADDRINFO *, repmgr_netaddr_t *));
+ */
+int
+__repmgr_pack_netaddr(dbenv, host, port, list, addr)
+ DB_ENV *dbenv;
+ const char *host;
+ u_int port;
+ ADDRINFO *list;
+ repmgr_netaddr_t *addr;
+{
+ int ret;
+
+ DB_ASSERT(dbenv, host != NULL);
+
+ if ((ret = __os_strdup(dbenv, host, &addr->host)) != 0)
+ return (ret);
+ addr->port = (u_int16_t)port;
+ addr->address_list = list;
+ addr->current = NULL;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_getaddr __P((DB_ENV *,
+ * PUBLIC: const char *, u_int, int, ADDRINFO **));
+ */
+int
+__repmgr_getaddr(dbenv, host, port, flags, result)
+ DB_ENV *dbenv;
+ const char *host;
+ u_int port;
+ int flags; /* Matches struct addrinfo declaration. */
+ ADDRINFO **result;
+{
+ ADDRINFO *answer, hints;
+ int ret;
+ char buffer[10]; /* 2**16 fits in 5 digits. */
+
+ /*
+ * Ports are really 16-bit unsigned values, but it's too painful to
+ * push that type through the API.
+ */
+ if (port > UINT16_MAX) {
+ __db_errx(dbenv, "port %u larger than max port %u",
+ port, UINT16_MAX);
+ return (EINVAL);
+ }
+
+#ifdef DB_WIN32
+ if (!dbenv->rep_handle->wsa_inited &&
+ (ret = __repmgr_wsa_init(dbenv)) != 0)
+ return (ret);
+#endif
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = flags;
+ (void)snprintf(buffer, sizeof(buffer), "%u", port);
+ if ((ret =
+ __db_getaddrinfo(dbenv, host, port, buffer, &hints, &answer)) != 0)
+ return (ret);
+ *result = answer;
+
+ return (0);
+}
+
+/*
+ * Adds a new site to our array of known sites (unless it already exists),
+ * and schedules it for immediate connection attempt. Whether it exists or not,
+ * we set newsitep, either to the already existing site, or to the newly created
+ * site. Unless newsitep is passed in as NULL, which is allowed.
+ *
+ * PUBLIC: int __repmgr_add_site
+ * PUBLIC: __P((DB_ENV *, const char *, u_int, REPMGR_SITE **));
+ *
+ * !!!
+ * Caller is expected to hold the mutex.
+ */
+int
+__repmgr_add_site(dbenv, host, port, newsitep)
+ DB_ENV *dbenv;
+ const char *host;
+ u_int port;
+ REPMGR_SITE **newsitep;
+{
+ DB_REP *db_rep;
+ ADDRINFO *address_list;
+ repmgr_netaddr_t addr;
+ REPMGR_SITE *site;
+ int ret, eid;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+
+ if (IS_VALID_EID(eid = __repmgr_find_site(dbenv, host, port))) {
+ site = SITE_FROM_EID(eid);
+ ret = EEXIST;
+ goto out;
+ }
+
+ if ((ret = __repmgr_getaddr(dbenv, host, port, 0, &address_list)) != 0)
+ return (ret);
+
+ if ((ret = __repmgr_pack_netaddr(
+ dbenv, host, port, address_list, &addr)) != 0) {
+ __db_freeaddrinfo(dbenv, address_list);
+ return (ret);
+ }
+
+ if ((ret = __repmgr_new_site(dbenv, &site, &addr, SITE_IDLE)) != 0) {
+ __repmgr_cleanup_netaddr(dbenv, &addr);
+ return (ret);
+ }
+
+ if (db_rep->selector != NULL &&
+ (ret = __repmgr_schedule_connection_attempt(
+ dbenv, (u_int)EID_FROM_SITE(site), TRUE)) != 0)
+ return (ret);
+
+ /* Note that we should only come here for success and EEXIST. */
+out:
+ if (newsitep != NULL)
+ *newsitep = site;
+ return (ret);
+}
+
+/*
+ * Initializes net-related memory in the db_rep handle.
+ *
+ * PUBLIC: int __repmgr_net_create __P((DB_ENV *, DB_REP *));
+ */
+int
+__repmgr_net_create(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ COMPQUIET(dbenv, NULL);
+
+ db_rep->listen_fd = INVALID_SOCKET;
+ db_rep->master_eid = DB_EID_INVALID;
+
+ TAILQ_INIT(&db_rep->connections);
+ TAILQ_INIT(&db_rep->retries);
+
+ return (0);
+}
+
+/*
+ * listen_socket_init --
+ * Initialize a socket for listening. Sets
+ * a file descriptor for the socket, ready for an accept() call
+ * in a thread that we're happy to let block.
+ *
+ * PUBLIC: int __repmgr_listen __P((DB_ENV *));
+ */
+int
+__repmgr_listen(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ ADDRINFO *ai;
+ char *why;
+ int sockopt, ret;
+ socket_t s;
+
+ db_rep = dbenv->rep_handle;
+
+ /* Use OOB value as sentinel to show no socket open. */
+ s = INVALID_SOCKET;
+ ai = ADDR_LIST_FIRST(&db_rep->my_addr);
+
+ /*
+ * Given the assert is correct, we execute the loop at least once, which
+ * means 'why' will have been set by the time it's needed. But I guess
+ * lint doesn't know about DB_ASSERT.
+ */
+ COMPQUIET(why, "");
+ DB_ASSERT(dbenv, ai != NULL);
+ for (; ai != NULL; ai = ADDR_LIST_NEXT(&db_rep->my_addr)) {
+
+ if ((s = socket(ai->ai_family,
+ ai->ai_socktype, ai->ai_protocol)) == INVALID_SOCKET) {
+ why = "can't create listen socket";
+ continue;
+ }
+
+ /*
+ * When 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;
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (sockopt_t)&sockopt,
+ sizeof(sockopt)) != 0) {
+ why = "can't set REUSEADDR socket option";
+ break;
+ }
+
+ if (bind(s, ai->ai_addr, (socklen_t)ai->ai_addrlen) != 0) {
+ why = "can't bind socket to listening address";
+ (void)closesocket(s);
+ s = INVALID_SOCKET;
+ continue;
+ }
+
+ if (listen(s, 5) != 0) {
+ why = "listen()";
+ break;
+ }
+
+ if ((ret = __repmgr_set_nonblocking(s)) != 0) {
+ __db_err(dbenv, ret, "can't unblock listen socket");
+ goto clean;
+ }
+
+ db_rep->listen_fd = s;
+ return (0);
+ }
+
+ ret = net_errno;
+ __db_err(dbenv, ret, why);
+clean: if (s != INVALID_SOCKET)
+ (void)closesocket(s);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_net_close __P((DB_ENV *));
+ */
+int
+__repmgr_net_close(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+#ifndef DB_WIN32
+ struct sigaction sigact;
+#endif
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ if (db_rep->listen_fd == INVALID_SOCKET)
+ return (0);
+
+ ret = 0;
+
+ if (closesocket(db_rep->listen_fd) == SOCKET_ERROR)
+ ret = net_errno;
+
+#ifdef DB_WIN32
+ /* Shut down the Windows sockets DLL. */
+ if (WSACleanup() == SOCKET_ERROR && ret == 0)
+ ret = net_errno;
+ db_rep->wsa_inited = FALSE;
+#else
+ /* Restore original SIGPIPE handling configuration. */
+ if (db_rep->chg_sig_handler) {
+ memset(&sigact, 0, sizeof(sigact));
+ sigact.sa_handler = SIG_DFL;
+ if (sigaction(SIGPIPE, &sigact, NULL) == -1 && ret == 0)
+ ret = errno;
+ }
+#endif
+ db_rep->listen_fd = INVALID_SOCKET;
+ return (ret);
+}
+
+/*
+ * PUBLIC: void __repmgr_net_destroy __P((DB_ENV *, DB_REP *));
+ */
+void
+__repmgr_net_destroy(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ REPMGR_CONNECTION *conn;
+ REPMGR_RETRY *retry;
+ REPMGR_SITE *site;
+ u_int i;
+
+ if (db_rep->sites == NULL)
+ return;
+
+ /*
+ * TODO: I think maybe these, and especially connections, should be
+ * cleaned up in close(), 'cuz there's more than just memory there.
+ * Does it matter, I wonder?
+ */
+ while (!TAILQ_EMPTY(&db_rep->retries)) {
+ retry = TAILQ_FIRST(&db_rep->retries);
+ TAILQ_REMOVE(&db_rep->retries, retry, entries);
+ __os_free(dbenv, retry);
+ }
+
+ while (!TAILQ_EMPTY(&db_rep->connections)) {
+ conn = TAILQ_FIRST(&db_rep->connections);
+ __repmgr_cleanup_connection(dbenv, conn);
+ }
+
+ for (i = 0; i < db_rep->site_cnt; i++) {
+ site = &db_rep->sites[i];
+ __repmgr_cleanup_netaddr(dbenv, &site->net_addr);
+ }
+ __os_free(dbenv, db_rep->sites);
+ db_rep->sites = NULL;
+}
diff --git a/db/repmgr/repmgr_posix.c b/db/repmgr/repmgr_posix.c
new file mode 100644
index 000000000..1a04fef25
--- /dev/null
+++ b/db/repmgr/repmgr_posix.c
@@ -0,0 +1,714 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_posix.c,v 1.22 2006/09/11 15:15:20 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#define __INCLUDE_SELECT_H 1
+#include "db_int.h"
+
+/*
+ * A very rough guess at the maximum stack space one of our threads could ever
+ * need, which we hope is plenty conservative. This can be patched in the field
+ * if necessary.
+ */
+#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+size_t __repmgr_guesstimated_max = (128 * 1024);
+#endif
+
+static int finish_connecting __P((DB_ENV *, REPMGR_CONNECTION *));
+
+/*
+ * Starts the thread described in the argument, and stores the resulting thread
+ * ID therein.
+ *
+ * PUBLIC: int __repmgr_thread_start __P((DB_ENV *, REPMGR_RUNNABLE *));
+ */
+int
+__repmgr_thread_start(dbenv, runnable)
+ DB_ENV *dbenv;
+ REPMGR_RUNNABLE *runnable;
+{
+ pthread_attr_t *attrp;
+#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ pthread_attr_t attributes;
+ size_t size;
+ int ret;
+#endif
+
+ runnable->finished = FALSE;
+
+#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+ attrp = &attributes;
+ if ((ret = pthread_attr_init(&attributes)) != 0) {
+ __db_err(dbenv,
+ ret, "pthread_attr_init in repmgr_thread_start");
+ return (ret);
+ }
+
+ /*
+ * On a 64-bit machine it seems reasonable that we could need twice as
+ * much stack space as we did on a 32-bit machine.
+ */
+ size = __repmgr_guesstimated_max;
+ if (sizeof(size_t) > 4)
+ size *= 2;
+#ifdef PTHREAD_STACK_MIN
+ if (size < PTHREAD_STACK_MIN)
+ size = PTHREAD_STACK_MIN;
+#endif
+ if ((ret = pthread_attr_setstacksize(&attributes, size)) != 0) {
+ __db_err(dbenv,
+ ret, "pthread_attr_setstacksize in repmgr_thread_start");
+ return (ret);
+ }
+#else
+ attrp = NULL;
+#endif
+
+ return (pthread_create(&runnable->thread_id, attrp,
+ runnable->run, dbenv));
+}
+
+/*
+ * PUBLIC: int __repmgr_thread_join __P((REPMGR_RUNNABLE *));
+ */
+int
+__repmgr_thread_join(thread)
+ REPMGR_RUNNABLE *thread;
+{
+ return (pthread_join(thread->thread_id, NULL));
+}
+
+/*
+ * PUBLIC: int __repmgr_set_nonblocking __P((socket_t));
+ */
+int __repmgr_set_nonblocking(fd)
+ socket_t fd;
+{
+ int flags;
+
+ if ((flags = fcntl(fd, F_GETFL, 0)) < 0)
+ return (errno);
+ if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0)
+ return (errno);
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_wake_waiting_senders __P((DB_ENV *));
+ *
+ * Wake any send()-ing threads waiting for an acknowledgement.
+ *
+ * !!!
+ * Caller must hold the db_rep->mutex, if this thread synchronization is to work
+ * properly.
+ */
+int
+__repmgr_wake_waiting_senders(dbenv)
+ DB_ENV *dbenv;
+{
+ return (pthread_cond_broadcast(&dbenv->rep_handle->ack_condition));
+}
+
+/*
+ * PUBLIC: int __repmgr_await_ack __P((DB_ENV *, const DB_LSN *));
+ *
+ * Waits (a limited time) for configured number of remote sites to ack the given
+ * LSN.
+ *
+ * !!!
+ * Caller must hold repmgr->mutex (TODO: although that seems a shame, with all
+ * that deadline calculation).
+ */
+int
+__repmgr_await_ack(dbenv, lsnp)
+ DB_ENV *dbenv;
+ const DB_LSN *lsnp;
+{
+ DB_REP *db_rep;
+ struct timespec deadline;
+ int ret, timed;
+
+ db_rep = dbenv->rep_handle;
+
+ if ((timed = (db_rep->ack_timeout > 0)))
+ __repmgr_compute_wait_deadline(dbenv, &deadline,
+ db_rep->ack_timeout);
+ else
+ COMPQUIET(deadline.tv_sec, 0);
+
+ while (!__repmgr_is_permanent(dbenv, lsnp)) {
+ if (timed)
+ ret = pthread_cond_timedwait(&db_rep->ack_condition,
+ &db_rep->mutex, &deadline);
+ else
+ ret = pthread_cond_wait(&db_rep->ack_condition,
+ &db_rep->mutex);
+ if (db_rep->finished)
+ return (DB_REP_UNAVAIL);
+ if (ret != 0)
+ return (ret); /* TODO: but first check if we need (to
+ * create) a panic */
+ }
+ return (0);
+}
+
+/*
+ * Computes a deadline time a certain distance into the future, in a form
+ * suitable for the pthreads timed wait operation. Curiously, that call uses
+ * nano-second resolution; elsewhere we use microseconds.
+ *
+ * PUBLIC: void __repmgr_compute_wait_deadline __P((DB_ENV*,
+ * PUBLIC: struct timespec *, db_timeout_t));
+ */
+void
+__repmgr_compute_wait_deadline(dbenv, result, wait)
+ DB_ENV *dbenv;
+ struct timespec *result;
+ db_timeout_t wait;
+{
+ u_int32_t secs, usecs;
+
+ /*
+ * Start with "now"; then add the "wait" offset.
+ */
+ __os_clock(dbenv, &secs, &usecs);
+
+ if (wait > 1000000) {
+ secs += wait / 1000000;
+ usecs += wait % 1000000;
+ } else
+ usecs += wait;
+
+ if (usecs > 1000000) {
+ secs++;
+ usecs -= 1000000;
+ }
+
+ result->tv_sec = (time_t)secs;
+ result->tv_nsec = (long)(usecs * 1000);
+}
+
+/*
+ * PUBLIC: int __repmgr_init_sync __P((DB_ENV *, DB_REP *));
+ *
+ * Allocate/initialize all data necessary for thread synchronization. This
+ * should be an all-or-nothing affair. Other than here and in _close_sync there
+ * should never be a time when these resources aren't either all allocated or
+ * all freed. If that's true, then we can safely use the values of the file
+ * descriptor(s) to keep track of which it is.
+ */
+int
+__repmgr_init_sync(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ int ret, mutex_inited, ack_inited, elect_inited, queue_inited,
+ file_desc[2];
+
+ COMPQUIET(dbenv, NULL);
+
+ mutex_inited = ack_inited = elect_inited = queue_inited = FALSE;
+
+ if ((ret = pthread_mutex_init(&db_rep->mutex, NULL)) != 0)
+ goto err;
+ mutex_inited = TRUE;
+
+ if ((ret = pthread_cond_init(&db_rep->ack_condition, NULL)) != 0)
+ goto err;
+ ack_inited = TRUE;
+
+ if ((ret = pthread_cond_init(&db_rep->check_election, NULL)) != 0)
+ goto err;
+ elect_inited = TRUE;
+
+ if ((ret = pthread_cond_init(&db_rep->queue_nonempty, NULL)) != 0)
+ goto err;
+ queue_inited = TRUE;
+
+ if ((ret = pipe(file_desc)) == -1) {
+ ret = errno;
+ goto err;
+ }
+
+ db_rep->read_pipe = file_desc[0];
+ db_rep->write_pipe = file_desc[1];
+ return (0);
+err:
+ if (queue_inited)
+ (void)pthread_cond_destroy(&db_rep->queue_nonempty);
+ if (elect_inited)
+ (void)pthread_cond_destroy(&db_rep->check_election);
+ if (ack_inited)
+ (void)pthread_cond_destroy(&db_rep->ack_condition);
+ if (mutex_inited)
+ (void)pthread_mutex_destroy(&db_rep->mutex);
+ db_rep->read_pipe = db_rep->write_pipe = -1;
+
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_close_sync __P((DB_ENV *));
+ *
+ * Frees the thread synchronization data within a repmgr struct, in a
+ * platform-specific way.
+ */
+int
+__repmgr_close_sync(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ int ret, t_ret;
+
+ db_rep = dbenv->rep_handle;
+
+ if (!(REPMGR_SYNC_INITED(db_rep)))
+ return (0);
+
+ ret = pthread_cond_destroy(&db_rep->queue_nonempty);
+
+ if ((t_ret = pthread_cond_destroy(&db_rep->check_election)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = pthread_cond_destroy(&db_rep->ack_condition)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = pthread_mutex_destroy(&db_rep->mutex)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+
+ if (close(db_rep->read_pipe) == -1 && ret == 0)
+ ret = errno;
+ if (close(db_rep->write_pipe) == -1 && ret == 0)
+ ret = errno;
+
+ db_rep->read_pipe = db_rep->write_pipe = -1;
+ return (ret);
+}
+
+/*
+ * Performs net-related resource initialization other than memory initialization
+ * and allocation. A valid db_rep->listen_fd acts as the "all-or-nothing"
+ * sentinel signifying that these resources are allocated.
+ *
+ * PUBLIC: int __repmgr_net_init __P((DB_ENV *, DB_REP *));
+ */
+int
+__repmgr_net_init(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ int ret;
+ struct sigaction sigact;
+
+ if ((ret = __repmgr_listen(dbenv)) != 0)
+ return (ret);
+
+ /*
+ * Make sure we're not ignoring SIGPIPE, 'cuz otherwise we'd be killed
+ * just for trying to write onto a socket that had been reset.
+ */
+ if (sigaction(SIGPIPE, NULL, &sigact) == -1) {
+ ret = errno;
+ __db_err(dbenv, ret, "can't access signal handler");
+ goto err;
+ }
+ /*
+ * If we need to change the sig handler, do so, and also set a flag so
+ * that we remember we did.
+ */
+ if ((db_rep->chg_sig_handler = (sigact.sa_handler == SIG_DFL))) {
+ sigact.sa_handler = SIG_IGN;
+ sigact.sa_flags = 0;
+ if (sigaction(SIGPIPE, &sigact, NULL) == -1) {
+ ret = errno;
+ __db_err(dbenv, ret, "can't access signal handler");
+ goto err;
+ }
+ }
+ return (0);
+
+err:
+ (void)closesocket(db_rep->listen_fd);
+ db_rep->listen_fd = INVALID_SOCKET;
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_lock_mutex __P((mgr_mutex_t *));
+ */
+int
+__repmgr_lock_mutex(mutex)
+ mgr_mutex_t *mutex;
+{
+ return (pthread_mutex_lock(mutex));
+}
+
+/*
+ * PUBLIC: int __repmgr_unlock_mutex __P((mgr_mutex_t *));
+ */
+int
+__repmgr_unlock_mutex(mutex)
+ mgr_mutex_t *mutex;
+{
+ return (pthread_mutex_unlock(mutex));
+}
+
+/*
+ * Signals a condition variable.
+ *
+ * !!!
+ * Caller must hold mutex.
+ *
+ * PUBLIC: int __repmgr_signal __P((cond_var_t *));
+ */
+int
+__repmgr_signal(v)
+ cond_var_t *v;
+{
+ return (pthread_cond_broadcast(v));
+}
+
+/*
+ * PUBLIC: int __repmgr_wake_main_thread __P((DB_ENV*));
+ */
+int
+__repmgr_wake_main_thread(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ u_int8_t any_value;
+
+ COMPQUIET(any_value, 0);
+ db_rep = dbenv->rep_handle;
+
+ /*
+ * It doesn't matter what byte value we write. Just the appearance of a
+ * byte in the stream is enough to wake up the select() thread reading
+ * the pipe.
+ */
+ if (write(db_rep->write_pipe, &any_value, 1) == -1)
+ return (errno);
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_writev __P((socket_t, db_iovec_t *, int, size_t *));
+ */
+int
+__repmgr_writev(fd, iovec, buf_count, byte_count_p)
+ socket_t fd;
+ db_iovec_t *iovec;
+ int buf_count;
+ size_t *byte_count_p;
+{
+ int nw;
+
+ if ((nw = writev(fd, iovec, buf_count)) == -1)
+ return (errno);
+ *byte_count_p = (size_t)nw;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_readv __P((socket_t, db_iovec_t *, int, size_t *));
+ */
+int
+__repmgr_readv(fd, iovec, buf_count, byte_count_p)
+ socket_t fd;
+ db_iovec_t *iovec;
+ int buf_count;
+ size_t *byte_count_p;
+{
+ ssize_t nw;
+
+ if ((nw = readv(fd, iovec, buf_count)) == -1)
+ return (errno);
+ *byte_count_p = (size_t)nw;
+ return (0);
+}
+
+/*
+ * Calculate the time duration from now til "when", in the form of a struct
+ * timeval (suitable for select()), clipping the result at 0 (i.e., avoid a
+ * negative result).
+ *
+ * PUBLIC: void __repmgr_timeval_diff_current
+ * PUBLIC: __P((DB_ENV *, repmgr_timeval_t *, select_timeout_t *));
+ */
+void
+__repmgr_timeval_diff_current(dbenv, when, result)
+ DB_ENV *dbenv;
+ repmgr_timeval_t *when;
+ select_timeout_t *result;
+{
+ repmgr_timeval_t now;
+
+ __os_clock(dbenv, &now.tv_sec, &now.tv_usec);
+ if (__repmgr_timeval_cmp(when, &now) <= 0)
+ result->tv_sec = result->tv_usec = 0;
+ else {
+ /*
+ * Do the arithmetic; first see if we need to "borrow".
+ */
+ if (when->tv_usec < now.tv_usec) {
+ when->tv_usec += 1000000;
+ when->tv_sec--;
+ }
+ result->tv_usec = (long)(when->tv_usec - now.tv_usec);
+ result->tv_sec = (time_t)(when->tv_sec - now.tv_sec);
+ }
+}
+
+/*
+ * PUBLIC: int __repmgr_select_loop __P((DB_ENV *));
+ */
+int
+__repmgr_select_loop(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REPMGR_CONNECTION *conn, *next;
+ REPMGR_RETRY *retry;
+ select_timeout_t timeout, *timeout_p;
+ fd_set reads, writes;
+ int ret, flow_control, maxfd, nready;
+ u_int8_t buf[10]; /* arbitrary size */
+
+ /* TODO: turn this on when the input queue gets too big. */
+ flow_control = FALSE;
+
+ db_rep = dbenv->rep_handle;
+ /*
+ * Almost this entire thread operates while holding the mutex. But note
+ * that it never blocks, except in the call to select() (which is the
+ * one place we relinquish the mutex).
+ */
+ LOCK_MUTEX(db_rep->mutex);
+ if ((ret = __repmgr_first_try_connections(dbenv)) != 0)
+ goto out;
+ for (;;) {
+ FD_ZERO(&reads);
+ FD_ZERO(&writes);
+
+ /*
+ * Always ask for input on listening socket and signalling
+ * pipe.
+ */
+ FD_SET((u_int)db_rep->listen_fd, &reads);
+ maxfd = db_rep->listen_fd;
+
+ FD_SET((u_int)db_rep->read_pipe, &reads);
+ if (db_rep->read_pipe > maxfd)
+ maxfd = db_rep->read_pipe;
+
+ /*
+ * Examine all connections to see what sort of I/O to ask for on
+ * each one. The TAILQ_FOREACH macro would be suitable here,
+ * except that it doesn't allow unlinking the current element,
+ * which is needed for cleanup_connection.
+ */
+ for (conn = TAILQ_FIRST(&db_rep->connections);
+ conn != NULL;
+ conn = next) {
+ next = TAILQ_NEXT(conn, entries);
+ if (F_ISSET(conn, CONN_DEFUNCT)) {
+ __repmgr_cleanup_connection(dbenv, conn);
+ continue;
+ }
+
+ if (F_ISSET(conn, CONN_CONNECTING)) {
+ FD_SET((u_int)conn->fd, &reads);
+ FD_SET((u_int)conn->fd, &writes);
+ if (conn->fd > maxfd)
+ maxfd = conn->fd;
+ continue;
+ }
+
+ if (!STAILQ_EMPTY(&conn->outbound_queue)) {
+ FD_SET((u_int)conn->fd, &writes);
+ if (conn->fd > maxfd)
+ maxfd = conn->fd;
+ }
+ /*
+ * If we haven't yet gotten site's handshake, then read
+ * from it even if we're flow-controlling.
+ */
+ if (!flow_control || !IS_VALID_EID(conn->eid)) {
+ FD_SET((u_int)conn->fd, &reads);
+ if (conn->fd > maxfd)
+ maxfd = conn->fd;
+ }
+ }
+ /*
+ * Decide how long to wait based on when it will next be time to
+ * retry an idle connection. (List items are in order, so we
+ * only have to examine the first one.)
+ */
+ if (TAILQ_EMPTY(&db_rep->retries))
+ timeout_p = NULL;
+ else {
+ retry = TAILQ_FIRST(&db_rep->retries);
+
+ timeout_p = &timeout;
+ __repmgr_timeval_diff_current(
+ dbenv, &retry->time, timeout_p);
+ }
+
+ UNLOCK_MUTEX(db_rep->mutex);
+
+ if ((ret = select(maxfd + 1, &reads, &writes, NULL, timeout_p))
+ == -1) {
+ switch (ret = errno) {
+ case EINTR:
+ case EWOULDBLOCK:
+ LOCK_MUTEX(db_rep->mutex);
+ continue; /* simply retry */
+ default:
+ __db_err(dbenv, ret, "select");
+ return (ret);
+ }
+ }
+ nready = ret;
+
+ LOCK_MUTEX(db_rep->mutex);
+ if ((ret = __repmgr_retry_connections(dbenv)) != 0)
+ goto out;
+ if (nready == 0)
+ continue;
+
+ /*
+ * Traverse the linked list. Almost like TAILQ_FOREACH, except
+ * that we need the ability to unlink an element along the way.
+ */
+ for (conn = TAILQ_FIRST(&db_rep->connections);
+ conn != NULL;
+ conn = next) {
+ next = TAILQ_NEXT(conn, entries);
+ if (F_ISSET(conn, CONN_CONNECTING)) {
+ if (FD_ISSET((u_int)conn->fd, &reads) ||
+ FD_ISSET((u_int)conn->fd, &writes)) {
+ if ((ret = finish_connecting(dbenv,
+ conn)) == DB_REP_UNAVAIL) {
+ if ((ret =
+ __repmgr_bust_connection(
+ dbenv, conn, TRUE)) != 0)
+ goto out;
+ } else if (ret != 0)
+ goto out;
+ }
+ continue;
+ }
+
+ /*
+ * Here, the site is connected, and the FD_SET's are
+ * valid.
+ */
+ if (FD_ISSET((u_int)conn->fd, &writes)) {
+ if ((ret = __repmgr_write_some(
+ dbenv, conn)) == DB_REP_UNAVAIL) {
+ if ((ret =
+ __repmgr_bust_connection(dbenv,
+ conn, TRUE)) != 0)
+ goto out;
+ continue;
+ } else if (ret != 0)
+ goto out;
+ }
+
+ if (!flow_control &&
+ FD_ISSET((u_int)conn->fd, &reads)) {
+ if ((ret = __repmgr_read_from_site(dbenv, conn))
+ == DB_REP_UNAVAIL) {
+ if ((ret =
+ __repmgr_bust_connection(dbenv,
+ conn, TRUE)) != 0)
+ goto out;
+ continue;
+ } else if (ret != 0)
+ goto out;
+ }
+ }
+
+ /*
+ * Read any bytes in the signalling pipe. Note that we don't
+ * actually need to do anything with them; they're just there to
+ * wake us up when necessary.
+ */
+ if (FD_ISSET((u_int)db_rep->read_pipe, &reads)) {
+ if (read(db_rep->read_pipe, buf, sizeof(buf)) <= 0) {
+ ret = errno;
+ goto out;
+ } else if (db_rep->finished) {
+ ret = 0;
+ goto out;
+ }
+ }
+ if (FD_ISSET((u_int)db_rep->listen_fd, &reads) &&
+ (ret = __repmgr_accept(dbenv)) != 0)
+ goto out;
+ }
+out:
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
+
+static int
+finish_connecting(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ socklen_t len;
+ SITE_STRING_BUFFER buffer;
+ u_int eid;
+ int error, ret;
+
+ len = sizeof(error);
+ if (getsockopt(
+ conn->fd, SOL_SOCKET, SO_ERROR, (sockopt_t)&error, &len) < 0)
+ goto err_rpt;
+ if (error) {
+ errno = error;
+ goto err_rpt;
+ }
+
+ F_CLR(conn, CONN_CONNECTING);
+ return (__repmgr_send_handshake(dbenv, conn));
+
+err_rpt:
+ db_rep = dbenv->rep_handle;
+
+ DB_ASSERT(dbenv, IS_VALID_EID(conn->eid));
+ eid = (u_int)conn->eid;
+
+ site = SITE_FROM_EID(eid);
+ __db_err(dbenv, errno,
+ "connecting to %s", __repmgr_format_site_loc(site, buffer));
+
+ /* If we've exhausted the list of possible addresses, give up. */
+ if (ADDR_LIST_NEXT(&site->net_addr) == NULL)
+ return (DB_REP_UNAVAIL);
+
+ /*
+ * This is just like a little mini-"bust_connection", except that we
+ * don't reschedule for later, 'cuz we're just about to try again right
+ * now.
+ */
+ DB_ASSERT(dbenv, !TAILQ_EMPTY(&db_rep->connections));
+ __repmgr_cleanup_connection(dbenv, conn);
+ ret = __repmgr_connect_site(dbenv, eid);
+ DB_ASSERT(dbenv, ret != DB_REP_UNAVAIL);
+ return (ret);
+}
diff --git a/db/repmgr/repmgr_queue.c b/db/repmgr/repmgr_queue.c
new file mode 100644
index 000000000..be9adc2e7
--- /dev/null
+++ b/db/repmgr/repmgr_queue.c
@@ -0,0 +1,158 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_queue.c,v 1.6 2006/08/24 14:46:26 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+typedef STAILQ_HEAD(__repmgr_q_header, __repmgr_message) QUEUE_HEADER;
+struct __repmgr_queue {
+ int size;
+ QUEUE_HEADER header;
+};
+
+/*
+ * PUBLIC: int __repmgr_queue_create __P((DB_ENV *, DB_REP *));
+ */
+int
+__repmgr_queue_create(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ REPMGR_QUEUE *q;
+ int ret;
+
+ COMPQUIET(dbenv, NULL);
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(REPMGR_QUEUE), &q)) != 0)
+ return (ret);
+ q->size = 0;
+ STAILQ_INIT(&q->header);
+ db_rep->input_queue = q;
+ return (0);
+}
+
+/*
+ * Frees not only the queue header, but also any messages that may be on it,
+ * along with their data buffers.
+ *
+ * PUBLIC: void __repmgr_queue_destroy __P((DB_ENV *));
+ */
+void
+__repmgr_queue_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ REPMGR_QUEUE *q;
+ REPMGR_MESSAGE *m;
+
+ if ((q = dbenv->rep_handle->input_queue) == NULL)
+ return;
+
+ while (!STAILQ_EMPTY(&q->header)) {
+ m = STAILQ_FIRST(&q->header);
+ STAILQ_REMOVE_HEAD(&q->header, entries);
+ __os_free(dbenv, m);
+ }
+ __os_free(dbenv, q);
+}
+
+/*
+ * PUBLIC: int __repmgr_queue_get __P((DB_ENV *, REPMGR_MESSAGE **));
+ *
+ * Get the first input message from the queue and return it to the caller. The
+ * caller hereby takes responsibility for the entire message buffer, and should
+ * free it when done.
+ *
+ * Note that caller is NOT expected to hold the mutex. This is asymmetric with
+ * put(), because put() is expected to be called in a loop after select, where
+ * it's already necessary to be holding the mutex.
+ */
+int
+__repmgr_queue_get(dbenv, msgp)
+ DB_ENV *dbenv;
+ REPMGR_MESSAGE **msgp;
+{
+ DB_REP *db_rep;
+ REPMGR_QUEUE *q;
+ REPMGR_MESSAGE *m;
+ int ret;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ q = db_rep->input_queue;
+
+ LOCK_MUTEX(db_rep->mutex);
+ while (STAILQ_EMPTY(&q->header) && !db_rep->finished) {
+#ifdef DB_WIN32
+ if (!ResetEvent(db_rep->queue_nonempty)) {
+ ret = GetLastError();
+ goto err;
+ }
+ if (SignalObjectAndWait(db_rep->mutex, db_rep->queue_nonempty,
+ INFINITE, FALSE) != WAIT_OBJECT_0) {
+ ret = GetLastError();
+ goto err;
+ }
+ LOCK_MUTEX(db_rep->mutex);
+#else
+ if ((ret = pthread_cond_wait(&db_rep->queue_nonempty,
+ &db_rep->mutex)) != 0)
+ goto err;
+#endif
+ }
+ if (db_rep->finished)
+ ret = DB_REP_UNAVAIL;
+ else {
+ m = STAILQ_FIRST(&q->header);
+ STAILQ_REMOVE_HEAD(&q->header, entries);
+ q->size--;
+ *msgp = m;
+ }
+
+err:
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_queue_put __P((DB_ENV *, REPMGR_MESSAGE *));
+ *
+ * !!!
+ * Caller must hold repmgr->mutex.
+ */
+int
+__repmgr_queue_put(dbenv, msg)
+ DB_ENV *dbenv;
+ REPMGR_MESSAGE *msg;
+{
+ DB_REP *db_rep;
+ REPMGR_QUEUE *q;
+
+ db_rep = dbenv->rep_handle;
+ q = db_rep->input_queue;
+
+ STAILQ_INSERT_TAIL(&q->header, msg, entries);
+ q->size++;
+
+ return (__repmgr_signal(&db_rep->queue_nonempty));
+}
+
+/*
+ * PUBLIC: int __repmgr_queue_size __P((DB_ENV *));
+ *
+ * !!!
+ * Caller must hold repmgr->mutex.
+ */
+int
+__repmgr_queue_size(dbenv)
+ DB_ENV *dbenv;
+{
+ return (dbenv->rep_handle->input_queue->size);
+}
diff --git a/db/repmgr/repmgr_sel.c b/db/repmgr/repmgr_sel.c
new file mode 100644
index 000000000..bbb29b0ee
--- /dev/null
+++ b/db/repmgr/repmgr_sel.c
@@ -0,0 +1,875 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_sel.c,v 1.25 2006/09/19 14:14:11 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+static int __repmgr_connect __P((DB_ENV*, socket_t *, REPMGR_SITE *));
+static int record_ack __P((DB_ENV *, REPMGR_SITE *, DB_REPMGR_ACK *));
+static int dispatch_phase_completion __P((DB_ENV *, REPMGR_CONNECTION *));
+static int notify_handshake __P((DB_ENV *, REPMGR_CONNECTION *));
+
+/*
+ * PUBLIC: void *__repmgr_select_thread __P((void *));
+ */
+void *
+__repmgr_select_thread(args)
+ void *args;
+{
+ DB_ENV *dbenv = args;
+ int ret;
+
+ if ((ret = __repmgr_select_loop(dbenv)) != 0) {
+ __db_err(dbenv, ret, "select loop failed");
+ __repmgr_thread_failure(dbenv, ret);
+ }
+ return (NULL);
+}
+
+/*
+ * PUBLIC: int __repmgr_accept __P((DB_ENV *));
+ */
+int
+__repmgr_accept(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REPMGR_CONNECTION *conn;
+ struct sockaddr_in siaddr;
+ socklen_t addrlen;
+ socket_t s;
+ int ret;
+#ifdef DB_WIN32
+ WSAEVENT event_obj;
+#endif
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ addrlen = sizeof(siaddr);
+ if ((s = accept(db_rep->listen_fd, (struct sockaddr *)&siaddr,
+ &addrlen)) == -1) {
+ /*
+ * Some errors are innocuous and so should be ignored. MSDN
+ * Library documents the Windows ones; the Unix ones are
+ * advocated in Stevens' UNPv1, section 16.6; and Linux
+ * Application Development, p. 416.
+ */
+ switch (ret = net_errno) {
+#ifdef DB_WIN32
+ case WSAECONNRESET:
+ case WSAEWOULDBLOCK:
+#else
+ case EINTR:
+ case EWOULDBLOCK:
+ case ECONNABORTED:
+ case ENETDOWN:
+#ifdef EPROTO
+ case EPROTO:
+#endif
+ case ENOPROTOOPT:
+ case EHOSTDOWN:
+#ifdef ENONET
+ case ENONET:
+#endif
+ case EHOSTUNREACH:
+ case EOPNOTSUPP:
+ case ENETUNREACH:
+#endif
+ RPRINT(dbenv, (dbenv, &mb,
+ "accept error %d considered innocuous", ret));
+ return (0);
+ default:
+ __db_err(dbenv, ret, "accept error");
+ return (ret);
+ }
+ }
+ RPRINT(dbenv, (dbenv, &mb, "accepted a new connection"));
+
+ if ((ret = __repmgr_set_nonblocking(s)) != 0) {
+ __db_err(dbenv, ret, "can't set nonblock after accept");
+ (void)closesocket(s);
+ return (ret);
+ }
+
+#ifdef DB_WIN32
+ if ((event_obj = WSACreateEvent()) == WSA_INVALID_EVENT) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't create WSA event");
+ (void)closesocket(s);
+ return (ret);
+ }
+ if (WSAEventSelect(s, event_obj, FD_READ|FD_CLOSE) == SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't set desired event bits");
+ (void)WSACloseEvent(event_obj);
+ (void)closesocket(s);
+ return (ret);
+ }
+#endif
+ if ((ret = __repmgr_new_connection(dbenv, &conn, s, 0)) != 0) {
+#ifdef DB_WIN32
+ (void)WSACloseEvent(event_obj);
+#endif
+ (void)closesocket(s);
+ return (ret);
+ }
+ conn->eid = -1;
+#ifdef DB_WIN32
+ conn->event_object = event_obj;
+#endif
+
+ switch (ret = __repmgr_send_handshake(dbenv, conn)) {
+ case 0:
+ return (0);
+ case DB_REP_UNAVAIL:
+ return (__repmgr_bust_connection(dbenv, conn, TRUE));
+ default:
+ return (ret);
+ }
+}
+
+/*
+ * Initiates connection attempts for any sites on the idle list whose retry
+ * times have expired.
+ *
+ * PUBLIC: int __repmgr_retry_connections __P((DB_ENV *));
+ *
+ * !!!
+ * Assumes caller holds the mutex.
+ */
+int
+__repmgr_retry_connections(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REPMGR_RETRY *retry;
+ repmgr_netaddr_t *addr;
+ repmgr_timeval_t now;
+ ADDRINFO *list;
+ u_int eid;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ __os_clock(dbenv, &now.tv_sec, &now.tv_usec);
+
+ while (!TAILQ_EMPTY(&db_rep->retries)) {
+ retry = TAILQ_FIRST(&db_rep->retries);
+ if (__repmgr_timeval_cmp(&retry->time, &now) > 0)
+ break; /* since items are in time order */
+
+ TAILQ_REMOVE(&db_rep->retries, retry, entries);
+
+ eid = retry->eid;
+ __os_free(dbenv, retry);
+
+ /*
+ * If have never yet successfully resolved this site's host
+ * name, try to do so now.
+ *
+ * (Throughout all the rest of repmgr, we almost never do any
+ * sort of blocking operation in the select thread. This is the
+ * sole exception to that rule. Fortunately, it should rarely
+ * happen. It only happens for a site that we only learned
+ * about because it connected to us: not only were we not
+ * configured to know about it, but we also never got a NEWSITE
+ * message about it. And even then only after the connection
+ * fails and we want to retry it from this end.)
+ */
+ addr = &SITE_FROM_EID(eid)->net_addr;
+ if (ADDR_LIST_FIRST(addr) == NULL) {
+ if (__repmgr_getaddr(dbenv,
+ addr->host, addr->port, 0, &list) == 0) {
+ addr->address_list = list;
+ (void)ADDR_LIST_FIRST(addr);
+ } else if ((ret = __repmgr_schedule_connection_attempt(
+ dbenv, eid, FALSE)) != 0)
+ return (ret);
+ else
+ continue;
+ }
+ if ((ret = __repmgr_connect_site(dbenv, eid)) != 0)
+ return (ret);
+ }
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_first_try_connections __P((DB_ENV *));
+ *
+ * !!!
+ * Assumes caller holds the mutex.
+ */
+int
+__repmgr_first_try_connections(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ u_int eid;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ for (eid=0; eid<db_rep->site_cnt; eid++) {
+ ADDR_LIST_FIRST(&SITE_FROM_EID(eid)->net_addr);
+ if ((ret = __repmgr_connect_site(dbenv, eid)) != 0)
+ return (ret);
+ }
+ return (0);
+}
+
+/*
+ * Tries to establish a connection with the site indicated by the given eid,
+ * starting with the "current" element of its address list and trying as many
+ * addresses as necessary until the list is exhausted.
+ *
+ * PUBLIC: int __repmgr_connect_site __P((DB_ENV *, u_int eid));
+ */
+int
+__repmgr_connect_site(dbenv, eid)
+ DB_ENV *dbenv;
+ u_int eid;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ REPMGR_CONNECTION *con;
+ socket_t s;
+ u_int32_t flags;
+ int ret;
+#ifdef DB_WIN32
+ long desired_event;
+ WSAEVENT event_obj;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ site = SITE_FROM_EID(eid);
+
+ flags = 0;
+ switch (ret = __repmgr_connect(dbenv, &s, site)) {
+ case 0:
+ flags = 0;
+#ifdef DB_WIN32
+ desired_event = FD_READ|FD_CLOSE;
+#endif
+ break;
+ case INPROGRESS:
+ flags = CONN_CONNECTING;
+#ifdef DB_WIN32
+ desired_event = FD_CONNECT;
+#endif
+ break;
+ default:
+ return (
+ __repmgr_schedule_connection_attempt(dbenv, eid, FALSE));
+ }
+
+#ifdef DB_WIN32
+ if ((event_obj = WSACreateEvent()) == WSA_INVALID_EVENT) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't create WSA event");
+ (void)closesocket(s);
+ return (ret);
+ }
+ if (WSAEventSelect(s, event_obj, desired_event) == SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't set desired event bits");
+ (void)WSACloseEvent(event_obj);
+ (void)closesocket(s);
+ return (ret);
+ }
+#endif
+
+ if ((ret = __repmgr_new_connection(dbenv, &con, s, flags))
+ != 0) {
+#ifdef DB_WIN32
+ (void)WSACloseEvent(event_obj);
+#endif
+ (void)closesocket(s);
+ return (ret);
+ }
+#ifdef DB_WIN32
+ con->event_object = event_obj;
+#endif
+
+ if (flags == 0) {
+ switch (ret = __repmgr_send_handshake(dbenv, con)) {
+ case 0:
+ break;
+ case DB_REP_UNAVAIL:
+ return (__repmgr_bust_connection(dbenv, con, TRUE));
+ default:
+ return (ret);
+ }
+ }
+
+ con->eid = (int)eid;
+
+ site->ref.conn = con;
+ site->state = SITE_CONNECTED;
+ return (0);
+}
+
+static int
+__repmgr_connect(dbenv, socket_result, site)
+ DB_ENV *dbenv;
+ socket_t *socket_result;
+ REPMGR_SITE *site;
+{
+ repmgr_netaddr_t *addr;
+ ADDRINFO *ai;
+ socket_t s;
+ char *why;
+ int ret;
+ SITE_STRING_BUFFER buffer;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ /*
+ * Lint doesn't know about DB_ASSERT, so it can't tell that this
+ * loop will always get executed at least once, giving 'why' a value.
+ */
+ COMPQUIET(why, "");
+ addr = &site->net_addr;
+ ai = ADDR_LIST_CURRENT(addr);
+ DB_ASSERT(dbenv, ai != NULL);
+ for (; ai != NULL; ai = ADDR_LIST_NEXT(addr)) {
+
+ if ((s = socket(ai->ai_family,
+ ai->ai_socktype, ai->ai_protocol)) == SOCKET_ERROR) {
+ why = "can't create socket to connect";
+ continue;
+ }
+
+ if ((ret = __repmgr_set_nonblocking(s)) != 0) {
+ __db_err(dbenv,
+ ret, "can't make nonblock socket to connect");
+ (void)closesocket(s);
+ return (ret);
+ }
+
+ if (connect(s, ai->ai_addr, (socklen_t)ai->ai_addrlen) != 0)
+ ret = net_errno;
+
+ if (ret == 0 || ret == INPROGRESS) {
+ *socket_result = s;
+ RPRINT(dbenv, (dbenv, &mb,
+ "init connection to %s with result %d",
+ __repmgr_format_site_loc(site, buffer), ret));
+ return (ret);
+ }
+
+ why = "connection failed";
+ (void)closesocket(s);
+ }
+
+ /* We've exhausted all possible addresses. */
+ ret = net_errno;
+ __db_err(dbenv, ret, "%s to %s", why,
+ __repmgr_format_site_loc(site, buffer));
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_send_handshake __P((DB_ENV *, REPMGR_CONNECTION *));
+ */
+int
+__repmgr_send_handshake(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ repmgr_netaddr_t *my_addr;
+ DB_REPMGR_HANDSHAKE buffer;
+ DBT cntrl, rec;
+
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ my_addr = &db_rep->my_addr;
+
+ /*
+ * Remind us that we need to fix priority on the rep API not to be an
+ * int, if we're going to pass it across the wire.
+ */
+ DB_ASSERT(dbenv, sizeof(u_int32_t) >= sizeof(int));
+
+ buffer.version = DB_REPMGR_VERSION;
+ /* TODO: using network byte order is pointless if we only do it here. */
+ buffer.priority = htonl((u_int32_t)rep->priority);
+ buffer.port = my_addr->port;
+ cntrl.data = &buffer;
+ cntrl.size = sizeof(buffer);
+
+ DB_SET_DBT(rec, my_addr->host, strlen(my_addr->host) + 1);
+
+ return (__repmgr_send_one(dbenv, conn, REPMGR_HANDSHAKE, &cntrl, &rec));
+}
+
+/*
+ * PUBLIC: int __repmgr_read_from_site __P((DB_ENV *, REPMGR_CONNECTION *));
+ *
+ * !!!
+ * Caller is assumed to hold repmgr->mutex, 'cuz we call queue_put() from here.
+ */
+int
+__repmgr_read_from_site(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ SITE_STRING_BUFFER buffer;
+ size_t nr;
+ int ret;
+
+ /*
+ * Keep reading pieces as long as we're making some progress, or until
+ * we complete the current read phase.
+ */
+ for (;;) {
+ if ((ret = __repmgr_readv(conn->fd,
+ &conn->iovecs.vectors[conn->iovecs.offset],
+ conn->iovecs.count - conn->iovecs.offset, &nr)) != 0) {
+ switch (ret) {
+#ifndef DB_WIN32
+ case EINTR:
+ continue;
+#endif
+ case WOULDBLOCK:
+ return (0);
+ default:
+ (void)__repmgr_format_eid_loc(dbenv->rep_handle,
+ conn->eid, buffer);
+ __db_err(dbenv, ret,
+ "can't read from %s", buffer);
+ return (DB_REP_UNAVAIL);
+ }
+ }
+
+ if (nr > 0) {
+ if (__repmgr_update_consumed(&conn->iovecs, nr))
+ return (dispatch_phase_completion(dbenv,
+ conn));
+ } else {
+ (void)__repmgr_format_eid_loc(dbenv->rep_handle,
+ conn->eid, buffer);
+ __db_errx(dbenv, "EOF on connection from %s", buffer);
+ return (DB_REP_UNAVAIL);
+ }
+ }
+}
+
+/*
+ * Handles whatever needs to be done upon the completion of a reading phase on a
+ * given connection.
+ */
+static int
+dispatch_phase_completion(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+#define MEM_ALIGN sizeof(double)
+ DB_REP *db_rep;
+ DB_REPMGR_ACK *ack;
+ REPMGR_SITE *site;
+ DB_REPMGR_HANDSHAKE *handshake;
+ REPMGR_RETRY *retry;
+ repmgr_netaddr_t addr;
+ DBT *dbt;
+ u_int32_t control_size, rec_size;
+ size_t memsize, control_offset, rec_offset;
+ void *membase;
+ char *host;
+ u_int port;
+ int ret, eid;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ switch (conn->reading_phase) {
+ case SIZES_PHASE:
+ /*
+ * We've received the header: a message type and the lengths of
+ * the two pieces of the message. Set up buffers to read the
+ * two pieces.
+ */
+
+ if (conn->msg_type != REPMGR_HANDSHAKE &&
+ !IS_VALID_EID(conn->eid)) {
+ __db_errx(dbenv,
+ "expected handshake as first msg from passively connected site");
+ return (DB_REP_UNAVAIL);
+ }
+
+ __repmgr_iovec_init(&conn->iovecs);
+ control_size = ntohl(conn->control_size_buf);
+ rec_size = ntohl(conn->rec_size_buf);
+ if (conn->msg_type == REPMGR_REP_MESSAGE) {
+ /*
+ * Allocate a block of memory large enough to hold a
+ * DB_REPMGR_MESSAGE wrapper, plus the (one or) two DBT
+ * data areas that it points to. Start by calculating
+ * the total memory needed, rounding up for the start of
+ * each DBT, to ensure possible alignment requirements.
+ */
+ /*
+ * TODO: Keith says we don't need to mess with this: put
+ * the burden on base replication code.
+ */
+ memsize = (size_t)
+ DB_ALIGN(sizeof(REPMGR_MESSAGE), MEM_ALIGN);
+ control_offset = memsize;
+ memsize += control_size;
+ if (rec_size > 0) {
+ memsize = (size_t)DB_ALIGN(memsize, MEM_ALIGN);
+ rec_offset = memsize;
+ memsize += rec_size;
+ } else
+ COMPQUIET(rec_offset, 0);
+ if ((ret = __os_malloc(dbenv, memsize, &membase)) != 0)
+ return (ret);
+ conn->input.rep_message = membase;
+ memset(&conn->input.rep_message->control, 0,
+ sizeof(DBT));
+ memset(&conn->input.rep_message->rec, 0, sizeof(DBT));
+ conn->input.rep_message->originating_eid = conn->eid;
+ conn->input.rep_message->control.size = control_size;
+ conn->input.rep_message->control.data =
+ (u_int8_t*)membase + control_offset;
+ __repmgr_add_buffer(&conn->iovecs,
+ conn->input.rep_message->control.data,
+ control_size);
+
+ conn->input.rep_message->rec.size = rec_size;
+ if (rec_size > 0) {
+ conn->input.rep_message->rec.data =
+ (u_int8_t*)membase + rec_offset;
+ __repmgr_add_buffer(&conn->iovecs,
+ conn->input.rep_message->rec.data,
+ rec_size);
+ } else
+ conn->input.rep_message->rec.data = NULL;
+
+ } else {
+ if (control_size == 0) {
+ __db_errx(
+ dbenv, "illegal size for non-rep msg");
+ return (DB_REP_UNAVAIL);
+ }
+ conn->input.repmgr_msg.cntrl.size = control_size;
+ conn->input.repmgr_msg.rec.size = rec_size;
+
+ /*
+ * TODO: consider allocating space for ack's just once
+ * (lazily?), or even providing static space for it in
+ * the conn structure itself, thus avoiding a bit of
+ * thrashing in the memory pool. If we do that, then of
+ * course we must get rid of the corresponding call to
+ * free(), below.
+ */
+ dbt = &conn->input.repmgr_msg.cntrl;
+ dbt->size = control_size;
+ if ((ret = __os_malloc(dbenv, control_size,
+ &dbt->data)) != 0)
+ return (ret);
+ __repmgr_add_dbt(&conn->iovecs, dbt);
+
+ dbt = &conn->input.repmgr_msg.rec;
+ if ((dbt->size = rec_size) > 0) {
+ if ((ret = __os_malloc(dbenv, rec_size,
+ &dbt->data)) != 0) {
+ __os_free(dbenv,
+ conn->input.repmgr_msg.cntrl.data);
+ return (ret);
+ }
+ __repmgr_add_dbt(&conn->iovecs, dbt);
+ }
+ }
+
+ conn->reading_phase = DATA_PHASE;
+ break;
+
+ case DATA_PHASE:
+ /*
+ * We have a complete message, so process it. Acks and
+ * handshakes get processed here, in line. Regular rep messages
+ * get posted to a queue, to be handled by a thread from the
+ * message thread pool.
+ */
+ switch (conn->msg_type) {
+ case REPMGR_ACK:
+ /*
+ * Extract the LSN. Save it only if it is an
+ * improvement over what the site has already ack'ed.
+ */
+ ack = conn->input.repmgr_msg.cntrl.data;
+ if (conn->input.repmgr_msg.cntrl.size != sizeof(*ack) ||
+ conn->input.repmgr_msg.rec.size != 0) {
+ __db_errx(dbenv, "bad ack msg size");
+ return (DB_REP_UNAVAIL);
+ }
+ if ((ret = record_ack(dbenv, SITE_FROM_EID(conn->eid),
+ ack)) != 0)
+ return (ret);
+ __os_free(dbenv, conn->input.repmgr_msg.cntrl.data);
+ break;
+
+ case REPMGR_HANDSHAKE:
+ handshake = conn->input.repmgr_msg.cntrl.data;
+ if (conn->input.repmgr_msg.cntrl.size >=
+ sizeof(handshake->version) &&
+ handshake->version != DB_REPMGR_VERSION) {
+ __db_errx(dbenv,
+ "mismatched repmgr message protocol version (%lu)",
+ (u_long)handshake->version);
+ return (DB_REP_UNAVAIL);
+ }
+ if (conn->input.repmgr_msg.cntrl.size !=
+ sizeof(*handshake) ||
+ conn->input.repmgr_msg.rec.size == 0) {
+ __db_errx(dbenv, "bad handshake msg size");
+ return (DB_REP_UNAVAIL);
+ }
+
+ port = handshake->port;
+ host = conn->input.repmgr_msg.rec.data;
+ host[conn->input.repmgr_msg.rec.size-1] = '\0';
+
+ RPRINT(dbenv, (dbenv, &mb,
+ "got handshake %s:%u, pri %lu", host, port,
+ (u_long)ntohl(handshake->priority)));
+
+ if (IS_VALID_EID(conn->eid)) {
+ /*
+ * We must have initiated this as an outgoing
+ * connection, since we already know the EID.
+ * All we need from the handshake is the
+ * priority.
+ */
+ site = SITE_FROM_EID(conn->eid);
+ RPRINT(dbenv, (dbenv, &mb,
+ "handshake from connection to %s:%lu",
+ site->net_addr.host,
+ (u_long)site->net_addr.port));
+ } else {
+ if (IS_VALID_EID(eid =
+ __repmgr_find_site(dbenv, host, port))) {
+ site = SITE_FROM_EID(eid);
+ if (site->state == SITE_IDLE) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "handshake from previously idle site"));
+ retry = site->ref.retry;
+ TAILQ_REMOVE(&db_rep->retries,
+ retry, entries);
+ __os_free(dbenv, retry);
+
+ conn->eid = eid;
+ site->state = SITE_CONNECTED;
+ site->ref.conn = conn;
+ } else {
+ /*
+ * We got an incoming connection
+ * for a site we were already
+ * connected to; discard it.
+ */
+ __db_errx(dbenv,
+ "redundant incoming connection will be ignored");
+ return (DB_REP_UNAVAIL);
+ }
+ } else {
+ RPRINT(dbenv, (dbenv, &mb,
+ "handshake introduces unknown site"));
+ if ((ret = __repmgr_pack_netaddr(
+ dbenv, host, port, NULL,
+ &addr)) != 0)
+ return (ret);
+ if ((ret = __repmgr_new_site(
+ dbenv, &site, &addr,
+ SITE_CONNECTED)) != 0) {
+ __repmgr_cleanup_netaddr(dbenv,
+ &addr);
+ return (ret);
+ }
+ conn->eid = EID_FROM_SITE(site);
+ site->ref.conn = conn;
+ }
+ }
+
+ /* TODO: change priority to be u_int32_t. */
+ DB_ASSERT(dbenv, sizeof(int) == sizeof(u_int32_t));
+ site->priority = (int)ntohl(handshake->priority);
+
+ if ((ret = notify_handshake(dbenv, conn)) != 0)
+ return (ret);
+
+ __os_free(dbenv, conn->input.repmgr_msg.cntrl.data);
+ __os_free(dbenv, conn->input.repmgr_msg.rec.data);
+ break;
+
+ case REPMGR_REP_MESSAGE:
+ if ((ret = __repmgr_queue_put(dbenv,
+ conn->input.rep_message)) != 0)
+ return (ret);
+ /*
+ * The queue has taken over responsibility for the
+ * rep_message buffer, and will free it later.
+ */
+ break;
+
+ default:
+ __db_errx(dbenv, "unknown msg type rcvd: %d",
+ (int)conn->msg_type);
+ return (DB_REP_UNAVAIL);
+ }
+
+ __repmgr_reset_for_reading(conn);
+ break;
+
+ default:
+ DB_ASSERT(dbenv, FALSE);
+ }
+
+ return (0);
+}
+
+/*
+ * Performs any processing needed upon the receipt of a handshake.
+ *
+ * !!!
+ * Caller must hold mutex.
+ */
+static int
+notify_handshake(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ DB_REP *db_rep;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+#endif
+
+ COMPQUIET(conn, NULL);
+
+ db_rep = dbenv->rep_handle;
+ /*
+ * If we're moping around wishing we knew who the master was, then
+ * getting in touch with another site might finally provide sufficient
+ * connectivity to find out. But just do this once, because otherwise
+ * we get messages while the subsequent rep_start operations are going
+ * on, and rep tosses them in that case. (TODO: this may need further
+ * refinement.)
+ */
+ if (db_rep->master_eid == DB_EID_INVALID && !db_rep->done_one) {
+ db_rep->done_one = TRUE;
+ RPRINT(dbenv, (dbenv, &mb,
+ "handshake with no known master to wake election thread"));
+ return (__repmgr_init_election(dbenv, ELECT_REPSTART));
+ }
+ return (0);
+}
+
+static int
+record_ack(dbenv, site, ack)
+ DB_ENV *dbenv;
+ REPMGR_SITE *site;
+ DB_REPMGR_ACK *ack;
+{
+ DB_REP *db_rep;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+ SITE_STRING_BUFFER buffer;
+#endif
+
+ db_rep = dbenv->rep_handle;
+
+ /* Ignore stale acks. */
+ if (ack->generation < db_rep->generation) {
+ RPRINT(dbenv, (dbenv, &mb,
+ "ignoring stale ack (%lu<%lu), from %s",
+ (u_long)ack->generation, (u_long)db_rep->generation,
+ __repmgr_format_site_loc(site, buffer)));
+ return (0);
+ }
+ RPRINT(dbenv, (dbenv, &mb,
+ "got ack [%lu][%lu](%lu) from %s", (u_long)ack->lsn.file,
+ (u_long)ack->lsn.offset, (u_long)ack->generation,
+ __repmgr_format_site_loc(site, buffer)));
+
+ /*
+ * TODO: what about future ones? Ideally, you'd like to wake up any
+ * waiting send() threads and have them return DB_REP_OUTDATED or
+ * something. But a mechanism to do that would be messy, and it almost
+ * seems not worth it, since (1) this almost can't happen; and (2) if we
+ * just ignore it, eventually the send() calls will time out (or not),
+ * and as long as we don't mistakenly ack something. The only advantage
+ * to doing something is more timely failure notification to the
+ * application, in (what I think is) an extremely rare situation.
+ */
+ if (ack->generation == db_rep->generation &&
+ log_compare(&ack->lsn, &site->max_ack) == 1) {
+ memcpy(&site->max_ack, &ack->lsn, sizeof(DB_LSN));
+ if ((ret = __repmgr_wake_waiting_senders(dbenv)) != 0)
+ return (ret);
+ }
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_write_some __P((DB_ENV *, REPMGR_CONNECTION *));
+ */
+int
+__repmgr_write_some(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ REPMGR_FLAT *msg;
+ QUEUED_OUTPUT *output;
+ int bytes, ret;
+
+ while (!STAILQ_EMPTY(&conn->outbound_queue)) {
+ output = STAILQ_FIRST(&conn->outbound_queue);
+ msg = output->msg;
+ if ((bytes = send(conn->fd, &msg->data[output->offset],
+ (size_t)msg->length - output->offset, 0)) == SOCKET_ERROR) {
+ if ((ret = net_errno) == WOULDBLOCK)
+ return (0);
+ else {
+ __db_err(dbenv, ret, "writing data");
+ return (DB_REP_UNAVAIL);
+ }
+ }
+
+ if ((output->offset += (size_t)bytes) >= msg->length) {
+ STAILQ_REMOVE_HEAD(&conn->outbound_queue, entries);
+ __os_free(dbenv, output);
+ conn->out_queue_length--;
+ if (--msg->ref_count <= 0)
+ __os_free(dbenv, msg);
+ }
+ }
+
+#ifdef DB_WIN32
+ /*
+ * With the queue now empty, it's time to relinquish ownership of this
+ * connection again, so that the next call to send() can write the
+ * message in line, instead of posting it to the queue for us.
+ */
+ if (WSAEventSelect(conn->fd, conn->event_object, FD_READ|FD_CLOSE)
+ == SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't remove FD_WRITE event bit");
+ return (ret);
+ }
+#endif
+
+ return (0);
+}
diff --git a/db/repmgr/repmgr_stat.c b/db/repmgr/repmgr_stat.c
new file mode 100644
index 000000000..cbd7113ee
--- /dev/null
+++ b/db/repmgr/repmgr_stat.c
@@ -0,0 +1,116 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_stat.c,v 1.28 2006/09/08 19:22:42 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+/*
+ * PUBLIC: int __repmgr_site_list __P((DB_ENV *, u_int *, DB_REPMGR_SITE **));
+ */
+int
+__repmgr_site_list(dbenv, countp, listp)
+ DB_ENV *dbenv;
+ u_int *countp;
+ DB_REPMGR_SITE **listp;
+{
+ DB_REP *db_rep;
+ DB_REPMGR_SITE *status;
+ REPMGR_SITE *site;
+ size_t array_size, total_size;
+ u_int count, i;
+ int locked, ret;
+ char *name;
+
+ db_rep = dbenv->rep_handle;
+ if (REPMGR_SYNC_INITED(db_rep)) {
+ LOCK_MUTEX(db_rep->mutex);
+ locked = TRUE;
+ } else
+ locked = FALSE;
+
+ /* Initialize for empty list or error return. */
+ ret = 0;
+ *countp = 0;
+ *listp = NULL;
+
+ /* First, add up how much memory we need for the host names. */
+ if ((count = db_rep->site_cnt) == 0)
+ goto err;
+
+ array_size = sizeof(DB_REPMGR_SITE) * count;
+ total_size = array_size;
+ for (i = 0; i < count; i++) {
+ site = &db_rep->sites[i];
+
+ /* Make room for the NUL terminating byte. */
+ total_size += strlen(site->net_addr.host) + 1;
+ }
+
+ if ((ret = __os_umalloc(dbenv, total_size, &status)) != 0)
+ goto err;
+
+ /*
+ * Put the storage for the host names after the array of structs. This
+ * way, the caller can free the whole thing in one single operation.
+ */
+ name = (char *)((u_int8_t *)status + array_size);
+ for (i = 0; i < count; i++) {
+ site = &db_rep->sites[i];
+
+ status[i].eid = EID_FROM_SITE(site);
+
+ status[i].host = name;
+ (void)strcpy(name, site->net_addr.host);
+ name += strlen(name) + 1;
+
+ status[i].port = site->net_addr.port;
+ status[i].status = site->state == SITE_CONNECTED ?
+ DB_REPMGR_CONNECTED : DB_REPMGR_DISCONNECTED;
+ }
+
+ *countp = count;
+ *listp = status;
+
+err: if (locked)
+ UNLOCK_MUTEX(db_rep->mutex);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __repmgr_print_stats __P((DB_ENV *));
+ */
+int
+__repmgr_print_stats(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REPMGR_SITE *list;
+ u_int count, i;
+ int ret;
+
+ if ((ret = __repmgr_site_list(dbenv, &count, &list)) != 0)
+ return (ret);
+
+ if (count == 0)
+ return (0);
+
+ __db_msg(dbenv, "%s", DB_GLOBAL(db_line));
+ __db_msg(dbenv, "DB_REPMGR site information:");
+
+ for (i = 0; i < count; ++i) {
+ __db_msg(dbenv, "%s (eid: %d, port: %u, %sconnected)",
+ list[i].host, list[i].eid, list[i].port,
+ list[i].status == DB_REPMGR_CONNECTED ? "" : "dis");
+ }
+
+ __os_ufree(dbenv, list);
+
+ return (0);
+}
diff --git a/db/repmgr/repmgr_util.c b/db/repmgr/repmgr_util.c
new file mode 100644
index 000000000..541308384
--- /dev/null
+++ b/db/repmgr/repmgr_util.c
@@ -0,0 +1,415 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_util.c,v 1.27 2006/09/19 14:14:12 mjc Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+/*
+ * Schedules a future attempt to re-establish a connection with the given site.
+ * Usually, we wait the configured retry_wait period. But if the "immediate"
+ * parameter is given as TRUE, we'll make the wait time 0, and put the request
+ * at the _beginning_ of the retry queue. Note how this allows us to preserve
+ * the property that the queue stays in time order simply by appending to the
+ * end.
+ *
+ * PUBLIC: int __repmgr_schedule_connection_attempt __P((DB_ENV *, u_int, int));
+ *
+ * !!!
+ * Caller should hold mutex.
+ *
+ * Unless an error occurs, we always attempt to wake the main thread;
+ * __repmgr_bust_connection relies on this behavior.
+ */
+int
+__repmgr_schedule_connection_attempt(dbenv, eid, immediate)
+ DB_ENV *dbenv;
+ u_int eid;
+ int immediate;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ REPMGR_RETRY *retry;
+ repmgr_timeval_t t;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ if ((ret = __os_malloc(dbenv, sizeof(*retry), &retry)) != 0)
+ return (ret);
+
+ __os_clock(dbenv, &t.tv_sec, &t.tv_usec);
+ if (immediate)
+ TAILQ_INSERT_HEAD(&db_rep->retries, retry, entries);
+ else {
+ if ((t.tv_usec += db_rep->connection_retry_wait%1000000) >
+ 1000000) {
+ t.tv_sec++;
+ t.tv_usec -= 1000000;
+ }
+ t.tv_sec += db_rep->connection_retry_wait/1000000;
+ TAILQ_INSERT_TAIL(&db_rep->retries, retry, entries);
+ }
+ retry->eid = eid;
+ memcpy(&retry->time, &t, sizeof(repmgr_timeval_t));
+
+ site = SITE_FROM_EID(eid);
+ site->state = SITE_IDLE;
+ site->ref.retry = retry;
+
+ return (__repmgr_wake_main_thread(dbenv));
+}
+
+/*
+ * Initialize the necessary control structures to begin reading a new input
+ * message.
+ *
+ * PUBLIC: void __repmgr_reset_for_reading __P((REPMGR_CONNECTION *));
+ */
+/*
+ * TODO: we need to make sure we call this: (1) initially, when we first create
+ * a connection; (2) after processing a message, to get ready to read the next
+ * one; and (3) after a connection gets successfully re-established after a
+ * failure. (Actually, #1 and #3 should probably end up being the same thing,
+ * if the code is organized properly.)
+ */
+void
+__repmgr_reset_for_reading(con)
+ REPMGR_CONNECTION *con;
+{
+ con->reading_phase = SIZES_PHASE;
+ __repmgr_iovec_init(&con->iovecs);
+ __repmgr_add_buffer(&con->iovecs, &con->msg_type,
+ sizeof(con->msg_type));
+ __repmgr_add_buffer(&con->iovecs, &con->control_size_buf,
+ sizeof(con->control_size_buf));
+ __repmgr_add_buffer(&con->iovecs, &con->rec_size_buf,
+ sizeof(con->rec_size_buf));
+}
+
+/*
+ * Constructs a DB_REPMGR_CONNECTION structure, and puts it on the main list of
+ * connections. It does not initialize eid, since that isn't needed and/or
+ * immediately known in all cases.
+ *
+ * PUBLIC: int __repmgr_new_connection __P((DB_ENV *, REPMGR_CONNECTION **,
+ * PUBLIC: socket_t, u_int32_t));
+ */
+int
+__repmgr_new_connection(dbenv, connp, s, flags)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION **connp;
+ socket_t s;
+ u_int32_t flags;
+{
+ DB_REP *db_rep;
+ REPMGR_CONNECTION *c;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ if ((ret = __os_malloc(dbenv, sizeof(REPMGR_CONNECTION), &c)) != 0)
+ return (ret);
+
+ c->fd = s;
+ c->flags = flags;
+
+ STAILQ_INIT(&c->outbound_queue);
+ c->out_queue_length = 0;
+
+ __repmgr_reset_for_reading(c);
+ TAILQ_INSERT_TAIL(&db_rep->connections, c, entries);
+ *connp = c;
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_new_site __P((DB_ENV *, REPMGR_SITE**,
+ * PUBLIC: const repmgr_netaddr_t *, int));
+ *
+ * !!!
+ * Caller must hold mutex.
+ */
+int
+__repmgr_new_site(dbenv, sitep, addr, state)
+ DB_ENV *dbenv;
+ REPMGR_SITE **sitep;
+ const repmgr_netaddr_t *addr;
+ int state;
+{
+ DB_REP *db_rep;
+ REPMGR_SITE *site;
+ u_int new_site_max, eid;
+ int ret;
+#ifdef DIAGNOSTIC
+ DB_MSGBUF mb;
+ SITE_STRING_BUFFER buffer;
+#endif
+
+ db_rep = dbenv->rep_handle;
+ if (db_rep->site_cnt >= db_rep->site_max) {
+#define INITIAL_SITES_ALLOCATION 10 /* Arbitrary guess. */
+ new_site_max = db_rep->site_max == 0 ?
+ INITIAL_SITES_ALLOCATION : db_rep->site_max * 2;
+ if ((ret = __os_realloc(dbenv,
+ sizeof(REPMGR_SITE) * new_site_max, &db_rep->sites)) != 0)
+ return (ret);
+ db_rep->site_max = new_site_max;
+ }
+ eid = db_rep->site_cnt++;
+
+ site = &db_rep->sites[eid];
+
+ memcpy(&site->net_addr, addr, sizeof(*addr));
+ ZERO_LSN(site->max_ack);
+ site->priority = -1; /* OOB value indicates we don't yet know. */
+ site->state = state;
+
+ RPRINT(dbenv, (dbenv, &mb, "EID %u is assigned for %s", eid,
+ __repmgr_format_site_loc(site, buffer)));
+ *sitep = site;
+ return (0);
+}
+
+/*
+ * Destructor for a repmgr_netaddr_t, cleans up any allocated memory pointed to
+ * by the addr.
+ *
+ * PUBLIC: void __repmgr_cleanup_netaddr __P((DB_ENV *, repmgr_netaddr_t *));
+ */
+void
+__repmgr_cleanup_netaddr(dbenv, addr)
+ DB_ENV *dbenv;
+ repmgr_netaddr_t *addr;
+{
+ if (addr->address_list != NULL) {
+ __db_freeaddrinfo(dbenv, addr->address_list);
+ addr->address_list = addr->current = NULL;
+ }
+ if (addr->host != NULL) {
+ __os_free(dbenv, addr->host);
+ addr->host = NULL;
+ }
+}
+
+/*
+ * PUBLIC: void __repmgr_iovec_init __P((REPMGR_IOVECS *));
+ */
+void
+__repmgr_iovec_init(v)
+ REPMGR_IOVECS *v;
+{
+ v->offset = v->count = 0;
+ v->total_bytes = 0;
+}
+
+/*
+ * PUBLIC: void __repmgr_add_buffer __P((REPMGR_IOVECS *, void *, size_t));
+ *
+ * !!!
+ * There is no checking for overflow of the vectors[5] array.
+ */
+void
+__repmgr_add_buffer(v, address, length)
+ REPMGR_IOVECS *v;
+ void *address;
+ size_t length;
+{
+ v->vectors[v->count].iov_base = address;
+ v->vectors[v->count++].iov_len = length;
+ v->total_bytes += length;
+}
+
+/*
+ * PUBLIC: void __repmgr_add_dbt __P((REPMGR_IOVECS *, const DBT *));
+ */
+void
+__repmgr_add_dbt(v, dbt)
+ REPMGR_IOVECS *v;
+ const DBT *dbt;
+{
+ v->vectors[v->count].iov_base = dbt->data;
+ v->vectors[v->count++].iov_len = dbt->size;
+ v->total_bytes += dbt->size;
+}
+
+/*
+ * Update a set of iovecs to reflect the number of bytes transferred in an I/O
+ * operation, so that the iovecs can be used to continue transferring where we
+ * left off.
+ * Returns TRUE if the set of buffers is now fully consumed, FALSE if more
+ * remains.
+ *
+ * PUBLIC: int __repmgr_update_consumed __P((REPMGR_IOVECS *, size_t));
+ */
+int
+__repmgr_update_consumed(v, byte_count)
+ REPMGR_IOVECS *v;
+ size_t byte_count;
+{
+ db_iovec_t *iov;
+ int i;
+
+ for (i = v->offset; ; i++) {
+ DB_ASSERT(NULL, i < v->count && byte_count > 0);
+ iov = &v->vectors[i];
+ if (byte_count > iov->iov_len) {
+ /*
+ * We've consumed (more than) this vector's worth.
+ * Adjust count and continue.
+ */
+ byte_count -= iov->iov_len;
+ } else {
+ /* Adjust length of remaining portion of vector. */
+ iov->iov_len -= byte_count;
+ if (iov->iov_len > 0) {
+ /*
+ * Still some left in this vector. Adjust base
+ * address too, and leave offset pointing here.
+ */
+ iov->iov_base = (void *)
+ ((u_int8_t *)iov->iov_base + byte_count);
+ v->offset = i;
+ } else {
+ /*
+ * Consumed exactly to a vector boundary.
+ * Advance to next vector for next time.
+ */
+ v->offset = i+1;
+ }
+ /*
+ * If offset has reached count, the entire thing is
+ * consumed.
+ */
+ return (v->offset >= v->count);
+ }
+ }
+}
+
+/*
+ * Builds a buffer containing our network address information, suitable for
+ * publishing as cdata via a call to rep_start, and sets up the given DBT to
+ * point to it. The buffer is dynamically allocated memory, and the caller must
+ * assume responsibility for it.
+ *
+ * PUBLIC: int __repmgr_prepare_my_addr __P((DB_ENV *, DBT *));
+ */
+int
+__repmgr_prepare_my_addr(dbenv, dbt)
+ DB_ENV *dbenv;
+ DBT *dbt;
+{
+ DB_REP *db_rep;
+ size_t size, hlen;
+ u_int16_t port_buffer;
+ u_int8_t *ptr;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+
+ /*
+ * The cdata message consists of the 2-byte port number, in network byte
+ * order, followed by the null-terminated host name string.
+ */
+ port_buffer = htons(db_rep->my_addr.port);
+ size = sizeof(port_buffer) +
+ (hlen = strlen(db_rep->my_addr.host) + 1);
+ if ((ret = __os_malloc(dbenv, size, &ptr)) != 0)
+ return (ret);
+
+ DB_INIT_DBT(*dbt, ptr, size);
+
+ memcpy(ptr, &port_buffer, sizeof(port_buffer));
+ ptr = &ptr[sizeof(port_buffer)];
+ memcpy(ptr, db_rep->my_addr.host, hlen);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __repmgr_timeval_cmp
+ * PUBLIC: __P((repmgr_timeval_t *, repmgr_timeval_t *));
+ */
+int
+__repmgr_timeval_cmp(a, b)
+ repmgr_timeval_t *a, *b;
+{
+ if (a->tv_sec == b->tv_sec) {
+ if (a->tv_usec == b->tv_usec)
+ return (0);
+ else
+ return (a->tv_usec < b->tv_usec ? -1 : 1);
+ } else
+ return (a->tv_sec < b->tv_sec ? -1 : 1);
+}
+
+/*
+ * Provide the appropriate value for nsites, the number of sites in the
+ * replication group. If the application has specified a value, use that.
+ * Otherwise, just use the number of sites we know of.
+ *
+ * PUBLIC: u_int __repmgr_get_nsites __P((DB_REP *));
+ */
+u_int
+__repmgr_get_nsites(db_rep)
+ DB_REP *db_rep;
+{
+ if (db_rep->config_nsites > 0)
+ return ((u_int)db_rep->config_nsites);
+
+ /*
+ * The number of other sites in our table, plus 1 to count ourself.
+ */
+ return (db_rep->site_cnt + 1);
+}
+
+/*
+ * PUBLIC: void __repmgr_thread_failure __P((DB_ENV *, int));
+ */
+void
+__repmgr_thread_failure(dbenv, why)
+ DB_ENV *dbenv;
+ int why;
+{
+ (void)__repmgr_stop_threads(dbenv);
+ (void)__db_panic(dbenv, why);
+}
+
+/*
+ * Format a printable representation of a site location, suitable for inclusion
+ * in an error message. The buffer must be at least as big as
+ * MAX_SITE_LOC_STRING.
+ *
+ * PUBLIC: char *__repmgr_format_eid_loc __P((DB_REP *, int, char *));
+ */
+char *
+__repmgr_format_eid_loc(db_rep, eid, buffer)
+ DB_REP *db_rep;
+ int eid;
+ char *buffer;
+{
+ if (IS_VALID_EID(eid))
+ return (__repmgr_format_site_loc(SITE_FROM_EID(eid), buffer));
+
+ snprintf(buffer, MAX_SITE_LOC_STRING, "(unidentified site)");
+ return (buffer);
+}
+
+/*
+ * PUBLIC: char *__repmgr_format_site_loc __P((REPMGR_SITE *, char *));
+ */
+char *
+__repmgr_format_site_loc(site, buffer)
+ REPMGR_SITE *site;
+ char *buffer;
+{
+ snprintf(buffer, MAX_SITE_LOC_STRING, "site %s:%lu",
+ site->net_addr.host, (u_long)site->net_addr.port);
+ return (buffer);
+}
diff --git a/db/repmgr/repmgr_windows.c b/db/repmgr/repmgr_windows.c
new file mode 100644
index 000000000..20c290665
--- /dev/null
+++ b/db/repmgr/repmgr_windows.c
@@ -0,0 +1,708 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: repmgr_windows.c,v 1.14 2006/09/11 15:15:20 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#define __INCLUDE_NETWORKING 1
+#include "db_int.h"
+
+typedef struct __ack_waiter {
+ HANDLE event;
+ const DB_LSN *lsnp;
+ struct __ack_waiter *next_free;
+} ACK_WAITER;
+
+#define WAITER_SLOT_IN_USE(w) ((w)->lsnp != NULL)
+
+/*
+ * Array slots [0:next_avail-1] are initialized, and either in use or on the
+ * free list. Slots beyond that are virgin territory, whose memory contents
+ * could be garbage. In particular, note that slots [0:next_avail-1] have a
+ * Win32 Event Object created for them, which have to be freed when cleaning up
+ * this data structure.
+ *
+ * "first_free" points to a list of not-in-use slots threaded through the first
+ * section of the array.
+ */
+struct __ack_waiters_table {
+ struct __ack_waiter *array;
+ int size;
+ int next_avail;
+ struct __ack_waiter *first_free;
+};
+
+static int allocate_wait_slot __P((DB_ENV *, ACK_WAITER **));
+static void free_wait_slot __P((DB_ENV *, ACK_WAITER *));
+static int handle_completion __P((DB_ENV *, REPMGR_CONNECTION *));
+static int finish_connecting __P((DB_ENV *, REPMGR_CONNECTION *,
+ LPWSANETWORKEVENTS));
+
+int
+__repmgr_thread_start(dbenv, runnable)
+ DB_ENV *dbenv;
+ REPMGR_RUNNABLE *runnable;
+{
+ HANDLE thread_id;
+
+ runnable->finished = FALSE;
+
+ thread_id = CreateThread(NULL, 0,
+ (LPTHREAD_START_ROUTINE)runnable->run, dbenv, 0, NULL);
+ if (thread_id == NULL)
+ return (GetLastError());
+ runnable->thread_id = thread_id;
+ return (0);
+}
+
+int
+__repmgr_thread_join(thread)
+ REPMGR_RUNNABLE *thread;
+{
+ if (WaitForSingleObject(thread->thread_id, INFINITE) == WAIT_OBJECT_0)
+ return (0);
+ return (GetLastError());
+}
+
+int __repmgr_set_nonblocking(s)
+ SOCKET s;
+{
+ int ret;
+ u_long arg;
+
+ arg = 1; /* any non-zero value */
+ if ((ret = ioctlsocket(s, FIONBIO, &arg)) == SOCKET_ERROR)
+ return (WSAGetLastError());
+ return (0);
+}
+
+/*
+ * Wake any send()-ing threads waiting for an acknowledgement.
+ *
+ * !!!
+ * Caller must hold the repmgr->mutex, if this thread synchronization is to work
+ * properly.
+ */
+int
+__repmgr_wake_waiting_senders(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ ACK_WAITER *slot;
+ int i, ret;
+
+ ret = 0;
+ db_rep = dbenv->rep_handle;
+ for (i=0; i<db_rep->waiters->next_avail; i++) {
+ slot = &db_rep->waiters->array[i];
+ if (!WAITER_SLOT_IN_USE(slot))
+ continue;
+ if (__repmgr_is_permanent(dbenv, slot->lsnp))
+ if (!SetEvent(slot->event) && ret == 0)
+ ret = GetLastError();
+ }
+ return (ret);
+}
+
+/*
+ * !!!
+ * Caller must hold mutex.
+ */
+int
+__repmgr_await_ack(dbenv, lsnp)
+ DB_ENV *dbenv;
+ const DB_LSN *lsnp;
+{
+ DB_REP *db_rep;
+ ACK_WAITER *me;
+ DWORD ret;
+ DWORD timeout;
+
+ db_rep = dbenv->rep_handle;
+
+ if ((ret = allocate_wait_slot(dbenv, &me)) != 0)
+ goto err;
+
+ /* convert time-out from microseconds to milliseconds, rounding up */
+ timeout = db_rep->ack_timeout > 0 ? ((db_rep->ack_timeout+999) / 1000) :
+ INFINITE;
+ me->lsnp = lsnp;
+ if ((ret = SignalObjectAndWait(db_rep->mutex, me->event, timeout,
+ FALSE)) == WAIT_FAILED) {
+ ret = GetLastError();
+ } else if (ret == WAIT_TIMEOUT)
+ ret = DB_REP_UNAVAIL;
+ else
+ DB_ASSERT(dbenv, ret == WAIT_OBJECT_0);
+
+ LOCK_MUTEX(db_rep->mutex);
+ free_wait_slot(dbenv, me);
+
+err:
+ return (ret);
+}
+
+/*
+ * !!!
+ * Caller must hold the mutex.
+ */
+static int
+allocate_wait_slot(dbenv, resultp)
+ DB_ENV *dbenv;
+ ACK_WAITER **resultp;
+{
+ DB_REP *db_rep;
+ ACK_WAITERS_TABLE *table;
+ ACK_WAITER *w;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+ table = db_rep->waiters;
+ if (table->first_free == NULL) {
+ if (table->next_avail >= table->size) {
+ /*
+ * Grow the array.
+ */
+ table->size *= 2;
+ w = table->array;
+ if ((ret = __os_realloc(dbenv, table->size * sizeof(*w),
+ &w)) != 0)
+ return (ret);
+ table->array = w;
+ }
+ /*
+ * Here if, one way or another, we're good to go for using the
+ * next slot (for the first time).
+ */
+ w = &table->array[table->next_avail++];
+ if ((w->event = CreateEvent(NULL, FALSE, FALSE, NULL)) ==
+ NULL) {
+ /*
+ * Maintain the sanctity of our rule that
+ * [0:next_avail-1] contain valid Event Objects.
+ */
+ --table->next_avail;
+ return (GetLastError());
+ }
+ } else {
+ w = table->first_free;
+ table->first_free = w->next_free;
+ }
+ *resultp = w;
+ return (0);
+}
+
+static void
+free_wait_slot(dbenv, slot)
+ DB_ENV *dbenv;
+ ACK_WAITER *slot;
+{
+ DB_REP *db_rep;
+
+ db_rep = dbenv->rep_handle;
+
+ slot->lsnp = NULL; /* show it's not in use */
+ slot->next_free = db_rep->waiters->first_free;
+ db_rep->waiters->first_free = slot;
+}
+
+/*
+ * Make resource allocation an all-or-nothing affair, outside of this and the
+ * close_sync function. db_rep->waiters should be non-NULL iff all of these
+ * resources have been created.
+ */
+int
+__repmgr_init_sync(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+#define INITIAL_ALLOCATION 5 /* arbitrary size */
+ ACK_WAITERS_TABLE *table;
+ int ret;
+
+ db_rep->signaler = db_rep->queue_nonempty = db_rep->check_election =
+ db_rep->mutex = NULL;
+ table = NULL;
+
+ if ((db_rep->signaler = CreateEvent(NULL, /* security attr */
+ FALSE, /* (not) of the manual reset variety */
+ FALSE, /* (not) initially signaled */
+ NULL)) == NULL) /* name */
+ goto geterr;
+
+ if ((db_rep->queue_nonempty = CreateEvent(NULL, TRUE, FALSE, NULL))
+ == NULL)
+ goto geterr;
+
+ if ((db_rep->check_election = CreateEvent(NULL, FALSE, FALSE, NULL))
+ == NULL)
+ goto geterr;
+
+ if ((db_rep->mutex = CreateMutex(NULL, FALSE, NULL)) == NULL)
+ goto geterr;
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(ACK_WAITERS_TABLE), &table))
+ != 0)
+ goto err;
+
+ if ((ret = __os_calloc(dbenv, INITIAL_ALLOCATION, sizeof(ACK_WAITER),
+ &table->array)) != 0)
+ goto err;
+
+ table->size = INITIAL_ALLOCATION;
+ table->first_free = NULL;
+ table->next_avail = 0;
+
+ /* There's a restaurant joke in there somewhere. */
+ db_rep->waiters = table;
+ return (0);
+
+geterr:
+ ret = GetLastError();
+err:
+ if (db_rep->check_election != NULL)
+ CloseHandle(db_rep->check_election);
+ if (db_rep->queue_nonempty != NULL)
+ CloseHandle(db_rep->queue_nonempty);
+ if (db_rep->signaler != NULL)
+ CloseHandle(db_rep->signaler);
+ if (db_rep->mutex != NULL)
+ CloseHandle(db_rep->mutex);
+ if (table != NULL)
+ __os_free(dbenv, table);
+ db_rep->waiters = NULL;
+ return (ret);
+}
+
+int
+__repmgr_close_sync(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ int i, ret;
+
+ db_rep = dbenv->rep_handle;
+ if (!(REPMGR_SYNC_INITED(db_rep)))
+ return (0);
+
+ ret = 0;
+ for (i = 0; i < db_rep->waiters->next_avail; i++) {
+ if (!CloseHandle(db_rep->waiters->array[i].event) && ret == 0)
+ ret = GetLastError();
+ }
+ __os_free(dbenv, db_rep->waiters->array);
+ __os_free(dbenv, db_rep->waiters);
+
+ if (!CloseHandle(db_rep->check_election) && ret == 0)
+ ret = GetLastError();
+
+ if (!CloseHandle(db_rep->queue_nonempty) && ret == 0)
+ ret = GetLastError();
+
+ if (!CloseHandle(db_rep->signaler) && ret == 0)
+ ret = GetLastError();
+
+ if (!CloseHandle(db_rep->mutex) && ret == 0)
+ ret = GetLastError();
+
+ db_rep->waiters = NULL;
+ return (ret);
+}
+
+/*
+ * Performs net-related resource initialization other than memory initialization
+ * and allocation. A valid db_rep->listen_fd acts as the "all-or-nothing"
+ * sentinel signifying that these resources are allocated (except that now the
+ * new wsa_inited flag may be used to indicate that WSAStartup has already been
+ * called).
+ */
+int
+__repmgr_net_init(dbenv, db_rep)
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+{
+ int ret;
+
+ /* Initialize the Windows sockets DLL. */
+ if (!db_rep->wsa_inited && (ret = __repmgr_wsa_init(dbenv)) != 0)
+ goto err;
+
+ if ((ret = __repmgr_listen(dbenv)) == 0)
+ return (0);
+
+ if (WSACleanup() == SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "WSACleanup");
+ }
+
+err: db_rep->listen_fd = INVALID_SOCKET;
+ return (ret);
+}
+
+/*
+ * __repmgr_wsa_init --
+ * Initialize the Windows sockets DLL.
+ *
+ * PUBLIC: int __repmgr_wsa_init __P((DB_ENV *));
+ */
+int
+__repmgr_wsa_init(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ WSADATA wsaData;
+ int ret;
+
+ db_rep = dbenv->rep_handle;
+
+ if ((ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) {
+ __db_err(dbenv, ret, "unable to initialize Windows networking");
+ return (ret);
+ }
+ db_rep->wsa_inited = TRUE;
+
+ return (0);
+}
+
+int
+__repmgr_lock_mutex(mutex)
+ mgr_mutex_t *mutex;
+{
+ if (WaitForSingleObject(*mutex, INFINITE) == WAIT_OBJECT_0)
+ return (0);
+ return (GetLastError());
+}
+
+int
+__repmgr_unlock_mutex(mutex)
+ mgr_mutex_t *mutex;
+{
+ if (ReleaseMutex(*mutex))
+ return (0);
+ return (GetLastError());
+}
+
+int
+__repmgr_signal(v)
+ cond_var_t *v;
+{
+ return (SetEvent(*v) ? 0 : GetLastError());
+}
+
+int
+__repmgr_wake_main_thread(dbenv)
+ DB_ENV *dbenv;
+{
+ if (!SetEvent(dbenv->rep_handle->signaler))
+ return (GetLastError());
+ return (0);
+}
+
+int
+__repmgr_writev(fd, iovec, buf_count, byte_count_p)
+ socket_t fd;
+ db_iovec_t *iovec;
+ int buf_count;
+ size_t *byte_count_p;
+{
+ DWORD bytes;
+
+ if (WSASend(fd, iovec,
+ (DWORD)buf_count, &bytes, 0, NULL, NULL) == SOCKET_ERROR)
+ return (net_errno);
+
+ *byte_count_p = (size_t)bytes;
+ return (0);
+}
+
+int
+__repmgr_readv(fd, iovec, buf_count, xfr_count_p)
+ socket_t fd;
+ db_iovec_t *iovec;
+ int buf_count;
+ size_t *xfr_count_p;
+{
+ DWORD bytes, flags;
+
+ flags = 0;
+ if (WSARecv(fd, iovec,
+ (DWORD)buf_count, &bytes, &flags, NULL, NULL) == SOCKET_ERROR)
+ return (net_errno);
+
+ *xfr_count_p = (size_t)bytes;
+ return (0);
+}
+
+/*
+ * Calculate the time duration from now til "when", in the form of an integer
+ * (suitable for WSAWaitForMultipleEvents()), clipping the result at 0 (i.e.,
+ * avoid a negative result).
+ */
+void
+__repmgr_timeval_diff_current(dbenv, when, result)
+ DB_ENV *dbenv;
+ repmgr_timeval_t *when;
+ select_timeout_t *result;
+{
+ repmgr_timeval_t now;
+
+ __os_clock(dbenv, &now.tv_sec, &now.tv_usec);
+ if (__repmgr_timeval_cmp(when, &now) <= 0)
+ *result = 0;
+ else
+ *result = (when->tv_sec - now.tv_sec) * MS_PER_SEC +
+ (when->tv_usec - now.tv_usec) / USEC_PER_MS;
+}
+
+int
+__repmgr_select_loop(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REPMGR_CONNECTION *conn, *next;
+ REPMGR_RETRY *retry;
+ select_timeout_t timeout;
+ WSAEVENT events[WSA_MAXIMUM_WAIT_EVENTS];
+ REPMGR_CONNECTION *connections[WSA_MAXIMUM_WAIT_EVENTS];
+ DWORD nevents, ret;
+ int flow_control, i;
+ WSAEVENT listen_event;
+ WSANETWORKEVENTS net_events;
+
+ db_rep = dbenv->rep_handle;
+
+ if ((listen_event = WSACreateEvent()) == WSA_INVALID_EVENT) {
+ __db_err(
+ dbenv, net_errno, "can't create event for listen socket");
+ return (net_errno);
+ }
+ if (WSAEventSelect(db_rep->listen_fd, listen_event, FD_ACCEPT) ==
+ SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "can't enable event for listener");
+ goto out;
+ }
+
+ LOCK_MUTEX(db_rep->mutex);
+ if ((ret = __repmgr_first_try_connections(dbenv)) != 0)
+ goto unlock;
+ flow_control = FALSE;
+ for (;;) {
+ /* Start with the two events that we always wait for. */
+ events[0] = db_rep->signaler;
+ events[1] = listen_event;
+ nevents = 2;
+
+ /*
+ * Add an event for each surviving socket that we're interested
+ * in. (For now [until we implement flow control], that's all
+ * of them, in one form or another.)
+ * Note that even if we're suffering flow control, we
+ * nevertheless still read if we haven't even yet gotten a
+ * handshake. Why? (1) Handshakes are important; and (2) they
+ * don't hurt anything flow-control-wise.
+ * Loop just like TAILQ_FOREACH, except that we need to be
+ * able to unlink a list entry.
+ */
+ for (conn = TAILQ_FIRST(&db_rep->connections);
+ conn != NULL;
+ conn = next) {
+ next = TAILQ_NEXT(conn, entries);
+ if (F_ISSET(conn, CONN_DEFUNCT)) {
+ __repmgr_cleanup_connection(dbenv, conn);
+ continue;
+ }
+ if (F_ISSET(conn, CONN_CONNECTING) ||
+ !STAILQ_EMPTY(&conn->outbound_queue) ||
+ (!flow_control || !IS_VALID_EID(conn->eid))) {
+ events[nevents] = conn->event_object;
+ connections[nevents++] = conn;
+ }
+ }
+
+ /*
+ * Decide how long to wait based on when it will next be time to
+ * retry an idle connection. (List items are in order, so we
+ * only have to examine the first one.)
+ */
+ if (TAILQ_EMPTY(&db_rep->retries))
+ timeout = WSA_INFINITE;
+ else {
+ retry = TAILQ_FIRST(&db_rep->retries);
+
+ __repmgr_timeval_diff_current(
+ dbenv, &retry->time, &timeout);
+ }
+
+ UNLOCK_MUTEX(db_rep->mutex);
+ ret = WSAWaitForMultipleEvents(nevents, events, FALSE, timeout,
+ FALSE);
+ if (db_rep->finished) {
+ ret = 0;
+ goto out;
+ }
+ LOCK_MUTEX(db_rep->mutex);
+
+ if (ret >= WSA_WAIT_EVENT_0 &&
+ ret < WSA_WAIT_EVENT_0 + nevents) {
+ switch (i = ret - WSA_WAIT_EVENT_0) {
+ case 0:
+ /* Another thread woke us. */
+ break;
+ case 1:
+ if ((ret = WSAEnumNetworkEvents(
+ db_rep->listen_fd, listen_event,
+ &net_events)) == SOCKET_ERROR) {
+ ret = net_errno;
+ goto unlock;
+ }
+ DB_ASSERT(dbenv,
+ net_events.lNetworkEvents & FD_ACCEPT);
+ if ((ret = net_events.iErrorCode[FD_ACCEPT_BIT])
+ != 0)
+ goto unlock;
+ if ((ret = __repmgr_accept(dbenv)) != 0)
+ goto unlock;
+ break;
+ default:
+ if ((ret = handle_completion(dbenv,
+ connections[i])) != 0)
+ goto unlock;
+ break;
+ }
+ } else if (ret == WSA_WAIT_TIMEOUT) {
+ if ((ret = __repmgr_retry_connections(dbenv)) != 0)
+ goto unlock;
+ } else if (ret == WSA_WAIT_FAILED) {
+ ret = net_errno;
+ goto unlock;
+ }
+ }
+
+unlock:
+ UNLOCK_MUTEX(db_rep->mutex);
+out:
+ if (!CloseHandle(listen_event) && ret == 0)
+ ret = GetLastError();
+ return (ret);
+}
+
+static int
+handle_completion(dbenv, conn)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+{
+ int ret;
+ WSANETWORKEVENTS events;
+
+ if ((ret = WSAEnumNetworkEvents(conn->fd, conn->event_object, &events))
+ == SOCKET_ERROR) {
+ __db_err(dbenv, net_errno, "EnumNetworkEvents");
+ ret = DB_REP_UNAVAIL;
+ goto err;
+ }
+
+ if (F_ISSET(conn, CONN_CONNECTING)) {
+ if ((ret = finish_connecting(dbenv, conn, &events)) != 0)
+ goto err;
+ } else { /* Check both writing and reading. */
+ if (events.lNetworkEvents & FD_CLOSE) {
+ __db_err(dbenv,
+ events.iErrorCode[FD_CLOSE_BIT],
+ "connection closed");
+ ret = DB_REP_UNAVAIL;
+ goto err;
+ }
+
+ if (events.lNetworkEvents & FD_WRITE) {
+ if (events.iErrorCode[FD_WRITE_BIT] != 0) {
+ __db_err(dbenv,
+ events.iErrorCode[FD_WRITE_BIT],
+ "error writing");
+ ret = DB_REP_UNAVAIL;
+ goto err;
+ } else if ((ret =
+ __repmgr_write_some(dbenv, conn)) != 0)
+ goto err;
+ }
+
+ if (events.lNetworkEvents & FD_READ) {
+ if (events.iErrorCode[FD_READ_BIT] != 0) {
+ __db_err(dbenv,
+ events.iErrorCode[FD_READ_BIT],
+ "error reading");
+ ret = DB_REP_UNAVAIL;
+ goto err;
+ } else if ((ret =
+ __repmgr_read_from_site(dbenv, conn)) != 0)
+ goto err;
+ }
+ }
+
+ return (0);
+
+err: if (ret == DB_REP_UNAVAIL)
+ return (__repmgr_bust_connection(dbenv, conn, TRUE));
+ return (ret);
+}
+
+static int
+finish_connecting(dbenv, conn, events)
+ DB_ENV *dbenv;
+ REPMGR_CONNECTION *conn;
+ LPWSANETWORKEVENTS events;
+{
+ DB_REP *db_rep;
+ u_int eid;
+/* char reason[100]; */
+ int ret/*, t_ret*/;
+/* DWORD_PTR values[1]; */
+
+ if (!(events->lNetworkEvents & FD_CONNECT)) {
+ /* TODO: Is this even possible? */
+ return (0);
+ }
+
+ F_CLR(conn, CONN_CONNECTING);
+
+ if ((ret = events->iErrorCode[FD_CONNECT_BIT]) != 0) {
+/* t_ret = FormatMessage( */
+/* FORMAT_MESSAGE_IGNORE_INSERTS | */
+/* FORMAT_MESSAGE_FROM_SYSTEM | */
+/* FORMAT_MESSAGE_ARGUMENT_ARRAY, */
+/* NULL, ret, 0, (LPTSTR)reason, sizeof(reason), values); */
+/* __db_err(dbenv/\*, ret*\/, "connecting: %s", */
+/* reason); */
+/* LocalFree(reason); */
+ __db_err(dbenv, ret, "connecting");
+ goto err;
+ }
+
+ if (WSAEventSelect(conn->fd, conn->event_object, FD_READ | FD_CLOSE) ==
+ SOCKET_ERROR) {
+ ret = net_errno;
+ __db_err(dbenv, ret, "setting event bits for reading");
+ return (ret);
+ }
+
+ return (__repmgr_send_handshake(dbenv, conn));
+
+err:
+ db_rep = dbenv->rep_handle;
+ eid = conn->eid;
+ DB_ASSERT(dbenv, IS_VALID_EID(eid));
+
+ if (ADDR_LIST_NEXT(&SITE_FROM_EID(eid)->net_addr) == NULL)
+ return (DB_REP_UNAVAIL);
+
+ DB_ASSERT(dbenv, !TAILQ_EMPTY(&db_rep->connections));
+ __repmgr_cleanup_connection(dbenv, conn);
+ ret = __repmgr_connect_site(dbenv, eid);
+ DB_ASSERT(dbenv, ret != DB_REP_UNAVAIL);
+ return (ret);
+}
diff --git a/db/rpc_client/client.c b/db/rpc_client/client.c
index d96721ece..e31fac848 100644
--- a/db/rpc_client/client.c
+++ b/db/rpc_client/client.c
@@ -1,47 +1,41 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: client.c,v 1.60 2004/09/21 16:09:54 sue Exp $
+ * $Id: client.c,v 12.7 2006/08/24 14:46:27 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/txn.h"
+#ifndef NO_SYSTEM_INCLUDES
#ifdef HAVE_VXWORKS
#include <rpcLib.h>
-#endif
+#else
#include <rpc/rpc.h>
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
#endif
-
+#endif
#include "db_server.h"
-
-#include "db_int.h"
-#include "dbinc/db_page.h"
-#include "dbinc/db_am.h"
-#include "dbinc/txn.h"
#include "dbinc_auto/rpc_client_ext.h"
static int __dbcl_c_destroy __P((DBC *));
static int __dbcl_txn_close __P((DB_ENV *));
/*
- * __dbcl_envrpcserver --
+ * __dbcl_env_set_rpc_server --
* Initialize an environment's server.
*
- * PUBLIC: int __dbcl_envrpcserver
+ * PUBLIC: int __dbcl_env_set_rpc_server
* PUBLIC: __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
*/
int
-__dbcl_envrpcserver(dbenv, clnt, host, tsec, ssec, flags)
+__dbcl_env_set_rpc_server(dbenv, clnt, host, tsec, ssec, flags)
DB_ENV *dbenv;
void *clnt;
const char *host;
@@ -55,12 +49,12 @@ __dbcl_envrpcserver(dbenv, clnt, host, tsec, ssec, flags)
#ifdef HAVE_VXWORKS
if (rpcTaskInit() != 0) {
- __db_err(dbenv, "Could not initialize VxWorks RPC");
+ __db_errx(dbenv, "Could not initialize VxWorks RPC");
return (ERROR);
}
#endif
if (RPC_ON(dbenv)) {
- __db_err(dbenv, "Already set an RPC handle");
+ __db_errx(dbenv, "Already set an RPC handle");
return (EINVAL);
}
/*
@@ -70,7 +64,7 @@ __dbcl_envrpcserver(dbenv, clnt, host, tsec, ssec, flags)
if (clnt == NULL) {
if ((cl = clnt_create((char *)host, DB_RPC_SERVERPROG,
DB_RPC_SERVERVERS, "tcp")) == NULL) {
- __db_err(dbenv, clnt_spcreateerror((char *)host));
+ __db_errx(dbenv, clnt_spcreateerror((char *)host));
return (DB_NOSERVER);
}
if (tsec != 0) {
@@ -94,8 +88,7 @@ __dbcl_envrpcserver(dbenv, clnt, host, tsec, ssec, flags)
* 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));
+ * PUBLIC: int __dbcl_env_close_wrap __P((DB_ENV *, u_int32_t));
*/
int
__dbcl_env_close_wrap(dbenv, flags)
@@ -130,11 +123,13 @@ __dbcl_env_open_wrap(dbenv, home, flags, mode)
int ret;
if (LF_ISSET(DB_THREAD)) {
- __db_err(dbenv, "DB_THREAD not allowed on RPC clients");
+ __db_errx(dbenv, "DB_THREAD not allowed on RPC clients");
return (EINVAL);
}
- if ((ret = __db_home(dbenv, home, flags)) != 0)
+
+ if ((ret = __env_config(dbenv, home, flags, mode)) != 0)
return (ret);
+
return (__dbcl_env_open(dbenv, dbenv->db_home, flags, mode));
}
@@ -158,10 +153,6 @@ __dbcl_db_open_wrap(dbp, txnp, name, subdb, type, flags, mode)
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));
}
@@ -338,12 +329,7 @@ __dbcl_txn_setup(dbenv, txn, parent, id)
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;
+ __dbcl_txn_init(txn);
txn->flags = TXN_MALLOC;
}
@@ -425,16 +411,17 @@ __dbcl_c_setup(cl_id, dbp, dbcp)
*/
tmpdbc.dbp = NULL;
tmpdbc.cl_id = cl_id;
- (void)__dbcl_dbc_close(&tmpdbc);
+ (void)__dbcl_dbc_c_close(&tmpdbc);
return (ret);
}
- dbc->c_close = __dbcl_dbc_close;
- dbc->c_count = __dbcl_dbc_count;
- 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;
+
+ __dbcl_dbc_init(dbc);
+
+ /*
+ * !!!
+ * Set up the local destroy function -- we're not really
+ * an access method, but it does what we need.
+ */
dbc->c_am_destroy = __dbcl_c_destroy;
}
dbc->cl_id = cl_id;
diff --git a/db/rpc_client/gen_client.c b/db/rpc_client/gen_client.c
index 72a3f7471..ea1fb8f0f 100644
--- a/db/rpc_client/gen_client.c
+++ b/db/rpc_client/gen_client.c
@@ -1,85 +1,74 @@
/* Do not edit: automatically built by gen_rpc.awk. */
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
#include <rpc/rpc.h>
-
-#include <string.h>
#endif
-
#include "db_server.h"
-
-#include "db_int.h"
#include "dbinc/txn.h"
#include "dbinc_auto/rpc_client_ext.h"
+static int __dbcl_dbp_illegal __P((DB *));
static int __dbcl_noserver __P((DB_ENV *));
+static int __dbcl_txn_illegal __P((DB_TXN *));
static int
__dbcl_noserver(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "No server environment");
+ __db_errx(dbenv, "No Berkeley DB RPC server environment");
return (DB_NOSERVER);
}
-static int __dbcl_rpc_illegal __P((DB_ENV *, char *));
-
-static int
-__dbcl_rpc_illegal(dbenv, name)
+/*
+ * __dbcl_dbenv_illegal --
+ * DB_ENV method not supported under RPC.
+ *
+ * PUBLIC: int __dbcl_dbenv_illegal __P((DB_ENV *));
+ */
+int
+__dbcl_dbenv_illegal(dbenv)
DB_ENV *dbenv;
- char *name;
{
- __db_err(dbenv, "%s method unsupported in RPC environments", name);
+ __db_errx(dbenv,
+ "Interface not supported by Berkeley DB RPC client environments");
return (DB_OPNOTSUP);
}
/*
- * PUBLIC: int __dbcl_env_alloc __P((DB_ENV *, void *(*)(size_t),
- * PUBLIC: void *(*)(void *, size_t), void (*)(void *)));
+ * __dbcl_dbp_illegal --
+ * DB method not supported under RPC.
*/
-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 *));
+static int
+__dbcl_dbp_illegal(dbp)
+ DB *dbp;
{
- COMPQUIET(func0, 0);
- COMPQUIET(func1, 0);
- COMPQUIET(func2, 0);
- return (__dbcl_rpc_illegal(dbenv, "env_alloc"));
+ return (__dbcl_dbenv_illegal(dbp->dbenv));
}
/*
- * PUBLIC: int __dbcl_set_app_dispatch __P((DB_ENV *, int (*)(DB_ENV *, DBT *,
- * PUBLIC: DB_LSN *, db_recops)));
+ * __dbcl_txn_illegal --
+ * DB_TXN method not supported under RPC.
*/
-int
-__dbcl_set_app_dispatch(dbenv, func0)
- DB_ENV * dbenv;
- int (*func0) __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+static int
+__dbcl_txn_illegal(txn)
+ DB_TXN *txn;
{
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_app_dispatch"));
+ return (__dbcl_dbenv_illegal(txn->mgrp->dbenv));
}
/*
- * PUBLIC: int __dbcl_env_get_cachesize __P((DB_ENV *, u_int32_t *,
- * PUBLIC: u_int32_t *, int *));
+ * PUBLIC: int __dbcl_env_create __P((DB_ENV *, long));
*/
int
-__dbcl_env_get_cachesize(dbenv, gbytesp, bytesp, ncachep)
+__dbcl_env_create(dbenv, timeout)
DB_ENV * dbenv;
- u_int32_t * gbytesp;
- u_int32_t * bytesp;
- int * ncachep;
+ long timeout;
{
CLIENT *cl;
- __env_get_cachesize_msg msg;
- __env_get_cachesize_reply *replyp = NULL;
+ __env_create_msg msg;
+ __env_create_reply *replyp = NULL;
int ret;
ret = 0;
@@ -88,43 +77,32 @@ __dbcl_env_get_cachesize(dbenv, gbytesp, bytesp, ncachep)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.timeout = timeout;
- replyp = __db_env_get_cachesize_4003(&msg, cl);
+ replyp = __db_env_create_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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;
+ ret = __dbcl_env_create_ret(dbenv, timeout, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___env_get_cachesize_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_create_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_env_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ * PUBLIC: int __dbcl_env_cdsgroup_begin __P((DB_ENV *, DB_TXN **));
*/
int
-__dbcl_env_cachesize(dbenv, gbytes, bytes, ncache)
+__dbcl_env_cdsgroup_begin(dbenv, txnpp)
DB_ENV * dbenv;
- u_int32_t gbytes;
- u_int32_t bytes;
- int ncache;
+ DB_TXN ** txnpp;
{
CLIENT *cl;
- __env_cachesize_msg msg;
- __env_cachesize_reply *replyp = NULL;
+ __env_cdsgroup_begin_msg msg;
+ __env_cdsgroup_begin_reply *replyp = NULL;
int ret;
ret = 0;
@@ -133,24 +111,18 @@ __dbcl_env_cachesize(dbenv, gbytes, bytes, ncache)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
- msg.gbytes = gbytes;
- msg.bytes = bytes;
- msg.ncache = ncache;
+ msg.dbenvcl_id = dbenv->cl_id;
- replyp = __db_env_cachesize_4003(&msg, cl);
+ replyp = __db_env_cdsgroup_begin_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
+ ret = __dbcl_env_cdsgroup_begin_ret(dbenv, txnpp, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___env_cachesize_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_cdsgroup_begin_reply, (void *)replyp);
return (ret);
}
@@ -173,15 +145,12 @@ __dbcl_env_close(dbenv, flags)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
msg.flags = flags;
- replyp = __db_env_close_4003(&msg, cl);
+ replyp = __db_env_close_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -193,64 +162,6 @@ out:
}
/*
- * PUBLIC: int __dbcl_env_create __P((DB_ENV *, long));
- */
-int
-__dbcl_env_create(dbenv, timeout)
- DB_ENV * dbenv;
- long timeout;
-{
- 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_4003(&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;
- const char * dir;
-{
- COMPQUIET(dir, NULL);
- 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));
*/
@@ -273,10 +184,7 @@ __dbcl_env_dbremove(dbenv, txnp, name, subdb, flags)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (txnp == NULL)
msg.txnpcl_id = 0;
else
@@ -291,9 +199,9 @@ __dbcl_env_dbremove(dbenv, txnp, name, subdb, flags)
msg.subdb = (char *)subdb;
msg.flags = flags;
- replyp = __db_env_dbremove_4003(&msg, cl);
+ replyp = __db_env_dbremove_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -328,10 +236,7 @@ __dbcl_env_dbrename(dbenv, txnp, name, subdb, newname, flags)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (txnp == NULL)
msg.txnpcl_id = 0;
else
@@ -350,9 +255,9 @@ __dbcl_env_dbrename(dbenv, txnp, name, subdb, newname, flags)
msg.newname = (char *)newname;
msg.flags = flags;
- replyp = __db_env_dbrename_4003(&msg, cl);
+ replyp = __db_env_dbrename_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -364,16 +269,19 @@ out:
}
/*
- * PUBLIC: int __dbcl_env_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
+ * PUBLIC: int __dbcl_env_get_cachesize __P((DB_ENV *, u_int32_t *,
+ * PUBLIC: u_int32_t *, int *));
*/
int
-__dbcl_env_get_encrypt_flags(dbenv, flagsp)
+__dbcl_env_get_cachesize(dbenv, gbytesp, bytesp, ncachep)
DB_ENV * dbenv;
- u_int32_t * flagsp;
+ u_int32_t * gbytesp;
+ u_int32_t * bytesp;
+ int * ncachep;
{
CLIENT *cl;
- __env_get_encrypt_flags_msg msg;
- __env_get_encrypt_flags_reply *replyp = NULL;
+ __env_get_cachesize_msg msg;
+ __env_get_cachesize_reply *replyp = NULL;
int ret;
ret = 0;
@@ -382,38 +290,38 @@ __dbcl_env_get_encrypt_flags(dbenv, flagsp)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
- replyp = __db_env_get_encrypt_flags_4003(&msg, cl);
+ replyp = __db_env_get_cachesize_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
- if (flagsp != NULL)
- *flagsp = replyp->flags;
+ 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_encrypt_flags_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_get_cachesize_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_env_encrypt __P((DB_ENV *, const char *, u_int32_t));
+ * PUBLIC: int __dbcl_env_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
*/
int
-__dbcl_env_encrypt(dbenv, passwd, flags)
+__dbcl_env_get_encrypt_flags(dbenv, flagsp)
DB_ENV * dbenv;
- const char * passwd;
- u_int32_t flags;
+ u_int32_t * flagsp;
{
CLIENT *cl;
- __env_encrypt_msg msg;
- __env_encrypt_reply *replyp = NULL;
+ __env_get_encrypt_flags_msg msg;
+ __env_get_encrypt_flags_reply *replyp = NULL;
int ret;
ret = 0;
@@ -422,43 +330,24 @@ __dbcl_env_encrypt(dbenv, passwd, flags)
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;
+ msg.dbenvcl_id = dbenv->cl_id;
- replyp = __db_env_encrypt_4003(&msg, cl);
+ replyp = __db_env_get_encrypt_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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_encrypt_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_get_encrypt_flags_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;
- void (*func0) __P((DB_ENV *, int, int));
-{
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "env_set_feedback"));
-}
-
-/*
* PUBLIC: int __dbcl_env_get_flags __P((DB_ENV *, u_int32_t *));
*/
int
@@ -477,14 +366,11 @@ __dbcl_env_get_flags(dbenv, flagsp)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
- replyp = __db_env_get_flags_4003(&msg, cl);
+ replyp = __db_env_get_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -498,355 +384,6 @@ out:
}
/*
- * PUBLIC: int __dbcl_env_flags __P((DB_ENV *, u_int32_t, int));
- */
-int
-__dbcl_env_flags(dbenv, flags, onoff)
- DB_ENV * dbenv;
- u_int32_t flags;
- int onoff;
-{
- CLIENT *cl;
- __env_flags_msg msg;
- __env_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;
- msg.flags = flags;
- msg.onoff = onoff;
-
- replyp = __db_env_flags_4003(&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_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;
- u_int32_t bsize;
-{
- COMPQUIET(bsize, 0);
- 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;
- const char * dir;
-{
- COMPQUIET(dir, NULL);
- 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;
- u_int32_t max;
-{
- COMPQUIET(max, 0);
- 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;
- u_int8_t * conflicts;
- int modes;
-{
- COMPQUIET(conflicts, 0);
- COMPQUIET(modes, 0);
- 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;
- u_int32_t detect;
-{
- COMPQUIET(detect, 0);
- 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;
- u_int32_t max;
-{
- COMPQUIET(max, 0);
- 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;
- u_int32_t max;
-{
- COMPQUIET(max, 0);
- 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;
- u_int32_t max;
-{
- COMPQUIET(max, 0);
- 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;
- u_int32_t max;
-{
- COMPQUIET(max, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_lk_max_objects"));
-}
-
-/*
- * PUBLIC: int __dbcl_get_mp_max_openfd __P((DB_ENV *, int *));
- */
-int
-__dbcl_get_mp_max_openfd(dbenv, nopenp)
- DB_ENV * dbenv;
- int * nopenp;
-{
- COMPQUIET(nopenp, 0);
- return (__dbcl_rpc_illegal(dbenv, "get_mp_max_openfd"));
-}
-
-/*
- * PUBLIC: int __dbcl_set_mp_max_openfd __P((DB_ENV *, int));
- */
-int
-__dbcl_set_mp_max_openfd(dbenv, nopen)
- DB_ENV * dbenv;
- int nopen;
-{
- COMPQUIET(nopen, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_mp_max_openfd"));
-}
-
-/*
- * PUBLIC: int __dbcl_get_mp_max_write __P((DB_ENV *, int *, int *));
- */
-int
-__dbcl_get_mp_max_write(dbenv, nwritep, nsleepp)
- DB_ENV * dbenv;
- int * nwritep;
- int * nsleepp;
-{
- COMPQUIET(nwritep, 0);
- COMPQUIET(nsleepp, 0);
- return (__dbcl_rpc_illegal(dbenv, "get_mp_max_write"));
-}
-
-/*
- * PUBLIC: int __dbcl_set_mp_max_write __P((DB_ENV *, int, int));
- */
-int
-__dbcl_set_mp_max_write(dbenv, nwrite, nsleep)
- DB_ENV * dbenv;
- int nwrite;
- int nsleep;
-{
- COMPQUIET(nwrite, 0);
- COMPQUIET(nsleep, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_mp_max_write"));
-}
-
-/*
- * 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;
- size_t mmapsize;
-{
- COMPQUIET(mmapsize, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_mp_mmapsize"));
-}
-
-/*
* PUBLIC: int __dbcl_env_get_home __P((DB_ENV *, const char * *));
*/
int
@@ -865,14 +402,11 @@ __dbcl_env_get_home(dbenv, homep)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
- replyp = __db_env_get_home_4003(&msg, cl);
+ replyp = __db_env_get_home_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -904,14 +438,11 @@ __dbcl_env_get_open_flags(dbenv, flagsp)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
- replyp = __db_env_get_open_flags_4003(&msg, cl);
+ replyp = __db_env_get_open_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -945,10 +476,7 @@ __dbcl_env_open(dbenv, home, flags, mode)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (home == NULL)
msg.home = "";
else
@@ -956,9 +484,9 @@ __dbcl_env_open(dbenv, home, flags, mode)
msg.flags = flags;
msg.mode = mode;
- replyp = __db_env_open_4003(&msg, cl);
+ replyp = __db_env_open_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -970,18 +498,6 @@ out:
}
/*
- * PUBLIC: int __dbcl_env_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
- */
-int
-__dbcl_env_paniccall(dbenv, func0)
- DB_ENV * dbenv;
- void (*func0) __P((DB_ENV *, int));
-{
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "env_paniccall"));
-}
-
-/*
* PUBLIC: int __dbcl_env_remove __P((DB_ENV *, const char *, u_int32_t));
*/
int
@@ -1001,19 +517,16 @@ __dbcl_env_remove(dbenv, home, flags)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (home == NULL)
msg.home = "";
else
msg.home = (char *)home;
msg.flags = flags;
- replyp = __db_env_remove_4003(&msg, cl);
+ replyp = __db_env_remove_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -1025,233 +538,57 @@ out:
}
/*
- * 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));
+ * PUBLIC: int __dbcl_env_set_cachesize __P((DB_ENV *, u_int32_t, u_int32_t,
+ * PUBLIC: int));
*/
int
-__dbcl_set_shm_key(dbenv, shm_key)
+__dbcl_env_set_cachesize(dbenv, gbytes, bytes, ncache)
DB_ENV * dbenv;
- long shm_key;
-{
- COMPQUIET(shm_key, 0);
- 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;
- const char * dir;
-{
- COMPQUIET(dir, NULL);
- return (__dbcl_rpc_illegal(dbenv, "set_tmp_dir"));
-}
-
-/*
- * PUBLIC: int __dbcl_get_tx_max __P((DB_ENV *, u_int32_t *));
- */
-int
-__dbcl_get_tx_max(dbenv, maxp)
- DB_ENV * dbenv;
- u_int32_t * maxp;
-{
- 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;
- u_int32_t max;
-{
- COMPQUIET(max, 0);
- 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;
- time_t * max;
-{
- COMPQUIET(max, 0);
- 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;
- u_int32_t which;
- int onoff;
-{
- COMPQUIET(which, 0);
- COMPQUIET(onoff, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_verbose"));
-}
-
-/*
- * PUBLIC: int __dbcl_txn_abort __P((DB_TXN *));
- */
-int
-__dbcl_txn_abort(txnp)
- DB_TXN * txnp;
+ u_int32_t gbytes;
+ u_int32_t bytes;
+ int ncache;
{
CLIENT *cl;
- __txn_abort_msg msg;
- __txn_abort_reply *replyp = NULL;
+ __env_set_cachesize_msg msg;
+ __env_set_cachesize_reply *replyp = NULL;
int ret;
- DB_ENV *dbenv;
ret = 0;
- dbenv = txnp->mgrp->dbenv;
if (dbenv == NULL || !RPC_ON(dbenv))
- return (__dbcl_noserver(NULL));
+ return (__dbcl_noserver(dbenv));
cl = (CLIENT *)dbenv->cl_handle;
- if (txnp == NULL)
- msg.txnpcl_id = 0;
- else
- msg.txnpcl_id = txnp->txnid;
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.gbytes = gbytes;
+ msg.bytes = bytes;
+ msg.ncache = ncache;
- replyp = __db_txn_abort_4003(&msg, cl);
+ replyp = __db_env_set_cachesize_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_txn_abort_ret(txnp, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___txn_abort_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_set_cachesize_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_env_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
*/
int
-__dbcl_txn_begin(dbenv, parent, txnpp, flags)
+__dbcl_env_set_encrypt(dbenv, passwd, flags)
DB_ENV * dbenv;
- DB_TXN * parent;
- DB_TXN ** txnpp;
+ const char * passwd;
u_int32_t flags;
{
CLIENT *cl;
- __txn_begin_msg msg;
- __txn_begin_reply *replyp = NULL;
+ __env_set_encrypt_msg msg;
+ __env_set_encrypt_reply *replyp = NULL;
int ret;
ret = 0;
@@ -1260,181 +597,157 @@ __dbcl_txn_begin(dbenv, parent, txnpp, flags)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
- if (parent == NULL)
- msg.parentcl_id = 0;
+ msg.dbenvcl_id = dbenv->cl_id;
+ if (passwd == NULL)
+ msg.passwd = "";
else
- msg.parentcl_id = parent->txnid;
+ msg.passwd = (char *)passwd;
msg.flags = flags;
- replyp = __db_txn_begin_4003(&msg, cl);
+ replyp = __db_env_set_encrypt_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_txn_begin_ret(dbenv, parent, txnpp, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___txn_begin_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_set_encrypt_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_txn_checkpoint __P((DB_ENV *, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_env_set_flags __P((DB_ENV *, u_int32_t, int));
*/
int
-__dbcl_txn_checkpoint(dbenv, kbyte, min, flags)
+__dbcl_env_set_flags(dbenv, flags, onoff)
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;
+ int onoff;
{
CLIENT *cl;
- __txn_commit_msg msg;
- __txn_commit_reply *replyp = NULL;
+ __env_set_flags_msg msg;
+ __env_set_flags_reply *replyp = NULL;
int ret;
- DB_ENV *dbenv;
ret = 0;
- dbenv = txnp->mgrp->dbenv;
if (dbenv == NULL || !RPC_ON(dbenv))
- return (__dbcl_noserver(NULL));
+ return (__dbcl_noserver(dbenv));
cl = (CLIENT *)dbenv->cl_handle;
- if (txnp == NULL)
- msg.txnpcl_id = 0;
- else
- msg.txnpcl_id = txnp->txnid;
+ msg.dbenvcl_id = dbenv->cl_id;
msg.flags = flags;
+ msg.onoff = onoff;
- replyp = __db_txn_commit_4003(&msg, cl);
+ replyp = __db_env_set_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_txn_commit_ret(txnp, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___txn_commit_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_set_flags_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_txn_discard __P((DB_TXN *, u_int32_t));
+ * PUBLIC: int __dbcl_env_txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **,
+ * PUBLIC: u_int32_t));
*/
int
-__dbcl_txn_discard(txnp, flags)
- DB_TXN * txnp;
+__dbcl_env_txn_begin(dbenv, parent, txnpp, flags)
+ DB_ENV * dbenv;
+ DB_TXN * parent;
+ DB_TXN ** txnpp;
u_int32_t flags;
{
CLIENT *cl;
- __txn_discard_msg msg;
- __txn_discard_reply *replyp = NULL;
+ __env_txn_begin_msg msg;
+ __env_txn_begin_reply *replyp = NULL;
int ret;
- DB_ENV *dbenv;
ret = 0;
- dbenv = txnp->mgrp->dbenv;
if (dbenv == NULL || !RPC_ON(dbenv))
- return (__dbcl_noserver(NULL));
+ return (__dbcl_noserver(dbenv));
cl = (CLIENT *)dbenv->cl_handle;
- if (txnp == NULL)
- msg.txnpcl_id = 0;
+ msg.dbenvcl_id = dbenv->cl_id;
+ if (parent == NULL)
+ msg.parentcl_id = 0;
else
- msg.txnpcl_id = txnp->txnid;
+ msg.parentcl_id = parent->txnid;
msg.flags = flags;
- replyp = __db_txn_discard_4003(&msg, cl);
+ replyp = __db_env_txn_begin_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_txn_discard_ret(txnp, flags, replyp);
+ ret = __dbcl_env_txn_begin_ret(dbenv, parent, txnpp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___txn_discard_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_txn_begin_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_txn_prepare __P((DB_TXN *, u_int8_t *));
+ * PUBLIC: int __dbcl_env_txn_recover __P((DB_ENV *, DB_PREPLIST *, long,
+ * PUBLIC: long *, u_int32_t));
*/
int
-__dbcl_txn_prepare(txnp, gid)
- DB_TXN * txnp;
- u_int8_t * gid;
+__dbcl_env_txn_recover(dbenv, preplist, count, retp, flags)
+ DB_ENV * dbenv;
+ DB_PREPLIST * preplist;
+ long count;
+ long * retp;
+ u_int32_t flags;
{
CLIENT *cl;
- __txn_prepare_msg msg;
- __txn_prepare_reply *replyp = NULL;
+ __env_txn_recover_msg msg;
+ __env_txn_recover_reply *replyp = NULL;
int ret;
- DB_ENV *dbenv;
ret = 0;
- dbenv = txnp->mgrp->dbenv;
if (dbenv == NULL || !RPC_ON(dbenv))
- return (__dbcl_noserver(NULL));
+ return (__dbcl_noserver(dbenv));
cl = (CLIENT *)dbenv->cl_handle;
- if (txnp == NULL)
- msg.txnpcl_id = 0;
- else
- msg.txnpcl_id = txnp->txnid;
- memcpy(msg.gid, gid, 128);
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.count = count;
+ msg.flags = flags;
- replyp = __db_txn_prepare_4003(&msg, cl);
+ replyp = __db_env_txn_recover_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
+ ret = __dbcl_env_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___txn_prepare_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___env_txn_recover_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_txn_recover __P((DB_ENV *, DB_PREPLIST *, long, long *,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_db_create __P((DB *, DB_ENV *, u_int32_t));
*/
int
-__dbcl_txn_recover(dbenv, preplist, count, retp, flags)
+__dbcl_db_create(dbp, dbenv, flags)
+ DB * dbp;
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;
+ __db_create_msg msg;
+ __db_create_reply *replyp = NULL;
int ret;
ret = 0;
@@ -1443,215 +756,23 @@ __dbcl_txn_recover(dbenv, preplist, count, retp, flags)
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
- else
- msg.dbenvcl_id = dbenv->cl_id;
- msg.count = count;
+ msg.dbenvcl_id = dbenv->cl_id;
msg.flags = flags;
- replyp = __db_txn_recover_4003(&msg, cl);
+ replyp = __db_db_create_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp);
+ ret = __dbcl_db_create_ret(dbp, dbenv, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___txn_recover_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_create_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, flags)
- DB_ENV * dbenv;
- DB_TXN_STAT ** statp;
- u_int32_t flags;
-{
- COMPQUIET(statp, 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, int, u_int32_t, int *,
- * PUBLIC: u_int32_t));
- */
-int
-__dbcl_rep_elect(dbenv, nsites, nvotes, pri, timeout, idp, flags)
- DB_ENV * dbenv;
- int nsites;
- int nvotes;
- int pri;
- u_int32_t timeout;
- int * idp;
- u_int32_t flags;
-{
- COMPQUIET(nsites, 0);
- COMPQUIET(nvotes, 0);
- COMPQUIET(pri, 0);
- COMPQUIET(timeout, 0);
- COMPQUIET(idp, 0);
- COMPQUIET(flags, 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));
*/
@@ -1677,7 +798,7 @@ __dbcl_db_associate(dbp, txnp, sdbp, func0, flags)
cl = (CLIENT *)dbenv->cl_handle;
if (func0 != NULL) {
- __db_err(dbenv, "User functions not supported in RPC");
+ __db_errx(dbenv, "User functions not supported in RPC");
return (EINVAL);
}
if (dbp == NULL)
@@ -1694,9 +815,9 @@ __dbcl_db_associate(dbp, txnp, sdbp, func0, flags)
msg.sdbpcl_id = sdbp->cl_id;
msg.flags = flags;
- replyp = __db_db_associate_4003(&msg, cl);
+ replyp = __db_db_associate_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -1708,214 +829,6 @@ out:
}
/*
- * PUBLIC: int __dbcl_db_bt_compare __P((DB *, int (*)(DB *, const DBT *,
- * PUBLIC: const DBT *)));
- */
-int
-__dbcl_db_bt_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_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 msg;
- __db_bt_maxkey_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;
- msg.maxkey = maxkey;
-
- replyp = __db_db_bt_maxkey_4003(&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)
- msg.dbpcl_id = 0;
- else
- msg.dbpcl_id = dbp->cl_id;
-
- replyp = __db_db_get_bt_minkey_4003(&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 msg;
- __db_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)
- msg.dbpcl_id = 0;
- else
- msg.dbpcl_id = dbp->cl_id;
- msg.minkey = minkey;
-
- replyp = __db_db_bt_minkey_4003(&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_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;
- size_t (*func0) __P((DB *, const DBT *, const DBT *));
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- 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;
- int (*func0) __P((DB *, DBT *, db_recno_t));
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- 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;
- u_int32_t gbytes;
- u_int32_t bytes;
- int ncache;
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(gbytes, 0);
- COMPQUIET(bytes, 0);
- COMPQUIET(ncache, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_cachesize"));
-}
-
-/*
* PUBLIC: int __dbcl_db_close __P((DB *, u_int32_t));
*/
int
@@ -1942,9 +855,9 @@ __dbcl_db_close(dbp, flags)
msg.dbpcl_id = dbp->cl_id;
msg.flags = flags;
- replyp = __db_db_close_4003(&msg, cl);
+ replyp = __db_db_close_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -1956,41 +869,48 @@ out:
}
/*
- * PUBLIC: int __dbcl_db_create __P((DB *, DB_ENV *, u_int32_t));
+ * PUBLIC: int __dbcl_db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
*/
int
-__dbcl_db_create(dbp, dbenv, flags)
+__dbcl_db_cursor(dbp, txnp, dbcpp, flags)
DB * dbp;
- DB_ENV * dbenv;
+ DB_TXN * txnp;
+ DBC ** dbcpp;
u_int32_t flags;
{
CLIENT *cl;
- __db_create_msg msg;
- __db_create_reply *replyp = NULL;
+ __db_cursor_msg msg;
+ __db_cursor_reply *replyp = NULL;
int ret;
+ DB_ENV *dbenv;
ret = 0;
+ dbenv = dbp->dbenv;
if (dbenv == NULL || !RPC_ON(dbenv))
- return (__dbcl_noserver(dbenv));
+ return (__dbcl_noserver(NULL));
cl = (CLIENT *)dbenv->cl_handle;
- if (dbenv == NULL)
- msg.dbenvcl_id = 0;
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
else
- msg.dbenvcl_id = dbenv->cl_id;
+ msg.txnpcl_id = txnp->txnid;
msg.flags = flags;
- replyp = __db_db_create_4003(&msg, cl);
+ replyp = __db_db_cursor_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_create_ret(dbp, dbenv, flags, replyp);
+ ret = __dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_create_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_cursor_reply, (void *)replyp);
return (ret);
}
@@ -2033,9 +953,9 @@ __dbcl_db_del(dbp, txnp, key, flags)
msg.keydata.keydata_len = key->size;
msg.flags = flags;
- replyp = __db_db_del_4003(&msg, cl);
+ replyp = __db_db_del_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -2047,32 +967,19 @@ out:
}
/*
- * 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 *));
+ * PUBLIC: int __dbcl_db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
*/
int
-__dbcl_db_get_encrypt_flags(dbp, flagsp)
+__dbcl_db_get(dbp, txnp, key, data, flags)
DB * dbp;
- u_int32_t * flagsp;
+ DB_TXN * txnp;
+ DBT * key;
+ DBT * data;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_get_encrypt_flags_msg msg;
- __db_get_encrypt_flags_reply *replyp = NULL;
+ __db_get_msg msg;
+ __db_get_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2087,34 +994,48 @@ __dbcl_db_get_encrypt_flags(dbp, flagsp)
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_encrypt_flags_4003(&msg, cl);
+ replyp = __db_db_get_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
- if (flagsp != NULL)
- *flagsp = replyp->flags;
+ ret = __dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_encrypt_flags_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_encrypt __P((DB *, const char *, u_int32_t));
+ * PUBLIC: int __dbcl_db_get_bt_minkey __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_encrypt(dbp, passwd, flags)
+__dbcl_db_get_bt_minkey(dbp, minkeyp)
DB * dbp;
- const char * passwd;
- u_int32_t flags;
+ u_int32_t * minkeyp;
{
CLIENT *cl;
- __db_encrypt_msg msg;
- __db_encrypt_reply *replyp = NULL;
+ __db_get_bt_minkey_msg msg;
+ __db_get_bt_minkey_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2129,36 +1050,35 @@ __dbcl_db_encrypt(dbp, passwd, flags)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- if (passwd == NULL)
- msg.passwd = "";
- else
- msg.passwd = (char *)passwd;
- msg.flags = flags;
- replyp = __db_db_encrypt_4003(&msg, cl);
+ replyp = __db_db_get_bt_minkey_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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_encrypt_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_bt_minkey_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get_extentsize __P((DB *, u_int32_t *));
+ * PUBLIC: int __dbcl_db_get_dbname __P((DB *, const char * *,
+ * PUBLIC: const char * *));
*/
int
-__dbcl_db_get_extentsize(dbp, extentsizep)
+__dbcl_db_get_dbname(dbp, filenamep, dbnamep)
DB * dbp;
- u_int32_t * extentsizep;
+ const char * * filenamep;
+ const char * * dbnamep;
{
CLIENT *cl;
- __db_get_extentsize_msg msg;
- __db_get_extentsize_reply *replyp = NULL;
+ __db_get_dbname_msg msg;
+ __db_get_dbname_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2174,32 +1094,34 @@ __dbcl_db_get_extentsize(dbp, extentsizep)
else
msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_extentsize_4003(&msg, cl);
+ replyp = __db_db_get_dbname_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
- if (extentsizep != NULL)
- *extentsizep = replyp->extentsize;
+ if (filenamep != NULL)
+ *filenamep = replyp->filename;
+ if (dbnamep != NULL)
+ *dbnamep = replyp->dbname;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_extentsize_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_dbname_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_extentsize __P((DB *, u_int32_t));
+ * PUBLIC: int __dbcl_db_get_encrypt_flags __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_extentsize(dbp, extentsize)
+__dbcl_db_get_encrypt_flags(dbp, flagsp)
DB * dbp;
- u_int32_t extentsize;
+ u_int32_t * flagsp;
{
CLIENT *cl;
- __db_extentsize_msg msg;
- __db_extentsize_reply *replyp = NULL;
+ __db_get_encrypt_flags_msg msg;
+ __db_get_encrypt_flags_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2214,52 +1136,23 @@ __dbcl_db_extentsize(dbp, extentsize)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.extentsize = extentsize;
- replyp = __db_db_extentsize_4003(&msg, cl);
+ replyp = __db_db_get_encrypt_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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_extentsize_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_encrypt_flags_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_fd __P((DB *, int *));
- */
-int
-__dbcl_db_fd(dbp, fdp)
- DB * dbp;
- int * fdp;
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(fdp, 0);
- 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;
- void (*func0) __P((DB *, int, int));
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_feedback"));
-}
-
-/*
* PUBLIC: int __dbcl_db_get_flags __P((DB *, u_int32_t *));
*/
int
@@ -2285,9 +1178,9 @@ __dbcl_db_get_flags(dbp, flagsp)
else
msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_flags_4003(&msg, cl);
+ replyp = __db_db_get_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -2301,16 +1194,16 @@ out:
}
/*
- * PUBLIC: int __dbcl_db_flags __P((DB *, u_int32_t));
+ * PUBLIC: int __dbcl_db_get_h_ffactor __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_flags(dbp, flags)
+__dbcl_db_get_h_ffactor(dbp, ffactorp)
DB * dbp;
- u_int32_t flags;
+ u_int32_t * ffactorp;
{
CLIENT *cl;
- __db_flags_msg msg;
- __db_flags_reply *replyp = NULL;
+ __db_get_h_ffactor_msg msg;
+ __db_get_h_ffactor_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2325,35 +1218,33 @@ __dbcl_db_flags(dbp, flags)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.flags = flags;
- replyp = __db_db_flags_4003(&msg, cl);
+ replyp = __db_db_get_h_ffactor_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
+ if (ffactorp != NULL)
+ *ffactorp = replyp->ffactor;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_flags_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_h_ffactor_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+ * PUBLIC: int __dbcl_db_get_h_nelem __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_get(dbp, txnp, key, data, flags)
+__dbcl_db_get_h_nelem(dbp, nelemp)
DB * dbp;
- DB_TXN * txnp;
- DBT * key;
- DBT * data;
- u_int32_t flags;
+ u_int32_t * nelemp;
{
CLIENT *cl;
- __db_get_msg msg;
- __db_get_reply *replyp = NULL;
+ __db_get_h_nelem_msg msg;
+ __db_get_h_nelem_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2368,49 +1259,33 @@ __dbcl_db_get(dbp, txnp, key, data, flags)
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_4003(&msg, cl);
+ replyp = __db_db_get_h_nelem_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp);
+ ret = replyp->status;
+ if (nelemp != NULL)
+ *nelemp = replyp->nelem;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_h_nelem_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get_name __P((DB *, const char * *, const char * *));
+ * PUBLIC: int __dbcl_db_get_lorder __P((DB *, int *));
*/
int
-__dbcl_db_get_name(dbp, filenamep, dbnamep)
+__dbcl_db_get_lorder(dbp, lorderp)
DB * dbp;
- const char * * filenamep;
- const char * * dbnamep;
+ int * lorderp;
{
CLIENT *cl;
- __db_get_name_msg msg;
- __db_get_name_reply *replyp = NULL;
+ __db_get_lorder_msg msg;
+ __db_get_lorder_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2426,20 +1301,18 @@ __dbcl_db_get_name(dbp, filenamep, dbnamep)
else
msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_name_4003(&msg, cl);
+ replyp = __db_db_get_lorder_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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;
+ if (lorderp != NULL)
+ *lorderp = replyp->lorder;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_name_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_lorder_reply, (void *)replyp);
return (ret);
}
@@ -2469,9 +1342,9 @@ __dbcl_db_get_open_flags(dbp, flagsp)
else
msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_open_flags_4003(&msg, cl);
+ replyp = __db_db_get_open_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -2485,16 +1358,16 @@ out:
}
/*
- * PUBLIC: int __dbcl_db_get_h_ffactor __P((DB *, u_int32_t *));
+ * PUBLIC: int __dbcl_db_get_pagesize __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_get_h_ffactor(dbp, ffactorp)
+__dbcl_db_get_pagesize(dbp, pagesizep)
DB * dbp;
- u_int32_t * ffactorp;
+ u_int32_t * pagesizep;
{
CLIENT *cl;
- __db_get_h_ffactor_msg msg;
- __db_get_h_ffactor_reply *replyp = NULL;
+ __db_get_pagesize_msg msg;
+ __db_get_pagesize_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2510,32 +1383,32 @@ __dbcl_db_get_h_ffactor(dbp, ffactorp)
else
msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_h_ffactor_4003(&msg, cl);
+ replyp = __db_db_get_pagesize_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
- if (ffactorp != NULL)
- *ffactorp = replyp->ffactor;
+ if (pagesizep != NULL)
+ *pagesizep = replyp->pagesize;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_h_ffactor_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_pagesize_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_h_ffactor __P((DB *, u_int32_t));
+ * PUBLIC: int __dbcl_db_get_q_extentsize __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_h_ffactor(dbp, ffactor)
+__dbcl_db_get_q_extentsize(dbp, extentsizep)
DB * dbp;
- u_int32_t ffactor;
+ u_int32_t * extentsizep;
{
CLIENT *cl;
- __db_h_ffactor_msg msg;
- __db_h_ffactor_reply *replyp = NULL;
+ __db_get_q_extentsize_msg msg;
+ __db_get_q_extentsize_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2550,48 +1423,33 @@ __dbcl_db_h_ffactor(dbp, ffactor)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.ffactor = ffactor;
- replyp = __db_db_h_ffactor_4003(&msg, cl);
+ replyp = __db_db_get_q_extentsize_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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_h_ffactor_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_q_extentsize_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;
- u_int32_t (*func0) __P((DB *, const void *, u_int32_t));
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_h_hash"));
-}
-
-/*
- * PUBLIC: int __dbcl_db_get_h_nelem __P((DB *, u_int32_t *));
+ * PUBLIC: int __dbcl_db_get_re_delim __P((DB *, int *));
*/
int
-__dbcl_db_get_h_nelem(dbp, nelemp)
+__dbcl_db_get_re_delim(dbp, delimp)
DB * dbp;
- u_int32_t * nelemp;
+ int * delimp;
{
CLIENT *cl;
- __db_get_h_nelem_msg msg;
- __db_get_h_nelem_reply *replyp = NULL;
+ __db_get_re_delim_msg msg;
+ __db_get_re_delim_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2607,32 +1465,32 @@ __dbcl_db_get_h_nelem(dbp, nelemp)
else
msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_h_nelem_4003(&msg, cl);
+ replyp = __db_db_get_re_delim_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
- if (nelemp != NULL)
- *nelemp = replyp->nelem;
+ if (delimp != NULL)
+ *delimp = replyp->delim;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_h_nelem_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_re_delim_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_h_nelem __P((DB *, u_int32_t));
+ * PUBLIC: int __dbcl_db_get_re_len __P((DB *, u_int32_t *));
*/
int
-__dbcl_db_h_nelem(dbp, nelem)
+__dbcl_db_get_re_len(dbp, lenp)
DB * dbp;
- u_int32_t nelem;
+ u_int32_t * lenp;
{
CLIENT *cl;
- __db_h_nelem_msg msg;
- __db_h_nelem_reply *replyp = NULL;
+ __db_get_re_len_msg msg;
+ __db_get_re_len_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2647,36 +1505,33 @@ __dbcl_db_h_nelem(dbp, nelem)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.nelem = nelem;
- replyp = __db_db_h_nelem_4003(&msg, cl);
+ replyp = __db_db_get_re_len_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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_h_nelem_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_re_len_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_key_range __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_db_get_re_pad __P((DB *, int *));
*/
int
-__dbcl_db_key_range(dbp, txnp, key, range, flags)
+__dbcl_db_get_re_pad(dbp, padp)
DB * dbp;
- DB_TXN * txnp;
- DBT * key;
- DB_KEY_RANGE * range;
- u_int32_t flags;
+ int * padp;
{
CLIENT *cl;
- __db_key_range_msg msg;
- __db_key_range_reply *replyp = NULL;
+ __db_get_re_pad_msg msg;
+ __db_get_re_pad_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2691,44 +1546,40 @@ __dbcl_db_key_range(dbp, txnp, key, range, flags)
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_key_range_4003(&msg, cl);
+ replyp = __db_db_get_re_pad_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp);
+ ret = replyp->status;
+ if (padp != NULL)
+ *padp = replyp->pad;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_key_range_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_get_re_pad_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get_lorder __P((DB *, int *));
+ * PUBLIC: int __dbcl_db_join __P((DB *, DBC **, DBC **, u_int32_t));
*/
int
-__dbcl_db_get_lorder(dbp, lorderp)
+__dbcl_db_join(dbp, curs, dbcp, flags)
DB * dbp;
- int * lorderp;
+ DBC ** curs;
+ DBC ** dbcp;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_get_lorder_msg msg;
- __db_get_lorder_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 = dbp->dbenv;
@@ -2741,33 +1592,45 @@ __dbcl_db_get_lorder(dbp, lorderp)
msg.dbpcl_id = 0;
else
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_get_lorder_4003(&msg, cl);
+ replyp = __db_db_join_4005(&msg, cl);
+ __os_free(dbenv, msg.curs.curs_val);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
- if (lorderp != NULL)
- *lorderp = replyp->lorder;
+ ret = __dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_lorder_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_join_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_lorder __P((DB *, int));
+ * PUBLIC: int __dbcl_db_key_range __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *,
+ * PUBLIC: u_int32_t));
*/
int
-__dbcl_db_lorder(dbp, lorder)
+__dbcl_db_key_range(dbp, txnp, key, range, flags)
DB * dbp;
- int lorder;
+ DB_TXN * txnp;
+ DBT * key;
+ DB_KEY_RANGE * range;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_lorder_msg msg;
- __db_lorder_reply *replyp = NULL;
+ __db_key_range_msg msg;
+ __db_key_range_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -2782,18 +1645,28 @@ __dbcl_db_lorder(dbp, lorder)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.lorder = lorder;
+ 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_lorder_4003(&msg, cl);
+ replyp = __db_db_key_range_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
+ ret = __dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_lorder_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_key_range_reply, (void *)replyp);
return (ret);
}
@@ -2844,9 +1717,9 @@ __dbcl_db_open(dbp, txnp, name, subdb, type, flags, mode)
msg.flags = flags;
msg.mode = mode;
- replyp = __db_db_open_4003(&msg, cl);
+ replyp = __db_db_open_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -2858,102 +1731,6 @@ out:
}
/*
- * 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_4003(&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 msg;
- __db_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;
- msg.pagesize = pagesize;
-
- replyp = __db_db_pagesize_4003(&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_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;
- void (*func0) __P((DB_ENV *, int));
-{
- DB_ENV *dbenv;
-
- dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_panic"));
-}
-
-/*
* PUBLIC: int __dbcl_db_pget __P((DB *, DB_TXN *, DBT *, DBT *, DBT *,
* PUBLIC: u_int32_t));
*/
@@ -3007,9 +1784,9 @@ __dbcl_db_pget(dbp, txnp, skey, pkey, data, flags)
msg.datadata.datadata_len = data->size;
msg.flags = flags;
- replyp = __db_db_pget_4003(&msg, cl);
+ replyp = __db_db_pget_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -3066,9 +1843,9 @@ __dbcl_db_put(dbp, txnp, key, data, flags)
msg.datadata.datadata_len = data->size;
msg.flags = flags;
- replyp = __db_db_put_4003(&msg, cl);
+ replyp = __db_db_put_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
@@ -3080,16 +1857,19 @@ out:
}
/*
- * PUBLIC: int __dbcl_db_get_re_delim __P((DB *, int *));
+ * PUBLIC: int __dbcl_db_remove __P((DB *, const char *, const char *,
+ * PUBLIC: u_int32_t));
*/
int
-__dbcl_db_get_re_delim(dbp, delimp)
+__dbcl_db_remove(dbp, name, subdb, flags)
DB * dbp;
- int * delimp;
+ const char * name;
+ const char * subdb;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_get_re_delim_msg msg;
- __db_get_re_delim_reply *replyp = NULL;
+ __db_remove_msg msg;
+ __db_remove_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3104,33 +1884,44 @@ __dbcl_db_get_re_delim(dbp, delimp)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
+ 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_db_get_re_delim_4003(&msg, cl);
+ replyp = __db_db_remove_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
- if (delimp != NULL)
- *delimp = replyp->delim;
+ ret = __dbcl_db_remove_ret(dbp, name, subdb, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_get_re_delim_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_remove_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_re_delim __P((DB *, int));
+ * PUBLIC: int __dbcl_db_rename __P((DB *, const char *, const char *,
+ * PUBLIC: const char *, u_int32_t));
*/
int
-__dbcl_db_re_delim(dbp, delim)
+__dbcl_db_rename(dbp, name, subdb, newname, flags)
DB * dbp;
- int delim;
+ const char * name;
+ const char * subdb;
+ const char * newname;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_re_delim_msg msg;
- __db_re_delim_reply *replyp = NULL;
+ __db_rename_msg msg;
+ __db_rename_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3145,32 +1936,44 @@ __dbcl_db_re_delim(dbp, delim)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.delim = delim;
+ 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_db_re_delim_4003(&msg, cl);
+ replyp = __db_db_rename_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
+ ret = __dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_re_delim_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_rename_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get_re_len __P((DB *, u_int32_t *));
+ * PUBLIC: int __dbcl_db_set_bt_minkey __P((DB *, u_int32_t));
*/
int
-__dbcl_db_get_re_len(dbp, lenp)
+__dbcl_db_set_bt_minkey(dbp, minkey)
DB * dbp;
- u_int32_t * lenp;
+ u_int32_t minkey;
{
CLIENT *cl;
- __db_get_re_len_msg msg;
- __db_get_re_len_reply *replyp = NULL;
+ __db_set_bt_minkey_msg msg;
+ __db_set_bt_minkey_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3185,33 +1988,33 @@ __dbcl_db_get_re_len(dbp, lenp)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
+ msg.minkey = minkey;
- replyp = __db_db_get_re_len_4003(&msg, cl);
+ replyp = __db_db_set_bt_minkey_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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);
+ xdr_free((xdrproc_t)xdr___db_set_bt_minkey_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_re_len __P((DB *, u_int32_t));
+ * PUBLIC: int __dbcl_db_set_encrypt __P((DB *, const char *, u_int32_t));
*/
int
-__dbcl_db_re_len(dbp, len)
+__dbcl_db_set_encrypt(dbp, passwd, flags)
DB * dbp;
- u_int32_t len;
+ const char * passwd;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_re_len_msg msg;
- __db_re_len_reply *replyp = NULL;
+ __db_set_encrypt_msg msg;
+ __db_set_encrypt_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3226,32 +2029,36 @@ __dbcl_db_re_len(dbp, len)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.len = len;
+ if (passwd == NULL)
+ msg.passwd = "";
+ else
+ msg.passwd = (char *)passwd;
+ msg.flags = flags;
- replyp = __db_db_re_len_4003(&msg, cl);
+ replyp = __db_db_set_encrypt_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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_len_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_set_encrypt_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_re_pad __P((DB *, int));
+ * PUBLIC: int __dbcl_db_set_flags __P((DB *, u_int32_t));
*/
int
-__dbcl_db_re_pad(dbp, pad)
+__dbcl_db_set_flags(dbp, flags)
DB * dbp;
- int pad;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_re_pad_msg msg;
- __db_re_pad_reply *replyp = NULL;
+ __db_set_flags_msg msg;
+ __db_set_flags_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3266,32 +2073,32 @@ __dbcl_db_re_pad(dbp, pad)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.pad = pad;
+ msg.flags = flags;
- replyp = __db_db_re_pad_4003(&msg, cl);
+ replyp = __db_db_set_flags_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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);
+ xdr_free((xdrproc_t)xdr___db_set_flags_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get_re_pad __P((DB *, int *));
+ * PUBLIC: int __dbcl_db_set_h_ffactor __P((DB *, u_int32_t));
*/
int
-__dbcl_db_get_re_pad(dbp, padp)
+__dbcl_db_set_h_ffactor(dbp, ffactor)
DB * dbp;
- int * padp;
+ u_int32_t ffactor;
{
CLIENT *cl;
- __db_get_re_pad_msg msg;
- __db_get_re_pad_reply *replyp = NULL;
+ __db_set_h_ffactor_msg msg;
+ __db_set_h_ffactor_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3306,66 +2113,72 @@ __dbcl_db_get_re_pad(dbp, padp)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
+ msg.ffactor = ffactor;
- replyp = __db_db_get_re_pad_4003(&msg, cl);
+ replyp = __db_db_set_h_ffactor_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(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);
+ xdr_free((xdrproc_t)xdr___db_set_h_ffactor_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_get_re_source __P((DB *, const char * *));
+ * PUBLIC: int __dbcl_db_set_h_nelem __P((DB *, u_int32_t));
*/
int
-__dbcl_db_get_re_source(dbp, re_sourcep)
+__dbcl_db_set_h_nelem(dbp, nelem)
DB * dbp;
- const char * * re_sourcep;
+ u_int32_t nelem;
{
+ CLIENT *cl;
+ __db_set_h_nelem_msg msg;
+ __db_set_h_nelem_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
+ ret = 0;
dbenv = dbp->dbenv;
- COMPQUIET(re_sourcep, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_get_re_source"));
-}
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
-/*
- * PUBLIC: int __dbcl_db_re_source __P((DB *, const char *));
- */
-int
-__dbcl_db_re_source(dbp, re_source)
- DB * dbp;
- const char * re_source;
-{
- DB_ENV *dbenv;
+ cl = (CLIENT *)dbenv->cl_handle;
- dbenv = dbp->dbenv;
- COMPQUIET(re_source, NULL);
- return (__dbcl_rpc_illegal(dbenv, "db_re_source"));
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ msg.nelem = nelem;
+
+ replyp = __db_db_set_h_nelem_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_set_h_nelem_reply, (void *)replyp);
+ return (ret);
}
/*
- * PUBLIC: int __dbcl_db_remove __P((DB *, const char *, const char *,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_db_set_lorder __P((DB *, int));
*/
int
-__dbcl_db_remove(dbp, name, subdb, flags)
+__dbcl_db_set_lorder(dbp, lorder)
DB * dbp;
- const char * name;
- const char * subdb;
- u_int32_t flags;
+ int lorder;
{
CLIENT *cl;
- __db_remove_msg msg;
- __db_remove_reply *replyp = NULL;
+ __db_set_lorder_msg msg;
+ __db_set_lorder_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3380,44 +2193,32 @@ __dbcl_db_remove(dbp, name, subdb, flags)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- if (name == NULL)
- msg.name = "";
- else
- msg.name = (char *)name;
- if (subdb == NULL)
- msg.subdb = "";
- else
- msg.subdb = (char *)subdb;
- msg.flags = flags;
+ msg.lorder = lorder;
- replyp = __db_db_remove_4003(&msg, cl);
+ replyp = __db_db_set_lorder_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_remove_ret(dbp, name, subdb, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_remove_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_set_lorder_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_rename __P((DB *, const char *, const char *,
- * PUBLIC: const char *, u_int32_t));
+ * PUBLIC: int __dbcl_db_set_pagesize __P((DB *, u_int32_t));
*/
int
-__dbcl_db_rename(dbp, name, subdb, newname, flags)
+__dbcl_db_set_pagesize(dbp, pagesize)
DB * dbp;
- const char * name;
- const char * subdb;
- const char * newname;
- u_int32_t flags;
+ u_int32_t pagesize;
{
CLIENT *cl;
- __db_rename_msg msg;
- __db_rename_reply *replyp = NULL;
+ __db_set_pagesize_msg msg;
+ __db_set_pagesize_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3432,46 +2233,32 @@ __dbcl_db_rename(dbp, name, subdb, newname, flags)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- 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;
+ msg.pagesize = pagesize;
- replyp = __db_db_rename_4003(&msg, cl);
+ replyp = __db_db_set_pagesize_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_rename_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_set_pagesize_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_stat __P((DB *, DB_TXN *, void *, u_int32_t));
+ * PUBLIC: int __dbcl_db_set_q_extentsize __P((DB *, u_int32_t));
*/
int
-__dbcl_db_stat(dbp, txnp, sp, flags)
+__dbcl_db_set_q_extentsize(dbp, extentsize)
DB * dbp;
- DB_TXN * txnp;
- void * sp;
- u_int32_t flags;
+ u_int32_t extentsize;
{
CLIENT *cl;
- __db_stat_msg msg;
- __db_stat_reply *replyp = NULL;
+ __db_set_q_extentsize_msg msg;
+ __db_set_q_extentsize_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3486,36 +2273,32 @@ __dbcl_db_stat(dbp, txnp, sp, flags)
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.flags = flags;
+ msg.extentsize = extentsize;
- replyp = __db_db_stat_4003(&msg, cl);
+ replyp = __db_db_set_q_extentsize_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_stat_ret(dbp, txnp, sp, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_stat_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_set_q_extentsize_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_sync __P((DB *, u_int32_t));
+ * PUBLIC: int __dbcl_db_set_re_delim __P((DB *, int));
*/
int
-__dbcl_db_sync(dbp, flags)
+__dbcl_db_set_re_delim(dbp, delim)
DB * dbp;
- u_int32_t flags;
+ int delim;
{
CLIENT *cl;
- __db_sync_msg msg;
- __db_sync_reply *replyp = NULL;
+ __db_set_re_delim_msg msg;
+ __db_set_re_delim_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3530,35 +2313,32 @@ __dbcl_db_sync(dbp, flags)
msg.dbpcl_id = 0;
else
msg.dbpcl_id = dbp->cl_id;
- msg.flags = flags;
+ msg.delim = delim;
- replyp = __db_db_sync_4003(&msg, cl);
+ replyp = __db_db_set_re_delim_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_sync_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_set_re_delim_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_truncate __P((DB *, DB_TXN *, u_int32_t *,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_db_set_re_len __P((DB *, u_int32_t));
*/
int
-__dbcl_db_truncate(dbp, txnp, countp, flags)
+__dbcl_db_set_re_len(dbp, len)
DB * dbp;
- DB_TXN * txnp;
- u_int32_t * countp;
- u_int32_t flags;
+ u_int32_t len;
{
CLIENT *cl;
- __db_truncate_msg msg;
- __db_truncate_reply *replyp = NULL;
+ __db_set_re_len_msg msg;
+ __db_set_re_len_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3573,77 +2353,118 @@ __dbcl_db_truncate(dbp, txnp, countp, flags)
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.flags = flags;
+ msg.len = len;
- replyp = __db_db_truncate_4003(&msg, cl);
+ replyp = __db_db_set_re_len_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_truncate_ret(dbp, txnp, countp, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_truncate_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_set_re_len_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_upgrade __P((DB *, const char *, u_int32_t));
+ * PUBLIC: int __dbcl_db_set_re_pad __P((DB *, int));
*/
int
-__dbcl_db_upgrade(dbp, fname, flags)
+__dbcl_db_set_re_pad(dbp, pad)
DB * dbp;
- const char * fname;
- u_int32_t flags;
+ int pad;
{
+ CLIENT *cl;
+ __db_set_re_pad_msg msg;
+ __db_set_re_pad_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
+ ret = 0;
dbenv = dbp->dbenv;
- COMPQUIET(fname, NULL);
- COMPQUIET(flags, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_upgrade"));
+ 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.pad = pad;
+
+ replyp = __db_db_set_re_pad_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_set_re_pad_reply, (void *)replyp);
+ return (ret);
}
/*
- * PUBLIC: int __dbcl_db_verify __P((DB *, const char *, const char *, FILE *,
- * PUBLIC: u_int32_t));
+ * PUBLIC: int __dbcl_db_stat __P((DB *, DB_TXN *, void *, u_int32_t));
*/
int
-__dbcl_db_verify(dbp, fname, subdb, outfile, flags)
+__dbcl_db_stat(dbp, txnp, sp, flags)
DB * dbp;
- const char * fname;
- const char * subdb;
- FILE * outfile;
+ DB_TXN * txnp;
+ void * sp;
u_int32_t flags;
{
+ CLIENT *cl;
+ __db_stat_msg msg;
+ __db_stat_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
+ ret = 0;
dbenv = dbp->dbenv;
- COMPQUIET(fname, NULL);
- COMPQUIET(subdb, NULL);
- COMPQUIET(outfile, 0);
- COMPQUIET(flags, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_verify"));
+ 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.flags = flags;
+
+ replyp = __db_db_stat_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_db_stat_ret(dbp, txnp, sp, flags, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_stat_reply, (void *)replyp);
+ return (ret);
}
/*
- * PUBLIC: int __dbcl_db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
+ * PUBLIC: int __dbcl_db_sync __P((DB *, u_int32_t));
*/
int
-__dbcl_db_cursor(dbp, txnp, dbcpp, flags)
+__dbcl_db_sync(dbp, flags)
DB * dbp;
- DB_TXN * txnp;
- DBC ** dbcpp;
u_int32_t flags;
{
CLIENT *cl;
- __db_cursor_msg msg;
- __db_cursor_reply *replyp = NULL;
+ __db_sync_msg msg;
+ __db_sync_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3658,43 +2479,37 @@ __dbcl_db_cursor(dbp, txnp, dbcpp, flags)
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.flags = flags;
- replyp = __db_db_cursor_4003(&msg, cl);
+ replyp = __db_db_sync_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp);
+ ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_cursor_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_sync_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_db_join __P((DB *, DBC **, DBC **, u_int32_t));
+ * PUBLIC: int __dbcl_db_truncate __P((DB *, DB_TXN *, u_int32_t *,
+ * PUBLIC: u_int32_t));
*/
int
-__dbcl_db_join(dbp, curs, dbcp, flags)
+__dbcl_db_truncate(dbp, txnp, countp, flags)
DB * dbp;
- DBC ** curs;
- DBC ** dbcp;
+ DB_TXN * txnp;
+ u_int32_t * countp;
u_int32_t flags;
{
CLIENT *cl;
- __db_join_msg msg;
- __db_join_reply *replyp = NULL;
+ __db_truncate_msg msg;
+ __db_truncate_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
- DBC ** cursp;
- int cursi;
- u_int32_t * cursq;
ret = 0;
dbenv = dbp->dbenv;
@@ -3707,40 +2522,35 @@ __dbcl_db_join(dbp, curs, dbcp, flags)
msg.dbpcl_id = 0;
else
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;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
msg.flags = flags;
- replyp = __db_db_join_4003(&msg, cl);
- __os_free(dbenv, msg.curs.curs_val);
+ replyp = __db_db_truncate_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp);
+ ret = __dbcl_db_truncate_ret(dbp, txnp, countp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___db_join_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___db_truncate_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_close __P((DBC *));
+ * PUBLIC: int __dbcl_dbc_c_close __P((DBC *));
*/
int
-__dbcl_dbc_close(dbc)
+__dbcl_dbc_c_close(dbc)
DBC * dbc;
{
CLIENT *cl;
- __dbc_close_msg msg;
- __dbc_close_reply *replyp = NULL;
+ __dbc_c_close_msg msg;
+ __dbc_c_close_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3756,31 +2566,31 @@ __dbcl_dbc_close(dbc)
else
msg.dbccl_id = dbc->cl_id;
- replyp = __db_dbc_close_4003(&msg, cl);
+ replyp = __db_dbc_c_close_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_dbc_close_ret(dbc, replyp);
+ ret = __dbcl_dbc_c_close_ret(dbc, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_close_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_close_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_count __P((DBC *, db_recno_t *, u_int32_t));
+ * PUBLIC: int __dbcl_dbc_c_count __P((DBC *, db_recno_t *, u_int32_t));
*/
int
-__dbcl_dbc_count(dbc, countp, flags)
+__dbcl_dbc_c_count(dbc, countp, flags)
DBC * dbc;
db_recno_t * countp;
u_int32_t flags;
{
CLIENT *cl;
- __dbc_count_msg msg;
- __dbc_count_reply *replyp = NULL;
+ __dbc_c_count_msg msg;
+ __dbc_c_count_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3797,30 +2607,30 @@ __dbcl_dbc_count(dbc, countp, flags)
msg.dbccl_id = dbc->cl_id;
msg.flags = flags;
- replyp = __db_dbc_count_4003(&msg, cl);
+ replyp = __db_dbc_c_count_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_dbc_count_ret(dbc, countp, flags, replyp);
+ ret = __dbcl_dbc_c_count_ret(dbc, countp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_count_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_count_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_del __P((DBC *, u_int32_t));
+ * PUBLIC: int __dbcl_dbc_c_del __P((DBC *, u_int32_t));
*/
int
-__dbcl_dbc_del(dbc, flags)
+__dbcl_dbc_c_del(dbc, flags)
DBC * dbc;
u_int32_t flags;
{
CLIENT *cl;
- __dbc_del_msg msg;
- __dbc_del_reply *replyp = NULL;
+ __dbc_c_del_msg msg;
+ __dbc_c_del_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3837,31 +2647,31 @@ __dbcl_dbc_del(dbc, flags)
msg.dbccl_id = dbc->cl_id;
msg.flags = flags;
- replyp = __db_dbc_del_4003(&msg, cl);
+ replyp = __db_dbc_c_del_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_del_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_del_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_dup __P((DBC *, DBC **, u_int32_t));
+ * PUBLIC: int __dbcl_dbc_c_dup __P((DBC *, DBC **, u_int32_t));
*/
int
-__dbcl_dbc_dup(dbc, dbcp, flags)
+__dbcl_dbc_c_dup(dbc, dbcp, flags)
DBC * dbc;
DBC ** dbcp;
u_int32_t flags;
{
CLIENT *cl;
- __dbc_dup_msg msg;
- __dbc_dup_reply *replyp = NULL;
+ __dbc_c_dup_msg msg;
+ __dbc_c_dup_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3878,32 +2688,32 @@ __dbcl_dbc_dup(dbc, dbcp, flags)
msg.dbccl_id = dbc->cl_id;
msg.flags = flags;
- replyp = __db_dbc_dup_4003(&msg, cl);
+ replyp = __db_dbc_c_dup_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp);
+ ret = __dbcl_dbc_c_dup_ret(dbc, dbcp, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_dup_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_dup_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_get __P((DBC *, DBT *, DBT *, u_int32_t));
+ * PUBLIC: int __dbcl_dbc_c_get __P((DBC *, DBT *, DBT *, u_int32_t));
*/
int
-__dbcl_dbc_get(dbc, key, data, flags)
+__dbcl_dbc_c_get(dbc, key, data, flags)
DBC * dbc;
DBT * key;
DBT * data;
u_int32_t flags;
{
CLIENT *cl;
- __dbc_get_msg msg;
- __dbc_get_reply *replyp = NULL;
+ __dbc_c_get_msg msg;
+ __dbc_c_get_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3932,24 +2742,24 @@ __dbcl_dbc_get(dbc, key, data, flags)
msg.datadata.datadata_len = data->size;
msg.flags = flags;
- replyp = __db_dbc_get_4003(&msg, cl);
+ replyp = __db_dbc_c_get_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_dbc_get_ret(dbc, key, data, flags, replyp);
+ ret = __dbcl_dbc_c_get_ret(dbc, key, data, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_get_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_get_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
+ * PUBLIC: int __dbcl_dbc_c_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
*/
int
-__dbcl_dbc_pget(dbc, skey, pkey, data, flags)
+__dbcl_dbc_c_pget(dbc, skey, pkey, data, flags)
DBC * dbc;
DBT * skey;
DBT * pkey;
@@ -3957,8 +2767,8 @@ __dbcl_dbc_pget(dbc, skey, pkey, data, flags)
u_int32_t flags;
{
CLIENT *cl;
- __dbc_pget_msg msg;
- __dbc_pget_reply *replyp = NULL;
+ __dbc_c_pget_msg msg;
+ __dbc_c_pget_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -3993,32 +2803,32 @@ __dbcl_dbc_pget(dbc, skey, pkey, data, flags)
msg.datadata.datadata_len = data->size;
msg.flags = flags;
- replyp = __db_dbc_pget_4003(&msg, cl);
+ replyp = __db_dbc_c_pget_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp);
+ ret = __dbcl_dbc_c_pget_ret(dbc, skey, pkey, data, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_pget_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_pget_reply, (void *)replyp);
return (ret);
}
/*
- * PUBLIC: int __dbcl_dbc_put __P((DBC *, DBT *, DBT *, u_int32_t));
+ * PUBLIC: int __dbcl_dbc_c_put __P((DBC *, DBT *, DBT *, u_int32_t));
*/
int
-__dbcl_dbc_put(dbc, key, data, flags)
+__dbcl_dbc_c_put(dbc, key, data, flags)
DBC * dbc;
DBT * key;
DBT * data;
u_int32_t flags;
{
CLIENT *cl;
- __dbc_put_msg msg;
- __dbc_put_reply *replyp = NULL;
+ __dbc_c_put_msg msg;
+ __dbc_c_put_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
@@ -4047,610 +2857,707 @@ __dbcl_dbc_put(dbc, key, data, flags)
msg.datadata.datadata_len = data->size;
msg.flags = flags;
- replyp = __db_dbc_put_4003(&msg, cl);
+ replyp = __db_dbc_c_put_4005(&msg, cl);
if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = __dbcl_dbc_put_ret(dbc, key, data, flags, replyp);
+ ret = __dbcl_dbc_c_put_ret(dbc, key, data, flags, replyp);
out:
if (replyp != NULL)
- xdr_free((xdrproc_t)xdr___dbc_put_reply, (void *)replyp);
+ xdr_free((xdrproc_t)xdr___dbc_c_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;
- u_int32_t flags;
- u_int32_t atype;
- int * aborted;
-{
- COMPQUIET(flags, 0);
- COMPQUIET(atype, 0);
- COMPQUIET(aborted, 0);
- 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;
- u_int32_t locker;
- u_int32_t flags;
- const DBT * obj;
- db_lockmode_t mode;
- DB_LOCK * lock;
-{
- COMPQUIET(locker, 0);
- COMPQUIET(flags, 0);
- COMPQUIET(obj, NULL);
- COMPQUIET(mode, 0);
- COMPQUIET(lock, 0);
- 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;
- u_int32_t * idp;
-{
- COMPQUIET(idp, 0);
- 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;
- DB_LOCK * lock;
-{
- COMPQUIET(lock, 0);
- 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, flags)
- DB_ENV * dbenv;
- DB_LOCK_STAT ** statp;
- u_int32_t flags;
-{
- COMPQUIET(statp, 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;
- u_int32_t locker;
- u_int32_t flags;
- DB_LOCKREQ * list;
- int nlist;
- DB_LOCKREQ ** elistp;
-{
- COMPQUIET(locker, 0);
- COMPQUIET(flags, 0);
- COMPQUIET(list, 0);
- COMPQUIET(nlist, 0);
- COMPQUIET(elistp, 0);
- 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)
- DB_ENV * dbenv;
- char *** listp;
- u_int32_t flags;
-{
- COMPQUIET(listp, 0);
- COMPQUIET(flags, 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;
- const DB_LSN * lsn;
- char * namep;
- size_t len;
-{
- COMPQUIET(lsn, NULL);
- COMPQUIET(namep, NULL);
- COMPQUIET(len, 0);
- 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;
- const DB_LSN * lsn;
-{
- COMPQUIET(lsn, NULL);
- 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_put(dbenv, lsn, data, flags)
- DB_ENV * dbenv;
- DB_LSN * lsn;
- const DBT * data;
- u_int32_t flags;
-{
- COMPQUIET(lsn, 0);
- COMPQUIET(data, NULL);
- COMPQUIET(flags, 0);
- return (__dbcl_rpc_illegal(dbenv, "log_put"));
-}
-
-/*
- * PUBLIC: int __dbcl_log_stat __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
- */
-int
-__dbcl_log_stat(dbenv, statp, flags)
- DB_ENV * dbenv;
- DB_LOG_STAT ** statp;
- u_int32_t flags;
-{
- COMPQUIET(statp, 0);
- COMPQUIET(flags, 0);
- 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_memp_register(dbenv, ftype, func0, func1)
- DB_ENV * dbenv;
- int ftype;
- int (*func0) __P((DB_ENV *, db_pgno_t, void *, DBT *));
- int (*func1) __P((DB_ENV *, db_pgno_t, void *, DBT *));
-{
- 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_memp_stat(dbenv, gstatp, fstatp, flags)
- DB_ENV * dbenv;
- DB_MPOOL_STAT ** gstatp;
- DB_MPOOL_FSTAT *** fstatp;
- u_int32_t flags;
-{
- 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_memp_sync(dbenv, lsn)
- DB_ENV * dbenv;
- DB_LSN * lsn;
-{
- COMPQUIET(lsn, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_sync"));
-}
-
-/*
- * PUBLIC: int __dbcl_memp_trickle __P((DB_ENV *, int, int *));
- */
-int
-__dbcl_memp_trickle(dbenv, pct, nwrotep)
- DB_ENV * dbenv;
- int pct;
- int * nwrotep;
-{
- 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 *));
+ * PUBLIC: int __dbcl_txn_abort __P((DB_TXN *));
*/
int
-__dbcl_memp_fget(dbmfp, pgnoaddr, flags, addrp)
- DB_MPOOLFILE * dbmfp;
- u_int32_t * pgnoaddr;
- u_int32_t flags;
- void * addrp;
+__dbcl_txn_abort(txnp)
+ DB_TXN * txnp;
{
+ CLIENT *cl;
+ __txn_abort_msg msg;
+ __txn_abort_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
- dbenv = dbmfp->dbenv;
- COMPQUIET(pgnoaddr, 0);
- COMPQUIET(flags, 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(dbmfp, path, flags, mode, pagesize)
- DB_MPOOLFILE * dbmfp;
- const char * path;
- u_int32_t flags;
- int mode;
- size_t pagesize;
-{
- DB_ENV *dbenv;
+ ret = 0;
+ dbenv = txnp->mgrp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- dbenv = dbmfp->dbenv;
- COMPQUIET(path, 0);
- COMPQUIET(flags, 0);
- COMPQUIET(mode, 0);
- COMPQUIET(pagesize, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_fopen"));
-}
+ cl = (CLIENT *)dbenv->cl_handle;
-/*
- * PUBLIC: int __dbcl_memp_fput __P((DB_MPOOLFILE *, void *, u_int32_t));
- */
-int
-__dbcl_memp_fput(dbmfp, pgaddr, flags)
- DB_MPOOLFILE * dbmfp;
- void * pgaddr;
- u_int32_t flags;
-{
- DB_ENV *dbenv;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
- dbenv = dbmfp->dbenv;
- COMPQUIET(pgaddr, 0);
- COMPQUIET(flags, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_fput"));
+ replyp = __db_txn_abort_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ 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_memp_fset __P((DB_MPOOLFILE *, void *, u_int32_t));
+ * PUBLIC: int __dbcl_txn_commit __P((DB_TXN *, u_int32_t));
*/
int
-__dbcl_memp_fset(dbmfp, pgaddr, flags)
- DB_MPOOLFILE * dbmfp;
- void * pgaddr;
+__dbcl_txn_commit(txnp, flags)
+ DB_TXN * txnp;
u_int32_t flags;
{
+ CLIENT *cl;
+ __txn_commit_msg msg;
+ __txn_commit_reply *replyp = NULL;
+ int ret;
DB_ENV *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_get_clear_len(dbmfp, clear_lenp)
- DB_MPOOLFILE * dbmfp;
- u_int32_t * clear_lenp;
-{
- DB_ENV *dbenv;
-
- 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_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;
+ ret = 0;
+ dbenv = txnp->mgrp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- dbenv = dbmfp->dbenv;
- COMPQUIET(fileid, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_set_fileid"));
-}
+ cl = (CLIENT *)dbenv->cl_handle;
-/*
- * 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;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ msg.flags = flags;
- dbenv = dbmfp->dbenv;
- COMPQUIET(flagsp, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_get_flags"));
+ replyp = __db_txn_commit_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(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_memp_set_flags __P((DB_MPOOLFILE *, u_int32_t, int));
+ * PUBLIC: int __dbcl_txn_discard __P((DB_TXN *, u_int32_t));
*/
int
-__dbcl_memp_set_flags(dbmfp, flags, onoff)
- DB_MPOOLFILE * dbmfp;
+__dbcl_txn_discard(txnp, flags)
+ DB_TXN * txnp;
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;
-{
- DB_ENV *dbenv;
-
- dbenv = dbmfp->dbenv;
- COMPQUIET(ftype, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_set_ftype"));
-}
-
-/*
- * PUBLIC: int __dbcl_memp_get_lsn_offset __P((DB_MPOOLFILE *, int32_t *));
- */
-int
-__dbcl_memp_get_lsn_offset(dbmfp, lsn_offsetp)
- DB_MPOOLFILE * dbmfp;
- int32_t * lsn_offsetp;
-{
- 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_set_lsn_offset(dbmfp, lsn_offset)
- DB_MPOOLFILE * dbmfp;
- int32_t lsn_offset;
-{
- 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_get_maxsize(dbmfp, gbytesp, bytesp)
- DB_MPOOLFILE * dbmfp;
- u_int32_t * gbytesp;
- u_int32_t * bytesp;
{
+ CLIENT *cl;
+ __txn_discard_msg msg;
+ __txn_discard_reply *replyp = NULL;
+ int ret;
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;
+ ret = 0;
+ dbenv = txnp->mgrp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- dbenv = dbmfp->dbenv;
- COMPQUIET(gbytes, 0);
- COMPQUIET(bytes, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_set_maxsize"));
-}
+ cl = (CLIENT *)dbenv->cl_handle;
-/*
- * 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;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ msg.flags = flags;
- dbenv = dbmfp->dbenv;
- COMPQUIET(pgcookie, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_get_pgcookie"));
+ replyp = __db_txn_discard_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ 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_memp_set_pgcookie __P((DB_MPOOLFILE *, DBT *));
+ * PUBLIC: int __dbcl_txn_prepare __P((DB_TXN *, u_int8_t *));
*/
int
-__dbcl_memp_set_pgcookie(dbmfp, pgcookie)
- DB_MPOOLFILE * dbmfp;
- DBT * pgcookie;
+__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;
- 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;
+ ret = 0;
+ dbenv = txnp->mgrp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- dbenv = dbmfp->dbenv;
- COMPQUIET(priorityp, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_get_priority"));
-}
+ cl = (CLIENT *)dbenv->cl_handle;
-/*
- * 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;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ memcpy(msg.gid, gid, 128);
- dbenv = dbmfp->dbenv;
- COMPQUIET(priority, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_set_priority"));
+ replyp = __db_txn_prepare_4005(&msg, cl);
+ if (replyp == NULL) {
+ __db_errx(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_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"));
+ * __dbcl_dbp_init --
+ * Initialize DB handle methods.
+ *
+ * PUBLIC: void __dbcl_dbp_init __P((DB *));
+ */
+void
+__dbcl_dbp_init(dbp)
+ DB *dbp;
+{
+ dbp->associate = __dbcl_db_associate;
+ dbp->close = __dbcl_db_close;
+ dbp->compact =
+ (int (*)(DB *, DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *))
+ __dbcl_dbp_illegal;
+ dbp->cursor = __dbcl_db_cursor;
+ dbp->del = __dbcl_db_del;
+ dbp->fd =
+ (int (*)(DB *, int *))
+ __dbcl_dbp_illegal;
+ dbp->get = __dbcl_db_get;
+ dbp->get_bt_minkey = __dbcl_db_get_bt_minkey;
+ dbp->get_cachesize =
+ (int (*)(DB *, u_int32_t *, u_int32_t *, int *))
+ __dbcl_dbp_illegal;
+ dbp->get_dbname = __dbcl_db_get_dbname;
+ dbp->get_encrypt_flags = __dbcl_db_get_encrypt_flags;
+ dbp->get_flags = __dbcl_db_get_flags;
+ dbp->get_h_ffactor = __dbcl_db_get_h_ffactor;
+ dbp->get_h_nelem = __dbcl_db_get_h_nelem;
+ dbp->get_lorder = __dbcl_db_get_lorder;
+ dbp->get_mpf =
+ (DB_MPOOLFILE * (*)(DB *))
+ __dbcl_dbp_illegal;
+ dbp->get_open_flags = __dbcl_db_get_open_flags;
+ dbp->get_pagesize = __dbcl_db_get_pagesize;
+ dbp->get_q_extentsize = __dbcl_db_get_q_extentsize;
+ dbp->get_re_delim = __dbcl_db_get_re_delim;
+ dbp->get_re_len = __dbcl_db_get_re_len;
+ dbp->get_re_pad = __dbcl_db_get_re_pad;
+ dbp->get_re_source =
+ (int (*)(DB *, const char **))
+ __dbcl_dbp_illegal;
+ dbp->join = __dbcl_db_join;
+ dbp->key_range = __dbcl_db_key_range;
+ dbp->open = __dbcl_db_open;
+ dbp->pget = __dbcl_db_pget;
+ dbp->put = __dbcl_db_put;
+ dbp->remove = __dbcl_db_remove;
+ dbp->rename = __dbcl_db_rename;
+ dbp->set_alloc =
+ (int (*)(DB *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)))
+ __dbcl_dbp_illegal;
+ dbp->set_append_recno =
+ (int (*)(DB *, int (*)(DB *, DBT *, db_recno_t)))
+ __dbcl_dbp_illegal;
+ dbp->set_bt_compare =
+ (int (*)(DB *, int (*)(DB *, const DBT *, const DBT *)))
+ __dbcl_dbp_illegal;
+ dbp->set_bt_minkey = __dbcl_db_set_bt_minkey;
+ dbp->set_bt_prefix =
+ (int (*)(DB *, size_t(*)(DB *, const DBT *, const DBT *)))
+ __dbcl_dbp_illegal;
+ dbp->set_cachesize =
+ (int (*)(DB *, u_int32_t, u_int32_t, int))
+ __dbcl_dbp_illegal;
+ dbp->set_dup_compare =
+ (int (*)(DB *, int (*)(DB *, const DBT *, const DBT *)))
+ __dbcl_dbp_illegal;
+ dbp->set_encrypt = __dbcl_db_set_encrypt;
+ dbp->set_feedback =
+ (int (*)(DB *, void (*)(DB *, int, int)))
+ __dbcl_dbp_illegal;
+ dbp->set_flags = __dbcl_db_set_flags;
+ dbp->set_h_ffactor = __dbcl_db_set_h_ffactor;
+ dbp->set_h_hash =
+ (int (*)(DB *, u_int32_t(*)(DB *, const void *, u_int32_t)))
+ __dbcl_dbp_illegal;
+ dbp->set_h_nelem = __dbcl_db_set_h_nelem;
+ dbp->set_lorder = __dbcl_db_set_lorder;
+ dbp->set_pagesize = __dbcl_db_set_pagesize;
+ dbp->set_paniccall =
+ (int (*)(DB *, void (*)(DB_ENV *, int)))
+ __dbcl_dbp_illegal;
+ dbp->set_q_extentsize = __dbcl_db_set_q_extentsize;
+ dbp->set_re_delim = __dbcl_db_set_re_delim;
+ dbp->set_re_len = __dbcl_db_set_re_len;
+ dbp->set_re_pad = __dbcl_db_set_re_pad;
+ dbp->set_re_source =
+ (int (*)(DB *, const char *))
+ __dbcl_dbp_illegal;
+ dbp->stat = __dbcl_db_stat;
+ dbp->stat_print =
+ (int (*)(DB *, u_int32_t))
+ __dbcl_dbp_illegal;
+ dbp->sync = __dbcl_db_sync;
+ dbp->truncate = __dbcl_db_truncate;
+ dbp->upgrade =
+ (int (*)(DB *, const char *, u_int32_t))
+ __dbcl_dbp_illegal;
+ dbp->verify =
+ (int (*)(DB *, const char *, const char *, FILE *, u_int32_t))
+ __dbcl_dbp_illegal;
+ return;
+}
+
+/*
+ * __dbcl_dbc_init --
+ * Initialize DBC handle methods.
+ *
+ * PUBLIC: void __dbcl_dbc_init __P((DBC *));
+ */
+void
+__dbcl_dbc_init(dbc)
+ DBC *dbc;
+{
+ dbc->c_close = __dbcl_dbc_c_close;
+ dbc->c_count = __dbcl_dbc_c_count;
+ dbc->c_del = __dbcl_dbc_c_del;
+ dbc->c_dup = __dbcl_dbc_c_dup;
+ dbc->c_get = __dbcl_dbc_c_get;
+ dbc->c_pget = __dbcl_dbc_c_pget;
+ dbc->c_put = __dbcl_dbc_c_put;
+ return;
+}
+
+/*
+ * __dbcl_dbenv_init --
+ * Initialize DB_ENV handle methods.
+ *
+ * PUBLIC: void __dbcl_dbenv_init __P((DB_ENV *));
+ */
+void
+__dbcl_dbenv_init(dbenv)
+ DB_ENV *dbenv;
+{
+ dbenv->cdsgroup_begin = __dbcl_env_cdsgroup_begin;
+ dbenv->close = __dbcl_env_close;
+ dbenv->dbremove = __dbcl_env_dbremove;
+ dbenv->dbrename = __dbcl_env_dbrename;
+ dbenv->failchk =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->fileid_reset =
+ (int (*)(DB_ENV *, const char *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->get_cachesize = __dbcl_env_get_cachesize;
+ dbenv->get_data_dirs =
+ (int (*)(DB_ENV *, const char ***))
+ __dbcl_dbenv_illegal;
+ dbenv->get_encrypt_flags = __dbcl_env_get_encrypt_flags;
+ dbenv->get_flags = __dbcl_env_get_flags;
+ dbenv->get_home = __dbcl_env_get_home;
+ dbenv->get_lg_bsize =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lg_dir =
+ (int (*)(DB_ENV *, const char **))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lg_filemode =
+ (int (*)(DB_ENV *, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lg_max =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lg_regionmax =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lk_conflicts =
+ (int (*)(DB_ENV *, const u_int8_t **, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lk_detect =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lk_max_lockers =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lk_max_locks =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_lk_max_objects =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_mp_max_openfd =
+ (int (*)(DB_ENV *, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_mp_max_write =
+ (int (*)(DB_ENV *, int *, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_mp_mmapsize =
+ (int (*)(DB_ENV *, size_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_open_flags = __dbcl_env_get_open_flags;
+ dbenv->get_shm_key =
+ (int (*)(DB_ENV *, long *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_timeout =
+ (int (*)(DB_ENV *, db_timeout_t *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->get_tmp_dir =
+ (int (*)(DB_ENV *, const char **))
+ __dbcl_dbenv_illegal;
+ dbenv->get_tx_max =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_tx_timestamp =
+ (int (*)(DB_ENV *, time_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->get_verbose =
+ (int (*)(DB_ENV *, u_int32_t, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_detect =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_get =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_id =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_id_free =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_put =
+ (int (*)(DB_ENV *, DB_LOCK *))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_stat =
+ (int (*)(DB_ENV *, DB_LOCK_STAT **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->lock_vec =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **))
+ __dbcl_dbenv_illegal;
+ dbenv->log_archive =
+ (int (*)(DB_ENV *, char ***, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->log_cursor =
+ (int (*)(DB_ENV *, DB_LOGC **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->log_file =
+ (int (*)(DB_ENV *, const DB_LSN *, char *, size_t))
+ __dbcl_dbenv_illegal;
+ dbenv->log_flush =
+ (int (*)(DB_ENV *, const DB_LSN *))
+ __dbcl_dbenv_illegal;
+ dbenv->log_printf =
+ (int (*)(DB_ENV *, DB_TXN *, const char *, ...))
+ __dbcl_dbenv_illegal;
+ dbenv->log_put =
+ (int (*)(DB_ENV *, DB_LSN *, const DBT *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->log_stat =
+ (int (*)(DB_ENV *, DB_LOG_STAT **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->log_stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->lsn_reset =
+ (int (*)(DB_ENV *, const char *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->memp_fcreate =
+ (int (*)(DB_ENV *, DB_MPOOLFILE **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->memp_register =
+ (int (*)(DB_ENV *, int, int (*)(DB_ENV *, db_pgno_t, void *, DBT *), int (*)(DB_ENV *, db_pgno_t, void *, DBT *)))
+ __dbcl_dbenv_illegal;
+ dbenv->memp_stat =
+ (int (*)(DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->memp_stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->memp_sync =
+ (int (*)(DB_ENV *, DB_LSN *))
+ __dbcl_dbenv_illegal;
+ dbenv->memp_trickle =
+ (int (*)(DB_ENV *, int, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_alloc =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_free =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_get_align =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_get_increment =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_get_max =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_get_tas_spins =
+ (int (*)(DB_ENV *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_lock =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_set_align =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_set_increment =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_set_max =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_set_tas_spins =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_stat =
+ (int (*)(DB_ENV *, DB_MUTEX_STAT **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->mutex_unlock =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->open = __dbcl_env_open;
+ dbenv->remove = __dbcl_env_remove;
+ dbenv->rep_elect =
+ (int (*)(DB_ENV *, int, int, int *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_flush =
+ (int (*)(DB_ENV *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_get_config =
+ (int (*)(DB_ENV *, u_int32_t, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_get_limit =
+ (int (*)(DB_ENV *, u_int32_t *, u_int32_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_get_nsites =
+ (int (*)(DB_ENV *, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_get_priority =
+ (int (*)(DB_ENV *, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_get_timeout =
+ (int (*)(DB_ENV *, int, db_timeout_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_process_message =
+ (int (*)(DB_ENV *, DBT *, DBT *, int *, DB_LSN *))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_set_config =
+ (int (*)(DB_ENV *, u_int32_t, int))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_set_limit =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_set_nsites =
+ (int (*)(DB_ENV *, int))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_set_priority =
+ (int (*)(DB_ENV *, int))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_set_timeout =
+ (int (*)(DB_ENV *, int, db_timeout_t))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_set_transport =
+ (int (*)(DB_ENV *, int, int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_start =
+ (int (*)(DB_ENV *, DBT *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_stat =
+ (int (*)(DB_ENV *, DB_REP_STAT **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->rep_sync =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->repmgr_add_remote_site =
+ (int (*)(DB_ENV *, const char *, u_int, int *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->repmgr_get_ack_policy =
+ (int (*)(DB_ENV *, int *))
+ __dbcl_dbenv_illegal;
+ dbenv->repmgr_set_ack_policy =
+ (int (*)(DB_ENV *, int))
+ __dbcl_dbenv_illegal;
+ dbenv->repmgr_set_local_site =
+ (int (*)(DB_ENV *, const char *, u_int, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->repmgr_site_list =
+ (int (*)(DB_ENV *, u_int *, DB_REPMGR_SITE **))
+ __dbcl_dbenv_illegal;
+ dbenv->repmgr_start =
+ (int (*)(DB_ENV *, int, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_alloc =
+ (int (*)(DB_ENV *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_app_dispatch =
+ (int (*)(DB_ENV *, int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_cachesize = __dbcl_env_set_cachesize;
+ dbenv->set_data_dir =
+ (int (*)(DB_ENV *, const char *))
+ __dbcl_dbenv_illegal;
+ dbenv->set_encrypt = __dbcl_env_set_encrypt;
+ dbenv->set_event_notify =
+ (int (*)(DB_ENV *, void (*)(DB_ENV *, u_int32_t, void *)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_feedback =
+ (int (*)(DB_ENV *, void (*)(DB_ENV *, int, int)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_flags = __dbcl_env_set_flags;
+ dbenv->set_intermediate_dir =
+ (int (*)(DB_ENV *, int, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_isalive =
+ (int (*)(DB_ENV *, int (*)(DB_ENV *, pid_t, db_threadid_t, u_int32_t)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lg_bsize =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lg_dir =
+ (int (*)(DB_ENV *, const char *))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lg_filemode =
+ (int (*)(DB_ENV *, int))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lg_max =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lg_regionmax =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lk_conflicts =
+ (int (*)(DB_ENV *, u_int8_t *, int))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lk_detect =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lk_max_lockers =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lk_max_locks =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_lk_max_objects =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_mp_max_openfd =
+ (int (*)(DB_ENV *, int))
+ __dbcl_dbenv_illegal;
+ dbenv->set_mp_max_write =
+ (int (*)(DB_ENV *, int, int))
+ __dbcl_dbenv_illegal;
+ dbenv->set_mp_mmapsize =
+ (int (*)(DB_ENV *, size_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_paniccall =
+ (int (*)(DB_ENV *, void (*)(DB_ENV *, int)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_rep_request =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_rpc_server = __dbcl_env_set_rpc_server;
+ dbenv->set_shm_key =
+ (int (*)(DB_ENV *, long))
+ __dbcl_dbenv_illegal;
+ dbenv->set_thread_count =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_thread_id =
+ (int (*)(DB_ENV *, void (*)(DB_ENV *, pid_t *, db_threadid_t*)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_thread_id_string =
+ (int (*)(DB_ENV *, char *(*)(DB_ENV *, pid_t, db_threadid_t, char *)))
+ __dbcl_dbenv_illegal;
+ dbenv->set_timeout =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_tmp_dir =
+ (int (*)(DB_ENV *, const char *))
+ __dbcl_dbenv_illegal;
+ dbenv->set_tx_max =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->set_tx_timestamp =
+ (int (*)(DB_ENV *, time_t *))
+ __dbcl_dbenv_illegal;
+ dbenv->set_verbose =
+ (int (*)(DB_ENV *, u_int32_t, int))
+ __dbcl_dbenv_illegal;
+ dbenv->stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->txn_begin = __dbcl_env_txn_begin;
+ dbenv->txn_checkpoint =
+ (int (*)(DB_ENV *, u_int32_t, u_int32_t, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->txn_recover = __dbcl_env_txn_recover;
+ dbenv->txn_stat =
+ (int (*)(DB_ENV *, DB_TXN_STAT **, u_int32_t))
+ __dbcl_dbenv_illegal;
+ dbenv->txn_stat_print =
+ (int (*)(DB_ENV *, u_int32_t))
+ __dbcl_dbenv_illegal;
+ return;
+}
+
+/*
+ * __dbcl_txn_init --
+ * Initialize DB_TXN handle methods.
+ *
+ * PUBLIC: void __dbcl_txn_init __P((DB_TXN *));
+ */
+void
+__dbcl_txn_init(txn)
+ DB_TXN *txn;
+{
+ txn->abort = __dbcl_txn_abort;
+ txn->commit = __dbcl_txn_commit;
+ txn->discard = __dbcl_txn_discard;
+ txn->get_name =
+ (int (*)(DB_TXN *, const char **))
+ __dbcl_txn_illegal;
+ txn->prepare = __dbcl_txn_prepare;
+ txn->set_name =
+ (int (*)(DB_TXN *, const char *))
+ __dbcl_txn_illegal;
+ return;
}
diff --git a/db/rpc_client/gen_client_ret.c b/db/rpc_client/gen_client_ret.c
index 7285afc25..1a475f07a 100644
--- a/db/rpc_client/gen_client_ret.c
+++ b/db/rpc_client/gen_client_ret.c
@@ -1,28 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: gen_client_ret.c,v 1.69 2004/09/22 16:29:51 bostic Exp $
+ * $Id: gen_client_ret.c,v 12.7 2006/09/08 19:27:46 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <rpc/rpc.h>
-
-#include <string.h>
-#endif
-
-#include "db_server.h"
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
#include "dbinc/txn.h"
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <rpc/rpc.h>
+#endif
+#include "db_server.h"
#include "dbinc_auto/rpc_client_ext.h"
#define FREE_IF_CHANGED(dbtp, orig) do { \
@@ -129,15 +124,15 @@ __dbcl_txn_abort_ret(txnp, replyp)
}
/*
- * PUBLIC: int __dbcl_txn_begin_ret __P((DB_ENV *,
- * PUBLIC: DB_TXN *, DB_TXN **, u_int32_t, __txn_begin_reply *));
+ * PUBLIC: int __dbcl_env_txn_begin_ret __P((DB_ENV *,
+ * PUBLIC: DB_TXN *, DB_TXN **, u_int32_t, __env_txn_begin_reply *));
*/
int
-__dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp)
+__dbcl_env_txn_begin_ret(envp, parent, txnpp, flags, replyp)
DB_ENV *envp;
DB_TXN *parent, **txnpp;
u_int32_t flags;
- __txn_begin_reply *replyp;
+ __env_txn_begin_reply *replyp;
{
DB_TXN *txn;
int ret;
@@ -161,6 +156,35 @@ __dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp)
}
/*
+ * PUBLIC: int __dbcl_env_cdsgroup_begin_ret __P((DB_ENV *,
+ * PUBLIC: DB_TXN **, __env_cdsgroup_begin_reply *));
+ */
+int
+__dbcl_env_cdsgroup_begin_ret(envp, txnpp, replyp)
+ DB_ENV *envp;
+ DB_TXN **txnpp;
+ __env_cdsgroup_begin_reply *replyp;
+{
+ DB_TXN *txn;
+ int ret;
+
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ if ((ret = __os_calloc(envp, 1, sizeof(DB_TXN), &txn)) != 0)
+ return (ret);
+ /*
+ * !!!
+ * Cast the txnidcl_id to 32-bits. We don't want to change the
+ * size of the txn structure. But if we're running on 64-bit
+ * machines, we could overflow. Ignore for now.
+ */
+ __dbcl_txn_setup(envp, txn, NULL, (u_int32_t)replyp->txnidcl_id);
+ *txnpp = txn;
+ return (replyp->status);
+}
+
+/*
* PUBLIC: int __dbcl_txn_commit_ret
* PUBLIC: __P((DB_TXN *, u_int32_t, __txn_commit_reply *));
*/
@@ -193,17 +217,17 @@ __dbcl_txn_discard_ret(txnp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long,
- * PUBLIC: long *, u_int32_t, __txn_recover_reply *));
+ * PUBLIC: int __dbcl_env_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long,
+ * PUBLIC: long *, u_int32_t, __env_txn_recover_reply *));
*/
int
-__dbcl_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp)
+__dbcl_env_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;
+ __env_txn_recover_reply *replyp;
{
DB_PREPLIST *prep;
DB_TXN *txnarray, *txn;
@@ -634,27 +658,27 @@ __dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_close_ret __P((DBC *, __dbc_close_reply *));
+ * PUBLIC: int __dbcl_dbc_c_close_ret __P((DBC *, __dbc_c_close_reply *));
*/
int
-__dbcl_dbc_close_ret(dbc, replyp)
+__dbcl_dbc_c_close_ret(dbc, replyp)
DBC *dbc;
- __dbc_close_reply *replyp;
+ __dbc_c_close_reply *replyp;
{
__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 *));
+ * PUBLIC: int __dbcl_dbc_c_count_ret
+ * PUBLIC: __P((DBC *, db_recno_t *, u_int32_t, __dbc_c_count_reply *));
*/
int
-__dbcl_dbc_count_ret(dbc, countp, flags, replyp)
+__dbcl_dbc_c_count_ret(dbc, countp, flags, replyp)
DBC *dbc;
db_recno_t *countp;
u_int32_t flags;
- __dbc_count_reply *replyp;
+ __dbc_c_count_reply *replyp;
{
COMPQUIET(dbc, NULL);
COMPQUIET(flags, 0);
@@ -667,14 +691,14 @@ __dbcl_dbc_count_ret(dbc, countp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_dup_ret
- * PUBLIC: __P((DBC *, DBC **, u_int32_t, __dbc_dup_reply *));
+ * PUBLIC: int __dbcl_dbc_c_dup_ret
+ * PUBLIC: __P((DBC *, DBC **, u_int32_t, __dbc_c_dup_reply *));
*/
int
-__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
+__dbcl_dbc_c_dup_ret(dbc, dbcp, flags, replyp)
DBC *dbc, **dbcp;
u_int32_t flags;
- __dbc_dup_reply *replyp;
+ __dbc_c_dup_reply *replyp;
{
COMPQUIET(flags, 0);
@@ -685,15 +709,15 @@ __dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_get_ret
- * PUBLIC: __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_get_reply *));
+ * PUBLIC: int __dbcl_dbc_c_get_ret
+ * PUBLIC: __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_c_get_reply *));
*/
int
-__dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
+__dbcl_dbc_c_get_ret(dbc, key, data, flags, replyp)
DBC *dbc;
DBT *key, *data;
u_int32_t flags;
- __dbc_get_reply *replyp;
+ __dbc_c_get_reply *replyp;
{
DB_ENV *dbenv;
int ret;
@@ -726,17 +750,17 @@ __dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
}
/*
- * PUBLIC: int __dbcl_dbc_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t,
- * PUBLIC: __dbc_pget_reply *));
+ * PUBLIC: int __dbcl_dbc_c_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_c_pget_reply *));
*/
int
-__dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp)
+__dbcl_dbc_c_pget_ret(dbc, skey, pkey, data, flags, replyp)
DBC * dbc;
DBT * skey;
DBT * pkey;
DBT * data;
u_int32_t flags;
- __dbc_pget_reply *replyp;
+ __dbc_c_pget_reply *replyp;
{
DB_ENV *dbenv;
int ret;
@@ -778,15 +802,15 @@ err: FREE_IF_CHANGED(skey, oldskey);
}
/*
- * PUBLIC: int __dbcl_dbc_put_ret
- * PUBLIC: __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_put_reply *));
+ * PUBLIC: int __dbcl_dbc_c_put_ret
+ * PUBLIC: __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_c_put_reply *));
*/
int
-__dbcl_dbc_put_ret(dbc, key, data, flags, replyp)
+__dbcl_dbc_c_put_ret(dbc, key, data, flags, replyp)
DBC *dbc;
DBT *key, *data;
u_int32_t flags;
- __dbc_put_reply *replyp;
+ __dbc_c_put_reply *replyp;
{
COMPQUIET(data, NULL);
diff --git a/db/rpc_server/c/db_server_proc.c b/db/rpc_server/c/db_server_proc.c
index 1793df42f..c563caa8d 100644
--- a/db/rpc_server/c/db_server_proc.c
+++ b/db/rpc_server/c/db_server_proc.c
@@ -1,35 +1,29 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_server_proc.c,v 1.106 2004/09/22 17:30:12 bostic Exp $
+ * $Id: db_server_proc.c,v 12.14 2006/09/19 13:39:44 mjc Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
#include <rpc/rpc.h>
-
-#include <string.h>
#endif
-
#include "db_server.h"
-
-#include "db_int.h"
#include "dbinc/db_server_int.h"
#include "dbinc_auto/rpc_server_ext.h"
/*
- * PUBLIC: void __env_get_cachesize_proc __P((long,
+ * PUBLIC: void __env_get_cachesize_proc __P((u_int,
* PUBLIC: __env_get_cachesize_reply *));
*/
void
__env_get_cachesize_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
__env_get_cachesize_reply *replyp;
{
DB_ENV *dbenv;
@@ -43,16 +37,16 @@ __env_get_cachesize_proc(dbenvcl_id, replyp)
}
/*
- * PUBLIC: void __env_cachesize_proc __P((long, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, __env_cachesize_reply *));
+ * PUBLIC: void __env_set_cachesize_proc __P((u_int, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, __env_set_cachesize_reply *));
*/
void
-__env_cachesize_proc(dbenvcl_id, gbytes, bytes, ncache, replyp)
- long dbenvcl_id;
+__env_set_cachesize_proc(dbenvcl_id, gbytes, bytes, ncache, replyp)
+ u_int dbenvcl_id;
u_int32_t gbytes;
u_int32_t bytes;
u_int32_t ncache;
- __env_cachesize_reply *replyp;
+ __env_set_cachesize_reply *replyp;
{
DB_ENV *dbenv;
ct_entry *dbenv_ctp;
@@ -68,18 +62,55 @@ __env_cachesize_proc(dbenvcl_id, gbytes, bytes, ncache, replyp)
}
/*
- * PUBLIC: void __env_close_proc __P((long, u_int32_t, __env_close_reply *));
+ * PUBLIC: void __env_cdsgroup_begin_proc __P((u_int,
+ * PUBLIC: __env_cdsgroup_begin_reply *));
+ */
+void
+__env_cdsgroup_begin_proc(dbenvcl_id, replyp)
+ u_int dbenvcl_id;
+ __env_cdsgroup_begin_reply *replyp;
+{
+ DB_ENV *dbenv;
+ DB_TXN *txnp;
+ ct_entry *ctp, *dbenv_ctp;
+ int ret;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ ctp = new_ct_ent(&replyp->status);
+ if (ctp == NULL)
+ return;
+
+ ret = dbenv->cdsgroup_begin(dbenv, &txnp);
+ if (ret == 0) {
+ ctp->ct_txnp = txnp;
+ ctp->ct_type = CT_TXN;
+ ctp->ct_parent = NULL;
+ ctp->ct_envparent = dbenv_ctp;
+ replyp->txnidcl_id = ctp->ct_id;
+ __dbsrv_settimeout(ctp, dbenv_ctp->ct_timeout);
+ __dbsrv_active(ctp);
+ } else
+ __dbclear_ctp(ctp);
+
+ replyp->status = ret;
+ return;
+}
+
+/*
+ * PUBLIC: void __env_close_proc __P((u_int, u_int32_t, __env_close_reply *));
*/
void
__env_close_proc(dbenvcl_id, flags, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
u_int32_t flags;
__env_close_reply *replyp;
{
ct_entry *dbenv_ctp;
ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
- replyp->status = __dbenv_close_int(dbenvcl_id, flags, 0);
+ replyp->status = __env_close_int(dbenvcl_id, flags, 0);
return;
}
@@ -114,13 +145,13 @@ __env_create_proc(timeout, replyp)
}
/*
- * PUBLIC: void __env_dbremove_proc __P((long, long, char *, char *, u_int32_t,
- * PUBLIC: __env_dbremove_reply *));
+ * PUBLIC: void __env_dbremove_proc __P((u_int, u_int, char *, char *,
+ * PUBLIC: u_int32_t, __env_dbremove_reply *));
*/
void
__env_dbremove_proc(dbenvcl_id, txnpcl_id, name, subdb, flags, replyp)
- long dbenvcl_id;
- long txnpcl_id;
+ u_int dbenvcl_id;
+ u_int txnpcl_id;
char *name;
char *subdb;
u_int32_t flags;
@@ -148,13 +179,13 @@ __env_dbremove_proc(dbenvcl_id, txnpcl_id, name, subdb, flags, replyp)
}
/*
- * PUBLIC: void __env_dbrename_proc __P((long, long, char *, char *, char *,
+ * PUBLIC: void __env_dbrename_proc __P((u_int, u_int, char *, char *, char *,
* PUBLIC: u_int32_t, __env_dbrename_reply *));
*/
void
__env_dbrename_proc(dbenvcl_id, txnpcl_id, name, subdb, newname, flags, replyp)
- long dbenvcl_id;
- long txnpcl_id;
+ u_int dbenvcl_id;
+ u_int txnpcl_id;
char *name;
char *subdb;
char *newname;
@@ -183,12 +214,12 @@ __env_dbrename_proc(dbenvcl_id, txnpcl_id, name, subdb, newname, flags, replyp)
}
/*
- * PUBLIC: void __env_get_encrypt_flags_proc __P((long,
+ * PUBLIC: void __env_get_encrypt_flags_proc __P((u_int,
* PUBLIC: __env_get_encrypt_flags_reply *));
*/
void
__env_get_encrypt_flags_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
__env_get_encrypt_flags_reply *replyp;
{
DB_ENV *dbenv;
@@ -201,15 +232,15 @@ __env_get_encrypt_flags_proc(dbenvcl_id, replyp)
}
/*
- * PUBLIC: void __env_encrypt_proc __P((long, char *, u_int32_t,
- * PUBLIC: __env_encrypt_reply *));
+ * PUBLIC: void __env_set_encrypt_proc __P((u_int, char *, u_int32_t,
+ * PUBLIC: __env_set_encrypt_reply *));
*/
void
-__env_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
- long dbenvcl_id;
+__env_set_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
+ u_int dbenvcl_id;
char *passwd;
u_int32_t flags;
- __env_encrypt_reply *replyp;
+ __env_set_encrypt_reply *replyp;
{
int ret;
DB_ENV * dbenv;
@@ -225,11 +256,11 @@ __env_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
}
/*
- * PUBLIC: void __env_get_flags_proc __P((long, __env_get_flags_reply *));
+ * PUBLIC: void __env_get_flags_proc __P((u_int, __env_get_flags_reply *));
*/
void
__env_get_flags_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
__env_get_flags_reply *replyp;
{
DB_ENV *dbenv;
@@ -242,15 +273,15 @@ __env_get_flags_proc(dbenvcl_id, replyp)
}
/*
- * PUBLIC: void __env_flags_proc __P((long, u_int32_t, u_int32_t,
- * PUBLIC: __env_flags_reply *));
+ * PUBLIC: void __env_set_flags_proc __P((u_int, u_int32_t, u_int32_t,
+ * PUBLIC: __env_set_flags_reply *));
*/
void
-__env_flags_proc(dbenvcl_id, flags, onoff, replyp)
- long dbenvcl_id;
+__env_set_flags_proc(dbenvcl_id, flags, onoff, replyp)
+ u_int dbenvcl_id;
u_int32_t flags;
u_int32_t onoff;
- __env_flags_reply *replyp;
+ __env_set_flags_reply *replyp;
{
DB_ENV *dbenv;
ct_entry *dbenv_ctp;
@@ -270,11 +301,11 @@ __env_flags_proc(dbenvcl_id, flags, onoff, replyp)
}
/*
- * PUBLIC: void __env_get_home_proc __P((long, __env_get_home_reply *));
+ * PUBLIC: void __env_get_home_proc __P((u_int, __env_get_home_reply *));
*/
void
__env_get_home_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
__env_get_home_reply *replyp;
{
DB_ENV *dbenv;
@@ -288,12 +319,12 @@ __env_get_home_proc(dbenvcl_id, replyp)
}
/*
- * PUBLIC: void __env_get_open_flags_proc __P((long,
+ * PUBLIC: void __env_get_open_flags_proc __P((u_int,
* PUBLIC: __env_get_open_flags_reply *));
*/
void
__env_get_open_flags_proc(dbenvcl_id, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
__env_get_open_flags_reply *replyp;
{
DB_ENV *dbenv;
@@ -306,12 +337,12 @@ __env_get_open_flags_proc(dbenvcl_id, replyp)
}
/*
- * PUBLIC: void __env_open_proc __P((long, char *, u_int32_t, u_int32_t,
+ * PUBLIC: void __env_open_proc __P((u_int, char *, u_int32_t, u_int32_t,
* PUBLIC: __env_open_reply *));
*/
void
__env_open_proc(dbenvcl_id, home, flags, mode, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
char *home;
u_int32_t flags;
u_int32_t mode;
@@ -361,7 +392,7 @@ __env_open_proc(dbenvcl_id, home, flags, mode, replyp)
if (__dbsrv_verbose)
printf("Sharing env ID %ld\n", new_ctp->ct_id);
replyp->envcl_id = new_ctp->ct_id;
- ret = __dbenv_close_int(dbenvcl_id, 0, 0);
+ ret = __env_close_int(dbenvcl_id, 0, 0);
} else {
ret = dbenv->open(dbenv, fullhome->home, newflags, mode);
dbenv_ctp->ct_envdp.home = fullhome;
@@ -372,12 +403,12 @@ out: replyp->status = ret;
}
/*
- * PUBLIC: void __env_remove_proc __P((long, char *, u_int32_t,
+ * PUBLIC: void __env_remove_proc __P((u_int, char *, u_int32_t,
* PUBLIC: __env_remove_reply *));
*/
void
__env_remove_proc(dbenvcl_id, home, flags, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
char *home;
u_int32_t flags;
__env_remove_reply *replyp;
@@ -403,11 +434,11 @@ __env_remove_proc(dbenvcl_id, home, flags, replyp)
}
/*
- * PUBLIC: void __txn_abort_proc __P((long, __txn_abort_reply *));
+ * PUBLIC: void __txn_abort_proc __P((u_int, __txn_abort_reply *));
*/
void
__txn_abort_proc(txnpcl_id, replyp)
- long txnpcl_id;
+ u_int txnpcl_id;
__txn_abort_reply *replyp;
{
DB_TXN *txnp;
@@ -424,15 +455,15 @@ __txn_abort_proc(txnpcl_id, replyp)
}
/*
- * PUBLIC: void __txn_begin_proc __P((long, long, u_int32_t,
- * PUBLIC: __txn_begin_reply *));
+ * PUBLIC: void __env_txn_begin_proc __P((u_int, u_int, u_int32_t,
+ * PUBLIC: __env_txn_begin_reply *));
*/
void
-__txn_begin_proc(dbenvcl_id, parentcl_id, flags, replyp)
- long dbenvcl_id;
- long parentcl_id;
+__env_txn_begin_proc(dbenvcl_id, parentcl_id, flags, replyp)
+ u_int dbenvcl_id;
+ u_int parentcl_id;
u_int32_t flags;
- __txn_begin_reply *replyp;
+ __env_txn_begin_reply *replyp;
{
DB_ENV *dbenv;
DB_TXN *parent, *txnp;
@@ -475,12 +506,12 @@ __txn_begin_proc(dbenvcl_id, parentcl_id, flags, replyp)
}
/*
- * PUBLIC: void __txn_commit_proc __P((long, u_int32_t,
+ * PUBLIC: void __txn_commit_proc __P((u_int, u_int32_t,
* PUBLIC: __txn_commit_reply *));
*/
void
__txn_commit_proc(txnpcl_id, flags, replyp)
- long txnpcl_id;
+ u_int txnpcl_id;
u_int32_t flags;
__txn_commit_reply *replyp;
{
@@ -499,12 +530,12 @@ __txn_commit_proc(txnpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __txn_discard_proc __P((long, u_int32_t,
+ * PUBLIC: void __txn_discard_proc __P((u_int, u_int32_t,
* PUBLIC: __txn_discard_reply *));
*/
void
__txn_discard_proc(txnpcl_id, flags, replyp)
- long txnpcl_id;
+ u_int txnpcl_id;
u_int32_t flags;
__txn_discard_reply *replyp;
{
@@ -523,12 +554,12 @@ __txn_discard_proc(txnpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __txn_prepare_proc __P((long, u_int8_t *,
+ * PUBLIC: void __txn_prepare_proc __P((u_int, u_int8_t *,
* PUBLIC: __txn_prepare_reply *));
*/
void
__txn_prepare_proc(txnpcl_id, gid, replyp)
- long txnpcl_id;
+ u_int txnpcl_id;
u_int8_t *gid;
__txn_prepare_reply *replyp;
{
@@ -545,15 +576,15 @@ __txn_prepare_proc(txnpcl_id, gid, replyp)
}
/*
- * PUBLIC: void __txn_recover_proc __P((long, u_int32_t, u_int32_t,
- * PUBLIC: __txn_recover_reply *, int *));
+ * PUBLIC: void __env_txn_recover_proc __P((u_int, u_int32_t, u_int32_t,
+ * PUBLIC: __env_txn_recover_reply *, int *));
*/
void
-__txn_recover_proc(dbenvcl_id, count, flags, replyp, freep)
- long dbenvcl_id;
+__env_txn_recover_proc(dbenvcl_id, count, flags, replyp, freep)
+ u_int dbenvcl_id;
u_int32_t count;
u_int32_t flags;
- __txn_recover_reply *replyp;
+ __env_txn_recover_reply *replyp;
int * freep;
{
DB_ENV *dbenv;
@@ -658,37 +689,14 @@ out2:
}
/*
- * PUBLIC: void __db_bt_maxkey_proc __P((long, u_int32_t,
- * PUBLIC: __db_bt_maxkey_reply *));
- */
-void
-__db_bt_maxkey_proc(dbpcl_id, maxkey, replyp)
- long dbpcl_id;
- u_int32_t maxkey;
- __db_bt_maxkey_reply *replyp;
-{
- DB *dbp;
- ct_entry *dbp_ctp;
- int ret;
-
- ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
- dbp = (DB *)dbp_ctp->ct_anyp;
-
- ret = dbp->set_bt_maxkey(dbp, maxkey);
-
- replyp->status = ret;
- return;
-}
-
-/*
- * PUBLIC: void __db_associate_proc __P((long, long, long, u_int32_t,
+ * PUBLIC: void __db_associate_proc __P((u_int, u_int, u_int, u_int32_t,
* PUBLIC: __db_associate_reply *));
*/
void
__db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id, flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
- long sdbpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
+ u_int sdbpcl_id;
u_int32_t flags;
__db_associate_reply *replyp;
{
@@ -727,12 +735,12 @@ __db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_get_bt_minkey_proc __P((long,
+ * PUBLIC: void __db_get_bt_minkey_proc __P((u_int,
* PUBLIC: __db_get_bt_minkey_reply *));
*/
void
__db_get_bt_minkey_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_bt_minkey_reply *replyp;
{
DB *dbp;
@@ -745,14 +753,14 @@ __db_get_bt_minkey_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_bt_minkey_proc __P((long, u_int32_t,
- * PUBLIC: __db_bt_minkey_reply *));
+ * PUBLIC: void __db_set_bt_minkey_proc __P((u_int, u_int32_t,
+ * PUBLIC: __db_set_bt_minkey_reply *));
*/
void
-__db_bt_minkey_proc(dbpcl_id, minkey, replyp)
- long dbpcl_id;
+__db_set_bt_minkey_proc(dbpcl_id, minkey, replyp)
+ u_int dbpcl_id;
u_int32_t minkey;
- __db_bt_minkey_reply *replyp;
+ __db_set_bt_minkey_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -768,11 +776,11 @@ __db_bt_minkey_proc(dbpcl_id, minkey, replyp)
}
/*
- * PUBLIC: void __db_close_proc __P((long, u_int32_t, __db_close_reply *));
+ * PUBLIC: void __db_close_proc __P((u_int, u_int32_t, __db_close_reply *));
*/
void
__db_close_proc(dbpcl_id, flags, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
u_int32_t flags;
__db_close_reply *replyp;
{
@@ -784,11 +792,11 @@ __db_close_proc(dbpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_create_proc __P((long, u_int32_t, __db_create_reply *));
+ * PUBLIC: void __db_create_proc __P((u_int, u_int32_t, __db_create_reply *));
*/
void
__db_create_proc(dbenvcl_id, flags, replyp)
- long dbenvcl_id;
+ u_int dbenvcl_id;
u_int32_t flags;
__db_create_reply *replyp;
{
@@ -807,7 +815,7 @@ __db_create_proc(dbenvcl_id, flags, replyp)
* We actually require env's for databases. The client should
* have caught it, but just in case.
*/
- DB_ASSERT(dbenv != NULL);
+ DB_ASSERT(dbenv, dbenv != NULL);
if ((ret = db_create(&dbp, dbenv, flags)) == 0) {
dbp_ctp->ct_dbp = dbp;
dbp_ctp->ct_type = CT_DB;
@@ -821,14 +829,15 @@ __db_create_proc(dbenvcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_del_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __db_del_reply *));
+ * PUBLIC: void __db_del_proc __P((u_int, u_int, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t,
+ * PUBLIC: __db_del_reply *));
*/
void
__db_del_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
keydata, keysize, flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -869,12 +878,12 @@ __db_del_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
}
/*
- * PUBLIC: void __db_get_encrypt_flags_proc __P((long,
+ * PUBLIC: void __db_get_encrypt_flags_proc __P((u_int,
* PUBLIC: __db_get_encrypt_flags_reply *));
*/
void
__db_get_encrypt_flags_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_encrypt_flags_reply *replyp;
{
DB *dbp;
@@ -887,15 +896,15 @@ __db_get_encrypt_flags_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_encrypt_proc __P((long, char *, u_int32_t,
- * PUBLIC: __db_encrypt_reply *));
+ * PUBLIC: void __db_set_encrypt_proc __P((u_int, char *, u_int32_t,
+ * PUBLIC: __db_set_encrypt_reply *));
*/
void
-__db_encrypt_proc(dbpcl_id, passwd, flags, replyp)
- long dbpcl_id;
+__db_set_encrypt_proc(dbpcl_id, passwd, flags, replyp)
+ u_int dbpcl_id;
char *passwd;
u_int32_t flags;
- __db_encrypt_reply *replyp;
+ __db_set_encrypt_reply *replyp;
{
int ret;
DB * dbp;
@@ -910,13 +919,13 @@ __db_encrypt_proc(dbpcl_id, passwd, flags, replyp)
}
/*
- * PUBLIC: void __db_get_extentsize_proc __P((long,
- * PUBLIC: __db_get_extentsize_reply *));
+ * PUBLIC: void __db_get_q_extentsize_proc __P((u_int,
+ * PUBLIC: __db_get_q_extentsize_reply *));
*/
void
-__db_get_extentsize_proc(dbpcl_id, replyp)
- long dbpcl_id;
- __db_get_extentsize_reply *replyp;
+__db_get_q_extentsize_proc(dbpcl_id, replyp)
+ u_int dbpcl_id;
+ __db_get_q_extentsize_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -928,14 +937,14 @@ __db_get_extentsize_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_extentsize_proc __P((long, u_int32_t,
- * PUBLIC: __db_extentsize_reply *));
+ * PUBLIC: void __db_set_q_extentsize_proc __P((u_int, u_int32_t,
+ * PUBLIC: __db_set_q_extentsize_reply *));
*/
void
-__db_extentsize_proc(dbpcl_id, extentsize, replyp)
- long dbpcl_id;
+__db_set_q_extentsize_proc(dbpcl_id, extentsize, replyp)
+ u_int dbpcl_id;
u_int32_t extentsize;
- __db_extentsize_reply *replyp;
+ __db_set_q_extentsize_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -951,11 +960,11 @@ __db_extentsize_proc(dbpcl_id, extentsize, replyp)
}
/*
- * PUBLIC: void __db_get_flags_proc __P((long, __db_get_flags_reply *));
+ * PUBLIC: void __db_get_flags_proc __P((u_int, __db_get_flags_reply *));
*/
void
__db_get_flags_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_flags_reply *replyp;
{
DB *dbp;
@@ -968,13 +977,14 @@ __db_get_flags_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_flags_proc __P((long, u_int32_t, __db_flags_reply *));
+ * PUBLIC: void __db_set_flags_proc
+ * PUBLIC: __P((u_int, u_int32_t, __db_set_flags_reply *));
*/
void
-__db_flags_proc(dbpcl_id, flags, replyp)
- long dbpcl_id;
+__db_set_flags_proc(dbpcl_id, flags, replyp)
+ u_int dbpcl_id;
u_int32_t flags;
- __db_flags_reply *replyp;
+ __db_set_flags_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -991,17 +1001,17 @@ __db_flags_proc(dbpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_get_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __db_get_reply *,
- * PUBLIC: int *));
+ * PUBLIC: void __db_get_proc __P((u_int, u_int, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t,
+ * PUBLIC: u_int32_t, __db_get_reply *, int *));
*/
void
__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_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -1022,7 +1032,7 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
DBT key, data;
DB_TXN *txnp;
ct_entry *dbp_ctp, *txnp_ctp;
- int key_alloc, bulk_alloc, ret;
+ int ret;
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
dbp = (DB *)dbp_ctp->ct_anyp;
@@ -1032,8 +1042,9 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
} else
txnp = NULL;
+ replyp->keydata.keydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
- bulk_alloc = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
@@ -1064,7 +1075,6 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
data.ulen, &data.data);
if (ret != 0)
goto err;
- bulk_alloc = 1;
}
data.flags |= DB_DBT_USERMEM;
} else
@@ -1090,16 +1100,11 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
/*
* Key
*/
- key_alloc = 0;
if (key.data == keydata) {
ret = __os_umalloc(dbp->dbenv,
key.size, &replyp->keydata.keydata_val);
- if (ret != 0) {
- __os_ufree(dbp->dbenv, key.data);
- __os_ufree(dbp->dbenv, data.data);
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->keydata.keydata_val, key.data, key.size);
} else
replyp->keydata.keydata_val = key.data;
@@ -1112,39 +1117,37 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
if (data.data == datadata) {
ret = __os_umalloc(dbp->dbenv,
data.size, &replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(dbp->dbenv, key.data);
- __os_ufree(dbp->dbenv, data.data);
- if (key_alloc)
- __os_ufree(dbp->dbenv,
- replyp->keydata.keydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.data,
data.size);
} else
replyp->datadata.datadata_val = data.data;
replyp->datadata.datadata_len = data.size;
} else {
-err: replyp->keydata.keydata_val = NULL;
+err: FREE_IF_CHANGED(dbp->dbenv, key.data, keydata);
+ FREE_IF_CHANGED(dbp->dbenv, data.data, datadata);
+ FREE_IF_CHANGED(dbp->dbenv,
+ replyp->keydata.keydata_val, key.data);
+ FREE_IF_CHANGED(dbp->dbenv,
+ replyp->datadata.datadata_val, data.data);
+ replyp->keydata.keydata_val = NULL;
replyp->keydata.keydata_len = 0;
replyp->datadata.datadata_val = NULL;
replyp->datadata.datadata_len = 0;
*freep = 0;
- if (bulk_alloc)
- __os_ufree(dbp->dbenv, data.data);
}
replyp->status = ret;
return;
}
/*
- * PUBLIC: void __db_get_h_ffactor_proc __P((long,
+ * PUBLIC: void __db_get_h_ffactor_proc __P((u_int,
* PUBLIC: __db_get_h_ffactor_reply *));
*/
void
__db_get_h_ffactor_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_h_ffactor_reply *replyp;
{
DB *dbp;
@@ -1157,14 +1160,14 @@ __db_get_h_ffactor_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_h_ffactor_proc __P((long, u_int32_t,
- * PUBLIC: __db_h_ffactor_reply *));
+ * PUBLIC: void __db_set_h_ffactor_proc __P((u_int, u_int32_t,
+ * PUBLIC: __db_set_h_ffactor_reply *));
*/
void
-__db_h_ffactor_proc(dbpcl_id, ffactor, replyp)
- long dbpcl_id;
+__db_set_h_ffactor_proc(dbpcl_id, ffactor, replyp)
+ u_int dbpcl_id;
u_int32_t ffactor;
- __db_h_ffactor_reply *replyp;
+ __db_set_h_ffactor_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1180,11 +1183,11 @@ __db_h_ffactor_proc(dbpcl_id, ffactor, replyp)
}
/*
- * PUBLIC: void __db_get_h_nelem_proc __P((long, __db_get_h_nelem_reply *));
+ * PUBLIC: void __db_get_h_nelem_proc __P((u_int, __db_get_h_nelem_reply *));
*/
void
__db_get_h_nelem_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_h_nelem_reply *replyp;
{
DB *dbp;
@@ -1197,14 +1200,14 @@ __db_get_h_nelem_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_h_nelem_proc __P((long, u_int32_t,
- * PUBLIC: __db_h_nelem_reply *));
+ * PUBLIC: void __db_set_h_nelem_proc __P((u_int, u_int32_t,
+ * PUBLIC: __db_set_h_nelem_reply *));
*/
void
-__db_h_nelem_proc(dbpcl_id, nelem, replyp)
- long dbpcl_id;
+__db_set_h_nelem_proc(dbpcl_id, nelem, replyp)
+ u_int dbpcl_id;
u_int32_t nelem;
- __db_h_nelem_reply *replyp;
+ __db_set_h_nelem_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1220,15 +1223,15 @@ __db_h_nelem_proc(dbpcl_id, nelem, replyp)
}
/*
- * PUBLIC: void __db_key_range_proc __P((long, long, u_int32_t, u_int32_t,
+ * PUBLIC: void __db_key_range_proc __P((u_int, u_int, u_int32_t, u_int32_t,
* PUBLIC: u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t,
* PUBLIC: __db_key_range_reply *));
*/
void
__db_key_range_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen,
keyflags, keydata, keysize, flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -1272,11 +1275,11 @@ __db_key_range_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen,
}
/*
- * PUBLIC: void __db_get_lorder_proc __P((long, __db_get_lorder_reply *));
+ * PUBLIC: void __db_get_lorder_proc __P((u_int, __db_get_lorder_reply *));
*/
void
__db_get_lorder_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_lorder_reply *replyp;
{
DB *dbp;
@@ -1289,13 +1292,14 @@ __db_get_lorder_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_lorder_proc __P((long, u_int32_t, __db_lorder_reply *));
+ * PUBLIC: void __db_set_lorder_proc
+ * PUBLIC: __P((u_int, u_int32_t, __db_set_lorder_reply *));
*/
void
-__db_lorder_proc(dbpcl_id, lorder, replyp)
- long dbpcl_id;
+__db_set_lorder_proc(dbpcl_id, lorder, replyp)
+ u_int dbpcl_id;
u_int32_t lorder;
- __db_lorder_reply *replyp;
+ __db_set_lorder_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1311,12 +1315,12 @@ __db_lorder_proc(dbpcl_id, lorder, replyp)
}
/*
- * PUBLIC: void __db_get_name_proc __P((long, __db_get_name_reply *));
+ * PUBLIC: void __db_get_dbname_proc __P((u_int, __db_get_dbname_reply *));
*/
void
-__db_get_name_proc(dbpcl_id, replyp)
- long dbpcl_id;
- __db_get_name_reply *replyp;
+__db_get_dbname_proc(dbpcl_id, replyp)
+ u_int dbpcl_id;
+ __db_get_dbname_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1329,12 +1333,12 @@ __db_get_name_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_get_open_flags_proc __P((long,
+ * PUBLIC: void __db_get_open_flags_proc __P((u_int,
* PUBLIC: __db_get_open_flags_reply *));
*/
void
__db_get_open_flags_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_open_flags_reply *replyp;
{
DB *dbp;
@@ -1347,13 +1351,13 @@ __db_get_open_flags_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_open_proc __P((long, long, char *, char *, u_int32_t,
+ * PUBLIC: void __db_open_proc __P((u_int, u_int, char *, char *, u_int32_t,
* PUBLIC: u_int32_t, u_int32_t, __db_open_reply *));
*/
void
__db_open_proc(dbpcl_id, txnpcl_id, name, subdb, type, flags, mode, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
char *name;
char *subdb;
u_int32_t type;
@@ -1429,11 +1433,11 @@ out:
}
/*
- * PUBLIC: void __db_get_pagesize_proc __P((long, __db_get_pagesize_reply *));
+ * PUBLIC: void __db_get_pagesize_proc __P((u_int, __db_get_pagesize_reply *));
*/
void
__db_get_pagesize_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_pagesize_reply *replyp;
{
DB *dbp;
@@ -1446,14 +1450,14 @@ __db_get_pagesize_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_pagesize_proc __P((long, u_int32_t,
- * PUBLIC: __db_pagesize_reply *));
+ * PUBLIC: void __db_set_pagesize_proc __P((u_int, u_int32_t,
+ * PUBLIC: __db_set_pagesize_reply *));
*/
void
-__db_pagesize_proc(dbpcl_id, pagesize, replyp)
- long dbpcl_id;
+__db_set_pagesize_proc(dbpcl_id, pagesize, replyp)
+ u_int dbpcl_id;
u_int32_t pagesize;
- __db_pagesize_reply *replyp;
+ __db_set_pagesize_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1469,19 +1473,19 @@ __db_pagesize_proc(dbpcl_id, pagesize, replyp)
}
/*
- * PUBLIC: void __db_pget_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __db_pget_reply *,
- * PUBLIC: int *));
+ * PUBLIC: void __db_pget_proc __P((u_int, u_int, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *,
+ * PUBLIC: u_int32_t, u_int32_t, __db_pget_reply *, int *));
*/
void
__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_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t skeydlen;
u_int32_t skeydoff;
u_int32_t skeyulen;
@@ -1508,7 +1512,7 @@ __db_pget_proc(dbpcl_id, txnpcl_id, skeydlen, skeydoff, skeyulen,
DBT skey, pkey, data;
DB_TXN *txnp;
ct_entry *dbp_ctp, *txnp_ctp;
- int key_alloc, ret;
+ int ret;
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
dbp = (DB *)dbp_ctp->ct_anyp;
@@ -1518,6 +1522,9 @@ __db_pget_proc(dbpcl_id, txnpcl_id, skeydlen, skeydoff, skeyulen,
} else
txnp = NULL;
+ replyp->skeydata.skeydata_val = NULL;
+ replyp->pkeydata.pkeydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
memset(&skey, 0, sizeof(skey));
memset(&pkey, 0, sizeof(pkey));
@@ -1572,17 +1579,11 @@ __db_pget_proc(dbpcl_id, txnpcl_id, skeydlen, skeydoff, skeyulen,
/*
* Key
*/
- key_alloc = 0;
if (skey.data == skeydata) {
ret = __os_umalloc(dbp->dbenv,
skey.size, &replyp->skeydata.skeydata_val);
- if (ret != 0) {
- __os_ufree(dbp->dbenv, skey.data);
- __os_ufree(dbp->dbenv, pkey.data);
- __os_ufree(dbp->dbenv, data.data);
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->skeydata.skeydata_val, skey.data,
skey.size);
} else
@@ -1596,22 +1597,14 @@ __db_pget_proc(dbpcl_id, txnpcl_id, skeydlen, skeydoff, skeyulen,
if (pkey.data == pkeydata) {
ret = __os_umalloc(dbp->dbenv,
pkey.size, &replyp->pkeydata.pkeydata_val);
- if (ret != 0) {
- __os_ufree(dbp->dbenv, skey.data);
- __os_ufree(dbp->dbenv, pkey.data);
- __os_ufree(dbp->dbenv, data.data);
- if (key_alloc)
- __os_ufree(dbp->dbenv,
- replyp->skeydata.skeydata_val);
+ if (ret != 0)
goto err;
- }
/*
* We can set it to 2, because they cannot send the
* pkey over without sending the skey over too.
* So if they did send a pkey, they must have sent
* the skey as well.
*/
- key_alloc = 2;
memcpy(replyp->pkeydata.pkeydata_val, pkey.data,
pkey.size);
} else
@@ -1624,30 +1617,24 @@ __db_pget_proc(dbpcl_id, txnpcl_id, skeydlen, skeydoff, skeyulen,
if (data.data == datadata) {
ret = __os_umalloc(dbp->dbenv,
data.size, &replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(dbp->dbenv, skey.data);
- __os_ufree(dbp->dbenv, pkey.data);
- __os_ufree(dbp->dbenv, data.data);
- /*
- * If key_alloc is 1, just skey needs to be
- * freed, if key_alloc is 2, both skey and pkey
- * need to be freed.
- */
- if (key_alloc--)
- __os_ufree(dbp->dbenv,
- replyp->skeydata.skeydata_val);
- if (key_alloc)
- __os_ufree(dbp->dbenv,
- replyp->pkeydata.pkeydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.data,
data.size);
} else
replyp->datadata.datadata_val = data.data;
replyp->datadata.datadata_len = data.size;
} else {
-err: replyp->skeydata.skeydata_val = NULL;
+err: FREE_IF_CHANGED(dbp->dbenv, skey.data, skeydata);
+ FREE_IF_CHANGED(dbp->dbenv, pkey.data, pkeydata);
+ FREE_IF_CHANGED(dbp->dbenv, data.data, datadata);
+ FREE_IF_CHANGED(dbp->dbenv,
+ replyp->skeydata.skeydata_val, skey.data);
+ FREE_IF_CHANGED(dbp->dbenv,
+ replyp->pkeydata.pkeydata_val, pkey.data);
+ FREE_IF_CHANGED(dbp->dbenv,
+ replyp->datadata.datadata_val, data.data);
+ replyp->skeydata.skeydata_val = NULL;
replyp->skeydata.skeydata_len = 0;
replyp->pkeydata.pkeydata_val = NULL;
replyp->pkeydata.pkeydata_len = 0;
@@ -1660,17 +1647,17 @@ err: replyp->skeydata.skeydata_val = NULL;
}
/*
- * PUBLIC: void __db_put_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __db_put_reply *,
- * PUBLIC: int *));
+ * PUBLIC: void __db_put_proc __P((u_int, u_int, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t,
+ * PUBLIC: u_int32_t, __db_put_reply *, int *));
*/
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_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -1701,6 +1688,7 @@ __db_put_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
} else
txnp = NULL;
+ replyp->keydata.keydata_val = NULL;
*freep = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
@@ -1747,17 +1735,18 @@ __db_put_proc(dbpcl_id, txnpcl_id, keydlen, keydoff, keyulen, keyflags,
if (key.data == keydata) {
ret = __os_umalloc(dbp->dbenv,
key.size, &replyp->keydata.keydata_val);
- if (ret != 0) {
- __os_ufree(dbp->dbenv, key.data);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->keydata.keydata_val, key.data, key.size);
} else
replyp->keydata.keydata_val = key.data;
replyp->keydata.keydata_len = key.size;
} else {
-err: replyp->keydata.keydata_val = NULL;
+err: FREE_IF_CHANGED(dbp->dbenv, key.data, keydata);
+ FREE_IF_CHANGED(dbp->dbenv,
+ replyp->keydata.keydata_val, key.data);
+ replyp->keydata.keydata_val = NULL;
replyp->keydata.keydata_len = 0;
*freep = 0;
}
@@ -1766,11 +1755,11 @@ err: replyp->keydata.keydata_val = NULL;
}
/*
- * PUBLIC: void __db_get_re_delim_proc __P((long, __db_get_re_delim_reply *));
+ * PUBLIC: void __db_get_re_delim_proc __P((u_int, __db_get_re_delim_reply *));
*/
void
__db_get_re_delim_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_re_delim_reply *replyp;
{
DB *dbp;
@@ -1783,14 +1772,14 @@ __db_get_re_delim_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_re_delim_proc __P((long, u_int32_t,
- * PUBLIC: __db_re_delim_reply *));
+ * PUBLIC: void __db_set_re_delim_proc __P((u_int, u_int32_t,
+ * PUBLIC: __db_set_re_delim_reply *));
*/
void
-__db_re_delim_proc(dbpcl_id, delim, replyp)
- long dbpcl_id;
+__db_set_re_delim_proc(dbpcl_id, delim, replyp)
+ u_int dbpcl_id;
u_int32_t delim;
- __db_re_delim_reply *replyp;
+ __db_set_re_delim_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1806,11 +1795,11 @@ __db_re_delim_proc(dbpcl_id, delim, replyp)
}
/*
- * PUBLIC: void __db_get_re_len_proc __P((long, __db_get_re_len_reply *));
+ * PUBLIC: void __db_get_re_len_proc __P((u_int, __db_get_re_len_reply *));
*/
void
__db_get_re_len_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_re_len_reply *replyp;
{
DB *dbp;
@@ -1823,13 +1812,14 @@ __db_get_re_len_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_re_len_proc __P((long, u_int32_t, __db_re_len_reply *));
+ * PUBLIC: void __db_set_re_len_proc
+ * PUBLIC: __P((u_int, u_int32_t, __db_set_re_len_reply *));
*/
void
-__db_re_len_proc(dbpcl_id, len, replyp)
- long dbpcl_id;
+__db_set_re_len_proc(dbpcl_id, len, replyp)
+ u_int dbpcl_id;
u_int32_t len;
- __db_re_len_reply *replyp;
+ __db_set_re_len_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1845,11 +1835,11 @@ __db_re_len_proc(dbpcl_id, len, replyp)
}
/*
- * PUBLIC: void __db_get_re_pad_proc __P((long, __db_get_re_pad_reply *));
+ * PUBLIC: void __db_get_re_pad_proc __P((u_int, __db_get_re_pad_reply *));
*/
void
__db_get_re_pad_proc(dbpcl_id, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
__db_get_re_pad_reply *replyp;
{
DB *dbp;
@@ -1862,13 +1852,14 @@ __db_get_re_pad_proc(dbpcl_id, replyp)
}
/*
- * PUBLIC: void __db_re_pad_proc __P((long, u_int32_t, __db_re_pad_reply *));
+ * PUBLIC: void __db_set_re_pad_proc
+ * PUBLIC: __P((u_int, u_int32_t, __db_set_re_pad_reply *));
*/
void
-__db_re_pad_proc(dbpcl_id, pad, replyp)
- long dbpcl_id;
+__db_set_re_pad_proc(dbpcl_id, pad, replyp)
+ u_int dbpcl_id;
u_int32_t pad;
- __db_re_pad_reply *replyp;
+ __db_set_re_pad_reply *replyp;
{
DB *dbp;
ct_entry *dbp_ctp;
@@ -1884,12 +1875,12 @@ __db_re_pad_proc(dbpcl_id, pad, replyp)
}
/*
- * PUBLIC: void __db_remove_proc __P((long, char *, char *, u_int32_t,
+ * PUBLIC: void __db_remove_proc __P((u_int, char *, char *, u_int32_t,
* PUBLIC: __db_remove_reply *));
*/
void
__db_remove_proc(dbpcl_id, name, subdb, flags, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
char *name;
char *subdb;
u_int32_t flags;
@@ -1910,12 +1901,12 @@ __db_remove_proc(dbpcl_id, name, subdb, flags, replyp)
}
/*
- * PUBLIC: void __db_rename_proc __P((long, char *, char *, char *, u_int32_t,
+ * PUBLIC: void __db_rename_proc __P((u_int, char *, char *, char *, u_int32_t,
* PUBLIC: __db_rename_reply *));
*/
void
__db_rename_proc(dbpcl_id, name, subdb, newname, flags, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
char *name;
char *subdb;
char *newname;
@@ -1937,13 +1928,13 @@ __db_rename_proc(dbpcl_id, name, subdb, newname, flags, replyp)
}
/*
- * PUBLIC: void __db_stat_proc __P((long, long, u_int32_t, __db_stat_reply *,
+ * PUBLIC: void __db_stat_proc __P((u_int, u_int, u_int32_t, __db_stat_reply *,
* PUBLIC: int *));
*/
void
__db_stat_proc(dbpcl_id, txnpcl_id, flags, replyp, freep)
- long dbpcl_id;
- long txnpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t flags;
__db_stat_reply *replyp;
int * freep;
@@ -2002,11 +1993,11 @@ out:
}
/*
- * PUBLIC: void __db_sync_proc __P((long, u_int32_t, __db_sync_reply *));
+ * PUBLIC: void __db_sync_proc __P((u_int, u_int32_t, __db_sync_reply *));
*/
void
__db_sync_proc(dbpcl_id, flags, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
u_int32_t flags;
__db_sync_reply *replyp;
{
@@ -2024,13 +2015,13 @@ __db_sync_proc(dbpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_truncate_proc __P((long, long, u_int32_t,
+ * PUBLIC: void __db_truncate_proc __P((u_int, u_int, u_int32_t,
* PUBLIC: __db_truncate_reply *));
*/
void
__db_truncate_proc(dbpcl_id, txnpcl_id, flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t flags;
__db_truncate_reply *replyp;
{
@@ -2056,13 +2047,13 @@ __db_truncate_proc(dbpcl_id, txnpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_cursor_proc __P((long, long, u_int32_t,
+ * PUBLIC: void __db_cursor_proc __P((u_int, u_int, u_int32_t,
* PUBLIC: __db_cursor_reply *));
*/
void
__db_cursor_proc(dbpcl_id, txnpcl_id, flags, replyp)
- long dbpcl_id;
- long txnpcl_id;
+ u_int dbpcl_id;
+ u_int txnpcl_id;
u_int32_t flags;
__db_cursor_reply *replyp;
{
@@ -2102,17 +2093,18 @@ __db_cursor_proc(dbpcl_id, txnpcl_id, flags, replyp)
}
/*
- * PUBLIC: void __db_join_proc __P((long, u_int32_t *, u_int32_t, u_int32_t,
+ * PUBLIC: void __db_join_proc __P((u_int, u_int32_t *, u_int32_t, u_int32_t,
* PUBLIC: __db_join_reply *));
*/
void
__db_join_proc(dbpcl_id, curs, curslen, flags, replyp)
- long dbpcl_id;
+ u_int dbpcl_id;
u_int32_t * curs;
u_int32_t curslen;
u_int32_t flags;
__db_join_reply *replyp;
{
+ DB_ENV *dbenv;
DB *dbp;
DBC **jcurs, **c;
DBC *dbc;
@@ -2123,14 +2115,15 @@ __db_join_proc(dbpcl_id, curs, curslen, flags, replyp)
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
dbp = (DB *)dbp_ctp->ct_anyp;
+ dbenv = dbp->dbenv;
dbc_ctp = new_ct_ent(&replyp->status);
if (dbc_ctp == NULL)
return;
size = (curslen + 1) * sizeof(DBC *);
- if ((ret = __os_calloc(dbp->dbenv,
- curslen + 1, sizeof(DBC *), &jcurs)) != 0) {
+ if ((ret = __os_calloc(
+ dbenv, curslen + 1, sizeof(DBC *), &jcurs)) != 0) {
replyp->status = ret;
__dbclear_ctp(dbc_ctp);
return;
@@ -2141,7 +2134,7 @@ __db_join_proc(dbpcl_id, curs, curslen, flags, replyp)
* the same transaction, so just check the first.
*/
ctp = get_tableent(*curs);
- DB_ASSERT(ctp->ct_type == CT_CURSOR);
+ DB_ASSERT(dbenv, ctp->ct_type == CT_CURSOR);
/*
* If we are using a transaction, set the join activity timer
* to point to the parent transaction.
@@ -2164,7 +2157,7 @@ __db_join_proc(dbpcl_id, curs, curslen, flags, replyp)
* we know they are part of a join list and we can distinguish
* them and later restore them when the join cursor is closed.
*/
- DB_ASSERT(ctp->ct_type == CT_CURSOR);
+ DB_ASSERT(dbenv, ctp->ct_type == CT_CURSOR);
ctp->ct_type |= CT_JOIN;
ctp->ct_origp = ctp->ct_activep;
/*
@@ -2199,18 +2192,18 @@ __db_join_proc(dbpcl_id, curs, curslen, flags, replyp)
}
replyp->status = ret;
-out:
- __os_free(dbp->dbenv, jcurs);
+
+out: __os_free(dbenv, jcurs);
return;
}
/*
- * PUBLIC: void __dbc_close_proc __P((long, __dbc_close_reply *));
+ * PUBLIC: void __dbc_c_close_proc __P((u_int, __dbc_c_close_reply *));
*/
void
-__dbc_close_proc(dbccl_id, replyp)
- long dbccl_id;
- __dbc_close_reply *replyp;
+__dbc_c_close_proc(dbccl_id, replyp)
+ u_int dbccl_id;
+ __dbc_c_close_reply *replyp;
{
ct_entry *dbc_ctp;
@@ -2220,13 +2213,14 @@ __dbc_close_proc(dbccl_id, replyp)
}
/*
- * PUBLIC: void __dbc_count_proc __P((long, u_int32_t, __dbc_count_reply *));
+ * PUBLIC: void __dbc_c_count_proc
+ * PUBLIC: __P((u_int, u_int32_t, __dbc_c_count_reply *));
*/
void
-__dbc_count_proc(dbccl_id, flags, replyp)
- long dbccl_id;
+__dbc_c_count_proc(dbccl_id, flags, replyp)
+ u_int dbccl_id;
u_int32_t flags;
- __dbc_count_reply *replyp;
+ __dbc_c_count_reply *replyp;
{
DBC *dbc;
ct_entry *dbc_ctp;
@@ -2244,13 +2238,13 @@ __dbc_count_proc(dbccl_id, flags, replyp)
}
/*
- * PUBLIC: void __dbc_del_proc __P((long, u_int32_t, __dbc_del_reply *));
+ * PUBLIC: void __dbc_c_del_proc __P((u_int, u_int32_t, __dbc_c_del_reply *));
*/
void
-__dbc_del_proc(dbccl_id, flags, replyp)
- long dbccl_id;
+__dbc_c_del_proc(dbccl_id, flags, replyp)
+ u_int dbccl_id;
u_int32_t flags;
- __dbc_del_reply *replyp;
+ __dbc_c_del_reply *replyp;
{
DBC *dbc;
ct_entry *dbc_ctp;
@@ -2266,13 +2260,13 @@ __dbc_del_proc(dbccl_id, flags, replyp)
}
/*
- * PUBLIC: void __dbc_dup_proc __P((long, u_int32_t, __dbc_dup_reply *));
+ * PUBLIC: void __dbc_c_dup_proc __P((u_int, u_int32_t, __dbc_c_dup_reply *));
*/
void
-__dbc_dup_proc(dbccl_id, flags, replyp)
- long dbccl_id;
+__dbc_c_dup_proc(dbccl_id, flags, replyp)
+ u_int dbccl_id;
u_int32_t flags;
- __dbc_dup_reply *replyp;
+ __dbc_c_dup_reply *replyp;
{
DBC *dbc, *newdbc;
ct_entry *dbc_ctp, *new_ctp;
@@ -2306,16 +2300,16 @@ __dbc_dup_proc(dbccl_id, flags, replyp)
}
/*
- * PUBLIC: void __dbc_get_proc __P((long, u_int32_t, u_int32_t, u_int32_t,
+ * PUBLIC: void __dbc_c_get_proc __P((u_int, u_int32_t, u_int32_t, u_int32_t,
* PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __dbc_get_reply *,
+ * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __dbc_c_get_reply *,
* PUBLIC: int *));
*/
void
-__dbc_get_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
+__dbc_c_get_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
keysize, datadlen, datadoff, dataulen, dataflags, datadata, datasize,
flags, replyp, freep)
- long dbccl_id;
+ u_int dbccl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -2329,21 +2323,22 @@ __dbc_get_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
void *datadata;
u_int32_t datasize;
u_int32_t flags;
- __dbc_get_reply *replyp;
+ __dbc_c_get_reply *replyp;
int * freep;
{
DBC *dbc;
DBT key, data;
DB_ENV *dbenv;
ct_entry *dbc_ctp;
- int key_alloc, bulk_alloc, ret;
+ int ret;
ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR);
dbc = (DBC *)dbc_ctp->ct_anyp;
dbenv = dbc->dbp->dbenv;
+ replyp->keydata.keydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
- bulk_alloc = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
@@ -2351,30 +2346,37 @@ __dbc_get_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
key.dlen = keydlen;
key.ulen = keyulen;
key.doff = keydoff;
- /*
- * Ignore memory related flags on server.
- */
- key.flags = DB_DBT_MALLOC;
+ key.size = keysize;
+ if (keyflags & DB_DBT_USERMEM) {
+ if ((ret = __os_umalloc(dbenv, key.ulen, &key.data)) != 0)
+ goto err;
+ if (keydata != 0)
+ memcpy(key.data, keydata,
+ (key.size < key.ulen) ? key.size : key.ulen);
+ key.flags = DB_DBT_USERMEM;
+ } else {
+ key.data = keydata;
+ key.flags = DB_DBT_MALLOC;
+ }
if (keyflags & DB_DBT_PARTIAL)
key.flags |= DB_DBT_PARTIAL;
- key.size = keysize;
- key.data = keydata;
data.dlen = datadlen;
data.ulen = dataulen;
data.doff = datadoff;
data.size = datasize;
- data.data = datadata;
- if (flags & DB_MULTIPLE || flags & DB_MULTIPLE_KEY) {
- if (data.data == 0) {
- ret = __os_umalloc(dbenv, data.ulen, &data.data);
- if (ret != 0)
- goto err;
- bulk_alloc = 1;
- }
- data.flags |= DB_DBT_USERMEM;
- } else
- data.flags |= DB_DBT_MALLOC;
+ if (flags & (DB_MULTIPLE | DB_MULTIPLE_KEY) ||
+ dataflags & DB_DBT_USERMEM) {
+ if ((ret = __os_umalloc(dbenv, data.ulen, &data.data)) != 0)
+ goto err;
+ if (datadata != 0)
+ memcpy(data.data, datadata,
+ (data.size < data.ulen) ? data.size : data.ulen);
+ data.flags = DB_DBT_USERMEM;
+ } else {
+ data.data = datadata;
+ data.flags = DB_DBT_MALLOC;
+ }
if (dataflags & DB_DBT_PARTIAL)
data.flags |= DB_DBT_PARTIAL;
@@ -2397,16 +2399,11 @@ __dbc_get_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
/*
* Key
*/
- key_alloc = 0;
if (key.data == keydata) {
ret = __os_umalloc(dbenv, key.size,
&replyp->keydata.keydata_val);
- if (ret != 0) {
- __os_ufree(dbenv, key.data);
- __os_ufree(dbenv, data.data);
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->keydata.keydata_val, key.data, key.size);
} else
replyp->keydata.keydata_val = key.data;
@@ -2419,45 +2416,43 @@ __dbc_get_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
if (data.data == datadata) {
ret = __os_umalloc(dbenv, data.size,
&replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(dbenv, key.data);
- __os_ufree(dbenv, data.data);
- if (key_alloc)
- __os_ufree(
- dbenv, replyp->keydata.keydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.data,
data.size);
} else
replyp->datadata.datadata_val = data.data;
replyp->datadata.datadata_len = data.size;
} else {
-err: replyp->keydata.keydata_val = NULL;
+err: FREE_IF_CHANGED(dbenv, key.data, keydata);
+ FREE_IF_CHANGED(dbenv, data.data, datadata);
+ FREE_IF_CHANGED(dbenv,
+ replyp->keydata.keydata_val, key.data);
+ FREE_IF_CHANGED(dbenv,
+ replyp->datadata.datadata_val, data.data);
+ replyp->keydata.keydata_val = NULL;
replyp->keydata.keydata_len = 0;
replyp->datadata.datadata_val = NULL;
replyp->datadata.datadata_len = 0;
*freep = 0;
- if (bulk_alloc)
- __os_ufree(dbenv, data.data);
}
replyp->status = ret;
return;
}
/*
- * PUBLIC: void __dbc_pget_proc __P((long, u_int32_t, u_int32_t, u_int32_t,
+ * PUBLIC: void __dbc_c_pget_proc __P((u_int, u_int32_t, u_int32_t, u_int32_t,
* PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
* PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __dbc_pget_reply *,
+ * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __dbc_c_pget_reply *,
* PUBLIC: int *));
*/
void
-__dbc_pget_proc(dbccl_id, skeydlen, skeydoff, skeyulen, skeyflags,
+__dbc_c_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_int dbccl_id;
u_int32_t skeydlen;
u_int32_t skeydoff;
u_int32_t skeyulen;
@@ -2477,19 +2472,22 @@ __dbc_pget_proc(dbccl_id, skeydlen, skeydoff, skeyulen, skeyflags,
void *datadata;
u_int32_t datasize;
u_int32_t flags;
- __dbc_pget_reply *replyp;
+ __dbc_c_pget_reply *replyp;
int * freep;
{
DBC *dbc;
DBT skey, pkey, data;
DB_ENV *dbenv;
ct_entry *dbc_ctp;
- int key_alloc, ret;
+ int ret;
ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR);
dbc = (DBC *)dbc_ctp->ct_anyp;
dbenv = dbc->dbp->dbenv;
+ replyp->skeydata.skeydata_val = NULL;
+ replyp->pkeydata.pkeydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
memset(&skey, 0, sizeof(skey));
memset(&pkey, 0, sizeof(pkey));
@@ -2544,17 +2542,11 @@ __dbc_pget_proc(dbccl_id, skeydlen, skeydoff, skeyulen, skeyflags,
/*
* Key
*/
- key_alloc = 0;
if (skey.data == skeydata) {
ret = __os_umalloc(dbenv,
skey.size, &replyp->skeydata.skeydata_val);
- if (ret != 0) {
- __os_ufree(dbenv, skey.data);
- __os_ufree(dbenv, pkey.data);
- __os_ufree(dbenv, data.data);
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->skeydata.skeydata_val, skey.data,
skey.size);
} else
@@ -2567,22 +2559,14 @@ __dbc_pget_proc(dbccl_id, skeydlen, skeydoff, skeyulen, skeyflags,
if (pkey.data == pkeydata) {
ret = __os_umalloc(dbenv,
pkey.size, &replyp->pkeydata.pkeydata_val);
- if (ret != 0) {
- __os_ufree(dbenv, skey.data);
- __os_ufree(dbenv, pkey.data);
- __os_ufree(dbenv, data.data);
- if (key_alloc)
- __os_ufree(dbenv,
- replyp->skeydata.skeydata_val);
+ if (ret != 0)
goto err;
- }
/*
* We can set it to 2, because they cannot send the
* pkey over without sending the skey over too.
* So if they did send a pkey, they must have sent
* the skey as well.
*/
- key_alloc = 2;
memcpy(replyp->pkeydata.pkeydata_val, pkey.data,
pkey.size);
} else
@@ -2595,30 +2579,24 @@ __dbc_pget_proc(dbccl_id, skeydlen, skeydoff, skeyulen, skeyflags,
if (data.data == datadata) {
ret = __os_umalloc(dbenv,
data.size, &replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(dbenv, skey.data);
- __os_ufree(dbenv, pkey.data);
- __os_ufree(dbenv, data.data);
- /*
- * If key_alloc is 1, just skey needs to be
- * freed, if key_alloc is 2, both skey and pkey
- * need to be freed.
- */
- if (key_alloc--)
- __os_ufree(dbenv,
- replyp->skeydata.skeydata_val);
- if (key_alloc)
- __os_ufree(dbenv,
- replyp->pkeydata.pkeydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.data,
data.size);
} else
replyp->datadata.datadata_val = data.data;
replyp->datadata.datadata_len = data.size;
} else {
-err: replyp->skeydata.skeydata_val = NULL;
+err: FREE_IF_CHANGED(dbenv, skey.data, skeydata);
+ FREE_IF_CHANGED(dbenv, pkey.data, pkeydata);
+ FREE_IF_CHANGED(dbenv, data.data, datadata);
+ FREE_IF_CHANGED(dbenv,
+ replyp->skeydata.skeydata_val, skey.data);
+ FREE_IF_CHANGED(dbenv,
+ replyp->pkeydata.pkeydata_val, pkey.data);
+ FREE_IF_CHANGED(dbenv,
+ replyp->datadata.datadata_val, data.data);
+ replyp->skeydata.skeydata_val = NULL;
replyp->skeydata.skeydata_len = 0;
replyp->pkeydata.pkeydata_val = NULL;
replyp->pkeydata.pkeydata_len = 0;
@@ -2631,16 +2609,16 @@ err: replyp->skeydata.skeydata_val = NULL;
}
/*
- * PUBLIC: void __dbc_put_proc __P((long, u_int32_t, u_int32_t, u_int32_t,
+ * PUBLIC: void __dbc_c_put_proc __P((u_int, u_int32_t, u_int32_t, u_int32_t,
* PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t,
- * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __dbc_put_reply *,
+ * PUBLIC: u_int32_t, void *, u_int32_t, u_int32_t, __dbc_c_put_reply *,
* PUBLIC: int *));
*/
void
-__dbc_put_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
+__dbc_c_put_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
keysize, datadlen, datadoff, dataulen, dataflags, datadata, datasize,
flags, replyp, freep)
- long dbccl_id;
+ u_int dbccl_id;
u_int32_t keydlen;
u_int32_t keydoff;
u_int32_t keyulen;
@@ -2654,7 +2632,7 @@ __dbc_put_proc(dbccl_id, keydlen, keydoff, keyulen, keyflags, keydata,
void *datadata;
u_int32_t datasize;
u_int32_t flags;
- __dbc_put_reply *replyp;
+ __dbc_c_put_reply *replyp;
int * freep;
{
DB *dbp;
diff --git a/db/rpc_server/c/db_server_util.c b/db/rpc_server/c/db_server_util.c
index 11bc4deb3..9ef8dfcdf 100644
--- a/db/rpc_server/c/db_server_util.c
+++ b/db/rpc_server/c/db_server_util.c
@@ -1,41 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_server_util.c,v 1.72 2004/09/22 17:30:12 bostic Exp $
+ * $Id: db_server_util.c,v 12.9 2006/08/24 14:46:29 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.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 <rpc/rpc.h>
-
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
#endif
-
#include "db_server.h"
-
-#include "db_int.h"
#include "dbinc_auto/clib_ext.h"
#include "dbinc/db_server_int.h"
#include "dbinc_auto/common_ext.h"
@@ -232,9 +210,6 @@ __dbsrv_settimeout(ctp, to)
ctp->ct_timeout = to;
}
-/*
- * PUBLIC: void __dbsrv_timeout __P((int));
- */
void
__dbsrv_timeout(force)
int force;
@@ -324,7 +299,7 @@ __dbsrv_timeout(force)
if (to < t || force) {
if (__dbsrv_verbose)
printf("Timing out env id %ld\n", ctp->ct_id);
- (void)__dbenv_close_int(ctp->ct_id, 0, 1);
+ (void)__env_close_int(ctp->ct_id, 0, 1);
/*
* If we timed out an env, we may have closed
* all sorts of ctp's (maybe even all of them.
@@ -590,7 +565,7 @@ __db_close_int(id, flags)
ctp = get_tableent(id);
if (ctp == NULL)
return (DB_NOSERVER_ID);
- DB_ASSERT(ctp->ct_type == CT_DB);
+ DB_ASSERT(ctp->ct_envp, ctp->ct_type == CT_DB);
if (__dbsrv_verbose && ctp->ct_refcount != 1)
printf("Deref'ing dbp id %ld, refcount %d\n",
id, ctp->ct_refcount);
@@ -601,6 +576,10 @@ __db_close_int(id, flags)
printf("Closing dbp id %ld\n", id);
ret = dbp->close(dbp, flags);
+ if (ctp->ct_dbdp.db != NULL)
+ __os_free(NULL, ctp->ct_dbdp.db);
+ if (ctp->ct_dbdp.subdb != NULL)
+ __os_free(NULL, ctp->ct_dbdp.subdb);
__dbdel_ctp(ctp);
return (ret);
}
@@ -643,10 +622,10 @@ __dbc_close_int(dbc_ctp)
}
/*
- * PUBLIC: int __dbenv_close_int __P((long, u_int32_t, int));
+ * PUBLIC: int __env_close_int __P((long, u_int32_t, int));
*/
int
-__dbenv_close_int(id, flags, force)
+__env_close_int(id, flags, force)
long id;
u_int32_t flags;
int force;
@@ -659,7 +638,7 @@ __dbenv_close_int(id, flags, force)
ctp = get_tableent(id);
if (ctp == NULL)
return (DB_NOSERVER_ID);
- DB_ASSERT(ctp->ct_type == CT_ENV);
+ DB_ASSERT(ctp->ct_envp, ctp->ct_type == CT_ENV);
if (__dbsrv_verbose && ctp->ct_refcount != 1)
printf("Deref'ing env id %ld, refcount %d\n",
id, ctp->ct_refcount);
diff --git a/db/rpc_server/c/gen_db_server.c b/db/rpc_server/c/gen_db_server.c
index c5f3a7e0b..0f8062648 100644
--- a/db/rpc_server/c/gen_db_server.c
+++ b/db/rpc_server/c/gen_db_server.c
@@ -1,53 +1,44 @@
/* Do not edit: automatically built by gen_rpc.awk. */
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
#include <rpc/rpc.h>
-
-#include <string.h>
#endif
-
#include "db_server.h"
-
-#include "db_int.h"
#include "dbinc/db_server_int.h"
#include "dbinc_auto/rpc_server_ext.h"
-__env_get_cachesize_reply *
-__db_env_get_cachesize_4003__SVCSUFFIX__(msg, req)
- __env_get_cachesize_msg *msg;
+__env_create_reply *
+__db_env_create_4005__SVCSUFFIX__(msg, req)
+ __env_create_msg *msg;
struct svc_req *req;
{
- static __env_get_cachesize_reply reply; /* must be static */
+ static __env_create_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __env_get_cachesize_proc(msg->dbenvcl_id,
+ __env_create_proc(msg->timeout,
&reply);
return (&reply);
}
-__env_cachesize_reply *
-__db_env_cachesize_4003__SVCSUFFIX__(msg, req)
- __env_cachesize_msg *msg;
+__env_cdsgroup_begin_reply *
+__db_env_cdsgroup_begin_4005__SVCSUFFIX__(msg, req)
+ __env_cdsgroup_begin_msg *msg;
struct svc_req *req;
{
- static __env_cachesize_reply reply; /* must be static */
+ static __env_cdsgroup_begin_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __env_cachesize_proc(msg->dbenvcl_id,
- msg->gbytes,
- msg->bytes,
- msg->ncache,
+ __env_cdsgroup_begin_proc(msg->dbenvcl_id,
&reply);
return (&reply);
}
__env_close_reply *
-__db_env_close_4003__SVCSUFFIX__(msg, req)
+__db_env_close_4005__SVCSUFFIX__(msg, req)
__env_close_msg *msg;
struct svc_req *req;
{
@@ -61,22 +52,8 @@ __db_env_close_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__env_create_reply *
-__db_env_create_4003__SVCSUFFIX__(msg, req)
- __env_create_msg *msg;
- struct svc_req *req;
-{
- static __env_create_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __env_create_proc(msg->timeout,
- &reply);
-
- return (&reply);
-}
-
__env_dbremove_reply *
-__db_env_dbremove_4003__SVCSUFFIX__(msg, req)
+__db_env_dbremove_4005__SVCSUFFIX__(msg, req)
__env_dbremove_msg *msg;
struct svc_req *req;
{
@@ -94,7 +71,7 @@ __db_env_dbremove_4003__SVCSUFFIX__(msg, req)
}
__env_dbrename_reply *
-__db_env_dbrename_4003__SVCSUFFIX__(msg, req)
+__db_env_dbrename_4005__SVCSUFFIX__(msg, req)
__env_dbrename_msg *msg;
struct svc_req *req;
{
@@ -112,38 +89,36 @@ __db_env_dbrename_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__env_get_encrypt_flags_reply *
-__db_env_get_encrypt_flags_4003__SVCSUFFIX__(msg, req)
- __env_get_encrypt_flags_msg *msg;
+__env_get_cachesize_reply *
+__db_env_get_cachesize_4005__SVCSUFFIX__(msg, req)
+ __env_get_cachesize_msg *msg;
struct svc_req *req;
{
- static __env_get_encrypt_flags_reply reply; /* must be static */
+ static __env_get_cachesize_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __env_get_encrypt_flags_proc(msg->dbenvcl_id,
+ __env_get_cachesize_proc(msg->dbenvcl_id,
&reply);
return (&reply);
}
-__env_encrypt_reply *
-__db_env_encrypt_4003__SVCSUFFIX__(msg, req)
- __env_encrypt_msg *msg;
+__env_get_encrypt_flags_reply *
+__db_env_get_encrypt_flags_4005__SVCSUFFIX__(msg, req)
+ __env_get_encrypt_flags_msg *msg;
struct svc_req *req;
{
- static __env_encrypt_reply reply; /* must be static */
+ static __env_get_encrypt_flags_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __env_encrypt_proc(msg->dbenvcl_id,
- (*msg->passwd == '\0') ? NULL : msg->passwd,
- msg->flags,
+ __env_get_encrypt_flags_proc(msg->dbenvcl_id,
&reply);
return (&reply);
}
__env_get_flags_reply *
-__db_env_get_flags_4003__SVCSUFFIX__(msg, req)
+__db_env_get_flags_4005__SVCSUFFIX__(msg, req)
__env_get_flags_msg *msg;
struct svc_req *req;
{
@@ -156,24 +131,8 @@ __db_env_get_flags_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__env_flags_reply *
-__db_env_flags_4003__SVCSUFFIX__(msg, req)
- __env_flags_msg *msg;
- struct svc_req *req;
-{
- static __env_flags_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __env_flags_proc(msg->dbenvcl_id,
- msg->flags,
- msg->onoff,
- &reply);
-
- return (&reply);
-}
-
__env_get_home_reply *
-__db_env_get_home_4003__SVCSUFFIX__(msg, req)
+__db_env_get_home_4005__SVCSUFFIX__(msg, req)
__env_get_home_msg *msg;
struct svc_req *req;
{
@@ -187,7 +146,7 @@ __db_env_get_home_4003__SVCSUFFIX__(msg, req)
}
__env_get_open_flags_reply *
-__db_env_get_open_flags_4003__SVCSUFFIX__(msg, req)
+__db_env_get_open_flags_4005__SVCSUFFIX__(msg, req)
__env_get_open_flags_msg *msg;
struct svc_req *req;
{
@@ -201,7 +160,7 @@ __db_env_get_open_flags_4003__SVCSUFFIX__(msg, req)
}
__env_open_reply *
-__db_env_open_4003__SVCSUFFIX__(msg, req)
+__db_env_open_4005__SVCSUFFIX__(msg, req)
__env_open_msg *msg;
struct svc_req *req;
{
@@ -218,7 +177,7 @@ __db_env_open_4003__SVCSUFFIX__(msg, req)
}
__env_remove_reply *
-__db_env_remove_4003__SVCSUFFIX__(msg, req)
+__db_env_remove_4005__SVCSUFFIX__(msg, req)
__env_remove_msg *msg;
struct svc_req *req;
{
@@ -233,169 +192,130 @@ __db_env_remove_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__txn_abort_reply *
-__db_txn_abort_4003__SVCSUFFIX__(msg, req)
- __txn_abort_msg *msg;
+__env_set_cachesize_reply *
+__db_env_set_cachesize_4005__SVCSUFFIX__(msg, req)
+ __env_set_cachesize_msg *msg;
struct svc_req *req;
{
- static __txn_abort_reply reply; /* must be static */
+ static __env_set_cachesize_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __txn_abort_proc(msg->txnpcl_id,
+ __env_set_cachesize_proc(msg->dbenvcl_id,
+ msg->gbytes,
+ msg->bytes,
+ msg->ncache,
&reply);
return (&reply);
}
-__txn_begin_reply *
-__db_txn_begin_4003__SVCSUFFIX__(msg, req)
- __txn_begin_msg *msg;
+__env_set_encrypt_reply *
+__db_env_set_encrypt_4005__SVCSUFFIX__(msg, req)
+ __env_set_encrypt_msg *msg;
struct svc_req *req;
{
- static __txn_begin_reply reply; /* must be static */
+ static __env_set_encrypt_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __txn_begin_proc(msg->dbenvcl_id,
- msg->parentcl_id,
+ __env_set_encrypt_proc(msg->dbenvcl_id,
+ (*msg->passwd == '\0') ? NULL : msg->passwd,
msg->flags,
&reply);
return (&reply);
}
-__txn_commit_reply *
-__db_txn_commit_4003__SVCSUFFIX__(msg, req)
- __txn_commit_msg *msg;
+__env_set_flags_reply *
+__db_env_set_flags_4005__SVCSUFFIX__(msg, req)
+ __env_set_flags_msg *msg;
struct svc_req *req;
{
- static __txn_commit_reply reply; /* must be static */
+ static __env_set_flags_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __txn_commit_proc(msg->txnpcl_id,
+ __env_set_flags_proc(msg->dbenvcl_id,
msg->flags,
+ msg->onoff,
&reply);
return (&reply);
}
-__txn_discard_reply *
-__db_txn_discard_4003__SVCSUFFIX__(msg, req)
- __txn_discard_msg *msg;
+__env_txn_begin_reply *
+__db_env_txn_begin_4005__SVCSUFFIX__(msg, req)
+ __env_txn_begin_msg *msg;
struct svc_req *req;
{
- static __txn_discard_reply reply; /* must be static */
+ static __env_txn_begin_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __txn_discard_proc(msg->txnpcl_id,
+ __env_txn_begin_proc(msg->dbenvcl_id,
+ msg->parentcl_id,
msg->flags,
&reply);
return (&reply);
}
-__txn_prepare_reply *
-__db_txn_prepare_4003__SVCSUFFIX__(msg, req)
- __txn_prepare_msg *msg;
+__env_txn_recover_reply *
+__db_env_txn_recover_4005__SVCSUFFIX__(msg, req)
+ __env_txn_recover_msg *msg;
struct svc_req *req;
{
- static __txn_prepare_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __txn_prepare_proc(msg->txnpcl_id,
- (u_int8_t *)msg->gid,
- &reply);
-
- return (&reply);
-}
-
-__txn_recover_reply *
-__db_txn_recover_4003__SVCSUFFIX__(msg, req)
- __txn_recover_msg *msg;
- struct svc_req *req;
-{
- static __txn_recover_reply reply; /* must be static */
- static int __txn_recover_free = 0; /* must be static */
+ static __env_txn_recover_reply reply; /* must be static */
+ static int __env_txn_recover_free = 0; /* must be static */
COMPQUIET(req, NULL);
- if (__txn_recover_free)
- xdr_free((xdrproc_t)xdr___txn_recover_reply, (void *)&reply);
- __txn_recover_free = 0;
+ if (__env_txn_recover_free)
+ xdr_free((xdrproc_t)xdr___env_txn_recover_reply, (void *)&reply);
+ __env_txn_recover_free = 0;
/* Reinitialize allocated fields */
reply.txn.txn_val = NULL;
reply.gid.gid_val = NULL;
- __txn_recover_proc(msg->dbenvcl_id,
+ __env_txn_recover_proc(msg->dbenvcl_id,
msg->count,
msg->flags,
&reply,
- &__txn_recover_free);
+ &__env_txn_recover_free);
return (&reply);
}
-__db_associate_reply *
-__db_db_associate_4003__SVCSUFFIX__(msg, req)
- __db_associate_msg *msg;
+__db_create_reply *
+__db_db_create_4005__SVCSUFFIX__(msg, req)
+ __db_create_msg *msg;
struct svc_req *req;
{
- static __db_associate_reply reply; /* must be static */
+ static __db_create_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_associate_proc(msg->dbpcl_id,
- msg->txnpcl_id,
- msg->sdbpcl_id,
+ __db_create_proc(msg->dbenvcl_id,
msg->flags,
&reply);
return (&reply);
}
-__db_bt_maxkey_reply *
-__db_db_bt_maxkey_4003__SVCSUFFIX__(msg, req)
- __db_bt_maxkey_msg *msg;
- struct svc_req *req;
-{
- static __db_bt_maxkey_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __db_bt_maxkey_proc(msg->dbpcl_id,
- msg->maxkey,
- &reply);
-
- return (&reply);
-}
-
-__db_get_bt_minkey_reply *
-__db_db_get_bt_minkey_4003__SVCSUFFIX__(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);
-}
-
-__db_bt_minkey_reply *
-__db_db_bt_minkey_4003__SVCSUFFIX__(msg, req)
- __db_bt_minkey_msg *msg;
+__db_associate_reply *
+__db_db_associate_4005__SVCSUFFIX__(msg, req)
+ __db_associate_msg *msg;
struct svc_req *req;
{
- static __db_bt_minkey_reply reply; /* must be static */
+ static __db_associate_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_bt_minkey_proc(msg->dbpcl_id,
- msg->minkey,
+ __db_associate_proc(msg->dbpcl_id,
+ msg->txnpcl_id,
+ msg->sdbpcl_id,
+ msg->flags,
&reply);
return (&reply);
}
__db_close_reply *
-__db_db_close_4003__SVCSUFFIX__(msg, req)
+__db_db_close_4005__SVCSUFFIX__(msg, req)
__db_close_msg *msg;
struct svc_req *req;
{
@@ -409,15 +329,16 @@ __db_db_close_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_create_reply *
-__db_db_create_4003__SVCSUFFIX__(msg, req)
- __db_create_msg *msg;
+__db_cursor_reply *
+__db_db_cursor_4005__SVCSUFFIX__(msg, req)
+ __db_cursor_msg *msg;
struct svc_req *req;
{
- static __db_create_reply reply; /* must be static */
+ static __db_cursor_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_create_proc(msg->dbenvcl_id,
+ __db_cursor_proc(msg->dbpcl_id,
+ msg->txnpcl_id,
msg->flags,
&reply);
@@ -425,7 +346,7 @@ __db_db_create_4003__SVCSUFFIX__(msg, req)
}
__db_del_reply *
-__db_db_del_4003__SVCSUFFIX__(msg, req)
+__db_db_del_4005__SVCSUFFIX__(msg, req)
__db_del_msg *msg;
struct svc_req *req;
{
@@ -446,67 +367,87 @@ __db_db_del_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_get_encrypt_flags_reply *
-__db_db_get_encrypt_flags_4003__SVCSUFFIX__(msg, req)
- __db_get_encrypt_flags_msg *msg;
+__db_get_reply *
+__db_db_get_4005__SVCSUFFIX__(msg, req)
+ __db_get_msg *msg;
struct svc_req *req;
{
- static __db_get_encrypt_flags_reply reply; /* must be static */
+ static __db_get_reply reply; /* must be static */
+ static int __db_get_free = 0; /* must be static */
+
COMPQUIET(req, NULL);
+ if (__db_get_free)
+ xdr_free((xdrproc_t)xdr___db_get_reply, (void *)&reply);
+ __db_get_free = 0;
- __db_get_encrypt_flags_proc(msg->dbpcl_id,
- &reply);
+ /* Reinitialize allocated fields */
+ reply.keydata.keydata_val = NULL;
+ reply.datadata.datadata_val = NULL;
+ __db_get_proc(msg->dbpcl_id,
+ msg->txnpcl_id,
+ msg->keydlen,
+ msg->keydoff,
+ msg->keyulen,
+ msg->keyflags,
+ msg->keydata.keydata_val,
+ msg->keydata.keydata_len,
+ msg->datadlen,
+ msg->datadoff,
+ msg->dataulen,
+ msg->dataflags,
+ msg->datadata.datadata_val,
+ msg->datadata.datadata_len,
+ msg->flags,
+ &reply,
+ &__db_get_free);
return (&reply);
}
-__db_encrypt_reply *
-__db_db_encrypt_4003__SVCSUFFIX__(msg, req)
- __db_encrypt_msg *msg;
+__db_get_bt_minkey_reply *
+__db_db_get_bt_minkey_4005__SVCSUFFIX__(msg, req)
+ __db_get_bt_minkey_msg *msg;
struct svc_req *req;
{
- static __db_encrypt_reply reply; /* must be static */
+ static __db_get_bt_minkey_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_encrypt_proc(msg->dbpcl_id,
- (*msg->passwd == '\0') ? NULL : msg->passwd,
- msg->flags,
+ __db_get_bt_minkey_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_get_extentsize_reply *
-__db_db_get_extentsize_4003__SVCSUFFIX__(msg, req)
- __db_get_extentsize_msg *msg;
+__db_get_dbname_reply *
+__db_db_get_dbname_4005__SVCSUFFIX__(msg, req)
+ __db_get_dbname_msg *msg;
struct svc_req *req;
{
- static __db_get_extentsize_reply reply; /* must be static */
+ static __db_get_dbname_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_extentsize_proc(msg->dbpcl_id,
+ __db_get_dbname_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_extentsize_reply *
-__db_db_extentsize_4003__SVCSUFFIX__(msg, req)
- __db_extentsize_msg *msg;
+__db_get_encrypt_flags_reply *
+__db_db_get_encrypt_flags_4005__SVCSUFFIX__(msg, req)
+ __db_get_encrypt_flags_msg *msg;
struct svc_req *req;
{
- static __db_extentsize_reply reply; /* must be static */
+ static __db_get_encrypt_flags_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_extentsize_proc(msg->dbpcl_id,
- msg->extentsize,
+ __db_get_encrypt_flags_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
__db_get_flags_reply *
-__db_db_get_flags_4003__SVCSUFFIX__(msg, req)
+__db_db_get_flags_4005__SVCSUFFIX__(msg, req)
__db_get_flags_msg *msg;
struct svc_req *req;
{
@@ -519,74 +460,50 @@ __db_db_get_flags_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_flags_reply *
-__db_db_flags_4003__SVCSUFFIX__(msg, req)
- __db_flags_msg *msg;
+__db_get_h_ffactor_reply *
+__db_db_get_h_ffactor_4005__SVCSUFFIX__(msg, req)
+ __db_get_h_ffactor_msg *msg;
struct svc_req *req;
{
- static __db_flags_reply reply; /* must be static */
+ static __db_get_h_ffactor_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_flags_proc(msg->dbpcl_id,
- msg->flags,
+ __db_get_h_ffactor_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_get_reply *
-__db_db_get_4003__SVCSUFFIX__(msg, req)
- __db_get_msg *msg;
+__db_get_h_nelem_reply *
+__db_db_get_h_nelem_4005__SVCSUFFIX__(msg, req)
+ __db_get_h_nelem_msg *msg;
struct svc_req *req;
{
- static __db_get_reply reply; /* must be static */
- static int __db_get_free = 0; /* must be static */
-
+ static __db_get_h_nelem_reply reply; /* must be static */
COMPQUIET(req, NULL);
- if (__db_get_free)
- xdr_free((xdrproc_t)xdr___db_get_reply, (void *)&reply);
- __db_get_free = 0;
- /* Reinitialize allocated fields */
- reply.keydata.keydata_val = NULL;
- reply.datadata.datadata_val = NULL;
+ __db_get_h_nelem_proc(msg->dbpcl_id,
+ &reply);
- __db_get_proc(msg->dbpcl_id,
- msg->txnpcl_id,
- msg->keydlen,
- msg->keydoff,
- msg->keyulen,
- msg->keyflags,
- msg->keydata.keydata_val,
- msg->keydata.keydata_len,
- msg->datadlen,
- msg->datadoff,
- msg->dataulen,
- msg->dataflags,
- msg->datadata.datadata_val,
- msg->datadata.datadata_len,
- msg->flags,
- &reply,
- &__db_get_free);
return (&reply);
}
-__db_get_name_reply *
-__db_db_get_name_4003__SVCSUFFIX__(msg, req)
- __db_get_name_msg *msg;
+__db_get_lorder_reply *
+__db_db_get_lorder_4005__SVCSUFFIX__(msg, req)
+ __db_get_lorder_msg *msg;
struct svc_req *req;
{
- static __db_get_name_reply reply; /* must be static */
+ static __db_get_lorder_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_name_proc(msg->dbpcl_id,
+ __db_get_lorder_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
__db_get_open_flags_reply *
-__db_db_get_open_flags_4003__SVCSUFFIX__(msg, req)
+__db_db_get_open_flags_4005__SVCSUFFIX__(msg, req)
__db_get_open_flags_msg *msg;
struct svc_req *req;
{
@@ -599,117 +516,117 @@ __db_db_get_open_flags_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_get_h_ffactor_reply *
-__db_db_get_h_ffactor_4003__SVCSUFFIX__(msg, req)
- __db_get_h_ffactor_msg *msg;
+__db_get_pagesize_reply *
+__db_db_get_pagesize_4005__SVCSUFFIX__(msg, req)
+ __db_get_pagesize_msg *msg;
struct svc_req *req;
{
- static __db_get_h_ffactor_reply reply; /* must be static */
+ static __db_get_pagesize_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_h_ffactor_proc(msg->dbpcl_id,
+ __db_get_pagesize_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_h_ffactor_reply *
-__db_db_h_ffactor_4003__SVCSUFFIX__(msg, req)
- __db_h_ffactor_msg *msg;
+__db_get_q_extentsize_reply *
+__db_db_get_q_extentsize_4005__SVCSUFFIX__(msg, req)
+ __db_get_q_extentsize_msg *msg;
struct svc_req *req;
{
- static __db_h_ffactor_reply reply; /* must be static */
+ static __db_get_q_extentsize_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_h_ffactor_proc(msg->dbpcl_id,
- msg->ffactor,
+ __db_get_q_extentsize_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_get_h_nelem_reply *
-__db_db_get_h_nelem_4003__SVCSUFFIX__(msg, req)
- __db_get_h_nelem_msg *msg;
+__db_get_re_delim_reply *
+__db_db_get_re_delim_4005__SVCSUFFIX__(msg, req)
+ __db_get_re_delim_msg *msg;
struct svc_req *req;
{
- static __db_get_h_nelem_reply reply; /* must be static */
+ static __db_get_re_delim_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_h_nelem_proc(msg->dbpcl_id,
+ __db_get_re_delim_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_h_nelem_reply *
-__db_db_h_nelem_4003__SVCSUFFIX__(msg, req)
- __db_h_nelem_msg *msg;
+__db_get_re_len_reply *
+__db_db_get_re_len_4005__SVCSUFFIX__(msg, req)
+ __db_get_re_len_msg *msg;
struct svc_req *req;
{
- static __db_h_nelem_reply reply; /* must be static */
+ static __db_get_re_len_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_h_nelem_proc(msg->dbpcl_id,
- msg->nelem,
+ __db_get_re_len_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_key_range_reply *
-__db_db_key_range_4003__SVCSUFFIX__(msg, req)
- __db_key_range_msg *msg;
+__db_get_re_pad_reply *
+__db_db_get_re_pad_4005__SVCSUFFIX__(msg, req)
+ __db_get_re_pad_msg *msg;
struct svc_req *req;
{
- static __db_key_range_reply reply; /* must be static */
+ static __db_get_re_pad_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_key_range_proc(msg->dbpcl_id,
- msg->txnpcl_id,
- msg->keydlen,
- msg->keydoff,
- msg->keyulen,
- msg->keyflags,
- msg->keydata.keydata_val,
- msg->keydata.keydata_len,
- msg->flags,
+ __db_get_re_pad_proc(msg->dbpcl_id,
&reply);
return (&reply);
}
-__db_get_lorder_reply *
-__db_db_get_lorder_4003__SVCSUFFIX__(msg, req)
- __db_get_lorder_msg *msg;
+__db_join_reply *
+__db_db_join_4005__SVCSUFFIX__(msg, req)
+ __db_join_msg *msg;
struct svc_req *req;
{
- static __db_get_lorder_reply reply; /* must be static */
+ static __db_join_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_lorder_proc(msg->dbpcl_id,
+ __db_join_proc(msg->dbpcl_id,
+ msg->curs.curs_val,
+ msg->curs.curs_len,
+ msg->flags,
&reply);
return (&reply);
}
-__db_lorder_reply *
-__db_db_lorder_4003__SVCSUFFIX__(msg, req)
- __db_lorder_msg *msg;
+__db_key_range_reply *
+__db_db_key_range_4005__SVCSUFFIX__(msg, req)
+ __db_key_range_msg *msg;
struct svc_req *req;
{
- static __db_lorder_reply reply; /* must be static */
+ static __db_key_range_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_lorder_proc(msg->dbpcl_id,
- msg->lorder,
+ __db_key_range_proc(msg->dbpcl_id,
+ msg->txnpcl_id,
+ msg->keydlen,
+ msg->keydoff,
+ msg->keyulen,
+ msg->keyflags,
+ msg->keydata.keydata_val,
+ msg->keydata.keydata_len,
+ msg->flags,
&reply);
return (&reply);
}
__db_open_reply *
-__db_db_open_4003__SVCSUFFIX__(msg, req)
+__db_db_open_4005__SVCSUFFIX__(msg, req)
__db_open_msg *msg;
struct svc_req *req;
{
@@ -728,37 +645,8 @@ __db_db_open_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_get_pagesize_reply *
-__db_db_get_pagesize_4003__SVCSUFFIX__(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);
-}
-
-__db_pagesize_reply *
-__db_db_pagesize_4003__SVCSUFFIX__(msg, req)
- __db_pagesize_msg *msg;
- struct svc_req *req;
-{
- static __db_pagesize_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __db_pagesize_proc(msg->dbpcl_id,
- msg->pagesize,
- &reply);
-
- return (&reply);
-}
-
__db_pget_reply *
-__db_db_pget_4003__SVCSUFFIX__(msg, req)
+__db_db_pget_4005__SVCSUFFIX__(msg, req)
__db_pget_msg *msg;
struct svc_req *req;
{
@@ -802,7 +690,7 @@ __db_db_pget_4003__SVCSUFFIX__(msg, req)
}
__db_put_reply *
-__db_db_put_4003__SVCSUFFIX__(msg, req)
+__db_db_put_4005__SVCSUFFIX__(msg, req)
__db_put_msg *msg;
struct svc_req *req;
{
@@ -837,130 +725,209 @@ __db_db_put_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_get_re_delim_reply *
-__db_db_get_re_delim_4003__SVCSUFFIX__(msg, req)
- __db_get_re_delim_msg *msg;
+__db_remove_reply *
+__db_db_remove_4005__SVCSUFFIX__(msg, req)
+ __db_remove_msg *msg;
struct svc_req *req;
{
- static __db_get_re_delim_reply reply; /* must be static */
+ static __db_remove_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_re_delim_proc(msg->dbpcl_id,
+ __db_remove_proc(msg->dbpcl_id,
+ (*msg->name == '\0') ? NULL : msg->name,
+ (*msg->subdb == '\0') ? NULL : msg->subdb,
+ msg->flags,
&reply);
return (&reply);
}
-__db_re_delim_reply *
-__db_db_re_delim_4003__SVCSUFFIX__(msg, req)
- __db_re_delim_msg *msg;
+__db_rename_reply *
+__db_db_rename_4005__SVCSUFFIX__(msg, req)
+ __db_rename_msg *msg;
struct svc_req *req;
{
- static __db_re_delim_reply reply; /* must be static */
+ static __db_rename_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_re_delim_proc(msg->dbpcl_id,
- msg->delim,
+ __db_rename_proc(msg->dbpcl_id,
+ (*msg->name == '\0') ? NULL : msg->name,
+ (*msg->subdb == '\0') ? NULL : msg->subdb,
+ (*msg->newname == '\0') ? NULL : msg->newname,
+ msg->flags,
&reply);
return (&reply);
}
-__db_get_re_len_reply *
-__db_db_get_re_len_4003__SVCSUFFIX__(msg, req)
- __db_get_re_len_msg *msg;
+__db_set_bt_minkey_reply *
+__db_db_set_bt_minkey_4005__SVCSUFFIX__(msg, req)
+ __db_set_bt_minkey_msg *msg;
struct svc_req *req;
{
- static __db_get_re_len_reply reply; /* must be static */
+ static __db_set_bt_minkey_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_re_len_proc(msg->dbpcl_id,
+ __db_set_bt_minkey_proc(msg->dbpcl_id,
+ msg->minkey,
&reply);
return (&reply);
}
-__db_re_len_reply *
-__db_db_re_len_4003__SVCSUFFIX__(msg, req)
- __db_re_len_msg *msg;
+__db_set_encrypt_reply *
+__db_db_set_encrypt_4005__SVCSUFFIX__(msg, req)
+ __db_set_encrypt_msg *msg;
struct svc_req *req;
{
- static __db_re_len_reply reply; /* must be static */
+ static __db_set_encrypt_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_re_len_proc(msg->dbpcl_id,
- msg->len,
+ __db_set_encrypt_proc(msg->dbpcl_id,
+ (*msg->passwd == '\0') ? NULL : msg->passwd,
+ msg->flags,
&reply);
return (&reply);
}
-__db_re_pad_reply *
-__db_db_re_pad_4003__SVCSUFFIX__(msg, req)
- __db_re_pad_msg *msg;
+__db_set_flags_reply *
+__db_db_set_flags_4005__SVCSUFFIX__(msg, req)
+ __db_set_flags_msg *msg;
struct svc_req *req;
{
- static __db_re_pad_reply reply; /* must be static */
+ static __db_set_flags_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_re_pad_proc(msg->dbpcl_id,
- msg->pad,
+ __db_set_flags_proc(msg->dbpcl_id,
+ msg->flags,
&reply);
return (&reply);
}
-__db_get_re_pad_reply *
-__db_db_get_re_pad_4003__SVCSUFFIX__(msg, req)
- __db_get_re_pad_msg *msg;
+__db_set_h_ffactor_reply *
+__db_db_set_h_ffactor_4005__SVCSUFFIX__(msg, req)
+ __db_set_h_ffactor_msg *msg;
struct svc_req *req;
{
- static __db_get_re_pad_reply reply; /* must be static */
+ static __db_set_h_ffactor_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_get_re_pad_proc(msg->dbpcl_id,
+ __db_set_h_ffactor_proc(msg->dbpcl_id,
+ msg->ffactor,
&reply);
return (&reply);
}
-__db_remove_reply *
-__db_db_remove_4003__SVCSUFFIX__(msg, req)
- __db_remove_msg *msg;
+__db_set_h_nelem_reply *
+__db_db_set_h_nelem_4005__SVCSUFFIX__(msg, req)
+ __db_set_h_nelem_msg *msg;
struct svc_req *req;
{
- static __db_remove_reply reply; /* must be static */
+ static __db_set_h_nelem_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_remove_proc(msg->dbpcl_id,
- (*msg->name == '\0') ? NULL : msg->name,
- (*msg->subdb == '\0') ? NULL : msg->subdb,
- msg->flags,
+ __db_set_h_nelem_proc(msg->dbpcl_id,
+ msg->nelem,
&reply);
return (&reply);
}
-__db_rename_reply *
-__db_db_rename_4003__SVCSUFFIX__(msg, req)
- __db_rename_msg *msg;
+__db_set_lorder_reply *
+__db_db_set_lorder_4005__SVCSUFFIX__(msg, req)
+ __db_set_lorder_msg *msg;
struct svc_req *req;
{
- static __db_rename_reply reply; /* must be static */
+ static __db_set_lorder_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __db_rename_proc(msg->dbpcl_id,
- (*msg->name == '\0') ? NULL : msg->name,
- (*msg->subdb == '\0') ? NULL : msg->subdb,
- (*msg->newname == '\0') ? NULL : msg->newname,
- msg->flags,
+ __db_set_lorder_proc(msg->dbpcl_id,
+ msg->lorder,
+ &reply);
+
+ return (&reply);
+}
+
+__db_set_pagesize_reply *
+__db_db_set_pagesize_4005__SVCSUFFIX__(msg, req)
+ __db_set_pagesize_msg *msg;
+ struct svc_req *req;
+{
+ static __db_set_pagesize_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_set_pagesize_proc(msg->dbpcl_id,
+ msg->pagesize,
+ &reply);
+
+ return (&reply);
+}
+
+__db_set_q_extentsize_reply *
+__db_db_set_q_extentsize_4005__SVCSUFFIX__(msg, req)
+ __db_set_q_extentsize_msg *msg;
+ struct svc_req *req;
+{
+ static __db_set_q_extentsize_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_set_q_extentsize_proc(msg->dbpcl_id,
+ msg->extentsize,
+ &reply);
+
+ return (&reply);
+}
+
+__db_set_re_delim_reply *
+__db_db_set_re_delim_4005__SVCSUFFIX__(msg, req)
+ __db_set_re_delim_msg *msg;
+ struct svc_req *req;
+{
+ static __db_set_re_delim_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_set_re_delim_proc(msg->dbpcl_id,
+ msg->delim,
+ &reply);
+
+ return (&reply);
+}
+
+__db_set_re_len_reply *
+__db_db_set_re_len_4005__SVCSUFFIX__(msg, req)
+ __db_set_re_len_msg *msg;
+ struct svc_req *req;
+{
+ static __db_set_re_len_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_set_re_len_proc(msg->dbpcl_id,
+ msg->len,
+ &reply);
+
+ return (&reply);
+}
+
+__db_set_re_pad_reply *
+__db_db_set_re_pad_4005__SVCSUFFIX__(msg, req)
+ __db_set_re_pad_msg *msg;
+ struct svc_req *req;
+{
+ static __db_set_re_pad_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_set_re_pad_proc(msg->dbpcl_id,
+ msg->pad,
&reply);
return (&reply);
}
__db_stat_reply *
-__db_db_stat_4003__SVCSUFFIX__(msg, req)
+__db_db_stat_4005__SVCSUFFIX__(msg, req)
__db_stat_msg *msg;
struct svc_req *req;
{
@@ -984,7 +951,7 @@ __db_db_stat_4003__SVCSUFFIX__(msg, req)
}
__db_sync_reply *
-__db_db_sync_4003__SVCSUFFIX__(msg, req)
+__db_db_sync_4005__SVCSUFFIX__(msg, req)
__db_sync_msg *msg;
struct svc_req *req;
{
@@ -999,7 +966,7 @@ __db_db_sync_4003__SVCSUFFIX__(msg, req)
}
__db_truncate_reply *
-__db_db_truncate_4003__SVCSUFFIX__(msg, req)
+__db_db_truncate_4005__SVCSUFFIX__(msg, req)
__db_truncate_msg *msg;
struct svc_req *req;
{
@@ -1014,116 +981,83 @@ __db_db_truncate_4003__SVCSUFFIX__(msg, req)
return (&reply);
}
-__db_cursor_reply *
-__db_db_cursor_4003__SVCSUFFIX__(msg, req)
- __db_cursor_msg *msg;
- struct svc_req *req;
-{
- static __db_cursor_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __db_cursor_proc(msg->dbpcl_id,
- msg->txnpcl_id,
- msg->flags,
- &reply);
-
- return (&reply);
-}
-
-__db_join_reply *
-__db_db_join_4003__SVCSUFFIX__(msg, req)
- __db_join_msg *msg;
- struct svc_req *req;
-{
- static __db_join_reply reply; /* must be static */
- COMPQUIET(req, NULL);
-
- __db_join_proc(msg->dbpcl_id,
- msg->curs.curs_val,
- msg->curs.curs_len,
- msg->flags,
- &reply);
-
- return (&reply);
-}
-
-__dbc_close_reply *
-__db_dbc_close_4003__SVCSUFFIX__(msg, req)
- __dbc_close_msg *msg;
+__dbc_c_close_reply *
+__db_dbc_c_close_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_close_msg *msg;
struct svc_req *req;
{
- static __dbc_close_reply reply; /* must be static */
+ static __dbc_c_close_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __dbc_close_proc(msg->dbccl_id,
+ __dbc_c_close_proc(msg->dbccl_id,
&reply);
return (&reply);
}
-__dbc_count_reply *
-__db_dbc_count_4003__SVCSUFFIX__(msg, req)
- __dbc_count_msg *msg;
+__dbc_c_count_reply *
+__db_dbc_c_count_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_count_msg *msg;
struct svc_req *req;
{
- static __dbc_count_reply reply; /* must be static */
+ static __dbc_c_count_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __dbc_count_proc(msg->dbccl_id,
+ __dbc_c_count_proc(msg->dbccl_id,
msg->flags,
&reply);
return (&reply);
}
-__dbc_del_reply *
-__db_dbc_del_4003__SVCSUFFIX__(msg, req)
- __dbc_del_msg *msg;
+__dbc_c_del_reply *
+__db_dbc_c_del_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_del_msg *msg;
struct svc_req *req;
{
- static __dbc_del_reply reply; /* must be static */
+ static __dbc_c_del_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __dbc_del_proc(msg->dbccl_id,
+ __dbc_c_del_proc(msg->dbccl_id,
msg->flags,
&reply);
return (&reply);
}
-__dbc_dup_reply *
-__db_dbc_dup_4003__SVCSUFFIX__(msg, req)
- __dbc_dup_msg *msg;
+__dbc_c_dup_reply *
+__db_dbc_c_dup_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_dup_msg *msg;
struct svc_req *req;
{
- static __dbc_dup_reply reply; /* must be static */
+ static __dbc_c_dup_reply reply; /* must be static */
COMPQUIET(req, NULL);
- __dbc_dup_proc(msg->dbccl_id,
+ __dbc_c_dup_proc(msg->dbccl_id,
msg->flags,
&reply);
return (&reply);
}
-__dbc_get_reply *
-__db_dbc_get_4003__SVCSUFFIX__(msg, req)
- __dbc_get_msg *msg;
+__dbc_c_get_reply *
+__db_dbc_c_get_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_get_msg *msg;
struct svc_req *req;
{
- static __dbc_get_reply reply; /* must be static */
- static int __dbc_get_free = 0; /* must be static */
+ static __dbc_c_get_reply reply; /* must be static */
+ static int __dbc_c_get_free = 0; /* must be static */
COMPQUIET(req, NULL);
- if (__dbc_get_free)
- xdr_free((xdrproc_t)xdr___dbc_get_reply, (void *)&reply);
- __dbc_get_free = 0;
+ if (__dbc_c_get_free)
+ xdr_free((xdrproc_t)xdr___dbc_c_get_reply, (void *)&reply);
+ __dbc_c_get_free = 0;
/* Reinitialize allocated fields */
reply.keydata.keydata_val = NULL;
reply.datadata.datadata_val = NULL;
- __dbc_get_proc(msg->dbccl_id,
+ __dbc_c_get_proc(msg->dbccl_id,
msg->keydlen,
msg->keydoff,
msg->keyulen,
@@ -1138,29 +1072,29 @@ __db_dbc_get_4003__SVCSUFFIX__(msg, req)
msg->datadata.datadata_len,
msg->flags,
&reply,
- &__dbc_get_free);
+ &__dbc_c_get_free);
return (&reply);
}
-__dbc_pget_reply *
-__db_dbc_pget_4003__SVCSUFFIX__(msg, req)
- __dbc_pget_msg *msg;
+__dbc_c_pget_reply *
+__db_dbc_c_pget_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_pget_msg *msg;
struct svc_req *req;
{
- static __dbc_pget_reply reply; /* must be static */
- static int __dbc_pget_free = 0; /* must be static */
+ static __dbc_c_pget_reply reply; /* must be static */
+ static int __dbc_c_pget_free = 0; /* must be static */
COMPQUIET(req, NULL);
- if (__dbc_pget_free)
- xdr_free((xdrproc_t)xdr___dbc_pget_reply, (void *)&reply);
- __dbc_pget_free = 0;
+ if (__dbc_c_pget_free)
+ xdr_free((xdrproc_t)xdr___dbc_c_pget_reply, (void *)&reply);
+ __dbc_c_pget_free = 0;
/* Reinitialize allocated fields */
reply.skeydata.skeydata_val = NULL;
reply.pkeydata.pkeydata_val = NULL;
reply.datadata.datadata_val = NULL;
- __dbc_pget_proc(msg->dbccl_id,
+ __dbc_c_pget_proc(msg->dbccl_id,
msg->skeydlen,
msg->skeydoff,
msg->skeyulen,
@@ -1181,27 +1115,27 @@ __db_dbc_pget_4003__SVCSUFFIX__(msg, req)
msg->datadata.datadata_len,
msg->flags,
&reply,
- &__dbc_pget_free);
+ &__dbc_c_pget_free);
return (&reply);
}
-__dbc_put_reply *
-__db_dbc_put_4003__SVCSUFFIX__(msg, req)
- __dbc_put_msg *msg;
+__dbc_c_put_reply *
+__db_dbc_c_put_4005__SVCSUFFIX__(msg, req)
+ __dbc_c_put_msg *msg;
struct svc_req *req;
{
- static __dbc_put_reply reply; /* must be static */
- static int __dbc_put_free = 0; /* must be static */
+ static __dbc_c_put_reply reply; /* must be static */
+ static int __dbc_c_put_free = 0; /* must be static */
COMPQUIET(req, NULL);
- if (__dbc_put_free)
- xdr_free((xdrproc_t)xdr___dbc_put_reply, (void *)&reply);
- __dbc_put_free = 0;
+ if (__dbc_c_put_free)
+ xdr_free((xdrproc_t)xdr___dbc_c_put_reply, (void *)&reply);
+ __dbc_c_put_free = 0;
/* Reinitialize allocated fields */
reply.keydata.keydata_val = NULL;
- __dbc_put_proc(msg->dbccl_id,
+ __dbc_c_put_proc(msg->dbccl_id,
msg->keydlen,
msg->keydoff,
msg->keyulen,
@@ -1216,7 +1150,66 @@ __db_dbc_put_4003__SVCSUFFIX__(msg, req)
msg->datadata.datadata_len,
msg->flags,
&reply,
- &__dbc_put_free);
+ &__dbc_c_put_free);
+ return (&reply);
+}
+
+__txn_abort_reply *
+__db_txn_abort_4005__SVCSUFFIX__(msg, req)
+ __txn_abort_msg *msg;
+ struct svc_req *req;
+{
+ static __txn_abort_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __txn_abort_proc(msg->txnpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+__txn_commit_reply *
+__db_txn_commit_4005__SVCSUFFIX__(msg, req)
+ __txn_commit_msg *msg;
+ struct svc_req *req;
+{
+ static __txn_commit_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __txn_commit_proc(msg->txnpcl_id,
+ msg->flags,
+ &reply);
+
+ return (&reply);
+}
+
+__txn_discard_reply *
+__db_txn_discard_4005__SVCSUFFIX__(msg, req)
+ __txn_discard_msg *msg;
+ struct svc_req *req;
+{
+ static __txn_discard_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __txn_discard_proc(msg->txnpcl_id,
+ msg->flags,
+ &reply);
+
+ return (&reply);
+}
+
+__txn_prepare_reply *
+__db_txn_prepare_4005__SVCSUFFIX__(msg, req)
+ __txn_prepare_msg *msg;
+ struct svc_req *req;
+{
+ static __txn_prepare_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __txn_prepare_proc(msg->txnpcl_id,
+ (u_int8_t *)msg->gid,
+ &reply);
+
return (&reply);
}
diff --git a/db/rpc_server/clsrv.html b/db/rpc_server/clsrv.html
index ae089c4b3..c35bf438a 100644
--- a/db/rpc_server/clsrv.html
+++ b/db/rpc_server/clsrv.html
@@ -1,52 +1,51 @@
-<!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>
-
-<CENTER>
-<H1>
-Client/Server Interface for Berkeley DB</H1></CENTER>
-
-<CENTER><I>Susan LoVerso</I>
-<BR><I>sue@sleepycat.com</I>
-<BR><I>Rev 1.3</I>
-<BR><I>1999 Nov 29</I></CENTER>
-
-<P>We provide an interface allowing client/server access to Berkeley DB.&nbsp;&nbsp;
+<!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.76 [en] (X11; U; FreeBSD 4.3-RELEASE i386) [Netscape]">
+</head>
+<body>
+
+<center>
+<h1>
+&nbsp;Client/Server Interface for Berkeley DB</h1></center>
+
+<center><i>Susan LoVerso</i>
+<br><i>Rev 1.3</i>
+<br><i>1999 Nov 29</i></center>
+
+<p>We provide an interface allowing client/server access to Berkeley DB.&nbsp;&nbsp;
Our goal is to provide a client and server library to allow users to separate
the functionality of their applications yet still have access to the full
benefits of Berkeley DB.&nbsp; The goal is to provide a totally seamless
interface with minimal modification to existing applications as well.
-<P>The client/server interface for Berkeley DB can be broken up into several
+<p>The client/server interface for Berkeley DB can be broken up into several
layers.&nbsp; At the lowest level there is the transport mechanism to send
out the messages over the network.&nbsp; Above that layer is the messaging
layer to interpret what comes over the wire, and bundle/unbundle message
contents.&nbsp; The next layer is Berkeley DB itself.
-<P>The transport layer uses ONC RPC (RFC 1831) and XDR (RFC 1832).&nbsp;
+<p>The transport layer uses ONC RPC (RFC 1831) and XDR (RFC 1832).&nbsp;
We declare our message types and operations supported by our program and
the RPC library and utilities pretty much take care of the rest.&nbsp;
The
-<I>rpcgen</I> program generates all of the low level code needed.&nbsp;
+<i>rpcgen</i> program generates all of the low level code needed.&nbsp;
We need to define both sides of the RPC.
-<BR>&nbsp;
-<H2>
-<A NAME="DB Modifications"></A>DB Modifications</H2>
+<br>&nbsp;
+<h2>
+<a NAME="DB Modifications"></a>DB Modifications</h2>
To achieve the goal of a seamless interface, it is necessary to impose
a constraint on the application. That constraint is simply that all database
access must be done through an open environment.&nbsp; I.e. this model
does not support standalone databases.&nbsp; The reason for this constraint
is so that we have an environment structure internally to store our connection
to the server.&nbsp; Imposing this constraint means that we can provide
-the seamless interface just by adding a single environment method: <A HREF="../docs/api_c/env_set_server.html">DBENV->set_server()</A>.
-<P>The planned interface for this method is:
-<PRE>DBENV->set_server(dbenv,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* DB_ENV structure */
+the seamless interface just by adding a single environment method: <a href="../docs/api_c/env_set_rpc_server.html">DBENV->set_rpc_server()</a>.
+<p>The planned interface for this method is:
+<pre>DBENV->set_rpc_server(dbenv,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* DB_ENV structure */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hostname&nbsp;&nbsp;&nbsp; /* Host of server */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cl_timeout, /* Client timeout (sec) */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srv_timeout,/* Server timeout (sec) */
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags);&nbsp;&nbsp;&nbsp;&nbsp; /* Flags: unused */</PRE>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags);&nbsp;&nbsp;&nbsp;&nbsp; /* Flags: unused */</pre>
This new method takes the hostname of the server, establishes our connection
and an environment on the server.&nbsp; If a server timeout is specified,
then we send that to the server as well (and the server may or may not
@@ -61,30 +60,30 @@ is currently unused, but exists because we always need to have a placeholder
for flags and it would be used for specifying authentication desired (were
we to provide an authentication scheme at some point) or other uses not
thought of yet!
-<P>This client code is part of the monolithic DB library.&nbsp; The user
-accesses the client functions via a new flag to <A HREF="../docs/api_c/db_env_create.html">db_env_create()</A>.&nbsp;
+<p>This client code is part of the monolithic DB library.&nbsp; The user
+accesses the client functions via a new flag to <a href="../docs/api_c/db_env_create.html">db_env_create()</a>.&nbsp;
That flag is DB_CLIENT.&nbsp; By using this flag the user indicates they
want to have the client methods rather than the standard methods for the
environment.&nbsp; Also by issuing this flag, the user needs to connect
-to the server via the <A HREF="../docs/api_c/env_set_server.html">DBENV->set_server()</A>
+to the server via the <a href="../docs/api_c/env_set_rpc_server.html">DBENV->set_rpc_server()</a>
method.
-<P>We need two new fields in the <I>DB_ENV </I>structure.&nbsp; One is
+<p>We need two new fields in the <i>DB_ENV </i>structure.&nbsp; One is
the socket descriptor to communicate to the server, the other field is
-the client identifier the server gives to us.&nbsp; The <I>DB, </I>and<I>
-DBC </I>only need one additional field, the client identifier.&nbsp; The
-<I>DB_TXN</I>
-structure does not need modification, we are overloading the <I>txn_id
-</I>field.
-<H2>
-Issues</H2>
+the client identifier the server gives to us.&nbsp; The <i>DB, </i>and<i>
+DBC </i>only need one additional field, the client identifier.&nbsp; The
+<i>DB_TXN</i>
+structure does not need modification, we are overloading the <i>txn_id
+</i>field.
+<h2>
+Issues</h2>
We need to figure out what to do in case of client and server crashes.&nbsp;
Both the client library and the server program are stateful.&nbsp; They
both consume local resources during the lifetime of the connection.&nbsp;
Should one end drop that connection, the other side needs to release those
resources.
-<P>If the server crashes, then the client will get an error back.&nbsp;
+<p>If the server crashes, then the client will get an error back.&nbsp;
I have chosen to implement time-outs on the client side, using a default
-or allowing the application to specify one through the <A HREF="../docs/api_c/env_set_server.html">DBENV->set_server()</A>
+or allowing the application to specify one through the <a href="../docs/api_c/env_set_rpc_server.html">DBENV->set_rpc_server()</a>
method.&nbsp; Either the current operation will time-out waiting for the
reply or the next operation called will time out (or get back some other
kind of error regarding the server's non-existence).&nbsp; In any case,
@@ -102,65 +101,65 @@ on recover.&nbsp; The client can then re-establish its connection and begin
again.&nbsp; This is effectively like beginning over.&nbsp; The client
cannot use ID's from its previous connection to the server.&nbsp; However,
if recovery is run, then consistency is assured.
-<P>If the client crashes, the server needs to somehow figure this out.&nbsp;
+<p>If the client crashes, the server needs to somehow figure this out.&nbsp;
The server is just sitting there waiting for a request to come in.&nbsp;
A server must be able to time-out a client.&nbsp; Similar to ftpd, if a
connection is idle for N seconds, then the server decides the client is
dead and releases that client's resources, aborting any open transactions,
closing any open databases and environments.&nbsp;&nbsp; The server timing
out a client is not a trivial issue however.&nbsp; The generated function
-for the server just calls <I>svc_run()</I>.&nbsp; The server code I write
+for the server just calls <i>svc_run()</i>.&nbsp; The server code I write
contains procedures to do specific things.&nbsp; We do not have access
-to the code calling <I>select()</I>.&nbsp; Timing out the select is not
+to the code calling <i>select()</i>.&nbsp; Timing out the select is not
good enough even if we could do so.&nbsp; We want to time-out idle environments,
not simply cause a time-out if the server is idle a while.&nbsp; See the
-discussion of the <A HREF="#The Server Program">server program</A> for
+discussion of the <a href="#The Server Program">server program</a> for
a description of how we accomplish this.
-<P>Since rpcgen generates the main() function of the server, I do not yet
+<p>Since rpcgen generates the main() function of the server, I do not yet
know how we are going to have the server multi-threaded or multi-process
without changing the generated code.&nbsp; The RPC book indicates that
the only way to accomplish this is through modifying the generated code
-in the server.&nbsp; <B>For the moment we will ignore this issue while
-we get the core server working, as it is only a performance issue.</B>
-<P>We do not do any security or authentication.&nbsp; Someone could get
+in the server.&nbsp; <b>For the moment we will ignore this issue while
+we get the core server working, as it is only a performance issue.</b>
+<p>We do not do any security or authentication.&nbsp; Someone could get
the code and modify it to spoof messages, trick the server, etc.&nbsp;
RPC has some amount of authentication built into it.&nbsp; I haven't yet
looked into it much to know if we want to use it or just point a user at
it.&nbsp; The changes to the client code are fairly minor, the changes
to our server procs are fairly minor.&nbsp; We would have to add code to
-a <I>sed</I> script or <I>awk</I> script to change the generated server
+a <i>sed</i> script or <i>awk</i> script to change the generated server
code (yet again) in the dispatch routine to perform authentication.
-<P>We will need to get an official program number from Sun.&nbsp; We can
-get this by sending mail to <I>rpc@sun.com</I> and presumably at some point
+<p>We will need to get an official program number from Sun.&nbsp; We can
+get this by sending mail to <i>rpc@sun.com</i> and presumably at some point
they will send us back a program number that we will encode into our XDR
description file.&nbsp; Until we release this we can use a program number
in the "user defined" number space.
-<BR>&nbsp;
-<H2>
-<A NAME="The Server Program"></A>The Server Program</H2>
+<br>&nbsp;
+<h2>
+<a NAME="The Server Program"></a>The Server Program</h2>
The server is a standalone program that the user builds and runs, probably
as a daemon like process.&nbsp; This program is linked against the Berkeley
DB library and the RPC library (which is part of the C library on my FreeBSD
-machine, others may have/need <I>-lrpclib</I>).&nbsp; The server basically
+machine, others may have/need <i>-lrpclib</i>).&nbsp; The server basically
is a slave to the client process.&nbsp; All messages from the client are
synchronous and two-way.&nbsp; The server handles messages one at a time,
and sends a reply back before getting another message.&nbsp; There are
no asynchronous messages generated by the server to the client.
-<P>We have made a choice to modify the generated code for the server.&nbsp;
+<p>We have made a choice to modify the generated code for the server.&nbsp;
The changes will be minimal, generally calling functions we write, that
are in other source files.&nbsp; The first change is adding a call to our
time-out function as described below.&nbsp; The second change is changing
-the name of the generated <I>main()</I> function to <I>__dbsrv_main()</I>,
-and adding our own <I>main()</I> function so that we can parse options,
-and set up other initialization we require.&nbsp; I have a <I>sed</I> script
+the name of the generated <i>main()</i> function to <i>__dbsrv_main()</i>,
+and adding our own <i>main()</i> function so that we can parse options,
+and set up other initialization we require.&nbsp; I have a <i>sed</i> script
that is run from the distribution scripts that massages the generated code
to make these minor changes.
-<P>Primarily the code needed for the server is the collection of the specified
+<p>Primarily the code needed for the server is the collection of the specified
RPC functions.&nbsp; Each function receives the structure indicated, and
our code takes out what it needs and passes the information into DB itself.&nbsp;
The server needs to maintain a translation table for identifiers that we
pass back to the client for the environment, transaction and database handles.
-<P>The table that the server maintains, assuming one client per server
+<p>The table that the server maintains, assuming one client per server
process/thread, should contain the handle to the environment, database
or transaction, a link to maintain parent/child relationships between transactions,
or databases and cursors, this handle's identifier, a type so that we can
@@ -169,7 +168,7 @@ handle's environment entry (for time out/activity purposes).&nbsp; The
table contains, in entries used by environments, a time-out value and an
activity time stamp.&nbsp; Its use is described below for timing out idle
clients.
-<P>Here is how we time out clients in the server.&nbsp; We have to modify
+<p>Here is how we time out clients in the server.&nbsp; We have to modify
the generated server code, but only to add one line during the dispatch
function to run the time-out function.&nbsp; The call is made right before
the return of the dispatch function, after the reply is sent to the client,
@@ -181,16 +180,16 @@ we know we do not need to run through the list of open handles.&nbsp; If
the hint is expired, then we go through the list of open environment handles,
and if they are past their expiration, then we close them and clean up.&nbsp;
If they are not, we set up the hint for the next time.
-<P>Each entry in the open handle table has a pointer back to its environment's
+<p>Each entry in the open handle table has a pointer back to its environment's
entry.&nbsp; Every operation within this environment can then update the
single environment activity record.&nbsp; Every environment can have a
-different time-out.&nbsp; The <A HREF="../docs/api_c/env_set_server.html">DBENV->set_server
-</A>call
+different time-out.&nbsp; The <a href="../docs/api_c/env_set_rpc_server.html">DBENV->set_rpc_server
+</a>call
takes a server time-out value.&nbsp; If this value is 0 then a default
(currently 5 minutes) is used.&nbsp; This time-out value is only a hint
to the server.&nbsp; It may choose to disregard this value or set the time-out
based on its own implementation.
-<P>For completeness, the flaws of this time-out implementation should be
+<p>For completeness, the flaws of this time-out implementation should be
pointed out.&nbsp; First, it is possible that a client could crash with
open handles, and no other requests come in to the server.&nbsp; Therefore
the time-out function never gets run and those resources are not released
@@ -205,222 +204,222 @@ of 1 minute.&nbsp; If this environment becomes idle (and other operations
are going on), the time-out function will not release that environment
until the original 5 minute hint expires.&nbsp; This is not a problem since
the resources will eventually be released.
-<P>On a similar note, if a client crashes during an RPC, our reply generates
-a SIGPIPE, and our server crashes unless we catch it.&nbsp; Using <I>signal(SIGPIPE,
-SIG_IGN) </I>we can ignore it, and the server will go on.&nbsp; This is
-a call&nbsp; in our <I>main()</I> function that we write.&nbsp; Eventually
+<p>On a similar note, if a client crashes during an RPC, our reply generates
+a SIGPIPE, and our server crashes unless we catch it.&nbsp; Using <i>signal(SIGPIPE,
+SIG_IGN) </i>we can ignore it, and the server will go on.&nbsp; This is
+a call&nbsp; in our <i>main()</i> function that we write.&nbsp; Eventually
this client's handles would be timed out as described above.&nbsp; We need
this only for the unfortunate window of a client crashing during the RPC.
-<P>The options below are primarily for control of the program itself,.&nbsp;
+<p>The options below are primarily for control of the program itself,.&nbsp;
Details relating to databases and environments should be passed from the
client to the server, since the server can serve many clients, many environments
and many databases.&nbsp; Therefore it makes more sense for the client
to set the cache size of its own environment, rather than setting a default
cachesize on the server that applies as a blanket to any environment it
may be called upon to open.&nbsp; Options are:
-<UL>
-<LI>
-<B>-t&nbsp;</B> to set the default time-out given to an environment.</LI>
+<ul>
+<li>
+<b>-t&nbsp;</b> to set the default time-out given to an environment.</li>
-<LI>
-<B>-T</B> to set the maximum time-out allowed for the server.</LI>
+<li>
+<b>-T</b> to set the maximum time-out allowed for the server.</li>
-<LI>
-<B>-L</B> to log the execution of the server process to a specified file.</LI>
+<li>
+<b>-L</b> to log the execution of the server process to a specified file.</li>
-<LI>
-<B>-v</B> to run in verbose mode.</LI>
+<li>
+<b>-v</b> to run in verbose mode.</li>
-<LI>
-<B>-M</B>&nbsp; to specify the maximum number of outstanding child server
+<li>
+<b>-M</b>&nbsp; to specify the maximum number of outstanding child server
processes/threads we can have at any given time.&nbsp; The default is 10.
-<B>[We
-are not yet doing multiple threads/processes.]</B></LI>
-</UL>
+<b>[We
+are not yet doing multiple threads/processes.]</b></li>
+</ul>
-<H2>
-The Client Code</H2>
+<h2>
+The Client Code</h2>
The client code contains all of the supported functions and methods used
-in this model.&nbsp; There are several methods in the <I>__db_env
-</I>and
-<I>__db</I>
+in this model.&nbsp; There are several methods in the <i>__db_env
+</i>and
+<i>__db</i>
structures that currently do not apply, such as the callbacks.&nbsp; Those
fields that are not applicable to the client model point to NULL to notify
the user of their error.&nbsp; Some method functions remain unchanged,
as well such as the error calls.
-<P>The client code contains each method function that goes along with the
-<A HREF="#Remote Procedure Calls">RPC
-calls</A> described elsewhere.&nbsp; The client library also contains its
-own version of <A HREF="../docs/api_c/env_create.html">db_env_create()</A>,
+<p>The client code contains each method function that goes along with the
+<a href="#Remote Procedure Calls">RPC
+calls</a> described elsewhere.&nbsp; The client library also contains its
+own version of <a href="../docs/api_c/env_create.html">db_env_create()</a>,
which does not result in any messages going over to the server (since we
do not yet know what server we are talking to).&nbsp; This function sets
up the pointers to the correct client functions.
-<P>All of the method functions that handle the messaging have a basic flow
+<p>All of the method functions that handle the messaging have a basic flow
similar to this:
-<UL>
-<LI>
-Local arg parsing that may be needed</LI>
+<ul>
+<li>
+Local arg parsing that may be needed</li>
-<LI>
+<li>
Marshalling the message header and the arguments we need to send to the
-server</LI>
+server</li>
-<LI>
-Sending the message</LI>
+<li>
+Sending the message</li>
-<LI>
-Receiving a reply</LI>
+<li>
+Receiving a reply</li>
-<LI>
-Unmarshalling the reply</LI>
+<li>
+Unmarshalling the reply</li>
-<LI>
-Local results processing that may be needed</LI>
-</UL>
+<li>
+Local results processing that may be needed</li>
+</ul>
-<H2>
-Generated Code</H2>
+<h2>
+Generated Code</h2>
Almost all of the code is generated from a source file describing the interface
-and an <I>awk</I> script.&nbsp;&nbsp; This awk script generates six (6)
+and an <i>awk</i> script.&nbsp;&nbsp; This awk script generates six (6)
files for us.&nbsp; It also modifies one.&nbsp; The files are:
-<OL>
-<LI>
-Client file - The C source file created containing the client code.</LI>
+<ol>
+<li>
+Client file - The C source file created containing the client code.</li>
-<LI>
+<li>
Client template file - The C template source file created containing interfaces
for handling client-local issues such as resource allocation, but with
-a consistent interface with the client code generated.</LI>
+a consistent interface with the client code generated.</li>
-<LI>
-Server file - The C source file created containing the server code.</LI>
+<li>
+Server file - The C source file created containing the server code.</li>
-<LI>
+<li>
Server template file - The C template source file created containing interfaces
for handling server-local issues such as resource allocation, calling into
-the DB library but with a consistent interface with the server code generated.</LI>
+the DB library but with a consistent interface with the server code generated.</li>
-<LI>
-XDR file - The XDR message description file created.</LI>
+<li>
+XDR file - The XDR message description file created.</li>
-<LI>
+<li>
Server sed file - A sed script that contains commands to apply to the server
procedure file (i.e. the real source file that the server template file
becomes) so that minor interface changes can be consistently and easily
-applied to the real code.</LI>
+applied to the real code.</li>
-<LI>
+<li>
Server procedure file - This is the file that is modified by the sed script
-generated.&nbsp; It originated from the server template file.</LI>
-</OL>
-The awk script reads a source file, <I>db_server/rpc.src </I>that describes
+generated.&nbsp; It originated from the server template file.</li>
+</ol>
+The awk script reads a source file, <i>db_server/rpc.src </i>that describes
each operation and what sorts of arguments it takes and what it returns
from the server.&nbsp; The syntax of the source file describes the interface
to that operation.&nbsp; There are four (4) parts to the syntax:
-<OL>
-<LI>
-<B>BEGIN</B> <B><I>function version# codetype</I></B> - begins a new functional
-interface for the given <B><I>function</I></B>.&nbsp; Each function has
-a <B><I>version number</I></B>, currently all of them are at version number
-one (1).&nbsp; The <B><I>code type</I></B> indicates to the awk script
-what kind of code to generate.&nbsp; The choices are:</LI>
-
-<UL>
-<LI>
-<B>CODE </B>- Generate all code, and return a status value.&nbsp; If specified,
+<ol>
+<li>
+<b>BEGIN</b> <b><i>function version# codetype</i></b> - begins a new functional
+interface for the given <b><i>function</i></b>.&nbsp; Each function has
+a <b><i>version number</i></b>, currently all of them are at version number
+one (1).&nbsp; The <b><i>code type</i></b> indicates to the awk script
+what kind of code to generate.&nbsp; The choices are:</li>
+
+<ul>
+<li>
+<b>CODE </b>- Generate all code, and return a status value.&nbsp; If specified,
the client code will simply return the status to the user upon completion
-of the RPC call.</LI>
+of the RPC call.</li>
-<LI>
-<B>RETCODE </B>- Generate all code and call a return function in the client
+<li>
+<b>RETCODE </b>- Generate all code and call a return function in the client
template file to deal with client issues or with other returned items.&nbsp;
If specified, the client code generated will call a function of the form
-<I>__dbcl_&lt;name>_ret()
-</I>where
+<i>__dbcl_&lt;name>_ret()
+</i>where
&lt;name> is replaced with the function name given here.&nbsp; This function
is placed in the template file because this indicates that something special
must occur on return.&nbsp; The arguments to this function are the same
as those for the client function, with the addition of the reply message
-structure.</LI>
+structure.</li>
-<LI>
-<B>NOCLNTCODE - </B>Generate XDR and server code, but no corresponding
+<li>
+<b>NOCLNTCODE - </b>Generate XDR and server code, but no corresponding
client code. (This is used for functions that are not named the same thing
on both sides.&nbsp; The only use of this at the moment is db_env_create
and db_create.&nbsp; The environment create call to the server is actually
-called from the <A HREF="../docs/api_c/env_set_server.html">DBENV->set_server()</A>
+called from the <a href="../docs/api_c/env_set_rpc_server.html">DBENV->set_rpc_server()</a>
method.&nbsp; The db_create code exists elsewhere in the library and we
-modify that code for the client call.)</LI>
-</UL>
-
-<LI>
-<B>ARG <I>RPC-type C-type varname [list-type]</I></B>- each line of this
-describes an argument to the function.&nbsp; The argument is called <B><I>varname</I></B>.&nbsp;
-The <B><I>C-type</I></B> given is what it should look like in the C code
-generated, such as <B>DB *, u_int32_t, const char *</B>.&nbsp; The
-<B><I>RPC-type</I></B>
+modify that code for the client call.)</li>
+</ul>
+
+<li>
+<b>ARG <i>RPC-type C-type varname [list-type]</i></b>- each line of this
+describes an argument to the function.&nbsp; The argument is called <b><i>varname</i></b>.&nbsp;
+The <b><i>C-type</i></b> given is what it should look like in the C code
+generated, such as <b>DB *, u_int32_t, const char *</b>.&nbsp; The
+<b><i>RPC-type</i></b>
is an indication about how the RPC request message should be constructed.&nbsp;
-The RPC-types allowed are described below.</LI>
+The RPC-types allowed are described below.</li>
-<LI>
-<B>RET <I>RPC-type C-type varname [list-type]</I></B>- each line of this
+<li>
+<b>RET <i>RPC-type C-type varname [list-type]</i></b>- each line of this
describes what the server should return from this procedure call (in addition
to a status, which is always returned and should not be specified).&nbsp;
-The argument is called <B><I>varname</I></B>.&nbsp; The <B><I>C-type</I></B>
-given is what it should look like in the C code generated, such as <B>DB
-*, u_int32_t, const char *</B>.&nbsp; The <B><I>RPC-type</I></B> is an
+The argument is called <b><i>varname</i></b>.&nbsp; The <b><i>C-type</i></b>
+given is what it should look like in the C code generated, such as <b>DB
+*, u_int32_t, const char *</b>.&nbsp; The <b><i>RPC-type</i></b> is an
indication about how the RPC reply message should be constructed.&nbsp;
-The RPC-types are described below.</LI>
-
-<LI>
-<B>END </B>- End the description of this function.&nbsp; The result is
-that when the awk script encounters the <B>END</B> tag, it now has all
-the information it needs to construct the generated code for this function.</LI>
-</OL>
-The <B><I>RPC-type</I></B> must be one of the following:
-<UL>
-<LI>
-<B>IGNORE </B>- This argument is not passed to the server and should be
-ignored when constructing the XDR code.&nbsp; <B>Only allowed for an ARG
-specfication.</B></LI>
-
-<LI>
-<B>STRING</B> - This argument is a string.</LI>
-
-<LI>
-<B>INT </B>- This argument is an integer of some sort.</LI>
-
-<LI>
-<B>DBT </B>- This argument is a DBT, resulting in its decomposition into
-the request message.</LI>
-
-<LI>
-<B>LIST</B> - This argument is an opaque list passed to the server (NULL-terminated).&nbsp;
-If an argument of this type is given, it must have a <B><I>list-type</I></B>
-specified that is one of:</LI>
-
-<UL>
-<LI>
-<B>STRING</B></LI>
-
-<LI>
-<B>INT</B></LI>
-
-<LI>
-<B>ID</B>.</LI>
-</UL>
-
-<LI>
-<B>ID</B> - This argument is an identifier.</LI>
-</UL>
+The RPC-types are described below.</li>
+
+<li>
+<b>END </b>- End the description of this function.&nbsp; The result is
+that when the awk script encounters the <b>END</b> tag, it now has all
+the information it needs to construct the generated code for this function.</li>
+</ol>
+The <b><i>RPC-type</i></b> must be one of the following:
+<ul>
+<li>
+<b>IGNORE </b>- This argument is not passed to the server and should be
+ignored when constructing the XDR code.&nbsp; <b>Only allowed for an ARG
+specfication.</b></li>
+
+<li>
+<b>STRING</b> - This argument is a string.</li>
+
+<li>
+<b>INT </b>- This argument is an integer of some sort.</li>
+
+<li>
+<b>DBT </b>- This argument is a DBT, resulting in its decomposition into
+the request message.</li>
+
+<li>
+<b>LIST</b> - This argument is an opaque list passed to the server (NULL-terminated).&nbsp;
+If an argument of this type is given, it must have a <b><i>list-type</i></b>
+specified that is one of:</li>
+
+<ul>
+<li>
+<b>STRING</b></li>
+
+<li>
+<b>INT</b></li>
+
+<li>
+<b>ID</b>.</li>
+</ul>
+
+<li>
+<b>ID</b> - This argument is an identifier.</li>
+</ul>
So, for example, the source for the DB->join RPC call looks like:
-<PRE>BEGIN&nbsp;&nbsp; dbjoin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETCODE
+<pre>BEGIN&nbsp;&nbsp; dbjoin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETCODE
ARG&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DB *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbp&nbsp;
ARG&nbsp;&nbsp;&nbsp;&nbsp; LIST&nbsp;&nbsp;&nbsp; DBC **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curs&nbsp;&nbsp;&nbsp; ID
ARG&nbsp;&nbsp;&nbsp;&nbsp; IGNORE&nbsp; DBC **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbcpp&nbsp;
ARG&nbsp;&nbsp;&nbsp;&nbsp; INT&nbsp;&nbsp;&nbsp;&nbsp; u_int32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags
RET&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbcid
-END</PRE>
+END</pre>
Our first line tells us we are writing the dbjoin function.&nbsp; It requires
special code on the client so we indicate that with the RETCODE.&nbsp;
This method takes four arguments.&nbsp; For the RPC request we need the
@@ -429,17 +428,17 @@ the cursor list, we ignore the argument to return the cursor handle to
the user, and we pass along the flags.&nbsp; On the return, the reply contains
a status, by default, and additionally, it contains the ID of the newly
created cursor.
-<H2>
-Building and Installing</H2>
+<h2>
+Building and Installing</h2>
I need to verify with Don Anderson, but I believe we should just build
the server program, just like we do for db_stat, db_checkpoint, etc.&nbsp;
Basically it can be treated as a utility program from the building and
installation perspective.
-<P>As mentioned early on, in the section on <A HREF="#DB Modifications">DB
-Modifications</A>, we have a single library, but allowing the user to access
-the client portion by sending a flag to <A HREF="../docs/api_c/env_create.html">db_env_create()</A>.&nbsp;
+<p>As mentioned early on, in the section on <a href="#DB Modifications">DB
+Modifications</a>, we have a single library, but allowing the user to access
+the client portion by sending a flag to <a href="../docs/api_c/env_create.html">db_env_create()</a>.&nbsp;
The Makefile is modified to include the new files.
-<P>Testing is performed in two ways.&nbsp; First I have a new example program,
+<p>Testing is performed in two ways.&nbsp; First I have a new example program,
that should become part of the example directory.&nbsp; It is basically
a merging of ex_access.c and ex_env.c.&nbsp; This example is adequate to
test basic functionality, as it does just does database put/get calls and
@@ -449,5 +448,5 @@ I am going to modify the Tcl interface to accept the server information.&nbsp;
Nothing else should need to change in Tcl.&nbsp; Then we can either write
our own test modules or use a subset of the existing ones to test functionality
on a regular basis.
-</BODY>
-</HTML>
+</body>
+</html>
diff --git a/db/rpc_server/cxx/db_server_cxxproc.cpp b/db/rpc_server/cxx/db_server_cxxproc.cpp
index e536a7051..f182c69e0 100644
--- a/db/rpc_server/cxx/db_server_cxxproc.cpp
+++ b/db/rpc_server/cxx/db_server_cxxproc.cpp
@@ -1,26 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_server_cxxproc.cpp,v 1.23 2004/09/22 17:30:12 bostic Exp $
+ * $Id: db_server_cxxproc.cpp,v 12.12 2006/08/24 14:46:29 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <rpc/rpc.h>
-
-#include <string.h>
-#endif
-
-#include "db_server.h"
-
#include "db_int.h"
#include "db_cxx.h"
+#include "db_server.h"
extern "C" {
#include "dbinc/db_server_int.h"
@@ -29,7 +20,7 @@ extern "C" {
extern "C" void
__env_get_cachesize_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
__env_get_cachesize_reply *replyp)
{
DbEnv *dbenv;
@@ -43,12 +34,12 @@ __env_get_cachesize_proc(
}
extern "C" void
-__env_cachesize_proc(
- long dbenvcl_id,
+__env_set_cachesize_proc(
+ u_int dbenvcl_id,
u_int32_t gbytes,
u_int32_t bytes,
u_int32_t ncache,
- __env_cachesize_reply *replyp)
+ __env_set_cachesize_reply *replyp)
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -63,16 +54,47 @@ __env_cachesize_proc(
return;
}
+void
+__env_cdsgroup_begin_proc(u_int dbenvcl_id, __env_cdsgroup_begin_reply *replyp)
+{
+ DbEnv *dbenv;
+ DbTxn *txnp;
+ ct_entry *ctp, *dbenv_ctp;
+ int ret;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
+
+ ctp = new_ct_ent(&replyp->status);
+ if (ctp == NULL)
+ return;
+
+ ret = dbenv->cdsgroup_begin(&txnp);
+ if (ret == 0) {
+ ctp->ct_txnp = txnp;
+ ctp->ct_type = CT_TXN;
+ ctp->ct_parent = NULL;
+ ctp->ct_envparent = dbenv_ctp;
+ replyp->txnidcl_id = ctp->ct_id;
+ __dbsrv_settimeout(ctp, dbenv_ctp->ct_timeout);
+ __dbsrv_active(ctp);
+ } else
+ __dbclear_ctp(ctp);
+
+ replyp->status = ret;
+ return;
+}
+
extern "C" void
__env_close_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
u_int32_t flags,
__env_close_reply *replyp)
{
ct_entry *dbenv_ctp;
ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
- replyp->status = __dbenv_close_int(dbenvcl_id, flags, 0);
+ replyp->status = __env_close_int(dbenvcl_id, flags, 0);
return;
}
@@ -103,8 +125,8 @@ __env_create_proc(
extern "C" void
__env_dbremove_proc(
- long dbenvcl_id,
- long txnpcl_id,
+ u_int dbenvcl_id,
+ u_int txnpcl_id,
char *name,
char *subdb,
u_int32_t flags,
@@ -132,8 +154,8 @@ __env_dbremove_proc(
void
__env_dbrename_proc(
- long dbenvcl_id,
- long txnpcl_id,
+ u_int dbenvcl_id,
+ u_int txnpcl_id,
char *name,
char *subdb,
char *newname,
@@ -162,7 +184,7 @@ __env_dbrename_proc(
extern "C" void
__env_get_encrypt_flags_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
__env_get_encrypt_flags_reply *replyp)
{
DbEnv *dbenv;
@@ -175,11 +197,11 @@ __env_get_encrypt_flags_proc(
}
extern "C" void
-__env_encrypt_proc(
- long dbenvcl_id,
+__env_set_encrypt_proc(
+ u_int dbenvcl_id,
char *passwd,
u_int32_t flags,
- __env_encrypt_reply *replyp)
+ __env_set_encrypt_reply *replyp)
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -196,7 +218,7 @@ __env_encrypt_proc(
extern "C" void
__env_get_flags_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
__env_get_flags_reply *replyp)
{
DbEnv *dbenv;
@@ -209,11 +231,11 @@ __env_get_flags_proc(
}
extern "C" void
-__env_flags_proc(
- long dbenvcl_id,
+__env_set_flags_proc(
+ u_int dbenvcl_id,
u_int32_t flags,
u_int32_t onoff,
- __env_flags_reply *replyp)
+ __env_set_flags_reply *replyp)
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -234,7 +256,7 @@ __env_flags_proc(
extern "C" void
__env_get_home_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
__env_get_home_reply *replyp)
{
DbEnv *dbenv;
@@ -248,7 +270,7 @@ __env_get_home_proc(
extern "C" void
__env_get_open_flags_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
__env_get_open_flags_reply *replyp)
{
DbEnv *dbenv;
@@ -262,7 +284,7 @@ __env_get_open_flags_proc(
extern "C" void
__env_open_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
char *home,
u_int32_t flags,
u_int32_t mode,
@@ -312,7 +334,7 @@ __env_open_proc(
if (__dbsrv_verbose)
printf("Sharing env ID %ld\n", new_ctp->ct_id);
replyp->envcl_id = new_ctp->ct_id;
- ret = __dbenv_close_int(dbenvcl_id, 0, 0);
+ ret = __env_close_int(dbenvcl_id, 0, 0);
} else {
ret = dbenv->open(fullhome->home, newflags, mode);
dbenv_ctp->ct_envdp.home = fullhome;
@@ -324,7 +346,7 @@ out: replyp->status = ret;
extern "C" void
__env_remove_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
char *home,
u_int32_t flags,
__env_remove_reply *replyp)
@@ -350,7 +372,7 @@ __env_remove_proc(
extern "C" void
__txn_abort_proc(
- long txnpcl_id,
+ u_int txnpcl_id,
__txn_abort_reply *replyp)
{
DbTxn *txnp;
@@ -367,11 +389,11 @@ __txn_abort_proc(
}
extern "C" void
-__txn_begin_proc(
- long dbenvcl_id,
- long parentcl_id,
+__env_txn_begin_proc(
+ u_int dbenvcl_id,
+ u_int parentcl_id,
u_int32_t flags,
- __txn_begin_reply *replyp)
+ __env_txn_begin_reply *replyp)
{
DbEnv *dbenv;
DbTxn *parent, *txnp;
@@ -411,7 +433,7 @@ __txn_begin_proc(
extern "C" void
__txn_commit_proc(
- long txnpcl_id,
+ u_int txnpcl_id,
u_int32_t flags,
__txn_commit_reply *replyp)
{
@@ -431,7 +453,7 @@ __txn_commit_proc(
extern "C" void
__txn_discard_proc(
- long txnpcl_id,
+ u_int txnpcl_id,
u_int32_t flags,
__txn_discard_reply *replyp)
{
@@ -451,7 +473,7 @@ __txn_discard_proc(
extern "C" void
__txn_prepare_proc(
- long txnpcl_id,
+ u_int txnpcl_id,
u_int8_t *gid,
__txn_prepare_reply *replyp)
{
@@ -468,11 +490,11 @@ __txn_prepare_proc(
}
extern "C" void
-__txn_recover_proc(
- long dbenvcl_id,
+__env_txn_recover_proc(
+ u_int dbenvcl_id,
u_int32_t count,
u_int32_t flags,
- __txn_recover_reply *replyp,
+ __env_txn_recover_reply *replyp,
int * freep)
{
DbEnv *dbenv;
@@ -575,29 +597,10 @@ out2:
}
extern "C" void
-__db_bt_maxkey_proc(
- long dbpcl_id,
- u_int32_t maxkey,
- __db_bt_maxkey_reply *replyp)
-{
- Db *dbp;
- ct_entry *dbp_ctp;
- int ret;
-
- ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
- dbp = (Db *)dbp_ctp->ct_anyp;
-
- ret = dbp->set_bt_maxkey(maxkey);
-
- replyp->status = ret;
- return;
-}
-
-extern "C" void
__db_associate_proc(
- long dbpcl_id,
- long txnpcl_id,
- long sdbpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
+ u_int sdbpcl_id,
u_int32_t flags,
__db_associate_reply *replyp)
{
@@ -633,7 +636,7 @@ __db_associate_proc(
extern "C" void
__db_get_bt_minkey_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_bt_minkey_reply *replyp)
{
Db *dbp;
@@ -646,10 +649,10 @@ __db_get_bt_minkey_proc(
}
extern "C" void
-__db_bt_minkey_proc(
- long dbpcl_id,
+__db_set_bt_minkey_proc(
+ u_int dbpcl_id,
u_int32_t minkey,
- __db_bt_minkey_reply *replyp)
+ __db_set_bt_minkey_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -666,7 +669,7 @@ __db_bt_minkey_proc(
extern "C" void
__db_close_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
u_int32_t flags,
__db_close_reply *replyp)
{
@@ -679,7 +682,7 @@ __db_close_proc(
extern "C" void
__db_create_proc(
- long dbenvcl_id,
+ u_int dbenvcl_id,
u_int32_t flags,
__db_create_reply *replyp)
{
@@ -697,7 +700,7 @@ __db_create_proc(
* We actually require env's for databases. The client should
* have caught it, but just in case.
*/
- DB_ASSERT(dbenv != NULL);
+ DB_ASSERT(NULL, dbenv != NULL);
dbp = new Db(dbenv, flags);
dbp_ctp->ct_dbp = dbp;
dbp_ctp->ct_type = CT_DB;
@@ -710,8 +713,8 @@ __db_create_proc(
extern "C" void
__db_del_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t keydlen,
u_int32_t keydoff,
u_int32_t keyulen,
@@ -749,7 +752,7 @@ __db_del_proc(
extern "C" void
__db_get_encrypt_flags_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_encrypt_flags_reply *replyp)
{
Db *dbp;
@@ -762,11 +765,11 @@ __db_get_encrypt_flags_proc(
}
extern "C" void
-__db_encrypt_proc(
- long dbpcl_id,
+__db_set_encrypt_proc(
+ u_int dbpcl_id,
char *passwd,
u_int32_t flags,
- __db_encrypt_reply *replyp)
+ __db_set_encrypt_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -781,9 +784,9 @@ __db_encrypt_proc(
}
extern "C" void
-__db_get_extentsize_proc(
- long dbpcl_id,
- __db_get_extentsize_reply *replyp)
+__db_get_q_extentsize_proc(
+ u_int dbpcl_id,
+ __db_get_q_extentsize_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -795,10 +798,10 @@ __db_get_extentsize_proc(
}
extern "C" void
-__db_extentsize_proc(
- long dbpcl_id,
+__db_set_q_extentsize_proc(
+ u_int dbpcl_id,
u_int32_t extentsize,
- __db_extentsize_reply *replyp)
+ __db_set_q_extentsize_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -815,7 +818,7 @@ __db_extentsize_proc(
extern "C" void
__db_get_flags_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_flags_reply *replyp)
{
Db *dbp;
@@ -828,10 +831,10 @@ __db_get_flags_proc(
}
extern "C" void
-__db_flags_proc(
- long dbpcl_id,
+__db_set_flags_proc(
+ u_int dbpcl_id,
u_int32_t flags,
- __db_flags_reply *replyp)
+ __db_set_flags_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -849,8 +852,8 @@ __db_flags_proc(
extern "C" void
__db_get_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t keydlen,
u_int32_t keydoff,
u_int32_t keyulen,
@@ -870,7 +873,7 @@ __db_get_proc(
Db *dbp;
DbTxn *txnp;
ct_entry *dbp_ctp, *txnp_ctp;
- int key_alloc, bulk_alloc, ret;
+ int ret;
void *tmpdata;
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
@@ -881,8 +884,9 @@ __db_get_proc(
} else
txnp = NULL;
+ replyp->keydata.keydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
- bulk_alloc = 0;
/* Set up key and data */
Dbt key(keydata, keysize);
@@ -909,7 +913,6 @@ __db_get_proc(
if (ret != 0)
goto err;
data.set_data(tmpdata);
- bulk_alloc = 1;
}
dataflags |= DB_DBT_USERMEM;
} else
@@ -934,18 +937,11 @@ __db_get_proc(
/*
* Key
*/
- key_alloc = 0;
if (key.get_data() == keydata) {
ret = __os_umalloc(dbp->get_DB()->dbenv,
key.get_size(), &replyp->keydata.keydata_val);
- if (ret != 0) {
- __os_ufree(
- dbp->get_DB()->dbenv, key.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, data.get_data());
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->keydata.keydata_val,
key.get_data(), key.get_size());
} else
@@ -959,29 +955,25 @@ __db_get_proc(
if (data.get_data() == datadata) {
ret = __os_umalloc(dbp->get_DB()->dbenv,
data.get_size(), &replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(
- dbp->get_DB()->dbenv, key.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, data.get_data());
- if (key_alloc)
- __os_ufree(dbp->get_DB()->dbenv,
- replyp->keydata.keydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.get_data(),
data.get_size());
} else
replyp->datadata.datadata_val = (char *)data.get_data();
replyp->datadata.datadata_len = data.get_size();
} else {
-err: replyp->keydata.keydata_val = NULL;
+err: FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ key.get_data(), keydata);
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ data.get_data(), datadata);
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ replyp->keydata.keydata_val, key.get_data());
+ replyp->keydata.keydata_val = NULL;
replyp->keydata.keydata_len = 0;
replyp->datadata.datadata_val = NULL;
replyp->datadata.datadata_len = 0;
*freep = 0;
- if (bulk_alloc)
- __os_ufree(dbp->get_DB()->dbenv, data.get_data());
}
replyp->status = ret;
return;
@@ -989,7 +981,7 @@ err: replyp->keydata.keydata_val = NULL;
extern "C" void
__db_get_h_ffactor_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_h_ffactor_reply *replyp)
{
Db *dbp;
@@ -1002,10 +994,10 @@ __db_get_h_ffactor_proc(
}
extern "C" void
-__db_h_ffactor_proc(
- long dbpcl_id,
+__db_set_h_ffactor_proc(
+ u_int dbpcl_id,
u_int32_t ffactor,
- __db_h_ffactor_reply *replyp)
+ __db_set_h_ffactor_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1022,7 +1014,7 @@ __db_h_ffactor_proc(
extern "C" void
__db_get_h_nelem_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_h_nelem_reply *replyp)
{
Db *dbp;
@@ -1035,10 +1027,10 @@ __db_get_h_nelem_proc(
}
extern "C" void
-__db_h_nelem_proc(
- long dbpcl_id,
+__db_set_h_nelem_proc(
+ u_int dbpcl_id,
u_int32_t nelem,
- __db_h_nelem_reply *replyp)
+ __db_set_h_nelem_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1055,8 +1047,8 @@ __db_h_nelem_proc(
extern "C" void
__db_key_range_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t keydlen,
u_int32_t keydoff,
u_int32_t keyulen,
@@ -1098,7 +1090,7 @@ __db_key_range_proc(
extern "C" void
__db_get_lorder_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_lorder_reply *replyp)
{
Db *dbp;
@@ -1111,10 +1103,10 @@ __db_get_lorder_proc(
}
extern "C" void
-__db_lorder_proc(
- long dbpcl_id,
+__db_set_lorder_proc(
+ u_int dbpcl_id,
u_int32_t lorder,
- __db_lorder_reply *replyp)
+ __db_set_lorder_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1130,9 +1122,9 @@ __db_lorder_proc(
}
extern "C" void
-__db_get_name_proc(
- long dbpcl_id,
- __db_get_name_reply *replyp)
+__db_get_dbname_proc(
+ u_int dbpcl_id,
+ __db_get_dbname_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1146,7 +1138,7 @@ __db_get_name_proc(
extern "C" void
__db_get_open_flags_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_open_flags_reply *replyp)
{
Db *dbp;
@@ -1160,8 +1152,8 @@ __db_get_open_flags_proc(
extern "C" void
__db_open_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
char *name,
char *subdb,
u_int32_t type,
@@ -1237,7 +1229,7 @@ out:
extern "C" void
__db_get_pagesize_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_pagesize_reply *replyp)
{
Db *dbp;
@@ -1250,10 +1242,10 @@ __db_get_pagesize_proc(
}
extern "C" void
-__db_pagesize_proc(
- long dbpcl_id,
+__db_set_pagesize_proc(
+ u_int dbpcl_id,
u_int32_t pagesize,
- __db_pagesize_reply *replyp)
+ __db_set_pagesize_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1270,8 +1262,8 @@ __db_pagesize_proc(
extern "C" void
__db_pget_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t skeydlen,
u_int32_t skeydoff,
u_int32_t skeyulen,
@@ -1297,7 +1289,7 @@ __db_pget_proc(
Db *dbp;
DbTxn *txnp;
ct_entry *dbp_ctp, *txnp_ctp;
- int key_alloc, ret;
+ int ret;
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
dbp = (Db *)dbp_ctp->ct_anyp;
@@ -1307,6 +1299,9 @@ __db_pget_proc(
} else
txnp = NULL;
+ replyp->skeydata.skeydata_val = NULL;
+ replyp->pkeydata.pkeydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
/*
@@ -1349,20 +1344,11 @@ __db_pget_proc(
/*
* Key
*/
- key_alloc = 0;
if (skey.get_data() == skeydata) {
ret = __os_umalloc(dbp->get_DB()->dbenv,
skey.get_size(), &replyp->skeydata.skeydata_val);
- if (ret != 0) {
- __os_ufree(
- dbp->get_DB()->dbenv, skey.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, pkey.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, data.get_data());
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->skeydata.skeydata_val, skey.get_data(),
skey.get_size());
} else
@@ -1376,25 +1362,8 @@ __db_pget_proc(
if (pkey.get_data() == pkeydata) {
ret = __os_umalloc(dbp->get_DB()->dbenv,
pkey.get_size(), &replyp->pkeydata.pkeydata_val);
- if (ret != 0) {
- __os_ufree(
- dbp->get_DB()->dbenv, skey.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, pkey.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, data.get_data());
- if (key_alloc)
- __os_ufree(dbp->get_DB()->dbenv,
- replyp->skeydata.skeydata_val);
+ if (ret != 0)
goto err;
- }
- /*
- * We can set it to 2, because they cannot send the
- * pkey over without sending the skey over too.
- * So if they did send a pkey, they must have sent
- * the skey as well.
- */
- key_alloc = 2;
memcpy(replyp->pkeydata.pkeydata_val, pkey.get_data(),
pkey.get_size());
} else
@@ -1407,33 +1376,27 @@ __db_pget_proc(
if (data.get_data() == datadata) {
ret = __os_umalloc(dbp->get_DB()->dbenv,
data.get_size(), &replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(
- dbp->get_DB()->dbenv, skey.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, pkey.get_data());
- __os_ufree(
- dbp->get_DB()->dbenv, data.get_data());
- /*
- * If key_alloc is 1, just skey needs to be
- * freed, if key_alloc is 2, both skey and pkey
- * need to be freed.
- */
- if (key_alloc--)
- __os_ufree(dbp->get_DB()->dbenv,
- replyp->skeydata.skeydata_val);
- if (key_alloc)
- __os_ufree(dbp->get_DB()->dbenv,
- replyp->pkeydata.pkeydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.get_data(),
data.get_size());
} else
replyp->datadata.datadata_val = (char *)data.get_data();
replyp->datadata.datadata_len = data.get_size();
} else {
-err: replyp->skeydata.skeydata_val = NULL;
+err: FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ skey.get_data(), skeydata);
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ pkey.get_data(), pkeydata);
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ data.get_data(), datadata);
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ replyp->skeydata.skeydata_val, skey.get_data());
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ replyp->pkeydata.pkeydata_val, pkey.get_data());
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ replyp->datadata.datadata_val, data.get_data());
+ replyp->skeydata.skeydata_val = NULL;
replyp->skeydata.skeydata_len = 0;
replyp->pkeydata.pkeydata_val = NULL;
replyp->pkeydata.pkeydata_len = 0;
@@ -1447,8 +1410,8 @@ err: replyp->skeydata.skeydata_val = NULL;
extern "C" void
__db_put_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t keydlen,
u_int32_t keydoff,
u_int32_t keyulen,
@@ -1478,6 +1441,7 @@ __db_put_proc(
} else
txnp = NULL;
+ replyp->keydata.keydata_val = NULL;
*freep = 0;
/* Set up key and data */
@@ -1515,11 +1479,8 @@ __db_put_proc(
if (key.get_data() == keydata) {
ret = __os_umalloc(dbp->get_DB()->dbenv,
key.get_size(), &replyp->keydata.keydata_val);
- if (ret != 0) {
- __os_ufree(
- dbp->get_DB()->dbenv, key.get_data());
+ if (ret != 0)
goto err;
- }
memcpy(replyp->keydata.keydata_val,
key.get_data(), key.get_size());
} else
@@ -1527,7 +1488,11 @@ __db_put_proc(
replyp->keydata.keydata_len = key.get_size();
} else {
-err: replyp->keydata.keydata_val = NULL;
+err: FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ key.get_data(), keydata);
+ FREE_IF_CHANGED(dbp->get_DB()->dbenv,
+ replyp->keydata.keydata_val, key.get_data());
+ replyp->keydata.keydata_val = NULL;
replyp->keydata.keydata_len = 0;
*freep = 0;
}
@@ -1537,7 +1502,7 @@ err: replyp->keydata.keydata_val = NULL;
extern "C" void
__db_get_re_delim_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_re_delim_reply *replyp)
{
Db *dbp;
@@ -1550,10 +1515,10 @@ __db_get_re_delim_proc(
}
extern "C" void
-__db_re_delim_proc(
- long dbpcl_id,
+__db_set_re_delim_proc(
+ u_int dbpcl_id,
u_int32_t delim,
- __db_re_delim_reply *replyp)
+ __db_set_re_delim_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1570,7 +1535,7 @@ __db_re_delim_proc(
extern "C" void
__db_get_re_len_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_re_len_reply *replyp)
{
Db *dbp;
@@ -1583,10 +1548,10 @@ __db_get_re_len_proc(
}
extern "C" void
-__db_re_len_proc(
- long dbpcl_id,
+__db_set_re_len_proc(
+ u_int dbpcl_id,
u_int32_t len,
- __db_re_len_reply *replyp)
+ __db_set_re_len_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1603,7 +1568,7 @@ __db_re_len_proc(
void
__db_get_re_pad_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
__db_get_re_pad_reply *replyp)
{
Db *dbp;
@@ -1616,10 +1581,10 @@ __db_get_re_pad_proc(
}
extern "C" void
-__db_re_pad_proc(
- long dbpcl_id,
+__db_set_re_pad_proc(
+ u_int dbpcl_id,
u_int32_t pad,
- __db_re_pad_reply *replyp)
+ __db_set_re_pad_reply *replyp)
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1636,7 +1601,7 @@ __db_re_pad_proc(
extern "C" void
__db_remove_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
char *name,
char *subdb,
u_int32_t flags,
@@ -1658,7 +1623,7 @@ __db_remove_proc(
extern "C" void
__db_rename_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
char *name,
char *subdb,
char *newname,
@@ -1681,8 +1646,8 @@ __db_rename_proc(
extern "C" void
__db_stat_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t flags,
__db_stat_reply *replyp,
int * freep)
@@ -1742,7 +1707,7 @@ out:
extern "C" void
__db_sync_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
u_int32_t flags,
__db_sync_reply *replyp)
{
@@ -1761,8 +1726,8 @@ __db_sync_proc(
extern "C" void
__db_truncate_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t flags,
__db_truncate_reply *replyp)
{
@@ -1789,8 +1754,8 @@ __db_truncate_proc(
extern "C" void
__db_cursor_proc(
- long dbpcl_id,
- long txnpcl_id,
+ u_int dbpcl_id,
+ u_int txnpcl_id,
u_int32_t flags,
__db_cursor_reply *replyp)
{
@@ -1831,7 +1796,7 @@ __db_cursor_proc(
extern "C" void
__db_join_proc(
- long dbpcl_id,
+ u_int dbpcl_id,
u_int32_t *curs,
u_int32_t curslen,
u_int32_t flags,
@@ -1865,7 +1830,7 @@ __db_join_proc(
* the same transaction, so just check the first.
*/
ctp = get_tableent(*curs);
- DB_ASSERT(ctp->ct_type == CT_CURSOR);
+ DB_ASSERT(dbp->get_DB()->dbenv, ctp->ct_type == CT_CURSOR);
/*
* If we are using a transaction, set the join activity timer
* to point to the parent transaction.
@@ -1888,7 +1853,7 @@ __db_join_proc(
* we know they are part of a join list and we can distinguish
* them and later restore them when the join cursor is closed.
*/
- DB_ASSERT(ctp->ct_type == CT_CURSOR);
+ DB_ASSERT(dbp->get_DB()->dbenv, ctp->ct_type == CT_CURSOR);
ctp->ct_type |= CT_JOIN;
ctp->ct_origp = ctp->ct_activep;
/*
@@ -1929,9 +1894,9 @@ out:
}
extern "C" void
-__dbc_close_proc(
- long dbccl_id,
- __dbc_close_reply *replyp)
+__dbc_c_close_proc(
+ u_int dbccl_id,
+ __dbc_c_close_reply *replyp)
{
ct_entry *dbc_ctp;
@@ -1941,10 +1906,10 @@ __dbc_close_proc(
}
extern "C" void
-__dbc_count_proc(
- long dbccl_id,
+__dbc_c_count_proc(
+ u_int dbccl_id,
u_int32_t flags,
- __dbc_count_reply *replyp)
+ __dbc_c_count_reply *replyp)
{
Dbc *dbc;
ct_entry *dbc_ctp;
@@ -1962,10 +1927,10 @@ __dbc_count_proc(
}
extern "C" void
-__dbc_del_proc(
- long dbccl_id,
+__dbc_c_del_proc(
+ u_int dbccl_id,
u_int32_t flags,
- __dbc_del_reply *replyp)
+ __dbc_c_del_reply *replyp)
{
Dbc *dbc;
ct_entry *dbc_ctp;
@@ -1981,10 +1946,10 @@ __dbc_del_proc(
}
extern "C" void
-__dbc_dup_proc(
- long dbccl_id,
+__dbc_c_dup_proc(
+ u_int dbccl_id,
u_int32_t flags,
- __dbc_dup_reply *replyp)
+ __dbc_c_dup_reply *replyp)
{
Dbc *dbc, *newdbc;
ct_entry *dbc_ctp, *new_ctp;
@@ -2018,8 +1983,8 @@ __dbc_dup_proc(
}
extern "C" void
-__dbc_get_proc(
- long dbccl_id,
+__dbc_c_get_proc(
+ u_int dbccl_id,
u_int32_t keydlen,
u_int32_t keydoff,
u_int32_t keyulen,
@@ -2033,21 +1998,22 @@ __dbc_get_proc(
void *datadata,
u_int32_t datasize,
u_int32_t flags,
- __dbc_get_reply *replyp,
+ __dbc_c_get_reply *replyp,
int * freep)
{
Dbc *dbc;
DbEnv *dbenv;
ct_entry *dbc_ctp;
- int key_alloc, bulk_alloc, ret;
+ int ret;
void *tmpdata;
ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR);
dbc = (Dbc *)dbc_ctp->ct_anyp;
dbenv = DbEnv::get_DbEnv(((DBC *)dbc)->dbp->dbenv);
+ replyp->keydata.keydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
- bulk_alloc = 0;
/* Set up key and data */
Dbt key(keydata, keysize);
@@ -2068,7 +2034,6 @@ __dbc_get_proc(
if (ret != 0)
goto err;
data.set_data(tmpdata);
- bulk_alloc = 1;
}
dataflags |= DB_DBT_USERMEM;
} else
@@ -2094,17 +2059,11 @@ __dbc_get_proc(
/*
* Key
*/
- key_alloc = 0;
if (key.get_data() == keydata) {
ret = __os_umalloc(dbenv->get_DB_ENV(), key.get_size(),
&replyp->keydata.keydata_val);
- if (ret != 0) {
- __os_ufree(dbenv->get_DB_ENV(), key.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), data.get_data());
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->keydata.keydata_val,
key.get_data(), key.get_size());
} else
@@ -2118,36 +2077,35 @@ __dbc_get_proc(
if (data.get_data() == datadata) {
ret = __os_umalloc(dbenv->get_DB_ENV(), data.get_size(),
&replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(dbenv->get_DB_ENV(), key.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), data.get_data());
- if (key_alloc)
- __os_ufree(dbenv->get_DB_ENV(),
- replyp->keydata.keydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.get_data(),
data.get_size());
} else
replyp->datadata.datadata_val = (char *)data.get_data();
replyp->datadata.datadata_len = data.get_size();
} else {
-err: replyp->keydata.keydata_val = NULL;
+err: FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ key.get_data(), keydata);
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ data.get_data(), datadata);
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ replyp->keydata.keydata_val, key.get_data());
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ replyp->datadata.datadata_val, data.get_data());
+ replyp->keydata.keydata_val = NULL;
replyp->keydata.keydata_len = 0;
replyp->datadata.datadata_val = NULL;
replyp->datadata.datadata_len = 0;
*freep = 0;
- if (bulk_alloc)
- __os_ufree(dbenv->get_DB_ENV(), data.get_data());
}
replyp->status = ret;
return;
}
extern "C" void
-__dbc_pget_proc(
- long dbccl_id,
+__dbc_c_pget_proc(
+ u_int dbccl_id,
u_int32_t skeydlen,
u_int32_t skeydoff,
u_int32_t skeyulen,
@@ -2167,18 +2125,21 @@ __dbc_pget_proc(
void *datadata,
u_int32_t datasize,
u_int32_t flags,
- __dbc_pget_reply *replyp,
+ __dbc_c_pget_reply *replyp,
int * freep)
{
Dbc *dbc;
DbEnv *dbenv;
ct_entry *dbc_ctp;
- int key_alloc, ret;
+ int ret;
ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR);
dbc = (Dbc *)dbc_ctp->ct_anyp;
dbenv = DbEnv::get_DbEnv(((DBC *)dbc)->dbp->dbenv);
+ replyp->skeydata.skeydata_val = NULL;
+ replyp->pkeydata.pkeydata_val = NULL;
+ replyp->datadata.datadata_val = NULL;
*freep = 0;
/*
@@ -2221,20 +2182,11 @@ __dbc_pget_proc(
/*
* Key
*/
- key_alloc = 0;
if (skey.get_data() == skeydata) {
ret = __os_umalloc(dbenv->get_DB_ENV(),
skey.get_size(), &replyp->skeydata.skeydata_val);
- if (ret != 0) {
- __os_ufree(
- dbenv->get_DB_ENV(), skey.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), pkey.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), data.get_data());
+ if (ret != 0)
goto err;
- }
- key_alloc = 1;
memcpy(replyp->skeydata.skeydata_val, skey.get_data(),
skey.get_size());
} else
@@ -2247,25 +2199,8 @@ __dbc_pget_proc(
if (pkey.get_data() == pkeydata) {
ret = __os_umalloc(dbenv->get_DB_ENV(),
pkey.get_size(), &replyp->pkeydata.pkeydata_val);
- if (ret != 0) {
- __os_ufree(
- dbenv->get_DB_ENV(), skey.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), pkey.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), data.get_data());
- if (key_alloc)
- __os_ufree(dbenv->get_DB_ENV(),
- replyp->skeydata.skeydata_val);
+ if (ret != 0)
goto err;
- }
- /*
- * We can set it to 2, because they cannot send the
- * pkey over without sending the skey over too.
- * So if they did send a pkey, they must have sent
- * the skey as well.
- */
- key_alloc = 2;
memcpy(replyp->pkeydata.pkeydata_val, pkey.get_data(),
pkey.get_size());
} else
@@ -2278,33 +2213,27 @@ __dbc_pget_proc(
if (data.get_data() == datadata) {
ret = __os_umalloc(dbenv->get_DB_ENV(),
data.get_size(), &replyp->datadata.datadata_val);
- if (ret != 0) {
- __os_ufree(
- dbenv->get_DB_ENV(), skey.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), pkey.get_data());
- __os_ufree(
- dbenv->get_DB_ENV(), data.get_data());
- /*
- * If key_alloc is 1, just skey needs to be
- * freed, if key_alloc is 2, both skey and pkey
- * need to be freed.
- */
- if (key_alloc--)
- __os_ufree(dbenv->get_DB_ENV(),
- replyp->skeydata.skeydata_val);
- if (key_alloc)
- __os_ufree(dbenv->get_DB_ENV(),
- replyp->pkeydata.pkeydata_val);
+ if (ret != 0)
goto err;
- }
memcpy(replyp->datadata.datadata_val, data.get_data(),
data.get_size());
} else
replyp->datadata.datadata_val = (char *)data.get_data();
replyp->datadata.datadata_len = data.get_size();
} else {
-err: replyp->skeydata.skeydata_val = NULL;
+err: FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ skey.get_data(), skeydata);
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ pkey.get_data(), pkeydata);
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ data.get_data(), datadata);
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ replyp->skeydata.skeydata_val, skey.get_data());
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ replyp->pkeydata.pkeydata_val, pkey.get_data());
+ FREE_IF_CHANGED(dbenv->get_DB_ENV(),
+ replyp->datadata.datadata_val, data.get_data());
+ replyp->skeydata.skeydata_val = NULL;
replyp->skeydata.skeydata_len = 0;
replyp->pkeydata.pkeydata_val = NULL;
replyp->pkeydata.pkeydata_len = 0;
@@ -2317,8 +2246,8 @@ err: replyp->skeydata.skeydata_val = NULL;
}
extern "C" void
-__dbc_put_proc(
- long dbccl_id,
+__dbc_c_put_proc(
+ u_int dbccl_id,
u_int32_t keydlen,
u_int32_t keydoff,
u_int32_t keyulen,
@@ -2332,7 +2261,7 @@ __dbc_put_proc(
void *datadata,
u_int32_t datasize,
u_int32_t flags,
- __dbc_put_reply *replyp,
+ __dbc_c_put_reply *replyp,
int * freep)
{
Db *dbp;
diff --git a/db/rpc_server/cxx/db_server_cxxutil.cpp b/db/rpc_server/cxx/db_server_cxxutil.cpp
index d5aacdc0f..13083dfd4 100644
--- a/db/rpc_server/cxx/db_server_cxxutil.cpp
+++ b/db/rpc_server/cxx/db_server_cxxutil.cpp
@@ -1,42 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: db_server_cxxutil.cpp,v 1.17 2004/09/22 17:30:13 bostic Exp $
+ * $Id: db_server_cxxutil.cpp,v 12.6 2006/08/24 14:46:30 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 <rpc/rpc.h>
-
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#endif
-
-#include "db_server.h"
-
#include "db_int.h"
#include "db_cxx.h"
+#include "db_server.h"
#include "dbinc_auto/clib_ext.h"
extern "C" {
@@ -318,7 +293,7 @@ __dbsrv_timeout(int force)
if (to < t || force) {
if (__dbsrv_verbose)
printf("Timing out env id %ld\n", ctp->ct_id);
- (void)__dbenv_close_int(ctp->ct_id, 0, 1);
+ (void)__env_close_int(ctp->ct_id, 0, 1);
/*
* If we timed out an env, we may have closed
* all sorts of ctp's (maybe even all of them.
@@ -544,7 +519,7 @@ __db_close_int(long id, u_int32_t flags)
ctp = get_tableent(id);
if (ctp == NULL)
return (DB_NOSERVER_ID);
- DB_ASSERT(ctp->ct_type == CT_DB);
+ DB_ASSERT(NULL, ctp->ct_type == CT_DB);
if (__dbsrv_verbose && ctp->ct_refcount != 1)
printf("Deref'ing dbp id %ld, refcount %d\n",
id, ctp->ct_refcount);
@@ -593,7 +568,7 @@ __dbc_close_int(ct_entry *dbc_ctp)
}
extern "C" int
-__dbenv_close_int(long id, u_int32_t flags, int force)
+__env_close_int(long id, u_int32_t flags, int force)
{
DbEnv *dbenv;
int ret;
@@ -603,7 +578,7 @@ __dbenv_close_int(long id, u_int32_t flags, int force)
ctp = get_tableent(id);
if (ctp == NULL)
return (DB_NOSERVER_ID);
- DB_ASSERT(ctp->ct_type == CT_ENV);
+ DB_ASSERT(NULL, ctp->ct_type == CT_ENV);
if (__dbsrv_verbose && ctp->ct_refcount != 1)
printf("Deref'ing env id %ld, refcount %d\n",
id, ctp->ct_refcount);
diff --git a/db/rpc_server/db_server.x b/db/rpc_server/db_server.x
index 26b8de8e6..322582181 100644
--- a/db/rpc_server/db_server.x
+++ b/db/rpc_server/db_server.x
@@ -1,27 +1,23 @@
/* Do not edit: automatically built by gen_rpc.awk. */
-struct __env_get_cachesize_msg {
- unsigned int dbenvcl_id;
+struct __env_create_msg {
+ unsigned int timeout;
};
-struct __env_get_cachesize_reply {
- /* num return vars: 3 */
+struct __env_create_reply {
+ /* num return vars: 1 */
int status;
- unsigned int gbytes;
- unsigned int bytes;
- unsigned int ncache;
+ unsigned int envcl_id;
};
-struct __env_cachesize_msg {
+struct __env_cdsgroup_begin_msg {
unsigned int dbenvcl_id;
- unsigned int gbytes;
- unsigned int bytes;
- unsigned int ncache;
};
-struct __env_cachesize_reply {
- /* num return vars: 0 */
+struct __env_cdsgroup_begin_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int txnidcl_id;
};
struct __env_close_msg {
@@ -34,16 +30,6 @@ struct __env_close_reply {
int status;
};
-struct __env_create_msg {
- unsigned int timeout;
-};
-
-struct __env_create_reply {
- /* num return vars: 1 */
- int status;
- unsigned int envcl_id;
-};
-
struct __env_dbremove_msg {
unsigned int dbenvcl_id;
unsigned int txnpcl_id;
@@ -71,25 +57,26 @@ struct __env_dbrename_reply {
int status;
};
-struct __env_get_encrypt_flags_msg {
+struct __env_get_cachesize_msg {
unsigned int dbenvcl_id;
};
-struct __env_get_encrypt_flags_reply {
- /* num return vars: 1 */
+struct __env_get_cachesize_reply {
+ /* num return vars: 3 */
int status;
- unsigned int flags;
+ unsigned int gbytes;
+ unsigned int bytes;
+ unsigned int ncache;
};
-struct __env_encrypt_msg {
+struct __env_get_encrypt_flags_msg {
unsigned int dbenvcl_id;
- string passwd<>;
- unsigned int flags;
};
-struct __env_encrypt_reply {
- /* num return vars: 0 */
+struct __env_get_encrypt_flags_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int flags;
};
struct __env_get_flags_msg {
@@ -102,17 +89,6 @@ struct __env_get_flags_reply {
unsigned int flags;
};
-struct __env_flags_msg {
- unsigned int dbenvcl_id;
- unsigned int flags;
- unsigned int onoff;
-};
-
-struct __env_flags_reply {
- /* num return vars: 0 */
- int status;
-};
-
struct __env_get_home_msg {
unsigned int dbenvcl_id;
};
@@ -157,64 +133,59 @@ struct __env_remove_reply {
int status;
};
-struct __txn_abort_msg {
- unsigned int txnpcl_id;
+struct __env_set_cachesize_msg {
+ unsigned int dbenvcl_id;
+ unsigned int gbytes;
+ unsigned int bytes;
+ unsigned int ncache;
};
-struct __txn_abort_reply {
+struct __env_set_cachesize_reply {
/* num return vars: 0 */
int status;
};
-struct __txn_begin_msg {
+struct __env_set_encrypt_msg {
unsigned int dbenvcl_id;
- unsigned int parentcl_id;
- unsigned int flags;
-};
-
-struct __txn_begin_reply {
- /* num return vars: 1 */
- int status;
- unsigned int txnidcl_id;
-};
-
-struct __txn_commit_msg {
- unsigned int txnpcl_id;
+ string passwd<>;
unsigned int flags;
};
-struct __txn_commit_reply {
+struct __env_set_encrypt_reply {
/* num return vars: 0 */
int status;
};
-struct __txn_discard_msg {
- unsigned int txnpcl_id;
+struct __env_set_flags_msg {
+ unsigned int dbenvcl_id;
unsigned int flags;
+ unsigned int onoff;
};
-struct __txn_discard_reply {
+struct __env_set_flags_reply {
/* num return vars: 0 */
int status;
};
-struct __txn_prepare_msg {
- unsigned int txnpcl_id;
- opaque gid[128];
+struct __env_txn_begin_msg {
+ unsigned int dbenvcl_id;
+ unsigned int parentcl_id;
+ unsigned int flags;
};
-struct __txn_prepare_reply {
- /* num return vars: 0 */
+struct __env_txn_begin_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int txnidcl_id;
};
-struct __txn_recover_msg {
+struct __env_txn_recover_msg {
unsigned int dbenvcl_id;
unsigned int count;
unsigned int flags;
};
-struct __txn_recover_reply {
+struct __env_txn_recover_reply {
/* num return vars: 3 */
int status;
unsigned int txn<>;
@@ -222,44 +193,25 @@ struct __txn_recover_reply {
unsigned int retcount;
};
-struct __db_associate_msg {
- unsigned int dbpcl_id;
- unsigned int txnpcl_id;
- unsigned int sdbpcl_id;
+struct __db_create_msg {
+ unsigned int dbenvcl_id;
unsigned int flags;
};
-struct __db_associate_reply {
- /* num return vars: 0 */
- int status;
-};
-
-struct __db_bt_maxkey_msg {
- unsigned int dbpcl_id;
- unsigned int maxkey;
-};
-
-struct __db_bt_maxkey_reply {
- /* num return vars: 0 */
- int status;
-};
-
-struct __db_get_bt_minkey_msg {
- unsigned int dbpcl_id;
-};
-
-struct __db_get_bt_minkey_reply {
+struct __db_create_reply {
/* num return vars: 1 */
int status;
- unsigned int minkey;
+ unsigned int dbcl_id;
};
-struct __db_bt_minkey_msg {
+struct __db_associate_msg {
unsigned int dbpcl_id;
- unsigned int minkey;
+ unsigned int txnpcl_id;
+ unsigned int sdbpcl_id;
+ unsigned int flags;
};
-struct __db_bt_minkey_reply {
+struct __db_associate_reply {
/* num return vars: 0 */
int status;
};
@@ -274,15 +226,16 @@ struct __db_close_reply {
int status;
};
-struct __db_create_msg {
- unsigned int dbenvcl_id;
+struct __db_cursor_msg {
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
unsigned int flags;
};
-struct __db_create_reply {
+struct __db_cursor_reply {
/* num return vars: 1 */
int status;
- unsigned int dbcl_id;
+ unsigned int dbcidcl_id;
};
struct __db_del_msg {
@@ -301,45 +254,58 @@ struct __db_del_reply {
int status;
};
-struct __db_get_encrypt_flags_msg {
+struct __db_get_msg {
unsigned int dbpcl_id;
+ 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_encrypt_flags_reply {
- /* num return vars: 1 */
+struct __db_get_reply {
+ /* num return vars: 2 */
int status;
- unsigned int flags;
+ opaque keydata<>;
+ opaque datadata<>;
};
-struct __db_encrypt_msg {
+struct __db_get_bt_minkey_msg {
unsigned int dbpcl_id;
- string passwd<>;
- unsigned int flags;
};
-struct __db_encrypt_reply {
- /* num return vars: 0 */
+struct __db_get_bt_minkey_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int minkey;
};
-struct __db_get_extentsize_msg {
+struct __db_get_dbname_msg {
unsigned int dbpcl_id;
};
-struct __db_get_extentsize_reply {
- /* num return vars: 1 */
+struct __db_get_dbname_reply {
+ /* num return vars: 2 */
int status;
- unsigned int extentsize;
+ string filename<>;
+ string dbname<>;
};
-struct __db_extentsize_msg {
+struct __db_get_encrypt_flags_msg {
unsigned int dbpcl_id;
- unsigned int extentsize;
};
-struct __db_extentsize_reply {
- /* num return vars: 0 */
+struct __db_get_encrypt_flags_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int flags;
};
struct __db_get_flags_msg {
@@ -352,48 +318,34 @@ struct __db_get_flags_reply {
unsigned int flags;
};
-struct __db_flags_msg {
+struct __db_get_h_ffactor_msg {
unsigned int dbpcl_id;
- unsigned int flags;
};
-struct __db_flags_reply {
- /* num return vars: 0 */
+struct __db_get_h_ffactor_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int ffactor;
};
-struct __db_get_msg {
+struct __db_get_h_nelem_msg {
unsigned int dbpcl_id;
- 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 {
- /* num return vars: 2 */
+struct __db_get_h_nelem_reply {
+ /* num return vars: 1 */
int status;
- opaque keydata<>;
- opaque datadata<>;
+ unsigned int nelem;
};
-struct __db_get_name_msg {
+struct __db_get_lorder_msg {
unsigned int dbpcl_id;
};
-struct __db_get_name_reply {
- /* num return vars: 2 */
+struct __db_get_lorder_reply {
+ /* num return vars: 1 */
int status;
- string filename<>;
- string dbname<>;
+ unsigned int lorder;
};
struct __db_get_open_flags_msg {
@@ -406,83 +358,85 @@ struct __db_get_open_flags_reply {
unsigned int flags;
};
-struct __db_get_h_ffactor_msg {
+struct __db_get_pagesize_msg {
unsigned int dbpcl_id;
};
-struct __db_get_h_ffactor_reply {
+struct __db_get_pagesize_reply {
/* num return vars: 1 */
int status;
- unsigned int ffactor;
+ unsigned int pagesize;
};
-struct __db_h_ffactor_msg {
+struct __db_get_q_extentsize_msg {
unsigned int dbpcl_id;
- unsigned int ffactor;
};
-struct __db_h_ffactor_reply {
- /* num return vars: 0 */
+struct __db_get_q_extentsize_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int extentsize;
};
-struct __db_get_h_nelem_msg {
+struct __db_get_re_delim_msg {
unsigned int dbpcl_id;
};
-struct __db_get_h_nelem_reply {
+struct __db_get_re_delim_reply {
/* num return vars: 1 */
int status;
- unsigned int nelem;
+ unsigned int delim;
};
-struct __db_h_nelem_msg {
+struct __db_get_re_len_msg {
unsigned int dbpcl_id;
- unsigned int nelem;
};
-struct __db_h_nelem_reply {
- /* num return vars: 0 */
+struct __db_get_re_len_reply {
+ /* num return vars: 1 */
int status;
+ unsigned int len;
};
-struct __db_key_range_msg {
+struct __db_get_re_pad_msg {
unsigned int dbpcl_id;
- 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 {
- /* num return vars: 3 */
+struct __db_get_re_pad_reply {
+ /* num return vars: 1 */
int status;
- double less;
- double equal;
- double greater;
+ unsigned int pad;
};
-struct __db_get_lorder_msg {
+struct __db_join_msg {
unsigned int dbpcl_id;
+ unsigned int curs<>;
+ unsigned int flags;
};
-struct __db_get_lorder_reply {
+struct __db_join_reply {
/* num return vars: 1 */
int status;
- unsigned int lorder;
+ unsigned int dbcidcl_id;
};
-struct __db_lorder_msg {
+struct __db_key_range_msg {
unsigned int dbpcl_id;
- unsigned int lorder;
+ unsigned int txnpcl_id;
+ unsigned int keydlen;
+ unsigned int keydoff;
+ unsigned int keyulen;
+ unsigned int keyflags;
+ opaque keydata<>;
+ unsigned int flags;
};
-struct __db_lorder_reply {
- /* num return vars: 0 */
+struct __db_key_range_reply {
+ /* num return vars: 3 */
int status;
+ double less;
+ double equal;
+ double greater;
};
struct __db_open_msg {
@@ -503,26 +457,6 @@ struct __db_open_reply {
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 {
- unsigned int dbpcl_id;
- unsigned int pagesize;
-};
-
-struct __db_pagesize_reply {
- /* num return vars: 0 */
- int status;
-};
-
struct __db_pget_msg {
unsigned int dbpcl_id;
unsigned int txnpcl_id;
@@ -574,191 +508,218 @@ struct __db_put_reply {
opaque keydata<>;
};
-struct __db_get_re_delim_msg {
+struct __db_remove_msg {
unsigned int dbpcl_id;
+ string name<>;
+ string subdb<>;
+ unsigned int flags;
};
-struct __db_get_re_delim_reply {
- /* num return vars: 1 */
+struct __db_remove_reply {
+ /* num return vars: 0 */
int status;
- unsigned int delim;
};
-struct __db_re_delim_msg {
+struct __db_rename_msg {
unsigned int dbpcl_id;
- unsigned int delim;
+ string name<>;
+ string subdb<>;
+ string newname<>;
+ unsigned int flags;
};
-struct __db_re_delim_reply {
+struct __db_rename_reply {
/* num return vars: 0 */
int status;
};
-struct __db_get_re_len_msg {
+struct __db_set_bt_minkey_msg {
unsigned int dbpcl_id;
+ unsigned int minkey;
};
-struct __db_get_re_len_reply {
- /* num return vars: 1 */
+struct __db_set_bt_minkey_reply {
+ /* num return vars: 0 */
int status;
- unsigned int len;
};
-struct __db_re_len_msg {
+struct __db_set_encrypt_msg {
unsigned int dbpcl_id;
- unsigned int len;
+ string passwd<>;
+ unsigned int flags;
};
-struct __db_re_len_reply {
+struct __db_set_encrypt_reply {
/* num return vars: 0 */
int status;
};
-struct __db_re_pad_msg {
+struct __db_set_flags_msg {
unsigned int dbpcl_id;
- unsigned int pad;
+ unsigned int flags;
};
-struct __db_re_pad_reply {
+struct __db_set_flags_reply {
/* num return vars: 0 */
int status;
};
-struct __db_get_re_pad_msg {
+struct __db_set_h_ffactor_msg {
unsigned int dbpcl_id;
+ unsigned int ffactor;
};
-struct __db_get_re_pad_reply {
- /* num return vars: 1 */
+struct __db_set_h_ffactor_reply {
+ /* num return vars: 0 */
int status;
- unsigned int pad;
};
-struct __db_remove_msg {
+struct __db_set_h_nelem_msg {
unsigned int dbpcl_id;
- string name<>;
- string subdb<>;
- unsigned int flags;
+ unsigned int nelem;
};
-struct __db_remove_reply {
+struct __db_set_h_nelem_reply {
/* num return vars: 0 */
int status;
};
-struct __db_rename_msg {
+struct __db_set_lorder_msg {
unsigned int dbpcl_id;
- string name<>;
- string subdb<>;
- string newname<>;
- unsigned int flags;
+ unsigned int lorder;
};
-struct __db_rename_reply {
+struct __db_set_lorder_reply {
/* num return vars: 0 */
int status;
};
-struct __db_stat_msg {
+struct __db_set_pagesize_msg {
unsigned int dbpcl_id;
- unsigned int txnpcl_id;
- unsigned int flags;
+ unsigned int pagesize;
};
-struct __db_stat_reply {
- /* num return vars: 1 */
+struct __db_set_pagesize_reply {
+ /* num return vars: 0 */
int status;
- unsigned int stats<>;
};
-struct __db_sync_msg {
+struct __db_set_q_extentsize_msg {
unsigned int dbpcl_id;
- unsigned int flags;
+ unsigned int extentsize;
};
-struct __db_sync_reply {
+struct __db_set_q_extentsize_reply {
/* num return vars: 0 */
int status;
};
-struct __db_truncate_msg {
+struct __db_set_re_delim_msg {
+ unsigned int dbpcl_id;
+ unsigned int delim;
+};
+
+struct __db_set_re_delim_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_set_re_len_msg {
+ unsigned int dbpcl_id;
+ unsigned int len;
+};
+
+struct __db_set_re_len_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_set_re_pad_msg {
+ unsigned int dbpcl_id;
+ unsigned int pad;
+};
+
+struct __db_set_re_pad_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_stat_msg {
unsigned int dbpcl_id;
unsigned int txnpcl_id;
unsigned int flags;
};
-struct __db_truncate_reply {
+struct __db_stat_reply {
/* num return vars: 1 */
int status;
- unsigned int count;
+ unsigned int stats<>;
};
-struct __db_cursor_msg {
+struct __db_sync_msg {
unsigned int dbpcl_id;
- unsigned int txnpcl_id;
unsigned int flags;
};
-struct __db_cursor_reply {
- /* num return vars: 1 */
+struct __db_sync_reply {
+ /* num return vars: 0 */
int status;
- unsigned int dbcidcl_id;
};
-struct __db_join_msg {
+struct __db_truncate_msg {
unsigned int dbpcl_id;
- unsigned int curs<>;
+ unsigned int txnpcl_id;
unsigned int flags;
};
-struct __db_join_reply {
+struct __db_truncate_reply {
/* num return vars: 1 */
int status;
- unsigned int dbcidcl_id;
+ unsigned int count;
};
-struct __dbc_close_msg {
+struct __dbc_c_close_msg {
unsigned int dbccl_id;
};
-struct __dbc_close_reply {
+struct __dbc_c_close_reply {
/* num return vars: 0 */
int status;
};
-struct __dbc_count_msg {
+struct __dbc_c_count_msg {
unsigned int dbccl_id;
unsigned int flags;
};
-struct __dbc_count_reply {
+struct __dbc_c_count_reply {
/* num return vars: 1 */
int status;
unsigned int dupcount;
};
-struct __dbc_del_msg {
+struct __dbc_c_del_msg {
unsigned int dbccl_id;
unsigned int flags;
};
-struct __dbc_del_reply {
+struct __dbc_c_del_reply {
/* num return vars: 0 */
int status;
};
-struct __dbc_dup_msg {
+struct __dbc_c_dup_msg {
unsigned int dbccl_id;
unsigned int flags;
};
-struct __dbc_dup_reply {
+struct __dbc_c_dup_reply {
/* num return vars: 1 */
int status;
unsigned int dbcidcl_id;
};
-struct __dbc_get_msg {
+struct __dbc_c_get_msg {
unsigned int dbccl_id;
unsigned int keydlen;
unsigned int keydoff;
@@ -773,14 +734,14 @@ struct __dbc_get_msg {
unsigned int flags;
};
-struct __dbc_get_reply {
+struct __dbc_c_get_reply {
/* num return vars: 2 */
int status;
opaque keydata<>;
opaque datadata<>;
};
-struct __dbc_pget_msg {
+struct __dbc_c_pget_msg {
unsigned int dbccl_id;
unsigned int skeydlen;
unsigned int skeydoff;
@@ -800,7 +761,7 @@ struct __dbc_pget_msg {
unsigned int flags;
};
-struct __dbc_pget_reply {
+struct __dbc_c_pget_reply {
/* num return vars: 3 */
int status;
opaque skeydata<>;
@@ -808,7 +769,7 @@ struct __dbc_pget_reply {
opaque datadata<>;
};
-struct __dbc_put_msg {
+struct __dbc_c_put_msg {
unsigned int dbccl_id;
unsigned int keydlen;
unsigned int keydoff;
@@ -823,80 +784,119 @@ struct __dbc_put_msg {
unsigned int flags;
};
-struct __dbc_put_reply {
+struct __dbc_c_put_reply {
/* num return vars: 1 */
int status;
opaque keydata<>;
};
+
+struct __txn_abort_msg {
+ unsigned int txnpcl_id;
+};
+
+struct __txn_abort_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __txn_commit_msg {
+ unsigned int txnpcl_id;
+ unsigned int flags;
+};
+
+struct __txn_commit_reply {
+ /* 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;
+};
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_create_reply __DB_env_create(__env_create_msg) = 1;
+ __env_cdsgroup_begin_reply __DB_env_cdsgroup_begin(__env_cdsgroup_begin_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_dbremove_reply __DB_env_dbremove(__env_dbremove_msg) = 4;
+ __env_dbrename_reply __DB_env_dbrename(__env_dbrename_msg) = 5;
+ __env_get_cachesize_reply __DB_env_get_cachesize(__env_get_cachesize_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;
- } = 4003;
+ __env_get_flags_reply __DB_env_get_flags(__env_get_flags_msg) = 8;
+ __env_get_home_reply __DB_env_get_home(__env_get_home_msg) = 9;
+ __env_get_open_flags_reply __DB_env_get_open_flags(__env_get_open_flags_msg) = 10;
+ __env_open_reply __DB_env_open(__env_open_msg) = 11;
+ __env_remove_reply __DB_env_remove(__env_remove_msg) = 12;
+ __env_set_cachesize_reply __DB_env_set_cachesize(__env_set_cachesize_msg) = 13;
+ __env_set_encrypt_reply __DB_env_set_encrypt(__env_set_encrypt_msg) = 14;
+ __env_set_flags_reply __DB_env_set_flags(__env_set_flags_msg) = 15;
+ __env_txn_begin_reply __DB_env_txn_begin(__env_txn_begin_msg) = 16;
+ __env_txn_recover_reply __DB_env_txn_recover(__env_txn_recover_msg) = 17;
+ __db_create_reply __DB_db_create(__db_create_msg) = 18;
+ __db_associate_reply __DB_db_associate(__db_associate_msg) = 19;
+ __db_close_reply __DB_db_close(__db_close_msg) = 20;
+ __db_cursor_reply __DB_db_cursor(__db_cursor_msg) = 21;
+ __db_del_reply __DB_db_del(__db_del_msg) = 22;
+ __db_get_reply __DB_db_get(__db_get_msg) = 23;
+ __db_get_bt_minkey_reply __DB_db_get_bt_minkey(__db_get_bt_minkey_msg) = 24;
+ __db_get_dbname_reply __DB_db_get_dbname(__db_get_dbname_msg) = 25;
+ __db_get_encrypt_flags_reply __DB_db_get_encrypt_flags(__db_get_encrypt_flags_msg) = 26;
+ __db_get_flags_reply __DB_db_get_flags(__db_get_flags_msg) = 27;
+ __db_get_h_ffactor_reply __DB_db_get_h_ffactor(__db_get_h_ffactor_msg) = 28;
+ __db_get_h_nelem_reply __DB_db_get_h_nelem(__db_get_h_nelem_msg) = 29;
+ __db_get_lorder_reply __DB_db_get_lorder(__db_get_lorder_msg) = 30;
+ __db_get_open_flags_reply __DB_db_get_open_flags(__db_get_open_flags_msg) = 31;
+ __db_get_pagesize_reply __DB_db_get_pagesize(__db_get_pagesize_msg) = 32;
+ __db_get_q_extentsize_reply __DB_db_get_q_extentsize(__db_get_q_extentsize_msg) = 33;
+ __db_get_re_delim_reply __DB_db_get_re_delim(__db_get_re_delim_msg) = 34;
+ __db_get_re_len_reply __DB_db_get_re_len(__db_get_re_len_msg) = 35;
+ __db_get_re_pad_reply __DB_db_get_re_pad(__db_get_re_pad_msg) = 36;
+ __db_join_reply __DB_db_join(__db_join_msg) = 37;
+ __db_key_range_reply __DB_db_key_range(__db_key_range_msg) = 38;
+ __db_open_reply __DB_db_open(__db_open_msg) = 39;
+ __db_pget_reply __DB_db_pget(__db_pget_msg) = 40;
+ __db_put_reply __DB_db_put(__db_put_msg) = 41;
+ __db_remove_reply __DB_db_remove(__db_remove_msg) = 42;
+ __db_rename_reply __DB_db_rename(__db_rename_msg) = 43;
+ __db_set_bt_minkey_reply __DB_db_set_bt_minkey(__db_set_bt_minkey_msg) = 44;
+ __db_set_encrypt_reply __DB_db_set_encrypt(__db_set_encrypt_msg) = 45;
+ __db_set_flags_reply __DB_db_set_flags(__db_set_flags_msg) = 46;
+ __db_set_h_ffactor_reply __DB_db_set_h_ffactor(__db_set_h_ffactor_msg) = 47;
+ __db_set_h_nelem_reply __DB_db_set_h_nelem(__db_set_h_nelem_msg) = 48;
+ __db_set_lorder_reply __DB_db_set_lorder(__db_set_lorder_msg) = 49;
+ __db_set_pagesize_reply __DB_db_set_pagesize(__db_set_pagesize_msg) = 50;
+ __db_set_q_extentsize_reply __DB_db_set_q_extentsize(__db_set_q_extentsize_msg) = 51;
+ __db_set_re_delim_reply __DB_db_set_re_delim(__db_set_re_delim_msg) = 52;
+ __db_set_re_len_reply __DB_db_set_re_len(__db_set_re_len_msg) = 53;
+ __db_set_re_pad_reply __DB_db_set_re_pad(__db_set_re_pad_msg) = 54;
+ __db_stat_reply __DB_db_stat(__db_stat_msg) = 55;
+ __db_sync_reply __DB_db_sync(__db_sync_msg) = 56;
+ __db_truncate_reply __DB_db_truncate(__db_truncate_msg) = 57;
+ __dbc_c_close_reply __DB_dbc_c_close(__dbc_c_close_msg) = 58;
+ __dbc_c_count_reply __DB_dbc_c_count(__dbc_c_count_msg) = 59;
+ __dbc_c_del_reply __DB_dbc_c_del(__dbc_c_del_msg) = 60;
+ __dbc_c_dup_reply __DB_dbc_c_dup(__dbc_c_dup_msg) = 61;
+ __dbc_c_get_reply __DB_dbc_c_get(__dbc_c_get_msg) = 62;
+ __dbc_c_pget_reply __DB_dbc_c_pget(__dbc_c_pget_msg) = 63;
+ __dbc_c_put_reply __DB_dbc_c_put(__dbc_c_put_msg) = 64;
+ __txn_abort_reply __DB_txn_abort(__txn_abort_msg) = 65;
+ __txn_commit_reply __DB_txn_commit(__txn_commit_msg) = 66;
+ __txn_discard_reply __DB_txn_discard(__txn_discard_msg) = 67;
+ __txn_prepare_reply __DB_txn_prepare(__txn_prepare_msg) = 68;
+ } = 4005;
} = 351457;
diff --git a/db/rpc_server/rpc.src b/db/rpc_server/rpc.src
index fd6af9f96..ec834332a 100644
--- a/db/rpc_server/rpc.src
+++ b/db/rpc_server/rpc.src
@@ -1,19 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc.src,v 1.90 2004/07/15 19:54:11 sue Exp $
+# $Id: rpc.src,v 12.20 2006/09/11 15:52:44 bostic Exp $
#
# Syntax:
-# BEGIN function_name {CODE | RETCODE | NOFUNC}
+# BEGIN function_name {CODE | LINKONLY | RETCODE}
# 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.
-# NOFUNC: generate a client "unsupported function" with right args
-# Used for unsupported functions.
+# LINKONLY:
+# No code needs to be generated, the function is hand-coded.
#
# ARG {IGNORE | STRING | INT | DBT | LIST | ID | CONST} C-type varname
# IGNORE: not passed to server
@@ -48,52 +48,29 @@
# INT: integer from server
# ID: id from server stored in cl_id
# END function end.
-
-#
-# Environment functions
#
-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 CODE
-ARG ID DB_ENV * dbenv
-ARG INT u_int32_t flags
-END
-BEGIN env_create RETCODE
+# NOFUNC function_name prototype
+# Connect the method to an "unsupported function" error message.
+
+######################################################
+# DB_ENV handle create.
+######################################################
+BEGIN env_create RETCODE
ARG IGNORE DB_ENV * dbenv
ARG INT long timeout
RET ID long env
END
-BEGIN get_data_dirs NOFUNC
+######################################################
+# DB_ENV handle methods.
+######################################################
+BEGIN env_cdsgroup_begin RETCODE
ARG ID DB_ENV * dbenv
-ARG STRING const char *** dirpp
+ARG IGNORE DB_TXN ** txnpp
+RET ID long txnid
END
-BEGIN set_data_dir NOFUNC
+BEGIN env_close CODE
ARG ID DB_ENV * dbenv
-ARG STRING const char * dir
+ARG INT u_int32_t flags
END
BEGIN env_dbremove CODE
ARG ID DB_ENV * dbenv
@@ -110,250 +87,194 @@ 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
+LOCAL env_err
+LOCAL env_errx
+NOFUNC env_failchk DB_ENV *, u_int32_t
+NOFUNC env_fileid_reset DB_ENV *, const char *, u_int32_t
+BEGIN env_get_cachesize CODE
ARG ID DB_ENV * dbenv
-FUNCPROT void (*)(DB_ENV *, int, int)
-FUNCARG void (*func0) __P((DB_ENV *, int, int))
+ARET INT u_int32_t gbytes
+ARET INT u_int32_t bytes
+ARET INT int ncache
END
-BEGIN env_get_flags CODE
+NOFUNC env_get_data_dirs DB_ENV *, const char ***
+BEGIN env_get_encrypt_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 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 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 get_lg_max NOFUNC
-ARG ID DB_ENV * dbenv
-ARET INT u_int32_t max
-END
-BEGIN set_lg_max NOFUNC
+LOCAL env_get_errfile
+LOCAL env_get_errpfx
+BEGIN env_get_flags CODE
ARG ID DB_ENV * dbenv
-ARG INT u_int32_t max
-END
-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 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 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT u_int32_t max
-END
-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 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 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 get_mp_max_openfd NOFUNC
-ARG ID DB_ENV * dbenv
-ARET INT int nopen
-END
-BEGIN set_mp_max_openfd NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT int nopen
-END
-BEGIN get_mp_max_write NOFUNC
-ARG ID DB_ENV * dbenv
-ARET INT int nwrite
-ARET INT int nsleep
-END
-BEGIN set_mp_max_write 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
+ARET INT u_int32_t flags
END
-BEGIN env_get_home CODE
+BEGIN env_get_home CODE
ARG ID DB_ENV * dbenv
ARET STRING const char * home
END
+NOFUNC env_get_lg_bsize DB_ENV *, u_int32_t *
+NOFUNC env_get_lg_dir DB_ENV *, const char **
+NOFUNC env_get_lg_filemode DB_ENV *, int *
+NOFUNC env_get_lg_max DB_ENV *, u_int32_t *
+NOFUNC env_get_lg_regionmax DB_ENV *, u_int32_t *
+NOFUNC env_get_lk_conflicts DB_ENV *, const u_int8_t **, int *
+NOFUNC env_get_lk_detect DB_ENV *, u_int32_t *
+NOFUNC env_get_lk_max_lockers DB_ENV *, u_int32_t *
+NOFUNC env_get_lk_max_locks DB_ENV *, u_int32_t *
+NOFUNC env_get_lk_max_objects DB_ENV *, u_int32_t *
+NOFUNC env_get_mp_max_openfd DB_ENV *, int *
+NOFUNC env_get_mp_max_write DB_ENV *, int *, int *
+NOFUNC env_get_mp_mmapsize DB_ENV *, size_t *
+LOCAL env_get_msgfile
BEGIN env_get_open_flags CODE
ARG ID DB_ENV * dbenv
ARET INT u_int32_t flags
END
-BEGIN env_open RETCODE
+NOFUNC env_get_shm_key DB_ENV *, long *
+NOFUNC env_get_timeout DB_ENV *, db_timeout_t *, u_int32_t
+NOFUNC env_get_tmp_dir DB_ENV *, const char **
+NOFUNC env_get_tx_max DB_ENV *, u_int32_t *
+NOFUNC env_get_tx_timestamp DB_ENV *, time_t *
+NOFUNC env_get_verbose DB_ENV *, u_int32_t, int *
+LOCAL env_is_bigendian
+NOFUNC env_lock_detect DB_ENV *, u_int32_t, u_int32_t, int *
+NOFUNC env_lock_get DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *
+NOFUNC env_lock_id DB_ENV *, u_int32_t *
+NOFUNC env_lock_id_free DB_ENV *, u_int32_t
+NOFUNC env_lock_put DB_ENV *, DB_LOCK *
+NOFUNC env_lock_stat DB_ENV *, DB_LOCK_STAT **, u_int32_t
+NOFUNC env_lock_stat_print DB_ENV *, u_int32_t
+NOFUNC env_lock_vec DB_ENV *, u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **
+NOFUNC env_log_archive DB_ENV *, char ***, u_int32_t
+NOFUNC env_log_cursor DB_ENV *, DB_LOGC **, u_int32_t
+NOFUNC env_log_file DB_ENV *, const DB_LSN *, char *, size_t
+NOFUNC env_log_flush DB_ENV *, const DB_LSN *
+NOFUNC env_log_printf DB_ENV *, DB_TXN *, const char *, ...
+NOFUNC env_log_put DB_ENV *, DB_LSN *, const DBT *, u_int32_t
+NOFUNC env_log_stat DB_ENV *, DB_LOG_STAT **, u_int32_t
+NOFUNC env_log_stat_print DB_ENV *, u_int32_t
+NOFUNC env_lsn_reset DB_ENV *, const char *, u_int32_t
+NOFUNC env_memp_fcreate DB_ENV *, DB_MPOOLFILE **, u_int32_t
+NOFUNC env_memp_register DB_ENV *, int, int (*)(DB_ENV *, db_pgno_t, void *, DBT *), int (*)(DB_ENV *, db_pgno_t, void *, DBT *)
+NOFUNC env_memp_stat DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t
+NOFUNC env_memp_stat_print DB_ENV *, u_int32_t
+NOFUNC env_memp_sync DB_ENV *, DB_LSN *
+NOFUNC env_memp_trickle DB_ENV *, int, int *
+NOFUNC env_mutex_alloc DB_ENV *, u_int32_t, u_int32_t *
+NOFUNC env_mutex_free DB_ENV *, u_int32_t
+NOFUNC env_mutex_get_align DB_ENV *, u_int32_t *
+NOFUNC env_mutex_get_increment DB_ENV *, u_int32_t *
+NOFUNC env_mutex_get_max DB_ENV *, u_int32_t *
+NOFUNC env_mutex_get_tas_spins DB_ENV *, u_int32_t *
+NOFUNC env_mutex_lock DB_ENV *, u_int32_t
+NOFUNC env_mutex_set_align DB_ENV *, u_int32_t
+NOFUNC env_mutex_set_increment DB_ENV *, u_int32_t
+NOFUNC env_mutex_set_max DB_ENV *, u_int32_t
+NOFUNC env_mutex_set_tas_spins DB_ENV *, u_int32_t
+NOFUNC env_mutex_stat DB_ENV *, DB_MUTEX_STAT **, u_int32_t
+NOFUNC env_mutex_stat_print DB_ENV *, u_int32_t
+NOFUNC env_mutex_unlock DB_ENV *, u_int32_t
+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 NOFUNC
-ARG ID DB_ENV * dbenv
-FUNCPROT void (*)(DB_ENV *, int)
-FUNCARG void (*func0) __P((DB_ENV *, int))
-END
-BEGIN env_remove RETCODE
+BEGIN env_remove RETCODE
ARG ID DB_ENV * dbenv
ARG STRING const char * home
ARG INT u_int32_t flags
END
-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 get_tas_spins NOFUNC
-ARG ID DB_ENV * dbenv
-ARET INT u_int32_t tas_spins
-END
-BEGIN set_tas_spins NOFUNC
+NOFUNC env_rep_elect DB_ENV *, int, int, int *, u_int32_t
+NOFUNC env_rep_flush DB_ENV *
+NOFUNC env_rep_get_config DB_ENV *, u_int32_t, int *
+NOFUNC env_rep_get_limit DB_ENV *, u_int32_t *, u_int32_t *
+NOFUNC env_rep_get_nsites DB_ENV *, int *
+NOFUNC env_rep_get_priority DB_ENV *, int *
+NOFUNC env_rep_get_timeout DB_ENV *, int, db_timeout_t *
+NOFUNC env_rep_process_message DB_ENV *, DBT *, DBT *, int *, DB_LSN *
+NOFUNC env_rep_set_config DB_ENV *, u_int32_t, int
+NOFUNC env_rep_set_limit DB_ENV *, u_int32_t, u_int32_t
+NOFUNC env_rep_set_nsites DB_ENV *, int
+NOFUNC env_rep_set_priority DB_ENV *, int
+NOFUNC env_rep_set_timeout DB_ENV *, int, db_timeout_t
+NOFUNC env_rep_set_transport DB_ENV *, int, int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)
+NOFUNC env_rep_start DB_ENV *, DBT *, u_int32_t
+NOFUNC env_rep_stat DB_ENV *, DB_REP_STAT **, u_int32_t
+NOFUNC env_rep_stat_print DB_ENV *, u_int32_t
+NOFUNC env_rep_sync DB_ENV *, u_int32_t
+NOFUNC env_repmgr_add_remote_site DB_ENV *, const char *, u_int, int *, u_int32_t
+NOFUNC env_repmgr_get_ack_policy DB_ENV *, int *
+NOFUNC env_repmgr_set_ack_policy DB_ENV *, int
+NOFUNC env_repmgr_set_local_site DB_ENV *, const char *, u_int, u_int32_t
+NOFUNC env_repmgr_site_list DB_ENV *, u_int *, DB_REPMGR_SITE **
+NOFUNC env_repmgr_start DB_ENV *, int, u_int32_t
+NOFUNC env_set_alloc DB_ENV *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)
+NOFUNC env_set_app_dispatch DB_ENV *, int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)
+BEGIN env_set_cachesize CODE
ARG ID DB_ENV * dbenv
-ARG INT u_int32_t tas_spins
+ARG INT u_int32_t gbytes
+ARG INT u_int32_t bytes
+ARG INT int ncache
END
-BEGIN get_timeout NOFUNC
+NOFUNC env_set_data_dir DB_ENV *, const char *
+BEGIN env_set_encrypt CODE
ARG ID DB_ENV * dbenv
-ARET INT u_int32_t timeout
+ARG STRING const char * passwd
ARG INT u_int32_t flags
END
-BEGIN set_timeout NOFUNC
+LOCAL env_set_errcall
+LOCAL env_set_errfile
+LOCAL env_set_errpfx
+NOFUNC env_set_event_notify DB_ENV *, void (*)(DB_ENV *, u_int32_t, void *)
+NOFUNC env_set_feedback DB_ENV *, void (*)(DB_ENV *, int, int)
+BEGIN env_set_flags CODE
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 get_tx_max NOFUNC
-ARG ID DB_ENV * dbenv
-ARET INT u_int32_t max
-END
-BEGIN set_tx_max NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT u_int32_t max
-END
-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 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
END
-#
-# Transaction functions
-#
-BEGIN txn_abort RETCODE
-ARG ID DB_TXN * txnp
-END
-BEGIN txn_begin RETCODE
+NOFUNC env_set_intermediate_dir DB_ENV *, int, u_int32_t
+NOFUNC env_set_isalive DB_ENV *, int (*)(DB_ENV *, pid_t, db_threadid_t, u_int32_t)
+NOFUNC env_set_lg_bsize DB_ENV *, u_int32_t
+NOFUNC env_set_lg_dir DB_ENV *, const char *
+NOFUNC env_set_lg_filemode DB_ENV *, int
+NOFUNC env_set_lg_max DB_ENV *, u_int32_t
+NOFUNC env_set_lg_regionmax DB_ENV *, u_int32_t
+NOFUNC env_set_lk_conflicts DB_ENV *, u_int8_t *, int
+NOFUNC env_set_lk_detect DB_ENV *, u_int32_t
+NOFUNC env_set_lk_max_lockers DB_ENV *, u_int32_t
+NOFUNC env_set_lk_max_locks DB_ENV *, u_int32_t
+NOFUNC env_set_lk_max_objects DB_ENV *, u_int32_t
+NOFUNC env_set_mp_max_openfd DB_ENV *, int
+NOFUNC env_set_mp_max_write DB_ENV *, int, int
+NOFUNC env_set_mp_mmapsize DB_ENV *, size_t
+LOCAL env_set_msgcall
+LOCAL env_set_msgfile
+NOFUNC env_set_paniccall DB_ENV *, void (*)(DB_ENV *, int)
+NOFUNC env_set_rep_request DB_ENV *, u_int32_t, u_int32_t
+BEGIN env_set_rpc_server LINKONLY
+ARG ID DB_ENV * dbenv
+END
+NOFUNC env_set_shm_key DB_ENV *, long
+NOFUNC env_set_thread_count DB_ENV *, u_int32_t
+NOFUNC env_set_thread_id DB_ENV *, void (*)(DB_ENV *, pid_t *, db_threadid_t*)
+NOFUNC env_set_thread_id_string DB_ENV *, char *(*)(DB_ENV *, pid_t, db_threadid_t, char *)
+NOFUNC env_set_timeout DB_ENV *, u_int32_t, u_int32_t
+NOFUNC env_set_tmp_dir DB_ENV *, const char *
+NOFUNC env_set_tx_max DB_ENV *, u_int32_t
+NOFUNC env_set_tx_timestamp DB_ENV *, time_t *
+NOFUNC env_set_verbose DB_ENV *, u_int32_t, int
+NOFUNC env_stat_print DB_ENV *, u_int32_t
+BEGIN env_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 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_discard RETCODE
-ARG ID DB_TXN * txnp
-ARG INT u_int32_t flags
-END
-BEGIN txn_prepare CODE
-ARG ID DB_TXN * txnp
-ARG GID u_int8_t * gid
-END
-BEGIN txn_recover RETCODE
+NOFUNC env_txn_checkpoint DB_ENV *, u_int32_t, u_int32_t, u_int32_t
+BEGIN env_txn_recover RETCODE
ARG ID DB_ENV * dbenv
ARG IGNORE DB_PREPLIST * preplist
ARG INT long count
@@ -363,83 +284,22 @@ RET LIST DB_TXN * txn ID
RET LIST u_int8_t * gid GID
RET INT long retcount
END
-BEGIN txn_stat NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_TXN_STAT ** statp
-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 nvotes
-ARG INT int pri
-ARG INT u_int32_t timeout
-ARG IGNORE int * idp
-ARG INT u_int32_t flags
-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
+NOFUNC env_txn_stat DB_ENV *, DB_TXN_STAT **, u_int32_t
+NOFUNC env_txn_stat_print DB_ENV *, u_int32_t
+
+######################################################
+# DB handle create.
+######################################################
+BEGIN db_create RETCODE
+ARG IGNORE DB * dbp
ARG ID DB_ENV * dbenv
-ARG IGNORE DB_REP_STAT ** statp
ARG INT u_int32_t flags
+RET ID long db
END
-
-#
-# Database functions
-#
-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
+######################################################
+# DB handle methods.
+######################################################
+BEGIN db_associate CODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG ID DB * sdbp
@@ -447,140 +307,107 @@ 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 CODE
-ARG ID DB * dbp
-ARG INT u_int32_t maxkey
-END
-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 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 NOFUNC
-ARG ID DB * dbp
-FUNCPROT int (*)(DB *, DBT *, db_recno_t)
-FUNCARG int (*func0) __P((DB *, DBT *, db_recno_t))
-END
-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 RETCODE
+BEGIN db_close RETCODE
ARG ID DB * dbp
ARG INT u_int32_t flags
END
-BEGIN db_create RETCODE
-ARG IGNORE DB * dbp
-ARG ID DB_ENV * dbenv
+NOFUNC db_compact DB *, DB_TXN *, DBT *, DBT *, DB_COMPACT *, u_int32_t, DBT *
+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 db
+RET ID long dbcid
END
-BEGIN db_del 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_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
+LOCAL db_err
+LOCAL db_errx
+NOFUNC db_fd DB *, int *
+BEGIN db_get RETCODE
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 ID DB_TXN * txnp
+ARG DBT DBT * key
+ARG DBT DBT * data
ARG INT u_int32_t flags
+RET DBT DBT * key
+RET DBT DBT * data
END
-BEGIN db_get_extentsize CODE
-ARG ID DB * dbp
-ARET INT u_int32_t extentsize
-END
-BEGIN db_extentsize CODE
+BEGIN db_get_bt_minkey CODE
ARG ID DB * dbp
-ARG INT u_int32_t extentsize
+ARET INT u_int32_t minkey
END
-BEGIN db_fd NOFUNC
+LOCAL db_get_byteswapped
+NOFUNC db_get_cachesize DB *, u_int32_t *, u_int32_t *, int *
+BEGIN db_get_dbname CODE
ARG ID DB * dbp
-ARG IGNORE int * fdp
+ARET STRING const char * filename
+ARET STRING const char * dbname
END
-BEGIN db_feedback NOFUNC
+BEGIN db_get_encrypt_flags CODE
ARG ID DB * dbp
-FUNCPROT void (*)(DB *, int, int)
-FUNCARG void (*func0) __P((DB *, int, int))
+ARET INT u_int32_t flags
END
-BEGIN db_get_flags CODE
+LOCAL db_get_env
+LOCAL db_get_errfile
+LOCAL db_get_errpfx
+BEGIN db_get_flags CODE
ARG ID DB * dbp
ARET INT u_int32_t flags
END
-BEGIN db_flags CODE
+BEGIN db_get_h_ffactor CODE
ARG ID DB * dbp
-ARG INT u_int32_t flags
+ARET INT u_int32_t ffactor
END
-BEGIN db_get RETCODE
+BEGIN db_get_h_nelem CODE
ARG ID DB * dbp
-ARG ID DB_TXN * txnp
-ARG DBT DBT * key
-ARG DBT DBT * data
-ARG INT u_int32_t flags
-RET DBT DBT * key
-RET DBT DBT * data
+ARET INT u_int32_t nelem
END
-BEGIN db_get_name CODE
+BEGIN db_get_lorder CODE
ARG ID DB * dbp
-ARET STRING const char * filename
-ARET STRING const char * dbname
+ARET INT int lorder
END
+NOFUNC db_get_mpf DB *
+LOCAL db_get_msgfile
BEGIN db_get_open_flags CODE
ARG ID DB * dbp
ARET INT u_int32_t flags
END
-BEGIN db_get_h_ffactor CODE
+BEGIN db_get_pagesize CODE
ARG ID DB * dbp
-ARET INT u_int32_t ffactor
+ARET INT u_int32_t pagesize
END
-BEGIN db_h_ffactor CODE
+BEGIN db_get_q_extentsize CODE
ARG ID DB * dbp
-ARG INT u_int32_t ffactor
+ARET INT u_int32_t extentsize
END
-BEGIN db_h_hash NOFUNC
+BEGIN db_get_re_delim CODE
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))
+ARET INT int delim
END
-BEGIN db_get_h_nelem CODE
+BEGIN db_get_re_len CODE
ARG ID DB * dbp
-ARET INT u_int32_t nelem
+ARET INT u_int32_t len
END
-BEGIN db_h_nelem CODE
+BEGIN db_get_re_pad CODE
ARG ID DB * dbp
-ARG INT u_int32_t nelem
+ARET INT int pad
+END
+NOFUNC db_get_re_source DB *, const char **
+LOCAL db_get_transactional
+LOCAL db_get_type
+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 db_key_range RETCODE
+BEGIN db_key_range RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * key
@@ -590,21 +417,7 @@ RET DBL double less
RET DBL double equal
RET DBL double greater
END
-BEGIN db_get_lorder CODE
-ARG ID DB * dbp
-ARET INT int lorder
-END
-BEGIN db_lorder CODE
-ARG ID DB * dbp
-ARG INT int lorder
-END
-# XXX
-# The line:
-# RET INT u_int32_t dbflags
-# should go away when a get_flags method exists. It is
-# needed now because Tcl looks at dbp->flags.
-#
-BEGIN db_open RETCODE
+BEGIN db_open RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG STRING const char * name
@@ -616,20 +429,7 @@ RET ID long db
RET INT DBTYPE type
RET INT int lorder
END
-BEGIN db_get_pagesize CODE
-ARG ID DB * dbp
-ARET INT u_int32_t pagesize
-END
-BEGIN db_pagesize CODE
-ARG ID DB * dbp
-ARG INT u_int32_t pagesize
-END
-BEGIN db_panic NOFUNC
-ARG ID DB * dbp
-FUNCPROT void (*)(DB_ENV *, int)
-FUNCARG void (*func0) __P((DB_ENV *, int))
-END
-BEGIN db_pget RETCODE
+BEGIN db_pget RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * skey
@@ -640,7 +440,7 @@ RET DBT DBT * skey
RET DBT DBT * pkey
RET DBT DBT * data
END
-BEGIN db_put RETCODE
+BEGIN db_put RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * key
@@ -648,118 +448,124 @@ ARG DBT DBT * data
ARG INT u_int32_t flags
RET DBT DBT * key
END
-BEGIN db_get_re_delim CODE
+BEGIN db_remove RETCODE
ARG ID DB * dbp
-ARET INT int delim
+ARG STRING const char * name
+ARG STRING const char * subdb
+ARG INT u_int32_t flags
END
-BEGIN db_re_delim CODE
+BEGIN db_rename RETCODE
ARG ID DB * dbp
-ARG INT int delim
+ARG STRING const char * name
+ARG STRING const char * subdb
+ARG STRING const char * newname
+ARG INT u_int32_t flags
END
-BEGIN db_get_re_len CODE
+NOFUNC db_set_alloc DB *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)
+NOFUNC db_set_append_recno DB *, int (*)(DB *, DBT *, db_recno_t)
+NOFUNC db_set_bt_compare DB *, int (*)(DB *, const DBT *, const DBT *)
+BEGIN db_set_bt_minkey CODE
ARG ID DB * dbp
-ARET INT u_int32_t len
+ARG INT u_int32_t minkey
END
-BEGIN db_re_len CODE
+NOFUNC db_set_bt_prefix DB *, size_t(*)(DB *, const DBT *, const DBT *)
+NOFUNC db_set_cachesize DB *, u_int32_t, u_int32_t, int
+NOFUNC db_set_dup_compare DB *, int (*)(DB *, const DBT *, const DBT *)
+BEGIN db_set_encrypt CODE
ARG ID DB * dbp
-ARG INT u_int32_t len
+ARG STRING const char * passwd
+ARG INT u_int32_t flags
END
-BEGIN db_re_pad CODE
+LOCAL db_set_errcall
+LOCAL db_set_errfile
+LOCAL db_set_errpfx
+NOFUNC db_set_feedback DB *, void (*)(DB *, int, int)
+BEGIN db_set_flags CODE
ARG ID DB * dbp
-ARG INT int pad
+ARG INT u_int32_t flags
END
-BEGIN db_get_re_pad CODE
+BEGIN db_set_h_ffactor CODE
ARG ID DB * dbp
-ARET INT int pad
+ARG INT u_int32_t ffactor
END
-BEGIN db_get_re_source NOFUNC
+NOFUNC db_set_h_hash DB *, u_int32_t(*)(DB *, const void *, u_int32_t)
+BEGIN db_set_h_nelem CODE
ARG ID DB * dbp
-ARET STRING const char * re_source
+ARG INT u_int32_t nelem
END
-BEGIN db_re_source NOFUNC
+BEGIN db_set_lorder CODE
ARG ID DB * dbp
-ARG STRING const char * re_source
+ARG INT int lorder
END
-BEGIN db_remove RETCODE
+LOCAL db_set_msgcall
+LOCAL db_set_msgfile
+BEGIN db_set_pagesize CODE
ARG ID DB * dbp
-ARG STRING const char * name
-ARG STRING const char * subdb
-ARG INT u_int32_t flags
+ARG INT u_int32_t pagesize
END
-BEGIN db_rename RETCODE
+NOFUNC db_set_paniccall DB *, void (*)(DB_ENV *, int)
+BEGIN db_set_q_extentsize CODE
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
+ARG INT u_int32_t extentsize
END
-BEGIN db_stat RETCODE
+BEGIN db_set_re_delim CODE
ARG ID DB * dbp
-ARG ID DB_TXN * txnp
-ARG IGNORE void * sp
-ARG INT u_int32_t flags
-RET LIST u_int32_t * stats INT
+ARG INT int delim
END
-BEGIN db_sync CODE
+BEGIN db_set_re_len CODE
ARG ID DB * dbp
-ARG INT u_int32_t flags
+ARG INT u_int32_t len
END
-BEGIN db_truncate RETCODE
+BEGIN db_set_re_pad CODE
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
+ARG INT int pad
END
-BEGIN db_upgrade NOFUNC
+NOFUNC db_set_re_source DB *, const char *
+BEGIN db_stat RETCODE
ARG ID DB * dbp
-ARG STRING const char * fname
+ARG ID DB_TXN * txnp
+ARG IGNORE void * sp
ARG INT u_int32_t flags
+RET LIST u_int32_t * stats INT
END
-BEGIN db_verify NOFUNC
+NOFUNC db_stat_print DB *, u_int32_t
+BEGIN db_sync CODE
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 RETCODE
+BEGIN db_truncate 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 RETCODE
-ARG ID DB * dbp
-ARG LIST DBC ** curs ID
-ARG IGNORE DBC ** dbcp
+ARG IGNORE u_int32_t * countp
ARG INT u_int32_t flags
-RET ID long dbcid
+RET INT u_int32_t count
END
-BEGIN dbc_close RETCODE
+NOFUNC db_upgrade DB *, const char *, u_int32_t
+NOFUNC db_verify DB *, const char *, const char *, FILE *, u_int32_t
+
+######################################################
+# DBC handle methods.
+######################################################
+BEGIN dbc_c_close RETCODE
ARG ID DBC * dbc
END
-BEGIN dbc_count RETCODE
+BEGIN dbc_c_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 CODE
+BEGIN dbc_c_del CODE
ARG ID DBC * dbc
ARG INT u_int32_t flags
END
-BEGIN dbc_dup RETCODE
+BEGIN dbc_c_dup RETCODE
ARG ID DBC * dbc
ARG IGNORE DBC ** dbcp
ARG INT u_int32_t flags
RET ID long dbcid
END
-BEGIN dbc_get RETCODE
+BEGIN dbc_c_get RETCODE
ARG ID DBC * dbc
ARG DBT DBT * key
ARG DBT DBT * data
@@ -767,7 +573,7 @@ ARG INT u_int32_t flags
RET DBT DBT * key
RET DBT DBT * data
END
-BEGIN dbc_pget RETCODE
+BEGIN dbc_c_pget RETCODE
ARG ID DBC * dbc
ARG DBT DBT * skey
ARG DBT DBT * pkey
@@ -777,7 +583,7 @@ RET DBT DBT * skey
RET DBT DBT * pkey
RET DBT DBT * data
END
-BEGIN dbc_put RETCODE
+BEGIN dbc_c_put RETCODE
ARG ID DBC * dbc
ARG DBT DBT * key
ARG DBT DBT * data
@@ -785,210 +591,25 @@ ARG INT u_int32_t flags
RET DBT DBT * key
END
-#
-# Unsupported environment subsystems
-#
-#
-# Locking subsystem
-#
-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 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT u_int32_t locker
-ARG INT u_int32_t flags
-ARG CONST const DBT * obj
-ARG INT db_lockmode_t mode
-ARG IGNORE DB_LOCK * lock
-END
-BEGIN lock_id NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT u_int32_t * idp
-END
-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 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_LOCK_STAT ** statp
-ARG INT u_int32_t flags
-END
-BEGIN lock_vec NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT u_int32_t locker
-ARG INT u_int32_t flags
-ARG IGNORE DB_LOCKREQ * list
-ARG INT int nlist
-ARG IGNORE DB_LOCKREQ ** elistp
-END
-#
-# Logging subsystem
-#
-BEGIN log_archive NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE char *** listp
-ARG INT u_int32_t flags
-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 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 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG CONST const DB_LSN * lsn
-END
-BEGIN log_put NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_LSN * lsn
-ARG DBT const DBT * data
-ARG INT u_int32_t flags
+######################################################
+# DB_TXN handle methods.
+######################################################
+BEGIN txn_abort RETCODE
+ARG ID DB_TXN * txnp
END
-BEGIN log_stat NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_LOG_STAT ** statp
+BEGIN txn_commit RETCODE
+ARG ID DB_TXN * txnp
ARG INT u_int32_t flags
END
-
-#
-# DB_MPOOL methods.
-#
-BEGIN memp_register NOFUNC
-ARG ID DB_ENV * dbenv
-ARG INT int ftype
-FUNCPROT int (*)(DB_ENV *, db_pgno_t, void *, DBT *)
-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 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_MPOOL_STAT ** gstatp
-ARG IGNORE DB_MPOOL_FSTAT *** fstatp
+BEGIN txn_discard RETCODE
+ARG ID DB_TXN * txnp
ARG INT u_int32_t flags
END
-BEGIN memp_sync NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_LSN * lsn
-END
-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
+NOFUNC txn_get_name DB_TXN *, const char **
+LOCAL txn_id
+BEGIN txn_prepare CODE
+ARG ID DB_TXN * txnp
+ARG GID u_int8_t * gid
END
+NOFUNC txn_set_name DB_TXN *, const char *
+NOFUNC txn_set_timeout DB_TXN *, u_int32_t, u_int32_t
diff --git a/db/sequence/seq_stat.c b/db/sequence/seq_stat.c
index af38c1a55..11d4508f3 100644
--- a/db/sequence/seq_stat.c
+++ b/db/sequence/seq_stat.c
@@ -1,26 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: seq_stat.c,v 1.19 2004/09/28 17:28:15 bostic Exp $
+ * $Id: seq_stat.c,v 12.10 2006/08/24 14:46:31 bostic Exp $
*/
#include "db_config.h"
-
-#ifdef HAVE_SEQUENCE
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
+#ifdef HAVE_64BIT_TYPES
#include "db_int.h"
-#include "dbinc_auto/sequence_ext.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#include "dbinc_auto/sequence_ext.h"
#ifdef HAVE_STATISTICS
static int __seq_print_all __P((DB_SEQUENCE *, u_int32_t));
@@ -40,13 +33,15 @@ __seq_stat(seq, spp, flags)
{
DB *dbp;
DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
DB_SEQ_RECORD record;
DB_SEQUENCE_STAT *sp;
DBT data;
- int ret;
+ int handle_check, ret, t_ret;
dbp = seq->seq_dbp;
dbenv = dbp->dbenv;
+
switch (flags) {
case DB_STAT_CLEAR:
case DB_STAT_ALL:
@@ -56,32 +51,41 @@ __seq_stat(seq, spp, flags)
return (__db_ferr(dbenv, "DB_SEQUENCE->stat", 0));
}
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
/* Allocate and clear the structure. */
if ((ret = __os_umalloc(dbenv, sizeof(*sp), &sp)) != 0)
- return (ret);
+ goto err;
memset(sp, 0, sizeof(*sp));
- if (seq->seq_mutexp != NULL) {
- sp->st_wait = seq->seq_mutexp->mutex_set_wait;
- sp->st_nowait = seq->seq_mutexp->mutex_set_nowait;
+ if (seq->mtx_seq != MUTEX_INVALID) {
+ __mutex_set_wait_info(
+ dbenv, seq->mtx_seq, &sp->st_wait, &sp->st_nowait);
if (LF_ISSET(DB_STAT_CLEAR))
- MUTEX_CLEAR(seq->seq_mutexp);
+ __mutex_clear(dbenv, seq->mtx_seq);
}
memset(&data, 0, sizeof(data));
data.data = &record;
data.ulen = sizeof(record);
data.flags = DB_DBT_USERMEM;
-retry: if ((ret = dbp->get(dbp, NULL, &seq->seq_key, &data, 0)) != 0) {
+retry: if ((ret = __db_get(dbp, NULL, &seq->seq_key, &data, 0)) != 0) {
if (ret == DB_BUFFER_SMALL &&
data.size > sizeof(seq->seq_record)) {
if ((ret = __os_malloc(dbenv,
data.size, &data.data)) != 0)
- return (ret);
+ goto err;
data.ulen = data.size;
goto retry;
}
- return (ret);
+ goto err;
}
if (data.data != &record)
@@ -97,7 +101,12 @@ retry: if ((ret = dbp->get(dbp, NULL, &seq->seq_key, &data, 0)) != 0) {
*spp = sp;
if (data.data != &record)
__os_free(dbenv, data.data);
- return (0);
+
+ /* Release replication block. */
+err: if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
}
/*
@@ -111,16 +120,36 @@ __seq_stat_print(seq, flags)
DB_SEQUENCE *seq;
u_int32_t flags;
{
- int ret;
+ DB *dbp;
+ DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
+
+ dbp = seq->seq_dbp;
+ dbenv = dbp->dbenv;
+
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
if ((ret = __seq_print_stats(seq, flags)) != 0)
- return (ret);
+ goto err;
if (LF_ISSET(DB_STAT_ALL) &&
(ret = __seq_print_all(seq, flags)) != 0)
- return (ret);
+ goto err;
- return (0);
+ /* Release replication block. */
+err: if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
}
@@ -166,7 +195,7 @@ __seq_print_stats(seq, flags)
(u_long)sp->st_wait,
DB_PCT(sp->st_wait, sp->st_wait + sp->st_nowait), NULL);
STAT_FMT("The current sequence value",
- INT64_FMT, int64_t, sp->st_current);
+ INT64_FMT, int64_t, sp->st_current);
STAT_FMT("The cached sequence value",
INT64_FMT, int64_t, sp->st_value);
STAT_FMT("The last cached sequence value",
@@ -241,4 +270,4 @@ __db_get_seq_flags_fn()
return (__db_seq_flags_fn);
}
#endif /* !HAVE_STATISTICS */
-#endif /* HAVE_SEQUENCE */
+#endif /* HAVE_64BIT_TYPES */
diff --git a/db/sequence/sequence.c b/db/sequence/sequence.c
index 1cf5da0ce..aa72c045a 100644
--- a/db/sequence/sequence.c
+++ b/db/sequence/sequence.c
@@ -1,29 +1,31 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: sequence.c,v 1.26 2004/10/25 17:59:28 bostic Exp $
+ * $Id: sequence.c,v 12.38 2006/08/24 14:46:31 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
#include "dbinc/mp.h"
+#include "dbinc/txn.h"
#include "dbinc_auto/sequence_ext.h"
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_RPC
+#ifndef NO_SYSTEM_INCLUDES
+#include <rpc/rpc.h>
+#endif
+#include "db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
+#endif
+
+#ifdef HAVE_64BIT_TYPES
#define SEQ_ILLEGAL_AFTER_OPEN(seq, name) \
if (seq->seq_key.data != NULL) \
return (__db_mi_open((seq)->seq_dbp->dbenv, name, 1));
@@ -32,20 +34,60 @@
if (seq->seq_key.data == NULL) \
return (__db_mi_open((seq)->seq_dbp->dbenv, name, 0));
+#define SEQ_IS_OPEN(seq) ((seq)->seq_key.data != NULL)
+
+/*
+ * Sequences must be architecture independent but they are stored as user
+ * data in databases so the code here must handle the byte ordering. We
+ * store them in little-endian byte ordering. If we are on a big-endian
+ * machine we swap in and out when we read from the database. seq->seq_rp
+ * always points to the record in native ordering.
+ *
+ * Version 1 always stored things in native format so if we detect this we
+ * upgrade on the fly and write the record back at open time.
+ */
+#define SEQ_SWAP(rp) \
+ do { \
+ M_32_SWAP((rp)->seq_version); \
+ M_32_SWAP((rp)->flags); \
+ M_64_SWAP((rp)->seq_value); \
+ M_64_SWAP((rp)->seq_max); \
+ M_64_SWAP((rp)->seq_min); \
+ } while (0)
+
+#define SEQ_SWAP_IN(seq) \
+ do { \
+ if (__db_isbigendian()) { \
+ memcpy(&seq->seq_record, seq->seq_data.data, \
+ sizeof(seq->seq_record)); \
+ SEQ_SWAP(&seq->seq_record); \
+ } \
+ } while (0)
+
+#define SEQ_SWAP_OUT(seq) \
+ do { \
+ if (__db_isbigendian()) { \
+ memcpy(seq->seq_data.data, \
+ &seq->seq_record, sizeof(seq->seq_record));\
+ SEQ_SWAP((DB_SEQ_RECORD*)seq->seq_data.data); \
+ } \
+ } while (0)
+
+static int __seq_chk_cachesize __P((DB_ENV *, int32_t, db_seq_t, db_seq_t));
static int __seq_close __P((DB_SEQUENCE *, u_int32_t));
-static int __seq_get __P((DB_SEQUENCE *,
- DB_TXN *, int32_t, db_seq_t *, u_int32_t));
+static int __seq_get
+ __P((DB_SEQUENCE *, DB_TXN *, int32_t, db_seq_t *, u_int32_t));
static int __seq_get_cachesize __P((DB_SEQUENCE *, int32_t *));
+static int __seq_get_db __P((DB_SEQUENCE *, DB **));
static int __seq_get_flags __P((DB_SEQUENCE *, u_int32_t *));
static int __seq_get_key __P((DB_SEQUENCE *, DBT *));
static int __seq_get_range __P((DB_SEQUENCE *, db_seq_t *, db_seq_t *));
-static int __seq_set_range __P((DB_SEQUENCE *, db_seq_t, db_seq_t));
-static int __seq_get_db __P((DB_SEQUENCE *, DB **));
static int __seq_initial_value __P((DB_SEQUENCE *, db_seq_t));
-static int __seq_open __P((DB_SEQUENCE *, DB_TXN *, DBT *, u_int32_t));
+static int __seq_open_pp __P((DB_SEQUENCE *, DB_TXN *, DBT *, u_int32_t));
static int __seq_remove __P((DB_SEQUENCE *, DB_TXN *, u_int32_t));
static int __seq_set_cachesize __P((DB_SEQUENCE *, int32_t));
static int __seq_set_flags __P((DB_SEQUENCE *, u_int32_t));
+static int __seq_set_range __P((DB_SEQUENCE *, db_seq_t, db_seq_t));
static int __seq_update __P((DB_SEQUENCE *, DB_TXN *, int32_t, u_int32_t));
/*
@@ -66,6 +108,12 @@ db_sequence_create(seqp, dbp, flags)
dbenv = dbp->dbenv;
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "db_sequence_create");
+#ifdef HAVE_RPC
+ if (RPC_ON(dbenv))
+ return (__dbcl_dbenv_illegal(dbenv));
+#endif
+
/* Check for invalid function flags. */
switch (flags) {
case 0:
@@ -74,8 +122,6 @@ db_sequence_create(seqp, dbp, flags)
return (__db_ferr(dbenv, "db_sequence_create", 0));
}
- DB_ILLEGAL_BEFORE_OPEN(dbp, "db_sequence_create");
-
/* Allocate the sequence. */
if ((ret = __os_calloc(dbenv, 1, sizeof(*seq), &seq)) != 0)
return (ret);
@@ -90,7 +136,7 @@ db_sequence_create(seqp, dbp, flags)
seq->get_key = __seq_get_key;
seq->get_range = __seq_get_range;
seq->initial_value = __seq_initial_value;
- seq->open = __seq_open;
+ seq->open = __seq_open_pp;
seq->remove = __seq_remove;
seq->set_flags = __seq_set_flags;
seq->set_range = __seq_set_range;
@@ -108,7 +154,7 @@ db_sequence_create(seqp, dbp, flags)
*
*/
static int
-__seq_open(seq, txn, keyp, flags)
+__seq_open_pp(seq, txn, keyp, flags)
DB_SEQUENCE *seq;
DB_TXN *txn;
DBT *keyp;
@@ -116,71 +162,92 @@ __seq_open(seq, txn, keyp, flags)
{
DB *dbp;
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
DB_SEQ_RECORD *rp;
+ DB_THREAD_INFO *ip;
u_int32_t tflags;
- int ret;
-#define SEQ_OPEN_FLAGS (DB_AUTO_COMMIT | DB_CREATE | DB_EXCL | DB_THREAD)
+ int handle_check, txn_local, ret, t_ret;
+#define SEQ_OPEN_FLAGS (DB_CREATE | DB_EXCL | DB_THREAD)
dbp = seq->seq_dbp;
dbenv = dbp->dbenv;
+ txn_local = 0;
+ STRIP_AUTO_COMMIT(flags);
SEQ_ILLEGAL_AFTER_OPEN(seq, "DB_SEQUENCE->open");
- if (keyp->size == 0) {
- __db_err(dbenv, "Zero length sequence key specified");
- return (EINVAL);
+
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
+ goto err;
}
- if (LF_ISSET(~SEQ_OPEN_FLAGS))
- return (__db_ferr(dbenv, "DB_SEQUENCE->open", 0));
+ if ((ret = __db_fchk(dbenv,
+ "DB_SEQUENCE->open", flags, SEQ_OPEN_FLAGS)) != 0)
+ goto err;
+
+ if (keyp->size == 0) {
+ __db_errx(dbenv, "Zero length sequence key specified");
+ goto err;
+ }
- if ((ret = dbp->get_flags(dbp, &tflags)) != 0)
- return (ret);
+ if ((ret = __db_get_flags(dbp, &tflags)) != 0)
+ goto err;
if (FLD_ISSET(tflags, DB_DUP)) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Sequences not supported in databases configured for duplicate data");
- return (EINVAL);
+ goto err;
}
if (LF_ISSET(DB_THREAD)) {
- dbmp = dbenv->mp_handle;
- if ((ret = __db_mutex_setup(dbenv, dbmp->reginfo,
- &seq->seq_mutexp, MUTEX_ALLOC | MUTEX_THREAD)) != 0)
- return (ret);
+ if (RPC_ON(dbenv)) {
+ __db_errx(dbenv,
+ "DB_SEQUENCE->open: DB_THREAD not supported with RPC");
+ goto err;
+ }
+ if ((ret = __mutex_alloc(dbenv,
+ MTX_SEQUENCE, DB_MUTEX_PROCESS_ONLY, &seq->mtx_seq)) != 0)
+ goto err;
}
memset(&seq->seq_data, 0, sizeof(DBT));
- seq->seq_data.data = &seq->seq_record;
- seq->seq_data.size = seq->seq_data.ulen = sizeof(seq->seq_record);
- seq->seq_data.flags = DB_DBT_USERMEM;
+ if (__db_isbigendian()) {
+ if ((ret = __os_umalloc(dbenv,
+ sizeof(seq->seq_record), &seq->seq_data.data)) != 0)
+ goto err;
+ seq->seq_data.flags = DB_DBT_REALLOC;
+ } else {
+ seq->seq_data.data = &seq->seq_record;
+ seq->seq_data.flags = DB_DBT_USERMEM;
+ }
+
+ seq->seq_data.ulen = seq->seq_data.size = sizeof(seq->seq_record);
+ seq->seq_rp = &seq->seq_record;
memset(&seq->seq_key, 0, sizeof(DBT));
if ((ret = __os_malloc(dbenv, keyp->size, &seq->seq_key.data)) != 0)
- return (ret);
+ goto err;
memcpy(seq->seq_key.data, keyp->data, keyp->size);
seq->seq_key.size = seq->seq_key.ulen = keyp->size;
seq->seq_key.flags = DB_DBT_USERMEM;
- seq->seq_rp = rp = &seq->seq_record;
-
-retry: if ((ret = dbp->get(dbp, txn, &seq->seq_key, &seq->seq_data, 0)) != 0) {
+retry: if ((ret = __db_get(dbp, txn, &seq->seq_key, &seq->seq_data, 0)) != 0) {
if (ret == DB_BUFFER_SMALL &&
seq->seq_data.size > sizeof(seq->seq_record)) {
- if ((ret = __os_malloc(dbenv,
- seq->seq_data.size, &seq->seq_data.data)) != 0)
- goto err;
- seq->seq_data.ulen = seq->seq_data.size;
- rp = seq->seq_rp = seq->seq_data.data;
+ seq->seq_data.flags = DB_DBT_REALLOC;
+ seq->seq_data.data = NULL;
goto retry;
}
if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) ||
!LF_ISSET(DB_CREATE))
goto err;
-
ret = 0;
- tflags = DB_NOOVERWRITE;
- tflags |= LF_ISSET(DB_AUTO_COMMIT);
+
+ rp = &seq->seq_record;
if (!F_ISSET(rp, DB_SEQ_RANGE_SET)) {
rp->seq_max = INT64_MAX;
rp->seq_min = INT64_MIN;
@@ -193,33 +260,111 @@ retry: if ((ret = dbp->get(dbp, txn, &seq->seq_key, &seq->seq_data, 0)) != 0) {
if (rp->seq_value > rp->seq_max ||
rp->seq_value < rp->seq_min) {
- __db_err(dbenv, "Sequence value out of range");
+ __db_errx(dbenv, "Sequence value out of range");
ret = EINVAL;
goto err;
- } else if ((ret = dbp->put(dbp, txn,
- &seq->seq_key, &seq->seq_data, tflags)) != 0) {
- __db_err(dbenv, "Sequence create failed");
- goto err;
+ } else {
+ SEQ_SWAP_OUT(seq);
+ /* Create local transaction as necessary. */
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret =
+ __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
+ txn_local = 1;
+ }
+
+ if ((ret = __db_put(dbp, txn, &seq->seq_key,
+ &seq->seq_data, DB_NOOVERWRITE)) != 0) {
+ __db_errx(dbenv, "Sequence create failed");
+ goto err;
+ }
}
} else if (LF_ISSET(DB_CREATE) && LF_ISSET(DB_EXCL)) {
ret = EEXIST;
goto err;
} else if (seq->seq_data.size < sizeof(seq->seq_record)) {
- __db_err(dbenv, "Bad sequence record format");
+ __db_errx(dbenv, "Bad sequence record format");
ret = EINVAL;
goto err;
}
+ if (!__db_isbigendian())
+ seq->seq_rp = seq->seq_data.data;
+
+ /*
+ * The first release was stored in native mode.
+ * Check the version number before swapping.
+ */
+ rp = seq->seq_data.data;
+ if (rp->seq_version == DB_SEQUENCE_OLDVER) {
+oldver: rp->seq_version = DB_SEQUENCE_VERSION;
+ if (__db_isbigendian()) {
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret =
+ __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
+ txn_local = 1;
+ goto retry;
+ }
+ memcpy(&seq->seq_record, rp, sizeof(seq->seq_record));
+ SEQ_SWAP_OUT(seq);
+ }
+ if ((ret = __db_put(dbp,
+ txn, &seq->seq_key, &seq->seq_data, 0)) != 0)
+ goto err;
+ }
+ rp = seq->seq_rp;
+
+ SEQ_SWAP_IN(seq);
+
+ if (rp->seq_version != DB_SEQUENCE_VERSION) {
+ /*
+ * The database may have moved from one type
+ * of machine to another, check here.
+ * If we moved from little-end to big-end then
+ * the swap above will make the version correct.
+ * If the move was from big to little
+ * then we need to swap to see if this
+ * is an old version.
+ */
+ if (rp->seq_version == DB_SEQUENCE_OLDVER)
+ goto oldver;
+ M_32_SWAP(rp->seq_version);
+ if (rp->seq_version == DB_SEQUENCE_OLDVER) {
+ SEQ_SWAP(rp);
+ goto oldver;
+ }
+ M_32_SWAP(rp->seq_version);
+ __db_errx(dbenv,
+ "Unsupported sequence version: %d", rp->seq_version);
+ goto err;
+ }
+
seq->seq_last_value = rp->seq_value;
if (F_ISSET(rp, DB_SEQ_INC))
seq->seq_last_value--;
else
seq->seq_last_value++;
-err: if (ret != 0) {
+ /*
+ * It's an error to specify a cache larger than the range of sequences.
+ */
+ if (seq->seq_cache_size != 0 && (ret = __seq_chk_cachesize(
+ dbenv, seq->seq_cache_size, rp->seq_max, rp->seq_min)) != 0)
+ goto err;
+
+err: if (txn_local &&
+ (t_ret = __db_txn_auto_resolve(dbenv, txn, 0, ret)) && ret == 0)
+ ret = t_ret;
+ if (ret != 0) {
__os_free(dbenv, seq->seq_key.data);
seq->seq_key.data = NULL;
}
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -249,11 +394,23 @@ __seq_set_cachesize(seq, cachesize)
DB_SEQUENCE *seq;
int32_t cachesize;
{
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = seq->seq_dbp->dbenv;
+
if (cachesize < 0) {
- __db_err(seq->seq_dbp->dbenv,
- "Illegal cache size: %d", cachesize);
+ __db_errx(dbenv, "Cache size must be >= 0");
return (EINVAL);
}
+
+ /*
+ * It's an error to specify a cache larger than the range of sequences.
+ */
+ if (SEQ_IS_OPEN(seq) && (ret = __seq_chk_cachesize(dbenv,
+ cachesize, seq->seq_rp->seq_max, seq->seq_rp->seq_min)) != 0)
+ return (ret);
+
seq->seq_cache_size = cachesize;
return (0);
}
@@ -291,11 +448,12 @@ __seq_set_flags(seq, flags)
dbenv = seq->seq_dbp->dbenv;
rp = seq->seq_rp;
- SEQ_ILLEGAL_AFTER_OPEN(seq, "DB_SEQUENCE->set_flags");
- if (LF_ISSET(~SEQ_SET_FLAGS))
- return (__db_ferr(dbenv, "DB_SEQUENCE->set_flags", 0));
+ SEQ_ILLEGAL_AFTER_OPEN(seq, "DB_SEQUENCE->set_flags");
+ if ((ret = __db_fchk(
+ dbenv, "DB_SEQUENCE->set_flags", flags, SEQ_SET_FLAGS)) != 0)
+ return (ret);
if ((ret = __db_fcchk(dbenv,
"DB_SEQUENCE->set_flags", flags, DB_SEQ_DEC, DB_SEQ_INC)) != 0)
return (ret);
@@ -309,7 +467,7 @@ __seq_set_flags(seq, flags)
/*
* __seq_initial_value --
- * DB_SEQUENCE->init_value.
+ * DB_SEQUENCE->initial_value.
*
*/
static int
@@ -321,12 +479,12 @@ __seq_initial_value(seq, value)
DB_SEQ_RECORD *rp;
dbenv = seq->seq_dbp->dbenv;
- SEQ_ILLEGAL_AFTER_OPEN(seq, "DB_SEQUENCE->init_value");
+ SEQ_ILLEGAL_AFTER_OPEN(seq, "DB_SEQUENCE->initial_value");
rp = seq->seq_rp;
if (F_ISSET(rp, DB_SEQ_RANGE_SET) &&
(value > rp->seq_max || value < rp->seq_min)) {
- __db_err(dbenv, "Sequence value out of range");
+ __db_errx(dbenv, "Sequence value out of range");
return (EINVAL);
}
@@ -347,9 +505,8 @@ __seq_get_range(seq, minp, maxp)
{
SEQ_ILLEGAL_BEFORE_OPEN(seq, "DB_SEQUENCE->get_range");
- F_SET(seq->seq_rp, DB_SEQ_RANGE_SET);
- *minp = seq->seq_record.seq_min;
- *maxp = seq->seq_record.seq_max;
+ *minp = seq->seq_rp->seq_min;
+ *maxp = seq->seq_rp->seq_max;
return (0);
}
@@ -369,12 +526,13 @@ __seq_set_range(seq, min, max)
SEQ_ILLEGAL_AFTER_OPEN(seq, "DB_SEQUENCE->set_range");
if (min >= max) {
- __db_err(dbenv, "Illegal sequence range");
+ __db_errx(dbenv,
+ "Minimum sequence value must be less than maximum sequence value");
return (EINVAL);
}
- seq->seq_record.seq_min = min;
- seq->seq_record.seq_max = max;
+ seq->seq_rp->seq_min = min;
+ seq->seq_rp->seq_max = max;
F_SET(seq->seq_rp, DB_SEQ_RANGE_SET);
return (0);
@@ -391,31 +549,47 @@ __seq_update(seq, txn, delta, flags)
DB_ENV *dbenv;
DB_SEQ_RECORD *rp;
int32_t adjust;
- int ret;
+ int ret, txn_local;
dbp = seq->seq_dbp;
dbenv = dbp->dbenv;
- rp = seq->seq_rp;
- if (LF_ISSET(DB_AUTO_COMMIT) &&
- (ret = __db_txn_auto_init(dbenv, &txn)) != 0)
- return (ret);
-retry:
- if ((ret = dbp->get(dbp, txn, &seq->seq_key, &seq->seq_data, 0)) != 0) {
+ /*
+ * 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.
+ */
+ if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ return (ret);
+ txn_local = 1;
+ } else
+ txn_local = 0;
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0)) != 0)
+ goto err;
+
+retry: if ((ret = __db_get(dbp, txn, &seq->seq_key, &seq->seq_data, 0)) != 0) {
if (ret == DB_BUFFER_SMALL &&
seq->seq_data.size > sizeof(seq->seq_record)) {
- if ((ret = __os_malloc(dbenv,
- seq->seq_data.size, &seq->seq_data.data)) != 0)
- goto err;
- seq->seq_data.ulen = seq->seq_data.size;
- rp = seq->seq_rp = seq->seq_data.data;
+ seq->seq_data.flags = DB_DBT_REALLOC;
+ seq->seq_data.data = NULL;
goto retry;
}
goto err;
}
+ if (!__db_isbigendian())
+ seq->seq_rp = seq->seq_data.data;
+ SEQ_SWAP_IN(seq);
+ rp = seq->seq_rp;
+
+ if (F_ISSET(rp, DB_SEQ_WRAPPED))
+ goto overflow;
+
if (seq->seq_data.size < sizeof(seq->seq_record)) {
- __db_err(dbenv, "Bad sequence record format");
+ __db_errx(dbenv, "Bad sequence record format");
ret = EINVAL;
goto err;
}
@@ -427,41 +601,56 @@ retry:
*
* The sequence minimum and maximum values can be INT64_MIN and
* INT64_MAX, so we need to do the test carefully to cope with
- * arithmetic overflow. That means we need to check whether the value
- * is in a range, we can't get away with a single comparison.
- *
- * For example, if seq_value == -1 and seq_max == INT64_MAX, the first
- * test below will be true, since -1 - (INT64_MAX + 1) == INT64_MAX.
- * The second part of the test makes sure that seq_value is close
- * enough to the maximum to really cause wrapping.
+ * arithmetic overflow. The first part of the test below checks
+ * whether we will hit the end of the 64-bit range. The second part
+ * checks whether we hit the end of the sequence.
*/
- if (F_ISSET(rp, DB_SEQ_INC)) {
- if (rp->seq_value - ((rp->seq_max - adjust) + 2) >= 0 &&
- (rp->seq_max + 1) - rp->seq_value >= 0) {
+again: if (F_ISSET(rp, DB_SEQ_INC)) {
+ if (rp->seq_value + adjust - 1 < rp->seq_value ||
+ rp->seq_value + adjust - 1 > rp->seq_max) {
+ /* Don't wrap just to fill the cache. */
+ if (adjust > delta) {
+ adjust = delta;
+ goto again;
+ }
if (F_ISSET(rp, DB_SEQ_WRAP))
rp->seq_value = rp->seq_min;
else {
-overflow: __db_err(dbenv, "Sequence overflow");
+overflow: __db_errx(dbenv, "Sequence overflow");
ret = EINVAL;
goto err;
}
}
+ /* See if we are at the end of the 64 bit range. */
+ if (!F_ISSET(rp, DB_SEQ_WRAP) &&
+ rp->seq_value + adjust < rp->seq_value)
+ F_SET(rp, DB_SEQ_WRAPPED);
} else {
- if (rp->seq_value - (rp->seq_min - 1) >= 0 &&
- (rp->seq_min + adjust - 2) - rp->seq_value >= 0) {
+ if ((rp->seq_value - adjust) + 1 > rp->seq_value ||
+ (rp->seq_value - adjust) + 1 < rp->seq_min) {
+ /* Don't wrap just to fill the cache. */
+ if (adjust > delta) {
+ adjust = delta;
+ goto again;
+ }
if (F_ISSET(rp, DB_SEQ_WRAP))
rp->seq_value = rp->seq_max;
else
goto overflow;
}
+ /* See if we are at the end of the 64 bit range. */
+ if (!F_ISSET(rp, DB_SEQ_WRAP) &&
+ rp->seq_value - adjust > rp->seq_value)
+ F_SET(rp, DB_SEQ_WRAPPED);
adjust = -adjust;
}
rp->seq_value += adjust;
- ret = dbp->put(dbp, txn, &seq->seq_key, &seq->seq_data, 0);
+ SEQ_SWAP_OUT(seq);
+ ret = __db_put(dbp, txn, &seq->seq_key, &seq->seq_data, 0);
rp->seq_value -= adjust;
if (ret != 0) {
- __db_err(dbenv, "Sequence update failed");
+ __db_errx(dbenv, "Sequence update failed");
goto err;
}
seq->seq_last_value = rp->seq_value + adjust;
@@ -470,11 +659,8 @@ overflow: __db_err(dbenv, "Sequence overflow");
else
seq->seq_last_value++;
-err: if (LF_ISSET(DB_AUTO_COMMIT))
- ret = __db_txn_auto_resolve(dbenv,
- txn, LF_ISSET(DB_TXN_NOSYNC), ret);
- return (ret);
-
+err: return (txn_local ? __db_txn_auto_resolve(
+ dbenv, txn, LF_ISSET(DB_TXN_NOSYNC), ret) : ret);
}
static int
@@ -488,23 +674,39 @@ __seq_get(seq, txn, delta, retp, flags)
DB *dbp;
DB_ENV *dbenv;
DB_SEQ_RECORD *rp;
- int ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbp = seq->seq_dbp;
dbenv = dbp->dbenv;
rp = seq->seq_rp;
ret = 0;
+ STRIP_AUTO_COMMIT(flags);
SEQ_ILLEGAL_BEFORE_OPEN(seq, "DB_SEQUENCE->get");
if (delta <= 0) {
- __db_err(dbenv, "Sequence delta must be greater than 0");
+ __db_errx(dbenv, "Sequence delta must be greater than 0");
return (EINVAL);
}
- MUTEX_THREAD_LOCK(dbenv, seq->seq_mutexp);
+
+ if (seq->seq_cache_size != 0 && txn != NULL) {
+ __db_errx(dbenv,
+ "Sequence with non-zero cache may not specify transaction handle");
+ return (EINVAL);
+ }
+
+ ENV_ENTER(dbenv, ip);
+
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0)
+ return (ret);
+
+ MUTEX_LOCK(dbenv, seq->mtx_seq);
if (rp->seq_min + delta > rp->seq_max) {
- __db_err(dbenv, "Sequence overflow");
+ __db_errx(dbenv, "Sequence overflow");
ret = EINVAL;
goto err;
}
@@ -514,7 +716,6 @@ __seq_get(seq, txn, delta, retp, flags)
(ret = __seq_update(seq, txn, delta, flags)) != 0)
goto err;
- /* _update may change seq->seq_rp. */
rp = seq->seq_rp;
*retp = rp->seq_value;
rp->seq_value += delta;
@@ -528,14 +729,19 @@ __seq_get(seq, txn, delta, retp, flags)
rp->seq_value -= delta;
}
-err: MUTEX_THREAD_UNLOCK(dbenv, seq->seq_mutexp);
+err: MUTEX_UNLOCK(dbenv, seq->mtx_seq);
+
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
/*
* __seq_get_db --
- * Accessor for dbp passed into DB_SEQUENCE->open call
+ * Accessor for dbp passed into db_sequence_create call
*
*/
static int
@@ -543,8 +749,6 @@ __seq_get_db(seq, dbpp)
DB_SEQUENCE *seq;
DB **dbpp;
{
- SEQ_ILLEGAL_BEFORE_OPEN(seq, "DB_SEQUENCE->get_db");
-
*dbpp = seq->seq_dbp;
return (0);
}
@@ -578,25 +782,27 @@ __seq_close(seq, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
- int ret;
+ int ret, t_ret;
ret = 0;
dbenv = seq->seq_dbp->dbenv;
if (flags != 0)
ret = __db_ferr(dbenv, "DB_SEQUENCE->close", 0);
- if (seq->seq_mutexp != NULL) {
- dbmp = dbenv->mp_handle;
- __db_mutex_free(dbenv, dbmp->reginfo, seq->seq_mutexp);
- }
+
+ if ((t_ret = __mutex_free(dbenv, &seq->mtx_seq)) != 0 && ret == 0)
+ ret = t_ret;
+
if (seq->seq_key.data != NULL)
__os_free(dbenv, seq->seq_key.data);
- if (seq->seq_data.data != &seq->seq_record)
- __os_free(dbenv, seq->seq_data.data);
+ if (seq->seq_data.data != NULL &&
+ seq->seq_data.data != &seq->seq_record)
+ __os_ufree(dbenv, seq->seq_data.data);
seq->seq_key.data = NULL;
+
memset(seq, CLEAR_BYTE, sizeof(*seq));
__os_free(dbenv, seq);
+
return (ret);
}
@@ -612,29 +818,63 @@ __seq_remove(seq, txn, flags)
{
DB *dbp;
DB_ENV *dbenv;
- int ret, t_ret;
+ DB_THREAD_INFO *ip;
+ int handle_check, ret, t_ret;
dbp = seq->seq_dbp;
dbenv = dbp->dbenv;
SEQ_ILLEGAL_BEFORE_OPEN(seq, "DB_SEQUENCE->remove");
+ ENV_ENTER(dbenv, ip);
- if (LF_ISSET(DB_AUTO_COMMIT) &&
- (ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ /* Check for replication block. */
+ handle_check = IS_ENV_REPLICATED(dbenv);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, 0, txn != NULL)) != 0) {
+ handle_check = 0;
goto err;
+ }
+ if (flags != 0)
+ ret = __db_ferr(dbenv, "DB_SEQUENCE->remove", 0);
- ret = dbp->del(dbp, txn, &seq->seq_key, 0);
+ ret = __db_del(dbp, txn, &seq->seq_key, 0);
- if (LF_ISSET(DB_AUTO_COMMIT))
- ret = __db_txn_auto_resolve(dbenv,
- txn, LF_ISSET(DB_TXN_NOSYNC), ret);
+ if ((t_ret = __seq_close(seq, 0)) != 0 && ret == 0)
+ ret = t_ret;
-err: if ((t_ret = __seq_close(seq, 0)) != 0 && ret == 0)
+ /* Release replication block. */
+ if (handle_check && (t_ret = __env_db_rep_exit(dbenv)) != 0 && ret == 0)
ret = t_ret;
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
-#else /* !HAVE_SEQUENCE */
+/*
+ * __seq_chk_cachesize --
+ * Validate the cache size vs. the range.
+ */
+static int
+__seq_chk_cachesize(dbenv, cachesize, max, min)
+ DB_ENV *dbenv;
+ int32_t cachesize;
+ db_seq_t max, min;
+{
+ /*
+ * It's an error to specify caches larger than the sequence range.
+ *
+ * The min and max of the range can be either positive or negative,
+ * the difference will fit in an unsigned variable of the same type.
+ * Assume a 2's complement machine, and simply subtract.
+ */
+ if ((u_int32_t)cachesize > (u_int64_t)max - (u_int64_t)min) {
+ __db_errx(dbenv,
+ "Number of items to be cached is larger than the sequence range");
+ return (EINVAL);
+ }
+ return (0);
+}
+
+#else /* !HAVE_64BIT_TYPES */
int
db_sequence_create(seqp, dbp, flags)
@@ -644,8 +884,8 @@ db_sequence_create(seqp, dbp, flags)
{
COMPQUIET(seqp, NULL);
COMPQUIET(flags, 0);
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"library build did not include support for sequences");
return (DB_OPNOTSUP);
}
-#endif /* HAVE_SEQUENCE */
+#endif /* HAVE_64BIT_TYPES */
diff --git a/db/tcl/docs/db.html b/db/tcl/docs/db.html
index db8382b75..91a5e6542 100644
--- a/db/tcl/docs/db.html
+++ b/db/tcl/docs/db.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
diff --git a/db/tcl/docs/env.html b/db/tcl/docs/env.html
index 3203a02b8..cb73bed10 100644
--- a/db/tcl/docs/env.html
+++ b/db/tcl/docs/env.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<html>
<head>
@@ -181,11 +181,6 @@ 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>
@@ -241,7 +236,7 @@ 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>
+<a href="../../docs/api_c/rep_transport.html">DBENV->rep_set_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>
diff --git a/db/tcl/docs/historic.html b/db/tcl/docs/historic.html
index f5a43e14d..72b40b489 100644
--- a/db/tcl/docs/historic.html
+++ b/db/tcl/docs/historic.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
diff --git a/db/tcl/docs/index.html b/db/tcl/docs/index.html
index 4f4e1e90c..7acf4d1ed 100644
--- a/db/tcl/docs/index.html
+++ b/db/tcl/docs/index.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
diff --git a/db/tcl/docs/library.html b/db/tcl/docs/library.html
index 217213ed8..35ce8cf15 100644
--- a/db/tcl/docs/library.html
+++ b/db/tcl/docs/library.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
diff --git a/db/tcl/docs/lock.html b/db/tcl/docs/lock.html
index 75e0bb2de..d418519ff 100644
--- a/db/tcl/docs/lock.html
+++ b/db/tcl/docs/lock.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<html>
<head>
diff --git a/db/tcl/docs/log.html b/db/tcl/docs/log.html
index 5fdd132d5..0cda2bc47 100644
--- a/db/tcl/docs/log.html
+++ b/db/tcl/docs/log.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
diff --git a/db/tcl/docs/mpool.html b/db/tcl/docs/mpool.html
index 83c1f452c..59372aa34 100644
--- a/db/tcl/docs/mpool.html
+++ b/db/tcl/docs/mpool.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
diff --git a/db/tcl/docs/rep.html b/db/tcl/docs/rep.html
index d50b62375..2f1ee7a58 100644
--- a/db/tcl/docs/rep.html
+++ b/db/tcl/docs/rep.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<html>
<head>
diff --git a/db/tcl/docs/test.html b/db/tcl/docs/test.html
index a01140183..f714beb37 100644
--- a/db/tcl/docs/test.html
+++ b/db/tcl/docs/test.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<HTML>
<HEAD>
@@ -100,51 +100,5 @@ deletion process.</LI>
call in deletion</LI>
</UL>
-<HR WIDTH="100%">
-<BR><B>> &lt;env> mutex <I>mode nitems</I></B>
-<P>This command creates a mutex region for testing.&nbsp; It sets the mode
-of the region to <B><I>mode</I></B> and sets up for <B><I>nitems</I></B>
-number of mutex entries.&nbsp; After we successfully get a handle to a
-mutex we create a command of the form <B><I>$env.mutexX</I></B>, where
-X is an integer starting at&nbsp; 0 (e.g. <B>$env.mutex0, $env.mutex1,
-</B>etc).&nbsp;&nbsp;
-We use the <I>Tcl_CreateObjCommand()&nbsp;</I> to create the top level
-mutex function.&nbsp; It is through this handle that the user can access
-all of the commands described below.&nbsp; Internally, the mutex handle
-is sent as the <I>ClientData</I> portion of the new command set so that
-all future mutex calls access the appropriate handle.
-<P>
-<HR WIDTH="100%"><B>> &lt;mutex> close</B>
-<P>This command closes the mutex and renders the handle invalid.&nbsp;&nbsp;
-This command directly translates to the __db_r_detach function call.&nbsp;
-It returns either a 0 (for success),&nbsp; 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
-that further uses of the handle will be dealt with properly by Tcl itself.&nbsp;
-<HR WIDTH="100%"><B>> &lt;mutex> get <I>id</I></B>
-<P>This command locks the mutex identified by <B><I>id</I></B>.&nbsp; It
-returns either a 0 (for success),&nbsp; or it throws a Tcl error with a
-system message.
-<BR>
-<HR WIDTH="100%"><B>> &lt;mutex> release <I>id</I></B>
-<P>This command releases the mutex identified by <B><I>id</I></B>.&nbsp;
-It returns either a 0 (for success),&nbsp; or it throws a Tcl error with
-a system message.
-<BR>
-<HR WIDTH="100%"><B>> &lt;mutex> getval <I>id</I></B>
-<P>This command gets the value stored for the mutex identified by <B><I>id</I></B>.&nbsp;
-It returns either the value,&nbsp; or it throws a Tcl error with a system
-message.
-<BR>
-<HR WIDTH="100%"><B>> &lt;mutex> setval <I>id val</I></B>
-<P>This command sets the value stored for the mutex identified by <B><I>id
-</I></B>to
-<B><I>val</I></B>.&nbsp;
-It returns either a 0 (for success),&nbsp; or it throws a Tcl error with
-a system message.
-<BR>
-<HR WIDTH="100%">
-<BR>&nbsp;
</BODY>
</HTML>
diff --git a/db/tcl/docs/txn.html b/db/tcl/docs/txn.html
index 8abef4b31..27892d3ea 100644
--- a/db/tcl/docs/txn.html
+++ b/db/tcl/docs/txn.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2004 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2006 by Oracle Corporation.-->
<!--All rights reserved.-->
<html>
<head>
diff --git a/db/tcl/tcl_compat.c b/db/tcl/tcl_compat.c
index 8b518f761..79c63aa8c 100644
--- a/db/tcl/tcl_compat.c
+++ b/db/tcl/tcl_compat.c
@@ -1,28 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_compat.c,v 11.46 2004/10/07 16:48:39 bostic Exp $
+ * $Id: tcl_compat.c,v 12.4 2006/08/24 14:46:32 bostic Exp $
*/
#include "db_config.h"
-
#ifdef CONFIG_TEST
+#define DB_DBM_HSEARCH 1
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#define DB_DBM_HSEARCH 1
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
/*
diff --git a/db/tcl/tcl_db.c b/db/tcl/tcl_db.c
index f60be3f43..9de948ea6 100644
--- a/db/tcl/tcl_db.c
+++ b/db/tcl/tcl_db.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_db.c,v 11.145 2004/10/07 16:48:39 bostic Exp $
+ * $Id: tcl_db.c,v 12.23 2006/08/24 14:46:32 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
#include "dbinc/tcl_db.h"
@@ -37,6 +32,11 @@ static int tcl_DbKeyRange __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
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 *));
+#ifdef CONFIG_TEST
+static int tcl_DbCompact __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
+static int tcl_DbCompactStat __P((Tcl_Interp *,
+ int, Tcl_Obj * CONST*, DB *));
+#endif
static int tcl_DbCursor __P((Tcl_Interp *,
int, Tcl_Obj * CONST*, DB *, DBC **));
static int tcl_DbJoin __P((Tcl_Interp *,
@@ -99,6 +99,8 @@ db_Cmd(clientData, interp, objc, objv)
"pget",
"rpcid",
"test",
+ "compact",
+ "compact_stat",
#endif
"associate",
"close",
@@ -139,6 +141,8 @@ db_Cmd(clientData, interp, objc, objv)
DBPGET,
DBRPCID,
DBTEST,
+ DBCOMPACT,
+ DBCOMPACT_STAT,
#endif
DBASSOCIATE,
DBCLOSE,
@@ -235,6 +239,15 @@ db_Cmd(clientData, interp, objc, objv)
case DBTEST:
result = tcl_EnvTest(interp, objc, objv, dbp->dbenv);
break;
+
+ case DBCOMPACT:
+ result = tcl_DbCompact(interp, objc, objv, dbp);
+ break;
+
+ case DBCOMPACT_STAT:
+ result = tcl_DbCompactStat(interp, objc, objv, dbp);
+ break;
+
#endif
case DBASSOCIATE:
result = tcl_DbAssociate(interp, objc, objv, dbp);
@@ -539,8 +552,8 @@ tcl_DbStat(interp, objc, objv, dbp)
{
static const char *dbstatopts[] = {
#ifdef CONFIG_TEST
- "-degree_2",
- "-dirty",
+ "-read_committed",
+ "-read_uncommitted",
#endif
"-faststat",
"-txn",
@@ -548,8 +561,8 @@ tcl_DbStat(interp, objc, objv, dbp)
};
enum dbstatopts {
#ifdef CONFIG_TEST
- DBCUR_DEGREE2,
- DBCUR_DIRTY,
+ DBCUR_READ_COMMITTED,
+ DBCUR_READ_UNCOMMITTED,
#endif
DBCUR_FASTSTAT,
DBCUR_TXN
@@ -579,11 +592,11 @@ tcl_DbStat(interp, objc, objv, dbp)
i++;
switch ((enum dbstatopts)optindex) {
#ifdef CONFIG_TEST
- case DBCUR_DEGREE2:
- flag |= DB_DEGREE_2;
+ case DBCUR_READ_COMMITTED:
+ flag |= DB_READ_COMMITTED;
break;
- case DBCUR_DIRTY:
- flag |= DB_DIRTY_READ;
+ case DBCUR_READ_UNCOMMITTED:
+ flag |= DB_READ_UNCOMMITTED;
break;
#endif
case DBCUR_FASTSTAT:
@@ -775,6 +788,8 @@ tcl_DbClose(interp, objc, objv, dbp, dbip)
if (endarg)
break;
}
+ if (dbip->i_cdata != NULL)
+ __os_free(dbp->dbenv, dbip->i_cdata);
_DbInfoDelete(interp, dbip);
_debug_check();
@@ -801,7 +816,6 @@ tcl_DbPut(interp, objc, objv, dbp)
"-nodupdata",
#endif
"-append",
- "-auto_commit",
"-nooverwrite",
"-partial",
"-txn",
@@ -812,7 +826,6 @@ tcl_DbPut(interp, objc, objv, dbp)
DBGET_NODUPDATA,
#endif
DBPUT_APPEND,
- DBPUT_AUTO_COMMIT,
DBPUT_NOOVER,
DBPUT_PART,
DBPUT_TXN
@@ -828,7 +841,7 @@ tcl_DbPut(interp, objc, objv, dbp)
void *dtmp, *ktmp;
db_recno_t recno;
u_int32_t flag;
- int auto_commit, elemc, end, freekey, freedata;
+ int elemc, end, freekey, freedata;
int i, optindex, result, ret;
char *arg, msg[MSG_SIZE];
@@ -881,7 +894,6 @@ 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)
@@ -909,9 +921,6 @@ 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;
@@ -986,8 +995,6 @@ tcl_DbPut(interp, objc, objv, dbp)
}
key.data = ktmp;
}
- if (auto_commit)
- flag |= DB_AUTO_COMMIT;
ret = _CopyObjBytes(interp, objv[objc-1], &dtmp, &data.size, &freedata);
if (ret != 0) {
result = _ReturnSetup(interp, ret,
@@ -1026,11 +1033,11 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
{
static const char *dbgetopts[] = {
#ifdef CONFIG_TEST
- "-degree2",
- "-dirty",
+ "-data_buf_size",
"-multi",
+ "-read_committed",
+ "-read_uncommitted",
#endif
- "-auto_commit",
"-consume",
"-consume_wait",
"-get_both",
@@ -1044,11 +1051,11 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
};
enum dbgetopts {
#ifdef CONFIG_TEST
- DBGET_DEGREE2,
- DBGET_DIRTY,
+ DBGET_DATA_BUF_SIZE,
DBGET_MULTI,
+ DBGET_READ_COMMITTED,
+ DBGET_READ_UNCOMMITTED,
#endif
- DBGET_AUTO_COMMIT,
DBGET_CONSUME,
DBGET_CONSUME_WAIT,
DBGET_BOTH,
@@ -1065,24 +1072,25 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
DB_TXN *txn;
Tcl_Obj **elemv, *retlist;
db_recno_t precno, recno;
- u_int32_t aflag, flag, cflag, isdup, mflag, rmw;
+ u_int32_t 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];
void *dtmp, *ktmp;
#ifdef CONFIG_TEST
- int bufsize;
+ int bufsize, data_buf_size;
#endif
result = TCL_OK;
freekey = freedata = 0;
- aflag = cflag = endarg = flag = mflag = rmw = 0;
+ cflag = endarg = flag = mflag = rmw = 0;
useglob = userecno = 0;
txn = NULL;
pattern = prefix = NULL;
dtmp = ktmp = NULL;
#ifdef CONFIG_TEST
COMPQUIET(bufsize, 0);
+ data_buf_size = 0;
#endif
if (objc < 3) {
@@ -1118,23 +1126,28 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
i++;
switch ((enum dbgetopts)optindex) {
#ifdef CONFIG_TEST
- case DBGET_DIRTY:
- rmw |= DB_DIRTY_READ;
- break;
- case DBGET_DEGREE2:
- rmw |= DB_DEGREE_2;
+ case DBGET_DATA_BUF_SIZE:
+ result =
+ Tcl_GetIntFromObj(interp, objv[i], &data_buf_size);
+ if (result != TCL_OK)
+ goto out;
+ i++;
break;
case DBGET_MULTI:
mflag |= DB_MULTIPLE;
- result = Tcl_GetIntFromObj(interp, objv[i], &bufsize);
+ result =
+ Tcl_GetIntFromObj(interp, objv[i], &bufsize);
if (result != TCL_OK)
goto out;
i++;
break;
-#endif
- case DBGET_AUTO_COMMIT:
- aflag |= DB_AUTO_COMMIT;
+ case DBGET_READ_COMMITTED:
+ rmw |= DB_READ_COMMITTED;
+ break;
+ case DBGET_READ_UNCOMMITTED:
+ rmw |= DB_READ_UNCOMMITTED;
break;
+#endif
case DBGET_BOTH:
/*
* Change 'end' and make sure we aren't already past
@@ -1276,6 +1289,22 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
result = TCL_ERROR;
goto out;
}
+#ifdef CONFIG_TEST
+ if (data_buf_size != 0 && flag == DB_GET_BOTH) {
+ Tcl_SetResult(interp,
+ "Only one of -data_buf_size or -get_both can be specified.\n",
+ TCL_STATIC);
+ result = TCL_ERROR;
+ goto out;
+ }
+ if (data_buf_size != 0 && mflag != 0) {
+ Tcl_SetResult(interp,
+ "Only one of -data_buf_size or -multi can be specified.\n",
+ TCL_STATIC);
+ result = TCL_ERROR;
+ goto out;
+ }
+#endif
if (useglob && flag == DB_GET_BOTH) {
Tcl_SetResult(interp,
"Only one of -glob or -get_both can be specified.\n",
@@ -1309,8 +1338,23 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
* instead of a cursor operation.
*/
if (pattern == NULL && (isdup == 0 || mflag != 0 ||
+#ifdef CONFIG_TEST
+ data_buf_size != 0 ||
+#endif
flag == DB_SET_RECNO || flag == DB_GET_BOTH ||
flag == DB_CONSUME || flag == DB_CONSUME_WAIT)) {
+#ifdef CONFIG_TEST
+ if (data_buf_size == 0) {
+ F_CLR(&save, DB_DBT_USERMEM);
+ F_SET(&save, DB_DBT_MALLOC);
+ } else {
+ (void)__os_malloc(
+ NULL, (size_t)data_buf_size, &save.data);
+ save.ulen = (u_int32_t)data_buf_size;
+ F_CLR(&save, DB_DBT_MALLOC);
+ F_SET(&save, DB_DBT_USERMEM);
+ }
+#endif
if (flag == DB_GET_BOTH) {
if (userecno) {
result = _GetUInt32(interp,
@@ -1327,14 +1371,14 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
* the allocated key space in a tmp.
*/
ret = _CopyObjBytes(interp, objv[objc-2],
- &ktmp, &key.size, &freekey);
+ &key.data, &key.size, &freekey);
if (ret != 0) {
result = _ReturnSetup(interp, ret,
DB_RETOK_DBGET(ret), "db get");
goto out;
}
- key.data = ktmp;
}
+ ktmp = key.data;
/*
* Already checked args above. Fill in key and save.
* Save is used in the dbp->get call below to fill in
@@ -1378,14 +1422,14 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
* the allocated key space in a tmp.
*/
ret = _CopyObjBytes(interp, objv[objc-1],
- &ktmp, &key.size, &freekey);
+ &key.data, &key.size, &freekey);
if (ret != 0) {
result = _ReturnSetup(interp, ret,
DB_RETOK_DBGET(ret), "db get");
goto out;
}
- key.data = ktmp;
}
+ ktmp = key.data;
#ifdef CONFIG_TEST
if (mflag & DB_MULTIPLE) {
if ((ret = __os_malloc(dbp->dbenv,
@@ -1417,7 +1461,7 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
} else {
_debug_check();
ret = dbp->get(dbp,
- txn, &key, &data, flag | aflag | rmw | mflag);
+ txn, &key, &data, flag | rmw | mflag);
}
result = _ReturnSetup(interp, ret, DB_RETOK_DBGET(ret),
"db get");
@@ -1487,15 +1531,15 @@ tcl_DbGet(interp, objc, objv, dbp, ispget)
* key pointers. So, we need to store
* the allocated key space in a tmp.
*/
- ret = _CopyObjBytes(interp, objv[objc-1], &ktmp,
+ ret = _CopyObjBytes(interp, objv[objc-1], &key.data,
&key.size, &freekey);
if (ret != 0) {
result = _ReturnSetup(interp, ret,
DB_RETOK_DBGET(ret), "db get");
return (result);
}
- key.data = ktmp;
}
+ ktmp = key.data;
ret = dbp->cursor(dbp, txn, &dbc, 0);
result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db cursor");
if (result == TCL_ERROR)
@@ -1634,13 +1678,11 @@ tcl_DbDelete(interp, objc, objv, dbp)
DB *dbp; /* Database pointer */
{
static const char *dbdelopts[] = {
- "-auto_commit",
"-glob",
"-txn",
NULL
};
enum dbdelopts {
- DBDEL_AUTO_COMMIT,
DBDEL_GLOB,
DBDEL_TXN
};
@@ -1656,7 +1698,6 @@ tcl_DbDelete(interp, objc, objv, dbp)
result = TCL_OK;
freekey = 0;
- flag = 0;
pattern = prefix = NULL;
txn = NULL;
if (objc < 3) {
@@ -1667,17 +1708,17 @@ tcl_DbDelete(interp, objc, objv, dbp)
ktmp = NULL;
memset(&key, 0, sizeof(key));
/*
- * The first arg must be -auto_commit, -glob, -txn or a list of keys.
+ * The first arg must be -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 -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 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 (IS_HELP(objv[i]) == TCL_OK)
return (TCL_OK);
@@ -1704,9 +1745,6 @@ 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
@@ -1741,8 +1779,6 @@ tcl_DbDelete(interp, objc, objv, dbp)
*
* 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) {
if (i != (objc - 1)) {
@@ -1758,13 +1794,6 @@ tcl_DbDelete(interp, objc, objv, dbp)
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;
- }
}
/*
@@ -1796,7 +1825,7 @@ tcl_DbDelete(interp, objc, objv, dbp)
key.data = ktmp;
}
_debug_check();
- ret = dbp->del(dbp, txn, &key, flag);
+ ret = dbp->del(dbp, txn, &key, 0);
/*
* If we have any error, set up return result and stop
* processing keys.
@@ -1889,8 +1918,8 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
{
static const char *dbcuropts[] = {
#ifdef CONFIG_TEST
- "-degree_2",
- "-dirty",
+ "-read_committed",
+ "-read_uncommitted",
"-update",
#endif
"-txn",
@@ -1898,8 +1927,8 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
};
enum dbcuropts {
#ifdef CONFIG_TEST
- DBCUR_DEGREE2,
- DBCUR_DIRTY,
+ DBCUR_READ_COMMITTED,
+ DBCUR_READ_UNCOMMITTED,
DBCUR_UPDATE,
#endif
DBCUR_TXN
@@ -1922,11 +1951,11 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
i++;
switch ((enum dbcuropts)optindex) {
#ifdef CONFIG_TEST
- case DBCUR_DEGREE2:
- flag |= DB_DEGREE_2;
+ case DBCUR_READ_COMMITTED:
+ flag |= DB_READ_COMMITTED;
break;
- case DBCUR_DIRTY:
- flag |= DB_DIRTY_READ;
+ case DBCUR_READ_UNCOMMITTED:
+ flag |= DB_READ_UNCOMMITTED;
break;
case DBCUR_UPDATE:
flag |= DB_WRITECURSOR;
@@ -1974,14 +2003,14 @@ tcl_DbAssociate(interp, objc, objv, dbp)
DB *dbp;
{
static const char *dbaopts[] = {
- "-auto_commit",
"-create",
+ "-immutable_key",
"-txn",
NULL
};
enum dbaopts {
- DBA_AUTO_COMMIT,
DBA_CREATE,
+ DBA_IMMUTABLE_KEY,
DBA_TXN
};
DB *sdbp;
@@ -2037,12 +2066,12 @@ tcl_DbAssociate(interp, objc, objv, dbp)
}
i++;
switch ((enum dbaopts)optindex) {
- case DBA_AUTO_COMMIT:
- flag |= DB_AUTO_COMMIT;
- break;
case DBA_CREATE:
flag |= DB_CREATE;
break;
+ case DBA_IMMUTABLE_KEY:
+ flag |= DB_IMMUTABLE_KEY;
+ break;
case DBA_TXN:
if (i > (objc - 1)) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
@@ -2190,7 +2219,7 @@ tcl_second_call(dbp, pkey, data, skey)
Tcl_DecrRefCount(dobj);
if (result != TCL_OK) {
- __db_err(dbp->dbenv,
+ __db_errx(dbp->dbenv,
"Tcl callback function failed with code %d", result);
return (EINVAL);
}
@@ -2549,15 +2578,15 @@ tcl_DbGetOpenFlags(interp, objc, objv, dbp)
u_int32_t flag;
char *arg;
} open_flags[] = {
- { DB_AUTO_COMMIT, "-auto_commit" },
- { DB_CREATE, "-create" },
- { DB_DEGREE_2, "-degree_2" },
- { DB_DIRTY_READ, "-dirty" },
- { DB_EXCL, "-excl" },
- { DB_NOMMAP, "-nommap" },
- { DB_RDONLY, "-rdonly" },
- { DB_THREAD, "-thread" },
- { DB_TRUNCATE, "-truncate" },
+ { DB_AUTO_COMMIT, "-auto_commit" },
+ { DB_CREATE, "-create" },
+ { DB_EXCL, "-excl" },
+ { DB_NOMMAP, "-nommap" },
+ { DB_RDONLY, "-rdonly" },
+ { DB_READ_COMMITTED, "-read_committed" },
+ { DB_READ_UNCOMMITTED, "-read_uncommitted" },
+ { DB_THREAD, "-thread" },
+ { DB_TRUNCATE, "-truncate" },
{ 0, NULL }
};
@@ -2805,22 +2834,19 @@ tcl_DbTruncate(interp, objc, objv, dbp)
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;
+ u_int32_t count;
int i, optindex, result, ret;
char *arg, msg[MSG_SIZE];
txn = NULL;
- flag = 0;
result = TCL_OK;
i = 2;
@@ -2832,9 +2858,6 @@ tcl_DbTruncate(interp, objc, objv, dbp)
}
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?");
@@ -2858,7 +2881,7 @@ tcl_DbTruncate(interp, objc, objv, dbp)
goto out;
_debug_check();
- ret = dbp->truncate(dbp, txn, &count, flag);
+ ret = dbp->truncate(dbp, txn, &count, 0);
if (ret != 0)
result = _ErrorSetup(interp, ret, "db truncate");
@@ -2869,3 +2892,280 @@ tcl_DbTruncate(interp, objc, objv, dbp)
out:
return (result);
}
+
+#ifdef CONFIG_TEST
+/*
+ * tcl_DbCompact --
+ */
+static int
+tcl_DbCompact(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[] = {
+ "-fillpercent",
+ "-freespace",
+ "-freeonly",
+ "-pages",
+ "-start",
+ "-stop",
+ "-timeout",
+ "-txn",
+ NULL
+ };
+ enum dbcuropts {
+ DBREORG_FILLFACTOR,
+ DBREORG_FREESPACE,
+ DBREORG_FREEONLY,
+ DBREORG_PAGES,
+ DBREORG_START,
+ DBREORG_STOP,
+ DBREORG_TIMEOUT,
+ DBREORG_TXN
+ };
+ DBTCL_INFO *ip;
+ DBT *key, end, start, stop;
+ DBTYPE type;
+ DB_TXN *txn;
+ Tcl_Obj *myobj, *retlist;
+ db_recno_t recno, srecno;
+ u_int32_t arg, fillfactor, flags, pages, timeout;
+ char *carg, msg[MSG_SIZE];
+ int freekey, i, optindex, result, ret;
+ void *kp;
+
+ flags = 0;
+ result = TCL_OK;
+ txn = NULL;
+ (void)dbp->get_type(dbp, &type);
+ memset(&start, 0, sizeof(start));
+ memset(&stop, 0, sizeof(stop));
+ memset(&end, 0, sizeof(end));
+ ip = (DBTCL_INFO *)dbp->api_internal;
+ fillfactor = pages = timeout = 0;
+
+ 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 DBREORG_FILLFACTOR:
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp,
+ 2, objv, "?-fillfactor number?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &arg);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ fillfactor = arg;
+ break;
+ case DBREORG_FREESPACE:
+ LF_SET(DB_FREE_SPACE);
+ break;
+
+ case DBREORG_FREEONLY:
+ LF_SET(DB_FREELIST_ONLY);
+ break;
+
+ case DBREORG_PAGES:
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp,
+ 2, objv, "?-pages number?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &arg);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ pages = arg;
+ break;
+ case DBREORG_TIMEOUT:
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp,
+ 2, objv, "?-timeout number?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &arg);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ timeout = arg;
+ break;
+
+ case DBREORG_START:
+ case DBREORG_STOP:
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp, 1, objv,
+ "?-args? -start/stop key");
+ result = TCL_ERROR;
+ goto out;
+ }
+ if ((enum dbcuropts)optindex == DBREORG_START) {
+ key = &start;
+ key->data = &recno;
+ } else {
+ key = &stop;
+ key->data = &srecno;
+ }
+ if (type == DB_RECNO || type == DB_QUEUE) {
+ result = _GetUInt32(
+ interp, objv[i], key->data);
+ if (result == TCL_OK) {
+ key->size = sizeof(db_recno_t);
+ } else
+ goto out;
+ } else {
+ ret = _CopyObjBytes(interp, objv[i],
+ &key->data, &key->size, &freekey);
+ if (ret != 0)
+ goto err;
+ if (freekey == 0) {
+ if ((ret = __os_malloc(NULL,
+ key->size, &kp)) != 0)
+ goto err;
+
+ memcpy(kp, key->data, key->size);
+ key->data = kp;
+ key->ulen = key->size;
+ }
+ }
+ i++;
+ break;
+ case DBREORG_TXN:
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ carg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(carg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Compact: Invalid txn: %s\n", carg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ }
+ if (result != TCL_OK)
+ break;
+ }
+ if (result != TCL_OK)
+ goto out;
+
+ if (ip->i_cdata == NULL)
+ if ((ret = __os_calloc(dbp->dbenv,
+ 1, sizeof(DB_COMPACT), &ip->i_cdata)) != 0) {
+ Tcl_SetResult(interp,
+ db_strerror(ret), TCL_STATIC);
+ goto out;
+ }
+
+ ip->i_cdata->compact_fillpercent = fillfactor;
+ ip->i_cdata->compact_timeout = timeout;
+ ip->i_cdata->compact_pages = pages;
+
+ _debug_check();
+ ret = dbp->compact(dbp, txn, &start, &stop, ip->i_cdata, flags, &end);
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBCGET(ret), "dbp compact");
+ if (result == TCL_ERROR)
+ goto out;
+
+ retlist = Tcl_NewListObj(0, NULL);
+ if (ret != 0)
+ goto out;
+ if (type == DB_RECNO || type == DB_QUEUE) {
+ if (end.size == 0)
+ recno = 0;
+ else
+ recno = *((db_recno_t *)end.data);
+ myobj = Tcl_NewWideIntObj((Tcl_WideInt)recno);
+ } else
+ myobj = Tcl_NewByteArrayObj(end.data, (int)end.size);
+ result = Tcl_ListObjAppendElement(interp, retlist, myobj);
+ if (result == TCL_OK)
+ Tcl_SetObjResult(interp, retlist);
+
+ if (0) {
+err: result = _ReturnSetup(interp,
+ ret, DB_RETOK_DBCGET(ret), "dbc compact");
+ }
+out:
+ if (start.data != NULL && start.data != &recno)
+ __os_free(NULL, start.data);
+ if (stop.data != NULL && stop.data != &srecno)
+ __os_free(NULL, stop.data);
+ if (end.data != NULL)
+ __os_free(NULL, end.data);
+
+ return (result);
+}
+
+/*
+ * tcl_DbCompactStat
+ */
+static int
+tcl_DbCompactStat(interp, objc, objv, dbp)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB *dbp; /* Database pointer */
+{
+ DBTCL_INFO *ip;
+
+ COMPQUIET(objc, 0);
+ COMPQUIET(objv, NULL);
+
+ ip = (DBTCL_INFO *)dbp->api_internal;
+
+ return (tcl_CompactStat(interp, ip));
+}
+
+/*
+ * PUBLIC: int tcl_CompactStat __P((Tcl_Interp *, DBTCL_INFO *));
+ */
+int
+tcl_CompactStat(interp, ip)
+ Tcl_Interp *interp; /* Interpreter */
+ DBTCL_INFO *ip;
+{
+ DB_COMPACT *rp;
+ Tcl_Obj *res;
+ int result;
+ char msg[MSG_SIZE];
+
+ result = TCL_OK;
+ rp = NULL;
+
+ _debug_check();
+ if ((rp = ip->i_cdata) == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Compact stat: No stats available\n");
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ goto error;
+ }
+
+ res = Tcl_NewObj();
+
+ MAKE_STAT_LIST("Pages freed", rp->compact_pages_free);
+ MAKE_STAT_LIST("Pages truncated", rp->compact_pages_truncated);
+ MAKE_STAT_LIST("Pages examined", rp->compact_pages_examine);
+ MAKE_STAT_LIST("Levels removed", rp->compact_levels);
+ MAKE_STAT_LIST("Deadlocks encountered", rp->compact_deadlock);
+
+ Tcl_SetObjResult(interp, res);
+error:
+ return (result);
+}
+#endif
diff --git a/db/tcl/tcl_db_pkg.c b/db/tcl/tcl_db_pkg.c
index ce55df842..398507b4b 100644
--- a/db/tcl/tcl_db_pkg.c
+++ b/db/tcl/tcl_db_pkg.c
@@ -1,27 +1,22 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_db_pkg.c,v 11.190 2004/10/27 16:48:32 bostic Exp $
+ * $Id: tcl_db_pkg.c,v 12.36 2006/09/08 19:22:21 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <tcl.h>
-#endif
-
#ifdef CONFIG_TEST
-#define DB_DBM_HSEARCH 1
+#define DB_DBM_HSEARCH 1
#endif
#include "db_int.h"
+#ifndef NO_SYSTEM_INCLUDES
+#include <tcl.h>
+#endif
#include "dbinc/db_page.h"
#include "dbinc/hash.h"
#include "dbinc/tcl_db.h"
@@ -41,12 +36,16 @@ static int bdb_DbOpen __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
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*));
+
+#ifdef HAVE_64BIT_TYPES
static int bdb_SeqOpen __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
DBTCL_INFO *, DB_SEQUENCE **));
+#endif
#ifdef 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_GetConfig __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
static int bdb_Handles __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
static int bdb_MsgType __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
@@ -58,8 +57,6 @@ 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
/*
@@ -124,6 +121,7 @@ berkdb_Cmd(notused, interp, objc, objv)
static const char *berkdbcmds[] = {
#ifdef CONFIG_TEST
"dbverify",
+ "getconfig",
"handles",
"msgtype",
"upgrade",
@@ -133,7 +131,7 @@ berkdb_Cmd(notused, interp, objc, objv)
"env",
"envremove",
"open",
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
"sequence",
#endif
"version",
@@ -155,6 +153,7 @@ berkdb_Cmd(notused, interp, objc, objv)
enum berkdbcmds {
#ifdef CONFIG_TEST
BDB_DBVERIFY,
+ BDB_GETCONFIG,
BDB_HANDLES,
BDB_MSGTYPE,
BDB_UPGRADE,
@@ -164,7 +163,7 @@ berkdb_Cmd(notused, interp, objc, objv)
BDB_ENV,
BDB_ENVREMOVE,
BDB_OPEN,
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
BDB_SEQUENCE,
#endif
BDB_VERSION,
@@ -179,12 +178,12 @@ berkdb_Cmd(notused, interp, objc, objv)
};
static int env_id = 0;
static int db_id = 0;
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
static int seq_id = 0;
#endif
DB *dbp;
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
DB_SEQUENCE *seq;
#endif
#ifdef CONFIG_TEST
@@ -220,6 +219,9 @@ berkdb_Cmd(notused, interp, objc, objv)
case BDB_DBVERIFY:
result = bdb_DbVerify(interp, objc, objv);
break;
+ case BDB_GETCONFIG:
+ result = bdb_GetConfig(interp, objc, objv);
+ break;
case BDB_HANDLES:
result = bdb_Handles(interp, objc, objv);
break;
@@ -285,7 +287,7 @@ berkdb_Cmd(notused, interp, objc, objv)
result = TCL_ERROR;
}
break;
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
case BDB_SEQUENCE:
snprintf(newname, sizeof(newname), "seq%d", seq_id);
ip = _NewInfo(interp, NULL, newname, I_SEQ);
@@ -391,15 +393,16 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
"-cdb",
"-cdb_alldb",
"-client_timeout",
+ "-event",
"-lock",
"-lock_conflict",
"-lock_detect",
- "-lock_max",
"-lock_max_locks",
"-lock_max_lockers",
"-lock_max_objects",
"-lock_timeout",
"-log",
+ "-log_filemode",
"-log_buffer",
"-log_inmemory",
"-log_max",
@@ -409,14 +412,17 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
"-mpool_max_write",
"-mpool_mmap_size",
"-mpool_nommap",
+ "-multiversion",
"-overwrite",
"-region_init",
+ "-rep",
"-rep_client",
"-rep_master",
"-rep_transport",
"-server",
"-server_timeout",
"-set_intermediate_dir",
+ "-snapshot",
"-thread",
"-time_notgranted",
"-txn_timeout",
@@ -437,6 +443,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
"-private",
"-recover",
"-recover_fatal",
+ "-register",
"-shm_key",
"-system_mem",
"-tmp_dir",
@@ -458,15 +465,16 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
ENV_CDB,
ENV_CDB_ALLDB,
ENV_CLIENT_TO,
+ ENV_EVENT,
ENV_LOCK,
ENV_CONFLICT,
ENV_DETECT,
- ENV_LOCK_MAX,
ENV_LOCK_MAX_LOCKS,
ENV_LOCK_MAX_LOCKERS,
ENV_LOCK_MAX_OBJECTS,
ENV_LOCK_TIMEOUT,
ENV_LOG,
+ ENV_LOG_FILEMODE,
ENV_LOG_BUFFER,
ENV_LOG_INMEMORY,
ENV_LOG_MAX,
@@ -476,14 +484,17 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
ENV_MPOOL_MAX_WRITE,
ENV_MPOOL_MMAP_SIZE,
ENV_MPOOL_NOMMAP,
+ ENV_MULTIVERSION,
ENV_OVERWRITE,
ENV_REGION_INIT,
+ ENV_REP,
ENV_REP_CLIENT,
ENV_REP_MASTER,
ENV_REP_TRANSPORT,
ENV_SERVER,
ENV_SERVER_TO,
ENV_SET_INTERMEDIATE_DIR,
+ ENV_SNAPSHOT,
ENV_THREAD,
ENV_TIME_NOTGRANTED,
ENV_TXN_TIMEOUT,
@@ -504,6 +515,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
ENV_PRIVATE,
ENV_RECOVER,
ENV_RECOVER_FATAL,
+ ENV_REGISTER,
ENV_SHM_KEY,
ENV_SYSTEM_MEM,
ENV_TMP_DIR,
@@ -545,8 +557,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
* Meanwhile, there's no strong reason to enable DB_THREAD when not
* testing.
*/
- open_flags = DB_JOINENV;
-
+ open_flags = 0;
logmaxset = logbufset = 0;
if (objc <= 2) {
@@ -615,21 +626,13 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
* From here on we must 'goto error' in order to clean up the
* env from db_env_create.
*/
- if (server != NULL) {
- (*env)->set_errpfx((*env), ip->i_name);
- (*env)->set_errcall((*env), _ErrorFunc);
- if ((ret = (*env)->set_rpc_server((*env), NULL, server,
- client_to, server_to, 0)) != 0) {
- result = TCL_ERROR;
- goto error;
- }
- } else {
- /*
- * Create the environment handle before parsing the args
- * since we'll be modifying the environment as we parse.
- */
- (*env)->set_errpfx((*env), ip->i_name);
- (*env)->set_errcall((*env), _ErrorFunc);
+ (*env)->set_errpfx((*env), ip->i_name);
+ (*env)->set_errcall((*env), _ErrorFunc);
+ if (server != NULL &&
+ (ret = (*env)->set_rpc_server((*env), NULL, server,
+ client_to, server_to, 0)) != 0) {
+ result = TCL_ERROR;
+ goto error;
}
/* Hang our info pointer on the env handle, so we can do callbacks. */
@@ -672,14 +675,12 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
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_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_CONFLICT:
/*
@@ -772,7 +773,15 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
"lock_detect");
break;
- case ENV_LOCK_MAX:
+ case ENV_EVENT:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "-event eventproc");
+ result = TCL_ERROR;
+ break;
+ }
+ result = tcl_EventNotify(interp, *env, objv[i++], ip);
+ break;
case ENV_LOCK_MAX_LOCKS:
case ENV_LOCK_MAX_LOCKERS:
case ENV_LOCK_MAX_OBJECTS:
@@ -786,10 +795,6 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
if (result == TCL_OK) {
_debug_check();
switch ((enum envopen)optindex) {
- case ENV_LOCK_MAX:
- ret = (*env)->set_lk_max(*env,
- uintarg);
- break;
case ENV_LOCK_MAX_LOCKS:
ret = (*env)->set_lk_max_locks(*env,
uintarg);
@@ -838,7 +843,6 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
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) {
@@ -865,6 +869,22 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
}
}
break;
+ case ENV_LOG_FILEMODE:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-log_filemode mode?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret =
+ (*env)->set_lg_filemode(*env, (int)uintarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "log_filemode");
+ }
+ break;
case ENV_LOG_INMEMORY:
FLD_SET(set_flags, DB_LOG_INMEMORY);
break;
@@ -962,6 +982,9 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
case ENV_MPOOL_NOMMAP:
FLD_SET(set_flags, DB_NOMMAP);
break;
+ case ENV_MULTIVERSION:
+ FLD_SET(set_flags, DB_MULTIVERSION);
+ break;
case ENV_OVERWRITE:
FLD_SET(set_flags, DB_OVERWRITE);
break;
@@ -987,6 +1010,9 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
DB_RETOK_STD(ret), "set_intermediate_dir");
}
break;
+ case ENV_REP:
+ FLD_SET(open_flags, DB_INIT_REP);
+ break;
case ENV_REP_CLIENT:
rep_flags = DB_REP_CLIENT;
FLD_SET(open_flags, DB_INIT_REP);
@@ -1002,49 +1028,19 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
result = TCL_ERROR;
break;
}
-
- /*
- * 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++],
+ 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)
+ if (result == TCL_OK)
+ i++;
+ else
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");
+ result = tcl_RepTransport(interp, myobjc, myobjv,
+ *env, ip);
+ if (result == TCL_OK)
+ FLD_SET(open_flags, DB_INIT_REP);
+ break;
+ case ENV_SNAPSHOT:
+ FLD_SET(set_flags, DB_TXN_SNAPSHOT);
break;
case ENV_THREAD:
/* Enable DB_THREAD when specified in testing. */
@@ -1076,19 +1072,21 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
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) {
+ while (i < objc) {
arg = Tcl_GetStringFromObj(objv[i], NULL);
if (strcmp(arg, "nosync") == 0) {
FLD_SET(set_flags, DB_TXN_NOSYNC);
i++;
- }
+ } else if (strcmp(arg, "snapshot") == 0) {
+ FLD_SET(set_flags, DB_TXN_SNAPSHOT);
+ i++;
+ } else
+ break;
}
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! */
@@ -1145,7 +1143,6 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
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);
@@ -1153,6 +1150,9 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
case ENV_RECOVER_FATAL:
FLD_SET(open_flags, DB_RECOVER_FATAL);
break;
+ case ENV_REGISTER:
+ FLD_SET(open_flags, DB_REGISTER);
+ break;
case ENV_SYSTEM_MEM:
FLD_SET(open_flags, DB_SYSTEM_MEM);
break;
@@ -1378,13 +1378,13 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
static const char *bdbopen[] = {
#ifdef CONFIG_TEST
"-btcompare",
- "-dirty",
"-dupcompare",
"-hashproc",
"-lorder",
"-minkey",
"-nommap",
"-notdurable",
+ "-read_uncommitted",
"-revsplitoff",
"-test",
"-thread",
@@ -1411,6 +1411,7 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
"-len",
"-maxsize",
"-mode",
+ "-multiversion",
"-nelem",
"-pad",
"-pagesize",
@@ -1430,13 +1431,13 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
enum bdbopen {
#ifdef 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_READ_UNCOMMITTED,
TCL_DB_REVSPLIT,
TCL_DB_TEST,
TCL_DB_THREAD,
@@ -1463,6 +1464,7 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
TCL_DB_LEN,
TCL_DB_MAXSIZE,
TCL_DB_MODE,
+ TCL_DB_MULTIVERSION,
TCL_DB_NELEM,
TCL_DB_PAD,
TCL_DB_PAGESIZE,
@@ -1624,9 +1626,6 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
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,
@@ -1701,6 +1700,9 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
case TCL_DB_NOTDURABLE:
set_flags |= DB_TXN_NOT_DURABLE;
break;
+ case TCL_DB_READ_UNCOMMITTED:
+ open_flags |= DB_READ_UNCOMMITTED;
+ break;
case TCL_DB_REVSPLIT:
set_flags |= DB_REVSPLITOFF;
break;
@@ -1876,6 +1878,9 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
DB_RETOK_STD(ret), "set_h_ffactor");
}
break;
+ case TCL_DB_MULTIVERSION:
+ open_flags |= DB_MULTIVERSION;
+ break;
case TCL_DB_NELEM:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
@@ -2102,6 +2107,8 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
* arrays for the subdb.
*/
db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(db, "") == 0)
+ db = NULL;
if (i != objc) {
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
@@ -2169,7 +2176,7 @@ error:
return (result);
}
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
/*
* bdb_SeqOpen --
* Implements the "Seq_create/Seq_open" command.
@@ -2183,7 +2190,6 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
DB_SEQUENCE **seqp; /* DB_SEQUENCE handle */
{
static const char *seqopen[] = {
- "-auto_commit",
"-cachesize",
"-create",
"-inc",
@@ -2191,13 +2197,13 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
"-dec",
"-max",
"-min",
+ "-thread",
"-txn",
"-wrap",
"--",
NULL
} ;
enum seqopen {
- TCL_SEQ_AUTO_COMMIT,
TCL_SEQ_CACHESIZE,
TCL_SEQ_CREATE,
TCL_SEQ_INC,
@@ -2205,6 +2211,7 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
TCL_SEQ_DEC,
TCL_SEQ_MAX,
TCL_SEQ_MIN,
+ TCL_SEQ_THREAD,
TCL_SEQ_TXN,
TCL_SEQ_WRAP,
TCL_SEQ_ENDARG
@@ -2215,12 +2222,14 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
DB_TXN *txn;
db_recno_t recno;
db_seq_t min, max, value;
+ Tcl_WideInt tcl_value;
u_int32_t flags, oflags;
int cache, endarg, i, optindex, result, ret, setrange, setvalue, v;
char *arg, *db, msg[MSG_SIZE];
COMPQUIET(ip, NULL);
COMPQUIET(value, 0);
+ *seqp = NULL;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?args?");
@@ -2250,9 +2259,6 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
i++;
result = TCL_OK;
switch ((enum seqopen)optindex) {
- case TCL_SEQ_AUTO_COMMIT:
- oflags |= DB_AUTO_COMMIT;
- break;
case TCL_SEQ_CREATE:
oflags |= DB_CREATE;
break;
@@ -2276,7 +2282,9 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
break;
}
result =
- Tcl_GetWideIntFromObj(interp, objv[i++], &value);
+ Tcl_GetWideIntFromObj(
+ interp, objv[i++], &tcl_value);
+ value = tcl_value;
setvalue = 1;
break;
case TCL_SEQ_DEC:
@@ -2291,8 +2299,9 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
}
if ((result =
Tcl_GetWideIntFromObj(interp,
- objv[i++], &max)) != TCL_OK)
+ objv[i++], &tcl_value)) != TCL_OK)
goto error;
+ max = tcl_value;
setrange = 1;
break;
case TCL_SEQ_MIN:
@@ -2304,10 +2313,14 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
}
if ((result =
Tcl_GetWideIntFromObj(interp,
- objv[i++], &min)) != TCL_OK)
+ objv[i++], &tcl_value)) != TCL_OK)
goto error;
+ min = tcl_value;
setrange = 1;
break;
+ case TCL_SEQ_THREAD:
+ oflags |= DB_THREAD;
+ break;
case TCL_SEQ_TXN:
if (i > (objc - 1)) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
@@ -2355,17 +2368,13 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
}
(void)dbp->get_type(dbp, &type);
- memset(&key, 0, sizeof(key));
if (type == DB_QUEUE || type == DB_RECNO) {
result = _GetUInt32(interp, objv[i++], &recno);
if (result != TCL_OK)
return (result);
- key.data = &recno;
- key.size = sizeof(recno);
- } else {
- key.data = Tcl_GetByteArrayFromObj(objv[i++], &v);
- key.size = (u_int32_t)v;
- }
+ DB_INIT_DBT(key, &recno, sizeof(recno));
+ } else
+ DB_INIT_DBT(key, Tcl_GetByteArrayFromObj(objv[i++], &v), v);
ret = db_sequence_create(seqp, dbp, 0);
if ((result = _ReturnSetup(interp,
ret, DB_RETOK_STD(ret), "sequence create")) != TCL_OK) {
@@ -2401,7 +2410,8 @@ bdb_SeqOpen(interp, objc, objv, ip, seqp)
goto error;
if (0) {
-error: (void)(*seqp)->close(*seqp, 0);
+error: if (*seqp != NULL)
+ (void)(*seqp)->close(*seqp, 0);
*seqp = NULL;
}
return (result);
@@ -2559,6 +2569,8 @@ bdb_DbRemove(interp, objc, objv)
* arrays for the subdb.
*/
db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(db, "") == 0)
+ db = NULL;
if (i != objc) {
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
@@ -2685,10 +2697,10 @@ bdb_DbRename(interp, objc, objv)
}
i++;
switch ((enum bdbmv)optindex) {
- case TCL_DBMV_AUTOCOMMIT:
- iflags |= DB_AUTO_COMMIT;
- _debug_check();
- break;
+ case TCL_DBMV_AUTOCOMMIT:
+ iflags |= DB_AUTO_COMMIT;
+ _debug_check();
+ break;
case TCL_DBMV_ENCRYPT:
set_flags |= DB_ENCRYPT;
_debug_check();
@@ -2766,6 +2778,8 @@ bdb_DbRename(interp, objc, objv)
* arrays for the subdb.
*/
db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(db, "") == 0)
+ db = NULL;
if (i == objc - 2) {
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
@@ -3125,6 +3139,70 @@ error:
#ifdef CONFIG_TEST
/*
+ * bdb_GetConfig --
+ * Implements the getconfig command.
+ */
+#define ADD_CONFIG_NAME(name) \
+ conf = NewStringObj(name, strlen(name)); \
+ if (Tcl_ListObjAppendElement(interp, res, conf) != TCL_OK) \
+ return (TCL_ERROR);
+
+static int
+bdb_GetConfig(interp, objc, objv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+{
+ Tcl_Obj *res, *conf;
+
+ /*
+ * No args. Error if we have some
+ */
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, "");
+ return (TCL_ERROR);
+ }
+ res = Tcl_NewListObj(0, NULL);
+ conf = NULL;
+
+ /*
+ * This command conditionally adds strings in based on
+ * how DB is configured so that the test suite can make
+ * decisions based on that. For now only implement the
+ * configuration pieces we need.
+ */
+#ifdef DEBUG
+ ADD_CONFIG_NAME("debug");
+#endif
+#ifdef DEBUG_ROP
+ ADD_CONFIG_NAME("debug_rop");
+#endif
+#ifdef DEBUG_WOP
+ ADD_CONFIG_NAME("debug_wop");
+#endif
+#ifdef HAVE_HASH
+ ADD_CONFIG_NAME("hash");
+#endif
+#ifdef HAVE_QUEUE
+ ADD_CONFIG_NAME("queue");
+#endif
+#ifdef HAVE_REPLICATION
+ ADD_CONFIG_NAME("rep");
+#endif
+#ifdef HAVE_REPLICATION_THREADS
+ ADD_CONFIG_NAME("repmgr");
+#endif
+#ifdef HAVE_RPC
+ ADD_CONFIG_NAME("rpc");
+#endif
+#ifdef HAVE_VERIFY
+ ADD_CONFIG_NAME("verify");
+#endif
+ Tcl_SetObjResult(interp, res);
+ return (TCL_OK);
+}
+
+/*
* bdb_Handles --
* Implements the handles command.
*/
@@ -3146,8 +3224,7 @@ bdb_Handles(interp, objc, objv)
}
res = Tcl_NewListObj(0, NULL);
- for (p = LIST_FIRST(&__db_infohead); p != NULL;
- p = LIST_NEXT(p, entries)) {
+ LIST_FOREACH(p, &__db_infohead, entries) {
handle = NewStringObj(p->i_name, strlen(p->i_name));
if (Tcl_ListObjAppendElement(interp, res, handle) != TCL_OK)
return (TCL_ERROR);
@@ -3178,10 +3255,12 @@ bdb_MsgType(interp, objc, objv)
*/
static const char *msgnames[] = {
"no_type", "alive", "alive_req", "all_req",
+ "bulk_log", "bulk_page",
"dupmaster", "file", "file_fail", "file_req", "log",
"log_more", "log_req", "master_req", "newclient",
"newfile", "newmaster", "newsite", "page",
- "page_fail", "page_req", "update", "update_req",
+ "page_fail", "page_more", "page_req",
+ "rerequest", "update", "update_req",
"verify", "verify_fail", "verify_req",
"vote1", "vote2", NULL
};
@@ -3194,7 +3273,7 @@ bdb_MsgType(interp, objc, objv)
return (TCL_ERROR);
}
- ret = _CopyObjBytes(interp, objv[2], (void **)&rp, &len, &freerp);
+ ret = _CopyObjBytes(interp, objv[2], &rp, &len, &freerp);
if (ret != TCL_OK) {
Tcl_SetResult(interp,
"msgtype: bad control message", TCL_STATIC);
@@ -3387,8 +3466,7 @@ tcl_compare_callback(dbp, dbta, dbtb, procobj, errname)
* 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);
+panic: __db_errx(dbp->dbenv, "Tcl %s callback failed", errname);
return (__db_panic(dbp->dbenv, DB_RUNRECOVERY));
}
@@ -3439,24 +3517,20 @@ tcl_h_hash(dbp, buf, len)
Tcl_DecrRefCount(objv[1]);
return ((u_int32_t)hval);
-panic: /*
- * We drop core on error, in diagnostic mode. See the comment in
- * tcl_compare_callback.
- */
- __db_err(dbp->dbenv, "Tcl h_hash callback failed");
- (void)__db_panic(dbp->dbenv, DB_RUNRECOVERY);
-
- DB_ASSERT(0);
+panic: __db_errx(dbp->dbenv, "Tcl h_hash callback failed");
- /* NOTREACHED */
+ (void)__db_panic(dbp->dbenv, DB_RUNRECOVERY);
return (0);
}
/*
* tcl_rep_send --
* Replication send callback.
+ *
+ * PUBLIC: int tcl_rep_send __P((DB_ENV *,
+ * PUBLIC: const DBT *, const DBT *, const DB_LSN *, int, u_int32_t));
*/
-static int
+int
tcl_rep_send(dbenv, control, rec, lsnp, eid, flags)
DB_ENV *dbenv;
const DBT *control, *rec;
@@ -3465,11 +3539,13 @@ tcl_rep_send(dbenv, control, rec, lsnp, eid, flags)
u_int32_t flags;
{
#define TCLDB_SENDITEMS 7
+#define TCLDB_MAXREPFLAGS 32
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;
+ Tcl_Obj *lsnobj[2], *myobjv[TCLDB_MAXREPFLAGS], *objv[TCLDB_SENDITEMS];
+ Tcl_Obj *resobj;
+ int i, myobjc, result, ret;
ip = (DBTCL_INFO *)dbenv->app_private;
interp = ip->i_interp;
@@ -3484,18 +3560,34 @@ tcl_rep_send(dbenv, control, rec, lsnp, eid, flags)
eid_o = Tcl_NewIntObj(eid);
Tcl_IncrRefCount(eid_o);
+ myobjv[myobjc = 0] = NULL;
+ if (flags == 0)
+ myobjv[myobjc++] = NewStringObj("none", strlen("none"));
+ if (LF_ISSET(DB_REP_ANYWHERE))
+ myobjv[myobjc++] = NewStringObj("any", strlen("any"));
+ if (LF_ISSET(DB_REP_NOBUFFER))
+ myobjv[myobjc++] = NewStringObj("nobuffer", strlen("nobuffer"));
if (LF_ISSET(DB_REP_PERMANENT))
- flags_o = NewStringObj("perm", strlen("perm"));
- else if (LF_ISSET(DB_REP_NOBUFFER))
- flags_o = NewStringObj("nobuffer", strlen("nobuffer"));
- else
- flags_o = NewStringObj("none", strlen("none"));
+ myobjv[myobjc++] = NewStringObj("perm", strlen("perm"));
+ if (LF_ISSET(DB_REP_REREQUEST))
+ myobjv[myobjc++] =
+ NewStringObj("rerequest", strlen("rerequest"));
+ /*
+ * If we're given an unrecognized flag send "unknown".
+ */
+ if (myobjc == 0)
+ myobjv[myobjc++] = NewStringObj("unknown", strlen("unknown"));
+ for (i = 0; i < myobjc; i++)
+ Tcl_IncrRefCount(myobjv[i]);
+ flags_o = Tcl_NewListObj(myobjc, myobjv);
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);
+ lsnobj[0] = Tcl_NewLongObj((long)lsnp->file);
+ Tcl_IncrRefCount(lsnobj[0]);
+ lsnobj[1] = Tcl_NewLongObj((long)lsnp->offset);
+ Tcl_IncrRefCount(lsnobj[1]);
+ lsn_o = Tcl_NewListObj(2, lsnobj);
+ Tcl_IncrRefCount(lsn_o);
objv[1] = control_o;
objv[2] = rec_o;
@@ -3520,7 +3612,7 @@ tcl_rep_send(dbenv, control, rec, lsnp, eid, flags)
* 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");
+err: __db_errx(dbenv, "Tcl rep_send failure");
return (EINVAL);
}
@@ -3534,7 +3626,12 @@ err: __db_err(dbenv, "Tcl rep_send failure");
Tcl_DecrRefCount(control_o);
Tcl_DecrRefCount(rec_o);
Tcl_DecrRefCount(eid_o);
+ for (i = 0; i < myobjc; i++)
+ Tcl_DecrRefCount(myobjv[i]);
Tcl_DecrRefCount(flags_o);
+ Tcl_DecrRefCount(lsnobj[0]);
+ Tcl_DecrRefCount(lsnobj[1]);
+ Tcl_DecrRefCount(lsn_o);
return (ret);
}
diff --git a/db/tcl/tcl_dbcursor.c b/db/tcl/tcl_dbcursor.c
index f0ca788f4..1e40afa83 100644
--- a/db/tcl/tcl_dbcursor.c
+++ b/db/tcl/tcl_dbcursor.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_dbcursor.c,v 11.65 2004/10/07 16:48:39 bostic Exp $
+ * $Id: tcl_dbcursor.c,v 12.11 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
/*
@@ -383,11 +378,13 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
{
static const char *dbcgetopts[] = {
#ifdef CONFIG_TEST
- "-degree_2",
- "-dirty",
+ "-data_buf_size",
"-get_both_range",
+ "-key_buf_size",
"-multi",
"-multi_key",
+ "-read_committed",
+ "-read_uncommitted",
#endif
"-current",
"-first",
@@ -409,11 +406,13 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
};
enum dbcgetopts {
#ifdef CONFIG_TEST
- DBCGET_DEGREE2,
- DBCGET_DIRTY,
+ DBCGET_DATA_BUF_SIZE,
DBCGET_BOTH_RANGE,
+ DBCGET_KEY_BUF_SIZE,
DBCGET_MULTI,
DBCGET_MULTI_KEY,
+ DBCGET_READ_COMMITTED,
+ DBCGET_READ_UNCOMMITTED,
#endif
DBCGET_CURRENT,
DBCGET_FIRST,
@@ -442,9 +441,9 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
u_int32_t flag, op;
int elemc, freekey, freedata, i, optindex, result, ret;
#ifdef CONFIG_TEST
- int bufsize;
+ int data_buf_size, key_buf_size;
- bufsize = 0;
+ data_buf_size = key_buf_size = 0;
#endif
COMPQUIET(dtmp, NULL);
COMPQUIET(ktmp, NULL);
@@ -452,14 +451,15 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
result = TCL_OK;
flag = 0;
freekey = freedata = 0;
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ memset(&pdata, 0, sizeof(DBT));
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?-args? ?key?");
return (TCL_ERROR);
}
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
/*
* Get the command name index from the object based on the options
* defined above.
@@ -480,105 +480,110 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
break;
}
i++;
+
+#define FLAG_CHECK2_STDARG \
+ (DB_RMW | DB_MULTIPLE | DB_MULTIPLE_KEY | DB_READ_UNCOMMITTED)
+
switch ((enum dbcgetopts)optindex) {
#ifdef CONFIG_TEST
- case DBCGET_DEGREE2:
- flag |= DB_DEGREE_2;
- break;
- case DBCGET_DIRTY:
- flag |= DB_DIRTY_READ;
+ case DBCGET_DATA_BUF_SIZE:
+ result =
+ Tcl_GetIntFromObj(interp, objv[i], &data_buf_size);
+ if (result != TCL_OK)
+ goto out;
+ i++;
break;
case DBCGET_BOTH_RANGE:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_GET_BOTH_RANGE;
break;
+ case DBCGET_KEY_BUF_SIZE:
+ result =
+ Tcl_GetIntFromObj(interp, objv[i], &key_buf_size);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ break;
case DBCGET_MULTI:
flag |= DB_MULTIPLE;
- result = Tcl_GetIntFromObj(interp, objv[i], &bufsize);
+ result =
+ Tcl_GetIntFromObj(interp, objv[i], &data_buf_size);
if (result != TCL_OK)
goto out;
i++;
break;
case DBCGET_MULTI_KEY:
flag |= DB_MULTIPLE_KEY;
- result = Tcl_GetIntFromObj(interp, objv[i], &bufsize);
+ result =
+ Tcl_GetIntFromObj(interp, objv[i], &data_buf_size);
if (result != TCL_OK)
goto out;
i++;
break;
+ case DBCGET_READ_COMMITTED:
+ flag |= DB_READ_COMMITTED;
+ break;
+ case DBCGET_READ_UNCOMMITTED:
+ flag |= DB_READ_UNCOMMITTED;
+ break;
#endif
case DBCGET_RMW:
flag |= DB_RMW;
break;
case DBCGET_CURRENT:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_CURRENT;
break;
case DBCGET_FIRST:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_FIRST;
break;
case DBCGET_LAST:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_LAST;
break;
case DBCGET_NEXT:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_NEXT;
break;
case DBCGET_PREV:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_PREV;
break;
case DBCGET_PREVNODUP:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_PREV_NODUP;
break;
case DBCGET_NEXTNODUP:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_NEXT_NODUP;
break;
case DBCGET_NEXTDUP:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_NEXT_DUP;
break;
case DBCGET_BOTH:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_GET_BOTH;
break;
case DBCGET_RECNO:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_GET_RECNO;
break;
case DBCGET_JOIN:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_JOIN_ITEM;
break;
case DBCGET_SET:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_SET;
break;
case DBCGET_SETRANGE:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_SET_RANGE;
break;
case DBCGET_SETRECNO:
- FLAG_CHECK2(flag,
- DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ FLAG_CHECK2(flag, FLAG_CHECK2_STDARG);
flag |= DB_SET_RECNO;
break;
case DBCGET_PART:
@@ -714,9 +719,10 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
goto out;
}
#ifdef CONFIG_TEST
- if (flag & (DB_MULTIPLE|DB_MULTIPLE_KEY)) {
- (void)__os_malloc(NULL, (size_t)bufsize, &data.data);
- data.ulen = (u_int32_t)bufsize;
+ if (data_buf_size != 0) {
+ (void)__os_malloc(
+ NULL, (size_t)data_buf_size, &data.data);
+ data.ulen = (u_int32_t)data_buf_size;
data.flags |= DB_DBT_USERMEM;
} else
#endif
@@ -748,11 +754,20 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
result = TCL_ERROR;
goto out;
}
- key.flags |= DB_DBT_MALLOC;
#ifdef CONFIG_TEST
- if (flag & (DB_MULTIPLE|DB_MULTIPLE_KEY)) {
- (void)__os_malloc(NULL, (size_t)bufsize, &data.data);
- data.ulen = (u_int32_t)bufsize;
+ if (key_buf_size != 0) {
+ (void)__os_malloc(
+ NULL, (size_t)key_buf_size, &key.data);
+ key.ulen = (u_int32_t)key_buf_size;
+ key.flags |= DB_DBT_USERMEM;
+ } else
+#endif
+ key.flags |= DB_DBT_MALLOC;
+#ifdef CONFIG_TEST
+ if (data_buf_size != 0) {
+ (void)__os_malloc(
+ NULL, (size_t)data_buf_size, &data.data);
+ data.ulen = (u_int32_t)data_buf_size;
data.flags |= DB_DBT_USERMEM;
} else
#endif
@@ -760,7 +775,6 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
}
_debug_check();
- memset(&pdata, 0, sizeof(DBT));
if (ispget) {
F_SET(&pdata, DB_DBT_MALLOC);
ret = dbc->c_pget(dbc, &key, &data, &pdata, flag);
@@ -803,18 +817,26 @@ tcl_DbcGet(interp, objc, objv, dbc, ispget)
key.data, key.size, data.data, data.size);
}
}
+out1:
+ if (result == TCL_OK)
+ Tcl_SetObjResult(interp, retlist);
+ /*
+ * If DB_DBT_MALLOC is set we need to free if DB allocated anything.
+ * If DB_DBT_USERMEM is set we need to free it because
+ * we allocated it (for data_buf_size/key_buf_size). That
+ * allocation does not apply to the pdata DBT.
+ */
+out:
if (key.data != NULL && F_ISSET(&key, DB_DBT_MALLOC))
__os_ufree(dbc->dbp->dbenv, key.data);
+ if (key.data != NULL && F_ISSET(&key, DB_DBT_USERMEM))
+ __os_free(dbc->dbp->dbenv, key.data);
if (data.data != NULL && F_ISSET(&data, DB_DBT_MALLOC))
__os_ufree(dbc->dbp->dbenv, data.data);
+ if (data.data != NULL && F_ISSET(&data, DB_DBT_USERMEM))
+ __os_free(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)
__os_free(NULL, dtmp);
if (freekey)
diff --git a/db/tcl/tcl_env.c b/db/tcl/tcl_env.c
index e513b961d..ac18c40cf 100644
--- a/db/tcl/tcl_env.c
+++ b/db/tcl/tcl_env.c
@@ -1,24 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_env.c,v 11.121 2004/10/07 16:48:39 bostic Exp $
+ * $Id: tcl_env.c,v 12.29 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/txn.h"
#include "dbinc/tcl_db.h"
@@ -55,6 +49,8 @@ env_Cmd(clientData, interp, objc, objv)
"attributes",
"errfile",
"errpfx",
+ "event",
+ "id_reset",
"lock_detect",
"lock_id",
"lock_id_free",
@@ -71,18 +67,23 @@ env_Cmd(clientData, interp, objc, objv)
"log_get",
"log_put",
"log_stat",
+ "lsn_reset",
"mpool",
"mpool_stat",
"mpool_sync",
"mpool_trickle",
- "mutex",
+ "rep_config",
"rep_elect",
"rep_flush",
+ "rep_get_config",
"rep_limit",
"rep_process_message",
"rep_request",
"rep_start",
"rep_stat",
+ "rep_sync",
+ "rep_transport",
+ "repmgr",
"rpcid",
"set_flags",
"test",
@@ -92,6 +93,7 @@ env_Cmd(clientData, interp, objc, objv)
"txn_timeout",
"verbose",
#endif
+ "cdsgroup",
"close",
"dbremove",
"dbrename",
@@ -103,6 +105,7 @@ env_Cmd(clientData, interp, objc, objv)
"get_home",
"get_lg_bsize",
"get_lg_dir",
+ "get_lg_filemode",
"get_lg_max",
"get_lg_regionmax",
"get_lk_detect",
@@ -121,6 +124,7 @@ env_Cmd(clientData, interp, objc, objv)
"get_tx_max",
"get_tx_timestamp",
"get_verbose",
+ "set_data_dir",
"txn",
"txn_checkpoint",
NULL
@@ -130,6 +134,8 @@ env_Cmd(clientData, interp, objc, objv)
ENVATTR,
ENVERRFILE,
ENVERRPFX,
+ ENVEVENT,
+ ENVIDRESET,
ENVLKDETECT,
ENVLKID,
ENVLKFREEID,
@@ -146,18 +152,23 @@ env_Cmd(clientData, interp, objc, objv)
ENVLOGGET,
ENVLOGPUT,
ENVLOGSTAT,
+ ENVLSNRESET,
ENVMP,
ENVMPSTAT,
ENVMPSYNC,
ENVTRICKLE,
- ENVMUTEX,
+ ENVREPCONFIG,
ENVREPELECT,
ENVREPFLUSH,
+ ENVREPGETCONFIG,
ENVREPLIMIT,
ENVREPPROCMESS,
ENVREPREQUEST,
ENVREPSTART,
ENVREPSTAT,
+ ENVREPSYNC,
+ ENVREPTRANSPORT,
+ ENVREPMGR,
ENVRPCID,
ENVSETFLAGS,
ENVTEST,
@@ -167,6 +178,7 @@ env_Cmd(clientData, interp, objc, objv)
ENVTXNTIMEOUT,
ENVVERB,
#endif
+ ENVCDSGROUP,
ENVCLOSE,
ENVDBREMOVE,
ENVDBRENAME,
@@ -178,6 +190,7 @@ env_Cmd(clientData, interp, objc, objv)
ENVGETHOME,
ENVGETLGBSIZE,
ENVGETLGDIR,
+ ENVGETLGFILEMODE,
ENVGETLGMAX,
ENVGETLGREGIONMAX,
ENVGETLKDETECT,
@@ -196,12 +209,13 @@ env_Cmd(clientData, interp, objc, objv)
ENVGETTXMAX,
ENVGETTXTIMESTAMP,
ENVGETVERBOSE,
+ ENVSETDATADIR,
ENVTXN,
ENVTXNCKP
};
DBTCL_INFO *envip;
DB_ENV *dbenv;
- Tcl_Obj *res, *myobjv[3];
+ Tcl_Obj *myobjv[3], *res;
char newname[MSG_SIZE];
int cmdindex, i, intvalue1, intvalue2, ncache, result, ret;
u_int32_t bytes, gbytes, value;
@@ -209,12 +223,14 @@ env_Cmd(clientData, interp, objc, objv)
long shm_key;
time_t timeval;
const char *strval, **dirs;
+ char *strarg;
#ifdef CONFIG_TEST
DBTCL_INFO *logcip;
DB_LOGC *logc;
- char *strarg;
+ Tcl_Obj **repobjv;
u_int32_t lockid;
long newval, otherval;
+ int repobjc;
#endif
Tcl_ResetResult(interp);
@@ -246,6 +262,22 @@ env_Cmd(clientData, interp, objc, objv)
res = NULL;
switch ((enum envcmds)cmdindex) {
#ifdef CONFIG_TEST
+ case ENVEVENT:
+ /*
+ * Two args for this. Error if different.
+ */
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ result = tcl_EventNotify(interp, dbenv, objv[2], envip);
+ break;
+ case ENVIDRESET:
+ result = tcl_EnvIdReset(interp, objc, objv, dbenv);
+ break;
+ case ENVLSNRESET:
+ result = tcl_EnvLsnReset(interp, objc, objv, dbenv);
+ break;
case ENVLKDETECT:
result = tcl_LockDetect(interp, objc, objv, dbenv);
break;
@@ -367,12 +399,32 @@ env_Cmd(clientData, interp, objc, objv)
case ENVMP:
result = tcl_Mp(interp, objc, objv, dbenv, envip);
break;
+ case ENVREPCONFIG:
+ /*
+ * Two args for this. Error if different.
+ */
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ result = tcl_RepConfig(interp, dbenv, objv[2]);
+ break;
case ENVREPELECT:
result = tcl_RepElect(interp, objc, objv, dbenv);
break;
case ENVREPFLUSH:
result = tcl_RepFlush(interp, objc, objv, dbenv);
break;
+ case ENVREPGETCONFIG:
+ /*
+ * Two args for this. Error if different.
+ */
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ result = tcl_RepGetConfig(interp, dbenv, objv[2]);
+ break;
case ENVREPLIMIT:
result = tcl_RepLimit(interp, objc, objv, dbenv);
break;
@@ -388,6 +440,23 @@ env_Cmd(clientData, interp, objc, objv)
case ENVREPSTAT:
result = tcl_RepStat(interp, objc, objv, dbenv);
break;
+ case ENVREPSYNC:
+ result = tcl_RepSync(interp, objc, objv, dbenv);
+ break;
+ case ENVREPTRANSPORT:
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ result = Tcl_ListObjGetElements(interp, objv[2],
+ &repobjc, &repobjv);
+ if (result == TCL_OK)
+ result = tcl_RepTransport(interp,
+ repobjc, repobjv, dbenv, envip);
+ break;
+ case ENVREPMGR:
+ result = tcl_RepMgr(interp, objc, objv, dbenv);
+ break;
case ENVRPCID:
/*
* No args for this. Error if there are some.
@@ -427,9 +496,6 @@ env_Cmd(clientData, interp, objc, objv)
case ENVTXNTIMEOUT:
result = tcl_TxnTimeout(interp, objc, objv, dbenv);
break;
- case ENVMUTEX:
- result = tcl_Mutex(interp, objc, objv, dbenv, envip);
- break;
case ENVATTR:
result = tcl_EnvAttr(interp, objc, objv, dbenv);
break;
@@ -480,6 +546,9 @@ env_Cmd(clientData, interp, objc, objv)
result = tcl_EnvVerbose(interp, dbenv, objv[2], objv[3]);
break;
#endif
+ case ENVCDSGROUP:
+ result = tcl_CDSGroup(interp, objc, objv, dbenv, envip);
+ break;
case ENVCLOSE:
/*
* No args for this. Error if there are some.
@@ -581,6 +650,16 @@ env_Cmd(clientData, interp, objc, objv)
"env get_lg_dir")) == TCL_OK)
res = NewStringObj(strval, strlen(strval));
break;
+ case ENVGETLGFILEMODE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lg_filemode(dbenv, &intvalue1);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lg_filemode")) == TCL_OK)
+ res = Tcl_NewLongObj((long)intvalue1);
+ break;
case ENVGETLGMAX:
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, NULL);
@@ -675,9 +754,9 @@ env_Cmd(clientData, interp, objc, objv)
Tcl_WrongNumArgs(interp, 1, objv, NULL);
return (TCL_ERROR);
}
- ret = dbenv->get_rep_limit(dbenv, &gbytes, &bytes);
+ ret = dbenv->rep_get_limit(dbenv, &gbytes, &bytes);
if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
- "env get_rep_limit")) == TCL_OK) {
+ "env rep_get_limit")) == TCL_OK) {
myobjv[0] = Tcl_NewLongObj((long)gbytes);
myobjv[1] = Tcl_NewLongObj((long)bytes);
res = Tcl_NewListObj(2, myobjv);
@@ -698,7 +777,7 @@ env_Cmd(clientData, interp, objc, objv)
Tcl_WrongNumArgs(interp, 1, objv, NULL);
return (TCL_ERROR);
}
- ret = dbenv->get_tas_spins(dbenv, &value);
+ ret = dbenv->mutex_get_tas_spins(dbenv, &value);
if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
"env get_tas_spins")) == TCL_OK)
res = Tcl_NewLongObj((long)value);
@@ -739,6 +818,18 @@ env_Cmd(clientData, interp, objc, objv)
case ENVGETVERBOSE:
result = env_GetVerbose(interp, objc, objv, dbenv);
break;
+ case ENVSETDATADIR:
+ /*
+ * One args for this. Error if different.
+ */
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "pfx");
+ return (TCL_ERROR);
+ }
+ strarg = Tcl_GetStringFromObj(objv[2], NULL);
+ ret = dbenv->set_data_dir(dbenv, strarg);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env set data dir"));
case ENVTXN:
result = tcl_Txn(interp, objc, objv, dbenv, envip);
break;
@@ -1040,7 +1131,6 @@ _EnvInfoDelete(interp, envip)
case I_ENV:
case I_LOCK:
case I_LOGC:
- case I_MUTEX:
case I_NDBM:
case I_PG:
case I_SEQ:
@@ -1061,6 +1151,111 @@ _EnvInfoDelete(interp, envip)
#ifdef CONFIG_TEST
/*
+ * PUBLIC: int tcl_EnvIdReset __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
+ * PUBLIC: DB_ENV *));
+ *
+ * tcl_EnvIdReset --
+ * Implements the ENV->fileid_reset command.
+ */
+int
+tcl_EnvIdReset(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* arg count */
+ Tcl_Obj * CONST* objv; /* args */
+ DB_ENV *dbenv; /* Database pointer */
+{
+ static const char *idwhich[] = {
+ "-encrypt",
+ NULL
+ };
+ enum idwhich {
+ IDENCRYPT
+ };
+ int enc, i, result, ret;
+ u_int32_t flags;
+ char *file;
+
+ result = TCL_OK;
+ flags = 0;
+ i = 2;
+ Tcl_SetResult(interp, "0", TCL_STATIC);
+ if (objc < 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-encrypt? filename");
+ return (TCL_ERROR);
+ } else if (objc > 3) {
+ /*
+ * If there is an arg, make sure it is the right one.
+ */
+ if (Tcl_GetIndexFromObj(interp, objv[2], idwhich, "option",
+ TCL_EXACT, &enc) != TCL_OK)
+ return (IS_HELP(objv[2]));
+ switch ((enum idwhich)enc) {
+ case IDENCRYPT:
+ flags |= DB_ENCRYPT;
+ break;
+ }
+ i = 3;
+ }
+ file = Tcl_GetStringFromObj(objv[i], NULL);
+ ret = dbenv->fileid_reset(dbenv, file, flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "fileid reset");
+ return (result);
+}
+
+/*
+ * PUBLIC: int tcl_EnvLsnReset __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
+ * PUBLIC: DB_ENV *));
+ *
+ * tcl_EnvLsnReset --
+ * Implements the ENV->lsn_reset command.
+ */
+int
+tcl_EnvLsnReset(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* arg count */
+ Tcl_Obj * CONST* objv; /* args */
+ DB_ENV *dbenv; /* Database pointer */
+{
+ static const char *lsnwhich[] = {
+ "-encrypt",
+ NULL
+ };
+ enum lsnwhich {
+ IDENCRYPT
+ };
+ int enc, i, result, ret;
+ u_int32_t flags;
+ char *file;
+
+ result = TCL_OK;
+ flags = 0;
+ i = 2;
+ Tcl_SetResult(interp, "0", TCL_STATIC);
+ if (objc < 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-encrypt? filename");
+ return (TCL_ERROR);
+ } else if (objc > 3) {
+ /*
+ * If there is an arg, make sure it is the right one.
+ */
+ if (Tcl_GetIndexFromObj(interp, objv[2], lsnwhich, "option",
+ TCL_EXACT, &enc) != TCL_OK)
+ return (IS_HELP(objv[2]));
+
+ switch ((enum lsnwhich)enc) {
+ case IDENCRYPT:
+ flags |= DB_ENCRYPT;
+ break;
+ }
+ i = 3;
+ }
+ file = Tcl_GetStringFromObj(objv[i], NULL);
+ ret = dbenv->lsn_reset(dbenv, file, flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "lsn reset");
+ return (result);
+}
+
+/*
* PUBLIC: int tcl_EnvVerbose __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *,
* PUBLIC: Tcl_Obj *));
*
@@ -1076,15 +1271,17 @@ tcl_EnvVerbose(interp, dbenv, which, onoff)
static const char *verbwhich[] = {
"deadlock",
"recovery",
+ "register",
"rep",
"wait",
NULL
};
enum verbwhich {
- ENVVERB_DEAD,
- ENVVERB_REC,
- ENVVERB_REP,
- ENVVERB_WAIT
+ ENVVERB_DEADLOCK,
+ ENVVERB_RECOVERY,
+ ENVVERB_REGISTER,
+ ENVVERB_REPLICATION,
+ ENVVERB_WAITSFOR
};
static const char *verbonoff[] = {
"off",
@@ -1103,16 +1300,19 @@ tcl_EnvVerbose(interp, dbenv, which, onoff)
return (IS_HELP(which));
switch ((enum verbwhich)optindex) {
- case ENVVERB_DEAD:
+ case ENVVERB_DEADLOCK:
wh = DB_VERB_DEADLOCK;
break;
- case ENVVERB_REC:
+ case ENVVERB_RECOVERY:
wh = DB_VERB_RECOVERY;
break;
- case ENVVERB_REP:
+ case ENVVERB_REGISTER:
+ wh = DB_VERB_REGISTER;
+ break;
+ case ENVVERB_REPLICATION:
wh = DB_VERB_REPLICATION;
break;
- case ENVVERB_WAIT:
+ case ENVVERB_WAITSFOR:
wh = DB_VERB_WAITSFOR;
break;
default:
@@ -1228,6 +1428,42 @@ err:
}
/*
+ * tcl_EventNotify --
+ * Call DB_ENV->set_event_notify().
+ *
+ * PUBLIC: int tcl_EventNotify __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *,
+ * PUBLIC: DBTCL_INFO *));
+ *
+ * Note that this normally can/should be achieved as an argument to
+ * berkdb env, but we need to test changing the event function on
+ * the fly.
+ */
+int
+tcl_EventNotify(interp, dbenv, eobj, ip)
+ Tcl_Interp *interp; /* Interpreter */
+ DB_ENV *dbenv;
+ Tcl_Obj *eobj; /* The event proc */
+ DBTCL_INFO *ip;
+{
+ int ret;
+
+ /*
+ * We don't need to crack the event procedure out now.
+ */
+ /*
+ * If we're replacing an existing event proc, decrement it now.
+ */
+ if (ip->i_event != NULL)
+ Tcl_DecrRefCount(ip->i_event);
+ ip->i_event = eobj;
+ Tcl_IncrRefCount(ip->i_event);
+ _debug_check();
+ ret = dbenv->set_event_notify(dbenv, _EventFunc);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env event"));
+}
+
+/*
* PUBLIC: int tcl_EnvSetFlags __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *,
* PUBLIC: Tcl_Obj *));
*
@@ -1248,6 +1484,7 @@ tcl_EnvSetFlags(interp, dbenv, which, onoff)
"-dsync_log",
"-log_inmemory",
"-log_remove",
+ "-multiversion",
"-nolock",
"-nommap",
"-nopanic",
@@ -1264,6 +1501,7 @@ tcl_EnvSetFlags(interp, dbenv, which, onoff)
ENVSF_DSYNCLOG,
ENVSF_LOG_INMEMORY,
ENVSF_LOG_REMOVE,
+ ENVSF_MULTIVERSION,
ENVSF_NOLOCK,
ENVSF_NOMMAP,
ENVSF_NOPANIC,
@@ -1307,6 +1545,9 @@ tcl_EnvSetFlags(interp, dbenv, which, onoff)
case ENVSF_LOG_REMOVE:
wh = DB_LOG_AUTOREMOVE;
break;
+ case ENVSF_MULTIVERSION:
+ wh = DB_MULTIVERSION;
+ break;
case ENVSF_NOLOCK:
wh = DB_NOLOCKING;
break;
@@ -1346,7 +1587,7 @@ tcl_EnvSetFlags(interp, dbenv, which, onoff)
}
ret = dbenv->set_flags(dbenv, wh, on);
return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
- "env set verbose"));
+ "env set flags"));
}
/*
@@ -1383,6 +1624,7 @@ tcl_EnvTest(interp, objc, objv, dbenv)
"postlogmeta",
"postopen",
"postsync",
+ "recycle",
"subdb_lock",
NULL
};
@@ -1397,6 +1639,7 @@ tcl_EnvTest(interp, objc, objv, dbenv)
ENVTEST_POSTLOGMETA,
ENVTEST_POSTOPEN,
ENVTEST_POSTSYNC,
+ ENVTEST_RECYCLE,
ENVTEST_SUBDB_LOCKS
};
int *loc, optindex, result, testval;
@@ -1446,11 +1689,11 @@ tcl_EnvTest(interp, objc, objv, dbenv)
}
switch ((enum envtestat)optindex) {
case ENVTEST_ELECTINIT:
- DB_ASSERT(loc == &dbenv->test_abort);
+ DB_ASSERT(dbenv, loc == &dbenv->test_abort);
testval = DB_TEST_ELECTINIT;
break;
case ENVTEST_ELECTVOTE1:
- DB_ASSERT(loc == &dbenv->test_abort);
+ DB_ASSERT(dbenv, loc == &dbenv->test_abort);
testval = DB_TEST_ELECTVOTE1;
break;
case ENVTEST_NONE:
@@ -1477,8 +1720,12 @@ tcl_EnvTest(interp, objc, objv, dbenv)
case ENVTEST_POSTSYNC:
testval = DB_TEST_POSTSYNC;
break;
+ case ENVTEST_RECYCLE:
+ DB_ASSERT(dbenv, loc == &dbenv->test_copy);
+ testval = DB_TEST_RECYCLE;
+ break;
case ENVTEST_SUBDB_LOCKS:
- DB_ASSERT(loc == &dbenv->test_abort);
+ DB_ASSERT(dbenv, loc == &dbenv->test_abort);
testval = DB_TEST_SUBDB_LOCKS;
break;
default:
@@ -1594,6 +1841,8 @@ env_DbRemove(interp, objc, objv, dbenv)
* arrays for the subdb.
*/
db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(db, "") == 0)
+ db = NULL;
if (i != objc) {
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
@@ -1723,6 +1972,8 @@ env_DbRename(interp, objc, objv, dbenv)
* arrays for the subdb.
*/
db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(db, "") == 0)
+ db = NULL;
if (i == objc - 2) {
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
@@ -1788,6 +2039,7 @@ env_GetFlags(interp, objc, objv, dbenv)
{ DB_DSYNC_LOG, "-dsync_log" },
{ DB_LOG_AUTOREMOVE, "-log_remove" },
{ DB_LOG_INMEMORY, "-log_inmemory" },
+ { DB_MULTIVERSION, "-multiversion" },
{ DB_NOLOCKING, "-nolock" },
{ DB_NOMMAP, "-nommap" },
{ DB_NOPANIC, "-nopanic" },
@@ -1845,20 +2097,21 @@ env_GetOpenFlag(interp, objc, objv, dbenv)
u_int32_t flag;
char *arg;
} open_flags[] = {
+ { DB_CREATE, "-create" },
{ 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_RECOVER, "-recover" },
+ { DB_RECOVER_FATAL, "-recover_fatal" },
+ { DB_REGISTER, "-register" },
{ DB_SYSTEM_MEM, "-system_mem" },
{ DB_THREAD, "-thread" },
+ { DB_USE_ENVIRON, "-use_environ" },
+ { DB_USE_ENVIRON_ROOT, "-use_environ_root" },
{ 0, NULL }
};
@@ -2058,6 +2311,7 @@ env_GetVerbose(interp, objc, objv, dbenv)
} verbose_flags[] = {
{ DB_VERB_DEADLOCK, "deadlock" },
{ DB_VERB_RECOVERY, "recovery" },
+ { DB_VERB_REGISTER, "register" },
{ DB_VERB_REPLICATION, "rep" },
{ DB_VERB_WAITSFOR, "wait" },
{ 0, NULL }
@@ -2086,7 +2340,7 @@ env_GetVerbose(interp, objc, objv, dbenv)
ret = dbenv->get_verbose(dbenv, which, &onoff);
err: if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
- "env get_timeout")) == 0) {
+ "env get_verbose")) == 0) {
answer = onoff ? "on" : "off";
res = NewStringObj(answer, strlen(answer));
Tcl_SetObjResult(interp, res);
diff --git a/db/tcl/tcl_internal.c b/db/tcl/tcl_internal.c
index 6927b3018..d1071c71c 100644
--- a/db/tcl/tcl_internal.c
+++ b/db/tcl/tcl_internal.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_internal.c,v 11.70 2004/10/25 18:04:44 bostic Exp $
+ * $Id: tcl_internal.c,v 12.13 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
@@ -59,9 +54,9 @@ _NewInfo(interp, anyp, name, type)
enum INFOTYPE type;
{
DBTCL_INFO *p;
- int i, ret;
+ int ret;
- if ((ret = __os_malloc(NULL, sizeof(DBTCL_INFO), &p)) != 0) {
+ if ((ret = __os_calloc(NULL, sizeof(DBTCL_INFO), 1, &p)) != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
return (NULL);
}
@@ -73,21 +68,7 @@ _NewInfo(interp, anyp, name, type)
}
p->i_interp = interp;
p->i_anyp = anyp;
- p->i_data = 0;
- p->i_data2 = 0;
p->i_type = type;
- p->i_parent = NULL;
- 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;
LIST_INSERT_HEAD(&__db_infohead, p, entries);
return (p);
@@ -102,8 +83,7 @@ _NameToPtr(name)
{
DBTCL_INFO *p;
- for (p = LIST_FIRST(&__db_infohead); p != NULL;
- p = LIST_NEXT(p, entries))
+ LIST_FOREACH(p, &__db_infohead, entries)
if (strcmp(name, p->i_name) == 0)
return (p->i_anyp);
return (NULL);
@@ -118,8 +98,7 @@ _PtrToInfo(ptr)
{
DBTCL_INFO *p;
- for (p = LIST_FIRST(&__db_infohead); p != NULL;
- p = LIST_NEXT(p, entries))
+ LIST_FOREACH(p, &__db_infohead, entries)
if (p->i_anyp == ptr)
return (p);
return (NULL);
@@ -134,8 +113,7 @@ _NameToInfo(name)
{
DBTCL_INFO *p;
- for (p = LIST_FIRST(&__db_infohead); p != NULL;
- p = LIST_NEXT(p, entries))
+ LIST_FOREACH(p, &__db_infohead, entries)
if (strcmp(name, p->i_name) == 0)
return (p);
return (NULL);
@@ -167,7 +145,7 @@ _DeleteInfo(p)
LIST_REMOVE(p, entries);
if (p->i_lockobj.data != NULL)
__os_free(NULL, p->i_lockobj.data);
- if (p->i_err != NULL && p->i_err != stderr) {
+ if (p->i_err != NULL && p->i_err != stderr && p->i_err != stdout) {
(void)fclose(p->i_err);
p->i_err = NULL;
}
@@ -243,7 +221,7 @@ _SetListElemInt(interp, list, elem1, elem2)
* library, it's likely because we don't have a 64-bit type, and trying to
* use int64_t is going to result in syntax errors.
*/
-#ifdef HAVE_SEQUENCE
+#ifdef HAVE_64BIT_TYPES
/*
* PUBLIC: int _SetListElemWideInt __P((Tcl_Interp *,
* PUBLIC: Tcl_Obj *, void *, int64_t));
@@ -267,7 +245,7 @@ _SetListElemWideInt(interp, list, elem1, elem2)
return (TCL_ERROR);
return (Tcl_ListObjAppendElement(interp, list, thislist));
}
-#endif /* HAVE_SEQUENCE */
+#endif /* HAVE_64BIT_TYPES */
/*
* PUBLIC: int _SetListRecnoElem __P((Tcl_Interp *, Tcl_Obj *,
@@ -522,6 +500,107 @@ _ErrorFunc(dbenv, pfx, msg)
return;
}
+/*
+ * PUBLIC: void _EventFunc __P((DB_ENV *, u_int32_t, void *));
+ */
+void
+_EventFunc(dbenv, event, info)
+ DB_ENV *dbenv;
+ u_int32_t event;
+ void *info;
+{
+#define TCLDB_EVENTITEMS 2 /* Event name and any info */
+#define TCLDB_SENDEVENT 2
+ DBTCL_INFO *ip;
+ Tcl_Interp *interp;
+ Tcl_Obj *event_o, *origobj;
+ Tcl_Obj *myobjv[TCLDB_EVENTITEMS], *objv[TCLDB_SENDEVENT];
+ int i, myobjc, result;
+
+ ip = (DBTCL_INFO *)dbenv->app_private;
+ interp = ip->i_interp;
+ if (ip->i_event == NULL)
+ return;
+ objv[0] = ip->i_event;
+
+ /*
+ * Most events don't have additional info. Assume none
+ * and handle individually those that do.
+ */
+ myobjv[1] = NULL;
+ myobjc = 1;
+ switch (event) {
+ case DB_EVENT_PANIC:
+ /*
+ * Info is the original error code.
+ */
+ myobjv[0] = NewStringObj("panic", strlen("panic"));
+ myobjv[myobjc++] = Tcl_NewIntObj(*(int *)info);
+ break;
+ case DB_EVENT_REP_CLIENT:
+ myobjv[0] = NewStringObj("rep_client", strlen("rep_client"));
+ break;
+ case DB_EVENT_REP_MASTER:
+ myobjv[0] = NewStringObj("rep_master", strlen("rep_master"));
+ break;
+ case DB_EVENT_REP_NEWMASTER:
+ /*
+ * Info is the EID of the new master.
+ */
+ myobjv[0] = NewStringObj("newmaster", strlen("newmaster"));
+ myobjv[myobjc++] = Tcl_NewIntObj(*(int *)info);
+ break;
+ case DB_EVENT_REP_STARTUPDONE:
+ myobjv[0] = NewStringObj("startupdone", strlen("startupdone"));
+ break;
+ case DB_EVENT_WRITE_FAILED:
+ myobjv[0] =
+ NewStringObj("write_failed", strlen("write_failed"));
+ break;
+ default:
+ __db_errx(dbenv, "Tcl unknown event %lu", (u_long)event);
+ return;
+ }
+
+ for (i = 0; i < myobjc; i++)
+ Tcl_IncrRefCount(myobjv[i]);
+
+ event_o = Tcl_NewListObj(myobjc, myobjv);
+ Tcl_IncrRefCount(event_o);
+ objv[1] = event_o;
+
+ /*
+ * 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_SENDEVENT, 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.
+ * The event handler is a void function so we either
+ * just return or abort.
+ * For now, abort.
+ */
+ __db_errx(dbenv, "Tcl event failure");
+ abort();
+ }
+
+ Tcl_SetObjResult(interp, origobj);
+ Tcl_DecrRefCount(origobj);
+ for (i = 0; i < myobjc; i++)
+ Tcl_DecrRefCount(myobjv[i]);
+ Tcl_DecrRefCount(event_o);
+
+ return;
+}
+
#define INVALID_LSNMSG "Invalid LSN with %d parts. Should have 2.\n"
/*
@@ -631,7 +710,7 @@ _GetFlagsList(interp, flags, fnp)
* into one). If this is the case, we screwed up badly
* somehow.
*/
- DB_ASSERT(result == TCL_OK);
+ DB_ASSERT(NULL, result == TCL_OK);
}
return (newlist);
@@ -670,14 +749,14 @@ _debug_check()
* memory.
*/
/*
- * PUBLIC: int _CopyObjBytes __P((Tcl_Interp *, Tcl_Obj *obj, void **,
+ * 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;
+ void *newp;
u_int32_t *sizep;
int *freep;
{
@@ -695,7 +774,7 @@ _CopyObjBytes(interp, obj, newp, sizep, freep)
*sizep = (u_int32_t)len;
if (ret == TCL_ERROR) {
Tcl_ResetResult(interp);
- *newp = tmp;
+ *(void **)newp = tmp;
return (0);
}
@@ -707,7 +786,7 @@ _CopyObjBytes(interp, obj, newp, sizep, freep)
if ((ret = __os_malloc(NULL, (size_t)len, &new)) != 0)
return (ret);
memcpy(new, tmp, (size_t)len);
- *newp = new;
+ *(void **)newp = new;
*freep = 1;
return (0);
}
diff --git a/db/tcl/tcl_lock.c b/db/tcl/tcl_lock.c
index 4a3de36bd..bc73bf81b 100644
--- a/db/tcl/tcl_lock.c
+++ b/db/tcl/tcl_lock.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_lock.c,v 11.59 2004/10/07 16:48:39 bostic Exp $
+ * $Id: tcl_lock.c,v 12.6 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
/*
@@ -259,10 +254,14 @@ tcl_LockStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Maximum number of lockers so far", sp->st_maxnlockers);
MAKE_STAT_LIST("Current number of objects", sp->st_nobjects);
MAKE_STAT_LIST("Maximum number of objects so far", sp->st_maxnobjects);
- 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("Lock upgrades", sp->st_nupgrade);
+ MAKE_STAT_LIST("Lock downgrades", sp->st_ndowngrade);
+ MAKE_STAT_LIST("Number of conflicted locks for which we waited",
+ sp->st_lock_wait);
+ MAKE_STAT_LIST("Number of conflicted locks for which we did not wait",
+ sp->st_lock_nowait);
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);
diff --git a/db/tcl/tcl_log.c b/db/tcl/tcl_log.c
index 68c678101..650f632c9 100644
--- a/db/tcl/tcl_log.c
+++ b/db/tcl/tcl_log.c
@@ -1,26 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_log.c,v 11.61 2004/04/05 20:18:32 bostic Exp $
+ * $Id: tcl_log.c,v 12.10 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.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 *));
@@ -382,6 +376,7 @@ tcl_LogStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Log file mode", sp->st_mode);
MAKE_STAT_LIST("Log record cache size", sp->st_lg_bsize);
MAKE_STAT_LIST("Current log file size", sp->st_lg_size);
+ MAKE_STAT_LIST("Log file records written", sp->st_record);
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);
@@ -390,7 +385,8 @@ tcl_LogStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Times log written", sp->st_wcount);
MAKE_STAT_LIST("Times log written because cache filled up",
sp->st_wcount_fill);
- MAKE_STAT_LIST("Times log flushed", sp->st_scount);
+ MAKE_STAT_LIST("Times log read from disk", sp->st_rcount);
+ MAKE_STAT_LIST("Times log flushed to disk", 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);
@@ -421,14 +417,18 @@ logc_Cmd(clientData, interp, objc, objv)
static const char *logccmds[] = {
"close",
"get",
+ "version",
NULL
};
enum logccmds {
LOGCCLOSE,
- LOGCGET
+ LOGCGET,
+ LOGCVERSION
};
DB_LOGC *logc;
DBTCL_INFO *logcip;
+ Tcl_Obj *res;
+ u_int32_t version;
int cmdindex, result, ret;
Tcl_ResetResult(interp);
@@ -477,7 +477,24 @@ logc_Cmd(clientData, interp, objc, objv)
case LOGCGET:
result = tcl_LogcGet(interp, objc, objv, logc);
break;
+ case LOGCVERSION:
+ /*
+ * 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->version(logc, &version, 0);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "logc version")) == TCL_OK) {
+ res = Tcl_NewIntObj((int)version);
+ Tcl_SetObjResult(interp, res);
+ }
+ break;
}
+
return (result);
}
diff --git a/db/tcl/tcl_mp.c b/db/tcl/tcl_mp.c
index 29691a31c..ce205728a 100644
--- a/db/tcl/tcl_mp.c
+++ b/db/tcl/tcl_mp.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_mp.c,v 11.58 2004/10/07 16:48:39 bostic Exp $
+ * $Id: tcl_mp.c,v 12.7 2006/09/11 14:53:42 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
/*
@@ -160,6 +155,7 @@ tcl_Mp(interp, objc, objv, envp, envip)
static const char *mpopts[] = {
"-create",
"-mode",
+ "-multiversion",
"-nommap",
"-pagesize",
"-rdonly",
@@ -168,6 +164,7 @@ tcl_Mp(interp, objc, objv, envp, envip)
enum mpopts {
MPCREATE,
MPMODE,
+ MPMULTIVERSION,
MPNOMMAP,
MPPAGE,
MPRDONLY
@@ -203,13 +200,10 @@ tcl_Mp(interp, objc, objv, envp, envip)
case MPCREATE:
flag |= DB_CREATE;
break;
- case MPNOMMAP:
- flag |= DB_NOMMAP;
- break;
- case MPPAGE:
+ case MPMODE:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "?-pagesize size?");
+ "?-mode mode?");
result = TCL_ERROR;
break;
}
@@ -219,15 +213,18 @@ tcl_Mp(interp, objc, objv, envp, envip)
* set up, and we'll bail out below. If ok,
* the mode is set and we go on.
*/
- result = Tcl_GetIntFromObj(interp, objv[i++], &pgsize);
+ result = Tcl_GetIntFromObj(interp, objv[i++], &mode);
break;
- case MPRDONLY:
- flag |= DB_RDONLY;
+ case MPMULTIVERSION:
+ flag |= DB_MULTIVERSION;
break;
- case MPMODE:
+ case MPNOMMAP:
+ flag |= DB_NOMMAP;
+ break;
+ case MPPAGE:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "?-mode mode?");
+ "?-pagesize size?");
result = TCL_ERROR;
break;
}
@@ -237,7 +234,10 @@ tcl_Mp(interp, objc, objv, envp, envip)
* 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);
+ result = Tcl_GetIntFromObj(interp, objv[i++], &pgsize);
+ break;
+ case MPRDONLY:
+ flag |= DB_RDONLY;
break;
}
if (result != TCL_OK)
@@ -374,6 +374,9 @@ tcl_MpStat(interp, objc, objv, envp)
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("Buffers frozen", sp->st_mvcc_frozen);
+ MAKE_STAT_LIST("Buffers thawed", sp->st_mvcc_thawed);
+ MAKE_STAT_LIST("Frozen buffers freed", sp->st_mvcc_freed);
MAKE_STAT_LIST("Page allocations", sp->st_alloc);
MAKE_STAT_LIST("Buckets examined during allocation",
sp->st_alloc_buckets);
@@ -382,6 +385,7 @@ tcl_MpStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Pages examined during allocation", sp->st_alloc_pages);
MAKE_STAT_LIST("Maximum pages examined during allocation",
sp->st_alloc_max_pages);
+ MAKE_STAT_LIST("Threads waiting on buffer I/O", sp->st_io_wait);
/*
* Save global stat list as res1. The MAKE_STAT_LIST
@@ -587,24 +591,30 @@ tcl_MpGet(interp, objc, objv, mp, mpip)
{
static const char *mpget[] = {
"-create",
+ "-dirty",
"-last",
"-new",
+ "-txn",
NULL
};
enum mpget {
MPGET_CREATE,
+ MPGET_DIRTY,
MPGET_LAST,
- MPGET_NEW
+ MPGET_NEW,
+ MPGET_TXN
};
DBTCL_INFO *ip;
Tcl_Obj *res;
+ DB_TXN *txn;
db_pgno_t pgno;
u_int32_t flag;
int i, ipgno, optindex, result, ret;
- char newname[MSG_SIZE];
+ char *arg, msg[MSG_SIZE], newname[MSG_SIZE];
void *page;
+ txn = NULL;
result = TCL_OK;
memset(newname, 0, MSG_SIZE);
i = 2;
@@ -627,12 +637,30 @@ tcl_MpGet(interp, objc, objv, mp, mpip)
case MPGET_CREATE:
flag |= DB_MPOOL_CREATE;
break;
+ case MPGET_DIRTY:
+ flag |= DB_MPOOL_DIRTY;
+ break;
case MPGET_LAST:
flag |= DB_MPOOL_LAST;
break;
case MPGET_NEW:
flag |= DB_MPOOL_NEW;
break;
+ case MPGET_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,
+ "mpool get: Invalid txn: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ break;
}
if (result != TCL_OK)
goto error;
@@ -662,7 +690,7 @@ tcl_MpGet(interp, objc, objv, mp, mpip)
}
_debug_check();
pgno = (db_pgno_t)ipgno;
- ret = mp->get(mp, &pgno, flag, &page);
+ ret = mp->get(mp, &pgno, NULL, flag, &page);
result = _ReturnSetup(interp, ret, DB_RETOK_MPGET(ret), "mpool get");
if (result == TCL_ERROR)
_DeleteInfo(ip);
@@ -789,14 +817,10 @@ tcl_Pg(interp, objc, objv, page, mp, pgip, putop)
int putop; /* Operation */
{
static const char *pgopt[] = {
- "-clean",
- "-dirty",
"-discard",
NULL
};
enum pgopt {
- PGCLEAN,
- PGDIRTY,
PGDISCARD
};
u_int32_t flag;
@@ -811,12 +835,6 @@ tcl_Pg(interp, objc, objv, page, mp, pgip, putop)
return (IS_HELP(objv[i]));
i++;
switch ((enum pgopt)optindex) {
- case PGCLEAN:
- flag |= DB_MPOOL_CLEAN;
- break;
- case PGDIRTY:
- flag |= DB_MPOOL_DIRTY;
- break;
case PGDISCARD:
flag |= DB_MPOOL_DISCARD;
break;
diff --git a/db/tcl/tcl_rep.c b/db/tcl/tcl_rep.c
index e0e6a1a88..036171a0c 100644
--- a/db/tcl/tcl_rep.c
+++ b/db/tcl/tcl_rep.c
@@ -1,27 +1,166 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_rep.c,v 11.106 2004/10/14 18:09:00 bostic Exp $
+ * $Id: tcl_rep.c,v 12.25 2006/09/07 08:06:37 alexg Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
#ifdef CONFIG_TEST
/*
+ * tcl_RepConfig --
+ * Call DB_ENV->rep_set_config().
+ *
+ * PUBLIC: int tcl_RepConfig
+ * PUBLIC: __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *));
+ */
+int
+tcl_RepConfig(interp, dbenv, list)
+ Tcl_Interp *interp; /* Interpreter */
+ DB_ENV *dbenv; /* Environment pointer */
+ Tcl_Obj *list; /* {which on|off} */
+{
+ static const char *confwhich[] = {
+ "bulk",
+ "delayclient",
+ "noautoinit",
+ "nowait",
+ NULL
+ };
+ enum confwhich {
+ REPCONF_BULK,
+ REPCONF_DELAYCLIENT,
+ REPCONF_NOAUTOINIT,
+ REPCONF_NOWAIT
+ };
+ static const char *confonoff[] = {
+ "off",
+ "on",
+ NULL
+ };
+ enum confonoff {
+ REPCONF_OFF,
+ REPCONF_ON
+ };
+ Tcl_Obj **myobjv, *onoff, *which;
+ int myobjc, on, optindex, result, ret;
+ u_int32_t wh;
+
+ result = Tcl_ListObjGetElements(interp, list, &myobjc, &myobjv);
+ which = myobjv[0];
+ onoff = myobjv[1];
+ if (result != TCL_OK)
+ return (result);
+ if (Tcl_GetIndexFromObj(interp, which, confwhich, "option",
+ TCL_EXACT, &optindex) != TCL_OK)
+ return (IS_HELP(which));
+
+ switch ((enum confwhich)optindex) {
+ case REPCONF_NOAUTOINIT:
+ wh = DB_REP_CONF_NOAUTOINIT;
+ break;
+ case REPCONF_BULK:
+ wh = DB_REP_CONF_BULK;
+ break;
+ case REPCONF_DELAYCLIENT:
+ wh = DB_REP_CONF_DELAYCLIENT;
+ break;
+ case REPCONF_NOWAIT:
+ wh = DB_REP_CONF_NOWAIT;
+ break;
+ default:
+ return (TCL_ERROR);
+ }
+ if (Tcl_GetIndexFromObj(interp, onoff, confonoff, "option",
+ TCL_EXACT, &optindex) != TCL_OK)
+ return (IS_HELP(onoff));
+ switch ((enum confonoff)optindex) {
+ case REPCONF_OFF:
+ on = 0;
+ break;
+ case REPCONF_ON:
+ on = 1;
+ break;
+ default:
+ return (TCL_ERROR);
+ }
+ ret = dbenv->rep_set_config(dbenv, wh, on);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env rep_config"));
+}
+
+/*
+ * tcl_RepGetConfig --
+ * Call DB_ENV->rep_get_config().
+ *
+ * PUBLIC: int tcl_RepGetConfig
+ * PUBLIC: __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *));
+ */
+int
+tcl_RepGetConfig(interp, dbenv, which)
+ Tcl_Interp *interp; /* Interpreter */
+ DB_ENV *dbenv; /* Environment pointer */
+ Tcl_Obj *which; /* which flag */
+{
+ static const char *confwhich[] = {
+ "bulk",
+ "delayclient",
+ "noautoinit",
+ "nowait",
+ NULL
+ };
+ enum confwhich {
+ REPGCONF_BULK,
+ REPGCONF_DELAYCLIENT,
+ REPGCONF_NOAUTOINIT,
+ REPGCONF_NOWAIT
+ };
+ Tcl_Obj *res;
+ int on, optindex, result, ret;
+ u_int32_t wh;
+
+ if (Tcl_GetIndexFromObj(interp, which, confwhich, "option",
+ TCL_EXACT, &optindex) != TCL_OK)
+ return (IS_HELP(which));
+
+ res = NULL;
+ switch ((enum confwhich)optindex) {
+ case REPGCONF_BULK:
+ wh = DB_REP_CONF_BULK;
+ break;
+ case REPGCONF_DELAYCLIENT:
+ wh = DB_REP_CONF_DELAYCLIENT;
+ break;
+ case REPGCONF_NOAUTOINIT:
+ wh = DB_REP_CONF_NOAUTOINIT;
+ break;
+ case REPGCONF_NOWAIT:
+ wh = DB_REP_CONF_NOWAIT;
+ break;
+ default:
+ return (TCL_ERROR);
+ }
+ ret = dbenv->rep_get_config(dbenv, wh, &on);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env rep_config")) == TCL_OK) {
+ res = Tcl_NewIntObj(on);
+ Tcl_SetObjResult(interp, res);
+ }
+ return (result);
+}
+#endif
+
+#ifdef CONFIG_TEST
+/*
* tcl_RepElect --
* Call DB_ENV->rep_elect().
*
@@ -53,8 +192,16 @@ tcl_RepElect(interp, objc, objv, dbenv)
return (result);
_debug_check();
- if ((ret = dbenv->rep_elect(dbenv, nsites, nvotes,
- pri, timeout, &eid, 0)) != 0)
+
+ if ((ret = dbenv->rep_set_priority(dbenv, pri)) != 0)
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env rep_elect (rep_set_priority)"));
+ if ((ret = dbenv->rep_set_timeout(dbenv, DB_REP_ELECTION_TIMEOUT,
+ timeout)) != 0)
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env rep_elect (rep_set_timeout)"));
+
+ if ((ret = dbenv->rep_elect(dbenv, nsites, nvotes, &eid, 0)) != 0)
return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
"env rep_elect"));
@@ -93,8 +240,35 @@ tcl_RepFlush(interp, objc, objv, dbenv)
#endif
#ifdef CONFIG_TEST
/*
+ * tcl_RepSync --
+ * Call DB_ENV->rep_sync().
+ *
+ * PUBLIC: int tcl_RepSync
+ * PUBLIC: __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
+ */
+int
+tcl_RepSync(interp, objc, objv, dbenv)
+ Tcl_Interp *interp;
+ int objc;
+ Tcl_Obj *CONST objv[];
+ DB_ENV *dbenv;
+{
+ int ret;
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, "");
+ return TCL_ERROR;
+ }
+
+ _debug_check();
+ ret = dbenv->rep_sync(dbenv, 0);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret), "env rep_sync"));
+}
+#endif
+#ifdef CONFIG_TEST
+/*
* tcl_RepLimit --
- * Call DB_ENV->set_rep_limit().
+ * Call DB_ENV->rep_set_limit().
*
* PUBLIC: int tcl_RepLimit
* PUBLIC: __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
@@ -120,7 +294,7 @@ tcl_RepLimit(interp, objc, objv, dbenv)
return (result);
_debug_check();
- if ((ret = dbenv->set_rep_limit(dbenv, gbytes, bytes)) != 0)
+ if ((ret = dbenv->rep_set_limit(dbenv, gbytes, bytes)) != 0)
return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
"env set_rep_limit"));
@@ -169,6 +343,71 @@ tcl_RepRequest(interp, objc, objv, dbenv)
#ifdef CONFIG_TEST
/*
+ * tcl_RepTransport --
+ * Call DB_ENV->rep_set_transport().
+ *
+ * PUBLIC: int tcl_RepTransport __P((Tcl_Interp *, int, Tcl_Obj * CONST *,
+ * PUBLIC: DB_ENV *, DBTCL_INFO *));
+ *
+ * Note that this normally can/should be achieved as an argument to
+ * berkdb env, but we need to test changing the transport function on
+ * the fly.
+ */
+int
+tcl_RepTransport(interp, objc, objv, dbenv, ip)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+ DBTCL_INFO *ip;
+{
+ int intarg, result, ret;
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, "{id transport_func");
+ return (TCL_ERROR);
+ }
+
+ /*
+ * 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 rep_set_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.
+ */
+
+ /*
+ * 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.
+ */
+ if (ip->i_rep_eid != NULL)
+ Tcl_DecrRefCount(ip->i_rep_eid);
+ ip->i_rep_eid = objv[0];
+ Tcl_IncrRefCount(ip->i_rep_eid);
+ result = Tcl_GetIntFromObj(interp,
+ ip->i_rep_eid, &intarg);
+ if (result != TCL_OK)
+ return (result);
+
+ if (ip->i_rep_send != NULL)
+ Tcl_DecrRefCount(ip->i_rep_send);
+ ip->i_rep_send = objv[1];
+ Tcl_IncrRefCount(ip->i_rep_send);
+ _debug_check();
+ ret = dbenv->rep_set_transport(dbenv, intarg, tcl_rep_send);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env rep_transport"));
+}
+#endif
+
+#ifdef CONFIG_TEST
+/*
* tcl_RepStart --
* Call DB_ENV->rep_start().
*
@@ -309,6 +548,7 @@ tcl_RepProcessMessage(interp, objc, objv, dbenv)
* {NEWMASTER #} - NEWMASTER and its ID.
* {NEWSITE 0} - NEWSITE, no other info needed.
* {STARTUPDONE 0} - STARTUPDONE, no other info needed.
+ * {IGNORE {LSN list}} - IGNORE and this msg's LSN.
* {ISPERM {LSN list}} - ISPERM and the perm LSN.
* {NOTPERM {LSN list}} - NOTPERM and this msg's LSN.
*/
@@ -328,6 +568,14 @@ tcl_RepProcessMessage(interp, objc, objv, dbenv)
(u_char *)"HOLDELECTION", (int)strlen("HOLDELECTION"));
myobjv[1] = Tcl_NewIntObj(0);
break;
+ case DB_REP_IGNORE:
+ myobjv[0] = Tcl_NewLongObj((long)permlsn.file);
+ myobjv[1] = Tcl_NewLongObj((long)permlsn.offset);
+ lsnlist = Tcl_NewListObj(myobjc, myobjv);
+ myobjv[0] = Tcl_NewByteArrayObj(
+ (u_char *)"IGNORE", (int)strlen("IGNORE"));
+ myobjv[1] = lsnlist;
+ break;
case DB_REP_ISPERM:
myobjv[0] = Tcl_NewLongObj((long)permlsn.file);
myobjv[1] = Tcl_NewLongObj((long)permlsn.offset);
@@ -354,11 +602,6 @@ tcl_RepProcessMessage(interp, objc, objv, dbenv)
(u_char *)"NOTPERM", (int)strlen("NOTPERM"));
myobjv[1] = lsnlist;
break;
- case DB_REP_STARTUPDONE:
- myobjv[0] = Tcl_NewByteArrayObj(
- (u_char *)"STARTUPDONE", (int)strlen("STARTUPDONE"));
- myobjv[1] = Tcl_NewIntObj(0);
- break;
default:
msg = db_strerror(ret);
Tcl_AppendResult(interp, msg, NULL);
@@ -400,8 +643,8 @@ tcl_RepStat(interp, objc, objv, dbenv)
int myobjc, result, ret;
char *arg;
- result = TCL_OK;
flag = 0;
+ result = TCL_OK;
if (objc > 3) {
Tcl_WrongNumArgs(interp, 2, objv, NULL);
@@ -439,6 +682,13 @@ tcl_RepStat(interp, objc, objv, dbenv)
MAKE_STAT_LIST("Client", 1);
MAKE_STAT_LSN("Next LSN expected", &sp->st_next_lsn);
MAKE_STAT_LSN("First missed LSN", &sp->st_waiting_lsn);
+ MAKE_STAT_LIST("Bulk buffer fills", sp->st_bulk_fills);
+ MAKE_STAT_LIST("Bulk buffer overflows", sp->st_bulk_overflows);
+ MAKE_STAT_LIST("Bulk records stored", sp->st_bulk_records);
+ MAKE_STAT_LIST("Bulk buffer transfers", sp->st_bulk_transfers);
+ MAKE_STAT_LIST("Client service requests", sp->st_client_svc_req);
+ MAKE_STAT_LIST("Client service req misses", sp->st_client_svc_miss);
+ MAKE_STAT_LIST("Client rerequests", sp->st_client_rerequests);
MAKE_STAT_LIST("Duplicate master conditions", sp->st_dupmasters);
MAKE_STAT_LIST("Environment ID", sp->st_env_id);
MAKE_STAT_LIST("Environment priority", sp->st_env_priority);
@@ -480,10 +730,293 @@ tcl_RepStat(interp, objc, objv, dbenv)
MAKE_STAT_LIST("Election priority", sp->st_election_priority);
MAKE_STAT_LIST("Election tiebreaker", sp->st_election_tiebreaker);
MAKE_STAT_LIST("Election votes", sp->st_election_votes);
+ MAKE_STAT_LIST("Election seconds", sp->st_election_sec);
+ MAKE_STAT_LIST("Election usecs", sp->st_election_usec);
Tcl_SetObjResult(interp, res);
error:
__os_ufree(dbenv, sp);
return (result);
}
+
+/*
+ * tcl_RepMgr --
+ * Configure and start the Replication Manager.
+ *
+ * PUBLIC: int tcl_RepMgr
+ * PUBLIC: __P((Tcl_Interp *, int, Tcl_Obj * CONST *, DB_ENV *));
+ */
+int
+tcl_RepMgr(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv; /* Environment pointer */
+{
+ static const char *rmgr[] = {
+ "-ack",
+ "-local",
+ "-msgth",
+ "-nsites",
+ "-pri",
+ "-remote",
+ "-start",
+ "-timeout",
+ NULL
+ };
+ enum rmgr {
+ RMGR_ACK,
+ RMGR_LOCAL,
+ RMGR_MSGTH,
+ RMGR_NSITES,
+ RMGR_PRI,
+ RMGR_REMOTE,
+ RMGR_START,
+ RMGR_TIMEOUT
+ };
+ Tcl_Obj **myobjv;
+ long to;
+ int ack, i, myobjc, optindex, result, ret, totype;
+ u_int32_t msgth, remote_flag, start_flag, uintarg;
+ char *arg;
+
+ result = TCL_OK;
+ ack = ret = totype = 0;
+ msgth = 1;
+ remote_flag = start_flag = 0;
+
+ if (objc <= 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?args?");
+ return (TCL_ERROR);
+ }
+ /*
+ * 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], rmgr, "option",
+ TCL_EXACT, &optindex) != TCL_OK) {
+ result = IS_HELP(objv[i]);
+ goto error;
+ }
+ i++;
+ switch ((enum rmgr)optindex) {
+ case RMGR_ACK:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-ack policy?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(arg, "all") == 0)
+ ack = DB_REPMGR_ACKS_ALL;
+ else if (strcmp(arg, "allpeers") == 0)
+ ack = DB_REPMGR_ACKS_ALL_PEERS;
+ else if (strcmp(arg, "none") == 0)
+ ack = DB_REPMGR_ACKS_NONE;
+ else if (strcmp(arg, "one") == 0)
+ ack = DB_REPMGR_ACKS_ONE;
+ else if (strcmp(arg, "onepeer") == 0)
+ ack = DB_REPMGR_ACKS_ONE_PEER;
+ else if (strcmp(arg, "quorum") == 0)
+ ack = DB_REPMGR_ACKS_QUORUM;
+ else {
+ Tcl_AddErrorInfo(interp,
+ "ack: illegal policy");
+ result = TCL_ERROR;
+ break;
+ }
+ _debug_check();
+ ret = dbenv->repmgr_set_ack_policy(dbenv, ack);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "ack");
+ break;
+ case RMGR_LOCAL:
+ result = Tcl_ListObjGetElements(interp, objv[i],
+ &myobjc, &myobjv);
+ if (result == TCL_OK)
+ i++;
+ else
+ break;
+ if (myobjc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-local {host port}?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(myobjv[0], NULL);
+ if ((result = _GetUInt32(interp, myobjv[1], &uintarg))
+ != TCL_OK)
+ break;
+ _debug_check();
+ /*
+ * No flags for now.
+ */
+ ret = dbenv->repmgr_set_local_site(dbenv,
+ arg, uintarg, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "repmgr_set_local_site");
+ break;
+ case RMGR_MSGTH:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(
+ interp, 2, objv, "?-msgth nth?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &msgth);
+ break;
+ case RMGR_NSITES:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-nsites num_sites?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = dbenv->rep_set_nsites(dbenv, uintarg);
+ }
+ break;
+ case RMGR_PRI:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-pri priority?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = dbenv->
+ rep_set_priority(dbenv, (int)uintarg);
+ }
+ break;
+ case RMGR_REMOTE:
+ result = Tcl_ListObjGetElements(interp, objv[i],
+ &myobjc, &myobjv);
+ if (result == TCL_OK)
+ i++;
+ else
+ break;
+ if (myobjc != 2 && myobjc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-remote {host port [peer]}?");
+ result = TCL_ERROR;
+ break;
+ }
+ /*
+ * Get the flag first so we can reuse 'arg'.
+ */
+ if (myobjc == 3) {
+ arg = Tcl_GetStringFromObj(myobjv[2], NULL);
+ if (strcmp(arg, "peer") == 0)
+ remote_flag = DB_REPMGR_PEER;
+ else {
+ Tcl_AddErrorInfo(interp,
+ "remote: illegal flag");
+ result = TCL_ERROR;
+ break;
+ }
+ }
+ arg = Tcl_GetStringFromObj(myobjv[0], NULL);
+ if ((result = _GetUInt32(interp, myobjv[1], &uintarg))
+ != TCL_OK)
+ break;
+ _debug_check();
+ ret = dbenv->repmgr_add_remote_site(dbenv,
+ arg, uintarg, NULL, remote_flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "repmgr_add_remote_site");
+ break;
+ case RMGR_START:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(
+ interp, 2, objv, "?-start state?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (strcmp(arg, "master") == 0)
+ start_flag = DB_REP_MASTER;
+ else if (strcmp(arg, "client") == 0)
+ start_flag = DB_REP_CLIENT;
+ else if (strcmp(arg, "elect") == 0)
+ start_flag = DB_REP_ELECTION;
+ else if (strcmp(arg, "full_elect") == 0)
+ start_flag = DB_REP_FULL_ELECTION;
+ else {
+ Tcl_AddErrorInfo(
+ interp, "start: illegal state");
+ result = TCL_ERROR;
+ break;
+ }
+ /*
+ * Some config functions need to be called
+ * before repmgr_start. So finish parsing all
+ * the args and call repmgr_start at the end.
+ */
+ break;
+ case RMGR_TIMEOUT:
+ result = Tcl_ListObjGetElements(interp, objv[i],
+ &myobjc, &myobjv);
+ if (result == TCL_OK)
+ i++;
+ else
+ break;
+ if (myobjc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-timeout {type to}?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(myobjv[0], NULL);
+ if (strcmp(arg, "ack") == 0)
+ totype = DB_REP_ACK_TIMEOUT;
+ else if (strcmp(arg, "elect") == 0)
+ totype = DB_REP_ELECTION_TIMEOUT;
+ else if (strcmp(arg, "elect_retry") == 0)
+ totype = DB_REP_ELECTION_RETRY;
+ else if (strcmp(arg, "conn_retry") == 0)
+ totype = DB_REP_CONNECTION_RETRY;
+ else {
+ Tcl_AddErrorInfo(interp,
+ "timeout: illegal type");
+ result = TCL_ERROR;
+ break;
+ }
+ if ((result = Tcl_GetLongFromObj(
+ interp, myobjv[1], &to)) != TCL_OK)
+ break;
+ _debug_check();
+ ret = dbenv->rep_set_timeout(dbenv, totype,
+ (db_timeout_t)to);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "rep_set_timeout");
+ break;
+ }
+ /*
+ * If, at any time, parsing the args we get an error,
+ * bail out and return.
+ */
+ if (result != TCL_OK)
+ goto error;
+ }
+ /*
+ * Only call repmgr_start if needed. The user may use this
+ * call just to reconfigure, change policy, etc.
+ */
+ if (start_flag != 0 && result == TCL_OK) {
+ _debug_check();
+ ret = dbenv->repmgr_start(dbenv, (int)msgth, start_flag);
+ result = _ReturnSetup(
+ interp, ret, DB_RETOK_STD(ret), "repmgr_start");
+ }
+error:
+ return (result);
+}
#endif
diff --git a/db/tcl/tcl_seq.c b/db/tcl/tcl_seq.c
index de3e4dd61..2fc43f7d6 100644
--- a/db/tcl/tcl_seq.c
+++ b/db/tcl/tcl_seq.c
@@ -1,23 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2004-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_seq.c,v 11.12 2004/10/25 18:02:56 bostic Exp $
+ * $Id: tcl_seq.c,v 12.6 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#ifdef HAVE_64BIT_TYPES
-#ifdef HAVE_SEQUENCE
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
#include "dbinc_auto/sequence_ext.h"
@@ -291,13 +287,11 @@ tcl_SeqGet(interp, objc, objv, seq)
DB_SEQUENCE *seq; /* Sequence pointer */
{
static const char *seqgetopts[] = {
- "-auto_commit",
"-nosync",
"-txn",
NULL
};
enum seqgetopts {
- SEQGET_AUTO_COMMIT,
SEQGET_NOSYNC,
SEQGET_TXN
};
@@ -336,9 +330,6 @@ tcl_SeqGet(interp, objc, objv, seq)
}
i++;
switch ((enum seqgetopts)optindex) {
- case SEQGET_AUTO_COMMIT:
- aflag |= DB_AUTO_COMMIT;
- break;
case SEQGET_NOSYNC:
aflag |= DB_TXN_NOSYNC;
break;
@@ -394,13 +385,11 @@ tcl_SeqRemove(interp, objc, objv, seq, ip)
DBTCL_INFO *ip; /* Info pointer */
{
static const char *seqgetopts[] = {
- "-auto_commit",
"-nosync",
"-txn",
NULL
};
enum seqgetopts {
- SEQGET_AUTO_COMMIT,
SEQGET_NOSYNC,
SEQGET_TXN
};
@@ -439,9 +428,6 @@ tcl_SeqRemove(interp, objc, objv, seq, ip)
}
i++;
switch ((enum seqgetopts)optindex) {
- case SEQGET_AUTO_COMMIT:
- aflag |= DB_AUTO_COMMIT;
- break;
case SEQGET_NOSYNC:
aflag |= DB_TXN_NOSYNC;
break;
@@ -523,4 +509,4 @@ tcl_SeqGetFlags(interp, objc, objv, seq)
return (result);
}
-#endif /* HAVE_SEQUENCE */
+#endif /* HAVE_64BIT_TYPES */
diff --git a/db/tcl/tcl_txn.c b/db/tcl/tcl_txn.c
index b819c24b7..a3712172f 100644
--- a/db/tcl/tcl_txn.c
+++ b/db/tcl/tcl_txn.c
@@ -1,23 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_txn.c,v 11.70 2004/10/27 16:48:32 bostic Exp $
+ * $Id: tcl_txn.c,v 12.16 2006/09/11 14:53:42 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
static int tcl_TxnCommit __P((Tcl_Interp *,
@@ -142,28 +137,32 @@ tcl_Txn(interp, objc, objv, envp, envip)
{
static const char *txnopts[] = {
#ifdef CONFIG_TEST
- "-degree_2",
- "-dirty",
"-lock_timeout",
+ "-read_committed",
+ "-read_uncommitted",
"-txn_timeout",
#endif
"-nosync",
"-nowait",
"-parent",
+ "-snapshot",
"-sync",
+ "-wrnosync",
NULL
};
enum txnopts {
#ifdef CONFIG_TEST
- TXNDEGREE2,
- TXNDIRTY,
- TXN_LOCK_TIMEOUT,
- TXN_TIMEOUT,
+ TXNLOCK_TIMEOUT,
+ TXNREAD_COMMITTED,
+ TXNREAD_UNCOMMITTED,
+ TXNTIMEOUT,
#endif
TXNNOSYNC,
TXNNOWAIT,
TXNPARENT,
- TXNSYNC
+ TXNSNAPSHOT,
+ TXNSYNC,
+ TXNWRNOSYNC
};
DBTCL_INFO *ip;
DB_TXN *parent;
@@ -196,35 +195,33 @@ tcl_Txn(interp, objc, objv, envp, envip)
i++;
switch ((enum txnopts)optindex) {
#ifdef CONFIG_TEST
- case TXNDEGREE2:
- flag |= DB_DEGREE_2;
- break;
- case TXNDIRTY:
- flag |= DB_DIRTY_READ;
- break;
- case TXN_LOCK_TIMEOUT:
+ case TXNLOCK_TIMEOUT:
lk_timeflag = DB_SET_LOCK_TIMEOUT;
- goto getit;
- case TXN_TIMEOUT:
+ goto get_timeout;
+ case TXNTIMEOUT:
tx_timeflag = DB_SET_TXN_TIMEOUT;
-getit: if (i >= objc) {
+get_timeout: if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
"?-txn_timestamp time?");
return (TCL_ERROR);
}
result = Tcl_GetLongFromObj(interp, objv[i++], (long *)
- ((enum txnopts)optindex == TXN_LOCK_TIMEOUT ?
+ ((enum txnopts)optindex == TXNLOCK_TIMEOUT ?
&lk_time : &tx_time));
if (result != TCL_OK)
return (TCL_ERROR);
break;
+ case TXNREAD_COMMITTED:
+ flag |= DB_READ_COMMITTED;
+ break;
+ case TXNREAD_UNCOMMITTED:
+ flag |= DB_READ_UNCOMMITTED;
+ 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:
@@ -244,10 +241,15 @@ getit: if (i >= objc) {
return (TCL_ERROR);
}
break;
+ case TXNSNAPSHOT:
+ flag |= DB_TXN_SNAPSHOT;
+ break;
case TXNSYNC:
- FLAG_CHECK2(flag, DB_DIRTY_READ);
flag |= DB_TXN_SYNC;
break;
+ case TXNWRNOSYNC:
+ flag |= DB_TXN_WRITE_NOSYNC;
+ break;
}
}
snprintf(newname, sizeof(newname), "%s.txn%d",
@@ -304,6 +306,63 @@ getit: if (i >= objc) {
}
/*
+ * tcl_CDSGroup --
+ *
+ * PUBLIC: int tcl_CDSGroup __P((Tcl_Interp *, int,
+ * PUBLIC: Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
+ */
+int
+tcl_CDSGroup(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;
+ DB_TXN *txn;
+ Tcl_Obj *res;
+ int result, ret;
+ char newname[MSG_SIZE];
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "env cdsgroup");
+ return (TCL_ERROR);
+ }
+
+ result = TCL_OK;
+ memset(newname, 0, MSG_SIZE);
+
+ 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);
+ }
+ _debug_check();
+ ret = envp->cdsgroup_begin(envp, &txn);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "cdsgroup");
+ if (result == TCL_ERROR)
+ _DeleteInfo(ip);
+ else {
+ /*
+ * Success. Set up return. Set up new info
+ * and command widget for this txn.
+ */
+ envip->i_envtxnid++;
+ ip->i_parent = envip;
+ _SetInfoData(ip, txn);
+ (void)Tcl_CreateObjCommand(interp, newname,
+ (Tcl_ObjCmdProc *)txn_Cmd, (ClientData)txn, NULL);
+ res = NewStringObj(newname, strlen(newname));
+ Tcl_SetObjResult(interp, res);
+ }
+ return (result);
+}
+
+/*
* tcl_TxnStat --
*
* PUBLIC: int tcl_TxnStat __P((Tcl_Interp *, int,
@@ -350,18 +409,19 @@ tcl_TxnStat(interp, objc, objv, envp)
MAKE_STAT_LSN("LSN of last checkpoint", &sp->st_last_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("Maximum 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 active txns", sp->st_nactive);
+ MAKE_STAT_LIST("Number of snapshot txns", sp->st_nsnapshot);
MAKE_STAT_LIST("Number restored txns", sp->st_nrestores);
+ MAKE_STAT_LIST("Maximum active txns", sp->st_maxnactive);
+ MAKE_STAT_LIST("Maximum snapshot txns", sp->st_maxnsnapshot);
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++)
- for (ip = LIST_FIRST(&__db_infohead); ip != NULL;
- ip = LIST_NEXT(ip, entries)) {
+ LIST_FOREACH(ip, &__db_infohead, entries) {
if (ip->i_type != I_TXN)
continue;
if (ip->i_type == I_TXN &&
@@ -428,18 +488,24 @@ txn_Cmd(clientData, interp, objc, objv)
static const char *txncmds[] = {
#ifdef CONFIG_TEST
"discard",
+ "getname",
"id",
"prepare",
+ "setname",
#endif
"abort",
"commit",
+ "getname",
+ "setname",
NULL
};
enum txncmds {
#ifdef CONFIG_TEST
TXNDISCARD,
+ TXNGETNAME,
TXNID,
TXNPREPARE,
+ TXNSETNAME,
#endif
TXNABORT,
TXNCOMMIT
@@ -449,7 +515,9 @@ txn_Cmd(clientData, interp, objc, objv)
Tcl_Obj *res;
int cmdindex, result, ret;
#ifdef CONFIG_TEST
- u_int8_t *gid;
+ u_int8_t *gid, garray[DB_XIDDATASIZE];
+ int length;
+ const char *name;
#endif
Tcl_ResetResult(interp);
@@ -503,8 +571,9 @@ txn_Cmd(clientData, interp, objc, objv)
return (TCL_ERROR);
}
_debug_check();
- gid = (u_int8_t *)Tcl_GetByteArrayFromObj(objv[2], NULL);
- ret = txnp->prepare(txnp, gid);
+ gid = (u_int8_t *)Tcl_GetByteArrayFromObj(objv[2], &length);
+ memcpy(garray, gid, (size_t)length);
+ ret = txnp->prepare(txnp, garray);
/*
* !!!
* DB_TXN->prepare commits all outstanding children. But it
@@ -516,6 +585,27 @@ txn_Cmd(clientData, interp, objc, objv)
result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
"txn prepare");
break;
+ case TXNGETNAME:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ _debug_check();
+ ret = txnp->get_name(txnp, &name);
+ if ((result = _ReturnSetup(
+ interp, ret, DB_RETOK_STD(ret), "txn getname")) == TCL_OK)
+ res = NewStringObj(name, strlen(name));
+ break;
+ case TXNSETNAME:
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "name");
+ return (TCL_ERROR);
+ }
+ _debug_check();
+ ret = txnp->set_name(txnp, Tcl_GetStringFromObj(objv[2], NULL));
+ result =
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "setname");
+ break;
#endif
case TXNABORT:
if (objc != 2) {
@@ -557,11 +647,13 @@ tcl_TxnCommit(interp, objc, objv, txnp, txnip)
static const char *commitopt[] = {
"-nosync",
"-sync",
+ "-wrnosync",
NULL
};
enum commitopt {
+ COMNOSYNC,
COMSYNC,
- COMNOSYNC
+ COMWRNOSYNC
};
u_int32_t flag;
int optindex, result, ret;
@@ -580,13 +672,14 @@ tcl_TxnCommit(interp, objc, objv, txnp, txnip)
return (IS_HELP(objv[2]));
switch ((enum commitopt)optindex) {
case COMSYNC:
- FLAG_CHECK(flag);
flag = DB_TXN_SYNC;
break;
case COMNOSYNC:
- FLAG_CHECK(flag);
flag = DB_TXN_NOSYNC;
break;
+ case COMWRNOSYNC:
+ flag = DB_TXN_WRITE_NOSYNC;
+ break;
}
}
diff --git a/db/tcl/tcl_util.c b/db/tcl/tcl_util.c
index 13a6d6a9d..90935f27e 100644
--- a/db/tcl/tcl_util.c
+++ b/db/tcl/tcl_util.c
@@ -1,32 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: tcl_util.c,v 11.43 2004/06/10 17:20:57 bostic Exp $
+ * $Id: tcl_util.c,v 12.5 2006/08/24 14:46:33 bostic Exp $
*/
#include "db_config.h"
+#include "db_int.h"
#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
#include <tcl.h>
#endif
-
-#include "db_int.h"
#include "dbinc/tcl_db.h"
/*
- * Prototypes for procedures defined later in this file:
- */
-static int mutex_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
-
-/*
* bdb_RandCommand --
* Implements rand* functions.
*
@@ -119,250 +108,3 @@ bdb_RandCommand(interp, objc, objv)
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, nitems, mode, result, ret;
- char newname[MSG_SIZE];
-
- md = NULL;
- result = TCL_OK;
- ret = 0;
-
- 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);
-
- memset(newname, 0, MSG_SIZE);
- 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->size = sizeof(_MUTEX_ENTRY) * (u_int)nitems;
-
- md->reginfo.dbenv = envp;
- md->reginfo.type = REGION_TYPE_MUTEX;
- md->reginfo.id = INVALID_REGION_ID;
- 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_int(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);
- (void)Tcl_CreateObjCommand(interp, newname,
- (Tcl_ObjCmdProc *)mutex_Cmd, (ClientData)md, NULL);
- res = NewStringObj(newname, strlen(newname));
- Tcl_SetObjResult(interp, res);
-
- return (TCL_OK);
-
-posixout:
- if (ret > 0)
- (void)Tcl_PosixError(interp);
- result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "mutex");
- _DeleteInfo(ip);
-
- if (md != NULL) {
- if (md->reginfo.addr != NULL)
- (void)__db_r_detach(md->env, &md->reginfo, 0);
- __os_free(md->env, 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 const 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->env, 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);
- 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_NewLongObj((long)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);
-}
diff --git a/db/test/README b/db/test/README
index 181f9355a..881cd7df9 100644
--- a/db/test/README
+++ b/db/test/README
@@ -28,10 +28,10 @@ Each test starts with a section like the following:
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: README,v 1.6 2004/01/28 03:36:26 bostic Exp $
+# $Id: README,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# TEST test001
# TEST Small keys/data
diff --git a/db/test/TESTS b/db/test/TESTS
index 5392aa7c3..e2331cb6c 100644
--- a/db/test/TESTS
+++ b/db/test/TESTS
@@ -2,6 +2,26 @@
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+MVCC and cursor adjustment.
+ Set up a -snapshot cursor and position it in the middle
+ of a database.
+ Write to the database, both before and after the cursor,
+ and verify that it stays on the same position.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+MVCC and databases that turn multi-version on and off.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Test basic functionality: a snapshot transaction started
+ before a regular transaction's put can't see the modification.
+ A snapshot transaction started after the put can see it.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Test what happens if a txn_ckp record falls into a
+ different log file than the DBREG_CKP records generated
+ by the same checkpoint.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
bigfile001
Create a database greater than 4 GB in size. Close, verify.
Grow the database somewhat. Close, reverify. Lather, rinse,
@@ -125,6 +145,58 @@ env011
Run with region overwrite flag.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env012
+ Test DB_REGISTER.
+
+ DB_REGISTER will fail on systems without fcntl. If it
+ fails, make sure we got the expected DB_OPNOTSUP return.
+
+ Then, the real tests:
+ For each test, we start a process that opens an env with -register.
+
+ 1. Verify that a 2nd process can enter the existing env with -register.
+
+ 2. Kill the 1st process, and verify that the 2nd process can enter
+ with "-register -recover".
+
+ 3. Kill the 1st process, and verify that the 2nd process cannot
+ enter with just "-register".
+
+ 4. While the 1st process is still running, a 2nd process enters
+ with "-register". Kill the 1st process. Verify that a 3rd process
+ can enter with "-register -recover". Verify that the 3rd process,
+ entering, causes process 2 to fail with the message DB_RUNRECOVERY.
+
+ 5. We had a bug where recovery was always run with -register
+ if there were empty slots in the process registry file. Verify
+ that recovery doesn't automatically run if there is an empty slot.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env013
+ Test of basic functionality of fileid_reset.
+
+ Create a database in an env. Copy it to a new file within
+ the same env. Reset the file id and make sure it has changed.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env014
+
+ Make sure that attempts to open an environment with
+ incompatible flags (e.g. replication without transactions)
+ fail with the appropriate messages.
+
+ A new thread of control joining an env automatically
+ initializes the same subsystems as the original env.
+ Make sure that the attempt to change subsystems when
+ joining an env fails with the appropriate messages.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env015
+ Rename the underlying directory of an env, make sure everything
+ still works. Test runs with regular named databases and with
+ in-memory named databases.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
fop001.tcl
Test file system operations, combined in a transaction. [#7363]
@@ -157,7 +229,7 @@ fop005
and relative paths, and with subdirectories.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-fop006.tcl
+fop006
Test file system operations in multiple simultaneous
transactions. Start one transaction, do a file operation.
Start a second transaction, do a file operation. Abort
@@ -165,6 +237,16 @@ fop006.tcl
appropriate outcome.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop007
+ Test file system operations on named in-memory databases.
+ Combine two ops in one transaction.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop008
+ Test file system operations on named in-memory databases.
+ Combine two ops in one transaction.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
jointest
Test duplicate assisted joins. Executes 1, 2, 3 and 4-way joins
with differing index orders and selectivity.
@@ -249,6 +331,19 @@ log006
Test setting via DB_CONFIG.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log007
+ Test of in-memory logging bugs. [#11505]
+
+ Test db_printlog with in-memory logs.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log009
+ Test of logging and getting log file version information.
+ Each time we cross a log file boundary verify we can
+ get the version via the log cursorlag.
+ Do this both forward and backward.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
memp001
Randomly updates pages.
@@ -266,16 +361,13 @@ memp004
Test that small read-only databases are mapped into memory.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-mutex001
- Test basic mutex functionality
+plat001
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-mutex002
- Test basic mutex synchronization
+ Test of portability of sequences.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-mutex003
- Generate a bunch of parallel testers that try to randomly obtain locks.
+ Create and dump a database containing sequences. Save the dump.
+ This test is used in conjunction with the upgrade tests, which
+ will compare the saved dump to a locally created dump.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
recd001
@@ -405,6 +497,17 @@ recd021
Test for regular files and subdbs.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd022
+ Test that pages allocated by an aborted subtransaction
+ within an aborted prepared parent transaction are returned
+ to the free list after recovery. This exercises
+ __db_pg_prepare in systems without FTRUNCATE. [#7403]
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd023
+ Test recover of reverse split.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
rep001
Replication rename and forced-upgrade test.
@@ -521,6 +624,7 @@ rep013
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.
+ Rerun the test, turning on client-to-client synchronization.
Swap and verify several times.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -622,6 +726,18 @@ rep024
and site 1 comes back up as a client. Verify database.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep025
+ Test of DB_REP_JOIN_FAILURE.
+
+ One master, one client.
+ Generate several log files.
+ Remove old master log files.
+ Delete client files and restart client.
+ Put one more record to the master. At the next
+ processing of messages, the client should get JOIN_FAILURE.
+ Recover with a hot failover.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
rep026
Replication elections - simulate a crash after sending
a vote.
@@ -658,7 +774,7 @@ rep030
Test of internal initialization multiple files and pagesizes.
Hold some databases open on master.
- One master, one client.
+ One master, one client using a data_dir for internal init.
Generate several log files.
Remove old master log files.
Delete client files and restart client.
@@ -670,15 +786,16 @@ rep031
One master, one client.
Put one more record to the master.
- Test that internal initialization block log_archive, rename, remove.
+ Test that internal initialization blocks:
+ log_archive, rename, remove, fileid_reset, lsn_reset.
Sleep 30+ seconds.
- Test that we can now log_archive, rename, remove.
+ Test that blocked operations are now unblocked.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
rep032
Test of log gap processing.
- One master, one clients.
+ One master, one client.
Run rep_test.
Run rep_test without sending messages to client.
Make sure client missing the messages catches up properly.
@@ -701,6 +818,7 @@ rep034
Close one client and change master to other client.
Reopen closed client - enter startup.
Run rep_test and we should see live messages and startup complete.
+ Run the test with/without client-to-client synchronization.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
rep035
@@ -733,6 +851,334 @@ rep037
Verify page throttling occurred.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep038
+ Test of internal initialization and ongoing master updates.
+
+ One master, one client.
+ Generate several log files.
+ Remove old master log files.
+ Delete client files and restart client.
+ Put more records on master while initialization is in progress.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep039
+ Test of internal initialization and master changes.
+
+ One master, two clients.
+ Generate several log files. Remove old master log files.
+ Delete client files and restart client.
+ While initialization is happening, change masters.
+ Vary the number of times we process messages to make sure
+ we change masters at varying stages of the first internal
+ initialization.
+
+ Run for btree only because of the number of permutations.
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep040
+ Test of racing rep_start and transactions.
+
+ One master, one client.
+ Have master in the middle of a transaction.
+ Call rep_start to make master a client.
+ Commit the transaction.
+ Call rep_start to make master the master again.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep041
+ Turn replication on and off at run-time.
+
+ Start a master with replication OFF (noop transport function).
+ Run rep_test to advance log files and archive.
+ Start up client; change master to working transport function.
+ Now replication is ON.
+ Do more ops, make sure client is up to date.
+ Close client, turn replication OFF on master, do more ops.
+ Repeat from point A.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep042
+ Concurrency with updates.
+
+ Verify racing role changes and updates don't result in
+ pages with LSN 0,1. Set up an environment that is master.
+ Spawn child process that does a delete, but using the
+ $env check so that it sleeps in the middle of the call.
+ Master downgrades and then sleeps as a client so that
+ child will run. Verify child does not succeed (should
+ get read-only error) due to role change in the middle of
+ its call.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep043
+
+ Constant writes during upgrade/downgrade.
+
+ Three envs take turns being master. Each env
+ has a child process which does writes all the
+ time. They will succeed when that env is master
+ and fail when it is not.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep044
+
+ Test rollbacks with open file ids.
+
+ We have one master with two handles and one client.
+ Each time through the main loop, we open a db, write
+ to the db, and close the db. Each one of these actions
+ is propagated to the client, or a roll back is forced
+ by swapping masters.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep045
+
+ Replication with versions.
+
+ Mimic an application where a database is set up in the
+ background and then put into a replication group for use.
+ The "version database" identifies the current live
+ version, the database against which queries are made.
+ For example, the version database might say the current
+ version is 3, and queries would then be sent to db.3.
+ Version 4 is prepared for use while version 3 is in use.
+ When version 4 is complete, the version database is updated
+ to point to version 4 so queries can be directed there.
+
+ This test has a master and two clients. One client swaps
+ roles with the master, and the other client runs constantly
+ in another process.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep046
+ Replication and basic bulk transfer.
+ Set bulk transfer replication option.
+ Run long txns on master and then commit. Process on client
+ and verify contents. Run a very long txn so that logging
+ must send the log. Process and verify on client.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep047
+ Replication and log gap bulk transfers.
+ Set bulk transfer replication option.
+ Run test. Start a new client (to test ALL_REQ and bulk).
+ Run small test again. Clear messages for 1 client.
+ Run small test again to test LOG_REQ gap processing and bulk.
+ Process and verify on clients.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep048
+ Replication and log gap bulk transfers.
+ Have two master env handles. Turn bulk on in
+ one (turns it on for both). Turn it off in the other.
+ While toggling, send log records from both handles.
+ Process message and verify master and client match.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep049
+ Replication and delay syncing clients - basic test.
+
+ Open and start up a master and two clients. Turn on delay sync
+ in the delayed client. Change master, add data and process messages.
+ Verify delayed client does not match. Make additional changes and
+ update the delayted client. Verify all match.
+ Add in a fresh delayed client to test delay of ALL_REQ.
+ Process startup messages and verify freshc client has no database.
+ Sync and verify fresh client matches.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep050
+ Replication and delay syncing clients - change master test.
+
+ Open and start up master and 4 clients. Turn on delay for 3 clients.
+ Switch masters, add data and verify delayed clients are out of date.
+ Make additional changes to master. And change masters again.
+ Sync/update delayed client and verify. The 4th client is a brand
+ new delayed client added in to test the non-verify path.
+
+ Then test two different things:
+ 1. Swap master again while clients are still delayed.
+ 2. Swap master again while sync is proceeding for one client.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep051
+ Test of compaction with replication.
+
+ Run rep_test in a replicated master environment.
+ Delete a large number of entries and compact with -freespace.
+ Propagate the changes to the client and make sure client and
+ master match.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep052
+ Test of replication with NOWAIT.
+
+ One master, one client. After initializing
+ everything normally, close client and let the
+ master get ahead -- far enough that the master
+ no longer has the client's last log file.
+ Reopen the client and turn on NOWAIT.
+ Process a few messages to get the client into
+ recovery mode, and verify that lockout occurs
+ on a txn API call (txn_begin) and an env API call.
+ Process all the messages and verify that lockout
+ is over.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep053
+ Replication and basic client-to-client synchronization.
+
+ Open and start up master and 1 client.
+ Start up a second client later and verify it sync'ed from
+ the original client, not the master.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep054
+ Test of internal initialization where a far-behind
+ client takes over as master.
+
+ One master, two clients.
+ Run rep_test and process.
+ Close client 1.
+ Run rep_test, opening new databases, and processing
+ messages. Archive as we go so that log files get removed.
+ Close master and reopen client 1 as master. Process messages.
+ Verify that new master and client are in sync.
+ Run rep_test again, adding data to one of the new
+ named databases.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep055
+ Test of internal initialization and log archiving.
+
+ One master, one client.
+ Generate several log files.
+ Remove old master log files and generate several more.
+ Get list of archivable files from db_archive and restart client.
+ As client is in the middle of internal init, remove
+ the log files returned earlier by db_archive.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep056
+ Replication test with in-memory named databases.
+
+ Rep056 is just a driver to run rep001 with in-memory
+ named databases.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep057
+ Replication test of internal initialization with
+ in-memory named databases.
+
+ Rep057 is just a driver to run rep029 with in-memory
+ named databases.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep058
+
+ Replication with early databases
+
+ Mimic an application where they create a database before
+ calling rep_start, thus writing log records on a client
+ before it is a client. Verify we cannot join repl group.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep059
+
+ Replication with multiple recycle records.
+
+ Mimic an application where a client has multiple recycle records
+ only in its log and then tries to synchronize. This has been
+ a problem because there is real log, but no perm records to
+ match on.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep060
+ Test of normally running clients and internal initialization.
+ Have a client running normally, but slow/far behind the master.
+ Then the master checkpoints and archives, causing the client
+ to suddenly be thrown into internal init. This test tests
+ that we clean up the old files/pages in mpool and dbreg.
+ Also test same thing but the app holding an open dbp as well.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep061
+ Test of internal initialization multiple files and pagesizes
+ with page gaps.
+
+ One master, one client.
+ Generate several log files.
+ Remove old master log files.
+ Delete client files and restart client.
+ Put one more record to the master.
+ Force some page messages to get dropped.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep062
+ Test of internal initialization where client has a different
+ kind of database than the master.
+
+ Create a master of one type, and let the client catch up.
+ Close the client.
+ Remove the database on the master, and create a new
+ database of the same name but a different type.
+ Run the master ahead far enough that internal initialization
+ will be required on the reopen of the client.
+ Reopen the client and verify.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep063
+ Replication election test with simulated different versions
+ for each site. This tests that old sites with real priority
+ trump ELECTABLE sites with zero priority even with greater LSNs.
+ There is a special case in the code for testing that if the
+ priority is <= 10, we simulate mixed versions for elections.
+
+ Run a rep_test in a replicated master environment and close;
+ hold an election among a group of clients to make sure they select
+ the master with varying LSNs and priorities.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep064
+ Replication rename and forced-upgrade test.
+
+ The test verifies that the client correctly
+ (internally) closes files when upgrading to master.
+ It does this by having the master have a database
+ open, then crashing. The client upgrades to master,
+ and attempts to remove the open database.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep065
+ Tests replication running with different versions.
+ This capability is introduced with 4.5.
+
+ Start a replication group of 1 master and N sites, all
+ running some historical version greater than or equal to 4.2.
+ Take down a client and bring it up again running 4.5. Run
+ some upgrades, make sure everything works.
+
+ Each site runs the tcllib of its own version, but uses
+ the 4.5 tcl code (e.g. test.tcl).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep066
+ Replication and dead log handles.
+
+ Run rep_test on master and a client.
+ Simulate client crashes (master continues) until log 2.
+ Open 2nd master env handle and put something in log and flush.
+ Downgrade master, restart client as master.
+ Run rep_test on newmaster until log 2.
+ New master writes log records, newclient processes records
+ and 2nd newclient env handle calls log_flush.
+ New master commits, newclient processes and should succeed.
+ Make sure 2nd handle detects the old log handle and doesn't
+ write to a stale handle (if it does, the processing of the
+ commit will fail).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
rpc001
Test RPC server timeouts for cursor, txn and env handles.
@@ -860,14 +1306,17 @@ sdb006
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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)
+ If the physical file already exists, we ignore pagesize specifications
+ on any subsequent -creates.
+
+ 1. Create/open a subdb with system default page size.
+ Create/open a second subdb specifying a different page size.
+ The create should succeed, but the pagesize of the new db
+ will be the system default page size.
+ 2. Create/open a subdb with a specified, non-default page size.
+ Create/open a second subdb specifying a different page size.
+ The create should succeed, but the pagesize of the new db
+ will be the specified page size from the first create.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
sdb008
@@ -895,6 +1344,73 @@ sdb012
are open works correctly, and in the face of txns.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb013
+ Tests in-memory subdatabases.
+ Create an in-memory subdb. Test for persistence after
+ overflowing the cache. Test for conflicts when we have
+ two in-memory files.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb014
+ Tests mixing in-memory named and in-memory unnamed dbs.
+ Create a regular in-memory db, add data.
+ Create a named in-memory db.
+ Try to create the same named in-memory db again (should fail).
+ Try to create a different named in-memory db (should succeed).
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb015
+ Tests basic in-memory named database functionality
+ Small keys, small data
+ Put/get per key
+
+ 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.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb016
+ Creates many in-memory named dbs and puts a small amount of
+ data in each (many defaults to 100)
+
+ Use the first 100 entries from the dictionary as names.
+ 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.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb017
+ Test DB->rename() for in-memory named databases.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb018
+ Tests join of in-memory named databases.
+
+ 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.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb019
+ Tests in-memory subdatabases.
+ Create an in-memory subdb. Test for persistence after
+ overflowing the cache. Test for conflicts when we have
+ two in-memory files.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb020
+ Tests in-memory subdatabases.
+ Create an in-memory subdb with one page size. Close, and
+ open with a different page size: should fail.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
sdbtest001
Tests multiple access methods in one subdb
Open several subdbs, each with a different access method
@@ -943,7 +1459,7 @@ sec002
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
si001
- Basic secondary index put/delete test
+ Secondary index put/delete with lorder test
Put data in primary db and check that pget on secondary
index finds the right entries. Alter the primary in the
@@ -982,6 +1498,34 @@ si005
Basic secondary index put/delete test with transactions
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si006
+
+ Test -immutable_key interface.
+
+ DB_IMMUTABLE_KEY is an optimization to be used when a
+ secondary key will not be changed. It does not prevent
+ a deliberate change to the secondary key, it just does not
+ propagate that change when it is made to the primary.
+ This test verifies that a change to the primary is propagated
+ to the secondary or not as specified by -immutable_key.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si007
+ Secondary index put/delete with lorder test
+
+ This test is the same as si001 with the exception
+ that we create and populate the primary and THEN
+ create the secondaries and associate them with -create.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si008
+ Secondary index put/delete with lorder test
+
+ This test is the same as si001 except that we
+ create the secondaries with different byte orders:
+ one native, one swapped.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
sijointest: Secondary index and join test.
This used to be si005.tcl.
@@ -1132,7 +1676,7 @@ test012
test013
Partial put test
Overwrite entire records using partial puts.
- Make surethat NOOVERWRITE flag works.
+ Make sure that NOOVERWRITE flag works.
1. Insert 10000 keys and retrieve them (equal key/data pairs).
2. Attempt to overwrite keys with NO_OVERWRITE set (expect error).
@@ -1719,7 +2263,7 @@ 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.
+ database read-only twice. One with dirty reads 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).
@@ -1822,15 +2366,14 @@ test106
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
test107
- Test of degree 2 isolation. [#8689]
+ Test of read-committed (degree 2 isolation). [#8689]
- We set up a database. Open a degree 2 transactional
- cursor and a regular transactional cursor on it.
- Position each cursor on one page, and do a put to
- a different page.
+ We set up a database. Open a read-committed transactional cursor and
+ a regular transactional cursor on it. Position each cursor on one page,
+ and do a put to a different page.
Make sure that:
- - the put succeeds if we are using degree 2.
+ - the put succeeds if we are using degree 2 isolation.
- the put deadlocks within a regular transaction with
a regular cursor.
@@ -1841,6 +2384,111 @@ test109
Test of sequences.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test110
+ Partial get test with duplicates.
+
+ For hash and btree, create and populate a database
+ with dups. Randomly selecting offset and length,
+ retrieve data from each record and make sure we
+ get what we expect.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test111
+ Test database compaction.
+
+ Populate a database. Remove a high proportion of entries.
+ Dump and save contents. Compact the database, dump again,
+ and make sure we still have the same contents.
+ Add back some entries, delete more entries (this time by
+ cursor), dump, compact, and do the before/after check again.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test112
+ Test database compaction with a deep tree.
+
+ This is a lot like test111, but with a large number of
+ entries and a small page size to make the tree deep.
+ To make it simple we use numerical keys all the time.
+
+ Dump and save contents. Compact the database, dump again,
+ and make sure we still have the same contents.
+ Add back some entries, delete more entries (this time by
+ cursor), dump, compact, and do the before/after check again.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test113
+ Test database compaction with duplicates.
+
+ This is essentially test111 with duplicates.
+ To make it simple we use numerical keys all the time.
+
+ Dump and save contents. Compact the database, dump again,
+ and make sure we still have the same contents.
+ Add back some entries, delete more entries (this time by
+ cursor), dump, compact, and do the before/after check again.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test114
+ Test database compaction with overflows.
+
+ Populate a database. Remove a high proportion of entries.
+ Dump and save contents. Compact the database, dump again,
+ and make sure we still have the same contents.
+ Add back some entries, delete more entries (this time by
+ cursor), dump, compact, and do the before/after check again.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test115
+ Test database compaction with user-specified btree sort.
+
+ This is essentially test111 with the user-specified sort.
+ Populate a database. Remove a high proportion of entries.
+ Dump and save contents. Compact the database, dump again,
+ and make sure we still have the same contents.
+ Add back some entries, delete more entries (this time by
+ cursor), dump, compact, and do the before/after check again.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test116
+ Test of basic functionality of lsn_reset.
+
+ Create a database in an env. Copy it to a new file within
+ the same env. Reset the page LSNs.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test117
+ Test database compaction with requested fill percent.
+
+ Populate a database. Remove a high proportion of entries.
+ Dump and save contents. Compact the database, requesting
+ fill percentages starting at 10% and working our way up to
+ 100. On each cycle, make sure we still have the same contents.
+
+ Unlike the other compaction tests, this one does not
+ use -freespace.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test119
+ Test behavior when Berkeley DB returns DB_BUFFER_SMALL on a cursor.
+
+ If the user-supplied buffer is not large enough to contain
+ the returned value, DB returns BUFFER_SMALL. If it does,
+ check that the cursor does not move -- if it moves, it will
+ skip items. [#13815]
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test120
+ Test of multi-version concurrency control.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test121
+ Tests of multi-version concurrency control.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test122
+ Tests of multi-version concurrency control.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
txn001
Begin, commit, abort testing.
@@ -1882,3 +2530,13 @@ txn011
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).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn012
+ Test txn->getname and txn->setname.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn013
+ Test of txns used in the wrong environment.
+ Set up two envs. Start a txn in one env, and attempt to use it
+ in the other env. Verify we get the appropriate error message.
diff --git a/db/test/archive.tcl b/db/test/archive.tcl
index fa68f633b..d3583d05a 100644
--- a/db/test/archive.tcl
+++ b/db/test/archive.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: archive.tcl,v 11.26 2004/09/22 18:01:04 bostic Exp $
+# $Id: archive.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Options are:
# -checkrec <checkpoint frequency"
diff --git a/db/test/bigfile001.tcl b/db/test/bigfile001.tcl
index 399814138..2d1d878ac 100644
--- a/db/test/bigfile001.tcl
+++ b/db/test/bigfile001.tcl
@@ -1,23 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: bigfile001.tcl,v 11.9 2004/01/28 03:36:26 bostic Exp $
+# $Id: bigfile001.tcl,v 12.4 2006/08/24 14:46:34 bostic Exp $
#
# TEST bigfile001
# TEST Create a database greater than 4 GB in size. Close, verify.
# TEST Grow the database somewhat. Close, reverify. Lather, rinse,
# TEST repeat. Since it will not work on all systems, this test is
# TEST not run by default.
-proc bigfile001 { method \
- { itemsize 4096 } { nitems 1048576 } { growby 5000 } { growtms 2 } args } {
+proc bigfile001 { { itemsize 4096 } \
+ { nitems 1048576 } { growby 5000 } { growtms 2 } args } {
source ./include.tcl
+ set method "btree"
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Bigfile: $method ($args) $nitems * $itemsize bytes of data"
+ puts "Bigfile001: $method ($args) $nitems * $itemsize bytes of data"
env_cleanup $testdir
@@ -31,45 +32,35 @@ proc bigfile001 { method \
-cachesize {0 50000000 0}} $omethod $args $dbname]
error_check_good db_open [is_valid_db $db] TRUE
- puts -nonewline "\tBigfile.a: Creating database...0%..."
+ puts "\tBigfile001.a: Creating database..."
flush stdout
set data [string repeat z $itemsize]
- set more_than_ten_already 0
for { set i 0 } { $i < $nitems } { incr i } {
set key key[format %08u $i]
error_check_good db_put($i) [$db put $key $data] 0
- if { $i % 5000 == 0 } {
+ if { $i % 50000 == 0 } {
set pct [expr 100 * $i / $nitems]
- puts -nonewline "\b\b\b\b\b"
- if { $pct >= 10 } {
- if { $more_than_ten_already } {
- puts -nonewline "\b"
- } else {
- set more_than_ten_already 1
- }
- }
-
- puts -nonewline "$pct%..."
+ puts "\tBigfile001.a: $pct%..."
flush stdout
}
}
- puts "\b\b\b\b\b\b100%..."
+ puts "\tBigfile001.a: 100%."
error_check_good db_close [$db close] 0
- puts "\tBigfile.b: Verifying database..."
+ puts "\tBigfile001.b: Verifying database..."
error_check_good verify \
[verify_dir $testdir "\t\t" 0 0 1 50000000] 0
- puts "\tBigfile.c: Grow database $growtms times by $growby items"
+ puts "\tBigfile001.c: Grow database $growtms times by $growby items"
for { set j 0 } { $j < $growtms } { incr j } {
set db [eval {berkdb_open} {-cachesize {0 50000000 0}} $dbname]
error_check_good db_open [is_valid_db $db] TRUE
- puts -nonewline "\t\tBigfile.c.1: Adding $growby items..."
+ puts -nonewline "\t\tBigfile001.c.1: Adding $growby items..."
flush stdout
for { set i 0 } { $i < $growby } { incr i } {
set key key[format %08u $i].$j
@@ -78,7 +69,7 @@ proc bigfile001 { method \
error_check_good db_close [$db close] 0
puts "done."
- puts "\t\tBigfile.c.2: Verifying database..."
+ puts "\t\tBigfile001.c.2: Verifying database..."
error_check_good verify($j) \
[verify_dir $testdir "\t\t\t" 0 0 1 50000000] 0
}
diff --git a/db/test/bigfile002.tcl b/db/test/bigfile002.tcl
index 6686f9ac6..7d3f8324a 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: bigfile002.tcl,v 11.9 2004/01/28 03:36:26 bostic Exp $
+# $Id: bigfile002.tcl,v 12.5 2006/08/24 14:46:34 bostic Exp $
#
# TEST bigfile002
# TEST This one should be faster and not require so much disk space,
@@ -12,8 +12,7 @@
proc bigfile002 { args } {
source ./include.tcl
- puts -nonewline \
- "Bigfile002: Creating large, sparse file through mpool..."
+ puts "Bigfile002: Creating large, sparse file through mpool..."
flush stdout
env_cleanup $testdir
@@ -32,13 +31,11 @@ proc bigfile002 { args } {
error_check_good pg_set [$pg is_setto A] 1
# Put page back.
- error_check_good pg_put [$pg put -dirty] 0
+ error_check_good pg_put [$pg put] 0
# Fsync.
error_check_good fsync [$file fsync] 0
- puts "succeeded."
-
# Close.
error_check_good fclose [$file close] 0
error_check_good env_close [$env close] 0
diff --git a/db/test/byteorder.tcl b/db/test/byteorder.tcl
index d94f5a014..7559a4798 100644
--- a/db/test/byteorder.tcl
+++ b/db/test/byteorder.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: byteorder.tcl,v 11.16 2004/01/28 03:36:26 bostic Exp $
+# $Id: byteorder.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Byte Order Test
# Use existing tests and run with both byte orders.
diff --git a/db/test/conscript.tcl b/db/test/conscript.tcl
index 8740ae214..52b5bbacf 100644
--- a/db/test/conscript.tcl
+++ b/db/test/conscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: conscript.tcl,v 11.25 2004/01/28 03:36:26 bostic Exp $
+# $Id: conscript.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Script for DB_CONSUME test (test070.tcl).
# Usage: conscript dir file runtype nitems outputfile tnum args
diff --git a/db/test/dbm.tcl b/db/test/dbm.tcl
index 49a0f3e13..5ed41e346 100644
--- a/db/test/dbm.tcl
+++ b/db/test/dbm.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dbm.tcl,v 11.17 2004/01/28 03:36:26 bostic Exp $
+# $Id: dbm.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# TEST dbm
# TEST Historic DBM interface test. Use the first 1000 entries from the
diff --git a/db/test/dbscript.tcl b/db/test/dbscript.tcl
index 8ddcec09d..3388a5ad4 100644
--- a/db/test/dbscript.tcl
+++ b/db/test/dbscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dbscript.tcl,v 11.16 2004/01/28 03:36:26 bostic Exp $
+# $Id: dbscript.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Random db tester.
# Usage: dbscript file numops min_del max_add key_avg data_avgdups
diff --git a/db/test/ddoyscript.tcl b/db/test/ddoyscript.tcl
index 30e6c34e0..9f1d4b44e 100644
--- a/db/test/ddoyscript.tcl
+++ b/db/test/ddoyscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: ddoyscript.tcl,v 11.8 2004/01/28 03:36:26 bostic Exp $
+# $Id: ddoyscript.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Deadlock detector script tester.
# Usage: ddoyscript dir lockerid numprocs
diff --git a/db/test/ddscript.tcl b/db/test/ddscript.tcl
index 173cb2a69..15772e89f 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: ddscript.tcl,v 11.15 2004/03/18 20:58:14 carol Exp $
+# $Id: ddscript.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Deadlock detector script tester.
# Usage: ddscript dir test lockerid objid numprocs
diff --git a/db/test/dead001.tcl b/db/test/dead001.tcl
index fca094bf1..27c37dfc3 100644
--- a/db/test/dead001.tcl
+++ b/db/test/dead001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead001.tcl,v 11.37 2004/01/28 03:36:26 bostic Exp $
+# $Id: dead001.tcl,v 12.5 2006/08/24 14:46:34 bostic Exp $
#
# TEST dead001
# TEST Use two different configurations to test deadlock detection among a
@@ -29,10 +29,10 @@ proc dead001 { { procs "2 4 10" } {tests "ring clump" } \
foreach t $tests {
foreach n $procs {
if {$timeout == 0 } {
- set dpid [exec $util_path/db_deadlock -vw \
+ set dpid [exec $util_path/db_deadlock -v -t 0.100000 \
-h $testdir >& $testdir/dd.out &]
} else {
- set dpid [exec $util_path/db_deadlock -vw \
+ set dpid [exec $util_path/db_deadlock -v -t 0.100000 \
-ae -h $testdir >& $testdir/dd.out &]
}
@@ -46,10 +46,9 @@ proc dead001 { { procs "2 4 10" } {tests "ring clump" } \
for { set i 0 } { $i < $n } { incr i } {
set locker [$env lock_id]
puts "$tclsh_path $test_path/wrap.tcl \
- $testdir/dead$tnum.log.$i \
- ddscript.tcl $testdir $t $locker $i $n"
- set p [exec $tclsh_path \
- $test_path/wrap.tcl \
+ ddscript.tcl $testdir/dead$tnum.log.$i \
+ $testdir $t $locker $i $n"
+ set p [exec $tclsh_path $test_path/wrap.tcl \
ddscript.tcl $testdir/dead$tnum.log.$i \
$testdir $t $locker $i $n &]
lappend pidlist $p
diff --git a/db/test/dead002.tcl b/db/test/dead002.tcl
index 7493216d2..d90c99cdc 100644
--- a/db/test/dead002.tcl
+++ b/db/test/dead002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead002.tcl,v 11.30 2004/07/07 17:05:55 carol Exp $
+# $Id: dead002.tcl,v 12.4 2006/08/24 14:46:34 bostic Exp $
#
# TEST dead002
# TEST Same test as dead001, but use "detect on every collision" instead
@@ -37,10 +37,9 @@ proc dead002 { { procs "2 4 10" } {tests "ring clump" } \
for { set i 0 } { $i < $n } { incr i } {
set locker [$env lock_id]
puts "$tclsh_path $test_path/wrap.tcl \
- $testdir/dead$tnum.log.$i \
- ddscript.tcl $testdir $t $locker $i $n"
- set p [exec $tclsh_path \
- $test_path/wrap.tcl \
+ ddscript.tcl $testdir/dead$tnum.log.$i \
+ $testdir $t $locker $i $n"
+ set p [exec $tclsh_path $test_path/wrap.tcl \
ddscript.tcl $testdir/dead$tnum.log.$i \
$testdir $t $locker $i $n &]
lappend pidlist $p
diff --git a/db/test/dead003.tcl b/db/test/dead003.tcl
index 2a74ce423..a50ab30ce 100644
--- a/db/test/dead003.tcl
+++ b/db/test/dead003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead003.tcl,v 1.20 2004/01/28 03:36:26 bostic Exp $
+# $Id: dead003.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# TEST dead003
# TEST
diff --git a/db/test/dead004.tcl b/db/test/dead004.tcl
index 4f33dcd75..1bc1bbeee 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead004.tcl,v 11.15 2004/01/28 03:36:27 bostic Exp $
+# $Id: dead004.tcl,v 12.3 2006/08/24 14:46:34 bostic Exp $
#
# Deadlock Test 4.
# This test is designed to make sure that we handle youngest and oldest
diff --git a/db/test/dead005.tcl b/db/test/dead005.tcl
index 78e9ce838..fc3dea5a4 100644
--- a/db/test/dead005.tcl
+++ b/db/test/dead005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead005.tcl,v 11.15 2004/03/17 15:17:17 bostic Exp $
+# $Id: dead005.tcl,v 12.4 2006/08/24 14:46:35 bostic Exp $
#
# Deadlock Test 5.
# Test out the minlocks, maxlocks, and minwrites options
@@ -26,8 +26,8 @@ proc dead005 { { procs "4 6 10" } \
minwrites { set to w }
}
foreach n $procs {
- set dpid [exec $util_path/db_deadlock -vw -h $testdir \
- -a $to >& $testdir/dd.out &]
+ set dpid [exec $util_path/db_deadlock -v -t 0.100000 \
+ -h $testdir -a $to >& $testdir/dd.out &]
sentinel_init
set pidlist ""
diff --git a/db/test/dead006.tcl b/db/test/dead006.tcl
index 4d80af418..12acf176f 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead006.tcl,v 1.6 2004/01/28 03:36:27 bostic Exp $
+# $Id: dead006.tcl,v 12.3 2006/08/24 14:46:35 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 e9aefa9c0..23e3b8ce8 100644
--- a/db/test/dead007.tcl
+++ b/db/test/dead007.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: dead007.tcl,v 1.6 2004/01/28 03:36:27 bostic Exp $
+# $Id: dead007.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST dead007
# TEST Tests for locker and txn id wraparound.
diff --git a/db/test/env001.tcl b/db/test/env001.tcl
index 4e2c070e5..792a074bd 100644
--- a/db/test/env001.tcl
+++ b/db/test/env001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env001.tcl,v 11.28 2004/01/28 03:36:27 bostic Exp $
+# $Id: env001.tcl,v 12.5 2006/08/24 14:46:35 bostic Exp $
#
# TEST env001
# TEST Test of env remove interface (formerly env_remove).
@@ -34,26 +34,22 @@ proc env001 { } {
puts "\tEnv001.c: Verify close."
error_check_good env:close:$env [$env close] 0
- # Make sure we can reopen -- this doesn't work on Windows
- # because if there is only one opener, the region disappears
- # when it is closed. We can't do a second opener, because
- # that will fail on HP-UX.
+ # Make sure we can reopen.
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]
- error_check_bad env:$testdir $env NULL
- error_check_good env:$testdir [is_substr $env "env"] 1
+ puts "\t\tEnv001.d.1: Verify re-open."
+ set env [berkdb_env -home $testdir]
+ error_check_bad env:$testdir $env NULL
+ error_check_good env:$testdir [is_substr $env "env"] 1
- # remove environment
- puts "\t\tEnv001.d.2: Close environment."
- error_check_good env:close [$env close] 0
- puts "\t\tEnv001.d.3: Try remove with force (should succeed)."
- error_check_good \
- envremove [berkdb envremove -force -home $testdir] 0
- }
+ # remove environment
+ puts "\t\tEnv001.d.2: Close environment."
+ error_check_good env:close [$env close] 0
+ puts "\t\tEnv001.d.3: Try remove with force (should succeed)."
+ error_check_good \
+ envremove [berkdb envremove -force -home $testdir] 0
- if { $is_windows_test != 1 && $is_hp_test != 1 } {
+ # HP-UX doesn't allow a second handle on an open env.
+ if { $is_hp_test != 1 } {
puts "\tEnv001.e: Remove on open environments."
puts "\t\tEnv001.e.1: Env is open by single proc,\
remove no force."
@@ -67,8 +63,7 @@ proc env001 { } {
puts \
"\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} {
+ if { $is_hp_test != 1 } {
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
@@ -110,10 +105,7 @@ proc env001 { } {
error_check_good close_remote_process $err 0
puts "\t\tEnv001.e.4: Env is open by 2 procs, remove with force."
- # You cannot do this on windows because you can't remove files that
- # are open, so we skip this test for Windows. On UNIX, it should
- # succeed
- if { $is_windows_test != 1 && $is_hp_test != 1 } {
+ if { $is_hp_test != 1 } {
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
diff --git a/db/test/env002.tcl b/db/test/env002.tcl
index 70f573c29..fa16e6745 100644
--- a/db/test/env002.tcl
+++ b/db/test/env002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env002.tcl,v 11.17 2004/01/28 03:36:27 bostic Exp $
+# $Id: env002.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env002
# TEST Test of DB_LOG_DIR and env name resolution.
diff --git a/db/test/env003.tcl b/db/test/env003.tcl
index 247fcd3c9..c845f84db 100644
--- a/db/test/env003.tcl
+++ b/db/test/env003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env003.tcl,v 11.23 2004/01/28 03:36:27 bostic Exp $
+# $Id: env003.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env003
# TEST Test DB_TMP_DIR and env name resolution
diff --git a/db/test/env004.tcl b/db/test/env004.tcl
index fe975d700..ab6a34ec1 100644
--- a/db/test/env004.tcl
+++ b/db/test/env004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env004.tcl,v 11.22 2004/04/23 15:40:12 sue Exp $
+# $Id: env004.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env004
# TEST Test multiple data directories. Do a bunch of different opens
diff --git a/db/test/env005.tcl b/db/test/env005.tcl
index fc08bc97f..89efec925 100644
--- a/db/test/env005.tcl
+++ b/db/test/env005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env005.tcl,v 11.20 2004/01/28 03:36:27 bostic Exp $
+# $Id: env005.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env005
# TEST Test that using subsystems without initializing them correctly
diff --git a/db/test/env006.tcl b/db/test/env006.tcl
index 9f2203357..a30bb194a 100644
--- a/db/test/env006.tcl
+++ b/db/test/env006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env006.tcl,v 11.11 2004/04/27 19:56:44 carol Exp $
+# $Id: env006.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env006
# TEST Make sure that all the utilities exist and run.
diff --git a/db/test/env007.tcl b/db/test/env007.tcl
index efbb17d55..92fbbbd3b 100644
--- a/db/test/env007.tcl
+++ b/db/test/env007.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env007.tcl,v 11.41 2004/09/22 18:01:04 bostic Exp $
+# $Id: env007.tcl,v 12.13 2006/09/12 18:19:08 carol Exp $
#
# TEST env007
# TEST Test DB_CONFIG config file options for berkdb env.
@@ -16,6 +16,7 @@
# TEST really env testing, but there's no better place to put it.
proc env007 { } {
global errorInfo
+ global errorCode
global passwd
global has_crypto
source ./include.tcl
@@ -41,7 +42,7 @@ proc env007 { } {
set rlist {
{ " -txn_max " "set_tx_max" "19" "31"
"Env007.a1: Txn Max" "txn_stat"
- "Max Txns" "0" "get_tx_max" }
+ "Maximum txns" "0" "get_tx_max" }
{ " -lock_max_locks " "set_lk_max_locks" "17" "29"
"Env007.a2: Lock Max" "lock_stat"
"Maximum locks" "0" "get_lk_max_locks" }
@@ -93,10 +94,14 @@ proc env007 { } {
{ " -txn_timeout " "set_txn_timeout" "100" "120"
"Env007.a15: Txn timeout" "lock_stat"
"Transaction timeout value" "0" "get_timeout txn" }
+ { " -log_filemode " "set_lg_filemode" "417" "637"
+ "Env007.a16: Log FileMode" "log_stat"
+ "Log file mode" "0" "get_lg_filemode" }
}
set e "berkdb_env_noerr -create -mode 0644 -home $testdir -txn "
set qnxexclude {set_cachesize}
+
foreach item $rlist {
set envarg [lindex $item 0]
set configarg [lindex $item 1]
@@ -144,7 +149,8 @@ proc env007 { } {
if { $statcmd != "" } {
set statconfigval [lindex $configval $index]
if { $statstr == "Region size" } {
- set statconfigval [expr $statconfigval + $lbufsize]
+ set statconfigval \
+ [expr $statconfigval + $lbufsize]
}
env007_check $env $statcmd $statstr $statconfigval
}
@@ -215,6 +221,7 @@ proc env007 { } {
{ "set_txn_timeout" "50" "get_timeout txn" "50" }
{ "set_verbose" "db_verb_deadlock" "get_verbose deadlock" "on" }
{ "set_verbose" "db_verb_recovery" "get_verbose recovery" "on" }
+ { "set_verbose" "db_verb_register" "get_verbose register" "on" }
{ "set_verbose" "db_verb_replication" "get_verbose rep" "on" }
{ "set_verbose" "db_verb_waitsfor" "get_verbose wait" "on" }
}
@@ -222,6 +229,7 @@ proc env007 { } {
env_cleanup $testdir
set e "berkdb_env_noerr -create -mode 0644 -home $testdir -txn"
set directlist {db_direct_db db_direct_log}
+
foreach item $cfglist {
env_cleanup $testdir
set configarg [lindex $item 0]
@@ -265,6 +273,7 @@ proc env007 { } {
{ "-txn" "" "-txn" "get_open_flags" }
{ "-recover" "-txn" "-recover" "get_open_flags" }
{ "-recover_fatal" "-txn" "-recover_fatal" "get_open_flags" }
+ { "-register" "-txn -recover" "-register" "get_open_flags" }
{ "-use_environ" "" "-use_environ" "get_open_flags" }
{ "-use_environ_root" "" "-use_environ_root" "get_open_flags" }
{ "" "" "-create" "get_open_flags" }
@@ -274,13 +283,14 @@ proc env007 { } {
}
if { $has_crypto == 1 } {
- lappend envopenlist \
- { "-encryptaes" "$passwd" "-encryptaes" "get_encrypt_flags" }
+ lappend envopenlist {
+ "-encryptaes" "$passwd" "-encryptaes" "get_encrypt_flags" }
}
- set e "berkdb_env -create -mode 0644 -home $testdir"
+ set e "berkdb_env_noerr -create -mode 0644 -home $testdir"
set qnxexclude {-system_mem}
foreach item $envopenlist {
+ env_cleanup $testdir
set envarg [lindex $item 0]
set envval [lindex $item 1]
set retval [lindex $item 2]
@@ -291,29 +301,48 @@ proc env007 { } {
puts "\t\tEnv007: Skipping $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
+ puts "\t\tEnv007.c: $envarg $retval"
- # 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
+ # Set up env
+ set ret [catch {eval $e $envarg $envval} env]
+
+ if { $ret != 0 } {
+ # If the env open failed, it may be because we're on a
+ # platform such as HP-UX 10 that won't support mutexes
+ # in shmget memory. Verify that the return value was
+ # EINVAL or EOPNOTSUPP and bail gracefully.
+ error_check_good \
+ is_shm_test [is_substr $envarg -system_mem] 1
+ error_check_good returned_error [expr \
+ [is_substr $errorCode EINVAL] || \
+ [is_substr $errorCode EOPNOTSUPP]] 1
+ puts "Warning: platform\
+ does not support mutexes in shmget memory."
+ puts "Skipping shared memory mpool test."
+ } else {
+ error_check_good env_open [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 envclose [$env close] 0
+ }
}
}
}
@@ -405,7 +434,6 @@ proc env007 { } {
{ "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" }
@@ -432,8 +460,7 @@ proc env007 { } {
# 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
+ error_check_good error [is_substr $errorCode EINVAL] 1
}
puts "\tEnv007.g: Config name error set_xxx"
@@ -452,7 +479,6 @@ proc env007 { } {
# 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" }
@@ -468,7 +494,7 @@ proc env007 { } {
{ "" "-renumber" "-recno" "get_flags" }
{ "" "-snapshot" "-recno" "get_flags" }
{ "" "-create" "" "get_open_flags" }
- { "" "-create -dirty" "" "get_open_flags" }
+ { "" "-create -read_uncommitted" "" "get_open_flags" }
{ "" "-create -excl" "" "get_open_flags" }
{ "" "-create -nommap" "" "get_open_flags" }
{ "" "-create -thread" "" "get_open_flags" }
@@ -483,7 +509,7 @@ proc env007 { } {
{ "-source" "include.tcl" "-recno" "get_re_source" }
}
- set o "berkdb_open -create -mode 0644"
+ set o "berkdb_open_noerr -create -mode 0644"
foreach item $olist {
cleanup $testdir NULL
set flag [lindex $item 0]
@@ -494,34 +520,52 @@ proc env007 { } {
}
set getter [lindex $item 3]
+ puts "\t\tEnv007.h: $flag $flagval"
+
# 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]
+ set ret [catch {eval $o $method $flag {$flagval}\
+ $testdir/a.db} db]
} else {
- set db [eval $o $method $flag $flagval\
- $testdir/a.db]
+ set ret [catch {eval $o $method $flag $flagval\
+ $testdir/a.db} 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
+ if { $ret != 0 } {
+ # If the open failed, it may be because we're on a
+ # platform such as HP-UX 10 that won't support
+ # locks in process-local memory.
+ # Verify that the return value was EOPNOTSUPP
+ # and bail gracefully.
+ error_check_good \
+ is_thread_test [is_substr $flagval -thread] 1
+ error_check_good returned_error [expr \
+ [is_substr $errorCode EINVAL] || \
+ [is_substr $errorCode EOPNOTSUPP]] 1
+ puts "Warning: platform does not support\
+ locks inside process-local memory."
+ puts "Skipping test of -thread flag."
} else {
- error_check_good get_flagval \
- [eval $db $getter] $flagval
+ 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
}
- error_check_good dbclose:0 [$db close] 0
}
puts "\tEnv007.i: Test berkdb_open -rdonly."
diff --git a/db/test/env008.tcl b/db/test/env008.tcl
index c203d55d4..c34504771 100644
--- a/db/test/env008.tcl
+++ b/db/test/env008.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env008.tcl,v 11.8 2004/01/28 03:36:27 bostic Exp $
+# $Id: env008.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env008
# TEST Test environments and subdirectories.
diff --git a/db/test/env009.tcl b/db/test/env009.tcl
index e6fd3a563..fb4898f89 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env009.tcl,v 11.9 2004/09/23 21:45:21 mjc Exp $
+# $Id: env009.tcl,v 12.4 2006/09/12 18:22:37 carol Exp $
#
# TEST env009
# TEST Test calls to all the various stat functions. We have several
@@ -44,7 +44,7 @@ proc env009 { } {
{ "lock_stat" "Maximum locks" "Env009.c" $e }
{ "log_stat" "Magic" "Env009.d" "$e" }
{ "mpool_stat" "Number of caches" "Env009.e" "$e"}
- { "txn_stat" "Max Txns" "Env009.f" "$e" }
+ { "txn_stat" "Maximum txns" "Env009.f" "$e" }
{ "rep_stat" "{Environment ID} 1" "Env009.g (Master)" "$repenv(M)"}
{ "rep_stat" "{Environment ID} 2" "Env009.h (Client)" "$repenv(C)"}
}
diff --git a/db/test/env010.tcl b/db/test/env010.tcl
index 403f0cd9d..5e6d7fe8b 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env010.tcl,v 1.7 2004/01/28 03:36:27 bostic Exp $
+# $Id: env010.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST env010
# TEST Run recovery in an empty directory, and then make sure we can still
diff --git a/db/test/env011.tcl b/db/test/env011.tcl
index de6c82b36..ed92e94bb 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: env011.tcl,v 1.4 2004/01/28 03:36:27 bostic Exp $
+# $Id: env011.tcl,v 12.4 2006/08/24 14:46:35 bostic Exp $
#
# TEST env011
# TEST Run with region overwrite flag.
@@ -19,9 +19,9 @@ proc env011 { } {
set db [eval \
{berkdb_open -auto_commit -env $e -btree -create -mode 0644} ]
error_check_good dbopen [is_valid_db $db] TRUE
- set ret [eval {$db put} -auto_commit "aaa" "data"]
+ set ret [eval {$db put} "aaa" "data"]
error_check_good put $ret 0
- set ret [eval {$db put} -auto_commit "bbb" "data"]
+ set ret [eval {$db put} "bbb" "data"]
error_check_good put $ret 0
error_check_good db_close [$db close] 0
error_check_good envclose [$e close] 0
diff --git a/db/test/env012.tcl b/db/test/env012.tcl
new file mode 100644
index 000000000..4f40bd28b
--- /dev/null
+++ b/db/test/env012.tcl
@@ -0,0 +1,253 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: env012.tcl,v 12.11 2006/09/18 19:43:26 carol Exp $
+#
+# TEST env012
+# TEST Test DB_REGISTER.
+# TEST
+# TEST DB_REGISTER will fail on systems without fcntl. If it
+# TEST fails, make sure we got the expected DB_OPNOTSUP return.
+# TEST
+# TEST Then, the real tests:
+# TEST For each test, we start a process that opens an env with -register.
+# TEST
+# TEST 1. Verify that a 2nd process can enter the existing env with -register.
+# TEST
+# TEST 2. Kill the 1st process, and verify that the 2nd process can enter
+# TEST with "-register -recover".
+# TEST
+# TEST 3. Kill the 1st process, and verify that the 2nd process cannot
+# TEST enter with just "-register".
+# TEST
+# TEST 4. While the 1st process is still running, a 2nd process enters
+# TEST with "-register". Kill the 1st process. Verify that a 3rd process
+# TEST can enter with "-register -recover". Verify that the 3rd process,
+# TEST entering, causes process 2 to fail with the message DB_RUNRECOVERY.
+# TEST
+# TEST 5. We had a bug where recovery was always run with -register
+# TEST if there were empty slots in the process registry file. Verify
+# TEST that recovery doesn't automatically run if there is an empty slot.
+proc env012 { } {
+ source ./include.tcl
+ set tnum "012"
+
+ puts "Env$tnum: Test of DB_REGISTER."
+
+ puts "\tEnv$tnum.a: Platforms without fcntl fail with DB_OPNOTSUP."
+ env_cleanup $testdir
+ if {[catch {eval {berkdb_env} \
+ -create -home $testdir -txn -register -recover} env]} {
+ error_check_good fail_OPNOTSUP [is_substr $env DB_OPNOTSUP] 1
+ puts "Skipping env$tnum; DB_REGISTER is not supported."
+ }
+ error_check_good env_close [$env close] 0
+
+ puts "\tEnv$tnum.b: Second process can join with -register."
+ env_cleanup $testdir
+ set testfile TESTFILE
+ set key KEY
+ set data DATA1
+
+ puts "\t\tEnv$tnum.b1: Start process 1."
+ set p1 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p1 \
+ $testdir $testfile PUT $key $data RECOVER 10 &]
+
+ # Wait a while so process 1 has a chance to get going.
+ tclsleep 2
+
+ puts "\t\tEnv$tnum.b2: Start process 2."
+ set p2 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p2 \
+ $testdir $testfile GET $key $data 0 0 &]
+
+ watch_procs $p1 1 120
+ watch_procs $p2 1 120
+
+ # Check log files for failures.
+ logcheck $testdir/env$tnum.log.p1
+ logcheck $testdir/env$tnum.log.p2
+
+ puts "\tEnv$tnum.c: Second process can join with -register\
+ -recover after first process is killed."
+ env_cleanup $testdir
+
+ puts "\t\tEnv$tnum.c1: Start process 1."
+ set pids {}
+ set p1 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p1 \
+ $testdir $testfile PUT $key $data RECOVER 10 &]
+ lappend pids $p1
+ tclsleep 2
+
+ puts "\t\tEnv$tnum.c2: Kill process 1."
+ set pids [findprocessids $testdir $pids]
+ foreach pid $pids {
+ tclkill $pid
+ }
+
+ puts "\t\tEnv$tnum.c3: Start process 2."
+ set p2 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p2 \
+ $testdir $testfile GET $key $data RECOVER 0 &]
+
+ watch_procs $p2 1 120
+
+ # Check log files for failures.
+ logcheck $testdir/env$tnum.log.p1
+ logcheck $testdir/env$tnum.log.p2
+
+ if { $is_windows_test == 1 } {
+ puts "Skipping sections .d and .e on Windows platform."
+ } else {
+ puts "\tEnv$tnum.d: Second process cannot join without -recover\
+ after first process is killed."
+ env_cleanup $testdir
+
+ puts "\t\tEnv$tnum.d1: Start process 1."
+ set pids {}
+ set p1 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p1 \
+ $testdir $testfile PUT $key $data RECOVER 10 &]
+ lappend pids $p1
+ tclsleep 2
+
+ puts "\t\tEnv$tnum.d2: Kill process 1."
+ set pids [findprocessids $testdir $pids]
+ foreach pid $pids {
+ tclkill $pid
+ }
+
+ puts "\t\tEnv$tnum.d3: Start process 2."
+ set p2 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p2 \
+ $testdir $testfile GET $key $data 0 0 &]
+ tclsleep 2
+ watch_procs $p2 1 120
+
+ # Check log files. Log p1 should be clean, but we
+ # expect DB_RUNRECOVERY in log p2.
+ logcheck $testdir/env$tnum.log.p1
+ logcheckfails $testdir/env$tnum.log.p2 DB_RUNRECOVERY
+
+ puts "\tEnv$tnum.e: Running registered process detects failure."
+ env_cleanup $testdir
+
+ puts "\t\tEnv$tnum.e1: Start process 1."
+ set pids {}
+ set p1 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p1 \
+ $testdir $testfile PUT $key $data RECOVER 10 &]
+ lappend pids $p1
+ tclsleep 2
+
+ # Identify child process to kill later.
+ set pids [findprocessids $testdir $pids]
+
+ puts "\t\tEnv$tnum.e2: Start process 2."
+ set p2 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p2 \
+ $testdir $testfile LOOP $key $data 0 10 &]
+
+ puts "\t\tEnv$tnum.e3: Kill process 1."
+ foreach pid $pids {
+ tclkill $pid
+ }
+
+ puts "\t\tEnv$tnum.e4: Start process 3."
+ set p3 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p3 \
+ $testdir $testfile GET $key $data RECOVER 0 &]
+ tclsleep 2
+
+ watch_procs $p2 1 120
+ watch_procs $p3 1 120
+
+ # Check log files. Logs p1 and p3 should be clean, but we
+ # expect DB_RUNRECOVERY in log p2.
+ logcheck $testdir/env$tnum.log.p1
+ logcheckfails $testdir/env$tnum.log.p2 DB_RUNRECOVERY
+ logcheck $testdir/env$tnum.log.p3
+ }
+
+ puts "\tEnv$tnum.f: Empty slot shouldn't cause automatic recovery."
+
+ # Create 2 empty slots in the registry by letting two processes
+ # run to completion.
+ puts "\t\tEnv$tnum.f1: Start process 1."
+ set p1 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p1 \
+ $testdir $testfile PUT $key $data RECOVER 1 &]
+
+ puts "\t\tEnv$tnum.f2: Start process 2."
+ set p2 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p2 \
+ $testdir $testfile GET $key $data 0 1 &]
+
+ watch_procs $p1 1 60
+ watch_procs $p2 1 60
+
+ logcheck $testdir/env$tnum.log.p1
+ logcheck $testdir/env$tnum.log.p2
+
+ # Start two more process. Neither should signal a need for recovery.
+ puts "\t\tEnv$tnum.f3: Start process 3."
+ set p3 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p3 \
+ $testdir $testfile GET $key $data RECOVER 10 &]
+
+ tclsleep 2
+
+ puts "\t\tEnv$tnum.f4: Start process 4."
+ set p4 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ $testdir/env$tnum.log.p4 \
+ $testdir $testfile PUT $key $data 0 10 &]
+
+ watch_procs $p3 1 120
+ watch_procs $p4 1 120
+
+ # Check log files to verify that neither process returned DB_RUNRECOVERY.
+ logcheck $testdir/env$tnum.log.p3
+ logcheck $testdir/env$tnum.log.p4
+}
+
+# Check log file and report failures with FAIL. Use this when
+# we don't expect failures.
+proc logcheck { logname } {
+ set errstrings [eval findfail $logname]
+ foreach errstring $errstrings {
+ puts "FAIL: error in $logname : $errstring"
+ }
+}
+
+# When we expect a failure, verify we find the one we expect.
+proc logcheckfails { logname message } {
+ set f [open $logname r]
+ while { [gets $f line] >= 0 } {
+ if { [is_substr $line $message] == 1 } {
+ close $f
+ return 0
+ }
+ }
+ close $f
+ puts "FAIL: Did not find expected error $message."
+}
+
+# The script wrap.tcl creates a parent and a child process. We
+# can't see the child pids, so find them by their sentinel files.
+# This creates a list where the parent pid is always listed
+# before the child pid.
+proc findprocessids { testdir plist } {
+ set beginfiles [glob $testdir/begin.*]
+ foreach b $beginfiles {
+ regsub $testdir/begin. $b {} pid
+ if { [lsearch -exact $plist $pid] == -1 } {
+ lappend plist $pid
+ }
+ }
+ return $plist
+}
+
diff --git a/db/test/env013.tcl b/db/test/env013.tcl
new file mode 100644
index 000000000..cc9eeedf4
--- /dev/null
+++ b/db/test/env013.tcl
@@ -0,0 +1,85 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: env013.tcl,v 1.8 2006/08/24 14:46:35 bostic Exp $
+#
+# TEST env013
+# TEST Test of basic functionality of fileid_reset.
+# TEST
+# TEST Create a database in an env. Copy it to a new file within
+# TEST the same env. Reset the file id and make sure it has changed.
+proc env013 { } {
+ source ./include.tcl
+ global util_path
+
+ puts "Env013: Test fileid_reset."
+
+ set testfile A.db
+ set dupfile B.db
+ set nentries 500
+ set filenames "A B C D E"
+
+ foreach lorder { 1234 4321 } {
+ puts "\tEnv013.a: Creating env."
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir -txn]
+ error_check_good dbenv [is_valid_env $env] TRUE
+
+ # Open database A, populate and close.
+ puts "\tEnv013.b: Creating database with lorder $lorder."
+ foreach filename $filenames {
+ set db [eval {berkdb_open \
+ -pagesize 8192 -env $env -auto_commit \
+ -btree -create -mode 0644 $testfile $filename} ]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ for { set i 0 } { $i < $nentries } { incr i } {
+ set key KEY.$i
+ set data DATA.$i
+ error_check_good\
+ db_put [$db put -txn $t $key $data] 0
+ }
+ error_check_good txn_commit [$t commit] 0
+ error_check_good db_close [$db close] 0
+ }
+
+ # Copy database file A to database file B for fileid testing.
+ puts "\tEnv013.c: Copy database."
+ file copy -force $testdir/$testfile $testdir/$dupfile
+
+ # Reset B's fileid and confirm the ID has changed.
+ puts "\tEnv013.d: Resetting file id for copied database."
+ error_check_good fileid_reset [$env id_reset $dupfile] 0
+ set orig_id [getfileid $testdir/$testfile]
+ puts "\tEnv013.d: orig: $orig_id"
+ set new_id [getfileid $testdir/$dupfile]
+ puts "\tEnv013.d: new: $new_id"
+ error_check_bad id_changed $orig_id $new_id
+
+ # Verify and open B.
+ puts "\tEnv013.e: Verify and open database copy."
+ error_check_good verify [verify_dir $testdir "\tEnv013.e: "] 0
+ set db [eval {berkdb_open} \
+ -env $env -auto_commit -btree -mode 0644 -rdonly $dupfile]
+ error_check_good dup_open [is_valid_db $db] TRUE
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+ }
+}
+
+# Get file id number, identified as "uid" in db_stat.
+proc getfileid { db } {
+ global util_path
+
+ set ret [exec $util_path/db_dump -da $db]
+ set uidstart [string first "uid:" $ret]
+ set uidend [string first "\tminkey:" $ret]
+ set uid [string range $ret $uidstart $uidend]
+ set uid [string trimright $uid]
+ return $uid
+}
diff --git a/db/test/env014.tcl b/db/test/env014.tcl
new file mode 100644
index 000000000..90a6c2d63
--- /dev/null
+++ b/db/test/env014.tcl
@@ -0,0 +1,118 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: env014.tcl,v 12.4 2006/08/24 14:46:35 bostic Exp $
+#
+# TEST env014
+# TEST
+# TEST Make sure that attempts to open an environment with
+# TEST incompatible flags (e.g. replication without transactions)
+# TEST fail with the appropriate messages.
+# TEST
+# TEST A new thread of control joining an env automatically
+# TEST initializes the same subsystems as the original env.
+# TEST Make sure that the attempt to change subsystems when
+# TEST joining an env fails with the appropriate messages.
+
+proc env014 { } {
+ source ./include.tcl
+
+ set tnum "014"
+ puts "Env$tnum: Environment subsystem initialization and env joins."
+ env_cleanup $testdir
+
+ # Open an env with -recover but not -create; should fail.
+ puts "\tEnv$tnum.a: Open env with -recover but not -create."
+ catch {set env [berkdb_env_noerr -recover -txn -home $testdir]} ret
+ error_check_good recover_wo_create \
+ [is_substr $ret "requires the create flag"] 1
+
+ # Open an env with -recover but not -txn; should fail.
+ puts "\tEnv$tnum.b: Open env with -recover but not -txn."
+ catch {set env [berkdb_env_noerr -create -recover -home $testdir]} ret
+ error_check_good recover_wo_txn \
+ [is_substr $ret "requires transaction support"] 1
+
+ # Open an env with -replication but not -lock; should fail.
+ puts "\tEnv$tnum.c: Open env with -rep but not -lock."
+ catch {set env\
+ [berkdb_env_noerr -create -rep_master -home $testdir]} ret
+ error_check_good rep_wo_lock \
+ [is_substr $ret "requires locking support"] 1
+
+ # Open an env with -replication but not -txn; should fail.
+ puts "\tEnv$tnum.d: Open env with -rep but not -txn."
+ catch {set env\
+ [berkdb_env_noerr -create -rep_master -lock -home $testdir]} ret
+ error_check_good rep_wo_txn \
+ [is_substr $ret "requires transaction support"] 1
+
+ # Skip remainder of test for HP-UX; HP-UX does not allow
+ # opening a second handle on an environment.
+ if { $is_hp_test == 1 } {
+ puts "Skipping remainder of env$tnum for HP-UX."
+ return
+ }
+
+ # Join -txn env with -cdb; should fail.
+ puts "\tEnv$tnum.e: Join -txn env with -cdb."
+ set env [berkdb_env_noerr -create -home $testdir -txn]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ catch {set env2 [berkdb_env_noerr -home $testdir -cdb]} ret
+ error_check_good txn+cdb [is_substr $ret "incompatible"] 1
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -force -home $testdir] 0
+
+ # Join -cdb env with -txn; should fail.
+ puts "\tEnv$tnum.f: Join -cdb env with -txn."
+ set env [berkdb_env_noerr -create -home $testdir -cdb]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ catch {set env2 [berkdb_env_noerr -home $testdir -txn]} ret
+ error_check_good cdb+txn [is_substr $ret "incompatible"] 1
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -force -home $testdir] 0
+
+ # Open an env with -txn. Join the env, and start a txn.
+ puts "\tEnv$tnum.g: Join -txn env, and start a txn."
+ set env [berkdb_env_noerr -create -home $testdir -txn]
+ error_check_good env_open [is_valid_env $env] TRUE
+ set env2 [berkdb_env_noerr -home $testdir]
+ error_check_good env2_open [is_valid_env $env2] TRUE
+
+ set txn [$env2 txn]
+ error_check_good env2_txn [is_valid_txn $txn $env2] TRUE
+ error_check_good txn_commit [$txn commit] 0
+
+ error_check_good env2_close [$env2 close] 0
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -force -home $testdir] 0
+
+ # Join -txn env with -lock; should succeed and use txns.
+ puts "\tEnv$tnum.h: Join -txn env with -lock, and start a txn."
+ set env [berkdb_env_noerr -create -home $testdir -txn]
+ error_check_good env_open [is_valid_env $env] TRUE
+ set env2 [berkdb_env_noerr -home $testdir -lock]
+ error_check_good env2_open [is_valid_env $env2] TRUE
+
+ set txn [$env2 txn]
+ error_check_good env2_txn [is_valid_txn $txn $env2] TRUE
+ error_check_good txn_commit [$txn commit] 0
+
+ error_check_good env2_close [$env2 close] 0
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -force -home $testdir] 0
+
+ # Join plain vanilla env with -txn; should fail.
+ puts "\tEnv$tnum.i: Join plain vanilla env with -txn."
+ set env [berkdb_env_noerr -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ catch {set env2 [berkdb_env_noerr -home $testdir -txn]} ret
+ error_check_good ds+txn [is_substr $ret "incompatible"] 1
+
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -force -home $testdir] 0
+}
diff --git a/db/test/env015.tcl b/db/test/env015.tcl
new file mode 100644
index 000000000..2f741c8d2
--- /dev/null
+++ b/db/test/env015.tcl
@@ -0,0 +1,80 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: env015.tcl,v 12.4 2006/09/13 13:26:05 mjc Exp $
+#
+# TEST env015
+# TEST Rename the underlying directory of an env, make sure everything
+# TEST still works. Test runs with regular named databases and with
+# TEST in-memory named databases.
+
+proc env015 { } {
+ source ./include.tcl
+
+ env_cleanup $testdir
+ set newdir NEWDIR
+
+ puts "Env015: Test of renaming env directories."
+
+ foreach dbtype { inmem ondisk } {
+ puts "\tEnv015.a: Create env."
+ set env [berkdb_env -create -mode 0644 -home $testdir]
+ error_check_good env [is_valid_env $env] TRUE
+
+ puts "\tEnv015.b: Create $dbtype db."
+ if { $dbtype == "inmem" } {
+ set testfile { "" file1.db }
+ } else {
+ set testfile file1.db
+ }
+ set db [eval {berkdb_open} -create -env $env -btree $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+ for { set i 0 } { $i < 10 } { incr i } {
+ error_check_good db_put [$db put $i $i] 0
+ }
+
+ puts "\tEnv015.b: Rename directory."
+ if { $is_windows_test } {
+ file mkdir $newdir
+ eval file rename -force [glob $testdir/*] $newdir
+ fileremove -force $testdir
+ } else {
+ file rename -force $testdir $newdir
+ }
+
+ puts "\tEnv015.c: Database is still available in new directory."
+ for { set i 0 } { $i < 10 } { incr i } {
+ set ret [$db get $i]
+ error_check_good db_get [lindex [lindex $ret 0] 1] $i
+ }
+
+ puts "\tEnv015.d: Can't open database in old directory."
+ catch {set db2 \
+ [eval {berkdb_open} -env $env -btree $testdir/$testfile]} db2
+ error_check_bad open_fails [is_valid_db $db2] TRUE
+
+ puts "\tEnv015.e: Recreate directory with original name and use it."
+ file mkdir $testdir
+ set newenv [berkdb_env -create -mode 0644 -home $testdir]
+ error_check_good newenv [is_valid_env $env] TRUE
+
+ set newdb [berkdb_open -create -env $newenv -btree foo.db]
+ error_check_good newdb_open [is_valid_db $newdb] TRUE
+
+ # There should not be any data in the new db.
+ for { set i 0 } { $i < 10 } { incr i } {
+ set ret [$newdb get $i]
+ error_check_good db_get [llength $ret] 0
+ }
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good newdb_close [$newdb close] 0
+ error_check_good envclose [$env close] 0
+ error_check_good newenvclose [$newenv close] 0
+ fileremove -f $newdir
+ }
+}
+
diff --git a/db/test/envscript.tcl b/db/test/envscript.tcl
new file mode 100644
index 000000000..e865b797c
--- /dev/null
+++ b/db/test/envscript.tcl
@@ -0,0 +1,90 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: envscript.tcl,v 12.5 2006/08/24 14:46:35 bostic Exp $
+#
+# Envscript -- for use with env012, DB_REGISTER test.
+# Usage: envscript testdir testfile putget key data recover envclose wait
+# testdir: directory containing the env we are joining.
+# testfile: file name for database.
+# putget: What to do in the db: put, get, or loop.
+# key: key to store or get
+# data: data to store or get
+# recover: include or omit the -recover flag in opening the env.
+# envclose: close env at end of test?
+# wait: how many seconds to wait before closing env at end of test.
+
+source ./include.tcl
+
+set usage "envscript testdir testfile putget key data recover envclose wait"
+
+# Verify usage
+if { $argc != 7 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set testdir [ lindex $argv 0 ]
+set testfile [ lindex $argv 1 ]
+set putget [lindex $argv 2 ]
+set key [ lindex $argv 3 ]
+set data [ lindex $argv 4 ]
+set recover [ lindex $argv 5 ]
+set wait [ lindex $argv 6 ]
+
+set flags {}
+if { $recover == "RECOVER" } {
+ set flags " -recover "
+}
+
+# Open and register environment.
+if {[catch {eval {berkdb_env} \
+ -create -home $testdir -txn -register $flags} dbenv]} {
+ puts "FAIL: opening env returned $dbenv"
+}
+error_check_good envopen [is_valid_env $dbenv] TRUE
+
+# Open database, put or get, close database.
+if {[catch {eval {berkdb_open} \
+ -create -auto_commit -btree -env $dbenv $testfile} db]} {
+ puts "FAIL: opening db returned $db"
+}
+error_check_good dbopen [is_valid_db $db] TRUE
+
+switch $putget {
+ PUT {
+ set txn [$dbenv txn]
+ error_check_good db_put [eval {$db put} -txn $txn $key $data] 0
+ error_check_good txn_commit [$txn commit] 0
+ }
+ GET {
+ set ret [$db get $key]
+ error_check_good db_get [lindex [lindex $ret 0] 1] $data
+ }
+ LOOP {
+ while { 1 } {
+ set txn [$dbenv txn]
+ error_check_good db_put \
+ [eval {$db put} -txn $txn $key $data] 0
+ error_check_good txn_commit [$txn commit] 0
+ tclsleep 1
+ }
+ }
+ default {
+ puts "FAIL: Unrecognized putget value $putget"
+ }
+}
+
+error_check_good db_close [$db close] 0
+
+# Wait.
+while { $wait > 0 } {
+puts "waiting ... wait is $wait"
+ tclsleep 1
+ incr wait -1
+}
+
+error_check_good env_close [$dbenv close] 0
diff --git a/db/test/fop001.tcl b/db/test/fop001.tcl
index 3a2a1e282..61b5bc006 100644
--- a/db/test/fop001.tcl
+++ b/db/test/fop001.tcl
@@ -1,20 +1,32 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fop001.tcl,v 1.21 2004/09/22 18:01:04 bostic Exp $
+# $Id: fop001.tcl,v 12.6 2006/08/24 14:46:35 bostic Exp $
#
# TEST fop001.tcl
# TEST Test file system operations, combined in a transaction. [#7363]
-proc fop001 { method args } {
+proc fop001 { method { inmem 0 } args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "\nFop001: ($method)\
- Multiple file system ops in one transaction."
+ # The variable inmem determines whether the test is being
+ # run with regular named databases or named in-memory databases.
+ if { $inmem == 0 } {
+ set tnum "001"
+ set string "regular named databases"
+ set operator do_op
+ } else {
+ set tnum "007"
+ set string "in-memory named databases"
+ set operator do_inmem_op
+ }
+
+ puts "\nFop$tnum: ($method)\
+ Two file system ops in one transaction for $string."
set exists {a b}
set noexist {foo bar}
@@ -57,7 +69,7 @@ proc fop001 { method args } {
# Comment this loop out to remove the list of cases.
# set i 1
# foreach case $cases {
-# puts "\tFop001:$i: $case"
+# puts "\tFop$tnum:$i: $case"
# incr i
# }
@@ -77,23 +89,33 @@ proc fop001 { method args } {
set names2 [lindex [lindex $case 1] 1]
set res2 [lindex [lindex $case 1] 2]
- puts "\tFop001.$testid: $op1 ($names1), then $op2 ($names2)."
+ puts "\tFop$tnum.$testid: $op1 ($names1), then $op2 ($names2)."
# 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 [eval {berkdb_open \
- -create} $omethod $args -env $env -auto_commit a]
+ # Create two databases, dba and dbb.
+ if { $inmem == 0 } {
+ set dba [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit a]
+ } else {
+ set dba [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit { "" a }]
+ }
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_put [$dba put 1 a] 0
error_check_good dba_close [$dba close] 0
- set dbb [eval {berkdb_open \
- -create} $omethod $args -env $env -auto_commit b]
+ if { $inmem == 0 } {
+ set dbb [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit b]
+ } else {
+ set dbb [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit { "" b }]
+ }
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_put [$dbb put 1 b] 0
error_check_good dbb_close [$dbb close] 0
foreach end {abort commit} {
@@ -101,8 +123,8 @@ proc fop001 { method args } {
set txn [$env txn]
# Execute and check operation 1
- set result1 [do_op $omethod $op1 $names1 $txn $env $args]
- if {$res1 == 0} {
+ set result1 [$operator $omethod $op1 $names1 $txn $env $args]
+ if { $res1 == 0 } {
error_check_good op1_should_succeed $result1 $res1
} else {
set error [extract_error $result1]
@@ -110,8 +132,8 @@ proc fop001 { method args } {
}
# Execute and check operation 2
- set result2 [do_op $omethod $op2 $names2 $txn $env $args]
- if {$res2 == 0} {
+ set result2 [$operator $omethod $op2 $names2 $txn $env $args]
+ if { $res2 == 0 } {
error_check_good op2_should_succeed $result2 $res2
} else {
set error [extract_error $result2]
@@ -123,11 +145,18 @@ proc fop001 { method args } {
# If the txn was aborted, we still have the original two
# databases.
- if {$end == "abort"} {
- error_check_good a_exists \
- [file exists $testdir/a] 1
- error_check_good b_exists \
- [file exists $testdir/b] 1
+ if { $end == "abort" } {
+ if { $inmem == 1 } {
+ error_check_good a_exists \
+ [inmem_exists $testdir a] 1
+ error_check_good b_exists \
+ [inmem_exists $testdir b] 1
+ } else {
+ error_check_good a_exists \
+ [file exists $testdir/a] 1
+ error_check_good b_exists \
+ [file exists $testdir/b] 1
+ }
}
}
@@ -146,4 +175,45 @@ proc fop001 { method args } {
}
}
+# This is a real hack. We need to figure out if an in-memory named
+# file exists. In a perfect world we could use mpool stat. Unfortunately,
+# mpool_stat returns files that have deadfile set and we need to not consider
+# those files to be meaningful. So, we are parsing the output of db_stat -MA
+# (I told you this was a hack) If we ever change the output, this is going
+# to break big time. Here is what we assume:
+# A file is represented by: File #N name
+# The last field printed for a file is Flags
+# If the file is dead, deadfile will show up in the flags
+proc inmem_exists { dir filename } {
+ set infile 0
+ set islive 0
+ set name ""
+ set s [exec ./db_stat -MA -h $dir]
+ foreach i $s {
+ if { $i == "File" } {
+ set infile 1
+ set islive 1
+ set name ""
+ } elseif { $i == "Flags" } {
+ set infile 0
+ if { $name != "" && $islive } {
+ return 1
+ }
+ } elseif { $infile != 0 } {
+ incr infile
+ }
+
+ if { $islive && $i == "deadfile" } {
+ set islive 0
+ }
+
+ if { $infile == 3 } {
+ if { $i == $filename } {
+ set name $filename
+ }
+ }
+ }
+
+ return 0
+}
diff --git a/db/test/fop002.tcl b/db/test/fop002.tcl
index 823147ec0..ec1921328 100644
--- a/db/test/fop002.tcl
+++ b/db/test/fop002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fop002.tcl,v 1.7 2004/02/25 17:49:05 carol Exp $
+# $Id: fop002.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST fop002.tcl
# TEST Test file system operations in the presence of bad permissions.
diff --git a/db/test/fop003.tcl b/db/test/fop003.tcl
index a7bb8829c..9f41148c6 100644
--- a/db/test/fop003.tcl
+++ b/db/test/fop003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fop003.tcl,v 1.6 2004/02/25 17:49:05 carol Exp $
+# $Id: fop003.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST fop003
# TEST
diff --git a/db/test/fop004.tcl b/db/test/fop004.tcl
index ca3c2efd0..f40ceea37 100644
--- a/db/test/fop004.tcl
+++ b/db/test/fop004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fop004.tcl,v 11.6 2004/09/22 18:01:05 bostic Exp $
+# $Id: fop004.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST fop004
# TEST Test of DB->rename(). (formerly test075)
diff --git a/db/test/fop005.tcl b/db/test/fop005.tcl
index 7635b3f7b..d3227cc58 100644
--- a/db/test/fop005.tcl
+++ b/db/test/fop005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fop005.tcl,v 11.6 2004/09/22 18:01:05 bostic Exp $
+# $Id: fop005.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST fop005
# TEST Test of DB->remove()
diff --git a/db/test/fop006.tcl b/db/test/fop006.tcl
index b77f88565..ec1cab1c7 100644
--- a/db/test/fop006.tcl
+++ b/db/test/fop006.tcl
@@ -1,21 +1,33 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fop006.tcl,v 1.11 2004/07/09 14:33:21 carol Exp $
+# $Id: fop006.tcl,v 12.9 2006/08/24 14:46:35 bostic Exp $
#
-# TEST fop006.tcl
+# TEST fop006
# 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 { method args } {
+proc fop006 { method { inmem 0 } args } {
source ./include.tcl
+ # The variable inmem determines whether the test is being
+ # run on regular named databases or named in-memory databases.
+ if { $inmem == 0 } {
+ set tnum "006"
+ set string "regular named databases"
+ set operator do_op
+ } else {
+ set tnum "008"
+ set string "in-memory named databases"
+ set operator do_inmem_op
+ }
+
if { [is_btree $method] != 1 } {
- puts "Skipping fop006 for method $method"
+ puts "Skipping fop$tnum for method $method"
return
}
@@ -23,7 +35,8 @@ proc fop006 { method args } {
set omethod [convert_method $method]
env_cleanup $testdir
- puts "\nFop006 ($method): File system ops in multiple transactions"
+ puts "\nFop$tnum ($method): Two file system ops,\
+ each in its own transaction, for $string."
set exists {a b}
set noexist {foo bar}
@@ -65,7 +78,7 @@ proc fop006 { method args } {
# Comment this loop out to remove the list of cases.
# set i 1
# foreach case $cases {
-# puts "\tFop006.$i: $case"
+# puts "\tFop$tnum.$i: $case"
# incr i
# }
@@ -85,7 +98,7 @@ proc fop006 { method args } {
set names2 [lindex [lindex $case 1] 1]
set res2 [lindex [lindex $case 1] 2]
- puts "\tFop006.$testid: $op1 ($names1) $res1 $end1;\
+ puts "\tFop$tnum.$testid: $op1 ($names1) $res1 $end1;\
$op2 ($names2) $res2."
foreach end2 { abort commit } {
@@ -94,26 +107,36 @@ proc fop006 { method args } {
error_check_good is_valid_env [is_valid_env $env] TRUE
# Create databases
- set db [eval {berkdb_open \
- -create} $omethod $args -env $env -auto_commit a]
+ if { $inmem == 0 } {
+ set db [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit a]
+ } else {
+ set db [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit {""} a]
+ }
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_put \
- [$db put -auto_commit 1 [chop_data $method a]] 0
+ [$db put 1 [chop_data $method a]] 0
error_check_good db_close [$db close] 0
- set db [eval {berkdb_open \
- -create} $omethod $args -env $env -auto_commit b]
+ if { $inmem == 0 } {
+ set db [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit b]
+ } else {
+ set db [eval {berkdb_open -create} \
+ $omethod $args -env $env -auto_commit {""} b]
+ }
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_put \
- [$db put -auto_commit 1 [chop_data $method a]] 0
+ [$db put 1 [chop_data $method 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 $omethod $op1 $names1 $txn1 $env $args]
- if {$res1 == 0} {
+ set result1 [$operator $omethod $op1 $names1 $txn1 $env $args]
+ if { $res1 == 0 } {
error_check_good \
op1_should_succeed $result1 $res1
} else {
@@ -123,8 +146,11 @@ proc fop006 { method args } {
# Start transaction 2 before ending transaction 1.
set pid [exec $tclsh_path $test_path/wrap.tcl \
- fopscript.tcl $testdir/fop006.log \
- $omethod $op2 $end2 $res2 $names2 &]
+ fopscript.tcl $testdir/fop$tnum.log \
+ $operator $omethod $op2 $end2 $res2 $names2 &]
+
+ # Sleep a bit to give txn2 a chance to block.
+ tclsleep 2
# End transaction 1 and close any open db handles.
# Txn2 will now unblock and finish.
@@ -140,11 +166,10 @@ proc fop006 { method args } {
# Clean up for next case
error_check_good env_close [$env close] 0
- error_check_good \
- envremove [berkdb envremove -home $testdir] 0
+ catch { [berkdb envremove -home $testdir] } res
# Check for errors in log file.
- set errstrings [eval findfail $testdir/fop006.log]
+ set errstrings [eval findfail $testdir/fop$tnum.log]
foreach str $errstrings {
puts "FAIL: error message in log file: $str"
}
diff --git a/db/test/fop007.tcl b/db/test/fop007.tcl
new file mode 100644
index 000000000..5852f36b6
--- /dev/null
+++ b/db/test/fop007.tcl
@@ -0,0 +1,22 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: fop007.tcl,v 12.4 2006/08/24 14:46:35 bostic Exp $
+#
+# TEST fop007
+# TEST Test file system operations on named in-memory databases.
+# TEST Combine two ops in one transaction.
+proc fop007 { method args } {
+
+ # Queue extents are not allowed with in-memory databases.
+ if { [is_queueext $method] == 1 } {
+ puts "Skipping fop007 for method $method."
+ return
+ }
+ eval {fop001 $method 1} $args
+}
+
+
+
diff --git a/db/test/fop008.tcl b/db/test/fop008.tcl
new file mode 100644
index 000000000..9f452c385
--- /dev/null
+++ b/db/test/fop008.tcl
@@ -0,0 +1,16 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: fop008.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
+#
+# TEST fop008
+# TEST Test file system operations on named in-memory databases.
+# TEST Combine two ops in one transaction.
+proc fop008 { method args } {
+ eval {fop006 $method 1} $args
+}
+
+
+
diff --git a/db/test/fopscript.tcl b/db/test/fopscript.tcl
index b4b6ffde6..f5280c00f 100644
--- a/db/test/fopscript.tcl
+++ b/db/test/fopscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: fopscript.tcl,v 1.6 2004/03/03 16:48:42 carol Exp $
+# $Id: fopscript.tcl,v 12.4 2006/08/24 14:46:35 bostic Exp $
#
# Fop006 script - test of fileops in multiple transactions
# Usage: fopscript
@@ -18,21 +18,22 @@ source ./include.tcl
source $test_path/test.tcl
source $test_path/testutils.tcl
-set usage "fopscript omethod op end result names args"
+set usage "fopscript operator omethod op end result names args"
# Verify usage
-if { $argc < 5 } {
+if { $argc < 6 } {
puts stderr "FAIL:[timestamp] Usage: $usage"
exit
}
# Initialize arguments
-set omethod [ lindex $argv 0 ]
-set op [ lindex $argv 1 ]
-set end [ lindex $argv 2 ]
-set result [ lindex $argv 3 ]
-set names [ lindex $argv 4 ]
-set args [lindex [lrange $argv 5 end] 0]
+set operator [ lindex $argv 0 ]
+set omethod [ lindex $argv 1 ]
+set op [ lindex $argv 2 ]
+set end [ lindex $argv 3 ]
+set result [ lindex $argv 4 ]
+set names [ lindex $argv 5 ]
+set args [lindex [lrange $argv 6 end] 0]
# Join the env
set dbenv [eval berkdb_env -home $testdir]
@@ -42,8 +43,10 @@ error_check_good envopen [is_valid_env $dbenv] TRUE
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 $omethod $op $names $txn2 $dbenv $args]
+set op2result [$operator $omethod $op $names $txn2 $dbenv $args]
+
# End txn2
error_check_good txn2_end [$txn2 $end] 0
if {$result == 0} {
diff --git a/db/test/foputils.tcl b/db/test/foputils.tcl
index 4b9230392..2c3bac707 100644
--- a/db/test/foputils.tcl
+++ b/db/test/foputils.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: foputils.tcl,v 11.9 2004/09/22 18:01:05 bostic Exp $
+# $Id: foputils.tcl,v 12.5 2006/08/24 14:46:35 bostic Exp $
#
proc do_op {omethod op names txn env {largs ""}} {
switch -exact $op {
@@ -33,6 +33,25 @@ proc do_subdb_op {omethod op names txn env {largs ""}} {
}
}
+proc do_inmem_op {omethod op names txn env {largs ""}} {
+ #
+ # The in-memory versions of do_op are different in
+ # that we don't need to pass in the filename, just
+ # the subdb names.
+ #
+ switch -exact $op {
+ delete { do_delete $names }
+ rename { do_inmem_rename $names $txn $env }
+ remove { do_inmem_remove $names $txn $env }
+ noop { do_noop }
+ open_create { do_inmem_create $omethod $names $txn $env $largs }
+ open { do_inmem_open $omethod $names $txn $env $largs }
+ open_excl { do_inmem_create_excl $omethod $names $txn $env $largs }
+ truncate { do_inmem_truncate $omethod $names $txn $env $largs }
+ default { puts "FAIL: operation $op not recognized" }
+ }
+}
+
proc do_delete {names} {
#
# This is the odd man out among the ops -- it's not a Berkeley
@@ -82,6 +101,19 @@ proc do_subdb_rename {names txn env} {
}
}
+proc do_inmem_rename {names txn env} {
+ # Pull db and subdb names out of $names
+ set filename ""
+ set oldsname [lindex $names 0]
+ set newsname [lindex $names 1]
+ if {[catch {eval $env dbrename -txn $txn {$filename} \
+ $oldsname $newsname} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
proc do_remove {names txn env} {
if {[catch {eval $env dbremove -txn $txn $names} result]} {
@@ -101,6 +133,14 @@ proc do_subdb_remove {names txn env} {
}
}
+proc do_inmem_remove {names txn env} {
+ if {[catch {eval $env dbremove -txn $txn {""} $names} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
proc do_create {omethod names txn env {largs ""}} {
if {[catch {eval berkdb_open -create $omethod $largs -env $env \
-txn $txn $names} result]} {
@@ -110,6 +150,15 @@ proc do_create {omethod names txn env {largs ""}} {
}
}
+proc do_inmem_create {omethod names txn env {largs ""}} {
+ if {[catch {eval berkdb_open -create $omethod $largs -env $env \
+ -txn $txn "" $names} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
proc do_open {omethod names txn env {largs ""}} {
if {[catch {eval berkdb_open $omethod $largs -env $env \
-txn $txn $names} result]} {
@@ -119,6 +168,15 @@ proc do_open {omethod names txn env {largs ""}} {
}
}
+proc do_inmem_open {omethod names txn env {largs ""}} {
+ if {[catch {eval berkdb_open $omethod $largs -env $env \
+ -txn $txn {""} $names} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
proc do_create_excl {omethod names txn env {largs ""}} {
if {[catch {eval berkdb_open -create -excl $omethod $largs -env $env \
-txn $txn $names} result]} {
@@ -128,6 +186,15 @@ proc do_create_excl {omethod names txn env {largs ""}} {
}
}
+proc do_inmem_create_excl {omethod names txn env {largs ""}} {
+ if {[catch {eval berkdb_open -create -excl $omethod $largs -env $env \
+ -txn $txn {""} $names} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
proc do_truncate {omethod names txn env {largs ""}} {
# First we have to get a handle. We omit the -create flag
# because testing of truncate is meaningful only in cases
@@ -142,6 +209,17 @@ proc do_truncate {omethod names txn env {largs ""}} {
}
}
+proc do_inmem_truncate {omethod names txn env {largs ""}} {
+ set db [eval {berkdb_open $omethod} $largs {-env $env -txn $txn "" $names}]
+ 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 {
diff --git a/db/test/hsearch.tcl b/db/test/hsearch.tcl
index f2d223264..e130e8b72 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: hsearch.tcl,v 11.11 2004/01/28 03:36:28 bostic Exp $
+# $Id: hsearch.tcl,v 12.3 2006/08/24 14:46:35 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 c15d4f8c2..25b652bd2 100644
--- a/db/test/include.tcl
+++ b/db/test/include.tcl
@@ -17,8 +17,16 @@ set testdir ./TESTDIR
global dict
global util_path
+global is_freebsd_test
global is_hp_test
+global is_linux_test
global is_qnx_test
+global is_sunos_test
global is_windows_test
+global is_windows9x_test
-set KILL "@db_cv_path_kill@"
+global valid_methods
+global checking_valid_methods
+global test_recopts
+
+set KILL "@KILL@"
diff --git a/db/test/join.tcl b/db/test/join.tcl
index eba811dfd..3e53af4b5 100644
--- a/db/test/join.tcl
+++ b/db/test/join.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: join.tcl,v 11.23 2004/01/28 03:36:28 bostic Exp $
+# $Id: join.tcl,v 12.3 2006/08/24 14:46:35 bostic Exp $
#
# TEST jointest
# TEST Test duplicate assisted joins. Executes 1, 2, 3 and 4-way joins
diff --git a/db/test/lock001.tcl b/db/test/lock001.tcl
index 48eb95515..d478b3b67 100644
--- a/db/test/lock001.tcl
+++ b/db/test/lock001.tcl
@@ -1,15 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lock001.tcl,v 11.21 2004/01/28 03:36:28 bostic Exp $
+# $Id: lock001.tcl,v 12.4 2006/08/24 14:46:35 bostic Exp $
#
# 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} } {
+proc lock001 { {iterations 1000} } {
source ./include.tcl
global lock_curid
global lock_maxid
@@ -30,7 +30,7 @@ proc lock001 { {iterations 1000} {maxlocks 1000} } {
# Open the region we'll use for testing.
set eflags "-create -lock -home $testdir -mode 0644 \
- -lock_max $maxlocks -lock_conflict {$nmodes {$conflicts}}"
+ -lock_conflict {$nmodes {$conflicts}}"
set env [eval {berkdb_env} $eflags]
error_check_good env [is_valid_env $env] TRUE
error_check_good lock_id_set \
diff --git a/db/test/lock002.tcl b/db/test/lock002.tcl
index 1fdea56cd..0cbbf988a 100644
--- a/db/test/lock002.tcl
+++ b/db/test/lock002.tcl
@@ -1,13 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lock002.tcl,v 11.21 2004/01/28 03:36:28 bostic Exp $
+# $Id: lock002.tcl,v 12.5 2006/08/24 14:46:36 bostic Exp $
#
# TEST lock002
# TEST Exercise basic multi-process aspects of lock.
-proc lock002 { {maxlocks 1000} {conflicts {0 0 0 0 0 1 0 1 1} } } {
+proc lock002 { {conflicts {0 0 0 0 0 1 0 1 1} } } {
source ./include.tcl
puts "Lock002: Basic multi-process lock tests."
@@ -17,13 +17,13 @@ proc lock002 { {maxlocks 1000} {conflicts {0 0 0 0 0 1 0 1 1} } } {
set nmodes [isqrt [llength $conflicts]]
# Open the lock
- mlock_open $maxlocks $nmodes $conflicts
+ mlock_open $nmodes $conflicts
mlock_wait
}
# Make sure that we can create a region; destroy it, attach to it,
# detach from it, etc.
-proc mlock_open { maxl nmodes conflicts } {
+proc mlock_open { nmodes conflicts } {
source ./include.tcl
global lock_curid
global lock_maxid
@@ -32,9 +32,8 @@ proc mlock_open { maxl nmodes conflicts } {
# Open/Create region here. Then close it and try to open from
# other test process.
- set env_cmd [concat "berkdb_env -create -mode 0644 \
- -lock -lock_max $maxl -lock_conflict" \
- [list [list $nmodes $conflicts]] "-home $testdir"]
+ set env_cmd [concat "berkdb_env -create -mode 0644 -lock \
+ -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
@@ -62,9 +61,8 @@ 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 \
- -lock -lock_max $maxl -lock_conflict" \
- [list [list $nmodes $conflicts]] "-home $testdir"]
+ set env_cmd [concat "berkdb_env -create -mode 0644 -lock \
+ -lock_conflict" [list [list $nmodes $conflicts]] "-home $testdir"]
set local_env [eval $env_cmd]
error_check_good remote:env_open [is_valid_env $local_env] TRUE
@@ -83,7 +81,7 @@ proc mlock_wait { } {
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 -home $testdir"
set local_env [eval $env_cmd]
error_check_good env_open [is_valid_env $local_env] TRUE
@@ -123,8 +121,8 @@ proc mlock_wait { } {
error_check_good remote:lock_get \
[is_valid_lock $remote_lock $remote_env] TRUE
- # Now make the other guy wait 5 second and then release his
- # lock while we try to get a write lock on it
+ # Now make the other guy wait 5 seconds and then release his
+ # lock while we try to get a write lock on it.
set start [timestamp -r]
set ret [send_cmd $f1 "tclsleep 5"]
diff --git a/db/test/lock003.tcl b/db/test/lock003.tcl
index a53514283..5c2418324 100644
--- a/db/test/lock003.tcl
+++ b/db/test/lock003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lock003.tcl,v 11.28 2004/01/28 03:36:28 bostic Exp $
+# $Id: lock003.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST lock003
# TEST Exercise multi-process aspects of lock. Generate a bunch of parallel
diff --git a/db/test/lock004.tcl b/db/test/lock004.tcl
index e71a51f9b..72268a729 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lock004.tcl,v 11.7 2004/01/28 03:36:28 bostic Exp $
+# $Id: lock004.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST lock004
# TEST Test locker ids wraping around.
diff --git a/db/test/lock005.tcl b/db/test/lock005.tcl
index 8b3b977ad..ff870c2cb 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lock005.tcl,v 1.10 2004/01/28 03:36:28 bostic Exp $
+# $Id: lock005.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST lock005
# TEST Check that page locks are being released properly.
diff --git a/db/test/lock006.tcl b/db/test/lock006.tcl
index 49aac27c5..21a898dbd 100644
--- a/db/test/lock006.tcl
+++ b/db/test/lock006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lock006.tcl,v 11.3 2004/01/28 03:36:28 bostic Exp $
+# $Id: lock006.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST lock006
# TEST Test lock_vec interface. We do all the same things that
diff --git a/db/test/lockscript.tcl b/db/test/lockscript.tcl
index f542c100b..dc0451700 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: lockscript.tcl,v 11.19 2004/01/28 03:36:28 bostic Exp $
+# $Id: lockscript.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# Random lock tester.
# Usage: lockscript dir numiters numobjs sleepint degree readratio
diff --git a/db/test/log001.tcl b/db/test/log001.tcl
index cec09b84f..1dab9ad2a 100644
--- a/db/test/log001.tcl
+++ b/db/test/log001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: log001.tcl,v 11.34 2004/09/22 18:01:05 bostic Exp $
+# $Id: log001.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST log001
diff --git a/db/test/log002.tcl b/db/test/log002.tcl
index 1c8f2b919..3a499a861 100644
--- a/db/test/log002.tcl
+++ b/db/test/log002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: log002.tcl,v 11.33 2004/09/22 18:01:05 bostic Exp $
+# $Id: log002.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST log002
# TEST Tests multiple logs
diff --git a/db/test/log003.tcl b/db/test/log003.tcl
index e8d10dbfc..6370c87da 100644
--- a/db/test/log003.tcl
+++ b/db/test/log003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: log003.tcl,v 11.34 2004/09/22 18:01:05 bostic Exp $
+# $Id: log003.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST log003
# TEST Verify that log_flush is flushing records correctly.
diff --git a/db/test/log004.tcl b/db/test/log004.tcl
index 15af405f5..c2f9d9591 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: log004.tcl,v 11.31 2004/07/19 16:08:36 carol Exp $
+# $Id: log004.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST log004
diff --git a/db/test/log005.tcl b/db/test/log005.tcl
index ea6e3fa33..908e3fd54 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: log005.tcl,v 11.6 2004/09/22 18:01:05 bostic Exp $
+# $Id: log005.tcl,v 12.3 2006/08/24 14:46:36 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
index b6c5cd924..9f7076b1c 100644
--- a/db/test/log006.tcl
+++ b/db/test/log006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: log006.tcl,v 11.12 2004/09/22 18:01:05 bostic Exp $
+# $Id: log006.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST log006
# TEST Test log file auto-remove.
diff --git a/db/test/log007.tcl b/db/test/log007.tcl
new file mode 100644
index 000000000..b430003b3
--- /dev/null
+++ b/db/test/log007.tcl
@@ -0,0 +1,111 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: log007.tcl,v 12.5 2006/08/24 14:46:36 bostic Exp $
+#
+# TEST log007
+# TEST Test of in-memory logging bugs. [#11505]
+# TEST
+# TEST Test db_printlog with in-memory logs.
+#
+proc log007 { } {
+ global testdir
+ global util_path
+ set tnum "007"
+
+ puts "Log$tnum: Test in-memory logs with db_printlog."
+
+ # Log size is small so we quickly create more than one.
+ # Since we are in-memory the buffer is larger than the
+ # file size.
+ set pagesize 4096
+ append args " -pagesize $pagesize "
+ set log_max [expr $pagesize * 2]
+ set log_buf [expr $log_max * 2]
+
+ # We have 13-byte records. We want to fill slightly more
+ # than one virtual log file on each iteration. The first
+ # record always has an offset of 28.
+ #
+ set recsize 13
+ set recsperfile [expr [expr $log_max - 28] / $recsize]
+ set nrecs [expr $recsperfile + 1]
+
+ # Open environment.
+ env_cleanup $testdir
+ set flags " -create -txn -home $testdir \
+ -log_inmemory -log_buffer $log_buf -log_max $log_max"
+ set env [eval {berkdb_env} $flags]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ set iter 15
+ set lastfile 1
+ for { set i 0 } { $i < $iter } { incr i } {
+ puts "\tLog$tnum.a.$i: Writing $nrecs 13-byte log records."
+ set lsn_list {}
+ for { set j 0 } { $j < $nrecs } { incr j } {
+ set rec "1"
+ # Make the first record one byte larger for each
+ # successive log file so we hit the end of the
+ # log file at each of the 13 possibilities.
+ set nentries [expr [expr $i * $nrecs] + $j]
+ if { [expr $nentries % 628] == 0 } {
+ append firstrec a
+ set ret [$env log_put $firstrec]
+ } else {
+ set ret [$env log_put $rec]
+ }
+ error_check_bad log_put [is_substr $ret log_cmd] 1
+ lappend lsn_list $ret
+ }
+
+ # Open a log cursor.
+ set m_logc [$env log_cursor]
+ error_check_good m_logc [is_valid_logc $m_logc $env] TRUE
+
+ # Check that we're in the expected virtual log file.
+ set first [$m_logc get -first]
+ error_check_good first_lsn [lindex $first 0] "[expr $i + 1] 28"
+ set last [$m_logc get -last]
+
+ puts "\tLog$tnum.b.$i: Read log records sequentially."
+ set j 0
+ for { set logrec [$m_logc get -first] } \
+ { [llength $logrec] != 0 } \
+ { set logrec [$m_logc get -next]} {
+ set file [lindex [lindex $logrec 0] 0]
+ if { $file != $lastfile } {
+ # We have entered a new virtual log file.
+ set lastfile $file
+ }
+ set offset [lindex [lindex $logrec 0] 1]
+ set lsn($j) "\[$file\]\[$offset\]"
+ incr j
+ }
+ error_check_good cursor_close [$m_logc close] 0
+
+ puts "\tLog$tnum.c.$i: Compare printlog to log records."
+ set stat [catch {eval exec $util_path/db_printlog \
+ -h $testdir > $testdir/prlog} result]
+ error_check_good stat_prlog $stat 0
+
+ # Make sure the results of printlog contain all the same
+ # LSNs we saved when walking the files with the log cursor.
+ set j 0
+ set fd [open $testdir/prlog r]
+ while { [gets $fd record] >= 0 } {
+ # A log record begins with "[".
+ if { [string match {\[*} $record] == 1 } {
+ error_check_good \
+ check_prlog [is_substr $record $lsn($j)] 1
+ incr j
+ }
+ }
+ close $fd
+ }
+
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -home $testdir] 0
+}
diff --git a/db/test/log008.tcl b/db/test/log008.tcl
new file mode 100644
index 000000000..5efe372ac
--- /dev/null
+++ b/db/test/log008.tcl
@@ -0,0 +1,46 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: log008.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
+#
+# TEST Test what happens if a txn_ckp record falls into a
+# TEST different log file than the DBREG_CKP records generated
+# TEST by the same checkpoint.
+
+proc log008 { { nhandles 100 } args } {
+ source ./include.tcl
+ set tnum "008"
+
+ puts "Log$tnum: Checkpoint test with records spanning log files."
+ env_cleanup $testdir
+
+ # Set up env command for use later.
+ set envcmd "berkdb_env -create -txn -home $testdir"
+
+ # Start up a child process which will open a bunch of handles
+ # on a database and write to it, running until it creates a
+ # checkpoint with records spanning two log files.
+ puts "\tLog$tnum.a: Spawning child tclsh."
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ log008script.tcl $testdir/log008script.log $nhandles &]
+
+ watch_procs $pid 3
+
+ puts "\tLog$tnum.b: Child is done."
+
+ # Join the env with recovery. This ought to work.
+ puts "\tLog$tnum.c: Join abandoned child env with recovery."
+ set env [eval $envcmd -recover]
+
+ # Clean up.
+ error_check_good env_close [$env close] 0
+
+ # Check log file for failures.
+ set errstrings [eval findfail $testdir/log008script.log]
+ foreach str $errstrings {
+ puts "FAIL: error message in log008 log file: $str"
+ }
+}
+
diff --git a/db/test/log008script.tcl b/db/test/log008script.tcl
new file mode 100644
index 000000000..8433d05c4
--- /dev/null
+++ b/db/test/log008script.tcl
@@ -0,0 +1,83 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: log008script.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
+#
+# Log008 script - dbreg_ckp and txn_ckp records spanning log files.
+#
+# Usage: log008script
+
+source ./include.tcl
+set tnum "008"
+set usage "log008script nhandles"
+
+# Verify usage
+if { $argc != 1 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set nhandles [ lindex $argv 0 ]
+
+# We make the log files small so it's likely that the
+# records will end up in different files.
+set maxbsize [expr 8 * 1024]
+set maxfile [expr 32 * 1024]
+
+# Set up environment.
+set envcmd "berkdb_env -create -txn -home $testdir \
+ -log_buffer $maxbsize -log_max $maxfile"
+set dbenv [eval $envcmd]
+error_check_good dbenv [is_valid_env $dbenv] TRUE
+
+# Open a lot of database handles.
+set filename TESTFILE
+set handlelist {}
+for { set i 0 } { $i < $nhandles } { incr i } {
+ set db [berkdb_open \
+ -create -env $dbenv -auto_commit -btree $filename]
+ lappend handlelist $db
+}
+
+# Fill log files, checking LSNs before and after a checkpoint,
+# until we generate a case where the records span two log files.
+set i 0
+while { 1 } {
+ set txn [$dbenv txn]
+ foreach handle $handlelist {
+ error_check_good \
+ db_put [$handle put -txn $txn key.$i data.$i] 0
+ incr i
+ }
+ error_check_good txn_commit [$txn commit] 0
+
+ # Find current LSN file number.
+ set filenum [stat_field $dbenv log_stat "Current log file number"]
+
+ # Checkpoint.
+ error_check_good checkpoint [$dbenv txn_checkpoint] 0
+
+ # Find current LSN.
+ set newfilenum [stat_field $dbenv log_stat "Current log file number"]
+ if { [expr $newfilenum > $filenum] } {
+ break
+ }
+}
+
+# Do one more transactional operation per fileid.
+set txn [$dbenv txn]
+foreach handle $handlelist {
+ error_check_good \
+ db_put [$handle put -txn $txn key.$i data.$i] 0
+ incr i
+}
+error_check_good txn_commit [$txn commit] 0
+
+# Archive, deleting the log files we think we no longer need.
+set stat [eval exec $util_path/db_archive -d -h $testdir]
+
+# Child is done. Exit, abandoning the env instead of closing it.
+exit
diff --git a/db/test/log009.tcl b/db/test/log009.tcl
new file mode 100644
index 000000000..85e4c4d89
--- /dev/null
+++ b/db/test/log009.tcl
@@ -0,0 +1,123 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: log009.tcl,v 12.6 2006/08/24 14:46:36 bostic Exp $
+#
+# TEST log009
+# TEST Test of logging and getting log file version information.
+# TEST Each time we cross a log file boundary verify we can
+# TEST get the version via the log cursorlag.
+# TEST Do this both forward and backward.
+#
+proc log009 { } {
+ source ./include.tcl
+ global errorInfo
+
+ env_cleanup $testdir
+ set niter 200
+ set method btree
+
+ puts "Log009: Retrieve log version using log cursor."
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ # Open an env.
+ set envcmd "berkdb_env_noerr -create \
+ -log_buffer $log_buf -log_max $log_max -txn -home $testdir"
+ set env [eval $envcmd]
+ error_check_good env [is_valid_env $env] TRUE
+
+ set stop 0
+ set start 0
+ #
+ # Loop until we have at least 3 log files.
+ #
+ while { $stop == 0 } {
+ puts "\tLog009.a: Running test in to generate log files."
+ eval rep_test \
+ $method $env NULL $niter $start $start 0 0 $largs
+ incr start $niter
+
+ set last_log [get_logfile $env last]
+ if { $last_log >= 3 } {
+ set stop 1
+ }
+ }
+
+ # We now have at least 3 log files. Walk a cursor both ways
+ # through the log and make sure we can get the version when we
+ # cross a log file boundary.
+ set curfile 0
+ set logc [$env log_cursor]
+ error_check_good logc [is_valid_logc $logc $env] TRUE
+
+ puts "\tLog009.b: Try to get version on unset cursor."
+ set stat [catch {eval $logc version} ret]
+ error_check_bad stat $stat 0
+ error_check_good err [is_substr $ret "unset cursor"] 1
+
+ # Check walking forward through logs looking for log
+ # file boundaries.
+ #
+ puts "\tLog009.c: Walk log forward checking persist."
+ for { set logrec [$logc get -first] } \
+ { [llength $logrec] != 0 } \
+ { set logrec [$logc get -next] } {
+ set lsn [lindex $logrec 0]
+ set lsnfile [lindex $lsn 0]
+ if { $curfile != $lsnfile } {
+ log009_check $logc $logrec
+ set curfile $lsnfile
+ }
+ }
+ error_check_good logclose [$logc close] 0
+
+ set curfile 0
+ set logc [$env log_cursor]
+ error_check_good logc [is_valid_logc $logc $env] TRUE
+ #
+ # Check walking backward through logs looking for log
+ # file boundaries.
+ #
+ puts "\tLog009.d: Walk log backward checking persist."
+ for { set logrec [$logc get -last] } \
+ { [llength $logrec] != 0 } \
+ { set logrec [$logc get -prev] } {
+ set lsn [lindex $logrec 0]
+ set lsnfile [lindex $lsn 0]
+ if { $curfile != $lsnfile } {
+ log009_check $logc $logrec
+ set curfile $lsnfile
+ }
+ }
+ error_check_good logclose [$logc close] 0
+ error_check_good env_close [$env close] 0
+}
+
+proc log009_check { logc logrec } {
+ set version [$logc version]
+ #
+ # We don't have ready access to the current log
+ # version, but make sure it is something reasonable.
+ #
+ # !!!
+ # First readable log is 8, current log version
+ # is pretty far from 20.
+ #
+ set reasonable [expr $version > 7 && $version < 20]
+ error_check_good persist $reasonable 1
+ #
+ # Verify that getting the version doesn't move
+ # or change the log cursor in any way.
+ #
+ set logrec1 [$logc get -current]
+ error_check_good current $logrec $logrec1
+}
diff --git a/db/test/logtrack.list b/db/test/logtrack.list
index 120ecb3a6..588b49113 100644
--- a/db/test/logtrack.list
+++ b/db/test/logtrack.list
@@ -1,57 +1,63 @@
PREFIX __crdel
-BEGIN metasub 142
+BEGIN metasub 42 142
+BEGIN inmem_create 44 138
+BEGIN inmem_rename 44 139
+BEGIN inmem_remove 44 140
PREFIX __db
-BEGIN addrem 41
-BEGIN big 43
-BEGIN ovref 44
-BEGIN debug 47
-BEGIN noop 48
-BEGIN pg_alloc 49
-BEGIN pg_free 50
-BEGIN cksum 51
-BEGIN pg_freedata 52
-BEGIN pg_prepare 53
-BEGIN pg_new 54
-BEGIN pg_init 60
+BEGIN addrem 42 41
+BEGIN big 42 43
+BEGIN ovref 42 44
+BEGIN debug 42 47
+BEGIN noop 42 48
+BEGIN pg_alloc 43 49
+BEGIN pg_free 43 50
+BEGIN cksum 42 51
+BEGIN pg_freedata 43 52
+BEGIN pg_prepare 42 53
+BEGIN pg_new 42 54
+BEGIN pg_init 43 60
+BEGIN pg_sort 44 61
PREFIX __dbreg
-BEGIN register 2
+BEGIN register 42 2
PREFIX __bam
-BEGIN split 62
-BEGIN rsplit 63
-BEGIN adj 55
-BEGIN cadjust 56
-BEGIN cdel 57
-BEGIN repl 58
-BEGIN root 59
-BEGIN curadj 64
-BEGIN rcuradj 65
-BEGIN relink 147
+BEGIN split 42 62
+BEGIN rsplit 42 63
+BEGIN adj 42 55
+BEGIN cadjust 42 56
+BEGIN cdel 42 57
+BEGIN repl 42 58
+BEGIN root 42 59
+BEGIN curadj 42 64
+BEGIN rcuradj 42 65
+BEGIN relink 44 147
+BEGIN merge 44 148
+BEGIN pgno 44 149
PREFIX __fop
-BEGIN create 143
-BEGIN remove 144
-BEGIN write 145
-BEGIN rename 146
-BEGIN file_remove 141
+BEGIN create 42 143
+BEGIN remove 42 144
+BEGIN write 42 145
+BEGIN rename 42 146
+BEGIN file_remove 42 141
PREFIX __ham
-BEGIN insdel 21
-BEGIN newpage 22
-BEGIN splitdata 24
-BEGIN replace 25
-BEGIN copypage 28
-BEGIN metagroup 29
-BEGIN groupalloc 32
-BEGIN curadj 33
-BEGIN chgpg 34
+BEGIN insdel 42 21
+BEGIN newpage 42 22
+BEGIN splitdata 42 24
+BEGIN replace 42 25
+BEGIN copypage 42 28
+BEGIN metagroup 43 29
+BEGIN groupalloc 43 32
+BEGIN curadj 42 33
+BEGIN chgpg 42 34
PREFIX __qam
-BEGIN incfirst 84
-BEGIN mvptr 85
-BEGIN del 79
-BEGIN add 80
-BEGIN delext 83
+BEGIN incfirst 42 84
+BEGIN mvptr 42 85
+BEGIN del 42 79
+BEGIN add 42 80
+BEGIN delext 42 83
PREFIX __rep
PREFIX __txn
-BEGIN regop 10
-BEGIN ckp 11
-BEGIN child 12
-BEGIN xa_regop 13
-BEGIN recycle 14
+BEGIN regop 44 10
+BEGIN ckp 43 11
+BEGIN child 42 12
+BEGIN xa_regop 42 13
+BEGIN recycle 42 14
diff --git a/db/test/logtrack.tcl b/db/test/logtrack.tcl
index 50851932f..29cd1ceb3 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: logtrack.tcl,v 11.15 2004/04/14 16:08:42 carol Exp $
+# $Id: logtrack.tcl,v 12.4 2006/08/24 14:46:36 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.
@@ -111,6 +111,10 @@ proc logtrack_summary { } {
while { [llength [set dbt [$ec get -next]]] != 0 } {
set rec [lindex [lindex $dbt 0] 0]
if { [$seendb count $rec] == 0 && $one_test == "ALL" } {
+ if { $rec == "__db_pg_prepare" } {
+ puts "WARNING: log record type $rec can be\
+ seen only on systems without FTRUNCATE."
+ }
puts "WARNING: log record type $rec: not tested"
}
}
diff --git a/db/test/mdbscript.tcl b/db/test/mdbscript.tcl
index 88433485a..a4db21cc0 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: mdbscript.tcl,v 11.33 2004/01/28 03:36:28 bostic Exp $
+# $Id: mdbscript.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# Process script for the multi-process db tester.
diff --git a/db/test/memp001.tcl b/db/test/memp001.tcl
index 4818072de..2cf161283 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: memp001.tcl,v 11.53 2004/01/28 03:36:28 bostic Exp $
+# $Id: memp001.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
#
# TEST memp001
@@ -94,7 +94,7 @@ proc memp001_body { ncache flags } {
set p(10) [get_range $mpool 40]
set p(7) [replace $mpool $p(7)]
set p(8) [replace $mpool $p(8)]
- set p(9) [replace $mpool $p(9)]
+ set p(9) [replace $mpool $p(9) -dirty]
set p(10) [replace $mpool $p(10)]
#
# We now need to put all the pages we have here or
@@ -139,7 +139,7 @@ proc file_create { fname nblocks blocksize } {
proc get_range { mpool max } {
set pno [berkdb random_int 0 $max]
- set p [$mpool get $pno]
+ set p [eval $mpool get -dirty $pno]
error_check_good page [is_valid_page $p $mpool] TRUE
set got [$p pgnum]
if { $got != $pno } {
@@ -151,16 +151,16 @@ proc get_range { mpool max } {
return $p
}
-proc replace { mpool p } {
+proc replace { mpool p { args "" } } {
set pgno [$p pgnum]
set ret [$p init "Page is unpinned by [pid]"]
error_check_good page_init $ret 0
- set ret [$p put -dirty]
+ set ret [$p put]
error_check_good page_put $ret 0
- set p2 [$mpool get $pgno]
+ set p2 [eval $mpool get $args $pgno]
error_check_good page [is_valid_page $p2 $mpool] TRUE
return $p2
diff --git a/db/test/memp002.tcl b/db/test/memp002.tcl
index 763ef923d..7e9ffb60e 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: memp002.tcl,v 11.49 2004/01/28 03:36:28 bostic Exp $
+# $Id: memp002.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST memp002
diff --git a/db/test/memp003.tcl b/db/test/memp003.tcl
index a4e68bfd5..9fb7b4e66 100644
--- a/db/test/memp003.tcl
+++ b/db/test/memp003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: memp003.tcl,v 11.51 2004/01/28 03:36:28 bostic Exp $
+# $Id: memp003.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST memp003
# TEST Test reader-only/writer process combinations; we use the access methods
diff --git a/db/test/memp004.tcl b/db/test/memp004.tcl
index 1a421faea..2ab0f4366 100644
--- a/db/test/memp004.tcl
+++ b/db/test/memp004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: memp004.tcl,v 1.5 2004/01/28 03:36:28 bostic Exp $
+# $Id: memp004.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST memp004
diff --git a/db/test/mpoolscript.tcl b/db/test/mpoolscript.tcl
index 38d689c96..03f599ad9 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: mpoolscript.tcl,v 11.18 2004/01/28 03:36:28 bostic Exp $
+# $Id: mpoolscript.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
#
# Random multiple process mpool tester.
# Usage: mpoolscript dir id numiters numfiles numpages sleepint
@@ -83,7 +83,7 @@ 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]
-set master_page [$mp get -create $id]
+set master_page [$mp get -create -dirty $id]
error_check_good mp_get:$master_page [is_valid_page $master_page $mp] TRUE
set r [$master_page init MASTER$id]
@@ -115,7 +115,7 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
[is_valid_lock $lock $e] TRUE
# Now, get the page
- set pp [$mpf get -create $p]
+ set pp [$mpf get -create -dirty $p]
error_check_good page_get:$fnum:$p \
[is_valid_page $pp $mpf] TRUE
@@ -124,7 +124,7 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
set r [$pp init $id]
error_check_good page_init:$fnum:$p $r 0
incr pages
- set r [$pp put -dirty]
+ set r [$pp put]
error_check_good page_put:$fnum:$p $r 0
} else {
error_check_good page_put:$fnum:$p [$pp put] 0
@@ -139,7 +139,7 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
puts "$id: End of run verification of master page"
set r [$master_page is_setto MASTER$id]
error_check_good page_check $r 1
-set r [$master_page put -dirty]
+set r [$master_page put]
error_check_good page_put $r 0
set i [expr ($id + 1) % $maxprocs]
diff --git a/db/test/ndbm.tcl b/db/test/ndbm.tcl
index 00ee1f4fd..461364f56 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: ndbm.tcl,v 11.18 2004/01/28 03:36:28 bostic Exp $
+# $Id: ndbm.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# Historic NDBM interface test.
# Use the first 1000 entries from the dictionary.
diff --git a/db/test/parallel.tcl b/db/test/parallel.tcl
index bd1f468fa..5fca52e1d 100644
--- a/db/test/parallel.tcl
+++ b/db/test/parallel.tcl
@@ -1,5 +1,5 @@
# Code to load up the tests in to the Queue database
-# $Id: parallel.tcl,v 11.46 2004/09/22 18:01:05 bostic Exp $
+# $Id: parallel.tcl,v 12.5 2006/07/28 14:00:25 carol Exp $
proc load_queue { file {dbdir RUNQUEUE} nitems } {
global serial_tests
global num_serial
@@ -148,7 +148,7 @@ proc run_parallel { nprocs {list run_all} {nitems ALL} } {
close $f
} res]
}
- watch_procs $pidlist 300 360000
+ watch_procs $pidlist 300 1000000
set failed 0
for { set i 0 } { $i <= $nprocs } { incr i } {
@@ -209,16 +209,17 @@ proc run_queue { i rundir queuedir {qtype parallel} {nitems 0} } {
set o [open $builddir/ALL.OUT.$i a]
puts $o "\nExecuting record $num ([timestamp -w]):\n"
set tdir "TESTDIR.$i"
- regsub {TESTDIR} $cmd $tdir cmd
+ regsub -all {TESTDIR} $cmd $tdir cmd
puts $o $cmd
close $o
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]
+ set elapsed_secs [expr $now - $starttime]
+ set secs_per_test [expr $elapsed_secs / $num]
+ set esttotal [expr $nitems * $secs_per_test]
+ set remaining [expr $esttotal - $elapsed_secs]
if { $remaining < 3600 } {
puts "\tRough guess: less than 1\
hour left."
@@ -327,6 +328,7 @@ proc mkparalleldirs { nprocs basename queuedir } {
proc run_ptest { nprocs test args } {
global parms
+ global valid_methods
set basename ./PARALLEL_TESTDIR
set queuedir NULL
source ./include.tcl
@@ -334,8 +336,7 @@ proc run_ptest { nprocs test args } {
mkparalleldirs $nprocs $basename $queuedir
if { [info exists parms($test)] } {
- foreach method \
- "hash queue queueext recno rbtree frecno rrecno btree" {
+ foreach method $valid_methods {
if { [eval exec_ptest $nprocs $basename \
$test $method $args] != 0 } {
break
diff --git a/db/test/plat001.tcl b/db/test/plat001.tcl
new file mode 100644
index 000000000..995af0e39
--- /dev/null
+++ b/db/test/plat001.tcl
@@ -0,0 +1,76 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: plat001.tcl,v 1.5 2006/08/24 14:46:36 bostic Exp $
+#
+# TEST plat001
+# TEST
+# TEST Test of portability of sequences.
+# TEST
+# TEST Create and dump a database containing sequences. Save the dump.
+# TEST This test is used in conjunction with the upgrade tests, which
+# TEST will compare the saved dump to a locally created dump.
+
+proc plat001 { method {tnum "001"} args } {
+ source ./include.tcl
+ global fixed_len
+ global util_path
+
+ # Fixed_len must be increased from the default to
+ # accommodate fixed-record length methods.
+ set orig_fixed_len $fixed_len
+ set fixed_len 128
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ set eindex [lsearch -exact $args "-env"]
+ set txnenv 0
+ if { $eindex == -1 } {
+ set testfile $testdir/plat$tnum.db
+ set testdump $testdir/plat$tnum.dmp
+ set env NULL
+ } else {
+ set testfile plat$tnum.db
+ set testdump plat$tnum.dmp
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ set rpcenv [is_rpcenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
+
+ cleanup $testdir $env
+
+ # Make the key numeric so we can test record-based methods.
+ set key 1
+
+ puts "\tPlat$tnum.a: Create $method db with a sequence."
+ set db [eval {berkdb_open -create -mode 0644} $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set init 1
+ set min $init
+ set max 1000000000
+ set seq [eval {berkdb sequence} \
+ -create -init $init -min $min -max $max $db $key]
+ error_check_good is_valid_seq [is_valid_seq $seq] TRUE
+
+ error_check_good seq_close [$seq close] 0
+ error_check_good db_close [$db close] 0
+
+ puts "\tPlat$tnum.b: Dump the db."
+ set stat [catch {eval {exec $util_path/db_dump} -f $testdump \
+ $testfile} ret]
+ error_check_good sequence_dump $stat 0
+
+ puts "\tPlat$tnum.c: Delete the db."
+ error_check_good db_delete [fileremove $testfile] ""
+
+ set fixed_len $orig_fixed_len
+ return
+}
diff --git a/db/test/recd001.tcl b/db/test/recd001.tcl
index 67ad8004c..047c50a33 100644
--- a/db/test/recd001.tcl
+++ b/db/test/recd001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd001.tcl,v 11.43 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd001.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd001
# TEST Per-operation recovery tests for non-duplicate, non-split
@@ -50,6 +50,14 @@ proc recd001 { method {select 0} args} {
set flags "-create -txn -home $testdir"
+ # For queue databases, we end up locking all records from one
+ # to the end of the queue, which depends on the default pagesize.
+ # Assume that page sizes default to 16KB or less, then we need 4K
+ # locks.
+ if { [is_record_based $method] == 1 } {
+ set flags "$flags -lock_max_locks 5000 -lock_max_objects 5000"
+ }
+
puts "\tRecd001.a.0: creating environment"
set env_cmd "berkdb_env $flags"
set dbenv [eval $env_cmd]
diff --git a/db/test/recd002.tcl b/db/test/recd002.tcl
index 6189c5e23..13ef01f77 100644
--- a/db/test/recd002.tcl
+++ b/db/test/recd002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd002.tcl,v 11.32 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd002.tcl,v 12.5 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd002
# TEST Split recovery tests. For every known split log message, makes sure
@@ -35,8 +35,7 @@ proc recd002 { method {select 0} args} {
env_cleanup $testdir
set testfile recd002.db
set testfile2 recd002-2.db
- set eflags \
- "-create -txn -lock_max 2000 -home $testdir"
+ set eflags "-create -txn -lock_max_locks 2000 -home $testdir"
puts "\tRecd002.a: creating environment"
set env_cmd "berkdb_env $eflags"
diff --git a/db/test/recd003.tcl b/db/test/recd003.tcl
index b6e799b3c..0fc7cd219 100644
--- a/db/test/recd003.tcl
+++ b/db/test/recd003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd003.tcl,v 11.32 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd003.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd003
# TEST Duplicate recovery tests. For every known duplicate log message,
diff --git a/db/test/recd004.tcl b/db/test/recd004.tcl
index 72e66b5e6..4b35c460b 100644
--- a/db/test/recd004.tcl
+++ b/db/test/recd004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd004.tcl,v 11.31 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd004.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd004
# TEST Big key test where big key gets elevated to internal page.
diff --git a/db/test/recd005.tcl b/db/test/recd005.tcl
index df6a2df3a..e3a0df3e5 100644
--- a/db/test/recd005.tcl
+++ b/db/test/recd005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd005.tcl,v 11.36 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd005.tcl,v 12.5 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd005
# TEST Verify reuse of file ids works on catastrophic recovery.
@@ -23,8 +23,9 @@ proc recd005 { method args} {
set testfile1 recd005.1.db
set testfile2 recd005.2.db
- set eflags \
- "-create -txn -lock_max 2000 -lock_max_objects 2000 -home $testdir"
+ set max_locks 2000
+ set eflags "-create -txn -lock_max_locks $max_locks \
+ -lock_max_objects $max_locks -home $testdir"
set tnum 0
foreach sizes "{1000 10} {10 1000}" {
diff --git a/db/test/recd006.tcl b/db/test/recd006.tcl
index bca968e5b..168941bb3 100644
--- a/db/test/recd006.tcl
+++ b/db/test/recd006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd006.tcl,v 11.28 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd006.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd006
# TEST Nested transactions.
diff --git a/db/test/recd007.tcl b/db/test/recd007.tcl
index 9764d840f..266ab2200 100644
--- a/db/test/recd007.tcl
+++ b/db/test/recd007.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd007.tcl,v 11.64 2004/07/07 19:08:21 carol Exp $
+# $Id: recd007.tcl,v 12.6 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd007
# TEST File create/delete tests.
@@ -51,6 +51,7 @@ proc recd007 { method args} {
set fixed_len [expr $pg / 4]
error_check_good db_close [$db close] 0
error_check_good dbremove [berkdb dbremove -env $env $testfile] 0
+ error_check_good log_flush [$env log_flush] 0
error_check_good envclose [$env close] 0
# Convert the args again because fixed_len is now real.
@@ -110,6 +111,7 @@ proc recd007 { method args} {
{ {"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]
@@ -186,6 +188,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
puts "\tSkipping for method $method"
$env test copy none
$env test abort none
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
return
}
@@ -280,6 +283,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
copy_extent_file $dir $dbfile init
}
}
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
#
@@ -555,6 +559,7 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
[dbdump_diff $dflags $init_file $dir $dbfile] 0
}
$env mpool_sync
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
catch { file copy -force $dir/$dbfile $init_file } res
if { [is_queue $method] == 1} {
@@ -585,6 +590,7 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
#
set env [eval $env_cmd]
recd007_check $op $sub $dir $dbfile $subdb $new $env $oflags
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
} else {
#
@@ -623,6 +629,7 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
if { [string first "none" $abort] != -1} {
set env [eval $env_cmd]
recd007_check $op $sub $dir $dbfile $subdb $new $env $oflags
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
} else {
#
@@ -668,6 +675,7 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
}
set data1 recd007_data
set data2 NEWrecd007_data2
+ set data3 LASTrecd007_data3
set oflags \
"-create $omethod -auto_commit -mode 0644 $opts $dbfile"
@@ -683,6 +691,7 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
error_check_good db_put $ret 0
error_check_good commit [$txn commit] 0
error_check_good db_close [$db close] 0
+ file copy -force $testdir/$dbfile $testdir/${dbfile}.1
set ret \
[catch { berkdb dbremove -env $env -auto_commit $dbfile } remret]
@@ -717,7 +726,7 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
}
puts "complete"
error_check_good db_recover $stat 0
- error_check_good db_recover.1 [file exists $dir/$dbfile] 1
+ error_check_good file_exist [file exists $dir/$dbfile] 1
#
# Since we ran recovery on the open db/env, we need to
# catch these calls. Basically they are there to clean
@@ -726,6 +735,7 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
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 log_flush} ret]
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
@@ -744,6 +754,127 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
error_check_good data2 [lindex $kd 1] [pad_data $method $data2]
error_check_good dbclose [$db close] 0
+ error_check_good log_flush [$env log_flush] 0
+ error_check_good envclose [$env close] 0
+
+ #
+ # Copy back the original database and run recovery again.
+ # SR [#13026]
+ #
+ puts "\t\tRecover from first database"
+ file copy -force $testdir/${dbfile}.1 $testdir/$dbfile
+ berkdb debug_check
+ puts -nonewline "\t\tAbout to run recovery ... "
+ flush stdout
+
+ set stat [catch {exec $util_path/db_recover -h $dir -c} result]
+ if { $stat == 1 } {
+ error "FAIL: Recovery error: $result."
+ return
+ }
+ puts "complete"
+ error_check_good db_recover $stat 0
+ error_check_good db_recover.1 [file exists $dir/$dbfile] 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_noerr} -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
+
+ file copy -force $testdir/$dbfile $testdir/${dbfile}.2
+
+ puts "\t\tRemove second db"
+ set ret \
+ [catch { berkdb dbremove -env $env -auto_commit $dbfile } remret]
+
+ #
+ # Operation was committed, verify it does
+ # not exist.
+ #
+ puts "\t\tCommand executed and committed."
+ error_check_good dbremove $ret 0
+ error_check_good dbremove.2 [file exists $dir/$dbfile] 0
+
+ #
+ # Now create a new db with the same name.
+ #
+ puts "\t\tAdd a third version of the database"
+ 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 [chop_data $method $data3]]
+ error_check_good db_put $ret 0
+ error_check_good commit [$txn commit] 0
+ error_check_good db_sync [$db sync] 0
+
+ berkdb debug_check
+ puts -nonewline "\t\tAbout to run recovery ... "
+ flush stdout
+
+ set stat [catch {exec $util_path/db_recover -h $dir -c} result]
+ if { $stat == 1 } {
+ error "FAIL: Recovery error: $result."
+ return
+ }
+ puts "complete"
+ error_check_good db_recover $stat 0
+ error_check_good file_exist [file exists $dir/$dbfile] 1
+
+ #
+ # Since we ran recovery on the open db/env, we need to
+ # catch these calls to clean 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 log_flush} ret]
+ 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
+
+ #
+ # Copy back the second database and run recovery again.
+ #
+ puts "\t\tRecover from second database"
+ file copy -force $testdir/${dbfile}.2 $testdir/$dbfile
+ berkdb debug_check
+ puts -nonewline "\t\tAbout to run recovery ... "
+ flush stdout
+
+ set stat [catch {exec $util_path/db_recover -h $dir -c} result]
+ if { $stat == 1 } {
+ error "FAIL: Recovery error: $result."
+ return
+ }
+ puts "complete"
+ error_check_good db_recover $stat 0
+ error_check_good file_exist.2 [file exists $dir/$dbfile] 1
+
+ #
+ # Reopen env and db and verify 3rd 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 $data3]
+
+ error_check_good dbclose [$db close] 0
+ error_check_good log_flush [$env log_flush] 0
error_check_good envclose [$env close] 0
}
@@ -811,7 +942,7 @@ proc recd007_check { op sub dir dbfile subdb new env oflags } {
#
if { $sub == 0 } {
if { $op == "dbremove" } {
- error_check_good $op:not-exist \
+ error_check_good $op:not-exist:$dir/$dbfile \
[file exists $dir/$dbfile] 0
} elseif { $op == "dbrename"} {
error_check_good $op:exist \
diff --git a/db/test/recd008.tcl b/db/test/recd008.tcl
index b12c75785..45103db91 100644
--- a/db/test/recd008.tcl
+++ b/db/test/recd008.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd008.tcl,v 1.30 2004/11/05 00:59:01 mjc Exp $
+# $Id: recd008.tcl,v 12.5 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd008
# TEST Test deeply nested transactions and many-child transactions.
@@ -51,11 +51,12 @@ proc recd008 { method {breadth 4} {depth 4} args} {
if { $txn_max < 20 } {
set txn_max 20
}
+
puts "\tRecd008.b: create environment for $txn_max transactions"
- set lock_max 2500
- set eflags "-mode 0644 -create -lock_max $lock_max -txn_max $txn_max \
- -txn -home $testdir"
+ set max_locks 2500
+ set eflags "-mode 0644 -create -lock_max_locks $max_locks \
+ -lock_max_objects $max_locks -txn_max $txn_max -txn -home $testdir"
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 d6700a0bd..9e25cf359 100644
--- a/db/test/recd009.tcl
+++ b/db/test/recd009.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd009.tcl,v 1.20 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd009.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd009
# TEST Verify record numbering across split/reverse splits and recovery.
diff --git a/db/test/recd010.tcl b/db/test/recd010.tcl
index a2df7a47c..4c36bdcf7 100644
--- a/db/test/recd010.tcl
+++ b/db/test/recd010.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd010.tcl,v 1.21 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd010.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd010
# TEST Test stability of btree duplicates across btree off-page dup splits
diff --git a/db/test/recd011.tcl b/db/test/recd011.tcl
index bf118905b..a2ef7561b 100644
--- a/db/test/recd011.tcl
+++ b/db/test/recd011.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd011.tcl,v 11.26 2004/01/28 03:36:28 bostic Exp $
+# $Id: recd011.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd011
# TEST Verify that recovery to a specific timestamp works.
diff --git a/db/test/recd012.tcl b/db/test/recd012.tcl
index abed99de8..29a03b02a 100644
--- a/db/test/recd012.tcl
+++ b/db/test/recd012.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd012.tcl,v 11.31 2004/04/19 14:56:13 bostic Exp $
+# $Id: recd012.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd012
# TEST Test of log file ID management. [#2288]
diff --git a/db/test/recd013.tcl b/db/test/recd013.tcl
index 36cad9eb4..bf8d9e6b2 100644
--- a/db/test/recd013.tcl
+++ b/db/test/recd013.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd013.tcl,v 11.22 2004/09/20 17:06:15 sue Exp $
+# $Id: recd013.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd013
# TEST Test of cursor adjustment on child transaction aborts. [#2373]
@@ -275,6 +275,7 @@ proc recd013 { method { nitems 100 } args } {
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 log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
error_check_good verify_dir \
[verify_dir $testdir "\t\tRecd$tnum.d.1: "] 0
diff --git a/db/test/recd014.tcl b/db/test/recd014.tcl
index da9207cb0..1af31f85e 100644
--- a/db/test/recd014.tcl
+++ b/db/test/recd014.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd014.tcl,v 1.21 2004/01/28 03:36:29 bostic Exp $
+# $Id: recd014.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd014
# TEST This is a recovery test for create/delete of queue extents. We
diff --git a/db/test/recd015.tcl b/db/test/recd015.tcl
index afe0ac883..99d0fc533 100644
--- a/db/test/recd015.tcl
+++ b/db/test/recd015.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd015.tcl,v 1.16 2004/01/28 03:36:29 bostic Exp $
+# $Id: recd015.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd015
# TEST This is a recovery test for testing lots of prepared txns.
diff --git a/db/test/recd016.tcl b/db/test/recd016.tcl
index 6f0d3d132..92e41068c 100644
--- a/db/test/recd016.tcl
+++ b/db/test/recd016.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd016.tcl,v 11.13 2004/07/07 19:08:21 carol Exp $
+# $Id: recd016.tcl,v 12.4 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd016
# TEST Test recovery after checksum error.
@@ -63,6 +63,7 @@ proc recd016 { method args} {
error_check_good txn_commit [$txn commit] 0
}
error_check_good db_close [$db close] 0
+ error_check_good log_flush [$dbenv log_flush] 0
error_check_good env_close [$dbenv close] 0
#
# We need to remove the env so that we don't get cached
@@ -173,6 +174,7 @@ proc recd016 { method args} {
error_check_good datachk $data [pad_data $method $i$datastr]
}
error_check_good db_close [$db close] 0
+ error_check_good log_flush [$dbenv log_flush] 0
error_check_good env_close [$dbenv close] 0
set fixed_len $orig_fixed_len
return
diff --git a/db/test/recd017.tcl b/db/test/recd017.tcl
index 43dfb6421..a95ed9c4f 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd017.tcl,v 11.7 2004/01/28 03:36:29 bostic Exp $
+# $Id: recd017.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd017
# TEST Test recovery and security. This is basically a watered
diff --git a/db/test/recd018.tcl b/db/test/recd018.tcl
index 2f2300cf9..94e0ddf30 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd018.tcl,v 11.5 2004/01/28 03:36:29 bostic Exp $
+# $Id: recd018.tcl,v 12.3 2006/08/24 14:46:36 bostic Exp $
#
# TEST recd018
# TEST Test recover of closely interspersed checkpoints and commits.
diff --git a/db/test/recd019.tcl b/db/test/recd019.tcl
index 4e4e60517..0efc2b042 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd019.tcl,v 11.6 2004/07/07 19:08:21 carol Exp $
+# $Id: recd019.tcl,v 12.3 2006/08/24 14:46:37 bostic Exp $
#
# TEST recd019
# TEST Test txn id wrap-around and recovery.
diff --git a/db/test/recd020.tcl b/db/test/recd020.tcl
index 6fbe4b78e..8bf133e66 100644
--- a/db/test/recd020.tcl
+++ b/db/test/recd020.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd020.tcl,v 11.3 2004/09/22 18:01:05 bostic Exp $
+# $Id: recd020.tcl,v 12.4 2006/08/24 14:46:37 bostic Exp $
#
# TEST recd020
# TEST Test creation of intermediate directories -- an
@@ -51,6 +51,7 @@ proc recd020 { method args } {
}
error_check_good txn_commit [$txn commit] 0
error_check_good db_close [$db close] 0
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
puts "\tRecd$tnum.b: Remove intermediate directory."
@@ -75,6 +76,7 @@ proc recd020 { method args } {
# Clean up.
error_check_good db_close [$db close] 0
+ error_check_good log_flush [$env log_flush] 0
error_check_good env_close [$env close] 0
}
diff --git a/db/test/recd021.tcl b/db/test/recd021.tcl
index e8caae261..096838297 100644
--- a/db/test/recd021.tcl
+++ b/db/test/recd021.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd021.tcl,v 1.2 2004/09/22 18:01:05 bostic Exp $
+# $Id: recd021.tcl,v 12.4 2006/08/24 14:46:37 bostic Exp $
#
# TEST recd021
# TEST Test of failed opens in recovery.
@@ -54,8 +54,7 @@ proc recd021 { method args } {
# Checkpoint.
error_check_good txn_checkpoint [$env txn_checkpoint] 0
for { set i 1 } { $i <= $nentries } { incr i } {
- error_check_good \
- dba_put [$db put -auto_commit $i data$i] 0
+ error_check_good dba_put [$db put $i data$i] 0
}
error_check_good dba_close [$db close] 0
@@ -154,12 +153,12 @@ proc recd021_testsubdb { method op nentries special trunc largs } {
# Checkpoint.
error_check_good txn_checkpoint [$env txn_checkpoint] 0
for { set i 1 } { $i <= $nentries } { incr i } {
- error_check_good sdb1_put [$sdb1 put -auto_commit $i data$i] 0
+ error_check_good sdb1_put [$sdb1 put $i data$i] 0
}
set dumpfile dump.s1.$trunc
set ret [exec $util_path/db_dump -dar -f $dumpfile -h $testdir A.db]
for { set i 1 } { $i <= $nentries } { incr i } {
- error_check_good sdb2_put [$sdb2 put -auto_commit $i data$i] 0
+ error_check_good sdb2_put [$sdb2 put $i data$i] 0
}
error_check_good sdb1_close [$sdb1 close] 0
@@ -207,7 +206,7 @@ proc recd021_testsubdb { method op nentries special trunc largs } {
for { set i [expr $nentries + 1] } \
{ $i <= [expr $nentries * 2]} { incr i } {
error_check_good sdb2_put \
- [$sdb2 put -auto_commit $i data$i] 0
+ [$sdb2 put $i data$i] 0
}
error_check_good sdb2_close [$sdb2 close] 0
set dumpfile dump.s2.$trunc
@@ -222,7 +221,7 @@ proc recd021_testsubdb { method op nentries special trunc largs } {
error_check_good sdb3_open [is_valid_db $sdb3] TRUE
for { set i 1 } { $i <= $nentries } { incr i } {
error_check_good sdb3_put \
- [$sdb3 put -auto_commit $i data$i] 0
+ [$sdb3 put $i data$i] 0
}
error_check_good sdb3_close [$sdb3 close] 0
}
@@ -237,7 +236,7 @@ proc recd021_testsubdb { method op nentries special trunc largs } {
error_check_good sdb4_open [is_valid_db $sdb4] TRUE
for { set i 1 } { $i <= $nentries } { incr i } {
error_check_good sdb4_put \
- [$sdb4 put -auto_commit $i data$i] 0
+ [$sdb4 put $i data$i] 0
}
error_check_good sdb4_close [$sdb4 close] 0
}
diff --git a/db/test/recd022.tcl b/db/test/recd022.tcl
new file mode 100644
index 000000000..cf2038b32
--- /dev/null
+++ b/db/test/recd022.tcl
@@ -0,0 +1,132 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: recd022.tcl,v 12.6 2006/08/24 14:46:37 bostic Exp $
+#
+# TEST recd022
+# TEST Test that pages allocated by an aborted subtransaction
+# TEST within an aborted prepared parent transaction are returned
+# TEST to the free list after recovery. This exercises
+# TEST __db_pg_prepare in systems without FTRUNCATE. [#7403]
+
+proc recd022 { method args} {
+ global log_log_record_types
+ global fixed_len
+ global is_hp_test
+ source ./include.tcl
+
+ # Skip test for specified page sizes -- we want to
+ # specify our own page size.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Recd022: Skipping for specific pagesizes"
+ return
+ }
+
+ # Skip the test for HP-UX, where we can't open an env twice.
+ if { $is_hp_test == 1 } {
+ puts "Recd022: Skipping for HP-UX."
+ return
+ }
+
+
+ # Increase size of fixed-length records to match other methods.
+ set orig_fixed_len $fixed_len
+ set fixed_len 53
+ set opts [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ puts "Recd022: ($method) Page allocation and recovery"
+ puts "Recd022: with aborted prepared txns and child txns."
+
+ # Create the database and environment.
+ env_cleanup $testdir
+ set testfile recd022.db
+
+ puts "\tRecd022.a: creating environment"
+ # We open the env and database with _noerr so we don't
+ # get error messages when cleaning up at the end of the test.
+ set env_cmd "berkdb_env_noerr -create -txn -home $testdir"
+ set dbenv [eval $env_cmd]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+
+ # Open database with small pages.
+ puts "\tRecd022.b: creating database with small pages"
+ set pagesize 512
+ set oflags "-create $omethod -mode 0644 -pagesize $pagesize \
+ -env $dbenv -auto_commit $opts $testfile"
+ set db [eval {berkdb_open_noerr} $oflags]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ puts "\tRecd022.c: start transaction, put some data"
+ set iter 10
+ set datasize 53
+ set data [repeat "a" $datasize]
+ set iter2 [expr $iter * 2]
+
+ # Start parent and child txns.
+ puts "\tRecd022.d: start child txn, put some data"
+ set parent [$dbenv txn]
+ set child1 [$dbenv txn -parent $parent]
+
+ # Child puts some new data.
+ for { set i 1 } {$i <= $iter } { incr i } {
+ eval {$db put} -txn $child1 $i $data
+ }
+
+ # Abort the child txn.
+ puts "\tRecd022.e: abort child txn"
+ error_check_good child1_abort [$child1 abort] 0
+
+ # Start a second child. Put some data, enough to allocate
+ # a new page, then delete it.
+ puts "\tRecd022.f: start second child txn, put some data"
+ set child2 [$dbenv txn -parent $parent]
+ for { set i 1 } { $i <= $iter2 } { incr i } {
+ eval {$db put} -txn $child2 $i $data
+ }
+ for { set i 1 } { $i <= $iter2 } { incr i } {
+ eval {$db del} -txn $child2 $i
+ }
+
+ # Put back half the data.
+ for { set i 1 } { $i <= $iter } { incr i } {
+ eval {$db put} -txn $child2 $i $data
+ }
+
+ # Commit second child
+ puts "\tRecd022.g: commit second child txn, prepare parent"
+ error_check_good child2_commit [$child2 commit] 0
+
+ # Prepare parent
+ error_check_good prepare [$parent prepare "ABC"] 0
+
+ # Recover, then abort the recovered parent txn
+ puts "\tRecd022.h: recover, then abort parent"
+ set env1 [berkdb env -create -recover -home $testdir -txn]
+ set txnlist [$env1 txn_recover]
+ set aborttxn [lindex [lindex $txnlist 0] 0]
+ error_check_good parent_abort [$aborttxn abort] 0
+
+ # Verify database and then clean up. We still need to get
+ # rid of the handles created before recovery.
+ puts "\tRecd022.i: verify and clean up"
+ verify_dir $testdir
+ set stat [catch {$db close} res]
+ error_check_good db_close [is_substr $res "run recovery"] 1
+ error_check_good env1_close [$env1 close] 0
+ set stat [catch {$dbenv close} res]
+ error_check_good dbenv_close [is_substr $res "run recovery"] 1
+
+ # Track the log types we've seen
+ if { $log_log_record_types == 1} {
+ logtrack_read $testdir
+ }
+
+ # Set fixed_len back to the global value so we don't
+ # mess up other tests.
+ set fixed_len $orig_fixed_len
+ return
+}
diff --git a/db/test/recd023.tcl b/db/test/recd023.tcl
new file mode 100644
index 000000000..141c2b9ec
--- /dev/null
+++ b/db/test/recd023.tcl
@@ -0,0 +1,84 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: recd023.tcl,v 12.6 2006/08/24 14:46:37 bostic Exp $
+#
+# TEST recd023
+# TEST Test recover of reverse split.
+#
+proc recd023 { method args } {
+ source ./include.tcl
+ env_cleanup $testdir
+ set tnum "023"
+
+ if { [is_btree $method] != 1 && [is_rbtree $method] != 1 } {
+ puts "Skipping recd$tnum for method $method"
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ puts "Recd$tnum ($omethod $args): Recovery of reverse split."
+ set testfile recd$tnum.db
+
+ puts "\tRecd$tnum.a: Create environment and database."
+ set flags "-create -txn -home $testdir"
+
+ set env_cmd "berkdb_env $flags"
+ set env [eval $env_cmd]
+ error_check_good env [is_valid_env $env] TRUE
+
+ set pagesize 512
+ set oflags "$omethod -auto_commit \
+ -pagesize $pagesize -create -mode 0644 $args"
+ set db [eval {berkdb_open} -env $env $oflags $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Write to database -- enough to fill at least 3 levels.
+ puts "\tRecd$tnum.b: Create a 3 level btree database."
+ set nentries 1000
+ set datastr [repeat x 45]
+ for { set i 1 } { $i < $nentries } { incr i } {
+ set key a$i
+ set ret [$db put $key [chop_data $method $datastr]]
+ error_check_good put $ret 0
+ }
+
+ # Verify we have enough levels.
+ set levels [stat_field $db stat "Levels"]
+ error_check_good 3_levels [expr $levels >= 3] 1
+
+ # Save the original database.
+ file copy -force $testdir/$testfile $testdir/$testfile.save
+
+ # Delete enough pieces to collapse the tree.
+ puts "\tRecd$tnum.c: Do deletes to collapse database."
+ for { set count 2 } { $count < 10 } { incr count } {
+ error_check_good db_del [$db del a$count] 0
+ }
+ for { set count 15 } { $count < 100 } { incr count } {
+ error_check_good db_del [$db del a$count] 0
+ }
+ for { set count 150 } { $count < 1000 } { incr count } {
+ error_check_good db_del [$db del a$count] 0
+ }
+
+ error_check_good db_close [$db close] 0
+ error_check_good verify_dir [verify_dir $testdir "\tRecd$tnum.d: "] 0
+
+ # Overwrite the current database with the saved database.
+ file copy -force $testdir/$testfile.save $testdir/$testfile
+ error_check_good log_flush [$env log_flush] 0
+ error_check_good env_close [$env close] 0
+
+ # Recover the saved database to roll forward and apply the deletes.
+ set env [berkdb_env -create -txn -home $testdir -recover]
+ error_check_good env_open [is_valid_env $env] TRUE
+ error_check_good log_flush [$env log_flush] 0
+ error_check_good env_close [$env close] 0
+
+ error_check_good verify_dir [verify_dir $testdir "\tRecd$tnum.e: "] 0
+}
diff --git a/db/test/recd15scr.tcl b/db/test/recd15scr.tcl
index ef6fe7d03..43721e288 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recd15scr.tcl,v 1.7 2004/01/28 03:36:29 bostic Exp $
+# $Id: recd15scr.tcl,v 12.3 2006/08/24 14:46:37 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 559d3407a..ef5e44546 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: recdscript.tcl,v 11.6 2004/01/28 03:36:29 bostic Exp $
+# $Id: recdscript.tcl,v 12.3 2006/08/24 14:46:37 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 94163986a..a78a844e9 100644
--- a/db/test/rep001.tcl
+++ b/db/test/rep001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep001.tcl,v 1.35 2004/09/22 18:01:05 bostic Exp $
+# $Id: rep001.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep001
# TEST Replication rename and forced-upgrade test.
@@ -18,13 +18,35 @@ proc rep001 { method { niter 1000 } { tnum "001" } args } {
global passwd
global has_crypto
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win9x platform."
+ return
+ }
+
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ # Rep056 runs rep001 with in-memory named databases.
+ set inmem 0
+ set msg "using regular named databases"
+ if { $tnum == "056" } {
+ set inmem 1
+ set msg "using in-memory named databases"
+ if { [is_queueext $method] == 1 } {
+ puts "Skipping rep$tnum for method $method"
+ return
+ }
+ }
+
# Run tests with and without recovery. If we're doing testing
# of in-memory logging, skip the combination of recovery
# and in-memory logging -- it doesn't make sense.
set logsets [create_logsets 2]
set saved_args $args
- foreach recopt { "" "-recover" } {
+ foreach recopt $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $recopt == "-recover" && $logindex != -1 } {
@@ -33,18 +55,20 @@ proc rep001 { method { niter 1000 } { tnum "001" } args } {
}
set envargs ""
set args $saved_args
- puts "Rep$tnum: Replication sanity test ($method $recopt)."
+ puts -nonewline "Rep$tnum: Replication sanity test "
+ puts "($method $recopt), $msg."
puts "Rep$tnum: Master logs are [lindex $l 0]"
puts "Rep$tnum: Client logs are [lindex $l 1]"
rep001_sub $method \
- $niter $tnum $envargs $l $recopt $args
+ $niter $tnum $envargs $l $recopt $inmem $args
# Skip encrypted tests if not supported.
- if { $has_crypto == 0 } {
+ if { $has_crypto == 0 || $inmem } {
continue
}
- # Run the same tests with security.
+ # Run the same tests with security. In-memory
+ # databases don't work with encryption.
append envargs " -encryptaes $passwd "
append args " -encrypt "
puts "Rep$tnum: Replication and security sanity test\
@@ -52,12 +76,12 @@ proc rep001 { method { niter 1000 } { tnum "001" } args } {
puts "Rep$tnum: Master logs are [lindex $l 0]"
puts "Rep$tnum: Client logs are [lindex $l 1]"
rep001_sub $method \
- $niter $tnum $envargs $l $recopt $args
+ $niter $tnum $envargs $l $recopt $inmem $args
}
}
}
-proc rep001_sub { method niter tnum envargs logset recargs largs } {
+proc rep001_sub { method niter tnum envargs logset recargs inmem largs } {
source ./include.tcl
global testdir
global encrypt
@@ -85,11 +109,11 @@ proc rep001_sub { method niter tnum envargs logset recargs largs } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env_noerr -create \
-log_max 1000000 $envargs $m_logargs $recargs \
-home $masterdir -errpfx MASTER $m_txnargs -rep_master \
-rep_transport \[list 1 replsend\]"
-# set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(M) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs $m_logargs $recargs \
# -home $masterdir \
# -verbose {rep on} -errfile /dev/stderr \
@@ -100,11 +124,11 @@ proc rep001_sub { method niter tnum envargs logset recargs largs } {
# Open a client
repladd 2
- set env_cmd(C) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(C) "berkdb_env_noerr -create \
-log_max 1000000 $envargs $c_logargs $recargs \
-home $clientdir -errpfx CLIENT $c_txnargs -rep_client \
-rep_transport \[list 2 replsend\]"
-# set env_cmd(C) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(C) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs $c_logargs $recargs \
# -home $clientdir \
# -verbose {rep on} -errfile /dev/stderr \
@@ -120,24 +144,22 @@ proc rep001_sub { method niter tnum envargs logset recargs largs } {
# Run rep_test in the master (and update client).
puts "\tRep$tnum.a:\
Running rep_test in replicated env ($envargs $recargs)."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $masterenv NULL $niter 0 0 0 $inmem $largs
process_msgs $envlist
puts "\tRep$tnum.b: Verifying client database contents."
- set dbname "test.db"
- set masterdb [berkdb_open -env $masterenv -auto_commit $dbname]
- set clientdb [berkdb_open -env $clientenv -auto_commit $dbname]
-
- error_check_good compare_master_and_client [db_compare \
- $masterdb $clientdb $masterdir/$dbname $clientdir/$dbname] 0
+ if { $inmem } {
+ set dbname { "" "test.db" }
+ } else {
+ set dbname "test.db"
+ }
- error_check_good master_close [$masterdb close] 0
- error_check_good client_close [$clientdb close] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv 0 1 1 $dbname
# Remove the file (and update client).
puts "\tRep$tnum.c: Remove the file on the master and close master."
error_check_good remove \
- [$masterenv dbremove -auto_commit $dbname] 0
+ [eval {$masterenv dbremove} -auto_commit $dbname] 0
error_check_good masterenv_close [$masterenv close] 0
process_msgs $envlist
@@ -147,15 +169,15 @@ proc rep001_sub { method niter tnum envargs logset recargs largs } {
# Run rep_test in the new master
puts "\tRep$tnum.e: Running rep_test in new master."
- eval rep_test $method $newmasterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $newmasterenv NULL $niter 0 0 0 $inmem $largs
set envlist "{$newmasterenv 2}"
process_msgs $envlist
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 nosync -lock_max 2500 \
+ set newclientenv [eval {berkdb_env -create -recover} \
+ $envargs -txn nosync \
{-home $masterdir -rep_client -rep_transport [list 1 replsend]}]
error_check_good newclient_env [is_valid_env $newclientenv] TRUE
set envlist "{$newclientenv 1} {$newmasterenv 2}"
@@ -173,19 +195,14 @@ proc rep001_sub { method niter tnum envargs logset recargs largs } {
# Run a modified rep_test in the new master (and update client).
puts "\tRep$tnum.g: Running rep_test in new master."
eval rep_test $method \
- $newmasterenv NULL $niter $niter $niter 0 $largs
+ $newmasterenv NULL $niter $niter $niter 0 $inmem $largs
process_msgs $envlist
# Verify the database in the client dir.
puts "\tRep$tnum.h: Verifying new client database contents."
- set masterdb [berkdb_open -env $newmasterenv -auto_commit $dbname]
- set clientdb [berkdb_open -env $newclientenv -auto_commit $dbname]
- error_check_good compare_master_and_client [db_compare \
- $masterdb $clientdb $masterdir/$dbname $clientdir/$dbname] 0
+ rep_verify $masterdir $newmasterenv $clientdir $newclientenv 0 1 1 $dbname
- error_check_good master_close [$masterdb close] 0
- error_check_good client_close [$clientdb close] 0
error_check_good newmasterenv_close [$newmasterenv close] 0
error_check_good newclientenv_close [$newclientenv close] 0
diff --git a/db/test/rep002.tcl b/db/test/rep002.tcl
index 1a3683f2e..ddc34ea28 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2002-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep002.tcl,v 11.37 2004/09/22 18:01:05 bostic Exp $
+# $Id: rep002.tcl,v 12.10 2006/09/13 16:51:39 carol Exp $
#
# TEST rep002
# TEST Basic replication election test.
@@ -15,6 +15,22 @@
proc rep002 { method { niter 10 } { nclients 3 } { tnum "002" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Skip for record-based methods.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_record_based $method] != 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
if { [is_record_based $method] == 1 } {
puts "Rep002: Skipping for method $method."
return
@@ -23,8 +39,7 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "002" } args } {
set logsets [create_logsets [expr $nclients + 1]]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -45,7 +60,6 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "002" } args } {
proc rep002_sub { method niter nclients tnum logset recargs largs } {
source ./include.tcl
global elect_timeout elect_serial
- global is_windows_test
set elect_timeout 5000000
env_cleanup $testdir
@@ -135,8 +149,12 @@ proc rep002_sub { method niter nclients tnum logset recargs largs } {
# 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,
- # if any, is 1 (the master's replication ID).
+ # sites got a HOLDELECTION and checking that the master i.d. is
+ # unchanged after the election.
+
+ set origmasterid [stat_field $masterenv rep_stat "Master"]
+ set origgeneration [stat_field $masterenv rep_stat "Generation number"]
+
set got_hold_elect(M) 0
for { set i 0 } { $i < $nclients } { incr i } {
set got_hold_elect($i) 0
@@ -151,10 +169,8 @@ proc rep002_sub { method niter nclients tnum logset recargs largs } {
while { 1 } {
set nproced 0
set he 0
- set nm 0
- set nm2 0
- incr nproced [replprocessqueue $masterenv 1 0 he nm]
+ incr nproced [replprocessqueue $masterenv 1 0 he]
if { $he == 1 } {
incr elect_serial
@@ -163,21 +179,12 @@ proc rep002_sub { method niter nclients tnum logset recargs largs } {
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 } {
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]
+ [replprocessqueue $clientenv($i) $envid 0 he]
if { $he == 1 } {
# error_check_bad client(0)_in_elect $i 0
if { $elect_pipe($i) != "INVALID" } {
@@ -191,21 +198,16 @@ proc rep002_sub { method niter nclients tnum logset recargs largs } {
$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
- }
}
if { $nproced == 0 } {
break
}
}
- error_check_good got_master $got_master 1
+ set masterid [stat_field $masterenv rep_stat "Master"]
+ set generation [stat_field $masterenv rep_stat "Generation number"]
+ error_check_good master_unchanged $origmasterid $masterid
+ error_check_good gen_unchanged $origgeneration $generation
cleanup_elections
# We need multiple clients to proceed from here.
@@ -313,11 +315,4 @@ proc rep002_sub { method niter nclients tnum logset recargs largs } {
}
replclose $testdir/MSGQUEUEDIR
-
- # If we're on Windows, we need to forcibly remove some of the
- # files created when the alternate winner won.
- if { $is_windows_test == 1 } {
- set filelist [glob -nocomplain $testdir/CLIENTDIR.$altwin/*]
- fileremove -f $filelist
- }
}
diff --git a/db/test/rep003.tcl b/db/test/rep003.tcl
index 13ef257da..c9a2e793a 100644
--- a/db/test/rep003.tcl
+++ b/db/test/rep003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2002-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep003.tcl,v 11.19 2004/09/22 18:01:05 bostic Exp $
+# $Id: rep003.tcl,v 12.7 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep003
# TEST Repeated shutdown/restart replication test
@@ -17,6 +17,21 @@ proc rep003 { method { tnum "003" } args } {
source ./include.tcl
global rep003_dbname rep003_omethod rep003_oargs
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Skip for record-based methods.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_record_based $method] != 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
if { [is_record_based $method] } {
puts "Rep$tnum: Skipping for method $method"
return
@@ -31,7 +46,7 @@ proc rep003 { method { tnum "003" } args } {
# and in-memory logging -- it doesn't make sense.
set logsets [create_logsets 2]
- foreach recopt { "" "-recover" } {
+ foreach recopt $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $recopt == "-recover" && $logindex != -1 } {
diff --git a/db/test/rep005.tcl b/db/test/rep005.tcl
index 517fa955d..4fc309a57 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2002-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep005.tcl,v 11.41 2004/10/15 15:41:56 sue Exp $
+# $Id: rep005.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep005
# TEST Replication election test with error handling.
@@ -14,6 +14,18 @@
# TEST locations in the election path.
proc rep005 { method args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Skip for all methods except btree.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep005: Skipping for method $method."
return
@@ -103,9 +115,11 @@ proc rep005_sub { method tnum niter nclients logset recargs largs } {
lappend envlist "$clientenv($i) $envid"
}
+ # Process startup messages
+ process_msgs $envlist
# Run a modified test001 in the master.
puts "\tRep$tnum.a: Running test001 in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
# Process all the messages and close the master.
process_msgs $envlist
@@ -126,7 +140,7 @@ proc rep005_sub { method tnum niter nclients logset recargs largs } {
# 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 c0err { none electinit none }
set c1err $c0err
set c2err $c0err
set numtests [expr [llength $c0err] * [llength $c1err] * \
@@ -159,7 +173,6 @@ proc rep005_sub { method tnum niter nclients logset recargs largs } {
proc rep005_elect { ecmd celist qdir msg count \
winner lsn_lose elist logset} {
global elect_timeout elect_serial
- global is_windows_test
upvar $ecmd env_cmd
upvar $celist envlist
upvar $winner win
diff --git a/db/test/rep006.tcl b/db/test/rep006.tcl
index 60d52cc7c..cb9aa5a0a 100644
--- a/db/test/rep006.tcl
+++ b/db/test/rep006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep006.tcl,v 11.15 2004/09/22 18:01:05 bostic Exp $
+# $Id: rep006.tcl,v 12.11 2006/09/08 20:32:18 bostic Exp $
#
# TEST rep006
# TEST Replication and non-rep env handles.
@@ -15,11 +15,20 @@
proc rep006 { method { niter 1000 } { tnum "006" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
set logsets [create_logsets 2]
+ # All access methods are allowed.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -69,17 +78,20 @@ proc rep006_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env -create -lock_max 2500 -log_max 1000000 \
- -home $masterdir $m_txnargs $m_logargs \
- -rep_master -rep_transport \
+ set max_locks 2500
+ set env_cmd(M) "berkdb_env -create -log_max 1000000 \
+ -lock_max_objects $max_locks -lock_max_locks $max_locks \
+ -home $masterdir \
+ $m_txnargs $m_logargs -rep_master -rep_transport \
\[list 1 replsend\]"
set masterenv [eval $env_cmd(M) $recargs]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open a client
repladd 2
- set env_cmd(C) "berkdb_env -create $c_txnargs \
- $c_logargs -lock_max 2500 -home $clientdir \
+ set env_cmd(C) "berkdb_env -create $c_txnargs $c_logargs \
+ -lock_max_objects $max_locks -lock_max_locks $max_locks \
+ -home $clientdir \
-rep_client -rep_transport \[list 2 replsend\]"
set clientenv [eval $env_cmd(C) $recargs]
error_check_good client_env [is_valid_env $clientenv] TRUE
@@ -102,15 +114,34 @@ proc rep006_sub { method niter tnum logset recargs largs } {
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
+ # Determine whether this build is configured with --enable-debug_rop
+ # or --enable-debug_wop; we'll need to skip portions of the test if so.
+ set conf [berkdb getconfig]
+ set debug_rop_wop 0
+ if { [is_substr $conf "debug_rop"] == 1 \
+ || [is_substr $conf "debug_wop"] == 1 } {
+ set debug_rop_wop 1
+ }
+
+ # Skip if configured with --enable-debug_rop or --enable-debug_wop,
+ # because the checkpoint won't fail in those cases.
+ if { $debug_rop_wop == 1 } {
+ puts "\tRep$tnum.c: Skipping for debug_rop/debug_wop."
+ } else {
+ 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
+ }
- # We have to skip this bit for HP-UX because we can't
- # open an env twice.
+ # We have to skip this bit for HP-UX because we can't open an env
+ # twice, and for debug_rop/debug_wop because the open won't fail.
if { $is_hp_test == 1 } {
puts "\tRep$tnum.d: Skipping for HP-UX."
+ } elseif { $debug_rop_wop == 1 } {
+ puts "\tRep$tnum.d: Skipping for debug_rop/debug_wop."
} else {
puts "\tRep$tnum.d: Verifying non-master access."
diff --git a/db/test/rep007.tcl b/db/test/rep007.tcl
index 427881bc5..9395dd04f 100644
--- a/db/test/rep007.tcl
+++ b/db/test/rep007.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep007.tcl,v 11.22 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep007.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep007
# TEST Replication and bad LSNs
@@ -15,12 +15,22 @@
# TEST the client. Verify periodically that contents are correct.
proc rep007 { method { niter 10 } { tnum "007" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # All access methods are allowed.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 3]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -67,36 +77,30 @@ proc rep007_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env -create $m_txnargs \
- $m_logargs -lock_max 2500 \
+ set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
-# -verbose {rep on} \
+# set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open two clients
repladd 2
- set cl_envcmd "berkdb_env -create $c_txnargs \
- $c_logargs -lock_max 2500 \
+ set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
-# -verbose {rep on} \
+# set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
repladd 3
- set cl2_envcmd "berkdb_env -create $c2_txnargs \
- $c2_logargs -lock_max 2500 \
+ set cl2_envcmd "berkdb_env -create $c2_txnargs $c2_logargs \
-home $clientdir2 -rep_transport \[list 3 replsend\]"
-# set cl2_envcmd "berkdb_env -create $c2_txnargs \
-# $c2_logargs -lock_max 2500 \
+# set cl2_envcmd "berkdb_env -create $c2_txnargs $c2_logargs \
# -home $clientdir2 -rep_transport \[list 3 replsend\] \
-# -verbose {rep on}"
+# -verbose {rep on} -errpfx CLIENT2 -errfile /dev/stderr"
set cl2env [eval $cl2_envcmd $recargs -rep_client]
error_check_good client2_env [is_valid_env $cl2env] TRUE
@@ -106,7 +110,7 @@ proc rep007_sub { method niter tnum logset recargs largs } {
# Run rep_test in the master (and update clients).
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
process_msgs $envlist
# Databases should now have identical contents.
@@ -130,7 +134,7 @@ proc rep007_sub { method niter tnum logset recargs largs } {
# Change master and propagate changes to client 2.
set start $niter
- eval rep_test $method $masterenv NULL $niter $start $start 0 $largs
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
set envlist "{$masterenv 1} {$cl2env 3}"
process_msgs $envlist
@@ -179,9 +183,8 @@ proc rep007_sub { method niter tnum logset recargs largs } {
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 db_compare [db_compare $db2 $db3 \
+ $clientdir/$dbname $clientdir2/$dbname] 1
error_check_good db2_close [$db2 close] 0
}
error_check_good db3_close [$db3 close] 0
@@ -209,7 +212,7 @@ proc rep007_sub { method niter tnum logset recargs largs } {
error_check_good txn [$t commit] 0
error_check_good dbclose [$db close] 0
- eval rep_test $method $newmasterenv NULL $niter $start $start 0 $largs
+ eval rep_test $method $newmasterenv NULL $niter $start $start 0 0 $largs
set cl2rec 0
set envlist "{$newmasterenv 2} {$cl2env 3}"
process_msgs $envlist
@@ -246,7 +249,7 @@ proc rep007_sub { method niter tnum logset recargs largs } {
error_check_good db1_close [$db1 close] 0
set start [expr $niter * 2]
- eval rep_test $method $newmasterenv NULL $niter $start $start 0 $largs
+ eval rep_test $method $newmasterenv NULL $niter $start $start 0 0 $largs
set envlist "{$newclientenv 1} {$newmasterenv 2} {$cl2env 3}"
process_msgs $envlist
diff --git a/db/test/rep008.tcl b/db/test/rep008.tcl
index c98046984..d43d531ae 100644
--- a/db/test/rep008.tcl
+++ b/db/test/rep008.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep008.tcl,v 1.11 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep008.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep008
# TEST Replication, back up and synchronizing
@@ -15,22 +15,35 @@
# TEST Clean the master.
# TEST Reopen the master and client.
proc rep008 { method { niter 10 } { tnum "008" } args } {
- global mixed_mode_logging
- if { $mixed_mode_logging == 1 } {
- puts "Rep$tnum: Skipping for mixed-mode logging."
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
return
}
+
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep$tnum: Skipping for method $method."
return
}
+ # This test depends on copying logs, so can't be run with
+ # in-memory logging.
+ global mixed_mode_logging
+ if { $mixed_mode_logging > 0 } {
+ puts "Rep$tnum: Skipping for mixed-mode logging."
+ return
+ }
+
set args [convert_args $method $args]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
puts "Rep$tnum ($method $r):\
Replication backup and synchronizing."
rep008_sub $method $niter $tnum $r $args
@@ -53,9 +66,9 @@ proc rep008_sub { method niter tnum recargs largs } {
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ set ma_envcmd "berkdb_env_noerr -create -txn nosync \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
# -verbose {rep on} -errpfx MASTER \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
@@ -63,9 +76,9 @@ proc rep008_sub { method niter tnum recargs largs } {
# Open a client
repladd 2
- set cl_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ set cl_envcmd "berkdb_env_noerr -create -txn nosync \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
# -verbose {rep on} -errpfx CLIENT \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
diff --git a/db/test/rep009.tcl b/db/test/rep009.tcl
index 178ee1d13..1c97da60d 100644
--- a/db/test/rep009.tcl
+++ b/db/test/rep009.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep009.tcl,v 11.8 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep009.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep009
# TEST Replication and DUPMASTERs
@@ -13,6 +13,17 @@
# TEST Close a client, clean it and then declare it a 2nd master.
proc rep009 { method { niter 10 } { tnum "009" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep009: Skipping for method $method."
return
@@ -21,8 +32,7 @@ proc rep009 { method { niter 10 } { tnum "009" } args } {
set logsets [create_logsets 3]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -69,36 +79,30 @@ proc rep009_sub { method niter tnum clean logset recargs largs } {
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env -create $m_txnargs \
- $m_logargs -lock_max 2500 \
+ set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
-# -verbose {rep on} \
+# set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open a client
repladd 2
- set cl_envcmd "berkdb_env -create $c_txnargs \
- $c_logargs -lock_max 2500 \
+ set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
-# -verbose {rep on} \
+# set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
repladd 3
- set cl2_envcmd "berkdb_env -create $c2_txnargs \
- $c2_logargs -lock_max 2500 \
+ set cl2_envcmd "berkdb_env -create $c2_txnargs $c2_logargs \
-home $clientdir2 -rep_transport \[list 3 replsend\]"
-# set cl2_envcmd "berkdb_env -create $c2_txnargs \
-# $c2_logargs -lock_max 2500 \
+# set cl2_envcmd "berkdb_env -create $c2_txnargs $c2_logargs \
# -home $clientdir2 -rep_transport \[list 3 replsend\] \
-# -verbose {rep on}"
+# -verbose {rep on} -errpfx CLIENT2 -errfile /dev/stderr"
set cl2env [eval $cl2_envcmd $recargs -rep_client]
error_check_good client2_env [is_valid_env $cl2env] TRUE
diff --git a/db/test/rep010.tcl b/db/test/rep010.tcl
index 34c4338a1..0f576f2cc 100644
--- a/db/test/rep010.tcl
+++ b/db/test/rep010.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep010.tcl,v 11.10 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep010.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep010
# TEST Replication and ISPERM
@@ -16,12 +16,22 @@
# TEST with ISPERM is found in the log.
proc rep010 { method { niter 100 } { tnum "010" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -67,10 +77,15 @@ proc rep010_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env_noerr -create \
-log_max 1000000 $m_logargs \
-home $masterdir $m_txnargs -rep_master \
-rep_transport \[list 1 replsend\]"
+# set env_cmd(M) "berkdb_env_noerr -create \
+# -log_max 1000000 $m_logargs \
+# -errpfx MASTER -errfile /dev/stderr -verbose {rep on} \
+# -home $masterdir $m_txnargs -rep_master \
+# -rep_transport \[list 1 replsend\]"
set masterenv [eval $env_cmd(M) $recargs]
error_check_good master_env [is_valid_env $masterenv] TRUE
@@ -79,6 +94,10 @@ proc rep010_sub { method niter tnum logset recargs largs } {
set env_cmd(C) "berkdb_env_noerr -create -home $clientdir \
$c_txnargs $c_logargs -rep_client \
-rep_transport \[list 2 replsend\]"
+# set env_cmd(C) "berkdb_env_noerr -create -home $clientdir \
+# $c_txnargs $c_logargs -rep_client \
+# -errpfx CLIENT -errfile /dev/stderr -verbose {rep on} \
+# -rep_transport \[list 2 replsend\]"
set clientenv [eval $env_cmd(C) $recargs]
error_check_good client_env [is_valid_env $clientenv] TRUE
diff --git a/db/test/rep011.tcl b/db/test/rep011.tcl
index 6fe119233..ff83ebac9 100644
--- a/db/test/rep011.tcl
+++ b/db/test/rep011.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep011.tcl,v 1.10 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep011.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep011
# TEST Replication: test open handle across an upgrade.
@@ -18,11 +18,22 @@
# TEST propagated back to the new client.
proc rep011 { method { tnum "011" } args } {
+ global has_crypto
global passwd
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set logsets [create_logsets 2]
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -37,6 +48,9 @@ proc rep011 { method { tnum "011" } args } {
puts "Rep$tnum: Client logs are [lindex $l 1]"
rep011_sub $method $tnum $envargs $l $r $args
+ if { $has_crypto == 0 } {
+ continue
+ }
append envargs " -encryptaes $passwd "
append args " -encrypt "
@@ -76,7 +90,7 @@ proc rep011_sub { method tnum envargs logset recargs largs } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env -create \
-log_max 1000000 $m_logargs $envargs -home $masterdir \
$m_txnargs -rep_master -rep_transport \
\[list 1 replsend\]"
@@ -85,7 +99,7 @@ proc rep011_sub { method tnum envargs logset recargs largs } {
# Open a client
repladd 2
- set env_cmd(C) "berkdb_env -create -lock_max 2500 \
+ set env_cmd(C) "berkdb_env -create \
$c_logargs $envargs -home $clientdir \
$c_txnargs -rep_client -rep_transport \
\[list 2 replsend\]"
@@ -128,7 +142,7 @@ proc rep011_sub { method tnum envargs logset recargs largs } {
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 \
+ -txn nosync \
{-home $masterdir -rep_client -rep_transport [list 1 replsend]}]
error_check_good newclient_env [is_valid_env $newclientenv] TRUE
set envlist "{$newclientenv 1} {$newmasterenv 2}"
diff --git a/db/test/rep012.tcl b/db/test/rep012.tcl
index c2e16cc2f..b276f1412 100644
--- a/db/test/rep012.tcl
+++ b/db/test/rep012.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep012.tcl,v 11.14 2004/10/18 14:46:35 carol Exp $
+# $Id: rep012.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep012
# TEST Replication and dead DB handles.
@@ -14,12 +14,23 @@
# 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 } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 3]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -69,11 +80,10 @@ proc rep012_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
- $m_logargs -lock_max 2500 \
- -errpfx ENV0 \
+ $m_logargs -errpfx ENV0 \
-home $masterdir -rep_transport \[list 1 replsend\]"
# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
+# $m_logargs \
# -errpfx ENV0 -verbose {rep on} -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set env0 [eval $ma_envcmd $recargs -rep_master]
@@ -83,11 +93,10 @@ proc rep012_sub { method niter tnum logset recargs largs } {
# Open two clients
repladd 2
set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
- $c_logargs -lock_max 2500 \
- -errpfx ENV1 \
+ $c_logargs -errpfx ENV1 \
-home $clientdir -rep_transport \[list 2 replsend\]"
# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
+# $c_logargs \
# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set env1 [eval $cl_envcmd $recargs -rep_client]
@@ -96,11 +105,10 @@ proc rep012_sub { method niter tnum logset recargs largs } {
repladd 3
set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
- $c2_logargs -lock_max 2500 \
- -errpfx ENV2 \
+ $c2_logargs -errpfx ENV2 \
-home $clientdir2 -rep_transport \[list 3 replsend\]"
# set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
-# $c2_logargs -lock_max 2500 \
+# $c2_logargs \
# -errpfx ENV2 -verbose {rep on} -errfile /dev/stderr \
# -home $clientdir2 -rep_transport \[list 3 replsend\]"
set cl2env [eval $cl2_envcmd $recargs -rep_client]
@@ -122,13 +130,13 @@ proc rep012_sub { method niter tnum logset recargs largs } {
set mpdb [eval {berkdb_open_noerr -env $env0 -auto_commit \
-create -mode 0644} $largs $omethod $pname]
error_check_good dbopen [is_valid_db $mpdb] TRUE
-
+
# Open the secondary
# Open a 2nd handle to the same secondary
set msdb [eval {berkdb_open_noerr -env $env0 -auto_commit \
-create -mode 0644} $largs $omethod $sname]
error_check_good dbopen [is_valid_db $msdb] TRUE
- error_check_good associate [$mpdb associate -auto_commit \
+ error_check_good associate [$mpdb associate \
[callback_n 0] $msdb] 0
}
@@ -146,7 +154,7 @@ proc rep012_sub { method niter tnum logset recargs largs } {
# Run a modified test001 in the master (and update clients).
puts "\tRep$tnum.a.0: Running rep_test in replicated env."
- eval rep_test $method $masterenv $masterdb $niter 0 0
+ eval rep_test $method $masterenv $masterdb $niter 0 0 0 0 $largs
process_msgs $envlist
if { $do_secondary } {
@@ -162,7 +170,8 @@ proc rep012_sub { method niter tnum logset recargs largs } {
}
set nstart $niter
puts "\tRep$tnum.c: Run test in master and client 2 only"
- eval rep_test $method $masterenv $masterdb $niter $nstart $nstart
+ eval rep_test\
+ $method $masterenv $masterdb $niter $nstart $nstart 0 0 $largs
# Ignore messages for $env1.
set envlist "{$env0 1} {$cl2env 3}"
@@ -240,7 +249,7 @@ proc rep012_sec {method pdb niter keysp datap} {
set keys($n) $key
set data($n) [pad_data $method $datum]
- set ret [$pdb put -auto_commit $key [chop_data $method $datum]]
+ set ret [$pdb put $key [chop_data $method $datum]]
error_check_good put($n) $ret 0
}
close $did
diff --git a/db/test/rep013.tcl b/db/test/rep013.tcl
index f479806ab..f0c1a2c05 100644
--- a/db/test/rep013.tcl
+++ b/db/test/rep013.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep013.tcl,v 11.11 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep013.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep013
# TEST Replication and swapping master/clients with open dbs.
@@ -12,33 +12,50 @@
# 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 Rerun the test, turning on client-to-client synchronization.
# TEST Swap and verify several times.
proc rep013 { method { niter 10 } { tnum "013" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 3]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ set anyopts { "" "anywhere" }
+ foreach r $test_recopts {
foreach l $logsets {
- set logindex [lsearch -exact $l "in-memory"]
- if { $r == "-recover" && $logindex != -1 } {
- puts "Rep$tnum: Skipping\
- for in-memory logs with -recover."
- continue
+ foreach a $anyopts {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($r $a): Replication and \
+ ($method) master/client swapping."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client 0 logs are [lindex $l 1]"
+ puts "Rep$tnum: Client 1 logs are [lindex $l 2]"
+ rep013_sub $method $niter $tnum $l $r $a $args
}
- puts "Rep$tnum ($r):\
- Replication and ($method) master/client swapping."
- puts "Rep$tnum: Master logs are [lindex $l 0]"
- puts "Rep$tnum: Client 0 logs are [lindex $l 1]"
- puts "Rep$tnum: Client 1 logs are [lindex $l 2]"
- rep013_sub $method $niter $tnum $l $r $args
}
}
}
-proc rep013_sub { method niter tnum logset recargs largs } {
+proc rep013_sub { method niter tnum logset recargs anyopt largs } {
global testdir
+ global anywhere
+
env_cleanup $testdir
set orig_tdir $testdir
@@ -51,6 +68,11 @@ proc rep013_sub { method niter tnum logset recargs largs } {
file mkdir $clientdir
file mkdir $clientdir2
+ if { $anyopt == "anywhere" } {
+ set anywhere 1
+ } else {
+ set anywhere 0
+ }
set m_logtype [lindex $logset 0]
set c_logtype [lindex $logset 1]
set c2_logtype [lindex $logset 2]
@@ -70,13 +92,12 @@ proc rep013_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
- $m_logargs -lock_max 2500 -errpfx ENV1 \
+ $m_logargs -errpfx ENV1 \
-cachesize {0 4194304 3} \
-home $masterdir -rep_transport \[list 1 replsend\]"
# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
-# -cachesize {0 4194304 3} \
-# -errpfx ENV1 -verbose {recovery on} -errfile /dev/stderr \
+# $m_logargs -cachesize {0 4194304 3} \
+# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set env1 [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $env1] TRUE
@@ -84,26 +105,24 @@ proc rep013_sub { method niter tnum logset recargs largs } {
# Open two clients
repladd 2
set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
- $c_logargs -lock_max 2500 -errpfx ENV2 \
+ $c_logargs -errpfx ENV2 \
-cachesize {0 2097152 2} \
-home $clientdir -rep_transport \[list 2 replsend\]"
# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
-# -cachesize {0 2097152 2} \
-# -errpfx ENV2 -verbose {recovery on} -errfile /dev/stderr \
+# $c_logargs -cachesize {0 2097152 2} \
+# -errpfx ENV2 -verbose {rep on} -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set env2 [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $env2] TRUE
repladd 3
set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
- $c2_logargs -lock_max 2500 -errpfx ENV3 \
+ $c2_logargs -errpfx ENV3 \
-cachesize {0 1048576 1} \
-home $clientdir2 -rep_transport \[list 3 replsend\]"
# set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
-# $c2_logargs -lock_max 2500 \
-# -cachesize {0 1048576 1} \
-# -errpfx ENV3 -verbose {recovery on} -errfile /dev/stderr \
+# $c2_logargs -cachesize {0 1048576 1} \
+# -errpfx ENV3 -verbose {rep on} -errfile /dev/stderr \
# -home $clientdir2 -rep_transport \[list 3 replsend\]"
set cl2env [eval $cl2_envcmd $recargs -rep_client]
error_check_good client2_env [is_valid_env $cl2env] TRUE
@@ -155,7 +174,7 @@ proc rep013_sub { method niter tnum logset recargs largs } {
# 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
+ eval rep_test $method $masterenv $masterdb $niter 0 0 0 0 $largs
set envlist "{$env1 1} {$env2 2} {$cl2env 3}"
process_msgs $envlist
@@ -195,7 +214,7 @@ proc rep013_sub { method niter tnum logset recargs largs } {
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 $nstart
+ $method $masterenv $masterdb $niter $nstart $nstart 0 0 $largs
set envlist "{$masterenv $mid} {$cl2env 3}"
process_msgs $envlist
@@ -225,7 +244,23 @@ proc rep013_sub { method niter tnum logset recargs largs } {
set envlist "{$env1 1} {$env2 2} {$cl2env 3}"
process_msgs $envlist
}
- puts "\tRep$tnum.e: Closing"
+ puts "\tRep$tnum.e: Check message handling of client."
+ set req3 [stat_field $cl2env rep_stat "Client service requests"]
+ set miss3 [stat_field $cl2env rep_stat "Client service req misses"]
+ set rereq1 [stat_field $env1 rep_stat "Client rerequests"]
+ set rereq2 [stat_field $env2 rep_stat "Client rerequests"]
+ if { $anyopt == "anywhere" } {
+ error_check_bad req $req3 0
+ error_check_bad miss $miss3 0
+ error_check_bad rereq1 $rereq1 0
+ error_check_bad rereq2 $rereq2 0
+ } else {
+ error_check_good req $req3 0
+ error_check_good miss $miss3 0
+ error_check_good rereq1 $rereq1 0
+ error_check_good rereq2 $rereq2 0
+ }
+ puts "\tRep$tnum.f: Closing"
error_check_good masterdb [$masterdb close] 0
error_check_good clientdb [$clientdb close] 0
error_check_good cl2db [$env3db close] 0
@@ -234,5 +269,6 @@ proc rep013_sub { method niter tnum logset recargs largs } {
error_check_good cl2_close [$cl2env close] 0
replclose $testdir/MSGQUEUEDIR
set testdir $orig_tdir
+ set anywhere 0
return
}
diff --git a/db/test/rep014.tcl b/db/test/rep014.tcl
index 1a94748ea..fd77cdf14 100644
--- a/db/test/rep014.tcl
+++ b/db/test/rep014.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep014.tcl,v 11.7 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep014.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep014
# TEST Replication and multiple replication handles.
@@ -11,7 +11,17 @@
# TEST make sure we get the right openfiles.
#
proc rep014 { method { niter 10 } { tnum "014" } args } {
- global is_hp_test
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
# We can't open two envs on HP-UX, so just skip the
# whole test since that is at the core of it.
@@ -19,12 +29,12 @@ proc rep014 { method { niter 10 } { tnum "014" } args } {
puts "Rep$tnum: Skipping for HP-UX."
return
}
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -64,11 +74,9 @@ proc rep014_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env -create $m_txnargs \
- $m_logargs -lock_max 2500 \
+ set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
+# set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
# -errpfx MASTER -verbose {rep on} \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set env0 [eval $ma_envcmd $recargs -rep_master]
@@ -77,11 +85,9 @@ proc rep014_sub { method niter tnum logset recargs largs } {
# Open a client.
repladd 2
- set cl_envcmd "berkdb_env -create $c_txnargs \
- $c_logargs -lock_max 2500 \
+ set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
+# set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
# -errpfx CLIENT1 -verbose {rep on} \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set env1 [eval $cl_envcmd $recargs]
@@ -104,7 +110,7 @@ proc rep014_sub { method niter tnum logset recargs largs } {
# 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
+ eval rep_test $method $masterenv $masterdb $niter 0 0 0 0 $largs
process_msgs $envlist
puts "\tRep$tnum.b: Close and reopen client env."
@@ -115,7 +121,7 @@ proc rep014_sub { method niter tnum logset recargs largs } {
puts "\tRep$tnum.c: Run test in master again."
set start $niter
- eval rep_test $method $masterenv $masterdb $niter $start 0
+ eval rep_test $method $masterenv $masterdb $niter $start 0 0 0 $largs
set envlist "{$env0 1} {$env1 2}"
process_msgs $envlist
@@ -127,7 +133,7 @@ proc rep014_sub { method niter tnum logset recargs largs } {
puts "\tRep$tnum.e: Run test in master again."
set start [expr $start + $niter]
error_check_good e1_pfx [$env1 errpfx CLIENT1] 0
- eval rep_test $method $masterenv $masterdb $niter $start 0
+ eval rep_test $method $masterenv $masterdb $niter $start 0 0 0 $largs
process_msgs $envlist
puts "\tRep$tnum.f: Open env2, close env1, use env2."
@@ -141,7 +147,7 @@ proc rep014_sub { method niter tnum logset recargs largs } {
puts "\tRep$tnum.g: Run test in master again."
set start [expr $start + $niter]
error_check_good e1_pfx [$env2 errpfx CLIENT2] 0
- eval rep_test $method $masterenv $masterdb $niter $start 0
+ eval rep_test $method $masterenv $masterdb $niter $start 0 0 0 $largs
set envlist "{$env0 1} {$env2 2}"
process_msgs $envlist
diff --git a/db/test/rep015.tcl b/db/test/rep015.tcl
index 4cc4dfd0e..41b5a78ef 100644
--- a/db/test/rep015.tcl
+++ b/db/test/rep015.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep015.tcl,v 11.6 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep015.tcl,v 12.8 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep015
# TEST Locking across multiple pages with replication.
@@ -24,21 +24,33 @@
proc rep015 { method { nentries 100 } { tnum "015" } { ndb 3 } args } {
global rand_init
berkdb srand $rand_init
- set args [convert_args $method $args]
- set logsets [create_logsets 2]
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Skipping rep$tnum for method $method."
return
}
+ set args [convert_args $method $args]
+ set logsets [create_logsets 2]
+
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
- puts "Rep$tnum: Skipping for in-memory logs with -recover."
+ puts "Rep$tnum: \
+ Skipping for in-memory logs with -recover."
continue
}
puts "Rep$tnum ($method $r):\
@@ -75,11 +87,9 @@ proc rep015_sub { method nentries tnum ndb logset recargs largs } {
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
- $m_logargs -lock_max 2500 \
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
# -verbose {rep on} -errpfx MASTER \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
@@ -87,11 +97,9 @@ proc rep015_sub { method nentries tnum ndb logset recargs largs } {
# Open a client
repladd 2
- set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
- $c_logargs -lock_max 2500 \
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
# -verbose {rep on} -errpfx CLIENT \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
diff --git a/db/test/rep016.tcl b/db/test/rep016.tcl
index f41a29199..54f34d121 100644
--- a/db/test/rep016.tcl
+++ b/db/test/rep016.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2002-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep016.tcl,v 11.13 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep016.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep016
# TEST Replication election test with varying required nvotes.
@@ -14,8 +14,19 @@
proc rep016 { method args } {
global errorInfo
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
set tnum "016"
+ # Skip for all methods except btree.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep$tnum: Skipping for method $method."
return
@@ -25,8 +36,7 @@ proc rep016 { method args } {
set logsets [create_logsets [expr $nclients + 1]]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -46,7 +56,7 @@ proc rep016 { method args } {
}
}
-proc rep016_sub { method nclients tnum logset recargs args } {
+proc rep016_sub { method nclients tnum logset recargs largs } {
source ./include.tcl
set niter 5
@@ -101,7 +111,7 @@ proc rep016_sub { method nclients tnum logset recargs args } {
# Run a modified test001 in the master.
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
process_msgs $envlist
error_check_good masterenv_close [$masterenv close] 0
set envlist [lreplace $envlist 0 0]
@@ -130,20 +140,26 @@ proc rep016_sub { method nclients tnum logset recargs args } {
error_check_good ret [is_substr $ret "may not be negative"] 1
#
- # Check zero/negative nsites
+ # Setting nsites to 0 acts as a signal for rep_elect to use
+ # the configured nsites, but since we haven't set that yet,
+ # this should still fail. TODO: need another test verifying
+ # the proper operation when we *have* configured nsites.
#
set nsites 0
set nvotes 2
set res [catch {$clientenv(0) rep_elect $nsites $nvotes $priority \
$timeout} ret]
error_check_bad catch $res 0
- error_check_good ret [is_substr $ret "must be greater than 0"] 1
+ error_check_good ret [is_substr $ret "is larger than nsites"] 1
+ #
+ # Check negative nsites
+ #
set nsites -1
set res [catch {$clientenv(0) rep_elect $nsites $nvotes $priority \
$timeout} ret]
error_check_bad catch $res 0
- error_check_good ret [is_substr $ret "must be greater than 0"] 1
+ error_check_good ret [is_substr $ret "nsites may not be negative"] 1
#
# Check nvotes > nsites.
diff --git a/db/test/rep017.tcl b/db/test/rep017.tcl
index 7e24c698d..b59263f00 100644
--- a/db/test/rep017.tcl
+++ b/db/test/rep017.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep017.tcl,v 11.6 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep017.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep017
# TEST Concurrency with checkpoints.
@@ -16,12 +16,23 @@
# TEST A subsequent checkpoint gets NOTPERM
# TEST After checkpoint completes, next txn returns PERM
proc rep017 { method { niter 10 } { tnum "017" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -42,6 +53,7 @@ proc rep017 { method { niter 10 } { tnum "017" } args } {
proc rep017_sub { method niter tnum logset recargs largs } {
source ./include.tcl
global perm_response_list
+ global is_repchild
env_cleanup $testdir
set omethod [convert_method $method]
@@ -65,11 +77,11 @@ proc rep017_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
- set ma_cmd "berkdb_env_noerr -create -lock_max 2500 \
+ set ma_cmd "berkdb_env_noerr -create \
-log_max 1000000 $m_txnargs $m_logargs \
-home $masterdir -rep_master \
-rep_transport \[list 1 replsend\]"
-# set ma_cmd "berkdb_env_noerr -create -lock_max 2500 \
+# set ma_cmd "berkdb_env_noerr -create \
# -log_max 1000000 $m_txnargs $m_logargs \
# -verbose {rep on} -errfile /dev/stderr \
# -home $masterdir -rep_master -rep_transport \
@@ -122,7 +134,12 @@ proc rep017_sub { method niter tnum logset recargs largs } {
# for now. It's run in the background so the parent can
# test for whether we're checkpointing at the same time.
#
+ # Since the child is processing messages, we want to
+ # set is_repchild here so that any messages we generate
+ # will be seen by the child process.
+ #
puts "\tRep$tnum.c: Fork child process on client."
+ set is_repchild 1
set pid [exec $tclsh_path $test_path/wrap.tcl \
rep017script.tcl $testdir/repscript.log \
$masterdir $clientdir &]
@@ -188,6 +205,7 @@ proc rep017_sub { method niter tnum logset recargs largs } {
puts "\tRep$tnum.f: Waiting for child ..."
# Watch until the checkpoint is done.
watch_procs $pid 5
+ set is_repchild 0
# Verify that the checkpoint is now complete on the client and
# that all later messages have been applied.
diff --git a/db/test/rep017script.tcl b/db/test/rep017script.tcl
index 7aa973d07..815dbcf99 100644
--- a/db/test/rep017script.tcl
+++ b/db/test/rep017script.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep017script.tcl,v 11.4 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep017script.tcl,v 12.4 2006/08/24 14:46:37 bostic Exp $
#
# Rep017 script - concurrency with checkpoints.
#
@@ -33,11 +33,6 @@ if { $argc != 2 } {
set masterdir [ lindex $argv 0 ]
set clientdir [ lindex $argv 1 ]
-# Join the queue env. We assume the rep test convention of
-# placing the messages in $testdir/MSGQUEUEDIR.
-set queueenv [eval berkdb_env -home $testdir/MSGQUEUEDIR]
-error_check_good script_qenv_open [is_valid_env $queueenv] TRUE
-
#
# We need to set up our own machids.
# Add 1 for master env id, and 2 for the clientenv id.
@@ -48,8 +43,8 @@ repladd 2
# Join the master env.
set ma_cmd "berkdb_env_noerr -home $masterdir \
-txn -rep_master -rep_transport \[list 1 replsend\]"
-# set ma_cmd "berkdb_env_noerr -home $masterdir \
-# -verbose {rep on} -errfile /dev/stderr \
+#set ma_cmd "berkdb_env_noerr -home $masterdir \
+# -verbose {rep on} -errfile /dev/stderr \
# -txn -rep_master -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_cmd]
error_check_good script_menv_open [is_valid_env $masterenv] TRUE
@@ -59,9 +54,9 @@ puts "Master open"
# Join the client env.
set cl_cmd "berkdb_env_noerr -home $clientdir \
-txn -rep_client -rep_transport \[list 2 replsend\]"
-# set cl_cmd "berkdb_env_noerr -home $clientdir \
-# -verbose {rep on} -errfile /dev/stderr \
-# -txn -rep_client -rep_transport \[list 2 replsend\]"
+#set cl_cmd "berkdb_env_noerr -home $clientdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# -txn -rep_client -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_cmd]
error_check_good script_cenv_open [is_valid_env $clientenv] TRUE
diff --git a/db/test/rep018.tcl b/db/test/rep018.tcl
index 4a1370030..311729899 100644
--- a/db/test/rep018.tcl
+++ b/db/test/rep018.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep018.tcl,v 1.8 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep018.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep018
# TEST Replication with dbremove.
@@ -13,12 +13,23 @@
# TEST handle on the client.
# TEST
proc rep018 { method { niter 10 } { tnum "018" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -59,7 +70,7 @@ proc rep018_sub { method niter tnum logset recargs largs } {
puts "\tRep$tnum.a: Create master and client, bring online."
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env_noerr -create \
-log_max 1000000 -home $masterdir \
$m_txnargs $m_logargs -rep_master \
-rep_transport \[list 1 replsend\]"
@@ -123,10 +134,10 @@ proc rep018_sub { method niter tnum logset recargs largs } {
puts "\tRep$tnum.f: Propagate changes to client. Process should hang."
error_check_good timestamp_remove \
- [$marker put -auto_commit PARENTREMOVE [timestamp -r]] 0
+ [$marker put PARENTREMOVE [timestamp -r]] 0
process_msgs "{$masterenv 1} {$clientenv 2}"
error_check_good timestamp_done \
- [$marker put -auto_commit PARENTDONE [timestamp -r]] 0
+ [$marker put PARENTDONE [timestamp -r]] 0
watch_procs $pid 5
diff --git a/db/test/rep018script.tcl b/db/test/rep018script.tcl
index 9d6cd3a45..4fc19be95 100644
--- a/db/test/rep018script.tcl
+++ b/db/test/rep018script.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep018script.tcl,v 1.5 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep018script.tcl,v 12.5 2006/08/24 14:46:37 bostic Exp $
#
# Rep018 script - concurrency with checkpoints.
#
@@ -33,10 +33,7 @@ set niter [ lindex $argv 1 ]
set dbfile [ lindex $argv 2 ]
set method [ lindex $argv 3 ]
-# Join the queue env. We assume the rep test convention of
-# placing the messages in $testdir/MSGQUEUEDIR.
-set queueenv [eval berkdb_env -home $testdir/MSGQUEUEDIR]
-error_check_good script_qenv_open [is_valid_env $queueenv] TRUE
+set is_repchild 1
#
# We need to set up our own machids.
@@ -67,14 +64,14 @@ error_check_good markerenv_open [is_valid_env $markerenv] TRUE
set marker \
[eval "berkdb_open -create -btree -auto_commit -env $markerenv marker.db"]
error_check_good timestamp_ready \
- [$marker put -auto_commit CHILDREADY [timestamp -r]] 0
+ [$marker put CHILDREADY [timestamp -r]] 0
# Give the parent a chance to process messages and hang.
tclsleep 30
# Clean up the child so the parent can go forward.
error_check_good timestamp_done \
- [$marker put -auto_commit CHILDDONE [timestamp -r]] 0
+ [$marker put CHILDDONE [timestamp -r]] 0
error_check_good client_db_close [$db close] 0
# Check that the master is done.
diff --git a/db/test/rep019.tcl b/db/test/rep019.tcl
index a569f1238..e339d3637 100644
--- a/db/test/rep019.tcl
+++ b/db/test/rep019.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep019.tcl,v 11.7 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep019.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep019
# TEST Replication and multiple clients at same LSN.
@@ -12,19 +12,29 @@
# TEST verify all client logs are identical.
#
proc rep019 { method { nclients 3 } { tnum "019" } args } {
- global mixed_mode_logging
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
# This test needs to use recovery, so mixed-mode testing
# isn't appropriate.
- if { $mixed_mode_logging == 1 } {
+ global mixed_mode_logging
+ if { $mixed_mode_logging > 0 } {
puts "Rep$tnum: Skipping for mixed-mode logging."
return
}
set args [convert_args $method $args]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
puts "Rep$tnum ($method $r):\
Replication and $nclients recovered clients in sync."
rep019_sub $method $nclients $tnum $r $args
@@ -46,9 +56,9 @@ proc rep019_sub { method nclients tnum recargs largs } {
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ set ma_envcmd "berkdb_env -create -txn nosync \
-home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env -create $m_txnargs -lock_max 2500 \
+# set ma_envcmd "berkdb_env -create $m_txnargs \
# -errpfx MASTER -verbose {rep on} \
# -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
set menv [eval $ma_envcmd $recargs]
@@ -60,10 +70,10 @@ proc rep019_sub { method nclients tnum recargs largs } {
set id($i) [expr 2 + $i]
repladd $id($i)
set cl_envcmd($i) "berkdb_env -create -txn nosync \
- -lock_max 2500 -home $clientdir($i) \
+ -home $clientdir($i) \
-rep_client -rep_transport \[list $id($i) replsend\]"
# set cl_envcmd($i) "berkdb_env -create -txn nosync \
-# -lock_max 2500 -home $clientdir($i) \
+# -home $clientdir($i) \
# -errpfx CLIENT$i -verbose {rep on} \
# -rep_client -rep_transport \[list $id($i) replsend\]"
set clenv($i) [eval $cl_envcmd($i) $recargs]
@@ -85,7 +95,7 @@ proc rep019_sub { method nclients tnum recargs largs } {
# Run a modified test001 in the master (and update clients).
puts "\tRep$tnum.a: Running test001 in replicated env."
- eval rep_test $method $menv $masterdb $niter 0 0
+ eval rep_test $method $menv $masterdb $niter 0 0 0 0 $largs
process_msgs $envlist
error_check_good mdb_cl [$masterdb close] 0
diff --git a/db/test/rep020.tcl b/db/test/rep020.tcl
index ced4a6d92..f6d51c227 100644
--- a/db/test/rep020.tcl
+++ b/db/test/rep020.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep020.tcl,v 1.10 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep020.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep020
# TEST Replication elections - test election generation numbers.
@@ -12,7 +12,18 @@
proc rep020 { method args } {
global rand_init
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
set tnum "020"
+
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep$tnum: Skipping for method $method."
return
@@ -32,7 +43,7 @@ proc rep020 { method args } {
}
}
-proc rep020_sub { method nclients tnum logset args } {
+proc rep020_sub { method nclients tnum logset largs } {
source ./include.tcl
global errorInfo
global mixed_mode_logging
@@ -86,7 +97,7 @@ proc rep020_sub { method nclients tnum logset args } {
process_msgs $envlist
puts "\tRep$tnum.a: Running rep_test in replicated env."
set niter 10
- eval rep_test $method $masterenv NULL $niter 0 0
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
process_msgs $envlist
error_check_good masterenv_close [$masterenv close] 0
set envlist [lreplace $envlist 0 0]
@@ -209,11 +220,20 @@ proc rep020_sub { method nclients tnum logset args } {
puts "\t$msg: Election generation is not changed in recovery."
# Note all client egens. Close, recover, process messages,
# and check that egens are unchanged.
+ set big_e [big_endian]
foreach pair $envlist {
set i [expr [lindex $pair 1] - 2]
+ set fid [open $clientdir($i)/__db.rep.egen r]
+ fconfigure $fid -translation binary
+ set data [read $fid 4]
+ if { $big_e } {
+ binary scan $data I egen($i)
+ } else {
+ binary scan $data i egen($i)
+ }
+ binary scan $data c val
+ close $fid
set clientenv($i) [lindex $pair 0]
- set egen($i) [stat_field $clientenv($i) \
- rep_stat "Election generation number"]
error_check_good \
clientenv_close($i) [$clientenv($i) close] 0
set clientenv($i) [eval $env_cmd($i) -recover]
@@ -222,6 +242,7 @@ proc rep020_sub { method nclients tnum logset args } {
}
process_msgs $envlist
foreach pair $envlist {
+ set i [expr [lindex $pair 1] - 2]
set newegen($i) [stat_field $clientenv($i) \
rep_stat "Election generation number"]
error_check_good egen_recovery $egen($i) $newegen($i)
diff --git a/db/test/rep021.tcl b/db/test/rep021.tcl
index 3fa27aed8..fca913043 100644
--- a/db/test/rep021.tcl
+++ b/db/test/rep021.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2003
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep021.tcl,v 1.6 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep021.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep021
# TEST Replication and multiple environments.
@@ -15,12 +15,23 @@
# TEST Verify all client logs are identical if successful.
#
proc rep021 { method { nclients 3 } { tnum "021" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets [expr $nclients + 1]]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -100,10 +111,10 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
# For the 2nd group, just have 1 master and 1 client.
repladd 10
set ma2_envcmd "berkdb_env -create $m_txnargs \
- $m_logargs -lock_max 2500 -home $masterdir2 \
+ $m_logargs -home $masterdir2 \
-rep_master -rep_transport \[list 10 replsend\]"
# set ma2_envcmd "berkdb_env -create $m_txnargs \
-# $m_logargs -lock_max 2500 -home $masterdir2 \
+# $m_logargs -home $masterdir2 \
# -errpfx MASTER2 -verbose {rep on} \
# -rep_master -rep_transport \[list 10 replsend\]"
set menv2 [eval $ma2_envcmd $recargs]
@@ -118,10 +129,10 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
set id2 11
repladd $id2
- set cl2_envcmd "berkdb_env -create $c_txnargs($id2) -lock_max 2500 \
+ set cl2_envcmd "berkdb_env -create $c_txnargs($id2) \
$c_logargs($id2) -home $clientdir2 \
-rep_client -rep_transport \[list $id2 replsend\]"
-# set cl2_envcmd "berkdb_env -create $c_txnargs($id2) -lock_max 2500 \
+# set cl2_envcmd "berkdb_env -create $c_txnargs($id2) \
# -errpfx CLIENT2 -verbose {rep on} \
# $c_logargs($id2) -home $clientdir2 \
# -rep_client -rep_transport \[list $id2 replsend\]"
@@ -155,9 +166,9 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
set e2phase3 [expr $e2phase2 + $niter + $offset]
puts "\tRep$tnum.a: Running rep_test in 2nd replicated env."
- eval rep_test $method $menv2 $masterdb2 $niter $e2phase1 1 1
- eval rep_test $method $menv2 $masterdb2 $niter $e2phase2 1 1
- eval rep_test $method $menv2 $masterdb2 $niter $e2phase3 1 1
+ eval rep_test $method $menv2 $masterdb2 $niter $e2phase1 1 1 0 $largs
+ eval rep_test $method $menv2 $masterdb2 $niter $e2phase2 1 1 0 $largs
+ eval rep_test $method $menv2 $masterdb2 $niter $e2phase3 1 1 0 $largs
error_check_good mdb_cl [$masterdb2 close] 0
process_msgs $env2list
@@ -182,10 +193,10 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
# Open a master.
repladd 1
set ma_envcmd "berkdb_env -create $m_txnargs \
- $m_logargs -lock_max 2500 -home $masterdir \
+ $m_logargs -home $masterdir \
-rep_master -rep_transport \[list 1 replsend\]"
# set ma_envcmd "berkdb_env -create $m_txnargs \
-# $m_logargs -lock_max 2500 -home $masterdir \
+# $m_logargs -home $masterdir \
# -errpfx MASTER -verbose {rep on} \
# -rep_master -rep_transport \[list 1 replsend\]"
set menv [eval $ma_envcmd $recargs]
@@ -200,10 +211,10 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
set id($i) [expr 2 + $i]
repladd $id($i)
set cl_envcmd($i) "berkdb_env -create $c_txnargs($i) \
- $c_logargs($i) -lock_max 2500 -home $clientdir($i) \
+ $c_logargs($i) -home $clientdir($i) \
-rep_client -rep_transport \[list $id($i) replsend\]"
# set cl_envcmd($i) "berkdb_env -create $c_txnargs($i) \
-# $c_logargs($i) -lock_max 2500 -home $clientdir($i) \
+# $c_logargs($i) -home $clientdir($i) \
# -errpfx CLIENT$i -verbose {rep on} \
# -rep_client -rep_transport \[list $id($i) replsend\]"
set clenv($i) [eval $cl_envcmd($i) $recargs]
@@ -224,9 +235,9 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
# Run a modified test001 in the master (and update clients).
puts "\tRep$tnum.c: Running rep_test in primary replicated env."
- eval rep_test $method $menv $masterdb $niter $e1phase1 1 1
- eval rep_test $method $menv $masterdb $niter $e1phase2 1 1
- eval rep_test $method $menv $masterdb $niter $e1phase3 1 1
+ eval rep_test $method $menv $masterdb $niter $e1phase1 1 1 0 $largs
+ eval rep_test $method $menv $masterdb $niter $e1phase2 1 1 0 $largs
+ eval rep_test $method $menv $masterdb $niter $e1phase3 1 1 0 $largs
error_check_good mdb_cl [$masterdb close] 0
# Process any close messages.
process_msgs $envlist
@@ -239,10 +250,10 @@ proc rep021_sub { method nclients tnum logset recargs largs } {
set clientdir($i) $clientdir2
set id($i) [expr 2 + $i]
repladd $id($i)
- set cl_envcmd($i) "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ set cl_envcmd($i) "berkdb_env_noerr -create -txn nosync \
-home $clientdir($i) \
-rep_client -rep_transport \[list $id($i) replsend\]"
-# set cl_envcmd($i) "berkdb_env -create -txn nosync -lock_max 2500 \
+# set cl_envcmd($i) "berkdb_env -create -txn nosync \
# -errpfx CLIENT$i -verbose {rep on} \
# -home $clientdir($i) \
# -rep_client -rep_transport \[list $id($i) replsend\]"
diff --git a/db/test/rep022.tcl b/db/test/rep022.tcl
index a58969b04..3c1b1815b 100644
--- a/db/test/rep022.tcl
+++ b/db/test/rep022.tcl
@@ -1,28 +1,40 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep022.tcl,v 1.11 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep022.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep022
# TEST Replication elections - test election generation numbers
# TEST during simulated network partition.
# TEST
proc rep022 { method args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
global rand_init
global mixed_mode_logging
set tnum "022"
- if { $mixed_mode_logging == 1 } {
- puts "Rep$tnum: Skipping for mixed-mode logging."
- return
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
}
if { [is_btree $method] == 0 } {
puts "Rep$tnum: Skipping for method $method."
return
}
+ if { $mixed_mode_logging > 0 } {
+ puts "Rep$tnum: Skipping for mixed-mode logging."
+ return
+ }
+
error_check_good set_random_seed [berkdb srand $rand_init] 0
set nclients 5
set logsets [create_logsets [expr $nclients + 1]]
@@ -38,7 +50,7 @@ proc rep022 { method args } {
}
}
-proc rep022_sub { method nclients tnum logset args } {
+proc rep022_sub { method nclients tnum logset largs } {
source ./include.tcl
global errorInfo
env_cleanup $testdir
@@ -92,7 +104,7 @@ proc rep022_sub { method nclients tnum logset args } {
# Run a modified test001 in the master.
puts "\tRep$tnum.a: Running rep_test in replicated env."
set niter 10
- eval rep_test $method $masterenv NULL $niter 0 0
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
process_msgs $envlist
error_check_good masterenv_close [$masterenv close] 0
set envlist [lreplace $envlist 0 0]
@@ -159,6 +171,7 @@ proc rep022_sub { method nclients tnum logset args } {
while { $lastlsn4 < $lastlsn2 } {
error_check_good clientenv_close(4) [$clientenv(4) close] 0
set clientenv(4) [eval $env_cmd(4) -recover]
+ error_check_good flush [$clientenv(4) log_flush] 0
set origlist [lreplace $origlist 4 4 "$clientenv(4) 6"]
set logc [$clientenv(4) log_cursor]
error_check_good logc \
@@ -200,7 +213,7 @@ proc rep022_sub { method nclients tnum logset args } {
}
# Have client 4 (currently a master) run an operation.
- eval rep_test $method $clientenv(4) NULL $niter 0 0
+ eval rep_test $method $clientenv(4) NULL $niter 0 0 0 0 $largs
# Check that clients 0 and 4 get DUPMASTER messages and
# restart them as clients.
diff --git a/db/test/rep023.tcl b/db/test/rep023.tcl
index ef335aa35..c5a92427c 100644
--- a/db/test/rep023.tcl
+++ b/db/test/rep023.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep023.tcl,v 11.3 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep023.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep023
# TEST Replication using two master handles.
@@ -15,7 +15,17 @@
# TEST up properly.
#
proc rep023 { method { niter 10 } { tnum "023" } args } {
- global is_hp_test
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
# We can't open two envs on HP-UX, so just skip the
# whole test since that is at the core of it.
@@ -23,13 +33,13 @@ proc rep023 { method { niter 10 } { tnum "023" } args } {
puts "Rep$tnum: Skipping for HP-UX."
return
}
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery, and
# with and without -rep_start.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -47,7 +57,8 @@ proc rep023 { method { niter 10 } { tnum "023" } args } {
Replication and openfiles."
puts "Rep$tnum: Master logs are [lindex $l 0]"
puts "Rep$tnum: Client logs are [lindex $l 1]"
- rep023_sub $method $niter $tnum $l $r $startopt $args
+ rep023_sub $method \
+ $niter $tnum $l $r $startopt $args
}
}
}
@@ -76,11 +87,9 @@ proc rep023_sub { method niter tnum logset recargs startopt largs } {
# Open 1st master.
repladd 1
- set ma_envcmd "berkdb_env -create $m_txnargs \
- $m_logargs -lock_max 2500 \
+ set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env -create $m_txnargs \
-# $m_logargs -lock_max 2500 \
+# set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
# -errpfx MASTER -verbose {rep on} \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv1 [eval $ma_envcmd $recargs -rep_master]
@@ -96,11 +105,9 @@ proc rep023_sub { method niter tnum logset recargs startopt largs } {
# Open a client.
repladd 2
- set cl_envcmd "berkdb_env -create $c_txnargs \
- $c_logargs -lock_max 2500 \
+ set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env -create $c_txnargs \
-# $c_logargs -lock_max 2500 \
+# set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
# -errpfx CLIENT1 -verbose {rep on} \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
@@ -131,11 +138,11 @@ proc rep023_sub { method niter tnum logset recargs startopt largs } {
process_msgs $envlist
puts "\tRep$tnum.d: Run rep_test in 1st master; process messages."
- eval rep_test $method $masterenv1 $db1 $niter 0 0
+ eval rep_test $method $masterenv1 $db1 $niter 0 0 0 0 $largs
process_msgs $envlist
puts "\tRep$tnum.e: Run rep_test in 2nd master; process messages."
- eval rep_test $method $masterenv2 $db2 $niter 0 0
+ eval rep_test $method $masterenv2 $db2 $niter 0 0 0 0 $largs
process_msgs $envlist
# Contents of the two databases should match.
@@ -147,7 +154,7 @@ proc rep023_sub { method niter tnum logset recargs startopt largs } {
error_check_good master2_close [$masterenv2 close] 0
puts "\tRep$tnum.g: Run test in master again."
- eval rep_test $method $masterenv1 $db1 $niter $niter 0
+ eval rep_test $method $masterenv1 $db1 $niter $niter 0 0 0 $largs
process_msgs $envlist
puts "\tRep$tnum.h: Closing"
diff --git a/db/test/rep024.tcl b/db/test/rep024.tcl
index d3d8e089b..8092b03c2 100644
--- a/db/test/rep024.tcl
+++ b/db/test/rep024.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep024.tcl,v 1.7 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep024.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep024
# TEST Replication page allocation / verify test
@@ -13,8 +13,19 @@
# TEST and site 1 comes back up as a client. Verify database.
proc rep024 { method { niter 1000 } { tnum "024" } args } {
- global fixed_len
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ global fixed_len
set orig_fixed_len $fixed_len
set fixed_len 448
set args [convert_args $method $args]
@@ -22,8 +33,7 @@ proc rep024 { method { niter 1000 } { tnum "024" } args } {
# Run all tests with and without recovery.
set envargs ""
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -71,11 +81,11 @@ proc rep024_sub { method niter tnum envargs logset recargs largs } {
# Open a master.
repladd 1
- set env_cmd(1) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(1) "berkdb_env_noerr -create \
-log_max 1000000 $envargs $recargs -home $masterdir \
-errpfx MASTER -txn $m_logargs \
-rep_transport \[list 1 replsend\]"
-# set env_cmd(1) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(1) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs $recargs -home $masterdir \
# -verbose {rep on} -errfile /dev/stderr \
# -errpfx MASTER -txn $m_logargs \
@@ -85,11 +95,11 @@ proc rep024_sub { method niter tnum envargs logset recargs largs } {
# Open a client
repladd 2
- set env_cmd(2) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(2) "berkdb_env_noerr -create \
-log_max 1000000 $envargs $recargs -home $clientdir \
-errpfx CLIENT -txn $c_logargs \
-rep_transport \[list 2 replsend\]"
-# set env_cmd(2) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(2) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs $recargs -home $clientdir \
# -verbose {rep on} -errfile /dev/stderr \
# -errpfx CLIENT -txn $c_logargs \
@@ -118,7 +128,7 @@ proc rep024_sub { method niter tnum envargs logset recargs largs } {
set testfile "test$tnum.db"
set db [eval "berkdb_open -create $omethod -auto_commit \
-pagesize $pagesize -env $masterenv $largs $testfile"]
- eval rep_test $method $masterenv $db $niter 0 0
+ eval rep_test $method $masterenv $db $niter 0 0 0 0 $largs
process_msgs $envlist
# Close client. Force a page allocation on the master.
diff --git a/db/test/rep025.tcl b/db/test/rep025.tcl
new file mode 100644
index 000000000..cd458be95
--- /dev/null
+++ b/db/test/rep025.tcl
@@ -0,0 +1,207 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep025.tcl,v 12.12 2006/08/24 14:46:37 bostic Exp $
+#
+# TEST rep025
+# TEST Test of DB_REP_JOIN_FAILURE.
+# TEST
+# TEST One master, one client.
+# TEST Generate several log files.
+# TEST Remove old master log files.
+# TEST Delete client files and restart client.
+# TEST Put one more record to the master. At the next
+# TEST processing of messages, the client should get JOIN_FAILURE.
+# TEST Recover with a hot failover.
+#
+proc rep025 { method { niter 200 } { tnum "025" } args } {
+ source ./include.tcl
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r):\
+ Test of manual initialization and join failure."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep025_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep025_sub { method niter tnum logset recargs largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run a modified test001 in the master (and update client).
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ # Find out what exists on the client. We need to loop until
+ # the first master log file > last client log file.
+ puts "\tRep$tnum.b: Close client."
+ if { $c_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -l -h $clientdir]
+ }
+ set last_client_log [get_logfile $clientenv last]
+ error_check_good client_close [$clientenv close] 0
+
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory"} {
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ puts "\tRep$tnum.e: Clean client and reopen."
+ env_cleanup $clientdir
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2}"
+
+ # Set initialization to manual.
+ $clientenv rep_config {noautoinit on}
+ process_msgs $envlist 0 NONE err
+ error_check_good error_on_right_env [lindex $err 0] $clientenv
+ error_check_good right_error [is_substr $err DB_REP_JOIN_FAILURE] 1
+
+ # Add records to the master and update client.
+ puts "\tRep$tnum.f: Update master; client should return error."
+ set entries 100
+ eval rep_test $method $masterenv NULL $entries $start $start 0 0 $largs
+ incr start $entries
+ process_msgs $envlist 0 NONE err
+ error_check_good error_on_right_env [lindex $err 0] $clientenv
+ error_check_good right_error [is_substr $err DB_REP_JOIN_FAILURE] 1
+
+ # If the master logs are on-disk, copy from master to client and restart
+ # with recovery. If the logs are in-memory, we'll have to re-enable
+ # internal initialization and restart the client.
+ if { $m_logtype == "on-disk" } {
+ puts "\tRep$tnum.g: Hot failover and catastrophic recovery."
+ error_check_good client_close [$clientenv close] 0
+ env_cleanup $clientdir
+ set files [glob $masterdir/log.* $masterdir/*.db]
+ foreach f $files {
+ set filename [file tail $f]
+ file copy -force $f $clientdir/$filename
+ }
+ set clientenv [eval $cl_envcmd -recover_fatal -rep_client]
+ } else {
+ puts "\tRep$tnum.g: Restart client forcing internal init."
+ set clientenv [eval $cl_envcmd -rep_client]
+ $clientenv rep_config {noautoinit off}
+ }
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist 0 NONE err
+ error_check_good no_errors1 $err 0
+
+ # Adding another entry should not flush out an error.
+ eval rep_test $method $masterenv NULL $entries $start $start 0 0 $largs
+ process_msgs $envlist 0 NONE err
+ error_check_good no_errors2 $err 0
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep026.tcl b/db/test/rep026.tcl
index 0e4fe7359..50a7a57eb 100644
--- a/db/test/rep026.tcl
+++ b/db/test/rep026.tcl
@@ -1,28 +1,41 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep026.tcl,v 11.7 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep026.tcl,v 12.12 2006/09/13 21:51:23 carol Exp $
#
# TEST rep026
# TEST Replication elections - simulate a crash after sending
# TEST a vote.
proc rep026 { method args } {
+ source ./include.tcl
+
global mixed_mode_logging
set tnum "026"
- # This test uses recovery, so mixed-mode testing isn't
- # appropriate.
- if { $mixed_mode_logging == 1 } {
- puts "Rep$tnum: Skipping for mixed-mode logging."
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
return
}
+
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep$tnum: Skipping for method $method."
return
}
+ # This test uses recovery, so mixed-mode testing isn't
+ # appropriate.
+ if { $mixed_mode_logging > 0 } {
+ puts "Rep$tnum: Skipping for mixed-mode logging."
+ return
+ }
+
global rand_init
error_check_good set_random_seed [berkdb srand $rand_init] 0
@@ -40,10 +53,10 @@ proc rep026 { method args } {
}
}
-proc rep026_sub { method nclients tnum logset args } {
+proc rep026_sub { method nclients tnum logset largs } {
source ./include.tcl
global errorInfo
- global machids
+ global machids queuedbs
env_cleanup $testdir
set qdir $testdir/MSGQUEUEDIR
@@ -95,7 +108,7 @@ proc rep026_sub { method nclients tnum logset args } {
# Run a modified test001 in the master.
puts "\tRep$tnum.a: Running rep_test in replicated env."
set niter 10
- eval rep_test $method $masterenv NULL $niter 0 0
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
process_msgs $envlist
error_check_good masterenv_close [$masterenv close] 0
set envlist [lreplace $envlist 0 0]
@@ -175,8 +188,16 @@ proc rep026_sub { method nclients tnum logset args } {
# Have other clients SKIP the election messages and process
# only C's startup messages. We'll do it by copying the files
# and emptying the originals.
+ set cwd [pwd]
foreach machid $machids {
- file copy -force $qdir/repqueue$machid.db $qdir/save$machid.db
+ replready $machid to
+ cd $qdir
+ set msgdbs [glob -nocomplain ready.$machid.*]
+ foreach msgdb $msgdbs {
+ set savename [string replace $msgdb 0 5 save.]
+ file copy -force $msgdb $savename
+ }
+ cd $cwd
replclear $machid
}
@@ -243,8 +264,16 @@ proc rep026_sub { method nclients tnum logset args } {
proc restore_messages { qdir } {
global machids
+ set cwd [pwd]
foreach machid $machids {
- file copy -force $qdir/save$machid.db $qdir/repqueue$machid.db
+ replready $machid to
+ cd $qdir
+ set msgdbs [glob -nocomplain save.$machid.*]
+ foreach msgdb $msgdbs {
+ set rdyname [string replace $msgdb 0 4 ready.]
+ file copy -force $msgdb $rdyname
+ }
+ cd $cwd
}
}
diff --git a/db/test/rep027.tcl b/db/test/rep027.tcl
index 9af9f8f3f..33edb4216 100644
--- a/db/test/rep027.tcl
+++ b/db/test/rep027.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep027.tcl,v 1.5 2004/10/07 16:21:17 sue Exp $
+# $Id: rep027.tcl,v 12.9 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep027
# TEST Replication and secondary indexes.
@@ -13,8 +13,22 @@
proc rep027 { method { niter 1000 } { tnum "027" } args } {
- # Renumbering recno is not permitted on a primary
- # database.
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Renumbering recno is not permitted on a primary database.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_rrecno $method] != 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
if { [is_rrecno $method] == 1 } {
puts "Skipping rep027 for -rrecno."
return
@@ -24,8 +38,7 @@ proc rep027 { method { niter 1000 } { tnum "027" } args } {
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -70,7 +83,7 @@ proc rep027_sub { method niter tnum logset recargs largs } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env -create \
-log_max 1000000 -home $masterdir \
$m_txnargs $m_logargs -rep_master -rep_transport \
\[list 1 replsend\]"
@@ -79,7 +92,7 @@ proc rep027_sub { method niter tnum logset recargs largs } {
# Open a client
repladd 2
- set env_cmd(C) "berkdb_env -create -lock_max 2500 \
+ set env_cmd(C) "berkdb_env -create \
$c_txnargs $c_logargs -home $clientdir \
-rep_client -rep_transport \[list 2 replsend\]"
set clientenv [eval $env_cmd(C) $recargs]
@@ -104,8 +117,7 @@ proc rep027_sub { method niter tnum logset recargs largs } {
set sdb [eval {berkdb_open -create \
-auto_commit -env} $masterenv -btree $sname]
error_check_good second_open [is_valid_db $sdb] TRUE
- error_check_good \
- db_associate [$pdb associate -auto_commit [callback_n 0] $sdb] 0
+ error_check_good db_associate [$pdb associate [callback_n 0] $sdb] 0
# Propagate to client.
process_msgs $envlist
@@ -123,7 +135,7 @@ proc rep027_sub { method niter tnum logset recargs largs } {
set keys($n) $key
set data($n) [pad_data $method $datum]
- set ret [$pdb put -auto_commit $key [chop_data $method $datum]]
+ set ret [$pdb put $key [chop_data $method $datum]]
error_check_good put($n) $ret 0
}
close $did
@@ -143,7 +155,7 @@ proc rep027_sub { method niter tnum logset recargs largs } {
set clientsdb [eval {berkdb_open -auto_commit -env} $clientenv $sname]
error_check_good client_sec [is_valid_db $clientsdb] TRUE
error_check_good client_associate \
- [$clientpdb associate -auto_commit [callback_n 0] $clientsdb] 0
+ [$clientpdb associate [callback_n 0] $clientsdb] 0
# Check secondaries on client.
puts "\tRep$tnum.c: Check secondaries on client."
diff --git a/db/test/rep028.tcl b/db/test/rep028.tcl
index 7f0ea7f34..7c2fa366f 100644
--- a/db/test/rep028.tcl
+++ b/db/test/rep028.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep028.tcl,v 11.4 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep028.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep028
# TEST Replication and non-rep env handles. (Also see rep006.)
@@ -15,25 +15,35 @@
# TEST in the non-rep env writes log records.
#
proc rep028 { method { niter 100 } { tnum "028" } args } {
- global is_hp_test
- # Skip test for HP-UX because we can't open an env twice.
- if { $is_hp_test == 1 } {
- puts "\tRep$tnum: Skipping for HP-UX."
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
return
}
+
+ # Run for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "\tRep$tnum: Skipping for method $method."
return
}
+ # Skip test for HP-UX because we can't open an env twice.
+ if { $is_hp_test == 1 } {
+ puts "\tRep$tnum: Skipping for HP-UX."
+ return
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
set clopts { "create" "open" }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -81,11 +91,11 @@ proc rep028_sub { method niter tnum logset recargs clargs largs } {
# Open a master.
puts "\tRep$tnum.a: Open replicated envs and non-replicated client env."
repladd 1
- set env_cmd(M) "berkdb_env -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env_noerr -create \
-log_max 1000000 -home $masterdir \
$m_txnargs $m_logargs -rep_master \
-rep_transport \[list 1 replsend\]"
-# set env_cmd(M) "berkdb_env -create -lock_max 2500 \
+# set env_cmd(M) "berkdb_env_noerr -create \
# -log_max 1000000 -home $masterdir \
# $m_txnargs $m_logargs -rep_master \
# -verbose {rep on} -errpfx MASTER \
@@ -95,11 +105,11 @@ proc rep028_sub { method niter tnum logset recargs clargs largs } {
# Open a client
repladd 2
- set env_cmd(C) "berkdb_env -create $c_txnargs \
- $c_logargs -lock_max 2500 -home $clientdir \
+ set env_cmd(C) "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -home $clientdir \
-rep_transport \[list 2 replsend\]"
-# set env_cmd(C) "berkdb_env -create $c_txnargs \
-# $c_logargs -lock_max 2500 -home $clientdir \
+# set env_cmd(C) "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -home $clientdir \
# -verbose {rep on} -errpfx CLIENT \
# -rep_transport \[list 2 replsend\]"
set clientenv [eval $env_cmd(C) $recargs]
@@ -137,35 +147,27 @@ proc rep028_sub { method niter tnum logset recargs clargs largs } {
puts "\tRep$tnum.$let: Declare env as rep client"
error_check_good client [$clientenv rep_start -client] 0
-
# Bring the client online by processing the startup messages.
set envlist "{$masterenv 1} {$clientenv 2}"
- process_msgs $envlist
+ process_msgs $envlist 0 NONE err
+ #
+ # In the create case, we'll detect the non-rep log records and
+ # determine this client was never part of the replication group.
+ #
+ if { $clargs == "create" } {
+ error_check_good dead [is_substr $err \
+ "was never part"] 1
+ error_check_good close [$nonrepdb close] 0
+ }
# Open the same db through the master handle. Put data
# and process messages.
set db [eval berkdb_open \
-create $omethod -env $masterenv -auto_commit $dbname]
error_check_good db_open [is_valid_db $db] TRUE
- eval rep_test $method $masterenv $db $niter 0 0
+ eval rep_test $method $masterenv $db $niter 0 0 0 0 $largs
process_msgs $envlist
- if { $clargs == "create" } {
- # Run db stat on non-rep handle.
- puts "\tRep$tnum.$nextlet: Check dead handle."
- set stat [catch {$nonrepdb stat} ret]
- error_check_good stat $stat 1
- error_check_good dead [is_substr $ret \
- DB_REP_HANDLE_DEAD] 1
- error_check_good close [$nonrepdb close] 0
- set nonrepdb [eval berkdb_open \
- -create $omethod -env $nonrepenv $dbname]
- error_check_good nonrepdb_open [is_valid_db $nonrepdb] TRUE
- set stat [catch {$nonrepdb stat} ret]
- error_check_good stat $stat 0
- error_check_good close [$nonrepdb close] 0
- }
-
#
# If we're the open case, we want to just read the existing
# database through a non-rep readonly handle. Doing so
@@ -182,7 +184,7 @@ proc rep028_sub { method niter tnum logset recargs clargs largs } {
# some more on the client to notice the end of log
# is now in an unexpected place.
#
- eval rep_test $method $masterenv $db $niter 0 0
+ eval rep_test $method $masterenv $db $niter 0 0 0 0 $largs
process_msgs $envlist
error_check_good close [$nonrepdb close] 0
diff --git a/db/test/rep029.tcl b/db/test/rep029.tcl
index f69a8f051..fd5454c36 100644
--- a/db/test/rep029.tcl
+++ b/db/test/rep029.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep029.tcl,v 11.5 2004/10/04 18:15:14 sue Exp $
+# $Id: rep029.tcl,v 12.17 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep029
# TEST Test of internal initialization.
@@ -15,49 +15,85 @@
# TEST Put one more record to the master.
#
proc rep029 { method { niter 200 } { tnum "029" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
global passwd
global has_crypto
set args [convert_args $method $args]
set saved_args $args
+ # Rep057 runs rep029 with in-memory named databases.
+ set inmem 0
+ set msg "using regular named databases"
+ if { $tnum == "057" } {
+ set inmem 1
+ set msg "using in-memory named databases"
+ if { [is_queueext $method] == 1 } {
+ puts "Skipping rep$tnum for method $method"
+ return
+ }
+ }
+
# This test needs to set its own pagesize.
set pgindex [lsearch -exact $args "-pagesize"]
- if { $pgindex != -1 } {
- puts "Rep$tnum: skipping for specific pagesizes"
- return
- }
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
# Run the body of the test with and without recovery,
- # and with and without cleaning.
- set recopts { "" " -recover " }
- set cleanopts { clean noclean }
- foreach r $recopts {
- foreach c $cleanopts {
- set envargs ""
- set args $saved_args
- puts "Rep$tnum ($method $envargs $c $r $args):\
- Test of internal initialization."
- rep029_sub $method $niter $tnum $envargs \
- $r $c $args
-
- if { $has_crypto == 0 } {
- continue
- }
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ set opts { bulk clean noclean }
+ foreach r $test_recopts {
+ foreach c $opts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ set envargs ""
+ set args $saved_args
+ puts "Rep$tnum ($method $envargs $r $c $args):\
+ Test of internal initialization with $msg."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep029_sub $method $niter $tnum $envargs \
+ $l $r $c $inmem $args
- # Run same set of tests with security.
- #
- append envargs " -encryptaes $passwd "
- append args " -encrypt "
- puts "Rep$tnum ($method $envargs $r $args):\
- Test of internal initialization."
- rep029_sub $method $niter $tnum $envargs \
- $r $c $args
+ # Skip encrypted tests if not supported.
+ if { $has_crypto == 0 || $inmem } {
+ continue
+ }
+
+ # Run same set of tests with security.
+ #
+ append envargs " -encryptaes $passwd "
+ append args " -encrypt "
+ puts "Rep$tnum ($method $envargs $r $c $args):\
+ Test of internal initialization with $msg."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep029_sub $method $niter $tnum $envargs \
+ $l $r $c $inmem $args
+ }
}
}
}
-proc rep029_sub { method niter tnum envargs recargs clean largs } {
+proc rep029_sub { method niter tnum envargs logset recargs opts inmem largs } {
global testdir
global passwd
global util_path
@@ -79,27 +115,38 @@ proc rep029_sub { method niter tnum envargs recargs clean largs } {
append largs " -pagesize $pagesize "
set log_buf [expr $pagesize * 2]
set log_max [expr $log_buf * 4]
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max $envargs \
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max $envargs \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max $envargs \
-# -verbose {rep on} -errpfx MASTER \
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max $envargs \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open a client
repladd 2
- set cl_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max $envargs \
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max $envargs \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max $envargs \
-# -verbose {rep on} -errpfx CLIENT \
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max $envargs \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
@@ -110,11 +157,11 @@ proc rep029_sub { method niter tnum envargs recargs clean largs } {
# Run rep_test in the master (and update client).
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
- process_msgs $envlist
-
- puts "\tRep$tnum.b: Close client."
- error_check_good client_close [$clientenv close] 0
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 $inmem $largs
+ incr start $niter
+ process_msgs $envlist 0 NONE err
+ error_check_good process_msgs $err 0
if { [lsearch $envargs "-encrypta*"] !=-1 } {
set enc "-P $passwd"
@@ -122,27 +169,47 @@ proc rep029_sub { method niter tnum envargs recargs clean largs } {
set enc ""
}
- # Run rep_test in the master (don't update client).
- puts "\tRep$tnum.c: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
- replclear 2
+ # Find out what exists on the client. We need to loop until
+ # the first master log file > last client log file.
+ puts "\tRep$tnum.b: Close client."
+ if { $c_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive $enc -l -h $clientdir]
+ }
+ set last_client_log [get_logfile $clientenv last]
+ error_check_good client_close [$clientenv close] 0
- puts "\tRep$tnum.d: Run db_archive on master."
- set res [eval exec $util_path/db_archive $enc -l -h $masterdir]
- error_check_bad log.1.present [lsearch -exact $res log.0000000001] -1
- set res [eval exec $util_path/db_archive $enc -d -h $masterdir]
- set res [eval exec $util_path/db_archive $enc -l -h $masterdir]
- error_check_good log.1.gone [lsearch -exact $res log.0000000001] -1
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv NULL $niter $start $start 0 $inmem $largs
+ incr start $niter
+ replclear 2
- puts "\tRep$tnum.e: Reopen client ($clean)."
- if { $clean == "clean" } {
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory"} {
+ set res [eval exec $util_path/db_archive $enc -d -h $masterdir]
+ }
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ puts "\tRep$tnum.e: Reopen client ($opts)."
+ if { $opts == "clean" } {
env_cleanup $clientdir
}
+ if { $opts == "bulk" } {
+ error_check_good bulk [$masterenv rep_config {bulk on}] 0
+ }
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
set envlist "{$masterenv 1} {$clientenv 2}"
process_msgs $envlist 0 NONE err
- if { $clean == "noclean" } {
+ error_check_good process_msgs $err 0
+ if { $opts != "clean" } {
puts "\tRep$tnum.e.1: Trigger log request"
#
# When we don't clean, starting the client doesn't
@@ -151,57 +218,60 @@ proc rep029_sub { method niter tnum envargs recargs clean largs } {
# logs and that will trigger it.
#
set entries 10
- eval rep_test $method $masterenv NULL $entries $niter 0 0 $largs
+ eval rep_test\
+ $method $masterenv NULL $entries $start $start 0 $inmem $largs
+ incr start $entries
+ process_msgs $envlist 0 NONE err
+ error_check_good process_msgs $err 0
+ }
+
+ puts "\tRep$tnum.f: Verify databases"
+ #
+ # If doing bulk testing, turn it off now so that it forces us
+ # to flush anything currently in the bulk buffer. We need to
+ # do this because rep_test might have aborted a transaction on
+ # its last iteration and those log records would still be in
+ # the bulk buffer causing the log comparison to fail.
+ #
+ if { $opts == "bulk" } {
+ puts "\tRep$tnum.f.1: Turn off bulk transfers."
+ error_check_good bulk [$masterenv rep_config {bulk off}] 0
process_msgs $envlist 0 NONE err
+ error_check_good process_msgs $err 0
+ }
+
+ #
+ # !!! This test CANNOT use rep_verify due to encryption.
+ # Just compare databases. We either have to copy in
+ # all the code in rep_verify to adjust the beginning LSN
+ # or skip the log check for just this one test.
+ if { $inmem == 1 } {
+ set dbname { "" "test.db" }
+ } else {
+ set dbname "test.db"
}
- puts "\tRep$tnum.f: Verify logs and databases"
- # Check that master and client logs and dbs are identical.
- # Logs first ...
- set stat [catch {eval exec $util_path/db_printlog $enc \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog $enc \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- # ... now the databases.
- set dbname "test.db"
- set db1 [eval {berkdb_open -env $masterenv} $largs {-rdonly $dbname}]
- set db2 [eval {berkdb_open -env $clientenv} $largs {-rdonly $dbname}]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1 1 0 $dbname
# Add records to the master and update client.
puts "\tRep$tnum.g: Add more records and check again."
set entries 10
- eval rep_test $method $masterenv NULL $entries $niter 0 0 $largs
+ eval rep_test $method $masterenv NULL $entries $start $start 0 $inmem $largs
+ incr start $entries
process_msgs $envlist 0 NONE err
+ error_check_good process_msgs $err 0
- # Check again that master and client logs and dbs are identical.
- set stat [catch {eval exec $util_path/db_printlog $enc \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog $enc \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1 1 0 $dbname
- set db1 [eval {berkdb_open -env $masterenv} $largs {-rdonly $dbname}]
- set db2 [eval {berkdb_open -env $clientenv} $largs {-rdonly $dbname}]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
+ set bulkxfer [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ if { $opts == "bulk" } {
+ error_check_bad bulkxferon $bulkxfer 0
+ } else {
+ error_check_good bulkxferoff $bulkxfer 0
+ }
error_check_good masterenv_close [$masterenv close] 0
error_check_good clientenv_close [$clientenv close] 0
replclose $testdir/MSGQUEUEDIR
}
+
diff --git a/db/test/rep030.tcl b/db/test/rep030.tcl
index 2d6a714a6..fd427c619 100644
--- a/db/test/rep030.tcl
+++ b/db/test/rep030.tcl
@@ -1,44 +1,68 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep030.tcl,v 11.9 2004/10/07 18:24:11 carol Exp $
+# $Id: rep030.tcl,v 12.16 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep030
# TEST Test of internal initialization multiple files and pagesizes.
-# TEST Hold some databases open on master.
+# TEST Hold some databases open on master.
# TEST
-# TEST One master, one client.
+# TEST One master, one client using a data_dir for internal init.
# TEST Generate several log files.
# TEST Remove old master log files.
# TEST Delete client files and restart client.
# TEST Put one more record to the master.
#
proc rep030 { method { niter 500 } { tnum "030" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
# This test needs to set its own pagesize.
set pgindex [lsearch -exact $args "-pagesize"]
- if { $pgindex != -1 } {
- puts "Rep$tnum: skipping for specific pagesizes"
- return
- }
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
# Run the body of the test with and without recovery,
# and with and without cleaning.
- set recopts { " -recover " "" }
- set cleanopts { noclean clean }
- foreach r $recopts {
- foreach c $cleanopts {
- puts "Rep$tnum ($method $r $c):\
- Test of internal initialization."
- rep030_sub $method $niter $tnum $r $c $args
+ set opts { clean noclean bulk }
+ foreach r $test_recopts {
+ foreach c $opts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $c):\
+ Internal initialization - hold some\
+ databases open on master."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep030_sub $method $niter $tnum $l $r $c $args
+ }
}
}
}
-proc rep030_sub { method niter tnum recargs clean largs } {
+proc rep030_sub { method niter tnum logset recargs opts largs } {
global testdir
global util_path
@@ -60,30 +84,63 @@ proc rep030_sub { method niter tnum recargs clean largs } {
set log_max [expr $log_buf * 4]
set cache [expr $maxpg * 32 ]
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
# Open a master.
+
+ #
+ # Run internal init using a data directory
+ #
+
+ #
+ # !!! - SR 14578 opening with recovery blows away data_dir.
+ #
+ if { $recargs != "-recover" } {
+ file mkdir $masterdir/data
+ file mkdir $masterdir/data2
+ file mkdir $clientdir/data
+ file mkdir $clientdir/data2
+ #
+ # Set it twice to test duplicates data_dirs as well
+ # as multiple, different data dirs
+ #
+ set data_diropts " -data_dir data -data_dir data -data_dir data2"
+ } else {
+ set data_diropts ""
+ }
repladd 1
- set ma_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max \
- -cachesize { 0 $cache 1 } \
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
+ -cachesize { 0 $cache 1 } $data_diropts \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max \
-# -cachesize { 0 $cache 1 }\
-# -verbose {rep on} -errpfx MASTER \
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -cachesize { 0 $cache 1 } $data_diropts \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open a client
repladd 2
- set cl_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max \
- -cachesize { 0 $cache 1 }\
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
+ -cachesize { 0 $cache 1 } $data_diropts \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max \
-# -cachesize { 0 $cache 1 }\
-# -verbose {rep on} -errpfx CLIENT \
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -cachesize { 0 $cache 1 } $data_diropts \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
@@ -108,7 +165,7 @@ proc rep030_sub { method niter tnum recargs clean largs } {
set pagesize [lindex $pglist $i]
set largs " -pagesize $pagesize "
eval rep_test $method $masterenv NULL $nentries $mult $mult \
- 0 $largs
+ 0 0 $largs
process_msgs $envlist
#
@@ -153,46 +210,58 @@ proc rep030_sub { method niter tnum recargs clean largs } {
error_check_good emptydb [is_valid_db $db] TRUE
error_check_good empty_close [$db close] 0
#
- # Keep this subdb (regular if queue) database open.
+ # Keep this subdb (regular if queue) database open.
# We need it a few times later on.
#
set db [eval {berkdb_open_noerr -env $masterenv -auto_commit -create \
-mode 0644} $largs $omethod $testfile $sub]
error_check_good subdb [is_valid_db $db] TRUE
- eval rep_test $method $masterenv $db $niter 0 0 0
+ set start 0
+ eval rep_test $method $masterenv $db $niter $start $start 0 0 $largs
+ incr start $niter
process_msgs $envlist
puts "\tRep$tnum.b: Close client."
+ # First save the log number of the latest client log.
+ set last_client_log [get_logfile $clientenv last]
error_check_good client_close [$clientenv close] 0
- #
# Run rep_test in the master (don't update client).
- # Need to guarantee that we will change log files during
- # this run so run with the largest pagesize and double
- # the number of entries.
- #
- puts "\tRep$tnum.c: Running rep_test ( $largs) in replicated env."
- set nentries [expr $niter * 2]
- eval rep_test $method $masterenv $db $nentries 0 0 0
- replclear 2
-
- puts "\tRep$tnum.d: Run db_archive on master."
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_bad log.1.present [lsearch -exact $res log.0000000001] -1
- set res [eval exec $util_path/db_archive -d -h $masterdir]
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_good log.1.gone [lsearch -exact $res log.0000000001] -1
-
- puts "\tRep$tnum.e: Reopen client ($clean)."
- if { $clean == "clean" } {
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv $db $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory"} {
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ }
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ puts "\tRep$tnum.e: Reopen client ($opts)."
+ if { $opts == "clean" } {
env_cleanup $clientdir
+ file mkdir $clientdir/data
+ file mkdir $clientdir/data2
+ }
+ if { $opts == "bulk" } {
+ error_check_good bulk [$masterenv rep_config {bulk on}] 0
}
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
set envlist "{$masterenv 1} {$clientenv 2}"
process_msgs $envlist 0 NONE err
- if { $clean == "noclean" } {
+ if { $opts != "clean" } {
puts "\tRep$tnum.e.1: Trigger log request"
#
# When we don't clean, starting the client doesn't
@@ -201,48 +270,34 @@ proc rep030_sub { method niter tnum recargs clean largs } {
# logs and that will trigger it.
#
set entries 100
- eval rep_test $method $masterenv $db $entries $niter 0 0
+ eval rep_test $method $masterenv $db $entries $start $start 0 0 $largs
+ incr start $entries
process_msgs $envlist 0 NONE err
}
error_check_good subdb_close [$db close] 0
process_msgs $envlist 0 NONE err
puts "\tRep$tnum.f: Verify logs and databases"
- # Check that master and client logs and dbs are identical.
- # Logs first ...
- set stat [catch {eval exec $util_path/db_printlog \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- # ... now the databases.
- set dbname "test.db"
- set db1 [eval {berkdb_open -env $masterenv -rdonly} $dbname $sub]
- set db2 [eval {berkdb_open -env $clientenv -rdonly} $dbname $sub]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
-
+ #
+ # If doing bulk testing, turn it off now so that it forces us
+ # to flush anything currently in the bulk buffer. We need to
+ # do this because rep_test might have aborted a transaction on
+ # its last iteration and those log records would still be in
+ # the bulk buffer causing the log comparison to fail.
+ #
+ if { $opts == "bulk" } {
+ puts "\tRep$tnum.f.1: Turn off bulk transfers."
+ error_check_good bulk [$masterenv rep_config {bulk off}] 0
+ process_msgs $envlist 0 NONE err
+ }
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
for { set i 0 } { $i < $nfiles } { incr i } {
set dbname "test.$i.db"
- set db1 [berkdb_open -env $masterenv -rdonly $dbname]
- set db2 [berkdb_open -env $clientenv -rdonly $dbname]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv \
+ 1 1 0 $dbname
}
- #
# Close the database held open on master for initialization.
- #
foreach db $dbopen {
error_check_good db_close [$db close] 0
}
@@ -253,39 +308,25 @@ proc rep030_sub { method niter tnum recargs clean largs } {
set db [eval {berkdb_open_noerr -env $masterenv -auto_commit \
-mode 0644} $largs $omethod $testfile $sub]
error_check_good subdb [is_valid_db $db] TRUE
- eval rep_test $method $masterenv $db $entries $niter 0 0
+ eval rep_test $method $masterenv $db $entries $niter 0 0 0 $largs
error_check_good subdb_close [$db close] 0
process_msgs $envlist 0 NONE err
- # Check again that master and client logs and dbs are identical.
- set stat [catch {eval exec $util_path/db_printlog \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- set dbname "test.db"
- set db1 [eval {berkdb_open -env $masterenv -auto_commit} $dbname $sub]
- set db2 [eval {berkdb_open -env $clientenv -auto_commit} $dbname $sub]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
-
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1 1 0
for { set i 0 } { $i < $nfiles } { incr i } {
set dbname "test.$i.db"
- set db1 [berkdb_open -env $masterenv -auto_commit $dbname]
- set db2 [berkdb_open -env $clientenv -auto_commit $dbname]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv \
+ 1 1 0 $dbname
}
+ set bulkxfer [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ if { $opts == "bulk" } {
+ error_check_bad bulkxferon $bulkxfer 0
+ } else {
+ error_check_good bulkxferoff $bulkxfer 0
+ }
+
+ check_log_location $masterenv
+ check_log_location $clientenv
error_check_good masterenv_close [$masterenv close] 0
error_check_good clientenv_close [$clientenv close] 0
diff --git a/db/test/rep031.tcl b/db/test/rep031.tcl
index d2fa2fb68..03a1936c8 100644
--- a/db/test/rep031.tcl
+++ b/db/test/rep031.tcl
@@ -1,22 +1,41 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep031.tcl,v 11.6 2004/10/04 18:15:14 sue Exp $
+# $Id: rep031.tcl,v 12.17 2006/09/11 19:47:22 sue Exp $
#
# TEST rep031
# TEST Test of internal initialization and blocked operations.
# TEST
# TEST One master, one client.
# TEST Put one more record to the master.
-# TEST Test that internal initialization block log_archive, rename, remove.
+# TEST Test that internal initialization blocks:
+# TEST log_archive, rename, remove, fileid_reset, lsn_reset.
# TEST Sleep 30+ seconds.
-# TEST Test that we can now log_archive, rename, remove.
+# TEST Test that blocked operations are now unblocked.
#
proc rep031 { method { niter 200 } { tnum "031" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # There is nothing method-sensitive in this test, so
+ # skip for all except btree.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
+ if { [is_btree $method] != 1 } {
+ puts "Skipping rep031 for method $method."
+ return
+ }
+
set args [convert_args $method $args]
+ set logsets [create_logsets 2]
# This test needs to set its own pagesize.
set pgindex [lsearch -exact $args "-pagesize"]
@@ -26,21 +45,30 @@ proc rep031 { method { niter 200 } { tnum "031" } args } {
}
# Run the body of the test with and without recovery,
- # and with and without cleaning.
- set recopts { "" " -recover " }
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
set cleanopts { clean noclean }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach c $cleanopts {
- puts "Rep$tnum ($method $r $c $args):\
- Test of internal initialization."
- rep031_sub $method $niter $tnum $r $c $args
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $c $args): Test of\
+ internal init and blocked operations."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep031_sub $method $niter $tnum $l $r $c $args
+ }
}
}
}
-proc rep031_sub { method niter tnum recargs clean largs } {
- global testdir
- global util_path
+proc rep031_sub { method niter tnum logset recargs clean largs } {
+ source ./include.tcl
env_cleanup $testdir
@@ -60,26 +88,38 @@ proc rep031_sub { method niter tnum recargs clean largs } {
set log_buf [expr $pagesize * 2]
set log_max [expr $log_buf * 4]
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max \
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max \
-# -verbose {rep on} -errpfx MASTER \
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open a client
repladd 2
- set cl_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max \
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max \
-# -verbose {rep on} -errpfx CLIENT \
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
@@ -90,23 +130,39 @@ proc rep031_sub { method niter tnum recargs clean largs } {
# Run rep_test in the master (and update client).
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
process_msgs $envlist
puts "\tRep$tnum.b: Close client."
+ # Find out what exists on the client. We need to loop until
+ # the first master log file > last client log file.
+ if { $c_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -l -h $clientdir]
+ }
+ set last_client_log [get_logfile $clientenv last]
error_check_good client_close [$clientenv close] 0
- # Run rep_test in the master (don't update client).
- puts "\tRep$tnum.c: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
- replclear 2
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
- puts "\tRep$tnum.d: Run db_archive on master."
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_bad log.1.present [lsearch -exact $res log.0000000001] -1
- set res [eval exec $util_path/db_archive -d -h $masterdir]
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_good log.1.gone [lsearch -exact $res log.0000000001] -1
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory"} {
+ set res \
+ [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
puts "\tRep$tnum.e: Reopen client ($clean)."
if { $clean == "clean" } {
@@ -125,7 +181,9 @@ proc rep031_sub { method niter tnum recargs clean largs } {
# logs and that will trigger it.
#
set entries 10
- eval rep_test $method $masterenv NULL $entries $niter 0 0 $largs
+ eval rep_test \
+ $method $masterenv NULL $entries $start $start 0 0 $largs
+ incr start $entries
process_msgs $envlist 0 NONE err
}
@@ -133,26 +191,7 @@ proc rep031_sub { method niter tnum recargs clean largs } {
# We have now forced an internal initialization. Verify it is correct.
#
puts "\tRep$tnum.f: Verify logs and databases"
- # Check that master and client logs and dbs are identical.
- # Logs first ...
- set stat [catch {eval exec $util_path/db_printlog \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- # ... now the databases.
- set dbname "test.db"
- set db1 [eval {berkdb_open -env $masterenv} $largs {-rdonly $dbname}]
- set db2 [eval {berkdb_open -env $clientenv} $largs {-rdonly $dbname}]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
#
# Internal initializations disable certain operations on the master for
@@ -162,48 +201,100 @@ proc rep031_sub { method niter tnum recargs clean largs } {
#
puts "\tRep$tnum.g: Try to remove and rename the database."
+ set dbname "test.db"
set old $dbname
set new $dbname.new
set stat [catch {$masterenv dbrename -auto_commit $old $new} ret]
error_check_good rename_fail $stat 1
- error_check_good archive_err [is_substr $ret "invalid"] 1
+ error_check_good rename_err [is_substr $ret "invalid"] 1
set stat [catch {$masterenv dbremove -auto_commit $old} ret]
error_check_good remove_fail $stat 1
- error_check_good archive_err [is_substr $ret "invalid"] 1
+ error_check_good remove_err [is_substr $ret "invalid"] 1
+
+ puts "\tRep$tnum.h: Try to reset LSNs and fileid on the database."
+ set stat [catch {$masterenv id_reset $old} ret]
+ error_check_good id_reset $stat 1
+ error_check_good id_err [is_substr $ret "invalid"] 1
+ set stat [catch {$masterenv lsn_reset $old} ret]
+ error_check_good lsn_reset $stat 1
+ error_check_good lsn_err [is_substr $ret "invalid"] 1
#
# Need entries big enough to generate additional log files.
# However, db_archive will not return an error, it will
# just retain the log file.
#
+ puts "\tRep$tnum.i: Run rep_test to generate more logs."
set entries 200
- eval rep_test $method $masterenv NULL $entries $niter 0 0 $largs
+ eval rep_test $method $masterenv NULL $entries $start $start 0 0 $largs
+ incr start $entries
process_msgs $envlist 0 NONE err
- puts "\tRep$tnum.h: Try to db_archive."
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- set first [lindex $res 0]
- set res [eval exec $util_path/db_archive -d -h $masterdir]
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_bad log.gone [lsearch -exact $res $first] -1
+ # Test lockout of archiving only in on-disk case.
+ if { $m_logtype != "in-memory" } {
+ puts "\tRep$tnum.j: Try to db_archive."
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ set first [lindex $res 0]
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_bad log.gone [lsearch -exact $res $first] -1
+
+ puts "\tRep$tnum.j.0: Try to log_archive in master env."
+ set res [$masterenv log_archive -arch_remove]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_bad log.gone0 [lsearch -exact $res $first] -1
+ # We can't open a second handle on the env in HP-UX.
+ if { $is_hp_test != 1 } {
+ puts "\tRep$tnum.j.1: Log_archive in new non-rep env."
+ set newenv [berkdb_env_noerr -txn nosync \
+ -log_buffer $log_buf -log_max $log_max \
+ -home $masterdir]
+ error_check_good newenv [is_valid_env $newenv] TRUE
+ set res [$newenv log_archive -arch_remove]
+ set res [eval exec \
+ $util_path/db_archive -l -h $masterdir]
+ error_check_bad \
+ log.gone1 [lsearch -exact $res $first] -1
+ }
+ }
+
+ set timeout 30
#
- # Sleep 32 seconds - The timeout is 30 seconds, but we need
+ # Sleep timeout+2 seconds - The timeout is 60 seconds, but we need
# to sleep a bit longer to make sure we cross the timeout.
#
- set to 32
- puts "\tRep$tnum.i: Wait $to seconds to timeout"
+ set to [expr $timeout + 2]
+ puts "\tRep$tnum.k: Wait $to seconds to timeout"
tclsleep $to
- puts "\tRep$tnum.j: Retry blocked operations after wait"
+ puts "\tRep$tnum.l: Retry blocked operations after wait"
+ set stat [catch {$masterenv id_reset $old} ret]
+ error_check_good id_reset_work $stat 0
+ set stat [catch {$masterenv lsn_reset $old} ret]
+ error_check_good lsn_reset_work $stat 0
set stat [catch {$masterenv dbrename -auto_commit $old $new} ret]
error_check_good rename_work $stat 0
set stat [catch {$masterenv dbremove -auto_commit $new} ret]
error_check_good remove_work $stat 0
process_msgs $envlist 0 NONE err
- set stat [catch {eval exec $util_path/db_archive -d -h $masterdir} ret]
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_good log.gone [lsearch -exact $res $first] -1
+ if { $m_logtype != "in-memory" } {
+ # Remove files via the 2nd non-rep env, check via db_archive.
+ if { $is_hp_test != 1 } {
+ set res [$newenv log_archive -arch_remove]
+ set res \
+ [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_good \
+ log.gone [lsearch -exact $res $first] -1
+ error_check_good newenv_close [$newenv close] 0
+ } else {
+ set res [$masterenv log_archive -arch_remove]
+ set res \
+ [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_good \
+ log.gone [lsearch -exact $res $first] -1
+ }
+ }
error_check_good masterenv_close [$masterenv close] 0
error_check_good clientenv_close [$clientenv close] 0
diff --git a/db/test/rep032.tcl b/db/test/rep032.tcl
index 77293cdba..4495b3181 100644
--- a/db/test/rep032.tcl
+++ b/db/test/rep032.tcl
@@ -1,42 +1,56 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep032.tcl,v 1.3 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep032.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep032
# TEST Test of log gap processing.
# TEST
-# TEST One master, one clients.
+# TEST One master, one client.
# TEST Run rep_test.
# TEST Run rep_test without sending messages to client.
# TEST Make sure client missing the messages catches up properly.
#
proc rep032 { method { niter 200 } { tnum "032" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 2]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- foreach r $recopts {
- foreach l $logsets {
- set logindex [lsearch -exact $l "in-memory"]
- if { $r == "-recover" && $logindex != -1 } {
- puts "Rep$tnum: Skipping\
- for in-memory logs with -recover."
- continue
+ set opts { "" "bulk" }
+ foreach r $test_recopts {
+ foreach b $opts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($method $r $b $args):\
+ Test of log gap processing."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep032_sub $method $niter $tnum $l $r $b $args
}
- puts "Rep$tnum ($method $r $args):\
- Test of log gap processing."
- puts "Rep$tnum: Master logs are [lindex $l 0]"
- puts "Rep$tnum: Client logs are [lindex $l 1]"
- rep032_sub $method $niter $tnum $l $r $args
}
}
}
-proc rep032_sub { method niter tnum logset recargs largs } {
+proc rep032_sub { method niter tnum logset recargs opts largs } {
global testdir
global util_path
@@ -69,6 +83,9 @@ proc rep032_sub { method niter tnum logset recargs largs } {
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
+ if { $opts == "bulk" } {
+ error_check_good bulk [$masterenv rep_config {bulk on}] 0
+ }
# Open a client
repladd 2
@@ -80,13 +97,15 @@ proc rep032_sub { method niter tnum logset recargs largs } {
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
- # Bring the clients online by processing the startup messages.
+ # Bring the client online by processing the startup messages.
set envlist "{$masterenv 1} {$clientenv 2}"
process_msgs $envlist
# Run rep_test in the master (and update client).
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
process_msgs $envlist
puts "\tRep$tnum.b: Check client processed everything properly."
@@ -98,7 +117,8 @@ proc rep032_sub { method niter tnum logset recargs largs } {
# Run rep_test in the master (don't update client).
# First run with dropping all client messages via replclear.
puts "\tRep$tnum.c: Running rep_test dropping client msgs."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
replclear 2
process_msgs $envlist
@@ -107,7 +127,8 @@ proc rep032_sub { method niter tnum logset recargs largs } {
# request missing pieces.
#
puts "\tRep$tnum.d: Running rep_test again replicated."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
process_msgs $envlist
puts "\tRep$tnum.e: Check we re-requested and had a backlog."
@@ -117,26 +138,31 @@ proc rep032_sub { method niter tnum logset recargs largs } {
error_check_bad request $request 0
puts "\tRep$tnum.f: Verify logs and databases"
+ #
+ # If doing bulk testing, turn it off now so that it forces us
+ # to flush anything currently in the bulk buffer. We need to
+ # do this because rep_test might have aborted a transaction on
+ # its last iteration and those log records would still be in
+ # the bulk buffer causing the log comparison to fail.
+ #
+ if { $opts == "bulk" } {
+ puts "\tRep$tnum.f.1: Turn off bulk transfers."
+ error_check_good bulk [$masterenv rep_config {bulk off}] 0
+ process_msgs $envlist 0 NONE err
+ }
+
# Check that master and client logs and dbs are identical.
- # Logs first ...
- set stat [catch {eval exec $util_path/db_printlog \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- # ... now the databases.
- set dbname "test.db"
- set db1 [eval {berkdb_open -env $masterenv} $largs {-rdonly $dbname}]
- set db2 [eval {berkdb_open -env $clientenv} $largs {-rdonly $dbname}]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ set bulkxfer [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ if { $opts == "bulk" } {
+ error_check_bad bulkxferon $bulkxfer 0
+ } else {
+ error_check_good bulkxferoff $bulkxfer 0
+ }
+
+ check_log_location $masterenv
+ check_log_location $clientenv
error_check_good masterenv_close [$masterenv close] 0
error_check_good clientenv_close [$clientenv close] 0
diff --git a/db/test/rep033.tcl b/db/test/rep033.tcl
index 3a7f049da..be9bf90ca 100644
--- a/db/test/rep033.tcl
+++ b/db/test/rep033.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep033.tcl,v 1.5 2004/10/04 18:15:14 sue Exp $
+# $Id: rep033.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep033
# TEST Test of internal initialization with rename and remove of dbs.
@@ -15,16 +15,26 @@
#
proc rep033 { method { niter 200 } { tnum "033" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set omethod [convert_method $method]
# Run the body of the test with and without recovery,
# and with and without cleaning.
set envargs ""
- set recopts { "" " -recover " }
set cleanopts { noclean clean }
set when { before after }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach c $cleanopts {
foreach w $when {
puts "Rep$tnum ($method $envargs $c $r $w $args):\
@@ -117,8 +127,8 @@ proc rep033_sub { method niter tnum envargs recargs clean when largs } {
puts "\tRep$tnum.c: Create new databases. Populate with rep_test."
set dba [eval {berkdb_open} $oflags $largs a.db]
set dbb [eval {berkdb_open} $oflags $largs b.db]
- eval rep_test $method $masterenv $dba $niter 0 0 0 $largs
- eval rep_test $method $masterenv $dbb $niter 0 0 0 $largs
+ eval rep_test $method $masterenv $dba $niter 0 0 0 0 $largs
+ eval rep_test $method $masterenv $dbb $niter 0 0 0 0 $largs
error_check_good dba_close [$dba close] 0
error_check_good dbb_close [$dbb close] 0
@@ -157,29 +167,24 @@ proc rep033_sub { method niter tnum envargs recargs clean when largs } {
# logs and that will trigger it.
#
set entries 10
- eval rep_test $method $masterenv NULL $entries $niter 0 0 $largs
+ eval rep_test $method $masterenv NULL $entries $niter 0 0 0 $largs
process_msgs $envlist 0 NONE err
}
puts "\tRep$tnum.f: Verify logs and databases"
- # Check that master and client logs and dbs are identical.
- # Logs first ...
- set stat [catch {eval exec $util_path/db_printlog \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- # ... now the databases. X, Y, and C should exist.
+ #
+ # By sending in a NULL for dbname, we only compare logs.
+ #
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1 1 1 NULL
+ #
+ # ... now the databases, manually. X, Y, and C should exist.
+ #
set dbnames "x.db w.db c.db"
foreach db $dbnames {
set db1 [eval {berkdb_open -env $masterenv} $largs {-rdonly $db}]
set db2 [eval {berkdb_open -env $clientenv} $largs {-rdonly $db}]
- error_check_good comparedbs [db_compare \
+ error_check_good compare:$db [db_compare \
$db1 $db2 $masterdir/$db $clientdir/$db] 0
error_check_good db1_close [$db1 close] 0
error_check_good db2_close [$db2 close] 0
diff --git a/db/test/rep034.tcl b/db/test/rep034.tcl
index 853bc75e7..06aa7c07e 100644
--- a/db/test/rep034.tcl
+++ b/db/test/rep034.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep034.tcl,v 1.3 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep034.tcl,v 12.13 2006/09/08 20:32:18 bostic Exp $
#
# TEST rep034
# TEST Test of client startup synchronization.
@@ -13,16 +13,33 @@
# TEST Close one client and change master to other client.
# TEST Reopen closed client - enter startup.
# TEST Run rep_test and we should see live messages and startup complete.
+# TEST Run the test with/without client-to-client synchronization.
#
proc rep034 { method { niter 2 } { tnum "034" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set logsets [create_logsets 3]
# Run the body of the test with and without recovery.
- set recopts { "" "-recover" }
- set startup { "stat" "ret" }
- foreach r $recopts {
+ #
+ # Test a couple sets of options. Getting 'startup' from the stat
+ # or return value is unrelated to servicing requests from anywhere
+ # or from the master. List them together to make the test shorter.
+ # We don't need to test every combination.
+ #
+ set opts { {stat anywhere} {ret from_master} }
+ foreach r $test_recopts {
foreach l $logsets {
set logindex [lsearch -exact $l "in-memory"]
if { $r == "-recover" && $logindex != -1 } {
@@ -30,7 +47,7 @@ proc rep034 { method { niter 2 } { tnum "034" } args } {
for in-memory logs with -recover."
continue
}
- foreach s $startup {
+ foreach s $opts {
puts "Rep$tnum ($method $r $s $args):\
Test of startup synchronization detection."
puts "Rep$tnum: Master logs are [lindex $l 0]"
@@ -42,7 +59,8 @@ proc rep034 { method { niter 2 } { tnum "034" } args } {
}
}
-proc rep034_sub { method niter tnum logset recargs stup largs } {
+proc rep034_sub { method niter tnum logset recargs opts largs } {
+ global anywhere
global testdir
global util_path
global startup_done
@@ -72,12 +90,22 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
set c_txnargs [adjust_txnargs $c_logtype]
set c2_txnargs [adjust_txnargs $c2_logtype]
+ set stup [lindex $opts 0]
+ set anyopt [lindex $opts 1]
+ if { $anyopt == "anywhere" } {
+ set anywhere 1
+ } else {
+ set anywhere 0
+ }
+
# Open a master.
repladd 1
set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
+ -event rep_startup_event \
-home $masterdir -rep_transport \[list 1 replsend\]"
# set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
# -verbose {rep on} -errpfx MASTER \
+# -event rep_startup_event \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
error_check_good master_env [is_valid_env $masterenv] TRUE
@@ -85,8 +113,10 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
# Open a client
repladd 2
set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
+ -event rep_startup_event \
-home $clientdir -rep_transport \[list 2 replsend\]"
# set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
+# -event rep_startup_event \
# -verbose {rep on} -errpfx CLIENT \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
@@ -95,8 +125,10 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
# Open a client
repladd 3
set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs $c2_logargs \
+ -event rep_startup_event \
-home $clientdir2 -rep_transport \[list 3 replsend\]"
# set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs $c2_logargs \
+# -event rep_startup_event \
# -verbose {rep on} -errpfx CLIENT2 \
# -home $clientdir2 -rep_transport \[list 3 replsend\]"
set client2env [eval $cl2_envcmd $recargs -rep_client]
@@ -108,7 +140,7 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
# Run rep_test in the master (and update client).
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
process_msgs $envlist
puts "\tRep$tnum.b: Close client and run with new master."
@@ -126,7 +158,7 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
# Run rep_test in the master (don't update client).
# Run with dropping all client messages via replclear.
- eval rep_test $method $newmaster NULL $niter 0 0 0 $largs
+ eval rep_test $method $newmaster NULL $niter 0 0 0 0 $largs
process_msgs $envlist
replclear 2
@@ -134,6 +166,17 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
set startup_done 0
set clientenv [eval $cl_envcmd $recargs -rep_client]
error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ #
+ # Record the number of rerequests now because they can
+ # happen during initial processing or later.
+ #
+ if { $anyopt == "anywhere" } {
+ set clrereq1 [stat_field $clientenv rep_stat \
+ "Client rerequests"]
+ set nclrereq1 [stat_field $newclient rep_stat \
+ "Client rerequests"]
+ }
set envlist "{$newclient 1} {$clientenv 2} {$newmaster 3}"
process_msgs $envlist
@@ -142,20 +185,63 @@ proc rep034_sub { method niter tnum logset recargs stup largs } {
error_check_good start_incomplete $start 0
puts "\tRep$tnum.e: Generate live message"
- eval rep_test $method $newmaster NULL $niter 0 0 0 $largs
+ eval rep_test $method $newmaster NULL $niter 0 0 0 0 $largs
process_msgs $envlist
+ #
+ # If we're running with 'anywhere' request servicing, then we
+ # need to run several more iterations. When the new master took over
+ # the old master requested from the down client and its request
+ # got erased via the replclear. We need to generate enough
+ # new message now that the 2nd client is online again for the
+ # newclient to make its request again.
+ #
+ if { $anyopt == "anywhere" } {
+ puts "\tRep$tnum.e.1: Generate messages for rerequest"
+ set niter 50
+ eval rep_test $method $newmaster NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+ set clrereq2 [stat_field $clientenv rep_stat \
+ "Client rerequests"]
+ set nclrereq2 [stat_field $newclient rep_stat \
+ "Client rerequests"]
+ #
+ # Verify that we had a rerequest. The before/after
+ # values should not be the same.
+ #
+ error_check_bad clrereq $clrereq1 $clrereq2
+ error_check_bad nclrereq $nclrereq1 $nclrereq2
+ puts "\tRep$tnum.e.2: Generate live messages again"
+ set niter 5
+ eval rep_test $method $newmaster NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+ }
+
if { $stup == "stat" } {
puts "\tRep$tnum.f: Verify client completed startup via stat"
set start [stat_field $clientenv rep_stat "Startup complete"]
error_check_good start_complete $start 1
} else {
- puts "\tRep$tnum.f: Verify client completed startup via return"
+ puts "\tRep$tnum.f: Verify client completed startup via event"
error_check_good start_complete $startup_done 1
}
+ puts "\tRep$tnum.g: Check message handling of client."
+ #
+ # The newclient would have made requests of clientenv while it
+ # was down and then after it was up. Therefore, clientenv's
+ # stats should show that it received the request.
+ #
+ set req3 [stat_field $clientenv rep_stat "Client service requests"]
+ if { $anyopt == "anywhere" } {
+ error_check_bad req.bad $req3 0
+ } else {
+ error_check_good req $req3 0
+ }
+
error_check_good masterenv_close [$newclient close] 0
error_check_good clientenv_close [$clientenv close] 0
error_check_good client2env_close [$newmaster close] 0
replclose $testdir/MSGQUEUEDIR
+ set anywhere 0
}
diff --git a/db/test/rep035.tcl b/db/test/rep035.tcl
index 405b8f157..109060c5e 100644
--- a/db/test/rep035.tcl
+++ b/db/test/rep035.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep035.tcl,v 11.3 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep035.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep035
# TEST Test sync-up recovery in replication.
@@ -19,8 +19,17 @@
# TEST New master performs 1 operation, replicates and downgrades.
proc rep035 { method { niter 100 } { tnum "035" } args } {
- global passwd
- global has_crypto
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
set saved_args $args
set logsets [create_logsets 3]
@@ -36,10 +45,9 @@ proc rep035 { method { niter 100 } { tnum "035" } args } {
}
}
-proc rep035_sub { method niter tnum envargs logset args } {
+proc rep035_sub { method niter tnum envargs logset largs } {
source ./include.tcl
global testdir
- global encrypt
env_cleanup $testdir
@@ -68,11 +76,11 @@ proc rep035_sub { method niter tnum envargs logset args } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env_noerr -create \
-log_max 1000000 $envargs -home $masterdir $m_logargs \
-errpfx MASTER -errfile /dev/stderr $m_txnargs -rep_master \
-rep_transport \[list 1 replsend\]"
-# set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(M) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs -home $masterdir $m_logargs \
# -errpfx MASTER -errfile /dev/stderr $m_txnargs -rep_master \
# -verbose {rep on} \
@@ -82,11 +90,11 @@ proc rep035_sub { method niter tnum envargs logset args } {
# Open two clients
repladd 2
- set env_cmd(C1) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(C1) "berkdb_env_noerr -create \
-log_max 1000000 $envargs -home $clientdir1 $c_logargs \
-errfile /dev/stderr -errpfx CLIENT $c_txnargs -rep_client \
-rep_transport \[list 2 replsend\]"
-# set env_cmd(C1) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(C1) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs -home $clientdir1 $c_logargs \
# -errfile /dev/stderr -errpfx CLIENT $c_txnargs -rep_client \
# -verbose {rep on} \
@@ -96,11 +104,11 @@ proc rep035_sub { method niter tnum envargs logset args } {
# Second client needs lock_detect flag.
repladd 3
- set env_cmd(C2) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(C2) "berkdb_env_noerr -create \
-log_max 1000000 $envargs -home $clientdir2 $c2_logargs \
-errpfx CLIENT2 -errfile /dev/stderr $c2_txnargs -rep_client \
-lock_detect default -rep_transport \[list 3 replsend\]"
-# set env_cmd(C2) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(C2) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs -home $clientdir2 $c2_logargs \
# -errpfx CLIENT2 -errfile /dev/stderr $c2_txnargs -rep_client \
# -verbose {rep on} \
@@ -175,13 +183,13 @@ proc rep035_sub { method niter tnum envargs logset args } {
for { set i 0 } { $i < $niter } { incr i } {
# Do a few ops
- eval rep_test $method $masterenv $masterdb 2 $i $i
+ eval rep_test $method $masterenv $masterdb 2 $i $i 0 0 $largs
set envlist "{$masterenv $mid} {$clientenv $cid} {$env3 3}"
process_msgs $envlist
# Do one op on master and process messages and drop
# to clientenv to force sync-up recovery next time.
- eval rep_test $method $masterenv $masterdb 1 $i $i
+ eval rep_test $method $masterenv $masterdb 1 $i $i 0 0 $largs
set envlist "{$masterenv $mid} {$env3 3}"
replclear $cid
process_msgs $envlist
diff --git a/db/test/rep035script.tcl b/db/test/rep035script.tcl
index 1959d9948..21e9af6f2 100644
--- a/db/test/rep035script.tcl
+++ b/db/test/rep035script.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep035script.tcl,v 11.2 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep035script.tcl,v 12.4 2006/08/24 14:46:37 bostic Exp $
#
# Rep035 script - continually calls lock_detect, txn_checkpoint,
# or mpool_trickle.
@@ -28,6 +28,7 @@ if { $argc != 2 } {
set clientdir [ lindex $argv 0 ]
set apicall [ lindex $argv 1 ]
+set is_repchild 1
# Join the client env.
set envid 3
set cl2_cmd "berkdb_env_noerr -home $clientdir \
diff --git a/db/test/rep036.tcl b/db/test/rep036.tcl
index 2fd1fa00a..05d5fefe5 100644
--- a/db/test/rep036.tcl
+++ b/db/test/rep036.tcl
@@ -1,15 +1,27 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep036.tcl,v 11.2 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep036.tcl,v 12.9 2006/09/15 14:48:14 carol Exp $
#
# TEST rep036
# TEST Multiple master processes writing to the database.
# TEST One process handles all message processing.
proc rep036 { method { niter 200 } { tnum "036" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for btree only.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
if { [is_btree $method] == 0 } {
puts "Rep$tnum: Skipping for method $method."
return
@@ -53,11 +65,11 @@ proc rep036_sub { method niter tnum envargs logset args } {
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(M) "berkdb_env_noerr -create \
-log_max 1000000 $envargs -home $masterdir $m_logargs \
-errpfx MASTER -errfile /dev/stderr -txn -rep_master \
-rep_transport \[list 1 replsend\]"
-# set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(M) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs -home $masterdir $m_logargs \
# -errpfx MASTER -errfile /dev/stderr -txn -rep_master \
# -verbose {rep on} \
@@ -67,11 +79,11 @@ proc rep036_sub { method niter tnum envargs logset args } {
# Open a client
repladd 2
- set env_cmd(C) "berkdb_env_noerr -create -lock_max 2500 \
+ set env_cmd(C) "berkdb_env_noerr -create \
-log_max 1000000 $envargs -home $clientdir $c_logargs \
-errfile /dev/stderr -errpfx CLIENT -txn -rep_client \
-rep_transport \[list 2 replsend\]"
-# set env_cmd(C) "berkdb_env_noerr -create -lock_max 2500 \
+# set env_cmd(C) "berkdb_env_noerr -create \
# -log_max 1000000 $envargs -home $clientdir $c_logargs \
# -errfile /dev/stderr -errpfx CLIENT -txn -rep_client \
# -verbose {rep on} \
@@ -83,6 +95,11 @@ proc rep036_sub { method niter tnum envargs logset args } {
set envlist "{$env1 1} {$env2 2}"
process_msgs $envlist
+# # Start up deadlock detector.
+# # Commented out, as are two more sections below - see [#15049].
+# set dpid [eval {exec $util_path/db_deadlock} \
+# -a o -v -t 2.0 -h $masterdir >& $testdir/dd.parent.out &]
+
# Set up master database.
set testfile "rep$tnum.db"
set omethod [convert_method $method]
@@ -123,6 +140,17 @@ proc rep036_sub { method niter tnum envargs logset args } {
set txn "-txn $t"
set ret [eval \
{$mdb put} $txn {$key [chop_data $method $string]}]
+
+# # Writing to this database can deadlock. If we do, let the
+# # deadlock detector break the lock, wait a second, and try again.
+# while { [catch {eval {$mdb put}\
+# $txn {$key [chop_data $method $string]}} ret] } {
+# # Make sure the failure is a deadlock.
+# error_check_good deadlock [is_substr $ret DB_LOCK_DEADLOCK] 1
+# tclsleep 1
+# }
+
+
error_check_good mdb_put $ret 0
error_check_good txn_commit [$t commit] 0
@@ -144,6 +172,9 @@ proc rep036_sub { method niter tnum envargs logset args } {
watch_procs $pidlist 1
process_msgs $envlist
+# # We are done with the deadlock detector.
+# error_check_good kill_deadlock_detector [tclkill $dpid] ""
+
puts "\tRep$tnum.c: Verify logs and databases"
# Check that master and client logs and dbs are identical.
# Logs first ...
diff --git a/db/test/rep036script.tcl b/db/test/rep036script.tcl
index 85d612677..a06937d29 100644
--- a/db/test/rep036script.tcl
+++ b/db/test/rep036script.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep036script.tcl,v 11.2 2004/09/22 18:01:06 bostic Exp $
+# $Id: rep036script.tcl,v 12.5 2006/09/15 14:48:14 carol Exp $
#
# Rep036 script - create additional writers in master env.
#
@@ -30,14 +30,16 @@ set writerid [ lindex $argv 1 ]
set nentries [ lindex $argv 2 ]
set method [ lindex $argv 3 ]
-# Join the queue env. We assume the rep test convention of
-# placing the messages in $testdir/MSGQUEUEDIR.
-set queueenv [eval berkdb_env -home $testdir/MSGQUEUEDIR]
-error_check_good script_qenv_open [is_valid_env $queueenv] TRUE
+set is_repchild 1
# We need to set up our own machid.
repladd 1
repladd 2
+# Start up deadlock detector.
+# Commented out - see #15049.
+#set dpid [eval {exec $util_path/db_deadlock} \
+# -a o -v -t 2.0 -h $masterdir >& $testdir/dd.writer.$writerid.out &]
+
# Join the master env.
set envid 1
set env_cmd "berkdb_env_noerr -home $masterdir \
@@ -78,6 +80,17 @@ while { $count < $nentries } {
set t [$masterenv txn]
error_check_good txn [is_valid_txn $t $masterenv] TRUE
set txn "-txn $t"
+
+# If using deadlock detection, uncomment this and comment the
+# following put statement.
+# # Writing to this database can deadlock. If we do, let the
+# # deadlock detector break the lock, wait a second, and try again.
+# while { [catch {eval {$mdb put}\
+# $txn {$key [chop_data $method $str]}} ret] } {
+# error_check_good deadlock [is_substr $ret DB_LOCK_DEADLOCK] 1
+# tclsleep 1
+# }
+
set ret [eval \
{$mdb put} $txn {$key [chop_data $method $str]}]
error_check_good put $ret 0
@@ -94,6 +107,8 @@ while { $count < $nentries } {
close $did
# Clean up.
+# Uncomment following line if using deadlock detector.
+#error_check_good kill_deadlock_detector [tclkill $dpid] ""
error_check_good mdb_close [$mdb close] 0
error_check_good masterenv_close [$masterenv close] 0
replclose $testdir/MSGQUEUEDIR
diff --git a/db/test/rep037.tcl b/db/test/rep037.tcl
index 6d3ab4649..89ef004c6 100644
--- a/db/test/rep037.tcl
+++ b/db/test/rep037.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rep037.tcl,v 11.2 2004/10/14 14:55:55 sue Exp $
+# $Id: rep037.tcl,v 12.10 2006/08/24 14:46:37 bostic Exp $
#
# TEST rep037
# TEST Test of internal initialization and page throttling.
@@ -16,6 +16,18 @@
# TEST Verify page throttling occurred.
#
proc rep037 { method { niter 1500 } { tnum "037" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
set args [convert_args $method $args]
set saved_args $args
@@ -26,21 +38,32 @@ proc rep037 { method { niter 1500 } { tnum "037" } args } {
return
}
+ set logsets [create_logsets 2]
+
# Run the body of the test with and without recovery,
# and with and without cleaning.
- set recopts { "" " -recover " }
set cleanopts { clean noclean }
- foreach r $recopts {
+ foreach r $test_recopts {
foreach c $cleanopts {
- set args $saved_args
- puts "Rep$tnum ($method $c $r $args):\
- Test of internal initialization - page throttling."
- rep037_sub $method $niter $tnum $r $c $args
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ set args $saved_args
+ puts "Rep$tnum ($method $c $r $args):\
+ Test of internal init with page throttling."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep037_sub $method $niter $tnum $l $r $c $args
+ }
}
}
}
-proc rep037_sub { method niter tnum recargs clean largs } {
+proc rep037_sub { method niter tnum logset recargs clean largs } {
global testdir
global util_path
@@ -61,14 +84,25 @@ proc rep037_sub { method niter tnum recargs clean largs } {
append largs " -pagesize $pagesize "
set log_buf [expr $pagesize * 2]
set log_max [expr $log_buf * 4]
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
# Open a master.
repladd 1
- set ma_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max \
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
-home $masterdir -rep_transport \[list 1 replsend\]"
-# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max \
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
# -verbose {rep on} -errpfx MASTER \
# -home $masterdir -rep_transport \[list 1 replsend\]"
set masterenv [eval $ma_envcmd $recargs -rep_master]
@@ -77,11 +111,11 @@ proc rep037_sub { method niter tnum recargs clean largs } {
# Open a client
repladd 2
- set cl_envcmd "berkdb_env_noerr -create -txn nosync \
- -log_buffer $log_buf -log_max $log_max \
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
-home $clientdir -rep_transport \[list 2 replsend\]"
-# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
-# -log_buffer $log_buf -log_max $log_max \
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
# -verbose {rep on} -errpfx CLIENT \
# -home $clientdir -rep_transport \[list 2 replsend\]"
set clientenv [eval $cl_envcmd $recargs -rep_client]
@@ -93,23 +127,39 @@ proc rep037_sub { method niter tnum recargs clean largs } {
# Run rep_test in the master (and update client).
puts "\tRep$tnum.a: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
process_msgs $envlist
puts "\tRep$tnum.b: Close client."
+ if { $c_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -l -h $clientdir]
+ }
+ set last_client_log [get_logfile $clientenv last]
error_check_good client_close [$clientenv close] 0
- # Run rep_test in the master (don't update client).
- puts "\tRep$tnum.c: Running rep_test in replicated env."
- eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
- replclear 2
-
- puts "\tRep$tnum.d: Run db_archive on master."
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_bad log.1.present [lsearch -exact $res log.0000000001] -1
- set res [eval exec $util_path/db_archive -d -h $masterdir]
- set res [eval exec $util_path/db_archive -l -h $masterdir]
- error_check_good log.1.gone [lsearch -exact $res log.0000000001] -1
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory"} {
+ set res \
+ [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ # Make sure that we have a gap between the last client
+ # log and the first master log.
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
puts "\tRep$tnum.e: Reopen client ($clean)."
if { $clean == "clean" } {
@@ -128,33 +178,14 @@ proc rep037_sub { method niter tnum recargs clean largs } {
# logs and that will trigger it.
#
set entries 10
- eval rep_test $method $masterenv NULL $entries $niter 0 0 $largs
+ eval rep_test $method \
+ $masterenv NULL $entries $niter $start $start 0 $largs
process_msgs $envlist 0 NONE err
}
puts "\tRep$tnum.f: Verify logs and databases"
- # Check that master and client logs and dbs are identical.
- # Logs first ...
- set stat [catch {eval exec $util_path/db_printlog \
- -h $masterdir > $masterdir/prlog} result]
- error_check_good stat_mprlog $stat 0
- set stat [catch {eval exec $util_path/db_printlog \
- -h $clientdir > $clientdir/prlog} result]
- error_check_good stat_cprlog $stat 0
- error_check_good log_cmp \
- [filecmp $masterdir/prlog $clientdir/prlog] 0
-
- # ... now the databases.
- set dbname "test.db"
- set db1 [eval {berkdb_open -env $masterenv} $largs {-rdonly $dbname}]
- set db2 [eval {berkdb_open -env $clientenv} $largs {-rdonly $dbname}]
-
- error_check_good comparedbs [db_compare \
- $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good db2_close [$db2 close] 0
-
- #
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
puts "\tRep$tnum.g: Verify throttling."
if { $niter > 1000 } {
set nthrottles \
@@ -162,6 +193,11 @@ proc rep037_sub { method niter tnum recargs clean largs } {
error_check_bad nthrottles $nthrottles -1
error_check_bad nthrottles $nthrottles 0
}
+
+ # Make sure log files are on-disk or not as expected.
+ check_log_location $masterenv
+ check_log_location $clientenv
+
error_check_good masterenv_close [$masterenv close] 0
error_check_good clientenv_close [$clientenv close] 0
replclose $testdir/MSGQUEUEDIR
diff --git a/db/test/rep038.tcl b/db/test/rep038.tcl
new file mode 100644
index 000000000..3b8911962
--- /dev/null
+++ b/db/test/rep038.tcl
@@ -0,0 +1,210 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep038.tcl,v 12.12 2006/08/24 14:46:37 bostic Exp $
+#
+# TEST rep038
+# TEST Test of internal initialization and ongoing master updates.
+# TEST
+# TEST One master, one client.
+# TEST Generate several log files.
+# TEST Remove old master log files.
+# TEST Delete client files and restart client.
+# TEST Put more records on master while initialization is in progress.
+#
+proc rep038 { method { niter 200 } { tnum "038" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ set cleanopts { clean noclean }
+ foreach r $test_recopts {
+ foreach c $cleanopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $c $r $args):\
+ Test of internal init with new records."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep038_sub $method $niter $tnum $l $r $c $args
+ }
+ }
+ }
+}
+
+proc rep038_sub { method niter tnum logset recargs clean largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run rep_test in the master (and update client).
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Close client."
+ if { $c_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -l -h $clientdir]
+ }
+ set last_client_log [get_logfile $clientenv last]
+ error_check_good client_close [$clientenv close] 0
+
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test\
+ $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype == "on-disk" } {
+ set res \
+ [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ # Make sure we have a gap between the last client log
+ # and the first master log.
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+
+ }
+
+ puts "\tRep$tnum.e: Reopen client ($clean)."
+ if { $clean == "clean" } {
+ env_cleanup $clientdir
+ }
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ #
+ # We want to simulate a master continually getting new
+ # records while an update is going on. Simulate that
+ # for several iterations and then let the messages finish
+ # all their processing.
+ #
+ set loop 10
+ set i 0
+ set entries 10
+ set start $niter
+ while { $i < $loop } {
+ set nproced 0
+ set start [expr $start + $entries]
+ eval rep_test \
+ $method $masterenv NULL $entries $start $start 0 0 $largs
+ incr start $entries
+ incr nproced [proc_msgs_once $envlist NONE err]
+ error_check_bad nproced $nproced 0
+ incr i
+ }
+ process_msgs $envlist
+
+ puts "\tRep$tnum.f: Verify logs and databases"
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ # Add records to the master and update client.
+ puts "\tRep$tnum.g: Add more records and check again."
+ eval rep_test $method $masterenv NULL $entries $start $start 0 0 $largs
+ incr start $entries
+ process_msgs $envlist 0 NONE err
+
+ # Check again that master and client logs and dbs are identical.
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ # Make sure log file are on-disk or not as expected.
+ check_log_location $masterenv
+ check_log_location $clientenv
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep039.tcl b/db/test/rep039.tcl
new file mode 100644
index 000000000..ad8d6c6fd
--- /dev/null
+++ b/db/test/rep039.tcl
@@ -0,0 +1,263 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep039.tcl,v 1.15 2006/08/24 14:46:37 bostic Exp $
+#
+# TEST rep039
+# TEST Test of internal initialization and master changes.
+# TEST
+# TEST One master, two clients.
+# TEST Generate several log files. Remove old master log files.
+# TEST Delete client files and restart client.
+# TEST While initialization is happening, change masters.
+# TEST Vary the number of times we process messages to make sure
+# TEST we change masters at varying stages of the first internal
+# TEST initialization.
+# TEST
+# TEST Run for btree only because of the number of permutations.
+# TEST
+proc rep039 { method { niter 200 } { tnum "039" } args } {
+
+ source ./include.tcl
+
+ # Run for btree and queue methods only.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_btree $method] == 1 || \
+ [is_queue $method] == 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
+ if { [is_btree $method] == 0 && [is_queue $method] == 0 } {
+ puts "Rep$tnum: skipping for non-btree, non-queue method."
+ return
+ }
+
+ # Skip for mixed-mode logging -- this test has a very large
+ # set of iterations already.
+ global mixed_mode_logging
+ if { $mixed_mode_logging > 0 } {
+ puts "Rep$tnum: Skipping for mixed mode logging."
+ return
+ }
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set args [convert_args $method $args]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning.
+ set cleanopts { noclean clean }
+ set archopts { archive noarchive }
+ set nummsgs 5
+ foreach r $test_recopts {
+ foreach c $cleanopts {
+ foreach a $archopts {
+ for { set i 1 } { $i < $nummsgs } { incr i } {
+ puts "Rep$tnum ($method $r $c $a $args):\
+ Test of internal init. $i message iters."
+ rep039_sub $method $niter $tnum \
+ $r $c $a $i $args
+ }
+ }
+ }
+ }
+}
+
+proc rep039_sub { method niter tnum recargs clean archive pmsgs largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR2
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create -txn nosync \
+ -log_buffer $log_buf -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
+# -log_buffer $log_buf -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create -txn nosync \
+ -log_buffer $log_buf -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
+# -log_buffer $log_buf -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Open 2nd client
+ repladd 3
+ set cl2_envcmd "berkdb_env_noerr -create -txn nosync \
+ -log_buffer $log_buf -log_max $log_max \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env_noerr -create -txn nosync \
+# -log_buffer $log_buf -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT2 \
+# -home $clientdir2 -rep_transport \[list 3 replsend\]"
+ set clientenv2 [eval $cl2_envcmd $recargs -rep_client]
+ error_check_good client2_env [is_valid_env $clientenv2] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2} {$clientenv2 3}"
+ process_msgs $envlist
+
+ # Run rep_test in the master (and update client).
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Close client."
+ error_check_good client_close [$clientenv close] 0
+
+ set res [eval exec $util_path/db_archive -l -h $clientdir]
+ set last_client_log [lindex [lsort $res] end]
+
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ #
+ # Clear messages for first client. We want that site
+ # to get far behind.
+ #
+ replclear 2
+ puts "\tRep$tnum.d: Run db_archive on master."
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ if { [lsearch -exact $res $last_client_log] == -1 } {
+ set stop 1
+ }
+ }
+
+ set envlist "{$masterenv 1} {$clientenv2 3}"
+ process_msgs $envlist
+
+ if { $archive == "archive" } {
+ puts "\tRep$tnum.d: Run db_archive on client2."
+ set res [eval exec $util_path/db_archive -l -h $clientdir2]
+ error_check_bad \
+ log.1.present [lsearch -exact $res log.0000000001] -1
+ set res [eval exec $util_path/db_archive -d -h $clientdir2]
+ set res [eval exec $util_path/db_archive -l -h $clientdir2]
+ error_check_good \
+ log.1.gone [lsearch -exact $res log.0000000001] -1
+ } else {
+ puts "\tRep$tnum.d: Skipping db_archive on client2."
+ }
+
+ puts "\tRep$tnum.e: Reopen client ($clean)."
+ if { $clean == "clean" } {
+ env_cleanup $clientdir
+ }
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2} {$clientenv2 3}"
+ proc_msgs_once $envlist
+
+ #
+ # We want to simulate a master continually getting new
+ # records while an update is going on.
+ #
+ set entries 10
+ eval rep_test $method $masterenv NULL $entries $niter 0 0 0 $largs
+ #
+ # We call proc_msgs_once N times to get us into page recovery:
+ # 1. Send master messages and client finds master.
+ # 2. Master replies and client does verify.
+ # 3. Master gives verify_fail and client does update_req.
+ # 4. Master send update info and client does page_req.
+ #
+ # We vary the number of times we call proc_msgs_once (via pmsgs)
+ # so that we test switching master at each point in the
+ # internal initialization processing.
+ #
+ set nproced 0
+ puts "\tRep$tnum.f: Get partially through initialization ($pmsgs iters)"
+ for { set i 1 } { $i < $pmsgs } { incr i } {
+ incr nproced [proc_msgs_once $envlist]
+ }
+ replclear 1
+ replclear 3
+ puts "\tRep$tnum.g: Downgrade/upgrade master."
+ error_check_good downgrade [$masterenv rep_start -client] 0
+ error_check_good upgrade [$clientenv2 rep_start -master] 0
+ process_msgs $envlist
+ #
+ # Now simulate continual updates to the new master. Each
+ # time through we just process messages once before
+ # generating more updates.
+ #
+ set niter 10
+ for { set i 0 } { $i < $niter } { incr i } {
+ set nproced 0
+ set start [expr $i * $entries]
+ eval rep_test $method $clientenv2 NULL $entries $start \
+ $start 0 0 $largs
+ incr nproced [proc_msgs_once $envlist]
+ error_check_bad nproced $nproced 0
+ }
+ set start [expr $i * $entries]
+ process_msgs $envlist
+
+ puts "\tRep$tnum.h: Verify logs and databases"
+ rep_verify $clientdir2 $clientenv2 $masterdir $masterenv 1
+
+ # Process messages again in case we are running with debug_rop.
+ process_msgs $envlist
+ rep_verify $clientdir2 $clientenv2 $clientdir $clientenv 1
+
+ # Add records to the master and update client.
+ puts "\tRep$tnum.i: Add more records and check again."
+ set entries 10
+ eval rep_test $method $clientenv2 NULL $entries $start \
+ $start 0 0 $largs
+ process_msgs $envlist 0 NONE err
+
+ # Check again that everyone is identical.
+ rep_verify $clientdir2 $clientenv2 $masterdir $masterenv 1
+ process_msgs $envlist
+ rep_verify $clientdir2 $clientenv2 $clientdir $clientenv 1
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ error_check_good clientenv2_close [$clientenv2 close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep040.tcl b/db/test/rep040.tcl
new file mode 100644
index 000000000..ad1123681
--- /dev/null
+++ b/db/test/rep040.tcl
@@ -0,0 +1,205 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep040.tcl,v 12.11 2006/08/24 14:46:37 bostic Exp $
+#
+# TEST rep040
+# TEST Test of racing rep_start and transactions.
+# TEST
+# TEST One master, one client.
+# TEST Have master in the middle of a transaction.
+# TEST Call rep_start to make master a client.
+# TEST Commit the transaction.
+# TEST Call rep_start to make master the master again.
+#
+proc rep040 { method { niter 200 } { tnum "040" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $args):\
+ Test of rep_start racing txns."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep040_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep040_sub { method niter tnum logset recargs largs } {
+ source ./include.tcl
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ set omethod [convert_method $method]
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ set testfile "rep040.db"
+ set testfile1 "rep040A.db"
+ set db [eval {berkdb_open_noerr -env $masterenv -auto_commit -create \
+ -mode 0644} $largs $omethod $testfile]
+ error_check_good rep_db [is_valid_db $db] TRUE
+
+ set db1 [eval {berkdb_open_noerr -env $masterenv -auto_commit -create \
+ -mode 0644} $largs $omethod $testfile1]
+ error_check_good rep_db [is_valid_db $db1] TRUE
+
+ set key [expr $niter + 100]
+ set key2 [expr $niter + 200]
+ set data "data1"
+ set newdata "rep040test"
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run rep_test in the master (and update client).
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ eval rep_test $method $masterenv $db $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ # Get some data on a page
+ set t [$masterenv txn]
+ error_check_good txn [is_valid_txn $t $masterenv] TRUE
+ set ret [$db put -txn $t $key [chop_data $method $data]]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ process_msgs $envlist
+
+ #
+ # Start 2 txns. One that will commit early and one we'll hold
+ # open a while to test for the warning message.
+ #
+ # Now modify the data but don't commit it yet. This will
+ # update the same page and update the page LSN.
+ #
+ set t [$masterenv txn]
+ error_check_good txn [is_valid_txn $t $masterenv] TRUE
+ set t2 [$masterenv txn]
+ error_check_good txn [is_valid_txn $t2 $masterenv] TRUE
+ set ret [$db put -txn $t $key [chop_data $method $newdata]]
+ error_check_good put $ret 0
+ set ret [$db1 put -txn $t2 $key2 [chop_data $method $newdata]]
+ error_check_good put $ret 0
+ process_msgs $envlist
+
+ # Fork child process and then sleep for more than 1 minute so
+ # that the child process must block on the open transaction and
+ # it will print out the wait message.
+ #
+ set outfile "$testdir/rep040script.log"
+ puts "\tRep$tnum.b: Fork master child process and sleep 90 seconds"
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ rep040script.tcl $outfile \
+ $masterdir &]
+
+ tclsleep 10
+ process_msgs $envlist
+ error_check_good txn [$t commit] 0
+ tclsleep 80
+
+ error_check_good txn [$t2 commit] 0
+ puts "\tRep$tnum.c: Waiting for child ..."
+ process_msgs $envlist
+ watch_procs $pid 5
+
+ process_msgs $envlist
+
+ set t [$masterenv txn]
+ error_check_good txn [is_valid_txn $t $masterenv] TRUE
+ set ret [$db put -txn $t $key [chop_data $method $data]]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ error_check_good dbclose [$db close] 0
+ error_check_good dbclose [$db1 close] 0
+ process_msgs $envlist
+
+ check_log_location $masterenv
+ check_log_location $clientenv
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+
+ #
+ # Check we detected outstanding txn (t2)
+ #
+ puts "\tRep$tnum.d: Verify waiting and logs"
+ set ret [catch {open $outfile} ofid]
+ error_check_good open $ret 0
+ set contents [read $ofid]
+ error_check_good detect [is_substr $contents "Waiting for op_cnt"] 1
+ close $ofid
+
+ # Check that master and client logs and dbs are identical.
+ set stat [catch {eval exec $util_path/db_printlog \
+ -h $masterdir > $masterdir/prlog} result]
+ error_check_good stat_mprlog $stat 0
+ set stat [catch {eval exec $util_path/db_printlog \
+ -h $clientdir > $clientdir/prlog} result]
+ error_check_good stat_cprlog $stat 0
+ error_check_good log_cmp \
+ [filecmp $masterdir/prlog $clientdir/prlog] 0
+
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep040script.tcl b/db/test/rep040script.tcl
new file mode 100644
index 000000000..b743dcc5b
--- /dev/null
+++ b/db/test/rep040script.tcl
@@ -0,0 +1,69 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep040script.tcl,v 12.5 2006/08/24 14:46:38 bostic Exp $
+#
+# Rep040 script - transaction concurrency with rep_start
+#
+# Repscript exists to call rep_start. The main script will immediately
+# start a transaction, do an operation, then sleep a long time before
+# commiting the transaction. We should be blocked on the transaction
+# when we call rep_start. The main process should sleep long enough
+# that we get a diagnostic message.
+#
+# Usage: repscript masterdir clientdir
+# masterdir: master env directory
+# clientdir: client env directory
+#
+source ./include.tcl
+source $test_path/test.tcl
+source $test_path/testutils.tcl
+source $test_path/reputils.tcl
+
+set usage "repscript masterdir"
+
+# Verify usage
+if { $argc != 1 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set masterdir [ lindex $argv 0 ]
+
+set is_repchild 1
+
+# We need to set up our own machids.
+# Add 1 for master env id, and 2 for the clientenv id.
+#
+repladd 1
+repladd 2
+
+# Join the master env.
+set ma_cmd "berkdb_env_noerr -home $masterdir \
+ -errfile /dev/stderr -errpfx CHILD.MA \
+ -txn -rep_master -rep_transport \[list 1 replsend\]"
+# set ma_cmd "berkdb_env_noerr -home $masterdir \
+# -verbose {rep on} -errfile /dev/stderr -errpfx CHILD.MA \
+# -txn -rep_master -rep_transport \[list 1 replsend\]"
+set masterenv [eval $ma_cmd]
+error_check_good script_menv_open [is_valid_env $masterenv] TRUE
+
+puts "Master open"
+# Downgrade while transaction is open
+error_check_good downgrade [$masterenv rep_start -client] 0
+
+tclsleep 10
+# Upgrade again
+error_check_good upgrade [$masterenv rep_start -master] 0
+#
+# Create a btree database now.
+#
+rep_test btree $masterenv NULL 10 0 0 0
+
+# Close the envs
+puts "Closing Masterenv $masterenv"
+error_check_good script_master_close [$masterenv close] 0
+puts "\tRepscript completed successfully"
diff --git a/db/test/rep041.tcl b/db/test/rep041.tcl
new file mode 100644
index 000000000..0941a7f66
--- /dev/null
+++ b/db/test/rep041.tcl
@@ -0,0 +1,210 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep041.tcl,v 12.11 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep041
+# TEST Turn replication on and off at run-time.
+# TEST
+# TEST Start a master with replication OFF (noop transport function).
+# TEST Run rep_test to advance log files and archive.
+# TEST Start up client; change master to working transport function.
+# TEST Now replication is ON.
+# TEST Do more ops, make sure client is up to date.
+# TEST Close client, turn replication OFF on master, do more ops.
+# TEST Repeat from point A.
+#
+proc rep041 { method { niter 500 } { tnum "041" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set saved_args $args
+
+ set logsets [create_logsets 2]
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+
+ set envargs ""
+ set args $saved_args
+ puts "Rep$tnum ($method $envargs $r $args):\
+ Turn replication on and off."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep041_sub $method $niter $tnum $envargs \
+ $l $r $args
+ }
+ }
+}
+
+proc rep041_sub { method niter tnum envargs logset recargs largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ puts "\tRep$tnum.a: Open master with replication OFF."
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max $envargs \
+ -home $masterdir -rep"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max $envargs \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep"
+ set masterenv [eval $ma_envcmd $recargs]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Run rep_test in the master to advance log files.
+ puts "\tRep$tnum.b: Running rep_test to create some log files."
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+
+ # Reset transport function to replnoop, and specify that
+ # this env will be master.
+ error_check_good \
+ transport_noop [$masterenv rep_transport {1 replnoop}] 0
+ error_check_good rep_on [$masterenv rep_start -master] 0
+
+ # If master is on-dish, archive.
+ if { $m_logtype != "in-memory" } {
+ puts "\tRep$tnum.c: Run log_archive - some logs should be removed."
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_bad log.1.present [lsearch -exact $res log.0000000001] -1
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_good log.1.gone [lsearch -exact $res log.0000000001] -1
+ }
+
+ # Run rep_test some more - this simulates running without clients.
+ puts "\tRep$tnum.d: Running rep_test."
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+
+ # Open a client
+ puts "\tRep$tnum.e: Open client."
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max $envargs \
+ -home $clientdir \
+ -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max $envargs \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir \
+# -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Set up envlist for processing messages later.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+
+ # Turn replication on and off more than once.
+ set repeats 2
+ for { set i 0 } { $i < $repeats } { incr i } {
+
+ puts "\tRep$tnum.f.$i: Turn replication ON."
+ # Reset master transport function to replsend.
+ error_check_good transport_on \
+ [$masterenv rep_transport {1 replsend}] 0
+
+ # Have the master announce itself so messages will pass.
+ error_check_good rep_on [$masterenv rep_start -master] 0
+
+ # Create some new messages, and process them.
+ set nentries 50
+ eval rep_test \
+ $method $masterenv NULL $nentries $start $start 0 0 $largs
+ incr start $nentries
+ process_msgs $envlist
+
+ puts "\tRep$tnum.g.$i: Verify that client is up to date."
+ # Check that master and client contents match, to verify
+ # that client is up to date.
+ set dbname "test.db"
+ rep_verify $masterdir $masterenv $clientdir $clientenv 0 1 0
+
+ # Process messages again -- the rep_verify created some.
+ process_msgs $envlist
+
+ puts "\tRep$tnum.h.$i: Turn replication OFF on master."
+ error_check_good \
+ transport_off [$masterenv rep_transport {1 replnoop}] 0
+
+ puts "\tRep$tnum.i.$i: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+
+ puts "\tRep$tnum.j.$i:\
+ Process messages; none should be available."
+ set nproced [proc_msgs_once $envlist NONE err]
+ error_check_good no_messages $nproced 0
+
+ # Client and master should NOT match.
+ puts "\tRep$tnum.k.$i: Master and client should NOT match."
+ rep_verify $masterdir $masterenv $clientdir $clientenv 0 0 0
+
+ }
+ error_check_good clientenv_close [$clientenv close] 0
+ error_check_good masterenv_close [$masterenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep042.tcl b/db/test/rep042.tcl
new file mode 100644
index 000000000..2fa95fe78
--- /dev/null
+++ b/db/test/rep042.tcl
@@ -0,0 +1,194 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep042.tcl,v 12.13 2006/09/08 20:32:18 bostic Exp $
+#
+# TEST rep042
+# TEST Concurrency with updates.
+# TEST
+# TEST Verify racing role changes and updates don't result in
+# TEST pages with LSN 0,1. Set up an environment that is master.
+# TEST Spawn child process that does a delete, but using the
+# TEST $env check so that it sleeps in the middle of the call.
+# TEST Master downgrades and then sleeps as a client so that
+# TEST child will run. Verify child does not succeed (should
+# TEST get read-only error) due to role change in the middle of
+# TEST its call.
+proc rep042 { method { niter 10 } { tnum "042" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+
+ puts "Rep$tnum ($method $r):\
+ Concurrency with updates."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep042_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep042_sub { method niter tnum logset recargs largs } {
+ source ./include.tcl
+ global perm_response_list
+
+ env_cleanup $testdir
+ set omethod [convert_method $method]
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_cmd "berkdb_env_noerr -create \
+ -log_max 1000000 $m_txnargs $m_logargs \
+ -home $masterdir -rep_master \
+ -rep_transport \[list 1 replsend\]"
+# set ma_cmd "berkdb_env_noerr -create \
+# -log_max 1000000 $m_txnargs $m_logargs \
+# -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_master -rep_transport \
+# \[list 1 replsend\]"
+ set masterenv [eval $ma_cmd $recargs]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_cmd "berkdb_env_noerr -create -home $clientdir \
+ $c_txnargs $c_logargs -rep_client \
+ -rep_transport \[list 2 replsend\]"
+# set cl_cmd "berkdb_env_noerr -create -home $clientdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# $c_txnargs $c_logargs -rep_client \
+# -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_cmd $recargs]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online.
+ process_msgs "{$masterenv 1} {$clientenv 2}"
+
+ puts "\tRep$tnum.a: Create and populate database."
+ set dbname rep042.db
+ set db [eval "berkdb_open -create $omethod -auto_commit \
+ -env $masterenv $largs $dbname"]
+ for { set i 1 } { $i < $niter } { incr i } {
+ set t [$masterenv txn]
+ error_check_good db_put \
+ [eval $db put -txn $t $i [chop_data $method data$i]] 0
+ error_check_good txn_commit [$t commit] 0
+ }
+ process_msgs "{$masterenv 1} {$clientenv 2}"
+
+ set ops {del truncate}
+ foreach op $ops {
+ # Fork child process on client. The child will do a delete.
+ set sleepval 4
+ set scrlog $testdir/repscript.log
+ puts "\tRep$tnum.b: Fork child process on client ($op)."
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ rep042script.tcl $scrlog \
+ $masterdir $sleepval $dbname $op &]
+
+ # Wait for child process to start up.
+ while { 1 } {
+ if { [file exists $masterdir/marker.db] == 0 } {
+ tclsleep 1
+ } else {
+ tclsleep 1
+ break
+ }
+ }
+
+ puts "\tRep$tnum.c: Downgrade during child $op."
+ error_check_good downgrade [$masterenv rep_start -client] 0
+
+ puts "\tRep$tnum.d: Waiting for child ..."
+ # Watch until the child is done.
+ watch_procs $pid 5
+ puts "\tRep$tnum.e: Upgrade to master again ..."
+ error_check_good upgrade [$masterenv rep_start -master] 0
+ set end [expr $niter * 2]
+ for { set i $niter } { $i <= $end } { incr i } {
+ set t [$masterenv txn]
+ error_check_good db_put \
+ [eval $db put -txn $t $i [chop_data $method data$i]] 0
+ error_check_good txn_commit [$t commit] 0
+ }
+ process_msgs "{$masterenv 1} {$clientenv 2}"
+
+ # We expect to find the error "attempt to modify a read-only
+ # database." If we don't, report what we did find as a failure.
+ set readonly_error [check_script $scrlog "read-only"]
+ if { $readonly_error != 1 } {
+ set errstrings [eval findfail $scrlog]
+ if { [llength $errstrings] > 0 } {
+ puts "FAIL: unexpected error(s)\
+ found in file $scrlog:$errstrings"
+ }
+ }
+ fileremove -f $masterdir/marker.db
+ }
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+}
+
+proc check_script { log str } {
+ set ret 0
+ set res [catch {open $log} id]
+ if { $res != 0 } {
+ puts "FAIL: open of $log failed: $id"
+ # Return 0
+ return $ret
+ }
+ while { [gets $id val] != -1 } {
+# puts "line: $val"
+ if { [is_substr $val $str] } {
+ set ret 1
+ break
+ }
+ }
+ close $id
+ return $ret
+}
diff --git a/db/test/rep042script.tcl b/db/test/rep042script.tcl
new file mode 100644
index 000000000..b90fbe8be
--- /dev/null
+++ b/db/test/rep042script.tcl
@@ -0,0 +1,77 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep042script.tcl,v 12.6 2006/08/24 14:46:38 bostic Exp $
+#
+# Rep042 script - concurrency with updates.
+
+# Usage: repscript masterdir sleepval dbname
+# masterdir: master env directory
+# sleepval: sleep value (in secs) to send to env test_check
+# dbname: name of database to use
+# op: operation: one of del or truncate
+#
+source ./include.tcl
+source $test_path/reputils.tcl
+
+set usage "repscript masterdir sleepval dbname op"
+
+# Verify usage
+if { $argc != 4 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set masterdir [ lindex $argv 0 ]
+set sleepval [ lindex $argv 1 ]
+set dbname [lindex $argv 2]
+set op [lindex $argv 3]
+
+set is_repchild 1
+
+#
+# We need to set up our own machids.
+# Add 1 for master env id, and 2 for the clientenv id.
+#
+repladd 1
+repladd 2
+
+# Join the master env.
+set ma_cmd "berkdb_env_noerr -home $masterdir \
+ -txn -rep_master -rep_transport \[list 1 replsend\]"
+# set ma_cmd "berkdb_env_noerr -home $masterdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# -txn -rep_master -rep_transport \[list 1 replsend\]"
+set masterenv [eval $ma_cmd]
+error_check_good script_menv_open [is_valid_env $masterenv] TRUE
+
+puts "Master open"
+set db [eval "berkdb_open -auto_commit -env $masterenv $dbname"]
+error_check_good dbopen [is_valid_db $db] TRUE
+
+# Make it so that the process sleeps in the middle of a delete.
+$masterenv test check $sleepval
+
+# Create marker file
+set marker [open $masterdir/marker.db w]
+close $marker
+
+if { $op == "del" } {
+ # Just delete record 1 - we know that one is in there.
+ set stat [catch {$db del 1} ret]
+ puts "Stat: $stat"
+ puts "Ret: $ret"
+} elseif { $op == "truncate" } {
+ set stat [catch {$db truncate} ret]
+ puts "Stat: $stat"
+ puts "Ret: $ret"
+} else {
+ puts "Stat: FAIL: invalid operation specified"
+}
+# Close the envs
+error_check_good script_db_close [$db close] 0
+error_check_good script_master_close [$masterenv close] 0
+puts "\tRepscript completed successfully"
diff --git a/db/test/rep043.tcl b/db/test/rep043.tcl
new file mode 100644
index 000000000..5a4c490b1
--- /dev/null
+++ b/db/test/rep043.tcl
@@ -0,0 +1,233 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep043.tcl,v 1.10 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep043
+# TEST
+# TEST Constant writes during upgrade/downgrade.
+# TEST
+# TEST Three envs take turns being master. Each env
+# TEST has a child process which does writes all the
+# TEST time. They will succeed when that env is master
+# TEST and fail when it is not.
+
+proc rep043 { method { rotations 25 } { tnum "043" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Skip for record-based methods.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_record_based $method] != 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
+ if { [is_record_based $method] == 1 } {
+ puts "Skipping rep$tnum for record-based methods."
+ return
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 3]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($method $r): Constant writes with \
+ rotating master $rotations times."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client 0 logs are [lindex $l 1]"
+ puts "Rep$tnum: Client 1 logs are [lindex $l 2]"
+ rep043_sub $method $rotations $tnum $l $r $args
+ }
+ }
+}
+
+proc rep043_sub { method rotations tnum logset recargs largs } {
+ global testdir
+ source ./include.tcl
+ env_cleanup $testdir
+ set orig_tdir $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/ENV0
+ set clientdir $testdir/ENV1
+ set clientdir2 $testdir/ENV2
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set c2_logtype [lindex $logset 2]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c2_logargs [adjust_logargs $c2_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set c2_txnargs [adjust_txnargs $c2_logtype]
+
+ set niter 200
+ set testfile rep043.db
+ set omethod [convert_method $method]
+
+ # Since we're constantly switching master in this test run
+ # each with a different cache size just to verify that cachesize
+ # doesn't matter for different sites.
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -errpfx ENV0 -errfile /dev/stderr \
+ -cachesize {0 4194304 3} -lock_detect default \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -lock_detect default \
+# -cachesize {0 4194304 3} \
+# -errpfx ENV0 -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set env0 [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $env0] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx ENV1 -errfile /dev/stderr \
+ -cachesize {0 2097152 2} -lock_detect default \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -lock_detect default \
+# -cachesize {0 2097152 2} \
+# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set env1 [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $env1] TRUE
+
+ repladd 3
+ set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
+ $c2_logargs -errpfx ENV2 -errfile /dev/stderr \
+ -cachesize {0 1048576 1} -lock_detect default \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
+# $c2_logargs -lock_detect default \
+# -cachesize {0 1048576 1} \
+# -errpfx ENV2 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir2 -rep_transport \[list 3 replsend\]"
+ set env2 [eval $cl2_envcmd $recargs -rep_client]
+ error_check_good client_env2 [is_valid_env $env2] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$env0 1} {$env1 2} {$env2 3}"
+ process_msgs $envlist
+
+ # Set up marker file.
+ set markerenv [berkdb_env -create -home $testdir -txn]
+ error_check_good marker_open [is_valid_env $markerenv] TRUE
+ set marker [eval "berkdb_open \
+ -create -btree -auto_commit -env $markerenv marker.db"]
+
+ # Start the 3 child processes: one for each env.
+ set pids {}
+ set dirlist "0 $masterdir 1 $clientdir 2 $clientdir2"
+ foreach { writer dir } $dirlist {
+ puts "\tRep$tnum.a: Fork child process WRITER$writer."
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ rep043script.tcl $testdir/rep043script.log.$writer \
+ $dir $writer &]
+ lappend pids $pid
+ }
+
+ # For the first iteration, masterenv is $env0.
+ set masterenv $env0
+ set curdir $masterdir
+
+ # Write $niter entries to master, then rotate.
+ for { set i 0 } { $i < $rotations } { incr i } {
+
+ # Identify current master, determine next master
+ if { $masterenv == $env0 } {
+ set nextmasterenv $env1
+ set nextdir $clientdir
+ } elseif { $masterenv == $env1 } {
+ set nextmasterenv $env2
+ set nextdir $clientdir2
+ } elseif { $masterenv == $env2 } {
+ set nextmasterenv $env0
+ set nextdir $masterdir
+ } else {
+ puts "FAIL: could not identify current master"
+ return
+ }
+
+ puts "\tRep$tnum.b.$i: Open master db in $curdir."
+ set mdb [eval {berkdb_open_noerr} -env $masterenv -auto_commit \
+ -mode 0644 $omethod -create $testfile]
+ error_check_good dbopen [is_valid_db $mdb] TRUE
+ error_check_good marker_iter [$marker put ITER $i] 0
+
+ puts "\t\tRep$tnum.c.$i: Put data to master."
+ for { set j 0 } { $j < $niter } { incr j } {
+ set key KEY.$i.$j
+ set data DATA
+ set t [$masterenv txn]
+ set stat [catch \
+ {eval {$mdb put} -txn $t $key $data} ret]
+ if { $ret == 0 } {
+ error_check_good commit [$t commit] 0
+ } else {
+ error_check_good commit [$t abort] 0
+ }
+ }
+ error_check_good mdb_close [$mdb close] 0
+
+ # Checkpoint.
+ error_check_good checkpoint [$masterenv txn_checkpoint] 0
+
+ process_msgs $envlist
+
+ puts "\t\tRep$tnum.d.$i: Downgrade current master."
+ error_check_good downgrade [$masterenv rep_start -client] 0
+
+ puts "\t\tRep$tnum.e.$i: Upgrade next master $nextdir."
+ error_check_good upgrade [$nextmasterenv rep_start -master] 0
+ set masterenv $nextmasterenv
+ set curdir $nextdir
+
+ process_msgs $envlist
+ }
+
+
+ puts "\tRep$tnum.f: Clean up."
+ # Tell the child processes we are done.
+ error_check_good marker_done [$marker put DONE DONE] 0
+ error_check_good marker_close [$marker close] 0
+ error_check_good markerenv_close [$markerenv close] 0
+
+ error_check_good env0_close [$env0 close] 0
+ error_check_good env1_close [$env1 close] 0
+ error_check_good env2_close [$env2 close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
diff --git a/db/test/rep043script.tcl b/db/test/rep043script.tcl
new file mode 100644
index 000000000..c81110aef
--- /dev/null
+++ b/db/test/rep043script.tcl
@@ -0,0 +1,114 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep043script.tcl,v 1.8 2006/08/24 14:46:38 bostic Exp $
+#
+# Rep043 script - constant writes to an env which may be
+# either a master or a client, or changing between the
+# two states
+#
+# Usage: dir writerid
+# dir: Directory of writer
+# writerid: i.d. number for writer
+
+set usage "rep043script dir writerid"
+
+# Verify usage
+if { $argc != 2 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set dir [ lindex $argv 0 ]
+set writerid [ lindex $argv 1 ]
+set nentries 50
+
+set is_repchild 1
+
+# We need to set up our own machids.
+set envid [expr $writerid + 1]
+repladd $envid
+set name "WRITER.$writerid"
+
+# Pause to make sure the database exists before we try to join.
+tclsleep 3
+
+# Join the env.
+set env_cmd "berkdb_env_noerr -home $dir -lock_detect default \
+ -errfile /dev/stderr -errpfx WRITER.$writerid \
+ -txn -rep_transport \[list $envid replsend\]"
+# set env_cmd "berkdb_env_noerr -home $dir \
+# -errfile /dev/stderr -errpfx WRITER.$writerid \
+# -verbose {rep on} -lock_detect default \
+# -txn -rep_transport \[list $envid replsend\]"
+set dbenv [eval $env_cmd]
+error_check_good script_env_open [is_valid_env $dbenv] TRUE
+
+# Open database.
+set testfile "rep043.db"
+set db [eval {berkdb_open_noerr} -errpfx $name -errfile /dev/stderr \
+ -env $dbenv -auto_commit $testfile]
+error_check_good dbopen [is_valid_db $db] TRUE
+
+# Communicate with parent in marker file.
+set markerenv [berkdb_env -home $testdir -txn]
+error_check_good markerenv_open [is_valid_env $markerenv] TRUE
+set marker [eval "berkdb_open \
+ -create -btree -auto_commit -env $markerenv marker.db"]
+
+# Write records to the database.
+set iter INIT
+set olditer $iter
+while { [llength [$marker get DONE]] == 0 } {
+ for { set i 0 } { $i < $nentries } { incr i } {
+ set kd [$marker get ITER]
+ if { [llength $kd] == 0 } {
+ set iter X
+ } else {
+ set iter [lindex [lindex $kd 0] 1]
+ }
+ if { $iter != $olditer } {
+ puts "Entry $i: Iter changed from $olditer to $iter"
+ set olditer $iter
+ }
+
+ set key WRITER.$writerid.$iter.$i
+ set str string.$i
+
+ set t [$dbenv txn]
+ error_check_good txn [is_valid_txn $t $dbenv] TRUE
+ set stat [catch {$db put -txn $t $key $str} res]
+ if { $stat == 0 } {
+puts "res is $res, commit"
+ error_check_good txn_commit [$t commit] 0
+ } else {
+puts "res is $res, abort"
+ error_check_good txn_abort [$t abort] 0
+ }
+
+ # If the handle is dead, get a new one.
+ if { [is_substr $res DB_REP_HANDLE_DEAD] == 1 } {
+puts "Close - dead handle."
+ error_check_good db_close [$db close] 0
+puts "Getting new handle"
+ set db [eval {berkdb_open_noerr} \
+ -env $dbenv -auto_commit $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+ }
+
+ if { [expr $i % 10] == 1 } {
+ puts "Wrote WRITER.$writerid.$iter.$i record $i"
+ }
+ }
+ tclsleep 1
+}
+
+# Clean up.
+error_check_good db_close [$db close] 0
+error_check_good dbenv_close [$dbenv close] 0
+replclose $testdir/MSGQUEUEDIR
+error_check_good marker_close [$marker close] 0
+error_check_good markerenv_close [$markerenv close] 0
diff --git a/db/test/rep044.tcl b/db/test/rep044.tcl
new file mode 100644
index 000000000..588f3893d
--- /dev/null
+++ b/db/test/rep044.tcl
@@ -0,0 +1,256 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep044.tcl,v 12.10 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep044
+# TEST
+# TEST Test rollbacks with open file ids.
+# TEST
+# TEST We have one master with two handles and one client.
+# TEST Each time through the main loop, we open a db, write
+# TEST to the db, and close the db. Each one of these actions
+# TEST is propagated to the client, or a roll back is forced
+# TEST by swapping masters.
+
+proc rep044 { method { tnum "044" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 2]
+
+ # HP-UX can't open two handles on the same env, so it
+ # can't run this test.
+ if { $is_hp_test == 1 } {
+ puts "Skipping rep$tnum for HP-UX."
+ return
+ }
+
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ puts "Rep$tnum ($method): Replication with rollbacks\
+ and open file ids."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client 0 logs are [lindex $l 1]"
+ rep044_sub $method $tnum $l $args
+ }
+}
+
+proc rep044_sub { method tnum logset largs } {
+ global testdir
+ source ./include.tcl
+ set orig_tdir $testdir
+
+ set masterdir $testdir/ENV0
+ set clientdir $testdir/ENV1
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ set niter 20
+ set omethod [convert_method $method]
+
+ # The main loop runs all the permutations of processing/not
+ # processing the database open to the clients; processing/not
+ # processing the database writes to the clients; and processing/
+ # not processing the database close to the clients. Set up the
+ # options in advance so the loop is not heavily indented.
+ #
+ # Each entry displays { open write close }.
+ # For example { 1 1 0 } means we process messages after the
+ # db open and the db writes but not after the db close.
+
+ set optionsets {
+ {1 1 1}
+ {1 1 0}
+ {1 0 1}
+ {1 0 0}
+ {0 1 1}
+ {0 1 0}
+ {0 0 1}
+ {0 0 0}
+ }
+
+ # Main loop.
+ foreach set $optionsets {
+
+ env_cleanup $testdir
+ replsetup $testdir/MSGQUEUEDIR
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ set processopens [lindex $set 0]
+ set processwrites [lindex $set 1]
+ set processcloses [lindex $set 2]
+
+ set notdoing {}
+ if { $processopens == 0 } {
+ append notdoing " OPENS"
+ }
+ if { $processwrites == 0 } {
+ append notdoing " WRITES"
+ }
+ if { $processcloses == 0 } {
+ append notdoing " CLOSES"
+ }
+ if { $notdoing != {} } {
+ puts "Rep$tnum:\
+ Loop with $notdoing not processed to client."
+ }
+
+ # Open a master.
+ repladd 1
+ set envcmd(M0) "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -lock_detect default \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set envcmd(M0) "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -lock_detect default \
+# -errpfx ENV.M0 -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set menv0 [eval $envcmd(M0) -rep_master]
+ error_check_good master_env0 [is_valid_env $menv0] TRUE
+
+ # Open second handle on master env.
+ set envcmd(M1) "berkdb_env_noerr $m_txnargs \
+ $m_logargs -lock_detect default \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set envcmd(M1) "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -lock_detect default \
+# -errpfx ENV.M1 -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set menv1 [eval $envcmd(M1)]
+ error_check_good master_env [is_valid_env $menv1] TRUE
+ error_check_good rep_start [$menv1 rep_start -master] 0
+
+ # Open a client
+ repladd 2
+ set envcmd(C) "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx ENV.C \
+ -errfile /dev/stderr -lock_detect default \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set envcmd(C) "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -lock_detect default \
+# -errpfx ENV.C -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set cenv [eval $envcmd(C) -rep_client]
+ error_check_good client_env [is_valid_env $cenv] TRUE
+
+ # Bring the client online by processing the startup messages.
+ set envlist "{$menv0 1} {$cenv 2}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Run rep_test in 1st master env."
+ set start 0
+ eval rep_test $method $menv0 NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Open db in 2nd master env."
+ # Open the db here; we want it to remain open after rep_test.
+ set db1 [eval {berkdb_open_noerr -env $menv1 -auto_commit \
+ -mode 0644} $largs $omethod test.db]
+ error_check_good dbopen [is_valid_db $db1] TRUE
+
+ if { $processopens == 1 } {
+ puts "\tRep$tnum.b1:\
+ Process db open messages to client."
+ process_msgs $envlist
+ } else {
+ set start [do_switch $method $niter $start $menv0 $cenv $largs]
+ }
+
+ puts "\tRep$tnum.c: Write to database in 2nd master."
+ # We don't use rep_test here, because sometimes we abort.
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set t [$menv1 txn]
+ set key $i
+ set str STRING.$i
+ if [catch {eval {$db1 put}\
+ -txn $t {$key [chop_data $method $str]}} result] {
+ # If handle is dead, abort txn, then
+ # close and reopen db.
+ error_check_good handle_dead \
+ [is_substr $result HANDLE_DEAD] 1
+ error_check_good txn_abort [$t abort] 0
+ error_check_good close_handle [$db1 close] 0
+ set db1 [eval {berkdb_open_noerr \
+ -env $menv1 -auto_commit -mode 0644}\
+ $largs $omethod test.db]
+ } else {
+ error_check_good txn_commit [$t commit] 0
+ }
+ }
+
+ if { $processwrites == 1 } {
+ puts "\tRep$tnum.c1:\
+ Process db put messages to client."
+ process_msgs $envlist
+ } else {
+ set start [do_switch $method $niter $start $menv0 $cenv $largs]
+ }
+
+ puts "\tRep$tnum.d: Close database using 2nd master env handle."
+ error_check_good db_close [$db1 close] 0
+
+ if { $processcloses == 1 } {
+ puts "\tRep$tnum.d1:\
+ Process db close messages to client."
+ process_msgs $envlist
+ } else {
+ set start [do_switch $method $niter $start $menv0 $cenv $largs]
+ }
+
+ puts "\tRep$tnum.e: Clean up."
+ error_check_good menv0_close [$menv0 close] 0
+ error_check_good menv1_close [$menv1 close] 0
+ error_check_good cenv_close [$cenv close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+ }
+ set testdir $orig_tdir
+ return
+}
+
+proc do_switch { method niter start masterenv clientenv largs } {
+ set envlist "{$masterenv 1} {$clientenv 2}"
+
+ # Downgrade master, upgrade client.
+ error_check_good master_downgrade [$masterenv rep_start -client] 0
+ error_check_good client_upgrade [$clientenv rep_start -master] 0
+ process_msgs $envlist
+
+ # Run rep_test in the new master.
+ eval rep_test $method $clientenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ # Downgrade newmaster, upgrade original master.
+ error_check_good client_downgrade [$clientenv rep_start -client] 0
+ error_check_good master_upgrade [$masterenv rep_start -master] 0
+
+ # Run rep_test in the restored master.
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ return $start
+}
diff --git a/db/test/rep045.tcl b/db/test/rep045.tcl
new file mode 100644
index 000000000..ccc305632
--- /dev/null
+++ b/db/test/rep045.tcl
@@ -0,0 +1,256 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep045.tcl,v 12.12 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep045
+# TEST
+# TEST Replication with versions.
+# TEST
+# TEST Mimic an application where a database is set up in the
+# TEST background and then put into a replication group for use.
+# TEST The "version database" identifies the current live
+# TEST version, the database against which queries are made.
+# TEST For example, the version database might say the current
+# TEST version is 3, and queries would then be sent to db.3.
+# TEST Version 4 is prepared for use while version 3 is in use.
+# TEST When version 4 is complete, the version database is updated
+# TEST to point to version 4 so queries can be directed there.
+# TEST
+# TEST This test has a master and two clients. One client swaps
+# TEST roles with the master, and the other client runs constantly
+# TEST in another process.
+
+proc rep045 { method { tnum "045" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 3]
+
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ puts "Rep$tnum ($method): Replication with version\
+ databases."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client 0 logs are [lindex $l 1]"
+ puts "Rep$tnum: Client 1 logs are [lindex $l 2]"
+ rep045_sub $method $tnum $l $args
+ }
+}
+
+proc rep045_sub { method tnum logset largs } {
+ global testdir
+ source ./include.tcl
+ set orig_tdir $testdir
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir0 $testdir/CLIENTDIR0
+ set clientdir1 $testdir/CLIENTDIR1
+
+ env_cleanup $testdir
+ replsetup $testdir/MSGQUEUEDIR
+ file mkdir $masterdir
+ file mkdir $clientdir0
+ file mkdir $clientdir1
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set c2_logtype [lindex $logset 2]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c2_logargs [adjust_logargs $c2_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set c2_txnargs [adjust_txnargs $c2_logtype]
+
+ set omethod [convert_method $method]
+
+ # Open a master.
+ repladd 1
+ set envcmd(M0) "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -errpfx ENV.M0 \
+ -errfile /dev/stderr -lock_detect default \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set envcmd(M0) "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -lock_detect default \
+# -errpfx ENV.M0 -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set menv [eval $envcmd(M0) -rep_master]
+ error_check_good master_env0 [is_valid_env $menv] TRUE
+
+ # Open a client
+ repladd 2
+ set envcmd(C0) "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx ENV.C0 \
+ -errfile /dev/stderr -lock_detect default \
+ -home $clientdir0 -rep_transport \[list 2 replsend\]"
+# set envcmd(C0) "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -lock_detect default \
+# -errpfx ENV.C0 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir0 -rep_transport \[list 2 replsend\]"
+ set cenv0 [eval $envcmd(C0) -rep_client]
+ error_check_good client_env [is_valid_env $cenv0] TRUE
+
+ # Open second client.
+ repladd 3
+ set envcmd(C1) "berkdb_env_noerr -create $c2_txnargs \
+ $c2_logargs -errpfx ENV.C1 \
+ -errfile /dev/stderr -lock_detect default \
+ -home $clientdir1 -rep_transport \[list 3 replsend\]"
+# set envcmd(C1) "berkdb_env_noerr -create $c2_txnargs \
+# $c2_logargs -lock_detect default \
+# -errpfx ENV.C -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir1 -rep_transport \[list 3 replsend\]"
+ set cenv1 [eval $envcmd(C1) -rep_client]
+ error_check_good client_env [is_valid_env $cenv1] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$menv 1} {$cenv0 2} {$cenv1 3}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Initialize version database."
+ # Set up variables so we cycle through version numbers 1
+ # through maxversion several times.
+ set vname "version.db"
+ set version 0
+ set maxversion 5
+ set iter 12
+ set nentries 100
+ set start 0
+
+ # The version db is always btree.
+ set vdb [eval {berkdb_open_noerr -env $menv -create \
+ -auto_commit -mode 0644} -btree $vname]
+ error_check_good init_version [$vdb put VERSION $version] 0
+ error_check_good vdb_close [$vdb close] 0
+ process_msgs $envlist
+
+ # Start up a separate process that constantly reads data
+ # from the current official version.
+ puts "\tRep$tnum.b: Spawn a child tclsh to do client work."
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ rep045script.tcl $testdir/rep045script.log \
+ $clientdir1 $vname &]
+
+ # Main loop: update query database, process messages (or don't,
+ # simulating a failure), announce the new version, process
+ # messages (or don't), and swap masters.
+ set version 1
+ for { set i 1 } { $i < $iter } { incr i } {
+
+ # If database.N exists, clean it up.
+ set dbname "db.$version"
+ if { [file exists $masterdir/$dbname] == 1 } {
+ puts "\tRep$tnum.c.$i: Removing old version $version."
+ error_check_good dbremove \
+ [$menv dbremove -auto_commit $dbname] 0
+ }
+
+ puts "\tRep$tnum.c.$i: Set up query database $version."
+ set db [eval berkdb_open_noerr -create -env $menv\
+ -auto_commit -mode 0644 $largs $omethod $dbname]
+ error_check_good db_open [is_valid_db $db] TRUE
+ eval rep_test $method $menv $db $nentries $start $start 0 0 $largs
+ incr start $nentries
+ error_check_good db_close [$db close] 0
+
+ # We alternate between processing the messages and
+ # clearing the messages to simulate a failure.
+
+ set process [expr $i % 2]
+ if { $process == 1 } {
+ process_msgs $envlist
+ } else {
+ replclear 2
+ replclear 3
+ }
+
+ # Announce new version.
+ puts "\tRep$tnum.d.$i: Announce new version $version."
+ set vdb [eval {berkdb_open_noerr -env $menv \
+ -auto_commit -mode 0644} $vname]
+ error_check_good update_version [$vdb put VERSION $version] 0
+ error_check_good vdb_close [$vdb close] 0
+
+ # Process messages or simulate failure.
+ if { $process == 1 } {
+ process_msgs $envlist
+ } else {
+ replclear 2
+ replclear 3
+ }
+
+ # Switch master, update envlist.
+ puts "\tRep$tnum.e.$i: Switch masters."
+ set envlist [switch_master $envlist]
+
+ # Update values for next iteration.
+ set menv [lindex [lindex $envlist 0] 0]
+ set cenv0 [lindex [lindex $envlist 1] 0]
+ incr version
+ if { $version > $maxversion } {
+ set version 1
+ }
+ }
+
+ # Signal to child that we are done.
+ set vdb [eval {berkdb_open_noerr -env $menv \
+ -auto_commit -mode 0644} $vname]
+ error_check_good version_done [$vdb put VERSION DONE] 0
+ error_check_good vdb_close [$vdb close] 0
+ process_msgs $envlist
+
+ # Watch for child to finish.
+ watch_procs $pid 5
+
+ puts "\tRep$tnum.f: Clean up."
+ error_check_good menv_close [$menv close] 0
+ error_check_good cenv0_close [$cenv0 close] 0
+ error_check_good cenv1_close [$cenv1 close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+
+ # Check for failures in child's log file.
+ set errstrings [eval findfail $testdir/rep045script.log]
+ foreach str $errstrings {
+ puts "FAIL: error message in log file: $str"
+ }
+
+ set testdir $orig_tdir
+ return
+}
+
+proc switch_master { envlist } {
+ # Find env handles and machine ids.
+ set menv [lindex [lindex $envlist 0] 0]
+ set mid [lindex [lindex $envlist 0] 1]
+ set cenv [lindex [lindex $envlist 1] 0]
+ set cid [lindex [lindex $envlist 1] 1]
+ set cenv1 [lindex [lindex $envlist 2] 0]
+ set cid1 [lindex [lindex $envlist 2] 1]
+
+ # Downgrade master, upgrade client.
+ error_check_good master_downgrade [$menv rep_start -client] 0
+ error_check_good client_upgrade [$cenv rep_start -master] 0
+ process_msgs $envlist
+
+ # Adjust envlist. The former client env is the new master,
+ # and vice versa.
+ set newenvlist "{$cenv $cid} {$menv $mid} {$cenv1 $cid1}"
+ return $newenvlist
+}
diff --git a/db/test/rep045script.tcl b/db/test/rep045script.tcl
new file mode 100644
index 000000000..78b592108
--- /dev/null
+++ b/db/test/rep045script.tcl
@@ -0,0 +1,138 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep045script.tcl,v 12.7 2006/09/15 13:16:25 carol Exp $
+#
+# Rep045 script - replication with version dbs.
+#
+# Usage: rep045script clientdir vfile
+# clientdir: client env directory
+# vfile: name of version file
+#
+source ./include.tcl
+source $test_path/test.tcl
+source $test_path/testutils.tcl
+source $test_path/reputils.tcl
+
+set usage "repscript clientdir vfile"
+
+# Verify usage
+if { $argc != 2 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set clientdir [ lindex $argv 0 ]
+set vfile [ lindex $argv 1 ]
+set niter 50
+
+set is_repchild 1
+
+# We need to set up our own machids.
+repladd 3
+
+# Join the client env.
+set cl_cmd "berkdb_env_noerr -home $clientdir \
+ -txn -rep_client -rep_transport \[list 3 replsend\]"
+# set cl_cmd "berkdb_env_noerr -home $clientdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# -txn -rep_client -rep_transport \[list 3 replsend\]"
+set clientenv [eval $cl_cmd]
+error_check_good script_cenv_open [is_valid_env $clientenv] TRUE
+
+# Start up deadlock detector.
+set dpid [exec $util_path/db_deadlock \
+ -a o -v -t 5 -h $clientdir >& $testdir/dd.out &]
+
+# Initialize version number. Don't try to open the first
+# version database until the master has completed setting it up.
+set version 0
+while {[catch {berkdb_open_noerr -env $clientenv -rdonly $vfile} vdb]} {
+ puts "FAIL: vdb open failed: $vdb"
+ tclsleep 1
+}
+
+while { $version == 0 } {
+ tclsleep 1
+ if { [catch {$vdb get VERSION} res] } {
+ # If we encounter an error, check what kind of
+ # error it is.
+ if { [is_substr $res DB_LOCK_DEADLOCK] == 1 } {
+ # We're deadlocked. Just wait for the
+ # deadlock detector to break the deadlock.
+ } elseif { [is_substr $res DB_REP_HANDLE_DEAD] == 1 } {
+ # Handle is dead. Get a new handle.
+ error_check_good vdb_close [$vdb close] 0
+ set vdb [eval berkdb_open -env $clientenv\
+ -rdonly $vfile]
+ } else {
+ # We got something we didn't expect.
+ puts "FAIL: Trying to get version, got $res"
+ break
+ }
+ } else {
+ # No error was encountered.
+ set version [lindex [lindex $res 0] 1]
+ }
+}
+error_check_good close_vdb [$vdb close] 0
+set dbfile db.$version
+
+# Open completed database version $version.
+if {[catch {berkdb_open -rdonly -env $clientenv $dbfile} db]} {
+ puts "FAIL: db open failed: $db"
+}
+error_check_good db_open [is_valid_db $db] TRUE
+
+# While parent process is not done, read from current database.
+# Periodically check version and update current database when
+# necessary.
+while { 1 } {
+ set dbc [$db cursor]
+ set i 0
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
+ for { set dbt [$dbc get -first] } { $i < $niter } \
+ { set dbt [$dbc get -next] } {
+ incr i
+ }
+ error_check_good cursor_close [$dbc close] 0
+
+ while {[catch {berkdb_open -env $clientenv -rdonly $vfile} vdb]} {
+ puts "open failed: vdb is $vdb"
+ tclsleep 1
+ }
+ set ret [$vdb get VERSION]
+
+ set newversion [lindex [lindex $ret 0] 1]
+ error_check_good close_vdb [$vdb close] 0
+ error_check_bad check_newversion $newversion ""
+ if { $newversion != $version } {
+ if { $newversion == "DONE" } {
+ break
+ } elseif { $newversion == 0 } {
+ puts "FAIL: version has reverted to 0"
+ continue
+ } else {
+ error_check_good db_close [$db close] 0
+ set version $newversion
+ set dbfile db.$version
+ while {[catch \
+ {berkdb_open -env $clientenv -rdonly $dbfile} db]} {
+ puts "db open of new db failed: $db"
+ tclsleep 1
+ }
+ error_check_good db_open [is_valid_db $db] TRUE
+ }
+ }
+
+ # Pause a few seconds to allow the parent to do some work.
+ tclsleep 3
+}
+
+# Clean up.
+error_check_good kill_deadlock_detector [tclkill $dpid] ""
+error_check_good db_close [$db close] 0
+error_check_good script_client_close [$clientenv close] 0
diff --git a/db/test/rep046.tcl b/db/test/rep046.tcl
new file mode 100644
index 000000000..fc02f8dc4
--- /dev/null
+++ b/db/test/rep046.tcl
@@ -0,0 +1,228 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep046.tcl,v 12.16 2006/09/07 14:48:25 carol Exp $
+#
+# TEST rep046
+# TEST Replication and basic bulk transfer.
+# TEST Set bulk transfer replication option.
+# TEST Run long txns on master and then commit. Process on client
+# TEST and verify contents. Run a very long txn so that logging
+# TEST must send the log. Process and verify on client.
+#
+proc rep046 { method { nentries 200 } { tnum "046" } args } {
+ global mixed_mode_logging
+ source ./include.tcl
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win9x platform."
+ return
+ }
+
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+
+ # Run the body of the test with and without recovery.
+ set throttle { "throttle" "" }
+ foreach r $test_recopts {
+ foreach t $throttle {
+ puts "Rep$tnum ($method $r $t):\
+ Replication and bulk transfer."
+ rep046_sub $method $nentries $tnum $r $t $args
+ }
+ }
+}
+
+proc rep046_sub { method niter tnum recargs throttle largs } {
+ global overflowword1
+ global overflowword2
+ global testdir
+ global util_path
+
+ set orig_tdir $testdir
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ set bigniter [expr 10000 - [expr 2 * $niter]]
+ set lkmax [expr $bigniter * 2]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env -create -txn nosync \
+ -lock_max_locks 10000 -lock_max_objects 10000 \
+ -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env -create -txn nosync \
+# -lock_max_locks 10000 -lock_max_objects 10000 \
+# -errpfx MASTER -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ repladd 2
+ set cl_envcmd "berkdb_env -create -txn nosync \
+ -home $clientdir \
+ -lock_max_locks 10000 -lock_max_objects 10000 \
+ -rep_client -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env -create -txn nosync \
+# -home $clientdir \
+# -lock_max_locks 10000 -lock_max_objects 10000 \
+# -errpfx CLIENT -verbose {rep on} -errfile /dev/stderr \
+# -rep_client -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ if { $throttle == "throttle" } {
+ set clientdir2 $testdir/CLIENTDIR2
+ file mkdir $clientdir2
+ repladd 3
+ set cl2_envcmd "berkdb_env -create -txn nosync \
+ -home $clientdir2 \
+ -lock_max_locks 10000 -lock_max_objects 10000 \
+ -rep_client -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env -create -txn nosync \
+# -home $clientdir2 \
+# -lock_max_locks 10000 -lock_max_objects 10000 \
+# -errpfx CLIENT2 -verbose {rep on} -errfile /dev/stderr \
+# -rep_client -rep_transport \[list 3 replsend\]"
+ set cl2env [eval $cl2_envcmd $recargs]
+ error_check_good client2_env [is_valid_env $cl2env] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2} {$cl2env 3}"
+ #
+ # Turn throttling on in master
+ #
+ error_check_good thr [$masterenv rep_limit 0 [expr 32 * 1024]] 0
+ } else {
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ }
+ # Bring the client online by processing the startup messages.
+ process_msgs $envlist
+
+ #
+ # Turn on bulk processing now on the master.
+ #
+ error_check_good set_bulk [$masterenv rep_config {bulk on}] 0
+
+ puts "\tRep$tnum.a: Create and open master database"
+ set testfile "test.db"
+ set omethod [convert_method $method]
+ set masterdb [eval {berkdb_open_noerr -env $masterenv -auto_commit \
+ -create -mode 0644} $largs $omethod $testfile]
+ error_check_good dbopen [is_valid_db $masterdb] TRUE
+
+ # Process database.
+ process_msgs $envlist
+
+ # Run a modified test001 in the master (and update clients).
+ puts "\tRep$tnum.b: Basic long running txn"
+ set bulkrec1 [stat_field $masterenv rep_stat "Bulk records stored"]
+ set bulkxfer1 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+
+ set overflowword1 "0"
+ set overflowword2 "0"
+ rep_test_bulk $method $masterenv $masterdb $niter 0 0
+ process_msgs $envlist
+ set bulkrec2 [stat_field $masterenv rep_stat "Bulk records stored"]
+ set bulkxfer2 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ error_check_good recstat [expr $bulkrec2 > $bulkrec1] 1
+ error_check_good xferstat [expr $bulkxfer2 > $bulkxfer1] 1
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ puts "\tRep$tnum.c: Very long txn"
+ set skip $niter
+ set start $niter
+ set orig $niter
+ set bulkfill1 [stat_field $masterenv rep_stat "Bulk buffer fills"]
+ rep_test_bulk $method $masterenv $masterdb $bigniter $start $skip
+ set start [expr $niter + $bigniter]
+ if { $throttle == "throttle" } {
+ #
+ # If we're throttling clear all messages from client 3
+ # so that we force a huge gap that the client will have
+ # to ask for to invoke a rerequest that throttles.
+ #
+ replclear 3
+ set old_thr \
+ [stat_field $masterenv rep_stat "Transmission limited"]
+ }
+ process_msgs $envlist
+ set bulkfill2 [stat_field $masterenv rep_stat "Bulk buffer fills"]
+ error_check_good fillstat [expr $bulkfill2 > $bulkfill1] 1
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ puts "\tRep$tnum.d: Very large data"
+ set bulkovf1 [stat_field $masterenv rep_stat "Bulk buffer overflows"]
+ set bulkfill1 [stat_field $masterenv rep_stat "Bulk buffer fills"]
+ #
+ # Send in '2' exactly because we're sending in the flag to use
+ # the overflow entries. We have 2 overflow entries.
+ # If it's fixed length, we can't overflow. Induce throttling by
+ # putting in a bunch more entries.
+ if { [is_fixed_length $method] == 1 } {
+ rep_test_bulk $method $masterenv $masterdb $niter $start $start 0
+ } else {
+ rep_test_bulk $method $masterenv $masterdb 2 0 0 1
+ }
+ process_msgs $envlist
+
+ # Determine whether this build is configured with --enable-debug_rop
+ # or --enable-debug_wop.
+ set conf [berkdb getconfig]
+ set debug_rop_wop 0
+ if { [is_substr $conf "debug_rop"] == 1 \
+ || [is_substr $conf "debug_wop"] == 1 } {
+ set debug_rop_wop 1
+ }
+
+ # Generally overflows cannot happen because large data gets
+ # broken up into overflow pages, and none will be larger than
+ # the buffer. However, if we're configured for debug_rop/wop
+ # then we record the data as is and will overflow.
+ #
+ set bulkovf2 [stat_field $masterenv rep_stat "Bulk buffer overflows"]
+ set bulkfill2 [stat_field $masterenv rep_stat "Bulk buffer fills"]
+ if { [is_fixed_length $method] == 0 } {
+ error_check_good fillstat1 [expr $bulkfill2 > $bulkfill1] 1
+ if { $debug_rop_wop == 1 } {
+ error_check_good overflows [expr $bulkovf2 > $bulkovf1] 1
+ } else {
+ error_check_good no_overflows $bulkovf2 0
+ }
+ }
+
+
+ # !!!
+ # Turn off bulk processing now on the master. We need to do
+ # this because some configurations (like debug_rop/wop) will
+ # generate log records when verifying the logs and databases.
+ # We want to control processing those messages.
+ #
+ error_check_good set_bulk [$masterenv rep_config {bulk off}] 0
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ if { $throttle == "throttle" } {
+ puts "\tRep$tnum.e: Verify throttling."
+ set new_thr \
+ [stat_field $masterenv rep_stat "Transmission limited"]
+ error_check_bad nthrottles1 $new_thr -1
+ error_check_bad nthrottles0 $new_thr 0
+ error_check_good nthrottles [expr $old_thr < $new_thr] 1
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $clientdir2 $cl2env
+ error_check_good cclose [$cl2env close] 0
+ }
+ error_check_good dbclose [$masterdb close] 0
+ error_check_good mclose [$masterenv close] 0
+ error_check_good cclose [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep047.tcl b/db/test/rep047.tcl
new file mode 100644
index 000000000..247cd754c
--- /dev/null
+++ b/db/test/rep047.tcl
@@ -0,0 +1,204 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep047.tcl,v 12.11 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep047
+# TEST Replication and log gap bulk transfers.
+# TEST Set bulk transfer replication option.
+# TEST Run test. Start a new client (to test ALL_REQ and bulk).
+# TEST Run small test again. Clear messages for 1 client.
+# TEST Run small test again to test LOG_REQ gap processing and bulk.
+# TEST Process and verify on clients.
+#
+proc rep047 { method { nentries 200 } { tnum "047" } args } {
+ source ./include.tcl
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 3]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r):\
+ Replication and resend bulk transfer."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ puts "Rep$tnum: Client 2 logs are [lindex $l 2]"
+ rep047_sub $method $nentries $tnum $l $r $args
+ }
+ }
+}
+
+proc rep047_sub { method niter tnum logset recargs largs } {
+ global testdir
+ global util_path
+ global overflowword1 overflowword2
+
+ set overflowword1 "0"
+ set overflowword2 "0"
+ set orig_tdir $testdir
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR2
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set c2_logtype [lindex $logset 2]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c2_logargs [adjust_logargs $c2_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set c2_txnargs [adjust_txnargs $c2_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
+ -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env -create $m_txnargs $m_logargs \
+# -errpfx MASTER -verbose {rep on} \
+# -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ repladd 2
+ set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
+ -home $clientdir -rep_client -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env -create $c_txnargs $c_logargs \
+# -home $clientdir -errpfx CLIENT -verbose {rep on} \
+# -rep_client -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ repladd 3
+ set cl2_envcmd "berkdb_env -create $c2_txnargs $c2_logargs \
+ -home $clientdir2 -rep_client -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env -create $c2_txnargs $c2_logargs \
+# -home $clientdir2 -errpfx CLIENT2 -verbose {rep on} \
+# -rep_client -rep_transport \[list 3 replsend\]"
+ # Bring the client online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ error_check_good set_bulk [$masterenv rep_config {bulk on}] 0
+
+ puts "\tRep$tnum.a: Create and open master database"
+ set testfile "test.db"
+ set omethod [convert_method $method]
+ set masterdb [eval {berkdb_open_noerr -env $masterenv -auto_commit \
+ -create -mode 0644} $largs $omethod $testfile]
+ error_check_good dbopen [is_valid_db $masterdb] TRUE
+
+ # Bring the client online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run a modified test001 in the master (and update clients).
+ puts "\tRep$tnum.b: Basic long running txn"
+ rep_test_bulk $method $masterenv $masterdb $niter 0 0 0
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ puts "\tRep$tnum.c: Bring new client online"
+ replclear 3
+ set bulkrec1 [stat_field $masterenv rep_stat "Bulk records stored"]
+ set bulkxfer1 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ set clientenv2 [eval $cl2_envcmd $recargs]
+ error_check_good client_env [is_valid_env $clientenv2] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2} {$clientenv2 3}"
+ process_msgs $envlist
+
+ #
+ # We know we added $niter items to the database so there should be
+ # at least $niter records stored to the log. Verify that
+ # when we brought client 2 online, we sent at least $niter more
+ # records via bulk.
+ #
+ set bulkrec2 [stat_field $masterenv rep_stat "Bulk records stored"]
+ set bulkxfer2 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ set recstat [expr $bulkrec2 > [expr $bulkrec1 + $niter]]
+ error_check_good recstat $recstat 1
+ error_check_good xferstat [expr $bulkxfer2 > $bulkxfer1] 1
+ puts "\tRep$tnum.c.0: Take new client offline"
+
+ puts "\tRep$tnum.d: Run small test creating a log gap"
+ set skip $niter
+ set start $niter
+ set niter 10
+ rep_test_bulk $method $masterenv $masterdb $niter $start $skip 0
+ #
+ # Skip and clear messages for client 2.
+ #
+ replclear 3
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.e: Bring new client online again"
+ set bulkrec1 [stat_field $masterenv rep_stat "Bulk records stored"]
+ set bulkxfer1 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ set skip [expr $skip + $niter]
+ set start $skip
+ rep_test_bulk $method $masterenv $masterdb $niter $start $skip 0
+ set envlist "{$masterenv 1} {$clientenv 2} {$clientenv2 3}"
+ process_msgs $envlist
+ #
+ # We know we added 2*$niter items to the database so there should be
+ # at least 2*$niter records stored to the log. Verify that
+ # when we brought client 2 online, we sent at least 2*$niter more
+ # records via bulk.
+ #
+ set bulkrec2 [stat_field $masterenv rep_stat "Bulk records stored"]
+ set bulkxfer2 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ set recstat [expr $bulkrec2 > [expr $bulkrec1 + [expr 2 * $niter]]]
+ error_check_good recstat $recstat 1
+ error_check_good xferstat [expr $bulkxfer2 > $bulkxfer1] 1
+
+ # Turn off bulk processing now on the master. We need to do
+ # this because some configurations (like debug_rop/wop) will
+ # generate log records when verifying the logs and databases.
+ # We want to control processing those messages.
+ #
+ error_check_good set_bulk [$masterenv rep_config {bulk off}] 0
+
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+ # Process messages again in case we are running with debug_rop.
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $clientdir2 $clientenv2
+
+ error_check_good dbclose [$masterdb close] 0
+ error_check_good mclose [$masterenv close] 0
+ error_check_good cclose [$clientenv close] 0
+ error_check_good c2close [$clientenv2 close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep048.tcl b/db/test/rep048.tcl
new file mode 100644
index 000000000..48bbaf961
--- /dev/null
+++ b/db/test/rep048.tcl
@@ -0,0 +1,123 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep048.tcl,v 12.8 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep048
+# TEST Replication and log gap bulk transfers.
+# TEST Have two master env handles. Turn bulk on in
+# TEST one (turns it on for both). Turn it off in the other.
+# TEST While toggling, send log records from both handles.
+# TEST Process message and verify master and client match.
+#
+proc rep048 { method { nentries 3000 } { tnum "048" } args } {
+ source ./include.tcl
+
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ puts "Rep$tnum ($method $r):\
+ Replication and toggling bulk transfer."
+ rep048_sub $method $nentries $tnum $r $args
+ }
+}
+
+proc rep048_sub { method niter tnum recargs largs } {
+ source ./include.tcl
+ global overflowword1
+ global overflowword2
+
+ set orig_tdir $testdir
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+ set overflowword1 "0"
+ set overflowword2 "0"
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ file mkdir $clientdir
+ file mkdir $masterdir
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env -create -txn nosync \
+ -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env -create -txn nosync \
+# -errpfx MASTER -verbose {rep on} \
+# -home $masterdir -rep_master -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ repladd 2
+ set cl_envcmd "berkdb_env -create -txn nosync -home $clientdir \
+ -rep_client -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env -create -txn nosync -home $clientdir \
+# -errpfx CLIENT -verbose {rep on} \
+# -rep_client -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Create and open master databases"
+ set testfile "test$tnum.db"
+ set omethod [convert_method $method]
+ set masterdb [eval {berkdb_open_noerr -env $masterenv -auto_commit \
+ -create -mode 0644} $largs $omethod $testfile]
+ error_check_good dbopen [is_valid_db $masterdb] TRUE
+
+ set scrlog $testdir/repscript.log
+ puts "\tRep$tnum.b: Fork child process."
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ rep048script.tcl $scrlog \
+ $masterdir &]
+
+ # Wait for child process to start up.
+ while { 1 } {
+ if { [file exists $masterdir/marker.file] == 0 } {
+ tclsleep 1
+ } else {
+ tclsleep 1
+ break
+ }
+ }
+ # Run a modified test001 in the master (and update clients).
+ # Call it several times so make sure that we get descheduled.
+ puts "\tRep$tnum.c: Basic long running txn"
+ set div 10
+ set loop [expr $niter / $div]
+ set start 0
+ for { set i 0 } { $i < $div } {incr i} {
+ rep_test_bulk $method $masterenv $masterdb $loop $start $start 0
+ process_msgs $envlist
+ set start [expr $start + $loop]
+ tclsleep 1
+ }
+ error_check_good dbclose [$masterdb close] 0
+ set marker [open $masterdir/done.file w]
+ close $marker
+
+ set bulkxfer1 [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ error_check_bad bulk $bulkxfer1 0
+
+ puts "\tRep$tnum.d: Waiting for child ..."
+ # Watch until the child is done.
+ watch_procs $pid 5
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $clientdir $clientenv 0 1 1 $testfile
+ rep_verify $masterdir $masterenv $clientdir $clientenv 0 1 0 "child.db"
+
+ error_check_good mclose [$masterenv close] 0
+ error_check_good cclose [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep048script.tcl b/db/test/rep048script.tcl
new file mode 100644
index 000000000..c29293f63
--- /dev/null
+++ b/db/test/rep048script.tcl
@@ -0,0 +1,75 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep048script.tcl,v 12.4 2006/08/24 14:46:38 bostic Exp $
+#
+# Rep048 script - toggle bulk transfer while updates are going on.
+
+# Usage: repscript masterdir
+# masterdir: master env directory
+#
+source ./include.tcl
+source $test_path/reputils.tcl
+
+set usage "repscript masterdir"
+
+# Verify usage
+if { $argc != 1 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set masterdir [ lindex $argv 0 ]
+
+set is_repchild 1
+
+#
+# We need to set up our own machids.
+# Add 1 for master env id, and 2 for the clientenv id.
+#
+repladd 1
+repladd 2
+
+# Join the master env.
+set ma_cmd "berkdb_env_noerr -home $masterdir \
+ -txn -rep_master -rep_transport \[list 1 replsend\]"
+# set ma_cmd "berkdb_env_noerr -home $masterdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# -txn -rep_master -rep_transport \[list 1 replsend\]"
+set masterenv [eval $ma_cmd]
+error_check_good script_menv_open [is_valid_env $masterenv] TRUE
+
+puts "Master open"
+set dbname "child.db"
+set db [eval "berkdb_open -create -btree -auto_commit -env $masterenv $dbname"]
+error_check_good dbopen [is_valid_db $db] TRUE
+
+# Create marker file
+set marker [open $masterdir/marker.file w]
+close $marker
+
+#
+# Keep toggling until the parent indicates it's done.
+#
+set tog "on"
+for { set i 0 } { [file exists $masterdir/done.file] == 0 } { incr i } {
+puts "Iter $i: Turn bulk $tog"
+ error_check_good bulk$tog [$masterenv rep_config [list bulk $tog]] 0
+ set t [$masterenv txn]
+ error_check_good db_put \
+ [eval $db put -txn $t $i data$i] 0
+ error_check_good txn_commit [$t commit] 0
+ if { $tog == "on" } {
+ set tog "off"
+ } else {
+ set tog "on"
+ }
+ tclsleep 1
+}
+# Close the envs
+error_check_good script_db_close [$db close] 0
+error_check_good script_master_close [$masterenv close] 0
+puts "\tRepscript completed successfully"
diff --git a/db/test/rep049.tcl b/db/test/rep049.tcl
new file mode 100644
index 000000000..69b93a9b6
--- /dev/null
+++ b/db/test/rep049.tcl
@@ -0,0 +1,221 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep049.tcl,v 12.11 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep049
+# TEST Replication and delay syncing clients - basic test.
+# TEST
+# TEST Open and start up a master and two clients. Turn on delay sync
+# TEST in the delayed client. Change master, add data and process messages.
+# TEST Verify delayed client does not match. Make additional changes and
+# TEST update the delayted client. Verify all match.
+# TEST Add in a fresh delayed client to test delay of ALL_REQ.
+# TEST Process startup messages and verify freshc client has no database.
+# TEST Sync and verify fresh client matches.
+#
+proc rep049 { method { niter 10 } { tnum "049" } args } {
+ source ./include.tcl
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 4]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($r):\
+ Replication and ($method) delayed syncup."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Swap Client logs are [lindex $l 1]"
+ puts "Rep$tnum: Delay Client logs are [lindex $l 2]"
+ puts "Rep$tnum: Fresh Client logs are [lindex $l 3]"
+ rep049_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep049_sub { method niter tnum logset recargs largs } {
+ global testdir
+ global util_path
+ env_cleanup $testdir
+ set orig_tdir $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set env1dir $testdir/MASTERDIR
+ set env2dir $testdir/CLIENTDIR
+ set delaycldir $testdir/DELAYCLDIR
+ set freshcldir $testdir/FRESHCLDIR
+ file mkdir $env1dir
+ file mkdir $env2dir
+ file mkdir $delaycldir
+ file mkdir $freshcldir
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set dc_logtype [lindex $logset 2]
+ set fc_logtype [lindex $logset 3]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set dc_logargs [adjust_logargs $dc_logtype]
+ set fc_logargs [adjust_logargs $fc_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set dc_txnargs [adjust_txnargs $dc_logtype]
+ set fc_txnargs [adjust_txnargs $fc_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -errpfx ENV1 -cachesize {0 4194304 3} \
+ -home $env1dir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -cachesize {0 4194304 3} \
+# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
+# -home $env1dir -rep_transport \[list 1 replsend\]"
+ set env1 [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $env1] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx ENV2 \
+ -home $env2dir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -errpfx ENV2 \
+# -verbose {rep on} -errfile /dev/stderr \
+# -home $env2dir -rep_transport \[list 2 replsend\]"
+ set env2 [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $env2] TRUE
+
+ repladd 3
+ set dc_envcmd "berkdb_env_noerr -create $dc_txnargs \
+ $dc_logargs -errpfx ENV3 \
+ -home $delaycldir -rep_transport \[list 3 replsend\]"
+# set dc_envcmd "berkdb_env_noerr -create $dc_txnargs \
+# $dc_logargs -errpfx DELAYCL \
+# -verbose {rep on} -errfile /dev/stderr \
+# -home $delaycldir -rep_transport \[list 3 replsend\]"
+ set dcenv [eval $dc_envcmd $recargs -rep_client]
+ error_check_good client2_env [is_valid_env $dcenv] TRUE
+
+ #
+ # !!!
+ # We're not using this client yet, but put its command up here.
+ # We'll do the repladd and execute this env command later.
+ #
+ set fc_envcmd "berkdb_env_noerr -create $fc_txnargs \
+ $fc_logargs -errpfx ENV4 \
+ -home $freshcldir -rep_transport \[list 4 replsend\]"
+# set fc_envcmd "berkdb_env_noerr -create $fc_txnargs \
+# $fc_logargs \
+# -errpfx FRESHCL -verbose {rep on} -errfile /dev/stderr \
+# -home $freshcldir -rep_transport \[list 4 replsend\]"
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$env1 1} {$env2 2} {$dcenv 3}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Run rep_test in master env."
+ set start 0
+ eval rep_test $method $env1 NULL $niter $start $start 0 0 $largs
+
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Set delayed sync on client. Basic test"
+ error_check_good set_delay [$dcenv rep_config {delayclient on}] 0
+ #
+ # Call sync when we're not delayed. Verify it just returns and
+ # that no messages are generated anywhere.
+ #
+ error_check_good sync1 [$dcenv rep_sync] 0
+ set nproced [proc_msgs_once $envlist NONE err]
+ error_check_good nproced $nproced 0
+
+ puts "\tRep$tnum.c: Swap master/client"
+ error_check_good downgrade [$env1 rep_start -client] 0
+ error_check_good upgrade [$env2 rep_start -master] 0
+
+ process_msgs $envlist
+
+ puts "\tRep$tnum.d: Run rep_test in new master env"
+ set start $niter
+ eval rep_test $method $env2 NULL $niter $start $start 0 0 $largs
+ process_msgs $envlist
+ #
+ # Delayed client should be different. Former master should be synced.
+ #
+ rep_verify $env2dir $env2 $env1dir $env1
+ rep_verify $env2dir $env2 $delaycldir $dcenv 0 0
+
+ puts "\tRep$tnum.e: Sync delayed client"
+ error_check_good rep_sync [$dcenv rep_sync] 0
+ process_msgs $envlist
+ #
+ # Delayed client should be the same now.
+ #
+ rep_verify $env2dir $env2 $delaycldir $dcenv
+
+ puts "\tRep$tnum.f: Run rep_test after syncup in new master env"
+ set start [expr $start + $niter]
+ eval rep_test $method $env2 NULL $niter $start $start 0 0 $largs
+ process_msgs $envlist
+ #
+ # Delayed client be caught up and running fine.
+ #
+ rep_verify $env2dir $env2 $delaycldir $dcenv
+
+
+ puts "\tRep$tnum.g: Add in a fresh delayed client"
+ repladd 4
+ set fcenv [eval $fc_envcmd $recargs -rep_client]
+ error_check_good client3_env [is_valid_env $fcenv] TRUE
+ error_check_good set_delay [$fcenv rep_config {delayclient on}] 0
+
+ set envlist "{$env1 1} {$env2 2} {$dcenv 3} {$fcenv 4}"
+ process_msgs $envlist
+
+ # Verify that after processing the startup messages, the
+ # new client has no database and unmatched logs.
+ set testfile "test.db"
+ error_check_bad clientdb [file exists $freshcldir/$testfile] 1
+ rep_verify $env2dir $env2 $freshcldir $fcenv 0 0 1 NULL
+
+ puts "\tRep$tnum.h: Sync delayed client"
+ error_check_good rep_sync [$fcenv rep_sync] 0
+ process_msgs $envlist
+ #
+ # Delayed client should be the same now.
+ #
+ rep_verify $env2dir $env2 $freshcldir $fcenv
+
+ puts "\tRep$tnum.i: Closing"
+ error_check_good env1_close [$env1 close] 0
+ error_check_good env2_close [$env2 close] 0
+ error_check_good dc_close [$dcenv close] 0
+ error_check_good fc_close [$fcenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
diff --git a/db/test/rep050.tcl b/db/test/rep050.tcl
new file mode 100644
index 000000000..11b995758
--- /dev/null
+++ b/db/test/rep050.tcl
@@ -0,0 +1,346 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep050.tcl,v 12.10 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep050
+# TEST Replication and delay syncing clients - change master test.
+# TEST
+# TEST Open and start up master and 4 clients. Turn on delay for 3 clients.
+# TEST Switch masters, add data and verify delayed clients are out of date.
+# TEST Make additional changes to master. And change masters again.
+# TEST Sync/update delayed client and verify. The 4th client is a brand
+# TEST new delayed client added in to test the non-verify path.
+# TEST
+# TEST Then test two different things:
+# TEST 1. Swap master again while clients are still delayed.
+# TEST 2. Swap master again while sync is proceeding for one client.
+#
+proc rep050 { method { niter 10 } { tnum "050" } args } {
+ source ./include.tcl
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 5]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($r):\
+ Replication and ($method) delayed syncup."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client 0 logs are [lindex $l 1]"
+ puts "Rep$tnum: Delay Client 1 logs are [lindex $l 2]"
+ puts "Rep$tnum: Delay Client 2 logs are [lindex $l 3]"
+ puts "Rep$tnum: Delay Client 3 logs are [lindex $l 4]"
+ rep050_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep050_sub { method niter tnum logset recargs largs } {
+ global testdir
+ global util_path
+ env_cleanup $testdir
+ set orig_tdir $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set env1dir $testdir/MASTERDIR
+ set env2dir $testdir/CLIENTDIR
+ set delaycldir1 $testdir/DELAYCLDIR.1
+ set delaycldir2 $testdir/DELAYCLDIR.2
+ set delaycldir3 $testdir/DELAYCLDIR.3
+ file mkdir $env1dir
+ file mkdir $env2dir
+ file mkdir $delaycldir1
+ file mkdir $delaycldir2
+ file mkdir $delaycldir3
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set dc1_logtype [lindex $logset 2]
+ set dc2_logtype [lindex $logset 3]
+ set dc3_logtype [lindex $logset 4]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set dc1_logargs [adjust_logargs $dc1_logtype]
+ set dc2_logargs [adjust_logargs $dc2_logtype]
+ set dc3_logargs [adjust_logargs $dc3_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set dc1_txnargs [adjust_txnargs $dc1_logtype]
+ set dc2_txnargs [adjust_txnargs $dc2_logtype]
+ set dc3_txnargs [adjust_txnargs $dc3_logtype]
+
+ #
+ # XXX rep050 delayed syncup but change master:
+ # while client is delayed.
+ # while client is in the middle of delayed sync.
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -errpfx ENV1 \
+ -home $env1dir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
+# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
+# -home $env1dir -rep_transport \[list 1 replsend\]"
+ set env1 [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $env1] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx ENV2 -cachesize {0 2097152 2} \
+ -home $env2dir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -cachesize {0 2097152 2} \
+# -errpfx ENV2 -verbose {rep on} -errfile /dev/stderr \
+# -home $env2dir -rep_transport \[list 2 replsend\]"
+ set env2 [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $env2] TRUE
+
+ repladd 3
+ set dc1_envcmd "berkdb_env_noerr -create $dc1_txnargs \
+ $dc1_logargs -errpfx ENV3 \
+ -home $delaycldir1 -rep_transport \[list 3 replsend\]"
+# set dc1_envcmd "berkdb_env_noerr -create $dc1_txnargs \
+# $dc1_logargs \
+# -errpfx ENV3 -verbose {rep on} -errfile /dev/stderr \
+# -home $delaycldir1 -rep_transport \[list 3 replsend\]"
+ set dc1env [eval $dc1_envcmd $recargs -rep_client]
+ error_check_good client2_env [is_valid_env $dc1env] TRUE
+
+ repladd 4
+ set dc2_envcmd "berkdb_env_noerr -create $dc2_txnargs \
+ $dc2_logargs -errpfx ENV4 \
+ -home $delaycldir2 -rep_transport \[list 4 replsend\]"
+# set dc2_envcmd "berkdb_env_noerr -create $dc2_txnargs \
+# $dc2_logargs \
+# -errpfx ENV4 -verbose {rep on} -errfile /dev/stderr \
+# -home $delaycldir2 -rep_transport \[list 4 replsend\]"
+ set dc2env [eval $dc2_envcmd $recargs -rep_client]
+ error_check_good client3_env [is_valid_env $dc2env] TRUE
+
+ repladd 5
+ set dc3_envcmd "berkdb_env_noerr -create $dc3_txnargs \
+ $dc3_logargs -errpfx ENV5 \
+ -home $delaycldir3 -rep_transport \[list 5 replsend\]"
+# set dc3_envcmd "berkdb_env_noerr -create $dc3_txnargs \
+# $dc3_logargs \
+# -errpfx ENV5 -verbose {rep on} -errfile /dev/stderr \
+# -home $delaycldir3 -rep_transport \[list 5 replsend\]"
+
+ # Bring the clients online by processing the startup messages.
+ # !!!
+ # NOTE: We set up dc3_envcmd but we do not open the env now.
+ # Therefore dc3env is not part of the envlist. However, since
+ # we did the repladd broadcast messages will be sent to it,
+ # but we will replclear before we start the env.
+ #
+ set envlist "{$env1 1} {$env2 2} {$dc1env 3} {$dc2env 4}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Run rep_test in master env."
+ set start 0
+ eval rep_test $method $env1 NULL $niter $start $start 0 0 $largs
+
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Set delayed sync on clients 2 and 3"
+ error_check_good set_delay [$dc1env rep_config {delayclient on}] 0
+ error_check_good set_delay [$dc2env rep_config {delayclient on}] 0
+
+ set oplist { "delayed" "syncing" }
+
+ set masterenv $env1
+ set mid 1
+ set mdir $env1dir
+ set clientenv $env2
+ set cid 2
+ set cdir $env2dir
+ foreach op $oplist {
+ # Swap all the info we need.
+ set tmp $masterenv
+ set masterenv $clientenv
+ set clientenv $tmp
+
+ set tmp $mdir
+ set mdir $cdir
+ set cdir $mdir
+
+ set tmp $mid
+ set mid $cid
+ set cid $tmp
+
+ puts "\tRep$tnum.c: Swap master/client ($op)"
+ error_check_good downgrade [$clientenv rep_start -client] 0
+ error_check_good upgrade [$masterenv rep_start -master] 0
+ process_msgs $envlist
+
+ #
+ # !!!
+ # At this point, clients 2 and 3 should have DELAY set.
+ # We should # probably add a field to rep_stat
+ # to indicate that and test that here..
+ #
+ puts "\tRep$tnum.d: Run rep_test in new master env"
+ set start [expr $start + $niter]
+ eval rep_test $method $env2 NULL $niter $start $start 0 0 $largs
+ process_msgs $envlist
+
+ #
+ # Delayed clients should be different.
+ # Former master should by synced.
+ #
+ rep_verify $mdir $masterenv $cdir $clientenv
+ rep_verify $mdir $masterenv $delaycldir1 $dc1env 0 0
+ rep_verify $mdir $masterenv $delaycldir2 $dc2env 0 0
+
+ #
+ # Run rep_test again, but don't process on former master.
+ # This makes the master/client different from each other.
+ #
+ puts "\tRep$tnum.e: Run rep_test in new master env only"
+ set start [expr $start + $niter]
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ replclear $cid
+ replclear 3
+ replclear 4
+ replclear 5
+
+ puts "\tRep$tnum.f: Start 4th, clean delayed client."
+ set dc3env [eval $dc3_envcmd $recargs -rep_client]
+ error_check_good client4_env [is_valid_env $dc3env] TRUE
+ error_check_good set_delay [$dc3env rep_config \
+ {delayclient on}] 0
+ set envlist "{$env1 1} {$env2 2} {$dc1env 3} \
+ {$dc2env 4} {$dc3env 5}"
+ process_msgs $envlist
+
+ #
+ # Now we have a master at point 1, a former master,
+ # now client at point 2, and two delayed clients at point 3.
+ # If 'delayed' swap masters now, while the clients are
+ # in the delayed state but not syncing yet.
+ # If 'syncing', first call rep_sync, and begin syncing the
+ # clients, then swap masters in the middle of that process.
+ #
+ set nextlet "g"
+ if { $op == "delayed" } {
+ # Swap all the info we need.
+ set tmp $masterenv
+ set masterenv $clientenv
+ set clientenv $tmp
+
+ set tmp $mdir
+ set mdir $cdir
+ set cdir $mdir
+
+ set tmp $mid
+ set mid $cid
+ set cid $tmp
+
+ puts "\tRep$tnum.g: Swap master/client while delayed"
+ set nextlet "h"
+ error_check_good downgrade \
+ [$clientenv rep_start -client] 0
+ error_check_good upgrade \
+ [$masterenv rep_start -master] 0
+ process_msgs $envlist
+ }
+ puts "\tRep$tnum.$nextlet: Run rep_test and sync delayed client"
+ set start [expr $start + $niter]
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ process_msgs $envlist
+ error_check_good rep_sync [$dc1env rep_sync] 0
+ error_check_good rep_sync [$dc3env rep_sync] 0
+ if { $op == "syncing" } {
+ #
+ # Proces messages twice to get us into syncing,
+ # but not enough to complete it. Then swap.
+ #
+ set nproced [proc_msgs_once $envlist NONE err]
+ set nproced [proc_msgs_once $envlist NONE err]
+
+ # Swap all the info we need.
+ set tmp $masterenv
+ set masterenv $clientenv
+ set clientenv $tmp
+
+ set tmp $mdir
+ set mdir $cdir
+ set cdir $mdir
+
+ set tmp $mid
+ set mid $cid
+ set cid $tmp
+
+ puts "\tRep$tnum.h: Swap master/client while syncing"
+ error_check_good downgrade \
+ [$clientenv rep_start -client] 0
+ error_check_good upgrade \
+ [$masterenv rep_start -master] 0
+ }
+ #
+ # Now process all messages and verify.
+ #
+ puts "\tRep$tnum.i: Process all messages and verify."
+ process_msgs $envlist
+
+ #
+ # If we swapped during the last syncing, we need to call
+ # rep_sync again because the master changed again.
+ #
+ if { $op == "syncing" } {
+ error_check_good rep_sync [$dc1env rep_sync] 0
+ error_check_good rep_sync [$dc3env rep_sync] 0
+ process_msgs $envlist
+ }
+
+ #
+ # Delayed client should be the same now.
+ #
+ rep_verify $mdir $masterenv $delaycldir1 $dc1env
+ rep_verify $mdir $masterenv $delaycldir3 $dc3env
+ rep_verify $mdir $masterenv $delaycldir2 $dc2env 0 0
+ error_check_good dc3_close [$dc3env close] 0
+ env_cleanup $delaycldir3
+ set envlist "{$env1 1} {$env2 2} {$dc1env 3} {$dc2env 4}"
+
+ }
+ puts "\tRep$tnum.j: Sync up 2nd delayed client and verify."
+ error_check_good rep_sync [$dc2env rep_sync] 0
+ process_msgs $envlist
+ rep_verify $mdir $masterenv $delaycldir2 $dc2env
+
+ puts "\tRep$tnum.k: Closing"
+ error_check_good env1_close [$env1 close] 0
+ error_check_good env2_close [$env2 close] 0
+ error_check_good dc1_close [$dc1env close] 0
+ error_check_good dc2_close [$dc2env close] 0
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
diff --git a/db/test/rep051.tcl b/db/test/rep051.tcl
new file mode 100644
index 000000000..7308ee5c0
--- /dev/null
+++ b/db/test/rep051.tcl
@@ -0,0 +1,189 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep051.tcl,v 12.9 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep051
+# TEST Test of compaction with replication.
+# TEST
+# TEST Run rep_test in a replicated master environment.
+# TEST Delete a large number of entries and compact with -freespace.
+# TEST Propagate the changes to the client and make sure client and
+# TEST master match.
+
+proc rep051 { method { niter 5000 } { tnum "051" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win9x platform."
+ return
+ }
+
+ # Compaction is an option for btree and recno databases only.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_btree $method] == 1 || [is_recno $method] == 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
+ if { [is_hash $method] == 1 || [is_queue $method] == 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ # Run tests with and without recovery. If we're doing testing
+ # of in-memory logging, skip the combination of recovery
+ # and in-memory logging -- it doesn't make sense.
+ set logsets [create_logsets 2]
+ set saved_args $args
+
+ foreach recopt $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $recopt == "-recover" && $logindex != -1 } {
+ puts "Skipping test with -recover for in-memory logs."
+ continue
+ }
+ set envargs ""
+ set args $saved_args
+ puts "Rep$tnum: Replication with compaction ($method $recopt)."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep051_sub $method \
+ $niter $tnum $envargs $l $recopt $args
+ }
+ }
+}
+
+proc rep051_sub { method niter tnum envargs logset recargs largs } {
+ source ./include.tcl
+ global testdir
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync. Adjust the args for master
+ # and client.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set env_cmd(M) "berkdb_env_noerr -create \
+ -log_max 1000000 $envargs $m_logargs $recargs \
+ -home $masterdir -errpfx MASTER $m_txnargs -rep_master \
+ -rep_transport \[list 1 replsend\]"
+# set env_cmd(M) "berkdb_env_noerr -create \
+# -log_max 1000000 $envargs $m_logargs $recargs \
+# -home $masterdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# -errpfx MASTER $m_txnargs -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 \
+ -log_max 1000000 $envargs $c_logargs $recargs \
+ -home $clientdir -errpfx CLIENT $c_txnargs -rep_client \
+ -rep_transport \[list 2 replsend\]"
+# set env_cmd(C) "berkdb_env_noerr -create \
+# -log_max 1000000 $envargs $c_logargs $recargs \
+# -home $clientdir \
+# -verbose {rep on} -errfile /dev/stderr \
+# -errpfx CLIENT $c_txnargs -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 by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Explicitly create the db handle so we can do deletes,
+ # and also to make the page size small.
+ set testfile "test.db"
+ set omethod [convert_method $method]
+ set db [eval {berkdb_open_noerr -env $masterenv -auto_commit\
+ -pagesize 512 -create -mode 0644} $largs $omethod $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ # Run rep_test in the master and update client.
+ puts "\tRep$tnum.a:\
+ Running rep_test in replicated env ($envargs $recargs)."
+ eval rep_test $method $masterenv $db $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ # Verify that contents match.
+ puts "\tRep$tnum.b: Verifying client database contents."
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ # Delete most entries. Since some of our methods renumber,
+ # delete starting at $niter and working down to 0.
+ puts "\tRep$tnum.c: Remove most entries, by cursor."
+ set count [expr $niter - 1]
+ set n 20
+ set t [$masterenv txn]
+ error_check_good txn [is_valid_txn $t $masterenv] TRUE
+ set txn "-txn $t"
+
+ set dbc [eval {$db cursor} $txn]
+
+ # Leave every nth item.
+ set dbt [$dbc get -first]
+ while { $count > 0 } {
+ if { [expr $count % $n] != 0 } {
+ error_check_good dbc_del [$dbc del] 0
+ }
+ set dbt [$dbc get -next]
+ incr count -1
+ }
+
+ error_check_good dbc_close [$dbc close] 0
+ error_check_good t_commit [$t commit] 0
+
+ # Compact database.
+ puts "\tRep$tnum.d: Compact database."
+ set free1 [stat_field $db stat "Pages on freelist"]
+ set t [$masterenv txn]
+ error_check_good txn [is_valid_txn $t $masterenv] TRUE
+ set txn "-txn $t"
+
+ set ret [eval {$db compact} $txn {-freespace}]
+
+ error_check_good t_commit [$t commit] 0
+ error_check_good db_sync [$db sync] 0
+ set free2 [stat_field $db stat "Pages on freelist"]
+ error_check_good more_free_pages [expr $free2 > $free1] 1
+
+ # Process messages.
+ process_msgs $envlist
+
+ # Reverify.
+ puts "\tRep$tnum.b: Verifying client database contents."
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep052.tcl b/db/test/rep052.tcl
new file mode 100644
index 000000000..4444617f7
--- /dev/null
+++ b/db/test/rep052.tcl
@@ -0,0 +1,223 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep052.tcl,v 12.9 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep052
+# TEST Test of replication with NOWAIT.
+# TEST
+# TEST One master, one client. After initializing
+# TEST everything normally, close client and let the
+# TEST master get ahead -- far enough that the master
+# TEST no longer has the client's last log file.
+# TEST Reopen the client and turn on NOWAIT.
+# TEST Process a few messages to get the client into
+# TEST recovery mode, and verify that lockout occurs
+# TEST on a txn API call (txn_begin) and an env API call.
+# TEST Process all the messages and verify that lockout
+# TEST is over.
+
+proc rep052 { method { niter 200 } { tnum "052" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set saved_args $args
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
+ set saved_args $args
+
+ # Run the body of the test with and without recovery. Skip
+ # recovery with in-memory logging - it doesn't make sense.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ set envargs ""
+ set args $saved_args
+ puts "Rep$tnum ($method $envargs $r $args):\
+ Test lockouts with REP_NOWAIT."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep052_sub $method $niter $tnum $envargs \
+ $l $r $args
+ }
+ }
+}
+
+proc rep052_sub { method niter tnum envargs logset recargs largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max $envargs \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max $envargs \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max $envargs \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max $envargs \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run rep_test in the master (and update client).
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ # Find out what exists on the client before closing. We'll need
+ # to loop until the first master log file > last client log file.
+ set last_client_log [get_logfile $clientenv last]
+
+ puts "\tRep$tnum.b: Close client."
+ error_check_good client_close [$clientenv close] 0
+
+ # Find out what exists on the client. We need to loop until
+ # the first master log file > last client log file.
+
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test \
+ $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory" } {
+ set res \
+ [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ # Make sure we have a gap between the last client log and
+ # the first master log. This is easy with on-disk logs, since
+ # we archive, but will take longer with in-memory logging.
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ puts "\tRep$tnum.e: Reopen client."
+ env_cleanup $clientdir
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2}"
+
+ # Turn on nowait.
+ $clientenv rep_config {nowait on}
+
+ # Process messages a few times, just enough to get client
+ # into lockout/recovery mode, but not enough to complete recovery.
+ set iter 4
+ for { set i 0 } { $i < $iter } { incr i } {
+ set nproced [proc_msgs_once $envlist NONE err]
+ }
+
+ puts "\tRep$tnum.f: Verify we are locked out of txn API calls."
+ if { [catch { set txn [$clientenv txn] } res] } {
+ error_check_good txn_lockout [is_substr $res "locked out"] 1
+ } else {
+ error_check_good txn_no_lockout [$txn commit] 0
+ puts "FAIL: Not locked out of txn API calls: $res"
+ }
+
+ puts "\tRep$tnum.g: Verify we are locked out of env API calls."
+ if { [catch { set stat [$clientenv lock_stat] } res] } {
+ error_check_good env_lockout [is_substr $res "locked out"] 1
+ } else {
+ puts "FAIL: Not locked out of env API calls: $res"
+ }
+
+ # Now catch up and make sure we're not locked out anymore.
+ process_msgs $envlist
+
+ puts "\tRep$tnum.h: No longer locked out of txn API calls."
+ if { [catch { set txn [$clientenv txn] } res] } {
+ puts "FAIL: unable to start txn: $res"
+ } else {
+ error_check_good txn_no_lockout [$txn commit] 0
+ }
+
+ puts "\tRep$tnum.i: No longer locked out of env API calls."
+ if { [catch { set stat [$clientenv rep_stat] } res] } {
+ puts "FAIL: unable to make env call: $res"
+ }
+
+ puts "\tRep$tnum.h: Verify logs and databases"
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep053.tcl b/db/test/rep053.tcl
new file mode 100644
index 000000000..bdfbda5dc
--- /dev/null
+++ b/db/test/rep053.tcl
@@ -0,0 +1,194 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep053.tcl,v 12.13 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep053
+# TEST Replication and basic client-to-client synchronization.
+# TEST
+# TEST Open and start up master and 1 client.
+# TEST Start up a second client later and verify it sync'ed from
+# TEST the original client, not the master.
+#
+proc rep053 { method { niter 200 } { tnum "053" } args } {
+ source ./include.tcl
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 3]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ set throttle { "throttle" "" }
+ foreach r $test_recopts {
+ foreach t $throttle {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $t):\
+ Replication and client-to-client syncup."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ puts "Rep$tnum: Client2 logs are [lindex $l 2]"
+ rep053_sub $method $niter $tnum $l $r $t $args
+ }
+ }
+ }
+}
+
+proc rep053_sub { method niter tnum logset recargs throttle largs } {
+ global anywhere
+ global testdir
+ global util_path
+ env_cleanup $testdir
+ set orig_tdir $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set delaycldir1 $testdir/DELAYCLDIR.1
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $delaycldir1
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set c2_logtype [lindex $logset 2]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c2_logargs [adjust_logargs $c2_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set c2_txnargs [adjust_txnargs $c2_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -errpfx MASTER \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -errpfx MASTER \
+# -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx CLIENT \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -errpfx CLIENT \
+# -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # If throttling is specified, turn it on here. Throttle the
+ # client, since this is a test of client-to-client sync up.
+ if { $throttle == "throttle" } {
+ error_check_good \
+ throttle [$clientenv rep_limit 0 [expr 32 * 1024]] 0
+ }
+
+ #
+ # Set up delayed client command, but don't eval until later.
+ # !!! Do NOT put the 'repladd' call here because we don't
+ # want this client to already have the backlog of records
+ # when it starts.
+ #
+ set dc1_envcmd "berkdb_env_noerr -create $c2_txnargs \
+ $c2_logargs -errpfx DELAYCL \
+ -home $delaycldir1 -rep_transport \[list 3 replsend\]"
+# set dc1_envcmd "berkdb_env_noerr -create $c2_txnargs \
+# $c2_logargs -errpfx DELAYCL \
+# -verbose {rep on} -errfile /dev/stderr \
+# -home $delaycldir1 -rep_transport \[list 3 replsend\]"
+
+ # Bring the client online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Run rep_test in master env."
+ set start 0
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Start new client."
+ set anywhere 1
+ repladd 3
+ set newclient [eval $dc1_envcmd $recargs -rep_client]
+ error_check_good client2_env [is_valid_env $newclient] TRUE
+
+ set envlist "{$masterenv 1} {$clientenv 2} {$newclient 3}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.c: Verify sync-up from client."
+ set req [stat_field $clientenv rep_stat "Client service requests"]
+ set miss [stat_field $clientenv rep_stat "Client service req misses"]
+ set rereq [stat_field $newclient rep_stat "Client rerequests"]
+ #
+ # The original client should have received at least one request for
+ # service from the new client. Since this is a fully operational
+ # client, there should be no misses and more than one request only
+ # if we are throttling.
+ #
+ if { $throttle == "throttle" } {
+ error_check_good req [expr $req > 1] 1
+ } else {
+ error_check_good req $req 1
+ }
+ error_check_good miss $miss 0
+ error_check_good rereq $rereq 0
+
+ # Check for throttling.
+ if { $throttle == "throttle" } {
+ set num_throttles \
+ [stat_field $clientenv rep_stat "Transmission limited"]
+ error_check_bad client_throttling $num_throttles 0
+ }
+
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+ # Process messages again in case we are running with debug_rop.
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $delaycldir1 $newclient
+
+ puts "\tRep$tnum.d: Run rep_test more in master env and verify."
+ set niter 10
+ eval rep_test $method $masterenv NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $delaycldir1 $newclient
+
+ puts "\tRep$tnum.e: Closing"
+ error_check_good master_close [$masterenv close] 0
+ error_check_good client_close [$clientenv close] 0
+ error_check_good dc1_close [$newclient close] 0
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ set anywhere 0
+ return
+}
diff --git a/db/test/rep054.tcl b/db/test/rep054.tcl
new file mode 100644
index 000000000..64d1af624
--- /dev/null
+++ b/db/test/rep054.tcl
@@ -0,0 +1,257 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep054.tcl,v 1.9 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep054
+# TEST Test of internal initialization where a far-behind
+# TEST client takes over as master.
+# TEST
+# TEST One master, two clients.
+# TEST Run rep_test and process.
+# TEST Close client 1.
+# TEST Run rep_test, opening new databases, and processing
+# TEST messages. Archive as we go so that log files get removed.
+# TEST Close master and reopen client 1 as master. Process messages.
+# TEST Verify that new master and client are in sync.
+# TEST Run rep_test again, adding data to one of the new
+# TEST named databases.
+
+proc rep054 { method { nentries 200 } { tnum "054" } args } {
+ source ./include.tcl
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 3]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $args): Internal\
+ initialization test: far-behind client\
+ becomes master."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ puts "Rep$tnum: Client2 logs are [lindex $l 2]"
+
+ rep054_sub $method $nentries $tnum $l $r $args
+ }
+ }
+}
+
+proc rep054_sub { method nentries tnum logset recargs largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+ set omethod [convert_method $method]
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR2
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+ set c2_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+ set c2_logtype [lindex $logset 2]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c2_logargs [adjust_logargs $c2_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+ set c2_txnargs [adjust_txnargs $c2_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Open 2nd client
+ repladd 3
+ set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
+ $c2_logargs -log_max $log_max \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env_noerr -create $c2_txnargs \
+# $c2_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT2 \
+# -home $clientdir2 -rep_transport \[list 3 replsend\]"
+ set clientenv2 [eval $cl2_envcmd $recargs -rep_client]
+ error_check_good client2_env [is_valid_env $clientenv2] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2} {$clientenv2 3}"
+ process_msgs $envlist
+
+ # Run rep_test in the master and in each client.
+ puts "\tRep$tnum.a: Running rep_test in master & clients."
+ set start 0
+ eval rep_test $method $masterenv NULL $nentries $start $start 0 0 $largs
+ incr start $nentries
+ process_msgs $envlist
+
+ # Master is in sync with both clients.
+ rep_verify $masterdir $masterenv $clientdir $clientenv
+ # Process messages again in case we are running with debug_rop.
+ process_msgs $envlist
+ rep_verify $masterdir $masterenv $clientdir2 $clientenv2
+
+ # Identify last log on client, then close. Loop until the first
+ # master log file is greater than the last client log file.
+ set last_client_log [get_logfile $clientenv last]
+
+ puts "\tRep$tnum.b: Close client 1."
+ error_check_good client_close [$clientenv close] 0
+ set envlist "{$masterenv 1} {$clientenv2 3}"
+
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $nentries \
+ $start $start 0 0 $largs
+ incr start $nentries
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ if { $m_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ # Make sure we have a gap between the last client log and
+ # the first master log.
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ # Create a database that does not even exist on client 1.
+ set newfile "newtest.db"
+ set newdb [eval {berkdb_open_noerr -env $masterenv -create \
+ -auto_commit -mode 0644} $largs $omethod $newfile]
+ error_check_good newdb_open [is_valid_db $newdb] TRUE
+ eval rep_test $method $masterenv $newdb $nentries $start $start 0 0 $largs
+ set start [expr $start + $nentries]
+ process_msgs $envlist
+
+ # Identify last master log file.
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ set last_master_log [get_logfile $masterenv last]
+ set stop 0
+
+ # Send the master and client2 far ahead of client 1. Archive
+ # so there will be a gap between the log files of the closed
+ # client and the active master and client and we've
+ # archived away the creation of the new database.
+ puts "\tRep$tnum.e: Running rep_test in master & remaining client."
+ while { $stop == 0 } {
+
+ eval rep_test \
+ $method $masterenv NULL $nentries $start $start 0 0 $largs
+ incr start $nentries
+
+ process_msgs $envlist
+
+ puts "\tRep$tnum.f: Send master ahead of closed client."
+ if { $m_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ }
+ if { $c2_logtype != "in-memory" } {
+ set res [eval exec $util_path/db_archive -d -h $clientdir2]
+ }
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_master_log } {
+ set stop 1
+ }
+ }
+ process_msgs $envlist
+
+ # Master is in sync with client 2.
+ rep_verify $masterdir $masterenv $clientdir2 $clientenv2 1
+
+ # Close master.
+ puts "\tRep$tnum.g: Close master."
+ error_check_good newdb_close [$newdb close] 0
+ error_check_good close_master [$masterenv close] 0
+
+ # The new database is still there.
+ error_check_good newfile_exists [file exists $masterdir/$newfile] 1
+
+ puts "\tRep$tnum.h: Reopen client1 as master."
+ replclear 2
+ set newmasterenv [eval $cl_envcmd $recargs -rep_master]
+ error_check_good newmasterenv [is_valid_env $newmasterenv] TRUE
+
+ puts "\tRep$tnum.i: Reopen master as client."
+ set oldmasterenv [eval $ma_envcmd $recargs -rep_client]
+ error_check_good oldmasterenv [is_valid_env $oldmasterenv] TRUE
+ set envlist "{$oldmasterenv 1} {$newmasterenv 2} {$clientenv2 3}"
+
+ puts "\tRep$tnum.j: Verify error."
+ process_msgs $envlist 0 NONE err
+ error_check_bad err $err 0
+ error_check_good errchk [is_substr $err "Client too far ahead"] 1
+
+ error_check_good newmasterenv_close [$newmasterenv close] 0
+ error_check_good oldmasterenv_close [$oldmasterenv close] 0
+ error_check_good clientenv2_close [$clientenv2 close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep055.tcl b/db/test/rep055.tcl
new file mode 100644
index 000000000..23a0308b3
--- /dev/null
+++ b/db/test/rep055.tcl
@@ -0,0 +1,209 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep055.tcl,v 1.8 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep055
+# TEST Test of internal initialization and log archiving.
+# TEST
+# TEST One master, one client.
+# TEST Generate several log files.
+# TEST Remove old master log files and generate several more.
+# TEST Get list of archivable files from db_archive and restart client.
+# TEST As client is in the middle of internal init, remove
+# TEST the log files returned earlier by db_archive.
+#
+proc rep055 { method { niter 200 } { tnum "055" } args } {
+
+ source ./include.tcl
+ global mixed_mode_logging
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ # This test is all about log archive issues, so don't run with
+ # in-memory logging.
+ if { $mixed_mode_logging > 0 } {
+ puts "Rep$tnum: Skipping for mixed-mode logging."
+ return
+ }
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning.
+ set opts { clean noclean }
+ foreach r $test_recopts {
+ foreach c $opts {
+ puts "Rep$tnum ($method $r $c $args):\
+ Test of internal initialization."
+ rep055_sub $method $niter $tnum $r $c $args
+
+ }
+ }
+}
+
+proc rep055_sub { method niter tnum recargs opts largs } {
+ global testdir
+ global passwd
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create -txn nosync \
+ -log_buffer $log_buf -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create -txn nosync \
+# -log_buffer $log_buf -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create -txn nosync \
+ -log_buffer $log_buf -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create -txn nosync \
+# -log_buffer $log_buf -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run rep_test in the master (and update client).
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Close client."
+ error_check_good client_close [$clientenv close] 0
+
+ # Find out what exists on the client. We need to loop until
+ # the first master log file > last client log file.
+ # This forces internal init to happen.
+
+ set res [eval exec $util_path/db_archive -l -h $clientdir]
+ set last_client_log [lindex [lsort $res] end]
+ set stop 0
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.c: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ if { [lsearch -exact $res $last_client_log] == -1 } {
+ set stop 1
+ }
+ }
+
+ # Find out what exists on the master. We need to loop until
+ # the master log changes. This is required so that we can
+ # have a log_archive waiting to happen.
+ #
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ set last_master_log [lindex [lsort $res] end]
+ set stop 0
+ puts "\tRep$tnum.e: Move master logs forward again."
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ replclear 2
+
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ set last_log [lindex [lsort $res] end]
+ if { $last_log != $last_master_log } {
+ set stop 1
+ }
+ }
+
+ puts "\tRep$tnum.f: Get list of files for removal."
+ set logs [eval exec $util_path/db_archive -h $masterdir]
+
+ puts "\tRep$tnum.g: Reopen client ($opts)."
+ if { $opts == "clean" } {
+ env_cleanup $clientdir
+ }
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ #
+ # Process messages once to get partially through internal init.
+ #
+ proc_msgs_once $envlist NONE err
+
+ if { $opts != "clean" } {
+ puts "\tRep$tnum.g.1: Trigger log request"
+ #
+ # When we don't clean, starting the client doesn't
+ # trigger any events. We need to generate some log
+ # records so that the client requests the missing
+ # logs and that will trigger it.
+ #
+ set entries 10
+ eval rep_test $method $masterenv NULL $entries $niter 0 0 0 $largs
+ #
+ # Process messages three times to get us into internal init
+ # but not enough to get us all the way through it.
+ #
+ proc_msgs_once $envlist NONE err
+ proc_msgs_once $envlist NONE err
+ proc_msgs_once $envlist NONE err
+ }
+
+ #
+ # Now in the middle of internal init, remove the log files
+ # db_archive reported earlier.
+ #
+ foreach l $logs {
+ fileremove -f $masterdir/$l
+ }
+ #
+ # Now finish processing all the messages.
+ #
+ process_msgs $envlist 0 NONE err
+ puts "\tRep$tnum.h: Verify logs and databases"
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep056.tcl b/db/test/rep056.tcl
new file mode 100644
index 000000000..ab7eb63c0
--- /dev/null
+++ b/db/test/rep056.tcl
@@ -0,0 +1,23 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep056.tcl,v 1.6 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep056
+# TEST Replication test with in-memory named databases.
+# TEST
+# TEST Rep056 is just a driver to run rep001 with in-memory
+# TEST named databases.
+
+proc rep056 { method args } {
+ source ./include.tcl
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ eval { rep001 $method 1000 "056" } $args
+}
diff --git a/db/test/rep057.tcl b/db/test/rep057.tcl
new file mode 100644
index 000000000..ab4e31eb6
--- /dev/null
+++ b/db/test/rep057.tcl
@@ -0,0 +1,24 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep057.tcl,v 1.6 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep057
+# TEST Replication test of internal initialization with
+# TEST in-memory named databases.
+# TEST
+# TEST Rep057 is just a driver to run rep029 with in-memory
+# TEST named databases.
+
+proc rep057 { method args } {
+ source ./include.tcl
+
+ # Valid for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ eval { rep029 $method 1000 "057" } $args
+}
diff --git a/db/test/rep058.tcl b/db/test/rep058.tcl
new file mode 100644
index 000000000..f1ad631ee
--- /dev/null
+++ b/db/test/rep058.tcl
@@ -0,0 +1,133 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep058.tcl,v 12.8 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep058
+# TEST
+# TEST Replication with early databases
+# TEST
+# TEST Mimic an application where they create a database before
+# TEST calling rep_start, thus writing log records on a client
+# TEST before it is a client. Verify we cannot join repl group.
+
+proc rep058 { method { tnum "058" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # There should be no difference with methods. Just use btree.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
+ if { [is_btree $method] == 0 } {
+ puts "Rep058: Skipping for method $method."
+ return
+ }
+
+ set args [convert_args $method $args]
+
+ set logsets [create_logsets 2]
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping test with -recover for\
+ in-memory logs."
+ continue
+ }
+
+ puts "Rep$tnum ($method $r): Replication with \
+ pre-created databases."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep058_sub $method $tnum $l $r $args
+ }
+ }
+}
+
+proc rep058_sub { method tnum logset recargs largs } {
+ global testdir
+ source ./include.tcl
+ set orig_tdir $testdir
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ env_cleanup $testdir
+ replsetup $testdir/MSGQUEUEDIR
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync. Adjust the args for master
+ # and client.
+ set m_logargs [adjust_logargs $m_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ set omethod [convert_method $method]
+
+ # Open a master.
+ repladd 1
+ set envcmd(M) "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -lock_detect default \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set envcmd(M) "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -lock_detect default \
+# -errpfx ENV.M -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set menv [eval $envcmd(M) $recargs]
+ error_check_good master_env0 [is_valid_env $menv] TRUE
+
+ # Open a client
+ repladd 2
+ set envcmd(C) "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -lock_detect default \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set envcmd(C) "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -lock_detect default \
+# -errpfx ENV.C -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set cenv [eval $envcmd(C) $recargs]
+ error_check_good client_env [is_valid_env $cenv] TRUE
+
+ puts "\tRep$tnum.a: Create same database in both envs."
+ set dbname "test.db"
+ set mdb [eval {berkdb_open_noerr -env $menv -create \
+ -auto_commit -mode 0644} -btree $dbname]
+ error_check_good open [is_valid_db $mdb] TRUE
+ set cdb [eval {berkdb_open_noerr -env $cenv -create \
+ -auto_commit -mode 0644} -btree $dbname]
+ error_check_good open [is_valid_db $cdb] TRUE
+
+ puts "\tRep$tnum.b: Start master and client now."
+ error_check_good master [$menv rep_start -master] 0
+ error_check_good client [$cenv rep_start -client] 0
+
+ set envlist "{$menv 1} {$cenv 2}"
+ process_msgs $envlist 0 NONE err
+ error_check_good msg_err [is_substr $err "never part of"] 1
+
+ puts "\tRep$tnum.c: Clean up."
+ error_check_good cdb_close [$cdb close] 0
+ error_check_good cdb_close [$mdb close] 0
+
+ error_check_good menv_close [$menv close] 0
+ error_check_good cenv_close [$cenv close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
+
diff --git a/db/test/rep059.tcl b/db/test/rep059.tcl
new file mode 100644
index 000000000..0f9cd13da
--- /dev/null
+++ b/db/test/rep059.tcl
@@ -0,0 +1,123 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep059.tcl,v 1.7 2006/09/08 20:32:18 bostic Exp $
+#
+# TEST rep059
+# TEST
+# TEST Replication with multiple recycle records.
+# TEST
+# TEST Mimic an application where a client has multiple recycle records
+# TEST only in its log and then tries to synchronize. This has been
+# TEST a problem because there is real log, but no perm records to
+# TEST match on.
+#
+proc rep059 { method { tnum "059" } args } {
+ global testdir
+ source ./include.tcl
+ set orig_tdir $testdir
+
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+ # There should be no difference with methods. Just use btree.
+ #
+ if { $checking_valid_methods }
+ set test_methods { btree }
+ return $test_methods
+ }
+ if { [is_btree $method] == 0 } {
+ puts "Rep059: Skipping for method $method."
+ return
+ }
+
+ set largs [convert_args $method $args]
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR2
+
+ env_cleanup $testdir
+ replsetup $testdir/MSGQUEUEDIR
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ set omethod [convert_method $method]
+
+ # Open a master.
+ repladd 1
+ set envcmd(M) "berkdb_env_noerr -create -txn nosync\
+ -lock_detect default \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set envcmd(M) "berkdb_env_noerr -create -txn nosync \
+# -lock_detect default \
+# -errpfx ENV.M -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set menv [eval $envcmd(M)]
+ error_check_good master_env0 [is_valid_env $menv] TRUE
+
+ # Open a client
+ repladd 2
+ set envcmd(C) "berkdb_env_noerr -create -txn nosync \
+ -lock_detect default \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set envcmd(C) "berkdb_env_noerr -create -txn nosync \
+# -lock_detect default \
+# -errpfx ENV.C -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set cenv [eval $envcmd(C)]
+ error_check_good client_env [is_valid_env $cenv] TRUE
+
+ # Open a 2nd client
+ repladd 3
+ set envcmd(C2) "berkdb_env_noerr -create -txn nosync \
+ -lock_detect default \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set envcmd(C2) "berkdb_env_noerr -create -txn nosync \
+# -lock_detect default \
+# -errpfx ENV.C2 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir2 -rep_transport \[list 3 replsend\]"
+ set c2env [eval $envcmd(C2)]
+ error_check_good client2_env [is_valid_env $c2env] TRUE
+
+ #
+ # Set test location, then start as master and client
+ # This test hook will cause the master to return after
+ # writing the txn_recycle record in rep_start, but
+ # before writing the checkpoint, so that we have some
+ # log, but no perm records in the log when the new
+ # master takes over.
+ #
+ $menv test copy recycle
+
+ puts "\tRep$tnum.a: Start master and 2 clients."
+ error_check_good master [$menv rep_start -master] 0
+ error_check_good client [$cenv rep_start -client] 0
+ error_check_good client2 [$c2env rep_start -client] 0
+
+ set envlist "{$menv 1} {$cenv 2} {$c2env 3}"
+ process_msgs $envlist
+
+ # Pretend master crashes. Just close it and
+ # don't use it anymore.
+ error_check_good menv_close [$menv close] 0
+
+ puts "\tRep$tnum.b: Make client1 master."
+ set cenv [eval $envcmd(C) -rep_master]
+ set envlist "{$cenv 2} {$c2env 3}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.c: Clean up."
+
+ error_check_good cenv_close [$cenv close] 0
+ error_check_good c2env_close [$c2env close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
+
diff --git a/db/test/rep060.tcl b/db/test/rep060.tcl
new file mode 100644
index 000000000..2c3d051a5
--- /dev/null
+++ b/db/test/rep060.tcl
@@ -0,0 +1,303 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep060.tcl,v 12.7 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep060
+# TEST Test of normally running clients and internal initialization.
+# TEST Have a client running normally, but slow/far behind the master.
+# TEST Then the master checkpoints and archives, causing the client
+# TEST to suddenly be thrown into internal init. This test tests
+# TEST that we clean up the old files/pages in mpool and dbreg.
+# TEST Also test same thing but the app holding an open dbp as well.
+#
+proc rep060 { method { niter 200 } { tnum "060" } args } {
+
+ source ./include.tcl
+
+ # Run for btree and queue only.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_btree $method] == 1 || [is_queue $method] == 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
+ if { [is_btree $method] != 1 && [is_queue $method] != 1 } {
+ puts "Skipping rep060 for method $method."
+ return
+ }
+
+ set args [convert_args $method $args]
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning. Skip recovery with in-memory
+ # logging - it doesn't make sense.
+ #
+ # 'user' means that the "app" (the test in this case) has
+ # its own handle open to the database.
+ set opts { "" user }
+ foreach r $test_recopts {
+ foreach o $opts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $o $args): Test of\
+ internal initialization and slow client."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep060_sub $method $niter $tnum $l $r $o $args
+ }
+ }
+ }
+}
+
+proc rep060_sub { method niter tnum logset recargs opt largs } {
+ source ./include.tcl
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx MASTER \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Set a low limit so that there are lots of reps between
+ # master and client. This allows greater control over
+ # the test.
+ error_check_good thr [$masterenv rep_limit 0 [expr 10 * 1024]] 0
+
+ # It is *key* to this test that we have a database handle
+ # open for the duration of the test. The problem this
+ # test checks for regards internal init when there are open
+ # database handles around.
+ #
+ set dbname "test.db"
+ set omethod [convert_method $method]
+ set db [eval {berkdb_open_noerr -env $masterenv -auto_commit \
+ -create -mode 0644} $largs $omethod $dbname]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Put some data into the database
+ puts "\tRep$tnum.a: Run rep_test in master env."
+ set start 0
+ eval rep_test $method $masterenv $db $niter $start $start 0 0 $largs
+ incr start $niter
+
+ set stop 0
+ set endlog 10
+ while { $stop == 0 } {
+ # Run test in the master (don't update client).
+ eval rep_test $method \
+ $masterenv $db $niter $start $start 0 0 $largs
+ incr start $niter
+
+ if { $m_logtype != "in-memory" } {
+ set res \
+ [eval exec $util_path/db_archive -l -h $masterdir]
+ }
+ # Make sure the master has gone as far as we requested.
+ set last_master_log [get_logfile $masterenv last]
+ if { $last_master_log > $endlog } {
+ set stop 1
+ }
+ }
+
+ # Open a client
+ puts "\tRep$tnum.c: Open client."
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ set stop 0
+ set client_endlog 5
+ set last_client_log 0
+ set nproced 0
+ incr nproced [proc_msgs_once $envlist NONE err]
+ incr nproced [proc_msgs_once $envlist NONE err]
+
+ puts "\tRep$tnum.d: Client catches up partway."
+ error_check_good ckp [$masterenv txn_checkpoint] 0
+
+ # We have checkpointed on the master, but we want to get the
+ # client a healthy way through the logs before archiving on
+ # the master.
+ while { $stop == 0 } {
+ set nproced 0
+ incr nproced [proc_msgs_once $envlist NONE err]
+ if { $nproced == 0 } {
+ error_check_good \
+ ckp [$masterenv txn_checkpoint -force] 0
+ }
+
+ # Stop processing when the client is partway through.
+ if { $c_logtype != "in-memory" } {
+ set res \
+ [eval exec $util_path/db_archive -l -h $clientdir]
+ }
+ set last_client_log [get_logfile $clientenv last]
+ set first_client_log [get_logfile $clientenv first]
+ if { $last_client_log > $client_endlog } {
+ set stop 1
+ }
+ }
+
+ #
+ # The user may have the database open itself.
+ #
+ if { $opt == "user" } {
+ set cdb [eval {berkdb_open_noerr -env} $clientenv $dbname]
+ error_check_good dbopen [is_valid_db $cdb] TRUE
+ set ccur [$cdb cursor]
+ error_check_good curs [is_valid_cursor $ccur $cdb] TRUE
+ set ret [$ccur get -first]
+ set kd [lindex $ret 0]
+ set key [lindex $kd 0]
+ error_check_good cclose [$ccur close] 0
+ } else {
+ set cdb NULL
+ }
+
+ # Now that the client is well on its way of normal processing,
+ # simply fairly far behind the master, archive on the master,
+ # removing the log files the client needs, sending it into
+ # internal init with the database pages reflecting the client's
+ # current LSN.
+ #
+ puts "\tRep$tnum.e: Force internal initialization."
+ if { $m_logtype != "in-memory" } {
+ puts "\tRep$tnum.e1: Archive on master."
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ } else {
+ # Master is in-memory, and we'll need a different
+ # technique to create the gap forcing internal init.
+ puts "\tRep$tnum.e1: Run rep_test until gap is created."
+ set stop 0
+ while { $stop == 0 } {
+ eval rep_test $method $masterenv \
+ NULL $niter $start $start 0 0 $largs
+ incr start $niter
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+ }
+
+ puts "\tRep$tnum.f: Process messages."
+ if { $opt == "user" } {
+ for { set loop 0 } { $loop < 5 } { incr loop } {
+ set nproced 0
+ incr nproced [proc_msgs_once $envlist]
+ if { $cdb == "NULL" } {
+ continue
+ }
+ puts "\tRep$tnum.g.$loop: Check user database."
+ set status [catch {$cdb get $key} ret]
+ if { $status != 0 } {
+ #
+ # For db operations, DB doesn't block, but
+ # returns DEADLOCK.
+ #
+ set is_lock [is_substr $ret DB_LOCK_DEADLOCK]
+ set is_dead [is_substr $ret DB_REP_HANDLE_DEAD]
+ error_check_good lock_dead \
+ [expr $is_lock || $is_dead] 1
+ if { $is_dead } {
+ error_check_good cclose [$cdb close] 0
+ set cdb NULL
+ }
+ }
+ }
+ }
+ process_msgs $envlist
+
+ #
+ # If we get through the user loop with a valid db, then it better
+ # be a dead handle after we've completed processing all the
+ # messages and running recovery.
+ #
+ if { $cdb != "NULL" } {
+ puts "\tRep$tnum.h: Check dead handle."
+ set status [catch {$cdb get $key} ret]
+ error_check_good status $status 1
+ error_check_good is_dead [is_substr $ret DB_REP_HANDLE_DEAD] 1
+ error_check_good cclose [$cdb close] 0
+ puts "\tRep$tnum.i: Verify correct internal initialization."
+ } else {
+ puts "\tRep$tnum.h: Verify correct internal initialization."
+ }
+ error_check_good close [$db close] 0
+ process_msgs $envlist
+
+ # We have now forced an internal initialization. Verify it is correct.
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ check_log_location $masterenv
+ check_log_location $clientenv
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep061.tcl b/db/test/rep061.tcl
new file mode 100644
index 000000000..1a0fa73f4
--- /dev/null
+++ b/db/test/rep061.tcl
@@ -0,0 +1,375 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep061.tcl,v 1.4 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep061
+# TEST Test of internal initialization multiple files and pagesizes
+# TEST with page gaps.
+# TEST
+# TEST One master, one client.
+# TEST Generate several log files.
+# TEST Remove old master log files.
+# TEST Delete client files and restart client.
+# TEST Put one more record to the master.
+# TEST Force some page messages to get dropped.
+#
+proc rep061 { method { niter 500 } { tnum "061" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for btree and queue only.
+ if { $checking_valid_methods } {
+ set test_methods {}
+ foreach method $valid_methods {
+ if { [is_btree $method] == 1 || [is_queue $method] == 1 } {
+ lappend test_methods $method
+ }
+ }
+ return $test_methods
+ }
+ if { [is_btree $method] != 1 && [is_queue $method] != 1 } {
+ puts "Skipping rep061 for method $method."
+ return
+ }
+ set args [convert_args $method $args]
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning.
+ set opts { noclean clean bulk }
+ # Try varying drop percentages.
+ set dpct { 10 5 }
+ foreach r $test_recopts {
+ foreach c $opts {
+ foreach l $logsets {
+ foreach d $dpct {
+ set logindex [lsearch -exact $l \
+ "in-memory"]
+ if { $r == "-recover" && \
+ $logindex != -1 } {
+ puts "Skipping rep$tnum \
+ for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r $c):\
+ Internal initialization - with\
+ $d pct page gaps."
+ puts "Rep$tnum: Master logs are \
+ [lindex $l 0]"
+ puts "Rep$tnum: Client logs are \
+ [lindex $l 1]"
+ rep061_sub $method $niter $tnum \
+ $l $r $c $d $args
+ }
+ }
+ }
+ }
+}
+
+proc rep061_sub { method niter tnum logset recargs opts dpct largs } {
+ global testdir
+ global util_path
+ global drop drop_msg
+ global startup_done
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ #
+ # Note that by setting these 2 globals below, message dropping
+ # is automatically enabled. By setting 'drop' to 0, further
+ # down in the test, we disable message dropping.
+ #
+ set drop 1
+ set drop_msg [expr 100 / $dpct]
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set maxpg 16384
+ set log_buf [expr $maxpg * 2]
+ set log_max [expr $log_buf * 4]
+ set cache [expr $maxpg * 32 ]
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ -log_buffer $log_buf -log_max $log_max \
+ -cachesize { 0 $cache 1 } \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# -log_buffer $log_buf -log_max $log_max \
+# -cachesize { 0 $cache 1 }\
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ -log_buffer $log_buf -log_max $log_max \
+ -cachesize { 0 $cache 1 }\
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# -log_buffer $log_buf -log_max $log_max \
+# -cachesize { 0 $cache 1 }\
+# -verbose {rep on} -errpfx CLIENT \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ #
+ # Since we're dropping messages, set the rerequest values
+ # lower so we don't wait too long to request what we're
+ # missing.
+ #
+ $clientenv rep_request 2 8
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Run rep_test in the master (and update client).
+ set startpgsz 512
+ set pglist ""
+ for { set pgsz $startpgsz } { $pgsz <= $maxpg } \
+ { set pgsz [expr $pgsz * 2] } {
+ lappend pglist $pgsz
+ }
+ set nfiles [llength $pglist]
+ puts "\tRep$tnum.a.0: Running rep_test $nfiles times in replicated env."
+ set dbopen ""
+ for { set i 0 } { $i < $nfiles } { incr i } {
+ set mult [expr $i * 10]
+ set nentries [expr $niter + $mult]
+ set pagesize [lindex $pglist $i]
+ set largs " -pagesize $pagesize "
+ eval rep_test $method $masterenv NULL $nentries $mult $mult \
+ 0 0 $largs
+ process_msgs $envlist
+
+ #
+ # Everytime we run 'rep_test' we create 'test.db'. So
+ # rename it each time through the loop.
+ #
+ set old "test.db"
+ set new "test.$i.db"
+ error_check_good rename [$masterenv dbrename \
+ -auto_commit $old $new] 0
+ process_msgs $envlist
+ #
+ # We want to keep some databases open so that we test the
+ # code finding the files in the data dir as well as finding
+ # them in dbreg list.
+ #
+ if { [expr $i % 2 ] == 0 } {
+ set db [berkdb_open_noerr -env $masterenv $new]
+ error_check_good dbopen.$i [is_valid_db $db] TRUE
+ lappend dbopen $db
+ }
+ }
+ #
+ # Set up a few special databases too. We want one with a subdatabase
+ # and we want an empty database.
+ #
+ set testfile "test.db"
+ if { [is_queue $method] } {
+ set sub ""
+ } else {
+ set sub "subdb"
+ }
+ set omethod [convert_method $method]
+ set largs " -pagesize $maxpg "
+ set largs [convert_args $method $largs]
+ set emptyfile "empty.db"
+ #
+ # Create/close an empty database.
+ #
+ set db [eval {berkdb_open_noerr -env $masterenv -auto_commit -create \
+ -mode 0644} $largs $omethod $emptyfile]
+ error_check_good emptydb [is_valid_db $db] TRUE
+ error_check_good empty_close [$db close] 0
+ #
+ # Keep this subdb (regular if queue) database open.
+ # We need it a few times later on.
+ #
+ set db [eval {berkdb_open_noerr -env $masterenv -auto_commit -create \
+ -mode 0644} $largs $omethod $testfile $sub]
+ error_check_good subdb [is_valid_db $db] TRUE
+ eval rep_test $method $masterenv $db $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ puts "\tRep$tnum.b: Close client."
+ error_check_good client_close [$clientenv close] 0
+
+ #
+ # Run rep_test in the master (don't update client).
+ # Need to guarantee that we will change log files during
+ # this run so run with the largest pagesize and double
+ # the number of entries.
+ #
+ puts "\tRep$tnum.c: Running rep_test ( $largs) in replicated env."
+ set nentries [expr $niter * 2]
+ eval rep_test $method $masterenv $db $nentries 0 0 0 0 $largs
+ replclear 2
+
+ puts "\tRep$tnum.d: Run db_archive on master."
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_bad log.1.present [lsearch -exact $res log.0000000001] -1
+ set res [eval exec $util_path/db_archive -d -h $masterdir]
+ set res [eval exec $util_path/db_archive -l -h $masterdir]
+ error_check_good log.1.gone [lsearch -exact $res log.0000000001] -1
+
+ puts "\tRep$tnum.e: Reopen client ($opts)."
+ if { $opts == "clean" } {
+ env_cleanup $clientdir
+ }
+ if { $opts == "bulk" } {
+ error_check_good bulk [$masterenv rep_config {bulk on}] 0
+ }
+
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist 0 NONE err
+ set done 0
+ #
+ # We are done with this loop when the client has achieved
+ # startup_done and we've looped one more time after turning
+ # off dropping messages. Otherwise we might get a few
+ # straggling log records that don't make it over.
+ #
+ # Set a maximum iteration count because some methods can get
+ # into a state where if we're regularly dropping messages we
+ # can never catch up (queue) and we loop forever.
+ #
+ set iter 1
+ set max_drop_iter 200
+ if { $opts == "bulk" } {
+ #
+ # Since bulk is sending several messages at once we need to
+ # loop more times to allow rerequests to get through.
+ #
+ set max_drop_iter [expr $max_drop_iter * 2]
+ $clientenv rep_request 1 4
+ }
+ while { $done == 0 } {
+ puts "\tRep$tnum.e.1.$iter: Trigger log request"
+ #
+ # When we don't clean, starting the client doesn't
+ # trigger any events. We need to generate some log
+ # records so that the client requests the missing
+ # logs and that will trigger it.
+ #
+ set entries 4
+ eval rep_test $method $masterenv $db $entries $niter 0 0 0 $largs
+ process_msgs $envlist 0 NONE err
+ set startup_done [stat_field $clientenv rep_stat \
+ "Startup complete"]
+ if { $startup_done || $iter >= $max_drop_iter } {
+ #
+ # If we're dropping, stop doing so.
+ # If we're not dropping, we're done.
+ #
+ if { $drop != 0 } {
+ set drop 0
+ } else {
+ set done 1
+ }
+ }
+ incr iter
+ }
+ error_check_good subdb_close [$db close] 0
+ #
+ # Stop dropping records, we've sent all the pages.
+ # We need to do that in order to make sure we get
+ # all the log records there and can accurately compare.
+ #
+ set drop 0
+ process_msgs $envlist 0 NONE err
+
+ puts "\tRep$tnum.f: Verify logs and databases"
+ #
+ # If doing bulk testing, turn it off now so that it forces us
+ # to flush anything currently in the bulk buffer. We need to
+ # do this because rep_test might have aborted a transaction on
+ # its last iteration and those log records would still be in
+ # the bulk buffer causing the log comparison to fail.
+ #
+ if { $opts == "bulk" } {
+ puts "\tRep$tnum.f.1: Turn off bulk transfers."
+ error_check_good bulk [$masterenv rep_config {bulk off}] 0
+ process_msgs $envlist 0 NONE err
+ }
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ for { set i 0 } { $i < $nfiles } { incr i } {
+ set dbname "test.$i.db"
+ rep_verify $masterdir $masterenv $clientdir $clientenv \
+ 1 1 0 $dbname
+ }
+
+ #
+ # Close the database held open on master for initialization.
+ #
+ foreach db $dbopen {
+ error_check_good db_close [$db close] 0
+ }
+
+ # Add records to the master and update client.
+ puts "\tRep$tnum.g: Add more records and check again."
+ set entries 10
+ set db [eval {berkdb_open_noerr -env $masterenv -auto_commit \
+ -mode 0644} $largs $omethod $testfile $sub]
+ error_check_good subdb [is_valid_db $db] TRUE
+ eval rep_test $method $masterenv $db $entries $niter 0 0 0 $largs
+ error_check_good subdb_close [$db close] 0
+ process_msgs $envlist 0 NONE err
+
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+ for { set i 0 } { $i < $nfiles } { incr i } {
+ set dbname "test.$i.db"
+ rep_verify $masterdir $masterenv $clientdir $clientenv \
+ 1 1 0 $dbname
+ }
+ set bulkxfer [stat_field $masterenv rep_stat "Bulk buffer transfers"]
+ if { $opts == "bulk" } {
+ error_check_bad bulkxferon $bulkxfer 0
+ } else {
+ error_check_good bulkxferoff $bulkxfer 0
+ }
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep062.tcl b/db/test/rep062.tcl
new file mode 100644
index 000000000..851285662
--- /dev/null
+++ b/db/test/rep062.tcl
@@ -0,0 +1,284 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep062.tcl,v 1.5 2006/09/11 18:54:25 carol Exp $
+#
+# TEST rep062
+# TEST Test of internal initialization where client has a different
+# TEST kind of database than the master.
+# TEST
+# TEST Create a master of one type, and let the client catch up.
+# TEST Close the client.
+# TEST Remove the database on the master, and create a new
+# TEST database of the same name but a different type.
+# TEST Run the master ahead far enough that internal initialization
+# TEST will be required on the reopen of the client.
+# TEST Reopen the client and verify.
+
+proc rep062 { method {tnum "062"} args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # This test uses different access methods internally.
+ # Called from outside, accept only btree.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
+ if { [is_btree $method] != 1 } {
+ puts "Skipping rep$tnum for method $method."
+ return
+ }
+
+ # This test needs to set its own pagesize.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Rep$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery,
+ # and with and without cleaning.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Skipping rep$tnum for -recover\
+ with in-memory logs."
+ continue
+ }
+ puts "Rep$tnum ($method $r):\
+ Internal initialization with change in\
+ access method of database."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep062_sub $method $tnum $l $r $args
+ }
+ }
+}
+
+proc rep062_sub { method tnum logset recargs largs } {
+ global testdir
+ global util_path
+ global passwd
+ global encrypt
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set maxpg 16384
+ set log_buf [expr $maxpg * 2]
+ set log_max [expr $log_buf * 4]
+ set cache [expr $maxpg * 32 ]
+
+ set m_logargs " -log_buffer $log_buf"
+ set c_logargs " -log_buffer $log_buf"
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs cannot be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Set up pairs of databases to test. The first element is whether
+ # to open an encrypted env, the second is the original database
+ # method and flags, the third is the replacement database and flags.
+ set pairlist {
+ { 0 {btree ""} {hash ""} }
+ { 0 {queueext "-pagesize 2048"} {queue ""} }
+ { 0 {queueext ""} {btree ""} }
+ { 0 {queue ""} {recno ""} }
+ { 0 {hash ""} {queue ""} }
+ { 0 {recno ""} {btree ""} }
+ { 0 {hash ""} {queueext "-pagesize 16384"} }
+ { 0 {queueext "-pagesize 2048"} {queueext "-pagesize 16384"} }
+ { 0 {queueext "-pagesize 16384"} {queueext "-pagesize 2048"} }
+ { 0 {queue ""} {queueext "-pagesize 16384"} }
+ { 1 {btree ""} {btree "-encrypt"} }
+ { 1 {btree "-encrypt"} {btree ""} }
+ { 1 {queue ""} {queue "-encrypt"} }
+ { 1 {queue "-encrypt"} {queue ""} }
+ }
+
+ foreach p $pairlist {
+ env_cleanup $testdir
+ replsetup $testdir/MSGQUEUEDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Extract values from the list.
+ set encryptenv [lindex [lindex $p 0] 0]
+ set encryptmsg "clear"
+ if { $encryptenv == 1 } {
+ set encryptmsg "encrypted"
+ }
+ set method1 [lindex [lindex $p 1] 0]
+ set method2 [lindex [lindex $p 2] 0]
+ set flags1 [lindex [lindex $p 1] 1]
+ set flags2 [lindex [lindex $p 2] 1]
+
+ puts "Rep$tnum: Testing with $encryptmsg env."
+ puts -nonewline "Rep$tnum: Replace [lindex $p 1] "
+ puts "database with [lindex $p 2] database."
+
+ # Set up flags for encryption if necessary.
+ set envflags ""
+ set enc ""
+ if { $encryptenv == 1 } {
+ set envflags "-encryptaes $passwd"
+ set enc " -P $passwd"
+ }
+
+ # Derive args for specified methods.
+ set args1 [convert_args $method1 ""]
+ set args2 [convert_args $method2 ""]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -log_max $log_max \
+ -cachesize { 0 $cache 1 } $envflags \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -cachesize { 0 $cache 1 } $envflags \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client.
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -log_max $log_max \
+ -cachesize { 0 $cache 1 } $envflags \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -cachesize { 0 $cache 1 } $envflags \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ # Open two databases on the master - one to test different
+ # methods, one to advance the log, forcing internal
+ # initialization.
+
+ puts "\tRep$tnum.a: Open test database (it will change methods)."
+ set testfile "test.db"
+ set omethod [convert_method $method1]
+ set db1 [eval {berkdb_open} -env $masterenv -auto_commit \
+ -create $omethod $flags1 $args1 -mode 0644 $testfile]
+ error_check_good db1open [is_valid_db $db1] TRUE
+
+ puts "\tRep$tnum.b: Open log-advance database."
+ set testfile2 "test2.db"
+ set db2 [eval {berkdb_open} -env $masterenv -auto_commit \
+ -create $omethod $args1 -mode 0644 $flags1 $testfile2]
+ error_check_good db2open [is_valid_db $db2] TRUE
+
+ puts "\tRep$tnum.c: Add a few records to test db."
+ set nentries 10
+ set start 0
+ eval rep_test $method1 \
+ $masterenv $db1 $nentries $start $start 0 0 $args1
+ incr start $nentries
+ process_msgs $envlist
+
+ puts "\tRep$tnum.d: Close client."
+
+ # First save the log number of the latest client log.
+ set last_client_log [get_logfile $clientenv last]
+ error_check_good client_close [$clientenv close] 0
+
+ # Remove the database on the master, create new database
+ # of different type.
+ puts "\tRep$tnum.e: Remove test database."
+ error_check_good db1_close [$db1 close] 0
+ error_check_good db1_remove [$masterenv dbremove $testfile] 0
+
+ puts "\tRep$tnum.f: \
+ Create new test database; same name, different method."
+ set omethod [convert_method $method2]
+ set db1 [eval {berkdb_open} -env $masterenv -auto_commit \
+ -create $omethod $args2 -mode 0644 $flags2 $testfile]
+ error_check_good db1open [is_valid_db $db1] TRUE
+
+ # Run rep_test in the master enough to require internal
+ # initialization upon client reopen. Use the extra db.
+ set stop 0
+ set niter 100
+ while { $stop == 0 } {
+ # Run rep_test in the master (don't update client).
+ puts "\tRep$tnum.g: \
+ Run rep_test until internal init is required."
+ eval rep_test $method1 $masterenv \
+ $db2 $niter $start $start 0 0 $largs
+ incr start $niter
+ replclear 2
+
+ puts "\tRep$tnum.h: Run db_archive on master."
+ if { $m_logtype != "in-memory"} {
+ set res [eval exec \
+ $util_path/db_archive $enc -d -h $masterdir]
+ set res [eval exec \
+ $util_path/db_archive $enc -l -h $masterdir]
+ }
+ set first_master_log [get_logfile $masterenv first]
+ if { $first_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ puts "\tRep$tnum.i: Reopen client."
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist 0 NONE err
+
+ puts "\tRep$tnum.j: Add a few records to cause initialization."
+ set entries 20
+ eval rep_test $method2 \
+ $masterenv $db1 $entries $start $start 0 0 $largs
+ incr start $entries
+ process_msgs $envlist 0 NONE err
+
+ puts "\tRep$tnum.k: Verify logs and databases"
+ # Make sure encryption value is correct.
+ if { $encryptenv == 1 } {
+ set encrypt 1
+ }
+ rep_verify $masterdir $masterenv $clientdir $clientenv 1
+
+ check_log_location $masterenv
+ check_log_location $clientenv
+
+ error_check_good db1_close [$db1 close] 0
+ error_check_good db2_close [$db2 close] 0
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+ }
+}
+
diff --git a/db/test/rep063.tcl b/db/test/rep063.tcl
new file mode 100644
index 000000000..661774937
--- /dev/null
+++ b/db/test/rep063.tcl
@@ -0,0 +1,362 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2002-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep063.tcl,v 1.5 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep063
+# TEST Replication election test with simulated different versions
+# TEST for each site. This tests that old sites with real priority
+# TEST trump ELECTABLE sites with zero priority even with greater LSNs.
+# TEST There is a special case in the code for testing that if the
+# TEST priority is <= 10, we simulate mixed versions for elections.
+# TEST
+# TEST Run a rep_test in a replicated master environment and close;
+# TEST hold an election among a group of clients to make sure they select
+# TEST the master with varying LSNs and priorities.
+#
+proc rep063 { method args } {
+ global errorInfo
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+ set tnum "063"
+
+ # Skip for all methods except btree.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
+ if { [is_btree $method] == 0 } {
+ puts "Rep$tnum: Skipping for method $method."
+ return
+ }
+
+ set nclients 5
+ set logsets [create_logsets [expr $nclients + 1]]
+
+ # Run the body of the test with and without recovery.
+ set recopts { "" "-recover" }
+ foreach r $recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($method $r): \
+ Replication elections with varying versions."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ for { set i 0 } { $i < $nclients } { incr i } {
+ puts "Rep$tnum: Client $i logs are\
+ [lindex $l [expr $i + 1]]"
+ }
+ rep063_sub $method $nclients $tnum $l $r $args
+ }
+ }
+}
+
+proc rep063_sub { method nclients tnum logset recargs largs } {
+ source ./include.tcl
+ set niter 80
+
+ env_cleanup $testdir
+
+ set qdir $testdir/MSGQUEUEDIR
+ replsetup $qdir
+
+ set masterdir $testdir/MASTERDIR
+ file mkdir $masterdir
+
+ set m_logtype [lindex $logset 0]
+ set m_logargs [adjust_logargs $m_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+
+ for { set i 0 } { $i < $nclients } { incr i } {
+ set clientdir($i) $testdir/CLIENTDIR.$i
+ file mkdir $clientdir($i)
+ set c_logtype($i) [lindex $logset [expr $i + 1]]
+ set c_logargs($i) [adjust_logargs $c_logtype($i)]
+ set c_txnargs($i) [adjust_txnargs $c_logtype($i)]
+ }
+
+# To debug elections, the lines to uncomment are below the
+# error checking portion of this test. This is needed in order
+# for the error messages to come back in errorInfo and for
+# that portion of the test to pass.
+ # Open a master.
+ set envlist {}
+ repladd 1
+ set env_cmd(M) "berkdb_env -create -log_max 1000000 -home $masterdir \
+ $m_txnargs $m_logargs -rep_master \
+ -errpfx MASTER -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $env_cmd(M) $recargs]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+ lappend envlist "$masterenv 1"
+
+ # Open the clients.
+ for { set i 0 } { $i < $nclients } { incr i } {
+ set envid [expr $i + 2]
+ repladd $envid
+ set env_cmd($i) "berkdb_env_noerr -create -home $clientdir($i) \
+ $c_txnargs($i) $c_logargs($i) -rep_client \
+ -rep_transport \[list $envid replsend\]"
+ set clientenv($i) [eval $env_cmd($i) $recargs]
+ error_check_good \
+ client_env($i) [is_valid_env $clientenv($i)] TRUE
+ lappend envlist "$clientenv($i) $envid"
+ }
+ # Bring the clients online by processing the startup messages.
+ process_msgs $envlist
+
+ # Run a modified test001 in the master.
+ puts "\tRep$tnum.a: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ #
+ # We remove some client envs and run rep_test so that we can
+ # force some client LSNs to be further ahead/behind than others.
+ # When we're done, the LSNs look like this:
+ #
+ # Client0: ......................
+ # Client1: ...........
+ # Client2: ...........
+ # Client3: ......................
+ # Client4: .................................
+ #
+ # Remove client 1 and 2 from list to process, this guarantees
+ # clients 0, 3 and 4 are ahead in LSN. We use each of these
+ # in different parts of the test so guarantee bigger LSNs.
+ #
+ set orig_env $envlist
+ set envlist [lreplace $envlist 3 3]
+ set envlist [lreplace $envlist 2 2]
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+ #
+ # Remove client 3 so that client 4 has the biggest LSN of all.
+ #
+ set eend [llength $envlist]
+ set cl3_i [expr $eend - 2]
+ set envlist [lreplace $envlist $cl3_i $cl3_i]
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+ #
+ # Put all removed clients back in.
+ #
+ set envlist $orig_env
+ error_check_good masterenv_close [$masterenv close] 0
+ set envlist [lreplace $envlist 0 0]
+
+# To debug elections, uncomment the lines below to turn on verbose
+# and set the errfile. Also edit reputils.tcl
+# in proc start_election and swap the 2 commented lines with
+# their counterpart.
+ for { set i 0 } { $i < $nclients } { incr i } {
+ replclear [expr $i + 2]
+ #
+ # This test doesn't use the testing hooks, so
+ # initialize err_cmd and crash appropriately.
+ #
+ set err_cmd($i) "none"
+ set crash($i) 0
+ #
+ # Initialize the array pri. We'll set it to
+ # appropriate values when the winner is determined.
+ #
+ set pri($i) 0
+ #
+# error_check_good pfx [$clientenv($i) errpfx CLIENT$i] 0
+# error_check_good verb [$clientenv($i) verbose rep on] 0
+# $clientenv($i) errfile /dev/stderr
+# set env_cmd($i) [concat $env_cmd($i) \
+# "-errpfx CLIENT$i -verbose {rep on} -errfile /dev/stderr"]
+ }
+ #
+ # Remove clients 3 and 4 from the envlist. We'll save those for
+ # later.
+ #
+ set cl4 [lindex $envlist 4]
+ set envlist [lreplace $envlist 4 4]
+ set cl3 [lindex $envlist 3]
+ set envlist [lreplace $envlist 3 3]
+
+ set m "Rep$tnum.b"
+ #
+ # Client 0 has the biggest LSN of clients 0, 1, 2.
+ # However, 'setpriority' will set the priority of client 1
+ # to simulate client 1 being an "older version" client.
+ # Client 1 should win even though its LSN is smaller.
+ # This tests one "older" client and the rest "newer".
+ #
+ puts "\t$m: Test old client trumps new clients with bigger LSN."
+ set orig_ncl $nclients
+ set nclients 3
+ set nsites $nclients
+ set nvotes $nclients
+ set winner 1
+ set elector 2
+ setpriority pri $nclients $winner
+ run_election env_cmd envlist err_cmd pri crash\
+ $qdir $m $elector $nsites $nvotes $nclients $winner
+ #
+ # In all of the checks of the Election Priority stat field,
+ # we use clientenv(2). The reason is that we never expect
+ # client 2 to be the winner. The env handles of client 0 and 1
+ # are getting closed and reopened as a master/client in
+ # the election and the old recorded handles are invalid.
+ # This one is known to be valid throughout the entire test.
+ #
+ error_check_bad old_pri [stat_field $clientenv(2) rep_stat \
+ "Election priority"] 0
+ #
+ # When we finish the election, all clients are at the same LSN.
+ # Call this proc to make the winner have a larger LSN than the
+ # other 2 remaining clients, and reopen the winner as a client.
+ #
+ rep063_movelsn_reopen $method envlist $env_cmd($winner) $winner $largs
+
+ set m "Rep$tnum.c"
+ puts "\t$m: Test old client with zero priority new client."
+ #
+ # Client 1 now has a bigger LSN, so make client 0 the old client
+ # and client 1 a real 0 priority new client.
+ #
+ set winner 0
+ setpriority pri $nclients $winner
+ set pri(1) 0
+ run_election env_cmd envlist err_cmd pri crash\
+ $qdir $m $elector $nsites $nvotes $nclients $winner
+ error_check_bad old_pri [stat_field $clientenv(2) rep_stat \
+ "Election priority"] 0
+ rep063_movelsn_reopen $method envlist $env_cmd($winner) $winner $largs
+
+ set m "Rep$tnum.d"
+ puts "\t$m: Test multiple old clients with new client."
+ #
+ # Client 0 is now has a bigger LSN, so make client 1 winner.
+ # We are setting client 2's priority to something bigger so that
+ # we simulate having 2 "older version" clients (clients 1 and 2)
+ # and one new client (client 0). This tests that the right client
+ # among the older versions gets correctly elected even though there
+ # is a bigger LSN "new" client participating.
+ #
+ set winner 1
+ setpriority pri $nclients $winner
+ set pri(2) [expr $pri(1) / 2]
+ run_election env_cmd envlist err_cmd pri crash\
+ $qdir $m $elector $nsites $nvotes $nclients $winner
+ error_check_bad old_pri [stat_field $clientenv(2) rep_stat \
+ "Election priority"] 0
+ rep063_movelsn_reopen $method envlist $env_cmd($winner) $winner $largs
+
+ set m "Rep$tnum.e"
+ puts "\t$m: Test new clients, client 1 not electable."
+ #
+ # Client 1 now has a bigger LSN, so make it unelectable. Add in
+ # old client 3 since that should be the biggest LSN of all these.
+ # Set all other priorities to 10 to make them all equal (and
+ # all "new" clients). We know client 3 should win because we
+ # set its LSN much farther ahead in the beginning.
+ #
+ set winner 3
+ replclear [expr $winner + 2]
+ set nclients 4
+ set nsites $nclients
+ set nvotes $nclients
+ set pri(0) 10
+ set pri(1) 0
+ set pri(2) 10
+ set pri(3) 10
+ replclear [lindex $cl3 1]
+ lappend envlist $cl3
+ #
+ # Winner should be zero priority.
+ #
+ run_election env_cmd envlist err_cmd pri crash\
+ $qdir $m $elector $nsites $nvotes $nclients $winner
+ error_check_good elect_pri [stat_field $clientenv(2) rep_stat \
+ "Election priority"] 0
+ rep063_movelsn_reopen $method envlist $env_cmd($winner) $winner $largs
+
+ #
+ # Now add in Client 4, the site with the biggest LSN of all.
+ # Test with all being electable clients.
+ #
+ set m "Rep$tnum.f"
+ puts "\t$m: Test all new electable clients."
+ set winner 4
+ set nclients 5
+ set nsites $nclients
+ set nvotes $nclients
+ set pri(0) 10
+ set pri(1) 10
+ set pri(2) 10
+ set pri(3) 10
+ set pri(4) 10
+ replclear [expr $winner + 2]
+ lappend envlist $cl4
+ #
+ # Client 4 has biggest LSN and should now win, but winner should
+ # be zero priority.
+ #
+ run_election env_cmd envlist err_cmd pri crash\
+ $qdir $m $elector $nsites $nvotes $nclients $winner
+ error_check_good elect_pri [stat_field $clientenv(2) rep_stat \
+ "Election priority"] 0
+
+ foreach pair $envlist {
+ set cenv [lindex $pair 0]
+ error_check_good cenv_close [$cenv close] 0
+ }
+ replclose $testdir/MSGQUEUEDIR
+}
+
+#
+# Move the LSN ahead on the newly elected master, while not sending
+# those messages to the other clients. Then close the env and
+# reopen it as a client. Use upvar so that the envlist is
+# modified when we return and can get messages.
+#
+proc rep063_movelsn_reopen { method envlist env_cmd eindex largs } {
+ upvar $envlist elist
+
+ set clrlist { }
+ set i 0
+ foreach e $elist {
+ #
+ # If we find the master env entry, get its env handle.
+ # If not, then get the id so that we can replclear it later.
+ #
+ if { $i == $eindex } {
+ set masterenv [lindex $e 0]
+ } else {
+ lappend clrlist [lindex $e 1]
+ }
+ incr i
+ }
+ #
+ # Move this env's LSN ahead.
+ #
+ set niter 10
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+
+ foreach cl $clrlist {
+ replclear $cl
+ }
+ #
+ # Now close this env and reopen it as a client.
+ #
+ error_check_good newmaster_close [$masterenv close] 0
+ set newclenv [eval $env_cmd]
+ error_check_good cl [is_valid_env $newclenv] TRUE
+ set newenv "$newclenv [expr $eindex + 2]"
+ set elist [lreplace $elist $eindex $eindex $newenv]
+ process_msgs $elist
+}
diff --git a/db/test/rep064.tcl b/db/test/rep064.tcl
new file mode 100644
index 000000000..275979104
--- /dev/null
+++ b/db/test/rep064.tcl
@@ -0,0 +1,137 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep064.tcl,v 12.5 2006/08/24 14:46:38 bostic Exp $
+#
+# TEST rep064
+# TEST Replication rename and forced-upgrade test.
+# TEST
+# TEST The test verifies that the client correctly
+# TEST (internally) closes files when upgrading to master.
+# TEST It does this by having the master have a database
+# TEST open, then crashing. The client upgrades to master,
+# TEST and attempts to remove the open database.
+
+proc rep064 { method { niter 10 } { tnum "064" } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win9x platform."
+ return
+ }
+
+ # Run for btree only. Since we're testing removal of a
+ # file, method doesn't make any difference.
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
+ if { [is_btree $method] == 0 } {
+ puts "Rep$tnum: Skipping for method $method."
+ return
+ }
+
+ set logsets [create_logsets 2]
+ set args [convert_args $method $args]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($method $r):\
+ Replication test closure of open files on upgrade."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep064_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep064_sub { method niter tnum logset recargs largs } {
+ global testdir
+ global util_path
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ set m_logtype [lindex $logset 0]
+ set m_logargs [adjust_logargs $m_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+
+ set c_logtype [lindex $logset 1]
+ set c_logargs [adjust_logargs $c_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
+ -errpfx MASTER -errfile /dev/stderr \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs $m_logargs \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd $recargs -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
+ -errpfx CLIENT -errfile /dev/stderr \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs $c_logargs \
+# -verbose {rep on} -errpfx CLIENT -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd $recargs -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$masterenv 1} {$clientenv 2}"
+ process_msgs $envlist
+
+ puts "\tRep$tnum.a: Open an empty db, and leave it open."
+ set opendb "open.db"
+ set masterdb \
+ [berkdb_open -env $masterenv -create -btree -auto_commit $opendb]
+ error_check_good db [is_valid_db $masterdb] TRUE
+ process_msgs $envlist
+
+ # Run a modified test001 in the master (and update client).
+ puts "\tRep$tnum.b: Open another db, and add some data."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
+ process_msgs $envlist
+
+ # This simulates a master crashing, we're the only one in the
+ # group. No need to process messages.
+ #
+ puts "\tRep$tnum.c: Upgrade client."
+ error_check_good client_upg [$clientenv rep_start -master] 0
+
+ puts "\tRep$tnum.d: Remove open databases."
+ set stat [catch {$clientenv dbremove -auto_commit $opendb} ret]
+ error_check_good remove_open_file $ret 0
+ error_check_good remove_open_file $stat 0
+
+ # The open file from rep_test defaults to the name "test.db".
+ set testfile "test.db"
+ set stat [catch {$clientenv dbremove -auto_commit $testfile} ret]
+ error_check_good remove_closed_file $ret 0
+ error_check_good remove_closed_file $stat 0
+
+ error_check_good dbclose [$masterdb close] 0
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep065.tcl b/db/test/rep065.tcl
new file mode 100644
index 000000000..d445e4daf
--- /dev/null
+++ b/db/test/rep065.tcl
@@ -0,0 +1,420 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep065.tcl,v 12.9 2006/09/08 20:32:18 bostic Exp $
+#
+# TEST rep065
+# TEST Tests replication running with different versions.
+# TEST This capability is introduced with 4.5.
+# TEST
+# TEST Start a replication group of 1 master and N sites, all
+# TEST running some historical version greater than or equal to 4.2.
+# TEST Take down a client and bring it up again running 4.5. Run
+# TEST some upgrades, make sure everything works.
+# TEST
+# TEST Each site runs the tcllib of its own version, but uses
+# TEST the 4.5 tcl code (e.g. test.tcl).
+proc rep065 { method { nsites 3 } args } {
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+ #
+ # Skip all methods but btree - we don't use the method, as we
+ # run over all of them with varying versions.
+ #
+ if { $checking_valid_methods } {
+ set test_methods { btree }
+ return $test_methods
+ }
+
+ if { [is_btree $method] == 0 } {
+ puts "Rep065: Skipping for method $method."
+ return
+ }
+
+ #
+ # Make the list of {method version} pairs to test.
+ #
+ set mvlist [method_version]
+ set mvlen [llength $mvlist]
+ puts "Rep065: Testing the following $mvlen method/version pairs:"
+ puts "Rep065: $mvlist"
+ set count 1
+ set slist [setup_sites $nsites]
+ foreach i $mvlist {
+ puts "Rep065: Test iteration $count: $i"
+ rep065_sub $i $nsites $slist
+ incr count
+ }
+}
+
+proc rep065_sub { mv nsites slist } {
+ source ./include.tcl
+ global machids
+ global util_path
+ set machids {}
+ set method [lindex $mv 0]
+ set vers [lindex $mv 1]
+
+ puts "\tRep065.a: Set up."
+ # Whatever directory we started this process from is referred
+ # to as the controlling directory. It will contain the message
+ # queue and start all the child processes.
+ set controldir [pwd]
+ env_cleanup $controldir/$testdir
+ replsetup $controldir/$testdir/MSGQUEUEDIR
+
+ # Set up the historical build directory. The master will start
+ # running with historical code.
+ #
+ # This test presumes we are running in the current build
+ # directory and that the expected historical builds are
+ # set up in a similar fashion. If they are not, quit gracefully.
+
+ set pwd [pwd]
+ set homedir [file dirname [file dirname $pwd]]
+ set reputils_path $pwd/../test
+ set histdir $homedir/$vers/build_unix
+ if { [file exists $histdir] == 0 } {
+ puts "Skipping iteration: cannot find historical version $vers."
+ return
+ }
+ if { [file exists $histdir/db_verify] == 0 } {
+ puts -nonewline "Skipping iteration: historical version $vers"
+ puts " is missing some executables. Is it built?"
+ return
+ }
+
+ set histtestdir $histdir/TESTDIR
+
+ env_cleanup $histtestdir
+ set markerdir $controldir/$testdir/MARKER
+ file delete -force $markerdir
+
+ # Create site directories. They start running in the historical
+ # directory, too. They will be upgraded to the current version
+ # first.
+ set allids { }
+ for { set i 0 } { $i < $nsites } { incr i } {
+ set siteid($i) [expr $i + 1]
+ set sid $siteid($i)
+ lappend allids $sid
+ set histdirs($sid) $histtestdir/SITE.$i
+ set upgdir($sid) $controldir/$testdir/SITE.$i
+ file mkdir $histdirs($sid)
+ file mkdir $upgdir($sid)
+ }
+
+ # Open master env running 4.2.
+ #
+ # We know that slist has all sites starting in the histdir.
+ # So if we encounter an upgrade value, we upgrade that client
+ # from the hist dir.
+ #
+ set count 1
+ foreach sitevers $slist {
+ puts "\tRep065.b.$count: Run with sitelist $sitevers."
+ #
+ # Delete the marker directory each iteration so that
+ # we don't find old data in there.
+ #
+ file delete -force $markerdir
+ #
+ # Get the chosen master index from the list of sites.
+ #
+ set mindex [get_master $nsites $sitevers]
+ set meid [expr $mindex + 1]
+
+ #
+ # Kick off the test processes. We need 1 test process
+ # per site and 1 message process per site.
+ #
+ set pids {}
+ for { set i 0 } { $i < $nsites } { incr i } {
+ set upg [lindex $sitevers $i]
+ set sid $siteid($i)
+ #
+ # If we are running "old" set up an array
+ # saying if this site has run old/new yet.
+ # The reason is that we want to "upgrade"
+ # only the first time we go from old to new,
+ # not every iteration through this loop.
+ #
+ if { $upg == 0 } {
+ puts -nonewline "\t\tRep065.b: Test: Old site $i"
+ set sitedir($i) $histdirs($sid)
+ set already_upgraded($i) 0
+ } else {
+ puts -nonewline "\t\tRep065.b: Test: Upgraded site $i"
+ set sitedir($i) $upgdir($sid)
+ if { $already_upgraded($i) == 0 } {
+ upg_repdir $histdirs($sid) $sitedir($i)
+ }
+ set already_upgraded($i) 1
+ }
+ if { $sid == $meid } {
+ set state MASTER
+ set runtest [list REPTEST $method 15 10]
+ puts " (MASTER)"
+ } else {
+ set state CLIENT
+ set runtest {REPTEST_GET}
+ puts " (CLIENT)"
+ }
+ lappend pids [exec $tclsh_path $test_path/wrap.tcl \
+ rep065script.tcl \
+ $controldir/$testdir/$count.S$i.log \
+ SKIP \
+ START $state \
+ $runtest \
+ $sid $allids $controldir \
+ $sitedir($i) $reputils_path &]
+ lappend pids [exec $tclsh_path $test_path/wrap.tcl \
+ rep065script.tcl \
+ $controldir/$testdir/$count.S$i.msg \
+ SKIP \
+ PROCMSGS $state \
+ NULL \
+ $sid $allids $controldir \
+ $sitedir($i) $reputils_path &]
+ }
+
+ watch_procs $pids 20
+ #
+ # At this point, clean up any message files. The message
+ # system leads to a significant number of duplicate
+ # requests. If the master site handled them after the
+ # client message processes exited, then there can be
+ # a large number of "dead" message files waiting for
+ # non-existent clients. Just clean up everyone.
+ #
+ for { set i 0 } { $i < $nsites } { incr i } {
+ replclear $siteid($i)
+ }
+
+ #
+ # Kick off the verification processes. These just walk
+ # their own logs and databases, so we don't need to have
+ # a message process. We need separate processes because
+ # old sites need to use old utilities.
+ #
+ set pids {}
+ puts "\tRep065.c.$count: Verify all sites."
+ for { set i 0 } { $i < $nsites } { incr i } {
+ if { $siteid($i) == $meid } {
+ set state MASTER
+ } else {
+ set state CLIENT
+ }
+ lappend pids [exec $tclsh_path $test_path/wrap.tcl \
+ rep065script.tcl \
+ $controldir/$testdir/$count.S$i.ver \
+ SKIP \
+ VERIFY $state \
+ {DB LOG} \
+ $siteid($i) $allids $controldir \
+ $sitedir($i) $reputils_path &]
+ }
+
+ watch_procs $pids 10
+ #
+ # Now that each site created its verification files,
+ # we can now verify everyone.
+ #
+ for { set i 0 } { $i < $nsites } { incr i } {
+ if { $i == $mindex } {
+ continue
+ }
+ puts \
+ "\t\tRep065.c: Verify: Compare databases master and client $i"
+ error_check_good db_cmp \
+ [filecmp $sitedir($mindex)/VERIFY/dbdump \
+ $sitedir($i)/VERIFY/dbdump] 0
+ set upg [lindex $sitevers $i]
+ # !!!
+ # Although db_printlog works and can read old logs,
+ # there have been some changes to the output text that
+ # makes comparing difficult. One possible solution
+ # is to run db_printlog here, from the current directory
+ # instead of from the historical directory.
+ #
+ if { $upg == 0 } {
+ puts \
+ "\t\tRep065.c: Verify: Compare logs master and client $i"
+ error_check_good log_cmp \
+ [filecmp $sitedir($mindex)/VERIFY/prlog \
+ $sitedir($i)/VERIFY/prlog] 0
+ } else {
+ puts \
+ "\t\tRep065.c: Verify: Compare LSNs master and client $i"
+ error_check_good log_cmp \
+ [filecmp $sitedir($mindex)/VERIFY/loglsn \
+ $sitedir($i)/VERIFY/loglsn] 0
+ }
+ }
+
+ #
+ # At this point we have a master and sites all up to date
+ # with each other. Now, one at a time, upgrade the sites
+ # to the current version and start everyone up again.
+ incr count
+ }
+}
+
+proc setup_sites { nsites } {
+ #
+ # Set up a list that goes from 0 to $nsites running
+ # upgraded. A 0 represents running old version and 1
+ # represents running upgraded. So, for 3 sites it will look like:
+ # { 0 0 0 } { 1 0 0 } { 1 1 0 } { 1 1 1 }
+ #
+ set sitelist {}
+ for { set i 0 } { $i <= $nsites } { incr i } {
+ set l ""
+ for { set j 1 } { $j <= $nsites } { incr j } {
+ if { $i < $j } {
+ lappend l 0
+ } else {
+ lappend l 1
+ }
+ }
+ lappend sitelist $l
+ }
+ return $sitelist
+}
+
+proc upg_repdir { histdir upgdir } {
+ global util_path
+
+ #
+ # Upgrade a site to the current version. This entails:
+ # 1. Removing any old files from the upgrade directory.
+ # 2. Copy all old version files to upgrade directory.
+ # 3. Remove any __db files from upgrade directory.
+ # 4. Force checkpoint in new version.
+ file delete -force $upgdir
+
+ # Recovery was run before as part of upgradescript.
+ # Archive dir by copying it to upgrade dir.
+ file copy -force $histdir $upgdir
+ set dbfiles [glob -nocomplain $upgdir/__db*]
+ foreach d $dbfiles {
+ file delete -force $d
+ }
+ # Force current version checkpoint
+ set stat [catch {eval exec $util_path/db_checkpoint -1 -h $upgdir} r]
+ if { $stat != 0 } {
+ puts "CHECKPOINT: $upgdir: $r"
+ }
+ error_check_good stat_ckp $stat 0
+}
+
+proc get_master { nsites verslist } {
+ error_check_good vlist_chk [llength $verslist] $nsites
+ #
+ # When we can, simply run an election to get a new master.
+ # We then verify we got an old client.
+ #
+ # For now, randomly pick among the old sites, or if no old
+ # sites just randomly pick anyone.
+ #
+ set old_count 0
+ # Pick 1 out of N old sites or 1 out of nsites if all upgraded.
+ foreach i $verslist {
+ if { $i == 0 } {
+ incr old_count
+ }
+ }
+ if { $old_count == 0 } {
+ set old_count $nsites
+ }
+ set master [berkdb random_int 0 [expr $old_count - 1]]
+ #
+ # Since the Nth old site may not be at the Nth place in the
+ # list unless we used the entire list, we need to loop to find
+ # the right index to return.
+ if { $old_count == $nsites } {
+ return $master
+ }
+ set ocount 0
+ set index 0
+ foreach i $verslist {
+ if { $i == 1 } {
+ incr index
+ continue
+ }
+ if { $ocount == $master } {
+ return $index
+ }
+ incr ocount
+ incr index
+ }
+ #
+ # If we get here there is a problem in the code.
+ #
+ error "FAIL: get_master problem"
+}
+
+proc method_version { } {
+ global valid_methods
+
+ set meth $valid_methods
+ set startmv { {hash db-4.2.52} {btree db-4.2.52} }
+
+ # Remove btree and hash from the method list, we're manually
+ # assigning those versions due to log/recovery record changes
+ # at that version.
+ set midx [lsearch -exact $meth hash]
+ set meth [lreplace $meth $midx $midx]
+ set midx [lsearch -exact $meth btree]
+ set meth [lreplace $meth $midx $midx]
+
+ #
+ # Since we're explicitly testing 4.2.52 weight testing the other
+ # versions a bit more.
+ set vers {db-4.2.52 db-4.3.29 db-4.4.20}
+ set dbvlen [llength $vers]
+ set vers_list { 0 0 1 1 1 1 2 2 2 2 }
+ set vers_len [expr [llength $vers_list] - 1]
+
+ # Walk through the list of remaining methods and randomly
+ # assign a version to each one.
+ while { 1 } {
+ set mv $startmv
+ #
+ # Note that we've tested index 0, db-4.2.52. And set the other
+ # index tests to 0. We want to make sure we test each version.
+ set vtest(0) 1
+ set vtest(1) 0
+ set vtest(2) 0
+ foreach m $meth {
+ # Index into distribution list.
+ set vidx [berkdb random_int 0 $vers_len]
+ # Index into version list.
+ set vindex [lindex $vers_list $vidx]
+ set vtest($vindex) 1
+ set v [lindex $vers $vindex]
+ lappend mv [list $m $v]
+ }
+ #
+ # Assume success. If we find any $vtest entry of 0,
+ # then we fail and try again.
+ #
+ set all_vers 1
+ for { set i 0 } { $i < $dbvlen } { incr i } {
+ if { $vtest($i) == 0 } {
+ set all_vers 0
+ }
+ }
+ if { $all_vers == 1 } {
+ break
+ }
+ puts "Did not get all versions with $mv."
+ }
+
+ return $mv
+}
diff --git a/db/test/rep065script.tcl b/db/test/rep065script.tcl
new file mode 100644
index 000000000..34a599a4c
--- /dev/null
+++ b/db/test/rep065script.tcl
@@ -0,0 +1,391 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep065script.tcl,v 12.7 2006/09/08 20:32:18 bostic Exp $
+#
+# rep065script - procs to use at each replication site in the
+# replication upgrade test.
+#
+# type: START, PROCMSGS, VERIFY
+# START starts up a replication site and performs an operation.
+# the operations are:
+# REPTEST runs the rep_test_upg procedure on the master.
+# REPTEST_GET run a read-only test on a client.
+# REPTEST_ELECT runs an election on the site.
+# PROCMSGS processes messages until none are left.
+# VERIFY dumps the log and database contents.
+# role: master or client
+# op: operation to perform
+# envid: environment id number for use in replsend
+# allids: all env ids we need for sending
+# ctldir: controlling directory
+# mydir: directory where this participant runs
+# reputils_path: location of reputils.tcl
+
+proc rep065scr_elect { repenv oplist } {
+ set ver [lindex $oplist 1]
+ set pri [lindex $oplist 2]
+ if { [is_substr $ver "db-4.2"] } {
+ }
+}
+
+proc rep065scr_reptest { repenv oplist markerdb } {
+ set method [lindex $oplist 1]
+ set niter [lindex $oplist 2]
+ set loop [lindex $oplist 3]
+ set start 0
+ puts "REPTEST: method $method, niter $niter, loop $loop"
+ for {set n 0} {$n < $loop} {incr n} {
+ puts "REPTEST: call rep_test_upg $n"
+ eval rep_test_upg $method $repenv NULL $niter $start $start 0 0
+ incr start $niter
+ tclsleep 3
+ }
+ #
+ # Sleep a bunch to help get the messages worked through.
+ #
+ tclsleep 10
+ puts "put DONE to marker"
+ error_check_good marker_done [$markerdb put DONE DONE] 0
+ error_check_good marker_sync [$markerdb sync] 0
+}
+
+proc rep065scr_repget { repenv oplist mydir markerfile } {
+ set dbname "$mydir/test.db"
+ set i 0
+ while { [file exists $dbname] == 0 } {
+ tclsleep 2
+ incr i
+ if { $i >= 15 && $i % 5 == 0 } {
+ puts "After $i seconds, no database exists."
+ }
+ if { $i > 180 } {
+ error "Database never created."
+ }
+ }
+ set loop 1
+ while { 1 } {
+ set markerdb [berkdb_open $markerfile]
+ error_check_good marker [is_valid_db $markerdb] TRUE
+ set kd [$markerdb get DONE]
+ error_check_good marker_close [$markerdb close] 0
+ if { [llength $kd] != 0 } {
+ break
+ }
+ set db [berkdb_open -env $repenv $dbname]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set dbc [$db cursor]
+ set i 0
+ error_check_good curs [is_valid_cursor $dbc $db] TRUE
+ for { set dbt [$dbc get -first ] } \
+ { [llength $dbt] > 0 } \
+ { set dbt [$dbc get -next] } {
+ incr i
+ }
+ error_check_good dbc_close [$dbc close] 0
+ error_check_good db_close [$db close] 0
+ puts "REPTEST_GET: after $loop loops: key count $i"
+ incr loop
+ tclsleep 2
+ }
+}
+proc rep065scr_starttest { role oplist envid msgdir mydir allids markerfile } {
+ global qtestdir
+ global util_path
+
+ puts "repladd $allids"
+ set qtestdir $msgdir
+ foreach id $allids {
+ repladd $id
+ }
+
+ set markerdb [berkdb_open -create -btree $markerfile]
+ error_check_good marker [is_valid_db $markerdb] TRUE
+ puts "set up env cmd"
+ set lockmax 40000
+ if { $role == "MASTER" } {
+ set rep_env_cmd "berkdb_env_noerr -create -home $mydir \
+ -lock_max_objects $lockmax -lock_max_locks $lockmax \
+ -errpfx MASTER -txn -rep_master \
+ -rep_transport \[list $envid replsend\]"
+# set rep_env_cmd "berkdb_env_noerr -create -home $mydir \
+# -lock_max_objects $lockmax -lock_max_locks $lockmax \
+# -errpfx MASTER -txn -rep_master \
+# -verbose {rep on} -errfile /dev/stderr \
+# -rep_transport \[list $envid replsend\]"
+ } elseif { $role == "CLIENT" } {
+ set rep_env_cmd "berkdb_env_noerr -create -home $mydir \
+ -lock_max_objects $lockmax -lock_max_locks $lockmax \
+ -errpfx CLIENT -txn -rep_client \
+ -rep_transport \[list $envid replsend\]"
+# set rep_env_cmd "berkdb_env_noerr -create -home $mydir \
+# -lock_max_objects $lockmax -lock_max_locks $lockmax \
+# -errpfx CLIENT -txn -rep_client \
+# -verbose {rep on} -errfile /dev/stderr \
+# -rep_transport \[list $envid replsend\]"
+ } else {
+ puts "FAIL: unrecognized replication role $role"
+ return
+ }
+
+ # Change directories to where this will run.
+ # !!!
+ # mydir is an absolute path of the form
+ # <path>/build_unix/TESTDIR/MASTERDIR or
+ # <path>/build_unix/TESTDIR/CLIENTDIR.0
+ #
+ # So we want to run relative to the build_unix directory
+ cd $mydir/../..
+
+ puts "open repenv $rep_env_cmd"
+ set repenv [eval $rep_env_cmd]
+ error_check_good repenv_open [is_valid_env $repenv] TRUE
+
+ puts "repenv is $repenv"
+ #
+ # Indicate that we're done starting up. Sleep to let
+ # others do the same.
+ #
+ puts "put START$envid to marker"
+ error_check_good marker_done [$markerdb put START$envid START$envid] 0
+ error_check_good marker_sync [$markerdb sync] 0
+ puts "sleeping after marker"
+ tclsleep 3
+
+ # Here is where the real test starts.
+ #
+ # Different operations may have different args in their list.
+ # REPTEST: Args are method, niter, nloops
+ set op [lindex $oplist 0]
+ if { $op == "REPTEST" } {
+ #
+ # This test writes the marker, so close after it runs.
+ #
+ rep065scr_reptest $repenv $oplist $markerdb
+ error_check_good marker_close [$markerdb close] 0
+ }
+ if { $op == "REPTEST_GET" } {
+ #
+ # This test needs to poll the marker. So close it now.
+ #
+ error_check_good marker_close [$markerdb close] 0
+ rep065scr_repget $repenv $oplist $mydir $markerfile
+ }
+ if { $op == "REP_ELECT" } {
+ #
+ # This test writes the marker, so close after it runs.
+ #
+ rep065scr_elect $repenv $oplist $markerdb
+ }
+ puts "Closing env"
+ error_check_good envclose [$repenv close] 0
+
+}
+
+proc rep065scr_msgs { role envid msgdir mydir allids markerfile } {
+ global qtestdir
+
+ #
+ # The main test process will write the marker file when it
+ # has started and when it has completed. We need to
+ # open/close the marker file because we are in a separate
+ # process from the writer and we cannot share an env because
+ # we might be a different BDB release version.
+ #
+puts "$mydir: ID $envid: Open create/btree marker: $markerfile"
+ set markerdb [berkdb_open -create -btree $markerfile]
+ error_check_good marker [is_valid_db $markerdb] TRUE
+puts "$mydir: ID $envid: Open marker: $markerfile"
+ set s [$markerdb get START$envid]
+puts "$mydir: Looking for START$envid. Got $s"
+ while { [llength $s] == 0 } {
+ error_check_good marker_close [$markerdb close] 0
+ tclsleep 1
+ set markerdb [berkdb_open $markerfile]
+ error_check_good marker [is_valid_db $markerdb] TRUE
+ set s [$markerdb get START$envid]
+puts "$mydir: Loop: Looking for START$envid. Got $s"
+ }
+
+ puts "repladd $allids"
+ set qtestdir $msgdir
+ foreach id $allids {
+ repladd $id
+ }
+
+ puts "set up env cmd"
+ if { $role == "MASTER" } {
+ set rep_env_cmd "berkdb_env_noerr -home $mydir \
+ -errpfx MASTER -txn -rep_master \
+ -rep_transport \[list $envid replsend\]"
+# set rep_env_cmd "berkdb_env_noerr -home $mydir \
+# -errpfx MASTER -txn -rep_master \
+# -verbose {rep on} -errfile /dev/stderr \
+# -rep_transport \[list $envid replsend\]"
+ } elseif { $role == "CLIENT" } {
+ set rep_env_cmd "berkdb_env_noerr -home $mydir \
+ -errpfx CLIENT -txn -rep_client \
+ -rep_transport \[list $envid replsend\]"
+# set rep_env_cmd "berkdb_env_noerr -home $mydir \
+# -errpfx CLIENT -txn -rep_client \
+# -verbose {rep on} -errfile /dev/stderr \
+# -rep_transport \[list $envid replsend\]"
+ } else {
+ puts "FAIL: unrecognized replication role $role"
+ return
+ }
+
+ # Change directories to where this will run.
+ cd $mydir
+
+ puts "open repenv $rep_env_cmd"
+ set repenv [eval $rep_env_cmd]
+ error_check_good repenv_open [is_valid_env $repenv] TRUE
+
+ set envlist "{$repenv $envid}"
+ puts "repenv is $repenv"
+ while { 1 } {
+ if { [llength [$markerdb get DONE]] != 0 } {
+ break
+ }
+ process_msgs $envlist 0 NONE NONE 1
+ error_check_good marker_close [$markerdb close] 0
+ set markerdb [berkdb_open $markerfile]
+ error_check_good marker [is_valid_db $markerdb] TRUE
+ tclsleep 1
+ }
+ #
+ # Process messages in case there are a few more stragglers.
+ #
+ process_msgs $envlist 0 NONE NONE 1
+ tclsleep 1
+ process_msgs $envlist 0 NONE NONE 1
+ tclsleep 1
+ error_check_good marker_close [$markerdb close] 0
+ replclear $envid from
+ tclsleep 1
+ replclear $envid
+ error_check_good envclose [$repenv close] 0
+}
+
+proc rep065scr_verify { oplist mydir } {
+ global util_path
+
+ set rep_env_cmd "berkdb_env_noerr -home $mydir"
+
+ # Change directories to where this will run.
+ # !!!
+ # mydir is an absolute path of the form
+ # <path>/build_unix/TESTDIR/MASTERDIR or
+ # <path>/build_unix/TESTDIR/CLIENTDIR.0
+ #
+ # So we want to run relative to the build_unix directory
+ cd $mydir/../..
+
+ foreach op $oplist {
+ set repenv [eval $rep_env_cmd]
+ error_check_good env_open [is_valid_env $repenv] TRUE
+ if { $op == "DB" } {
+ set dbname "$mydir/test.db"
+ set db [berkdb_open -env $repenv -rdonly $dbname]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set txn ""
+ set method [$db get_type]
+puts "Dumping database to $mydir/VERIFY/dbdump"
+ if { [is_record_based $method] == 1 } {
+ dump_file $db $txn $mydir/VERIFY/dbdump \
+ rep_test_upg.recno.check
+ } else {
+ dump_file $db $txn $mydir/VERIFY/dbdump \
+ rep_test_upg.check
+ }
+ error_check_good dbclose [$db close] 0
+ }
+ if { $op == "LOG" } {
+ set lgstat [$repenv log_stat]
+ set lgfile [stat_field $repenv log_stat "Current log file number"]
+ set lgoff [stat_field $repenv log_stat "Current log file offset"]
+ puts "Current LSN: $lgfile $lgoff"
+ set f [open $mydir/VERIFY/loglsn w]
+ puts $f $lgfile
+ puts $f $lgoff
+ close $f
+
+ set stat [catch {eval exec $util_path/db_printlog \
+ -h $mydir > $mydir/VERIFY/prlog} result]
+ if { $stat != 0 } {
+ puts "PRINTLOG: $result"
+ }
+ error_check_good stat_prlog $stat 0
+ }
+ error_check_good envclose [$repenv close] 0
+ }
+ #
+ # Run recovery locally so that any later upgrades are ready
+ # to be upgraded.
+ #
+ set stat [catch {eval exec $util_path/db_recover -h $mydir} result]
+ if { $stat != 0 } {
+ puts "RECOVERY: $result"
+ }
+ error_check_good stat_rec $stat 0
+
+}
+
+set usage "upgradescript type role op envid allids ctldir mydir reputils_path"
+
+# Verify usage
+if { $argc != 8 } {
+ puts stderr "Argc $argc, argv $argv"
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set type [ lindex $argv 0 ]
+set role [ lindex $argv 1 ]
+set op [ lindex $argv 2 ]
+set envid [ lindex $argv 3 ]
+set allids [ lindex $argv 4 ]
+set ctldir [ lindex $argv 5 ]
+set mydir [ lindex $argv 6 ]
+set reputils_path [ lindex $argv 7 ]
+
+set histdir $mydir/../..
+puts "Histdir $histdir"
+
+set msgtestdir $ctldir/TESTDIR
+
+cd $histdir
+source ./include.tcl
+source $test_path/test.tcl
+if { [is_substr $histdir "db-4.2"] } {
+ source $ctldir/$test_path/testutils42.tcl
+}
+
+set is_repchild 1
+puts "Did args. now source reputils"
+source $reputils_path/reputils.tcl
+
+set markerdir $msgtestdir/MARKER
+if { [file exists $markerdir] == 0 } {
+ file mkdir $markerdir
+}
+set markerfile $markerdir/marker.db
+
+puts "Calling proc for type $type"
+if { $type == "START" } {
+ rep065scr_starttest $role $op $envid $msgtestdir $mydir $allids $markerfile
+} elseif { $type == "PROCMSGS" } {
+ rep065scr_msgs $role $envid $msgtestdir $mydir $allids $markerfile
+} elseif { $type == "VERIFY" } {
+puts "Making VERIFY dir"
+ file mkdir $mydir/VERIFY
+puts "Call rep065scr_verify with $op and $mydir"
+ rep065scr_verify $op $mydir
+} else {
+ puts "FAIL: unknown type $type"
+ return
+}
diff --git a/db/test/rep066.tcl b/db/test/rep066.tcl
new file mode 100644
index 000000000..e751e2e78
--- /dev/null
+++ b/db/test/rep066.tcl
@@ -0,0 +1,229 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: rep066.tcl,v 12.4 2006/09/08 20:32:18 bostic Exp $
+#
+# TEST rep066
+# TEST Replication and dead log handles.
+# TEST
+# TEST Run rep_test on master and a client.
+# TEST Simulate client crashes (master continues) until log 2.
+# TEST Open 2nd master env handle and put something in log and flush.
+# TEST Downgrade master, restart client as master.
+# TEST Run rep_test on newmaster until log 2.
+# TEST New master writes log records, newclient processes records
+# TEST and 2nd newclient env handle calls log_flush.
+# TEST New master commits, newclient processes and should succeed.
+# TEST Make sure 2nd handle detects the old log handle and doesn't
+# TEST write to a stale handle (if it does, the processing of the
+# TEST commit will fail).
+#
+proc rep066 { method { niter 10 } { tnum "066" } args } {
+
+ source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
+ # Run for all access methods.
+ if { $checking_valid_methods } {
+ return "ALL"
+ }
+
+ set args [convert_args $method $args]
+ set logsets [create_logsets 2]
+
+ # Run the body of the test with and without recovery.
+ foreach r $test_recopts {
+ foreach l $logsets {
+ set logindex [lsearch -exact $l "in-memory"]
+ if { $r == "-recover" && $logindex != -1 } {
+ puts "Rep$tnum: Skipping\
+ for in-memory logs with -recover."
+ continue
+ }
+ puts "Rep$tnum ($method $r):\
+ Replication and dead log handles."
+ puts "Rep$tnum: Master logs are [lindex $l 0]"
+ puts "Rep$tnum: Client logs are [lindex $l 1]"
+ rep066_sub $method $niter $tnum $l $r $args
+ }
+ }
+}
+
+proc rep066_sub { method niter tnum logset recargs largs } {
+ global testdir
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Log size is small so we quickly create more than one.
+ # The documentation says that the log file must be at least
+ # four times the size of the in-memory log buffer.
+ set pagesize 4096
+ append largs " -pagesize $pagesize "
+ set log_buf [expr $pagesize * 2]
+ set log_max [expr $log_buf * 4]
+ set m_logargs " -log_buffer $log_buf "
+ set c_logargs " -log_buffer $log_buf "
+
+ set m_logtype [lindex $logset 0]
+ set c_logtype [lindex $logset 1]
+
+ # In-memory logs require a large log buffer, and cannot
+ # be used with -txn nosync.
+ set m_logargs [adjust_logargs $m_logtype]
+ set c_logargs [adjust_logargs $c_logtype]
+ set m_txnargs [adjust_txnargs $m_logtype]
+ set c_txnargs [adjust_txnargs $c_logtype]
+
+ # Open a master.
+ # Later we'll open a 2nd handle to this env.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+ $m_logargs -errpfx ENV0 -log_max $log_max \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create $m_txnargs \
+# $m_logargs -log_max $log_max \
+# -errpfx ENV0 -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set env0 [eval $ma_envcmd $recargs -rep_master]
+ set masterenv $env0
+ error_check_good master_env [is_valid_env $env0] TRUE
+
+ # Open a client.
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+ $c_logargs -errpfx ENV1 -log_max $log_max \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create $c_txnargs \
+# $c_logargs -log_max $log_max \
+# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set env1 [eval $cl_envcmd $recargs -rep_client]
+ set clientenv $env1
+ error_check_good client_env [is_valid_env $env1] TRUE
+
+
+ # Bring the clients online by processing the startup messages.
+ set envlist "{$env0 1} {$env1 2}"
+ process_msgs $envlist
+
+ # Run a modified test001 in the master (and update clients).
+ puts "\tRep$tnum.a.0: Running rep_test in replicated env."
+ eval rep_test $method $masterenv NULL $niter 0 0 0 0 $largs
+ process_msgs $envlist
+
+ set nstart $niter
+ set last_client_log [get_logfile $env1 last]
+ set stop 0
+ while { $stop == 0 } {
+ puts "\tRep$tnum.b: Run test on master until log file changes."
+ eval rep_test\
+ $method $masterenv NULL $niter $nstart $nstart 0 0 $largs
+ incr nstart $niter
+ replclear 2
+ set last_master_log [get_logfile $masterenv last]
+ if { $last_master_log > $last_client_log } {
+ set stop 1
+ }
+ }
+
+ # Open a 2nd env handle on the master.
+ # We want to have some operations happen on the normal
+ # handle and then flush them with this handle.
+ puts "\tRep$tnum.c: Open 2nd master env and flush log."
+ set 2ndenv [eval $ma_envcmd -rep_master -errpfx 2NDENV]
+ error_check_good master_env [is_valid_env $2ndenv] TRUE
+
+ set testfile2 "test$tnum.2.db"
+ set omethod [convert_method $method]
+ set txn [$masterenv txn]
+ error_check_good txn [is_valid_txn $txn $masterenv] TRUE
+ set db [eval {berkdb_open_noerr -env $masterenv -txn $txn \
+ -create -mode 0644} $largs $omethod $testfile2]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Flush on the 2nd handle
+ set lf [stat_field $2ndenv log_stat "Times log flushed to disk"]
+ error_check_good flush [$2ndenv log_flush] 0
+ set lf2 [stat_field $2ndenv log_stat "Times log flushed to disk"]
+ error_check_bad log_flush $lf $lf2
+
+ # Resolve the txn and close the database
+ error_check_good commit [$txn commit] 0
+ error_check_good close [$db close] 0
+
+ # Nuke those messages for client about to become master.
+ replclear 2
+
+ puts "\tRep$tnum.d: Swap envs"
+ set masterenv $env1
+ set clientenv $env0
+ error_check_good downgrade [$clientenv rep_start -client] 0
+ error_check_good upgrade [$masterenv rep_start -master] 0
+ set envlist "{$env0 1} {$env1 2}"
+ process_msgs $envlist
+
+ #
+ # At this point, env0 should have rolled back across the log file.
+ # We need to do some operations on the master, process them on
+ # the client (but not a commit because that flushes). We want
+ # the message processing client env (env0) to put records in
+ # the log buffer and the 2nd env handle to flush the log.
+ #
+ puts "\tRep$tnum.e: Run test until create new log file."
+ #
+ # Set this to the last log file the old master had.
+ #
+ set last_client_log $last_master_log
+ set last_master_log [get_logfile $masterenv last]
+ set stop 0
+ while { $stop == 0 } {
+ puts "\tRep$tnum.b: Run test on master until log file changes."
+ eval rep_test\
+ $method $masterenv NULL $niter $nstart $nstart 0 0 $largs
+ process_msgs $envlist
+ incr nstart $niter
+ set last_master_log [get_logfile $masterenv last]
+ if { $last_master_log == $last_client_log } {
+ set stop 1
+ }
+ }
+ puts "\tRep$tnum.f: Create some log records."
+ set txn [$masterenv txn]
+ error_check_good txn [is_valid_txn $txn $masterenv] TRUE
+ set db [eval {berkdb_open_noerr -env $masterenv -txn $txn \
+ -create -mode 0644} $largs $omethod $testfile2]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ process_msgs $envlist
+ # Flush on the 2nd handle
+ puts "\tRep$tnum.g: Flush on 2nd env handle."
+ set lf [stat_field $2ndenv log_stat "Times log flushed to disk"]
+ error_check_good flush [$2ndenv log_flush] 0
+ set lf2 [stat_field $2ndenv log_stat "Times log flushed to disk"]
+ error_check_bad log_flush2 $lf $lf2
+
+ # Resolve the txn and close the database
+ puts "\tRep$tnum.h: Process commit on client env handle."
+ error_check_good commit [$txn commit] 0
+ error_check_good close [$db close] 0
+ process_msgs $envlist
+
+ error_check_good cl2_close [$2ndenv close] 0
+ error_check_good env0_close [$env0 close] 0
+ error_check_good env1_close [$env1 close] 0
+ replclose $testdir/MSGQUEUEDIR
+ return
+}
+
diff --git a/db/test/reputils.tcl b/db/test/reputils.tcl
index f25da575a..4815ac866 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: reputils.tcl,v 11.84 2004/11/03 18:50:52 carol Exp $
+# $Id: reputils.tcl,v 12.30 2006/09/13 21:51:23 carol Exp $
#
# Replication testing utilities
@@ -27,10 +27,14 @@
# The globals repenv(1-N) contain the environment handles for the sites
# with a given id (i.e., repenv(1) is the master's environment.
-global queueenv
-# Array of DB handles, one per machine ID, for the databases that contain
-# messages.
+# queuedbs is an array of DB handles, one per machine ID/machine ID pair,
+# for the databases that contain messages from one machine to another.
+# We omit the cases where the "from" and "to" machines are the same.
+# Since tcl does not have real two-dimensional arrays, we use this
+# naming convention: queuedbs(1.2) has the handle for the database
+# containing messages to machid 1 from machid 2.
+#
global queuedbs
global machids
global perm_response_list
@@ -40,6 +44,8 @@ set perm_sent_list {}
global elect_timeout
set elect_timeout 50000000
set drop 0
+global anywhere
+set anywhere 0
# The default for replication testing is for logs to be on-disk.
# Mixed-mode log testing provides a mixture of on-disk and
@@ -58,10 +64,15 @@ proc create_logsets { nsites } {
global rand_init
error_check_good set_random_seed [berkdb srand $rand_init] 0
- if { $mixed_mode_logging == 0 } {
+ if { $mixed_mode_logging == 0 || $mixed_mode_logging == 2 } {
+ if { $mixed_mode_logging == 0 } {
+ set logmode "on-disk"
+ } else {
+ set logmode "in-memory"
+ }
set loglist {}
for { set i 0 } { $i < $nsites } { incr i } {
- lappend loglist "on-disk"
+ lappend loglist $logmode
}
set logsets [list $loglist]
}
@@ -87,6 +98,24 @@ proc create_logsets { nsites } {
return $logsets
}
+proc run_inmem { method test {display 0} {run 1} \
+ {outfile stdout} {largs ""} } {
+ global mixed_mode_logging
+ set mixed_mode_logging 2
+
+ set prefix [string range $test 0 2]
+ if { $prefix != "rep" } {
+ puts "Skipping in-mem log testing for non-rep test."
+ set mixed_mode_logging 0
+ return
+ }
+
+ eval run_method $method $test $display $run $outfile $largs
+
+ # Reset to default values after run.
+ set mixed_mode_logging 0
+}
+
proc run_mixedmode { method test {display 0} {run 1} \
{outfile stdout} {largs ""} } {
global mixed_mode_logging
@@ -114,12 +143,16 @@ proc repl_envsetup { envargs largs test {nclients 1} {droppct 0} { oob 0 } } {
global drop drop_msg
global masterdir
global repenv
- global testdir
+ global qtestdir testdir
env_cleanup $testdir
replsetup $testdir/MSGQUEUEDIR
+ if { ![info exists qtestdir] } {
+ set qtestdir $testdir
+ }
+
set masterdir $testdir/MASTERDIR
file mkdir $masterdir
if { $droppct != 0 } {
@@ -142,13 +175,15 @@ proc repl_envsetup { envargs largs test {nclients 1} {droppct 0} { oob 0 } } {
# as keys/data can run.
#
set logmax [expr 3 * 1024 * 1024]
+ set lockmax 40000
set ma_cmd "berkdb_env -create -log_max $logmax $envargs \
- -lock_max 10000 \
+ -cachesize { 0 4194304 1 } \
+ -lock_max_objects $lockmax -lock_max_locks $lockmax \
-home $masterdir -txn nosync -rep_master -rep_transport \
\[list 1 replsend\]"
# set ma_cmd "berkdb_env_noerr -create -log_max $logmax $envargs \
-# -lock_max 10000 -verbose {rep on} -errfile /dev/stderr \
-# -errpfx $masterdir \
+# -lock_max_objects $lockmax -lock_max_locks $lockmax \
+# -verbose {rep on} -errfile /dev/stderr -errpfx $masterdir \
# -home $masterdir -txn nosync -rep_master -rep_transport \
# \[list 1 replsend\]"
set masterenv [eval $ma_cmd]
@@ -160,11 +195,13 @@ proc repl_envsetup { envargs largs test {nclients 1} {droppct 0} { oob 0 } } {
set envid [expr $i + 2]
repladd $envid
set cl_cmd "berkdb_env -create $envargs -txn nosync \
- -cachesize { 0 10000000 0 } -lock_max 10000 \
- -home $clientdir($i) -rep_client -rep_transport \
+ -cachesize { 0 10000000 0 } \
+ -lock_max_objects $lockmax -lock_max_locks $lockmax \
+ -home $clientdir($i) -rep_client -rep_transport \
\[list $envid replsend\]"
# set cl_cmd "berkdb_env_noerr -create $envargs -txn nosync \
-# -cachesize { 0 10000000 0 } -lock_max 10000 \
+# -cachesize { 0 10000000 0 } \
+# -lock_max_objects $lockmax -lock_max_locks $lockmax \
# -home $clientdir($i) -rep_client -rep_transport \
# \[list $envid replsend\] -verbose {rep on} \
# -errfile /dev/stderr -errpfx $clientdir($i)"
@@ -247,7 +284,7 @@ proc repl_envprocq { test { nclients 1 } { oob 0 }} {
[expr $requested <= $queued] 1
}
- $clientenv rep_request 1 1
+ $clientenv rep_request 1 4
}
# If we were dropping messages, we might need
@@ -345,7 +382,8 @@ proc repl_verdel { test method { nclients 1 } } {
set txn [$repenv(master) txn]
error_check_good txn_begin [is_valid_txn $txn \
$repenv(master)] TRUE
- set db [berkdb_open -txn $txn -env $repenv(master) $testfile]
+ set db [eval berkdb_open -txn $txn -env $repenv(master) \
+ $testfile]
error_check_good reopen_master [is_valid_db $db] TRUE
set dbc [$db cursor -txn $txn]
error_check_good reopen_master_cursor \
@@ -364,7 +402,7 @@ proc repl_verdel { test method { nclients 1 } } {
for { set i 0 } { $i < $nclients } { incr i } {
puts "\t$test: Verifying client database $i is empty."
- set db [berkdb_open -env $repenv($i) $testfile]
+ set db [eval berkdb_open -env $repenv($i) $testfile]
error_check_good reopen_client($i) \
[is_valid_db $db] TRUE
set dbc [$db cursor]
@@ -393,7 +431,7 @@ proc repl_envclose { test envargs } {
global encrypt
global masterdir
global repenv
- global testdir
+ global qtestdir testdir
if { [lsearch $envargs "-encrypta*"] !=-1 } {
set encrypt 1
@@ -422,45 +460,59 @@ proc repl_envclose { test envargs } {
error_check_good client($i)_close [$repenv($i) close] 0
verify_dir $clientdir($i) "\t$test: " 0 0 1
}
- replclose $testdir/MSGQUEUEDIR
+ replclose $qtestdir/MSGQUEUEDIR
}
-# Close up a replication group
+# Close up a replication group - close all message dbs.
proc replclose { queuedir } {
- global queueenv queuedbs machids
+ global queuedbs machids
- foreach m $machids {
- set db $queuedbs($m)
- error_check_good dbr_close [$db close] 0
+ set dbs [array names queuedbs]
+ foreach tofrom $dbs {
+ set handle $queuedbs($tofrom)
+ error_check_good db_close [$handle close] 0
+ unset queuedbs($tofrom)
}
- error_check_good qenv_close [$queueenv close] 0
+
set machids {}
}
# Create a replication group for testing.
proc replsetup { queuedir } {
- global queueenv queuedbs machids
+ global queuedbs machids
file mkdir $queuedir
- set queueenv \
- [berkdb_env -create -txn nosync -lock_max 20000 -home $queuedir]
- error_check_good queueenv [is_valid_env $queueenv] TRUE
- if { [info exists queuedbs] } {
- unset queuedbs
+ # If there are any leftover handles, get rid of them.
+ set dbs [array names queuedbs]
+ foreach tofrom $dbs {
+ unset queuedbs($tofrom)
}
set machids {}
+}
- return $queueenv
+# Replnoop is a dummy function to substitute for replsend
+# when replication is off.
+proc replnoop { control rec fromid toid flags lsn } {
+ return 0
}
# Send function for replication.
proc replsend { control rec fromid toid flags lsn } {
- global queuedbs queueenv machids
+ global is_repchild
+ global queuedbs machids
global drop drop_msg
global perm_sent_list
- if { [llength $perm_sent_list] != 0 && $flags == "perm" } {
+ global anywhere
+ global qtestdir testdir
+
+ if { ![info exists qtestdir] } {
+ set qtestdir $testdir
+ }
+ set queuedir $qtestdir/MSGQUEUEDIR
+ set permflags [lsearch $flags "perm"]
+ if { [llength $perm_sent_list] != 0 && $permflags != -1 } {
# puts "replsend sent perm message, LSN $lsn"
lappend perm_sent_list $lsn
}
@@ -478,80 +530,228 @@ proc replsend { control rec fromid toid flags lsn } {
}
}
# XXX
- # -1 is DB_BROADCAST_MID
+ # -1 is DB_BROADCAST_EID
if { $toid == -1 } {
set machlist $machids
} else {
- if { [info exists queuedbs($toid)] != 1 } {
- error "replsend: machid $toid not found"
+ set m NULL
+ # If we can send this anywhere, send it to the first id
+ # we find that is neither toid or fromid. If we don't
+ # find any other candidates, this falls back to the
+ # original toid.
+ if { $anywhere != 0 } {
+ set anyflags [lsearch $flags "any"]
+ if { $anyflags != -1 } {
+ foreach m $machids {
+ if { $m == $fromid || $m == $toid } {
+ continue
+ }
+ set machlist [list $m]
+ break
+ }
+ }
+ }
+ #
+ # If we didn't find a different site, fall back
+ # to the toid.
+ #
+ if { $m == "NULL" } {
+ set machlist [list $toid]
}
- set machlist [list $toid]
}
-
foreach m $machlist {
- # XXX should a broadcast include to "self"?
+ # Do not broadcast to self.
if { $m == $fromid } {
continue
}
-
- set db $queuedbs($m)
- set txn [$queueenv txn]
- $db put -txn $txn -append [list $control $rec $fromid]
- error_check_good replsend_commit [$txn commit] 0
+ # Find the handle for the right message file.
+ set pid [pid]
+ set db $queuedbs($m.$fromid.$pid)
+ set stat [catch {$db put -append [list $control $rec $fromid]} ret]
+ }
+ if { $is_repchild } {
+ replready $fromid from
}
return 0
}
# Discard all the pending messages for a particular site.
-proc replclear { machid } {
- global queuedbs queueenv
+proc replclear { machid {tf "to"}} {
+ global queuedbs qtestdir testdir
- if { [info exists queuedbs($machid)] != 1 } {
- error "FAIL: replclear: machid $machid not found"
+ if { ![info exists qtestdir] } {
+ set qtestdir $testdir
}
+ set queuedir $qtestdir/MSGQUEUEDIR
+ set orig [pwd]
- set db $queuedbs($machid)
- set txn [$queueenv txn]
- set dbc [$db cursor -txn $txn]
- for { set dbt [$dbc get -rmw -first] } { [llength $dbt] > 0 } \
- { set dbt [$dbc get -rmw -next] } {
- error_check_good replclear($machid)_del [$dbc del] 0
+ cd $queuedir
+ if { $tf == "to" } {
+ set msgdbs [glob -nocomplain ready.$machid.*]
+ } else {
+ set msgdbs [glob -nocomplain ready.*.$machid.*]
+ }
+ foreach m $msgdbs {
+ file delete -force $m
}
- error_check_good replclear($machid)_dbc_close [$dbc close] 0
- error_check_good replclear($machid)_txn_commit [$txn commit] 0
+ cd $orig
+ set dbs [array names queuedbs]
+ foreach tofrom $dbs {
+ # Process only messages _to_ the specified machid.
+ if { [string match $machid.* $tofrom] == 1 } {
+ set db $queuedbs($tofrom)
+ set dbc [$db cursor]
+ for { set dbt [$dbc get -first] } \
+ { [llength $dbt] > 0 } \
+ { set dbt [$dbc get -next] } {
+ error_check_good \
+ replclear($machid)_del [$dbc del] 0
+ }
+ error_check_good replclear($db)_dbc_close [$dbc close] 0
+ }
+ }
+ cd $queuedir
+ if { $tf == "to" } {
+ set msgdbs [glob -nocomplain temp.$machid.*]
+ } else {
+ set msgdbs [glob -nocomplain temp.*.$machid.*]
+ }
+ foreach m $msgdbs {
+# file delete -force $m
+ }
+ cd $orig
}
-# Add a machine to a replication environment.
-proc repladd { machid } {
- global queueenv queuedbs machids
+# Makes messages available to replprocessqueue by closing and
+# renaming the message files. We ready the files for one machine
+# ID at a time -- just those "to" or "from" the machine we want to
+# process, depending on 'tf'.
+proc replready { machid tf } {
+ global queuedbs machids
+ global counter
+ global qtestdir testdir
+
+ if { ![info exists qtestdir] } {
+ set qtestdir $testdir
+ }
+ set queuedir $qtestdir/MSGQUEUEDIR
+
+ set pid [pid]
+ #
+ # Close the temporary message files for the specified machine.
+ # Only close it if there are messages available.
+ #
+ set dbs [array names queuedbs]
+ set closed {}
+ foreach tofrom $dbs {
+ set toidx [string first . $tofrom]
+ set toid [string replace $tofrom $toidx end]
+ set fidx [expr $toidx + 1]
+ set fromidx [string first . $tofrom $fidx]
+ #
+ # First chop off the end, then chop off the toid
+ # in the beginning.
+ #
+ set fromid [string replace $tofrom $fromidx end]
+ set fromid [string replace $fromid 0 $toidx]
+ if { ($tf == "to" && $machid == $toid) || \
+ ($tf == "from" && $machid == $fromid) } {
+ set nkeys [stat_field $queuedbs($tofrom) \
+ stat "Number of keys"]
+ if { $nkeys != 0 } {
+ lappend closed \
+ [list $toid $fromid temp.$tofrom]
+ error_check_good temp_close \
+ [$queuedbs($tofrom) close] 0
+ }
+ }
+ }
+
+ # Rename the message files.
+ set cwd [pwd]
+ foreach filename $closed {
+ set toid [lindex $filename 0]
+ set fromid [lindex $filename 1]
+ set fname [lindex $filename 2]
+ set tofrom [string replace $fname 0 4]
+ incr counter($machid)
+ cd $queuedir
+# puts "$queuedir: Msg ready $fname to ready.$tofrom.$counter($machid)"
+ file rename -force $fname ready.$tofrom.$counter($machid)
+ cd $cwd
+ replsetuptempfile $toid $fromid $queuedir
- if { [info exists queuedbs($machid)] == 1 } {
- error "FAIL: repladd: machid $machid already exists"
}
+}
+
+# Add a machine to a replication environment. This checks
+# that we have not already established that machine id, and
+# adds the machid to the list of ids.
+proc repladd { machid } {
+ global queuedbs machids counter qtestdir testdir
- set queuedbs($machid) [berkdb open -auto_commit \
- -env $queueenv -create -recno -renumber repqueue$machid.db]
- error_check_good repqueue_create [is_valid_db $queuedbs($machid)] TRUE
+ if { ![info exists qtestdir] } {
+ set qtestdir $testdir
+ }
+ set queuedir $qtestdir/MSGQUEUEDIR
+ if { [info exists machids] } {
+ if { [lsearch -exact $machids $machid] >= 0 } {
+ error "FAIL: repladd: machid $machid already exists."
+ }
+ }
+ set counter($machid) 0
lappend machids $machid
+
+ # Create all the databases that receive messages sent _to_
+ # the new machid.
+ replcreatetofiles $machid $queuedir
+
+ # Create all the databases that receive messages sent _from_
+ # the new machid.
+ replcreatefromfiles $machid $queuedir
}
-# Acquire a handle to work with an existing machine's replication
-# queue. This is for situations where more than one process
-# is working with a message queue. In general, having more than one
-# process handle the queue is wrong. However, in order to test some
-# things, we need two processes (since Tcl doesn't support threads). We
-# go to great pain in the test harness to make sure this works, but we
-# don't let customers do it.
-proc repljoin { machid } {
- global queueenv queuedbs machids
+# Creates all the databases that a machid needs for receiving messages
+# from other participants in a replication group. Used when first
+# establishing the temp files, but also used whenever replready moves the
+# temp files away, because we'll need new files for any future messages.
+proc replcreatetofiles { toid queuedir } {
+ global machids
+
+ foreach m $machids {
+ # We don't need a file for a machid to send itself messages.
+ if { $m == $toid } {
+ continue
+ }
+ replsetuptempfile $toid $m $queuedir
+ }
+}
- set queuedbs($machid) [berkdb open -auto_commit \
- -env $queueenv repqueue$machid.db]
- error_check_good repqueue_create [is_valid_db $queuedbs($machid)] TRUE
+# Creates all the databases that a machid needs for sending messages
+# to other participants in a replication group. Used when first
+# establishing the temp files only. Replready moves files based on
+# recipient, so we recreate files based on the recipient, also.
+proc replcreatefromfiles { fromid queuedir } {
+ global machids
- lappend machids $machid
+ foreach m $machids {
+ # We don't need a file for a machid to send itself messages.
+ if { $m == $fromid } {
+ continue
+ }
+ replsetuptempfile $m $fromid $queuedir
+ }
+}
+
+proc replsetuptempfile { to from queuedir } {
+ global queuedbs
+
+ set pid [pid]
+ set queuedbs($to.$from.$pid) [berkdb open -create -excl -recno\
+ -renumber $queuedir/temp.$to.$from.$pid]
+ error_check_good open_queuedbs [is_valid_db $queuedbs($to.$from.$pid)] TRUE
}
# Process a queue of messages, skipping every "skip_interval" entry.
@@ -560,9 +760,9 @@ proc repljoin { machid } {
# on a later run.
proc replprocessqueue { dbenv machid { skip_interval 0 } { hold_electp NONE } \
{ newmasterp NONE } { dupmasterp NONE } { errp NONE } } {
- global queuedbs queueenv errorCode
+ global errorCode
global perm_response_list
- global startup_done
+ global qtestdir testdir
# hold_electp is a call-by-reference variable which lets our caller
# know we need to hold an election.
@@ -594,145 +794,153 @@ proc replprocessqueue { dbenv machid { skip_interval 0 } { hold_electp NONE } \
set nproced 0
- set txn [$queueenv txn]
+ set queuedir $qtestdir/MSGQUEUEDIR
+ replready $machid to
- # If we are running separate processes, the second process has
- # to join an existing message queue.
- if { [info exists queuedbs($machid)] == 0 } {
- repljoin $machid
- }
-
- set dbc [$queuedbs($machid) cursor -txn $txn]
+ # Change directories temporarily so we get just the msg file name.
+ set cwd [pwd]
+ cd $queuedir
+ set msgdbs [glob -nocomplain ready.$machid.*]
+# puts "$queuedir.$machid: My messages: $msgdbs"
+ cd $cwd
- error_check_good process_dbc($machid) \
- [is_valid_cursor $dbc $queuedbs($machid)] TRUE
+ foreach msgdb $msgdbs {
+ set db [berkdb_open $queuedir/$msgdb]
+ set dbc [$db cursor]
- for { set dbt [$dbc get -first] } \
- { [llength $dbt] != 0 } \
- { } {
- set data [lindex [lindex $dbt 0] 1]
- set recno [lindex [lindex $dbt 0] 0]
+ error_check_good process_dbc($machid) \
+ [is_valid_cursor $dbc $db] TRUE
- # If skip_interval is nonzero, we want to process messages
- # out of order. We do this in a simple but slimy way--
- # continue walking with the cursor without processing the
- # message or deleting it from the queue, but do increment
- # "nproced". The way this proc is normally used, the
- # precise value of nproced doesn't matter--we just don't
- # assume the queues are empty if it's nonzero. Thus,
- # if we contrive to make sure it's nonzero, we'll always
- # come back to records we've skipped on a later call
- # to replprocessqueue. (If there really are no records,
- # we'll never get here.)
- #
- # Skip every skip_interval'th record (and use a remainder other
- # than zero so that we're guaranteed to really process at least
- # one record on every call).
- if { $skip_interval != 0 } {
- if { $nproced % $skip_interval == 1 } {
- incr nproced
- set dbt [$dbc get -next]
- continue
+ for { set dbt [$dbc get -first] } \
+ { [llength $dbt] != 0 } \
+ { set dbt [$dbc get -next] } {
+ set data [lindex [lindex $dbt 0] 1]
+ set recno [lindex [lindex $dbt 0] 0]
+
+ # If skip_interval is nonzero, we want to process
+ # messages out of order. We do this in a simple but
+ # slimy way -- continue walking with the cursor
+ # without processing the message or deleting it from
+ # the queue, but do increment "nproced". The way
+ # this proc is normally used, the precise value of
+ # nproced doesn't matter--we just don't assume the
+ # queues are empty if it's nonzero. Thus, if we
+ # contrive to make sure it's nonzero, we'll always
+ # come back to records we've skipped on a later call
+ # to replprocessqueue. (If there really are no records,
+ # we'll never get here.)
+ #
+ # Skip every skip_interval'th record (and use a
+ # remainder other than zero so that we're guaranteed
+ # to really process at least one record on every call).
+ if { $skip_interval != 0 } {
+ if { $nproced % $skip_interval == 1 } {
+ incr nproced
+ set dbt [$dbc get -next]
+ continue
+ }
}
- }
- # We need to remove the current message from the queue,
- # because we're about to end the transaction and someone
- # else processing messages might come in and reprocess this
- # message which would be bad.
- error_check_good queue_remove [$dbc del] 0
-
- # We have to play an ugly cursor game here: we currently
- # hold a lock on the page of messages, but rep_process_message
- # might need to lock the page with a different cursor in
- # order to send a response. So save the next recno, close
- # the cursor, and then reopen and reset the cursor.
- # If someone else is processing this queue, our entry might
- # have gone away, and we need to be able to handle that.
-
- error_check_good dbc_process_close [$dbc close] 0
- error_check_good txn_commit [$txn commit] 0
-
- set ret [catch {$dbenv rep_process_message \
- [lindex $data 2] [lindex $data 0] [lindex $data 1]} res]
+ # We need to remove the current message from the
+ # queue, because we're about to end the transaction
+ # and someone else processing messages might come in
+ # and reprocess this message which would be bad.
+ #
+ error_check_good queue_remove [$dbc del] 0
+
+ # We have to play an ugly cursor game here: we
+ # currently hold a lock on the page of messages, but
+ # rep_process_message might need to lock the page with
+ # a different cursor in order to send a response. So
+ # save the next recno, close the cursor, and then
+ # reopen and reset the cursor. If someone else is
+ # processing this queue, our entry might have gone
+ # away, and we need to be able to handle that.
+ #
+# error_check_good dbc_process_close [$dbc close] 0
- # Save all ISPERM and NOTPERM responses so we can compare their
- # LSNs to the LSN in the log. The variable perm_response_list
- # holds the entire response so we can extract responses and
- # LSNs as needed.
- #
- if { [llength $perm_response_list] != 0 && \
- ([is_substr $res ISPERM] || [is_substr $res NOTPERM]) } {
- lappend perm_response_list $res
- }
+ set ret [catch {$dbenv rep_process_message \
+ [lindex $data 2] [lindex $data 0] \
+ [lindex $data 1]} res]
- if { $ret != 0 } {
- if { [string compare $errp NONE] != 0 } {
- set errorp "$dbenv $machid $res"
- } else {
- error "FAIL:[timestamp]\
- rep_process_message returned $res"
+ # Save all ISPERM and NOTPERM responses so we can
+ # compare their LSNs to the LSN in the log. The
+ # variable perm_response_list holds the entire
+ # response so we can extract responses and LSNs as
+ # needed.
+ #
+ if { [llength $perm_response_list] != 0 && \
+ ([is_substr $res ISPERM] || [is_substr $res NOTPERM]) } {
+ lappend perm_response_list $res
}
- }
- incr nproced
-
- # Now, re-establish the cursor position. We fetch the
- # current record number. If there is something there,
- # that is the record for the next iteration. If there
- # is nothing there, then we've consumed the last item
- # in the queue.
-
- set txn [$queueenv txn]
- set dbc [$queuedbs($machid) cursor -txn $txn]
- set dbt [$dbc get -set_range $recno]
-
- if { $ret == 0 } {
- set rettype [lindex $res 0]
- set retval [lindex $res 1]
- #
- # Do nothing for 0 and NEWSITE
- #
- if { [is_substr $rettype STARTUPDONE] } {
- set startup_done 1
+ if { $ret != 0 } {
+ if { [string compare $errp NONE] != 0 } {
+ set errorp "$dbenv $machid $res"
+ } else {
+ error "FAIL:[timestamp]\
+ rep_process_message returned $res"
+ }
}
- if { [is_substr $rettype HOLDELECTION] } {
- set hold_elect 1
+
+ incr nproced
+ 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 $dbenv $machid"
+ }
+ 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 when we get a NEWMASTER message;
+ # our caller needs to handle it.
+ break
+ }
}
- if { [is_substr $rettype DUPMASTER] } {
- set dupmaster "1 $dbenv $machid"
+
+ if { $errorp != 0 } {
+ # Break on an error, caller wants to handle it.
+ break
}
- if { [is_substr $rettype NOTPERM] || \
- [is_substr $rettype ISPERM] } {
- set lsnfile [lindex $retval 0]
- set lsnoff [lindex $retval 1]
+ if { $hold_elect == 1 } {
+ # Break on a HOLDELECTION, for the same reason.
+ break
}
- if { [is_substr $rettype NEWMASTER] } {
- set newmaster $retval
- # Break as soon as we get a NEWMASTER message;
- # our caller needs to handle it.
+ if { $dupmaster == 1 } {
+ # Break on a DUPMASTER, for the same reason.
break
}
- }
- if { $errorp != 0 } {
- # 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 DUPMASTER, for the same reason.
- break
}
+ error_check_good dbc_close [$dbc close] 0
- }
-
- error_check_good dbc_close [$dbc close] 0
- error_check_good txn_commit [$txn commit] 0
+ #
+ # Check the number of keys remaining because we only
+ # want to rename to done, message file that are
+ # fully processed. Some message types might break
+ # out of the loop early and we want to process
+ # the remaining messages the next time through.
+ #
+ set nkeys [stat_field $db stat "Number of keys"]
+ error_check_good db_close [$db close] 0
+ if { $nkeys == 0 } {
+ set dbname [string replace $msgdb 0 5 done.]
+# file rename -force $queuedir/$msgdb $queuedir/$dbname
+ file delete -force $queuedir/$msgdb
+ }
+ }
# Return the number of messages processed.
return $nproced
}
@@ -791,13 +999,14 @@ proc start_election \
set oid [open $testdir/ELECTION_SOURCE.$elect_serial w]
puts $oid "source $test_path/test.tcl"
+ puts $oid "set is_repchild 1"
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 \]"
+ $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 $nvotes $pri \
$elect_timeout\} ret\]"
@@ -823,8 +1032,8 @@ proc start_election \
puts $oid "close \$r"
close $oid
-# set t [open "|$tclsh_path >& $testdir/ELECTION_OUTPUT.$elect_serial" w]
- set t [open "|$tclsh_path" w]
+ 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
@@ -880,7 +1089,7 @@ proc run_election { ecmd celist errcmd priority crsh qdir msg elector \
upvar $priority pri
upvar $crsh crash
- set elect_timeout 5000000
+ set elect_timeout 15000000
foreach pair $cenvlist {
set id [lindex $pair 1]
@@ -906,7 +1115,7 @@ proc run_election { ecmd celist errcmd priority crsh qdir msg elector \
set pfx "CHILD$elector.$elect_serial"
# Windows and HP-UX require a longer timeout.
if { $is_windows_test == 1 || $is_hp_test == 1 } {
- set elect_timeout [expr $elect_timeout * 3]
+ set elect_timeout [expr $elect_timeout * 2]
}
set elect_pipe($elector) [start_election \
$pfx $qdir $env_cmd($elector) $nsites $nvotes $pri($elector) \
@@ -1000,7 +1209,8 @@ proc run_election { ecmd celist errcmd priority crsh qdir msg elector \
# to be written.
set write [berkdb random_int 1 10]
if { $write == 1 } {
- set db [berkdb_open -env \
+ set db [eval \
+ berkdb_open -env \
$clientenv($i) \
-auto_commit $dbname]
error_check_good dbopen \
@@ -1070,8 +1280,8 @@ proc got_newmaster { cenv i newmaster win {dbname "test.db"} } {
# Occasionally force new log records to be written.
set write [berkdb random_int 1 10]
if { $write == 1 } {
- set db [berkdb_open -env $clientenv($i) -auto_commit \
- -create -btree $dbname]
+ set db [eval 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
}
@@ -1103,8 +1313,10 @@ proc check_election { id newmasterp } {
proc close_election { i } {
global elections_in_progress
+ global qtestdir
+
set t $elections_in_progress($i)
- puts $t "replclose \$testdir/MSGQUEUEDIR"
+ puts $t "replclose \$qtestdir/MSGQUEUEDIR"
puts $t "\$dbenv close"
close $t
unset elections_in_progress($i)
@@ -1127,13 +1339,148 @@ proc cleanup_elections { } {
# loop AND it takes an already-opened db handle.
#
proc rep_test { method env repdb {nentries 10000} \
- {start 0} {skip 0} {needpad 0} args } {
+ {start 0} {skip 0} {needpad 0} {inmem 0} args } {
+
source ./include.tcl
#
# Open the db if one isn't given. Close before exit.
#
if { $repdb == "NULL" } {
+ if { $inmem == 1 } {
+ set testfile { "" "test.db" }
+ } else {
+ set testfile "test.db"
+ }
+ set largs [convert_args $method $args]
+ set omethod [convert_method $method]
+ set db [eval {berkdb_open_noerr} -env $env -auto_commit\
+ -create -mode 0644 $omethod $largs $testfile]
+ error_check_good reptest_db [is_valid_db $db] TRUE
+ } else {
+ set db $repdb
+ }
+
+ 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 which dictionary entry to start with. In normal
+ # use, skip is equal to start.
+
+ if { $skip != 0 } {
+ for { set count 0 } { $count < $skip } { 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
+
+ # Checkpoint 10 times during the run, but not more
+ # frequently than every 5 entries.
+ set checkfreq [expr $nentries / 10]
+
+ # Abort occasionally during the run.
+ set abortfreq [expr $nentries / 15]
+
+ 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]
+ }
+ #
+ # We want to make sure we send in exactly the same
+ # length data so that LSNs match up for some tests
+ # in replication (rep021).
+ #
+ if { [is_fixed_length $method] == 1 && $needpad } {
+ #
+ # Make it something visible and obvious, 'A'.
+ #
+ set p 65
+ set str [make_fixed_length $method $str $p]
+ set kvals($key) $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 { $checkfreq < 5 } {
+ set checkfreq 5
+ }
+ if { $abortfreq < 3 } {
+ set abortfreq 3
+ }
+ #
+ # Do a few aborted transactions to test that
+ # aborts don't get processed on clients and the
+ # master handles them properly. Just abort
+ # trying to delete the key we just added.
+ #
+ if { $count % $abortfreq == 0 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set ret [$db del -txn $t $key]
+ error_check_good txn [$t abort] 0
+ }
+ if { $count % $checkfreq == 0 } {
+ error_check_good txn_checkpoint($count) \
+ [$env txn_checkpoint] 0
+ }
+ incr count
+ }
+ close $did
+ if { $repdb == "NULL" } {
+ error_check_good rep_close [$db close] 0
+ }
+}
+
+#
+# This is essentially a copy of rep_test, but it only does the put/get
+# loop in a long running txn to an open db. We use it for bulk testing
+# because we want to fill the bulk buffer some before sending it out.
+# Bulk buffer gets transmitted on every commit.
+#
+proc rep_test_bulk { method env repdb {nentries 10000} \
+ {start 0} {skip 0} {useoverflow 0} args } {
+ source ./include.tcl
+
+ global overflowword1
+ global overflowword2
+
+ if { [is_fixed_length $method] && $useoverflow == 1 } {
+ puts "Skipping overflow for fixed length method $method"
+ return
+ }
+ #
+ # Open the db if one isn't given. Close before exit.
+ #
+ if { $repdb == "NULL" } {
set testfile "test.db"
set largs [convert_args $method $args]
set omethod [convert_method $method]
@@ -1149,7 +1496,113 @@ proc rep_test { method env repdb {nentries 10000} \
# 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"
+ puts \
+"\t\tRep_test_bulk: $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 which dictionary entry to start with. In normal
+ # use, skip is equal to start.
+
+ if { $skip != 0 } {
+ for { set count 0 } { $count < $skip } { incr count } {
+ gets $did str
+ }
+ }
+ set pflags ""
+ set gflags ""
+ set txn ""
+
+ if { [is_record_based $method] == 1 } {
+ append gflags " -recno"
+ }
+ puts "\t\tRep_test_bulk.a: put/get loop in 1 txn"
+ # Here is the loop where we put and get each key/data pair
+ set count 0
+
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ set pid [pid]
+ 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]
+ if { [is_fixed_length $method] == 0 } {
+ set str [repeat $str 100]
+ }
+ } else {
+ set key $str.$pid
+ set str [repeat $str 100]
+ }
+ #
+ # For use for overflow test.
+ #
+ if { $useoverflow == 0 } {
+ if { [string length $overflowword1] < \
+ [string length $str] } {
+ set overflowword2 $overflowword1
+ set overflowword1 $str
+ }
+ } else {
+ if { $count == 0 } {
+ set len [string length $overflowword1]
+ set word $overflowword1
+ } else {
+ set len [string length $overflowword2]
+ set word $overflowword1
+ }
+ set rpt [expr 1024 * 1024 / $len]
+ incr rpt
+ set str [repeat $word $rpt]
+ }
+ set ret [eval \
+ {$db put} $txn $pflags {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ incr count
+ }
+ error_check_good txn [$t commit] 0
+ close $did
+ if { $repdb == "NULL" } {
+ error_check_good rep_close [$db close] 0
+ }
+}
+
+proc rep_test_upg { method env repdb {nentries 10000} \
+ {start 0} {skip 0} {needpad 0} {inmem 0} args } {
+
+ source ./include.tcl
+
+ #
+ # Open the db if one isn't given. Close before exit.
+ #
+ if { $repdb == "NULL" } {
+ if { $inmem == 1 } {
+ set testfile { "" "test.db" }
+ } else {
+ set testfile "test.db"
+ }
+ set largs [convert_args $method $args]
+ set omethod [convert_method $method]
+ set db [eval {berkdb_open_noerr} -env $env -auto_commit\
+ -create -mode 0644 $omethod $largs $testfile]
+ error_check_good reptest_db [is_valid_db $db] TRUE
+ } else {
+ set db $repdb
+ }
+
+ set pid [pid]
+ puts "\t\tRep_test_upg($pid): $method $nentries key/data pairs starting at $start"
set did [open $dict]
# The "start" variable determines the record number to start
@@ -1172,6 +1625,14 @@ proc rep_test { method env repdb {nentries 10000} \
puts "\t\tRep_test.a: put/get loop"
# Here is the loop where we put and get each key/data pair
set count 0
+
+ # Checkpoint 10 times during the run, but not more
+ # frequently than every 5 entries.
+ set checkfreq [expr $nentries / 10]
+
+ # Abort occasionally during the run.
+ set abortfreq [expr $nentries / 15]
+
while { [gets $did str] != -1 && $count < $nentries } {
if { [is_record_based $method] == 1 } {
global kvals
@@ -1186,7 +1647,17 @@ proc rep_test { method env repdb {nentries 10000} \
}
set kvals($key) [pad_data $method $str]
} else {
- set key $str
+ #
+ # With upgrade test, we run the same test several
+ # times with the same database. We want to have
+ # some overwritten records and some new records.
+ # Therefore append our pid to half the keys.
+ #
+ if { $count % 2 } {
+ set key $str.$pid
+ } else {
+ set key $str
+ }
set str [reverse $str]
}
#
@@ -1205,17 +1676,30 @@ proc rep_test { method env repdb {nentries 10000} \
set t [$env txn]
error_check_good txn [is_valid_txn $t $env] TRUE
set txn "-txn $t"
+puts "rep_test_upg: put $count of $nentries: key $key, data $str"
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
- # Checkpoint 10 times during the run, but not more
- # frequently than every 5 entries.
- set checkfreq [expr $nentries / 10]
if { $checkfreq < 5 } {
set checkfreq 5
}
+ if { $abortfreq < 3 } {
+ set abortfreq 3
+ }
+ #
+ # Do a few aborted transactions to test that
+ # aborts don't get processed on clients and the
+ # master handles them properly. Just abort
+ # trying to delete the key we just added.
+ #
+ if { $count % $abortfreq == 0 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set ret [$db del -txn $t $key]
+ error_check_good txn [$t abort] 0
+ }
if { $count % $checkfreq == 0 } {
error_check_good txn_checkpoint($count) \
[$env txn_checkpoint] 0
@@ -1228,7 +1712,30 @@ proc rep_test { method env repdb {nentries 10000} \
}
}
-proc process_msgs { elist {perm_response 0} {dupp NONE} {errp NONE} } {
+proc rep_test_upg.check { key data } {
+ #
+ # If the key has the pid attached, strip it off before checking.
+ # If the key does not have the pid attached, then it is a recno
+ # and we're done.
+ #
+ set i [string first . $key]
+ if { $i != -1 } {
+ set key [string replace $key $i end]
+ }
+ error_check_good "key/data mismatch" $data [reverse $key]
+}
+
+proc rep_test_upg.recno.check { key data } {
+ #
+ # If we're a recno database we better not have a pid in the key.
+ # Otherwise we're done.
+ #
+ set i [string first . $key]
+ error_check_good pid $i -1
+}
+
+proc process_msgs { elist {perm_response 0} {dupp NONE} {errp NONE} \
+ {upg 0} } {
if { $perm_response == 1 } {
global perm_response_list
set perm_response_list {{}}
@@ -1248,28 +1755,157 @@ proc process_msgs { elist {perm_response 0} {dupp NONE} {errp NONE} } {
set errorp NONE
}
+ set upgcount 0
while { 1 } {
set nproced 0
- foreach pair $elist {
- set envname [lindex $pair 0]
- set envid [lindex $pair 1]
- #
- # If we need to send in all the other args
- incr nproced [replprocessqueue $envname $envid \
- 0 NONE NONE dupmaster errorp]
- #
- # If the user is expecting to handle an error and we get
- # one, return the error immediately.
- #
- if { $dupmaster != 0 && $dupmaster != "NONE" } {
- return
- }
- if { $errorp != 0 && $errorp != "NONE" } {
- return
- }
+ incr nproced [proc_msgs_once $elist dupmaster errorp]
+ #
+ # If we're running the upgrade test, we are running only
+ # our own env, we need to loop a bit to allow the other
+ # upgrade procs to run and reply to our messages.
+ #
+ if { $upg == 1 && $upgcount < 10 } {
+ tclsleep 2
+ incr upgcount
+ continue
}
if { $nproced == 0 } {
break
+ } else {
+ set upgcount 0
}
}
}
+
+
+proc proc_msgs_once { elist {dupp NONE} {errp NONE} } {
+ if { [string compare $dupp NONE] != 0 } {
+ upvar $dupp dupmaster
+ set dupmaster 0
+ } else {
+ set dupmaster NONE
+ }
+
+ if { [string compare $errp NONE] != 0 } {
+ upvar $errp errorp
+ set errorp 0
+ } else {
+ set errorp NONE
+ }
+
+ set nproced 0
+ foreach pair $elist {
+ set envname [lindex $pair 0]
+ set envid [lindex $pair 1]
+ #
+ # If we need to send in all the other args
+ incr nproced [replprocessqueue $envname $envid \
+ 0 NONE NONE dupmaster errorp]
+ #
+ # If the user is expecting to handle an error and we get
+ # one, return the error immediately.
+ #
+ if { $dupmaster != 0 && $dupmaster != "NONE" } {
+ return 0
+ }
+ if { $errorp != 0 && $errorp != "NONE" } {
+ return 0
+ }
+ }
+ return $nproced
+}
+
+proc rep_verify { masterdir masterenv clientdir clientenv {init_test 0} \
+ {match 1} {logcompare 1} {dbname "test.db"} } {
+ global util_path
+ global encrypt
+ global passwd
+
+ # The logcompare flag indicates whether to compare logs.
+ # Sometimes we run a test where rep_verify is run twice with
+ # no intervening processing of messages. If that test is
+ # on a build with debug_rop enabled, the master's log is
+ # altered by the first rep_verify, and the second rep_verify
+ # will fail.
+ # To avoid this, skip the log comparison on the second rep_verify
+ # by specifying logcompare == 0.
+ #
+ if { $logcompare } {
+ set msg "Logs and databases"
+ } else {
+ set msg "Databases ($dbname)"
+ }
+
+ if { $match } {
+ puts "\t\tRep_verify: $clientdir: $msg match"
+ } else {
+ puts "\t\tRep_verify: $clientdir: $msg do not match"
+ }
+ # Check that master and client logs and dbs are identical.
+
+ # Logs first, if specified ...
+ #
+ # If init_test is set, we need to run db_printlog on the log
+ # subset that the client has. The master may have more (earlier)
+ # log files.
+ #
+ if { $logcompare } {
+ set margs ""
+ if { $init_test } {
+ set logc [$clientenv log_cursor]
+ error_check_good logc [is_valid_logc $logc $clientenv] TRUE
+ set first [$logc get -first]
+ error_check_good close [$logc close] 0
+ set lsn [lindex $first 0]
+ set file [lindex $lsn 0]
+ set off [lindex $lsn 1]
+ set margs "-b $file/$off"
+ }
+ set encargs ""
+ if { $encrypt == 1 } {
+ set encargs " -P $passwd "
+ }
+
+ set stat [catch {eval exec $util_path/db_printlog $margs \
+ $encargs -h $masterdir > $masterdir/prlog} result]
+ error_check_good stat_mprlog $stat 0
+ set stat [catch {eval exec $util_path/db_printlog \
+ $encargs -h $clientdir > $clientdir/prlog} result]
+ error_check_good stat_cprlog $stat 0
+ if { $match } {
+ error_check_good log_cmp \
+ [filecmp $masterdir/prlog $clientdir/prlog] 0
+ } else {
+ error_check_bad log_cmp \
+ [filecmp $masterdir/prlog $clientdir/prlog] 0
+ }
+
+ if { $dbname == "NULL" } {
+ return
+ }
+ }
+
+ # ... now the databases.
+ set db1 [eval {berkdb_open_noerr} -env $masterenv -rdonly $dbname]
+ set db2 [eval {berkdb_open_noerr} -env $clientenv -rdonly $dbname]
+
+ if { $match } {
+ error_check_good comparedbs [db_compare \
+ $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
+ } else {
+ error_check_bad comparedbs [db_compare \
+ $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
+ }
+ error_check_good db1_close [$db1 close] 0
+ error_check_good db2_close [$db2 close] 0
+}
+
+proc rep_startup_event { event } {
+ global startup_done
+
+ # puts "rep_startup_event: Got event $event"
+ if { $event == "startupdone" } {
+ set startup_done 1
+ }
+ return
+}
diff --git a/db/test/rpc001.tcl b/db/test/rpc001.tcl
index e07d5dcb1..d24c4f9be 100644
--- a/db/test/rpc001.tcl
+++ b/db/test/rpc001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc001.tcl,v 11.41 2004/06/01 19:55:25 carol Exp $
+# $Id: rpc001.tcl,v 12.4 2006/08/24 14:46:38 bostic Exp $
#
# TEST rpc001
# TEST Test RPC server timeouts for cursor, txn and env handles.
@@ -310,21 +310,21 @@ proc rpc_timeoutjoin {env msg sleeptime use_txn} {
foreach kd $fruit {
set k [lindex $kd 0]
set d [lindex $kd 1]
- set ret [eval {$fdb put} $txnflag {$k $d}]
+ set ret [eval {$fdb put} {$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 [eval {$pdb put} $txnflag {$k $d}]
+ set ret [eval {$pdb put} {$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 [eval {$ddb put} $txnflag {$k $d}]
+ set ret [eval {$ddb put} {$k $d}]
error_check_good dessert_put $ret 0
}
error_check_good sync [$ddb sync] 0
diff --git a/db/test/rpc002.tcl b/db/test/rpc002.tcl
index 505c23e7b..78e4068a7 100644
--- a/db/test/rpc002.tcl
+++ b/db/test/rpc002.tcl
@@ -1,9 +1,9 @@
# Sel the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc002.tcl,v 1.25 2004/07/15 17:19:12 sue Exp $
+# $Id: rpc002.tcl,v 12.5 2006/08/24 14:46:38 bostic Exp $
#
# TEST rpc002
# TEST Test invalid RPC functions and make sure we error them correctly
@@ -44,7 +44,9 @@ proc rpc002 { } {
{ "-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"}
+ { "-lock_max_locks 100" "Rpc002.b6"}
+ { "-lock_max_objects 100" "Rpc002.b6"}
+ { "-lock_max_lockers 100" "Rpc002.b6"}
{ "-mpool_mmap_size 100" "Rpc002.b7"}
{ "-shm_key 100" "Rpc002.b9"}
{ "-tmp_dir $rpc_testdir" "Rpc002.b10"}
@@ -64,7 +66,7 @@ proc rpc002 { } {
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
+ "Interface not supported by Berkeley DB RPC"] 1
}
#
@@ -111,7 +113,7 @@ proc rpc002 { } {
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
+ "Interface not supported by Berkeley DB RPC"] 1
}
error_check_good dbclose [$db close] 0
@@ -129,8 +131,8 @@ proc rpc002 { } {
-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 dbopen_cache_err [is_substr $errorInfo \
+ "Interface not supported by Berkeley DB RPC"] 1
puts "\tRpc002.d1: Try to upgrade a database"
#
@@ -138,7 +140,7 @@ proc rpc002 { } {
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
+ "Interface not supported by Berkeley DB RPC"] 1
error_check_good envclose [$env close] 0
puts "\tRpc002.e: Open env with unsupported home dir"
diff --git a/db/test/rpc003.tcl b/db/test/rpc003.tcl
index 890cbc30f..fe3433007 100644
--- a/db/test/rpc003.tcl
+++ b/db/test/rpc003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc003.tcl,v 11.16 2004/03/02 18:44:41 mjc Exp $
+# $Id: rpc003.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST rpc003
# TEST Test RPC and secondary indices.
diff --git a/db/test/rpc004.tcl b/db/test/rpc004.tcl
index 468e27270..a4c760375 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc004.tcl,v 11.12 2004/01/28 03:36:29 bostic Exp $
+# $Id: rpc004.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST rpc004
# TEST Test RPC server and security
diff --git a/db/test/rpc005.tcl b/db/test/rpc005.tcl
index 3111f651b..a7b40e709 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc005.tcl,v 11.11 2004/09/22 18:01:06 bostic Exp $
+# $Id: rpc005.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST rpc005
# TEST Test RPC server handle ID sharing
diff --git a/db/test/rpc006.tcl b/db/test/rpc006.tcl
index 6cbc6fea1..cd7e06a55 100644
--- a/db/test/rpc006.tcl
+++ b/db/test/rpc006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
# Copyright (c) 1996-2006
-# Sleepycat Software. All rights reserved.
+# Oracle Corporation. All rights reserved.
#
-# $Id: rpc006.tcl,v 11.1 2004/05/06 14:25:15 sue Exp $
+# $Id: rpc006.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST rpc006
# TEST Test RPC server and multiple operations to server.
diff --git a/db/test/rsrc001.tcl b/db/test/rsrc001.tcl
index b44d5ebd6..f93db65c0 100644
--- a/db/test/rsrc001.tcl
+++ b/db/test/rsrc001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rsrc001.tcl,v 11.25 2004/01/28 03:36:29 bostic Exp $
+# $Id: rsrc001.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST rsrc001
# TEST Recno backing file test. Try different patterns of adding
diff --git a/db/test/rsrc002.tcl b/db/test/rsrc002.tcl
index 808159a01..94660eeff 100644
--- a/db/test/rsrc002.tcl
+++ b/db/test/rsrc002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rsrc002.tcl,v 11.16 2004/01/28 03:36:29 bostic Exp $
+# $Id: rsrc002.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST rsrc002
# TEST Recno backing file test #2: test of set_re_delim. Specify a backing
diff --git a/db/test/rsrc003.tcl b/db/test/rsrc003.tcl
index b62a6bcb1..9b1a751c0 100644
--- a/db/test/rsrc003.tcl
+++ b/db/test/rsrc003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rsrc003.tcl,v 11.7 2004/01/28 03:36:29 bostic Exp $
+# $Id: rsrc003.tcl,v 12.4 2006/09/12 13:11:37 bostic Exp $
#
# TEST rsrc003
# TEST Recno backing file test. Try different patterns of adding
@@ -37,12 +37,15 @@ proc rsrc003 { } {
set recs [lindex $rec 0]
set msg [lindex $rec 1]
+
# Create the starting files
# Note that for the rest of the test, we are going
# to append a LF when we 'put' via DB to maintain
# file structure and allow us to use 'gets'.
set oid1 [open $testdir/rsrc.txt w]
set oid2 [open $testdir/check.txt w]
+ fconfigure $oid1 -translation binary
+ fconfigure $oid2 -translation binary
foreach record $recs {
set r [subst $record]
set fixed_len [string length $r]
diff --git a/db/test/rsrc004.tcl b/db/test/rsrc004.tcl
index 20f11372a..40adb17a7 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: rsrc004.tcl,v 11.5 2004/01/28 03:36:29 bostic Exp $
+# $Id: rsrc004.tcl,v 12.3 2006/08/24 14:46:38 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 159524d27..2bafc3974 100644
--- a/db/test/scr001/chk.code
+++ b/db/test/scr001/chk.code
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.code,v 1.14 2004/11/08 14:45:07 bostic Exp $
+# $Id: chk.code,v 12.1 2005/10/15 15:25:05 bostic Exp $
#
# Check to make sure that the code samples in the documents build.
@@ -16,7 +16,7 @@ d=../../../db_docs
}
exitv=0
-for i in `find $d -name '*.cs'`; do
+for i in `find $d -name '*.cs' | sed '/\/ref_xml\//d'`; do
echo " compiling $i"
sed -e 's/m4_include(\(.*\))/#include <\1>/g' \
-e 's/m4_[a-z]*[(\[)]*//g' \
diff --git a/db/test/scr002/chk.def b/db/test/scr002/chk.def
index 7d5e6670f..bbc7bdd09 100644
--- a/db/test/scr002/chk.def
+++ b/db/test/scr002/chk.def
@@ -1,9 +1,9 @@
#!/bin/sh -
#
-# $Id: chk.def,v 1.9 2002/03/27 04:32:57 bostic Exp $
+# $Id: chk.def,v 12.3 2006/07/12 20:51:32 bostic Exp $
#
# Check to make sure we haven't forgotten to add any interfaces
-# to the Win32 libdb.def file.
+# to the Windows libdb.def file.
d=../..
@@ -13,7 +13,7 @@ d=../..
exit 1
}
-f=$d/build_win32/libdb.def
+f=$d/build_windows/libdb.def
t1=__1
t2=__2
@@ -23,13 +23,15 @@ sed '/; /d' $f |
egrep @ |
awk '{print $1}' |
sed -e '/db_xa_switch/d' \
- -e '/^__/d' -e '/^;/d' |
+ -e '/^__/d' \
+ -e '/^;/d' |
sort > $t1
egrep __P $d/dbinc_auto/ext_prot.in |
sed '/^[a-z]/!d' |
awk '{print $2}' |
- sed 's/^\*//' |
+ sed -e 's/^\*//' \
+ -e '/db_env_set_func_/d' |
sed '/^__/d' | sort > $t2
if cmp -s $t1 $t2 ; then
diff --git a/db/test/scr003/chk.define b/db/test/scr003/chk.define
index 96c45c2b7..1ccd74e55 100644
--- a/db/test/scr003/chk.define
+++ b/db/test/scr003/chk.define
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.define,v 1.25 2004/10/07 18:54:37 bostic Exp $
+# $Id: chk.define,v 12.3 2006/07/12 21:12:17 bostic Exp $
#
# Check to make sure that all #defines are actually used.
# Check to make sure that all #defines start in column 1.
@@ -29,19 +29,28 @@ test -s $t1 && {
egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
sed -e '/db_185.in/d' -e '/queue.h/d' -e '/xa.h/d' |
awk '{print $2}' |
- sed -e '/^B_DELETE/d' \
+ sed -e '/^AI_CANONNAME/d' \
+ -e '/^AI_NUMERICHOST/d' \
+ -e '/^B_DELETE/d' \
-e '/^B_MAX/d' \
+ -e '/^CHECK_THREAD/d' \
-e '/^DB_BTREEOLDVER/d' \
+ -e '/^DB_DEGREE_2/d' \
-e '/^DB_HASHOLDVER/d' \
-e '/^DB_LOCKVERSION/d' \
+ -e '/^DB_LOG_PERM_42_44/d' \
+ -e '/^DB_LOG_RESEND_42_44/d' \
-e '/^DB_MAX_PAGES/d' \
+ -e '/^DB_PAGE_QUEUE_LEN/d' \
-e '/^DB_QAMOLDVER/d' \
-e '/^DB_TXNVERSION/d' \
-e '/^DB_UNUSED/d' \
-e '/^DEFINE_DB_CLASS/d' \
+ -e '/^FHASH/d' \
-e '/^HASH_UNUSED/d' \
-e '/^HPUX_MUTEX_PAD/d' \
-e '/^LOG_OP/d' \
+ -e '/^MAX_ID/d' \
-e '/^MINFILL/d' \
-e '/^MUTEX_FIELDS/d' \
-e '/^NAME_TO_SEQUENCE/d' \
@@ -51,6 +60,8 @@ egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
-e '/^P_16_COPY/d' \
-e '/^P_32_COPY/d' \
-e '/^P_32_SWAP/d' \
+ -e '/^P_64_COPY/d' \
+ -e '/^P_64_SWAP/d' \
-e '/^P_TO_UINT16/d' \
-e '/^QPAGE_CHKSUM/d' \
-e '/^QPAGE_NORMAL/d' \
@@ -59,9 +70,11 @@ egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
-e '/^TAILQ_/d' \
-e '/^UINT64_FMT/d' \
-e '/^UINT64_MAX/d' \
+ -e '/^VM_PAGESIZE/d' \
-e '/^WRAPPED_CLASS/d' \
-e '/^__BIT_TYPES_DEFINED__/d' \
-e '/^__DBC_INTERNAL/d' \
+ -e '/^__lock_locker_hash/d' \
-e '/^i_/d' \
-e '/_H_/d' \
-e 's/(.*//' | sort > $t1
diff --git a/db/test/scr004/chk.javafiles b/db/test/scr004/chk.javafiles
index 98fb1aff2..fa2ea51f7 100644
--- a/db/test/scr004/chk.javafiles
+++ b/db/test/scr004/chk.javafiles
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.javafiles,v 1.7 2003/08/01 18:14:45 gburd Exp $
+# $Id: chk.javafiles,v 12.1 2006/09/09 03:05:38 bostic Exp $
#
# Check to make sure we haven't forgotten to add any Java files to the list
# of source files in the Makefile.
@@ -17,7 +17,7 @@ f=$d/dist/Makefile.in
t1=__1
t2=__2
-find $d/java $d/examples_java $d/rpc_server/java -name \*.java -print |
+find $d/java $d/examples_java -name \*.java -print |
sed -e 's/^.*\///' | sort -u > $t1
tr ' \t' '\n' < $f | sed -e '/\.java$/!d' -e 's/^.*\///' | sort -u > $t2
diff --git a/db/test/scr005/chk.nl b/db/test/scr005/chk.nl
index c6ccaab69..8f2e2fe6b 100644
--- a/db/test/scr005/chk.nl
+++ b/db/test/scr005/chk.nl
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.nl,v 1.7 2003/09/30 19:16:42 bostic Exp $
+# $Id: chk.nl,v 12.0 2004/11/17 03:44:43 bostic Exp $
#
# Check to make sure that there are no trailing newlines in __db_err calls.
diff --git a/db/test/scr006/chk.offt b/db/test/scr006/chk.offt
index 69bf7cc92..e6bb7b686 100644
--- a/db/test/scr006/chk.offt
+++ b/db/test/scr006/chk.offt
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.offt,v 1.13 2004/10/07 18:57:53 bostic Exp $
+# $Id: chk.offt,v 12.2 2006/07/12 21:13:48 bostic Exp $
#
# Make sure that no off_t's have snuck into the release.
@@ -19,6 +19,7 @@ sed -e "/#undef off_t/d" \
-e "/db_env_set_func_pread/d" \
-e "/db_env_set_func_pwrite/d" \
-e "/db_env_set_func_seek/d" \
+ -e "/env_register.c/d" \
-e "/j_ftruncate/d" \
-e "/j_pread/d" \
-e "/j_pwrite/d" \
@@ -27,12 +28,13 @@ sed -e "/#undef off_t/d" \
-e "/mp_fopen.c:.*size or type off_t's or/d" \
-e "/mp_fopen.c:.*where an off_t is 32-bits/d" \
-e "/mutex\/tm.c:/d" \
+ -e "/off_t because its size depends on/d" \
+ -e "/os_ext.h/d" \
+ -e "/os_flock.c/d" \
+ -e "/os_fzero.c:.*stat_offset/d" \
+ -e "/os_fzero.c:.*write_offset/d" \
-e "/os_map.c:.*(off_t)0))/d" \
- -e "/os_method.c.*func_ftruncate/d" \
- -e "/os_method.c.*func_pread/d" \
- -e "/os_method.c.*func_pwrite/d" \
- -e "/os_method.c.*func_seek/d" \
- -e "/os_method.c.*__P.*off_t/d" \
+ -e "/os_method.c/d" \
-e "/os_rw.c:/d" \
-e "/os_seek.c:.*off_t offset;/d" \
-e "/os_seek.c:.*offset = /d" \
@@ -41,7 +43,9 @@ sed -e "/#undef off_t/d" \
-e "/os_truncate.c:.*offset = /d" \
-e "/test_perf\/perf_misc.c:/d" \
-e "/test_server\/dbs.c:/d" \
- -e "/test_vxworks\/vx_mutex.c:/d" > $t
+ -e "/test_vxworks\/vx_mutex.c:/d" \
+ -e "/win_db.h:/d" \
+ -e "/win_db.in/d" > $t
test -s $t && {
cat $t
diff --git a/db/test/scr007/chk.proto b/db/test/scr007/chk.proto
index 05e980ce6..e7878aec1 100644
--- a/db/test/scr007/chk.proto
+++ b/db/test/scr007/chk.proto
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.proto,v 1.10 2003/12/08 19:28:26 bostic Exp $
+# $Id: chk.proto,v 12.0 2004/11/17 03:44:44 bostic Exp $
#
# Check to make sure that prototypes are actually needed.
diff --git a/db/test/scr009/chk.srcfiles b/db/test/scr009/chk.srcfiles
index 18fc63692..75a31efc7 100644
--- a/db/test/scr009/chk.srcfiles
+++ b/db/test/scr009/chk.srcfiles
@@ -1,9 +1,9 @@
#!/bin/sh -
#
-# $Id: chk.srcfiles,v 1.13 2004/10/07 19:16:43 bostic Exp $
+# $Id: chk.srcfiles,v 12.4 2006/01/02 14:59:32 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.
+# of source files Windows uses to build its dsp files.
d=../..
@@ -20,6 +20,7 @@ sed -e '/^[ #]/d' \
-e '/^db_server_clnt.c/d' \
-e '/^db_server_svc.c/d' \
-e '/^db_server_xdr.c/d' \
+ -e '/^examples_c\/csv\/csv_local.c/d' \
-e '/^gen_db_server.c/d' \
-e '/^$/d' < $f |
awk '{print $1}' > $t1
diff --git a/db/test/scr010/chk.str b/db/test/scr010/chk.str
index 873fdb012..e1a17709f 100644
--- a/db/test/scr010/chk.str
+++ b/db/test/scr010/chk.str
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.str,v 1.9 2004/09/22 18:01:06 bostic Exp $
+# $Id: chk.str,v 12.0 2004/11/17 03:44:44 bostic Exp $
#
# Check spelling in quoted strings.
diff --git a/db/test/scr010/spell.ok b/db/test/scr010/spell.ok
index 6a557279b..cb182eb65 100644
--- a/db/test/scr010/spell.ok
+++ b/db/test/scr010/spell.ok
@@ -1,6 +1,11 @@
AAAA
ABS
+ABSMODE
+ACK
+ACKS
ADDR
+ADDRINFO
+AEE
AES
AIX's
AJVX
@@ -9,20 +14,27 @@ ALLBACK
ALLDB
ALLOC
ALLZEROES
+AMs
API
APIs
APP
APPMALLOC
APPNAME
APPREC
+ARG
+ARGS
+ASSOC
ASYNC
ATOI
+ATOL
AUTOCOMMIT
+AUTOINIT
AUTOREMOVE
AccessExample
AccesssExample
Acflmo
Acknowledgements
+Acks
Aclmop
Aclop
Adata
@@ -56,6 +68,7 @@ BNF
BOTHC
BOVERFLOW
BR
+BREW's
BSIZE
BTCOMPARE
BTMETA
@@ -65,6 +78,7 @@ BTREEMETA
BTREEOLDVER
BTREEVERSION
BUF
+BULKOVF
Backoff
Barreto
Bc
@@ -79,25 +93,32 @@ BtreeStat
BtreeStats
Btrees
BulkAccessExample
+BulkAccessNIOExample
ByteArray
ByteArrayBinding
ByteArrayFormat
ByteArrayInputStream
ByteArrayOutputStream
+ByteBuffer
C'est
CALLBACK
CALLPGIN
+CANONNAME
CBC
CC
CCCC
CCYYMMDDhhmm
CD
+CDATA
CDB
CDS
+CDSGROUP
+CDSGroup
CDdFILTVvX
CFB
CFILpRsv
CFLprsvVxX
+CFf
CFh
CHARKEY
CHGPG
@@ -112,12 +133,15 @@ CKP
CKPLSN
CL
CLASSPATH
+CLEARLEN
CLOSEFP
CLR
CLRDBC
CLpsvxX
+CMD
CMP
CNT
+COMPAT
COMPQUIET
CONCAT
CONCATDATAKEY
@@ -127,7 +151,9 @@ CONFIG
CONST
CRTL
CRYPTO
+CSV
CT
+CTIME
CTX
CXX
CacheFilePriority
@@ -145,9 +171,13 @@ ClientData
CloseHandle
Cmd
Cmp
+Co
CollectionTest
+CompactStat
+CompactStats
Config
CopyObjBytes
+CreateEvent
CreateFile
CreateFileMapping
CreateHashEntry
@@ -160,11 +190,13 @@ DBCursor
DBENV
DBHOME
DBINFO
+DBINIT
DBLOCAL
DBLOG
DBM
DBMETA
DBMETASIZE
+DBMSG
DBNAME
DBP
DBP's
@@ -188,8 +220,10 @@ DEADFILE
DECLS
DEF
DEFMINKEYPAGE
+DELAYCLIENT
DELNO
DGREE
+DIAG
DIR
DIRECTIO
DIRENT
@@ -197,11 +231,15 @@ DIST
DJ
DLFCN
DLL
+DLLs
DOALL
DONOTINDEX
+DONTEXTEND
+DONTLOCK
DS
DST
DSYNC
+DTL
DUP
DUPFIRST
DUPID
@@ -239,6 +277,8 @@ DbBtreeCompare
DbBtreePrefix
DbBtreeStat
DbClient
+DbCompact
+DbCompactStat
DbCount
DbDeadlockException
DbDelete
@@ -252,6 +292,7 @@ DbErrorHandler
DbException
DbFeedback
DbFeedbackHandler
+DbField
DbGet
DbGetFlags
DbGetOpenFlags
@@ -283,6 +324,7 @@ DbPanicHandler
DbPreplist
DbPut
DbQueueStat
+DbRecord
DbRecoveryInit
DbRemove
DbRename
@@ -316,53 +358,164 @@ Dbt
Dbt's
Dbts
Dde
+DeadLockException
Deadfile
DeadlockException
Debian
+DeleteFile
DeleteInfo
Deref'ing
Dir
+DirectBuffer
Dups
+EACCES
+EADDRINUSE
+EADDRNOTAVAIL
+EAFNOSUPPORT
EAGAIN
+EALREADY
+EAUTH
+EBADF
+EBADFILENAME
+EBADMSG
+EBADRPC
+EBADSEEKPOS
EBUSY
+ECANCELED
ECB
+ECHILD
+ECONNABORTED
+ECONNREFUSED
+ECONNRESET
+EDEADLK
+EDESTADDRREQ
+EDIRIOCTL
+EDIRNOEXISTS
+EDIRNOTEMPTY
+EDOM
+EDOOFUS
+EDQUOT
EEXIST
EEXISTS
EFAULT
+EFBIG
+EFILEEOF
+EFILEEXISTS
+EFILENOEXISTS
+EFILEOPEN
+EFSFULL
+EFTYPE
EGENCHG
+EHOSTDOWN
+EHOSTUNREACH
EID
+EIDRM
+EIDS
+EILSEQ
+EINPROGRESS
EINTR
EINVAL
+EINVALIDOPERATION
EIO
EIRT
+EISCONN
+EISDIR
EIi
+EJUSTRETURN
+ELAST
ELECTINIT
ELECTVOTE
+ELOOP
+EMFILE
+EMLINK
EMSG
+EMSGSIZE
+EMULTIHOP
+ENAMETOOLONG
+ENEEDAUTH
+ENETDOWN
+ENETRESET
+ENETUNREACH
+ENOATTR
+ENOBUFS
+ENODEV
ENOENT
+ENOERROR
+ENOEXEC
+ENOIOCTL
+ENOLCK
+ENOLINK
+ENOMEDIA
ENOMEM
+ENOMEMORY
+ENOMSG
+ENOPROTOOPT
+ENOSPC
+ENOSYS
+ENOTBLK
+ENOTCONN
+ENOTDIR
+ENOTEMPTY
+ENOTSOCK
+ENOTSUP
+ENOTTY
ENT
ENV
ENV's
+ENVVAR
+ENXIO
EOFException
+EOPNOTSUPP
+EOUTOFNODES
+EOVERFLOW
+EPERM
+EPFNOSUPPORT
EPG
EPGNO
EPHASE
+EPIPE
EPRINT
EPRINTed
+EPROCLIM
+EPROCUNAVAIL
+EPROGMISMATCH
+EPROGUNAVAIL
+EPROTO
+EPROTONOSUPPORT
+EPROTOTYPE
+ERANGE
+EREMOTE
+ERESTART
+EROFS
+ERPCMISMATCH
+ESHUTDOWN
+ESOCKTNOSUPPORT
+ESPIPE
+ESRCH
+ESTALE
ETIME
ETIMEDOUT
+ETOOMANYREFS
+ETXTBSY
+EUSERS
+EVENTITEMS
+EWOULDBLOCK
EXCL
+EXDEV
EXT
Eefh
Egen
Elp
Endian
EntityBinding
+EnumInit
+EnumNetworkEvents
EnvAttr
EnvExample
EnvGetEncryptFlags
+EnvIdReset
EnvInfoDelete
+EnvLsnReset
EnvOpen
EnvRemove
EnvSetErrfile
@@ -377,6 +530,9 @@ ErrorFunc
ErrorSetup
Errpfx
EvalObjv
+EventFunc
+EventNotify
+EventType
ExampleDatabaseLoad
ExampleDatabaseRead
ExceptionUnwrapper
@@ -385,11 +541,16 @@ ExceptionWrapperTest
Exp
Externalizable
FALLTHROUGH
+FBSDID
+FCHMOD
+FCLOSE
FCNTL
FCONTROL
FD
FDATASYNC
FF
+FGETC
+FGETS
FH
FILEDONE
FILEID
@@ -400,43 +561,57 @@ FILEWRITTEN
FIXEDLEN
FIXLEN
FIXME
+FLDID
FMAP
+FML
FMT
FN
FNAME
+FOPEN
FOREACH
FP
+FREELIST
FST
FSTAT
FSTATI
FTRUNCATE
FTYPE
+FWRITE
FastInputStream
FastOutputStream
+FastOutputStreamTest
FatalRecover
+Fchg
Fd
Ff
Fh
FileIndexHigh
FileIndexLow
+FileNotFound
FileNotFoundException
Fileinfo
FindHashEntry
+FlushFileBuffers
+Fneeded
FooImp
Foreach
ForeignKeyIndex
ForeignKeyTest
+FormatMessageA
FreeBSD
FreeBSD's
FreeFunc
FreeList
Friedl
GCC
+GEOM
+GETADDRINFO
GETALL
GETCWD
GETDYNAMIC
GETNAME
GETOPT
+GETRECNO
GETRUSAGE
GETTIME
GETTIMEOFDAY
@@ -448,16 +623,20 @@ Gentles
Get's
GetByteArray
GetByteArrayFromObj
+GetConfig
GetDiskFreeSpace
+GetEnvironmentVariable
GetFileInformationByHandle
GetFlags
GetFlagsList
GetGlobPrefix
GetHashValue
GetIndexFromObj
+GetInfo
GetIntFromObj
GetJavaVM
GetJoin
+GetLastError
GetLockDetect
GetLongFromObj
GetLsn
@@ -469,6 +648,7 @@ GetVerbose
GetVersion
Gh
GlobalRefs
+GoDone
GotRange
HANDSOFF
HASHC
@@ -503,6 +683,7 @@ Harbison
HashStats
Hashtable
HelloDatabaseWorld
+Hmm
Holder's
Hsearch
IA
@@ -510,8 +691,12 @@ IAFTER
IBEFORE
IBTREE
ICURRENT
+ID's
IDLETIMEOUT
IDs
+IFF
+IFILE
+IFILEMGR
IIL
IL
ILOCK
@@ -533,7 +718,10 @@ INVALIDID
IOException
IOExceptionWrapper
IOSIZE
+IOVECS
IPC
+IPPROTO
+IPv
IR
IREAD
IRECNO
@@ -541,9 +729,14 @@ IRGRP
IRIX
IROTH
IRUSR
+ISALPHA
+ISBIG
+ISDIGIT
ISDUP
ISPERM
+ISPRINT
ISSET
+ISSPACE
IV's
IW
IWGRP
@@ -551,6 +744,9 @@ IWOTH
IWR
IWRITE
IWUSR
+IXGRP
+IXOTH
+IXUSR
Ick
Ids
Ik
@@ -570,6 +766,7 @@ IterDeadlockTest
JDB
JE
JHB
+JJ
JKL
JNI
JNIEnv
@@ -578,6 +775,7 @@ JOINCUR
JOINENV
JVM
JZ
+JanFebMarAprMayJunJulAugSepOctNovDec
JavaIO
JavaRPCServer
JoinTest
@@ -605,12 +803,15 @@ LDUP
LEAFCHAIN
LEAFLEVEL
LEAFSEEN
+LF
LFNAME
LFPREFIX
LG
LGPL
LIBNSL
LL
+LOC
+LOCALTIME
LOCKDOWN
LOCKOBJ
LOCKREGION
@@ -627,6 +828,7 @@ LOGREADY
LOGSONLY
LOGVERSION
LORDER
+LP
LRECNO
LRECNODUP
LRU
@@ -652,6 +854,7 @@ LocalIterator
LockDetect
LockDetectMode
LockExample
+LockFileEx
LockGet
LockMode
LockNotGrantedException
@@ -663,6 +866,7 @@ LockStats
LockTimeout
LockVec
Lockfhp
+Lockfile
LogArchive
LogCompare
LogFile
@@ -699,6 +903,7 @@ MAXSIZEONPAGE
MAXTIMEOUT
MAXWRITE
MC
+MDups
MEM
MEMCMP
MEMCPY
@@ -713,6 +918,7 @@ MINIT
MINLOCKS
MINPAGECACHE
MINWRITE
+MIPS
MKS
MLOCK
MMAP
@@ -727,18 +933,26 @@ MPOOLFILE's
MPOOLFILEs
MPREG
MPREGs
+MPROTECT
MSB
MSC
+MSDN
MSEM
MSG
MSGBUF
MSHUTDOWN
+MSLEEP
MSTR
MSVC
MT
+MULTIVERSION
MUNLOCK
MUNMAP
+MUTEXMGR
+MUTEXREGION
MUTEXes
+MVCC
+MVS
MYDIRECTORY
Makoto
Malloc
@@ -754,6 +968,7 @@ MarshalledTupleData
MarshalledTupleEntry
MarshalledTupleKeyEntity
Matsumoto
+MaxID
Maxid
Maxkey
Mb
@@ -767,6 +982,8 @@ MinGW
Minkey
Misc
MixColumn
+MkDir
+MonTueWedThuFriSatSun
MoveFile
MoveFileEx
Mp
@@ -780,7 +997,11 @@ MpoolExample
Mpoolfile
Msg
MsgType
+Multihop
+Multiversion
Mutex
+MutexStats
+Mutexes
Mv
MyDbs
NB
@@ -796,13 +1017,16 @@ NEWFILE
NEWMASTER
NEWSITE
NG
+NL
NOARCHIVE
NOAUTO
+NOAUTOINIT
NOBUFFER
NOCOPY
NODUP
NODUPDATA
NODUPS
+NOERROR
NOFILE
NOHEADER
NOKEY
@@ -815,6 +1039,7 @@ NOORDERCHK
NOOVERWRITE
NOPANIC
NOPROMOTE
+NORECNUM
NORUN
NOSERVER
NOSORT
@@ -823,6 +1048,7 @@ NOTA
NOTEXIST
NOTFOUND
NOTGRANTED
+NOTLOGGED
NOTPERM
NOTREACHED
NOTSET
@@ -840,9 +1066,11 @@ NULLing
NULLs
NULs
NUM
+NUMERICHOST
NUMWRITES
NameToInfo
NameToPtr
+Ndbc
Ndbm
NdbmOpen
NewInfo
@@ -854,6 +1082,7 @@ NqV
Nr
NrV
NsV
+NsVv
Nuff
NullClassCatalog
NullPointerException
@@ -864,6 +1093,8 @@ OBJ
ODDFILESIZE
OFFDUP
OFFPAGE
+OFM
+OLDVER
OLDVERSION
ONC
OOB
@@ -871,10 +1102,12 @@ OP
OPD
OPENFILES
OPFLAGS
+OPS
OR'd
ORDERCHKONLY
OSF
OSO
+OSS
OUTFILE
OVFL
Obj
@@ -884,6 +1117,8 @@ ObjectStreamClass
Objs
Offpage
Ol
+Ooops
+OpenFile
OpenFileMapping
OpenServer
OperationStatus
@@ -900,6 +1135,7 @@ PANIC'd
PARAMS
PARENT's
PBNYC
+PF
PG
PGDEF
PGINFO
@@ -909,6 +1145,7 @@ PHP
PID
PKG
PLIST
+PMerge
POPENFILES
POSTDESTROY
POSTLOG
@@ -921,6 +1158,7 @@ PREAD
PREPLIST
PREV
PRI
+PRINTF
PRINTFOOTER
PRINTHEADER
PROT
@@ -929,6 +1167,7 @@ PSTAT
PTHREAD
PWRITE
PaRisc
+PackedIntegerTest
Pagesize
Pagesizes
Params
@@ -954,6 +1193,7 @@ Prev
PrimaryKeyAssigner
Proc
Pthread
+Ptr
PtrToInfo
QAM
QAMDATA
@@ -964,6 +1204,7 @@ QAMVERSION
QMETA
QNX
QPAGE
+QUIESCED
QUOTESERVER
QueueStats
RB
@@ -980,6 +1221,7 @@ RBTRANSIENT
RCLOSE
RDONLY
RDWRMASTER
+READLOCK
READONLY
REALLOC
REALLOC'ed
@@ -996,12 +1238,19 @@ REGIONs
REGMAINT
RELEN
RELIANTUNIX
+REM
RENAMEMAGIC
+REPCTL
REPLOCKED
+REPMGR
REPQUOTE
+REPSTART
+REPTEST
REPVERSION
REQ
REQs
+REREQUEST
+REUSEADDR
REVERSECONCAT
REVERSEDATA
REVSPLITOFF
@@ -1038,19 +1287,41 @@ Recnos
RecordNumberBinding
RecordNumberFormat
RecoveryOperation
+Refcnt
+Refcount
Reinit
+RepConfig
+RepConfigInfo
RepElect
RepElectResult
RepFlush
+RepGetConfig
RepLimit
+RepMgr
RepProcessMessage
+RepQuoteExample
RepRequest
RepStart
RepStat
+RepSync
+RepTransport
+ReplicationConfig
+ReplicationDuplicateMasterException
ReplicationHandleDeadException
+ReplicationHoldElectionException
+ReplicationHostAddress
+ReplicationJoinFailureException
+ReplicationLockoutException
+ReplicationManagerAckPolicy
+ReplicationManagerStartPolicy
+ReplicationSiteUnavailableException
ReplicationStats
ReplicationStatus
+ReplicationTimeoutType
+Repmgr
+Repmgr's
ResetResult
+ResolvePath
ReturnSetup
Rieffel
Rijmen
@@ -1066,9 +1337,11 @@ RunRecoveryException
RuntimeException
RuntimeExceptionWrapper
Rusage
+SC
SCHED
SCO
SCO's
+SDups
SEGDATA
SEGID
SEM
@@ -1077,6 +1350,7 @@ SEP
SEQ
SERVERPROG
SERVERVERS
+SET's
SETALL
SETCURSOR
SETFD
@@ -1088,12 +1362,17 @@ SHASH
SHMEM
SHMGET
SHQUEUE
+SIGABRT
+SIGACTION
SIGALRM
+SIGCHLD
SIGPIPE
SIZEOF
SKIPFIRSTKEY
SKU
+SMerge
SNPRINTF
+SPACEONLY
SPL
SPLITOLD
SPRINTF
@@ -1112,9 +1391,16 @@ STDINT
STK
STR
STRCASECMP
+STRCAT
+STRCHR
STRDUP
STRLIST
+STRNCAT
+STRNCMP
STROFFSET
+STRRCHR
+STRSEP
+STRTOL
STRTOUL
STRUCT
STWCX
@@ -1132,6 +1418,7 @@ Sedgewick
Seq
SeqGet
SeqGetFlags
+SeqNo
SeqOpen
SequenceExample
SequenceStats
@@ -1143,6 +1430,8 @@ SerialOutput
SerialSerialBinding
SerialSerialKeyExtractor
SetEndOfFile
+SetFilePointer
+SetFilePointerEx
SetInfoData
SetListElem
SetListElemInt
@@ -1158,6 +1447,7 @@ ShipmentKey
ShipmentKeyBinding
ShipmentValue
Shm
+SibDup
Signalling
SimpleBuffer
Skiplist
@@ -1206,6 +1496,7 @@ SystemInfo
TAILQ
TCHAR
TCL
+TCLDB
TDS
TESTDIR
TESTTESTEST
@@ -1240,11 +1531,14 @@ TODO
TOPLEVEL
TPC
TPCB
+TPINIT
TPS
TRU
TRUNC
TRUNCDATA
+TS
TSTRING
+TX
TXN
TXNAPP
TXNHEAD
@@ -1257,6 +1551,7 @@ TXNS
TXNVERSION
TXNs
Takuji
+Tbuf
Tcl
Tcl's
TempFolder
@@ -1286,15 +1581,19 @@ TestSimpleAccess
TestStat
TestStore
TestTruncate
+TestTxn
TestUtil
TestXAServlet
Thang
Thies
+ThreadOne
+ThreadTwo
Threshhold
Throwable
TimeUnits
Tmp
Topher
+Torek
TpcbExample
TransactionRunner
TransactionStats
@@ -1325,6 +1624,8 @@ TupleTupleMarshalledBinding
TupleTupleMarshalledKeyExtractor
Txn
TxnCheckpoint
+TxnGuide
+TxnGuideInMemory
TxnInfoDelete
TxnRecover
TxnStat
@@ -1341,11 +1642,13 @@ UNDEF
UNDOC
UNICODE
UNISTD
+UNPv
UNREF
UOC
UPDATEROOT
UPREFIX
USEC
+USERCOPY
USERMEM
UTF
UTFDataFormatException
@@ -1357,8 +1660,11 @@ UnixLib
UnixWare
Unixware
UnknownError
+UnlockFile
UnmapViewOfFile
+Unmarshall
UnsupportedOperationException
+UpdateConflictException
UtfOps
UtfTest
Util
@@ -1373,6 +1679,7 @@ VX
Var
Vc
VendorDB
+VersionMismatchException
Vo
Voter's
Vv
@@ -1391,12 +1698,17 @@ WRITELOCK
WRITEOPEN
WRNOSYNC
WRONLY
+WSA
+WSACleanup
+WSAStartup
+WSAWaitForMultipleEvents
WT
WW
WWRITE
Waitsfor
WebLogic
WinNT
+WinXP
WriteFile
X's
XA
@@ -1405,6 +1717,7 @@ XAException
XAResource
XID
XIDDATASIZE
+XMIT
XOR'd
XP
XPG
@@ -1424,6 +1737,7 @@ aaC
aaD
aaa
aaaaaa
+aaaaaaaaaaaaaaaaaaaaaa
aaaaab
aaaaac
aab
@@ -1434,12 +1748,16 @@ abc
abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
abcdef
abs
+abshome
absname
abspath
ac
aca
accessor
ack
+ack'ed
+ack's
+acks
acplt
activekids
activep
@@ -1453,14 +1771,19 @@ addfamilylocker
addpage
addr
addrem
+addrinfo
+addrlen
addrp
adh
adj
adjindx
adlsVv
admin
+adv
afterop
ahr
+alanb
+alexg
alfred
alg
algsetup
@@ -1471,8 +1794,11 @@ alloc'ed
alloc'ing
alloced
allocs
+allpeers
+allreq
alsVv
alsn
+amd
amx
antoon
anum
@@ -1486,6 +1812,7 @@ appnotes
apprec
apps
aq
+archivable
archivedir
areDuplicatesAllowed
areDuplicatesOrdered
@@ -1497,13 +1824,16 @@ argv
arr
arraycopy
arraysz
+asap
asites
+asprintf
assertEquals
astubble
ata
atoi
atol
att
+attr
autoCommit
autocommit
autoconf
@@ -1513,6 +1843,7 @@ avg
awk
baaaaa
backoff
+backpointer
badend
badgen
badkey
@@ -1530,6 +1861,7 @@ bdbcmds
beginInclusive
beginKey
beq
+beql
berkdb
berkdbcmds
berkeley
@@ -1541,6 +1873,7 @@ bhfree
bhp
bhwrite
bi
+bigending
bigint
bigpages
bigpair
@@ -1552,6 +1885,7 @@ blk
blksize
blockDecrypt
blockEncrypt
+blockSize
blocknum
blocksize
bmeta
@@ -1575,6 +1909,7 @@ btrec
btree
btreemeta
btrees
+bucketsp
buf
bufp
bufs
@@ -1588,23 +1923,30 @@ bypage
byteLen
byteOffset
byteorder
+bytesExpected
bytesToChars
bytesize
bytesp
byteswap
byteswapped
bytevalue
+cDd
+cDuVv
cEelmNrtVZ
+cEelmNrtVxZ
caaaaa
cachep
cachesize
cadjust
+call's
callback
callback's
callbk
calloc
callocs
callpgin
+canonname
+capi
carray
catalogtest
cbts
@@ -1617,11 +1959,15 @@ cd
cdata
cdb
cdel
+cds
+cdsgroup
ceVv
ceh
celmNrtVZ
celmNtV
celmNtVZ
+cfile
+cfp
cget
cgetchk
ch
@@ -1638,6 +1984,7 @@ childcursor
childinc
childproof
childput
+childs
chk
chkpoint
chkpt
@@ -1663,10 +2010,13 @@ clearIndexKey
clearerr
clib
clientData
+clientdb
clientrun
clist
clnt
+closeEnv
closeevent
+closefiles
closehandle
closeme
cls
@@ -1700,6 +2050,7 @@ copymap
copyout
copypage
countElements
+countRecords
countp
cp
cpage
@@ -1712,13 +2063,17 @@ creat
createflag
crypto
cs
+csearch
csp
+csv
ct
+ctime
ctp
ctp's
ctps
ctx
ctxn
+cuVv
curadj
curfile
curinfo
@@ -1730,6 +2085,7 @@ curslist
cursp
cursq
cutlim
+cuz
cxx
cxxproc
cxxthis
@@ -1744,6 +2100,7 @@ datalen
datap
datapage
datastr
+datatype
db
dbFileName
dbOpenFlags
@@ -1784,6 +2141,7 @@ dbminit
dbmp
dbname
dbnamep
+dbo
dbobj
dbopen
dbp
@@ -1794,6 +2152,7 @@ dbps
dbq
dbrdonly
dbreg
+dbregister
dbremove
dbrename
dbs
@@ -1812,6 +2171,8 @@ dbverify
dbx
dcursor
dd
+dda
+ddbt
deadfile
deadlocker
deadmap
@@ -1823,6 +2184,7 @@ defg
defpfx
defto
del
+delayclient
deletable
deleteAction
delext
@@ -1832,6 +2194,7 @@ delpg
denom
dereffing
des
+desc
deserialize
deserialized
deserializing
@@ -1842,6 +2205,7 @@ df
dh
diff
difflen
+difftime
dir
directio
dirent
@@ -1893,6 +2257,7 @@ dup
dup'ed
dupcompare
duperr
+duplicate's
dupmaster
dupmasters
dupped
@@ -1912,6 +2277,7 @@ egen
eid
eid's
eidp
+eids
ek
ele
electinit
@@ -1947,6 +2313,7 @@ env's
envFlags
envcl
envdata
+envdir
envdp
envid
envip
@@ -1954,16 +2321,20 @@ envlock
envp
envpanic
envparent
+envreg
envremove
envrpcserver
envs
+eobj
eof
eor
+ep
erlangen
errbuf
errcall
errfile
errlock
+errlst
errno
errnum
erroring
@@ -1972,10 +2343,14 @@ errpfx
errunlock
errx
esat
+esec
esp
+eusec
eval
+eventproc
exactp
excl
+excxx
exe
exid
exnum
@@ -1985,15 +2360,19 @@ ext
extentsize
extentsizep
externalizable
+externs
extid
extractIndexKey
fN
+failcheck
+failchk
faq
faststat
faultmem
fc
fcchk
fchk
+fchmod
fclose
fcn
fcntl
@@ -2001,6 +2380,7 @@ fcreate
fd
fd's
fdatasync
+fdlock
fdm
fdp
fdupcurs
@@ -2010,10 +2390,14 @@ ff
ffactor
ffactorp
fget
+fgetc
+fgets
fh
fhp
fid
fids
+fieldlist
+fieldno
fileID
fileIDs
filedone
@@ -2023,11 +2407,15 @@ fileids
fileinfo
fileinit
filelist
+filemode
filenamep
filenum
fileopen
fileops
+filestart
fillf
+fillfactor
+fillpercent
finalcount
findFirst
finddatum
@@ -2044,6 +2432,8 @@ floatToIntBits
flushcommit
fmax
fmethod
+fmsg
+fmt
fn
fname
fnl
@@ -2058,6 +2448,7 @@ form's
format's
formatID
fp
+fprintf
fprobe
fptr
fput
@@ -2066,12 +2457,16 @@ freakin
free'd
free'ing
freeable
+freeaddrinfo
freedata
freefamilylocker
freelist
freelock
freelocker
+freelst
+freeonly
freep
+freespace
fremove
freq
friedl
@@ -2087,6 +2482,7 @@ fst
fstat
fstati
fsync
+ftab
ftruncate
ftype
fullhome
@@ -2095,6 +2491,9 @@ func
funcs
fv
fwd
+fwrite
+fzero
+gapflags
gbytes
gbytesp
gc
@@ -2117,6 +2516,7 @@ getDbtString
getDetail
getEnvironment
getErrno
+getField
getFlags
getFormatId
getGlobalTransactionId
@@ -2133,6 +2533,7 @@ getPartialLength
getPartialOffset
getPrimaryKeyFormat
getPrimitiveBinding
+getProperty
getRecordNumber
getSize
getString
@@ -2141,15 +2542,20 @@ getUserBufferLength
getValue
getValueFormat
getactive
+getaddr
+getaddrinfo
getboth
getbothc
getckp
+getconfig
getcwd
getdata
getdynamic
getenv
+gethostbyname
getinfo
getjoin
+getline
getlocker
getlong
getname
@@ -2172,13 +2578,19 @@ getval
getzip
ghi
gid
+gm
+golive
+gonna
gotkey
gotta
+grep
groupalloc
+groupgrow
gsf
gsp
gtrid
guesspgsize
+guesstimated
hEvent
handle's
handleException
@@ -2193,6 +2605,7 @@ hashinit
hashmeta
hashp
hashproc
+hashtab
hc
hcp
hcreate
@@ -2209,18 +2622,23 @@ headp
heldby
helloworld
hf
+hfp
hijkl
himark
histdbt
hlock
+hm
hmac
hmeta
+hmm
holdl
homep
homeroot
hostaddr
hostname
+hotbackup
hotcopy
+hotupdate
hp
hq
href
@@ -2245,6 +2663,7 @@ idup'ed
iface
ifdef
iff
+ifmt
ifndef
ihold
iitem
@@ -2256,6 +2675,7 @@ incfirst
incomp
incr
incursor
+ind
indexCursor
indexKey
indexKeyData
@@ -2266,6 +2686,7 @@ indexOf
indexViews
indexlist
indx
+indxp
info's
infop
informatik
@@ -2280,6 +2701,7 @@ inlen
inline
inmem
inmemdbflags
+inmemlist
inmemory
ino
inode
@@ -2298,14 +2720,19 @@ intial
ints
inttypes
inuse
+inval
inventoryDB
inventorydb
io
ioinfo
iopsize
iosDevFind
+iovec
+iovecs
ip
+ipc
ipcs
+iq
iread
isAutoCommit
isByteLen
@@ -2316,15 +2743,19 @@ isIndexed
isOrdered
isTransactional
isWriteAllowed
+isalive
+isalpha
isbad
isbigendian
isdeleted
+isdigit
isdone
isdst
isdup
isolder
isopd
ispget
+isprint
isroot
isspace
istmp
@@ -2352,6 +2783,7 @@ journaling
jp
jq
jrpcgen
+jt
jta
kb
kbyte
@@ -2371,6 +2803,7 @@ keyName
keyOutput
keySet
keybuf
+keyexists
keyfirst
keyflag
keygroup
@@ -2383,6 +2816,7 @@ keyrange
keystr
kgnum
ki
+kidsp
killid
killinterval
killiteration
@@ -2390,6 +2824,7 @@ killtest
klNpP
klNprRV
klNprRs
+klen
klinks
kow
kp
@@ -2411,7 +2846,9 @@ lastpgno
later's
lbtree
lbucket
+lbuf
lc
+lcnt
ld
ldata
ldbp
@@ -2424,6 +2861,7 @@ le
len
lenp
les
+levelp
lf
lfhp
lfname
@@ -2432,15 +2870,19 @@ lget
lh
lhash
lhi
+lib
+libc
libdb
libfile
libname
libpthread
libthread
lineno
+linux
listIterator
listobj
listp
+listsize
lk
lkrs
ll
@@ -2452,6 +2894,7 @@ ln
lnP
lnsl
loadme
+loc
localhost
localtime
lockForWrite
@@ -2482,23 +2925,31 @@ logflush
loggap
logmaxset
logmsg
+logready
logrec
+logreq
logset
logsonly
+logv
longBitsToDouble
+longtest
lorder
lorderp
lowlsn
lp
+lpBuffer
lpgno
lprint
lput
lrand
+lref
lrp
lru
lsVv
+lseek
lsn
lsnadd
+lsnget
lsninit
lsnoff
lsnp
@@ -2543,6 +2994,7 @@ marshalIndexKey
marshalled
marshalling
matumoto
+maxKey
maxRetries
maxb
maxcommitperflush
@@ -2557,6 +3009,7 @@ maxnactive
maxnlockers
maxnlocks
maxnobjects
+maxnsnapshot
maxobjects
maxopenfd
maxops
@@ -2579,6 +3032,8 @@ mbucket
mbytes
mbytesp
md
+mday
+mdays
mem
membar
memcmp
@@ -2598,6 +3053,7 @@ metaswap
methodID
mf
mfp
+mgr
mgrp
midpage
millitm
@@ -2612,11 +3068,13 @@ minver
minwrite
minwrites
mip
+mips
mis
misc
mjc
mkdir
mkdir's
+mkpath
mlock
mmap
mmap'd
@@ -2629,6 +3087,7 @@ mmpgno
modeFlag
moremiddle
mortem
+mov
movl
mp
mpf
@@ -2640,6 +3099,7 @@ mpool
mpoolfile
mpools
mpreg
+mprotect
mps
msem
msemaphore
@@ -2649,14 +3109,21 @@ msgadd
msgbuf
msgcall
msgdbt
+msgdir
msgfile
msgfp
msgs
+msgth
msgtype
+msgv
msize
mswap
mt
mti
+mtx
+mtxmgr
+mtxregion
+multiversion
munlock
munmap
mut
@@ -2666,7 +3133,12 @@ mutexlocks
mutexp
muxfile
mv
+mvcc
mvptr
+myClassDb
+myDb
+myclassdb
+mydb
mydrive
mydrivexxx
myfree
@@ -2685,9 +3157,12 @@ namelistp
nameop
namep
namesp
+nano
nargc
nargv
nbegins
+nbucket
+nbuf
nbytes
ncache
ncachep
@@ -2695,19 +3170,27 @@ ncaches
ncommit
ncommits
nconflicts
+ncp
ncurs
+ncvs
ndary
ndata
+ndbc
ndbm
ndeadalloc
ndeadlocks
ndir
+ndowngrade
ndx
needswap
neg
nelem
nelemp
+nelems
nentries
+nentry
+netaddr
+neterr
nevict
newalloc
newclient
@@ -2723,6 +3206,7 @@ newopd
newpage
newpgno
newsite
+newsitep
newsites
newsize
next's
@@ -2737,8 +3221,10 @@ nextpgno
nfid
nfiles
ng
+nio
nitems
nkeys
+nl
nlist
nlockers
nlocks
@@ -2750,8 +3236,11 @@ nnextlsn
nnowaits
noWait
noarchive
+noautoinit
nobjects
+nobuf
nobuffer
+nodename
nodup
nodupdata
noet
@@ -2760,20 +3249,26 @@ nohasham
nolock
nolocking
nolonger
+nomacro
nomem
nommap
+nonblock
+noone
noop
nooverwrite
nop
nopanic
nopenp
+noreorder
norep
+norepmgr
nosort
nosync
nosystemmem
notdurable
notfound
notgranted
+notsup
notused
notzero
novrfy
@@ -2781,6 +3276,9 @@ nowait
nowaits
np
npages
+npeers
+npg
+npg's
npgno
nprocs
nptr
@@ -2791,15 +3289,18 @@ nrec
nrecords
nrecs
nreg
+nregions
nreleases
nrepeat
nrequests
nrestores
+nsec
nsites
nsize
nsl
nsleep
nsleepp
+nsnapshot
ntasks
nthreads
nthrottles
@@ -2813,8 +3314,11 @@ numdup
numdups
numext
numlocks
+nums
+nupgrade
nval
nvotes
+nw
nwrite
nwritep
nwriters
@@ -2845,24 +3349,32 @@ olditem
oldname
oldrec
oldsize
+oldskey
+oldver
+oldversion
oli
omniti
omode
ondisk
onefile
+onepeer
onint
onoff
onoffp
onpage
op
+opcnt
opd
openCursors
+openDb
+openEnv
openFlags
openfd
openfiles
openhandle
opensub
opflags
+opgno
opmods
ops
optarg
@@ -2916,6 +3428,7 @@ pagfno
panic'd
panic'ing
paniccall
+panicing
panicstate
params
parentid
@@ -2923,8 +3436,11 @@ parseLong
partsize
passwd
passwds
+patchver
paulo
+pbuf
pct
+pdata
pdbp
pdf
penv
@@ -2947,7 +3463,9 @@ pggap
pgin
pginfo
pgip
+pglist
pgmax
+pgmin
pgno
pgnoadd
pgnoaddr
@@ -2955,7 +3473,9 @@ pgnop
pgnos
pgnum
pgout
+pgp
pgread
+pgrec
pgs
pgset
pgsize
@@ -2981,6 +3501,7 @@ pn
poff
portmapper
pos
+posix
postdestroy
postlog
postlogmeta
@@ -3044,6 +3565,7 @@ pthreads
ptr
ptrdiff
ptype
+pupdate
putAll
putall
putchar
@@ -3061,6 +3583,7 @@ qmeta
qmpf
qnx
qp
+qr
qs
qtest
quV
@@ -3072,8 +3595,11 @@ rRs
rV
rand
randtbl
+rb
rbtree
rcon
+rcount
+rcrd
rcuradj
rcursor
rcvd
@@ -3103,10 +3629,13 @@ readdir
readn
readonly
readratio
+readsocket
+readv
realloc
realloc'd
realloc'ed
reallocing
+realpri
rec
recfill
reclen
@@ -3116,17 +3645,25 @@ recnop
recnos
recnum
recnums
+recognised
recops
record's
recordNumber
recordlen
+recordp
recs
rectype
+rectypes
recvd
+refactor
refcnt
refcount
refcounting
reffed
+reflectField
+reflectMethod
+regcomp
+regenv
regids
reginfo
regionmax
@@ -3134,6 +3671,7 @@ reglocks
regmutex
regmutexes
regop
+regs
regsize
relen
relink
@@ -3146,19 +3684,30 @@ removeAll
remrem
renum
renv
+reorg
rep's
repdb
+repflag
repl
replication's
replpair
replyp
+repmgr
+repmgr's
+repoman
reppg
repquote
repsite
+reptest
+repth
reput
reputpair
req
+rereq
+rerequest
+rerequests
resizep
+resolvepath
resync
retPrimaryKey
retValue
@@ -3192,6 +3741,7 @@ riw
rk
rkey
rlen
+rlimit
rlsn
rlsnp
rm
@@ -3204,6 +3754,7 @@ roff
rollforward
rootent
rootlsn
+rop
rp
rp's
rpath
@@ -3222,18 +3773,23 @@ rskey
rsplit
rtree
rtxn
+rtype
rundb
runlog
rusage
rw
rwrw
rwrwrw
+rwx
sS
sV
sVv
salloc
salvager's
+savekey
savetime
+sc
+sce
sched
scount
sdb
@@ -3247,6 +3803,7 @@ secsp
sectorsize
segdata
segid
+sel
sema
semid
seminfo
@@ -3255,8 +3812,10 @@ sendpages
sendproc
sep
seq
+seqNo
seqnum
seqp
+sequentialness
serialobj
servlet
setAppDispatch
@@ -3271,6 +3830,7 @@ setErrorHandler
setErrorPrefix
setFeedback
setFeedbackHandler
+setField
setFlags
setHash
setLock
@@ -3293,8 +3853,12 @@ setValue
setflags
setid
setlsn
+setname
+setsid
+setstacksize
settimeout
setto
+settxn
setval
sexing
sgenrand
@@ -3317,7 +3881,10 @@ shownull
shqueue
shr
shreg
+sigaction
siginit
+signalled
+signalling
signo
sigresend
singleKey
@@ -3328,6 +3895,7 @@ sizeof
sj
skiplist
skiplists
+skipput
skodonj
sl
sle
@@ -3339,11 +3907,16 @@ smax
snapshotting
sniglet
snprintf
+sockaddr
+sockopt
+socktype
sortdups
sourcep
sp
+spanp
sparc
spawnl
+spgno
spinlock
spinlocks
spinsp
@@ -3362,6 +3935,7 @@ sshift
ssize
sslll
sss
+startupdone
stat
stati
stats
@@ -3378,7 +3952,9 @@ stdout
stkgrow
stkrel
stl
+stmax
storedCollection
+storedIter
storedIterator
storedList
storedMap
@@ -3389,16 +3965,23 @@ stqe
stqh
str
strcasecmp
+strcat
+strchr
strcmp
+strcpy
strdup
strdup'ed
strerror
+strftime
stringToBytes
stringp
strlen
strncasecmp
+strncat
strncmp
+strrchr
strsep
+strtod
strtol
strtoul
struct
@@ -3406,11 +3989,13 @@ structs
structure's
sts
stwcx
+stype
subList
subMap
subSet
subcases
subclassed
+subdata
subdatabase
subdatabase's
subdb
@@ -3435,12 +4020,17 @@ sync'ed
synced
syncs
sysattach
+sysbuf
+syscall
sysconf
sysdetach
+syserr
sz
t's
+tNULL
tV
tVZ
+tVxX
tableent
tablesize
tailMap
@@ -3448,11 +4038,14 @@ tailSet
tailq
tas
taskLock
+tbuf
tc
+tchar
tcl
tcp
td
tdata
+tdkids
tearDown
terra
testName
@@ -3470,11 +4063,14 @@ thr
thread's
threadID
threadedness
+threadid
+thrp
tid
tids
tiebreaker
tiebreaking
timeoutp
+timespec
timestamp
timeval
timout
@@ -3484,6 +4080,7 @@ tm
tmap
tmax
tmp
+tmpath
tmpdir
tmpmap
tmpname
@@ -3503,7 +4100,15 @@ toched
todo
toobig
tp
+tpabort
+tpalloc
+tpbegin
tpcb
+tpcommit
+tpinit
+tpsvrdone
+tpsvrinit
+tpterm
tput
tqe
tqh
@@ -3515,13 +4120,16 @@ trinomials
trunc
truncdata
ts
+tsize
tsl
tstart
+ttmax
ttpcbddlk
ttpcbi
ttpcbr
ttype
tv
+tvoid
tx
txn
txnal
@@ -3535,7 +4143,11 @@ txnlist
txnp
txns
txntimeout
+txnwait
txt
+typemore
+uK
+uVv
ua
ubell
ud
@@ -3543,13 +4155,16 @@ udbt
ufid
ufree
uid
+uint
uintmax
uintptr
ul
ulen
ulens
ulinks
+ulong
umalloc
+umask
uncorrect
undef
undeleting
@@ -3565,10 +4180,12 @@ unix
unmap
unmapfile
unmark
+unmarshal
unmarshalData
unmarshalled
unpinned
unpinning
+unprintables
unref
unregistry
upd
@@ -3582,17 +4199,22 @@ useCurrentKey
usePrimaryKey
useValue
usec
+useconds
usecs
usecsp
+usercopy
+userfree
usermem
usr
usrAppInit
util
+vV
vVxXZ
vVxXyZ
vZ
va
val
+valn
value's
valueBinding
valueData
@@ -3605,6 +4227,8 @@ valueOutput
var
variadic
vars
+vbuf
+vc
vdp
vdp's
vec
@@ -3612,7 +4236,11 @@ vendorDB
vendordb
ver
verbage
+vers
+versioned
+versioning
vflag
+vfprintf
vica
view's
vrfy
@@ -3631,16 +4259,21 @@ wHour
wMinute
wMonth
wSecond
+wWeekDay
wYear
waitl
waitlist
+waitpid
waitsfor
+wakeme
+wakep
walkdupint
walkpages
walkqueue
wb
wc
wcount
+wday
weblogic
weblogic's
webquill
@@ -3670,8 +4303,10 @@ writeable
writeback
writelock
writelocks
+writev
wrlock
wrnosync
+wsa
wsize
wt
wthread
@@ -3685,7 +4320,9 @@ xid
xids
xml
xor
+xori
xorl
+xunlock
xxx
xyz
yieldcpu
diff --git a/db/test/scr011/chk.tags b/db/test/scr011/chk.tags
index f1d680ac7..8ef210a46 100644
--- a/db/test/scr011/chk.tags
+++ b/db/test/scr011/chk.tags
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.tags,v 1.14 2004/10/07 20:30:32 bostic Exp $
+# $Id: chk.tags,v 12.3 2006/09/09 00:42:20 bostic Exp $
#
# Check to make sure we don't need any more symbolic links to tags files.
@@ -18,9 +18,9 @@ t2=__2
(cd $d && ls -F | egrep / | sort |
sed -e 's/\///' \
-e '/^CVS$/d' \
+ -e '/^build_brew$/d' \
-e '/^build_vxworks$/d' \
- -e '/^build_win32$/d' \
- -e '/^build_win64$/d' \
+ -e '/^build_windows$/d' \
-e '/^docs$/d' \
-e '/^docs_book$/d' \
-e '/^docs_src$/d' \
@@ -32,7 +32,6 @@ t2=__2
-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 8b7916053..f181031e8 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.7 2004/09/16 17:21:11 bostic Exp $
+# $Id: chk.vx_code,v 12.1 2005/10/20 18:59:14 bostic Exp $
#
# Check to make sure the auto-generated utility code in the VxWorks build
# directory compiles.
@@ -33,8 +33,19 @@ header()
echo "{"
echo "int i;") > t1.c
-for i in db_archive db_checkpoint db_deadlock db_dump db_load \
- db_printlog db_recover db_stat db_upgrade db_verify dbdemo; do
+for i in \
+ db_archive \
+ db_checkpoint \
+ db_deadlock \
+ db_dump \
+ db_hotbackup \
+ db_load \
+ db_printlog \
+ db_recover \
+ db_stat \
+ db_upgrade \
+ db_verify \
+ dbdemo; do
echo " compiling build_vxworks/$i"
(cat $d/build_vxworks/$i/$i.c; header $i) > t.c
if cc -Wall -I.. -I$d t.c $F ../libdb.a -o t; then
diff --git a/db/test/scr013/chk.stats b/db/test/scr013/chk.stats
index 7ee71392e..241fa23bc 100644
--- a/db/test/scr013/chk.stats
+++ b/db/test/scr013/chk.stats
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.stats,v 1.9 2004/11/08 14:49:42 bostic Exp $
+# $Id: chk.stats,v 12.2 2006/09/11 16:26:46 bostic Exp $
#
# Check to make sure all of the stat structure members are included in
# all of the possible formats.
@@ -36,6 +36,7 @@ bt_metaflags
hash_metaflags
qs_metaflags
qs_ndata
+st_hash_max_nowait
END_OF_IGNORE
# Check to make sure the elements of a structure from db.h appear in
@@ -67,6 +68,8 @@ inc __db_mpool_fstat \
"$d/tcl/tcl_mp.c $d/mp/mp_stat.c $docs/memp/memp_stat.so"
inc __db_mpool_stat \
"$d/tcl/tcl_mp.c $d/mp/mp_stat.c $docs/memp/memp_stat.so"
+inc __db_mutex_stat \
+ "$d/mutex/mut_stat.c $docs/mutex/mutex_stat.so"
inc "__db_qam_stat" \
"$d/tcl/tcl_db.c $d/qam/qam_stat.c $docs/db/db_stat.so"
inc __db_rep_stat \
diff --git a/db/test/scr014/chk.err b/db/test/scr014/chk.err
index 72b4a6271..654034a6a 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 12.0 2004/11/17 03:44:45 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 75a356eea..a4948a261 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 12.0 2004/11/17 03:44:46 bostic 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 0b0495ce9..9574ca06d 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestConstruct01.cpp,v 1.8 2004/01/28 03:36:33 bostic Exp $
+ * $Id: TestConstruct01.cpp,v 12.4 2006/08/24 14:46:42 bostic Exp $
*/
/*
@@ -13,8 +13,6 @@
* Run with a numeric argument, it repeats the regression a number
* of times, to try to determine if there are memory leaks.
*/
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <iostream.h>
@@ -24,7 +22,6 @@
#ifndef _MSC_VER
#include <unistd.h>
#endif
-#endif
#include <iomanip.h>
#include <db_cxx.h>
diff --git a/db/test/scr015/TestGetSetMethods.cpp b/db/test/scr015/TestGetSetMethods.cpp
index 1d896766d..42908f485 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestGetSetMethods.cpp,v 1.6 2004/01/28 03:36:33 bostic Exp $
+ * $Id: TestGetSetMethods.cpp,v 12.5 2006/08/24 14:46:42 bostic Exp $
*/
/*
@@ -32,13 +32,10 @@ int main(int argc, char *argv[])
dbenv->set_lg_regionmax(0x100000);
dbenv->set_lk_conflicts(conflicts, sizeof(conflicts));
dbenv->set_lk_detect(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);
// Need to open the environment so we
// can get a transaction.
@@ -56,12 +53,11 @@ int main(int argc, char *argv[])
// 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
+ // set_bt_minkey, 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->close(0);
diff --git a/db/test/scr015/TestKeyRange.cpp b/db/test/scr015/TestKeyRange.cpp
index d875cb20b..d14a72427 100644
--- a/db/test/scr015/TestKeyRange.cpp
+++ b/db/test/scr015/TestKeyRange.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestKeyRange.cpp,v 1.6 2004/01/28 03:36:33 bostic Exp $
+ * $Id: TestKeyRange.cpp,v 12.4 2006/08/24 14:46:43 bostic Exp $
*/
/*
@@ -12,8 +12,6 @@
* change of /AccessExample/TestKeyRange/, the only other changes are
* marked with comments that are notated as 'ADDED'.
*/
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <iostream.h>
@@ -23,7 +21,6 @@
#ifndef _MSC_VER
#include <unistd.h>
#endif
-#endif
#include <iomanip.h>
#include <db_cxx.h>
diff --git a/db/test/scr015/TestLogc.cpp b/db/test/scr015/TestLogc.cpp
index 636db4530..b08508856 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestLogc.cpp,v 1.8 2004/01/28 03:36:33 bostic Exp $
+ * $Id: TestLogc.cpp,v 12.3 2006/08/24 14:46:43 bostic Exp $
*/
/*
diff --git a/db/test/scr015/TestSimpleAccess.cpp b/db/test/scr015/TestSimpleAccess.cpp
index 8415cda78..b4022e8bc 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestSimpleAccess.cpp,v 1.7 2004/01/28 03:36:33 bostic Exp $
+ * $Id: TestSimpleAccess.cpp,v 12.3 2006/08/24 14:46:43 bostic Exp $
*/
/*
diff --git a/db/test/scr015/TestTruncate.cpp b/db/test/scr015/TestTruncate.cpp
index 54ecf81c8..1f8587ac5 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-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestTruncate.cpp,v 1.7 2004/01/28 03:36:34 bostic Exp $
+ * $Id: TestTruncate.cpp,v 12.3 2006/08/24 14:46:43 bostic Exp $
*/
/*
diff --git a/db/test/scr015/chk.cxxtests b/db/test/scr015/chk.cxxtests
index 3d1e3947c..169e76f47 100644
--- a/db/test/scr015/chk.cxxtests
+++ b/db/test/scr015/chk.cxxtests
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.cxxtests,v 1.8 2004/09/28 19:58:42 mjc Exp $
+# $Id: chk.cxxtests,v 12.0 2004/11/17 03:44:48 bostic Exp $
#
# Check to make sure that regression tests for C++ run.
diff --git a/db/test/scr015/ignore b/db/test/scr015/ignore
index 55ce82ae3..4fe4d3240 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 12.0 2004/11/17 03:44:48 bostic Exp $
#
# A list of tests to ignore
diff --git a/db/test/scr015/testall b/db/test/scr015/testall
index a2d493a8b..7320d9525 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 12.0 2004/11/17 03:44:48 bostic Exp $
#
# Run all the C++ regression tests
diff --git a/db/test/scr015/testone b/db/test/scr015/testone
index 3bbba3f90..282092b06 100644
--- a/db/test/scr015/testone
+++ b/db/test/scr015/testone
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: testone,v 1.5 2002/07/05 22:17:59 dda Exp $
+# $Id: testone,v 12.0 2004/11/17 03:44:48 bostic Exp $
#
# Run just one C++ regression test, the single argument
# is the basename of the test, e.g. TestRpcServer
diff --git a/db/test/scr017/chk.db185 b/db/test/scr017/chk.db185
index e6bfef845..0b2e9cf3e 100644
--- a/db/test/scr017/chk.db185
+++ b/db/test/scr017/chk.db185
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.db185,v 1.3 2003/09/30 19:31:36 bostic Exp $
+# $Id: chk.db185,v 12.0 2004/11/17 03:44:50 bostic Exp $
#
# Check to make sure we can run DB 1.85 code.
diff --git a/db/test/scr018/chk.comma b/db/test/scr018/chk.comma
index 42df48d18..1b871f118 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 12.0 2004/11/17 03:44:50 bostic Exp $
#
# Look for trailing commas in declarations. Some compilers can't handle:
# enum {
diff --git a/db/test/scr018/t.c b/db/test/scr018/t.c
index 4056a6059..d7dd7ac65 100644
--- a/db/test/scr018/t.c
+++ b/db/test/scr018/t.c
@@ -3,7 +3,8 @@
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
-#include <strings.h>
+#include <stdlib.h>
+#include <string.h>
int
chk(f)
diff --git a/db/test/scr019/chk.include b/db/test/scr019/chk.include
index edd2bf6b4..4d583e580 100644
--- a/db/test/scr019/chk.include
+++ b/db/test/scr019/chk.include
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.include,v 1.4 2004/10/07 20:34:39 bostic Exp $
+# $Id: chk.include,v 12.2 2006/09/11 15:27:36 bostic Exp $
#
# Check for inclusion of files already included in db_int.h.
@@ -25,12 +25,17 @@ for i in `cat $t1`; do
(cd $d && egrep "^#include[ ].*[<\"]$i[>\"]" */*.[ch])
done |
sed -e '/^build/d' \
+ -e '/^clib\/strtol.c/d' \
+ -e '/^clib\/strtoul.c/d' \
-e '/^db_dump185/d' \
+ -e '/^dbinc\/mutex_int.h.*<sys\/mman.h>/d' \
-e '/^examples_c/d' \
-e '/^libdb_java.*errno.h/d' \
-e '/^libdb_java.*java_util.h/d' \
+ -e '/^libdb_java\/db_java_wrap.c/d' \
-e '/^mod_db4/d' \
-e '/^mutex\/tm.c/d' \
+ -e '/^os\/os_map.c.*<sys\/mman.h>/d' \
-e '/^perl/d' \
-e '/^php_db4/d' \
-e '/^test_/d' \
diff --git a/db/test/scr020/chk.inc b/db/test/scr020/chk.inc
index 24c1a47c1..47b327028 100644
--- a/db/test/scr020/chk.inc
+++ b/db/test/scr020/chk.inc
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.inc,v 1.2 2003/08/01 16:49:29 bostic Exp $
+# $Id: chk.inc,v 12.0 2004/11/17 03:44:51 bostic Exp $
#
# Check for inclusion of db_config.h after "const" or other includes.
diff --git a/db/test/scr021/chk.flags b/db/test/scr021/chk.flags
index 2f32b82e6..0a7cc9034 100644
--- a/db/test/scr021/chk.flags
+++ b/db/test/scr021/chk.flags
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.flags,v 1.12 2004/10/19 02:28:19 bostic Exp $
+# $Id: chk.flags,v 12.1 2005/10/20 19:16:41 bostic Exp $
#
# Check flag name-spaces.
@@ -59,18 +59,24 @@ sed -e '/DB_AM_/d' \
}
grep 'DB_AM_' $t1 |
-sed -e '/((*[ ]*db_rep->rep_db)*,/d' \
+sed \
+ -e '/(&db,/d' \
+ -e '/((*[ ]*db_rep->rep_db)*,/d' \
-e '/((*[ ]*dbc)*->dbp,/d' \
-e '/((*[ ]*dbc_arg->dbp)*,/d' \
-e '/((*[ ]*dbp)*,/d' \
-e '/((*[ ]*dbp)*->s_primary,/d' \
-e '/((D),/d' \
+ -e '/((sdbp),/d' \
+ -e '/(file_dbp,/d' \
+ -e '/(ldbp,/d' \
-e '/(mdbp,/d' \
-e '/(pdbp,/d' \
-e '/(pginfo, /d' \
-e '/(sdbp,/d' \
-e '/(subdbp,/d' \
-e '/fop_util.c:.*(t2dbp,/d' \
+ -e '/fop_util.c:.*(tmpdbp,/d' \
-e '/rep_backup.c.*(rfp,/d' \
> $t2
[ -s $t2 ] && {
diff --git a/db/test/scr021/t.c b/db/test/scr021/t.c
index a45865cfe..d22d6a2f0 100644
--- a/db/test/scr021/t.c
+++ b/db/test/scr021/t.c
@@ -3,7 +3,8 @@
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
-#include <strings.h>
+#include <stdlib.h>
+#include <string.h>
void
chk(f, str)
diff --git a/db/test/scr022/chk.rr b/db/test/scr022/chk.rr
index 53d8bb158..f8794e847 100644
--- a/db/test/scr022/chk.rr
+++ b/db/test/scr022/chk.rr
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.rr,v 1.5 2004/10/07 20:40:43 bostic Exp $
+# $Id: chk.rr,v 12.1 2005/10/20 19:17:56 bostic Exp $
d=../..
@@ -9,11 +9,12 @@ t1=__1
# Check for DB_RUNRECOVERY being specified instead of a call to db_panic.
egrep DB_RUNRECOVERY $d/*/*.c |
sed -e '/__db_panic(.*, DB_RUNRECOVERY)/d' \
+ -e '/\/php_db4\//d' \
-e '/case DB_RUNRECOVERY:/d' \
-e '/db_dispatch.c:.*if (ret == DB_RUNRECOVERY/d' \
-e '/db_err.c:/d' \
+ -e '/env_open.c:.*ret = DB_RUNRECOVERY;/d' \
-e '/os_errno.c:.*evalue == DB_RUNRECOVERY/d' \
- -e '/\/php_db4\//d' \
-e '/rep_backup.c:.*Panic the env and return DB_RUNRECOVERY/d' \
-e '/txn.c:.* \* DB_RUNRECOVERY and we need to/d' \
-e '/txn.c:.*returned DB_RUNRECOVERY and we need to/d' \
diff --git a/db/test/scr023/chk.q b/db/test/scr023/chk.q
index 62b4fdc23..13175faa6 100644
--- a/db/test/scr023/chk.q
+++ b/db/test/scr023/chk.q
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.q,v 1.1 2002/10/09 18:42:21 bostic Exp $
+# $Id: chk.q,v 12.0 2004/11/17 03:44:51 bostic Exp $
#
# Check to make sure the queue macros pass our tests.
diff --git a/db/test/scr024/chk.bdb b/db/test/scr024/chk.bdb
index 9f20059ec..95a795017 100644
--- a/db/test/scr024/chk.bdb
+++ b/db/test/scr024/chk.bdb
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.bdb,v 1.8 2004/04/09 16:34:10 mark Exp $
+# $Id: chk.bdb,v 12.1 2006/09/12 00:37:26 alexg Exp $
#
# Run the collections/bind test suite.
@@ -24,6 +24,7 @@
d=..
REQUIRED_JARS=$JUNIT_JAR
DB_JAR=$d/db.jar
+DB_LIB_DIR=$d/.libs
export DB_JAR
export REQUIRED_JARS
@@ -41,7 +42,8 @@ make clean
c="com.sleepycat.collections.test.serial.StoredClassCatalogTestInit"
echo "Running: $c"
-if java -cp testserial:$REQUIRED_JARS:$DB_JAR:./dbtest.jar $c ; then
+if java -Djava.library.path=$DB_LIB_DIR \
+ -cp testserial:$REQUIRED_JARS:$DB_JAR:./dbtest.jar $c ; then
:
else
echo "FAIL: test program failed"
@@ -53,7 +55,8 @@ fi
for f in `find classes -name "*Test.class"`; do
c=`echo "$f" | sed -e 's/classes\///' -e 's/\.class//' -e 's/\//./g'`
echo "Running: $c"
- if java -cp $REQUIRED_JARS:$DB_JAR:./dbtest.jar $c ; then
+ if java -Djava.library.path=$DB_LIB_DIR \
+ -cp $REQUIRED_JARS:$DB_JAR:./dbtest.jar $c ; then
:
else
echo "FAIL: test program failed"
diff --git a/db/test/scr024/coverage/build.xml b/db/test/scr024/coverage/build.xml
index efbc6abc6..8b69b2bc2 100644
--- a/db/test/scr024/coverage/build.xml
+++ b/db/test/scr024/coverage/build.xml
@@ -1,4 +1,4 @@
-<!-- $Id: build.xml,v 1.18 2004/09/22 16:17:13 mark Exp $ -->
+<!-- $Id: build.xml,v 12.2 2006/06/09 14:32:17 mark Exp $ -->
<project name="clover" default="test" basedir=".">
<property name="db" location="../../.."/>
@@ -7,7 +7,7 @@
<property name="examples.src" location="${db}/examples_java/src"/>
<property name="testserialdir" value="testserial"/>
<property name="clover.initstring" location="reports/clover.db"/>
- <property name="clover.excludes" value="**/test/** com/sleepycat/examples/** com/sleepycat/db/**"/>
+ <property name="clover.excludes" value="**/test/** collections/** db/** com/sleepycat/db/**"/>
<!--
<property name="build.compiler"
value="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/>
@@ -38,20 +38,18 @@
</path>
<target name="build" depends="init">
- <javac destdir="classes" debug="on">
+ <javac destdir="classes" debug="on" source="1.3">
<src path="${src}"/>
<src path="${test.src}"/>
<src path="${examples.src}"/>
<exclude name="com/sleepycat/**/release/**"/>
- <exclude name="com/sleepycat/examples/bdb/**"/>
- <exclude name="com/sleepycat/bdb/**"/>
<exclude name="com/sleepycat/xa/**"/>
</javac>
<property name="testserialpath"
value="com/sleepycat/collections/test/serial/TestSerial"/>
<copy file="${test.src}/${testserialpath}.java.original"
tofile="${testserialdir}/${testserialpath}.java"/>
- <javac destdir="${testserialdir}" debug="on"
+ <javac destdir="${testserialdir}" debug="on" source="1.3"
includeAntRuntime="true" srcdir="${testserialdir}">
<include name="${testserialpath}.java"/>
</javac>
@@ -77,6 +75,7 @@
showoutput="on">
<formatter type="xml"/>
<classpath refid="classpath"/>
+ <sysproperty key="longtest" value="${longtest}"/>
<batchtest todir="reports">
<fileset dir="classes" includes="**/*Test.class"/>
</batchtest>
@@ -115,7 +114,7 @@
<echo message=""/>
<echo message="=== HelloDatabaseWorld ==="/>
<java dir="." fork="yes" classpathref="classpath"
- classname="com.sleepycat.examples.collections.hello.HelloDatabaseWorld"/>
+ classname="collections.hello.HelloDatabaseWorld"/>
</target>
<target name="one_shipment_example">
@@ -123,7 +122,7 @@
<delete dir="tmp"/>
<mkdir dir="tmp"/>
<java dir="." fork="yes" classpathref="classpath"
- classname="com.sleepycat.examples.collections.ship.${param_name}.Sample"/>
+ classname="collections.ship.${param_name}.Sample"/>
</target>
<!-- Using fork="yes" does not work for AccessExample, apparently because
@@ -133,7 +132,7 @@
<target name="access_example" depends="build">
<echo message="=== AccessExample ==="/>
<java classpathref="classpath"
- classname="com.sleepycat.examples.collections.access.AccessExample">
+ classname="collections.access.AccessExample">
</java>
</target>
diff --git a/db/test/scr024/src/com/sleepycat/bind/serial/test/MarshalledObject.java b/db/test/scr024/src/com/sleepycat/bind/serial/test/MarshalledObject.java
index bbec97630..ee7b13b7d 100644
--- a/db/test/scr024/src/com/sleepycat/bind/serial/test/MarshalledObject.java
+++ b/db/test/scr024/src/com/sleepycat/bind/serial/test/MarshalledObject.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MarshalledObject.java,v 1.2 2004/06/04 18:26:00 mark Exp $
+ * $Id: MarshalledObject.java,v 12.4 2006/08/24 14:46:43 bostic Exp $
*/
package com.sleepycat.bind.serial.test;
@@ -125,4 +125,3 @@ public class MarshalledObject
}
}
}
-
diff --git a/db/test/scr024/src/com/sleepycat/bind/serial/test/NullClassCatalog.java b/db/test/scr024/src/com/sleepycat/bind/serial/test/NullClassCatalog.java
index f59ab7616..eda415e8c 100644
--- a/db/test/scr024/src/com/sleepycat/bind/serial/test/NullClassCatalog.java
+++ b/db/test/scr024/src/com/sleepycat/bind/serial/test/NullClassCatalog.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: NullClassCatalog.java,v 1.4 2004/09/22 18:01:06 bostic Exp $
+ * $Id: NullClassCatalog.java,v 12.4 2006/08/24 14:46:43 bostic Exp $
*/
package com.sleepycat.bind.serial.test;
diff --git a/db/test/scr024/src/com/sleepycat/bind/serial/test/SerialBindingTest.java b/db/test/scr024/src/com/sleepycat/bind/serial/test/SerialBindingTest.java
index 67c01cf4d..29f05419c 100644
--- a/db/test/scr024/src/com/sleepycat/bind/serial/test/SerialBindingTest.java
+++ b/db/test/scr024/src/com/sleepycat/bind/serial/test/SerialBindingTest.java
@@ -1,14 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SerialBindingTest.java,v 1.3 2004/06/04 18:26:00 mark Exp $
+ * $Id: SerialBindingTest.java,v 12.5 2006/08/24 14:46:43 bostic Exp $
*/
package com.sleepycat.bind.serial.test;
+import java.io.Serializable;
+
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
@@ -21,6 +23,7 @@ import com.sleepycat.bind.serial.TupleSerialMarshalledBinding;
import com.sleepycat.collections.test.DbTestUtil;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.util.ExceptionUnwrapper;
+import com.sleepycat.util.FastOutputStream;
/**
* @author Mark Hayes
@@ -30,7 +33,6 @@ public class SerialBindingTest extends TestCase {
private ClassCatalog catalog;
private DatabaseEntry buffer;
private DatabaseEntry keyBuffer;
- private DatabaseEntry indexKeyBuffer;
public static void main(String[] args)
throws Exception {
@@ -63,7 +65,6 @@ public class SerialBindingTest extends TestCase {
catalog = new TestClassCatalog();
buffer = new DatabaseEntry();
keyBuffer = new DatabaseEntry();
- indexKeyBuffer = new DatabaseEntry();
}
public void tearDown() {
@@ -72,7 +73,6 @@ public class SerialBindingTest extends TestCase {
catalog = null;
buffer = null;
keyBuffer = null;
- indexKeyBuffer = null;
}
public void runTest()
@@ -168,6 +168,77 @@ public class SerialBindingTest extends TestCase {
assertEquals("index2", val.getIndexKey2());
}
+ public void testBufferSize() {
+
+ CaptureSizeBinding binding =
+ new CaptureSizeBinding(catalog, String.class);
+
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertEquals(FastOutputStream.DEFAULT_INIT_SIZE, binding.bufSize);
+
+ binding.setSerialBufferSize(1000);
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertEquals(1000, binding.bufSize);
+ }
+
+ private static class CaptureSizeBinding extends SerialBinding {
+
+ int bufSize;
+
+ CaptureSizeBinding(ClassCatalog classCatalog, Class baseClass) {
+ super(classCatalog, baseClass);
+ }
+
+ public FastOutputStream getSerialOutput(Object object) {
+ FastOutputStream fos = super.getSerialOutput(object);
+ bufSize = fos.getBufferBytes().length;
+ return fos;
+ }
+ }
+
+ public void testBufferOverride() {
+
+ FastOutputStream out = new FastOutputStream(10);
+ CachedOutputBinding binding =
+ new CachedOutputBinding(catalog, String.class, out);
+
+ binding.used = false;
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertTrue(binding.used);
+
+ binding.used = false;
+ binding.objectToEntry("aaaaaaaaaaaaaaaaaaaaaa", buffer);
+ assertEquals("aaaaaaaaaaaaaaaaaaaaaa", binding.entryToObject(buffer));
+ assertTrue(binding.used);
+
+ binding.used = false;
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertTrue(binding.used);
+ }
+
+ private static class CachedOutputBinding extends SerialBinding {
+
+ FastOutputStream out;
+ boolean used;
+
+ CachedOutputBinding(ClassCatalog classCatalog,
+ Class baseClass,
+ FastOutputStream out) {
+ super(classCatalog, baseClass);
+ this.out = out;
+ }
+
+ public FastOutputStream getSerialOutput(Object object) {
+ out.reset();
+ used = true;
+ return out;
+ }
+ }
+
private static class MySerialSerialBinding extends SerialSerialBinding {
private MySerialSerialBinding(SerialBinding keyBinding,
@@ -203,5 +274,55 @@ public class SerialBindingTest extends TestCase {
}
}
}
-}
+ /**
+ * Tests that overriding SerialBinding.getClassLoader is possible. This is
+ * a crude test because to create a truly working class loader is a large
+ * undertaking.
+ */
+ public void testClassloaderOverride()
+ throws Exception {
+
+ DatabaseEntry entry = new DatabaseEntry();
+
+ SerialBinding binding = new CustomLoaderBinding
+ (catalog, null, new FailureClassLoader());
+
+ try {
+ binding.objectToEntry(new MyClass(), entry);
+ binding.entryToObject(entry);
+ fail();
+ } catch (RuntimeException e) {
+ assertTrue(e.getMessage().startsWith("expect failure"));
+ }
+ }
+
+ private static class CustomLoaderBinding extends SerialBinding {
+
+ private ClassLoader loader;
+
+ CustomLoaderBinding(ClassCatalog classCatalog,
+ Class baseClass,
+ ClassLoader loader) {
+
+ super(classCatalog, baseClass);
+ this.loader = loader;
+ }
+
+ public ClassLoader getClassLoader() {
+ return loader;
+ }
+ }
+
+ private static class FailureClassLoader extends ClassLoader {
+
+ public Class loadClass(String name)
+ throws ClassNotFoundException {
+
+ throw new RuntimeException("expect failure: " + name);
+ }
+ }
+
+ private static class MyClass implements Serializable {
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bind/serial/test/TestClassCatalog.java b/db/test/scr024/src/com/sleepycat/bind/serial/test/TestClassCatalog.java
index 9f9f5896a..77301de9f 100644
--- a/db/test/scr024/src/com/sleepycat/bind/serial/test/TestClassCatalog.java
+++ b/db/test/scr024/src/com/sleepycat/bind/serial/test/TestClassCatalog.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestClassCatalog.java,v 1.4 2004/09/15 21:49:47 mark Exp $
+ * $Id: TestClassCatalog.java,v 12.3 2006/08/24 14:46:43 bostic Exp $
*/
package com.sleepycat.bind.serial.test;
diff --git a/db/test/scr024/src/com/sleepycat/bind/test/BindingSpeedTest.java b/db/test/scr024/src/com/sleepycat/bind/test/BindingSpeedTest.java
index 3f2d86a35..df1a8c8e9 100644
--- a/db/test/scr024/src/com/sleepycat/bind/test/BindingSpeedTest.java
+++ b/db/test/scr024/src/com/sleepycat/bind/test/BindingSpeedTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: BindingSpeedTest.java,v 1.4 2004/08/02 18:53:08 mjc Exp $
+ * $Id: BindingSpeedTest.java,v 12.5 2006/09/12 00:37:27 alexg Exp $
*/
package com.sleepycat.bind.test;
@@ -18,6 +18,8 @@ import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.io.Writer;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import javax.xml.parsers.SAXParserFactory;
@@ -47,6 +49,8 @@ public class BindingSpeedTest extends TestCase {
static final String JAVA_EXTERNALIZABLE = "java-externalizable".intern();
static final String XML_SAX = "xml-sax".intern();
static final String TUPLE = "tuple".intern();
+ static final String REFLECT_METHOD = "reflectMethod".intern();
+ static final String REFLECT_FIELD = "reflectField".intern();
static final int RUN_COUNT = 1000;
static final boolean VERBOSE = false;
@@ -72,6 +76,8 @@ public class BindingSpeedTest extends TestCase {
suite.addTest(new BindingSpeedTest(JAVA_EXTERNALIZABLE));
suite.addTest(new BindingSpeedTest(XML_SAX));
suite.addTest(new BindingSpeedTest(TUPLE));
+ suite.addTest(new BindingSpeedTest(REFLECT_METHOD));
+ suite.addTest(new BindingSpeedTest(REFLECT_FIELD));
return suite;
}
@@ -81,6 +87,9 @@ public class BindingSpeedTest extends TestCase {
private TestClassCatalog jtc;
private byte[] buf;
private XMLReader parser;
+ private Method[] getters;
+ private Method[] setters;
+ private Field[] fields;
public BindingSpeedTest(String name) {
@@ -94,6 +103,8 @@ public class BindingSpeedTest extends TestCase {
DbTestUtil.printTestName(getName());
boolean isTuple = false;
+ boolean isReflectMethod = false;
+ boolean isReflectField = false;
boolean isXmlSax = false;
boolean isSerial = false;
boolean isShared = false;
@@ -101,6 +112,10 @@ public class BindingSpeedTest extends TestCase {
if (command == TUPLE) {
isTuple = true;
+ } else if (command == REFLECT_METHOD) {
+ isReflectMethod = true;
+ } else if (command == REFLECT_FIELD) {
+ isReflectField = true;
} else if (command == XML_SAX) {
isXmlSax = true;
} else if (command == JAVA_UNSHARED) {
@@ -120,6 +135,10 @@ public class BindingSpeedTest extends TestCase {
if (isTuple) {
initTuple();
+ } else if (isReflectMethod) {
+ initReflectMethod();
+ } else if (isReflectField) {
+ initReflectField();
} else if (isXmlSax) {
initXmlSax();
} else if (isSerial) {
@@ -137,6 +156,10 @@ public class BindingSpeedTest extends TestCase {
if (isTuple) {
size = runTuple();
+ } else if (isReflectMethod) {
+ size = runReflectMethod();
+ } else if (isReflectField) {
+ size = runReflectField();
} else if (isXmlSax) {
size = runXmlSax();
} else if (isSerial) {
@@ -159,6 +182,10 @@ public class BindingSpeedTest extends TestCase {
for (int i = 0; i < RUN_COUNT; i += 1) {
if (isTuple) {
size = runTuple();
+ } else if (isReflectMethod) {
+ size = runReflectMethod();
+ } else if (isReflectField) {
+ size = runReflectField();
} else if (isXmlSax) {
size = runXmlSax();
} else if (isSerial) {
@@ -270,6 +297,91 @@ public class BindingSpeedTest extends TestCase {
return to.getBufferLength();
}
+ void initReflectMethod()
+ throws Exception {
+
+ initTuple();
+
+ Class cls = Data.class;
+
+ getters = new Method[5];
+ getters[0] = cls.getMethod("getField1", new Class[0]);
+ getters[1] = cls.getMethod("getField2", new Class[0]);
+ getters[2] = cls.getMethod("getField3", new Class[0]);
+ getters[3] = cls.getMethod("getField4", new Class[0]);
+ getters[4] = cls.getMethod("getField5", new Class[0]);
+
+ setters = new Method[5];
+ setters[0] = cls.getMethod("setField1", new Class[] {String.class});
+ setters[1] = cls.getMethod("setField2", new Class[] {String.class});
+ setters[2] = cls.getMethod("setField3", new Class[] {Integer.TYPE});
+ setters[3] = cls.getMethod("setField4", new Class[] {Integer.TYPE});
+ setters[4] = cls.getMethod("setField5", new Class[] {String.class});
+ }
+
+ int runReflectMethod()
+ throws Exception {
+
+ to.reset();
+ Data data = new Data();
+ to.writeString((String) getters[0].invoke(data, (Object[])null));
+ to.writeString((String) getters[1].invoke(data, (Object[])null));
+ to.writeInt(((Integer) getters[2].invoke(data, (Object[])null)).intValue());
+ to.writeInt(((Integer) getters[3].invoke(data, (Object[])null)).intValue());
+ to.writeString((String) getters[4].invoke(data, (Object[])null));
+
+ TupleInput ti = new TupleInput(
+ to.getBufferBytes(), to.getBufferOffset(),
+ to.getBufferLength());
+ data = new Data();
+ setters[0].invoke(data, new Object[] {ti.readString()});
+ setters[1].invoke(data, new Object[] {ti.readString()});
+ setters[2].invoke(data, new Object[] {new Integer(ti.readInt())});
+ setters[3].invoke(data, new Object[] {new Integer(ti.readInt())});
+ setters[4].invoke(data, new Object[] {ti.readString()});
+
+ return to.getBufferLength();
+ }
+
+ void initReflectField()
+ throws Exception {
+
+ initTuple();
+
+ Class cls = Data.class;
+
+ fields = new Field[5];
+ fields[0] = cls.getField("field1");
+ fields[1] = cls.getField("field2");
+ fields[2] = cls.getField("field3");
+ fields[3] = cls.getField("field4");
+ fields[4] = cls.getField("field5");
+ }
+
+ int runReflectField()
+ throws Exception {
+
+ to.reset();
+ Data data = new Data();
+ to.writeString((String) fields[0].get(data));
+ to.writeString((String) fields[1].get(data));
+ to.writeInt(((Integer) fields[2].get(data)).intValue());
+ to.writeInt(((Integer) fields[3].get(data)).intValue());
+ to.writeString((String) fields[4].get(data));
+
+ TupleInput ti = new TupleInput(
+ to.getBufferBytes(), to.getBufferOffset(),
+ to.getBufferLength());
+ data = new Data();
+ fields[0].set(data, ti.readString());
+ fields[1].set(data, ti.readString());
+ fields[2].set(data, new Integer(ti.readInt()));
+ fields[3].set(data, new Integer(ti.readInt()));
+ fields[4].set(data, ti.readString());
+
+ return to.getBufferLength();
+ }
+
void initXmlSax()
throws Exception {
@@ -325,11 +437,23 @@ public class BindingSpeedTest extends TestCase {
static class Data implements Serializable {
- String field1 = "field1";
- String field2 = "field2";
- int field3 = 333;
- int field4 = 444;
- String field5 = "field5";
+ public String field1 = "field1";
+ public String field2 = "field2";
+ public int field3 = 333;
+ public int field4 = 444;
+ public String field5 = "field5";
+
+ public String getField1() { return field1; }
+ public String getField2() { return field2; }
+ public int getField3() { return field3; }
+ public int getField4() { return field4; }
+ public String getField5() { return field5; }
+
+ public void setField1(String v) { field1 = v; }
+ public void setField2(String v) { field2 = v; }
+ public void setField3(int v) { field3 = v; }
+ public void setField4(int v) { field4 = v; }
+ public void setField5(String v) { field5 = v; }
void readTuple(TupleInput _input) {
diff --git a/db/test/scr024/src/com/sleepycat/bind/tuple/test/MarshalledObject.java b/db/test/scr024/src/com/sleepycat/bind/tuple/test/MarshalledObject.java
index d62b7b51f..3882a3d99 100644
--- a/db/test/scr024/src/com/sleepycat/bind/tuple/test/MarshalledObject.java
+++ b/db/test/scr024/src/com/sleepycat/bind/tuple/test/MarshalledObject.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: MarshalledObject.java,v 1.2 2004/06/04 18:26:00 mark Exp $
+ * $Id: MarshalledObject.java,v 12.3 2006/08/24 14:46:45 bostic Exp $
*/
package com.sleepycat.bind.tuple.test;
diff --git a/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleBindingTest.java b/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleBindingTest.java
index 675f4a003..f9d719da5 100644
--- a/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleBindingTest.java
+++ b/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleBindingTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleBindingTest.java,v 1.4 2004/06/29 06:06:19 mark Exp $
+ * $Id: TupleBindingTest.java,v 12.5 2006/08/24 14:46:45 bostic Exp $
*/
package com.sleepycat.bind.tuple.test;
@@ -23,6 +23,8 @@ import com.sleepycat.bind.tuple.FloatBinding;
import com.sleepycat.bind.tuple.IntegerBinding;
import com.sleepycat.bind.tuple.LongBinding;
import com.sleepycat.bind.tuple.ShortBinding;
+import com.sleepycat.bind.tuple.SortedDoubleBinding;
+import com.sleepycat.bind.tuple.SortedFloatBinding;
import com.sleepycat.bind.tuple.StringBinding;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.tuple.TupleInput;
@@ -32,6 +34,7 @@ import com.sleepycat.bind.tuple.TupleOutput;
import com.sleepycat.bind.tuple.TupleTupleMarshalledBinding;
import com.sleepycat.collections.test.DbTestUtil;
import com.sleepycat.db.DatabaseEntry;
+import com.sleepycat.util.FastOutputStream;
import com.sleepycat.util.ExceptionUnwrapper;
/**
@@ -41,7 +44,6 @@ public class TupleBindingTest extends TestCase {
private DatabaseEntry buffer;
private DatabaseEntry keyBuffer;
- private DatabaseEntry indexKeyBuffer;
public static void main(String[] args)
throws Exception {
@@ -73,7 +75,6 @@ public class TupleBindingTest extends TestCase {
DbTestUtil.printTestName("TupleBindingTest." + getName());
buffer = new DatabaseEntry();
keyBuffer = new DatabaseEntry();
- indexKeyBuffer = new DatabaseEntry();
}
public void tearDown() {
@@ -81,7 +82,6 @@ public class TupleBindingTest extends TestCase {
/* Ensure that GC can cleanup. */
buffer = null;
keyBuffer = null;
- indexKeyBuffer = null;
}
public void runTest()
@@ -94,37 +94,82 @@ public class TupleBindingTest extends TestCase {
}
}
- private void primitiveBindingTest(Object val, int byteSize) {
+ private void primitiveBindingTest(Class primitiveCls, Class compareCls,
+ Object val, int byteSize) {
- Class cls = val.getClass();
- EntryBinding binding = TupleBinding.getPrimitiveBinding(cls);
+ TupleBinding binding = TupleBinding.getPrimitiveBinding(primitiveCls);
+
+ /* Test standard object binding. */
binding.objectToEntry(val, buffer);
assertEquals(byteSize, buffer.getSize());
Object val2 = binding.entryToObject(buffer);
- assertSame(cls, val2.getClass());
+ assertSame(compareCls, val2.getClass());
assertEquals(val, val2);
- Object valWithWrongCls = (cls == String.class)
+ Object valWithWrongCls = (primitiveCls == String.class)
? ((Object) new Integer(0)) : ((Object) new String(""));
try {
binding.objectToEntry(valWithWrongCls, buffer);
}
catch (ClassCastException expected) {}
+
+ /* Test nested tuple binding. */
+
+ TupleOutput output = new TupleOutput();
+ output.writeString("abc");
+ binding.objectToEntry(val, output);
+ output.writeString("xyz");
+
+ TupleInput input = new TupleInput(output);
+ assertEquals("abc", input.readString());
+ Object val3 = binding.entryToObject(input);
+ assertEquals("xyz", input.readString());
+
+ assertEquals(0, input.available());
+ assertSame(compareCls, val3.getClass());
+ assertEquals(val, val3);
}
public void testPrimitiveBindings() {
- 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);
+ primitiveBindingTest(String.class, String.class,
+ "abc", 4);
+
+ primitiveBindingTest(Character.class, Character.class,
+ new Character('a'), 2);
+ primitiveBindingTest(Boolean.class, Boolean.class,
+ new Boolean(true), 1);
+ primitiveBindingTest(Byte.class, Byte.class,
+ new Byte((byte) 123), 1);
+ primitiveBindingTest(Short.class, Short.class,
+ new Short((short) 123), 2);
+ primitiveBindingTest(Integer.class, Integer.class,
+ new Integer(123), 4);
+ primitiveBindingTest(Long.class, Long.class,
+ new Long(123), 8);
+ primitiveBindingTest(Float.class, Float.class,
+ new Float(123.123), 4);
+ primitiveBindingTest(Double.class, Double.class,
+ new Double(123.123), 8);
+
+ primitiveBindingTest(Character.TYPE, Character.class,
+ new Character('a'), 2);
+ primitiveBindingTest(Boolean.TYPE, Boolean.class,
+ new Boolean(true), 1);
+ primitiveBindingTest(Byte.TYPE, Byte.class,
+ new Byte((byte) 123), 1);
+ primitiveBindingTest(Short.TYPE, Short.class,
+ new Short((short) 123), 2);
+ primitiveBindingTest(Integer.TYPE, Integer.class,
+ new Integer(123), 4);
+ primitiveBindingTest(Long.TYPE, Long.class,
+ new Long(123), 8);
+ primitiveBindingTest(Float.TYPE, Float.class,
+ new Float(123.123), 4);
+ primitiveBindingTest(Double.TYPE, Double.class,
+ new Double(123.123), 8);
DatabaseEntry entry = new DatabaseEntry();
@@ -194,6 +239,23 @@ public class TupleBindingTest extends TestCase {
new DoubleBinding().objectToEntry(new Double(123.123), entry);
assertEquals(8, entry.getData().length);
+
+
+ SortedFloatBinding.floatToEntry((float) 123.123, entry);
+ assertEquals(4, entry.getData().length);
+ assertTrue(((float) 123.123) ==
+ SortedFloatBinding.entryToFloat(entry));
+
+ new SortedFloatBinding().objectToEntry
+ (new Float((float) 123.123), entry);
+ assertEquals(4, entry.getData().length);
+
+ SortedDoubleBinding.doubleToEntry(123.123, entry);
+ assertEquals(8, entry.getData().length);
+ assertTrue(123.123 == SortedDoubleBinding.entryToDouble(entry));
+
+ new SortedDoubleBinding().objectToEntry(new Double(123.123), entry);
+ assertEquals(8, entry.getData().length);
}
public void testTupleInputBinding() {
@@ -250,5 +312,89 @@ public class TupleBindingTest extends TestCase {
assertEquals("index1", val.getIndexKey1());
assertEquals("index2", val.getIndexKey2());
}
-}
+ public void testBufferSize() {
+
+ CaptureSizeBinding binding = new CaptureSizeBinding();
+
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertEquals(FastOutputStream.DEFAULT_INIT_SIZE, binding.bufSize);
+
+ binding.setTupleBufferSize(1000);
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertEquals(1000, binding.bufSize);
+ }
+
+ private class CaptureSizeBinding extends TupleBinding {
+
+ int bufSize;
+
+ CaptureSizeBinding() {
+ super();
+ }
+
+ public TupleOutput getTupleOutput(Object object) {
+ TupleOutput out = super.getTupleOutput(object);
+ bufSize = out.getBufferBytes().length;
+ return out;
+ }
+
+ public Object entryToObject(TupleInput input) {
+ return input.readString();
+ }
+
+ public void objectToEntry(Object object, TupleOutput output) {
+ assertEquals(bufSize, output.getBufferBytes().length);
+ output.writeString((String) object);
+ }
+ }
+
+ public void testBufferOverride() {
+
+ TupleOutput out = new TupleOutput(new byte[10]);
+ CachedOutputBinding binding = new CachedOutputBinding(out);
+
+ binding.used = false;
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertTrue(binding.used);
+
+ binding.used = false;
+ binding.objectToEntry("aaaaaaaaaaaaaaaaaaaaaa", buffer);
+ assertEquals("aaaaaaaaaaaaaaaaaaaaaa", binding.entryToObject(buffer));
+ assertTrue(binding.used);
+
+ binding.used = false;
+ binding.objectToEntry("x", buffer);
+ assertEquals("x", binding.entryToObject(buffer));
+ assertTrue(binding.used);
+ }
+
+ private class CachedOutputBinding extends TupleBinding {
+
+ TupleOutput out;
+ boolean used;
+
+ CachedOutputBinding(TupleOutput out) {
+ super();
+ this.out = out;
+ }
+
+ public TupleOutput getTupleOutput(Object object) {
+ out.reset();
+ used = true;
+ return out;
+ }
+
+ public Object entryToObject(TupleInput input) {
+ return input.readString();
+ }
+
+ public void objectToEntry(Object object, TupleOutput output) {
+ assertSame(out, output);
+ output.writeString((String) object);
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleFormatTest.java b/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleFormatTest.java
index 29ecc9a29..3eb691631 100644
--- a/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleFormatTest.java
+++ b/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleFormatTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleFormatTest.java,v 1.3 2004/06/04 18:26:00 mark Exp $
+ * $Id: TupleFormatTest.java,v 12.5 2006/08/24 14:46:45 bostic Exp $
*/
package com.sleepycat.bind.tuple.test;
@@ -59,7 +59,7 @@ public class TupleFormatTest extends TestCase {
DbTestUtil.printTestName("TupleFormatTest." + getName());
buffer = new DatabaseEntry();
- out = TupleBinding.newOutput();
+ out = new TupleOutput();
}
public void tearDown() {
@@ -752,5 +752,121 @@ public class TupleFormatTest extends TestCase {
assertEquals(-1, in.readDouble(), 0);
assertEquals(0, in.available(), 0);
}
-}
+ private void sortedFloatTest(double val) {
+
+ out.reset();
+ out.writeSortedFloat((float) val);
+ assertEquals(4, out.size());
+ copyOutputToInput();
+ if (Double.isNaN(val)) {
+ assertTrue(Float.isNaN(in.readSortedFloat()));
+ } else {
+ assertEquals((float) val, in.readSortedFloat(), 0);
+ }
+ }
+
+ public void testSortedFloat() {
+
+ sortedFloatTest(0);
+ sortedFloatTest(1);
+ sortedFloatTest(-1);
+ sortedFloatTest(1.0);
+ sortedFloatTest(0.1);
+ sortedFloatTest(-1.0);
+ sortedFloatTest(-0.1);
+ sortedFloatTest(Float.NaN);
+ sortedFloatTest(Float.NEGATIVE_INFINITY);
+ sortedFloatTest(Float.POSITIVE_INFINITY);
+ sortedFloatTest(Short.MAX_VALUE);
+ sortedFloatTest(Short.MIN_VALUE);
+ sortedFloatTest(Integer.MAX_VALUE);
+ sortedFloatTest(Integer.MIN_VALUE);
+ sortedFloatTest(Long.MAX_VALUE);
+ sortedFloatTest(Long.MIN_VALUE);
+ sortedFloatTest(Float.MAX_VALUE);
+ sortedFloatTest(Float.MAX_VALUE + 1);
+ sortedFloatTest(Float.MIN_VALUE + 1);
+ sortedFloatTest(Float.MIN_VALUE);
+ sortedFloatTest(Float.MIN_VALUE - 1);
+ sortedFloatTest(0x7F);
+ sortedFloatTest(0xFF);
+ sortedFloatTest(0x7FFF);
+ sortedFloatTest(0xFFFF);
+ sortedFloatTest(0x7FFFFFFF);
+ sortedFloatTest(0xFFFFFFFF);
+ sortedFloatTest(0x7FFFFFFFFFFFFFFFL);
+ sortedFloatTest(0xFFFFFFFFFFFFFFFFL);
+
+ out.reset();
+ out.writeSortedFloat(0);
+ out.writeSortedFloat(1);
+ out.writeSortedFloat(-1);
+ assertEquals(3 * 4, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readSortedFloat(), 0);
+ assertEquals(1, in.readSortedFloat(), 0);
+ assertEquals(-1, in.readSortedFloat(), 0);
+ assertEquals(0, in.available(), 0);
+ }
+
+ private void sortedDoubleTest(double val) {
+
+ out.reset();
+ out.writeSortedDouble((double) val);
+ assertEquals(8, out.size());
+ copyOutputToInput();
+ if (Double.isNaN(val)) {
+ assertTrue(Double.isNaN(in.readSortedDouble()));
+ } else {
+ assertEquals((double) val, in.readSortedDouble(), 0);
+ }
+ }
+
+ public void testSortedDouble() {
+
+ sortedDoubleTest(0);
+ sortedDoubleTest(1);
+ sortedDoubleTest(-1);
+ sortedDoubleTest(1.0);
+ sortedDoubleTest(0.1);
+ sortedDoubleTest(-1.0);
+ sortedDoubleTest(-0.1);
+ sortedDoubleTest(Double.NaN);
+ sortedDoubleTest(Double.NEGATIVE_INFINITY);
+ sortedDoubleTest(Double.POSITIVE_INFINITY);
+ sortedDoubleTest(Short.MAX_VALUE);
+ sortedDoubleTest(Short.MIN_VALUE);
+ sortedDoubleTest(Integer.MAX_VALUE);
+ sortedDoubleTest(Integer.MIN_VALUE);
+ sortedDoubleTest(Long.MAX_VALUE);
+ sortedDoubleTest(Long.MIN_VALUE);
+ sortedDoubleTest(Float.MAX_VALUE);
+ sortedDoubleTest(Float.MIN_VALUE);
+ sortedDoubleTest(Double.MAX_VALUE - 1);
+ sortedDoubleTest(Double.MAX_VALUE);
+ sortedDoubleTest(Double.MAX_VALUE + 1);
+ sortedDoubleTest(Double.MIN_VALUE + 1);
+ sortedDoubleTest(Double.MIN_VALUE);
+ sortedDoubleTest(Double.MIN_VALUE - 1);
+ sortedDoubleTest(0x7F);
+ sortedDoubleTest(0xFF);
+ sortedDoubleTest(0x7FFF);
+ sortedDoubleTest(0xFFFF);
+ sortedDoubleTest(0x7FFFFFFF);
+ sortedDoubleTest(0xFFFFFFFF);
+ sortedDoubleTest(0x7FFFFFFFFFFFFFFFL);
+ sortedDoubleTest(0xFFFFFFFFFFFFFFFFL);
+
+ out.reset();
+ out.writeSortedDouble(0);
+ out.writeSortedDouble(1);
+ out.writeSortedDouble(-1);
+ assertEquals(3 * 8, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readSortedDouble(), 0);
+ assertEquals(1, in.readSortedDouble(), 0);
+ assertEquals(-1, in.readSortedDouble(), 0);
+ assertEquals(0, in.available(), 0);
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleOrderingTest.java b/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleOrderingTest.java
index 5e8961f4c..218c4ceef 100644
--- a/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleOrderingTest.java
+++ b/db/test/scr024/src/com/sleepycat/bind/tuple/test/TupleOrderingTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TupleOrderingTest.java,v 1.4 2004/09/22 18:01:06 bostic Exp $
+ * $Id: TupleOrderingTest.java,v 12.6 2006/08/24 14:46:45 bostic Exp $
*/
package com.sleepycat.bind.tuple.test;
@@ -13,7 +13,6 @@ import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
-import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.tuple.TupleOutput;
import com.sleepycat.collections.test.DbTestUtil;
@@ -53,7 +52,7 @@ public class TupleOrderingTest extends TestCase {
public void setUp() {
DbTestUtil.printTestName("TupleOrderingTest." + getName());
- out = TupleBinding.newOutput();
+ out = new TupleOutput();
prevBuf = null;
}
@@ -322,13 +321,16 @@ public class TupleOrderingTest extends TestCase {
// Only positive floats and doubles are ordered deterministically
final float[] DATA = {
- 0, (float) 0.01, (float) 0.02, (float) 0.99,
+ 0, Float.MIN_VALUE, 2 * Float.MIN_VALUE,
+ (float) 0.01, (float) 0.02, (float) 0.99,
1, (float) 1.01, (float) 1.02, (float) 1.99,
Byte.MAX_VALUE - 1, Byte.MAX_VALUE,
Short.MAX_VALUE - 1, Short.MAX_VALUE,
Integer.MAX_VALUE,
Long.MAX_VALUE / 2, Long.MAX_VALUE,
Float.MAX_VALUE,
+ Float.POSITIVE_INFINITY,
+ Float.NaN,
};
for (int i = 0; i < DATA.length; i += 1) {
out.writeFloat(DATA[i]);
@@ -341,17 +343,119 @@ public class TupleOrderingTest extends TestCase {
// Only positive floats and doubles are ordered deterministically
final double[] DATA = {
- 0, 0.001, 0.002, 0.999,
+ 0, Double.MIN_VALUE, 2 * Double.MIN_VALUE,
+ 0.001, 0.002, 0.999,
1, 1.001, 1.002, 1.999,
Byte.MAX_VALUE - 1, Byte.MAX_VALUE,
Short.MAX_VALUE - 1, Short.MAX_VALUE,
Integer.MAX_VALUE - 1, Integer.MAX_VALUE,
Long.MAX_VALUE / 2, Long.MAX_VALUE,
Float.MAX_VALUE, Double.MAX_VALUE,
+ Double.POSITIVE_INFINITY,
+ Double.NaN,
};
for (int i = 0; i < DATA.length; i += 1) {
out.writeDouble(DATA[i]);
check(i);
}
}
+
+ public void testSortedFloat() {
+
+ final float[] DATA = {
+ Float.NEGATIVE_INFINITY,
+ (- Float.MAX_VALUE),
+ Long.MIN_VALUE,
+ Long.MIN_VALUE / 2,
+ Integer.MIN_VALUE,
+ Short.MIN_VALUE,
+ Short.MIN_VALUE + 1,
+ Byte.MIN_VALUE,
+ Byte.MIN_VALUE + 1,
+ (float) -1.99,
+ (float) -1.02,
+ (float) -1.01,
+ -1,
+ (float) -0.99,
+ (float) -0.02,
+ (float) -0.01,
+ 2 * (- Float.MIN_VALUE),
+ (- Float.MIN_VALUE),
+ 0,
+ Float.MIN_VALUE,
+ 2 * Float.MIN_VALUE,
+ (float) 0.01,
+ (float) 0.02,
+ (float) 0.99,
+ 1,
+ (float) 1.01,
+ (float) 1.02,
+ (float) 1.99,
+ Byte.MAX_VALUE - 1,
+ Byte.MAX_VALUE,
+ Short.MAX_VALUE - 1,
+ Short.MAX_VALUE,
+ Integer.MAX_VALUE,
+ Long.MAX_VALUE / 2,
+ Long.MAX_VALUE,
+ Float.MAX_VALUE,
+ Float.POSITIVE_INFINITY,
+ Float.NaN,
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeSortedFloat(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testSortedDouble() {
+
+ final double[] DATA = {
+ Double.NEGATIVE_INFINITY,
+ (- Double.MAX_VALUE),
+ (- Float.MAX_VALUE),
+ Long.MIN_VALUE,
+ Long.MIN_VALUE / 2,
+ Integer.MIN_VALUE,
+ Short.MIN_VALUE,
+ Short.MIN_VALUE + 1,
+ Byte.MIN_VALUE,
+ Byte.MIN_VALUE + 1,
+ -1.999,
+ -1.002,
+ -1.001,
+ -1,
+ -0.999,
+ -0.002,
+ -0.001,
+ 2 * (- Double.MIN_VALUE),
+ (- Double.MIN_VALUE),
+ 0,
+ Double.MIN_VALUE,
+ 2 * Double.MIN_VALUE,
+ 0.001,
+ 0.002,
+ 0.999,
+ 1,
+ 1.001,
+ 1.002,
+ 1.999,
+ Byte.MAX_VALUE - 1,
+ Byte.MAX_VALUE,
+ Short.MAX_VALUE - 1,
+ Short.MAX_VALUE,
+ Integer.MAX_VALUE - 1,
+ Integer.MAX_VALUE,
+ Long.MAX_VALUE / 2,
+ Long.MAX_VALUE,
+ Float.MAX_VALUE,
+ Double.MAX_VALUE,
+ Double.POSITIVE_INFINITY,
+ Double.NaN,
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeSortedDouble(DATA[i]);
+ check(i);
+ }
+ }
}
diff --git a/db/test/scr024/src/com/sleepycat/collections/KeyRangeTest.java b/db/test/scr024/src/com/sleepycat/collections/KeyRangeTest.java
index 9e2abb853..573585919 100644
--- a/db/test/scr024/src/com/sleepycat/collections/KeyRangeTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/KeyRangeTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: KeyRangeTest.java,v 1.4 2004/09/22 18:01:06 bostic Exp $
+ * $Id: KeyRangeTest.java,v 12.5 2006/08/24 14:46:45 bostic Exp $
*/
package com.sleepycat.collections;
@@ -27,6 +27,8 @@ import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.db.OperationStatus;
+import com.sleepycat.util.keyrange.KeyRange;
+import com.sleepycat.util.keyrange.KeyRangeException;
/**
* @author Mark Hayes
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/CollectionTest.java b/db/test/scr024/src/com/sleepycat/collections/test/CollectionTest.java
index fe39ddc17..fdea67576 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/CollectionTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/CollectionTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: CollectionTest.java,v 1.3 2004/09/22 18:01:06 bostic Exp $
+ * $Id: CollectionTest.java,v 12.6 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -12,6 +12,7 @@ package com.sleepycat.collections.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -28,7 +29,6 @@ import junit.framework.TestSuite;
import com.sleepycat.bind.EntityBinding;
import com.sleepycat.bind.EntryBinding;
-import com.sleepycat.collections.CurrentTransaction;
import com.sleepycat.collections.MapEntryParameter;
import com.sleepycat.collections.StoredCollection;
import com.sleepycat.collections.StoredCollections;
@@ -61,13 +61,22 @@ public class CollectionTest extends TestCase {
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
+ /*
+ * For long tests we permute testStoredIterator to test both StoredIterator
+ * and BlockIterator. When testing BlockIterator, we permute the maxKey
+ * over the array values below. BlockIterator's block size is 10. So we
+ * test below the block size (6), at the block size (10), and above it (14
+ * and 22).
+ */
+ private static final int DEFAULT_MAX_KEY = 6;
+ private static final int[] MAX_KEYS = {6, 10, 14, 22};
+ private boolean testStoredIterator;
+ private int maxKey; /* Must be a multiple of 2. */
private int beginKey = 1;
- private int endKey = MAX_KEY;
+ private int endKey;
private Environment env;
- private CurrentTransaction currentTxn;
private Database store;
private Database index;
private boolean isEntityBinding;
@@ -144,6 +153,41 @@ public class CollectionTest extends TestCase {
static Test suite(String[] args)
throws Exception {
+ if ("true".equals(System.getProperty("longtest"))) {
+ TestSuite suite = new TestSuite();
+
+ /* StoredIterator tests. */
+ permuteTests(args, suite, true, DEFAULT_MAX_KEY);
+
+ /* BlockIterator tests with different maxKey values. */
+ for (int i = 0; i < MAX_KEYS.length; i += 1) {
+ permuteTests(args, suite, false, MAX_KEYS[i]);
+ }
+
+ return suite;
+ } else {
+ return baseSuite(args);
+ }
+ }
+
+ private static void permuteTests(String[] args,
+ TestSuite suite,
+ boolean storedIter,
+ int maxKey)
+ throws Exception {
+
+ TestSuite baseTests = baseSuite(args);
+ Enumeration e = baseTests.tests();
+ while (e.hasMoreElements()) {
+ CollectionTest t = (CollectionTest) e.nextElement();
+ t.setParams(storedIter, maxKey);
+ suite.addTest(t);
+ }
+ }
+
+ private static TestSuite baseSuite(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) {
@@ -154,7 +198,7 @@ public class CollectionTest extends TestCase {
TestEnv.ALL[i], TestStore.ALL[j],
entityBinding, false));
- if (TestEnv.ALL[i] == TestEnv.TXN) {
+ if (TestEnv.ALL[i].isTxnMode()) {
addTest(args, suite, new CollectionTest(
TestEnv.ALL[i], TestStore.ALL[j],
entityBinding, true));
@@ -194,9 +238,25 @@ public class CollectionTest extends TestCase {
valueBinding = testStore.getValueBinding();
entityBinding = testStore.getEntityBinding();
+ setParams(false, DEFAULT_MAX_KEY);
+ }
+
+ private void setParams(boolean storedIter, int maxKey) {
+
+ this.testStoredIterator = storedIter;
+ this.maxKey = maxKey;
+ this.endKey = maxKey;
+
testName = testEnv.getName() + '-' + testStore.getName() +
(isEntityBinding ? "-entity" : "-value") +
- (isAutoCommit ? "-autocommit" : "");
+ (isAutoCommit ? "-autoCommit" : "") +
+ (testStoredIterator ? "-storedIter" : "") +
+ ((maxKey != DEFAULT_MAX_KEY) ? ("-maxKey-" + maxKey) : "");
+ }
+
+ public void tearDown()
+ throws Exception {
+
setName(testName);
}
@@ -206,14 +266,13 @@ public class CollectionTest extends TestCase {
DbTestUtil.printTestName(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 normalRunner = newTransactionRunner(env);
normalRunner.setAllowNestedTransactions(
DbCompat.NESTED_TRANSACTIONS);
TransactionRunner nullRunner = new NullTransactionRunner(env);
@@ -267,7 +326,6 @@ public class CollectionTest extends TestCase {
index = null;
store = null;
env = null;
- currentTxn = null;
readRunner = null;
writeRunner = null;
writeIterRunner = null;
@@ -286,7 +344,16 @@ public class CollectionTest extends TestCase {
}
}
- void testCreation(StoredContainer cont)
+ /**
+ * Is overridden in XACollectionTest.
+ */
+ protected TransactionRunner newTransactionRunner(Environment env)
+ throws DatabaseException {
+
+ return new TransactionRunner(env);
+ }
+
+ void testCreation(StoredContainer cont, int expectSize)
throws Exception {
assertEquals(index != null, cont.isSecondary());
@@ -294,12 +361,8 @@ public class CollectionTest extends TestCase {
assertEquals(testStore.areKeysRenumbered(), cont.areKeysRenumbered());
assertEquals(testStore.areDuplicatesAllowed(),
cont.areDuplicatesAllowed());
- assertEquals(testEnv == TestEnv.TXN, cont.isTransactional());
- try {
- cont.size();
- fail();
- }
- catch (UnsupportedOperationException expected) {}
+ assertEquals(testEnv.isTxnMode(), cont.isTransactional());
+ assertEquals(expectSize, cont.size());
}
void testMapCreation(Map map)
@@ -372,9 +435,9 @@ public class CollectionTest extends TestCase {
} catch (IllegalArgumentException expected) {}
}
- testCreation(map);
+ testCreation(map, 0);
if (list != null) {
- testCreation(list);
+ testCreation(list, 0);
assertNotNull(smap);
}
testMapCreation(map);
@@ -455,12 +518,12 @@ public class CollectionTest extends TestCase {
catch (IllegalArgumentException expected) {}
}
- testCreation(map);
- testCreation((StoredContainer) map.values());
- testCreation((StoredContainer) map.keySet());
- testCreation((StoredContainer) map.entrySet());
+ testCreation(map, maxKey);
+ testCreation((StoredContainer) map.values(), maxKey);
+ testCreation((StoredContainer) map.keySet(), maxKey);
+ testCreation((StoredContainer) map.entrySet(), maxKey);
if (list != null) {
- testCreation(list);
+ testCreation(list, maxKey);
assertNotNull(smap);
}
testMapCreation(map);
@@ -519,18 +582,18 @@ public class CollectionTest extends TestCase {
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, maxKey);
+ readWriteRange(HEAD, 1, maxKey);
+ readWriteRange(TAIL, 1, maxKey);
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, 2, maxKey);
+ readWriteRange(TAIL, 2, maxKey);
+ readWriteRange(SUB, maxKey, maxKey);
+ readWriteRange(TAIL, maxKey, maxKey);
+ readWriteRange(SUB, maxKey + 1, maxKey + 1);
+ readWriteRange(TAIL, maxKey + 1, maxKey + 1);
readWriteRange(SUB, 0, 0);
readWriteRange(HEAD, 0, 0);
}
@@ -573,13 +636,22 @@ public class CollectionTest extends TestCase {
}
}
+ Iterator iterator(Collection storedCollection) {
+
+ if (testStoredIterator) {
+ return ((StoredCollection) storedCollection).storedIterator();
+ } else {
+ return storedCollection.iterator();
+ }
+ }
+
void addAll()
throws Exception {
writeRunner.run(new TransactionWorker() {
public void doWork() throws Exception {
assertTrue(imap.isEmpty());
- Iterator iter = imap.entrySet().iterator();
+ Iterator iter = iterator(imap.entrySet());
try {
assertTrue(!iter.hasNext());
} finally {
@@ -681,7 +753,7 @@ public class CollectionTest extends TestCase {
updateIter(map.entrySet());
updateIter(map.values());
if (beginKey <= endKey) {
- ListIterator iter = (ListIterator) map.keySet().iterator();
+ ListIterator iter = (ListIterator) iterator(map.keySet());
try {
assertNotNull(iter.next());
iter.set(makeKey(beginKey));
@@ -703,7 +775,7 @@ public class CollectionTest extends TestCase {
writeIterRunner.run(new TransactionWorker() {
public void doWork() throws Exception {
- ListIterator iter = (ListIterator) coll.iterator();
+ ListIterator iter = (ListIterator) iterator(coll);
try {
for (int i = beginKey; i <= endKey; i += 1) {
assertTrue(iter.hasNext());
@@ -796,9 +868,9 @@ public class CollectionTest extends TestCase {
ListIterator iter = null;
try {
if (list != null) {
- iter = list.listIterator();
+ iter = (ListIterator) iterator(list);
} else {
- iter = (ListIterator) map.values().iterator();
+ iter = (ListIterator) iterator(map.values());
}
iteratorSetAndRemoveNotAllowed(iter);
@@ -934,7 +1006,7 @@ public class CollectionTest extends TestCase {
writeIterRunner.run(new TransactionWorker() {
public void doWork() throws Exception {
- Iterator iter = map.keySet().iterator();
+ Iterator iter = iterator(map.keySet());
try {
for (int i = beginKey; i <= endKey; i += 1) {
assertTrue(iter.hasNext());
@@ -1127,7 +1199,6 @@ public class CollectionTest extends TestCase {
assertTrue(list.isEmpty());
for (int i = beginKey; i <= endKey; i += 1) {
int idx = i - beginKey;
- Object val = makeVal(i);
assertNull(list.get(idx));
}
}
@@ -1139,7 +1210,7 @@ public class CollectionTest extends TestCase {
writeIterRunner.run(new TransactionWorker() {
public void doWork() throws Exception {
- ListIterator i = list.listIterator();
+ ListIterator i = (ListIterator) iterator(list);
try {
assertTrue(!i.hasNext());
i.add(makeVal(3));
@@ -1191,7 +1262,7 @@ public class CollectionTest extends TestCase {
public void doWork() throws Exception {
assertNull(imap.put(makeKey(1), makeVal(1)));
ListIterator i =
- (ListIterator) imap.duplicates(makeKey(1)).iterator();
+ (ListIterator) iterator(imap.duplicates(makeKey(1)));
try {
if (imap.areDuplicatesOrdered()) {
i.add(makeVal(1, 4));
@@ -1266,7 +1337,7 @@ public class CollectionTest extends TestCase {
Set set = map.entrySet();
assertNotNull(set.toString());
assertEquals(beginKey > endKey, set.isEmpty());
- Iterator iter = set.iterator();
+ Iterator iter = iterator(set);
try {
for (int i = beginKey; i <= endKey; i += 1) {
assertTrue(iter.hasNext());
@@ -1295,25 +1366,27 @@ public class CollectionTest extends TestCase {
assertEquals(makeVal(i), entry.getValue());
}
}
- readIterator(set, set.iterator(), beginKey, endKey);
+ readIterator(set, iterator(set), 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);
+ readIterator(sset,
+ iterator(sset.subSet(mapEntry(1),
+ mapEntry(2))),
+ 1, 1);
}
if (beginKey <= 2 && endKey >= 2) {
- readIterator(sset, sset.subSet(mapEntry(2),
- mapEntry(3))
- .iterator(), 2, 2);
+ readIterator(sset,
+ iterator(sset.subSet(mapEntry(2),
+ mapEntry(3))),
+ 2, 2);
}
if (beginKey <= endKey) {
- readIterator(sset, sset.subSet(
- mapEntry(endKey),
- mapEntry(endKey + 1))
- .iterator(),
- endKey, endKey);
+ readIterator(sset,
+ iterator(sset.subSet
+ (mapEntry(endKey),
+ mapEntry(endKey + 1))),
+ endKey, endKey);
}
if (isSubMap()) {
if (beginKey <= endKey) {
@@ -1333,15 +1406,15 @@ public class CollectionTest extends TestCase {
}
}
} 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);
+ readIterator(sset,
+ iterator(sset.subSet
+ (mapEntry(endKey + 1),
+ mapEntry(endKey + 2))),
+ endKey, endKey - 1);
+ readIterator(sset,
+ iterator(sset.subSet(mapEntry(0),
+ mapEntry(1))),
+ 0, -1);
}
}
@@ -1350,7 +1423,7 @@ public class CollectionTest extends TestCase {
set = map.keySet();
assertNotNull(set.toString());
assertEquals(beginKey > endKey, set.isEmpty());
- iter = set.iterator();
+ iter = iterator(set);
try {
for (int i = beginKey; i <= endKey; i += 1) {
assertTrue(iter.hasNext());
@@ -1376,14 +1449,14 @@ public class CollectionTest extends TestCase {
assertEquals(makeKey(i), key);
}
}
- readIterator(set, set.iterator(), beginKey, endKey);
+ readIterator(set, iterator(set), beginKey, endKey);
// values
Collection coll = map.values();
assertNotNull(coll.toString());
assertEquals(beginKey > endKey, coll.isEmpty());
- iter = coll.iterator();
+ iter = iterator(coll);
try {
for (int i = beginKey; i <= endKey; i += 1) {
assertTrue(iter.hasNext());
@@ -1406,7 +1479,7 @@ public class CollectionTest extends TestCase {
assertEquals(makeVal(i), val);
}
}
- readIterator(coll, coll.iterator(), beginKey, endKey);
+ readIterator(coll, iterator(coll), beginKey, endKey);
// list
@@ -1421,7 +1494,7 @@ public class CollectionTest extends TestCase {
assertEquals(idx, list.indexOf(val));
assertEquals(idx, list.lastIndexOf(val));
}
- ListIterator li = list.listIterator();
+ ListIterator li = (ListIterator) iterator(list);
try {
for (int i = beginKey; i <= endKey; i += 1) {
int idx = i - beginKey;
@@ -1459,14 +1532,14 @@ public class CollectionTest extends TestCase {
assertNotNull(val);
assertEquals(makeVal(i), val);
}
- readIterator(list, list.iterator(), beginKey, endKey);
+ readIterator(list, iterator(list), beginKey, endKey);
}
// first/last
if (smap != null) {
if (beginKey <= endKey &&
- beginKey >= 1 && beginKey <= MAX_KEY) {
+ beginKey >= 1 && beginKey <= maxKey) {
assertEquals(makeKey(beginKey),
smap.firstKey());
assertEquals(makeKey(beginKey),
@@ -1487,7 +1560,7 @@ public class CollectionTest extends TestCase {
}
}
if (beginKey <= endKey &&
- endKey >= 1 && endKey <= MAX_KEY) {
+ endKey >= 1 && endKey <= maxKey) {
assertEquals(makeKey(endKey),
smap.lastKey());
assertEquals(makeKey(endKey),
@@ -1550,7 +1623,7 @@ public class CollectionTest extends TestCase {
Set set = map.entrySet();
assertEquals(beginKey > endKey, set.isEmpty());
- Iterator iter = set.iterator();
+ Iterator iter = iterator(set);
try {
for (int i = readBegin; i <= readEnd; i += readIncr) {
assertTrue(iter.hasNext());
@@ -1572,7 +1645,7 @@ public class CollectionTest extends TestCase {
set = map.keySet();
assertEquals(beginKey > endKey, set.isEmpty());
- iter = set.iterator();
+ iter = iterator(set);
try {
for (int i = readBegin; i <= readEnd; i += readIncr) {
assertTrue(iter.hasNext());
@@ -1593,7 +1666,7 @@ public class CollectionTest extends TestCase {
Collection coll = map.values();
assertEquals(beginKey > endKey, coll.isEmpty());
- iter = coll.iterator();
+ iter = iterator(coll);
try {
for (int i = readBegin; i <= readEnd; i += readIncr) {
assertTrue(iter.hasNext());
@@ -1615,7 +1688,7 @@ public class CollectionTest extends TestCase {
if (smap != null) {
if (readBegin <= readEnd &&
- readBegin >= 1 && readBegin <= MAX_KEY) {
+ readBegin >= 1 && readBegin <= maxKey) {
assertEquals(makeKey(readBegin),
smap.firstKey());
assertEquals(makeKey(readBegin),
@@ -1636,7 +1709,7 @@ public class CollectionTest extends TestCase {
}
}
if (readBegin <= readEnd &&
- readEnd >= 1 && readEnd <= MAX_KEY) {
+ readEnd >= 1 && readEnd <= maxKey) {
assertEquals(makeKey(readEnd),
smap.lastKey());
assertEquals(makeKey(readEnd),
@@ -1672,7 +1745,7 @@ public class CollectionTest extends TestCase {
int readIncr = 2;
assertEquals(beginKey > endKey, list.isEmpty());
- ListIterator iter = list.listIterator();
+ ListIterator iter = (ListIterator) iterator(list);
try {
int idx = 0;
for (int i = readBegin; i <= readEnd; i += readIncr) {
@@ -1718,7 +1791,6 @@ public class CollectionTest extends TestCase {
}
}
// 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());
@@ -1731,7 +1803,7 @@ public class CollectionTest extends TestCase {
assertEquals(idx, li.previousIndex());
}
values[i - beginValue] = value;
- if (si.getCollection().isOrdered()) {
+ if (((StoredCollection) coll).isOrdered()) {
assertEquals(i, value);
} else {
assertTrue(value >= beginValue);
@@ -1809,7 +1881,7 @@ public class CollectionTest extends TestCase {
public void doWork() throws Exception {
HashMap hmap = new HashMap();
for (int i = Math.max(1, beginKey);
- i <= Math.min(MAX_KEY, endKey);
+ i <= Math.min(maxKey, endKey);
i += 1) {
hmap.put(makeKey(i), makeVal(i));
}
@@ -2057,7 +2129,7 @@ public class CollectionTest extends TestCase {
smap = (StoredSortedMap) smap.tailMap(makeKey(rangeBegin));
if (canMakeSubList) {
list = (StoredList) list.subList(listBegin,
- MAX_KEY + 1 - beginKey);
+ maxKey + 1 - beginKey);
}
// check for equivalent ranges
assertEquals(smap,
@@ -2079,7 +2151,7 @@ public class CollectionTest extends TestCase {
}
map = smap;
beginKey = rangeBegin;
- if (rangeBegin < 1 || rangeEnd > MAX_KEY) {
+ if (rangeBegin < 1 || rangeEnd > maxKey) {
endKey = rangeBegin - 1; // force empty range for readAll()
} else {
endKey = rangeEnd;
@@ -2090,7 +2162,7 @@ public class CollectionTest extends TestCase {
rangeType = NONE;
beginKey = 1;
- endKey = MAX_KEY;
+ endKey = maxKey;
map = saveMap;
smap = saveSMap;
list = saveList;
@@ -2138,8 +2210,8 @@ public class CollectionTest extends TestCase {
fail();
} catch (IllegalArgumentException e) { }
try {
- sset.subSet(makeKey(rangeEnd + 1),
- makeKey(rangeEnd + 2)).iterator();
+ iterator(sset.subSet(makeKey(rangeEnd + 1),
+ makeKey(rangeEnd + 2)));
fail();
} catch (IllegalArgumentException e) { }
}
@@ -2155,8 +2227,8 @@ public class CollectionTest extends TestCase {
}
catch (IllegalArgumentException e) { }
try {
- sset.subSet(makeKey(rangeBegin - 1),
- makeKey(rangeBegin)).iterator();
+ iterator(sset.subSet(makeKey(rangeBegin - 1),
+ makeKey(rangeBegin)));
fail();
}
catch (IllegalArgumentException e) { }
@@ -2175,8 +2247,8 @@ public class CollectionTest extends TestCase {
fail();
} catch (IllegalArgumentException e) { }
try {
- sset.subSet(mapEntry(rangeEnd + 1),
- mapEntry(rangeEnd + 2)).iterator();
+ iterator(sset.subSet(mapEntry(rangeEnd + 1),
+ mapEntry(rangeEnd + 2)));
fail();
} catch (IllegalArgumentException e) { }
}
@@ -2191,8 +2263,8 @@ public class CollectionTest extends TestCase {
fail();
} catch (IllegalArgumentException e) { }
try {
- sset.subSet(mapEntry(rangeBegin - 1),
- mapEntry(rangeBegin)).iterator();
+ iterator(sset.subSet(mapEntry(rangeBegin - 1),
+ mapEntry(rangeBegin)));
fail();
}
catch (IllegalArgumentException e) { }
@@ -2354,7 +2426,7 @@ public class CollectionTest extends TestCase {
writeIterRunner.run(new TransactionWorker() {
public void doWork() throws Exception {
Collection dups = map.duplicates(key);
- Iterator iter = dups.iterator();
+ Iterator iter = iterator(dups);
assertEquals(values[0], iter.next());
assertTrue(!iter.hasNext());
try {
@@ -2415,7 +2487,7 @@ public class CollectionTest extends TestCase {
writeIterRunner.run(new TransactionWorker() {
public void doWork() throws Exception {
Collection dups = map.duplicates(key);
- Iterator iter = dups.iterator();
+ Iterator iter = iterator(dups);
try {
for (int j = 0; j < values.length; j += 1) {
assertEquals(values[j], iter.next());
@@ -2485,7 +2557,7 @@ public class CollectionTest extends TestCase {
// read with Map.duplicates().iterator()
dups = map.duplicates(key);
checkDupsSize(values.length, dups);
- iter = dups.iterator();
+ iter = iterator(dups);
try {
for (int j = 0; j < values.length; j += 1) {
assertTrue(iter.hasNext());
@@ -2498,7 +2570,7 @@ public class CollectionTest extends TestCase {
}
// read with Map.values().iterator()
Collection clone = ((StoredCollection) map.values()).toList();
- iter = map.values().iterator();
+ iter = iterator(map.values());
try {
for (int j = beginKey; j < i; j += 1) {
Object val = iter.next();
@@ -2528,7 +2600,7 @@ public class CollectionTest extends TestCase {
}
// read with Map.entrySet().iterator()
clone = ((StoredCollection) map.entrySet()).toList();
- iter = map.entrySet().iterator();
+ iter = iterator(map.entrySet());
try {
for (int j = beginKey; j < i; j += 1) {
Map.Entry entry = (Map.Entry) iter.next();
@@ -2561,7 +2633,7 @@ public class CollectionTest extends TestCase {
}
// read with Map.keySet().iterator()
clone = ((StoredCollection) map.keySet()).toList();
- iter = map.keySet().iterator();
+ iter = iterator(map.keySet());
try {
for (int j = beginKey; j < i; j += 1) {
Object val = iter.next();
@@ -2599,7 +2671,7 @@ public class CollectionTest extends TestCase {
dups.add(makeVal(beginKey));
fail();
} catch (UnsupportedOperationException expected) { }
- ListIterator iter = (ListIterator) dups.iterator();
+ ListIterator iter = (ListIterator) iterator(dups);
try {
iter.add(makeVal(beginKey));
fail();
@@ -2611,7 +2683,7 @@ public class CollectionTest extends TestCase {
void listOperationsNotAllowed() {
- ListIterator iter = (ListIterator) map.values().iterator();
+ ListIterator iter = (ListIterator) iterator(map.values());
try {
try {
iter.nextIndex();
@@ -2777,7 +2849,7 @@ public class CollectionTest extends TestCase {
assertEquals(expected, coll.size());
if (coll instanceof StoredCollection) {
- StoredIterator i = ((StoredCollection) coll).iterator(false);
+ StoredIterator i = ((StoredCollection) coll).storedIterator(false);
try {
int actual = 0;
if (i.hasNext()) {
@@ -2800,7 +2872,7 @@ public class CollectionTest extends TestCase {
private int countElements(Collection coll) {
int count = 0;
- Iterator iter = coll.iterator();
+ Iterator iter = iterator(coll);
try {
while (iter.hasNext()) {
iter.next();
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/DbTestUtil.java b/db/test/scr024/src/com/sleepycat/collections/test/DbTestUtil.java
index 7b5fadc96..1623caf8c 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/DbTestUtil.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/DbTestUtil.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: DbTestUtil.java,v 1.2 2004/06/02 21:00:59 mark Exp $
+ * $Id: DbTestUtil.java,v 12.4 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -31,8 +31,6 @@ public class DbTestUtil {
DBCONFIG_CREATE.setAllowCreate(true);
}
- private static final String separator = ":::";
-
private static final File TEST_DIR;
static {
String dir = System.getProperty("testdestdir");
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/IterDeadlockTest.java b/db/test/scr024/src/com/sleepycat/collections/test/IterDeadlockTest.java
index 7ef77537c..bbb1517cd 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/IterDeadlockTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/IterDeadlockTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2003
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: IterDeadlockTest.java,v 1.3 2004/10/07 19:45:56 bostic Exp $
+ * $Id: IterDeadlockTest.java,v 12.5 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -15,7 +15,6 @@ import com.sleepycat.db.DatabaseConfig;
import com.sleepycat.db.DeadlockException;
import com.sleepycat.db.Environment;
import com.sleepycat.bind.ByteArrayBinding;
-import com.sleepycat.collections.CurrentTransaction;
import com.sleepycat.collections.TransactionRunner;
import com.sleepycat.collections.TransactionWorker;
import com.sleepycat.collections.StoredIterator;
@@ -58,7 +57,6 @@ public class IterDeadlockTest extends TestCase {
}
private Environment env;
- private CurrentTransaction currentTxn;
private Database store1;
private Database store2;
private StoredSortedMap map1;
@@ -74,7 +72,6 @@ public class IterDeadlockTest extends TestCase {
throws Exception {
env = TestEnv.TXN.open("IterDeadlockTest");
- currentTxn = CurrentTransaction.getInstance(env);
store1 = openDb("store1.db");
store2 = openDb("store2.db");
map1 = new StoredSortedMap(store1, binding, binding, true);
@@ -106,7 +103,6 @@ public class IterDeadlockTest extends TestCase {
}
/* Allow GC of DB objects in the test case. */
env = null;
- currentTxn = null;
store1 = null;
store2 = null;
map1 = null;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/JoinTest.java b/db/test/scr024/src/com/sleepycat/collections/test/JoinTest.java
index 4ecc4362e..552a4d5e8 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/JoinTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/JoinTest.java
@@ -1,11 +1,12 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2003
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: JoinTest.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: JoinTest.java,v 12.5 2006/08/31 18:14:14 bostic Exp $
*/
+
package com.sleepycat.collections.test;
import java.util.Map;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/NullTransactionRunner.java b/db/test/scr024/src/com/sleepycat/collections/test/NullTransactionRunner.java
index a8382e6c3..5e69aa4d2 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/NullTransactionRunner.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/NullTransactionRunner.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: NullTransactionRunner.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: NullTransactionRunner.java,v 12.3 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/SecondaryDeadlockTest.java b/db/test/scr024/src/com/sleepycat/collections/test/SecondaryDeadlockTest.java
index 4e785fd4f..e77cb0ea5 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/SecondaryDeadlockTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/SecondaryDeadlockTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2003
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: SecondaryDeadlockTest.java,v 1.3 2004/08/02 18:53:08 mjc Exp $
+ * $Id: SecondaryDeadlockTest.java,v 12.5 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -12,6 +12,7 @@ package com.sleepycat.collections.test;
import com.sleepycat.db.Database;
import com.sleepycat.db.DeadlockException;
import com.sleepycat.db.Environment;
+import com.sleepycat.db.TransactionConfig;
import com.sleepycat.collections.StoredSortedMap;
import com.sleepycat.collections.TransactionRunner;
import com.sleepycat.collections.TransactionWorker;
@@ -33,8 +34,8 @@ public class SecondaryDeadlockTest extends TestCase {
private static final Long N_ONE = new Long(1);
private static final Long N_101 = new Long(101);
- private static final int N_ITERS = 200;
- private static final int MAX_RETRIES = 30;
+ private static final int N_ITERS = 20;
+ private static final int MAX_RETRIES = 1000;
public static void main(String[] args)
throws Exception {
@@ -61,6 +62,7 @@ public class SecondaryDeadlockTest extends TestCase {
private Database index;
private StoredSortedMap storeMap;
private StoredSortedMap indexMap;
+ private Exception exception;
public SecondaryDeadlockTest(String name) {
@@ -121,12 +123,21 @@ public class SecondaryDeadlockTest extends TestCase {
runner.setMaxRetries(MAX_RETRIES);
/*
+ * This test deadlocks a lot at degree 3 serialization. In debugging
+ * this I discovered it was not due to phantom prevention per se but
+ * just to a change in timing.
+ */
+ TransactionConfig txnConfig = new TransactionConfig();
+ runner.setTransactionConfig(txnConfig);
+
+ /*
* A thread to do put() and delete() via the primary, which will lock
* the primary first then the secondary. Uses transactions.
*/
final Thread thread1 = new Thread(new Runnable() {
public void run() {
try {
+ /* The TransactionRunner performs retries. */
for (int i = 0; i < N_ITERS; i +=1 ) {
runner.run(new TransactionWorker() {
public void doWork() throws Exception {
@@ -141,10 +152,10 @@ public class SecondaryDeadlockTest extends TestCase {
}
} catch (Exception e) {
e.printStackTrace();
- fail(e.toString());
+ exception = e;
}
}
- });
+ }, "ThreadOne");
/*
* A thread to get() via the secondary, which will lock the secondary
@@ -165,18 +176,17 @@ public class SecondaryDeadlockTest extends TestCase {
if (e instanceof DeadlockException) {
continue; /* Retry on deadlock. */
} else {
- e.printStackTrace();
- fail();
+ throw e;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
- fail(e.toString());
+ exception = e;
}
}
- });
+ }, "ThreadTwo");
thread1.start();
thread2.start();
@@ -189,5 +199,9 @@ public class SecondaryDeadlockTest extends TestCase {
store = null;
env.close();
env = null;
+
+ if (exception != null) {
+ fail(exception.toString());
+ }
}
}
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestDataBinding.java b/db/test/scr024/src/com/sleepycat/collections/test/TestDataBinding.java
index 4ee3d0c0f..7d8697462 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestDataBinding.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestDataBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestDataBinding.java,v 1.2 2004/06/04 18:26:02 mark Exp $
+ * $Id: TestDataBinding.java,v 12.3 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestEntity.java b/db/test/scr024/src/com/sleepycat/collections/test/TestEntity.java
index 5fb7498e4..a5c5e2b93 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestEntity.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestEntity.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestEntity.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: TestEntity.java,v 12.3 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestEntityBinding.java b/db/test/scr024/src/com/sleepycat/collections/test/TestEntityBinding.java
index 27abfe2c2..0e7cf3df8 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestEntityBinding.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestEntityBinding.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestEntityBinding.java,v 1.2 2004/06/04 18:26:02 mark Exp $
+ * $Id: TestEntityBinding.java,v 12.3 2006/08/24 14:46:46 bostic Exp $
*/
package com.sleepycat.collections.test;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestEnv.java b/db/test/scr024/src/com/sleepycat/collections/test/TestEnv.java
index d311c68a0..8c8c82537 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestEnv.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestEnv.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestEnv.java,v 1.3 2004/06/30 01:08:22 mark Exp $
+ * $Id: TestEnv.java,v 12.4 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -66,7 +66,7 @@ public class TestEnv {
private String name;
private EnvironmentConfig config;
- private TestEnv(String name, EnvironmentConfig config) {
+ TestEnv(String name, EnvironmentConfig config) {
this.name = name;
this.config = config;
@@ -100,6 +100,15 @@ public class TestEnv {
/* OLDEST deadlock detection on DB matches the use of timeouts on JE.*/
DbCompat.setLockDetectModeOldest(config);
File dir = getDirectory(testName, create);
+ return newEnvironment(dir, config);
+ }
+
+ /**
+ * Is overridden in XACollectionTest.
+ */
+ protected Environment newEnvironment(File dir, EnvironmentConfig config)
+ throws DatabaseException, IOException {
+
return new Environment(dir, config);
}
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestKeyAssigner.java b/db/test/scr024/src/com/sleepycat/collections/test/TestKeyAssigner.java
index 319e1a1e0..45297130d 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestKeyAssigner.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestKeyAssigner.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestKeyAssigner.java,v 1.2 2004/06/04 18:26:02 mark Exp $
+ * $Id: TestKeyAssigner.java,v 12.3 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.collections.test;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestKeyCreator.java b/db/test/scr024/src/com/sleepycat/collections/test/TestKeyCreator.java
index 9cda25e49..b5ae6e50d 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestKeyCreator.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestKeyCreator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestKeyCreator.java,v 1.2 2004/06/04 18:26:02 mark Exp $
+ * $Id: TestKeyCreator.java,v 12.3 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.collections.test;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TestStore.java b/db/test/scr024/src/com/sleepycat/collections/test/TestStore.java
index 8899213ce..560fcd58c 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TestStore.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TestStore.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestStore.java,v 1.2 2004/09/22 18:01:06 bostic Exp $
+ * $Id: TestStore.java,v 12.4 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -264,7 +264,7 @@ class TestStore {
DbCompat.setRecordLength(config, 0);
}
config.setAllowCreate(true);
- DbCompat.setDirtyRead(config, true);
+ DbCompat.setReadUncommitted(config, true);
config.setTransactional(CurrentTransaction.getInstance(env) != null);
if (primary != null) {
return DbCompat.openSecondaryDatabase(env, null,
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/TransactionTest.java b/db/test/scr024/src/com/sleepycat/collections/test/TransactionTest.java
index ce9bd36b1..63db15c31 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/TransactionTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/TransactionTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TransactionTest.java,v 1.2 2004/09/22 18:01:06 bostic Exp $
+ * $Id: TransactionTest.java,v 12.7 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.collections.test;
@@ -26,8 +26,10 @@ import com.sleepycat.collections.StoredSortedMap;
import com.sleepycat.collections.TransactionRunner;
import com.sleepycat.collections.TransactionWorker;
import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.CursorConfig;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.Environment;
import com.sleepycat.db.Transaction;
import com.sleepycat.db.TransactionConfig;
@@ -144,23 +146,43 @@ public class TransactionTest extends TestCase {
currentTxn.abortTransaction();
assertNull(currentTxn.getTransaction());
- // dirty-read property should be inherited
-
- assertTrue(!map.isDirtyRead());
- assertTrue(!((StoredContainer) map.values()).isDirtyRead());
- assertTrue(!((StoredContainer) map.keySet()).isDirtyRead());
- assertTrue(!((StoredContainer) map.entrySet()).isDirtyRead());
-
- StoredSortedMap other =
- (StoredSortedMap) StoredCollections.dirtyReadMap(map);
- assertTrue(other.isDirtyRead());
- assertTrue(((StoredContainer) other.values()).isDirtyRead());
- assertTrue(((StoredContainer) other.keySet()).isDirtyRead());
- assertTrue(((StoredContainer) other.entrySet()).isDirtyRead());
- assertTrue(!map.isDirtyRead());
- assertTrue(!((StoredContainer) map.values()).isDirtyRead());
- assertTrue(!((StoredContainer) map.keySet()).isDirtyRead());
- assertTrue(!((StoredContainer) map.entrySet()).isDirtyRead());
+ // read-uncommitted property should be inherited
+
+ assertTrue(!isReadUncommitted(map));
+ assertTrue(!isReadUncommitted(map.values()));
+ assertTrue(!isReadUncommitted(map.keySet()));
+ assertTrue(!isReadUncommitted(map.entrySet()));
+
+ StoredSortedMap other = (StoredSortedMap)
+ StoredCollections.configuredMap
+ (map, CursorConfig.READ_UNCOMMITTED);
+ assertTrue(isReadUncommitted(other));
+ assertTrue(isReadUncommitted(other.values()));
+ assertTrue(isReadUncommitted(other.keySet()));
+ assertTrue(isReadUncommitted(other.entrySet()));
+ assertTrue(!isReadUncommitted(map));
+ assertTrue(!isReadUncommitted(map.values()));
+ assertTrue(!isReadUncommitted(map.keySet()));
+ assertTrue(!isReadUncommitted(map.entrySet()));
+
+ // read-committed property should be inherited
+
+ assertTrue(!isReadCommitted(map));
+ assertTrue(!isReadCommitted(map.values()));
+ assertTrue(!isReadCommitted(map.keySet()));
+ assertTrue(!isReadCommitted(map.entrySet()));
+
+ other = (StoredSortedMap)
+ StoredCollections.configuredMap
+ (map, CursorConfig.READ_COMMITTED);
+ assertTrue(isReadCommitted(other));
+ assertTrue(isReadCommitted(other.values()));
+ assertTrue(isReadCommitted(other.keySet()));
+ assertTrue(isReadCommitted(other.entrySet()));
+ assertTrue(!isReadCommitted(map));
+ assertTrue(!isReadCommitted(map.values()));
+ assertTrue(!isReadCommitted(map.keySet()));
+ assertTrue(!isReadCommitted(map.entrySet()));
}
public void testTransactional()
@@ -409,66 +431,161 @@ public class TransactionTest extends TestCase {
assertNull(currentTxn.getTransaction());
}
- public void testDirtyReadCollection()
+ public void testReadCommittedCollection()
throws Exception {
- StoredSortedMap dirtyMap =
- (StoredSortedMap) StoredCollections.dirtyReadSortedMap(map);
+ StoredSortedMap degree2Map = (StoredSortedMap)
+ StoredCollections.configuredSortedMap
+ (map, CursorConfig.READ_COMMITTED);
+
+ // original map is not read-committed
+ assertTrue(!isReadCommitted(map));
+
+ // all read-committed containers are read-uncommitted
+ assertTrue(isReadCommitted(degree2Map));
+ assertTrue(isReadCommitted
+ (StoredCollections.configuredMap
+ (map, CursorConfig.READ_COMMITTED)));
+ assertTrue(isReadCommitted
+ (StoredCollections.configuredCollection
+ (map.values(), CursorConfig.READ_COMMITTED)));
+ assertTrue(isReadCommitted
+ (StoredCollections.configuredSet
+ (map.keySet(), CursorConfig.READ_COMMITTED)));
+ assertTrue(isReadCommitted
+ (StoredCollections.configuredSortedSet
+ ((SortedSet) map.keySet(),
+ CursorConfig.READ_COMMITTED)));
- // original map is not dirty-read
- assertTrue(map.isDirtyReadAllowed());
- assertTrue(!map.isDirtyRead());
+ if (DbCompat.RECNO_METHOD) {
+ // create a list just so we can call configuredList()
+ Database listStore = TestStore.RECNO_RENUM.open(env, null);
+ List list = new StoredList(listStore, TestStore.VALUE_BINDING,
+ true);
+ assertTrue(isReadCommitted
+ (StoredCollections.configuredList
+ (list, CursorConfig.READ_COMMITTED)));
+ listStore.close();
+ }
+
+ map.put(ONE, ONE);
+ doReadCommitted(degree2Map, null);
+ }
- // 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()));
+ private static boolean isReadCommitted(Object container) {
+ StoredContainer storedContainer = (StoredContainer) container;
+ /* We can't use getReadCommitted until is is added to DB core. */
+ return storedContainer.getCursorConfig() != null &&
+ storedContainer.getCursorConfig().getReadCommitted();
+ }
+
+ public void testReadCommittedTransaction()
+ throws Exception {
+
+ TransactionConfig config = new TransactionConfig();
+ config.setReadCommitted(true);
+ doReadCommitted(map, config);
+ }
+
+ private void doReadCommitted(final StoredSortedMap degree2Map,
+ TransactionConfig txnConfig)
+ throws Exception {
+
+ map.put(ONE, ONE);
+ TransactionRunner runner = new TransactionRunner(env);
+ runner.setTransactionConfig(txnConfig);
+ assertNull(currentTxn.getTransaction());
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertNotNull(currentTxn.getTransaction());
+
+ /* Do a read-committed get(), the lock is not retained. */
+ assertEquals(ONE, degree2Map.get(ONE));
+
+ /*
+ * If we were not using read-committed, the following write of
+ * key ONE with an auto-commit transaction would self-deadlock
+ * since two transactions in the same thread would be
+ * attempting to lock the same key, one for write and one for
+ * read. This test passes if we do not deadlock.
+ */
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry value = new DatabaseEntry();
+ testStore.getKeyBinding().objectToEntry(ONE, key);
+ testStore.getValueBinding().objectToEntry(TWO, value);
+ store.put(null, key, value);
+ }
+ });
+ assertNull(currentTxn.getTransaction());
+ }
+
+ public void testReadUncommittedCollection()
+ throws Exception {
+
+ StoredSortedMap dirtyMap = (StoredSortedMap)
+ StoredCollections.configuredSortedMap
+ (map, CursorConfig.READ_UNCOMMITTED);
+
+ // original map is not read-uncommitted
+ assertTrue(!isReadUncommitted(map));
+
+ // all read-uncommitted containers are read-uncommitted
+ assertTrue(isReadUncommitted(dirtyMap));
+ assertTrue(isReadUncommitted
+ (StoredCollections.configuredMap
+ (map, CursorConfig.READ_UNCOMMITTED)));
+ assertTrue(isReadUncommitted
+ (StoredCollections.configuredCollection
+ (map.values(), CursorConfig.READ_UNCOMMITTED)));
+ assertTrue(isReadUncommitted
+ (StoredCollections.configuredSet
+ (map.keySet(), CursorConfig.READ_UNCOMMITTED)));
+ assertTrue(isReadUncommitted
+ (StoredCollections.configuredSortedSet
+ ((SortedSet) map.keySet(), CursorConfig.READ_UNCOMMITTED)));
if (DbCompat.RECNO_METHOD) {
- // create a list just so we can call dirtyReadList()
+ // create a list just so we can call configuredList()
Database listStore = TestStore.RECNO_RENUM.open(env, null);
List list = new StoredList(listStore, TestStore.VALUE_BINDING,
true);
- checkDirtyReadProperty(StoredCollections.dirtyReadList(list));
+ assertTrue(isReadUncommitted
+ (StoredCollections.configuredList
+ (list, CursorConfig.READ_UNCOMMITTED)));
listStore.close();
}
- doDirtyRead(dirtyMap);
+ doReadUncommitted(dirtyMap);
}
- private void checkDirtyReadProperty(Object container) {
-
- assertTrue(((StoredContainer) container).isDirtyReadAllowed());
- assertTrue(((StoredContainer) container).isDirtyRead());
+ private static boolean isReadUncommitted(Object container) {
+ StoredContainer storedContainer = (StoredContainer) container;
+ return storedContainer.getCursorConfig() != null &&
+ storedContainer.getCursorConfig().getReadUncommitted();
}
- public void testDirtyReadTransaction()
+ public void testReadUncommittedTransaction()
throws Exception {
TransactionRunner runner = new TransactionRunner(env);
TransactionConfig config = new TransactionConfig();
- config.setDirtyRead(true);
+ config.setReadUncommitted(true);
runner.setTransactionConfig(config);
assertNull(currentTxn.getTransaction());
runner.run(new TransactionWorker() {
public void doWork() throws Exception {
assertNotNull(currentTxn.getTransaction());
- doDirtyRead(map);
+ doReadUncommitted(map);
}
});
assertNull(currentTxn.getTransaction());
}
- private synchronized void doDirtyRead(StoredSortedMap dirtyMap)
+ private synchronized void doReadUncommitted(StoredSortedMap dirtyMap)
throws Exception {
// start thread one
- DirtyReadThreadOne t1 = new DirtyReadThreadOne(env, this);
+ ReadUncommittedThreadOne t1 = new ReadUncommittedThreadOne(env, this);
t1.start();
wait();
@@ -485,7 +602,7 @@ public class TransactionTest extends TestCase {
assertTrue(dirtyMap.isEmpty());
// start thread two
- DirtyReadThreadTwo t2 = new DirtyReadThreadTwo(env, this);
+ ReadUncommittedThreadTwo t2 = new ReadUncommittedThreadTwo(env, this);
t2.start();
wait();
@@ -502,16 +619,15 @@ public class TransactionTest extends TestCase {
assertTrue(!dirtyMap.isEmpty());
}
- private static class DirtyReadThreadOne extends Thread {
+ private static class ReadUncommittedThreadOne extends Thread {
- private Environment env;
private CurrentTransaction currentTxn;
private TransactionTest parent;
private StoredSortedMap map;
- private DirtyReadThreadOne(Environment env, TransactionTest parent) {
+ private ReadUncommittedThreadOne(Environment env,
+ TransactionTest parent) {
- this.env = env;
this.currentTxn = CurrentTransaction.getInstance(env);
this.parent = parent;
this.map = parent.map;
@@ -542,14 +658,15 @@ public class TransactionTest extends TestCase {
}
}
- private static class DirtyReadThreadTwo extends Thread {
+ private static class ReadUncommittedThreadTwo extends Thread {
private Environment env;
private CurrentTransaction currentTxn;
private TransactionTest parent;
private StoredSortedMap map;
- private DirtyReadThreadTwo(Environment env, TransactionTest parent) {
+ private ReadUncommittedThreadTwo(Environment env,
+ TransactionTest parent) {
this.env = env;
this.currentTxn = CurrentTransaction.getInstance(env);
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/serial/CatalogCornerCaseTest.java b/db/test/scr024/src/com/sleepycat/collections/test/serial/CatalogCornerCaseTest.java
new file mode 100644
index 000000000..455ffd745
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/collections/test/serial/CatalogCornerCaseTest.java
@@ -0,0 +1,99 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: CatalogCornerCaseTest.java,v 12.3 2006/08/31 18:14:14 bostic Exp $
+ */
+package com.sleepycat.collections.test.serial;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.sleepycat.bind.serial.StoredClassCatalog;
+import com.sleepycat.collections.test.DbTestUtil;
+import com.sleepycat.collections.test.TestEnv;
+import com.sleepycat.compat.DbCompat;
+import com.sleepycat.db.Database;
+import com.sleepycat.db.DatabaseConfig;
+import com.sleepycat.db.Environment;
+
+/**
+ * @author Mark Hayes
+ */
+public class CatalogCornerCaseTest extends TestCase {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.framework.TestResult tr =
+ junit.textui.TestRunner.run(suite());
+ if (tr.errorCount() > 0 ||
+ tr.failureCount() > 0) {
+ System.exit(1);
+ } else {
+ System.exit(0);
+ }
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ return new TestSuite(CatalogCornerCaseTest.class);
+ }
+
+ private Environment env;
+
+ public CatalogCornerCaseTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp()
+ throws Exception {
+
+ DbTestUtil.printTestName(getName());
+ env = TestEnv.BDB.open(getName());
+ }
+
+ public void tearDown() {
+
+ try {
+ if (env != null) {
+ env.close();
+ }
+ } catch (Exception e) {
+ System.out.println("Ignored exception during tearDown: " + e);
+ } finally {
+ /* Ensure that GC can cleanup. */
+ env = null;
+ }
+ }
+
+ public void testReadOnlyEmptyCatalog()
+ throws Exception {
+
+ String file = "catalog.db";
+
+ /* Create an empty database. */
+ DatabaseConfig config = new DatabaseConfig();
+ config.setAllowCreate(true);
+ DbCompat.setTypeBtree(config);
+ Database db = DbCompat.openDatabase(env, null, file, null, config);
+ db.close();
+
+ /* Open the empty database read-only. */
+ config.setAllowCreate(false);
+ config.setReadOnly(true);
+ db = DbCompat.openDatabase(env, null, file, null, config);
+
+ /* Expect exception when creating the catalog. */
+ try {
+ new StoredClassCatalog(db);
+ fail();
+ } catch (IllegalStateException e) { }
+ db.close();
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTest.java b/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTest.java
index 0f9c78551..d1a55ef7e 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTest.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredClassCatalogTest.java,v 1.2 2004/09/01 14:34:22 mark Exp $
+ * $Id: StoredClassCatalogTest.java,v 12.3 2006/08/31 18:14:14 bostic Exp $
*/
package com.sleepycat.collections.test.serial;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTestInit.java b/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTestInit.java
index e1f5184a8..a307457aa 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTestInit.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/serial/StoredClassCatalogTestInit.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: StoredClassCatalogTestInit.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: StoredClassCatalogTestInit.java,v 12.4 2006/08/31 18:14:14 bostic Exp $
*/
package com.sleepycat.collections.test.serial;
@@ -86,10 +86,9 @@ public class StoredClassCatalogTestInit extends TestCase
catalog = new StoredClassCatalog(openDb(CATALOG_FILE));
- SerialBinding keyBinding = new SerialBinding(catalog,
- String.class);
- SerialBinding valueBinding = new SerialBinding(catalog,
- TestSerial.class);
+ SerialBinding keyBinding = new SerialBinding(catalog, String.class);
+ SerialBinding valueBinding =
+ new SerialBinding(catalog, TestSerial.class);
store = openDb(STORE_FILE);
map = new StoredMap(store, keyBinding, valueBinding, true);
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java b/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java
index 56300aeb5..aaaa13f78 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java
+++ b/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestSerial.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: TestSerial.java,v 12.3 2006/08/31 18:14:14 bostic Exp $
*/
package com.sleepycat.collections.test.serial;
diff --git a/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java.original b/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java.original
index 80dba2e80..09aae7b99 100644
--- a/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java.original
+++ b/db/test/scr024/src/com/sleepycat/collections/test/serial/TestSerial.java.original
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: TestSerial.java.original,v 1.7 2004/08/02 18:53:09 mjc Exp $
+ * $Id: TestSerial.java.original,v 12.6 2006/08/31 18:14:14 bostic Exp $
*/
package com.sleepycat.collections.test.serial;
diff --git a/db/test/scr024/src/com/sleepycat/util/test/ExceptionWrapperTest.java b/db/test/scr024/src/com/sleepycat/util/test/ExceptionWrapperTest.java
index f07e3666e..3de6f02cb 100644
--- a/db/test/scr024/src/com/sleepycat/util/test/ExceptionWrapperTest.java
+++ b/db/test/scr024/src/com/sleepycat/util/test/ExceptionWrapperTest.java
@@ -1,15 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: ExceptionWrapperTest.java,v 1.1 2004/04/09 16:34:10 mark Exp $
+ * $Id: ExceptionWrapperTest.java,v 12.4 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.util.test;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -106,5 +108,38 @@ public class ExceptionWrapperTest extends TestCase {
assertEquals("msg", t.getMessage());
}
}
-}
+ /**
+ * Generates a stack trace for a nested exception and checks the output
+ * for the nested exception.
+ */
+ public void testStackTrace() {
+
+ /* Nested stack traces are not avilable in Java 1.3. */
+ String version = System.getProperty("java.version");
+ if (version.startsWith("1.3.")) {
+ return;
+ }
+
+ Exception ex = new Exception("some exception");
+ String causedBy = "Caused by: java.lang.Exception: some exception";
+
+ try {
+ throw new RuntimeExceptionWrapper(ex);
+ } catch (RuntimeException e) {
+ StringWriter sw = new StringWriter();
+ e.printStackTrace(new PrintWriter(sw));
+ String s = sw.toString();
+ assertTrue(s.indexOf(causedBy) != -1);
+ }
+
+ try {
+ throw new IOExceptionWrapper(ex);
+ } catch (IOException e) {
+ StringWriter sw = new StringWriter();
+ e.printStackTrace(new PrintWriter(sw));
+ String s = sw.toString();
+ assertTrue(s.indexOf(causedBy) != -1);
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/util/test/FastOutputStreamTest.java b/db/test/scr024/src/com/sleepycat/util/test/FastOutputStreamTest.java
new file mode 100644
index 000000000..0c6a9ea9a
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/util/test/FastOutputStreamTest.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: FastOutputStreamTest.java,v 12.3 2006/08/24 14:46:47 bostic Exp $
+ */
+
+package com.sleepycat.util.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.sleepycat.collections.test.DbTestUtil;
+import com.sleepycat.util.FastOutputStream;
+
+/**
+ * @author Mark Hayes
+ */
+public class FastOutputStreamTest extends TestCase {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.framework.TestResult tr =
+ junit.textui.TestRunner.run(suite());
+ if (tr.errorCount() > 0 ||
+ tr.failureCount() > 0) {
+ System.exit(1);
+ } else {
+ System.exit(0);
+ }
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(FastOutputStreamTest.class);
+ return suite;
+ }
+
+ public FastOutputStreamTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ DbTestUtil.printTestName("FastOutputStreamTest." + getName());
+ }
+
+ public void testBufferSizing()
+ throws Exception {
+
+ FastOutputStream fos = new FastOutputStream();
+ assertEquals
+ (FastOutputStream.DEFAULT_INIT_SIZE, fos.getBufferBytes().length);
+
+ /* Write X+1 bytes, expect array size 2X+1 */
+ fos.write(new byte[FastOutputStream.DEFAULT_INIT_SIZE + 1]);
+ assertEquals
+ ((FastOutputStream.DEFAULT_INIT_SIZE * 2) + 1,
+ fos.getBufferBytes().length);
+
+ /* Write X+1 bytes, expect array size 4X+3 = (2(2X+1) + 1) */
+ fos.write(new byte[FastOutputStream.DEFAULT_INIT_SIZE + 1]);
+ assertEquals
+ ((FastOutputStream.DEFAULT_INIT_SIZE * 4) + 3,
+ fos.getBufferBytes().length);
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/util/test/PackedIntegerTest.java b/db/test/scr024/src/com/sleepycat/util/test/PackedIntegerTest.java
new file mode 100644
index 000000000..b9d7dc8a9
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/util/test/PackedIntegerTest.java
@@ -0,0 +1,106 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: PackedIntegerTest.java,v 1.2 2006/08/24 14:46:47 bostic Exp $
+ */
+
+package com.sleepycat.util.test;
+
+import com.sleepycat.util.PackedInteger;
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+public class PackedIntegerTest extends TestCase
+{
+ static final int V119 = 119;
+ static final int BYTE_MAX = 0xFF;
+ static final int SHORT_MAX = 0xFFFF;
+ static final int THREE_MAX = 0xFFFFFF;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.framework.TestResult tr =
+ junit.textui.TestRunner.run(suite());
+ if (tr.errorCount() > 0 ||
+ tr.failureCount() > 0) {
+ System.exit(1);
+ } else {
+ System.exit(0);
+ }
+ }
+
+ public static Test suite() {
+
+ return new PackedIntegerTest();
+ }
+
+ public PackedIntegerTest() {
+
+ super("PackedIntegerTest");
+ }
+
+ public void runTest() {
+
+ testRange(-V119, V119, 1);
+
+ testRange(-BYTE_MAX - V119, -1 - V119, 2);
+ testRange(1 + V119, BYTE_MAX + V119, 2);
+
+ testRange(-SHORT_MAX - V119, -SHORT_MAX + 99, 3);
+ testRange(-BYTE_MAX - V119 - 99, -BYTE_MAX - V119 - 1, 3);
+ testRange(BYTE_MAX + V119 + 1, BYTE_MAX + V119 + 99, 3);
+ testRange(SHORT_MAX - 99, SHORT_MAX + V119, 3);
+
+ testRange(-THREE_MAX - V119, -THREE_MAX + 99, 4);
+ testRange(-SHORT_MAX - V119 - 99, -SHORT_MAX - V119 - 1, 4);
+ testRange(SHORT_MAX + V119 + 1, SHORT_MAX + V119 + 99, 4);
+ testRange(THREE_MAX - 99, THREE_MAX + V119, 4);
+
+ testRange(Integer.MIN_VALUE, Integer.MIN_VALUE + 99, 5);
+ testRange(Integer.MAX_VALUE - 99, Integer.MAX_VALUE, 5);
+ }
+
+ private void testRange(long firstValue,
+ long lastValue,
+ int bytesExpected) {
+
+ byte[] buf = new byte[1000];
+ int off = 0;
+
+ for (long longI = firstValue; longI <= lastValue; longI += 1) {
+ int i = (int) longI;
+ int before = off;
+ off = PackedInteger.writeInt(buf, off, i);
+ int bytes = off - before;
+ if (bytes != bytesExpected) {
+ fail("output of value=" + i + " bytes=" + bytes +
+ " bytesExpected=" + bytesExpected);
+ }
+ bytes = PackedInteger.getWriteIntLength(i);
+ if (bytes != bytesExpected) {
+ fail("count of value=" + i + " bytes=" + bytes +
+ " bytesExpected=" + bytesExpected);
+ }
+ }
+
+ off = 0;
+
+ for (long longI = firstValue; longI <= lastValue; longI += 1) {
+ int i = (int) longI;
+ int bytes = PackedInteger.getReadIntLength(buf, off);
+ if (bytes != bytesExpected) {
+ fail("count of value=" + i + " bytes=" + bytes +
+ " bytesExpected=" + bytesExpected);
+ }
+ int value = PackedInteger.readInt(buf, off);
+ if (value != i) {
+ fail("input of value=" + i + " but got=" + value);
+ }
+ off += bytes;
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/util/test/UtfTest.java b/db/test/scr024/src/com/sleepycat/util/test/UtfTest.java
index 1ba82291b..1b0b25fbc 100644
--- a/db/test/scr024/src/com/sleepycat/util/test/UtfTest.java
+++ b/db/test/scr024/src/com/sleepycat/util/test/UtfTest.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2002-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: UtfTest.java,v 1.2 2004/06/02 21:00:59 mark Exp $
+ * $Id: UtfTest.java,v 12.3 2006/08/24 14:46:47 bostic Exp $
*/
package com.sleepycat.util.test;
diff --git a/db/test/scr025/TestMulti.cpp b/db/test/scr025/TestMulti.cpp
index 9ca62bd32..91702e362 100644
--- a/db/test/scr025/TestMulti.cpp
+++ b/db/test/scr025/TestMulti.cpp
@@ -190,10 +190,11 @@ void test3()
db.close(0);
}
-void main()
+int main()
{
test1();
test2();
test3();
+ return (0);
}
diff --git a/db/test/scr025/chk.cxxmulti b/db/test/scr025/chk.cxxmulti
index 5e4326b2d..3c1e1588c 100644
--- a/db/test/scr025/chk.cxxmulti
+++ b/db/test/scr025/chk.cxxmulti
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.cxxmulti,v 1.1 2003/03/04 20:52:27 sandstro Exp $
+# $Id: chk.cxxmulti,v 12.0 2004/11/17 03:44:55 bostic Exp $
#
# Check to make sure that regression tests for C++ run.
diff --git a/db/test/scr025/ignore b/db/test/scr025/ignore
index 9794284aa..0d4489172 100644
--- a/db/test/scr025/ignore
+++ b/db/test/scr025/ignore
@@ -1,4 +1,4 @@
#
-# $Id: ignore,v 1.1 2003/03/04 20:52:27 sandstro Exp $
+# $Id: ignore,v 12.0 2004/11/17 03:44:55 bostic Exp $
#
# A list of tests to ignore
diff --git a/db/test/scr026/chk.method b/db/test/scr026/chk.method
index 22e308a76..b8aeb61fe 100644
--- a/db/test/scr026/chk.method
+++ b/db/test/scr026/chk.method
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.method,v 1.4 2004/10/07 20:42:10 bostic Exp $
+# $Id: chk.method,v 12.3 2006/09/11 15:28:06 bostic Exp $
#
# Check that DB doesn't call DB or DB_ENV methods internally.
@@ -26,11 +26,13 @@ m=`grep '(\*[a-z][_a-z]*)' $d/dbinc/db.in |
-e '/c_am_writelock/d' \
-e '/db_append_recno/d' \
-e '/db_errcall/d' \
+ -e '/db_event_func/d' \
-e '/db_feedback/d' \
-e '/db_free/d' \
-e '/db_malloc/d' \
-e '/db_paniccall/d' \
-e '/db_realloc/d' \
+ -e '/dbt_usercopy/d' \
-e '/dup_compare/d' \
-e '/s_callback/d' |
sort -u`
@@ -53,6 +55,7 @@ sed \
-e '/^db_deadlock\//d' \
-e '/^db_dump185\//d' \
-e '/^db_dump\//d' \
+ -e '/^db_hotbackup\//d' \
-e '/^db_load\//d' \
-e '/^db_printlog\//d' \
-e '/^db_recover\//d' \
@@ -66,11 +69,13 @@ sed \
-e '/^hsearch\//d' \
-e '/^libdb_java\//d' \
-e '/^mod_db4\//d' \
+ -e '/^mutex\/tm.c:/d' \
-e '/^php_db4\//d' \
-e '/^tcl\//d' \
-e '/^test\//d' \
-e '/^test_perf\//d' \
-e '/^test_purify\//d' \
+ -e '/^test_rep\//d' \
-e '/^test_server\//d' \
-e '/^test_thread\//d' \
-e '/^test_vxworks\//d' \
@@ -81,7 +86,10 @@ sed \
-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' \
+ -e '/dbenv->is_alive(/d' \
+ -e '/dbenv->thread_id(/d' \
+ -e '/dbenv->thread_id_string(/d' \
+ -e '/rep_util.c:.*ret = dbenv->rep_send(/d' \
>$t
test -s $t && {
diff --git a/db/test/scr027/chk.javas b/db/test/scr027/chk.javas
index c8e3362e7..0c7d74f0c 100644
--- a/db/test/scr027/chk.javas
+++ b/db/test/scr027/chk.javas
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.javas,v 1.6 2004/09/29 01:12:08 bostic Exp $
+# $Id: chk.javas,v 12.0 2004/11/17 03:44:56 bostic Exp $
#
# Check to make sure that the java code samples in the documents build.
diff --git a/db/test/scr028/chk.rtc b/db/test/scr028/chk.rtc
index d21e0309d..6f24280d5 100644
--- a/db/test/scr028/chk.rtc
+++ b/db/test/scr028/chk.rtc
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.rtc,v 1.1 2003/12/11 21:30:41 bostic Exp $
+# $Id: chk.rtc,v 12.0 2004/11/17 03:44:56 bostic Exp $
#
# Build a program that calls the run-time API configuration functions.
diff --git a/db/test/scr029/chk.get b/db/test/scr029/chk.get
index 01b56af57..2abe00733 100644
--- a/db/test/scr029/chk.get
+++ b/db/test/scr029/chk.get
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.get,v 1.1 2004/03/15 21:09:50 bostic Exp $
+# $Id: chk.get,v 12.0 2004/11/17 03:44:56 bostic Exp $
#
# Build a program that calls the getters.
diff --git a/db/test/scr030/chk.build b/db/test/scr030/chk.build
index a77f6957c..729f2fde7 100644
--- a/db/test/scr030/chk.build
+++ b/db/test/scr030/chk.build
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# $Id: chk.build,v 1.4 2004/10/29 20:03:49 bostic Exp $
+# $Id: chk.build,v 12.6 2006/09/16 13:16:07 bostic Exp $
#
# Build a program that calls the run-time API configuration functions.
@@ -12,45 +12,29 @@ trap 'rm -rf scr030 ; exit 1' 1 2 3 13 15
exit 1
}
-s="\
---disable-cryptography \
---disable-hash \
---disable-largefile \
---disable-queue \
---disable-replication \
---disable-statistics \
---disable-verify \
---enable-compat185 \
---enable-debug \
---enable-debug_rop \
---enable-debug_wop \
---enable-diagnostic \
---enable-dump185 \
---enable-posixmutexes \
---enable-rpc \
---enable-smallbuild \
---enable-umrw \
---with-mutex=UNIX/fcntl \
---with-mutex=x86/gcc-assembly \
---with-mutexalign=64 \
---with-uniquename=__KEITH__"
+# Flags to build Java.
+JAVA_HOME=/usr/local/linux-sun-jdk1.4.2
+JAVA_FLAGS="-I$JAVA_HOME/include -I$JAVA_HOME/include/linux"
# Configure and build.
# $1: config flags
-r()
+config()
{
- echo "run: $1 (`date`)"
- rm -rf scr030
- mkdir scr030
- cd scr030
+ echo "run: $1: $dir (`date`)" | tee CONFIGURATION
+
../../../dist/configure $1 > config.OUT 2>&1
if test $? -ne 0; then
echo "$i: FAILED in configure"
- exit 1
+ return
fi
+
(echo /^CFLAGS=/ &&
+ # Configure gcc to complain about everything, and make warnings fatal
+ # errors.
echo \
- 's/-c /-c -W -Werror -Wall -Wpointer-arith -Wmissing-prototypes /p' &&
+ 's/-c /-c -W -Werror -Wall -Wpointer-arith -Wmissing-prototypes /' &&
+ # Warnings are fatal errors, so don't set gcc warning flags for files
+ # where we can't avoid warnings.
echo '/^db_server_svc.*: db_server_svc.c$/' &&
echo '+1s/\$(CFLAGS)/-c \$(CPPFLAGS)/' &&
echo '/^db_server_xdr.*: db_server_xdr.c$/' &&
@@ -63,16 +47,56 @@ r()
echo '+1s/\$(CFLAGS)/-c \$(CPPFLAGS)/' &&
echo w &&
echo q) | ed Makefile > /dev/null
+
+ # If we're compiling Java, we'll need to set up the path.
+ echo "$1" | grep enable-java > /dev/null
+ if test $? -eq 0; then
+ (echo /^CPPFLAGS=/ &&
+ echo "s;\$; $JAVA_FLAGS;" &&
+ echo w &&
+ echo q) | ed Makefile > /dev/null
+ fi
+
make > mklog 2>&1
- if test $? -ne 0; then
- echo "$i: FAILED in make"
- exit 1
+}
+
+# Run a test.
+# $1: config flags
+count=0
+r()
+{
+ count=$(expr $count + 1)
+ dir="scr030.$count"
+ (rm -rf $dir && mkdir $dir && cd $dir && config "$1")
+ if test $? -eq 0; then
+ rm -rf $dir
+ else
+ echo "$1: FAILED to build"
fi
- cd ..
- rm -rf scr030
}
# Run through all of the standard single options.
+s="\
+--disable-cryptography \
+--disable-hash \
+--disable-largefile \
+--disable-queue \
+--disable-replication \
+--disable-statistics \
+--disable-verify \
+--enable-compat185 \
+--enable-debug \
+--enable-debug_rop \
+--enable-debug_wop \
+--enable-diagnostic \
+--enable-dump185 \
+--enable-posixmutexes \
+--enable-rpc \
+--enable-smallbuild \
+--enable-umrw \
+--with-mutex=UNIX/fcntl \
+--with-mutex=x86/gcc-assembly \
+--with-uniquename=__KEITH__"
for i in $s; do
r "$i --disable-shared"
done
@@ -82,6 +106,6 @@ r
r "--disable-static"
r "--enable-cxx"
r "--enable-java"
-r "--with-tcl=/usr/local/tcl8.4/lib"
-r "--enable-test --with-tcl=/usr/local/tcl8.4/lib"
-r "--enable-cxx --enable-java --with-tcl=/usr/local/tcl8.4/lib"
+r "--with-tcl=/usr/local/lib/tcl8.4"
+r "--enable-test --with-tcl=/usr/local/lib/tcl8.4"
+r "--enable-cxx --enable-java --with-tcl=/usr/local/lib/tcl8.4"
diff --git a/db/test/scr031/chk.xa b/db/test/scr031/chk.xa
new file mode 100644
index 000000000..4392ce20b
--- /dev/null
+++ b/db/test/scr031/chk.xa
@@ -0,0 +1,294 @@
+#! /bin/sh
+#
+# Smoke test XA support.
+
+msg()
+{
+ echo "========"
+ echo "======== $1"
+ echo "========"
+}
+
+func_clean()
+{
+ rm -rf run
+}
+
+# Build the configuration file --
+# We do this work in the shell script because we have to fill in
+# lots of shell variables.
+func_ubbinit()
+{
+ MACHINE_NAME=`uname -n`
+ cat > $RUN/config/ubb.cfg << END_OF_UBB_FILE
+*RESOURCES
+IPCKEY 200103
+DOMAINID domain3
+MASTER cluster3
+MAXACCESSERS 10
+MAXSERVERS 5
+MAXSERVICES 10
+MODEL SHM
+LDBAL N
+
+*MACHINES
+DEFAULT:
+ APPDIR="$RUN/bin"
+ TUXCONFIG="$TUXCONFIG"
+ TLOGDEVICE="$TLOGDEVICE"
+ TUXDIR="$TUXDIR"
+# Machine name is 30 characters max
+$MACHINE_NAME LMID=cluster3
+
+*GROUPS
+# Group name is 30 characters max
+group_tm LMID=cluster3 GRPNO=1 TMSNAME=DBRM TMSCOUNT=2 OPENINFO="BERKELEY-DB:$RUN/data"
+
+*SERVERS
+DEFAULT:
+ CLOPT="-A"
+
+# Server name is 78 characters max (same for any pathname)
+server1 SRVGRP=group_tm SRVID=1 MAXGEN=3 RESTART=Y
+server2 SRVGRP=group_tm SRVID=2 MAXGEN=3 RESTART=Y
+
+*SERVICES
+# Service name is 15 characters max
+# server1
+TestTxn1
+# server2
+TestTxn2
+END_OF_UBB_FILE
+ tmloadcf -y $RUN/config/ubb.cfg
+}
+
+init_tmadmin()
+{
+tmadmin << END_OF_TMADMIN
+ crdl -z $TLOGDEVICE -b 500
+ crlog -m cluster3
+END_OF_TMADMIN
+}
+
+# Run a test.
+run()
+{
+ msg "CLEANING UP FROM THE LAST RUN."
+ rm -rf run
+ mkdir -p run/bin run/config run/data
+
+ msg "BUILDING THE CONFIGURATION FILE."
+ func_ubbinit
+
+ # Everything else is done in run/bin.
+ cd $RUN/bin
+
+ # The CFLAGS variable defines the pre-processor defines -- start with
+ # whatever the user set, and add our own stuff.
+ #
+ # For debugging output, add -DVERBOSE to COMPILE_FLAGS, by uncommenting
+ # the following line.
+ #
+ # Verbose output from the client appears in this script's stdout,
+ # (which you can re-direct below, when the client is run).
+ # Verbose output from the server appears in the file run/bin/stdout.
+ #
+ # COMPILE_FLAGS="-DVERBOSE"
+ COMPILE_FLAGS="$CFLAGS $COMPILE_FLAGS -g -I../../.."
+
+ msg "BUILDING CLIENT"
+ CFLAGS="$COMPILE_FLAGS"; export CFLAGS
+ buildclient -v -r BERKELEY-DB -o client \
+ -f ../../src/htimestampxa.c -f ../../src/client.c
+ test "$?" -eq 0 || {
+ echo "FAIL: buildclient failed."
+ exit 1
+ }
+
+ msg "BUILDING SERVER #1"
+ CFLAGS="$COMPILE_FLAGS -DSERVER1"; export CFLAGS
+ buildserver -v -r BERKELEY-DB -o server1 \
+ -s TestTxn1:TestTxn1 \
+ -f ../../src/htimestampxa.c -f ../../src/server.c
+ test "$?" -eq 0 || {
+ echo "FAIL: buildserver failed."
+ exit 1
+ }
+
+ msg "BUILDING SERVER #2"
+ CFLAGS="$COMPILE_FLAGS -DSERVER2"; export CFLAGS
+ buildserver -v -r BERKELEY-DB -o server2 \
+ -s TestTxn2:TestTxn2 \
+ -f ../../src/htimestampxa.c -f ../../src/server.c
+ test "$?" -eq 0 || {
+ echo "FAIL: buildserver failed."
+ exit 1
+ }
+
+ msg "BUILDING THE RESOURCE MANAGER."
+ buildtms -v -o DBRM -r BERKELEY-DB
+
+ msg "BUILDING THE LOG DEVICE."
+ init_tmadmin
+
+ # Boot Tuxedo.
+ # You should see something like:
+ #
+ # INFO: BEA Tuxedo, Version 8.1
+ # INFO: Serial #: 650522264138-1510597376252,
+ # Expiration 2005-02-15, Maxusers 100
+ # INFO: Licensed to: BEA Evaluation Customer
+ #
+ # Booting admin processes ...
+ #
+ # exec BBL -A :
+ # process id=13845 ... Started.
+ #
+ # Booting server processes ...
+ #
+ # exec DBRM -A :
+ # process id=13846 ... Started.
+ # exec DBRM -A :
+ # process id=13847 ... Started.
+ # exec server1 -A :
+ # process id=13848 ... Started.
+ # exec server2 -A :
+ # process id=13849 ... Started.
+ # 5 processes started.
+ msg "BOOTING TUXEDO."
+ tmboot -y
+
+ # Run the client with 10, 100 and 1000 transactions.
+ exitval=0
+ for i in 10 100 1000; do
+ msg "RUN THE CLIENT WITH $i TRANSACTIONS."
+ # You can get debugging output on just the client by
+ # adding -v to the command line.
+ #
+ # ./client -v -n $i
+ ./client -n $i
+ test "$?" -ne 0 && {
+ echo "FAIL: client failed"
+ exitval=1
+ break;
+ }
+ done
+
+ msg "SHUTTING DOWN THE TRANSACTION MANAGER."
+ echo 'y' | tmshutdown
+
+ # Copy out Tuxedo's logging.
+ msg "ULOG FILES:"
+ cat ULOG*
+
+ # Copy out any server output.
+ msg "STDOUT:"
+ cat stdout
+
+ # Copy out any server errors.
+ msg "STDERR:"
+ cat stderr
+ test -s stderr && {
+ echo "FAIL: stderr file not empty"
+ exitval=1
+ }
+
+ # We never checkpointed, run recovery to make sure it all works.
+ msg "RECOVERY:"
+ ../../../db_recover -h ../data -v
+ test "$?" -ne 0 && {
+ echo "FAIL: recovery failed"
+ exitval=1
+ }
+
+ return $exitval
+}
+
+# Debug the shell script.
+# set -x
+
+# Check to make sure we have a Tuxedo build we understand.
+test -z "$TUXDIR" && {
+ echo "FAIL: the TUXDIR environment variable NOT set"
+ echo \
+ "FAIL: TUXDIR must be set to the absolute path of the Tuxedo install"
+ echo "FAIL: immediately above the subdirectories bin, include and lib"
+ exit 1
+}
+dlist="include lib"
+for i in $dlist; do
+ test -d $TUXDIR/$i || {
+ echo "FAIL: check the Tuxedo install"
+ echo "FAIL: the required directory $TUXDIR/$i does not exist"
+ exit 1
+ }
+done
+flist="bin/buildclient bin/buildserver bin/buildtms bin/tmadmin bin/tmboot
+ bin/tmloadcf bin/tmshutdown lib/libtux.so udataobj/RM"
+for i in $flist; do
+ test -f $TUXDIR/$i || {
+ echo "FAIL: check the Tuxedo install"
+ echo "FAIL: the required file $TUXDIR/$i does not exist"
+ exit 1
+ }
+done
+
+# Set the location of the Berkeley DB libraries -- allow the user to override.
+# Check to make sure we have a Berkeley DB installation. (I'd like to use the
+# local DB installation, but I've never been able to make Tuxedo load shared
+# libraries from the .libs directory.)
+test -z "$DB_INSTALL" && DB_INSTALL=/usr/local/BerkeleyDB.4.5
+export DB_INSTALL
+if test -f "$DB_INSTALL/lib/libdb.so"; then
+ msg "Using Berkeley DB $DB_INSTALL/lib/ installation"
+else
+ echo "FAIL: $DB_INSTALL/lib/libdb.so not found"
+ exit 1
+fi
+
+# You may need to update the Tuxedo resource manager file. It should be in:
+#
+# $TUXDIR/udataobj/RM
+#
+# Solaris requires a line something like the following:
+#
+# BERKELEY-DB:db_xa_switch:-L${DB_INSTALL}/lib -ldb
+#
+# where DB_INSTALL is a Berkeley DB install, and /lib contains DB libraries.
+egrep "^BERKELEY-DB:db_xa_switch:" $TUXDIR/udataobj/RM > /dev/null || {
+ echo "FAIL: $TUXDIR/udataobj/RM does not list DB as one of its RMs"
+ echo "FAIL: Try adding:"
+ echo "FAIL: BERKELEY-DB:db_xa_switch:-L\${DB_INSTALL}/lib -ldb"
+ exit 1
+}
+
+# Everything is built in and run from the "run" subdirectory.
+RUN=`pwd`/run; export RUN
+
+FIELDTBLS32=datafml.fml; export FIELDTBLS32
+FLDTBLDIR32=$RUN/config; export FLDTBLDIR32
+TLOGDEVICE=$RUN/data/dlog; export TLOGDEVICE
+TUXCONFIG=$RUN/config/tuxconfig;export TUXCONFIG
+
+PATH="$PATH:$RUN/bin:$TUXDIR/bin"
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DB_INSTALL/lib:$TUXDIR/lib;
+export LD_LIBRARY_PATH PATH
+
+if test $# -eq 1; then
+ case "$1" in
+ clean) # Clean up from previous runs.
+ func_clean;;
+ shutdown) # Shutdown Tuxedo from previous runs.
+ echo 'y' | tmshutdown -w 5;;
+ *)
+ echo 'usage: chk.xa [clean | shutdown]'
+ exit 1;;
+ esac
+else
+ run # Run the XA test.
+ if test "$?" -ne 0; then
+ exit 1
+ fi
+fi
+
+exit 0
diff --git a/db/test/scr031/src/client.c b/db/test/scr031/src/client.c
new file mode 100644
index 000000000..cdb71511a
--- /dev/null
+++ b/db/test/scr031/src/client.c
@@ -0,0 +1,339 @@
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <tx.h>
+#include <atmi.h>
+#include <fml32.h>
+#include <fml1632.h>
+
+#include <db.h>
+
+#include "datafml.h"
+#include "hdbrec.h"
+#include "hcommonxa.h"
+#include "htimestampxa.h"
+
+#define HOME "../data"
+#define TABLE1 "../data/table1.db"
+#define TABLE3 "../data/table3.db"
+
+#ifdef VERBOSE
+static int verbose = 1; /* Debugging output. */
+#else
+static int verbose = 0;
+#endif
+
+DB_ENV *dbenv;
+char *progname; /* Client run-time name. */
+
+int check_data(DB *);
+char *db_buf(DBT *);
+int usage(void);
+
+int
+main(int argc, char* argv[])
+{
+ DB *dbp3;
+ DBT key, data;
+ FBFR *buf, *replyBuf;
+ HDbRec rec;
+ TPINIT *initBuf;
+ long len, replyLen, seqNo;
+ int ch, cnt, cnt_abort, cnt_commit, cnt_server1, i, ret;
+ char *target;
+
+ progname = argv[0];
+
+ dbp3 = NULL;
+ buf = replyBuf = NULL;
+ initBuf = NULL;
+ cnt = 1000;
+ cnt_abort = cnt_commit = cnt_server1 = 0;
+
+ while ((ch = getopt(argc, argv, "n:v")) != EOF)
+ switch (ch) {
+ case 'n':
+ cnt = atoi(optarg);
+ break;
+ case 'v':
+ verbose = 1;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (verbose)
+ printf("%s: called\n", progname);
+
+ /* Seed random number generator. */
+ srand((u_int)(time(NULL) | getpid()));
+
+ if (tpinit((TPINIT *)NULL) == -1)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpinit() OK\n", progname);
+
+ /* Allocate init buffer */
+ if((initBuf = (TPINIT *)tpalloc("TPINIT", NULL, TPINITNEED(0))) == 0)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpalloc(\"TPINIT\") OK\n", progname);
+
+ /* Join the DB environment. */
+ if ((ret = db_env_create(&dbenv, 0)) != 0 ||
+ (ret = dbenv->open(dbenv, HOME, DB_JOINENV, 0)) != 0) {
+ fprintf(stderr,
+ "%s: %s: %s\n", progname, HOME, db_strerror(ret));
+ goto err;
+ }
+ dbenv->set_errfile(dbenv, stderr);
+ if (verbose)
+ printf("%s: opened %s OK\n", progname, HOME);
+
+ /* Open table #3 -- truncate it for each new run. */
+ if ((ret = db_create(&dbp3, dbenv, 0)) != 0 ||
+ (ret = dbp3->open(dbp3,
+ NULL, TABLE3, NULL, DB_BTREE, DB_CREATE, 0660)) != 0) {
+ fprintf(stderr,
+ "%s: %s %s\n", progname, TABLE3, db_strerror(ret));
+ goto err;
+ }
+ if (verbose)
+ printf("%s: opened/truncated %s OK\n", progname, TABLE3);
+
+ /* Allocate send buffer. */
+ len = Fneeded(1, 3 * sizeof(long));
+ if ((buf = (FBFR*)tpalloc("FML32", NULL, len)) == 0)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpalloc(\"FML32\"), send buffer OK\n", progname);
+
+ /* Allocate reply buffer. */
+ replyLen = 1024;
+ if ((replyBuf = (FBFR*)tpalloc("FML32", NULL, replyLen)) == NULL)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpalloc(\"FML32\"), reply buffer OK\n", progname);
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ for (rec.SeqNo = 1, i = 0; i < cnt; ++i, ++rec.SeqNo) {
+ GetTime(&rec.Ts);
+
+ if (Fchg(buf, SEQ_NO, 0, (char *)&rec.SeqNo, 0) == -1)
+ goto tuxedo_fml_err;
+ if (verbose)
+ printf("%s: Fchg(), sequence number OK\n", progname);
+ if (Fchg(buf, TS_SEC, 0, (char *)&rec.Ts.Sec, 0) == -1)
+ goto tuxedo_fml_err;
+ if (verbose)
+ printf("%s: Fchg(), seconds OK\n", progname);
+ if (Fchg(buf, TS_USEC, 0, (char *)&rec.Ts.Usec, 0) == -1)
+ goto tuxedo_fml_err;
+ if (verbose)
+ printf("%s: Fchg(), microseconds OK\n", progname);
+
+ if (tpbegin(60L, 0L) == -1)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpbegin() OK\n", progname);
+
+ /* Randomly send half of our requests to each server. */
+ if (rand() % 2 > 0) {
+ ++cnt_server1;
+ target = "TestTxn1";
+ } else
+ target = "TestTxn2";
+ if (tpcall(target, (char *)buf,
+ 0L, (char **)&replyBuf, &replyLen, TPSIGRSTRT) == -1)
+ goto tuxedo_err;
+
+ /* Commit for a return value of 0, otherwise abort. */
+ if (tpurcode == 0) {
+ ++cnt_commit;
+ if (verbose)
+ printf("%s: txn success\n", progname);
+
+ if (tpcommit(0L) == -1)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpcommit() OK\n", progname);
+
+ /*
+ * Store a copy of the key/data pair into table #3
+ * on success, we'll compare table #1 and table #3
+ * after the run finishes.
+ */
+ seqNo = rec.SeqNo;
+ key.data = &seqNo;
+ key.size = sizeof(seqNo);
+ data.data = &rec;
+ data.size = sizeof(rec);
+ if ((ret =
+ dbp3->put(dbp3, NULL, &key, &data, 0)) != 0) {
+ fprintf(stderr, "%s: DB->put: %s %s\n",
+ progname, TABLE3, db_strerror(ret));
+ goto err;
+ }
+ } else {
+ ++cnt_abort;
+ if (verbose)
+ printf("%s: txn failure\n", progname);
+
+ if (tpabort(0L) == -1)
+ goto tuxedo_err;
+ if (verbose)
+ printf("%s: tpabort() OK\n", progname);
+ }
+ }
+
+ printf("%s: %d requests: %d committed, %d aborted\n",
+ progname, cnt, cnt_commit, cnt_abort);
+ printf("%s: %d sent to server #1, %d sent to server #2\n",
+ progname, cnt_server1, cnt - cnt_server1);
+
+ ret = check_data(dbp3);
+
+ if (0) {
+tuxedo_err: fprintf(stderr, "%s: TUXEDO ERROR: %s (code %d)\n",
+ progname, tpstrerror(tperrno), tperrno);
+ goto err;
+ }
+ if (0) {
+tuxedo_fml_err: fprintf(stderr, "%s: FML ERROR: %s (code %d)\n",
+ progname, Fstrerror(Ferror), Ferror);
+ }
+ if (0) {
+err: ret = EXIT_FAILURE;
+ }
+
+ if (replyBuf != NULL)
+ tpfree((char *)replyBuf);
+ if (buf != NULL)
+ tpfree((char *)buf);
+ if (initBuf != NULL)
+ tpfree((char *)initBuf);
+ if (dbp3 != NULL)
+ (void)dbp3->close(dbp3, 0);
+ if (dbenv != NULL)
+ (void)dbenv->close(dbenv, 0);
+
+ tpterm();
+ if (verbose)
+ printf("%s: tpterm() OK\n", progname);
+
+ return (ret);
+}
+
+/*
+ * check_data --
+ * Compare committed data with our local copy, stored in table3.
+ */
+int
+check_data(dbp3)
+ DB *dbp3;
+{
+ DB *dbp1;
+ DBC *dbc1, *dbc3;
+ DBT key1, data1, key3, data3;
+ int ret, ret1, ret3;
+
+ dbp1 = NULL;
+ dbc1 = dbc3 = NULL;
+
+ /* Open table #1. */
+ if ((ret = db_create(&dbp1, dbenv, 0)) != 0 ||
+ (ret = dbp1->open(
+ dbp1, NULL, TABLE1, NULL, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ fprintf(stderr,
+ "%s: %s: %s\n", progname, TABLE1, db_strerror(ret));
+ goto err;
+ }
+ if (verbose)
+ printf("%s: opened %s OK\n", progname, TABLE1);
+
+ /* Open cursors. */
+ if ((ret = dbp1->cursor(dbp1, NULL, &dbc1, 0)) != 0 ||
+ (ret = dbp3->cursor(dbp3, NULL, &dbc3, 0)) != 0) {
+ fprintf(stderr,
+ "%s: DB->cursor: %s\n", progname, db_strerror(ret));
+ goto err;
+ }
+ if (verbose)
+ printf("%s: opened cursors OK\n", progname);
+
+ /* Compare the two databases. */
+ memset(&key1, 0, sizeof(key1));
+ memset(&data1, 0, sizeof(data1));
+ memset(&key3, 0, sizeof(key3));
+ memset(&data3, 0, sizeof(data3));
+ for (;;) {
+ ret1 = dbc1->c_get(dbc1, &key1, &data1, DB_NEXT);
+ ret3 = dbc3->c_get(dbc3, &key3, &data3, DB_NEXT);
+ if (verbose) {
+ printf("get: key1: %s\n", db_buf(&key1));
+ printf("get: key3: %s\n", db_buf(&key3));
+ printf("get: data1: %s\n", db_buf(&data1));
+ printf("get: data3: %s\n", db_buf(&data3));
+ }
+ if (ret1 != 0 || ret3 != 0)
+ break;
+ /*
+ * Only compare the first N bytes, the saved message chunks
+ * are different.
+ */
+ if (key1.size != key3.size ||
+ memcmp(key1.data, key3.data, key1.size) != 0 ||
+ data1.size != data3.size ||
+ memcmp(data1.data, data3.data,
+ sizeof(long) + sizeof(HTimestampData)) != 0)
+ goto mismatch;
+ }
+ if (ret1 != DB_NOTFOUND || ret3 != DB_NOTFOUND) {
+mismatch: fprintf(stderr,
+ "%s: DB_ERROR: databases 1 and 3 weren't identical\n",
+ progname);
+ ret = 1;
+ }
+
+err: if (dbc1 != NULL)
+ (void)dbc1->c_close(dbc1);
+ if (dbc3 != NULL)
+ (void)dbc3->c_close(dbc3);
+ if (dbp1 != NULL)
+ (void)dbp1->close(dbp1, 0);
+
+ return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+char *
+db_buf(dbt)
+ DBT *dbt;
+{
+ static u_char buf[1024];
+ size_t len;
+ u_char *p, *b;
+
+ for (p = dbt->data, len = dbt->size, b = buf; len > 0; ++p, --len)
+ if (isprint(*p))
+ b += sprintf((char *)b, "%c", *p);
+ else
+ b += sprintf((char *)b, "%#o", *p);
+ return ((char *)buf);
+}
+
+int
+usage()
+{
+ fprintf(stderr, "usage: %s [-v] [-n txn]\n", progname);
+ return (EXIT_FAILURE);
+}
diff --git a/db/test/scr031/src/datafml.fml b/db/test/scr031/src/datafml.fml
new file mode 100644
index 000000000..d503759a0
--- /dev/null
+++ b/db/test/scr031/src/datafml.fml
@@ -0,0 +1,5 @@
+# datafml.fml was generated by tuxdev on 12/18/98 @ 12:15:33 ***** DO NOT EDIT *****
+
+SEQ_NO 401 long -
+TS_SEC 402 long -
+TS_USEC 403 long -
diff --git a/db/test/scr031/src/datafml.h b/db/test/scr031/src/datafml.h
new file mode 100644
index 000000000..143b484ea
--- /dev/null
+++ b/db/test/scr031/src/datafml.h
@@ -0,0 +1,5 @@
+/* fname fldid */
+/* ----- ----- */
+#define SEQ_NO ((FLDID32)33554833) /* number: 401 type: long */
+#define TS_SEC ((FLDID32)33554834) /* number: 402 type: long */
+#define TS_USEC ((FLDID32)33554835) /* number: 403 type: long */
diff --git a/db/test/scr031/src/hcommonxa.h b/db/test/scr031/src/hcommonxa.h
new file mode 100644
index 000000000..0623c262f
--- /dev/null
+++ b/db/test/scr031/src/hcommonxa.h
@@ -0,0 +1,8 @@
+#ifndef HCOMMONXA_H
+#define HCOMMONXA_H
+
+#define HERR_SYS_CUR 102
+#define HERR_TUX_CUR 103
+#define HERR_FML_CUR 104
+
+#endif
diff --git a/db/test/scr031/src/hdbrec.h b/db/test/scr031/src/hdbrec.h
new file mode 100644
index 000000000..bc947217c
--- /dev/null
+++ b/db/test/scr031/src/hdbrec.h
@@ -0,0 +1,14 @@
+#ifndef HDBREC_H
+#define HDBREC_H
+
+#include "htimestampxa.h"
+
+/*
+ * DB record
+ */
+typedef struct __HDbRec {
+ long SeqNo;
+ HTimestampData Ts;
+ char Msg[10];
+} HDbRec;
+#endif
diff --git a/db/test/scr031/src/htimestampxa.c b/db/test/scr031/src/htimestampxa.c
new file mode 100644
index 000000000..0e73e6aa4
--- /dev/null
+++ b/db/test/scr031/src/htimestampxa.c
@@ -0,0 +1,14 @@
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include "htimestampxa.h"
+
+void
+GetTime(HTimestampData *ts)
+{
+ struct timeval timeNow;
+
+ (void)gettimeofday(&timeNow, 0);
+ ts->Sec = timeNow.tv_sec;
+ ts->Usec = timeNow.tv_usec;
+}
diff --git a/db/test/scr031/src/htimestampxa.h b/db/test/scr031/src/htimestampxa.h
new file mode 100644
index 000000000..338bc55b8
--- /dev/null
+++ b/db/test/scr031/src/htimestampxa.h
@@ -0,0 +1,13 @@
+#ifndef HTIMESTAMPXA_H
+#define HTIMESTAMPXA_H
+
+/*
+ * Timestamp with microseconds precision
+ */
+typedef struct __HTimestampData {
+ time_t Sec;
+ time_t Usec;
+} HTimestampData;
+
+void GetTime(HTimestampData *);
+#endif
diff --git a/db/test/scr031/src/server.c b/db/test/scr031/src/server.c
new file mode 100644
index 000000000..4353ee926
--- /dev/null
+++ b/db/test/scr031/src/server.c
@@ -0,0 +1,287 @@
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <atmi.h>
+#include <fml1632.h>
+#include <fml32.h>
+#include <tx.h>
+#include <xa.h>
+
+#include <db.h>
+
+#include "datafml.h"
+#include "hdbrec.h"
+#include "hcommonxa.h"
+#include "htimestampxa.h"
+
+/*
+ * The two servers are largely identical, #ifdef the source code.
+ */
+#ifdef SERVER1
+#define TXN_FUNC TestTxn1
+#define TXN_STRING "TestTxn1"
+#endif
+#ifdef SERVER2
+#define TXN_FUNC TestTxn2
+#define TXN_STRING "TestTxn2"
+#endif
+void TXN_FUNC(TPSVCINFO *);
+
+#define HOME "../data"
+#define TABLE1 "table1.db"
+#define TABLE2 "table2.db"
+
+#ifdef VERBOSE
+static int verbose = 1; /* Debugging output. */
+#else
+static int verbose = 0;
+#endif
+
+DB *db1, *db2; /* Table handles. */
+
+int cnt_forward; /* Forwarded requests. */
+int cnt_request; /* Total requests. */
+
+char *progname; /* Server run-time name. */
+
+char *db_buf(DBT *);
+
+int
+tpsvrinit(int argc, char* argv[])
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ progname = argv[0];
+ if (verbose)
+ printf("%s: called\n", progname);
+
+ /*
+ * This is all Berkeley DB specific.
+ *
+ * Open the environment and clear tables #1 and #2. We do this with
+ * our own DB_ENV handle -- Berkeley DB doesn't require servers know
+ * where the database environment is, but it's pretty much necessary
+ * if you want to do anything tricky.
+ */
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(stderr, "db_env_create: %s\n", db_strerror(ret));
+ return (-1);
+ }
+ if ((ret = dbenv->open(dbenv, HOME, DB_JOINENV, 0)) != 0) {
+ fprintf(stderr,
+ "DB_ENV->open: %s: %s\n", HOME, db_strerror(ret));
+ return (-1);
+ }
+ if ((ret = db_create(&db1, dbenv, 0)) != 0) {
+ fprintf(stderr, "db_create: %s\n", db_strerror(ret));
+ return (-1);
+ }
+ db1->set_errfile(db1, stderr);
+ if ((ret = db1->open(db1, NULL,
+ TABLE1, NULL, DB_BTREE, DB_AUTO_COMMIT | DB_CREATE, 0660)) != 0 ||
+ (ret = db1->truncate(db1, NULL, NULL, 0)) != 0) {
+ fprintf(stderr,
+ "DB open/truncate: %s: %s\n", TABLE1, db_strerror(ret));
+ return (-1);
+ }
+ if ((ret = db_create(&db2, dbenv, 0)) != 0) {
+ fprintf(stderr, "db_create: %s\n", db_strerror(ret));
+ return (-1);
+ }
+ db2->set_errfile(db2, stderr);
+ if ((ret = db2->open(db2, NULL,
+ TABLE2, NULL, DB_BTREE, DB_AUTO_COMMIT | DB_CREATE, 0660)) != 0 ||
+ (ret = db2->truncate(db2, NULL, NULL, 0)) != 0) {
+ fprintf(stderr,
+ "DB open/truncate: %s: %s\n", TABLE2, db_strerror(ret));
+ return (-1);
+ }
+
+ /* We're done -- discard our handles. */
+ if ((ret = db1->close(db1, 0)) != 0) {
+ fprintf(stderr,
+ "DB->close: %s: %s\n", TABLE1, db_strerror(ret));
+ return (-1);
+ }
+ if ((ret = db2->close(db2, 0)) != 0) {
+ fprintf(stderr,
+ "DB->close: %s: %s\n", TABLE2, db_strerror(ret));
+ return (-1);
+ }
+ if ((ret = dbenv->close(dbenv, 0)) != 0) {
+ fprintf(stderr,
+ "DB_ENV->close: %s: %s\n", HOME, db_strerror(ret));
+ return (-1);
+ }
+ /* End Berkeley DB specific setup. */
+
+ /* Open resource managers. */
+ if (tx_open() == TX_ERROR) {
+ fprintf(stderr, "tx_open: TX_ERROR\n");
+ return (-1);
+ }
+
+ /* Seed random number generator. */
+ srand((u_int)(time(NULL) | getpid()));
+
+ /* Open permanent XA handles. */
+ if ((ret = db_create(&db1, NULL, DB_XA_CREATE)) != 0) {
+ fprintf(stderr, "db_create: %s\n", db_strerror(ret));
+ return (-1);
+ }
+ db1->set_errfile(db1, stderr);
+ if ((ret = db1->open(db1, NULL,
+ TABLE1, NULL, DB_BTREE, DB_AUTO_COMMIT | DB_CREATE, 0660)) != 0) {
+ fprintf(stderr, "DB open: %s: %s\n", TABLE1, db_strerror(ret));
+ return (-1);
+ }
+ if ((ret = db_create(&db2, NULL, DB_XA_CREATE)) != 0) {
+ fprintf(stderr, "db_create: %s\n", db_strerror(ret));
+ return (-1);
+ }
+ db2->set_errfile(db2, stderr);
+ if ((ret = db2->open(db2, NULL,
+ TABLE2, NULL, DB_BTREE, DB_AUTO_COMMIT | DB_CREATE, 0660)) != 0) {
+ fprintf(stderr, "DB open: %s: %s\n", TABLE2, db_strerror(ret));
+ return (-1);
+ }
+
+ if (verbose)
+ printf("%s: tpsvrinit: initialization done\n", progname);
+
+ return (0);
+}
+
+void
+tpsvrdone()
+{
+ if (db1 != NULL)
+ (void)db1->close(db1, 0);
+ if (db2 != NULL)
+ (void)db2->close(db2, 0);
+
+ tx_close();
+
+ if (verbose)
+ printf("%s: tpsvrdone: shutdown done\n", progname);
+
+ printf("%s: %d requests, %d requests forwarded to the other server\n",
+ progname, cnt_request, cnt_forward);
+}
+
+void
+TXN_FUNC(TPSVCINFO *msg)
+{
+ DBT data;
+ DBT key;
+ FBFR *replyBuf;
+ HDbRec rcrd;
+ long replyLen, seqNo;
+ int ret;
+
+ ++cnt_request;
+
+#ifdef SERVER1
+ /*
+ * Test that servers can forward to other servers. Randomly forward
+ * half of server #1's requests to server #2.
+ */
+ if (rand() % 2 > 0) {
+ ++cnt_forward;
+
+ replyLen = 1024;
+ if ((replyBuf =
+ (FBFR*)tpalloc("FML32", NULL, replyLen)) == NULL ||
+ tpcall("TestTxn2", msg->data,
+ 0, (char**)&replyBuf, &replyLen, TPSIGRSTRT) == -1) {
+ fprintf(stderr, "%s: TUXEDO ERROR: %s (code %d)\n",
+ progname, tpstrerror(tperrno), tperrno);
+ tpfree((char*)replyBuf);
+ tpreturn(TPFAIL, 0L, 0, 0L, 0);
+ } else {
+ tpfree((char*)replyBuf);
+ tpreturn(TPSUCCESS, tpurcode, 0, 0L, 0);
+ }
+ return;
+ }
+#endif
+ /* Read the record. */
+ if (Fget((FBFR*)msg->data, SEQ_NO, 0, (char *)&rcrd.SeqNo, 0) == -1)
+ goto fml_err;
+ if (Fget((FBFR*)msg->data, TS_SEC, 0, (char *)&rcrd.Ts.Sec, 0) == -1)
+ goto fml_err;
+ if (Fget(
+ (FBFR*)msg->data, TS_USEC, 0, (char *)&rcrd.Ts.Usec, 0) == -1) {
+fml_err: fprintf(stderr, "%s: FML ERROR: %s (code %d)\n",
+ progname, Fstrerror(Ferror), Ferror);
+ goto err;
+ }
+
+ seqNo = rcrd.SeqNo; /* Update the record. */
+ memset(&key, 0, sizeof(key));
+ key.data = &seqNo;
+ key.size = sizeof(seqNo);
+ memset(&data, 0, sizeof(data));
+ data.data = &rcrd;
+ data.size = sizeof(rcrd);
+
+ strcpy(rcrd.Msg, "Table1"); /* Table 1. */
+ if (verbose) {
+ printf("put1: key: %s\n", db_buf(&key));
+ printf("put1: data: %s\n", db_buf(&data));
+ }
+ if ((ret = db1->put(db1, NULL, &key, &data, 0)) != 0) {
+ fprintf(stderr, "%s: %s: Table1->put: %s\n",
+ progname, TXN_STRING, db_strerror(ret));
+ goto err;
+ }
+
+ strcpy(rcrd.Msg, "Table2"); /* Table 2. */
+ if ((ret = db2->put(db2, NULL, &key, &data, 0)) != 0) {
+ fprintf(stderr, "%s: %s: Table2->put: %s\n",
+ progname, TXN_STRING, db_strerror(ret));
+ goto err;
+ }
+
+ /*
+ * Decide if the client is going to commit the global transaction or
+ * not, testing the return-value path back to the client; this is the
+ * path we'd use to resolve deadlock, for example. Commit 80% of the
+ * time. Returning 0 causes the client to commit, 1 to abort.
+ */
+ if (rand() % 10 > 7) {
+ if (verbose)
+ printf("%s: %s: commit\n", progname, TXN_STRING);
+ tpreturn(TPSUCCESS, 0L, 0, 0L, 0);
+ } else {
+ if (verbose)
+ printf("%s: %s: abort\n", progname, TXN_STRING);
+ tpreturn(TPSUCCESS, 1L, 0, 0L, 0);
+ }
+ return;
+
+err: tpreturn(TPFAIL, 1L, 0, 0L, 0);
+}
+
+char *
+db_buf(dbt)
+ DBT *dbt;
+{
+ static u_char buf[1024];
+ size_t len;
+ u_char *p, *b;
+
+ for (p = dbt->data, len = dbt->size, b = buf; len > 0; ++p, --len)
+ if (isprint(*p))
+ b += sprintf((char *)b, "%c", *p);
+ else
+ b += sprintf((char *)b, "%#o", *p);
+ return ((char *)buf);
+}
diff --git a/db/test/scr032/chk.rpc b/db/test/scr032/chk.rpc
new file mode 100644
index 000000000..0627bd98b
--- /dev/null
+++ b/db/test/scr032/chk.rpc
@@ -0,0 +1,82 @@
+#!/bin/sh -
+#
+# $Id: chk.rpc,v 1.2 2006/09/11 15:40:46 bostic Exp $
+#
+# Check to make sure that the code samples in the documents build.
+
+r=../../rpc_server/rpc.src
+i=../../dbinc/db.in
+
+t1=__1
+t2=__2
+
+[ -d ../../dbinc ] || {
+ echo 'FAIL: cannot find source distribution directory.'
+ exit 1
+}
+
+exitv=0
+
+# $1: handle name
+# $2: handle prefix
+# $3: method file
+check()
+{
+ echo "==== Checking $1/$2..."
+
+ # Build a list of DB_ENV handle methods from the include file.
+ sed -e "/$1 PUBLIC HANDLE LIST BEGIN/,/$1 PUBLIC HANDLE LIST END/p" \
+ -e d < $i |
+ grep '[\* ](\*[a-z]' |
+ sed -e 's/).*$//' \
+ -e 's/.*(\*//' \
+ -e '/^$/d' > $t1
+
+ # Build a list of handle methods from the rpc.src file.
+ egrep '^BEGIN|^LOCAL|^NOFUNC' $r |
+ awk '{print $2}' |
+ egrep "^$2_" |
+ sed -e "/^$2_create/d" \
+ -e "s/$2_//" > $t2
+
+ if cmp -s $t1 $t2 ; then
+ :
+ else
+ echo "FAIL: $1 handle methods do not match."
+ echo "<<< dbinc/db.in >>> rpc_server/rpc.src"
+ diff $t1 $t2
+ exit 1
+ fi
+
+ if [ -z "$3" ]; then
+ return
+ fi
+
+ # Build a list of handle methods from the env/env_method.c and
+ # db/db_method.c files.
+ sed -e "/$1 PUBLIC HANDLE LIST BEGIN/,/$1 PUBLIC HANDLE LIST END/p" \
+ -e d < "$3" |
+ sed -e '/^#ifdef.HAVE_REPLICATION_THREADS/d' \
+ -e '/^#else.*HAVE_REPLICATION_THREADS/,/^#endif/d' \
+ -e '/PUBLIC/d' \
+ -e 's/ = .*//' \
+ -e 's/^.*->//' > $t2
+
+ if cmp -s $t1 $t2 ; then
+ :
+ else
+ echo "FAIL: $1 handle methods do not match."
+ echo "<<< dbinc/db.in >>> $3"
+ diff $t1 $t2
+ exit 1
+ fi
+}
+
+# We don't check the DB handle method limits from db/db_method.c, DB handle
+# methods are set in per-access method routines, they aren't consolidated.
+check DB db
+check DBC dbc
+check DB_ENV env ../../env/env_method.c
+check DB_TXN txn
+
+exit $exitv
diff --git a/db/test/sdb001.tcl b/db/test/sdb001.tcl
index 4ebb24dea..d4f6e2b48 100644
--- a/db/test/sdb001.tcl
+++ b/db/test/sdb001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb001.tcl,v 11.23 2004/04/05 17:49:25 carol Exp $
+# $Id: sdb001.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST sdb001 Tests mixing db and subdb operations
# TEST Tests mixing db and subdb operations
diff --git a/db/test/sdb002.tcl b/db/test/sdb002.tcl
index d951d7163..7c396b2c7 100644
--- a/db/test/sdb002.tcl
+++ b/db/test/sdb002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb002.tcl,v 11.41 2004/04/05 17:49:26 carol Exp $
+# $Id: sdb002.tcl,v 12.3 2006/08/24 14:46:38 bostic Exp $
#
# TEST sdb002
# TEST Tests basic subdb functionality
diff --git a/db/test/sdb003.tcl b/db/test/sdb003.tcl
index c652a76d6..5af8f1e6c 100644
--- a/db/test/sdb003.tcl
+++ b/db/test/sdb003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb003.tcl,v 11.29 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb003.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb003
# TEST Tests many subdbs
diff --git a/db/test/sdb004.tcl b/db/test/sdb004.tcl
index 273bda9bf..03f4a253a 100644
--- a/db/test/sdb004.tcl
+++ b/db/test/sdb004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb004.tcl,v 11.25 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb004.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb004
# TEST Tests large subdb names
diff --git a/db/test/sdb005.tcl b/db/test/sdb005.tcl
index 7173bef00..68acc2b8c 100644
--- a/db/test/sdb005.tcl
+++ b/db/test/sdb005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb005.tcl,v 11.21 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb005.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb005
# TEST Tests cursor operations in subdbs
diff --git a/db/test/sdb006.tcl b/db/test/sdb006.tcl
index ffe3e4700..89ee6a747 100644
--- a/db/test/sdb006.tcl
+++ b/db/test/sdb006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb006.tcl,v 11.23 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb006.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb006
# TEST Tests intra-subdb join
diff --git a/db/test/sdb007.tcl b/db/test/sdb007.tcl
index 86f465992..6ad1a6488 100644
--- a/db/test/sdb007.tcl
+++ b/db/test/sdb007.tcl
@@ -1,23 +1,26 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb007.tcl,v 11.25 2004/09/22 18:01:06 bostic Exp $
+# $Id: sdb007.tcl,v 12.5 2006/08/24 14:46:39 bostic Exp $
#
# 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)
+# TEST If the physical file already exists, we ignore pagesize specifications
+# TEST on any subsequent -creates.
+# TEST
+# TEST 1. Create/open a subdb with system default page size.
+# TEST Create/open a second subdb specifying a different page size.
+# TEST The create should succeed, but the pagesize of the new db
+# TEST will be the system default page size.
+# TEST 2. Create/open a subdb with a specified, non-default page size.
+# TEST Create/open a second subdb specifying a different page size.
+# TEST The create should succeed, but the pagesize of the new db
+# TEST will be the specified page size from the first create.
+
proc sdb007 { method args } {
source ./include.tcl
- global is_envmethod
set db2args [convert_args -btree $args]
set args [convert_args $method $args]
@@ -64,78 +67,43 @@ proc sdb007 { method args } {
puts "\tSubdb007.a.0: create subdb with default page size"
set db [eval {berkdb_open -create -mode 0644} \
- $args {$omethod $testfile $sub1}]
+ $args $envargs {$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]
- }
- }
+
+ # Figure out what the default page size is so that we can send
+ # a different value to the next -create call.
+ set default_psize [stat_field $db stat "Page size"]
error_check_good dbclose [$db close] 0
- if { $pgsz == 512 } {
- set pgsz2 2048
+ if { $default_psize == 512 } {
+ set psize 2048
} else {
- set pgsz2 512
+ set psize 512
}
- 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
- }
+ puts "\tSubdb007.a.1: Create 2nd subdb with different specified page size"
+ set db2 [eval {berkdb_open -create -btree} \
+ $db2args $envargs {-pagesize $psize $testfile $sub2}]
+ error_check_good db2_create [is_valid_db $db2] TRUE
- 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 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
- }
+ set actual_psize [stat_field $db2 stat "Page size"]
+ error_check_good check_pagesize [expr $actual_psize == $default_psize] 1
+ error_check_good db2close [$db2 close] 0
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"
+ puts "\tSubdb007.b.0: Create subdb with specified page size"
set db [eval {berkdb_open -create -mode 0644} \
- $args {-pagesize $pgsz2 $omethod $testfile $sub2}]
+ $args $envargs {-pagesize $psize $omethod $testfile $sub1}]
error_check_good subdb [is_valid_db $db] TRUE
error_check_good dbclose [$db close] 0
+ puts "\tSubdb007.b.1: Create 2nd subdb with different specified page size"
+ set newpsize [expr $psize * 2]
+ set db2 [eval {berkdb_open -create -mode 0644} $args \
+ $envargs {-pagesize $newpsize $omethod $testfile $sub2}]
+ error_check_good subdb [is_valid_db $db2] TRUE
+ set actual_psize [stat_field $db2 stat "Page size"]
+ error_check_good check_pagesize [expr $actual_psize == $psize] 1
+ error_check_good db2close [$db2 close] 0
}
diff --git a/db/test/sdb008.tcl b/db/test/sdb008.tcl
index 3beb8313b..1277deb04 100644
--- a/db/test/sdb008.tcl
+++ b/db/test/sdb008.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb008.tcl,v 11.31 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb008.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb008
# TEST Tests explicit setting of lorders for subdatabases -- the
diff --git a/db/test/sdb009.tcl b/db/test/sdb009.tcl
index 3f36a27d7..3e4541c0d 100644
--- a/db/test/sdb009.tcl
+++ b/db/test/sdb009.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb009.tcl,v 11.12 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb009.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb009
# TEST Test DB->rename() method for subdbs
diff --git a/db/test/sdb010.tcl b/db/test/sdb010.tcl
index 8f1d6f8a1..5c3602907 100644
--- a/db/test/sdb010.tcl
+++ b/db/test/sdb010.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb010.tcl,v 11.19 2004/10/18 17:34:17 carol Exp $
+# $Id: sdb010.tcl,v 12.4 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb010
# TEST Test DB->remove() method and DB->truncate() for subdbs
@@ -27,7 +27,7 @@ proc sdb010 { method args } {
#
# If we are not given an env, create one.
if { $eindex == -1 } {
- set env [berkdb_env -create -home $testdir -mode 0644]
+ set env [berkdb_env -create -home $testdir -mode 0644]
error_check_good env_open [is_valid_env $env] TRUE
} else {
incr eindex
diff --git a/db/test/sdb011.tcl b/db/test/sdb011.tcl
index d36b83e5d..9690de261 100644
--- a/db/test/sdb011.tcl
+++ b/db/test/sdb011.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb011.tcl,v 11.14 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb011.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb011
# TEST Test deleting Subdbs with overflow pages
diff --git a/db/test/sdb012.tcl b/db/test/sdb012.tcl
index d316acb71..19ba276bd 100644
--- a/db/test/sdb012.tcl
+++ b/db/test/sdb012.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdb012.tcl,v 1.6 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdb012.tcl,v 12.5 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdb012
# TEST Test subdbs with locking and transactions
@@ -50,6 +50,9 @@ proc sdb012 { method args } {
# aborted or committed. It is not used and has no meaning
# in the removal case. 'auto' means use the -auto_commit flag
# to the operation, and 'abort' and 'commit' do the obvious.
+ # "-auto" is applied only to the creation of the subdbs, since
+ # it is done by default on database removes in transactional
+ # environments.
#
# First test locking w/o txns. If any in tlist are 'none',
# all must be none.
@@ -67,9 +70,14 @@ proc sdb012 { method args } {
}
}
set tlet [lindex $testlet $count]
- foreach r1 { none abort auto commit } {
- foreach r2 { none abort auto commit } {
+ foreach r1 { none abort commit } {
+ foreach r2 { none abort commit } {
set tlist [list $t1 $t2 $r1 $r2]
+ set nnone [llength \
+ [lsearch -all $tlist none]]
+ if { $nnone != 0 && $nnone != 4 } {
+ continue
+ }
sdb012_body $testdir $omethod $largs \
$encargs $sdb$tlet $tlist
}
@@ -382,10 +390,9 @@ proc sdb012_body { testdir omethod largs encargs msg tlist } {
set r [eval $rop1]
error_check_good rop1 $r 0
-
# Verify removal of subdb2. All DB handles are closed now.
# So we have two scenarios:
- # 1. The removal of subdb2 above was successful and subdb2
+ # 1. The removal of subdb2 above was successful and subdb2
# doesn't exist and we should fail that way.
# 2. The removal of subdb2 above was aborted, and this
# removal should succeed.
@@ -401,7 +408,7 @@ proc sdb012_body { testdir omethod largs encargs msg tlist } {
# Verify removal of subdb1. All DB handles are closed now.
# So we have two scenarios:
- # 1. The removal of subdb1 above was successful and subdb1
+ # 1. The removal of subdb1 above was successful and subdb1
# doesn't exist and we should fail that way.
# 2. The removal of subdb1 above was aborted, and this
# removal should succeed.
diff --git a/db/test/sdb013.tcl b/db/test/sdb013.tcl
new file mode 100644
index 000000000..3580b00b0
--- /dev/null
+++ b/db/test/sdb013.tcl
@@ -0,0 +1,174 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb013.tcl,v 12.10 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb013
+# TEST Tests in-memory subdatabases.
+# TEST Create an in-memory subdb. Test for persistence after
+# TEST overflowing the cache. Test for conflicts when we have
+# TEST two in-memory files.
+
+proc sdb013 { method { nentries 10 } args } {
+ source ./include.tcl
+
+ set tnum "013"
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb$tnum: skipping for method $method"
+ return
+ }
+
+ puts "Subdb$tnum: $method ($args) in-memory subdb tests"
+
+ # If we are using an env, then skip this test. It needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ set env NULL
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb$tnum skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ # Create the env, with a very small cache that we can easily
+ # fill. If a particularly large page size is specified, make
+ # the cache a little larger, but still on the small side.
+ env_cleanup $testdir
+ set csize {0 65536 1}
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ incr pgindex
+ set pagesize [lindex $args $pgindex]
+ if { $pagesize > 8192 } {
+ set cache [expr 4 * $pagesize]
+ set csize "0 $cache 1"
+ }
+ }
+
+ set env [berkdb_env_noerr -create -cachesize $csize -home $testdir -txn]
+ error_check_good dbenv [is_valid_env $env] TRUE
+
+ # Set filename to NULL; this causes the creation of an in-memory
+ # subdb.
+ set testfile ""
+ set subdb subdb0
+
+ puts "\tSubdb$tnum.a: Create in-mem subdb, add data, close."
+ set sdb [eval {berkdb_open_noerr -create -mode 0644} \
+ $args -env $env -auto_commit {$omethod $testfile $subdb}]
+ error_check_good dbopen [is_valid_db $sdb] TRUE
+
+ set ret [sdb013_populate $sdb $method $nentries]
+ error_check_good populate $ret 0
+ error_check_good sdb_close [$sdb close] 0
+
+ # Do a bunch of writing to evict all pages from the memory pool.
+ puts "\tSubdb$tnum.b: Create another db, overflow the cache."
+ set dummyfile foo.db
+ set db [eval {berkdb_open_noerr -create -mode 0644} $args -env $env\
+ -auto_commit $omethod $dummyfile]
+ error_check_good dummy_open [is_valid_db $db] TRUE
+
+ set entries [expr $nentries * 100]
+ set ret [sdb013_populate $db $method $entries]
+ error_check_good dummy_close [$db close] 0
+
+ # Make sure we can still open the in-memory subdb.
+ puts "\tSubdb$tnum.c: Check we can still open the in-mem subdb."
+ set sdb [eval {berkdb_open_noerr} \
+ $args -env $env -auto_commit {$omethod $testfile $subdb}]
+ error_check_good sdb_reopen [is_valid_db $sdb] TRUE
+ error_check_good sdb_close [$sdb close] 0
+
+ puts "\tSubdb$tnum.d: Remove in-mem subdb."
+ error_check_good \
+ sdb_remove [berkdb dbremove -env $env $testfile $subdb] 0
+
+ puts "\tSubdb$tnum.e: Check we cannot open the in-mem subdb."
+ set ret [catch {eval {berkdb_open_noerr} -env $env $args \
+ -auto_commit {$omethod $testfile $subdb}} db]
+ error_check_bad dbopen $ret 0
+
+ foreach end { commit abort } {
+ # Create an in-memory database.
+ puts "\tSubdb$tnum.f: Create in-mem subdb, add data, close."
+ set sdb [eval {berkdb_open_noerr -create -mode 0644} \
+ $args -env $env -auto_commit {$omethod $testfile $subdb}]
+ error_check_good dbopen [is_valid_db $sdb] TRUE
+
+ set ret [sdb013_populate $sdb $method $nentries]
+ error_check_good populate $ret 0
+ error_check_good sdb_close [$sdb close] 0
+
+ # Transactionally remove the database.
+ puts "\tSubdb$tnum.g: Transactionally remove in-mem database."
+ set txn [$env txn]
+ error_check_good db_remove \
+ [berkdb dbremove -env $env -txn $txn $testfile $subdb] 0
+
+ # Write a cacheful of data.
+ puts "\tSubdb$tnum.h: Create another db, overflow the cache."
+ set db [eval {berkdb_open_noerr -create -mode 0644} $args \
+ -env $env -auto_commit $omethod $dummyfile]
+ error_check_good dummy_open [is_valid_db $db] TRUE
+
+ set entries [expr $nentries * 100]
+ set ret [sdb013_populate $db $method $entries]
+ error_check_good dummy_close [$db close] 0
+
+ # Finish the txn and make sure the database is either
+ # gone (if committed) or still there (if aborted).
+ error_check_good txn_$end [$txn $end] 0
+ if { $end == "abort" } {
+ puts "\tSubdb$tnum.i: Check that database still exists."
+ set sdb [eval {berkdb_open_noerr} $args \
+ -env $env -auto_commit {$omethod $testfile $subdb}]
+ error_check_good sdb_reopen [is_valid_db $sdb] TRUE
+ error_check_good sdb_close [$sdb close] 0
+ } else {
+ puts "\tSubdb$tnum.i: Check that database is gone."
+ set ret [catch {eval {berkdb_open_noerr} -env $env \
+ $args -auto_commit {$omethod $testfile $subdb}} res]
+ error_check_bad dbopen $ret 0
+ }
+ }
+
+ error_check_good env_close [$env close] 0
+}
+
+proc sdb013_populate { db method nentries } {
+ source ./include.tcl
+
+ set did [open $dict]
+ set count 0
+ while { [gets $did str] != -1 && $count < $nentries } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key $str
+ }
+
+ set r [ catch {$db put $key [chop_data $method $str]} ret ]
+ if { $r != 0 } {
+ close $did
+ return $ret
+ }
+
+ incr count
+ }
+ close $did
+ return 0
+}
+
diff --git a/db/test/sdb014.tcl b/db/test/sdb014.tcl
new file mode 100644
index 000000000..74228c3bc
--- /dev/null
+++ b/db/test/sdb014.tcl
@@ -0,0 +1,113 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb014.tcl,v 12.9 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb014
+# TEST Tests mixing in-memory named and in-memory unnamed dbs.
+# TEST Create a regular in-memory db, add data.
+# TEST Create a named in-memory db.
+# TEST Try to create the same named in-memory db again (should fail).
+# TEST Try to create a different named in-memory db (should succeed).
+# TEST
+proc sdb014 { method args } {
+ source ./include.tcl
+
+ set tnum "014"
+ set orig_tdir $testdir
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb$tnum: skipping for method $method"
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ puts "Subdb$tnum ($method $args):\
+ In-memory named dbs with regular in-mem dbs."
+
+ # If we are given an env, use it. Otherwise, open one.
+ set txnenv 0
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
+
+ puts "\tSubdb$tnum.a: Create and populate in-memory unnamed database."
+ set testfile ""
+ set db [eval {berkdb_open -env $env -create -mode 0644} \
+ $args {$omethod $testfile}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set did [open $dict]
+
+ set pflags ""
+ set gflags ""
+ set count 0
+
+ if { [is_record_based $method] == 1 } {
+ append gflags " -recno"
+ }
+ while { [gets $did str] != -1 && $count < 5 } {
+ if { [is_record_based $method] == 1 } {
+ global kvals
+
+ set key [expr $count + 1]
+ set kvals($key) $str
+ } else {
+ set key $str
+ }
+ set ret [eval \
+ {$db put} $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
+
+ # Create named in-memory db. Try to create a second in-memory db of
+ # the same name. Should fail.
+ puts "\tSubdb$tnum.b: Create in-memory named database."
+ set subdb "SUBDB"
+ set db [eval {berkdb_open -env $env -create -excl -mode 0644} \
+ $args $omethod {$testfile $subdb}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ puts "\tSubdb$tnum.c: Try to create second inmem database."
+ set ret [catch {eval {berkdb_open_noerr -env $env -create -excl \
+ -mode 0644} $args {$omethod $testfile $subdb}} db1]
+ error_check_bad dbopen $ret 0
+
+ # Clean up. Close the env if this test created it.
+ error_check_good db_close [$db close] 0
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
+
+ set testdir $orig_tdir
+ return
+}
+
diff --git a/db/test/sdb015.tcl b/db/test/sdb015.tcl
new file mode 100644
index 000000000..1b1069287
--- /dev/null
+++ b/db/test/sdb015.tcl
@@ -0,0 +1,118 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb015.tcl,v 12.7 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb015
+# TEST Tests basic in-memory named database functionality
+# TEST Small keys, small data
+# TEST Put/get per key
+# 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 sdb015 { method {nentries 1000} args } {
+ global passwd
+ global has_crypto
+
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb015: skipping for method $method"
+ return
+ }
+
+ # Skip test if given an env - this test needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb015 skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ set largs $args
+ subdb015_main $method $nentries $largs
+
+ # Skip remainder of test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
+
+ append largs " -encryptaes $passwd "
+ subdb015_main $method $nentries $largs
+}
+
+proc subdb015_main { method nentries largs } {
+ source ./include.tcl
+ global encrypt
+
+ set largs [convert_args $method $largs]
+ set omethod [convert_method $method]
+
+ env_cleanup $testdir
+
+ # 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]
+
+ set env [eval {berkdb_env -create -cachesize {0 10000000 0} \
+ -mode 0644} -home $testdir $encargs]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ puts "Subdb015: $method ($largs) basic in-memory named db tests."
+ subdb015_body $method $omethod $nentries $largs $env
+ error_check_good env_close [$env close] 0
+}
+
+proc subdb015_body { method omethod nentries largs env } {
+ global encrypt
+ global passwd
+ source ./include.tcl
+
+ # Create the database and open the dictionary
+ set subdb subdb0
+ set db [eval {berkdb_open -create -mode 0644} $largs \
+ {-env $env $omethod "" $subdb}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set did [open $dict]
+ set pflags ""
+ set gflags ""
+ set count 0
+
+ puts "\tSubdb015.a: put/get loop"
+ # Here is the loop where we put and get each key/data pair
+ while { [gets $did str] != -1 && $count < $nentries } {
+ if { [is_record_based $method] == 1 } {
+ global kvals
+
+ set key [expr $count + 1]
+ set kvals($key) [pad_data $method $str]
+ } else {
+ set key $str
+ }
+ set ret [eval \
+ {$db put} $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
+}
+
diff --git a/db/test/sdb016.tcl b/db/test/sdb016.tcl
new file mode 100644
index 000000000..c96dce4e4
--- /dev/null
+++ b/db/test/sdb016.tcl
@@ -0,0 +1,99 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb016.tcl,v 12.9 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb016
+# TEST Creates many in-memory named dbs and puts a small amount of
+# TEST data in each (many defaults to 100)
+# TEST
+# TEST Use the first 100 entries from the dictionary as names.
+# 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.
+proc sdb016 { method {nentries 100} args } {
+ source ./include.tcl
+
+ set tnum "016"
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb$tnum skipping for method $method"
+ return
+ }
+
+ puts "Subdb$tnum: $method ($args) many in-memory named databases"
+
+ # Skip test if given an env - this test needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "\tSubdb$tnum skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ env_cleanup $testdir
+
+ # Set up env. We'll need a big cache.
+ set csize {0 16777216 1}
+ set env [berkdb_env -create \
+ -cachesize $csize -home $testdir -mode 0644 -txn]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ set pflags ""
+ set gflags ""
+ set txn ""
+ set fcount 0
+
+ # Here is the loop where we put and get each key/data pair
+ set ndataent 5
+ set fdid [open $dict]
+ puts "\tSubdb$tnum.a: Open $nentries in-memory databases."
+ while { [gets $fdid str] != -1 && $fcount < $nentries } {
+ if { $str == "" } {
+ continue
+ }
+ set subdb $str
+ set db [eval {berkdb_open -create -mode 0644} \
+ -env $env $args {$omethod "" $subdb}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set count 0
+ set did [open $dict]
+ while { [gets $did str] != -1 && $count < $ndataent } {
+ if { [is_record_based $method] == 1 } {
+ global kvals
+
+ set key [expr $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
+ incr fcount
+ }
+ close $fdid
+
+ puts "\tSubdb$tnum.b: Clean up."
+ error_check_good env_close [$env close] 0
+}
+
diff --git a/db/test/sdb017.tcl b/db/test/sdb017.tcl
new file mode 100644
index 000000000..0f2af0f3e
--- /dev/null
+++ b/db/test/sdb017.tcl
@@ -0,0 +1,100 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb017.tcl,v 12.6 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb017
+# TEST Test DB->rename() for in-memory named databases.
+proc sdb017 { method args } {
+ global errorCode
+ source ./include.tcl
+
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb017: Skipping for method $method"
+ return
+ }
+
+ set omethod [convert_method $method]
+ set args [convert_args $method $args]
+
+ puts "Subdb017: $method ($args): DB->rename() for in-memory named dbs."
+
+ # Skip test if given an env - this test needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb017 skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ # Make sure we're starting from a clean slate.
+ env_cleanup $testdir
+
+ # Set up env.
+ set env [berkdb_env_noerr -create -home $testdir -mode 0644]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ set oldsdb OLDDB
+ set newsdb NEWDB
+
+ puts "\tSubdb017.a: Create/rename file"
+ puts "\t\tSubdb017.a.1: create"
+ set testfile ""
+ set db [eval {berkdb_open_noerr -create -mode 0644}\
+ $omethod -env $env $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 key 1
+ set data [pad_data $method data]
+
+ error_check_good dbput [eval {$db put} $key $data] 0
+ error_check_good dbclose [$db close] 0
+
+ puts "\t\tSubdb017.a.2: rename"
+ error_check_good rename_file [eval {berkdb dbrename} -env $env \
+ {$testfile $oldsdb $newsdb}] 0
+
+ puts "\t\tSubdb017.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_noerr -create -mode 0644}\
+ $omethod -env $env $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_noerr -mode 0644}\
+ $omethod -env $env $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
+
+ # 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
+
+ # Now there's both an old and a new. Rename the "new" to the "old"
+ # and make sure that fails.
+ puts "\tSubdb017.b: Make sure rename fails instead of overwriting"
+ set errorCode NONE
+ set ret [catch {eval {berkdb dbrename} -env $env \
+ {$testfile $oldsdb $newsdb}} 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
+}
+
diff --git a/db/test/sdb018.tcl b/db/test/sdb018.tcl
new file mode 100644
index 000000000..ee6d9a9ad
--- /dev/null
+++ b/db/test/sdb018.tcl
@@ -0,0 +1,157 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb018.tcl,v 12.6 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb018
+# TEST Tests join of in-memory named databases.
+# 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 sdb018 {method {nentries 100} args } {
+ source ./include.tcl
+ global rand_init
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_record_based $method] == 1 || [is_rbtree $method] } {
+ puts "\tSubdb018 skipping for method $method."
+ return
+ }
+
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are given an env, then skip this test. It needs its own.
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb016 skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ set testfile ""
+ berkdb srand $rand_init
+
+ foreach opt {" -dup" " -dupsort"} {
+ env_cleanup $testdir
+
+ set cache [expr 1024 * 1024 * 10]
+ set env [berkdb_env -create -home $testdir \
+ -cachesize "0 $cache 1" ]
+ append args $opt
+ set oargs $args
+ append oargs " -env $env"
+
+
+ puts "Subdb018: $method ( $args ) Intra-subdb join"
+ set txn ""
+ #
+ # 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 "\tSubdb018.a: Intra-subdb join"
+
+ set psize 8192
+ set duplist {0 50 25 16 12}
+ set numdb [llength $duplist]
+ build_all_subdb $testfile [list $method] $psize \
+ $duplist $nentries $oargs
+
+ # Build the primary
+ puts "Subdb018: Building the primary database $method"
+ set oflags "-create -mode 0644 [conv $omethod \
+ [berkdb random_int 1 2]]"
+ 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 } {
+ set key [format "%04d" $i]
+ set ret [eval {$db put} $txn {$key stub}]
+ error_check_good "primary put" $ret 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 $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "2 0" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "3 0" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "4 0" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "1" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "2" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "3" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "4" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "1 2" $str $oargs
+ gets $did 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 $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "2 1" $str $oargs
+ gets $did 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 $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "1 3" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "3 1" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "1 4" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "4 1" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "2 3" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "3 2" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "2 4" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "4 2" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "3 4" $str $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "4 3" $str $oargs
+ gets $did 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 $oargs
+ gets $did 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 $oargs
+ gets $did 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 $oargs
+ gets $did str
+ do_join_subdb $testfile primary.db "4 3 0 1" $str $oargs
+
+ close $did
+ error_check_good env_close [$env close] 0
+ }
+}
+
diff --git a/db/test/sdb019.tcl b/db/test/sdb019.tcl
new file mode 100644
index 000000000..3a44f4ad9
--- /dev/null
+++ b/db/test/sdb019.tcl
@@ -0,0 +1,140 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb019.tcl,v 12.7 2006/09/13 14:54:13 carol Exp $
+#
+# TEST sdb019
+# TEST Tests in-memory subdatabases.
+# TEST Create an in-memory subdb. Test for persistence after
+# TEST overflowing the cache. Test for conflicts when we have
+# TEST two in-memory files.
+
+proc sdb019 { method { nentries 100 } args } {
+ source ./include.tcl
+
+ set tnum "019"
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb$tnum: skipping for method $method"
+ return
+ }
+ puts "Subdb$tnum: $method ($args) in-memory subdb tests"
+
+ # If we are using an env, then skip this test. It needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ set env NULL
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb019 skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ # The standard cachesize isn't big enough for 64k pages.
+ set csize "0 262144 1"
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ incr pgindex
+ set pagesize [lindex $args $pgindex]
+ if { $pagesize > 16384 } {
+ set cache [expr 8 * $pagesize]
+ set csize "0 $cache 1"
+ }
+ }
+
+ # Create the env.
+ env_cleanup $testdir
+ set env [eval berkdb_env -create {-cachesize $csize} \
+ -home $testdir -txn]
+ error_check_good dbenv [is_valid_env $env] TRUE
+
+ # Set filename to NULL; this allows us to create an in-memory
+ # named database.
+ set testfile ""
+
+ # Create two in-memory subdb and test for conflicts. Try all the
+ # combinations of named (NULL/NAME) and purely temporary
+ # (NULL/NULL) databases.
+ #
+ foreach s1 { S1 "" } {
+ foreach s2 { S2 "" } {
+ puts "\tSubdb$tnum.a:\
+ 2 in-memory subdbs (NULL/$s1, NULL/$s2)."
+ set sdb1 [eval {berkdb_open -create -mode 0644} \
+ $args -env $env {$omethod $testfile $s1}]
+ error_check_good sdb1_open [is_valid_db $sdb1] TRUE
+ set sdb2 [eval {berkdb_open -create -mode 0644} \
+ $args -env $env {$omethod $testfile $s2}]
+ error_check_good sdb1_open [is_valid_db $sdb2] TRUE
+
+ # Subdatabases are open, now put something in.
+ set string1 STRING1
+ set string2 STRING2
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ error_check_good sdb1_put [$sdb1 put $key \
+ [chop_data $method $string1.$key]] 0
+ error_check_good sdb2_put [$sdb2 put $key \
+ [chop_data $method $string2.$key]] 0
+ }
+
+ # If the subs are both NULL/NULL, we have two handles
+ # on the same db. Skip testing the contents.
+ if { $s1 != "" || $s2 != "" } {
+ # This can't work when both subs are NULL/NULL.
+ # Check contents.
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set ret1 [lindex \
+ [lindex [$sdb1 get $key] 0] 1]
+ error_check_good sdb1_get $ret1 \
+ [pad_data $method $string1.$key]
+ set ret2 [lindex \
+ [lindex [$sdb2 get $key] 0] 1]
+ error_check_good sdb2_get $ret2 \
+ [pad_data $method $string2.$key]
+ }
+
+ error_check_good sdb1_close [$sdb1 close] 0
+ error_check_good sdb2_close [$sdb2 close] 0
+
+ # Reopen, make sure we get the right data.
+ set sdb1 [eval {berkdb_open -mode 0644} \
+ $args -env $env {$omethod $testfile $s1}]
+ error_check_good \
+ sdb1_open [is_valid_db $sdb1] TRUE
+ set sdb2 [eval {berkdb_open -mode 0644} \
+ $args -env $env {$omethod $testfile $s2}]
+ error_check_good \
+ sdb1_open [is_valid_db $sdb2] TRUE
+
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set ret1 [lindex \
+ [lindex [$sdb1 get $key] 0] 1]
+ error_check_good sdb1_get $ret1 \
+ [pad_data $method $string1.$key]
+ set ret2 [lindex \
+ [lindex [$sdb2 get $key] 0] 1]
+ error_check_good sdb2_get $ret2 \
+ [pad_data $method $string2.$key]
+ }
+ }
+ error_check_good sdb1_close [$sdb1 close] 0
+ error_check_good sdb2_close [$sdb2 close] 0
+ }
+ }
+ error_check_good env_close [$env close] 0
+}
+
diff --git a/db/test/sdb020.tcl b/db/test/sdb020.tcl
new file mode 100644
index 000000000..7b4813e2e
--- /dev/null
+++ b/db/test/sdb020.tcl
@@ -0,0 +1,125 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: sdb020.tcl,v 12.6 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST sdb020
+# TEST Tests in-memory subdatabases.
+# TEST Create an in-memory subdb with one page size. Close, and
+# TEST open with a different page size: should fail.
+
+proc sdb020 { method { nentries 10 } args } {
+ source ./include.tcl
+ global errorCode
+
+ set tnum "020"
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_queueext $method] == 1 } {
+ puts "Subdb$tnum: skipping for method $method"
+ return
+ }
+
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Subdb$tnum: skipping for specific page sizes."
+ return
+ }
+
+ # If we are using an env, then skip this test. It needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ set env NULL
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb020 skipping for env $env"
+ return
+ }
+
+ # In-memory dbs never go to disk, so we can't do checksumming.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ puts "Subdb$tnum: $method ($args) \
+ in-memory named db tests with different pagesizes"
+
+ # Create the env.
+ env_cleanup $testdir
+ set env [berkdb_env_noerr -create -home $testdir -txn]
+ error_check_good dbenv [is_valid_env $env] TRUE
+
+ # Set filename to NULL; this causes the creation of an in-memory
+ # subdb.
+ set testfile ""
+ set name NAME
+
+ puts "\tSubdb$tnum.a: Create in-mem named db with default page size."
+ set db [eval {berkdb_open_noerr -create -mode 0644} \
+ $args -env $env {$omethod $testfile $name}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Figure out the default page size so we can try to open
+ # later with a different value.
+ set psize [stat_field $db stat "Page size"]
+ if { $psize == 512 } {
+ set psize2 2048
+ } else {
+ set psize2 512
+ }
+
+ error_check_good db_close [$db close] 0
+
+ # Try to open again with a different page size (should fail).
+ puts "\tSubdb$tnum.b: Try to reopen with different page size."
+ set errorCode NONE
+ catch {set db [eval {berkdb_open_noerr} $args -env $env \
+ -pagesize $psize2 {$omethod $testfile $name}]} res
+ error_check_good expect_error [is_substr $errorCode EINVAL] 1
+
+ # Try to open again with the correct pagesize (should succeed).
+ puts "\tSubdb$tnum.c: Reopen with original page size."
+ set db [eval {berkdb_open_noerr} $args -env $env \
+ -pagesize $psize {$omethod $testfile $name}]
+ # Close DB
+ error_check_good db_close [$db close] 0
+
+ puts "\tSubdb$tnum.d: Create in-mem named db with specific page size."
+ set psize 8192
+ set db [eval {berkdb_open_noerr -create -mode 0644} \
+ $args -env $env -pagesize $psize {$omethod $testfile $name}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ error_check_good db_close [$db close] 0
+
+ # Try to open again with a different page size (should fail).
+ set psize2 [expr $psize / 2]
+ puts "\tSubdb$tnum.e: Try to reopen with different page size."
+ set errorCode NONE
+ catch {set db [eval {berkdb_open_noerr} $args -env $env \
+ -pagesize $psize2 {$omethod $testfile $name}]} res
+ error_check_good expect_error [is_substr $errorCode EINVAL] 1
+
+ # Try to open again with the correct pagesize (should succeed).
+ puts "\tSubdb$tnum.f: Reopen with original page size."
+ set db [eval {berkdb_open} $args -env $env \
+ -pagesize $psize {$omethod $testfile $name}]
+
+ # Try to open a different database with a different page size
+ # (should succeed).
+ puts "\tSubdb$tnum.g: Open different db with different page size."
+ set newname NEWNAME
+ set db2 [eval {berkdb_open} -create $args -env $env \
+ -pagesize $psize2 {$omethod $testfile $newname}]
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good db2_close [$db2 close] 0
+ error_check_good env_close [$env close] 0
+}
+
+
diff --git a/db/test/sdbscript.tcl b/db/test/sdbscript.tcl
index 645351b07..61a8d54a7 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdbscript.tcl,v 11.11 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdbscript.tcl,v 12.3 2006/08/24 14:46:39 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 65b64dac2..a71ee5c94 100644
--- a/db/test/sdbtest001.tcl
+++ b/db/test/sdbtest001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdbtest001.tcl,v 11.21 2004/01/28 03:36:29 bostic Exp $
+# $Id: sdbtest001.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdbtest001
# TEST Tests multiple access methods in one subdb
diff --git a/db/test/sdbtest002.tcl b/db/test/sdbtest002.tcl
index 4e51809fb..cd41e7740 100644
--- a/db/test/sdbtest002.tcl
+++ b/db/test/sdbtest002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdbtest002.tcl,v 11.29 2004/01/28 03:36:30 bostic Exp $
+# $Id: sdbtest002.tcl,v 12.4 2006/08/24 14:46:39 bostic Exp $
#
# TEST sdbtest002
# TEST Tests multiple access methods in one subdb access by multiple
@@ -91,11 +91,6 @@ proc sdbtest002 { {nentries 10000} } {
error_check_good db_open [is_valid_db $db] TRUE
dump_file $db $txn $t1 $checkfunc
error_check_good db_close [$db close] 0
- #
- # This is just so that t2 is there and empty
- # since we are only appending below.
- #
- exec > $t2
# Now compare the keys to see if they match the dictionary (or ints)
if { [is_record_based $method] == 1 } {
diff --git a/db/test/sdbutils.tcl b/db/test/sdbutils.tcl
index 5c6deb3b4..f6065ed1d 100644
--- a/db/test/sdbutils.tcl
+++ b/db/test/sdbutils.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sdbutils.tcl,v 11.16 2004/01/28 03:36:30 bostic Exp $
+# $Id: sdbutils.tcl,v 12.4 2006/08/24 14:46:39 bostic Exp $
#
proc build_all_subdb { dbname methods psize dups {nentries 100} {dbargs ""}} {
set nsubdbs [llength $dups]
@@ -34,17 +34,17 @@ proc subdb_build { name nkeys ndups dup_interval method psize subdb dbargs} {
}
# Create the database and open the dictionary
set oflags "-create -mode 0644 $omethod \
- -pagesize $psize $dbargs $name $subdb"
+ -pagesize $psize $dbargs {$name} $subdb"
set db [eval {berkdb_open} $oflags]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
set count 0
if { $ndups >= 0 } {
- puts "\tBuilding $method $name $subdb. \
+ puts "\tBuilding $method {$name} $subdb. \
$nkeys keys with $ndups duplicates at interval of $dup_interval"
}
if { $ndups < 0 } {
- puts "\tBuilding $method $name $subdb. \
+ puts "\tBuilding $method {$name} $subdb. \
$nkeys unique keys of pagesize $psize"
#
# If ndups is < 0, we want unique keys in each subdb,
@@ -116,14 +116,14 @@ proc do_join_subdb { db primary subdbs key oargs } {
puts "\tJoining: $subdbs on $key"
# Open all the databases
- set p [eval {berkdb_open -unknown} $oargs $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 [eval {berkdb_open -unknown} $oargs $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 ed2ca81f9..272ddccae 100644
--- a/db/test/sec001.tcl
+++ b/db/test/sec001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sec001.tcl,v 11.12 2004/09/22 18:01:06 bostic Exp $
+# $Id: sec001.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sec001
# TEST Test of security interface
diff --git a/db/test/sec002.tcl b/db/test/sec002.tcl
index 5bdd4af3b..9d986eff2 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sec002.tcl,v 11.13 2004/11/02 16:12:04 carol Exp $
+# $Id: sec002.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST sec002
# TEST Test of security interface and catching errors in the
diff --git a/db/test/shelltest.tcl b/db/test/shelltest.tcl
index cb588f133..b163c28c2 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: shelltest.tcl,v 1.31 2004/03/15 21:09:49 bostic Exp $
+# $Id: shelltest.tcl,v 12.6 2006/08/24 14:46:39 bostic Exp $
#
# TEST scr###
# TEST The scr### directories are shell scripts that test a variety of
@@ -84,7 +84,6 @@ proc scr012 {} { shelltest 12 }
proc scr013 {} { shelltest 13 }
proc scr014 {} { shelltest 14 }
proc scr015 {} { shelltest 15 }
-proc scr016 {} { shelltest 16 }
proc scr017 {} { shelltest 17 }
proc scr018 {} { shelltest 18 }
proc scr019 {} { shelltest 19 }
@@ -99,3 +98,5 @@ proc scr027 {} { shelltest 27 }
proc scr028 {} { shelltest 28 }
proc scr029 {} { shelltest 29 }
proc scr030 {} { shelltest 30 }
+proc scr031 {} { shelltest 31 }
+proc scr032 {} { shelltest 32 }
diff --git a/db/test/si001.tcl b/db/test/si001.tcl
index e5cffc0e1..017d525a2 100644
--- a/db/test/si001.tcl
+++ b/db/test/si001.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: si001.tcl,v 1.18 2004/10/27 20:40:25 carol Exp $
+# $Id: si001.tcl,v 12.11 2006/08/24 14:46:39 bostic Exp $
#
# TEST si001
-# TEST Basic secondary index put/delete test
+# TEST Secondary index put/delete with lorder 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
@@ -22,157 +22,256 @@ proc si001 { methods {nentries 200} {tnum "001"} args } {
# Primary method/args.
set pmethod [lindex $methods 0]
set pargs [convert_args $pmethod $args]
+ if [big_endian] {
+ set nativeargs " -lorder 4321"
+ set swappedargs " -lorder 1234"
+ } else {
+ set swappedargs " -lorder 4321"
+ set nativeargs " -lorder 1234"
+ }
+ set argtypes "{$nativeargs} {$swappedargs}"
set pomethod [convert_method $pmethod]
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
# Method/args for all the secondaries. If only one method
- # was specified, assume the same method and a standard N
- # secondaries.
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
set methods [lrange $methods 1 end]
if { [llength $methods] == 0 } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
- lappend methods $pmethod
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
}
}
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
- env_cleanup $testdir
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set cacheargs " -cachesize {0 4194304 1} "
+ set env [eval berkdb_env -create $cacheargs -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 &&\
+ [is_queue $pmethod] == 1 } {
+ puts "Skipping si$tnum for threaded env"
+ return
+ }
+ set testdir [get_home $env]
+ }
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]
- 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
-
- # Open and associate the secondaries
- 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
- }
+ foreach pbyteargs $argtypes {
+ foreach sbyteargs $argtypes {
+ if { $pbyteargs == $nativeargs } {
+ puts "Si$tnum: Using native\
+ byteorder $nativeargs for primary."
+ } else {
+ puts "Si$tnum: Using swapped\
+ byteorder $swappedargs for primary."
+ }
+ if { $sbyteargs == $nativeargs } {
+ puts "Si$tnum: Using native\
+ byteorder $nativeargs for secondaries."
+ } else {
+ puts "Si$tnum: Using swapped\
+ byteorder $swappedargs for secondaries."
+ }
- 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 } {
- 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]
+ puts "si$tnum\
+ \{\[ list $pmethod $methods \]\} $nentries"
+ cleanup $testdir $env
- set ret [eval {$pdb put} {$key [chop_data $pmethod $datum]}]
- error_check_good put($n) $ret 0
- }
+ # Open primary.
+ set pdb [eval {berkdb_open -create -env} $env \
+ $pomethod $pargs $pbyteargs $pname]
+ error_check_good primary_open [is_valid_db $pdb] TRUE
- check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.a"
+ # Open and associate the secondaries
+ 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] \
+ $sbyteargs $snamebase.$i.db]
+ error_check_good\
+ second_open($i) [is_valid_db $sdb] TRUE
- 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 "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 ret [$pdb del $keys($n)]
- error_check_good pdel($n) $ret 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 ret [$sdb del $skey]
- error_check_good sdel($n) $ret 0
- }
- 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
- }
+ error_check_good db_associate($i) \
+ [$pdb associate [callback_n $i] $sdb] 0
+ lappend sdbs $sdb
+ }
- close $did
+ puts "\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 } {
+ 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]
- puts "\tSi$tnum.f: Truncate primary, check secondaries are empty."
- error_check_good truncate [$pdb truncate] $left
- foreach sdb $sdbs {
- set scursor [$sdb cursor]
- error_check_good db_cursor [is_substr $scursor $sdb] 1
- set ret [$scursor get -first]
- error_check_good sec_empty [string length $ret] 0
- error_check_good cursor_close [$scursor close] 0
- }
+ 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 "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 "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 ret [$pdb del $keys($n)]
+ error_check_good pdel($n) $ret 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 ret [$sdb del $skey]
+ error_check_good sdel($n) $ret 0
+ }
+ 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 } {
+ set did [open $dict]
+ puts "\tSi$tnum.e:\
+ Append loop: append $quar entries"
+ for { set n 0 } { $n < $nentries } { incr n } {
+ # Skip over the dictionary entries
+ # we've already used.
+ gets $did str
+ }
+ 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
+ }
+ close $did
+
+ check_secondaries\
+ $pdb $sdbs $half keys data "Si$tnum.e"
+ set left $half
+ }
- 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)"
+ puts "\tSi$tnum.f:\
+ Truncate primary, check secondaries are empty."
+ error_check_good truncate [$pdb truncate] $left
+ foreach sdb $sdbs {
+ set scursor [$sdb cursor]
+ error_check_good\
+ db_cursor [is_substr $scursor $sdb] 1
+ set ret [$scursor get -first]
+ error_check_good\
+ sec_empty [string length $ret] 0
+ error_check_good cursor_close [$scursor close] 0
+ }
- 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
+ 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
+ }
- set ret [catch {$sdb truncate} ret]
- error_check_good trunc_secondary $ret 1
+ # Don't close the env if this test was given one.
+ # Skip the test of truncating the secondary since
+ # we can't close and reopen the outside env.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
- error_check_good primary_close [$pdb close] 0
- 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
+ }
+ }
+ }
+ # If this test made the last env, close it.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
}
diff --git a/db/test/si002.tcl b/db/test/si002.tcl
index 9e38c8a98..9f2f64df3 100644
--- a/db/test/si002.tcl
+++ b/db/test/si002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: si002.tcl,v 1.14 2004/10/27 20:40:25 carol Exp $
+# $Id: si002.tcl,v 12.8 2006/08/24 14:46:39 bostic Exp $
#
# TEST si002
# TEST Basic cursor-based secondary index put/delete test
@@ -24,30 +24,57 @@ proc si002 { methods {nentries 200} {tnum "002"} args } {
set pargs [convert_args $pmethod $args]
set pomethod [convert_method $pmethod]
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
# Method/args for all the secondaries. If only one method
- # was specified, assume the same method and a standard N
- # secondaries.
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
set methods [lrange $methods 1 end]
if { [llength $methods] == 0 } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
- lappend methods $pmethod
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
}
}
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 } {
+ puts "Skipping si$tnum for threaded env"
+ return
+ }
+ set testdir [get_home $env]
+ }
+
puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
- env_cleanup $testdir
+ cleanup $testdir $env
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]
- 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
@@ -171,5 +198,9 @@ proc si002 { methods {nentries 200} {tnum "002"} args } {
error_check_good secondary_close [$sdb close] 0
}
error_check_good primary_close [$pdb close] 0
- error_check_good env_close [$env close] 0
+
+ # Close the env if it was created within this test.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
}
diff --git a/db/test/si003.tcl b/db/test/si003.tcl
index 60ddba6a3..3e2419628 100644
--- a/db/test/si003.tcl
+++ b/db/test/si003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: si003.tcl,v 1.12 2004/10/27 20:40:25 carol Exp $
+# $Id: si003.tcl,v 12.8 2006/08/24 14:46:39 bostic Exp $
#
# TEST si003
# TEST si001 with secondaries created and closed mid-test
@@ -24,30 +24,58 @@ proc si003 { methods {nentries 200} {tnum "003"} args } {
set pargs [convert_args $pmethod $args]
set pomethod [convert_method $pmethod]
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
# Method/args for all the secondaries. If only one method
- # was specified, assume the same method and a standard N
- # secondaries.
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
set methods [lrange $methods 1 end]
if { [llength $methods] == 0 } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
- lappend methods $pmethod
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
}
}
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
- env_cleanup $testdir
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 &&\
+ [is_queue $pmethod] == 1 } {
+ puts "Skipping si$tnum for threaded env with queue"
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+ puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
+ cleanup $testdir $env
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}]
- 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
@@ -144,5 +172,9 @@ proc si003 { methods {nentries 200} {tnum "003"} args } {
error_check_good secondary_close [$sdb close] 0
}
error_check_good primary_close [$pdb close] 0
- error_check_good env_close [$env close] 0
+
+ # Close the env if it was created within this test.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
}
diff --git a/db/test/si004.tcl b/db/test/si004.tcl
index 08af8b261..51346b3b7 100644
--- a/db/test/si004.tcl
+++ b/db/test/si004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: si004.tcl,v 1.12 2004/10/27 20:40:25 carol Exp $
+# $Id: si004.tcl,v 12.8 2006/08/24 14:46:39 bostic Exp $
#
# TEST si004
# TEST si002 with secondaries created and closed mid-test
@@ -24,30 +24,57 @@ proc si004 { methods {nentries 200} {tnum "004"} args } {
set pargs [convert_args $pmethod $args]
set pomethod [convert_method $pmethod]
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
# Method/args for all the secondaries. If only one method
- # was specified, assume the same method and a standard N
- # secondaries.
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
set methods [lrange $methods 1 end]
if { [llength $methods] == 0 } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
- lappend methods $pmethod
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
}
}
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 } {
+ puts "Skipping si$tnum for threaded env"
+ return
+ }
+ set testdir [get_home $env]
+ }
+
puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
- env_cleanup $testdir
+ cleanup $testdir $env
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]
- 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
@@ -196,5 +223,9 @@ proc si004 { methods {nentries 200} {tnum "004"} args } {
error_check_good secondary_close [$sdb close] 0
}
error_check_good primary_close [$pdb close] 0
- error_check_good env_close [$env close] 0
+
+ # Close the env if it was created within this test.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
}
diff --git a/db/test/si005.tcl b/db/test/si005.tcl
index 292cf1f60..73b3ba1cf 100644
--- a/db/test/si005.tcl
+++ b/db/test/si005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: si005.tcl,v 11.11 2004/10/27 20:40:25 carol Exp $
+# $Id: si005.tcl,v 12.8 2006/08/24 14:46:39 bostic Exp $
#
# TEST si005
# TEST Basic secondary index put/delete test with transactions
@@ -16,13 +16,28 @@ proc si005 { methods {nentries 200} {tnum "005"} args } {
set pargs [convert_args $pmethod $args]
set pomethod [convert_method $pmethod]
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
# Method/args for all the secondaries. If only one method
- # was specified, assume the same method and a standard N
- # secondaries.
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
set methods [lrange $methods 1 end]
if { [llength $methods] == 0 } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
- lappend methods $pmethod
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
}
}
@@ -35,18 +50,34 @@ proc si005 { methods {nentries 200} {tnum "005"} args } {
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ set txnenv 0
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir -txn]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append pargs " -auto_commit "
+ append argses " -auto_commit "
+ } else {
+ puts "Skipping si$tnum for non-transactional env."
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+ cleanup $testdir $env
+ puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
puts "\twith transactions"
- env_cleanup $testdir
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 -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]
@@ -60,7 +91,7 @@ proc si005 { methods {nentries 200} {tnum "005"} args } {
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
+ [$pdb associate [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
@@ -131,5 +162,10 @@ proc si005 { methods {nentries 200} {tnum "005"} args } {
foreach sdb $sdbs {
error_check_good secondary_close [$sdb close] 0
}
- error_check_good env_close [$env close] 0
+
+ # Close the env if it was created within this test.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
+ return
}
diff --git a/db/test/si006.tcl b/db/test/si006.tcl
new file mode 100644
index 000000000..a905c4cb9
--- /dev/null
+++ b/db/test/si006.tcl
@@ -0,0 +1,187 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: si006.tcl,v 12.6 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST si006
+# TEST
+# TEST Test -immutable_key interface.
+# TEST
+# TEST DB_IMMUTABLE_KEY is an optimization to be used when a
+# TEST secondary key will not be changed. It does not prevent
+# TEST a deliberate change to the secondary key, it just does not
+# TEST propagate that change when it is made to the primary.
+# TEST This test verifies that a change to the primary is propagated
+# TEST to the secondary or not as specified by -immutable_key.
+
+proc si006 { methods {nentries 200} {tnum "006"} args } {
+ source ./include.tcl
+ global dict
+
+ # Primary method/args.
+ set pmethod [lindex $methods 0]
+ set pargs [convert_args $pmethod $args]
+ set pomethod [convert_method $pmethod]
+
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
+ # Method/args for all the secondaries. If only one method
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
+ set methods [lrange $methods 1 end]
+ set nsecondaries 2
+ if { [llength $methods] == 0 } {
+ for { set i 0 } { $i < $nsecondaries } { incr i } {
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
+ }
+ }
+
+ set argses [convert_argses $methods $args]
+ set omethods [convert_methods $methods]
+
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 &&\
+ [is_queue $pmethod] == 1 } {
+ puts "Skipping si$tnum for threaded env"
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+ puts "si$tnum \{\[ list $pmethod $methods \]\} $nentries"
+ cleanup $testdir $env
+
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
+
+ # Open the primary.
+ set pdb [eval {berkdb_open -create -env} $env $pomethod $pargs $pname]
+ error_check_good primary_open [is_valid_db $pdb] TRUE
+
+ # Open and associate the secondaries, without -immutable_key.
+ puts "\tSi$tnum.a: Open primary and secondary databases and associate."
+ set sdbs {}
+
+ set sdb1 [eval {berkdb_open -create -env} $env \
+ [lindex $omethods 0] [lindex $argses 0] $snamebase.1.db]
+ error_check_good open_sdb1 [is_valid_db $sdb1] TRUE
+ error_check_good sdb1_associate \
+ [$pdb associate [callback_n 0] $sdb1] 0
+ lappend sdbs $sdb1
+
+ set sdb2 [eval {berkdb_open -create -env} $env \
+ [lindex $omethods 1] [lindex $argses 1] $snamebase.2.db]
+ error_check_good open_sdb2 [is_valid_db $sdb2] TRUE
+ error_check_good sdb2_associate \
+ [$pdb associate [callback_n 1] $sdb2] 0
+ lappend sdbs $sdb2
+
+ puts "\tSi$tnum.b: Put loop on primary database."
+ 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 ret [eval {$pdb put} {$key [chop_data $pmethod $datum]}]
+ error_check_good put($n) $ret 0
+ }
+ close $did
+
+ puts "\tSi$tnum.c: Check secondaries."
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.c"
+
+ puts "\tSi$tnum.d: Closing/disassociating primary first"
+ error_check_good primary_close [$pdb close] 0
+ foreach sdb $sdbs {
+ error_check_good secondary_close [$sdb close] 0
+ }
+
+ puts "\tSi$tnum.e: Reopen databases."
+ # Reopen the primary.
+ set pdb [eval {berkdb_open -env} $env $pname]
+ error_check_good primary_reopen [is_valid_db $pdb] TRUE
+
+ # Reopen and associate secondary without -immutable_key.
+ set mutable {}
+ set sdb1 [eval {berkdb_open -create -env} $env \
+ [lindex $omethods 0] [lindex $argses 0] $snamebase.1.db]
+ error_check_good open_sdb1 [is_valid_db $sdb1] TRUE
+ error_check_good sdb1_associate \
+ [$pdb associate [callback_n 0] $sdb1] 0
+ lappend goodsdbs $mutable
+
+ # Reopen and associate second secondary with -immutable_key.
+ set immutable {}
+ set sdb2 [eval {berkdb_open -env} $env \
+ [lindex $omethods 1] [lindex $argses 1] $snamebase.2.db]
+ error_check_good reopen_sdb2 [is_valid_db $sdb2] TRUE
+ error_check_good sdb2_associate \
+ [$pdb associate -immutable_key [callback_n 1] $sdb2] 0
+ lappend immutable $sdb2
+
+ # Update primary. This should write to sdb1, but not sdb2.
+ puts "\tSi$tnum.f: Put loop on primary database."
+ set str "OVERWRITTEN"
+ for { set n 0 } { $n < $nentries } { incr n } {
+ if { [is_record_based $pmethod] == 1 } {
+ set key [expr $n + 1]
+ } else {
+ set key $keys($n)
+ }
+ set datum $str.$n
+ set data($n) [pad_data $pmethod $datum]
+ set ret [eval {$pdb put} {$key [chop_data $pmethod $datum]}]
+ error_check_good put($n) $ret 0
+ }
+
+ puts "\tSi$tnum.g: Check secondaries without -immutable_key."
+ check_secondaries $pdb $mutable $nentries keys data "Si$tnum.g"
+
+ puts "\tSi$tnum.h: Check secondaries with -immutable_key."
+ if { [catch {check_secondaries \
+ $pdb $immutable $nentries keys data "Si$tnum.h"} res] != 1 } {
+ puts "FAIL: Immutable secondary key was changed."
+ }
+
+ puts "\tSi$tnum.i: Closing/disassociating primary first"
+ error_check_good primary_close [$pdb close] 0
+ error_check_good secondary1_close [$sdb1 close] 0
+ error_check_good secondary2_close [$sdb2 close] 0
+
+ # Don't close the env if this test was given one.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
+}
+
diff --git a/db/test/si007.tcl b/db/test/si007.tcl
new file mode 100644
index 000000000..f286321ab
--- /dev/null
+++ b/db/test/si007.tcl
@@ -0,0 +1,189 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: si007.tcl,v 12.6 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST si007
+# TEST Secondary index put/delete with lorder test
+# TEST
+# TEST This test is the same as si001 with the exception
+# TEST that we create and populate the primary and THEN
+# TEST create the secondaries and associate them with -create.
+
+proc si007 { methods {nentries 10} {tnum "007"} args } {
+ source ./include.tcl
+ global dict nsecondaries
+
+ # Primary method/args.
+ set pmethod [lindex $methods 0]
+ set pargs [convert_args $pmethod $args]
+ if [big_endian] {
+ set nativeargs " -lorder 4321"
+ set swappedargs " -lorder 1234"
+ } else {
+ set swappedargs " -lorder 4321"
+ set nativeargs " -lorder 1234"
+ }
+ set argtypes "{$nativeargs} {$swappedargs}"
+ set pomethod [convert_method $pmethod]
+
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
+ # Method/args for all the secondaries. If only one method
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
+ set methods [lrange $methods 1 end]
+ if { [llength $methods] == 0 } {
+ for { set i 0 } { $i < $nsecondaries } { incr i } {
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
+ }
+ }
+
+ set argses [convert_argses $methods $args]
+ set omethods [convert_methods $methods]
+
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 &&\
+ [is_queue $pmethod] == 1 } {
+ puts "Skipping si$tnum for threaded env"
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
+
+ foreach pbyteargs $argtypes {
+ foreach sbyteargs $argtypes {
+ if { $pbyteargs == $nativeargs } {
+ puts "Si$tnum: Using native\
+ byteorder $nativeargs for primary."
+ } else {
+ puts "Si$tnum: Using swapped\
+ byteorder $swappedargs for primary."
+ }
+ if { $sbyteargs == $nativeargs } {
+ puts "Si$tnum: Using native\
+ byteorder $nativeargs for secondaries."
+ } else {
+ puts "Si$tnum: Using swapped\
+ byteorder $swappedargs for secondaries."
+ }
+
+ puts "si$tnum\
+ \{\[ list $pmethod $methods \]\} $nentries"
+ cleanup $testdir $env
+
+ # Open primary.
+ set pdb [eval {berkdb_open -create -env} $env \
+ $pomethod $pargs $pbyteargs $pname]
+ error_check_good primary_open [is_valid_db $pdb] TRUE
+
+ puts "\tSi$tnum.a: Populate primary."
+ # Open dictionary. Leave it 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 } {
+ 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 ret [eval {$pdb put}\
+ {$key [chop_data $pmethod $datum]}]
+ error_check_good put($n) $ret 0
+ }
+
+ # Open and associate the secondaries, with -create.
+ puts "\tSi$tnum.b: Associate secondaries with -create."
+ 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] \
+ $sbyteargs $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 "Si$tnum.c"
+
+ puts "\tSi$tnum.c: Closing/disassociating primary first"
+ error_check_good primary_close [$pdb close] 0
+ foreach sdb $sdbs {
+ error_check_good secondary_close [$sdb close] 0
+ }
+
+ # Don't close the env if this test was given one.
+ # Skip the test of truncating the secondary since
+ # we can't close and reopen the outside env.
+ if { $eindex == -1 } {
+ 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
+ }
+ }
+ }
+ # If this test made the last env, close it.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
+}
diff --git a/db/test/si008.tcl b/db/test/si008.tcl
new file mode 100644
index 000000000..859bd1215
--- /dev/null
+++ b/db/test/si008.tcl
@@ -0,0 +1,274 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: si008.tcl,v 12.7 2006/08/24 14:46:39 bostic Exp $
+#
+# TEST si008
+# TEST Secondary index put/delete with lorder test
+# TEST
+# TEST This test is the same as si001 except that we
+# TEST create the secondaries with different byte orders:
+# TEST one native, one swapped.
+
+proc si008 { methods {nentries 10} {tnum "008"} args } {
+ source ./include.tcl
+ global dict nsecondaries
+
+ # Primary method/args.
+ set pmethod [lindex $methods 0]
+ set pargs [convert_args $pmethod $args]
+ if [big_endian] {
+ set nativeargs " -lorder 4321"
+ set swappedargs " -lorder 1234"
+ } else {
+ set swappedargs " -lorder 4321"
+ set nativeargs " -lorder 1234"
+ }
+ set argtypes "{$nativeargs} {$swappedargs}"
+ set pomethod [convert_method $pmethod]
+
+ # Renumbering recno databases can't be used as primaries.
+ if { [is_rrecno $pmethod] == 1 } {
+ puts "Skipping si$tnum for method $pmethod"
+ return
+ }
+
+ # Method/args for all the secondaries. If only one method
+ # was specified, assume the same method (for btree or hash)
+ # and a standard number of secondaries. If primary is not
+ # btree or hash, force secondaries to be one btree, one hash.
+ set methods [lrange $methods 1 end]
+ if { [llength $methods] == 0 } {
+ for { set i 0 } { $i < $nsecondaries } { incr i } {
+ if { [is_btree $pmethod] || [is_hash $pmethod] } {
+ lappend methods $pmethod
+ } else {
+ if { [expr $i % 2] == 0 } {
+ lappend methods "-btree"
+ } else {
+ lappend methods "-hash"
+ }
+ }
+ }
+ }
+
+ set argses [convert_argses $methods $args]
+ set omethods [convert_methods $methods]
+
+ # If we are given an env, use it. Otherwise, open one.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ env_cleanup $testdir
+ set cacheargs " -cachesize {0 1048576 1} "
+ set env [eval berkdb_env -create $cacheargs -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set envflags [$env get_open_flags]
+ if { [lsearch -exact $envflags "-thread"] != -1 &&\
+ [is_queue $pmethod] == 1 } {
+ puts "Skipping si$tnum for threaded env"
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
+
+ foreach pbyteargs $argtypes {
+ if { $pbyteargs == $nativeargs } {
+ puts "Si$tnum: Using native\
+ byteorder $nativeargs for primary."
+ } else {
+ puts "Si$tnum: Using swapped\
+ byteorder $swappedargs for primary."
+ }
+
+ puts "si$tnum\
+ \{\[ list $pmethod $methods \]\} $nentries"
+ cleanup $testdir $env
+
+ # Open primary.
+ set pdb [eval {berkdb_open -create -env} $env \
+ $pomethod $pargs $pbyteargs $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 } {
+ if { [expr $i % 2] == 0 } {
+ set sbyteargs $nativeargs
+ } else {
+ set sbyteargs $swappedargs
+ }
+
+ if { $sbyteargs == $nativeargs } {
+ puts "Si$tnum: Using native byteorder\
+ $nativeargs for secondary $i."
+ } else {
+ puts "Si$tnum: Using swapped byteorder\
+ $swappedargs for secondary $i."
+ }
+
+ set sdb [eval {berkdb_open -create -env} $env \
+ [lindex $omethods $i] [lindex $argses $i] \
+ $sbyteargs $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 "\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 } {
+ 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 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 "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 "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 ret [$pdb del $keys($n)]
+ error_check_good pdel($n) $ret 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 ret [$sdb del $skey]
+ error_check_good sdel($n) $ret 0
+ }
+ 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 } {
+ set did [open $dict]
+ puts "\tSi$tnum.e:\
+ Append loop: append $quar entries"
+ for { set n 0 } { $n < $nentries } { incr n } {
+ # Skip over dictionary entries we've
+ # already used.
+ gets $did str
+ }
+ 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
+ }
+ close $did
+
+ check_secondaries\
+ $pdb $sdbs $half keys data "Si$tnum.e"
+ set left $half
+ }
+
+ puts "\tSi$tnum.f:\
+ Truncate primary, check secondaries are empty."
+ error_check_good truncate [$pdb truncate] $left
+ foreach sdb $sdbs {
+ set scursor [$sdb cursor]
+ error_check_good\
+ db_cursor [is_substr $scursor $sdb] 1
+ set ret [$scursor get -first]
+ error_check_good\
+ sec_empty [string length $ret] 0
+ error_check_good cursor_close [$scursor close] 0
+ }
+
+
+ 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
+ }
+
+ # Don't close the env if this test was given one.
+ # Skip the test of truncating the secondary since
+ # we can't close and reopen the outside env.
+ if { $eindex == -1 } {
+ 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
+ }
+ }
+
+ # If this test made the last env, close it.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
+}
diff --git a/db/test/sijointest.tcl b/db/test/sijointest.tcl
index eca46cf86..b9603d115 100644
--- a/db/test/sijointest.tcl
+++ b/db/test/sijointest.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sijointest.tcl,v 11.7 2004/11/01 16:01:39 carol Exp $
+# $Id: sijointest.tcl,v 12.4 2006/08/24 14:46:39 bostic Exp $
#
# TEST sijointest: Secondary index and join test.
# TEST This used to be si005.tcl.
@@ -38,7 +38,7 @@ proc sijointest { methods {nentries 1000} args } {
set omethods [convert_methods $methods]
puts "Secondary index join test."
- puts "sijoin \{\[ list $pmethod $methods \]\} $nentries"
+ puts "sijoin \{\[ list $pmethod $methods \]\} $nentries"
env_cleanup $testdir
set pname "sijoin-primary.db"
diff --git a/db/test/siutils.tcl b/db/test/siutils.tcl
index 271584bd3..09139dc74 100644
--- a/db/test/siutils.tcl
+++ b/db/test/siutils.tcl
@@ -1,9 +1,9 @@
#See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2001-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: siutils.tcl,v 11.7 2004/10/15 12:55:01 sue Exp $
+# $Id: siutils.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# Secondary index utilities. This file used to be known as
# sindex.tcl.
diff --git a/db/test/sysscript.tcl b/db/test/sysscript.tcl
index 8386949a6..85fe09c23 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: sysscript.tcl,v 11.19 2004/01/28 03:36:30 bostic Exp $
+# $Id: sysscript.tcl,v 12.4 2006/09/06 05:13:30 alexg Exp $
#
# System integration test script.
# This script runs a single process that tests the full functionality of
@@ -73,13 +73,13 @@ 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 -auto_commit -env $dbenv $method $file]
- set err [catch {error_check_bad $mypid:dbopen $db($i) NULL} ret]
+ set db_set($i) [berkdb open -auto_commit -env $dbenv $method $file]
+ set err [catch {error_check_bad $mypid:dbopen $db_set($i) NULL} ret]
if {$err != 0} {
puts $ret
return
}
- set err [catch {error_check_bad $mypid:dbopen [is_substr $db($i) \
+ set err [catch {error_check_bad $mypid:dbopen [is_substr $db_set($i) \
error] 1} ret]
if {$err != 0} {
puts $ret
@@ -108,9 +108,9 @@ while { 1 } {
# Open cursors
for { set f 0 } {$f < $nfiles} {incr f} {
- set cursors($f) [$db($f) cursor -txn $txn]
+ set cursors($f) [$db_set($f) cursor -txn $txn]
set err [catch {error_check_good $mypid:cursor_open \
- [is_substr $cursors($f) $db($f)] 1} ret]
+ [is_substr $cursors($f) $db_set($f)] 1} ret]
if {$err != 0} {
puts $ret
return
@@ -121,8 +121,8 @@ while { 1 } {
# Check to see if key is already in database
set found 0
for { set i 0 } { $i < $nfiles } { incr i } {
- set r [$db($i) get -txn $txn $k]
- set r [$db($i) get -txn $txn $k]
+ set r [$db_set($i) get -txn $txn $k]
+ set r [$db_set($i) get -txn $txn $k]
if { $r == "-1" } {
for {set f 0 } {$f < $nfiles} {incr f} {
set err [catch {error_check_good \
@@ -163,7 +163,7 @@ while { 1 } {
}
foreach i $fset {
- set r [$db($i) put -txn $txn $k $data]
+ set r [$db_set($i) put -txn $txn $k $data]
if {$r == "-1"} {
for {set f 0 } {$f < $nfiles} {incr f} {
set err [catch {error_check_good \
@@ -265,7 +265,7 @@ while { 1 } {
# Close files
for { set i 0 } { $i < $nfiles} { incr i } {
- set r [$db($i) close]
+ set r [$db_set($i) close]
set err [catch {error_check_good $mypid:db_close:$i $r 0} ret]
if {$err != 0} {
puts $ret
diff --git a/db/test/t106script.tcl b/db/test/t106script.tcl
index 3d50c9d1f..a57d5d812 100644
--- a/db/test/t106script.tcl
+++ b/db/test/t106script.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: t106script.tcl,v 1.4 2004/01/28 03:36:30 bostic Exp $
+# $Id: t106script.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
proc t106_initial { nitems nprod id tnum dbenv order args } {
diff --git a/db/test/test.tcl b/db/test/test.tcl
index 3bd3e4d9c..d5b67ae91 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test.tcl,v 11.273 2004/11/01 14:48:23 carol Exp $
+# $Id: test.tcl,v 12.30 2006/08/24 14:46:39 bostic Exp $
source ./include.tcl
@@ -44,7 +44,7 @@ set datastr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
# Random number seed.
global rand_init
-set rand_init 12082003
+set rand_init 11302005
# Default record length for fixed record length access method(s)
set fixed_len 20
@@ -58,6 +58,12 @@ set ohandles {}
global is_envmethod
set is_envmethod 0
+#
+# Set when we're running a child process in a rep test.
+#
+global is_repchild
+set is_repchild 0
+
# For testing locker id wrap around.
global lock_curid
global lock_maxid
@@ -75,15 +81,28 @@ if { [info exists one_test] != 1 } {
set one_test "ALL"
}
-# This is where the test numbering and parameters now live.
-source $test_path/testparams.tcl
+# If you call a test with the proc find_valid_methods, it will
+# return the list of methods for which it will run, instead of
+# actually running.
+global checking_valid_methods
+set checking_valid_methods 0
+global valid_methods
+set valid_methods { btree rbtree queue queueext recno frecno rrecno hash }
+global test_recopts
+set test_recopts { "-recover" "" }
+
+# Set up any OS-specific values.
+source $test_path/testutils.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_freebsd_test [string match FreeBSD $tcl_platform(os)]
+set is_hp_test [string match HP-UX $tcl_platform(os)]
+set is_linux_test [string match Linux $tcl_platform(os)]
+set is_qnx_test [string match QNX $tcl_platform(os)]
+set is_sunos_test [string match SunOS $tcl_platform(os)]
+set is_windows_test [string match Win* $tcl_platform(os)]
+set is_windows9x_test [string match "Windows 95" $tcl_platform(osVersion)]
set is_je_test 0
-set is_qnx_test [is_substr $tcl_platform(os) "QNX"]
set upgrade_be [big_endian]
global EXE BAT
@@ -95,6 +114,9 @@ if { $is_windows_test == 1 } {
set BAT ""
}
+# This is where the test numbering and parameters now live.
+source $test_path/testparams.tcl
+
# 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
@@ -117,6 +139,8 @@ if { $stat != 0 } {
proc run_std { { testname ALL } args } {
global test_names
global one_test
+ global has_crypto
+ global valid_methods
source ./include.tcl
set one_test $testname
@@ -179,7 +203,6 @@ proc run_std { { testname ALL } args } {
{"locking" "lock"}
{"logging" "log"}
{"memory pool" "memp"}
- {"mutex" "mutex"}
{"transaction" "txn"}
{"deadlock detection" "dead"}
{"subdatabase" "sdb"}
@@ -191,8 +214,20 @@ proc run_std { { testname ALL } args } {
{"secondary index" "sindex"}
}
- if { $am_only == 0 } {
+ # If this is run_std only, run each rep test for a single
+ # access method. If run_all, run for all access methods.
+ if { $std_only == 1 } {
+ lappend test_list {"replication" "rep_subset"}
+ } else {
+ lappend test_list {"replication" "rep_complete"}
+ }
+ # If release supports encryption, run security tests.
+ if { $has_crypto == 1 } {
+ lappend test_list {"security" "sec"}
+ }
+
+ if { $am_only == 0 } {
foreach pair $test_list {
set msg [lindex $pair 0]
set cmd [lindex $pair 1]
@@ -258,8 +293,7 @@ proc run_std { { testname ALL } args } {
# 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" {
+ foreach method $valid_methods {
puts "Running $method tests"
foreach test $test_names(test) {
if { $run == 0 } {
@@ -320,7 +354,6 @@ proc check_output { file } {
.*?dbscript\.tcl.*|
.*?ddscript\.tcl.*|
.*?mpoolscript\.tcl.*|
- .*?mutexscript\.tcl.*|
^\d\d:\d\d:\d\d\s\(\d\d:\d\d:\d\d\)$|
^\d\d:\d\d:\d\d\s\(\d\d:\d\d:\d\d\)\sCrashing$|
^\d\d:\d\d:\d\d\s\(\d\d:\d\d:\d\d\)\s[p|P]rocesses\srunning:.*|
@@ -352,7 +385,8 @@ proc check_output { file } {
^Repl:\stest\d\d\d:.*|
^Repl:\ssdb\d\d\d:.*|
^Script\swatcher\sprocess\s.*|
- ^Sleepycat\sSoftware:\sBerkeley\sDB\s.*|
+ ^Secondary\sindex\sjoin\s.*|
+ ^\sBerkeley\sDB\s.*|
^Test\ssuite\srun\s.*|
^Unlinking\slog:\serror\smessage\sOK$|
^Verifying\s.*|
@@ -362,7 +396,9 @@ proc check_output { file } {
^\t*\.\.\.Skipping\sdbc.*|
^\t*and\s\d*\sduplicate\sduplicates\.$|
^\t*About\sto\srun\srecovery\s.*complete$|
+ ^\t*Add\sa\sthird\sversion\s.*|
^\t*Archive[:\.].*|
+ ^\t*Bigfile[0-9][0-9][0-9].*|
^\t*Building\s.*|
^\t*closing\ssecondaries\.$|
^\t*Command\sexecuted\sand\s.*$|
@@ -393,11 +429,15 @@ proc check_output { file } {
^\t*[r|R]ep_test.*|
^\t*[r|R]pc[0-9][0-9][0-9].*|
^\t*[r|R]src[0-9][0-9][0-9].*|
+ ^\t*Recover\sfrom\sfirst\sdatabase$|
+ ^\t*Recover\sfrom\ssecond\sdatabase$|
+ ^\t*Remove\ssecond\sdb$|
+ ^\t*Rep_verify.*|
^\t*Run_rpcmethod.*|
^\t*Running\srecovery\son\s.*|
^\t*[s|S]ec[0-9][0-9][0-9].*|
^\t*[s|S]i[0-9][0-9][0-9].*|
- ^\t*Sijoin.*|
+ ^\t*[s|S]ijoin.*|
^\t*sdb[0-9][0-9][0-9].*|
^\t*Skipping\s.*|
^\t*Subdb[0-9][0-9][0-9].*|
@@ -428,9 +468,18 @@ proc r { args } {
global has_crypto
global rand_init
global one_test
+ global test_recopts
+ global checking_valid_methods
source ./include.tcl
+ # The variable test_recopts controls whether we open envs in
+ # replication tests with the -recover flag. The default is
+ # to test with and without the flag, but to run a meaningful
+ # subset of rep tests more quickly, rep_subset will randomly
+ # pick one or the other.
+ set test_recopts { " -recover" "" }
+
set exflgs [eval extractflags $args]
set args [lindex $exflgs 0]
set flags [lindex $exflgs 1]
@@ -450,13 +499,14 @@ proc r { args } {
if {[catch {
set sub [ lindex $args 0 ]
+ set starttest [lindex $args 1]
switch $sub {
+ bigfile -
dead -
env -
lock -
log -
memp -
- mutex -
rsrc -
sdbtest -
txn {
@@ -485,8 +535,10 @@ proc r { args } {
}
}
}
- bigfile -
+ compact -
elect -
+ inmemdb -
+ init -
fop {
foreach test $test_names($sub) {
eval run_test $test $display $run
@@ -555,9 +607,60 @@ proc r { args } {
run_recds $run $display [lrange $args 1 end]
}
rep {
- foreach test $test_names(rep) {
+ r rep_subset $starttest
+ }
+ # To run a subset of the complete rep tests, use
+ # rep_subset, which randomly picks an access type to
+ # use, and randomly picks whether to open envs with
+ # the -recover flag.
+ rep_subset {
+ berkdb srand $rand_init
+ set tindex [lsearch $test_names(rep) $starttest]
+ if { $tindex == -1 } {
+ set tindex 0
+ }
+ set rlist [lrange $test_names(rep) $tindex end]
+ foreach test $rlist {
+ set random_recopt \
+ [berkdb random_int 0 1]
+ if { $random_recopt == 1 } {
+ set test_recopts "-recover"
+ } else {
+ set test_recopts {""}
+ }
+
+ set method_list \
+ [find_valid_methods $test]
+ set list_length \
+ [expr [llength $method_list] - 1]
+ set method_index \
+ [berkdb random_int 0 $list_length]
+ set rand_method \
+ [lindex $method_list $method_index]
+
+ if { $display } {
+ puts "eval $test \
+ $rand_method; verify_dir \
+ $testdir \"\" 1"
+ }
+ if { $run } {
+ check_handles
+ eval $test $rand_method
+ verify_dir $testdir "" 1
+ }
+ }
+ }
+ rep_complete {
+ set tindex [lsearch $test_names(rep) $starttest]
+ if { $tindex == -1 } {
+ set tindex 0
+ }
+ set rlist [lrange $test_names(rep) $tindex end]
+ foreach test $rlist {
run_test $test $display $run
}
+ }
+ repmethod {
# We seed the random number generator here
# instead of in run_repmethod so that we
# aren't always reusing the first few
@@ -624,6 +727,13 @@ proc r { args } {
if { $run } {
run_subsystem $sub 0 1
}
+ }
+ secmethod {
+ # Skip secure mode tests if release
+ # does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
foreach test $test_names(test) {
eval run_test run_secmethod \
$display $run $test
@@ -681,7 +791,6 @@ proc r { args } {
flush stderr
} res] != 0} {
global errorInfo;
-
set fnl [string first "\n" $errorInfo]
set theError [string range $errorInfo 0 [expr $fnl - 1]]
if {[string first FAIL $errorInfo] == -1} {
@@ -716,7 +825,9 @@ proc run_subsystem { sub { display 0 } { run 1} } {
proc run_test { test {display 0} {run 1} args } {
source ./include.tcl
- foreach method "hash queue queueext recno rbtree frecno rrecno btree" {
+ global valid_methods
+
+ foreach method $valid_methods {
if { $display } {
puts "eval $test -$method $args; verify_dir $testdir \"\" 1"
}
@@ -1000,7 +1111,7 @@ proc run_secenv { method test {largs ""} } {
set stat [catch {
check_handles
set env [eval {berkdb_env -create -mode 0644 -home $testdir \
- -encryptaes $passwd -cachesize {0 1048576 1}}]
+ -encryptaes $passwd -cachesize {0 2097152 1}}]
error_check_good env_open [is_valid_env $env] TRUE
append largs " -env $env "
@@ -1055,6 +1166,11 @@ proc run_secenv { method test {largs ""} } {
proc run_reptest { method test {droppct 0} {nclients 1} {do_del 0} \
{do_sec 0} {do_oob 0} {largs "" } } {
source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
global __debug_on
global __debug_print
global __debug_test
@@ -1063,7 +1179,8 @@ proc run_reptest { method test {droppct 0} {nclients 1} {do_del 0} \
global passwd
global has_crypto
- puts "run_reptest: $method $test $droppct $nclients $do_del $do_sec $do_oob $largs"
+ puts "run_reptest: \
+ $method $test $droppct $nclients $do_del $do_sec $do_oob $largs"
env_cleanup $testdir
set is_envmethod 1
@@ -1089,6 +1206,7 @@ proc run_reptest { method test {droppct 0} {nclients 1} {do_del 0} \
testparams.tcl; skipping."
continue
}
+
puts -nonewline \
"Repl: $test: dropping $droppct%, $nclients clients "
if { $do_del } {
@@ -1146,6 +1264,11 @@ proc run_reptest { method test {droppct 0} {nclients 1} {do_del 0} \
proc run_repmethod { method test {numcl 0} {display 0} {run 1} \
{outfile stdout} {largs ""} } {
source ./include.tcl
+ if { $is_windows9x_test == 1 } {
+ puts "Skipping replication test on Win 9x platform."
+ return
+ }
+
global __debug_on
global __debug_print
global __debug_test
@@ -1204,6 +1327,9 @@ proc run_envmethod { method test {display 0} {run 1} {outfile stdout} \
set save_largs $largs
set envargs ""
+
+ # Enlarge the cache by default - some compaction tests need it.
+ set cacheargs "-cachesize {0 2097152 1}"
env_cleanup $testdir
if { $display == 1 } {
@@ -1239,12 +1365,16 @@ proc run_envmethod { method test {display 0} {run 1} {outfile stdout} \
set largs [lreplace $largs $aindex $aindex]
}
+ # We raise the number of locks and objects - there are a few
+ # compaction tests that require a large number.
+ set lockargs " -lock_max_locks 40000 -lock_max_objects 20000 "
+
if { $run == 1 } {
set is_envmethod 1
set stat [catch {
check_handles
- set env [eval {berkdb_env -create -txn \
- -mode 0644 -home $testdir} $envargs]
+ set env [eval {berkdb_env -create -txn -mode 0644 \
+ -home $testdir} $cacheargs $lockargs $envargs]
error_check_good env_open [is_valid_env $env] TRUE
append largs " -env $env "
@@ -1362,12 +1492,12 @@ proc run_recds { {run 1} {display 0} args } {
global test_names
global gen_upgrade_log
global encrypt
+ global valid_methods
set log_log_record_types 1
logtrack_init
- foreach method \
- "btree rbtree hash queue queueext recno frecno rrecno" {
+ foreach method $valid_methods {
check_handles
#set test_names(recd) "recd005 recd017"
foreach test $test_names(recd) {
@@ -1407,6 +1537,7 @@ proc run_all { { testname ALL } args } {
global test_names
global one_test
global has_crypto
+ global valid_methods
source ./include.tcl
fileremove -f ALL.OUT
@@ -1496,10 +1627,9 @@ proc run_all { { testname ALL } args } {
# XXX
# Broken up into separate tclsh instantiations so
# we don't require so much memory.
- foreach method \
- "btree rbtree hash queue queueext recno frecno rrecno" {
+ foreach method $valid_methods {
puts "Running $method tests with pagesize $pgsz"
- foreach sub {test sdb} {
+ foreach sub {test sdb si} {
foreach test $test_names($sub) {
if { $run == 0 } {
set o [open ALL.OUT a]
@@ -1531,9 +1661,9 @@ proc run_all { { testname ALL } args } {
#
# Run access method tests at default page size in one env.
#
- foreach method "btree rbtree hash queue queueext recno frecno rrecno" {
+ foreach method $valid_methods {
puts "Running $method tests in a txn env"
- foreach sub {test sdb} {
+ foreach sub {test sdb si} {
foreach test $test_names($sub) {
if { $run == 0 } {
set o [open ALL.OUT a]
@@ -1562,9 +1692,9 @@ proc run_all { { testname ALL } args } {
# 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" {
+ foreach method $valid_methods {
puts "Running $method tests in a threaded txn env"
- foreach sub {test sdb} {
+ foreach sub {test sdb si} {
foreach test $test_names($sub) {
if { $run == 0 } {
set o [open ALL.OUT a]
@@ -1592,9 +1722,9 @@ proc run_all { { testname ALL } args } {
#
# Run access method tests at default page size with -alloc enabled.
#
- foreach method "btree rbtree hash queue queueext recno frecno rrecno" {
+ foreach method $valid_methods {
puts "Running $method tests in an env with -alloc"
- foreach sub {test sdb} {
+ foreach sub {test sdb si} {
foreach test $test_names($sub) {
if { $run == 0 } {
set o [open ALL.OUT a]
@@ -1619,16 +1749,22 @@ proc run_all { { testname ALL } args } {
}
}
}
+
+ # Run standard access method tests under replication.
#
- # Run tests using proc r. The replication tests have been
- # moved from run_std to run_all.
- #
- set test_list [list {"replication" "rep"}]
- #
+ set test_list [list {"testNNN under replication" "repmethod"}]
+
+ # If we're on Windows, Linux, FreeBSD, or Solaris, run the
+ # bigfile tests. These create files larger than 4 GB.
+ if { $is_freebsd_test == 1 || $is_linux_test == 1 || \
+ $is_sunos_test == 1 || $is_windows_test == 1 } {
+ lappend test_list {"big files" "bigfile"}
+ }
+
# If release supports encryption, run security tests.
#
if { $has_crypto == 1 } {
- lappend test_list {"security" "sec"}
+ lappend test_list {"testNNN with security" "secmethod"}
}
#
# If configured for RPC, then run rpc tests too.
diff --git a/db/test/test001.tcl b/db/test/test001.tcl
index 2d7130fcb..ee655ba1f 100644
--- a/db/test/test001.tcl
+++ b/db/test/test001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test001.tcl,v 11.38 2004/09/22 18:01:06 bostic Exp $
+# $Id: test001.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test001
# TEST Small keys/data
diff --git a/db/test/test002.tcl b/db/test/test002.tcl
index 265f0640f..28972cca8 100644
--- a/db/test/test002.tcl
+++ b/db/test/test002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test002.tcl,v 11.21 2004/01/28 03:36:30 bostic Exp $
+# $Id: test002.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test002
# TEST Small keys/medium data
diff --git a/db/test/test003.tcl b/db/test/test003.tcl
index 4e9c0125d..8832da23b 100644
--- a/db/test/test003.tcl
+++ b/db/test/test003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test003.tcl,v 11.28 2004/01/28 03:36:30 bostic Exp $
+# $Id: test003.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test003
# TEST Small keys/large data
diff --git a/db/test/test004.tcl b/db/test/test004.tcl
index 598e3eb22..1dd1a7b88 100644
--- a/db/test/test004.tcl
+++ b/db/test/test004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test004.tcl,v 11.24 2004/01/28 03:36:30 bostic Exp $
+# $Id: test004.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test004
# TEST Small keys/medium data
diff --git a/db/test/test005.tcl b/db/test/test005.tcl
index e3972b5b1..6a991a5ac 100644
--- a/db/test/test005.tcl
+++ b/db/test/test005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test005.tcl,v 11.10 2004/01/28 03:36:30 bostic Exp $
+# $Id: test005.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test005
# TEST Small keys/medium data
diff --git a/db/test/test006.tcl b/db/test/test006.tcl
index 4107bbf09..5b6c30e08 100644
--- a/db/test/test006.tcl
+++ b/db/test/test006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test006.tcl,v 11.26 2004/09/22 18:01:06 bostic Exp $
+# $Id: test006.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test006
# TEST Small keys/medium data
diff --git a/db/test/test007.tcl b/db/test/test007.tcl
index 6cb57495a..f57b86940 100644
--- a/db/test/test007.tcl
+++ b/db/test/test007.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test007.tcl,v 11.12 2004/01/28 03:36:30 bostic Exp $
+# $Id: test007.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test007
# TEST Small keys/medium data
diff --git a/db/test/test008.tcl b/db/test/test008.tcl
index d798d3fb2..afab3b281 100644
--- a/db/test/test008.tcl
+++ b/db/test/test008.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test008.tcl,v 11.26 2004/01/28 03:36:30 bostic Exp $
+# $Id: test008.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test008
# TEST Small keys/large data
diff --git a/db/test/test009.tcl b/db/test/test009.tcl
index 258b01277..05ae8fd4e 100644
--- a/db/test/test009.tcl
+++ b/db/test/test009.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test009.tcl,v 11.11 2004/01/28 03:36:30 bostic Exp $
+# $Id: test009.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test009
# TEST Small keys/large data
diff --git a/db/test/test010.tcl b/db/test/test010.tcl
index bbf6fba67..9e6a495c9 100644
--- a/db/test/test010.tcl
+++ b/db/test/test010.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test010.tcl,v 11.23 2004/01/28 03:36:30 bostic Exp $
+# $Id: test010.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test010
# TEST Duplicate test
diff --git a/db/test/test011.tcl b/db/test/test011.tcl
index ad8439011..544cd1947 100644
--- a/db/test/test011.tcl
+++ b/db/test/test011.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test011.tcl,v 11.30 2004/01/28 03:36:30 bostic Exp $
+# $Id: test011.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test011
# TEST Duplicate test
diff --git a/db/test/test012.tcl b/db/test/test012.tcl
index 42225d982..2b5c8819c 100644
--- a/db/test/test012.tcl
+++ b/db/test/test012.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test012.tcl,v 11.22 2004/01/28 03:36:30 bostic Exp $
+# $Id: test012.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test012
# TEST Large keys/small data
diff --git a/db/test/test013.tcl b/db/test/test013.tcl
index e456965bf..9e0ee36a0 100644
--- a/db/test/test013.tcl
+++ b/db/test/test013.tcl
@@ -1,14 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test013.tcl,v 11.26 2004/01/28 03:36:30 bostic Exp $
+# $Id: test013.tcl,v 12.4 2006/08/24 14:46:39 bostic Exp $
#
# TEST test013
# TEST Partial put test
# TEST Overwrite entire records using partial puts.
-# TEST Make surethat NOOVERWRITE flag works.
+# TEST Make sure that 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).
diff --git a/db/test/test014.tcl b/db/test/test014.tcl
index 708d5dc09..421ec3412 100644
--- a/db/test/test014.tcl
+++ b/db/test/test014.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test014.tcl,v 11.26 2004/01/28 03:36:30 bostic Exp $
+# $Id: test014.tcl,v 12.3 2006/08/24 14:46:39 bostic Exp $
#
# TEST test014
# TEST Exercise partial puts on short data
diff --git a/db/test/test015.tcl b/db/test/test015.tcl
index 940122811..432c6ad5e 100644
--- a/db/test/test015.tcl
+++ b/db/test/test015.tcl
@@ -1,15 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test015.tcl,v 11.29 2004/01/28 03:36:30 bostic Exp $
+# $Id: test015.tcl,v 12.4 2006/08/24 14:46:40 bostic Exp $
#
# 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 testdir
+ set orig_tdir $testdir
set low_range 50
set mid_range 100
@@ -50,10 +51,10 @@ proc test015 { method {nentries 7500} { start 0 } args } {
set env [lindex $args $eindex]
set testdir [get_home $env]
}
-puts "Verifying testdir $testdir"
error_check_good verify [verify_dir $testdir "\tTest015.e: "] 0
}
+ set testdir $orig_tdir
}
proc test015_init { } {
@@ -71,6 +72,7 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
+ set orig_tdir $testdir
set checkfunc test015.check
if { [is_fixed_length $method] && \
@@ -248,6 +250,7 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
[filecmp $t3 $t2] 0
unset dvals
+ set testdir $orig_tdir
}
# Check function for test015; keys and data are identical
diff --git a/db/test/test016.tcl b/db/test/test016.tcl
index 481c85ec7..4333d81cb 100644
--- a/db/test/test016.tcl
+++ b/db/test/test016.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test016.tcl,v 11.25 2004/01/28 03:36:30 bostic Exp $
+# $Id: test016.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test016
# TEST Partial put test
diff --git a/db/test/test017.tcl b/db/test/test017.tcl
index 6503b2cc1..9944a4360 100644
--- a/db/test/test017.tcl
+++ b/db/test/test017.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test017.tcl,v 11.29 2004/01/28 03:36:30 bostic Exp $
+# $Id: test017.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test017
# TEST Basic offpage duplicate test.
diff --git a/db/test/test018.tcl b/db/test/test018.tcl
index bf2e3eb56..b9799631b 100644
--- a/db/test/test018.tcl
+++ b/db/test/test018.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test018.tcl,v 11.10 2004/01/28 03:36:30 bostic Exp $
+# $Id: test018.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test018
# TEST Offpage duplicate test
diff --git a/db/test/test019.tcl b/db/test/test019.tcl
index 68f6487be..4871a139a 100644
--- a/db/test/test019.tcl
+++ b/db/test/test019.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test019.tcl,v 11.24 2004/04/22 18:57:32 sue Exp $
+# $Id: test019.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test019
# TEST Partial get test.
diff --git a/db/test/test020.tcl b/db/test/test020.tcl
index 19eda9c31..1f5360f1b 100644
--- a/db/test/test020.tcl
+++ b/db/test/test020.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test020.tcl,v 11.19 2004/01/28 03:36:30 bostic Exp $
+# $Id: test020.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test020
# TEST In-Memory database tests.
diff --git a/db/test/test021.tcl b/db/test/test021.tcl
index 43a7a4bde..df52e9232 100644
--- a/db/test/test021.tcl
+++ b/db/test/test021.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test021.tcl,v 11.17 2004/01/28 03:36:30 bostic Exp $
+# $Id: test021.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test021
# TEST Btree range tests.
diff --git a/db/test/test022.tcl b/db/test/test022.tcl
index deded62e7..a549289aa 100644
--- a/db/test/test022.tcl
+++ b/db/test/test022.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test022.tcl,v 11.16 2004/01/28 03:36:30 bostic Exp $
+# $Id: test022.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test022
# TEST Test of DB->getbyteswapped().
diff --git a/db/test/test023.tcl b/db/test/test023.tcl
index c4a707288..5f42ee249 100644
--- a/db/test/test023.tcl
+++ b/db/test/test023.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test023.tcl,v 11.21 2004/09/20 17:06:16 sue Exp $
+# $Id: test023.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test023
# TEST Duplicate test
diff --git a/db/test/test024.tcl b/db/test/test024.tcl
index 4ac1fceae..77c931f23 100644
--- a/db/test/test024.tcl
+++ b/db/test/test024.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test024.tcl,v 11.21 2004/01/28 03:36:30 bostic Exp $
+# $Id: test024.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test024
# TEST Record number retrieval test.
diff --git a/db/test/test025.tcl b/db/test/test025.tcl
index 8f3cb5c0c..3baea3e3e 100644
--- a/db/test/test025.tcl
+++ b/db/test/test025.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test025.tcl,v 11.22 2004/01/28 03:36:30 bostic Exp $
+# $Id: test025.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test025
# TEST DB_APPEND flag test.
diff --git a/db/test/test026.tcl b/db/test/test026.tcl
index ce91e2b46..426bb8279 100644
--- a/db/test/test026.tcl
+++ b/db/test/test026.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test026.tcl,v 11.23 2004/01/28 03:36:30 bostic Exp $
+# $Id: test026.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test026
# TEST Small keys/medium data w/duplicates
diff --git a/db/test/test027.tcl b/db/test/test027.tcl
index 7f6d78c3a..d8ac78c5a 100644
--- a/db/test/test027.tcl
+++ b/db/test/test027.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test027.tcl,v 11.10 2004/01/28 03:36:30 bostic Exp $
+# $Id: test027.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test027
# TEST Off-page duplicate test
diff --git a/db/test/test028.tcl b/db/test/test028.tcl
index 3884d83e9..42eb60940 100644
--- a/db/test/test028.tcl
+++ b/db/test/test028.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test028.tcl,v 11.22 2004/01/28 03:36:30 bostic Exp $
+# $Id: test028.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test028
# TEST Cursor delete test
diff --git a/db/test/test029.tcl b/db/test/test029.tcl
index 53622efeb..f3137cb7f 100644
--- a/db/test/test029.tcl
+++ b/db/test/test029.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test029.tcl,v 11.24 2004/09/22 18:01:06 bostic Exp $
+# $Id: test029.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test029
# TEST Test the Btree and Record number renumbering.
diff --git a/db/test/test030.tcl b/db/test/test030.tcl
index 3ee9daa3f..7ed4f3991 100644
--- a/db/test/test030.tcl
+++ b/db/test/test030.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test030.tcl,v 11.20 2004/01/28 03:36:30 bostic Exp $
+# $Id: test030.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test030
# TEST Test DB_NEXT_DUP Functionality.
diff --git a/db/test/test031.tcl b/db/test/test031.tcl
index 2b4ad0d98..c6b65be1b 100644
--- a/db/test/test031.tcl
+++ b/db/test/test031.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test031.tcl,v 11.27 2004/01/28 03:36:30 bostic Exp $
+# $Id: test031.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test031
# TEST Duplicate sorting functionality
diff --git a/db/test/test032.tcl b/db/test/test032.tcl
index e7cc49b47..bf839e170 100644
--- a/db/test/test032.tcl
+++ b/db/test/test032.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test032.tcl,v 11.26 2004/01/28 03:36:31 bostic Exp $
+# $Id: test032.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test032
# TEST DB_GET_BOTH, DB_GET_BOTH_RANGE
diff --git a/db/test/test033.tcl b/db/test/test033.tcl
index b606883c1..455084681 100644
--- a/db/test/test033.tcl
+++ b/db/test/test033.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test033.tcl,v 11.27 2004/01/28 03:36:31 bostic Exp $
+# $Id: test033.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test033
# TEST DB_GET_BOTH without comparison function
diff --git a/db/test/test034.tcl b/db/test/test034.tcl
index 5da920522..ac00eb392 100644
--- a/db/test/test034.tcl
+++ b/db/test/test034.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1998-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1998-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test034.tcl,v 11.12 2004/01/28 03:36:31 bostic Exp $
+# $Id: test034.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test034
# TEST test032 with off-page duplicates
diff --git a/db/test/test035.tcl b/db/test/test035.tcl
index 63945c588..d25ede647 100644
--- a/db/test/test035.tcl
+++ b/db/test/test035.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test035.tcl,v 11.12 2004/01/28 03:36:31 bostic Exp $
+# $Id: test035.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test035
# TEST Test033 with off-page duplicates
diff --git a/db/test/test036.tcl b/db/test/test036.tcl
index 5fe24cb21..aea0ead20 100644
--- a/db/test/test036.tcl
+++ b/db/test/test036.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test036.tcl,v 11.20 2004/01/28 03:36:31 bostic Exp $
+# $Id: test036.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test036
# TEST Test KEYFIRST and KEYLAST when the key doesn't exist
diff --git a/db/test/test037.tcl b/db/test/test037.tcl
index c571ffa3e..1f8c6b397 100644
--- a/db/test/test037.tcl
+++ b/db/test/test037.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test037.tcl,v 11.20 2004/01/28 03:36:31 bostic Exp $
+# $Id: test037.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test037
# TEST Test DB_RMW
diff --git a/db/test/test038.tcl b/db/test/test038.tcl
index eaf934f5d..59769bd50 100644
--- a/db/test/test038.tcl
+++ b/db/test/test038.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test038.tcl,v 11.26 2004/01/28 03:36:31 bostic Exp $
+# $Id: test038.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test038
# TEST DB_GET_BOTH, DB_GET_BOTH_RANGE on deleted items
diff --git a/db/test/test039.tcl b/db/test/test039.tcl
index 67b2eaf33..b39e64248 100644
--- a/db/test/test039.tcl
+++ b/db/test/test039.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test039.tcl,v 11.23 2004/01/28 03:36:31 bostic Exp $
+# $Id: test039.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test039
# TEST DB_GET_BOTH/DB_GET_BOTH_RANGE on deleted items without comparison
diff --git a/db/test/test040.tcl b/db/test/test040.tcl
index 61d5cd1f3..50712f65b 100644
--- a/db/test/test040.tcl
+++ b/db/test/test040.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1998-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1998-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test040.tcl,v 11.10 2004/01/28 03:36:31 bostic Exp $
+# $Id: test040.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test040
# TEST Test038 with off-page duplicates
diff --git a/db/test/test041.tcl b/db/test/test041.tcl
index 790ece943..e647b3583 100644
--- a/db/test/test041.tcl
+++ b/db/test/test041.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test041.tcl,v 11.9 2004/01/28 03:36:31 bostic Exp $
+# $Id: test041.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test041
# TEST Test039 with off-page duplicates
diff --git a/db/test/test042.tcl b/db/test/test042.tcl
index b216ebf27..c4f7d3a69 100644
--- a/db/test/test042.tcl
+++ b/db/test/test042.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test042.tcl,v 11.46 2004/09/22 18:01:06 bostic Exp $
+# $Id: test042.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test042
# TEST Concurrent Data Store test (CDB)
diff --git a/db/test/test043.tcl b/db/test/test043.tcl
index bbb934cce..2460c4e60 100644
--- a/db/test/test043.tcl
+++ b/db/test/test043.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test043.tcl,v 11.19 2004/01/28 03:36:31 bostic Exp $
+# $Id: test043.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test043
# TEST Recno renumbering and implicit creation test
diff --git a/db/test/test044.tcl b/db/test/test044.tcl
index 22d56a434..9525a2cc9 100644
--- a/db/test/test044.tcl
+++ b/db/test/test044.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test044.tcl,v 11.35 2004/01/28 03:36:31 bostic Exp $
+# $Id: test044.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test044
# TEST Small system integration tests
diff --git a/db/test/test045.tcl b/db/test/test045.tcl
index 2b4c517ca..77f2905fd 100644
--- a/db/test/test045.tcl
+++ b/db/test/test045.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test045.tcl,v 11.27 2004/01/28 03:36:31 bostic Exp $
+# $Id: test045.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test045
# TEST Small random tester
diff --git a/db/test/test046.tcl b/db/test/test046.tcl
index 63d0ec7c4..50d5307b0 100644
--- a/db/test/test046.tcl
+++ b/db/test/test046.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test046.tcl,v 11.36 2004/01/28 03:36:31 bostic Exp $
+# $Id: test046.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test046
# TEST Overwrite test of small/big key/data with cursor checks.
diff --git a/db/test/test047.tcl b/db/test/test047.tcl
index 48b6fc759..973ab2afe 100644
--- a/db/test/test047.tcl
+++ b/db/test/test047.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test047.tcl,v 11.22 2004/01/28 03:36:31 bostic Exp $
+# $Id: test047.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test047
# TEST DBcursor->c_get get test with SET_RANGE option.
diff --git a/db/test/test048.tcl b/db/test/test048.tcl
index db73b2b6d..457bfe857 100644
--- a/db/test/test048.tcl
+++ b/db/test/test048.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test048.tcl,v 11.22 2004/05/13 18:51:43 mjc Exp $
+# $Id: test048.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test048
# TEST Cursor stability across Btree splits.
diff --git a/db/test/test049.tcl b/db/test/test049.tcl
index f8d173380..1403ced65 100644
--- a/db/test/test049.tcl
+++ b/db/test/test049.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test049.tcl,v 11.24 2004/01/28 03:36:31 bostic Exp $
+# $Id: test049.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test049
# TEST Cursor operations on uninitialized cursors.
diff --git a/db/test/test050.tcl b/db/test/test050.tcl
index 72be5af67..ee057b248 100644
--- a/db/test/test050.tcl
+++ b/db/test/test050.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test050.tcl,v 11.23 2004/01/28 03:36:31 bostic Exp $
+# $Id: test050.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test050
# TEST Overwrite test of small/big key/data with cursor checks for Recno.
diff --git a/db/test/test051.tcl b/db/test/test051.tcl
index 5e09835e3..06026e349 100644
--- a/db/test/test051.tcl
+++ b/db/test/test051.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test051.tcl,v 11.25 2004/01/28 03:36:31 bostic Exp $
+# $Id: test051.tcl,v 12.5 2006/08/24 14:46:40 bostic Exp $
#
# TEST test051
# TEST Fixed-length record Recno test.
@@ -20,7 +20,7 @@ proc test051 { method { args "" } } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test051: Test of the fixed length records."
+ puts "Test051 ($method): Test of the fixed length records."
if { [is_fixed_length $method] != 1 } {
puts "Test051: skipping for method $method"
return
@@ -108,7 +108,7 @@ proc test051 { method { args "" } } {
if { $eindex == -1 } {
error_check_good "dbput:partial: dlen < size" \
[is_substr \
- $errorInfo "Record length error"] 1
+ $errorInfo "ecord length"] 1
} else {
error_check_good "dbput:partial: dlen < size" \
[is_substr $errorCode "EINVAL"] 1
@@ -124,7 +124,7 @@ proc test051 { method { args "" } } {
if { $eindex == -1 } {
error_check_good "dbput:partial: dlen > size" \
[is_substr \
- $errorInfo "Record length error"] 1
+ $errorInfo "ecord length"] 1
} else {
error_check_good "dbput:partial: dlen < size" \
[is_substr $errorCode "EINVAL"] 1
diff --git a/db/test/test052.tcl b/db/test/test052.tcl
index c7d891d33..ebe49aa53 100644
--- a/db/test/test052.tcl
+++ b/db/test/test052.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test052.tcl,v 11.20 2004/09/20 17:06:16 sue Exp $
+# $Id: test052.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test052
# TEST Renumbering record Recno test.
diff --git a/db/test/test053.tcl b/db/test/test053.tcl
index 5c5e060ec..2c2312335 100644
--- a/db/test/test053.tcl
+++ b/db/test/test053.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test053.tcl,v 11.21 2004/05/13 18:51:43 mjc Exp $
+# $Id: test053.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test053
# TEST Test of the DB_REVSPLITOFF flag in the Btree and Btree-w-recnum
diff --git a/db/test/test054.tcl b/db/test/test054.tcl
index 44d0335f4..a3787013c 100644
--- a/db/test/test054.tcl
+++ b/db/test/test054.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test054.tcl,v 11.26 2004/09/20 17:06:16 sue Exp $
+# $Id: test054.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test054
# TEST Cursor maintenance during key/data deletion.
diff --git a/db/test/test055.tcl b/db/test/test055.tcl
index 96bf108c3..3cf2cd1ca 100644
--- a/db/test/test055.tcl
+++ b/db/test/test055.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test055.tcl,v 11.18 2004/01/28 03:36:31 bostic Exp $
+# $Id: test055.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test055
# TEST Basic cursor operations.
diff --git a/db/test/test056.tcl b/db/test/test056.tcl
index f689d6592..6c177923c 100644
--- a/db/test/test056.tcl
+++ b/db/test/test056.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test056.tcl,v 11.21 2004/09/20 17:06:16 sue Exp $
+# $Id: test056.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test056
# TEST Cursor maintenance during deletes.
diff --git a/db/test/test057.tcl b/db/test/test057.tcl
index 56fe2bf44..9b4cdf666 100644
--- a/db/test/test057.tcl
+++ b/db/test/test057.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test057.tcl,v 11.26 2004/09/20 17:06:16 sue Exp $
+# $Id: test057.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test057
# TEST Cursor maintenance during key deletes.
diff --git a/db/test/test058.tcl b/db/test/test058.tcl
index 4213e7279..87d0bc035 100644
--- a/db/test/test058.tcl
+++ b/db/test/test058.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test058.tcl,v 11.22 2004/01/28 03:36:31 bostic Exp $
+# $Id: test058.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test058
# TEST Verify that deleting and reading duplicates results in correct ordering.
diff --git a/db/test/test059.tcl b/db/test/test059.tcl
index 887ce6d94..3f2f01f4b 100644
--- a/db/test/test059.tcl
+++ b/db/test/test059.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test059.tcl,v 11.20 2004/01/28 03:36:31 bostic Exp $
+# $Id: test059.tcl,v 12.3 2006/08/24 14:46:40 bostic Exp $
#
# TEST test059
# TEST Cursor ops work with a partial length of 0.
diff --git a/db/test/test060.tcl b/db/test/test060.tcl
index 770fb5d05..73177bb62 100644
--- a/db/test/test060.tcl
+++ b/db/test/test060.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test060.tcl,v 11.12 2004/01/28 03:36:31 bostic Exp $
+# $Id: test060.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test060
# TEST Test of the DB_EXCL flag to DB->open().
diff --git a/db/test/test061.tcl b/db/test/test061.tcl
index f4b12c45d..d94debc43 100644
--- a/db/test/test061.tcl
+++ b/db/test/test061.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test061.tcl,v 11.20 2004/01/28 03:36:31 bostic Exp $
+# $Id: test061.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test061
# TEST Test of txn abort and commit for in-memory databases.
diff --git a/db/test/test062.tcl b/db/test/test062.tcl
index f26c66d6a..4264124cd 100644
--- a/db/test/test062.tcl
+++ b/db/test/test062.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test062.tcl,v 11.23 2004/01/28 03:36:31 bostic Exp $
+# $Id: test062.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test062
# TEST Test of partial puts (using DB_CURRENT) onto duplicate pages.
diff --git a/db/test/test063.tcl b/db/test/test063.tcl
index 8918fa4fa..d1c15320d 100644
--- a/db/test/test063.tcl
+++ b/db/test/test063.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test063.tcl,v 11.20 2004/01/28 03:36:31 bostic Exp $
+# $Id: test063.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test063
# TEST Test of the DB_RDONLY flag to DB->open
diff --git a/db/test/test064.tcl b/db/test/test064.tcl
index 13a646574..d08ad746f 100644
--- a/db/test/test064.tcl
+++ b/db/test/test064.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test064.tcl,v 11.16 2004/01/28 03:36:31 bostic Exp $
+# $Id: test064.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test064
# TEST Test of DB->get_type
diff --git a/db/test/test065.tcl b/db/test/test065.tcl
index cb29b106d..5aa3bb43d 100644
--- a/db/test/test065.tcl
+++ b/db/test/test065.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test065.tcl,v 11.22 2004/09/22 18:01:06 bostic Exp $
+# $Id: test065.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test065
# TEST Test of DB->stat, both -DB_FAST_STAT and row
diff --git a/db/test/test066.tcl b/db/test/test066.tcl
index 6f3120907..5d6c4598d 100644
--- a/db/test/test066.tcl
+++ b/db/test/test066.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test066.tcl,v 11.15 2004/01/28 03:36:31 bostic Exp $
+# $Id: test066.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test066
# TEST Test of cursor overwrites of DB_CURRENT w/ duplicates.
diff --git a/db/test/test067.tcl b/db/test/test067.tcl
index 710c6b9c2..be80f62ca 100644
--- a/db/test/test067.tcl
+++ b/db/test/test067.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test067.tcl,v 11.25 2004/09/22 18:01:06 bostic Exp $
+# $Id: test067.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test067
# TEST Test of DB_CURRENT partial puts onto almost empty duplicate
diff --git a/db/test/test068.tcl b/db/test/test068.tcl
index a4fb56da0..eb44f6991 100644
--- a/db/test/test068.tcl
+++ b/db/test/test068.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test068.tcl,v 11.21 2004/05/13 18:51:43 mjc Exp $
+# $Id: test068.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
#
# TEST test068
# TEST Test of DB_BEFORE and DB_AFTER with partial puts.
@@ -16,10 +16,18 @@ proc test068 { method args } {
global is_je_test
set tnum "068"
+ set orig_tdir $testdir
set args [convert_args $method $args]
set omethod [convert_method $method]
+ puts "Test$tnum:\
+ $method ($args) Test of DB_BEFORE/DB_AFTER and partial puts."
+ if { [is_record_based $method] == 1 } {
+ puts "\tTest$tnum: skipping for method $method."
+ return
+ }
+
set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
@@ -41,13 +49,6 @@ proc test068 { method args } {
set testdir [get_home $env]
}
- puts "Test$tnum:\
- $method ($args) Test of DB_BEFORE/DB_AFTER and partial puts."
- if { [is_record_based $method] == 1 } {
- puts "\tTest$tnum: skipping for method $method."
- return
- }
-
# Create a list of $nkeys words to insert into db.
puts "\tTest$tnum.a: Initialize word list."
set txn ""
@@ -76,7 +77,6 @@ proc test068 { method args } {
continue
}
- #
# Testdir might be reset in the loop by some proc sourcing
# include.tcl. Reset it to the env's home here, before
# cleanup.
@@ -228,4 +228,5 @@ proc test068 { method args } {
}
error_check_good db_close [$db close] 0
}
+ set testdir $orig_tdir
}
diff --git a/db/test/test069.tcl b/db/test/test069.tcl
index 46104ffa2..8a6f52e54 100644
--- a/db/test/test069.tcl
+++ b/db/test/test069.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test069.tcl,v 11.10 2004/01/28 03:36:31 bostic Exp $
+# $Id: test069.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test069
# TEST Test of DB_CURRENT partial puts without duplicates-- test067 w/
diff --git a/db/test/test070.tcl b/db/test/test070.tcl
index 9d124a77b..f8210ccf2 100644
--- a/db/test/test070.tcl
+++ b/db/test/test070.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test070.tcl,v 11.33 2004/02/17 16:29:07 dda Exp $
+# $Id: test070.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test070
# TEST Test of DB_CONSUME (Four consumers, 1000 items.)
diff --git a/db/test/test071.tcl b/db/test/test071.tcl
index 7834c82ad..a83644007 100644
--- a/db/test/test071.tcl
+++ b/db/test/test071.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test071.tcl,v 11.14 2004/01/28 03:36:31 bostic Exp $
+# $Id: test071.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test071
# TEST Test of DB_CONSUME (One consumer, 10000 items.)
diff --git a/db/test/test072.tcl b/db/test/test072.tcl
index 3a8ff7aa2..378ae7797 100644
--- a/db/test/test072.tcl
+++ b/db/test/test072.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test072.tcl,v 11.34 2004/05/13 18:51:44 mjc Exp $
+# $Id: test072.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test072
# TEST Test of cursor stability when duplicates are moved off-page.
diff --git a/db/test/test073.tcl b/db/test/test073.tcl
index bac753ea6..b79e639e2 100644
--- a/db/test/test073.tcl
+++ b/db/test/test073.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test073.tcl,v 11.26 2004/01/28 03:36:31 bostic Exp $
+# $Id: test073.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test073
# TEST Test of cursor stability on duplicate pages.
diff --git a/db/test/test074.tcl b/db/test/test074.tcl
index 8302a2302..7d8091f86 100644
--- a/db/test/test074.tcl
+++ b/db/test/test074.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test074.tcl,v 11.22 2004/09/22 18:01:06 bostic Exp $
+# $Id: test074.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test074
# TEST Test of DB_NEXT_NODUP.
diff --git a/db/test/test076.tcl b/db/test/test076.tcl
index 49827d353..ebdb2127d 100644
--- a/db/test/test076.tcl
+++ b/db/test/test076.tcl
@@ -1,13 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test076.tcl,v 1.22 2004/01/28 03:36:31 bostic Exp $
+# $Id: test076.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
#
# TEST test076
# TEST Test creation of many small databases in a single environment. [#1528].
-proc test076 { method { ndbs 1000 } { tnum "076" } args } {
+proc test076 { method { ndbs 1000 } { tnum "076" } args } {
global is_qnx_test
source ./include.tcl
@@ -48,6 +48,10 @@ proc test076 { method { ndbs 1000 } { tnum "076" } args } {
if { $is_qnx_test && $ndbs > 100 } {
set ndbs 100
}
+ if { [is_queueext $method] } {
+ set ndbs 500
+ }
+
puts -nonewline "Test$tnum $method ($args): "
puts -nonewline "Create $ndbs"
puts " small databases in one env."
diff --git a/db/test/test077.tcl b/db/test/test077.tcl
index 3c1fd869b..dc8d41b08 100644
--- a/db/test/test077.tcl
+++ b/db/test/test077.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test077.tcl,v 1.14 2004/01/28 03:36:31 bostic Exp $
+# $Id: test077.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test077
# TEST Test of DB_GET_RECNO [#1206].
diff --git a/db/test/test078.tcl b/db/test/test078.tcl
index 549fc13c7..b0254d80d 100644
--- a/db/test/test078.tcl
+++ b/db/test/test078.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test078.tcl,v 1.26 2004/09/22 18:01:06 bostic Exp $
+# $Id: test078.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test078
# TEST Test of DBC->c_count(). [#303]
diff --git a/db/test/test079.tcl b/db/test/test079.tcl
index d5dbc3304..e80bff442 100644
--- a/db/test/test079.tcl
+++ b/db/test/test079.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test079.tcl,v 11.12 2004/01/28 03:36:31 bostic Exp $
+# $Id: test079.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test079
# TEST Test of deletes in large trees. (test006 w/ sm. pagesize).
diff --git a/db/test/test081.tcl b/db/test/test081.tcl
index a9c7f5cfc..ed9d38505 100644
--- a/db/test/test081.tcl
+++ b/db/test/test081.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test081.tcl,v 11.9 2004/01/28 03:36:31 bostic Exp $
+# $Id: test081.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test081
# TEST Test off-page duplicates and overflow pages together with
diff --git a/db/test/test082.tcl b/db/test/test082.tcl
index fb4d71c5c..576f14b62 100644
--- a/db/test/test082.tcl
+++ b/db/test/test082.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test082.tcl,v 11.8 2004/01/28 03:36:31 bostic Exp $
+# $Id: test082.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test082
# TEST Test of DB_PREV_NODUP (uses test074).
diff --git a/db/test/test083.tcl b/db/test/test083.tcl
index 7e4a8b960..d20e4c974 100644
--- a/db/test/test083.tcl
+++ b/db/test/test083.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test083.tcl,v 11.16 2004/01/28 03:36:31 bostic Exp $
+# $Id: test083.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test083
# TEST Test of DB->key_range.
diff --git a/db/test/test084.tcl b/db/test/test084.tcl
index 036c1c411..b972c9a32 100644
--- a/db/test/test084.tcl
+++ b/db/test/test084.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test084.tcl,v 11.15 2004/01/28 03:36:31 bostic Exp $
+# $Id: test084.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test084
# TEST Basic sanity test (test001) with large (64K) pages.
diff --git a/db/test/test085.tcl b/db/test/test085.tcl
index 373db33a5..00a22322e 100644
--- a/db/test/test085.tcl
+++ b/db/test/test085.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test085.tcl,v 1.18 2004/09/20 17:29:32 carol Exp $
+# $Id: test085.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test085
# TEST Test of cursor behavior when a cursor is pointing to a deleted
diff --git a/db/test/test086.tcl b/db/test/test086.tcl
index 8b2f7db81..f9bb0cdcb 100644
--- a/db/test/test086.tcl
+++ b/db/test/test086.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test086.tcl,v 11.12 2004/01/28 03:36:31 bostic Exp $
+# $Id: test086.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test086
# TEST Test of cursor stability across btree splits/rsplits with
diff --git a/db/test/test087.tcl b/db/test/test087.tcl
index 7501f4ce3..fab6e4199 100644
--- a/db/test/test087.tcl
+++ b/db/test/test087.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test087.tcl,v 11.19 2004/01/28 03:36:31 bostic Exp $
+# $Id: test087.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test087
# TEST Test of cursor stability when converting to and modifying
diff --git a/db/test/test088.tcl b/db/test/test088.tcl
index 2d3ec7396..369306782 100644
--- a/db/test/test088.tcl
+++ b/db/test/test088.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test088.tcl,v 11.15 2004/05/13 18:51:44 mjc Exp $
+# $Id: test088.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test088
# TEST Test of cursor stability across btree splits with very
diff --git a/db/test/test089.tcl b/db/test/test089.tcl
index 3eb2cd88d..303a9ce81 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test089.tcl,v 11.9 2004/01/28 03:36:32 bostic Exp $
+# $Id: test089.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
#
# TEST test089
# TEST Concurrent Data Store test (CDB)
@@ -118,7 +118,7 @@ proc test089 { method {nentries 1000} args } {
[$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]]
+ [pad_data $method [reverse $datastr]]
# Write forward datastr with dup cursor and read with original.
error_check_good put_current_dup \
diff --git a/db/test/test090.tcl b/db/test/test090.tcl
index 7c46c56c0..8b4150b35 100644
--- a/db/test/test090.tcl
+++ b/db/test/test090.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test090.tcl,v 11.15 2004/01/28 03:36:32 bostic Exp $
+# $Id: test090.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test090
# TEST Test for functionality near the end of the queue using test001.
diff --git a/db/test/test091.tcl b/db/test/test091.tcl
index 81cabb867..25a13702b 100644
--- a/db/test/test091.tcl
+++ b/db/test/test091.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test091.tcl,v 11.10 2004/01/28 03:36:32 bostic Exp $
+# $Id: test091.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test091
# TEST Test of DB_CONSUME_WAIT.
diff --git a/db/test/test092.tcl b/db/test/test092.tcl
index ef4c822d8..28fc9193b 100644
--- a/db/test/test092.tcl
+++ b/db/test/test092.tcl
@@ -1,15 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test092.tcl,v 11.18 2004/09/22 18:01:06 bostic Exp $
+# $Id: test092.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
#
# 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 database read-only twice. One with dirty reads 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).
@@ -86,9 +86,9 @@ proc test092 { method {nentries 1000} args } {
set t [$env txn]
error_check_good txnbegin [is_valid_txn $t $env] TRUE
- set tdr [$env txn -dirty]
+ set tdr [$env txn -read_uncommitted]
error_check_good txnbegin:dr [is_valid_txn $tdr $env] TRUE
- set dbtxn [eval {berkdb_open -auto_commit -env $env -dirty \
+ set dbtxn [eval {berkdb_open -auto_commit -env $env -read_uncommitted \
-mode 0644 $omethod} {$testfile}]
error_check_good dbopen:dbtxn [is_valid_db $dbtxn] TRUE
@@ -96,7 +96,7 @@ proc test092 { method {nentries 1000} args } {
-rdonly -mode 0644 $omethod} {$testfile}]
error_check_good dbopen:dbcl [is_valid_db $dbcl] TRUE
- set dbdr [eval {berkdb_open -auto_commit -env $env -dirty \
+ set dbdr [eval {berkdb_open -auto_commit -env $env -read_uncommitted \
-rdonly -mode 0644 $omethod} {$testfile}]
error_check_good dbopen:dbdr [is_valid_db $dbdr] TRUE
@@ -106,13 +106,14 @@ proc test092 { method {nentries 1000} args } {
set dbcdr0 [$dbdr cursor]
error_check_good dbcurs:dbdr0 [is_valid_cursor $dbcdr0 $dbdr] TRUE
- set dbcdr1 [$dbdr cursor -dirty]
+ set dbcdr1 [$dbdr cursor -read_uncommitted]
error_check_good dbcurs:dbdr1 [is_valid_cursor $dbcdr1 $dbdr] TRUE
- # Test that $db stat can use -dirty flag.
- puts "\tTest092.c: Smoke test for db_stat -txn -dirty"
- if { [catch {set statret [$dbcl stat -txn $t -dirty]} res] } {
- puts "FAIL: db_stat -txn -dirty returned $res"
+ # Test that $db stat can use -read_uncommitted flag.
+ puts "\tTest092.c: Smoke test for db_stat -txn -read_uncommitted"
+ if { [catch \
+ {set statret [$dbcl stat -txn $t -read_uncommitted]} res] } {
+ puts "FAIL: db_stat -txn -read_uncommitted returned $res"
}
#
@@ -152,7 +153,7 @@ proc test092 { method {nentries 1000} args } {
set ret [eval {$dbcl get -txn $tdr} $gflags {$key}]
error_check_good dbdr2:get $ret $drret
- set ret [eval {$dbdr get -dirty} $gflags {$key}]
+ set ret [eval {$dbdr get -read_uncommitted} $gflags {$key}]
error_check_good dbdr1:get $ret $drret
set ret [eval {$dbdr get -txn $tdr} $gflags {$key}]
@@ -165,10 +166,11 @@ proc test092 { method {nentries 1000} args } {
puts "\tTest092.e: Check dirty data using dirty txn and clean db/cursor"
dump_file_walk $dbccl $t1 $checkfunc "-first" "-next"
- puts "\tTest092.f: Check dirty data using -dirty cget flag"
- dump_file_walk $dbcdr0 $t2 $checkfunc "-first" "-next" "-dirty"
+ puts "\tTest092.f: Check dirty data using -read_uncommitted cget flag"
+ dump_file_walk \
+ $dbcdr0 $t2 $checkfunc "-first" "-next" "-read_uncommitted"
- puts "\tTest092.g: Check dirty data using -dirty cursor"
+ puts "\tTest092.g: Check dirty data using -read_uncommitted cursor"
dump_file_walk $dbcdr1 $t3 $checkfunc "-first" "-next"
#
@@ -191,7 +193,7 @@ proc test092 { method {nentries 1000} args } {
set dbcdr0 [$dbdr cursor]
error_check_good dbcurs:dbdr0 [is_valid_cursor $dbcdr0 $dbdr] TRUE
- set dbcdr1 [$dbdr cursor -dirty]
+ set dbcdr1 [$dbdr cursor -read_uncommitted]
error_check_good dbcurs:dbdr1 [is_valid_cursor $dbcdr1 $dbdr] TRUE
if { [is_record_based $method] == 1 } {
@@ -199,13 +201,14 @@ proc test092 { method {nentries 1000} args } {
} else {
set checkfunc test092cl.check
}
- puts "\tTest092.i: Check clean data using -dirty cget flag"
+ puts "\tTest092.i: Check clean data using -read_uncommitted cget flag"
dump_file_walk $dbccl $t1 $checkfunc "-first" "-next"
- puts "\tTest092.j: Check clean data using -dirty cget flag"
- dump_file_walk $dbcdr0 $t2 $checkfunc "-first" "-next" "-dirty"
+ puts "\tTest092.j: Check clean data using -read_uncommitted cget flag"
+ dump_file_walk \
+ $dbcdr0 $t2 $checkfunc "-first" "-next" "-read_uncommitted"
- puts "\tTest092.k: Check clean data using -dirty cursor"
+ puts "\tTest092.k: Check clean data using -read_uncommitted cursor"
dump_file_walk $dbcdr1 $t3 $checkfunc "-first" "-next"
# Clean up our handles
diff --git a/db/test/test093.tcl b/db/test/test093.tcl
index 3ed4b5964..618c7c9de 100644
--- a/db/test/test093.tcl
+++ b/db/test/test093.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test093.tcl,v 11.23 2004/01/28 03:36:32 bostic Exp $
+# $Id: test093.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test093
# TEST Test using set_bt_compare.
diff --git a/db/test/test094.tcl b/db/test/test094.tcl
index 20f2b3af3..9dc69dac5 100644
--- a/db/test/test094.tcl
+++ b/db/test/test094.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test094.tcl,v 11.21 2004/06/29 14:26:17 carol Exp $
+# $Id: test094.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test094
# TEST Test using set_dup_compare.
diff --git a/db/test/test095.tcl b/db/test/test095.tcl
index 9c62a6a51..214e9aae5 100644
--- a/db/test/test095.tcl
+++ b/db/test/test095.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test095.tcl,v 11.30 2004/09/22 18:01:06 bostic Exp $
+# $Id: test095.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test095
# TEST Bulk get test for methods supporting dups. [#2934]
diff --git a/db/test/test096.tcl b/db/test/test096.tcl
index ac8450069..c725a9c8d 100644
--- a/db/test/test096.tcl
+++ b/db/test/test096.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test096.tcl,v 11.26 2004/06/10 17:21:20 carol Exp $
+# $Id: test096.tcl,v 12.7 2006/08/24 14:46:41 bostic Exp $
#
# TEST test096
# TEST Db->truncate test.
@@ -19,6 +19,7 @@ proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
global alphabet
source ./include.tcl
+ set orig_tdir $testdir
set orig_fixed_len $fixed_len
set args [convert_args $method $args]
set encargs ""
@@ -56,7 +57,7 @@ proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
# 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]
+ -lock_max_locks $lockmax -lock_max_objects $lockmax -txn} $encargs]
error_check_good env_create [is_valid_env $env] TRUE
set closeenv 1
}
@@ -75,7 +76,7 @@ proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
-env $env $omethod -mode 0644} $args $testfile]
error_check_good db_open [is_valid_db $dbtr] TRUE
- set ret [$dbtr truncate -auto_commit]
+ set ret [$dbtr truncate]
error_check_good dbtrunc $ret $nentries
error_check_good db_close [$dbtr close] 0
@@ -134,7 +135,7 @@ proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
set noverflows 100
for { set i 1 } { $i <= $noverflows } { incr i } {
- set ret [eval {$db put} -auto_commit \
+ set ret [eval {$db put} \
$i [chop_data $method "$i$data"]]
}
@@ -258,7 +259,7 @@ proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
for { set i 1 } { $i <= $noverflows } { incr i } {
for { set j 0 } { $j < $ndups } { incr j } {
- set ret [eval {$db put} -auto_commit \
+ set ret [eval {$db put} \
$i [chop_data $method "$i.$j$data"]]
}
}
@@ -277,11 +278,10 @@ proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
if { $closeenv == 1 } {
error_check_good envclose [$env close] 0
}
+ set testdir $orig_tdir
}
proc t96_populate {db method env nentries {ndups 1}} {
- global datastr
- global pad_datastr
source ./include.tcl
set did [open $dict]
@@ -293,7 +293,6 @@ proc t96_populate {db method env nentries {ndups 1}} {
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]
diff --git a/db/test/test097.tcl b/db/test/test097.tcl
index 2a6234e00..a26a221e9 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test097.tcl,v 11.11 2004/01/28 03:36:32 bostic Exp $
+# $Id: test097.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test097
# TEST Open up a large set of database files simultaneously.
diff --git a/db/test/test098.tcl b/db/test/test098.tcl
index af6b6a6c6..a28243d5a 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2002-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test098.tcl,v 1.7 2004/01/28 03:36:32 bostic Exp $
+# $Id: test098.tcl,v 12.3 2006/08/24 14:46:41 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 9bdc0d7af..adb990cee 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test099.tcl,v 1.7 2004/01/28 03:36:32 bostic Exp $
+# $Id: test099.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test099
# TEST
diff --git a/db/test/test100.tcl b/db/test/test100.tcl
index 9d87331dc..6118ec2a9 100644
--- a/db/test/test100.tcl
+++ b/db/test/test100.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test100.tcl,v 11.5 2004/01/28 03:36:32 bostic Exp $
+# $Id: test100.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test100
# TEST Test for functionality near the end of the queue
diff --git a/db/test/test101.tcl b/db/test/test101.tcl
index 63384dd17..a16d652ac 100644
--- a/db/test/test101.tcl
+++ b/db/test/test101.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test101.tcl,v 11.6 2004/01/28 03:36:32 bostic Exp $
+# $Id: test101.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test101
# TEST Test for functionality near the end of the queue
diff --git a/db/test/test102.tcl b/db/test/test102.tcl
index 7fd7e50bc..788e093e3 100644
--- a/db/test/test102.tcl
+++ b/db/test/test102.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test102.tcl,v 1.9 2004/02/05 02:25:24 mjc Exp $
+# $Id: test102.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test102
# TEST Bulk get test for record-based methods. [#2934]
diff --git a/db/test/test103.tcl b/db/test/test103.tcl
index 5fb9562bc..85f4774b0 100644
--- a/db/test/test103.tcl
+++ b/db/test/test103.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test103.tcl,v 1.7 2004/01/28 03:36:32 bostic Exp $
+# $Id: test103.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST test103
# TEST Test bulk get when record numbers wrap around.
diff --git a/db/test/test106.tcl b/db/test/test106.tcl
index 7a8163fc5..48c1476a2 100644
--- a/db/test/test106.tcl
+++ b/db/test/test106.tcl
@@ -1,15 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test106.tcl,v 1.4 2004/01/28 03:36:32 bostic Exp $
+# $Id: test106.tcl,v 12.5 2006/08/24 14:46:41 bostic Exp $
#
# TEST test106
# TEST
# TEST
# TEST
-
proc test106 { method {nitems 100} {niter 200} {tnum "106"} args } {
source ./include.tcl
global dict
@@ -105,4 +104,9 @@ proc test106 { method {nitems 100} {niter 200} {tnum "106"} args } {
watch_procs $pidlist 10
tclkill $dpid
}
+
+ # If this test created the env, close it.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
}
diff --git a/db/test/test107.tcl b/db/test/test107.tcl
index bddf9caf4..52ad5147e 100644
--- a/db/test/test107.tcl
+++ b/db/test/test107.tcl
@@ -1,26 +1,26 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test107.tcl,v 11.14 2004/09/22 18:01:06 bostic Exp $
+# $Id: test107.tcl,v 12.6 2006/08/24 14:46:41 bostic Exp $
#
# TEST test107
-# TEST Test of degree 2 isolation. [#8689]
+# TEST Test of read-committed (degree 2 isolation). [#8689]
# TEST
-# TEST We set up a database. Open a degree 2 transactional
-# TEST cursor and a regular transactional cursor on it.
-# TEST Position each cursor on one page, and do a put to
-# TEST a different page.
+# TEST We set up a database. Open a read-committed transactional cursor and
+# TEST a regular transactional cursor on it. Position each cursor on one page,
+# TEST and do a put to a different page.
# TEST
# TEST Make sure that:
-# TEST - the put succeeds if we are using degree 2.
+# TEST - the put succeeds if we are using degree 2 isolation.
# TEST - the put deadlocks within a regular transaction with
# TEST a regular cursor.
# TEST
proc test107 { method args } {
source ./include.tcl
global fixed_len
+ global passwd
set tnum "107"
# If we are using an env, then skip this test. It needs its own.
@@ -41,7 +41,11 @@ proc test107 { method args } {
set fixed_len [expr $data_size - [expr $data_size / 8]]
set args [convert_args $method $args]
set encargs ""
+ set ddargs ""
set args [split_encargs $args encargs]
+ if { $encargs != "" } {
+ set ddargs " -P $passwd "
+ }
set omethod [convert_method $method]
puts "Test$tnum: Degree 2 Isolation Test ($method $args)"
@@ -79,8 +83,8 @@ proc test107 { method args } {
puts "\tTest$tnum.b: Start deadlock detector."
# Start up a deadlock detector so we can break self-deadlocks.
- set dpid [exec $util_path/db_deadlock -v -ae -t 1.0 \
- -h $testdir >& $testdir/dd.out &]
+ set dpid [eval {exec $util_path/db_deadlock} -v -ae -t 1.0 \
+ -h $testdir $ddargs >& $testdir/dd.out &]
puts "\tTest$tnum.c: Open txns and cursors."
# We can get degree 2 isolation with either a degree 2
@@ -95,14 +99,14 @@ proc test107 { method args } {
#
set t [$env txn]
error_check_good reg_txn_begin [is_valid_txn $t $env] TRUE
- set t2 [$env txn -degree_2]
+ set t2 [$env txn -read_committed]
error_check_good deg2_txn_begin [is_valid_txn $t2 $env] TRUE
- set c2t [$db cursor -txn $t -degree_2]
+ set c2t [$db cursor -txn $t -read_committed]
error_check_good valid_c2t [is_valid_cursor $c2t $db] TRUE
set ct2 [$db cursor -txn $t2]
error_check_good valid_ct2 [is_valid_cursor $ct2 $db] TRUE
- set c2t2 [$db cursor -txn $t2 -degree_2]
+ set c2t2 [$db cursor -txn $t2 -read_committed]
error_check_good valid_c2t2 [is_valid_cursor $c2t2 $db] TRUE
set ct [$db cursor -txn $t]
error_check_good valid_ct [is_valid_cursor $ct $db] TRUE
@@ -120,7 +124,7 @@ proc test107 { method args } {
# around to killing the deadlock detector and cleaning up
# even if the test fails.
#
- puts "\tTest$tnum.d: Test for degree 2 isolation."
+ puts "\tTest$tnum.d: Test for read-committed (degree 2 isolation)."
set status [catch {
foreach cursor $curslist {
set retfirst [$cursor get -first]
@@ -128,7 +132,7 @@ proc test107 { method args } {
set ret [$cursor get -set $offpagekey]
error_check_good cursor_off_page \
[lindex [lindex $ret 0] 0] $offpagekey
- if { [catch {eval {$db put} -auto_commit \
+ if { [catch {eval {$db put} \
$firstkey [chop_data $method $newdata]} res]} {
error_check_good error_is_deadlock \
[is_substr $res DB_LOCK_DEADLOCK] 1
@@ -146,10 +150,10 @@ proc test107 { method args } {
puts $res
}
- # Smoke test for db_stat -txn -degree_2.
- puts "\tTest$tnum.e: Smoke test for db_stat -txn -degree_2"
- if { [catch {set statret [$db stat -txn $t -degree_2]} res] } {
- puts "FAIL: db_stat -txn -degree_2 returned $res"
+ # Smoke test for db_stat -txn -read_committed.
+ puts "\tTest$tnum.e: Smoke test for db_stat -txn -read_committed"
+ if { [catch {set statret [$db stat -txn $t -read_committed]} res] } {
+ puts "FAIL: db_stat -txn -read_committed returned $res"
}
# End deadlock detection and clean up handles
diff --git a/db/test/test109.tcl b/db/test/test109.tcl
index 84e0ca19a..1620576f3 100644
--- a/db/test/test109.tcl
+++ b/db/test/test109.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: test109.tcl,v 1.6 2004/09/22 18:01:06 bostic Exp $
+# $Id: test109.tcl,v 12.9 2006/08/24 14:46:41 bostic Exp $
#
# TEST test109
# TEST
@@ -14,30 +14,35 @@ proc test109 { method {tnum "109"} args } {
global fixed_len
global errorCode
- # Fixed_len must be increased from the default to
- # accommodate fixed-record length methods.
- set orig_fixed_len $fixed_len
- set fixed_len 128
- set args [convert_args $method $args]
- set omethod [convert_method $method]
- error_check_good random_seed [berkdb srand $rand_init] 0
-
set eindex [lsearch -exact $args "-env"]
set txnenv 0
- set seqargs ""
+ set rpcenv 0
+ set sargs " -thread "
if { $eindex == -1 } {
set env NULL
} else {
incr eindex
set env [lindex $args $eindex]
set txnenv [is_txnenv $env]
+ set rpcenv [is_rpcenv $env]
+ if { $rpcenv == 1 } {
+ puts "Test$tnum: skipping for RPC"
+ return
+ }
if { $txnenv == 1 } {
append args " -auto_commit "
- append seqargs " -auto_commit "
}
set testdir [get_home $env]
}
+ # Fixed_len must be increased from the default to
+ # accommodate fixed-record length methods.
+ set orig_fixed_len $fixed_len
+ set fixed_len 128
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+ error_check_good random_seed [berkdb srand $rand_init] 0
+
# Test with in-memory dbs, regular dbs, and subdbs.
foreach filetype { subdb regular in-memory } {
puts "Test$tnum: $method ($args) Test of sequences ($filetype)."
@@ -78,14 +83,14 @@ proc test109 { method {tnum "109"} args } {
puts "\tTest$tnum.a: Max must be greater than min."
set errorCode NONE
- catch {set seq [eval berkdb sequence -create \
- $seqargs -init 0 -min 100 -max 0 $db $key]} res
+ catch {set seq [eval {berkdb sequence} -create $sargs \
+ -init 0 -min 100 -max 0 $db $key]} res
error_check_good max>min [is_substr $errorCode EINVAL] 1
puts "\tTest$tnum.b: Init can't be out of the min-max range."
set errorCode NONE
- catch {set seq [eval berkdb sequence -create \
- $seqargs -init 101 -min 0 -max 100 $db $key]} res
+ catch {set seq [eval {berkdb sequence} -create $sargs \
+ -init 101 -min 0 -max 100 $db $key]} res
error_check_good init [is_substr $errorCode EINVAL] 1
# Test increment and decrement.
@@ -93,7 +98,7 @@ proc test109 { method {tnum "109"} args } {
set max 100
foreach { init inc } { $min -inc $max -dec } {
puts "\tTest$tnum.c: Test for overflow error with $inc."
- test_sequence $db $key $min $max $init $inc $seqargs
+ test_sequence $env $db $key $min $max $init $inc
}
# Test cachesize without wrap. Make sure to test both
@@ -107,8 +112,8 @@ proc test109 { method {tnum "109"} args } {
foreach inc { -inc -dec } {
puts "\tTest$tnum.d:\
-cachesize $csize, $inc, no wrap."
- test_sequence $db $key \
- $min $max $init $inc $seqargs $csize
+ test_sequence $env $db $key \
+ $min $max $init $inc $csize
}
}
error_check_good db_close [$db close] 0
@@ -126,8 +131,8 @@ proc test109 { method {tnum "109"} args } {
set csize 1
foreach { init inc } { $min -inc $max -dec } {
puts "\tTest$tnum.e: Test wrapping with $inc."
- test_sequence $db $key \
- $min $max $init $inc $seqargs $csize $wrap
+ test_sequence $env $db $key \
+ $min $max $init $inc $csize $wrap
}
# Test cachesize with wrap.
@@ -137,16 +142,16 @@ proc test109 { method {tnum "109"} args } {
set wrap "-wrap"
foreach csize $cachesizes {
puts "\tTest$tnum.f: Test -cachesize $csize with wrap."
- test_sequence $db $key \
- $min $max $init $inc $seqargs $csize $wrap
+ test_sequence $env $db $key \
+ $min $max $init $inc $csize $wrap
}
# Test multiple handles on the same sequence.
foreach csize $cachesizes {
puts "\tTest$tnum.g:\
Test multiple handles (-cachesize $csize) with wrap."
- test_sequence $db $key \
- $min $max $init $inc $seqargs $csize $wrap 1
+ test_sequence $env $db $key \
+ $min $max $init $inc $csize $wrap 1
}
error_check_good db_close [$db close] 0
}
@@ -154,11 +159,19 @@ proc test109 { method {tnum "109"} args } {
return
}
-proc test_sequence { db key min max init \
- {inc "-inc"} {seqargs ""} {csize 1} {wrap "" } {second_handle 0} } {
+proc test_sequence { env db key min max init \
+ {inc "-inc"} {csize 1} {wrap "" } {second_handle 0} } {
global rand_init
global errorCode
+ set txn ""
+ set txnenv 0
+ if { $env != "NULL" } {
+ set txnenv [is_txnenv $env]
+ }
+
+ set sargs " -thread "
+
# The variable "skip" is the cachesize with a direction.
set skip $csize
if { $inc == "-dec" } {
@@ -189,13 +202,21 @@ proc test_sequence { db key min max init \
set hitspercycle [expr $n / $csize]
# Create the sequence.
- set seq [eval {berkdb sequence} -create -cachesize $csize $seqargs \
- $wrap -init $init -min $min -max $max $inc $db $key]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set seq [eval {berkdb sequence} -create $sargs -cachesize $csize \
+ $wrap -init $init -min $min -max $max $txn $inc $db $key]
error_check_good is_valid_seq [is_valid_seq $seq] TRUE
if { $second_handle == 1 } {
- set seq2 [eval {berkdb sequence} -create $seqargs $db $key]
+ set seq2 [eval {berkdb sequence} -create $sargs $txn $db $key]
error_check_good is_valid_seq2 [is_valid_seq $seq2] TRUE
}
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
# Exercise get options.
set getdb [$seq get_db]
@@ -258,17 +279,18 @@ proc test_sequence { db key min max init \
# Get return value. If we've got a second handle, choose
# randomly which handle does the seq get.
- set syncarg ""
- if { $seqargs != "" } {
+ if { $env != "NULL" && [is_txnenv $env] } {
set syncarg " -nosync "
+ } else {
+ set syncarg ""
}
set errorCode NONE
if { $second_handle == 0 } {
- catch {eval {$seq get} $seqargs $syncarg $csize} res
+ catch {eval {$seq get} $syncarg $csize} res
} elseif { [berkdb random_int 0 1] == 0 } {
- catch {eval {$seq get} $seqargs $syncarg $csize} res
+ catch {eval {$seq get} $syncarg $csize} res
} else {
- catch {eval {$seq2 get} $seqargs $syncarg $csize} res
+ catch {eval {$seq2 get} $syncarg $csize} res
}
# Compare expected to actual value.
@@ -284,5 +306,13 @@ proc test_sequence { db key min max init \
if { $second_handle == 1 } {
error_check_good seq2_close [$seq2 close] 0
}
- error_check_good seq_remove [eval {$seq remove} $seqargs] 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 seq_remove [eval {$seq remove} $txn] 0
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
}
diff --git a/db/test/test110.tcl b/db/test/test110.tcl
new file mode 100644
index 000000000..f9735faf4
--- /dev/null
+++ b/db/test/test110.tcl
@@ -0,0 +1,164 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2004-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test110.tcl,v 1.8 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test110
+# TEST Partial get test with duplicates.
+# TEST
+# TEST For hash and btree, create and populate a database
+# TEST with dups. Randomly selecting offset and length,
+# TEST retrieve data from each record and make sure we
+# TEST get what we expect.
+proc test110 { method {nentries 10000} {ndups 3} args } {
+ global rand_init
+ 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 "Test110 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/test110.db
+ set env NULL
+ } else {
+ set testfile test110.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 "Test110: $method ($args) $nentries partial get test with duplicates"
+
+ cleanup $testdir $env
+
+ set db [eval {berkdb_open \
+ -create -mode 0644} -dup $args {$omethod $testfile}]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set did [open $dict]
+ berkdb srand $rand_init
+
+ set txn ""
+ set count 0
+
+ puts "\tTest110.a: put/get loop"
+ for { set i 0 } { [gets $did str] != -1 && $i < $nentries } \
+ { incr i } {
+
+ set key $str
+ set repl [berkdb random_int 1 100]
+ set kvals($key) $repl
+ 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"
+ }
+ for { set j 0 } { $j < $ndups } { incr j } {
+ set ret [eval {$db put} $txn {$key $j.$data}]
+ error_check_good dbput:$key:$j $ret 0
+ }
+
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+
+ set ret [$dbc get -set $key]
+
+ set j 0
+ for { set dbt [$dbc get -current] } \
+ { $j < $ndups } \
+ { set dbt [$dbc get -next] } {
+ set d [lindex [lindex $dbt 0] 1]
+ error_check_good dupget:$key:$j $d [pad_data $method $j.$data]
+ incr j
+ }
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ }
+ close $did
+
+ puts "\tTest110.b: partial get loop"
+ set did [open $dict]
+ for { set i 0 } { [gets $did str] != -1 && $i < $nentries } \
+ { incr i } {
+ set key $str
+
+ set data [pad_data $method [replicate $str $kvals($key)]]
+ set j 0
+
+ # Set up cursor. We will use the cursor to walk the dups.
+ 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
+
+ # Position cursor at the first of the dups.
+ set ret [$dbc get -set $key]
+
+ for { set dbt [$dbc get -current] } \
+ { $j < $ndups } \
+ { set dbt [$dbc get -next] } {
+
+ set dupdata $j.$data
+ set length [expr [string length $dupdata]]
+ set maxndx [expr $length + 1]
+
+ if { $maxndx > 0 } {
+ set beg [berkdb random_int 0 [expr $maxndx - 1]]
+ set len [berkdb random_int 0 [expr $maxndx * 2]]
+ } else {
+ set beg 0
+ set len 0
+ }
+
+ set ret [eval {$dbc get} -current \
+ {-partial [list $beg $len]}]
+
+ # In order for tcl to handle this, we have to overwrite the
+ # last character with a NULL. That makes the length one less
+ # than we expect.
+ set k [lindex [lindex $ret 0] 0]
+ set d [lindex [lindex $ret 0] 1]
+ error_check_good dbget_key $k $key
+ error_check_good dbget_data $d \
+ [string range $dupdata $beg [expr $beg + $len - 1]]
+ incr j
+ }
+
+ error_check_good cursor_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/test111.tcl b/db/test/test111.tcl
new file mode 100644
index 000000000..9e4235429
--- /dev/null
+++ b/db/test/test111.tcl
@@ -0,0 +1,326 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test111.tcl,v 1.14 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test111
+# TEST Test database compaction.
+# TEST
+# TEST Populate a database. Remove a high proportion of entries.
+# TEST Dump and save contents. Compact the database, dump again,
+# TEST and make sure we still have the same contents.
+# TEST Add back some entries, delete more entries (this time by
+# TEST cursor), dump, compact, and do the before/after check again.
+
+proc test111 { method {nentries 10000} {tnum "111"} args } {
+
+ # Compaction is an option for btree and recno databases only.
+ if { [is_hash $method] == 1 || [is_queue $method] == 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ # If a page size was specified, find out what it is. Pages
+ # might not be freed in the case of really large pages (64K)
+ # but we still want to run this test just to make sure
+ # nothing funny happens.
+ set pagesize 0
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ incr pgindex
+ set pagesize [lindex $args $pgindex]
+ }
+
+ 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]
+
+ # 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 basename $testdir/test$tnum
+ set env NULL
+ } else {
+ set basename test$tnum
+ incr eindex
+ set env [lindex $args $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 args " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
+ puts "Test$tnum: ($method $args) Database compaction."
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ set splitopts { "" "-revsplitoff" }
+ set txn ""
+
+ if { [is_record_based $method] == 1 } {
+ set checkfunc test001_recno.check
+ } else {
+ set checkfunc test001.check
+ }
+
+ foreach splitopt $splitopts {
+ set testfile $basename.db
+ if { $splitopt == "-revsplitoff" } {
+ set testfile $basename.rev.db
+ if { [is_record_based $method] == 1 } {
+ puts "Skipping\
+ -revsplitoff option for method $method."
+ continue
+ }
+ }
+ set did [open $dict]
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+
+ puts "\tTest$tnum.a: Create and populate database ($splitopt)."
+ set db [eval {berkdb_open -create \
+ -mode 0644} $splitopt $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set count 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count < $nentries } {
+ global kvals
+
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ set kvals($key) [pad_data $method $str]
+ } else {
+ set key $str
+ set str [reverse $str]
+ }
+
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ incr count
+
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ close $did
+ error_check_good db_sync [$db sync] 0
+
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ set filename $testdir/$testfile
+ } else {
+ set filename $testfile
+ }
+ set size1 [file size $filename]
+ set free1 [stat_field $db stat "Pages on freelist"]
+ set leaf1 [stat_field $db stat "Leaf pages"]
+ set internal1 [stat_field $db stat "Internal pages"]
+
+ # Delete between 1 and maxdelete items, then skip over between
+ # 1 and maxskip items. This is to make the data bunchy,
+ # so we sometimes follow the code path where merging is
+ # done record by record, and sometimes the path where
+ # the whole page is merged at once.
+
+ puts "\tTest$tnum.b: Delete most entries from database."
+ set did [open $dict]
+ set count [expr $nentries - 1]
+ set maxskip 4
+ set maxdelete 48
+
+ # Since rrecno and rbtree renumber, we delete starting at
+ # nentries and working down to 0.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count > 0 } {
+
+ # Delete a random number of successive items.
+ set ndeletes [berkdb random_int 1 $maxdelete]
+ set target [expr $count - $ndeletes]
+ while { [expr $count > $target] && $count > 0 } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key [gets $did]
+ }
+
+ set ret [eval {$db del} $txn {$key}]
+ error_check_good del $ret 0
+ incr count -1
+ }
+ # Skip over a random smaller number of items.
+ set skip [berkdb random_int 1 [expr $maxskip]]
+ set target [expr $count - $skip]
+ while { [expr $count > $target] && $count > 0 } {
+ incr count -1
+ }
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.c: Do a dump_file on 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
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.d: Compact and verify database."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good verify_dir [verify_dir $testdir] 0
+
+ set size2 [file size $filename]
+ set free2 [stat_field $db stat "Pages on freelist"]
+ set leaf2 [stat_field $db stat "Leaf pages"]
+ set internal2 [stat_field $db stat "Internal pages"]
+
+ # The sum of internal pages, leaf pages, and pages freed
+ # should decrease on compaction, indicating that pages
+ # have been freed to the file system.
+ set sum1 [expr $free1 + $leaf1 + $internal1]
+ set sum2 [expr $free2 + $leaf2 + $internal2]
+ error_check_good pages_freed [expr $sum1 > $sum2] 1
+
+ # The on-disk file size should be smaller.
+ set reduction .96
+ error_check_good \
+ file_size [expr [expr $size1 * $reduction] > $size2] 1
+
+ puts "\tTest$tnum.e: Contents are the same after compaction."
+ 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 $t2
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ puts "\tTest$tnum.f: Add more entries to database."
+ # Use integers as keys instead of strings, just to mix it up
+ # a little.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i < $nentries } { incr i } {
+ set key $i
+ set str $i
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ set size3 [file size $filename]
+ set free3 [stat_field $db stat "Pages on freelist"]
+ set leaf3 [stat_field $db stat "Leaf pages"]
+ set internal3 [stat_field $db stat "Internal pages"]
+
+ puts "\tTest$tnum.g: Remove more entries, this time by cursor."
+ 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]
+
+ # Delete all items except those evenly divisible by
+ # $maxdelete -- so the db is nearly empty.
+ for { set dbt [$dbc get -first] } { [llength $dbt] > 0 }\
+ { set dbt [$dbc get -next] ; incr count } {
+ if { [expr $count % $maxdelete] != 0 } {
+ error_check_good dbc_del [$dbc del] 0
+ }
+ }
+
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.h: Save 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
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.i: Compact and verify database again."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good verify_dir [verify_dir $testdir] 0
+
+ set size4 [file size $filename]
+ set free4 [stat_field $db stat "Pages on freelist"]
+ set leaf4 [stat_field $db stat "Leaf pages"]
+ set internal4 [stat_field $db stat "Internal pages"]
+
+ # The sum of internal pages, leaf pages, and pages freed
+ # should decrease on compaction, indicating that pages
+ # have been freed to the file system.
+ set sum3 [expr $free3 + $leaf3 + $internal3]
+ set sum4 [expr $free4 + $leaf4 + $internal4]
+ error_check_good pages_freed [expr $sum3 > $sum4] 1
+
+ # File should be smaller as well.
+ error_check_good \
+ file_size [expr [expr $size3 * $reduction] > $size4] 1
+
+ puts "\tTest$tnum.j: Contents are the same after compaction."
+ 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 $t2
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ error_check_good db_close [$db close] 0
+ close $did
+ }
+}
diff --git a/db/test/test112.tcl b/db/test/test112.tcl
new file mode 100644
index 000000000..f5e83f319
--- /dev/null
+++ b/db/test/test112.tcl
@@ -0,0 +1,241 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test112.tcl,v 12.11 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test112
+# TEST Test database compaction with a deep tree.
+# TEST
+# TEST This is a lot like test111, but with a large number of
+# TEST entries and a small page size to make the tree deep.
+# TEST To make it simple we use numerical keys all the time.
+# TEST
+# TEST Dump and save contents. Compact the database, dump again,
+# TEST and make sure we still have the same contents.
+# TEST Add back some entries, delete more entries (this time by
+# TEST cursor), dump, compact, and do the before/after check again.
+
+proc test112 { method {nentries 80000} {tnum "112"} args } {
+ source ./include.tcl
+ global alphabet
+
+ # Compaction is an option for btree and recno databases only.
+ if { [is_hash $method] == 1 || [is_queue $method] == 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ # Skip for specified pagesizes. This test uses a small
+ # pagesize to generate a deep tree.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test$tnum: Skipping for specific pagesizes"
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # 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 txn ""
+ set eindex [lsearch -exact $args "-env"]
+ 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 rpcenv [is_rpcenv $env]
+ if { $rpcenv == 1 } {
+ puts "Test$tnum: skipping for RPC"
+ return
+ }
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
+ puts "Test$tnum: $method ($args) Database compaction with deep tree."
+
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ cleanup $testdir $env
+
+ set db [eval {berkdb_open -create\
+ -pagesize 512 -mode 0644} $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ if { [is_record_based $method] == 1 } {
+ set checkfunc test001_recno.check
+ } else {
+ set checkfunc test001.check
+ }
+
+ puts "\tTest$tnum.a: Populate database."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set str $i.$alphabet
+
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ set filename $testdir/$testfile
+ } else {
+ set filename $testfile
+ }
+ set size1 [file size $filename]
+ set levels [stat_field $db stat "Levels"]
+ error_check_good enough_levels [expr $levels >= 4] 1
+ set free1 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.b: Delete most entries from database."
+ # Leave every nth item. Since rrecno renumbers, we
+ # delete starting at nentries and working down to 0.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i $nentries } { $i > 0 } { incr i -1 } {
+ set key $i
+
+ # Leave every n'th item.
+ set n 121
+ if { [expr $i % $n] != 0 } {
+ set ret [eval {$db del} $txn {$key}]
+ error_check_good del $ret 0
+ }
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.c: Do a dump_file on contents."
+ dump_file $db "" $t1
+
+ puts "\tTest$tnum.d: Compact database."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good verify_dir [verify_dir $testdir] 0
+
+ set size2 [file size $filename]
+ set free2 [stat_field $db stat "Pages on freelist"]
+
+ # The on-disk file size should be significantly smaller.
+ set reduction .80
+ error_check_good file_size [expr [expr $size1 * $reduction] > $size2] 1
+
+ # Pages should be freed for all methods except maybe
+ # record-based non-queue methods. Even with recno, the
+ # number of free pages may not decline.
+
+ if { [is_record_based $method] == 1 } {
+ error_check_good pages_freed [expr $free2 >= $free1] 1
+ } else {
+ error_check_good pages_freed [expr $free2 > $free1] 1
+ }
+
+ # Also, we should have reduced the number of levels.
+ set newlevels [stat_field $db stat "Levels"]
+ error_check_good fewer_levels [expr $newlevels < $levels ] 1
+
+ puts "\tTest$tnum.e: Check that contents are the same after compaction."
+ dump_file $db "" $t2
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ puts "\tTest$tnum.f: Add more entries to database."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i < $nentries } { incr i } {
+ set key $i
+ set str $i.$alphabet
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ set size3 [file size $filename]
+ set free3 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.g: Remove more entries, this time by cursor."
+ set i 0
+ set n 11
+ 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 dbt [$dbc get -first] } { [llength $dbt] > 0 }\
+ { set dbt [$dbc get -next] ; incr i } {
+ if { [expr $i % $n] != 0 } {
+ error_check_good dbc_del [$dbc del] 0
+ }
+ }
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.h: Save 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
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.i: Compact database again."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good verify_dir [verify_dir $testdir] 0
+
+ set size4 [file size $filename]
+ set free4 [stat_field $db stat "Pages on freelist"]
+
+ error_check_good file_size [expr [expr $size3 * $reduction] > $size4] 1
+ if { [is_record_based $method] == 1 } {
+ error_check_good pages_freed [expr $free4 >= $free3] 1
+ } else {
+ error_check_good pages_freed [expr $free4 > $free3] 1
+ }
+
+ puts "\tTest$tnum.j: Check that contents are the same after compaction."
+ dump_file $db "" $t2
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ error_check_good db_close [$db close] 0
+}
+
diff --git a/db/test/test113.tcl b/db/test/test113.tcl
new file mode 100644
index 000000000..d2fcf3d78
--- /dev/null
+++ b/db/test/test113.tcl
@@ -0,0 +1,223 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test113.tcl,v 12.7 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test113
+# TEST Test database compaction with duplicates.
+# TEST
+# TEST This is essentially test111 with duplicates.
+# TEST To make it simple we use numerical keys all the time.
+# TEST
+# TEST Dump and save contents. Compact the database, dump again,
+# TEST and make sure we still have the same contents.
+# TEST Add back some entries, delete more entries (this time by
+# TEST cursor), dump, compact, and do the before/after check again.
+
+proc test113 { method {nentries 10000} {ndups 5} {tnum "113"} args } {
+ source ./include.tcl
+ global alphabet
+
+ # Compaction and duplicates can occur only with btree.
+ if { [is_btree $method] != 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ # Skip for specified pagesizes. This test uses a small
+ # pagesize to generate a deep tree.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test$tnum: Skipping for specific pagesizes"
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # 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"]
+ set txnenv 0
+ set txn ""
+ 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 rpcenv [is_rpcenv $env]
+ if { $rpcenv == 1 } {
+ puts "Test$tnum: skipping for RPC"
+ return
+ }
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
+
+ puts "Test$tnum: $method ($args)\
+ Database compaction with duplicates."
+
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ cleanup $testdir $env
+
+ set db [eval {berkdb_open -create -pagesize 512 \
+ -dup -dupsort -mode 0644} $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ puts "\tTest$tnum.a: Populate database with 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 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ for { set j 1 } { $j <= $ndups } { incr j } {
+ set str $i.$j.$alphabet
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ }
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ set filename $testdir/$testfile
+ } else {
+ set filename $testfile
+ }
+ set size1 [file size $filename]
+ set free1 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.b: Delete most entries from database."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i $nentries } { $i >= 0 } { incr i -1 } {
+ set key $i
+
+ # Leave every n'th item.
+ set n 7
+ if { [expr $i % $n] != 0 } {
+ set ret [eval {$db del} $txn {$key}]
+ error_check_good del $ret 0
+ }
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.c: Do a dump_file on 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
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.d: Compact database."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good db_verify [verify_dir $testdir] 0
+
+ set size2 [file size $filename]
+ set free2 [stat_field $db stat "Pages on freelist"]
+ error_check_good pages_freed [expr $free2 > $free1] 1
+ set reduction .80
+ error_check_good file_size [expr [expr $size1 * $reduction] > $size2] 1
+
+ puts "\tTest$tnum.e: Check that contents are the same after compaction."
+ 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 $t2
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ puts "\tTest$tnum.f: Add more entries to database."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ for { set j 1 } { $j <= $ndups } { incr j } {
+ set str $i.$j.$alphabet.extra
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ }
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ set size3 [file size $filename]
+ set free3 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.g: Remove more entries, this time by cursor."
+ set i 0
+ set n 11
+ 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 dbt [$dbc get -first] } { [llength $dbt] > 0 }\
+ { set dbt [$dbc get -next] ; incr i } {
+
+ if { [expr $i % $n] != 0 } {
+ error_check_good dbc_del [$dbc del] 0
+ }
+ }
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.h: Save contents."
+ dump_file $db "" $t1
+
+ puts "\tTest$tnum.i: Compact database again."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good db_verify [verify_dir $testdir] 0
+
+ set size4 [file size $filename]
+ set free4 [stat_field $db stat "Pages on freelist"]
+ error_check_good pages_freed [expr $free4 > $free3] 1
+ error_check_good file_size [expr [expr $size3 * $reduction] > $size4] 1
+
+ puts "\tTest$tnum.j: Check that contents are the same after compaction."
+ dump_file $db "" $t2
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ error_check_good db_close [$db close] 0
+}
diff --git a/db/test/test114.tcl b/db/test/test114.tcl
new file mode 100644
index 000000000..85c9f7218
--- /dev/null
+++ b/db/test/test114.tcl
@@ -0,0 +1,294 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test114.tcl,v 12.10 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test114
+# TEST Test database compaction with overflows.
+# TEST
+# TEST Populate a database. Remove a high proportion of entries.
+# TEST Dump and save contents. Compact the database, dump again,
+# TEST and make sure we still have the same contents.
+# TEST Add back some entries, delete more entries (this time by
+# TEST cursor), dump, compact, and do the before/after check again.
+
+proc test114 { method {nentries 10000} {tnum "114"} args } {
+ source ./include.tcl
+ global alphabet
+
+ # Compaction is an option for btree and recno databases only.
+ if { [is_hash $method] == 1 || [is_queue $method] == 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ # We run with a small page size to force overflows. Skip
+ # testing for specified page size.
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test$tnum: Skipping for specific pagesize."
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # 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 basename $testdir/test$tnum
+ set env NULL
+ } else {
+ set basename test$tnum
+ incr eindex
+ set env [lindex $args $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 args " -auto_commit"
+ }
+ set testdir [get_home $env]
+ }
+
+ puts "Test$tnum: ($method $args) Database compaction with overflows."
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ set splitopts { "" "-revsplitoff" }
+ set txn ""
+
+ if { [is_record_based $method] == 1 } {
+ set checkfunc test001_recno.check
+ } else {
+ set checkfunc test001.check
+ }
+
+ foreach splitopt $splitopts {
+ set testfile $basename.db
+ if { $splitopt == "-revsplitoff" } {
+ set testfile $basename.rev.db
+ if { [is_record_based $method] == 1 } {
+ puts "Skipping\
+ -revsplitoff option for method $method."
+ continue
+ }
+ }
+ set did [open $dict]
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+
+ puts "\tTest$tnum.a: Create and populate database ($splitopt)."
+ set pagesize 512
+ set db [eval {berkdb_open -create -pagesize $pagesize \
+ -mode 0644} $splitopt $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set count 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count < $nentries } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key $str
+ }
+ set str [repeat $alphabet 100]
+
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ incr count
+
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ close $did
+ error_check_good db_sync [$db sync] 0
+
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ set filename $testdir/$testfile
+ } else {
+ set filename $testfile
+ }
+ set size1 [file size $filename]
+ set free1 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.b: Delete most entries from database."
+ set did [open $dict]
+ set count [expr $nentries - 1]
+ set n 57
+
+ # Leave every nth item. Since rrecno renumbers, we
+ # delete starting at nentries and working down to 0.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count > 0 } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key $str
+ }
+
+ if { [expr $count % $n] != 0 } {
+ set ret [eval {$db del} $txn {$key}]
+ error_check_good del $ret 0
+ }
+ incr count -1
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.c: Do a dump_file on 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
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.d: Compact and verify database."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good verify_dir [verify_dir $testdir] 0
+
+ set size2 [file size $filename]
+ set free2 [stat_field $db stat "Pages on freelist"]
+
+ # Reduction in on-disk size should be substantial.
+ set reduction .80
+ error_check_good \
+ file_size [expr [expr $size1 * $reduction] > $size2] 1
+
+ # Pages should be freed for all methods except maybe
+ # record-based non-queue methods. Even with recno, the
+ # number of free pages may not decline.
+ if { [is_record_based $method] == 1 } {
+ error_check_good pages_freed [expr $free2 >= $free1] 1
+ } else {
+ error_check_good pages_freed [expr $free2 > $free1] 1
+ }
+
+ puts "\tTest$tnum.e: Contents are the same after compaction."
+ 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 $t2
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ puts "\tTest$tnum.f: Add more entries to database."
+ # Use integers as keys instead of strings, just to mix it up
+ # a little.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i < $nentries } { incr i } {
+ set key $i
+ set str [repeat $alphabet 100]
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ set size3 [file size $filename]
+ set free3 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.g: Remove more entries, this time by cursor."
+ 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]
+
+ # Leave every nth item.
+ for { set dbt [$dbc get -first] } { [llength $dbt] > 0 }\
+ { set dbt [$dbc get -next] ; incr count } {
+ if { [expr $count % $n] != 0 } {
+ error_check_good dbc_del [$dbc del] 0
+ }
+ }
+
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.h: Save 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
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.i: Compact and verify database again."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ error_check_good verify_dir [verify_dir $testdir] 0
+
+ set size4 [file size $filename]
+ set free4 [stat_field $db stat "Pages on freelist"]
+
+ error_check_good \
+ file_size [expr [expr $size3 * $reduction] > $size4] 1
+ if { [is_record_based $method] == 1 } {
+ error_check_good pages_freed [expr $free4 >= $free3] 1
+ } else {
+ error_check_good pages_freed [expr $free4 > $free3] 1
+ }
+
+ puts "\tTest$tnum.j: Contents are the same after compaction."
+ 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 $t2
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ error_check_good db_close [$db close] 0
+ close $did
+ }
+}
diff --git a/db/test/test115.tcl b/db/test/test115.tcl
new file mode 100644
index 000000000..a61d13be4
--- /dev/null
+++ b/db/test/test115.tcl
@@ -0,0 +1,340 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test115.tcl,v 12.13 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test115
+# TEST Test database compaction with user-specified btree sort.
+# TEST
+# TEST This is essentially test111 with the user-specified sort.
+# TEST Populate a database. Remove a high proportion of entries.
+# TEST Dump and save contents. Compact the database, dump again,
+# TEST and make sure we still have the same contents.
+# TEST Add back some entries, delete more entries (this time by
+# TEST cursor), dump, compact, and do the before/after check again.
+
+proc test115 { method {nentries 10000} {tnum "115"} args } {
+ source ./include.tcl
+ global btvals
+ global btvalsck
+ global encrypt
+ global passwd
+
+ if { [is_btree $method] != 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ # XXX This should be removed when the fix for [#13500]
+ # is checked in.
+ # If the test module sent in the -chksum arg, get rid of it.
+ set chkindex [lsearch -exact $args "-chksum"]
+ if { $chkindex != -1 } {
+ set args [lreplace $args $chkindex $chkindex]
+ }
+
+ # If a page size was specified, find out what it is. Pages
+ # might not be freed in the case of really large pages (64K)
+ # but we still want to run this test just to make sure
+ # nothing funny happens.
+ set pagesize 0
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ incr pgindex
+ set pagesize [lindex $args $pgindex]
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ set cryptenv -1
+ set txnenv 0
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ set basename $testdir/test$tnum
+ set env NULL
+ } else {
+ set basename test$tnum
+ incr eindex
+ set env [lindex $args $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 args " -auto_commit "
+ }
+ set cryptenv [lsearch -exact [$env attributes] "-crypto"]
+ set testdir [get_home $env]
+ }
+
+ puts "Test$tnum:\
+ ($method $args) Database compaction with user-specified sort."
+ cleanup $testdir $env
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ set splitopts { "" "-revsplitoff" }
+ set txn ""
+
+ set checkfunc test093_check
+
+ foreach splitopt $splitopts {
+ set testfile $basename.db
+ if { $splitopt == "-revsplitoff" } {
+ set testfile $basename.rev.db
+ }
+ set did [open $dict]
+
+ puts "\tTest$tnum.a: Create and populate database ($splitopt)."
+ set db [eval {berkdb_open -create -btcompare test093_cmp1 \
+ -mode 0644} $splitopt $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set count 0
+ set btvals {}
+ set btvalsck {}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count < $nentries } {
+ set key $str
+ set str [reverse $str]
+
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ lappend btvals $key
+ incr count
+
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ close $did
+ error_check_good db_sync [$db sync] 0
+
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ set filename $testdir/$testfile
+ } else {
+ set filename $testfile
+ }
+ set size1 [file size $filename]
+ set free1 [stat_field $db stat "Pages on freelist"]
+ set leaf1 [stat_field $db stat "Leaf pages"]
+ set internal1 [stat_field $db stat "Internal pages"]
+
+ puts "\tTest$tnum.b: Delete most entries from database."
+ set did [open $dict]
+ set count [expr $nentries - 1]
+ set n 14
+
+ # Leave every nth item. Since rrecno renumbers, we
+ # delete starting at nentries and working down to 0.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count > 0 } {
+ set key $str
+
+ if { [expr $count % $n] != 0 } {
+ set ret [eval {$db del} $txn {$key}]
+ error_check_good del $ret 0
+ }
+ incr count -1
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ close $did
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.c: Do a dump_file on 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_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.d: Compact and verify database."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+
+ set size2 [file size $filename]
+ set free2 [stat_field $db stat "Pages on freelist"]
+ set leaf2 [stat_field $db stat "Leaf pages"]
+ set internal2 [stat_field $db stat "Internal pages"]
+
+ # The sum of internal pages, leaf pages, and pages freed
+ # should decrease on compaction, indicating that pages
+ # have been freed to the file system.
+ set sum1 [expr $free1 + $leaf1 + $internal1]
+ set sum2 [expr $free2 + $leaf2 + $internal2]
+ error_check_good pages_freed [expr $sum1 > $sum2] 1
+
+ # Check for reduction in file size.
+ set reduction .95
+ error_check_good \
+ file_size [expr [expr $size1 * $reduction] > $size2] 1
+
+ # Call the db_verify utility directly -- verify_dir will
+ # not handle the user-specified sort.
+ set homeargs ""
+ set encargs ""
+ if { $env != "NULL" } {
+ set homeargs " -h [get_home $env] "
+ }
+ if { $cryptenv != -1 || $encrypt != 0 } {
+ set encargs " -P $passwd "
+ }
+
+ if { [catch {eval exec {$util_path/db_verify}\
+ -o $homeargs $encargs $testfile} res] } {
+ puts "FAIL: Verification failed with $res"
+ }
+
+ puts "\tTest$tnum.e: Contents are the same after compaction."
+ 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 $t2 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ puts "\tTest$tnum.f: Add more entries to database."
+ set did [open $dict]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count < $nentries } {
+ set key $str
+ set str [reverse $str]
+
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ lappend btvals $key
+ incr count
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ close $did
+ error_check_good db_sync [$db sync] 0
+
+ set size3 [file size $filename]
+ set free3 [stat_field $db stat "Pages on freelist"]
+ set leaf3 [stat_field $db stat "Leaf pages"]
+ set internal3 [stat_field $db stat "Internal pages"]
+
+ puts "\tTest$tnum.g: Remove more entries, this time by cursor."
+ 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]
+
+ # Leave every nth item.
+ for { set dbt [$dbc get -first] } { [llength $dbt] > 0 }\
+ { set dbt [$dbc get -next] ; incr count } {
+ if { [expr $count % $n] != 0 } {
+ error_check_good dbc_del [$dbc del] 0
+ }
+ }
+
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.h: Save 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 t_commit [$t commit] 0
+ }
+
+ puts "\tTest$tnum.i: Compact and verify database again."
+ set ret [$db compact -freespace]
+ error_check_good db_sync [$db sync] 0
+ if { [catch {eval exec {$util_path/db_verify} \
+ -o $homeargs $encargs $testfile} res] } {
+ puts "FAIL: Verification failed with $res"
+ }
+
+ set size4 [file size $filename]
+ set free4 [stat_field $db stat "Pages on freelist"]
+ set leaf4 [stat_field $db stat "Leaf pages"]
+ set internal4 [stat_field $db stat "Internal pages"]
+
+ # The sum of internal pages, leaf pages, and pages freed
+ # should decrease on compaction, indicating that pages
+ # have been freed to the file system.
+ set sum3 [expr $free3 + $leaf3 + $internal3]
+ set sum4 [expr $free4 + $leaf4 + $internal4]
+ error_check_good pages_freed [expr $sum3 > $sum4] 1
+
+ # Check for file size reduction.
+ error_check_good\
+ file_size [expr [expr $size3 * $reduction] > $size4] 1
+
+ puts "\tTest$tnum.j: Contents are the same after compaction."
+ 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 $t2 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good filecmp [filecmp $t1 $t2] 0
+
+ error_check_good db_close [$db close] 0
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+ }
+
+ # Clean up so verification doesn't fail. (There's currently
+ # no way to specify a comparison function to berkdb dbverify.)
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ set env NULL
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+}
diff --git a/db/test/test116.tcl b/db/test/test116.tcl
new file mode 100644
index 000000000..0ab091b72
--- /dev/null
+++ b/db/test/test116.tcl
@@ -0,0 +1,257 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test116.tcl,v 12.6 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test116
+# TEST Test of basic functionality of lsn_reset.
+# TEST
+# TEST Create a database in an env. Copy it to a new file within
+# TEST the same env. Reset the page LSNs.
+proc test116 { method {tnum "116"} args } {
+ source ./include.tcl
+ global util_path
+ global passwd
+
+ set orig_tdir $testdir
+ puts "Test$tnum ($method): Test lsn_reset."
+
+ set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
+ set omethod [convert_method $method]
+
+ set testfile A.db
+ set newfile B.db
+ set nentries 50
+ set filenames "A B C D E"
+
+ # This test needs two envs. If one is provided, create the
+ # second under it. If no env is provided, create both.
+ set txn ""
+ set txnenv 0
+ set envargs ""
+ set resetargs ""
+ set eindex [lsearch -exact $args "-env"]
+
+ if { $eindex == -1 } {
+ puts "\tTest$tnum.a: Creating env."
+ set env [eval {berkdb_env} \
+ -create $encargs $envargs -home $testdir -txn]
+ append args " -auto_commit "
+ error_check_good dbenv [is_valid_env $env] TRUE
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "\tTest$tnum.a: Using provided env $env."
+
+ # Make sure the second env we create has all the
+ # same flags the provided env does.
+ if { [is_substr [$env get_open_flags] "-thread"] } {
+ append envargs " -thread "
+ }
+ if { [is_substr $args "-encrypt"] } {
+ append envargs " -encryptaes $passwd "
+ }
+ if { [is_substr [$env get_encrypt_flags] "-encryptaes"] } {
+ append envargs " -encryptaes $passwd "
+ append resetargs " -encrypt "
+ }
+ set txn ""
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ } elseif { $txnenv == 0 } {
+ puts "Skipping Test$tnum for non-transactional env."
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+ foreach lorder { 1234 4321 } {
+ # Open database A, populate and close.
+ puts "\tTest$tnum.b: Creating database with lorder $lorder."
+ cleanup $testdir $env
+
+ # Create a second directory, and create an env there.
+ set testdir [get_home $env]
+ set newdir $testdir/NEWDIR
+ file mkdir $newdir
+ set newenv [eval {berkdb_env} \
+ -create $encargs $envargs -home $newdir -txn]
+ error_check_good newenv [is_valid_env $newenv] TRUE
+
+ # We test with subdatabases except with the queue access
+ # method, where they are not allowed.
+ if { [is_queue $method] == 1 } {
+ set db [eval {berkdb_open} -env $env \
+ $omethod $args -create -mode 0644 $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set pgsize [stat_field $db stat "Page size"]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set data DATA.$i
+ error_check_good db_put [eval {$db put} \
+ $txn $key [chop_data $method $data]] 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_close [$db close] 0
+ } else {
+ foreach filename $filenames {
+ set db [eval {berkdb_open} -env $env \
+ $omethod $args -create \
+ -mode 0644 $testfile $filename]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set pgsize [stat_field $db stat "Page size"]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good \
+ txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set data DATA.$i
+ error_check_good \
+ db_put [eval {$db put} $txn \
+ $key [chop_data $method $data]] 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_close [$db close] 0
+ }
+ }
+
+ # Copy database file A. Reset LSNs on the copy. Then
+ # test that the copy is usable both in its native env
+ # and in a new env.
+
+ puts "\tTest$tnum.c: Copy database and reset its LSNs."
+ set testdir [get_home $env]
+ set newdir [get_home $newenv]
+
+ # Reset LSNs before copying.
+ file copy -force $testdir/$testfile $testdir/$newfile
+ error_check_good \
+ lsn_reset [eval {$env lsn_reset} $resetargs {$newfile}] 0
+
+ file copy -force $testdir/$newfile $newdir/$testfile
+
+ # If we're using queue extents, we must copy the extents.
+ if { [is_queueext $method] } {
+ set cwd [pwd]
+ cd $testdir
+ set extents [glob __dbq.*]
+ foreach extent $extents {
+ set idx [string last . $extent]
+ incr idx
+ set suffix [string range $extent $idx end]
+ file copy -force $extent __dbq.$newfile.$suffix
+ file copy -force \
+ $extent NEWDIR/__dbq.$testfile.$suffix
+ }
+ cd $cwd
+ }
+
+ # Get the LSNs and compare them.
+ set npages [getlsns $testdir/$testfile $pgsize orig_lsns]
+ set newpages [getlsns $testdir/$newfile $pgsize new_lsns]
+ set newdirpages [getlsns $newdir/$testfile $pgsize newdir_lsns]
+ error_check_good newpages_match $npages $newpages
+ error_check_good newdirpages_match $npages $newdirpages
+ for { set i 0 } { $i < $npages } { incr i } {
+ error_check_bad \
+ newlsns_match $orig_lsns($i) $new_lsns($i)
+ error_check_bad \
+ newdirlsns_match $orig_lsns($i) $newdir_lsns($i)
+ }
+
+ puts "\tTest$tnum.d: Verify directories with reset LSNs."
+ error_check_good \
+ verify [verify_dir $testdir "\tTest$tnum.d: "] 0
+ error_check_good \
+ verify [verify_dir $newdir "\tTest$tnum.e: "] 0
+
+ puts "\tTest$tnum.f: Open new db, check data, close db."
+ if { [is_queue $method] == 1 } {
+ set db [eval {berkdb_open} -env $newenv \
+ $omethod $args -create -mode 0644 $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$newenv txn]
+ error_check_good txn [is_valid_txn $t $newenv] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set ret [eval {$db get} $txn $key]
+ error_check_good db_get \
+ [lindex [lindex $ret 0] 1] \
+ [pad_data $method DATA.$i]
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_close [$db close] 0
+ } else {
+ foreach filename $filenames {
+ set db [eval {berkdb_open} \
+ -env $newenv $omethod $args \
+ -create -mode 0644 $testfile $filename ]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$newenv txn]
+ error_check_good \
+ txn [is_valid_txn $t $newenv] TRUE
+ set txn "-txn $t"
+ }
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set key $i
+ set ret [eval {$db get} $txn $key]
+ error_check_good db_get \
+ [lindex [lindex $ret 0] 1] \
+ [pad_data $method DATA.$i]
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good db_close [$db close] 0
+ }
+ }
+ error_check_good newenv_close [$newenv close] 0
+ }
+
+ set testdir $orig_tdir
+ # Close the parent env if this test created it.
+ if { $eindex == -1 } {
+ error_check_good env_close [$env close] 0
+ }
+}
+
+proc getlsns { dbfile pgsize lsns } {
+ upvar $lsns file_lsns
+ set fid [open $dbfile r]
+ fconfigure $fid -translation binary
+ set eof 0
+ set pg 0
+ while { $eof == 0 } {
+ set offset [expr $pg * $pgsize]
+ seek $fid $offset start
+ set file_lsns($pg) [read $fid 8]
+ set eof [eof $fid]
+ incr pg
+ }
+ close $fid
+ incr pg -1
+ return $pg
+}
diff --git a/db/test/test117.tcl b/db/test/test117.tcl
new file mode 100644
index 000000000..e86fe3e19
--- /dev/null
+++ b/db/test/test117.tcl
@@ -0,0 +1,200 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test117.tcl,v 12.7 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test117
+# TEST Test database compaction with requested fill percent.
+# TEST
+# TEST Populate a database. Remove a high proportion of entries.
+# TEST Dump and save contents. Compact the database, requesting
+# TEST fill percentages starting at 10% and working our way up to
+# TEST 100. On each cycle, make sure we still have the same contents.
+# TEST
+# TEST Unlike the other compaction tests, this one does not
+# TEST use -freespace.
+
+proc test117 { method {nentries 10000} {tnum "117"} args } {
+ source ./include.tcl
+
+ # Compaction is an option for btree and recno databases only.
+ if { [is_hash $method] == 1 || [is_queue $method] == 1 } {
+ puts "Skipping test$tnum for method $method."
+ return
+ }
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ # 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 basename $testdir/test$tnum
+ set env NULL
+ } else {
+ set basename test$tnum
+ incr eindex
+ set env [lindex $args $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 args " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
+ puts "Test$tnum: ($method $args) Database compaction and fillpercent."
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ set splitopts { "" "-revsplitoff" }
+ set txn ""
+
+ if { [is_record_based $method] == 1 } {
+ set checkfunc test001_recno.check
+ } else {
+ set checkfunc test001.check
+ }
+
+ foreach splitopt $splitopts {
+ set testfile $basename.db
+ if { $splitopt == "-revsplitoff" } {
+ set testfile $basename.rev.db
+ if { [is_record_based $method] == 1 } {
+ puts "Skipping\
+ -revsplitoff option for method $method."
+ continue
+ }
+ }
+ set did [open $dict]
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+
+ puts "\tTest$tnum.a: Create and populate database ($splitopt)."
+ set db [eval {berkdb_open -create \
+ -mode 0644} $splitopt $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set count 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count < $nentries } {
+ global kvals
+
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ set kvals($key) [pad_data $method $str]
+ } else {
+ set key $str
+ set str [reverse $str]
+ }
+
+ set ret [eval \
+ {$db put} $txn {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ incr count
+
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ close $did
+ error_check_good db_sync [$db sync] 0
+
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ set filename $testdir/$testfile
+ } else {
+ set filename $testfile
+ }
+ set size1 [file size $filename]
+ set free1 [stat_field $db stat "Pages on freelist"]
+
+ puts "\tTest$tnum.b: Delete most entries from database."
+ set did [open $dict]
+ set count [expr $nentries - 1]
+ set n 17
+
+ # Leave every nth item. Since rrecno renumbers, we
+ # delete starting at nentries and working down to 0.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ while { [gets $did str] != -1 && $count > 0 } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key $str
+ }
+
+ if { [expr $count % $n] != 0 } {
+ set ret [eval {$db del} $txn {$key}]
+ error_check_good del $ret 0
+ }
+ incr count -1
+ }
+ if { $txnenv == 1 } {
+ error_check_good t_commit [$t commit] 0
+ }
+ error_check_good db_sync [$db sync] 0
+
+ puts "\tTest$tnum.c: Do a dump_file on 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
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ # Start by compacting pages filled less than 10% and
+ # work up to 100%.
+ for { set fillpercent 10 } { $fillpercent <= 100 }\
+ { incr fillpercent 10 } {
+
+ puts "\tTest$tnum.d: Compact and verify database\
+ with fillpercent $fillpercent."
+ set ret [$db compact -fillpercent $fillpercent]
+ error_check_good db_sync [$db sync] 0
+ set size2 [file size $filename]
+ error_check_good verify_dir [verify_dir $testdir] 0
+ set free2 [stat_field $db stat "Pages on freelist"]
+
+ # The number of free pages should never decline.
+ error_check_good pages_freed [expr $free2 >= $free1] 1
+ error_check_good file_size [expr $size2 <= $size1] 1
+
+ puts "\tTest$tnum.e:\
+ Contents are the same after compaction."
+ 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 $t2
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+ error_check_good filecmp [filecmp $t1 $t2] 0
+ set free1 $free2
+ set size1 $size2
+ }
+ error_check_good db_close [$db close] 0
+ close $did
+ }
+}
diff --git a/db/test/test119.tcl b/db/test/test119.tcl
new file mode 100644
index 000000000..5a399fff9
--- /dev/null
+++ b/db/test/test119.tcl
@@ -0,0 +1,254 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003-2005
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test119.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test119
+# TEST Test behavior when Berkeley DB returns DB_BUFFER_SMALL on a cursor.
+# TEST
+# TEST If the user-supplied buffer is not large enough to contain
+# TEST the returned value, DB returns BUFFER_SMALL. If it does,
+# TEST check that the cursor does not move -- if it moves, it will
+# TEST skip items. [#13815]
+
+proc test119 { method {tnum "119"} args} {
+ source ./include.tcl
+ global alphabet
+ global errorCode
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+ puts "Test$tnum: $method ($args) Test of DB_BUFFER_SMALL."
+
+ # Skip for queue; it has fixed-length records, so overflowing
+ # the buffer isn't possible with an ordinary get.
+ if { [is_queue $method] == 1 } {
+ puts "Skipping test$tnum for method $method"
+ return
+ }
+
+ # 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 txn ""
+ set eindex [lsearch -exact $args "-env"]
+ 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 "
+ }
+ set testdir [get_home $env]
+ }
+
+ cleanup $testdir $env
+
+ puts "\tTest$tnum.a: Set up database."
+ set db [eval \
+ {berkdb_open_noerr -create -mode 0644} $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Test -data_buf_size with db->get.
+ puts "\tTest$tnum.b: Test db get with -data_buf_size."
+ set datalength 20
+ set data [repeat "a" $datalength]
+ set key 1
+
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+
+ error_check_good db_put \
+ [eval {$db put} $txn {$key [chop_data $method $data]}] 0
+
+ # A get with data_buf_size equal to the data size should work.
+ set ret [eval {$db get} $txn -data_buf_size $datalength $key]
+ error_check_good db_get_key [lindex [lindex $ret 0] 0] $key
+ error_check_good db_get_data [lindex [lindex $ret 0] 1] $data
+
+ # A get with a data_buf_size decreased by one should fail.
+ catch {eval {$db get}\
+ $txn -data_buf_size [expr $datalength - 1] $key} res
+ error_check_good buffer_small_error [is_substr $res DB_BUFFER_SMALL] 1
+
+ # Delete the item so it won't get in the way of the cursor test.
+ error_check_good db_del [eval {$db del} $txn $key] 0
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ # Test -data_buf_size and -key_buf_size with dbc->get.
+ #
+ # Set up a database that includes large and small keys and
+ # large and small data in various combinations.
+ #
+ # Create small buffer equal to the largest page size. This will
+ # get DB_BUFFER_SMALL errors.
+ # Create big buffer large enough to never get DB_BUFFER_SMALL
+ # errors with this data set.
+
+ puts "\tTest$tnum.c:\
+ Test cursor get with -data_buf_size and -key_buf_size."
+ set key $alphabet
+ set data $alphabet
+ set nentries 100
+ set start 100
+ set bigkey [repeat $key 8192]
+ set bigdata [repeat $data 8192]
+ set buffer [expr 64 * 1024]
+ set bigbuf [expr $buffer * 8]
+
+ puts "\tTest$tnum.c1: Populate database."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+
+ # Put in a big key every X data items, and big data every
+ # Y data items. X and Y should be small enough that we
+ # hit the case where both X and Y are big.
+ set x 5
+ set y 7
+ for { set i $start } { $i < [expr $nentries + $start] } { incr i } {
+ # If we have a record-based method, we can't have big keys.
+ # Just use the count.
+ if { [is_record_based $method] == 1 } {
+ set k $i
+ } else {
+ if { [expr $i % $x] == 1 } {
+ set k $i.$bigkey
+ } else {
+ set k $i.$key
+ }
+ }
+
+ # We can have big data on any method.
+ if { [expr $i % $y] == 1 } {
+ set d $i.$bigdata
+ } else {
+ set d $i.$data
+ }
+ error_check_good db_put \
+ [eval {$db put} $txn {$k [chop_data $method $d]}] 0
+ }
+ if { $txnenv == 1 } {
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ # Walk the database with a cursor. When we hit DB_BUFFER_SMALL,
+ # make sure DB returns the appropriate key/data pair.
+ puts "\tTest$tnum.c2: Walk the database with a cursor."
+ 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
+
+ # Since hash is not sorted, we'll test that no items are
+ # skipped by keeping a list of all items retrieved, and
+ # making sure it is complete and that each item is unique
+ # at the end of the test.
+ set hashitems {}
+
+ set count $start
+ for { set kd [catch {eval $curs get \
+ -key_buf_size $buffer -data_buf_size $buffer -first} res] } \
+ { $count < [expr $nentries + $start] } \
+ { set kd [catch {eval $curs get \
+ -key_buf_size $buffer -data_buf_size $buffer -next} res] } {
+ if { $kd == 1 } {
+ # Make sure we have the expected error.
+ error_check_good buffer_small_error \
+ [is_substr $errorCode DB_BUFFER_SMALL] 1
+
+ # Adjust the buffer sizes to fit the big key or data.
+ if { [expr $count % $x] == 1 } {
+ set key_buf $bigbuf
+ } else {
+ set key_buf $buffer
+ }
+ if { [expr $count % $y] == 1 } {
+ set data_buf $bigbuf
+ } else {
+ set data_buf $buffer
+ }
+
+ # Hash is not sorted, so just make sure we can get
+ # the item with a large buffer and check it later.
+ if { [is_hash $method] == 1 } {
+ set data_buf $bigbuf
+ set key_buf $bigbuf
+ }
+
+ # Retrieve with big buffer; there should be no error.
+ # This also walks the cursor forward.
+ set nextbig [catch {eval $curs get -key_buf_size \
+ $key_buf -data_buf_size $data_buf -next} res]
+ error_check_good data_big_buffer_get $nextbig 0
+
+ # Extract the item number.
+ set key [lindex [lindex $res 0] 0]
+ set data [lindex [lindex $res 0] 1]
+ if { [string first . $key] != -1 } {
+ set keyindex [string first . $key]
+ set keynumber \
+ [string range $key 0 [expr $keyindex - 1]]
+ } else {
+ set keynumber $key
+ }
+ set dataindex [string first . $data]
+ set datanumber \
+ [string range $data 0 [expr $dataindex - 1]]
+
+ # If not hash, check that item number is correct.
+ # If hash, save the number for later verification.
+ if { [is_hash $method] == 0 } {
+ error_check_good key_number $keynumber $count
+ error_check_good data_number $datanumber $count
+ } else {
+ lappend hashitems $keynumber
+ }
+ } else {
+ # For hash, save the item numbers of all items
+ # retrieved, not just those returning DB_BUFFER_SMALL.
+ if { [is_hash $method] == 1 } {
+ set key [lindex [lindex $res 0] 0]
+ set keyindex [string first . $key]
+ set keynumber \
+ [string range $key 0 [expr $keyindex - 1]]
+ lappend hashitems $keynumber
+ }
+ }
+ incr count
+ set errorCode NONE
+ }
+ error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ # Now check the list of items retrieved from hash.
+ if { [is_hash $method] == 1 } {
+ set sortedhashitems [lsort $hashitems]
+ for { set i $start } \
+ { $i < [expr $nentries + $start] } { incr i } {
+ set hashitem \
+ [lindex $sortedhashitems [expr $i - $start]]
+ error_check_good hash_check $hashitem $i
+ }
+ }
+ error_check_good db_close [$db close] 0
+}
+
diff --git a/db/test/test120.tcl b/db/test/test120.tcl
new file mode 100644
index 000000000..5eb655dd8
--- /dev/null
+++ b/db/test/test120.tcl
@@ -0,0 +1,97 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test120.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test120
+# TEST Test of multi-version concurrency control.
+#
+# TEST Test basic functionality: a snapshot transaction started
+# TEST before a regular transaction's put can't see the modification.
+# TEST A snapshot transaction started after the put can see it.
+
+proc test120 { method {tnum "120"} args } {
+ source ./include.tcl
+
+ # This test needs its own env.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Test$tnum skipping for env $env"
+ return
+ }
+
+ # MVCC is not allowed with queue methods.
+ if { [is_queue $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
+ return
+ }
+
+ puts "\tTest$tnum ($method): MVCC and blocking."
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+ set encargs ""
+ set args [split_encargs $args encargs]
+ set filename "test.db"
+
+ # Create transactional env. Specifying -multiversion makes
+ # all databases opened within the env -multiversion.
+ env_cleanup $testdir
+ puts "\tTest$tnum.a: Creating txn env."
+ set env [eval {berkdb_env}\
+ -create -txn -multiversion $encargs -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ # Open database.
+ puts "\tTest$tnum.b: Creating -multiversion db."
+ set db [eval {berkdb_open} \
+ -create -auto_commit -env $env $omethod $args $filename]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ puts "\tTest$tnum.c: Start transactions."
+ # Start two transactions. T1 is the writer, so it's a regular
+ # transaction. T2 is the reader and uses -snapshot.
+ set t1 [$env txn]
+ set txn1 "-txn $t1"
+ set t2 [$env txn -snapshot]
+ set txn2 "-txn $t2"
+
+ # Enter some data using txn1.
+ set key 1
+ set data DATA
+ error_check_good \
+ t1_put [eval {$db put} $txn1 $key [chop_data $method $data]] 0
+
+ # Txn2 cannot see txn1's put, but it does not block.
+ puts "\tTest$tnum.d: Txn2 can't see txn1's put."
+ set ret [eval {$db get} $txn2 $key]
+ error_check_good txn2_get [llength $ret] 0
+
+ # Commit txn1. Txn2 get still can't see txn1's put.
+ error_check_good t1_commit [$t1 commit] 0
+ set ret [eval {$db get} $txn2 $key]
+ error_check_good txn2_get [llength $ret] 0
+ error_check_good db_sync [$db sync] 0
+ set ret [eval {$db get} $txn2 $key]
+ error_check_good txn2_get [llength $ret] 0
+
+ # Start a new txn with -snapshot. It can see the put.
+ puts "\tTest$tnum.e: A new txn can see txn1's put."
+ set t3 [$env txn -snapshot]
+ set txn3 "-txn $t3"
+ set ret [eval {$db get} $txn3 $key]
+ error_check_good \
+ t3_get $ret [list [list $key [pad_data $method $data]]]
+
+ # Commit txns.
+ error_check_good t2_commit [$t2 commit] 0
+ error_check_good t3_commit [$t3 commit] 0
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+}
diff --git a/db/test/test121.tcl b/db/test/test121.tcl
new file mode 100644
index 000000000..0ff17cd41
--- /dev/null
+++ b/db/test/test121.tcl
@@ -0,0 +1,124 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test121.tcl,v 1.6 2006/09/08 20:32:18 bostic Exp $
+#
+# TEST test121
+# TEST Tests of multi-version concurrency control.
+#
+# TEST MVCC and cursor adjustment.
+# TEST Set up a -snapshot cursor and position it in the middle
+# TEST of a database.
+# TEST Write to the database, both before and after the cursor,
+# TEST and verify that it stays on the same position.
+
+proc test121 { method {tnum "121"} args } {
+ source ./include.tcl
+
+ # This test needs its own env.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Test$tnum skipping for env $env"
+ return
+ }
+
+ # MVCC is not allowed with queue methods.
+ if { [is_queue $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
+ return
+ }
+
+ puts "\tTest$tnum ($method): MVCC and cursor adjustment."
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+ set encargs ""
+ set args [split_encargs $args encargs]
+ set filename "test.db"
+
+ # Create transactional env. Specifying -multiversion makes
+ # all databases opened within the env -multiversion.
+
+ env_cleanup $testdir
+ puts "\tTest$tnum.a: Creating txn env."
+
+ # Raise cachesize so this test focuses on cursor adjustment
+ # and not on small cache issues.
+ set cachesize [expr 1024 * 1024]
+ set max_locks 2000
+ set max_objects 2000
+ set env [eval {berkdb_env -create -cachesize "0 $cachesize 1"}\
+ -lock_max_locks $max_locks -lock_max_objects $max_objects\
+ -txn -multiversion $encargs -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ # Open database.
+ puts "\tTest$tnum.b: Creating -multiversion db."
+ set db [eval {berkdb_open} \
+ -create -auto_commit -env $env $omethod $args $filename]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ # Start transactions.
+ puts "\tTest$tnum.c: Start txns with -snapshot."
+ set t1 [$env txn -snapshot]
+ set txn1 "-txn $t1"
+
+ # Enter some data using txn1. Leave holes, by using keys
+ # 2, 4, 6 ....
+ set niter 10000
+ set data DATA
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set key [expr $i * 2]
+ error_check_good t1_put [eval {$db put} $txn1 $key $data.$key] 0
+ }
+ error_check_good t1_commit [$t1 commit] 0
+
+ # Open a read-only cursor.
+ set t2 [$env txn -snapshot]
+ set txn2 "-txn $t2"
+ set cursor [eval {$db cursor} $txn2]
+ error_check_good db_cursor [is_valid_cursor $cursor $db] TRUE
+
+ # Walk the cursor halfway through the database.
+ set i 1
+ set halfway [expr $niter / 2]
+ for { set ret [$cursor get -first] } \
+ { $i <= $halfway } \
+ { set ret [$cursor get -next] } {
+ incr i
+ }
+
+ set currentkey [lindex [lindex $ret 0] 0]
+ set currentdata [lindex [lindex $ret 0] 1]
+
+ # Start a new transaction and use it to enter more data.
+ # Verify that the cursor is not changed.
+ puts "\tTest$tnum.c: Enter more data."
+ set t1 [$env txn -snapshot]
+ set txn1 "-txn $t1"
+
+ # Enter more data, filling in the holes from the first
+ # time around by using keys 1, 3, 5 .... Cursor should
+ # stay on the same item.
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set key [expr [expr $i * 2] - 1]
+ error_check_good t1_put [eval {$db put} $txn1 $key $data.$key] 0
+ set ret [$cursor get -current]
+ set k [lindex [lindex $ret 0] 0]
+ set d [lindex [lindex $ret 0] 1]
+ error_check_good current_key $k $currentkey
+ error_check_good current_data $d $currentdata
+ }
+
+ error_check_good t1_commit [$t1 commit] 0
+ error_check_good cursor_close [$cursor close] 0
+ error_check_good t2_commit [$t2 commit] 0
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+}
diff --git a/db/test/test122.tcl b/db/test/test122.tcl
new file mode 100644
index 000000000..17bd540f1
--- /dev/null
+++ b/db/test/test122.tcl
@@ -0,0 +1,100 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: test122.tcl,v 1.3 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST test122
+# TEST Tests of multi-version concurrency control.
+#
+# TEST MVCC and databases that turn multi-version on and off.
+
+proc test122 { method {tnum "122"} args } {
+ source ./include.tcl
+
+ # This test needs its own env.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Test$tnum skipping for env $env"
+ return
+ }
+
+ # MVCC is not allowed with queue methods.
+ if { [is_queue $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
+ return
+ }
+
+ puts "\tTest$tnum ($method): Turning MVCC on and off."
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+ set encargs ""
+ set args [split_encargs $args encargs]
+ set filename "test.db"
+
+ # Create transactional env. Don't specify -multiversion to
+ # the env, because we need to turn it on and off.
+ env_cleanup $testdir
+
+ puts "\tTest$tnum.a: Creating txn env."
+ set env [eval {berkdb_env} -create -txn $encargs -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ # Open database.
+ puts "\tTest$tnum.b: Creating -multiversion db."
+ set db [eval {berkdb_open} -multiversion \
+ -create -auto_commit -env $env $omethod $args $filename]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ # Put some data. The tcl interface automatically does it
+ # transactionally.
+ set niter 100
+ for { set i 1 } { $i < $niter } { incr i } {
+ set key $i
+ set data DATA.$i
+ error_check_good db_put [eval {$db put} $key $data] 0
+ }
+
+ # Open a read-only handle and also a txn -snapshot handle.
+ puts "\tTest$tnum.c: Open read-only handle and txn -snapshot handle."
+ set t [$env txn -snapshot]
+ set txn "-txn $t"
+ set snapshotdb [eval {berkdb_open} \
+ $txn -env $env $omethod $args $filename]
+ error_check_good snapshotdb [is_valid_db $snapshotdb] TRUE
+ set readonlydb [eval {berkdb_open} \
+ -auto_commit -env $env $omethod $args $filename]
+ error_check_good readonlydb [is_valid_db $readonlydb] TRUE
+
+
+ # Overwrite all the data. The read-only handle will see the
+ # new data and the -snapshot handle will see the old data.
+ puts "\tTest$tnum.d: Overwrite data."
+ for { set i 1 } { $i < $niter } { incr i } {
+ set key $i
+ set data NEWDATA.$i
+ error_check_good db_put [eval {$db put} $key $data] 0
+ }
+
+ puts "\tTest$tnum.e: Check data through handles."
+ for { set i 1 } { $i < $niter } { incr i } {
+ set r_ret [eval {$readonlydb get} $i]
+ set s_ret [eval {$snapshotdb get} $txn $i]
+ set r_key [lindex [lindex $r_ret 0] 0]
+ set r_data [lindex [lindex $r_ret 0] 1]
+ set s_key [lindex [lindex $s_ret 0] 0]
+ set s_data [lindex [lindex $s_ret 0] 1]
+ }
+
+ error_check_good t_commit [$t commit] 0
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good snapshotdb_close [$snapshotdb close] 0
+ error_check_good readonlydb_close [$readonlydb close] 0
+ error_check_good env_close [$env close] 0
+}
diff --git a/db/test/testparams.tcl b/db/test/testparams.tcl
index 16ef7c9b0..6d0899228 100644
--- a/db/test/testparams.tcl
+++ b/db/test/testparams.tcl
@@ -1,42 +1,62 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: testparams.tcl,v 11.200 2004/10/12 16:22:14 sue Exp $
+# $Id: testparams.tcl,v 12.82 2006/09/08 20:32:18 bostic Exp $
+source ./include.tcl
+global is_freebsd_test
+global tcl_platform
+global rpc_tests
global one_test
global serial_tests
-set serial_tests {rep002 rep005}
+set serial_tests {rep002 rep005 rep016 rep020 rep022 rep026 rep031 rep063}
-set subs {bigfile dead env fop lock log memp mutex recd rep rpc rsrc\
+set subs {bigfile dead env fop lock log memp plat recd rep rpc rsrc\
sdb sdbtest sec si test txn}
set test_names(bigfile) [list bigfile001 bigfile002]
+set test_names(compact) [list test111 test112 test113 test114 test115 test117]
set test_names(dead) [list dead001 dead002 dead003 dead004 dead005 dead006 \
dead007]
-set test_names(elect) [list rep002 rep005 rep016 rep020 rep022]
+set test_names(elect) [list rep002 rep005 rep016 rep020 rep022 rep026 rep063]
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]
+ env007 env008 env009 env010 env011 env012 env013 env014 env015]
+set test_names(fop) [list fop001 fop002 fop003 fop004 fop005 fop006 \
+ fop007 fop008]
+set test_names(init) [list rep029 rep030 rep031 rep033 rep037 rep038 rep039\
+ rep055 rep060 rep061 rep062]
+set test_names(inmemdb) [list fop007 fop008 rep056 rep057 sdb013 sdb014 \
+ sdb015 sdb016 sdb017 sdb018 sdb019 sdb020]
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(log) [list log001 log002 log003 log004 log005 log006 \
+ log007 log008 log009]
set test_names(memp) [list memp001 memp002 memp003 memp004]
-set test_names(mutex) [list mutex001 mutex002 mutex003]
+set test_names(plat) [list plat001]
set test_names(recd) [list recd001 recd002 recd003 recd004 recd005 recd006 \
recd007 recd008 recd009 recd010 recd011 recd012 recd013 recd014 recd015 \
- recd016 recd017 recd018 recd019 recd020 ]
+ recd016 recd017 recd018 recd019 recd020 recd022 recd023]
+#
+# XXX rep043 and rep044 are removed from the list for now. There are
+# issues in dbreg that need to be fixed. There is nothing wrong
+# with the tests themselves - they do legal operations.
+#
set test_names(rep) [list rep001 rep002 rep003 rep005 rep006 rep007 \
rep008 rep009 rep010 rep011 rep012 rep013 rep014 rep015 rep016 rep017 \
- rep018 rep019 rep020 rep021 rep022 rep023 rep024 rep026 rep027 rep028 \
- rep029 rep030 rep031 rep032 rep033 rep034 rep035 rep036 rep037]
+ rep018 rep019 rep020 rep021 rep022 rep023 rep024 rep025 rep026 rep027 \
+ rep028 rep029 rep030 rep031 rep032 rep033 rep034 rep035 rep036 rep037 \
+ rep038 rep039 rep040 rep041 rep042 rep043 rep044 rep045 rep046 rep047 \
+ rep048 rep049 rep050 rep051 rep052 rep053 rep054 rep055 rep056 rep057 \
+ rep058 rep060 rep061 rep062 rep063 rep064 rep065 rep066]
set test_names(rpc) [list rpc001 rpc002 rpc003 rpc004 rpc005 rpc006]
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]
+ sdb007 sdb008 sdb009 sdb010 sdb011 sdb012 sdb013 sdb014 sdb015 sdb016 \
+ sdb017 sdb018 sdb019 sdb020 ]
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(si) [list si001 si002 si003 si004 si005 si006 si007 si008]
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 \
@@ -49,14 +69,39 @@ set test_names(test) [list test001 test002 test003 test004 test005 \
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 test107 \
- test109 ]
+ test109 test110 test111 test112 test113 test114 test115 test116 test117 \
+ test119 test120 test121 test122]
set test_names(txn) [list txn001 txn002 txn003 txn004 txn005 txn006 \
- txn007 txn008 txn009 txn010 txn011]
+ txn007 txn008 txn009 txn010 txn011 txn012 txn013]
set rpc_tests(berkeley_db_svc) [concat $test_names(test) $test_names(sdb)]
set rpc_tests(berkeley_db_cxxsvc) $test_names(test)
set rpc_tests(berkeley_db_javasvc) $test_names(test)
+# FreeBSD, in version 5.4, has problems dealing with large messages
+# over RPC. Exclude those tests. We believe these problems are
+# resolved for later versions. SR [#13542]
+set freebsd_skip_tests_for_rpc [list test003 test008 test009 test012 test017 \
+ test028 test081 test095 test102 test103 test119 sdb004 sdb011]
+set freebsd_5_4 0
+if { $is_freebsd_test } {
+ set version $tcl_platform(osVersion)
+ if { [is_substr $version "5.4"] } {
+ set freebsd_5_4 1
+ }
+}
+if { $freebsd_5_4 } {
+ foreach svc {berkeley_db_svc berkeley_db_cxxsvc berkeley_db_javasvc} {
+ foreach test $freebsd_skip_tests_for_rpc {
+ set idx [lsearch -exact $rpc_tests($svc) $test]
+ if { $idx >= 0 } {
+ set rpc_tests($svc)\
+ [lreplace $rpc_tests($svc) $idx $idx]
+ }
+ }
+ }
+}
+
# JE tests are a subset of regular RPC tests -- exclude these ones.
# be fixable by modifying tests dealing with unsorted duplicates, second line
# will probably never work unless certain features are added to JE (record
@@ -127,6 +172,8 @@ set parms(recd017) 0
set parms(recd018) 10
set parms(recd019) 50
set parms(recd020) ""
+set parms(recd022) ""
+set parms(recd023) ""
set parms(rep001) {1000 "001"}
set parms(rep002) {10 3 "002"}
set parms(rep003) "003"
@@ -150,6 +197,7 @@ set parms(rep021) {3 "021"}
set parms(rep022) ""
set parms(rep023) {10 "023"}
set parms(rep024) {1000 "024"}
+set parms(rep025) {200 "025"}
set parms(rep026) ""
set parms(rep027) {1000 "027"}
set parms(rep028) {100 "028"}
@@ -161,6 +209,34 @@ set parms(rep033) {200 "033"}
set parms(rep034) {2 "034"}
set parms(rep035) {100 "035"}
set parms(rep036) {200 "036"}
+set parms(rep037) {1500 "037"}
+set parms(rep038) {200 "038"}
+set parms(rep039) {200 "039"}
+set parms(rep040) {200 "040"}
+set parms(rep041) {500 "041"}
+set parms(rep042) {10 "042"}
+set parms(rep043) {25 "043"}
+set parms(rep044) {"044"}
+set parms(rep045) {"045"}
+set parms(rep046) {200 "046"}
+set parms(rep047) {200 "047"}
+set parms(rep048) {3000 "048"}
+set parms(rep049) {10 "049"}
+set parms(rep050) {10 "050"}
+set parms(rep051) {5000 "051"}
+set parms(rep052) {200 "052"}
+set parms(rep053) {200 "053"}
+set parms(rep054) {200 "054"}
+set parms(rep055) {200 "055"}
+set parms(rep056) ""
+set parms(rep057) ""
+set parms(rep058) "058"
+set parms(rep060) {200 "060"}
+set parms(rep061) {500 "061"}
+set parms(rep062) "062"
+set parms(rep063) ""
+set parms(rep064) {10 "064"}
+set parms(rep065} {3}
set parms(subdb001) ""
set parms(subdb002) 10000
set parms(subdb003) 1000
@@ -185,11 +261,22 @@ 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(sdb013) 10
+set parms(sdb014) ""
+set parms(sdb015) 1000
+set parms(sdb016) 100
+set parms(sdb017) ""
+set parms(sdb018) 100
+set parms(sdb019) 100
+set parms(sdb020) 10
+set parms(si001) {200 "001"}
+set parms(si002) {200 "002"}
+set parms(si003) {200 "003"}
+set parms(si004) {200 "004"}
+set parms(si005) {200 "005"}
+set parms(si006) {200 "006"}
+set parms(si007) {10 "007"}
+set parms(si008) {10 "008"}
set parms(test001) {10000 0 0 "001"}
set parms(test002) 10000
set parms(test003) ""
@@ -293,6 +380,18 @@ set parms(test102) {1000 "102"}
set parms(test103) {100 4294967250 "103"}
set parms(test107) ""
set parms(test109) {"109"}
+set parms(test110) {10000 3}
+set parms(test111) {10000 "111"}
+set parms(test112) {80000 "112"}
+set parms(test113) {10000 5 "113"}
+set parms(test114) {10000 "114"}
+set parms(test115) {10000 "115"}
+set parms(test116) {"116"}
+set parms(test117) {10000 "117"}
+set parms(test119) {"119"}
+set parms(test120) {"120"}
+set parms(test121) {"121"}
+set parms(test122) {"122"}
# RPC server executables. Each of these is tested (if it exists)
# when running the RPC tests.
@@ -318,7 +417,7 @@ set shelltest_list {
{ scr013 chk.stats }
{ scr014 chk.err }
{ scr015 chk.cxxtests }
- { scr016 chk.javatests }
+ { scr016 "-c exit 0" }
{ scr017 chk.db185 }
{ scr018 chk.comma }
{ scr019 chk.include }
@@ -333,4 +432,6 @@ set shelltest_list {
{ scr028 chk.rtc }
{ scr029 chk.get }
{ scr030 chk.build }
+ { scr031 chk.xa }
+ { scr032 chk.rpc }
}
diff --git a/db/test/testutils.tcl b/db/test/testutils.tcl
index ded9bc5ce..44521d65f 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: testutils.tcl,v 11.198 2004/09/28 15:02:18 carol Exp $
+# $Id: testutils.tcl,v 12.26 2006/09/08 20:32:17 bostic Exp $
#
# Test system utilities
#
@@ -199,7 +199,7 @@ proc open_and_dump_subfile {
# Sequentially read a file and call checkfunc on each key/data pair.
# Dump the keys out to the file specified by outfile.
-proc dump_file { db txn outfile checkfunc } {
+proc dump_file { db txn outfile {checkfunc NONE} } {
source ./include.tcl
dump_file_direction $db $txn $outfile $checkfunc "-first" "-next"
@@ -223,7 +223,9 @@ proc dump_file_walk { c outfile checkfunc start continue {flag ""} } {
set kd [lindex $d 0]
set k [lindex $kd 0]
set d2 [lindex $kd 1]
- $checkfunc $k $d2
+ if { $checkfunc != "NONE" } {
+ $checkfunc $k $d2
+ }
puts $outf $k
# XXX: Geoff Mainland
# puts $outf "$k $d2"
@@ -706,9 +708,19 @@ proc watch_procs { pidlist {delay 30} {max 3600} {quiet 0} } {
set rlist {}
foreach i $l {
- set r [ catch { exec $KILL -0 $i } result ]
+ set r [ catch { exec $KILL -0 $i } res ]
if { $r == 0 } {
lappend rlist $i
+ } else {
+ # It's OK if the process is already dead, but
+ # we want to know about other kinds of failures.
+ if { [is_substr $res "no such process"] == 0 &&
+ [is_substr $res "No such process"] == 0 &&
+ [is_substr $res\
+ "process does not exist"] == 0 } {
+ puts "FAIL: Problem\
+ reported killing process $i: $res"
+ }
}
}
if { [ llength $rlist] == 0 } {
@@ -728,6 +740,15 @@ proc watch_procs { pidlist {delay 30} {max 3600} {quiet 0} } {
if { $quiet == 0 } {
puts "All processes have exited."
}
+
+ #
+ # Once we are done, remove all old sentinel files.
+ #
+ set oldsent [glob -nocomplain $testdir/begin* $testdir/end*]
+ foreach f oldsent {
+ fileremove -f $f
+ }
+
}
# These routines are all used from within the dbscript.tcl tester.
@@ -1096,13 +1117,14 @@ proc filecheck { file txn } {
proc cleanup { dir env { quiet 0 } } {
global gen_upgrade
+ global gen_dump
global is_qnx_test
global is_je_test
global old_encrypt
global passwd
source ./include.tcl
- if { $gen_upgrade == 1 } {
+ if { $gen_upgrade == 1 || $gen_dump == 1 } {
save_upgrade_files $dir
}
@@ -1201,9 +1223,14 @@ proc cleanup { dir env { quiet 0 } } {
}
if {[llength $remfiles] > 0} {
#
- # In the HFS file system there are cases where not
- # all files are removed on the first attempt. If
- # it fails, try again a few times.
+ # In the HFS file system there are cases where not
+ # all files are removed on the first attempt. If
+ # it fails, try again a few times.
+ #
+ # This bug has been compensated for in Tcl with a fix
+ # checked into Tcl 8.4. When Berkeley DB requires
+ # Tcl 8.5, we can remove this while loop and replace
+ # it with a simple 'fileremove -f $remfiles'.
#
set count 0
while { [catch {eval fileremove -f $remfiles}] == 1 \
@@ -1599,6 +1626,7 @@ proc op_recover_prep { op dir env_cmd dbfile gidf cmd } {
# active transaction. Leave it alone so the close won't
# quietly abort it on us.
if { [is_substr $op "prepare"] != 1 } {
+ error_check_good log_flush [$env log_flush] 0
error_check_good envclose [$env close] 0
}
return
@@ -1803,7 +1831,11 @@ proc unpopulate { db txn num } {
return 0
}
+# Flush logs for txn envs only.
proc reset_env { env } {
+ if { [is_txnenv $env] } {
+ error_check_good log_flush [$env log_flush] 0
+ }
error_check_good env_close [$env close] 0
}
@@ -2124,10 +2156,6 @@ proc is_valid_txn { txn env } {
return [is_valid_widget $txn $env.txn]
}
-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]
}
@@ -2156,8 +2184,13 @@ proc send_cmd { fd cmd {sleep 2}} {
}
proc rcv_result { fd } {
+ global errorInfo
+
set r [gets $fd result]
- error_check_bad remote_read $r -1
+ if { $r == -1 } {
+ puts "FAIL: gets returned -1 (EOF)"
+ puts "FAIL: errorInfo is $errorInfo"
+ }
return $result
}
@@ -2217,13 +2250,17 @@ proc pad_data {method data} {
}
}
+#
+# The make_fixed_length proc is used in special circumstances where we
+# absolutely need to send in data that is already padded out to the fixed
+# length with a known pad character. Most tests should use chop_data and
+# pad_data, not this.
+#
proc make_fixed_length {method data {pad 0}} {
global fixed_len
if {[is_fixed_length $method] == 1} {
- if {[string length $data] > $fixed_len } {
- error_check_bad make_fixed_len:TOO_LONG 1 1
- }
+ set data [chop_data $method $data]
while { [string length $data] < $fixed_len } {
set data [format $data%c $pad]
}
@@ -2890,14 +2927,24 @@ proc db_compare { olddb newdb olddbname newdbname } {
{ 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
+ if { [binary_compare $ndbt $odbt] == 1 } {
+ error_check_good oc_close [$oc close] 0
+ error_check_good nc_close [$nc close] 0
+# puts "FAIL: $odbt does not match $ndbt"
+ return 1
+ }
}
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
+ if { [binary_compare $ndbt $odbt] == 1 } {
+ error_check_good oc_close [$oc close] 0
+ error_check_good nc_close [$nc close] 0
+# puts "FAIL: $odbt does not match $ndbt"
+ return 1
+ }
}
error_check_good orig_cursor_close($olddbname) [$oc close] 0
@@ -2973,6 +3020,122 @@ proc dumploadtest { db } {
eval berkdb dbremove $dbarg $newdbname
}
+# Test regular and aggressive salvage procedures for all databases
+# in a directory.
+proc salvagetest { dir { noredo 0 } { quiet 0 } } {
+ global util_path
+ global encrypt
+ global passwd
+
+ # If we're doing salvage testing between tests, don't do it
+ # twice without an intervening cleanup.
+ if { $noredo == 1 } {
+ if { [file exists $dir/NOREDO] == 1 } {
+ if { $quiet == 0 } {
+ puts "Skipping salvage testing."
+ }
+ return 0
+ }
+ set f [open $dir/NOREDO w]
+ close $f
+ }
+
+ if { [catch {glob $dir/*.db} dbs] != 0 } {
+ # No files matched
+ return 0
+ }
+
+ foreach db $dbs {
+ set dumpfile $db-dump
+ set sorteddump $db-dump-sorted
+ set salvagefile $db-salvage
+ set sortedsalvage $db-salvage-sorted
+ set aggsalvagefile $db-aggsalvage
+
+ set dbarg ""
+ set utilflag ""
+ if { $encrypt != 0 } {
+ set dbarg "-encryptany $passwd"
+ set utilflag "-P $passwd"
+ }
+
+ # Dump the database with salvage, with aggressive salvage,
+ # and without salvage.
+ #
+ set rval [catch {eval {exec $util_path/db_dump} $utilflag -r \
+ -f $salvagefile $db} res]
+ error_check_good salvage($db:$res) $rval 0
+ filesort $salvagefile $sortedsalvage
+
+ # We can't avoid occasional verify failures in aggressive
+ # salvage. Make sure it's the expected failure.
+ set rval [catch {eval {exec $util_path/db_dump} $utilflag -R \
+ -f $aggsalvagefile $db} res]
+ if { $rval == 1 } {
+puts "res is $res"
+ error_check_good agg_failure \
+ [is_substr $res "DB_VERIFY_BAD"] 1
+ } else {
+ error_check_good aggressive_salvage($db:$res) $rval 0
+ }
+
+ # Queue databases must be dumped with -k to display record
+ # numbers if we're not in salvage mode.
+ if { [isqueuedump $salvagefile] == 1 } {
+ append utilflag " -k "
+ }
+
+ # Discard db_pagesize lines from file dumped with ordinary
+ # db_dump -- they are omitted from a salvage dump.
+ set rval [catch {eval {exec $util_path/db_dump} $utilflag \
+ -f $dumpfile $db} res]
+ error_check_good dump($db:$res) $rval 0
+ filesort $dumpfile $sorteddump
+ discardline $sorteddump TEMPFILE "db_pagesize="
+ file copy -force TEMPFILE $sorteddump
+
+ # A non-aggressively salvaged file should match db_dump.
+ error_check_good compare_dump_and_salvage \
+ [filecmp $sorteddump $sortedsalvage] 0
+
+ puts "Salvage tests of $db succeeded."
+ }
+}
+
+# Reads infile, writes to outfile, discarding any line whose
+# beginning matches the given string.
+proc discardline { infile outfile discard } {
+ set fdin [open $infile r]
+ set fdout [open $outfile w]
+
+ while { [gets $fdin str] >= 0 } {
+ if { [string match $discard* $str] != 1 } {
+ puts $fdout $str
+ }
+ }
+ close $fdin
+ close $fdout
+}
+
+# Inspects dumped file for "type=" line. Returns 1 if type=queue.
+proc isqueuedump { file } {
+ set fd [open $file r]
+
+ while { [gets $fd str] >= 0 } {
+ if { [string match type=* $str] == 1 } {
+ if { [string match "type=queue" $str] == 1 } {
+ close $fd
+ return 1
+ } else {
+ close $fd
+ return 0
+ }
+ }
+ }
+ puts "did not find type= line in dumped file"
+ close $fd
+}
+
# 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
@@ -3235,10 +3398,10 @@ proc get_file_list { {small 0} } {
}
# We don't want a huge number of files, but we do want a nice
- # variety. If there are more than 200 files, pick out a list
+ # variety. If there are more than nfiles files, pick out a list
# by taking every other, or every third, or every nth file.
set filelist {}
- set nfiles 200
+ set nfiles 500
if { [llength $templist] > $nfiles } {
set skip \
[expr [llength $templist] / [expr [expr $nfiles / 3] * 2]]
@@ -3380,62 +3543,22 @@ proc big_endian { } {
}
}
-# Search logs to find if we have debug records.
-proc log_has_debug_records { dir } {
- source ./include.tcl
- global encrypt
+# Check if this is a debug build. Use 'string equal' so we
+# don't get fooled by debug_rop and debug_wop.
+proc is_debug { } {
- 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 } {
- close $f
- fileremove $tmpfile
+ set conf [berkdb getconfig]
+ foreach item $conf {
+ if { [string equal $item "debug"] } {
return 1
}
}
- close $f
- fileremove $tmpfile
- return 0
-}
-
-# Set up a temporary database to check if this is a debug build.
-proc is_debug { } {
- source ./include.tcl
-
- set tempdir $testdir/temp
- file mkdir $tempdir
- set env [berkdb_env -create -log -home $testdir/temp]
- error_check_good temp_env_open [is_valid_env $env] TRUE
-
- set file temp.db
- set db [berkdb_open -create -env $env -btree $file]
- error_check_good temp_db_open [is_valid_db $db] TRUE
-
- set key KEY
- set data DATA
- error_check_good temp_db_put [$db put $key $data] 0
- set ret [$db get $key]
- error_check_good get_key [lindex [lindex $ret 0] 0] $key
- error_check_good get_data [lindex [lindex $ret 0] 1] $data
- error_check_good temp_db_close [$db close] 0
- error_check_good temp_db_remove [$env dbremove $file] 0
- error_check_good temp_env_close [$env close] 0
-
- if { [log_has_debug_records $tempdir] == 1 } {
- return 1
- }
return 0
}
proc adjust_logargs { logtype } {
if { $logtype == "in-memory" } {
- set lbuf [expr 8 * [expr 1024 * 1024]]
+ set lbuf [expr 1 * [expr 1024 * 1024]]
set logargs " -log_inmemory -log_buffer $lbuf "
} elseif { $logtype == "on-disk" } {
set logargs ""
@@ -3456,3 +3579,58 @@ proc adjust_txnargs { logtype } {
return $txnargs
}
+proc get_logfile { env where } {
+ # Open a log cursor.
+ set m_logc [$env log_cursor]
+ error_check_good m_logc [is_valid_logc $m_logc $env] TRUE
+
+ # Check that we're in the expected virtual log file.
+ if { $where == "first" } {
+ set rec [$m_logc get -first]
+ } else {
+ set rec [$m_logc get -last]
+ }
+ error_check_good cursor_close [$m_logc close] 0
+ set lsn [lindex $rec 0]
+ set log [lindex $lsn 0]
+ return $log
+}
+
+# Determine whether logs are in-mem or on-disk.
+# This requires the existence of logs to work correctly.
+proc check_log_location { env } {
+ if { [catch {get_logfile $env first} res] } {
+ puts "FAIL: env $env not configured for logging"
+ }
+ set inmemory 0
+ set flags [$env get_flags]
+ if { [is_substr $flags -log_inmemory] == 1 } {
+ set inmemory 1
+ }
+
+ set env_home [get_home $env]
+ set logfiles [glob -nocomplain $env_home/log.*]
+ if { $inmemory == 1 } {
+ error_check_good no_logs_on_disk [llength $logfiles] 0
+ } else {
+ error_check_bad logs_on_disk [llength $logfiles] 0
+ }
+}
+
+proc find_valid_methods { test } {
+ global checking_valid_methods
+ global valid_methods
+
+ # To find valid methods, call the test with checking_valid_methods
+ # on. It doesn't matter what method we use for this call, so we
+ # arbitrarily pick btree.
+ #
+ set checking_valid_methods 1
+ set test_methods [$test btree]
+ set checking_valid_methods 0
+ if { $test_methods == "ALL" } {
+ return $valid_methods
+ } else {
+ return $test_methods
+ }
+}
diff --git a/db/test/testutils42.tcl b/db/test/testutils42.tcl
new file mode 100644
index 000000000..137f49ae1
--- /dev/null
+++ b/db/test/testutils42.tcl
@@ -0,0 +1,17 @@
+proc getstats { statlist field } {
+ foreach pair $statlist {
+ set txt [lindex $pair 0]
+ if { [string equal $txt $field] == 1 } {
+ return [lindex $pair 1]
+ }
+ }
+ return -1
+}
+
+# Return the value for a particular field in a set of statistics.
+# Works for regular db stat as well as env stats (log_stat,
+# lock_stat, txn_stat, rep_stat, etc.).
+proc stat_field { handle which_stat field } {
+ set stat [$handle $which_stat]
+ return [getstats $stat $field ]
+}
diff --git a/db/test/txn001.tcl b/db/test/txn001.tcl
index 583b7f212..f2b1e5bed 100644
--- a/db/test/txn001.tcl
+++ b/db/test/txn001.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn001.tcl,v 11.38 2004/01/28 03:36:32 bostic Exp $
+# $Id: txn001.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn001
# TEST Begin, commit, abort testing.
proc txn001 { {tnum "001"} { max 1024 } { ntxns 50 } } {
diff --git a/db/test/txn002.tcl b/db/test/txn002.tcl
index 1ecbf9df9..7ac9ff88c 100644
--- a/db/test/txn002.tcl
+++ b/db/test/txn002.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn002.tcl,v 11.41 2004/01/28 03:36:32 bostic Exp $
+# $Id: txn002.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn002
# TEST Verify that read-only transactions do not write log records.
proc txn002 { {tnum "002" } { max 1024 } { ntxns 50 } } {
diff --git a/db/test/txn003.tcl b/db/test/txn003.tcl
index e6a6d6d14..8ce8efc30 100644
--- a/db/test/txn003.tcl
+++ b/db/test/txn003.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn003.tcl,v 11.43 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn003.tcl,v 12.5 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn003
# TEST Test abort/commit/prepare of txns with outstanding child txns.
proc txn003 { {tnum "003"} } {
@@ -41,7 +40,7 @@ proc txn003 { {tnum "003"} } {
set newdata this_is_new_data
set newdata2 some_other_new_data
- error_check_good db_put [$db put -auto_commit $key $origdata] 0
+ error_check_good db_put [$db put $key $origdata] 0
error_check_good dbclose [$db close] 0
set db [eval {berkdb_open} $oflags]
@@ -124,13 +123,6 @@ proc txn003 { {tnum "003"} } {
error_check_good env_close [$env close] 0
}
- # We can't do the attempted child discard on Windows
- # because it will leave open files that can't be removed.
- # Skip the remainder of the test for Windows.
- if { $is_windows_test == 1 } {
- puts "Skipping remainder of test for Windows"
- return
- }
puts "\tTxn$tnum.g: Attempt child prepare"
set env [eval $env_cmd]
error_check_good dbenv [is_valid_env $env] TRUE
diff --git a/db/test/txn004.tcl b/db/test/txn004.tcl
index c7accddd9..a7dfec06c 100644
--- a/db/test/txn004.tcl
+++ b/db/test/txn004.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn004.tcl,v 11.42 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn004.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn004
# TEST Test of wraparound txnids (txn001)
proc txn004 { } {
diff --git a/db/test/txn005.tcl b/db/test/txn005.tcl
index e22581cd1..4b759e777 100644
--- a/db/test/txn005.tcl
+++ b/db/test/txn005.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn005.tcl,v 11.37 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn005.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn005
# TEST Test transaction ID wraparound and recovery.
proc txn005 {} {
diff --git a/db/test/txn006.tcl b/db/test/txn006.tcl
index 14ada718e..a71381c52 100644
--- a/db/test/txn006.tcl
+++ b/db/test/txn006.tcl
@@ -1,10 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
-#
-# $Id: txn006.tcl,v 1.7 2004/01/28 03:36:33 bostic Exp $
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
+# $Id: txn006.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
#TEST txn006
#TEST Test dump/load in transactional environment.
diff --git a/db/test/txn007.tcl b/db/test/txn007.tcl
index 2ef382b97..df7640d41 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn007.tcl,v 11.5 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn007.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
#
#TEST txn007
#TEST Test of DB_TXN_WRITE_NOSYNC
@@ -40,7 +40,7 @@ proc txn007 { { iter 50 } } {
if { [string equal $txt {Times log written}] == 1 } {
set wrval [lindex $i 1]
}
- if { [string equal $txt {Times log flushed}] == 1 } {
+ if { [string equal $txt {Times log flushed to disk}] == 1 } {
set syncval [lindex $i 1]
}
}
diff --git a/db/test/txn008.tcl b/db/test/txn008.tcl
index 8c89296f4..376feef1c 100644
--- a/db/test/txn008.tcl
+++ b/db/test/txn008.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn008.tcl,v 11.6 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn008.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn008
# TEST Test of wraparound txnids (txn002)
proc txn008 { } {
diff --git a/db/test/txn009.tcl b/db/test/txn009.tcl
index b45538d75..d8ef08ed3 100644
--- a/db/test/txn009.tcl
+++ b/db/test/txn009.tcl
@@ -1,11 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn009.tcl,v 11.6 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn009.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
-
# TEST txn009
# TEST Test of wraparound txnids (txn003)
proc txn009 { } {
diff --git a/db/test/txn010.tcl b/db/test/txn010.tcl
index 6616c252b..1d101db81 100644
--- a/db/test/txn010.tcl
+++ b/db/test/txn010.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn010.tcl,v 1.5 2004/01/28 03:36:33 bostic Exp $
+# $Id: txn010.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
#
# TEST txn010
# TEST Test DB_ENV->txn_checkpoint arguments/flags
diff --git a/db/test/txn011.tcl b/db/test/txn011.tcl
index 24bf5c142..ff2218931 100644
--- a/db/test/txn011.tcl
+++ b/db/test/txn011.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2003-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2003-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txn011.tcl,v 1.11 2004/07/26 20:27:49 carol Exp $
+# $Id: txn011.tcl,v 12.5 2006/08/24 14:46:41 bostic Exp $
#
# TEST txn011
# TEST Test durable and non-durable txns.
@@ -18,144 +18,146 @@ 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 -log_inmemory"
- set lbuf [expr 8 * [expr 1024 * 1024]]
- set env_cmd "berkdb_env -create \
- -home $testdir -txn -log_inmemory -log_buffer $lbuf"
- set ndenv [eval $env_cmd]
- set db [berkdb_open -create -auto_commit \
- -btree -env $ndenv -notdurable test.db]
- check_log_records $testdir
- 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 the db is still there.
- set ndenv [berkdb_env -home $testdir]
- set db [berkdb_open -auto_commit -env $ndenv 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 [eval $env_cmd]
- error_check_good env_open [is_valid_env $ndenv] TRUE
-
- # Open/create the database.
- set testfile notdurable.db
- set db [eval berkdb_open -create \
- -auto_commit -env $ndenv -notdurable -btree $testfile]
- error_check_good dbopen [is_valid_db $db] TRUE
-
- puts "\tTxn011.b: Abort txns in in-memory logging 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 in-memory logging 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
- env_cleanup $testdir
-
- puts "\tTxn011.d: Set up mixed durable/non-durable test."
- # Open/create the mixed environment
- set mixed_env_cmd "berkdb_env_noerr -create \
- -home $testdir -txn -log_inmemory -log_buffer $lbuf"
- set env [eval $mixed_env_cmd]
- 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
+ foreach envtype { "" "-private" } {
+ puts "Txn011: Non-durable txns ($envtype)."
+ env_cleanup $testdir
+
+ puts "\tTxn011.a: Persistent env recovery with -log_inmemory"
+ set lbuf [expr 8 * [expr 1024 * 1024]]
+ set env_cmd "berkdb_env -create \
+ -home $testdir -txn -log_inmemory -log_buffer $lbuf"
+ set ndenv [eval $env_cmd $envtype]
+ set db [berkdb_open -create -auto_commit \
+ -btree -env $ndenv -notdurable test.db]
+ check_log_records $testdir
+ 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 the db is still there.
+ set ndenv [berkdb_env -home $testdir]
+ set db [berkdb_open -auto_commit -env $ndenv 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 [eval $env_cmd]
+ error_check_good env_open [is_valid_env $ndenv] TRUE
+
+ # Open/create the database.
+ set testfile notdurable.db
+ set db [eval berkdb_open -create \
+ -auto_commit -env $ndenv -notdurable -btree $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ puts "\tTxn011.b: Abort txns in in-memory logging 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 in-memory logging 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
+ env_cleanup $testdir
+
+ puts "\tTxn011.d: Set up mixed durable/non-durable test."
+ # Open/create the mixed environment
+ set mixed_env_cmd "berkdb_env_noerr -create \
+ -home $testdir -txn -log_inmemory -log_buffer $lbuf"
+ set env [eval $mixed_env_cmd]
+ 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 } {
diff --git a/db/test/txn012.tcl b/db/test/txn012.tcl
new file mode 100644
index 000000000..ed8028baf
--- /dev/null
+++ b/db/test/txn012.tcl
@@ -0,0 +1,62 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: txn012.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST txn012
+# TEST Test txn->getname and txn->setname.
+
+proc txn012 { {ntxns 100} } {
+ source ./include.tcl
+ global util_path
+
+ puts "Txn012: Test txn->setname and txn->getname."
+ env_cleanup $testdir
+ set txnname "this is a short txn name"
+ set longtxnname "transaction names longer than 50 characters will be truncated"
+
+ puts "\tTxn012.a: Set up env and txn."
+ set env [berkdb_env -create -home $testdir -txn]
+ set db [berkdb_open -create -auto_commit -btree -env $env test.db]
+ set txn0 [$env txn]
+ set txn1 [$env txn]
+
+ # Name the transactions, check the name.
+ error_check_good name_txn0 [$txn0 setname $txnname] 0
+ set getname [$txn0 getname]
+ error_check_good txnname $getname $txnname
+
+ error_check_good longname_txn [$txn1 setname $longtxnname] 0
+ set getlongname [$txn1 getname]
+ error_check_good longtxnname $getlongname $longtxnname
+
+ # Run db_stat. The long txn name will be truncated.
+ set stat [exec $util_path/db_stat -h $testdir -t]
+ error_check_good stat_name [is_substr $stat $txnname] 1
+ error_check_good stat_longname [is_substr $stat $longtxnname] 0
+ set truncname [string range $longtxnname 0 49]
+ error_check_good stat_truncname [is_substr $stat $truncname] 1
+
+ # Start another process and make sure it can see the names too.
+ puts "\tTxn012.b: Fork child process."
+ set pid [exec $tclsh_path $test_path/wrap.tcl txn012script.tcl \
+ $testdir/txn012script.log $testdir $txnname $longtxnname &]
+
+ watch_procs $pid 1
+
+ error_check_good txn0_commit [$txn0 commit] 0
+ error_check_good txn1_commit [$txn1 commit] 0
+
+ # Check for errors in child log file.
+ set errstrings [eval findfail $testdir/txn012script.log]
+ foreach str $errstrings {
+ puts "FAIL: error message in log file: $str"
+ }
+
+ # Clean up.
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+}
+
diff --git a/db/test/txn012script.tcl b/db/test/txn012script.tcl
new file mode 100644
index 000000000..07919d927
--- /dev/null
+++ b/db/test/txn012script.tcl
@@ -0,0 +1,34 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: txn012script.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
+#
+# Script to check that txn names can be seen across processes.
+# Names over 50 characters will be truncated.
+#
+# Usage: txn012script dir txnname longtxnname
+
+source ./include.tcl
+source $test_path/test.tcl
+
+set usage "txn012script dir txnname longtxnname"
+
+# Verify usage
+if { $argc != 3 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set dir [ lindex $argv 0 ]
+set txnname [ lindex $argv 1 ]
+set longtxnname [ lindex $argv 2 ]
+
+# Run db_stat to view txn names.
+set stat [exec $util_path/db_stat -h $dir -t]
+error_check_good txnname [is_substr $stat $txnname] 1
+error_check_good longtxnname [is_substr $stat $longtxnname] 0
+set truncname [string range $longtxnname 0 49]
+error_check_good truncname [is_substr $stat $truncname] 1
diff --git a/db/test/txn013.tcl b/db/test/txn013.tcl
new file mode 100644
index 000000000..89e557cc9
--- /dev/null
+++ b/db/test/txn013.tcl
@@ -0,0 +1,77 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2005-2006
+# Oracle Corporation. All rights reserved.
+#
+# $Id: txn013.tcl,v 12.4 2006/08/24 14:46:41 bostic Exp $
+#
+# TEST txn013
+# TEST Test of txns used in the wrong environment.
+# TEST Set up two envs. Start a txn in one env, and attempt to use it
+# TEST in the other env. Verify we get the appropriate error message.
+proc txn013 { } {
+ source ./include.tcl
+
+ set tnum "013"
+ puts "Txn$tnum: Test use of txns in wrong environment."
+ set testfile FILE.db
+ set key KEY
+ set data DATA
+
+ env_cleanup $testdir
+
+ puts "\tTxn$tnum.a: Create two environments."
+ set env1 [berkdb_env_noerr -create -mode 0644 -txn -home $testdir]
+ file mkdir $testdir/SUBDIR
+ set env2 \
+ [berkdb_env_noerr -create -mode 0644 -txn -home $testdir/SUBDIR]
+ error_check_good env1 [is_valid_env $env1] TRUE
+ error_check_good env2 [is_valid_env $env2] TRUE
+
+ # Open a database in each environment.
+ puts "\tTxn$tnum.b: Open a database in each environment."
+ set db1 [berkdb_open_noerr \
+ -env $env1 -create -auto_commit -btree $testfile]
+ set db2 [berkdb_open_noerr \
+ -env $env2 -create -auto_commit -btree $testfile]
+
+ # Create txns in both environments.
+ puts "\tTxn$tnum.c: Start a transaction in each environment."
+ set txn1 [$env1 txn]
+ set txn2 [$env2 txn]
+ error_check_good txn1_begin [is_valid_txn $txn1 $env1] TRUE
+ error_check_good txn2_begin [is_valid_txn $txn2 $env2] TRUE
+
+ # First do the puts in the correct envs, so we have something
+ # for the gets and deletes.
+ error_check_good txn1_env1 [$db1 put -txn $txn1 $key $data] 0
+ error_check_good txn2_env2 [$db2 put -txn $txn2 $key $data] 0
+
+ puts "\tTxn$tnum.d: Execute db put in wrong environment."
+ set errormsg "from different environments"
+ catch {$db1 put -txn $txn2 $key $data} res
+ error_check_good put_env1txn2 [is_substr $res $errormsg] 1
+ catch {$db2 put -txn $txn1 $key $data} res
+ error_check_good put_env2txn1 [is_substr $res $errormsg] 1
+
+ puts "\tTxn$tnum.e: Execute db get in wrong environment."
+ catch {$db1 get -txn $txn2 $key} res
+ error_check_good get_env1txn2 [is_substr $res $errormsg] 1
+ catch {$db2 get -txn $txn1 $key} res
+ error_check_good get_env2txn1 [is_substr $res $errormsg] 1
+
+ puts "\tTxn$tnum.f: Execute db del in wrong environment."
+ catch {$db1 del -txn $txn2 $key} res
+ error_check_good get_env1txn2 [is_substr $res $errormsg] 1
+ catch {$db2 del -txn $txn1 $key} res
+ error_check_good get_env2txn1 [is_substr $res $errormsg] 1
+
+ # Clean up.
+ error_check_good txn1_commit [$txn1 commit] 0
+ error_check_good txn2_commit [$txn2 commit] 0
+ error_check_good db1_close [$db1 close] 0
+ error_check_good db2_close [$db2 close] 0
+ error_check_good env1_close [$env1 close] 0
+ error_check_good env2_close [$env2 close] 0
+}
+
diff --git a/db/test/txnscript.tcl b/db/test/txnscript.tcl
index 980f6ed51..b516655a6 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1996-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: txnscript.tcl,v 11.5 2004/01/28 03:36:33 bostic Exp $
+# $Id: txnscript.tcl,v 12.3 2006/08/24 14:46:41 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 85c1a8007..e5faa8b11 100644
--- a/db/test/update.tcl
+++ b/db/test/update.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: update.tcl,v 11.13 2004/01/28 03:36:33 bostic Exp $
+# $Id: update.tcl,v 12.3 2006/08/24 14:46:41 bostic Exp $
source ./include.tcl
global update_dir
diff --git a/db/test/upgrade.tcl b/db/test/upgrade.tcl
index 0043c353a..add597d85 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-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 1999-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: upgrade.tcl,v 11.37 2004/10/27 20:29:29 carol Exp $
+# $Id: upgrade.tcl,v 12.8 2006/09/18 14:22:44 carol Exp $
source ./include.tcl
@@ -13,6 +13,8 @@ set upgrade_dir "$test_path/upgrade/databases"
global gen_upgrade
set gen_upgrade 0
+global gen_dump
+set gen_dump 0
global gen_chksum
set gen_chksum 0
global gen_upgrade_log
@@ -25,6 +27,7 @@ global upgrade_name
proc upgrade { { archived_test_loc "DEFAULT" } } {
source ./include.tcl
+ global test_names
global upgrade_dir
global tcl_platform
global saved_logvers
@@ -174,6 +177,35 @@ proc upgrade { { archived_test_loc "DEFAULT" } } {
close $o
}
}
+
+ # Then we test any .dmp files. Move
+ # the saved file to the current working
+ # directory. Run the test locally.
+ # Compare the dumps; they should match.
+ if { [file exists $testdir/$name.dmp] } {
+ file rename -force \
+ $testdir/$name.dmp $name.dmp
+
+ foreach test $test_names(plat) {
+ eval $test $method
+ }
+
+ # Discard lines that can differ.
+ discardline $name.dmp \
+ TEMPFILE "db_pagesize="
+ file copy -force \
+ TEMPFILE $name.dmp
+ discardline $testdir/$test.dmp \
+ TEMPFILE "db_pagesize="
+ file copy -force \
+ TEMPFILE $testdir/$test.dmp
+
+ error_check_good compare_dump \
+ [filecmp $name.dmp \
+ $testdir/$test.dmp] 0
+
+ fileremove $name.dmp
+ }
}
}
}
@@ -195,6 +227,7 @@ proc upgrade { { archived_test_loc "DEFAULT" } } {
proc _upgrade_test { temp_dir version method file endianness } {
source include.tcl
global errorInfo
+ global passwd
global encrypt
puts "Upgrade: $version $method $file $endianness"
@@ -203,6 +236,22 @@ proc _upgrade_test { temp_dir version method file endianness } {
if { [string match c-* $file] } {
set encrypt 1
}
+
+ # Open the database prior to upgrading. If it fails,
+ # it should fail with the DB_OLDVERSION message.
+ set encargs ""
+ if { $encrypt == 1 } {
+ set encargs " -encryptany $passwd "
+ }
+ if { [catch \
+ { set db [eval {berkdb open} $encargs \
+ $temp_dir/$file-$endianness.db] } res] } {
+ error_check_good old_version [is_substr $res DB_OLDVERSION] 1
+ } else {
+ error_check_good db_close [$db close] 0
+ }
+
+ # Now upgrade the database.
set ret [berkdb upgrade "$temp_dir/$file-$endianness.db"]
error_check_good dbupgrade $ret 0
@@ -271,18 +320,29 @@ proc _log_test { temp_dir release method file } {
# log version, that's okay.
if { $current_logvers <= $saved_logvers } {
puts "db_printlog failed: $message"
- }
+ }
}
}
- if { $current_logvers > $saved_logvers } {
+ # Log versions prior to 8 can only be read by their own version.
+ # Log versions of 8 or greater are readable by Berkeley DB 4.5
+ # or greater, but the output of printlog does not match unless
+ # the versions are identical.
+ set logoldver 8
+ if { $current_logvers > $saved_logvers &&\
+ $current_logvers < $logoldver } {
error_check_good historic_log_version \
[is_substr $message "historic log version"] 1
- } else {
+ } elseif { $current_logvers > $saved_logvers } {
+ error_check_good db_printlog:$message $ret 0
+ } elseif { $current_logvers == $saved_logvers } {
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
+ } elseif { $current_logvers < $saved_logvers } {
+ puts -nonewline "FAIL: current log version $current_logvers "
+ puts "cannot be less than saved log version $save_logvers."
}
}
@@ -290,10 +350,12 @@ proc gen_upgrade { dir { save_crypto 1 } { save_non_crypto 1 } } {
global gen_upgrade
global gen_upgrade_log
global gen_chksum
+ global gen_dump
global upgrade_dir
global upgrade_be
global upgrade_method
global upgrade_name
+ global valid_methods
global test_names
global parms
global encrypt
@@ -331,15 +393,31 @@ proc gen_upgrade { dir { save_crypto 1 } { save_non_crypto 1 } } {
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" {
+ foreach method $valid_methods {
set o [open GENERATE.OUT a]
puts $o "\nGenerating $method files"
close $o
puts "\tGenerating $method files"
set upgrade_method $method
+
+ # We piggyback testing of dumped sequence files on upgrade
+ # testing because this is the only place that we ship files
+ # from one machine to another. Create files for both
+ # endiannesses, because who knows what platform we'll
+ # be testing on.
+
+ set gen_dump 1
+ foreach test $test_names(plat) {
+ set upgrade_name $test
+ foreach upgrade_be { 0 1 } {
+ eval $test $method
+ cleanup $testdir NULL
+ }
+ }
+ set gen_dump 0
+
#set test_names(test) ""
+ set gen_upgrade 1
foreach test $test_names(test) {
if { [info exists parms($test)] != 1 } {
continue
@@ -429,8 +507,9 @@ proc gen_upgrade { dir { save_crypto 1 } { save_non_crypto 1 } } {
cleanup $testdir NULL 1
}
}
+ set gen_upgrade 0
}
- set gen_upgrade 0
+
# Set upgrade_be to the native value so log files go to the
# right place.
set upgrade_be [big_endian]
@@ -486,6 +565,7 @@ proc save_upgrade_files { dir } {
global upgrade_name
global gen_upgrade
global gen_upgrade_log
+ global gen_dump
global encrypt
global gen_chksum
global passwd
@@ -607,6 +687,29 @@ proc save_upgrade_files { dir } {
cd $cwd
}
}
+
+ if { $gen_dump == 1 } {
+ # Save dump files. We require that the files have
+ # been created with the extension .dmp.
+ set dumpfiles [glob -nocomplain $dir/*.dmp]
+
+ foreach dumpfile $dumpfiles {
+ set basename [string range $dumpfile \
+ [expr [string length $dir] + 1] end-4]
+
+ set newbasename $upgrade_name-$basename
+
+ # Rename dumpfile.
+ file rename $dumpfile $dir/$newbasename.dmp
+
+ set cwd [pwd]
+ cd $dir
+ catch {eval exec tar -cvf $dest/$newbasename.tar \
+ [glob $newbasename.dmp]}
+ catch {exec gzip -9v $dest/$newbasename.tar} res
+ cd $cwd
+ }
+ }
}
proc upgrade_dump { database file {stripnulls 0} } {
diff --git a/db/test/wrap.tcl b/db/test/wrap.tcl
index 34ec45107..183f03c92 100644
--- a/db/test/wrap.tcl
+++ b/db/test/wrap.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2004
-# Sleepycat Software. All rights reserved.
+# Copyright (c) 2000-2006
+# Oracle Corporation. All rights reserved.
#
-# $Id: wrap.tcl,v 11.8 2004/01/28 03:36:33 bostic Exp $
+# $Id: wrap.tcl,v 12.4 2006/08/24 14:46:41 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
@@ -21,7 +21,14 @@ if { $argc < 3 } {
set script [lindex $argv 0]
set logfile [lindex $argv 1]
-set args [lrange $argv 2 end]
+set skip [lindex $argv 2]
+set args [lrange $argv 3 end]
+#
+# Account in args for SKIP command, or not.
+#
+if { $skip != "SKIP" } {
+ set args [lrange $argv 2 end]
+}
# Create a sentinel file to mark our creation and signal that watch_procs
# should look for us.
@@ -40,7 +47,16 @@ set childsentinel $testdir/begin.$childpid
set f [open $childsentinel w]
close $f
-puts $t "source $test_path/test.tcl"
+#
+# For the upgrade tests where a current release tclsh is starting up
+# a tclsh in an older release, we cannot tell it to source the current
+# test.tcl because new things may not exist in the old release. So,
+# we need to skip that and the script we're running in the old
+# release will have to take care of itself.
+#
+if { $skip != "SKIP" } {
+ 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
@@ -48,9 +64,11 @@ puts $t "set script $script"
puts $t "set argc [llength $args]"
puts $t "set argv [list $args]"
-puts $t {set ret [catch { source $test_path/$script } result]}
+set scr $test_path/$script
+puts $t "set scr $scr"
+puts $t {set ret [catch { source $scr } result]}
puts $t {if { [string length $result] > 0 } { puts $result }}
-puts $t {error_check_good "$test_path/$script run: pid [pid]" $ret 0}
+puts $t {error_check_good "$scr 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
diff --git a/db/txn/txn.c b/db/txn/txn.c
index f0e4f7d4c..527c483d1 100644
--- a/db/txn/txn.c
+++ b/db/txn/txn.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1995, 1996
@@ -35,46 +35,29 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: txn.c,v 11.249 2004/10/15 16:59:44 bostic Exp $
+ * $Id: txn.c,v 12.55 2006/08/24 14:46:52 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#include <stdlib.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 <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
#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/txn.h"
-#define SET_LOG_FLAGS(dbenv, txnp, lflags) \
+#define SET_LOG_FLAGS(dbenv, txn, lflags) \
do { \
- lflags = DB_LOG_COMMIT | DB_LOG_PERM; \
- if (F_ISSET(txnp, TXN_SYNC)) \
+ lflags = DB_LOG_COMMIT; \
+ if (F_ISSET(txn, TXN_SYNC)) \
lflags |= DB_FLUSH; \
- else if (!F_ISSET(txnp, TXN_NOSYNC) && \
+ else if (F_ISSET(txn, TXN_WRITE_NOSYNC)) \
+ lflags |= DB_LOG_WRNOSYNC; \
+ else if (!F_ISSET(txn, TXN_NOSYNC) && \
!F_ISSET(dbenv, DB_ENV_TXN_NOSYNC)) { \
if (F_ISSET(dbenv, DB_ENV_TXN_WRITE_NOSYNC)) \
lflags |= DB_LOG_WRNOSYNC; \
@@ -98,13 +81,13 @@ typedef enum {
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_discard __P((DB_TXN *, u_int32_t));
+static int __txn_dispatch_undo
+ __P((DB_ENV *, DB_TXN *, DBT *, DB_LSN *, void *));
static int __txn_end __P((DB_TXN *, int));
-static int __txn_isvalid __P((const DB_TXN *, TXN_DETAIL **, txnop_t));
+static int __txn_isvalid __P((const DB_TXN *, txnop_t));
static int __txn_undo __P((DB_TXN *));
-static int __txn_dispatch_undo __P((DB_ENV *,
- DB_TXN *, DBT *, DB_LSN *, void *));
-static void __txn_set_begin_lsnp __P((DB_TXN *txn, DB_LSN **));
+static void __txn_set_txn_lsnp __P((DB_TXN *, DB_LSN **, DB_LSN **));
/*
* __txn_begin_pp --
@@ -118,6 +101,7 @@ __txn_begin_pp(dbenv, parent, txnpp, flags)
DB_TXN *parent, **txnpp;
u_int32_t flags;
{
+ DB_THREAD_INFO *ip;
int rep_check, ret;
PANIC_CHECK(dbenv);
@@ -125,17 +109,29 @@ __txn_begin_pp(dbenv, parent, txnpp, flags)
if ((ret = __db_fchk(dbenv,
"txn_begin", flags,
- DB_DEGREE_2 | DB_DIRTY_READ | DB_TXN_NOWAIT |
- DB_TXN_NOSYNC | DB_TXN_SYNC)) != 0)
+ DB_READ_COMMITTED | DB_READ_UNCOMMITTED | DB_TXN_NOWAIT |
+ DB_TXN_NOSYNC | DB_TXN_SNAPSHOT | DB_TXN_SYNC |
+ DB_TXN_WRITE_NOSYNC)) != 0)
+ return (ret);
+ if ((ret = __db_fcchk(dbenv, "txn_begin", flags,
+ DB_TXN_WRITE_NOSYNC | DB_TXN_NOSYNC, DB_TXN_SYNC)) != 0)
return (ret);
- if ((ret = __db_fcchk(dbenv,
- "txn_begin", flags, DB_TXN_NOSYNC, DB_TXN_SYNC)) != 0)
+ if ((ret = __db_fcchk(dbenv, "txn_begin",
+ flags, DB_TXN_WRITE_NOSYNC, DB_TXN_NOSYNC)) != 0)
return (ret);
+ if (parent != NULL && !F_ISSET(parent, TXN_SNAPSHOT) &&
+ LF_ISSET(DB_TXN_SNAPSHOT)) {
+ __db_errx(dbenv,
+ "Child transaction snapshot setting must match parent");
+ return (EINVAL);
+ }
+
+ ENV_ENTER(dbenv, ip);
if (parent == NULL) {
rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __op_rep_enter(dbenv);
+ if (rep_check && (ret = __op_rep_enter(dbenv)) != 0)
+ goto err;
} else
rep_check = 0;
ret = __txn_begin(dbenv, parent, txnpp, flags);
@@ -145,8 +141,9 @@ __txn_begin_pp(dbenv, parent, txnpp, flags)
* txn is resolved by txn_commit, txn_abort, etc.
*/
if (ret != 0 && rep_check)
- __op_rep_exit(dbenv);
+ (void)__op_rep_exit(dbenv);
+err: ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -172,6 +169,7 @@ __txn_begin(dbenv, parent, txnpp, flags)
{
DB_LOCKREGION *region;
DB_TXN *txn;
+ TXN_DETAIL *ptd, *td;
int ret;
*txnpp = NULL;
@@ -184,25 +182,34 @@ __txn_begin(dbenv, parent, txnpp, flags)
TAILQ_INIT(&txn->events);
STAILQ_INIT(&txn->logs);
txn->flags = TXN_MALLOC;
- if (LF_ISSET(DB_DEGREE_2))
- F_SET(txn, TXN_DEGREE_2);
- if (LF_ISSET(DB_DIRTY_READ))
- F_SET(txn, TXN_DIRTY_READ);
+ if (LF_ISSET(DB_READ_COMMITTED))
+ F_SET(txn, TXN_READ_COMMITTED);
+ if (LF_ISSET(DB_READ_UNCOMMITTED))
+ F_SET(txn, TXN_READ_UNCOMMITTED);
if (LF_ISSET(DB_TXN_NOSYNC))
F_SET(txn, TXN_NOSYNC);
+ if (LF_ISSET(DB_TXN_SNAPSHOT) || F_ISSET(dbenv, DB_ENV_TXN_SNAPSHOT) ||
+ (parent != NULL && F_ISSET(parent, TXN_SNAPSHOT)))
+ F_SET(txn, TXN_SNAPSHOT);
if (LF_ISSET(DB_TXN_SYNC))
F_SET(txn, TXN_SYNC);
if (LF_ISSET(DB_TXN_NOWAIT))
F_SET(txn, TXN_NOWAIT);
+ if (LF_ISSET(DB_TXN_WRITE_NOSYNC))
+ F_SET(txn, TXN_WRITE_NOSYNC);
if ((ret = __txn_begin_int(txn, 0)) != 0)
goto err;
+ td = txn->td;
- if (parent != NULL)
+ if (parent != NULL) {
+ ptd = parent->td;
TAILQ_INSERT_HEAD(&parent->kids, txn, klinks);
+ SH_TAILQ_INSERT_HEAD(&ptd->kids, td, klinks, __txn_detail);
+ }
if (LOCKING_ON(dbenv)) {
- region = ((DB_LOCKTAB *)dbenv->lk_handle)->reginfo.primary;
+ region = dbenv->lk_handle->reginfo.primary;
if (parent != NULL) {
ret = __lock_inherit_timeout(dbenv,
parent->txnid, txn->txnid);
@@ -255,9 +262,7 @@ __txn_xa_begin(dbenv, txn)
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));
@@ -266,12 +271,56 @@ __txn_xa_begin(dbenv, txn)
}
/*
+ * __txn_recycle_id --
+ * Find a range of useable transaction ids.
+ *
+ * PUBLIC: int __txn_recycle_id __P((DB_ENV *));
+ */
+int
+__txn_recycle_id(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_LSN null_lsn;
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ TXN_DETAIL *td;
+ u_int32_t *ids;
+ int nids, ret;
+
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(u_int32_t) * region->maxtxns, &ids)) != 0)
+ return (ret);
+ nids = 0;
+ SH_TAILQ_FOREACH(td, &region->active_txn, links, __txn_detail)
+ ids[nids++] = td->txnid;
+ region->last_txnid = TXN_MINIMUM - 1;
+ region->cur_maxid = TXN_MAXIMUM;
+ if (nids != 0)
+ __db_idspace(ids, nids,
+ &region->last_txnid, &region->cur_maxid);
+ __os_free(dbenv, ids);
+
+ /*
+ * Check LOGGING_ON rather than DBENV_LOGGING as we want to emit this
+ * record at the end of recovery.
+ */
+ if (LOGGING_ON(dbenv))
+ ret = __txn_recycle_log(dbenv, NULL, &null_lsn,
+ 0, region->last_txnid + 1, region->cur_maxid);
+
+ return (ret);
+}
+
+/*
* __txn_compensate_begin
* Begin an compensation transaction. This is a special interface
* that is used only for transactions that must be started to compensate
* for actions during an abort. Currently only used for allocations.
*
- * PUBLIC: int __txn_compensate_begin __P((DB_ENV *, DB_TXN **txnp));
+ * PUBLIC: int __txn_compensate_begin __P((DB_ENV *, DB_TXN **));
*/
int
__txn_compensate_begin(dbenv, txnpp)
@@ -306,28 +355,26 @@ __txn_begin_int(txn, internal)
int internal;
{
DB_ENV *dbenv;
- DB_LSN null_lsn;
DB_TXNMGR *mgr;
DB_TXNREGION *region;
TXN_DETAIL *td;
- size_t off;
- u_int32_t id, *ids;
- int nids, ret;
+ u_int32_t id;
+ int ret;
mgr = txn->mgrp;
dbenv = mgr->dbenv;
region = mgr->reginfo.primary;
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
if (!F_ISSET(txn, TXN_COMPENSATE) && F_ISSET(region, TXN_IN_RECOVERY)) {
- __db_err(dbenv, "operation not permitted during recovery");
+ __db_errx(dbenv, "operation not permitted during recovery");
ret = EINVAL;
goto err;
}
/* Make sure that we aren't still recovering prepared transactions. */
if (!internal && region->stat.st_nrestores != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"recovery of prepared but not yet committed transactions is incomplete");
ret = EINVAL;
goto err;
@@ -341,31 +388,14 @@ __txn_begin_int(txn, internal)
region->cur_maxid != TXN_MAXIMUM)
region->last_txnid = TXN_MINIMUM - 1;
- if (region->last_txnid == region->cur_maxid) {
- if ((ret = __os_malloc(dbenv,
- sizeof(u_int32_t) * region->maxtxns, &ids)) != 0)
- goto err;
- nids = 0;
- for (td = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
- td != NULL;
- td = SH_TAILQ_NEXT(td, links, __txn_detail))
- ids[nids++] = td->txnid;
- region->last_txnid = TXN_MINIMUM - 1;
- region->cur_maxid = TXN_MAXIMUM;
- if (nids != 0)
- __db_idspace(ids, nids,
- &region->last_txnid, &region->cur_maxid);
- __os_free(dbenv, ids);
- if (DBENV_LOGGING(dbenv) &&
- (ret = __txn_recycle_log(dbenv, NULL, &null_lsn,
- 0, region->last_txnid + 1, region->cur_maxid)) != 0)
- goto err;
- }
+ if (region->last_txnid == region->cur_maxid &&
+ (ret = __txn_recycle_id(dbenv)) != 0)
+ goto err;
/* Allocate a new transaction detail structure. */
if ((ret =
__db_shalloc(&mgr->reginfo, sizeof(TXN_DETAIL), 0, &td)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Unable to allocate memory for transaction detail");
goto err;
}
@@ -379,30 +409,37 @@ __txn_begin_int(txn, internal)
region->stat.st_maxnactive = region->stat.st_nactive;
td->txnid = id;
+ dbenv->thread_id(dbenv, &td->pid, &td->tid);
ZERO_LSN(td->last_lsn);
ZERO_LSN(td->begin_lsn);
+ SH_TAILQ_INIT(&td->kids);
if (txn->parent != NULL)
- td->parent = txn->parent->off;
+ td->parent = R_OFFSET(&mgr->reginfo, txn->parent->td);
else
td->parent = INVALID_ROFF;
+ td->name = INVALID_ROFF;
+ MAX_LSN(td->read_lsn);
+ MAX_LSN(td->visible_lsn);
+ td->mvcc_ref = 0;
+ td->mvcc_mtx = MUTEX_INVALID;
td->status = TXN_RUNNING;
td->flags = 0;
td->xa_status = 0;
- off = R_OFFSET(&mgr->reginfo, td);
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
- ZERO_LSN(txn->last_lsn);
txn->txnid = id;
- txn->off = (u_int32_t)off;
+ txn->td = td;
txn->abort = __txn_abort_pp;
txn->commit = __txn_commit_pp;
- txn->discard = __txn_discard_pp;
+ txn->discard = __txn_discard;
+ txn->get_name = __txn_get_name;
txn->id = __txn_id;
txn->prepare = __txn_prepare;
+ txn->set_txn_lsnp = __txn_set_txn_lsnp;
+ txn->set_name = __txn_set_name;
txn->set_timeout = __txn_set_timeout;
- txn->set_begin_lsnp = __txn_set_begin_lsnp;
/*
* If this is a transaction family, we must link the child to the
@@ -414,34 +451,71 @@ __txn_begin_int(txn, internal)
return (ret);
if (F_ISSET(txn, TXN_MALLOC)) {
- MUTEX_THREAD_LOCK(dbenv, mgr->mutexp);
+ MUTEX_LOCK(dbenv, mgr->mutex);
TAILQ_INSERT_TAIL(&mgr->txn_chain, txn, links);
- MUTEX_THREAD_UNLOCK(dbenv, mgr->mutexp);
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
}
return (0);
-err: R_UNLOCK(dbenv, &mgr->reginfo);
+err: TXN_SYSTEM_UNLOCK(dbenv);
return (ret);
}
/*
+ * __txn_continue
+ * Fill in the fields of the local transaction structure given
+ * the detail transaction structure.
+ *
+ * PUBLIC: void __txn_continue __P((DB_ENV *, DB_TXN *, TXN_DETAIL *));
+ */
+void
+__txn_continue(env, txn, td)
+ DB_ENV *env;
+ DB_TXN *txn;
+ TXN_DETAIL *td;
+{
+ txn->mgrp = env->tx_handle;
+ txn->parent = NULL;
+ txn->txnid = td->txnid;
+ txn->td = td;
+
+ txn->abort = __txn_abort_pp;
+ txn->commit = __txn_commit_pp;
+ txn->discard = __txn_discard;
+ txn->get_name = __txn_get_name;
+ txn->id = __txn_id;
+ txn->prepare = __txn_prepare;
+ txn->set_name = __txn_set_name;
+
+ txn->flags = 0;
+ if (F_ISSET(td, TXN_DTL_RESTORED))
+ F_SET(txn, TXN_RESTORED);
+}
+
+/*
* __txn_commit_pp --
* Interface routine to TXN->commit.
*/
static int
-__txn_commit_pp(txnp, flags)
- DB_TXN *txnp;
+__txn_commit_pp(txn, flags)
+ DB_TXN *txn;
u_int32_t flags;
{
DB_ENV *dbenv;
- int not_child, ret;
+ DB_THREAD_INFO *ip;
+ int not_child, ret, t_ret;
+
+ dbenv = txn->mgrp->dbenv;
+ not_child = txn->parent == NULL;
- 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);
+ ENV_ENTER(dbenv, ip);
+
+ ret = __txn_commit(txn, flags);
+ if (not_child && IS_ENV_REPLICATED(dbenv) &&
+ (t_ret = __op_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -452,25 +526,44 @@ __txn_commit_pp(txnp, flags)
* PUBLIC: int __txn_commit __P((DB_TXN *, u_int32_t));
*/
int
-__txn_commit(txnp, flags)
- DB_TXN *txnp;
+__txn_commit(txn, flags)
+ DB_TXN *txn;
u_int32_t flags;
{
DBT list_dbt;
DB_ENV *dbenv;
DB_LOCKREQ request;
DB_TXN *kid;
+ REGENV *renv;
+ REGINFO *infop;
TXN_DETAIL *td;
- u_int32_t lflags;
+ u_int32_t id, lflags;
int ret, t_ret;
- dbenv = txnp->mgrp->dbenv;
+ dbenv = txn->mgrp->dbenv;
+ td = txn->td;
PANIC_CHECK(dbenv);
- if ((ret = __txn_isvalid(txnp, &td, TXN_OP_COMMIT)) != 0)
+ /*
+ * A common mistake in Berkeley DB programs is to mis-handle deadlock
+ * return. If the transaction deadlocked, they want abort, not commit.
+ */
+ if (F_ISSET(txn, TXN_DEADLOCK)) {
+ ret = __db_txn_deadlock_err(dbenv);
+ goto err;
+ }
+
+ if ((ret = __txn_isvalid(txn, TXN_OP_COMMIT)) != 0)
return (ret);
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ /*
+ * No mutex is needed as envid is read-only once it is set.
+ */
+ id = renv->envid;
+
/*
* We clear flags that are incorrect, ignoring any flag errors, and
* default to synchronous operations. By definition, transaction
@@ -478,19 +571,24 @@ __txn_commit(txnp, flags)
* happen, but we don't want to fail in the field 'cause the app is
* specifying the wrong flag for some reason.
*/
- if (__db_fchk(dbenv,
- "DB_TXN->commit", flags, DB_TXN_NOSYNC | DB_TXN_SYNC) != 0)
+ if (__db_fchk(dbenv, "DB_TXN->commit", flags,
+ DB_TXN_NOSYNC | DB_TXN_SYNC | DB_TXN_WRITE_NOSYNC) != 0)
flags = DB_TXN_SYNC;
- if (__db_fcchk(dbenv,
- "DB_TXN->commit", flags, DB_TXN_NOSYNC, DB_TXN_SYNC) != 0)
+ if (__db_fcchk(dbenv, "DB_TXN->commit", flags,
+ DB_TXN_SYNC, DB_TXN_NOSYNC | DB_TXN_WRITE_NOSYNC) != 0)
flags = DB_TXN_SYNC;
+
+ if (LF_ISSET(DB_TXN_WRITE_NOSYNC)) {
+ F_CLR(txn, TXN_SYNC_FLAGS);
+ F_SET(txn, TXN_WRITE_NOSYNC);
+ }
if (LF_ISSET(DB_TXN_NOSYNC)) {
- F_CLR(txnp, TXN_SYNC);
- F_SET(txnp, TXN_NOSYNC);
+ F_CLR(txn, TXN_SYNC_FLAGS);
+ F_SET(txn, TXN_NOSYNC);
}
if (LF_ISSET(DB_TXN_SYNC)) {
- F_CLR(txnp, TXN_NOSYNC);
- F_SET(txnp, TXN_SYNC);
+ F_CLR(txn, TXN_SYNC_FLAGS);
+ F_SET(txn, TXN_SYNC);
}
/*
@@ -498,9 +596,9 @@ __txn_commit(txnp, flags)
* then try to abort the rest of the kids and then abort the parent.
* Abort should never fail; if it does, we bail out immediately.
*/
- while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
+ while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
if ((ret = __txn_commit(kid, flags)) != 0)
- while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
+ while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
if ((t_ret = __txn_abort(kid)) != 0)
return (__db_panic(dbenv, t_ret));
@@ -511,9 +609,9 @@ __txn_commit(txnp, flags)
* 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) ||
- STAILQ_FIRST(&txnp->logs) != NULL)) {
- if (txnp->parent == NULL) {
+ if (DBENV_LOGGING(dbenv) && (!IS_ZERO_LSN(td->last_lsn) ||
+ STAILQ_FIRST(&txn->logs) != NULL)) {
+ if (txn->parent == NULL) {
/*
* We are about to free all the read locks for this
* transaction below. Some of those locks might be
@@ -523,26 +621,39 @@ __txn_commit(txnp, flags)
* release the locks below.
*/
if ((ret =
- __txn_doevents(dbenv, txnp, TXN_PREPARE, 1)) != 0)
+ __txn_doevents(dbenv, txn, TXN_PREPARE, 1)) != 0)
goto err;
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)) {
+ !IS_ZERO_LSN(td->last_lsn)) {
memset(&list_dbt, 0, sizeof(list_dbt));
request.obj = &list_dbt;
}
ret = __lock_vec(dbenv,
- txnp->txnid, 0, &request, 1, NULL);
+ txn->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 (ret == 0 && !IS_ZERO_LSN(td->last_lsn)) {
+ SET_LOG_FLAGS(dbenv, txn, lflags);
+ ret = __txn_regop_log(dbenv, txn,
+ &td->visible_lsn, lflags, TXN_COMMIT,
+ (int32_t)time(NULL), id, request.obj);
+ if (ret == 0)
+ td->last_lsn = td->visible_lsn;
+#ifdef DIAGNOSTIC
+ if (ret == 0) {
+ DB_LSN s_lsn;
+
+ DB_ASSERT(dbenv, __log_current_lsn(
+ dbenv, &s_lsn, NULL, NULL) == 0);
+ DB_ASSERT(dbenv, LOG_COMPARE(
+ &td->visible_lsn, &s_lsn) <= 0);
+ COMPQUIET(s_lsn.file, 0);
+ }
+#endif
}
if (request.obj != NULL && request.obj->data != NULL)
@@ -551,23 +662,23 @@ __txn_commit(txnp, flags)
goto err;
} else {
/* Log the commit in the parent! */
- 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) {
+ if (!IS_ZERO_LSN(td->last_lsn) &&
+ (ret = __txn_child_log(dbenv, txn->parent,
+ &((TXN_DETAIL *)txn->parent->td)->last_lsn,
+ 0, txn->txnid, &td->last_lsn)) != 0) {
goto err;
}
- if (STAILQ_FIRST(&txnp->logs) != NULL) {
+ if (STAILQ_FIRST(&txn->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);
+ STAILQ_CONCAT(&txn->logs, &txn->parent->logs);
+ txn->parent->logs = txn->logs;
+ STAILQ_INIT(&txn->logs);
}
- F_SET(txnp->parent, TXN_CHILDCOMMIT);
+ F_SET(txn->parent, TXN_CHILDCOMMIT);
}
}
@@ -577,22 +688,22 @@ __txn_commit(txnp, flags)
* undo other allocations, if necessary, without worrying about these
* pages which were not on the free list before.
*/
- if (txnp->txn_list != NULL) {
+ if (txn->txn_list != NULL) {
#ifndef HAVE_FTRUNCATE
t_ret = __db_do_the_limbo(dbenv,
- NULL, txnp, txnp->txn_list, LIMBO_NORMAL);
+ NULL, txn, txn->txn_list, LIMBO_NORMAL);
if (t_ret != 0 && ret == 0)
ret = t_ret;
#endif
- __db_txnlist_end(dbenv, txnp->txn_list);
- txnp->txn_list = NULL;
+ __db_txnlist_end(dbenv, txn->txn_list);
+ txn->txn_list = NULL;
}
if (ret != 0)
goto err;
/* This is OK because __txn_end can only fail with a panic. */
- return (__txn_end(txnp, 1));
+ return (__txn_end(txn, 1));
err: /*
* If we are prepared, then we "must" be able to commit. We panic here
@@ -605,7 +716,7 @@ err: /*
if (td->status == TXN_PREPARED)
return (__db_panic(dbenv, ret));
- if ((t_ret = __txn_abort(txnp)) != 0)
+ if ((t_ret = __txn_abort(txn)) != 0)
ret = t_ret;
return (ret);
}
@@ -615,17 +726,23 @@ err: /*
* Interface routine to TXN->abort.
*/
static int
-__txn_abort_pp(txnp)
- DB_TXN *txnp;
+__txn_abort_pp(txn)
+ DB_TXN *txn;
{
DB_ENV *dbenv;
- int not_child, ret;
+ DB_THREAD_INFO *ip;
+ int not_child, ret, t_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);
+ dbenv = txn->mgrp->dbenv;
+ not_child = txn->parent == NULL;
+
+ ENV_ENTER(dbenv, ip);
+
+ ret = __txn_abort(txn);
+ if (not_child && IS_ENV_REPLICATED(dbenv) &&
+ (t_ret = __op_rep_exit(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -636,22 +753,25 @@ __txn_abort_pp(txnp)
* PUBLIC: int __txn_abort __P((DB_TXN *));
*/
int
-__txn_abort(txnp)
- DB_TXN *txnp;
+__txn_abort(txn)
+ DB_TXN *txn;
{
DB_ENV *dbenv;
DB_LOCKREQ request;
DB_TXN *kid;
+ REGENV *renv;
+ REGINFO *infop;
TXN_DETAIL *td;
- u_int32_t lflags;
+ u_int32_t id, lflags;
int ret;
- dbenv = txnp->mgrp->dbenv;
+ dbenv = txn->mgrp->dbenv;
+ td = txn->td;
PANIC_CHECK(dbenv);
/* Ensure that abort always fails fatally. */
- if ((ret = __txn_isvalid(txnp, &td, TXN_OP_ABORT)) != 0)
+ if ((ret = __txn_isvalid(txn, TXN_OP_ABORT)) != 0)
return (__db_panic(dbenv, ret));
/*
@@ -661,10 +781,30 @@ __txn_abort(txnp)
* see any failure, we just get out of here and return the panic
* up.
*/
- while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
+ while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
if ((ret = __txn_abort(kid)) != 0)
return (ret);
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ /*
+ * No mutex is needed as envid is read-only once it is set.
+ */
+ id = renv->envid;
+
+ /*
+ * Fast path -- no need to do anything fancy if there were no
+ * modifications (e.g., log records) for this transaction.
+ * We still call txn_undo to cleanup the txn_list from our
+ * children.
+ */
+ if (IS_ZERO_LSN(td->last_lsn) && STAILQ_FIRST(&txn->logs) == NULL) {
+ if (txn->txn_list == NULL)
+ goto done;
+ else
+ goto undo;
+ }
+
if (LOCKING_ON(dbenv)) {
/*
* We are about to free all the read locks for this transaction
@@ -673,25 +813,25 @@ __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, TXN_ABORT, 1)) != 0)
+ if ((ret = __txn_doevents(dbenv, txn, TXN_ABORT, 1)) != 0)
return (__db_panic(dbenv, ret));
/* Turn off timeouts. */
if ((ret = __lock_set_timeout(dbenv,
- txnp->txnid, 0, DB_SET_TXN_TIMEOUT)) != 0)
+ txn->txnid, 0, DB_SET_TXN_TIMEOUT)) != 0)
return (__db_panic(dbenv, ret));
if ((ret = __lock_set_timeout(dbenv,
- txnp->txnid, 0, DB_SET_LOCK_TIMEOUT)) != 0)
+ txn->txnid, 0, DB_SET_LOCK_TIMEOUT)) != 0)
return (__db_panic(dbenv, ret));
request.op = DB_LOCK_UPGRADE_WRITE;
request.obj = NULL;
if ((ret = __lock_vec(
- dbenv, txnp->txnid, DB_LOCK_ABORT, &request, 1, NULL)) != 0)
+ dbenv, txn->txnid, DB_LOCK_ABORT, &request, 1, NULL)) != 0)
return (__db_panic(dbenv, ret));
}
- if ((ret = __txn_undo(txnp)) != 0)
+undo: if ((ret = __txn_undo(txn)) != 0)
return (__db_panic(dbenv, ret));
/*
@@ -700,33 +840,34 @@ __txn_abort(txnp)
* then we log the abort so we know that this transaction
* was actually completed.
*/
- SET_LOG_FLAGS(dbenv, txnp, lflags);
+done: SET_LOG_FLAGS(dbenv, txn, 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), NULL)) != 0)
+ (ret = __txn_regop_log(dbenv, txn, &td->last_lsn,
+ lflags, TXN_ABORT, (int32_t)time(NULL), id, NULL)) != 0)
return (__db_panic(dbenv, ret));
/* __txn_end always panics if it errors, so pass the return along. */
- return (__txn_end(txnp, 0));
+ return (__txn_end(txn, 0));
}
/*
- * __txn_discard_pp --
+ * __txn_discard --
* Interface routine to TXN->discard.
*/
static int
-__txn_discard_pp(txnp, flags)
- DB_TXN *txnp;
+__txn_discard(txn, flags)
+ DB_TXN *txn;
u_int32_t flags;
{
DB_ENV *dbenv;
- int not_child, ret;
+ DB_THREAD_INFO *ip;
+ int 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);
+ dbenv = txn->mgrp->dbenv;
+
+ ENV_ENTER(dbenv, ip);
+ ret = __txn_discard_int(txn, flags);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -734,39 +875,40 @@ __txn_discard_pp(txnp, flags)
* __txn_discard --
* Free the per-process resources associated with this txn handle.
*
- * PUBLIC: int __txn_discard __P((DB_TXN *, u_int32_t flags));
+ * PUBLIC: int __txn_discard_int __P((DB_TXN *, u_int32_t flags));
*/
int
-__txn_discard(txnp, flags)
- DB_TXN *txnp;
+__txn_discard_int(txn, flags)
+ DB_TXN *txn;
u_int32_t flags;
{
DB_ENV *dbenv;
DB_TXN *freep;
- TXN_DETAIL *td;
+ DB_TXNMGR *mgr;
int ret;
COMPQUIET(flags, 0);
- dbenv = txnp->mgrp->dbenv;
+ mgr = txn->mgrp;
+ dbenv = mgr->dbenv;
freep = NULL;
PANIC_CHECK(dbenv);
- if ((ret = __txn_isvalid(txnp, &td, TXN_OP_DISCARD)) != 0)
+ if ((ret = __txn_isvalid(txn, TXN_OP_DISCARD)) != 0)
return (ret);
/* Should be no children. */
- DB_ASSERT(TAILQ_FIRST(&txnp->kids) == NULL);
+ DB_ASSERT(dbenv, TAILQ_FIRST(&txn->kids) == NULL);
/* Free the space. */
- MUTEX_THREAD_LOCK(dbenv, txnp->mgrp->mutexp);
- txnp->mgrp->n_discards++;
- if (F_ISSET(txnp, TXN_MALLOC)) {
- TAILQ_REMOVE(&txnp->mgrp->txn_chain, txnp, links);
- freep = txnp;
+ MUTEX_LOCK(dbenv, mgr->mutex);
+ mgr->n_discards++;
+ if (F_ISSET(txn, TXN_MALLOC)) {
+ TAILQ_REMOVE(&mgr->txn_chain, txn, links);
+ freep = txn;
}
- MUTEX_THREAD_UNLOCK(dbenv, txnp->mgrp->mutexp);
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
if (freep != NULL)
__os_free(dbenv, freep);
@@ -780,35 +922,41 @@ __txn_discard(txnp, flags)
* PUBLIC: int __txn_prepare __P((DB_TXN *, u_int8_t *));
*/
int
-__txn_prepare(txnp, gid)
- DB_TXN *txnp;
+__txn_prepare(txn, gid)
+ DB_TXN *txn;
u_int8_t *gid;
{
DBT list_dbt, xid;
DB_ENV *dbenv;
DB_LOCKREQ request;
+ DB_THREAD_INFO *ip;
DB_TXN *kid;
TXN_DETAIL *td;
u_int32_t lflags;
int ret;
- dbenv = txnp->mgrp->dbenv;
+ dbenv = txn->mgrp->dbenv;
+ td = txn->td;
PANIC_CHECK(dbenv);
- if ((ret = __txn_isvalid(txnp, &td, TXN_OP_PREPARE)) != 0)
+ if ((ret = __txn_isvalid(txn, TXN_OP_PREPARE)) != 0)
return (ret);
+ if (F_ISSET(txn, TXN_DEADLOCK))
+ return (__db_txn_deadlock_err(dbenv));
+
+ ENV_ENTER(dbenv, ip);
/* Commit any unresolved children. */
- while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
+ while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
if ((ret = __txn_commit(kid, DB_TXN_NOSYNC)) != 0)
- return (ret);
+ goto err;
#ifndef HAVE_FTRUNCATE
- if (txnp->txn_list != NULL &&
+ if (txn->txn_list != NULL &&
(ret = __db_do_the_limbo(dbenv,
- NULL, txnp, txnp->txn_list, LIMBO_PREPARE)) != 0)
- return (ret);
+ NULL, txn, txn->txn_list, LIMBO_PREPARE)) != 0)
+ goto err;
#endif
/*
* In XA, the global transaction ID in the txn_detail structure is
@@ -818,19 +966,19 @@ __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);
+ if ((ret = __txn_doevents(dbenv, txn, TXN_PREPARE, 1)) != 0)
+ goto err;
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)) {
+ !IS_ZERO_LSN(td->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);
+ txn->txnid, 0, &request, 1, NULL)) != 0)
+ goto err;
}
if (DBENV_LOGGING(dbenv)) {
@@ -843,24 +991,25 @@ __txn_prepare(txnp, gid)
xid.size = sizeof(td->xid);
xid.data = td->xid;
- lflags = DB_LOG_COMMIT | DB_LOG_PERM | DB_FLUSH;
- if ((ret = __txn_xa_regop_log(dbenv, txnp, &txnp->last_lsn,
+ lflags = DB_LOG_COMMIT | DB_FLUSH;
+ if ((ret = __txn_xa_regop_log(dbenv, txn, &td->last_lsn,
lflags, TXN_PREPARE, &xid, td->format, td->gtrid, td->bqual,
- &td->begin_lsn, request.obj)) != 0) {
- __db_err(dbenv, "DB_TXN->prepare: log_write failed %s",
- db_strerror(ret));
- }
+ &td->begin_lsn, request.obj)) != 0)
+ __db_err(
+ dbenv, ret, "DB_TXN->prepare: log_write failed");
+
if (request.obj != NULL && request.obj->data != NULL)
__os_free(dbenv, request.obj->data);
if (ret != 0)
- return (ret);
+ goto err;
}
- MUTEX_THREAD_LOCK(dbenv, txnp->mgrp->mutexp);
+ MUTEX_LOCK(dbenv, txn->mgrp->mutex);
td->status = TXN_PREPARED;
- MUTEX_THREAD_UNLOCK(dbenv, txnp->mgrp->mutexp);
- return (0);
+ MUTEX_UNLOCK(dbenv, txn->mgrp->mutex);
+err: ENV_LEAVE(dbenv, ip);
+ return (ret);
}
/*
@@ -870,67 +1019,149 @@ __txn_prepare(txnp, gid)
* PUBLIC: u_int32_t __txn_id __P((DB_TXN *));
*/
u_int32_t
-__txn_id(txnp)
- DB_TXN *txnp;
+__txn_id(txn)
+ DB_TXN *txn;
+{
+ return (txn->txnid);
+}
+
+/*
+ * __txn_get_name --
+ * Get a descriptive string from a transaction.
+ *
+ * PUBLIC: int __txn_get_name __P((DB_TXN *, const char **));
+ */
+int
+__txn_get_name(txn, namep)
+ DB_TXN *txn;
+ const char **namep;
{
- return (txnp->txnid);
+ *namep = txn->name;
+
+ return (0);
+}
+
+/*
+ * __txn_set_name --
+ * Set a descriptive string for a transaction.
+ *
+ * PUBLIC: int __txn_set_name __P((DB_TXN *, const char *));
+ */
+int
+__txn_set_name(txn, name)
+ DB_TXN *txn;
+ const char *name;
+{
+ DB_ENV *dbenv;
+ DB_THREAD_INFO *ip;
+ DB_TXNMGR *mgr;
+ TXN_DETAIL *td;
+ size_t len;
+ int ret;
+ char *p;
+
+ mgr = txn->mgrp;
+ dbenv = mgr->dbenv;
+ td = txn->td;
+ len = strlen(name) + 1;
+
+ if ((ret = __os_realloc(dbenv, len, &txn->name)) != 0)
+ return (ret);
+ memcpy(txn->name, name, len);
+
+ ENV_ENTER(dbenv, ip);
+ TXN_SYSTEM_LOCK(dbenv);
+ if (td->name != INVALID_ROFF) {
+ __db_shalloc_free(
+ &mgr->reginfo, R_ADDR(&mgr->reginfo, td->name));
+ td->name = INVALID_ROFF;
+ }
+ if ((ret = __db_shalloc(&mgr->reginfo, len, 0, &p)) != 0) {
+ TXN_SYSTEM_UNLOCK(dbenv);
+ __db_errx(dbenv,
+ "Unable to allocate memory for transaction name");
+
+ __os_free(dbenv, txn->name);
+ txn->name = NULL;
+
+ ENV_LEAVE(dbenv, ip);
+ return (ret);
+ }
+ TXN_SYSTEM_UNLOCK(dbenv);
+ td->name = R_OFFSET(&mgr->reginfo, p);
+ memcpy(p, name, len);
+
+#ifdef DIAGNOSTIC
+ /*
+ * If DIAGNOSTIC is set, map the name into the log so users can track
+ * operations through the log.
+ */
+ if (DBENV_LOGGING(dbenv))
+ (void)__log_printf(dbenv, txn,
+ "transaction %#lx named %s", (u_long)txn->txnid, name);
+#endif
+
+ ENV_LEAVE(dbenv, ip);
+ return (0);
}
/*
* __txn_set_timeout --
* DB_ENV->set_txn_timeout.
- *
* PUBLIC: int __txn_set_timeout __P((DB_TXN *, db_timeout_t, u_int32_t));
*/
int
-__txn_set_timeout(txnp, timeout, op)
- DB_TXN *txnp;
+__txn_set_timeout(txn, timeout, op)
+ DB_TXN *txn;
db_timeout_t timeout;
u_int32_t op;
{
+ DB_THREAD_INFO *ip;
+ int ret;
+
if (op != DB_SET_TXN_TIMEOUT && op != DB_SET_LOCK_TIMEOUT)
- return (__db_ferr(txnp->mgrp->dbenv, "DB_TXN->set_timeout", 0));
+ return (__db_ferr(txn->mgrp->dbenv, "DB_TXN->set_timeout", 0));
- return (__lock_set_timeout(
- txnp->mgrp->dbenv, txnp->txnid, timeout, op));
+ ENV_ENTER(txn->mgrp->dbenv, ip);
+ ret = __lock_set_timeout(
+ txn->mgrp->dbenv, txn->txnid, timeout, op);
+ ENV_LEAVE(txn->mgrp->dbenv, ip);
+ return (ret);
}
/*
* __txn_isvalid --
- * Return 0 if the txnp is reasonable, otherwise panic.
+ * Return 0 if the DB_TXN is reasonable, otherwise panic.
*/
static int
-__txn_isvalid(txnp, tdp, op)
- const DB_TXN *txnp;
- TXN_DETAIL **tdp;
+__txn_isvalid(txn, op)
+ const DB_TXN *txn;
txnop_t op;
{
DB_ENV *dbenv;
- DB_TXNMGR *mgrp;
+ DB_TXNMGR *mgr;
DB_TXNREGION *region;
- TXN_DETAIL *tp;
+ TXN_DETAIL *td;
- mgrp = txnp->mgrp;
- dbenv = mgrp->dbenv;
- region = mgrp->reginfo.primary;
+ mgr = txn->mgrp;
+ dbenv = mgr->dbenv;
+ region = mgr->reginfo.primary;
/* Check for recovery. */
- if (!F_ISSET(txnp, TXN_COMPENSATE) &&
+ if (!F_ISSET(txn, TXN_COMPENSATE) &&
F_ISSET(region, TXN_IN_RECOVERY)) {
- __db_err(dbenv, "operation not permitted during recovery");
+ __db_errx(dbenv, "operation not permitted during recovery");
goto err;
}
/* Check for live cursors. */
- if (txnp->cursors != 0) {
- __db_err(dbenv, "transaction has active cursors");
+ if (txn->cursors != 0) {
+ __db_errx(dbenv, "transaction has active cursors");
goto err;
}
/* Check transaction's state. */
- tp = R_ADDR(&mgrp->reginfo, txnp->off);
- if (tdp != NULL)
- *tdp = tp;
+ td = txn->td;
/* Handle any operation specific checks. */
switch (op) {
@@ -941,22 +1172,22 @@ __txn_isvalid(txnp, tdp, op)
*/
/* Transaction is already been reused. */
- if (txnp->txnid != tp->txnid)
+ if (txn->txnid != td->txnid)
return (0);
/*
* 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(dbenv, "not a restored transaction");
+ if (td->status != TXN_PREPARED &&
+ !F_ISSET(td, TXN_DTL_RESTORED)) {
+ __db_errx(dbenv, "not a restored transaction");
return (__db_panic(dbenv, EINVAL));
}
return (0);
case TXN_OP_PREPARE:
- if (txnp->parent != NULL) {
+ if (txn->parent != NULL) {
/*
* This is not fatal, because you could imagine an
* application that simply prepares everybody because
@@ -964,7 +1195,7 @@ __txn_isvalid(txnp, tdp, op)
* I'm not arguing this is good, but I could imagine
* someone doing it.
*/
- __db_err(dbenv,
+ __db_errx(dbenv,
"Prepare disallowed on child transactions");
return (EINVAL);
}
@@ -975,10 +1206,10 @@ __txn_isvalid(txnp, tdp, op)
break;
}
- switch (tp->status) {
+ switch (td->status) {
case TXN_PREPARED:
if (op == TXN_OP_PREPARE) {
- __db_err(dbenv, "transaction already prepared");
+ __db_errx(dbenv, "transaction already prepared");
/*
* Txn_prepare doesn't blow away the user handle, so
* in this case, give the user the opportunity to
@@ -992,8 +1223,8 @@ __txn_isvalid(txnp, tdp, op)
case TXN_ABORTED:
case TXN_COMMITTED:
default:
- __db_err(dbenv, "transaction already %s",
- tp->status == TXN_COMMITTED ? "committed" : "aborted");
+ __db_errx(dbenv, "transaction already %s",
+ td->status == TXN_COMMITTED ? "committed" : "aborted");
goto err;
}
@@ -1012,8 +1243,8 @@ err: /*
* Internal transaction end routine.
*/
static int
-__txn_end(txnp, is_commit)
- DB_TXN *txnp;
+__txn_end(txn, is_commit)
+ DB_TXN *txn;
int is_commit;
{
DB_ENV *dbenv;
@@ -1021,17 +1252,18 @@ __txn_end(txnp, is_commit)
DB_TXNLOGREC *lr;
DB_TXNMGR *mgr;
DB_TXNREGION *region;
- TXN_DETAIL *tp;
+ TXN_DETAIL *ptd, *td;
+ db_mutex_t mvcc_mtx;
int do_closefiles, ret;
- mgr = txnp->mgrp;
+ mgr = txn->mgrp;
dbenv = mgr->dbenv;
region = mgr->reginfo.primary;
do_closefiles = 0;
/* Process commit events. */
if ((ret = __txn_doevents(dbenv,
- txnp, is_commit ? TXN_COMMIT : TXN_ABORT, 0)) != 0)
+ txn, is_commit ? TXN_COMMIT : TXN_ABORT, 0)) != 0)
return (__db_panic(dbenv, ret));
/*
@@ -1044,25 +1276,55 @@ __txn_end(txnp, is_commit)
* so DB_LOCK_DEADLOCK is just as fatal as any other error.
*/
if (LOCKING_ON(dbenv)) {
- request.op = txnp->parent == NULL ||
+ request.op = txn->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)
+ txn->txnid, 0, &request, 1, NULL)) != 0)
return (__db_panic(dbenv, ret));
}
/* End the transaction. */
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
- tp = R_ADDR(&mgr->reginfo, txnp->off);
- SH_TAILQ_REMOVE(&region->active_txn, tp, links, __txn_detail);
- if (F_ISSET(tp, TXN_DTL_RESTORED)) {
+ td = txn->td;
+ td->status = is_commit ? TXN_COMMITTED : TXN_ABORTED;
+ SH_TAILQ_REMOVE(&region->active_txn, td, links, __txn_detail);
+ if (F_ISSET(td, TXN_DTL_RESTORED)) {
region->stat.st_nrestores--;
do_closefiles = region->stat.st_nrestores == 0;
}
- __db_shalloc_free(&mgr->reginfo, tp);
+ if (td->name != INVALID_ROFF) {
+ __db_shalloc_free(
+ &mgr->reginfo, R_ADDR(&mgr->reginfo, td->name));
+ td->name = INVALID_ROFF;
+ }
+ if (txn->parent != NULL) {
+ ptd = txn->parent->td;
+ SH_TAILQ_REMOVE(&ptd->kids, td, klinks, __txn_detail);
+ } else if ((mvcc_mtx = td->mvcc_mtx) != MUTEX_INVALID ||
+ td->mvcc_ref != 0) {
+ if (IS_MAX_LSN(td->visible_lsn))
+ td->visible_lsn = td->last_lsn;
+ MUTEX_LOCK(dbenv, mvcc_mtx);
+ if (td->mvcc_ref != 0) {
+ SH_TAILQ_INSERT_HEAD(&region->mvcc_txn,
+ td, links, __txn_detail);
+ if (++region->stat.st_nsnapshot >
+ region->stat.st_maxnsnapshot)
+ region->stat.st_maxnsnapshot =
+ region->stat.st_nsnapshot;
+ td = NULL;
+ }
+ MUTEX_UNLOCK(dbenv, mvcc_mtx);
+ if (td != NULL)
+ if ((ret = __mutex_free(dbenv, &td->mvcc_mtx)) != 0)
+ return (__db_panic(dbenv, ret));
+ }
+
+ if (td != NULL)
+ __db_shalloc_free(&mgr->reginfo, td);
if (is_commit)
region->stat.st_ncommits++;
@@ -1070,35 +1332,39 @@ __txn_end(txnp, is_commit)
region->stat.st_naborts++;
--region->stat.st_nactive;
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
/*
* The transaction cannot get more locks, remove its locker info,
* if any.
*/
if (LOCKING_ON(dbenv) && (ret =
- __lock_freefamilylocker(dbenv->lk_handle, txnp->txnid)) != 0)
+ __lock_freefamilylocker(dbenv->lk_handle, txn->txnid)) != 0)
return (__db_panic(dbenv, ret));
- if (txnp->parent != NULL)
- TAILQ_REMOVE(&txnp->parent->kids, txnp, klinks);
+ if (txn->parent != NULL)
+ TAILQ_REMOVE(&txn->parent->kids, txn, klinks);
/* Free the space. */
- while ((lr = STAILQ_FIRST(&txnp->logs)) != NULL) {
- STAILQ_REMOVE(&txnp->logs, lr, __txn_logrec, links);
+ while ((lr = STAILQ_FIRST(&txn->logs)) != NULL) {
+ STAILQ_REMOVE(&txn->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);
- MUTEX_THREAD_UNLOCK(dbenv, mgr->mutexp);
+ if (txn->name != NULL) {
+ __os_free(dbenv, txn->name);
+ txn->name = NULL;
+ }
+ if (F_ISSET(txn, TXN_MALLOC)) {
+ MUTEX_LOCK(dbenv, mgr->mutex);
+ TAILQ_REMOVE(&mgr->txn_chain, txn, links);
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
- __os_free(dbenv, txnp);
+ __os_free(dbenv, txn);
}
if (do_closefiles) {
- F_SET((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_SET(dbenv->lg_handle, DBLOG_RECOVER);
(void)__dbreg_close_files(dbenv);
- F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_CLR(dbenv->lg_handle, DBLOG_RECOVER);
mgr->n_discards = 0;
(void)__txn_checkpoint(dbenv, 0, 0, DB_FORCE);
}
@@ -1107,9 +1373,9 @@ __txn_end(txnp, is_commit)
}
static int
-__txn_dispatch_undo(dbenv, txnp, rdbt, key_lsn, txnlist)
+__txn_dispatch_undo(dbenv, txn, rdbt, key_lsn, txnlist)
DB_ENV *dbenv;
- DB_TXN *txnp;
+ DB_TXN *txn;
DBT *rdbt;
DB_LSN *key_lsn;
void *txnlist;
@@ -1118,14 +1384,12 @@ __txn_dispatch_undo(dbenv, txnp, rdbt, key_lsn, txnlist)
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);
+ F_SET(txn, TXN_CHILDCOMMIT);
+ ret = 0;
}
+ if (ret == 0 && F_ISSET(txn, TXN_CHILDCOMMIT) && IS_ZERO_LSN(*key_lsn))
+ ret = __db_txnlist_lsnget(dbenv, txnlist, key_lsn, 0);
return (ret);
}
@@ -1135,20 +1399,20 @@ __txn_dispatch_undo(dbenv, txnp, rdbt, key_lsn, txnlist)
* Undo the transaction with id txnid.
*/
static int
-__txn_undo(txnp)
- DB_TXN *txnp;
+__txn_undo(txn)
+ DB_TXN *txn;
{
DBT rdbt;
DB_ENV *dbenv;
DB_LOGC *logc;
DB_LSN key_lsn;
DB_TXN *ptxn;
+ DB_TXNHEAD *txnlist;
DB_TXNLOGREC *lr;
DB_TXNMGR *mgr;
int ret, t_ret;
- void *txnlist;
- mgr = txnp->mgrp;
+ mgr = txn->mgrp;
dbenv = mgr->dbenv;
logc = NULL;
txnlist = NULL;
@@ -1170,42 +1434,36 @@ __txn_undo(txnp)
* so that aborted pages are recovered when that transaction
* is committed or aborted.
*/
- for (ptxn = txnp->parent; ptxn != NULL && ptxn->parent != NULL;)
+ for (ptxn = txn->parent; ptxn != NULL && ptxn->parent != NULL;)
ptxn = ptxn->parent;
if (ptxn != NULL && ptxn->txn_list != NULL)
txnlist = ptxn->txn_list;
- else if (txnp->txn_list != NULL)
- txnlist = txnp->txn_list;
+ else if (txn->txn_list != NULL)
+ txnlist = txn->txn_list;
else if ((ret = __db_txnlist_init(dbenv, 0, 0, NULL, &txnlist)) != 0)
return (ret);
else if (ptxn != NULL)
ptxn->txn_list = txnlist;
- if (F_ISSET(txnp, TXN_CHILDCOMMIT) &&
- (ret = __db_txnlist_lsninit(dbenv, txnlist, &txnp->last_lsn)) != 0)
- return (ret);
-
/*
* 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)) {
+ STAILQ_FOREACH(lr, &txn->logs, links) {
rdbt.data = lr->data;
rdbt.size = 0;
LSN_NOT_LOGGED(key_lsn);
ret =
- __txn_dispatch_undo(dbenv, txnp, &rdbt, &key_lsn, txnlist);
+ __txn_dispatch_undo(dbenv, txn, &rdbt, &key_lsn, txnlist);
if (ret != 0) {
- __db_err(dbenv,
- "DB_TXN->abort: In-memory log undo failed: %s",
- db_strerror(ret));
+ __db_err(dbenv, ret,
+ "DB_TXN->abort: in-memory log undo failed");
goto err;
}
}
- key_lsn = txnp->last_lsn;
+ key_lsn = ((TXN_DETAIL *)txn->td)->last_lsn;
if (!IS_ZERO_LSN(key_lsn) &&
(ret = __log_cursor(dbenv, &logc)) != 0)
@@ -1218,20 +1476,19 @@ __txn_undo(txnp)
*/
if ((ret = __log_c_get(logc, &key_lsn, &rdbt, DB_SET)) == 0) {
ret = __txn_dispatch_undo(dbenv,
- txnp, &rdbt, &key_lsn, txnlist);
+ txn, &rdbt, &key_lsn, txnlist);
}
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));
+ __db_err(dbenv, ret,
+ "DB_TXN->abort: log undo failed for LSN: %lu %lu",
+ (u_long)key_lsn.file, (u_long)key_lsn.offset);
goto err;
}
}
#ifndef HAVE_FTRUNCATE
- ret = __db_do_the_limbo(dbenv, ptxn, txnp, txnlist, LIMBO_NORMAL);
+ ret = __db_do_the_limbo(dbenv, ptxn, txn, txnlist, LIMBO_NORMAL);
#endif
err: if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
@@ -1243,265 +1500,26 @@ err: if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
}
/*
- * __txn_checkpoint_pp --
- * DB_ENV->txn_checkpoint pre/post processing.
- *
- * PUBLIC: int __txn_checkpoint_pp
- * PUBLIC: __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
- */
-int
-__txn_checkpoint_pp(dbenv, kbytes, minutes, flags)
- DB_ENV *dbenv;
- u_int32_t kbytes, minutes, flags;
-{
- 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,
- * a checkpoint is a null-op.
- *
- * We permit txn_checkpoint, instead of just rendering it illegal,
- * so that an application can just let a checkpoint thread continue
- * to operate as it gets promoted or demoted between being a
- * master and a 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_db_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;
- REGENV *renv;
- REGINFO *infop;
- time_t last_ckp_time, now;
- u_int32_t bytes, gen, id, logflags, 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;
- infop = dbenv->reginfo;
- renv = infop->primary;
- /*
- * No mutex is needed as envid is read-only once it is set.
- */
- id = renv->envid;
-
- /*
- * The checkpoint LSN is an LSN such that all transactions begun before
- * it are complete. Our first guess (corrected below based on the list
- * of active transactions) is the last-written LSN.
- */
- __log_txn_lsn(dbenv, &ckp_lsn, &mbytes, &bytes);
-
- if (!LF_ISSET(DB_FORCE)) {
- /* Don't checkpoint a quiescent database. */
- 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;
-
- if (minutes != 0) {
- (void)time(&now);
-
- R_LOCK(dbenv, &mgr->reginfo);
- last_ckp_time = region->time_ckp;
- R_UNLOCK(dbenv, &mgr->reginfo);
-
- if (now - last_ckp_time >= (time_t)(minutes * 60))
- goto do_ckp;
- }
-
- /*
- * If we checked time and data and didn't go to checkpoint,
- * we're done.
- */
- if (minutes != 0 || kbytes != 0)
- return (0);
- }
-
-do_ckp:
- __txn_getactive(dbenv, &ckp_lsn);
-
- 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);
- }
-
- /*
- * Because we can't be a replication client here, and because
- * recovery (somewhat unusually) calls txn_checkpoint and expects
- * it to write a log message, LOGGING_ON is the correct macro here.
- */
- if (LOGGING_ON(dbenv)) {
- 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
- * the checkpoint. The records are certain to be at
- * or after ckp_lsn, but before the checkpoint record
- * itself, so they're sure to be included if we start
- * recovery from the ckp_lsn contained in this
- * checkpoint.
- */
- logflags = DB_LOG_PERM | DB_LOG_CHKPNT;
- if (!IS_RECOVERING(dbenv))
- logflags |= DB_FLUSH;
- if ((ret = __dbreg_log_files(dbenv)) != 0 ||
- (ret = __txn_ckp_log(dbenv, NULL, &ckp_lsn, logflags,
- &ckp_lsn, &last_ckp, (int32_t)time(NULL), id, gen)) != 0) {
- __db_err(dbenv,
- "txn_checkpoint: log failed at LSN [%ld %ld] %s",
- (long)ckp_lsn.file, (long)ckp_lsn.offset,
- db_strerror(ret));
- return (ret);
- }
-
- __txn_updateckp(dbenv, &ckp_lsn);
- }
- return (ret);
-}
-
-/*
- * __txn_getactive --
- * 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.
- *
- * We check both the file and offset for 0 since the lsn may be in
- * transition. If it is then we don't care about this txn becuase it
- * must be starting after we set the initial value of lsnp in the caller.
- * All txns must initalize their begin_lsn before writing to the log.
- *
- * PUBLIC: void __txn_getactive __P((DB_ENV *, DB_LSN *));
- */
-void
-__txn_getactive(dbenv, lsnp)
- DB_ENV *dbenv;
- DB_LSN *lsnp;
-{
- DB_TXNMGR *mgr;
- DB_TXNREGION *region;
- TXN_DETAIL *txnp;
-
- mgr = dbenv->tx_handle;
- region = mgr->reginfo.primary;
-
- R_LOCK(dbenv, &mgr->reginfo);
- for (txnp = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
- txnp != NULL;
- txnp = SH_TAILQ_NEXT(txnp, links, __txn_detail))
- if (txnp->begin_lsn.file != 0 &&
- txnp->begin_lsn.offset != 0 &&
- log_compare(&txnp->begin_lsn, lsnp) < 0)
- *lsnp = txnp->begin_lsn;
- R_UNLOCK(dbenv, &mgr->reginfo);
-}
-
-/*
- * __txn_getckp --
- * Get the LSN of the last transaction checkpoint.
- *
- * PUBLIC: int __txn_getckp __P((DB_ENV *, DB_LSN *));
- */
-int
-__txn_getckp(dbenv, lsnp)
- DB_ENV *dbenv;
- DB_LSN *lsnp;
-{
- DB_LSN lsn;
- DB_TXNMGR *mgr;
- DB_TXNREGION *region;
-
- mgr = dbenv->tx_handle;
- region = mgr->reginfo.primary;
-
- R_LOCK(dbenv, &mgr->reginfo);
- lsn = region->last_ckp;
- R_UNLOCK(dbenv, &mgr->reginfo);
-
- if (IS_ZERO_LSN(lsn))
- return (DB_NOTFOUND);
-
- *lsnp = lsn;
- return (0);
-}
-
-/*
* __txn_activekids --
* Return if this transaction has any active children.
*
* PUBLIC: int __txn_activekids __P((DB_ENV *, u_int32_t, DB_TXN *));
*/
int
-__txn_activekids(dbenv, rectype, txnp)
+__txn_activekids(dbenv, rectype, txn)
DB_ENV *dbenv;
u_int32_t rectype;
- DB_TXN *txnp;
+ DB_TXN *txn;
{
/*
* On a child commit, we know that there are children (i.e., the
* committing child at the least. In that case, skip this check.
*/
- if (F_ISSET(txnp, TXN_COMPENSATE) || rectype == DB___txn_child)
+ if (F_ISSET(txn, TXN_COMPENSATE) || rectype == DB___txn_child)
return (0);
- if (TAILQ_FIRST(&txnp->kids) != NULL) {
- __db_err(dbenv, "Child transaction is active");
+ if (TAILQ_FIRST(&txn->kids) != NULL) {
+ __db_errx(dbenv, "Child transaction is active");
return (EPERM);
}
return (0);
@@ -1520,8 +1538,8 @@ __txn_force_abort(dbenv, buffer)
u_int8_t *buffer;
{
DB_CIPHER *db_cipher;
- HDR *hdr;
- u_int32_t hdrlen, offset, opcode, sum_len;
+ HDR hdr, *hdrp;
+ u_int32_t offset, opcode, sum_len;
u_int8_t *bp, *key, chksum[DB_MAC_KEY];
size_t hdrsize, rec_len;
int ret;
@@ -1536,16 +1554,17 @@ __txn_force_abort(dbenv, buffer)
*/
hdrsize = CRYPTO_ON(dbenv) ? HDR_CRYPTO_SZ : HDR_NORMAL_SZ;
- hdr = (HDR *)buffer;
- memcpy(&hdrlen, buffer + SSZ(HDR, len), sizeof(hdr->len));
- rec_len = hdrlen - hdrsize;
+ hdrp = (HDR *)buffer;
+ memcpy(&hdr.prev, buffer + SSZ(HDR, prev), sizeof(hdr.prev));
+ memcpy(&hdr.len, buffer + SSZ(HDR, len), sizeof(hdr.len));
+ rec_len = hdr.len - hdrsize;
offset = sizeof(u_int32_t) + sizeof(u_int32_t) + sizeof(DB_LSN);
if (CRYPTO_ON(dbenv)) {
key = db_cipher->mac_key;
sum_len = DB_MAC_KEY;
if ((ret = db_cipher->decrypt(dbenv, db_cipher->data,
- &hdr->iv[0], buffer + hdrsize, rec_len)) != 0)
+ &hdrp->iv[0], buffer + hdrsize, rec_len)) != 0)
return (__db_panic(dbenv, ret));
} else {
key = NULL;
@@ -1557,10 +1576,10 @@ __txn_force_abort(dbenv, buffer)
if (CRYPTO_ON(dbenv) &&
(ret = db_cipher->encrypt(dbenv,
- db_cipher->data, &hdr->iv[0], buffer + hdrsize, rec_len)) != 0)
+ db_cipher->data, &hdrp->iv[0], buffer + hdrsize, rec_len)) != 0)
return (__db_panic(dbenv, ret));
- __db_chksum(buffer + hdrsize, rec_len, key, chksum);
+ __db_chksum(&hdr, buffer + hdrsize, rec_len, key, chksum);
memcpy(buffer + SSZA(HDR, chksum), chksum, sum_len);
return (0);
@@ -1582,16 +1601,16 @@ __txn_preclose(dbenv)
DB_TXNREGION *region;
int do_closefiles, ret;
- mgr = (DB_TXNMGR *)dbenv->tx_handle;
+ mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
do_closefiles = 0;
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
if (region != NULL &&
region->stat.st_nrestores <= mgr->n_discards &&
mgr->n_discards != 0)
do_closefiles = 1;
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
if (do_closefiles) {
/*
@@ -1599,9 +1618,9 @@ __txn_preclose(dbenv)
* files so they do not create additional log records
* that will confuse future recoveries.
*/
- F_SET((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_SET(dbenv->lg_handle, DBLOG_RECOVER);
ret = __dbreg_close_files(dbenv);
- F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_CLR(dbenv->lg_handle, DBLOG_RECOVER);
} else
ret = 0;
@@ -1621,64 +1640,33 @@ __txn_reset(dbenv)
DB_LSN scrap;
DB_TXNREGION *region;
- region = ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary;
+ region = dbenv->tx_handle->reginfo.primary;
region->last_txnid = TXN_MINIMUM;
- DB_ASSERT(LOGGING_ON(dbenv));
+ DB_ASSERT(dbenv, LOGGING_ON(dbenv));
return (__txn_recycle_log(dbenv,
NULL, &scrap, 0, TXN_MINIMUM, TXN_MAXIMUM));
}
/*
- * __txn_updateckp --
- * Update the last_ckp field in the transaction region. This happens
- * at the end of a normal checkpoint and also when a replication client
- * receives a checkpoint record.
- *
- * PUBLIC: void __txn_updateckp __P((DB_ENV *, DB_LSN *));
- */
-void
-__txn_updateckp(dbenv, lsnp)
- DB_ENV *dbenv;
- DB_LSN *lsnp;
-{
- DB_TXNMGR *mgr;
- DB_TXNREGION *region;
-
- mgr = dbenv->tx_handle;
- region = mgr->reginfo.primary;
-
- /*
- * We want to make sure last_ckp only moves forward; since we drop
- * locks above and in log_put, it's possible for two calls to
- * __txn_ckp_log to finish in a different order from how they were
- * called.
- */
- R_LOCK(dbenv, &mgr->reginfo);
- if (log_compare(&region->last_ckp, lsnp) < 0) {
- region->last_ckp = *lsnp;
- (void)time(&region->time_ckp);
- }
- R_UNLOCK(dbenv, &mgr->reginfo);
-}
-
-/*
- * txn_set_begin_lsnp --
+ * txn_set_txn_lsnp --
* Set the pointer to the begin_lsn field if that field is zero.
+ * Set the pointer to the last_lsn field.
*/
static void
-__txn_set_begin_lsnp(txn, rlsnp)
+__txn_set_txn_lsnp(txn, blsnp, llsnp)
DB_TXN *txn;
- DB_LSN **rlsnp;
+ DB_LSN **blsnp, **llsnp;
{
- DB_LSN *lsnp;
TXN_DETAIL *td;
- td = R_ADDR(&txn->mgrp->reginfo, txn->off);
- while (td->parent != INVALID_ROFF)
- td = R_ADDR(&txn->mgrp->reginfo, td->parent);
+ td = txn->td;
+ *llsnp = &td->last_lsn;
+
+ while (txn->parent != NULL)
+ txn = txn->parent;
- lsnp = &td->begin_lsn;
- if (IS_ZERO_LSN(*lsnp))
- *rlsnp = lsnp;
+ td = txn->td;
+ if (IS_ZERO_LSN(td->begin_lsn))
+ *blsnp = &td->begin_lsn;
}
diff --git a/db/txn/txn.src b/db/txn/txn.src
index 34bd8bd0b..0cd2bbcaa 100644
--- a/db/txn/txn.src
+++ b/db/txn/txn.src
@@ -1,39 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn.src,v 11.33 2004/07/27 12:35:19 bostic Exp $
+ * $Id: txn.src,v 12.7 2006/08/24 14:46:53 bostic Exp $
*/
PREFIX __txn
DBPRIVATE
-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 <string.h>
-INCLUDE #endif
-INCLUDE
INCLUDE #include "db_int.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/db_shash.h"
INCLUDE #include "dbinc/lock.h"
INCLUDE #include "dbinc/log.h"
INCLUDE #include "dbinc/txn.h"
@@ -44,10 +25,19 @@ INCLUDE
* 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
* either changes the Epoch or has a 64-bit offset.
+ * envid:
+ * Environment ID of this operation (4.4+).
*/
-BEGIN regop 10
+BEGIN_COMPAT regop 42 10
+ARG opcode u_int32_t ld
+TIME timestamp int32_t ld
+LOCKS locks DBT s
+END
+
+BEGIN regop 44 10
ARG opcode u_int32_t ld
TIME timestamp int32_t ld
+ARG envid u_int32_t ld
LOCKS locks DBT s
END
@@ -65,11 +55,18 @@ END
* timestamp:
* See comment in commit about timestamps.
* envid:
- * Environment ID of this checkpoint.
+ * Environment ID of this checkpoint (4.3+).
* rep_gen:
* Persistent replication generation number.
*/
-BEGIN ckp 11
+BEGIN_COMPAT ckp 42 11
+POINTER ckp_lsn DB_LSN * lu
+POINTER last_ckp DB_LSN * lu
+TIME timestamp int32_t ld
+ARG rep_gen u_int32_t ld
+END
+
+BEGIN ckp 43 11
POINTER ckp_lsn DB_LSN * lu
POINTER last_ckp DB_LSN * lu
TIME timestamp int32_t ld
@@ -83,7 +80,7 @@ END
* the transaction ID of the child committing and the c_lsn is
* the last LSN of the child's log trail.
*/
-BEGIN child 12
+BEGIN child 42 12
ARG child u_int32_t lx
POINTER c_lsn DB_LSN * lu
END
@@ -92,7 +89,7 @@ END
/*
* This is the standard log operation for prepare.
*/
-BEGIN xa_regop 13
+BEGIN xa_regop 42 13
ARG opcode u_int32_t lu
DBT xid DBT s
ARG formatID int32_t ld
@@ -105,7 +102,7 @@ END
/*
* Log the fact that we are recycling txnids.
*/
-BEGIN recycle 14
+BEGIN recycle 42 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 c5afa0cdb..3a8cda986 100644
--- a/db/txn/txn_auto.c
+++ b/db/txn/txn_auto.c
@@ -2,47 +2,78 @@
#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 /* HAVE_SYS_TIME_H */
-#endif /* TIME_WITH SYS_TIME */
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
#include "dbinc/db_dispatch.h"
#include "dbinc/db_am.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
/*
+ * PUBLIC: int __txn_regop_42_read __P((DB_ENV *, void *,
+ * PUBLIC: __txn_regop_42_args **));
+ */
+int
+__txn_regop_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __txn_regop_42_args **argpp;
+{
+ __txn_regop_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_regop_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ 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_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
- * PUBLIC: u_int32_t, u_int32_t, int32_t, const DBT *));
+ * PUBLIC: u_int32_t, u_int32_t, int32_t, u_int32_t, const DBT *));
*/
int
-__txn_regop_log(dbenv, txnid, ret_lsnp, flags,
- opcode, timestamp, locks)
+__txn_regop_log(dbenv, txnp, ret_lsnp, flags,
+ opcode, timestamp, envid, locks)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
int32_t timestamp;
+ u_int32_t envid;
const DBT *locks;
{
DBT logrec;
@@ -62,34 +93,36 @@ __txn_regop_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ sizeof(u_int32_t)
+ sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (locks == NULL ? 0 : locks->size);
if (CRYPTO_ON(dbenv)) {
npad =
@@ -97,7 +130,7 @@ __txn_regop_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -137,6 +170,10 @@ __txn_regop_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
+ uinttmp = (u_int32_t)envid;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (locks == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -148,12 +185,13 @@ __txn_regop_log(dbenv, txnid, ret_lsnp, flags,
bp += locks->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -172,20 +210,21 @@ __txn_regop_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__txn_regop_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -209,13 +248,14 @@ __txn_regop_read(dbenv, recbuf, argpp)
sizeof(__txn_regop_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -228,6 +268,10 @@ __txn_regop_read(dbenv, recbuf, argpp)
argp->timestamp = (int32_t)uinttmp;
bp += sizeof(uinttmp);
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->envid = (u_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);
@@ -239,14 +283,62 @@ __txn_regop_read(dbenv, recbuf, argpp)
}
/*
+ * PUBLIC: int __txn_ckp_42_read __P((DB_ENV *, void *, __txn_ckp_42_args **));
+ */
+int
+__txn_ckp_42_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __txn_ckp_42_args **argpp;
+{
+ __txn_ckp_42_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_ckp_42_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ bp = recbuf;
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
+
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->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->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_ckp_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
* PUBLIC: u_int32_t, DB_LSN *, DB_LSN *, int32_t, u_int32_t, u_int32_t));
*/
int
-__txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
+__txn_ckp_log(dbenv, txnp, ret_lsnp, flags,
ckp_lsn, last_ckp, timestamp, envid, rep_gen)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
DB_LSN * ckp_lsn;
@@ -272,29 +364,30 @@ __txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -309,7 +402,7 @@ __txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -365,12 +458,13 @@ __txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -389,20 +483,21 @@ __txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__txn_ckp_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -426,13 +521,14 @@ __txn_ckp_read(dbenv, recbuf, argpp)
sizeof(__txn_ckp_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -464,10 +560,10 @@ __txn_ckp_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, u_int32_t, DB_LSN *));
*/
int
-__txn_child_log(dbenv, txnid, ret_lsnp, flags,
+__txn_child_log(dbenv, txnp, ret_lsnp, flags,
child, c_lsn)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t child;
@@ -490,29 +586,30 @@ __txn_child_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -524,7 +621,7 @@ __txn_child_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -566,12 +663,13 @@ __txn_child_log(dbenv, txnid, ret_lsnp, flags,
memset(bp, 0, sizeof(*c_lsn));
bp += sizeof(*c_lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -590,20 +688,21 @@ __txn_child_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__txn_child_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -627,13 +726,14 @@ __txn_child_read(dbenv, recbuf, argpp)
sizeof(__txn_child_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -655,11 +755,11 @@ __txn_child_read(dbenv, recbuf, argpp)
* PUBLIC: DB_LSN *, const DBT *));
*/
int
-__txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
+__txn_xa_regop_log(dbenv, txnp, ret_lsnp, flags,
opcode, xid, formatID, gtrid, bqual, begin_lsn,
locks)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
@@ -687,29 +787,30 @@ __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -726,7 +827,7 @@ __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -802,12 +903,13 @@ __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
bp += locks->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -826,20 +928,21 @@ __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__txn_xa_regop_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -864,13 +967,14 @@ __txn_xa_regop_read(dbenv, recbuf, argpp)
sizeof(__txn_xa_regop_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
@@ -915,10 +1019,10 @@ __txn_xa_regop_read(dbenv, recbuf, argpp)
* PUBLIC: u_int32_t, u_int32_t, u_int32_t));
*/
int
-__txn_recycle_log(dbenv, txnid, ret_lsnp, flags,
+__txn_recycle_log(dbenv, txnp, ret_lsnp, flags,
min, max)
DB_ENV *dbenv;
- DB_TXN *txnid;
+ DB_TXN *txnp;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t min;
@@ -941,29 +1045,30 @@ __txn_recycle_log(dbenv, txnid, ret_lsnp, flags,
ret = 0;
if (LF_ISSET(DB_LOG_NOT_DURABLE)) {
- if (txnid == NULL)
+ if (txnp == NULL)
+ return (0);
+ if (txnp == NULL)
return (0);
is_durable = 0;
} else
is_durable = 1;
- if (txnid == NULL) {
+ if (txnp == NULL) {
txn_num = 0;
lsnp = &null_lsn;
null_lsn.file = null_lsn.offset = 0;
} else {
- if (TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ if (TAILQ_FIRST(&txnp->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnp)) != 0)
return (ret);
/*
* We need to assign begin_lsn while holding region mutex.
* That assignment is done inside the DbEnv->log_put call,
* so pass in the appropriate memory location to be filled
* in by the log_put code.
- */
- DB_SET_BEGIN_LSNP(txnid, &rlsnp);
- txn_num = txnid->txnid;
- lsnp = &txnid->last_lsn;
+ */
+ DB_SET_TXN_LSNP(txnp, &rlsnp, &lsnp);
+ txn_num = txnp->txnid;
}
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
@@ -975,7 +1080,7 @@ __txn_recycle_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret =
__os_malloc(dbenv, logrec.size, &logrec.data)) != 0)
return (ret);
@@ -1015,12 +1120,13 @@ __txn_recycle_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+ DB_ASSERT(dbenv,
+ (u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- if (is_durable || txnid == NULL) {
+ if (is_durable || txnp == NULL) {
if ((ret = __log_put(dbenv, rlsnp,(DBT *)&logrec,
- flags | DB_LOG_NOCOPY)) == 0 && txnid != NULL) {
- txnid->last_lsn = *rlsnp;
+ flags | DB_LOG_NOCOPY)) == 0 && txnp != NULL) {
+ *lsnp = *rlsnp;
if (rlsnp != ret_lsnp)
*ret_lsnp = *rlsnp;
}
@@ -1039,20 +1145,21 @@ __txn_recycle_log(dbenv, txnid, ret_lsnp, flags,
#else
ret = 0;
#endif
- STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+ STAILQ_INSERT_HEAD(&txnp->logs, lr, links);
+ F_SET((TXN_DETAIL *)txnp->td, TXN_DTL_INMEMORY);
LSN_NOT_LOGGED(*ret_lsnp);
}
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__txn_recycle_print(dbenv,
- (DBT *)&logrec, ret_lsnp, NULL, NULL);
+ (DBT *)&logrec, ret_lsnp, DB_TXN_PRINT, NULL);
#endif
#ifdef DIAGNOSTIC
__os_free(dbenv, logrec.data);
#else
- if (is_durable || txnid == NULL)
+ if (is_durable || txnp == NULL)
__os_free(dbenv, logrec.data);
#endif
return (ret);
@@ -1077,13 +1184,14 @@ __txn_recycle_read(dbenv, recbuf, argpp)
sizeof(__txn_recycle_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
bp = recbuf;
- argp->txnid = (DB_TXN *)&argp[1];
+ argp->txnp = (DB_TXN *)&argp[1];
+ memset(argp->txnp, 0, sizeof(DB_TXN));
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->txnp->txnid, bp, sizeof(argp->txnp->txnid));
+ bp += sizeof(argp->txnp->txnid);
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
diff --git a/db/txn/txn_autop.c b/db/txn/txn_autop.c
index dbcf61b9d..c993e0fad 100644
--- a/db/txn/txn_autop.c
+++ b/db/txn/txn_autop.c
@@ -2,35 +2,62 @@
#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 /* HAVE_SYS_TIME_H */
-#endif /* TIME_WITH SYS_TIME */
-
-#include <ctype.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/db_page.h"
#include "dbinc/db_dispatch.h"
#include "dbinc/db_am.h"
-#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
/*
+ * PUBLIC: int __txn_regop_42_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__txn_regop_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __txn_regop_42_args *argp;
+ struct tm *lt;
+ time_t timeval;
+ char time_buf[CTIME_BUFLEN];
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __txn_regop_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__txn_regop_42%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (void)printf("\topcode: %ld\n", (long)argp->opcode);
+ timeval = (time_t)argp->timestamp;
+ lt = localtime(&timeval);
+ (void)printf(
+ "\ttimestamp: %ld (%.24s, 20%02lu%02lu%02lu%02lu%02lu.%02lu)\n",
+ (long)argp->timestamp, __db_ctime(&timeval, time_buf),
+ (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: \n");
+ __lock_list_print(dbenv, &argp->locks);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+ return (0);
+}
+
+/*
* PUBLIC: int __txn_regop_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -45,31 +72,31 @@ __txn_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
__txn_regop_args *argp;
struct tm *lt;
time_t timeval;
+ char time_buf[CTIME_BUFLEN];
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __txn_regop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__txn_regop%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__txn_regop%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\topcode: %ld\n", (long)argp->opcode);
timeval = (time_t)argp->timestamp;
lt = localtime(&timeval);
(void)printf(
"\ttimestamp: %ld (%.24s, 20%02lu%02lu%02lu%02lu%02lu.%02lu)\n",
- (long)argp->timestamp, ctime(&timeval),
+ (long)argp->timestamp, __db_ctime(&timeval, time_buf),
(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("\tenvid: %ld\n", (long)argp->envid);
(void)printf("\tlocks: \n");
__lock_list_print(dbenv, &argp->locks);
(void)printf("\n");
@@ -78,6 +105,54 @@ __txn_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
}
/*
+ * PUBLIC: int __txn_ckp_42_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__txn_ckp_42_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __txn_ckp_42_args *argp;
+ struct tm *lt;
+ time_t timeval;
+ char time_buf[CTIME_BUFLEN];
+ int ret;
+
+ notused2 = DB_TXN_PRINT;
+ notused3 = NULL;
+
+ if ((ret = __txn_ckp_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__txn_ckp_42%s: rec: %lu txnp %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->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
+ (void)printf("\tckp_lsn: [%lu][%lu]\n",
+ (u_long)argp->ckp_lsn.file, (u_long)argp->ckp_lsn.offset);
+ (void)printf("\tlast_ckp: [%lu][%lu]\n",
+ (u_long)argp->last_ckp.file, (u_long)argp->last_ckp.offset);
+ timeval = (time_t)argp->timestamp;
+ lt = localtime(&timeval);
+ (void)printf(
+ "\ttimestamp: %ld (%.24s, 20%02lu%02lu%02lu%02lu%02lu.%02lu)\n",
+ (long)argp->timestamp, __db_ctime(&timeval, time_buf),
+ (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_print __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
*/
@@ -92,22 +167,21 @@ __txn_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
__txn_ckp_args *argp;
struct tm *lt;
time_t timeval;
+ char time_buf[CTIME_BUFLEN];
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __txn_ckp_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__txn_ckp%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__txn_ckp%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tckp_lsn: [%lu][%lu]\n",
(u_long)argp->ckp_lsn.file, (u_long)argp->ckp_lsn.offset);
(void)printf("\tlast_ckp: [%lu][%lu]\n",
@@ -116,7 +190,7 @@ __txn_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
lt = localtime(&timeval);
(void)printf(
"\ttimestamp: %ld (%.24s, 20%02lu%02lu%02lu%02lu%02lu.%02lu)\n",
- (long)argp->timestamp, ctime(&timeval),
+ (long)argp->timestamp, __db_ctime(&timeval, time_buf),
(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);
@@ -142,20 +216,18 @@ __txn_child_print(dbenv, dbtp, lsnp, notused2, notused3)
__txn_child_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __txn_child_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__txn_child%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__txn_child%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(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);
@@ -181,20 +253,18 @@ __txn_xa_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
int ch;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __txn_xa_regop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__txn_xa_regop%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__txn_xa_regop%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\topcode: %lu\n", (u_long)argp->opcode);
(void)printf("\txid: ");
for (i = 0; i < argp->xid.size; i++) {
@@ -229,20 +299,18 @@ __txn_recycle_print(dbenv, dbtp, lsnp, notused2, notused3)
__txn_recycle_args *argp;
int ret;
- notused2 = DB_TXN_ABORT;
+ notused2 = DB_TXN_PRINT;
notused3 = NULL;
if ((ret = __txn_recycle_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__txn_recycle%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
+ "[%lu][%lu]__txn_recycle%s: rec: %lu txnp %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);
+ (u_long)argp->txnp->txnid,
+ (u_long)argp->prev_lsn.file, (u_long)argp->prev_lsn.offset);
(void)printf("\tmin: %u\n", argp->min);
(void)printf("\tmax: %u\n", argp->max);
(void)printf("\n");
diff --git a/db/txn/txn_chkpt.c b/db/txn/txn_chkpt.c
new file mode 100644
index 000000000..59ddf5509
--- /dev/null
+++ b/db/txn/txn_chkpt.c
@@ -0,0 +1,329 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
+ */
+/*
+ * Copyright (c) 1995, 1996
+ * The President and Fellows of Harvard University. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Margo Seltzer.
+ *
+ * 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.
+ *
+ * $Id: txn_chkpt.c,v 12.27 2006/08/24 14:46:53 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
+
+/*
+ * __txn_checkpoint_pp --
+ * DB_ENV->txn_checkpoint pre/post processing.
+ *
+ * PUBLIC: int __txn_checkpoint_pp
+ * PUBLIC: __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
+ */
+int
+__txn_checkpoint_pp(dbenv, kbytes, minutes, flags)
+ DB_ENV *dbenv;
+ u_int32_t kbytes, minutes, flags;
+{
+ DB_THREAD_INFO *ip;
+ int 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,
+ * a checkpoint is a null-op.
+ *
+ * We permit txn_checkpoint, instead of just rendering it illegal,
+ * so that an application can just let a checkpoint thread continue
+ * to operate as it gets promoted or demoted between being a
+ * master and a client.
+ */
+ if (IS_REP_CLIENT(dbenv))
+ return (0);
+
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv,
+ (__txn_checkpoint(dbenv, kbytes, minutes, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
+ 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;
+ REGENV *renv;
+ REGINFO *infop;
+ time_t last_ckp_time, now;
+ u_int32_t bytes, gen, id, logflags, 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, ret,
+ "txn_checkpoint: failed to flush the buffer cache");
+ return (ret);
+ }
+ return (0);
+ }
+
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ /*
+ * No mutex is needed as envid is read-only once it is set.
+ */
+ id = renv->envid;
+
+ /*
+ * The checkpoint LSN is an LSN such that all transactions begun before
+ * it are complete. Our first guess (corrected below based on the list
+ * of active transactions) is the last-written LSN.
+ */
+ if ((ret = __log_current_lsn(dbenv, &ckp_lsn, &mbytes, &bytes)) != 0)
+ return (ret);
+
+ if (!LF_ISSET(DB_FORCE)) {
+ /* Don't checkpoint a quiescent database. */
+ 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;
+
+ if (minutes != 0) {
+ (void)time(&now);
+
+ TXN_SYSTEM_LOCK(dbenv);
+ last_ckp_time = region->time_ckp;
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ if (now - last_ckp_time >= (time_t)(minutes * 60))
+ goto do_ckp;
+ }
+
+ /*
+ * If we checked time and data and didn't go to checkpoint,
+ * we're done.
+ */
+ if (minutes != 0 || kbytes != 0)
+ return (0);
+ }
+
+ /*
+ * We must single thread checkpoints otherwise the chk_lsn may get out
+ * of order. We need to capture the start of the earliest currently
+ * active transaction (chk_lsn) and then flush all buffers. While
+ * doing this we we could then be overtaken by another checkpoint that
+ * sees a later chk_lsn but competes first. An archive process could
+ * then remove a log this checkpoint depends on.
+ */
+do_ckp: MUTEX_LOCK(dbenv, region->mtx_ckp);
+ if ((ret = __txn_getactive(dbenv, &ckp_lsn)) != 0)
+ goto err;
+
+ if (MPOOL_ON(dbenv) && (ret = __memp_sync(dbenv, NULL)) != 0) {
+ __db_err(dbenv, ret,
+ "txn_checkpoint: failed to flush the buffer cache");
+ goto err;
+ }
+
+ /*
+ * Because we can't be a replication client here, and because
+ * recovery (somewhat unusually) calls txn_checkpoint and expects
+ * it to write a log message, LOGGING_ON is the correct macro here.
+ */
+ if (LOGGING_ON(dbenv)) {
+ TXN_SYSTEM_LOCK(dbenv);
+ last_ckp = region->last_ckp;
+ TXN_SYSTEM_UNLOCK(dbenv);
+ if (REP_ON(dbenv) && (ret = __rep_get_gen(dbenv, &gen)) != 0)
+ goto err;
+
+ /*
+ * Put out records for the open files before we log
+ * the checkpoint. The records are certain to be at
+ * or after ckp_lsn, but before the checkpoint record
+ * itself, so they're sure to be included if we start
+ * recovery from the ckp_lsn contained in this
+ * checkpoint.
+ */
+ logflags = DB_LOG_CHKPNT;
+ if (!IS_RECOVERING(dbenv))
+ logflags |= DB_FLUSH;
+ if ((ret = __dbreg_log_files(dbenv)) != 0 ||
+ (ret = __txn_ckp_log(dbenv, NULL, &ckp_lsn, logflags,
+ &ckp_lsn, &last_ckp, (int32_t)time(NULL), id, gen)) != 0) {
+ __db_err(dbenv, ret,
+ "txn_checkpoint: log failed at LSN [%ld %ld]",
+ (long)ckp_lsn.file, (long)ckp_lsn.offset);
+ goto err;
+ }
+
+ if ((ret = __txn_updateckp(dbenv, &ckp_lsn)) != 0)
+ goto err;
+ }
+
+err: MUTEX_UNLOCK(dbenv, region->mtx_ckp);
+ return (ret);
+}
+
+/*
+ * __txn_getactive --
+ * 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.
+ *
+ * We check both the file and offset for 0 since the lsn may be in
+ * transition. If it is then we don't care about this txn because it
+ * must be starting after we set the initial value of lsnp in the caller.
+ * All txns must initalize their begin_lsn before writing to the log.
+ *
+ * PUBLIC: int __txn_getactive __P((DB_ENV *, DB_LSN *));
+ */
+int
+__txn_getactive(dbenv, lsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+{
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ TXN_DETAIL *td;
+
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
+ TXN_SYSTEM_LOCK(dbenv);
+ SH_TAILQ_FOREACH(td, &region->active_txn, links, __txn_detail)
+ if (td->begin_lsn.file != 0 &&
+ td->begin_lsn.offset != 0 &&
+ LOG_COMPARE(&td->begin_lsn, lsnp) < 0)
+ *lsnp = td->begin_lsn;
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
+}
+
+/*
+ * __txn_getckp --
+ * Get the LSN of the last transaction checkpoint.
+ *
+ * PUBLIC: int __txn_getckp __P((DB_ENV *, DB_LSN *));
+ */
+int
+__txn_getckp(dbenv, lsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+{
+ DB_LSN lsn;
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
+ TXN_SYSTEM_LOCK(dbenv);
+ lsn = region->last_ckp;
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ if (IS_ZERO_LSN(lsn))
+ return (DB_NOTFOUND);
+
+ *lsnp = lsn;
+ return (0);
+}
+
+/*
+ * __txn_updateckp --
+ * Update the last_ckp field in the transaction region. This happens
+ * at the end of a normal checkpoint and also when a replication client
+ * receives a checkpoint record.
+ *
+ * PUBLIC: int __txn_updateckp __P((DB_ENV *, DB_LSN *));
+ */
+int
+__txn_updateckp(dbenv, lsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+{
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
+ /*
+ * We want to make sure last_ckp only moves forward; since we drop
+ * locks above and in log_put, it's possible for two calls to
+ * __txn_ckp_log to finish in a different order from how they were
+ * called.
+ */
+ TXN_SYSTEM_LOCK(dbenv);
+ if (LOG_COMPARE(&region->last_ckp, lsnp) < 0) {
+ region->last_ckp = *lsnp;
+ (void)time(&region->time_ckp);
+ }
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
+}
diff --git a/db/txn/txn_failchk.c b/db/txn/txn_failchk.c
new file mode 100644
index 000000000..4301fdab8
--- /dev/null
+++ b/db/txn/txn_failchk.c
@@ -0,0 +1,96 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2005-2006
+ * Oracle Corporation. All rights reserved.
+ *
+ * $Id: txn_failchk.c,v 12.6 2006/08/24 14:46:53 bostic Exp $
+ */
+
+#include "db_config.h"
+
+#include "db_int.h"
+#include "dbinc/txn.h"
+
+/*
+ * __txn_failchk --
+ * Check for transactions started by dead threads of control.
+ *
+ * PUBLIC: int __txn_failchk __P((DB_ENV *));
+ */
+int
+__txn_failchk(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_TXN *ktxn, *txn;
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ TXN_DETAIL *ktd, *td;
+ db_threadid_t tid;
+ int ret;
+ char buf[DB_THREADID_STRLEN];
+ pid_t pid;
+
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
+retry: TXN_SYSTEM_LOCK(dbenv);
+
+ SH_TAILQ_FOREACH(td, &region->active_txn, links, __txn_detail) {
+ /*
+ * If this is a child transaction, skip it.
+ * The parent will take care of it.
+ */
+ if (td->parent != INVALID_ROFF)
+ continue;
+ /*
+ * If the txn is prepared, then it does not matter
+ * what the state of the thread is.
+ */
+ if (td->status == TXN_PREPARED)
+ continue;
+
+ /* If the thread is still alive, it's not a problem. */
+ if (dbenv->is_alive(dbenv, td->pid, td->tid, 0))
+ continue;
+
+ if (F_ISSET(td, TXN_DTL_INMEMORY))
+ return (__db_failed(dbenv,
+ "Transaction has in memory logs",
+ td->pid, td->tid));
+
+ /* Abort the transaction. */
+ TXN_SYSTEM_UNLOCK(dbenv);
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_TXN), &txn)) != 0)
+ return (ret);
+ __txn_continue(dbenv, txn, td);
+ F_SET(txn, TXN_MALLOC);
+ SH_TAILQ_FOREACH(ktd, &td->kids, klinks, __txn_detail) {
+ if (F_ISSET(ktd, TXN_DTL_INMEMORY))
+ return (__db_failed(dbenv,
+ "Transaction has in memory logs",
+ td->pid, td->tid));
+ if ((ret =
+ __os_calloc(dbenv, 1, sizeof(DB_TXN), &ktxn)) != 0)
+ return (ret);
+ __txn_continue(dbenv, ktxn, ktd);
+ F_SET(ktxn, TXN_MALLOC);
+ ktxn->parent = txn;
+ TAILQ_INSERT_HEAD(&txn->kids, txn, klinks);
+ }
+ TAILQ_INSERT_TAIL(&mgr->txn_chain, txn, links);
+ pid = td->pid;
+ tid = td->tid;
+ (void)dbenv->thread_id_string(dbenv, pid, tid, buf);
+ __db_msg(dbenv,
+ "Aborting txn %#lx: %s", (u_long)txn->txnid, buf);
+ if ((ret = __txn_abort(txn)) != 0)
+ return (__db_failed(dbenv,
+ "Transaction abort failed", pid, tid));
+ goto retry;
+ }
+
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ return (0);
+}
diff --git a/db/txn/txn_method.c b/db/txn/txn_method.c
index c13f86dee..f56867473 100644
--- a/db/txn/txn_method.c
+++ b/db/txn/txn_method.c
@@ -1,46 +1,24 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn_method.c,v 11.72 2004/03/23 17:24:18 bostic Exp $
+ * $Id: txn_method.c,v 12.6 2006/08/24 14:46:53 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#ifdef HAVE_RPC
-#include <rpc/rpc.h>
-#endif
-
-#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
#include "dbinc/txn.h"
-#ifdef HAVE_RPC
-#include "dbinc_auto/rpc_client_ext.h"
-#endif
-
-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 *));
-
/*
* __txn_dbenv_create --
* Transaction specific initialization of the DB_ENV structure.
*
- * PUBLIC: void __txn_dbenv_create __P((DB_ENV *));
+ * PUBLIC: int __txn_dbenv_create __P((DB_ENV *));
*/
-void
+int
__txn_dbenv_create(dbenv)
DB_ENV *dbenv;
{
@@ -50,38 +28,28 @@ __txn_dbenv_create(dbenv)
* 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->tx_max = DEF_MAX_TXNS;
-#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;
- dbenv->txn_stat_print = NULL;
- dbenv->txn_begin = __dbcl_txn_begin;
- } 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;
+ return (0);
+}
- dbenv->txn_checkpoint = __txn_checkpoint_pp;
- dbenv->txn_recover = __txn_recover_pp;
- dbenv->txn_stat = __txn_stat_pp;
- dbenv->txn_stat_print = __txn_stat_print_pp;
- dbenv->txn_begin = __txn_begin_pp;
- }
+/*
+ * __txn_dbenv_destroy --
+ * Transaction specific destruction of the DB_ENV structure.
+ *
+ * PUBLIC: void __txn_dbenv_destroy __P((DB_ENV *));
+ */
+void
+__txn_dbenv_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
}
-static int
+/*
+ * PUBLIC: int __txn_get_tx_max __P((DB_ENV *, u_int32_t *));
+ */
+int
__txn_get_tx_max(dbenv, tx_maxp)
DB_ENV *dbenv;
u_int32_t *tx_maxp;
@@ -92,7 +60,7 @@ __txn_get_tx_max(dbenv, tx_maxp)
if (TXN_ON(dbenv)) {
/* Cannot be set after open, no lock required to read. */
*tx_maxp = ((DB_TXNREGION *)
- ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary)->maxtxns;
+ dbenv->tx_handle->reginfo.primary)->maxtxns;
} else
*tx_maxp = dbenv->tx_max;
return (0);
@@ -115,7 +83,10 @@ __txn_set_tx_max(dbenv, tx_max)
return (0);
}
-static int
+/*
+ * PUBLIC: int __txn_get_tx_timestamp __P((DB_ENV *, time_t *));
+ */
+int
__txn_get_tx_timestamp(dbenv, timestamp)
DB_ENV *dbenv;
time_t *timestamp;
@@ -127,8 +98,10 @@ __txn_get_tx_timestamp(dbenv, timestamp)
/*
* __txn_set_tx_timestamp --
* Set the transaction recovery timestamp.
+ *
+ * PUBLIC: int __txn_set_tx_timestamp __P((DB_ENV *, time_t *));
*/
-static int
+int
__txn_set_tx_timestamp(dbenv, timestamp)
DB_ENV *dbenv;
time_t *timestamp;
diff --git a/db/txn/txn_rec.c b/db/txn/txn_rec.c
index ea885528f..c81a9dcae 100644
--- a/db/txn/txn_rec.c
+++ b/db/txn/txn_rec.c
@@ -1,8 +1,8 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*/
/*
* Copyright (c) 1996
@@ -32,17 +32,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: txn_rec.c,v 11.64 2004/09/22 17:41:10 bostic Exp $
+ * $Id: txn_rec.c,v 12.14 2006/08/24 14:46:53 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/txn.h"
@@ -90,28 +84,28 @@ __txn_regop_recover(dbenv, dbtp, lsnp, op, info)
* that's OK. Ignore the return code from remove.
*/
if ((ret = __db_txnlist_remove(dbenv,
- info, argp->txnid->txnid)) != DB_NOTFOUND && ret != 0)
+ info, argp->txnp->txnid)) != DB_NOTFOUND && ret != 0)
goto err;
} 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)) {
+ LOG_COMPARE(&headp->trunc_lsn, lsnp) < 0)) {
/*
* 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.
*/
if ((ret = __db_txnlist_update(dbenv, info,
- argp->txnid->txnid, TXN_ABORT, NULL, &status, 1)) != 0)
+ argp->txnp->txnid, TXN_ABORT, NULL, &status, 1)) != 0)
goto err;
else if (status != TXN_IGNORE && status != TXN_OK)
goto err;
} else {
/* This is a normal commit; mark it appropriately. */
if ((ret = __db_txnlist_update(dbenv,
- info, argp->txnid->txnid, argp->opcode, lsnp,
+ info, argp->txnp->txnid, argp->opcode, lsnp,
&status, 0)) == DB_NOTFOUND) {
if ((ret = __db_txnlist_add(dbenv,
- info, argp->txnid->txnid,
+ info, argp->txnp->txnid,
argp->opcode == TXN_ABORT ?
TXN_IGNORE : argp->opcode, lsnp)) != 0)
goto err;
@@ -124,9 +118,9 @@ __txn_regop_recover(dbenv, dbtp, lsnp, op, info)
*lsnp = argp->prev_lsn;
if (0) {
-err: __db_err(dbenv,
+err: __db_errx(dbenv,
"txnid %lx commit record found, already on commit list",
- (u_long)argp->txnid->txnid);
+ (u_long)argp->txnp->txnid);
ret = EINVAL;
}
__os_free(dbenv, argp);
@@ -171,7 +165,7 @@ __txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info)
* cases below, we overwrite the ret value so we return
* appropriately.
*/
- ret = __db_txnlist_find(dbenv, info, argp->txnid->txnid, &status);
+ ret = __db_txnlist_find(dbenv, info, argp->txnp->txnid, &status);
/*
* If we are rolling forward, then an aborted prepare
@@ -182,7 +176,7 @@ __txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info)
if (op == DB_TXN_FORWARD_ROLL) {
if ((ret = __db_txnlist_remove(dbenv,
- info, argp->txnid->txnid)) != 0)
+ info, argp->txnp->txnid)) != 0)
goto txn_err;
} else if (op == DB_TXN_BACKWARD_ROLL && status == TXN_PREPARE) {
/*
@@ -198,7 +192,7 @@ __txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info)
*/
if (argp->opcode == TXN_ABORT) {
if ((ret = __db_txnlist_update(dbenv,
- info, argp->txnid->txnid,
+ info, argp->txnp->txnid,
TXN_ABORT, NULL, &status, 0)) != 0 &&
status != TXN_PREPARE)
goto txn_err;
@@ -212,12 +206,13 @@ __txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info)
* after recovery (see txn_recover).
*/
else if ((ret = __db_txnlist_remove(dbenv,
- info, argp->txnid->txnid)) != 0) {
-txn_err: __db_err(dbenv,
- "Transaction not in list %x", argp->txnid->txnid);
+ info, argp->txnp->txnid)) != 0) {
+txn_err: __db_errx(dbenv,
+ "transaction not in list %lx",
+ (u_long)argp->txnp->txnid);
ret = DB_NOTFOUND;
} else if ((ret = __db_txnlist_add(dbenv,
- info, argp->txnid->txnid, TXN_COMMIT, lsnp)) == 0)
+ info, argp->txnp->txnid, TXN_COMMIT, lsnp)) == 0)
ret = __txn_restore_txn(dbenv, lsnp, argp);
} else
ret = 0;
@@ -298,22 +293,20 @@ __txn_child_recover(dbenv, dbtp, lsnp, op, info)
/*
* This is a record in a PARENT's log trail indicating that a
- * child committed. If we are aborting, we need to update the
- * parent's LSN array. If we are in recovery, then if the
+ * child committed. If we are aborting, return the childs last
+ * record's LSN. If we are in recovery, then if the
* parent is committing, we set ourselves up to commit, else
* we do nothing.
*/
if (op == DB_TXN_ABORT) {
- /* Note that __db_txnlist_lsnadd rewrites its LSN
- * parameter, so you cannot reuse the argp->c_lsn field.
- */
- ret = __db_txnlist_lsnadd(dbenv,
- info, &argp->c_lsn, TXNLIST_NEW);
+ *lsnp = argp->c_lsn;
+ ret = __db_txnlist_lsnadd(dbenv, info, &argp->prev_lsn);
+ goto out;
} else if (op == DB_TXN_BACKWARD_ROLL) {
/* Child might exist -- look for it. */
ret = __db_txnlist_find(dbenv, info, argp->child, &c_stat);
t_ret =
- __db_txnlist_find(dbenv, info, argp->txnid->txnid, &p_stat);
+ __db_txnlist_find(dbenv, info, argp->txnp->txnid, &p_stat);
if (ret != 0 && ret != DB_NOTFOUND)
goto out;
if (t_ret != 0 && t_ret != DB_NOTFOUND) {
@@ -375,13 +368,13 @@ __txn_child_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __db_txnlist_find(dbenv,
info, argp->child, &c_stat)) == DB_NOTFOUND)
ret = __db_txnlist_update(dbenv, info,
- argp->txnid->txnid, TXN_IGNORE,
+ argp->txnp->txnid, TXN_IGNORE,
NULL, &p_stat, 1);
} else if (DB_REDO(op)) {
/* Forward Roll */
if ((ret =
__db_txnlist_remove(dbenv, info, argp->child)) != 0)
- __db_err(dbenv,
+ __db_errx(dbenv,
"Transaction not in list %x", argp->child);
}
@@ -422,36 +415,42 @@ __txn_restore_txn(dbenv, lsnp, argp)
mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
/* Allocate a new transaction detail structure. */
if ((ret =
__db_shalloc(&mgr->reginfo, sizeof(TXN_DETAIL), 0, &td)) != 0) {
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
return (ret);
}
/* Place transaction on active transaction list. */
SH_TAILQ_INSERT_HEAD(&region->active_txn, td, links, __txn_detail);
- td->txnid = argp->txnid->txnid;
- td->begin_lsn = argp->begin_lsn;
+ td->txnid = argp->txnp->txnid;
+ __os_id(dbenv, &td->pid, &td->tid);
td->last_lsn = *lsnp;
- td->parent = 0;
+ td->begin_lsn = argp->begin_lsn;
+ td->parent = INVALID_ROFF;
+ td->name = INVALID_ROFF;
+ SH_TAILQ_INIT(&td->kids);
+ MAX_LSN(td->read_lsn);
+ MAX_LSN(td->visible_lsn);
+ td->mvcc_ref = 0;
+ td->mvcc_mtx = MUTEX_INVALID;
td->status = TXN_PREPARED;
+ td->flags = TXN_DTL_RESTORED;
td->xa_status = TXN_XA_PREPARED;
memcpy(td->xid, argp->xid.data, argp->xid.size);
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);
+ TXN_SYSTEM_UNLOCK(dbenv);
return (0);
}
@@ -489,3 +488,130 @@ __txn_recycle_recover(dbenv, dbtp, lsnp, op, info)
return (0);
}
+
+/*
+ * PUBLIC: int __txn_regop_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ *
+ * These records are only ever written for commits. Normally, we redo any
+ * committed transaction, however if we are doing recovery to a timestamp, then
+ * we may treat transactions that committed after the timestamp as aborted.
+ */
+int
+__txn_regop_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ DB_TXNHEAD *headp;
+ __txn_regop_42_args *argp;
+ int ret;
+ u_int32_t status;
+
+#ifdef DEBUG_RECOVER
+ (void)__txn_regop_42_print(dbenv, dbtp, lsnp, op, info);
+#endif
+
+ if ((ret = __txn_regop_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+
+ 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) {
+ /*
+ * 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.
+ */
+ if ((ret = __db_txnlist_remove(dbenv,
+ info, argp->txnp->txnid)) != DB_NOTFOUND && ret != 0)
+ goto err;
+ } 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)) {
+ /*
+ * 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.
+ */
+ if ((ret = __db_txnlist_update(dbenv, info,
+ argp->txnp->txnid, TXN_ABORT, NULL, &status, 1)) != 0)
+ goto err;
+ else if (status != TXN_IGNORE && status != TXN_OK)
+ goto err;
+ } else {
+ /* This is a normal commit; mark it appropriately. */
+ if ((ret = __db_txnlist_update(dbenv,
+ info, argp->txnp->txnid, argp->opcode, lsnp,
+ &status, 0)) == DB_NOTFOUND) {
+ if ((ret = __db_txnlist_add(dbenv,
+ info, argp->txnp->txnid,
+ argp->opcode == TXN_ABORT ?
+ TXN_IGNORE : argp->opcode, lsnp)) != 0)
+ goto err;
+ } else if (ret != 0 ||
+ (status != TXN_IGNORE && status != TXN_OK))
+ goto err;
+ }
+
+ if (ret == 0)
+ *lsnp = argp->prev_lsn;
+
+ if (0) {
+err: __db_errx(dbenv,
+ "txnid %lx commit record found, already on commit list",
+ (u_long)argp->txnp->txnid);
+ ret = EINVAL;
+ }
+ __os_free(dbenv, argp);
+
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __txn_ckp_42_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__txn_ckp_42_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ DB_REP *db_rep;
+ REP *rep;
+ __txn_ckp_42_args *argp;
+ int ret;
+
+#ifdef DEBUG_RECOVER
+ __txn_ckp_42_print(dbenv, dbtp, lsnp, op, info);
+#endif
+ if ((ret = __txn_ckp_42_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+
+ 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(dbenv, argp);
+ return (DB_TXN_CKP);
+}
diff --git a/db/txn/txn_recover.c b/db/txn/txn_recover.c
index 79b88b727..961f0c39c 100644
--- a/db/txn/txn_recover.c
+++ b/db/txn/txn_recover.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn_recover.c,v 1.54 2004/10/15 16:59:44 bostic Exp $
+ * $Id: txn_recover.c,v 12.19 2006/08/24 14:46:53 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/txn.h"
#include "dbinc/db_page.h"
@@ -25,40 +19,6 @@
#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.
- *
- * PUBLIC: void __txn_continue __P((DB_ENV *, DB_TXN *, TXN_DETAIL *, size_t));
- */
-void
-__txn_continue(env, txnp, td, off)
- DB_ENV *env;
- DB_TXN *txnp;
- TXN_DETAIL *td;
- size_t off;
-{
- txnp->mgrp = env->tx_handle;
- txnp->parent = NULL;
- txnp->last_lsn = td->last_lsn;
- txnp->txnid = td->txnid;
- 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);
-}
-
-/*
* __txn_map_gid
* Return the txn that corresponds to this global ID.
*
@@ -73,23 +33,21 @@ __txn_map_gid(dbenv, gid, tdp, offp)
roff_t *offp;
{
DB_TXNMGR *mgr;
- DB_TXNREGION *tmr;
+ DB_TXNREGION *region;
mgr = dbenv->tx_handle;
- tmr = mgr->reginfo.primary;
+ region = 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 (*tdp = SH_TAILQ_FIRST(&tmr->active_txn, __txn_detail);
- *tdp != NULL;
- *tdp = SH_TAILQ_NEXT(*tdp, links, __txn_detail))
+ TXN_SYSTEM_LOCK(dbenv);
+ SH_TAILQ_FOREACH(*tdp, &region->active_txn, links, __txn_detail)
if (memcmp(gid, (*tdp)->xid, sizeof((*tdp)->xid)) == 0)
break;
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
if (*tdp == NULL)
return (EINVAL);
@@ -112,25 +70,26 @@ __txn_recover_pp(dbenv, preplist, count, retp, flags)
long count, *retp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int 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,
+ if (F_ISSET((DB_TXNREGION *)dbenv->tx_handle->reginfo.primary,
TXN_IN_RECOVERY)) {
- __db_err(dbenv, "operation not permitted while in recovery");
+ __db_errx(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_db_rep_exit(dbenv);
+ if (flags != DB_FIRST && flags != DB_NEXT)
+ return (__db_ferr(dbenv, "DB_ENV->txn_recover", 0));
+
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv,
+ (__txn_recover(dbenv, preplist, count, retp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -181,7 +140,7 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
DB_LSN min;
DB_PREPLIST *prepp;
DB_TXNMGR *mgr;
- DB_TXNREGION *tmr;
+ DB_TXNREGION *region;
TXN_DETAIL *td;
XID *xidp;
long i;
@@ -204,7 +163,7 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
*/
mgr = dbenv->tx_handle;
- tmr = mgr->reginfo.primary;
+ region = mgr->reginfo.primary;
/*
* During this pass we need to figure out if we are going to need
@@ -213,15 +172,11 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
* and the ones that we are collecting are restored (if they aren't
* restored, then we never crashed; just the main server did).
*/
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
if (flags == DB_FIRST) {
- for (td = SH_TAILQ_FIRST(&tmr->active_txn, __txn_detail);
- td != NULL;
- td = SH_TAILQ_NEXT(td, links, __txn_detail)) {
+ SH_TAILQ_FOREACH(td, &region->active_txn, links, __txn_detail) {
if (F_ISSET(td, TXN_DTL_RESTORED))
nrestores++;
- if (F_ISSET(td, TXN_DTL_COLLECTED))
- open_files = 0;
F_CLR(td, TXN_DTL_COLLECTED);
}
mgr->n_discards = 0;
@@ -229,7 +184,7 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
open_files = 0;
/* Now begin collecting active transactions. */
- for (td = SH_TAILQ_FIRST(&tmr->active_txn, __txn_detail);
+ for (td = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
td != NULL && *retp < count;
td = SH_TAILQ_NEXT(td, links, __txn_detail)) {
if (td->status != TXN_PREPARED ||
@@ -252,41 +207,45 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
if (txns != NULL) {
if ((ret = __os_calloc(dbenv,
1, sizeof(DB_TXN), &prepp->txn)) != 0) {
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
goto err;
}
- __txn_continue(dbenv,
- prepp->txn, td, R_OFFSET(&mgr->reginfo, td));
+ __txn_continue(dbenv, prepp->txn, td);
F_SET(prepp->txn, TXN_MALLOC);
memcpy(prepp->gid, td->xid, sizeof(td->xid));
prepp++;
}
if (!IS_ZERO_LSN(td->begin_lsn) &&
- log_compare(&td->begin_lsn, &min) < 0)
+ LOG_COMPARE(&td->begin_lsn, &min) < 0)
min = td->begin_lsn;
(*retp)++;
F_SET(td, TXN_DTL_COLLECTED);
+ if (IS_ENV_REPLICATED(dbenv) &&
+ (ret = __op_rep_enter(dbenv)) != 0)
+ goto err;
}
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
/*
* Now link all the transactions into the transaction manager's list.
*/
if (txns != NULL) {
- MUTEX_THREAD_LOCK(dbenv, mgr->mutexp);
+ MUTEX_LOCK(dbenv, mgr->mutex);
for (i = 0; i < *retp; i++)
TAILQ_INSERT_TAIL(&mgr->txn_chain, txns[i].txn, links);
- MUTEX_THREAD_UNLOCK(dbenv, mgr->mutexp);
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
}
if (open_files && nrestores && *retp != 0 && !IS_MAX_LSN(min)) {
- F_SET((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_SET(dbenv->lg_handle, DBLOG_RECOVER);
ret = __txn_openfiles(dbenv, &min, 0);
- F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_CLR(dbenv->lg_handle, DBLOG_RECOVER);
}
-err:
+ return (0);
+
+err: TXN_SYSTEM_UNLOCK(dbenv);
return (ret);
}
@@ -305,9 +264,9 @@ __txn_openfiles(dbenv, min, force)
DBT data;
DB_LOGC *logc;
DB_LSN open_lsn;
+ DB_TXNHEAD *txninfo;
__txn_ckp_args *ckp_args;
int ret, t_ret;
- void *txninfo;
/*
* Figure out the last checkpoint before the smallest
@@ -322,11 +281,11 @@ __txn_openfiles(dbenv, min, force)
while (!IS_ZERO_LSN(open_lsn) && (ret =
__log_c_get(logc, &open_lsn, &data, DB_SET)) == 0 &&
(force ||
- (min != NULL && log_compare(min, &open_lsn) < 0))) {
+ (min != NULL && LOG_COMPARE(min, &open_lsn) < 0))) {
/* Format the log record. */
if ((ret = __txn_ckp_read(dbenv,
data.data, &ckp_args)) != 0) {
- __db_err(dbenv,
+ __db_errx(dbenv,
"Invalid checkpoint record at [%lu][%lu]",
(u_long)open_lsn.file,
(u_long)open_lsn.offset);
@@ -359,7 +318,7 @@ __txn_openfiles(dbenv, min, force)
*/
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");
+ __db_errx(dbenv, "No log records");
goto err;
}
diff --git a/db/txn/txn_region.c b/db/txn/txn_region.c
index 82d4543af..0b5547bb5 100644
--- a/db/txn/txn_region.c
+++ b/db/txn/txn_region.c
@@ -1,31 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn_region.c,v 11.87 2004/10/15 16:59:44 bostic Exp $
+ * $Id: txn_region.c,v 12.20 2006/08/24 14:46:53 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 <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
@@ -43,56 +26,49 @@ int
__txn_open(dbenv)
DB_ENV *dbenv;
{
- DB_TXNMGR *tmgrp;
+ DB_TXNMGR *mgr;
int ret;
/* Create/initialize the transaction manager structure. */
- if ((ret = __os_calloc(dbenv, 1, sizeof(DB_TXNMGR), &tmgrp)) != 0)
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_TXNMGR), &mgr)) != 0)
return (ret);
- TAILQ_INIT(&tmgrp->txn_chain);
- tmgrp->dbenv = dbenv;
+ TAILQ_INIT(&mgr->txn_chain);
+ mgr->dbenv = dbenv;
/* Join/create the txn region. */
- tmgrp->reginfo.dbenv = dbenv;
- tmgrp->reginfo.type = REGION_TYPE_TXN;
- tmgrp->reginfo.id = INVALID_REGION_ID;
- tmgrp->reginfo.flags = REGION_JOIN_OK;
+ mgr->reginfo.dbenv = dbenv;
+ mgr->reginfo.type = REGION_TYPE_TXN;
+ mgr->reginfo.id = INVALID_REGION_ID;
+ mgr->reginfo.flags = REGION_JOIN_OK;
if (F_ISSET(dbenv, DB_ENV_CREATE))
- F_SET(&tmgrp->reginfo, REGION_CREATE_OK);
+ F_SET(&mgr->reginfo, REGION_CREATE_OK);
if ((ret = __db_r_attach(dbenv,
- &tmgrp->reginfo, __txn_region_size(dbenv))) != 0)
+ &mgr->reginfo, __txn_region_size(dbenv))) != 0)
goto err;
/* If we created the region, initialize it. */
- if (F_ISSET(&tmgrp->reginfo, REGION_CREATE))
- if ((ret = __txn_init(dbenv, tmgrp)) != 0)
+ if (F_ISSET(&mgr->reginfo, REGION_CREATE))
+ if ((ret = __txn_init(dbenv, mgr)) != 0)
goto err;
/* Set the local addresses. */
- tmgrp->reginfo.primary =
- R_ADDR(&tmgrp->reginfo, tmgrp->reginfo.rp->primary);
+ mgr->reginfo.primary =
+ R_ADDR(&mgr->reginfo, mgr->reginfo.rp->primary);
- /* Acquire a mutex to protect the active TXN list. */
- if (F_ISSET(dbenv, DB_ENV_THREAD) &&
- (ret = __db_mutex_setup(dbenv, &tmgrp->reginfo, &tmgrp->mutexp,
- MUTEX_ALLOC | MUTEX_NO_RLOCK | MUTEX_THREAD)) != 0)
+ /* If threaded, acquire a mutex to protect the active TXN list. */
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_TXN_ACTIVE, DB_MUTEX_PROCESS_ONLY, &mgr->mutex)) != 0)
goto err;
- R_UNLOCK(dbenv, &tmgrp->reginfo);
-
- dbenv->tx_handle = tmgrp;
+ dbenv->tx_handle = mgr;
return (0);
-err: if (tmgrp->reginfo.addr != NULL) {
- if (F_ISSET(&tmgrp->reginfo, REGION_CREATE))
- ret = __db_panic(dbenv, ret);
- R_UNLOCK(dbenv, &tmgrp->reginfo);
+err: dbenv->tx_handle = NULL;
+ if (mgr->reginfo.addr != NULL)
+ (void)__db_r_detach(dbenv, &mgr->reginfo, 0);
- (void)__db_r_detach(dbenv, &tmgrp->reginfo, 0);
- }
- if (tmgrp->mutexp != NULL)
- __db_mutex_free(dbenv, &tmgrp->reginfo, tmgrp->mutexp);
- __os_free(dbenv, tmgrp);
+ (void)__mutex_free(dbenv, &mgr->mutex);
+ __os_free(dbenv, mgr);
return (ret);
}
@@ -101,16 +77,13 @@ err: if (tmgrp->reginfo.addr != NULL) {
* Initialize a transaction region in shared memory.
*/
static int
-__txn_init(dbenv, tmgrp)
+__txn_init(dbenv, mgr)
DB_ENV *dbenv;
- DB_TXNMGR *tmgrp;
+ DB_TXNMGR *mgr;
{
DB_LSN last_ckp;
DB_TXNREGION *region;
int ret;
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- u_int8_t *addr;
-#endif
/*
* Find the last checkpoint in the log.
@@ -121,7 +94,8 @@ __txn_init(dbenv, tmgrp)
* 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 ((ret = __log_get_cached_ckp_lsn(dbenv, &last_ckp)) != 0)
+ return (ret);
/*
* If that didn't work, look backwards from the beginning of
@@ -132,20 +106,28 @@ __txn_init(dbenv, tmgrp)
return (ret);
}
- if ((ret = __db_shalloc(&tmgrp->reginfo,
- sizeof(DB_TXNREGION), 0, &tmgrp->reginfo.primary)) != 0) {
- __db_err(dbenv,
+ if ((ret = __db_shalloc(&mgr->reginfo,
+ sizeof(DB_TXNREGION), 0, &mgr->reginfo.primary)) != 0) {
+ __db_errx(dbenv,
"Unable to allocate memory for the transaction region");
return (ret);
}
- tmgrp->reginfo.rp->primary =
- R_OFFSET(&tmgrp->reginfo, tmgrp->reginfo.primary);
- region = tmgrp->reginfo.primary;
+ mgr->reginfo.rp->primary =
+ R_OFFSET(&mgr->reginfo, mgr->reginfo.primary);
+ region = mgr->reginfo.primary;
memset(region, 0, sizeof(*region));
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_TXN_REGION, 0, &region->mtx_region)) != 0)
+ return (ret);
+
region->maxtxns = dbenv->tx_max;
region->last_txnid = TXN_MINIMUM;
region->cur_maxid = TXN_MAXIMUM;
+
+ if ((ret = __mutex_alloc(
+ dbenv, MTX_TXN_CHKPT, 0, &region->mtx_ckp)) != 0)
+ return (ret);
region->last_ckp = last_ckp;
region->time_ckp = time(NULL);
@@ -153,18 +135,8 @@ __txn_init(dbenv, tmgrp)
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,
- 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);
+ SH_TAILQ_INIT(&region->mvcc_txn);
+ return (ret);
}
/*
@@ -187,6 +159,8 @@ __txn_findlastckp(dbenv, lsnp, max_lsn)
int ret, t_ret;
u_int32_t rectype;
+ ZERO_LSN(*lsnp);
+
if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
@@ -194,17 +168,15 @@ __txn_findlastckp(dbenv, lsnp, max_lsn)
memset(&dbt, 0, sizeof(dbt));
if (max_lsn != NULL) {
lsn = *max_lsn;
- ZERO_LSN(*lsnp);
if ((ret = __log_c_get(logc, &lsn, &dbt, DB_SET)) != 0)
goto err;
} else {
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.
+ * 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;
}
@@ -222,6 +194,7 @@ __txn_findlastckp(dbenv, lsnp, max_lsn)
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.
@@ -239,16 +212,15 @@ int
__txn_dbenv_refresh(dbenv)
DB_ENV *dbenv;
{
- DB_TXN *txnp;
- DB_TXNMGR *tmgrp;
+ DB_TXN *txn;
+ DB_TXNMGR *mgr;
REGINFO *reginfo;
- TXN_DETAIL *td;
u_int32_t txnid;
int aborted, ret, t_ret;
ret = 0;
- tmgrp = dbenv->tx_handle;
- reginfo = &tmgrp->reginfo;
+ mgr = dbenv->tx_handle;
+ reginfo = &mgr->reginfo;
/*
* This function can only be called once per process (i.e., not
@@ -262,51 +234,45 @@ __txn_dbenv_refresh(dbenv)
* to a known state.
*/
aborted = 0;
- if (TAILQ_FIRST(&tmgrp->txn_chain) != NULL) {
- while ((txnp = TAILQ_FIRST(&tmgrp->txn_chain)) != NULL) {
+ if (TAILQ_FIRST(&mgr->txn_chain) != NULL) {
+ while ((txn = TAILQ_FIRST(&mgr->txn_chain)) != NULL) {
/* Prepared transactions are OK. */
- td = R_ADDR(reginfo, txnp->off);
- txnid = txnp->txnid;
- 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));
+ txnid = txn->txnid;
+ if (((TXN_DETAIL *)txn->td)->status == TXN_PREPARED) {
+ if ((ret = __txn_discard_int(txn, 0)) != 0) {
+ __db_err(dbenv, ret,
+ "unable to discard txn %#lx",
+ (u_long)txnid);
break;
}
continue;
}
aborted = 1;
- if ((t_ret = __txn_abort(txnp)) != 0) {
- __db_err(dbenv,
- "Unable to abort transaction 0x%x: %s",
- txnid, db_strerror(t_ret));
+ if ((t_ret = __txn_abort(txn)) != 0) {
+ __db_err(dbenv, t_ret,
+ "unable to abort transaction %#lx",
+ (u_long)txnid);
ret = __db_panic(dbenv, t_ret);
break;
}
}
if (aborted) {
- __db_err(dbenv,
+ __db_errx(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)
- ret = t_ret;
-
/* Discard the per-thread lock. */
- if (tmgrp->mutexp != NULL)
- __db_mutex_free(dbenv, reginfo, tmgrp->mutexp);
+ if ((t_ret = __mutex_free(dbenv, &mgr->mutex)) != 0 && ret == 0)
+ ret = t_ret;
/* Detach from the region. */
if ((t_ret = __db_r_detach(dbenv, reginfo, 0)) != 0 && ret == 0)
ret = t_ret;
- __os_free(dbenv, tmgrp);
+ __os_free(dbenv, mgr);
dbenv->tx_handle = NULL;
return (ret);
@@ -328,46 +294,10 @@ __txn_region_size(dbenv)
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;
-{
- /*
- * This routine is called in two cases: when discarding the mutexes
- * from a previous Berkeley DB run, during recovery, and two, when
- * discarding the mutexes as we shut down the database environment.
- * In the latter case, we also need to discard shared memory segments,
- * this is the last time we use them, and the last region-specific
- * call we make.
- */
-#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- DB_TXNREGION *region;
-
- region = R_ADDR(infop, infop->rp->primary);
-
- __db_shlocks_destroy(infop, R_ADDR(infop, region->maint_off));
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, R_ADDR(infop, region->maint_off));
-#endif
- if (infop->primary != NULL && F_ISSET(dbenv, DB_ENV_PRIVATE))
- __db_shalloc_free(infop, infop->primary);
-}
-
-/*
* __txn_id_set --
* Set the current transaction ID and current maximum unused ID (for
* testing purposes only).
@@ -392,14 +322,115 @@ __txn_id_set(dbenv, cur_txnid, max_txnid)
ret = 0;
if (cur_txnid < TXN_MINIMUM) {
- __db_err(dbenv, "Current ID value %lu below minimum",
+ __db_errx(dbenv, "Current ID value %lu below minimum",
(u_long)cur_txnid);
ret = EINVAL;
}
if (max_txnid < TXN_MINIMUM) {
- __db_err(dbenv, "Maximum ID value %lu below minimum",
+ __db_errx(dbenv, "Maximum ID value %lu below minimum",
(u_long)max_txnid);
ret = EINVAL;
}
return (ret);
}
+
+/*
+ * __txn_oldest_reader --
+ * Find the oldest "read LSN" of any active transaction'
+ * MVCC changes older than this can safely be discarded from the cache.
+ *
+ * PUBLIC: int __txn_oldest_reader __P((DB_ENV *, DB_LSN *));
+ */
+int
+__txn_oldest_reader(dbenv, lsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+{
+ DB_LSN old_lsn;
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ TXN_DETAIL *td;
+ int ret;
+
+ if ((mgr = dbenv->tx_handle) == NULL)
+ return (0);
+ region = mgr->reginfo.primary;
+
+ if ((ret = __log_current_lsn(dbenv, &old_lsn, NULL, NULL)) != 0)
+ return (ret);
+
+ TXN_SYSTEM_LOCK(dbenv);
+ SH_TAILQ_FOREACH(td, &region->active_txn, links, __txn_detail)
+ if (LOG_COMPARE(&td->read_lsn, &old_lsn) < 0)
+ old_lsn = td->read_lsn;
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ DB_ASSERT(dbenv, LOG_COMPARE(&old_lsn, lsnp) >= 0);
+ *lsnp = old_lsn;
+
+ return (0);
+}
+
+/*
+ * __txn_add_buffer --
+ * Add to the count of buffers created by the given transaction.
+ *
+ * PUBLIC: int __txn_add_buffer __P((DB_ENV *, TXN_DETAIL *));
+ */
+int __txn_add_buffer(dbenv, td)
+ DB_ENV *dbenv;
+ TXN_DETAIL *td;
+{
+ DB_ASSERT(dbenv, td != NULL);
+
+ MUTEX_LOCK(dbenv, td->mvcc_mtx);
+ DB_ASSERT(dbenv, td->mvcc_ref < UINT32_MAX);
+ ++td->mvcc_ref;
+ MUTEX_UNLOCK(dbenv, td->mvcc_mtx);
+
+ return (0);
+}
+
+/*
+ * __txn_remove_buffer --
+ * Remove a buffer from a transaction -- free the transaction if necessary.
+ *
+ * PUBLIC: int __txn_remove_buffer __P((DB_ENV *, TXN_DETAIL *, db_mutex_t));
+ */
+int __txn_remove_buffer(dbenv, td, hash_mtx)
+ DB_ENV *dbenv;
+ TXN_DETAIL *td;
+ db_mutex_t hash_mtx;
+{
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ int need_free, ret;
+
+ DB_ASSERT(dbenv, td != NULL);
+ ret = 0;
+ mgr = dbenv->tx_handle;
+ region = mgr->reginfo.primary;
+
+ MUTEX_LOCK(dbenv, td->mvcc_mtx);
+ DB_ASSERT(dbenv, td->mvcc_ref > 0);
+ need_free = (--td->mvcc_ref == 0);
+ MUTEX_UNLOCK(dbenv, td->mvcc_mtx);
+
+ if (need_free &&
+ (td->status == TXN_COMMITTED || td->status == TXN_ABORTED)) {
+ MUTEX_UNLOCK(dbenv, hash_mtx);
+
+ ret = __mutex_free(dbenv, &td->mvcc_mtx);
+ td->mvcc_mtx = MUTEX_INVALID;
+
+ TXN_SYSTEM_LOCK(dbenv);
+ SH_TAILQ_REMOVE(&region->mvcc_txn, td, links, __txn_detail);
+ --region->stat.st_nsnapshot;
+ __db_shalloc_free(&mgr->reginfo, td);
+ TXN_SYSTEM_UNLOCK(dbenv);
+
+ MUTEX_LOCK(dbenv, hash_mtx);
+ }
+
+ return (ret);
+}
diff --git a/db/txn/txn_stat.c b/db/txn/txn_stat.c
index 2f9b8357c..2f7cf95e5 100644
--- a/db/txn/txn_stat.c
+++ b/db/txn/txn_stat.c
@@ -1,32 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn_stat.c,v 11.37 2004/10/15 16:59:44 bostic Exp $
+ * $Id: txn_stat.c,v 12.18 2006/08/24 14:46:53 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 <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/db_page.h"
#include "dbinc/db_am.h"
@@ -38,7 +20,11 @@ static int __txn_compare __P((const void *, const void *));
static int __txn_print_all __P((DB_ENV *, u_int32_t));
static int __txn_print_stats __P((DB_ENV *, u_int32_t));
static int __txn_stat __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
-static void __txn_xid_stats __P((DB_ENV *, DB_MSGBUF *, DB_TXN_ACTIVE *));
+static char *__txn_status __P((DB_TXN_ACTIVE *));
+static void __txn_gid __P((DB_ENV *, DB_MSGBUF *, DB_TXN_ACTIVE *));
+
+#define XID_FIELD_IS_SET(p) \
+ ((p)->xa_status != 0 || (p)->status == TXN_PREPARED)
/*
* __txn_stat_pp --
@@ -52,7 +38,8 @@ __txn_stat_pp(dbenv, statp, flags)
DB_TXN_STAT **statp;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -62,12 +49,9 @@ __txn_stat_pp(dbenv, statp, flags)
"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_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__txn_stat(dbenv, statp, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -84,7 +68,7 @@ __txn_stat(dbenv, statp, flags)
DB_TXNMGR *mgr;
DB_TXNREGION *region;
DB_TXN_STAT *stats;
- TXN_DETAIL *txnp;
+ TXN_DETAIL *td;
size_t nbytes;
u_int32_t maxtxn, ndx;
int ret;
@@ -108,7 +92,7 @@ __txn_stat(dbenv, statp, flags)
if ((ret = __os_umalloc(dbenv, nbytes, &stats)) != 0)
return (ret);
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
memcpy(stats, &region->stat, sizeof(*stats));
stats->st_last_txnid = region->last_txnid;
stats->st_last_ckp = region->last_ckp;
@@ -116,35 +100,50 @@ __txn_stat(dbenv, statp, flags)
stats->st_txnarray = (DB_TXN_ACTIVE *)&stats[1];
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)
+ td = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
+ td != NULL && ndx < maxtxn;
+ td = SH_TAILQ_NEXT(td, links, __txn_detail), ++ndx) {
+ stats->st_txnarray[ndx].txnid = td->txnid;
+ if (td->parent == INVALID_ROFF)
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;
- if ((stats->st_txnarray[ndx].xa_status = txnp->xa_status) != 0)
+ td->parent))->txnid;
+ stats->st_txnarray[ndx].pid = td->pid;
+ stats->st_txnarray[ndx].tid = td->tid;
+ stats->st_txnarray[ndx].lsn = td->begin_lsn;
+ stats->st_txnarray[ndx].read_lsn = td->read_lsn;
+ stats->st_txnarray[ndx].mvcc_ref = td->mvcc_ref;
+ stats->st_txnarray[ndx].status = td->status;
+ stats->st_txnarray[ndx].xa_status = td->xa_status;
+ if (XID_FIELD_IS_SET(td))
memcpy(stats->st_txnarray[ndx].xid,
- txnp->xid, DB_XIDDATASIZE);
+ td->xid, sizeof(td->xid));
+ if (td->name != INVALID_ROFF) {
+ (void)strncpy(stats->st_txnarray[ndx].name,
+ R_ADDR(&mgr->reginfo, td->name),
+ sizeof(stats->st_txnarray[ndx].name) - 1);
+ stats->st_txnarray[ndx].name[
+ sizeof(stats->st_txnarray[ndx].name) - 1] = '\0';
+ } else
+ stats->st_txnarray[ndx].name[0] = '\0';
}
- stats->st_region_wait = mgr->reginfo.rp->mutex.mutex_set_wait;
- stats->st_region_nowait = mgr->reginfo.rp->mutex.mutex_set_nowait;
+ __mutex_set_wait_info(dbenv, region->mtx_region,
+ &stats->st_region_wait, &stats->st_region_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;
+ __mutex_clear(dbenv, region->mtx_region);
memset(&region->stat, 0, sizeof(region->stat));
region->stat.st_maxtxns = region->maxtxns;
region->stat.st_maxnactive =
region->stat.st_nactive = stats->st_nactive;
+ region->stat.st_maxnsnapshot =
+ region->stat.st_nsnapshot = stats->st_nsnapshot;
}
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
*statp = stats;
return (0);
@@ -161,7 +160,8 @@ __txn_stat_print_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int rep_check, ret;
+ DB_THREAD_INFO *ip;
+ int ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -171,12 +171,9 @@ __txn_stat_print_pp(dbenv, flags)
flags, DB_STAT_ALL | DB_STAT_CLEAR)) != 0)
return (ret);
- rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
- if (rep_check)
- __env_rep_enter(dbenv);
- ret = __txn_stat_print(dbenv, flags);
- if (rep_check)
- __env_db_rep_exit(dbenv);
+ ENV_ENTER(dbenv, ip);
+ REPLICATION_WRAP(dbenv, (__txn_stat_print(dbenv, flags)), ret);
+ ENV_LEAVE(dbenv, ip);
return (ret);
}
@@ -220,8 +217,10 @@ __txn_print_stats(dbenv, flags)
{
DB_MSGBUF mb;
DB_TXN_STAT *sp;
+ DB_TXN_ACTIVE *txn;
u_int32_t i;
int ret;
+ char buf[DB_THREADID_STRLEN], time_buf[CTIME_BUFLEN];
if ((ret = __txn_stat(dbenv, &sp, flags)) != 0)
return (ret);
@@ -236,7 +235,7 @@ __txn_print_stats(dbenv, flags)
__db_msg(dbenv, "0\tNo checkpoint timestamp");
else
__db_msg(dbenv, "%.24s\tCheckpoint timestamp",
- ctime(&sp->st_time_ckp));
+ __db_ctime(&sp->st_time_ckp, time_buf));
__db_msg(dbenv, "%#lx\tLast transaction ID allocated",
(u_long)sp->st_last_txnid);
__db_dl(dbenv, "Maximum number of active transactions configured",
@@ -250,6 +249,9 @@ __txn_print_stats(dbenv, flags)
"Number of transactions aborted", (u_long)sp->st_naborts);
__db_dl(dbenv,
"Number of transactions committed", (u_long)sp->st_ncommits);
+ __db_dl(dbenv, "Snapshot transactions", (u_long)sp->st_nsnapshot);
+ __db_dl(dbenv, "Maximum snapshot transactions",
+ (u_long)sp->st_maxnsnapshot);
__db_dl(dbenv,
"Number of transactions restored", (u_long)sp->st_nrestores);
@@ -262,19 +264,29 @@ __txn_print_stats(dbenv, flags)
qsort(sp->st_txnarray,
sp->st_nactive, sizeof(sp->st_txnarray[0]), __txn_compare);
- __db_msg(dbenv, "List of active transactions:");
+ __db_msg(dbenv, "Active transactions:");
DB_MSGBUF_INIT(&mb);
for (i = 0; i < sp->st_nactive; ++i) {
- __db_msgadd(dbenv,
- &mb, "\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)
- __db_msgadd(dbenv, &mb, "; parent: %lx",
- (u_long)sp->st_txnarray[i].parentid);
- if (sp->st_txnarray[i].xa_status != 0)
- __txn_xid_stats(dbenv, &mb, &sp->st_txnarray[i]);
+ txn = &sp->st_txnarray[i];
+ __db_msgadd(dbenv, &mb,
+ "\t%lx: %s; pid/thread %s; begin LSN: file/offset %lu/%lu",
+ (u_long)txn->txnid, __txn_status(txn),
+ dbenv->thread_id_string(dbenv, txn->pid, txn->tid, buf),
+ (u_long)txn->lsn.file, (u_long)txn->lsn.offset);
+ if (txn->parentid != 0)
+ __db_msgadd(dbenv, &mb,
+ "; parent: %lx", (u_long)txn->parentid);
+ if (!IS_MAX_LSN(txn->read_lsn))
+ __db_msgadd(dbenv, &mb, "; read LSN: %lu/%lu",
+ (u_long)txn->read_lsn.file,
+ (u_long)txn->read_lsn.offset);
+ if (txn->mvcc_ref != 0)
+ __db_msgadd(dbenv, &mb,
+ "; mvcc refcount: %lu", (u_long)txn->mvcc_ref);
+ if (txn->name[0] != '\0')
+ __db_msgadd(dbenv, &mb, "; \"%s\"", txn->name);
+ if (XID_FIELD_IS_SET(txn))
+ __txn_gid(dbenv, &mb, txn);
DB_MSGBUF_FLUSH(dbenv, &mb);
}
@@ -298,31 +310,36 @@ __txn_print_all(dbenv, flags)
};
DB_TXNMGR *mgr;
DB_TXNREGION *region;
+ char time_buf[CTIME_BUFLEN];
mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
- R_LOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_LOCK(dbenv);
__db_print_reginfo(dbenv, &mgr->reginfo, "Transaction");
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB_TXNMGR handle information:");
-
- __db_print_mutex(dbenv, NULL, mgr->mutexp, "DB_TXNMGR mutex", flags);
+ __mutex_print_debug_single(dbenv, "DB_TXNMGR mutex", mgr->mutex, flags);
__db_dl(dbenv,
"Number of transactions discarded", (u_long)mgr->n_discards);
__db_msg(dbenv, "%s", DB_GLOBAL(db_line));
__db_msg(dbenv, "DB_TXNREGION handle information:");
+ __mutex_print_debug_single(
+ dbenv, "DB_TXNREGION region mutex", region->mtx_region, flags);
STAT_ULONG("Maximum number of active txns", region->maxtxns);
STAT_HEX("Last transaction ID allocated", region->last_txnid);
STAT_HEX("Current maximum unused ID", region->cur_maxid);
+ __mutex_print_debug_single(
+ dbenv, "checkpoint mutex", region->mtx_ckp, flags);
STAT_LSN("Last checkpoint LSN", &region->last_ckp);
__db_msg(dbenv,
"%.24s\tLast checkpoint timestamp",
- region->time_ckp == 0 ? "0" : ctime(&region->time_ckp));
+ region->time_ckp == 0 ? "0" :
+ __db_ctime(&region->time_ckp, time_buf));
__db_prflags(dbenv, NULL, region->flags, fn, NULL, "\tFlags");
@@ -334,52 +351,64 @@ __txn_print_all(dbenv, flags)
* Display list of XA transactions in the DB_ENV handle.
*/
- R_UNLOCK(dbenv, &mgr->reginfo);
+ TXN_SYSTEM_UNLOCK(dbenv);
return (0);
}
-static void
-__txn_xid_stats(dbenv, mbp, txnp)
- DB_ENV *dbenv;
- DB_MSGBUF *mbp;
- DB_TXN_ACTIVE *txnp;
+static char *
+__txn_status(txn)
+ DB_TXN_ACTIVE *txn;
{
- u_int32_t v, *xp;
- u_int i;
- int cnt;
- const char *s;
-
- switch (txnp->xa_status) {
- case TXN_XA_ABORTED:
- s = "ABORTED";
+ switch (txn->xa_status) {
+ case 0:
+ switch (txn->status) {
+ case TXN_ABORTED:
+ return ("aborted");
+ case TXN_COMMITTED:
+ return ("committed");
+ case TXN_PREPARED:
+ return ("prepared");
+ case TXN_RUNNING:
+ return ("running");
+ default:
+ break;
+ }
break;
+ case TXN_XA_ABORTED:
+ return ("XA aborted");
case TXN_XA_DEADLOCKED:
- s = "DEADLOCKED";
- break;
+ return ("XA deadlocked");
case TXN_XA_ENDED:
- s = "ENDED";
- break;
+ return ("XA ended");
case TXN_XA_PREPARED:
- s = "PREPARED";
- break;
+ return ("XA prepared");
case TXN_XA_STARTED:
- s = "STARTED";
- break;
+ return ("XA started");
case TXN_XA_SUSPENDED:
- s = "SUSPENDED";
- break;
+ return ("XA suspended");
default:
- s = "UNKNOWN STATE";
- __db_err(dbenv,
- "XA: unknown state: %lu", (u_long)txnp->xa_status);
break;
}
- __db_msgadd(dbenv, mbp, "\tXA: %s; XID:\n\t\t", s == NULL ? "" : s);
- for (cnt = 0, xp = (u_int32_t *)txnp->xid,
- i = 0; i < DB_XIDDATASIZE; i += sizeof(u_int32_t)) {
+ return ("unknown state");
+}
+
+static void
+__txn_gid(dbenv, mbp, txn)
+ DB_ENV *dbenv;
+ DB_MSGBUF *mbp;
+ DB_TXN_ACTIVE *txn;
+{
+ u_int32_t v, *xp;
+ u_int i;
+ int cnt;
+
+ __db_msgadd(dbenv, mbp, "\n\tGID/XID:");
+ for (cnt = 0, xp = (u_int32_t *)txn->xid, i = 0;;) {
memcpy(&v, xp++, sizeof(u_int32_t));
- __db_msgadd(dbenv, mbp, "%#x ", v);
+ __db_msgadd(dbenv, mbp, "%#lx ", (u_long)v);
+ if ((i += sizeof(u_int32_t)) >= DB_XIDDATASIZE)
+ break;
if (++cnt == 4) {
DB_MSGBUF_FLUSH(dbenv, mbp);
__db_msgadd(dbenv, mbp, "\t\t");
diff --git a/db/txn/txn_util.c b/db/txn/txn_util.c
index ff94cd7db..fea21c76f 100644
--- a/db/txn/txn_util.c
+++ b/db/txn/txn_util.c
@@ -1,22 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: txn_util.c,v 11.28 2004/09/16 17:55:19 margo Exp $
+ * $Id: txn_util.c,v 12.8 2006/08/24 14:46:53 bostic Exp $
*/
#include "db_config.h"
-#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/lock.h"
#include "dbinc/mp.h"
#include "dbinc/txn.h"
@@ -35,6 +29,7 @@ struct __txn_event {
/* Delayed remove. */
char *name;
u_int8_t *fileid;
+ int inmem;
} r;
struct {
/* Lock event. */
@@ -79,14 +74,15 @@ __txn_closeevent(dbenv, txn, dbp)
* Creates a remove event that can be added to the commit list.
*
* PUBLIC: int __txn_remevent __P((DB_ENV *,
- * PUBLIC: DB_TXN *, const char *, u_int8_t*));
+ * PUBLIC: DB_TXN *, const char *, u_int8_t *, int));
*/
int
-__txn_remevent(dbenv, txn, name, fileid)
+__txn_remevent(dbenv, txn, name, fileid, inmem)
DB_ENV *dbenv;
DB_TXN *txn;
const char *name;
u_int8_t *fileid;
+ int inmem;
{
int ret;
TXN_EVENT *e;
@@ -105,6 +101,7 @@ __txn_remevent(dbenv, txn, name, fileid)
memcpy(e->u.r.fileid, fileid, DB_FILE_ID_LEN);
}
+ e->u.r.inmem = inmem;
e->op = TXN_REMOVE;
TAILQ_INSERT_TAIL(&txn->events, e, links);
@@ -115,9 +112,10 @@ err: if (e != NULL)
return (ret);
}
+
/*
* __txn_remrem --
- * Remove a remove event because the remove has be superceeded,
+ * Remove a remove event because the remove has been superceeded,
* by a create of the same name, for example.
*
* PUBLIC: void __txn_remrem __P((DB_ENV *, DB_TXN *, const char *));
@@ -251,7 +249,8 @@ __txn_doevents(dbenv, txn, opcode, preprocess)
if (preprocess) {
for (e = TAILQ_FIRST(&txn->events);
e != NULL; e = TAILQ_NEXT(e, links)) {
- if (e->op != TXN_TRADE)
+ if (e->op != TXN_TRADE ||
+ IS_WRITELOCK(e->u.t.lock.mode))
continue;
DO_TRADE;
}
@@ -262,7 +261,7 @@ __txn_doevents(dbenv, txn, opcode, preprocess)
* Prepare should only cause a preprocess, since the transaction
* isn't over.
*/
- DB_ASSERT(opcode != TXN_PREPARE);
+ DB_ASSERT(dbenv, opcode != TXN_PREPARE);
while ((e = TAILQ_FIRST(&txn->events)) != NULL) {
TAILQ_REMOVE(&txn->events, e, links);
/*
@@ -277,7 +276,7 @@ __txn_doevents(dbenv, txn, opcode, preprocess)
switch (e->op) {
case TXN_CLOSE:
/* If we didn't abort this txn, we screwed up badly. */
- DB_ASSERT(opcode == TXN_ABORT);
+ DB_ASSERT(dbenv, opcode == TXN_ABORT);
if ((t_ret = __db_close(e->u.c.dbp,
NULL, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
@@ -285,8 +284,8 @@ __txn_doevents(dbenv, txn, opcode, preprocess)
case TXN_REMOVE:
if (e->u.r.fileid != NULL) {
if ((t_ret = __memp_nameop(dbenv,
- e->u.r.fileid,
- NULL, e->u.r.name, NULL)) != 0 && ret == 0)
+ e->u.r.fileid, NULL, e->u.r.name,
+ NULL, e->u.r.inmem)) != 0 && ret == 0)
ret = t_ret;
} else if ((t_ret =
__os_unlink(dbenv, e->u.r.name)) != 0 && ret == 0)
@@ -303,7 +302,7 @@ __txn_doevents(dbenv, txn, opcode, preprocess)
break;
default:
/* This had better never happen. */
- DB_ASSERT(0);
+ DB_ASSERT(dbenv, 0);
}
dofree:
/* Free resources here. */
diff --git a/db/xa/xa.c b/db/xa/xa.c
index 00f3461e3..56cc772ac 100644
--- a/db/xa/xa.c
+++ b/db/xa/xa.c
@@ -1,35 +1,28 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: xa.c,v 11.35 2004/10/15 16:59:45 bostic Exp $
+ * $Id: xa.c,v 12.12 2006/08/24 14:46:54 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/txn.h"
-static int __db_xa_close __P((char *, int, long));
-static int __db_xa_commit __P((XID *, int, long));
-static int __db_xa_complete __P((int *, int *, int, long));
-static int __db_xa_end __P((XID *, int, long));
-static int __db_xa_forget __P((XID *, int, long));
-static int __db_xa_open __P((char *, int, long));
-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_put_txn __P((DB_ENV *, DB_TXN *));
+static int __db_xa_close __P((char *, int, long));
+static int __db_xa_commit __P((XID *, int, long));
+static int __db_xa_complete __P((int *, int *, int, long));
+static int __db_xa_end __P((XID *, int, long));
+static int __db_xa_forget __P((XID *, int, long));
+static int __db_xa_open __P((char *, int, long));
+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 int __xa_put_txn __P((DB_ENV *, DB_TXN *));
/*
* Possible flag values:
@@ -58,23 +51,12 @@ const struct xa_switch_t db_xa_switch = {
};
/*
- * If you want your XA server to be multi-threaded, then you must
+ * If you want your XA server to be multi-threaded, then you must (at least)
* 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
/*
@@ -91,55 +73,62 @@ __xa_get_txn(dbenv, txnp, do_init)
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);
+ TXN_DETAIL *td;
+ db_threadid_t tid;
+ pid_t pid;
#endif
+ int ret;
+
ret = 0;
#ifdef XA_MULTI_THREAD
- /* Specify Thread-ID retrieval here. */
- tid = FILL ME IN
+ dbenv->thread_id(dbenv, &pid, &tid);
*txnp = NULL;
- mgr = (DB_TXNMGR *)dbenv->tx_handle;
+
+ DB_ASSERT(dbenv, dbenv->tx_handle != NULL);
+ mgr = dbenv->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.
+ * 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 there is a transaction structure, we can use its mutex.
*/
- DB_ASSERT(dbenv->tx_handle != NULL);
- MUTEX_THREAD_LOCK(mgr->mutexp);
- for (t = TAILQ_FIRST(&dbenv->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.
- */
+ MUTEX_LOCK(dbenv, mgr->mutex);
+ TAILQ_FOREACH(t, &dbenv->xa_txn, xalinks) {
+ td = t->td;
+ if (td->pid != pid)
+ continue;
+#ifdef HAVE_SIMPLE_THREAD_TYPE
if (t->tid == tid) {
*txnp = t;
break;
}
- MUTEX_THREAD_UNLOCK(mgr-&gt;mutexp);
+#else
+ if (memcmp(&t->tid, &tid, sizeof(tid)) == 0) {
+ *txnp = t;
+ break;
+ }
+#endif
+ }
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
if (*txnp == NULL) {
if (!do_init)
ret = EINVAL;
else if ((ret =
- __os_malloc(dbenv, sizeof(DB_TXN), NULL, txnp)) == 0) {
+ __os_malloc(dbenv, sizeof(DB_TXN), txnp)) == 0) {
(*txnp)->tid = tid;
- MUTEX_THREAD_LOCK(mgr->mutexp);
+ MUTEX_LOCK(dbenv, mgr->mutex);
TAILQ_INSERT_HEAD(&dbenv->xa_txn, *txnp, xalinks);
- MUTEX_THREAD_UNLOCK(mgr->mutexp);
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
}
}
#else
+ COMPQUIET(do_init, 0);
+
*txnp = TAILQ_FIRST(&dbenv->xa_txn);
if (*txnp == NULL &&
(ret = __os_calloc(dbenv, 1, sizeof(DB_TXN), txnp)) == 0) {
@@ -151,23 +140,24 @@ __xa_get_txn(dbenv, txnp, do_init)
return (ret);
}
-static void
+static int
__xa_put_txn(dbenv, txnp)
DB_ENV *dbenv;
DB_TXN *txnp;
{
#ifdef XA_MULTI_THREAD
DB_TXNMGR *mgr;
- mgr = (DB_TXNMGR *)dbenv->tx_handle;
+ mgr = dbenv->tx_handle;
- MUTEX_THREAD_LOCK(mgr->mutexp);
+ MUTEX_LOCK(dbenv, mgr->mutex);
TAILQ_REMOVE(&dbenv->xa_txn, txnp, xalinks);
- MUTEX_THREAD_UNLOCK(mgr->mutexp);
+ MUTEX_UNLOCK(dbenv, mgr->mutex);
__os_free(dbenv, txnp);
#else
COMPQUIET(dbenv, NULL);
txnp->txnid = TXN_INVALID;
#endif
+ return (0);
}
#ifdef XA_MULTI_THREAD
@@ -213,8 +203,6 @@ __db_xa_open(xa_info, rmid, arg_flags)
/* Verify if we already have this environment open. */
if (__db_rmid_to_env(rmid, &dbenv) == 0)
return (XA_OK);
- if (__os_calloc(dbenv, 1, sizeof(DB_ENV), &dbenv) != 0)
- return (XAER_RMERR);
/* Open a new environment. */
if (db_env_create(&dbenv, 0) != 0)
@@ -335,7 +323,7 @@ __db_xa_start(xid, rmid, arg_flags)
* Other error conditions: RMERR, RMFAIL, OUTSIDE, PROTO, RB*
*/
if (is_known) {
- td = R_ADDR(&((DB_TXNMGR *)dbenv->tx_handle)->reginfo, off);
+ td = R_ADDR(&dbenv->tx_handle->reginfo, off);
if (td->xa_status == TXN_XA_SUSPENDED &&
!LF_ISSET(TMRESUME | TMJOIN))
return (XAER_PROTO);
@@ -347,16 +335,15 @@ __db_xa_start(xid, rmid, arg_flags)
/* Now, fill in the global transaction structure. */
if (__xa_get_txn(dbenv, &txnp, 1) != 0)
return (XAER_RMERR);
- __txn_continue(dbenv, txnp, td, off);
+ __txn_continue(dbenv, txnp, td);
td->xa_status = TXN_XA_STARTED;
} else {
if (__xa_get_txn(dbenv, &txnp, 1) != 0)
return (XAER_RMERR);
if (__txn_xa_begin(dbenv, txnp))
return (XAER_RMERR);
- (void)__db_map_xid(dbenv, xid, txnp->off);
- td = R_ADDR(
- &((DB_TXNMGR *)dbenv->tx_handle)->reginfo, txnp->off);
+ (void)__db_map_xid(dbenv, xid, txnp->td);
+ td = txnp->td;
td->xa_status = TXN_XA_STARTED;
}
return (XA_OK);
@@ -389,10 +376,10 @@ __db_xa_end(xid, rmid, flags)
if (__xa_get_txn(dbenv, &txn, 0) != 0)
return (XAER_RMERR);
- if (off != txn->off)
+ td = R_ADDR(&dbenv->tx_handle->reginfo, off);
+ if (td != txn->td)
return (XAER_PROTO);
- td = R_ADDR(&((DB_TXNMGR *)dbenv->tx_handle)->reginfo, off);
if (td->xa_status == TXN_XA_DEADLOCKED)
return (XA_RBDEADLOCK);
@@ -402,9 +389,6 @@ __db_xa_end(xid, rmid, flags)
if (td->xa_status != TXN_XA_STARTED)
return (XAER_PROTO);
- /* Update the shared memory last_lsn field */
- td->last_lsn = txn->last_lsn;
-
/*
* If we ever support XA migration, we cannot keep SUSPEND/END
* status in the shared region; it would have to be process local.
@@ -414,7 +398,11 @@ __db_xa_end(xid, rmid, flags)
else
td->xa_status = TXN_XA_ENDED;
- __xa_put_txn(dbenv, txn);
+ /*
+ * XXX
+ * This can fail in XA_MULTI_THREAD mode.
+ */
+ (void)__xa_put_txn(dbenv, txn);
return (XA_OK);
}
@@ -452,7 +440,7 @@ __db_xa_prepare(xid, rmid, arg_flags)
if (__db_xid_to_txn(dbenv, xid, &off) != 0)
return (XAER_NOTA);
- td = R_ADDR(&((DB_TXNMGR *)dbenv->tx_handle)->reginfo, off);
+ td = R_ADDR(&dbenv->tx_handle->reginfo, off);
if (td->xa_status == TXN_XA_DEADLOCKED)
return (XA_RBDEADLOCK);
@@ -462,15 +450,18 @@ __db_xa_prepare(xid, rmid, arg_flags)
/* Now, fill in the global transaction structure. */
if (__xa_get_txn(dbenv, &txnp, 0) != 0)
return (XAER_PROTO);
- __txn_continue(dbenv, txnp, td, off);
+ __txn_continue(dbenv, txnp, td);
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_put_txn(dbenv, txnp);
+ /*
+ * XXX
+ * This can fail in XA_MULTI_THREAD mode.
+ */
+ (void)__xa_put_txn(dbenv, txnp);
return (XA_OK);
}
@@ -509,7 +500,7 @@ __db_xa_commit(xid, rmid, arg_flags)
if (__db_xid_to_txn(dbenv, xid, &off) != 0)
return (XAER_NOTA);
- td = R_ADDR(&((DB_TXNMGR *)dbenv->tx_handle)->reginfo, off);
+ td = R_ADDR(&dbenv->tx_handle->reginfo, off);
if (td->xa_status == TXN_XA_DEADLOCKED)
return (XA_RBDEADLOCK);
@@ -526,13 +517,16 @@ __db_xa_commit(xid, rmid, arg_flags)
/* Now, fill in the global transaction structure. */
if (__xa_get_txn(dbenv, &txnp, 0) != 0)
return (XAER_RMERR);
- __txn_continue(dbenv, txnp, td, off);
+ __txn_continue(dbenv, txnp, td);
if (txnp->commit(txnp, 0) != 0)
return (XAER_RMERR);
- /* No fatal value that would require an XAER_RMFAIL. */
- __xa_put_txn(dbenv, txnp);
+ /*
+ * XXX
+ * This can fail in XA_MULTI_THREAD mode.
+ */
+ (void)__xa_put_txn(dbenv, txnp);
return (XA_OK);
}
@@ -601,7 +595,7 @@ __db_xa_rollback(xid, rmid, arg_flags)
if (__db_xid_to_txn(dbenv, xid, &off) != 0)
return (XAER_NOTA);
- td = R_ADDR(&((DB_TXNMGR *)dbenv->tx_handle)->reginfo, off);
+ td = R_ADDR(&dbenv->tx_handle->reginfo, off);
if (td->xa_status == TXN_XA_DEADLOCKED)
return (XA_RBDEADLOCK);
@@ -616,12 +610,15 @@ __db_xa_rollback(xid, rmid, arg_flags)
/* Now, fill in the global transaction structure. */
if (__xa_get_txn(dbenv, &txnp, 0) != 0)
return (XAER_RMERR);
- __txn_continue(dbenv, txnp, td, off);
+ __txn_continue(dbenv, txnp, td);
if (txnp->abort(txnp) != 0)
return (XAER_RMERR);
- /* No fatal value that would require an XAER_RMFAIL. */
- __xa_put_txn(dbenv, txnp);
+ /*
+ * XXX
+ * This can fail in XA_MULTI_THREAD mode.
+ */
+ (void)__xa_put_txn(dbenv, txnp);
return (XA_OK);
}
diff --git a/db/xa/xa_db.c b/db/xa/xa_db.c
index 550d47dd8..2c7276345 100644
--- a/db/xa/xa_db.c
+++ b/db/xa/xa_db.c
@@ -1,18 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1998-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: xa_db.c,v 11.26 2004/01/28 03:36:40 bostic Exp $
+ * $Id: xa_db.c,v 12.8 2006/08/24 14:46:54 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-#endif
-
#include "db_int.h"
#include "dbinc/txn.h"
@@ -23,6 +19,8 @@ static int __xa_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
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));
+static int __xa_set_txn __P((DB *, DB_TXN **, int));
+static int __xa_truncate __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
typedef struct __xa_methods {
int (*close) __P((DB *, u_int32_t));
@@ -32,18 +30,56 @@ typedef struct __xa_methods {
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 (*truncate) __P((DB *, DB_TXN *, u_int32_t *, 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; \
- } \
+/*
+ * __xa_set_txn --
+ * Find a transaction handle.
+ */
+static int
+__xa_set_txn(dbp, txnpp, no_xa_txn)
+ DB *dbp;
+ DB_TXN **txnpp;
+ int no_xa_txn;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = dbp->dbenv;
+
+ /*
+ * It doesn't make sense for a server to specify a DB_TXN handle.
+ * As the server can't know if other operations it has done have
+ * committed/aborted, it can self-deadlock. If the server wants
+ * other transactions, it can open other DB handles and use them.
+ * Disallow specified DB_TXN handles.
+ */
+ if (*txnpp != NULL) {
+ __db_errx(dbenv,
+ "transaction handles should not be directly specified to XA interfaces");
+ return (EINVAL);
+ }
+
+ /* See if the TM has declared a transaction. */
+ if ((ret = __xa_get_txn(dbenv, txnpp, 0)) != 0)
+ return (ret);
+ if ((*txnpp)->txnid != TXN_INVALID)
+ return (0);
+
+ /*
+ * We may be opening databases in the server initialization routine.
+ * In that case, it's reasonable not to have an XA transaction. It's
+ * also reasonable to open a database as part of an XA transaction,
+ * allow both.
+ */
+ if (no_xa_txn) {
+ *txnpp = NULL;
+ return (0);
+ }
+
+ __db_errx(dbenv, "no XA transaction declared");
+ return (EINVAL);
}
/*
@@ -60,8 +96,8 @@ __db_xa_create(dbp)
int ret;
/*
- * Interpose XA routines in front of any method that takes a TXN
- * ID as an argument.
+ * Allocate the XA internal structure, and wrap the open and close
+ * calls.
*/
if ((ret = __os_calloc(dbp->dbenv, 1, sizeof(XA_METHODS), &xam)) != 0)
return (ret);
@@ -79,7 +115,6 @@ __db_xa_create(dbp)
* __xa_open --
* XA open wrapper.
*/
-
static int
__xa_open(dbp, txn, name, subdb, type, flags, mode)
DB *dbp;
@@ -89,24 +124,28 @@ __xa_open(dbp, txn, name, subdb, type, flags, mode)
u_int32_t flags;
int mode;
{
- DB_TXN *t;
XA_METHODS *xam;
int ret;
xam = (XA_METHODS *)dbp->xa_internal;
- SET_TXN(txn, t);
- if ((ret = xam->open(dbp, t, name, subdb, type, flags, mode)) != 0)
+ if ((ret =
+ __xa_set_txn(dbp, &txn, LF_ISSET(DB_AUTO_COMMIT) ? 1 : 0)) != 0)
+ return (ret);
+ if ((ret = xam->open(dbp, txn, name, subdb, type, flags, mode)) != 0)
return (ret);
+ /* Wrap any DB handle method that takes a TXN ID as an argument. */
xam->cursor = dbp->cursor;
xam->del = dbp->del;
xam->get = dbp->get;
xam->put = dbp->put;
+ xam->truncate = dbp->truncate;
dbp->cursor = __xa_cursor;
dbp->del = __xa_del;
dbp->get = __xa_get;
dbp->put = __xa_put;
+ dbp->truncate = __xa_truncate;
return (0);
}
@@ -118,15 +157,12 @@ __xa_cursor(dbp, txn, dbcp, flags)
DBC **dbcp;
u_int32_t flags;
{
- DB_TXN *t;
-
- if (txn != NULL)
- t = txn;
- else if (__xa_get_txn(dbp->dbenv, &t, 0) != 0 ||
- t->txnid== TXN_INVALID)
- t = NULL;
+ int ret;
- return (((XA_METHODS *)dbp->xa_internal)->cursor (dbp, t, dbcp, flags));
+ if ((ret = __xa_set_txn(dbp, &txn, 0)) != 0)
+ return (ret);
+ return (((XA_METHODS *)
+ dbp->xa_internal)->cursor(dbp, txn, dbcp, flags));
}
static int
@@ -136,10 +172,11 @@ __xa_del(dbp, txn, key, flags)
DBT *key;
u_int32_t flags;
{
- DB_TXN *t;
+ int ret;
- SET_TXN(txn, t);
- return (((XA_METHODS *)dbp->xa_internal)->del(dbp, t, key, flags));
+ if ((ret = __xa_set_txn(dbp, &txn, 0)) != 0)
+ return (ret);
+ return (((XA_METHODS *)dbp->xa_internal)->del(dbp, txn, key, flags));
}
static int
@@ -164,11 +201,12 @@ __xa_get(dbp, txn, key, data, flags)
DBT *key, *data;
u_int32_t flags;
{
- DB_TXN *t;
+ int ret;
- SET_TXN(txn, t);
- return (((XA_METHODS *)dbp->xa_internal)->get
- (dbp, t, key, data, flags));
+ if ((ret = __xa_set_txn(dbp, &txn, 0)) != 0)
+ return (ret);
+ return (((XA_METHODS *)
+ dbp->xa_internal)->get(dbp, txn, key, data, flags));
}
static int
@@ -178,10 +216,24 @@ __xa_put(dbp, txn, key, data, flags)
DBT *key, *data;
u_int32_t flags;
{
- DB_TXN *t;
+ int ret;
- SET_TXN(txn, t);
+ if ((ret = __xa_set_txn(dbp, &txn, 0)) != 0)
+ return (ret);
+ return (((XA_METHODS *)
+ dbp->xa_internal)->put(dbp, txn, key, data, flags));
+}
+
+static int
+__xa_truncate(dbp, txn, countp, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ u_int32_t *countp, flags;
+{
+ int ret;
- return (((XA_METHODS *)dbp->xa_internal)->put
- (dbp, t, key, data, flags));
+ if ((ret = __xa_set_txn(dbp, &txn, 0)) != 0)
+ return (ret);
+ return (((XA_METHODS *)
+ dbp->xa_internal)->truncate(dbp, txn, countp, flags));
}
diff --git a/db/xa/xa_map.c b/db/xa/xa_map.c
index 80fb3dac4..c0bd7cb2b 100644
--- a/db/xa/xa_map.c
+++ b/db/xa/xa_map.c
@@ -1,20 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2004
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1996-2006
+ * Oracle Corporation. All rights reserved.
*
- * $Id: xa_map.c,v 11.25 2004/10/15 16:59:46 bostic Exp $
+ * $Id: xa_map.c,v 12.8 2006/08/24 14:46:54 bostic Exp $
*/
#include "db_config.h"
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <string.h>
-#endif
-
#include "db_int.h"
#include "dbinc/txn.h"
@@ -117,29 +111,23 @@ __db_unmap_rmid(rmid)
/*
* __db_map_xid
- * Create a mapping between this XID and the transaction at
- * "off" in the shared region.
+ * Create a mapping between this XID and the transaction
+ * "td" in the shared region.
*
- * PUBLIC: int __db_map_xid __P((DB_ENV *, XID *, size_t));
+ * PUBLIC: int __db_map_xid __P((DB_ENV *, XID *, TXN_DETAIL *));
*/
int
-__db_map_xid(dbenv, xid, off)
+__db_map_xid(dbenv, xid, td)
DB_ENV *dbenv;
XID *xid;
- size_t off;
-{
- REGINFO *infop;
TXN_DETAIL *td;
-
- infop = &((DB_TXNMGR *)dbenv->tx_handle)->reginfo;
- td = R_ADDR(infop, off);
-
- R_LOCK(dbenv, infop);
+{
+ TXN_SYSTEM_LOCK(dbenv);
memcpy(td->xid, xid->data, XIDDATASIZE);
td->bqual = (u_int32_t)xid->bqual_length;
td->gtrid = (u_int32_t)xid->gtrid_length;
td->format = (int32_t)xid->formatID;
- R_UNLOCK(dbenv, infop);
+ TXN_SYSTEM_UNLOCK(dbenv);
return (0);
}
@@ -161,6 +149,6 @@ __db_unmap_xid(dbenv, xid, off)
COMPQUIET(xid, NULL);
- td = R_ADDR(&((DB_TXNMGR *)dbenv->tx_handle)->reginfo, off);
+ td = R_ADDR(&dbenv->tx_handle->reginfo, off);
memset(td->xid, 0, sizeof(td->xid));
}